[grass] 01/16: Imported Upstream version 7.2.0~rc1

Bas Couwenberg sebastic at debian.org
Fri Oct 28 14:16:03 UTC 2016


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

sebastic pushed a commit to branch experimental
in repository grass.

commit 908400374eac09cbd7f7894f7a1c72dcab53b962
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Fri Oct 28 12:40:28 2016 +0200

    Imported Upstream version 7.2.0~rc1
---
 CHANGES                                            |   12 +-
 CITING                                             |    4 +-
 ChangeLog_7.0.5.gz                                 |  Bin 836154 -> 0 bytes
 ChangeLog_7.2.0RC1.gz                              |  Bin 0 -> 847678 bytes
 INSTALL                                            |   16 +-
 Makefile                                           |    5 +-
 NEWS                                               |   11 +
 README.debian                                      |    3 +-
 REQUIREMENTS.html                                  |   32 +-
 Vagrantfile                                        |  113 +
 config.guess                                       |  129 +-
 config.sub                                         |   30 +-
 configure                                          | 1933 +++--
 configure.in                                       |  208 +-
 db/db.columns/db.columns.html                      |    2 +-
 db/db.connect/db.connect.html                      |   44 +-
 db/db.copy/db.copy.html                            |    2 +-
 db/db.createdb/db.createdb.html                    |    2 +-
 db/db.databases/db.databases.html                  |    2 +-
 db/db.describe/db.describe.html                    |    2 +-
 db/db.drivers/db.drivers.html                      |    2 +-
 db/db.dropdb/db.dropdb.html                        |    2 +-
 db/db.execute/db.execute.html                      |    2 +-
 db/db.login/db.login.html                          |    4 +-
 db/db.select/db.select.html                        |    2 +-
 db/db.tables/db.tables.html                        |    2 +-
 db/drivers/dbf/grass-dbf.html                      |    2 +-
 db/drivers/mysql/grass-mesql.html                  |    2 +-
 db/drivers/mysql/grass-mysql.html                  |    2 +-
 db/drivers/odbc/grass-odbc.html                    |    2 +-
 db/drivers/ogr/grass-ogr.html                      |    2 +-
 db/drivers/postgres/dbdriver.h                     |    3 +
 db/drivers/postgres/grass-pg.html                  |    2 +-
 db/drivers/postgres/table.c                        |   44 +
 db/drivers/sqlite/db.c                             |    3 +
 db/drivers/sqlite/dbdriver.h                       |    4 +
 db/drivers/sqlite/grass-sqlite.html                |    2 +-
 db/drivers/sqlite/table.c                          |   44 +
 display/Makefile                                   |    1 +
 display/d.barscale/draw_scale.c                    | 1085 +--
 display/d.barscale/main.c                          |  187 +-
 display/d.barscale/options.h                       |    3 +-
 display/d.barscale/thumbnails/README               |   11 +-
 display/d.barscale/thumbnails/arrow_ends.png       |  Bin 235 -> 379 bytes
 display/d.barscale/thumbnails/both_ticks.png       |  Bin 180 -> 330 bytes
 display/d.barscale/thumbnails/classic.png          |  Bin 226 -> 324 bytes
 display/d.barscale/thumbnails/down_ticks.png       |  Bin 177 -> 329 bytes
 display/d.barscale/thumbnails/full_checker.png     |  Bin 189 -> 340 bytes
 display/d.barscale/thumbnails/hollow.png           |  Bin 175 -> 324 bytes
 display/d.barscale/thumbnails/line.png             |  Bin 225 -> 322 bytes
 display/d.barscale/thumbnails/mixed_checker.png    |  Bin 191 -> 343 bytes
 display/d.barscale/thumbnails/part_checker.png     |  Bin 195 -> 349 bytes
 display/d.barscale/thumbnails/solid.png            |  Bin 166 -> 317 bytes
 display/d.barscale/thumbnails/tail_checker.png     |  Bin 188 -> 341 bytes
 display/d.barscale/thumbnails/up_ticks.png         |  Bin 177 -> 327 bytes
 display/d.colorlist/d.colorlist.html               |    2 +-
 display/d.colortable/d.colortable.html             |    2 +-
 display/d.font/d.font.html                         |    2 +-
 display/d.geodesic/d.geodesic.html                 |    2 +-
 display/d.grid/d.grid.html                         |   49 +-
 display/d.grid/fiducial.c                          |   26 +-
 display/d.grid/local_proto.h                       |   11 +-
 display/d.grid/main.c                              |  169 +-
 display/d.grid/plot.c                              |  927 ++-
 display/d.grid/plotborder.c                        |  165 +-
 display/d.his/d.his.html                           |    2 +-
 display/d.info/main.c                              |   11 +-
 display/d.legend.vect/Makefile                     |   12 +
 display/d.legend.vect/d.legend.vect.html           |  107 +
 display/d.legend.vect/d_legend_vect.png            |  Bin 0 -> 94961 bytes
 .../d.legend.vect/d_legend_vect_subheadings.png    |  Bin 0 -> 2784 bytes
 display/d.legend.vect/draw.c                       |  293 +
 display/d.legend.vect/local_proto.h                |    5 +
 display/d.legend.vect/main.c                       |  294 +
 display/d.legend/d.legend.html                     |   52 +-
 .../d_legend_custom_labels_and_background.png      |  Bin 0 -> 140543 bytes
 display/d.legend/d_legend_logarithmic.png          |  Bin 0 -> 154536 bytes
 display/d.legend/draw.c                            | 1364 ++++
 display/d.legend/get_stats.c                       |  179 +-
 display/d.legend/histogram.c                       |  336 +-
 display/d.legend/local_proto.h                     |   19 +-
 display/d.legend/main.c                            | 1044 +--
 display/d.mon/Makefile                             |    2 +
 display/d.mon/d.mon.html                           |    6 +-
 display/d.mon/list.c                               |  149 +-
 display/d.mon/main.c                               |   50 +-
 display/d.mon/proto.h                              |   11 +-
 display/d.mon/render_cmd.py                        |  124 +
 display/d.mon/start.c                              |  225 +-
 display/d.mon/stop.c                               |   93 +-
 display/d.northarrow/Makefile                      |   12 +-
 display/d.northarrow/d.northarrow.html             |   27 +-
 display/d.northarrow/draw_n_arrow.c                |  203 +-
 display/d.northarrow/main.c                        |  118 +-
 display/d.northarrow/options.h                     |    4 +-
 display/d.northarrow/thumbnails/1a.png             |  Bin 0 -> 522 bytes
 display/d.northarrow/thumbnails/1b.png             |  Bin 0 -> 661 bytes
 display/d.northarrow/thumbnails/2.png              |  Bin 0 -> 455 bytes
 display/d.northarrow/thumbnails/3.png              |  Bin 0 -> 405 bytes
 display/d.northarrow/thumbnails/4.png              |  Bin 0 -> 569 bytes
 display/d.northarrow/thumbnails/5.png              |  Bin 0 -> 649 bytes
 display/d.northarrow/thumbnails/6.png              |  Bin 0 -> 725 bytes
 display/d.northarrow/thumbnails/7a.png             |  Bin 0 -> 401 bytes
 display/d.northarrow/thumbnails/7b.png             |  Bin 0 -> 402 bytes
 display/d.northarrow/thumbnails/8a.png             |  Bin 0 -> 657 bytes
 display/d.northarrow/thumbnails/8b.png             |  Bin 0 -> 624 bytes
 display/d.northarrow/thumbnails/9.png              |  Bin 0 -> 517 bytes
 display/d.northarrow/thumbnails/README             |   25 +
 display/d.northarrow/thumbnails/arrow1.png         |  Bin 0 -> 473 bytes
 display/d.northarrow/thumbnails/arrow2.png         |  Bin 0 -> 424 bytes
 display/d.northarrow/thumbnails/arrow3.png         |  Bin 0 -> 456 bytes
 display/d.northarrow/thumbnails/basic_compass.png  |  Bin 0 -> 584 bytes
 display/d.northarrow/thumbnails/fancy_compass.png  |  Bin 0 -> 581 bytes
 display/d.northarrow/thumbnails/star.png           |  Bin 0 -> 448 bytes
 display/d.path/d.path.html                         |    2 +-
 display/d.path/select.c                            |    2 +-
 display/d.profile/d.profile.html                   |    2 +-
 display/d.rast.arrow/d.rast.arrow.html             |   19 +-
 display/d.rast.arrow/main.c                        |   55 +-
 display/d.rast.num/d.rast.num.html                 |    2 +-
 display/d.rast.num/main.c                          |   35 +-
 display/d.rast/display.c                           |    2 -
 display/d.rgb/d.rgb.html                           |    2 +-
 display/d.rhumbline/d.rhumbline.html               |    2 +-
 display/d.rhumbline/main.c                         |    4 +-
 display/d.text/d.text.html                         |    2 +-
 display/d.text/main.c                              |   86 +-
 display/d.vect.chart/bar.c                         |   47 +-
 display/d.vect.chart/d.vect.chart.html             |   19 +-
 display/d.vect.chart/d_vect_chart_pie_3d.png       |  Bin 0 -> 93951 bytes
 display/d.vect.chart/global.h                      |    8 +-
 display/d.vect.chart/main.c                        |   11 +-
 display/d.vect.chart/pie.c                         |  157 +-
 display/d.vect.chart/plot.c                        |    7 +-
 display/d.vect.thematic/Makefile                   |    4 +-
 display/d.vect.thematic/d.vect.thematic.html       |   84 +-
 display/d.vect.thematic/d_vect_thematic.png        |  Bin 168911 -> 55543 bytes
 display/d.vect.thematic/display.c                  |  241 +
 display/d.vect.thematic/legend.c                   |   65 +
 display/d.vect.thematic/local_proto.h              |   20 +
 display/d.vect.thematic/main.c                     |  383 +-
 display/d.vect/d.vect.html                         |    2 +-
 display/d.vect/legend.c                            |   78 +
 display/d.vect/local_proto.h                       |    5 +
 display/d.vect/main.c                              |   46 +-
 display/d.where/d.where.html                       |    2 +-
 display/displaydrivers.html                        |   51 +
 doc/Makefile                                       |    7 +-
 doc/README                                         |  105 +
 doc/gi_3dview.jpg                                  |  Bin 0 -> 24639 bytes
 doc/gi_c.jpg                                       |  Bin 0 -> 5641 bytes
 doc/gi_cartography.jpg                             |  Bin 0 -> 23461 bytes
 doc/gi_database.jpg                                |  Bin 0 -> 16282 bytes
 doc/gi_display.jpg                                 |  Bin 0 -> 11901 bytes
 doc/gi_gallery.jpg                                 |  Bin 0 -> 15631 bytes
 doc/gi_general.jpg                                 |  Bin 0 -> 10679 bytes
 doc/gi_gui.jpg                                     |  Bin 0 -> 22020 bytes
 doc/gi_imagery.jpg                                 |  Bin 0 -> 23568 bytes
 doc/gi_misc.jpg                                    |  Bin 0 -> 15584 bytes
 doc/gi_python.jpg                                  |  Bin 0 -> 6554 bytes
 doc/gi_raster.jpg                                  |  Bin 0 -> 11312 bytes
 doc/gi_raster3d.jpg                                |  Bin 0 -> 21863 bytes
 doc/gi_temporal.jpg                                |  Bin 0 -> 12810 bytes
 doc/gi_vector.jpg                                  |  Bin 0 -> 8547 bytes
 doc/grass_database.html                            |  295 +
 doc/grass_database.png                             |  Bin 0 -> 46732 bytes
 doc/grass_database.svg                             |  510 ++
 doc/howto_release.txt                              |   53 +-
 doc/infrastructure.txt                             |   13 +-
 doc/projectionintro.html                           |    2 +-
 general/g.copy/g.copy.html                         |    2 +-
 general/g.copy/main.c                              |    2 +-
 general/g.filename/g.filename.html                 |    2 +-
 general/g.findetc/g.findetc.html                   |    2 +-
 general/g.findfile/g.findfile.html                 |    6 +-
 general/g.gisenv/g.gisenv.html                     |    2 +-
 general/g.gui/g.gui.html                           |    2 +-
 general/g.gui/main.c                               |   45 +-
 general/g.list/g.list.html                         |    2 +-
 general/g.list/global.h                            |   21 +
 general/g.list/list.c                              |  172 +
 general/g.list/main.c                              |  213 +-
 general/g.list/testsuite/test_g_list.py            |    7 +-
 general/g.mapset/g.mapset.html                     |    2 +-
 general/g.mapsets/g.mapsets.html                   |    2 +-
 general/g.message/g.message.html                   |    6 +-
 general/g.parser/g.parser.html                     |    4 +-
 general/g.proj/datumtrans.c                        |    6 +-
 general/g.proj/g.proj.html                         |    2 +-
 general/g.proj/output.c                            |    3 +-
 general/g.region/g.region.html                     |    2 +-
 general/g.region/printwindow.c                     |   23 +-
 general/g.remove/g.remove.html                     |    2 +-
 general/g.remove/testsuite/test_g_remove.py        |    9 +-
 general/g.rename/g.rename.html                     |    3 +-
 general/g.rename/testsuite/test_overwrite.py       |  120 +
 general/g.version/g.version.html                   |   20 +-
 general/g.version/main.c                           |    3 +-
 grasslib.dox                                       |   13 +-
 gui/icons/Makefile                                 |   32 +-
 gui/icons/grass.desktop                            |    4 +-
 gui/icons/grass.ico                                |  Bin 91062 -> 102134 bytes
 gui/icons/grass/locked.png                         |  Bin 0 -> 883 bytes
 gui/icons/grass/python.png                         |  Bin 0 -> 977 bytes
 gui/icons/grass/select.png                         |  Bin 0 -> 629 bytes
 gui/icons/grass/unlocked.png                       |  Bin 0 -> 880 bytes
 gui/icons/grass_osgeo.ico                          |  Bin 96438 -> 102134 bytes
 gui/images/Makefile                                |    2 +-
 gui/images/grass_world3-nq8.png                    |  Bin 0 -> 1806937 bytes
 gui/images/splash_screen.png                       |  Bin 191280 -> 190281 bytes
 gui/images/splash_screen.svg                       |  528 ++
 gui/images/startup_banner.png                      |  Bin 13762 -> 12529 bytes
 gui/images/startup_banner.svg                      |  369 +-
 gui/images/startup_banner.txt                      |   20 +-
 gui/images/startup_banner_isis.png                 |  Bin 82822 -> 25460 bytes
 gui/images/symbols/legend/area.png                 |  Bin 0 -> 234 bytes
 gui/images/symbols/legend/area_curved.png          |  Bin 0 -> 1193 bytes
 gui/images/symbols/legend/line.png                 |  Bin 0 -> 153 bytes
 gui/images/symbols/legend/line_crooked.png         |  Bin 0 -> 435 bytes
 gui/scripts/d.wms.py                               |   32 +-
 gui/wxpython/Makefile                              |   16 +-
 gui/wxpython/README                                |    4 +-
 gui/wxpython/animation/anim.py                     |   17 +-
 gui/wxpython/animation/controller.py               |  153 +-
 gui/wxpython/animation/data.py                     |   41 +-
 gui/wxpython/animation/dialogs.py                  |  957 ++-
 gui/wxpython/animation/frame.py                    |   84 +-
 gui/wxpython/animation/g.gui.animation.html        |    2 +-
 gui/wxpython/animation/g.gui.animation.py          |    7 +-
 gui/wxpython/animation/mapwindow.py                |   27 +-
 gui/wxpython/animation/nviztask.py                 |  108 +-
 gui/wxpython/animation/provider.py                 |  265 +-
 gui/wxpython/animation/temporal_manager.py         |  186 +-
 gui/wxpython/animation/toolbars.py                 |  117 +-
 gui/wxpython/animation/utils.py                    |   30 +-
 gui/wxpython/core/__init__.py                      |    2 +-
 gui/wxpython/core/debug.py                         |   29 +-
 gui/wxpython/core/gcmd.py                          |  398 +-
 gui/wxpython/core/gconsole.py                      |  148 +-
 gui/wxpython/core/giface.py                        |   32 +-
 gui/wxpython/core/globalvar.py                     |   55 +-
 gui/wxpython/core/gthread.py                       |   13 +-
 gui/wxpython/core/layerlist.py                     |   40 +-
 gui/wxpython/core/menutree.py                      |   61 +-
 gui/wxpython/core/render.py                        | 1098 ++-
 gui/wxpython/core/settings.py                      | 1442 ++--
 gui/wxpython/core/test.toolboxes_menudata.xml      |   85 -
 .../data/test_toolboxes_menu.xml}                  |    0
 .../testsuite/data/test_toolboxes_menudata_ref.xml |   85 +
 .../data/test_toolboxes_user_toolboxes.xml}        |    0
 gui/wxpython/core/testsuite/toolboxes.sh           |    7 +
 gui/wxpython/core/toolboxes.py                     |  106 +-
 gui/wxpython/core/treemodel.py                     |   55 +-
 gui/wxpython/core/units.py                         |  182 +-
 gui/wxpython/core/utils.py                         |  671 +-
 gui/wxpython/core/workspace.py                     |  955 ++-
 gui/wxpython/core/ws.py                            |  191 +-
 gui/wxpython/datacatalog/Makefile                  |    5 +
 gui/wxpython/datacatalog/__init__.py               |    5 +
 gui/wxpython/datacatalog/catalog.py                |   99 +
 gui/wxpython/datacatalog/frame.py                  |  130 +
 gui/wxpython/datacatalog/g.gui.datacatalog.html    |   58 +
 gui/wxpython/datacatalog/g.gui.datacatalog.py      |   52 +
 gui/wxpython/datacatalog/toolbars.py               |   84 +
 gui/wxpython/datacatalog/tree.py                   |  970 +++
 gui/wxpython/dbmgr/__init__.py                     |    2 +-
 gui/wxpython/dbmgr/base.py                         | 3063 ++++---
 gui/wxpython/dbmgr/dialogs.py                      |  585 +-
 gui/wxpython/dbmgr/g.gui.dbmgr.html                |    2 +-
 gui/wxpython/dbmgr/g.gui.dbmgr.py                  |   16 +-
 gui/wxpython/dbmgr/manager.py                      |  156 +-
 gui/wxpython/dbmgr/sqlbuilder.py                   |  702 +-
 gui/wxpython/dbmgr/vinfo.py                        |  123 +-
 gui/wxpython/docs/wxGUI.components.html            |    7 +-
 gui/wxpython/docs/wxGUI.html                       |   28 +-
 gui/wxpython/docs/wxGUI.iscatt.html                |    2 +-
 gui/wxpython/docs/wxGUI.modules.html               |  191 +
 gui/wxpython/docs/wxGUI.nviz.html                  |    2 +-
 gui/wxpython/docs/wxGUI.toolboxes.html             |    2 +-
 gui/wxpython/docs/wxGUI_map_display.jpg            |  Bin 305686 -> 204014 bytes
 gui/wxpython/docs/wxGUI_modules_flags.png          |  Bin 0 -> 15136 bytes
 gui/wxpython/docs/wxGUI_modules_parameters.png     |  Bin 0 -> 25352 bytes
 gui/wxpython/docs/wxGUI_modules_style_left.png     |  Bin 0 -> 20874 bytes
 gui/wxpython/docs/wxGUI_modules_style_top.png      |  Bin 0 -> 10654 bytes
 gui/wxpython/docs/wxGUI_modules_widget_file1.png   |  Bin 0 -> 4568 bytes
 gui/wxpython/docs/wxGUI_modules_widget_file2.png   |  Bin 0 -> 5853 bytes
 .../docs/wxGUI_modules_widget_selection.png        |  Bin 0 -> 2359 bytes
 .../docs/wxgui_sphinx/_templates/oholosidebar.html |    9 -
 gui/wxpython/docs/wxgui_sphinx/conf.py             |   47 +-
 gui/wxpython/gcp/__init__.py                       |    2 +-
 gui/wxpython/gcp/g.gui.gcp.html                    |    2 +-
 gui/wxpython/gcp/g.gui.gcp.py                      |    4 +
 gui/wxpython/gcp/manager.py                        | 1685 ++--
 gui/wxpython/gcp/mapdisplay.py                     |  187 +-
 gui/wxpython/gcp/statusbar.py                      |    2 +
 gui/wxpython/gcp/toolbars.py                       |   84 +-
 gui/wxpython/gis_set.py                            |  816 +-
 gui/wxpython/gis_set_error.py                      |   17 +-
 gui/wxpython/gmodeler/__init__.py                  |    2 +-
 gui/wxpython/gmodeler/dialogs.py                   |  798 +-
 gui/wxpython/gmodeler/frame.py                     | 1493 ++--
 gui/wxpython/gmodeler/g.gui.gmodeler.html          |  388 +-
 gui/wxpython/gmodeler/g.gui.gmodeler.py            |    4 +
 gui/wxpython/gmodeler/g_gui_gmodeler_avg_auto.png  |  Bin 113179 -> 0 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_avg_map.png   |  Bin 0 -> 26111 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_avg_run.png   |  Bin 0 -> 31593 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_comment.png   |  Bin 0 -> 428 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_db.png        |  Bin 0 -> 1571 bytes
 .../gmodeler/g_gui_gmodeler_dlg_module.png         |  Bin 22978 -> 7770 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_frame1.png    |  Bin 80586 -> 0 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_frame2.png    |  Bin 167067 -> 0 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_frame3.png    |  Bin 170739 -> 0 bytes
 .../gmodeler/g_gui_gmodeler_intermediate_data.png  |  Bin 0 -> 18188 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_items.png     |  Bin 0 -> 22397 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_loop.png      |  Bin 0 -> 1231 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_loop_dlg.png  |  Bin 0 -> 8777 bytes
 .../gmodeler/g_gui_gmodeler_loop_final.png         |  Bin 0 -> 11650 bytes
 .../gmodeler/g_gui_gmodeler_lower_toolbar.png      |  Bin 133519 -> 66024 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_model_avg.png |  Bin 0 -> 15678 bytes
 .../g_gui_gmodeler_model_classification.png        |  Bin 0 -> 55170 bytes
 .../gmodeler/g_gui_gmodeler_model_landslides.png   |  Bin 0 -> 34352 bytes
 .../gmodeler/g_gui_gmodeler_model_properties.png   |  Bin 0 -> 8124 bytes
 .../gmodeler/g_gui_gmodeler_model_usle.png         |  Bin 0 -> 37558 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modis_1.png   |  Bin 0 -> 119607 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modis_1o.png  |  Bin 0 -> 126748 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modis_2.png   |  Bin 0 -> 110025 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modis_2o.png  |  Bin 0 -> 122316 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modis_3.png   |  Bin 0 -> 119852 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modis_3o.png  |  Bin 0 -> 124367 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modul.png     |  Bin 0 -> 495 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_modulex.png   |  Bin 0 -> 363 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_parameter.png |  Bin 57281 -> 19459 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_python.png    |  Bin 0 -> 16647 bytes
 .../gmodeler/g_gui_gmodeler_python_code.png        |  Bin 0 -> 16854 bytes
 .../gmodeler/g_gui_gmodeler_python_code_result.png |  Bin 0 -> 13366 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_raster.png    |  Bin 0 -> 1626 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_raster3d.png  |  Bin 0 -> 1812 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_relation.png  |  Bin 0 -> 600 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_toolbar.png   |  Bin 50082 -> 10071 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_variables.png |  Bin 0 -> 18479 bytes
 .../gmodeler/g_gui_gmodeler_variables_raster.png   |  Bin 0 -> 14509 bytes
 .../gmodeler/g_gui_gmodeler_variables_run.png      |  Bin 0 -> 8146 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_vector.png    |  Bin 0 -> 1537 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_zc.png        |  Bin 72731 -> 0 bytes
 gui/wxpython/gmodeler/g_gui_gmodeler_zc_items.png  |  Bin 100224 -> 0 bytes
 gui/wxpython/gmodeler/giface.py                    |    8 +-
 gui/wxpython/gmodeler/menudata.py                  |   12 +-
 gui/wxpython/gmodeler/model.py                     | 1615 ++--
 gui/wxpython/gmodeler/preferences.py               |  914 ++-
 gui/wxpython/gmodeler/toolbars.py                  |   78 +-
 gui/wxpython/gui_core/__init__.py                  |    2 +-
 gui/wxpython/gui_core/dialogs.py                   | 2644 +++---
 gui/wxpython/gui_core/forms.py                     | 2309 +++---
 gui/wxpython/gui_core/ghelp.py                     |  726 +-
 gui/wxpython/gui_core/goutput.py                   |  495 +-
 gui/wxpython/gui_core/gselect.py                   | 1167 ++-
 gui/wxpython/gui_core/mapdisp.py                   |  394 +-
 gui/wxpython/gui_core/menu.py                      |  145 +-
 gui/wxpython/gui_core/preferences.py               | 2359 +++---
 gui/wxpython/gui_core/prompt.py                    |  253 +-
 gui/wxpython/gui_core/pyedit.py                    |  695 ++
 gui/wxpython/gui_core/pystc.py                     |  281 +-
 gui/wxpython/gui_core/query.py                     |  133 +-
 gui/wxpython/gui_core/simplelmgr.py                |   93 +-
 gui/wxpython/gui_core/toolbars.py                  |  208 +-
 gui/wxpython/gui_core/treeview.py                  |   92 +-
 gui/wxpython/gui_core/vselect.py                   |  429 +
 gui/wxpython/gui_core/widgets.py                   |  457 +-
 gui/wxpython/iclass/__init__.py                    |    2 +-
 gui/wxpython/iclass/dialogs.py                     |  624 +-
 gui/wxpython/iclass/digit.py                       |  111 +-
 gui/wxpython/iclass/frame.py                       | 1038 +--
 gui/wxpython/iclass/g.gui.iclass.html              |    2 +-
 gui/wxpython/iclass/g.gui.iclass.py                |    8 +-
 gui/wxpython/iclass/plots.py                       |  220 +-
 gui/wxpython/iclass/statistics.py                  |   78 +-
 gui/wxpython/iclass/toolbars.py                    |  235 +-
 gui/wxpython/icons/__init__.py                     |    2 +-
 gui/wxpython/icons/icon.py                         |   65 +-
 gui/wxpython/iscatt/__init__.py                    |    2 +-
 gui/wxpython/iscatt/controllers.py                 |  504 +-
 gui/wxpython/iscatt/core_c.py                      |  153 +-
 gui/wxpython/iscatt/dialogs.py                     |  371 +-
 gui/wxpython/iscatt/frame.py                       |  305 +-
 gui/wxpython/iscatt/iscatt_core.py                 |  320 +-
 gui/wxpython/iscatt/plots.py                       |  535 +-
 gui/wxpython/iscatt/toolbars.py                    |  275 +-
 gui/wxpython/lmgr/__init__.py                      |    3 +-
 gui/wxpython/lmgr/frame.py                         | 1705 ++--
 gui/wxpython/lmgr/giface.py                        |   33 +-
 gui/wxpython/lmgr/layertree.py                     | 1727 ++--
 gui/wxpython/lmgr/menudata.py                      |   10 +-
 gui/wxpython/lmgr/pyshell.py                       |   98 +-
 gui/wxpython/lmgr/toolbars.py                      |  206 +-
 gui/wxpython/location_wizard/__init__.py           |    2 +-
 gui/wxpython/location_wizard/base.py               |   27 +-
 gui/wxpython/location_wizard/dialogs.py            |  482 +-
 gui/wxpython/location_wizard/wizard.py             | 1765 ++--
 gui/wxpython/mapdisp/__init__.py                   |    2 +-
 gui/wxpython/mapdisp/frame.py                      | 1082 +--
 gui/wxpython/mapdisp/gprint.py                     |   11 +-
 gui/wxpython/mapdisp/main.py                       |  422 +-
 gui/wxpython/mapdisp/statusbar.py                  |  766 +-
 gui/wxpython/mapdisp/test_mapdisp.py               |   45 +-
 gui/wxpython/mapdisp/toolbars.py                   |  309 +-
 gui/wxpython/mapswipe/__init__.py                  |    2 +-
 gui/wxpython/mapswipe/dialogs.py                   |  204 +-
 gui/wxpython/mapswipe/frame.py                     |  370 +-
 gui/wxpython/mapswipe/g.gui.mapswipe.py            |    4 +
 gui/wxpython/mapswipe/mapwindow.py                 |   83 +-
 gui/wxpython/mapswipe/toolbars.py                  |   52 +-
 gui/wxpython/mapwin/__init__.py                    |    2 +-
 gui/wxpython/mapwin/analysis.py                    |   88 +-
 gui/wxpython/mapwin/base.py                        |  116 +-
 gui/wxpython/mapwin/buffered.py                    |  902 +-
 gui/wxpython/mapwin/decorations.py                 |  288 +-
 gui/wxpython/mapwin/graphics.py                    |  134 +-
 gui/wxpython/modules/__init__.py                   |    2 +-
 gui/wxpython/modules/colorrules.py                 | 1714 ++--
 gui/wxpython/modules/extensions.py                 |  444 +-
 gui/wxpython/modules/histogram.py                  |  404 +-
 gui/wxpython/modules/import_export.py              |  946 +++
 gui/wxpython/modules/mapsets_picker.py             |   11 +-
 gui/wxpython/modules/mcalc_builder.py              |  699 +-
 gui/wxpython/modules/vclean.py                     |  173 +-
 gui/wxpython/modules/vkrige.py                     |  793 +-
 gui/wxpython/nviz/__init__.py                      |    2 +-
 gui/wxpython/nviz/animation.py                     |  108 +-
 gui/wxpython/nviz/main.py                          |   10 +-
 gui/wxpython/nviz/mapwindow.py                     | 1941 ++---
 gui/wxpython/nviz/preferences.py                   |  969 ++-
 gui/wxpython/nviz/tools.py                         | 5479 +++++++------
 gui/wxpython/nviz/workspace.py                     |  201 +-
 gui/wxpython/nviz/wxnviz.py                        | 1191 +--
 gui/wxpython/psmap/__init__.py                     |    2 +-
 gui/wxpython/psmap/dialogs.py                      | 6360 ++++++++++-----
 gui/wxpython/psmap/frame.py                        | 1805 ++--
 gui/wxpython/psmap/g.gui.psmap.html                |    2 +-
 gui/wxpython/psmap/g.gui.psmap.py                  |    4 +
 gui/wxpython/psmap/instructions.py                 | 1495 ++--
 gui/wxpython/psmap/menudata.py                     |   13 +-
 gui/wxpython/psmap/toolbars.py                     |  157 +-
 gui/wxpython/psmap/utils.py                        |  292 +-
 gui/wxpython/rdigit/__init__.py                    |    4 +
 gui/wxpython/rdigit/controller.py                  |  611 ++
 gui/wxpython/rdigit/dialogs.py                     |  129 +
 gui/wxpython/rdigit/toolbars.py                    |  194 +
 gui/wxpython/rlisetup/__init__.py                  |    2 +-
 gui/wxpython/rlisetup/frame.py                     |  113 +-
 gui/wxpython/rlisetup/functions.py                 |    6 +-
 gui/wxpython/rlisetup/g.gui.rlisetup.html          |    2 +-
 gui/wxpython/rlisetup/g.gui.rlisetup.py            |    4 +
 gui/wxpython/rlisetup/sampling_frame.py            |  134 +-
 gui/wxpython/rlisetup/wizard.py                    |  448 +-
 gui/wxpython/timeline/__init__.py                  |    2 +-
 gui/wxpython/timeline/frame.py                     |  181 +-
 gui/wxpython/timeline/g.gui.timeline.html          |    2 +-
 gui/wxpython/timeline/g.gui.timeline.py            |    4 +
 gui/wxpython/tools/build_modules_xml.py            |   13 +-
 gui/wxpython/tools/update_menudata.py              |   68 +-
 gui/wxpython/tplot/__init__.py                     |    2 +-
 gui/wxpython/tplot/frame.py                        |  231 +-
 gui/wxpython/tplot/g.gui.tplot.py                  |   13 +-
 gui/wxpython/vdigit/__init__.py                    |    2 +-
 gui/wxpython/vdigit/dialogs.py                     |  452 +-
 gui/wxpython/vdigit/g.gui.vdigit.html              |    2 +-
 gui/wxpython/vdigit/g.gui.vdigit.py                |   22 +-
 gui/wxpython/vdigit/main.py                        |   10 +-
 gui/wxpython/vdigit/mapwindow.py                   |  744 +-
 gui/wxpython/vdigit/preferences.py                 | 1042 ++-
 gui/wxpython/vdigit/toolbars.py                    |  807 +-
 gui/wxpython/vdigit/wxdigit.py                     | 1131 +--
 gui/wxpython/vdigit/wxdisplay.py                   |  727 +-
 gui/wxpython/vnet/__init__.py                      |    2 +-
 gui/wxpython/vnet/dialogs.py                       | 1417 ++--
 gui/wxpython/vnet/toolbars.py                      |  203 +-
 gui/wxpython/vnet/vnet_core.py                     |  702 +-
 gui/wxpython/vnet/vnet_data.py                     | 1002 +--
 gui/wxpython/vnet/vnet_utils.py                    |   99 +-
 gui/wxpython/vnet/widgets.py                       |  194 +-
 gui/wxpython/web_services/__init__.py              |    2 +-
 gui/wxpython/web_services/cap_interface.py         |   99 +-
 gui/wxpython/web_services/dialogs.py               |  621 +-
 gui/wxpython/web_services/widgets.py               |  470 +-
 gui/wxpython/wxgui.py                              |   50 +-
 gui/wxpython/wxplot/__init__.py                    |    2 +-
 gui/wxpython/wxplot/base.py                        |  403 +-
 gui/wxpython/wxplot/dialogs.py                     | 1377 ++--
 gui/wxpython/wxplot/histogram.py                   |  176 +-
 gui/wxpython/wxplot/profile.py                     |  292 +-
 gui/wxpython/wxplot/scatter.py                     |  182 +-
 gui/wxpython/xml/menudata.README                   |    2 +-
 gui/wxpython/xml/menudata_modeler.xml              |    6 +
 gui/wxpython/xml/menudata_pyedit.xml               |  113 +
 gui/wxpython/xml/toolboxes.xml                     |   78 +-
 gui/wxpython/xml/wxgui_items.xml                   |   11 +-
 imagery/i.albedo/bb_alb_aster2bands.c              |   14 +
 imagery/i.albedo/bb_alb_landsat8.c                 |   26 +
 imagery/i.albedo/functions.h                       |    1 +
 imagery/i.albedo/i.albedo.html                     |   13 +-
 imagery/i.albedo/main.c                            |  493 +-
 imagery/i.aster.toar/i.aster.toar.html             |    2 +-
 imagery/i.atcorr/common.h                          |    2 +-
 imagery/i.atcorr/geomcond.cpp                      |    8 +-
 imagery/i.atcorr/geomcond.h                        |    4 +-
 imagery/i.atcorr/i.atcorr.html                     |   17 +-
 imagery/i.atcorr/iwave.cpp                         |  215 +-
 imagery/i.atcorr/iwave.h                           |    8 +-
 imagery/i.atcorr/sensors_csv/geoeye1.csv           |  652 ++
 imagery/i.biomass/i.biomass.html                   |    2 +-
 imagery/i.biomass/solar_day.c                      |   10 +-
 imagery/i.cca/i.cca.html                           |    2 +-
 imagery/i.cluster/i.cluster.html                   |    2 +-
 imagery/i.cluster/main.c                           |   25 +-
 imagery/i.cluster/open_files.c                     |   10 -
 imagery/i.eb.eta/i.eb.eta.html                     |    2 +-
 imagery/i.eb.evapfr/i.eb.evapfr.html               |    2 +-
 imagery/i.eb.hsebal01/i.eb.hsebal01.html           |    2 +-
 imagery/i.eb.netrad/i.eb.netrad.html               |    2 +-
 imagery/i.eb.netrad/r_net.c                        |   12 +-
 imagery/i.eb.soilheatflux/i.eb.soilheatflux.html   |    2 +-
 imagery/i.emissivity/i.emissivity.html             |    2 +-
 imagery/i.evapo.mh/i.evapo.mh.html                 |    2 +-
 imagery/i.evapo.pm/i.evapo.pm.html                 |    2 +-
 imagery/i.evapo.pt/i.evapo.pt.html                 |    2 +-
 imagery/i.evapo.time/i.evapo.time.html             |    2 +-
 imagery/i.fft/i.fft.html                           |    2 +-
 imagery/i.gensig/i.gensig.html                     |    2 +-
 imagery/i.gensig/parse.c                           |   12 +-
 imagery/i.gensigset/i.gensigset.html               |    2 +-
 imagery/i.gensigset/parse.c                        |   11 +-
 imagery/i.group/i.group.html                       |    2 +-
 imagery/i.his.rgb/i.his.rgb.html                   |    2 +-
 imagery/i.ifft/i.ifft.html                         |    2 +-
 imagery/i.landsat.acca/i.landsat.acca.html         |    2 +-
 imagery/i.landsat.toar/i.landsat.toar.html         |    2 +-
 imagery/i.maxlik/i.maxlik.html                     |    2 +-
 imagery/i.modis.qc/i.modis.qc.html                 |    2 +-
 imagery/i.modis.qc/main.c                          |   81 +-
 imagery/i.modis.qc/mod13Q1a.c                      |   18 +
 imagery/i.modis.qc/mod13Q1b.c                      |   27 +
 imagery/i.modis.qc/mod13Q1c.c                      |   20 +
 imagery/i.modis.qc/mod13Q1d.c                      |   18 +
 imagery/i.modis.qc/mod13Q1e.c                      |   18 +
 imagery/i.modis.qc/mod13Q1f.c                      |   18 +
 imagery/i.modis.qc/mod13Q1g.c                      |   24 +
 imagery/i.modis.qc/mod13Q1h.c                      |   18 +
 imagery/i.modis.qc/mod13Q1i.c                      |   18 +
 imagery/i.ortho.photo/README                       |   15 +-
 imagery/i.pca/i.pca.html                           |    2 +-
 imagery/i.rectify/target.c                         |    3 +-
 imagery/i.rgb.his/i.rgb.his.html                   |    2 +-
 imagery/i.segment/README                           |   19 +
 imagery/i.segment/create_isegs.c                   | 1453 +---
 imagery/i.segment/i.segment.html                   |    2 +-
 imagery/i.segment/iseg.h                           |   17 +-
 imagery/i.segment/mean_shift.c                     |  114 +
 imagery/i.segment/parse_args.c                     |   23 +-
 imagery/i.segment/region_growing.c                 | 1460 ++++
 imagery/i.segment/watershed.c                      |   23 +
 imagery/i.smap/i.smap.html                         |    2 +-
 imagery/i.target/i.target.html                     |    2 +-
 imagery/i.topo.corr/i.topo.corr.html               |    2 +-
 imagery/i.topo.corr/local_proto.h                  |    7 +-
 .../test_i.topo.corr_synthetic_DEM_NC.sh           |    2 +-
 imagery/i.vi/i.vi.html                             |  194 +-
 imagery/i.vi/main.c                                |   22 +-
 include/Make/Doxyfile_arch_html.in                 |    8 +-
 include/Make/Doxyfile_arch_latex.in                |    6 +-
 include/Make/Grass.make                            |    4 +-
 include/Make/GuiScript.make                        |    6 +-
 include/Make/Html.make                             |    2 +-
 include/Make/Module.make                           |   10 +-
 include/Make/Platform.make.in                      |   19 +-
 include/VERSION                                    |    4 +-
 include/calc.h                                     |   45 +
 include/config.h.in                                |    3 +
 include/defs/calc.h                                |  107 +
 include/defs/gis.h                                 |   72 +-
 include/defs/imagery.h                             |    1 +
 include/defs/neta.h                                |    4 +-
 include/defs/raster.h                              |   11 +-
 include/defs/raster3d.h                            |    5 +
 include/defs/vector.h                              |   28 +-
 include/gis.h                                      |   11 +-
 include/gmath.h                                    |    6 +-
 include/la.h                                       |    8 +
 include/raster3d.h                                 |   12 +
 include/symbol.h                                   |    2 +
 lib/Makefile                                       |    4 +-
 lib/btree2/Makefile                                |   10 +-
 lib/btree2/README                                  |   75 -
 lib/btree2/btree2.dox                              |  175 +
 lib/btree2/kdtree.c                                | 1351 +++
 lib/btree2/kdtree.h                                |  181 +
 lib/cairodriver/cairodriver.html                   |    2 +-
 lib/calc/Makefile                                  |    8 +
 lib/calc/calc.c                                    |   62 +
 lib/calc/check.c                                   |  159 +
 lib/calc/function.c                                |   79 +
 lib/calc/xabs.c                                    |   67 +
 lib/calc/xacos.c                                   |   48 +
 lib/calc/xadd.c                                    |   76 +
 lib/calc/xand.c                                    |   39 +
 lib/calc/xand2.c                                   |   46 +
 lib/calc/xasin.c                                   |   48 +
 lib/calc/xatan.c                                   |   64 +
 lib/calc/xbitand.c                                 |   38 +
 lib/calc/xbitnot.c                                 |   35 +
 lib/calc/xbitor.c                                  |   38 +
 lib/calc/xbitxor.c                                 |   38 +
 lib/calc/xcos.c                                    |   47 +
 lib/calc/xdiv.c                                    |   79 +
 lib/calc/xdouble.c                                 |   76 +
 lib/calc/xeq.c                                     |   70 +
 lib/calc/xeval.c                                   |   73 +
 lib/calc/xexp.c                                    |   53 +
 lib/calc/xfloat.c                                  |   76 +
 lib/calc/xge.c                                     |   63 +
 lib/calc/xgraph.c                                  |  178 +
 lib/calc/xgt.c                                     |   63 +
 lib/calc/xif.c                                     |  303 +
 lib/calc/xint.c                                    |   76 +
 lib/calc/xisnull.c                                 |   64 +
 lib/calc/xle.c                                     |   63 +
 lib/calc/xlog.c                                    |   59 +
 lib/calc/xlt.c                                     |   63 +
 lib/calc/xmax.c                                    |   98 +
 lib/calc/xmedian.c                                 |  153 +
 lib/calc/xmin.c                                    |   98 +
 lib/calc/xmod.c                                    |   78 +
 lib/calc/xmode.c                                   |  142 +
 lib/calc/xmul.c                                    |   76 +
 lib/calc/xne.c                                     |   63 +
 lib/calc/xneg.c                                    |   62 +
 lib/calc/xnmax.c                                   |   98 +
 lib/calc/xnmedian.c                                |  150 +
 lib/calc/xnmin.c                                   |   98 +
 lib/calc/xnmode.c                                  |  139 +
 lib/calc/xnot.c                                    |   50 +
 lib/calc/xnull.c                                   |   25 +
 lib/calc/xor.c                                     |   39 +
 lib/calc/xor2.c                                    |   46 +
 lib/calc/xpow.c                                    |   96 +
 lib/calc/xrand.c                                   |   89 +
 lib/calc/xround.c                                  |  203 +
 lib/calc/xshiftl.c                                 |   36 +
 lib/calc/xshiftr.c                                 |   36 +
 lib/calc/xshiftru.c                                |   36 +
 lib/calc/xsin.c                                    |   47 +
 lib/calc/xsqrt.c                                   |   43 +
 lib/calc/xsub.c                                    |   68 +
 lib/calc/xtan.c                                    |   48 +
 lib/db/dbmi_client/copy_tab.c                      |   30 +-
 lib/db/sqlp/sql.html                               |    2 +-
 lib/display/r_raster.c                             |  156 +-
 lib/driver/font.c                                  |    2 +
 lib/gis/cmprbzip.c                                 |  175 +
 lib/gis/cmprlz4.c                                  |  145 +
 lib/gis/cmprrle.c                                  |  192 +
 lib/gis/cmprzlib.c                                 |  231 +
 lib/gis/colors.desc                                |    4 +
 lib/gis/colors/grass                               |  108 +
 lib/gis/colors/roygbiv                             |   15 +
 lib/gis/colors/soilmoisture                        |   16 +
 lib/gis/colors/viridis                             |  262 +
 lib/gis/colors/water                               |    2 +
 lib/gis/compress.c                                 |  375 +
 lib/gis/compress.h                                 |   53 +
 lib/gis/ellipse.table.solar.system                 |    2 +
 lib/gis/error.c                                    |    2 +-
 lib/gis/file_name.c                                |  184 +-
 lib/gis/flate.c                                    |  441 -
 lib/gis/get_window.c                               |    2 +-
 lib/gis/gis_local_proto.h                          |   23 +-
 lib/gis/gisinit.c                                  |    6 +-
 lib/gis/gislib.dox                                 |   42 +
 lib/gis/home.c                                     |    2 +-
 lib/gis/local_proto.h                              |   26 -
 lib/gis/location.c                                 |    2 +-
 lib/gis/lz4.c                                      | 1516 ++++
 lib/gis/lz4.h                                      |  360 +
 lib/gis/mapset_msc.c                               |   55 +-
 lib/gis/mapset_nme.c                               |    2 +-
 lib/gis/open.c                                     |   41 +-
 lib/gis/open_misc.c                                |    2 +-
 lib/gis/parser.c                                   |   91 +-
 lib/gis/parser_help.c                              |    1 +
 lib/gis/parser_html.c                              |   10 +-
 lib/gis/parser_standard_options.c                  |   41 +-
 lib/gis/parser_wps.c                               |    2 +-
 lib/gis/progrm_nme.c                               |   21 +
 lib/gis/proj3.c                                    |   19 +-
 lib/gis/put_window.c                               |    2 +-
 lib/gis/rd_cellhd.c                                |    2 +-
 lib/gis/remove.c                                   |   26 +-
 lib/gis/rename.c                                   |   17 +-
 lib/gis/renamed_options                            |   16 +-
 lib/gis/set_window.c                               |    2 +-
 lib/gis/tempfile.c                                 |   27 +-
 lib/gis/testsuite/gis_lib_tokenize.py              |   81 +
 lib/gpde/gpdelib.dox                               |    4 +-
 lib/htmldriver/htmldriver.html                     |    2 +-
 lib/htmldriver/polygon.c                           |    2 +-
 lib/imagery/find.c                                 |   59 +-
 lib/init/Makefile                                  |    2 +-
 lib/init/README                                    |   22 +-
 lib/init/grass.py                                  | 1640 ++--
 lib/init/grass.sh                                  |    2 +-
 lib/init/grass7.html                               |  114 +-
 lib/init/helptext.html                             |    8 +-
 lib/init/variables.html                            |   75 +-
 lib/loc_struct.png                                 |  Bin 37444 -> 54377 bytes
 lib/manage/do_copy.c                               |    2 +
 lib/pngdriver/pngdriver.html                       |    2 +-
 lib/proj/README.txt                                |   15 +-
 lib/proj/projlib.dox                               |   17 +-
 lib/psdriver/psdriver.html                         |    2 +-
 lib/python/Makefile                                |    2 +-
 lib/python/ctypes/__init__.py                      |    2 +-
 lib/python/ctypes/ctypesgen.py                     |  127 +-
 lib/python/ctypes/ctypesgencore/__init__.py        |   22 +-
 lib/python/ctypes/ctypesgencore/ctypedescs.py      |  229 +-
 lib/python/ctypes/ctypesgencore/descriptions.py    |  200 +-
 lib/python/ctypes/ctypesgencore/expressions.py     |  181 +-
 lib/python/ctypes/ctypesgencore/libraryloader.py   |  118 +-
 lib/python/ctypes/ctypesgencore/messages.py        |   16 +-
 lib/python/ctypes/ctypesgencore/options.py         |    7 +-
 lib/python/ctypes/ctypesgencore/parser/__init__.py |    7 +-
 .../ctypes/ctypesgencore/parser/cdeclarations.py   |   29 +-
 lib/python/ctypes/ctypesgencore/parser/cgrammar.py |  426 +-
 lib/python/ctypes/ctypesgencore/parser/cparser.py  |   88 +-
 .../ctypes/ctypesgencore/parser/ctypesparser.py    |   88 +-
 .../ctypesgencore/parser/datacollectingparser.py   |  283 +-
 lib/python/ctypes/ctypesgencore/parser/lex.py      |  673 +-
 lib/python/ctypes/ctypesgencore/parser/lextab.py   |   59 +-
 lib/python/ctypes/ctypesgencore/parser/parsetab.py |  520 +-
 lib/python/ctypes/ctypesgencore/parser/pplexer.py  |  103 +-
 .../ctypes/ctypesgencore/parser/preprocessor.py    |   74 +-
 lib/python/ctypes/ctypesgencore/parser/yacc.py     | 1358 +--
 .../ctypes/ctypesgencore/printer/__init__.py       |    4 +-
 .../ctypes/ctypesgencore/printer/defaultheader.py  |    2 +-
 .../ctypes/ctypesgencore/printer/preamble.py       |  172 +-
 lib/python/ctypes/ctypesgencore/printer/printer.py |  389 +-
 lib/python/ctypes/ctypesgencore/printer/test.py    |    2 +-
 .../ctypes/ctypesgencore/processor/__init__.py     |    2 +-
 .../ctypes/ctypesgencore/processor/dependencies.py |   89 +-
 .../ctypes/ctypesgencore/processor/operations.py   |  209 +-
 .../ctypes/ctypesgencore/processor/pipeline.py     |  114 +-
 lib/python/ctypes/fix.sed                          |    6 +-
 lib/python/ctypes/loader.py                        |  118 +-
 lib/python/ctypes/preamble.py                      |   35 +-
 lib/python/docs/Makefile                           |    2 +
 lib/python/docs/conf.py                            |    1 +
 lib/python/docs/src/gunittest_running_tests.rst    |  155 +
 lib/python/docs/src/gunittest_testing.rst          |  722 ++
 lib/python/docs/src/index.rst                      |    2 +
 lib/python/docs/src/pygrass_gis.rst                |    2 +-
 lib/python/docs/src/pygrass_vector.rst             |   11 +-
 lib/python/docs/src/script_intro.rst               |    6 +-
 .../exceptions/testsuite/test_ScriptError.py       |    4 +-
 lib/python/gunittest/Makefile                      |   28 +
 lib/python/gunittest/__init__.py                   |   16 +
 lib/python/gunittest/case.py                       | 1226 +++
 lib/python/gunittest/checkers.py                   |  625 ++
 lib/python/gunittest/gmodules.py                   |  132 +
 lib/python/gunittest/gutils.py                     |   58 +
 lib/python/gunittest/invoker.py                    |  257 +
 lib/python/gunittest/loader.py                     |  175 +
 lib/python/gunittest/main.py                       |  178 +
 lib/python/gunittest/multireport.py                |  504 ++
 lib/python/gunittest/multirunner.py                |  125 +
 lib/python/gunittest/reporters.py                  | 1184 +++
 lib/python/gunittest/runner.py                     |  493 ++
 .../testsuite/data/samplecode/fake_code.py         |    1 +
 .../data/samplecode/submodule_errors/fake_code.py  |    1 +
 .../subsubmodule_errors/fake_code.py               |    1 +
 .../subsubmodule_errors/testsuite/test_error.py    |   58 +
 .../testsuite/test_import_error.py                 |   22 +
 .../subsubmodule_exiting/fake_code.py              |    1 +
 .../testsuite/test_gfatalerror.py                  |   16 +
 .../testsuite/test_osexit_one.py                   |   16 +
 .../testsuite/test_osexit_zero.py                  |   16 +
 .../subsubmodule_exiting/testsuite/test_segfaut.py |   23 +
 .../testsuite/test_sysexit_one.py                  |   16 +
 .../testsuite/test_sysexit_zero.py                 |   16 +
 .../samplecode/submodule_test_fail/fake_code.py    |    1 +
 .../submodule_test_fail/testsuite/test_fail.py     |   15 +
 .../data/samplecode/testsuite/test_good_and_bad.py |   24 +
 .../samplecode/testsuite/test_python_unittest.py   |   40 +
 .../data/samplecode/testsuite/test_success.py      |   36 +
 .../simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt   |   67 +
 ...ctor_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt |   67 +
 ..._vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt |   67 +
 lib/python/gunittest/testsuite/test_assertions.py  |  357 +
 .../gunittest/testsuite/test_assertions_rast3d.py  |  127 +
 .../gunittest/testsuite/test_assertions_vect.py    |  233 +
 lib/python/gunittest/testsuite/test_checkers.py    |  398 +
 lib/python/gunittest/testsuite/test_doctests.py    |   41 +
 lib/python/gunittest/testsuite/test_gmodules.py    |   94 +
 .../gunittest/testsuite/test_module_assertions.py  |   81 +
 lib/python/gunittest/utils.py                      |   75 +
 lib/python/pygrass/Makefile                        |    3 +-
 lib/python/pygrass/errors.py                       |   12 +
 lib/python/pygrass/gis/__init__.py                 |   69 +-
 lib/python/pygrass/gis/region.py                   |  463 +-
 lib/python/pygrass/gis/testsuite/test_doctests.py  |   52 +
 lib/python/pygrass/gis/testsuite/test_gis.py       |   25 +
 .../pygrass/messages/testsuite/test_doctests.py    |   39 +
 lib/python/pygrass/modules/grid/grid.py            |   26 +-
 .../modules/grid/testsuite/test_doctests.py        |   39 +
 lib/python/pygrass/modules/interface/module.py     |    8 +-
 lib/python/pygrass/modules/interface/parameter.py  |    2 +-
 .../modules/interface/testsuite/test_doctests.py   |   42 +
 .../modules/interface/testsuite/test_flag.py       |   49 +
 .../modules/interface/testsuite/test_modules.py    |   83 +
 .../modules/interface/testsuite/test_parameter.py  |  346 +
 lib/python/pygrass/modules/shortcuts.py            |    5 +-
 .../pygrass/modules/testsuite/test_doctests.py     |   43 +
 .../modules/testsuite/test_import_isolation.py     |   53 +
 lib/python/pygrass/raster/__init__.py              |  402 +-
 lib/python/pygrass/raster/abstract.py              |  103 +-
 lib/python/pygrass/raster/category.py              |   14 +-
 lib/python/pygrass/raster/history.py               |   52 +-
 lib/python/pygrass/raster/testsuite/data/a.png     |  Bin 0 -> 12452 bytes
 lib/python/pygrass/raster/testsuite/data/b.png     |  Bin 0 -> 40647 bytes
 lib/python/pygrass/raster/testsuite/data/c.png     |  Bin 0 -> 139346 bytes
 lib/python/pygrass/raster/testsuite/data/d.png     |  Bin 0 -> 10810 bytes
 lib/python/pygrass/raster/testsuite/data/e.png     |  Bin 0 -> 10810 bytes
 .../pygrass/raster/testsuite/data/geology_cats     |   16 +
 .../pygrass/raster/testsuite/test_category.py      |   86 +
 .../pygrass/raster/testsuite/test_doctests.py      |   74 +
 .../pygrass/raster/testsuite/test_history.py       |   76 +
 lib/python/pygrass/raster/testsuite/test_numpy.py  |   56 +
 lib/python/pygrass/raster/testsuite/test_raster.py |   83 +
 .../pygrass/raster/testsuite/test_raster_img.py    |  201 +
 .../pygrass/raster/testsuite/test_raster_region.py |  113 +
 lib/python/pygrass/rpc/Makefile                    |   32 +
 lib/python/pygrass/rpc/__init__.py                 |  450 +
 lib/python/pygrass/rpc/base.py                     |  184 +
 lib/python/pygrass/rpc/testsuite/test_doctests.py  |   49 +
 .../pygrass/shell/testsuite/test_doctests.py       |   40 +
 lib/python/pygrass/testsuite/test_doctests.py      |   39 +
 lib/python/pygrass/utils.py                        |  353 +-
 lib/python/pygrass/vector/__init__.py              |  588 +-
 lib/python/pygrass/vector/abstract.py              |  101 +-
 lib/python/pygrass/vector/basic.py                 |    4 +
 lib/python/pygrass/vector/find.py                  |  594 +-
 lib/python/pygrass/vector/geometry.py              |  627 +-
 lib/python/pygrass/vector/table.py                 |  233 +-
 .../pygrass/vector/testsuite/test_doctests.py      |   54 +
 .../pygrass/vector/testsuite/test_filters.py       |   82 +
 .../pygrass/vector/testsuite/test_geometry.py      |  250 +-
 .../vector/testsuite/test_geometry_attrs.py        |   75 +
 lib/python/pygrass/vector/testsuite/test_table.py  |  216 +
 lib/python/pygrass/vector/testsuite/test_vector.py |   70 +
 .../pygrass/vector/testsuite/test_vector3d.py      |    8 +-
 lib/python/script/__init__.py                      |   13 +-
 lib/python/script/array.py                         |  125 +-
 lib/python/script/core.py                          |  121 +-
 lib/python/script/db.py                            |   15 +-
 lib/python/script/raster.py                        |   18 +-
 lib/python/script/raster3d.py                      |   23 +-
 lib/python/script/setup.py                         |   19 +-
 lib/python/script/task.py                          |  112 +-
 lib/python/script/testsuite/test_core_make_val.py  |   31 +
 lib/python/script/testsuite/test_doctests.py       |   39 +
 lib/python/script/testsuite/test_raster.py         |   45 +
 .../testsuite/test_start_command_functions.py      |   67 +
 .../testsuite/test_start_command_functions_nc.py   |   54 +
 lib/python/script/testsuite/test_utils.py          |   66 +
 lib/python/script/utils.py                         |  161 +-
 lib/python/script/vector.py                        |   28 +-
 lib/python/temporal/__init__.py                    |   68 +-
 lib/python/temporal/abstract_dataset.py            |   10 +-
 lib/python/temporal/abstract_map_dataset.py        |   35 +-
 lib/python/temporal/abstract_space_time_dataset.py |   25 +-
 lib/python/temporal/aggregation.py                 |   30 +-
 lib/python/temporal/base.py                        |   66 +-
 lib/python/temporal/c_libraries_interface.py       |  610 +-
 lib/python/temporal/core.py                        |  118 +-
 lib/python/temporal/datetime_math.py               |   38 +-
 lib/python/temporal/extract.py                     |   33 +-
 lib/python/temporal/factory.py                     |    2 +-
 lib/python/temporal/gui_support.py                 |    4 +-
 lib/python/temporal/list_stds.py                   |   42 +-
 lib/python/temporal/mapcalc.py                     |    4 +-
 lib/python/temporal/metadata.py                    |  255 +-
 lib/python/temporal/open_stds.py                   |    4 +-
 lib/python/temporal/register.py                    |    2 +-
 lib/python/temporal/sampling.py                    |    8 +-
 lib/python/temporal/space_time_datasets.py         |   41 +-
 lib/python/temporal/spatial_extent.py              |   29 +-
 .../temporal/spatial_topology_dataset_connector.py |   61 +-
 .../temporal/spatio_temporal_relationships.py      |   34 +-
 lib/python/temporal/stds_export.py                 |   24 +-
 lib/python/temporal/stds_import.py                 |   21 +-
 lib/python/temporal/temporal_algebra.py            |  834 +-
 lib/python/temporal/temporal_extent.py             |   43 +-
 lib/python/temporal/temporal_granularity.py        |  321 +-
 lib/python/temporal/temporal_operator.py           |  405 +-
 lib/python/temporal/temporal_raster3d_algebra.py   |   16 +-
 lib/python/temporal/temporal_raster_algebra.py     |   17 +-
 .../temporal/temporal_raster_base_algebra.py       | 1142 +--
 .../temporal_topology_dataset_connector.py         |   99 +-
 lib/python/temporal/temporal_vector_algebra.py     |  102 +-
 lib/python/temporal/testsuite/test_doctests.py     |   19 +-
 .../temporal/testsuite/test_register_function.py   |    7 +-
 .../temporal/testsuite/unittests_register.py       |  307 -
 .../testsuite/unittests_temporal_algebra.py        |  285 +-
 .../testsuite/unittests_temporal_algebra_grs.py    |   25 +-
 .../unittests_temporal_algebra_mixed_stds.py       |   90 +-
 .../testsuite/unittests_temporal_conditionals.py   |   81 +-
 .../unittests_temporal_raster3d_algebra.py         |   13 +-
 .../testsuite/unittests_temporal_raster_algebra.py |  221 +-
 .../unittests_temporal_raster_algebra_grs.py       |  112 +-
 .../unittests_temporal_raster_conditionals.py      |   11 +-
 .../testsuite/unittests_temporal_vector_algebra.py |   16 +-
 lib/python/temporal/unit_tests.py                  |  296 +-
 lib/python/temporal/univar_statistics.py           |   25 +-
 lib/raster/R.h                                     |    2 +
 lib/raster/close.c                                 |   72 +-
 lib/raster/color_read.c                            |    4 +-
 lib/raster/format.c                                |   67 +-
 lib/raster/get_row.c                               |   75 +-
 lib/raster/init.c                                  |   30 +-
 lib/raster/open.c                                  |  112 +-
 lib/raster/put_row.c                               |  102 +-
 lib/raster/rast_to_img_string.c                    |  171 +
 lib/raster/rasterlib.dox                           |   23 +-
 lib/raster/window_map.c                            |   43 +-
 lib/raster3d/color.c                               |    2 +-
 lib/raster3d/fpcompress.c                          |    6 +-
 lib/raster3d/gradient.c                            |  179 +
 lib/rst/interp_float/interp2d.c                    |    2 +-
 lib/rst/interp_float/secpar2d.c                    |    2 +-
 lib/symbol/Makefile                                |    2 +-
 lib/symbol/read.c                                  |   12 +-
 lib/symbol/symbol/legend/area                      |   13 +
 lib/symbol/symbol/legend/area_curved               |  114 +
 lib/symbol/symbol/legend/line                      |    8 +
 lib/symbol/symbol/legend/line_crooked              |   13 +
 lib/vector/Vlib/build.c                            |   10 +-
 lib/vector/Vlib/build_ogr.c                        |    4 +-
 lib/vector/Vlib/cindex.c                           |   15 +-
 lib/vector/Vlib/close.c                            |    8 +-
 lib/vector/Vlib/close_nat.c                        |  122 +-
 lib/vector/Vlib/close_pg.c                         |    3 +-
 lib/vector/Vlib/copy.c                             |    2 +-
 lib/vector/Vlib/field.c                            |   28 +-
 lib/vector/Vlib/geos.c                             |  433 +-
 lib/vector/Vlib/geos_to_wktb.c                     |  278 +
 lib/vector/Vlib/header.c                           |   10 +-
 lib/vector/Vlib/local_proto.h                      |   12 +-
 lib/vector/Vlib/map.c                              |   74 +-
 lib/vector/Vlib/net.c                              | 1191 ---
 lib/vector/Vlib/net_analyze.c                      | 1057 +++
 lib/vector/Vlib/net_build.c                        | 1076 +++
 lib/vector/Vlib/open.c                             |  109 +-
 lib/vector/Vlib/open_nat.c                         |   22 +-
 lib/vector/Vlib/open_pg.c                          |    4 +-
 lib/vector/Vlib/read_pg.c                          |    9 +-
 lib/vector/Vlib/snap.c                             |  373 +-
 lib/vector/Vlib/testsuite/test_vlib_box.py         |   86 +
 lib/vector/Vlib/write_nat.c                        |    2 +-
 lib/vector/Vlib/write_ogr.c                        |    6 +-
 lib/vector/Vlib/write_pg.c                         |    6 +-
 lib/vector/dglib/dglib.dox                         |    2 +-
 lib/vector/diglib/plus_struct.c                    |    2 +-
 lib/vector/diglib/struct_alloc.c                   |    6 +-
 lib/vector/neta/articulation_point.c               |    2 +-
 lib/vector/neta/flow.c                             |   25 +-
 lib/vector/neta/spanningtree.c                     |    6 +-
 lib/vector/testsuite/test_topology_vgeneralize.sh  |   40 +
 locale/po/grasslibs_ar.po                          | 1854 +++--
 locale/po/grasslibs_cs.po                          | 1864 +++--
 locale/po/grasslibs_de.po                          | 1897 +++--
 locale/po/grasslibs_el.po                          | 1858 +++--
 locale/po/grasslibs_es.po                          | 2088 ++---
 locale/po/grasslibs_fi.po                          | 1768 ++--
 locale/po/grasslibs_fr.po                          | 2256 ++---
 locale/po/grasslibs_it.po                          | 1956 +++--
 locale/po/grasslibs_ja.po                          | 1895 +++--
 locale/po/grasslibs_ko.po                          | 1837 +++--
 locale/po/grasslibs_lv.po                          | 2059 ++---
 locale/po/grasslibs_ml.po                          | 1841 +++--
 locale/po/grasslibs_pl.po                          | 1896 +++--
 locale/po/grasslibs_pt.po                          | 1892 +++--
 locale/po/grasslibs_pt_br.po                       | 1863 +++--
 locale/po/grasslibs_ro.po                          | 1816 +++--
 locale/po/grasslibs_ru.po                          | 1888 +++--
 locale/po/grasslibs_sl.po                          | 1857 +++--
 locale/po/grasslibs_th.po                          | 1875 +++--
 locale/po/grasslibs_tr.po                          | 1857 +++--
 locale/po/grasslibs_vi.po                          | 1882 +++--
 locale/po/grasslibs_zh.po                          | 1879 +++--
 locale/po/grassmods_ar.po                          | 6539 +++++++++------
 locale/po/grassmods_cs.po                          | 6890 +++++++++++-----
 locale/po/grassmods_de.po                          | 7004 ++++++++++------
 locale/po/grassmods_el.po                          | 6163 +++++++++-----
 locale/po/grassmods_es.po                          | 5850 ++++++++-----
 locale/po/grassmods_fi.po                          | 5704 ++++++++-----
 locale/po/grassmods_fr.po                          | 7042 ++++++++++------
 locale/po/grassmods_it.po                          | 6581 +++++++++------
 locale/po/grassmods_ja.po                          | 6919 ++++++++++------
 locale/po/grassmods_ko.po                          | 6132 +++++++++-----
 locale/po/grassmods_lv.po                          | 7482 +++++++++--------
 locale/po/grassmods_pl.po                          | 6715 +++++++++------
 locale/po/grassmods_pt.po                          | 6839 ++++++++++------
 locale/po/grassmods_pt_br.po                       | 6834 ++++++++++------
 locale/po/grassmods_ro.po                          | 5988 +++++++++-----
 locale/po/grassmods_ru.po                          | 6967 ++++++++++------
 locale/po/grassmods_sl.po                          | 6589 +++++++++------
 locale/po/grassmods_th.po                          | 6912 ++++++++++------
 locale/po/grassmods_tr.po                          | 6489 ++++++++++-----
 locale/po/grassmods_vi.po                          | 6963 ++++++++++------
 locale/po/grassmods_zh.po                          | 6583 +++++++++------
 locale/po/grasswxpy_cs.po                          | 8415 ++++++++++---------
 locale/po/grasswxpy_de.po                          | 8301 ++++++++++---------
 locale/po/grasswxpy_el.po                          | 8217 ++++++++++---------
 locale/po/grasswxpy_es.po                          | 8160 +++++++++---------
 locale/po/grasswxpy_fi.po                          | 7998 +++++++++---------
 locale/po/grasswxpy_fr.po                          | 8377 ++++++++++---------
 locale/po/grasswxpy_id.po                          | 8345 ++++++++++---------
 locale/po/grasswxpy_it.po                          | 8072 +++++++++---------
 locale/po/grasswxpy_ja.po                          | 8252 ++++++++++---------
 locale/po/grasswxpy_ko.po                          | 7779 ++++++++++--------
 locale/po/grasswxpy_lv.po                          | 8621 ++++++++++----------
 locale/po/grasswxpy_ml.po                          | 8237 ++++++++++---------
 locale/po/grasswxpy_pl.po                          | 7905 +++++++++---------
 locale/po/grasswxpy_pt.po                          | 8241 ++++++++++---------
 locale/po/grasswxpy_pt_br.po                       | 8256 ++++++++++---------
 locale/po/grasswxpy_ro.po                          | 8243 ++++++++++---------
 locale/po/grasswxpy_ru.po                          | 8226 ++++++++++---------
 locale/po/grasswxpy_th.po                          | 8219 ++++++++++---------
 locale/po/grasswxpy_tr.po                          | 8363 ++++++++++---------
 locale/po/grasswxpy_vi.po                          | 8255 ++++++++++---------
 locale/po/grasswxpy_zh.po                          | 8354 ++++++++++---------
 macosx/pkg/resources/ReadMe.rtf                    |    2 +-
 man/Makefile                                       |   59 +-
 man/build_class_graphical.py                       |  238 +
 man/build_graphical_index.py                       |  133 +
 man/build_html.py                                  |   30 +-
 man/build_manual_gallery.py                        |  187 +
 man/build_topics.py                                |    7 +
 man/jquery.fixedheadertable.min.js                 |   19 +
 man/parser_standard_options.css                    |  172 +
 man/parser_standard_options.js                     |    4 +
 man/parser_standard_options.py                     |  177 +
 man/sphinx/conf.py                                 |   14 +-
 misc/m.cogo/m.cogo.html                            |    2 +-
 misc/m.nviz.image/m.nviz.image.html                |    2 +-
 misc/m.nviz.script/m.nviz.script.html              |    2 +-
 misc/m.transform/m.transform.html                  |    2 +-
 mswindows/GRASS-Installer.nsi.tmpl                 |    8 +-
 mswindows/GRASS-Packager.bat.tmpl                  |    2 +-
 mswindows/Installer-Files/WinGRASS-README.url      |    2 +-
 mswindows/Makefile                                 |    7 +-
 mswindows/osgeo4w/Makefile                         |   16 +
 mswindows/osgeo4w/package.sh                       |    5 +-
 mswindows/osgeo4w/setup.hint                       |    7 -
 mswindows/osgeo4w/setup.hint.tmpl                  |    7 +
 ps/ps.map/ps.map.html                              |  184 +-
 ps/ps.map/ps_map.png                               |  Bin 0 -> 122534 bytes
 ps/ps.map/ps_map_basic.png                         |  Bin 0 -> 47283 bytes
 raster/r.basins.fill/r.basins.fill.html            |    2 +-
 raster/r.buffer/r.buffer.html                      |    2 +-
 raster/r.carve/r.carve.html                        |    2 +-
 raster/r.category/r.category.html                  |    2 +-
 raster/r.circle/r.circle.html                      |    2 +-
 raster/r.clump/main.c                              |    3 +
 raster/r.clump/r.clump.html                        |    2 +-
 raster/r.coin/r.coin.html                          |    2 +-
 raster/r.colors.out/r.colors.out.html              |    2 +-
 raster/r.colors.out/r3.colors.out.html             |    2 +-
 raster/r.colors/r.colors.html                      |    2 +-
 raster/r.colors/r3.colors.html                     |    2 +-
 raster/r.composite/r.composite.html                |    2 +-
 raster/r.compress/main.c                           |  157 +-
 raster/r.compress/r.compress.html                  |  288 +-
 raster/r.contour/r.contour.html                    |    2 +-
 raster/r.cost/r.cost.html                          |    2 +-
 raster/r.covar/r.covar.html                        |    2 +-
 raster/r.cross/r.cross.html                        |    2 +-
 raster/r.distance/r.distance.html                  |    2 +-
 raster/r.drain/r.drain.html                        |    2 +-
 raster/r.external.out/r.external.out.html          |    2 +-
 raster/r.external/r.external.html                  |    2 +-
 raster/r.fill.dir/r.fill.dir.html                  |    2 +-
 raster/r.flow/r.flow.h                             |    2 +-
 raster/r.flow/r.flow.html                          |    2 +-
 raster/r.grow.distance/main.c                      |   23 +-
 raster/r.grow.distance/r.grow.distance.html        |    5 +-
 .../testsuite/r_grow_distance_test.py              |   52 +
 raster/r.his/r.his.html                            |    2 +-
 raster/r.horizon/main.c                            |   21 +-
 raster/r.horizon/r.horizon.html                    |    2 +-
 raster/r.horizon/testsuite/test_r_horizon.py       |  132 +
 raster/r.in.ascii/r.in.ascii.html                  |    2 +-
 raster/r.in.bin/r.in.bin.html                      |    2 +-
 raster/r.in.gdal/main.c                            |   71 +-
 raster/r.in.gdal/r.in.gdal.html                    |   53 +-
 raster/r.in.gdal/testsuite/data/elevation.asc      |  140 +
 raster/r.in.gdal/testsuite/data/elevation.nc       |  Bin 0 -> 85028 bytes
 raster/r.in.gdal/testsuite/data/elevation.prj      |    1 +
 raster/r.in.gdal/testsuite/data/elevation.tif      |  Bin 0 -> 82289 bytes
 raster/r.in.gdal/testsuite/data/elevation.tiff     |  Bin 0 -> 82289 bytes
 raster/r.in.gdal/testsuite/data/elevation3d.nc     |  Bin 0 -> 407020 bytes
 raster/r.in.gdal/testsuite/data/generate_data.sh   |   20 +
 raster/r.in.gdal/testsuite/test_r_in_gdal.py       |  291 +
 raster/r.in.gridatb/r.in.gridatb.html              |    2 +-
 raster/r.in.lidar/Makefile                         |    9 +-
 raster/r.in.lidar/filters.c                        |   70 +
 raster/r.in.lidar/filters.h                        |   35 +
 raster/r.in.lidar/info.c                           |  180 +
 raster/r.in.lidar/local_proto.h                    |   41 +-
 raster/r.in.lidar/main.c                           | 1479 +---
 raster/r.in.lidar/point_binning.c                  |  845 ++
 raster/r.in.lidar/point_binning.h                  |  119 +
 raster/r.in.lidar/projection.c                     |  142 +
 raster/r.in.lidar/r.in.lidar.html                  |  574 +-
 raster/r.in.lidar/r_in_lidar.png                   |  Bin 0 -> 29114 bytes
 raster/r.in.lidar/r_in_lidar_base_raster.png       |  Bin 0 -> 12643 bytes
 raster/r.in.lidar/r_in_lidar_base_raster.svg       |  518 ++
 raster/r.in.lidar/r_in_lidar_binning_count.png     |  Bin 0 -> 30906 bytes
 raster/r.in.lidar/r_in_lidar_binning_mean.png      |  Bin 0 -> 37472 bytes
 raster/r.in.lidar/r_in_lidar_zrange.png            |  Bin 0 -> 6562 bytes
 raster/r.in.lidar/r_in_lidar_zrange.svg            |  298 +
 raster/r.in.lidar/rast_segment.c                   |   86 +
 raster/r.in.lidar/rast_segment.h                   |   14 +
 raster/r.in.lidar/string_list.c                    |   65 +
 raster/r.in.lidar/support.c                        |   20 +
 raster/r.in.lidar/test/sample_test.sh              |   11 +
 raster/r.in.lidar/testsuite/data/points.las        |  Bin 0 -> 547 bytes
 raster/r.in.lidar/testsuite/data/points.txt        |   16 +
 .../r.in.lidar/testsuite/test_base_resolution.sh   |   36 +
 raster/r.in.mat/r.in.mat.html                      |    2 +-
 raster/r.in.png/r.in.png.html                      |    2 +-
 raster/r.in.poly/r.in.poly.html                    |    2 +-
 raster/r.in.poly/testsuite/test_rinpoly.py         |   11 +-
 raster/r.in.xyz/r.in.xyz.html                      |    2 +-
 raster/r.info/r.info.html                          |    2 +-
 raster/r.kappa/r.kappa.html                        |   10 +-
 raster/r.lake/main.c                               |    6 +-
 raster/r.lake/r.lake.html                          |    2 +-
 raster/r.latlong/r.latlong.html                    |    2 +-
 raster/r.li/TODO                                   |   10 -
 raster/r.li/r.li.cwed/r.li.cwed.html               |    2 +-
 raster/r.li/r.li.daemon/r.li.daemon.html           |    2 +-
 raster/r.li/r.li.dominance/r.li.dominance.html     |    2 +-
 raster/r.li/r.li.edgedensity/r.li.edgedensity.html |    2 +-
 raster/r.li/r.li.html                              |    2 +-
 raster/r.li/r.li.mpa/mpa.c                         |    7 +-
 raster/r.li/r.li.mpa/r.li.mpa.html                 |    2 +-
 raster/r.li/r.li.mps/r.li.mps.html                 |    2 +-
 raster/r.li/r.li.padcv/r.li.padcv.html             |    2 +-
 raster/r.li/r.li.padrange/r.li.padrange.html       |    2 +-
 raster/r.li/r.li.padsd/r.li.padsd.html             |    2 +-
 .../r.li/r.li.patchdensity/r.li.patchdensity.html  |    2 +-
 raster/r.li/r.li.patchnum/r.li.patchnum.html       |    2 +-
 raster/r.li/r.li.pielou/r.li.pielou.html           |    2 +-
 raster/r.li/r.li.renyi/r.li.renyi.html             |    2 +-
 raster/r.li/r.li.richness/r.li.richness.html       |    2 +-
 raster/r.li/r.li.shannon/r.li.shannon.html         |    2 +-
 raster/r.li/r.li.shape/r.li.shape.html             |    2 +-
 raster/r.li/r.li.simpson/r.li.simpson.html         |    2 +-
 raster/r.mapcalc/Makefile                          |    4 +-
 raster/r.mapcalc/check.c                           |  160 -
 raster/r.mapcalc/evaluate.c                        |   32 +-
 raster/r.mapcalc/expression.c                      |   10 +-
 raster/r.mapcalc/expression.h                      |   30 +-
 raster/r.mapcalc/func_proto.h                      |   99 +-
 raster/r.mapcalc/function.c                        |   85 +-
 raster/r.mapcalc/globals.h                         |    5 +-
 raster/r.mapcalc/main.c                            |   62 +-
 raster/r.mapcalc/map.c                             |   12 +
 raster/r.mapcalc/map3.c                            |   14 +-
 raster/r.mapcalc/mapcalc.h                         |    2 +
 raster/r.mapcalc/r.mapcalc.html                    |   16 +-
 raster/r.mapcalc/r3.mapcalc.html                   |   23 +-
 raster/r.mapcalc/testsuite/test_r3_mapcalc.py      |   15 +-
 raster/r.mapcalc/testsuite/test_r_mapcalc.py       |   37 +-
 raster/r.mapcalc/xabs.c                            |   69 -
 raster/r.mapcalc/xacos.c                           |   50 -
 raster/r.mapcalc/xadd.c                            |   78 -
 raster/r.mapcalc/xand.c                            |   41 -
 raster/r.mapcalc/xand2.c                           |   48 -
 raster/r.mapcalc/xasin.c                           |   50 -
 raster/r.mapcalc/xatan.c                           |   66 -
 raster/r.mapcalc/xbitand.c                         |   40 -
 raster/r.mapcalc/xbitnot.c                         |   37 -
 raster/r.mapcalc/xbitor.c                          |   40 -
 raster/r.mapcalc/xbitxor.c                         |   40 -
 raster/r.mapcalc/xcos.c                            |   49 -
 raster/r.mapcalc/xdiv.c                            |   81 -
 raster/r.mapcalc/xdouble.c                         |   78 -
 raster/r.mapcalc/xeq.c                             |   72 -
 raster/r.mapcalc/xeval.c                           |   75 -
 raster/r.mapcalc/xexp.c                            |   55 -
 raster/r.mapcalc/xfloat.c                          |   78 -
 raster/r.mapcalc/xge.c                             |   65 -
 raster/r.mapcalc/xgraph.c                          |  180 -
 raster/r.mapcalc/xgt.c                             |   65 -
 raster/r.mapcalc/xif.c                             |  305 -
 raster/r.mapcalc/xint.c                            |   78 -
 raster/r.mapcalc/xisnull.c                         |   66 -
 raster/r.mapcalc/xle.c                             |   65 -
 raster/r.mapcalc/xlog.c                            |   61 -
 raster/r.mapcalc/xlt.c                             |   65 -
 raster/r.mapcalc/xmax.c                            |  100 -
 raster/r.mapcalc/xmedian.c                         |  155 -
 raster/r.mapcalc/xmin.c                            |  100 -
 raster/r.mapcalc/xmod.c                            |   80 -
 raster/r.mapcalc/xmode.c                           |  144 -
 raster/r.mapcalc/xmul.c                            |   78 -
 raster/r.mapcalc/xne.c                             |   65 -
 raster/r.mapcalc/xneg.c                            |   64 -
 raster/r.mapcalc/xnmax.c                           |  100 -
 raster/r.mapcalc/xnmedian.c                        |  152 -
 raster/r.mapcalc/xnmin.c                           |  100 -
 raster/r.mapcalc/xnmode.c                          |  141 -
 raster/r.mapcalc/xnot.c                            |   52 -
 raster/r.mapcalc/xnull.c                           |   27 -
 raster/r.mapcalc/xor.c                             |   41 -
 raster/r.mapcalc/xor2.c                            |   48 -
 raster/r.mapcalc/xpow.c                            |   98 -
 raster/r.mapcalc/xrand.c                           |   91 -
 raster/r.mapcalc/xround.c                          |  205 -
 raster/r.mapcalc/xrowcol.c                         |   54 +
 raster/r.mapcalc/xshiftl.c                         |   38 -
 raster/r.mapcalc/xshiftr.c                         |   38 -
 raster/r.mapcalc/xshiftru.c                        |   38 -
 raster/r.mapcalc/xsin.c                            |   49 -
 raster/r.mapcalc/xsqrt.c                           |   45 -
 raster/r.mapcalc/xsub.c                            |   70 -
 raster/r.mapcalc/xtan.c                            |   50 -
 raster/r.mfilter/r.mfilter.html                    |   12 +-
 raster/r.mode/r.mode.html                          |    2 +-
 raster/r.neighbors/r.neighbors.html                |   41 +-
 raster/r.null/main.c                               |   50 +-
 raster/r.null/r.null.html                          |    2 +-
 raster/r.out.ascii/r.out.ascii.html                |    2 +-
 raster/r.out.bin/r.out.bin.html                    |    2 +-
 raster/r.out.gdal/attr.c                           |   92 +-
 raster/r.out.gdal/r.out.gdal.html                  |   88 +-
 raster/r.out.mat/r.out.mat.html                    |    2 +-
 raster/r.out.mpeg/r.out.mpeg.html                  |    2 +-
 raster/r.out.png/r.out.png.html                    |    2 +-
 raster/r.out.pov/r.out.pov.html                    |    2 +-
 raster/r.out.ppm/r.out.ppm.html                    |    2 +-
 raster/r.out.ppm3/r.out.ppm3.html                  |    2 +-
 raster/r.out.vrml/r.out.vrml.html                  |    2 +-
 raster/r.out.vtk/r.out.vtk.html                    |    2 +-
 raster/r.param.scale/param.h                       |    4 +-
 raster/r.param.scale/r.param.scale.html            |    2 +-
 raster/r.patch/main.c                              |   48 +-
 raster/r.patch/r.patch.html                        |   10 +-
 raster/r.patch/testsuite/test_rpatch_artificial.py |  223 +
 raster/r.profile/r.profile.html                    |    2 +-
 raster/r.profile/testsuite/test_profile_ncspm.py   |    3 +-
 raster/r.proj/main.c                               |    1 +
 raster/r.proj/r.proj.html                          |    2 +-
 raster/r.quant/r.quant.html                        |    2 +-
 raster/r.quantile/r.quantile.html                  |    2 +-
 raster/r.random.cells/indep.c                      |    7 +
 raster/r.random.cells/init.c                       |    7 +
 raster/r.random.cells/main.c                       |   10 +
 raster/r.random.cells/r.random.cells.html          |   85 +-
 raster/r.random.cells/r_random_cells.png           |  Bin 0 -> 21372 bytes
 raster/r.random.cells/ransurf.h                    |    2 +
 .../r.random.cells/testsuite/test_random_cells.py  |   77 +
 raster/r.random.surface/r.random.surface.html      |    2 +-
 raster/r.random/r.random.html                      |    2 +-
 raster/r.reclass/r.reclass.html                    |    2 +-
 raster/r.recode/testsuite/test_rrecode_ncspm.py    |    5 +-
 raster/r.region/r.region.html                      |    2 +-
 raster/r.regression.line/r.regression.line.html    |    2 +-
 raster/r.regression.multi/r.regression.multi.html  |    2 +-
 raster/r.relief/r.relief.html                      |    2 +-
 raster/r.resamp.bspline/r.resamp.bspline.html      |    2 +-
 raster/r.resamp.filter/main.c                      |   24 +-
 raster/r.resamp.filter/r.resamp.filter.html        |    3 +-
 raster/r.resamp.interp/main.c                      |   17 +
 raster/r.resamp.interp/r.resamp.interp.html        |    2 +-
 raster/r.resamp.rst/r.resamp.rst.html              |    2 +-
 raster/r.resamp.stats/main.c                       |   33 +-
 raster/r.resamp.stats/r.resamp.stats.html          |    2 +-
 raster/r.resample/r.resample.html                  |    2 +-
 raster/r.rescale.eq/r.rescale.eq.html              |    2 +-
 raster/r.rescale/r.rescale.html                    |    2 +-
 raster/r.ros/main.c                                |   14 +-
 raster/r.ros/r.ros.html                            |    2 +-
 raster/r.ros/spot_dist.c                           |    2 +-
 .../r.series.accumulate/r.series.accumulate.html   |    2 +-
 raster/r.series.interp/r.series.interp.html        |    2 +-
 raster/r.series/r.series.html                      |    2 +-
 raster/r.sim/r.sim.sediment/r.sim.sediment.html    |    2 +-
 raster/r.sim/r.sim.water/r.sim.water.html          |    2 +-
 raster/r.slope.aspect/r.slope.aspect.html          |    2 +-
 .../testsuite/test_r_slope_aspect.py               |   13 +-
 raster/r.solute.transport/r.solute.transport.html  |    2 +-
 raster/r.spread/r.spread.html                      |    2 +-
 raster/r.spreadpath/r.spreadpath.html              |    2 +-
 raster/r.statistics/r.statistics.html              |    2 +-
 raster/r.stats.quantile/r.stats.quantile.html      |    2 +-
 raster/r.stats.zonal/r.stats.zonal.html            |    2 +-
 raster/r.stats/r.stats.html                        |    2 +-
 raster/r.stream.extract/do_astar.c                 |    6 +-
 raster/r.stream.extract/r.stream.extract.html      |   65 +-
 .../r_stream_extract_accum_orig_zoom.png           |  Bin 0 -> 18654 bytes
 .../r_stream_extract_accum_weighted_zoom.png       |  Bin 0 -> 11312 bytes
 .../r_stream_extract_streams_noweight.png          |  Bin 0 -> 211092 bytes
 .../r_stream_extract_streams_weighed.png           |  Bin 0 -> 312687 bytes
 .../r_stream_extract_weights_zoom.png              |  Bin 0 -> 29250 bytes
 raster/r.sun/main.c                                |   29 +-
 raster/r.sun/r.sun.html                            |    4 +-
 raster/r.sunhours/r.sunhours.html                  |    2 +-
 raster/r.sunmask/r.sunmask.html                    |    2 +-
 raster/r.sunmask/solpos00.c                        |    1 +
 raster/r.support/main.c                            |   20 +-
 raster/r.support/r.support.html                    |    2 +-
 raster/r.surf.area/r.surf.area.html                |    2 +-
 raster/r.surf.contour/r.surf.contour.html          |    2 +-
 raster/r.surf.fractal/r.surf.fractal.html          |    2 +-
 raster/r.surf.gauss/r.surf.gauss.html              |    2 +-
 raster/r.surf.idw/r.surf.idw.html                  |   25 +-
 raster/r.surf.random/r.surf.random.html            |    2 +-
 raster/r.terraflow/grass2str.h                     |    2 +-
 raster/r.terraflow/r.terraflow.html                |    2 +-
 raster/r.texture/r.texture.html                    |    2 +-
 raster/r.thin/r.thin.html                          |    2 +-
 raster/r.thin/thin_lines.c                         |    1 -
 raster/r.tile/r.tile.html                          |    2 +-
 raster/r.timestamp/r.timestamp.html                |    2 +-
 raster/r.to.rast3/r.to.rast3.html                  |    2 +-
 raster/r.to.rast3elev/r.to.rast3elev.html          |    2 +-
 raster/r.to.vect/r.to.vect.html                    |    2 +-
 raster/r.topidx/main.c                             |    2 +-
 raster/r.topidx/r.topidx.html                      |    2 +-
 raster/r.topidx/topidx.c                           |   33 +-
 raster/r.topmodel/file_io.c                        |   56 +-
 raster/r.topmodel/global.h                         |   18 +-
 raster/r.topmodel/main.c                           |    2 +-
 raster/r.topmodel/r.topmodel.html                  |    2 +-
 raster/r.topmodel/topmodel.c                       |    9 +-
 raster/r.univar/globals.h                          |    2 +-
 raster/r.univar/r.univar.html                      |    2 +-
 raster/r.univar/r.univar_main.c                    |   26 +-
 raster/r.univar/r3.univar.html                     |    2 +-
 raster/r.univar/stats.c                            |   13 +-
 raster/r.univar/testsuite/test_r_univar.py         |  185 +
 raster/r.uslek/r.uslek.html                        |    2 +-
 raster/r.usler/r.usler.html                        |    2 +-
 raster/r.viewshed/main.cpp                         |    1 +
 raster/r.viewshed/r.viewshed.html                  |    2 +-
 raster/r.viewshed/testsuite/test_r_viewshed.py     |    9 +-
 raster/r.volume/r.volume.html                      |    2 +-
 raster/r.walk/r.walk.html                          |    4 +-
 raster/r.water.outlet/main.c                       |    6 +
 raster/r.water.outlet/r.water.outlet.html          |    5 +-
 raster/r.watershed/front/main.c                    |   17 +-
 raster/r.watershed/front/r.watershed.html          |   24 +-
 raster/r.watershed/ram/Gwater.h                    |    6 +-
 raster/r.watershed/ram/close_maps.c                |   81 +-
 raster/r.watershed/ram/close_maps2.c               |    2 +-
 raster/r.watershed/ram/do_cum.c                    |   44 +-
 raster/r.watershed/ram/init_vars.c                 |   22 +-
 raster/r.watershed/ram/main.c                      |    6 +-
 raster/r.watershed/seg/Gwater.h                    |   14 +-
 raster/r.watershed/seg/close_maps.c                |  194 +-
 raster/r.watershed/seg/do_cum.c                    |   56 +-
 raster/r.watershed/seg/init_vars.c                 |   25 +-
 raster/r.watershed/seg/main.c                      |    8 +-
 raster/r.watershed/testsuite/r_watershed_test.py   |  154 +
 raster/r.what/main.c                               |   10 +-
 raster/r.what/r.what.html                          |    2 +-
 raster/rasterintro.html                            |   53 +
 raster3d/Makefile                                  |    3 +
 raster3d/r3.flow/Makefile                          |   15 +
 raster3d/r3.flow/flowline.c                        |  223 +
 raster3d/r3.flow/flowline.h                        |   18 +
 raster3d/r3.flow/integrate.c                       |  227 +
 raster3d/r3.flow/integrate.h                       |   35 +
 raster3d/r3.flow/interpolate.c                     |  337 +
 raster3d/r3.flow/interpolate.h                     |   16 +
 raster3d/r3.flow/main.c                            |  537 ++
 raster3d/r3.flow/r3.flow.html                      |  100 +
 raster3d/r3.flow/r3flow_flowlines.png              |  Bin 0 -> 94261 bytes
 raster3d/r3.flow/r3flow_flowlines_color.png        |  Bin 0 -> 52304 bytes
 raster3d/r3.flow/r3flow_structs.h                  |   40 +
 raster3d/r3.flow/test.r3flow.html                  |   14 +
 raster3d/r3.flow/test_main.c                       |  105 +
 raster3d/r3.flow/testsuite/data/flowline.ascii     |  220 +
 raster3d/r3.flow/testsuite/r3flow_test.py          |   97 +
 raster3d/r3.flow/voxel_traversal.c                 |   96 +
 raster3d/r3.flow/voxel_traversal.h                 |    9 +
 raster3d/r3.gradient/Makefile                      |   10 +
 raster3d/r3.gradient/main.c                        |  302 +
 raster3d/r3.gradient/r3.gradient.html              |   31 +
 raster3d/r3.gradient/r3gradient_structs.h          |   13 +
 raster3d/r3.gradient/testsuite/data/test_map_1     |   61 +
 raster3d/r3.gradient/testsuite/data/test_map_2     |   36 +
 raster3d/r3.gradient/testsuite/r3gradient_test.py  |  160 +
 raster3d/r3.gwflow/r3.gwflow.html                  |    2 +-
 raster3d/r3.in.ascii/r3.in.ascii.html              |    2 +-
 raster3d/r3.in.lidar/Makefile                      |   15 +
 raster3d/r3.in.lidar/filters.c                     |   96 +
 raster3d/r3.in.lidar/filters.h                     |   52 +
 raster3d/r3.in.lidar/main.c                        |  436 +
 raster3d/r3.in.lidar/r3.in.lidar.html              |  117 +
 raster3d/r3.in.lidar/r3_in_lidar.png               |  Bin 0 -> 40608 bytes
 raster3d/r3.in.lidar/rast_segment.c                |   86 +
 raster3d/r3.in.lidar/rast_segment.h                |   14 +
 raster3d/r3.info/main.c                            |   18 +-
 raster3d/r3.mkdspf/r3.mkdspf.html                  |    2 +-
 raster3d/r3.neighbors/main.c                       |    2 +
 raster3d/r3.null/main.c                            |    2 +-
 raster3d/r3.out.ascii/r3.out.ascii.html            |    2 +-
 raster3d/r3.out.vtk/r3.out.vtk.html                |    2 +-
 raster3d/r3.timestamp/r3.timestamp.html            |    2 +-
 raster3d/raster3dintro.html                        |    7 +
 scripts/Makefile                                   |    6 +-
 scripts/d.correlate/d.correlate.html               |    2 +-
 scripts/d.correlate/d.correlate.py                 |  111 +-
 scripts/d.frame/Makefile                           |    7 +
 scripts/d.frame/d.frame.html                       |   95 +
 scripts/d.frame/d.frame.py                         |  280 +
 scripts/d.frame/d_frame.png                        |  Bin 0 -> 420916 bytes
 scripts/d.out.file/d.out.file.html                 |    4 +-
 scripts/d.out.file/d.out.file.py                   |    6 +-
 scripts/d.polar/d.polar.html                       |    2 +-
 scripts/d.polar/d.polar.py                         |  306 +-
 scripts/d.rast.edit/d.rast.edit.py                 |  920 ++-
 scripts/d.rast.leg/d.rast.leg.html                 |    2 +-
 scripts/d.rast.leg/d.rast.leg.py                   |    7 +-
 scripts/d.redraw/d.redraw.py                       |   44 +-
 scripts/d.shade/d.shade.html                       |    2 +-
 scripts/d.to.rast/d.to.rast.html                   |    4 +-
 scripts/d.to.rast/d.to.rast.py                     |    6 +-
 scripts/d.what.rast/d.what.rast.html               |    2 +-
 scripts/d.what.rast/d.what.rast.py                 |    8 +-
 scripts/d.what.vect/d.what.vect.html               |    2 +-
 scripts/d.what.vect/d.what.vect.py                 |    6 +-
 scripts/db.dropcolumn/db.dropcolumn.py             |   87 +-
 scripts/db.droptable/db.droptable.html             |    2 +-
 scripts/db.in.ogr/db.in.ogr.html                   |    2 +-
 scripts/db.in.ogr/db.in.ogr.py                     |   60 +-
 scripts/db.out.ogr/db.out.ogr.html                 |    2 +-
 scripts/db.out.ogr/db.out.ogr.py                   |   58 +-
 scripts/db.test/db.test.py                         |   61 +-
 scripts/db.univar/db.univar.html                   |    2 +-
 scripts/db.univar/db.univar.py                     |  153 +-
 scripts/g.extension.all/g.extension.all.html       |    2 +-
 scripts/g.extension.all/g.extension.all.py         |   63 +-
 scripts/g.extension/g.extension.html               |  104 +-
 scripts/g.extension/g.extension.py                 | 1530 ++--
 scripts/g.extension/testsuite/data/modules.xml     |  253 +
 .../data/sample_modules/r.plus.example.tar.gz      |  Bin 0 -> 836 bytes
 .../data/sample_modules/r.plus.example.zip         |  Bin 0 -> 1410 bytes
 .../data/sample_modules/r.plus.example/Makefile    |    7 +
 .../r.plus.example/r.plus.example.html             |   25 +
 .../r.plus.example/r.plus.example.py               |   36 +
 .../data/sample_modules/r.plus.example_sep.tar.gz  |  Bin 0 -> 802 bytes
 scripts/g.extension/testsuite/data/toolboxes.xml   |   22 +
 scripts/g.extension/testsuite/doctest.sh           |    6 +
 .../g.extension/testsuite/test_addons_modules.py   |  125 +
 .../g.extension/testsuite/test_addons_toolboxes.py |   52 +
 scripts/g.manual/g.manual.py                       |   54 +-
 scripts/g.search.modules/g.search.modules.html     |    2 +-
 scripts/g.search.modules/g.search.modules.py       |   42 +-
 .../testsuite/test_g_search_modules.py             |    2 +-
 scripts/i.colors.enhance/i.colors.enhance.html     |    2 +-
 scripts/i.colors.enhance/i.colors.enhance.py       |  179 +-
 scripts/i.image.mosaic/i.image.mosaic.py           |   63 +-
 scripts/i.in.spotvgt/i.in.spotvgt.py               |  220 +-
 scripts/i.oif/i.oif.html                           |    2 +-
 scripts/i.oif/i.oif.py                             |    3 +-
 scripts/i.pansharpen/i.pansharpen.html             |    2 +-
 scripts/i.spectral/i.spectral.html                 |    2 +-
 scripts/i.spectral/i.spectral.py                   |   62 +-
 scripts/i.tasscap/i.tasscap.html                   |    2 +-
 scripts/i.tasscap/i.tasscap.py                     |   40 +-
 scripts/m.proj/m.proj.html                         |    2 +-
 scripts/m.proj/m.proj.py                           |  182 +-
 scripts/r.blend/r.blend.html                       |    2 +-
 scripts/r.blend/r.blend.py                         |   94 +-
 scripts/r.buffer.lowmem/r.buffer.lowmem.py         |   33 +-
 scripts/r.colors.stddev/r.colors.stddev.html       |    2 +-
 scripts/r.colors.stddev/r.colors.stddev.py         |  174 +-
 scripts/r.fillnulls/r.fillnulls.html               |    2 +-
 scripts/r.fillnulls/r.fillnulls.py                 |  233 +-
 scripts/r.grow/r.grow.html                         |    2 +-
 scripts/r.grow/r.grow.py                           |   13 +-
 scripts/r.import/r.import.html                     |    2 +-
 scripts/r.import/r.import.py                       |   43 +-
 scripts/r.import/testsuite/data/data1.tif          |  Bin 0 -> 1641 bytes
 scripts/r.import/testsuite/data/data2.asc          |    9 +
 scripts/r.import/testsuite/data/data2.asc.aux.xml  |  274 +
 scripts/r.import/testsuite/data/data2.prj          |    1 +
 scripts/r.import/testsuite/test_r_import.py        |   50 +
 scripts/r.in.aster/r.in.aster.html                 |    2 +-
 scripts/r.in.aster/r.in.aster.py                   |   77 +-
 scripts/r.in.srtm/r.in.srtm.py                     |   85 +-
 scripts/r.in.wms/r.in.wms.html                     |    2 +-
 scripts/r.in.wms/r.in.wms.py                       |   26 +-
 scripts/r.in.wms/srs.py                            |   15 +-
 scripts/r.in.wms/wms_base.py                       |  320 +-
 scripts/r.in.wms/wms_cap_parsers.py                |  166 +-
 scripts/r.in.wms/wms_drv.py                        |  532 +-
 scripts/r.in.wms/wms_gdal_drv.py                   |  110 +-
 scripts/r.mask/r.mask.html                         |    2 +-
 scripts/r.mask/r.mask.py                           |   50 +-
 scripts/r.out.xyz/r.out.xyz.html                   |    2 +-
 scripts/r.out.xyz/r.out.xyz.py                     |    1 +
 scripts/r.pack/r.pack.html                         |    2 +-
 scripts/r.pack/r.pack.py                           |   36 +-
 scripts/r.plane/r.plane.py                         |   58 +-
 scripts/r.reclass.area/r.reclass.area.html         |    2 +-
 scripts/r.reclass.area/r.reclass.area.py           |    2 +-
 scripts/r.rgb/r.rgb.html                           |    2 +-
 scripts/r.shade/r.shade.html                       |    2 +-
 scripts/r.shade/r.shade.py                         |    8 +-
 scripts/r.tileset/r.tileset.html                   |    2 +-
 scripts/r.tileset/r.tileset.py                     |   88 +-
 scripts/r.unpack/r.unpack.html                     |    2 +-
 scripts/r.unpack/r.unpack.py                       |   24 +-
 scripts/r3.in.xyz/r3.in.xyz.html                   |    2 +-
 scripts/r3.in.xyz/r3.in.xyz.py                     |    6 +-
 scripts/v.build.all/v.build.all.py                 |    9 +-
 scripts/v.centroids/v.centroids.py                 |   15 +-
 scripts/v.db.addcolumn/v.db.addcolumn.py           |   32 +-
 scripts/v.db.addtable/v.db.addtable.html           |    2 +-
 scripts/v.db.addtable/v.db.addtable.py             |   62 +-
 scripts/v.db.dropcolumn/v.db.dropcolumn.py         |   44 +-
 scripts/v.db.droprow/v.db.droprow.html             |    2 +-
 scripts/v.db.droprow/v.db.droprow.py               |    2 +-
 scripts/v.db.droptable/v.db.droptable.py           |   66 +-
 scripts/v.db.join/v.db.join.html                   |    2 +-
 scripts/v.db.join/v.db.join.py                     |    8 +-
 scripts/v.db.reconnect.all/v.db.reconnect.all.py   |  204 +-
 scripts/v.db.renamecolumn/v.db.renamecolumn.py     |   27 +-
 scripts/v.db.univar/v.db.univar.html               |    2 +-
 scripts/v.db.univar/v.db.univar.py                 |   39 +-
 scripts/v.db.update/v.db.update.html               |   23 +-
 scripts/v.db.update/v.db.update.py                 |   28 +-
 scripts/v.dissolve/v.dissolve.html                 |    2 +-
 scripts/v.dissolve/v.dissolve.py                   |   36 +-
 scripts/v.import/v.import.html                     |    2 +-
 scripts/v.import/v.import.py                       |   40 +-
 scripts/v.in.e00/v.in.e00.html                     |    2 +-
 scripts/v.in.e00/v.in.e00.py                       |  128 +-
 scripts/v.in.geonames/v.in.geonames.py             |   92 +-
 scripts/v.in.lines/v.in.lines.py                   |   15 +-
 scripts/v.in.mapgen/v.in.mapgen.py                 |   56 +-
 scripts/v.in.wfs/v.in.wfs.py                       |   21 +-
 scripts/v.krige/Makefile                           |    7 -
 scripts/v.krige/v.krige.html                       |  197 -
 scripts/v.krige/v.krige.py                         |  424 -
 scripts/v.pack/v.pack.html                         |    2 +-
 scripts/v.pack/v.pack.py                           |   54 +-
 .../v.rast.stats/testsuite/test_v_rast_stats.py    |   72 +
 scripts/v.rast.stats/v.rast.stats.html             |    2 +-
 scripts/v.rast.stats/v.rast.stats.py               |   21 +-
 scripts/v.report/v.report.py                       |   51 +-
 scripts/v.to.lines/v.to.lines.html                 |    2 +-
 .../{test_suite => testsuite}/test.v.unpack.sh     |    0
 scripts/v.unpack/v.unpack.html                     |    2 +-
 scripts/v.unpack/v.unpack.py                       |   14 +-
 scripts/v.what.strds/testsuite/test_what_strds.py  |   12 +-
 scripts/v.what.strds/v.what.strds.py               |   13 +-
 scripts/v.what.vect/v.what.vect.html               |    5 +-
 scripts/v.what.vect/v.what.vect.py                 |    4 +
 scripts/wxpyimgview/wxpyimgview.html               |    2 +-
 scripts/wxpyimgview/wxpyimgview.py                 |    4 +-
 scripts/wxpyimgview/wxpyimgview_gui.py             |  153 +-
 temporal/Makefile                                  |   10 +-
 temporal/t.connect/t.connect.html                  |    2 +-
 .../testsuite/test_distr_tgis_db_raster.py         |  238 +-
 .../testsuite/test_distr_tgis_db_raster3d.py       |  207 +-
 .../testsuite/test_distr_tgis_db_vector.py         |  227 +-
 temporal/t.create/t.create.html                    |    2 +-
 temporal/t.info/t.info.html                        |    2 +-
 temporal/t.info/t.info.py                          |   26 +-
 temporal/t.list/t.list.html                        |    2 +-
 temporal/t.list/t.list.py                          |   11 +-
 temporal/t.merge/t.merge.html                      |    2 +-
 temporal/t.merge/t.merge.py                        |    1 +
 temporal/t.merge/testsuite/test.t.merge.sh         |    2 +-
 temporal/t.rast.accdetect/t.rast.accdetect.html    |    2 +-
 temporal/t.rast.accdetect/t.rast.accdetect.py      |   40 +-
 .../testsuite/test.t.rast.accdetect.reverse.sh     |    4 +-
 .../testsuite/test.t.rast.accdetect.sh             |    6 +-
 temporal/t.rast.accdetect/testsuite/test_simple.py |   96 +
 temporal/t.rast.accumulate/t.rast.accumulate.html  |    4 +-
 temporal/t.rast.accumulate/t.rast.accumulate.py    |   34 +-
 .../t.rast.accumulate/testsuite/data/acc_1.ref     |   39 -
 .../t.rast.accumulate/testsuite/data/acc_2.ref     |   39 -
 .../t.rast.accumulate/testsuite/data/acc_3.ref     |   39 -
 .../t.rast.accumulate/testsuite/data/acc_4.ref     |   39 -
 .../t.rast.accumulate/testsuite/data/acc_5.ref     |   40 -
 .../testsuite/test.t.rast.accumulate.sh            |   80 -
 .../testsuite/test_accumulation.py                 |  240 +
 .../t.rast.aggregate.ds/t.rast.aggregate.ds.html   |    8 +-
 .../t.rast.aggregate.ds/t.rast.aggregate.ds.py     |   18 +-
 .../testsuite/test.t.rast.aggregate.ds.sh          |    2 +-
 temporal/t.rast.aggregate/t.rast.aggregate.html    |   24 +-
 temporal/t.rast.aggregate/t.rast.aggregate.py      |   28 +-
 .../testsuite/test_aggregation_absolute.py         |   75 +-
 .../test_aggregation_absolute_parallel.py          |   58 +-
 .../testsuite/test_aggregation_relative.py         |   46 +-
 temporal/t.rast.algebra/t.rast.algebra.html        |    2 +-
 temporal/t.rast.algebra/t.rast.algebra.py          |   18 +-
 .../testsuite/test_raster_algebra.py               |  113 +-
 .../testsuite/test_raster_algebra_fails.py         |   13 +-
 .../testsuite/test_raster_algebra_granularity.py   |   22 +-
 .../test_raster_algebra_granularity_fails.py       |   15 +-
 temporal/t.rast.colors/t.rast.colors.html          |    2 +-
 temporal/t.rast.contour/Makefile                   |    7 +
 temporal/t.rast.contour/t.rast.contour.html        |   43 +
 temporal/t.rast.contour/t.rast.contour.py          |  284 +
 temporal/t.rast.contour/testsuite/test_convert.py  |  246 +
 temporal/t.rast.export/t.rast.export.html          |   14 +-
 temporal/t.rast.export/t.rast.export.py            |   17 +-
 .../t.rast.export/testsuite/test_rast_export.py    |   74 +
 temporal/t.rast.extract/t.rast.extract.html        |    2 +-
 temporal/t.rast.extract/t.rast.extract.py          |   14 +-
 temporal/t.rast.extract/testsuite/test_extract.py  |   36 +-
 temporal/t.rast.gapfill/t.rast.gapfill.html        |   23 +-
 temporal/t.rast.gapfill/t.rast.gapfill.py          |  117 +-
 temporal/t.rast.gapfill/test.t.rast.gapfill.sh     |   37 -
 temporal/t.rast.gapfill/testsuite/test_gapfill.py  |  262 +
 temporal/t.rast.import/t.rast.import.html          |    2 +-
 temporal/t.rast.import/t.rast.import.py            |   14 +-
 .../testsuite/data/precip_2000.tar.bzip2           |  Bin 0 -> 46755 bytes
 .../testsuite/test_temporal_rast_import.py         |   47 +
 temporal/t.rast.list/t.rast.list.html              |    2 +-
 temporal/t.rast.mapcalc/t.rast.mapcalc.html        |    2 +-
 temporal/t.rast.neighbors/t.rast.neighbors.html    |    2 +-
 temporal/t.rast.neighbors/t.rast.neighbors.py      |   22 +-
 .../t.rast.neighbors/testsuite/test_neighbors.py   |   86 +
 temporal/t.rast.out.vtk/t.rast.out.vtk.html        |    2 +-
 temporal/t.rast.series/t.rast.series.html          |    2 +-
 temporal/t.rast.series/t.rast.series.py            |    1 +
 temporal/t.rast.series/testsuite/test_series.py    |  154 +
 temporal/t.rast.to.rast3/t.rast.to.rast3.html      |    2 +-
 temporal/t.rast.to.rast3/t.rast.to.rast3.py        |    3 +-
 .../testsuite/test_strds_to_rast3.py               |  113 +-
 temporal/t.rast.to.vect/Makefile                   |    7 +
 temporal/t.rast.to.vect/t.rast.to.vect.html        |   42 +
 temporal/t.rast.to.vect/t.rast.to.vect.py          |  274 +
 temporal/t.rast.to.vect/testsuite/test_to_vect.py  |  189 +
 temporal/t.rast.univar/t.rast.univar.html          |    2 +-
 temporal/t.rast.univar/testsuite/test_univar.py    |   30 +-
 temporal/t.rast.what/Makefile                      |    7 +
 temporal/t.rast.what/t.rast.what.html              |  138 +
 temporal/t.rast.what/t.rast.what.py                |  526 ++
 temporal/t.rast.what/testsuite/test_what.py        |  173 +
 temporal/t.rast3d.algebra/t.rast3d.algebra.html    |    2 +-
 .../testsuite/test_raster3d_algebra.py             |   13 +-
 temporal/t.rast3d.extract/t.rast3d.extract.html    |    2 +-
 temporal/t.rast3d.extract/t.rast3d.extract.py      |   12 +-
 .../t.rast3d.extract/testsuite/test_extract.py     |   17 +
 temporal/t.rast3d.list/t.rast3d.list.html          |    2 +-
 .../t.rast3d.list/testsuite/test.t.rast3d.list.sh  |    8 +-
 temporal/t.rast3d.mapcalc/t.rast3d.mapcalc.html    |    2 +-
 temporal/t.rast3d.univar/t.rast3d.univar.html      |    2 +-
 temporal/t.rast3d.univar/testsuite/test_univar.py  |   25 +-
 temporal/t.register/t.register.html                |    2 +-
 temporal/t.register/t.register.py                  |    6 +
 temporal/t.remove/t.remove.html                    |    2 +-
 temporal/t.rename/t.rename.html                    |    2 +-
 temporal/t.sample/t.sample.html                    |    2 +-
 temporal/t.select/t.select.html                    |    2 +-
 temporal/t.select/t.select.py                      |   15 +-
 temporal/t.shift/t.shift.html                      |    2 +-
 temporal/t.shift/t.shift.py                        |    1 +
 temporal/t.shift/test.t.shift.absolue.sh           |   46 -
 temporal/t.shift/test.t.shift.relative.sh          |   32 -
 temporal/t.shift/testsuite/test_shift.py           |  526 ++
 temporal/t.snap/t.snap.html                        |    2 +-
 temporal/t.snap/t.snap.py                          |    1 +
 temporal/t.snap/testsuite/test_snap.py             |  291 +
 temporal/t.support/t.support.html                  |    2 +-
 temporal/t.support/t.support.py                    |   17 +-
 .../t.support/testsuite/test_support_str3ds.py     |  105 +
 temporal/t.support/testsuite/test_support_strds.py |  105 +
 temporal/t.support/testsuite/test_support_stvds.py |   96 +
 temporal/t.topology/t.topology.html                |    2 +-
 temporal/t.topology/t.topology.py                  |   51 +-
 temporal/t.unregister/t.unregister.html            |    2 +-
 temporal/t.unregister/testsuite/test_unregister.py |    4 +-
 temporal/t.vect.algebra/t.vect.algebra.html        |    2 +-
 .../testsuite/test_vector_algebra.py               |   15 +-
 temporal/t.vect.db.select/t.vect.db.select.html    |    2 +-
 temporal/t.vect.db.select/t.vect.db.select.py      |   11 +-
 temporal/t.vect.export/t.vect.export.html          |   16 +-
 temporal/t.vect.extract/t.vect.extract.html        |    2 +-
 temporal/t.vect.extract/t.vect.extract.py          |   13 +-
 .../t.vect.extract/testsuite/test_vect_extract.py  |  107 +
 temporal/t.vect.import/t.vect.import.html          |    2 +-
 temporal/t.vect.list/t.vect.list.html              |    2 +-
 .../testsuite/test.t.vect.list.layer.sh            |   10 +-
 temporal/t.vect.list/testsuite/test.t.vect.list.sh |   10 +-
 .../t.vect.observe.strds/t.vect.observe.strds.html |    7 +-
 .../t.vect.observe.strds/t.vect.observe.strds.py   |   10 +-
 temporal/t.vect.univar/t.vect.univar.html          |    2 +-
 temporal/t.vect.what.strds/t.vect.what.strds.html  |    2 +-
 temporal/temporalintro.html                        |    2 -
 testsuite/raster/rmapcalc_test.sh                  |  177 -
 tools/g.html2man/g.html2man.py                     |   25 +-
 tools/g.html2man/groff.py                          |  396 +-
 tools/g.html2man/html.py                           |  131 +-
 tools/g.html2man/rest.py                           |   10 +-
 tools/mkhtml.py                                    |   44 +-
 tools/mkrest.py                                    |    0
 tools/vagrant/clean.sh                             |   14 +
 tools/vagrant/compile.sh                           |   57 +
 vector/Makefile                                    |    4 +
 vector/v.buffer/main.c                             |    1 -
 vector/v.buffer/v.buffer.html                      |    2 +-
 vector/v.build.polylines/main.c                    |    7 +-
 vector/v.build.polylines/v.build.polylines.html    |    5 +-
 vector/v.build.polylines/walk.c                    |   53 +
 vector/v.build.polylines/walk.h                    |    2 +
 vector/v.build/v.build.html                        |    2 +-
 vector/v.category/testsuite/copy_multiple_cats.sh  |   30 +
 vector/v.category/v.category.html                  |    2 +-
 vector/v.clean/test/description.html               |    2 +-
 vector/v.clean/v.clean.html                        |    2 +-
 vector/v.cluster/Makefile                          |   12 +
 vector/v.cluster/main.c                            | 1285 +++
 vector/v.cluster/v.cluster.html                    |  207 +
 vector/v.cluster/v_cluster_4_methods.png           |  Bin 0 -> 104033 bytes
 vector/v.colors.out/v.colors.out.html              |    2 +-
 vector/v.colors/v.colors.html                      |    2 +-
 vector/v.db.connect/v.db.connect.html              |    2 +-
 vector/v.db.select/main.c                          |   56 +-
 vector/v.db.select/testsuite/test_v_db_select.py   |  218 +
 vector/v.db.select/v.db.select.html                |   67 +-
 vector/v.decimate/Makefile                         |   14 +
 vector/v.decimate/count_decimation.c               |  134 +
 vector/v.decimate/count_decimation.h               |   43 +
 vector/v.decimate/grid_decimation.c                |  179 +
 vector/v.decimate/grid_decimation.h                |   79 +
 vector/v.decimate/main.c                           |  465 ++
 vector/v.decimate/v.decimate.html                  |  138 +
 vector/v.decimate/v_decimate_count.png             |  Bin 0 -> 81942 bytes
 vector/v.decimate/v_decimate_grid_cat.png          |  Bin 0 -> 110543 bytes
 vector/v.decimate/v_decimate_original.png          |  Bin 0 -> 128839 bytes
 vector/v.delaunay/v.delaunay.html                  |    2 +-
 vector/v.distance/testsuite/test_areas_points.py   |  150 +
 vector/v.distance/v.distance.html                  |    2 +-
 vector/v.drape/v.drape.html                        |    2 +-
 vector/v.edit/testsuite/select_all_flag.sh         |   35 +
 vector/v.edit/v.edit.html                          |    2 +-
 vector/v.external.out/v.external.out.html          |    2 +-
 vector/v.external/args.c                           |   15 +-
 vector/v.external/dsn.c                            |   78 +
 vector/v.external/list.c                           |   28 +-
 vector/v.external/local_proto.h                    |    9 +-
 vector/v.external/main.c                           |   56 +-
 vector/v.external/proj.c                           |  126 +
 vector/v.external/v.external.html                  |    2 +-
 vector/v.extract/v.extract.html                    |    2 +-
 vector/v.extrude/v.extrude.html                    |    2 +-
 vector/v.generalize/main.c                         |   44 +-
 vector/v.generalize/misc.c                         |  614 +-
 vector/v.generalize/misc.h                         |    7 +-
 vector/v.generalize/v.generalize.html              |   30 +-
 vector/v.hull/v.hull.html                          |    2 +-
 vector/v.in.ascii/main.c                           |    4 +-
 vector/v.in.ascii/testsuite/test_csv.py            |  182 +
 vector/v.in.ascii/v.in.ascii.html                  |    2 +-
 vector/v.in.db/v.in.db.html                        |    2 +-
 vector/v.in.lidar/attributes.c                     |  242 +
 vector/v.in.lidar/attributes.h                     |   32 +
 vector/v.in.lidar/count_decimation.c               |  134 +
 vector/v.in.lidar/count_decimation.h               |   54 +
 vector/v.in.lidar/filters.c                        |   89 +
 vector/v.in.lidar/filters.h                        |   37 +
 vector/v.in.lidar/info.c                           |   89 +
 vector/v.in.lidar/info.h                           |   21 +
 vector/v.in.lidar/lidar.c                          |   51 +
 vector/v.in.lidar/lidar.h                          |   71 +
 vector/v.in.lidar/main.c                           |  980 ++-
 vector/v.in.lidar/projection.c                     |  140 +
 vector/v.in.lidar/projection.h                     |   29 +
 vector/v.in.lidar/testsuite/basic_test.py          |   68 +
 vector/v.in.lidar/testsuite/decimation_test.py     |  161 +
 vector/v.in.lidar/testsuite/filter_test.py         |  208 +
 vector/v.in.lidar/testsuite/mask_test.py           |  157 +
 vector/v.in.lidar/v.in.lidar.html                  |   65 +-
 vector/v.in.lidar/vector_mask.c                    |   70 +
 vector/v.in.lidar/vector_mask.h                    |   34 +
 vector/v.in.ogr/dsn.c                              |   78 +
 vector/v.in.ogr/main.c                             |   53 +-
 vector/v.in.ogr/v.in.ogr.html                      |   50 +-
 vector/v.in.pdal/Makefile                          |   19 +
 vector/v.in.pdal/filters.c                         |  156 +
 vector/v.in.pdal/filters.h                         |   47 +
 vector/v.in.pdal/lidar.c                           |   59 +
 vector/v.in.pdal/lidar.h                           |   81 +
 vector/v.in.pdal/main.cpp                          |  616 ++
 vector/v.in.pdal/projection.c                      |  214 +
 vector/v.in.pdal/projection.h                      |   35 +
 vector/v.in.pdal/testsuite/basic_test.py           |   71 +
 vector/v.in.pdal/testsuite/filter_test.py          |  208 +
 vector/v.in.pdal/v.in.pdal.html                    |   61 +
 vector/v.info/v.info.html                          |    6 +-
 vector/v.kcv/v.kcv.html                            |    2 +-
 vector/v.kernel/main.c                             |    6 +-
 vector/v.kernel/v.kernel.html                      |    2 +-
 vector/v.label.sa/Makefile                         |   14 -
 vector/v.label.sa/annealing.c                      |  219 -
 vector/v.label.sa/labels.c                         | 1284 ---
 vector/v.label.sa/labels.h                         |  182 -
 vector/v.label.sa/main.c                           |  216 -
 vector/v.label.sa/v.label.sa.html                  |   51 -
 vector/v.label.sa/v_label_sa.jpg                   |  Bin 123796 -> 0 bytes
 vector/v.label/v.label.html                        |    2 +-
 vector/v.lidar.correction/v.lidar.correction.html  |    2 +-
 .../v.lidar.edgedetection.html                     |    2 +-
 vector/v.lidar.growing/v.lidar.growing.html        |    2 +-
 vector/v.lrs/lrs.html                              |    2 +-
 vector/v.lrs/v.lrs.create/v.lrs.create.html        |    2 +-
 vector/v.lrs/v.lrs.label/v.lrs.label.html          |    2 +-
 vector/v.lrs/v.lrs.segment/v.lrs.segment.html      |    2 +-
 vector/v.lrs/v.lrs.where/v.lrs.where.html          |    2 +-
 vector/v.mkgrid/main.c                             |    3 +-
 vector/v.mkgrid/v.mkgrid.html                      |   51 +-
 vector/v.mkgrid/v_mkgrid.png                       |  Bin 0 -> 123700 bytes
 vector/v.neighbors/v.neighbors.html                |    2 +-
 vector/v.net.alloc/Makefile                        |    2 +-
 vector/v.net.alloc/alloc.c                         |  266 +
 vector/v.net.alloc/alloc.h                         |   20 +
 vector/v.net.alloc/main.c                          |  212 +-
 vector/v.net.alloc/v.net.alloc.html                |   71 +-
 vector/v.net.alloc/v_net_alloc_from_centers.png    |  Bin 0 -> 47054 bytes
 vector/v.net.alloc/v_net_alloc_to_centers.png      |  Bin 0 -> 47005 bytes
 vector/v.net.allpairs/v.net.allpairs.html          |    2 +-
 vector/v.net.centrality/v.net.centrality.html      |    2 +-
 vector/v.net.components/v.net.components.html      |    2 +-
 vector/v.net.connectivity/v.net.connectivity.html  |    2 +-
 vector/v.net.distance/v.net.distance.html          |    2 +-
 vector/v.net.flow/v.net.flow.html                  |    2 +-
 vector/v.net.iso/main.c                            |  233 +-
 vector/v.net.iso/v.net.iso.html                    |   25 +-
 vector/v.net.path/main.c                           |   68 +-
 vector/v.net.path/path.c                           |   42 +-
 vector/v.net.path/v.net.path.html                  |   27 +-
 vector/v.net.salesman/main.c                       |  179 +-
 vector/v.net.salesman/v.net.salesman.html          |   24 +-
 vector/v.net.spanningtree/v.net.spanningtree.html  |    2 +-
 vector/v.net.steiner/main.c                        |   77 +-
 vector/v.net.steiner/v.net.steiner.html            |    7 +-
 vector/v.net.visibility/v.net.visibility.html      |    2 +-
 vector/v.net/Makefile                              |    4 +-
 vector/v.net/args.c                                |   44 +-
 vector/v.net/main.c                                |   33 +-
 vector/v.net/proto.h                               |    7 +-
 vector/v.net/testsuite/test_v_net.py               |   50 +
 vector/v.net/turntable.c                           |  744 ++
 vector/v.net/v.net.html                            |   42 +-
 vector/v.normal/v.normal.html                      |    2 +-
 vector/v.out.ascii/v.out.ascii.html                |    2 +-
 vector/v.out.lidar/Makefile                        |   16 +
 vector/v.out.lidar/main.c                          |  775 ++
 vector/v.out.lidar/testsuite/test_v_out_lidar.py   |   76 +
 vector/v.out.lidar/v.out.lidar.html                |   52 +
 vector/v.out.ogr/v.out.ogr.html                    |    2 +-
 vector/v.out.postgis/v.out.postgis.html            |    2 +-
 vector/v.out.pov/v.out.pov.html                    |    2 +-
 vector/v.outlier/main.c                            |   36 +-
 vector/v.outlier/v.outlier.html                    |    2 +-
 vector/v.overlay/main.c                            |   26 +-
 vector/v.overlay/v.overlay.html                    |    2 +-
 vector/v.parallel/v.parallel.html                  |    2 +-
 vector/v.patch/main.c                              |   25 +-
 vector/v.proj/v.proj.html                          |    2 +-
 vector/v.qcount/v.qcount.html                      |    2 +-
 vector/v.random/main.c                             |    7 +-
 vector/v.random/v.random.html                      |   46 +-
 vector/v.random/vrandom_polygons.png               |  Bin 0 -> 69189 bytes
 vector/v.reclass/v.reclass.html                    |    2 +-
 vector/v.rectify/v.rectify.html                    |    2 +-
 vector/v.sample/v.sample.html                      |    2 +-
 vector/v.segment/v.segment.html                    |    2 +-
 vector/v.select/v.select.html                      |    2 +-
 vector/v.split/main.c                              |   21 +-
 vector/v.split/v.split.html                        |    2 +-
 vector/v.surf.bspline/v.surf.bspline.html          |    2 +-
 vector/v.surf.idw/v.surf.idw.html                  |    2 +-
 vector/v.surf.rst/v.surf.rst.html                  |    2 +-
 vector/v.timestamp/v.timestamp.html                |    2 +-
 vector/v.to.3d/testsuite/test_vto3d.py             |   38 +
 vector/v.to.3d/v.to.3d.html                        |    2 +-
 vector/v.to.db/areas.c                             |   25 +-
 vector/v.to.db/find.c                              |   66 +-
 vector/v.to.db/global.h                            |    1 +
 vector/v.to.db/lines.c                             |    1 +
 vector/v.to.db/main.c                              |   68 +-
 vector/v.to.db/query.c                             |    1 +
 vector/v.to.db/report.c                            |    2 +-
 vector/v.to.db/v.to.db.html                        |    2 +-
 vector/v.to.points/v.to.points.html                |    2 +-
 vector/v.to.rast/do_areas.c                        |    3 +-
 vector/v.to.rast/main.c                            |    2 +-
 vector/v.to.rast/v.to.rast.html                    |   21 +-
 vector/v.to.rast/vect2rast.c                       |   23 +-
 vector/v.to.rast3/v.to.rast3.html                  |    2 +-
 vector/v.transform/v.transform.html                |    5 +-
 vector/v.type/v.type.html                          |    2 +-
 vector/v.univar/v.univar.html                      |    2 +-
 vector/v.vect.stats/main.c                         |   54 +-
 vector/v.vect.stats/v.vect.stats.html              |   90 +-
 vector/v.vect.stats/v_vect_stats.png               |  Bin 0 -> 155433 bytes
 vector/v.vol.rst/user3.c                           |    2 +-
 vector/v.vol.rst/v.vol.rst.html                    |    2 +-
 vector/v.voronoi/v.voronoi.html                    |    2 +-
 vector/v.what.rast/main.c                          |   39 +-
 vector/v.what.rast/v.what.rast.html                |   31 +-
 vector/v.what.rast3/v.what.rast3.html              |    2 +-
 vector/v.what/testsuite/test_vwhat_layers.py       |   61 +-
 vector/v.what/testsuite/test_vwhat_ncspm.py        |  173 +-
 vector/v.what/v.what.html                          |    2 +-
 visualization/Makefile                             |    3 +-
 visualization/wximgview/Makefile                   |   25 -
 visualization/wximgview/main.cpp                   |  283 -
 visualization/wximgview/wximgview.h                |   48 -
 visualization/wximgview/wximgview.html             |   45 -
 visualization/ximgview/ximgview.html               |    2 +-
 1931 files changed, 347118 insertions(+), 214012 deletions(-)

diff --git a/CHANGES b/CHANGES
index fe7c253..c404d46 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,10 @@
-CHANGES IN GRASS GIS 7 compared to GRASS GIS 6
+CHANGES current GRASS GIS 7.x compared to previous GRASS GIS 7.x
+
+See list of releases with changelog at
+https://trac.osgeo.org/grass/wiki/Release
+
+
+CHANGES in GRASS GIS 7.0 compared to GRASS GIS 6.x
 
 The graphical user interface based on wxPython (introduced in GRASS GIS 
 6.4) has been enriched with many new features in order to make complex 
@@ -14,8 +20,8 @@ spatial index. Finally, there are a series of new modules to analyse
 raster and vector data; some of the already existing modules were 
 improved and made faster (some even 1000 x faster). 
 
-In total, more than 10,000 changes have been implemented so far with 
-respect to GRASS GIS 6.4.
+In total, more than 10,000 changes have been implemented in GRASS GIS 7.0.0
+with respect to GRASS GIS 6.4.x
 
 For details, please refer to this Web page:
 http://trac.osgeo.org/grass/wiki/Grass7/NewFeatures
diff --git a/CITING b/CITING
index 3ef7a96..df4a11b 100644
--- a/CITING
+++ b/CITING
@@ -4,12 +4,12 @@ For citation choices see below; for citing a particular GRASS GIS module, you ma
 
 
 Choices for citing the main GRASS GIS software (update YEAR and version number accordingly):
-* GRASS Development Team, YEAR. Geographic Resources Analysis Support System (GRASS) Software, Version 7.0. Open Source Geospatial Foundation. http://grass.osgeo.org
+* GRASS Development Team, YEAR. Geographic Resources Analysis Support System (GRASS) Software, Version 7.2. Open Source Geospatial Foundation. http://grass.osgeo.org
 * GRASS Development Team, YEAR. Geographic Resources Analysis Support System (GRASS) Programmer's Manual. Open Source Geospatial Foundation. Electronic document: http://grass.osgeo.org/programming7
 
 
 Citing a GRASS GIS Addon (update AUTHOR(S), YEAR, Addon-NAME, and version number accordingly):
-* AUTHOR(S), and GRASS Development Team, YEAR Addon-NAME. Geographic Resources Analysis Support System (GRASS) Software, Version 7.0. Open Source Geospatial Foundation. https://grass.osgeo.org/grass70/manuals/addons/Addon-NAME.html
+* AUTHOR(S), and GRASS Development Team, YEAR Addon-NAME. Geographic Resources Analysis Support System (GRASS) Software, Version 7.2. Open Source Geospatial Foundation. https://grass.osgeo.org/grass72/manuals/addons/Addon-NAME.html
 
 
 For other (scientific) references, see
diff --git a/ChangeLog_7.0.5.gz b/ChangeLog_7.0.5.gz
deleted file mode 100644
index c525624..0000000
Binary files a/ChangeLog_7.0.5.gz and /dev/null differ
diff --git a/ChangeLog_7.2.0RC1.gz b/ChangeLog_7.2.0RC1.gz
new file mode 100644
index 0000000..76175f3
Binary files /dev/null and b/ChangeLog_7.2.0RC1.gz differ
diff --git a/INSTALL b/INSTALL
index 1377314..5ebd668 100644
--- a/INSTALL
+++ b/INSTALL
@@ -40,11 +40,11 @@ Installation order:
 
 GRASS source code is currently distributed in 2 forms:
 
-1) Officially released source code (e.g. grass-7.0.0.tar.gz or later)
+1) Officially released source code (e.g. grass-7.2.0.tar.gz or later)
 
   The Full source code version contains all the GRASS source code
   required for compilation. It is distributed as one file (*.tar.gz
-  package) and the version is composed of 3 numbers, e.g. 7.0.0, 7.0.1
+  package) and the version is composed of 3 numbers, e.g. 7.2.0, 7.2.1
   etc.
 
 2) SVN or SVN Snapshots of source code (SVN or SVN snapshot)
@@ -53,8 +53,8 @@ GRASS source code is currently distributed in 2 forms:
   repository (https://svn.osgeo.org/grass/) or as a snapshot
   (*.tar.gz package) of that SVN repository. The SVN snapshot name
   contains the date when the snapshot was created (checked out from
-  the SVN repository), e.g. grass-7.0.svn_src_snapshot_2016_06_11.tar.gz
-  from https://grass.osgeo.org/grass70/source/snapshot/
+  the SVN repository), e.g. grass-7.2.svn_src_snapshot_2016_06_11.tar.gz
+  from https://grass.osgeo.org/grass72/source/snapshot/
   Further instructions at https://trac.osgeo.org/grass/wiki/DownloadSource
 
 
@@ -151,16 +151,16 @@ See also CODE OPTIMIZATION below.
 
 After compilation, the resulting code is stored in the directory
     ./dist.$ARCH
-and the scripts (grass70, ...) in
+and the scripts (grass72, ...) in
     ./bin.$ARCH
 
 To run GRASS, simply start
-    ./bin.$ARCH/grass70
+    ./bin.$ARCH/grass72
 
 or run
 
     make install
-    grass70
+    grass72
 
 
 (E) INSTALLATION ON MACOSX
@@ -316,4 +316,4 @@ https://grass.osgeo.org/documentation/first-time-users/
 ------------------
 (C) 1999-2016 by The GRASS Development Team
 
-Last changed: $Date: 2016-06-11 12:51:47 +0200 (Sat, 11 Jun 2016) $
+Last changed: $Date: 2016-06-11 12:43:20 +0200 (Sat, 11 Jun 2016) $
diff --git a/Makefile b/Makefile
index 4f8f57d..5b3a8c5 100644
--- a/Makefile
+++ b/Makefile
@@ -54,7 +54,7 @@ FILES = AUTHORS CHANGES CITING COPYING GPL.TXT INSTALL REQUIREMENTS.html contrib
 FILES_DST = $(patsubst %,$(ARCH_DISTDIR)/%,$(FILES))
 
 default:
-	@echo "GRASS GIS $(GRASS_VERSION_MAJOR).$(GRASS_VERSION_MINOR).$(GRASS_VERSION_RELEASE) r$(GRASS_VERSION_SVN) compilation log" \
+	@echo "GRASS GIS $(GRASS_VERSION_MAJOR).$(GRASS_VERSION_MINOR).$(GRASS_VERSION_RELEASE) $(GRASS_VERSION_SVN) compilation log" \
 		> $(ERRORLOG)
 	@echo "--------------------------------------------------" >> $(ERRORLOG)
 	@echo "Started compilation: `date`"                        >> $(ERRORLOG)
@@ -96,7 +96,8 @@ LIBDIRS = \
 	lib/linkm \
 	lib/db \
 	lib/vector \
-	db/drivers
+	db/drivers \
+	lib/python
 
 # Compile libraries only
 libs:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..4668b4f
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,11 @@
+NEWS
+
+GRASS GIS 7
+
+ o https://trac.osgeo.org/grass/wiki/Grass7/NewFeatures
+
+ List of releases
+ o https://trac.osgeo.org/grass/wiki/Release
+
+GRASS GIS 1-6
+ o List of older releases, starting in 1984 (!), see http://grass.osgeo.org/home/history/releases/ 
diff --git a/README.debian b/README.debian
index 4c0ff35..efa63b4 100644
--- a/README.debian
+++ b/README.debian
@@ -72,7 +72,6 @@
 FIXME: how to download just the grass/debian/ directory from git
        and not the whole thing?
 
-
 --
 H.Bowman
-Last changed: $Date: 2015-07-21 13:14:50 +0200 (Tue, 21 Jul 2015) $
+Last changed: $Date: 2015-07-21 13:13:44 +0200 (Tue, 21 Jul 2015) $
diff --git a/REQUIREMENTS.html b/REQUIREMENTS.html
index 11b3070..440489b 100644
--- a/REQUIREMENTS.html
+++ b/REQUIREMENTS.html
@@ -9,14 +9,14 @@
 
 <h2>REQUIREMENTS to compile GRASS GIS 7</h2>
 
-A workstation running some flavor of UNIX like Solaris, IRIX,
-GNU/Linux, BSD, Mac OS X, Cygwin or MinGW (on Win32). Ideally, you
-should have at least 500 Mb. The source code package needs around 80
-MB compressed. The resulting binaries may need between 20 MB and 180
-MB depending on your platform. During a full compilation you may need
+A workstation running some flavor of UNIX including GNU/Linux, Solaris, IRIX, BSD,
+Mac OSX, Cygwin or MinGW (on Win32/Win64). Ideally, you should have at least 800 MB of
+free disk space. The source code package needs disk space of around 26 MB compressed
+and 440MB uncompressed. The resulting binaries may need between 20 MB and 180 MB
+depending on your platform and compiler flags. During a full compilation you may need
 temporarily up to 550MB including the source code.
 <p>
-To disable features please read the <a href="INSTALL">INSTALL</a> file.
+To enable and disable features please read the <a href="INSTALL">INSTALL</a> file.
 
 <h3>General requirements:</h3>
 
@@ -64,7 +64,8 @@ map formats<br>
 
 <h3>Optional requirements:</h3>
 
-Note: also the respective xxx-dev or xxx-devel packages need to be installed.
+Note: also the respective development packages (commonly named xxx-dev or xxx-devel) need
+to be installed.
 
 <ul>
 
@@ -91,8 +92,8 @@ to the v.select module<br>
 <a href="http://www.unidata.ucar.edu/software/netcdf/">http://www.unidata.ucar.edu/software/netcdf/</a>
 </li>
 
-<li>If hardware openGL support is missing in the X
-Server, <b>Mesa-3.x</b> (openGL clone) may be required for wxNVIZ<br>
+<li>If hardware openGL support is missing in the X Server, <b>Mesa-3.x</b> (openGL clone)
+may be required for wxNVIZ<br>
 <a href="http://mesa3d.sourceforge.net">http://mesa3d.sourceforge.net</a>
 </li>
 
@@ -157,7 +158,7 @@ Ctypes can be added as a third-party module in Python 2.3 and 2.4
 
 <li><b>Python Imaging Library or PILLOW</b> (highly recommended for wxGUI and necessary for wxGUI Cartographic Composer)<br>
 <a href="http://www.pythonware.com/products/pil">http://www.pythonware.com/products/pil</a>,
-a newer version is "python-pillow"
+newer versions are named "python-pillow"
 </li>
 
 <li><b>Python matplotlib > 1.2</b> ("python-matplotlib", needed for the several wxGUI tools)<br>
@@ -181,19 +182,26 @@ a newer version is "python-pillow"
 <a href="http://cairographics.org">http://cairographics.org</a>
 </li>
 
+<!-- really needed? -->
 <li><b>AVCE00 and E00Compr Libraries</b> (avcimport)<br>
 <a href="http://avce00.maptools.org">http://avce00.maptools.org</a>
 </li>
 
+<li><b>Subversion</b> (svn for g.extension)<br>
+<a href="https://subversion.apache.org/">https://subversion.apache.org/</a><br>
+</li>
+
 </ul>
 
 
 <h3>Note:</h3>
 
+<!-- since 2014 no longer supported: -->
 SUN Solaris users may go here to download precompiled libraries etc.:
 <br><a href="http://www.sunfreeware.com">http://www.sunfreeware.com</a>
 
 <p>
+<!-- no longer supported: -->
 SGI IRIX users may go here to download precompiled libraries etc.:
 <br><a href="http://freeware.sgi.com">http://freeware.sgi.com</a>
 
@@ -204,11 +212,11 @@ MacOSX users may go here to download precompiled libraries etc.:
 <p>
 
 <hr width="100%">
-<i>© GRASS Development Team 2001-2016</i>
+<i>© GRASS Development Team 1997-2016</i>
 <p>Please report bugs here:
 <br><a href="http://grass.osgeo.org/development/bug-tracking/">http://grass.osgeo.org/development/bug-tracking/</a>
 
 <p>
-<i>Last changed: $Date: 2016-03-10 14:01:17 +0100 (Thu, 10 Mar 2016) $</i>
+<i>Last changed: $Date: 2016-09-09 10:34:04 +0200 (Fri, 09 Sep 2016) $</i>
 </body>
 </html>
diff --git a/Vagrantfile b/Vagrantfile
new file mode 100644
index 0000000..331f2d8
--- /dev/null
+++ b/Vagrantfile
@@ -0,0 +1,113 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+### Inspired by https://svn.osgeo.org/gdal/trunk/gdal/Vagrantfile
+
+require 'socket'
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+  
+  vm_ram = ENV['VAGRANT_VM_RAM'] || 1024
+  vm_cpu = ENV['VAGRANT_VM_CPU'] || 2
+  
+  config.vm.box = "trusty64"
+  
+  config.vm.hostname = "grass-gis-vagrant"
+  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
+  config.vm.define "grass-gis-vagrant" do |host|
+    
+    config.vm.network :forwarded_port, guest: 80, host: 8080
+    
+    host.vm.provider :virtualbox do |vb|
+      vb.customize ["modifyvm", :id, "--memory", vm_ram]
+      vb.customize ["modifyvm", :id, "--cpus", vm_cpu]
+      vb.customize ["modifyvm", :id, "--ioapic", "on"]
+      vb.name = "grass-gis-vagrant"
+    end  
+
+    config.ssh.forward_agent = true
+    config.ssh.forward_x11 = true
+
+    ### Define your GRASS data directory to be synce'd on virtual machine
+    # grassdata_dir = "/opt/grassdata"
+    # host.vm.synced_folder grassdata_dir, "/home/vagrant/grassdata"
+    
+    ppaRepos = [
+      "ppa:ubuntugis/ubuntugis-unstable"
+    ]
+    
+    packageList = [
+      "autoconf2.13",
+      "autotools-dev",
+      "make",
+      "g++",
+      "gettext",
+      "flex",
+      "bison",
+      "libcairo2-dev",
+      "libfftw3-dev",
+      "libfreetype6-dev",
+      "libgdal-dev",
+      "libgeos-dev",
+      "libglu1-mesa-dev",
+      "libjpeg-dev",
+      "libpng-dev",
+      "libtiff-dev",
+      "libmysqlclient-dev",
+      "libncurses5-dev",
+      "libpq-dev",
+      "libproj-dev",
+      "proj-bin",
+      "libreadline-dev",
+      "libsqlite3-dev",
+      "libwxgtk2.8-dev",
+      "libxmu-dev",
+      "python",
+      "python-wxgtk2.8",
+      "python-dev",
+      "python-numpy",
+      "python-ply",
+      "python-pil",
+      "libnetcdf-dev",
+      "netcdf-bin",
+      "libblas-dev",
+      "liblapack-dev",
+      "unixodbc-dev",
+      "zlib1g-dev",
+      "liblas-c-dev"
+    ]
+    
+    unless File.exists?(".no_apt_cache")
+      cache_dir = "apt-cache/#{config.vm.box}"
+      FileUtils.mkdir_p(cache_dir) unless Dir.exists?(cache_dir)
+      host.vm.synced_folder cache_dir, "/var/cache/apt/archives"
+    end
+    
+    if Dir.glob("#{File.dirname(__FILE__)}/.vagrant/machines/grass-gis-vagrant/*/id").empty?
+      pkg_cmd = "sed -i 's#deb http://us.archive.ubuntu.com/ubuntu/#deb mirror://mirrors.ubuntu.com/mirrors.txt#' /etc/apt/sources.list; "
+      
+      pkg_cmd << "apt-get update -qq; apt-get install -q -y python-software-properties; "
+      
+      if ppaRepos.length > 0
+	ppaRepos.each { |repo| pkg_cmd << "add-apt-repository -y " << repo << " ; " }
+	pkg_cmd << "apt-get update -qq; "
+      end
+      
+      # install packages we need we need
+      pkg_cmd << "apt-get install -q -y " + packageList.join(" ") << " ; "
+      host.vm.provision :shell, :inline => pkg_cmd
+
+      scripts = [
+      "clean.sh",
+      ];
+      scripts.each { |script| host.vm.provision :shell, :privileged => false, :path => "tools/vagrant/" << script }
+    end
+    scripts = [
+      "compile.sh",
+    ];
+    scripts.each { |script| host.vm.provision :shell, :privileged => false, :path => "tools/vagrant/" << script }
+  end
+end
diff --git a/config.guess b/config.guess
index b82ee23..2e9ad7f 100755
--- a/config.guess
+++ b/config.guess
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Attempt to guess a canonical system name.
-#   Copyright 1992-2015 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2015-12-14'
+timestamp='2016-10-02'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -27,7 +27,7 @@ timestamp='2015-12-14'
 # Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
 #
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 #
 # Please send patches to <config-patches at gnu.org>.
 
@@ -50,7 +50,7 @@ version="\
 GNU config.guess ($timestamp)
 
 Originally written by Per Bothner.
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -186,9 +186,12 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
 	esac
 	# The Operating System including object format, if it has switched
-	# to ELF recently, or will in the future.
+	# to ELF recently (or will in the future) and ABI.
 	case "${UNAME_MACHINE_ARCH}" in
-	    arm*|earm*|i386|m68k|ns32k|sh3*|sparc|vax)
+	    earm*)
+		os=netbsdelf
+		;;
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
 		eval $set_cc_for_build
 		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
 			| grep -q __ELF__
@@ -237,6 +240,10 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
 	echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
 	exit ;;
+    *:LibertyBSD:*:*)
+	UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+	echo ${UNAME_MACHINE_ARCH}-unknown-libertybsd${UNAME_RELEASE}
+	exit ;;
     *:ekkoBSD:*:*)
 	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
 	exit ;;
@@ -268,42 +275,42 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
 	case "$ALPHA_CPU_TYPE" in
 	    "EV4 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV4.5 (21064)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "LCA4 (21066/21068)")
-		UNAME_MACHINE="alpha" ;;
+		UNAME_MACHINE=alpha ;;
 	    "EV5 (21164)")
-		UNAME_MACHINE="alphaev5" ;;
+		UNAME_MACHINE=alphaev5 ;;
 	    "EV5.6 (21164A)")
-		UNAME_MACHINE="alphaev56" ;;
+		UNAME_MACHINE=alphaev56 ;;
 	    "EV5.6 (21164PC)")
-		UNAME_MACHINE="alphapca56" ;;
+		UNAME_MACHINE=alphapca56 ;;
 	    "EV5.7 (21164PC)")
-		UNAME_MACHINE="alphapca57" ;;
+		UNAME_MACHINE=alphapca57 ;;
 	    "EV6 (21264)")
-		UNAME_MACHINE="alphaev6" ;;
+		UNAME_MACHINE=alphaev6 ;;
 	    "EV6.7 (21264A)")
-		UNAME_MACHINE="alphaev67" ;;
+		UNAME_MACHINE=alphaev67 ;;
 	    "EV6.8CB (21264C)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8AL (21264B)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.8CX (21264D)")
-		UNAME_MACHINE="alphaev68" ;;
+		UNAME_MACHINE=alphaev68 ;;
 	    "EV6.9A (21264/EV69A)")
-		UNAME_MACHINE="alphaev69" ;;
+		UNAME_MACHINE=alphaev69 ;;
 	    "EV7 (21364)")
-		UNAME_MACHINE="alphaev7" ;;
+		UNAME_MACHINE=alphaev7 ;;
 	    "EV7.9 (21364A)")
-		UNAME_MACHINE="alphaev79" ;;
+		UNAME_MACHINE=alphaev79 ;;
 	esac
 	# A Pn.n version is a patched version.
 	# A Vn.n version is a released version.
 	# A Tn.n version is a released field test version.
 	# A Xn.n version is an unreleased experimental baselevel.
 	# 1.2 uses "1.2" for uname -r.
-	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
 	# Reset EXIT trap before exiting to avoid spurious non-zero exit code.
 	exitcode=$?
 	trap '' 0
@@ -376,16 +383,16 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	exit ;;
     i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
 	eval $set_cc_for_build
-	SUN_ARCH="i386"
+	SUN_ARCH=i386
 	# If there is a compiler, see if it is configured for 64-bit objects.
 	# Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
 	# This test works for both compilers.
-	if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 	    if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-		(CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		(CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
 		grep IS_64BIT_ARCH >/dev/null
 	    then
-		SUN_ARCH="x86_64"
+		SUN_ARCH=x86_64
 	    fi
 	fi
 	echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
@@ -410,7 +417,7 @@ case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
 	exit ;;
     sun*:*:4.2BSD:*)
 	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	test "x${UNAME_RELEASE}" = x && UNAME_RELEASE=3
 	case "`/bin/arch`" in
 	    sun3)
 		echo m68k-sun-sunos${UNAME_RELEASE}
@@ -635,13 +642,13 @@ EOF
 		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
 		    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
 		    case "${sc_cpu_version}" in
-		      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-		      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+		      523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+		      528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
 		      532)                      # CPU_PA_RISC2_0
 			case "${sc_kernel_bits}" in
-			  32) HP_ARCH="hppa2.0n" ;;
-			  64) HP_ARCH="hppa2.0w" ;;
-			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+			  32) HP_ARCH=hppa2.0n ;;
+			  64) HP_ARCH=hppa2.0w ;;
+			  '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
 			esac ;;
 		    esac
 		fi
@@ -680,11 +687,11 @@ EOF
 		    exit (0);
 		}
 EOF
-		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    (CCOPTS="" $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
 		    test -z "$HP_ARCH" && HP_ARCH=hppa
 		fi ;;
 	esac
-	if [ ${HP_ARCH} = "hppa2.0w" ]
+	if [ ${HP_ARCH} = hppa2.0w ]
 	then
 	    eval $set_cc_for_build
 
@@ -697,12 +704,12 @@ EOF
 	    # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
 	    # => hppa64-hp-hpux11.23
 
-	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
+	    if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
 		grep -q __LP64__
 	    then
-		HP_ARCH="hppa2.0w"
+		HP_ARCH=hppa2.0w
 	    else
-		HP_ARCH="hppa64"
+		HP_ARCH=hppa64
 	    fi
 	fi
 	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
@@ -807,14 +814,14 @@ EOF
 	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
 	exit ;;
     F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+	FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
 	FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
 	echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     5000:UNIX_System_V:4.*:*)
-	FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+	FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+	FUJITSU_REL=`echo ${UNAME_RELEASE} | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
 	echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
 	exit ;;
     i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
@@ -896,7 +903,7 @@ EOF
 	exit ;;
     *:GNU/*:*:*)
 	# other systems with GNU libc and userland
-	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
 	exit ;;
     i*86:Minix:*:*)
 	echo ${UNAME_MACHINE}-pc-minix
@@ -919,7 +926,7 @@ EOF
 	  EV68*) UNAME_MACHINE=alphaev68 ;;
 	esac
 	objdump --private-headers /bin/sh | grep -q ld.so.1
-	if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
+	if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
 	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
 	exit ;;
     arc:Linux:*:* | arceb:Linux:*:*)
@@ -993,6 +1000,9 @@ EOF
 	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
 	test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
 	;;
+    mips64el:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     openrisc*:Linux:*:*)
 	echo or1k-unknown-linux-${LIBC}
 	exit ;;
@@ -1025,6 +1035,9 @@ EOF
     ppcle:Linux:*:*)
 	echo powerpcle-unknown-linux-${LIBC}
 	exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
+	exit ;;
     s390:Linux:*:* | s390x:Linux:*:*)
 	echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
 	exit ;;
@@ -1272,6 +1285,9 @@ EOF
     SX-8R:SUPER-UX:*:*)
 	echo sx8r-nec-superux${UNAME_RELEASE}
 	exit ;;
+    SX-ACE:SUPER-UX:*:*)
+	echo sxace-nec-superux${UNAME_RELEASE}
+	exit ;;
     Power*:Rhapsody:*:*)
 	echo powerpc-apple-rhapsody${UNAME_RELEASE}
 	exit ;;
@@ -1285,9 +1301,9 @@ EOF
 	    UNAME_PROCESSOR=powerpc
 	fi
 	if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-	    if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
+	    if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
 		if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-		    (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
+		    (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
 		    grep IS_64BIT_ARCH >/dev/null
 		then
 		    case $UNAME_PROCESSOR in
@@ -1309,7 +1325,7 @@ EOF
 	exit ;;
     *:procnto*:*:* | *:QNX:[0123456789]*:*)
 	UNAME_PROCESSOR=`uname -p`
-	if test "$UNAME_PROCESSOR" = "x86"; then
+	if test "$UNAME_PROCESSOR" = x86; then
 		UNAME_PROCESSOR=i386
 		UNAME_MACHINE=pc
 	fi
@@ -1340,7 +1356,7 @@ EOF
 	# "uname -m" is not consistent, so use $cputype instead. 386
 	# is converted to i386 for consistency with other x86
 	# operating systems.
-	if test "$cputype" = "386"; then
+	if test "$cputype" = 386; then
 	    UNAME_MACHINE=i386
 	else
 	    UNAME_MACHINE="$cputype"
@@ -1382,7 +1398,7 @@ EOF
 	echo i386-pc-xenix
 	exit ;;
     i*86:skyos:*:*)
-	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
+	echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE} | sed -e 's/ .*$//'`
 	exit ;;
     i*86:rdos:*:*)
 	echo ${UNAME_MACHINE}-pc-rdos
@@ -1401,18 +1417,17 @@ esac
 cat >&2 <<EOF
 $0: unable to guess system type
 
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite
+config.guess and config.sub with the latest versions from:
 
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
 and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches at gnu.org> in order to provide the needed
-information to handle your system.
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches at gnu.org to
+provide the necessary information to handle your system.
 
 config.guess timestamp = $timestamp
 
diff --git a/config.sub b/config.sub
index 0cd7016..cc69b06 100755
--- a/config.sub
+++ b/config.sub
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Configuration validation subroutine script.
-#   Copyright 1992-2015 Free Software Foundation, Inc.
+#   Copyright 1992-2016 Free Software Foundation, Inc.
 
-timestamp='2015-12-14'
+timestamp='2016-09-05'
 
 # This file is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License as published by
@@ -33,7 +33,7 @@ timestamp='2015-12-14'
 # Otherwise, we print the canonical config type on stdout and succeed.
 
 # You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
+# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
 
 # This file is supposed to be the same for all GNU packages
 # and recognize all the CPU types, system types and aliases
@@ -67,7 +67,7 @@ Report bugs and patches to <config-patches at gnu.org>."
 version="\
 GNU config.sub ($timestamp)
 
-Copyright 1992-2015 Free Software Foundation, Inc.
+Copyright 1992-2016 Free Software Foundation, Inc.
 
 This is free software; see the source for copying conditions.  There is NO
 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
@@ -117,7 +117,7 @@ case $maybe_os in
   nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
   linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
   knetbsd*-gnu* | netbsd*-gnu* | netbsd*-eabi* | \
-  kopensolaris*-gnu* | \
+  kopensolaris*-gnu* | cloudabi*-eabi* | \
   storm-chaos* | os2-emx* | rtmk-nova*)
     os=-$maybe_os
     basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
@@ -643,6 +643,14 @@ case $basic_machine in
 		basic_machine=m68k-bull
 		os=-sysv3
 		;;
+	e500v[12])
+		basic_machine=powerpc-unknown
+		os=$os"spe"
+		;;
+	e500v[12]-*)
+		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		os=$os"spe"
+		;;
 	ebmon29k)
 		basic_machine=a29k-amd
 		os=-ebmon
@@ -1022,7 +1030,7 @@ case $basic_machine in
 	ppc-* | ppcbe-*)
 		basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppcle | powerpclittle | ppc-le | powerpc-little)
+	ppcle | powerpclittle)
 		basic_machine=powerpcle-unknown
 		;;
 	ppcle-* | powerpclittle-*)
@@ -1032,7 +1040,7 @@ case $basic_machine in
 		;;
 	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
 		;;
-	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+	ppc64le | powerpc64little)
 		basic_machine=powerpc64le-unknown
 		;;
 	ppc64le-* | powerpc64little-*)
@@ -1382,14 +1390,14 @@ case $os in
 	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
 	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
 	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-	      | -bitrig* | -openbsd* | -solidbsd* \
+	      | -bitrig* | -openbsd* | -solidbsd* | -libertybsd* \
 	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
 	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
 	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
 	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
 	      | -chorusos* | -chorusrdb* | -cegcc* \
 	      | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-	      | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
+	      | -midipix* | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
 	      | -linux-newlib* | -linux-musl* | -linux-uclibc* \
 	      | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
 	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
@@ -1399,7 +1407,7 @@ case $os in
 	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
 	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
 	      | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* \
-	      | -onefs* | -tirtos*)
+	      | -onefs* | -tirtos* | -phoenix*)
 	# Remember, each alternative MUST END IN *, to match a version number.
 		;;
 	-qnx*)
@@ -1531,6 +1539,8 @@ case $os in
 		;;
 	-nacl*)
 		;;
+	-ios)
+		;;
 	-none)
 		;;
 	*)
diff --git a/configure b/configure
index da52471..8aea3dc 100755
--- a/configure
+++ b/configure
@@ -67,6 +67,8 @@ ac_help="$ac_help
 ac_help="$ac_help
   --with-opencl           support OpenCL functionality (default: no)"
 ac_help="$ac_help
+  --with-bzlib            support BZIP2 functionality (default: no)"
+ac_help="$ac_help
   --with-gdal[=path/gdal-config]
                           enable GDAL/OGR support (gdal-config with path,
                           e.g. '--with-gdal=/usr/local/bin/gdal-config')"
@@ -76,6 +78,11 @@ ac_help="$ac_help
                           e.g. '--with-liblas=/usr/local/bin/liblas-config',
                           default: no)"
 ac_help="$ac_help
+  --with-pdal[=path/pdal-config]
+                          enable PDAL support (pdal-config with path,
+                          e.g. '--with-pdal=/usr/local/bin/pdal-config',
+                          default: no)"
+ac_help="$ac_help
   --with-wxwidgets[=path/wx-config]
                           enable wxWidgets support (wx-config with path,
                           e.g. '--with-wxwidgets=/usr/local/bin/wx-config',
@@ -100,6 +107,11 @@ ac_help="$ac_help
 ac_help="$ac_help
   --with-zlib-libs=DIRS   zlib library files are in DIRS"
 ac_help="$ac_help
+  --with-bzlib-includes=DIRS
+                          BZIP2 include files are in DIRS"
+ac_help="$ac_help
+  --with-bzlib-libs=DIRS  BZIP2 library files are in DIRS"
+ac_help="$ac_help
   --with-readline-includes=DIRS
                           Readline include files are in DIRS"
 ac_help="$ac_help
@@ -743,7 +755,7 @@ else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
 fi
 
 echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:747: checking host system type" >&5
+echo "configure:759: checking host system type" >&5
 
 host_alias=$host
 case "$host_alias" in
@@ -766,7 +778,7 @@ echo "$ac_t""$host" 1>&6
 # Extract the first word of "gcc", so it can be a program name with args.
 set dummy gcc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:770: checking for $ac_word" >&5
+echo "configure:782: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -793,7 +805,7 @@ if test -z "$CC"; then
   # Extract the first word of "cc", so it can be a program name with args.
 set dummy cc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:797: checking for $ac_word" >&5
+echo "configure:809: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -841,7 +853,7 @@ fi
       # Extract the first word of "cl", so it can be a program name with args.
 set dummy cl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:845: checking for $ac_word" >&5
+echo "configure:857: checking for $ac_word" >&5
 
 if test -n "$CC"; then
   ac_cv_prog_CC="$CC" # Let the user override the test.
@@ -870,7 +882,7 @@ fi
 fi
 
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:874: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:886: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
 
 ac_ext=c
 # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -881,12 +893,12 @@ cross_compiling=$ac_cv_prog_cc_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 885 "configure"
+#line 897 "configure"
 #include "confdefs.h"
 
 main(){return(0);}
 EOF
-if { (eval echo configure:890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:902: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cc_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -912,19 +924,19 @@ if test $ac_cv_prog_cc_works = no; then
   { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:916: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:928: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
 cross_compiling=$ac_cv_prog_cc_cross
 
 echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:921: checking whether we are using GNU C" >&5
+echo "configure:933: checking whether we are using GNU C" >&5
 
 cat > conftest.c <<EOF
 #ifdef __GNUC__
   yes;
 #endif
 EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:928: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:940: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gcc=yes
 else
   ac_cv_prog_gcc=no
@@ -942,7 +954,7 @@ ac_test_CFLAGS="${CFLAGS+set}"
 ac_save_CFLAGS="$CFLAGS"
 CFLAGS=
 echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:946: checking whether ${CC-cc} accepts -g" >&5
+echo "configure:958: checking whether ${CC-cc} accepts -g" >&5
 
 echo 'void f(){}' > conftest.c
 if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
@@ -971,10 +983,10 @@ else
 fi
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:975: checking for Cygwin environment" >&5
+echo "configure:987: checking for Cygwin environment" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 978 "configure"
+#line 990 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -985,7 +997,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:989: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1001: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -1001,17 +1013,17 @@ echo "$ac_t""$ac_cv_cygwin" 1>&6
 CYGWIN=
 test "$ac_cv_cygwin" = yes && CYGWIN=yes
 echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6
-echo "configure:1005: checking for mingw32 environment" >&5
+echo "configure:1017: checking for mingw32 environment" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 1008 "configure"
+#line 1020 "configure"
 #include "confdefs.h"
 
 int main() {
 return __MINGW32__;
 ; return 0; }
 EOF
-if { (eval echo configure:1015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1027: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_mingw32=yes
 else
@@ -1029,7 +1041,7 @@ test "$ac_cv_mingw32" = yes && MINGW32=yes
 
 
 echo $ac_n "checking for executable suffix""... $ac_c" 1>&6
-echo "configure:1033: checking for executable suffix" >&5
+echo "configure:1045: checking for executable suffix" >&5
 
 if test "$CYGWIN" = yes || test "$MINGW32" = yes; then
   ac_cv_exeext=.exe
@@ -1048,23 +1060,23 @@ ac_exeext=$EXEEXT
 IEEEFLAG=
 
 echo $ac_n "checking for full floating-point support""... $ac_c" 1>&6
-echo "configure:1052: checking for full floating-point support" >&5
+echo "configure:1064: checking for full floating-point support" >&5
 if test "$cross_compiling" = yes; then
      echo "$ac_t""unknown (cross-compiling)" 1>&6
      
 echo $ac_n "checking whether "cc -mieee" works""... $ac_c" 1>&6
-echo "configure:1057: checking whether "cc -mieee" works" >&5
+echo "configure:1069: checking whether "cc -mieee" works" >&5
 ac_save_cflags=${CFLAGS}
 CFLAGS="$CFLAGS -mieee"
 cat > conftest.$ac_ext <<EOF
-#line 1061 "configure"
+#line 1073 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:1068: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:1080: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
      echo "$ac_t""yes" 1>&6
         IEEEFLAG="-mieee"
@@ -1080,7 +1092,7 @@ CFLAGS=${ac_save_cflags}
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 1084 "configure"
+#line 1096 "configure"
 #include "confdefs.h"
 
 #include <float.h>
@@ -1094,7 +1106,7 @@ int main(void) {
 }
 
 EOF
-if { (eval echo configure:1098: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1110: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
      echo "$ac_t""yes" 1>&6
     
@@ -1107,14 +1119,14 @@ else
   CFLAGS=-mieee
   
 echo $ac_n "checking for full floating-point support with -mieee""... $ac_c" 1>&6
-echo "configure:1111: checking for full floating-point support with -mieee" >&5
+echo "configure:1123: checking for full floating-point support with -mieee" >&5
 if test "$cross_compiling" = yes; then
      echo "$ac_t""unknown (cross-compiling)" 1>&6
     { echo "configure: error: *** INTERNAL CONFIGURE ERROR" 1>&2; exit 1; }
 
 else
   cat > conftest.$ac_ext <<EOF
-#line 1118 "configure"
+#line 1130 "configure"
 #include "confdefs.h"
 
 #include <float.h>
@@ -1128,7 +1140,7 @@ int main(void) {
 }
 
 EOF
-if { (eval echo configure:1132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:1144: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
      echo "$ac_t""yes" 1>&6
     IEEEFLAG="-mieee"
@@ -1165,7 +1177,7 @@ fi
 # Extract the first word of "pwd", so it can be a program name with args.
 set dummy pwd; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1169: checking for $ac_word" >&5
+echo "configure:1181: checking for $ac_word" >&5
 
 case "$pwd" in
   /*)
@@ -1203,7 +1215,7 @@ else
 fi
 
 echo $ac_n "checking for source directory""... $ac_c" 1>&6
-echo "configure:1207: checking for source directory" >&5
+echo "configure:1219: checking for source directory" >&5
 
 if test -z "$srcdir" ; then
   SRCDIR=`$pwd`
@@ -1214,7 +1226,7 @@ fi
 echo "$ac_t"""$SRCDIR"" 1>&6
 
 echo $ac_n "checking for build directory""... $ac_c" 1>&6
-echo "configure:1218: checking for build directory" >&5
+echo "configure:1230: checking for build directory" >&5
 
 DSTDIR=`$pwd`
 WINDSTDIR=`$winpwd`
@@ -1278,11 +1290,11 @@ NAME_VER=`echo ${GRASS_VERSION_NUMBER} | sed 's/\..*//'`
 LIB_VER=`echo ${GRASS_VERSION_NUMBER} | sed 's/^\([0-9.]*\).*$/\1/'`
 
 
-GRASS_VERSION_SVN=00000
+GRASS_VERSION_SVN="exported"
 # Extract the first word of "svnversion", so it can be a program name with args.
 set dummy svnversion; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1286: checking for $ac_word" >&5
+echo "configure:1298: checking for $ac_word" >&5
 
 case "$SVN_VERSION" in
   /*)
@@ -1315,7 +1327,9 @@ fi
 if test "$SVN_VERSION" != "no" ; then
    GRASS_VERSION_SVN=`$SVN_VERSION -c | cut -f2 -d:`
    if test "$GRASS_VERSION_SVN" = "exported" -o "$GRASS_VERSION_SVN" = "Unversioned directory" ; then
-      GRASS_VERSION_SVN=00000
+      GRASS_VERSION_SVN="exported"
+   else
+      GRASS_VERSION_SVN="r$GRASS_VERSION_SVN"
    fi
 fi
 
@@ -1341,7 +1355,7 @@ fi
 
 
 echo $ac_n "checking for MacOSX App""... $ac_c" 1>&6
-echo "configure:1345: checking for MacOSX App" >&5
+echo "configure:1359: checking for MacOSX App" >&5
 case "$enable_macosx_app" in
 	yes)	MACOSX_APP=1	;;
 	no)	MACOSX_APP=	;;
@@ -1353,7 +1367,7 @@ echo "$ac_t"""$enable_macosx_app"" 1>&6
 # Check for MacOSX archs
 
 echo $ac_n "checking for MacOSX architectures""... $ac_c" 1>&6
-echo "configure:1357: checking for MacOSX architectures" >&5
+echo "configure:1371: checking for MacOSX architectures" >&5
 
 MACOSX_ARCHS=
 
@@ -1382,7 +1396,7 @@ fi
 # Check for MacOSX SDK
 
 echo $ac_n "checking for MacOSX SDK""... $ac_c" 1>&6
-echo "configure:1386: checking for MacOSX SDK" >&5
+echo "configure:1400: checking for MacOSX SDK" >&5
 
 MACOSX_SDK=
 
@@ -1392,7 +1406,7 @@ else
   
 ac_safe=`echo "$with_macosx_sdk/SDKSettings.plist" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $with_macosx_sdk/SDKSettings.plist""... $ac_c" 1>&6
-echo "configure:1396: checking for $with_macosx_sdk/SDKSettings.plist" >&5
+echo "configure:1410: checking for $with_macosx_sdk/SDKSettings.plist" >&5
 
 if test "$cross_compiling" = yes; then
     { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
@@ -1436,7 +1450,7 @@ fi
 
 
     echo $ac_n "checking how to build libraries""... $ac_c" 1>&6
-echo "configure:1440: checking how to build libraries" >&5
+echo "configure:1454: checking how to build libraries" >&5
     # Check whether --enable-shared or --disable-shared was given.
 if test "${enable_shared+set}" = set; then
   enableval="$enable_shared"
@@ -1873,6 +1887,16 @@ fi
 
 
 
+# Check whether --with-bzlib or --without-bzlib was given.
+if test "${with_bzlib+set}" = set; then
+  withval="$with_bzlib"
+  :
+else
+  with_bzlib=no
+fi
+
+
+
 # Check whether --with-gdal or --without-gdal was given.
 if test "${with_gdal+set}" = set; then
   withval="$with_gdal"
@@ -1889,6 +1913,15 @@ else
 fi
 
 
+# Check whether --with-pdal or --without-pdal was given.
+if test "${with_pdal+set}" = set; then
+  withval="$with_pdal"
+  :
+else
+  with_pdal="no"
+fi
+
+
 # Check whether --with-wxwidgets or --without-wxwidgets was given.
 if test "${with_wxwidgets+set}" = set; then
   withval="$with_wxwidgets"
@@ -1950,6 +1983,23 @@ fi
 
 
 
+# Check whether --with-bzlib-includes or --without-bzlib-includes was given.
+if test "${with_bzlib_includes+set}" = set; then
+  withval="$with_bzlib_includes"
+  :
+fi
+
+
+
+# Check whether --with-bzlib-libs or --without-bzlib-libs was given.
+if test "${with_bzlib_libs+set}" = set; then
+  withval="$with_bzlib_libs"
+  :
+fi
+
+
+
+
 # Check whether --with-readline-includes or --without-readline-includes was given.
 if test "${with_readline_includes+set}" = set; then
   withval="$with_readline_includes"
@@ -2306,7 +2356,7 @@ fi
 # Done checking fortran
 
 echo $ac_n "checking for additional include dirs""... $ac_c" 1>&6
-echo "configure:2310: checking for additional include dirs" >&5
+echo "configure:2360: checking for additional include dirs" >&5
 case "$with_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to list --with-includes." 1>&2; exit 1; }
@@ -2329,7 +2379,7 @@ fi
 # With libs option
 
 echo $ac_n "checking for additional library dirs""... $ac_c" 1>&6
-echo "configure:2333: checking for additional library dirs" >&5
+echo "configure:2383: checking for additional library dirs" >&5
 case "$with_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory list to --with-libs." 1>&2; exit 1; }
@@ -2363,7 +2413,7 @@ fi
 # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
 # ./install, which can be erroneously created by make from ./install.sh.
 echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:2367: checking for a BSD compatible install" >&5
+echo "configure:2417: checking for a BSD compatible install" >&5
 if test -z "$INSTALL"; then
 
   IFS="${IFS= 	}"; ac_save_IFS="$IFS"; IFS=":"
@@ -2416,7 +2466,7 @@ test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
 # Extract the first word of "flex", so it can be a program name with args.
 set dummy flex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2420: checking for $ac_word" >&5
+echo "configure:2470: checking for $ac_word" >&5
 
 if test -n "$LEX"; then
   ac_cv_prog_LEX="$LEX" # Let the user override the test.
@@ -2447,13 +2497,13 @@ then
   *) ac_lib=l ;;
   esac
   echo $ac_n "checking for yywrap in -l$ac_lib""... $ac_c" 1>&6
-echo "configure:2451: checking for yywrap in -l$ac_lib" >&5
+echo "configure:2501: checking for yywrap in -l$ac_lib" >&5
 ac_lib_var=`echo $ac_lib'_'yywrap | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-l$ac_lib  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 2457 "configure"
+#line 2507 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -2464,7 +2514,7 @@ int main() {
 yywrap()
 ; return 0; }
 EOF
-if { (eval echo configure:2468: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:2518: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -2489,7 +2539,7 @@ if test "$LEX" = "lex"; then
     # Extract the first word of "lex", so it can be a program name with args.
 set dummy lex; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2493: checking for $ac_word" >&5
+echo "configure:2543: checking for $ac_word" >&5
 
 case "$LEXPATH" in
   /*)
@@ -2529,7 +2579,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2533: checking for $ac_word" >&5
+echo "configure:2583: checking for $ac_word" >&5
 
 if test -n "$YACC"; then
   ac_cv_prog_YACC="$YACC" # Let the user override the test.
@@ -2560,7 +2610,7 @@ if test "$YACC" = "yacc"; then
     # Extract the first word of "yacc", so it can be a program name with args.
 set dummy yacc; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2564: checking for $ac_word" >&5
+echo "configure:2614: checking for $ac_word" >&5
 
 case "$YACCPATH" in
   /*)
@@ -2598,7 +2648,7 @@ fi
 # Extract the first word of "ranlib", so it can be a program name with args.
 set dummy ranlib; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2602: checking for $ac_word" >&5
+echo "configure:2652: checking for $ac_word" >&5
 
 if test -n "$RANLIB"; then
   ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
@@ -2627,7 +2677,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2631: checking for $ac_word" >&5
+echo "configure:2681: checking for $ac_word" >&5
 
 if test -n "$AR"; then
   ac_cv_prog_AR="$AR" # Let the user override the test.
@@ -2658,7 +2708,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2662: checking for $ac_word" >&5
+echo "configure:2712: checking for $ac_word" >&5
 
 if test -n "$ENV"; then
   ac_cv_prog_ENV="$ENV" # Let the user override the test.
@@ -2687,7 +2737,7 @@ done
 # Extract the first word of "perl", so it can be a program name with args.
 set dummy perl; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:2691: checking for $ac_word" >&5
+echo "configure:2741: checking for $ac_word" >&5
 
 case "$PERL" in
   /*)
@@ -2718,7 +2768,7 @@ else
 fi
   
 echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:2722: checking how to run the C preprocessor" >&5
+echo "configure:2772: checking how to run the C preprocessor" >&5
 # On Suns, sometimes $CPP names a directory.
 if test -n "$CPP" && test -d "$CPP"; then
   CPP=
@@ -2731,13 +2781,13 @@ if test -z "$CPP"; then
   # On the NeXT, cc -E runs the code through the compiler's parser,
   # not just through cpp.
   cat > conftest.$ac_ext <<EOF
-#line 2735 "configure"
+#line 2785 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2741: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2748,13 +2798,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -E -traditional-cpp"
   cat > conftest.$ac_ext <<EOF
-#line 2752 "configure"
+#line 2802 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2758: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2808: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2765,13 +2815,13 @@ else
   rm -rf conftest*
   CPP="${CC-cc} -nologo -E"
   cat > conftest.$ac_ext <<EOF
-#line 2769 "configure"
+#line 2819 "configure"
 #include "confdefs.h"
 #include <assert.h>
 Syntax Error
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2775: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2825: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   :
@@ -2795,10 +2845,10 @@ fi
 echo "$ac_t""$CPP" 1>&6
 
 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:2799: checking for ANSI C header files" >&5
+echo "configure:2849: checking for ANSI C header files" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2802 "configure"
+#line 2852 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 #include <stdarg.h>
@@ -2806,7 +2856,7 @@ cat > conftest.$ac_ext <<EOF
 #include <float.h>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2810: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2860: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2823,7 +2873,7 @@ rm -f conftest*
 if test $ac_cv_header_stdc = yes; then
   # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 2827 "configure"
+#line 2877 "configure"
 #include "confdefs.h"
 #include <string.h>
 EOF
@@ -2841,7 +2891,7 @@ fi
 if test $ac_cv_header_stdc = yes; then
   # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
 cat > conftest.$ac_ext <<EOF
-#line 2845 "configure"
+#line 2895 "configure"
 #include "confdefs.h"
 #include <stdlib.h>
 EOF
@@ -2862,7 +2912,7 @@ if test "$cross_compiling" = yes; then
   :
 else
   cat > conftest.$ac_ext <<EOF
-#line 2866 "configure"
+#line 2916 "configure"
 #include "confdefs.h"
 #include <ctype.h>
 #define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
@@ -2873,7 +2923,7 @@ if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
 exit (0); }
 
 EOF
-if { (eval echo configure:2877: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:2927: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   :
 else
@@ -2900,15 +2950,15 @@ for ac_hdr in limits.h termio.h termios.h unistd.h values.h f2c.h g2c.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2904: checking for $ac_hdr" >&5
+echo "configure:2954: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2907 "configure"
+#line 2957 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2912: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2962: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2937,15 +2987,15 @@ for ac_hdr in sys/ioctl.h sys/mtio.h sys/resource.h sys/time.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2941: checking for $ac_hdr" >&5
+echo "configure:2991: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2944 "configure"
+#line 2994 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2949: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:2999: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -2974,15 +3024,15 @@ for ac_hdr in sys/timeb.h sys/types.h sys/utsname.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2978: checking for $ac_hdr" >&5
+echo "configure:3028: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 2981 "configure"
+#line 3031 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2986: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3036: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3011,15 +3061,15 @@ for ac_hdr in libintl.h iconv.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3015: checking for $ac_hdr" >&5
+echo "configure:3065: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3018 "configure"
+#line 3068 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3023: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3073: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3048,15 +3098,15 @@ for ac_hdr in langinfo.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3052: checking for $ac_hdr" >&5
+echo "configure:3102: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3055 "configure"
+#line 3105 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3060: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3110: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3082,10 +3132,10 @@ fi
 done
 
 echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
-echo "configure:3086: checking whether time.h and sys/time.h may both be included" >&5
+echo "configure:3136: checking whether time.h and sys/time.h may both be included" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3089 "configure"
+#line 3139 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <sys/time.h>
@@ -3094,7 +3144,7 @@ int main() {
 struct tm *tp;
 ; return 0; }
 EOF
-if { (eval echo configure:3098: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3148: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_header_time=yes
 else
@@ -3114,10 +3164,10 @@ EOF
 fi
 
 echo $ac_n "checking for off_t""... $ac_c" 1>&6
-echo "configure:3118: checking for off_t" >&5
+echo "configure:3168: checking for off_t" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3121 "configure"
+#line 3171 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #if STDC_HEADERS
@@ -3144,10 +3194,10 @@ EOF
 fi
 
 echo $ac_n "checking for uid_t in sys/types.h""... $ac_c" 1>&6
-echo "configure:3148: checking for uid_t in sys/types.h" >&5
+echo "configure:3198: checking for uid_t in sys/types.h" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3151 "configure"
+#line 3201 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 EOF
@@ -3175,10 +3225,10 @@ EOF
 fi
 
 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:3179: checking return type of signal handlers" >&5
+echo "configure:3229: checking return type of signal handlers" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3182 "configure"
+#line 3232 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
 #include <signal.h>
@@ -3195,7 +3245,7 @@ int main() {
 int i;
 ; return 0; }
 EOF
-if { (eval echo configure:3199: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3249: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_type_signal=void
 else
@@ -3213,10 +3263,10 @@ EOF
 
 
 echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6
-echo "configure:3217: checking for Cygwin environment" >&5
+echo "configure:3267: checking for Cygwin environment" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3220 "configure"
+#line 3270 "configure"
 #include "confdefs.h"
 
 int main() {
@@ -3227,7 +3277,7 @@ int main() {
 return __CYGWIN__;
 ; return 0; }
 EOF
-if { (eval echo configure:3231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3281: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_cygwin=yes
 else
@@ -3245,10 +3295,10 @@ test "$ac_cv_cygwin" = yes && CYGWIN=yes
 for ac_func in ftime gethostname gettimeofday lseek nice time uname
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3249: checking for $ac_func" >&5
+echo "configure:3299: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3252 "configure"
+#line 3302 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3271,7 +3321,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3275: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3297,10 +3347,10 @@ done
 for ac_func in seteuid setpriority setreuid setruid
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3301: checking for $ac_func" >&5
+echo "configure:3351: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3304 "configure"
+#line 3354 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3323,7 +3373,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3327: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3377: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3349,10 +3399,10 @@ done
 for ac_func in drand48
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3353: checking for $ac_func" >&5
+echo "configure:3403: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3356 "configure"
+#line 3406 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3375,7 +3425,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3429: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3401,10 +3451,10 @@ done
 for ac_func in putenv setenv
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3405: checking for $ac_func" >&5
+echo "configure:3455: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3408 "configure"
+#line 3458 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3427,7 +3477,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3431: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3453,10 +3503,10 @@ done
 for ac_func in nanosleep
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:3457: checking for $ac_func" >&5
+echo "configure:3507: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 3460 "configure"
+#line 3510 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -3479,7 +3529,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:3483: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -3504,13 +3554,13 @@ done
 
 if test "$cross_compiling" != "yes" ; then
 echo $ac_n "checking whether setpgrp takes no argument""... $ac_c" 1>&6
-echo "configure:3508: checking whether setpgrp takes no argument" >&5
+echo "configure:3558: checking whether setpgrp takes no argument" >&5
 
 if test "$cross_compiling" = yes; then
   { echo "configure: error: cannot check setpgrp if cross compiling" 1>&2; exit 1; }
 else
   cat > conftest.$ac_ext <<EOF
-#line 3514 "configure"
+#line 3564 "configure"
 #include "confdefs.h"
 
 #ifdef HAVE_UNISTD_H
@@ -3530,7 +3580,7 @@ main()
 }
 
 EOF
-if { (eval echo configure:3534: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3584: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
   ac_cv_func_setpgrp_void=no
 else
@@ -3558,16 +3608,16 @@ CROSS_COMPILING=1
 fi
 
 echo $ac_n "checking for long long int""... $ac_c" 1>&6
-echo "configure:3562: checking for long long int" >&5
+echo "configure:3612: checking for long long int" >&5
 cat > conftest.$ac_ext <<EOF
-#line 3564 "configure"
+#line 3614 "configure"
 #include "confdefs.h"
 
 int main() {
 long long int x;
 ; return 0; }
 EOF
-if { (eval echo configure:3571: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:3621: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   
 echo "$ac_t""yes" 1>&6
@@ -3587,7 +3637,7 @@ fi
 rm -f conftest*
 
 echo $ac_n "checking for W11""... $ac_c" 1>&6
-echo "configure:3591: checking for W11" >&5
+echo "configure:3641: checking for W11" >&5
 case "$enable_w11" in
 	yes|no)	echo "$ac_t"""$enable_w11"" 1>&6	;;
 	*)	{ echo "configure: error: *** You must answer yes or no." 1>&2; exit 1; }	;;
@@ -3615,7 +3665,7 @@ else
 # Uses ac_ vars as temps to allow command line to override cache and checks.
 # --without-x overrides everything else, but does not touch the cache.
 echo $ac_n "checking for X""... $ac_c" 1>&6
-echo "configure:3619: checking for X" >&5
+echo "configure:3669: checking for X" >&5
 
 # Check whether --with-x or --without-x was given.
 if test "${with_x+set}" = set; then
@@ -3675,12 +3725,12 @@ if test "$ac_x_includes" = NO; then
 
   # First, try using that file with no special directory specified.
 cat > conftest.$ac_ext <<EOF
-#line 3679 "configure"
+#line 3729 "configure"
 #include "confdefs.h"
 #include <$x_direct_test_include>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3684: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:3734: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -3749,14 +3799,14 @@ if test "$ac_x_libraries" = NO; then
   ac_save_LIBS="$LIBS"
   LIBS="-l$x_direct_test_library $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3753 "configure"
+#line 3803 "configure"
 #include "confdefs.h"
 
 int main() {
 ${x_direct_test_function}()
 ; return 0; }
 EOF
-if { (eval echo configure:3760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3810: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LIBS="$ac_save_LIBS"
 # We can link X programs with no special library path.
@@ -3861,17 +3911,17 @@ else
     case "`(uname -sr) 2>/dev/null`" in
     "SunOS 5"*)
       echo $ac_n "checking whether -R must be followed by a space""... $ac_c" 1>&6
-echo "configure:3865: checking whether -R must be followed by a space" >&5
+echo "configure:3915: checking whether -R must be followed by a space" >&5
       ac_xsave_LIBS="$LIBS"; LIBS="$LIBS -R$x_libraries"
       cat > conftest.$ac_ext <<EOF
-#line 3868 "configure"
+#line 3918 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3875: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3925: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_nospace=yes
 else
@@ -3887,14 +3937,14 @@ rm -f conftest*
       else
 	LIBS="$ac_xsave_LIBS -R $x_libraries"
 	cat > conftest.$ac_ext <<EOF
-#line 3891 "configure"
+#line 3941 "configure"
 #include "confdefs.h"
 
 int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:3898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3948: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_R_space=yes
 else
@@ -3926,13 +3976,13 @@ rm -f conftest*
     # libraries were built with DECnet support.  And karl at cs.umb.edu says
     # the Alpha needs dnet_stub (dnet does not exist).
     echo $ac_n "checking for dnet_ntoa in -ldnet""... $ac_c" 1>&6
-echo "configure:3930: checking for dnet_ntoa in -ldnet" >&5
+echo "configure:3980: checking for dnet_ntoa in -ldnet" >&5
 ac_lib_var=`echo dnet'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ldnet  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3936 "configure"
+#line 3986 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3943,7 +3993,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:3947: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:3997: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -3964,13 +4014,13 @@ fi
 
     if test $ac_cv_lib_dnet_dnet_ntoa = no; then
       echo $ac_n "checking for dnet_ntoa in -ldnet_stub""... $ac_c" 1>&6
-echo "configure:3968: checking for dnet_ntoa in -ldnet_stub" >&5
+echo "configure:4018: checking for dnet_ntoa in -ldnet_stub" >&5
 ac_lib_var=`echo dnet_stub'_'dnet_ntoa | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ldnet_stub  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 3974 "configure"
+#line 4024 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -3981,7 +4031,7 @@ int main() {
 dnet_ntoa()
 ; return 0; }
 EOF
-if { (eval echo configure:3985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4009,10 +4059,10 @@ fi
     # The nsl library prevents programs from opening the X display
     # on Irix 5.2, according to dickey at clark.net.
     echo $ac_n "checking for gethostbyname""... $ac_c" 1>&6
-echo "configure:4013: checking for gethostbyname" >&5
+echo "configure:4063: checking for gethostbyname" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4016 "configure"
+#line 4066 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gethostbyname(); below.  */
@@ -4035,7 +4085,7 @@ gethostbyname();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4039: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4089: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gethostbyname=yes"
 else
@@ -4055,13 +4105,13 @@ fi
 
     if test $ac_cv_func_gethostbyname = no; then
       echo $ac_n "checking for gethostbyname in -lnsl""... $ac_c" 1>&6
-echo "configure:4059: checking for gethostbyname in -lnsl" >&5
+echo "configure:4109: checking for gethostbyname in -lnsl" >&5
 ac_lib_var=`echo nsl'_'gethostbyname | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lnsl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4065 "configure"
+#line 4115 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4072,7 +4122,7 @@ int main() {
 gethostbyname()
 ; return 0; }
 EOF
-if { (eval echo configure:4076: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4126: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4101,10 +4151,10 @@ fi
     # -lsocket must be given before -lnsl if both are needed.
     # We assume that if connect needs -lnsl, so does gethostbyname.
     echo $ac_n "checking for connect""... $ac_c" 1>&6
-echo "configure:4105: checking for connect" >&5
+echo "configure:4155: checking for connect" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4108 "configure"
+#line 4158 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char connect(); below.  */
@@ -4127,7 +4177,7 @@ connect();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4131: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4181: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_connect=yes"
 else
@@ -4147,13 +4197,13 @@ fi
 
     if test $ac_cv_func_connect = no; then
       echo $ac_n "checking for connect in -lsocket""... $ac_c" 1>&6
-echo "configure:4151: checking for connect in -lsocket" >&5
+echo "configure:4201: checking for connect in -lsocket" >&5
 ac_lib_var=`echo socket'_'connect | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4157 "configure"
+#line 4207 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4164,7 +4214,7 @@ int main() {
 connect()
 ; return 0; }
 EOF
-if { (eval echo configure:4168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4187,10 +4237,10 @@ fi
 
     # gomez at mi.uni-erlangen.de says -lposix is necessary on A/UX.
     echo $ac_n "checking for remove""... $ac_c" 1>&6
-echo "configure:4191: checking for remove" >&5
+echo "configure:4241: checking for remove" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4194 "configure"
+#line 4244 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char remove(); below.  */
@@ -4213,7 +4263,7 @@ remove();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4217: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_remove=yes"
 else
@@ -4233,13 +4283,13 @@ fi
 
     if test $ac_cv_func_remove = no; then
       echo $ac_n "checking for remove in -lposix""... $ac_c" 1>&6
-echo "configure:4237: checking for remove in -lposix" >&5
+echo "configure:4287: checking for remove in -lposix" >&5
 ac_lib_var=`echo posix'_'remove | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lposix  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4243 "configure"
+#line 4293 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4250,7 +4300,7 @@ int main() {
 remove()
 ; return 0; }
 EOF
-if { (eval echo configure:4254: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4273,10 +4323,10 @@ fi
 
     # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
     echo $ac_n "checking for shmat""... $ac_c" 1>&6
-echo "configure:4277: checking for shmat" >&5
+echo "configure:4327: checking for shmat" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4280 "configure"
+#line 4330 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char shmat(); below.  */
@@ -4299,7 +4349,7 @@ shmat();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_shmat=yes"
 else
@@ -4319,13 +4369,13 @@ fi
 
     if test $ac_cv_func_shmat = no; then
       echo $ac_n "checking for shmat in -lipc""... $ac_c" 1>&6
-echo "configure:4323: checking for shmat in -lipc" >&5
+echo "configure:4373: checking for shmat in -lipc" >&5
 ac_lib_var=`echo ipc'_'shmat | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lipc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4329 "configure"
+#line 4379 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4336,7 +4386,7 @@ int main() {
 shmat()
 ; return 0; }
 EOF
-if { (eval echo configure:4340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4368,13 +4418,13 @@ fi
   # libraries we check for below, so use a different variable.
   #  --interran at uluru.Stanford.EDU, kb at cs.umb.edu.
   echo $ac_n "checking for IceConnectionNumber in -lICE""... $ac_c" 1>&6
-echo "configure:4372: checking for IceConnectionNumber in -lICE" >&5
+echo "configure:4422: checking for IceConnectionNumber in -lICE" >&5
 ac_lib_var=`echo ICE'_'IceConnectionNumber | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lICE $X_EXTRA_LIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4378 "configure"
+#line 4428 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4385,7 +4435,7 @@ int main() {
 IceConnectionNumber()
 ; return 0; }
 EOF
-if { (eval echo configure:4389: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4425,12 +4475,12 @@ ac_save_libs="$LIBS"
 LIBS=""
 
 echo $ac_n "checking for library containing cuserid""... $ac_c" 1>&6
-echo "configure:4429: checking for library containing cuserid" >&5
+echo "configure:4479: checking for library containing cuserid" >&5
 
 ac_func_search_save_LIBS="$LIBS"
 ac_cv_search_cuserid="no"
 cat > conftest.$ac_ext <<EOF
-#line 4434 "configure"
+#line 4484 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4441,7 +4491,7 @@ int main() {
 cuserid()
 ; return 0; }
 EOF
-if { (eval echo configure:4445: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4495: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_search_cuserid="none required"
 else
@@ -4452,7 +4502,7 @@ rm -f conftest*
 test "$ac_cv_search_cuserid" = "no" && for i in compat; do
 LIBS="-l$i  $ac_func_search_save_LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4456 "configure"
+#line 4506 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4463,7 +4513,7 @@ int main() {
 cuserid()
 ; return 0; }
 EOF
-if { (eval echo configure:4467: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4517: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_search_cuserid="-l$i"
 break
@@ -4489,10 +4539,10 @@ LIBS="$ac_save_libs"
 for ac_func in asprintf
 do
 echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4493: checking for $ac_func" >&5
+echo "configure:4543: checking for $ac_func" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4496 "configure"
+#line 4546 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char $ac_func(); below.  */
@@ -4515,7 +4565,7 @@ $ac_func();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4519: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4569: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_$ac_func=yes"
 else
@@ -4542,10 +4592,10 @@ done
 
 # Test if mathlib needs -lm flag or is included with libc
 echo $ac_n "checking for atan""... $ac_c" 1>&6
-echo "configure:4546: checking for atan" >&5
+echo "configure:4596: checking for atan" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4549 "configure"
+#line 4599 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char atan(); below.  */
@@ -4568,7 +4618,7 @@ atan();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4622: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_atan=yes"
 else
@@ -4586,13 +4636,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for atan in -lm""... $ac_c" 1>&6
-echo "configure:4590: checking for atan in -lm" >&5
+echo "configure:4640: checking for atan in -lm" >&5
 ac_lib_var=`echo m'_'atan | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lm  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4596 "configure"
+#line 4646 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4603,7 +4653,7 @@ int main() {
 atan()
 ; return 0; }
 EOF
-if { (eval echo configure:4607: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4657: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4630,10 +4680,10 @@ fi
 
 
 echo $ac_n "checking for dlsym""... $ac_c" 1>&6
-echo "configure:4634: checking for dlsym" >&5
+echo "configure:4684: checking for dlsym" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4637 "configure"
+#line 4687 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dlsym(); below.  */
@@ -4656,7 +4706,7 @@ dlsym();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4660: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4710: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dlsym=yes"
 else
@@ -4674,13 +4724,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dlsym in -ldl""... $ac_c" 1>&6
-echo "configure:4678: checking for dlsym in -ldl" >&5
+echo "configure:4728: checking for dlsym in -ldl" >&5
 ac_lib_var=`echo dl'_'dlsym | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ldl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4684 "configure"
+#line 4734 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4691,7 +4741,7 @@ int main() {
 dlsym()
 ; return 0; }
 EOF
-if { (eval echo configure:4695: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4745: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4718,10 +4768,10 @@ fi
 
 
 echo $ac_n "checking for iconv""... $ac_c" 1>&6
-echo "configure:4722: checking for iconv" >&5
+echo "configure:4772: checking for iconv" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4725 "configure"
+#line 4775 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char iconv(); below.  */
@@ -4744,7 +4794,7 @@ iconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4748: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4798: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_iconv=yes"
 else
@@ -4762,13 +4812,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for iconv in -liconv""... $ac_c" 1>&6
-echo "configure:4766: checking for iconv in -liconv" >&5
+echo "configure:4816: checking for iconv in -liconv" >&5
 ac_lib_var=`echo iconv'_'iconv | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-liconv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4772 "configure"
+#line 4822 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4779,7 +4829,7 @@ int main() {
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:4783: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4833: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4798,13 +4848,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for iconv in -lgiconv""... $ac_c" 1>&6
-echo "configure:4802: checking for iconv in -lgiconv" >&5
+echo "configure:4852: checking for iconv in -lgiconv" >&5
 ac_lib_var=`echo giconv'_'iconv | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lgiconv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4808 "configure"
+#line 4858 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4815,7 +4865,7 @@ int main() {
 iconv()
 ; return 0; }
 EOF
-if { (eval echo configure:4819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4869: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4834,10 +4884,10 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for libiconv""... $ac_c" 1>&6
-echo "configure:4838: checking for libiconv" >&5
+echo "configure:4888: checking for libiconv" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4841 "configure"
+#line 4891 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char libiconv(); below.  */
@@ -4860,7 +4910,7 @@ libiconv();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4864: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4914: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_libiconv=yes"
 else
@@ -4878,13 +4928,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for libiconv in -liconv""... $ac_c" 1>&6
-echo "configure:4882: checking for libiconv in -liconv" >&5
+echo "configure:4932: checking for libiconv in -liconv" >&5
 ac_lib_var=`echo iconv'_'libiconv | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-liconv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4888 "configure"
+#line 4938 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4895,7 +4945,7 @@ int main() {
 libiconv()
 ; return 0; }
 EOF
-if { (eval echo configure:4899: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4949: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4914,13 +4964,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for libiconv in -lgiconv""... $ac_c" 1>&6
-echo "configure:4918: checking for libiconv in -lgiconv" >&5
+echo "configure:4968: checking for libiconv in -lgiconv" >&5
 ac_lib_var=`echo giconv'_'libiconv | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lgiconv  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 4924 "configure"
+#line 4974 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -4931,7 +4981,7 @@ int main() {
 libiconv()
 ; return 0; }
 EOF
-if { (eval echo configure:4935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:4985: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -4968,10 +5018,10 @@ fi
 
 have_socket=1
 echo $ac_n "checking for socket""... $ac_c" 1>&6
-echo "configure:4972: checking for socket" >&5
+echo "configure:5022: checking for socket" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 4975 "configure"
+#line 5025 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char socket(); below.  */
@@ -4994,7 +5044,7 @@ socket();
 
 ; return 0; }
 EOF
-if { (eval echo configure:4998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5048: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_socket=yes"
 else
@@ -5012,13 +5062,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for socket in -lsocket""... $ac_c" 1>&6
-echo "configure:5016: checking for socket in -lsocket" >&5
+echo "configure:5066: checking for socket in -lsocket" >&5
 ac_lib_var=`echo socket'_'socket | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsocket  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5022 "configure"
+#line 5072 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5029,7 +5079,7 @@ int main() {
 socket()
 ; return 0; }
 EOF
-if { (eval echo configure:5033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5083: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5077,7 +5127,7 @@ ZLIB=
 
 
 echo $ac_n "checking for location of zlib includes""... $ac_c" 1>&6
-echo "configure:5081: checking for location of zlib includes" >&5
+echo "configure:5131: checking for location of zlib includes" >&5
 case "$with_zlib_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-zlib-includes." 1>&2; exit 1; }
@@ -5103,15 +5153,15 @@ for ac_hdr in zlib.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5107: checking for $ac_hdr" >&5
+echo "configure:5157: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5110 "configure"
+#line 5160 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5115: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5165: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5145,7 +5195,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of zlib library""... $ac_c" 1>&6
-echo "configure:5149: checking for location of zlib library" >&5
+echo "configure:5199: checking for location of zlib library" >&5
 case "$with_zlib_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-zlib-libs." 1>&2; exit 1; }
@@ -5170,13 +5220,13 @@ LDFLAGS="$ZLIBLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for deflate in -lz""... $ac_c" 1>&6
-echo "configure:5174: checking for deflate in -lz" >&5
+echo "configure:5224: checking for deflate in -lz" >&5
 ac_lib_var=`echo z'_'deflate | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lz  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5180 "configure"
+#line 5230 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5187,7 +5237,7 @@ int main() {
 deflate()
 ; return 0; }
 EOF
-if { (eval echo configure:5191: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5241: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5225,6 +5275,180 @@ LDFLAGS=${ac_save_ldflags}
 
 # Done checking zlib
 
+# bzip2 support
+
+
+echo $ac_n "checking whether to use bzlib""... $ac_c" 1>&6
+echo "configure:5283: checking whether to use bzlib" >&5
+echo "$ac_t"""$with_bzlib"" 1>&6
+case "$with_bzlib" in
+	"no")	USE_BZIP2=	;;
+	"yes")	USE_BZIP2="1"	;;
+	*)	{ echo "configure: error: *** You must answer yes or no." 1>&2; exit 1; }	;;
+esac
+
+
+
+if test -n "$USE_BZIP2"; then
+
+BZLIBLIBPATH=
+BZLIBINCPATH=
+BZLIB=
+
+# With bzip2 includes directory
+
+
+echo $ac_n "checking for location of bzlib includes""... $ac_c" 1>&6
+echo "configure:5303: checking for location of bzlib includes" >&5
+case "$with_bzlib_includes" in
+y | ye | yes | n | no)
+	{ echo "configure: error: *** You must supply a directory to --with-bzlib-includes." 1>&2; exit 1; }
+	;;
+esac
+echo "$ac_t""$with_bzlib_includes" 1>&6
+
+if test -n "$with_bzlib_includes" ; then
+    for dir in $with_bzlib_includes; do
+        if test -d "$dir"; then
+            BZLIBINCPATH="$BZLIBINCPATH -I$dir"
+        else
+            { echo "configure: error: *** bzlib includes directory $dir does not exist." 1>&2; exit 1; }
+        fi
+    done
+fi
+
+
+
+ac_save_cppflags="$CPPFLAGS"
+CPPFLAGS="$BZLIBINCPATH $CPPFLAGS"
+for ac_hdr in bzlib.h
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:5329: checking for $ac_hdr" >&5
+
+cat > conftest.$ac_ext <<EOF
+#line 5332 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:5337: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=yes"
+else
+  echo "$ac_err" >&5
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+  cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+ 
+else
+  echo "$ac_t""no" 1>&6
+{ echo "configure: error: *** Unable to locate bzlib includes." 1>&2; exit 1; }
+
+fi
+done
+
+CPPFLAGS=$ac_save_cppflags
+
+
+# With bzip2 library directory
+
+
+echo $ac_n "checking for location of bzlib library""... $ac_c" 1>&6
+echo "configure:5371: checking for location of bzlib library" >&5
+case "$with_bzlib_libs" in
+y | ye | yes | n | no)
+	{ echo "configure: error: *** You must supply a directory to --with-bzlib-libs." 1>&2; exit 1; }
+	;;
+esac
+echo "$ac_t""$with_bzlib_libs" 1>&6
+
+if test -n "$with_bzlib_libs"; then
+    for dir in $with_bzlib_libs; do
+        if test -d "$dir"; then
+            BZLIBLIBPATH="$BZLIBLIBPATH -L$dir"
+        else
+            { echo "configure: error: *** bzlib library directory $dir does not exist." 1>&2; exit 1; }
+        fi
+    done
+fi
+
+
+
+ac_save_ldflags="$LDFLAGS"
+LDFLAGS="$BZLIBLIBPATH $LDFLAGS"
+
+
+echo $ac_n "checking for BZ2_bzBuffToBuffCompress in -lbz2""... $ac_c" 1>&6
+echo "configure:5396: checking for BZ2_bzBuffToBuffCompress in -lbz2" >&5
+ac_lib_var=`echo bz2'_'BZ2_bzBuffToBuffCompress | sed 'y%./+-%__p_%'`
+
+ac_save_LIBS="$LIBS"
+LIBS="-lbz2  $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 5402 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error.  */
+/* We use char because int might match the return type of a gcc2
+    builtin and then its argument prototype would still apply.  */
+char BZ2_bzBuffToBuffCompress();
+
+int main() {
+BZ2_bzBuffToBuffCompress()
+; return 0; }
+EOF
+if { (eval echo configure:5413: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=yes"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+  echo "$ac_t""yes" 1>&6
+  BZLIB="$BZLIB -lbz2 "
+else
+  echo "$ac_t""no" 1>&6
+
+LDFLAGS=${ac_save_ldflags}
+
+    { echo "configure: error: *** Unable to locate bzlib library." 1>&2; exit 1; }
+
+
+fi
+
+
+
+LDFLAGS=${ac_save_ldflags}
+
+
+#
+
+fi # $USE_BZIP2
+
+
+
+
+
+# Done checking bzip2
+
 # Mandatory PROJ dependency
 
 PROJINC=
@@ -5235,7 +5459,7 @@ PROJSHARE=
 
 
 echo $ac_n "checking for location of External PROJ.4 includes""... $ac_c" 1>&6
-echo "configure:5239: checking for location of External PROJ.4 includes" >&5
+echo "configure:5463: checking for location of External PROJ.4 includes" >&5
 case "$with_proj_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-proj-includes." 1>&2; exit 1; }
@@ -5261,15 +5485,15 @@ for ac_hdr in proj_api.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5265: checking for $ac_hdr" >&5
+echo "configure:5489: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5268 "configure"
+#line 5492 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5273: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5497: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5306,7 +5530,7 @@ if test "$cross_compiling" = yes; then
 else
     
 echo $ac_n "checking External PROJ.4 version""... $ac_c" 1>&6
-echo "configure:5310: checking External PROJ.4 version" >&5
+echo "configure:5534: checking External PROJ.4 version" >&5
 ac_save_cppflags="$CPPFLAGS"
 CPPFLAGS="$PROJINC $CPPFLAGS"
 if test "$cross_compiling" = yes; then
@@ -5314,7 +5538,7 @@ if test "$cross_compiling" = yes; then
         echo "$ac_t""unknown (cross-compiling)" 1>&6 
 else
   cat > conftest.$ac_ext <<EOF
-#line 5318 "configure"
+#line 5542 "configure"
 #include "confdefs.h"
 
 #include <stdio.h>
@@ -5326,7 +5550,7 @@ int main(void) {
 }
     
 EOF
-if { (eval echo configure:5330: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5554: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
 then
      proj_ver=`cat conftestdata`
         echo "$ac_t""$proj_ver" 1>&6
@@ -5351,7 +5575,7 @@ fi
 
 
 echo $ac_n "checking for location of External PROJ.4 library""... $ac_c" 1>&6
-echo "configure:5355: checking for location of External PROJ.4 library" >&5
+echo "configure:5579: checking for location of External PROJ.4 library" >&5
 case "$with_proj_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-proj-libs." 1>&2; exit 1; }
@@ -5376,13 +5600,13 @@ LDFLAGS="$PROJLIB $LDFLAGS"
 
 
 echo $ac_n "checking for pj_get_def in -lproj""... $ac_c" 1>&6
-echo "configure:5380: checking for pj_get_def in -lproj" >&5
+echo "configure:5604: checking for pj_get_def in -lproj" >&5
 ac_lib_var=`echo proj'_'pj_get_def | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lproj  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5386 "configure"
+#line 5610 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5393,7 +5617,7 @@ int main() {
 pj_get_def()
 ; return 0; }
 EOF
-if { (eval echo configure:5397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5621: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5427,7 +5651,7 @@ LDFLAGS=${ac_save_ldflags}
 
 
 echo $ac_n "checking for location of External PROJ.4 data files""... $ac_c" 1>&6
-echo "configure:5431: checking for location of External PROJ.4 data files" >&5
+echo "configure:5655: checking for location of External PROJ.4 data files" >&5
 case "$with_proj_share" in
 y | ye | yes | n | no)
         { echo "configure: error: *** You must supply a directory to --with-proj-share." 1>&2; exit 1; }
@@ -5451,14 +5675,14 @@ fi
 # LOC_CHECK_SHARE does not work when cross compiling
 if test "$cross_compiling" = "yes" ; then
     echo $ac_n "checking for epsg""... $ac_c" 1>&6
-echo "configure:5455: checking for epsg" >&5
+echo "configure:5679: checking for epsg" >&5
     echo "$ac_t""unknown (cross-compiling)" 1>&6
 else
     
 
 ac_safe=`echo "$PROJSHARE/epsg" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $PROJSHARE/epsg""... $ac_c" 1>&6
-echo "configure:5462: checking for $PROJSHARE/epsg" >&5
+echo "configure:5686: checking for $PROJSHARE/epsg" >&5
 
 if test "$cross_compiling" = yes; then
     { echo "configure: error: Cannot check for file existence when cross compiling" 1>&2; exit 1; }
@@ -5490,7 +5714,7 @@ fi
 # Extract the first word of "nad2bin", so it can be a program name with args.
 set dummy nad2bin; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5494: checking for $ac_word" >&5
+echo "configure:5718: checking for $ac_word" >&5
 
 case "$NAD2BIN" in
   /*)
@@ -5530,7 +5754,7 @@ fi
 
 
 echo $ac_n "checking whether to use regex""... $ac_c" 1>&6
-echo "configure:5534: checking whether to use regex" >&5
+echo "configure:5758: checking whether to use regex" >&5
 echo "$ac_t"""$with_regex"" 1>&6
 case "$with_regex" in
 	"no")	USE_REGEX=	;;
@@ -5550,7 +5774,7 @@ if test -n "$USE_REGEX"; then
 
 
 echo $ac_n "checking for location of regex includes""... $ac_c" 1>&6
-echo "configure:5554: checking for location of regex includes" >&5
+echo "configure:5778: checking for location of regex includes" >&5
 case "$with_regex_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-regex-includes." 1>&2; exit 1; }
@@ -5576,15 +5800,15 @@ for ac_hdr in regex.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5580: checking for $ac_hdr" >&5
+echo "configure:5804: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5583 "configure"
+#line 5807 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5588: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:5812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5618,7 +5842,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of regex library""... $ac_c" 1>&6
-echo "configure:5622: checking for location of regex library" >&5
+echo "configure:5846: checking for location of regex library" >&5
 case "$with_regex_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-regex-libs." 1>&2; exit 1; }
@@ -5643,10 +5867,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS="  $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for regcomp""... $ac_c" 1>&6
-echo "configure:5647: checking for regcomp" >&5
+echo "configure:5871: checking for regcomp" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5650 "configure"
+#line 5874 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char regcomp(); below.  */
@@ -5669,7 +5893,7 @@ regcomp();
 
 ; return 0; }
 EOF
-if { (eval echo configure:5673: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5897: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_regcomp=yes"
 else
@@ -5696,13 +5920,13 @@ LDFLAGS="$REGEXLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for regcomp in -lregex""... $ac_c" 1>&6
-echo "configure:5700: checking for regcomp in -lregex" >&5
+echo "configure:5924: checking for regcomp in -lregex" >&5
 ac_lib_var=`echo regex'_'regcomp | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lregex  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5706 "configure"
+#line 5930 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5713,7 +5937,7 @@ int main() {
 regcomp()
 ; return 0; }
 EOF
-if { (eval echo configure:5717: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:5941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5763,7 +5987,7 @@ fi # $USE_REGEX
 
 
 echo $ac_n "checking whether to use Readline""... $ac_c" 1>&6
-echo "configure:5767: checking whether to use Readline" >&5
+echo "configure:5991: checking whether to use Readline" >&5
 echo "$ac_t"""$with_readline"" 1>&6
 case "$with_readline" in
 	"no")	USE_READLINE=	;;
@@ -5784,7 +6008,7 @@ if test -n "$USE_READLINE"; then
 
 
 echo $ac_n "checking for location of Readline includes""... $ac_c" 1>&6
-echo "configure:5788: checking for location of Readline includes" >&5
+echo "configure:6012: checking for location of Readline includes" >&5
 case "$with_readline_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-readline-includes." 1>&2; exit 1; }
@@ -5810,15 +6034,15 @@ for ac_hdr in readline/readline.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5814: checking for $ac_hdr" >&5
+echo "configure:6038: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5817 "configure"
+#line 6041 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5822: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6046: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5854,15 +6078,15 @@ for ac_hdr in readline/history.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:5858: checking for $ac_hdr" >&5
+echo "configure:6082: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 5861 "configure"
+#line 6085 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:5866: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6090: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -5896,7 +6120,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of Readline library""... $ac_c" 1>&6
-echo "configure:5900: checking for location of Readline library" >&5
+echo "configure:6124: checking for location of Readline library" >&5
 case "$with_readline_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-readline-libs." 1>&2; exit 1; }
@@ -5921,13 +6145,13 @@ LDFLAGS="$READLINELIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for readline in -lreadline""... $ac_c" 1>&6
-echo "configure:5925: checking for readline in -lreadline" >&5
+echo "configure:6149: checking for readline in -lreadline" >&5
 ac_lib_var=`echo readline'_'readline | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lreadline  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5931 "configure"
+#line 6155 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5938,7 +6162,7 @@ int main() {
 readline()
 ; return 0; }
 EOF
-if { (eval echo configure:5942: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6166: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -5973,13 +6197,13 @@ LDFLAGS="$READLINELIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for add_history in -lhistory""... $ac_c" 1>&6
-echo "configure:5977: checking for add_history in -lhistory" >&5
+echo "configure:6201: checking for add_history in -lhistory" >&5
 ac_lib_var=`echo history'_'add_history | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lhistory  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 5983 "configure"
+#line 6207 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -5990,7 +6214,7 @@ int main() {
 add_history()
 ; return 0; }
 EOF
-if { (eval echo configure:5994: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6218: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6032,7 +6256,7 @@ fi # $USE_READLINE
 # GDAL option
 
 echo $ac_n "checking whether to use GDAL""... $ac_c" 1>&6
-echo "configure:6036: checking whether to use GDAL" >&5
+echo "configure:6260: checking whether to use GDAL" >&5
 
 GDAL_LIBS=
 GDAL_CFLAGS=
@@ -6050,7 +6274,7 @@ else
   # Extract the first word of "gdal-config", so it can be a program name with args.
 set dummy gdal-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6054: checking for $ac_word" >&5
+echo "configure:6278: checking for $ac_word" >&5
 
 case "$GDAL_CONFIG" in
   /*)
@@ -6105,14 +6329,14 @@ EOF
   LIBS="$LIBS $GDAL_LIBS"
   CFLAGS="$CFLAGS $GDAL_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 6109 "configure"
+#line 6333 "configure"
 #include "confdefs.h"
 #include <gdal.h>
 int main() {
 GDALOpen("foo", GA_ReadOnly);
 ; return 0; }
 EOF
-if { (eval echo configure:6116: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6340: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -6121,14 +6345,14 @@ else
   
   LIBS="$LIBS $GDAL_DEP_LIBS"
   cat > conftest.$ac_ext <<EOF
-#line 6125 "configure"
+#line 6349 "configure"
 #include "confdefs.h"
 #include <gdal.h>
 int main() {
 GDALOpen("foo", GA_ReadOnly);
 ; return 0; }
 EOF
-if { (eval echo configure:6132: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6356: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   GDAL_LIBS="$GDAL_LIBS $GDAL_DEP_LIBS"
 else
@@ -6160,7 +6384,7 @@ fi
 # libLAS option
 
 echo $ac_n "checking whether to use libLAS""... $ac_c" 1>&6
-echo "configure:6164: checking whether to use libLAS" >&5
+echo "configure:6388: checking whether to use libLAS" >&5
 
 LIBLAS_LIBS=
 LIBLAS_CFLAGS=
@@ -6177,7 +6401,7 @@ else
   # Extract the first word of "liblas-config", so it can be a program name with args.
 set dummy liblas-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6181: checking for $ac_word" >&5
+echo "configure:6405: checking for $ac_word" >&5
 
 case "$LIBLAS_CONFIG" in
   /*)
@@ -6227,14 +6451,14 @@ fi
   CFLAGS="$CFLAGS $LIBLAS_CFLAGS"
   CPPFLAGS="$CPPFLAGS $LIBLAS_INC"
   cat > conftest.$ac_ext <<EOF
-#line 6231 "configure"
+#line 6455 "configure"
 #include "confdefs.h"
 #include <liblas/capi/liblas.h>
 int main() {
 LASReader_Create("foo");
 ; return 0; }
 EOF
-if { (eval echo configure:6238: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6462: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -6242,14 +6466,14 @@ else
   rm -rf conftest*
   
   cat > conftest.$ac_ext <<EOF
-#line 6246 "configure"
+#line 6470 "configure"
 #include "confdefs.h"
 #include <liblas/capi/liblas.h>
 int main() {
 LASReader_Create("foo");
 ; return 0; }
 EOF
-if { (eval echo configure:6253: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   LAS_LIBS="$LAS_LIBS"
 else
@@ -6279,10 +6503,160 @@ fi
 
 
 
+# PDAL option
+
+echo $ac_n "checking whether to use PDAL""... $ac_c" 1>&6
+echo "configure:6510: checking whether to use PDAL" >&5
+
+# new and currently used way to switch language to C++
+# AC_LANG_PUSH(C++)
+
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+
+PDAL_LIBS=
+PDAL_CPPFLAGS=
+USE_PDAL=
+
+if test "`basename xx/$with_pdal`" = "pdal-config" ; then
+  PDAL_CONFIG="$with_pdal"
+fi
+
+if test "$with_pdal" = "no" ; then
+  echo "$ac_t""no" 1>&6
+else
+  echo "$ac_t""yes" 1>&6
+  # Extract the first word of "pdal-config", so it can be a program name with args.
+set dummy pdal-config; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:6538: checking for $ac_word" >&5
+
+case "$PDAL_CONFIG" in
+  /*)
+  ac_cv_path_PDAL_CONFIG="$PDAL_CONFIG" # Let the user override the test with a path.
+  ;;
+  ?:/*)			 
+  ac_cv_path_PDAL_CONFIG="$PDAL_CONFIG" # Let the user override the test with a dos path.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
+  ac_dummy="$PATH"
+  for ac_dir in $ac_dummy; do 
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      ac_cv_path_PDAL_CONFIG="$ac_dir/$ac_word"
+      break
+    fi
+  done
+  IFS="$ac_save_ifs"
+  test -z "$ac_cv_path_PDAL_CONFIG" && ac_cv_path_PDAL_CONFIG="no"
+  ;;
+esac
+PDAL_CONFIG="$ac_cv_path_PDAL_CONFIG"
+if test -n "$PDAL_CONFIG"; then
+  echo "$ac_t""$PDAL_CONFIG" 1>&6
+else
+  echo "$ac_t""no" 1>&6
+fi
+
+
+  if test "$PDAL_CONFIG" = "no" ; then
+    { echo "configure: error: *** could not find pdal-config" 1>&2; exit 1; }
+  fi
+
+  if test "$PDAL_CONFIG" != "" ; then
+    PDAL_LIBS=`"$PDAL_CONFIG" --libs`
+    PDAL_CPPFLAGS=`"$PDAL_CONFIG" --cxxflags`
+    PDAL_INC=`"$PDAL_CONFIG" --includes`
+    USE_PDAL=1
+  fi
+
+  PDAL=
+  ac_save_libs="$LIBS"
+  ac_save_cflags="$CFLAGS"
+  ac_save_cppflags="$CPPFLAGS"
+  LIBS="$LIBS $PDAL_LIBS"
+  CFLAGS="$CFLAGS $PDAL_CFLAGS"
+  CPPFLAGS="$CPPFLAGS $PDAL_CPPFLAGS $PDAL_INC"
+  cat > conftest.$ac_ext <<EOF
+#line 6588 "configure"
+#include "confdefs.h"
+#include <pdal/PointTable.hpp>
+int main() {
+pdal::PointTable table;
+; return 0; }
+EOF
+if { (eval echo configure:6595: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  :
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  
+  cat > conftest.$ac_ext <<EOF
+#line 6603 "configure"
+#include "confdefs.h"
+#include <pdal/PointTable.hpp>
+int main() {
+pdal::PointTable table;
+; return 0; }
+EOF
+if { (eval echo configure:6610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+  rm -rf conftest*
+  PDAL_LIBS="$PDAL_LIBS"
+else
+  echo "configure: failed program was:" >&5
+  cat conftest.$ac_ext >&5
+  rm -rf conftest*
+  
+  { echo "configure: error: *** Unable to locate PDAL library." 1>&2; exit 1; }
+  
+fi
+rm -f conftest*
+  
+fi
+rm -f conftest*
+  LIBS=${ac_save_libs}
+  CFLAGS=${ac_save_cflags}
+  CPPFLAGS=${ac_save_cppflags}
+
+  cat >> confdefs.h <<\EOF
+#define HAVE_PDAL 1
+EOF
+
+fi
+
+
+
+
+
+
+# new and currently used way to switch language back to C
+# AC_LANG_POP(C++)
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+
 # NetCDF option
 
 echo $ac_n "checking whether to use NetCDF""... $ac_c" 1>&6
-echo "configure:6286: checking whether to use NetCDF" >&5
+echo "configure:6660: checking whether to use NetCDF" >&5
 
 NETCDF_LIBS=
 NETCDF_CFLAGS=
@@ -6299,7 +6673,7 @@ else
   # Extract the first word of "nc-config", so it can be a program name with args.
 set dummy nc-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6303: checking for $ac_word" >&5
+echo "configure:6677: checking for $ac_word" >&5
 
 case "$NETCDF_CONFIG" in
   /*)
@@ -6346,14 +6720,14 @@ fi
   LIBS="$LIBS $NETCDF_LIBS"
   CFLAGS="$CFLAGS $NETCDF_CFLAGS"
   cat > conftest.$ac_ext <<EOF
-#line 6350 "configure"
+#line 6724 "configure"
 #include "confdefs.h"
 #include <netcdf.h>
 int main() {
 nc_create("foo", NC_CLOBBER, NULL);
 ; return 0; }
 EOF
-if { (eval echo configure:6357: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -6361,14 +6735,14 @@ else
   rm -rf conftest*
   
   cat > conftest.$ac_ext <<EOF
-#line 6365 "configure"
+#line 6739 "configure"
 #include "confdefs.h"
 #include <netcdf.h>
 int main() {
 nc_create("foo", NC_CLOBBER, NULL);
 ; return 0; }
 EOF
-if { (eval echo configure:6372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   NETCDF_LIBS="$NETCDF_LIBS"
 else
@@ -6399,7 +6773,7 @@ fi
 # GEOS option
 
 echo $ac_n "checking whether to use GEOS""... $ac_c" 1>&6
-echo "configure:6403: checking whether to use GEOS" >&5
+echo "configure:6777: checking whether to use GEOS" >&5
 
 GEOS_LIBS=
 GEOS_CFLAGS=
@@ -6417,7 +6791,7 @@ else
   # Extract the first word of "geos-config", so it can be a program name with args.
 set dummy geos-config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:6421: checking for $ac_word" >&5
+echo "configure:6795: checking for $ac_word" >&5
 
 case "$GEOS_CONFIG" in
   /*)
@@ -6465,15 +6839,15 @@ for ac_hdr in geos_c.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6469: checking for $ac_hdr" >&5
+echo "configure:6843: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6472 "configure"
+#line 6846 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6477: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:6851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6512,13 +6886,13 @@ LDFLAGS="$GEOS_LIBS $LDFLAGS"
 
 
 echo $ac_n "checking for initGEOS in -lgeos_c""... $ac_c" 1>&6
-echo "configure:6516: checking for initGEOS in -lgeos_c" >&5
+echo "configure:6890: checking for initGEOS in -lgeos_c" >&5
 ac_lib_var=`echo geos_c'_'initGEOS | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lgeos_c  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6522 "configure"
+#line 6896 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6529,7 +6903,7 @@ int main() {
 initGEOS()
 ; return 0; }
 EOF
-if { (eval echo configure:6533: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:6907: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6573,7 +6947,7 @@ fi
 
 
 echo $ac_n "checking whether to use TIFF""... $ac_c" 1>&6
-echo "configure:6577: checking whether to use TIFF" >&5
+echo "configure:6951: checking whether to use TIFF" >&5
 echo "$ac_t"""$with_tiff"" 1>&6
 case "$with_tiff" in
 	"no")	USE_TIFF=	;;
@@ -6593,7 +6967,7 @@ if test -n "$USE_TIFF"; then
 
 
 echo $ac_n "checking for location of TIFF includes""... $ac_c" 1>&6
-echo "configure:6597: checking for location of TIFF includes" >&5
+echo "configure:6971: checking for location of TIFF includes" >&5
 case "$with_tiff_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-tiff-includes." 1>&2; exit 1; }
@@ -6619,15 +6993,15 @@ for ac_hdr in tiffio.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:6623: checking for $ac_hdr" >&5
+echo "configure:6997: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 6626 "configure"
+#line 7000 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:6631: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7005: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -6661,7 +7035,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of TIFF library""... $ac_c" 1>&6
-echo "configure:6665: checking for location of TIFF library" >&5
+echo "configure:7039: checking for location of TIFF library" >&5
 case "$with_tiff_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-tiff-libs." 1>&2; exit 1; }
@@ -6692,13 +7066,13 @@ LDFLAGS="$TIFF_LIBRARY_DIRS $LDFLAGS"
 
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6696: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7070: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6702 "configure"
+#line 7076 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6709,7 +7083,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6713: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6728,13 +7102,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6732: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7106: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6738 "configure"
+#line 7112 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6745,7 +7119,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6749: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6764,13 +7138,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6768: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7142: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff $ZLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6774 "configure"
+#line 7148 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6781,7 +7155,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6785: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7159: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6800,13 +7174,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6804: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7178: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff $ZLIB $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6810 "configure"
+#line 7184 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6817,7 +7191,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6821: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7195: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6836,13 +7210,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6840: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7214: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff -ljpeg $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6846 "configure"
+#line 7220 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6853,7 +7227,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6872,13 +7246,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6876: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7250: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff -ljpeg $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6882 "configure"
+#line 7256 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6889,7 +7263,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6893: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7267: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6908,13 +7282,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6912: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7286: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff -ljpeg $ZLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6918 "configure"
+#line 7292 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6925,7 +7299,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6929: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7303: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -6944,13 +7318,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for TIFFOpen in -ltiff""... $ac_c" 1>&6
-echo "configure:6948: checking for TIFFOpen in -ltiff" >&5
+echo "configure:7322: checking for TIFFOpen in -ltiff" >&5
 ac_lib_var=`echo tiff'_'TIFFOpen | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ltiff -ljpeg $ZLIB $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 6954 "configure"
+#line 7328 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -6961,7 +7335,7 @@ int main() {
 TIFFOpen()
 ; return 0; }
 EOF
-if { (eval echo configure:6965: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7339: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7059,7 +7433,7 @@ fi # $USE_TIFF
 
 
 echo $ac_n "checking whether to use PNG""... $ac_c" 1>&6
-echo "configure:7063: checking whether to use PNG" >&5
+echo "configure:7437: checking whether to use PNG" >&5
 echo "$ac_t"""$with_png"" 1>&6
 case "$with_png" in
 	"no")	USE_PNG=	;;
@@ -7078,7 +7452,7 @@ if test -n "$USE_PNG"; then
 
 
 echo $ac_n "checking for location of PNG includes""... $ac_c" 1>&6
-echo "configure:7082: checking for location of PNG includes" >&5
+echo "configure:7456: checking for location of PNG includes" >&5
 case "$with_png_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-png-includes." 1>&2; exit 1; }
@@ -7104,15 +7478,15 @@ for ac_hdr in png.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7108: checking for $ac_hdr" >&5
+echo "configure:7482: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7111 "configure"
+#line 7485 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7116: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7490: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7146,7 +7520,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of PNG library""... $ac_c" 1>&6
-echo "configure:7150: checking for location of PNG library" >&5
+echo "configure:7524: checking for location of PNG library" >&5
 case "$with_png_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-png-libs." 1>&2; exit 1; }
@@ -7171,13 +7545,13 @@ LDFLAGS="$PNGLIB $LDFLAGS"
 
 
 echo $ac_n "checking for png_read_image in -lpng""... $ac_c" 1>&6
-echo "configure:7175: checking for png_read_image in -lpng" >&5
+echo "configure:7549: checking for png_read_image in -lpng" >&5
 ac_lib_var=`echo png'_'png_read_image | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpng $ZLIB $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7181 "configure"
+#line 7555 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7188,7 +7562,7 @@ int main() {
 png_read_image()
 ; return 0; }
 EOF
-if { (eval echo configure:7192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7566: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7230,7 +7604,7 @@ fi # $USE_PNG
 
 
 echo $ac_n "checking whether to use PostgreSQL""... $ac_c" 1>&6
-echo "configure:7234: checking whether to use PostgreSQL" >&5
+echo "configure:7608: checking whether to use PostgreSQL" >&5
 echo "$ac_t"""$with_postgres"" 1>&6
 case "$with_postgres" in
 	"no")	USE_POSTGRES=	;;
@@ -7257,7 +7631,7 @@ if test -n "$USE_POSTGRES"; then
 
 
 echo $ac_n "checking for location of PostgreSQL includes""... $ac_c" 1>&6
-echo "configure:7261: checking for location of PostgreSQL includes" >&5
+echo "configure:7635: checking for location of PostgreSQL includes" >&5
 case "$with_postgres_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-postgres-includes." 1>&2; exit 1; }
@@ -7283,15 +7657,15 @@ for ac_hdr in libpq-fe.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7287: checking for $ac_hdr" >&5
+echo "configure:7661: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7290 "configure"
+#line 7664 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7295: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:7669: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7329,7 +7703,7 @@ if test -n "$USE_POSTGRES"; then
 
 
 echo $ac_n "checking for location of PostgreSQL library""... $ac_c" 1>&6
-echo "configure:7333: checking for location of PostgreSQL library" >&5
+echo "configure:7707: checking for location of PostgreSQL library" >&5
 case "$with_postgres_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-postgres-libs." 1>&2; exit 1; }
@@ -7358,13 +7732,13 @@ LDFLAGS="$PQLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for PQsetdbLogin in -lpq""... $ac_c" 1>&6
-echo "configure:7362: checking for PQsetdbLogin in -lpq" >&5
+echo "configure:7736: checking for PQsetdbLogin in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetdbLogin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7368 "configure"
+#line 7742 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7375,7 +7749,7 @@ int main() {
 PQsetdbLogin()
 ; return 0; }
 EOF
-if { (eval echo configure:7379: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7753: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7394,13 +7768,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for PQsetdbLogin in -lpq""... $ac_c" 1>&6
-echo "configure:7398: checking for PQsetdbLogin in -lpq" >&5
+echo "configure:7772: checking for PQsetdbLogin in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetdbLogin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpq -lssl -lcrypto $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7404 "configure"
+#line 7778 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7411,7 +7785,7 @@ int main() {
 PQsetdbLogin()
 ; return 0; }
 EOF
-if { (eval echo configure:7415: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7789: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7430,13 +7804,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for PQsetdbLogin in -lpq""... $ac_c" 1>&6
-echo "configure:7434: checking for PQsetdbLogin in -lpq" >&5
+echo "configure:7808: checking for PQsetdbLogin in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetdbLogin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpq -lcrypt $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7440 "configure"
+#line 7814 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7447,7 +7821,7 @@ int main() {
 PQsetdbLogin()
 ; return 0; }
 EOF
-if { (eval echo configure:7451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7825: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7466,13 +7840,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for PQsetdbLogin in -lpq""... $ac_c" 1>&6
-echo "configure:7470: checking for PQsetdbLogin in -lpq" >&5
+echo "configure:7844: checking for PQsetdbLogin in -lpq" >&5
 ac_lib_var=`echo pq'_'PQsetdbLogin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpq -lcrypt -lssl -lcrypto $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7476 "configure"
+#line 7850 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7483,7 +7857,7 @@ int main() {
 PQsetdbLogin()
 ; return 0; }
 EOF
-if { (eval echo configure:7487: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7861: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7540,13 +7914,13 @@ LDFLAGS=${ac_save_ldflags}
 ac_save_ldflags="$LDFLAGS"
 LDFLAGS="$LDFLAGS $PQLIBPATH"
 echo $ac_n "checking for PQcmdTuples in -lpq""... $ac_c" 1>&6
-echo "configure:7544: checking for PQcmdTuples in -lpq" >&5
+echo "configure:7918: checking for PQcmdTuples in -lpq" >&5
 ac_lib_var=`echo pq'_'PQcmdTuples | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpq  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7550 "configure"
+#line 7924 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7557,7 +7931,7 @@ int main() {
 PQcmdTuples()
 ; return 0; }
 EOF
-if { (eval echo configure:7561: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7935: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7579,13 +7953,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for PQcmdTuples in -lpq""... $ac_c" 1>&6
-echo "configure:7583: checking for PQcmdTuples in -lpq" >&5
+echo "configure:7957: checking for PQcmdTuples in -lpq" >&5
 ac_lib_var=`echo pq'_'PQcmdTuples | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpq -lcrypt $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7589 "configure"
+#line 7963 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7596,7 +7970,7 @@ int main() {
 PQcmdTuples()
 ; return 0; }
 EOF
-if { (eval echo configure:7600: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:7974: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7639,7 +8013,7 @@ fi # $USE_POSTGRES
 
 
 echo $ac_n "checking whether to use MySQL""... $ac_c" 1>&6
-echo "configure:7643: checking whether to use MySQL" >&5
+echo "configure:8017: checking whether to use MySQL" >&5
 echo "$ac_t"""$with_mysql"" 1>&6
 case "$with_mysql" in
 	"no")	USE_MYSQL=	;;
@@ -7659,7 +8033,7 @@ if test -n "$USE_MYSQL"; then
 
 
 echo $ac_n "checking for location of MySQL includes""... $ac_c" 1>&6
-echo "configure:7663: checking for location of MySQL includes" >&5
+echo "configure:8037: checking for location of MySQL includes" >&5
 case "$with_mysql_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-mysql-includes." 1>&2; exit 1; }
@@ -7685,15 +8059,15 @@ for ac_hdr in mysql.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:7689: checking for $ac_hdr" >&5
+echo "configure:8063: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 7692 "configure"
+#line 8066 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:7697: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8071: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -7730,7 +8104,7 @@ if test -n "$USE_MYSQL"; then
 
   
 echo $ac_n "checking for location of MySQL library""... $ac_c" 1>&6
-echo "configure:7734: checking for location of MySQL library" >&5
+echo "configure:8108: checking for location of MySQL library" >&5
 case "$with_mysql_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-mysql-libs." 1>&2; exit 1; }
@@ -7761,13 +8135,13 @@ LDFLAGS="$MYSQLLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7765: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8139: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7771 "configure"
+#line 8145 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7778,7 +8152,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7782: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8156: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7797,13 +8171,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7801: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8175: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7807 "configure"
+#line 8181 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7814,7 +8188,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7818: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8192: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7833,13 +8207,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7837: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8211: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $SOCKLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7843 "configure"
+#line 8217 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7850,7 +8224,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7854: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8228: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7869,13 +8243,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7873: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8247: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $SOCKLIB $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7879 "configure"
+#line 8253 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7886,7 +8260,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8264: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7905,13 +8279,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7909: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8283: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $ZLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7915 "configure"
+#line 8289 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7922,7 +8296,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7941,13 +8315,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7945: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8319: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $ZLIB $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7951 "configure"
+#line 8325 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7958,7 +8332,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7962: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8336: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -7977,13 +8351,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:7981: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8355: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $ZLIB $SOCKLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 7987 "configure"
+#line 8361 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -7994,7 +8368,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:7998: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8372: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8013,13 +8387,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for mysql_query in -lmysqlclient""... $ac_c" 1>&6
-echo "configure:8017: checking for mysql_query in -lmysqlclient" >&5
+echo "configure:8391: checking for mysql_query in -lmysqlclient" >&5
 ac_lib_var=`echo mysqlclient'_'mysql_query | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lmysqlclient $ZLIB $SOCKLIB $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8023 "configure"
+#line 8397 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8030,7 +8404,7 @@ int main() {
 mysql_query()
 ; return 0; }
 EOF
-if { (eval echo configure:8034: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8408: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8120,7 +8494,7 @@ LDFLAGS=${ac_save_ldflags}
   # Extract the first word of "mysql_config", so it can be a program name with args.
 set dummy mysql_config; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:8124: checking for $ac_word" >&5
+echo "configure:8498: checking for $ac_word" >&5
 
 case "$MYSQLD_CONFIG" in
   /*)
@@ -8169,10 +8543,10 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
     LIBS="$MYSQLDLIB $LIBS"
     echo $ac_n "checking for mysql_server_init""... $ac_c" 1>&6
-echo "configure:8173: checking for mysql_server_init" >&5
+echo "configure:8547: checking for mysql_server_init" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8176 "configure"
+#line 8550 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char mysql_server_init(); below.  */
@@ -8198,7 +8572,7 @@ mysql_server_init();
 
 ; return 0; }
 EOF
-if { (eval echo configure:8202: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_mysql_server_init=yes"
 else
@@ -8250,7 +8624,7 @@ fi # $USE_MYSQL
 
 
 echo $ac_n "checking whether to use SQLite""... $ac_c" 1>&6
-echo "configure:8254: checking whether to use SQLite" >&5
+echo "configure:8628: checking whether to use SQLite" >&5
 echo "$ac_t"""$with_sqlite"" 1>&6
 case "$with_sqlite" in
 	"no")	USE_SQLITE=	;;
@@ -8270,7 +8644,7 @@ if test -n "$USE_SQLITE"; then
 
 
 echo $ac_n "checking for location of SQLite includes""... $ac_c" 1>&6
-echo "configure:8274: checking for location of SQLite includes" >&5
+echo "configure:8648: checking for location of SQLite includes" >&5
 case "$with_sqlite_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-sqlite-includes." 1>&2; exit 1; }
@@ -8296,15 +8670,15 @@ for ac_hdr in sqlite3.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8300: checking for $ac_hdr" >&5
+echo "configure:8674: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8303 "configure"
+#line 8677 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8308: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:8682: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8347,7 +8721,7 @@ if test -n "$USE_SQLITE"; then
 
 
 echo $ac_n "checking for location of SQLite library""... $ac_c" 1>&6
-echo "configure:8351: checking for location of SQLite library" >&5
+echo "configure:8725: checking for location of SQLite library" >&5
 case "$with_sqlite_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-sqlite-libs." 1>&2; exit 1; }
@@ -8376,13 +8750,13 @@ LDFLAGS="$SQLITELIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for sqlite3_open in -lsqlite3""... $ac_c" 1>&6
-echo "configure:8380: checking for sqlite3_open in -lsqlite3" >&5
+echo "configure:8754: checking for sqlite3_open in -lsqlite3" >&5
 ac_lib_var=`echo sqlite3'_'sqlite3_open | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsqlite3  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8386 "configure"
+#line 8760 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8393,7 +8767,7 @@ int main() {
 sqlite3_open()
 ; return 0; }
 EOF
-if { (eval echo configure:8397: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8771: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8412,13 +8786,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sqlite3_open in -lsqlite3""... $ac_c" 1>&6
-echo "configure:8416: checking for sqlite3_open in -lsqlite3" >&5
+echo "configure:8790: checking for sqlite3_open in -lsqlite3" >&5
 ac_lib_var=`echo sqlite3'_'sqlite3_open | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsqlite3 $DLLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8422 "configure"
+#line 8796 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8429,7 +8803,7 @@ int main() {
 sqlite3_open()
 ; return 0; }
 EOF
-if { (eval echo configure:8433: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8807: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8448,13 +8822,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sqlite3_open in -lsqlite3""... $ac_c" 1>&6
-echo "configure:8452: checking for sqlite3_open in -lsqlite3" >&5
+echo "configure:8826: checking for sqlite3_open in -lsqlite3" >&5
 ac_lib_var=`echo sqlite3'_'sqlite3_open | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsqlite3 $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8458 "configure"
+#line 8832 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8465,7 +8839,7 @@ int main() {
 sqlite3_open()
 ; return 0; }
 EOF
-if { (eval echo configure:8469: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8843: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8484,13 +8858,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for sqlite3_open in -lsqlite3""... $ac_c" 1>&6
-echo "configure:8488: checking for sqlite3_open in -lsqlite3" >&5
+echo "configure:8862: checking for sqlite3_open in -lsqlite3" >&5
 ac_lib_var=`echo sqlite3'_'sqlite3_open | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsqlite3 $MATHLIB $DLLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8494 "configure"
+#line 8868 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8501,7 +8875,7 @@ int main() {
 sqlite3_open()
 ; return 0; }
 EOF
-if { (eval echo configure:8505: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:8879: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8576,7 +8950,7 @@ OPENGL_AQUA=
 OPENGL_WINDOWS=
 
 echo $ac_n "checking whether to use OpenGL""... $ac_c" 1>&6
-echo "configure:8580: checking whether to use OpenGL" >&5
+echo "configure:8954: checking whether to use OpenGL" >&5
 echo "$ac_t"""$with_opengl"" 1>&6
 case "$with_opengl" in
 	n|no)
@@ -8610,7 +8984,7 @@ if test "$OPENGL_X11" = 1 ; then
 
 
 echo $ac_n "checking for location of OpenGL includes""... $ac_c" 1>&6
-echo "configure:8614: checking for location of OpenGL includes" >&5
+echo "configure:8988: checking for location of OpenGL includes" >&5
 case "$with_opengl_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opengl-includes." 1>&2; exit 1; }
@@ -8636,15 +9010,15 @@ for ac_hdr in GL/gl.h GL/glu.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:8640: checking for $ac_hdr" >&5
+echo "configure:9014: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 8643 "configure"
+#line 9017 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:8648: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9022: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -8678,7 +9052,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of OpenGL library""... $ac_c" 1>&6
-echo "configure:8682: checking for location of OpenGL library" >&5
+echo "configure:9056: checking for location of OpenGL library" >&5
 case "$with_opengl_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opengl-libs." 1>&2; exit 1; }
@@ -8707,13 +9081,13 @@ LDFLAGS="$OPENGL_LIB_PATH $LDFLAGS"
 
 
 echo $ac_n "checking for glBegin in -lGL""... $ac_c" 1>&6
-echo "configure:8711: checking for glBegin in -lGL" >&5
+echo "configure:9085: checking for glBegin in -lGL" >&5
 ac_lib_var=`echo GL'_'glBegin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lGL $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $MATHLIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8717 "configure"
+#line 9091 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8724,7 +9098,7 @@ int main() {
 glBegin()
 ; return 0; }
 EOF
-if { (eval echo configure:8728: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9102: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8743,13 +9117,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for glBegin in -lGL""... $ac_c" 1>&6
-echo "configure:8747: checking for glBegin in -lGL" >&5
+echo "configure:9121: checking for glBegin in -lGL" >&5
 ac_lib_var=`echo GL'_'glBegin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lGL $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $MATHLIB -lXext $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8753 "configure"
+#line 9127 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8760,7 +9134,7 @@ int main() {
 glBegin()
 ; return 0; }
 EOF
-if { (eval echo configure:8764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9138: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8779,13 +9153,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for glBegin in -lGL""... $ac_c" 1>&6
-echo "configure:8783: checking for glBegin in -lGL" >&5
+echo "configure:9157: checking for glBegin in -lGL" >&5
 ac_lib_var=`echo GL'_'glBegin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lGL $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $MATHLIB -lpthread $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8789 "configure"
+#line 9163 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8796,7 +9170,7 @@ int main() {
 glBegin()
 ; return 0; }
 EOF
-if { (eval echo configure:8800: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8815,13 +9189,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for glBegin in -lGL""... $ac_c" 1>&6
-echo "configure:8819: checking for glBegin in -lGL" >&5
+echo "configure:9193: checking for glBegin in -lGL" >&5
 ac_lib_var=`echo GL'_'glBegin | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lGL $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $MATHLIB -lpthread -lXext $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8825 "configure"
+#line 9199 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8832,7 +9206,7 @@ int main() {
 glBegin()
 ; return 0; }
 EOF
-if { (eval echo configure:8836: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9210: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8894,13 +9268,13 @@ LDFLAGS="$OPENGL_LIB_PATH $LDFLAGS"
 
 
 echo $ac_n "checking for gluBeginCurve in -lGLU""... $ac_c" 1>&6
-echo "configure:8898: checking for gluBeginCurve in -lGLU" >&5
+echo "configure:9272: checking for gluBeginCurve in -lGLU" >&5
 ac_lib_var=`echo GLU'_'gluBeginCurve | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lGLU $OPENGLLIB $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $MATHLIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8904 "configure"
+#line 9278 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8911,7 +9285,7 @@ int main() {
 gluBeginCurve()
 ; return 0; }
 EOF
-if { (eval echo configure:8915: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9289: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8930,13 +9304,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for gluBeginCurve in -lGLU""... $ac_c" 1>&6
-echo "configure:8934: checking for gluBeginCurve in -lGLU" >&5
+echo "configure:9308: checking for gluBeginCurve in -lGLU" >&5
 ac_lib_var=`echo GLU'_'gluBeginCurve | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lGLU $OPENGLLIB $X_LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS $MATHLIB -lstdc++ $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 8940 "configure"
+#line 9314 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -8947,7 +9321,7 @@ int main() {
 gluBeginCurve()
 ; return 0; }
 EOF
-if { (eval echo configure:8951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9325: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -8994,10 +9368,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS=" $OPENGLLIB $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for glXCreatePbuffer""... $ac_c" 1>&6
-echo "configure:8998: checking for glXCreatePbuffer" >&5
+echo "configure:9372: checking for glXCreatePbuffer" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9001 "configure"
+#line 9375 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char glXCreatePbuffer(); below.  */
@@ -9020,7 +9394,7 @@ glXCreatePbuffer();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9024: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9398: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_glXCreatePbuffer=yes"
 else
@@ -9057,10 +9431,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS=" $OPENGLLIB $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for glXCreateGLXPixmap""... $ac_c" 1>&6
-echo "configure:9061: checking for glXCreateGLXPixmap" >&5
+echo "configure:9435: checking for glXCreateGLXPixmap" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9064 "configure"
+#line 9438 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char glXCreateGLXPixmap(); below.  */
@@ -9083,7 +9457,7 @@ glXCreateGLXPixmap();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9087: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9461: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_glXCreateGLXPixmap=yes"
 else
@@ -9126,7 +9500,7 @@ if test "$OPENGL_AQUA" = 1 ; then
 
 
 echo $ac_n "checking for location of OpenGL framework""... $ac_c" 1>&6
-echo "configure:9130: checking for location of OpenGL framework" >&5
+echo "configure:9504: checking for location of OpenGL framework" >&5
 case "$with_opengl_framework" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opengl-framework." 1>&2; exit 1; }
@@ -9150,15 +9524,15 @@ for ac_hdr in OpenGL/gl.h OpenGL/glu.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9154: checking for $ac_hdr" >&5
+echo "configure:9528: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9157 "configure"
+#line 9531 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9162: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9536: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9194,10 +9568,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS="-framework OpenGL -framework AGL -framework ApplicationServices  $LIBS"
 LDFLAGS="$OPENGLPATH $LDFLAGS"
 echo $ac_n "checking for glBegin""... $ac_c" 1>&6
-echo "configure:9198: checking for glBegin" >&5
+echo "configure:9572: checking for glBegin" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9201 "configure"
+#line 9575 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char glBegin(); below.  */
@@ -9220,7 +9594,7 @@ glBegin();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9224: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9598: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_glBegin=yes"
 else
@@ -9257,10 +9631,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS=" $OPENGLLIB $LIBS"
 LDFLAGS="$OPENGLPATH $LDFLAGS"
 echo $ac_n "checking for gluBeginCurve""... $ac_c" 1>&6
-echo "configure:9261: checking for gluBeginCurve" >&5
+echo "configure:9635: checking for gluBeginCurve" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9264 "configure"
+#line 9638 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gluBeginCurve(); below.  */
@@ -9283,7 +9657,7 @@ gluBeginCurve();
 
 ; return 0; }
 EOF
-if { (eval echo configure:9287: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gluBeginCurve=yes"
 else
@@ -9331,7 +9705,7 @@ if test "$OPENGL_WINDOWS" = 1 ; then
 
 
 echo $ac_n "checking for location of OpenGL includes""... $ac_c" 1>&6
-echo "configure:9335: checking for location of OpenGL includes" >&5
+echo "configure:9709: checking for location of OpenGL includes" >&5
 case "$with_opengl_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opengl-includes." 1>&2; exit 1; }
@@ -9357,15 +9731,15 @@ for ac_hdr in GL/gl.h GL/glu.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9361: checking for $ac_hdr" >&5
+echo "configure:9735: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9364 "configure"
+#line 9738 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9369: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9743: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9399,7 +9773,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of OpenGL library""... $ac_c" 1>&6
-echo "configure:9403: checking for location of OpenGL library" >&5
+echo "configure:9777: checking for location of OpenGL library" >&5
 case "$with_opengl_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opengl-libs." 1>&2; exit 1; }
@@ -9424,18 +9798,18 @@ CFLAGS="$CFLAGS $OPENGLINC"
 ac_save_ldflags="$LDFLAGS"
 ac_save_libs="$LIBS"
 echo $ac_n "checking for OpenGL library""... $ac_c" 1>&6
-echo "configure:9428: checking for OpenGL library" >&5
+echo "configure:9802: checking for OpenGL library" >&5
 LDFLAGS="$OPENGL_LIB_PATH $LDFLAGS"
 LIBS="-lopengl32  "
 cat > conftest.$ac_ext <<EOF
-#line 9432 "configure"
+#line 9806 "configure"
 #include "confdefs.h"
 #include <GL/gl.h>
 int main() {
 glEnd();
 ; return 0; }
 EOF
-if { (eval echo configure:9439: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9813: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
 echo "$ac_t""found" 1>&6
@@ -9459,18 +9833,18 @@ LDFLAGS=${ac_save_ldflags}
 ac_save_ldflags="$LDFLAGS"
 ac_save_libs="$LIBS"
 echo $ac_n "checking for GLU library""... $ac_c" 1>&6
-echo "configure:9463: checking for GLU library" >&5
+echo "configure:9837: checking for GLU library" >&5
 LDFLAGS="$OPENGL_LIB_PATH $LDFLAGS"
 LIBS="-lglu32 $OPENGLLIB "
 cat > conftest.$ac_ext <<EOF
-#line 9467 "configure"
+#line 9841 "configure"
 #include "confdefs.h"
 #include <GL/glu.h>
 int main() {
 gluNewQuadric();
 ; return 0; }
 EOF
-if { (eval echo configure:9474: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:9848: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
 echo "$ac_t""found" 1>&6
@@ -9519,7 +9893,7 @@ fi # $USE_OPENGL
 
 
 echo $ac_n "checking whether to use ODBC""... $ac_c" 1>&6
-echo "configure:9523: checking whether to use ODBC" >&5
+echo "configure:9897: checking whether to use ODBC" >&5
 echo "$ac_t"""$with_odbc"" 1>&6
 case "$with_odbc" in
 	"no")	USE_ODBC=	;;
@@ -9538,7 +9912,7 @@ if test -n "$USE_ODBC"; then
 
 
 echo $ac_n "checking for location of ODBC includes""... $ac_c" 1>&6
-echo "configure:9542: checking for location of ODBC includes" >&5
+echo "configure:9916: checking for location of ODBC includes" >&5
 case "$with_odbc_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-odbc-includes." 1>&2; exit 1; }
@@ -9564,15 +9938,15 @@ for ac_hdr in sql.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9568: checking for $ac_hdr" >&5
+echo "configure:9942: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9571 "configure"
+#line 9945 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9576: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:9950: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9606,7 +9980,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of ODBC library""... $ac_c" 1>&6
-echo "configure:9610: checking for location of ODBC library" >&5
+echo "configure:9984: checking for location of ODBC library" >&5
 case "$with_odbc_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-odbc-libs." 1>&2; exit 1; }
@@ -9631,13 +10005,13 @@ LDFLAGS="$ODBCLIB $LDFLAGS"
 
 
 echo $ac_n "checking for SQLConnect in -lodbc""... $ac_c" 1>&6
-echo "configure:9635: checking for SQLConnect in -lodbc" >&5
+echo "configure:10009: checking for SQLConnect in -lodbc" >&5
 ac_lib_var=`echo odbc'_'SQLConnect | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lodbc $ICONVLIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 9641 "configure"
+#line 10015 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9648,7 +10022,7 @@ int main() {
 SQLConnect()
 ; return 0; }
 EOF
-if { (eval echo configure:9652: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9673,13 +10047,13 @@ LDFLAGS="$ODBCLIB $LDFLAGS"
 
 
 echo $ac_n "checking for SQLConnect in -liodbc""... $ac_c" 1>&6
-echo "configure:9677: checking for SQLConnect in -liodbc" >&5
+echo "configure:10051: checking for SQLConnect in -liodbc" >&5
 ac_lib_var=`echo iodbc'_'SQLConnect | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-liodbc  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 9683 "configure"
+#line 10057 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9690,7 +10064,7 @@ int main() {
 SQLConnect()
 ; return 0; }
 EOF
-if { (eval echo configure:9694: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10068: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -9715,11 +10089,11 @@ CFLAGS="$CFLAGS $ODBCINC"
 ac_save_ldflags="$LDFLAGS"
 ac_save_libs="$LIBS"
 echo $ac_n "checking for ODBC library""... $ac_c" 1>&6
-echo "configure:9719: checking for ODBC library" >&5
+echo "configure:10093: checking for ODBC library" >&5
 LDFLAGS="$ODBCLIB $LDFLAGS"
 LIBS="-lodbc32  "
 cat > conftest.$ac_ext <<EOF
-#line 9723 "configure"
+#line 10097 "configure"
 #include "confdefs.h"
 #include <windows.h>
 #include <sql.h>
@@ -9727,7 +10101,7 @@ int main() {
 SQLAllocEnv((SQLHENV *)0);
 ; return 0; }
 EOF
-if { (eval echo configure:9731: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10105: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   
 echo "$ac_t""found" 1>&6
@@ -9776,7 +10150,7 @@ fi # $USE_ODBC
 
 
 echo $ac_n "checking whether to use FFTW""... $ac_c" 1>&6
-echo "configure:9780: checking whether to use FFTW" >&5
+echo "configure:10154: checking whether to use FFTW" >&5
 echo "$ac_t"""$with_fftw"" 1>&6
 case "$with_fftw" in
 	"no")	USE_FFTW=	;;
@@ -9795,7 +10169,7 @@ if test -n "$USE_FFTW"; then
 
 
 echo $ac_n "checking for location of FFTW includes""... $ac_c" 1>&6
-echo "configure:9799: checking for location of FFTW includes" >&5
+echo "configure:10173: checking for location of FFTW includes" >&5
 case "$with_fftw_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-fftw-includes." 1>&2; exit 1; }
@@ -9821,15 +10195,15 @@ for ac_hdr in fftw3.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9825: checking for $ac_hdr" >&5
+echo "configure:10199: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9828 "configure"
+#line 10202 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10207: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9857,15 +10231,15 @@ for ac_hdr in fftw.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9861: checking for $ac_hdr" >&5
+echo "configure:10235: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9864 "configure"
+#line 10238 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9869: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10243: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9893,15 +10267,15 @@ for ac_hdr in dfftw.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:9897: checking for $ac_hdr" >&5
+echo "configure:10271: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 9900 "configure"
+#line 10274 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:9905: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10279: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -9947,7 +10321,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of FFTW library""... $ac_c" 1>&6
-echo "configure:9951: checking for location of FFTW library" >&5
+echo "configure:10325: checking for location of FFTW library" >&5
 case "$with_fftw_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-fftw-libs." 1>&2; exit 1; }
@@ -9972,13 +10346,13 @@ LDFLAGS="$FFTWLIB $LDFLAGS"
 
 
 echo $ac_n "checking for fftw_execute in -lfftw3""... $ac_c" 1>&6
-echo "configure:9976: checking for fftw_execute in -lfftw3" >&5
+echo "configure:10350: checking for fftw_execute in -lfftw3" >&5
 ac_lib_var=`echo fftw3'_'fftw_execute | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lfftw3 $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 9982 "configure"
+#line 10356 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -9989,7 +10363,7 @@ int main() {
 fftw_execute()
 ; return 0; }
 EOF
-if { (eval echo configure:9993: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10014,13 +10388,13 @@ LDFLAGS="$FFTWLIB $LDFLAGS"
 
 
 echo $ac_n "checking for fftwnd_one in -lfftw""... $ac_c" 1>&6
-echo "configure:10018: checking for fftwnd_one in -lfftw" >&5
+echo "configure:10392: checking for fftwnd_one in -lfftw" >&5
 ac_lib_var=`echo fftw'_'fftwnd_one | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lfftw $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10024 "configure"
+#line 10398 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10031,7 +10405,7 @@ int main() {
 fftwnd_one()
 ; return 0; }
 EOF
-if { (eval echo configure:10035: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10409: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10056,13 +10430,13 @@ LDFLAGS="$FFTWLIB $LDFLAGS"
 
 
 echo $ac_n "checking for fftwnd_one in -ldfftw""... $ac_c" 1>&6
-echo "configure:10060: checking for fftwnd_one in -ldfftw" >&5
+echo "configure:10434: checking for fftwnd_one in -ldfftw" >&5
 ac_lib_var=`echo dfftw'_'fftwnd_one | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ldfftw $MATHLIB $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10066 "configure"
+#line 10440 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10073,7 +10447,7 @@ int main() {
 fftwnd_one()
 ; return 0; }
 EOF
-if { (eval echo configure:10077: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10451: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10130,7 +10504,7 @@ fi # $USE_FFTW
 
 
 echo $ac_n "checking whether to use BLAS""... $ac_c" 1>&6
-echo "configure:10134: checking whether to use BLAS" >&5
+echo "configure:10508: checking whether to use BLAS" >&5
 echo "$ac_t"""$with_blas"" 1>&6
 case "$with_blas" in
 	"no")	USE_BLAS=	;;
@@ -10151,7 +10525,7 @@ if test -n "$USE_BLAS"; then
 
 
 echo $ac_n "checking for location of BLAS includes""... $ac_c" 1>&6
-echo "configure:10155: checking for location of BLAS includes" >&5
+echo "configure:10529: checking for location of BLAS includes" >&5
 case "$with_blas_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-blas-includes." 1>&2; exit 1; }
@@ -10171,7 +10545,7 @@ fi
 
 
 echo $ac_n "checking for location of BLAS library""... $ac_c" 1>&6
-echo "configure:10175: checking for location of BLAS library" >&5
+echo "configure:10549: checking for location of BLAS library" >&5
 case "$with_blas_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-blas-libs." 1>&2; exit 1; }
@@ -10197,15 +10571,15 @@ for ac_hdr in cblas.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10201: checking for $ac_hdr" >&5
+echo "configure:10575: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10204 "configure"
+#line 10578 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10209: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:10583: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10240,13 +10614,13 @@ LDFLAGS="$BLASLIB $LDFLAGS"
 
 
 echo $ac_n "checking for dnrm2_ in -lblas""... $ac_c" 1>&6
-echo "configure:10244: checking for dnrm2_ in -lblas" >&5
+echo "configure:10618: checking for dnrm2_ in -lblas" >&5
 ac_lib_var=`echo blas'_'dnrm2_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lblas $MATHLIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10250 "configure"
+#line 10624 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10257,7 +10631,7 @@ int main() {
 dnrm2_()
 ; return 0; }
 EOF
-if { (eval echo configure:10261: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10635: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10276,13 +10650,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dnrm2_ in -lblas""... $ac_c" 1>&6
-echo "configure:10280: checking for dnrm2_ in -lblas" >&5
+echo "configure:10654: checking for dnrm2_ in -lblas" >&5
 ac_lib_var=`echo blas'_'dnrm2_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lblas $MATHLIB -lg2c $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10286 "configure"
+#line 10660 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10293,7 +10667,7 @@ int main() {
 dnrm2_()
 ; return 0; }
 EOF
-if { (eval echo configure:10297: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10671: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10337,13 +10711,13 @@ blas_ok=no
 save_LDFLAGS="$LDFLAGS"
 LDFLAGS="$BLASLIB $LDFLAGS"
 echo $ac_n "checking for ATL_xerbla in -latlas""... $ac_c" 1>&6
-echo "configure:10341: checking for ATL_xerbla in -latlas" >&5
+echo "configure:10715: checking for ATL_xerbla in -latlas" >&5
 ac_lib_var=`echo atlas'_'ATL_xerbla | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-latlas  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10347 "configure"
+#line 10721 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10354,7 +10728,7 @@ int main() {
 ATL_xerbla()
 ; return 0; }
 EOF
-if { (eval echo configure:10358: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10732: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10369,13 +10743,13 @@ LIBS="$ac_save_LIBS"
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for sgemm_ in -lf77blas""... $ac_c" 1>&6
-echo "configure:10373: checking for sgemm_ in -lf77blas" >&5
+echo "configure:10747: checking for sgemm_ in -lf77blas" >&5
 ac_lib_var=`echo f77blas'_'sgemm_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lf77blas -latlas $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10379 "configure"
+#line 10753 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10386,7 +10760,7 @@ int main() {
 sgemm_()
 ; return 0; }
 EOF
-if { (eval echo configure:10390: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10764: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10401,13 +10775,13 @@ LIBS="$ac_save_LIBS"
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for cblas_dgemm in -lcblas""... $ac_c" 1>&6
-echo "configure:10405: checking for cblas_dgemm in -lcblas" >&5
+echo "configure:10779: checking for cblas_dgemm in -lcblas" >&5
 ac_lib_var=`echo cblas'_'cblas_dgemm | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lcblas -lf77blas -latlas $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10411 "configure"
+#line 10785 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10418,7 +10792,7 @@ int main() {
 cblas_dgemm()
 ; return 0; }
 EOF
-if { (eval echo configure:10422: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10796: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10464,16 +10838,16 @@ if test $blas_ok = no; then
 	save_LIBS="$LIBS"
 	LIBS="$vlib_flags $LIBS"
 	echo $ac_n "checking for sgemm in $vlib_flags""... $ac_c" 1>&6
-echo "configure:10468: checking for sgemm in $vlib_flags" >&5
+echo "configure:10842: checking for sgemm in $vlib_flags" >&5
 	cat > conftest.$ac_ext <<EOF
-#line 10470 "configure"
+#line 10844 "configure"
 #include "confdefs.h"
 
 int main() {
 sgemm
 ; return 0; }
 EOF
-if { (eval echo configure:10477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10851: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   blas_ok=yes; BLASLIB="$vlib_flags"
 else
@@ -10491,13 +10865,13 @@ fi
 # BLAS in PhiPACK libraries? (requires generic BLAS, too)
 if test $blas_ok = no; then
 	echo $ac_n "checking for sgemm_ in -lblas""... $ac_c" 1>&6
-echo "configure:10495: checking for sgemm_ in -lblas" >&5
+echo "configure:10869: checking for sgemm_ in -lblas" >&5
 ac_lib_var=`echo blas'_'sgemm_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lblas  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10501 "configure"
+#line 10875 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10508,7 +10882,7 @@ int main() {
 sgemm_()
 ; return 0; }
 EOF
-if { (eval echo configure:10512: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10886: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10523,13 +10897,13 @@ LIBS="$ac_save_LIBS"
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for dgemm_ in -ldgemm""... $ac_c" 1>&6
-echo "configure:10527: checking for dgemm_ in -ldgemm" >&5
+echo "configure:10901: checking for dgemm_ in -ldgemm" >&5
 ac_lib_var=`echo dgemm'_'dgemm_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-ldgemm -lblas $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10533 "configure"
+#line 10907 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10540,7 +10914,7 @@ int main() {
 dgemm_()
 ; return 0; }
 EOF
-if { (eval echo configure:10544: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10918: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10555,13 +10929,13 @@ LIBS="$ac_save_LIBS"
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for sgemm_ in -lsgemm""... $ac_c" 1>&6
-echo "configure:10559: checking for sgemm_ in -lsgemm" >&5
+echo "configure:10933: checking for sgemm_ in -lsgemm" >&5
 ac_lib_var=`echo sgemm'_'sgemm_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsgemm -lblas $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10565 "configure"
+#line 10939 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10572,7 +10946,7 @@ int main() {
 sgemm_()
 ; return 0; }
 EOF
-if { (eval echo configure:10576: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:10950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10606,13 +10980,13 @@ fi
 if test $blas_ok = no; then
 	if test "x$GCC" != xyes; then # only works with Sun CC
 		echo $ac_n "checking for acosp in -lsunmath""... $ac_c" 1>&6
-echo "configure:10610: checking for acosp in -lsunmath" >&5
+echo "configure:10984: checking for acosp in -lsunmath" >&5
 ac_lib_var=`echo sunmath'_'acosp | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsunmath  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10616 "configure"
+#line 10990 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10623,7 +10997,7 @@ int main() {
 acosp()
 ; return 0; }
 EOF
-if { (eval echo configure:10627: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11001: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10638,13 +11012,13 @@ LIBS="$ac_save_LIBS"
 if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
   echo "$ac_t""yes" 1>&6
   echo $ac_n "checking for sgemm_ in -lsunperf""... $ac_c" 1>&6
-echo "configure:10642: checking for sgemm_ in -lsunperf" >&5
+echo "configure:11016: checking for sgemm_ in -lsunperf" >&5
 ac_lib_var=`echo sunperf'_'sgemm_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lsunperf -lsunmath $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10648 "configure"
+#line 11022 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10655,7 +11029,7 @@ int main() {
 sgemm_()
 ; return 0; }
 EOF
-if { (eval echo configure:10659: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11033: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10685,13 +11059,13 @@ fi
 # Generic BLAS library
 if test $blas_ok = no; then
 	echo $ac_n "checking for sgemm_ in -lblas""... $ac_c" 1>&6
-echo "configure:10689: checking for sgemm_ in -lblas" >&5
+echo "configure:11063: checking for sgemm_ in -lblas" >&5
 ac_lib_var=`echo blas'_'sgemm_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lblas  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10695 "configure"
+#line 11069 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10702,7 +11076,7 @@ int main() {
 sgemm_()
 ; return 0; }
 EOF
-if { (eval echo configure:10706: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11080: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10741,7 +11115,7 @@ fi # $USE_BLAS
 
 
 echo $ac_n "checking whether to use LAPACK""... $ac_c" 1>&6
-echo "configure:10745: checking whether to use LAPACK" >&5
+echo "configure:11119: checking whether to use LAPACK" >&5
 echo "$ac_t"""$with_lapack"" 1>&6
 case "$with_lapack" in
 	"no")	USE_LAPACK=	;;
@@ -10766,7 +11140,7 @@ lapack_ok=no
 
 
 echo $ac_n "checking for location of LAPACK includes""... $ac_c" 1>&6
-echo "configure:10770: checking for location of LAPACK includes" >&5
+echo "configure:11144: checking for location of LAPACK includes" >&5
 case "$with_lapack_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-lapack-includes." 1>&2; exit 1; }
@@ -10786,7 +11160,7 @@ fi
 
 
 echo $ac_n "checking for location of LAPACK library""... $ac_c" 1>&6
-echo "configure:10790: checking for location of LAPACK library" >&5
+echo "configure:11164: checking for location of LAPACK library" >&5
 case "$with_lapack_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-lapack-libs." 1>&2; exit 1; }
@@ -10812,15 +11186,15 @@ for ac_hdr in clapack.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:10816: checking for $ac_hdr" >&5
+echo "configure:11190: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10819 "configure"
+#line 11193 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:10824: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11198: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -10852,10 +11226,10 @@ if test lapack_ok=no; then
 	save_LIBS="$LIBS"; LIBS="$LIBS $BLASLIB $MATHLIB $FLIBS"
 	save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LAPACKLIB $LDFLAGS"
 	echo $ac_n "checking for dsegv_""... $ac_c" 1>&6
-echo "configure:10856: checking for dsegv_" >&5
+echo "configure:11230: checking for dsegv_" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 10859 "configure"
+#line 11233 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char dsegv_(); below.  */
@@ -10878,7 +11252,7 @@ dsegv_();
 
 ; return 0; }
 EOF
-if { (eval echo configure:10882: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11256: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_dsegv_=yes"
 else
@@ -10905,13 +11279,13 @@ if test $lapack_ok = no; then
 	save_libs="$LIBS"; LIBS="$BLASLIB $MATHLIB $LIBS"
 	save_LDFLAGS="$LDFLAGS"; LDFLAGS="$LAPACKLIB $LDFLAGS"
 	echo $ac_n "checking for desgv_ in -llapack""... $ac_c" 1>&6
-echo "configure:10909: checking for desgv_ in -llapack" >&5
+echo "configure:11283: checking for desgv_ in -llapack" >&5
 ac_lib_var=`echo lapack'_'desgv_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-llapack $FLIBS $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10915 "configure"
+#line 11289 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10922,7 +11296,7 @@ int main() {
 desgv_()
 ; return 0; }
 EOF
-if { (eval echo configure:10926: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11300: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10954,13 +11328,13 @@ LDFLAGS="$LAPACKLIB $LDFLAGS"
 
 
 echo $ac_n "checking for dgesv_ in -llapack""... $ac_c" 1>&6
-echo "configure:10958: checking for dgesv_ in -llapack" >&5
+echo "configure:11332: checking for dgesv_ in -llapack" >&5
 ac_lib_var=`echo lapack'_'dgesv_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-llapack $BLASLIB $MATHLIB  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 10964 "configure"
+#line 11338 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -10971,7 +11345,7 @@ int main() {
 dgesv_()
 ; return 0; }
 EOF
-if { (eval echo configure:10975: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11349: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -10990,13 +11364,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for dgesv_ in -llapack""... $ac_c" 1>&6
-echo "configure:10994: checking for dgesv_ in -llapack" >&5
+echo "configure:11368: checking for dgesv_ in -llapack" >&5
 ac_lib_var=`echo lapack'_'dgesv_ | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-llapack $BLASLIB $MATHLIB -lg2c $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11000 "configure"
+#line 11374 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11007,7 +11381,7 @@ int main() {
 dgesv_()
 ; return 0; }
 EOF
-if { (eval echo configure:11011: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11385: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11063,7 +11437,7 @@ fi # $USE_BLAS
 
 
 echo $ac_n "checking whether to use Cairo""... $ac_c" 1>&6
-echo "configure:11067: checking whether to use Cairo" >&5
+echo "configure:11441: checking whether to use Cairo" >&5
 echo "$ac_t"""$with_cairo"" 1>&6
 case "$with_cairo" in
 	"no")	USE_CAIRO=	;;
@@ -11095,7 +11469,7 @@ CAIROINC=`pkg-config --cflags $cairo`
 
 
 echo $ac_n "checking for location of cairo includes""... $ac_c" 1>&6
-echo "configure:11099: checking for location of cairo includes" >&5
+echo "configure:11473: checking for location of cairo includes" >&5
 case "$with_cairo_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-cairo-includes." 1>&2; exit 1; }
@@ -11121,15 +11495,15 @@ for ac_hdr in cairo.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11125: checking for $ac_hdr" >&5
+echo "configure:11499: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11128 "configure"
+#line 11502 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11133: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11507: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11165,7 +11539,7 @@ CAIROLIB=`pkg-config --libs $cairo`
 
 
 echo $ac_n "checking for location of cairo library""... $ac_c" 1>&6
-echo "configure:11169: checking for location of cairo library" >&5
+echo "configure:11543: checking for location of cairo library" >&5
 case "$with_cairo_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-cairo-libs." 1>&2; exit 1; }
@@ -11185,7 +11559,7 @@ fi
 
 
 echo $ac_n "checking for cairo linking flags""... $ac_c" 1>&6
-echo "configure:11189: checking for cairo linking flags" >&5
+echo "configure:11563: checking for cairo linking flags" >&5
 case "$with_cairo_ldflags" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-cairo-ldflags." 1>&2; exit 1; }
@@ -11201,10 +11575,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS=" $CAIROLIB $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for cairo_create""... $ac_c" 1>&6
-echo "configure:11205: checking for cairo_create" >&5
+echo "configure:11579: checking for cairo_create" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11208 "configure"
+#line 11582 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char cairo_create(); below.  */
@@ -11227,7 +11601,7 @@ cairo_create();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11231: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_cairo_create=yes"
 else
@@ -11261,10 +11635,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS=" $CAIROLIB $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for cairo_xlib_surface_create_with_xrender_format""... $ac_c" 1>&6
-echo "configure:11265: checking for cairo_xlib_surface_create_with_xrender_format" >&5
+echo "configure:11639: checking for cairo_xlib_surface_create_with_xrender_format" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11268 "configure"
+#line 11642 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char cairo_xlib_surface_create_with_xrender_format(); below.  */
@@ -11287,7 +11661,7 @@ cairo_xlib_surface_create_with_xrender_format();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11665: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_cairo_xlib_surface_create_with_xrender_format=yes"
 else
@@ -11320,10 +11694,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS=" $CAIROLIB $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for cairo_xlib_surface_get_xrender_format""... $ac_c" 1>&6
-echo "configure:11324: checking for cairo_xlib_surface_get_xrender_format" >&5
+echo "configure:11698: checking for cairo_xlib_surface_get_xrender_format" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11327 "configure"
+#line 11701 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char cairo_xlib_surface_get_xrender_format(); below.  */
@@ -11346,7 +11720,7 @@ cairo_xlib_surface_get_xrender_format();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11350: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11724: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_cairo_xlib_surface_get_xrender_format=yes"
 else
@@ -11388,7 +11762,7 @@ fi # $USE_CAIRO
 
 
 echo $ac_n "checking whether to use FreeType""... $ac_c" 1>&6
-echo "configure:11392: checking whether to use FreeType" >&5
+echo "configure:11766: checking whether to use FreeType" >&5
 echo "$ac_t"""$with_freetype"" 1>&6
 case "$with_freetype" in
 	"no")	USE_FREETYPE=	;;
@@ -11407,7 +11781,7 @@ if test -n "$USE_FREETYPE"; then
 
 
 echo $ac_n "checking for location of FreeType includes""... $ac_c" 1>&6
-echo "configure:11411: checking for location of FreeType includes" >&5
+echo "configure:11785: checking for location of FreeType includes" >&5
 case "$with_freetype_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-freetype-includes." 1>&2; exit 1; }
@@ -11433,15 +11807,15 @@ for ac_hdr in ft2build.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11437: checking for $ac_hdr" >&5
+echo "configure:11811: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11440 "configure"
+#line 11814 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11445: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:11819: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11475,7 +11849,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of FreeType library""... $ac_c" 1>&6
-echo "configure:11479: checking for location of FreeType library" >&5
+echo "configure:11853: checking for location of FreeType library" >&5
 case "$with_freetype_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-freetype-libs." 1>&2; exit 1; }
@@ -11500,13 +11874,13 @@ LDFLAGS="$FTLIB $LDFLAGS"
 
 
 echo $ac_n "checking for FT_Init_FreeType in -lfreetype""... $ac_c" 1>&6
-echo "configure:11504: checking for FT_Init_FreeType in -lfreetype" >&5
+echo "configure:11878: checking for FT_Init_FreeType in -lfreetype" >&5
 ac_lib_var=`echo freetype'_'FT_Init_FreeType | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lfreetype  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11510 "configure"
+#line 11884 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11517,7 +11891,7 @@ int main() {
 FT_Init_FreeType()
 ; return 0; }
 EOF
-if { (eval echo configure:11521: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11895: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11558,7 +11932,7 @@ fi # $USE_FREETYPE
 
 
 echo $ac_n "checking whether to use NLS""... $ac_c" 1>&6
-echo "configure:11562: checking whether to use NLS" >&5
+echo "configure:11936: checking whether to use NLS" >&5
 echo "$ac_t"""$with_nls"" 1>&6
 case "$with_nls" in
 	"no")	USE_NLS=	;;
@@ -11578,10 +11952,10 @@ EOF
 
 
 echo $ac_n "checking for gettext""... $ac_c" 1>&6
-echo "configure:11582: checking for gettext" >&5
+echo "configure:11956: checking for gettext" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11585 "configure"
+#line 11959 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char gettext(); below.  */
@@ -11604,7 +11978,7 @@ gettext();
 
 ; return 0; }
 EOF
-if { (eval echo configure:11608: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:11982: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_gettext=yes"
 else
@@ -11622,13 +11996,13 @@ else
   echo "$ac_t""no" 1>&6
 
 echo $ac_n "checking for gettext in -lintl""... $ac_c" 1>&6
-echo "configure:11626: checking for gettext in -lintl" >&5
+echo "configure:12000: checking for gettext in -lintl" >&5
 ac_lib_var=`echo intl'_'gettext | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lintl  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 11632 "configure"
+#line 12006 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -11639,7 +12013,7 @@ int main() {
 gettext()
 ; return 0; }
 EOF
-if { (eval echo configure:11643: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12017: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -11674,7 +12048,7 @@ fi
  
 
 echo $ac_n "checking whether to use C++""... $ac_c" 1>&6
-echo "configure:11678: checking whether to use C++" >&5
+echo "configure:12052: checking whether to use C++" >&5
 echo "$ac_t"""$with_cxx"" 1>&6
 case "$with_cxx" in
 	"no")	USE_CXX=	;;
@@ -11690,7 +12064,7 @@ do
 # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:11694: checking for $ac_word" >&5
+echo "configure:12068: checking for $ac_word" >&5
 
 if test -n "$CXX"; then
   ac_cv_prog_CXX="$CXX" # Let the user override the test.
@@ -11719,7 +12093,7 @@ test -n "$CXX" || CXX="gcc"
 
 
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:11723: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:12097: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
 
 ac_ext=C
 # CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
@@ -11730,12 +12104,12 @@ cross_compiling=$ac_cv_prog_cxx_cross
 
 cat > conftest.$ac_ext << EOF
 
-#line 11734 "configure"
+#line 12108 "configure"
 #include "confdefs.h"
 
 int main(){return(0);}
 EOF
-if { (eval echo configure:11739: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12113: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   ac_cv_prog_cxx_works=yes
   # If we can't run a trivial program, we are probably using a cross compiler.
   if (./conftest; exit) 2>/dev/null; then
@@ -11761,19 +12135,19 @@ if test $ac_cv_prog_cxx_works = no; then
   { echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
 fi
 echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:11765: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:12139: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
 echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
 cross_compiling=$ac_cv_prog_cxx_cross
 
 echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:11770: checking whether we are using GNU C++" >&5
+echo "configure:12144: checking whether we are using GNU C++" >&5
 
 cat > conftest.C <<EOF
 #ifdef __GNUC__
   yes;
 #endif
 EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:11777: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:12151: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
   ac_cv_prog_gxx=yes
 else
   ac_cv_prog_gxx=no
@@ -11791,7 +12165,7 @@ ac_test_CXXFLAGS="${CXXFLAGS+set}"
 ac_save_CXXFLAGS="$CXXFLAGS"
 CXXFLAGS=
 echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:11795: checking whether ${CXX-g++} accepts -g" >&5
+echo "configure:12169: checking whether ${CXX-g++} accepts -g" >&5
 
 echo 'void f(){}' > conftest.cc
 if test -z "`${CXX-g++} -g -c conftest.cc 2>&1`"; then
@@ -11819,57 +12193,6 @@ else
   fi
 fi
 
-for ac_declaration in \
-   ''\
-   '#include <stdlib.h>' \
-   'extern "C" void std::exit (int) throw (); using std::exit;' \
-   'extern "C" void std::exit (int); using std::exit;' \
-   'extern "C" void exit (int) throw ();' \
-   'extern "C" void exit (int);' \
-   'void exit (int);'
-do
-  cat > conftest.$ac_ext <<EOF
-#line 11833 "configure"
-#include "confdefs.h"
-#include <stdlib.h>
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:11841: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  :
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  continue
-fi
-rm -f conftest*
-  cat > conftest.$ac_ext <<EOF
-#line 11851 "configure"
-#include "confdefs.h"
-$ac_declaration
-int main() {
-exit (42);
-; return 0; }
-EOF
-if { (eval echo configure:11858: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
-  rm -rf conftest*
-  break
-else
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-fi
-rm -f conftest*
-done
-if test -n "$ac_declaration"; then
-  echo '#ifdef __cplusplus' >>confdefs.h
-  echo $ac_declaration      >>confdefs.h
-  echo '#endif'             >>confdefs.h
-fi
-
-
 else
 	CXX=
 	CXXFLAGS=
@@ -11883,7 +12206,7 @@ fi
 
 
 echo $ac_n "checking whether to use openDWG""... $ac_c" 1>&6
-echo "configure:11887: checking whether to use openDWG" >&5
+echo "configure:12210: checking whether to use openDWG" >&5
 echo "$ac_t"""$with_opendwg"" 1>&6
 case "$with_opendwg" in
 	"no")	USE_OPENDWG=	;;
@@ -11903,7 +12226,7 @@ if test -n "${USE_OPENDWG}"; then
 
 
 echo $ac_n "checking for location of openDGW includes""... $ac_c" 1>&6
-echo "configure:11907: checking for location of openDGW includes" >&5
+echo "configure:12230: checking for location of openDGW includes" >&5
 case "$with_opendwg_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opendwg-includes." 1>&2; exit 1; }
@@ -11929,15 +12252,15 @@ for ac_hdr in ad2.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:11933: checking for $ac_hdr" >&5
+echo "configure:12256: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 11936 "configure"
+#line 12259 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:11941: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12264: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -11971,7 +12294,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of openDWG library""... $ac_c" 1>&6
-echo "configure:11975: checking for location of openDWG library" >&5
+echo "configure:12298: checking for location of openDWG library" >&5
 case "$with_opendwg_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opendwg-libs." 1>&2; exit 1; }
@@ -12012,7 +12335,7 @@ fi # $USE_OPENDWG
 
 
 echo $ac_n "checking whether to use POSIX threads""... $ac_c" 1>&6
-echo "configure:12016: checking whether to use POSIX threads" >&5
+echo "configure:12339: checking whether to use POSIX threads" >&5
 echo "$ac_t"""$with_pthread"" 1>&6
 case "$with_pthread" in
 	"no")	USE_PTHREAD=	;;
@@ -12032,7 +12355,7 @@ if test -n "$USE_PTHREAD"; then
 
 
 echo $ac_n "checking for location of POSIX threads includes""... $ac_c" 1>&6
-echo "configure:12036: checking for location of POSIX threads includes" >&5
+echo "configure:12359: checking for location of POSIX threads includes" >&5
 case "$with_pthread_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-pthread-includes." 1>&2; exit 1; }
@@ -12058,15 +12381,15 @@ for ac_hdr in pthread.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12062: checking for $ac_hdr" >&5
+echo "configure:12385: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12065 "configure"
+#line 12388 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12070: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12393: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12100,7 +12423,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of POSIX threads library""... $ac_c" 1>&6
-echo "configure:12104: checking for location of POSIX threads library" >&5
+echo "configure:12427: checking for location of POSIX threads library" >&5
 case "$with_pthread_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-pthread-libs." 1>&2; exit 1; }
@@ -12125,10 +12448,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS="  $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for pthread_create""... $ac_c" 1>&6
-echo "configure:12129: checking for pthread_create" >&5
+echo "configure:12452: checking for pthread_create" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12132 "configure"
+#line 12455 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char pthread_create(); below.  */
@@ -12151,7 +12474,7 @@ pthread_create();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12155: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12478: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_pthread_create=yes"
 else
@@ -12178,13 +12501,13 @@ LDFLAGS="$PTHREADLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for pthread_create in -lpthread""... $ac_c" 1>&6
-echo "configure:12182: checking for pthread_create in -lpthread" >&5
+echo "configure:12505: checking for pthread_create in -lpthread" >&5
 ac_lib_var=`echo pthread'_'pthread_create | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lpthread  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 12188 "configure"
+#line 12511 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12195,7 +12518,7 @@ int main() {
 pthread_create()
 ; return 0; }
 EOF
-if { (eval echo configure:12199: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12245,7 +12568,7 @@ fi # $USE_PTHREAD
 
 
 echo $ac_n "checking whether to use OpenMP""... $ac_c" 1>&6
-echo "configure:12249: checking whether to use OpenMP" >&5
+echo "configure:12572: checking whether to use OpenMP" >&5
 echo "$ac_t"""$with_openmp"" 1>&6
 case "$with_openmp" in
 	"no")	USE_OPENMP=	;;
@@ -12266,7 +12589,7 @@ if test -n "$USE_OPENMP"; then
 
 
 echo $ac_n "checking for location of OpenMP includes""... $ac_c" 1>&6
-echo "configure:12270: checking for location of OpenMP includes" >&5
+echo "configure:12593: checking for location of OpenMP includes" >&5
 case "$with_openmp_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-openmp-includes." 1>&2; exit 1; }
@@ -12292,15 +12615,15 @@ for ac_hdr in omp.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12296: checking for $ac_hdr" >&5
+echo "configure:12619: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12299 "configure"
+#line 12622 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12304: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12627: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12338,7 +12661,7 @@ CPPFLAGS=$ac_save_cppflags
 
 
 echo $ac_n "checking for location of OpenMP library""... $ac_c" 1>&6
-echo "configure:12342: checking for location of OpenMP library" >&5
+echo "configure:12665: checking for location of OpenMP library" >&5
 case "$with_openmp_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-openmp-libs." 1>&2; exit 1; }
@@ -12363,10 +12686,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS="  $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for GOMP_parallel_start""... $ac_c" 1>&6
-echo "configure:12367: checking for GOMP_parallel_start" >&5
+echo "configure:12690: checking for GOMP_parallel_start" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12370 "configure"
+#line 12693 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char GOMP_parallel_start(); below.  */
@@ -12389,7 +12712,7 @@ GOMP_parallel_start();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12393: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12716: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_GOMP_parallel_start=yes"
 else
@@ -12416,13 +12739,13 @@ LDFLAGS="$OMPLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for GOMP_parallel_start in -lgomp""... $ac_c" 1>&6
-echo "configure:12420: checking for GOMP_parallel_start in -lgomp" >&5
+echo "configure:12743: checking for GOMP_parallel_start in -lgomp" >&5
 ac_lib_var=`echo gomp'_'GOMP_parallel_start | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lgomp  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 12426 "configure"
+#line 12749 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12433,7 +12756,7 @@ int main() {
 GOMP_parallel_start()
 ; return 0; }
 EOF
-if { (eval echo configure:12437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12760: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12506,7 +12829,7 @@ fi # $USE_OPENMP
 
 
 echo $ac_n "checking whether to use OpenCL""... $ac_c" 1>&6
-echo "configure:12510: checking whether to use OpenCL" >&5
+echo "configure:12833: checking whether to use OpenCL" >&5
 echo "$ac_t"""$with_opencl"" 1>&6
 case "$with_opencl" in
 	"no")	USE_OPENCL=	;;
@@ -12526,7 +12849,7 @@ if test -n "$USE_OPENCL"; then
 
 
 echo $ac_n "checking for location of OpenCL includes""... $ac_c" 1>&6
-echo "configure:12530: checking for location of OpenCL includes" >&5
+echo "configure:12853: checking for location of OpenCL includes" >&5
 case "$with_opencl_includes" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opencl-includes." 1>&2; exit 1; }
@@ -12553,15 +12876,15 @@ for ac_hdr in OpenCL/opencl.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12557: checking for $ac_hdr" >&5
+echo "configure:12880: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12560 "configure"
+#line 12883 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12565: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:12888: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12601,10 +12924,10 @@ ac_save_ldflags="$LDFLAGS"
 LIBS="-framework OpenCL  $LIBS"
 LDFLAGS=" $LDFLAGS"
 echo $ac_n "checking for clGetPlatformInfo""... $ac_c" 1>&6
-echo "configure:12605: checking for clGetPlatformInfo" >&5
+echo "configure:12928: checking for clGetPlatformInfo" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12608 "configure"
+#line 12931 "configure"
 #include "confdefs.h"
 /* System header to define __stub macros and hopefully few prototypes,
     which can conflict with char clGetPlatformInfo(); below.  */
@@ -12627,7 +12950,7 @@ clGetPlatformInfo();
 
 ; return 0; }
 EOF
-if { (eval echo configure:12631: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:12954: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_func_clGetPlatformInfo=yes"
 else
@@ -12666,15 +12989,15 @@ for ac_hdr in CL/cl.h
 do
 ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
 echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:12670: checking for $ac_hdr" >&5
+echo "configure:12993: checking for $ac_hdr" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 12673 "configure"
+#line 12996 "configure"
 #include "confdefs.h"
 #include <$ac_hdr>
 EOF
 ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:12678: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+{ (eval echo configure:13001: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
 ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
 if test -z "$ac_err"; then
   rm -rf conftest*
@@ -12707,7 +13030,7 @@ CPPFLAGS=$ac_save_cppflags
     # With OpenCL library directory
     
 echo $ac_n "checking for location of OpenCL library""... $ac_c" 1>&6
-echo "configure:12711: checking for location of OpenCL library" >&5
+echo "configure:13034: checking for location of OpenCL library" >&5
 case "$with_opencl_libs" in
 y | ye | yes | n | no)
 	{ echo "configure: error: *** You must supply a directory to --with-opencl-libs." 1>&2; exit 1; }
@@ -12731,13 +13054,13 @@ LDFLAGS="$OCLLIBPATH $LDFLAGS"
 
 
 echo $ac_n "checking for clGetPlatformInfo in -lOpenCL""... $ac_c" 1>&6
-echo "configure:12735: checking for clGetPlatformInfo in -lOpenCL" >&5
+echo "configure:13058: checking for clGetPlatformInfo in -lOpenCL" >&5
 ac_lib_var=`echo OpenCL'_'clGetPlatformInfo | sed 'y%./+-%__p_%'`
 
 ac_save_LIBS="$LIBS"
 LIBS="-lOpenCL  $LIBS"
 cat > conftest.$ac_ext <<EOF
-#line 12741 "configure"
+#line 13064 "configure"
 #include "confdefs.h"
 /* Override any gcc2 internal prototype to avoid an error.  */
 /* We use char because int might match the return type of a gcc2
@@ -12748,7 +13071,7 @@ int main() {
 clGetPlatformInfo()
 ; return 0; }
 EOF
-if { (eval echo configure:12752: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13075: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   eval "ac_cv_lib_$ac_lib_var=yes"
 else
@@ -12808,7 +13131,7 @@ fi
      fi
 
      echo $ac_n "checking for special C compiler options needed for large files""... $ac_c" 1>&6
-echo "configure:12812: checking for special C compiler options needed for large files" >&5
+echo "configure:13135: checking for special C compiler options needed for large files" >&5
 
 ac_cv_sys_largefile_CC=no
         largefile_cc_opt=""
@@ -12816,7 +13139,7 @@ ac_cv_sys_largefile_CC=no
 	  # IRIX 6.2 and later do not support large files by default,
 	  # so use the C compiler's -n32 option if that helps.
 	  cat > conftest.$ac_ext <<EOF
-#line 12820 "configure"
+#line 13143 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
     /* Check that off_t can represent 2**63 - 1 correctly.
@@ -12832,7 +13155,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12836: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13159: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
@@ -12841,7 +13164,7 @@ else
   ac_save_CC="${CC-cc}"
 	     CC="$CC -n32"
 	     cat > conftest.$ac_ext <<EOF
-#line 12845 "configure"
+#line 13168 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
     /* Check that off_t can represent 2**63 - 1 correctly.
@@ -12857,7 +13180,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12861: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13184: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sys_largefile_CC=' -n32'
 else
@@ -12884,11 +13207,11 @@ echo "$ac_t""$ac_cv_sys_largefile_CC" 1>&6
      fi
 
      echo $ac_n "checking for _FILE_OFFSET_BITS value needed for large files""... $ac_c" 1>&6
-echo "configure:12888: checking for _FILE_OFFSET_BITS value needed for large files" >&5
+echo "configure:13211: checking for _FILE_OFFSET_BITS value needed for large files" >&5
 
 ac_cv_sys_file_offset_bits=no
       cat > conftest.$ac_ext <<EOF
-#line 12892 "configure"
+#line 13215 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
     /* Check that off_t can represent 2**63 - 1 correctly.
@@ -12904,14 +13227,14 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12908: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13231: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 12915 "configure"
+#line 13238 "configure"
 #include "confdefs.h"
 #define _FILE_OFFSET_BITS 64
 #include <sys/types.h>
@@ -12929,7 +13252,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13256: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sys_file_offset_bits=64
 else
@@ -12955,11 +13278,11 @@ EOF
 
    fi
      echo $ac_n "checking for _LARGE_FILES value needed for large files""... $ac_c" 1>&6
-echo "configure:12959: checking for _LARGE_FILES value needed for large files" >&5
+echo "configure:13282: checking for _LARGE_FILES value needed for large files" >&5
 
 ac_cv_sys_large_files=no
       cat > conftest.$ac_ext <<EOF
-#line 12963 "configure"
+#line 13286 "configure"
 #include "confdefs.h"
 #include <sys/types.h>
     /* Check that off_t can represent 2**63 - 1 correctly.
@@ -12975,14 +13298,14 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:12979: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13302: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 12986 "configure"
+#line 13309 "configure"
 #include "confdefs.h"
 #define _LARGE_FILES 1
 #include <sys/types.h>
@@ -13000,7 +13323,7 @@ int main() {
 
 ; return 0; }
 EOF
-if { (eval echo configure:13004: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13327: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sys_large_files=1
 else
@@ -13026,25 +13349,25 @@ EOF
 
    fi
      echo $ac_n "checking for _LARGEFILE_SOURCE value needed for large files""... $ac_c" 1>&6
-echo "configure:13030: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+echo "configure:13353: checking for _LARGEFILE_SOURCE value needed for large files" >&5
 
 ac_cv_sys_largefile_source=no
       cat > conftest.$ac_ext <<EOF
-#line 13034 "configure"
+#line 13357 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 return !fseeko;
 ; return 0; }
 EOF
-if { (eval echo configure:13041: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13364: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 13048 "configure"
+#line 13371 "configure"
 #include "confdefs.h"
 #define _LARGEFILE_SOURCE 1
 #include <stdio.h>
@@ -13053,7 +13376,7 @@ int main() {
 return !fseeko;
 ; return 0; }
 EOF
-if { (eval echo configure:13057: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13380: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sys_largefile_source=1
 else
@@ -13085,25 +13408,25 @@ EOF
 ac_save_cflags=${CFLAGS}
 CFLAGS="$LFS_CFLAGS ${ac_save_cflags}"
 echo $ac_n "checking for _LARGEFILE_SOURCE value needed for large files""... $ac_c" 1>&6
-echo "configure:13089: checking for _LARGEFILE_SOURCE value needed for large files" >&5
+echo "configure:13412: checking for _LARGEFILE_SOURCE value needed for large files" >&5
 
 ac_cv_sys_largefile_source=no
       cat > conftest.$ac_ext <<EOF
-#line 13093 "configure"
+#line 13416 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 return !fseeko;
 ; return 0; }
 EOF
-if { (eval echo configure:13100: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13423: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   :
 else
   echo "configure: failed program was:" >&5
   cat conftest.$ac_ext >&5
   rm -rf conftest*
   cat > conftest.$ac_ext <<EOF
-#line 13107 "configure"
+#line 13430 "configure"
 #include "confdefs.h"
 #define _LARGEFILE_SOURCE 1
 #include <stdio.h>
@@ -13112,7 +13435,7 @@ int main() {
 return !fseeko;
 ; return 0; }
 EOF
-if { (eval echo configure:13116: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13439: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_sys_largefile_source=1
 else
@@ -13142,18 +13465,18 @@ EOF
    # If you want fseeko and ftello with glibc, upgrade to a fixed glibc.
 
    echo $ac_n "checking for fseeko""... $ac_c" 1>&6
-echo "configure:13146: checking for fseeko" >&5
+echo "configure:13469: checking for fseeko" >&5
 
 ac_cv_func_fseeko=no
       cat > conftest.$ac_ext <<EOF
-#line 13150 "configure"
+#line 13473 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 int main() {
 return fseeko && fseeko (stdin, 0, 0);
 ; return 0; }
 EOF
-if { (eval echo configure:13157: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+if { (eval echo configure:13480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
   rm -rf conftest*
   ac_cv_func_fseeko=yes
 else
@@ -13170,10 +13493,10 @@ EOF
 
    fi
 echo $ac_n "checking if system supports Large Files at all""... $ac_c" 1>&6
-echo "configure:13174: checking if system supports Large Files at all" >&5
+echo "configure:13497: checking if system supports Large Files at all" >&5
 
 cat > conftest.$ac_ext <<EOF
-#line 13177 "configure"
+#line 13500 "configure"
 #include "confdefs.h"
 #include <stdio.h>
 #include <sys/types.h>
@@ -13205,7 +13528,7 @@ return !ftello;
 #endif
 ; return 0; }
 EOF
-if { (eval echo configure:13209: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:13532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
   rm -rf conftest*
   ac_cv_largefiles=yes
 else
@@ -13233,177 +13556,6 @@ EOF
 CFLAGS=${ac_save_cflags}
 # Done large file support
 
-# Enable wxWidgets support (for wxGUI)
-
-echo $ac_n "checking whether to use wxWidgets""... $ac_c" 1>&6
-echo "configure:13240: checking whether to use wxWidgets" >&5
-
-WXVERSION=
-WXWIDGETSCXXFLAGS= 
-WXWIDGETSCPPFLAGS=  
-WXWIDGETSLIB=  
-USE_WXWIDGETS=
-MACOSX_ARCHS_WXPYTHON=
-
-if test "$with_wxwidgets" = "no" ; then
-  echo "$ac_t""no" 1>&6
-else
-  echo "$ac_t""yes" 1>&6
-  USE_WXWIDGETS="1"
-  if test "$with_wxwidgets" != "yes" ; then
-    WX_CONFIG="$with_wxwidgets"
-  fi
-
-  # Extract the first word of "wx-config", so it can be a program name with args.
-set dummy wx-config; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:13261: checking for $ac_word" >&5
-
-case "$WX_CONFIG" in
-  /*)
-  ac_cv_path_WX_CONFIG="$WX_CONFIG" # Let the user override the test with a path.
-  ;;
-  ?:/*)			 
-  ac_cv_path_WX_CONFIG="$WX_CONFIG" # Let the user override the test with a dos path.
-  ;;
-  *)
-  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS=":"
-  ac_dummy="$PATH"
-  for ac_dir in $ac_dummy; do 
-    test -z "$ac_dir" && ac_dir=.
-    if test -f $ac_dir/$ac_word; then
-      ac_cv_path_WX_CONFIG="$ac_dir/$ac_word"
-      break
-    fi
-  done
-  IFS="$ac_save_ifs"
-  test -z "$ac_cv_path_WX_CONFIG" && ac_cv_path_WX_CONFIG="no"
-  ;;
-esac
-WX_CONFIG="$ac_cv_path_WX_CONFIG"
-if test -n "$WX_CONFIG"; then
-  echo "$ac_t""$WX_CONFIG" 1>&6
-else
-  echo "$ac_t""no" 1>&6
-fi
-
-
-  if test "$WX_CONFIG" = "no" ; then
-    { echo "configure: error: *** couldn't find wx-config
-
-  	  	  wxWidgets must be installed on your system.
-  
-                  Please check that wx-config is in path, the directory
-                  where wxWidgets libraries are installed (returned by
-                  'wx-config --libs' or 'wx-config --static --libs' command)
-                  is in LD_LIBRARY_PATH or equivalent variable and
-                  wxWidgets version is 2.8.1 or above." 1>&2; exit 1; }
- fi
-
- # Check wxWidgets version
-
- REQWX="2.8.1"
-
- echo $ac_n "checking wxWidgets version""... $ac_c" 1>&6
-echo "configure:13309: checking wxWidgets version" >&5
- if WXVERSION=`"$WX_CONFIG" --version`; then
-   echo "$ac_t""$WXVERSION" 1>&6
- else
-   echo "$ac_t""not found" 1>&6
-   { echo "configure: error: wxWidgets is required." 1>&2; exit 1; }
- fi
- if test `expr "$WXVERSION" \< "$REQWX"` = 1 ; then
-   { echo "configure: error: *** wxWidgets "$REQWX" or later is required." 1>&2; exit 1; }
- fi
-
- # With wxWidgets includes directory 
-
- WXWIDGETSCXXFLAGS=`"$WX_CONFIG" --cxxflags`
- WXWIDGETSCPPFLAGS=`"$WX_CONFIG" --cppflags`
-
- 
-ac_save_cppflags="$CPPFLAGS"
-CPPFLAGS="$WXWIDGETSCPPFLAGS $CPPFLAGS"
-for ac_hdr in wx/wxprec.h
-do
-ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
-echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:13332: checking for $ac_hdr" >&5
-
-cat > conftest.$ac_ext <<EOF
-#line 13335 "configure"
-#include "confdefs.h"
-#include <$ac_hdr>
-EOF
-ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:13340: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
-if test -z "$ac_err"; then
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=yes"
-else
-  echo "$ac_err" >&5
-  echo "configure: failed program was:" >&5
-  cat conftest.$ac_ext >&5
-  rm -rf conftest*
-  eval "ac_cv_header_$ac_safe=no"
-fi
-rm -f conftest*
-if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
-  echo "$ac_t""yes" 1>&6
-    ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
-  cat >> confdefs.h <<EOF
-#define $ac_tr_hdr 1
-EOF
- 
-else
-  echo "$ac_t""no" 1>&6
-{ echo "configure: error: *** Unable to locate wxWidgets includes." 1>&2; exit 1; }
-
-fi
-done
-
-CPPFLAGS=$ac_save_cppflags
- 
-
- # With wxWidgets library directory 
-
- WXWIDGETSLIB=`"$WX_CONFIG" --libs`
-
- # shouldn't have arch flags in C/LD flags on OSX
- for a in i386 ppc x86_64 ppc64
- do
-   WXWIDGETSCXXFLAGS=`echo "$WXWIDGETSCXXFLAGS" | sed "s/-arch  *$a//g"`
-   WXWIDGETSCPPFLAGS=`echo "$WXWIDGETSCPPFLAGS" | sed "s/-arch  *$a//g"`
-   WXWIDGETSLIB=`echo "$WXWIDGETSLIB" | sed "s/-arch  *$a//g"`
- done
-
-  # check for available OSX archs in wxPython
-  if test -n "$MACOSX_ARCHS" ; then
-    wxver=`"$WX_CONFIG" --version`
-    wxlib=`"$WX_CONFIG" --prefix`/lib/lib`"$WX_CONFIG" --basename`-`echo "$wxver" | cut -d . -f1,2`.dylib
-    wxlibinfo=`file "$wxlib"`
-    for a in i386 ppc x86_64 ppc64
-    do
-      # add only if in MACOSX_ARCHS
-      if test -n "`echo \"$wxlibinfo\" | grep \"library $a\"`" ; then
-        if test -n "`echo \"$MACOSX_ARCHS\" | grep $a`" ; then
-          MACOSX_ARCHS_WXPYTHON="$MACOSX_ARCHS_WXPYTHON -arch $a"
-        fi
-      fi
-    done
-  fi
-fi # $USE_WXWIDGETS
-
- 
-
- 
- 
- 
-
-
-# Done checking wxWidgets
-
 USE_TERMIO=
 
 
@@ -13571,6 +13723,9 @@ s%@HAVE_SOCKET@%$HAVE_SOCKET%g
 s%@ZLIBINCPATH@%$ZLIBINCPATH%g
 s%@ZLIBLIBPATH@%$ZLIBLIBPATH%g
 s%@ZLIB@%$ZLIB%g
+s%@BZLIBINCPATH@%$BZLIBINCPATH%g
+s%@BZLIBLIBPATH@%$BZLIBLIBPATH%g
+s%@BZLIB@%$BZLIB%g
 s%@PROJINC@%$PROJINC%g
 s%@PROJLIB@%$PROJLIB%g
 s%@PROJSHARE@%$PROJSHARE%g
@@ -13593,6 +13748,11 @@ s%@LIBLAS_LIBS@%$LIBLAS_LIBS%g
 s%@LIBLAS_CFLAGS@%$LIBLAS_CFLAGS%g
 s%@LIBLAS_INC@%$LIBLAS_INC%g
 s%@USE_LIBLAS@%$USE_LIBLAS%g
+s%@PDAL_CONFIG@%$PDAL_CONFIG%g
+s%@PDAL_LIBS@%$PDAL_LIBS%g
+s%@PDAL_CPPFLAGS@%$PDAL_CPPFLAGS%g
+s%@PDAL_INC@%$PDAL_INC%g
+s%@USE_PDAL@%$USE_PDAL%g
 s%@NETCDF_CONFIG@%$NETCDF_CONFIG%g
 s%@NETCDF_LIBS@%$NETCDF_LIBS%g
 s%@NETCDF_CFLAGS@%$NETCDF_CFLAGS%g
@@ -13665,13 +13825,6 @@ s%@OCLLIB@%$OCLLIB%g
 s%@USE_OPENCL@%$USE_OPENCL%g
 s%@USE_LARGEFILES@%$USE_LARGEFILES%g
 s%@LFS_CFLAGS@%$LFS_CFLAGS%g
-s%@WX_CONFIG@%$WX_CONFIG%g
-s%@WXVERSION@%$WXVERSION%g
-s%@WXWIDGETSCXXFLAGS@%$WXWIDGETSCXXFLAGS%g
-s%@WXWIDGETSCPPFLAGS@%$WXWIDGETSCPPFLAGS%g
-s%@WXWIDGETSLIB@%$WXWIDGETSLIB%g
-s%@USE_WXWIDGETS@%$USE_WXWIDGETS%g
-s%@MACOSX_ARCHS_WXPYTHON@%$MACOSX_ARCHS_WXPYTHON%g
 s%@USE_TERMIO@%$USE_TERMIO%g
 s%@STRIPFLAG@%$STRIPFLAG%g
 s%@GRASS_HOME@%$GRASS_HOME%g
@@ -13952,6 +14105,8 @@ echo ""
 
 echo "  BLAS support:               `if test -n "${USE_BLAS}" ; then echo yes ; else echo no ; fi`"
 
+echo "  BZIP2 support:              `if test -n "${USE_BZIP2}" ; then echo yes ; else echo no ; fi`"
+
 echo "  C++ support:                `if test -n "${USE_CXX}" ; then echo yes ; else echo no ; fi`"
 
 echo "  Cairo support:              `if test -n "${USE_CAIRO}" ; then echo yes ; else echo no ; fi`"
@@ -13988,6 +14143,8 @@ echo "  OpenGL support:             `if test -n "${USE_OPENGL}" ; then echo yes
 
 echo "  OpenMP support:             `if test -n "${USE_OPENMP}" ; then echo yes ; else echo no ; fi`"
 
+echo "  PDAL support:               `if test -n "${USE_PDAL}" ; then echo yes ; else echo no ; fi`"
+
 echo "  PNG support:                `if test -n "${USE_PNG}" ; then echo yes ; else echo no ; fi`"
 
 echo "  POSIX thread support:       `if test -n "${USE_PTHREAD}" ; then echo yes ; else echo no ; fi`"
@@ -14002,8 +14159,6 @@ echo "  SQLite support:             `if test -n "${USE_SQLITE}" ; then echo yes
 
 echo "  TIFF support:               `if test -n "${USE_TIFF}" ; then echo yes ; else echo no ; fi`"
 
-echo "  wxWidgets support:          `if test -n "${USE_WXWIDGETS}" ; then echo yes ; else echo no ; fi`"
-
 echo "  X11 support:                `if test -n "${USE_X11}" ; then echo yes ; else echo no ; fi`"
 
 echo ""
diff --git a/configure.in b/configure.in
index c338c96..575f62b 100644
--- a/configure.in
+++ b/configure.in
@@ -126,12 +126,14 @@ changequote(,)
 LIB_VER=`echo ${GRASS_VERSION_NUMBER} | sed 's/^\([0-9.]*\).*$/\1/'`
 changequote([,])
 
-GRASS_VERSION_SVN=00000
+GRASS_VERSION_SVN="exported"
 AC_PATH_PROG(SVN_VERSION, svnversion, no)
 if test "$SVN_VERSION" != "no" ; then
    GRASS_VERSION_SVN=`$SVN_VERSION -c | cut -f2 -d:`
    if test "$GRASS_VERSION_SVN" = "exported" -o "$GRASS_VERSION_SVN" = "Unversioned directory" ; then
-      GRASS_VERSION_SVN=00000
+      GRASS_VERSION_SVN="exported"
+   else
+      GRASS_VERSION_SVN="r$GRASS_VERSION_SVN"
    fi
 fi
 
@@ -265,6 +267,7 @@ LOC_ARG_WITH(regex, regex)
 LOC_ARG_WITH(pthread, POSIX threads, no)
 LOC_ARG_WITH(openmp, OpenMP, no)
 LOC_ARG_WITH(opencl, OpenCL, no)
+LOC_ARG_WITH(bzlib, BZIP2, no)
 
 AC_ARG_WITH(gdal,
 [  --with-gdal[=path/gdal-config]
@@ -277,6 +280,12 @@ AC_ARG_WITH(liblas,
                           e.g. '--with-liblas=/usr/local/bin/liblas-config',
                           default: no)],, with_liblas="no")
 
+AC_ARG_WITH(pdal,
+[  --with-pdal[=path/pdal-config]
+                          enable PDAL support (pdal-config with path,
+                          e.g. '--with-pdal=/usr/local/bin/pdal-config',
+                          default: no)],, with_pdal="no")
+
 AC_ARG_WITH(wxwidgets,
 [  --with-wxwidgets[=path/wx-config]
                           enable wxWidgets support (wx-config with path,
@@ -306,6 +315,9 @@ AC_ARG_WITH(libs,
 LOC_ARG_WITH_INC(zlib, zlib)
 LOC_ARG_WITH_LIB(zlib, zlib)
 
+LOC_ARG_WITH_INC(bzlib, BZIP2)
+LOC_ARG_WITH_LIB(bzlib, BZIP2)
+
 LOC_ARG_WITH_INC(readline, Readline)
 LOC_ARG_WITH_LIB(readline, Readline)
 
@@ -586,6 +598,38 @@ AC_SUBST(ZLIB)
 
 # Done checking zlib
 
+# bzip2 support
+
+LOC_CHECK_USE(bzlib,bzlib,USE_BZIP2)
+
+if test -n "$USE_BZIP2"; then
+
+BZLIBLIBPATH=
+BZLIBINCPATH=
+BZLIB=
+
+# With bzip2 includes directory
+
+LOC_CHECK_INC_PATH(bzlib,bzlib,BZLIBINCPATH)
+
+LOC_CHECK_INCLUDES(bzlib.h,bzlib,$BZLIBINCPATH)
+
+# With bzip2 library directory
+
+LOC_CHECK_LIB_PATH(bzlib,bzlib,BZLIBLIBPATH)
+
+LOC_CHECK_LIBS(bz2,BZ2_bzBuffToBuffCompress,bzlib,$BZLIBLIBPATH,BZLIB,,,)
+
+#
+
+fi # $USE_BZIP2
+
+AC_SUBST(BZLIBINCPATH)
+AC_SUBST(BZLIBLIBPATH)
+AC_SUBST(BZLIB)
+
+# Done checking bzip2
+
 # Mandatory PROJ dependency
 
 PROJINC=
@@ -823,6 +867,69 @@ AC_SUBST(LIBLAS_CFLAGS)
 AC_SUBST(LIBLAS_INC)
 AC_SUBST(USE_LIBLAS)
 
+# PDAL option
+
+AC_MSG_CHECKING(whether to use PDAL)
+
+# new and currently used way to switch language to C++
+# AC_LANG_PUSH(C++)
+AC_LANG_SAVE
+AC_LANG_CPLUSPLUS
+
+PDAL_LIBS=
+PDAL_CPPFLAGS=
+USE_PDAL=
+
+if test "`basename xx/$with_pdal`" = "pdal-config" ; then
+  PDAL_CONFIG="$with_pdal"
+fi
+
+if test "$with_pdal" = "no" ; then
+  AC_MSG_RESULT(no)
+else
+  AC_MSG_RESULT(yes)
+  AC_PATH_PROG(PDAL_CONFIG, pdal-config, no)
+
+  if test "$PDAL_CONFIG" = "no" ; then
+    AC_MSG_ERROR([*** could not find pdal-config])
+  fi
+
+  if test "$PDAL_CONFIG" != "" ; then
+    PDAL_LIBS=`"$PDAL_CONFIG" --libs`
+    PDAL_CPPFLAGS=`"$PDAL_CONFIG" --cxxflags`
+    PDAL_INC=`"$PDAL_CONFIG" --includes`
+    USE_PDAL=1
+  fi
+
+  PDAL=
+  ac_save_libs="$LIBS"
+  ac_save_cflags="$CFLAGS"
+  ac_save_cppflags="$CPPFLAGS"
+  LIBS="$LIBS $PDAL_LIBS"
+  CFLAGS="$CFLAGS $PDAL_CFLAGS"
+  CPPFLAGS="$CPPFLAGS $PDAL_CPPFLAGS $PDAL_INC"
+  AC_TRY_LINK([#include <pdal/PointTable.hpp>],[pdal::PointTable table;],,[
+  AC_TRY_LINK([#include <pdal/PointTable.hpp>],[pdal::PointTable table;],PDAL_LIBS="$PDAL_LIBS",[
+  AC_MSG_ERROR([*** Unable to locate PDAL library.])
+  ])
+  ])
+  LIBS=${ac_save_libs}
+  CFLAGS=${ac_save_cflags}
+  CPPFLAGS=${ac_save_cppflags}
+
+  AC_DEFINE(HAVE_PDAL)
+fi
+
+AC_SUBST(PDAL_LIBS)
+AC_SUBST(PDAL_CPPFLAGS)
+AC_SUBST(PDAL_INC)
+AC_SUBST(USE_PDAL)
+
+# new and currently used way to switch language back to C
+# AC_LANG_POP(C++)
+AC_LANG_C
+AC_LANG_RESTORE
+
 # NetCDF option
 
 AC_MSG_CHECKING(whether to use NetCDF)
@@ -1768,100 +1875,6 @@ AC_HAVE_LARGEFILES
 CFLAGS=${ac_save_cflags}
 # Done large file support
 
-# Enable wxWidgets support (for wxGUI)
-
-AC_MSG_CHECKING(whether to use wxWidgets)
-
-WXVERSION=
-WXWIDGETSCXXFLAGS= 
-WXWIDGETSCPPFLAGS=  
-WXWIDGETSLIB=  
-USE_WXWIDGETS=
-MACOSX_ARCHS_WXPYTHON=
-
-if test "$with_wxwidgets" = "no" ; then
-  AC_MSG_RESULT(no)
-else
-  AC_MSG_RESULT(yes)
-  USE_WXWIDGETS="1"
-  if test "$with_wxwidgets" != "yes" ; then
-    WX_CONFIG="$with_wxwidgets"
-  fi
-
-  AC_PATH_PROG(WX_CONFIG, wx-config, no)
-
-  if test "$WX_CONFIG" = "no" ; then
-    AC_MSG_ERROR([*** couldn't find wx-config
-
-  	  	  wxWidgets must be installed on your system.
-  
-                  Please check that wx-config is in path, the directory
-                  where wxWidgets libraries are installed (returned by
-                  'wx-config --libs' or 'wx-config --static --libs' command)
-                  is in LD_LIBRARY_PATH or equivalent variable and
-                  wxWidgets version is 2.8.1 or above.])
- fi
-
- # Check wxWidgets version
-
- REQWX="2.8.1"
-
- AC_MSG_CHECKING([wxWidgets version])
- if WXVERSION=`"$WX_CONFIG" --version`; then
-   AC_MSG_RESULT([$WXVERSION])
- else
-   AC_MSG_RESULT([not found])
-   AC_MSG_ERROR([wxWidgets is required.])
- fi
- if test `expr "$WXVERSION" \< "$REQWX"` = 1 ; then
-   AC_MSG_ERROR([*** wxWidgets "$REQWX" or later is required.])
- fi
-
- # With wxWidgets includes directory 
-
- WXWIDGETSCXXFLAGS=`"$WX_CONFIG" --cxxflags`
- WXWIDGETSCPPFLAGS=`"$WX_CONFIG" --cppflags`
-
- LOC_CHECK_INCLUDES(wx/wxprec.h,wxWidgets,$WXWIDGETSCPPFLAGS) 
-
- # With wxWidgets library directory 
-
- WXWIDGETSLIB=`"$WX_CONFIG" --libs`
-
- # shouldn't have arch flags in C/LD flags on OSX
- for a in i386 ppc x86_64 ppc64
- do
-   WXWIDGETSCXXFLAGS=`echo "$WXWIDGETSCXXFLAGS" | sed "s/-arch  *$a//g"`
-   WXWIDGETSCPPFLAGS=`echo "$WXWIDGETSCPPFLAGS" | sed "s/-arch  *$a//g"`
-   WXWIDGETSLIB=`echo "$WXWIDGETSLIB" | sed "s/-arch  *$a//g"`
- done
-
-  # check for available OSX archs in wxPython
-  if test -n "$MACOSX_ARCHS" ; then
-    wxver=`"$WX_CONFIG" --version`
-    wxlib=`"$WX_CONFIG" --prefix`/lib/lib`"$WX_CONFIG" --basename`-`echo "$wxver" | cut -d . -f1,2`.dylib
-    wxlibinfo=`file "$wxlib"`
-    for a in i386 ppc x86_64 ppc64
-    do
-      # add only if in MACOSX_ARCHS
-      if test -n "`echo \"$wxlibinfo\" | grep \"library $a\"`" ; then
-        if test -n "`echo \"$MACOSX_ARCHS\" | grep $a`" ; then
-          MACOSX_ARCHS_WXPYTHON="$MACOSX_ARCHS_WXPYTHON -arch $a"
-        fi
-      fi
-    done
-  fi
-fi # $USE_WXWIDGETS
-
-AC_SUBST(WXVERSION) 
-AC_SUBST(WXWIDGETSCXXFLAGS)
-AC_SUBST(WXWIDGETSCPPFLAGS) 
-AC_SUBST(WXWIDGETSLIB) 
-AC_SUBST(USE_WXWIDGETS) 
-AC_SUBST(MACOSX_ARCHS_WXPYTHON)
-
-# Done checking wxWidgets
-
 USE_TERMIO=
 AC_SUBST(USE_TERMIO)
 
@@ -1895,6 +1908,7 @@ LOC_MSG([  MacOSX architectures:       ${MACOSX_ARCHS}])
 LOC_MSG([  MacOSX SDK:                 ${MACOSX_SDK}])
 LOC_MSG()
 LOC_MSG_USE(BLAS support,USE_BLAS)
+LOC_MSG_USE(BZIP2 support,USE_BZIP2)
 LOC_MSG_USE(C++ support,USE_CXX)
 LOC_MSG_USE(Cairo support,USE_CAIRO)
 LOC_MSG_USE(DWG support,USE_OPENDWG)
@@ -1913,6 +1927,7 @@ LOC_MSG_USE(OGR support,USE_OGR)
 LOC_MSG_USE(OpenCL support,USE_OPENCL)
 LOC_MSG_USE(OpenGL support,USE_OPENGL)
 LOC_MSG_USE(OpenMP support,USE_OPENMP)
+LOC_MSG_USE(PDAL support,USE_PDAL)
 LOC_MSG_USE(PNG support,USE_PNG)
 LOC_MSG_USE(POSIX thread support,USE_PTHREAD)
 LOC_MSG_USE(PostgreSQL support,USE_POSTGRES)
@@ -1920,6 +1935,5 @@ LOC_MSG_USE(Readline support,USE_READLINE)
 LOC_MSG_USE(Regex support,USE_REGEX)
 LOC_MSG_USE(SQLite support,USE_SQLITE)
 LOC_MSG_USE(TIFF support,USE_TIFF)
-LOC_MSG_USE(wxWidgets support,USE_WXWIDGETS)
 LOC_MSG_USE(X11 support,USE_X11)
 LOC_MSG()
diff --git a/db/db.columns/db.columns.html b/db/db.columns/db.columns.html
index d84a7ac..f3fd9a5 100644
--- a/db/db.columns/db.columns.html
+++ b/db/db.columns/db.columns.html
@@ -57,4 +57,4 @@ db.columns driver=sqlite table=archsites database='$GISDBASE/$LOCATION_NAME/$MAP
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/db.connect/db.connect.html b/db/db.connect/db.connect.html
index cca2add..43df52f 100644
--- a/db/db.connect/db.connect.html
+++ b/db/db.connect/db.connect.html
@@ -34,66 +34,66 @@ db.tables -p
 <p>The SQLite database file is created automatically when used the first time.
 <p>See <a href="grass-sqlite.html">SQLite</a> database driver for details.
 
-<h3>ODBC</h3>
+<h3>PostgreSQL (local connection)</h3>
 
-Network storage, database tables stored in database "mydb"
+Local storage, database tables stored in database "mydb"
 (may require the use of <em><a href=db.login.html>db.login</a></em>):
-<br> 
+<br>
 <div class="code"><pre>
-db.connect driver=odbc database=mydb
-db.login user=myname [pass=secret]
+db.connect driver=pg database=mydb
+db.login user=myname pass=secret
 db.connect -p
 db.tables -p
 </pre></div>
 <p>See <a href="grass-pg.html">PostgreSQL</a> database driver for details.
 
-<h3>PostgreSQL</h3>
+<h3>PostgreSQL (network connection)</h3>
 
 Network storage, database tables stored in database "mydb"
 (may require the use of <em><a href=db.login.html>db.login</a></em>):
 <br>
 <div class="code"><pre>
-db.connect driver=pg database="host=myserver.itc.it,dbname=mydb"
-db.login user=myname [pass=secret]
+db.connect driver=pg database=mydb
+db.login user=myname pass=secret host=myserver.com port=6666
 db.connect -p
 db.tables -p
 </pre></div>
 <p>See <a href="grass-pg.html">PostgreSQL</a> database driver for details.
 
-<h3>PostgreSQL with different port</h3>
+<h3>MySQL (local connection)</h3>
 
-Network storage, database tables stored in database "mydb"
-(may require the use of <em><a href=db.login.html>db.login</a></em>):
+Local storage, database tables stored in database "mydb" (may require
+the use of <em><a href=db.login.html>db.login</a></em>):
 <br>
 <div class="code"><pre>
-db.connect driver=pg database="host=myserver.itc.it,dbname=mydb,port=6666"
-db.login user=myname [pass=secret]
+db.connect driver=mysql database=mydb
+db.login user=myname pass=secret
 db.connect -p
 db.tables -p
 </pre></div>
 <p>See <a href="grass-mysql.html">MySQL</a> database driver for details.
 
-<h3>MySQL (local connection)</h3>
+<h3>MySQL (network connection)</h3>
 
-Local storage (<em><a href=db.login.html>db.login</a></em> may not be needed):
+Network storage, database tables stored in database "mydb"
+(may require the use of <em><a href=db.login.html>db.login</a></em>):
 <br>
 <div class="code"><pre>
 db.connect driver=mysql database=mydb
-db.login user=myname [pass=secret]
+db.login user=myname pass=secret host=myserver.com
 db.connect -p
 db.tables -p
 </pre></div>
 <p>See <a href="grass-mysql.html">MySQL</a> database driver for details.
   
-
-<h3>MySQL (external server)</h3>
+<h3>ODBC</h3>
 
 Network storage, database tables stored in database "mydb"
 (may require the use of <em><a href=db.login.html>db.login</a></em>):
-<br>
+<br> 
 <div class="code"><pre>
-db.connect driver=mysql database="host=myserver.itc.it,dbname=mydb"
-db.login user=myname [pass=secret]
+db.connect driver=odbc database=mydb
+db.login user=myname pass=secret
 db.connect -p
 db.tables -p
 </pre></div>
@@ -131,4 +131,4 @@ Main author: Radim Blazek, ITC-Irst, Trento, Italy<br>
 GRASS 7 improvements: Martin Landa, Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-09-11 13:25:46 +0200 (Sun, 11 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-11 09:33:35 +0200 (Sun, 11 Sep 2016) $</i>
diff --git a/db/db.copy/db.copy.html b/db/db.copy/db.copy.html
index 419a0a8..d6792fa 100644
--- a/db/db.copy/db.copy.html
+++ b/db/db.copy/db.copy.html
@@ -79,4 +79,4 @@ db.copy from_driver=sqlite from_database='$GISDBASE/$LOCATION_NAME/$MAPSET/sqlit
 
 Radim Blazek, ITC-irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/db.createdb/db.createdb.html b/db/db.createdb/db.createdb.html
index 77c844f..e53cb2d 100644
--- a/db/db.createdb/db.createdb.html
+++ b/db/db.createdb/db.createdb.html
@@ -65,4 +65,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 SQLite and PostgreSQL support by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-12-07 23:24:06 +0100 (Sun, 07 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-07 23:22:14 +0100 (Sun, 07 Dec 2014) $</i>
diff --git a/db/db.databases/db.databases.html b/db/db.databases/db.databases.html
index 04f7bd4..1509a47 100644
--- a/db/db.databases/db.databases.html
+++ b/db/db.databases/db.databases.html
@@ -55,4 +55,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 Updated for GRASS 7 by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-12-07 23:24:06 +0100 (Sun, 07 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-07 23:22:14 +0100 (Sun, 07 Dec 2014) $</i>
diff --git a/db/db.describe/db.describe.html b/db/db.describe/db.describe.html
index 59d89e0..fe6c03f 100644
--- a/db/db.describe/db.describe.html
+++ b/db/db.describe/db.describe.html
@@ -76,4 +76,4 @@ type:INTEGER
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/db.drivers/db.drivers.html b/db/db.drivers/db.drivers.html
index 5066dc1..93bb7d0 100644
--- a/db/db.drivers/db.drivers.html
+++ b/db/db.drivers/db.drivers.html
@@ -31,4 +31,4 @@ dbf
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/db.dropdb/db.dropdb.html b/db/db.dropdb/db.dropdb.html
index 1d87b09..0496955 100644
--- a/db/db.dropdb/db.dropdb.html
+++ b/db/db.dropdb/db.dropdb.html
@@ -47,4 +47,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 SQLite and PostgreSQL support by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-12-07 23:24:06 +0100 (Sun, 07 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-07 23:22:14 +0100 (Sun, 07 Dec 2014) $</i>
diff --git a/db/db.execute/db.execute.html b/db/db.execute/db.execute.html
index a5c7975..65ad285 100644
--- a/db/db.execute/db.execute.html
+++ b/db/db.execute/db.execute.html
@@ -111,4 +111,4 @@ db.execute sql="UPDATE extratab SET names=(SELECT label FROM myroads WHERE extra
 CERL
 
 <p>
-<i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/db.login/db.login.html b/db/db.login/db.login.html
index eef77fe..4b0fe3f 100644
--- a/db/db.login/db.login.html
+++ b/db/db.login/db.login.html
@@ -60,7 +60,7 @@ db.login driver=pg database=mydb user=bacava password=""
 <h2>AUTHOR</h2>
 
 Radim Blazek<br>
-Support for hostname and port by Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic
+Support for hostname and port by Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic (GRASS 7.1)
 
 <p>
-<i>Last changed: $Date: 2016-02-06 16:25:05 +0100 (Sat, 06 Feb 2016) $</i>
+<i>Last changed: $Date: 2015-10-01 23:06:38 +0200 (Thu, 01 Oct 2015) $</i>
diff --git a/db/db.select/db.select.html b/db/db.select/db.select.html
index 022d4bd..6b73cfc 100644
--- a/db/db.select/db.select.html
+++ b/db/db.select/db.select.html
@@ -102,4 +102,4 @@ Modifications by Radim Blazek, ITC-Irst, Trento, Italy<br>
 Support for multiple statements by Martin Landa, Czech Technical University in Prague
 
 <p>
-<i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/db.tables/db.tables.html b/db/db.tables/db.tables.html
index 60627e9..cba2b40 100644
--- a/db/db.tables/db.tables.html
+++ b/db/db.tables/db.tables.html
@@ -42,4 +42,4 @@ db.tables -p driver=sqlite database='$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sql
 
 Unknown
 
-<p><i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 10:57:47 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/db/drivers/dbf/grass-dbf.html b/db/drivers/dbf/grass-dbf.html
index c1459b5..45b5ac7 100644
--- a/db/drivers/dbf/grass-dbf.html
+++ b/db/drivers/dbf/grass-dbf.html
@@ -128,4 +128,4 @@ column names on the fly.
 </em>
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:28:15 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/db/drivers/mysql/grass-mesql.html b/db/drivers/mysql/grass-mesql.html
index 98ef6f7..4699a7c 100644
--- a/db/drivers/mysql/grass-mesql.html
+++ b/db/drivers/mysql/grass-mesql.html
@@ -79,7 +79,7 @@ as part of a project for <a href="http://www.atac.roma.it/">ATAC</a>.
 Radim Blazek
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:09:22 +0200 (Sun, 20 Apr 2014) $</i>
 
 <hr class="header">
 <p><a href="index.html">Main index</a> - <a href="database.html">Database index</a> - <a href="topics.html">Topics index</a> - <a href="keywords.html">Keywords Index</a> - <a href="full_index.html">Full index</a></p>
diff --git a/db/drivers/mysql/grass-mysql.html b/db/drivers/mysql/grass-mysql.html
index 284563e..c67f6f8 100644
--- a/db/drivers/mysql/grass-mysql.html
+++ b/db/drivers/mysql/grass-mysql.html
@@ -116,4 +116,4 @@ as part of a project for <a href="http://www.atac.roma.it/">ATAC</a>.
 Radim Blazek
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:28:15 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/db/drivers/odbc/grass-odbc.html b/db/drivers/odbc/grass-odbc.html
index 90101b6..59593ce 100644
--- a/db/drivers/odbc/grass-odbc.html
+++ b/db/drivers/odbc/grass-odbc.html
@@ -166,4 +166,4 @@ which should print the database connection through ODBC to the defined RDBMS.
 </em>
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:28:15 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/db/drivers/ogr/grass-ogr.html b/db/drivers/ogr/grass-ogr.html
index 406c509..04c0edb 100644
--- a/db/drivers/ogr/grass-ogr.html
+++ b/db/drivers/ogr/grass-ogr.html
@@ -15,4 +15,4 @@ by <em><a href="v.external.html">v.external</a></em>.
 </em>
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:28:15 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/db/drivers/postgres/dbdriver.h b/db/drivers/postgres/dbdriver.h
index 41d53ee..2a1f670 100644
--- a/db/drivers/postgres/dbdriver.h
+++ b/db/drivers/postgres/dbdriver.h
@@ -8,6 +8,8 @@ db_driver_create_table = db__driver_create_table;\
 db_driver_close_cursor = db__driver_close_cursor;\
 db_driver_open_database = db__driver_open_database;\
 db_driver_close_database = db__driver_close_database;\
+db_driver_create_database = db__driver_create_database;\
+db_driver_delete_database = db__driver_delete_database;\
 db_driver_describe_table = db__driver_describe_table;\
 db_driver_init = db__driver_init;\
 db_driver_finish = db__driver_finish;\
@@ -21,6 +23,7 @@ db_driver_list_databases = db__driver_list_databases;\
 db_driver_list_tables = db__driver_list_tables;\
 db_driver_grant_on_table = db__driver_grant_on_table;\
 db_driver_open_select_cursor = db__driver_open_select_cursor;\
+db_driver_drop_table = db__driver_drop_table;\
 }while(0)
 
 #endif
diff --git a/db/drivers/postgres/grass-pg.html b/db/drivers/postgres/grass-pg.html
index d5e342c..0ee894c 100644
--- a/db/drivers/postgres/grass-pg.html
+++ b/db/drivers/postgres/grass-pg.html
@@ -133,4 +133,4 @@ driver documentation</a></li>
 </ul>
 
 <p>
-<i>Last changed: $Date: 2015-11-24 09:08:30 +0100 (Tue, 24 Nov 2015) $</i>
+<i>Last changed: $Date: 2015-11-24 09:07:58 +0100 (Tue, 24 Nov 2015) $</i>
diff --git a/db/drivers/postgres/table.c b/db/drivers/postgres/table.c
new file mode 100644
index 0000000..0409516
--- /dev/null
+++ b/db/drivers/postgres/table.c
@@ -0,0 +1,44 @@
+/*!
+ * \file table.c
+ *
+ * \brief Low level drop table function.
+ *
+ * This program is free software under the GNU General Public License
+ * (>=v2). Read the file COPYING that comes with GRASS for details.
+ *
+ * \author Martin Landa <landa.martin gmail.com>
+ *
+ * \date 2015
+ */
+
+#include <grass/gis.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+#include "globals.h"
+#include "proto.h"
+
+/*!
+ * \brief Low level driver drop table from database.
+ *
+ * \param name table name to drop
+ * \return DB_FAILED on error; DB_OK on success
+ */
+int db__driver_drop_table(dbString *name)
+{
+    PGresult *res;
+    char cmd[DB_SQL_MAX];
+
+    sprintf(cmd, "DROP TABLE %s", db_get_string(name));
+        
+    res = PQexec(pg_conn, cmd);
+
+    if (!res || PQresultStatus(res) != PGRES_COMMAND_OK) {
+	db_d_append_error("%s\n%s",
+			  _("Unable to execute():"),
+			  PQerrorMessage(pg_conn));
+	db_d_report_error();
+	return DB_FAILED;
+    }
+
+    return DB_OK;
+}
diff --git a/db/drivers/sqlite/db.c b/db/drivers/sqlite/db.c
index a0a4c1b..2fac449 100644
--- a/db/drivers/sqlite/db.c
+++ b/db/drivers/sqlite/db.c
@@ -111,6 +111,9 @@ int db__driver_open_database(dbHandle * handle)
 	return DB_FAILED;
     }
 
+    /* enable loading of extensions */
+    sqlite3_enable_load_extension(sqlite, 1);
+
     /* set the sqlite busy handler */
     sqlite3_busy_handler(sqlite, sqlite_busy_callback, NULL);
 
diff --git a/db/drivers/sqlite/dbdriver.h b/db/drivers/sqlite/dbdriver.h
index 41a8e52..e02952e 100644
--- a/db/drivers/sqlite/dbdriver.h
+++ b/db/drivers/sqlite/dbdriver.h
@@ -8,6 +8,8 @@ db_driver_create_table = db__driver_create_table;\
 db_driver_close_cursor = db__driver_close_cursor;\
 db_driver_open_database = db__driver_open_database;\
 db_driver_close_database = db__driver_close_database;\
+db_driver_create_database = db__driver_create_database;\
+db_driver_delete_database = db__driver_delete_database;\
 db_driver_describe_table = db__driver_describe_table;\
 db_driver_init = db__driver_init;\
 db_driver_finish = db__driver_finish;\
@@ -17,8 +19,10 @@ db_driver_commit_transaction = db__driver_commit_transaction;\
 db_driver_fetch = db__driver_fetch;\
 db_driver_get_num_rows = db__driver_get_num_rows;\
 db_driver_create_index = db__driver_create_index;\
+db_driver_list_databases = db__driver_list_databases;\
 db_driver_list_tables = db__driver_list_tables;\
 db_driver_open_select_cursor = db__driver_open_select_cursor;\
+db_driver_drop_table = db__driver_drop_table;\
 }while(0)
 
 #endif
diff --git a/db/drivers/sqlite/grass-sqlite.html b/db/drivers/sqlite/grass-sqlite.html
index cb28f57..ca244c5 100644
--- a/db/drivers/sqlite/grass-sqlite.html
+++ b/db/drivers/sqlite/grass-sqlite.html
@@ -78,4 +78,4 @@ echo "
 </em>
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:28:15 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/db/drivers/sqlite/table.c b/db/drivers/sqlite/table.c
new file mode 100644
index 0000000..815ae6b
--- /dev/null
+++ b/db/drivers/sqlite/table.c
@@ -0,0 +1,44 @@
+/*!
+ * \file table.c
+ *
+ * \brief Low level drop table function.
+ *
+ * This program is free software under the GNU General Public License
+ * (>=v2). Read the file COPYING that comes with GRASS for details.
+ *
+ * \author Martin Landa <landa.martin gmail.com>
+ *
+ * \date 2015
+ */
+
+#include <grass/gis.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+#include "globals.h"
+#include "proto.h"
+
+/*!
+ * \brief Low level driver drop table from database.
+ *
+ * \param name table name to drop
+ * \return DB_FAILED on error; DB_OK on success
+ */
+int db__driver_drop_table(dbString *name)
+{
+    int ret;
+    char cmd[DB_SQL_MAX];
+
+    sprintf(cmd, "DROP TABLE %s", db_get_string(name));
+        
+    ret = sqlite3_exec(sqlite, cmd, NULL, NULL, NULL);
+
+    if (ret != SQLITE_OK) {
+	db_d_append_error("%s\n%s",
+			  _("Error in sqlite3_exec():"),
+			  (char *)sqlite3_errmsg(sqlite));
+	db_d_report_error();
+	return DB_FAILED;
+    }
+
+    return DB_OK;
+}
diff --git a/display/Makefile b/display/Makefile
index 426d183..990348c 100644
--- a/display/Makefile
+++ b/display/Makefile
@@ -18,6 +18,7 @@ SUBDIRS = \
 	d.info \
 	d.labels \
 	d.legend \
+	d.legend.vect \
 	d.linegraph \
 	d.mon \
 	d.northarrow \
diff --git a/display/d.barscale/draw_scale.c b/display/d.barscale/draw_scale.c
index 786463a..68056c1 100644
--- a/display/d.barscale/draw_scale.c
+++ b/display/d.barscale/draw_scale.c
@@ -4,6 +4,8 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <stdlib.h>
+#include <math.h>
 #include <grass/gis.h>
 #include <grass/display.h>
 #include <grass/symbol.h>
@@ -16,60 +18,60 @@
 /* declare variables */
 static const struct scale
 {
-    char *name;
+    char *symbol;
     double size;
     double limit;
-    int seg;
 } all_scales[2][NUMSCALES] = {
     {
-	/* meters */
-	{"", 0., 2., 10},
-	{"1 meter", 1., 7., 10},
-	{"5 meters", 5., 20., 5},
-	{"10 meters", 10., 70., 10},
-	{"50 meters", 50., 200., 5},
-	{"100 meters", 100., 700., 10},
-	{"500 meters", 500., 2000., 5},
-	{"1 km", 1000., 7000., 10},
-	{"5 km", 5000., 20000., 5},
-	{"10 km", 10000., 70000., 10},
-	{"50 km", 50000., 200000., 5},
-	{"100 km", 100000., 700000., 10},
-	{"500 km", 500000., 2000000., 5},
-	{"1000 km", 1000000., 7000000., 10},
-	{"5000 km", 5000000., 20000000., 5},
-	{"10000 km", 10000000., 70000000., 10}
-    },
-    {   /* feet/miles */
-	{"", 0.000, 1., 10},
-	{"1 foot", 0.305, 2., 10},
-	{"5 feet", 1.524, 10., 5},
-	{"10 feet", 3.048, 20., 10},
-	{"50 feet", 15.240, 100., 5},
-	{"100 feet", 30.480, 200., 10},
-	{"500 feet", 152.400, 1000., 5},
-	{"1000 feet", 304.800, 2000., 10},
-	{"1 mile", 1609.344, 10000., 5},
-	{"5 miles", 8046.720, 20000., 5},
-	{"10 miles", 16093.440, 100000., 10},
-	{"50 miles", 80467.200, 200000., 5},
-	{"100 miles", 160934.400, 1000000., 10},
-	{"500 miles", 804672.000, 2000000., 5},
-	{"1000 miles", 1609344.000, 10000000., 10},
-	{"5000 miles", 8046720.000, 20000000., 5},
-    }
+        /* meters */
+        {
+        "", 0., 2.}, {
+        "1 m", 1., 7.}, {
+        "5 m", 5., 20.}, {
+        "10 m", 10., 70.}, {
+        "50 m", 50., 200.}, {
+        "100 m", 100., 700.}, {
+        "500 m", 500., 2000.}, {
+        "1 km", 1000., 7000.}, {
+        "5 km", 5000., 20000.}, {
+        "10 km", 10000., 70000.}, {
+        "50 km", 50000., 200000.}, {
+        "100 km", 100000., 700000.}, {
+        "500 km", 500000., 2000000.}, {
+        "1000 km", 1000000., 7000000.}, {
+        "5000 km", 5000000., 20000000.}, {
+        "10000 km", 10000000., 70000000.}
+    }, {
+        /* feet/miles */
+        {
+        "", 0.000, 1.}, {
+        "1 ft", 0.305, 2.}, {
+        "5 ft", 1.524, 10.}, {
+        "10 ft", 3.048, 20.}, {
+        "50 ft", 15.240, 100.}, {
+        "100 ft", 30.480, 200.}, {
+        "500 ft", 152.400, 1000.}, {
+        "1000 ft", 304.800, 2000.}, {
+        "1 mi", 1609.344, 10000.}, {
+        "5 mi", 8046.720, 20000.}, {
+        "10 mi", 16093.440, 100000.}, {
+        "50 mi", 80467.200, 200000.}, {
+        "100 mi", 160934.400, 1000000.}, {
+        "500 mi", 804672.000, 2000000.}, {
+        "1000 mi", 1609344.000, 10000000.}, {
+        "5000 mi", 8046720.000, 20000000.},}
 };
 
-int draw_scale(double east, double north, int style, int text_posn,
-	       double fontsize)
+int draw_scale(double east, double north, int length, int seg, int units,
+               char *label_cstm, int style, int text_posn, double fontsize)
 {
     double meters;
     double line_len;
     int i, incr;
     double x_pos, y_pos;
     double t, b, l, r;
-    double pt, pb, pl, pr; /* background box */
-    double tt, tb, tl, tr; /* text box*/
+    double pt, pb, pl, pr;      /* background box */
+    double tt, tb, tl, tr;      /* text box */
     double xarr[5], yarr[5];
     double seg_len;
     const struct scale *scales = all_scales[use_feet];
@@ -78,11 +80,13 @@ int draw_scale(double east, double north, int style, int text_posn,
     int R, G, B;
     double x0, y0;
     double symbol_size;
+    char *label;
+    double size;
 
 
     /* Establish text size */
     if (fontsize > 0)
-	D_text_size(fontsize, fontsize);
+        D_text_size(fontsize, fontsize);
 
     D_setup_unity(0);
     D_get_src(&t, &b, &l, &r);
@@ -91,537 +95,588 @@ int draw_scale(double east, double north, int style, int text_posn,
     y_pos = t + (int)((100. - north) * (b - t) / 100.);
 
 
-    D_setup(0); /* back to regular coordinate settings */
+    D_setup(0);                 /* back to regular coordinate settings */
     meters = D_get_u_east() - D_get_u_west();
     meters *= G_database_units_to_meters_factor();
 
-    /* find the right scale */
-    for (incr = 0; incr < NUMSCALES; incr++) {
-	if (meters <= scales[incr].limit)
-	    break;
-    }
+    /* find the right scale only if length is not given by user(length=0) */
+    if (length == 0) {
+        for (incr = 0; incr < NUMSCALES; incr++) {
+            if (meters <= scales[incr].limit)
+                break;
+        }
 
-    /* region is too small to draw anything. ever reached? */
-    if (!incr)
-	return -1;
+        /* region is too small to draw anything. ever reached? */
+        if (!incr)
+            return -1;
 
-    /* beyond the maximum just make the longest scale narrower */
-    if (incr >= NUMSCALES)
-	incr = NUMSCALES - 1;
+        /* beyond the maximum just make the longest scale narrower */
+        if (incr >= NUMSCALES)
+            incr = NUMSCALES - 1;
 
-    line_len = D_get_u_to_d_xconv() * scales[incr].size
-	/ G_database_units_to_meters_factor();
+        label = scales[incr].symbol;
+        size = scales[incr].size;
+    }
+    /* length given by user */
+    else {
+        label = G_malloc(GNAME_MAX);
+        size = length / G_meters_to_units_factor(units);
+        sprintf(label, "%d %s", length, label_cstm);
+    }
+
+    line_len = D_get_u_to_d_xconv() * size
+        / G_database_units_to_meters_factor();
 
-    seg_len = line_len / scales[incr].seg;
+    seg_len = line_len / seg;
     /* work around round off */
-    line_len = seg_len * scales[incr].seg;
+    line_len = seg_len * seg;
 
     D_setup_unity(0);
 
     if (do_background) {
-	/* Blank out area with background color */
-	D_get_text_box(scales[incr].name, &tt, &tb, &tl, &tr);
-
-	if (text_posn == TEXT_OVER) {
-	    pr = x_pos + 35 + line_len;
-	    pl = x_pos + 0;
-	    pt = y_pos + tb - 5;
-	    pb = y_pos + 30;
-	    if (style != STYLE_CLASSIC_BAR && style != STYLE_THIN_WITH_ENDS)
-		pl += 15;
-	    if (style == STYLE_TICKS_DOWN)
-		pb += 12;
-	}
-	if (text_posn == TEXT_UNDER) {
-	    pr = x_pos + 35 + line_len;
-	    pl = x_pos + 0;
-	    pt = y_pos + 0;
-	    pb = y_pos + 30 - tb + 5;
-	    if (style != STYLE_CLASSIC_BAR && style != STYLE_THIN_WITH_ENDS)
-		pl += 15;
-	    if (style == STYLE_TICKS_UP)
-		pt -= 12;
-	}
-	else if (text_posn == TEXT_RIGHT){
-	    pr = x_pos + 35 + line_len + tr + 5;
-	    pl = x_pos + 0;
-	    pt = y_pos + 0;
-	    pb = y_pos + 30;
-	    if (style == STYLE_TICKS_UP) {
-		pt -= 12;
-		pb -= 6;
-		pl += 15;
-	    }
-	    if (style == STYLE_TICKS_DOWN) {
-		pt += 4;
-		pb += 12;
-		pl += 15;
-	    }
-	}
-	else if (text_posn == TEXT_LEFT) {
-	    pr = x_pos + 35 + line_len;
-	    pl = x_pos - tr - 13;
-	    pt = y_pos + 0;
-	    pb = y_pos + 30;
-	    if (style == STYLE_TICKS_UP) {
-		pt -= 12;
-		pb -= 4;
-	    }
-	    if (style == STYLE_TICKS_DOWN) {
-		pt += 3;
-		pb += 11;
-	    }
-	}
-
-	if (fontsize < 0) {  /* no text */
-	    switch (style) {
-	    case STYLE_CLASSIC_BAR:
-	    case STYLE_THIN_WITH_ENDS:
-		pr = x_pos + 35 + line_len;
-		pl = x_pos + 0;
-		pt = y_pos + 0;
-		pb = y_pos + 30;
-		break;
-	    case STYLE_PART_CHECKER:
-	    case STYLE_FULL_CHECKER:
-	    case STYLE_MIXED_CHECKER:
-	    case STYLE_TAIL_CHECKER:
-	    case STYLE_SOLID_BAR:
-	    case STYLE_HOLLOW_BAR:
-	    case STYLE_TICKS_BOTH:
-	    case STYLE_ARROW_ENDS:
-		pr = x_pos + 35 + line_len;
-		pl = x_pos + 15;
-		pt = y_pos + 0;
-		pb = y_pos + 30;
-		break;
-	    case STYLE_TICKS_UP:
-		pr = x_pos + 35 + line_len;
-		pl = x_pos + 15;
-		pt = y_pos - 12;
-		pb = y_pos + 25;
-		break;
-	    case STYLE_TICKS_DOWN:
-		pr = x_pos + 35 + line_len;
-		pl = x_pos + 15;
-		pt = y_pos + 3;
-		pb = y_pos + 40;
-		break;
-	    default:
-		G_fatal_error(_("Programmer error"));
-	    }
-	}
-
-	/* keep it on the screen */
-	if (pt < t)
-	    pt = t;
-	if (pb > b)
-	    pb = b;
-	if (pl < l)
-	    pl = l;
-	if (pr > r)
-	    pr = r;
-
-	D_use_color(bg_color);
-	D_box_abs(pl, pt, pr, pb);
+        /* Blank out area with background color */
+        D_get_text_box(label, &tt, &tb, &tl, &tr);
+
+        if (text_posn == TEXT_OVER) {
+            pr = x_pos + 35 + line_len;
+            pl = x_pos + 0;
+            pt = y_pos + tb - 5;
+            pb = y_pos + 30;
+            if (style != STYLE_CLASSIC_BAR && style != STYLE_THIN_WITH_ENDS)
+                pl += 15;
+            if (style == STYLE_TICKS_DOWN)
+                pb += 12;
+        }
+        if (text_posn == TEXT_UNDER) {
+            pr = x_pos + 35 + line_len;
+            pl = x_pos + 0;
+            pt = y_pos + 0;
+            pb = y_pos + 30 - tb + 5;
+            if (style != STYLE_CLASSIC_BAR && style != STYLE_THIN_WITH_ENDS)
+                pl += 15;
+            if (style == STYLE_TICKS_UP)
+                pt -= 12;
+        }
+        else if (text_posn == TEXT_RIGHT) {
+            pr = x_pos + 35 + line_len + tr + 5;
+            pl = x_pos + 0;
+            pt = y_pos + 0;
+            pb = y_pos + 30;
+            if (style == STYLE_TICKS_UP) {
+                pt -= 12;
+                pb -= 6;
+                pl += 15;
+            }
+            if (style == STYLE_TICKS_DOWN) {
+                pt += 4;
+                pb += 12;
+                pl += 15;
+            }
+        }
+        else if (text_posn == TEXT_LEFT) {
+            pr = x_pos + 35 + line_len;
+            pl = x_pos - tr - 13;
+            pt = y_pos + 0;
+            pb = y_pos + 30;
+            if (style == STYLE_TICKS_UP) {
+                pt -= 12;
+                pb -= 4;
+            }
+            if (style == STYLE_TICKS_DOWN) {
+                pt += 3;
+                pb += 11;
+            }
+        }
+
+        if (fontsize < 0) {     /* no text */
+            switch (style) {
+            case STYLE_CLASSIC_BAR:
+            case STYLE_THIN_WITH_ENDS:
+                pr = x_pos + 35 + line_len;
+                pl = x_pos + 0;
+                pt = y_pos + 0;
+                pb = y_pos + 30;
+                break;
+            case STYLE_PART_CHECKER:
+            case STYLE_FULL_CHECKER:
+            case STYLE_MIXED_CHECKER:
+            case STYLE_TAIL_CHECKER:
+            case STYLE_SOLID_BAR:
+            case STYLE_HOLLOW_BAR:
+            case STYLE_TICKS_BOTH:
+            case STYLE_ARROW_ENDS:
+                pr = x_pos + 35 + line_len;
+                pl = x_pos + 15;
+                pt = y_pos + 0;
+                pb = y_pos + 30;
+                break;
+            case STYLE_TICKS_UP:
+                pr = x_pos + 35 + line_len;
+                pl = x_pos + 15;
+                pt = y_pos - 12;
+                pb = y_pos + 25;
+                break;
+            case STYLE_TICKS_DOWN:
+                pr = x_pos + 35 + line_len;
+                pl = x_pos + 15;
+                pt = y_pos + 3;
+                pb = y_pos + 40;
+                break;
+            default:
+                G_fatal_error(_("Programmer error"));
+            }
+        }
+
+        /* keep it on the screen */
+        if (pt < t)
+            pt = t;
+        if (pb > b)
+            pb = b;
+        if (pl < l)
+            pl = l;
+        if (pr > r)
+            pr = r;
+
+        D_use_color(bg_color);
+        D_box_abs(pl, pt, pr, pb);
     }
 
     /* Draw the small N with an arrow through it on the left side for the classic barscale styles */
     D_use_color(fg_color);
-    if (style == STYLE_CLASSIC_BAR || style == STYLE_THIN_WITH_ENDS) {
-	D_begin();
-	D_move_abs(x_pos + 5, y_pos + 20);
-	D_cont_rel(0, -10);
-	D_cont_rel(10, 10);
-	D_cont_rel(0, -10);
-	D_move_rel(-5, 14);
-	D_cont_rel(0, -17);
-	D_cont_rel(-2.5, -0);
-	D_cont_rel(2.5, -4);
-	D_cont_rel(2.5, 4);
-	D_cont_rel(-2.5, -0);
-	D_close();
-	D_end();
-	D_stroke();
+    if (north_arrow) {
+        D_begin();
+        D_move_abs(x_pos + 5, y_pos + 20);
+        D_cont_rel(0, -10);
+        D_cont_rel(10, 10);
+        D_cont_rel(0, -10);
+        D_move_rel(-5, 14);
+        D_cont_rel(0, -17);
+        D_cont_rel(-2.5, -0);
+        D_cont_rel(2.5, -4);
+        D_cont_rel(2.5, 4);
+        D_cont_rel(-2.5, -0);
+        D_close();
+        D_end();
+        D_stroke();
     }
 
     /* The end points of the center-line are (x_pos + 25, y_pos + 15)
-	and (x_pos + 25 + line_len, y_pos + 15) */
+       and (x_pos + 25 + line_len, y_pos + 15) */
     if (style == STYLE_CLASSIC_BAR) {
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 17);
-	/* actual width is line_len-1+1=line_len and height is 4+1=5 */
-	D_cont_rel(line_len - 1, 0);
-	D_cont_rel(0, -4);
-	D_cont_rel(-line_len + 1, 0);
-	D_cont_rel(0, 4);
-	D_end();
-	D_close();
-	D_stroke();
-
-	for (i = 1; i <= scales[incr].seg; i += 2) {
-	    /* width is seg_len and height is 5 */
-	    D_box_rel(seg_len, -4);
-	    D_pos_rel(seg_len * 2, 0);
-	}
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 17);
+        /* actual width is line_len-1+1=line_len and height is 4+1=5 */
+        D_cont_rel(line_len - 1, 0);
+        D_cont_rel(0, -4);
+        D_cont_rel(-line_len + 1, 0);
+        D_cont_rel(0, 4);
+        D_end();
+        D_close();
+        D_stroke();
+
+        for (i = 1; i <= seg; i += 2) {
+            /* width is seg_len and height is 5 */
+            D_box_rel(seg_len, -4);
+            D_pos_rel(seg_len * 2, 0);
+        }
     }
     else if (style == STYLE_THIN_WITH_ENDS) {
-	/* draw simple line scale */
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 5);
-	D_cont_abs(x_pos + 25, y_pos + 25);
-	D_move_abs(x_pos + 25, y_pos + 15);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-	D_move_abs(x_pos + 25 + line_len, y_pos + 5);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 25);
-	D_close();
-	D_end();  /* no-op? */
+        /* draw simple line scale */
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 5);
+        D_cont_abs(x_pos + 25, y_pos + 25);
+        D_move_abs(x_pos + 25, y_pos + 15);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+        D_move_abs(x_pos + 25 + line_len, y_pos + 5);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 25);
+        D_close();
+        D_end();                /* no-op? */
     }
     else if (style == STYLE_SOLID_BAR) {
-	/* draw simple solid-bar scale */
-	xarr[0] = 0;
-	yarr[0] = +8;
-	xarr[1] = line_len;
-	yarr[1] = 0;
-	xarr[2] = 0;
-	yarr[2] = -8;
-	xarr[3] = -line_len;
-	yarr[3] = 0;
-	xarr[4] = 0;
-	yarr[4] = +8;
-
-	D_move_abs(x_pos + 25, y_pos + 15 - 4);
-	D_polygon_rel(xarr, yarr, 5);
+        /* draw simple solid-bar scale */
+        xarr[0] = 0;
+        yarr[0] = +8;
+        xarr[1] = line_len;
+        yarr[1] = 0;
+        xarr[2] = 0;
+        yarr[2] = -8;
+        xarr[3] = -line_len;
+        yarr[3] = 0;
+        xarr[4] = 0;
+        yarr[4] = +8;
+
+        D_move_abs(x_pos + 25, y_pos + 15 - 4);
+        D_polygon_rel(xarr, yarr, 5);
     }
     else if (style == STYLE_HOLLOW_BAR) {
-	/* draw hollow-bar scale */
-	D_use_color(fg_color);
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15 - 4);
-	D_cont_rel(0, +8);
-	D_cont_rel(line_len, 0);
-	D_cont_rel(0, -8);
-	D_cont_rel(-line_len, 0);
-	D_cont_rel(0, +8);
-	D_close();
-	D_end();  /* no-op? */
+        /* draw hollow-bar scale */
+        D_use_color(fg_color);
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15 - 4);
+        D_cont_rel(0, +8);
+        D_cont_rel(line_len, 0);
+        D_cont_rel(0, -8);
+        D_cont_rel(-line_len, 0);
+        D_cont_rel(0, +8);
+        D_close();
+        D_end();                /* no-op? */
     }
     else if (style == STYLE_FULL_CHECKER) {
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15 + 6);
-	/* actual width is line_len-1+1=line_len and height is 7+1=8 */
-	D_cont_rel(line_len, 0);
-	D_cont_rel(0, -12);
-	D_cont_rel(-line_len, 0);
-	D_cont_rel(0, +12);
-	D_close();
-	D_end();  /* no-op? */
-	D_stroke();
-
-	D_pos_rel(0, -6);
-	for (i = 1; i <= scales[incr].seg; i++) {
-	    xarr[0] = 0;		yarr[0] = 0;
-	    xarr[1] = seg_len;	yarr[1] = 0;
-	    xarr[2] = 0;		yarr[2] = (i % 2 ? -6 : 6);
-	    xarr[3] = -seg_len;	yarr[3] = 0;
-	    xarr[4] = 0;		yarr[4] = (i % 2 ? 6 : -6);
-	    /* width is seg_len and height is 6 */
-	    D_polygon_rel(xarr, yarr, 5);
-	    D_pos_rel(seg_len, 0);
-	}
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15 + 6);
+        /* actual width is line_len-1+1=line_len and height is 7+1=8 */
+        D_cont_rel(line_len, 0);
+        D_cont_rel(0, -12);
+        D_cont_rel(-line_len, 0);
+        D_cont_rel(0, +12);
+        D_close();
+        D_end();                /* no-op? */
+        D_stroke();
+
+        D_pos_rel(0, -6);
+        for (i = 1; i <= seg; i++) {
+            xarr[0] = 0;
+            yarr[0] = 0;
+            xarr[1] = seg_len;
+            yarr[1] = 0;
+            xarr[2] = 0;
+            yarr[2] = (i % 2 ? -6 : 6);
+            xarr[3] = -seg_len;
+            yarr[3] = 0;
+            xarr[4] = 0;
+            yarr[4] = (i % 2 ? 6 : -6);
+            /* width is seg_len and height is 6 */
+            D_polygon_rel(xarr, yarr, 5);
+            D_pos_rel(seg_len, 0);
+        }
     }
     else if (style == STYLE_PART_CHECKER) {
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15 + 6);
-	/* actual width is line_len-1+1=line_len and height is 7+1=8 */
-	D_cont_rel(line_len, 0);
-	D_cont_rel(0, -12);
-	D_cont_rel(-line_len, 0);
-	D_cont_rel(0, +12);
-	D_close();
-	D_end();  /* no-op? */
-	D_stroke();
-
-	D_pos_rel(0, -6);
-	for (i = 1; i <= scales[incr].seg; i++) {
-	    if (i <= (scales[incr].seg == 5 ? 2 : 4)) {
-		xarr[0] = 0;		yarr[0] = 0;
-		xarr[1] = seg_len/2.;	yarr[1] = 0;
-		xarr[2] = 0;		yarr[2] = -6;
-		xarr[3] = -seg_len/2.;	yarr[3] = 0;
-		xarr[4] = 0;		yarr[4] = 6;
-		D_polygon_rel(xarr, yarr, 5);
-		D_pos_rel(seg_len/2., 0);
-
-		xarr[0] = 0;		yarr[0] = 0;
-		xarr[1] = seg_len/2.;	yarr[1] = 0;
-		xarr[2] = 0;		yarr[2] = 6;
-		xarr[3] = -seg_len/2.;	yarr[3] = 0;
-		xarr[4] = 0;		yarr[4] = -6;
-		D_polygon_rel(xarr, yarr, 5);
-		D_pos_rel(seg_len/2., 0);
-	    }
-	    else {
-		xarr[0] = 0;	    yarr[0] = 0;
-		xarr[1] = seg_len;  yarr[1] = 0;
-		xarr[2] = 0;	    yarr[2] = (i % 2 ? -6 : 6);
-		xarr[3] = -seg_len; yarr[3] = 0;
-		xarr[4] = 0;	    yarr[4] = (i % 2 ? 6 : -6);
-		/* width is seg_len and height is 6 */
-		D_polygon_rel(xarr, yarr, 5);
-		D_pos_rel(seg_len, 0);
-	    }
-	}
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15 + 6);
+        /* actual width is line_len-1+1=line_len and height is 7+1=8 */
+        D_cont_rel(line_len, 0);
+        D_cont_rel(0, -12);
+        D_cont_rel(-line_len, 0);
+        D_cont_rel(0, +12);
+        D_close();
+        D_end();                /* no-op? */
+        D_stroke();
+
+        D_pos_rel(0, -6);
+        for (i = 1; i <= seg; i++) {
+            if (i <= (seg == 5 ? 2 : 4)) {
+                xarr[0] = 0;
+                yarr[0] = 0;
+                xarr[1] = seg_len / 2.;
+                yarr[1] = 0;
+                xarr[2] = 0;
+                yarr[2] = -6;
+                xarr[3] = -seg_len / 2.;
+                yarr[3] = 0;
+                xarr[4] = 0;
+                yarr[4] = 6;
+                D_polygon_rel(xarr, yarr, 5);
+                D_pos_rel(seg_len / 2., 0);
+
+                xarr[0] = 0;
+                yarr[0] = 0;
+                xarr[1] = seg_len / 2.;
+                yarr[1] = 0;
+                xarr[2] = 0;
+                yarr[2] = 6;
+                xarr[3] = -seg_len / 2.;
+                yarr[3] = 0;
+                xarr[4] = 0;
+                yarr[4] = -6;
+                D_polygon_rel(xarr, yarr, 5);
+                D_pos_rel(seg_len / 2., 0);
+            }
+            else {
+                xarr[0] = 0;
+                yarr[0] = 0;
+                xarr[1] = seg_len;
+                yarr[1] = 0;
+                xarr[2] = 0;
+                yarr[2] = (i % 2 ? -6 : 6);
+                xarr[3] = -seg_len;
+                yarr[3] = 0;
+                xarr[4] = 0;
+                yarr[4] = (i % 2 ? 6 : -6);
+                /* width is seg_len and height is 6 */
+                D_polygon_rel(xarr, yarr, 5);
+                D_pos_rel(seg_len, 0);
+            }
+        }
     }
     else if (style == STYLE_MIXED_CHECKER) {
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15 + 6);
-	/* actual width is line_len-1+1=line_len and height is 7+1=8 */
-	D_cont_rel(line_len, 0);
-	D_cont_rel(0, -12);
-	D_cont_rel(-line_len, 0);
-	D_cont_rel(0, +12);
-
-	/* horizontal line across the middle to separate white from white */
-	D_move_abs(x_pos + 25, y_pos + 15);
-	D_cont_rel(line_len, 0);
-	D_end();  /* no-op? */
-	D_close();
-	D_stroke();
-
-	D_move_abs(x_pos + 25, y_pos + 15);
-
-	for (i = 1; i <= scales[incr].seg; i++) {
-	    if (i <= (scales[incr].seg == 5 ? 2 : 6)) {
-		if (i % 2 == 0) {
-		    xarr[0] = 0;	yarr[0] = 0;
-		    xarr[1] = seg_len;	yarr[1] = 0;
-		    xarr[2] = 0;	yarr[2] = -6;
-		    xarr[3] = -seg_len; yarr[3] = 0;
-		    xarr[4] = 0;	yarr[4] = +6;
-		    D_polygon_rel(xarr, yarr, 5);
-		}
-
-		xarr[0] = 0;		yarr[0] = 0;
-		xarr[1] = seg_len/2.;	yarr[1] = 0;
-		xarr[2] = 0;		yarr[2] = +6;
-		xarr[3] = -seg_len/2.;	yarr[3] = 0;
-		xarr[4] = 0;		yarr[4] = -6;
-		D_pos_rel(seg_len/2., 0);
-		D_polygon_rel(xarr, yarr, 5);
-		D_pos_rel(seg_len/2., 0);
-	    }
-	    else {
-		xarr[0] = 0;	    yarr[0] = 0;
-		xarr[1] = seg_len;  yarr[1] = 0;
-		xarr[2] = 0;	    yarr[2] = (i % 2 ? 6 : +6);
-		xarr[3] = -seg_len; yarr[3] = 0;
-		xarr[4] = 0;	    yarr[4] = (i % 2 ? -6 : 6);
-		/* width is seg_len and height is 6 */
-		D_polygon_rel(xarr, yarr, 5);
-		D_pos_rel(seg_len, -6);
-	    }
-	}
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15 + 6);
+        /* actual width is line_len-1+1=line_len and height is 7+1=8 */
+        D_cont_rel(line_len, 0);
+        D_cont_rel(0, -12);
+        D_cont_rel(-line_len, 0);
+        D_cont_rel(0, +12);
+
+        /* horizontal line across the middle to separate white from white */
+        D_move_abs(x_pos + 25, y_pos + 15);
+        D_cont_rel(line_len, 0);
+        D_end();                /* no-op? */
+        D_close();
+        D_stroke();
+
+        D_move_abs(x_pos + 25, y_pos + 15);
+
+        for (i = 1; i <= seg; i++) {
+            if (i <= (seg == 5 ? 2 : 6)) {
+                if (i % 2 == 0) {
+                    xarr[0] = 0;
+                    yarr[0] = 0;
+                    xarr[1] = seg_len;
+                    yarr[1] = 0;
+                    xarr[2] = 0;
+                    yarr[2] = -6;
+                    xarr[3] = -seg_len;
+                    yarr[3] = 0;
+                    xarr[4] = 0;
+                    yarr[4] = +6;
+                    D_polygon_rel(xarr, yarr, 5);
+                }
+
+                xarr[0] = 0;
+                yarr[0] = 0;
+                xarr[1] = seg_len / 2.;
+                yarr[1] = 0;
+                xarr[2] = 0;
+                yarr[2] = +6;
+                xarr[3] = -seg_len / 2.;
+                yarr[3] = 0;
+                xarr[4] = 0;
+                yarr[4] = -6;
+                D_pos_rel(seg_len / 2., 0);
+                D_polygon_rel(xarr, yarr, 5);
+                D_pos_rel(seg_len / 2., 0);
+            }
+            else {
+                xarr[0] = 0;
+                yarr[0] = 0;
+                xarr[1] = seg_len;
+                yarr[1] = 0;
+                xarr[2] = 0;
+                yarr[2] = (i % 2 ? 6 : +6);
+                xarr[3] = -seg_len;
+                yarr[3] = 0;
+                xarr[4] = 0;
+                yarr[4] = (i % 2 ? -6 : 6);
+                /* width is seg_len and height is 6 */
+                D_polygon_rel(xarr, yarr, 5);
+                D_pos_rel(seg_len, -6);
+            }
+        }
     }
     else if (style == STYLE_TAIL_CHECKER) {
-	/* first draw outside box */
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15 + 6);
-	D_cont_rel(line_len, 0);
-	D_cont_rel(0, -12);
-	D_cont_rel(-line_len, 0);
-	D_cont_rel(0, +12);
-	D_close();
-	D_end();  /* no-op? */
-	D_stroke();
-
-	D_pos_rel(0, -6);
-	for (i = 1; i <= (scales[incr].seg == 5 ? 3 : 5); i++) {
-	    /* width is seg_len and height is 6 */
-	    xarr[0] = 0;	yarr[0] = 0;
-	    xarr[1] = seg_len;  yarr[1] = 0;
-	    xarr[2] = 0;	yarr[2] = (i % 2 ? -6 : 6);
-	    xarr[3] = -seg_len; yarr[3] = 0;
-	    xarr[4] = 0;	yarr[4] = (i % 2 ? 6 : -6);
-	    D_polygon_rel(xarr, yarr, 5);
-	    D_pos_rel(seg_len, 0);
-	}
-	/* draw a vertical cross line */
-	D_begin();
-	D_move_rel(0, 6);
-	D_cont_rel(0, -12);
-	D_close();
-	D_end();  /* no-op? */
-	D_stroke();
-
-	D_pos_rel(0, 6);
-	xarr[0] = 0;
-	yarr[0] = 0;
-	xarr[1] = line_len/2.;
-	if (scales[incr].seg == 5)
-	    xarr[1] -= seg_len/2.;
-	yarr[1] = 0;
-	xarr[2] = 0;
-	yarr[2] = 6;
-	xarr[3] = -line_len/2.;
-	if (scales[incr].seg == 5)
-	    xarr[3] += seg_len/2.;
-	yarr[3] = 0;
-	xarr[4] = 0;
-	yarr[4] = -6;
-	D_polygon_rel(xarr, yarr, 5);
-	D_pos_rel(seg_len, 0);
+        /* first draw outside box */
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15 + 6);
+        D_cont_rel(line_len, 0);
+        D_cont_rel(0, -12);
+        D_cont_rel(-line_len, 0);
+        D_cont_rel(0, +12);
+        D_close();
+        D_end();                /* no-op? */
+        D_stroke();
+
+        D_pos_rel(0, -6);
+        for (i = 1; i <= (seg == 5 ? 3 : 5); i++) {
+            /* width is seg_len and height is 6 */
+            xarr[0] = 0;
+            yarr[0] = 0;
+            xarr[1] = seg_len;
+            yarr[1] = 0;
+            xarr[2] = 0;
+            yarr[2] = (i % 2 ? -6 : 6);
+            xarr[3] = -seg_len;
+            yarr[3] = 0;
+            xarr[4] = 0;
+            yarr[4] = (i % 2 ? 6 : -6);
+            D_polygon_rel(xarr, yarr, 5);
+            D_pos_rel(seg_len, 0);
+        }
+        /* draw a vertical cross line */
+        D_begin();
+        D_move_rel(0, 6);
+        D_cont_rel(0, -12);
+        D_close();
+        D_end();                /* no-op? */
+        D_stroke();
+
+        D_pos_rel(0, 6);
+        xarr[0] = 0;
+        yarr[0] = 0;
+        xarr[1] = line_len / 2.;
+        if (seg == 5)
+            xarr[1] -= seg_len / 2.;
+        yarr[1] = 0;
+        xarr[2] = 0;
+        yarr[2] = 6;
+        xarr[3] = -line_len / 2.;
+        if (seg == 5)
+            xarr[3] += seg_len / 2.;
+        yarr[3] = 0;
+        xarr[4] = 0;
+        yarr[4] = -6;
+        D_polygon_rel(xarr, yarr, 5);
+        D_pos_rel(seg_len, 0);
     }
     else if (style == STYLE_TICKS_BOTH) {
-	/* draw simple line scale with corssing ticks */
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 5);
-	D_cont_abs(x_pos + 25, y_pos + 25);
-	D_move_abs(x_pos + 25, y_pos + 15);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-	D_move_abs(x_pos + 25 + line_len, y_pos + 5);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 25);
-
-	D_move_abs(x_pos + 25, y_pos + 15);
-	D_move_rel(0, +6);
-	for (i = 0; i <= scales[incr].seg - 2; i++) {
-	    D_move_rel(seg_len, 0);
-	    D_cont_rel(0, -11); /* 5 above, on px on line, and 5 below */
-	    D_move_rel(0, +11);
-	}
-	D_end();  /* no-op? */
+        /* draw simple line scale with corssing ticks */
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 5);
+        D_cont_abs(x_pos + 25, y_pos + 25);
+        D_move_abs(x_pos + 25, y_pos + 15);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+        D_move_abs(x_pos + 25 + line_len, y_pos + 5);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 25);
+
+        D_move_abs(x_pos + 25, y_pos + 15);
+        D_move_rel(0, +6);
+        for (i = 0; i <= seg - 2; i++) {
+            D_move_rel(seg_len, 0);
+            D_cont_rel(0, -11); /* 5 above, on px on line, and 5 below */
+            D_move_rel(0, +11);
+        }
+        D_end();                /* no-op? */
     }
     else if (style == STYLE_TICKS_UP) {
-	/* draw simple line scale with up facing ticks */
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos - 2);
-	D_cont_abs(x_pos + 25, y_pos + 15);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-	D_move_abs(x_pos + 25 + line_len, y_pos - 2);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-
-	D_move_abs(x_pos + 25, y_pos + 15);
-	for (i = 0; i <= scales[incr].seg - 2; i++) {
-	    D_move_rel(seg_len, 0);
-	    D_cont_rel(0, -7); /* 5 above, on px on line, and 5 below */
-	    D_move_rel(0, +7);
-	}
-	D_end();  /* no-op? */
-	D_close();
+        /* draw simple line scale with up facing ticks */
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos - 2);
+        D_cont_abs(x_pos + 25, y_pos + 15);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+        D_move_abs(x_pos + 25 + line_len, y_pos - 2);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+
+        D_move_abs(x_pos + 25, y_pos + 15);
+        for (i = 0; i <= seg - 2; i++) {
+            D_move_rel(seg_len, 0);
+            D_cont_rel(0, -7);  /* 5 above, on px on line, and 5 below */
+            D_move_rel(0, +7);
+        }
+        D_end();                /* no-op? */
+        D_close();
     }
     else if (style == STYLE_TICKS_DOWN) {
-	/* draw simple line scale with down facing ticks */
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15 + 17);
-	D_cont_abs(x_pos + 25, y_pos + 15);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-	D_move_abs(x_pos + 25 + line_len, y_pos +15 + 17);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-
-	D_move_abs(x_pos + 25, y_pos + 15);
-	for (i = 0; i <= scales[incr].seg - 2; i++) {
-	    D_move_rel(seg_len, 0);
-	    D_cont_rel(0, +7); /* 5 above, on px on line, and 5 below */
-	    D_move_rel(0, -7);
-	}
-	D_end();  /* no-op? */
-	D_close();
+        /* draw simple line scale with down facing ticks */
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15 + 17);
+        D_cont_abs(x_pos + 25, y_pos + 15);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+        D_move_abs(x_pos + 25 + line_len, y_pos + 15 + 17);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+
+        D_move_abs(x_pos + 25, y_pos + 15);
+        for (i = 0; i <= seg - 2; i++) {
+            D_move_rel(seg_len, 0);
+            D_cont_rel(0, +7);  /* 5 above, on px on line, and 5 below */
+            D_move_rel(0, -7);
+        }
+        D_end();                /* no-op? */
+        D_close();
     }
     else if (style == STYLE_ARROW_ENDS) {
-	/* draw line scale with |<--dimension arrows-->| on the ends */
-	D_begin();
-	D_cont_abs(x_pos + 25, y_pos + 15);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-	D_end();
-
-	/* display the symbol */
-	line_color = G_malloc(sizeof(RGBA_Color));
-	fill_color = G_malloc(sizeof(RGBA_Color));
-
-	if (D_color_number_to_RGB(fg_color, &R, &G, &B) == 0)
-	    /* fall back to black on failure */
-	    G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
-	line_color->r = (unsigned char)R;
-	line_color->g = (unsigned char)G;
-	line_color->b = (unsigned char)B;
-	line_color->a = RGBA_COLOR_OPAQUE;
-
-	if (D_color_number_to_RGB(fg_color, &R, &G, &B) == 0)
-	    /* fall back to black on failure */
-	    G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
-	fill_color->r = (unsigned char)R;
-	fill_color->g = (unsigned char)G;
-	fill_color->b = (unsigned char)B;
-	fill_color->a = RGBA_COLOR_OPAQUE;
-
-	symbol_size = 12;
-
-	x0 = D_d_to_u_col(x_pos + 25);
-	y0 = D_d_to_u_row(y_pos + 15);
-	Symb = S_read("extra/dim_arrow");
-	if(!Symb)
-	    G_fatal_error(_("Could not read symbol \"%s\""), "extra/dim_arrow");
-	S_stroke(Symb, symbol_size, 0.0, 0);
-	D_symbol(Symb, x0, y0, line_color, fill_color);
-	G_free(Symb);
-
-	x0 = D_d_to_u_col(x_pos + line_len + 25);
-	y0 = D_d_to_u_row(y_pos + 15);
-	Symb = S_read("extra/dim_arrow");
-	S_stroke(Symb, symbol_size, 180., 0);
-	D_symbol(Symb, x0, y0, line_color, fill_color);
-	G_free(Symb);
-
-	G_free(line_color);
-	G_free(fill_color);
-
-	/* draw simple line between the two ends */
-	D_begin();
-	D_move_abs(x_pos + 25, y_pos + 15);
-	D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
-	D_end();  /* no-op? */
+        /* draw line scale with |<--dimension arrows-->| on the ends */
+        D_begin();
+        D_cont_abs(x_pos + 25, y_pos + 15);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+        D_end();
+
+        /* display the symbol */
+        line_color = G_malloc(sizeof(RGBA_Color));
+        fill_color = G_malloc(sizeof(RGBA_Color));
+
+        if (D_color_number_to_RGB(fg_color, &R, &G, &B) == 0)
+            /* fall back to black on failure */
+            G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
+        line_color->r = (unsigned char)R;
+        line_color->g = (unsigned char)G;
+        line_color->b = (unsigned char)B;
+        line_color->a = RGBA_COLOR_OPAQUE;
+
+        if (D_color_number_to_RGB(fg_color, &R, &G, &B) == 0)
+            /* fall back to black on failure */
+            G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
+        fill_color->r = (unsigned char)R;
+        fill_color->g = (unsigned char)G;
+        fill_color->b = (unsigned char)B;
+        fill_color->a = RGBA_COLOR_OPAQUE;
+
+        symbol_size = 12;
+
+        x0 = D_d_to_u_col(x_pos + 25);
+        y0 = D_d_to_u_row(y_pos + 15);
+        Symb = S_read("extra/dim_arrow");
+        if (!Symb)
+            G_fatal_error(_("Could not read symbol \"%s\""),
+                          "extra/dim_arrow");
+        S_stroke(Symb, symbol_size, 0.0, 0);
+        D_symbol(Symb, x0, y0, line_color, fill_color);
+        G_free(Symb);
+
+        x0 = D_d_to_u_col(x_pos + line_len + 25);
+        y0 = D_d_to_u_row(y_pos + 15);
+        Symb = S_read("extra/dim_arrow");
+        S_stroke(Symb, symbol_size, 180., 0);
+        D_symbol(Symb, x0, y0, line_color, fill_color);
+        G_free(Symb);
+
+        G_free(line_color);
+        G_free(fill_color);
+
+        /* draw simple line between the two ends */
+        D_begin();
+        D_move_abs(x_pos + 25, y_pos + 15);
+        D_cont_abs(x_pos + 25 + line_len, y_pos + 15);
+        D_end();                /* no-op? */
     }
     D_stroke();
 
 
     if (fontsize < 0)
-	return 0;
+        return 0;
 
     /* draw the distance + units text */
-    D_get_text_box(scales[incr].name, &tt, &tb, &tl, &tr);
+
+    D_get_text_box(label, &tt, &tb, &tl, &tr);
 
     if (text_posn == TEXT_OVER) {
-	D_pos_abs(x_pos + 25 + line_len / 2.
-		  - strlen(scales[incr].name) * fontsize * 0.81 / 2,
-		  y_pos);
-	D_text(scales[incr].name);
+        D_pos_abs(x_pos + 25 + line_len / 2.
+                  - strlen(label) * fontsize * 0.81 / 2, y_pos);
+        D_text(label);
     }
-    if (text_posn == TEXT_UNDER) {
-	D_pos_abs(x_pos + 25 + line_len / 2.
-		  - strlen(scales[incr].name) * fontsize * 0.81 / 2,
-		  y_pos + 43);
-	D_text(scales[incr].name);
+    else if (text_posn == TEXT_UNDER) {
+        D_pos_abs(x_pos + 25 + line_len / 2.
+                  - strlen(label) * fontsize * 0.81 / 2, y_pos + 43);
+        D_text(label);
     }
     else if (text_posn == TEXT_RIGHT) {
-	if (style == STYLE_TICKS_UP)
-	    y_pos -= 8;
-	else if (style == STYLE_TICKS_DOWN)
-	    y_pos += 9;
+        if (style == STYLE_TICKS_UP)
+            y_pos -= 8;
+        else if (style == STYLE_TICKS_DOWN)
+            y_pos += 9;
 
-	D_pos_abs(x_pos + 35 + line_len, y_pos + 20);
-	D_text(scales[incr].name);
+        D_pos_abs(x_pos + 35 + line_len, y_pos + 20);
+        D_text(label);
     }
     else if (text_posn == TEXT_LEFT) {
-	if (style == STYLE_TICKS_UP)
-	    y_pos -= 8;
-	else if (style == STYLE_TICKS_DOWN)
-	    y_pos += 9;
+        if (style == STYLE_TICKS_UP)
+            y_pos -= 8;
+        else if (style == STYLE_TICKS_DOWN)
+            y_pos += 9;
 
-	if (style == STYLE_CLASSIC_BAR || style == STYLE_THIN_WITH_ENDS)
-	    x_pos -= 13;
+        if (style == STYLE_CLASSIC_BAR || style == STYLE_THIN_WITH_ENDS)
+            x_pos -= 13;
 
-	D_pos_abs(x_pos + 5 - (tr - tl), y_pos + 20);
-	D_text(scales[incr].name);
+        D_pos_abs(x_pos + 5 - (tr - tl), y_pos + 20);
+        D_text(label);
     }
 
     return 0;
diff --git a/display/d.barscale/main.c b/display/d.barscale/main.c
index 2c6ae6d..2e1c588 100644
--- a/display/d.barscale/main.c
+++ b/display/d.barscale/main.c
@@ -1,3 +1,4 @@
+
 /****************************************************************************
  *
  * MODULE:       d.barscale
@@ -12,6 +13,7 @@
  *               Hamish Bowman <hamish_b yahoo.com>, 
  *               Jan-Oliver Wagner <jan intevation.de>
  *		 Major rewrite for GRASS 7 by Hamish Bowman, June 2013
+ *               Adam Laza <ad.laza32 at gmail.com>, GSoC 2016
  *
  * PURPOSE:      Displays a barscale on graphics monitor
  *
@@ -35,17 +37,21 @@
 int fg_color, bg_color;
 int use_feet;
 int do_background = TRUE;
+int north_arrow;
 
 int main(int argc, char **argv)
 {
     struct GModule *module;
-    struct Option *bg_color_opt, *fg_color_opt, *coords, *fsize,
-		 *barstyle, *text_placement;
-    struct Flag *feet, *no_text;
+    struct Option *bg_color_opt, *fg_color_opt, *coords, *fsize, *barstyle,
+            *text_placement, *length_opt, *segm_opt, *units_opt, *label_opt;
+    struct Flag *feet, *no_text, *n_symbol;
     struct Cell_head W;
     double east, north;
     double fontsize;
-    int bar_style, text_position;
+    int bar_style, text_position, units;
+    double length;
+    int segm;
+    char *label;
 
     /* Initialize the GIS calls */
     G_gisinit(argv[0]);
@@ -64,15 +70,20 @@ int main(int argc, char **argv)
     no_text->description = _("Draw the scale bar without text");
     no_text->guisection = _("Text");
 
+    n_symbol = G_define_flag();
+    n_symbol->key = 'n';
+    n_symbol->description = _("Display north-arrow symbol.");
+    n_symbol->guisection = _("Style");
+
     barstyle = G_define_option();
     barstyle->key = "style";
     barstyle->description = _("Type of barscale to draw");
     barstyle->options =
-	"classic,line,solid,hollow,full_checker,part_checker,mixed_checker,tail_checker,up_ticks,down_ticks,both_ticks,arrow_ends";
+        "classic,line,solid,hollow,full_checker,part_checker,mixed_checker,tail_checker,up_ticks,down_ticks,both_ticks,arrow_ends";
     barstyle->answer = "classic";
     barstyle->gisprompt = "old,barscale,barscale";
     barstyle->guisection = _("Style");
-    G_asprintf((char **) &(barstyle->descriptions), 
+    G_asprintf((char **)&(barstyle->descriptions),
                "classic;%s;"
                "line;%s;"
                "solid;%s;"
@@ -95,26 +106,52 @@ int main(int argc, char **argv)
                _("Tail checker style"),
                _("Up ticks style"),
                _("Down ticks style"),
-               _("Both ticks style"),
-               _("Arrow ends style"));
+               _("Both ticks style"), _("Arrow ends style"));
 
     coords = G_define_option();
     coords->key = "at";
     coords->key_desc = "x,y";
     coords->type = TYPE_DOUBLE;
-    coords->answer = "0.0,5.0";
+    coords->answer = "0.0,10.0";
     coords->options = "0-100";
     coords->label =
-	_("Screen coordinates of the rectangle's top-left corner");
+        _("Screen coordinates of the rectangle's top-left corner");
     coords->description = _("(0,0) is lower-left of the display frame");
 
+    length_opt = G_define_option();
+    length_opt->key = "length";
+    length_opt->key_desc = "integer";
+    length_opt->type = TYPE_INTEGER;
+    length_opt->answer = "0";
+    length_opt->options = "0-";
+    length_opt->label = _("Length of barscale in map units");
+
+    units_opt = G_define_option();
+    units_opt->key = "units";
+    units_opt->description = _("Barscale units to display");
+    units_opt->options = "meters, kilometers, feet, miles";
+
+    label_opt = G_define_option();
+    label_opt->key = "label";
+    label_opt->description = _("Custom label of unit");
+    label_opt->type = TYPE_STRING;
+    label_opt->guisection = _("Text");
+
+    segm_opt = G_define_option();
+    segm_opt->key = "segment";
+    segm_opt->type = TYPE_INTEGER;
+    segm_opt->answer = "10";
+    segm_opt->options = "1-100";
+    segm_opt->label = _("Number of segments");
+    segm_opt->guisection = _("Style");
+
     fg_color_opt = G_define_standard_option(G_OPT_C);
     fg_color_opt->label = _("Bar scale and text color");
     fg_color_opt->guisection = _("Colors");
 
     bg_color_opt = G_define_standard_option(G_OPT_CN);
     bg_color_opt->key = "bgcolor";
-    bg_color_opt->answer = DEFAULT_BG_COLOR;
+    bg_color_opt->answer = "white";
     bg_color_opt->label = _("Background color (drawn behind the bar)");
     bg_color_opt->guisection = _("Colors");
 
@@ -134,81 +171,127 @@ int main(int argc, char **argv)
     fsize->description = _("Font size");
     fsize->guisection = _("Text");
 
+     G_option_exclusive(feet, units_opt, NULL);
+
     if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
+        exit(EXIT_FAILURE);
 
 
     G_get_window(&W);
     if (W.proj == PROJECTION_LL)
-	G_fatal_error(_("%s does not work with a latitude-longitude location"),
-		      argv[0]);
+        G_fatal_error(_("%s does not work with a latitude-longitude location"),
+                      argv[0]);
+
 
-    use_feet = feet->answer ? TRUE : FALSE;
+    north_arrow = n_symbol->answer ? TRUE : FALSE;
 
     switch (barstyle->answer[0]) {
     case 'c':
-	bar_style = STYLE_CLASSIC_BAR;
-	break;
+        bar_style = STYLE_CLASSIC_BAR;
+        break;
     case 'p':
-	bar_style = STYLE_PART_CHECKER;
-	break;
+        bar_style = STYLE_PART_CHECKER;
+        break;
     case 'f':
-	bar_style = STYLE_FULL_CHECKER;
-	break;
+        bar_style = STYLE_FULL_CHECKER;
+        break;
     case 'm':
-	bar_style = STYLE_MIXED_CHECKER;
-	break;
+        bar_style = STYLE_MIXED_CHECKER;
+        break;
     case 't':
-	bar_style = STYLE_TAIL_CHECKER;
-	break;
+        bar_style = STYLE_TAIL_CHECKER;
+        break;
     case 'l':
-	bar_style = STYLE_THIN_WITH_ENDS;
-	break;
+        bar_style = STYLE_THIN_WITH_ENDS;
+        break;
     case 's':
-	bar_style = STYLE_SOLID_BAR;
-	break;
+        bar_style = STYLE_SOLID_BAR;
+        break;
     case 'h':
-	bar_style = STYLE_HOLLOW_BAR;
-	break;
+        bar_style = STYLE_HOLLOW_BAR;
+        break;
     case 'u':
-	bar_style = STYLE_TICKS_UP;
-	break;
+        bar_style = STYLE_TICKS_UP;
+        break;
     case 'd':
-	bar_style = STYLE_TICKS_DOWN;
-	break;
+        bar_style = STYLE_TICKS_DOWN;
+        break;
     case 'b':
-	bar_style = STYLE_TICKS_BOTH;
-	break;
+        bar_style = STYLE_TICKS_BOTH;
+        break;
     case 'a':
-	bar_style = STYLE_ARROW_ENDS;
-	break;
+        bar_style = STYLE_ARROW_ENDS;
+        break;
     default:
-	G_fatal_error(_("Programmer error"));
+        G_fatal_error(_("Programmer error"));
     }
 
     switch (text_placement->answer[0]) {
     case 'u':
-	text_position = TEXT_UNDER;
-	break;
+        text_position = TEXT_UNDER;
+        break;
     case 'o':
-	text_position = TEXT_OVER;
-	break;
+        text_position = TEXT_OVER;
+        break;
     case 'l':
-	text_position = TEXT_LEFT;
-	break;
+        text_position = TEXT_LEFT;
+        break;
     case 'r':
-	text_position = TEXT_RIGHT;
-	break;
+        text_position = TEXT_RIGHT;
+        break;
     default:
-	G_fatal_error(_("Programmer error"));
+        G_fatal_error(_("Programmer error"));
     }
 
     sscanf(coords->answers[0], "%lf", &east);
     sscanf(coords->answers[1], "%lf", &north);
 
+
+    length = atof(length_opt->answer);
+    sscanf(segm_opt->answer, "%d", &segm);
+
+    if (feet->answer == 1){
+        use_feet = 1;
+        units = U_FEET;
+        label = "ft";
+    }
+    else {
+        if (!units_opt->answer)
+            units = G_database_unit();
+        else
+            units = G_units(units_opt->answer);
+        switch (units) {
+        case U_METERS:
+            label = "m";
+            break;
+        case U_KILOMETERS:
+            label = "km";
+            break;
+        case U_FEET:
+            use_feet = 1;
+            label = "ft";
+            break;
+        case U_USFEET:
+            use_feet = 1;
+            label = "ft";
+            break;
+        case U_MILES:
+            use_feet = 1;
+            label = "mi";
+            break;
+        default:
+            units = U_METERS;
+            label = "m";
+        }
+    }
+
+    if (label_opt->answer){
+        label = label_opt->answer;
+    }
+
     fontsize = atof(fsize->answer);
     if (no_text->answer)
-	fontsize = -1;
+        fontsize = -1;
 
     /* Parse and select foreground color */
     fg_color = D_parse_color(fg_color_opt->answer, 0);
@@ -216,14 +299,14 @@ int main(int argc, char **argv)
     /* Parse and select background color */
     bg_color = D_parse_color(bg_color_opt->answer, 1);
     if (bg_color == 0)
-	do_background = FALSE;
+        do_background = FALSE;
 
 
     D_open_driver();
 
     D_setup(0);
 
-    draw_scale(east, north, bar_style, text_position, fontsize);
+    draw_scale(east, north, length, segm, units, label, bar_style, text_position, fontsize);
 
     D_save_command(G_recreate_command());
     D_close_driver();
diff --git a/display/d.barscale/options.h b/display/d.barscale/options.h
index 22dd426..973178b 100644
--- a/display/d.barscale/options.h
+++ b/display/d.barscale/options.h
@@ -25,6 +25,7 @@ extern int fg_color;
 extern int bg_color;
 extern int use_feet;
 extern int do_background;
+extern int north_arrow;
 
 /* draw_scale.c */
-int draw_scale(double, double, int, int, double);
+int draw_scale(double, double, int, int, int, char *, int, int, double);
diff --git a/display/d.barscale/thumbnails/README b/display/d.barscale/thumbnails/README
index 3edc57f..66e50b8 100644
--- a/display/d.barscale/thumbnails/README
+++ b/display/d.barscale/thumbnails/README
@@ -1,6 +1,7 @@
-How to generate new scale bar thumbnail
-=======================================
-Expects North Carolina dataset. The thumbnail height should be 24 px.
+# How to generate new scale bar thumbnail
+# =======================================
+# Expects North Carolina dataset. The thumbnail height should be 24 px.
+# The expected scale bar with is 101 (no more than 110).
 
 
 export GRASS_RENDER_IMMEDIATE=png
@@ -13,9 +14,9 @@ for STYLE in classic line solid hollow full_checker part_checker mixed_checker t
 do
 	echo ${STYLE}
 	export GRASS_RENDER_FILE=${STYLE}.png
-	d.barscale style=${STYLE} at=20,20
+	d.barscale -t style=${STYLE} at=20,20 segment=5
 	mogrify -trim ${STYLE}.png
 	identify -format "%[fx:w]x%[fx:h]" ${STYLE}.png
-	convert ${STYLE}.png -gravity center -background white -extent 170x24  ${STYLE}.png
+	convert ${STYLE}.png -gravity center -background white -extent 110x24  ${STYLE}.png
 	optipng -o5 ${STYLE}.png ${STYLE}.png --quiet
 done
diff --git a/display/d.barscale/thumbnails/arrow_ends.png b/display/d.barscale/thumbnails/arrow_ends.png
index b87d899..2ee68d4 100644
Binary files a/display/d.barscale/thumbnails/arrow_ends.png and b/display/d.barscale/thumbnails/arrow_ends.png differ
diff --git a/display/d.barscale/thumbnails/both_ticks.png b/display/d.barscale/thumbnails/both_ticks.png
index 86876e7..7d6ef6b 100644
Binary files a/display/d.barscale/thumbnails/both_ticks.png and b/display/d.barscale/thumbnails/both_ticks.png differ
diff --git a/display/d.barscale/thumbnails/classic.png b/display/d.barscale/thumbnails/classic.png
index 3733877..c6dcdec 100644
Binary files a/display/d.barscale/thumbnails/classic.png and b/display/d.barscale/thumbnails/classic.png differ
diff --git a/display/d.barscale/thumbnails/down_ticks.png b/display/d.barscale/thumbnails/down_ticks.png
index 89ce663..77c46d2 100644
Binary files a/display/d.barscale/thumbnails/down_ticks.png and b/display/d.barscale/thumbnails/down_ticks.png differ
diff --git a/display/d.barscale/thumbnails/full_checker.png b/display/d.barscale/thumbnails/full_checker.png
index b440676..4bda2e6 100644
Binary files a/display/d.barscale/thumbnails/full_checker.png and b/display/d.barscale/thumbnails/full_checker.png differ
diff --git a/display/d.barscale/thumbnails/hollow.png b/display/d.barscale/thumbnails/hollow.png
index 1bde30f..310d1e7 100644
Binary files a/display/d.barscale/thumbnails/hollow.png and b/display/d.barscale/thumbnails/hollow.png differ
diff --git a/display/d.barscale/thumbnails/line.png b/display/d.barscale/thumbnails/line.png
index a9fb168..9c1b6e8 100644
Binary files a/display/d.barscale/thumbnails/line.png and b/display/d.barscale/thumbnails/line.png differ
diff --git a/display/d.barscale/thumbnails/mixed_checker.png b/display/d.barscale/thumbnails/mixed_checker.png
index 04cec8b..ad26521 100644
Binary files a/display/d.barscale/thumbnails/mixed_checker.png and b/display/d.barscale/thumbnails/mixed_checker.png differ
diff --git a/display/d.barscale/thumbnails/part_checker.png b/display/d.barscale/thumbnails/part_checker.png
index 7733933..f680a0c 100644
Binary files a/display/d.barscale/thumbnails/part_checker.png and b/display/d.barscale/thumbnails/part_checker.png differ
diff --git a/display/d.barscale/thumbnails/solid.png b/display/d.barscale/thumbnails/solid.png
index 6014886..be8139a 100644
Binary files a/display/d.barscale/thumbnails/solid.png and b/display/d.barscale/thumbnails/solid.png differ
diff --git a/display/d.barscale/thumbnails/tail_checker.png b/display/d.barscale/thumbnails/tail_checker.png
index eaced4e..8b436dd 100644
Binary files a/display/d.barscale/thumbnails/tail_checker.png and b/display/d.barscale/thumbnails/tail_checker.png differ
diff --git a/display/d.barscale/thumbnails/up_ticks.png b/display/d.barscale/thumbnails/up_ticks.png
index ed00960..5a965a9 100644
Binary files a/display/d.barscale/thumbnails/up_ticks.png and b/display/d.barscale/thumbnails/up_ticks.png differ
diff --git a/display/d.colorlist/d.colorlist.html b/display/d.colorlist/d.colorlist.html
index 9adef41..60dee8a 100644
--- a/display/d.colorlist/d.colorlist.html
+++ b/display/d.colorlist/d.colorlist.html
@@ -12,4 +12,4 @@ separator (default is comma).
 
 Andreas Lange
 
-<p><i>Last changed: $Date: 2014-11-01 11:10:14 +0100 (Sat, 01 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-01 00:17:14 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/display/d.colortable/d.colortable.html b/display/d.colortable/d.colortable.html
index 88daed4..16910f3 100644
--- a/display/d.colortable/d.colortable.html
+++ b/display/d.colortable/d.colortable.html
@@ -64,4 +64,4 @@ between runs of <em>d.colortable</em> to avoid confusion.
 James Westervelt, U.S. Army Construction Engineering Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2015-02-02 09:13:36 +0100 (Mon, 02 Feb 2015) $</i>
+<i>Last changed: $Date: 2015-02-02 04:27:58 +0100 (Mon, 02 Feb 2015) $</i>
diff --git a/display/d.font/d.font.html b/display/d.font/d.font.html
index cd32b3a..6889062 100644
--- a/display/d.font/d.font.html
+++ b/display/d.font/d.font.html
@@ -70,4 +70,4 @@ by Dr. A.V. Hershey while working at the U.S. National Bureau of
 Standards.
 
 <p>
-<i>Last changed: $Date: 2012-01-17 11:50:47 +0100 (Tue, 17 Jan 2012) $</i>
+<i>Last changed: $Date: 2012-01-17 02:50:47 -0800 (Tue, 17 Jan 2012) $</i>
diff --git a/display/d.geodesic/d.geodesic.html b/display/d.geodesic/d.geodesic.html
index 4bb233b..6143818 100644
--- a/display/d.geodesic/d.geodesic.html
+++ b/display/d.geodesic/d.geodesic.html
@@ -53,4 +53,4 @@ coordinate system.
 
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-28 14:30:25 +0100 (Sun, 28 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-28 14:22:50 +0100 (Sun, 28 Dec 2014) $</i>
diff --git a/display/d.grid/d.grid.html b/display/d.grid/d.grid.html
index a186b2b..884060a 100644
--- a/display/d.grid/d.grid.html
+++ b/display/d.grid/d.grid.html
@@ -3,49 +3,26 @@
 <em>d.grid</em> overlays a grid of user-defined size and
 color in the active display frame on the graphics monitor.
 The grid can be created as a standard rectangular grid or
-a geographic grid. The grid will overlay, not overwrite,
-the contents of the active display frame.
+a geographic grid.
 
 <p>
-<em>d.grid</em> can be run non-interactively or
-interactively.  If the user specifies the grid
-<em>size</em> and (optionally) the grid <em>color</em> on
-the command line the program will run non-interactively; if
-no grid <em>color</em> is given the default will be used.
-Alternately, the user may simply type <b>d.grid</b> on the
-command line; in this case, the program will prompt the
-user for parameter values using the standard GRASS graphical 
-user interface.
-
-
-<h2>NOTES</h2>
-
-<em>d.grid</em> will not erase grids already displayed in
-the active graphics display frame by previous invocations
-of <em>d.grid</em>; multiple invocations of <em>d.grid</em>
-will therefore result in the drawing of multiple grids
-inside the active graphics frame.  (A command like 
-<em><a href="d.erase.html">d.erase</a></em>, which erases the
-entire contents of the active display frame, must be run to
-erase previously drawn grids from the display frame.)
-
-<p>
-If the user provides a <em>-g</em> flag a geographic (projected) grid
-will be drawn. With the <em>-g</em> flag the <em>size</em>
+If the user provides a <b>-g</b> flag a geographic (projected) grid
+will be drawn. With the <b>-g</b> flag the <b>size</b>
 argument accepts both decimal degrees and colon separated
 ddd:mm:ss coordinates (eg. <tt>00:30:00</tt> for half of a degree).
-
-<p>
 A geographic grid cannot be drawn for a <em>latitude/longitude</em> 
 or <em>XY</em> projection.
+
 <p>
 Colors may be standard named GRASS colors (red, green, aqua, etc.) or
-a numerical R:G:B triplet, where component values range from 0-255.<br>
+a numerical R:G:B triplet, where component values range from 0-255.
+Grid color can be set with option <b>color</b>. Options <b>text_color</b> and 
+<b>bgcolor</b> set the color of the text and its background.
 
 <p>
-The grid drawing may be turned off by using the <em>-n</em> flag.<br>
-The border drawing may be turned off by using the <em>-b</em> flag.<br>
-The coordinate text may be turned off by using the <em>-t</em> flag.<br>
+The grid drawing may be turned off by using the <b>-n</b> flag.<br>
+The border drawing may be turned off by using the <b>-b</b> flag.<br>
+The coordinate text may be turned off by using the <b>-t</b> flag.<br>
 
 <p>
 To draw grid lines at different intervals, e.g. at high latitudes, you
@@ -85,7 +62,8 @@ d.grid size=500 color=blue
 <a href="d.rhumbline.html">d.rhumbline</a>,
 <a href="d.erase.html">d.erase</a>,
 <a href="d.frame.html">d.frame</a>,
-<a href="d.rast.html">d.rast</a>
+<a href="d.rast.html">d.rast</a>,
+<a href="v.mkgrid.html">v.mkgrid</a>
 </em>
 
 <h2>AUTHORS</h2>
@@ -94,6 +72,7 @@ James Westervelt, U.S. Army Construction Engineering Research Laboratory<br>
 Geogrid support: Bob Covill<br>
 Border support: Markus Neteler<br>
 Text and RGB support: Hamish Bowman<br>
+Background color implemented as part of GSoC 2016 by Adam Laza, CTU in Prague 
 
 <p>
-<i>Last changed: $Date: 2014-11-28 10:58:18 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2016-09-15 14:15:36 +0200 (Thu, 15 Sep 2016) $</i>
diff --git a/display/d.grid/fiducial.c b/display/d.grid/fiducial.c
index 78f4cc2..19f067a 100644
--- a/display/d.grid/fiducial.c
+++ b/display/d.grid/fiducial.c
@@ -10,14 +10,14 @@
 void plot_cross(double easting, double northing, int color, double rotation)
 {
     plot_symbol(easting, northing, color, rotation, "basic/cross1",
-		MARK_CROSS);
+                MARK_CROSS);
 }
 
 void plot_fiducial(double easting, double northing, int color,
-		   double rotation)
+                   double rotation)
 {
     plot_symbol(easting, northing, color, rotation + 45.0, "extra/fiducial",
-		MARK_FIDUCIAL);
+                MARK_FIDUCIAL);
 }
 
 void plot_dot(double easting, double northing, int color)
@@ -26,7 +26,7 @@ void plot_dot(double easting, double northing, int color)
 }
 
 void plot_symbol(double easting, double northing, int color, double rotation,
-		 char *symbol_name, int mark_type)
+                 char *symbol_name, int mark_type)
 {
     SYMBOL *Symb;
     RGBA_Color *line_color, *fill_color;
@@ -38,8 +38,8 @@ void plot_symbol(double easting, double northing, int color, double rotation,
     fill_color = G_malloc(sizeof(RGBA_Color));
 
     if (D_color_number_to_RGB(color, &R, &G, &B) == 0)
-	/* fall back to black on failure */
-	G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
+        /* fall back to black on failure */
+        G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
 
     line_color->r = (unsigned char)R;
     line_color->g = (unsigned char)G;
@@ -48,17 +48,17 @@ void plot_symbol(double easting, double northing, int color, double rotation,
 
     fill_color->a = RGBA_COLOR_NONE;
 
-    if(mark_type == MARK_DOT) {
-	size = 5;
-	fill_color->r = (unsigned char)R;
-	fill_color->g = (unsigned char)G;
-	fill_color->b = (unsigned char)B;
-	fill_color->a = RGBA_COLOR_OPAQUE;
+    if (mark_type == MARK_DOT) {
+        size = 5;
+        fill_color->r = (unsigned char)R;
+        fill_color->g = (unsigned char)G;
+        fill_color->b = (unsigned char)B;
+        fill_color->a = RGBA_COLOR_OPAQUE;
     }
 
     Symb = S_read(symbol_name);
     if (!Symb)
-	G_fatal_error(_("Reading symbol"));
+        G_fatal_error(_("Reading symbol"));
 
     S_stroke(Symb, size, rotation, tolerance);
     D_symbol(Symb, easting, northing, line_color, fill_color);
diff --git a/display/d.grid/local_proto.h b/display/d.grid/local_proto.h
index a0ba40a..b478e34 100644
--- a/display/d.grid/local_proto.h
+++ b/display/d.grid/local_proto.h
@@ -1,18 +1,19 @@
 #include <grass/gprojects.h>
 
-#define DIRN_BOTH 0 
+#define DIRN_BOTH 0
 #define DIRN_LAT  1
 #define DIRN_LON  2
 
 /* plot.c */
-int plot_grid(double, double, double, int, int, int, int, int, double, int);
+int plot_grid(double, double, double, int, int, int, int, int, int, double,
+              int);
 int plot_geogrid(double, struct pj_info, struct pj_info, int, int, int, int,
-		 int, double, int);
+                 int, int, double, int);
 void init_proj(struct pj_info *, struct pj_info *, int);
 void get_ll_bounds(double *, double *, double *, double *, struct Cell_head,
-		   struct pj_info, struct pj_info);
+                   struct pj_info, struct pj_info);
 void check_coords(double, double, double *, double *, int, struct Cell_head,
-		  struct pj_info, struct pj_info);
+                  struct pj_info, struct pj_info);
 float get_heading(double, double);
 
 /* plotborder.c */
diff --git a/display/d.grid/main.c b/display/d.grid/main.c
index a0b0f78..7615b51 100644
--- a/display/d.grid/main.c
+++ b/display/d.grid/main.c
@@ -1,3 +1,4 @@
+
 /****************************************************************
  *
  * MODULE:       d.grid
@@ -32,16 +33,17 @@ int main(int argc, char **argv)
     int colorg = 0;
     int colorb = 0;
     int colort = 0;
-    double size = 0., gsize = 0.;	/* initialize to zero */
+    int colorbg = 0;
+    double size = 0., gsize = 0.;       /* initialize to zero */
     double east, north;
     int do_text, fontsize, mark_type, line_width, dirn;
     struct GModule *module;
     struct Option *opt1, *opt2, *opt3, *opt4, *fsize, *tcolor, *lwidth,
-	*direction;
+        *direction, *bgcolor;
     struct Flag *noborder, *notext, *geogrid, *nogrid, *wgs84, *cross,
-	*fiducial, *dot, *align;
-    struct pj_info info_in;	/* Proj structures */
-    struct pj_info info_out;	/* Proj structures */
+        *fiducial, *dot, *align;
+    struct pj_info info_in;     /* Proj structures */
+    struct pj_info info_out;    /* Proj structures */
     struct Cell_head wind;
 
     /* Initialize the GIS calls */
@@ -51,9 +53,10 @@ int main(int argc, char **argv)
     G_add_keyword(_("display"));
     G_add_keyword(_("cartography"));
     G_add_keyword(_("graticule"));
+    G_add_keyword(_("grid"));
     module->description =
-	_("Overlays a user-specified grid "
-	  "in the active display frame on the graphics monitor.");
+        _("Overlays a user-specified grid "
+          "in the active display frame on the graphics monitor.");
 
     opt2 = G_define_option();
     opt2->key = "size";
@@ -61,9 +64,10 @@ int main(int argc, char **argv)
     opt2->type = TYPE_STRING;
     opt2->required = YES;
     opt2->label = _("Size of grid to be drawn (in map units)");
-    opt2->description = _("0 for north-south resolution of the current region. "
-                          "In map units or DDD:MM:SS format. "
-			  "Example: \"1000\" or \"0:10\"");
+    opt2->description =
+        _("0 for north-south resolution of the current region. "
+          "In map units or DDD:MM:SS format. "
+          "Example: \"1000\" or \"0:10\"");
 
     opt3 = G_define_standard_option(G_OPT_M_COORDS);
     opt3->key = "origin";
@@ -78,7 +82,7 @@ int main(int argc, char **argv)
     direction->answer = "both";
     direction->options = "both,east-west,north-south";
     direction->description =
-	_("Draw only east-west lines, north-south lines, or both ");
+        _("Draw only east-west lines, north-south lines, or both ");
     direction->guisection = _("Disable");
 
     lwidth = G_define_option();
@@ -103,6 +107,12 @@ int main(int argc, char **argv)
     tcolor->label = _("Text color");
     tcolor->guisection = _("Color");
 
+    bgcolor = G_define_standard_option(G_OPT_CN);
+    bgcolor->key = "bgcolor";
+    bgcolor->answer = "none";
+    bgcolor->label = _("Background color");
+    bgcolor->guisection = _("Color");
+
     fsize = G_define_option();
     fsize->key = "fontsize";
     fsize->type = TYPE_INTEGER;
@@ -113,18 +123,19 @@ int main(int argc, char **argv)
 
     align = G_define_flag();
     align->key = 'a';
-    align->description = _("Align the origin to the east-north corner of the current region");
+    align->description =
+        _("Align the origin to the east-north corner of the current region");
 
     geogrid = G_define_flag();
     geogrid->key = 'g';
     geogrid->description =
-	_("Draw geographic grid (referenced to current ellipsoid)");
+        _("Draw geographic grid (referenced to current ellipsoid)");
     geogrid->guisection = _("Draw");
 
     wgs84 = G_define_flag();
     wgs84->key = 'w';
     wgs84->description =
-	_("Draw geographic grid (referenced to WGS84 ellipsoid)");
+        _("Draw geographic grid (referenced to WGS84 ellipsoid)");
     wgs84->guisection = _("Draw");
 
     cross = G_define_flag();
@@ -141,7 +152,7 @@ int main(int argc, char **argv)
     fiducial->key = 'f';
     fiducial->description = _("Draw fiducial marks instead of grid lines");
     fiducial->guisection = _("Draw");
-    
+
     nogrid = G_define_flag();
     nogrid->key = 'n';
     nogrid->description = _("Disable grid drawing");
@@ -159,131 +170,141 @@ int main(int argc, char **argv)
 
     /* Check command line */
     if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
+        exit(EXIT_FAILURE);
 
 
     /* do some checking */
     if (nogrid->answer && noborder->answer)
-	G_fatal_error(_("Both grid and border drawing are disabled"));
+        G_fatal_error(_("Both grid and border drawing are disabled"));
     if (wgs84->answer)
-	geogrid->answer = 1;	/* -w implies -g */
+        geogrid->answer = 1;    /* -w implies -g */
     if (geogrid->answer && G_projection() == PROJECTION_LL)
-	G_fatal_error(_("Geo-grid option not available for LL projection, use without -g/-w"));
+        G_fatal_error(_("Geo-grid option not available for LL projection, use without -g/-w"));
     if (geogrid->answer && G_projection() == PROJECTION_XY)
-	G_fatal_error(_("Geo-grid option not available for XY projection, use without -g/-w"));
+        G_fatal_error(_("Geo-grid option not available for XY projection, use without -g/-w"));
 
     if (notext->answer)
-	do_text = FALSE;
+        do_text = FALSE;
     else
-	do_text = TRUE;
+        do_text = TRUE;
 
     if (lwidth->answer) {
-	line_width = atoi(lwidth->answer);
-	if(line_width < 0 || line_width > 1e3)
-	    G_fatal_error("Invalid line width");
+        line_width = atoi(lwidth->answer);
+        if (line_width < 0 || line_width > 1e3)
+            G_fatal_error("Invalid line width");
     }
     else
-	line_width = 0;
+        line_width = 0;
 
     fontsize = atoi(fsize->answer);
 
     mark_type = MARK_GRID;
     if (cross->answer + fiducial->answer + dot->answer > 1)
-	G_fatal_error(_("Choose a single mark style"));
+        G_fatal_error(_("Choose a single mark style"));
     if (cross->answer)
-	mark_type = MARK_CROSS;
+        mark_type = MARK_CROSS;
     if (fiducial->answer)
-	mark_type = MARK_FIDUCIAL;
+        mark_type = MARK_FIDUCIAL;
     if (dot->answer)
-	mark_type = MARK_DOT;
+        mark_type = MARK_DOT;
 
     if (G_strcasecmp(direction->answer, "both") == 0)
-	dirn = DIRN_BOTH;
+        dirn = DIRN_BOTH;
     else if (G_strcasecmp(direction->answer, "east-west") == 0)
-	dirn = DIRN_LAT;
+        dirn = DIRN_LAT;
     else if (G_strcasecmp(direction->answer, "north-south") == 0)
-	dirn = DIRN_LON;
+        dirn = DIRN_LON;
     else
-	G_fatal_error("Invalid direction: %s", direction->answer);
+        G_fatal_error("Invalid direction: %s", direction->answer);
 
     if (align->answer || strcmp(opt2->answer, "0") == 0)
-	G_get_element_window(&wind, "", "WIND", G_mapset());
+        G_get_element_window(&wind, "", "WIND", G_mapset());
 
     if (strcmp(opt2->answer, "0") == 0) {
-	if (geogrid->answer)
-	    gsize = wind.ns_res;
-	else
-	    size = wind.ns_res;
-    } else {
+        if (geogrid->answer)
+            gsize = wind.ns_res;
+        else
+            size = wind.ns_res;
+    }
+    else {
         /* get grid size */
         if (geogrid->answer) {
-	    if (!G_scan_resolution(opt2->answer, &gsize, PROJECTION_LL) ||
-    	        gsize <= 0.0)
-    	        G_fatal_error(_("Invalid geo-grid size <%s>"), opt2->answer);
+            if (!G_scan_resolution(opt2->answer, &gsize, PROJECTION_LL) ||
+                gsize <= 0.0)
+                G_fatal_error(_("Invalid geo-grid size <%s>"), opt2->answer);
         }
         else {
-    	    if (!G_scan_resolution(opt2->answer, &size, G_projection()) ||
-    	        size <= 0.0)
-    	        G_fatal_error(_("Invalid grid size <%s>"), opt2->answer);
+            if (!G_scan_resolution(opt2->answer, &size, G_projection()) ||
+                size <= 0.0)
+                G_fatal_error(_("Invalid grid size <%s>"), opt2->answer);
         }
     }
 
     if (align->answer) {
-	/* reduce accumulated errors when ew_res is not the same as ns_res. */
-	struct Cell_head w;
-
-	G_get_set_window(&w);
-	east = wind.west + (int)((w.west - wind.west) / wind.ew_res) * wind.ew_res;
-	north = wind.south + (int)((w.south - wind.south) / wind.ns_res) * wind.ns_res;
-    } else {
+        /* reduce accumulated errors when ew_res is not the same as ns_res. */
+        struct Cell_head w;
+
+        G_get_set_window(&w);
+        east =
+            wind.west +
+            (int)((w.west - wind.west) / wind.ew_res) * wind.ew_res;
+        north =
+            wind.south +
+            (int)((w.south - wind.south) / wind.ns_res) * wind.ns_res;
+    }
+    else {
         /* get grid easting start */
         if (!G_scan_easting(opt3->answers[0], &east, G_projection())) {
-    	    G_usage();
-    	    G_fatal_error(_("Illegal east coordinate <%s>"), opt3->answers[0]);
+            G_usage();
+            G_fatal_error(_("Illegal east coordinate <%s>"),
+                          opt3->answers[0]);
         }
-    
+
         /* get grid northing start */
         if (!G_scan_northing(opt3->answers[1], &north, G_projection())) {
-    	    G_usage();
-    	    G_fatal_error(_("Illegal north coordinate <%s>"), opt3->answers[1]);
+            G_usage();
+            G_fatal_error(_("Illegal north coordinate <%s>"),
+                          opt3->answers[1]);
         }
     }
 
     /* Setup driver and check important information */
     D_open_driver();
-    
+
     /* Parse and select grid color */
     colorg = D_parse_color(opt1->answer, FALSE);
     /* Parse and select border color */
     colorb = D_parse_color(opt4->answer, FALSE);
     /* Parse and select text color */
     colort = D_parse_color(tcolor->answer, FALSE);
+    /* Parse and select background color */
+    colorbg = D_parse_color(bgcolor->answer, TRUE);
 
 
     D_setup(0);
 
     /* draw grid */
     if (!nogrid->answer) {
-	if (geogrid->answer) {
-	    /* initialzie proj stuff */
-	    init_proj(&info_in, &info_out, wgs84->answer);
-	    plot_geogrid(gsize, info_in, info_out, do_text, colorg, colort,
-			 fontsize, mark_type, line_width, dirn);
-	}
-	else {
-	    /* Do the grid plotting */
-	    plot_grid(size, east, north, do_text, colorg, colort, fontsize,
-		      mark_type, line_width, dirn);
-	}
+        if (geogrid->answer) {
+            /* initialzie proj stuff */
+            init_proj(&info_in, &info_out, wgs84->answer);
+            plot_geogrid(gsize, info_in, info_out, do_text, colorg, colort,
+                         colorbg, fontsize, mark_type, line_width, dirn);
+        }
+        else {
+            /* Do the grid plotting */
+            plot_grid(size, east, north, do_text, colorg, colort, colorbg,
+                      fontsize, mark_type, line_width, dirn);
+        }
     }
 
     /* Draw border */
     if (!noborder->answer) {
-	/* Set border color */
-	D_use_color(colorb);
+        /* Set border color */
+        D_use_color(colorb);
 
-	/* Do the border plotting */
-	plot_border(size, east, north, dirn);
+        /* Do the border plotting */
+        plot_border(size, east, north, dirn);
     }
 
     D_save_command(G_recreate_command());
diff --git a/display/d.grid/plot.c b/display/d.grid/plot.c
index da64b24..23044e9 100644
--- a/display/d.grid/plot.c
+++ b/display/d.grid/plot.c
@@ -10,63 +10,45 @@
 
 
 int plot_grid(double grid_size, double east, double north, int do_text,
-	      int gcolor, int tcolor, int fontsize, int mark_type,
-	      double line_width, int direction)
+              int gcolor, int tcolor, int bgcolor, int fontsize,
+              int mark_type, double line_width, int direction)
 {
     double x, y, y0;
     double e1, e2;
     struct Cell_head window;
     double row_dist, colm_dist;
     char text[128];
+    double tx, ty, bt, bb, bl, br, w, h;
 
     G_get_set_window(&window);
 
     /* pull right and bottom edges back one pixel; display lib bug? */
     row_dist = D_d_to_u_row(0.) - D_d_to_u_row(1.);
     colm_dist = D_d_to_u_col(1.) - D_d_to_u_col(0.);
-/*    window.south += row_dist;
-      window.east -= colm_dist;
- */
+    /*    window.south += row_dist;
+       window.east -= colm_dist;
+     */
 
     /* Draw vertical grids */
     if (window.west > east)
-	x = ceil((window.west - east) / grid_size) * grid_size + east;
+        x = ceil((window.west - east) / grid_size) * grid_size + east;
     else
-	x = east - ceil((east - window.west) / grid_size) * grid_size;
+        x = east - ceil((east - window.west) / grid_size) * grid_size;
 
     if (direction != DIRN_LAT) {
-	while (x <= window.east) {
-	    if (mark_type == MARK_GRID) {
-		D_use_color(gcolor);
-		if (line_width)
-		    D_line_width(line_width);
-		D_line_abs(x, window.north, x, window.south);
-		D_line_width(0);    /* reset so text doesn't use it */
-	    }
-
-	    if (do_text) {
-		D_use_color(tcolor);
-		G_format_easting(x, text, G_projection());
-		D_text_rotation(270.0);
-		D_text_size(fontsize, fontsize);
-
-		/* Positioning -
-		   x: 4 pixels to the right of the grid line, + 0.5 rounding factor.
-		   y: End of text is 7 pixels up from bottom of screen, +.5 rounding.
-		   fontsize*.81 = actual text width FOR DEFAULT FONT (NOT FreeType)
-		 */
-		D_pos_abs(x + 4.5 * D_get_d_to_u_xconv(),
-			   D_get_u_south()
-			   - D_get_d_to_u_yconv() * (strlen(text) * fontsize * 0.81 + 7.5));
-
-		D_text(text);
-	    }
-	    x += grid_size;
-	}
-	D_text_rotation(0.0);	    /* reset */
+        while (x <= window.east) {
+            if (mark_type == MARK_GRID) {
+                D_use_color(gcolor);
+                if (line_width)
+                    D_line_width(line_width);
+                D_line_abs(x, window.north, x, window.south);
+                D_line_width(0);        /* reset so text doesn't use it */
+            }
+            x += grid_size;
+        }
+        D_text_rotation(0.0);   /* reset */
     }
 
-
     /* Draw horizontal grids
      *
      * For latlon, must draw in shorter sections
@@ -77,70 +59,173 @@ int plot_grid(double grid_size, double east, double north, int do_text,
     e2 = (window.west * 2 + window.east) / 3;
 
     if (window.south > north)
-	y = ceil((window.south - north) / grid_size) * grid_size + north;
+        y = ceil((window.south - north) / grid_size) * grid_size + north;
     else
-	y = north - ceil((north - window.south) / grid_size) * grid_size;
+        y = north - ceil((north - window.south) / grid_size) * grid_size;
 
     if (direction != DIRN_LON) {
-	while (y <= window.north) {
-	    if (mark_type == MARK_GRID) {
-		D_use_color(gcolor);
-		if (line_width)
-		    D_line_width(line_width);
-		D_line_abs(window.east, y, e1, y);
-		D_line_abs(e1, y, e2, y);
-		D_line_abs(e2, y, window.west, y);
-		D_line_width(0);    /* reset so text doesn't use it */
-	    }
-
-	    if (do_text) {
-		D_use_color(tcolor);
-		G_format_northing(y, text, G_projection());
-		D_text_size(fontsize, fontsize);
-
-		/* Positioning -
-		   x: End of text is 7 pixels left from right edge of screen, +.5 rounding.
-		   fontsize*.81 = actual text width FOR DEFAULT FONT (NOT FreeType)
-		   y: 4 pixels above each grid line, +.5 rounding.
-		 */
-		D_pos_abs(
-		    D_get_u_east()
-		    - D_get_d_to_u_xconv() * (strlen(text) * fontsize * 0.81 + 7.5),
-		    y - D_get_d_to_u_yconv() * 4.5);
-
-		D_text(text);
-	    }
-	    y += grid_size;
-	}
+        while (y <= window.north) {
+            if (mark_type == MARK_GRID) {
+                D_use_color(gcolor);
+                if (line_width)
+                    D_line_width(line_width);
+                D_line_abs(window.east, y, e1, y);
+                D_line_abs(e1, y, e2, y);
+                D_line_abs(e2, y, window.west, y);
+                D_line_width(0);        /* reset so text doesn't use it */
+            }
+            y += grid_size;
+        }
+        D_text_rotation(0.0);
     }
 
-
     /* draw marks not grid lines */
     if (mark_type != MARK_GRID) {
-	/* reset x and y */
-	if (window.west > east)
-	    x = ceil((window.west - east) / grid_size) * grid_size + east;
-	else
-	    x = east - ceil((east - window.west) / grid_size) * grid_size;
-	if (window.south > north)
-	    y0 = ceil((window.south - north) / grid_size) * grid_size + north;
-	else
-	    y0 = north - ceil((north - window.south) / grid_size) * grid_size;
-
-	/* plot marks */
-	while (x <= window.east) {
-	    y = y0;		/* reset */
-	    while (y <= window.north) {
-		if (mark_type == MARK_CROSS)
-		    plot_cross(x, y, gcolor, 0.0);
-		else if (mark_type == MARK_FIDUCIAL)
-		    plot_fiducial(x, y, gcolor, 0.0);
-		else if (mark_type == MARK_DOT)
-		    plot_dot(x, y, gcolor);
-		y += grid_size;
-	    }
-	    x += grid_size;
-	}
+        /* reset x and y */
+        if (window.west > east)
+            x = ceil((window.west - east) / grid_size) * grid_size + east;
+        else
+            x = east - ceil((east - window.west) / grid_size) * grid_size;
+        if (window.south > north)
+            y0 = ceil((window.south - north) / grid_size) * grid_size + north;
+        else
+            y0 = north - ceil((north - window.south) / grid_size) * grid_size;
+
+        /* plot marks */
+        while (x <= window.east) {
+            y = y0;             /* reset */
+            while (y <= window.north) {
+                if (mark_type == MARK_CROSS)
+                    plot_cross(x, y, gcolor, 0.0);
+                else if (mark_type == MARK_FIDUCIAL)
+                    plot_fiducial(x, y, gcolor, 0.0);
+                else if (mark_type == MARK_DOT)
+                    plot_dot(x, y, gcolor);
+                y += grid_size;
+            }
+            x += grid_size;
+        }
+    }
+
+    /* Draw vertical labels */
+    if (do_text) {
+        if (window.west > east)
+            x = ceil((window.west - east) / grid_size) * grid_size + east;
+        else
+            x = east - ceil((east - window.west) / grid_size) * grid_size;
+
+        if (direction != DIRN_LAT) {
+            while (x <= window.east) {
+                D_use_color(tcolor);
+                G_format_easting(x, text, G_projection());
+                D_text_rotation(270.0);
+                D_text_size(fontsize, fontsize);
+
+                /* Positioning -
+                   x: 4 pixels to the right of the grid line, + 0.5 rounding factor.
+                   y: End of text is 7 pixels up from bottom of screen, +.5 rounding.
+                   fontsize*.81 = actual text width FOR DEFAULT FONT (NOT FreeType)
+                 */
+                D_pos_abs(x + 4.5 * D_get_d_to_u_xconv(), D_get_u_south()
+                          - D_get_d_to_u_yconv() * (strlen(text)
+                          * fontsize * 0.81 + 7.5));
+
+                tx = x + 4.5 * D_get_d_to_u_xconv();
+                ty = D_get_u_south() -
+                    D_get_d_to_u_yconv() * (strlen(text) * fontsize * 0.81 + 7.5);
+
+                if (bgcolor != 0) {
+                    D_get_text_box(text, &bt, &bb, &bl, &br);
+                    w = br - bl;
+                    h = bt - bb;
+
+                    if (w > 0)
+                        w += 0.2 * fontsize * fabs(D_get_d_to_u_xconv());
+                    else  /* D_text() does not draw " ". */
+                        w = 0.8 * fontsize * fabs(D_get_d_to_u_xconv());
+                    if (h > 0)
+                        h += 0.2 * fontsize * fabs(D_get_d_to_u_yconv());
+                    else  /* D_text() does not draw " ". */
+                        h = 0.8 * fontsize * fabs(D_get_d_to_u_yconv());
+
+                    bl = tx - w/2;
+                    bt = ty + h/10;
+                    br = tx + w + w/2;
+                    bb = ty - h - h/10;
+
+                    D_use_color(bgcolor);
+                    D_box_abs(bl, bt, br, bb);
+                }
+
+                D_use_color(tcolor);
+                D_pos_abs(tx, ty);
+                D_text(text);
+                x += grid_size;
+            }
+            D_text_rotation(0.0);   /* reset */
+        }
+    }
+
+    /* Draw horizontal labels */
+    if (do_text) {
+        if (window.south > north)
+            y = ceil((window.south - north) / grid_size) * grid_size + north;
+        else
+            y = north - ceil((north - window.south) / grid_size) * grid_size;
+
+        if (direction != DIRN_LON) {
+            while (y <= window.north) {
+
+                D_use_color(tcolor);
+                G_format_northing(y, text, G_projection());
+                D_text_size(fontsize, fontsize);
+
+                /* Positioning -
+                   x: End of text is 7 pixels left from right edge of screen, +.5 rounding.
+                   fontsize*.81 = actual text width FOR DEFAULT FONT (NOT FreeType)
+                   y: 4 pixels above each grid line, +.5 rounding.
+                 */
+                D_pos_abs(D_get_u_east()
+                          -
+                          D_get_d_to_u_xconv() * (strlen(text) * fontsize *
+                                                  0.81 + 7.5),
+                          y - D_get_d_to_u_yconv() * 4.5);
+
+                tx = D_get_u_east() -
+                     D_get_d_to_u_xconv() * (strlen(text) * fontsize * 0.81 +
+                                             7.5);
+                ty = y - D_get_d_to_u_yconv() * 4.5;
+
+                if (bgcolor != 0) {
+                    D_get_text_box(text, &bt, &bb, &bl, &br);
+                    w = br - bl;
+                    h = bt - bb;
+
+                    if (w > 0)
+                        w += 0.2 * fontsize * fabs(D_get_d_to_u_xconv());
+                    else  /* D_text() does not draw " ". */
+                        w = 0.8 * fontsize * fabs(D_get_d_to_u_xconv());
+                    if (h > 0)
+                        h += 0.2 * fontsize * fabs(D_get_d_to_u_yconv());
+                    else  /* D_text() does not draw " ". */
+                        h = 0.8 * fontsize * fabs(D_get_d_to_u_yconv());
+
+                    bl = tx - w/10;
+                    bt = ty + h + h/2;
+                    br = tx + w + w/10;
+                    bb = ty - h/2;
+                    D_use_color(bgcolor);
+                    D_box_abs(bl, bt, br, bb);
+                }
+
+                D_use_color(tcolor);
+                D_pos_abs(tx, ty);
+                D_text(text);
+
+                y += grid_size;
+            }
+            D_text_rotation(0.0);
+        }
     }
 
     return 0;
@@ -148,8 +233,8 @@ int plot_grid(double grid_size, double east, double north, int do_text,
 
 
 int plot_geogrid(double size, struct pj_info info_in, struct pj_info info_out,
-		 int do_text, int gcolor, int tcolor, int fontsize,
-		 int mark_type, double line_width, int direction)
+                 int do_text, int gcolor, int tcolor, int bgcolor, int fontsize,
+                 int mark_type, double line_width, int direction)
 {
     double g;
     double e1, e2, n1, n2;
@@ -165,6 +250,7 @@ int plot_geogrid(double size, struct pj_info info_in, struct pj_info info_out,
     double row_dist, colm_dist;
     float font_angle;
     struct Cell_head window;
+    double tx, ty, bt, bb, bl, br, w, h;
 
     /* geo current region */
     G_get_set_window(&window);
@@ -186,148 +272,267 @@ int plot_geogrid(double size, struct pj_info info_in, struct pj_info info_out,
     g = floor(north / size) * size;
     e1 = east;
     for (j = 0; g >= south; j++, g -= size) {
-	start_coord = -9999.;
-	if (g == north || g == south || direction == DIRN_LON)
-	    continue;
-
-	/* Set grid color */
-	D_use_color(gcolor);
-
-	for (ll = 0; ll < SEGS; ll++) {
-	    n1 = n2 = g;
-	    e1 = west + (ll * ((east - west) / SEGS));
-	    e2 = e1 + ((east - west) / SEGS);
-	    if (pj_do_proj(&e1, &n1, &info_in, &info_out) < 0)
-		G_fatal_error(_("Error in pj_do_proj"));
-
-	    check_coords(e1, n1, &lon, &lat, 1, window, info_in, info_out);
-	    e1 = lon;
-	    n1 = lat;
-	    if (pj_do_proj(&e2, &n2, &info_in, &info_out) < 0)
-		G_fatal_error(_("Error in pj_do_proj"));
-
-	    check_coords(e2, n2, &lon, &lat, 1, window, info_in, info_out);
-	    e2 = lon;
-	    n2 = lat;
-	    if (start_coord == -9999.) {
-		start_coord = n1;
-		font_angle = get_heading((e1 - e2), (n1 - n2));
-	    }
-
-	    if (line_width)
-		D_line_width(line_width);
-
-	    if (mark_type == MARK_GRID)
-		D_line_abs(e1, n1, e2, n2);
-
-	    D_line_width(0);
-	}
-
-	if (do_text) {
-	    /* Set text color */
-	    D_use_color(tcolor);
-
-	    G_format_northing(g, text, PROJECTION_LL);
-	    D_text_rotation(font_angle);
-	    D_text_size(fontsize, fontsize);
-	    D_pos_abs(D_get_u_west() + D_get_d_to_u_xconv() * border_off,
-		      start_coord - D_get_d_to_u_yconv() * grid_off);
-	    D_text(text);
-	}
-    }
+        start_coord = -9999.;
+        if (g == north || g == south || direction == DIRN_LON)
+            continue;
+
+        /* Set grid color */
+        D_use_color(gcolor);
+
+        for (ll = 0; ll < SEGS; ll++) {
+            n1 = n2 = g;
+            e1 = west + (ll * ((east - west) / SEGS));
+            e2 = e1 + ((east - west) / SEGS);
+            if (pj_do_proj(&e1, &n1, &info_in, &info_out) < 0)
+                G_fatal_error(_("Error in pj_do_proj"));
+
+            check_coords(e1, n1, &lon, &lat, 1, window, info_in, info_out);
+            e1 = lon;
+            n1 = lat;
+            if (pj_do_proj(&e2, &n2, &info_in, &info_out) < 0)
+                G_fatal_error(_("Error in pj_do_proj"));
+
+            check_coords(e2, n2, &lon, &lat, 1, window, info_in, info_out);
+            e2 = lon;
+            n2 = lat;
+            if (start_coord == -9999.) {
+                start_coord = n1;
+                font_angle = get_heading((e1 - e2), (n1 - n2));
+            }
+
+            if (line_width)
+                D_line_width(line_width);
+
+            if (mark_type == MARK_GRID)
+                D_line_abs(e1, n1, e2, n2);
+
+            D_line_width(0);
+        }
+        }
 
     /* Lines of Longitude */
     g = floor(east / size) * size;
     n1 = north;
     for (j = 0; g > west; j++, g -= size) {
-	start_coord = -9999.;
-	extra_y_off = 0.0;
-	if (g == east || g == west || direction == DIRN_LAT)
-	    continue;
-
-	/* Set grid color */
-	D_use_color(gcolor);
-
-	for (ll = 0; ll < SEGS; ll++) {
-	    e1 = e2 = g;
-	    n1 = north - (ll * ((north - south) / SEGS));
-	    n2 = n1 - ((north - south) / SEGS);
-	    /*
-	       n1 = south + (ll *((north - south)/SEGS));
-	       n2 = n1 + ((north - south)/SEGS);
-	     */
-	    if (pj_do_proj(&e1, &n1, &info_in, &info_out) < 0)
-		G_fatal_error(_("Error in pj_do_proj"));
-
-	    check_coords(e1, n1, &lon, &lat, 2, window, info_in, info_out);
-	    e1 = lon;
-	    n1 = lat;
-	    if (pj_do_proj(&e2, &n2, &info_in, &info_out) < 0)
-		G_fatal_error(_("Error in pj_do_proj"));
-
-	    check_coords(e2, n2, &lon, &lat, 2, window, info_in, info_out);
-	    e2 = lon;
-	    n2 = lat;
-
-	    if ((start_coord == -9999.) && (D_u_to_a_row(n1) > 0)) {
-		font_angle = get_heading((e1 - e2), (n1 - n2));
-		start_coord = e1;
-
-		/* font rotates by bottom-left corner, try to keep top-left cnr on screen */
-		if (font_angle - 270 > 0) {
-		    extra_y_off = sin((font_angle - 270) * M_PI/180) * fontsize;
-		    if (D_u_to_d_row(n1) - D_get_d_north() < extra_y_off + grid_off)
-			start_coord = -9999.;  /* wait until the next point south */
-		}
-	    }
-
-	    if (line_width)
-		D_line_width(line_width);
-
-	    if (mark_type == MARK_GRID)
-		D_line_abs(e1, n1, e2, n2);
-
-	    D_line_width(0);
-	}
-	if (do_text) {
-	    /* Set text color */
-	    D_use_color(tcolor);
-
-	    G_format_easting(g, text, PROJECTION_LL);
-	    D_text_rotation(font_angle);
-	    D_text_size(fontsize, fontsize);
-	    D_pos_abs(start_coord + D_get_d_to_u_xconv() * (grid_off + 1.5),
-		      D_get_u_north() + D_get_d_to_u_yconv() *
-		      (border_off + extra_y_off));
-	    D_text(text);
-	}
-    }
-
-    D_text_rotation(0.0);	/* reset */
+        start_coord = -9999.;
+        extra_y_off = 0.0;
+        if (g == east || g == west || direction == DIRN_LAT)
+            continue;
+
+        /* Set grid color */
+        D_use_color(gcolor);
+
+        for (ll = 0; ll < SEGS; ll++) {
+            e1 = e2 = g;
+            n1 = north - (ll * ((north - south) / SEGS));
+            n2 = n1 - ((north - south) / SEGS);
+            /*
+               n1 = south + (ll *((north - south)/SEGS));
+               n2 = n1 + ((north - south)/SEGS);
+             */
+            if (pj_do_proj(&e1, &n1, &info_in, &info_out) < 0)
+                G_fatal_error(_("Error in pj_do_proj"));
+
+            check_coords(e1, n1, &lon, &lat, 2, window, info_in, info_out);
+            e1 = lon;
+            n1 = lat;
+            if (pj_do_proj(&e2, &n2, &info_in, &info_out) < 0)
+                G_fatal_error(_("Error in pj_do_proj"));
+
+            check_coords(e2, n2, &lon, &lat, 2, window, info_in, info_out);
+            e2 = lon;
+            n2 = lat;
+
+            if ((start_coord == -9999.) && (D_u_to_a_row(n1) > 0)) {
+                font_angle = get_heading((e1 - e2), (n1 - n2));
+                start_coord = e1;
+
+                /* font rotates by bottom-left corner, try to keep top-left cnr on screen */
+                if (font_angle - 270 > 0) {
+                    extra_y_off =
+                        sin((font_angle - 270) * M_PI / 180) * fontsize;
+                    if (D_u_to_d_row(n1) - D_get_d_north() <
+                        extra_y_off + grid_off)
+                        start_coord = -9999.;   /* wait until the next point south */
+                }
+            }
+
+            if (line_width)
+                D_line_width(line_width);
+
+            if (mark_type == MARK_GRID)
+                D_line_abs(e1, n1, e2, n2);
+
+            D_line_width(0);
+        }
+        }
+    D_text_rotation(0.0);       /* reset */
 
     /* draw marks not grid lines */
     if (mark_type != MARK_GRID) {
-	G_warning(_("Geo-grid option only available for LL projection, use without -g/-w"));
+        G_warning(_("Geo-grid option only available for LL projection, use without -g/-w"));
 #ifdef TODO
-	e1 = combine above;
-	n1 = combine above;
-
-	/* plot marks */
-	while (e1 <= window.east) {
-	    n1 = y0;		/* reset */
-	    while (n1 <= window.north) {
-		if (mark_type == MARK_CROSS)
-		    plot_cross(e1, n1, gcolor, 0.0);
-		else if (mark_type == MARK_FIDUCIAL)
-		    plot_fiducial(e1, n1, gcolor, 0.0);
-		else if (mark_type == MARK_DOT)
-		    plot_dot(e1, n1, gcolor);
-		n1 += grid_size;
-	    }
-	    e1 += grid_size;
-	}
+        e1 = combine above;
+        n1 = combine above;
+
+        /* plot marks */
+        while (e1 <= window.east) {
+            n1 = y0;            /* reset */
+            while (n1 <= window.north) {
+                if (mark_type == MARK_CROSS)
+                    plot_cross(e1, n1, gcolor, 0.0);
+                else if (mark_type == MARK_FIDUCIAL)
+                    plot_fiducial(e1, n1, gcolor, 0.0);
+                else if (mark_type == MARK_DOT)
+                    plot_dot(e1, n1, gcolor);
+                n1 += grid_size;
+            }
+            e1 += grid_size;
+        }
 #endif
-    /* also TODO: rotate cross and fiducial marks by the converge angle; see g.region -n */
+        /* also TODO: rotate cross and fiducial marks by the converge angle; see g.region -n */
+    }
+
+    /* geo current region */
+    G_get_set_window(&window);
+
+    /* Adjust south and east back by one pixel for display bug? */
+    row_dist = D_d_to_u_row(0.) - D_d_to_u_row(1.);
+    colm_dist = D_d_to_u_col(1.) - D_d_to_u_col(0.);
+    window.south += row_dist;
+    window.east -= colm_dist;
+
+    /* get lat long min max */
+    /* probably need something like boardwalk ?? */
+    get_ll_bounds(&west, &east, &south, &north, window, info_in, info_out);
+
+    G_debug(3, "REGION BOUNDS N=%f S=%f E=%f W=%f", north, south, east, west);
+
+
+    /* Labels of Latitude */
+    if (do_text) {
+        g = floor(north / size) * size;
+        e1 = east;
+        for (j = 0; g >= south; j++, g -= size) {
+            start_coord = -9999.;
+            if (g == north || g == south || direction == DIRN_LON)
+                continue;
+
+            /* Set grid color */
+            for (ll = 0; ll < SEGS; ll++) {
+                n1 = n2 = g;
+                e1 = west + (ll * ((east - west) / SEGS));
+                e2 = e1 + ((east - west) / SEGS);
+                if (pj_do_proj(&e1, &n1, &info_in, &info_out) < 0)
+                    G_fatal_error(_("Error in pj_do_proj"));
+
+                check_coords(e1, n1, &lon, &lat, 1, window, info_in, info_out);
+                e1 = lon;
+                n1 = lat;
+                if (pj_do_proj(&e2, &n2, &info_in, &info_out) < 0)
+                    G_fatal_error(_("Error in pj_do_proj"));
+
+                check_coords(e2, n2, &lon, &lat, 1, window, info_in, info_out);
+                e2 = lon;
+                n2 = lat;
+                if (start_coord == -9999.) {
+                    start_coord = n1;
+                    font_angle = get_heading((e1 - e2), (n1 - n2));
+                }
+            }
+
+            G_format_northing(g, text, PROJECTION_LL);
+            D_text_rotation(font_angle);
+            D_text_size(fontsize, fontsize);
+            tx = D_get_u_west() + D_get_d_to_u_xconv() * border_off;
+            ty = start_coord - D_get_d_to_u_yconv() * grid_off;
+
+            if (bgcolor != 0) {
+                D_get_text_box(text, &bt, &bb, &bl, &br);
+                w = br - bl;
+                h = bt - bb;
+                bl = tx - w/10;
+                bt = ty + h + h/2;
+                br = tx + w + w/10;
+                bb = ty - h/2;
+                D_use_color(bgcolor);
+                D_box_abs(bl, bt, br, bb);
+            }
+
+            D_use_color(tcolor);
+            D_pos_abs(tx, ty);
+            D_text(text);
+        }
+    }
+
+
+    /* Labels of Longitude */
+    if (do_text) {
+        g = floor(east / size) * size;
+        n1 = north;
+        for (j = 0; g > west; j++, g -= size) {
+            start_coord = -9999.;
+            extra_y_off = 0.0;
+            if (g == east || g == west || direction == DIRN_LAT)
+                continue;
+
+            for (ll = 0; ll < SEGS; ll++) {
+                e1 = e2 = g;
+                n1 = north - (ll * ((north - south) / SEGS));
+                n2 = n1 - ((north - south) / SEGS);
+
+                if (pj_do_proj(&e1, &n1, &info_in, &info_out) < 0)
+                    G_fatal_error(_("Error in pj_do_proj"));
+
+                check_coords(e1, n1, &lon, &lat, 2, window, info_in, info_out);
+                e1 = lon;
+                n1 = lat;
+                if (pj_do_proj(&e2, &n2, &info_in, &info_out) < 0)
+                    G_fatal_error(_("Error in pj_do_proj"));
+
+                check_coords(e2, n2, &lon, &lat, 2, window, info_in, info_out);
+                e2 = lon;
+                n2 = lat;
+
+                if ((start_coord == -9999.) && (D_u_to_a_row(n1) > 0)) {
+                    font_angle = get_heading((e1 - e2), (n1 - n2));
+                    start_coord = e1;
+
+                    /* font rotates by bottom-left corner, try to keep top-left cnr on screen */
+                    if (font_angle - 270 > 0) {
+                        extra_y_off =
+                            sin((font_angle - 270) * M_PI / 180) * fontsize;
+                        if (D_u_to_d_row(n1) - D_get_d_north() <
+                            extra_y_off + grid_off)
+                            start_coord = -9999.;   /* wait until the next point south */
+                    }
+                }
+            }
+
+            G_format_easting(g, text, PROJECTION_LL);
+            D_text_rotation(font_angle);
+            D_text_size(fontsize, fontsize);
+            tx = start_coord + D_get_d_to_u_xconv() * (grid_off + 1.5);
+            ty = D_get_u_north() + D_get_d_to_u_yconv() * (border_off +
+                                                           extra_y_off);
+
+            if (bgcolor != 0) {
+                D_get_text_box(text, &bt, &bb, &bl, &br);
+                w = br - bl;
+                h = bt - bb;
+                bl = tx - w/2;
+                bt = ty + h/10;
+                br = tx + w + w/2;
+                bb = ty - h - h/10;
+                D_use_color(bgcolor);
+                D_box_abs(bl, bt, br, bb);
+            }
+
+            D_use_color(tcolor);
+            D_pos_abs(tx, ty);
+            D_text(text);
+        }
+        D_text_rotation(0.0);       /* reset */
     }
 
     return 0;
@@ -346,44 +551,44 @@ void init_proj(struct pj_info *info_in, struct pj_info *info_out, int wgs84)
     out_proj_keys = G_get_projinfo();
     out_unit_keys = G_get_projunits();
     if (pj_get_kv(info_out, out_proj_keys, out_unit_keys) < 0)
-	G_fatal_error(_("Can't get projection key values of current location"));
+        G_fatal_error(_("Can't get projection key values of current location"));
 
     /* In Info */
     if (!wgs84) {
-	/* Set lat/long to same ellipsoid as location if we're not looking
-	 * for the WGS84 values */
-	if (GPJ_get_equivalent_latlong(info_in, info_out) < 0)
-	    G_fatal_error(_("Unable to set up lat/long projection parameters"));
+        /* Set lat/long to same ellipsoid as location if we're not looking
+         * for the WGS84 values */
+        if (GPJ_get_equivalent_latlong(info_in, info_out) < 0)
+            G_fatal_error(_("Unable to set up lat/long projection parameters"));
 
     }
     else {
-	struct Key_Value *in_proj_info, *in_unit_info;
-	char buff[256], dum[256];
+        struct Key_Value *in_proj_info, *in_unit_info;
+        char buff[256], dum[256];
 
-	in_proj_info = G_create_key_value();
-	in_unit_info = G_create_key_value();
+        in_proj_info = G_create_key_value();
+        in_unit_info = G_create_key_value();
 
-	/* Check that datumparams are defined for this location (otherwise
-	 * the WGS84 values would be meaningless), and if they are set the 
-	 * input datum to WGS84 */
-	if (G_get_datumparams_from_projinfo(out_proj_keys, buff, dum) < 0)
-	    G_fatal_error(_("WGS84 grid output not possible as this location does not contain\n"
-			   "datum transformation parameters. Try running g.setproj."));
-	else
-	    G_set_key_value("datum", "wgs84", in_proj_info);
+        /* Check that datumparams are defined for this location (otherwise
+         * the WGS84 values would be meaningless), and if they are set the 
+         * input datum to WGS84 */
+        if (G_get_datumparams_from_projinfo(out_proj_keys, buff, dum) < 0)
+            G_fatal_error(_("WGS84 grid output not possible as this location does not contain\n"
+                           "datum transformation parameters. Try running g.setproj."));
+        else
+            G_set_key_value("datum", "wgs84", in_proj_info);
 
-	/* set input projection to lat/long */
-	G_set_key_value("proj", "ll", in_proj_info);
+        /* set input projection to lat/long */
+        G_set_key_value("proj", "ll", in_proj_info);
 
-	G_set_key_value("unit", "degree", in_unit_info);
-	G_set_key_value("units", "degrees", in_unit_info);
-	G_set_key_value("meters", "1.0", in_unit_info);
+        G_set_key_value("unit", "degree", in_unit_info);
+        G_set_key_value("units", "degrees", in_unit_info);
+        G_set_key_value("meters", "1.0", in_unit_info);
 
-	if (pj_get_kv(info_in, in_proj_info, in_unit_info) < 0)
-	    G_fatal_error(_("Unable to set up lat/long projection parameters"));
+        if (pj_get_kv(info_in, in_proj_info, in_unit_info) < 0)
+            G_fatal_error(_("Unable to set up lat/long projection parameters"));
 
-	G_free_key_value(in_proj_info);
-	G_free_key_value(in_unit_info);
+        G_free_key_value(in_proj_info);
+        G_free_key_value(in_unit_info);
     }
     G_free_key_value(out_proj_keys);
     G_free_key_value(out_unit_keys);
@@ -397,8 +602,8 @@ void init_proj(struct pj_info *info_in, struct pj_info *info_out, int wgs84)
  * Use Proj to get min max bounds of region in lat long
 ********************************************************/
 void get_ll_bounds(double *w, double *e, double *s, double *n,
-		   struct Cell_head window,
-		   struct pj_info info_in, struct pj_info info_out)
+                   struct Cell_head window,
+                   struct pj_info info_in, struct pj_info info_out)
 {
     double east, west, north, south;
     double e1, w1, n1, s1;
@@ -424,68 +629,68 @@ void get_ll_bounds(double *w, double *e, double *s, double *n,
     /* North */
     first = 0;
     for (ew = window.west; ew <= window.east; ew += ew_res) {
-	e1 = ew;
-	n1 = window.north;
-	if (pj_do_proj(&e1, &n1, &info_out, &info_in) < 0)
-	    G_fatal_error(_("Error in pj_do_proj"));
-	if (!first) {
-	    north = n1;
-	    first = 1;
-	}
-	else {
-	    if (n1 > north)
-		north = n1;
-	}
+        e1 = ew;
+        n1 = window.north;
+        if (pj_do_proj(&e1, &n1, &info_out, &info_in) < 0)
+            G_fatal_error(_("Error in pj_do_proj"));
+        if (!first) {
+            north = n1;
+            first = 1;
+        }
+        else {
+            if (n1 > north)
+                north = n1;
+        }
     }
     /*South */
     first = 0;
     for (ew = window.west; ew <= window.east; ew += ew_res) {
-	e1 = ew;
-	s1 = window.south;
-	if (pj_do_proj(&e1, &s1, &info_out, &info_in) < 0)
-	    G_fatal_error(_("Error in pj_do_proj"));
-	if (!first) {
-	    south = s1;
-	    first = 1;
-	}
-	else {
-	    if (s1 < south)
-		south = s1;
-	}
+        e1 = ew;
+        s1 = window.south;
+        if (pj_do_proj(&e1, &s1, &info_out, &info_in) < 0)
+            G_fatal_error(_("Error in pj_do_proj"));
+        if (!first) {
+            south = s1;
+            first = 1;
+        }
+        else {
+            if (s1 < south)
+                south = s1;
+        }
     }
 
     /*East */
     first = 0;
     for (ns = window.south; ns <= window.north; ns += ns_res) {
-	e1 = window.east;
-	n1 = ns;
-	if (pj_do_proj(&e1, &n1, &info_out, &info_in) < 0)
-	    G_fatal_error(_("Error in pj_do_proj"));
-	if (!first) {
-	    east = e1;
-	    first = 1;
-	}
-	else {
-	    if (e1 > east)
-		east = e1;
-	}
+        e1 = window.east;
+        n1 = ns;
+        if (pj_do_proj(&e1, &n1, &info_out, &info_in) < 0)
+            G_fatal_error(_("Error in pj_do_proj"));
+        if (!first) {
+            east = e1;
+            first = 1;
+        }
+        else {
+            if (e1 > east)
+                east = e1;
+        }
     }
 
     /*West */
     first = 0;
     for (ns = window.south; ns <= window.north; ns += ns_res) {
-	w1 = window.west;
-	n1 = ns;
-	if (pj_do_proj(&w1, &n1, &info_out, &info_in) < 0)
-	    G_fatal_error(_("Error in pj_do_proj"));
-	if (!first) {
-	    west = w1;
-	    first = 1;
-	}
-	else {
-	    if (w1 < west)
-		west = w1;
-	}
+        w1 = window.west;
+        n1 = ns;
+        if (pj_do_proj(&w1, &n1, &info_out, &info_in) < 0)
+            G_fatal_error(_("Error in pj_do_proj"));
+        if (!first) {
+            west = w1;
+            first = 1;
+        }
+        else {
+            if (w1 < west)
+                west = w1;
+        }
     }
 
     *w = west;
@@ -502,12 +707,12 @@ void get_ll_bounds(double *w, double *e, double *s, double *n,
 ********************************************************/
 void
 check_coords(double e,
-	     double n,
-	     double *lon,
-	     double *lat,
-	     int par,
-	     struct Cell_head w,
-	     struct pj_info info_in, struct pj_info info_out)
+             double n,
+             double *lon,
+             double *lat,
+             int par,
+             struct Cell_head w,
+             struct pj_info info_in, struct pj_info info_out)
 {
     double x, y;
     int proj = 0;
@@ -516,51 +721,51 @@ check_coords(double e,
     *lon = x = e;
 
     if (e < w.west) {
-	x = w.west;
-	proj = 1;
+        x = w.west;
+        proj = 1;
     }
     if (e > w.east) {
-	x = w.east;
-	proj = 1;
+        x = w.east;
+        proj = 1;
     }
     if (n < w.south) {
-	y = w.south;
-	proj = 1;
+        y = w.south;
+        proj = 1;
     }
     if (n > w.north) {
-	y = w.north;
-	proj = 1;
+        y = w.north;
+        proj = 1;
     }
 
     if (proj) {
-	/* convert original coords to ll */
-	if (pj_do_proj(&e, &n, &info_out, &info_in) < 0)
-	    G_fatal_error(_("Error in pj_do_proj1"));
-
-	if (par == 1) {
-	    /* lines of latitude -- const. northing */
-	    /* convert correct UTM to ll */
-	    if (pj_do_proj(&x, &y, &info_out, &info_in) < 0)
-		G_fatal_error(_("Error in pj_do_proj2"));
-
-	    /* convert new ll back to coords */
-	    if (pj_do_proj(&x, &n, &info_in, &info_out) < 0)
-		G_fatal_error(_("Error in pj_do_proj3"));
-	    *lat = n;
-	    *lon = x;
-	}
-	if (par == 2) {
-	    /* lines of longitude -- const. easting */
-	    /* convert correct UTM to ll */
-	    if (pj_do_proj(&x, &y, &info_out, &info_in) < 0)
-		G_fatal_error(_("Error in pj_do_proj5"));
-
-	    /* convert new ll back to coords */
-	    if (pj_do_proj(&e, &y, &info_in, &info_out) < 0)
-		G_fatal_error(_("Error in pj_do_proj6"));
-	    *lat = y;
-	    *lon = e;
-	}
+        /* convert original coords to ll */
+        if (pj_do_proj(&e, &n, &info_out, &info_in) < 0)
+            G_fatal_error(_("Error in pj_do_proj1"));
+
+        if (par == 1) {
+            /* lines of latitude -- const. northing */
+            /* convert correct UTM to ll */
+            if (pj_do_proj(&x, &y, &info_out, &info_in) < 0)
+                G_fatal_error(_("Error in pj_do_proj2"));
+
+            /* convert new ll back to coords */
+            if (pj_do_proj(&x, &n, &info_in, &info_out) < 0)
+                G_fatal_error(_("Error in pj_do_proj3"));
+            *lat = n;
+            *lon = x;
+        }
+        if (par == 2) {
+            /* lines of longitude -- const. easting */
+            /* convert correct UTM to ll */
+            if (pj_do_proj(&x, &y, &info_out, &info_in) < 0)
+                G_fatal_error(_("Error in pj_do_proj5"));
+
+            /* convert new ll back to coords */
+            if (pj_do_proj(&e, &y, &info_in, &info_out) < 0)
+                G_fatal_error(_("Error in pj_do_proj6"));
+            *lat = y;
+            *lon = e;
+        }
     }
 
     return;
@@ -576,32 +781,32 @@ float get_heading(double rows, double cols)
 
     /* NE Quad or due south */
     if (rows < 0 && cols <= 0) {
-	azi = RAD_TO_DEG * atan((cols / rows));
-	if (azi < 0.)
-	    azi *= -1.;
+        azi = RAD_TO_DEG * atan((cols / rows));
+        if (azi < 0.)
+            azi *= -1.;
     }
     /* SE Quad or due east */
     if (rows >= 0 && cols < 0) {
-	azi = RAD_TO_DEG * atan((rows / cols));
-	if (azi < 0.)
-	    azi *= -1.;
-	azi = 90. + azi;
+        azi = RAD_TO_DEG * atan((rows / cols));
+        if (azi < 0.)
+            azi *= -1.;
+        azi = 90. + azi;
     }
 
     /* SW Quad or due south */
     if (rows > 0 && cols >= 0) {
-	azi = RAD_TO_DEG * atan((rows / cols));
-	if (azi < 0.)
-	    azi *= -1.;
-	azi = 270. - azi;
+        azi = RAD_TO_DEG * atan((rows / cols));
+        if (azi < 0.)
+            azi *= -1.;
+        azi = 270. - azi;
     }
 
     /* NW Quad or due south */
     if (rows <= 0 && cols > 0) {
-	azi = RAD_TO_DEG * atan((rows / cols));
-	if (azi < 0.)
-	    azi *= -1.;
-	azi = 270. + azi;
+        azi = RAD_TO_DEG * atan((rows / cols));
+        if (azi < 0.)
+            azi *= -1.;
+        azi = 270. + azi;
     }
 
     return (azi);
diff --git a/display/d.grid/plotborder.c b/display/d.grid/plotborder.c
index 2cf5e9b..2621646 100644
--- a/display/d.grid/plotborder.c
+++ b/display/d.grid/plotborder.c
@@ -15,19 +15,19 @@ int plot_border(double grid_size, double east, double north, int direction)
     /* FIXME: pull right and bottom edges back one pixel; display lib bug? */
     row_dist = D_d_to_u_row(0.) - D_d_to_u_row(1.);
     colm_dist = D_d_to_u_col(1.) - D_d_to_u_col(0.);
-/*     window.south += row_dist;
+    /*     window.south += row_dist;
        window.east -= colm_dist;
- */
+     */
 
-    steps = grid_size / 10.;	/* tick marks number */
-    shortmark = 180.;		/* tick marks length */
+    steps = grid_size / 10.;    /* tick marks number */
+    shortmark = 180.;           /* tick marks length */
     middlemark = 90.;
     longmark = 45.;
 
 
     /* plot boundary lines: */
     /* horizontal : */
-    D_line_abs(window.west, window.south, window.east + colm_dist, window.south); /* display lib bug? */
+    D_line_abs(window.west, window.south, window.east + colm_dist, window.south);       /* display lib bug? */
     D_line_abs(window.west, window.north, window.east, window.north);
 
     /* vertical : */
@@ -37,86 +37,103 @@ int plot_border(double grid_size, double east, double north, int direction)
 
     /* Draw ticks along top and bottom borders */
     if (window.west < east)
-	x = floor((window.west - east) / grid_size) * grid_size + east;
+        x = floor((window.west - east) / grid_size) * grid_size + east;
     else
-	x = east - ceil((east - window.west) / grid_size) * grid_size;
+        x = east - ceil((east - window.west) / grid_size) * grid_size;
 
     if (direction != DIRN_LAT) {
-	while (x <= window.east) {
-	    loop = 0;
-
-	    for (i = 0; i <= grid_size; i = i + steps) {
-		if (x + i < window.west || x + i > window.east) {
-		    loop++;
-		    continue;
-		}
-
-		if (loop == 0) {
-		    D_line_abs(x + i,
-			      window.south + (window.north - window.south) / longmark, x + i,
-			      window.south);
-		    D_line_abs(x + i, window.north, x + i,
-			       window.north - row_dist - (window.north - window.south) / longmark);
-		}
-		if (loop == 5) {
-		    D_line_abs(x + i,
-			       window.south + (window.north - window.south) / middlemark, x + i,
-			       window.south);
-		    D_line_abs(x + i, window.north, 
-			       x + i, window.north - row_dist - (window.north - window.south) / middlemark);
-		}
-		else {
-		    D_line_abs(x + i,
-			       window.south + (window.north - window.south) / shortmark, x + i,
-			       window.south);
-		    D_line_abs(x + i, window.north,
-			       x + i, window.north - row_dist - (window.north - window.south) / shortmark);
-		}
-		loop++;
-	    }
-	    x += grid_size;
-	}
+        while (x <= window.east) {
+            loop = 0;
+
+            for (i = 0; i <= grid_size; i = i + steps) {
+                if (x + i < window.west || x + i > window.east) {
+                    loop++;
+                    continue;
+                }
+
+                if (loop == 0) {
+                    D_line_abs(x + i,
+                               window.south + (window.north -
+                                               window.south) / longmark,
+                               x + i, window.south);
+                    D_line_abs(x + i, window.north, x + i,
+                               window.north - row_dist - (window.north -
+                                                          window.south) /
+                               longmark);
+                }
+                if (loop == 5) {
+                    D_line_abs(x + i,
+                               window.south + (window.north -
+                                               window.south) / middlemark,
+                               x + i, window.south);
+                    D_line_abs(x + i, window.north, x + i,
+                               window.north - row_dist - (window.north -
+                                                          window.south) /
+                               middlemark);
+                }
+                else {
+                    D_line_abs(x + i,
+                               window.south + (window.north -
+                                               window.south) / shortmark,
+                               x + i, window.south);
+                    D_line_abs(x + i, window.north, x + i,
+                               window.north - row_dist - (window.north -
+                                                          window.south) /
+                               shortmark);
+                }
+                loop++;
+            }
+            x += grid_size;
+        }
     }
 
 
     /* Draw ticks along left & right borders */
     if (window.south > north)
-	y = floor((window.south - north) / grid_size) * grid_size + north;
+        y = floor((window.south - north) / grid_size) * grid_size + north;
     else
-	y = north - ceil((north - window.south) / grid_size) * grid_size;
+        y = north - ceil((north - window.south) / grid_size) * grid_size;
 
     if (direction != DIRN_LON) {
-	while (y <= window.north) {
-	    loop = 0;
-
-	    for (i = 0; i <= grid_size; i = i + steps) {
-		if (y + i < window.south || y + i > window.north) {
-		    loop++;
-		    continue;
-		}
-
-		if (loop == 0) {
-		    D_line_abs(window.west, y + i,
-			       window.west + (window.east - window.west) / longmark, y + i);
-		    D_line_abs(window.east - (window.east - window.west) / longmark, y + i,
-			       window.east, y + i);
-		}
-		if (loop == 5) {
-		    D_line_abs(window.west, y + i,
-			       window.west + (window.east - window.west) / middlemark, y + i);
-		    D_line_abs(window.east - (window.east - window.west) / middlemark, y + i,
-			       window.east, y + i);
-		}
-		else {
-		    D_line_abs(window.west, y + i,
-			       window.west + (window.east - window.west) / shortmark, y + i);
-		    D_line_abs(window.east - (window.east - window.west) / shortmark, y + i,
-			       window.east, y + i);
-		}
-		loop++;
-	    }
-	    y += grid_size;
-	}
+        while (y <= window.north) {
+            loop = 0;
+
+            for (i = 0; i <= grid_size; i = i + steps) {
+                if (y + i < window.south || y + i > window.north) {
+                    loop++;
+                    continue;
+                }
+
+                if (loop == 0) {
+                    D_line_abs(window.west, y + i,
+                               window.west + (window.east -
+                                              window.west) / longmark, y + i);
+                    D_line_abs(window.east -
+                               (window.east - window.west) / longmark, y + i,
+                               window.east, y + i);
+                }
+                if (loop == 5) {
+                    D_line_abs(window.west, y + i,
+                               window.west + (window.east -
+                                              window.west) / middlemark,
+                               y + i);
+                    D_line_abs(window.east -
+                               (window.east - window.west) / middlemark,
+                               y + i, window.east, y + i);
+                }
+                else {
+                    D_line_abs(window.west, y + i,
+                               window.west + (window.east -
+                                              window.west) / shortmark,
+                               y + i);
+                    D_line_abs(window.east -
+                               (window.east - window.west) / shortmark, y + i,
+                               window.east, y + i);
+                }
+                loop++;
+            }
+            y += grid_size;
+        }
     }
 
     return 0;
diff --git a/display/d.his/d.his.html b/display/d.his/d.his.html
index e732f18..286503c 100644
--- a/display/d.his/d.his.html
+++ b/display/d.his/d.his.html
@@ -130,4 +130,4 @@ d.his hue=elevation intensity=elevation_shaded_relief brighten=50
 
 James Westervelt, U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-20 05:56:06 +0100 (Sat, 20 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/display/d.info/main.c b/display/d.info/main.c
index d520c5d..4fb0e96 100644
--- a/display/d.info/main.c
+++ b/display/d.info/main.c
@@ -4,7 +4,7 @@
  * MODULE:       d.info
  * AUTHOR(S):    Glynn Clements
  * PURPOSE:      Display information about the active display monitor
- * COPYRIGHT:    (C) 2004, 2012 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2004-2015 by the GRASS Development Team
  *
  *               This program is free software under the GNU General Public
  *               License (>=v2). Read the file COPYING that comes with GRASS
@@ -14,6 +14,9 @@
 
 #include <stdlib.h>
 #include <stdio.h>
+#include <dirent.h>
+#include <string.h>
+
 #include <grass/gis.h>
 #include <grass/display.h>
 #include <grass/glocale.h>
@@ -62,8 +65,8 @@ int main(int argc, char *argv[])
     gflag->description =
 	_("Display geographic coordinates and resolution of entire frame");
 
-    G_option_required(rflag, dflag, fflag, eflag, bflag, gflag, NULL); 
-
+    G_option_required(rflag, dflag, fflag, eflag, bflag, gflag, NULL);
+    
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
@@ -118,7 +121,7 @@ int main(int argc, char *argv[])
 	fprintf(stdout, "nsres=%.15g\n", -D_get_d_to_u_yconv() );
     }
 
-    
+   
     D_close_driver();
 
     exit(EXIT_SUCCESS);
diff --git a/display/d.legend.vect/Makefile b/display/d.legend.vect/Makefile
new file mode 100644
index 0000000..19aacaa
--- /dev/null
+++ b/display/d.legend.vect/Makefile
@@ -0,0 +1,12 @@
+MODULE_TOPDIR = ../..
+
+PGM = d.legend.vect
+
+LIBES = $(DISPLAYLIB) $(GISLIB) $(SYMBLIB) 
+DEPENDENCIES = $(DISPLAYDEP) $(GISDEP) $(SYMBDEP)
+EXTRA_INC = $(VECT_INC)
+EXTRA_CFLAGS = $(VECT_CFLAGS)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+default: cmd
diff --git a/display/d.legend.vect/d.legend.vect.html b/display/d.legend.vect/d.legend.vect.html
new file mode 100644
index 0000000..6b33856
--- /dev/null
+++ b/display/d.legend.vect/d.legend.vect.html
@@ -0,0 +1,107 @@
+<h2>DESCRIPTION</h2>
+Module <em>d.legend.vect</em> draws vector legend of currently displayed vector maps.
+<p>
+Parameter <b>at</b> defines the screen position of upper-left legend corner.
+Parameter <b>columns</b> defines the number of legend columns.
+User can specify a title of the legend using parameter <b>title</b>.
+The font of the title can be changed with <b>title_font</b>, <b>title_fontsize</b>.
+Flag <b>-b</b> is used to draw background of specified color (<b>bgcolor</b>),
+border color and border width (<b>border_color</b> and <b>border_width</b>).
+Parameter <b>symbol_size</b> defines the size of line and area symbols.
+The size of point symbols is based on currently set symbology of vector maps using
+<em><a href="d.vect.html">d.vect</a></em> or
+<em><a href="d.vect.thematic.html">d.vect.thematic</a></em>.
+<p>Module <em>d.vect.legend</em> supports subtitles (see section Notes).
+Their font and font size can be set using parameters <b>sub_font</b>
+and <b>sub_fontsize</b>.
+
+<h3>Changing legend symbols and labels</h3>
+Symbols for vector areas and lines, and labels for individual vector labels
+can be changed in the symbology setting of each vector map in
+<em><a href="d.vect.html">d.vect</a></em> or
+<em><a href="d.vect.thematic.html">d.vect.thematic</a></em>
+module (in Legend tab). Use its parameters
+<b>icon_area</b> and <b>icon_line</b> to pick from available symbols.
+By using parameter <b>legend_label</b> of <em>d.vect</em> module, users can change
+the default label, which is the map name.
+
+<h3>Modifying the order of legend entries and omitting certain vector maps
+from legend</h3>
+Modules <em><a href="d.vect.html">d.vect</a></em> and 
+<em><a href="d.vect.thematic.html">d.vect.thematic</a></em>
+have a flag <b>-s</b>
+which removes the particular vector or thematic vector from vector legend.
+<p>The order of entries is defined by the order in Layer Manager (if used
+in GRASS GIS GUI). If that's not desired, one can export the legend file
+into a text file using parameter <b>output</b>, change the order of entries
+(see section Notes for format description) and then upload the modified file
+with parameter <b>input</b>.
+Parameter <b>output</b> defines path to the file where the internal legend
+file will be saved to, <b>input</b> defines the input file which
+the vector legend will be based on (input file must have correct format).
+
+<h2>NOTES</h2>
+Module <em>d.legend.vect</em> draws vector legend based on legend file defined
+in shell environment variable GRASS_LEGEND_FILE.
+This file is automatically created and updated whenever
+<em><a href="d.vect.html">d.vect</a></em> command is used.
+User can create custom legend file and then use 
+<em>export GRASS_LEGEND_FILE=path/to/file</em> in shell.
+GRASS GUI and MONITORS create the legend file automatically.
+By default the legend file is stored in grassdata/location/mapset/.tmp/user
+directory (in case of d.mon deeper in /monitor_name directory).<br>
+<p>
+Legend file has this format:
+<pre>
+label|symbol_name|size|color_type|feature_color|fill_color|line_width|geometry_type|feature_count
+</pre>
+Color type can be 'lf' or 'ps'. Based on color type color columns are interpreted
+as line color and fill colors (lf), or primary and secondary colors (ps).
+Module d.vect always uses 'lf' and d.vect.thematic 'ps'.
+Here is an example of legend file with subtitles:
+<pre>
+Infrastructure||||||||
+major roads|legend/line|5|lf|black|200:200:200|2|line|355
+bridges|extra/bridge|15|lf|black|black|1|point|10938
+Hydrology||||||||
+streams|legend/line_crooked|5|lf|30:144:255|200:200:200|3|line|8554
+water bodies|legend/area_curved|5|lf|none|30:144:255|1|area|27764
+</pre>
+<img alt="Example of subheadings used in vector legend"
+ src="d_legend_vect_subheadings.png">
+
+<h2>EXAMPLES</h2>
+Open cairo monitor to render to file:
+<div class="code"><pre>
+g.region vector=nc_state
+d.mon cairo
+d.vect map=nc_state color=26:26:26 fill_color=229:229:229 width=2 legend_label="state boundaries"
+d.vect map=urbanarea color=none fill_color=127:127:127 width=1 legend_label="urban areas"
+d.vect map=railroads color=red width=1
+d.vect map=hospitals color=77:77:77 fill_color=0:187:0 width=1 icon=basic/cross3 size=10
+d.legend.vect -b at=2,40 title="Hospitals in North Carolina" symbol_size=26 fontsize=16 title_fontsize=20
+</pre></div>
+
+<center>
+<img src="d_legend_vect.png" alt="d.legend.vect example"><br>
+</center>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="d.vect.html">d.vect</a>,
+<a href="d.vect.thematic.html">d.vect.thematic</a>,
+<a href="d.legend.html">d.legend</a>
+</em>
+
+<p>
+Check also Python module from
+AddOns: <em><a href="http://grass.osgeo.org/grass70/manuals/addons/d.vect.thematic2.html">d.vect.thematic2</a></em>
+
+<h2>AUTHOR</h2>
+
+Adam Laza, during GSoC 2016
+Mentors: Anna Petrasova, Vaclav Petras, Martin Landa
+
+<p>
+<i>Last changed: $Date: 2016-10-16 05:22:49 +0200 (Sun, 16 Oct 2016) $</i>
diff --git a/display/d.legend.vect/d_legend_vect.png b/display/d.legend.vect/d_legend_vect.png
new file mode 100644
index 0000000..ceae422
Binary files /dev/null and b/display/d.legend.vect/d_legend_vect.png differ
diff --git a/display/d.legend.vect/d_legend_vect_subheadings.png b/display/d.legend.vect/d_legend_vect_subheadings.png
new file mode 100644
index 0000000..84577ec
Binary files /dev/null and b/display/d.legend.vect/d_legend_vect_subheadings.png differ
diff --git a/display/d.legend.vect/draw.c b/display/d.legend.vect/draw.c
new file mode 100644
index 0000000..395d0cf
--- /dev/null
+++ b/display/d.legend.vect/draw.c
@@ -0,0 +1,293 @@
+/* draw.c:
+ *
+ *    With do_bg=1 compute position of all legend graphic item and draw only background.
+ *    Eith do_bg=0 compute position of all legend graphic item and draw all.
+ *
+ *    Copyright (C) 2016 by Adam Laza, GSoC 2016, and the GRASS Development Team*
+ *    This program is free software under the GPL (>=v2)
+ *    Read the COPYING file that comes with GRASS for details.
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <grass/display.h>
+#include <grass/glocale.h>
+#include <grass/colors.h>
+#include "local_proto.h"
+
+void draw(char *file_name, double LL, double LT, char *title, int cols, int bgcolor,
+          int bcolor, int bg_width, int do_bg, char* tit_font, int tit_size, char *sub_font,
+          int sub_size, char *font, int fontsize, int fontcolor, int symb_size, char *sep)
+{
+    double db, dt, dl, dr;
+    double bb, bt, bl, br;
+    double x0, y0;
+    double offs_y, row_ind, offs_x;
+    double x, y;
+    FILE *file_in;
+    char buf[BUFFSIZE];
+    int got_new;
+    SYMBOL *Symb;
+    char *symb_name, *line_color_str, *fill_color_str, *label, *type_str, *color_type;
+    double size, line_width;
+    double row_w, text_h, title_h, title_w;
+    RGBA_Color *line_color, *fill_color;
+    int ret, R, G, B;
+    char *part, *sub_delim;
+    double maxlblw, sym_lbl_space;
+    double symb_h, symb_w, def_symb_h, def_symb_w;
+    int item_count, item;
+    double it_per_col;
+    double margin, bg_h, bg_w;
+    char **tokens;
+
+
+    D_get_src(&dt, &db, &dl, &dr);
+    x0 = dl + (int)((dr - dl) * LL / 100.);
+    y0 = dt + (int)((db - dt) * (100 - LT) / 100.);
+
+    /* Draw title */
+    title_h = 0;
+    if (strlen(title) > 0) {
+        D_font(tit_font);
+        D_text_size(tit_size, tit_size);
+        D_get_text_box(title, &bb, &bt, &bl, &br);
+        margin = 10;
+        title_h = bb - bt + margin;
+        title_w = br - bl;
+        if (! do_bg) {
+            x = x0;
+            y = y0 + title_h;
+            D_pos_abs(x, y);
+            D_use_color(fontcolor);
+            D_text(title);
+        }
+    }
+
+    file_in = fopen(file_name, "r");
+    sub_delim = G_malloc(GNAME_MAX);
+    snprintf(sub_delim, sizeof(GNAME_MAX), "%s%s%s%s%s%s", sep, sep, sep, sep, sep, sep);
+    if (!file_in)
+        G_fatal_error(_("Unable to open input file <%s>"), file_name);
+
+    /* Get number of legend row(item) and the biggest symbol*/
+    item_count = 0;
+    def_symb_w = symb_size;
+
+    got_new = G_getl2(buf, sizeof(buf), file_in);
+    G_strip(buf);
+    while (got_new) {
+        if (strstr(buf, sub_delim) == NULL) {
+            /* Get the maximum symbol size */
+            tokens = G_tokenize(buf, sep);
+            symb_name = G_store(tokens[1]);
+            size = atof(tokens[2]);
+            type_str = G_store(tokens[7]);
+            G_free_tokens(tokens);
+
+            /* Symbol */
+            if (((strcmp(type_str,"point") != 0) && (strcmp(type_str, "centroid") != 0)) || size < 0) {
+                size = symb_size;
+            }
+            Symb = S_read(symb_name);
+            if (Symb == NULL)
+                G_warning(_("Cannot read symbol"));
+            else
+                S_stroke(Symb, size, 0, 0);
+            symb_w = size;
+
+            if (symb_w > def_symb_w)
+                def_symb_w = symb_w;
+        }
+        item_count++;
+        got_new = G_getl2(buf, sizeof(buf), file_in);
+        G_strip(buf);
+    }
+    rewind(file_in);
+    it_per_col = ceil(item_count / (cols * 1.0));
+
+    bg_h = 0;
+    maxlblw = 0;
+    offs_y = title_h;
+    sym_lbl_space = 10;
+    def_symb_h = symb_size;
+    item = 0;
+    offs_x = 0;
+    margin = 10;
+
+    got_new = G_getl2(buf, sizeof(buf), file_in);
+    G_strip(buf);
+
+    while (got_new) {
+        if (item < it_per_col){
+            row_ind = 5;
+            item++;
+        }
+        else {
+            if (bg_h < offs_y)
+                bg_h = offs_y + def_symb_h/2.;
+            offs_x += maxlblw + margin;
+            offs_y = title_h + row_ind;
+            maxlblw = 0;
+            item = 1;
+            row_ind = 0;
+        }
+        if (strstr(buf, sub_delim) != NULL) {
+            /* Group subtitle */
+            label = G_malloc(GNAME_MAX);
+            part = strtok(buf, sep);
+            label = G_store(part);
+
+            D_text_size(sub_size, sub_size);
+            D_font(sub_font);
+            D_get_text_box(label, &bb, &bt, &bl, &br);
+            text_h = bb - bt;
+            row_w = br - bl;
+            offs_y += text_h + row_ind;
+            if (bg_h < offs_y)
+                bg_h = offs_y + def_symb_h/2.;
+            if (row_w > maxlblw)
+                maxlblw = row_w;
+
+            if (! do_bg) {
+                x = x0 + offs_x;
+                y = y0 + offs_y;
+                D_pos_abs(x, y);
+                D_use_color(fontcolor);
+                D_text(label);
+            }
+        }
+        else {
+            /* Map layers */
+            line_color = G_malloc(sizeof(RGBA_Color));
+            fill_color = G_malloc(sizeof(RGBA_Color));
+
+            tokens = G_tokenize(buf, sep);
+            label = G_store(tokens[0]);
+            symb_name = G_store(tokens[1]);
+            size = atof(tokens[2]);
+            color_type = G_store(tokens[3]);
+            line_color_str = G_store(tokens[4]);
+            fill_color_str = G_store(tokens[5]);
+            line_width = atof(tokens[6]);
+            type_str = G_store(tokens[7]);
+            G_free_tokens(tokens);
+
+            /* Symbol */
+            if (((strcmp(type_str,"point") != 0) && (strcmp(type_str, "centroid") != 0)) || size < 0) {
+                size = symb_size;
+            }
+            Symb = S_read(symb_name);
+            if (Symb == NULL)
+                G_warning(_("Cannot read symbol"));
+            else
+                S_stroke(Symb, size, 0, 0);
+
+            /* parse line color */
+            ret = G_str_to_color(line_color_str, &R, &G, &B);
+            line_color->r = (unsigned char)R;
+            line_color->g = (unsigned char)G;
+            line_color->b = (unsigned char)B;
+            if (ret == 1)
+                /* here alpha is only used as an on/off switch, otherwise unused by the display drivers */
+                line_color->a = RGBA_COLOR_OPAQUE;
+            else if (ret == 2)
+                line_color->a = RGBA_COLOR_NONE;
+            else
+                G_warning(_("[%s]: No such color"), line_color_str);
+            /* parse fill color */
+            ret = G_str_to_color(fill_color_str, &R, &G, &B);
+            fill_color->r = (unsigned char)R;
+            fill_color->g = (unsigned char)G;
+            fill_color->b = (unsigned char)B;
+            if (ret == 1)
+                fill_color->a = RGBA_COLOR_OPAQUE;
+            else if (ret == 2)
+                fill_color->a = RGBA_COLOR_NONE;
+            else
+                G_warning(_("[%s]: No such color"), fill_color_str);
+
+            /* Label */
+            D_text_size(fontsize, fontsize);
+            D_font(font);
+            D_get_text_box(label, &bb, &bt, &bl, &br);
+
+            symb_h = size;
+            if (symb_h < def_symb_h)
+                symb_h = def_symb_h;
+
+            text_h = bb - bt;
+            row_w = def_symb_w + sym_lbl_space + br - bl;
+            if (symb_h >= text_h)
+                offs_y += symb_h + row_ind;
+            else
+                offs_y += text_h + row_ind;
+
+            if (bg_h <= offs_y)
+                bg_h = offs_y + symb_h/2.;
+            if (row_w > maxlblw)
+                maxlblw = row_w;
+
+            if (! do_bg) {
+                S_stroke(Symb, size, 0, 0);
+                x = x0 + offs_x + def_symb_w/2.;
+                y = y0 + offs_y - symb_h/2;
+                D_line_width(line_width);
+                /* lf - line, fill (as in d.vect)*/
+                if (strcmp(color_type, "lf") == 0)
+                    D_symbol(Symb, x, y, line_color, fill_color);
+                /* ps - primary, secondary (as in d.vect.thematic) */
+                else if (strcmp(color_type, "ps") == 0)
+                    D_symbol2(Symb, x, y, line_color, fill_color);
+                else {
+                    G_warning(_("Invalid value for color type in legend file. "
+                                "Use one of 'lf' or 'ps'."));
+                    D_symbol(Symb, x, y, line_color, fill_color);
+                }
+                x = x0 + offs_x + def_symb_w + sym_lbl_space;
+                y = y0 + offs_y - symb_h/2. + text_h/2.;
+                D_pos_abs(x, y);
+                D_use_color(fontcolor);
+                D_text(label);
+            }
+        }
+
+        got_new = G_getl2(buf, sizeof(buf), file_in);
+        G_strip(buf);
+    }
+
+    fclose(file_in);
+
+    /* Draw background */
+    if (do_bg) {
+        double x0bg, y0bg, x1bg, y1bg;
+        if (title_w > offs_x + maxlblw)
+            bg_w = title_w;
+        else
+            bg_w = offs_x + maxlblw;
+
+        x0bg = x0 - margin;
+        y0bg = y0;
+        x1bg = x0 + bg_w + margin;
+        y1bg = y0 + bg_h;
+
+        if (bgcolor) {
+            D_use_color(bgcolor);
+            D_box_abs(x0bg, y0bg, x1bg, y1bg);
+        }
+
+        D_use_color(bcolor);
+        D_line_width(bg_width);
+        D_begin();
+        D_move_abs(x0bg, y0bg);
+        D_cont_abs(x0bg, y1bg);
+        D_cont_abs(x1bg, y1bg);
+        D_cont_abs(x1bg, y0bg);
+        D_close();
+        D_end();
+        D_stroke();
+    }
+
+    D_save_command(G_recreate_command());
+}
diff --git a/display/d.legend.vect/local_proto.h b/display/d.legend.vect/local_proto.h
new file mode 100644
index 0000000..70c6fe3
--- /dev/null
+++ b/display/d.legend.vect/local_proto.h
@@ -0,0 +1,5 @@
+#define BUFFSIZE 512
+
+/* draw.c */
+void draw(char *, double, double, char *, int, int, int, int,
+          int, char *, int, char *, int, char *, int, int, int, char *);
diff --git a/display/d.legend.vect/main.c b/display/d.legend.vect/main.c
new file mode 100644
index 0000000..72a052f
--- /dev/null
+++ b/display/d.legend.vect/main.c
@@ -0,0 +1,294 @@
+/*
+ ****************************************************************************
+ *
+ * MODULE:       d.vect.legend
+ * AUTHOR(S):    Adam Laza, CTU, GSoC 2016
+ * PURPOSE:      Display a vector layer
+ * COPYRIGHT:    (C) 2007-2016 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the file COPYING that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <grass/display.h>
+#include <grass/glocale.h>
+#include "local_proto.h"
+
+
+int main(int argc, char **argv)
+{
+    struct GModule *module;
+//    struct Option *opt_input, *opt_sep;
+    struct Option *opt_at, *opt_cols, *opt_font, *opt_fontsize,
+            *opt_fontcolor, *opt_title, *opt_tit_font, *opt_tit_fontsize, *opt_sub_font,
+            *opt_sub_fontsize, *opt_bcolor, *opt_bgcolor, *opt_symb_size,
+            *opt_bg_width, *opt_output, *opt_input, *opt_sep;
+    struct Flag *fl_bg;
+
+    double LL, LT;
+    char *title, *file_name;
+    int bcolor, bgcolor, do_bg;
+    int fontsize, fontcolor, tit_size, sub_size;
+    char *font, *tit_font, *sub_font;
+    int cols, symb_size, bg_width;
+    char *out_file;
+    FILE *source;
+    char buf[BUFFSIZE];
+    char *sep;
+    size_t nread;
+
+
+    /* Initialize the GIS calls */
+    G_gisinit(argv[0]);
+
+    module = G_define_module();
+    G_add_keyword(_("display"));
+    G_add_keyword(_("cartography"));
+    G_add_keyword(_("vector"));
+    G_add_keyword(_("legend"));
+    module->description =
+    _("Displays a vector legend "
+      "in the active graphics frame.");
+
+    opt_at = G_define_option();
+    opt_at->key = "at";
+    opt_at->key_desc = "left,top";
+    opt_at->type = TYPE_DOUBLE;
+    opt_at->options = "0-100";
+    opt_at->answer = "10,40";
+    opt_at->required = NO;
+    opt_at->description =
+    _("Screen position of legend to be drawn (percentage, [0,0] is lower left)");
+
+    opt_cols = G_define_option();
+    opt_cols->key = "columns";
+    opt_cols->type = TYPE_INTEGER;
+    opt_cols->answer = "1";
+    opt_cols->required = NO;
+    opt_cols->description =
+    _("Number of legend columns");
+    opt_cols->guisection = _("Layout");
+
+    opt_title = G_define_option();
+    opt_title->key = "title";
+    opt_title->type = TYPE_STRING;
+    opt_title->required = NO;
+    opt_title->description = _("Legend title");
+    opt_title->guisection = _("Title");
+
+    opt_symb_size = G_define_option();
+    opt_symb_size->key = "symbol_size";
+    opt_symb_size->type = TYPE_INTEGER;
+    opt_symb_size->required = NO;
+    opt_symb_size->description = _("Symbol size");
+    opt_symb_size->answer = "20";
+    opt_symb_size->guisection = _("Layout");
+
+    opt_bcolor = G_define_standard_option(G_OPT_CN);
+    opt_bcolor->key = "border_color";
+    opt_bcolor->answer = "black";
+    opt_bcolor->label = _("Border color");
+    opt_bcolor->guisection = _("Background");
+
+    opt_bgcolor = G_define_standard_option(G_OPT_CN);
+    opt_bgcolor->key = "bgcolor";
+    opt_bgcolor->answer = "white";
+    opt_bgcolor->label = _("Background color");
+    opt_bgcolor->guisection = _("Background");
+
+    opt_bg_width = G_define_option();
+    opt_bg_width->type = TYPE_INTEGER;
+    opt_bg_width->key = "border_width";
+    opt_bg_width->answer = "2";
+    opt_bg_width->label = _("Background border width");
+    opt_bg_width->guisection = _("Background");
+
+    opt_font = G_define_option();
+    opt_font->key = "font";
+    opt_font->type = TYPE_STRING;
+    opt_font->required = NO;
+    opt_font->description = _("Font name");
+    opt_font->guisection = _("Font settings");
+
+    opt_fontsize = G_define_option();
+    opt_fontsize->key = "fontsize";
+    opt_fontsize->type = TYPE_DOUBLE;
+    opt_fontsize->required = NO;
+    opt_fontsize->options = "1-360";
+    opt_fontsize->label = _("Font size");
+    opt_fontsize->description = _("Default: 12");
+    opt_fontsize->guisection = _("Font settings");
+
+    opt_tit_font = G_define_option();
+    opt_tit_font->key = "title_font";
+    opt_tit_font->type = TYPE_STRING;
+    opt_tit_font->required = NO;
+    opt_tit_font->description = _("Title font name");
+    opt_tit_font->guisection = _("Font settings");
+
+    opt_tit_fontsize = G_define_option();
+    opt_tit_fontsize->key = "title_fontsize";
+    opt_tit_fontsize->type = TYPE_DOUBLE;
+    opt_tit_fontsize->required = NO;
+    opt_tit_fontsize->options = "1-360";
+    opt_tit_fontsize->label = _("Title font size");
+    opt_tit_fontsize->description = _("Default: 18");
+    opt_tit_fontsize->guisection = _("Title");
+
+    opt_sub_font = G_define_option();
+    opt_sub_font->key = "sub_font";
+    opt_sub_font->type = TYPE_STRING;
+    opt_sub_font->required = NO;
+    opt_sub_font->description = _("Subtitle font name");
+    opt_sub_font->guisection = _("Font settings");
+
+    opt_sub_fontsize = G_define_option();
+    opt_sub_fontsize->key = "sub_fontsize";
+    opt_sub_fontsize->type = TYPE_DOUBLE;
+    opt_sub_fontsize->required = NO;
+    opt_sub_fontsize->options = "1-360";
+    opt_sub_fontsize->label = _("Subtitle font size");
+    opt_sub_fontsize->description = _("Default: 14");
+    opt_sub_fontsize->guisection = _("Font settings");
+
+    opt_fontcolor = G_define_standard_option(G_OPT_C);
+    opt_fontcolor->key = "fontcolor";
+    opt_fontcolor->answer = "black";
+    opt_fontcolor->label = _("Font color");
+    opt_fontcolor->guisection = _("Font settings");
+
+    fl_bg = G_define_flag();
+    fl_bg->key = 'b';
+    fl_bg->description = _("Display legend background");
+    fl_bg->guisection = _("Background");
+
+    opt_sep = G_define_standard_option(G_OPT_F_SEP);
+    opt_sep->guisection = _("In/Out");
+    opt_sep->label = _("Field separator for input file");
+
+    opt_input = G_define_standard_option(G_OPT_F_INPUT);
+    opt_input->label = _("Input legend file");
+    opt_input->description = _("Path to legend file ");
+    opt_input->required = NO;
+    opt_input->guisection = _("In/Out");
+
+    opt_output = G_define_standard_option(G_OPT_F_OUTPUT);
+    opt_output->label = _("Output csv file");
+    opt_output->description = _("Path to output file or '-' "
+                                "for standard output");
+    opt_output->required = NO;
+    opt_output->guisection = _("In/Out");
+
+
+    /* Check command line */
+    if (G_parser(argc, argv)) {
+        exit(EXIT_FAILURE);
+    }
+
+    D_open_driver();
+    D_setup_unity(0);
+
+    /* parse and check options and flags */
+    if (opt_at->answer) {
+        sscanf(opt_at->answers[0], "%lf", &LL);
+        sscanf(opt_at->answers[1], "%lf", &LT);
+    }
+    else {
+        LL = 10;
+        LT = 40;
+    }
+
+    if (opt_title->answer)
+        title = opt_title->answer;
+    else
+        title = "";
+
+    if (opt_cols->answer)
+        sscanf(opt_cols->answer, "%d", &cols);
+    else
+        cols = 1;
+
+    sscanf(opt_symb_size->answer, "%d", &symb_size);
+    sscanf(opt_bg_width->answer, "%d", &bg_width);
+
+    /* Background */
+    do_bg = fl_bg->answer;
+    bcolor = D_parse_color(opt_bcolor->answer, TRUE);
+    bgcolor = D_parse_color(opt_bgcolor->answer, TRUE);
+
+    /* Font settings */
+    if (opt_font->answer)
+        font = opt_font->answer;
+    else
+        font = "sans";
+    if (opt_fontsize->answer != NULL)
+        sscanf(opt_fontsize->answer, "%d", &fontsize);
+    else
+        fontsize = 14;
+
+    if (opt_tit_font->answer)
+        tit_font = opt_tit_font->answer;
+    else
+        tit_font = font;
+    if (opt_tit_fontsize->answer)
+        sscanf(opt_tit_fontsize->answer, "%d", &tit_size);
+    else
+        tit_size = fontsize;
+
+    if (opt_sub_font->answer)
+        sub_font = opt_sub_font->answer;
+    else
+        sub_font = font;
+    if (opt_sub_fontsize->answer)
+        sscanf(opt_sub_fontsize->answer, "%d", &sub_size);
+    else
+        sub_size = fontsize;
+
+    fontcolor = D_parse_color(opt_fontcolor->answer, FALSE); /*default color: black */
+
+    /* I/O */
+    if (opt_input->answer) {
+        sep = G_option_to_separator(opt_sep);
+        file_name = opt_input->answer;
+        if (!file_name)
+            G_fatal_error(_("Unable to open input file <%s>"), file_name);
+    }
+    else {
+        sep = "|";
+        file_name = getenv("GRASS_LEGEND_FILE");
+        if (!file_name)
+            G_fatal_error("No legend file defined.");
+    }
+
+
+    if (opt_output->answer) {
+        if (strcmp(opt_output->answer,"-") == 0) {
+            source = fopen(file_name, "r");
+            if (!source)
+                G_fatal_error(_("Unable to open input file <%s>"), file_name);
+            while ((nread = fread(buf, 1, sizeof(buf), source)))
+                fwrite(buf, 1, nread, stdout);
+            fclose(source);
+        }
+        else {
+            out_file = opt_output->answer;
+            G_copy_file(file_name, out_file);
+        }
+    }
+
+    /* Pre-calculate the layout */
+    if (do_bg)
+        draw(file_name, LL, LT, title, cols, bgcolor, bcolor, bg_width, 1, tit_font, tit_size, sub_font, sub_size, font, fontsize, fontcolor, symb_size, sep);
+
+    /* Draw legend */
+    draw(file_name, LL, LT, title, cols, bgcolor, bcolor, bg_width, 0, tit_font, tit_size, sub_font, sub_size, font, fontsize, fontcolor, symb_size, sep);
+
+    D_close_driver();
+
+    exit(EXIT_SUCCESS);
+}
diff --git a/display/d.legend/d.legend.html b/display/d.legend/d.legend.html
index 4b04209..de07f31 100644
--- a/display/d.legend/d.legend.html
+++ b/display/d.legend/d.legend.html
@@ -63,7 +63,9 @@ or used together to suppress all text of categorial raster maps.
 <p>
 The text produced from floating-point raster maps will automatically create
 output with a meaningful number of significant digits. For very small values,
-numbers will be expressed in scientific notation, e.g. "1.7e-9".
+numbers will be expressed in scientific notation, e.g. "1.7e-9". Option
+<b>digits</b> can be used to determine how many digits after decimal point
+will be displayed.
 <p>
 When the <b>-d</b> flag is used to display a histogram distribution along
 side the smoothed gradient legend, note that the statistics are calculated
@@ -73,7 +75,25 @@ If the histogram appears empty, check your region settings.
 <p>
 If the raster map's <i>units</i> metadata has been set with the
 <em>r.support</em> module then it will be displayed along side the legend.
-
+<p>
+The option <b>title</b> will display the custom title at the top of the legend. 
+In case of vertical legend the title is aligned to the left edge of legend, in case
+of horizontal legend the title is aligned to the center. <b>title_fontsize</b> can
+be used to set the size of legend title. By default the legend title font size is
+the same as labels font size. 
+<p>
+There are different options to customize displayed labels. The <b>labelnum</b> set
+the number of labels which are displayed in regular intervals. The <b>label_values</b>
+will specify the values where the labels will be displayed. The <b>label_step</b> will
+display labels at values which are divisible by this value.
+<p>
+The flag <b>-t</b> will show ticks at labels.
+<p>
+The flag <b>-b</b> will show the background. Options <b>bgcolor</b> and <b>border_color</b> can be
+used to choose the color of border and background fill.
+<p>
+The flag <b>-l</b> will switch to logarithmic scale. In case this flag is used,
+the provided step in <b>label_step</b> is interpreted in the logarithmic space.
 <h2>EXAMPLE</h2>
 
 Displaying the legend along with a histogram (North Carolina Sample dataset):
@@ -88,6 +108,32 @@ d.legend -d elevation
 <img src="d_legend.png" alt="Elevation map with legend" border=1>
 </center>
 
+Displaying the legend with custom labels and background:
+
+<div class="code"><pre>
+g.region raster=elevation -p
+d.rast elevation
+d.legend raster=elevation -t label_step=20 label_values=108 title=Legend -b bgcolor=255:255:204 border_color=gray
+</pre></div>
+
+<center>
+<img src="d_legend_custom_labels_and_background.png" alt="Elevation map with custom legend" border=1>
+</center>
+
+Displaying the legend with logarithmic scale:
+
+<div class="code"><pre>
+g.region raster=elevation -p
+r.watershed -a elevation=elevation threshold=1000 accumulation=flowacc
+d.rast flowacc
+d.legend raster=flowacc -t -l label_step=1
+</pre></div>
+
+<center>
+<img src="d_legend_logarithmic.png" alt="Flow accumulation map with logarithmic legend" border=1>
+</center>
+
+
 
 <h2>SEE ALSO</h2>
 
@@ -113,4 +159,4 @@ Bill Brown, U.S. Army Construction Engineering Research Laboratories
 <br>Additional improvements from various authors
 
 <p>
-<i>Last changed: $Date: 2015-07-20 20:56:23 +0200 (Mon, 20 Jul 2015) $</i>
+<i>Last changed: $Date: 2016-07-27 20:05:07 +0200 (Wed, 27 Jul 2016) $</i>
diff --git a/display/d.legend/d_legend_custom_labels_and_background.png b/display/d.legend/d_legend_custom_labels_and_background.png
new file mode 100644
index 0000000..332e920
Binary files /dev/null and b/display/d.legend/d_legend_custom_labels_and_background.png differ
diff --git a/display/d.legend/d_legend_logarithmic.png b/display/d.legend/d_legend_logarithmic.png
new file mode 100644
index 0000000..e4341b3
Binary files /dev/null and b/display/d.legend/d_legend_logarithmic.png differ
diff --git a/display/d.legend/draw.c b/display/d.legend/draw.c
new file mode 100644
index 0000000..2865628
--- /dev/null
+++ b/display/d.legend/draw.c
@@ -0,0 +1,1364 @@
+/* draw.c:
+ *    Compute position of legend, title, labels and ticks
+ *    Extracted from original d.legend/main.c for background purpose
+ *    Moving to seperate file: Adam Laza, GSoC 2016
+ *
+ *    Copyright (C) 2014 by Hamish Bowman, and the GRASS Development Team*
+ *    This program is free software under the GPL (>=v2)
+ *    Read the COPYING file that comes with GRASS for details.
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/raster3d.h>
+#include <grass/display.h>
+#include <grass/glocale.h>
+#include "local_proto.h"
+
+void draw(const char *map_name, int maptype, int color, int thin, int lines,
+          int steps, int fp, int label_indent, int hide_catnum,
+          int hide_catstr, int show_ticks, int hide_nodata, int do_smooth,
+          struct Categories cats, struct Colors colors, double X0, double X1,
+          double Y0, double Y1, int flip, int UserRange, double UserRangeMin,
+          double UserRangeMax, double *catlist, int catlistCount,
+          int use_catlist, int ticksCount, double fontsize,
+          double tit_fontsize, const char *title, double *tick_values,
+          double t_step, int colorb, int colorbg, struct Option *opt_use,
+          struct Option *opt_at, struct Option *opt_fontsize,
+          struct Option *opt_tstep, struct Option *opt_range, struct Flag *histo,
+          struct Flag *hidestr, int log_sc, int draw, int digits, char *units)
+{
+    char buff[512];
+    int black, white;
+    int cats_num;
+    int cur_dot_row;
+    int do_cats;
+    int dots_per_line;
+    int i, j, k;
+    double t, b, l, r;
+    char *cstr;
+    double x_box[5], y_box[5];
+    struct Range range;
+    struct FPRange fprange, render_range;
+    CELL min_ind, max_ind;
+    DCELL dmin, dmax, val;
+    CELL min_colr, max_colr;
+    DCELL min_dcolr, max_dcolr;
+    int x0, x1, y0, y1, xyTemp;
+    int SigDigits;
+    unsigned int MaxLabelLen;
+    char DispFormat[5];         /*  %.Xf\0  */
+    double maxCat;
+    int horiz;
+    char *units_bottom;
+    double t_start;
+    double max_hist;
+    double txsiz, titsiz;
+    int tcell;
+    float ScaleFactor = 1.0;
+    double x_tit, y_tit, x1_tit;
+    double x0bg, y0bg, x1bg, y1bg;
+    double wleg, lleg;
+    int true_l, true_r;
+    int dx, dy;
+    double coef;
+    double ppl;
+    double bb,bt,bl,br;
+    char MaxLabel[512];
+    double num;
+    int MaxLabelW, LabelW;
+
+
+    if (draw) {
+        /* init colors */
+        black = D_translate_color(DEFAULT_FG_COLOR);
+        white = D_translate_color(DEFAULT_BG_COLOR);
+    }
+
+    /* Figure out where to put text */
+    D_setup_unity(0);
+    D_get_src(&t, &b, &l, &r);
+
+    x0 = l + (int)((r - l) * X0 / 100.);
+    x1 = l + (int)((r - l) * X1 / 100.);
+    y0 = t + (int)((b - t) * (100. - Y0) / 100.);       /* make lower left the origin */
+    y1 = t + (int)((b - t) * (100. - Y1) / 100.);
+
+    if (y0 > y1) {              /* allow for variety in order of corner */
+        flip = !flip;           /*   selection without broken output    */
+        xyTemp = y0;
+        y0 = y1;
+        y1 = xyTemp;
+    }
+    if (x0 > x1) {
+        xyTemp = x0;
+        x0 = x1;
+        x1 = xyTemp;
+    }
+
+    if (x0 == x1)
+        x1++;                   /* avoid 0 width boxes */
+    if (y0 == y1)
+        y1++;
+
+    if (draw) {
+        if ((x0 < l) || (x1 > r) || (y0 < t) || (y1 > b))       /* for mouse or at= 0- or 100+; needs to be after order check */
+            G_warning(_("Legend box lies outside of frame. Text may not display properly."));
+    }
+
+    horiz = (x1 - x0 > y1 - y0);
+    if (horiz && draw)
+        G_message(_("Drawing horizontal legend as box width exceeds height"));
+
+    if (!fp && horiz)           /* better than nothing */
+        do_smooth = TRUE;
+
+    MaxLabelLen = 0;            /* init variable */
+    MaxLabelW = 0;
+
+    /* How many categories to show */
+    /* not fp */
+    if (!fp) {
+        if (Rast_read_range(map_name, "", &range) == -1)
+            G_fatal_error(_("Range information for <%s> not available (run r.support)"),
+                          map_name);
+
+        Rast_get_range_min_max(&range, &min_ind, &max_ind);
+        if (Rast_is_c_null_value(&min_ind))
+            G_fatal_error(_("Input map contains no data"));
+
+        Rast_get_c_color_range(&min_colr, &max_colr, &colors);
+
+        if (UserRange) {
+            if (min_ind < UserRangeMin)
+                min_ind = (int)ceil(UserRangeMin);
+            if (max_ind > UserRangeMax)
+                max_ind = (int)floor(UserRangeMax);
+            if (min_ind > UserRangeMin) {
+                min_ind =
+                    UserRangeMin <
+                    min_colr ? min_colr : (int)ceil(UserRangeMin);
+                if (draw)
+                    G_warning(_("Requested range exceeds lower limit of actual data"));
+            }
+            if (max_ind < UserRangeMax) {
+                max_ind =
+                    UserRangeMax >
+                    max_colr ? max_colr : (int)floor(UserRangeMax);
+                if (draw)
+                    G_warning(_("Requested range exceeds upper limit of actual data"));
+            }
+        }
+
+        /*  cats_num is total number of categories in raster                  */
+        /*  do_cats is  total number of categories to be displayed            */
+        /*  k is number of cats to be displayed after skipping unlabeled cats */
+        /*  lines is number of text lines/legend window                       */
+
+        cats_num = max_ind - min_ind + 1;
+
+        if (lines == 0)
+            lines = cats_num;
+
+        do_cats = cats_num > lines ? lines : cats_num;
+
+        if (do_cats == cats_num)
+            lines = (int)ceil((1.0 * lines) / thin);
+
+        if (!use_catlist) {
+            catlist = (double *)G_calloc(lines + 1, sizeof(double));
+            catlistCount = lines;
+        }
+        /* see how many boxes there REALLY will be */
+        maxCat = 0.0;
+        for (i = min_ind, j = 1, k = 0; j <= do_cats && i <= max_ind;
+             j++, i += thin) {
+            if (!flip)
+                cstr = Rast_get_c_cat(&i, &cats);
+            else {
+                CELL cat = max_ind - (i - min_ind);
+
+                cstr = Rast_get_c_cat(&cat, &cats);
+            }
+
+            if (!use_catlist)
+                catlist[j - 1] = (double)i;
+
+            if (!cstr[0]) {     /* no cat label found, skip str output */
+                if (hide_nodata)
+                    continue;
+            }
+            else {              /* ie has a label */
+                if (!hide_catstr && (MaxLabelLen < strlen(cstr))) {
+                    MaxLabelLen = strlen(cstr);
+                    sprintf(MaxLabel, "%s", cstr);
+            }
+            }
+
+            if (!hide_catnum)
+                if (i > maxCat)
+                    maxCat = (double)i;
+            k++;                /* count of actual boxes drawn (hide_nodata option invaidates using j-1) */
+        }
+        lines = k;
+
+        /* figure out how long the category + label will be */
+        if (use_catlist) {
+            MaxLabelLen = 0;
+            maxCat = 0;         /* reset */
+            for (i = 0, k = 0; i < catlistCount; i++) {
+                if ((catlist[i] < min_ind) || (catlist[i] > max_ind)) {
+                    G_fatal_error(_("use=%s out of range [%d,%d] (extend with range= ?)"),
+                                  opt_use->answers[i], min_ind, max_ind);
+                }
+
+                cstr = Rast_get_d_cat(&catlist[i], &cats);
+                if (!cstr[0]) { /* no cat label found, skip str output */
+                    if (hide_nodata)
+                        continue;
+                }
+                else {          /* ie has a label */
+                    if (!hide_catstr && (MaxLabelLen < strlen(cstr)))
+                        MaxLabelLen = strlen(cstr);
+                }
+                if (!hide_catnum)
+                    if (catlist[i] > maxCat)
+                        maxCat = catlist[i];
+                k++;
+            }
+            if (0 == k)         /* nothing to draw */
+                lines = 0;
+        }
+
+        /* following covers both the above if(do_cats == cats_num) and k++ loop */
+        if (lines < 1) {
+            lines = 1;          /* ward off the dpl floating point exception */
+            G_fatal_error(_("Nothing to draw! (no categories with labels? out of range?)"));
+        }
+
+        /* Figure number of lines, number of pixles per line and text size */
+        dots_per_line = ((y1 - y0) / lines);
+
+        /* switch to a smooth legend for CELL maps with too many cats */
+        /*  an alternate solution is to set   dots_per_line=1         */
+        if ((dots_per_line == 0) && (do_smooth == FALSE)) {
+            if (!use_catlist) {
+                if (draw)
+                    G_message(_("Forcing a smooth legend: too many categories for current window height"));
+                do_smooth = TRUE;
+            }
+        }
+
+        /* center really tiny legends */
+        if (opt_at->answer == NULL) {   /* if defualt scaling */
+            if (!do_smooth && (dots_per_line < 4))      /* if so small that there's no box */
+                if ((b - (dots_per_line * lines)) / (b * 1.0) > 0.15)   /* if there's more than a 15% blank at the bottom */
+                    y0 = ((b - t) - (dots_per_line * lines)) / 2;
+        }
+
+        /* D_text_size(dots_per_line*4/5., dots_per_line*4/5.);    redundant */
+        /* if(Rast_is_c_null_value(&min_ind) && Rast_is_c_null_value(&max_ind))
+           {
+           min_ind = 1;
+           max_ind = 0;
+           } */
+
+        if (horiz)
+            sprintf(DispFormat, "%%d");
+        else {
+            if (maxCat > 0.0)
+                sprintf(DispFormat, "%%%dd", (int)(log10(fabs(maxCat))) + 1);
+            else
+                sprintf(DispFormat, "%%2d");
+        }
+    }                           /* end of if(!fp) */
+
+    else {                      /* is fp */
+        if (maptype == MAP_TYPE_RASTER2D) {
+            if (Rast_read_fp_range(map_name, "", &fprange) == -1)
+                G_fatal_error(_("Range information for <%s> not available"),
+                              map_name);
+        }
+        else {
+            if (Rast3d_read_range(map_name, "", &fprange) == -1)
+                G_fatal_error(_("Range information for <%s> not available"),
+                              map_name);
+        }
+
+        Rast_get_fp_range_min_max(&fprange, &dmin, &dmax);
+        Rast_get_d_color_range(&min_dcolr, &max_dcolr, &colors);
+
+        if (UserRange) {
+            if (dmin < UserRangeMin)
+                dmin = UserRangeMin;
+            if (dmax > UserRangeMax)
+                dmax = UserRangeMax;
+            if (dmin > UserRangeMin) {
+                dmin = UserRangeMin < min_dcolr ? min_dcolr : UserRangeMin;
+                G_warning(_("Color range exceeds lower limit of actual data"));
+            }
+            if (dmax < UserRangeMax) {
+                dmax = UserRangeMax > max_dcolr ? max_dcolr : UserRangeMax;
+                G_warning(_("Color range exceeds upper limit of actual data"));
+            }
+        }
+
+        /* In case of log. scale raster doesn't contain negative or zero values */
+        if (log_sc)
+            if ((dmin<=0) || (dmax<=0))
+                G_fatal_error(_("Range [%.3f, %.3f] out of the logarithm domain."),
+                              dmin, dmax);
+
+
+        if (use_catlist) {
+            for (i = 0; i < catlistCount; i++) {
+                if ((catlist[i] < dmin) || (catlist[i] > dmax)) {
+                    G_fatal_error(_("use=%s out of range [%.3f, %.3f] (extend with range= ?)"),
+                                  opt_use->answers[i], dmin, dmax);
+                }
+                if (strlen(opt_use->answers[i]) > MaxLabelLen)
+                    MaxLabelLen = strlen(opt_use->answers[i]);
+            }
+        }
+        do_cats = 0;            /* if only to get rid of the compiler warning  */
+        cats_num = 0;           /* if only to get rid of the compiler warning  */
+        /* determine how many significant digits to display based on range */
+        if (digits != -1) /* number of digits given by user */
+            sprintf(DispFormat, "%%.%df", digits);
+        else {/* automatic calculation */
+        if (0 == (dmax - dmin)) /* trap divide by 0 for single value rasters */
+            sprintf(DispFormat, "%%f");
+        else {
+            SigDigits = (int)ceil(log10(fabs(25 / (dmax - dmin))));
+            if (SigDigits < 0)
+                SigDigits = 0;
+            if (SigDigits < 7)
+                sprintf(DispFormat, "%%.%df", SigDigits);
+            else
+                sprintf(DispFormat, "%%.2g");   /* eg 4.2e-9  */
+        }
+        }
+    }                           /* end of is fp */
+
+    if (use_catlist) {
+        cats_num = catlistCount;
+        do_cats = catlistCount;
+        lines = catlistCount;
+        do_smooth = FALSE;
+    }
+
+
+    if (do_smooth) {
+        if (horiz) {
+            if (draw) {
+                lleg = x1 - x0;
+                dx = 0;
+                dy = y1 - y0;
+            }
+            if (fp)
+                flip = !flip;   /* horiz floats look better not flipped by default */
+        }
+        else {
+            if (draw) {
+                lleg = y1 - y0;
+                dy = 0;
+                dx = x1 - x0;
+            }
+        }
+
+        /* Draw colors */
+        /* Draw the legend bar */
+        if (draw) {
+            for (k = 0; k < lleg; k++) {
+                if (log_sc) { /* logarithmic scale */
+                    num = k / lleg;
+                    val = dmin * pow(dmax/dmin, num);
+                    D_d_color(val, &colors);
+                    if (!flip) {
+                        if (horiz)
+                            D_box_abs(x0 + k, y0, x0 + k + 1, y0 + dy);
+                        else
+                            D_box_abs(x0, y0 + k, x0 + dx, y0 + k + 1);
+                        }
+                    else {
+                        if (horiz)
+                            D_box_abs(x1 - k, y0, x1 - k - 1, y0 + dy);
+                        else
+                            D_box_abs(x0, y1 - k, x0 + dx, y1 - k - 1);
+                    }
+
+                } /* linear scale */
+                else{
+                if (!fp) {
+                    if (!flip)
+                        tcell = min_ind + k * (double)(1 + max_ind - min_ind) / lleg;
+                    else
+                        tcell = (max_ind + 1) - k * (double)(1 + max_ind - min_ind) / lleg;
+                    D_color((CELL) tcell, &colors);
+                }
+                else {
+                    if (!flip)
+                            val = dmin + k / lleg * (dmax - dmin);
+                    else
+                            val = dmax - k / lleg * (dmax - dmin);
+                    D_d_color(val, &colors);
+                }
+
+                if (dx < dy)
+                    D_box_abs(x0 + k, y0, x0 + k + (dx ? -dx : 1),
+                              y0 - (dy ? -dy : 1));
+                else
+                    D_box_abs(x0, y0 + k, x0 - (dx ? -dx : 1),
+                              y0 + k + (dy ? -dy : 1));
+            }
+        }
+        }
+
+        /* Format text */
+        if (!fp) {              /* cut down labelnum so they don't repeat */
+            if (do_cats < steps)
+                steps = do_cats;
+        }
+
+        /* Draw text and ticks */
+        if (!horiz)
+            txsiz = (y1 - y0) / 20;
+        else
+            txsiz = (x1 - x0) / 20;
+
+        wleg = x1 - x0;
+        lleg = y1 - y0;
+
+        /* scale text to fit in window if position not manually set */
+        /* usually not needed, except when frame is really narrow   */
+        if (opt_at->answer == NULL) {   /* ie default scaling */
+            ScaleFactor = ((r - x1) / ((MaxLabelLen + 1) * txsiz * 0.81));      /* ?? txsiz*.81=actual text width. */
+            if (ScaleFactor < 1.0) {
+                txsiz = txsiz * ScaleFactor;
+            }
+        }
+
+        if (opt_fontsize->answer != NULL)
+            txsiz = fontsize;
+
+        if (txsiz < 0)
+            txsiz = 0;          /* keep it sane */
+
+        if (tit_fontsize == 0)
+            titsiz = txsiz;
+        else
+            titsiz = tit_fontsize;
+
+        if (draw) {
+            D_text_size(txsiz, txsiz);
+            D_use_color(color);
+        }
+
+        /* Draw labels and ticks */
+        /* LABELNUM OPTION */
+        if (steps >= 2) {
+            for (k = 0; k < steps; k++) {
+                if (!fp) {
+                    if (!flip)
+                        tcell =
+                            min_ind + k * (double)(max_ind -
+                                                   min_ind) / (steps - 1);
+                    else
+                        tcell =
+                            max_ind - k * (double)(max_ind -
+                                                   min_ind) / (steps - 1);
+
+                    if (!cstr[0])       /* no cats found, disable str output */
+                        hide_catstr = 1;
+                    else
+                        hide_catstr = hidestr->answer;
+
+                    buff[0] = 0;        /* blank string */
+
+                    if (!hide_catnum) { /* num */
+                        sprintf(buff, DispFormat, tcell);
+                        if (!hide_catstr)       /* both */
+                            strcat(buff, ")");
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                    }
+                    }
+                    if (!hide_catstr) {  /* str */
+                        sprintf(buff + strlen(buff), " %s", cstr);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                }
+                    }
+                }
+                else {          /* ie FP map */
+                    if (hide_catnum)
+                        buff[0] = 0;    /* no text */
+                    else {
+                        if (log_sc) {
+                            num = log10(dmax) - k * ((log10(dmax) - log10(dmin)) / (steps - 1));
+                            val = pow(10,num);
+                        }
+                        else{
+                        if (!flip)
+                            val = dmin + k * (dmax - dmin) / (steps - 1);
+                        else
+                            val = dmax - k * (dmax - dmin) / (steps - 1);
+                        }
+                        sprintf(buff, DispFormat, val);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                    }
+                }
+                }
+
+                if (draw) {
+                    if (!hide_catnum) {
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff, &bb, &bt, &bl, &br);
+                        if (!horiz) {
+                            if (log_sc) {
+                                coef = (log10(val) - log10(dmin)) / (log10(dmax) - log10(dmin));
+                                if (flip)
+                            D_pos_abs(x1 + label_indent,
+                                              y1 - coef * lleg + (bb - bt) / 2);
+                                else
+                                    D_pos_abs(x1 + label_indent,
+                                              y0 + coef * lleg + (bb - bt) / 2);
+                        }
+                        else {
+                                ppl = (lleg) / (steps * 1.0 - 1);
+                                D_pos_abs(x1 + label_indent,
+                                          y0 + ppl * k + (bb - bt) / 2);
+                            }
+                            if (show_ticks) {
+                                D_use_color(black);
+                                if (log_sc)
+                                    if (flip)
+                                        D_line_abs(x1, y1 - coef * lleg,
+                                                   x1 + 6, y1 - coef * lleg);
+                                    else
+                                        D_line_abs(x1, y0 + coef * lleg,
+                                                   x1 + 6, y0 + coef * lleg);
+                                else
+                                    D_line_abs(x1, y0 + ppl * k,
+                                               x1 + 6, y0 + ppl * k);
+                            }
+                        }
+                        else {
+                            if (log_sc) {
+                                coef = (log10(val) - log10(dmin)) / (log10(dmax) - log10(dmin));
+                                if (flip)
+                                    D_pos_abs(x1 - coef * wleg - ((br - bl) / 2),
+                                      y1 + label_indent + txsiz);
+                                else
+                                    D_pos_abs(x0 + coef * wleg - ((br - bl) / 2),
+                                              y1 + label_indent + txsiz);
+                        }
+                            else {
+                                ppl = (wleg) / (steps * 1.0 - 1);
+                                D_pos_abs(x0 + ppl * k - ((br - bl) / 2),
+                                          y1 + label_indent + txsiz);
+                            }
+                            if (show_ticks) {
+                                D_use_color(black);
+                                if (log_sc)
+                                    if (flip)
+                                        D_line_abs(x1 - coef * wleg, y1,
+                                                   x1 - coef * wleg, y1 + 6);
+                                    else
+                                        D_line_abs(x0 + coef * wleg, y1,
+                                                   x0 + coef * wleg, y1 + 6);
+                                else
+                                    D_line_abs(x0 + ppl * k, y1,
+                                               x0 + ppl * k, y1 + 6);
+                            }
+                        }
+                        if (color)
+                            D_use_color(color);
+                            D_text(buff);
+                    }
+                }
+            }                   /* for */
+        }
+
+        if (!fp) {
+            dmin = min_ind;
+            dmax = max_ind;
+            sprintf(DispFormat, "%s", "%.0f");
+        }
+
+        /* LABEL_VALUE OPTION */
+        if (ticksCount > 0) {
+            for (i = 0; i < ticksCount; i++) {
+                if ((tick_values[i] < dmin) || (tick_values[i] > dmax)) {
+                    G_fatal_error(_("tick_value=%.3f out of range [%.3f, %.3f]"),
+                                  tick_values[i], dmin, dmax);
+                }
+                sprintf(buff, DispFormat, tick_values[i]);
+                if (strlen(units)>0)
+                    strcat(buff, units);
+                D_text_size(txsiz, txsiz);
+                D_get_text_box(buff,&bb,&bt, &bl, &br);
+                LabelW = br - bl;
+                if (LabelW > MaxLabelW) {
+                    MaxLabelW = LabelW;
+                    sprintf(MaxLabel, "%s", buff);
+                }
+
+                if (log_sc) {
+                    coef = (log10(tick_values[i]) - log10(dmin)) / (log10(dmax) - log10(dmin));
+                }
+                else
+                coef = (tick_values[i] - dmin) / ((dmax - dmin) * 1.0);
+
+                if (draw) {
+                    if (!flip) {
+                        if (!horiz) {
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x1, y0 + coef * lleg,
+                                           x1 + 6, y0 + coef * lleg);
+                            }
+                            D_pos_abs(x1 + label_indent,
+                                      y0 + coef * lleg + txsiz / 2);
+                        }
+                        else {
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x0 + coef * wleg, y1,
+                                           x0 + coef * wleg, y1 + 6);
+                            }
+                            D_pos_abs(x0 + coef * wleg -
+                                      (strlen(buff) * txsiz * .81 / 2),
+                                      y1 + label_indent + txsiz);
+                        }
+                    }
+                    else {
+                        if (!horiz) {
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x1, y1 - coef * lleg,
+                                           x1 + 6, y1 - coef * lleg);
+                            }
+                            D_pos_abs(x1 + label_indent,
+                                      y1 - coef * lleg + txsiz / 2);
+                        }
+                        else {
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x1 - coef * wleg, y1,
+                                           x1 - coef * wleg, y1 + 6);
+                            }
+                            D_pos_abs(x1 - coef * wleg -
+                                      (strlen(buff) * txsiz * .81 / 2),
+                                      y1 + label_indent + txsiz);
+                        }
+                    }
+                    D_use_color(color);
+                    D_text(buff);
+                }
+            }
+        }
+
+        /* LABEL_STEP OPTION */
+        if (opt_tstep->answer) {
+            if (log_sc) { /* logarithmic */
+                t_start=0;
+                while (log10(dmin) + t_start < log10(dmax)){
+                    num = ceil(log10(dmin)) + t_start;
+                    val = pow(10,num);
+                    sprintf(buff, DispFormat, val);
+                    if (strlen(units)>0)
+                        strcat(buff, units);
+                    D_text_size(txsiz, txsiz);
+                    D_get_text_box(buff,&bb,&bt, &bl, &br);
+                    LabelW = br - bl;
+                    if (LabelW > MaxLabelW) {
+                        MaxLabelW = LabelW;
+                        sprintf(MaxLabel, "%s", buff);
+                    }
+                    coef = (log10(val) - log10(dmin)) / (log10(dmax) - log10(dmin));
+                    if (draw){
+                        if (!flip){
+                            if (!horiz){
+                                if (show_ticks) {
+                                    D_use_color(black);
+                                    D_line_abs(x1, y0 + coef * lleg,
+                                               x1 + 6, y0 + coef * lleg);
+                                }
+                                D_pos_abs(x1 + label_indent,
+                                          y0 + coef * lleg + txsiz / 2);
+                            }
+                            else{
+                                if (show_ticks) {
+                                    D_use_color(black);
+                                    D_line_abs(x0 + coef * wleg, y1,
+                                               x0 + coef * wleg, y1 + 6);
+                                }
+                                D_pos_abs(x0 + coef * wleg -
+                                          (strlen(buff) * txsiz * .81 / 2),
+                                          y1 + label_indent + txsiz);
+                            }
+                        }
+                        else{
+                            if (!horiz){
+                                if (show_ticks) {
+                                    D_use_color(black);
+                                    D_line_abs(x1, y1 - coef * lleg,
+                                               x1 + 6, y1 - coef * lleg);
+                                }
+                                D_pos_abs(x1 + label_indent,
+                                          y1 - coef * lleg + txsiz / 2);
+                            }
+                            else{
+                                if (show_ticks){
+                                    D_use_color(black);
+                                    D_line_abs(x1 - coef * wleg, y1,
+                                               x1 - coef * wleg, y1 + 6);
+                                }
+                                D_pos_abs(x1 - coef * wleg -
+                                          (strlen(buff) * txsiz * .81 / 2),
+                                          y1 + label_indent + txsiz);
+                            }
+                        }
+                        D_use_color(color);
+                        D_text(buff);
+
+                    }
+                t_start += t_step;
+                }
+            }
+            else { /* linear */
+            t_start = ceil(dmin / t_step) * t_step;
+            if (t_start == -0)
+                t_start = 0;
+
+            if (!flip) {
+                if (!horiz)
+                    while (t_start <= dmax) {
+                        sprintf(buff, DispFormat, t_start);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                        }
+                        if (draw) {
+                            coef = (t_start - dmin) / ((dmax - dmin) * 1.0);
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x1, y0 + coef * lleg,
+                                           x1 + 6, y0 + coef * lleg);
+                            }
+                            D_pos_abs(x1 + label_indent,
+                                      y0 + coef * lleg + txsiz / 2);
+                            D_use_color(color);
+                            D_text(buff);
+                        }
+                        t_start += t_step;
+                    }
+                else
+                    while (t_start <= dmax) {
+                        sprintf(buff, DispFormat, t_start);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                        }
+
+                        if (draw) {
+                            coef = (t_start - dmin) / ((dmax - dmin) * 1.0);
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x0 + coef * wleg, y1,
+                                           x0 + coef * wleg, y1 + 6);
+                            }
+                            D_pos_abs(x0 + coef * wleg -
+                                      (strlen(buff) * txsiz * .81 / 2),
+                                      y1 + label_indent + txsiz);
+                            D_use_color(color);
+                            D_text(buff);
+                        }
+                        t_start += t_step;
+                    }
+            }
+            else {
+                if (!horiz)
+                    while (t_start <= dmax) {
+                        sprintf(buff, DispFormat, t_start);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                        }
+
+                        if (draw) {
+                            coef = (t_start - dmin) / ((dmax - dmin) * 1.0);
+                            if (show_ticks) {
+                                D_use_color(black);
+                                D_line_abs(x1, y1 - coef * lleg,
+                                           x1 + 6, y1 - coef * lleg);
+                            }
+                            D_pos_abs(x1 + label_indent,
+                                      y1 - coef * lleg + txsiz / 2);
+                            D_use_color(color);
+                            D_text(buff);
+                        }
+                        t_start += t_step;
+                    }
+                else
+                    while (t_start <= dmax) {
+                        sprintf(buff, DispFormat, t_start);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                        }
+
+                        if (draw) {
+                            coef = (t_start - dmin) / ((dmax - dmin) * 1.0);
+                            if (show_ticks){
+                                D_use_color(black);
+                                D_line_abs(x1 - coef * wleg, y1,
+                                           x1 - coef * wleg, y1 + 6);
+                            }
+                            D_pos_abs(x1 - coef * wleg -
+                                      (strlen(buff) * txsiz * .81 / 2),
+                                      y1 + label_indent + txsiz);
+                            D_use_color(color);
+                            D_text(buff);
+                        }
+                        t_start += t_step;
+                    }
+            }
+        }
+        }
+
+        if (draw) {
+            /* Draw boxes outside of legend bar */
+            /* White box */
+            D_use_color(white);
+            D_begin();
+            D_move_abs(x0 + 1, y0 + 1);
+            D_cont_rel(0, lleg - 2);
+            D_cont_rel(wleg - 2, 0);
+            D_cont_rel(0, -lleg + 2);
+            D_close();
+            D_end();
+            D_stroke();
+
+            /* Black box */
+            D_use_color(black);
+            D_begin();
+            D_move_abs(x0, y0);
+            D_cont_rel(0, lleg);
+            D_cont_rel(wleg, 0);
+            D_cont_rel(0, -lleg);
+            D_close();
+            D_end();
+            D_stroke();
+        }
+
+        /* Display sidebar histogram, if requested.
+           /  In case of horizontal legend, maximum of histogram - max_hist
+           will efect the title position */
+        max_hist = 0;
+        if (histo->answer) {
+            render_range.min = (DCELL) (fp ? dmin : min_ind);
+            render_range.max = (DCELL) (fp ? dmax : max_ind);
+            /* reuse flag to indicate if user-specified or default ranging */
+            render_range.first_time = opt_range->answer ? TRUE : FALSE;
+
+            if (draw)
+                max_hist =
+                    histogram(map_name, x0, y0, wleg, lleg, color, flip,
+                              horiz, maptype, fp, render_range, 1);
+            else
+                max_hist =
+                    histogram(map_name, x0, y0, wleg, lleg, color, flip,
+                              horiz, maptype, fp, render_range, 0);
+        }
+
+
+        /* display title or units */
+        if (strlen(title) > 0) {
+            D_text_size(titsiz, titsiz);
+            D_get_text_box(title, &bb, &bt, &bl, &br);
+            /* title */
+            if (horiz) {
+                x_tit = (x0 + x1) / 2. - (br - bl) / 2;
+                y_tit = y0 - (titsiz) - max_hist;
+            }
+            else {
+                x_tit = x0;
+                y_tit = y0 - txsiz;
+            }
+
+            x1_tit = x_tit + (br - bl);
+
+            if (draw) {
+                D_use_color(color);
+                /* use tit_fontsize */
+                D_text_size(titsiz, titsiz);
+
+                D_pos_abs(x_tit, y_tit);
+                D_text(title);
+                /* restart fontsize */
+                D_text_size(txsiz, txsiz);
+            }
+        }
+        else {
+            /* units */
+            /* print units label, if present */
+            if (maptype == MAP_TYPE_RASTER2D)
+                units_bottom = Rast_read_units(map_name, "");
+            else
+                units = "";
+            /* FIXME: does the raster3d really need to be opened to read the units?
+               units_bottom = Rast3d_get_unit(map_fid); */
+
+            if (!units_bottom)
+                units_bottom = "";
+
+            if (strlen(units_bottom)) {
+                D_text_size(titsiz, titsiz);
+                D_get_text_box(title, &bb, &bt, &bl, &br);
+                if (horiz) {
+                    x_tit =
+                        (x0 + x1) / 2. - (br - bl) / 2;
+                    y_tit = y1 + (txsiz * 2.75);
+                }
+                else {
+                    x_tit = x0;
+                }
+                x1_tit = x_tit + (br - bl);
+
+                if (draw) {
+                    D_use_color(color);
+                    D_pos_abs(x_tit, y_tit);
+                    D_text(units_bottom);
+                }
+            }
+        }                       /* end of display units) */
+
+        if (!draw) {
+            /* Draw background */
+            D_text_size(txsiz, txsiz);
+            D_get_text_box(MaxLabel, &bb, &bt, &bl, &br);
+            if (!horiz) {
+                x0bg = x0 - max_hist - txsiz;
+                x1bg = x0 + wleg + label_indent + (br - bl) + txsiz;
+                if (x1bg < x1_tit)
+                    x1bg = x1_tit + txsiz;
+                y1bg = y0 + lleg + txsiz;
+                if (strlen(title) > 0)
+                    y0bg = y0 - titsiz -2 * txsiz;
+                else
+                    y0bg = y0 - txsiz;
+            }
+            else {
+                x0bg = x0 - (br - bl) / 2 - txsiz;
+                x1bg = x0 + wleg + (br - bl) / 2 + txsiz;
+                if (x1bg < x1_tit) {
+                    x0bg = x_tit - txsiz;
+                    x1bg = x1_tit + txsiz;
+                }
+                y1bg = y0 + lleg + label_indent + 1.5 * txsiz;
+                if (strlen(title) > 0)
+                    y0bg = y0 - (2.5 * titsiz) - max_hist;
+                else
+                    y0bg = y0 - titsiz - max_hist;
+            }
+
+            if (colorbg != 0) {
+                D_use_color(colorbg);
+                D_box_abs(x0bg, y0bg, x1bg, y1bg);
+            }
+
+            D_use_color(colorb);
+            D_begin();
+            D_move_abs(x0bg, y0bg);
+            D_cont_abs(x0bg, y1bg);
+            D_cont_abs(x1bg, y1bg);
+            D_cont_abs(x1bg, y0bg);
+            D_close();
+            D_end();
+            D_stroke();
+        }
+
+    }                           /* end of if(do_smooth) */
+
+    else {                      /* non FP, no smoothing */
+        ScaleFactor = 1.0;
+
+        if (histo->answer)
+            G_warning(_("Histogram plotting not implemented for categorical legends. "
+                       "Use the '-s' flag"));
+
+        /* set legend box bounds */
+        true_l = l;
+        true_r = r;             /* preserve window width */
+        l = x0;
+        t = y0;
+        r = x1;
+        b = y1;
+
+        /* figure out box height  */
+        if (do_cats == cats_num)
+            dots_per_line = (b - t) / (lines + 1);      /* +1 line for the two 1/2s at top and bottom */
+        else
+            dots_per_line = (b - t) / (lines + 2);      /* + another line for 'x of y categories' text */
+
+        /* adjust text size */
+        /*  txsiz = (int)((y1-y0)/(1.5*(lines+5))); */
+        txsiz = (y1 - y0) / (2.0 * lines);
+
+        if (tit_fontsize == 0)
+            titsiz = txsiz;
+        else
+            titsiz = tit_fontsize;
+
+        /* scale text to fit in window if position not manually set */
+        if (opt_at->answer == NULL) {   /* ie defualt scaling */
+            ScaleFactor = ((true_r - true_l) / ((MaxLabelLen + 3) * txsiz * 0.81));     /* ?? txsiz*.81=actual text width. */
+            if (ScaleFactor < 1.0) {
+                txsiz = txsiz * ScaleFactor;
+                dots_per_line = (int)floor(dots_per_line * ScaleFactor);
+            }
+        }
+
+        if (dots_per_line < txsiz)
+            txsiz = dots_per_line;
+
+        if (opt_fontsize->answer != NULL)
+            txsiz = fontsize;
+
+        /* Set up box arrays */
+        x_box[0] = 0;
+        y_box[0] = 0;
+        x_box[1] = 0;
+        y_box[1] = (5 - dots_per_line);
+        x_box[2] = (dots_per_line - 5);
+        y_box[2] = 0;
+        x_box[3] = 0;
+        y_box[3] = (dots_per_line - 5);
+        x_box[4] = (5 - dots_per_line);
+        y_box[4] = 0;
+
+
+        /* Draw away */
+
+        /* if(ScaleFactor < 1.0)   */
+        /*    cur_dot_row = ((b-t) - (dots_per_line*lines))/2; *//* this will center the legend */
+        /* else    */
+        cur_dot_row = t + dots_per_line / 2;
+
+        /*  j = (do_cats == cats_num ? 1 : 2 ); */
+
+        if (draw) {
+            D_pos_abs(x0, y0);
+            D_text_size(txsiz, txsiz);
+        }
+
+        for (i = 0, k = 0; i < catlistCount; i++)
+            /* for(i=min_ind, j=1, k=0; j<=do_cats && i<=max_ind; j++, i+=thin) */
+        {
+            if (!flip)
+                cstr = Rast_get_d_cat(&catlist[i], &cats);
+            else
+                cstr = Rast_get_d_cat(&catlist[catlistCount - i - 1], &cats);
+
+
+            if (!cstr[0]) {     /* no cat label found, skip str output */
+                hide_catstr = 1;
+                if (hide_nodata)
+                    continue;
+            }
+            else
+                hide_catstr = hidestr->answer;
+
+            k++;                /* count of actual boxes drawn (hide_nodata option invaidates using j-1) */
+
+            cur_dot_row += dots_per_line;
+
+            if (draw) {
+                /* Black box */
+                D_use_color(black);
+                D_begin();
+                D_move_abs(l + 2, (cur_dot_row - 1));
+                D_cont_rel(0, (3 - dots_per_line));
+                D_cont_rel((dots_per_line - 3), 0);
+                D_cont_rel(0, (dots_per_line - 3));
+                D_close();
+                D_end();
+                D_stroke();
+
+                /* White box */
+                D_use_color(white);
+                D_begin();
+                D_move_abs(l + 3, (cur_dot_row - 2));
+                D_cont_rel(0, (5 - dots_per_line));
+                D_cont_rel((dots_per_line - 5), 0);
+                D_cont_rel(0, (dots_per_line - 5));
+                D_close();
+                D_end();
+                D_stroke();
+
+
+                /* Color solid box */
+                if (!fp) {
+                    if (!flip)
+                        D_color((CELL) (int)catlist[i], &colors);
+                    else
+                        D_color((CELL) (int)catlist[catlistCount - i - 1],
+                                &colors);
+                }
+                else {
+                    if (!flip)
+                        D_d_color(catlist[i], &colors);
+                    else
+                        D_d_color(catlist[catlistCount - i - 1], &colors);
+                }
+
+                D_pos_abs(l + 3, (cur_dot_row - 2));
+                D_polygon_rel(x_box, y_box, 5);
+
+                /* Draw text */
+                D_use_color(color);
+            }
+
+
+            if (!fp) {
+                /* nothing, box only */
+                buff[0] = 0;
+                if (!hide_catnum) {     /* num */
+                    sprintf(buff, DispFormat, (int)catlist[i]);
+                    if (strlen(units)>0)
+                        strcat(buff, units);
+                    D_text_size(txsiz, txsiz);
+                    D_get_text_box(buff,&bb,&bt, &bl, &br);
+                    LabelW = br - bl;
+                    if (LabelW > MaxLabelW) {
+                        MaxLabelW = LabelW;
+                        sprintf(MaxLabel, "%s", buff);
+                    }
+                    if (!flip) {
+                        sprintf(buff, DispFormat, (int)catlist[i]);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                        }
+                    }
+                    else {
+                        sprintf(buff, DispFormat,
+                                (int)catlist[catlistCount - i - 1]);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                        }
+                    }
+                    if (!hide_catstr)   /* both */
+                        strcat(buff, ")");
+                }
+                if (!hide_catstr) {       /* str */
+                    sprintf(buff + strlen(buff), " %s", cstr);
+                    if (strlen(units)>0)
+                        strcat(buff, units);
+                    D_text_size(txsiz, txsiz);
+                    D_get_text_box(buff,&bb,&bt, &bl, &br);
+                    LabelW = br - bl;
+                    if (LabelW > MaxLabelW) {
+                        MaxLabelW = LabelW;
+                        sprintf(MaxLabel, " %s", buff);
+            }
+                }
+            }
+            else {              /* is fp */
+                if (!flip) {
+                    if (use_catlist) {
+                        /* pass through format exactly as given by the user in
+                           the use= command line parameter (helps with log scale) */
+                        sprintf(buff, "%s", opt_use->answers[i]);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, " %s", buff);
+                        }
+                    }
+                    else {
+                        /* automatically generated/tuned decimal precision format */
+                        sprintf(buff, DispFormat, catlist[i]);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, "%s", buff);
+                }
+                    }
+                }
+                else {
+                    if (use_catlist){
+                        sprintf(buff, "%s", opt_use->answers[catlistCount - i - 1]);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, " %s", buff);
+                }
+            }
+                    else {
+                        sprintf(buff, DispFormat, catlist[catlistCount - i - 1]);
+                        if (strlen(units)>0)
+                            strcat(buff, units);
+                        D_text_size(txsiz, txsiz);
+                        D_get_text_box(buff,&bb,&bt, &bl, &br);
+                        LabelW = br - bl;
+                        if (LabelW > MaxLabelW) {
+                            MaxLabelW = LabelW;
+                            sprintf(MaxLabel, " %s", buff);
+            }
+                    }
+                }
+            }
+
+            if (draw) {
+                D_pos_abs((l + 3 + dots_per_line), (cur_dot_row) - 3);
+                if (color)
+                    D_text(buff);
+            }
+        }
+
+        if (0 == k)
+            G_fatal_error(_("Nothing to draw! (no categories with labels?)"));  /* "(..., out of range?)" */
+
+        /* display title */
+        if (strlen(title) > 0) {
+            x_tit = x0;
+            y_tit = y0 - txsiz;
+
+            D_text_size(titsiz, titsiz);
+            D_get_text_box(title, &bb, &bt, &bl, &br);
+            x1_tit = x_tit + (br - bl);
+
+            if (draw) {
+                D_use_color(color);
+                /* use tit_fontsize */
+                D_text_size(titsiz, titsiz);
+                D_pos_abs(x_tit, y_tit);
+                D_text(title);
+                /* restart fontsize */
+                D_text_size(txsiz, txsiz);
+            }
+        }
+
+        /* Display info line about numbers of categories */
+        if (do_cats != cats_num) {
+            cur_dot_row += dots_per_line;
+            /* sprintf(buff, "%d of %d categories\n", (j-1), cats_num); */
+
+            sprintf(buff, "%d of %d categories\n", k, cats_num);
+            if (strlen(buff) > MaxLabelLen) {
+                MaxLabelLen = strlen(buff);
+                sprintf(MaxLabel, "%d of %d categories\n", k, cats_num);
+            }
+
+            if (draw) {
+                if (opt_fontsize->answer != NULL)
+                    txsiz = fontsize;
+                D_text_size(txsiz, txsiz);
+                D_use_color(black);
+                D_pos_abs((l + 3 + dots_per_line), (cur_dot_row));
+                if (color)
+                    D_text(buff);
+            }
+        }
+
+        if (!draw) {
+            /* Draw background */
+            D_text_size(txsiz, txsiz);
+            D_get_text_box(MaxLabel, &bb, &bt, &bl, &br);
+            x0bg = x0 - txsiz;
+            x1bg =
+                x0 + dots_per_line + 3 + (br - bl) + txsiz;
+            if (x1bg < x1_tit)
+                x1bg = x1_tit + txsiz;
+            y1bg = cur_dot_row + txsiz;
+            if (strlen(title) > 0)
+                y0bg = y0 - 2 * txsiz - titsiz;
+            else
+                y0bg = y0 - txsiz;
+
+
+            if (colorbg != 0) {
+                D_use_color(colorbg);
+                D_box_abs(x0bg, y0bg, x1bg, y1bg);
+            }
+
+            D_use_color(colorb);
+            D_begin();
+            D_move_abs(x0bg, y0bg);
+            D_cont_abs(x0bg, y1bg);
+            D_cont_abs(x1bg, y1bg);
+            D_cont_abs(x1bg, y0bg);
+            D_close();
+            D_end();
+            D_stroke();
+        }
+
+    }
+    D_save_command(G_recreate_command());
+}
diff --git a/display/d.legend/get_stats.c b/display/d.legend/get_stats.c
index bda7601..4e68eaa 100644
--- a/display/d.legend/get_stats.c
+++ b/display/d.legend/get_stats.c
@@ -7,18 +7,18 @@
 
 
 void run_stats(const char *mapname, int nsteps, const char *tempfile,
-	       int map_type)
+               int map_type)
 {
     char buf[32];
     const char *argv[12];
     int argc = 0;
 
     if (map_type == MAP_TYPE_RASTER2D) {
-	argv[argc++] = "r.stats";
-	argv[argc++] = "-r";
+        argv[argc++] = "r.stats";
+        argv[argc++] = "-r";
     }
     else
-	argv[argc++] = "r3.stats";
+        argv[argc++] = "r3.stats";
 
     argv[argc++] = "-c";
     argv[argc++] = mapname;
@@ -34,42 +34,43 @@ void run_stats(const char *mapname, int nsteps, const char *tempfile,
     argv[argc++] = NULL;
 
     if (G_vspawn_ex(argv[0], argv) != 0)
-	G_fatal_error("error running r.stats");
+        G_fatal_error("error running r.stats");
 }
 
 /* linked list of stats */
 void get_stats(const char *mapname, struct stat_list *dist_stats, int nsteps,
-	       int map_type)
+               int map_type)
 {
-    char buf[1024];		/* input buffer for reading stats */
+    char buf[1024];             /* input buffer for reading stats */
     int done = FALSE;
-    char *tempfile;		/* temp file name */
-    FILE *fd;			/* temp file pointer */
-/*
-    int is_fp;
-    struct FPRange fp_range;
-*/
-    long int cat;		/* a category value */
-    long int stat;		/* a category stat value */
+    char *tempfile;             /* temp file name */
+    FILE *fd;                   /* temp file pointer */
+
+    /*
+       int is_fp;
+       struct FPRange fp_range;
+     */
+    long int cat;               /* a category value */
+    long int stat;              /* a category stat value */
     struct stat_node *ptr = NULL;
     int first;
 
     /* write stats to a temp file */
     tempfile = G_tempfile();
-/*
-    is_fp = Rast_map_is_fp(mapname, "");
-    if (is_fp) {
-	if (Rast_read_fp_range(mapname, "", &fp_range) <= 0)
-	    G_fatal_error("Can't read frange file");
-    }
-*/
+    /*
+       is_fp = Rast_map_is_fp(mapname, "");
+       if (is_fp) {
+       if (Rast_read_fp_range(mapname, "", &fp_range) <= 0)
+       G_fatal_error("Can't read frange file");
+       }
+     */
     run_stats(mapname, nsteps, tempfile, map_type);
 
     /* open temp file and read the stats into a linked list */
     fd = fopen(tempfile, "r");
     if (fd == NULL) {
-	perror("opening r.stats output file");
-	G_fatal_error("unable to continue.");
+        perror("opening r.stats output file");
+        G_fatal_error("unable to continue.");
     }
     dist_stats->ptr = NULL;
     dist_stats->count = 0;
@@ -78,71 +79,71 @@ void get_stats(const char *mapname, struct stat_list *dist_stats, int nsteps,
     first = TRUE;
 
     while (!done) {
-	if (fgets(buf, sizeof(buf), fd) != NULL) {
-	    /* WARNING!!!!!!
-	     * this will be very wrong if type!=COUNT
-	     * since the stat prodcued by r.stats will be a floating point value
-	     * possibly less than 1 (shapiro)
-	     */
-	    if (sscanf(buf, "* %ld", &stat) == 1) {
-		dist_stats->null_stat = stat;
-/*
-		if (stat > dist_stats->maxstat && nodata)
-		    dist_stats->maxstat = stat;
-		if (stat < dist_stats->minstat && nodata)
-		    dist_stats->minstat = stat;
-		if (nodata)
-		    dist_stats->sumstat += stat;
-*/
-	    }
-	    else if (sscanf(buf, "%ld %ld", &cat, &stat) == 2) {
-		/* count stats */
-		dist_stats->count++;
-
-		/* sum stats */
-		dist_stats->sumstat += stat;
-
-		/* a max or a min stat? */
-		if (first) {
-		    dist_stats->maxstat = stat;
-		    dist_stats->minstat = stat;
-		    dist_stats->maxcat = cat;
-		    dist_stats->mincat = cat;
-		    first = FALSE;
-		}
-		if (stat > dist_stats->maxstat)
-		    dist_stats->maxstat = stat;
-		if (stat < dist_stats->minstat)
-		    dist_stats->minstat = stat;
-
-		/* a max or a min cat? */
-		if (cat > dist_stats->maxcat)
-		    dist_stats->maxcat = cat;
-		if (cat < dist_stats->mincat)
-		    dist_stats->mincat = cat;
-
-		/* put it in the list */
-		if (dist_stats->ptr == NULL) {
-		    /* first in list */
-		    dist_stats->ptr = (struct stat_node *)
-			G_malloc(sizeof(struct stat_node));
-		    dist_stats->ptr->cat = cat;
-		    dist_stats->ptr->stat = stat;
-		    dist_stats->ptr->next = NULL;
-		    ptr = dist_stats->ptr;
-		}
-		else {
-		    ptr->next = (struct stat_node *)
-			G_malloc(sizeof(struct stat_node));
-		    ptr->next->cat = cat;
-		    ptr->next->stat = stat;
-		    ptr->next->next = NULL;	/* mod: shapiro */
-		    ptr = ptr->next;
-		}
-	    }
-	}
-	else
-	    done = TRUE;
+        if (fgets(buf, sizeof(buf), fd) != NULL) {
+            /* WARNING!!!!!!
+             * this will be very wrong if type!=COUNT
+             * since the stat prodcued by r.stats will be a floating point value
+             * possibly less than 1 (shapiro)
+             */
+            if (sscanf(buf, "* %ld", &stat) == 1) {
+                dist_stats->null_stat = stat;
+                /*
+                   if (stat > dist_stats->maxstat && nodata)
+                   dist_stats->maxstat = stat;
+                   if (stat < dist_stats->minstat && nodata)
+                   dist_stats->minstat = stat;
+                   if (nodata)
+                   dist_stats->sumstat += stat;
+                 */
+            }
+            else if (sscanf(buf, "%ld %ld", &cat, &stat) == 2) {
+                /* count stats */
+                dist_stats->count++;
+
+                /* sum stats */
+                dist_stats->sumstat += stat;
+
+                /* a max or a min stat? */
+                if (first) {
+                    dist_stats->maxstat = stat;
+                    dist_stats->minstat = stat;
+                    dist_stats->maxcat = cat;
+                    dist_stats->mincat = cat;
+                    first = FALSE;
+                }
+                if (stat > dist_stats->maxstat)
+                    dist_stats->maxstat = stat;
+                if (stat < dist_stats->minstat)
+                    dist_stats->minstat = stat;
+
+                /* a max or a min cat? */
+                if (cat > dist_stats->maxcat)
+                    dist_stats->maxcat = cat;
+                if (cat < dist_stats->mincat)
+                    dist_stats->mincat = cat;
+
+                /* put it in the list */
+                if (dist_stats->ptr == NULL) {
+                    /* first in list */
+                    dist_stats->ptr = (struct stat_node *)
+                        G_malloc(sizeof(struct stat_node));
+                    dist_stats->ptr->cat = cat;
+                    dist_stats->ptr->stat = stat;
+                    dist_stats->ptr->next = NULL;
+                    ptr = dist_stats->ptr;
+                }
+                else {
+                    ptr->next = (struct stat_node *)
+                        G_malloc(sizeof(struct stat_node));
+                    ptr->next->cat = cat;
+                    ptr->next->stat = stat;
+                    ptr->next->next = NULL;     /* mod: shapiro */
+                    ptr = ptr->next;
+                }
+            }
+        }
+        else
+            done = TRUE;
     }
     fclose(fd);
     unlink(tempfile);
diff --git a/display/d.legend/histogram.c b/display/d.legend/histogram.c
index 0df0dca..af4691e 100644
--- a/display/d.legend/histogram.c
+++ b/display/d.legend/histogram.c
@@ -9,133 +9,263 @@
 
 #include <grass/gis.h>
 #include <grass/display.h>
+#include <grass/raster.h>
+#include <grass/glocale.h>
 #include "local_proto.h"
 
-void draw_histogram(const char *map_name, int x0, int y0, int width,
-		    int height, int color, int flip, int horiz,
-		    int map_type, int is_fp)
+double histogram(const char *map_name, int x0, int y0, int width,
+                 int height, int color, int flip, int horiz, int map_type,
+                 int is_fp, struct FPRange render_range, int drawh)
 {
-    int i, nsteps;
+    int i, nsteps, ystep;
     long cell_count = 0;
-    double max_width, width_mult, dx;
-    double dy, y0_adjust;	/* only needed for CELL maps */
+    double max_width, width_mult, dx, max;
+    double dy, y0_adjust;       /* only needed for CELL maps */
     struct stat_list dist_stats;
     struct stat_node *ptr;
+    struct Range range;
+    struct FPRange fprange;
+    CELL c_map_min, c_map_max;
+    DCELL d_map_min, d_map_max;
+    double map_min, map_max, map_range, user_range;
+    double crop_min_perc = 0.0, crop_max_perc = 1.0, pad_min_perc = 0.0;
 
     if (horiz) {
-	max_width = height * 1.75;
-	nsteps = width - 3;
+        max_width = height * 1.75;
+        nsteps = width - 3;
     }
     else {
-	max_width = width * 1.75;
-	nsteps = height - 3;
+        max_width = width * 1.75;
+        nsteps = height - 3;
     }
 
+    /* reset return value max */
+    max = 0;
+
+
+    if (render_range.first_time) {
+        /* user specified range, can be either larger
+           or smaller than actual map's range */
+
+        if (is_fp) {
+            Rast_read_fp_range(map_name, "", &fprange);
+            Rast_get_fp_range_min_max(&fprange, &d_map_min, &d_map_max);
+            map_min = (double)d_map_min;
+            map_max = (double)d_map_max;
+        }
+        else {
+            Rast_read_range(map_name, "", &range);
+            Rast_get_range_min_max(&range, &c_map_min, &c_map_max);
+            map_min = (double)c_map_min;
+            map_max = (double)c_map_max;
+        }
+
+        map_range = map_max - map_min;
+        user_range = render_range.max - render_range.min;
+
+        if (horiz)
+            nsteps = (int)(0.5 + (map_range * (width - 3) / user_range));
+        else
+            nsteps = (int)(0.5 + (map_range * (height - 3) / user_range));
+
+        G_debug(1,
+                "number of steps for r.stats = %d, height-3=%d  width-3=%d",
+                nsteps, height - 3, width - 3);
+
+        /* need to know the % of the MAP range where user range starts and stops.
+         *   note that MAP range can be fully inside user range, in which case
+         *   keep 0-100% aka 0,nsteps, i.e. the step number in the nsteps range */
+
+        if (render_range.min > map_min) {
+            crop_min_perc = (render_range.min - map_min) / map_range;
+            G_debug(3, "min: %.02f vs. %.02f (%.02f) ... %.02f%%",
+                    render_range.min, map_min, map_range,
+                    100 * crop_min_perc);
+        }
+
+        if (render_range.max > map_max) {
+            crop_max_perc = 1.0 - ((render_range.max - map_max) / user_range);
+            G_debug(3, "max: %.02f vs. %.02f (%.02f) ... %.02f%%",
+                    map_max, render_range.max, map_range,
+                    100 * crop_max_perc);
+        }
+
+        if (render_range.min < map_min) {
+            pad_min_perc = (map_min - render_range.min) / user_range;
+            G_debug(3, "Min: %.02f vs. %.02f (%.02f) ... %.02f%%",
+                    map_min, render_range.min, user_range,
+                    100 * pad_min_perc);
+        }
+
+#ifdef amplify_gain
+        /* proportion of nsteps to width, use as mult factor to boost the 1.75x
+           when spread out over more nsteps than we are displaying */
+        G_debug(0, "max_width was: %.2f  (nsteps=%d)", max_width, nsteps);
+
+        if (nsteps > ((horiz ? width : height) - 3.0))
+            max_width *= nsteps / ((horiz ? width : height) - 3.0);
+
+        G_debug(0, "max_width now: %.2f", max_width);
+#endif
+    }
+
+
+    /* TODO */
+    if (!is_fp && render_range.first_time) {
+        G_warning(_("Histogram constrained by range not yet implemented for "
+                    "categorical rasters"));
+        return max;
+    }
+
+
     /* get the distribution statistics */
     get_stats(map_name, &dist_stats, nsteps, map_type);
 
     width_mult = max_width / dist_stats.maxstat;
+    ptr = dist_stats.ptr;
 
-    D_use_color(color);
-    D_begin();
+    if (drawh) {
+        D_use_color(color);
+        D_begin();
 
-    ptr = dist_stats.ptr;
+        if (!is_fp) {
+            dy = (nsteps + 3.0) / (1 + dist_stats.maxcat - dist_stats.mincat);
+
+            if (flip)
+                dy *= -1;
+
+            if (dist_stats.mincat == 0)
+                y0_adjust = dy;
+            else
+                y0_adjust = 0;
+
+            if (!flip)          /* mmph */
+                y0_adjust += 0.5;
+        }
+    }
+
+
+    G_debug(3, "mincat=%ld  maxcat=%ld", dist_stats.mincat,
+            dist_stats.maxcat);
+
+    for (i = dist_stats.mincat, ystep = 0; i <= dist_stats.maxcat; i++) {
+        cell_count = 0;
+        if (!ptr)
+            break;
+
+        /* jump out if user range cuts things shorter than the map's native range */
+        if ((horiz && ystep > width - 4) || (!horiz && ystep > height - 4))
+            break;
+
+        /* jump out if user range goes beyond max of map data */
+        if (((double)ystep / ((horiz ? width : height) - 3.0)) >
+            crop_max_perc)
+            break;
+        /* TODO if (!is_fp && i > render_range.max)
+           break;
+         */
+        /* haven't made it to the min of the user range yet */
+        if (((double)i / nsteps) < crop_min_perc) {
+            continue;
+        }
+
+        /* now it's ok advance the plotter position */
+        ystep++;
+
+        /* if user range is below the minimum real map value, we need to pad out the space */
+        if (render_range.first_time && render_range.min < map_min) {
+            if (((double)ystep / ((horiz ? width : height) - 3.0)) <
+                pad_min_perc) {
+                i--;
+                continue;
+            }
+        }
+
+        if (ptr->cat == i) {    /* AH-HA!! found the stat */
+            cell_count = ptr->stat;
+
+            if (ptr->next != NULL)
+                ptr = ptr->next;
+        }
+        else {                  /* we have to look for the stat */
+
+            /* loop until we find it, or pass where it should be */
+            while (ptr->cat < i && ptr->next != NULL)
+                ptr = ptr->next;
+            if (ptr->cat == i) {        /* AH-HA!! found the stat */
+                cell_count = ptr->stat;
+
+                if (ptr->next != NULL)
+                    ptr = ptr->next;
+            }
+            else                /* stat cannot be found */
+                G_debug(5, "No matching stat found, i=%d", i);
+        }
+
+        G_debug(5, "i=%d  ptr->cat=%ld  cell_count=%ld", i, ptr->cat,
+                cell_count);
+
+        if (!cell_count)
+            continue;
+
+        dx = cell_count * width_mult;
+
+        if (drawh) {
+            if (is_fp) {
+                if (horiz) {
+                    if (flip)
+                        D_move_abs(x0 + width - ystep - 1, y0 - 1);
+                    else
+                        D_move_abs(x0 + ystep + 1, y0 - 1);
 
-    if (!is_fp) {
-	dy = (nsteps + 3.0) / (1 + dist_stats.maxcat - dist_stats.mincat);
+                    D_cont_rel(0, -dx);
+                }
+                else {          /* vertical */
+                    if (flip)
+                        D_move_abs(x0 - 1, y0 - 1 + height - ystep);
+                    else
+                        D_move_abs(x0 - 1, y0 + 1 + ystep);
 
-	if (flip)
-	    dy *= -1;
+                    D_cont_rel(-dx, 0);
+                }
+            }
+            else {              /* categorical */
 
-	if (dist_stats.mincat == 0)
-	    y0_adjust = dy;
-	else
-	    y0_adjust = 0;
+                if (horiz) {
+                    if (flip)
+                        D_box_abs(x0 + width + y0_adjust + ((i - 2) * dy),
+                                  y0 - 1,
+                                  x0 + width + y0_adjust + 1 + ((i - 1) * dy),
+                                  y0 - 1 - dx);
+                    else
+                        D_box_abs(x0 + y0_adjust + ((i - 2) * dy),
+                                  y0 - 1,
+                                  x0 - 1 + y0_adjust + ((i - 1) * dy), y0 - 1 - dx);
+                }
+                else {          /* vertical */
 
-	if (!flip)  /* mmph */
-	    y0_adjust += 0.5;
+                    if (flip)
+                        /* GRASS_EPSILON fudge around D_box_abs() weirdness + PNG driver */
+                        D_box_abs(x0 - 1 - GRASS_EPSILON * 10,
+                                  y0 + height + y0_adjust + ((i - 2) * dy),
+                                  x0 - 1 - dx,
+                                  y0 + height + y0_adjust + 1 + ((i - 1) * dy));
+                    else
+                        D_box_abs(x0 - 1 - GRASS_EPSILON * 10,
+                                  y0 + y0_adjust + ((i - 2) * dy),
+                                  x0 - 1 - dx, y0 + y0_adjust - 1 + ((i - 1) * dy));
+                }
+            }
+        }
+        if (dx > max)
+            max = dx;
     }
 
-    for (i = dist_stats.mincat; i <= dist_stats.maxcat; i++) {
-	if (!ptr)
-	    break;
-
-	if (ptr->cat == i) {	/* AH-HA!! found the stat */
-	    cell_count = ptr->stat;
-
-	    if (ptr->next != NULL)
-		ptr = ptr->next;
-	}
-	else {			/* we have to look for the stat */
-
-	    /* loop until we find it, or pass where it should be */
-	    while (ptr->cat < i && ptr->next != NULL)
-		ptr = ptr->next;
-	    if (ptr->cat == i) {	/* AH-HA!! found the stat */
-		cell_count = ptr->stat;
-
-		if (ptr->next != NULL)
-		    ptr = ptr->next;
-	    }
-	    else		/* stat cannot be found */
-		G_debug(4, "No matching stat found, i=%d", i);
-	}
-
-	if (!cell_count)
-	    continue;
-
-	dx = cell_count * width_mult;
-
-	if (is_fp) {
-	    if (horiz) {
-		if (flip)
-		    D_move_abs(x0 + width - i - 1, y0 - 1);
-		else
-		    D_move_abs(x0 + i + 1, y0 - 1);
-
-		D_cont_rel(0, -dx);
-	    }
-	    else {  /* vertical */
-		if (flip)
-		    D_move_abs(x0 - 1, y0 - 1 + height - i);
-		else
-		    D_move_abs(x0 - 1, y0 + 1 + i);
-
-		D_cont_rel(-dx, 0);
-	    }
-	}
-	else {	/* categorical */
-
-	    if (horiz) {
-		if (flip)
-		    D_box_abs(x0 + width + y0_adjust + ((i - 1) * dy),
-			      y0 - 1,
-			      x0 + width + y0_adjust + 1 + (i * dy),
-			      y0 - 1 - dx);
-		else
-		    D_box_abs(x0 + y0_adjust + ((i - 1) * dy),
-			      y0 - 1,
-			      x0 - 1 + y0_adjust + (i * dy),
-			      y0 - 1 - dx);
-	    }
-	    else {  /* vertical */
-
-		if (flip)
-		    /* GRASS_EPSILON fudge around D_box_abs() weirdness + PNG driver */
-		    D_box_abs(x0 - 1 - GRASS_EPSILON * 10,
-			      y0 + height + y0_adjust + ((i - 1) * dy),
-			      x0 - 1 - dx,
-			      y0 + height + y0_adjust + 1 + (i * dy));
-		else
-		    D_box_abs(x0 - 1 - GRASS_EPSILON * 10,
-			      y0 + y0_adjust + ((i - 1) * dy),
-			      x0 - 1 - dx,
-			      y0 + y0_adjust - 1 + (i * dy));
-	    }
-	}
+    if (drawh) {
+        D_close();
+        D_end();
+        D_stroke();
     }
 
-    D_close();
-    D_end();
-    D_stroke();
+    return max;
 }
diff --git a/display/d.legend/local_proto.h b/display/d.legend/local_proto.h
index 82496f0..fd118ef 100644
--- a/display/d.legend/local_proto.h
+++ b/display/d.legend/local_proto.h
@@ -1,9 +1,11 @@
+#include <grass/raster.h>
+
 #define MAP_TYPE_RASTER2D 1
 #define MAP_TYPE_RASTER3D 2
 /* possibles for the future:
-#define MAP_TYPE_VECTOR 3
-#define MAP_TYPE_RULES 4
-*/
+   #define MAP_TYPE_VECTOR 3
+   #define MAP_TYPE_RULES 4
+ */
 
 struct stat_node
 {
@@ -27,8 +29,17 @@ struct stat_list
 
 
 /* histogram.c */
-void draw_histogram(const char *, int, int, int, int, int, int, int, int, int);
+double histogram(const char *, int, int, int, int, int, int, int, int,
+                 int, struct FPRange, int);
 
 /* get_stats.c */
 void get_stats(const char *, struct stat_list *, int, int);
 void run_stats(const char *, int, const char *, int);
+
+/* draw.c */
+void draw(const char *, int, int, int, int, int, int, int, int, int, int, int,
+          int, struct Categories, struct Colors, double, double, double,
+          double, int, int, double, double, double *, int, int, int, double,
+          double, const char *, double *, double, int, int, struct Option *,
+          struct Option *, struct Option *, struct Option *, struct Option *,
+          struct Flag *, struct Flag *, int, int, int, char *);
diff --git a/display/d.legend/main.c b/display/d.legend/main.c
index b699094..a9f44df 100644
--- a/display/d.legend/main.c
+++ b/display/d.legend/main.c
@@ -15,8 +15,10 @@
  *         Markus Neteler
  *      Late 2002: Rewrite of much of the code:
  *         Hamish Bowman, Otago University, New Zealand
+ *      Improvements (ticks, more label options, title):
+ *         Adam Laza (part of GSoC 2016)
  *
- * COPYRIGHT:   (c) 2006-2014 by The GRASS Development Team
+ * COPYRIGHT:   (c) 2002-2014 by The GRASS Development Team
  *
  *              This program is free software under the GNU General Public
  *              License (>=v2). Read the file COPYING that comes with GRASS
@@ -37,46 +39,37 @@
 
 int main(int argc, char **argv)
 {
-    char buff[512];
     char *map_name;
     int maptype;
-    int black, white, color;
-    int cats_num;
-    int cur_dot_row;
-    int do_cats;
-    int dots_per_line;
-    int i, j, k;
+    int color;
+    int i;
     int thin, lines, steps;
     int fp;
-    double t, b, l, r;
-    int hide_catnum, hide_catstr, hide_nodata, do_smooth;
-    char *cstr;
-    double x_box[5], y_box[5];
+    int label_indent;
+    int hide_catnum, hide_catstr, show_ticks, show_bg, hide_nodata, do_smooth;
     struct Categories cats;
     struct Colors colors;
     struct GModule *module;
     struct Option *opt_rast2d, *opt_rast3d, *opt_color, *opt_lines,
-		  *opt_thin, *opt_labelnum, *opt_at, *opt_use, *opt_range,
-		  *opt_font, *opt_path, *opt_charset, *opt_fontsize;
-    struct Flag *hidestr, *hidenum, *hidenodata, *smooth, *flipit, *histo;
-    struct Range range;
-    struct FPRange fprange;
-    CELL min_ind, max_ind;
-    DCELL dmin, dmax, val;
-    CELL min_colr, max_colr;
-    DCELL min_dcolr, max_dcolr;
-    int x0, x1, y0, y1, xyTemp;
+        *opt_thin, *opt_labelnum, *opt_at, *opt_use, *opt_range,
+        *opt_font, *opt_path, *opt_charset, *opt_fontsize, *opt_title,
+        *opt_ticks, *opt_tstep, *opt_brdcolor, *opt_bgcolor,
+        *opt_tit_fontsize, *opt_digits, *opt_units;
+    struct Flag *hidestr, *hidenum, *hidenodata, *smooth, *flipit, *histo,
+        *showtick, *showbg, *log_sc;
     double X0, X1, Y0, Y1;
-    int SigDigits;
-    unsigned int MaxLabelLen;
-    char DispFormat[5];		/*  %.Xf\0  */
-    int flip, horiz, UserRange;
+    int flip, UserRange;
     double UserRangeMin, UserRangeMax, UserRangeTemp;
-    double *catlist, maxCat;
-    int catlistCount, use_catlist;
+    double *catlist;
+    int catlistCount, use_catlist, ticksCount;
     double fontsize;
+    char *title;
     char *units;
-
+    double *tick_values;
+    double t_step;
+    int colorb, colorbg;
+    double tit_fontsize;
+    int log_scale, digits;
 
     /* Initialize the GIS calls */
     G_gisinit(argv[0]);
@@ -86,8 +79,8 @@ int main(int argc, char **argv)
     G_add_keyword(_("cartography"));
     G_add_keyword(_("legend"));
     module->description =
-	_("Displays a legend for a 2D or 3D raster map in the active frame "
-	  "of the graphics monitor.");
+        _("Displays a legend for a 2D or 3D raster map in the active frame "
+          "of the graphics monitor.");
 
     opt_rast2d = G_define_standard_option(G_OPT_R_MAP);
     opt_rast2d->key = "raster";
@@ -99,13 +92,29 @@ int main(int argc, char **argv)
     opt_rast3d->required = NO;
     opt_rast3d->guisection = _("Input");
 
+    opt_title = G_define_option();
+    opt_title->key = "title";
+    opt_title->type = TYPE_STRING;
+    opt_title->required = NO;
+    opt_title->description = _("Legend title");
+    opt_title->guisection = _("Title");
+
+    opt_tit_fontsize = G_define_option();
+    opt_tit_fontsize->key = "title_fontsize";
+    opt_tit_fontsize->type = TYPE_DOUBLE;
+    opt_tit_fontsize->required = NO;
+    opt_tit_fontsize->options = "1-360";
+    opt_tit_fontsize->label = _("Title font size");
+    opt_tit_fontsize->description = _("Default: Same as fontsize");
+    opt_tit_fontsize->guisection = _("Title");
+
     opt_lines = G_define_option();
     opt_lines->key = "lines";
     opt_lines->type = TYPE_INTEGER;
     opt_lines->answer = "0";
     opt_lines->options = "0-1000";
     opt_lines->description =
-	_("Number of text lines (useful for truncating long legends)");
+        _("Number of text lines (useful for truncating long legends)");
     opt_lines->guisection = _("Advanced");
 
     opt_thin = G_define_option();
@@ -115,46 +124,79 @@ int main(int argc, char **argv)
     opt_thin->answer = "1";
     opt_thin->options = "1-1000";
     opt_thin->description =
-	_("Thinning factor (thin=10 gives cats 0,10,20...)");
+        _("Thinning factor (thin=10 gives cats 0,10,20...)");
     opt_thin->guisection = _("Advanced");
 
+    opt_units = G_define_option();
+    opt_units->key = "units";
+    opt_units->type = TYPE_STRING;
+    opt_units->required = NO;
+    opt_units->description =
+            _("Units to display after labels (e.g. meters)");
+    opt_units->guisection = _("Advanced");
+
     opt_labelnum = G_define_option();
     opt_labelnum->key = "labelnum";
     opt_labelnum->type = TYPE_INTEGER;
     opt_labelnum->answer = "5";
     opt_labelnum->options = "2-100";
     opt_labelnum->description =
-	_("Number of text labels for smooth gradient legend");
+        _("Number of text labels for smooth gradient legend");
     opt_labelnum->guisection = _("Gradient");
 
+    opt_ticks = G_define_option();
+    opt_ticks->key = "label_values";
+    opt_ticks->type = TYPE_DOUBLE;
+    opt_ticks->required = NO;
+    opt_ticks->description = _("Specific values to draw ticks");
+    opt_ticks->required = NO;
+    opt_ticks->multiple = YES;
+    opt_ticks->guisection = _("Gradient");
+
+    opt_tstep = G_define_option();
+    opt_tstep->key = "label_step";
+    opt_tstep->type = TYPE_DOUBLE;
+    opt_tstep->required = NO;
+    opt_tstep->description = _("Display label every step");
+    opt_tstep->guisection = _("Gradient");
+
+    opt_digits = G_define_option();
+    opt_digits->key = "digits";
+    opt_digits->type = TYPE_INTEGER;
+    opt_digits->required = NO;
+    opt_digits->description = _("Number of digits after decimal point");
+    opt_digits->guisection = _("Advanced");
+    opt_digits->answer = NULL;
+    opt_digits->options = "0-6";
+
     opt_at = G_define_option();
     opt_at->key = "at";
     opt_at->key_desc = "bottom,top,left,right";
-    opt_at->type = TYPE_DOUBLE;  /* needs to be TYPE_DOUBLE to get past options check */
+    opt_at->type = TYPE_DOUBLE; /* needs to be TYPE_DOUBLE to get past options check */
     opt_at->required = NO;
     opt_at->options = "0-100";
     opt_at->label =
-	_("Size and placement as percentage of screen coordinates "
-	  "(0,0 is lower left)");
+        _("Size and placement as percentage of screen coordinates "
+          "(0,0 is lower left)");
     opt_at->description = opt_at->key_desc;
     opt_at->answer = NULL;
 
     opt_use = G_define_option();
     opt_use->key = "use";
-    opt_use->type = TYPE_DOUBLE;  /* string as it is fed through the parser? */
+    opt_use->type = TYPE_DOUBLE;        /* string as it is fed through the parser? */
     opt_use->required = NO;
     opt_use->description =
-	_("List of discrete category numbers/values for legend");
+        _("List of discrete category numbers/values for legend");
     opt_use->multiple = YES;
     opt_use->guisection = _("Subset");
 
     opt_range = G_define_option();
     opt_range->key = "range";
     opt_range->key_desc = "min,max";
-    opt_range->type = TYPE_DOUBLE;  /* should it be type_double or _string ?? */
+    opt_range->type = TYPE_DOUBLE;      /* should it be type_double or _string ?? */
     opt_range->required = NO;
     opt_range->description =
-	_("Use a subset of the map range for the legend (min,max)");
+        _("Use a subset of the map range for the legend (min,max)");
     opt_range->guisection = _("Subset");
 
     opt_color = G_define_standard_option(G_OPT_C);
@@ -189,9 +231,22 @@ int main(int argc, char **argv)
     opt_charset->type = TYPE_STRING;
     opt_charset->required = NO;
     opt_charset->description =
-	_("Text encoding (only applicable to TrueType fonts)");
+        _("Text encoding (only applicable to TrueType fonts)");
     opt_charset->guisection = _("Font settings");
 
+    opt_brdcolor = G_define_standard_option(G_OPT_CN);
+    opt_brdcolor->key = "border_color";
+    opt_brdcolor->answer = "black";
+    opt_brdcolor->label = _("Border color");
+    opt_brdcolor->guisection = _("Background");
+
+    opt_bgcolor = G_define_standard_option(G_OPT_CN);
+    opt_bgcolor->key = "bgcolor";
+    opt_bgcolor->answer = "white";
+    opt_bgcolor->label = _("Background color");
+    opt_bgcolor->guisection = _("Background");
+
+
     hidestr = G_define_flag();
     hidestr->key = 'v';
     hidestr->description = _("Do not show category labels");
@@ -202,6 +257,11 @@ int main(int argc, char **argv)
     hidenum->description = _("Do not show category numbers");
     hidenum->guisection = _("Advanced");
 
+    showtick = G_define_flag();
+    showtick->key = 't';
+    showtick->description = _("Draw legend ticks for labels");
+    showtick->guisection = _("Gradient");
+
     hidenodata = G_define_flag();
     hidenodata->key = 'n';
     hidenodata->description = _("Skip categories with no label");
@@ -222,828 +282,210 @@ int main(int argc, char **argv)
     histo->description = _("Add histogram to smoothed legend");
     histo->guisection = _("Gradient");
 
+    showbg = G_define_flag();
+    showbg->key = 'b';
+    showbg->description = _("Show background");
+    showbg->guisection = _("Background");
+
+    log_sc = G_define_flag();
+    log_sc->key = 'l';
+    log_sc->description = _("Use logarithmic scale");
+    log_sc->guisection = _("Advanced");
+
+    G_option_required(opt_rast2d, opt_rast3d, NULL);
+    G_option_exclusive(opt_rast2d, opt_rast3d, NULL);
+    G_option_exclusive(hidenum, opt_ticks, NULL);
+    G_option_exclusive(hidenum, opt_tstep, NULL);
 
     /* Check command line */
     if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
-
-    /* FIXME: add GUI launching logic to G_parser() call */
-    if ((opt_rast2d->answer && opt_rast3d->answer) ||
-        !(opt_rast2d->answer || opt_rast3d->answer))
-	G_fatal_error(_("Please specify a single map name. To launch GUI use d.legend --ui."));
+        exit(EXIT_FAILURE);
 
     if (opt_rast2d->answer) {
-	map_name = opt_rast2d->answer;
-	maptype = MAP_TYPE_RASTER2D;
+        map_name = opt_rast2d->answer;
+        maptype = MAP_TYPE_RASTER2D;
     }
     else {
-	map_name = opt_rast3d->answer;
-	maptype = MAP_TYPE_RASTER3D;
+        map_name = opt_rast3d->answer;
+        maptype = MAP_TYPE_RASTER3D;
     }
 
-    hide_catstr = hidestr->answer;	/* note hide_catstr gets changed and re-read below */
+    if (opt_title->answer)
+        title = opt_title->answer;
+    else
+        title = "";
+
+    if (opt_units->answer) {
+        units = opt_units->answer;
+    }
+    else
+        units = "";
+
+    hide_catstr = hidestr->answer;      /* note hide_catstr gets changed and re-read below */
     hide_catnum = hidenum->answer;
+    show_ticks = showtick->answer;
     hide_nodata = hidenodata->answer;
     do_smooth = smooth->answer;
     flip = flipit->answer;
+    show_bg = showbg->answer;
+    log_scale = log_sc->answer;
+
+    if (showtick->answer) {
+        label_indent = 12;
+    }
+    else
+        label_indent = 6;
+
+    if (opt_digits->answer != NULL)
+        sscanf(opt_digits->answer, "%d", &digits);
+    else
+        digits = -1;
 
     color = D_parse_color(opt_color->answer, TRUE);
 
     if (opt_lines->answer != NULL)
-	sscanf(opt_lines->answer, "%d", &lines);
+        sscanf(opt_lines->answer, "%d", &lines);
 
     thin = 1;
     if (opt_thin->answer != NULL)
-	sscanf(opt_thin->answer, "%d", &thin);
+        sscanf(opt_thin->answer, "%d", &thin);
     if (!thin)
-	thin = 1;
+        thin = 1;
 
     if (opt_labelnum->answer != NULL)
-	sscanf(opt_labelnum->answer, "%d", &steps);
+        sscanf(opt_labelnum->answer, "%d", &steps);
+
+    if ((opt_tstep->answer) || (opt_ticks->answer))
+        steps = 0;
+
+    if (opt_tstep->answer != NULL)
+        t_step = atof(opt_tstep->answer);
+
+    ticksCount = 0;
+    if (opt_ticks->answer != NULL) {
+        tick_values = (double *)G_calloc(100 + 1, sizeof(double));
+        for (i = 0; i < 100; i++)       /* fill with dummy values */
+            tick_values[i] = 1.0 * (i + 1);
+        tick_values[i] = 0;
+
+        for (i = 0; (opt_ticks->answers[i] != NULL) && i < 100; i++)
+            tick_values[i] = atof(opt_ticks->answers[i]);
+        ticksCount = i;
+    }
 
     catlistCount = 0;
-    if (opt_use->answer != NULL) {	/* should this be answerS ? */
-	use_catlist = TRUE;
+    if (opt_use->answer != NULL) {      /* should this be answerS ? */
+        use_catlist = TRUE;
 
-	catlist = (double *)G_calloc(100 + 1, sizeof(double));
-	for (i = 0; i < 100; i++)	/* fill with dummy values */
-	    catlist[i] = 1.0 * (i + 1);
-	catlist[i] = 0;
+        catlist = (double *)G_calloc(100 + 1, sizeof(double));
+        for (i = 0; i < 100; i++)       /* fill with dummy values */
+            catlist[i] = 1.0 * (i + 1);
+        catlist[i] = 0;
 
-	for (i = 0; (opt_use->answers[i] != NULL) && i < 100; i++)
-	    catlist[i] = atof(opt_use->answers[i]);
+        for (i = 0; (opt_use->answers[i] != NULL) && i < 100; i++)
+            catlist[i] = atof(opt_use->answers[i]);
 
-	catlistCount = i;
+        catlistCount = i;
     }
     else
-	use_catlist = FALSE;
+        use_catlist = FALSE;
 
 
     UserRange = FALSE;
-    if (opt_range->answer != NULL) {	/* should this be answerS ? */
-	sscanf(opt_range->answers[0], "%lf", &UserRangeMin);
-	sscanf(opt_range->answers[1], "%lf", &UserRangeMax);
-	UserRange = TRUE;
-	if (UserRangeMin > UserRangeMax) {
-	    UserRangeTemp = UserRangeMax;
-	    UserRangeMax = UserRangeMin;
-	    UserRangeMin = UserRangeTemp;
-	    flip = !flip;
-	}
+    if (opt_range->answer != NULL) {    /* should this be answerS ? */
+        sscanf(opt_range->answers[0], "%lf", &UserRangeMin);
+        sscanf(opt_range->answers[1], "%lf", &UserRangeMax);
+        UserRange = TRUE;
+        if (UserRangeMin > UserRangeMax) {
+            UserRangeTemp = UserRangeMax;
+            UserRangeMax = UserRangeMin;
+            UserRangeMin = UserRangeTemp;
+            flip = !flip;
+        }
     }
 
     if (maptype == MAP_TYPE_RASTER2D) {
-	if (Rast_read_colors(map_name, "", &colors) == -1)
-	    G_fatal_error(_("Color file for <%s> not available"), map_name);
+        if (Rast_read_colors(map_name, "", &colors) == -1)
+            G_fatal_error(_("Color file for <%s> not available"), map_name);
 
-	fp = Rast_map_is_fp(map_name, "");
- 
-	Rast_read_cats(map_name, "", &cats);
+        fp = Rast_map_is_fp(map_name, "");
+
+        Rast_read_cats(map_name, "", &cats);
     }
     else {
-	if (Rast3d_read_colors(map_name, "", &colors) == -1)
-	    G_fatal_error(_("Color file for <%s> not available"), map_name);
+        if (Rast3d_read_colors(map_name, "", &colors) == -1)
+            G_fatal_error(_("Color file for <%s> not available"), map_name);
 
-	fp = TRUE;  /* currently raster 3D is always floating point */
+        fp = TRUE;              /* currently raster 3D is always floating point */
 
-	Rast3d_read_cats(map_name, "", &cats);
+        Rast3d_read_cats(map_name, "", &cats);
     }
 
     if (fp && !use_catlist) {
-	do_smooth = TRUE;
-	/* fprintf(stderr, "FP map found - switching gradient legend on\n"); */
-	flip = !flip;
+        do_smooth = TRUE;
+        /* fprintf(stderr, "FP map found - switching gradient legend on\n"); */
+        flip = !flip;
     }
 
     D_open_driver();
 
-    white = D_translate_color(DEFAULT_FG_COLOR);
-    black = D_translate_color(DEFAULT_BG_COLOR);
+    /* Parse and select background color */
+    colorb = D_parse_color(opt_brdcolor->answer, TRUE);
+    colorbg = D_parse_color(opt_bgcolor->answer, TRUE);
 
     if (opt_font->answer)
-	D_font(opt_font->answer);
+        D_font(opt_font->answer);
     else if (opt_path->answer)
-	D_font(opt_path->answer);
+        D_font(opt_path->answer);
 
     if (opt_fontsize->answer != NULL)
-	fontsize = atof(opt_fontsize->answer);
+        fontsize = atof(opt_fontsize->answer);
     else
-	fontsize = 12; /* dummy placeholder, should never be called */
+        fontsize = 12;          /* dummy placeholder, should never be called */
 
     if (opt_charset->answer)
-	D_encoding(opt_charset->answer);
+        D_encoding(opt_charset->answer);
 
-    /* Figure out where to put text */
-    D_setup_unity(0);
-    D_get_src(&t, &b, &l, &r);
+    if (opt_tit_fontsize->answer != NULL)
+        tit_fontsize = atof(opt_tit_fontsize->answer);
+    else
+        tit_fontsize = 0;
 
     if (opt_at->answer != NULL) {
-	sscanf(opt_at->answers[0], "%lf", &Y1);
-	sscanf(opt_at->answers[1], "%lf", &Y0);
-	sscanf(opt_at->answers[2], "%lf", &X0);
-	sscanf(opt_at->answers[3], "%lf", &X1);
-    }
-    else {			/* default */
-	Y1 = 12;
-	Y0 = 88;
-	X0 = 3;
-	X1 = 7;
-
-	if (histo->answer) {
-	    X0 += 5;
-	    X1 += 5;
-	}
-    }
-
-    x0 = l + (int)((r - l) * X0 / 100.);
-    x1 = l + (int)((r - l) * X1 / 100.);
-    y0 = t + (int)((b - t) * (100. - Y0) / 100.);  /* make lower left the origin */
-    y1 = t + (int)((b - t) * (100. - Y1) / 100.);
-
-    if (y0 > y1) {		/* allow for variety in order of corner */
-	flip = !flip;		/*   selection without broken output    */
-	xyTemp = y0;
-	y0 = y1;
-	y1 = xyTemp;
-    }
-    if (x0 > x1) {
-	xyTemp = x0;
-	x0 = x1;
-	x1 = xyTemp;
-    }
-
-    if (x0 == x1)
-	x1++;			/* avoid 0 width boxes */
-    if (y0 == y1)
-	y1++;
-
-    if ((x0 < l) || (x1 > r) || (y0 < t) || (y1 > b))	/* for mouse or at= 0- or 100+; needs to be after order check */
-	G_warning(_("Legend box lies outside of frame. Text may not display properly."));
-
-    horiz = (x1 - x0 > y1 - y0);
-    if (horiz)
-	G_message(_("Drawing horizontal legend as box width exceeds height"));
-
-    if (!fp && horiz)		/* better than nothing */
-	do_smooth = TRUE;
-
-
-    MaxLabelLen = 0;		/* init variable */
-
-    /* How many categories to show */
-    if (!fp) {
-	if (Rast_read_range(map_name, "", &range) == -1)
-	    G_fatal_error(_("Range information for <%s> not available (run r.support)"),
-			  map_name);
-
-	Rast_get_range_min_max(&range, &min_ind, &max_ind);
-	if (Rast_is_c_null_value(&min_ind))
-	    G_fatal_error(_("Input map contains no data"));
-
-	Rast_get_c_color_range(&min_colr, &max_colr, &colors);
-
-	if (UserRange) {
-	    if (min_ind < UserRangeMin)
-		min_ind = (int)ceil(UserRangeMin);
-	    if (max_ind > UserRangeMax)
-		max_ind = (int)floor(UserRangeMax);
-	    if (min_ind > UserRangeMin) {
-		min_ind =
-		    UserRangeMin <
-		    min_colr ? min_colr : (int)ceil(UserRangeMin);
-		G_warning(_("Requested range exceeds lower limit of actual data"));
-	    }
-	    if (max_ind < UserRangeMax) {
-		max_ind =
-		    UserRangeMax >
-		    max_colr ? max_colr : (int)floor(UserRangeMax);
-		G_warning(_("Requested range exceeds upper limit of actual data"));
-	    }
-	}
-
-	/*  cats_num is total number of categories in raster                  */
-	/*  do_cats is  total number of categories to be displayed            */
-	/*  k is number of cats to be displayed after skipping unlabeled cats */
-	/*  lines is number of text lines/legend window                       */
-
-	cats_num = max_ind - min_ind + 1;
-
-	if (lines == 0)
-	    lines = cats_num;
-
-	do_cats = cats_num > lines ? lines : cats_num;
-
-	if (do_cats == cats_num)
-	    lines = (int)ceil((1.0 * lines) / thin);
-
-	if (!use_catlist) {
-	    catlist = (double *)G_calloc(lines + 1, sizeof(double));
-	    catlistCount = lines;
-	}
-	/* see how many boxes there REALLY will be */
-	maxCat = 0.0;
-	for (i = min_ind, j = 1, k = 0; j <= do_cats && i <= max_ind;
-	     j++, i += thin) {
-	    if (!flip)
-		cstr = Rast_get_c_cat(&i, &cats);
-	    else {
-		CELL cat = max_ind - (i - min_ind);
-		cstr = Rast_get_c_cat(&cat, &cats);
-	    }
-
-	    if (!use_catlist)
-		catlist[j - 1] = (double)i;
-
-	    if (!cstr[0]) {	/* no cat label found, skip str output */
-		if (hide_nodata)
-		    continue;
-	    }
-	    else {		/* ie has a label */
-		if (!hide_catstr && (MaxLabelLen < strlen(cstr)))
-		    MaxLabelLen = strlen(cstr);
-	    }
-
-	    if (!hide_catnum)
-		if (i > maxCat)
-		    maxCat = (double)i;
-	    k++;	/* count of actual boxes drawn (hide_nodata option invaidates using j-1) */
-	}
-	lines = k;
-
-	/* figure out how long the category + label will be */
-	if (use_catlist) {
-	    MaxLabelLen = 0;
-	    maxCat = 0;		/* reset */
-	    for (i = 0, k = 0; i < catlistCount; i++) {
-		if ((catlist[i] < min_ind) || (catlist[i] > max_ind)) {
-		    G_fatal_error(_("use=%s out of range [%d,%d] (extend with range= ?)"),
-				  opt_use->answers[i], min_ind, max_ind);
-		}
-
-		cstr = Rast_get_d_cat(&catlist[i], &cats);
-		if (!cstr[0]) {	/* no cat label found, skip str output */
-		    if (hide_nodata)
-			continue;
-		}
-		else {		/* ie has a label */
-		    if (!hide_catstr && (MaxLabelLen < strlen(cstr)))
-			MaxLabelLen = strlen(cstr);
-		}
-		if (!hide_catnum)
-		    if (catlist[i] > maxCat)
-			maxCat = catlist[i];
-		k++;
-	    }
-	    if (0 == k)		/* nothing to draw */
-		lines = 0;
-	}
-
-	if (MaxLabelLen > 0) {	/* ie we've picked up at least one label */
-	    MaxLabelLen++;	/* compensate for leading space */
-	    if (!hide_catnum)
-		MaxLabelLen += 3;	/* compensate for "%2d) " */
-	}
-	else {
-	    if (!hide_catnum)
-		MaxLabelLen = 1;
-	}
-
-	/* compensate for categories >100 */
-	if (!hide_catnum) {
-	    if (maxCat > 99)
-		MaxLabelLen += (int)(log10(maxCat));
-	}
-
-	/* following covers both the above if(do_cats == cats_num) and k++ loop */
-	if (lines < 1) {
-	    lines = 1;		/* ward off the dpl floating point exception */
-	    G_fatal_error(_("Nothing to draw! (no categories with labels? out of range?)"));
-	}
-
-	/* Figure number of lines, number of pixles per line and text size */
-	dots_per_line = ((y1 - y0) / lines);
-
-	/* switch to a smooth legend for CELL maps with too many cats */
-	/*  an alternate solution is to set   dots_per_line=1         */
-	if ((dots_per_line == 0) && (do_smooth == FALSE)) {
-	    if (!use_catlist) {
-		G_message(_("Forcing a smooth legend: too many categories for current window height"));
-		do_smooth = TRUE;
-	    }
-	}
-
-	/* center really tiny legends */
-	if (opt_at->answer == NULL) {	/* if defualt scaling */
-	    if (!do_smooth && (dots_per_line < 4))	/* if so small that there's no box */
-		if ((b - (dots_per_line * lines)) / (b * 1.0) > 0.15)	/* if there's more than a 15% blank at the bottom */
-		    y0 = ((b - t) - (dots_per_line * lines)) / 2;
-	}
-
-	/* D_text_size(dots_per_line*4/5., dots_per_line*4/5.);    redundant */
-	/* if(Rast_is_c_null_value(&min_ind) && Rast_is_c_null_value(&max_ind))
-	   {
-	   min_ind = 1;
-	   max_ind = 0;
-	   } */
-
-	if (horiz)
-	    sprintf(DispFormat, "%%d");
-	else {
-	    if (maxCat > 0.0)
-		sprintf(DispFormat, "%%%dd", (int)(log10(fabs(maxCat))) + 1);
-	    else
-		sprintf(DispFormat, "%%2d");
-	}
-    }
-    else {	/* is fp */
-	if (maptype == MAP_TYPE_RASTER2D) {
-	    if (Rast_read_fp_range(map_name, "", &fprange) == -1)
-		G_fatal_error(_("Range information for <%s> not available"),
-				map_name);
-	}
-	else {
-	    if (Rast3d_read_range(map_name, "", &fprange) == -1)
-		G_fatal_error(_("Range information for <%s> not available"),
-				map_name);
-	}
-
-	Rast_get_fp_range_min_max(&fprange, &dmin, &dmax);
-	Rast_get_d_color_range(&min_dcolr, &max_dcolr, &colors);
-
-	if (UserRange) {
-	    if (dmin < UserRangeMin)
-		dmin = UserRangeMin;
-	    if (dmax > UserRangeMax)
-		dmax = UserRangeMax;
-	    if (dmin > UserRangeMin) {
-		dmin = UserRangeMin < min_dcolr ? min_dcolr : UserRangeMin;
-		G_warning(_("Color range exceeds lower limit of actual data"));
-	    }
-	    if (dmax < UserRangeMax) {
-		dmax = UserRangeMax > max_dcolr ? max_dcolr : UserRangeMax;
-		G_warning(_("Color range exceeds upper limit of actual data"));
-	    }
-	}
-
-	if (use_catlist) {
-	    for (i = 0; i < catlistCount; i++) {
-		if ((catlist[i] < dmin) || (catlist[i] > dmax)) {
-		    G_fatal_error(_("use=%s out of range [%.3f, %.3f] (extend with range= ?)"),
-				  opt_use->answers[i], dmin, dmax);
-		}
-		if (strlen(opt_use->answers[i]) > MaxLabelLen)
-		    MaxLabelLen = strlen(opt_use->answers[i]);
-	    }
-	}
-	do_cats = 0;		/* if only to get rid of the compiler warning  */
-	cats_num = 0;		/* if only to get rid of the compiler warning  */
-	/* determine how many significant digits to display based on range */
-	if (0 == (dmax - dmin))	/* trap divide by 0 for single value rasters */
-	    sprintf(DispFormat, "%%f");
-	else {
-	    SigDigits = (int)ceil(log10(fabs(25 / (dmax - dmin))));
-	    if (SigDigits < 0)
-		SigDigits = 0;
-	    if (SigDigits < 7)
-		sprintf(DispFormat, "%%.%df", SigDigits);
-	    else
-		sprintf(DispFormat, "%%.2g");	/* eg 4.2e-9  */
-	}
+        sscanf(opt_at->answers[0], "%lf", &Y1);
+        sscanf(opt_at->answers[1], "%lf", &Y0);
+        sscanf(opt_at->answers[2], "%lf", &X0);
+        sscanf(opt_at->answers[3], "%lf", &X1);
     }
-
-    if (use_catlist) {
-	cats_num = catlistCount;
-	do_cats = catlistCount;
-	lines = catlistCount;
-	do_smooth = FALSE;
+    else {                      /* default */
+        Y1 = 12;
+        Y0 = 88;
+        X0 = 3;
+        X1 = 7;
+
+        if (histo->answer) {
+            X0 += 5;
+            X1 += 5;
+        }
     }
 
+    if (show_bg)
+        draw(map_name, maptype, color, thin, lines, steps, fp, label_indent,
+             hide_catnum, hide_catstr, show_ticks, hide_nodata, do_smooth,
+             cats, colors, X0, X1, Y0, Y1, flip, UserRange, UserRangeMin,
+             UserRangeMax, catlist, catlistCount, use_catlist, ticksCount,
+             fontsize, tit_fontsize, title, tick_values, t_step, colorb,
+             colorbg, opt_use, opt_at, opt_fontsize, opt_tstep,
+             opt_range, histo, hidestr, log_scale, 0, digits, units);
+
+    draw(map_name, maptype, color, thin, lines, steps, fp, label_indent,
+         hide_catnum, hide_catstr, show_ticks, hide_nodata, do_smooth, cats,
+         colors, X0, X1, Y0, Y1, flip, UserRange, UserRangeMin, UserRangeMax,
+         catlist, catlistCount, use_catlist, ticksCount, fontsize,
+         tit_fontsize, title, tick_values, t_step, colorb, colorbg, opt_use,
+         opt_at, opt_fontsize, opt_tstep, opt_range, histo,
+         hidestr, log_scale, 1, digits, units);
 
-    if (do_smooth) {
-	int wleg, lleg, dx, dy;
-	double txsiz;
-	int ppl;
-	int tcell;
-	float ScaleFactor = 1.0;
-
-	if (horiz) {
-	    lleg = x1 - x0;
-	    dx = 0;
-	    dy = y1 - y0;
-	    if (fp)
-		flip = !flip;	/* horiz floats look better not flipped by default */
-	}
-	else {
-	    lleg = y1 - y0;
-	    dy = 0;
-	    dx = x1 - x0;
-	}
-
-	/* Draw colors */
-	for (k = 0; k < lleg; k++) {
-	    if (!fp) {
-		if (!flip)
-		    tcell =
-			min_ind + k * (double)(1 + max_ind - min_ind) / lleg;
-		else
-		    tcell =
-			(max_ind + 1) - k * (double)(1 + max_ind -
-						     min_ind) / lleg;
-		D_color((CELL) tcell, &colors);
-	    }
-	    else {
-		if (!flip)
-		    val = dmin + k * (dmax - dmin) / lleg;
-		else
-		    val = dmax - k * (dmax - dmin) / lleg;
-		D_d_color(val, &colors);
-	    }
-
-	    if (dx < dy)
-		D_box_abs(x0 + k, y0, x0 + k + (dx ? -dx : 1),
-			  y0 - (dy ? -dy : 1));
-	    else
-		D_box_abs(x0, y0 + k, x0 - (dx ? -dx : 1),
-			  y0 + k + (dy ? -dy : 1));
-	}
-
-	/* Format text */
-	if (!fp) {		/* cut down labelnum so they don't repeat */
-	    if (do_cats < steps)
-		steps = do_cats;
-	    if (1 == steps)
-		steps = 2;	/* ward off the ppl floating point exception */
-	}
-
-	for (k = 0; k < steps; k++) {
-	    if (!fp) {
-		if (!flip)
-		    tcell =
-			min_ind + k * (double)(max_ind - min_ind) / (steps -
-								     1);
-		else
-		    tcell =
-			max_ind - k * (double)(max_ind - min_ind) / (steps -
-								     1);
-
-		cstr = Rast_get_c_cat(&tcell, &cats);
-
-		if (!cstr[0])	/* no cats found, disable str output */
-		    hide_catstr = 1;
-		else
-		    hide_catstr = hidestr->answer;
-
-		buff[0] = 0;	/* blank string */
-
-		if (!hide_catnum) {	/* num */
-		    sprintf(buff, DispFormat, tcell);
-		    if (!hide_catstr)	/* both */
-			strcat(buff, ")");
-		}
-		if (!hide_catstr)	/* str */
-		    sprintf(buff + strlen(buff), " %s", cstr);
-	    }
-	    else {		/* ie FP map */
-		if (hide_catnum)
-		    buff[0] = 0;	/* no text */
-		else {
-		    if (!flip)
-			val = dmin + k * (dmax - dmin) / (steps - 1);
-		    else
-			val = dmax - k * (dmax - dmin) / (steps - 1);
-
-		    sprintf(buff, DispFormat, val);
-		}
-	    }
-
-	    /* this probably shouldn't happen mid-loop as text sizes
-	       might not end up being uniform, but it's a start */
-	    if (strlen(buff) > MaxLabelLen)
-		MaxLabelLen = strlen(buff);
-
-	    /* Draw text */
-	    if (!horiz)
-		txsiz = (y1 - y0) / 20;
-	    else
-		txsiz = (x1 - x0) / 20;
-
-	    /* scale text to fit in window if position not manually set */
-	    /* usually not needed, except when frame is really narrow   */
-	    if (opt_at->answer == NULL) {	/* ie default scaling */
-		ScaleFactor = ((r - x1) / ((MaxLabelLen + 1) * txsiz * 0.81));	/* ?? txsiz*.81=actual text width. */
-		if (ScaleFactor < 1.0) {
-		    txsiz = txsiz * ScaleFactor;
-		}
-	    }
-
-	    if (opt_fontsize->answer != NULL)
-		txsiz = fontsize;
-
-	    if (txsiz < 0)
-		txsiz = 0;	/* keep it sane */
-
-	    D_text_size(txsiz, txsiz);
-	    D_use_color(color);
-
-	    ppl = (lleg) / (steps - 1);
-
-	    if (!horiz) {
-		if (!k)		/* first  */
-		    D_pos_abs(x1 + 4, y0 + txsiz);
-		else if (k == steps - 1)	/* last */
-		    D_pos_abs(x1 + 4, y1);
-		else
-		    D_pos_abs(x1 + 4, y0 + ppl * k + txsiz / 2);
-	    }
-	    else {
-		/* text width is 0.81 of text height? so even though we set width
-		   to txsiz with D_text_size(), we still have to reduce.. hmmm */
-		if (!k)		/* first  */
-		    D_pos_abs(x0 - (strlen(buff) * txsiz * .81 / 2),
-			      y1 + 4 + txsiz);
-		else if (k == steps - 1)	/* last */
-		    D_pos_abs(x1 - (strlen(buff) * txsiz * .81 / 2),
-			      y1 + 4 + txsiz);
-		else
-		    D_pos_abs(x0 + ppl * k -
-			      (strlen(buff) * txsiz * .81 / 2),
-			      y1 + 4 + txsiz);
-	    }
-
-	    if (color)
-		D_text(buff);
-
-	}	/* for */
-
-	lleg = y1 - y0;
-	wleg = x1 - x0;
-
-	/* Black box */
-	D_use_color(black);
-	D_begin();
-	D_move_abs(x0 + 1, y0 + 1);
-	D_cont_rel(0, lleg - 2);
-	D_cont_rel(wleg - 2, 0);
-	D_cont_rel(0, 2 - lleg);
-	D_close();
-	D_end();
-	D_stroke();
-
-	/* White box */
-	D_use_color(white);
-	D_begin();
-	D_move_abs(x0, y0);
-	D_cont_rel(0, lleg);
-	D_cont_rel(wleg, 0);
-	D_cont_rel(0, -lleg);
-	D_close();
-	D_end();
-	D_stroke();
-
-
-	/* print units label, if present */
-	if (maptype == MAP_TYPE_RASTER2D)
-	    units = Rast_read_units(map_name, "");
-	else
-	    units = "";
-/* FIXME: does the raster3d really need to be opened to read the units?
-	    units = Rast3d_get_unit(map_fid); */
-
-	if (!units)
-	    units = "";
-
-	if(strlen(units)) {
-	    double x_pos, y_pos;
-	    int default_pos = TRUE;
-
-	    D_use_color(color);
-	    /* D_text_size() should be already set */
-
-	    if (horiz) {
-		x_pos = (x0 + x1)/2. - (strlen(units) * txsiz * 0.81)/2;
-		y_pos = y1 + (txsiz * 3);
-	    }
-	    else {
-		x_pos = x1 - 4;
-		if (default_pos)
-		    y_pos = y0 - (txsiz * 1.75);
-		else
-		    y_pos = y1 + (txsiz * 2.75);
-	    }
-
-	    D_pos_abs(x_pos, y_pos);
-	    D_text(units);
-	}
-
-
-	/* display sidebar histogram, if requested */
-	if (histo->answer) {
-	    if (opt_range->answer != NULL)
-		G_warning(_("Histogram constrained by range not yet implemented"));
-	    else
-		draw_histogram(map_name, x0, y0, wleg, lleg, color, flip,
-			       horiz, maptype, fp);
-	}
-
-    }
-    else {	/* non FP, no smoothing */
-
-	int true_l, true_r;
-	double txsiz;
-	float ScaleFactor = 1.0;
-
-	/* set legend box bounds */
-	true_l = l;
-	true_r = r;	/* preserve window width */
-	l = x0;
-	t = y0;
-	r = x1;
-	b = y1;
-
-	D_pos_abs(x0, y0);
-
-	/* figure out box height  */
-	if (do_cats == cats_num)
-	    dots_per_line = (b - t) / (lines + 1);	/* +1 line for the two 1/2s at top and bottom */
-	else
-	    dots_per_line = (b - t) / (lines + 2);	/* + another line for 'x of y categories' text */
-
-	/* adjust text size */
-	/*  txsiz = (int)((y1-y0)/(1.5*(lines+5))); */
-	txsiz = (y1 - y0) / (2.0 * lines);
-
-	/* scale text to fit in window if position not manually set */
-	if (opt_at->answer == NULL) {	/* ie defualt scaling */
-	    ScaleFactor = ((true_r - true_l) / ((MaxLabelLen + 3) * txsiz * 0.81));	/* ?? txsiz*.81=actual text width. */
-	    if (ScaleFactor < 1.0) {
-		txsiz = txsiz * ScaleFactor;
-		dots_per_line = (int)floor(dots_per_line * ScaleFactor);
-	    }
-	}
-
-	if (dots_per_line < txsiz)
-	    txsiz = dots_per_line;
-
-	if (opt_fontsize->answer != NULL)
-	    txsiz = fontsize;
-
-	D_text_size(txsiz, txsiz);
-
-
-	/* Set up box arrays */
-	x_box[0] = 0;
-	y_box[0] = 0;
-	x_box[1] = 0;
-	y_box[1] = (5 - dots_per_line);
-	x_box[2] = (dots_per_line - 5);
-	y_box[2] = 0;
-	x_box[3] = 0;
-	y_box[3] = (dots_per_line - 5);
-	x_box[4] = (5 - dots_per_line);
-	y_box[4] = 0;
-
-
-	/* Draw away */
-
-	/*              if(ScaleFactor < 1.0)   */
-	/*                  cur_dot_row = ((b-t) - (dots_per_line*lines))/2; *//* this will center the legend */
-	/*              else    */
-	cur_dot_row = t + dots_per_line / 2;
-
-	/*  j = (do_cats == cats_num ? 1 : 2 ); */
-
-	for (i = 0, k = 0; i < catlistCount; i++)
-	    /*              for(i=min_ind, j=1, k=0; j<=do_cats && i<=max_ind; j++, i+=thin)        */
-	{
-	    if (!flip)
-		cstr = Rast_get_d_cat(&catlist[i], &cats);
-	    else
-		cstr = Rast_get_d_cat(&catlist[catlistCount - i - 1], &cats);
-
-
-	    if (!cstr[0]) {	/* no cat label found, skip str output */
-		hide_catstr = 1;
-		if (hide_nodata)
-		    continue;
-	    }
-	    else
-		hide_catstr = hidestr->answer;
-
-	    k++;		/* count of actual boxes drawn (hide_nodata option invaidates using j-1) */
-
-	    /* White box */
-	    cur_dot_row += dots_per_line;
-	    D_use_color(white);
-	    D_begin();
-	    D_move_abs(l + 2, (cur_dot_row - 1));
-	    D_cont_rel(0, (3 - dots_per_line));
-	    D_cont_rel((dots_per_line - 3), 0);
-	    D_cont_rel(0, (dots_per_line - 3));
-	    D_close();
-	    D_end();
-	    D_stroke();
-
-	    /* Black box */
-	    D_use_color(black);
-	    D_begin();
-	    D_move_abs(l + 3, (cur_dot_row - 2));
-	    D_cont_rel(0, (5 - dots_per_line));
-	    D_cont_rel((dots_per_line - 5), 0);
-	    D_cont_rel(0, (dots_per_line - 5));
-	    D_close();
-	    D_end();
-	    D_stroke();
-
-	    /* Color solid box */
-	    if (!fp) {
-		if (!flip)
-		    D_color((CELL) (int)catlist[i], &colors);
-		else
-		    D_color((CELL) (int)catlist[catlistCount - i - 1],
-			    &colors);
-	    }
-	    else {
-		if (!flip)
-		    D_d_color(catlist[i], &colors);
-		else
-		    D_d_color(catlist[catlistCount - i - 1], &colors);
-	    }
-
-	    D_pos_abs(l + 3, (cur_dot_row - 2));
-	    D_polygon_rel(x_box, y_box, 5);
-
-	    /* Draw text */
-	    D_use_color(color);
-
-	    if (!fp) {
-		/* nothing, box only */
-		buff[0] = 0;
-		if (!hide_catnum) {	/* num */
-		    sprintf(buff, DispFormat, (int)catlist[i]);
-		    if (!flip)
-			sprintf(buff, DispFormat, (int)catlist[i]);
-		    else
-			sprintf(buff, DispFormat,
-				(int)catlist[catlistCount - i - 1]);
-		    if (!hide_catstr)	/* both */
-			strcat(buff, ")");
-		}
-		if (!hide_catstr)	/* str */
-		    sprintf(buff + strlen(buff), " %s", cstr);
-	    }
-	    else {		/* is fp */
-		if (!flip) {
-		    if (use_catlist)
-			/* pass through format exactly as given by the user in
-			   the use= command line parameter (helps with log scale) */
-			sprintf(buff, "%s", opt_use->answers[i]);
-		    else
-			/* automatically generated/tuned decimal precision format */
-			sprintf(buff, DispFormat, catlist[i]);
-		}
-		else {
-		    if(use_catlist)
-			sprintf(buff, "%s", opt_use->answers[catlistCount - i - 1]);
-		    else
-			sprintf(buff, DispFormat, catlist[catlistCount - i - 1]);
-		}
-	    }
-
-	    D_pos_abs((l + 3 + dots_per_line), (cur_dot_row) - 3);
-
-	    if (color)
-		D_text(buff);
-	}
-
-	if (0 == k)
-	    G_fatal_error(_("Nothing to draw! (no categories with labels?)"));	/* "(..., out of range?)" */
-
-
-	if (do_cats != cats_num) {
-	    cur_dot_row += dots_per_line;
-	    /* sprintf(buff, "%d of %d categories\n", (j-1), cats_num); */
-
-	    sprintf(buff, "%d of %d categories\n", k, cats_num);
-
-	    /* shrink text if it will run off the screen */
-	    MaxLabelLen = strlen(buff) + 4;
-	    ScaleFactor = ((true_r - true_l) / (MaxLabelLen * txsiz * 0.81));	/* ?? txsiz*.81=actual text width. */
-	    if (ScaleFactor < 1.0) {
-		txsiz = txsiz * ScaleFactor;
-
-		if (opt_fontsize->answer != NULL)
-		    txsiz = fontsize;
-
-		D_text_size(txsiz, txsiz);
-	    }
-	    D_use_color(white);
-	    D_pos_abs((l + 3 + dots_per_line), (cur_dot_row));
-	    if (color)
-		D_text(buff);
-	}
-    }
-
-    D_save_command(G_recreate_command());
     D_close_driver();
 
     exit(EXIT_SUCCESS);
diff --git a/display/d.mon/Makefile b/display/d.mon/Makefile
index 6d06f9b..ecfcbba 100644
--- a/display/d.mon/Makefile
+++ b/display/d.mon/Makefile
@@ -2,6 +2,8 @@ MODULE_TOPDIR = ../..
 
 PGM = d.mon
 
+ETCFILES = render_cmd.py
+
 LIBES = $(GISLIB) $(DISPLAYLIB)
 DEPENDENCIES= $(GISDEP) $(DISPLAYDEP)
 
diff --git a/display/d.mon/d.mon.html b/display/d.mon/d.mon.html
index bb00247..2e2e6d9 100644
--- a/display/d.mon/d.mon.html
+++ b/display/d.mon/d.mon.html
@@ -125,7 +125,8 @@ d.mon stop=wx0
 <a href="d.erase.html">d.erase</a>,
 <a href="d.redraw.html">d.redraw</a>,
 <a href="d.rast.html">d.rast</a>,
-<a href="d.vect.html">d.vect</a>
+<a href="d.vect.html">d.vect</a>,
+<a href="d.frame.html">d.frame</a>
 </em>
 
 <p>
@@ -137,4 +138,5 @@ of variables for rendering</a>,
 
 Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic
 
-<p><i>Last changed: $Date: 2016-04-26 00:11:32 +0200 (Tue, 26 Apr 2016) $</i>
+<p>
+<i>Last changed: $Date: 2016-04-26 00:10:52 +0200 (Tue, 26 Apr 2016) $</i>
diff --git a/display/d.mon/list.c b/display/d.mon/list.c
index 99ec774..ebdc195 100644
--- a/display/d.mon/list.c
+++ b/display/d.mon/list.c
@@ -1,39 +1,72 @@
 #include <string.h>
 #include <stdlib.h>
+#include <dirent.h>
+#include <sys/stat.h>
+
 #include <grass/gis.h>
 #include <grass/glocale.h>
+
 #include "proto.h"
 
+/* get monitor path */
+char *get_path(const char *name, int fpath)
+{
+    char tmpdir[GPATH_MAX];
+    
+    G_temp_element(tmpdir);
+    strcat(tmpdir, "/");
+    strcat(tmpdir, "MONITORS");
+    if (name) {
+        strcat(tmpdir, "/");
+        strcat(tmpdir, name);
+    }
+
+    if (fpath) {
+        char ret[GPATH_MAX];
+        
+        G_file_name(ret, tmpdir, NULL, G_mapset());
+        return G_store(ret);
+    }
+    
+    return G_store(tmpdir);
+}
+
 /* get list of running monitors */
 void list_mon(char ***list, int *n)
 {
-    int i;
-    const char *name;
-    const char *env_prefix = "MONITOR_";
-    int env_prefix_len;
-    char **tokens;
-    
-    env_prefix_len = strlen(env_prefix);
+    char *mon_path;
+    struct dirent *dp;
+    DIR *dirp;
+    struct stat s;
     
     *list = NULL;
     *n    = 0;
-    tokens = NULL;
-    for (i = 0; (name = G_get_env_name(i)); i++) {
-	if (strncmp(env_prefix, name, env_prefix_len) == 0) {
-	    tokens = G_tokenize(name, "_");
-	    if (G_number_of_tokens(tokens) != 3 ||
-		strcmp(tokens[2], "ENVFILE") != 0)
-		continue;
-	    *list = G_realloc(*list, (*n + 1) * sizeof(char *));
-	    /* GRASS variable names are upper case, but monitor names are lower
-	     * case. */
-	    (*list)[*n] = G_store_lower(tokens[1]);
-	    (*n)++;
-	    G_free_tokens(tokens);
-	    tokens = NULL;
-	}
-    }
     
+    mon_path = get_path(NULL, TRUE);
+    dirp = opendir(mon_path);
+    G_free(mon_path);
+    
+    if (!dirp)
+        return;
+
+    while ((dp = readdir(dirp)) != NULL) {
+	int ret;
+
+        if (!dp->d_name || dp->d_name[0] == '.')
+	    continue;
+
+	mon_path = get_path(dp->d_name, TRUE);
+        ret = G_stat(mon_path, &s);
+	G_free(mon_path);
+
+        if (ret != 0 || !S_ISDIR(s.st_mode))
+            continue;
+
+        *list = G_realloc(*list, (*n + 1) * sizeof(char *));
+        (*list)[*n] = dp->d_name;
+        (*n)++;
+    }
+    closedir(dirp);
 }
 
 /* print list of running monitors */
@@ -57,39 +90,71 @@ void print_list(FILE *fd)
 /* check if monitor is running */
 int check_mon(const char *name)
 {
-    char *env_name;
-    const char *str;
+    char **list;
+    int   i, n;
+
+    list_mon(&list, &n);
     
-    env_name = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_ENVFILE", G_store_upper(name));
-    str = G_getenv_nofatal(env_name);
-    if (!str)
-	return FALSE;
+    for (i = 0; i < n; i++)
+        if (G_strcasecmp(list[i], name) == 0)
+            return TRUE;
     
-    return TRUE;
+    return FALSE;
 }
 
 /* list related commands for given monitor */
 void list_cmd(const char *name, FILE *fd_out)
 {
-    char buf[1024];
-    char *cmd_name;
-    const char *cmd_value;
+    char *mon_path;
+    char cmd_file[GPATH_MAX], buf[4096];
     FILE *fd;
-
-    cmd_name = NULL;
-    G_asprintf(&cmd_name, "MONITOR_%s_CMDFILE", G_store_upper(name));
-    cmd_value = G_getenv_nofatal(cmd_name);
-    if (!cmd_value)
-	G_fatal_error(_("Command file not found"));
     
-    fd = fopen(cmd_value, "r");
+    mon_path = get_path(name, FALSE);
+    G_file_name(cmd_file, mon_path, "cmd", G_mapset());
+    fd = fopen(cmd_file, "r");
     if (!fd)
-	G_fatal_error(_("Unable to read command file"));
+	G_fatal_error(_("Unable to open file '%s'"), cmd_file);
 
     while (G_getl2(buf, sizeof(buf) - 1, fd) != 0) {
 	fprintf(fd_out, "%s\n", buf);
     }
     
     fclose(fd);
+
+    G_free(mon_path);
+}
+
+void list_files(const char *name, FILE *fd_out)
+{
+    char *p;
+    char tmpdir[GPATH_MAX], mon_path[GPATH_MAX];
+    struct dirent *dp;
+    DIR *dirp;
+    
+    G_temp_element(tmpdir);
+    strcat(tmpdir, "/");
+    strcat(tmpdir, "MONITORS");
+    strcat(tmpdir, "/");
+    strcat(tmpdir, name);
+    
+    G_file_name(mon_path, tmpdir, NULL, G_mapset());
+    fprintf(fd_out, "path=%s\n", mon_path);
+    
+    dirp = opendir(mon_path);
+    if (!dirp)
+        G_fatal_error(_("No support files found for monitor <%s>"), name);
+
+    while ((dp = readdir(dirp)) != NULL) {
+        if (!dp->d_name || dp->d_name[0] == '.')
+            continue;
+        
+        p = strrchr(dp->d_name, '.');
+        if (!p)
+            p = dp->d_name;
+        else
+            p++; /* skip '.' */
+        
+        fprintf(fd_out, "%s=%s%c%s\n", p,
+                mon_path, HOST_DIRSEP, dp->d_name);
+    }
 }
diff --git a/display/d.mon/main.c b/display/d.mon/main.c
index c208566..7816f6d 100644
--- a/display/d.mon/main.c
+++ b/display/d.mon/main.c
@@ -4,7 +4,7 @@
  * MODULE:       d.mon
  * AUTHOR(S):    Martin Landa <landa.martin gmail.com>
  * PURPOSE:      Controls graphics monitors for CLI
- * COPYRIGHT:    (C) 2011-2014 by Martin Landa, and the GRASS Development Team
+ * COPYRIGHT:    (C) 2011-2015 by Martin Landa, and the GRASS Development Team
  *
  *               This program is free software under the GNU General
  *               Public License (>=v2). Read the file COPYING that
@@ -27,7 +27,7 @@ int main(int argc, char *argv[])
     struct Option *start_opt, *select_opt, *stop_opt, *output_opt,
         *width_opt, *height_opt, *bgcolor_opt, *res_opt;
     struct Flag *list_flag, *selected_flag, *select_flag, *release_flag, 
-        *cmd_flag, *truecolor_flag, *update_flag;
+        *cmd_flag, *truecolor_flag, *update_flag, *x_flag, *sfile_flag;
     
     int nopts, ret;
     const char *mon;
@@ -112,6 +112,11 @@ int main(int argc, char *argv[])
     cmd_flag->description = _("Print commands for currently selected monitor and exit");
     cmd_flag->guisection = _("Print");
 
+    sfile_flag = G_define_flag();
+    sfile_flag->key = 'g';
+    sfile_flag->description =
+	_("Print path to support files of currently selected monitor and exit");
+
     select_flag = G_define_flag();
     select_flag->key = 's';
     select_flag->description = _("Do not automatically select when starting");
@@ -133,10 +138,21 @@ int main(int argc, char *argv[])
     update_flag->description = _("Requires --overwrite flag");
     update_flag->guisection = _("Settings");
 
+    x_flag = G_define_flag();
+    x_flag->key = 'x';
+    x_flag->label = _("Launch light-weight wx monitor without toolbars and statusbar");
+    x_flag->description = _("Requires 'start=wx0-7'");
+    x_flag->guisection = _("Settings");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
-    
-    if (selected_flag->answer || release_flag->answer || cmd_flag->answer) {
+
+    if (x_flag->answer && start_opt->answer && strncmp(start_opt->answer, "wx", 2) != 0)
+        G_warning(_("Flag -%c has effect only for wx monitors (%s=wx0-7)"),
+                  x_flag->key, start_opt->key);
+            
+    if (selected_flag->answer || release_flag->answer ||
+        cmd_flag->answer || sfile_flag->answer) {
 	if (list_flag->answer)
 	    G_warning(_("Flag -%c ignored"), list_flag->key);
 	mon = G_getenv_nofatal("MONITOR");
@@ -149,6 +165,9 @@ int main(int argc, char *argv[])
 		G_message(_("List of commands for monitor <%s>:"), mon);
 		list_cmd(mon, stdout);
 	    }
+            else if (sfile_flag->answer) {
+                list_files(mon, stdout);
+            }
 	    else if (mon) { /* release */
 		G_unsetenv("MONITOR");
 		G_verbose_message(_("Monitor <%s> released"), mon); 
@@ -185,8 +204,23 @@ int main(int argc, char *argv[])
     if (start_opt->answer) {
         int width, height;
 
-        width = width_opt->answer ? atoi(width_opt->answer) : 720;
-        height = height_opt->answer ? atoi(height_opt->answer) : 480;
+        width = width_opt->answer ? atoi(width_opt->answer) : 0;
+        height = height_opt->answer ? atoi(height_opt->answer) : 0;
+        if (width < 1) {
+            char *env_width = getenv("GRASS_RENDER_WIDTH");
+            if (env_width)
+                width = atoi(env_width);
+        }
+        if (height < 1) {
+            char *env_height = getenv("GRASS_RENDER_HEIGHT");
+            if (env_height)
+                height = atoi(env_height);
+        }
+        if (width < 1)
+            width = DEFAULT_WIDTH;
+        if (height < 1)
+            height = DEFAULT_HEIGHT;
+        
         if (res_opt->answer) {
             int res;
             
@@ -195,9 +229,11 @@ int main(int argc, char *argv[])
             height *= res;
         }
 
+        G_debug(1, "Monitor width/height = %d/%d", width, height);
+
 	ret = start_mon(start_opt->answer, output_opt->answer, !select_flag->answer,
 			width, height, bgcolor_opt->answer,
-			!truecolor_flag->answer, update_flag->answer);
+			!truecolor_flag->answer, x_flag->answer, update_flag->answer);
         if (output_opt->answer && !update_flag->answer) {
             D_open_driver();
             D_setup_unity(0);
diff --git a/display/d.mon/proto.h b/display/d.mon/proto.h
index c9d4746..7a6016b 100644
--- a/display/d.mon/proto.h
+++ b/display/d.mon/proto.h
@@ -1,6 +1,12 @@
+#ifndef __PROTO_H__
+#define __PROTO_H__
+#define DEFAULT_WIDTH 720
+#define DEFAULT_HEIGHT 480
+
+
 /* start */
 int start_mon(const char *, const char *, int, int, int,
-	      const char *, int, int);
+	      const char *, int, int, int);
 
 /* select.c */
 int select_mon(const char *);
@@ -13,3 +19,6 @@ void list_mon();
 void print_list(FILE *);
 int check_mon(const char *);
 void list_cmd(const char *, FILE *);
+char *get_path(const char *, int);
+void list_files(const char *, FILE *);
+#endif
diff --git a/display/d.mon/render_cmd.py b/display/d.mon/render_cmd.py
new file mode 100644
index 0000000..0f3c85f
--- /dev/null
+++ b/display/d.mon/render_cmd.py
@@ -0,0 +1,124 @@
+#!/usr/bin/env python
+import os
+import sys
+import tempfile
+
+from grass.script import core as grass
+from grass.script import task as gtask
+
+# read environment variables from file
+def read_env_file(env_file):
+    width = height = legfile = None
+    fd = open(env_file, 'r')
+    if fd is None:
+        grass.fatal("Unable to open file '{}'".format(env_file))
+    lines = fd.readlines()
+    for l in lines:
+        if l.startswith('#'):
+            continue
+        k, v = l.rstrip('\n').split('#', 1)[0].strip().split('=', 1)
+        os.environ[k] = v
+        if width is None and k == 'GRASS_RENDER_WIDTH':
+            width = int(v)
+        if height is None and k == 'GRASS_RENDER_HEIGHT':
+            height = int(v)
+        if legfile is None and k == 'GRASS_LEGEND_FILE':
+            legfile = v
+    fd.close()
+
+    if width is None or height is None:
+        grass.fatal("Unknown monitor size")
+
+    return width, height, legfile
+
+# run display command
+def render(cmd, mapfile):
+    env = os.environ.copy()
+
+    if mapfile:
+        env['GRASS_RENDER_FILE'] = mapfile
+    try:
+        grass.run_command(cmd[0], env=env, **cmd[1])
+    except Exception as e:
+        grass.debug(1, "Unable to render: {}".format(e))
+
+# update cmd file
+def update_cmd_file(cmd_file, cmd, mapfile):
+    if cmd[0] in ('d.colorlist', 'd.font', 'd.fontlist',
+                  'd.frame', 'd.info', 'd.mon', 'd.out.file',
+                  'd.redraw', 'd.to.rast', 'd.what.rast',
+                  'd.what.vect', 'd.where'):
+        return
+
+    mode = 'w' if cmd[0] == 'd.erase' else 'a'
+    # update cmd file
+    fd = open(cmd_file, mode)
+    if fd is None:
+        grass.fatal("Unable to open file '{}'".format(cmd_file))
+    if mode == 'a':
+        frame = os.getenv('GRASS_RENDER_FRAME', None)
+        if frame:
+            fd.write('# GRASS_RENDER_FRAME={}\n'.format(frame))
+        if mapfile:
+            fd.write('# GRASS_RENDER_FILE={}\n'.format(mapfile))
+        fd.write(' '.join(gtask.cmdtuple_to_list(cmd)))
+        fd.write('\n')
+    else:
+        fd.write('')
+    fd.close()
+
+# adjust region
+def adjust_region(width, height):
+    region = grass.region()
+
+    mapwidth = abs(region["e"] - region["w"])
+    mapheight = abs(region['n'] - region['s'])
+
+    region["nsres"] = mapheight / height
+    region["ewres"] = mapwidth / width
+    region['rows'] = int(round(mapheight / region["nsres"]))
+    region['cols'] = int(round(mapwidth / region["ewres"]))
+    region['cells'] = region['rows'] * region['cols']
+
+    kwdata = [('proj', 'projection'),
+              ('zone', 'zone'),
+              ('north', 'n'),
+              ('south', 's'),
+              ('east', 'e'),
+              ('west', 'w'),
+              ('cols', 'cols'),
+              ('rows', 'rows'),
+              ('e-w resol', 'ewres'),
+              ('n-s resol', 'nsres')]
+
+    grass_region = ''
+    for wkey, rkey in kwdata:
+        grass_region += '%s: %s;' % (wkey, region[rkey])
+
+    os.environ['GRASS_REGION'] = grass_region
+
+if __name__ == "__main__":
+    cmd = gtask.cmdstring_to_tuple(sys.argv[1])
+    if not cmd[0] or cmd[0] == 'd.mon':
+        sys.exit(0)
+    path = os.path.dirname(os.path.abspath(__file__))
+    mon = os.path.split(path)[-1]
+
+    width, height, legfile = read_env_file(os.path.join(path, 'env'))
+    if mon.startswith('wx'):
+        mapfile = tempfile.NamedTemporaryFile(dir=path).name
+        if cmd[0] in ('d.barscale', 'd.legend', 'd.northarrow', 'd.legend.vect'):
+            mapfile += '.png'
+        else:
+            mapfile += '.ppm'
+    else:
+        mapfile = None
+        adjust_region(width, height)
+
+    render(cmd, mapfile)
+    update_cmd_file(os.path.join(path, 'cmd'), cmd, mapfile)
+    if cmd[0] == 'd.erase' and os.path.exists(legfile):
+        os.remove(legfile)
+
+
+    sys.exit(0)
diff --git a/display/d.mon/start.c b/display/d.mon/start.c
index 1b6ae05..39f1960 100644
--- a/display/d.mon/start.c
+++ b/display/d.mon/start.c
@@ -1,5 +1,7 @@
 #include <stdlib.h>
 #include <string.h>
+#include <unistd.h>
+#include <libgen.h>
 #include <grass/gis.h>
 #include <grass/spawn.h>
 #include <grass/display.h>
@@ -7,29 +9,41 @@
 
 #include "proto.h"
 
-static void start(const char *, const char *, int);
-static void start_wx(const char *, const char *, const char *,
-		     const char *, int, int);
+static char *start(const char *, const char *, int, int, int);
+static char *start_wx(const char *, const char *, int, int, int);
 static void error_handler(void *);
 
 /* start file-based monitor */
-void start(const char *name, const char *output, int update)
+char *start(const char *name, const char *output, int width, int height, int update)
 {
-    char *env_name, output_path[GPATH_MAX];
+    char *output_path;
     const char *output_name;
     
     /* stop monitor on failure */
     G_add_error_handler(error_handler, (char *)name);
     
+    /* full path for output file */
+    output_path = (char *) G_malloc(GPATH_MAX);
+    output_path[0] = '\0';
+    
     if (!output) {
+        char buff[512];
+
+        sprintf(buff, "GRASS_RENDER_IMMEDIATE=%s", name);
+        putenv(G_store(buff));
+        sprintf(buff, "GRASS_RENDER_WIDTH=%d", width);
+        putenv(G_store(buff));
+        sprintf(buff, "GRASS_RENDER_HEIGHT=%d", height);
+        putenv(G_store(buff));
+
         D_open_driver();
         
         output_name = D_get_file();
         if (!output_name) 
-            return;
+            return NULL;
         if (!update && access(output_name, F_OK) == 0) {
             if (G_get_overwrite()) {
-                G_warning(_("File '%s' already exists and will be overwritten"), output_name);
+                G_warning(_("File <%s> already exists and will be overwritten"), output_name);
                 D_setup_unity(0);
                 D_erase("white");
             }
@@ -41,15 +55,33 @@ void start(const char *name, const char *output, int update)
         }
         D_close_driver(); /* must be called after check because this
                            * function produces default map file */
+        putenv("GRASS_RENDER_IMMEDIATE=");
     }
     else {
+        char *dir_name;
+        
         output_name = output;
+        /* check write permission */
+        dir_name = G_store(output_name);
+        if (access(dirname(dir_name), W_OK) != 0)
+            G_fatal_error(_("Unable to start monitor, don't have "
+                            "write permission for <%s>"), output_name);
+        G_free(dir_name);
+        
+        /* check if file exists */
+        if (!update && access(output_name, F_OK) == 0) {
+            if (G_get_overwrite()) {
+                G_warning(_("File <%s> already exists and will be overwritten"), output_name);
+                if (0 != unlink(output_name))
+                    G_fatal_error(_("Unable to delete <%s>"), output_name);
+            }
+        }
     }
 
         
     if (!strchr(output_name, HOST_DIRSEP)) { /* relative path */
         char *ptr;
-        
+    
         if (!getcwd(output_path, GPATH_MAX))
             G_fatal_error(_("Unable to get current working directory"));
         ptr = output_path + strlen(output_path) - 1;
@@ -64,50 +96,47 @@ void start(const char *name, const char *output, int update)
         strcpy(output_path, output_name); /* already full path */
     }
 
-    env_name = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_MAPFILE", G_store_upper(name));
-    G_setenv(env_name, output_path);
+    return output_path;
 }
 
 /* start wxGUI display monitor */
-void start_wx(const char *name, const char *tempfile,
-	      const char *env_value, const char *cmd_value,
-	      int width, int height)
+char *start_wx(const char *name, const char *element, int width, int height, int x_only)
 {
-    char progname[GPATH_MAX];
-    char *env_name, *map_value, str_width[1024], str_height[1024];
-
-    env_name = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_MAPFILE", G_store_upper(name));
-    G_asprintf(&map_value, "%s.ppm", tempfile);
-    G_setenv(env_name, map_value);
-    /* close(creat(map_value, 0666)); */
+    char progname[GPATH_MAX], mon_path[GPATH_MAX];
+    char str_width[1024], str_height[1024], *str_x_only;
+    char *mapfile;
     
-    G_debug(3, "       mapfile = %s", map_value);
+    /* full path */
+    mapfile = (char *) G_malloc(GPATH_MAX);
+    mapfile[0] = '\0';
 
     sprintf(progname, "%s/gui/wxpython/mapdisp/main.py", G_gisbase());
-    if (width > 0)
-        sprintf(str_width, "%d", width);
-    else
-        str_width[0] = '\0';
-    if (height > 0)
-        sprintf(str_height, "%d", height);
-    else
-        str_height[0] = '\0';
+    sprintf(str_width, "%d", width);
+    sprintf(str_height, "%d", height);
 
+    if (x_only)
+        str_x_only = "1";
+    else
+        str_x_only = "0";
+    
+    G_file_name(mon_path, element, NULL, G_mapset());
     G_spawn_ex(getenv("GRASS_PYTHON"), progname, progname,
-	       name, map_value, cmd_value, env_value,
-               str_width, str_height, SF_BACKGROUND, NULL);
+               name, mon_path, str_width, str_height, str_x_only, SF_BACKGROUND, NULL);
+
+    G_file_name(mapfile, element, "map.ppm", G_mapset());
+    
+    return mapfile;
 }
 
 int start_mon(const char *name, const char *output, int select,
 	      int width, int height, const char *bgcolor,
-	      int truecolor, int update)
+	      int truecolor, int x_only, int update)
 {
-    char *u_name;
-    char *env_name, *env_value, *cmd_value;
-    char *tempfile, buf[1024];
-    int env_fd;
+    char *mon_path;
+    char *out_file, *env_file, *cmd_file, *leg_file;
+    char  buf[1024];
+    char file_path[GPATH_MAX], render_cmd_path[GPATH_MAX];
+    int  fd;
 
     if (check_mon(name)) {
         const char *curr_mon;
@@ -119,71 +148,89 @@ int start_mon(const char *name, const char *output, int select,
         G_fatal_error(_("Monitor <%s> already running"), name);
     }
 
-    tempfile = G_tempfile();
+    G_verbose_message(_("Starting monitor <%s>..."), name);
+    
+    /* create .tmp/HOSTNAME/u_name directory */
+    mon_path = get_path(name, FALSE);
+    G_make_mapset_element(mon_path);
+    
+    G_file_name(file_path, mon_path, "env", G_mapset());
+    env_file = G_store(file_path);
+    G_file_name(file_path, mon_path, "cmd", G_mapset());
+    cmd_file = G_store(file_path);
+    G_file_name(file_path, mon_path, "leg", G_mapset());
+    leg_file = G_store(file_path);
+
+    /* create py file (renderer) */
+    sprintf(render_cmd_path, "%s/etc/d.mon/render_cmd.py", getenv("GISBASE"));
+    G_file_name(file_path, mon_path, "render.py", G_mapset());
+    G_debug(1, "Monitor name=%s, pyfile = %s", name, file_path);
+    if (1 != G_copy_file(render_cmd_path, file_path))
+        G_fatal_error(_("Unable to copy render command file"));
+
+    /* start monitor */
+    if (strncmp(name, "wx", 2) == 0)
+        out_file = start_wx(name, mon_path, width, height, x_only);
+    else
+        out_file = start(name, output, width, height, update);
+    
+    /* create env file (environmental variables used for rendering) */
+    G_debug(1, "Monitor name=%s, envfile=%s", name, env_file);
+    fd = creat(env_file, 0666);
+    if (fd < 0)
+	G_fatal_error(_("Unable to create file <%s>"), env_file);
+
+    if (G_strncasecmp(name, "wx", 2) == 0) {
+        sprintf(buf, "GRASS_RENDER_IMMEDIATE=default\n"); /* TODO: read settings from wxGUI */
+        write(fd, buf, strlen(buf));
+        sprintf(buf, "GRASS_RENDER_FILE_READ=FALSE\n");
+        write(fd, buf, strlen(buf));
+        sprintf(buf, "GRASS_RENDER_TRANSPARENT=TRUE\n");
+        write(fd, buf, strlen(buf));
+    }
+    else {
+        sprintf(buf, "GRASS_RENDER_IMMEDIATE=%s\n", name);
+        write(fd, buf, strlen(buf));
+        sprintf(buf, "GRASS_RENDER_FILE_READ=TRUE\n");
+        write(fd, buf, strlen(buf));
 
-    u_name = G_store_upper(name);
+    }
+    sprintf(buf, "GRASS_RENDER_FILE=%s\n", out_file);
+    write(fd, buf, strlen(buf));
+    sprintf(buf, "GRASS_RENDER_WIDTH=%d\n", width);
+    write(fd, buf, strlen(buf));
+    sprintf(buf, "GRASS_RENDER_HEIGHT=%d\n", height);
+    write(fd, buf, strlen(buf));
+    sprintf(buf, "GRASS_LEGEND_FILE=%s\n", leg_file);
+    write(fd, buf, strlen(buf));
 
-    env_name = env_value = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_ENVFILE", u_name);
-    G_asprintf(&env_value, "%s.env", tempfile);
-    G_setenv(env_name, env_value);
-    env_fd = creat(env_value, 0666);
-    if (env_fd < 0)
-	G_fatal_error(_("Unable to create file '%s'"), env_value);
 
-    sprintf(buf, "GRASS_RENDER_FILE_READ=TRUE\n");
-    write(env_fd, buf, strlen(buf));
-    if (width) {
-	sprintf(buf, "GRASS_RENDER_WIDTH=%d\n", width);
-	write(env_fd, buf, strlen(buf));
-    }
-    if (height) {
-	sprintf(buf, "GRASS_RENDER_HEIGHT=%d\n", height);
-	write(env_fd, buf, strlen(buf));
-    }
     if (bgcolor) {
 	if (strcmp(bgcolor, "none") == 0)
 	    sprintf(buf, "GRASS_RENDER_TRANSPARENT=TRUE\n");
 	else
 	    sprintf(buf, "GRASS_RENDER_BACKGROUNDCOLOR=%s\n", bgcolor);
-	write(env_fd, buf, strlen(buf));
+	write(fd, buf, strlen(buf));
     }
     if (truecolor) {
 	sprintf(buf, "GRASS_RENDER_TRUECOLOR=TRUE\n");
-	write(env_fd, buf, strlen(buf));
-    }
-    close(env_fd);
-
-    cmd_value = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_CMDFILE", u_name);
-    G_asprintf(&cmd_value, "%s.cmd", tempfile);
-    G_setenv(env_name, cmd_value);
-    close(creat(cmd_value, 0666));
-
-    G_verbose_message(_("Starting monitor <%s> with env file '%s'"), name, env_value);
-    if (G_verbose() > G_verbose_std()) {
-        FILE *fd;
-        
-        fd = fopen(env_value, "r");
-        while (G_getl2(buf, sizeof(buf) - 1, fd) != 0) {
-            fprintf(stderr, " %s\n", buf);
-        }
-        fclose(fd);
+	write(fd, buf, strlen(buf));
     }
-
-    G_debug(1, "start: name=%s ", name);
-    G_debug(3, "       envfile = %s", env_value);
-    G_debug(3, "       cmdfile = %s", cmd_value);
-    
+    close(fd);
+   
+    /* create cmd file (list of GRASS display commands to render) */
+    G_debug(1, "Monitor name=%s, cmdfile = %s", name, cmd_file);
+    if (0 > creat(cmd_file, 0666))
+        G_fatal_error(_("Unable to create file <%s>"), cmd_file);
+
+    /* select monitor if requested */
     if (select)
 	G_setenv("MONITOR", name);
-    
-    if (strncmp(name, "wx", 2) == 0) 
-	start_wx(name, tempfile, env_value, cmd_value, 
-		 width, height);
-    else
-      start(name, output, update);
-    
+   
+    G_free(mon_path);
+    G_free(out_file);
+    G_free(env_file);
+
     return 0;
 }
 
diff --git a/display/d.mon/stop.c b/display/d.mon/stop.c
index 04c2b11..cd16a6d 100644
--- a/display/d.mon/stop.c
+++ b/display/d.mon/stop.c
@@ -1,58 +1,79 @@
 #include <stdlib.h>
 #include <signal.h>
 #include <string.h>
+#include <unistd.h>
+#include <dirent.h>
 
 #include <grass/gis.h>
 #include <grass/glocale.h>
 
 #include "proto.h"
 
-static void clean_env(const char *);
 static int stop_wx(const char *);
 static int stop(const char *);
 
 int stop_mon(const char *name)
 {
     if (!check_mon(name)) {
-	clean_env(name);
 	G_fatal_error(_("Monitor <%s> is not running"), name);
     }
     
     if (strncmp(name, "wx", 2) == 0)
-	return stop_wx(name);
+	stop_wx(name);
 
     return stop(name);
 }
 
 int stop(const char *name)
 {
-    char *env_name;
-    const char *env_file;
+    char *mon_path, file_path[GPATH_MAX];
+    struct dirent *dp;
+    DIR *dirp;
 
-    env_name = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_ENVFILE", G_store_upper(name));
-    
-    env_file = G_getenv_nofatal(env_name);
-    if (!env_file)
-	G_warning(_("Env file not found"));
+    mon_path = get_path(name, TRUE);
+    dirp = opendir(mon_path);
+
+    while ((dp = readdir(dirp)) != NULL) {
+        if (!dp->d_name || dp->d_name[0] == '.')
+            continue;
+        sprintf(file_path, "%s/%s", mon_path, dp->d_name);
+        if (unlink(file_path) == -1)
+            G_warning(_("Unable to delete file <%s>"), file_path);
+    }
+    closedir(dirp);
     
-    clean_env(name);
+    if (rmdir(mon_path) == -1)
+        G_warning(_("Unable to delete directory <%s>"), mon_path);
+
+    G_free(mon_path);
+
+    G_unsetenv("MONITOR");
 
     return 0;
 }
 
 int stop_wx(const char *name)
 {
-    char *env_name;
-    const char *pid;
-
-    env_name = NULL;
-    G_asprintf(&env_name, "MONITOR_%s_PID", G_store_upper(name));
+    char *mon_path, *pid;
+    char pid_file[GPATH_MAX], buf[512];
+    FILE *fp;
+    
+    mon_path = get_path(name, FALSE);
+    G_file_name(pid_file, mon_path, "pid", G_mapset());
+    
+    fp = fopen(pid_file, "r");
+    if (!fp) {
+	G_warning(_("Unable to open file <%s>"), pid_file);
+        return 1;
+    }
+    pid = NULL;
+    if (G_getl2(buf, sizeof(buf) - 1, fp) != 0)
+        pid = G_store(buf);
+    fclose(fp);
     
-    pid = G_getenv_nofatal(env_name);
     if (!pid) {
-	clean_env(name);
-	G_fatal_error(_("PID file not found"));
+	G_warning(_("Unable to read file <%s>"), pid_file);
+        return 1;
     }
     
 #ifdef __MINGW32__
@@ -63,37 +84,5 @@ int stop_wx(const char *name)
     }
 #endif
     
-    clean_env(name);
-
     return 0;
 }
-
-void clean_env(const char *name)
-{
-    int i;
-    char *u_name;
-    const char *env_prefix = "MONITOR_";
-    const char *env;
-    int env_prefix_len;
-    char **tokens;
-
-    u_name = G_store_upper(name);
-    env_prefix_len = strlen(env_prefix);
-    
-    tokens = NULL;
-    for (i = 0; (env = G_get_env_name(i)); i++) {
-	if (strncmp(env_prefix, env, env_prefix_len) != 0)
-	    continue;
-	
-	tokens = G_tokenize(env, "_");
-	if (G_number_of_tokens(tokens) != 3 ||
-	    strcmp(tokens[1], u_name) != 0)
-	    continue;
-	G_unsetenv(env);
-	i--; /* env has been removed for the list */
-	G_free_tokens(tokens);
-	tokens = NULL;
-    }
-
-    G_unsetenv("MONITOR");
-}
diff --git a/display/d.northarrow/Makefile b/display/d.northarrow/Makefile
index d386209..493446a 100644
--- a/display/d.northarrow/Makefile
+++ b/display/d.northarrow/Makefile
@@ -7,4 +7,14 @@ DEPENDENCIES = $(DISPLAYDEP) $(SYMBDEP) $(GISDEP)
 
 include $(MODULE_TOPDIR)/include/Make/Module.make
 
-default: cmd
+# thumbnail previews
+IMGSRC := $(wildcard thumbnails/*.png)
+IMGDST := $(patsubst thumbnails/%,$(HTMLDIR)/northarrows/%,$(IMGSRC))
+
+default: cmd $(IMGDST)
+
+$(HTMLDIR)/northarrows/%.png: thumbnails/%.png | $(HTMLDIR)/northarrows
+	$(INSTALL_DATA) $< $@
+
+$(HTMLDIR)/northarrows: $(HTMLDIR)
+	$(MKDIR) $@
diff --git a/display/d.northarrow/d.northarrow.html b/display/d.northarrow/d.northarrow.html
index f32057d..3ff2321 100644
--- a/display/d.northarrow/d.northarrow.html
+++ b/display/d.northarrow/d.northarrow.html
@@ -1,19 +1,31 @@
 <h2>DESCRIPTION</h2>
  
-<em>d.northarrow</em> displays a north arrow symbol the graphics monitor at
+<em>d.northarrow</em> displays a north arrow symbol at
 the given screen coordinates. If no coordinates are given it will draw the
 north arrow in the bottom right of the display. It can draw the north arrow
 in a number of styles (see the
  <a href="http://grasswiki.osgeo.org/wiki/Cartography#Display_monitors">wiki
 page</a> for details).
+With certain styles of north arrow label 'N' is displayed by default,
+and can be changed with option <b>label</b>, for example for different languages.
+The label can be hidden with <b>-t</b> flag.
+<p>
+North arrow can be rotated, for example to align with true north, not grid north.
+The angle in degrees counter-clockwise (or radians with <b>-r</b> flag)
+can be specified with option <b>rotation</b>. Label is rotated together with the
+arrow, unless flag <b>-w</b> is specified.
 
 
-<h2>TODO</h2>
+<h2>EXAMPLES</h2>
 
-Add options to use an arbitrary rotation angle for when grid north and true
-north diverge, and add a flag to calculate that convergence angle and apply
-the rotation automatically.
+Display a north arrow symbol as a basic compas with label NORTH,
+rotated by 8 degrees with label, with black line and gray fill:<br>
 
+<div class="code"><pre>
+d.mon wx0
+d.northarrow style=basic_compas rotation=8 label=NORTH -w color=black fill_color=gray
+d.mon -r
+</pre></div>
 
 <h2>SEE ALSO</h2>
 
@@ -27,7 +39,8 @@ the rotation automatically.
 
 <h2>AUTHOR</h2>
 
-Hamish Bowman, <i>Department of Geology, University of Otago, New Zealand</i>
+Hamish Bowman, <i>Department of Geology, University of Otago, New Zealand</i><br>
+Improvements as part of GSoC 2016 by Adam Laza, <i>CTU in Prague</i>
 
 <p>
-<i>Last changed: $Date: 2013-09-19 08:08:54 +0200 (Thu, 19 Sep 2013) $</i>
+<i>Last changed: $Date: 2016-08-01 10:21:57 +0200 (Mon, 01 Aug 2016) $</i>
diff --git a/display/d.northarrow/draw_n_arrow.c b/display/d.northarrow/draw_n_arrow.c
index ecc4ce7..0915e4c 100644
--- a/display/d.northarrow/draw_n_arrow.c
+++ b/display/d.northarrow/draw_n_arrow.c
@@ -4,6 +4,7 @@
 
 #include <stdio.h>
 #include <string.h>
+#include <math.h>
 #include <grass/gis.h>
 #include <grass/display.h>
 #include <grass/symbol.h>
@@ -11,12 +12,13 @@
 #include <grass/glocale.h>
 #include "options.h"
 
-int draw_n_arrow(double east, double north, double fontsize,
-		 char *n_arrow_num, double line_width)
+int draw_n_arrow(double east, double north, double rotation, char *lbl,
+                 int rot_with_text, double fontsize, char *n_arrow_num,
+                 double line_width)
 {
     double x_pos, y_pos;
     double t, b, l, r;
-    double tt, tb, tl, tr; /* text box*/
+    double tt, tb, tl, tr;      /* text box */
 
     SYMBOL *Symb;
     RGBA_Color *line_color, *fill_color;
@@ -28,7 +30,7 @@ int draw_n_arrow(double east, double north, double fontsize,
 
     /* Establish text size */
     if (fontsize > 0)
-	D_text_size(fontsize, fontsize);
+        D_text_size(fontsize, fontsize);
 
     D_setup_unity(0);
     D_get_src(&t, &b, &l, &r);
@@ -37,48 +39,74 @@ int draw_n_arrow(double east, double north, double fontsize,
     y_pos = t + (int)((100. - north) * (b - t) / 100.);
 
     if (line_width > 0)
-	D_line_width(line_width);
+        D_line_width(line_width);
 
     if (fontsize > 0) {
-    	/* draw the "N" */
-    	D_get_text_box("N", &tt, &tb, &tl, &tr);
-    	D_use_color(fg_color);
-
-    	/* positions manually tuned */
-    	switch (n_arrow_num[0]) {
-    	case '1':
-    	    D_pos_abs(x_pos - (tr + tl) / 2, y_pos - 45);
-    	    D_text("N");
-    	    break;
-    	case '3':
-    	    D_pos_abs(x_pos - (tr + tl) / 2, y_pos - 60);
-    	    D_text("N");
-    	    break;
-    	case '4':
-    	    D_pos_abs(x_pos - (tr + tl) / 2, y_pos - 45);
-    	    D_text("N");
-    	    break;
-    	case '7':
-    	    D_pos_abs(x_pos - (tr + tl) / 2, y_pos - 70);
-    	    D_text("N");
-    	    break;
-    	case '9':
-	case 'f':
-    	    D_pos_abs(x_pos - (tr + tl) / 2, y_pos - 55);
-    	    D_text("N");
-	    break;
-    	case 'b':
-    	    D_pos_abs(x_pos - (tr + tl) / 2, y_pos - 48.5);
-    	    D_text("N");
-    	    break;
-    	case '2':
-    	case '5':
-    	case '6':
-    	case '8':
-    	    break;
-    	default:
-    	    G_fatal_error(_("Could not parse symbol"));
-    	}
+        /* draw the label (default "N") */
+        if (rot_with_text)
+            D_text_rotation(rotation * 180.0 / M_PI);
+        D_get_text_box(lbl, &tt, &tb, &tl, &tr);
+        D_use_color(text_color);
+
+        /* positions manually tuned */
+        switch (n_arrow_num[0]) {
+        case '1':
+            D_pos_abs(x_pos - sin(rotation) * 50 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 50 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case '3':
+            D_pos_abs(x_pos - sin(rotation) * 60 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 60 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case '4':
+            D_pos_abs(x_pos - sin(rotation) * 45 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 45 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case '7':
+            D_pos_abs(x_pos - sin(rotation) * 70 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 70 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case '8':
+            D_pos_abs(x_pos - sin(rotation) * 60 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 60 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case '9':
+            D_pos_abs(x_pos - sin(rotation) * 55 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 55 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case 'f':
+            D_pos_abs(x_pos - sin(rotation) * 55 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 55 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case 'b':
+            D_pos_abs(x_pos - sin(rotation) * 48.5 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 48.5 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case 'a':
+            D_pos_abs(x_pos - sin(rotation) * 50 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 50 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case 's':
+            D_pos_abs(x_pos - sin(rotation) * 50 - (tr + tl) / 2,
+                      y_pos - cos(rotation) * 50 - (tb + tt) / 2);
+            D_text(lbl);
+            break;
+        case '2':
+        case '5':
+        case '6':
+            break;
+        default:
+            G_fatal_error(_("Could not parse symbol"));
+        }
     }
 
     /* display the north arrow symbol */
@@ -86,82 +114,97 @@ int draw_n_arrow(double east, double north, double fontsize,
     fill_color = G_malloc(sizeof(RGBA_Color));
 
     if (D_color_number_to_RGB(fg_color, &R, &G, &B) == 0)
-    	/* fall back to black on failure */
-    	G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
+        line_color->a = RGBA_COLOR_TRANSPARENT;
+    else
+        line_color->a = RGBA_COLOR_OPAQUE;
     line_color->r = (unsigned char)R;
     line_color->g = (unsigned char)G;
     line_color->b = (unsigned char)B;
-    line_color->a = RGBA_COLOR_OPAQUE;
+
 
     if (D_color_number_to_RGB(bg_color, &R, &G, &B) == 0)
-    	/* fall back to black on failure */
-    	G_str_to_color(DEFAULT_FG_COLOR, &R, &G, &B);
+        fill_color->a = RGBA_COLOR_TRANSPARENT;
+    else
+        fill_color->a = RGBA_COLOR_OPAQUE;
     fill_color->r = (unsigned char)R;
     fill_color->g = (unsigned char)G;
     fill_color->b = (unsigned char)B;
-    fill_color->a = RGBA_COLOR_OPAQUE;
-
-    if (n_arrow_num[0] == '2' || n_arrow_num[0] == '9')
-    	fill_color->a = RGBA_COLOR_TRANSPARENT;
 
     /* sizes manually tuned */
     switch (n_arrow_num[0]) {
     case '1':
-    	symbol_size = 35.;
-    	break;
+        symbol_size = 35.;
+        break;
     case '2':
-    	symbol_size = 19.;
-    	break;
+        symbol_size = 19.;
+        break;
     case '3':
-    	symbol_size = 20.;
-    	break;
+        symbol_size = 20.;
+        break;
     case '4':
-    	symbol_size = 15.;
-    	break;
+        symbol_size = 15.;
+        break;
     case '5':
     case '6':
-    	symbol_size = 14.;
-    	break;
+        symbol_size = 14.;
+        break;
     case '7':
-    	symbol_size = 23.;
-    	break;
+        symbol_size = 23.;
+        break;
     case '8':
     case '9':
-    	symbol_size = 17.;
-    	break;
+        symbol_size = 17.;
+        break;
     case 'b':
-    	symbol_size = 80.;
-    	break;
+        symbol_size = 80.;
+        break;
     case 'f':
-    	symbol_size = 100.;
-    	break;
+        symbol_size = 100.;
+        break;
+    case 'a':
+        if (n_arrow_num[5] == '2')
+            symbol_size = 53.;
+        else
+            symbol_size = 70.;
+        break;
+    case 's':
+        symbol_size = 80.;
+        break;
     default:
-    	G_fatal_error(_("Could not parse symbol"));
+        G_fatal_error(_("Could not parse symbol"));
     }
 
     x0 = D_d_to_u_col(x_pos);
     y0 = D_d_to_u_row(y_pos);
 
     if (n_arrow_num[0] == 'b')
-	strcpy(icon, "n_arrows/basic_compass");
+        strcpy(icon, "n_arrows/basic_compass");
     else if (n_arrow_num[0] == 'f')
-	strcpy(icon, "n_arrows/fancy_compass");
+        strcpy(icon, "n_arrows/fancy_compass");
+    else if (n_arrow_num[0] == 'a' && n_arrow_num[5] == '1')
+        strcpy(icon, "basic/arrow1");
+    else if (n_arrow_num[0] == 'a' && n_arrow_num[5] == '2')
+        strcpy(icon, "basic/arrow2");
+    else if (n_arrow_num[0] == 'a' && n_arrow_num[5] == '3')
+        strcpy(icon, "basic/arrow3");
+    else if (n_arrow_num[0] == 's')
+        strcpy(icon, "extra/4pt_star");
     else {
-	strcpy(icon, "n_arrows/n_arrow");
-	strncat(icon, n_arrow_num, 32);
+        strcpy(icon, "n_arrows/n_arrow");
+        strncat(icon, n_arrow_num, 32);
     }
 
     Symb = S_read(icon);
 
-    if(!Symb)
-    	G_fatal_error(_("Could not read symbol \"%s\""), icon);
+    if (!Symb)
+        G_fatal_error(_("Could not read symbol \"%s\""), icon);
 
-    S_stroke(Symb, symbol_size, 0.0, 0);
+    S_stroke(Symb, symbol_size, rotation * (180 / M_PI), 0);
     D_symbol(Symb, x0, y0, line_color, fill_color);
 
 
     if (line_width > 0)
-	D_line_width(0);
+        D_line_width(0);
 
     G_free(Symb);
     G_free(line_color);
diff --git a/display/d.northarrow/main.c b/display/d.northarrow/main.c
index cda42d7..e5347d0 100644
--- a/display/d.northarrow/main.c
+++ b/display/d.northarrow/main.c
@@ -1,3 +1,4 @@
+
 /****************************************************************************
  *
  * MODULE:       d.northarrow
@@ -18,22 +19,25 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
+#include <math.h>
 #include <grass/gis.h>
 #include <grass/display.h>
 #include <grass/glocale.h>
 #include "options.h"
 
-int fg_color, bg_color;
-int do_background = TRUE;
+int fg_color, bg_color, text_color;
+//int do_background = TRUE;
 
 int main(int argc, char **argv)
 {
     struct GModule *module;
     struct Option *bg_color_opt, *fg_color_opt, *coords, *n_arrow, *fsize,
-		 *width_opt;
-    struct Flag *no_text;
+        *width_opt, *rotation_opt, *lbl_opt, *text_color_opt;
+    struct Flag *no_text, *rotate_text, *rads;
     double east, north;
+    double rotation;
     double fontsize, line_width;
+    int rot_with_text;
 
     /* Initialize the GIS calls */
     G_gisinit(argv[0]);
@@ -41,16 +45,34 @@ int main(int argc, char **argv)
     module = G_define_module();
     G_add_keyword(_("display"));
     G_add_keyword(_("cartography"));
-    module->description = _("Displays a north arrow on the graphics monitor.");
+    module->description =
+        _("Displays a north arrow on the graphics monitor.");
 
     n_arrow = G_define_option();
     n_arrow->key = "style";
     n_arrow->description = _("North arrow style");
-    n_arrow->options = "1a,1b,2,3,4,5,6,7a,7b,8a,8b,9,fancy_compass,basic_compass";
+    n_arrow->options =
+        "1a,1b,2,3,4,5,6,7a,7b,8a,8b,9,fancy_compass,basic_compass,arrow1,arrow2,arrow3,star";
+    G_asprintf((char **)&(n_arrow->descriptions),
+               "1a;%s;" "1b;%s;" "2;%s;" "3;%s;" "4;%s;" "5;%s;" "6;%s;"
+               "7a;%s;" "7b;%s;" "8a;%s;" "8b;%s;" "9;%s;" "fancy_compass;%s;"
+               "basic_compass;%s;" "arrow1;%s;" "arrow2;%s;" "arrow3;%s;"
+               "star;%s;",
+               _("Two color arrowhead"),
+               _("Two color arrowhead with circle"),
+               _("Narrow with blending N"), _("Long with small arrowhead"),
+               _("Inverted narrow inside a circle"),
+               _("Triangle and N inside a circle"),
+               _("Arrowhead and N inside a circle"),
+               _("Tall half convex arrowhead"),
+               _("Tall half concave arrowhead"), _("Thin arrow in a circle"),
+               _("Fat arrow in a circle"), _("One color arrowhead"),
+               _("Fancy compass"), _("Basic compass"), _("Simple arrow"),
+               _("Thin arrow"), _("Fat arrow"), _("4-point star"));
     n_arrow->answer = "1a";
     n_arrow->guisection = _("Style");
     n_arrow->gisprompt = "old,northarrow,northarrow";
-    
+
     coords = G_define_option();
     coords->key = "at";
     coords->key_desc = "x,y";
@@ -58,19 +80,40 @@ int main(int argc, char **argv)
     coords->answer = "85.0,15.0";
     coords->options = "0-100";
     coords->label =
-	_("Screen coordinates of the rectangle's top-left corner");
+        _("Screen coordinates of the rectangle's top-left corner");
     coords->description = _("(0,0) is lower-left of the display frame");
 
-    fg_color_opt = G_define_standard_option(G_OPT_C);
+    rotation_opt = G_define_option();
+    rotation_opt->key = "rotation";
+    rotation_opt->type = TYPE_DOUBLE;
+    rotation_opt->required = NO;
+    rotation_opt->answer = "0";
+    rotation_opt->description =
+        _("Rotation angle in degrees (counter-clockwise)");
+
+    lbl_opt = G_define_option();
+    lbl_opt->key = "label";
+    lbl_opt->required = NO;
+    lbl_opt->answer = "N";
+    lbl_opt->description =
+        _("Displayed letter on the top of arrow");
+    lbl_opt->guisection = _("Text");
+
+    fg_color_opt = G_define_standard_option(G_OPT_CN);
     fg_color_opt->label = _("Line color");
     fg_color_opt->guisection = _("Colors");
 
     bg_color_opt = G_define_standard_option(G_OPT_CN);
     bg_color_opt->key = "fill_color";
     bg_color_opt->label = _("Fill color");
-    bg_color_opt->answer = _("black");
     bg_color_opt->guisection = _("Colors");
 
+    text_color_opt = G_define_standard_option(G_OPT_C);
+    text_color_opt->key = "text_color";
+    text_color_opt->label = _("Text color");
+    text_color_opt->answer = NULL;
+    text_color_opt->guisection = _("Colors");
+
     width_opt = G_define_option();
     width_opt->key = "width";
     width_opt->type = TYPE_DOUBLE;
@@ -85,39 +128,66 @@ int main(int argc, char **argv)
     fsize->options = "1-360";
     fsize->description = _("Font size");
     fsize->guisection = _("Text");
-    
+
     no_text = G_define_flag();
     no_text->key = 't';
     no_text->description = _("Draw the symbol without text");
     no_text->guisection = _("Text");
 
-/* TODO:
-     - add rotation= option to rotate the north arrow by an arbitrary amount.
-       do a bit of trig to figure out where to put the "N" (and rotate it too).
-     - add a -n flag to rotate to match true north instead of grid north.
+    rotate_text = G_define_flag();
+    rotate_text->key = 'w';
+    rotate_text->description = _("Do not rotate text with symbol");
+    rotate_text->guisection = _("Text");
+
+    rads = G_define_flag();
+    rads->key = 'r';
+    rads->description = _("Use radians instead of degrees for rotation");
+
+    /* TODO:
+       - add a -n flag to rotate to match true north instead of grid north.
        Similar to 'g.region -n' but use the at=x,y coord for the convergence
        angle calc. (assuming that's the center of the icon)
- */
+     */
 
 
     if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
-
+        exit(EXIT_FAILURE);
 
     sscanf(coords->answers[0], "%lf", &east);
     sscanf(coords->answers[1], "%lf", &north);
 
     fontsize = atof(fsize->answer);
     if (no_text->answer)
-	fontsize = -1;
+        fontsize = -1;
+
+    rot_with_text = 0;
+    if (!rotate_text->answer)
+        rot_with_text = 1;
+
+    /* Convert to radians */
+    rotation = atof(rotation_opt->answer);
+    if (!rads->answer)
+        rotation *= M_PI / 180.0;
+    rotation = fmod(rotation, 2.0 * M_PI);
+    if (rotation < 0.0)
+        rotation += 2.0 * M_PI;
 
     /* Parse and select foreground color */
-    fg_color = D_parse_color(fg_color_opt->answer, 0);
+    fg_color = D_parse_color(fg_color_opt->answer, 1);
 
     /* Parse and select background color */
     bg_color = D_parse_color(bg_color_opt->answer, 1);
-    if (bg_color == 0)
-	do_background = FALSE;
+
+    /* Parse and select text color */
+    if (text_color_opt->answer)
+        text_color = D_parse_color(text_color_opt->answer, 0);
+    else if (strcmp(fg_color_opt->answer, "none") != 0)
+        text_color = D_parse_color(fg_color_opt->answer, 1);
+    else if (strcmp(bg_color_opt->answer, "none") != 0)
+        text_color = D_parse_color(bg_color_opt->answer, 1);
+    else
+        text_color = 0;
+
 
     line_width = atof(width_opt->answer);
     if (line_width < 0)
@@ -125,10 +195,10 @@ int main(int argc, char **argv)
     else if (line_width > 72)
         line_width = 72;
 
-
     D_open_driver();
 
-    draw_n_arrow(east, north, fontsize, n_arrow->answer, line_width);
+    draw_n_arrow(east, north, rotation, lbl_opt->answer, rot_with_text,
+                 fontsize, n_arrow->answer, line_width);
 
     D_save_command(G_recreate_command());
     D_close_driver();
diff --git a/display/d.northarrow/options.h b/display/d.northarrow/options.h
index aba115c..63ccfbf 100644
--- a/display/d.northarrow/options.h
+++ b/display/d.northarrow/options.h
@@ -2,7 +2,7 @@
 /* globals */
 extern int fg_color;
 extern int bg_color;
-extern int do_background;
+extern int text_color;
 
 /* draw_n_arrow.c */
-int draw_n_arrow(double, double, double, char *, double);
+int draw_n_arrow(double, double, double, char *, int, double, char *, double);
diff --git a/display/d.northarrow/thumbnails/1a.png b/display/d.northarrow/thumbnails/1a.png
new file mode 100644
index 0000000..394c064
Binary files /dev/null and b/display/d.northarrow/thumbnails/1a.png differ
diff --git a/display/d.northarrow/thumbnails/1b.png b/display/d.northarrow/thumbnails/1b.png
new file mode 100644
index 0000000..095886d
Binary files /dev/null and b/display/d.northarrow/thumbnails/1b.png differ
diff --git a/display/d.northarrow/thumbnails/2.png b/display/d.northarrow/thumbnails/2.png
new file mode 100644
index 0000000..9f9e25d
Binary files /dev/null and b/display/d.northarrow/thumbnails/2.png differ
diff --git a/display/d.northarrow/thumbnails/3.png b/display/d.northarrow/thumbnails/3.png
new file mode 100644
index 0000000..dc2b120
Binary files /dev/null and b/display/d.northarrow/thumbnails/3.png differ
diff --git a/display/d.northarrow/thumbnails/4.png b/display/d.northarrow/thumbnails/4.png
new file mode 100644
index 0000000..ae2091a
Binary files /dev/null and b/display/d.northarrow/thumbnails/4.png differ
diff --git a/display/d.northarrow/thumbnails/5.png b/display/d.northarrow/thumbnails/5.png
new file mode 100644
index 0000000..6cb63dd
Binary files /dev/null and b/display/d.northarrow/thumbnails/5.png differ
diff --git a/display/d.northarrow/thumbnails/6.png b/display/d.northarrow/thumbnails/6.png
new file mode 100644
index 0000000..8adb563
Binary files /dev/null and b/display/d.northarrow/thumbnails/6.png differ
diff --git a/display/d.northarrow/thumbnails/7a.png b/display/d.northarrow/thumbnails/7a.png
new file mode 100644
index 0000000..32da27d
Binary files /dev/null and b/display/d.northarrow/thumbnails/7a.png differ
diff --git a/display/d.northarrow/thumbnails/7b.png b/display/d.northarrow/thumbnails/7b.png
new file mode 100644
index 0000000..110b33b
Binary files /dev/null and b/display/d.northarrow/thumbnails/7b.png differ
diff --git a/display/d.northarrow/thumbnails/8a.png b/display/d.northarrow/thumbnails/8a.png
new file mode 100644
index 0000000..df6fda0
Binary files /dev/null and b/display/d.northarrow/thumbnails/8a.png differ
diff --git a/display/d.northarrow/thumbnails/8b.png b/display/d.northarrow/thumbnails/8b.png
new file mode 100644
index 0000000..473c5ce
Binary files /dev/null and b/display/d.northarrow/thumbnails/8b.png differ
diff --git a/display/d.northarrow/thumbnails/9.png b/display/d.northarrow/thumbnails/9.png
new file mode 100644
index 0000000..38442b0
Binary files /dev/null and b/display/d.northarrow/thumbnails/9.png differ
diff --git a/display/d.northarrow/thumbnails/README b/display/d.northarrow/thumbnails/README
new file mode 100644
index 0000000..b0bb431
--- /dev/null
+++ b/display/d.northarrow/thumbnails/README
@@ -0,0 +1,25 @@
+#How to generate new scale bar thumbnail
+#=======================================
+#Expects North Carolina dataset. The thumbnail height should be 24 px.
+#
+
+export GRASS_RENDER_IMMEDIATE=png
+export GRASS_RENDER_TRUECOLOR=TRUE
+export GRASS_RENDER_WIDTH=300
+export GRASS_RENDER_HEIGHT=300
+g.region raster=elevation
+
+#PREFIX=n_arrow_
+PREFIX=""
+
+for STYLE in 1a 1b 2 3 4 5 6 7a 7b 8a 8b 9 fancy_compass basic_compass arrow1 arrow2 arrow3 star
+do
+	echo ${STYLE}
+	export GRASS_RENDER_FILE=${PREFIX}${STYLE}.png
+	d.northarrow -t style=${STYLE} at=20,20
+	mogrify -trim ${PREFIX}${STYLE}.png
+	identify -format "%[fx:w]x%[fx:h]" ${PREFIX}${STYLE}.png
+	# first resize it to max size and then place it into a bigger rectangle
+	mogrify -resize 24x24 -background white -gravity Center -extent 24x24 ${PREFIX}${STYLE}.png
+	optipng -o5 ${PREFIX}${STYLE}.png ${PREFIX}${STYLE}.png --quiet
+done
diff --git a/display/d.northarrow/thumbnails/arrow1.png b/display/d.northarrow/thumbnails/arrow1.png
new file mode 100644
index 0000000..e8baaee
Binary files /dev/null and b/display/d.northarrow/thumbnails/arrow1.png differ
diff --git a/display/d.northarrow/thumbnails/arrow2.png b/display/d.northarrow/thumbnails/arrow2.png
new file mode 100644
index 0000000..33e5bd0
Binary files /dev/null and b/display/d.northarrow/thumbnails/arrow2.png differ
diff --git a/display/d.northarrow/thumbnails/arrow3.png b/display/d.northarrow/thumbnails/arrow3.png
new file mode 100644
index 0000000..db3d3a0
Binary files /dev/null and b/display/d.northarrow/thumbnails/arrow3.png differ
diff --git a/display/d.northarrow/thumbnails/basic_compass.png b/display/d.northarrow/thumbnails/basic_compass.png
new file mode 100644
index 0000000..5bb8b8f
Binary files /dev/null and b/display/d.northarrow/thumbnails/basic_compass.png differ
diff --git a/display/d.northarrow/thumbnails/fancy_compass.png b/display/d.northarrow/thumbnails/fancy_compass.png
new file mode 100644
index 0000000..d42aa38
Binary files /dev/null and b/display/d.northarrow/thumbnails/fancy_compass.png differ
diff --git a/display/d.northarrow/thumbnails/star.png b/display/d.northarrow/thumbnails/star.png
new file mode 100644
index 0000000..8d5751a
Binary files /dev/null and b/display/d.northarrow/thumbnails/star.png differ
diff --git a/display/d.path/d.path.html b/display/d.path/d.path.html
index 583595a..a7ae2aa 100644
--- a/display/d.path/d.path.html
+++ b/display/d.path/d.path.html
@@ -45,4 +45,4 @@ d.path -b roadsmajor coordinates=668646.15,224447.16,668348.83,235894.02
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/display/d.path/select.c b/display/d.path/select.c
index 1fdd640..9b3dffe 100644
--- a/display/d.path/select.c
+++ b/display/d.path/select.c
@@ -117,7 +117,7 @@ int coor_path(struct Map_info *Map, const struct color_rgb *hcolor,
     ret =
 	Vect_net_shortest_path_coor(Map, fx, fy, 0.0, tx, ty, 0.0,
 				    5 * maxdist, 5 * maxdist, &cost, Points,
-				    NULL, NULL, NULL, &fdist, &tdist);
+				    NULL, NULL, NULL, NULL, &fdist, &tdist);
     if (ret == 0) {
 	fprintf(stdout, _("Destination unreachable\n"));
     }
diff --git a/display/d.profile/d.profile.html b/display/d.profile/d.profile.html
index 1e3ec8a..409b365 100644
--- a/display/d.profile/d.profile.html
+++ b/display/d.profile/d.profile.html
@@ -18,4 +18,4 @@ Glynn Clements
 This program has been completely re-written for 7.0. It bears no
 relation to the interactive d.profile module in previous versions.
 
-<p><i>Last changed: $Date: 2014-09-27 23:56:34 +0200 (Sat, 27 Sep 2014) $</i>
+<p><i>Last changed: $Date: 2014-09-27 23:56:16 +0200 (Sat, 27 Sep 2014) $</i>
diff --git a/display/d.rast.arrow/d.rast.arrow.html b/display/d.rast.arrow/d.rast.arrow.html
index 2768ebd..2afae78 100644
--- a/display/d.rast.arrow/d.rast.arrow.html
+++ b/display/d.rast.arrow/d.rast.arrow.html
@@ -36,10 +36,13 @@ option to draw arrows every n-th cell in both directions if you are working
 with relatively high resolutions. It may be useful to disable the grid in
 this case, which is accomplished by setting its color to "<tt>none</tt>".
 <p>For GRASS and Compass type aspect maps, the cell values of the aspect map
-will determine the corresponding direction in 360 degrees. ANSWERS type
-aspect maps will be plotted in multiples of 15 degrees, and AGNPS type
-aspect maps will be displayed in D8 representation, i.e. the eight multiples 
-of 45 degrees.
+will determine the corresponding direction in 360 degrees. ANSWERS type aspect
+maps will be plotted in multiples of 15 degrees counterclockwise from east, and
+AGNPS and Drainage type aspect maps will be displayed in D8 representation,
+i.e. the eight multiples of 45 degrees. Cell values are 1 to 8 clockwise from
+north for AGNPS and 1 to 8 counterclockwise from north east for Drainage. See
+<em><a href="r.watershed.html">r.watershed</a></em> for more details about the
+Drainage aspect.
 <p>GRASS aspect maps are measured using Cartesian conventions, i.e. in degrees
 counterclockwise from east. e.g.:
 
@@ -91,7 +94,9 @@ Chris Rewerts<br>
 Purdue University</em><br><br>
 <u>Magnitude and 360 arrow code</u><br>
 Hamish Bowman<br>
-<em>Department of Marine Science, <br>
-University of Otago, New Zealand</em>
+<em>Department of Marine Science,<br>
+University of Otago, New Zealand</em><br><br>
+<u>Align grids with raster cells and Drainage aspect type</u><br>
+Huidae Cho<br>
 
-<p><i>Last changed: $Date: 2016-09-11 21:39:11 +0200 (Sun, 11 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-11 21:36:44 +0200 (Sun, 11 Sep 2016) $</i>
diff --git a/display/d.rast.arrow/main.c b/display/d.rast.arrow/main.c
index 683c1c8..8953c2e 100644
--- a/display/d.rast.arrow/main.c
+++ b/display/d.rast.arrow/main.c
@@ -15,6 +15,8 @@
 /* some minor cleanup done by Andreas Lange, andreas.lange at rhein-main.de
  * Update to handle NULLs and floating point aspect maps: Hamish Bowman, Aug 2004
  * Update for 360 degree arrows and magnitude scaling:  Hamish Bowman, Oct 2005
+ * Align grids with raster cells: Huidae Cho, Apr 2009
+ * Drainage aspect type: Huidae Cho, Sep 2015
  */
 
 /*
@@ -107,7 +109,7 @@ int main(int argc, char **argv)
     opt2->type = TYPE_STRING;
     opt2->required = NO;
     opt2->answer = "grass";
-    opt2->options = "grass,compass,agnps,answers";
+    opt2->options = "grass,compass,drainage,agnps,answers";
     opt2->description = _("Type of existing raster aspect map");
 
     opt3 = G_define_standard_option(G_OPT_C);
@@ -199,6 +201,8 @@ int main(int argc, char **argv)
 	map_type = 3;
     else if (strcmp("compass", opt2->answer) == 0)
 	map_type = 4;
+    else if (strcmp("drainage", opt2->answer) == 0)
+	map_type = 5;
 
 
     scale = atof(opt8->answer);
@@ -373,7 +377,7 @@ int main(int argc, char **argv)
 
 	    /* treat AGNPS and ANSWERS data like old zero-as-null CELL */
 	    /*   TODO: update models */
-	    if (map_type == 2 || map_type == 3) {
+	    if (map_type == 2 || map_type == 3 || map_type == 5) {
 		if (Rast_is_null_value(ptr, raster_type))
 		    aspect_c = 0;
 		else
@@ -507,6 +511,53 @@ int main(int argc, char **argv)
 		}
 	    }
 
+	    /* case switch for r.watershed drainage type aspect map */
+	    else if (map_type == 5) {
+		D_use_color(arrow_color);
+		switch (aspect_c >= 0 ? aspect_c : -aspect_c) {
+		case 0:
+		    /* only draw if x_color is not none (transparent) */
+		    if (x_color > 0) {
+			D_use_color(x_color);
+			draw_x();
+			D_use_color(arrow_color);
+		    }
+		    break;
+		case 1:
+		    arrow_ne();
+		    break;
+		case 2:
+		    arrow_n();
+		    break;
+		case 3:
+		    arrow_nw();
+		    break;
+		case 4:
+		    arrow_w();
+		    break;
+		case 5:
+		    arrow_sw();
+		    break;
+		case 6:
+		    arrow_s();
+		    break;
+		case 7:
+		    arrow_se();
+		    break;
+		case 8:
+		    arrow_e();
+		    break;
+		default:
+		    /* only draw if unknown_color is not none */
+		    if (unknown_color > 0) {
+			D_use_color(unknown_color);
+			unknown_();
+			D_use_color(arrow_color);
+		    }
+		    break;
+		}
+	    }
+
 	    ptr = G_incr_void_ptr(ptr, Rast_cell_size(raster_type));
 	    if (opt7->answer)
 		mag_ptr =
diff --git a/display/d.rast.num/d.rast.num.html b/display/d.rast.num/d.rast.num.html
index b4c8571..257b50f 100644
--- a/display/d.rast.num/d.rast.num.html
+++ b/display/d.rast.num/d.rast.num.html
@@ -57,4 +57,4 @@ Raghavan Srinivasan,
 and Chris Rewerts,<br>
 Agricultural Engineering, Purdue University
 
-<p><i>Last changed: $Date: 2015-05-01 12:27:34 +0200 (Fri, 01 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-01 12:25:58 +0200 (Fri, 01 May 2015) $</i>
diff --git a/display/d.rast.num/main.c b/display/d.rast.num/main.c
index 06c2778..be236fe 100644
--- a/display/d.rast.num/main.c
+++ b/display/d.rast.num/main.c
@@ -60,7 +60,8 @@ int main(int argc, char **argv)
     struct Colors colors;
     struct GModule *module;
     struct _opt {
-	struct Option *map, *grid_color, *text_color, *prec;
+	struct Option *map, *grid_color, *text_color, *prec,
+	    *font, *path, *charset;
     } opt;
     struct _flg {
 	struct Flag *text_color, *align;
@@ -110,7 +111,29 @@ int main(int argc, char **argv)
     flg.text_color->key = 'f';
     flg.text_color->description = _("Get text color from cell color value");
     flg.text_color->guisection = _("Colors");
-    
+
+    opt.font = G_define_option();
+    opt.font->key = "font";
+    opt.font->type = TYPE_STRING;
+    opt.font->required = NO;
+    opt.font->description = _("Font name");
+    opt.font->guisection = _("Font settings");
+
+    opt.path = G_define_standard_option(G_OPT_F_INPUT);
+    opt.path->key = "path";
+    opt.path->required = NO;
+    opt.path->description = _("Path to font file");
+    opt.path->gisprompt = "old_file,font,file";
+    opt.path->guisection = _("Font settings");
+
+    opt.charset = G_define_option();
+    opt.charset->key = "charset";
+    opt.charset->type = TYPE_STRING;
+    opt.charset->required = NO;
+    opt.charset->description =
+	_("Text encoding (only applicable to TrueType fonts)");
+    opt.charset->guisection = _("Font settings");
+
     /* Check command line */
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
@@ -193,6 +216,14 @@ int main(int argc, char **argv)
 
     D_open_driver();
     
+    if (opt.font->answer)
+	D_font(opt.font->answer);
+    else if (opt.path->answer)
+	D_font(opt.path->answer);
+
+    if (opt.charset->answer)
+	D_encoding(opt.charset->answer);
+    
     D_setup2(0, 0, t, b, l, r);
 
     D_ns = fabs(D_get_u_to_d_yconv());
diff --git a/display/d.rast/display.c b/display/d.rast/display.c
index 3521f74..73be606 100644
--- a/display/d.rast/display.c
+++ b/display/d.rast/display.c
@@ -30,8 +30,6 @@ int display(const char *name,
 	Rast_set_null_value_color(r, g, b, &colors);
     }
 
-    D_setup(0);
-
     /* Go draw the raster map */
     cell_draw(name, &colors, overlay, invert, data_type);
 
diff --git a/display/d.rgb/d.rgb.html b/display/d.rgb/d.rgb.html
index 44cb14f..4ba3534 100644
--- a/display/d.rgb/d.rgb.html
+++ b/display/d.rgb/d.rgb.html
@@ -66,4 +66,4 @@ d.rgb blue=lsat7_2002_10 green=lsat7_2002_20 red=lsat7_2002_30
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2014-12-28 16:45:01 +0100 (Sun, 28 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-28 16:42:58 +0100 (Sun, 28 Dec 2014) $</i>
diff --git a/display/d.rhumbline/d.rhumbline.html b/display/d.rhumbline/d.rhumbline.html
index d9c8db2..a716f62 100644
--- a/display/d.rhumbline/d.rhumbline.html
+++ b/display/d.rhumbline/d.rhumbline.html
@@ -54,4 +54,4 @@ coordinate system.
 
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/display/d.rhumbline/main.c b/display/d.rhumbline/main.c
index 36aefa5..4c015f6 100644
--- a/display/d.rhumbline/main.c
+++ b/display/d.rhumbline/main.c
@@ -57,9 +57,9 @@ int main(int argc, char *argv[])
     parm.lcolor->label = _("Line color");
 
 #ifdef CAN_DO_DISTANCES
-    parm.tcolor = G_define_standard_option(G_OPT_C_FG);
+    parm.tcolor = G_define_standard_option(G_OPT_C);
     parm.tcolor->key = "text_color";
-    parm.tcolor->label = _("Text color or \"none\"");
+    parm.tcolor->label = _("Text color");
     parm.tcolor->answer = NULL;
 
     parm.units = G_define_standard_option(G_OPT_M_UNITS);
diff --git a/display/d.text/d.text.html b/display/d.text/d.text.html
index 34e932a..b175435 100644
--- a/display/d.text/d.text.html
+++ b/display/d.text/d.text.html
@@ -109,4 +109,4 @@ U.S. Army Construction Engineering
 Research Laboratory
 <p>Updates by Huidae Cho
 
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/display/d.text/main.c b/display/d.text/main.c
index c59882a..abb991a 100644
--- a/display/d.text/main.c
+++ b/display/d.text/main.c
@@ -145,15 +145,12 @@ int main(int argc, char **argv)
     opt.text->type = TYPE_STRING;
     opt.text->required = NO;
     opt.text->description = _("Text to display");
+    opt.text->guisection = _("Input");
 
-    opt.size = G_define_option();
-    opt.size->key = "size";
-    opt.size->type = TYPE_DOUBLE;
-    opt.size->required = NO;
-    opt.size->answer = "5";
-    opt.size->options = "0-100";
-    opt.size->description =
-	_("Height of letters in percentage of available frame height");
+    opt.input = G_define_standard_option(G_OPT_F_INPUT);
+    opt.input->required = NO;
+    opt.input->description = _("Input file");
+    opt.input->guisection = _("Input");
 
     opt.fgcolor = G_define_option();
     opt.fgcolor->key = "color";
@@ -163,6 +160,7 @@ int main(int argc, char **argv)
     opt.fgcolor->description =
 	_("Text color, either a standard GRASS color or R:G:B triplet");
     opt.fgcolor->gisprompt = "old_color,color,color";
+    opt.fgcolor->guisection = _("Text");
 
     opt.bgcolor = G_define_option();
     opt.bgcolor->key = "bgcolor";
@@ -171,14 +169,24 @@ int main(int argc, char **argv)
     opt.bgcolor->description =
         _("Text background color, either a standard GRASS color or R:G:B triplet");
     opt.bgcolor->gisprompt = "old_color,color,color";
+    opt.bgcolor->guisection = _("Text");
 
-    opt.line = G_define_option();
-    opt.line->key = "line";
-    opt.line->required = NO;
-    opt.line->type = TYPE_INTEGER;
-    opt.line->options = "1-1000";
-    opt.line->description =
-	_("The screen line number on which text will begin to be drawn");
+    opt.rotation = G_define_option();
+    opt.rotation->key = "rotation";
+    opt.rotation->type = TYPE_DOUBLE;
+    opt.rotation->required = NO;
+    opt.rotation->answer = "0";
+    opt.rotation->description =
+    _("Rotation angle in degrees (counter-clockwise)");
+    opt.rotation->guisection = _("Text");
+
+    opt.linespacing = G_define_option();
+    opt.linespacing->key = "linespacing";
+    opt.linespacing->type = TYPE_DOUBLE;
+    opt.linespacing->required = NO;
+    opt.linespacing->answer = "1.25";
+    opt.linespacing->description = _("Line spacing");
+    opt.linespacing->guisection = _("Text");
 
     opt.at = G_define_option();
     opt.at->key = "at";
@@ -187,6 +195,16 @@ int main(int argc, char **argv)
     opt.at->required = NO;
     opt.at->description =
 	_("Screen position at which text will begin to be drawn (percentage, [0,0] is lower left)");
+    opt.at->guisection = _("Position");
+
+    opt.line = G_define_option();
+    opt.line->key = "line";
+    opt.line->required = NO;
+    opt.line->type = TYPE_INTEGER;
+    opt.line->options = "1-1000";
+    opt.line->description =
+	_("The screen line number on which text will begin to be drawn");
+    opt.line->guisection = _("Position");
 
     opt.align = G_define_option();
     opt.align->key = "align";
@@ -195,33 +213,31 @@ int main(int argc, char **argv)
     opt.align->answer = "ll";
     opt.align->options = "ll,lc,lr,cl,cc,cr,ul,uc,ur";
     opt.align->description = _("Text alignment");
-
-    opt.rotation = G_define_option();
-    opt.rotation->key = "rotation";
-    opt.rotation->type = TYPE_DOUBLE;
-    opt.rotation->required = NO;
-    opt.rotation->answer = "0";
-    opt.rotation->description =
-	_("Rotation angle in degrees (counter-clockwise)");
-
-    opt.linespacing = G_define_option();
-    opt.linespacing->key = "linespacing";
-    opt.linespacing->type = TYPE_DOUBLE;
-    opt.linespacing->required = NO;
-    opt.linespacing->answer = "1.25";
-    opt.linespacing->description = _("Line spacing");
+    opt.align->guisection = _("Position");
 
     opt.font = G_define_option();
     opt.font->key = "font";
     opt.font->type = TYPE_STRING;
     opt.font->required = NO;
     opt.font->description = _("Font name");
+    opt.font->guisection = _("Font settings");
+
+    opt.size = G_define_option();
+    opt.size->key = "size";
+    opt.size->type = TYPE_DOUBLE;
+    opt.size->required = NO;
+    opt.size->answer = "5";
+    opt.size->options = "0-100";
+    opt.size->description =
+    _("Height of letters in percentage of available frame height");
+    opt.size->guisection = _("Font settings");
 
     opt.path = G_define_standard_option(G_OPT_F_INPUT);
     opt.path->key = "path";
     opt.path->required = NO;
     opt.path->description = _("Path to font file");
     opt.path->gisprompt = "old,font,file";
+    opt.path->guisection = _("Font settings");
 
     opt.charset = G_define_option();
     opt.charset->key = "charset";
@@ -229,30 +245,32 @@ int main(int argc, char **argv)
     opt.charset->required = NO;
     opt.charset->description =
 	_("Text encoding (only applicable to TrueType fonts)");
-
-    opt.input = G_define_standard_option(G_OPT_F_INPUT);
-    opt.input->required = NO;
-    opt.input->description = _("Input file");
+    opt.charset->guisection = _("Font settings");
 
     flag.p = G_define_flag();
     flag.p->key = 'p';
     flag.p->description = _("Screen position in pixels ([0,0] is top left)");
+    flag.p->guisection = _("Position");
 
     flag.g = G_define_flag();
     flag.g->key = 'g';
     flag.g->description = _("Screen position in geographic coordinates");
+    flag.g->guisection = _("Position");
 
     flag.b = G_define_flag();
     flag.b->key = 'b';
     flag.b->description = _("Use bold text");
+    flag.b->guisection = _("Text");
 
     flag.r = G_define_flag();
     flag.r->key = 'r';
     flag.r->description = _("Use radians instead of degrees for rotation");
+    flag.r->guisection = _("Text");
 
     flag.s = G_define_flag();
     flag.s->key = 's';
     flag.s->description = _("Font size is height in pixels");
+    flag.s->guisection = _("Font settings");
 
 
     /* check command line */
diff --git a/display/d.vect.chart/bar.c b/display/d.vect.chart/bar.c
index 2c31853..468734e 100644
--- a/display/d.vect.chart/bar.c
+++ b/display/d.vect.chart/bar.c
@@ -7,11 +7,12 @@
 
 int
 bar(double cx, double cy, int size, double scale, double *val, int ncols,
-    COLOR * ocolor, COLOR * colors, int y_center, double *max_reference)
+    COLOR * ocolor, COLOR * colors, int y_center, double *max_reference,
+    int do3d)
 {
     int i;
     double max;
-    double x0, y0;
+    double x0, y0, x1, y1, dx, dy;
     double bw;			/* bar width */
     double pixel;		/* pixel size */
     struct line_pnts *Points, *max_Points;
@@ -44,6 +45,8 @@ bar(double cx, double cy, int size, double scale, double *val, int ncols,
     x0 = cx - size * pixel / 2;
 
     bw = size * pixel / ncols;
+    dx = bw / 5.0;
+    dy = dx * 1.5;
 
     if (max_reference) {
 	/* Draw polygon outlining max value in dataset with no fill color */
@@ -81,6 +84,46 @@ bar(double cx, double cy, int size, double scale, double *val, int ncols,
 
 	D_RGB_color(ocolor->r, ocolor->g, ocolor->b);
 	D_polyline_abs(Points->x, Points->y, Points->n_points);
+	
+	if (do3d) {
+	    /* up */
+	    Vect_reset_line(Points);
+	    y1 = y0 + scale * val[i] * pixel;
+	    Vect_append_point(Points, x0 + i * bw, y1, 0);
+	    Vect_append_point(Points, x0 + i * bw + dx, y1 + dy, 0);
+	    Vect_append_point(Points, x0 + (i + 1) * bw + dx, y1 + dy, 0);
+	    Vect_append_point(Points, x0 + (i + 1) * bw, y1, 0);
+	    Vect_append_point(Points, x0 + i * bw, y1, 0);
+
+	    if (!colors[i].none) {
+		D_RGB_color(colors[i].r, colors[i].g, colors[i].b);
+		D_polygon_abs(Points->x, Points->y, Points->n_points);
+	    }
+
+	    D_RGB_color(ocolor->r, ocolor->g, ocolor->b);
+	    /* do not draw the same line twice */
+	    Points->n_points = 4;
+	    D_polyline_abs(Points->x, Points->y, Points->n_points);
+
+	    /* right */
+	    Vect_reset_line(Points);
+	    x1 = x0 + (i + 1) * bw;
+	    Vect_append_point(Points, x1 + dx + 0.5 * pixel, y1 + dy, 0);
+	    Vect_append_point(Points, x1 + dx + 0.5 * pixel, y0 + dy, 0);
+	    Vect_append_point(Points, x1, y0, 0);
+	    Vect_append_point(Points, x1, y1, 0);
+	    Vect_append_point(Points, x1 + dx + 0.5 * pixel, y1 + dy, 0);
+
+	    if (!colors[i].none && val[i] > 0) {
+		D_RGB_color(colors[i].r, colors[i].g, colors[i].b);
+		D_polygon_abs(Points->x, Points->y, Points->n_points);
+	    }
+
+	    D_RGB_color(ocolor->r, ocolor->g, ocolor->b);
+	    /* do not draw the same line twice */
+	    Points->n_points = 3;
+	    D_polyline_abs(Points->x, Points->y, Points->n_points);
+	}
     }
 
     /* tidy up */
diff --git a/display/d.vect.chart/d.vect.chart.html b/display/d.vect.chart/d.vect.chart.html
index 8822f34..c84dec1 100644
--- a/display/d.vect.chart/d.vect.chart.html
+++ b/display/d.vect.chart/d.vect.chart.html
@@ -28,18 +28,33 @@ plot if <b>chart_type</b> is <em>bar</em> (See Example 2).
 
 <h3>Example 1</h3>
 
-Pie-chart of monthly winter precipitation (North Carolina sample dataset):
+Pie-charts of monthly winter precipitation (North Carolina sample dataset):
+
+<!-- might be good to add this to example:
+v.voronoi input=precip_30ynormals output=precip_stations_voronoi
+d.vect precip_stations_voronoi type=boundary
+-->
 
 <div class="code"><pre>
 g.region vector=nc_state -p
 d.vect nc_state
 d.vect.chart precip_30ynormals chart_type=pie columns=nov,dec,jan,feb -l
+
+# show pie chart as 3D
+d.erase
+d.vect nc_state
+d.vect.chart precip_30ynormals chart_type=pie columns=nov,dec,jan,feb -l -3
 </pre></div>
 
 <center>
 <img src="d_vect_chart_pie_2d.png" alt="d.vect.chart 2D pie chart"><br>
 2D pie-chart of monthly winter precipitation in North Carolina
 </center>
+<p>
+<center>
+<img src="d_vect_chart_pie_3d.png" alt="d.vect.chart 3D pie chart"><br>
+3D pie-chart of monthly winter precipitation in North Carolina
+</center>
 
 <h3>Example 2</h3>
 
@@ -83,4 +98,4 @@ Bar charts of an erodibiliy index (spatial subset)
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2015-03-15 21:22:17 +0100 (Sun, 15 Mar 2015) $</i>
+<p><i>Last changed: $Date: 2015-08-20 12:55:47 +0200 (Thu, 20 Aug 2015) $</i>
diff --git a/display/d.vect.chart/d_vect_chart_pie_3d.png b/display/d.vect.chart/d_vect_chart_pie_3d.png
new file mode 100644
index 0000000..3ee70b6
Binary files /dev/null and b/display/d.vect.chart/d_vect_chart_pie_3d.png differ
diff --git a/display/d.vect.chart/global.h b/display/d.vect.chart/global.h
index 139693c..8aa9862 100644
--- a/display/d.vect.chart/global.h
+++ b/display/d.vect.chart/global.h
@@ -10,8 +10,10 @@ typedef struct
 
 int plot(int ctype, struct Map_info *Map, int type, int field,
 	 char *columns, int ncols, char *sizecol, int size, double scale,
-	 COLOR * ocolor, COLOR * colors, int y_center, double *max_reference);
+	 COLOR * ocolor, COLOR * colors, int y_center,
+	 double *max_reference, int do3d);
 int pie(double cx, double cy, int size, double *val, int ncols,
-	COLOR * ocolor, COLOR * colors);
+	COLOR * ocolor, COLOR * colors, int do3d);
 int bar(double cx, double cy, int size, double scale, double *val, int ncols,
-	COLOR * ocolor, COLOR * colors, int y_center, double *max_reference);
+	COLOR * ocolor, COLOR * colors, int y_center, double *max_reference,
+	int do3d);
diff --git a/display/d.vect.chart/main.c b/display/d.vect.chart/main.c
index 59f886d..52d7782 100644
--- a/display/d.vect.chart/main.c
+++ b/display/d.vect.chart/main.c
@@ -43,7 +43,7 @@ int main(int argc, char **argv)
     struct Option *field_opt;
     struct Option *ocolor_opt, *colors_opt;
     struct Option *columns_opt, *sizecol_opt;
-    struct Flag *y_center_flag, *legend_flag;
+    struct Flag *y_center_flag, *legend_flag, *chart3d_flag;
 
     /*   struct Flag *horizontal_bar_flag; */
     struct Map_info Map;
@@ -141,6 +141,12 @@ int main(int argc, char **argv)
     legend_flag->description =
 	_("Create legend information and send to stdout");
 
+    chart3d_flag = G_define_flag();
+    chart3d_flag->key = '3';
+    chart3d_flag->description =
+	_("Create 3D charts");
+    chart3d_flag->guisection = _("Chart properties");
+
     /*
        horizontal_bar_flag = G_define_flag();
        horizontal_bar_flag->key = 'h';
@@ -264,7 +270,8 @@ int main(int argc, char **argv)
     ret = plot(ctype, &Map, type, field,
 	       columns_opt->answer, ncols,
 	       sizecol_opt->answer, size, scale,
-	       &ocolor, colors, y_center, max_reference);
+	       &ocolor, colors, y_center, max_reference,
+	       chart3d_flag->answer);
 
     D_save_command(G_recreate_command());
     D_close_driver();
diff --git a/display/d.vect.chart/pie.c b/display/d.vect.chart/pie.c
index 7c4408e..9ee4076 100644
--- a/display/d.vect.chart/pie.c
+++ b/display/d.vect.chart/pie.c
@@ -8,12 +8,41 @@
 
 #define PI  M_PI
 
+static int init = 0;
+static double sa = 0.0;
+static double ca = 1.0;
+
+
+/* rotates x and y about the origin (xo,yo) by angle radians */
+static void rotate(double *x, double *y, double xo, double yo, int do3d)
+{
+    double tmpx, tmpy;
+
+    if (!do3d)
+	return;
+
+    /* first translate */
+    tmpx = *x - xo;
+    tmpy = *y - yo;
+
+    /* now rotate */
+    *x = tmpx * ca - tmpy * sa;
+    *y = tmpx * sa + tmpy * ca;
+
+    /* now translate back */
+    *x += xo;
+    *y += yo;
+
+    return;
+}
+
+
 int
 pie(double cx, double cy, int size, double *val, int ncols, COLOR * ocolor,
-    COLOR * colors)
+    COLOR * colors, int do3d)
 {
     int i, j, n;
-    double a, end_ang, ang, tot_sum, sum, step, r;
+    double a, end_ang, ang, tot_sum, sum, step, r, rminor;
     double x, y;
     struct line_pnts *Points;
 
@@ -21,13 +50,118 @@ pie(double cx, double cy, int size, double *val, int ncols, COLOR * ocolor,
 
     Points = Vect_new_line_struct();
 
+    if (!init) {
+	sa = sin(-6 / 180.0 * PI);
+	ca = cos(-6 / 180.0 * PI);
+	init = 1;
+    }
+
     /* Calc sum */
     tot_sum = 0;
     for (i = 0; i < ncols; i++)
 	tot_sum += val[i];
+    
+    if (tot_sum == 0) {
+	Vect_destroy_line_struct(Points);
+	return 0;    /* nothing to draw */
+    }
 
     step = PI / 180;
     r = (D_d_to_u_col(2) - D_d_to_u_col(1)) * size / 2;	/* do it better */
+    rminor = r;
+
+    if (do3d) {
+	int first, np;
+
+	rminor = r * 2.0 / 3.0;
+
+	/* Draw lower polygon for each value */
+	sum = 0;
+	ang = 0;
+	for (i = 0; i < ncols; i++) {
+	    if (val[i] == 0)
+		continue;
+
+	    sum += val[i];
+
+	    end_ang = 2 * PI * sum / tot_sum;
+
+	    if (end_ang <= PI) {
+		ang = end_ang;
+		continue;
+	    }
+
+	    Vect_reset_line(Points);
+
+	    n = (int)ceil((end_ang - ang) / step);
+
+	    /* upper -> lower */
+	    a = ang;
+	    if (ang < PI)
+		a = PI;
+
+	    x = cx + r * cos(a);
+	    y = cy + rminor * sin(a);
+	    rotate(&x, &y, cx, cy, do3d);
+	    Vect_append_point(Points, x, y, 0);
+
+	    /* lower */
+	    first = ang < PI ? 1 : 0;
+	    for (j = 0, a = ang; j <= n; j++, a += step) {
+		if (j == n)
+		    a = end_ang;
+		if (a > PI) {
+		    if (first) {
+			x = cx + r * cos(PI);
+			y = cy + rminor * sin(PI) - r / 5;
+			rotate(&x, &y, cx, cy, do3d);
+			Vect_append_point(Points, x, y, 0);
+			first = 0;
+		    }
+		    x = cx + r * cos(a);
+		    y = cy + rminor * sin(a) - r / 5;
+		    rotate(&x, &y, cx, cy, do3d);
+		    Vect_append_point(Points, x, y, 0);
+		}
+	    }
+	    np = Points->n_points + 1;
+
+	    /* upper */
+	    first = end_ang > PI ? 1 : 0;
+	    for (j = 0, a = end_ang; j <= n; j++, a -= step) {
+		if (j == n)
+		    a = ang;
+		if (a > PI) {
+		    x = cx + r * cos(a);
+		    y = cy + rminor * sin(a);
+		    rotate(&x, &y, cx, cy, do3d);
+		    Vect_append_point(Points, x, y, 0);
+		}
+		else if (first) {
+		    x = cx + r * cos(PI);
+		    y = cy + rminor * sin(PI);
+		    rotate(&x, &y, cx, cy, do3d);
+		    Vect_append_point(Points, x, y, 0);
+		    first = 0;
+		}
+	    }
+
+	    ang = end_ang;
+	    
+	    if (Points->n_points == 0)
+		continue;
+
+	    if (!colors[i].none) {
+		D_RGB_color(colors[i].r, colors[i].g, colors[i].b);
+		D_polygon_abs(Points->x, Points->y, Points->n_points);
+	    }
+
+	    D_RGB_color(ocolor->r, ocolor->g, ocolor->b);
+	    Points->n_points = np;
+	    D_polyline_abs(Points->x, Points->y, Points->n_points);
+	}
+    }
+
     /* Draw polygon for each value */
     sum = 0;
     ang = 0;
@@ -41,21 +175,30 @@ pie(double cx, double cy, int size, double *val, int ncols, COLOR * ocolor,
 
 	Vect_reset_line(Points);
 
-	if (val[i] != tot_sum)    /* all in one slice, don't draw line to center */
-	    Vect_append_point(Points, cx, cy, 0);
+	if (val[i] != tot_sum) {    /* all in one slice, don't draw line to center */
+	    x = cx;
+	    y = cy;
+	    rotate(&x, &y, cx, cy, do3d);
+	    Vect_append_point(Points, x, y, 0);
+	}
 
 	n = (int)ceil((end_ang - ang) / step);
 	for (j = 0, a = ang; j <= n; j++, a += step) {
 	    if (a > end_ang)
 		a = end_ang;
 	    x = cx + r * cos(a);
-	    y = cy + r * sin(a);
+	    y = cy + rminor * sin(a);
+	    rotate(&x, &y, cx, cy, do3d);
 	    Vect_append_point(Points, x, y, 0);
 	}
 	ang = end_ang;
 
-	if (val[i] != tot_sum)    /* all in one slice, don't draw line to center */
-	    Vect_append_point(Points, cx, cy, 0);
+	if (val[i] != tot_sum) {    /* all in one slice, don't draw line to center */
+	    x = cx;
+	    y = cy;
+	    rotate(&x, &y, cx, cy, do3d);
+	    Vect_append_point(Points, x, y, 0);
+	}
 
 	if (!colors[i].none) {
 	    D_RGB_color(colors[i].r, colors[i].g, colors[i].b);
diff --git a/display/d.vect.chart/plot.c b/display/d.vect.chart/plot.c
index c33a9bc..f0b8e40 100644
--- a/display/d.vect.chart/plot.c
+++ b/display/d.vect.chart/plot.c
@@ -11,7 +11,8 @@
 int
 plot(int ctype, struct Map_info *Map, int type, int field,
      char *columns, int ncols, char *sizecol, int size, double scale,
-     COLOR * ocolor, COLOR * colors, int y_center, double *max_reference)
+     COLOR * ocolor, COLOR * colors, int y_center, double *max_reference,
+     int do3d)
 {
     int ltype, nlines, line, col, more, coltype, nselcols;
     double x, y, csize, len;
@@ -126,11 +127,11 @@ plot(int ctype, struct Map_info *Map, int type, int field,
 		csize = val[ncols];
 		size = scale * csize;
 	    }
-	    pie(x, y, size, val, ncols, ocolor, colors);
+	    pie(x, y, size, val, ncols, ocolor, colors, do3d);
 	}
 	else {
 	    bar(x, y, size, scale, val, ncols, ocolor, colors, y_center,
-		max_reference);
+		max_reference, do3d);
 	}
     }
 
diff --git a/display/d.vect.thematic/Makefile b/display/d.vect.thematic/Makefile
index 8c71d5d..7ebff2a 100644
--- a/display/d.vect.thematic/Makefile
+++ b/display/d.vect.thematic/Makefile
@@ -3,8 +3,8 @@ MODULE_TOPDIR = ../..
 
 PGM = d.vect.thematic
 
-LIBES = $(ARRAYSTATSLIB) $(DISPLAYLIB) $(VECTORLIB) $(DBMILIB) $(GISLIB)
-DEPENDENCIES = $(ARRAYSTATSDEP) $(DISPLAYDEP) $(VECTORDEP) $(DBMIDEP) $(GISDEP)
+LIBES = $(ARRAYSTATSLIB) $(DISPLAYLIB) $(VECTORLIB) $(DBMILIB) $(GISLIB) $(SYMBLIB)
+DEPENDENCIES = $(ARRAYSTATSDEP) $(DISPLAYDEP) $(VECTORDEP) $(DBMIDEP) $(GISDEP) $(SYMBDEP)
 EXTRA_INC = $(VECT_INC)
 EXTRA_CFLAGS = $(VECT_CFLAGS)
 
diff --git a/display/d.vect.thematic/d.vect.thematic.html b/display/d.vect.thematic/d.vect.thematic.html
index 9b0908e..225aac4 100644
--- a/display/d.vect.thematic/d.vect.thematic.html
+++ b/display/d.vect.thematic/d.vect.thematic.html
@@ -12,27 +12,22 @@ classification <b>algorithm</b> and a number of classes
 <em><a href="v.class.html">v.class</a></em> for more information on
 these different algorithms.
 
-<p>
-<b>Important note:</b> The module currently supports only <i>area</i>
-vector type. For displaying thematic choropleth vector maps of other
-types (points, lines) can be
-used <em><a href="http://grass.osgeo.org/grass70/manuals/addons/d.vect.thematic2.html">d.vect.thematic2</a></em>
-available in AddOns
-via <em><a href="g.extension.html">g.extension</a></em>.
 
 <h2>NOTES</h2>
 
 The <b>-l</b> flag instructs the module to print legend information
-(<i>class min | class max | number of observations in class |
-color</i>) to standard output for further use in graphical software.
-When combined with the <b>-e</b> flag, the legend information will
+in vector legend format as described in <em><a href="d.legend.vect.html">d.legend.vect</a></em>
+ to standard output for further use in graphical software.
+When combined with the verbose flag, the legend information will
 be extended with some additional statistical information. If the
 <b>-n</b> flag is set, the module will only print the legend 
-information without drawing the map. If the user gives a
-<b>legendfile</b>, the module will
-write <em><a href="d.graph.html">d.graph</a></em> instructions for
-painting a legend into that file.
+information without drawing the map.
 
+<p>Option <b>legendfile</b>, is deprecated, instead
+use the GRASS_LEGEND_FILE environmental variable
+(see <em><a href="d.legend.vect.html">d.legend.vect</a></em>)
+to save legend into a file.
+Flag <b>-e</b> is deprecated, instead use verbose flag.
 
 <h2>EXAMPLES</h2>
 
@@ -55,78 +50,51 @@ d.vect.thematic -l map=communes2 column=pop/area algorithm=std \
   nbclasses=5 colors="0:0:255,50:100:255,255:100:50,255:0:0,156:0:0"
 </pre></div>
 
-To actually draw the legend for the polygons in the graphical
-display, the procedure is:
-
-<div class="code"><pre>
-# first save legend instructions to a file	
-d.vect.thematic -n map=communes2 column=pop/area algorithm=std \
-  nbclasses=5 colors="0:0:255,50:100:255,255:100:50,255:0:0,156:0:0" \
-  legendfile=legend_pop_dens  
-
-# open a monitor
-d.mon wx0
-
-# draw the map
-d.vect.thematic map=communes2 column=pop/area algorithm=std \
-  nbclasses=5 colors="0:0:255,50:100:255,255:100:50,255:0:0,156:0:0"
-
-# draw the legend
-d.graph input=legend_pop_dens
-</pre></div>
-
-In order to further enhance this legend, edit the legend file accordingly
-and rerun the process.
-
-<h3>Thematic map with calculated class breaks</h3>
+<h3>Thematic map with legend</h3>
 
 Example for the North Carolina sample dataset, colorizing basin polygons by
-average elevation:
+average elevation and displaying school capacity:
 
 <div class="code"><pre>
 # create watersheds from elevation map
+g.region raster=elevation
 r.watershed elevation=elevation threshold=10000 basin=basins_10k
 
 # convert raster to vector
 r.to.vect input=basins_10k output=basins_10k type=area column=basin_num
 
 # upload raster statistics to each polygon in vector map
-v.rast.stats map=basins_10k raster=elevation column_prefix=elev_
-
-# save legend instructions to a file
-d.vect.thematic -n map=basins_10k column=elev_average algorithm=int \
-  nclasses=5 colors=228:26:28,55:126:184,77:175:74,152:78:163,255:127:0 \
-  legendfile=d_vect_thematic_leg.txt
+v.rast.stats map=basins_10k raster=elevation column_prefix=elev
 
 # open a graphical display
 d.mon wx0
 
-# draw outline of polygons
-d.vect map=basins_10k type=boundary
-
-# draw color fill
+# draw thematic polygons and specify legend title
 d.vect.thematic map=basins_10k column=elev_average algorithm=int \
-  nclasses=5 colors=228:26:28,55:126:184,77:175:74,152:78:163,255:127:0
+  nclasses=5 colors=0:195:176,39:255:0,251:253:0,242:127:11,193:126:60 \
+  legend_title="Average elevation (m)"
 
-# set a different font (list fonts with: d.font -l)
-export GRASS_FONT="sans"
+# draw thematic points and specify legend title
+d.vect.thematic map=schools_wake at PERMANENT column=CORECAPACI algorithm=std \
+  nclasses=3 colors=149:203:255,45:143:240,0:81:161 icon=basic/circle size=15 \
+  legend_title="School capacity"
 
-# and finally draw legend, but edit the legend file first (for example:
-# set size to 20, remove feature counts and most decimal digits)
-d.graph input=d_vect_thematic_leg.txt
+# and finally draw legend
+d.legend.vect -b at=2,80 font=Sans symbol_size=25
 </pre></div>
 
 <center>
 <a href="d_vect_thematic.png">
-<img src="d_vect_thematic.png" alt="d_vect_thematic example" border=1 width="600"></a>
+<img src="d_vect_thematic.png" alt="d_vect_thematic example" width="600"></a>
 <br>
-<i>Thematic map of area sizes</i>
+<i>Thematic map of average elevation and school capacity</i>
 </center>
 
 <h2>SEE ALSO</h2>
 
 <em>
 <a href="v.class.html">v.class</a>,
+<a href="d.legend.vect.html">d.legend.vect</a>,
 <a href="d.vect.html">d.vect</a>,
 <a href="d.graph.html">d.graph</a>,
 <a href="v.univar.html">v.univar</a>
@@ -141,4 +109,4 @@ AddOns: <em><a href="http://grass.osgeo.org/grass70/manuals/addons/d.vect.themat
 Moritz Lennert
 
 <p>
-<i>Last changed: $Date: 2016-07-06 22:51:29 +0200 (Wed, 06 Jul 2016) $</i>
+<i>Last changed: $Date: 2016-08-31 16:10:35 +0200 (Wed, 31 Aug 2016) $</i>
diff --git a/display/d.vect.thematic/d_vect_thematic.png b/display/d.vect.thematic/d_vect_thematic.png
index 78050fc..0df3a21 100644
Binary files a/display/d.vect.thematic/d_vect_thematic.png and b/display/d.vect.thematic/d_vect_thematic.png differ
diff --git a/display/d.vect.thematic/display.c b/display/d.vect.thematic/display.c
new file mode 100644
index 0000000..0151ee4
--- /dev/null
+++ b/display/d.vect.thematic/display.c
@@ -0,0 +1,241 @@
+/* Author: Adam Laza, GSoC 2016
+ * based on d.vect.thematic/area.c
+ *
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <grass/gis.h>
+#include <grass/symbol.h>
+#include <grass/vector.h>
+#include <grass/display.h>
+#include <grass/colors.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+#include "plot.h"
+#include "local_proto.h"
+
+int display_lines(struct Map_info *Map, struct cat_list *Clist,
+                  int chcat, const char *symbol_name, double size,
+                  int default_width, dbCatValArray * cvarr, double *breaks,
+                  int nbreaks, const struct color_rgb *colors, const struct
+                  color_rgb *bcolor)
+{
+    int ltype, line, nlines;
+    struct line_pnts *Points;
+    struct line_cats *Cats;
+
+    int n_points, n_lines, n_centroids, n_boundaries, n_faces;
+    RGBA_Color *primary_color, *secondary_color;
+    SYMBOL *Symb;
+
+    Symb = NULL;
+
+    double breakval = 0.0;
+    int cat;
+    dbCatVal *cv = NULL;
+    int i;
+
+    primary_color = G_malloc(sizeof(RGBA_Color));
+    primary_color->a = RGBA_COLOR_OPAQUE;
+    secondary_color = G_malloc(sizeof(RGBA_Color));
+    secondary_color->a = RGBA_COLOR_OPAQUE;
+
+    Points = Vect_new_line_struct();
+    Cats = Vect_new_cats_struct();
+
+    /* dynamic symbols for points */
+    Symb = S_read(symbol_name);
+    if (!Symb)
+        G_warning(_("Unable to read symbol <%s>, unable to display points"),
+                  symbol_name);
+    else
+        S_stroke(Symb, size, 0.0, 0);
+
+    Vect_rewind(Map);
+
+    nlines = -1;
+    line = 0;
+    n_points = n_lines = 0;
+    n_centroids = n_boundaries = 0;
+    n_faces = 0;
+    while (TRUE) {
+        line++;
+
+        if (nlines > -1) {
+            if (line > nlines)
+                break;
+            ltype = Vect_read_line(Map, Points, Cats, line);
+        }
+        else {
+            ltype = Vect_read_next_line(Map, Points, Cats);
+
+            if (ltype == -1) {
+                G_fatal_error(_("Unable to read vector map"));
+            }
+            else if ((ltype == -2)) {   /* EOF */
+                break;
+            }
+        }
+
+        cat = *Cats->cat;
+        if (cat >= 0) {
+            G_debug(3, "display line %d, cat %d", line, cat);
+            /* Get value of data for this area */
+            if (db_CatValArray_get_value(cvarr, cat, &cv) != DB_OK) {
+                G_debug(3, "No value found for cat %i", cat);
+            }
+            else {
+                db_CatValArray_get_value(cvarr, cat, &cv);
+                breakval = (cvarr->ctype == 2 ? cv->val.i : cv->val.d);
+            }
+        }
+
+        /* find out into which class breakval falls */
+        i = 0;
+        while (breakval > breaks[i] && i < nbreaks)
+            i++;
+        primary_color->r = colors[i].r;
+        primary_color->g = colors[i].g;
+        primary_color->b = colors[i].b;
+
+        if (bcolor !=NULL) {
+            secondary_color->r = bcolor->r;
+            secondary_color->g = bcolor->g;
+            secondary_color->b = bcolor->b;
+        }
+        else
+            secondary_color->a = 0;
+
+        draw_line(ltype, line, Points, Cats, chcat, size, default_width,
+                  Clist, Symb, primary_color, &n_points, &n_lines,
+                  &n_centroids, &n_boundaries, &n_faces, secondary_color);
+    }
+
+    if (n_points > 0)
+        G_verbose_message(n_
+                          ("%d point plotted", "%d points plotted", n_points),
+                          n_points);
+    if (n_lines > 0)
+        G_verbose_message(n_("%d line plotted", "%d lines plotted", n_lines),
+                          n_lines);
+    if (n_centroids > 0)
+        G_verbose_message(n_
+                          ("%d centroid plotted", "%d centroids plotted",
+                           n_centroids), n_centroids);
+    if (n_boundaries > 0)
+        G_verbose_message(n_
+                          ("%d boundary plotted", "%d boundaries plotted",
+                           n_boundaries), n_boundaries);
+    if (n_faces > 0)
+        G_verbose_message(n_("%d face plotted", "%d faces plotted", n_faces),
+                          n_faces);
+
+    Vect_destroy_line_struct(Points);
+    Vect_destroy_cats_struct(Cats);
+    G_free(primary_color);
+
+    return 0;
+}
+
+int draw_line(int ltype, int line,
+              const struct line_pnts *Points, const struct line_cats *Cats,
+              int chcat, double size, int default_width,
+              const struct cat_list *Clist, SYMBOL * Symb,
+              RGBA_Color * primary_color,
+              int *n_points, int *n_lines, int *n_centroids,
+              int *n_boundaries, int *n_faces, RGBA_Color *secondary_color)
+{
+    double var_size, rotation;
+    int i;
+    double x0, y0;
+    double *x, *y;
+    int found, cat;
+
+    rotation = 0.0;
+    var_size = size;
+    cat = -1;
+
+    if (!ltype)
+        return 0;
+
+    if (Points->n_points == 0)
+        return 0;
+
+    found = FALSE;
+    if (chcat) {
+        for (i = 0; i < Cats->n_cats; i++) {
+            if (Cats->field[i] == Clist->field &&
+                Vect_cat_in_cat_list(Cats->cat[i], Clist)) {
+                found = TRUE;
+                break;
+            }
+        }
+        if (!found)
+            return 0;
+    }
+    else if (Clist->field > 0) {
+        for (i = 0; i < Cats->n_cats; i++) {
+            if (Cats->field[i] == Clist->field) {
+                found = TRUE;
+                break;
+            }
+        }
+        /* lines with no category will be displayed */
+        if (Cats->n_cats > 0 && !found)
+            return 0;
+    }
+
+    G_debug(3, "\tdisplay feature %d, cat %d", line, cat);
+
+
+    /* enough of the prep work, lets start plotting stuff */
+    x = Points->x;
+    y = Points->y;
+
+    if ((ltype & GV_POINTS)) {
+        x0 = x[0];
+        y0 = y[0];
+
+        /* skip if the point is outside of the display window */
+        /* xy < 0 tests make it go ever-so-slightly faster */
+        if (x0 > D_get_u_east() || x0 < D_get_u_west() ||
+            y0 < D_get_u_south() || y0 > D_get_u_north())
+            return 0;
+
+        D_line_width(default_width);
+        D_symbol2(Symb, x0, y0, primary_color, secondary_color);
+    }
+    else {
+        /* Plot the lines */
+        D_line_width(default_width);
+        D_RGB_color(primary_color->r, primary_color->g, primary_color->b);
+        if (Points->n_points == 1)      /* line with one coor */
+            D_polydots_abs(x, y, Points->n_points);
+        else                    /* use different user defined render methods */
+            D_polyline_abs(x, y, Points->n_points);
+    }
+
+    switch (ltype) {
+    case GV_POINT:
+        (*n_points)++;
+        break;
+    case GV_LINE:
+        (*n_lines)++;
+        break;
+    case GV_CENTROID:
+        (*n_centroids)++;
+        break;
+    case GV_BOUNDARY:
+        (*n_boundaries)++;
+        break;
+    case GV_FACE:
+        (*n_faces)++;
+        break;
+    default:
+        break;
+    }
+
+    return 1;
+}
diff --git a/display/d.vect.thematic/legend.c b/display/d.vect.thematic/legend.c
new file mode 100644
index 0000000..fdbbca0
--- /dev/null
+++ b/display/d.vect.thematic/legend.c
@@ -0,0 +1,65 @@
+/* Author: Adam Laza, GSoC 2016
+ *
+ */
+
+#include <string.h>
+#include <stdlib.h>
+#include <math.h>
+#include <grass/gis.h>
+#include <grass/symbol.h>
+#include <grass/vector.h>
+#include <grass/display.h>
+#include <grass/colors.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+#include "plot.h"
+#include "local_proto.h"
+
+void write_into_legend_file(const char *legfile, const char *icon, const char *title, double stats_min, double stats_max,
+                            double *breakpoints, int nbreaks, int size, struct color_rgb bcolor,
+                            struct color_rgb *colors, int default_width, int* frequencies, const char *topo)
+{
+    FILE *fd;
+    int i;
+
+    if (strcmp(legfile,"stdout") == 0)
+        fd = stdout;
+    else
+        fd = fopen(legfile, "a");
+
+    /* Title */
+    fprintf(fd, "||||||%s\n", title);
+
+    /* First line */
+    if (stats_min > breakpoints[0]){
+        fprintf(fd, "< %.2f|", breakpoints[0]);
+    }
+    else{
+        fprintf(fd, "%.2f - %.2f|",stats_min, breakpoints[0]);
+    }
+    fprintf(fd, "%s|%d|ps|%d:%d:%d|%d:%d:%d|%d|%s|%d\n",
+            icon, size, colors[0].r, colors[0].g, colors[0].b,
+            bcolor.r, bcolor.g, bcolor.b, default_width,
+            topo, frequencies[0]);
+    /* Middle lines */
+    for (i = 1; i < nbreaks; i++){
+        fprintf(fd, "%.2f - %.2f|%s|%d|ps|%d:%d:%d|%d:%d:%d|%d|%s|%d\n",
+                breakpoints[i-1],breakpoints[i],
+                icon, size, colors[i].r, colors[i].g, colors[i].b,
+                bcolor.r, bcolor.g, bcolor.b, default_width,
+                topo, frequencies[i]);
+    }
+    /* Last one */
+    if(stats_max < breakpoints[nbreaks-1]){
+        fprintf(fd, ">%.2f|", breakpoints[nbreaks - 1]);
+    }
+    else {
+        fprintf(fd, "%.2f - %.2f|", breakpoints[nbreaks - 1], stats_max);
+    }
+    fprintf(fd, "%s|%d|ps|%d:%d:%d|%d:%d:%d|%d|%s|%d\n",
+            icon, size, colors[nbreaks].r, colors[nbreaks].g, colors[nbreaks].b,
+            bcolor.r, bcolor.g, bcolor.b, default_width,
+            topo, frequencies[nbreaks]);
+
+    fclose(fd);
+}
diff --git a/display/d.vect.thematic/local_proto.h b/display/d.vect.thematic/local_proto.h
index 7bddad3..ab2347d 100644
--- a/display/d.vect.thematic/local_proto.h
+++ b/display/d.vect.thematic/local_proto.h
@@ -12,3 +12,23 @@ int dareatheme(struct Map_info *, struct cat_list *, dbCatValArray *,
 	       const struct color_rgb *, int, struct Cell_head *, int);
 
 int dcmp(const void *, const void *);
+static int cmp(const void *, const void *);
+static char *icon_files(void);
+
+/* display.c */
+int draw_line(int ltype, int line,
+           const struct line_pnts *Points, const struct line_cats *Cats,
+           int chcat, double size, int default_width,
+              const struct cat_list *Clist, SYMBOL *Symb,
+              RGBA_Color *primary_color, int *n_points, int *n_lines,
+              int *n_centroids, int *n_boundaries, int *n_faces,
+              RGBA_Color *secondary_color);
+
+int display_lines(struct Map_info *, struct cat_list *, int,
+          const char *, double, int, dbCatValArray *, double *, int,
+          const struct color_rgb *, const struct color_rgb *);
+
+/* legend.c */
+void write_into_legend_file(const char *, const char *, const char *, double, double,
+                            double *, int, int, struct color_rgb,
+                            struct color_rgb *, int, int*, const char *);
diff --git a/display/d.vect.thematic/main.c b/display/d.vect.thematic/main.c
index baa047a..5aabdd5 100644
--- a/display/d.vect.thematic/main.c
+++ b/display/d.vect.thematic/main.c
@@ -30,12 +30,11 @@
 #include "plot.h"
 #include "local_proto.h"
 
-
 int main(int argc, char **argv)
 {
     int ret, level;
     int i, stat = 0;
-    int nclass = 0, nbreaks, *frequencies, boxsize, textsize, ypos;
+    int nclass = 0, nbreaks, *frequencies;
     int chcat = 0;
     int r, g, b;
     int has_color = 0;
@@ -55,8 +54,13 @@ int main(int argc, char **argv)
     struct Option *where_opt;
     struct Option *field_opt;
     struct Option *legend_file_opt;
-    struct Flag *legend_flag, *algoinfo_flag, *nodraw_flag;
-    char *desc;
+    struct Option *icon_opt;
+    struct Option *icon_line_opt;
+    struct Option *icon_area_opt;
+    struct Option *size_opt;
+    struct Option *title_opt;
+    struct Flag *legend_flag, *algoinfo_flag, *nodraw_flag, *vlegend_flag;
+    char *desc, *deprecated;
 
     struct cat_list *Clist;
     int *cats, ncat, nrec, ctype;
@@ -69,7 +73,10 @@ int main(int argc, char **argv)
     struct bound_box box;
     double overlap, *breakpoints, *data = NULL, class_info = 0.0;
     struct GASTATS stats;
-    FILE *fd;
+    int size;
+    int nfeatures;
+    char title[128];
+    char *leg_file;
 
     /* Initialize the GIS calls */
     G_gisinit(argv[0]);
@@ -143,19 +150,70 @@ int main(int argc, char **argv)
     bwidth_opt = G_define_option();
     bwidth_opt->key = "boundary_width";
     bwidth_opt->type = TYPE_INTEGER;
-    bwidth_opt->answer = "0";
+    bwidth_opt->answer = "1";
     bwidth_opt->guisection = _("Boundaries");
     bwidth_opt->description = _("Boundary width");
 
-    bcolor_opt = G_define_standard_option(G_OPT_C);
+    bcolor_opt = G_define_standard_option(G_OPT_CN);
     bcolor_opt->key = "boundary_color";
     bcolor_opt->label = _("Boundary color");
     bcolor_opt->guisection = _("Boundaries");
 
+    /* Symbols */
+    icon_opt = G_define_option();
+    icon_opt->key = "icon";
+    icon_opt->type = TYPE_STRING;
+    icon_opt->required = NO;
+    icon_opt->multiple = NO;
+    icon_opt->guisection = _("Symbols");
+    icon_opt->answer = "basic/x";
+    /* This could also use ->gisprompt = "old,symbol,symbol" instead of ->options */
+    icon_opt->options = icon_files();
+    icon_opt->description = _("Point and centroid symbol");
+
+    size_opt = G_define_option();
+    size_opt->key = "size";
+    size_opt->type = TYPE_DOUBLE;
+    size_opt->answer = "5";
+    size_opt->guisection = _("Symbols");
+    size_opt->label = _("Symbol size");
+
+    icon_line_opt = G_define_option();
+    icon_line_opt->key = "icon_line";
+    icon_line_opt->type = TYPE_STRING;
+    icon_line_opt->required = NO;
+    icon_line_opt->multiple = NO;
+    icon_line_opt->guisection = _("Legend");
+    icon_line_opt->answer = "legend/line";
+    /* This could also use ->gisprompt = "old,symbol,symbol" instead of ->options */
+    icon_line_opt->options = icon_files();
+    icon_line_opt->description = _("Legend symbol for lines");
+
+    icon_area_opt = G_define_option();
+    icon_area_opt->key = "icon_area";
+    icon_area_opt->type = TYPE_STRING;
+    icon_area_opt->required = NO;
+    icon_area_opt->multiple = NO;
+    icon_area_opt->guisection = _("Legend");
+    icon_area_opt->answer = "legend/area";
+    /* This could also use ->gisprompt = "old,symbol,symbol" instead of ->options */
+    icon_area_opt->options = icon_files();
+    icon_area_opt->description = _("Legend symbol for areas");
+
+    title_opt = G_define_option();
+    title_opt->key = "legend_title";
+    title_opt->type = TYPE_STRING;
+    title_opt->guisection = _("Legend");
+    title_opt->description = _("Thematic map title");
+
     legend_file_opt = G_define_standard_option(G_OPT_F_OUTPUT);
     legend_file_opt->key = "legendfile";
-    legend_file_opt->description =
-	_("File in which to save d.graph instructions for legend display");
+    deprecated = NULL;
+    G_asprintf(&deprecated,
+	        "[%s] %s",
+	        _("DEPRECATED"),
+	        _("Output legend file"));
+    legend_file_opt->description = deprecated;
     legend_file_opt->required = NO;
     legend_file_opt->guisection = _("Legend");
 
@@ -165,36 +223,63 @@ int main(int argc, char **argv)
 	_("Create legend information and send to stdout");
     legend_flag->guisection = _("Legend");
 
-    algoinfo_flag = G_define_flag();
-    algoinfo_flag->key = 'e';
-    algoinfo_flag->description =
-	_("When printing legend info, include extended statistical info from classification algorithm");
-    algoinfo_flag->guisection = _("Legend");
-
     nodraw_flag = G_define_flag();
     nodraw_flag->key = 'n';
-    nodraw_flag->description = _("Do not draw map, only output the legend");
+    nodraw_flag->description = _("Do not draw map, only output the legend information");
     nodraw_flag->guisection = _("Legend");
+
+    algoinfo_flag = G_define_flag();
+    algoinfo_flag->key = 'e';
+    deprecated = NULL;
+    G_asprintf(&deprecated,
+	        "[%s] %s",
+	        _("DEPRECATED"),
+	        _("When printing legend info, include extended statistical info from classification algorithm"));
+    algoinfo_flag->description = deprecated;
+    algoinfo_flag->guisection = _("Legend");
+    
+    vlegend_flag = G_define_flag();
+    vlegend_flag->key = 's';
+    vlegend_flag->label = _("Do not show this layer in vector legend");
+    vlegend_flag->guisection = _("Legend");
     
+    G_option_required(algo_opt, breaks_opt, NULL);
+    G_option_exclusive(algo_opt, breaks_opt, NULL);
+    G_option_requires(algo_opt, nbclass_opt, NULL);
+
     /* Check command line */
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
+    if (algoinfo_flag->answer)
+        G_warning(_("Flag -e is deprecated, set verbose mode with --v to get the extended statistical info."));
+
+    if (legend_file_opt->answer)
+        G_warning(_("Option legendfile is deprecated, either use flag -l "
+                    "to print legend to standard output, "
+                    "or set GRASS_LEGEND_FILE environment variable "
+                    "(see d.legend.vect for details)."));
+
     if (G_verbose() > G_verbose_std())
 	verbose = TRUE;
 
     G_get_set_window(&window);
 
-    /* Read map options */
+    size = atof(size_opt->answer);
 
+    /* Read map options */
     strcpy(map_name, map_opt->answer);
 
     /* open vector */
     level = Vect_open_old(&Map, map_name, "");
-
+    
     if (level < 2)
 	G_fatal_error(_("%s: You must build topology on vector map. Run v.build."),
 		      map_name);
+    if (title_opt->answer)
+        strcpy(title, title_opt->answer);
+    else
+        strcpy(title, Map.name);
 
     /* Check database connection and open it */
     Clist = Vect_new_cat_list();
@@ -214,8 +299,6 @@ int main(int argc, char **argv)
 	    G_fatal_error(_("Unable to open database <%s>"), fi->database);
     }
 
-
-
     /*Get CatValArray needed for plotting and for legend calculations */
     db_CatValArray_init(&cvarr);
     nrec = db_select_CatValArray(driver, fi->table, fi->key,
@@ -400,12 +483,19 @@ int main(int argc, char **argv)
 	    /* default line width */
 	    D_line_width(default_width);
 
-
+        if (Vect_get_num_primitives(&Map, GV_BOUNDARY) > 0)
 	    stat =
 		dareatheme(&Map, Clist, &cvarr, breakpoints, nbreaks, colors,
 			   has_color ? &bcolor : NULL, chcat, &window,
 			   default_width);
 
+        else if ((Vect_get_num_primitives(&Map, GV_POINT) > 0) ||
+                 (Vect_get_num_primitives(&Map, GV_LINE) > 0)){
+            stat = display_lines(&Map, Clist, chcat, icon_opt->answer, size,
+                   default_width, &cvarr, breakpoints, nbreaks, colors,
+                   has_color ? &bcolor : NULL);
+        }
+
 
 	    /* reset line width: Do we need to get line width from display
 	     * driver (not implemented)?  It will help restore previous line
@@ -428,95 +518,114 @@ int main(int argc, char **argv)
     /*Get basic statistics about the data */
     AS_basic_stats(data, nrec, &stats);
 
-    if (legend_flag->answer) {
-
-	if (algoinfo_flag->answer) {
-
-
-	    fprintf(stdout, _("\nTotal number of records: %.0f\n"),
-		    stats.count);
-	    fprintf(stdout, _("Classification of %s into %i classes\n"),
-		    column_opt->answer, nbreaks + 1);
-	    fprintf(stdout, _("Using algorithm: *** %s ***\n"),
-		    algo_opt->answer);
-	    fprintf(stdout, _("Mean: %f\tStandard deviation = %f\n"),
-		    stats.mean, stats.stdev);
-
-	    if (G_strcasecmp(algo_opt->answer, "dis") == 0)
-		fprintf(stdout, _("Last chi2 = %f\n"), class_info);
-	    if (G_strcasecmp(algo_opt->answer, "std") == 0)
-		fprintf(stdout,
-			_("Stdev multiplied by %.4f to define step\n"),
-			class_info);
-	    fprintf(stdout, "\n");
-
-	}
-
-        if(stats.min > breakpoints[0]){
-	fprintf(stdout, "<%f|%i|%d:%d:%d\n",
-		breakpoints[0], frequencies[0], colors[0].r,
-		colors[0].g, colors[0].b);
-
-        } else {
-	fprintf(stdout, "%f|%f|%i|%d:%d:%d\n",
-		stats.min, breakpoints[0], frequencies[0], colors[0].r,
-		colors[0].g, colors[0].b);
+    /* Print statistics */
+    G_verbose_message(_("\nTotal number of records: %.0f\n"),
+                      stats.count);
+    G_verbose_message(_("Classification of %s into %i classes\n"),
+                      column_opt->answer, nbreaks + 1);
+    G_verbose_message(_("Using algorithm: *** %s ***\n"),
+                      algo_opt->answer);
+    G_verbose_message(_("Mean: %f\tStandard deviation = %f\n"),
+                      stats.mean, stats.stdev);
+    
+    if (G_strcasecmp(algo_opt->answer, "dis") == 0)
+        G_verbose_message(_("Last chi2 = %f\n"), class_info);
+    if (G_strcasecmp(algo_opt->answer, "std") == 0)
+        G_verbose_message(_("Stdev multiplied by %.4f to define step\n"),
+                          class_info);
+    G_verbose_message("\n");
+
+	/* Print legfile to stdout */
+    if ((legend_flag->answer) ||
+            ((legend_file_opt->answer) && (strcmp(legend_file_opt->answer,"-") == 0))) {
+    while (TRUE) {
+    nfeatures = Vect_get_num_primitives(&Map, GV_POINT);
+        if (nfeatures > 0) {
+            write_into_legend_file("stdout", icon_opt->answer,
+                                   title, stats.min, stats.max, breakpoints,
+                                   nbreaks, size, bcolor, colors, default_width,
+                                   frequencies, "point");
+            break;
         }
-
-	for (i = 1; i < nbreaks; i++) {
-	    fprintf(stdout, "%f|%f|%i|%d:%d:%d\n",
-		    breakpoints[i - 1], breakpoints[i], frequencies[i],
-		    colors[i].r, colors[i].g, colors[i].b);
+        nfeatures = Vect_get_num_primitives(&Map, GV_LINE);
+        if (nfeatures > 0) {
+            write_into_legend_file("stdout", icon_line_opt->answer,
+                                   title, stats.min, stats.max, breakpoints,
+                                   nbreaks, size, bcolor, colors, default_width,
+                                   frequencies, "line");
+            break;
 	}
+        nfeatures = Vect_get_num_primitives(&Map, GV_BOUNDARY);
+        if (nfeatures > 0) {
+            write_into_legend_file("stdout", icon_area_opt->answer,
+                                   title, stats.min, stats.max, breakpoints,
+                                   nbreaks, size, bcolor, colors, default_width,
+                                   frequencies, "area");
+            break;
+        }
+    }
+    }
 
-        if(stats.max < breakpoints[nbreaks-1]){
-	fprintf(stdout, ">%f|%i|%d:%d:%d\n",
-		breakpoints[nbreaks - 1], frequencies[nbreaks],
-		colors[nbreaks].r, colors[nbreaks].g, colors[nbreaks].b);
-        } else {
-	fprintf(stdout, "%f|%f|%i|%d:%d:%d\n",
-		breakpoints[nbreaks - 1], stats.max, frequencies[nbreaks],
-		colors[nbreaks].r, colors[nbreaks].g, colors[nbreaks].b);
+    /* Write into default legfile */
+    leg_file = getenv("GRASS_LEGEND_FILE");
+    if (leg_file && !vlegend_flag->answer) {
+        while (TRUE) {
+        nfeatures = Vect_get_num_primitives(&Map, GV_POINT);
+            if (nfeatures > 0) {
+                write_into_legend_file(leg_file, icon_opt->answer,
+                                       title, stats.min, stats.max, breakpoints,
+                                       nbreaks, size, bcolor, colors, default_width,
+                                       frequencies, "point");
+                break;
         }
+            nfeatures = Vect_get_num_primitives(&Map, GV_LINE);
+            if (nfeatures > 0) {
+                write_into_legend_file(leg_file, icon_line_opt->answer,
+                                       title, stats.min, stats.max, breakpoints,
+                                       nbreaks, size, bcolor, colors, default_width,
+                                       frequencies, "line");
+                break;
     }
+            nfeatures = Vect_get_num_primitives(&Map, GV_BOUNDARY);
+            if (nfeatures > 0) {
+                write_into_legend_file(leg_file, icon_area_opt->answer,
+                                       title, stats.min, stats.max, breakpoints,
+                                       nbreaks, size, bcolor, colors, default_width,
+                                       frequencies, "area");
+                break;
+            }
+        }
+    }
+
+    /* Write into user-specified output file */
 
     if (legend_file_opt->answer) {
-	fd = fopen(legend_file_opt->answer, "w");
-	boxsize = 25;
-	textsize = 8;
-	fprintf(fd, "size %i %i\n", textsize, textsize);
-	ypos = 10;
-	fprintf(fd, "symbol basic/box %i 5 %i black %d:%d:%d\n", boxsize,
-		ypos, colors[0].r, colors[0].g, colors[0].b);
-	fprintf(fd, "move 8 %i \n", ypos-1);
-        if(stats.min > breakpoints[0]){
-	fprintf(fd, "text <%f | %i\n", breakpoints[0],
-		frequencies[0]);
-        } else {
-	fprintf(fd, "text %f - %f | %i\n", stats.min, breakpoints[0],
-		frequencies[0]);
+        while (TRUE) {
+        nfeatures = Vect_get_num_primitives(&Map, GV_POINT);
+            if (nfeatures > 0) {
+                write_into_legend_file(legend_file_opt->answer, icon_opt->answer,
+                                       title, stats.min, stats.max, breakpoints,
+                                       nbreaks, size, bcolor, colors, default_width,
+                                       frequencies, "point");
+                break;
         }
-	for (i = 1; i < nbreaks; i++) {
-	    ypos = 10 + i * 6;
-	    fprintf(fd, "symbol basic/box %i 5 %i black %d:%d:%d\n", boxsize,
-		    ypos, colors[i].r, colors[i].g, colors[i].b);
-	    fprintf(fd, "move 8 %i\n", ypos-1);
-	    fprintf(fd, "text %f - %f | %i\n", breakpoints[i - 1],
-		    breakpoints[i], frequencies[i]);
+            nfeatures = Vect_get_num_primitives(&Map, GV_LINE);
+            if (nfeatures > 0) {
+                write_into_legend_file(legend_file_opt->answer, icon_line_opt->answer,
+                                       title, stats.min, stats.max, breakpoints,
+                                       nbreaks, size, bcolor, colors, default_width,
+                                       frequencies, "line");
+                break;
 	}
-	ypos = 10 + i * 6;
-	fprintf(fd, "symbol basic/box %i 5 %i black %d:%d:%d\n", boxsize,
-		ypos, colors[nbreaks].r, colors[nbreaks].g,
-		colors[nbreaks].b);
-	fprintf(fd, "move 8 %i\n", ypos -1);
-        if(stats.max < breakpoints[nbreaks-1]){
-	fprintf(fd, "text >%f | %i\n", breakpoints[nbreaks - 1],
-		frequencies[nbreaks]);
-        } else {
-	fprintf(fd, "text %f - %f | %i\n", breakpoints[nbreaks - 1],
-		stats.max, frequencies[nbreaks]);
+            nfeatures = Vect_get_num_primitives(&Map, GV_BOUNDARY);
+            if (nfeatures > 0) {
+                write_into_legend_file(legend_file_opt->answer, icon_area_opt->answer,
+                                       title, stats.min, stats.max, breakpoints,
+                                       nbreaks, size, bcolor, colors, default_width,
+                                       frequencies, "area");
+                break;
         }
-	fclose(fd);
+    }
     }
 
     if (verbose)
@@ -527,3 +636,77 @@ int main(int argc, char **argv)
 
     exit(stat);
 }
+
+int cmp(const void *a, const void *b)
+{
+    return (strcmp(*(char **)a, *(char **)b));
+}
+
+/* adopted from r.colors */
+char *icon_files(void)
+{
+    char **list, *ret;
+    char buf[GNAME_MAX], path[GPATH_MAX], path_i[GPATH_MAX];
+    int i, count;
+    size_t len;
+    DIR *dir, *dir_i;
+    struct dirent *d, *d_i;
+
+    list = NULL;
+    len = 0;
+    sprintf(path, "%s/etc/symbol", G_gisbase());
+
+    dir = opendir(path);
+    if (!dir)
+    return NULL;
+
+    count = 0;
+
+    /* loop over etc/symbol */
+    while ((d = readdir(dir))) {
+    if (d->d_name[0] == '.')
+        continue;
+
+    sprintf(path_i, "%s/etc/symbol/%s", G_gisbase(), d->d_name);
+    dir_i = opendir(path_i);
+
+    if (!dir_i)
+        continue;
+
+    /* loop over each directory in etc/symbols */
+    while ((d_i = readdir(dir_i))) {
+        if (d_i->d_name[0] == '.')
+        continue;
+
+        list = G_realloc(list, (count + 1) * sizeof(char *));
+
+        sprintf(buf, "%s/%s", d->d_name, d_i->d_name);
+        list[count++] = G_store(buf);
+
+        len += strlen(d->d_name) + strlen(d_i->d_name) + 2; /* '/' + ',' */
+    }
+
+    closedir(dir_i);
+    }
+
+    closedir(dir);
+
+    qsort(list, count, sizeof(char *), cmp);
+
+    if (len > 0) {
+    ret = G_malloc((len + 1) * sizeof(char)); /* \0 */
+    *ret = '\0';
+    for (i = 0; i < count; i++) {
+        if (i > 0)
+        strcat(ret, ",");
+        strcat(ret, list[i]);
+        G_free(list[i]);
+    }
+    G_free(list);
+    }
+    else {
+    ret = G_store("");
+    }
+
+    return ret;
+}
diff --git a/display/d.vect/d.vect.html b/display/d.vect/d.vect.html
index 12e1934..e1582f0 100644
--- a/display/d.vect/d.vect.html
+++ b/display/d.vect/d.vect.html
@@ -123,4 +123,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 Support for color tables by Martin Landa, Czech Technical University in Prague (8/2011)<br>
 and many other GRASS developers
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/display/d.vect/legend.c b/display/d.vect/legend.c
new file mode 100644
index 0000000..1b5f118
--- /dev/null
+++ b/display/d.vect/legend.c
@@ -0,0 +1,78 @@
+#include <grass/gis.h>
+#include <grass/vector.h>
+#include "local_proto.h"
+
+void write_into_legfile(struct Map_info *Map, int type, const char *leglab, const char *name_map, const char *icon,
+                       const char *size, const char *color, const char *fcolor, const char *width, const char *icon_area,
+                       const char *icon_line, const char *size_column)
+{
+    int nfeatures;
+    FILE *fd;
+    char *leg_file;
+    char map[GNAME_MAX];
+    char *ptr;
+    strcpy(map, name_map);
+    strtok_r(map, "@", &ptr);
+
+    if (size_column)
+        size = "-1";
+
+    /* Write into legend file */
+    leg_file = getenv("GRASS_LEGEND_FILE");
+    if (leg_file) {
+        fd = fopen(leg_file, "a");
+
+        /* Point */
+        if (type & GV_POINT){
+            nfeatures = Vect_get_num_primitives(Map, GV_POINT);
+            if (nfeatures > 0) {
+                if (leglab)
+                    fprintf(fd, "%s|", leglab);
+                else
+                    fprintf(fd, "%s|", map);
+                fprintf(fd, "%s|%s|lf|%s|%s|%s", icon, size, color, fcolor, width);
+                fprintf(fd, "|%s|%d\n", "point", nfeatures);
+            }
+        }
+
+        /* Line */
+        if (type & GV_LINE){
+            nfeatures = Vect_get_num_primitives(Map, GV_LINE);
+            if (nfeatures > 0){
+                if (leglab)
+                    fprintf(fd, "%s|", leglab);
+                else
+                    fprintf(fd, "%s|", map);
+                fprintf(fd, "%s|%s|lf|%s|%s|%s", icon_line, size, color, fcolor, width);
+                fprintf(fd, "|%s|%d\n", "line", nfeatures);
+            }
+        }
+
+        /* Area */
+        if (type & GV_AREA){
+            nfeatures = Vect_get_num_primitives(Map, GV_BOUNDARY);
+            if (nfeatures > 0) {
+                if (leglab)
+                    fprintf(fd, "%s|", leglab);
+                else
+                    fprintf(fd, "%s|", map);
+                fprintf(fd, "%s|%s|lf|%s|%s|%s", icon_area, size, color, fcolor, width);
+                fprintf(fd, "|%s|%d\n", "area", nfeatures);
+            }
+        }
+        /* Centroid */
+        if (type & GV_CENTROID){
+            nfeatures = Vect_get_num_primitives(Map, GV_CENTROID);
+            if (nfeatures > 0) {
+                if (leglab)
+                    fprintf(fd, "%s|", leglab);
+                else
+                    fprintf(fd, "%s|", map);
+                fprintf(fd, "%s|%s|lf|%s|%s|%s", icon, size, color, fcolor, width);
+                fprintf(fd, "|%s|%d\n", "centroid", nfeatures);
+            }
+        }
+
+        fclose(fd);
+    }
+}
diff --git a/display/d.vect/local_proto.h b/display/d.vect/local_proto.h
index 5698465..46215a6 100644
--- a/display/d.vect/local_proto.h
+++ b/display/d.vect/local_proto.h
@@ -65,3 +65,8 @@ int display_vert(struct Map_info *, int, LATTR *, double);
 
 /* zcoor.c */
 int display_zcoor(struct Map_info *, int, LATTR *);
+
+/* legend.c */
+void write_into_legfile(struct Map_info *, int, const char *, const char *,
+			const char *, const char *, const char *, const char *,
+			const char *, const char *, const char *, const char *);
diff --git a/display/d.vect/main.c b/display/d.vect/main.c
index 542a2d4..bf75915 100644
--- a/display/d.vect/main.c
+++ b/display/d.vect/main.c
@@ -4,6 +4,7 @@
  * MODULE:       d.vect
  * AUTHOR(S):    CERL, Radim Blazek, others
  *               Updated to GRASS7 by Martin Landa <landa.martin gmail.com>
+ *               Support for vector legend by Adam Laza <ad.laza32 gmail.com >
  * PURPOSE:      Display the vector map in map display
  * COPYRIGHT:    (C) 2004-2014 by the GRASS Development Team
  *
@@ -52,7 +53,9 @@ int main(int argc, char **argv)
     struct Option *lsize_opt, *font_opt, *enc_opt, *xref_opt, *yref_opt;
     struct Option *attrcol_opt, *maxreg_opt, *minreg_opt;
     struct Option *width_opt, *wcolumn_opt, *wscale_opt;
-    struct Flag *id_flag, *cats_acolors_flag, *sqrt_flag;
+    struct Option *leglab_opt;
+    struct Option *icon_line_opt, *icon_area_opt;
+    struct Flag *id_flag, *cats_acolors_flag, *sqrt_flag, *legend_flag;
     char *desc;
     
     struct cat_list *Clist;
@@ -100,7 +103,7 @@ int main(int argc, char **argv)
     
     /* Query */
     type_opt = G_define_standard_option(G_OPT_V_TYPE);
-    type_opt->answer = "point,line,boundary,area,face";
+    type_opt->answer = "point,line,area,face";
     type_opt->options = "point,line,boundary,centroid,area,face";
     type_opt->guisection = _("Selection");
     
@@ -189,6 +192,32 @@ int main(int argc, char **argv)
     rotcolumn_opt->description =
 	_("Measured in degrees CCW from east");
 
+    icon_area_opt = G_define_option();
+    icon_area_opt->key = "icon_area";
+    icon_area_opt->type = TYPE_STRING;
+    icon_area_opt->required = NO;
+    icon_area_opt->multiple = NO;
+    icon_area_opt->guisection = _("Legend");
+    icon_area_opt->answer = "legend/area";
+    icon_area_opt->options = icon_files();
+    icon_area_opt->description = _("Area/boundary symbol for legend");
+
+    icon_line_opt = G_define_option();
+    icon_line_opt->key = "icon_line";
+    icon_line_opt->type = TYPE_STRING;
+    icon_line_opt->required = NO;
+    icon_line_opt->multiple = NO;
+    icon_line_opt->guisection = _("Legend");
+    icon_line_opt->answer = "legend/line";
+    icon_line_opt->options = icon_files();
+    icon_line_opt->description = _("Line symbol for legend");
+
+    leglab_opt = G_define_option();
+    leglab_opt->key = "legend_label";
+    leglab_opt->type = TYPE_STRING;
+    leglab_opt->guisection = _("Legend");
+    leglab_opt->description = _("Label to display after symbol in vector legend");
+
     /* Labels */
     lfield_opt = G_define_standard_option(G_OPT_V_FIELD);
     lfield_opt->key = "label_layer";
@@ -295,6 +324,11 @@ int main(int argc, char **argv)
 	  "instead of circle radius");
     sqrt_flag->guisection = _("Symbols");
 
+    legend_flag = G_define_flag();
+    legend_flag->key = 's';
+    legend_flag->label = _("Do not show this layer in vector legend");
+    legend_flag->guisection = _("Legend");
+
     /* Check command line */
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
@@ -424,6 +458,14 @@ int main(int argc, char **argv)
 		stat += display_dir(&Map, type, Clist, chcat, size);
 	}
 
+	if (!legend_flag->answer) {
+		write_into_legfile(&Map, type, leglab_opt->answer, map_name,
+			   icon_opt->answer, size_opt->answer, 
+			   color_opt->answer, fcolor_opt->answer, 
+			   width_opt->answer, icon_area_opt->answer,
+			   icon_line_opt->answer, sizecolumn_opt->answer);
+	}
+
 	/* reset line width: Do we need to get line width from display
 	 * driver (not implemented)?  It will help restore previous line
 	 * width (not just 0) determined by another module (e.g.,
diff --git a/display/d.where/d.where.html b/display/d.where/d.where.html
index d5c2f16..056008f 100644
--- a/display/d.where/d.where.html
+++ b/display/d.where/d.where.html
@@ -64,4 +64,4 @@ Michael Shapiro, <br>
 U.S. Army Construction Engineering 
 Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/display/displaydrivers.html b/display/displaydrivers.html
index 6fcafcc..309150f 100644
--- a/display/displaydrivers.html
+++ b/display/displaydrivers.html
@@ -15,6 +15,57 @@ running <em><a href="d.mon.html">d.mon</a></em> module.
   <li><a href="htmldriver.html">HTMLMAP driver</a>
 </ul>
 
+<h2>NOTES</h2>
+
+<h3>GRASS_RENDER_COMMAND</h3>
+
+If environmental variable GRASS_RENDER_COMMAND is defined,
+rendering is redirected by display library to the given external command
+defined by this variable. Currently only Python scrips are supported.
+
+<p>
+Lets start with simple example of Python script called <i>render.py</i>:
+
+<div class="code"><pre>
+#!/usr/bin/evn python
+
+import os
+import sys
+
+import grass.script as grass
+from grass.script import task as gtask
+
+os.environ['GRASS_RENDER_IMMEDIATE'] = 'default'
+os.environ['GRASS_RENDER_FILE'] = 'output.png'
+
+cmd, dcmd = gtask.cmdstring_to_tuple(sys.argv[1])
+
+grass.run_command('d.text', text="Test of GRASS_RENDER_COMMAND redirection")
+
+os.environ['GRASS_RENDER_FILE_READ'] = 'TRUE'
+grass.run_command(cmd, **dcmd)
+</pre></div>
+
+After defining GRASS_RENDER_COMMAND variable (example for Bash):
+
+<div class="code"><pre>
+export GRASS_RENDER_COMMAND=render.py
+</pre></div>
+
+Display GRASS modules like <em><a href="d.rast.html">d.rast</a></em>
+or <em><a href="d.vect.html">d.vect</a></em> will be executed
+by <i>render.py</i> program.
+
+For example the command
+
+<div class="code"><pre>
+d.vect roadsmajor
+</pre></div>
+
+produces output PNG file <i>output.png</i> which will contain rendered
+features from vector map <i>roadsmajor</i> and sample text <i>"Test of
+GRASS_RENDER_COMMAND redirection"</i>.
+
 <h2>SEE ALSO</h2>
 
 <em>
diff --git a/doc/Makefile b/doc/Makefile
index bd8ec91..042789d 100644
--- a/doc/Makefile
+++ b/doc/Makefile
@@ -1,8 +1,7 @@
 MODULE_TOPDIR = ..
 
-PGM = projectionintro
+include $(MODULE_TOPDIR)/include/Make/Other.make
 
-include $(MODULE_TOPDIR)/include/Make/Dir.make
-
-default: htmldir
+FILES := $(wildcard *.html)
 
+default: $(patsubst %,$(HTMLDIR)/%,$(FILES))
diff --git a/doc/README b/doc/README
new file mode 100644
index 0000000..30ebd2f
--- /dev/null
+++ b/doc/README
@@ -0,0 +1,105 @@
+Graphical index images
+======================
+
+General
+-------
+
+Clipped part from grass_structure.png with Locations, Mapsets and data
+types.
+
+Alternative (can be also alternative for display):
+
+g.region n=224940 s=224590 w=638450 e=638840
+
+d.shade shade=elevation_shade color=elevation  # opacity 90%
+d.vect map=firestations color=45:107:168 fill_color=30:144:255 width=2 icon=basic/circle size=15
+d.vect map=schools color=208:208:0 fill_color=yellow width=2 icon=basic/triangle size=15
+d.vect map=hospitals color=136:0:0 fill_color=213:21:21 width=2 icon=basic/box size=15
+
+
+Raster
+------
+
+d.rast.num -a -f map=elevation grid_color=179:179:179 precision=0
+
+
+Vector
+------
+
+g.region n=224940 s=224590 w=638450 e=638840
+
+v.buffer input="streams" layer="-1" output="streams_buffer" distance=20
+
+d.vect map=census color=142:142:0 fill_color=255:255:167 width=2
+d.vect map=streams_buffer color=11:185:11 fill_color=11:185:11 width=1
+d.vect map=streams color=30:144:255 width=4
+
+
+Database
+--------
+
+streams attributes screenshot
+
+DIR="../trunk-commands/doc/"
+for FILE in *.png; do convert $FILE -resize 200x200 $DIR/`basename -s .png $FILE`.jpg; done;
+
+
+Display
+-------
+
+g.region n=226640 s=222860 w=631260 e=637170
+
+d.rast map=elevation_shade
+d.rast map=lakes
+d.vect map=schools color=16:70:123 fill_color=30:144:255 width=1 icon=basic/triangle size=10
+d.vect map=roadsmajor color=255:151:38 width=4
+d.vect map=roadsmajor color=255:172:82 width=2
+
+GUI
+---
+
+* Ubuntu 14.04 with Unity
+* landclass, roadsmajor, elevation
+* query map dialog active
+* Search modules tab active (with open subtrees)
+
+
+Imagery
+-------
+
+# this takes some time, perhaps the region below would be enough
+g.region -p raster=ortho_2001_t792_1m
+i.group group=ortho_group input=ortho_2001_t792_1m
+i.segment group=ortho_group output=ortho_segs_final threshold=0.25 min=10
+
+g.region n=221100 s=219700 w=638616 e=639316 -p
+d.mon start=cairo output=gi_imagery.png width=500 height=500
+d.frame left -c at=0,100,0,50d.rast ortho_2001_t792_1m
+d.rast ortho_2001_t792_1m
+d.frame right -c at=0,100,50,100
+d.rast ortho_segs_final
+d.mon stop=cairo
+
+
+Temporal
+--------
+
+Done in GUI.
+
+g.region raster=landuse
+
+r.mapcalc "a1 = 10"
+r.mapcalc "a2 = 20"
+r.mapcalc "a3 = 30"
+r.mapcalc "a4 = 40"
+
+m.nviz.image elevation_map=a1,a2,a3,a4 mode=fine,fine,fine,fine resolution_fine=1,6,1,1 resolution_coarse=9,9,9,9 shading=gouraud,gouraud,gouraud,gouraud style=surface,surface,surface,surface wire_color=136:136:136,136:136:136,136:136:136,136:136:136 color_map=landuse,landuse,landuse,landuse \
+position=0.03,0.31 height=92 perspective=36 twist=-99 zexag=200.000000 focus=1071,9393,30 \
+light_position=-0.57,0.75,0.80 light_brightness=80 light_ambient=20 light_color=255:255:255 \
+output=nviz_output format=ppm size=872,586  
+
+
+Miscellaneous
+-------------
+
+Taken from d.rhumbline.
diff --git a/doc/gi_3dview.jpg b/doc/gi_3dview.jpg
new file mode 100644
index 0000000..74d4693
Binary files /dev/null and b/doc/gi_3dview.jpg differ
diff --git a/doc/gi_c.jpg b/doc/gi_c.jpg
new file mode 100644
index 0000000..3233e79
Binary files /dev/null and b/doc/gi_c.jpg differ
diff --git a/doc/gi_cartography.jpg b/doc/gi_cartography.jpg
new file mode 100644
index 0000000..b2bb80b
Binary files /dev/null and b/doc/gi_cartography.jpg differ
diff --git a/doc/gi_database.jpg b/doc/gi_database.jpg
new file mode 100644
index 0000000..c8f13cf
Binary files /dev/null and b/doc/gi_database.jpg differ
diff --git a/doc/gi_display.jpg b/doc/gi_display.jpg
new file mode 100644
index 0000000..1b2abde
Binary files /dev/null and b/doc/gi_display.jpg differ
diff --git a/doc/gi_gallery.jpg b/doc/gi_gallery.jpg
new file mode 100644
index 0000000..ecedefb
Binary files /dev/null and b/doc/gi_gallery.jpg differ
diff --git a/doc/gi_general.jpg b/doc/gi_general.jpg
new file mode 100644
index 0000000..c424666
Binary files /dev/null and b/doc/gi_general.jpg differ
diff --git a/doc/gi_gui.jpg b/doc/gi_gui.jpg
new file mode 100644
index 0000000..c2be3ff
Binary files /dev/null and b/doc/gi_gui.jpg differ
diff --git a/doc/gi_imagery.jpg b/doc/gi_imagery.jpg
new file mode 100644
index 0000000..b826c7c
Binary files /dev/null and b/doc/gi_imagery.jpg differ
diff --git a/doc/gi_misc.jpg b/doc/gi_misc.jpg
new file mode 100644
index 0000000..b8af30b
Binary files /dev/null and b/doc/gi_misc.jpg differ
diff --git a/doc/gi_python.jpg b/doc/gi_python.jpg
new file mode 100644
index 0000000..15da985
Binary files /dev/null and b/doc/gi_python.jpg differ
diff --git a/doc/gi_raster.jpg b/doc/gi_raster.jpg
new file mode 100644
index 0000000..9dfcf97
Binary files /dev/null and b/doc/gi_raster.jpg differ
diff --git a/doc/gi_raster3d.jpg b/doc/gi_raster3d.jpg
new file mode 100644
index 0000000..99dbcff
Binary files /dev/null and b/doc/gi_raster3d.jpg differ
diff --git a/doc/gi_temporal.jpg b/doc/gi_temporal.jpg
new file mode 100644
index 0000000..1de6a95
Binary files /dev/null and b/doc/gi_temporal.jpg differ
diff --git a/doc/gi_vector.jpg b/doc/gi_vector.jpg
new file mode 100644
index 0000000..c9dacaf
Binary files /dev/null and b/doc/gi_vector.jpg differ
diff --git a/doc/grass_database.html b/doc/grass_database.html
new file mode 100644
index 0000000..da8dc55
--- /dev/null
+++ b/doc/grass_database.html
@@ -0,0 +1,295 @@
+<!-- meta page description: GRASS GIS Database -->
+
+A GRASS GIS Database is simply a set of directories and files
+with certain structure which GRASS GIS works efficiently with.
+Location is a directory with data related to
+one geographic location or a project.
+All data within one Location has the same cartographic projection.
+A Location contains Mapsets and each Mapset contains data related to
+a specific task, user or a smaller project.
+Within each Location, a mandatory PERMANENT Mapset exists
+which can contain commonly used data within a Location such as base maps.
+PERMANENT Mapset also contains metadata related to Location
+such as projection.
+When GRASS GIS is started it connects to a Database, Location and Mapset
+specified by the user.
+
+<p>
+<!-- original drawing: doc/grass_database.svg -->
+<center>
+  <img src="grass_database.png" alt="example: nc_spm - highway - elevation"><br>
+  <i>Fig. 1: GRASS GIS Database structure as visible to the user</i>
+</center>
+
+<!--
+TODO: Introduction/Rationale/Motivation
+
+data format handling separated from analysis
+
+organizing the data
+In geospatial analysis often involves combining data from various sources
+multiple users
+-->
+
+
+<h3>GRASS GIS Database</h3>
+
+All data for GRASS GIS must be in GRASS GIS Database which is a directory
+(visible on the disk) containing subdirectories which are GRASS Locations.
+User can have one or more of Databases on the disk. Typically users have
+one directory called <code>grassdata</code> in their home directory.
+In multi-user environment users often have a <code>grassdata</code> directory
+mounted as a network directory (network file system).
+For teams, a centralized GRASS DATABASE would be defined
+in a shared network file system (e.g. NFS).
+<!-- TODO: above needs some fixes -->
+
+<p>
+GRASS GIS Databases can be safely copied or moved as any other directories.
+Don't be confused with (relational) databases which are used in GRASS GIS
+to hold attribute data and might be part of the GRASS GIS Database.
+From user point of view, GRASS GIS Database with all its data in it
+is similar to, e.g. PostGIS, database, as it stores all information
+inside in a specific format and is accessible by specific tools.
+GRASS GIS Databases is in GRASS GIS often called GISDBASE or DATABASE.
+
+
+<h3>GRASS Locations</h3>
+
+Location is a directory which contains GRASS Mapsets which are its subdirectories.
+All data in one Location have the same projection (coordinate system, datum).
+Each Location must contain Mapset called PERMANENT.
+Typically, a Location contains all data related to one project
+or a geographic area (geographic location or region).
+Alternatively, Location can simply contain all data in a given projection.
+
+<p>
+GRASS Locations can be safely copied or moved as any other directories.
+Compressed Location is usually what GRASS users exchange between each other
+when they want to share a lot of data.
+For example, GRASS GIS sample data are provided as Locations.
+
+<p>
+Don't be confused with location as a place (file or directory) in a file system.
+The word location in GRASS Location refers to a location or area on Earth
+(or whatever is applicable).
+Users and programmers familiar with relational databases such as PostgreSQL
+can view Location as an individual database inside the system or a storage area
+which would be equivalent to GRASS GIS Database. Mapsets in a Locations
+are like namespaces or schemas inside a database.
+
+<!-- TODO: naming limitations and best practices -->
+
+
+<h3>GRASS Mapsets</h3>
+
+Mapsets contains the actual data, mostly geospatial data,
+referred to as maps in GRASS GIS.
+Mapsets are a tool for organizing maps in a transparent way
+as well as a tool for isolating different tasks to prevent data loss.
+
+<p>
+GRASS GIS is always connected to one particular Mapset.
+GRASS GIS modules can create, modify, change, or delete a data only in
+the current Mapset.
+By default, only the data from the current Mapset and PERMANENT Mapset
+are visible. Using
+<a href="g.mapsets.html"><em>g.mapsets</em></a>
+module or in GUI other Mapsets can be made visible and seamlessly accessible.
+All data are available for reading when Mapset is specified explicitly,
+for example to access map <code>streets</code> in Mapset
+<code>new_highway</code> user can use <code>streets at new_highway</code>.
+For maps which are in the current or PERMAENT Mapsets or Mapsets
+sets as visible (accessible), there is no need to use
+<code>@mapset</code> syntax.
+
+
+<p>
+Mapsets are used to store maps related to one project, smaller project,
+specific task, issue or subregions.
+In multi-user environment, when a team works together on one project,
+Mapsets support simultaneous access of several users to the maps
+stored within the same Location.
+Besides access to his or her own
+Mapset, each user can also read maps in PERMANENT Mapsent
+and in other users' Mapsets when set.
+However, each user can modify or remove only the maps
+in his or her own Mapset.
+
+<p>
+Besides the geospatial data, Mapset holds additional data such as
+color tables (managed e.g. by <a href="r.colors.html"><em>r.colors</em></a>)
+and the current computational region's extent and resolution
+stored in a file called <code>WIND</code>
+and managed by <a href="g.region.html"><em>g.region</em></a>.
+
+<p>
+Mapsets can be copied and moved as directories, however only when it is clear
+that the projections of both Locations
+(as reported by <a href="g.proj.html"><em>g.proj</em></a>)
+match each other. Since this is sometimes hard to to establish,
+it is recommended to use <a href="r.proj.html"><em>r.proj</em></a>
+or <a href="v.proj.html"><em>v.proj</em></a> to reproject the data.
+The files and directories should not be moved or modified directly,
+but only using GRASS GIS tools.
+
+
+<h3>The role of the PERMANENT Mapset</h3>
+
+When creating a new Location, GRASS GIS automatically creates a special
+Mapset called PERMANENT where the core data for the Location are stored.
+
+<p>
+Since the maps in PERMANENT Mapset are visible from all the other Mapsets,
+it can be used to store the base maps (base cartography), data common
+to all projects or needed for different analyses done is separate Mapsets.
+
+<p>
+In multi-user environment, data in the PERMANENT Mapset can only be added,
+modified or removed by the owner of the PERMANENT Mapset; however, they can be
+accessed, analyzed, and copied into their own Mapset by the other
+users. The PERMANENT Mapset is useful for providing general spatial
+data (e.g. an elevation model), accessible but write-protected to all
+users who are working in the same Location as the database owner.
+To manipulate or add data to PERMANENT, the owner can start
+GRASS GIS and choose the relevant Location and the PERMANENT Mapset.
+
+<p>
+The PERMANENT Mapset also contains the <code>DEFAULT_WIND</code> file which holds
+the default computational region's extent and resolution values
+for the Location (which all Mapsets will inherit when they are created).
+Users have the option of switching back to the default region at any time.
+
+
+<h3>Importing, exporting and linking data</h3>
+
+GRASS GIS works only with data which are imported into a GRASS Database,
+so all data needs to be imported, e.g. by
+<a href="r.in.gdal.html"><em>r.in.gdal</em></a> or
+highly convenient <a href="r.import.html"><em>r.import</em></a>,
+before the actual analysis.
+Data in GRASS Datable can be exported using for example
+<a href="r.in.gdal.html"><em>r.in.gdal</em></a> in case of raster maps.
+
+<p>
+For cases when import is not desirable, an option to link external data exists.
+Projection of the linked data must match the Location's projection
+otherwise the external data cannot be linked. (Linking data in different
+projection is not allowed as it would require on-the-fly reprojection
+which could cause inconsistencies in the data.
+
+<p>
+For example, module <a href="r.external.html"><em>r.external</em></a> links
+external raster data, so that the data are accessible in GRASS Database
+as standard raster maps. Similarly for newly created maps,
+<a href="r.external.out.html"><em>r.external.out</em></a>
+setups a format and directory where the actual data will be stored,
+however in GRASS Database the data will be created as standard maps.
+
+
+<h3>Starting GRASS GIS using GUI</h3>
+
+After launching GRASS GIS, the startup window will open (Fig. 2).
+
+<p>
+<center>
+  <img src="grass_start.png" alt="startup window with numbered fields"><br>
+  <i>Fig. 2: GRASS GIS startup window</i>
+</center>
+
+The startup windows provides these functions:
+
+<ol>
+    <li>Selecting the GRASS GIS Database directory.
+    <li>Selecting the Location (e.g. a project or area).
+        See the <em>Location Wizard</em> (4) for creating new Locations.
+    <li>Selecting the Mapset (a subproject or task).
+        Creating a new Mapset requires only name.
+    <li>The <em>Location Wizard</em> for creating new Locations
+        based for example, on existing georeferenced file or EPDS code.
+    <li>Start GRASS GIS once you have selected an existing Location and Mapset
+        or defined a new one. The graphical user interface
+        <a href="wxGUI.html">wxGUI</a> will open and provide you with a
+        menu system, map visualization tool, digitizer, and more.
+</ol>
+
+
+<h3>Starting GRASS GIS using command line</h3>
+
+GRASS GIS can be started with given Database, Location and Mapset
+from the command line. For example, the following will start
+in a given Mapset with only command line interface:
+
+<div class="code"><pre>
+grass72 -text ~/grassdata/mylocation/mymapset
+</pre></div>
+
+And the following will create the given Location with projection given
+by the EPSG code and it will start the default interface
+(GUI or command line):
+
+<div class="code"><pre>
+grass72 -c EPSG:5514:3 ~/grassdata/mylocation
+</pre></div>
+
+See <a href="grass7.html"><em>grass</em></a> command manual for more details.
+
+
+<h3>Creating a New Location with the Location Wizard</h3>
+
+The <a href="wxGUI.html">wxGUI</a> graphical user interface provides a
+graphical <em>Location Wizard</em> which lets you easily create a
+new Location for your own data. You will be guided through a series of
+dialogues to browse and select predefined projections or to
+define custom projections.
+
+<p>
+The most convenient way of using <em>Location Wizard</em> is creating new
+Location based on a georeferenced file, such as Shapefile or GeoTIFF,
+or by selecting the corresponding EPSG projection code.
+In case of using georeferenced file, you are asked whether the data itself
+should be imported into the new Location.
+<!-- TODO: some of this should be or already is automatic
+dialog with checkboxes would be also more convenient than multiple questions -->
+The default region is then set to match imported map.
+<!-- TODO: difference rasters versus vectors -->
+
+<!--
+TODO: some notes about resolution and extent would be nice
+(as well as removing the step from the wizard)
+
+this was in the text pointing to some unknown text:
+* The rules to define the resolution as described above also apply here.
+* Find below also some rules to define the default raster resolution
+  for a new Location.
+-->
+
+<p>
+After defining a new Location, wxGUI starts automatically.
+<!-- TODO: how GUI start actually works -->
+If data were already imported, you can add them into the Layer Manager now
+and display them.
+More data can be imported into the Location, e.g. using import options in
+the <em>File</em> menu in <em>Layer Manager</em> or
+<a href="r.import.html"><em>r.import</em></a>.
+
+
+<h2>See also</h2>
+
+<em>
+<a href="index.html">GRASS GIS 7 Reference Manual</a>
+<br>
+<a href="grass7.html">GRASS GIS 7 startup program manual page</a>
+<br>
+<a href="http://grasswiki.osgeo.org/wiki/Importing_data">Importing data on GRASS Wiki</a>
+<br>
+<a href="r.import.html">r.import</a>,
+<a href="v.import.html">v.import</a>,
+<a href="r.external.html">r.external</a>,
+<a href="v.external.html">v.external</a>,
+<a href="r.proj.html">r.proj</a>,
+<a href="v.proj.html">v.proj</a>,
+</em>
+
+<p>
+<i>Last changed: $Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $</i>
diff --git a/doc/grass_database.png b/doc/grass_database.png
new file mode 100644
index 0000000..7fcb4f7
Binary files /dev/null and b/doc/grass_database.png differ
diff --git a/doc/grass_database.svg b/doc/grass_database.svg
new file mode 100644
index 0000000..444da3c
--- /dev/null
+++ b/doc/grass_database.svg
@@ -0,0 +1,510 @@
+<?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="194.78999mm"
+   height="107.56693mm"
+   viewBox="0 0 690.20076 381.14265"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="grass_database.svg"
+   inkscape:export-filename="grass_database.png"
+   inkscape:export-xdpi="97.797638"
+   inkscape:export-ydpi="97.797638">
+  <defs
+     id="defs4" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="1"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.98994949"
+     inkscape:cx="159.3735"
+     inkscape:cy="218.52638"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer3"
+     showgrid="false"
+     inkscape:window-width="1920"
+     inkscape:window-height="1055"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     showguides="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid4292"
+       originx="-20.781704"
+       originy="-264.0025" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata7">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="lines"
+     style="display:inline"
+     transform="translate(-20.781703,-407.21704)">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 140,452.3622 30,0"
+       id="path4321"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 155,452.3622 0,280 15,0"
+       id="path4323"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 155,732.3622 0,40 15,0"
+       id="path4325"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 290,452.3622 20,0 -10,0 0,240 10,0"
+       id="path4327"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 300,492.3622 10,0"
+       id="path4329"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 430,492.3622 20,0"
+       id="path4331"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 440,492.3622 0,160 10,0"
+       id="path4333"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 440,572.3622 10,0"
+       id="path4335"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 570,492.3622 20,0"
+       id="path4337"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 580,492.3622 0,40 10,0"
+       id="path4339"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 570,572.3622 20,0"
+       id="path4341"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 580,572.3622 0,40 10,0"
+       id="path4343"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#d4d800;stroke-width:4;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 570,652.3622 20,0"
+       id="path4345"
+       inkscape:connector-curvature="0" />
+  </g>
+  <g
+     inkscape:label="text"
+     inkscape:groupmode="layer"
+     id="layer1"
+     style="display:inline"
+     transform="translate(-20.781703,-407.21704)">
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="43.928326"
+       y="455.54086"
+       id="text4197"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199"
+         x="43.928326"
+         y="455.54086"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">grassdata</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="202.2225"
+       y="453.83432"
+       id="text4197-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-5"
+         x="202.2225"
+         y="453.83432"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">nc_spm</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="190.54037"
+       y="734.52502"
+       id="text4197-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-9"
+         x="190.54037"
+         y="734.52502"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">usa_albers</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="182.01132"
+       y="774.66211"
+       id="text4197-4"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-78"
+         x="182.01132"
+         y="774.66211"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">world_lat_lon</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="474.36481"
+       y="656.65985"
+       id="text4197-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-6"
+         x="474.36481"
+         y="656.65985"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">3D raster</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="486.09454"
+       y="575.28345"
+       id="text4197-5"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-0"
+         x="486.09454"
+         y="575.28345"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">vector</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="625.02332"
+       y="575.28345"
+       id="text4197-43"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-27"
+         x="625.02332"
+         y="575.28345"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">streets</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="323.36652"
+       y="456.87021"
+       id="text4197-9-0"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-90-7"
+         x="323.36652"
+         y="456.87021"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">PERMANENT</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="319.50299"
+       y="494.31436"
+       id="text4197-9-7"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         x="319.50299"
+         y="494.31436"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none"
+         id="tspan4186">new_highway</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="321.86139"
+       y="694.97174"
+       id="text4197-9-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-90-9"
+         x="321.86139"
+         y="694.97174"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">wake_county</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="487.18951"
+       y="495.54483"
+       id="text4197-9-2"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-90-38"
+         x="487.18951"
+         y="495.54483"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">raster</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="616.44299"
+       y="495.97696"
+       id="text4197-3"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-2"
+         x="616.44299"
+         y="495.97696"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">elevation</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="613.16907"
+       y="535.76624"
+       id="text4197-3-8"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-2-5"
+         x="613.16907"
+         y="535.76624"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">landcover</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="616.66272"
+       y="615.4408"
+       id="text4197-43-1"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-27-7"
+         x="616.66272"
+         y="615.4408"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">buildings</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:10px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:4.43300009;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       x="634.32507"
+       y="656.79169"
+       id="text4197-9"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4199-90"
+         x="634.32507"
+         y="656.79169"
+         style="font-size:15px;stroke-width:4.43300009;stroke-miterlimit:4;stroke-dasharray:none">soils</tspan></text>
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer3"
+     inkscape:label="boxes"
+     style="display:inline"
+     transform="translate(-20.781703,-407.21704)">
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155"
+       width="115.67372"
+       height="30.820921"
+       x="22.998203"
+       y="435.99222"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-1"
+       width="115.67372"
+       height="30.820921"
+       x="173.04898"
+       y="435.99222"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-8"
+       width="115.67372"
+       height="30.820921"
+       x="173.04898"
+       y="715.18518"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-4"
+       width="115.67372"
+       height="30.820921"
+       x="173.04898"
+       y="755.32227"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-9"
+       width="115.67372"
+       height="30.820921"
+       x="452.27747"
+       y="635.78918"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-91"
+       width="115.67372"
+       height="30.820921"
+       x="452.27747"
+       y="554.71307"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-47"
+       width="115.67372"
+       height="30.820921"
+       x="593.09222"
+       y="554.71307"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-12-0"
+       width="115.67372"
+       height="30.820921"
+       x="312.92468"
+       y="435.99222"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-12-1"
+       width="115.67372"
+       height="30.820921"
+       x="312.92468"
+       y="474.97446"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-12-5"
+       width="115.67372"
+       height="30.820921"
+       x="312.92468"
+       y="675.63184"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-12-2"
+       width="115.67372"
+       height="30.820921"
+       x="452.27747"
+       y="474.97446"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-0"
+       width="115.67372"
+       height="30.820921"
+       x="593.09222"
+       y="474.97446"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-0-7"
+       width="115.67372"
+       height="30.820921"
+       x="593.09222"
+       y="514.76379"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-47-2"
+       width="115.67372"
+       height="30.820921"
+       x="593.09222"
+       y="594.87042"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <rect
+       style="fill:none;stroke:#0092a8;stroke-width:4.43300009;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="rect4155-12"
+       width="115.67372"
+       height="30.820921"
+       x="593.09222"
+       y="635.78918"
+       rx="5.7467012"
+       ry="5.5560374" />
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="30"
+       y="422.41235"
+       id="text4363"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4365"
+         x="30"
+         y="422.41235">Database</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="331.38074"
+       y="422.16626"
+       id="text4367"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4369"
+         x="331.38074"
+         y="422.16626">Mapset</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="190"
+       y="422.41235"
+       id="text4371"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4373"
+         x="190"
+         y="422.41235">Location</tspan></text>
+    <text
+       xml:space="preserve"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       x="622"
+       y="422.16626"
+       id="text4375"
+       sodipodi:linespacing="125%"><tspan
+         sodipodi:role="line"
+         id="tspan4377"
+         x="622"
+         y="422.16626">Maps</tspan></text>
+  </g>
+</svg>
diff --git a/doc/howto_release.txt b/doc/howto_release.txt
index f5d53ca..d1d33cd 100644
--- a/doc/howto_release.txt
+++ b/doc/howto_release.txt
@@ -1,6 +1,6 @@
 How to release GRASS GIS binaries and source code
 
-$Date: 2016-08-27 20:14:52 +0200 (Sat, 27 Aug 2016) $
+$Date: 2016-10-02 23:08:51 +0200 (Sun, 02 Oct 2016) $
 
 Note: This text contains *some* rules only applicable to the
       development coordinator (currently Markus Neteler, PSC Chair).
@@ -57,13 +57,13 @@ Contents
 
 #example:
 7
-0
-5RC1
+2
+0RC1
 2016
       rm -f include/VERSION~
 
     - Update OSGeo4W setup.hint file
-      mswindows/osgeo4w/setup.hint
+      vim mswindows/osgeo4w/setup.hint
 
       for RC candidates use 'test' keyword
       for final version use 'curr' keyword
@@ -93,7 +93,7 @@ Contents
           echo $RELEASETAG
 
           URL=https://svn.osgeo.org/grass
-          svn copy $URL/grass/branches/releasebranch_7_0 \
+          svn copy $URL/grass/branches/releasebranch_7_2 \
 	       $URL/grass/tags/$RELEASETAG \
 	       -m "Tagging release grass_${MAJOR}_${MINOR}_${RELEASE}"
       
@@ -118,8 +118,8 @@ Contents
 
 #example
 7
-0
-5svn
+2
+0svn
 2016
 
     rm -f include/VERSION~
@@ -176,14 +176,13 @@ Contents
 
  o Trac updates:
       - Add new release to https://trac.osgeo.org/grass/admin/ticket/versions
-      - Set "complete" flag in https://trac.osgeo.org/grass/milestone/7.0.x --> Edit Milestone
-        (this ideally batch-migrates assigned tickets to next milestone)
-      - batch modify tickets, set to next milestone (update this query accordingly)
-        https://trac.osgeo.org/grass/query?status=assigned&status=new&status=reopened&milestone=7.0.4&milestone=7.0.5&group=status&col=id&col=summary&col=owner&col=type&col=priority&col=component&col=version&order=priority
-        - under "Comment" add Field "Milestone" and set to next version
-        - Select all shown tickets via Status: assigned/new/reopened
-        - then "Change ticket" button
-      - Only in case of new release branch
+      - Set "complete" flag in https://trac.osgeo.org/grass/milestone/7.2.x --> Edit Milestone
+      - Batch modify tickets, set to next milestone (update this query accordingly: two entries to change)
+        https://trac.osgeo.org/grass/query?status=assigned&status=new&status=reopened&milestone=7.2.0&milestone=7.2.1&group=status&col=id&col=summary&col=owner&col=type&col=priority&col=component&col=version&order=priority
+        - Set max items to 1000, then select all shown tickets via Status: assigned/new/reopened sections
+        - Scroll down to "Batch modify": under the "Comment" section, add Field "Milestone" and set to next version
+        - then use "Change ticket" button, done.
+      - Only in case of new release branch being created:
          Add Wiki Macro definitions for manual pages G7X:modulename
          - Edit: https://trac.osgeo.org/grass/wiki/InterMapTxt
 
@@ -193,16 +192,16 @@ Contents
    Update grass_packager_release.bat, eg.
 
      set MAJOR=7
-     set MINOR=0
-     set PATCH=5RC1
+     set MINOR=2
+     set PATCH=0RC1
 
    Update addons (grass_addons.sh) rules, eg.
 
-     compile $SVN_PATH/grass7 $GISBASE_PATH/grass705RC1   $ADDON_PATH/grass705RC1/addons
+     compile $SVN_PATH/grass7 $GISBASE_PATH/grass720RC1   $ADDON_PATH/grass720RC1/addons
 
    Modify grass_copy_wwwroot.sh accordingly, eg.
 
-     copy_addon 705RC1 7.0.5RC1
+     copy_addon 720RC1 7.2.0RC1
 
  o Launchpad notes:
 
@@ -210,7 +209,7 @@ Contents
 
    Upload tarball for created release
 
-   Update daily recipe contents: https://code.launchpad.net/~grass/+recipe/grass70-release-daily
+   Update daily recipe contents: https://code.launchpad.net/~grass/+recipe/grass-trunk
 
 2. Tell others about it:
 
@@ -271,23 +270,23 @@ Contents
 1. see SVN book:
    http://svnbook.red-bean.com/en/1.1/ch04s07.html
 
-   GRASS 7.0 release branch:
-          BRANCH=releasebranch_7_0
+   GRASS 7.2 release branch:
+          BRANCH=releasebranch_7_2
           URL=https://svn.osgeo.org/grass
           svn copy $URL/grass/trunk \
                    $URL/grass/branches/$BRANCH \
-                   -m "Development branch for GRASS 7.0.x"
+                   -m "Development branch for GRASS 7.2.x"
 
 
    Switching current local copy to above development branch:
    (http://svnbook.red-bean.com/en/1.1/ch04s05.html)
            cd /path/to/your/local/copy/trunk
-           svn switch https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0 .
+           svn switch https://svn.osgeo.org/grass/grass/branches/releasebranch_7_2 .
 
 ----------
-Example: GRASS GIS 7.0 release branch creation
+Example: GRASS GIS 7.2 release branch creation
 
 svn copy https://svn.osgeo.org/grass/grass/trunk/ \
-    https://svn.osgeo.org/grass/grass/branches/releasebranch_7_0 \
-    -m "Creating the GRASS GIS 7.0 release branch (development started in 04/2008, r31142)"
+    https://svn.osgeo.org/grass/grass/branches/releasebranch_7_2 \
+    -m "Creating the GRASS GIS 7.2 release branch (branch started in 05/2016, r68500)"
 
diff --git a/doc/infrastructure.txt b/doc/infrastructure.txt
index 060fa12..abf4313 100644
--- a/doc/infrastructure.txt
+++ b/doc/infrastructure.txt
@@ -1,7 +1,7 @@
 How the GRASS Webserver and related infrastructure works
 
 written by M. Neteler
-Last changed: $Date: 2016-06-02 01:11:23 +0200 (Thu, 02 Jun 2016) $
+Last changed: $Date: 2016-09-12 00:27:05 +0200 (Mon, 12 Sep 2016) $
 
 
 Related Wiki documents:
@@ -151,6 +151,12 @@ Maintainer: OSGeo-SAC, http://wiki.osgeo.org/wiki/SAC
 Wiki Macro definitions for manual pages G7:modulename
 * https://trac.osgeo.org/grass/wiki/InterMapTxt
 
+ZIP file download support in trac (needed for g.extension) - on trac.osgeo.org:
+/var/www/trac/grass/conf/trac.ini
+[browser]
+downloadable_paths = /grass-addons/grass7/*/*,/sandbox/*/*
+
+
 == GRASS Bugtracker ==
 
 Current bugtracker (Jan 2008 - today):
@@ -175,11 +181,12 @@ Very old bugtracker (Dec 2000 - Dec 2006):
 
 Maintainer: Martin Landa
 
-Note: Only checking trunk
-
 * https://travis-ci.org/GRASS-GIS
 * https://github.com/GRASS-GIS/grass-ci
 
+Coverity Scan:
+* https://scan.coverity.com/projects/grass?tab=overview
+
 == OLD: GRASS Quality Control ==
 
 Maintainer: Prof. Giulio Antoniol
diff --git a/doc/projectionintro.html b/doc/projectionintro.html
index 61e7137..f9b889a 100644
--- a/doc/projectionintro.html
+++ b/doc/projectionintro.html
@@ -1,5 +1,5 @@
 <!-- meta page description: Projections and spatial transformations in GRASS GIS-->
-<h3>Introduction</h3>
+<h3>Projection management in general</h3>
 
 A GRASS location is referenced with a single projection and coordinate system
 (or unreferenced as XY location). When creating a new location from an existing
diff --git a/general/g.copy/g.copy.html b/general/g.copy/g.copy.html
index 07eec26..2a59dcd 100644
--- a/general/g.copy/g.copy.html
+++ b/general/g.copy/g.copy.html
@@ -56,4 +56,4 @@ U.S. Army Construction Engineering
 Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2016-04-29 16:26:02 +0200 (Fri, 29 Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-29 16:26:35 +0200 (Fri, 29 Apr 2016) $</i>
diff --git a/general/g.copy/main.c b/general/g.copy/main.c
index 7d33c3e..006038a 100644
--- a/general/g.copy/main.c
+++ b/general/g.copy/main.c
@@ -73,7 +73,7 @@ int main(int argc, char *argv[])
 		continue;
 	    }
 	    if (M_find(n, to, G_mapset()) && !(module->overwrite)) {
-		G_warning(_("<%s> already exists"), to);
+		G_warning(_("<%s> already exists. File not copied."), to);
 		continue;
 	    }
 	    if (G_legal_filename(to) < 0) {
diff --git a/general/g.filename/g.filename.html b/general/g.filename/g.filename.html
index 3f919f7..fd3d6a4 100644
--- a/general/g.filename/g.filename.html
+++ b/general/g.filename/g.filename.html
@@ -86,4 +86,4 @@ file=<em>'full_file_pathname'</em> is not output.
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2015-02-14 22:08:31 +0100 (Sat, 14 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-02-14 22:07:18 +0100 (Sat, 14 Feb 2015) $</i>
diff --git a/general/g.findetc/g.findetc.html b/general/g.findetc/g.findetc.html
index 614cc54..f35281e 100644
--- a/general/g.findetc/g.findetc.html
+++ b/general/g.findetc/g.findetc.html
@@ -23,4 +23,4 @@ directory, such as a user's home or a system addon directory.
 
 William Kyngesburye
 
-<p><i>Last changed: $Date: 2015-02-14 22:08:31 +0100 (Sat, 14 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-02-14 22:07:18 +0100 (Sat, 14 Feb 2015) $</i>
diff --git a/general/g.findfile/g.findfile.html b/general/g.findfile/g.findfile.html
index 7a9ea08..ca3ca94 100644
--- a/general/g.findfile/g.findfile.html
+++ b/general/g.findfile/g.findfile.html
@@ -75,10 +75,10 @@ fi
 
 <h3>PYTHON</h3>
 
-See <em><a href="http://grass.osgeo.org/grass70/manuals/libpython/">Python
+See <em><a href="http://grass.osgeo.org/grass72/manuals/libpython/">Python
 Scripting Library</a></em> for more info.
 <p>
-Note: The Python shell in the <em>wxGUI</em> can be used for entering the
+Note: The Python tab in the <em>wxGUI</em> can be used for entering the
 following code:
 <p>
 <div class="code"><pre>
@@ -101,4 +101,4 @@ gcore.find_file('elevation', element = 'cell')
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-03-15 22:08:33 +0100 (Tue, 15 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $</i>
diff --git a/general/g.gisenv/g.gisenv.html b/general/g.gisenv/g.gisenv.html
index 53f7dde..1ed9448 100644
--- a/general/g.gisenv/g.gisenv.html
+++ b/general/g.gisenv/g.gisenv.html
@@ -195,4 +195,4 @@ Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/general/g.gui/g.gui.html b/general/g.gui/g.gui.html
index 1941f6f..21d99f5 100644
--- a/general/g.gui/g.gui.html
+++ b/general/g.gui/g.gui.html
@@ -70,4 +70,4 @@ Martin Landa, FBK-irst, Trento, Italy<br>
 Hamish Bowman, Otago University, Dunedin, New Zealand (fine tuning)
 
 <p>
-<i>Last changed: $Date: 2014-04-21 13:58:28 +0200 (Mon, 21 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-21 13:55:01 +0200 (Mon, 21 Apr 2014) $</i>
diff --git a/general/g.gui/main.c b/general/g.gui/main.c
index cb91b3e..29e31ea 100644
--- a/general/g.gui/main.c
+++ b/general/g.gui/main.c
@@ -27,7 +27,7 @@
 int main(int argc, char *argv[])
 {
     struct Option *type, *rc_file;
-    struct Flag *update_ui, *nolaunch;
+    struct Flag *update_ui, *fglaunch, *nolaunch;
     struct GModule *module;
     const char *gui_type_env;
     char progname[GPATH_MAX];
@@ -63,7 +63,15 @@ int main(int argc, char *argv[])
     rc_file->key = "workspace";
     rc_file->required = NO;
     rc_file->key_desc = "name.gxw";
-    rc_file->description = _("Name of workspace file to load on start-up (valid only for wxGUI)");
+    rc_file->label = _("Name of workspace file to load on start-up");
+    rc_file->description = _("This is valid only for wxGUI (wxpython)");
+
+    fglaunch = G_define_flag();
+    fglaunch->key = 'f';
+    fglaunch->label = _("Start GUI in the foreground");
+    fglaunch->description = _("By default the GUI starts in the background"
+        " and control is immediately returned to the caller."
+        " When GUI runs in foregreound, it blocks the command line");
 
     update_ui = G_define_flag();
     update_ui->key = 'd';
@@ -95,22 +103,35 @@ int main(int argc, char *argv[])
 	exit(EXIT_SUCCESS);
     }
 
-    G_message(_("Launching <%s> GUI in the background, please wait..."), type->answer);
     sprintf(progname, "%s/gui/wxpython/wxgui.py", G_gisbase());
     if (access(progname, F_OK) == -1)
         G_fatal_error(_("Your installation doesn't include GUI, exiting."));
-    if (rc_file->answer) {
-        G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
-                   "--workspace", rc_file->answer, SF_BACKGROUND, NULL);
+                      
+    if (fglaunch->answer) {
+        G_message(_("Launching <%s> GUI, please wait..."), type->answer);
+        if (rc_file->answer) {
+            G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
+                       "--workspace", rc_file->answer, NULL);
+        }
+        else {
+            G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
+                       NULL);
+        }
     }
     else {
-        G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
-                   SF_BACKGROUND, NULL);
+        G_message(_("Launching <%s> GUI in the background, please wait..."), type->answer);
+        if (rc_file->answer) {
+            G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
+                       "--workspace", rc_file->answer, SF_BACKGROUND, NULL);
+        }
+        else {
+            G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
+                       SF_BACKGROUND, NULL);
+        }
+        /* stop the impatient from starting it again
+           before the splash screen comes up */
+        G_sleep(3);
     }
-    
-    /* stop the impatient from starting it again
-       before the splash screen comes up */
-    G_sleep(3);
 
     exit(EXIT_SUCCESS);
 }
diff --git a/general/g.list/g.list.html b/general/g.list/g.list.html
index c38fa83..c25a8e0 100644
--- a/general/g.list/g.list.html
+++ b/general/g.list/g.list.html
@@ -201,4 +201,4 @@ grass4u at gmail.com
 based on general/manage/cmd/list.c by Michael Shapiro
 
 <p>
-<i>Last changed: $Date: 2014-12-27 00:50:11 +0100 (Sat, 27 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-27 00:33:06 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/general/g.list/global.h b/general/g.list/global.h
new file mode 100644
index 0000000..e85d7e5
--- /dev/null
+++ b/general/g.list/global.h
@@ -0,0 +1,21 @@
+#include <stdio.h>
+#include <grass/gis.h>
+#include <grass/manage.h>
+
+enum {
+    TYPE_RAST,
+    TYPE_RAST3D,
+    TYPE_VECT,
+    TYPE_OTHERS
+};
+
+struct elist
+{
+    char *type;
+    char *name;
+    char *mapset;
+};
+
+void make_list(struct elist **, int *, int *, const struct list *, const char *,
+	       const struct Cell_head *);
+void print_list(FILE *, struct elist *, int, const char *, int, int);
diff --git a/general/g.list/list.c b/general/g.list/list.c
new file mode 100644
index 0000000..d572eff
--- /dev/null
+++ b/general/g.list/list.c
@@ -0,0 +1,172 @@
+#include "global.h"
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <grass/gis.h>
+#include <grass/raster3d.h>
+#include <grass/vector.h>
+#include <grass/manage.h>
+#include <grass/glocale.h>
+
+static int region_overlaps(const struct Cell_head *, const char *, const char *,
+			   int);
+static int compare_elist(const void *, const void *);
+
+void make_list(struct elist **el, int *lcount, int *lalloc,
+	       const struct list *elem, const char *mapset,
+	       const struct Cell_head *window)
+{
+    char path[GPATH_MAX];
+    const char *element, *alias;
+    char **list;
+    int count, i;
+    int type;
+
+    element = elem->element[0];
+    alias = elem->alias;
+
+    G_file_name(path, element, "", mapset);
+    if (access(path, 0) != 0)
+	return;
+
+    if ((list = G_ls2(path, &count)) == NULL)
+	return;
+
+    if (strcmp(alias, "raster") == 0)
+	type = TYPE_RAST;
+    else if (strcmp(alias, "raster_3d") == 0)
+	type = TYPE_RAST3D;
+    else if (strcmp(alias, "vector") == 0)
+	type = TYPE_VECT;
+    else
+	type = TYPE_OTHERS;
+
+    /* Suppress "... found in more mapsets" warnings from G_find_file2. */
+    G_suppress_warnings(1);
+
+    if (*lcount + count > *lalloc) {
+	*lalloc = *lcount + count + 10;
+	*el = G_realloc(*el, *lalloc * sizeof(struct elist));
+    }
+
+    for (i = 0; i < count; i++) {
+
+	/* If region= is used, read the map region. */
+	if (window) {
+	    /* If the map region doesn't overlap with the input region, don't
+	     * print the map. */
+	    if (!region_overlaps(window, list[i], mapset, type))
+		continue;
+	}
+
+	(*el)[*lcount].type = G_store(alias);
+	(*el)[*lcount].name = list[i];
+	(*el)[*lcount].mapset = G_store(mapset);
+	(*lcount)++;
+    }
+
+    G_suppress_warnings(0);
+
+    G_free(list);
+}
+
+void print_list(FILE *fp, struct elist *el, int count, const char *separator,
+		int add_type, int add_mapset)
+{
+    int i;
+
+    if (!count)
+	return;
+
+    qsort(el, count, sizeof(struct elist), compare_elist);
+
+    for (i = 0; i < count; i++) {
+	int need_mapset = 0;
+
+	if (i != 0)
+	    fprintf(fp, "%s", separator);
+
+	if (add_type)
+	    fprintf(fp, "%s/", el[i].type);
+
+	fprintf(fp, "%s", el[i].name);
+
+	if (!add_mapset) {
+	    if (i + 1 < count)
+		need_mapset = strcmp(el[i].name, el[i + 1].name) == 0;
+	    if (!need_mapset && i > 0)
+		need_mapset = strcmp(el[i].name, el[i - 1].name) == 0;
+	}
+	if (add_mapset || need_mapset)
+	    fprintf(fp, "@%s", el[i].mapset);
+    }
+
+    fflush(fp);
+}
+
+static int region_overlaps(const struct Cell_head *window, const char *name,
+			   const char *mapset, int type)
+{
+    int has_region;
+    struct Cell_head map_window;
+    RASTER3D_Region region3d;
+    struct Map_info Map;
+    struct bound_box box;
+
+    switch (type) {
+    case TYPE_RAST:
+	Rast_get_cellhd(name, mapset, &map_window);
+	has_region = 1;
+	break;
+    case TYPE_RAST3D:
+	if (Rast3d_read_region_map(name, mapset, &region3d) < 0)
+	    G_fatal_error(_("Unable to read header of 3D raster map <%s@%s>"),
+			  name, mapset);
+	Rast3d_region_to_cell_head(&region3d, &map_window);
+	has_region = 1;
+	break;
+    case TYPE_VECT:
+	Vect_set_open_level(2);
+	if (Vect_open_old_head(&Map, name, mapset) < 2)
+	    G_fatal_error(_("Unable to open vector map <%s@%s> on topological level"),
+			  name, mapset);
+	Vect_get_map_box(&Map, &box);
+	Vect_close(&Map);
+
+	map_window.north = box.N;
+	map_window.south = box.S;
+	map_window.west = box.W;
+	map_window.east = box.E;
+	has_region = 1;
+	break;
+    default:
+	has_region = 0;
+	break;
+    }
+
+    /* If an element doesn't have a concept of region at all, return 1 so we
+     * can always print it. */
+    if (!has_region)
+	return 1;
+
+    /* If the map region is outside the input region, return 0. Otherwise
+     * return 1 */
+    return !(window->north <= map_window.south ||
+	     window->south >= map_window.north ||
+	     window->west >= map_window.east ||
+	     window->east <= map_window.west);
+}
+
+static int compare_elist(const void *a, const void *b)
+{
+    struct elist *al = (struct elist *)a;
+    struct elist *bl = (struct elist *)b;
+    int ret;
+
+    if (!(ret = strcmp(al->type, bl->type))) {
+	if (!(ret = strcmp(al->name, bl->name)))
+	    ret = strcmp(al->mapset, bl->mapset);
+    }
+
+    return ret;
+}
diff --git a/general/g.list/main.c b/general/g.list/main.c
index ea7da70..fb4873d 100644
--- a/general/g.list/main.c
+++ b/general/g.list/main.c
@@ -17,39 +17,15 @@
  *
  *****************************************************************************/
 
+#include "global.h"
 #include <stdlib.h>
 #include <unistd.h>
 #include <string.h>
 #include <grass/gis.h>
-#include <grass/raster3d.h>
-#include <grass/vector.h>
 #include <grass/manage.h>
 #include <grass/glocale.h>
 #include <grass/spawn.h>
 
-enum {
-    TYPE_RAST,
-    TYPE_RAST3D,
-    TYPE_VECT,
-    TYPE_OTHERS
-};
-
-struct elist
-{
-    char *type;
-    char *name;
-    char *mapset;
-};
-
-static int any = 0;
-
-static void make_list(struct elist **, int *, int *, 
-                      const struct list *, const char *,
-		      struct Cell_head *);
-static void print_list(FILE *, struct elist *, int,
-		      const char *, int, int);
-static int region_overlaps(struct Cell_head *, const char *, const char *, int);
-
 int main(int argc, char *argv[])
 {
     struct GModule *module;
@@ -175,27 +151,15 @@ int main(int argc, char *argv[])
     flag.full->description = _("Verbose listing (also list map titles)");
     flag.full->guisection = _("Print");
 
+    G_option_excludes(opt.region, flag.pretty, flag.full, NULL);
+    G_option_excludes(flag.pretty, flag.mapset, flag.type, NULL);
+    G_option_excludes(flag.full, flag.mapset, flag.type, NULL);
+    G_option_exclusive(flag.pretty, flag.full, NULL);
+    G_option_exclusive(flag.regex, flag.extended, NULL);
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
-    if ((flag.pretty->answer || flag.full->answer) && opt.region->answer)
-        G_fatal_error(_("-%c/-%c and %s= are mutually exclusive"),
-		      flag.pretty->key, flag.full->key, opt.region->key);
-
-    if ((flag.pretty->answer || flag.full->answer) &&
-	(flag.mapset->answer || flag.type->answer))
-	G_fatal_error(_("-%c/-%c and -%c/-%c are mutually exclusive"),
-		      flag.pretty->key, flag.full->key,
-		      flag.mapset->key, flag.type->key);
-
-    if (flag.pretty->answer && flag.full->answer)
-	G_fatal_error(_("-%c and -%c are mutually exclusive"),
-		      flag.pretty->key, flag.full->key);
-
-    if (flag.regex->answer && flag.extended->answer)
-	G_fatal_error(_("-%c and -%c are mutually exclusive"),
-		      flag.regex->key, flag.extended->key);
-
     if (opt.pattern->answer) {
 	if (flag.regex->answer || flag.extended->answer)
 	    filter = G_ls_regex_filter(opt.pattern->answer, 0,
@@ -370,7 +334,7 @@ int main(int argc, char *argv[])
 
     if (flag.pretty->answer || flag.full->answer)
 	fclose(stdout);
-    else if (any)
+    else if (lcount)
 	fprintf(fp, "\n");
 
     if (use_pager)
@@ -386,164 +350,3 @@ int main(int argc, char *argv[])
 
     exit(EXIT_SUCCESS);
 }
-
-static void make_list(struct elist **el, int *lcount, int *lalloc, 
-                      const struct list *elem, const char *mapset,
-		      struct Cell_head *window)
-{
-    char path[GPATH_MAX];
-    const char *element, *alias;
-    char **list;
-    int count, i;
-    int type;
-
-    element = elem->element[0];
-    alias = elem->alias;
-
-    G_file_name(path, element, "", mapset);
-    if (access(path, 0) != 0)
-	return;
-
-    if ((list = G_ls2(path, &count)) == NULL)
-	return;
-
-    if (strcmp(alias, "raster") == 0)
-	type = TYPE_RAST;
-    else if (strcmp(alias, "raster_3d") == 0)
-	type = TYPE_RAST3D;
-    else if (strcmp(alias, "vector") == 0)
-	type = TYPE_VECT;
-    else
-	type = TYPE_OTHERS;
-
-    /* Suppress "... found in more mapsets" warnings from G_find_file2. */
-    G_suppress_warnings(1);
-
-    if (*lcount + count > *lalloc) {
-	*lalloc = *lcount + count + 10;
-	*el = G_realloc(*el, *lalloc * sizeof(struct elist));
-    }
-
-    for (i = 0; i < count; i++) {
-
-	/* If region= is used, read the map region. */
-	if (window) {
-	    /* If the map region doesn't overlap with the input region, don't
-	     * print the map. */
-	    if (!region_overlaps(window, list[i], mapset, type))
-		continue;
-	}
-
-	(*el)[*lcount].type = G_store(alias);
-	(*el)[*lcount].name = list[i];
-	(*el)[*lcount].mapset = G_store(mapset);
-	(*lcount)++;
-
-	any++;
-    }
-
-    G_suppress_warnings(0);
-
-    G_free(list);
-}
-
-int cmp(const void *a, const void *b)
-{
-    struct elist *al = (struct elist *)a;
-    struct elist *bl = (struct elist *)b;
-    int ret;
-
-    if (!(ret = strcmp(al->type, bl->type))) {
-	if (!(ret = strcmp(al->name, bl->name)))
-	    ret = strcmp(al->mapset, bl->mapset);
-    }
-
-    return ret;
-}
-
-static void print_list(FILE *fp, struct elist *el, int count,
-		      const char *separator, int add_type, int add_mapset)
-{
-    int i;
-
-    if (!count)
-	return;
-
-    qsort(el, count, sizeof(struct elist), cmp);
-
-    for (i = 0; i < count; i++) {
-	int need_mapset = 0;
-
-	if (i != 0)
-	    fprintf(fp, "%s", separator);
-
-	if (add_type)
-	    fprintf(fp, "%s/", el[i].type);
-
-	fprintf(fp, "%s", el[i].name);
-
-	if (!add_mapset) {
-	    if (i + 1 < count)
-		need_mapset = strcmp(el[i].name, el[i + 1].name) == 0;
-	    if (!need_mapset && i > 0)
-		need_mapset = strcmp(el[i].name, el[i - 1].name) == 0;
-	}
-	if (add_mapset || need_mapset)
-	    fprintf(fp, "@%s", el[i].mapset);
-    }
-
-    fflush(fp);
-}
-
-static int region_overlaps(struct Cell_head *window, const char *name,
-			   const char *mapset, int type)
-{
-    int has_region;
-    struct Cell_head map_window;
-    RASTER3D_Region region3d;
-    struct Map_info Map;
-    struct bound_box box;
-
-    switch (type) {
-    case TYPE_RAST:
-	Rast_get_cellhd(name, mapset, &map_window);
-	has_region = 1;
-	break;
-    case TYPE_RAST3D:
-	if (Rast3d_read_region_map(name, mapset, &region3d) < 0)
-	    G_fatal_error(_("Unable to read header of 3D raster map <%s@%s>"),
-			  name, mapset);
-	Rast3d_region_to_cell_head(&region3d, &map_window);
-	has_region = 1;
-	break;
-    case TYPE_VECT:
-	Vect_set_open_level(2);
-	if (Vect_open_old_head(&Map, name, mapset) < 2)
-	    G_fatal_error(_("Unable to open vector map <%s@%s> on topological level"),
-			  name, mapset);
-	Vect_get_map_box(&Map, &box);
-	Vect_close(&Map);
-
-	map_window.north = box.N;
-	map_window.south = box.S;
-	map_window.west = box.W;
-	map_window.east = box.E;
-	has_region = 1;
-	break;
-    default:
-	has_region = 0;
-	break;
-    }
-
-    /* If an element doesn't have a concept of region at all, return 1 so we
-     * can always print it. */
-    if (!has_region)
-	return 1;
-
-    /* If the map region is outside the input region, return 0. Otherwise
-     * return 1 */
-    return !(window->north <= map_window.south ||
-	     window->south >= map_window.north ||
-	     window->west >= map_window.east ||
-	     window->east <= map_window.west);
-}
diff --git a/general/g.list/testsuite/test_g_list.py b/general/g.list/testsuite/test_g_list.py
index 93f2252..88ba8f0 100644
--- a/general/g.list/testsuite/test_g_list.py
+++ b/general/g.list/testsuite/test_g_list.py
@@ -1,10 +1,11 @@
 """g.list tests"""
 
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import SimpleModule
 
 
-class GMlistWrongParamertersTest(grass.gunittest.TestCase):
+class GMlistWrongParamertersTest(TestCase):
     """Test wrong input of parameters for g.list module"""
 
     @classmethod
@@ -52,4 +53,4 @@ class GMlistWrongParamertersTest(grass.gunittest.TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/general/g.mapset/g.mapset.html b/general/g.mapset/g.mapset.html
index ce0fa5b..446c270 100644
--- a/general/g.mapset/g.mapset.html
+++ b/general/g.mapset/g.mapset.html
@@ -29,4 +29,4 @@ HISTFILE=/"$GISDBASE/$LOCATION/$MAPSET"/.bash_history
 Radim Blazek
 
 <p>
-<i>Last changed: $Date: 2014-09-26 21:19:49 +0200 (Fri, 26 Sep 2014) $</i>
+<i>Last changed: $Date: 2014-09-26 21:18:48 +0200 (Fri, 26 Sep 2014) $</i>
diff --git a/general/g.mapsets/g.mapsets.html b/general/g.mapsets/g.mapsets.html
index 4d44ffd..7480245 100644
--- a/general/g.mapsets/g.mapsets.html
+++ b/general/g.mapsets/g.mapsets.html
@@ -180,4 +180,4 @@ Greg Koerper, ManTech Environmental Technology, Inc.<br>
 Updated to GRASS 7 by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/general/g.message/g.message.html b/general/g.message/g.message.html
index 9724e7b..4abf1be 100644
--- a/general/g.message/g.message.html
+++ b/general/g.message/g.message.html
@@ -47,7 +47,7 @@ you are enouraged to single-quote messages that do not require
 
 <h3>Usage in Python scripts</h3>
 
-<a href="http://grass.osgeo.org/grass70/manuals/libpython/">GRASS
+<a href="http://grass.osgeo.org/grass72/manuals/libpython/">GRASS
 Python Scripting Library</a> defines special wrappers
 for <em>g.message</em>.
 
@@ -62,7 +62,7 @@ for <em>g.message</em>.
 </ul>
 
 <p>
-Note: The Python shell in the <em>wxGUI</em> can be used for entering the
+Note: The Python tab in the <em>wxGUI</em> can be used for entering the
 following sample code:
 <p>
 
@@ -111,4 +111,4 @@ Recommended levels:
 Jachym Cepicky
 
 <p>
-<i>Last changed: $Date: 2015-12-31 09:19:51 +0100 (Thu, 31 Dec 2015) $</i>
+<i>Last changed: $Date: 2016-07-09 21:39:14 +0200 (Sat, 09 Jul 2016) $</i>
diff --git a/general/g.parser/g.parser.html b/general/g.parser/g.parser.html
index 8144856..fdd1aab 100644
--- a/general/g.parser/g.parser.html
+++ b/general/g.parser/g.parser.html
@@ -527,7 +527,7 @@ printf ("Value of GIS_OPT_vect: '%s'\n", $ENV{'GIS_OPT_VECTOR'});
 </em>
 
 <p>
-Overview table: <a href="https://grass.osgeo.org/grass71/manuals/parser_standard_options.html">Parser standard options</a>
+Overview table: <a href="parser_standard_options.html">Parser standard options</a>
 <p>
 <a href="http://trac.osgeo.org/grass/wiki/Submitting/Python">Submitting rules for Python</a>
 
@@ -540,4 +540,4 @@ Related Wiki pages:
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/general/g.proj/datumtrans.c b/general/g.proj/datumtrans.c
index fb9c6cc..dbece81 100644
--- a/general/g.proj/datumtrans.c
+++ b/general/g.proj/datumtrans.c
@@ -130,8 +130,10 @@ int set_datumtrans(int datumtrans, int force)
 	    G_debug(3, "set_datumtrans(): datum transform terms found "
 		    "with %d options", paramsets);
 
-	    if (status == 1 && paramsets > 1)
-		/* Parameters are missing and there is a choice to be made */
+	    if (paramsets > 1 && (status == 1 || datumtrans != 0))
+		/* Parameters are missing and there is a choice to be
+                   made / or / user asked to print datum
+                   transformation parameters */
 		force = 1;
 
 	}
diff --git a/general/g.proj/g.proj.html b/general/g.proj/g.proj.html
index c8f74a6..7bb2fc7 100644
--- a/general/g.proj/g.proj.html
+++ b/general/g.proj/g.proj.html
@@ -243,4 +243,4 @@ ogr2ogr -t_srs "`g.proj -wf`" polbnda_italy_GB_ovest.shp polbnda_italy_LL.shp
 
 Paul Kelly
 
-<p><i>Last changed: $Date: 2016-05-28 08:52:40 +0200 (Sat, 28 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-28 08:53:59 +0200 (Sat, 28 May 2016) $</i>
diff --git a/general/g.proj/output.c b/general/g.proj/output.c
index 1bff612..7135e3e 100644
--- a/general/g.proj/output.c
+++ b/general/g.proj/output.c
@@ -142,7 +142,8 @@ void print_proj4(int dontprettify)
     if (check_xy(FALSE))
 	return;
 
-    pj_get_kv(&pjinfo, projinfo, projunits);
+    if (pj_get_kv(&pjinfo, projinfo, projunits) == -1)
+        G_fatal_error(_("Unable to convert projection information to PROJ.4 format"));
     proj4 = pj_get_def(pjinfo.pj, 0);
     pj_free(pjinfo.pj);
 
diff --git a/general/g.region/g.region.html b/general/g.region/g.region.html
index e828108..1b76fae 100644
--- a/general/g.region/g.region.html
+++ b/general/g.region/g.region.html
@@ -471,4 +471,4 @@ Michael Shapiro,
 U.S.Army Construction Engineering 
 Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-19 09:40:44 +0200 (Fri, 19 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-19 09:40:25 +0200 (Fri, 19 Aug 2016) $</i>
diff --git a/general/g.region/printwindow.c b/general/g.region/printwindow.c
index af80b94..cf2ef8c 100644
--- a/general/g.region/printwindow.c
+++ b/general/g.region/printwindow.c
@@ -83,23 +83,12 @@ void print_window(struct Cell_head *window, int print_flag)
 	prj = G_database_projection_name();
 	if (!prj)
 	    prj = "** unknown **";
-	/*
-	   please remove before GRASS 7 released
-	   backward compatibility issue
-
-	   if (print_flag & PRINT_SH)
-	   {
-	   fprintf(stdout, "projection=%d\n", window->proj);
-	   fprintf(stdout, "zone=%d\n", window->zone);
-	   }
-	   else
-	   {
-	   fprintf(stdout, "%-*s: %d (%s)\n", width, "projection", window->proj, prj);
-	   fprintf(stdout, "%-*s: %d\n", width, "zone", window->zone);
-	   }
-	 */
-
-	if (!(print_flag & PRINT_SH)) {
+
+	if (print_flag & PRINT_SH) {
+            fprintf(stdout, "projection=%d\n", window->proj);
+            fprintf(stdout, "zone=%d\n", window->zone);
+        }
+        else {
 	    fprintf(stdout, "%-*s %d (%s)\n", width, "projection:",
 		    window->proj, prj);
 	    fprintf(stdout, "%-*s %d\n", width, "zone:", window->zone);
diff --git a/general/g.remove/g.remove.html b/general/g.remove/g.remove.html
index 966f1ef..2484ddd 100644
--- a/general/g.remove/g.remove.html
+++ b/general/g.remove/g.remove.html
@@ -34,4 +34,4 @@ Huidae Cho<br>
 grass4u at gmail.com
 
 <p>
-<i>Last changed: $Date: 2014-12-19 21:07:19 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 21:06:05 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/general/g.remove/testsuite/test_g_remove.py b/general/g.remove/testsuite/test_g_remove.py
index e720ff8..c31c025 100644
--- a/general/g.remove/testsuite/test_g_remove.py
+++ b/general/g.remove/testsuite/test_g_remove.py
@@ -3,7 +3,8 @@
 # TODO: rmapcalc probably fatals, replace or add raise on error?
 from grass.script.raster import mapcalc as rmapcalc
 
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gutils import get_current_mapset
 from grass.gunittest.gmodules import SimpleModule
 
@@ -35,7 +36,7 @@ Removing raster <test_two>
 """
 
 
-class GMRemoveTest(grass.gunittest.TestCase):
+class GMRemoveTest(TestCase):
     """Test removing with g.remove"""
 
     @classmethod
@@ -92,7 +93,7 @@ class GMRemoveTest(grass.gunittest.TestCase):
                                  msg="4 maps should be removed")
 
 
-class GMRemoveWrongInputTest(grass.gunittest.TestCase):
+class GMRemoveWrongInputTest(TestCase):
     """Test wrong input of parameters for g.remove module"""
 
     def test_re_flags(self):
@@ -106,4 +107,4 @@ class GMRemoveWrongInputTest(grass.gunittest.TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/general/g.rename/g.rename.html b/general/g.rename/g.rename.html
index 81cc3d5..f8b18f3 100644
--- a/general/g.rename/g.rename.html
+++ b/general/g.rename/g.rename.html
@@ -6,7 +6,6 @@ specify all necessary information to <em>g.rename</em> on
 the command line, by specifying:  the type of data base
 element to be renamed (one or more of:  <b>raster</b>,
 <b>raster_3d</b>, <b>vector</b>, <b>icon</b>, <b>labels</b>,
-<!-- old_vector, ascii_vector -->
 <b>region</b>, and <b>group</b>); the specific file element
 in the current mapset to be renamed (<em>old</em>); and the
 new name to be assigned to this file element (<em>new</em>)
@@ -77,4 +76,4 @@ Michael Shapiro,
 U.S.Army Construction Engineering 
 Research Laboratory
 
-<p><i>Last changed: $Date: 2015-01-12 22:50:21 +0100 (Mon, 12 Jan 2015) $</i><p>
+<p><i>Last changed: $Date: 2015-01-08 19:37:47 +0100 (Thu, 08 Jan 2015) $</i><p>
diff --git a/general/g.rename/testsuite/test_overwrite.py b/general/g.rename/testsuite/test_overwrite.py
new file mode 100644
index 0000000..40396f1
--- /dev/null
+++ b/general/g.rename/testsuite/test_overwrite.py
@@ -0,0 +1,120 @@
+"""g.remove tests
+
+(C) 2013 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:author: Vaclav Petras
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+from grass.gunittest.gutils import is_map_in_mapset
+from grass.gunittest.checkers import (text_to_keyvalue, keyvalue_equals,
+                                      diff_keyvalue)
+
+
+class RasterRenameTestCase(TestCase):
+    """Test wrong input of parameters for g.list module"""
+
+    def setUp(self):
+        """Create maps in a small region.
+
+        The raster exists must be renewed for every test.
+        """
+        self.use_temp_region()
+        self.runModule("g.region", s=0, n=5, w=0, e=5, res=1)
+
+        self.runModule("r.mapcalc", expression="rename_1 = 1")
+        self.runModule("r.mapcalc", expression="rename_2 = 20")
+        self.runModule("r.mapcalc", expression="rename_3 = 300")
+        self.runModule("r.mapcalc", expression="exists = 50000")
+        self.to_remove = ['rename_1', 'rename_2', 'rename_3', 'exists']
+
+    def tearDown(self):
+        """Remove temporary region and renamed maps (and also old if needed)"""
+        self.runModule('g.remove', name=self.to_remove, type=['raster'], flags='f')
+        self.del_temp_region()
+
+    def test_raster(self):
+        """Test that raster rename works"""
+        module = SimpleModule('g.rename', raster=['rename_1', 'renamed_1'])
+        self.assertModule(module)
+        new_names = ['renamed_1']
+        self.to_remove.extend(new_names)
+        for name in new_names:
+            self.assertRasterExists(name)
+
+    def test_preserve_existing_raster(self):
+        """Test that existing raster is preserved"""
+        # TODO: write the same for other types
+        # TODO: create a general functions to avoid duplication
+        runivar = SimpleModule('r.univar', flags='g', map='exists')
+        self.runModule(runivar, expecting_stdout=True)
+        original_runivar = text_to_keyvalue(runivar.outputs.stdout,
+                                            sep='=', skip_empty=True)
+        module = SimpleModule('g.rename', raster=['rename_3', 'exists'], overwrite=False)
+        self.assertModule(module)
+        self.assertRasterExists('exists', msg="Destination (existing) map (to) should exist")
+        self.assertRasterExists('rename_3', msg="Source map (from) should exist")
+        runivar = SimpleModule('r.univar', flags='g', map='exists')
+        self.runModule(runivar, expecting_stdout=True)
+        new_runivar = text_to_keyvalue(runivar.outputs.stdout,
+                                       sep='=', skip_empty=True)
+        if not keyvalue_equals(dict_a=original_runivar, dict_b=new_runivar,
+                               precision=1e-7):
+            unused, missing, mismatch = diff_keyvalue(dict_a=original_runivar,
+                                                      dict_b=new_runivar,
+                                                      precision=1e-7)
+            if mismatch:
+                msg = "Raster map changed. It was probably overwritten.\n"
+                msg += "Difference between r.univar of maps:\n"
+                msg += "mismatch values"
+                msg += " (key, reference, actual): %s\n" % mismatch
+                self.fail(msg)
+
+    def test_overwrite_existing_raster(self):
+        """Test that existing raster is overriden if desired"""
+        runivar_source = SimpleModule('r.univar', flags='g', map='rename_3')
+        self.runModule(runivar_source, expecting_stdout=True)
+        original_runivar_source = text_to_keyvalue(runivar_source.outputs.stdout,
+                                                   sep='=', skip_empty=True)
+        runivar_target = SimpleModule('r.univar', flags='g', map='exists')
+        self.runModule(runivar_target, expecting_stdout=True)
+        original_runivar_target = text_to_keyvalue(runivar_target.outputs.stdout,
+                                                   sep='=', skip_empty=True)
+        module = SimpleModule('g.rename', raster=['rename_3', 'exists'], overwrite=True)
+        self.assertModule(module)
+        self.assertRasterExists('exists', msg="Destination (here: existing) map (to) should exist after rename")
+        self.assertFalse(is_map_in_mapset('rename_3', type='raster'),
+                         msg="Source map (from) should not exist after rename")
+
+        runivar = SimpleModule('r.univar', flags='g', map='exists')
+        self.runModule(runivar, expecting_stdout=True)
+        new_runivar = text_to_keyvalue(runivar.outputs.stdout,
+                                       sep='=', skip_empty=True)
+
+        # both these tests are probably redundant but let's test thoroughly
+        if keyvalue_equals(dict_a=original_runivar_target, dict_b=new_runivar,
+                           precision=1e-7):
+            msg = "Raster map did not change. It probably wasn't overwritten."
+            self.fail(msg)
+
+        if not keyvalue_equals(dict_a=original_runivar_source, dict_b=new_runivar,
+                               precision=1e-7):
+            unused, missing, mismatch = diff_keyvalue(dict_a=original_runivar_source,
+                                                      dict_b=new_runivar,
+                                                      precision=1e-7)
+            if mismatch:
+                msg = "Destination raster map is not the same as source."
+                msg += " It probably wasn't overwritten.\n"
+                msg += "Difference between r.univar of maps:\n"
+                msg += "mismatch values"
+                msg += " (key, reference, actual): %s\n" % mismatch
+                self.fail(msg)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/general/g.version/g.version.html b/general/g.version/g.version.html
index 71a06d9..ac27dd5 100644
--- a/general/g.version/g.version.html
+++ b/general/g.version/g.version.html
@@ -38,7 +38,7 @@ print gcore.version()
 <div class="code"><pre>
 g.version 
 
-GRASS 7.0.0RC2 (2015)
+GRASS 7.1.svn (2016)
 </pre></div>
 
 <h3>GIS Library info</h3>
@@ -46,22 +46,22 @@ GRASS 7.0.0RC2 (2015)
 <div class="code"><pre>
 g.version -r
 
-GRASS 7.0.0RC2 (2015)
-libgis Revision: 64007 
-libgis Date: 2015-01-08 20:08:36 +0100 (Thu, 08 Jan 2015) 
+GRASS 7.1.svn (2015)
+libgis Revision: 63930 
+libgis Date: 2015-01-02 12:22:21 +0100 (Fri, 02 Jan 2015)
 </pre></div>
 
 <h3>Full info in shell script style</h3>
 <div class="code"><pre>
 g.version -rge
 
-version=7.0.0RC2
+version=7.1.svn
 date=2015
-revision=64517M
-build_date=2015-01-12
+revision=64567
+build_date=2015-01-11
 build_platform=x86_64-unknown-linux-gnu
-libgis_revision=64007 
-libgis_date="2015-01-08 20:08:36 +0100 (Thu, 08 Jan 2015) "
+libgis_revision=63930 
+libgis_date="2015-01-02 12:22:21 +0100 (Fri, 02 Jan 2015) "
 proj4=4.8.0
 gdal=1.11.1
 geos=3.4.2
@@ -85,4 +85,4 @@ Research Laboratory<br>
 Extended info by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2015-02-12 15:27:21 +0100 (Thu, 12 Feb 2015) $</i>
+<i>Last changed: $Date: 2016-01-02 16:54:04 +0100 (Sat, 02 Jan 2016) $</i>
diff --git a/general/g.version/main.c b/general/g.version/main.c
index a31bed0..81ed6bc 100644
--- a/general/g.version/main.c
+++ b/general/g.version/main.c
@@ -8,7 +8,7 @@
 *               Extended info by Martin Landa <landa.martin gmail.com>
 * PURPOSE: 	Output GRASS version number, date and copyright message.
 *             
-* COPYRIGHT:  	(C) 2000-2013 by the GRASS Development Team
+* COPYRIGHT:  	(C) 2000-2015 by the GRASS Development Team
 *
 *   	    	This program is free software under the GPL (>=v2)
 *   	    	Read the file COPYING that comes with GRASS for details.
@@ -112,6 +112,7 @@ int main(int argc, char *argv[])
 	fprintf(stdout, "revision=%s\n", GRASS_VERSION_SVN);
 	fprintf(stdout, "build_date=%d-%02d-%02d\n", YEAR, MONTH, DAY);
 	fprintf(stdout, "build_platform=%s\n", ARCH);
+        fprintf(stdout, "build_off_t_size=%lu\n", sizeof(off_t));
     }
     else {
 	fprintf(stdout, "GRASS %s (%s)\n",
diff --git a/grasslib.dox b/grasslib.dox
index 2545159..6ea6f87 100644
--- a/grasslib.dox
+++ b/grasslib.dox
@@ -51,12 +51,7 @@ href="http://grass.osgeo.org">http://grass.osgeo.org</a>
  - gis: \ref gislib
  - raster: \ref rasterlib
  - vector: \ref vectorlib
- - Temporal GIS API: See http://grass.osgeo.org/grass71/manuals/libpython/temporal_framework.html
-
-\section interfaces Interfaces
-
- - Python script interface: \ref pythonlib
- - %PyGRASS: A Python based object oriented raster, vector library interface
+ - Temporal GIS API: See http://grass.osgeo.org/grass72/manuals/libpython/temporal_framework.html
 
 \section libs Further libraries
 
@@ -117,7 +112,7 @@ href="http://grass.osgeo.org">http://grass.osgeo.org</a>
 
 \subsection pythonlibs Python API
 
- - python:	See GRASS GIS Python library (http://grass.osgeo.org/grass71/manuals/libpython/)
+ - python:	See GRASS GIS Python library (http://grass.osgeo.org/grass72/manuals/libpython/)
 
 \subsection projlibs Projection Libraries
 
@@ -135,10 +130,6 @@ href="http://grass.osgeo.org">http://grass.osgeo.org</a>
  - manage:      \ref managelib
  - symbol:	\ref symbol (Drawing symbols for %point %vector data library)
 
-\section gui GUI
-
- - \ref wxpythonlib
-
 \section location File structure of GRASS Location
 
 A GRASS <b>raster map</b> consists of several files in several subdirectories in a mapset,
diff --git a/gui/icons/Makefile b/gui/icons/Makefile
index 6365ef5..d13aa50 100644
--- a/gui/icons/Makefile
+++ b/gui/icons/Makefile
@@ -21,37 +21,37 @@ default: $(ETCICONS) $(HTMLICONS)
 	$(MKDIR) $(ARCH_DISTDIR)/share/applications
 	$(INSTALL_DATA) grass.desktop $(ARCH_DISTDIR)/share/applications
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/8x8/apps
-	$(INSTALL_DATA) grass-8x8.png $(ARCH_DISTDIR)/share/icons/hicolor/8x8/apps/grass70.png
+	$(INSTALL_DATA) grass-8x8.png $(ARCH_DISTDIR)/share/icons/hicolor/8x8/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/16x16/apps
-	$(INSTALL_DATA) grass-16x16.png $(ARCH_DISTDIR)/share/icons/hicolor/16x16/apps/grass70.png
+	$(INSTALL_DATA) grass-16x16.png $(ARCH_DISTDIR)/share/icons/hicolor/16x16/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/22x22/apps
-	$(INSTALL_DATA) grass-22x22.png $(ARCH_DISTDIR)/share/icons/hicolor/22x22/apps/grass70.png
+	$(INSTALL_DATA) grass-22x22.png $(ARCH_DISTDIR)/share/icons/hicolor/22x22/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/24x24/apps
-	$(INSTALL_DATA) grass-24x24.png $(ARCH_DISTDIR)/share/icons/hicolor/24x24/apps/grass70.png
+	$(INSTALL_DATA) grass-24x24.png $(ARCH_DISTDIR)/share/icons/hicolor/24x24/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/32x32/apps
-	$(INSTALL_DATA) grass-32x32.png $(ARCH_DISTDIR)/share/icons/hicolor/32x32/apps/grass70.png
+	$(INSTALL_DATA) grass-32x32.png $(ARCH_DISTDIR)/share/icons/hicolor/32x32/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/36x36/apps
-	$(INSTALL_DATA) grass-36x36.png $(ARCH_DISTDIR)/share/icons/hicolor/36x36/apps/grass70.png
+	$(INSTALL_DATA) grass-36x36.png $(ARCH_DISTDIR)/share/icons/hicolor/36x36/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/40x40/apps
-	$(INSTALL_DATA) grass-40x40.png $(ARCH_DISTDIR)/share/icons/hicolor/40x40/apps/grass70.png
+	$(INSTALL_DATA) grass-40x40.png $(ARCH_DISTDIR)/share/icons/hicolor/40x40/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/42x42/apps
-	$(INSTALL_DATA) grass-42x42.png $(ARCH_DISTDIR)/share/icons/hicolor/42x42/apps/grass70.png
+	$(INSTALL_DATA) grass-42x42.png $(ARCH_DISTDIR)/share/icons/hicolor/42x42/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/48x48/apps
-	$(INSTALL_DATA) grass-48x48.png $(ARCH_DISTDIR)/share/icons/hicolor/48x48/apps/grass70.png
+	$(INSTALL_DATA) grass-48x48.png $(ARCH_DISTDIR)/share/icons/hicolor/48x48/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/64x64/apps
-	$(INSTALL_DATA) grass-64x64.png $(ARCH_DISTDIR)/share/icons/hicolor/64x64/apps/grass70.png
+	$(INSTALL_DATA) grass-64x64.png $(ARCH_DISTDIR)/share/icons/hicolor/64x64/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/72x72/apps
-	$(INSTALL_DATA) grass-72x72.png $(ARCH_DISTDIR)/share/icons/hicolor/72x72/apps/grass70.png
+	$(INSTALL_DATA) grass-72x72.png $(ARCH_DISTDIR)/share/icons/hicolor/72x72/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/80x80/apps
-	$(INSTALL_DATA) grass-80x80.png $(ARCH_DISTDIR)/share/icons/hicolor/80x80/apps/grass70.png
+	$(INSTALL_DATA) grass-80x80.png $(ARCH_DISTDIR)/share/icons/hicolor/80x80/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/96x96/apps
-	$(INSTALL_DATA) grass-96x96.png $(ARCH_DISTDIR)/share/icons/hicolor/96x96/apps/grass70.png
+	$(INSTALL_DATA) grass-96x96.png $(ARCH_DISTDIR)/share/icons/hicolor/96x96/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/128x128/apps
-	$(INSTALL_DATA) grass-128x128.png $(ARCH_DISTDIR)/share/icons/hicolor/128x128/apps/grass70.png
+	$(INSTALL_DATA) grass-128x128.png $(ARCH_DISTDIR)/share/icons/hicolor/128x128/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/192x192/apps
-	$(INSTALL_DATA) grass-192x192.png $(ARCH_DISTDIR)/share/icons/hicolor/192x192/apps/grass70.png
+	$(INSTALL_DATA) grass-192x192.png $(ARCH_DISTDIR)/share/icons/hicolor/192x192/apps/grass71.png
 	$(MKDIR) $(ARCH_DISTDIR)/share/icons/hicolor/scalable/apps
-	$(INSTALL_DATA) grass.svg $(ARCH_DISTDIR)/share/icons/hicolor/scalable/apps/grass70.svg
+	$(INSTALL_DATA) grass.svg $(ARCH_DISTDIR)/share/icons/hicolor/scalable/apps/grass71.svg
 	$(MKDIR) $(ARCH_DISTDIR)/share/appdata
 	$(INSTALL_DATA) grass.appdata.xml $(ARCH_DISTDIR)/share/appdata
 ### disable special 64bit icons (using different icons can be confusing for the user)
diff --git a/gui/icons/grass.desktop b/gui/icons/grass.desktop
index 155ec1d..580949a 100644
--- a/gui/icons/grass.desktop
+++ b/gui/icons/grass.desktop
@@ -48,8 +48,8 @@ Comment[tr]=Coğrafi bilgi sistemi
 Comment[uk]=Геоінформаційна система
 Comment[uz]=Geografik axborot tizimi
 Categories=Education;Science;Geoscience;Geography;
-Exec=grass70
-Icon=grass70
+Exec=grass72
+Icon=grass72
 Terminal=true
 URL=https://grass.osgeo.org/
 Keywords=gis;spatial;geospatial;database;remote sensing;hydrology;vector;raster;visualization;maps;wms;wfs;ogc;osgeo;
diff --git a/gui/icons/grass.ico b/gui/icons/grass.ico
index 7e09ec7..a0ac395 100644
Binary files a/gui/icons/grass.ico and b/gui/icons/grass.ico differ
diff --git a/gui/icons/grass/locked.png b/gui/icons/grass/locked.png
new file mode 100644
index 0000000..8325fc9
Binary files /dev/null and b/gui/icons/grass/locked.png differ
diff --git a/gui/icons/grass/python.png b/gui/icons/grass/python.png
new file mode 100644
index 0000000..c1b259b
Binary files /dev/null and b/gui/icons/grass/python.png differ
diff --git a/gui/icons/grass/select.png b/gui/icons/grass/select.png
new file mode 100644
index 0000000..75d1ded
Binary files /dev/null and b/gui/icons/grass/select.png differ
diff --git a/gui/icons/grass/unlocked.png b/gui/icons/grass/unlocked.png
new file mode 100644
index 0000000..c2d0850
Binary files /dev/null and b/gui/icons/grass/unlocked.png differ
diff --git a/gui/icons/grass_osgeo.ico b/gui/icons/grass_osgeo.ico
index 50e7f45..c22f5ea 100644
Binary files a/gui/icons/grass_osgeo.ico and b/gui/icons/grass_osgeo.ico differ
diff --git a/gui/images/Makefile b/gui/images/Makefile
index b821583..72e0811 100644
--- a/gui/images/Makefile
+++ b/gui/images/Makefile
@@ -9,7 +9,7 @@ IMGSRC := $(wildcard *.png)
 IMGDST := $(patsubst %,$(DSTDIR)/%,$(IMGSRC))
 
 # symbols
-CATEGORIES = basic demo extra geology n_arrows
+CATEGORIES = basic demo extra geology legend n_arrows
 SYMSRC := $(foreach dir,$(CATEGORIES),$(wildcard symbols/$(dir)/*.png))
 SYMDST := $(patsubst symbols/%,$(DSTDIR)/symbols/%,$(SYMSRC))
 
diff --git a/gui/images/grass_world3-nq8.png b/gui/images/grass_world3-nq8.png
new file mode 100644
index 0000000..b7c1f4e
Binary files /dev/null and b/gui/images/grass_world3-nq8.png differ
diff --git a/gui/images/splash_screen.png b/gui/images/splash_screen.png
index c11492d..7704a67 100644
Binary files a/gui/images/splash_screen.png and b/gui/images/splash_screen.png differ
diff --git a/gui/images/splash_screen.svg b/gui/images/splash_screen.svg
new file mode 100644
index 0000000..ae4c73f
--- /dev/null
+++ b/gui/images/splash_screen.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"
+   width="210mm"
+   height="297mm"
+   id="svg4066"
+   version="1.1"
+   inkscape:version="0.48.5 r10040"
+   enable-background="new"
+   sodipodi:docname="splash_screen.svg"
+   inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/splash_20160115.png"
+   inkscape:export-xdpi="90.028885"
+   inkscape:export-ydpi="90.028885">
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="0.69267358"
+     inkscape:cx="163.78669"
+     inkscape:cy="500.82737"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:window-width="1680"
+     inkscape:window-height="1010"
+     inkscape:window-x="0"
+     inkscape:window-y="22"
+     inkscape:window-maximized="1" />
+  <defs
+     id="defs4068">
+    <filter
+       height="13.121305"
+       y="-6.0606526"
+       width="1.2554916"
+       x="-0.12774582"
+       id="filter5039"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5041"
+         stdDeviation="1.9092213"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       height="13.176738"
+       y="-6.0883688"
+       width="1.0160388"
+       x="-0.0080193879"
+       id="filter5043"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5045"
+         stdDeviation="1.9092213"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       height="1.2021172"
+       y="-0.10105858"
+       width="1.0751529"
+       x="-0.037576453"
+       id="filter5063"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5065"
+         stdDeviation="0.72740597"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       id="filter5067"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5069"
+         stdDeviation="0.72740597"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       id="filter5115"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5117"
+         stdDeviation="1.5505993"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       id="filter5119"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5121"
+         stdDeviation="1.5505993"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       id="filter5123"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5125"
+         stdDeviation="1.5505993"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       height="1.5578844"
+       y="-0.27894222"
+       width="1.0250789"
+       x="-0.012539443"
+       id="filter5143"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5145"
+         stdDeviation="2.4393497"
+         inkscape:collect="always" />
+    </filter>
+    <filter
+       height="10.06153"
+       y="-4.5307652"
+       width="1.0144229"
+       x="-0.00721146"
+       id="filter5163"
+       inkscape:collect="always">
+      <feGaussianBlur
+         id="feGaussianBlur5165"
+         stdDeviation="2.3597735"
+         inkscape:collect="always" />
+    </filter>
+  </defs>
+  <metadata
+     id="metadata4071">
+    <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
+     style="display:inline"
+     inkscape:label="bg_image"
+     id="layer2"
+     inkscape:groupmode="layer"
+     sodipodi:insensitive="true">
+    <image
+       sodipodi:absref="/home/vincent/Documents/developpement/grass/splash_startup_20160522/grass_world3-nq8.png"
+       xlink:href="grass_world3-nq8.png"
+       y="346.80118"
+       x="53.149597"
+       id="image3209"
+       height="358.75983"
+       width="637.79529" />
+  </g>
+  <g
+     style="display:inline"
+     inkscape:label="g_shadows"
+     id="layer3"
+     inkscape:groupmode="layer"
+     sodipodi:insensitive="true">
+    <g
+       style="display:inline"
+       inkscape:label="uppercase#1"
+       id="layer7"
+       inkscape:groupmode="layer">
+      <g
+         style="display:inline;filter:url(#filter5067)"
+         id="g3214"
+         transform="matrix(3.696735,0,0,3.696735,-839.08456,-1659.3059)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bw_bg.png"
+         inkscape:export-xdpi="600"
+         inkscape:export-ydpi="600">
+        <flowRoot
+           transform="matrix(0.78531774,0,0,0.78531774,56.306031,438.46065)"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans"
+           id="flowRoot3216"
+           xml:space="preserve"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           inkscape:export-xdpi="600"
+           inkscape:export-ydpi="600"><flowRegion
+             id="flowRegion3218"><rect
+               style="font-size:21.99999809px;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;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans"
+               y="134.13319"
+               x="358.83777"
+               height="26.105526"
+               width="89.535889"
+               id="rect3220" /></flowRegion><flowPara
+             id="flowPara3222"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Medium">G<flowSpan
+   id="flowSpan3224"
+   style="letter-spacing:0px;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">RASS</flowSpan></flowPara></flowRoot>        <flowRoot
+           xml:space="preserve"
+           id="flowRoot3226"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+           transform="matrix(0.78531774,0,0,0.78531774,106.84321,438.46065)"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           inkscape:export-xdpi="600"
+           inkscape:export-ydpi="600"><flowRegion
+             id="flowRegion3228"><rect
+               id="rect3230"
+               width="89.535889"
+               height="26.105526"
+               x="358.83777"
+               y="134.13319"
+               style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin" /></flowRegion><flowPara
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+             id="flowPara3232">GIS</flowPara></flowRoot>      </g>
+    </g>
+    <g
+       style="display:none"
+       inkscape:label="lowercase#1"
+       id="layer6"
+       inkscape:groupmode="layer">
+      <flowRoot
+         transform="matrix(3.3717264,0,0,3.3717264,-793.81579,-113.04672)"
+         style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter5063);font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+         id="flowRoot4917"
+         xml:space="preserve"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-ydpi="84.666664"><flowRegion
+           id="flowRegion4919"><rect
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+             y="134.13319"
+             x="358.83777"
+             height="26.105526"
+             width="89.535889"
+             id="rect4921" /></flowRegion><flowPara
+           id="flowPara4923"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"><flowSpan
+             id="flowSpan4925"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Light">grass</flowSpan></flowPara></flowRoot>      <flowRoot
+         xml:space="preserve"
+         id="flowRoot4939"
+         style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.48194894;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter5067);font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+         transform="matrix(3.3717264,0,0,3.3717264,-613.74757,-113.04672)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-ydpi="84.666664"><flowRegion
+           id="flowRegion4941"><rect
+             id="rect4943"
+             width="89.535889"
+             height="26.105526"
+             x="358.83777"
+             y="134.13319"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.48194894;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin" /></flowRegion><flowPara
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.48194894;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+           id="flowPara4945"><flowSpan
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.48194894;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+             id="flowSpan4947">gis</flowSpan><flowSpan
+             id="flowSpan4949"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.48194894;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin" /></flowPara></flowRoot>    </g>
+  </g>
+  <g
+     style="display:inline"
+     id="layer1"
+     inkscape:groupmode="layer"
+     inkscape:label="grassgis"
+     sodipodi:insensitive="true">
+    <g
+       style="display:inline"
+       inkscape:label="uppercase"
+       id="layer4"
+       inkscape:groupmode="layer">
+      <g
+         inkscape:export-ydpi="600"
+         inkscape:export-xdpi="600"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bw_bg.png"
+         transform="matrix(3.696735,0,0,3.696735,-839.08456,-1659.3059)"
+         id="g4549"
+         style="display:inline">
+        <flowRoot
+           inkscape:export-ydpi="600"
+           inkscape:export-xdpi="600"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           xml:space="preserve"
+           id="flowRoot5356"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans"
+           transform="matrix(0.78531774,0,0,0.78531774,56.306031,438.46065)"><flowRegion
+             id="flowRegion5358"><rect
+               id="rect5360"
+               width="89.535889"
+               height="26.105526"
+               x="358.83777"
+               y="134.13319"
+               style="font-size:21.99999809px;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:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans" /></flowRegion><flowPara
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Medium"
+             id="flowPara5362">G<flowSpan
+   style="letter-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+   id="flowSpan4547">RASS</flowSpan></flowPara></flowRoot>        <flowRoot
+           inkscape:export-ydpi="600"
+           inkscape:export-xdpi="600"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           transform="matrix(0.78531774,0,0,0.78531774,106.84321,438.46065)"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+           id="flowRoot6517"
+           xml:space="preserve"><flowRegion
+             id="flowRegion6519"><rect
+               style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+               y="134.13319"
+               x="358.83777"
+               height="26.105526"
+               width="89.535889"
+               id="rect6521" /></flowRegion><flowPara
+             id="flowPara6523"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin">GIS</flowPara></flowRoot>      </g>
+    </g>
+    <g
+       style="display:none"
+       inkscape:label="lowercase"
+       id="layer5"
+       inkscape:groupmode="layer">
+      <flowRoot
+         inkscape:export-ydpi="84.666664"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         xml:space="preserve"
+         id="flowRoot6479"
+         style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter5386);font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+         transform="matrix(3.3717264,0,0,3.3717264,-793.81579,-113.04672)"><flowRegion
+           id="flowRegion6481"><rect
+             id="rect6483"
+             width="89.535889"
+             height="26.105526"
+             x="358.83777"
+             y="134.13319"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin" /></flowRegion><flowPara
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+           id="flowPara6485"><flowSpan
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.44487596;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Light"
+             id="flowSpan6487">grass</flowSpan></flowPara></flowRoot>      <flowRoot
+         inkscape:export-ydpi="84.666664"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         transform="matrix(3.3717264,0,0,3.3717264,-613.74757,-113.04672)"
+         style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.33365697;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter5386);font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+         id="flowRoot6501"
+         xml:space="preserve"><flowRegion
+           id="flowRegion6503"><rect
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.33365697;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+             y="134.13319"
+             x="358.83777"
+             height="26.105526"
+             width="89.535889"
+             id="rect6505" /></flowRegion><flowPara
+           id="flowPara6507"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.33365697;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"><flowSpan
+             id="flowSpan6509"
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.33365697;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin">gis</flowSpan><flowSpan
+             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:#ffffff;stroke-width:0.33365697;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+             id="flowSpan6511" /></flowPara></flowRoot>      <path
+         inkscape:export-ydpi="84.666664"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibili [...]
+         d="m 64.125,356.28125 a 0.37629983,0.37629983 0 1 0 0.0625,0.75 l 570.59375,0 a 0.3750375,0.3750375 0 1 0 0,-0.75 l -570.59375,0 a 0.3750375,0.3750375 0 0 0 -0.0625,0 z"
+         id="path4935"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="84.666664"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.5;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibili [...]
+         d="m 643.75,356.28125 a 0.37791833,0.37791833 0 1 0 0.0937,0.75 l 35.0625,0 a 0.3750375,0.3750375 0 1 0 0,-0.75 l -35.0625,0 a 0.3750375,0.3750375 0 0 0 -0.0937,0 z"
+         id="path4937"
+         inkscape:connector-curvature="0" />
+      <path
+         inkscape:export-ydpi="84.666664"
+         inkscape:export-xdpi="84.666664"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+         inkscape:connector-curvature="0"
+         id="path6499"
+         d="m 643.75,356.28125 a 0.37791833,0.37791833 0 1 0 0.0937,0.75 l 35.0625,0 a 0.3750375,0.3750375 0 1 0 0,-0.75 l -35.0625,0 a 0.3750375,0.3750375 0 0 0 -0.0937,0 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter [...]
+    </g>
+  </g>
+  <g
+     style="display:inline"
+     inkscape:label="f_shadows"
+     id="layer9"
+     inkscape:groupmode="layer"
+     sodipodi:insensitive="true">
+    <path
+       sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
+       inkscape:connector-curvature="0"
+       style="fill:#000000;fill-opacity:1;stroke:none;display:inline;filter:url(#filter5115)"
+       d="m 145.18268,677.37468 3.28989,3.33906 1.12206,-1.20423 -2.00565,-14.94405 0.1704,-2.41311 1.02372,-3.60744 1.07247,-3.315 1.17,-2.60808 3.80247,6.38619 3.70497,6.7518 0.82263,3.96243 5.17047,-5.07303 2.61114,-19.6323 5.4843,-26.56848 3.53436,-18.03732 7.16616,-14.21046 1.0725,-2.94936 0.39,-1.73058 0.1461,-2.80311 -0.43875,-2.24247 -1.02375,-2.02311 -1.87686,-1.87686 0.0975,0.51189 0.92622,0.95061 0.85314,1.99872 0.0975,1.60872 -1.17,3.21747 -1.51122,3.46122 -3.24186,5.82558 1. [...]
+       id="path4905"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-ydpi="84.666664" />
+    <path
+       id="path4907"
+       d="m 90.34166,627.91545 -2.33997,2.33997 17.57421,17.57418 -2.31561,2.31561 17.54982,17.54982 -2.33997,2.33997 30.00531,30.00531 30.0297,-30.00531 -2.34,-2.33997 17.54982,-17.54982 -2.31561,-2.31561 17.57421,-17.57418 -2.34,-2.33997 -58.15812,58.13376 -58.13379,-58.13376 z"
+       style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5119);enable-background:accumulate"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-ydpi="84.666664" />
+    <path
+       id="path4909"
+       d="m 148.47545,535.6083 -72.83175,72.85611 72.83175,72.85611 72.85611,-72.85611 -72.85611,-72.85611 z m 0,1.29186 71.56422,71.56425 -71.56422,71.56422 -71.56425,-71.56422 71.56425,-71.56425 z"
+       style="color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.25;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5123);enable-background:accumulate"
+       inkscape:connector-curvature="0"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-ydpi="84.666664" />
+    <g
+       transform="matrix(0.77999175,0,0,0.77999175,67.74917,530.27022)"
+       id="g4911"
+       style="fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.6410324;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter5163)"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-ydpi="84.666664">
+      <path
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.6410324;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;vi [...]
+         d="m -1.2824118,210.40625 0,1.25 92.4699118,0 0,-1.25 z"
+         id="path4913"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccc" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4915"
+         d="m 115.83638,210.40625 0,1.25 668.22239,0 0,-1.25 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.6410324;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker:none;vi [...]
+         sodipodi:nodetypes="ccccc" />
+    </g>
+    <flowRoot
+       xml:space="preserve"
+       id="flowRoot4927"
+       style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.66477138;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;display:inline;filter:url(#filter5143);font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
+       transform="matrix(0.94017285,0,0,0.94017285,-16.82974,183.62613)"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-ydpi="84.666664"><flowRegion
+         id="flowRegion4929"><rect
+           id="rect4931"
+           width="472.69949"
+           height="27.879639"
+           x="268.00415"
+           y="258.24249"
+           style="font-size:22px;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:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.66477138;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:EB Garamond;-inkscape-font-specification:EB Garamond" /></flowRegion><flowPara
+         id="flowPara4933">Bringing advanced geospatial technologies to the world</flowPara></flowRoot>  </g>
+  <g
+     style="display:inline"
+     inkscape:label="features"
+     id="layer8"
+     inkscape:groupmode="layer"
+     sodipodi:insensitive="true">
+    <path
+       inkscape:export-ydpi="84.666664"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       id="path6467"
+       d="m 145.18268,677.37468 3.28989,3.33906 1.12206,-1.20423 -2.00565,-14.94405 0.1704,-2.41311 1.02372,-3.60744 1.07247,-3.315 1.17,-2.60808 3.80247,6.38619 3.70497,6.7518 0.82263,3.96243 5.17047,-5.07303 2.61114,-19.6323 5.4843,-26.56848 3.53436,-18.03732 7.16616,-14.21046 1.0725,-2.94936 0.39,-1.73058 0.1461,-2.80311 -0.43875,-2.24247 -1.02375,-2.02311 -1.87686,-1.87686 0.0975,0.51189 0.92622,0.95061 0.85314,1.99872 0.0975,1.60872 -1.17,3.21747 -1.51122,3.46122 -3.24186,5.82558 1. [...]
+       style="fill:#ffffff;fill-opacity:1;stroke:none;display:inline;filter:url(#filter5386)"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+    <path
+       inkscape:export-ydpi="84.666664"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:connector-curvature="0"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.82688445;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5386);enable-background:accumulate"
+       d="m 90.34166,627.91545 -2.33997,2.33997 17.57421,17.57418 -2.31561,2.31561 17.54982,17.54982 -2.33997,2.33997 30.00531,30.00531 30.0297,-30.00531 -2.34,-2.33997 17.54982,-17.54982 -2.31561,-2.31561 17.57421,-17.57418 -2.34,-2.33997 -58.15812,58.13376 -58.13379,-58.13376 z"
+       id="path6469" />
+    <path
+       inkscape:export-ydpi="84.666664"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:connector-curvature="0"
+       style="color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter5386);enable-background:accumulate"
+       d="m 148.47545,535.6083 -72.83175,72.85611 72.83175,72.85611 72.85611,-72.85611 -72.85611,-72.85611 z m 0,1.29186 71.56422,71.56425 -71.56422,71.56422 -71.56425,-71.56422 71.56425,-71.56425 z"
+       id="path6471" />
+    <g
+       inkscape:export-ydpi="84.666664"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       style="fill:#ffffff;fill-opacity:1;display:inline;filter:url(#filter5386)"
+       id="g6473"
+       transform="matrix(0.77999175,0,0,0.77999175,67.74917,530.27022)">
+      <path
+         sodipodi:nodetypes="ccccc"
+         inkscape:connector-curvature="0"
+         id="path6475"
+         d="m -1.2824118,210.40625 0,1.25 92.4699118,0 0,-1.25 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background: [...]
+      <path
+         sodipodi:nodetypes="ccccc"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background: [...]
+         d="m 115.83638,210.40625 0,1.25 668.22239,0 0,-1.25 z"
+         id="path6477"
+         inkscape:connector-curvature="0" />
+    </g>
+    <flowRoot
+       inkscape:export-ydpi="84.666664"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       transform="matrix(0.94017285,0,0,0.94017285,-16.82974,183.62613)"
+       style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#ffffff;fill-opacity:1;stroke:none;display:inline;filter:url(#filter5386);font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
+       id="flowRoot6489"
+       xml:space="preserve"><flowRegion
+         id="flowRegion6491"><rect
+           style="font-size:22px;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:#ffffff;fill-opacity:1;font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
+           y="258.24249"
+           x="268.00415"
+           height="27.879639"
+           width="472.69949"
+           id="rect6493" /></flowRegion><flowPara
+         id="flowPara6495">Bringing advanced geospatial technologies to the world</flowPara></flowRoot>    <path
+       sodipodi:nodetypes="cccccc"
+       inkscape:export-ydpi="84.666664"
+       inkscape:export-xdpi="84.666664"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/splash_final/synthese.png"
+       inkscape:connector-curvature="0"
+       id="path6497"
+       d="m 64.125,356.05921 c -0.422628,0.0428 -0.355386,1.01361 0.0673,0.97166 l 614.446,0 c 0.42669,0.007 0.42669,-0.97892 0,-0.97166 l -613.255287,0 c -0.02238,-0.002 -1.235632,-0.002 -1.258013,0 z"
+       style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#ffffff;fill-opacity:1;stroke:none;stroke-width:0.75;marker:none;visibility:visible;display:inline;overflow:visible;filter:url(#filter53 [...]
+  </g>
+</svg>
diff --git a/gui/images/startup_banner.png b/gui/images/startup_banner.png
index 0b62ad9..f144e88 100644
Binary files a/gui/images/startup_banner.png and b/gui/images/startup_banner.png differ
diff --git a/gui/images/startup_banner.svg b/gui/images/startup_banner.svg
index 5f7582d..50c43b1 100644
--- a/gui/images/startup_banner.svg
+++ b/gui/images/startup_banner.svg
@@ -7,15 +7,16 @@
    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="618"
    height="150"
    id="svg3935"
    version="1.1"
-   inkscape:version="0.48.3.1 r9886"
-   sodipodi:docname="startup_banner.svg"
-   inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_final.png"
+   inkscape:version="0.48.5 r10040"
+   sodipodi:docname="welcome_20160522.svg"
+   inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_final_bw.png"
    inkscape:export-xdpi="90"
    inkscape:export-ydpi="90">
   <title
@@ -29,9 +30,9 @@
      borderopacity="1.0"
      inkscape:pageopacity="0.0"
      inkscape:pageshadow="2"
-     inkscape:zoom="0.47134823"
-     inkscape:cx="281.23461"
-     inkscape:cy="53.118309"
+     inkscape:zoom="1.7495381"
+     inkscape:cx="319.09419"
+     inkscape:cy="63.13336"
      inkscape:document-units="pt"
      inkscape:current-layer="g3247"
      showgrid="false"
@@ -72,7 +73,7 @@
         </dc:creator>
         <dc:rights>
           <cc:Agent>
-            <dc:title></dc:title>
+            <dc:title />
           </cc:Agent>
         </dc:rights>
         <cc:license
@@ -90,46 +91,48 @@
     </rdf:RDF>
   </metadata>
   <g
-     inkscape:label="Calque 1"
      inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-63.047241,-451.18109)">
+     id="layer2"
+     inkscape:label="bg"
+     style="display:inline">
     <g
-       id="g3247"
-       transform="translate(3.0472412,-1.1810913)">
+       style="display:inline"
+       transform="translate(-60,-452.36218)"
+       id="g3379"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
       <rect
-         inkscape:export-ydpi="90"
-         inkscape:export-xdpi="90"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
-         ry="3"
-         rx="3"
-         y="452.36218"
-         x="60"
-         height="150"
+         style="color:#000000;fill:none;stroke:none;stroke-width:0.375;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+         id="rect3381"
          width="618"
-         id="rect3018"
-         style="color:#000000;fill:none;stroke:none;stroke-width:0.375;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate" />
-      <flowRoot
-         transform="matrix(5.1115521,0,0,5.1115521,-1290.1707,-249.1442)"
-         style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.08515976;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
-         id="flowRoot4198"
-         xml:space="preserve"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
+         height="150"
+         x="60"
+         y="452.36218"
+         rx="3"
+         ry="3"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_20160120.png"
          inkscape:export-xdpi="90"
-         inkscape:export-ydpi="90"><flowRegion
-           id="flowRegion4200"><rect
-             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.08515976;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
-             y="134.13319"
-             x="358.83777"
-             height="25.127253"
-             width="78.635094"
-             id="rect4202" /></flowRegion><flowPara
-           id="flowPara4204"
-           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:200;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.08515976;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Ultra-Light">gis</flowPara></flowRoot>      <g
+         inkscape:export-ydpi="90" />
+    </g>
+  </g>
+  <g
+     inkscape:label="startup_banner"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-63.047241,-451.18109)"
+     style="display:none">
+    <g
+       id="g3247"
+       transform="translate(3.0472412,-1.1810913)"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <g
          inkscape:export-ydpi="90"
          inkscape:export-xdpi="90"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
-         transform="matrix(0.97109808,0,0,0.97109808,4.3205013,10.711431)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
+         transform="matrix(0.97120945,0,0,0.97120945,-7.3587784,10.80061)"
          id="g3798">
         <path
            sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"
@@ -151,84 +154,268 @@
       <g
          inkscape:export-ydpi="90"
          inkscape:export-xdpi="90"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
          style="display:inline"
          id="g4936"
-         transform="matrix(0.66092044,0,0,0.66092044,68.760029,453.30039)">
+         transform="matrix(0.66092044,0,0,0.66092044,68.760029,452.46235)">
         <path
            sodipodi:nodetypes="ccccc"
            inkscape:connector-curvature="0"
            id="path4938"
-           d="m 1.8761268,210.40625 0,1.25 89.2694442,0 0,-1.25 z"
-           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
+           d="m 1.8761268,210.40625 0,1.25 72.3843182,0 0,-1.25 z"
+           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_20160120.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
         <path
            sodipodi:nodetypes="ccccc"
            style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
-           d="m 116.86728,210.40625 0,1.25 791.32066,0 0,-1.25 z"
+           d="m 99.043193,210.40625 0,1.25 809.144747,0 0,-1.25 z"
            id="path4940"
-           inkscape:connector-curvature="0" />
+           inkscape:connector-curvature="0"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_20160120.png"
+           inkscape:export-xdpi="90"
+           inkscape:export-ydpi="90" />
       </g>
+      <path
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background: [...]
+         d="m 70,462.36218 0,0.82615 48.65113,0 0,-0.82615 z"
+         id="path4938-0"
+         inkscape:connector-curvature="0"
+         sodipodi:nodetypes="ccccc"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <path
+         inkscape:connector-curvature="0"
+         id="path4940-1"
+         d="m 133.19717,462.36218 0,0.82615 535.69461,0 0,-0.82615 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background: [...]
+         sodipodi:nodetypes="ccccc"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
       <g
          inkscape:export-ydpi="90"
          inkscape:export-xdpi="90"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
-         style="display:inline"
-         id="g4936-4"
-         transform="matrix(0.66092044,0,0,0.66092044,68.760029,323.30039)">
-        <path
-           sodipodi:nodetypes="ccccc"
-           inkscape:connector-curvature="0"
-           id="path4938-0"
-           d="m 1.8761268,210.40625 0,1.25 90.7824862,0 0,-1.25 z"
-           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
-        <path
-           sodipodi:nodetypes="ccccc"
-           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
-           d="m 115.35423,210.40625 0,1.25 695.99906,0 0,-1.25 z"
-           id="path4940-1"
-           inkscape:connector-curvature="0" />
-        <path
-           inkscape:connector-curvature="0"
-           id="path4936"
-           d="m 826.4837,210.40625 0,1.25 81.72792,0 0,-1.25 z"
-           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
-           sodipodi:nodetypes="ccccc" />
-      </g>
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
+         transform="matrix(5.2456976,0,0,5.2456976,-1476.5023,-2402.3805)"
+         id="g4549"
+         style="display:inline">
+        <flowRoot
+           inkscape:export-ydpi="600"
+           inkscape:export-xdpi="600"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           xml:space="preserve"
+           id="flowRoot5356"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans"
+           transform="matrix(0.78531774,0,0,0.78531774,56.306031,438.46065)"><flowRegion
+             id="flowRegion5358"><rect
+               id="rect5360"
+               width="89.535889"
+               height="26.105526"
+               x="358.83777"
+               y="134.13319"
+               style="font-size:21.99999809px;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:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans" /></flowRegion><flowPara
+             style="font-size:21.84710312px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;fill:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Medium"
+             id="flowPara5362">G<flowSpan
+   style="font-size:21.84710312px;letter-spacing:0px;fill:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
+   id="flowSpan4547">RASS</flowSpan></flowPara></flowRoot>        <flowRoot
+           inkscape:export-ydpi="600"
+           inkscape:export-xdpi="600"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           transform="matrix(0.78531774,0,0,0.78531774,106.84321,438.46065)"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+           id="flowRoot6517"
+           xml:space="preserve"><flowRegion
+             id="flowRegion6519"><rect
+               style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+               y="134.13319"
+               x="358.83777"
+               height="26.105526"
+               width="89.535889"
+               id="rect6521" /></flowRegion><flowPara
+             id="flowPara6523"
+             style="font-size:21.84710312px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin">GIS</flowPara></flowRoot>      </g>
       <flowRoot
          inkscape:export-ydpi="90"
          inkscape:export-xdpi="90"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
-         transform="matrix(1.0113555,0,0,1.0113555,-75.021989,300.84989)"
-         style="font-size:22px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner.png"
+         transform="matrix(1.0129523,0,0,1.0129523,-70.250527,301.89423)"
+         style="font-size:21.71869278px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
          id="flowRoot4942"
          xml:space="preserve"><flowRegion
            id="flowRegion4944"><rect
-             style="font-size:22px;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;font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
+             style="font-size:21.71869278px;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;font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
              y="258.24249"
              x="268.00415"
              height="27.879639"
              width="472.69949"
              id="rect4946" /></flowRegion><flowPara
-           id="flowPara4948">Bringing advanced geospatial technologies to the world</flowPara></flowRoot>      <flowRoot
+           id="flowPara4948">Bringing advanced geospatial technologies to the world</flowPara></flowRoot>    </g>
+  </g>
+  <g
+     style="display:inline"
+     transform="translate(-63.047241,-451.18109)"
+     id="g4266"
+     inkscape:groupmode="layer"
+     inkscape:label="startup_banner_isis">
+    <g
+       transform="translate(3.0472412,-1.1810913)"
+       id="g4268"
+       inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90">
+      <image
+         y="466.82547"
+         x="354.39938"
+         id="image3237"
+         xlink:href="file:///home/vincent/Documents/developpement/grass/grass_splash/welcome_final/isis_fade_alpha.png"
+         height="92.029091"
+         width="314.43271"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90" />
+      <g
+         id="g4272"
+         transform="matrix(0.97120945,0,0,0.97120945,-7.3587784,10.80061)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90">
+        <path
+           id="path4274"
+           d="m 134.37279,582.48696 2.78764,2.82933 0.95078,-1.02041 -1.69948,-12.66273 0.14458,-2.04472 0.86745,-3.05676 0.90877,-2.80891 0.99138,-2.20995 3.22199,5.41128 3.13937,5.72109 0.69707,3.35753 4.38114,-4.29856 2.21253,-16.63532 4.6471,-22.5126 2.9948,-15.28378 6.0722,-12.04114 0.90877,-2.49911 0.33046,-1.46642 0.12392,-2.37518 -0.37177,-1.90015 -0.86745,-1.71426 -1.59034,-1.59034 0.0826,0.43373 0.78484,0.8055 0.72289,1.69361 0.0826,1.36315 -0.99138,2.72629 -1.28053,2.93284 -2. [...]
+           style="fill:#009000;stroke:none;display:inline"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
+        <path
+           inkscape:connector-curvature="0"
+           style="color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.82688445;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           d="m 87.903645,540.57803 -1.982761,1.98276 14.891366,14.89136 -1.96211,1.96211 14.87071,14.87071 -1.98276,1.98276 25.42478,25.42478 25.44544,-25.42478 -1.98276,-1.98276 14.87071,-14.87071 -1.96211,-1.96211 14.89136,-14.89136 -1.98276,-1.98276 -49.27988,49.25922 -49.259225,-49.25922 z"
+           id="path4276" />
+        <path
+           inkscape:connector-curvature="0"
+           style="color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:0.80000001;marker:none;visibility:visible;display:inline;overflow:visible;enable-background:accumulate"
+           d="m 137.16287,462.36222 -61.713444,61.7341 61.713444,61.7341 61.7341,-61.7341 -61.7341,-61.7341 z m 0,1.09465 60.63945,60.63945 -60.63945,60.63945 -60.639448,-60.63945 60.639448,-60.63945 z"
+           id="path4278" />
+      </g>
+      <g
+         transform="matrix(0.66092044,0,0,0.66092044,68.760029,452.46235)"
+         id="g4280"
+         style="display:inline"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90">
+        <path
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_20160120.png"
+           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
+           d="m 1.8761268,210.40625 0,1.25 72.3843182,0 0,-1.25 z"
+           id="path4282"
+           inkscape:connector-curvature="0"
+           sodipodi:nodetypes="ccccc" />
+        <path
+           inkscape:export-ydpi="90"
+           inkscape:export-xdpi="90"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/welcome_20160120.png"
+           inkscape:connector-curvature="0"
+           id="path4284"
+           d="m 99.043193,210.40625 0,1.25 809.144747,0 0,-1.25 z"
+           style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-backgroun [...]
+           sodipodi:nodetypes="ccccc" />
+      </g>
+      <path
+         inkscape:export-ydpi="90"
+         inkscape:export-xdpi="90"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         sodipodi:nodetypes="ccccc"
+         inkscape:connector-curvature="0"
+         id="path4286"
+         d="m 70,462.36218 0,0.82615 48.65113,0 0,-0.82615 z"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background: [...]
+      <path
          inkscape:export-ydpi="90"
          inkscape:export-xdpi="90"
-         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/banner_3.png"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         sodipodi:nodetypes="ccccc"
+         style="font-size:medium;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-indent:0;text-align:start;text-decoration:none;line-height:normal;letter-spacing:normal;word-spacing:normal;text-transform:none;direction:ltr;block-progression:tb;writing-mode:lr-tb;text-anchor:start;baseline-shift:baseline;color:#000000;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1.25;marker:none;visibility:visible;display:inline;overflow:visible;enable-background: [...]
+         d="m 133.19717,462.36218 0,0.82615 535.69461,0 0,-0.82615 z"
+         id="path4288"
+         inkscape:connector-curvature="0" />
+      <g
+         style="display:inline"
+         id="g4290"
+         transform="matrix(3.9646729,0,0,3.9646729,-1147.2737,-1700.8424)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90">
+        <flowRoot
+           transform="matrix(0.78531774,0,0,0.78531774,56.306031,438.46065)"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans"
+           id="flowRoot4292"
+           xml:space="preserve"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           inkscape:export-xdpi="600"
+           inkscape:export-ydpi="600"><flowRegion
+             id="flowRegion4294"><rect
+               style="font-size:21.99999809px;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:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans"
+               y="134.13319"
+               x="358.83777"
+               height="26.105526"
+               width="89.535889"
+               id="rect4296" /></flowRegion><flowPara
+             id="flowPara4298"
+             style="font-size:21.84710312px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;fill:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Medium">G<flowSpan
+   id="flowSpan4300"
+   style="font-size:21.84710312px;letter-spacing:0px;fill:#009000;fill-opacity:1;stroke:#008f00;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none">RASS</flowSpan></flowPara></flowRoot>        <flowRoot
+           xml:space="preserve"
+           id="flowRoot4302"
+           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+           transform="matrix(0.78531774,0,0,0.78531774,106.84321,438.46065)"
+           inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/logo/logo_variant_bg.png"
+           inkscape:export-xdpi="600"
+           inkscape:export-ydpi="600"><flowRegion
+             id="flowRegion4304"><rect
+               id="rect4306"
+               width="89.535889"
+               height="26.105526"
+               x="358.83777"
+               y="134.13319"
+               style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin" /></flowRegion><flowPara
+             style="font-size:21.84710312px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-1.77950382px;writing-mode:lr-tb;text-anchor:start;stroke:#000000;stroke-width:0.31834248;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
+             id="flowPara4308">GIS</flowPara></flowRoot>      </g>
+      <flowRoot
          xml:space="preserve"
-         id="flowRoot3790"
-         style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:#009000;stroke-width:0.39741221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
-         transform="matrix(5.1115521,0,0,5.1115521,-1544.7866,-249.1442)"><flowRegion
-           id="flowRegion3792"><rect
-             id="rect3794"
-             width="78.635094"
-             height="25.127253"
-             x="358.83777"
-             y="134.13319"
-             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;stroke:#009000;stroke-width:0.39741221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin" /></flowRegion><flowPara
-           style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:100;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:-0.6777854px;writing-mode:lr-tb;text-anchor:start;stroke:#009000;stroke-width:0.39741221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Thin"
-           id="flowPara3796"><flowSpan
-             style="font-size:21.99999809px;font-style:normal;font-variant:normal;font-weight:300;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#009000;fill-opacity:1;stroke:#009000;stroke-width:0.39741221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;font-family:Fira Sans;-inkscape-font-specification:Fira Sans Light"
-             id="flowSpan3798">grass</flowSpan><flowSpan
-             style="stroke:#009000;stroke-width:0.39741221;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
-             id="flowSpan3800" /></flowPara></flowRoot>    </g>
+         id="flowRoot4310"
+         style="font-size:21.71869278px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:EB Garamond;-inkscape-font-specification:EB Garamond"
+         transform="matrix(1.0129523,0,0,1.0129523,-70.250527,301.89423)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90"><flowRegion
+           id="flowRegion4312"><rect
+             id="rect4314"
+             width="472.69949"
+             height="27.879639"
+             x="268.00415"
+             y="258.24249"
+             style="font-size:21.71869278px;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;font-family:EB Garamond;-inkscape-font-specification:EB Garamond" /></flowRegion><flowPara
+           id="flowPara4316">Bringing advanced geospatial technologies to the world</flowPara></flowRoot>      <flowRoot
+         xml:space="preserve"
+         id="flowRoot4942-0-4"
+         style="font-size:14.07890129px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;font-family:Alegreya Sans;-inkscape-font-specification:Alegreya Sans Bold"
+         transform="matrix(2.7640276,0,0,2.7640276,-548.13404,-193.60807)"
+         inkscape:export-filename="/home/vincent/Documents/developpement/grass/grass_splash/welcome_final/20160522/startup_banner_isis.png"
+         inkscape:export-xdpi="90"
+         inkscape:export-ydpi="90"><flowRegion
+           id="flowRegion4944-5-5"><rect
+             id="rect4946-3-7"
+             width="472.69949"
+             height="27.879639"
+             x="268.00415"
+             y="258.24249"
+             style="font-size:14.07890129px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;font-family:Alegreya Sans;-inkscape-font-specification:Alegreya Sans Bold" /></flowRegion><flowPara
+           id="flowPara4948-1-0"
+           style="font-size:14.07890129px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;font-family:Alegreya Sans;-inkscape-font-specification:Alegreya Sans Bold">ISIS</flowPara></flowRoot>    </g>
   </g>
 </svg>
diff --git a/gui/images/startup_banner.txt b/gui/images/startup_banner.txt
index 024e3e0..d56f54a 100644
--- a/gui/images/startup_banner.txt
+++ b/gui/images/startup_banner.txt
@@ -1,8 +1,20 @@
-Startup banner source file corresponding to the latest version uploaded
-in February : https://trac.osgeo.org/grass/changeset/64480
+Startup banner
 
-The SVG file was generated with Inkscape. Needs the following fonts to
-display correctly which can be downloaded at:
+May 22, 2016
+
+- Updated to capital "GRASS GIS" spelling
+- Contributor:
+  Vincent Bain <bain at toraval.fr>
+
+
+
+Feb 6, 2015
+
+- Startup banner source file corresponding to the latest version uploaded
+  in February : https://trac.osgeo.org/grass/changeset/64480
+
+- The SVG file was generated with Inkscape. Needs the following fonts to
+  display correctly which can be downloaded at:
 
 - Fira sans : http://www.fontsquirrel.com/fonts/fira-sans (common RPM package name: mozilla-fira-sans-fonts)
 - EB Garamond : http://www.fontsquirrel.com/fonts/eb-garamond)
diff --git a/gui/images/startup_banner_isis.png b/gui/images/startup_banner_isis.png
index 861bbe4..a95ba26 100644
Binary files a/gui/images/startup_banner_isis.png and b/gui/images/startup_banner_isis.png differ
diff --git a/gui/images/symbols/legend/area.png b/gui/images/symbols/legend/area.png
new file mode 100644
index 0000000..0e06ddd
Binary files /dev/null and b/gui/images/symbols/legend/area.png differ
diff --git a/gui/images/symbols/legend/area_curved.png b/gui/images/symbols/legend/area_curved.png
new file mode 100644
index 0000000..33a376e
Binary files /dev/null and b/gui/images/symbols/legend/area_curved.png differ
diff --git a/gui/images/symbols/legend/line.png b/gui/images/symbols/legend/line.png
new file mode 100644
index 0000000..541193a
Binary files /dev/null and b/gui/images/symbols/legend/line.png differ
diff --git a/gui/images/symbols/legend/line_crooked.png b/gui/images/symbols/legend/line_crooked.png
new file mode 100644
index 0000000..3a11bf0
Binary files /dev/null and b/gui/images/symbols/legend/line_crooked.png differ
diff --git a/gui/scripts/d.wms.py b/gui/scripts/d.wms.py
index 500269a..da99202 100644
--- a/gui/scripts/d.wms.py
+++ b/gui/scripts/d.wms.py
@@ -20,7 +20,7 @@
 #% keyword: raster
 #% keyword: import
 #% keyword: WMS
-#% keyword: WMTS 
+#% keyword: WMTS
 #% keyword: OnEarth
 #%end
 
@@ -66,8 +66,8 @@
 #%option
 #% key: srs
 #% type: integer
-#% description: EPSG code of requested source projection 
-#% answer:4326 
+#% description: EPSG code of requested source projection
+#% answer:4326
 #% guisection: Request
 #%end
 
@@ -162,19 +162,20 @@ import shutil
 from grass.script import core as grass
 
 sys.path.append(os.path.join(os.getenv("GISBASE"), "etc", "r.in.wms"))
-                
+
+
 def GetRegion():
     """!Parse region from GRASS_REGION env var.
     """
     region = os.environ["GRASS_REGION"]
-    conv_reg_vals = {'east' : 'e',
-                     'north' : 'n',
-                     'west' : 'w',
-                     'south' : 's',
-                     'rows' : 'rows',
-                     'cols' : 'cols',
-                     'e-w resol' : 'ewres',
-                     'n-s resol' : 'nsres'}
+    conv_reg_vals = {'east': 'e',
+                     'north': 'n',
+                     'west': 'w',
+                     'south': 's',
+                     'rows': 'rows',
+                     'cols': 'cols',
+                     'e-w resol': 'ewres',
+                     'n-s resol': 'nsres'}
 
     keys_to_convert = conv_reg_vals.keys()
 
@@ -184,12 +185,13 @@ def GetRegion():
     for r in region:
         r = r.split(':')
         r[0] = r[0].strip()
-        
+
         if r[0] in keys_to_convert:
             conv_region[conv_reg_vals[r[0]]] = float(r[1])
 
     return conv_region
 
+
 def main():
     options['region'] = GetRegion()
 
@@ -201,8 +203,8 @@ def main():
         grass.debug("Using GDAL WMS driver")
         from wms_gdal_drv import WMSGdalDrv
         wms = WMSGdalDrv()
-    
-    temp_map = wms.GetMap(options, flags) 
+
+    temp_map = wms.GetMap(options, flags)
     shutil.move(temp_map, os.environ["GRASS_RENDER_FILE"])
 
     return 0
diff --git a/gui/wxpython/Makefile b/gui/wxpython/Makefile
index 9f423fb..f97c590 100644
--- a/gui/wxpython/Makefile
+++ b/gui/wxpython/Makefile
@@ -1,6 +1,6 @@
 MODULE_TOPDIR = ../..
 
-SUBDIRS = docs animation mapswipe gmodeler rlisetup psmap dbmgr vdigit iclass gcp timeline tplot
+SUBDIRS = docs animation datacatalog mapswipe gmodeler rlisetup psmap dbmgr vdigit iclass gcp timeline tplot
 EXTRA_CLEAN_FILES = menustrings.py build_ext.pyc xml/menudata.xml xml/module_tree_menudata.xml */*.pyc
 
 include $(MODULE_TOPDIR)/include/Make/Dir.make
@@ -9,18 +9,18 @@ include $(MODULE_TOPDIR)/include/Make/Python.make
 DSTDIR = $(GUIDIR)/wxpython
 
 SRCFILES := $(wildcard icons/*.py scripts/*.py xml/*) \
-	$(wildcard animation/* core/*.py dbmgr/* gcp/*.py gmodeler/* \
-	gui_core/*.py iclass/* lmgr/*.py location_wizard/*.py mapwin/*.py mapdisp/*.py \
-	mapswipe/* modules/*.py nviz/*.py psmap/* rlisetup/* timeline/* vdigit/* \
-	vnet/*.py web_services/*.py wxplot/*.py iscatt/*.py tplot/*) \
+	$(wildcard animation/*.py core/*.py datacatalog/*.py dbmgr/*.py gcp/*.py gmodeler/*.py \
+	gui_core/*.py iclass/*.py lmgr/*.py location_wizard/*.py mapwin/*.py mapdisp/*.py \
+	mapswipe/*.py modules/*.py nviz/*.py psmap/*.py rdigit/*.py rlisetup/*.py timeline/*.py vdigit/*.py \
+	vnet/*.py web_services/*.py wxplot/*.py iscatt/*.py tplot/*.py) \
 	gis_set.py gis_set_error.py wxgui.py README
 
 DSTFILES := $(patsubst %,$(DSTDIR)/%,$(SRCFILES)) \
 	$(patsubst %.py,$(DSTDIR)/%.pyc,$(filter %.py,$(SRCFILES)))
 
-PYDSTDIRS := $(patsubst %,$(DSTDIR)/%,animation core dbmgr gcp gmodeler \
+PYDSTDIRS := $(patsubst %,$(DSTDIR)/%,animation core datacatalog dbmgr gcp gmodeler \
 	gui_core iclass lmgr location_wizard mapwin mapdisp modules nviz psmap \
-	mapswipe vdigit wxplot web_services rlisetup vnet timeline iscatt tplot)
+	mapswipe vdigit wxplot web_services rdigit rlisetup vnet timeline iscatt tplot)
 
 
 DSTDIRS := $(patsubst %,$(DSTDIR)/%,icons scripts xml)
@@ -38,9 +38,11 @@ $(DSTDIR)/%: % | $(PYDSTDIRS) $(DSTDIRS)
 
 xml/menudata.xml: core/toolboxes.py
 	$(call run_grass,$(PYTHON) $< > $@)
+	$(call run_grass,$(PYTHON) $< "validate" $@)
 
 xml/module_tree_menudata.xml: core/toolboxes.py
 	$(call run_grass,$(PYTHON) $< "module_tree" > $@)
+	$(call run_grass,$(PYTHON) $< "validate" $@)
 
 menustrings.py: core/menutree.py $(DSTDIR)/xml/menudata.xml $(DSTDIR)/xml/module_tree_menudata.xml $(DSTDIR)/xml/menudata_modeler.xml $(DSTDIR)/xml/menudata_psmap.xml
 	@echo "# This is a generated file.\n" > $@
diff --git a/gui/wxpython/README b/gui/wxpython/README
index 312f434..aad9979 100644
--- a/gui/wxpython/README
+++ b/gui/wxpython/README
@@ -1,7 +1,7 @@
 GRASS GIS - wxPython Graphical User Interface (wxGUI)
 =====================================================
 
-$Date: 2016-05-16 12:23:50 +0200 (Mon, 16 May 2016) $
+$Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $
 
 1 - REQUIREMENTS
 
@@ -18,7 +18,7 @@ $Date: 2016-05-16 12:23:50 +0200 (Mon, 16 May 2016) $
 If you want to launch wxPython GUI automatically, start GRASS with
 `-gui` parameter
 
-$ grass70 -gui
+$ grass72 -gui
 
 
 3 - STARTUP FROM GRASS TERMINAL
diff --git a/gui/wxpython/animation/anim.py b/gui/wxpython/animation/anim.py
index ead505b..efe80cf 100644
--- a/gui/wxpython/animation/anim.py
+++ b/gui/wxpython/animation/anim.py
@@ -21,6 +21,7 @@ from core.utils import _
 
 class Animation(wx.EvtHandler):
     """Animation class specifies which frame to show at which instance."""
+
     def __init__(self):
         wx.EvtHandler.__init__(self)
 
@@ -103,7 +104,9 @@ class Animation(wx.EvtHandler):
         if not self.IsActive():
             return
         self.currentIndex = 0
-        self.callbackEndAnimation(self.currentIndex, self.GetFrame(self.currentIndex))
+        self.callbackEndAnimation(
+            self.currentIndex, self.GetFrame(
+                self.currentIndex))
 
     def _arrivedToEnd(self):
         """Decides which action to do after animation end (stop, repeat)."""
@@ -132,7 +135,9 @@ class Animation(wx.EvtHandler):
         if not self.IsActive():
             return
 
-        self.callbackUpdateFrame(self.currentIndex, self.GetFrame(self.currentIndex))
+        self.callbackUpdateFrame(
+            self.currentIndex, self.GetFrame(
+                self.currentIndex))
         if self.orientation == Orientation.FORWARD:
             self.currentIndex += 1
             if self.currentIndex == self.count:
@@ -147,7 +152,9 @@ class Animation(wx.EvtHandler):
         if not self.IsActive():
             return
         self.currentIndex = index
-        self.callbackUpdateFrame(self.currentIndex, self.GetFrame(self.currentIndex))
+        self.callbackUpdateFrame(
+            self.currentIndex, self.GetFrame(
+                self.currentIndex))
 
     def PreviousFrameIndex(self):
         if not self.IsActive():
@@ -173,7 +180,7 @@ class Animation(wx.EvtHandler):
             if self.currentIndex == -1:
                 self.currentIndex = 0
 
-#def test():
+# def test():
 #    import wx
 #    app = wx.PySimpleApp()
 #    a = Animation()
@@ -187,5 +194,5 @@ class Animation(wx.EvtHandler):
 #    app.MainLoop()
 #
 #
-#if __name__ == '__main__':
+# if __name__ == '__main__':
 #    test()
diff --git a/gui/wxpython/animation/controller.py b/gui/wxpython/animation/controller.py
index ee5851c..22666fd 100644
--- a/gui/wxpython/animation/controller.py
+++ b/gui/wxpython/animation/controller.py
@@ -29,7 +29,9 @@ from animation.data import AnimationData
 
 
 class AnimationController(wx.EvtHandler):
-    def __init__(self, frame, sliders, animations, mapwindows, provider, bitmapPool, mapFilesPool):
+
+    def __init__(self, frame, sliders, animations, mapwindows,
+                 provider, bitmapPool, mapFilesPool):
         wx.EvtHandler.__init__(self)
 
         self.mapwindows = mapwindows
@@ -50,10 +52,13 @@ class AnimationController(wx.EvtHandler):
         self.bitmapProvider = provider
         for anim, win in zip(self.animations, self.mapwindows):
             anim.SetCallbackUpdateFrame(
-                lambda index, dataId, win=win: self.UpdateFrame(index, win, dataId))
+                lambda index, dataId, win=win: self.UpdateFrame(
+                    index, win, dataId))
             anim.SetCallbackEndAnimation(
-                lambda index, dataId, win=win: self.UpdateFrameEnd(index, win, dataId))
-            anim.SetCallbackOrientationChanged(self.OrientationChangedInReverseMode)
+                lambda index, dataId, win=win: self.UpdateFrameEnd(
+                    index, win, dataId))
+            anim.SetCallbackOrientationChanged(
+                self.OrientationChangedInReverseMode)
 
         for slider in self.sliders.values():
             slider.SetCallbackSliderChanging(self.SliderChanging)
@@ -199,8 +204,12 @@ class AnimationController(wx.EvtHandler):
         # if self.timer.IsRunning():
         #     running = True
         self.EndAnimation()
-        dlg = EditDialog(parent=self.frame, evalFunction=self.EvaluateInput,
-                         animationData=self.animationData, maxAnimations=len(self.animations))
+        dlg = EditDialog(
+            parent=self.frame,
+            evalFunction=self.EvaluateInput,
+            animationData=self.animationData,
+            maxAnimations=len(
+                self.animations))
         dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_CANCEL:
             dlg.Destroy()
@@ -220,8 +229,10 @@ class AnimationController(wx.EvtHandler):
                 break
 
         if not found:
-            GMessage(parent=self.frame,
-                     message=_("Maximum number of animations is %s.") % len(self.animations))
+            GMessage(
+                parent=self.frame,
+                message=_("Maximum number of animations is %s.") %
+                len(self.animations))
             return
 
         # running = False
@@ -232,9 +243,13 @@ class AnimationController(wx.EvtHandler):
 
         animData = AnimationData()
         # number of active animations
-        animationIndex = len([anim for anim in self.animations if anim.IsActive()])
+        animationIndex = len(
+            [anim for anim in self.animations if anim.IsActive()])
         animData.SetDefaultValues(windowIndex, animationIndex)
-        dlg = InputDialog(parent=self.frame, mode='add', animationData=animData)
+        dlg = InputDialog(
+            parent=self.frame,
+            mode='add',
+            animationData=animData)
         dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_CANCEL:
             dlg.Destroy()
@@ -242,11 +257,14 @@ class AnimationController(wx.EvtHandler):
         dlg.Destroy()
         # check compatibility
         if animData.windowIndex in indices:
-            GMessage(parent=self.frame, message=_("More animations are using one window."
-                                                  " Please select different window for each animation."))
+            GMessage(
+                parent=self.frame, message=_(
+                    "More animations are using one window."
+                    " Please select different window for each animation."))
             return
         try:
-            temporalMode, tempManager = self.EvaluateInput(self.animationData + [animData])
+            temporalMode, tempManager = self.EvaluateInput(
+                self.animationData + [animData])
         except GException as e:
             GError(parent=self.frame, message=e.value, showTraceback=False)
             return
@@ -299,9 +317,13 @@ class AnimationController(wx.EvtHandler):
             if anim.viewMode == '2d':
                 anim.cmdMatrix = layerListToCmdsMatrix(anim.layerList)
             else:
-                anim.cmdMatrix = [(cmd,) for cmd in anim.GetNvizCommands()['commands']]
+                anim.cmdMatrix = [(cmd,)
+                                  for cmd in anim.GetNvizCommands()
+                                  ['commands']]
         self._updateSlider(timeLabels=timeLabels)
-        self._updateAnimations(activeIndices=indices, mapNamesDict=mapNamesDict)
+        self._updateAnimations(
+            activeIndices=indices,
+            mapNamesDict=mapNamesDict)
         wx.Yield()
         self._updateBitmapData()
         # if running:
@@ -331,30 +353,34 @@ class AnimationController(wx.EvtHandler):
                 if i not in activeIndices:
                     self.animations[i].SetActive(False)
                     continue
-                anim = [anim for anim in self.animationData if anim.windowIndex == i][0]
+                anim = [anim for anim in self.animationData
+                        if anim.windowIndex == i][0]
                 w, h = self.mapwindows[i].GetClientSize()
                 regions = anim.GetRegions(w, h)
-                self.animations[i].SetFrames([HashCmds(cmdList, region)
-                                              for cmdList, region in zip(anim.cmdMatrix, regions)])
+                self.animations[i].SetFrames(
+                    [HashCmds(cmdList, region) for cmdList,
+                     region in zip(anim.cmdMatrix, regions)])
                 self.animations[i].SetActive(True)
         else:
             for i in range(len(self.animations)):
                 if i not in activeIndices:
                     self.animations[i].SetActive(False)
                     continue
-                anim = [anim for anim in self.animationData if anim.windowIndex == i][0]
+                anim = [anim for anim in self.animationData
+                        if anim.windowIndex == i][0]
                 w, h = self.mapwindows[i].GetClientSize()
                 regions = anim.GetRegions(w, h)
-                identifiers = sampleCmdMatrixAndCreateNames(anim.cmdMatrix,
-                                                            mapNamesDict[anim.firstStdsNameType[0]],
-                                                            regions)
+                identifiers = sampleCmdMatrixAndCreateNames(
+                    anim.cmdMatrix, mapNamesDict[
+                        anim.firstStdsNameType[0]], regions)
                 self.animations[i].SetFrames(identifiers)
                 self.animations[i].SetActive(True)
 
     def _updateWindows(self, activeIndices):
         # add or remove window
         for windowIndex in range(len(self.animations)):
-            if not self.frame.IsWindowShown(windowIndex) and windowIndex in activeIndices:
+            if not self.frame.IsWindowShown(
+                    windowIndex) and windowIndex in activeIndices:
                 self.frame.AddWindow(windowIndex)
             elif self.frame.IsWindowShown(windowIndex) and windowIndex not in activeIndices:
                 self.frame.RemoveWindow(windowIndex)
@@ -370,18 +396,27 @@ class AnimationController(wx.EvtHandler):
             else:
                 self._load3DData(animData)
             self._loadLegend(animData)
-        color = UserSettings.Get(group='animation', key='bgcolor', subkey='color')
-        cpus = UserSettings.Get(group='animation', key='nprocs', subkey='value')
+        color = UserSettings.Get(
+            group='animation',
+            key='bgcolor',
+            subkey='color')
+        cpus = UserSettings.Get(
+            group='animation',
+            key='nprocs',
+            subkey='value')
         self.bitmapProvider.Load(nprocs=cpus, bgcolor=color)
         # clear pools
         self.bitmapPool.Clear()
         self.mapFilesPool.Clear()
 
     def _set2DData(self, animationData):
-        opacities = [layer.opacity for layer in animationData.layerList if layer.active]
+        opacities = [
+            layer.opacity for layer in animationData.layerList
+            if layer.active]
         w, h = self.mapwindows[animationData.GetWindowIndex()].GetClientSize()
         regions = animationData.GetRegions(w, h)
-        self.bitmapProvider.SetCmds(animationData.cmdMatrix, opacities, regions)
+        self.bitmapProvider.SetCmds(
+            animationData.cmdMatrix, opacities, regions)
 
     def _load3DData(self, animationData):
         nviz = animationData.GetNvizCommands()
@@ -390,7 +425,8 @@ class AnimationController(wx.EvtHandler):
     def _loadLegend(self, animationData):
         if animationData.legendCmd:
             try:
-                bitmap = self.bitmapProvider.LoadOverlay(animationData.legendCmd)
+                bitmap = self.bitmapProvider.LoadOverlay(
+                    animationData.legendCmd)
                 try:
                     from PIL import Image
                     for param in animationData.legendCmd:
@@ -400,7 +436,9 @@ class AnimationController(wx.EvtHandler):
                             break
                 except ImportError:
                     x, y = 0, 0
-                self.mapwindows[animationData.windowIndex].SetOverlay(bitmap, x, y)
+                self.mapwindows[
+                    animationData.windowIndex].SetOverlay(
+                    bitmap, x, y)
             except GException:
                 GError(message=_("Failed to display legend."))
         else:
@@ -433,7 +471,8 @@ class AnimationController(wx.EvtHandler):
 
         if temporalMode == TemporalMode.NONTEMPORAL:
             if len(mapCount) > 1:
-                raise GException(_("Inconsistent number of maps, please check input data."))
+                raise GException(
+                    _("Inconsistent number of maps, please check input data."))
         elif temporalMode == TemporalMode.TEMPORAL:
             tempManager = TemporalManager()
             # these raise GException:
@@ -449,8 +488,14 @@ class AnimationController(wx.EvtHandler):
     def Reload(self):
         self.EndAnimation()
 
-        color = UserSettings.Get(group='animation', key='bgcolor', subkey='color')
-        cpus = UserSettings.Get(group='animation', key='nprocs', subkey='value')
+        color = UserSettings.Get(
+            group='animation',
+            key='bgcolor',
+            subkey='color')
+        cpus = UserSettings.Get(
+            group='animation',
+            key='nprocs',
+            subkey='value')
         self.bitmapProvider.Load(nprocs=cpus, bgcolor=color, force=True)
 
         self.EndAnimation()
@@ -477,7 +522,8 @@ class AnimationController(wx.EvtHandler):
             timeLabels, mapNamesDict = self.temporalManager.GetLabelsAndMaps()
             frameCount = len(timeLabels)
         else:
-            frameCount = self.animationData[0].mapCount  # should be the same for all
+            frameCount = self.animationData[
+                0].mapCount  # should be the same for all
 
         animWinSize = []
         animWinPos = []
@@ -492,11 +538,19 @@ class AnimationController(wx.EvtHandler):
                 animWinIndex.append(i)
 
         images = []
-        busy = wx.BusyInfo(message=_("Preparing export, please wait..."), parent=self.frame)
+        busy = wx.BusyInfo(
+            message=_("Preparing export, please wait..."),
+            parent=self.frame)
         wx.Yield()
         lastBitmaps = {}
-        fgcolor = UserSettings.Get(group='animation', key='font', subkey='fgcolor')
-        bgcolor = UserSettings.Get(group='animation', key='font', subkey='bgcolor')
+        fgcolor = UserSettings.Get(
+            group='animation',
+            key='font',
+            subkey='fgcolor')
+        bgcolor = UserSettings.Get(
+            group='animation',
+            key='font',
+            subkey='bgcolor')
         for frameIndex in range(frameCount):
             image = wx.EmptyImage(*size)
             image.Replace(0, 0, 0, 255, 255, 255)
@@ -514,7 +568,7 @@ class AnimationController(wx.EvtHandler):
                 else:
                     bitmap = self.bitmapProvider.GetBitmap(frameId)
                     lastBitmaps[i] = bitmap
-                
+
                 im = wx.ImageFromBitmap(lastBitmaps[i])
 
                 # add legend if used
@@ -523,7 +577,8 @@ class AnimationController(wx.EvtHandler):
                     legendBitmap = self.bitmapProvider.LoadOverlay(legend)
                     x, y = self.mapwindows[i].GetOverlayPos()
                     legImage = wx.ImageFromBitmap(legendBitmap)
-                    # not so nice result, can we handle the transparency otherwise?
+                    # not so nice result, can we handle the transparency
+                    # otherwise?
                     legImage.ConvertAlphaToMask()
                     im.Paste(legImage, x, y)
 
@@ -540,19 +595,24 @@ class AnimationController(wx.EvtHandler):
                 elif decoration['name'] == 'time':
                     timeLabel = timeLabels[frameIndex]
                     if timeLabel[1]:  # interval
-                        text = _("%(from)s %(dash)s %(to)s") % \
-                                {'from': timeLabel[0], 'dash': u"\u2013", 'to': timeLabel[1]}
+                        text = _("%(from)s %(dash)s %(to)s") % {
+                            'from': timeLabel[0],
+                            'dash': u"\u2013", 'to': timeLabel[1]}
                     else:
                         if self.temporalManager.GetTemporalType() == TemporalType.ABSOLUTE:
                             text = timeLabel[0]
                         else:
                             text = _("%(start)s %(unit)s") % \
-                                    {'start': timeLabel[0], 'unit': timeLabel[2]}
+                                {'start': timeLabel[0], 'unit': timeLabel[2]}
 
-                    decImage = RenderText(text, decoration['font'], bgcolor, fgcolor).ConvertToImage()
+                    decImage = RenderText(
+                        text, decoration['font'],
+                        bgcolor, fgcolor).ConvertToImage()
                 elif decoration['name'] == 'text':
                     text = decoration['text']
-                    decImage = RenderText(text, decoration['font'], bgcolor, fgcolor).ConvertToImage()
+                    decImage = RenderText(
+                        text, decoration['font'],
+                        bgcolor, fgcolor).ConvertToImage()
 
                 image.Paste(decImage, x, y)
 
@@ -566,8 +626,11 @@ class AnimationController(wx.EvtHandler):
         wx.Yield()
         try:
             if exportInfo['method'] == 'sequence':
-                filename = os.path.join(exportInfo['directory'],
-                                        exportInfo['prefix'] + '.' + exportInfo['format'].lower())
+                filename = os.path.join(
+                    exportInfo['directory'],
+                    exportInfo['prefix'] +
+                    '.' +
+                    exportInfo['format'].lower())
                 writeIms(filename=filename, images=pilImages)
             elif exportInfo['method'] == 'gif':
                 writeGif(filename=exportInfo['file'], images=pilImages,
diff --git a/gui/wxpython/animation/data.py b/gui/wxpython/animation/data.py
index 1838115..790e744 100644
--- a/gui/wxpython/animation/data.py
+++ b/gui/wxpython/animation/data.py
@@ -32,6 +32,7 @@ import grass.temporal as tgis
 
 
 class AnimationData(object):
+
     def __init__(self):
         self._name = None
         self._windowIndex = 0
@@ -209,17 +210,22 @@ class AnimationData(object):
     def GetZoomRegionValue(self):
         return self._zoomRegionValue
 
-    zoomRegionValue = property(fset=SetZoomRegionValue, fget=GetZoomRegionValue)
+    zoomRegionValue = property(
+        fset=SetZoomRegionValue,
+        fget=GetZoomRegionValue)
 
     def GetRegions(self, width, height):
         self._computeRegions(width, height, self._mapCount, self._startRegion,
                              self._endRegion, self._zoomRegionValue)
         return self._regions
 
-    def _computeRegions(self, width, height, count, startRegion, endRegion=None, zoomValue=None):
+    def _computeRegions(
+            self, width, height, count, startRegion, endRegion=None,
+            zoomValue=None):
         """Computes regions based on start region and end region or zoom value
         for each of the animation frames."""
-        currRegion = dict(gcore.region())  # cast to dict, otherwise deepcopy error
+        currRegion = dict(
+            gcore.region())  # cast to dict, otherwise deepcopy error
         del currRegion['cells']
         del currRegion['cols']
         del currRegion['rows']
@@ -237,15 +243,24 @@ class AnimationData(object):
             self._regions = regions
             return
 
-        startRegionDict = parse_key_val(gcore.read_command('g.region', flags='gu',
-                                                                 region=startRegion),
-                                              val_type=float)
+        startRegionDict = parse_key_val(
+            gcore.read_command(
+                'g.region',
+                flags='gu',
+                region=startRegion),
+            val_type=float)
         if endRegion:
-            endRegionDict = parse_key_val(gcore.read_command('g.region', flags='gu',
-                                                                   region=endRegion),
-                                                val_type=float)
+            endRegionDict = parse_key_val(
+                gcore.read_command(
+                    'g.region',
+                    flags='gu',
+                    region=endRegion),
+                val_type=float)
             for key in ('n', 's', 'e', 'w'):
-                values = interpolate(startRegionDict[key], endRegionDict[key], self._mapCount)
+                values = interpolate(
+                    startRegionDict[key],
+                    endRegionDict[key],
+                    self._mapCount)
                 for value, region in zip(values, regions):
                     region[key] = value
 
@@ -259,7 +274,7 @@ class AnimationData(object):
                 # handle cases when north < south and similarly EW
                 if regions[i]['n'] < regions[i]['s'] or \
                    regions[i]['e'] < regions[i]['w']:
-                        regions[i] = regions[i - 1]
+                    regions[i] = regions[i - 1]
 
         for region in regions:
             mapwidth = abs(region['e'] - region['w'])
@@ -276,6 +291,7 @@ class AnimationData(object):
 class AnimLayer(Layer):
     """Animation layer allows adding either space-time dataset
     or series of maps."""
+
     def __init__(self):
         Layer.__init__(self)
         self._mapTypes.extend(['strds', 'stvds', 'str3ds'])
@@ -284,7 +300,8 @@ class AnimLayer(Layer):
     def SetName(self, name):
         if not self.hidden:
             if self._mapType is None:
-                raise ValueError("To set layer name, the type of layer must be specified.")
+                raise ValueError(
+                    "To set layer name, the type of layer must be specified.")
             if self._mapType in ('strds', 'stvds', 'str3ds'):
                 try:
                     name = validateTimeseriesName(name, self._mapType)
diff --git a/gui/wxpython/animation/dialogs.py b/gui/wxpython/animation/dialogs.py
index 461cf76..db12918 100644
--- a/gui/wxpython/animation/dialogs.py
+++ b/gui/wxpython/animation/dialogs.py
@@ -48,6 +48,7 @@ import grass.script.core as gcore
 
 
 class SpeedDialog(wx.Dialog):
+
     def __init__(self, parent, title=_("Adjust speed of animation"),
                  temporalMode=None, minimumDuration=0, timeGranularity=None,
                  initialSpeed=200):
@@ -75,7 +76,9 @@ class SpeedDialog(wx.Dialog):
     def GetTimeGranularity(self):
         return self._timeGranularity
 
-    timeGranularity = property(fset=SetTimeGranularity, fget=GetTimeGranularity)
+    timeGranularity = property(
+        fset=SetTimeGranularity,
+        fget=GetTimeGranularity)
 
     def SetTemporalMode(self, mode):
         self._temporalMode = mode
@@ -97,20 +100,37 @@ class SpeedDialog(wx.Dialog):
         box = wx.StaticBoxSizer(self.nontemporalBox, wx.VERTICAL)
         gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
-        labelDuration = wx.StaticText(self, id=wx.ID_ANY, label=_("Frame duration:"))
+        labelDuration = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("Frame duration:"))
         labelUnits = wx.StaticText(self, id=wx.ID_ANY, label=_("ms"))
-        self.spinDuration = wx.SpinCtrl(self, id=wx.ID_ANY, min=self.minimumDuration,
-                                        max=10000, initial=self.defaultSpeed)
+        self.spinDuration = wx.SpinCtrl(
+            self,
+            id=wx.ID_ANY,
+            min=self.minimumDuration,
+            max=10000,
+            initial=self.defaultSpeed)
         # TODO total time
 
-        gridSizer.Add(item=labelDuration, pos=(0, 0), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        gridSizer.Add(item=self.spinDuration, pos=(0, 1), flag = wx.ALIGN_CENTER)
-        gridSizer.Add(item=labelUnits, pos=(0, 2), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(
+            item=labelDuration, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(item=self.spinDuration, pos=(0, 1), flag=wx.ALIGN_CENTER)
+        gridSizer.Add(
+            item=labelUnits, pos=(0, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
         gridSizer.AddGrowableCol(0)
 
-        box.Add(item=gridSizer, proportion=1, border=5, flag=wx.ALL | wx.EXPAND)
+        box.Add(
+            item=gridSizer,
+            proportion=1,
+            border=5,
+            flag=wx.ALL | wx.EXPAND)
         self.nontemporalSizer = gridSizer
-        mainSizer.Add(item=box, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(
+            item=box,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         #
         # temporal mode
         #
@@ -119,25 +139,45 @@ class SpeedDialog(wx.Dialog):
         box = wx.StaticBoxSizer(self.temporalBox, wx.VERTICAL)
         gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
-        labelTimeUnit = wx.StaticText(self, id=wx.ID_ANY, label=_("Time unit:"))
-        labelDuration = wx.StaticText(self, id=wx.ID_ANY, label=_("Duration of time unit:"))
+        labelTimeUnit = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("Time unit:"))
+        labelDuration = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("Duration of time unit:"))
         labelUnits = wx.StaticText(self, id=wx.ID_ANY, label=_("ms"))
-        self.spinDurationTemp = wx.SpinCtrl(self, id=wx.ID_ANY, min=self.minimumDuration,
-                                            max=10000, initial=self.defaultSpeed)
+        self.spinDurationTemp = wx.SpinCtrl(
+            self, id=wx.ID_ANY, min=self.minimumDuration, max=10000,
+            initial=self.defaultSpeed)
         self.choiceUnits = wx.Choice(self, id=wx.ID_ANY)
 
         # TODO total time
 
-        gridSizer.Add(item=labelTimeUnit, pos=(0, 0), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        gridSizer.Add(item=self.choiceUnits, pos=(0, 1), flag = wx.ALIGN_CENTER | wx.EXPAND)
-        gridSizer.Add(item=labelDuration, pos=(1, 0), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        gridSizer.Add(item=self.spinDurationTemp, pos=(1, 1), flag = wx.ALIGN_CENTER | wx.EXPAND)
-        gridSizer.Add(item=labelUnits, pos=(1, 2), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(
+            item=labelTimeUnit, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(item=self.choiceUnits, pos=(0, 1),
+                      flag=wx.ALIGN_CENTER | wx.EXPAND)
+        gridSizer.Add(
+            item=labelDuration, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(
+            item=self.spinDurationTemp, pos=(
+                1, 1), flag=wx.ALIGN_CENTER | wx.EXPAND)
+        gridSizer.Add(
+            item=labelUnits, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
         gridSizer.AddGrowableCol(1)
 
         self.temporalSizer = gridSizer
-        box.Add(item=gridSizer, proportion=1, border=5, flag=wx.ALL | wx.EXPAND)
-        mainSizer.Add(item=box, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
+        box.Add(
+            item=gridSizer,
+            proportion=1,
+            border=5,
+            flag=wx.ALL | wx.EXPAND)
+        mainSizer.Add(
+            item=box,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
 
         self.btnOk = wx.Button(self, wx.ID_OK)
         self.btnApply = wx.Button(self, wx.ID_APPLY)
@@ -162,7 +202,8 @@ class SpeedDialog(wx.Dialog):
         mainSizer.Fit(self)
 
     def _setTemporalMode(self):
-        self.nontemporalBox.Enable(self.temporalMode == TemporalMode.NONTEMPORAL)
+        self.nontemporalBox.Enable(
+            self.temporalMode == TemporalMode.NONTEMPORAL)
         self.temporalBox.Enable(self.temporalMode == TemporalMode.TEMPORAL)
         for child in self.temporalSizer.GetChildren():
             child.GetWindow().Enable(self.temporalMode == TemporalMode.TEMPORAL)
@@ -172,7 +213,13 @@ class SpeedDialog(wx.Dialog):
         self.Layout()
 
     def _fillUnitChoice(self, choiceWidget):
-        timeUnitsChoice = [_("year"), _("month"), _("day"), _("hour"), _("minute"), _("second")]
+        timeUnitsChoice = [
+            _("year"),
+            _("month"),
+            _("day"),
+            _("hour"),
+            _("minute"),
+            _("second")]
         timeUnits = ["years", "months", "days", "hours", "minutes", "seconds"]
         for item, cdata in zip(timeUnitsChoice, timeUnits):
             choiceWidget.Append(item, cdata)
@@ -236,7 +283,8 @@ class SpeedDialog(wx.Dialog):
             ms = value * seconds2 / float(seconds1)
             # minimumDuration set to 0, too restrictive
             if ms < self.minimumDuration:
-                GMessage(parent=self, message=_("Animation speed is too high."))
+                GMessage(parent=self, message=_(
+                    "Animation speed is too high."))
                 return
             self.lastAppliedValueTemp = self.spinDurationTemp.GetValue()
         else:
@@ -267,6 +315,7 @@ class SpeedDialog(wx.Dialog):
 
 
 class InputDialog(wx.Dialog):
+
     def __init__(self, parent, mode, animationData):
         wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY,
                            style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
@@ -284,9 +333,19 @@ class InputDialog(wx.Dialog):
     def _layout(self):
         self.notebook = wx.Notebook(parent=self, style=wx.BK_DEFAULT)
         sizer = wx.BoxSizer(wx.VERTICAL)
-        self.notebook.AddPage(self._createGeneralPage(self.notebook), _("General"))
-        self.notebook.AddPage(self._createAdvancedPage(self.notebook), _("Advanced"))
-        sizer.Add(self.notebook, proportion=1, flag=wx.ALL | wx.EXPAND, border=3)
+        self.notebook.AddPage(
+            self._createGeneralPage(
+                self.notebook),
+            _("General"))
+        self.notebook.AddPage(
+            self._createAdvancedPage(
+                self.notebook),
+            _("Advanced"))
+        sizer.Add(
+            self.notebook,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=3)
 
         # buttons
         self.btnOk = wx.Button(self, wx.ID_OK)
@@ -308,17 +367,24 @@ class InputDialog(wx.Dialog):
         panel = wx.Panel(parent=parent)
         mainSizer = wx.BoxSizer(wx.VERTICAL)
 
-        self.windowChoice = wx.Choice(panel, id=wx.ID_ANY,
-                                      choices=[_("top left"), _("top right"),
-                                               _("bottom left"), _("bottom right")])
+        self.windowChoice = wx.Choice(
+            panel,
+            id=wx.ID_ANY,
+            choices=[
+                _("top left"),
+                _("top right"),
+                _("bottom left"),
+                _("bottom right")])
         self.windowChoice.SetSelection(self.animationData.windowIndex)
 
-        self.nameCtrl = wx.TextCtrl(panel, id=wx.ID_ANY, value=self.animationData.name)
+        self.nameCtrl = wx.TextCtrl(
+            panel, id=wx.ID_ANY, value=self.animationData.name)
 
         self.nDChoice = wx.Choice(panel, id=wx.ID_ANY)
         mode = self.animationData.viewMode
         index = 0
-        for i, (viewMode, viewModeName) in enumerate(self.animationData.viewModes):
+        for i, (viewMode, viewModeName) in enumerate(
+                self.animationData.viewModes):
             self.nDChoice.Append(viewModeName, clientData=viewMode)
             if mode == viewMode:
                 index = i
@@ -328,28 +394,61 @@ class InputDialog(wx.Dialog):
         self.nDChoice.Bind(wx.EVT_CHOICE, self.OnViewMode)
 
         gridSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
-        gridSizer.Add(item=wx.StaticText(panel, id=wx.ID_ANY, label=_("Name:")),
-                      flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Name:")),
+            flag=wx.ALIGN_CENTER_VERTICAL)
         gridSizer.Add(item=self.nameCtrl, proportion=1, flag=wx.EXPAND)
-        gridSizer.Add(item=wx.StaticText(panel, id=wx.ID_ANY, label=_("Window position:")),
-                      flag=wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item=self.windowChoice, proportion=1, flag=wx.ALIGN_RIGHT)
-        gridSizer.Add(item=wx.StaticText(panel, id=wx.ID_ANY, label=_("View mode:")),
-                      flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Window position:")),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.windowChoice,
+            proportion=1,
+            flag=wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("View mode:")),
+            flag=wx.ALIGN_CENTER_VERTICAL)
         gridSizer.Add(item=self.nDChoice, proportion=1, flag=wx.ALIGN_RIGHT)
         gridSizer.AddGrowableCol(0, 1)
         gridSizer.AddGrowableCol(1, 1)
-        mainSizer.Add(item=gridSizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
-        label = _("For 3D animation, please select only one space-time dataset\n"
-                  "or one series of map layers.")
+        mainSizer.Add(
+            item=gridSizer,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        label = _(
+            "For 3D animation, please select only one space-time dataset\n"
+            "or one series of map layers.")
         self.warning3DLayers = wx.StaticText(panel, label=label)
-        self.warning3DLayers.SetForegroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
-        mainSizer.Add(item=self.warning3DLayers, proportion=0, flag=wx.EXPAND | wx.LEFT, border=5)
+        self.warning3DLayers.SetForegroundColour(
+            wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
+        mainSizer.Add(
+            item=self.warning3DLayers,
+            proportion=0,
+            flag=wx.EXPAND | wx.LEFT,
+            border=5)
 
         self.dataPanel = self._createDataPanel(panel)
         self.threeDPanel = self._create3DPanel(panel)
-        mainSizer.Add(item=self.dataPanel, proportion=1, flag=wx.EXPAND | wx.ALL, border=3)
-        mainSizer.Add(item=self.threeDPanel, proportion=0, flag=wx.EXPAND | wx.ALL, border=3)
+        mainSizer.Add(
+            item=self.dataPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
+        mainSizer.Add(
+            item=self.threeDPanel,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
 
         panel.SetSizer(mainSizer)
         mainSizer.Fit(panel)
@@ -364,7 +463,11 @@ class InputDialog(wx.Dialog):
                                                  layerList=self._layerList,
                                                  modal=True)
         self.simpleLmgr.SetMinSize((globalvar.DIALOG_GSELECT_SIZE[0], 80))
-        slmgrSizer.Add(self.simpleLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        slmgrSizer.Add(
+            self.simpleLmgr,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
 
         self.legend = wx.CheckBox(panel, label=_("Show raster legend"))
         self.legend.SetValue(bool(self.animationData.legendCmd))
@@ -375,7 +478,11 @@ class InputDialog(wx.Dialog):
         hbox = wx.BoxSizer(wx.HORIZONTAL)
         hbox.Add(item=self.legend, proportion=1, flag=wx.ALIGN_CENTER_VERTICAL)
         hbox.Add(item=self.legendBtn, proportion=0, flag=wx.LEFT, border=5)
-        slmgrSizer.Add(item=hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=3)
+        slmgrSizer.Add(
+            item=hbox,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
 
         panel.SetSizerAndFit(slmgrSizer)
         panel.SetAutoLayout(True)
@@ -389,29 +496,48 @@ class InputDialog(wx.Dialog):
         dataBoxSizer = wx.StaticBoxSizer(dataStBox, wx.VERTICAL)
 
         # workspace file
-        self.fileSelector = \
-            filebrowse.FileBrowseButton(parent=panel, id=wx.ID_ANY,
-                                        size=globalvar.DIALOG_GSELECT_SIZE,
-                                        labelText=_("Workspace file:"),
-                                        dialogTitle=_("Choose workspace file to "
-                                                      "import 3D view parameters"),
-                                        buttonText=_('Browse'),
-                                        startDirectory=os.getcwd(), fileMode=0,
-                                        fileMask="GRASS Workspace File (*.gxw)|*.gxw")
+        self.fileSelector = filebrowse.FileBrowseButton(
+            parent=panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText=_("Workspace file:"),
+            dialogTitle=_(
+                "Choose workspace file to "
+                "import 3D view parameters"),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            fileMode=0,
+            fileMask="GRASS Workspace File (*.gxw)|*.gxw")
         if self.animationData.workspaceFile:
             self.fileSelector.SetValue(self.animationData.workspaceFile)
-        self.paramLabel = wx.StaticText(panel, wx.ID_ANY, label=_("Parameter for animation:"))
-        self.paramChoice = wx.Choice(panel, id=wx.ID_ANY, choices=self.animationData.nvizParameters)
+        self.paramLabel = wx.StaticText(
+            panel, wx.ID_ANY, label=_("Parameter for animation:"))
+        self.paramChoice = wx.Choice(
+            panel, id=wx.ID_ANY, choices=self.animationData.nvizParameters)
         self.paramChoice.SetStringSelection(self.animationData.nvizParameter)
 
         hbox = wx.BoxSizer(wx.HORIZONTAL)
-        hbox.Add(item=self.fileSelector, proportion=1, flag=wx.EXPAND | wx.ALIGN_CENTER)
-        dataBoxSizer.Add(item=hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=3)
+        hbox.Add(
+            item=self.fileSelector,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALIGN_CENTER)
+        dataBoxSizer.Add(
+            item=hbox,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
 
         hbox = wx.BoxSizer(wx.HORIZONTAL)
-        hbox.Add(item=self.paramLabel, proportion=1, flag=wx.ALIGN_CENTER_VERTICAL)
+        hbox.Add(
+            item=self.paramLabel,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL)
         hbox.Add(item=self.paramChoice, proportion=1, flag=wx.EXPAND)
-        dataBoxSizer.Add(item=hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=3)
+        dataBoxSizer.Add(
+            item=hbox,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
 
         panel.SetSizerAndFit(dataBoxSizer)
         panel.SetAutoLayout(True)
@@ -422,7 +548,9 @@ class InputDialog(wx.Dialog):
         panel = wx.Panel(parent=parent)
 
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.StaticBox(parent=panel, label=" %s " % _("Animate region change (2D view only)"))
+        box = wx.StaticBox(
+            parent=panel, label=" %s " %
+            _("Animate region change (2D view only)"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
         gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
@@ -431,12 +559,17 @@ class InputDialog(wx.Dialog):
         self.stRegion = Select(parent=panel, type='region', size=(200, -1))
         if self.animationData.startRegion:
             self.stRegion.SetValue(self.animationData.startRegion)
-        gridSizer.Add(self.stRegion, pos=(0, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+        gridSizer.Add(
+            self.stRegion, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
 
-        self.endRegRadio = wx.RadioButton(panel, label=_("End region:"), style=wx.RB_GROUP)
+        self.endRegRadio = wx.RadioButton(
+            panel, label=_("End region:"), style=wx.RB_GROUP)
         gridSizer.Add(self.endRegRadio, pos=(1, 0), flag=wx.EXPAND)
         self.endRegion = Select(parent=panel, type='region', size=(200, -1))
-        gridSizer.Add(self.endRegion, pos=(1, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+        gridSizer.Add(
+            self.endRegion, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
         self.zoomRadio = wx.RadioButton(panel, label=_("Zoom value:"))
         self.zoomRadio.SetToolTipString(_("N-S/E-W distances in map units used to "
                                           "gradually reduce region."))
@@ -451,7 +584,9 @@ class InputDialog(wx.Dialog):
         zoomSizer.Add(wx.StaticText(panel, label=_("E-W:")), proportion=0,
                       flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border=3)
         zoomSizer.Add(self.zoomEW, proportion=1, flag=wx.LEFT, border=3)
-        gridSizer.Add(zoomSizer, pos=(2, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+        gridSizer.Add(
+            zoomSizer, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
         if self.animationData.endRegion:
             self.endRegRadio.SetValue(True)
             self.zoomRadio.SetValue(False)
@@ -463,8 +598,12 @@ class InputDialog(wx.Dialog):
             self.zoomNS.SetValue(str(zoom[0]))
             self.zoomEW.SetValue(str(zoom[1]))
 
-        self.endRegRadio.Bind(wx.EVT_RADIOBUTTON, lambda evt: self._enableRegionWidgets())
-        self.zoomRadio.Bind(wx.EVT_RADIOBUTTON, lambda evt: self._enableRegionWidgets())
+        self.endRegRadio.Bind(
+            wx.EVT_RADIOBUTTON,
+            lambda evt: self._enableRegionWidgets())
+        self.zoomRadio.Bind(
+            wx.EVT_RADIOBUTTON,
+            lambda evt: self._enableRegionWidgets())
         self._enableRegionWidgets()
 
         gridSizer.AddGrowableCol(1)
@@ -512,8 +651,8 @@ class InputDialog(wx.Dialog):
         if self._tmpLegendCmd or self.animationData.legendCmd:
             return
         cmd = ['d.legend', 'at=5,50,2,5']
-        GUI(parent=self, modal=True).ParseCommand(cmd=cmd,
-                                                  completed=(self.GetOptData, '', ''))
+        GUI(parent=self, modal=True).ParseCommand(
+            cmd=cmd, completed=(self.GetOptData, '', ''))
 
     def OnLegendProperties(self, event):
         """Set options for legend"""
@@ -524,8 +663,8 @@ class InputDialog(wx.Dialog):
         else:
             cmd = ['d.legend', 'at=5,50,2,5']
 
-        GUI(parent=self, modal=True).ParseCommand(cmd=cmd,
-                                                  completed=(self.GetOptData, '', ''))
+        GUI(parent=self, modal=True).ParseCommand(
+            cmd=cmd, completed=(self.GetOptData, '', ''))
 
     def GetOptData(self, dcmd, layer, params, propwin):
         """Process decoration layer data"""
@@ -583,8 +722,9 @@ class InputDialog(wx.Dialog):
                 self.animationData.endRegion = self.endRegion.GetValue()
                 self.animationData.zoomRegionValue = None
             else:
-                self.animationData.zoomRegionValue = (float(self.zoomNS.GetValue()),
-                                                      float(self.zoomEW.GetValue()))
+                self.animationData.zoomRegionValue = (
+                    float(self.zoomNS.GetValue()),
+                    float(self.zoomEW.GetValue()))
                 self.animationData.endRegion = None
         else:
             self.animationData.startRegion = None
@@ -596,10 +736,14 @@ class InputDialog(wx.Dialog):
             self._update()
             self.EndModal(wx.ID_OK)
         except (GException, ValueError, IOError) as e:
-            GError(message=str(e), showTraceback=False, caption=_("Invalid input"))
+            GError(
+                message=str(e),
+                showTraceback=False,
+                caption=_("Invalid input"))
 
 
 class EditDialog(wx.Dialog):
+
     def __init__(self, parent, evalFunction, animationData, maxAnimations):
         wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY,
                            style=wx.DEFAULT_DIALOG_STYLE)
@@ -613,13 +757,19 @@ class EditDialog(wx.Dialog):
 
     def _layout(self):
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.StaticBox (parent=self, id=wx.ID_ANY, label=" %s " % _("List of animations"))
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("List of animations"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap=5, vgap=5)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
         gridBagSizer.AddGrowableCol(0)
         # gridBagSizer.AddGrowableCol(1,1)
 
-        self.listbox = wx.ListBox(self, id=wx.ID_ANY, choices=[], style=wx.LB_SINGLE | wx.LB_NEEDED_SB)
+        self.listbox = wx.ListBox(
+            self, id=wx.ID_ANY, choices=[],
+            style=wx.LB_SINGLE | wx.LB_NEEDED_SB)
         self.listbox.Bind(wx.EVT_LISTBOX_DCLICK, self.OnEdit)
 
         self.addButton = wx.Button(self, id=wx.ID_ANY, label=_("Add"))
@@ -631,15 +781,19 @@ class EditDialog(wx.Dialog):
 
         self._updateListBox()
 
-        gridBagSizer.Add(self.listbox, pos=(0, 0), span = (3, 1),
-                         flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(self.listbox, pos=(0, 0), span=(3, 1),
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
         gridBagSizer.Add(self.addButton, pos=(0, 1),
-                         flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
         gridBagSizer.Add(self.editButton, pos=(1, 1),
-                         flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
         gridBagSizer.Add(self.removeButton, pos=(2, 1),
-                         flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
-        sizer.Add(gridBagSizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        sizer.Add(
+            gridBagSizer,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
         mainSizer.Add(item=sizer, proportion=0,
                       flag=wx.EXPAND | wx.ALL, border=5)
 
@@ -677,7 +831,10 @@ class EditDialog(wx.Dialog):
     def OnAdd(self, event):
         windowIndex = self._getNextIndex()
         if windowIndex is None:
-            GMessage(self, message=_("Maximum number of animations is %d.") % self.maxAnimations)
+            GMessage(
+                self,
+                message=_("Maximum number of animations is %d.") %
+                self.maxAnimations)
             return
         animData = AnimationData()
         # number of active animations
@@ -724,8 +881,10 @@ class EditDialog(wx.Dialog):
     def OnOk(self, event):
         indices = set([anim.windowIndex for anim in self.animationData])
         if len(indices) != len(self.animationData):
-            GError(parent=self, message=_("More animations are using one window."
-                                          " Please select different window for each animation."))
+            GError(
+                parent=self, message=_(
+                    "More animations are using one window."
+                    " Please select different window for each animation."))
             return
         try:
             temporalMode, tempManager = self.eval(self.animationData)
@@ -738,9 +897,14 @@ class EditDialog(wx.Dialog):
 
 
 class ExportDialog(wx.Dialog):
+
     def __init__(self, parent, temporal, timeTick):
-        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=_("Export animation"),
-                           style=wx.DEFAULT_DIALOG_STYLE)
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=_("Export animation"),
+            style=wx.DEFAULT_DIALOG_STYLE)
         self.decorations = []
 
         self.temporal = temporal
@@ -756,8 +920,12 @@ class ExportDialog(wx.Dialog):
         notebook = wx.Notebook(self, id=wx.ID_ANY)
         mainSizer = wx.BoxSizer(wx.VERTICAL)
 
-        notebook.AddPage(page=self._createExportFormatPanel(notebook), text=_("Format"))
-        notebook.AddPage(page=self._createDecorationsPanel(notebook), text=_("Decorations"))
+        notebook.AddPage(
+            page=self._createExportFormatPanel(notebook),
+            text=_("Format"))
+        notebook.AddPage(
+            page=self._createDecorationsPanel(notebook),
+            text=_("Decorations"))
         mainSizer.Add(item=notebook, proportion=0,
                       flag=wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border=5)
 
@@ -789,8 +957,16 @@ class ExportDialog(wx.Dialog):
     def _createDecorationsPanel(self, notebook):
         panel = wx.Panel(notebook, id=wx.ID_ANY)
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self._createDecorationsList(panel), proportion=0, flag=wx.ALL | wx.EXPAND, border=10)
-        sizer.Add(self._createDecorationsProperties(panel), proportion=0, flag=wx.ALL | wx.EXPAND, border=10)
+        sizer.Add(
+            self._createDecorationsList(panel),
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=10)
+        sizer.Add(
+            self._createDecorationsProperties(panel),
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=10)
         panel.SetSizer(sizer)
         sizer.Fit(panel)
         return panel
@@ -805,7 +981,7 @@ class ExportDialog(wx.Dialog):
         self.listbox.Bind(wx.EVT_LISTBOX, self.OnSelectionChanged)
 
         gridBagSizer.Add(self.listbox, pos=(0, 0), span=(4, 1),
-                         flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
 
         buttonNames = ['time', 'image', 'text']
         buttonLabels = [_("Add time stamp"), _("Add image"), _("Add text")]
@@ -813,13 +989,34 @@ class ExportDialog(wx.Dialog):
         for buttonName, buttonLabel in zip(buttonNames, buttonLabels):
             if buttonName == 'time' and self.temporal == TemporalMode.NONTEMPORAL:
                 continue
-            btn = wx.Button(panel, id=wx.ID_ANY, name=buttonName, label=buttonLabel)
-            btn.Bind(wx.EVT_BUTTON, lambda evt, temp=buttonName: self.OnAddDecoration(evt, temp))
-            gridBagSizer.Add(btn, pos=(i, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+            btn = wx.Button(
+                panel,
+                id=wx.ID_ANY,
+                name=buttonName,
+                label=buttonLabel)
+            btn.Bind(
+                wx.EVT_BUTTON,
+                lambda evt,
+                temp=buttonName: self.OnAddDecoration(
+                    evt,
+                    temp))
+            gridBagSizer.Add(
+                btn,
+                pos=(
+                    i,
+                    1),
+                flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+                border=0)
             i += 1
         removeButton = wx.Button(panel, id=wx.ID_ANY, label=_("Remove"))
         removeButton.Bind(wx.EVT_BUTTON, self.OnRemove)
-        gridBagSizer.Add(removeButton, pos=(i, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            removeButton,
+            pos=(
+                i,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
 
         return gridBagSizer
 
@@ -828,66 +1025,118 @@ class ExportDialog(wx.Dialog):
         # inform label
         self.informBox = wx.BoxSizer(wx.HORIZONTAL)
         if self.temporal == TemporalMode.TEMPORAL:
-            label = _("Add time stamp, image or text decoration by one of the buttons above.")
+            label = _(
+                "Add time stamp, image or text decoration by one of the buttons above.")
         else:
             label = _("Add image or text decoration by one of the buttons above.")
 
         label = wx.StaticText(panel, id=wx.ID_ANY, label=label)
         label.Wrap(400)
-        self.informBox.Add(label, proportion=1, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=5)
-        self.hidevbox.Add(self.informBox, proportion=0, flag=wx.EXPAND | wx.BOTTOM, border=5)
+        self.informBox.Add(
+            label,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
+            border=5)
+        self.hidevbox.Add(
+            self.informBox,
+            proportion=0,
+            flag=wx.EXPAND | wx.BOTTOM,
+            border=5)
 
         # font
         self.fontBox = wx.BoxSizer(wx.HORIZONTAL)
-        self.fontBox.Add(wx.StaticText(panel, id=wx.ID_ANY, label=_("Font settings:")),
-                         proportion=0, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=5)
-        self.sampleLabel = wx.StaticText(panel, id=wx.ID_ANY, label=_("Sample text"))
+        self.fontBox.Add(
+            wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Font settings:")),
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
+            border=5)
+        self.sampleLabel = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Sample text"))
         self.fontBox.Add(self.sampleLabel, proportion=1,
                          flag=wx.ALIGN_CENTER | wx.RIGHT | wx.LEFT, border=5)
         fontButton = wx.Button(panel, id=wx.ID_ANY, label=_("Set font"))
         fontButton.Bind(wx.EVT_BUTTON, self.OnFont)
-        self.fontBox.Add(fontButton, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
-        self.hidevbox.Add(self.fontBox, proportion=0, flag=wx.EXPAND | wx.BOTTOM, border=5)
+        self.fontBox.Add(
+            fontButton,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        self.hidevbox.Add(
+            self.fontBox,
+            proportion=0,
+            flag=wx.EXPAND | wx.BOTTOM,
+            border=5)
 
         # image
         self.imageBox = wx.BoxSizer(wx.HORIZONTAL)
         filetype, ltype = GetImageHandlers(wx.EmptyImage(10, 10))
-        self.browse = filebrowse.FileBrowseButton(parent=panel, id=wx.ID_ANY, fileMask=filetype,
-                                                  labelText=_("Image file:"),
-                                                  dialogTitle=_('Choose image file'),
-                                                  buttonText=_('Browse'),
-                                                  startDirectory=os.getcwd(), fileMode=wx.FD_OPEN,
-                                                  changeCallback=self.OnSetImage)
+        self.browse = filebrowse.FileBrowseButton(
+            parent=panel, id=wx.ID_ANY, fileMask=filetype,
+            labelText=_("Image file:"),
+            dialogTitle=_('Choose image file'),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            fileMode=wx.FD_OPEN, changeCallback=self.OnSetImage)
         self.imageBox.Add(self.browse, proportion=1, flag=wx.EXPAND)
-        self.hidevbox.Add(self.imageBox, proportion=0, flag=wx.EXPAND | wx.BOTTOM, border=5)
+        self.hidevbox.Add(
+            self.imageBox,
+            proportion=0,
+            flag=wx.EXPAND | wx.BOTTOM,
+            border=5)
         # text
         self.textBox = wx.BoxSizer(wx.HORIZONTAL)
-        self.textBox.Add(wx.StaticText(panel, id=wx.ID_ANY, label=_("Text:")),
-                         proportion=0, flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=5)
+        self.textBox.Add(
+            wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Text:")),
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
+            border=5)
         self.textCtrl = wx.TextCtrl(panel, id=wx.ID_ANY)
         self.textCtrl.Bind(wx.EVT_TEXT, self.OnText)
         self.textBox.Add(self.textCtrl, proportion=1, flag=wx.EXPAND)
         self.hidevbox.Add(self.textBox, proportion=0, flag=wx.EXPAND)
 
         self.posBox = self._positionWidget(panel)
-        self.hidevbox.Add(self.posBox, proportion=0, flag=wx.EXPAND | wx.TOP, border=5)
+        self.hidevbox.Add(
+            self.posBox,
+            proportion=0,
+            flag=wx.EXPAND | wx.TOP,
+            border=5)
         return self.hidevbox
 
     def _positionWidget(self, panel):
         grid = wx.GridBagSizer(vgap=5, hgap=5)
-        label = wx.StaticText(panel, id=wx.ID_ANY, label=_("Placement as percentage of"
-                              " screen coordinates (X: 0, Y: 0 is top left):"))
+        label = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_(
+                "Placement as percentage of"
+                " screen coordinates (X: 0, Y: 0 is top left):"))
         label.Wrap(400)
-        self.spinX = wx.SpinCtrl(panel, id=wx.ID_ANY, min=0, max=100, initial=10)
-        self.spinY = wx.SpinCtrl(panel, id=wx.ID_ANY, min=0, max=100, initial=10)
-        self.spinX.Bind(wx.EVT_SPINCTRL, lambda evt, temp='X': self.OnPosition(evt, temp))
-        self.spinY.Bind(wx.EVT_SPINCTRL, lambda evt, temp='Y': self.OnPosition(evt, temp))
-
-        grid.Add(label, pos=(0, 0), span = (1, 4), flag = wx.EXPAND)
+        self.spinX = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=0, max=100, initial=10)
+        self.spinY = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=0, max=100, initial=10)
+        self.spinX.Bind(
+            wx.EVT_SPINCTRL,
+            lambda evt,
+            temp='X': self.OnPosition(
+                evt,
+                temp))
+        self.spinY.Bind(
+            wx.EVT_SPINCTRL,
+            lambda evt,
+            temp='Y': self.OnPosition(
+                evt,
+                temp))
+
+        grid.Add(label, pos=(0, 0), span=(1, 4), flag=wx.EXPAND)
         grid.Add(wx.StaticText(panel, id=wx.ID_ANY, label=_("X:")), pos=(1, 0),
-                 flag = wx.ALIGN_CENTER_VERTICAL)
+                 flag=wx.ALIGN_CENTER_VERTICAL)
         grid.Add(wx.StaticText(panel, id=wx.ID_ANY, label=_("Y:")), pos=(1, 2),
-                 flag = wx.ALIGN_CENTER_VERTICAL)
+                 flag=wx.ALIGN_CENTER_VERTICAL)
         grid.Add(self.spinX, pos=(1, 1))
         grid.Add(self.spinY, pos=(1, 3))
 
@@ -901,12 +1150,28 @@ class ExportDialog(wx.Dialog):
         choices = [_("image sequence"), _("animated GIF"), _("SWF"), _("AVI")]
         self.formatChoice = wx.Choice(parent=panel, id=wx.ID_ANY,
                                       choices=choices)
-        self.formatChoice.Bind(wx.EVT_CHOICE, lambda event: self.ChangeFormat(event.GetSelection()))
-        hSizer.Add(item=wx.StaticText(panel, id=wx.ID_ANY, label=_("Export to:")),
-                   proportion=0, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=2)
-        hSizer.Add(item=self.formatChoice, proportion=1,
-                   flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND | wx.ALL, border=2)
-        borderSizer.Add(item=hSizer, proportion=0, flag=wx.EXPAND | wx.ALL, border=3)
+        self.formatChoice.Bind(
+            wx.EVT_CHOICE,
+            lambda event: self.ChangeFormat(
+                event.GetSelection()))
+        hSizer.Add(
+            item=wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Export to:")),
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=2)
+        hSizer.Add(
+            item=self.formatChoice,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND | wx.ALL,
+            border=2)
+        borderSizer.Add(
+            item=hSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
 
         helpSizer = wx.BoxSizer(wx.HORIZONTAL)
         helpSizer.AddStretchSpacer(1)
@@ -917,92 +1182,138 @@ class ExportDialog(wx.Dialog):
 
         # panel for image sequence
         imSeqPanel = wx.Panel(parent=panel, id=wx.ID_ANY)
-        prefixLabel = wx.StaticText(imSeqPanel, id=wx.ID_ANY, label=_("File prefix:"))
-        self.prefixCtrl = wx.TextCtrl(imSeqPanel, id=wx.ID_ANY, value=_("animation_"))
-        formatLabel = wx.StaticText(imSeqPanel, id=wx.ID_ANY, label=_("File format:"))
+        prefixLabel = wx.StaticText(
+            imSeqPanel, id=wx.ID_ANY, label=_("File prefix:"))
+        self.prefixCtrl = wx.TextCtrl(
+            imSeqPanel, id=wx.ID_ANY, value=_("animation_"))
+        formatLabel = wx.StaticText(
+            imSeqPanel, id=wx.ID_ANY, label=_("File format:"))
         imageTypes = ['PNG', 'JPEG', 'GIF', 'TIFF', 'PPM', 'BMP']
         self.imSeqFormatChoice = wx.Choice(imSeqPanel, choices=imageTypes)
         self.imSeqFormatChoice.SetSelection(0)
-        self.dirBrowse = filebrowse.DirBrowseButton(parent=imSeqPanel, id=wx.ID_ANY,
-                                                    labelText=_("Directory:"),
-                                                    dialogTitle=_("Choose directory for export"),
-                                                    buttonText=_("Browse"),
-                                                    startDirectory=os.getcwd())
+        self.dirBrowse = filebrowse.DirBrowseButton(
+            parent=imSeqPanel, id=wx.ID_ANY, labelText=_("Directory:"),
+            dialogTitle=_("Choose directory for export"),
+            buttonText=_("Browse"),
+            startDirectory=os.getcwd())
 
         dirGridSizer = wx.GridBagSizer(hgap=5, vgap=5)
-        dirGridSizer.Add(prefixLabel, pos=(0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        dirGridSizer.Add(self.prefixCtrl, pos=(0, 1), flag = wx.EXPAND)
-        dirGridSizer.Add(formatLabel, pos=(1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        dirGridSizer.Add(self.imSeqFormatChoice, pos=(1, 1), flag = wx.EXPAND)
-        dirGridSizer.Add(self.dirBrowse, pos=(2, 0), flag = wx.EXPAND, span = (1, 2))
+        dirGridSizer.Add(
+            prefixLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        dirGridSizer.Add(self.prefixCtrl, pos=(0, 1), flag=wx.EXPAND)
+        dirGridSizer.Add(
+            formatLabel, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        dirGridSizer.Add(self.imSeqFormatChoice, pos=(1, 1), flag=wx.EXPAND)
+        dirGridSizer.Add(
+            self.dirBrowse, pos=(
+                2, 0), flag=wx.EXPAND, span=(
+                1, 2))
         dirGridSizer.AddGrowableCol(1)
         imSeqPanel.SetSizer(dirGridSizer)
         dirGridSizer.Fit(imSeqPanel)
 
-        self.formatPanelSizer.Add(item=imSeqPanel, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        self.formatPanelSizer.Add(
+            item=imSeqPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self.formatPanels.append(imSeqPanel)
 
         # panel for gif
         gifPanel = wx.Panel(parent=panel, id=wx.ID_ANY)
 
-        self.gifBrowse = filebrowse.FileBrowseButton(parent=gifPanel, id=wx.ID_ANY,
-                                                     fileMask="GIF file (*.gif)|*.gif",
-                                                     labelText=_("GIF file:"),
-                                                     dialogTitle=_("Choose file to save animation"),
-                                                     buttonText=_("Browse"),
-                                                     startDirectory=os.getcwd(), fileMode=wx.FD_SAVE)
+        self.gifBrowse = filebrowse.FileBrowseButton(
+            parent=gifPanel,
+            id=wx.ID_ANY,
+            fileMask="GIF file (*.gif)|*.gif",
+            labelText=_("GIF file:"),
+            dialogTitle=_("Choose file to save animation"),
+            buttonText=_("Browse"),
+            startDirectory=os.getcwd(),
+            fileMode=wx.FD_SAVE)
         gifGridSizer = wx.GridBagSizer(hgap=5, vgap=5)
         gifGridSizer.AddGrowableCol(0)
-        gifGridSizer.Add(self.gifBrowse, pos=(0, 0), flag = wx.EXPAND)
+        gifGridSizer.Add(self.gifBrowse, pos=(0, 0), flag=wx.EXPAND)
         gifPanel.SetSizer(gifGridSizer)
         gifGridSizer.Fit(gifPanel)
 
-        self.formatPanelSizer.Add(item=gifPanel, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        self.formatPanelSizer.Add(
+            item=gifPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self.formatPanels.append(gifPanel)
 
         # panel for swf
         swfPanel = wx.Panel(parent=panel, id=wx.ID_ANY)
-        self.swfBrowse = filebrowse.FileBrowseButton(parent=swfPanel, id=wx.ID_ANY,
-                                                     fileMask="SWF file (*.swf)|*.swf",
-                                                     labelText=_("SWF file:"),
-                                                     dialogTitle=_("Choose file to save animation"),
-                                                     buttonText=_("Browse"),
-                                                     startDirectory=os.getcwd(), fileMode=wx.FD_SAVE)
+        self.swfBrowse = filebrowse.FileBrowseButton(
+            parent=swfPanel,
+            id=wx.ID_ANY,
+            fileMask="SWF file (*.swf)|*.swf",
+            labelText=_("SWF file:"),
+            dialogTitle=_("Choose file to save animation"),
+            buttonText=_("Browse"),
+            startDirectory=os.getcwd(),
+            fileMode=wx.FD_SAVE)
         swfGridSizer = wx.GridBagSizer(hgap=5, vgap=5)
         swfGridSizer.AddGrowableCol(0)
-        swfGridSizer.Add(self.swfBrowse, pos=(0, 0), flag = wx.EXPAND)
+        swfGridSizer.Add(self.swfBrowse, pos=(0, 0), flag=wx.EXPAND)
         swfPanel.SetSizer(swfGridSizer)
         swfGridSizer.Fit(swfPanel)
 
-        self.formatPanelSizer.Add(item=swfPanel, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        self.formatPanelSizer.Add(
+            item=swfPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self.formatPanels.append(swfPanel)
 
         # panel for avi
         aviPanel = wx.Panel(parent=panel, id=wx.ID_ANY)
         ffmpeg = gcore.find_program('ffmpeg', '--help')
         if not ffmpeg:
-            warning = _("Program 'ffmpeg' was not found.\nPlease install it first "
-                        "and make sure\nit's in the PATH variable.")
+            warning = _(
+                "Program 'ffmpeg' was not found.\nPlease install it first "
+                "and make sure\nit's in the PATH variable.")
             warningLabel = wx.StaticText(parent=aviPanel, label=warning)
             warningLabel.SetForegroundColour(wx.RED)
-        self.aviBrowse = filebrowse.FileBrowseButton(parent=aviPanel, id=wx.ID_ANY,
-                                                     fileMask="AVI file (*.avi)|*.avi",
-                                                     labelText=_("AVI file:"),
-                                                     dialogTitle=_("Choose file to save animation"),
-                                                     buttonText=_("Browse"),
-                                                     startDirectory=os.getcwd(), fileMode=wx.FD_SAVE)
-        encodingLabel = wx.StaticText(parent=aviPanel, id=wx.ID_ANY, label=_("Video codec:"))
-        self.encodingText = wx.TextCtrl(parent=aviPanel, id=wx.ID_ANY, value='mpeg4')
-        optionsLabel = wx.StaticText(parent=aviPanel, label=_("Additional options:"))
+        self.aviBrowse = filebrowse.FileBrowseButton(
+            parent=aviPanel,
+            id=wx.ID_ANY,
+            fileMask="AVI file (*.avi)|*.avi",
+            labelText=_("AVI file:"),
+            dialogTitle=_("Choose file to save animation"),
+            buttonText=_("Browse"),
+            startDirectory=os.getcwd(),
+            fileMode=wx.FD_SAVE)
+        encodingLabel = wx.StaticText(
+            parent=aviPanel,
+            id=wx.ID_ANY,
+            label=_("Video codec:"))
+        self.encodingText = wx.TextCtrl(
+            parent=aviPanel, id=wx.ID_ANY, value='mpeg4')
+        optionsLabel = wx.StaticText(
+            parent=aviPanel, label=_("Additional options:"))
         self.optionsText = wx.TextCtrl(parent=aviPanel)
-        self.optionsText.SetToolTipString(_("Consider adding '-sameq' or '-qscale 1' "
-                                            "if not satisfied with video quality. "
-                                            "Options depend on ffmpeg version."))
+        self.optionsText.SetToolTipString(
+            _(
+                "Consider adding '-sameq' or '-qscale 1' "
+                "if not satisfied with video quality. "
+                "Options depend on ffmpeg version."))
         aviGridSizer = wx.GridBagSizer(hgap=5, vgap=5)
-        aviGridSizer.Add(self.aviBrowse, pos=(0, 0), span = (1, 2), flag = wx.EXPAND)
-        aviGridSizer.Add(encodingLabel, pos=(1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        aviGridSizer.Add(self.encodingText, pos=(1, 1), flag = wx.EXPAND)
-        aviGridSizer.Add(optionsLabel, pos=(2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        aviGridSizer.Add(
+            self.aviBrowse, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.EXPAND)
+        aviGridSizer.Add(
+            encodingLabel, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        aviGridSizer.Add(self.encodingText, pos=(1, 1), flag=wx.EXPAND)
+        aviGridSizer.Add(
+            optionsLabel, pos=(2, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
         aviGridSizer.Add(self.optionsText, pos=(2, 1), flag=wx.EXPAND)
         if not ffmpeg:
             aviGridSizer.Add(warningLabel, pos=(3, 0), span=(1, 2),
@@ -1012,14 +1323,28 @@ class ExportDialog(wx.Dialog):
         aviPanel.SetSizer(aviGridSizer)
         aviGridSizer.Fit(aviPanel)
 
-        self.formatPanelSizer.Add(item=aviPanel, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        self.formatPanelSizer.Add(
+            item=aviPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self.formatPanels.append(aviPanel)
 
         fpsSizer = wx.BoxSizer(wx.HORIZONTAL)
         fps = 1000 / self.timeTick
-        fpsSizer.Add(wx.StaticText(panel, id=wx.ID_ANY, label=_("Current frame rate: %.2f fps") % fps),
-                     proportion=1, flag=wx.EXPAND)
-        borderSizer.Add(fpsSizer, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        fpsSizer.Add(
+            wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Current frame rate: %.2f fps") %
+                fps),
+            proportion=1,
+            flag=wx.EXPAND)
+        borderSizer.Add(
+            fpsSizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
 
         panel.SetSizer(borderSizer)
         borderSizer.Fit(panel)
@@ -1078,7 +1403,13 @@ class ExportDialog(wx.Dialog):
             imageInfo = {'name': name, 'file': '', 'pos': [10, 10]}
             self.decorations.append(imageInfo)
         elif name == 'text':
-            textInfo = {'name': name, 'font': self.GetFont(), 'text': '', 'pos': [10, 10]}
+            textInfo = {
+                'name': name,
+                'font': self.GetFont(),
+                'text': '',
+                'pos': [
+                    10,
+                    10]}
             self.decorations.append(textInfo)
 
         self._updateListBox()
@@ -1135,18 +1466,26 @@ class ExportDialog(wx.Dialog):
             if decor['name'] == 'image':
                 if not os.path.exists(decor['file']):
                     if decor['file']:
-                        GError(parent=self, message=_("File %s not found.") % decor['file'])
+                        GError(
+                            parent=self,
+                            message=_("File %s not found.") %
+                            decor['file'])
                     else:
-                        GError(parent=self, message=_("Decoration image file is missing."))
+                        GError(parent=self,
+                               message=_("Decoration image file is missing."))
                     return
 
         if self.formatChoice.GetSelection() == 0:
             name = self.dirBrowse.GetValue()
             if not os.path.exists(name):
                 if name:
-                    GError(parent=self, message=_("Directory %s not found.") % name)
+                    GError(
+                        parent=self,
+                        message=_("Directory %s not found.") %
+                        name)
                 else:
-                    GError(parent=self, message=_("Export directory is missing."))
+                    GError(parent=self, message=_(
+                        "Export directory is missing."))
                 return
         elif self.formatChoice.GetSelection() == 1:
             if not self.gifBrowse.GetValue():
@@ -1191,7 +1530,10 @@ class ExportDialog(wx.Dialog):
 
     def _updateListBox(self):
         self.listbox.Clear()
-        names = {'time': _("Time stamp"), 'image': _("Image"), 'text': _("Text")}
+        names = {
+            'time': _("Time stamp"),
+            'image': _("Image"),
+            'text': _("Text")}
         for decor in self.decorations:
             self.listbox.Append(names[decor['name']], clientData=decor)
 
@@ -1208,11 +1550,13 @@ class AnimSimpleLayerManager(SimpleLayerManager):
     """Simple layer manager for animation tool.
     Allows adding space-time dataset or series of maps.
     """
+
     def __init__(self, parent, layerList,
                  lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_VECTOR |
                  SIMPLE_LMGR_TB_TOP | SIMPLE_LMGR_STDS,
                  toolbarCls=AnimSimpleLmgrToolbar, modal=True):
-        SimpleLayerManager.__init__(self, parent, layerList, lmgrStyle, toolbarCls, modal)
+        SimpleLayerManager.__init__(
+            self, parent, layerList, lmgrStyle, toolbarCls, modal)
         self._3dActivated = False
 
     def OnAddStds(self, event):
@@ -1225,7 +1569,8 @@ class AnimSimpleLayerManager(SimpleLayerManager):
         event.Skip()
 
     def SetStdsProperties(self, layer):
-        dlg = AddTemporalLayerDialog(parent=self, layer=layer, volume=self._3dActivated)
+        dlg = AddTemporalLayerDialog(
+            parent=self, layer=layer, volume=self._3dActivated)
         # first get hidden property, it's altered afterwards
         hidden = layer.hidden
         dlg.CenterOnParent()
@@ -1235,7 +1580,9 @@ class AnimSimpleLayerManager(SimpleLayerManager):
                 signal = self.layerAdded
             else:
                 signal = self.cmdChanged
-            signal.emit(index=self._layerList.GetLayerIndex(layer), layer=layer)
+            signal.emit(
+                index=self._layerList.GetLayerIndex(layer),
+                layer=layer)
         else:
             if hidden:
                 self._layerList.RemoveLayer(layer)
@@ -1246,9 +1593,8 @@ class AnimSimpleLayerManager(SimpleLayerManager):
     def _layerChangeProperties(self, layer):
         """Opens new module dialog or recycles it."""
         if not hasattr(layer, 'maps'):
-            GUI(parent=self, giface=None,
-                modal=self._modal).ParseCommand(cmd=layer.cmd,
-                                                completed=(self.GetOptData, layer, ''))
+            GUI(parent=self, giface=None, modal=self._modal).ParseCommand(
+                cmd=layer.cmd, completed=(self.GetOptData, layer, ''))
         else:
             self.SetStdsProperties(layer)
 
@@ -1261,6 +1607,7 @@ class AnimSimpleLayerManager(SimpleLayerManager):
 
 class AddTemporalLayerDialog(wx.Dialog):
     """Dialog for adding space-time dataset/ map series."""
+
     def __init__(self, parent, layer, volume=False,
                  title=_("Add space-time dataset layer")):
         wx.Dialog.__init__(self, parent=parent, title=title)
@@ -1271,12 +1618,19 @@ class AddTemporalLayerDialog(wx.Dialog):
         self._cmd = None
 
         self.tselect = Select(parent=self, type='strds')
-        iconTheme = UserSettings.Get(group='appearance', key='iconTheme', subkey='type')
-        bitmapPath = os.path.join(globalvar.ICONDIR, iconTheme, 'layer-open.png')
+        iconTheme = UserSettings.Get(
+            group='appearance',
+            key='iconTheme',
+            subkey='type')
+        bitmapPath = os.path.join(
+            globalvar.ICONDIR,
+            iconTheme,
+            'layer-open.png')
         if os.path.isfile(bitmapPath) and os.path.getsize(bitmapPath):
             bitmap = wx.Bitmap(name=bitmapPath)
         else:
-            bitmap = wx.ArtProvider.GetBitmap(id=wx.ART_MISSING_IMAGE, client=wx.ART_TOOLBAR)
+            bitmap = wx.ArtProvider.GetBitmap(
+                id=wx.ART_MISSING_IMAGE, client=wx.ART_TOOLBAR)
         self.addManyMapsButton = wx.BitmapButton(self, bitmap=bitmap)
         self.addManyMapsButton.Bind(wx.EVT_BUTTON, self._onAddMaps)
 
@@ -1330,11 +1684,16 @@ class AddTemporalLayerDialog(wx.Dialog):
         typeSizer.Add(self.tchoice)
         bodySizer.Add(typeSizer, flag=wx.EXPAND | wx.BOTTOM, border=5)
 
-        selectSizer.Add(self.tselect, flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border=5)
+        selectSizer.Add(self.tselect, flag=wx.RIGHT |
+                        wx.ALIGN_CENTER_VERTICAL, border=5)
         selectSizer.Add(self.addManyMapsButton, flag=wx.EXPAND)
         bodySizer.Add(selectSizer, flag=wx.BOTTOM, border=5)
         bodySizer.Add(self.editBtn, flag=wx.BOTTOM, border=5)
-        mainSizer.Add(bodySizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
+        mainSizer.Add(
+            bodySizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=10)
 
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.okBtn)
@@ -1401,8 +1760,9 @@ class AddTemporalLayerDialog(wx.Dialog):
 
     def _onAddMaps(self, event):
         dlg = MapLayersDialog(self, title=_("Select raster/vector maps."))
-        dlg.applyAddingMapLayers.connect(lambda mapLayers:
-                                         self.tselect.SetValue(','.join(mapLayers)))
+        dlg.applyAddingMapLayers.connect(
+            lambda mapLayers: self.tselect.SetValue(
+                ','.join(mapLayers)))
         if self._mapType == 'raster':
             index = 0
         elif self._mapType == 'vector':
@@ -1422,12 +1782,13 @@ class AddTemporalLayerDialog(wx.Dialog):
     def _onProperties(self, event):
         self._checkInput()
         if self._cmd:
-            GUI(parent=self, show=True, modal=True).ParseCommand(cmd=self._cmd,
-                                                                 completed=(self._getOptData, '', ''))
+            GUI(parent=self, show=True, modal=True).ParseCommand(
+                cmd=self._cmd, completed=(self._getOptData, '', ''))
 
     def _checkInput(self):
         if not self.tselect.GetValue():
-            GMessage(parent=self, message=_("Please select maps or dataset first."))
+            GMessage(parent=self, message=_(
+                "Please select maps or dataset first."))
             return
 
         if not self._cmd:
@@ -1455,15 +1816,18 @@ class AddTemporalLayerDialog(wx.Dialog):
 
 class PreferencesDialog(PreferencesBaseDialog):
     """Animation preferences dialog"""
+
     def __init__(self, parent, giface, title=_("Animation Tool settings"),
                  settings=UserSettings):
-        PreferencesBaseDialog.__init__(self, parent=parent, giface=giface, title=title,
-                                       settings=settings, size=(-1, 270))
+        PreferencesBaseDialog.__init__(
+            self, parent=parent, giface=giface, title=title, settings=settings,
+            size=(-1, 270))
         self.formatChanged = Signal('PreferencesDialog.formatChanged')
 
         self._timeFormats = ['%Y-%m-%d %H:%M:%S',  # 2013-12-29 11:16:26
                              '%Y-%m-%d',  # 2013-12-29
-                             '%c',  # Sun Dec 29 11:16:26 2013 (locale-dependent)
+                             '%c',
+                             # Sun Dec 29 11:16:26 2013 (locale-dependent)
                              '%x',  # 12/29/13 (locale-dependent)
                              '%X',  # 11:16:26 (locale-dependent)
                              '%b %d, %Y',  # Dec 29, 2013
@@ -1493,60 +1857,103 @@ class PreferencesDialog(PreferencesBaseDialog):
         gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Background color:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        color = csel.ColourSelect(parent=panel,
-                                  colour=UserSettings.Get(group='animation',
-                                                          key='bgcolor', subkey='color'),
-                                  size=globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Background color:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        color = csel.ColourSelect(
+            parent=panel,
+            colour=UserSettings.Get(
+                group='animation',
+                key='bgcolor',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
         self.winId['animation:bgcolor:color'] = color.GetId()
 
         gridSizer.Add(item=color, pos=(row, 1), flag=wx.ALIGN_RIGHT)
 
         row += 1
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Number of parallel processes:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        # when running for the first time, set nprocs based on the number of processes
-        if UserSettings.Get(group='animation', key='nprocs', subkey='value') == -1:
-            UserSettings.Set(group='animation', key='nprocs', subkey='value', value=getCpuCount())
-        nprocs = wx.SpinCtrl(parent=panel,
-                             initial=UserSettings.Get(group='animation', key='nprocs', subkey='value'))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Number of parallel processes:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        # when running for the first time, set nprocs based on the number of
+        # processes
+        if UserSettings.Get(group='animation', key='nprocs',
+                            subkey='value') == -1:
+            UserSettings.Set(
+                group='animation',
+                key='nprocs',
+                subkey='value',
+                value=getCpuCount())
+        nprocs = wx.SpinCtrl(
+            parent=panel,
+            initial=UserSettings.Get(
+                group='animation',
+                key='nprocs',
+                subkey='value'))
         nprocs.SetName('GetValue')
         self.winId['animation:nprocs:value'] = nprocs.GetId()
 
         gridSizer.Add(item=nprocs, pos=(row, 1), flag=wx.ALIGN_RIGHT)
 
         row += 1
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Text foreground color:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        color = csel.ColourSelect(parent=panel,
-                                  colour=UserSettings.Get(group='animation',
-                                                          key='font', subkey='fgcolor'),
-                                  size=globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Text foreground color:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        color = csel.ColourSelect(
+            parent=panel,
+            colour=UserSettings.Get(
+                group='animation',
+                key='font',
+                subkey='fgcolor'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
         self.winId['animation:font:fgcolor'] = color.GetId()
 
         gridSizer.Add(item=color, pos=(row, 1), flag=wx.ALIGN_RIGHT)
 
         row += 1
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Text background color:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        color = csel.ColourSelect(parent=panel,
-                                  colour=UserSettings.Get(group='animation',
-                                                          key='font', subkey='bgcolor'),
-                                  size=globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Text background color:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        color = csel.ColourSelect(
+            parent=panel,
+            colour=UserSettings.Get(
+                group='animation',
+                key='font',
+                subkey='bgcolor'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
         self.winId['animation:font:bgcolor'] = color.GetId()
 
         gridSizer.Add(item=color, pos=(row, 1), flag=wx.ALIGN_RIGHT)
 
         gridSizer.AddGrowableCol(1)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=3)
         border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
         panel.SetSizer(border)
 
@@ -1563,47 +1970,77 @@ class PreferencesDialog(PreferencesBaseDialog):
         gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
         row = 0
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Absolute time format:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Absolute time format:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
         self.tempFormat = wx.ComboBox(parent=panel, name='GetValue')
         self.tempFormat.SetItems(self._timeFormats)
         self.tempFormat.SetValue(self._initFormat)
         self.winId['animation:temporal:format'] = self.tempFormat.GetId()
         gridSizer.Add(item=self.tempFormat, pos=(row, 1), flag=wx.ALIGN_RIGHT)
         self.infoTimeLabel = wx.StaticText(parent=panel)
-        self.tempFormat.Bind(wx.EVT_COMBOBOX, lambda evt: self._setTimeFormat(self.tempFormat.GetValue()))
-        self.tempFormat.Bind(wx.EVT_TEXT, lambda evt: self._setTimeFormat(self.tempFormat.GetValue()))
-        self.tempFormat.SetToolTipString(_("Click and then press key up or down to preview "
-                                           "different date and time formats. "
-                                           "Type custom format string."))
+        self.tempFormat.Bind(
+            wx.EVT_COMBOBOX,
+            lambda evt: self._setTimeFormat(
+                self.tempFormat.GetValue()))
+        self.tempFormat.Bind(
+            wx.EVT_TEXT, lambda evt: self._setTimeFormat(
+                self.tempFormat.GetValue()))
+        self.tempFormat.SetToolTipString(
+            _(
+                "Click and then press key up or down to preview "
+                "different date and time formats. "
+                "Type custom format string."))
         row += 1
         gridSizer.Add(item=self.infoTimeLabel, pos=(row, 0), span=(1, 2),
                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
         self._setTimeFormat(self.tempFormat.GetValue())
 
         row += 1
-        link = wx.HyperlinkCtrl(panel, id=wx.ID_ANY, label=_("Learn more about formatting options"),
-                                url="http://docs.python.org/2/library/datetime.html#"
-                                "strftime-and-strptime-behavior")
-        link.SetNormalColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
-        link.SetVisitedColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
+        link = wx.HyperlinkCtrl(
+            panel, id=wx.ID_ANY,
+            label=_("Learn more about formatting options"),
+            url="http://docs.python.org/2/library/datetime.html#"
+            "strftime-and-strptime-behavior")
+        link.SetNormalColour(
+            wx.SystemSettings_GetColour(
+                wx.SYS_COLOUR_GRAYTEXT))
+        link.SetVisitedColour(
+            wx.SystemSettings_GetColour(
+                wx.SYS_COLOUR_GRAYTEXT))
         gridSizer.Add(item=link, pos=(row, 0), span=(1, 2),
                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
 
         row += 2
-        noDataCheck = wx.CheckBox(panel, label=_("Display instances with no data"))
-        noDataCheck.SetToolTipString(_("When animating instant-based data which have irregular timestamps "
-                                       "you can display 'no data frame' (checked option) or "
-                                       "keep last frame."))
-        noDataCheck.SetValue(self.settings.Get(group='animation', key='temporal',
-                                               subkey=['nodata', 'enable']))
+        noDataCheck = wx.CheckBox(
+            panel, label=_("Display instances with no data"))
+        noDataCheck.SetToolTipString(
+            _(
+                "When animating instant-based data which have irregular timestamps "
+                "you can display 'no data frame' (checked option) or "
+                "keep last frame."))
+        noDataCheck.SetValue(
+            self.settings.Get(
+                group='animation',
+                key='temporal',
+                subkey=[
+                    'nodata',
+                    'enable']))
         self.winId['animation:temporal:nodata:enable'] = noDataCheck.GetId()
         gridSizer.Add(item=noDataCheck, pos=(row, 0), span=(1, 2),
                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
 
         gridSizer.AddGrowableCol(1)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=3)
         border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
         panel.SetSizer(border)
 
diff --git a/gui/wxpython/animation/frame.py b/gui/wxpython/animation/frame.py
index 5b186d8..f713159 100644
--- a/gui/wxpython/animation/frame.py
+++ b/gui/wxpython/animation/frame.py
@@ -47,6 +47,7 @@ gcore.set_raise_on_error(True)
 
 
 class AnimationFrame(wx.Frame):
+
     def __init__(self, parent, giface, title=_("GRASS GIS Animation tool"),
                  rasters=None, timeseries=None):
         wx.Frame.__init__(self, parent, title=title,
@@ -55,26 +56,35 @@ class AnimationFrame(wx.Frame):
         self.SetClientSize(self.GetSize())
         self.iconsize = (16, 16)
 
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_map.ico'), wx.BITMAP_TYPE_ICO))
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_map.ico'),
+                wx.BITMAP_TYPE_ICO))
 
         # Make sure the temporal database exists
         tgis.init()
 
-        # create temporal directory and ensure it's deleted after programs ends (stored in MAPSET/.tmp/)
+        # create temporal directory and ensure it's deleted after programs ends
+        # (stored in MAPSET/.tmp/)
         global TMP_DIR
         TMP_DIR = gcore.tempdir()
 
         self.animations = [Animation() for i in range(MAX_COUNT)]
         self.windows = []
-        self.animationPanel = AnimationsPanel(self, self.windows, initialCount=MAX_COUNT)
+        self.animationPanel = AnimationsPanel(
+            self, self.windows, initialCount=MAX_COUNT)
         bitmapPool = BitmapPool()
         mapFilesPool = MapFilesPool()
 
         self._progressDlg = None
         self._progressDlgMax = None
 
-        self.provider = BitmapProvider(bitmapPool=bitmapPool,
-                                       mapFilesPool=mapFilesPool, tempDir=TMP_DIR)
+        self.provider = BitmapProvider(
+            bitmapPool=bitmapPool,
+            mapFilesPool=mapFilesPool,
+            tempDir=TMP_DIR)
         self.animationSliders = {}
         self.animationSliders['nontemporal'] = SimpleAnimationSlider(self)
         self.animationSliders['temporal'] = TimeAnimationSlider(self)
@@ -91,7 +101,8 @@ class AnimationFrame(wx.Frame):
             self.provider.renderingStarted.connect(self._showRenderingProgress)
             self.provider.renderingContinues.connect(self._updateProgress)
             self.provider.renderingFinished.connect(self._closeProgress)
-            self.provider.compositionStarted.connect(self._showRenderingProgress)
+            self.provider.compositionStarted.connect(
+                self._showRenderingProgress)
             self.provider.compositionContinues.connect(self._updateProgress)
             self.provider.compositionFinished.connect(self._closeProgress)
 
@@ -126,9 +137,12 @@ class AnimationFrame(wx.Frame):
                           Floatable(False).BestSize((-1, -1)).
                           CloseButton(False).DestroyOnClose(True).Layer(0))
         for name, slider in self.animationSliders.iteritems():
-            self._mgr.AddPane(slider, wx.aui.AuiPaneInfo().PaneBorder(False).Name('slider_' + name).
-                              Layer(1).CaptionVisible(False).BestSize(slider.GetBestSize()).
-                              DestroyOnClose(True).CloseButton(False).Bottom())
+            self._mgr.AddPane(
+                slider,
+                wx.aui.AuiPaneInfo().PaneBorder(False).Name(
+                    'slider_' +
+                    name). Layer(1).CaptionVisible(False).BestSize(
+                    slider.GetBestSize()). DestroyOnClose(True).CloseButton(False).Bottom())
             self._mgr.GetPane('slider_' + name).Hide()
 
     def _addToolbar(self, name):
@@ -159,7 +173,8 @@ class AnimationFrame(wx.Frame):
                               BottomDockable(True).TopDockable(True).
                               CloseButton(False).Layer(2).Row(1).
                               BestSize((self.toolbars['animationToolbar'].GetBestSize())))
-            self.controller.SetAnimationToolbar(self.toolbars['animationToolbar'])
+            self.controller.SetAnimationToolbar(
+                self.toolbars['animationToolbar'])
         elif name == 'miscToolbar':
             self.toolbars[name] = MiscToolbar(self)
             self._mgr.AddPane(self.toolbars[name],
@@ -245,9 +260,10 @@ class AnimationFrame(wx.Frame):
             else:
                 win.Show()
         else:  # start
-            win = SpeedDialog(self, temporalMode=self.controller.GetTemporalMode(),
-                              timeGranularity=self.controller.GetTimeGranularity(),
-                              initialSpeed=self.controller.timeTick)
+            win = SpeedDialog(
+                self, temporalMode=self.controller.GetTemporalMode(),
+                timeGranularity=self.controller.GetTimeGranularity(),
+                initialSpeed=self.controller.timeTick)
             win.CenterOnParent()
             self.dialogs['speed'] = win
             win.speedChanged.connect(self.ChangeSpeed)
@@ -260,13 +276,14 @@ class AnimationFrame(wx.Frame):
         self.controller.Reload()
 
     def _showRenderingProgress(self, count):
-        # the message is not really visible, it's there for the initial dlg size
-        self._progressDlg = wx.ProgressDialog(title=_("Loading data"),
-                                              message="Loading data started, please be patient.",
-                                              maximum=count,
-                                              parent=self,
-                                              style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL |
-                                              wx.PD_AUTO_HIDE | wx.PD_SMOOTH)
+        # the message is not really visible, it's there for the initial dlg
+        # size
+        self._progressDlg = wx.ProgressDialog(
+            title=_("Loading data"),
+            message="Loading data started, please be patient.",
+            maximum=count,
+            parent=self,
+            style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_SMOOTH)
         self._progressDlgMax = count
 
     def _updateProgress(self, current, text):
@@ -296,7 +313,8 @@ class AnimationFrame(wx.Frame):
         if not self.dialogs['preferences']:
             dlg = PreferencesDialog(parent=self, giface=self._giface)
             self.dialogs['preferences'] = dlg
-            dlg.formatChanged.connect(lambda: self.controller.UpdateAnimations())
+            dlg.formatChanged.connect(
+                lambda: self.controller.UpdateAnimations())
             dlg.CenterOnParent()
 
         self.dialogs['preferences'].ShowModal()
@@ -308,7 +326,7 @@ class AnimationFrame(wx.Frame):
 
     def OnCloseWindow(self, event):
         if self.controller.timer.IsRunning():
-                self.controller.timer.Stop()
+            self.controller.timer.Stop()
         CleanUp(TMP_DIR)()
         self.Destroy()
 
@@ -321,6 +339,7 @@ class AnimationFrame(wx.Frame):
 
 
 class AnimationsPanel(wx.Panel):
+
     def __init__(self, parent, windows, initialCount=4):
         wx.Panel.__init__(self, parent, id=wx.ID_ANY, style=wx.NO_BORDER)
         self.shown = []
@@ -361,6 +380,7 @@ class AnimationsPanel(wx.Panel):
 
 
 class AnimationSliderBase(wx.Panel):
+
     def __init__(self, parent):
         wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
         self.label1 = wx.StaticText(self, id=wx.ID_ANY)
@@ -449,6 +469,7 @@ class AnimationSliderBase(wx.Panel):
 
 
 class SimpleAnimationSlider(AnimationSliderBase):
+
     def __init__(self, parent):
         AnimationSliderBase.__init__(self, parent)
 
@@ -461,7 +482,11 @@ class SimpleAnimationSlider(AnimationSliderBase):
                  flag=wx.ALIGN_CENTER | wx.LEFT, border=5)
         hbox.Add(item=self.label1, proportion=0,
                  flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, border=5)
-        hbox.Add(item=self.slider, proportion=1, flag=wx.ALIGN_CENTER | wx.EXPAND, border=0)
+        hbox.Add(
+            item=self.slider,
+            proportion=1,
+            flag=wx.ALIGN_CENTER | wx.EXPAND,
+            border=0)
         self.SetSizerAndFit(hbox)
 
     def _setFrames(self, count):
@@ -483,6 +508,7 @@ class SimpleAnimationSlider(AnimationSliderBase):
 
 
 class TimeAnimationSlider(AnimationSliderBase):
+
     def __init__(self, parent):
         AnimationSliderBase.__init__(self, parent)
         self.timeLabels = []
@@ -510,7 +536,11 @@ class TimeAnimationSlider(AnimationSliderBase):
         vbox.Add(item=hbox, proportion=0, flag=wx.EXPAND, border=0)
 
         hbox = wx.BoxSizer(wx.HORIZONTAL)
-        hbox.Add(item=self.slider, proportion=1, flag=wx.ALIGN_CENTER | wx.EXPAND, border=0)
+        hbox.Add(
+            item=self.slider,
+            proportion=1,
+            flag=wx.ALIGN_CENTER | wx.EXPAND,
+            border=0)
         vbox.Add(item=hbox, proportion=0, flag=wx.EXPAND, border=0)
 
         self._setTemporalType()
@@ -572,8 +602,10 @@ class TimeAnimationSlider(AnimationSliderBase):
         start = self.timeLabels[index][0]
         if self.timeLabels[index][1]:  # interval
             if self.temporalType == TemporalType.ABSOLUTE:
-                label = _("%(from)s %(dash)s %(to)s") % \
-                    {'from': start, 'dash': u"\u2013", 'to': self.timeLabels[index][1]}
+                label = _("%(from)s %(dash)s %(to)s") % {
+                    'from': start,
+                    'dash': u"\u2013",
+                    'to': self.timeLabels[index][1]}
             else:
                 label = _("to %(to)s") % {'to': self.timeLabels[index][1]}
         else:
diff --git a/gui/wxpython/animation/g.gui.animation.html b/gui/wxpython/animation/g.gui.animation.html
index 2108c2d..1fc1d0c 100644
--- a/gui/wxpython/animation/g.gui.animation.html
+++ b/gui/wxpython/animation/g.gui.animation.html
@@ -97,4 +97,4 @@ Anna Kratochvilova,
 <a href="http://www.cvut.cz">Czech Technical University in Prague</a>, Czech Republic
 
 <p>
-<i>$Date: 2014-12-26 12:02:19 +0100 (Fri, 26 Dec 2014) $</i>
+<i>$Date: 2014-12-26 12:01:43 +0100 (Fri, 26 Dec 2014) $</i>
diff --git a/gui/wxpython/animation/g.gui.animation.py b/gui/wxpython/animation/g.gui.animation.py
index ae5de9d..d904323 100644
--- a/gui/wxpython/animation/g.gui.animation.py
+++ b/gui/wxpython/animation/g.gui.animation.py
@@ -61,6 +61,10 @@ def main():
     # to avoid issues when only interface is needed
     import grass.temporal as tgis
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.globalvar import CheckWxVersion
     from core.utils import _
     from core.giface import StandaloneGrassInterface
@@ -129,7 +133,8 @@ def main():
     frame.Show()
     if len(layerList) >= 1:
         # CallAfter added since it was crashing with wxPython 3 gtk
-        wx.CallAfter(frame.SetAnimations, [layerList] + [None] * (MAX_COUNT - 1))
+        wx.CallAfter(frame.SetAnimations,
+                     [layerList] + [None] * (MAX_COUNT - 1))
     app.MainLoop()
 
 if __name__ == '__main__':
diff --git a/gui/wxpython/animation/mapwindow.py b/gui/wxpython/animation/mapwindow.py
index 79be852..e0e30db 100644
--- a/gui/wxpython/animation/mapwindow.py
+++ b/gui/wxpython/animation/mapwindow.py
@@ -35,10 +35,11 @@ class BufferedWindow(wx.Window):
     SaveToFile(self, file_name, file_type) method.
 
     """
+
     def __init__(self, *args, **kwargs):
         # make sure the NO_FULL_REPAINT_ON_RESIZE style flag is set.
-        kwargs['style'] = kwargs.setdefault('style', wx.NO_FULL_REPAINT_ON_RESIZE) | \
-            wx.NO_FULL_REPAINT_ON_RESIZE
+        kwargs['style'] = kwargs.setdefault(
+            'style', wx.NO_FULL_REPAINT_ON_RESIZE) | wx.NO_FULL_REPAINT_ON_RESIZE
         wx.Window.__init__(self, *args, **kwargs)
 
         Debug.msg(2, "BufferedWindow.__init__()")
@@ -50,8 +51,8 @@ class BufferedWindow(wx.Window):
         self.OnSize(None)
 
     def Draw(self, dc):
-        ## just here as a place holder.
-        ## This method should be over-ridden when subclassed
+        # just here as a place holder.
+        # This method should be over-ridden when subclassed
         pass
 
     def OnPaint(self, event):
@@ -74,9 +75,9 @@ class BufferedWindow(wx.Window):
         # event.Skip()
 
     def SaveToFile(self, FileName, FileType=wx.BITMAP_TYPE_PNG):
-        ## This will save the contents of the buffer
-        ## to the specified file. See the wxWindows docs for
-        ## wx.Bitmap::SaveFile for the details
+        # This will save the contents of the buffer
+        # to the specified file. See the wxWindows docs for
+        # wx.Bitmap::SaveFile for the details
         self._Buffer.SaveFile(FileName, FileType)
 
     def UpdateDrawing(self):
@@ -98,6 +99,7 @@ class BufferedWindow(wx.Window):
 
 
 class AnimationWindow(BufferedWindow):
+
     def __init__(self, parent, id=wx.ID_ANY,
                  style=wx.DEFAULT_FRAME_STYLE | wx.FULL_REPAINT_ON_RESIZE |
                  wx.BORDER_RAISED):
@@ -145,8 +147,15 @@ class AnimationWindow(BufferedWindow):
             bitmap = wx.BitmapFromImage(im)
             if self._overlay:
                 im = wx.ImageFromBitmap(self.bitmap_overlay)
-                im.Rescale(im.GetWidth() * params['scale'], im.GetHeight() * params['scale'])
-                self._setOverlay(wx.BitmapFromImage(im), xperc=self.perc[0], yperc=self.perc[1])
+                im.Rescale(
+                    im.GetWidth() *
+                    params['scale'],
+                    im.GetHeight() *
+                    params['scale'])
+                self._setOverlay(
+                    wx.BitmapFromImage(im),
+                    xperc=self.perc[0],
+                    yperc=self.perc[1])
         else:
             self.x = 0
             self.y = 0
diff --git a/gui/wxpython/animation/nviztask.py b/gui/wxpython/animation/nviztask.py
index 7fe9a9d..8a5f9f4 100644
--- a/gui/wxpython/animation/nviztask.py
+++ b/gui/wxpython/animation/nviztask.py
@@ -22,12 +22,13 @@ except ImportError:
 
 from core.workspace import ProcessWorkspaceFile
 from core.gcmd import RunCommand, GException
-from core.utils import GetLayerNameFromCmd, CmdToTuple, _
+from core.utils import GetLayerNameFromCmd, _
 from grass.script import task as gtask
 from core.settings import UserSettings
 
 
 class NvizTask:
+
     def __init__(self):
         self.task = None
         self.filename = None
@@ -48,7 +49,9 @@ class NvizTask:
         # pprint(gxwXml.nviz_state)
 
         if not gxwXml.nviz_state:
-            raise GException(_("No 3d view information in workspace file <%s>.") % self.filename)
+            raise GException(
+                _("No 3d view information in workspace file <%s>.") %
+                self.filename)
 
         self._getExtent(gxwXml)
         self._processState(gxwXml.nviz_state)
@@ -58,8 +61,8 @@ class NvizTask:
         for display in root.displays:
             if display['viewMode'] == '3d':
                 self.region['w'], self.region['s'],\
-                self.region['e'], self.region['n'],\
-                self.region['b'], self.region['t'] = display['extent']
+                    self.region['e'], self.region['n'],\
+                    self.region['b'], self.region['t'] = display['extent']
                 self.region['tbres'] = display['tbres']
 
     def _processLayers(self, layers):
@@ -69,18 +72,22 @@ class NvizTask:
 
             if not layer['nviz']:
                 continue
-            layerName, found = GetLayerNameFromCmd(layer['cmd'], fullyQualified=False,
-                                                   param='map')
+            layerName, found = GetLayerNameFromCmd(
+                layer['cmd'], fullyQualified=False, param='map')
             if not found:
                 continue
 
             if 'surface' in layer['nviz']:
-                self._processSurface(layer['nviz']['surface'], mapName=layerName)
+                self._processSurface(
+                    layer['nviz']['surface'],
+                    mapName=layerName)
             if 'volume' in layer['nviz']:
                 self._processVolume(layer['nviz']['volume'], mapName=layerName)
             if 'vector' in layer['nviz']:
                 if 'points' in layer['nviz']['vector']:
-                    self._processPoints(layer['nviz']['vector']['points'], mapName=layerName)
+                    self._processPoints(
+                        layer['nviz']['vector']['points'],
+                        mapName=layerName)
 
     def _processSurface(self, surface, mapName):
         self._setMultiTaskParam('elevation_map', mapName)
@@ -88,8 +95,8 @@ class NvizTask:
         # attributes like color, shine, transparency
         attributes = ('color', 'shine', 'transp')  # mask missing
         parameters = (('color_map', 'color'),
-                     ('shininess_map', 'shininess_value'),
-                     ('transparency_map', 'transparency_value'))
+                      ('shininess_map', 'shininess_value'),
+                      ('transparency_map', 'transparency_value'))
         for attr, params in zip(attributes, parameters):
             mapname = None
             const = None
@@ -117,7 +124,9 @@ class NvizTask:
         value = surface['draw']['wire-color']['value']
         self._setMultiTaskParam('wire_color', value)
         # resolution
-        for mode1, mode2 in zip(('coarse', 'fine'), ('resolution_coarse', 'resolution_fine')):
+        for mode1, mode2 in zip(
+                ('coarse', 'fine'),
+                ('resolution_coarse', 'resolution_fine')):
             value = surface['draw']['resolution'][mode1]
             self._setMultiTaskParam(mode2, value)
 
@@ -135,11 +144,16 @@ class NvizTask:
                 self._setMultiTaskParam('vpoint_' + attrib, str(val))
         if 'height' in points:
             height = points['height']['value']
-            self._setMultiTaskParam('vpoint_position', '0,0,{h}'.format(h=height))
+            self._setMultiTaskParam(
+                'vpoint_position',
+                '0,0,{h}'.format(
+                    h=height))
         if 'marker' in points:
-            marker = list(UserSettings.Get(group='nviz', key='vector',
-                                           subkey=['points', 'marker'],
-                                           settings_type='internal'))[points['marker']['value']]
+            marker = list(
+                UserSettings.Get(
+                    group='nviz', key='vector', subkey=[
+                        'points', 'marker'], settings_type='internal'))[
+                points['marker']['value']]
             self._setMultiTaskParam('vpoint_marker', marker)
         if 'mode' in points:
             if points['mode']['type'] == '3d':
@@ -160,10 +174,11 @@ class NvizTask:
             self._setMultiTaskParam('volume_resolution', res_value)
             for isosurface in isosurfaces:
                 attributes = ('topo', 'color', 'shine', 'transp')
-                parameters = ((None, 'isosurf_level'),
-                              ('isosurf_color_map', 'isosurf_color_value'),
-                              ('isosurf_shininess_map', 'isosurf_shininess_value'),
-                              ('isosurf_transparency_map', 'isosurf_transparency_value'))
+                parameters = (
+                    (None, 'isosurf_level'),
+                    ('isosurf_color_map', 'isosurf_color_value'),
+                    ('isosurf_shininess_map', 'isosurf_shininess_value'),
+                    ('isosurf_transparency_map', 'isosurf_transparency_value'))
                 for attr, params in zip(attributes, parameters):
                     mapname = None
                     const = None
@@ -182,8 +197,10 @@ class NvizTask:
                         self._setMultiTaskParam(params[0], mapname)
                     else:
                         if attr == 'topo':
-                            # TODO: we just assume it's the first volume, what to do else?
-                            self._setMultiTaskParam(params[1], '1:' + str(const))
+                            # TODO: we just assume it's the first volume, what
+                            # to do else?
+                            self._setMultiTaskParam(
+                                params[1], '1:' + str(const))
                         else:
                             self._setMultiTaskParam(params[1], const)
                 if isosurface['inout']['value']:
@@ -194,12 +211,15 @@ class NvizTask:
             res_value = volume['draw']['resolution']['slice']['value']
             self._setMultiTaskParam('volume_resolution', res_value)
             for slice_ in slices:
-                self._setMultiTaskParam('slice_transparency', slice_['transp']['value'])
+                self._setMultiTaskParam(
+                    'slice_transparency', slice_['transp']['value'])
                 axis = slice_['position']['axis']
                 self._setMultiTaskParam('slice', '1:' + 'xyz'[axis])
                 pos = slice_['position']
-                coords = pos['x1'], pos['x2'], pos['y1'], pos['y2'], pos['z1'], pos['z2']
-                self._setMultiTaskParam('slice_position', ','.join([str(c) for c in coords]))
+                coords = pos['x1'], pos['x2'], pos[
+                    'y1'], pos['y2'], pos['z1'], pos['z2']
+                self._setMultiTaskParam('slice_position', ','.join(
+                    [str(c) for c in coords]))
 
         # position
         pos = []
@@ -212,19 +232,25 @@ class NvizTask:
     def _processState(self, state):
         color = state['view']['background']['color']
         self.task.set_param('bgcolor', self._join(color, delim=':'))
-        self.task.set_param('position', self._join((state['view']['position']['x'],
-                                                    state['view']['position']['y'])))
+        self.task.set_param(
+            'position', self._join(
+                (state['view']['position']['x'],
+                 state['view']['position']['y'])))
         self.task.set_param('height', state['iview']['height']['value'])
         self.task.set_param('perspective', state['view']['persp']['value'])
         self.task.set_param('twist', state['view']['twist']['value'])
         # TODO: fix zexag
         self.task.set_param('zexag', state['view']['z-exag']['value'])
-        self.task.set_param('focus', self._join((state['iview']['focus']['x'],
-                                                 state['iview']['focus']['y'],
-                                                 state['iview']['focus']['z'])))
-        self.task.set_param('light_position', self._join((state['light']['position']['x'],
-                                                          state['light']['position']['y'],
-                                                          state['light']['position']['z'] / 100.)))
+        self.task.set_param(
+            'focus', self._join(
+                (state['iview']['focus']['x'],
+                 state['iview']['focus']['y'],
+                 state['iview']['focus']['z'])))
+        self.task.set_param(
+            'light_position', self._join(
+                (state['light']['position']['x'],
+                 state['light']['position']['y'],
+                 state['light']['position']['z'] / 100.)))
         color = state['light']['color'][:3]
         self.task.set_param('light_color', self._join(color, delim=':'))
         self.task.set_param('light_brightness', int(state['light']['bright']))
@@ -262,7 +288,8 @@ class NvizTask:
         if hasattr(layer, 'maps'):
             series = layer.maps
         else:
-            raise GException(_("No map series nor space-time dataset is added."))
+            raise GException(
+                _("No map series nor space-time dataset is added."))
 
         for value in series:
             self.task.set_param(paramName, value)
@@ -273,7 +300,10 @@ class NvizTask:
                 self.task.set_param('isosurf_color_map', '')
             self.task.set_flag('overwrite', True)
             self.task.set_param('output', 'tobechanged')
-            cmd = self.task.get_cmd(ignoreErrors=False, ignoreRequired=False, ignoreDefault=True)
+            cmd = self.task.get_cmd(
+                ignoreErrors=False,
+                ignoreRequired=False,
+                ignoreDefault=True)
             commands.append(cmd)
 
         return commands
@@ -283,8 +313,11 @@ class NvizTask:
             return None
         self.task.set_flag('overwrite', True)
         self.task.set_param('output', 'tobechanged')
-        cmd = self.task.get_cmd(ignoreErrors=False, ignoreRequired=False, ignoreDefault=True)
-        return CmdToTuple(cmd)
+        cmd = self.task.get_cmd(
+            ignoreErrors=False,
+            ignoreRequired=False,
+            ignoreDefault=True)
+        return gtask.cmdlist_to_tuple(cmd)
 
     def GetRegion(self):
         return self.region
@@ -298,7 +331,8 @@ def test():
     cmds = nviz.GetCommandSeries(['aspect', 'elevation'], 'color_map')
     for cmd in cmds:
         print cmd
-        returncode, message = RunCommand(getErrorMsg=True, prog=cmd[0], **cmd[1])
+        returncode, message = RunCommand(
+            getErrorMsg=True, prog=cmd[0], **cmd[1])
         print returncode, message
 
 
diff --git a/gui/wxpython/animation/provider.py b/gui/wxpython/animation/provider.py
index 6aa6f3d..120aad3 100644
--- a/gui/wxpython/animation/provider.py
+++ b/gui/wxpython/animation/provider.py
@@ -29,11 +29,12 @@ from multiprocessing import Process, Queue
 from core.gcmd import RunCommand, GException
 from core.settings import UserSettings
 from core.debug import Debug
-from core.utils import _, CmdToTuple, autoCropImageFromFile
+from core.utils import _, autoCropImageFromFile
 
 from animation.utils import HashCmd, HashCmds, GetFileFromCmd, GetFileFromCmds
 
 import grass.script.core as gcore
+from grass.script.task import cmdlist_to_tuple
 from grass.pydispatch.signal import Signal
 
 
@@ -43,13 +44,15 @@ class BitmapProvider:
     There is one instance of this class in the application.
     It handles both 2D and 3D animations.
     """
+
     def __init__(self, bitmapPool, mapFilesPool, tempDir,
                  imageWidth=640, imageHeight=480):
 
         self._bitmapPool = bitmapPool
         self._mapFilesPool = mapFilesPool
         self.imageWidth = imageWidth  # width of the image to render with d.rast or d.vect
-        self.imageHeight = imageHeight  # height of the image to render with d.rast or d.vect
+        # height of the image to render with d.rast or d.vect
+        self.imageHeight = imageHeight
         self._tempDir = tempDir
 
         self._uniqueCmds = []
@@ -69,7 +72,8 @@ class BitmapProvider:
         self.renderingStarted = Signal('BitmapProvider.renderingStarted')
         self.compositionStarted = Signal('BitmapProvider.compositionStarted')
         self.renderingContinues = Signal('BitmapProvider.renderingContinues')
-        self.compositionContinues = Signal('BitmapProvider.compositionContinues')
+        self.compositionContinues = Signal(
+            'BitmapProvider.compositionContinues')
         self.renderingFinished = Signal('BitmapProvider.renderingFinished')
         self.compositionFinished = Signal('BitmapProvider.compositionFinished')
         self.mapsLoaded = Signal('BitmapProvider.mapsLoaded')
@@ -88,7 +92,9 @@ class BitmapProvider:
         :param opacities: list of opacity values
         :param regions: list of regions
         """
-        Debug.msg(2, "BitmapProvider.SetCmds: {n} lists".format(n=len(cmdsForComposition)))
+        Debug.msg(
+            2, "BitmapProvider.SetCmds: {n} lists".format(
+                n=len(cmdsForComposition)))
         self._cmdsForComposition.extend(cmdsForComposition)
         self._opacities.extend(opacities)
         self._regions.extend(regions)
@@ -101,7 +107,9 @@ class BitmapProvider:
         :param cmds: list of commands m.nviz.image (cmd as a list)
         :param region: for 3D rendering
         """
-        Debug.msg(2, "BitmapProvider.SetCmds3D: {c} commands".format(c=len(cmds)))
+        Debug.msg(
+            2, "BitmapProvider.SetCmds3D: {c} commands".format(
+                c=len(cmds)))
         self._cmds3D = cmds
         self._regionFor3D = region
 
@@ -117,8 +125,8 @@ class BitmapProvider:
                     unique.append((tuple(cmd), None))
         unique = list(set(unique))
         self._uniqueCmds = [cmdAndRegion[0] for cmdAndRegion in unique]
-        self._regionsForUniqueCmds.extend([dict(cmdAndRegion[1]) if cmdAndRegion[1] else None
-                                           for cmdAndRegion in unique])
+        self._regionsForUniqueCmds.extend([dict(cmdAndRegion[1]) if cmdAndRegion[
+                                          1] else None for cmdAndRegion in unique])
 
     def Unload(self):
         """Unloads currently loaded data.
@@ -126,10 +134,12 @@ class BitmapProvider:
         """
         Debug.msg(2, "BitmapProvider.Unload")
         if self._cmdsForComposition:
-            for cmd, region in zip(self._uniqueCmds, self._regionsForUniqueCmds):
+            for cmd, region in zip(self._uniqueCmds,
+                                   self._regionsForUniqueCmds):
                 del self._mapFilesPool[HashCmd(cmd, region)]
 
-            for cmdList, region in zip(self._cmdsForComposition, self._regions):
+            for cmdList, region in zip(
+                    self._cmdsForComposition, self._regions):
                 del self._bitmapPool[HashCmds(cmdList, region)]
             self._uniqueCmds = []
             self._cmdsForComposition = []
@@ -150,12 +160,15 @@ class BitmapProvider:
         count = 0
         for cmd, region in zip(uniqueCmds, regions):
             filename = GetFileFromCmd(self._tempDir, cmd, region)
-            if not force and os.path.exists(filename) and \
-               self._mapFilesPool.GetSize(HashCmd(cmd, region)) == (self.imageWidth, self.imageHeight):
+            if not force and os.path.exists(filename) and self._mapFilesPool.GetSize(
+                    HashCmd(cmd, region)) == (self.imageWidth, self.imageHeight):
                 continue
             count += 1
 
-        Debug.msg(3, "BitmapProvider._dryRender: {c} files to be rendered".format(c=count))
+        Debug.msg(
+            3,
+            "BitmapProvider._dryRender: {c} files to be rendered".format(
+                c=count))
 
         return count
 
@@ -169,13 +182,17 @@ class BitmapProvider:
         """
         count = 0
         for cmdList, region in zip(cmdLists, regions):
-            if not force and HashCmds(cmdList, region) in self._bitmapPool and \
-                self._bitmapPool[HashCmds(cmdList, region)].GetSize() == (self.imageWidth,
-                                                                          self.imageHeight):
+            if not force and HashCmds(
+                    cmdList, region) in self._bitmapPool and self._bitmapPool[
+                    HashCmds(cmdList, region)].GetSize() == (
+                    self.imageWidth, self.imageHeight):
                 continue
             count += 1
 
-        Debug.msg(2, "BitmapProvider._dryCompose: {c} files to be composed".format(c=count))
+        Debug.msg(
+            2,
+            "BitmapProvider._dryCompose: {c} files to be composed".format(
+                c=count))
 
         return count
 
@@ -205,19 +222,33 @@ class BitmapProvider:
 
         # create no data bitmap
         if None not in self._bitmapPool or force:
-            self._bitmapPool[None] = createNoDataBitmap(self.imageWidth, self.imageHeight)
-
-        ok = self._renderer.Render(cmds, regions, regionFor3D=self._regionFor3D,
-                                   bgcolor=bgcolor, force=force, nprocs=nprocs)
+            self._bitmapPool[None] = createNoDataBitmap(
+                self.imageWidth, self.imageHeight)
+
+        ok = self._renderer.Render(
+            cmds,
+            regions,
+            regionFor3D=self._regionFor3D,
+            bgcolor=bgcolor,
+            force=force,
+            nprocs=nprocs)
         self.renderingFinished.emit()
         if not ok:
             self.mapsLoaded.emit()  # what to do here?
             return
         if self._cmdsForComposition:
-            count = self._dryCompose(self._cmdsForComposition, self._regions, force=force)
+            count = self._dryCompose(
+                self._cmdsForComposition,
+                self._regions,
+                force=force)
             self.compositionStarted.emit(count=count)
-            self._composer.Compose(self._cmdsForComposition, self._regions, self._opacities,
-                                   bgcolor=bgcolor, force=force, nprocs=nprocs)
+            self._composer.Compose(
+                self._cmdsForComposition,
+                self._regions,
+                self._opacities,
+                bgcolor=bgcolor,
+                force=force,
+                nprocs=nprocs)
             self.compositionFinished.emit()
         if self._cmds3D:
             for cmd in self._cmds3D:
@@ -246,7 +277,9 @@ class BitmapProvider:
 
     def WindowSizeChanged(self, width, height):
         """Sets size when size of related window changes."""
-        Debug.msg(5, "BitmapProvider.WindowSizeChanged: w={w}, h={h}".format(w=width, h=height))
+        Debug.msg(
+            5, "BitmapProvider.WindowSizeChanged: w={w}, h={h}".format(
+                w=width, h=height))
 
         self.imageWidth, self.imageHeight = width, height
 
@@ -269,8 +302,9 @@ class BitmapProvider:
                         transparent=True, bgcolor=(0, 0, 0))
 
         Debug.msg(1, "Render raster legend " + str(filename))
-        cmdTuple = CmdToTuple(cmd)
-        returncode, stdout, messages = read2_command(cmdTuple[0], **cmdTuple[1])
+        cmdTuple = cmdlist_to_tuple(cmd)
+        returncode, stdout, messages = read2_command(
+            cmdTuple[0], **cmdTuple[1])
 
         if returncode == 0:
             return wx.BitmapFromImage(autoCropImageFromFile(filename))
@@ -281,6 +315,7 @@ class BitmapProvider:
 
 class BitmapRenderer:
     """Class which renderes 2D and 3D images to files."""
+
     def __init__(self, mapFilesPool, tempDir,
                  imageWidth, imageHeight):
         self._mapFilesPool = mapFilesPool
@@ -314,8 +349,8 @@ class BitmapRenderer:
         filteredCmdList = []
         for cmd, region in zip(cmdList, regions):
             filename = GetFileFromCmd(self._tempDir, cmd, region)
-            if not force and os.path.exists(filename) and \
-               self._mapFilesPool.GetSize(HashCmd(cmd, region)) == (self.imageWidth, self.imageHeight):
+            if not force and os.path.exists(filename) and self._mapFilesPool.GetSize(
+                    HashCmd(cmd, region)) == (self.imageWidth, self.imageHeight):
                 # for reference counting
                 self._mapFilesPool[HashCmd(cmd, region)] = filename
                 continue
@@ -331,13 +366,27 @@ class BitmapRenderer:
             q = Queue()
             # The separate render process
             if cmd[0] == 'm.nviz.image':
-                p = Process(target=RenderProcess3D,
-                            args=(self.imageWidth, self.imageHeight, self._tempDir,
-                                  cmd, regionFor3D, bgcolor, q))
+                p = Process(
+                    target=RenderProcess3D,
+                    args=(
+                        self.imageWidth,
+                        self.imageHeight,
+                        self._tempDir,
+                        cmd,
+                        regionFor3D,
+                        bgcolor,
+                        q))
             else:
-                p = Process(target=RenderProcess2D,
-                            args=(self.imageWidth, self.imageHeight, self._tempDir,
-                                  cmd, region, bgcolor, q))
+                p = Process(
+                    target=RenderProcess2D,
+                    args=(
+                        self.imageWidth,
+                        self.imageHeight,
+                        self._tempDir,
+                        cmd,
+                        region,
+                        bgcolor,
+                        q))
             p.start()
 
             queue_list.append(q)
@@ -350,16 +399,22 @@ class BitmapRenderer:
                 for i in range(len(cmd_list)):
                     proc_list[i].join()
                     filename = queue_list[i].get()
-                    self._mapFilesPool[HashCmd(cmd_list[i][0], cmd_list[i][1])] = filename
-                    self._mapFilesPool.SetSize(HashCmd(cmd_list[i][0], cmd_list[i][1]),
-                                               (self.imageWidth, self.imageHeight))
+                    self._mapFilesPool[
+                        HashCmd(
+                            cmd_list[i][0],
+                            cmd_list[i][1])] = filename
+                    self._mapFilesPool.SetSize(
+                        HashCmd(cmd_list[i][0],
+                                cmd_list[i][1]),
+                        (self.imageWidth, self.imageHeight))
 
                 proc_count = 0
                 proc_list = []
                 queue_list = []
                 cmd_list = []
 
-            self.renderingContinues.emit(current=count, text=_("Rendering map layers"))
+            self.renderingContinues.emit(
+                current=count, text=_("Rendering map layers"))
             if self._stopRendering:
                 self._stopRendering = False
                 stopped = True
@@ -376,6 +431,7 @@ class BitmapRenderer:
 
 class BitmapComposer:
     """Class which handles the composition of image files with g.pnmcomp."""
+
     def __init__(self, tempDir, mapFilesPool, bitmapPool,
                  imageWidth, imageHeight):
         self._mapFilesPool = mapFilesPool
@@ -410,11 +466,19 @@ class BitmapComposer:
 
         filteredCmdLists = []
         for cmdList, region in zip(cmdLists, regions):
-            if not force and HashCmds(cmdList, region) in self._bitmapPool and \
-                self._bitmapPool[HashCmds(cmdList, region)].GetSize() == (self.imageWidth,
-                                                                          self.imageHeight):
-                # TODO: find a better way than to assign the same to increase the reference
-                self._bitmapPool[HashCmds(cmdList, region)] = self._bitmapPool[HashCmds(cmdList, region)]
+            if not force and HashCmds(
+                    cmdList, region) in self._bitmapPool and self._bitmapPool[
+                    HashCmds(cmdList, region)].GetSize() == (
+                    self.imageWidth, self.imageHeight):
+                # TODO: find a better way than to assign the same to increase
+                # the reference
+                self._bitmapPool[
+                    HashCmds(
+                        cmdList,
+                        region)] = self._bitmapPool[
+                    HashCmds(
+                        cmdList,
+                        region)]
                 continue
             filteredCmdLists.append((cmdList, region))
 
@@ -443,19 +507,27 @@ class BitmapComposer:
                     proc_list[i].join()
                     filename = queue_list[i].get()
                     if filename is None:
-                        self._bitmapPool[HashCmds(cmd_lists[i][0], cmd_lists[i][1])] = \
-                            createNoDataBitmap(self.imageWidth, self.imageHeight,
-                                               text="Failed to render")
+                        self._bitmapPool[
+                            HashCmds(
+                                cmd_lists[i][0],
+                                cmd_lists[i][1])] = createNoDataBitmap(
+                            self.imageWidth,
+                            self.imageHeight,
+                            text="Failed to render")
                     else:
-                        self._bitmapPool[HashCmds(cmd_lists[i][0], cmd_lists[i][1])] = \
-                            wx.BitmapFromImage(wx.Image(filename))
+                        self._bitmapPool[
+                            HashCmds(
+                                cmd_lists[i][0],
+                                cmd_lists[i][1])] = wx.BitmapFromImage(
+                            wx.Image(filename))
                         os.remove(filename)
                 proc_count = 0
                 proc_list = []
                 queue_list = []
                 cmd_lists = []
 
-            self.compositionContinues.emit(current=count, text=_("Overlaying map layers"))
+            self.compositionContinues.emit(
+                current=count, text=_("Overlaying map layers"))
             if self._stopComposing:
                 self._stopComposing = False
                 break
@@ -468,7 +540,8 @@ class BitmapComposer:
             self._stopComposing = True
 
 
-def RenderProcess2D(imageWidth, imageHeight, tempDir, cmd, region, bgcolor, fileQueue):
+def RenderProcess2D(imageWidth, imageHeight, tempDir,
+                    cmd, region, bgcolor, fileQueue):
     """Render raster or vector files as ppm image and write the
        resulting ppm filename in the provided file queue
 
@@ -490,7 +563,7 @@ def RenderProcess2D(imageWidth, imageHeight, tempDir, cmd, region, bgcolor, file
                     transparent=transparency, bgcolor=bgcolor)
     if region:
         os.environ['GRASS_REGION'] = gcore.region_env(**region)
-    cmdTuple = CmdToTuple(cmd)
+    cmdTuple = cmdlist_to_tuple(cmd)
     returncode, stdout, messages = read2_command(cmdTuple[0], **cmdTuple[1])
     if returncode != 0:
         gcore.warning("Rendering failed:\n" + messages)
@@ -505,7 +578,8 @@ def RenderProcess2D(imageWidth, imageHeight, tempDir, cmd, region, bgcolor, file
     fileQueue.put(filename)
 
 
-def RenderProcess3D(imageWidth, imageHeight, tempDir, cmd, region, bgcolor, fileQueue):
+def RenderProcess3D(imageWidth, imageHeight, tempDir,
+                    cmd, region, bgcolor, fileQueue):
     """Renders image with m.nviz.image and writes the
        resulting ppm filename in the provided file queue
 
@@ -523,13 +597,14 @@ def RenderProcess3D(imageWidth, imageHeight, tempDir, cmd, region, bgcolor, file
     os.environ['GRASS_REGION'] = gcore.region_env(region3d=True, **region)
     Debug.msg(1, "Render image to file " + str(filename))
 
-    cmdTuple = CmdToTuple(cmd)
+    cmdTuple = cmdlist_to_tuple(cmd)
     cmdTuple[1]['output'] = os.path.splitext(filename)[0]
     # set size
     cmdTuple[1]['size'] = '%d,%d' % (imageWidth, imageHeight)
     # set format
     cmdTuple[1]['format'] = 'ppm'
-    cmdTuple[1]['bgcolor'] = bgcolor = ':'.join([str(part) for part in bgcolor])
+    cmdTuple[1]['bgcolor'] = bgcolor = ':'.join(
+        [str(part) for part in bgcolor])
     returncode, stdout, messages = read2_command(cmdTuple[0], **cmdTuple[1])
     if returncode != 0:
         gcore.warning("Rendering failed:\n" + messages)
@@ -541,7 +616,8 @@ def RenderProcess3D(imageWidth, imageHeight, tempDir, cmd, region, bgcolor, file
     fileQueue.put(filename)
 
 
-def CompositeProcess(imageWidth, imageHeight, tempDir, cmdList, region, opacities, bgcolor, fileQueue):
+def CompositeProcess(imageWidth, imageHeight, tempDir,
+                     cmdList, region, opacities, bgcolor, fileQueue):
     """Performs the composition of image ppm files and writes the
        resulting ppm filename in the provided file queue
 
@@ -568,15 +644,11 @@ def CompositeProcess(imageWidth, imageHeight, tempDir, cmdList, region, opacitie
 
     opacities = [str(op) for op in opacities]
     bgcolor = ':'.join([str(part) for part in bgcolor])
-    returncode, stdout, messages = read2_command('g.pnmcomp',
-                                                 overwrite=True,
-                                                 input='%s' % ",".join(reversed(maps)),
-                                                 mask='%s' % ",".join(reversed(masks)),
-                                                 opacity='%s' % ",".join(reversed(opacities)),
-                                                 bgcolor=bgcolor,
-                                                 width=imageWidth,
-                                                 height=imageHeight,
-                                                 output=filename)
+    returncode, stdout, messages = read2_command(
+        'g.pnmcomp', overwrite=True, input='%s' % ",".join(reversed(maps)),
+        mask='%s' % ",".join(reversed(masks)),
+        opacity='%s' % ",".join(reversed(opacities)),
+        bgcolor=bgcolor, width=imageWidth, height=imageHeight, output=filename)
 
     if returncode != 0:
         gcore.warning("Rendering composite failed:\n" + messages)
@@ -591,6 +663,7 @@ class DictRefCounter:
     """Base class storing map files/bitmaps (emulates dictionary).
     Counts the references to know which files/bitmaps to delete.
     """
+
     def __init__(self):
         self.dictionary = {}
         self.referenceCount = {}
@@ -604,14 +677,16 @@ class DictRefCounter:
             self.referenceCount[key] = 1
         else:
             self.referenceCount[key] += 1
-        Debug.msg(5, 'DictRefCounter.__setitem__: +1 for key {k}'.format(k=key))
+        Debug.msg(
+            5, 'DictRefCounter.__setitem__: +1 for key {k}'.format(k=key))
 
     def __contains__(self, key):
         return key in self.dictionary
 
     def __delitem__(self, key):
         self.referenceCount[key] -= 1
-        Debug.msg(5, 'DictRefCounter.__delitem__: -1 for key {k}'.format(k=key))
+        Debug.msg(
+            5, 'DictRefCounter.__delitem__: -1 for key {k}'.format(k=key))
 
     def keys(self):
         return self.dictionary.keys()
@@ -628,6 +703,7 @@ class DictRefCounter:
 
 class MapFilesPool(DictRefCounter):
     """Stores rendered images as files."""
+
     def __init__(self):
         DictRefCounter.__init__(self)
         self.size = {}
@@ -657,12 +733,14 @@ class MapFilesPool(DictRefCounter):
 
 class BitmapPool(DictRefCounter):
     """Class storing bitmaps (emulates dictionary)"""
+
     def __init__(self):
         DictRefCounter.__init__(self)
 
 
 class CleanUp:
     """Responsible for cleaning up the files."""
+
     def __init__(self, tempDir):
         self._tempDir = tempDir
 
@@ -671,9 +749,13 @@ class CleanUp:
         if os.path.exists(self._tempDir):
             try:
                 shutil.rmtree(self._tempDir)
-                Debug.msg(5, 'CleanUp: removed directory {t}'.format(t=self._tempDir))
+                Debug.msg(
+                    5, 'CleanUp: removed directory {t}'.format(
+                        t=self._tempDir))
             except OSError:
-                gcore.warning(_("Directory {t} not removed.").format(t=self._tempDir))
+                gcore.warning(
+                    _("Directory {t} not removed.").format(
+                        t=self._tempDir))
 
 
 def _setEnvironment(width, height, filename, transparent, bgcolor):
@@ -685,20 +767,22 @@ def _setEnvironment(width, height, filename, transparent, bgcolor):
     :param transparent: use transparency
     :param bgcolor: background color as a tuple of 3 values 0 to 255
     """
-    Debug.msg(5, "_setEnvironment: width={w}, height={h}, "
-                 "filename={f}, transparent={t}, bgcolor={b}".format(w=width,
-                                                                     h=height,
-                                                                     f=filename,
-                                                                     t=transparent,
-                                                                     b=bgcolor))
+    Debug.msg(
+        5,
+        "_setEnvironment: width={w}, height={h}, "
+        "filename={f}, transparent={t}, bgcolor={b}".format(
+            w=width,
+            h=height,
+            f=filename,
+            t=transparent,
+            b=bgcolor))
 
     os.environ['GRASS_RENDER_WIDTH'] = str(width)
     os.environ['GRASS_RENDER_HEIGHT'] = str(height)
     driver = UserSettings.Get(group='display', key='driver', subkey='type')
     os.environ['GRASS_RENDER_IMMEDIATE'] = driver
-    os.environ['GRASS_RENDER_BACKGROUNDCOLOR'] = '{r:02x}{g:02x}{b:02x}'.format(r=bgcolor[0],
-                                                                         g=bgcolor[1],
-                                                                         b=bgcolor[2])
+    os.environ['GRASS_RENDER_BACKGROUNDCOLOR'] = '{r:02x}{g:02x}{b:02x}'.format(
+        r=bgcolor[0], g=bgcolor[1], b=bgcolor[2])
     os.environ['GRASS_RENDER_TRUECOLOR'] = "TRUE"
     if transparent:
         os.environ['GRASS_RENDER_TRANSPARENT'] = "TRUE"
@@ -716,9 +800,8 @@ def createNoDataBitmap(imageWidth, imageHeight, text="No data"):
     :param imageWidth: image width
     :param imageHeight: image height
     """
-    Debug.msg(4, "createNoDataBitmap: w={w}, h={h}, text={t}".format(w=imageWidth,
-                                                                     h=imageHeight,
-                                                                     t=text))
+    Debug.msg(4, "createNoDataBitmap: w={w}, h={h}, text={t}".format(
+        w=imageWidth, h=imageHeight, t=text))
     bitmap = wx.EmptyBitmap(imageWidth, imageHeight)
     dc = wx.MemoryDC()
     dc.SelectObject(bitmap)
@@ -779,13 +862,19 @@ def test():
     prov = BitmapProvider(bPool, mapFilesPool, tempDir,
                           imageWidth=640, imageHeight=480)
     prov.renderingStarted.connect(
-        lambda count: sys.stdout.write("Total number of maps: {c}\n".format(c=count)))
+        lambda count: sys.stdout.write(
+            "Total number of maps: {c}\n".format(
+                c=count)))
     prov.renderingContinues.connect(
-        lambda current, text: sys.stdout.write("Current number: {c}\n".format(c=current)))
-    prov.compositionStarted.connect(
-        lambda count: sys.stdout.write("Composition: total number of maps: {c}\n".format(c=count)))
+        lambda current, text: sys.stdout.write(
+            "Current number: {c}\n".format(
+                c=current)))
+    prov.compositionStarted.connect(lambda count: sys.stdout.write(
+        "Composition: total number of maps: {c}\n".format(c=count)))
     prov.compositionContinues.connect(
-        lambda current, text: sys.stdout.write("Composition: Current number: {c}\n".format(c=current)))
+        lambda current, text: sys.stdout.write(
+            "Composition: Current number: {c}\n".format(
+                c=current)))
     prov.mapsLoaded.connect(
         lambda: sys.stdout.write("Maps loading finished\n"))
     cmdMatrix = layerListToCmdsMatrix(layerList)
@@ -796,7 +885,11 @@ def test():
 
     for key in bPool.keys():
         if key is not None:
-            bPool[key].SaveFile(os.path.join(tempDir, key + '.png'), wx.BITMAP_TYPE_PNG)
+            bPool[key].SaveFile(
+                os.path.join(
+                    tempDir,
+                    key + '.png'),
+                wx.BITMAP_TYPE_PNG)
 #    prov.Unload()
 #    prov.SetCmds(cmdMatrix, [l.opacity for l in layerList])
 #    prov.Load(bgcolor=(13, 156, 230))
diff --git a/gui/wxpython/animation/temporal_manager.py b/gui/wxpython/animation/temporal_manager.py
index ddc4764..faf3456 100644
--- a/gui/wxpython/animation/temporal_manager.py
+++ b/gui/wxpython/animation/temporal_manager.py
@@ -40,6 +40,7 @@ class GranularityMode:
 
 class TemporalManager(object):
     """Class for temporal data processing."""
+
     def __init__(self):
         self.timeseriesList = []
         self.timeseriesInfo = {}
@@ -69,7 +70,11 @@ class TemporalManager(object):
         :param timeseries: name of timeseries (with or without mapset)
         :param etype: element type (strds, stvds)
         """
-        self._gatherInformation(timeseries, etype, self.timeseriesList, self.timeseriesInfo)
+        self._gatherInformation(
+            timeseries,
+            etype,
+            self.timeseriesList,
+            self.timeseriesInfo)
 
     def EvaluateInputData(self):
         """Checks if all timeseries are compatible (raises GException).
@@ -116,7 +121,8 @@ class TemporalManager(object):
             for infoDict in self.timeseriesInfo.values():
                 units.add(infoDict['unit'])
             if len(units) > 1:
-                message = _("It is not allowed to display data with different units (%s).") % ','.join(units)
+                message = _(
+                    "It is not allowed to display data with different units (%s).") % ','.join(units)
                 return False, message
 
         # check for interval x point
@@ -127,9 +133,10 @@ class TemporalManager(object):
             else:
                 point += 1
         if bool(interval) == bool(point):
-            message = _("You are going to display data with different "
-                        "temporal types of maps (interval and point)."
-                        " It is recommended to use data of one temporal type to avoid confusion.")
+            message = _(
+                "You are going to display data with different "
+                "temporal types of maps (interval and point)."
+                " It is recommended to use data of one temporal type to avoid confusion.")
             return True, message  # warning
 
         return True, None
@@ -139,7 +146,8 @@ class TemporalManager(object):
         """
         if self.dataMode == DataMode.SIMPLE:
             gran = self.timeseriesInfo[self.timeseriesList[0]]['granularity']
-            if 'unit' in self.timeseriesInfo[self.timeseriesList[0]]:  # relative:
+            if 'unit' in self.timeseriesInfo[
+                    self.timeseriesList[0]]:  # relative:
                 granNum = gran
                 unit = self.timeseriesInfo[self.timeseriesList[0]]['unit']
                 if self.granularityMode == GranularityMode.ONE_UNIT:
@@ -187,13 +195,13 @@ class TemporalManager(object):
         # combine all timeLabels and fill missing maps with None
         # BUT this does not work properly if the datasets have
         # no temporal overlap! We would need to sample all datasets
-        # by a temporary dataset, I don't know how it would work with point data
+        # by a temporary dataset, I don't know how it would work with point
+        # data
         if self.temporalType == TemporalType.ABSOLUTE:
             timestamps = sorted(list(labelListSet), key=lambda x: x[0])
         else:
             timestamps = sorted(list(labelListSet), key=lambda x: x[0])
 
-
         newMapLists = []
         for mapList, labelList in zip(mapLists, labelLists):
             newMapList = [None] * len(timestamps)
@@ -210,22 +218,29 @@ class TemporalManager(object):
 
         if self.temporalType == TemporalType.ABSOLUTE:
             # ('1996-01-01 00:00:00', '1997-01-01 00:00:00', 'year'),
-            formatString = UserSettings.Get(group='animation', key='temporal', subkey='format')
-            timestamps = [(datetime.datetime.strftime(st, formatString),
-                          datetime.datetime.strftime(end, formatString)
-                          if end is not None else None, unit) for (st, end, unit) in timestamps]
+            formatString = UserSettings.Get(
+                group='animation', key='temporal', subkey='format')
+            timestamps = [
+                (datetime.datetime.strftime(
+                    st, formatString), datetime.datetime.strftime(
+                    end, formatString) if end is not None else None, unit) for (
+                    st, end, unit) in timestamps]
         else:
             # ('15', '16', u'years'),
-            timestamps = [(str(st), end if end is None else str(end), unit) for st, end, unit in timestamps]
+            timestamps = [(str(st), end if end is None else str(end), unit)
+                          for st, end, unit in timestamps]
         return timestamps, mapDict
 
     def _getLabelsAndMaps(self, timeseries):
         """Returns time labels and map names (done by sampling)
         for both interval and point data.
         """
-        sp = tgis.dataset_factory(self.timeseriesInfo[timeseries]['etype'], timeseries)
+        sp = tgis.dataset_factory(
+            self.timeseriesInfo[timeseries]['etype'], timeseries)
         if sp.is_in_db() is False:
-            raise GException(_("Space time dataset <%s> not found.") % timeseries)
+            raise GException(
+                _("Space time dataset <%s> not found.") %
+                timeseries)
         sp.select()
 
         listOfMaps = []
@@ -307,7 +322,8 @@ class TemporalManager(object):
                 end = tgis.string_to_datetime(end)
                 end = tgis.datetime_to_grass_datetime_string(end)
             grassLabels.append((start, end, unit))
-            if '00:00:00' not in start or (end is not None and '00:00:00' not in end):
+            if '00:00:00' not in start or (
+                    end is not None and '00:00:00' not in end):
                 isTime = True
         if not isTime:
             for i, (start, end, unit) in enumerate(grassLabels):
@@ -327,7 +343,8 @@ class TemporalManager(object):
         maps = sp.get_registered_maps_as_objects()
 
         if not sp.check_temporal_topology(maps):
-            raise GException(_("Topology of Space time dataset %s is invalid." % id))
+            raise GException(
+                _("Topology of Space time dataset %s is invalid." % id))
 
         timeseriesList.append(id)
         infoDict[id] = {}
@@ -364,12 +381,22 @@ def test():
     print '///////////////////////////'
     gran = temp.GetGranularity()
     print "granularity: " + str(gran)
-    pprint (temp.GetLabelsAndMaps())
+    pprint(temp.GetLabelsAndMaps())
 
 
 def createAbsoluteInterval():
-    grass.run_command('g.region', s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10,
-                      flags='p3', quiet=True)
+    grass.run_command(
+        'g.region',
+        s=0,
+        n=80,
+        w=0,
+        e=120,
+        b=0,
+        t=50,
+        res=10,
+        res3=10,
+        flags='p3',
+        quiet=True)
 
     grass.mapcalc(exp="prec_1 = rand(0, 550)", overwrite=True)
     grass.mapcalc(exp="prec_2 = rand(0, 450)", overwrite=True)
@@ -414,17 +441,37 @@ def createAbsoluteInterval():
                       maps='prec_1,prec_2,prec_3,prec_4,prec_5,prec_6,'
                       'temp_1,temp_2,temp_3,temp_4,temp_5,temp_6')
     for name, fname in zip((name1, name2), (n1, n2)):
-        grass.run_command('t.create', overwrite=True, type='strds',
-                          temporaltype='absolute', output=name,
-                          title="A test with input files", descr="A test with input files")
-        grass.run_command('t.register', flags='i', input=name, file=fname, overwrite=True)
+        grass.run_command(
+            't.create',
+            overwrite=True,
+            type='strds',
+            temporaltype='absolute',
+            output=name,
+            title="A test with input files",
+            descr="A test with input files")
+        grass.run_command(
+            't.register',
+            flags='i',
+            input=name,
+            file=fname,
+            overwrite=True)
 
     return name1, name2
 
 
 def createRelativeInterval():
-    grass.run_command('g.region', s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10,
-                      flags='p3', quiet=True)
+    grass.run_command(
+        'g.region',
+        s=0,
+        n=80,
+        w=0,
+        e=120,
+        b=0,
+        t=50,
+        res=10,
+        res3=10,
+        flags='p3',
+        quiet=True)
 
     grass.mapcalc(exp="prec_1 = rand(0, 550)", overwrite=True)
     grass.mapcalc(exp="prec_2 = rand(0, 450)", overwrite=True)
@@ -469,16 +516,37 @@ def createRelativeInterval():
                       maps='prec_1,prec_2,prec_3,prec_4,prec_5,prec_6,'
                       'temp_1,temp_2,temp_3,temp_4,temp_5,temp_6')
     for name, fname in zip((name1, name2), (n1, n2)):
-        grass.run_command('t.create', overwrite=True, type='strds',
-                          temporaltype='relative', output=name,
-                          title="A test with input files", descr="A test with input files")
-        grass.run_command('t.register', flags='i', input=name, file=fname, unit="years", overwrite=True)
+        grass.run_command(
+            't.create',
+            overwrite=True,
+            type='strds',
+            temporaltype='relative',
+            output=name,
+            title="A test with input files",
+            descr="A test with input files")
+        grass.run_command(
+            't.register',
+            flags='i',
+            input=name,
+            file=fname,
+            unit="years",
+            overwrite=True)
     return name1, name2
 
 
 def createAbsolutePoint():
-    grass.run_command('g.region', s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10,
-                      flags='p3', quiet=True)
+    grass.run_command(
+        'g.region',
+        s=0,
+        n=80,
+        w=0,
+        e=120,
+        b=0,
+        t=50,
+        res=10,
+        res3=10,
+        flags='p3',
+        quiet=True)
 
     grass.mapcalc(exp="prec_1 = rand(0, 550)", overwrite=True)
     grass.mapcalc(exp="prec_2 = rand(0, 450)", overwrite=True)
@@ -499,17 +567,37 @@ def createAbsolutePoint():
     )
     fd.close()
     name = 'abspoint'
-    grass.run_command('t.create', overwrite=True, type='strds',
-                      temporaltype='absolute', output=name,
-                      title="A test with input files", descr="A test with input files")
-
-    grass.run_command('t.register', flags='i', input=name, file=n1, overwrite=True)
+    grass.run_command(
+        't.create',
+        overwrite=True,
+        type='strds',
+        temporaltype='absolute',
+        output=name,
+        title="A test with input files",
+        descr="A test with input files")
+
+    grass.run_command(
+        't.register',
+        flags='i',
+        input=name,
+        file=n1,
+        overwrite=True)
     return name
 
 
 def createRelativePoint():
-    grass.run_command('g.region', s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10,
-                      flags='p3', quiet=True)
+    grass.run_command(
+        'g.region',
+        s=0,
+        n=80,
+        w=0,
+        e=120,
+        b=0,
+        t=50,
+        res=10,
+        res3=10,
+        flags='p3',
+        quiet=True)
 
     grass.mapcalc(exp="prec_1 = rand(0, 550)", overwrite=True)
     grass.mapcalc(exp="prec_2 = rand(0, 450)", overwrite=True)
@@ -530,11 +618,21 @@ def createRelativePoint():
     )
     fd.close()
     name = 'relpoint'
-    grass.run_command('t.create', overwrite=True, type='strds',
-                      temporaltype='relative', output=name,
-                      title="A test with input files", descr="A test with input files")
-
-    grass.run_command('t.register', unit="day", input=name, file=n1, overwrite=True)
+    grass.run_command(
+        't.create',
+        overwrite=True,
+        type='strds',
+        temporaltype='relative',
+        output=name,
+        title="A test with input files",
+        descr="A test with input files")
+
+    grass.run_command(
+        't.register',
+        unit="day",
+        input=name,
+        file=n1,
+        overwrite=True)
     return name
 
 if __name__ == '__main__':
diff --git a/gui/wxpython/animation/toolbars.py b/gui/wxpython/animation/toolbars.py
index b2524ef..0c1176a 100644
--- a/gui/wxpython/animation/toolbars.py
+++ b/gui/wxpython/animation/toolbars.py
@@ -25,35 +25,55 @@ from gui_core.simplelmgr import SimpleLmgrToolbar
 from animation.anim import ReplayMode
 
 ganimIcons = {
-    'speed': MetaIcon(img='move', label=_("Change animation speed")),
-    'playForward': MetaIcon(img='execute', label=_("Play forward")),
-    'playBack': MetaIcon(img='player-back', label=_("Play back")),
-    'stop': MetaIcon(img='player-stop', label=_("Stop")),
-    'pause': MetaIcon(img='player-pause', label=_("Pause")),
-    'oneDirectionReplay': MetaIcon(img='redraw', label=_("Repeat")),
-    'bothDirectionReplay': MetaIcon(img='player-repeat-back-forward',
-                                    label=_("Play back and forward")),
-    'addAnimation': MetaIcon(img='layer-add', label=_("Add new animation"),
-                             desc=_("Add new animation")),
-    'editAnimation': MetaIcon(img='layer-more', label=_("Add, edit or remove animation"),
-                              desc=_("Add, edit or remove animation")),
-    'exportAnimation': MetaIcon(img='layer-export', label=_("Export animation"),
-                                desc=_("Export animation"))
-}
+    'speed': MetaIcon(
+        img='move',
+        label=_("Change animation speed")),
+    'playForward': MetaIcon(
+        img='execute',
+        label=_("Play forward")),
+    'playBack': MetaIcon(
+        img='player-back',
+        label=_("Play back")),
+    'stop': MetaIcon(
+        img='player-stop',
+        label=_("Stop")),
+    'pause': MetaIcon(
+        img='player-pause',
+        label=_("Pause")),
+    'oneDirectionReplay': MetaIcon(
+        img='redraw',
+        label=_("Repeat")),
+    'bothDirectionReplay': MetaIcon(
+        img='player-repeat-back-forward',
+        label=_("Play back and forward")),
+    'addAnimation': MetaIcon(
+        img='layer-add',
+        label=_("Add new animation"),
+        desc=_("Add new animation")),
+    'editAnimation': MetaIcon(
+        img='layer-more',
+        label=_("Add, edit or remove animation"),
+        desc=_("Add, edit or remove animation")),
+    'exportAnimation': MetaIcon(
+        img='layer-export',
+        label=_("Export animation"),
+        desc=_("Export animation"))}
 
 SIMPLE_LMGR_STDS = 256
 
 
 simpleLmgrIcons = {
-    'addSeries': MetaIcon(img='mapset-add',
-                          label=_("Add space-time dataset or series of map layers"),
-                          desc=_("Add space-time dataset or series of map layers for animation")),
+    'addSeries': MetaIcon(
+        img='mapset-add',
+        label=_("Add space-time dataset or series of map layers"),
+        desc=_("Add space-time dataset or series of map layers for animation")),
 }
 
 
 class MainToolbar(BaseToolbar):
     """Main toolbar (data management)
     """
+
     def __init__(self, parent):
         """Main toolbar constructor
         """
@@ -69,20 +89,21 @@ class MainToolbar(BaseToolbar):
         # BaseIcons are a set of often used icons. It is possible
         # to reuse icons in ./trunk/gui/icons/grass or add new ones there.
         icons = ganimIcons
-        return self._getToolbarData((("addAnimation", icons["addAnimation"],
-                                      self.parent.OnAddAnimation),
-                                     ("editAnimation", icons["editAnimation"],
-                                      self.parent.OnEditAnimation),
-                                     ("reload", BaseIcons["render"],
-                                      self.parent.Reload),
-                                     ("exportAnimation", icons["exportAnimation"],
-                                      self.parent.OnExportAnimation)
-                                     ))
+        return self._getToolbarData(
+            (("addAnimation", icons["addAnimation"],
+              self.parent.OnAddAnimation),
+             ("editAnimation", icons["editAnimation"],
+              self.parent.OnEditAnimation),
+             ("reload", BaseIcons["render"],
+              self.parent.Reload),
+             ("exportAnimation", icons["exportAnimation"],
+              self.parent.OnExportAnimation)))
 
 
 class AnimationToolbar(BaseToolbar):
     """Animation toolbar (to control animation)
     """
+
     def __init__(self, parent):
         """Animation toolbar constructor
         """
@@ -101,26 +122,23 @@ class AnimationToolbar(BaseToolbar):
         # BaseIcons are a set of often used icons. It is possible
         # to reuse icons in ./trunk/gui/icons/grass or add new ones there.
         icons = ganimIcons
-        return self._getToolbarData((("playBack", icons["playBack"],
-                                      self.OnPlayBack),
-                                     ("playForward", icons["playForward"],
-                                      self.OnPlayForward),
-                                     ("pause", icons["pause"],
-                                      self.OnPause,
-                                      wx.ITEM_CHECK),
-                                     ("stop", icons["stop"],
-                                      self.OnStop),
-                                     (None, ),
-                                     ("oneDirectionReplay", icons["oneDirectionReplay"],
-                                      self.OnOneDirectionReplay,
-                                      wx.ITEM_CHECK),
-                                     ("bothDirectionReplay", icons["bothDirectionReplay"],
-                                      self.OnBothDirectionReplay,
-                                      wx.ITEM_CHECK),
-                                     (None, ),
-                                     ("adjustSpeed", icons['speed'],
-                                      self.parent.OnAdjustSpeed)
-                                     ))
+        return self._getToolbarData(
+            (("playBack", icons["playBack"],
+              self.OnPlayBack),
+             ("playForward", icons["playForward"],
+              self.OnPlayForward),
+             ("pause", icons["pause"],
+              self.OnPause, wx.ITEM_CHECK),
+             ("stop", icons["stop"],
+              self.OnStop),
+             (None,),
+             ("oneDirectionReplay", icons["oneDirectionReplay"],
+              self.OnOneDirectionReplay, wx.ITEM_CHECK),
+             ("bothDirectionReplay", icons["bothDirectionReplay"],
+              self.OnBothDirectionReplay, wx.ITEM_CHECK),
+             (None,),
+             ("adjustSpeed", icons['speed'],
+              self.parent.OnAdjustSpeed)))
 
     def OnPlayForward(self, event):
         self.PlayForward()
@@ -171,7 +189,8 @@ class AnimationToolbar(BaseToolbar):
 
         # if not self.GetToolState(self.oneDirectionReplay) and \
         #    not self.GetToolState(self.bothDirectionReplay):
-        #     self.EnableTool(self.playBack, False) # assuming that stop rewinds to the beginning
+        # self.EnableTool(self.playBack, False) # assuming that stop rewinds to
+        # the beginning
 
     def OnOneDirectionReplay(self, event):
         if event.IsChecked():
@@ -204,6 +223,7 @@ class AnimationToolbar(BaseToolbar):
 class MiscToolbar(BaseToolbar):
     """Toolbar with miscellaneous tools related to app
     """
+
     def __init__(self, parent):
         """Toolbar constructor
         """
@@ -228,6 +248,7 @@ class AnimSimpleLmgrToolbar(SimpleLmgrToolbar):
     """Simple layer manager toolbar for animation tool.
     Allows adding space-time dataset or series of maps.
     """
+
     def __init__(self, parent, lmgrStyle):
         SimpleLmgrToolbar.__init__(self, parent, lmgrStyle)
 
diff --git a/gui/wxpython/animation/utils.py b/gui/wxpython/animation/utils.py
index 6be75af..ce1089c 100644
--- a/gui/wxpython/animation/utils.py
+++ b/gui/wxpython/animation/utils.py
@@ -66,11 +66,15 @@ def validateTimeseriesName(timeseries, etype='strds'):
         if nameShort in trastDict[mapset]:
             return timeseries
         else:
-            raise GException(_("Space time dataset <%s> not found.") % timeseries)
+            raise GException(
+                _("Space time dataset <%s> not found.") %
+                timeseries)
 
-    for mapset, names in trastDict.iteritems():
-        if timeseries in names:
-            return timeseries + "@" + mapset
+    mapsets = tgis.get_tgis_c_library_interface().available_mapsets()
+    for mapset in mapsets:
+        if mapset in trastDict.keys():
+            if timeseries in trastDict[mapset]:
+                return timeseries + "@" + mapset
 
     raise GException(_("Space time dataset <%s> not found.") % timeseries)
 
@@ -198,7 +202,8 @@ def checkSeriesCompatibility(mapSeriesList=None, timeseriesList=None):
             raise GException(_("The number of maps to animate has to be "
                                "the same for each map series."))
 
-        if timeseriesList and list(count)[0] != list(timeseriesInfo['count'])[0]:
+        if timeseriesList and list(count)[0] != list(
+                timeseriesInfo['count'])[0]:
             raise GException(_("The number of maps to animate has to be "
                                "the same as the number of maps in temporal dataset."))
 
@@ -258,7 +263,13 @@ def RenderText(text, font, bgcolor, fgcolor):
 def WxImageToPil(image):
     """Converts wx.Image to PIL image"""
     pilImage = Image.new('RGB', (image.GetWidth(), image.GetHeight()))
-    getattr(pilImage, "frombytes", getattr(pilImage, "fromstring"))(image.GetData())
+    getattr(
+        pilImage,
+        "frombytes",
+        getattr(
+            pilImage,
+            "fromstring"))(
+        image.GetData())
     return pilImage
 
 
@@ -316,9 +327,12 @@ def layerListToCmdsMatrix(layerList):
                         if mapLayer:
                             try:
                                 idx = cmd.index('layer')
-                                cmd[idx] = 'layer={layer}'.format(layer=mapLayer)
+                                cmd[idx] = 'layer={layer}'.format(
+                                    layer=mapLayer)
                             except ValueError:
-                                cmd.append('layer={layer}'.format(layer=mapLayer))
+                                cmd.append(
+                                    'layer={layer}'.format(
+                                        layer=mapLayer))
                         cmds.append(cmd[:])
                     cmdsForComposition.append(cmds)
         else:
diff --git a/gui/wxpython/core/__init__.py b/gui/wxpython/core/__init__.py
index 1fb6b0d..37b9c05 100644
--- a/gui/wxpython/core/__init__.py
+++ b/gui/wxpython/core/__init__.py
@@ -13,4 +13,4 @@ all = [
     'utils',
     'globalvar',
     'giface',
-    ]
+]
diff --git a/gui/wxpython/core/debug.py b/gui/wxpython/core/debug.py
index eba70d6..d9a6af0 100644
--- a/gui/wxpython/core/debug.py
+++ b/gui/wxpython/core/debug.py
@@ -10,7 +10,7 @@ Classes:
 from core.debug import Debug
 Debug.msg (3, 'debug message')
 @endcode
-         
+
 (C) 2007-2009, 2011 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
@@ -24,16 +24,18 @@ import sys
 
 import grass.script as grass
 
+
 class DebugMsg:
     """wxGUI debugging
-    
+
         g.gisenv set=WX_DEBUG=[0-5]
 
     """
+
     def __init__(self):
         # default level
         self.debuglevel = 0
-        
+
         self.SetLevel()
 
     def SetLevel(self):
@@ -42,11 +44,14 @@ class DebugMsg:
         try:
             self.debuglevel = int(grass.gisenv().get('WX_DEBUG', 0))
             if self.debuglevel < 0 or self.debuglevel > 5:
-                raise ValueError(_("Wx debug level {}.").format(self.debuglevel))
+                raise ValueError(
+                    _("Wx debug level {}.").format(
+                        self.debuglevel))
         except ValueError as e:
             self.debuglevel = 0
-            sys.stderr.write(_("WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n").format(e))
-        
+            sys.stderr.write(
+                _("WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n").format(e))
+
     def msg(self, level, message, *args):
         """Print debug message
 
@@ -57,13 +62,13 @@ class DebugMsg:
         # self.SetLevel()
         if self.debuglevel > 0 and level > 0 and level <= self.debuglevel:
             if args:
-                sys.stderr.write("GUI D%d/%d: " % (level, self.debuglevel) + \
-                    message % args + os.linesep)
+                sys.stderr.write("GUI D%d/%d: " % (level, self.debuglevel) +
+                                 message % args + os.linesep)
             else:
-                sys.stderr.write("GUI D%d/%d: " % (level, self.debuglevel) + \
-                                     message + os.linesep)
-            sys.stderr.flush() # force flush (required for MS Windows)
-        
+                sys.stderr.write("GUI D%d/%d: " % (level, self.debuglevel) +
+                                 message + os.linesep)
+            sys.stderr.flush()  # force flush (required for MS Windows)
+
     def GetLevel(self):
         """Return current GUI debug level"""
         return self.debuglevel
diff --git a/gui/wxpython/core/gcmd.py b/gui/wxpython/core/gcmd.py
index 821b867..59fea14 100644
--- a/gui/wxpython/core/gcmd.py
+++ b/gui/wxpython/core/gcmd.py
@@ -46,64 +46,62 @@ import wx
 
 from grass.script import core as grass
 
-from core       import globalvar
+from core import globalvar
 from core.debug import Debug
 
 # cannot import from the core.utils module to avoid cross dependencies
 try:
     # intended to be used also outside this module
     import gettext
-    _ = gettext.translation('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale')).ugettext
+    _ = gettext.translation(
+        'grasswxpy',
+        os.path.join(
+            os.getenv("GISBASE"),
+            'locale')).ugettext
 except IOError:
     # using no translation silently
     def null_gettext(string):
         return string
     _ = null_gettext
 
-def GetRealCmd(cmd):
-    """Return real command name - only for MS Windows
-    """
-    if sys.platform == 'win32':
-        for ext in globalvar.grassScripts.keys():
-            if cmd in globalvar.grassScripts[ext]:
-                return cmd + ext
-    
-    return cmd
 
 def DecodeString(string):
     """Decode string using system encoding
-    
+
     :param string: string to be decoded
-    
+
     :return: decoded string
     """
     if not string:
         return string
-    
+
     if _enc:
         Debug.msg(5, "DecodeString(): enc=%s" % _enc)
         return string.decode(_enc)
-    
+
     return string
 
+
 def EncodeString(string):
     """Return encoded string using system locales
-    
+
     :param string: string to be encoded
-    
+
     :return: encoded string
     """
     if not string:
         return string
-    
+
     if _enc:
         Debug.msg(5, "EncodeString(): enc=%s" % _enc)
         return string.encode(_enc)
-    
+
     return string
 
+
 class GError:
-    def __init__(self, message, parent = None, caption = None, showTraceback = True):
+
+    def __init__(self, message, parent=None, caption=None, showTraceback=True):
         """Show error message window
 
         :param message: error message
@@ -118,43 +116,49 @@ class GError:
         if exc_traceback:
             exception = traceback.format_exc()
             reason = exception.splitlines()[-1].split(':', 1)[-1].strip()
-        
+
         if Debug.GetLevel() > 0 and exc_traceback:
             sys.stderr.write(exception)
-        
+
         if showTraceback and exc_traceback:
-            wx.MessageBox(parent = parent,
-                          message = message + '\n\n%s: %s\n\n%s' % \
-                              (_('Reason'),
-                               reason, exception),
-                          caption = caption,
-                          style = style)
+            wx.MessageBox(parent=parent,
+                          message=message + '\n\n%s: %s\n\n%s' %
+                          (_('Reason'),
+                           reason, exception),
+                          caption=caption,
+                          style=style)
         else:
-            wx.MessageBox(parent = parent,
-                          message = message,
-                          caption = caption,
-                          style = style)
+            wx.MessageBox(parent=parent,
+                          message=message,
+                          caption=caption,
+                          style=style)
+
 
 class GWarning:
-    def __init__(self, message, parent = None):
+
+    def __init__(self, message, parent=None):
         caption = _('Warning')
         style = wx.OK | wx.ICON_WARNING | wx.CENTRE
-        wx.MessageBox(parent = parent,
-                      message = message,
-                      caption = caption,
-                      style = style)
-        
+        wx.MessageBox(parent=parent,
+                      message=message,
+                      caption=caption,
+                      style=style)
+
+
 class GMessage:
-    def __init__(self, message, parent = None):
+
+    def __init__(self, message, parent=None):
         caption = _('Message')
         style = wx.OK | wx.ICON_INFORMATION | wx.CENTRE
-        wx.MessageBox(parent = parent,
-                      message = message,
-                      caption = caption,
-                      style = style)
+        wx.MessageBox(parent=parent,
+                      message=message,
+                      caption=caption,
+                      style=style)
+
 
 class GException(Exception):
-    def __init__(self, value = ''):
+
+    def __init__(self, value=''):
         self.value = value
 
     def __str__(self):
@@ -163,21 +167,52 @@ class GException(Exception):
     def __unicode__(self):
         return self.value
 
+
 class Popen(subprocess.Popen):
     """Subclass subprocess.Popen"""
+
     def __init__(self, args, **kwargs):
         if subprocess.mswindows:
             args = map(EncodeString, args)
-        
+
+            # The Windows shell (cmd.exe) requires some special characters to
+            # be escaped by preceding them with 3 carets (^^^). cmd.exe /?
+            # mentions <space> and &()[]{}^=;!'+,`~. A quick test revealed that
+            # only ^|&<> need to be escaped. A single quote can be escaped by
+            # enclosing it with double quotes and vice versa.
+            for i in range(2, len(args)):
+                # "^" must be the first character in the list to avoid double
+                # escaping.
+                for c in ("^", "|", "&", "<", ">"):
+                    if c in args[i]:
+                        if "=" in args[i]:
+                            a = args[i].split("=")
+                            k = a[0] + "="
+                            v = "=".join(a[1:len(a)])
+                        else:
+                            k = ""
+                            v = args[i]
+
+                        # If there are spaces, the argument was already
+                        # esscaped with double quotes, so don't escape it
+                        # again.
+                        if c in v and not " " in v:
+                            # Here, we escape each ^ in ^^^ with ^^ and a
+                            # <special character> with ^ + <special character>,
+                            # so we need 7 carets.
+
+                            v = v.replace(c, "^^^^^^^" + c)
+                            args[i] = k + v
+
         subprocess.Popen.__init__(self, args, **kwargs)
-        
-    def recv(self, maxsize = None):
+
+    def recv(self, maxsize=None):
         return self._recv('stdout', maxsize)
-    
-    def recv_err(self, maxsize = None):
+
+    def recv_err(self, maxsize=None):
         return self._recv('stderr', maxsize)
 
-    def send_recv(self, input = '', maxsize = None):
+    def send_recv(self, input='', maxsize=None):
         return self.send(input), self.recv(maxsize), self.recv_err(maxsize)
 
     def get_conn_maxsize(self, which, maxsize):
@@ -186,7 +221,7 @@ class Popen(subprocess.Popen):
         elif maxsize < 1:
             maxsize = 1
         return getattr(self, which), maxsize
-    
+
     def _close(self, which):
         getattr(self, which).close()
         setattr(self, which, None)
@@ -199,7 +234,7 @@ class Popen(subprocess.Popen):
             return (0 != win32api.TerminateProcess(handle, 0))
         else:
             try:
-                os.kill(-self.pid, signal.SIGTERM) # kill whole group
+                os.kill(-self.pid, signal.SIGTERM)  # kill whole group
             except OSError:
                 pass
 
@@ -224,7 +259,7 @@ class Popen(subprocess.Popen):
             conn, maxsize = self.get_conn_maxsize(which, maxsize)
             if conn is None:
                 return None
-            
+
             try:
                 x = msvcrt.get_osfhandle(conn.fileno())
                 (read, nAvail, nMessage) = PeekNamedPipe(x, 0)
@@ -238,7 +273,7 @@ class Popen(subprocess.Popen):
                 if why[0] in (109, errno.ESHUTDOWN):
                     return self._close(which)
                 raise
-            
+
             if self.universal_newlines:
                 read = self._translate_newlines(read)
             return read
@@ -254,7 +289,7 @@ class Popen(subprocess.Popen):
             try:
                 written = os.write(self.stdin.fileno(), input)
             except OSError as why:
-                if why[0] == errno.EPIPE: #broken pipe
+                if why[0] == errno.EPIPE:  # broken pipe
                     return self._close('stdin')
                 raise
 
@@ -264,20 +299,20 @@ class Popen(subprocess.Popen):
             conn, maxsize = self.get_conn_maxsize(which, maxsize)
             if conn is None:
                 return None
-            
+
             flags = fcntl.fcntl(conn, fcntl.F_GETFL)
             if not conn.closed:
-                fcntl.fcntl(conn, fcntl.F_SETFL, flags| os.O_NONBLOCK)
-            
+                fcntl.fcntl(conn, fcntl.F_SETFL, flags | os.O_NONBLOCK)
+
             try:
                 if not select.select([conn], [], [], 0)[0]:
                     return ''
-                
+
                 r = conn.read(maxsize)
-                
+
                 if not r:
                     return self._close(which)
-    
+
                 if self.universal_newlines:
                     r = self._translate_newlines(r)
                 return r
@@ -287,10 +322,11 @@ class Popen(subprocess.Popen):
 
 message = "Other end disconnected!"
 
-def recv_some(p, t = .1, e = 1, tr = 5, stderr = 0):
+
+def recv_some(p, t=.1, e=1, tr=5, stderr=0):
     if tr < 1:
         tr = 1
-    x = time.time()+t
+    x = time.time() + t
     y = []
     r = ''
     pr = p.recv
@@ -306,9 +342,10 @@ def recv_some(p, t = .1, e = 1, tr = 5, stderr = 0):
         elif r:
             y.append(r)
         else:
-            time.sleep(max((x-time.time())/tr, 0))
+            time.sleep(max((x - time.time()) / tr, 0))
     return ''.join(y)
-    
+
+
 def send_all(p, data):
     while len(data):
         sent = p.send(data)
@@ -316,6 +353,7 @@ def send_all(p, data):
             raise Exception(message)
         data = buffer(data, sent)
 
+
 class Command:
     """Run command in separate thread. Used for commands launched
     on the background.
@@ -332,9 +370,10 @@ class Command:
         else:
             print 'FAILURE (%d)' % cmd.returncode
     """
-    def __init__ (self, cmd, stdin = None,
-                  verbose = None, wait = True, rerr = False,
-                  stdout = None, stderr = None):
+
+    def __init__(self, cmd, stdin=None,
+                 verbose=None, wait=True, rerr=False,
+                 stdout=None, stderr=None):
         """
         :param cmd: command given as list
         :param stdin: standard input stream
@@ -371,7 +410,7 @@ class Command:
         self.cmdThread = CommandThread(cmd, stdin,
                                        stdout, stderr)
         self.cmdThread.start()
-        
+
         if wait:
             self.cmdThread.join()
             if self.cmdThread.module:
@@ -384,33 +423,39 @@ class Command:
             self.returncode = None
 
         if self.returncode is not None:
-            Debug.msg (3, "Command(): cmd='%s', wait=%s, returncode=%d, alive=%s" % \
-                           (' '.join(cmd), wait, self.returncode, self.cmdThread.isAlive()))
+            Debug.msg(
+                3, "Command(): cmd='%s', wait=%s, returncode=%d, alive=%s" %
+                (' '.join(cmd), wait, self.returncode, self.cmdThread.isAlive()))
             if rerr is not None and self.returncode != 0:
-                if rerr is False: # GUI dialog
-                    raise GException("%s '%s'%s%s%s %s%s" % \
-                                         (_("Execution failed:"),
-                                          ' '.join(self.cmd),
-                                          os.linesep, os.linesep,
-                                          _("Details:"),
-                                          os.linesep,
-                                          _("Error: ") + self.__GetError()))
-                elif rerr == sys.stderr: # redirect message to sys
-                    stderr.write("Execution failed: '%s'" % (' '.join(self.cmd)))
-                    stderr.write("%sDetails:%s%s" % (os.linesep,
-                                                     _("Error: ") + self.__GetError(),
-                                                     os.linesep))
+                if rerr is False:  # GUI dialog
+                    raise GException("%s '%s'%s%s%s %s%s" %
+                                     (_("Execution failed:"),
+                                      ' '.join(self.cmd),
+                                      os.linesep, os.linesep,
+                                      _("Details:"),
+                                      os.linesep,
+                                      _("Error: ") + self.__GetError()))
+                elif rerr == sys.stderr:  # redirect message to sys
+                    stderr.write("Execution failed: '%s'" %
+                                 (' '.join(self.cmd)))
+                    stderr.write(
+                        "%sDetails:%s%s" %
+                        (os.linesep,
+                         _("Error: ") +
+                            self.__GetError(),
+                            os.linesep))
             else:
-                pass # nop
+                pass  # nop
         else:
-            Debug.msg (3, "Command(): cmd='%s', wait=%s, returncode=?, alive=%s" % \
-                           (' '.join(cmd), wait, self.cmdThread.isAlive()))
+            Debug.msg(
+                3, "Command(): cmd='%s', wait=%s, returncode=?, alive=%s" %
+                (' '.join(cmd), wait, self.cmdThread.isAlive()))
 
         if verbose_orig:
             os.environ["GRASS_VERBOSE"] = verbose_orig
         elif "GRASS_VERBOSE" in os.environ:
             del os.environ["GRASS_VERBOSE"]
-            
+
     def __ReadOutput(self, stream):
         """Read stream and return list of lines
 
@@ -429,7 +474,7 @@ class Command:
             lineList.append(line)
 
         return lineList
-                    
+
     def __ReadErrOutput(self):
         """Read standard error output and return list of lines"""
         return self.__ReadOutput(self.cmdThread.module.stderr)
@@ -445,27 +490,27 @@ class Command:
         else:
             lines = self.cmdThread.error.strip('%s' % os.linesep). \
                 split('%s' % os.linesep)
-        
+
         msg = []
 
-        type    = None
+        type = None
         content = ""
         for line in lines:
             if len(line) == 0:
                 continue
-            if 'GRASS_' in line: # error or warning
-                if 'GRASS_INFO_WARNING' in line: # warning
+            if 'GRASS_' in line:  # error or warning
+                if 'GRASS_INFO_WARNING' in line:  # warning
                     type = "WARNING"
-                elif 'GRASS_INFO_ERROR' in line: # error
+                elif 'GRASS_INFO_ERROR' in line:  # error
                     type = "ERROR"
-                elif 'GRASS_INFO_END': # end of message
+                elif 'GRASS_INFO_END':  # end of message
                     msg.append((type, content))
                     type = None
                     content = ""
-                
+
                 if type:
                     content += line.split(':', 1)[1].strip()
-            else: # stderr
+            else:  # stderr
                 msg.append((None, line.strip()))
 
         return msg
@@ -474,53 +519,55 @@ class Command:
         """Get error message or ''"""
         if not self.cmdThread.module:
             return _("Unable to exectute command: '%s'") % ' '.join(self.cmd)
-        
+
         for type, msg in self.__ProcessStdErr():
             if type == 'ERROR':
                 if _enc:
                     return unicode(msg, _enc)
                 return msg
-        
+
         return ''
-    
+
+
 class CommandThread(Thread):
     """Create separate thread for command. Used for commands launched
     on the background."""
-    def __init__ (self, cmd, env = None, stdin = None,
-                  stdout = sys.stdout, stderr = sys.stderr):
+
+    def __init__(self, cmd, env=None, stdin=None,
+                 stdout=sys.stdout, stderr=sys.stderr):
         """
         :param cmd: command (given as list)
         :param env: environmental variables
-        :param stdin: standard input stream 
+        :param stdin: standard input stream
         :param stdout: redirect standard output or None
         :param stderr: redirect standard error output or None
         """
         Thread.__init__(self)
-        
-        self.cmd    = cmd
-        self.stdin  = stdin
+
+        self.cmd = cmd
+        self.stdin = stdin
         self.stdout = stdout
         self.stderr = stderr
-        self.env    = env
-        
+        self.env = env
+
         self.module = None
-        self.error  = ''
-        
+        self.error = ''
+
         self._want_abort = False
         self.aborted = False
-        
+
         self.setDaemon(True)
-        
+
         # set message formatting
         self.message_format = os.getenv("GRASS_MESSAGE_FORMAT")
         os.environ["GRASS_MESSAGE_FORMAT"] = "gui"
-        
+
     def __del__(self):
         if self.message_format:
             os.environ["GRASS_MESSAGE_FORMAT"] = self.message_format
         else:
             del os.environ["GRASS_MESSAGE_FORMAT"]
-        
+
     def run(self):
         """Run command"""
         if len(self.cmd) == 0:
@@ -545,27 +592,27 @@ class CommandThread(Thread):
             args[0] = grass.get_real_command(args[0])
             if args[0].endswith('.py'):
                 args.insert(0, sys.executable)
- 
+
         try:
             self.module = Popen(args,
-                                stdin = subprocess.PIPE,
-                                stdout = subprocess.PIPE,
-                                stderr = subprocess.PIPE,
-                                shell = sys.platform == "win32",
-                                env = self.env)
-            
+                                stdin=subprocess.PIPE,
+                                stdout=subprocess.PIPE,
+                                stderr=subprocess.PIPE,
+                                shell=sys.platform == "win32",
+                                env=self.env)
+
         except OSError as e:
             self.error = str(e)
             print >> sys.stderr, e
             return 1
-        
-        if self.stdin: # read stdin if requested ...
+
+        if self.stdin:  # read stdin if requested ...
             self.module.stdin.write(self.stdin)
             self.module.stdin.close()
-            
+
         # redirect standard outputs...
         self._redirect_stream()
-        
+
     def _redirect_stream(self):
         """Redirect stream"""
         if self.stdout:
@@ -573,44 +620,45 @@ class CommandThread(Thread):
             out_fileno = self.module.stdout.fileno()
             if not subprocess.mswindows:
                 flags = fcntl.fcntl(out_fileno, fcntl.F_GETFL)
-                fcntl.fcntl(out_fileno, fcntl.F_SETFL, flags| os.O_NONBLOCK)
-                
+                fcntl.fcntl(out_fileno, fcntl.F_SETFL, flags | os.O_NONBLOCK)
+
         if self.stderr:
             # make module stdout/stderr non-blocking
             out_fileno = self.module.stderr.fileno()
             if not subprocess.mswindows:
                 flags = fcntl.fcntl(out_fileno, fcntl.F_GETFL)
-                fcntl.fcntl(out_fileno, fcntl.F_SETFL, flags| os.O_NONBLOCK)
-        
+                fcntl.fcntl(out_fileno, fcntl.F_SETFL, flags | os.O_NONBLOCK)
+
         # wait for the process to end, sucking in stuff until it does end
         while self.module.poll() is None:
-            if self._want_abort: # abort running process
+            if self._want_abort:  # abort running process
                 self.module.terminate()
                 self.aborted = True
-                return 
+                return
             if self.stdout:
-                line = recv_some(self.module, e = 0, stderr = 0)
+                line = recv_some(self.module, e=0, stderr=0)
                 self.stdout.write(line)
             if self.stderr:
-                line = recv_some(self.module, e = 0, stderr = 1)
+                line = recv_some(self.module, e=0, stderr=1)
                 self.stderr.write(line)
                 if len(line) > 0:
                     self.error = line
 
         # get the last output
         if self.stdout:
-            line = recv_some(self.module, e = 0, stderr = 0)
+            line = recv_some(self.module, e=0, stderr=0)
             self.stdout.write(line)
         if self.stderr:
-            line = recv_some(self.module, e = 0, stderr = 1)
+            line = recv_some(self.module, e=0, stderr=1)
             self.stderr.write(line)
             if len(line) > 0:
                 self.error = line
-            
+
     def abort(self):
         """Abort running process, used by main thread to signal an abort"""
         self._want_abort = True
-    
+
+
 def _formatMsg(text):
     """Format error messages for dialogs
     """
@@ -628,12 +676,13 @@ def _formatMsg(text):
             return message
         else:
             message += line.strip() + '\n'
-    
+
     return message
 
-def RunCommand(prog, flags = "", overwrite = False, quiet = False,
-               verbose = False, parent = None, read = False,
-               parse = None, stdin = None, getErrorMsg = False, **kwargs):
+
+def RunCommand(prog, flags="", overwrite=False, quiet=False,
+               verbose=False, parent=None, read=False,
+               parse=None, stdin=None, getErrorMsg=False, **kwargs):
     """Run GRASS command
 
     :param prog: program to run
@@ -645,7 +694,7 @@ def RunCommand(prog, flags = "", overwrite = False, quiet = False,
     :param stdin: stdin or None
     :param getErrorMsg: get error messages on failure
     :param kwargs: program parameters
-    
+
     :return: returncode (read == False and getErrorMsg == False)
     :return: returncode, messages (read == False and getErrorMsg == True)
     :return: stdout (read == True and getErrorMsg == False)
@@ -654,54 +703,50 @@ def RunCommand(prog, flags = "", overwrite = False, quiet = False,
     """
     cmdString = ' '.join(grass.make_command(prog, flags, overwrite,
                                             quiet, verbose, **kwargs))
-    
+
     Debug.msg(1, "gcmd.RunCommand(): %s" % cmdString)
-    
+
     kwargs['stderr'] = subprocess.PIPE
-    
+
     if read:
         kwargs['stdout'] = subprocess.PIPE
-    
+
     if stdin:
         kwargs['stdin'] = subprocess.PIPE
 
     if parent:
         messageFormat = os.getenv('GRASS_MESSAGE_FORMAT', 'gui')
         os.environ['GRASS_MESSAGE_FORMAT'] = 'standard'
-    
-    Debug.msg(2, "gcmd.RunCommand(): command started")
+
     start = time.time()
-    
+
     ps = grass.start_command(prog, flags, overwrite, quiet, verbose, **kwargs)
-    
+
     if stdin:
         ps.stdin.write(stdin)
         ps.stdin.close()
         ps.stdin = None
-    
-    Debug.msg(3, "gcmd.RunCommand(): decoding string")
+
     stdout, stderr = map(DecodeString, ps.communicate())
-    
-    if parent: # restore previous settings
+
+    if parent:  # restore previous settings
         os.environ['GRASS_MESSAGE_FORMAT'] = messageFormat
-    
+
     ret = ps.returncode
-    Debug.msg(1, "gcmd.RunCommand(): get return code %d (%.6f sec)" % \
-                  (ret, (time.time() - start)))
-    
-    Debug.msg(3, "gcmd.RunCommand(): print error")
+    Debug.msg(1, "gcmd.RunCommand(): get return code %d (%.6f sec)" %
+              (ret, (time.time() - start)))
+
     if ret != 0:
         if stderr:
             Debug.msg(2, "gcmd.RunCommand(): error %s" % stderr)
         else:
             Debug.msg(2, "gcmd.RunCommand(): nothing to print ???")
-        
+
         if parent:
-            GError(parent = parent,
-                   caption = _("Error in %s") % prog,
-                   message = stderr)
-    
-    Debug.msg(3, "gcmd.RunCommand(): print read error")
+            GError(parent=parent,
+                   caption=_("Error in %s") % prog,
+                   message=stderr)
+
     if not read:
         if not getErrorMsg:
             return ret
@@ -709,26 +754,25 @@ def RunCommand(prog, flags = "", overwrite = False, quiet = False,
             return ret, _formatMsg(stderr)
 
     if stdout:
-        Debug.msg(2, "gcmd.RunCommand(): return stdout\n'%s'" % stdout)
+        Debug.msg(3, "gcmd.RunCommand(): return stdout\n'%s'" % stdout)
     else:
-        Debug.msg(2, "gcmd.RunCommand(): return stdout = None")
-    
+        Debug.msg(3, "gcmd.RunCommand(): return stdout = None")
+
     if parse:
         stdout = parse(stdout)
-    
+
     if not getErrorMsg:
         return stdout
-    
-    Debug.msg(2, "gcmd.RunCommand(): return ret, stdout")
+
     if read and getErrorMsg:
         return ret, stdout, _formatMsg(stderr)
-    
-    Debug.msg(2, "gcmd.RunCommand(): return result")
+
     return stdout, _formatMsg(stderr)
 
-def GetDefaultEncoding(forceUTF8 = False):
+
+def GetDefaultEncoding(forceUTF8=False):
     """Get default system encoding
-    
+
     :param bool forceUTF8: force 'UTF-8' if encoding is not defined
 
     :return: system encoding (can be None)
@@ -736,8 +780,8 @@ def GetDefaultEncoding(forceUTF8 = False):
     enc = locale.getdefaultlocale()[1]
     if forceUTF8 and (enc is None or enc == 'UTF8'):
         return 'UTF-8'
-    
+
     Debug.msg(1, "GetSystemEncoding(): %s" % enc)
     return enc
 
-_enc = GetDefaultEncoding() # define as global variable
+_enc = GetDefaultEncoding()  # define as global variable
diff --git a/gui/wxpython/core/gconsole.py b/gui/wxpython/core/gconsole.py
index c73a0b3..28cd4fd 100644
--- a/gui/wxpython/core/gconsole.py
+++ b/gui/wxpython/core/gconsole.py
@@ -9,7 +9,7 @@ Classes:
  - goutput::GStderr
  - goutput::GConsole
 
-(C) 2007-2014 by the GRASS Development Team
+(C) 2007-2015 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -33,7 +33,7 @@ import wx
 from wx.lib.newevent import NewEvent
 
 import grass.script as grass
-from   grass.script import task as gtask
+from grass.script import task as gtask
 
 from grass.pydispatch.signal import Signal
 
@@ -116,7 +116,8 @@ class CmdThread(threading.Thread):
         os.environ['GRASS_MESSAGE_FORMAT'] = 'gui'
         while True:
             requestId, args, kwds = self.requestQ.get()
-            for key in ('callable', 'onDone', 'onPrepare', 'userData', 'addLayer', 'notification'):
+            for key in ('callable', 'onDone', 'onPrepare',
+                        'userData', 'addLayer', 'notification'):
                 if key in kwds:
                     vars()[key] = kwds[key]
                     del kwds[key]
@@ -191,7 +192,8 @@ class CmdThread(threading.Thread):
                     argsColor[0] = ['r.colors',
                                     'map=%s' % mapName,
                                     'color=%s' % colorTable]
-                    self.requestCmdColor = vars()['callable'](*argsColor, **kwds)
+                    self.requestCmdColor = vars()['callable'](
+                        *argsColor, **kwds)
                     self.resultQ.put((requestId, self.requestCmdColor.run()))
 
             if self.receiver:
@@ -217,6 +219,7 @@ class CmdThread(threading.Thread):
         if self.requestQ.empty():
             self._want_abort_all = False
 
+
 class GStdout:
     """GConsole standard output
 
@@ -228,6 +231,7 @@ class GStdout:
     Copyright: (c) 2005-2007 Jean-Michel Fauth
     Licence:   GPL
     """
+
     def __init__(self, receiver):
         """
         :param receiver: event receiver (used in PostEvent)
@@ -261,6 +265,7 @@ class GStderr:
     Copyright: (c) 2005-2007 Jean-Michel Fauth
     Licence:   GPL
     """
+
     def __init__(self, receiver):
         """
         :param receiver: event receiver (used in PostEvent)
@@ -334,6 +339,7 @@ gIgnoredCmdRun, EVT_IGNORED_CMD_RUN = NewEvent()
 class GConsole(wx.EvtHandler):
     """
     """
+
     def __init__(self, guiparent=None, giface=None, ignoredCmdPattern=None):
         """
         :param guiparent: parent window for created GUI objects
@@ -404,9 +410,10 @@ class GConsole(wx.EvtHandler):
         :param notification: form of notification
         """
         self.writeLog.emit(text=text, wrap=wrap,
-                          notification=notification)
+                           notification=notification)
 
-    def WriteCmdLog(self, text, pid=None, notification=Notification.MAKE_VISIBLE):
+    def WriteCmdLog(self, text, pid=None,
+                    notification=Notification.MAKE_VISIBLE):
         """Write message in selected style
 
         :param text: message to be printed
@@ -424,7 +431,7 @@ class GConsole(wx.EvtHandler):
         """Write message in error style"""
         self.writeError.emit(text=text)
 
-    def RunCmd(self, command, compReg=True, skipInterface=False,
+    def RunCmd(self, command, compReg=True, env=None, skipInterface=False,
                onDone=None, onPrepare=None, userData=None, addLayer=None,
                notification=Notification.MAKE_VISIBLE):
         """Run command typed into console command prompt (GPrompt).
@@ -434,6 +441,8 @@ class GConsole(wx.EvtHandler):
         .. todo::
             Solve problem with the other event (now uses gOutputText
             event but there is no text, use onPrepare handler instead?)
+        .. todo::
+            Skip interface is ignored and determined always automatically.
 
         Posts event EVT_IGNORED_CMD_RUN when command which should be ignored
         (according to ignoredCmdPattern) is run.
@@ -456,17 +465,17 @@ class GConsole(wx.EvtHandler):
 
         # update history file
         self.UpdateHistoryFile(' '.join(command))
-        
+
         if command[0] in globalvar.grassCmd:
             # send GRASS command without arguments to GUI command interface
             # except ignored commands (event is emitted)
             if self._ignoredCmdPattern and \
-              re.compile(self._ignoredCmdPattern).search(' '.join(command)) and \
-              '--help' not in command and '--ui' not in command:
+                    re.compile(self._ignoredCmdPattern).search(' '.join(command)) and \
+                    '--help' not in command and '--ui' not in command:
                 event = gIgnoredCmdRun(cmd=command)
                 wx.PostEvent(self, event)
                 return
-            
+
             else:
                 # other GRASS commands (r|v|g|...)
                 try:
@@ -487,30 +496,62 @@ class GConsole(wx.EvtHandler):
                                 p.get('element', '') == 'file' and \
                                 p.get('age', 'new') == 'old' and \
                                 p.get('value', '') == '-':
-                            GError(parent=self._guiparent,
-                                   message=_("Unable to run command:\n%(cmd)s\n\n"
-                                             "Option <%(opt)s>: read from standard input is not "
-                                             "supported by wxGUI") % {'cmd': ' '.join(command),
-                                                                      'opt': p.get('name', '')})
+                            GError(
+                                parent=self._guiparent,
+                                message=_(
+                                    "Unable to run command:\n%(cmd)s\n\n"
+                                    "Option <%(opt)s>: read from standard input is not "
+                                    "supported by wxGUI") % {
+                                    'cmd': ' '.join(command),
+                                    'opt': p.get(
+                                        'name',
+                                        '')})
                             return
 
-                # no arguments given
-                if len(command) == 1 and hasParams and \
-                   not isinstance(self._guiparent, FormNotebook) and \
-                   command[0] != 'v.krige':
-                    # also parent must be checked, see #3135 for details
-                    try:
-                        GUI(parent=self._guiparent, giface=self._giface).ParseCommand(command)
-                    except GException as e:
-                        print >> sys.stderr, e
-                    return
+                if len(command) == 1:
+                    if command[0].startswith('g.gui.'):
+                        import imp
+                        import inspect
+                        pyFile = command[0]
+                        if sys.platform == 'win32':
+                            pyFile += '.py'
+                        pyPath = os.path.join(
+                            os.environ['GISBASE'], 'scripts', pyFile)
+                        if not os.path.exists(pyPath):
+                            pyPath = os.path.join(
+                                os.environ['GRASS_ADDON_BASE'], 'scripts', pyFile)
+                        if not os.path.exists(pyPath):
+                            GError(
+                                parent=self._guiparent,
+                                message=_("Module <%s> not found.") %
+                                command[0])
+                        pymodule = imp.load_source(
+                            command[0].replace('.', '_'), pyPath)
+                        pymain = inspect.getargspec(pymodule.main)
+                        if pymain and 'giface' in pymain.args:
+                            pymodule.main(self._giface)
+                            return
+
+                    # no arguments given
+                    if hasParams and \
+                       not isinstance(self._guiparent, FormNotebook):
+                        # also parent must be checked, see #3135 for details
+                        try:
+                            GUI(parent=self._guiparent,
+                                giface=self._giface).ParseCommand(command)
+                        except GException as e:
+                            print >> sys.stderr, e
+
+                        return
 
+                if env:
+                    env = env.copy()
+                else:
+                    env = os.environ.copy()
                 # activate computational region (set with g.region)
                 # for all non-display commands.
-                if compReg:
-                    tmpreg = os.getenv("GRASS_REGION")
-                    if "GRASS_REGION" in os.environ:
-                        del os.environ["GRASS_REGION"]
+                if compReg and "GRASS_REGION" in env:
+                    del env["GRASS_REGION"]
 
                 # process GRASS command with argument
                 self.cmdThread.RunCmd(command,
@@ -518,13 +559,12 @@ class GConsole(wx.EvtHandler):
                                       stderr=self.cmdStdErr,
                                       onDone=onDone, onPrepare=onPrepare,
                                       userData=userData, addLayer=addLayer,
-                                      env=os.environ.copy(),
+                                      env=env,
                                       notification=notification)
                 self.cmdOutputTimer.Start(50)
 
-                # deactivate computational region and return to display settings
-                if compReg and tmpreg:
-                    os.environ["GRASS_REGION"] = tmpreg
+                # we don't need to change computational region settings
+                # because we work on a copy
         else:
             # Send any other command to the shell. Send output to
             # console output window
@@ -552,7 +592,7 @@ class GConsole(wx.EvtHandler):
                     sfile.close()
                 except IOError:
                     pass
-            
+
             if len(command) == 1 and not skipInterface:
                 try:
                     task = gtask.parse_interface(command[0])
@@ -563,13 +603,15 @@ class GConsole(wx.EvtHandler):
 
             if task:
                 # process GRASS command without argument
-                GUI(parent=self._guiparent, giface=self._giface).ParseCommand(command)
+                GUI(parent=self._guiparent,
+                    giface=self._giface).ParseCommand(command)
             else:
                 self.cmdThread.RunCmd(command,
                                       stdout=self.cmdStdOut,
                                       stderr=self.cmdStdErr,
                                       onDone=onDone, onPrepare=onPrepare,
                                       userData=userData, addLayer=addLayer,
+                                      env=env,
                                       notification=notification)
             self.cmdOutputTimer.Start(50)
 
@@ -614,8 +656,8 @@ class GConsole(wx.EvtHandler):
                 stime = _("%d sec") % int(ctime)
             else:
                 mtime = int(ctime / 60)
-                stime = _("%(min)d min %(sec)d sec") % {'min': mtime,
-                                                        'sec': int(ctime - (mtime * 60))}
+                stime = _("%(min)d min %(sec)d sec") % {
+                    'min': mtime, 'sec': int(ctime - (mtime * 60))}
         except KeyError:
             # stopped deamon
             stime = _("unknown")
@@ -659,14 +701,17 @@ class GConsole(wx.EvtHandler):
         name = task.get_name()
         for p in task.get_options()['params']:
             prompt = p.get('prompt', '')
-            if prompt in ('raster', 'vector', '3d-raster') and p.get('value', None):
-                if p.get('age', 'old') == 'new' or \
-                        name in ('r.colors', 'r3.colors', 'v.colors', 'v.proj', 'r.proj'):
+            if prompt in (
+                    'raster', 'vector', 'raster_3d') and p.get(
+                    'value', None):
+                if p.get('age', 'old') == 'new' or name in (
+                        'r.colors', 'r3.colors', 'v.colors', 'v.proj', 'r.proj'):
                     # if multiple maps (e.g. r.series.interp), we need add each
                     if p.get('multiple', False):
                         lnames = p.get('value').split(',')
                         # in case multiple input (old) maps in r.colors
-                        # we don't want to rerender it multiple times! just once
+                        # we don't want to rerender it multiple times! just
+                        # once
                         if p.get('age', 'old') == 'old':
                             lnames = lnames[0:1]
                     else:
@@ -674,11 +719,13 @@ class GConsole(wx.EvtHandler):
                     for lname in lnames:
                         if '@' not in lname:
                             lname += '@' + grass.gisenv()['MAPSET']
-                        if grass.find_file(lname, element=p.get('element'))['fullname']:
-                            self.mapCreated.emit(name=lname, ltype=prompt, add=event.addLayer)
+                        if grass.find_file(lname, element=p.get('element'))[
+                                'fullname']:
+                            self.mapCreated.emit(
+                                name=lname, ltype=prompt, add=event.addLayer)
         if name == 'r.mask':
             self.updateMap.emit()
-        
+
         event.Skip()
 
     def OnProcessPendingOutputWindowEvents(self, event):
@@ -686,7 +733,7 @@ class GConsole(wx.EvtHandler):
 
     def UpdateHistoryFile(self, command):
         """Update history file
-        
+
         :param command: the command given as a string
         """
         env = grass.gisenv()
@@ -697,17 +744,16 @@ class GConsole(wx.EvtHandler):
                                     '.bash_history')
             fileHistory = codecs.open(filePath, encoding='utf-8', mode='a')
         except IOError as e:
-            GError(_("Unable to write file '%(filePath)s'.\n\nDetails: %(error)s") % 
-                    {'filePath': filePath, 'error': e},
+            GError(_("Unable to write file '%(filePath)s'.\n\nDetails: %(error)s") %
+                   {'filePath': filePath, 'error': e},
                    parent=self._guiparent)
             return
-        
+
         try:
             fileHistory.write(command + os.linesep)
         finally:
             fileHistory.close()
-        
+
         # update wxGUI prompt
         if self._giface:
             self._giface.UpdateCmdHistory(command)
-        
diff --git a/gui/wxpython/core/giface.py b/gui/wxpython/core/giface.py
index a5757e9..d22a6e8 100644
--- a/gui/wxpython/core/giface.py
+++ b/gui/wxpython/core/giface.py
@@ -23,7 +23,7 @@ import grass.script as grass
 from grass.pydispatch.signal import Signal
 
 # to disable Abstract class not referenced
-#pylint: disable=R0921
+# pylint: disable=R0921
 
 
 class Notification:
@@ -51,6 +51,7 @@ class Layer(object):
 
 
 class LayerList(object):
+
     def GetSelectedLayers(self, checkedOnly=True):
         """Returns list of selected layers.
 
@@ -77,7 +78,7 @@ class LayerList(object):
 
         Launches property dialog if needed (raster, vector, etc.)
 
-        :param ltype: layer type (raster, vector, 3d-raster, ...)
+        :param ltype: layer type (raster, vector, raster_3d, ...)
         :param name: layer name
         :param checked: if True layer is checked
         :param opacity: layer opacity level
@@ -116,6 +117,7 @@ class GrassInterface:
 
         The GrassInterface process is not finished.
     """
+
     def RunCmd(self, *args, **kwargs):
         """Executes a command.
         """
@@ -131,7 +133,8 @@ class GrassInterface:
         """
         raise NotImplementedError()
 
-    def WriteCmdLog(self, text, pid=None, notification=Notification.MAKE_VISIBLE):
+    def WriteCmdLog(self, text, pid=None,
+                    notification=Notification.MAKE_VISIBLE):
         """Writes message related to start or end of the command.
         """
         raise NotImplementedError()
@@ -202,6 +205,7 @@ class GrassInterface:
 
 class StandaloneGrassInterface():
     """@implements GrassInterface"""
+
     def __init__(self):
 
         # Signal when some map is created or updated by a module.
@@ -242,11 +246,18 @@ class StandaloneGrassInterface():
         grass.percent(event.value, 100, 1)
         event.Skip()
 
-    def RunCmd(self, command, compReg=True, skipInterface=False,
-               onDone=None, onPrepare=None, userData=None, notification=Notification.MAKE_VISIBLE):
-        self._gconsole.RunCmd(command=command, compReg=compReg,
-                              skipInterface=skipInterface, onDone=onDone,
-                              onPrepare=onPrepare, userData=userData, notification=notification)
+    def RunCmd(self, command, compReg=True, env=None, skipInterface=False,
+               onDone=None, onPrepare=None, userData=None,
+               notification=Notification.MAKE_VISIBLE):
+        self._gconsole.RunCmd(
+            command=command,
+            compReg=compReg,
+            env=env,
+            skipInterface=skipInterface,
+            onDone=onDone,
+            onPrepare=onPrepare,
+            userData=userData,
+            notification=notification)
 
     def Help(self, entry):
         self._gconsole.RunCmd(['g.manual', 'entry=%s' % entry])
@@ -255,7 +266,8 @@ class StandaloneGrassInterface():
                  notification=Notification.HIGHLIGHT):
         self._write(grass.message, text)
 
-    def WriteCmdLog(self, text, pid=None, notification=Notification.MAKE_VISIBLE):
+    def WriteCmdLog(self, text, pid=None,
+                    notification=Notification.MAKE_VISIBLE):
         if pid:
             text = '(' + str(pid) + ') ' + text
         self._write(grass.message, text)
@@ -273,7 +285,7 @@ class StandaloneGrassInterface():
         os.environ["GRASS_MESSAGE_FORMAT"] = orig
 
     def GetLayerList(self):
-        raise NotImplementedError()
+        return []
 
     def GetLayerTree(self):
         return None
diff --git a/gui/wxpython/core/globalvar.py b/gui/wxpython/core/globalvar.py
index 0413ab3..14c26d2 100644
--- a/gui/wxpython/core/globalvar.py
+++ b/gui/wxpython/core/globalvar.py
@@ -19,12 +19,12 @@ if not os.getenv("GISBASE"):
     sys.exit("GRASS is not running. Exiting...")
 
 # path to python scripts
-ETCDIR   = os.path.join(os.getenv("GISBASE"), "etc")
-GUIDIR   = os.path.join(os.getenv("GISBASE"), "gui")
+ETCDIR = os.path.join(os.getenv("GISBASE"), "etc")
+GUIDIR = os.path.join(os.getenv("GISBASE"), "gui")
 WXGUIDIR = os.path.join(GUIDIR, "wxpython")
-ICONDIR  = os.path.join(GUIDIR, "icons")
-IMGDIR   = os.path.join(GUIDIR, "images")
-SYMBDIR  = os.path.join(IMGDIR, "symbols")
+ICONDIR = os.path.join(GUIDIR, "icons")
+IMGDIR = os.path.join(GUIDIR, "images")
+SYMBDIR = os.path.join(IMGDIR, "symbols")
 
 from core.debug import Debug
 
@@ -32,7 +32,11 @@ from core.debug import Debug
 try:
     # intended to be used also outside this module
     import gettext
-    _ = gettext.translation('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale')).ugettext
+    _ = gettext.translation(
+        'grasswxpy',
+        os.path.join(
+            os.getenv("GISBASE"),
+            'locale')).ugettext
 except IOError:
     # using no translation silently
     def null_gettext(string):
@@ -41,6 +45,7 @@ except IOError:
 
 from grass.script.core import get_commands
 
+
 def CheckWxVersion(version):
     """Check wx version"""
     ver = wx.__version__
@@ -49,8 +54,12 @@ def CheckWxVersion(version):
 
     return True
 
-def CheckForWx():
-    """Try to import wx module and check its version"""
+
+def CheckForWx(forceVersion=os.getenv('GRASS_WXVERSION', None)):
+    """Try to import wx module and check its version
+
+    :param forceVersion: force wxPython version, eg. '2.8'
+    """
     if 'wx' in sys.modules.keys():
         return
 
@@ -60,20 +69,23 @@ def CheckForWx():
             import wxversion
         except ImportError as e:
             raise ImportError(e)
-        # wxversion.select(str(minVersion[0]) + '.' + str(minVersion[1]))
+        if forceVersion:
+            wxversion.select(forceVersion)
         wxversion.ensureMinimal(str(minVersion[0]) + '.' + str(minVersion[1]))
         import wx
         version = wx.__version__
 
         if map(int, version.split('.')) < minVersion:
-            raise ValueError('Your wxPython version is %s.%s.%s.%s' % tuple(version.split('.')))
+            raise ValueError(
+                'Your wxPython version is %s.%s.%s.%s' %
+                tuple(version.split('.')))
 
     except ImportError as e:
         print >> sys.stderr, 'ERROR: wxGUI requires wxPython. %s' % str(e)
         sys.exit(1)
     except (ValueError, wxversion.VersionError) as e:
-        print >> sys.stderr, 'ERROR: wxGUI requires wxPython >= %d.%d.%d.%d. ' % tuple(minVersion) + \
-            '%s.' % (str(e))
+        print >> sys.stderr, 'ERROR: wxGUI requires wxPython >= %d.%d.%d.%d. ' % tuple(
+            minVersion) + '%s.' % (str(e))
         sys.exit(1)
     except locale.Error as e:
         print >> sys.stderr, "Unable to set locale:", e
@@ -102,7 +114,7 @@ FNPageDStyle = FN.FNB_FANCY_TABS | \
     FN.FNB_NO_NAV_BUTTONS | \
     FN.FNB_NO_X_BUTTON
 
-FNPageColor = wx.Colour(125,200,175)
+FNPageColor = wx.Colour(125, 200, 175)
 
 """Dialog widget dimension"""
 DIALOG_SPIN_SIZE = (150, -1)
@@ -127,7 +139,7 @@ GM_WINDOW_MIN_SIZE = (525, 400)
 if sys.platform in ('win32', 'darwin') or os.environ.get('UBUNTU_MENUPROXY'):
     GM_WINDOW_SIZE = (GM_WINDOW_MIN_SIZE[0], 600)
 else:
-    GM_WINDOW_SIZE = (600, 600)
+    GM_WINDOW_SIZE = (625, 600)
 
 if sys.platform == 'win32':
     BIN_EXT = '.exe'
@@ -136,7 +148,7 @@ else:
     BIN_EXT = SCT_EXT = ''
 
 
-def UpdateGRASSAddOnCommands(eList = None):
+def UpdateGRASSAddOnCommands(eList=None):
     """Update list of available GRASS AddOns commands to use when
     parsing string from the command line
 
@@ -151,7 +163,7 @@ def UpdateGRASSAddOnCommands(eList = None):
         addonPath += os.pathsep + os.path.join(addonBase, 'bin')
         if sys.platform != 'win32':
             addonPath += os.pathsep + os.path.join(addonBase, 'scripts')
-    
+
     # remove commands first
     if eList:
         for ext in eList:
@@ -164,15 +176,15 @@ def UpdateGRASSAddOnCommands(eList = None):
     for path in addonPath.split(os.pathsep):
         if not os.path.exists(path) or not os.path.isdir(path):
             continue
-        
+
         # check if addon is in the path
         if pathList and path not in pathList:
             os.environ['PATH'] = path + os.pathsep + os.environ['PATH']
-        
+
         for fname in os.listdir(path):
             if fname in ['docs', 'modules.xml']:
                 continue
-            if grassScripts: # win32
+            if grassScripts:  # win32
                 name, ext = os.path.splitext(fname)
                 if name not in grassCmd:
                     if ext not in [BIN_EXT, SCT_EXT]:
@@ -190,7 +202,7 @@ def UpdateGRASSAddOnCommands(eList = None):
                     grassCmd.add(fname)
                     Debug.msg(3, "AddOn commands: %s", fname)
                     nCmd += 1
-    
+
     Debug.msg(1, "Number of GRASS AddOn commands: %d", nCmd)
 
 """@brief Collected GRASS-relared binaries/scripts"""
@@ -206,4 +218,5 @@ hasAgw = CheckWxVersion([2, 8, 11, 0])
 wxPython3 = CheckWxVersion([3, 0, 0, 0])
 
 """@Add GUIDIR/scripts into path"""
-os.environ['PATH'] = os.path.join(GUIDIR, 'scripts') + os.pathsep + os.environ['PATH']
+os.environ['PATH'] = os.path.join(
+    GUIDIR, 'scripts') + os.pathsep + os.environ['PATH']
diff --git a/gui/wxpython/core/gthread.py b/gui/wxpython/core/gthread.py
index af4353d..e2d7af5 100644
--- a/gui/wxpython/core/gthread.py
+++ b/gui/wxpython/core/gthread.py
@@ -23,6 +23,7 @@ import Queue
 
 from core.gconsole import EVT_CMD_DONE, wxCmdDone
 
+
 class gThread(threading.Thread, wx.EvtHandler):
     """Thread for various backends"""
     requestId = 0
@@ -65,8 +66,8 @@ class gThread(threading.Thread, wx.EvtHandler):
         return gThread.requestId
 
     def GetId(self):
-         """Get id for next command"""
-         return gThread.requestId + 1
+        """Get id for next command"""
+        return gThread.requestId + 1
 
     def SetId(self, id):
         """Set starting id"""
@@ -95,14 +96,14 @@ class gThread(threading.Thread, wx.EvtHandler):
 
             if self.terminate:
                 return
-            #except Exception as e:
+            # except Exception as e:
             #    exception  = e;
 
             self.resultQ.put((requestId, ret))
 
             event = wxCmdDone(ondone=vars()['ondone'],
                               kwds=kwds,
-                              args=args, #TODO expand args to kwds
+                              args=args,  # TODO expand args to kwds
                               ret=ret,
                               exception=exception,
                               userdata=vars()['userdata'],
@@ -115,6 +116,6 @@ class gThread(threading.Thread, wx.EvtHandler):
         if event.ondone:
             event.ondone(event)
 
-    def Terminate(self):
+    def Terminate(self, terminate=True):
         """Abort command(s)"""
-        self.terminate = True
+        self.terminate = terminate
diff --git a/gui/wxpython/core/layerlist.py b/gui/wxpython/core/layerlist.py
index 4dc927d..3964396 100644
--- a/gui/wxpython/core/layerlist.py
+++ b/gui/wxpython/core/layerlist.py
@@ -27,6 +27,7 @@ class LayerList(object):
     a non GUI class (e.g. named LayerTree) which includes this API,
     should be used for Layer Manager.
     """
+
     def __init__(self):
         self._list = []
 
@@ -73,7 +74,7 @@ class LayerList(object):
                     opacity=1, label=None, pos=0):
         """Creates new layer and adds it to the list (insert to the first position).
 
-        :param ltype: layer type (raster, vector, 3d-raster, ...)
+        :param ltype: layer type (raster, vector, raster_3d, ...)
         :param cmd: command (given as a list)
         :param active: if True layer is active
         :param hidden: if True layer is hidden
@@ -179,6 +180,7 @@ class Layer(object):
         ...
         ValueError: Map <blablabla> not found.
     """
+
     def __init__(self):
         self._mapType = None
         self._name = None
@@ -209,14 +211,20 @@ class Layer(object):
         """
         if not self.hidden:
             fullName = name.split('@')
-            if len(fullName) == 1 and self._mapType != 'rgb':  # skip checking rgb maps for now
+            if len(
+                    fullName) == 1 and self._mapType != 'rgb':  # skip checking rgb maps for now
                 if self._mapType is None:
-                    raise ValueError("To set layer name, the type of layer must be specified.")
+                    raise ValueError(
+                        "To set layer name, the type of layer must be specified.")
 
-                res = gcore.find_file(name=fullName,
-                                      element=self._internalTypes[self._mapType])
+                res = gcore.find_file(
+                    name=fullName,
+                    element=self._internalTypes[
+                        self._mapType])
                 if not res['mapset']:
-                    raise ValueError("Map <{name}> not found.".format(name=name))
+                    raise ValueError(
+                        "Map <{name}> not found.".format(
+                            name=name))
                 self._name = name + '@' + res['mapset']
             else:
                 self._name = name
@@ -249,7 +257,9 @@ class Layer(object):
         :param mapType: can be 'raster', 'vector', 'raster_3d'
         """
         if mapType not in self._mapTypes:
-            raise ValueError("Wrong map type used: {mtype}".format(mtype=mapType))
+            raise ValueError(
+                "Wrong map type used: {mtype}".format(
+                    mtype=mapType))
 
         self._mapType = mapType
 
@@ -268,7 +278,9 @@ class Layer(object):
         :param float opacity: value between 0 and 1
         """
         if not (0 <= opacity <= 1):
-            raise ValueError("Opacity value must be between 0 and 1, not {op}.".format(op=opacity))
+            raise ValueError(
+                "Opacity value must be between 0 and 1, not {op}.".format(
+                    op=opacity))
         self._opacity = opacity
 
     opacity = property(fget=GetOpacity, fset=SetOpacity)
@@ -302,6 +314,7 @@ class Layer(object):
 
 class LayerListToRendererConverter:
     """Help class for converting LayerList layers into renderer list (Map)"""
+
     def __init__(self, renderer):
         """
 
@@ -357,16 +370,7 @@ class LayerListToRendererConverter:
 
     def AddLayer(self, index, layer):
         """Adds layer to renderer (prepends)."""
-        mapType = None
-        if layer.mapType == 'raster':
-            mapType = 'raster'
-        elif layer.mapType == 'vector':
-            mapType = 'vector'
-        elif layer.mapType == 'raster_3d':
-            mapType = '3d-raster'
-        elif layer.mapType == 'rgb':
-            mapType = 'rgb'
-        self._renderer.AddLayer(ltype=mapType, command=layer.cmd,
+        self._renderer.AddLayer(ltype=layer.mapType, command=layer.cmd,
                                 name=layer.name, active=layer.active,
                                 hidden=False, opacity=layer.opacity,
                                 render=True, pos=-1)
diff --git a/gui/wxpython/core/menutree.py b/gui/wxpython/core/menutree.py
index 876fd95..e9504b3 100644
--- a/gui/wxpython/core/menutree.py
+++ b/gui/wxpython/core/menutree.py
@@ -37,9 +37,9 @@ import os
 import sys
 import copy
 try:
-    import xml.etree.ElementTree   as etree
+    import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
 
 import wx
 
@@ -55,11 +55,12 @@ if not os.getenv("GISBASE"):
 # TODO: change the system to remove strange derived classes
 class MenuTreeModelBuilder:
     """Abstract menu data class"""
+
     def __init__(self, filename, expandAddons=True):
 
-        self.menustyle = UserSettings.Get(group = 'appearance',
-                                          key = 'menustyle',
-                                          subkey = 'selection')
+        self.menustyle = UserSettings.Get(group='appearance',
+                                          key='menustyle',
+                                          subkey='selection')
 
         xmlTree = etree.parse(filename)
         if expandAddons:
@@ -89,14 +90,14 @@ class MenuTreeModelBuilder:
             self.model.AppendNode(parent=node, label='', data=data)
         elif item.tag == 'menuitem':
             origLabel = _(item.find('label').text)
-            handler  = item.find('handler').text
-            desc     = item.find('help')  # optional
-            gcmd     = item.find('command')  # optional
-            keywords = item.find('keywords') # optional
-            shortcut = item.find('shortcut') # optional
-            wxId     = item.find('id')       # optional
-            icon     = item.find('icon')     # optional
-            if gcmd != None:
+            handler = item.find('handler').text
+            desc = item.find('help')  # optional
+            gcmd = item.find('command')  # optional
+            keywords = item.find('keywords')  # optional
+            shortcut = item.find('shortcut')  # optional
+            wxId = item.find('id')       # optional
+            icon = item.find('icon')     # optional
+            if gcmd is not None:
                 gcmd = gcmd.text
             else:
                 gcmd = ""
@@ -106,17 +107,17 @@ class MenuTreeModelBuilder:
                 desc = ""
             if keywords is None or keywords.text is None:
                 keywords = ""
-            else:            
+            else:
                 keywords = keywords.text
-            if shortcut != None:
+            if shortcut is not None:
                 shortcut = shortcut.text
             else:
                 shortcut = ""
-            if wxId != None:
+            if wxId is not None:
                 wxId = eval('wx.' + wxId.text)
             else:
                 wxId = wx.ID_ANY
-            if icon != None:
+            if icon is not None:
                 icon = icon.text
             else:
                 icon = ''
@@ -126,8 +127,15 @@ class MenuTreeModelBuilder:
                     label += '   [' + gcmd + ']'
                 elif self.menustyle == 2:
                     label = '      [' + gcmd + ']'
-            data = dict(label=origLabel, description=desc, handler=handler,
-                        command=gcmd, keywords=keywords, shortcut=shortcut, wxId=wxId, icon=icon)
+            data = dict(
+                label=origLabel,
+                description=desc,
+                handler=handler,
+                command=gcmd,
+                keywords=keywords,
+                shortcut=shortcut,
+                wxId=wxId,
+                icon=icon)
             self.model.AppendNode(parent=node, label=label, data=data)
         elif item.tag == 'menu':
             self._createMenu(item, node)
@@ -163,6 +171,7 @@ class MenuTreeModelBuilder:
     def PrintCommands(self, fh):
         printCommands(self.model.root, fh, itemSep=' | ', menuSep=' > ')
 
+
 def removeSeparators(model, node=None):
     if not node:
         node = model.root
@@ -172,6 +181,7 @@ def removeSeparators(model, node=None):
     else:
         model.RemoveNode(node)
 
+
 def printTree(node, fh, indent=0):
     if not node.label:
         return
@@ -180,6 +190,7 @@ def printTree(node, fh, indent=0):
     for child in node.children:
         printTree(node=child, fh=fh, indent=indent + 2)
 
+
 def printStrings(node, fh):
     # node.label  - with module in brackets
     # node.data['label'] - without module in brackets
@@ -193,6 +204,7 @@ def printStrings(node, fh):
     for child in node.children:
         printStrings(node=child, fh=fh)
 
+
 def printCommands(node, fh, itemSep, menuSep):
 
     def collectParents(node, parents):
@@ -217,21 +229,22 @@ def printCommands(node, fh, itemSep, menuSep):
 if __name__ == "__main__":
 
     action = 'strings'
-    menu   = 'manager'
+    menu = 'manager'
 
     for arg in sys.argv:
         if arg in ('strings', 'tree', 'commands', 'dump'):
-            action =  arg
+            action = arg
         elif arg in ('manager', 'module_tree', 'modeler', 'psmap'):
             menu = arg
 
     # FIXME: cross-dependencies
     if menu == 'manager':
-        from lmgr.menudata     import LayerManagerMenuData
-        from core.globalvar    import WXGUIDIR
+        from lmgr.menudata import LayerManagerMenuData
+        from core.globalvar import WXGUIDIR
         filename = os.path.join(WXGUIDIR, 'xml', 'menudata.xml')
         menudata = LayerManagerMenuData(filename)
-    # FIXME: since module descriptions are used again we have now the third copy of the same string (one is in modules)
+    # FIXME: since module descriptions are used again we have now the third
+    # copy of the same string (one is in modules)
     elif menu == 'module_tree':
         from lmgr.menudata import LayerManagerModuleTree
         from core.globalvar import WXGUIDIR
diff --git a/gui/wxpython/core/render.py b/gui/wxpython/core/render.py
index e6d4d94..399bbee 100644
--- a/gui/wxpython/core/render.py
+++ b/gui/wxpython/core/render.py
@@ -3,21 +3,15 @@
 
 @brief Rendering map layers and overlays into map composition image.
 
-.. todo::
-    Implement RenderManager also for other layers (see WMS
-    implementation for details)
-
-.. todo::
-    Render classes should not care about updating statusbar (change
-    emiting events).
-
 Classes:
  - render::Layer
  - render::MapLayer
  - render::Overlay
  - render::Map
+ - render::RenderLayerMgr
+ - render::RenderMapMgr
 
-(C) 2006-2014 by the GRASS Development Team
+(C) 2006-2015 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -34,22 +28,23 @@ import math
 import copy
 import tempfile
 import types
+import time
 
 import wx
 
 from grass.script import core as grass
 from grass.script.utils import try_remove
+from grass.script.task import cmdlist_to_tuple, cmdtuple_to_list
 from grass.pydispatch.signal import Signal
+from grass.exceptions import CalledModuleError
 
-from core          import utils
+from core import utils
 from core.utils import _
-from core.ws       import RenderWMSMgr
-from core.gcmd     import GException, GError, RunCommand
-from core.debug    import Debug
+from core.ws import RenderWMSMgr
+from core.gcmd import GException, GError, RunCommand, EncodeString
+from core.debug import Debug
 from core.settings import UserSettings
-
-
-USE_GPNMCOMP = True
+from core.gthread import gThread
 
 
 class Layer(object):
@@ -59,8 +54,9 @@ class Layer(object):
     - For map layer use MapLayer class.
     - For overlays use Overlay class.
     """
-    def __init__(self, ltype, cmd, Map, name=None,
-                 active=True, hidden=False, opacity=1.0):
+
+    def __init__(self, ltype, cmd, Map, name=None, active=True,
+                 hidden=False, opacity=1.0, mapfile=None, render=True):
         """Create new instance
 
         .. todo::
@@ -75,55 +71,63 @@ class Layer(object):
         :param active: layer is active, will be rendered only if True
         :param hidden: layer is hidden, won't be listed in Layer Manager if True
         :param float opacity: layer opacity <0;1>
+        :param mapfile full path to output file or None
         """
-
-        # generated file for each layer
-        if USE_GPNMCOMP or ltype == 'overlay':
+        if mapfile:
+            self.mapfile = mapfile
+        else:
             if ltype == 'overlay':
                 tempfile_sfx = ".png"
             else:
                 tempfile_sfx = ".ppm"
 
-            mapfile = tempfile.NamedTemporaryFile(suffix=tempfile_sfx, delete=False)
+            mapfile = tempfile.NamedTemporaryFile(
+                suffix=tempfile_sfx, delete=False)
             # we don't want it open, we just need the name
             self.mapfile = mapfile.name
             mapfile.close()
-            self.maskfile = self.mapfile.rsplit(".",1)[0] + ".pgm"
-        else:
-            self.mapfile = self.maskfile = None
+            os.remove(self.mapfile)  # remove empty file
 
-        # stores class which manages rendering instead of simple command - e.g. WMS
+        self.maskfile = self.mapfile.rsplit(".", 1)[0] + ".pgm"
+
+        # stores class which manages rendering instead of simple command - e.g.
+        # WMS
         self.renderMgr = None
 
         self.Map = Map
         self.type = None
         self.SetType(ltype)
         self.name = name
-        self.environ = os.environ.copy()
 
         if self.type == 'command':
             self.cmd = list()
             for c in cmd:
-                self.cmd.append(utils.CmdToTuple(c))
+                self.cmd.append(cmdlist_to_tuple(c))
         else:
-            self.cmd = utils.CmdToTuple(cmd)
+            self.cmd = cmdlist_to_tuple(cmd)
 
-        self.active  = active
-        self.hidden  = hidden
+        self.active = active
+        self.hidden = hidden
         self.opacity = opacity
 
-        self.forceRender = True
+        self.forceRender = render
 
-        Debug.msg (3, "Layer.__init__(): type=%s, cmd='%s', name=%s, " \
-                       "active=%d, opacity=%d, hidden=%d" % \
-                       (self.type, self.GetCmd(string=True), self.name,
-                        self.active, self.opacity, self.hidden))
+        Debug.msg(3, "Layer.__init__(): type=%s, cmd='%s', name=%s, "
+                  "active=%d, opacity=%d, hidden=%d" %
+                  (self.type, self.GetCmd(string=True), self.name,
+                   self.active, self.opacity, self.hidden))
 
     def __del__(self):
-        Debug.msg (3, "Layer.__del__(): layer=%s, cmd='%s'" %
-                   (self.name, self.GetCmd(string = True)))
+        Debug.msg(3, "Layer.__del__(): layer=%s, cmd='%s'" %
+                  (self.name, self.GetCmd(string=True)))
 
-    def Render(self):
+    def __str__(self):
+        return self.GetCmd(string=True)
+
+    def __repr__(self):
+        return self.__str__()
+
+    def Render(self, env=None):
         """Render layer to image
 
         :return: rendered image filename
@@ -133,43 +137,41 @@ class Layer(object):
             return None
 
         # ignore in 2D
-        if self.type == '3d-raster':
+        if self.type == 'raster_3d':
             return None
 
-        Debug.msg (3, "Layer.Render(): type=%s, name=%s" % \
-                       (self.type, self.name))
+        Debug.msg(3, "Layer.Render(): type=%s, name=%s, file=%s" %
+                  (self.type, self.name, self.mapfile))
 
         # prepare command for each layer
         layertypes = utils.command2ltype.values() + ['overlay', 'command']
 
         if self.type not in layertypes:
-            raise GException(_("<%(name)s>: layer type <%(type)s> is not supported") % \
-                                 {'type' : self.type, 'name' : self.name})
+            raise GException(
+                _("<%(name)s>: layer type <%(type)s> is not supported") %
+                {'type': self.type, 'name': self.name})
 
-        if self.mapfile:
-            self.environ["GRASS_RENDER_FILE"] = self.mapfile
+        if not env:
+            env = os.environ.copy()
 
-        # execute command
+        # render layers
         try:
             if self.type == 'command':
-                read = False
+                first = True
                 for c in self.cmd:
-                    ret, msg = self._runCommand(c)
-                    if ret != 0:
-                        break
-                    if not read:
-                        self.environ["GRASS_RENDER_FILE_READ"] = "TRUE"
-
-                self.environ["GRASS_RENDER_FILE_READ"] = "FALSE"
+                    self.renderMgr.Render(c, env)
+                    if first:
+                        env["GRASS_RENDER_FILE_READ"] = "TRUE"
+                        first = False
             else:
-                ret, msg = self._runCommand(self.cmd)
-            if ret != 0:
-                sys.stderr.write(_("Command '%s' failed\n") % self.GetCmd(string = True))
-                if msg:
-                    sys.stderr.write(_("Details: %s\n") % msg)
-                raise GException()
-
+                self.renderMgr.Render(self.cmd, env)
         except GException:
+            sys.stderr.write(
+                _("Command '%s' failed\n") %
+                self.GetCmd(
+                    string=True))
+            sys.stderr.write(_("Details: %s\n") % e)
+
             # clean up after problems
             for f in [self.mapfile, self.maskfile]:
                 if not f:
@@ -177,27 +179,9 @@ class Layer(object):
                 try_remove(f)
                 f = None
 
-        self.forceRender = False
-
         return self.mapfile
 
-    def _runCommand(self, cmd):
-        """Run command to render data
-        """
-        if self.type == 'wms':
-            ret = 0
-            msg = ''
-            self.renderMgr.Render(cmd, env=self.environ)
-        else:
-            cmd[1]['quiet'] = True
-            ret, msg = RunCommand(cmd[0],
-                                  getErrorMsg = True,
-                                  env=self.environ,
-                                  **cmd[1])
-
-        return ret, msg
-
-    def GetCmd(self, string = False):
+    def GetCmd(self, string=False):
         """Get GRASS command as list of string.
 
         :param string: get command as string if True otherwise as list
@@ -234,7 +218,7 @@ class Layer(object):
         """
         return self.opacity
 
-    def GetName(self, fullyQualified = True):
+    def GetName(self, fullyQualified=True):
         """Get map layer name
 
         :param bool fullyQualified: True to return fully qualified name
@@ -248,11 +232,11 @@ class Layer(object):
             return self.name
         else:
             if '@' in self.name:
-                return { 'name' : self.name.split('@')[0],
-                         'mapset' : self.name.split('@')[1] }
+                return {'name': self.name.split('@')[0],
+                        'mapset': self.name.split('@')[1]}
             else:
-                return { 'name' : self.name,
-                         'mapset' : '' }
+                return {'name': self.name,
+                        'mapset': ''}
 
     def IsActive(self):
         """Check if layer is activated for rendering"""
@@ -273,12 +257,17 @@ class Layer(object):
         if ltype not in utils.command2ltype.values() + ['overlay', 'command']:
             raise GException(_("Unsupported map layer type '%s'") % ltype)
 
-        if ltype == 'wms' and not isinstance(self.renderMgr, RenderWMSMgr):
-            self.renderMgr = RenderWMSMgr(layer=self,
-                                          mapfile=self.mapfile,
-                                          maskfile=self.maskfile)
-        elif self.type == 'wms' and ltype != 'wms':
-            self.renderMgr = None
+        if not self.renderMgr:
+            env = {}
+            if ltype == 'wms':
+                renderMgr = RenderWMSMgr
+            else:
+                renderMgr = RenderLayerMgr
+                env['GRASS_RENDER_FILE'] = self.mapfile
+                if ltype == 'overlay':
+                    env['GRASS_RENDER_FILE_READ'] = 'FALSE'
+                    env['GRASS_RENDER_TRANSPARENT'] = 'TRUE'
+            self.renderMgr = renderMgr(self, env)
 
         self.type = ltype
 
@@ -286,11 +275,11 @@ class Layer(object):
         """Set layer name"""
         self.name = name
 
-    def SetActive(self, enable = True):
+    def SetActive(self, enable=True):
         """Active or deactive layer"""
         self.active = bool(enable)
 
-    def SetHidden(self, enable = False):
+    def SetHidden(self, enable=False):
         """Hide or show map layer in Layer Manager"""
         self.hidden = bool(enable)
 
@@ -308,53 +297,37 @@ class Layer(object):
         if self.type == 'command':
             self.cmd = []
             for c in cmd:
-                self.cmd.append(utils.CmdToTuple(c))
+                self.cmd.append(cmdlist_to_tuple(c))
         else:
-            self.cmd = utils.CmdToTuple(cmd)
-        Debug.msg(3, "Layer.SetCmd(): cmd='%s'" % self.GetCmd(string = True))
+            self.cmd = cmdlist_to_tuple(cmd)
+        Debug.msg(3, "Layer.SetCmd(): cmd='%s'" % self.GetCmd(string=True))
 
         # for re-rendering
         self.forceRender = True
 
-    def SetEnvironment(self, environ):
-        """Sets environment for rendering."""
-        self.environ = environ
-
     def IsDownloading(self):
         """Is data downloading from web server e. g. wms"""
-        if self.renderMgr is None:
-            return False
-        else:
-            return self.renderMgr.IsDownloading()
+        return self.renderMgr.IsDownloading()
 
     def AbortThread(self):
         """Abort running thread e. g. downloading data"""
-        if self.renderMgr is None:
-            return
-        else:
-            self.renderMgr.Abort()
+        self.renderMgr.Abort()
 
     def GetRenderMgr(self):
         """Get render manager """
         return self.renderMgr
 
+
 class MapLayer(Layer):
-    def __init__(self, ltype, cmd, Map, name = None,
-                 active = True, hidden = False, opacity = 1.0):
-        """Represents map layer in the map canvas
 
-        :param ltype: layer type ('raster', 'vector', 'command', etc.)
-        :param cmd: GRASS command to render layer,
-                    given as list, e.g. ['d.rast',
-                    'map=elevation at PERMANENT']
-        :param map: render.Map instance
-        :param name: layer name, e.g. 'elevation at PERMANENT' (for layer tree) or None
-        :param active: layer is active, will be rendered only if True
-        :param hidden: layer is hidden, won't be listed in Layer Manager if True
-        :param opacity: layer opacity <0;1>
+    def __init__(self, *args, **kwargs):
+        """Represents map layer in the map canvas
         """
-        Layer.__init__(self, ltype, cmd, Map, name,
-                       active, hidden, opacity)
+        Layer.__init__(self, *args, **kwargs)
+        if self.type in ('vector', 'thememap'):
+            self._legrow = grass.tempfile(create=True)
+        else:
+            self._legrow = ''
 
     def GetMapset(self):
         """Get mapset of map layer
@@ -370,72 +343,429 @@ class MapLayer(Layer):
         except IndexError:
             return self.name
 
+
 class Overlay(Layer):
-    def __init__(self, id, ltype, cmd, Map,
-                 active = True, hidden = True, opacity = 1.0):
+
+    def __init__(self, id, *args, **kwargs):
         """Represents overlay displayed in map canvas
 
         :param id: overlay id (for PseudoDC)
-        :param type: overlay type ('barscale', 'legend', etc.)
-        :param cmd: GRASS command to render overlay,
-                    given as list, e.g. ['d.legend',
-                    'raster=elevation at PERMANENT']
-        :param map: render.Map instance
-        :param active: layer is active, will be rendered only if True
-        :param hidden: layer is hidden, won't be listed in Layer Manager if True
-        :param opacity: layer opacity <0;1>
         """
-        Layer.__init__(self, 'overlay', cmd, Map, ltype,
-                       active, hidden, opacity)
+        Layer.__init__(self, ltype='overlay', *args, **kwargs)
         self.id = id
 
+
+class RenderLayerMgr(wx.EvtHandler):
+
+    def __init__(self, layer, env):
+        """Render layer into image
+
+        :param layer: Layer to be rendered
+        """
+        self.layer = layer
+
+        wx.EvtHandler.__init__(self)
+        self.thread = gThread()
+
+        self.updateProgress = Signal('RenderLayerMgr.updateProgress')
+        self.renderingFailed = Signal('RenderLayerMgr.renderingFailed')
+
+        self._startTime = None
+        self._render_env = env
+
+    def UpdateRenderEnv(self, env):
+        self._render_env.update(env)
+
+    def Render(self, cmd, env):
+        """Render layer
+
+        :param cmd: display command given as tuple
+        :param env: environmental variables used for rendering
+        """
+        Debug.msg(1, "RenderLayerMgr.Render(%s): force=%d img=%s" %
+                  (self.layer, self.layer.forceRender, self.layer.mapfile))
+
+        env_cmd = env.copy()
+        env_cmd.update(self._render_env)
+        env_cmd['GRASS_RENDER_FILE'] = self.layer.mapfile
+        if self.layer.GetType() in ('vector', 'thememap'):
+            if os.path.isfile(self.layer._legrow):
+                os.remove(self.layer._legrow)
+            env_cmd['GRASS_LEGEND_FILE'] = self.layer._legrow
+
+        cmd_render = copy.deepcopy(cmd)
+        cmd_render[1]['quiet'] = True  # be quiet
+
+        self._startTime = time.time()
+        self.thread.Run(callable=self._render, cmd=cmd_render, env=env_cmd,
+                        ondone=self.OnRenderDone, userdata={'cmd': cmd})
+        self.layer.forceRender = False
+
+    def _render(self, cmd, env):
+        p = grass.start_command(cmd[0], env=env, stderr=grass.PIPE, **cmd[1])
+        stdout, stderr = p.communicate()
+        if p.returncode:
+            return stderr
+        else:
+            return None
+
+    def Abort(self):
+        """Abort rendering process"""
+        Debug.msg(1, "RenderLayerMgr({}).Abort()".format(self.layer))
+        self.thread.Terminate()
+
+        # force rendering layer next time
+        self.layer.forceRender = True
+        self.thread.Terminate(False)
+
+    def IsDownloading(self):
+        """Is downloading
+
+        :return: always False
+        """
+        return False
+
+    def OnRenderDone(self, event):
+        """Rendering done
+
+        Emits updateProcess
+        """
+        Debug.msg(1, "RenderLayerMgr.OnRenderDone(%s): err=%s time=%f" %
+                  (self.layer, event.ret, time.time() - self._startTime))
+        if event.ret is not None:
+            cmd = cmdtuple_to_list(event.userdata['cmd'])
+            self.renderingFailed.emit(cmd=cmd, error=event.ret)
+            # don't remove layer if overlay, we need to keep the old one
+            if self.layer.type != 'overlay':
+                try_remove(self.layer.mapfile)
+
+        self.updateProgress.emit(layer=self.layer)
+
+
+class RenderMapMgr(wx.EvtHandler):
+
+    def __init__(self, Map):
+        """Render map layers as image composition
+
+        :param Map: Map object to be rendered
+        """
+        wx.EvtHandler.__init__(self)
+
+        self.Map = Map
+
+        self.updateMap = Signal('RenderMapMgr.updateMap')
+        self.updateProgress = Signal('RenderMapMgr.updateProgress')
+        self.renderingFailed = Signal('RenderMapMgr.renderingFailed')
+        self.renderDone = Signal('RenderMapMgr.renderDone')
+        self.renderDone.connect(self.OnRenderDone)
+
+        # GRASS environment variable (for rendering)
+        self._render_env = {"GRASS_RENDER_BACKGROUNDCOLOR": "000000",
+                            "GRASS_RENDER_FILE_COMPRESSION": "0",
+                            "GRASS_RENDER_TRUECOLOR": "TRUE",
+                            "GRASS_RENDER_TRANSPARENT": "TRUE",
+                            "GRASS_LEGEND_FILE": self.Map.legfile
+                            }
+
+        self._init()
+        self._rendering = False
+        self._old_legend = []
+
+    def _init(self, env=None):
+        """Init render manager
+
+        :param env: environmental variables or None
+        """
+        self._startTime = time.time()
+        self.progressInfo = None
+        self._env = env
+        self.layers = []
+
+        # re-render from scratch
+        if os.path.exists(self.Map.mapfile):
+            os.remove(self.Map.mapfile)
+
+    def UpdateRenderEnv(self, env):
+        self._render_env.update(env)
+
+    def _renderLayers(self, env, force=False, overlaysOnly=False):
+        """Render all map layers into files
+
+        :param dict env: environmental variables to be used for rendering process
+        :param bool force: True to force rendering
+        :param bool overlaysOnly: True to render only overlays
+
+        :return: number of layers to be rendered
+        """
+        self.layers = self.Map.GetListOfLayers(ltype='overlay', active=True)
+        if not overlaysOnly:
+            self.layers += self.Map.GetListOfLayers(active=True,
+                                                    ltype='raster_3d',
+                                                    except_ltype=True)
+
+        # reset progress
+        self.ReportProgress()
+
+        # render map layers if forced
+        nlayers = 0
+        for layer in self.layers:
+            if force or layer.forceRender:
+                nlayers += 1
+                layer.Render(env)
+            else:
+                layer.GetRenderMgr().updateProgress.emit(layer=layer)
+
+        Debug.msg(1, "RenderMapMgr.Render(): %d layers to be rendered "
+                  "(force=%d, all active layers -> %d)" % (nlayers, force,
+                                                           len(self.layers)))
+
+        return nlayers
+
+    def GetRenderEnv(self, windres=False):
+        env = os.environ.copy()
+        env.update(self._render_env)
+        # use external gisrc if defined
+        if self.Map.gisrc:
+            env['GISRC'] = self.Map.gisrc
+        env['GRASS_REGION'] = self.Map.SetRegion(windres)
+        env['GRASS_RENDER_WIDTH'] = str(self.Map.width)
+        env['GRASS_RENDER_HEIGHT'] = str(self.Map.height)
+
+        if UserSettings.Get(group='display', key='driver',
+                            subkey='type') == 'png':
+            env['GRASS_RENDER_IMMEDIATE'] = 'png'
+        else:
+            env['GRASS_RENDER_IMMEDIATE'] = 'cairo'
+
+        return env
+
+    def RenderOverlays(self, force=False):
+        """Render only overlays
+
+        :param bool force: force rendering all map layers
+        """
+        if self._rendering:
+            Debug.msg(
+                1, "RenderMapMgr().RenderOverlays(): cancelled (already rendering)")
+            return
+
+        wx.BeginBusyCursor()
+        self._rendering = True
+
+        env = self.GetRenderEnv()
+        self._init(env)
+        # no layer composition afterwards
+        if self._renderLayers(env, force, overlaysOnly=True) == 0:
+            self.renderDone.emit()
+
+    def Render(self, force=False, windres=False):
+        """Render map composition
+
+        :param bool force: force rendering all map layers in the composition
+        :param windres: True for region resolution instead for map resolution
+        """
+        if self._rendering:
+            Debug.msg(
+                1, "RenderMapMgr().Render(): cancelled (already rendering)")
+            return
+
+        wx.BeginBusyCursor()
+        self._rendering = True
+
+        env = self.GetRenderEnv(windres)
+        self._init(env)
+        if self._renderLayers(env, force) == 0:
+            self.renderDone.emit()
+
+
+    def OnRenderDone(self):
+        """Rendering process done
+
+        Make image composiotion, emits updateMap event.
+        """
+        stopTime = time.time()
+
+        maps = list()
+        masks = list()
+        opacities = list()
+
+        # TODO: g.pnmcomp is now called every time
+        # even when only overlays are rendered
+        for layer in self.layers:
+            if layer.GetType() == 'overlay':
+                continue
+
+            if os.path.isfile(layer.mapfile):
+                maps.append(layer.mapfile)
+                masks.append(layer.maskfile)
+                opacities.append(str(layer.opacity))
+
+        # run g.pngcomp to get composite image
+        bgcolor = ':'.join(map(str, UserSettings.Get(
+            group='display', key='bgcolor', subkey='color')))
+        startCompTime = time.time()
+        if maps:
+            ret, msg = RunCommand('g.pnmcomp',
+                                  getErrorMsg=True,
+                                  overwrite=True,
+                                  input='%s' % ",".join(maps),
+                                  mask='%s' % ",".join(masks),
+                                  opacity='%s' % ",".join(opacities),
+                                  bgcolor=bgcolor,
+                                  width=self.Map.width,
+                                  height=self.Map.height,
+                                  output=self.Map.mapfile,
+                                  env=self._env)
+            if ret != 0:
+                self._rendering = False
+                if wx.IsBusy():
+                    wx.EndBusyCursor()
+                raise GException(_("Rendering failed: %s" % msg))
+
+        stop = time.time()
+        Debug.msg(1, "RenderMapMgr.OnRenderDone() time=%f sec (comp: %f)" %
+                  (stop - self._startTime, stop - startCompTime))
+
+        # Update legfile
+        new_legend = []
+        with open(self.Map.legfile, "w") as outfile:
+            for layer in reversed(self.layers):
+                if layer.GetType() not in ('vector', 'thememap'):
+                    continue
+
+                if os.path.isfile(layer._legrow) and layer._legrow[-1].isdigit() \
+                   and layer.hidden is False:
+                    with open(layer._legrow) as infile:
+                        line = infile.read()
+                        outfile.write(line)
+                        new_legend.append(line)
+
+        self._rendering = False
+        if wx.IsBusy():
+            wx.EndBusyCursor()
+
+        # if legend file changed, rerender vector legend
+        if new_legend != self._old_legend:
+            self._old_legend = new_legend
+            for layer in self.layers:
+                if layer.GetType() == 'overlay' and layer.GetName() == 'vectleg':
+                    layer.forceRender = True
+            self.Render()
+        else:
+            self.updateMap.emit()
+
+    def Abort(self):
+        """Abort all rendering processes"""
+        Debug.msg(1, "RenderMapMgr.Abort()")
+        for layer in self.layers:
+            layer.GetRenderMgr().Abort()
+
+        self._init()
+        if wx.IsBusy():
+            wx.EndBusyCursor()
+        self.updateProgress.emit(range=0, value=0, text=_("Rendering aborted"))
+
+    def ReportProgress(self, layer=None):
+        """Calculates progress in rendering/downloading
+        and emits signal to inform progress bar about progress.
+
+        Emits renderDone event when progressVal is equal to range.
+
+        :param layer: Layer to be processed or None to reset
+        """
+        if self.progressInfo is None or layer is None:
+            self.progressInfo = {'progresVal': 0,   # current progress value
+                                 'downloading': [],  # layers, which are downloading data
+                                 'rendered': [],    # already rendered layers
+                                 'range': len(self.layers)}
+        else:
+            if layer not in self.progressInfo['rendered']:
+                self.progressInfo['rendered'].append(layer)
+            if layer.IsDownloading() and \
+                    layer not in self.progressInfo['downloading']:
+                self.progressInfo['downloading'].append(layer)
+            else:
+                self.progressInfo['progresVal'] += 1
+                if layer in self.progressInfo['downloading']:
+                    self.progressInfo['downloading'].remove(layer)
+
+        # for updating statusbar text
+        stText = ''
+        first = True
+        for layer in self.progressInfo['downloading']:
+            if first:
+                stText += _("Downloading data ")
+                first = False
+            else:
+                stText += ', '
+            stText += '<%s>' % layer.GetName()
+        if stText:
+            stText += '...'
+
+        if self.progressInfo['range'] != len(self.progressInfo['rendered']):
+            if stText:
+                stText = _('Rendering & ') + stText
+            else:
+                stText = _('Rendering...')
+
+        self.updateProgress.emit(range=self.progressInfo['range'],
+                                 value=self.progressInfo['progresVal'],
+                                 text=stText)
+
+        if layer and self.progressInfo[
+                'progresVal'] == self.progressInfo['range']:
+            self.renderDone.emit()
+
+    def RenderingFailed(self, cmd, error):
+        self.renderingFailed.emit(cmd=cmd, error=error)
+
+
 class Map(object):
-    def __init__(self, gisrc = None):
+
+    def __init__(self, gisrc=None):
         """Map composition (stack of map layers and overlays)
 
         :param gisrc: alternative gisrc (used eg. by georectifier)
         """
+        Debug.msg(1, "Map.__init__(): gisrc=%s" % gisrc)
         # region/extent settigns
-        self.wind      = dict() # WIND settings (wind file)
-        self.region    = dict() # region settings (g.region)
-        self.width     = 640    # map width
-        self.height    = 480    # map height
+        self.wind = dict()  # WIND settings (wind file)
+        self.region = dict()  # region settings (g.region)
+        self.width = 640    # map width
+        self.height = 480    # map height
 
         # list of layers
-        self.layers    = list()  # stack of available GRASS layer
+        self.layers = list()  # stack of available GRASS layer
 
-        self.overlays  = list()  # stack of available overlays
-        self.ovlookup  = dict()  # lookup dictionary for overlay items and overlays
+        self.overlays = list()  # stack of available overlays
+        self.ovlookup = dict()  # lookup dictionary for overlay items and overlays
 
         # path to external gisrc
         self.gisrc = gisrc
 
         # generated file for g.pnmcomp output for rendering the map
-        self.mapfile = grass.tempfile(create = False) + '.ppm'
+        self.legfile = grass.tempfile(create=False) + '.leg'
+        self.tmpdir = os.path.dirname(self.legfile)
+        self.mapfile = grass.tempfile(create=False) + '.ppm'
+
 
         # setting some initial env. variables
         if not self.GetWindow():
             sys.stderr.write(_("Trying to recover from default region..."))
             RunCommand('g.region', flags='d')
 
-        # info to report progress
-        self.progressInfo = None
-
-        # GRASS environment variable (for rendering)
-        self.default_env = {"GRASS_RENDER_BACKGROUNDCOLOR" : "000000",
-                            "GRASS_RENDER_FILE_COMPRESSION" : "0",
-                            "GRASS_RENDER_TRUECOLOR"       : "TRUE",
-                            "GRASS_RENDER_TRANSPARENT"     : "TRUE"
-                            }
-
         # projection info
         self.projinfo = self._projInfo()
 
-        # is some layer being downloaded?
-        self.downloading = False
-
         self.layerChanged = Signal('Map.layerChanged')
-        self.updateProgress = Signal('Map.updateProgress')
+        self.layerRemoved = Signal('Map:layerRemoved')
+        self.layerAdded = Signal('Map:layerAdded')
+
+        self.renderMgr = RenderMapMgr(self)
+
+    def GetRenderMgr(self):
+        """Get render manager """
+        return self.renderMgr
 
     def GetProjInfo(self):
         """Get projection info"""
@@ -473,22 +803,26 @@ class Map(object):
         """Read WIND file and set up self.wind dictionary"""
         # FIXME: duplicated region WIND == g.region (at least some values)
         env = grass.gisenv()
-        filename = os.path.join (env['GISDBASE'],
-                                 env['LOCATION_NAME'],
-                                 env['MAPSET'],
-                                 "WIND")
+        filename = os.path.join(env['GISDBASE'],
+                                env['LOCATION_NAME'],
+                                env['MAPSET'],
+                                "WIND")
         try:
-            windfile = open (filename, "r")
+            windfile = open(filename, "r")
         except IOError as e:
-            sys.exit(_("Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n") % \
-                         { 'file' : filename, 'ret' : e})
+            sys.exit(
+                _("Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n") % {
+                    'file': filename,
+                    'ret': e})
 
         for line in windfile.readlines():
             line = line.strip()
             try:
                 key, value = line.split(":", 1)
             except ValueError as e:
-                sys.stderr.write(_("\nERROR: Unable to read WIND file: %s\n") % e)
+                sys.stderr.write(
+                    _("\nERROR: Unable to read WIND file: %s\n") %
+                    e)
                 return None
 
             self.wind[key.strip()] = value.strip()
@@ -504,16 +838,16 @@ class Map(object):
         computational resolution. Set computational resolution through
         g.region.
         """
-        mapwidth    = abs(self.region["e"] - self.region["w"])
-        mapheight   = abs(self.region['n'] - self.region['s'])
+        mapwidth = abs(self.region["e"] - self.region["w"])
+        mapheight = abs(self.region['n'] - self.region['s'])
 
-        self.region["nsres"] =  mapheight / self.height
-        self.region["ewres"] =  mapwidth  / self.width
-        self.region['rows']  = round(mapheight / self.region["nsres"])
-        self.region['cols']  = round(mapwidth / self.region["ewres"])
+        self.region["nsres"] = mapheight / self.height
+        self.region["ewres"] = mapwidth / self.width
+        self.region['rows'] = round(mapheight / self.region["nsres"])
+        self.region['cols'] = round(mapwidth / self.region["ewres"])
         self.region['cells'] = self.region['rows'] * self.region['cols']
 
-        Debug.msg (3, "Map.AdjustRegion(): %s" % self.region)
+        Debug.msg(3, "Map.AdjustRegion(): %s" % self.region)
 
         return self.region
 
@@ -539,8 +873,8 @@ class Map(object):
         w = float(self.region['w'])
 
         # Calculate rows, columns, and extents
-        new['rows'] = math.fabs(round((n-s)/nsres))
-        new['cols'] = math.fabs(round((e-w)/ewres))
+        new['rows'] = math.fabs(round((n - s) / nsres))
+        new['cols'] = math.fabs(round((e - w) / ewres))
 
         # Calculate new extents
         new['s'] = nsres * round(s / nsres)
@@ -559,9 +893,14 @@ class Map(object):
         else:
             res = self.region["nsres"]
 
-        Debug.msg(3, "Map.AlignExtentFromDisplay(): width=%d, height=%d, res=%f, center=%f,%f" % \
-                      (self.width, self.height, res, self.region['center_easting'],
-                       self.region['center_northing']))
+        Debug.msg(
+            3,
+            "Map.AlignExtentFromDisplay(): width=%d, height=%d, res=%f, center=%f,%f" %
+            (self.width,
+             self.height,
+             res,
+             self.region['center_easting'],
+             self.region['center_northing']))
 
         ew = (self.width / 2) * res
         ns = (self.height / 2) * res
@@ -582,21 +921,24 @@ class Map(object):
         :param size: map size given as tuple
         """
         try:
-            self.width  = int(size[0])
+            self.width = int(size[0])
             self.height = int(size[1])
             if self.width < 1 or self.height < 1:
-                sys.stderr.write(_("Invalid map size %d,%d\n") % (self.width, self.height))
+                sys.stderr.write(
+                    _("Invalid map size %d,%d\n") %
+                    (self.width, self.height))
                 raise ValueError
         except ValueError:
-            self.width  = 640
+            self.width = 640
             self.height = 480
 
-        Debug.msg(2, "Map.ChangeMapSize(): width=%d, height=%d" % \
-                      (self.width, self.height))
+        Debug.msg(2, "Map.ChangeMapSize(): width=%d, height=%d" %
+                  (self.width, self.height))
 
-    def GetRegion(self, rast=None, zoom=False, vect=None, rast3d=None, regionName=None,
-                  n=None, s=None, e=None, w=None, default=False,
-                  update=False, add3d=False):
+    def GetRegion(
+            self, rast=None, zoom=False, vect=None, rast3d=None,
+            regionName=None, n=None, s=None, e=None, w=None, default=False,
+            update=False, add3d=False):
         """Get region settings (g.region -upgc)
 
         Optionally extent, raster or vector map layer can be given.
@@ -657,8 +999,8 @@ class Map(object):
             cmd['raster_3d'] = rast3d
 
         ret, reg, msg = RunCommand('g.region',
-                                   read = True,
-                                   getErrorMsg = True,
+                                   read=True,
+                                   getErrorMsg=True,
                                    env=env,
                                    **cmd)
 
@@ -673,9 +1015,10 @@ class Map(object):
                 message = _("Unable to zoom to 3d raster map <%s>.") % rast3d + \
                     "\n\n" + _("Details:") + " %s" % msg
             else:
-                message = _("Unable to get current geographic extent. "
-                            "Force quiting wxGUI. Please manually run g.region to "
-                            "fix the problem.")
+                message = _(
+                    "Unable to get current geographic extent. "
+                    "Force quiting wxGUI. Please manually run g.region to "
+                    "fix the problem.")
             GError(message)
             return self.region
 
@@ -686,7 +1029,7 @@ class Map(object):
             except ValueError:
                 region[key] = val
 
-        Debug.msg (3, "Map.GetRegion(): %s" % region)
+        Debug.msg(3, "Map.GetRegion(): %s" % region)
 
         if update:
             self.region = region
@@ -700,7 +1043,7 @@ class Map(object):
         """
         return self.region
 
-    def SetRegion(self, windres = False, windres3 = False):
+    def SetRegion(self, windres=False, windres3=False):
         """Render string for GRASS_REGION env. variable, so that the
         images will be rendered from desired zoom level.
 
@@ -713,7 +1056,7 @@ class Map(object):
         grass_region = ""
 
         if windres:
-            compRegion = self.GetRegion(add3d = windres3)
+            compRegion = self.GetRegion(add3d=windres3)
             region = copy.copy(self.region)
             for key in ('nsres', 'ewres', 'cells'):
                 region[key] = compRegion[key]
@@ -786,17 +1129,17 @@ class Map(object):
                     grass_region += "depths: %d; " % \
                         (region['depths'])
                 else:
-                    grass_region += key + ": "  + self.wind[key] + "; "
+                    grass_region += key + ": " + self.wind[key] + "; "
 
-            Debug.msg (3, "Map.SetRegion(): %s" % grass_region)
+            Debug.msg(3, "Map.SetRegion(): %s" % grass_region)
 
             return grass_region
 
         except:
             return None
 
-    def GetListOfLayers(self, ltype = None, mapset = None, name = None,
-                        active = None, hidden = None):
+    def GetListOfLayers(self, ltype=None, mapset=None, name=None,
+                        active=None, hidden=None, except_ltype=False):
         """Returns list of layers of selected properties or list of
         all layers.
 
@@ -805,12 +1148,13 @@ class Map(object):
         :param name: all layers with given name
         :param active: only layers with 'active' attribute set to True or False
         :param hidden: only layers with 'hidden' attribute set to True or False
+        :param except_ltype: True to return all layers with type not in ltype
 
         :return: list of selected layers
         """
         selected = []
 
-        if type(ltype) == types.StringType:
+        if isinstance(ltype, types.StringType):
             one_type = True
         else:
             one_type = False
@@ -823,35 +1167,39 @@ class Map(object):
         # ["raster", "vector", "wms", ... ]
         for layer in llist:
             # specified type only
-            if ltype != None:
-                if one_type and layer.type != ltype:
-                    continue
-                elif not one_type and layer.type not in ltype:
-                    continue
+            if ltype is not None:
+                if one_type:
+                    if (not except_ltype and layer.type != ltype) or \
+                            (except_ltype and layer.type == ltype):
+                        continue
+                elif not one_type:
+                    if (not except_ltype and layer.type not in ltype) or \
+                       (except_ltype and layer.type in ltype):
+                        continue
 
             # mapset
-            if (mapset != None and ltype != 'overlay') and \
+            if (mapset is not None and ltype != 'overlay') and \
                     layer.GetMapset() != mapset:
                 continue
 
             # name
-            if name != None and layer.name != name:
+            if name is not None and layer.name != name:
                 continue
 
             # hidden and active layers
-            if active != None and \
-                   hidden != None:
+            if active is not None and \
+                    hidden is not None:
                 if layer.active == active and \
-                       layer.hidden == hidden:
+                        layer.hidden == hidden:
                     selected.append(layer)
 
             # active layers
-            elif active != None:
+            elif active is not None:
                 if layer.active == active:
                     selected.append(layer)
 
             # hidden layers
-            elif hidden != None:
+            elif hidden is not None:
                 if layer.hidden == hidden:
                     selected.append(layer)
 
@@ -859,71 +1207,13 @@ class Map(object):
             else:
                 selected.append(layer)
 
-        Debug.msg (3, "Map.GetListOfLayers(): numberof=%d" % len(selected))
+        Debug.msg(
+            3, "Map.GetListOfLayers(ltype=%s): -> %d" %
+            (ltype, len(selected)))
 
         return selected
 
-    def _renderLayers(self, env, force = False, overlaysOnly = False):
-        """Render all map layers into files
-
-        :param bool force: True to force rendering
-        :param bool overlaysOnly: True to render only overlays
-
-        :return: list of maps, masks and opacities
-        """
-        maps = list()
-        masks = list()
-        opacities = list()
-        # render map layers
-        if overlaysOnly:
-            layers = self.overlays
-        else:
-            layers = self.layers + self.overlays
-
-        self.downloading = False
-
-        self.ReportProgress(layer=None)
-
-
-        for layer in layers:
-            # skip non-active map layers
-            if not layer or not layer.active:
-                continue
-
-            # render
-            if force or layer.forceRender:
-                layer.SetEnvironment(env)
-                if not layer.Render():
-                    continue
-
-            if layer.IsDownloading():
-                self.downloading = True
-
-            self.ReportProgress(layer=layer)
-
-            # skip map layers when rendering fails
-            if not os.path.exists(layer.mapfile):
-                continue
-
-            # add image to compositing list
-            if layer.type != "overlay":
-                maps.append(layer.mapfile)
-                masks.append(layer.maskfile)
-                opacities.append(str(layer.opacity))
-
-            Debug.msg(3, "Map.Render() type=%s, layer=%s " % (layer.type, layer.name))
-
-        return maps, masks, opacities
-
-    def GetMapsMasksAndOpacities(self, force, windres, env):
-        """
-        Used by Render function.
-
-        :return: maps, masks, opacities
-        """
-        return self._renderLayers(force=force, env=env)
-
-    def Render(self, force = False, windres = False):
+    def Render(self, force=False, windres=False):
         """Creates final image composite
 
         This function can conditionaly use high-level tools, which
@@ -932,73 +1222,30 @@ class Map(object):
         :param force: force rendering
         :param windres: use region resolution (True) otherwise display
                         resolution
-
-        :return: name of file with rendered image or None
         """
-        wx.BeginBusyCursor()
-        env = os.environ.copy()
-        env.update(self.default_env)
-        # use external gisrc if defined
-        if self.gisrc:
-            env['GISRC'] = self.gisrc
-        env['GRASS_REGION'] = self.SetRegion(windres)
-        env['GRASS_RENDER_WIDTH'] = str(self.width)
-        env['GRASS_RENDER_HEIGHT'] = str(self.height)
-        driver = UserSettings.Get(group = 'display', key = 'driver', subkey = 'type')
-        if driver == 'png':
-            env['GRASS_RENDER_IMMEDIATE'] = 'png'
-        else:
-            env['GRASS_RENDER_IMMEDIATE'] = 'cairo'
-
-        maps, masks, opacities = self.GetMapsMasksAndOpacities(force, windres, env)
+        self.renderMgr.Render(force, windres)
 
-        # ugly hack for MSYS
-        if sys.platform != 'win32':
-            mapstr = ",".join(maps)
-            maskstr = ",".join(masks)
+    def _addLayer(self, layer, pos=-1):
+        if layer.type == 'overlay':
+            llist = self.overlays
         else:
-            mapstr = ""
-            for item in maps:
-                mapstr += item.replace('\\', '/')
-            mapstr = mapstr.rstrip(',')
-            maskstr = ""
-            for item in masks:
-                maskstr += item.replace('\\', '/')
-            maskstr = maskstr.rstrip(',')
-
-        # run g.pngcomp to get composite image
-        bgcolor = ':'.join(map(str, UserSettings.Get(group = 'display', key = 'bgcolor',
-                                                     subkey = 'color')))
-
-        if maps:
-            ret, msg = RunCommand('g.pnmcomp',
-                                  getErrorMsg = True,
-                                  overwrite = True,
-                                  input = '%s' % ",".join(maps),
-                                  mask = '%s' % ",".join(masks),
-                                  opacity = '%s' % ",".join(opacities),
-                                  bgcolor = bgcolor,
-                                  width = self.width,
-                                  height = self.height,
-                                  output = self.mapfile,
-                                  env=env)
-
-            if ret != 0:
-                print >> sys.stderr, _("ERROR: Rendering failed. Details: %s") % msg
-                wx.EndBusyCursor()
-                return None
+            llist = self.layers
 
-        Debug.msg (3, "Map.Render() force=%s file=%s" % (force, self.mapfile))
+        # add maplayer to the list of layers
+        if pos > -1:
+            llist.insert(pos, layer)
+        else:
+            llist.append(layer)
 
-        wx.EndBusyCursor()
-        if not maps:
-            return None
+        Debug.msg(
+            3, "Map._addLayer(): layer=%s type=%s" %
+            (layer.name, layer.type))
 
-        return self.mapfile
+        return layer
 
-    def AddLayer(self, ltype, command, name = None,
-                 active = True, hidden = False, opacity = 1.0, render = False,
-                 pos = -1):
+    def AddLayer(self, ltype, command, name=None,
+                 active=True, hidden=False, opacity=1.0, render=False,
+                 pos=-1):
         """Adds generic map layer to list of layers
 
         :param ltype: layer type ('raster', 'vector', etc.)
@@ -1013,36 +1260,33 @@ class Map(object):
         :return: new layer on success
         :return: None on failure
         """
-        wx.BeginBusyCursor()
         # opacity must be <0;1>
         if opacity < 0:
             opacity = 0
         elif opacity > 1:
             opacity = 1
-        layer = MapLayer(ltype = ltype, name = name, cmd = command, Map = self,
-                         active = active, hidden = hidden, opacity = opacity)
+        layer = MapLayer(ltype=ltype, name=name, cmd=command, Map=self,
+                         active=active, hidden=hidden, opacity=opacity)
 
-        # add maplayer to the list of layers
-        if pos > -1:
-            self.layers.insert(pos, layer)
-        else:
-            self.layers.append(layer)
-
-        Debug.msg (3, "Map.AddLayer(): layer=%s" % layer.name)
-        if render:
-            if not layer.Render():
-                raise GException(_("Unable to render map layer <%s>.") % name)
+        self._addLayer(layer, pos)
 
         renderMgr = layer.GetRenderMgr()
+        Debug.msg(
+            1, "Map.AddLayer(): ltype={}, command={}".format(
+                ltype, layer.GetCmd(
+                    string=True)))
         if renderMgr:
-            renderMgr.dataFetched.connect(self.layerChanged)
-            renderMgr.updateProgress.connect(self.ReportProgress)
+            if layer.type == 'wms':
+                renderMgr.dataFetched.connect(self.renderMgr.ReportProgress)
+            renderMgr.updateProgress.connect(self.renderMgr.ReportProgress)
+            renderMgr.renderingFailed.connect(self.renderMgr.RenderingFailed)
+        layer.forceRender = render
 
-        wx.EndBusyCursor()
+        self.layerAdded.emit(layer=layer)
 
         return layer
 
-    def DeleteAllLayers(self, overlay = False):
+    def DeleteAllLayers(self, overlay=False):
         """Delete all layers
 
         :param overlay: True to delete also overlayes
@@ -1051,7 +1295,7 @@ class Map(object):
         if overlay:
             self.overlays = []
 
-    def DeleteLayer(self, layer, overlay = False):
+    def DeleteLayer(self, layer, overlay=False):
         """Removes layer from list of layers
 
         :param layer: layer instance in layer tree
@@ -1059,7 +1303,7 @@ class Map(object):
 
         :return: removed layer on success or None
         """
-        Debug.msg (3, "Map.DeleteLayer(): name=%s" % layer.name)
+        Debug.msg(3, "Map.DeleteLayer(): name=%s" % layer.name)
 
         if overlay:
             list = self.overlays
@@ -1076,24 +1320,22 @@ class Map(object):
                 basefile = os.path.join(base, tempbase) + r'.*'
                 for f in glob.glob(basefile):
                     os.remove(f)
+
+            if layer.GetType() in ('vector', 'thememap'):
+                os.remove(layer._legrow)
+
             list.remove(layer)
 
+            self.layerRemoved.emit(layer=layer)
             return layer
 
         return None
 
     def SetLayers(self, layers):
         self.layers = layers
+        Debug.msg(5, "Map.SetLayers(): layers={}".format([EncodeString(layer.GetCmd(string=True)) for layer in layers]))
 
-        # only for debug
-        # might be removed including message, it seems more than clear
-        layerNameList = ""
-        for layer in self.layers:
-            if layer.GetName():
-                layerNameList += layer.GetName() + ','
-        Debug.msg(5, "Map.SetLayers(): layers=%s" % (layerNameList))
-
-    def ChangeLayer(self, layer, render = False, **kargs):
+    def ChangeLayer(self, layer, render=False, **kargs):
         """Change map layer properties
 
         :param layer: map layer instance
@@ -1105,10 +1347,10 @@ class Map(object):
         :param opacity: opacity level range from 0(transparent) - 1(not transparent)
         :param render: render an image if True
         """
-        Debug.msg (3, "Map.ChangeLayer(): layer=%s" % layer.name)
+        Debug.msg(3, "Map.ChangeLayer(): layer=%s" % layer.name)
 
         if 'ltype' in kargs:
-            layer.SetType(kargs['ltype']) # check type
+            layer.SetType(kargs['ltype'])  # check type
 
         if 'command' in kargs:
             layer.SetCmd(kargs['command'])
@@ -1125,9 +1367,10 @@ class Map(object):
         if 'opacity' in kargs:
             layer.SetOpacity(kargs['opacity'])
 
-        if render and not layer.Render():
-            raise GException(_("Unable to render map layer <%s>.") %
-                             layer.GetName())
+        self.forceRender = render
+
+        # not needed since there is self.forceRender
+        # self.layerChanged(layer=layer)
 
         return layer
 
@@ -1138,12 +1381,14 @@ class Map(object):
         :param opacity: opacity level <0;1>
         """
         # opacity must be <0;1>
-        if opacity < 0: opacity = 0
-        elif opacity > 1: opacity = 1
+        if opacity < 0:
+            opacity = 0
+        elif opacity > 1:
+            opacity = 1
 
         layer.opacity = opacity
-        Debug.msg (3, "Map.ChangeOpacity(): layer=%s, opacity=%f" % \
-                   (layer.name, layer.opacity))
+        Debug.msg(3, "Map.ChangeOpacity(): layer=%s, opacity=%f" %
+                  (layer.name, layer.opacity))
 
     def ChangeLayerActive(self, layer, active):
         """Enable or disable map layer
@@ -1152,21 +1397,23 @@ class Map(object):
         :param active: to be rendered (True)
         """
         layer.active = active
+        if active:
+            layer.forceRender = True
 
-        Debug.msg (3, "Map.ChangeLayerActive(): name='%s' -> active=%d" % \
-                   (layer.name, layer.active))
+        Debug.msg(3, "Map.ChangeLayerActive(): name='%s' -> active=%d" %
+                  (layer.name, layer.active))
 
-    def ChangeLayerName (self, layer, name):
+    def ChangeLayerName(self, layer, name):
         """Change name of the layer
 
         :param layer: layer instance in layer tree
         :param name:  layer name to set up
         """
-        Debug.msg (3, "Map.ChangeLayerName(): from=%s to=%s" % \
-                   (layer.name, name))
-        layer.name =  name
+        Debug.msg(3, "Map.ChangeLayerName(): from=%s to=%s" %
+                  (layer.name, name))
+        layer.name = name
 
-    def RemoveLayer(self, name = None, id = None):
+    def RemoveLayer(self, name=None, id=None):
         """Removes layer from layer list
 
         Layer is defined by name at mapset or id.
@@ -1190,12 +1437,12 @@ class Map(object):
                     self.layers.remove(layer)
                     return retlayer
         # del by id
-        elif id != None:
+        elif id is not None:
             return self.layers.pop(id)
 
         return None
 
-    def GetLayerIndex(self, layer, overlay = False):
+    def GetLayerIndex(self, layer, overlay=False):
         """Get index of layer in layer list.
 
         :param layer: layer instace in layer tree
@@ -1215,7 +1462,7 @@ class Map(object):
         return -1
 
     def AddOverlay(self, id, ltype, command,
-                   active = True, hidden = True, opacity = 1.0, render = False):
+                   active=True, hidden=True, opacity=1.0, render=False):
         """Adds overlay (grid, barscale, legend, etc.) to list of
         overlays
 
@@ -1229,20 +1476,24 @@ class Map(object):
         :return: new layer on success
         :return: None on failure
         """
-        Debug.msg (2, "Map.AddOverlay(): cmd=%s, render=%d" % (command, render))
-        overlay = Overlay(id = id, ltype = ltype, cmd = command, Map = self,
-                          active = active, hidden = hidden, opacity = opacity)
+        overlay = Overlay(id=id, name=ltype, cmd=command, Map=self,
+                          active=active, hidden=hidden, opacity=opacity)
 
-        # add maplayer to the list of layers
-        self.overlays.append(overlay)
+        self._addLayer(overlay)
 
-        if render and command != '' and not overlay.Render():
-            raise GException(_("Unable to render overlay <%s>.") %
-                             ltype)
+        renderMgr = overlay.GetRenderMgr()
+        Debug.msg(
+            1, "Map.AddOverlay(): cmd={}".format(EncodeString(
+                overlay.GetCmd(
+                    string=True))))
+        if renderMgr:
+            renderMgr.updateProgress.connect(self.renderMgr.ReportProgress)
+            renderMgr.renderingFailed.connect(self.renderMgr.RenderingFailed)
+        overlay.forceRender = render
 
-        return self.overlays[-1]
+        return overlay
 
-    def ChangeOverlay(self, id, render = False, **kargs):
+    def ChangeOverlay(self, id, **kargs):
         """Change overlay properities
 
         Add new overlay if overlay with 'id' doesn't exist.
@@ -1256,12 +1507,12 @@ class Map(object):
 
         :return: new layer on success
         """
-        overlay = self.GetOverlay(id, list = False)
-        if  overlay is None:
-            overlay = Overlay(id, ltype = None, cmd = None)
+        overlay = self.GetOverlay(id, list=False)
+        if overlay is None:
+            overlay = Overlay(id, ltype=None, cmd=None)
 
         if 'ltype' in kargs:
-            overlay.SetName(kargs['ltype']) # ltype -> overlay
+            overlay.SetName(kargs['ltype'])  # ltype -> overlay
 
         if 'command' in kargs:
             overlay.SetCmd(kargs['command'])
@@ -1275,9 +1526,8 @@ class Map(object):
         if 'opacity' in kargs:
             overlay.SetOpacity(kargs['opacity'])
 
-        if render and overlay.GetCmd() != [] and not overlay.Render():
-            raise GException(_("Unable to render overlay <%s>.") %
-                             overlay.GetType())
+        if 'render' in kargs:
+            overlay.forceRender = kargs['render']
 
         return overlay
 
@@ -1312,7 +1562,7 @@ class Map(object):
 
         :return: removed overlay on success or None
         """
-        return self.DeleteLayer(overlay, overlay = True)
+        return self.DeleteLayer(overlay, overlay=True)
 
     def _clean(self, llist):
         for layer in llist:
@@ -1337,56 +1587,8 @@ class Map(object):
 
     def RenderOverlays(self, force):
         """Render overlays only (for nviz)"""
-        for layer in self.overlays:
-            if force or layer.forceRender:
-                layer.Render()
+        self.renderMgr.RenderOverlays(force)
 
     def AbortAllThreads(self):
         """Abort all layers threads e. g. donwloading data"""
-        for l in self.layers + self.overlays:
-            l.AbortThread()
-
-    def ReportProgress(self, layer):
-        """Calculates progress in rendering/downloading
-        and emits signal to inform progress bar about progress.
-        """
-        if self.progressInfo is None or layer is None:
-            self.progressInfo = {'progresVal' : 0, # current progress value
-                                 'downloading' : [], # layers, which are downloading data
-                                 'rendered' : [], # already rendered layers
-                                 'range' : len(self.GetListOfLayers(active = True)) +
-                                           len(self.GetListOfLayers(active = True, ltype = 'overlay')) -
-                                           len(self.GetListOfLayers(active = True, ltype = '3d-raster'))}
-        else:
-            if layer not in self.progressInfo['rendered']:
-                self.progressInfo['rendered'].append(layer)
-            if layer.IsDownloading() and \
-                    layer not in self.progressInfo['downloading']:
-                self.progressInfo['downloading'].append(layer)
-            else:
-                self.progressInfo['progresVal'] += 1
-                if layer in self.progressInfo['downloading']:
-                    self.progressInfo['downloading'].remove(layer)
-
-        # for updating statusbar text
-        stText = ''
-        first = True
-        for layer in self.progressInfo['downloading']:
-            if first:
-                stText += _("Downloading data ")
-                first = False
-            else:
-                stText += ', '
-            stText += '<%s>' % layer.GetName()
-        if stText:
-            stText += '...'
-
-        if  self.progressInfo['range'] != len(self.progressInfo['rendered']):
-            if stText:
-                stText = _('Rendering & ') + stText
-            else:
-                stText = _('Rendering...')
-
-        self.updateProgress.emit(range=self.progressInfo['range'],
-                                 value=self.progressInfo['progresVal'],
-                                 text=stText)
+        self.renderMgr.Abort()
diff --git a/gui/wxpython/core/settings.py b/gui/wxpython/core/settings.py
index acce281..e8a5473 100644
--- a/gui/wxpython/core/settings.py
+++ b/gui/wxpython/core/settings.py
@@ -24,47 +24,52 @@ import sys
 import copy
 import types
 
-from core       import globalvar
-from core.gcmd  import GException, GError
+from core import globalvar
+from core.gcmd import GException, GError
 from core.utils import GetSettingsPath, PathJoin, rgb2str, _
 
+
 class Settings:
     """Generic class where to store settings"""
+
     def __init__(self):
         # settings file
         self.filePath = os.path.join(GetSettingsPath(), 'wx')
-        
+
         # key/value separator
         self.sep = ';'
-        
+
         # define default settings
         self._defaultSettings()  # -> self.defaultSettings
-        
+
         # read settings from the file
         self.userSettings = copy.deepcopy(self.defaultSettings)
         try:
             self.ReadSettingsFile()
         except GException as e:
             print >> sys.stderr, e.value
-        
+
         # define internal settings
-        self._internalSettings() # -> self.internalSettings
+        self._internalSettings()  # -> self.internalSettings
 
     def _generateLocale(self):
         """Generate locales
         """
         try:
-            self.locs = os.listdir(os.path.join(os.environ['GISBASE'], 'locale'))
-            self.locs.append('en') # GRASS doesn't ship EN po files
+            self.locs = os.listdir(
+                os.path.join(
+                    os.environ['GISBASE'],
+                    'locale'))
+            self.locs.append('en')  # GRASS doesn't ship EN po files
             self.locs.sort()
             # Add a default choice to not override system locale
             self.locs.insert(0, 'system')
         except:
             # No NLS
             self.locs = ['system']
-        
+
         return 'system'
-        
+
     def _defaultSettings(self):
         """Define default settings
         """
@@ -72,320 +77,320 @@ class Settings:
             projFile = PathJoin(os.environ["GRASS_PROJSHARE"], 'epsg')
         except KeyError:
             projFile = ''
-        
+
         id_loc = self._generateLocale()
-        
+
         self.defaultSettings = {
             #
             # general
             #
             'general': {
                 # use default window layout (layer manager, displays, ...)
-                'defWindowPos' : {
-                    'enabled' : True,
+                'defWindowPos': {
+                    'enabled': True,
                     'dim' : '1,1,%d,%d,%d,1,%d,%d' % \
-                        (globalvar.GM_WINDOW_SIZE[0],
-                         globalvar.GM_WINDOW_SIZE[1],
-                         globalvar.GM_WINDOW_SIZE[0] + 1,
-                         globalvar.MAP_WINDOW_SIZE[0],
-                         globalvar.MAP_WINDOW_SIZE[1])
-                    },
+                    (globalvar.GM_WINDOW_SIZE[0],
+                     globalvar.GM_WINDOW_SIZE[1],
+                     globalvar.GM_WINDOW_SIZE[0] + 1,
+                     globalvar.MAP_WINDOW_SIZE[0],
+                     globalvar.MAP_WINDOW_SIZE[1])
+                },
                 # workspace
-                'workspace' : {
-                    'posDisplay' : {
-                        'enabled' : False
-                        },
-                    'posManager' : {
-                        'enabled' : False
-                        },
+                'workspace': {
+                    'posDisplay': {
+                        'enabled': False
+                    },
+                    'posManager': {
+                        'enabled': False
                     },
                 },
-            'manager' : {
+            },
+            'manager': {
                 # show opacity level widget
-                'changeOpacityLevel' : {
-                    'enabled' : False
-                    }, 
+                'changeOpacityLevel': {
+                    'enabled': False
+                },
                 # ask when removing layer from layer tree
-                'askOnRemoveLayer' : {
-                    'enabled' : True
-                    },
+                'askOnRemoveLayer': {
+                    'enabled': True
+                },
                 # ask when quiting wxGUI or closing display
-                'askOnQuit' : {
-                    'enabled' : True
-                    },
+                'askOnQuit': {
+                    'enabled': True
+                },
                 # hide tabs
-                'hideTabs' : {
-                    'search' : False,
-                    'pyshell' : False,
-                    },
-                'copySelectedTextToClipboard' : {
-                    'enabled' : False
-                    },
+                'hideTabs': {
+                    'search': False,
+                    'pyshell': False,
                 },
+                'copySelectedTextToClipboard': {
+                    'enabled': False
+                },
+            },
             #
             # appearance
             #
             'appearance': {
-                'outputfont' : {
-                    'type' : 'Courier New',
+                'outputfont': {
+                    'type': 'Courier New',
                     'size': '10',
-                    },
+                },
                 # expand/collapse element list
-                'elementListExpand' : {
-                    'selection' : 0 
-                    },
-                'menustyle' : {
-                    'selection' : 1
-                    },
-                'gSelectPopupHeight' : {
-                    'value' : 200
-                    },
-                'iconTheme' : {
-                    'type' : 'grass'
-                    },
-                'commandNotebook' : {
-                    'selection' : 0 if sys.platform in ('win32', 'darwin') else 1
-                    },
+                'elementListExpand': {
+                    'selection': 0
+                },
+                'menustyle': {
+                    'selection': 1
                 },
+                'gSelectPopupHeight': {
+                    'value': 200
+                },
+                'iconTheme': {
+                    'type': 'grass'
+                },
+                'commandNotebook': {
+                    'selection': 0 if sys.platform in ('win32', 'darwin') else 1
+                },
+            },
             #
             # language
             #
             'language': {
                 'locale': {
-                    'lc_all' : id_loc
+                    'lc_all': id_loc
                 }
             },
             #
             # display
             #
             'display': {
-                'font' : {
-                    'type' : '',
-                    'encoding': 'ISO-8859-1',
-                    },
+                'font': {
+                    'type': '',
+                    'encoding': 'UTF-8',
+                },
                 'driver': {
                     'type': 'cairo'
-                    },
-                'alignExtent' : {
-                    'enabled' : True
-                    },
-                'compResolution' : {
-                    'enabled' : False
-                    },
+                },
+                'alignExtent': {
+                    'enabled': True
+                },
+                'compResolution': {
+                    'enabled': False
+                },
                 'autoRendering': {
-                    'enabled' : True
-                    },
-                'autoZooming' : {
-                    'enabled' : False
-                    },
+                    'enabled': True
+                },
+                'autoZooming': {
+                    'enabled': False
+                },
                 'statusbarMode': {
-                    'selection' : 0
-                    },
+                    'selection': 0
+                },
                 'bgcolor': {
-                    'color' : (255, 255, 255, 255),
-                    },
-                'mouseWheelZoom' : {
-                    'selection' : 1,
-                    },
-                'scrollDirection' : {
-                    'selection' : 0,
-                    },
-                'nvizDepthBuffer' : {
-                    'value' : '16',
-                    },
+                    'color': (255, 255, 255, 255),
                 },
+                'mouseWheelZoom': {
+                    'selection': 1,
+                },
+                'scrollDirection': {
+                    'selection': 0,
+                },
+                'nvizDepthBuffer': {
+                    'value': '16',
+                },
+            },
             #
             # projection
             #
-            'projection' : {
-                'statusbar' : {
-                    'proj4'    : '',
-                    'epsg'     : '',
-                    'projFile' : projFile,
-                    },
-                'format' : {
-                    'll'  : 'DMS',
-                    'precision' : 2,
-                    },
+            'projection': {
+                'statusbar': {
+                    'proj4': '',
+                    'epsg': '',
+                    'projFile': projFile,
                 },
+                'format': {
+                    'll': 'DMS',
+                    'precision': 2,
+                },
+            },
             #
             # Attribute Table Manager
             #
-            'atm' : {
-                'highlight' : {
-                    'color' : (255, 255, 0, 255),
-                    'width' : 2,
-                    'auto'  : True,
-                    },
-                'leftDbClick' : {
-                    'selection' : 1 # draw selected
-                    },
-                'askOnDeleteRec' : {
-                    'enabled' : True
-                    },
-                'keycolumn' : {
-                    'value' : 'cat'
-                    },
-                'encoding' : {
-                    'value' : '',
-                    }
+            'atm': {
+                'highlight': {
+                    'color': (255, 255, 0, 255),
+                    'width': 2,
+                    'auto': True,
+                },
+                'leftDbClick': {
+                    'selection': 1  # draw selected
+                },
+                'askOnDeleteRec': {
+                    'enabled': True
+                },
+                'keycolumn': {
+                    'value': 'cat'
                 },
+                'encoding': {
+                    'value': '',
+                }
+            },
             #
             # Command
             #
             'cmd': {
-                'overwrite' : {
-                    'enabled' : False
-                    },
-                'closeDlg' : {
-                    'enabled' : False
-                    },
-                'verbosity' : {
-                    'selection' : 'grassenv'
-                    },
-                'addNewLayer' : {
-                    'enabled' : True,
-                    },
-                'interactiveInput' : {
-                    'enabled' : True,
-                    },
+                'overwrite': {
+                    'enabled': False
+                },
+                'closeDlg': {
+                    'enabled': False
+                },
+                'verbosity': {
+                    'selection': 'grassenv'
                 },
+                'addNewLayer': {
+                    'enabled': True,
+                },
+                'interactiveInput': {
+                    'enabled': True,
+                },
+            },
             #
             # d.rast
             #
             'rasterLayer': {
                 'opaque': {
-                    'enabled' : False
-                    },
+                    'enabled': False
+                },
                 'colorTable': {
-                    'enabled' : False,
-                    'selection' : 'rainbow'
-                    },
+                    'enabled': False,
+                    'selection': 'rainbow'
                 },
+            },
             #
             # d.vect
             #
             'vectorLayer': {
                 'featureColor': {
-                    'color' : (0, 0, 0),
-                    'transparent' : {
+                    'color': (0, 0, 0),
+                    'transparent': {
                         'enabled': False
-                        }
-                    },
+                    }
+                },
                 'areaFillColor': {
-                    'color' : (200, 200, 200),
-                    'transparent' : {
+                    'color': (200, 200, 200),
+                    'transparent': {
                         'enabled': False
-                        }
-                    },
+                    }
+                },
                 'line': {
-                    'width' : 0,
-                    },
+                    'width': 0,
+                },
                 'point': {
                     'symbol': 'basic/x',
-                    'size' : 5,
-                    },
+                    'size': 5,
+                },
                 'showType': {
-                    'point' : {
-                        'enabled' : True
-                        },
-                    'line' : {
-                        'enabled' : True
-                        },
-                    'centroid' : {
-                        'enabled' : False
-                        },
-                    'boundary' : {
-                        'enabled' : True
-                        },
-                    'area' : {
-                        'enabled' : True
-                        },
-                    'face' : {
-                        'enabled' : True
-                        },
+                    'point': {
+                        'enabled': True
+                    },
+                    'line': {
+                        'enabled': True
+                    },
+                    'centroid': {
+                        'enabled': False
+                    },
+                    'boundary': {
+                        'enabled': False
+                    },
+                    'area': {
+                        'enabled': True
+                    },
+                    'face': {
+                        'enabled': True
                     },
                 },
+            },
             #
             # vdigit
             #
-            'vdigit' : {
+            'vdigit': {
                 # symbology
-                'symbol' : {
-                    'newSegment' : {
-                        'enabled' : None,
-                        'color' : (255, 0, 0, 255)
-                        }, # red
-                    'newLine' : {
-                        'enabled' : None,
-                        'color' : (0, 86, 45, 255)
-                        }, # dark green
-                    'highlight' : {
-                        'enabled' : None,
-                        'color' : (255, 255, 0, 255)
-                        }, # yellow
-                    'highlightDupl' : {
-                        'enabled' : None,
-                        'color' : (255, 72, 0, 255)
-                        }, # red
-                    'point' : {
-                        'enabled' : True,
-                        'color' : (0, 0, 0, 255)
-                        }, # black
-                    'line' : {
-                        'enabled' : True,
-                        'color' : (0, 0, 0, 255)
-                        }, # black
-                    'boundaryNo' : {
-                        'enabled' : True,
-                        'color' : (126, 126, 126, 255)
-                        }, # grey
-                    'boundaryOne' : {
-                        'enabled' : True,
-                        'color' : (0, 255, 0, 255)
-                        }, # green
-                    'boundaryTwo' : {
-                        'enabled' : True,
-                        'color' : (255, 135, 0, 255)
-                        }, # orange
-                    'centroidIn' : {
-                        'enabled' : True,
-                        'color' : (0, 0, 255, 255)
-                        }, # blue
-                    'centroidOut' : {
-                        'enabled' : True,
-                        'color' : (165, 42, 42, 255)
-                        }, # brown
-                    'centroidDup' : {
-                        'enabled' : True,
-                        'color' : (156, 62, 206, 255)
-                        }, # violet
-                    'nodeOne' : {
-                        'enabled' : True,
-                        'color' : (255, 0, 0, 255)
-                        }, # red
-                    'nodeTwo' : {
-                        'enabled' : True,
-                        'color' : (0, 86, 45, 255)
-                        }, # dark green
-                    'vertex' : {
-                        'enabled' : False,
-                        'color' : (255, 20, 147, 255)
-                        }, # deep pink
-                    'area' : {
-                        'enabled' : True,
-                        'color' : (217, 255, 217, 255)
-                        }, # green
-                    'direction' : {
-                        'enabled' : False,
-                        'color' : (255, 0, 0, 255)
-                        }, # red
-                    },
+                'symbol': {
+                    'newSegment': {
+                        'enabled': None,
+                        'color': (255, 0, 0, 255)
+                    },  # red
+                    'newLine': {
+                        'enabled': None,
+                        'color': (0, 86, 45, 255)
+                    },  # dark green
+                    'highlight': {
+                        'enabled': None,
+                        'color': (255, 255, 0, 255)
+                    },  # yellow
+                    'highlightDupl': {
+                        'enabled': None,
+                        'color': (255, 72, 0, 255)
+                    },  # red
+                    'point': {
+                        'enabled': True,
+                        'color': (0, 0, 0, 255)
+                    },  # black
+                    'line': {
+                        'enabled': True,
+                        'color': (0, 0, 0, 255)
+                    },  # black
+                    'boundaryNo': {
+                        'enabled': True,
+                        'color': (126, 126, 126, 255)
+                    },  # grey
+                    'boundaryOne': {
+                        'enabled': True,
+                        'color': (0, 255, 0, 255)
+                    },  # green
+                    'boundaryTwo': {
+                        'enabled': True,
+                        'color': (255, 135, 0, 255)
+                    },  # orange
+                    'centroidIn': {
+                        'enabled': True,
+                        'color': (0, 0, 255, 255)
+                    },  # blue
+                    'centroidOut': {
+                        'enabled': True,
+                        'color': (165, 42, 42, 255)
+                    },  # brown
+                    'centroidDup': {
+                        'enabled': True,
+                        'color': (156, 62, 206, 255)
+                    },  # violet
+                    'nodeOne': {
+                        'enabled': True,
+                        'color': (255, 0, 0, 255)
+                    },  # red
+                    'nodeTwo': {
+                        'enabled': True,
+                        'color': (0, 86, 45, 255)
+                    },  # dark green
+                    'vertex': {
+                        'enabled': False,
+                        'color': (255, 20, 147, 255)
+                    },  # deep pink
+                    'area': {
+                        'enabled': True,
+                        'color': (217, 255, 217, 255)
+                    },  # green
+                    'direction': {
+                        'enabled': False,
+                        'color': (255, 0, 0, 255)
+                    },  # red
+                },
                 # display
-                'lineWidth' : {
-                    'value' : 2,
-                    'units' : 'screen pixels'
-                    },
+                'lineWidth': {
+                    'value': 2,
+                    'units': 'screen pixels'
+                },
                 # snapping
                 'snapping': {
                     'value': 10,
@@ -396,438 +401,438 @@ class Settings:
                     'enabled': True
                 },
                 # digitize new record
-                'addRecord' : {
-                    'enabled' : True
-                    },
-                'layer' :{
-                    'value' : 1
-                    },
-                'category' : {
-                    'value' : 1
-                    },
-                'categoryMode' : {
-                    'selection' : 0
-                    },
+                'addRecord': {
+                    'enabled': True
+                },
+                'layer': {
+                    'value': 1
+                },
+                'category': {
+                    'value': 1
+                },
+                'categoryMode': {
+                    'selection': 0
+                },
                 # delete existing feature(s)
-                'delRecord' : {
-                    'enabled' : True
-                    },
+                'delRecord': {
+                    'enabled': True
+                },
                 # query tool
-                'query' : {
-                    'selection' : 0,
-                    'box' : True
-                    },
-                'queryLength' : {
-                    'than-selection' : 0,
-                    'thresh' : 0
-                    },
-                'queryDangle' : {
-                    'than-selection' : 0,
-                    'thresh' : 0
-                    },
+                'query': {
+                    'selection': 0,
+                    'box': True
+                },
+                'queryLength': {
+                    'than-selection': 0,
+                    'thresh': 0
+                },
+                'queryDangle': {
+                    'than-selection': 0,
+                    'thresh': 0
+                },
                 # select feature (point, line, centroid, boundary)
                 'selectType': {
-                    'point' : {
-                        'enabled' : True
-                        },
-                    'line' : {
-                        'enabled' : True
-                        },
-                    'centroid' : {
-                        'enabled' : True
-                        },
-                    'boundary' : {
-                        'enabled' : True
-                        },
+                    'point': {
+                        'enabled': True
                     },
-                'selectThresh' : {
-                    'value' : 10,
-                    'units' : 'screen pixels'
+                    'line': {
+                        'enabled': True
                     },
-                'checkForDupl' : {
-                    'enabled' : False
+                    'centroid': {
+                        'enabled': True
                     },
-                'selectInside' : {
-                    'enabled' : False
+                    'boundary': {
+                        'enabled': True
                     },
+                },
+                'selectThresh': {
+                    'value': 10,
+                    'units': 'screen pixels'
+                },
+                'checkForDupl': {
+                    'enabled': False
+                },
+                'selectInside': {
+                    'enabled': False
+                },
                 # exit
-                'saveOnExit' : {
-                    'enabled' : False,
-                    },
+                'saveOnExit': {
+                    'enabled': False,
+                },
                 # break lines on intersection
-                'breakLines' : {
-                    'enabled' : True,
-                    },
-                # close boundary (snap to the first node)
-                'closeBoundary' : {
-                    'enabled' : False,
-                    }
+                'breakLines': {
+                    'enabled': True,
                 },
-             # 
-             # plots for profiles, histograms, and scatterplots
-             #
+                # close boundary (snap to the first node)
+                'closeBoundary': {
+                    'enabled': False,
+                }
+            },
+            #
+            # plots for profiles, histograms, and scatterplots
+            #
             'profile': {
-                'raster' : {
-                    'pcolor'        : (0, 0, 255, 255), # line color
-                    'pwidth'        : 1, # line width
-                    'pstyle'        : 'solid', # line pen style
-                    'datatype'      : 'cell', # raster type
-                    },
-                'font' : {
-                    'titleSize' : 12,
-                    'axisSize' : 11,
-                    'legendSize' : 10,
-                    },
-                'marker' : {
-                    'color' : (0, 0, 0, 255),
-                    'fill' : 'transparent',
-                    'size' : 2,
-                    'type' : 'triangle',
-                    'legend' : _('Segment break'),
-                    },
-                'grid' : {
-                    'color' : (200, 200, 200, 255),
-                    'enabled' : True,
-                    },
-                'x-axis' : {
-                    'type' : 'auto', # axis format
-                    'min' : 0, # axis min for custom axis range
-                    'max': 0, # axis max for custom axis range
-                    'log' : False,
-                    },
-                'y-axis' : {
-                    'type' : 'auto', # axis format
-                    'min' : 0, # axis min for custom axis range
-                    'max': 0, # axis max for custom axis range
-                    'log' : False,
-                    },
-                'legend' : {
-                    'enabled' : True
-                    },
+                'raster': {
+                    'pcolor': (0, 0, 255, 255),  # line color
+                    'pwidth': 1,  # line width
+                    'pstyle': 'solid',  # line pen style
+                    'datatype': 'cell',  # raster type
                 },
-             'histogram': {
-                'raster' : {
-                    'pcolor'        : (0, 0, 255, 255), # line color
-                    'pwidth'        : 1, # line width
-                    'pstyle'        : 'solid', # line pen style
-                    'datatype'      : 'cell', # raster type
-                    },
-                'font' : {
-                    'titleSize'     : 12,
-                    'axisSize'      : 11,
-                    'legendSize'    : 10,
-                    },
-                'grid' : {
-                    'color'         : (200, 200, 200, 255),
-                    'enabled'       : True,
-                    },
-                'x-axis' : {
-                    'type'          : 'auto', # axis format
-                    'min'           : 0, # axis min for custom axis range
-                    'max'           : 0, # axis max for custom axis range
-                    'log'           : False,
-                    },
-                'y-axis' : {
-                    'type'          : 'auto', # axis format
-                    'min'           : 0, # axis min for custom axis range
-                    'max'           : 0, # axis max for custom axis range
-                    'log'           : False,
-                    },
-                'legend' : {
-                    'enabled'       : True
-                    },
+                'font': {
+                    'titleSize': 12,
+                    'axisSize': 11,
+                    'legendSize': 10,
+                },
+                'marker': {
+                    'color': (0, 0, 0, 255),
+                    'fill': 'transparent',
+                    'size': 2,
+                    'type': 'triangle',
+                    'legend': _('Segment break'),
+                },
+                'grid': {
+                    'color': (200, 200, 200, 255),
+                    'enabled': True,
+                },
+                'x-axis': {
+                    'type': 'auto',  # axis format
+                    'min': 0,  # axis min for custom axis range
+                    'max': 0,  # axis max for custom axis range
+                    'log': False,
+                },
+                'y-axis': {
+                    'type': 'auto',  # axis format
+                    'min': 0,  # axis min for custom axis range
+                    'max': 0,  # axis max for custom axis range
+                    'log': False,
+                },
+                'legend': {
+                    'enabled': True
+                },
+            },
+            'histogram': {
+                'raster': {
+                    'pcolor': (0, 0, 255, 255),  # line color
+                    'pwidth': 1,  # line width
+                    'pstyle': 'solid',  # line pen style
+                    'datatype': 'cell',  # raster type
                 },
-             'scatter': {
-                'raster' : {
-                    'pcolor' : (0, 0, 255, 255),
-                    'pfill' : 'solid',
-                    'psize' : 1,
-                    'ptype' : 'dot',
+                'font': {
+                    'titleSize': 12,
+                    'axisSize': 11,
+                    'legendSize': 10,
+                },
+                'grid': {
+                    'color': (200, 200, 200, 255),
+                    'enabled': True,
+                },
+                'x-axis': {
+                    'type': 'auto',  # axis format
+                    'min': 0,  # axis min for custom axis range
+                    'max': 0,  # axis max for custom axis range
+                    'log': False,
+                },
+                'y-axis': {
+                    'type': 'auto',  # axis format
+                    'min': 0,  # axis min for custom axis range
+                    'max': 0,  # axis max for custom axis range
+                    'log': False,
+                },
+                'legend': {
+                    'enabled': True
+                },
+            },
+            'scatter': {
+                'raster': {
+                    'pcolor': (0, 0, 255, 255),
+                    'pfill': 'solid',
+                    'psize': 1,
+                    'ptype': 'dot',
                     # FIXME: this is only a quick fix
                     # using also names used in a base class for compatibility
                     # probably used only for initialization
                     # base should be rewritten to not require this
-                    'pwidth' : 1,  # required by wxplot/base, maybe useless here
-                    'pstyle' : 'dot', # line pen style
-                    'plegend' : _('Data point'),
-                    0 : {'datatype' : 'CELL'},
-                    1 : {'datatype' : 'CELL'},
-                    },
-                'font' : {
-                    'titleSize'     : 12,
-                    'axisSize'      : 11,
-                    'legendSize'    : 10,
-                    },
-                'grid' : {
-                    'color'         : (200, 200, 200, 255),
-                    'enabled'       : True,
-                    },
-                'x-axis' : {
-                    'type'          : 'auto', # axis format
-                    'min'           : 0, # axis min for custom axis range
-                    'max'           : 0, # axis max for custom axis range
-                    'log'           : False,
-                    },
-                'y-axis' : {
-                    'type'          : 'auto', # axis format
-                    'min'           : 0, # axis min for custom axis range
-                    'max'           : 0, # axis max for custom axis range
-                    'log'           : False,
-                    },
-                'legend' : {
-                    'enabled'       : True
-                    },
+                    'pwidth': 1,  # required by wxplot/base, maybe useless here
+                    'pstyle': 'dot',  # line pen style
+                    'plegend': _('Data point'),
+                    0: {'datatype': 'CELL'},
+                    1: {'datatype': 'CELL'},
                 },
-            'gcpman' : {
-                'rms' : {
-                    'highestonly' : True,
-                    'sdfactor' : 1,
-                    },
-                'symbol' : {
-                    'color' : (0, 0, 255, 255),
-                    'hcolor' : (255, 0, 0, 255),
-                    'scolor' : (0, 255, 0, 255),
-                    'ucolor' : (255, 165, 0, 255),
-                    'unused' : True,
-                    'size' : 8,
-                    'width' : 2,
-                    },
+                'font': {
+                    'titleSize': 12,
+                    'axisSize': 11,
+                    'legendSize': 10,
                 },
-            'nviz' : {
-                'view' : {
-                    'persp' : {
-                        'value' : 20,
-                        'step' : 2,
-                        },
-                    'position' : {
-                        'x' : 0.84,
-                        'y' : 0.16,
-                        },
-                    'twist' : {
-                        'value' : 0,
-                        },
-                    'z-exag' : {
-                        'min' : 0,
-                        'max' : 10,
+                'grid': {
+                    'color': (200, 200, 200, 255),
+                    'enabled': True,
+                },
+                'x-axis': {
+                    'type': 'auto',  # axis format
+                    'min': 0,  # axis min for custom axis range
+                    'max': 0,  # axis max for custom axis range
+                    'log': False,
+                },
+                'y-axis': {
+                    'type': 'auto',  # axis format
+                    'min': 0,  # axis min for custom axis range
+                    'max': 0,  # axis max for custom axis range
+                    'log': False,
+                },
+                'legend': {
+                    'enabled': True
+                },
+            },
+            'gcpman': {
+                'rms': {
+                    'highestonly': True,
+                    'sdfactor': 1,
+                },
+                'symbol': {
+                    'color': (0, 0, 255, 255),
+                    'hcolor': (255, 0, 0, 255),
+                    'scolor': (0, 255, 0, 255),
+                    'ucolor': (255, 165, 0, 255),
+                    'unused': True,
+                    'size': 8,
+                    'width': 2,
+                },
+            },
+            'nviz': {
+                'view': {
+                    'persp': {
+                        'value': 20,
+                        'step': 2,
+                    },
+                    'position': {
+                        'x': 0.84,
+                        'y': 0.16,
+                    },
+                    'twist': {
+                        'value': 0,
+                    },
+                    'z-exag': {
+                        'min': 0,
+                        'max': 10,
                         'value': 1,
-                        },
-                    'background' : {
-                        'color' : (255, 255, 255, 255), # white
-                        },
                     },
-                'fly' : {
-                    'exag' : {
-                        'move' : 5,
-                        'turn' : 5,
-                        }
+                    'background': {
+                        'color': (255, 255, 255, 255),  # white
                     },
-                'animation' : {
-                    'fps' : 24,
-                    'prefix' : _("animation")
-                    },
-                'surface' : {
+                },
+                'fly': {
+                    'exag': {
+                        'move': 5,
+                        'turn': 5,
+                    }
+                },
+                'animation': {
+                    'fps': 24,
+                    'prefix': _("animation")
+                },
+                'surface': {
                     'shine': {
-                        'map' : False,
-                        'value' : 60.0,
-                        },
-                    'color' : {
-                        'map' : True,
-                        'value' : (100, 100, 100, 255), # constant: grey
-                        },
-                    'draw' : {
-                        'wire-color' : (136, 136, 136, 255),
-                        'mode' : 1, # fine
-                        'style' : 1, # surface
-                        'shading' : 1, # gouraud
-                        'res-fine' : 6,
-                        'res-coarse' : 9,
-                        },
-                    'position' : {
-                        'x' : 0,
-                        'y' : 0,
-                        'z' : 0,
-                        },
+                        'map': False,
+                        'value': 60.0,
+                    },
+                    'color': {
+                        'map': True,
+                        'value': (100, 100, 100, 255),  # constant: grey
+                    },
+                    'draw': {
+                        'wire-color': (136, 136, 136, 255),
+                        'mode': 1,  # fine
+                        'style': 1,  # surface
+                        'shading': 1,  # gouraud
+                        'res-fine': 6,
+                        'res-coarse': 9,
+                    },
+                    'position': {
+                        'x': 0,
+                        'y': 0,
+                        'z': 0,
                     },
-                'constant' : {
-                    'color' : (100, 100, 100, 255),
-                    'value' : 0.0,
-                    'transp' : 0,
+                },
+                'constant': {
+                    'color': (100, 100, 100, 255),
+                    'value': 0.0,
+                    'transp': 0,
                     'resolution': 6
                 },
-                'vector' : {
-                    'lines' : {
-                        'show' : False,
-                        'width' : 2,
-                        'color' : (0, 0, 0, 255),
-                        'flat' : False,
-                        'height' : 0,
+                'vector': {
+                    'lines': {
+                        'show': False,
+                        'width': 2,
+                        'color': (0, 0, 0, 255),
+                        'flat': False,
+                        'height': 0,
                         'rgbcolumn': None,
                         'sizecolumn': None,
-                        },
-                    'points' : {
-                        'show' : False,
-                        'size' : 100,
-                        'width' : 2,
-                        'marker' : 2,
-                        'color' : (0, 0, 0, 255),
-                        'height' : 0,
+                    },
+                    'points': {
+                        'show': False,
+                        'size': 100,
+                        'width': 2,
+                        'marker': 2,
+                        'color': (0, 0, 0, 255),
+                        'height': 0,
                         'rgbcolumn': None,
                         'sizecolumn': None,
-                        }
+                    }
+                },
+                'volume': {
+                    'color': {
+                        'map': True,
+                        'value': (100, 100, 100, 255),  # constant: grey
+                    },
+                    'draw': {
+                        'mode': 0,  # isosurfaces
+                        'shading': 1,  # gouraud
+                        'resolution': 3,  # polygon resolution
+                        'box': False  # draw wire box
                     },
-                'volume' : {
-                    'color' : {
-                        'map' : True,
-                        'value' : (100, 100, 100, 255), # constant: grey
-                        },
-                    'draw' : {
-                        'mode'       : 0, # isosurfaces
-                        'shading'    : 1, # gouraud
-                        'resolution' : 3, # polygon resolution
-                        'box'        : False # draw wire box
-                        },
                     'shine': {
-                        'map' : False,
-                        'value' : 60,
-                        },
+                        'map': False,
+                        'value': 60,
+                    },
                     'topo': {
-                        'map' : None,
-                        'value' : 0.0
-                        },
+                        'map': None,
+                        'value': 0.0
+                    },
                     'transp': {
-                        'map' : None,
+                        'map': None,
                         'value': 0
-                        },
+                    },
                     'mask': {
-                        'map' : None,
+                        'map': None,
                         'value': ''
-                        },
-                    'slice_position': {
-                        'x1' : 0,
-                        'x2' : 1,
-                        'y1' : 0,
-                        'y2' : 1,
-                        'z1' : 0,
-                        'z2' : 1,
-                        'axis' : 0,
-                        }
                     },
-                'cplane' : {
+                    'slice_position': {
+                        'x1': 0,
+                        'x2': 1,
+                        'y1': 0,
+                        'y2': 1,
+                        'z1': 0,
+                        'z2': 1,
+                        'axis': 0,
+                    }
+                },
+                'cplane': {
                     'shading': 4,
-                    'rotation':{
-                        'rot': 180, 
+                    'rotation': {
+                        'rot': 180,
                         'tilt': 0
-                        }, 
-                    'position':{
-                        'x' : 0,
-                        'y' : 0,
-                        'z' : 0
-                    }   
-                },
-                'light' : {
-                    'position' : {
-                        'x' : 0.68,
-                        'y' : -0.68,
-                        'z' : 80,
-                        },
-                    'bright'  : 80,
-                    'color'   : (255, 255, 255, 255), # white
-                    'ambient' : 20,
-                    },
-                'fringe' : {
-                    'elev'   : 55,
-                    'color'  : (128, 128, 128, 255), # grey
                     },
+                    'position': {
+                        'x': 0,
+                        'y': 0,
+                        'z': 0
+                    }
+                },
+                'light': {
+                    'position': {
+                        'x': 0.68,
+                        'y': -0.68,
+                        'z': 80,
+                    },
+                    'bright': 80,
+                    'color': (255, 255, 255, 255),  # white
+                    'ambient': 20,
+                },
+                'fringe': {
+                    'elev': 55,
+                    'color': (128, 128, 128, 255),  # grey
+                },
                 'arrow': {
                     'color': (0, 0, 0),
-                    },
+                },
                 'scalebar': {
                     'color': (0, 0, 0),
-                    }
-                },
-            'modeler' : {
+                }
+            },
+            'modeler': {
                 'disabled': {
-                    'color': (211, 211, 211, 255), # light grey
+                    'color': (211, 211, 211, 255),  # light grey
+                },
+                'action': {
+                    'color': {
+                        'valid': (180, 234, 154, 255),  # light green
+                        'invalid': (255, 255, 255, 255),  # white
+                        'running': (255, 0, 0, 255),     # red
+                    },
+                    'size': {
+                        'width': 125,
+                        'height': 50,
                     },
-                'action' : {
-                    'color' : {
-                        'valid'   :  (180, 234, 154, 255), # light green
-                        'invalid' :  (255, 255, 255, 255), # white
-                        'running' :  (255, 0, 0, 255),     # red
-                        },
-                    'size' : {
-                        'width'  : 125,
-                        'height' : 50,
-                        },
                     'width': {
-                        'parameterized' : 2,
-                        'default'       : 1,
-                        },
+                        'parameterized': 2,
+                        'default': 1,
                     },
-                'data' : { 
+                },
+                'data': {
                     'color': {
-                        'raster'   : (215, 215, 248, 255), # light blue
-                        'raster3d' : (215, 248, 215, 255), # light green
-                        'vector'   : (248, 215, 215, 255), # light red
-                        'dbtable'  : (255, 253, 194, 255), # light yellow
-                        },
-                    'size' : {
-                        'width' : 175,
-                        'height' : 50,
-                        },
+                        'raster': (215, 215, 248, 255),  # light blue
+                        'raster3d': (215, 248, 215, 255),  # light green
+                        'vector': (248, 215, 215, 255),  # light red
+                        'dbtable': (255, 253, 194, 255),  # light yellow
                     },
-                'loop' : {
-                    'color' : {
-                        'valid'   :  (234, 226, 154, 255), # dark yellow
-                        },
-                    'size' : {
-                        'width' : 175,
-                        'height' : 40,
-                        },
+                    'size': {
+                        'width': 175,
+                        'height': 50,
                     },
-                'if-else' : {
-                    'size' : {
-                        'width' : 150,
-                        'height' : 40,
-                        },
+                },
+                'loop': {
+                    'color': {
+                        'valid': (234, 226, 154, 255),  # dark yellow
+                    },
+                    'size': {
+                        'width': 175,
+                        'height': 40,
+                    },
+                },
+                'if-else': {
+                    'size': {
+                        'width': 150,
+                        'height': 40,
                     },
-                'comment' : {
-                    'color' : (255, 233, 208, 255), # light yellow
-                    'size' : {
-                        'width' : 200,
-                        'height' : 100,
-                        },
+                },
+                'comment': {
+                    'color': (255, 233, 208, 255),  # light yellow
+                    'size': {
+                        'width': 200,
+                        'height': 100,
                     },
                 },
-            'mapswipe' : {
+            },
+            'mapswipe': {
                 'cursor': {
                     'color': (0, 0, 0, 255),
                     'size': 12,
                     'width': 1,
                     'type': {
                         'selection': 0,
-                        }
-                    },
+                    }
                 },
+            },
             'animation': {
                 'bgcolor': {
                     'color': (255, 255, 255, 255),
-                    },
+                },
                 'nprocs': {
                     'value': -1,
-                    },
+                },
                 'font': {
                     'bgcolor': (255, 255, 255, 255),
                     'fgcolor': (0, 0, 0, 255),
-                    },
+                },
                 'temporal': {
                     'format': '%Y-%m-%d %H:%M:%S',
                     'nodata': {
                         'enable': False
-                        },
                     },
                 },
-            }
+            },
+        }
 
         # quick fix, http://trac.osgeo.org/grass/ticket/1233
         # TODO
@@ -850,20 +855,22 @@ class Settings:
              _("Collapse all except current"),
              _("Collapse all"),
              _("Expand all"))
-             
-        self.internalSettings['language']['locale']['choices'] = tuple(self.locs)
-        self.internalSettings['atm']['leftDbClick']['choices'] = (_('Edit selected record'),
-                                                                  _('Display selected'))
-        
+
+        self.internalSettings['language'][
+            'locale']['choices'] = tuple(self.locs)
+        self.internalSettings['atm']['leftDbClick']['choices'] = (
+            _('Edit selected record'), _('Display selected'))
+
         self.internalSettings['cmd']['verbosity']['choices'] = ('grassenv',
                                                                 'verbose',
                                                                 'quiet')
-                                                                
-        self.internalSettings['appearance']['iconTheme']['choices'] = ('grass',)
+
+        self.internalSettings['appearance'][
+            'iconTheme']['choices'] = ('grass',)
         self.internalSettings['appearance']['menustyle']['choices'] = \
-                   (_("Classic (labels only)"),
-                    _("Combined (labels and module names)"),
-                    _("Expert (module names only)"))
+            (_("Classic (labels only)"),
+             _("Combined (labels and module names)"),
+             _("Expert (module names only)"))
         self.internalSettings['appearance']['gSelectPopupHeight']['min'] = 50
         # there is also maxHeight given to TreeCtrlComboPopup.GetAdjustedSize
         self.internalSettings['appearance']['gSelectPopupHeight']['max'] = 1000
@@ -873,13 +880,14 @@ class Settings:
              _("Fancy green"),
              _("List left"))
 
-        self.internalSettings['display']['driver']['choices'] = ['cairo', 'png']
-        self.internalSettings['display']['statusbarMode']['choices'] = None # set during MapFrame init
-        self.internalSettings['display']['mouseWheelZoom']['choices'] = (_('Zoom and recenter'),
-                                                                         _('Zoom to mouse cursor'),
-                                                                         _('Nothing'))
-        self.internalSettings['display']['scrollDirection']['choices'] = (_('Scroll forward to zoom in'),
-                                                                         _('Scroll back to zoom in'))
+        self.internalSettings['display'][
+            'driver']['choices'] = ['cairo', 'png']
+        self.internalSettings['display']['statusbarMode'][
+            'choices'] = None  # set during MapFrame init
+        self.internalSettings['display']['mouseWheelZoom']['choices'] = (
+            _('Zoom and recenter'), _('Zoom to mouse cursor'), _('Nothing'))
+        self.internalSettings['display']['scrollDirection']['choices'] = (
+            _('Scroll forward to zoom in'), _('Scroll back to zoom in'))
 
         self.internalSettings['nviz']['view'] = {}
         self.internalSettings['nviz']['view']['twist'] = {}
@@ -902,7 +910,7 @@ class Settings:
         self.internalSettings['nviz']['view']['dir']['y'] = -1
         self.internalSettings['nviz']['view']['dir']['z'] = -1
         self.internalSettings['nviz']['view']['dir']['use'] = False
-        
+
         for decor in ('arrow', 'scalebar'):
             self.internalSettings['nviz'][decor] = {}
             self.internalSettings['nviz'][decor]['position'] = {}
@@ -923,26 +931,25 @@ class Settings:
         self.internalSettings['vdigit']['bgmap']['value'] = ''
 
         self.internalSettings['mapswipe']['cursor']['type'] = {}
-        self.internalSettings['mapswipe']['cursor']['type']['choices'] = (_("cross"),
-                                                                          _("box"),
-                                                                          _("circle"))
+        self.internalSettings['mapswipe']['cursor']['type'][
+            'choices'] = (_("cross"), _("box"), _("circle"))
 
-    def ReadSettingsFile(self, settings = None):
+    def ReadSettingsFile(self, settings=None):
         """Reads settings file (mapset, location, gisdbase)"""
         if settings is None:
             settings = self.userSettings
-        
+
         self._readFile(self.filePath, settings)
-        
+
         # set environment variables
-        font = self.Get(group = 'display', key = 'font', subkey = 'type')
-        enc  = self.Get(group = 'display', key = 'font', subkey = 'encoding')
+        font = self.Get(group='display', key='font', subkey='type')
+        enc = self.Get(group='display', key='font', subkey='encoding')
         if font:
             os.environ["GRASS_FONT"] = font
         if enc:
             os.environ["GRASS_ENCODING"] = enc
-        
-    def _readFile(self, filename, settings = None):
+
+    def _readFile(self, filename, settings=None):
         """Read settings from file to dict
 
         :param filename: settings file path
@@ -950,16 +957,18 @@ class Settings:
         """
         if settings is None:
             settings = self.userSettings
-        
+
         if not os.path.exists(filename):
             return
-        
+
         try:
             fd = open(filename, "r")
         except IOError:
-            sys.stderr.write(_("Unable to read settings file <%s>\n") % filename)
+            sys.stderr.write(
+                _("Unable to read settings file <%s>\n") %
+                filename)
             return
-        
+
         try:
             line = ''
             for line in fd.readlines():
@@ -967,7 +976,7 @@ class Settings:
                 group, key = line.split(self.sep)[0:2]
                 kv = line.split(self.sep)[2:]
                 subkeyMaster = None
-                if len(kv) % 2 != 0: # multiple (e.g. nviz)
+                if len(kv) % 2 != 0:  # multiple (e.g. nviz)
                     subkeyMaster = kv[0]
                     del kv[0]
                 idx = 0
@@ -976,25 +985,25 @@ class Settings:
                         subkey = [subkeyMaster, kv[idx]]
                     else:
                         subkey = kv[idx]
-                    value = kv[idx+1]
-                    value = self._parseValue(value, read = True)
+                    value = kv[idx + 1]
+                    value = self._parseValue(value, read=True)
                     self.Append(settings, group, key, subkey, value)
                     idx += 2
         except ValueError as e:
-            print >> sys.stderr, _("Error: Reading settings from file <%(file)s> failed.\n"
-                                   "\t\tDetails: %(detail)s\n"
-                                   "\t\tLine: '%(line)s'\n") % { 'file' : filename,
-                                                               'detail' : e,
-                                                               'line' : line }
+            print >>sys.stderr, _(
+                "Error: Reading settings from file <%(file)s> failed.\n"
+                "\t\tDetails: %(detail)s\n"
+                "\t\tLine: '%(line)s'\n") % {
+                'file': filename, 'detail': e, 'line': line}
             fd.close()
-        
+
         fd.close()
-        
-    def SaveToFile(self, settings = None):
+
+    def SaveToFile(self, settings=None):
         """Save settings to the file"""
         if settings is None:
             settings = self.userSettings
-        
+
         dirPath = GetSettingsPath()
         if not os.path.exists(dirPath):
             try:
@@ -1002,7 +1011,7 @@ class Settings:
             except:
                 GError(_('Unable to create settings directory'))
                 return
-        
+
         try:
             file = open(self.filePath, "w")
             for group in settings.keys():
@@ -1011,50 +1020,63 @@ class Settings:
                     file.write('%s%s%s%s' % (group, self.sep, key, self.sep))
                     for idx in range(len(subkeys)):
                         value = settings[group][key][subkeys[idx]]
-                        if type(value) == types.DictType:
+                        if isinstance(value, types.DictType):
                             if idx > 0:
-                                file.write('%s%s%s%s%s' % (os.linesep, group, self.sep, key, self.sep))
+                                file.write(
+                                    '%s%s%s%s%s' %
+                                    (os.linesep, group, self.sep, key, self.sep))
                             file.write('%s%s' % (subkeys[idx], self.sep))
                             kvalues = settings[group][key][subkeys[idx]].keys()
                             srange = range(len(kvalues))
                             for sidx in srange:
-                                svalue = self._parseValue(settings[group][key][subkeys[idx]][kvalues[sidx]])
+                                svalue = self._parseValue(
+                                    settings[group][key][
+                                        subkeys[idx]][
+                                        kvalues[sidx]])
                                 file.write('%s%s%s' % (kvalues[sidx], self.sep,
                                                        svalue))
                                 if sidx < len(kvalues) - 1:
                                     file.write('%s' % self.sep)
                         else:
-                            if idx > 0 and \
-                                    type(settings[group][key][subkeys[idx - 1]]) == types.DictType:
-                                file.write('%s%s%s%s%s' % (os.linesep, group, self.sep, key, self.sep))
-                            value = self._parseValue(settings[group][key][subkeys[idx]])
-                            file.write('%s%s%s' % (subkeys[idx], self.sep, value))
-                            if idx < len(subkeys) - 1 and \
-                                    type(settings[group][key][subkeys[idx + 1]]) != types.DictType:
+                            if idx > 0 and isinstance(
+                                    settings[group][key]
+                                    [subkeys[idx - 1]],
+                                    types.DictType):
+                                file.write(
+                                    '%s%s%s%s%s' %
+                                    (os.linesep, group, self.sep, key, self.sep))
+                            value = self._parseValue(
+                                settings[group][key][subkeys[idx]])
+                            file.write(
+                                '%s%s%s' %
+                                (subkeys[idx], self.sep, value))
+                            if idx < len(subkeys) - 1 and not isinstance(
+                                    settings[group][key][subkeys[idx + 1]],
+                                    types.DictType):
                                 file.write('%s' % self.sep)
                     file.write(os.linesep)
         except IOError as e:
             raise GException(e)
-        except StandardError as e:
+        except Exception as e:
             raise GException(_('Writing settings to file <%(file)s> failed.'
-                               '\n\nDetails: %(detail)s') % { 'file' : self.filePath,
-                                                              'detail' : e })
+                               '\n\nDetails: %(detail)s') %
+                             {'file': self.filePath, 'detail': e})
         file.close()
         return self.filePath
-        
-    def _parseValue(self, value, read = False):
+
+    def _parseValue(self, value, read=False):
         """Parse value to be store in settings file"""
-        if read: # -> read settings (cast values)
+        if read:  # -> read settings (cast values)
             if value == 'True':
                 value = True
             elif value == 'False':
                 value = False
             elif value == 'None':
                 value = None
-            elif ':' in value: # -> color
+            elif ':' in value:  # -> color
                 try:
                     value = tuple(map(int, value.split(':')))
-                except ValueError: # -> string
+                except ValueError:  # -> string
                     pass
             else:
                 try:
@@ -1064,12 +1086,12 @@ class Settings:
                         value = float(value)
                     except ValueError:
                         pass
-        else: # -> write settings
-            if type(value) == type(()): # -> color
+        else:  # -> write settings
+            if isinstance(value, type(())):  # -> color
                 value = str(value[0]) + ':' +\
                     str(value[1]) + ':' + \
                     str(value[2])
-                
+
         return value
 
     def Get(self, group, key=None, subkey=None, settings_type='user'):
@@ -1099,15 +1121,15 @@ class Settings:
                 else:
                     return settings[group][key]
             else:
-                if type(subkey) == type(tuple()) or \
-                        type(subkey) == type(list()):
+                if isinstance(subkey, type(tuple())) or \
+                        isinstance(subkey, type(list())):
                     return settings[group][key][subkey[0]][subkey[1]]
                 else:
                     return settings[group][key][subkey]
 
         except KeyError:
-            print >> sys.stderr, "Settings: unable to get value '%s:%s:%s'\n" % \
-                (group, key, subkey)
+            print >> sys.stderr, "Settings: unable to get value '%s:%s:%s'\n" % (
+                group, key, subkey)
 
     def Set(self, group, value, key=None, subkey=None, settings_type='user'):
         """Set value of key/subkey
@@ -1135,19 +1157,20 @@ class Settings:
                 else:
                     settings[group][key] = value
             else:
-                if type(subkey) == type(tuple()) or \
-                        type(subkey) == type(list()):
+                if isinstance(subkey, type(tuple())) or \
+                        isinstance(subkey, type(list())):
                     settings[group][key][subkey[0]][subkey[1]] = value
                 else:
                     settings[group][key][subkey] = value
         except KeyError:
-            raise GException("%s '%s:%s:%s'" % (_("Unable to set "), group, key, subkey))
+            raise GException("%s '%s:%s:%s'" %
+                             (_("Unable to set "), group, key, subkey))
 
-    def Append(self, dict, group, key, subkey, value, overwrite = True):
+    def Append(self, dict, group, key, subkey, value, overwrite=True):
         """Set value of key/subkey
 
         Create group/key/subkey if not exists
-        
+
         :param dict: settings dictionary to use
         :param group: settings group
         :param key: key
@@ -1160,19 +1183,19 @@ class Settings:
         if group not in dict:
             dict[group] = {}
             hasValue = False
-        
+
         if key not in dict[group]:
             dict[group][key] = {}
             hasValue = False
-        
-        if type(subkey) == types.ListType:
+
+        if isinstance(subkey, types.ListType):
             # TODO: len(subkey) > 2
             if subkey[0] not in dict[group][key]:
                 dict[group][key][subkey[0]] = {}
                 hasValue = False
             if subkey[1] not in dict[group][key][subkey[0]]:
                 hasValue = False
-            
+
             try:
                 if overwrite or (not overwrite and not hasValue):
                     dict[group][key][subkey[0]][subkey[1]] = value
@@ -1182,19 +1205,19 @@ class Settings:
         else:
             if subkey not in dict[group][key]:
                 hasValue = False
-            
+
             try:
                 if overwrite or (not overwrite and not hasValue):
                     dict[group][key][subkey] = value
             except TypeError:
                 print >> sys.stderr, _("Unable to parse settings '%s'") % value + \
                     ' (' + group + ':' + key + ':' + subkey + ')'
-        
+
     def GetDefaultSettings(self):
         """Get default user settings"""
         return self.defaultSettings
 
-    def Reset(self, key = None):
+    def Reset(self, key=None):
         """Reset to default settings
 
         :param key: key in settings dict (None for all keys)
@@ -1203,28 +1226,57 @@ class Settings:
             self.userSettings = copy.deepcopy(self.defaultSettings)
         else:
             self.userSettings[key] = copy.deepcopy(self.defaultSettings[key])
-        
+
 UserSettings = Settings()
 
+
 def GetDisplayVectSettings():
     settings = list()
-    if not UserSettings.Get(group = 'vectorLayer', key = 'featureColor', subkey = ['transparent', 'enabled']):
-        featureColor = UserSettings.Get(group = 'vectorLayer', key = 'featureColor', subkey = 'color')
-        settings.append('color=%s' % rgb2str.get(featureColor, ':'.join(map(str,featureColor))))
+    if not UserSettings.Get(
+            group='vectorLayer', key='featureColor',
+            subkey=['transparent', 'enabled']):
+        featureColor = UserSettings.Get(
+            group='vectorLayer',
+            key='featureColor',
+            subkey='color')
+        settings.append('color=%s' % rgb2str.get(
+            featureColor, ':'.join(map(str, featureColor))))
     else:
         settings.append('color=none')
-    if not UserSettings.Get(group = 'vectorLayer', key = 'areaFillColor', subkey = ['transparent', 'enabled']):
-        fillColor = UserSettings.Get(group = 'vectorLayer', key = 'areaFillColor', subkey = 'color')
-        settings.append('fcolor=%s' % rgb2str.get(fillColor, ':'.join(map(str,fillColor))))
+    if not UserSettings.Get(
+            group='vectorLayer', key='areaFillColor',
+            subkey=['transparent', 'enabled']):
+        fillColor = UserSettings.Get(
+            group='vectorLayer',
+            key='areaFillColor',
+            subkey='color')
+        settings.append('fcolor=%s' %
+                        rgb2str.get(fillColor, ':'.join(map(str, fillColor))))
     else:
         settings.append('fcolor=none')
-    
-    settings.append('width=%s' % UserSettings.Get(group = 'vectorLayer', key = 'line', subkey = 'width'))
-    settings.append('icon=%s' % UserSettings.Get(group = 'vectorLayer', key = 'point', subkey = 'symbol'))
-    settings.append('size=%s' % UserSettings.Get(group = 'vectorLayer', key = 'point', subkey = 'size'))
+
+    settings.append(
+        'width=%s' %
+        UserSettings.Get(
+            group='vectorLayer',
+            key='line',
+            subkey='width'))
+    settings.append(
+        'icon=%s' %
+        UserSettings.Get(
+            group='vectorLayer',
+            key='point',
+            subkey='symbol'))
+    settings.append(
+        'size=%s' %
+        UserSettings.Get(
+            group='vectorLayer',
+            key='point',
+            subkey='size'))
     types = []
     for ftype in ['point', 'line', 'boundary', 'centroid', 'area', 'face']:
-        if UserSettings.Get(group = 'vectorLayer', key = 'showType', subkey = [ftype, 'enabled']):
+        if UserSettings.Get(group='vectorLayer',
+                            key='showType', subkey=[ftype, 'enabled']):
             types.append(ftype)
     settings.append('type=%s' % ','.join(types))
 
diff --git a/gui/wxpython/core/test.toolboxes_menudata.xml b/gui/wxpython/core/test.toolboxes_menudata.xml
deleted file mode 100644
index 151f22d..0000000
--- a/gui/wxpython/core/test.toolboxes_menudata.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!--This is an auto-generated file-->
-<menudata>
-  <menubar>
-    <menu>
-      <label>Region</label>
-      <items>
-        <menuitem>
-          <label>Display region</label>
-          <command>g.region -p</command>
-          <help>Manages the boundary definitions for the geographic region.</help>
-          <keywords>general,settings</keywords>
-          <handler>RunMenuCmd</handler>
-        </menuitem>
-        <menuitem>
-          <label>Set region</label>
-          <command>g.region</command>
-          <help>Manages the boundary definitions for the geographic region.</help>
-          <keywords>general,settings</keywords>
-          <handler>OnMenuCmd</handler>
-        </menuitem>
-      </items>
-    </menu>
-    <menu>
-      <label>&Testing toolbox A</label>
-      <items>
-        <menuitem>
-          <label>Set region</label>
-          <command>g.region</command>
-          <help>Manages the boundary definitions for the geographic region.</help>
-          <keywords>general,settings</keywords>
-          <handler>OnMenuCmd</handler>
-        </menuitem>
-        <separator />
-        <menuitem>
-          <label>Testing unknown module</label>
-          <command>m.unknown</command>
-          <help />
-          <keywords />
-          <handler>OnMenuCmd</handler>
-        </menuitem>
-        <subtoolbox name="QueryRasterMap" />
-      </items>
-    </menu>
-    <menu>
-      <label>Map projections</label>
-      <items>
-        <menuitem>
-          <label>Display map projection</label>
-          <command>g.proj -p</command>
-          <help>Converts co-ordinate system descriptions (i.e. projection information) between various formats (including GRASS format).</help>
-          <keywords>general,projection,create location</keywords>
-          <handler>RunMenuCmd</handler>
-        </menuitem>
-        <menuitem>
-          <label>Manage projections</label>
-          <command>g.proj</command>
-          <help>Prints and manipulates GRASS projection information files (in various co-ordinate system descriptions). Can also be used to create new GRASS locations.</help>
-          <keywords>general,projection,create location</keywords>
-          <handler>OnMenuCmd</handler>
-        </menuitem>
-        <separator />
-        <menuitem>
-          <label>Convert coordinates</label>
-          <command>m.proj</command>
-          <help>Converts coordinates from one projection to another (cs2cs frontend).</help>
-          <keywords>miscellaneous,projection</keywords>
-          <handler>OnMenuCmd</handler>
-        </menuitem>
-      </items>
-    </menu>
-    <menu>
-      <label>&Testing toolbox B</label>
-      <items>
-        <menuitem>
-          <label>Set region</label>
-          <command>g.region</command>
-          <help>Manages the boundary definitions for the geographic region.</help>
-          <keywords>general,settings</keywords>
-          <handler>OnMenuCmd</handler>
-        </menuitem>
-      </items>
-    </menu>
-  </menubar>
-</menudata>
diff --git a/gui/wxpython/core/test.toolboxes_menu.xml b/gui/wxpython/core/testsuite/data/test_toolboxes_menu.xml
similarity index 100%
rename from gui/wxpython/core/test.toolboxes_menu.xml
rename to gui/wxpython/core/testsuite/data/test_toolboxes_menu.xml
diff --git a/gui/wxpython/core/testsuite/data/test_toolboxes_menudata_ref.xml b/gui/wxpython/core/testsuite/data/test_toolboxes_menudata_ref.xml
new file mode 100644
index 0000000..46b64f2
--- /dev/null
+++ b/gui/wxpython/core/testsuite/data/test_toolboxes_menudata_ref.xml
@@ -0,0 +1,85 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--This is an auto-generated file-->
+<menudata>
+  <menubar>
+    <menu>
+      <label>Region</label>
+      <items>
+        <menuitem>
+          <label>Display region</label>
+          <command>g.region -p</command>
+          <help>Manages the boundary definitions for the geographic region.</help>
+          <keywords>general,settings</keywords>
+          <handler>RunMenuCmd</handler>
+        </menuitem>
+        <menuitem>
+          <label>Set region</label>
+          <command>g.region</command>
+          <help>Manages the boundary definitions for the geographic region.</help>
+          <keywords>general,settings</keywords>
+          <handler>OnMenuCmd</handler>
+        </menuitem>
+      </items>
+    </menu>
+    <menu>
+      <label>&Testing toolbox A</label>
+      <items>
+        <menuitem>
+          <label>Set region</label>
+          <command>g.region</command>
+          <help>Manages the boundary definitions for the geographic region.</help>
+          <keywords>general,settings</keywords>
+          <handler>OnMenuCmd</handler>
+        </menuitem>
+        <separator />
+        <menuitem>
+          <label>Testing unknown module</label>
+          <command>m.unknown</command>
+          <help />
+          <keywords />
+          <handler>OnMenuCmd</handler>
+        </menuitem>
+        <subtoolbox name="QueryRasterMap" />
+      </items>
+    </menu>
+    <menu>
+      <label>Map projections</label>
+      <items>
+        <menuitem>
+          <label>Display map projection</label>
+          <command>g.proj -p</command>
+          <help>Converts co-ordinate system descriptions (i.e. projection information) between various formats (including GRASS format).</help>
+          <keywords>general,projection,create location</keywords>
+          <handler>RunMenuCmd</handler>
+        </menuitem>
+        <menuitem>
+          <label>Manage projections</label>
+          <command>g.proj</command>
+          <help>Prints or modifies GRASS projection information files (in various co-ordinate system descriptions). Can also be used to create new GRASS locations.</help>
+          <keywords>general,projection,create location</keywords>
+          <handler>OnMenuCmd</handler>
+        </menuitem>
+        <separator />
+        <menuitem>
+          <label>Convert coordinates</label>
+          <command>m.proj</command>
+          <help>Converts coordinates from one projection to another (cs2cs frontend).</help>
+          <keywords>miscellaneous,projection</keywords>
+          <handler>OnMenuCmd</handler>
+        </menuitem>
+      </items>
+    </menu>
+    <menu>
+      <label>&Testing toolbox B</label>
+      <items>
+        <menuitem>
+          <label>Set region</label>
+          <command>g.region</command>
+          <help>Manages the boundary definitions for the geographic region.</help>
+          <keywords>general,settings</keywords>
+          <handler>OnMenuCmd</handler>
+        </menuitem>
+      </items>
+    </menu>
+  </menubar>
+</menudata>
diff --git a/gui/wxpython/core/test.toolboxes_user_toolboxes.xml b/gui/wxpython/core/testsuite/data/test_toolboxes_user_toolboxes.xml
similarity index 100%
rename from gui/wxpython/core/test.toolboxes_user_toolboxes.xml
rename to gui/wxpython/core/testsuite/data/test_toolboxes_user_toolboxes.xml
diff --git a/gui/wxpython/core/testsuite/toolboxes.sh b/gui/wxpython/core/testsuite/toolboxes.sh
new file mode 100755
index 0000000..f3370f3
--- /dev/null
+++ b/gui/wxpython/core/testsuite/toolboxes.sh
@@ -0,0 +1,7 @@
+# Tests generating toolboxes XML
+
+# run make in gui/wxpython before the test
+# run test using sh -e
+
+python $GISBASE/gui/wxpython/core/toolboxes.py doctest
+python $GISBASE/gui/wxpython/core/toolboxes.py test
diff --git a/gui/wxpython/core/toolboxes.py b/gui/wxpython/core/toolboxes.py
index aabf061..36113cf 100644
--- a/gui/wxpython/core/toolboxes.py
+++ b/gui/wxpython/core/toolboxes.py
@@ -44,9 +44,9 @@ WXGUIDIR = os.path.join(os.getenv("GISBASE"), "gui", "wxpython")
 
 
 # this could be placed to functions
-mainMenuFile    = os.path.join(WXGUIDIR, 'xml', 'main_menu.xml')
-toolboxesFile   = os.path.join(WXGUIDIR, 'xml', 'toolboxes.xml')
-wxguiItemsFile  = os.path.join(WXGUIDIR, 'xml', 'wxgui_items.xml')
+mainMenuFile = os.path.join(WXGUIDIR, 'xml', 'main_menu.xml')
+toolboxesFile = os.path.join(WXGUIDIR, 'xml', 'toolboxes.xml')
+wxguiItemsFile = os.path.join(WXGUIDIR, 'xml', 'wxgui_items.xml')
 moduleItemsFile = os.path.join(WXGUIDIR, 'xml', 'module_items.xml')
 
 
@@ -62,15 +62,20 @@ def GetSettingsPath():
         # (these files are always check for existence here)
         return ""
 
+
 def _getUserToolboxesFile():
-    userToolboxesFile = os.path.join(GetSettingsPath(), 'toolboxes', 'toolboxes.xml')
+    userToolboxesFile = os.path.join(
+        GetSettingsPath(),
+        'toolboxes', 'toolboxes.xml')
     if not os.path.exists(userToolboxesFile):
         userToolboxesFile = None
     return userToolboxesFile
 
 
 def _getUserMainMenuFile():
-    userMainMenuFile = os.path.join(GetSettingsPath(), 'toolboxes', 'main_menu.xml')
+    userMainMenuFile = os.path.join(
+        GetSettingsPath(),
+        'toolboxes', 'main_menu.xml')
     if not os.path.exists(userMainMenuFile):
         userMainMenuFile = None
     return userMainMenuFile
@@ -144,7 +149,10 @@ def getMenudataFile(userRootFile, newFile, fallback):
     If something goes wrong during building or user doesn't modify menu,
     default file (from distribution) is returned.
     """
-    _debug(1, "toolboxes.getMenudataFile: {userRootFile}, {newFile}, {fallback}".format(**locals()))
+    _debug(
+        1,
+        "toolboxes.getMenudataFile: {userRootFile}, {newFile}, {fallback}".format(
+            **locals()))
 
     distributionRootFile = os.path.join(WXGUIDIR, 'xml', userRootFile)
     userRootFile = os.path.join(GetSettingsPath(), 'toolboxes', userRootFile)
@@ -164,23 +172,29 @@ def getMenudataFile(userRootFile, newFile, fallback):
             # remove menu file when there is no main_menu and toolboxes
             if not _getUserToolboxesFile() and not userRootFile:
                 os.remove(menudataFile)
-                _debug(2, "toolboxes.getMenudataFile: no user defined files, menudata deleted")
+                _debug(
+                    2, "toolboxes.getMenudataFile: no user defined files, menudata deleted")
                 return fallback
 
             if bool(_getUserToolboxesFile()) != bool(userRootFile):
-                # always generate new because we don't know if there has been any change
+                # always generate new because we don't know if there has been
+                # any change
                 generateNew = True
-                _debug(2, "toolboxes.getMenudataFile: only one of the user defined files")
+                _debug(
+                    2, "toolboxes.getMenudataFile: only one of the user defined files")
             else:
                 # if newer files -> generate new
                 menudataTime = os.path.getmtime(menudataFile)
                 if _getUserToolboxesFile():
-                    if os.path.getmtime(_getUserToolboxesFile()) > menudataTime:
-                        _debug(2, "toolboxes.getMenudataFile: user toolboxes is newer than menudata")
+                    if os.path.getmtime(
+                            _getUserToolboxesFile()) > menudataTime:
+                        _debug(
+                            2, "toolboxes.getMenudataFile: user toolboxes is newer than menudata")
                         generateNew = True
                 if userRootFile:
                     if os.path.getmtime(userRootFile) > menudataTime:
-                        _debug(2, "toolboxes.getMenudataFile: user root file is newer than menudata")
+                        _debug(
+                            2, "toolboxes.getMenudataFile: user root file is newer than menudata")
                         generateNew = True
         elif _getUserToolboxesFile() or userRootFile:
             _debug(2, "toolboxes.getMenudataFile: no menudata")
@@ -196,7 +210,9 @@ def getMenudataFile(userRootFile, newFile, fallback):
                 # Unfortunately, this is the case can be often: defined
                 # toolboxes but undefined module tree file.
                 _debug(2, "toolboxes.getMenudataFile: creating a tree")
-                tree = createTree(distributionRootFile=distributionRootFile, userRootFile=userRootFile)
+                tree = createTree(
+                    distributionRootFile=distributionRootFile,
+                    userRootFile=userRootFile)
             except ETREE_EXCEPTIONS:
                 _warning(_("Unable to parse user toolboxes XML files. "
                            "Default files will be loaded."))
@@ -209,7 +225,9 @@ def getMenudataFile(userRootFile, newFile, fallback):
                 fh.close()
                 return menudataFile
             except:
-                _debug(2, "toolboxes.getMenudataFile: writing menudata failed, returning fallback file")
+                _debug(
+                    2,
+                    "toolboxes.getMenudataFile: writing menudata failed, returning fallback file")
                 return fallback
         else:
             return menudataFile
@@ -236,10 +254,12 @@ def _createPath(path):
         try:
             os.mkdir(path)
         except OSError as e:
-            # we cannot use GError or similar because the gui doesn't start at all
-            gcore.warning('%(reason)s\n%(detail)s' % 
-                    ({'reason':_('Unable to create toolboxes directory.'),
-                      'detail': str(e)}))
+            # we cannot use GError or similar because the gui doesn't start at
+            # all
+            gcore.warning(
+                '%(reason)s\n%(detail)s' % ({
+                    'reason': _('Unable to create toolboxes directory.'),
+                    'detail': str(e)}))
             return False
     return True
 
@@ -422,7 +442,9 @@ def _expandToolboxes(node, toolboxes):
             idx = items.getchildren().index(subtoolbox)
 
             if has_xpath:
-                toolbox = toolboxes.find('.//toolbox[@name="%s"]' % subtoolbox.get('name'))
+                toolbox = toolboxes.find(
+                    './/toolbox[@name="%s"]' %
+                    subtoolbox.get('name'))
             else:
                 toolbox = None
                 potentialToolboxes = toolboxes.findall('.//toolbox')
@@ -455,7 +477,9 @@ def _expandUserToolboxesItem(node, toolboxes):
     for n in node.findall('./items/user-toolboxes-list'):
         items = node.find('./items')
         idx = items.getchildren().index(n)
-        el = etree.Element('toolbox', attrib={'name': 'GeneratedUserToolboxesList'})
+        el = etree.Element(
+            'toolbox', attrib={
+                'name': 'GeneratedUserToolboxesList'})
         items.insert(idx, el)
         label = etree.SubElement(el, tag='label')
         label.text = _("Custom toolboxes")
@@ -480,12 +504,20 @@ def _removeUserToolboxesItem(root):
 
 def _getAddons():
     try:
-        output = gcore.read_command('g.extension', quiet=True, flags='a')
+        output = gcore.read_command('g.extension', quiet=True, flags='ag')
     except CalledModuleError:
         _warning(_("List of addons cannot be obtained"
                    " because g.extension failed."))
         return []
-    return sorted(output.splitlines())
+
+    flist = []
+    for line in output.splitlines():
+        if not line.startswith('executables'):
+            continue
+        for fexe in line.split('=', 1)[1].split(','):
+            flist.append(fexe)
+
+    return sorted(flist)
 
 
 def _removeAddonsItem(node, addonsNodes):
@@ -608,12 +640,14 @@ def _expandRuntimeModules(node, loadMetadata=True):
             n.text = _escapeXML(','.join(keywords))
             if loadMetadata and not desc:
                 hasErrors = True
-    
+
     if hasErrors:
         # not translatable until toolboxes compilation on Mac is fixed
         # translating causes importing globalvar, where sys.exit is called
-        sys.stderr.write("WARNING: Some addons failed when loading. "
-                         "Please consider to update your addons by running 'g.extension.all -f'.\n")
+        sys.stderr.write(
+            "WARNING: Some addons failed when loading. "
+            "Please consider to update your addons by running 'g.extension.all -f'.\n")
+
 
 def _escapeXML(text):
     """Helper function for correct escaping characters for XML.
@@ -778,10 +812,10 @@ def module_test():
     """Tests the module using test files included in the current
     directory and in files from distribution.
     """
-    toolboxesFile   = os.path.join(WXGUIDIR, 'xml', 'toolboxes.xml')
-    userToolboxesFile = 'test.toolboxes_user_toolboxes.xml'
-    menuFile = 'test.toolboxes_menu.xml'
-    wxguiItemsFile  = os.path.join(WXGUIDIR, 'xml', 'wxgui_items.xml')
+    toolboxesFile = os.path.join(WXGUIDIR, 'xml', 'toolboxes.xml')
+    userToolboxesFile = 'data/test_toolboxes_user_toolboxes.xml'
+    menuFile = 'data/test_toolboxes_menu.xml'
+    wxguiItemsFile = os.path.join(WXGUIDIR, 'xml', 'wxgui_items.xml')
     moduleItemsFile = os.path.join(WXGUIDIR, 'xml', 'module_items.xml')
 
     toolboxes = etree.parse(toolboxesFile)
@@ -807,7 +841,7 @@ def module_test():
         sys.stdout.write(_getXMLString(root))
         return 0
 
-    menudataFile = 'test.toolboxes_menudata.xml'
+    menudataFile = 'data/test_toolboxes_menudata_ref.xml'
     with open(menudataFile) as correctMenudata:
         correct = str(correctMenudata.read())
 
@@ -829,6 +863,16 @@ def module_test():
         return 0
 
 
+def validate_file(filename):
+    try:
+        etree.parse(filename)
+    except ETREE_EXCEPTIONS as error:
+        print "XML file <{name}> is not well formed: {error}".format(
+            name=filename, error=error)
+        return 1
+    return 0
+
+
 def main():
     """Converts the toolboxes files on standard paths to the menudata file
 
@@ -854,4 +898,6 @@ if __name__ == '__main__':
             sys.exit(doc_test())
         elif sys.argv[1] == 'test':
             sys.exit(module_test())
+        elif sys.argv[1] == 'validate':
+            sys.exit(validate_file(sys.argv[2]))
     sys.exit(main())
diff --git a/gui/wxpython/core/treemodel.py b/gui/wxpython/core/treemodel.py
index 2353a5b..14789ed 100644
--- a/gui/wxpython/core/treemodel.py
+++ b/gui/wxpython/core/treemodel.py
@@ -19,11 +19,11 @@ This program is free software under the GNU General Public License
 
 class TreeModel(object):
     """Class represents a tree structure with hidden root.
-    
+
     TreeModel is used together with TreeView class to display results in GUI.
     The functionality is not complete, only needed methods are implemented.
     If needed, the functionality can be extended.
-    
+
     >>> tree = TreeModel(DictNode)
     >>> root = tree.root
     >>> n1 = tree.AppendNode(parent=root, label='node1')
@@ -52,6 +52,7 @@ class TreeModel(object):
       node21
         * xxx : 1
     """
+
     def __init__(self, nodeClass):
         """Constructor creates root node.
 
@@ -66,11 +67,11 @@ class TreeModel(object):
 
     def AppendNode(self, parent, label, data=None):
         """Create node and append it to parent node.
-        
+
         :param parent: parent node of the new node
         :param label: node label
         :param data: optional node data
-        
+
         :return: new node
         """
         node = self.nodeClass(label=label, data=data)
@@ -78,12 +79,13 @@ class TreeModel(object):
         node.parent = parent
         return node
 
-    def SearchNodes(self, **kwargs):
+    def SearchNodes(self, parent=None, **kwargs):
         """Search nodes according to specified attributes."""
         nodes = []
-        self._searchNodes(node=self.root, foundNodes=nodes, **kwargs)
+        parent = parent if parent else self.root
+        self._searchNodes(node=parent, foundNodes=nodes, **kwargs)
         return nodes
-        
+
     def _searchNodes(self, node, foundNodes, **kwargs):
         """Helper method for searching nodes."""
         if node.match(**kwargs):
@@ -100,27 +102,25 @@ class TreeModel(object):
         if len(index) == 0:
             return self.root
         return self._getNode(self.root, index)
-        
+
     def GetIndexOfNode(self, node):
         """Method used for communication between view (VirtualTree) and model."""
         index = []
         return self._getIndex(node, index)
-        
-        
+
     def _getIndex(self, node, index):
         if node.parent:
             index.insert(0, node.parent.children.index(node))
             return self._getIndex(node.parent, index)
         return index
-        
-        
+
     def GetChildrenByIndex(self, index):
         """Method used for communication between view (VirtualTree) and model."""
         if len(index) == 0:
             return self.root.children
         node = self._getNode(self.root, index)
         return node.children
-        
+
     def _getNode(self, node, index):
         if len(index) == 1:
             return node.children[index[0]]
@@ -131,6 +131,15 @@ class TreeModel(object):
         """Removes node."""
         if node.parent:
             node.parent.children.remove(node)
+        else:
+            # node is root
+            for n in node.children:
+                node.children.remove(n)
+
+    def SortChildren(self, node):
+        """Sorts children alphabetically based on label."""
+        if node.children:
+            node.children.sort(key=lambda node: node.label)
 
     def __str__(self):
         """Print tree."""
@@ -142,6 +151,7 @@ class TreeModel(object):
 
 class DictNode(object):
     """Node which has data in a form of dictionary."""
+
     def __init__(self, label, data=None):
         """Create node.
 
@@ -150,7 +160,7 @@ class DictNode(object):
         """
 
         self.label = label
-        if data == None:
+        if data is None:
             self.data = dict()
         else:
             self.data = data
@@ -165,9 +175,9 @@ class DictNode(object):
         text.append(indent * ' ' + self.label)
         if self.data:
             for key, value in self.data.iteritems():
-                text.append("%(indent)s* %(key)s : %(value)s" % {'indent': (indent + 2) * ' ',
-                                                                 'key': key,
-                                                                 'value': value})
+                text.append(
+                    "%(indent)s* %(key)s : %(value)s" %
+                    {'indent': (indent + 2) * ' ', 'key': key, 'value': value})
 
         if self.children:
             for child in self.children:
@@ -186,6 +196,7 @@ class DictNode(object):
 
 class ModuleNode(DictNode):
     """Node representing module."""
+
     def __init__(self, label, data=None):
         super(ModuleNode, self).__init__(label=label, data=data)
 
@@ -196,13 +207,15 @@ class ModuleNode(DictNode):
             return False
         if key in ('command', 'keywords', 'description'):
             try:
-                return len(self.data[key]) and value in self.data[key]
+                return len(
+                    self.data[key]) and(
+                    value in self.data[key] or value == '*')
             except KeyError:
                 return False
-        
+
         return False
-            
-        
+
+
 def main():
     import doctest
     doctest.testmod()
diff --git a/gui/wxpython/core/units.py b/gui/wxpython/core/units.py
index dcf7821..09a7af0 100644
--- a/gui/wxpython/core/units.py
+++ b/gui/wxpython/core/units.py
@@ -29,42 +29,43 @@ if __name__ == '__main__':
 
 from core.utils import _
 
+
 class BaseUnits:
+
     def __init__(self):
         self._units = dict()
-        self._units['length'] = { 0 : { 'key' : 'mu', 'label' : _('map units') },
-                             1 : { 'key' : 'me', 'label' : _('meters') },
-                             2 : { 'key' : 'km', 'label' : _('kilometers') },
-                             3 : { 'key' : 'mi', 'label' : _('miles') },
-                             4 : { 'key' : 'ft', 'label' : _('feet') } }
-        
-        self._units['area']   = { 0 : { 'key' : 'mu', 'label' : _('sq map units') },
-                             1 : { 'key' : 'me', 'label' : _('sq meters') },
-                             2 : { 'key' : 'km', 'label' : _('sq kilometers') },
-                             3 : { 'key' : 'ar', 'label' : _('acres') },
-                             4 : { 'key' : 'ht', 'label' : _('hectares') } }
+        self._units['length'] = {0: {'key': 'mu', 'label': _('map units')},
+                                 1: {'key': 'me', 'label': _('meters')},
+                                 2: {'key': 'km', 'label': _('kilometers')},
+                                 3: {'key': 'mi', 'label': _('miles')},
+                                 4: {'key': 'ft', 'label': _('feet')}}
+
+        self._units['area'] = {0: {'key': 'mu', 'label': _('sq map units')},
+                               1: {'key': 'me', 'label': _('sq meters')},
+                               2: {'key': 'km', 'label': _('sq kilometers')},
+                               3: {'key': 'ar', 'label': _('acres')},
+                               4: {'key': 'ht', 'label': _('hectares')}}
 
     def GetUnitsList(self, type):
         """Get list of units (their labels)
-        
+
         :param type: units type ('length' or 'area')
-        
+
         :return: list of units labels
         """
         result = list()
         try:
-            keys = self._units[type].keys()
-            keys.sort()
+            keys = sorted(self._units[type].keys())
             for idx in keys:
                 result.append(self._units[type][idx]['label'])
         except KeyError:
             pass
-        
+
         return result
 
     def GetUnitsKey(self, type, index):
         """Get units key based on index
-        
+
         :param type: units type ('length' or 'area')
         :param index: units index
         """
@@ -72,7 +73,7 @@ class BaseUnits:
 
     def GetUnitsIndex(self, type, key):
         """Get units index based on key
-        
+
         :param type: units type ('length' or 'area')
         :param key: units key, e.g. 'me' for meters
 
@@ -85,6 +86,7 @@ class BaseUnits:
 
 Units = BaseUnits()
 
+
 def ConvertValue(value, type, units):
     """Convert value from map units to given units
 
@@ -96,7 +98,7 @@ def ConvertValue(value, type, units):
     """
     # get map units
     # TODO
-    
+
     f = 1
     if type == 'length':
         if units == 'me':
@@ -107,7 +109,7 @@ def ConvertValue(value, type, units):
             f = 6.21371192237334e-4
         elif units == 'ft':
             f = 3.28083989501312
-    else: # -> area
+    else:  # -> area
         if units == 'me':
             f = 1.0
         elif units == 'km':
@@ -125,78 +127,78 @@ def ConvertValue(value, type, units):
 
 
 def formatDist(distance, mapunits):
-        """Formats length numbers and units in a nice way.
-
-        Formats length numbers and units as a function of length.
-
-        >>> formatDist(20.56915, 'metres')
-        (20.57, 'm')
-        >>> formatDist(6983.4591, 'metres')
-        (6.983, 'km')
-        >>> formatDist(0.59, 'feet')
-        (0.59, 'ft')
-        >>> formatDist(8562, 'feet')
-        (1.622, 'miles')
-        >>> formatDist(0.48963, 'degrees')
-        (29.38, 'min')
-        >>> formatDist(20.2546, 'degrees')
-        (20.25, 'deg')
-        >>> formatDist(82.146, 'unknown')
-        (82.15, 'units')
-
-        Accepted map units are 'meters', 'metres', 'feet', 'degree'.
-        Returns 'units' instead of unrecognized units.
-
-        :param distance: map units
-        :param mapunits: map units
-
-        From code by Hamish Bowman Grass Development Team 2006.
-        """
-        if mapunits == 'metres':
-            mapunits = 'meters'
-        outunits = mapunits
-        distance = float(distance)
-        divisor = 1.0
-
-        # figure out which units to use
-        if mapunits == 'meters':
-            if distance > 2500.0:
-                outunits = 'km'
-                divisor = 1000.0
-            else:
-                outunits = 'm'
-        elif mapunits == 'feet':
-            # nano-bug: we match any "feet", but US Survey feet is really
-            #  5279.9894 per statute mile, or 10.6' per 1000 miles. As >1000
-            #  miles the tick markers are rounded to the nearest 10th of a
-            #  mile (528'), the difference in foot flavours is ignored.
-            if distance > 5280.0:
-                outunits = 'miles'
-                divisor = 5280.0
-            else:
-                outunits = 'ft'
-        elif 'degree' in mapunits:
-            # was: 'degree' in mapunits and not haveCtypes (for unknown reason)
-            if distance < 1:
-                outunits = 'min'
-                divisor = (1 / 60.0)
-            else:
-                outunits = 'deg'
+    """Formats length numbers and units in a nice way.
+
+    Formats length numbers and units as a function of length.
+
+    >>> formatDist(20.56915, 'metres')
+    (20.57, 'm')
+    >>> formatDist(6983.4591, 'metres')
+    (6.983, 'km')
+    >>> formatDist(0.59, 'feet')
+    (0.59, 'ft')
+    >>> formatDist(8562, 'feet')
+    (1.622, 'miles')
+    >>> formatDist(0.48963, 'degrees')
+    (29.38, 'min')
+    >>> formatDist(20.2546, 'degrees')
+    (20.25, 'deg')
+    >>> formatDist(82.146, 'unknown')
+    (82.15, 'units')
+
+    Accepted map units are 'meters', 'metres', 'feet', 'degree'.
+    Returns 'units' instead of unrecognized units.
+
+    :param distance: map units
+    :param mapunits: map units
+
+    From code by Hamish Bowman Grass Development Team 2006.
+    """
+    if mapunits == 'metres':
+        mapunits = 'meters'
+    outunits = mapunits
+    distance = float(distance)
+    divisor = 1.0
+
+    # figure out which units to use
+    if mapunits == 'meters':
+        if distance > 2500.0:
+            outunits = 'km'
+            divisor = 1000.0
         else:
-            return (distance, 'units')
-
-        # format numbers in a nice way
-        if (distance / divisor) >= 2500.0:
-            outdistance = round(distance / divisor)
-        elif (distance / divisor) >= 1000.0:
-            outdistance = round(distance / divisor, 1)
-        elif (distance / divisor) > 0.0:
-            outdistance = round(distance / divisor,
-                                int(math.ceil(3 - math.log10(distance / divisor))))
+            outunits = 'm'
+    elif mapunits == 'feet':
+        # nano-bug: we match any "feet", but US Survey feet is really
+        #  5279.9894 per statute mile, or 10.6' per 1000 miles. As >1000
+        #  miles the tick markers are rounded to the nearest 10th of a
+        #  mile (528'), the difference in foot flavours is ignored.
+        if distance > 5280.0:
+            outunits = 'miles'
+            divisor = 5280.0
         else:
-            outdistance = float(distance / divisor)
-
-        return (outdistance, outunits)
+            outunits = 'ft'
+    elif 'degree' in mapunits:
+        # was: 'degree' in mapunits and not haveCtypes (for unknown reason)
+        if distance < 1:
+            outunits = 'min'
+            divisor = (1 / 60.0)
+        else:
+            outunits = 'deg'
+    else:
+        return (distance, 'units')
+
+    # format numbers in a nice way
+    if (distance / divisor) >= 2500.0:
+        outdistance = round(distance / divisor)
+    elif (distance / divisor) >= 1000.0:
+        outdistance = round(distance / divisor, 1)
+    elif (distance / divisor) > 0.0:
+        outdistance = round(distance / divisor,
+                            int(math.ceil(3 - math.log10(distance / divisor))))
+    else:
+        outdistance = float(distance / divisor)
+
+    return (outdistance, outunits)
 
 
 def doc_test():
diff --git a/gui/wxpython/core/utils.py b/gui/wxpython/core/utils.py
index 14ea512..db6a9c2 100644
--- a/gui/wxpython/core/utils.py
+++ b/gui/wxpython/core/utils.py
@@ -23,25 +23,32 @@ import inspect
 
 from grass.script import core as grass
 from grass.script import task as gtask
+from grass.exceptions import OpenError
 
 from core import globalvar
-from core.gcmd  import RunCommand
+from core.gcmd import RunCommand
 from core.debug import Debug
 
 try:
     # intended to be used also outside this module
     import gettext
-    _ = gettext.translation('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale')).ugettext
+    _ = gettext.translation(
+        'grasswxpy',
+        os.path.join(
+            os.getenv("GISBASE"),
+            'locale')).ugettext
 except IOError:
     # using no translation silently
     def null_gettext(string):
         return string
     _ = null_gettext
 
+
 def normalize_whitespace(text):
     """Remove redundant whitespace from a string"""
     return string.join(string.split(text), ' ')
 
+
 def split(s):
     """Platform spefic shlex.split"""
     try:
@@ -51,9 +58,10 @@ def split(s):
             return shlex.split(s)
     except ValueError as e:
         sys.stderr.write(_("Syntax error: %s") % e)
-    
+
     return []
 
+
 def GetTempfile(pref=None):
     """Creates GRASS temporary file using defined prefix.
 
@@ -65,8 +73,8 @@ def GetTempfile(pref=None):
     :return: Path to file name (string) or None
     """
     ret = RunCommand('g.tempfile',
-                     read = True,
-                     pid = os.getpid())
+                     read=True,
+                     pid=os.getpid())
 
     tempfile = ret.splitlines()[0].strip()
 
@@ -83,27 +91,28 @@ def GetTempfile(pref=None):
     except:
         return None
 
-def GetLayerNameFromCmd(dcmd, fullyQualified = False, param = None,
-                        layerType = None):
+
+def GetLayerNameFromCmd(dcmd, fullyQualified=False, param=None,
+                        layerType=None):
     """Get map name from GRASS command
-    
+
     Parameter dcmd can be modified when first parameter is not
     defined.
-    
+
     :param dcmd: GRASS command (given as list)
     :param fullyQualified: change map name to be fully qualified
     :param param: params directory
     :param str layerType: check also layer type ('raster', 'vector',
-                          '3d-raster', ...)
-    
+                          'raster_3d', ...)
+
     :return: tuple (name, found)
     """
     mapname = ''
-    found   = True
-    
+    found = True
+
     if len(dcmd) < 1:
         return mapname, False
-    
+
     if 'd.grid' == dcmd[0]:
         mapname = 'grid'
     elif 'd.geodesic' in dcmd[0]:
@@ -119,7 +128,7 @@ def GetLayerNameFromCmd(dcmd, fullyQualified = False, param = None,
                 p, v = dcmd[idx].split('=', 1)
             except ValueError:
                 continue
-            
+
             if p == param:
                 params = [(idx, p, v)]
                 break
@@ -156,23 +165,25 @@ def GetLayerNameFromCmd(dcmd, fullyQualified = False, param = None,
             mapname = v
             mapset = ''
             if fullyQualified and '@' not in mapname:
-                if layerType in ('raster', 'vector', '3d-raster', 'rgb', 'his'):
+                if layerType in ('raster', 'vector',
+                                 'raster_3d', 'rgb', 'his'):
                     try:
                         if layerType in ('raster', 'rgb', 'his'):
                             findType = 'cell'
-                        elif layerType == '3d-raster':
+                        elif layerType == 'raster_3d':
                             findType = 'grid3'
                         else:
                             findType = layerType
-                        mapset = grass.find_file(mapname, element = findType)['mapset']
-                    except AttributeError: # not found
+                        mapset = grass.find_file(
+                            mapname, element=findType)['mapset']
+                    except AttributeError:  # not found
                         return '', False
                     if not mapset:
                         found = False
                 else:
-                    mapset = '' # grass.gisenv()['MAPSET']
+                    mapset = ''  # grass.gisenv()['MAPSET']
             mapsets[i] = mapset
-            
+
         # update dcmd
         for i, p, v in params:
             if p == 'layer':
@@ -180,7 +191,7 @@ def GetLayerNameFromCmd(dcmd, fullyQualified = False, param = None,
             dcmd[i] = p + '=' + v
             if i in mapsets and mapsets[i]:
                 dcmd[i] += '@' + mapsets[i]
-        
+
         maps = list()
         ogr = False
         for i, p, v in params:
@@ -189,44 +200,46 @@ def GetLayerNameFromCmd(dcmd, fullyQualified = False, param = None,
             if p == 'layer' and not ogr:
                 continue
             maps.append(dcmd[i].split('=', 1)[1])
-        
+
         mapname = '\n'.join(maps)
-    
+
     return mapname, found
 
+
 def GetValidLayerName(name):
     """Make layer name SQL compliant, based on G_str_to_sql()
-    
+
     .. todo::
         Better use directly Ctypes to reuse venerable libgis C fns...
     """
     retName = name.strip()
-    
+
     # check if name is fully qualified
     if '@' in retName:
         retName, mapset = retName.split('@')
     else:
         mapset = None
-    
+
     cIdx = 0
     retNameList = list(retName)
     for c in retNameList:
         if not (c >= 'A' and c <= 'Z') and \
-               not (c >= 'a' and c <= 'z') and \
-               not (c >= '0' and c <= '9'):
+                not (c >= 'a' and c <= 'z') and \
+                not (c >= '0' and c <= '9'):
             retNameList[cIdx] = '_'
         cIdx += 1
     retName = ''.join(retNameList)
-    
+
     if not (retName[0] >= 'A' and retName[0] <= 'Z') and \
-           not (retName[0] >= 'a' and retName[0] <= 'z'):
+            not (retName[0] >= 'a' and retName[0] <= 'z'):
         retName = 'x' + retName[1:]
 
     if mapset:
         retName = retName + '@' + mapset
-        
+
     return retName
 
+
 def ListOfCatsToRange(cats):
     """Convert list of category number to range(s)
 
@@ -262,38 +275,39 @@ def ListOfCatsToRange(cats):
         else:
             catstr += '%d,' % (cats[i])
             i += 1
-        
+
     return catstr.strip(',')
 
-def ListOfMapsets(get = 'ordered'):
+
+def ListOfMapsets(get='ordered'):
     """Get list of available/accessible mapsets
 
     :param str get: method ('all', 'accessible', 'ordered')
-    
+
     :return: list of mapsets
     :return: None on error
     """
     mapsets = []
-    
+
     if get == 'all' or get == 'ordered':
         ret = RunCommand('g.mapsets',
-                         read = True,
-                         quiet = True,
-                         flags = 'l',
-                         sep = 'newline')
-        
+                         read=True,
+                         quiet=True,
+                         flags='l',
+                         sep='newline')
+
         if ret:
             mapsets = ret.splitlines()
             ListSortLower(mapsets)
         else:
             return None
-        
+
     if get == 'accessible' or get == 'ordered':
         ret = RunCommand('g.mapsets',
-                         read = True,
-                         quiet = True,
-                         flags = 'p',
-                         sep = 'newline')
+                         read=True,
+                         quiet=True,
+                         flags='p',
+                         sep='newline')
         if ret:
             if get == 'accessible':
                 mapsets = ret.splitlines()
@@ -304,44 +318,52 @@ def ListOfMapsets(get = 'ordered'):
                 mapsets = mapsets_accessible + mapsets
         else:
             return None
-    
+
     return mapsets
 
+
 def ListSortLower(list):
     """Sort list items (not case-sensitive)"""
     list.sort(cmp=lambda x, y: cmp(x.lower(), y.lower()))
 
+
 def GetVectorNumberOfLayers(vector):
     """Get list of all vector layers"""
     layers = list()
     if not vector:
         return layers
-    
-    fullname = grass.find_file(name = vector, element = 'vector')['fullname']
+
+    fullname = grass.find_file(name=vector, element='vector')['fullname']
     if not fullname:
-        Debug.msg(5, "utils.GetVectorNumberOfLayers(): vector map '%s' not found" % vector)
+        Debug.msg(
+            5,
+            "utils.GetVectorNumberOfLayers(): vector map '%s' not found" %
+            vector)
         return layers
-    
+
     ret, out, msg = RunCommand('v.category',
-                               getErrorMsg = True,
-                               read = True,
-                               input = fullname,
-                               option = 'layers')
+                               getErrorMsg=True,
+                               read=True,
+                               input=fullname,
+                               option='layers')
     if ret != 0:
-        sys.stderr.write(_("Vector map <%(map)s>: %(msg)s\n") % { 'map' : fullname, 'msg' : msg })
+        sys.stderr.write(
+            _("Vector map <%(map)s>: %(msg)s\n") %
+            {'map': fullname, 'msg': msg})
         return layers
     else:
         Debug.msg(1, "GetVectorNumberOfLayers(): ret %s" % ret)
-    
+
     for layer in out.splitlines():
         layers.append(layer)
-    
-    Debug.msg(3, "utils.GetVectorNumberOfLayers(): vector=%s -> %s" % \
-                  (fullname, ','.join(layers)))
-    
+
+    Debug.msg(3, "utils.GetVectorNumberOfLayers(): vector=%s -> %s" %
+              (fullname, ','.join(layers)))
+
     return layers
 
-def Deg2DMS(lon, lat, string = True, hemisphere = True, precision = 3):
+
+def Deg2DMS(lon, lat, string=True, hemisphere=True, precision=3):
     """Convert deg value to dms string
 
     :param lon: longitude (x)
@@ -349,7 +371,7 @@ def Deg2DMS(lon, lat, string = True, hemisphere = True, precision = 3):
     :param string: True to return string otherwise tuple
     :param hemisphere: print hemisphere
     :param precision: seconds precision
-    
+
     :return: DMS string or tuple of values
     :return: empty string on error
     """
@@ -386,43 +408,45 @@ def Deg2DMS(lon, lat, string = True, hemisphere = True, precision = 3):
         flon = abs(flon)
         hlon = ''
         hlat = ''
-    
-    slat = __ll_parts(flat, precision = precision)
-    slon = __ll_parts(flon, precision = precision)
+
+    slat = __ll_parts(flat, precision=precision)
+    slon = __ll_parts(flon, precision=precision)
 
     if string:
         return slon + hlon + '; ' + slat + hlat
-    
+
     return (slon + hlon, slat + hlat)
 
+
 def DMS2Deg(lon, lat):
     """Convert dms value to deg
 
     :param lon: longitude (x)
     :param lat: latitude (y)
-    
+
     :return: tuple of converted values
     :return: ValueError on error
     """
-    x = __ll_parts(lon, reverse = True)
-    y = __ll_parts(lat, reverse = True)
-    
+    x = __ll_parts(lon, reverse=True)
+    y = __ll_parts(lat, reverse=True)
+
     return (x, y)
 
-def __ll_parts(value, reverse = False, precision = 3):
+
+def __ll_parts(value, reverse=False, precision=3):
     """Converts deg to d:m:s string
 
     :param value: value to be converted
     :param reverse: True to convert from d:m:s to deg
     :param precision: seconds precision (ignored if reverse is True)
-    
+
     :return: converted value (string/float)
     :return: ValueError on error (reverse == True)
     """
     if not reverse:
         if value == 0.0:
             return '%s%.*f' % ('00:00:0', precision, 0.0)
-    
+
         d = int(int(value))
         m = int((value - d) * 60)
         s = ((value - d) * 60 - m) * 60
@@ -438,9 +462,9 @@ def __ll_parts(value, reverse = False, precision = 3):
             s = '0%.*f' % (precision, s)
         else:
             s = '%.*f' % (precision, s)
-        
+
         return str(d) + ':' + m + ':' + s
-    else: # -> reverse
+    else:  # -> reverse
         try:
             d, m, s = value.split(':')
             hs = s[-1]
@@ -460,78 +484,29 @@ def __ll_parts(value, reverse = False, precision = 3):
                     s = '0.0'
                 except ValueError:
                     raise ValueError
-        
+
         if hs not in ('N', 'S', 'E', 'W'):
             raise ValueError
-        
+
         coef = 1.0
         if hs in ('S', 'W'):
             coef = -1.0
-        
+
         fm = int(m) / 60.0
         fs = float(s) / (60 * 60)
-        
+
         return coef * (float(d) + fm + fs)
-    
+
+
 def GetCmdString(cmd):
     """Get GRASS command as string.
-    
-    :param cmd: GRASS command given as tuple
-    
-    :return: command string
-    """
-    return ' '.join(CmdTupleToList(cmd))
 
-def CmdTupleToList(cmd):
-    """Convert command tuple to list.
-    
     :param cmd: GRASS command given as tuple
-    
-    :return: command in list
+
+    :return: command string
     """
-    cmdList = []
-    if not cmd:
-        return cmdList
-    
-    cmdList.append(cmd[0])
-    
-    if 'flags' in cmd[1]:
-        for flag in cmd[1]['flags']:
-            cmdList.append('-' + flag)
-    for flag in ('help', 'verbose', 'quiet', 'overwrite'):
-        if flag in cmd[1] and cmd[1][flag] is True:
-            cmdList.append('--' + flag)
-    
-    for k, v in cmd[1].iteritems():
-        if k in ('flags', 'help', 'verbose', 'quiet', 'overwrite'):
-            continue
-        cmdList.append('%s=%s' % (k, v))
-            
-    return cmdList
+    return ' '.join(gtask.cmdtuple_to_list(cmd))
 
-def CmdToTuple(cmd):
-    """Convert command list to tuple for gcmd.RunCommand()"""
-    if len(cmd) < 1:
-        return None
-    
-    dcmd = {}
-    for item in cmd[1:]:
-        if '=' in item: # params
-            key, value = item.split('=', 1)
-            dcmd[str(key)] = value.replace('"', '')
-        elif item[:2] == '--': # long flags
-            flag = item[2:]
-            if flag in ('help', 'verbose', 'quiet', 'overwrite'):
-                dcmd[str(flag)] = True
-        elif len(item) == 2 and item[0] == '-': # -> flags
-            if 'flags' not in dcmd:
-                dcmd['flags'] = ''
-            dcmd['flags'] += item[1]
-        else: # unnamed parameter
-            module = gtask.parse_interface(cmd[0])
-            dcmd[module.define_first()] = item
-    
-    return (cmd[0], dcmd)
 
 def PathJoin(*args):
     """Check path created by os.path.join"""
@@ -539,30 +514,32 @@ def PathJoin(*args):
     if platform.system() == 'Windows' and \
             '/' in path:
         return path[1].upper() + ':\\' + path[3:].replace('/', '\\')
-    
+
     return path
 
+
 def ReadEpsgCodes(path):
     """Read EPSG code from the file
 
     :param path: full path to the file with EPSG codes
 
+    Raise OpenError on failure.
+
     :return: dictionary of EPSG code
-    :return: string on error
     """
     epsgCodeDict = dict()
     try:
         try:
             f = open(path, "r")
         except IOError:
-            return _("failed to open '%s'" % path)
+            raise OpenError(_("failed to open '{}'").format(path))
 
         code = None
         for line in f.readlines():
             line = line.strip()
             if len(line) < 1:
                 continue
-                
+
             if line[0] == '#':
                 descr = line[1:].strip()
             elif line[0] == '<':
@@ -570,19 +547,20 @@ def ReadEpsgCodes(path):
                 try:
                     code = int(code.replace('<', '').replace('>', ''))
                 except ValueError as e:
-                    return e
-            
+                    raise OpenError('{}'.format(e))
+
             if code is not None:
                 epsgCodeDict[code] = (descr, params)
                 code = None
-        
+
         f.close()
-    except StandardError as e:
-        return e
-    
+    except Exception as e:
+        raise OpenError('{}'.format(e))
+
     return epsgCodeDict
 
-def ReprojectCoordinates(coord, projOut, projIn = None, flags = ''):
+
+def ReprojectCoordinates(coord, projOut, projIn=None, flags=''):
     """Reproject coordinates
 
     :param coord: coordinates given as tuple
@@ -592,13 +570,13 @@ def ReprojectCoordinates(coord, projOut, projIn = None, flags = ''):
     :return: reprojected coordinates (returned as tuple)
     """
     coors = RunCommand('m.proj',
-                       flags = flags,
-                       input = '-',
-                       proj_in = projIn,
-                       proj_out = projOut,
-                       sep = ';',
-                       stdin = '%f;%f' % (coord[0], coord[1]),
-                       read = True)
+                       flags=flags,
+                       input='-',
+                       proj_in=projIn,
+                       proj_out=projOut,
+                       sep=';',
+                       stdin='%f;%f' % (coord[0], coord[1]),
+                       read=True)
     if coors:
         coors = coors.split(';')
         e = coors[0]
@@ -614,9 +592,10 @@ def ReprojectCoordinates(coord, projOut, projIn = None, flags = ''):
                 return (proj, (float(e), float(n)))
             except ValueError:
                 return (None, None)
-    
+
     return (None, None)
 
+
 def GetListOfLocations(dbase):
     """Get list of GRASS locations in given dbase
 
@@ -629,18 +608,21 @@ def GetListOfLocations(dbase):
     try:
         for location in glob.glob(os.path.join(dbase, "*")):
             try:
-                if os.path.join(location, "PERMANENT") in glob.glob(os.path.join(location, "*")):
+                if os.path.join(
+                        location, "PERMANENT") in glob.glob(
+                        os.path.join(location, "*")):
                     listOfLocations.append(os.path.basename(location))
             except:
                 pass
     except (UnicodeEncodeError, UnicodeDecodeError) as e:
         raise e
-    
+
     ListSortLower(listOfLocations)
-    
+
     return listOfLocations
 
-def GetListOfMapsets(dbase, location, selectable = False):
+
+def GetListOfMapsets(dbase, location, selectable=False):
     """Get list of mapsets in given GRASS location
 
     :param dbase: GRASS database path
@@ -650,80 +632,84 @@ def GetListOfMapsets(dbase, location, selectable = False):
     :return: list of mapsets - sorted (PERMANENT first)
     """
     listOfMapsets = list()
-    
+
     if selectable:
         ret = RunCommand('g.mapset',
-                         read = True,
-                         flags = 'l',
-                         location = location,
-                         dbase = dbase)
-        
+                         read=True,
+                         flags='l',
+                         location=location,
+                         dbase=dbase)
+
         if not ret:
             return listOfMapsets
-        
+
         for line in ret.rstrip().splitlines():
             listOfMapsets += line.split(' ')
     else:
         for mapset in glob.glob(os.path.join(dbase, location, "*")):
-            if os.path.isdir(mapset) and \
-                    os.path.isfile(os.path.join(dbase, location, mapset, "WIND")):
+            if os.path.isdir(mapset) and os.path.isfile(
+                    os.path.join(dbase, location, mapset, "WIND")):
                 listOfMapsets.append(os.path.basename(mapset))
-    
+
     ListSortLower(listOfMapsets)
     return listOfMapsets
 
+
 def GetColorTables():
     """Get list of color tables"""
     ret = RunCommand('r.colors',
-                     read = True,
-                     flags = 'l')
+                     read=True,
+                     flags='l')
     if not ret:
         return list()
-    
+
     return ret.splitlines()
 
+
 def _getGDALFormats():
     """Get dictionary of avaialble GDAL drivers"""
     try:
         ret = grass.read_command('r.in.gdal',
-                                 quiet = True,
-                                 flags = 'f')
+                                 quiet=True,
+                                 flags='f')
     except:
         ret = None
-    
-    return _parseFormats(ret), _parseFormats(ret, writableOnly = True)
+
+    return _parseFormats(ret), _parseFormats(ret, writableOnly=True)
+
 
 def _getOGRFormats():
     """Get dictionary of avaialble OGR drivers"""
     try:
         ret = grass.read_command('v.in.ogr',
-                                 quiet = True,
-                                 flags = 'f')
+                                 quiet=True,
+                                 flags='f')
     except:
         ret = None
 
-    return _parseFormats(ret), _parseFormats(ret, writableOnly = True)
+    return _parseFormats(ret), _parseFormats(ret, writableOnly=True)
 
-def _parseFormats(output, writableOnly = False):
+
+def _parseFormats(output, writableOnly=False):
     """Parse r.in.gdal/v.in.ogr -f output"""
-    formats = { 'file'     : list(),
-                'database' : list(),
-                'protocol' : list()
-                }
-    
+    formats = {'file': list(),
+               'database': list(),
+               'protocol': list()
+               }
+
     if not output:
         return formats
-    
+
     patt = None
     if writableOnly:
         patt = re.compile('\(rw\+?\)$', re.IGNORECASE)
-    
+
     for line in output.splitlines():
         key, name = map(lambda x: x.strip(), line.strip().rsplit(':', -1))
-        
+
         if writableOnly and not patt.search(key):
             continue
-        
+
         if name in ('Memory', 'Virtual Raster', 'In Memory Raster'):
             continue
         if name in ('PostgreSQL', 'SQLite',
@@ -744,103 +730,104 @@ def _parseFormats(output, writableOnly = False):
             formats['protocol'].append(name)
         else:
             formats['file'].append(name)
-    
+
     for items in formats.itervalues():
         items.sort()
-    
+
     return formats
 
 formats = None
 
-def GetFormats(writableOnly = False):
+
+def GetFormats(writableOnly=False):
     """Get GDAL/OGR formats"""
     global formats
     if not formats:
         gdalAll, gdalWritable = _getGDALFormats()
-        ogrAll,  ogrWritable  = _getOGRFormats()
+        ogrAll, ogrWritable = _getOGRFormats()
         formats = {
-            'all' : {
-                'gdal' : gdalAll,
-                'ogr'  : ogrAll,
-                },
-            'writable' : {
-                'gdal' : gdalWritable,
-                'ogr'  : ogrWritable,
-                },
-            }
-    
+            'all': {
+                'gdal': gdalAll,
+                'ogr': ogrAll,
+            },
+            'writable': {
+                'gdal': gdalWritable,
+                'ogr': ogrWritable,
+            },
+        }
+
     if writableOnly:
         return formats['writable']
-    
+
     return formats['all']
 
 
 rasterFormatExtension = {
-            'GeoTIFF' : 'tif',
-            'Erdas Imagine Images (.img)' : 'img',
-            'Ground-based SAR Applications Testbed File Format (.gff)' : 'gff',
-            'Arc/Info Binary Grid' : 'adf',
-            'Portable Network Graphics' : 'png',
-            'JPEG JFIF' : 'jpg',
-            'Japanese DEM (.mem)' : 'mem',
-            'Graphics Interchange Format (.gif)' : 'gif',
-            'X11 PixMap Format' : 'xpm',
-            'MS Windows Device Independent Bitmap' : 'bmp',
-            'SPOT DIMAP' : 'dim',
-            'RadarSat 2 XML Product' : 'xml',
-            'EarthWatch .TIL' : 'til',
-            'ERMapper .ers Labelled' : 'ers',
-            'ERMapper Compressed Wavelets' : 'ecw',
-            'GRIdded Binary (.grb)' : 'grb',
-            'EUMETSAT Archive native (.nat)' : 'nat',
-            'Idrisi Raster A.1' : 'rst',
-            'Golden Software ASCII Grid (.grd)' : 'grd',
-            'Golden Software Binary Grid (.grd)' : 'grd',
-            'Golden Software 7 Binary Grid (.grd)' : 'grd',
-            'R Object Data Store' : 'r',
-            'USGS DOQ (Old Style)' : 'doq',
-            'USGS DOQ (New Style)' : 'doq',
-            'ENVI .hdr Labelled' : 'hdr',
-            'ESRI .hdr Labelled' : 'hdr',
-            'Generic Binary (.hdr Labelled)' : 'hdr',
-            'PCI .aux Labelled' : 'aux',
-            'EOSAT FAST Format' : 'fst',
-            'VTP .bt (Binary Terrain) 1.3 Format' : 'bt',
-            'FARSITE v.4 Landscape File (.lcp)' : 'lcp',
-            'Swedish Grid RIK (.rik)' : 'rik',
-            'USGS Optional ASCII DEM (and CDED)' : 'dem',
-            'Northwood Numeric Grid Format .grd/.tab' : '',
-            'Northwood Classified Grid Format .grc/.tab' : '',
-            'ARC Digitized Raster Graphics' : 'arc',
-            'Magellan topo (.blx)' : 'blx',
-            'SAGA GIS Binary Grid (.sdat)' : 'sdat'
-            }
+    'GeoTIFF': 'tif',
+    'Erdas Imagine Images (.img)': 'img',
+    'Ground-based SAR Applications Testbed File Format (.gff)': 'gff',
+    'Arc/Info Binary Grid': 'adf',
+    'Portable Network Graphics': 'png',
+    'JPEG JFIF': 'jpg',
+    'Japanese DEM (.mem)': 'mem',
+    'Graphics Interchange Format (.gif)': 'gif',
+    'X11 PixMap Format': 'xpm',
+    'MS Windows Device Independent Bitmap': 'bmp',
+    'SPOT DIMAP': 'dim',
+    'RadarSat 2 XML Product': 'xml',
+    'EarthWatch .TIL': 'til',
+    'ERMapper .ers Labelled': 'ers',
+    'ERMapper Compressed Wavelets': 'ecw',
+    'GRIdded Binary (.grb)': 'grb',
+    'EUMETSAT Archive native (.nat)': 'nat',
+    'Idrisi Raster A.1': 'rst',
+    'Golden Software ASCII Grid (.grd)': 'grd',
+    'Golden Software Binary Grid (.grd)': 'grd',
+    'Golden Software 7 Binary Grid (.grd)': 'grd',
+    'R Object Data Store': 'r',
+    'USGS DOQ (Old Style)': 'doq',
+    'USGS DOQ (New Style)': 'doq',
+    'ENVI .hdr Labelled': 'hdr',
+    'ESRI .hdr Labelled': 'hdr',
+    'Generic Binary (.hdr Labelled)': 'hdr',
+    'PCI .aux Labelled': 'aux',
+    'EOSAT FAST Format': 'fst',
+    'VTP .bt (Binary Terrain) 1.3 Format': 'bt',
+    'FARSITE v.4 Landscape File (.lcp)': 'lcp',
+    'Swedish Grid RIK (.rik)': 'rik',
+    'USGS Optional ASCII DEM (and CDED)': 'dem',
+    'Northwood Numeric Grid Format .grd/.tab': '',
+    'Northwood Classified Grid Format .grc/.tab': '',
+    'ARC Digitized Raster Graphics': 'arc',
+    'Magellan topo (.blx)': 'blx',
+    'SAGA GIS Binary Grid (.sdat)': 'sdat'
+}
 
 
 vectorFormatExtension = {
-            'ESRI Shapefile' : 'shp',
-            'UK .NTF'        : 'ntf',
-            'SDTS'           : 'ddf',
-            'DGN'            : 'dgn',
-            'VRT'            : 'vrt',
-            'REC'            : 'rec',
-            'BNA'            : 'bna',
-            'CSV'            : 'csv',
-            'GML'            : 'gml',
-            'GPX'            : 'gpx',
-            'KML'            : 'kml',
-            'GMT'            : 'gmt',
-            'PGeo'           : 'mdb',
-            'XPlane'         : 'dat',
-            'AVCBin'         : 'adf',
-            'AVCE00'         : 'e00',
-            'DXF'            : 'dxf',
-            'Geoconcept'     : 'gxt',
-            'GeoRSS'         : 'xml',
-            'GPSTrackMaker'  : 'gtm',
-            'VFK'            : 'vfk',
-            'SVG'            : 'svg',
-            }
+    'ESRI Shapefile': 'shp',
+    'UK .NTF': 'ntf',
+    'SDTS': 'ddf',
+            'DGN': 'dgn',
+            'VRT': 'vrt',
+            'REC': 'rec',
+            'BNA': 'bna',
+            'CSV': 'csv',
+            'GML': 'gml',
+            'GPX': 'gpx',
+            'KML': 'kml',
+            'GMT': 'gmt',
+            'PGeo': 'mdb',
+            'XPlane': 'dat',
+            'AVCBin': 'adf',
+            'AVCE00': 'e00',
+            'DXF': 'dxf',
+            'Geoconcept': 'gxt',
+            'GeoRSS': 'xml',
+            'GPSTrackMaker': 'gtm',
+            'VFK': 'vfk',
+            'SVG': 'svg',
+}
 
 
 def GetSettingsPath():
@@ -850,22 +837,25 @@ def GetSettingsPath():
         verFd = open(os.path.join(globalvar.ETCDIR, "VERSIONNUMBER"))
         version = int(verFd.readlines()[0].split(' ')[0].split('.')[0])
     except (IOError, ValueError, TypeError, IndexError) as e:
-        sys.exit(_("ERROR: Unable to determine GRASS version. Details: %s") % e)
-    
+        sys.exit(
+            _("ERROR: Unable to determine GRASS version. Details: %s") %
+            e)
+
     verFd.close()
 
     # keep location of settings files rc and wx in sync with lib/init/grass.py
     if sys.platform == 'win32':
         return os.path.join(os.getenv('APPDATA'), 'GRASS%d' % version)
-    
+
     return os.path.join(os.getenv('HOME'), '.grass%d' % version)
 
-def StoreEnvVariable(key, value = None, envFile = None):
+
+def StoreEnvVariable(key, value=None, envFile=None):
     """Store environmental variable
 
     If value is not given (is None) then environmental variable is
     unset.
-    
+
     :param key: env key
     :param value: env value
     :param envFile: path to the environmental file (None for default location)
@@ -874,10 +864,14 @@ def StoreEnvVariable(key, value = None, envFile = None):
     if not envFile:
         gVersion = grass.version()['version'].split('.', 1)[0]
         if not windows:
-            envFile = os.path.join(os.getenv('HOME'), '.grass%s' % gVersion, 'bashrc')
+            envFile = os.path.join(
+                os.getenv('HOME'), '.grass%s' %
+                gVersion, 'bashrc')
         else:
-            envFile = os.path.join(os.getenv('APPDATA'), 'GRASS%s' % gVersion, 'env.bat')
-    
+            envFile = os.path.join(
+                os.getenv('APPDATA'), 'GRASS%s' %
+                gVersion, 'env.bat')
+
     # read env file
     environ = dict()
     lineSkipped = list()
@@ -890,8 +884,11 @@ def StoreEnvVariable(key, value = None, envFile = None):
         for line in fd.readlines():
             line = line.rstrip(os.linesep)
             try:
-                k, v = map(lambda x: x.strip(), line.split(' ', 1)[1].split('=', 1))
-            except StandardError as e:
+                k, v = map(
+                    lambda x: x.strip(), line.split(
+                        ' ', 1)[1].split(
+                        '=', 1))
+            except Exception as e:
                 sys.stderr.write(_("%s: line skipped - unable to parse '%s'\n"
                                    "Reason: %s\n") % (envFile, line, e))
                 lineSkipped.append(line)
@@ -899,16 +896,16 @@ def StoreEnvVariable(key, value = None, envFile = None):
             if k in environ:
                 sys.stderr.write(_("Duplicated key: %s\n") % k)
             environ[k] = v
-        
+
         fd.close()
-    
+
     # update environmental variables
     if value is None:
         if key in environ:
             del environ[key]
     else:
         environ[key] = value
-    
+
     # write update env file
     try:
         fd = open(envFile, 'w')
@@ -919,17 +916,18 @@ def StoreEnvVariable(key, value = None, envFile = None):
         expCmd = 'set'
     else:
         expCmd = 'export'
-    
+
     for key, value in environ.iteritems():
         fd.write('%s %s=%s\n' % (expCmd, key, value))
-    
+
     # write also skipped lines
     for line in lineSkipped:
         fd.write(line + os.linesep)
-    
+
     fd.close()
 
-def SetAddOnPath(addonPath = None, key = 'PATH'):
+
+def SetAddOnPath(addonPath=None, key='PATH'):
     """Set default AddOn path
 
     :param addonPath: path to addons (None for default)
@@ -946,10 +944,10 @@ def SetAddOnPath(addonPath = None, key = 'PATH'):
             addonPath = os.path.join(os.path.join(os.getenv('APPDATA'),
                                                   'GRASS%s' % gVersion,
                                                   'addons'))
-    
-    StoreEnvVariable(key = 'GRASS_ADDON_' + key, value = addonPath)
+
+    StoreEnvVariable(key='GRASS_ADDON_' + key, value=addonPath)
     os.environ['GRASS_ADDON_' + key] = addonPath
-    
+
     # update path
     if addonPath not in os.environ['PATH']:
         os.environ['PATH'] = addonPath + os.pathsep + os.environ['PATH']
@@ -998,31 +996,34 @@ def color_resolve(color):
             label = _('Select Color')
     return (rgb, label)
 
-command2ltype = {'d.rast'         : 'raster',
-                 'd.rast3d'       : '3d-raster',
-                 'd.rgb'          : 'rgb',
-                 'd.his'          : 'his',
-                 'd.shade'        : 'shaded',
-                 'd.legend'       : 'rastleg',
-                 'd.rast.arrow'   : 'rastarrow',
-                 'd.rast.num'     : 'rastnum',
-                 'd.rast.leg'     : 'maplegend',
-                 'd.vect'         : 'vector',
+command2ltype = {'d.rast': 'raster',
+                 'd.rast3d': 'raster_3d',
+                 'd.rgb': 'rgb',
+                 'd.his': 'his',
+                 'd.shade': 'shaded',
+                 'd.legend': 'rastleg',
+                 'd.rast.arrow': 'rastarrow',
+                 'd.rast.num': 'rastnum',
+                 'd.rast.leg': 'maplegend',
+                 'd.vect': 'vector',
                  'd.vect.thematic': 'thememap',
-                 'd.vect.chart'   : 'themechart',
-                 'd.grid'         : 'grid',
-                 'd.geodesic'     : 'geodesic',
-                 'd.rhumbline'    : 'rhumb',
-                 'd.labels'       : 'labels',
-                 'd.barscale'     : 'barscale',
-                 'd.redraw'       : 'redraw',
-                 'd.wms'          : 'wms',
-                 'd.histogram'    : 'histogram',
-                 'd.colortable'   : 'colortable',
-                 'd.graph'        : 'graph',
-                 'd.out.file'     : 'export',
-                 'd.to.rast'      : 'torast',
-                 'd.text'         : 'text'
+                 'd.vect.chart': 'themechart',
+                 'd.grid': 'grid',
+                 'd.geodesic': 'geodesic',
+                 'd.rhumbline': 'rhumb',
+                 'd.labels': 'labels',
+                 'd.barscale': 'barscale',
+                 'd.redraw': 'redraw',
+                 'd.wms': 'wms',
+                 'd.histogram': 'histogram',
+                 'd.colortable': 'colortable',
+                 'd.graph': 'graph',
+                 'd.out.file': 'export',
+                 'd.to.rast': 'torast',
+                 'd.text': 'text',
+                 'd.northarrow': 'northarrow',
+                 'd.polar': 'polar',
+                 'd.legend.vect': 'vectleg'
                  }
 ltype2command = {}
 for (cmd, ltype) in command2ltype.items():
@@ -1030,24 +1031,24 @@ for (cmd, ltype) in command2ltype.items():
 
 
 def GetGEventAttribsForHandler(method, event):
-    """Get attributes from event, which can be used by handler method. 
+    """Get attributes from event, which can be used by handler method.
 
     Be aware of event class attributes.
 
     :param method: handler method (including self arg)
     :param event: event
 
-    :return: (valid kwargs for method, 
-             list of method's args without default value 
+    :return: (valid kwargs for method,
+             list of method's args without default value
              which were not found among event attributes)
     """
     args_spec = inspect.getargspec(method)
 
     args = args_spec[0]
 
-    defaults =[]
+    defaults = []
     if args_spec[3]:
-        defaults =  args_spec[3]
+        defaults = args_spec[3]
 
     # number of arguments without def value
     req_args = len(args) - 1 - len(defaults)
@@ -1064,9 +1065,9 @@ def GetGEventAttribsForHandler(method, event):
     return kwargs, missing_args
 
 
-def PilImageToWxImage(pilImage, copyAlpha = True):
+def PilImageToWxImage(pilImage, copyAlpha=True):
     """Convert PIL image to wx.Image
-    
+
     Based on http://wiki.wxpython.org/WorkingWithImages
     """
     import wx
@@ -1075,17 +1076,34 @@ def PilImageToWxImage(pilImage, copyAlpha = True):
         wxImage = wx.EmptyImage(*pilImage.size)
         pilImageCopyRGBA = pilImage.copy()
         pilImageCopyRGB = pilImageCopyRGBA.convert('RGB')    # RGBA --> RGB
-        fn = getattr(pilImageCopyRGB, "tobytes", getattr(pilImageCopyRGB, "tostring"))
+        fn = getattr(
+            pilImageCopyRGB,
+            "tobytes",
+            getattr(
+                pilImageCopyRGB,
+                "tostring"))
         pilImageRgbData = fn()
         wxImage.SetData(pilImageRgbData)
-        fn = getattr(pilImageCopyRGBA, "tobytes", getattr(pilImageCopyRGBA, "tostring"))
-        wxImage.SetAlphaData(fn()[3::4])  # Create layer and insert alpha values.
+        fn = getattr(
+            pilImageCopyRGBA,
+            "tobytes",
+            getattr(
+                pilImageCopyRGBA,
+                "tostring"))
+        # Create layer and insert alpha values.
+        wxImage.SetAlphaData(fn()[3::4])
 
     else:    # The resulting image will not have alpha.
         wxImage = wx.EmptyImage(*pilImage.size)
         pilImageCopy = pilImage.copy()
-        pilImageCopyRGB = pilImageCopy.convert('RGB')    # Discard any alpha from the PIL image.
-        fn = getattr(pilImageCopyRGB, "tobytes", getattr(pilImageCopyRGB, "tostring"))
+        # Discard any alpha from the PIL image.
+        pilImageCopyRGB = pilImageCopy.convert('RGB')
+        fn = getattr(
+            pilImageCopyRGB,
+            "tobytes",
+            getattr(
+                pilImageCopyRGB,
+                "tostring"))
         pilImageRgbData = fn()
         wxImage.SetData(pilImageRgbData)
 
@@ -1175,6 +1193,7 @@ def doc_test():
     do_doctest_gettext_workaround()
     return doctest.testmod().failed
 
+
 def registerPid(pid):
     """Register process id as GUI_PID GRASS variable
 
@@ -1186,7 +1205,8 @@ def registerPid(pid):
         guiPid = env['GUI_PID'].split(',')
     guiPid.append(str(pid))
     grass.run_command('g.gisenv', set='GUI_PID={}'.format(','.join(guiPid)))
-    
+
+
 def unregisterPid(pid):
     """Unregister process id from GUI_PID GRASS variable
 
@@ -1195,12 +1215,15 @@ def unregisterPid(pid):
     env = grass.gisenv()
     if 'GUI_PID' not in env:
         return
-    
+
     guiPid = env['GUI_PID'].split(',')
     pid = str(os.getpid())
     if pid in guiPid:
         guiPid.remove(pid)
-        grass.run_command('g.gisenv', set='GUI_PID={}'.format(','.join(guiPid)))
-    
+        grass.run_command(
+            'g.gisenv',
+            set='GUI_PID={}'.format(
+                ','.join(guiPid)))
+
 if __name__ == '__main__':
     sys.exit(doc_test())
diff --git a/gui/wxpython/core/workspace.py b/gui/wxpython/core/workspace.py
index 838cc81..803a206 100644
--- a/gui/wxpython/core/workspace.py
+++ b/gui/wxpython/core/workspace.py
@@ -20,29 +20,30 @@ import os
 
 import wx
 
-from core.utils     import normalize_whitespace, _
-from core.settings  import UserSettings
-from core.gcmd      import EncodeString, GetDefaultEncoding
-from nviz.main      import NvizSettings
+from core.utils import normalize_whitespace, _
+from core.settings import UserSettings
+from core.gcmd import EncodeString, GetDefaultEncoding
+from nviz.main import NvizSettings
 
 from grass.script import core as gcore
 
 
 class ProcessWorkspaceFile:
+
     def __init__(self, tree):
         """A ElementTree handler for the GXW XML file, as defined in
         grass-gxw.dtd.
         """
         self.tree = tree
         self.root = self.tree.getroot()
-        
+
         #
         # layer manager properties
         #
-        self.layerManager = { 'pos' : None,  # window position
-                              'size' : None, # window size
-                              'cwd' : None } # current working directory
-        
+        self.layerManager = {'pos': None,  # window position
+                             'size': None,  # window size
+                             'cwd': None}  # current working directory
+
         #
         # list of mapdisplays
         #
@@ -52,31 +53,33 @@ class ProcessWorkspaceFile:
         #
         self.layers = []
         #
+        # list of overlays
+        self.overlays = []
+        #
         # nviz state
         #
         self.nviz_state = {}
-        
-        self.displayIndex = -1 # first display has index '0'
-        
+
+        self.displayIndex = -1  # first display has index '0'
+
         self.__processFile()
 
         if NvizSettings:
             self.nvizDefault = NvizSettings()
         else:
             self.nvizDefault = None
-        
+
     def __filterValue(self, value):
         """Filter value
-        
+
         :param value:
         """
         value = value.replace('<', '<')
         value = value.replace('>', '>')
-        value = value.replace('&', '&')
-        
+
         return value
 
-    def __getNodeText(self, node, tag, default = ''):
+    def __getNodeText(self, node, tag, default=''):
         """Get node text"""
         p = node.find(tag)
         if p is not None:
@@ -86,9 +89,9 @@ class ProcessWorkspaceFile:
                 return ''
 
             return normalize_whitespace(p.text)
-        
+
         return default
-    
+
     def __processFile(self):
         """Process workspace file"""
         #
@@ -100,122 +103,133 @@ class ProcessWorkspaceFile:
             if posAttr:
                 posVal = map(int, posAttr.split(','))
                 try:
-                    self.layerManager['pos']  = (posVal[0], posVal[1])
+                    self.layerManager['pos'] = (posVal[0], posVal[1])
                     self.layerManager['size'] = (posVal[2], posVal[3])
                 except:
                     pass
             # current working directory
             cwdPath = self.__getNodeText(node_lm, 'cwd')
             if cwdPath:
-               self.layerManager['cwd'] = cwdPath 
-        
+                self.layerManager['cwd'] = cwdPath
+
         #
         # displays
         #
         for display in self.root.findall('display'):
             self.displayIndex += 1
-            
+
             # window position and size
             posAttr = display.get('dim', '')
             if posAttr:
                 posVal = map(int, posAttr.split(','))
                 try:
-                    pos  = (posVal[0], posVal[1])
+                    pos = (posVal[0], posVal[1])
                     size = (posVal[2], posVal[3])
                 except:
-                    pos  = None
+                    pos = None
                     size = None
-                # this happens on Windows when mapwindow is minimized when saving workspace
+                # this happens on Windows when mapwindow is minimized when
+                # saving workspace
                 else:
                     if posVal[0] == -32000:
                         pos = None
                         size = None
             else:
-                pos  = None
+                pos = None
                 size = None
-            
+
             extentAttr = display.get('extent', '')
             if extentAttr:
                 # w, s, e, n
                 extent = map(float, extentAttr.split(','))
             else:
                 extent = None
-            
+
             # projection
             node_projection = display.find('projection')
             if node_projection is not None:
-                projection = { 'enabled' : True,
-                               'epsg' : node_projection.get('epsg', ''),
-                               'proj' : self.__getNodeText(node_projection, 'value') }
+                projection = {
+                    'enabled': True, 'epsg': node_projection.get(
+                        'epsg', ''), 'proj': self.__getNodeText(
+                        node_projection, 'value')}
             else:
-                projection = { 'enabled' : False }
-            
-            self.displays.append( {
-                    "name"           : display.get('name'),
-                    "render"         : bool(int(display.get('render', "0"))),
-                    "mode"           : int(display.get('mode', 0)),
-                    "showCompExtent" : bool(int(display.get('showCompExtent', "0"))),
-                    "pos"            : pos,
-                    "size"           : size,
-                    "extent"         : extent,
-                    "tbres"          : display.get('tbres', '0'),
-                    "alignExtent"    : bool(int(display.get('alignExtent', "0"))),
-                    "constrainRes"   : bool(int(display.get('constrainRes', "0"))),
-                    "projection"     : projection,
-                    "viewMode"       : display.get('viewMode', '2d')} )
-            
+                projection = {'enabled': False}
+
+            self.displays.append({
+                "name": display.get('name'),
+                "render": bool(int(display.get('render', "0"))),
+                "mode": int(display.get('mode', 0)),
+                "showCompExtent": bool(int(display.get('showCompExtent', "0"))),
+                "pos": pos,
+                "size": size,
+                "extent": extent,
+                "tbres": display.get('tbres', '0'),
+                "alignExtent": bool(int(display.get('alignExtent', "0"))),
+                "constrainRes": bool(int(display.get('constrainRes', "0"))),
+                "projection": projection,
+                "viewMode": display.get('viewMode', '2d')})
+
             # process all layers/groups in the display
             self.__processLayers(display)
             # process nviz_state
             self.__processNvizState(display)
 
-    def __processLayers(self, node, inGroup = -1):
+    def __processLayers(self, node, inGroup=-1):
         """Process layers/groups of selected display
-        
+
         :param node: display tree node
         :param inGroup: in group -> index of group item otherwise -1
         """
         for item in node.getchildren():
             if item.tag == 'group':
                 # -> group
-                self.layers.append( {
-                        "type"    : 'group',
-                        "name"    : item.get('name', ''),
-                        "checked" : bool(int(item.get('checked', "0"))),
-                        "opacity" : None,
-                        "cmd"     : None,
-                        "group"   : inGroup,
-                        "display" : self.displayIndex,
-                        "vdigit"  : None,
-                        "nviz"    : None})
-                
-                self.__processLayers(item, inGroup = len(self.layers) - 1) # process items in group
-                
+                self.layers.append({
+                    "type": 'group',
+                    "name": item.get('name', ''),
+                    "checked": bool(int(item.get('checked', "0"))),
+                    "opacity": None,
+                    "cmd": None,
+                    "group": inGroup,
+                    "display": self.displayIndex,
+                    "vdigit": None,
+                    "nviz": None})
+
+                self.__processLayers(
+                    item, inGroup=len(
+                        self.layers) - 1)  # process items in group
+
             elif item.tag == 'layer':
                 cmd, selected, vdigit, nviz = self.__processLayer(item)
                 lname = item.get('name', None)
                 if lname and '\\n' in lname:
                     lname = lname.replace('\\n', os.linesep)
-                
-                self.layers.append( {
-                        "type"     : item.get('type', None),
-                        "name"     : lname,
-                        "checked"  : bool(int(item.get('checked', "0"))),
-                        "opacity"  : float(item.get('opacity', '1.0')),
-                        "cmd"      : cmd,
-                        "group"    : inGroup,
-                        "display"  : self.displayIndex,
-                        "selected" : selected,
-                        "vdigit"   : vdigit,
-                        "nviz"     : nviz } )
-            
+
+                self.layers.append({
+                    "type": item.get('type', None),
+                    "name": lname,
+                    "checked": bool(int(item.get('checked', "0"))),
+                    "opacity": float(item.get('opacity', '1.0')),
+                    "cmd": cmd,
+                    "group": inGroup,
+                    "display": self.displayIndex,
+                    "selected": selected,
+                    "vdigit": vdigit,
+                    "nviz": nviz})
+
+            elif item.tag == 'overlay':
+                cmd = self.__processOverlay(item)
+
+                self.overlays.append({
+                    "display": self.displayIndex,
+                    "cmd": cmd})
+
     def __processLayer(self, layer):
         """Process layer item
 
         :param layer: tree node
         """
         cmd = list()
-        
+
         #
         # layer attributes (task) - 2D settings
         #
@@ -246,7 +260,7 @@ class ProcessWorkspaceFile:
             selected = True
         else:
             selected = False
-        
+
         #
         # Vector digitizer settings
         #
@@ -255,7 +269,7 @@ class ProcessWorkspaceFile:
             vdigit = self.__processLayerVdigit(node_vdigit)
         else:
             vdigit = None
-        
+
         #
         # Nviz (3D settings)
         #
@@ -264,9 +278,34 @@ class ProcessWorkspaceFile:
             nviz = self.__processLayerNviz(node_nviz)
         else:
             nviz = None
-        
+
         return (cmd, selected, vdigit, nviz)
 
+    def __processOverlay(self, node_overlay):
+        """
+        Process overlay item
+        :param overlay: tree node
+        """
+        cmd = list()
+
+        cmd.append(node_overlay.get('name', "unknown"))
+
+        # flags
+        for f in node_overlay.findall('flag'):
+            flag = f.get('name', '')
+            if len(flag) > 1:
+                cmd.append('--' + flag)
+            else:
+                cmd.append('-' + flag)
+
+        # parameters
+        for p in node_overlay.findall('parameter'):
+            cmd.append('%s=%s' % (p.get('name', ''),
+                                  self.__filterValue(
+                                      self.__getNodeText(p, 'value'))))
+
+        return cmd
+
     def __processLayerVdigit(self, node_vdigit):
         """Process vector digitizer layer settings
 
@@ -279,12 +318,12 @@ class ProcessWorkspaceFile:
                 vdigit['geomAttr'] = dict()
             type = node.get('type')
             vdigit['geomAttr'][type] = dict()
-            vdigit['geomAttr'][type]['column'] = node.get('column') # required
+            vdigit['geomAttr'][type]['column'] = node.get('column')  # required
             # default map units
             vdigit['geomAttr'][type]['units'] = node.get('units', 'mu')
-        
+
         return vdigit
-    
+
     def __processLayerNviz(self, node_nviz):
         """Process 3D layer settings
 
@@ -308,9 +347,11 @@ class ProcessWorkspaceFile:
             for sec in ('lines', 'points'):
                 nviz['vector'][sec] = {}
             if node_nviz.find('vlines'):
-                self.__processLayerNvizVectorLines(nviz, node_nviz.find('vlines'))
+                self.__processLayerNvizVectorLines(
+                    nviz, node_nviz.find('vlines'))
             if node_nviz.find('vpoints'):
-                self.__processLayerNvizVectorPoints(nviz, node_nviz.find('vpoints'))
+                self.__processLayerNvizVectorPoints(
+                    nviz, node_nviz.find('vpoints'))
 
         return nviz
 
@@ -344,7 +385,8 @@ class ProcessWorkspaceFile:
             tagName = str(node_draw.tag)
             nvizData['surface'][tagName]['all'] = False
             nvizData['surface'][tagName]['mode'] = {}
-            nvizData['surface'][tagName]['mode']['value'] = -1  # to be calculated
+            nvizData['surface'][tagName]['mode'][
+                'value'] = -1  # to be calculated
             nvizData['surface'][tagName]['mode']['desc'] = {}
             nvizData['surface'][tagName]['mode']['desc']['shading'] = \
                 str(node_draw.get('shading', ''))
@@ -425,7 +467,8 @@ class ProcessWorkspaceFile:
                 for vol_type in ('isosurface', 'slice'):
                     nd = node_res.find(vol_type)
                     value = int(self.__getNodeText(nd, 'value'))
-                    nvizData['volume']['draw']['resolution'][vol_type] = {'value': value}
+                    nvizData['volume']['draw']['resolution'][
+                        vol_type] = {'value': value}
             node_shading = node_draw.find('shading')
             if node_shading is not None:
                 nvizData['volume']['draw']['shading'] = {}
@@ -433,7 +476,8 @@ class ProcessWorkspaceFile:
                     nd = node_shading.find(vol_type)
                     value = int(self.__getNodeText(nd, 'value'))
                     desc = self.__getNodeText(nd, 'desc')
-                    nvizData['volume']['draw']['shading'][vol_type] = {'value': value, 'desc': desc}
+                    nvizData['volume']['draw']['shading'][
+                        vol_type] = {'value': value, 'desc': desc}
 
         nvizData['volume']['isosurface'] = []
         for isosurfaceNode in nodeVolume.findall('isosurface'):
@@ -454,13 +498,16 @@ class ProcessWorkspaceFile:
                         isoDict[att]['value'] = float(value)
             inout = isosurfaceNode.find('inout')
             if inout is not None:
-                isoDict['inout'] = {'value': int(float(inout.find('value').text))}
+                isoDict['inout'] = {'value': int(
+                    float(inout.find('value').text))}
             nvizData['volume']['isosurface'].append(isoDict)
-            
+
         nvizData['volume']['slice'] = []
         for sliceNode in nodeVolume.findall('slice'):
             sliceDict = {}
-            sliceDict['transp'] = {'value': int(sliceNode.find('transp').find('value').text)}
+            sliceDict['transp'] = {
+                'value': int(
+                    sliceNode.find('transp').find('value').text)}
             sliceDict['position'] = {}
             for child in sliceNode.find('position'):
                 if child.tag == 'axis':
@@ -468,7 +515,7 @@ class ProcessWorkspaceFile:
                 else:
                     sliceDict['position'][child.tag] = float(child.text)
             nvizData['volume']['slice'].append(sliceDict)
-  
+
         # position
         node_pos = nodeVolume.find('position')
         if node_pos is not None:
@@ -487,14 +534,21 @@ class ProcessWorkspaceFile:
         :param nodeVector: nviz vector points node
         """
         marker = str(nodePoints.get('marker', ''))
-        markerId = list(UserSettings.Get(group='nviz', key='vector',
-                                         subkey=['points', 'marker'], settings_type='internal')).index(marker)
+        markerId = list(
+            UserSettings.Get(
+                group='nviz',
+                key='vector',
+                subkey=[
+                    'points',
+                    'marker'],
+                settings_type='internal')).index(marker)
         nvizData['vector']['points']['marker'] = {'value': markerId}
 
         node_mode = nodePoints.find('mode')
         if node_mode is not None:
             nvizData['vector']['points']['mode'] = {}
-            nvizData['vector']['points']['mode']['type'] = str(node_mode.get('type', 'surface'))
+            nvizData['vector']['points']['mode'][
+                'type'] = str(node_mode.get('type', 'surface'))
             nvizData['vector']['points']['mode']['surface'] = {}
             nvizData['vector']['points']['mode']['surface']['value'] = []
             nvizData['vector']['points']['mode']['surface']['show'] = []
@@ -503,8 +557,8 @@ class ProcessWorkspaceFile:
             for node_map in node_mode.findall('map'):
                 nvizData['vector']['points']['mode']['surface']['value'].append(
                     self.__processLayerNvizNode(node_map, 'name', str))
-                nvizData['vector']['points']['mode']['surface']['show'].append(bool(
-                    self.__processLayerNvizNode(node_map, 'checked', int)))
+                nvizData['vector']['points']['mode']['surface']['show'].append(
+                    bool(self.__processLayerNvizNode(node_map, 'checked', int)))
 
         # color
         self.__processLayerNvizNode(nodePoints, 'color', str,
@@ -525,12 +579,15 @@ class ProcessWorkspaceFile:
         # thematic
         node_thematic = nodePoints.find('thematic')
         thematic = nvizData['vector']['points']['thematic'] = {}
-        thematic['rgbcolumn'] = self.__processLayerNvizNode(node_thematic, 'rgbcolumn', str)
-        thematic['sizecolumn'] = self.__processLayerNvizNode(node_thematic, 'sizecolumn', str)
+        thematic['rgbcolumn'] = self.__processLayerNvizNode(
+            node_thematic, 'rgbcolumn', str)
+        thematic['sizecolumn'] = self.__processLayerNvizNode(
+            node_thematic, 'sizecolumn', str)
         for col in ('rgbcolumn', 'sizecolumn'):
             if thematic[col] == 'None':
                 thematic[col] = None
-        thematic['layer'] = self.__processLayerNvizNode(node_thematic, 'layer', int)
+        thematic['layer'] = self.__processLayerNvizNode(
+            node_thematic, 'layer', int)
         for use in ('usecolor', 'usesize', 'usewidth'):
             if node_thematic.get(use, ''):
                 thematic[use] = int(node_thematic.get(use, '0'))
@@ -544,7 +601,8 @@ class ProcessWorkspaceFile:
         node_mode = nodeLines.find('mode')
         if node_mode is not None:
             nvizData['vector']['lines']['mode'] = {}
-            nvizData['vector']['lines']['mode']['type'] = str(node_mode.get('type', ''))
+            nvizData['vector']['lines']['mode'][
+                'type'] = str(node_mode.get('type', ''))
             nvizData['vector']['lines']['mode']['surface'] = {}
             nvizData['vector']['lines']['mode']['surface']['value'] = []
             nvizData['vector']['lines']['mode']['surface']['show'] = []
@@ -553,8 +611,8 @@ class ProcessWorkspaceFile:
             for node_map in node_mode.findall('map'):
                 nvizData['vector']['lines']['mode']['surface']['value'].append(
                     self.__processLayerNvizNode(node_map, 'name', str))
-                nvizData['vector']['lines']['mode']['surface']['show'].append(bool(
-                    self.__processLayerNvizNode(node_map, 'checked', int)))
+                nvizData['vector']['lines']['mode']['surface']['show'].append(
+                    bool(self.__processLayerNvizNode(node_map, 'checked', int)))
 
         # color
         self.__processLayerNvizNode(nodeLines, 'color', str,
@@ -571,17 +629,20 @@ class ProcessWorkspaceFile:
         # thematic
         node_thematic = nodeLines.find('thematic')
         thematic = nvizData['vector']['lines']['thematic'] = {}
-        thematic['rgbcolumn'] = self.__processLayerNvizNode(node_thematic, 'rgbcolumn', str)
-        thematic['sizecolumn'] = self.__processLayerNvizNode(node_thematic, 'sizecolumn', str)
+        thematic['rgbcolumn'] = self.__processLayerNvizNode(
+            node_thematic, 'rgbcolumn', str)
+        thematic['sizecolumn'] = self.__processLayerNvizNode(
+            node_thematic, 'sizecolumn', str)
         for col in ('rgbcolumn', 'sizecolumn'):
             if thematic[col] == 'None':
                 thematic[col] = None
-        thematic['layer'] = self.__processLayerNvizNode(node_thematic, 'layer', int)
+        thematic['layer'] = self.__processLayerNvizNode(
+            node_thematic, 'layer', int)
         for use in ('usecolor', 'usesize', 'usewidth'):
             if node_thematic.get(use, ''):
                 thematic[use] = int(node_thematic.get(use, '0'))
 
-    def __processLayerNvizNode(self, node, tag, cast, dc = None):
+    def __processLayerNvizNode(self, node, tag, cast, dc=None):
         """Process given tag nviz/vector"""
         node_tag = node.find(tag)
         if node_tag is not None:
@@ -600,7 +661,7 @@ class ProcessWorkspaceFile:
                 dc[tag]['value'] = value
             else:
                 return value
-    
+
     def __processNvizState(self, node):
         """Process tag nviz_state"""
         node_state = node.find('nviz_state')
@@ -613,36 +674,52 @@ class ProcessWorkspaceFile:
         node_view = node_state.find('view')
         view = {}
         iview = {}
-        
+
         node_position = node_view.find('v_position')
         view['position'] = {}
-        view['position']['x'] = self.__processLayerNvizNode(node_position, 'x', float)
-        view['position']['y'] = self.__processLayerNvizNode(node_position, 'y', float)
+        view['position']['x'] = self.__processLayerNvizNode(
+            node_position, 'x', float)
+        view['position']['y'] = self.__processLayerNvizNode(
+            node_position, 'y', float)
         node_persp = node_view.find('persp')
         view['persp'] = {}
         iview['persp'] = {}
-        view['persp']['value'] = self.__processLayerNvizNode(node_persp, 'value', int)
-        view['persp']['step'] = self.__processLayerNvizNode(node_persp, 'step', int)
-        iview['persp']['min'] = self.__processLayerNvizNode(node_persp, 'min', int)
-        iview['persp']['max'] = self.__processLayerNvizNode(node_persp, 'max', int)
+        view['persp']['value'] = self.__processLayerNvizNode(
+            node_persp, 'value', int)
+        view['persp']['step'] = self.__processLayerNvizNode(
+            node_persp, 'step', int)
+        iview['persp']['min'] = self.__processLayerNvizNode(
+            node_persp, 'min', int)
+        iview['persp']['max'] = self.__processLayerNvizNode(
+            node_persp, 'max', int)
         node_height = node_view.find('v_height')
         iview['height'] = {}
-        iview['height']['value'] = self.__processLayerNvizNode(node_height, 'value', int)
-        iview['height']['min'] = self.__processLayerNvizNode(node_height, 'min', int)
-        iview['height']['max'] = self.__processLayerNvizNode(node_height, 'max', int)
+        iview['height']['value'] = self.__processLayerNvizNode(
+            node_height, 'value', int)
+        iview['height']['min'] = self.__processLayerNvizNode(
+            node_height, 'min', int)
+        iview['height']['max'] = self.__processLayerNvizNode(
+            node_height, 'max', int)
         node_twist = node_view.find('twist')
         view['twist'] = {}
         iview['twist'] = {}
-        view['twist']['value'] = self.__processLayerNvizNode(node_twist, 'value', int)
-        iview['twist']['min'] = self.__processLayerNvizNode(node_twist, 'min', int)
-        iview['twist']['max'] = self.__processLayerNvizNode(node_twist, 'max', int)
+        view['twist']['value'] = self.__processLayerNvizNode(
+            node_twist, 'value', int)
+        iview['twist']['min'] = self.__processLayerNvizNode(
+            node_twist, 'min', int)
+        iview['twist']['max'] = self.__processLayerNvizNode(
+            node_twist, 'max', int)
         node_zexag = node_view.find('z-exag')
         view['z-exag'] = {}
         iview['z-exag'] = {}
-        view['z-exag']['value'] = self.__processLayerNvizNode(node_zexag, 'value', float)
-        view['z-exag']['min'] = self.__processLayerNvizNode(node_zexag, 'min', int)
-        view['z-exag']['max'] = self.__processLayerNvizNode(node_zexag, 'max', int)
-        iview['z-exag']['llRatio'] = self.__processLayerNvizNode(node_zexag, 'llRatio', float)
+        view[
+            'z-exag']['value'] = self.__processLayerNvizNode(node_zexag, 'value', float)
+        view[
+            'z-exag']['min'] = self.__processLayerNvizNode(node_zexag, 'min', int)
+        view[
+            'z-exag']['max'] = self.__processLayerNvizNode(node_zexag, 'max', int)
+        iview[
+            'z-exag']['llRatio'] = self.__processLayerNvizNode(node_zexag, 'llRatio', float)
         node_focus = node_view.find('focus')
         iview['focus'] = {}
         iview['focus']['x'] = self.__processLayerNvizNode(node_focus, 'x', int)
@@ -665,12 +742,13 @@ class ProcessWorkspaceFile:
         if node_rot is not None:
             rotation = node_rot.text
             if rotation:
-                iview['rotation'] = [float(item) for item in rotation.split(',')]
+                iview['rotation'] = [float(item)
+                                     for item in rotation.split(',')]
 
         view['background'] = {}
         color = self.__processLayerNvizNode(node_view, 'background_color', str)
         view['background']['color'] = tuple(map(int, color.split(':')))
-        
+
         self.nviz_state['view'] = view
         self.nviz_state['iview'] = iview
         #
@@ -678,63 +756,78 @@ class ProcessWorkspaceFile:
         #
         node_light = node_state.find('light')
         light = {}
-        
+
         node_position = node_light.find('l_position')
         light['position'] = {}
-        light['position']['x'] = self.__processLayerNvizNode(node_position, 'x', float)
-        light['position']['y'] = self.__processLayerNvizNode(node_position, 'y', float)
-        light['position']['z'] = self.__processLayerNvizNode(node_position, 'z', int)
-        
-        light['bright'] = self.__processLayerNvizNode(node_light, 'bright', int) 
-        light['ambient'] = self.__processLayerNvizNode(node_light, 'ambient', int)
+        light['position']['x'] = self.__processLayerNvizNode(
+            node_position, 'x', float)
+        light['position']['y'] = self.__processLayerNvizNode(
+            node_position, 'y', float)
+        light['position']['z'] = self.__processLayerNvizNode(
+            node_position, 'z', int)
+
+        light['bright'] = self.__processLayerNvizNode(
+            node_light, 'bright', int)
+        light['ambient'] = self.__processLayerNvizNode(
+            node_light, 'ambient', int)
         color = self.__processLayerNvizNode(node_light, 'color', str)
         light['color'] = tuple(map(int, color.split(':')))
-        
+
         self.nviz_state['light'] = light
-        
+
         node_constants = node_state.find('constant_planes')
         constants = []
         if node_constants:
             for node_plane in node_constants.findall('plane'):
                 plane = {}
-                plane['color'] = self.__processLayerNvizNode(node_plane, 'color', str)                
-                plane['resolution'] = self.__processLayerNvizNode(node_plane, 'fine_resolution', int)
-                plane['value'] = self.__processLayerNvizNode(node_plane, 'height', int)
+                plane['color'] = self.__processLayerNvizNode(
+                    node_plane, 'color', str)
+                plane['resolution'] = self.__processLayerNvizNode(
+                    node_plane, 'fine_resolution', int)
+                plane['value'] = self.__processLayerNvizNode(
+                    node_plane, 'height', int)
                 plane['object'] = {}
                 constants.append({'constant': plane})
-        self.nviz_state['constants'] = constants    
+        self.nviz_state['constants'] = constants
+
 
 class WriteWorkspaceFile(object):
     """Generic class for writing workspace file"""
+
     def __init__(self, lmgr, file):
-        self.file =  file
+        self.file = file
         self.lmgr = lmgr
         self.indent = 0
-        
+
         # write header
 
-        self.file.write('<?xml version="1.0" encoding="%s"?>\n' % GetDefaultEncoding(forceUTF8 = True))
+        self.file.write(
+            '<?xml version="1.0" encoding="%s"?>\n' %
+            GetDefaultEncoding(
+                forceUTF8=True))
         self.file.write('<!DOCTYPE gxw SYSTEM "grass-gxw.dtd">\n')
         self.file.write('%s<gxw>\n' % (' ' * self.indent))
-        
-        self.indent =+ 4
-        
+
+        self.indent = + 4
+
         # layer manager
         windowPos = self.lmgr.GetPosition()
         windowSize = self.lmgr.GetSize()
-        file.write('%s<layer_manager dim="%d,%d,%d,%d">\n' % (' ' * self.indent,
-                                                              windowPos[0],
-                                                              windowPos[1],
-                                                              windowSize[0],
-                                                              windowSize[1]
-                                                              ))
+        file.write(
+            '%s<layer_manager dim="%d,%d,%d,%d">\n' %
+            (' ' *
+             self.indent,
+             windowPos[0],
+             windowPos[1],
+             windowSize[0],
+             windowSize[1]))
         self.indent += 4
         cwdPath = self.lmgr.GetCwdPath()
         if cwdPath:
             file.write('%s<cwd>%s</cwd>\n' % (' ' * self.indent, cwdPath))
         self.indent -= 4
         file.write('%s</layer_manager>\n' % (' ' * self.indent))
-        
+
         # list of displays
         for page in range(0, self.lmgr.GetLayerNotebook().GetPageCount()):
             dispName = self.lmgr.GetLayerNotebook().GetPageText(page)
@@ -742,14 +835,14 @@ class WriteWorkspaceFile(object):
             region = mapTree.GetMap().GetCurrentRegion()
             compRegion = gcore.region(region3d=True)
             mapdisp = mapTree.GetMapDisplay()
-            
+
             displayPos = mapdisp.GetPosition()
             displaySize = mapdisp.GetSize()
             if mapdisp.toolbars['map'].combo.GetSelection() == 1:
                 viewmode = '3d'
             else:
                 viewmode = '2d'
-            
+
             file.write('%s<display '
                        'name="%s" render="%d" '
                        'mode="%d" showCompExtent="%d" '
@@ -779,84 +872,103 @@ class WriteWorkspaceFile(object):
                                               viewmode
                                               ))
             # projection statusbar info
-            if mapdisp.GetProperty('projection') and \
-                    UserSettings.Get(group='display', key='projection', subkey='proj4'):
+            if mapdisp.GetProperty('projection') and UserSettings.Get(
+                    group='display', key='projection', subkey='proj4'):
                 self.indent += 4
                 file.write('%s<projection' % (' ' * self.indent))
-                epsg = UserSettings.Get(group='display', key='projection', subkey='epsg')
+                epsg = UserSettings.Get(
+                    group='display', key='projection', subkey='epsg')
                 if epsg:
                     file.write(' epsg="%s"' % epsg)
                 file.write('>\n')
-                proj = UserSettings.Get(group='display', key='projection', subkey='proj4')
-                self.indent += 4 
+                proj = UserSettings.Get(
+                    group='display', key='projection', subkey='proj4')
+                self.indent += 4
                 file.write('%s<value>%s</value>\n' % (' ' * self.indent, proj))
                 self.indent -= 4
                 file.write('%s</projection>\n' % (' ' * self.indent))
                 self.indent -= 4
-            
+
             # list of layers
             item = mapTree.GetFirstChild(mapTree.root)[0]
             self.__writeLayer(mapTree, item)
-            
+
             if mapdisp.MapWindow3D is not None:
                 nvizDisp = mapdisp.MapWindow3D
-                self.__writeNvizState(view = nvizDisp.view, iview =  nvizDisp.iview, 
-                                      light = nvizDisp.light, constants = nvizDisp.constants)
-            
+                self.__writeNvizState(
+                    view=nvizDisp.view,
+                    iview=nvizDisp.iview,
+                    light=nvizDisp.light,
+                    constants=nvizDisp.constants)
+
+            # list of map elements
+            item = mapTree.GetFirstChild(mapTree.root)[0]
+            self.__writeOverlay(mapdisp)
+
             file.write('%s</display>\n' % (' ' * self.indent))
-        
-        self.indent =- 4
+
+        self.indent = - 4
         file.write('%s</gxw>\n' % (' ' * self.indent))
 
     def __filterValue(self, value):
         """Make value XML-valid"""
         value = value.replace('<', '<')
         value = value.replace('>', '>')
-        
+        value = value.replace('&', '&')
+
         return value
-    
+
     def __writeLayer(self, mapTree, item):
         """Write bunch of layers to GRASS Workspace XML file"""
         self.indent += 4
         itemSelected = mapTree.GetSelections()
         while item and item.IsOk():
-            type = mapTree.GetLayerInfo(item, key = 'type')
+            type = mapTree.GetLayerInfo(item, key='type')
             if type != 'group':
-                maplayer = mapTree.GetLayerInfo(item, key = 'maplayer')
+                maplayer = mapTree.GetLayerInfo(item, key='maplayer')
             else:
                 maplayer = None
 
             checked = int(item.IsChecked())
             if type == 'command':
-                cmd = mapTree.GetLayerInfo(item, key = 'maplayer').GetCmd(string=True)
-                self.file.write('%s<layer type="%s" name="%s" checked="%d">\n' % \
-                               (' ' * self.indent, type, EncodeString(cmd), checked))
+                cmd = mapTree.GetLayerInfo(
+                    item, key='maplayer').GetCmd(
+                    string=True)
+                self.file.write(
+                    '%s<layer type="%s" name="%s" checked="%d">\n' %
+                    (' ' * self.indent, type, EncodeString(cmd), checked))
                 self.file.write('%s</layer>\n' % (' ' * self.indent))
             elif type == 'group':
                 name = mapTree.GetItemText(item)
-                self.file.write('%s<group name="%s" checked="%d">\n' % \
-                               (' ' * self.indent, EncodeString(name), checked))
+                self.file.write(
+                    '%s<group name="%s" checked="%d">\n' %
+                    (' ' * self.indent, EncodeString(name), checked))
                 self.indent += 4
                 subItem = mapTree.GetFirstChild(item)[0]
                 self.__writeLayer(mapTree, subItem)
                 self.indent -= 4
-                self.file.write('%s</group>\n' % (' ' * self.indent));
+                self.file.write('%s</group>\n' % (' ' * self.indent))
             else:
-                cmd = mapTree.GetLayerInfo(item, key = 'maplayer').GetCmd(string = False)
+                cmd = mapTree.GetLayerInfo(
+                    item, key='maplayer').GetCmd(
+                    string=False)
                 name = mapTree.GetItemText(item).replace(os.linesep, '\\n')
                 opacity = maplayer.GetOpacity()
                 # remove 'opacity' part
                 if opacity < 1:
                     name = name.split('(', -1)[0].strip()
-                self.file.write('%s<layer type="%s" name="%s" checked="%d" opacity="%f">\n' % \
-                                    (' ' * self.indent, type, EncodeString(name), checked, opacity));
-                
+                self.file.write(
+                    '%s<layer type="%s" name="%s" checked="%d" opacity="%f">\n' %
+                    (' ' * self.indent, type, EncodeString(name), checked, opacity))
+
                 self.indent += 4
                 # selected ?
                 if item in itemSelected:
                     self.file.write('%s<selected />\n' % (' ' * self.indent))
                 # layer properties
-                self.file.write('%s<task name="%s">\n' % (' ' * self.indent, cmd[0]))
+                self.file.write(
+                    '%s<task name="%s">\n' %
+                    (' ' * self.indent, cmd[0]))
                 self.indent += 4
                 for key, val in cmd[1].iteritems():
                     if key == 'flags':
@@ -866,18 +978,21 @@ class WriteWorkspaceFile(object):
                     elif val in (True, False):
                         self.file.write('%s<flag name="%s" />\n' %
                                         (' ' * self.indent, key))
-                    else: # parameter
+                    else:  # parameter
                         self.file.write('%s<parameter name="%s">\n' %
                                         (' ' * self.indent, key))
                         self.indent += 4
-                        self.file.write('%s<value>%s</value>\n' %
-                                        (' ' * self.indent, self.__filterValue(val)))
+                        self.file.write(
+                            '%s<value>%s</value>\n' %
+                            (' ' * self.indent, self.__filterValue(val)))
                         self.indent -= 4
-                        self.file.write('%s</parameter>\n' % (' ' * self.indent))
+                        self.file.write(
+                            '%s</parameter>\n' %
+                            (' ' * self.indent))
                 self.indent -= 4
                 self.file.write('%s</task>\n' % (' ' * self.indent))
                 # vector digitizer
-                vdigit = mapTree.GetLayerInfo(item, key = 'vdigit')
+                vdigit = mapTree.GetLayerInfo(item, key='vdigit')
                 if vdigit:
                     self.file.write('%s<vdigit>\n' % (' ' * self.indent))
                     if 'geomAttr' in vdigit:
@@ -886,17 +1001,18 @@ class WriteWorkspaceFile(object):
                             units = ''
                             if val['units'] != 'mu':
                                 units = ' units="%s"' % val['units']
-                            self.file.write('%s<geometryAttribute type="%s" column="%s"%s />\n' % \
-                                                (' ' * self.indent, type, val['column'], units))
+                            self.file.write(
+                                '%s<geometryAttribute type="%s" column="%s"%s />\n' %
+                                (' ' * self.indent, type, val['column'], units))
                         self.indent -= 4
                     self.file.write('%s</vdigit>\n' % (' ' * self.indent))
                 # nviz
-                nviz = mapTree.GetLayerInfo(item, key = 'nviz')
+                nviz = mapTree.GetLayerInfo(item, key='nviz')
                 if nviz:
                     self.file.write('%s<nviz>\n' % (' ' * self.indent))
                     if maplayer.type == 'raster':
                         self.__writeNvizSurface(nviz['surface'])
-                    if maplayer.type == '3d-raster':
+                    if maplayer.type == 'raster_3d':
                         self.__writeNvizVolume(nviz['volume'])
                     elif maplayer.type == 'vector':
                         self.__writeNvizVector(nviz['vector'])
@@ -905,70 +1021,80 @@ class WriteWorkspaceFile(object):
                 self.file.write('%s</layer>\n' % (' ' * self.indent))
             item = mapTree.GetNextSibling(item)
         self.indent -= 4
-        
+
     def __writeNvizSurface(self, data):
         """Save Nviz raster layer properties to workspace
 
         :param data: Nviz layer properties
         """
-        if 'object' not in data: # skip disabled
+        if 'object' not in data:  # skip disabled
             return
         self.indent += 4
         self.file.write('%s<surface>\n' % (' ' * self.indent))
         self.indent += 4
         for attrb in data.iterkeys():
-            if len(data[attrb]) < 1: # skip empty attributes
+            if len(data[attrb]) < 1:  # skip empty attributes
                 continue
             if attrb == 'object':
                 continue
-            
+
             for name in data[attrb].iterkeys():
                 # surface attribute
                 if attrb == 'attribute':
                     if data[attrb][name]['map'] is None:
                         continue
-                    self.file.write('%s<%s name="%s" map="%d">\n' % \
-                                   (' ' * self.indent, attrb, name, data[attrb][name]['map']))
+                    self.file.write(
+                        '%s<%s name="%s" map="%d">\n' %
+                        (' ' * self.indent, attrb, name, data[attrb][name]['map']))
                     self.indent += 4
-                    self.file.write('%s<value>%s</value>\n' % (' ' * self.indent, data[attrb][name]['value']))
+                    self.file.write(
+                        '%s<value>%s</value>\n' %
+                        (' ' * self.indent, data[attrb][name]['value']))
                     self.indent -= 4
                     # end tag
                     self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
 
             # draw mode
             if attrb == 'draw':
-                self.file.write('%s<%s' %(' ' * self.indent, attrb))
+                self.file.write('%s<%s' % (' ' * self.indent, attrb))
                 if 'mode' in data[attrb]:
                     for tag, value in data[attrb]['mode']['desc'].iteritems():
                         self.file.write(' %s="%s"' % (tag, value))
-                self.file.write('>\n') # <draw ...>
+                self.file.write('>\n')  # <draw ...>
 
                 if 'resolution' in data[attrb]:
                     self.indent += 4
                     for type in ('coarse', 'fine'):
-                        self.file.write('%s<resolution type="%s">\n' % (' ' * self.indent, type))
+                        self.file.write(
+                            '%s<resolution type="%s">\n' %
+                            (' ' * self.indent, type))
                         self.indent += 4
-                        self.file.write('%s<value>%d</value>\n' % (' ' * self.indent,
-                                                                   data[attrb]['resolution'][type]))
+                        self.file.write(
+                            '%s<value>%d</value>\n' %
+                            (' ' * self.indent, data[attrb]['resolution'][type]))
                         self.indent -= 4
-                        self.file.write('%s</resolution>\n' % (' ' * self.indent))
+                        self.file.write(
+                            '%s</resolution>\n' %
+                            (' ' * self.indent))
 
                 if 'wire-color' in data[attrb]:
                     self.file.write('%s<wire_color>\n' % (' ' * self.indent))
                     self.indent += 4
-                    self.file.write('%s<value>%s</value>\n' % (' ' * self.indent,
-                                                               data[attrb]['wire-color']['value']))
+                    self.file.write(
+                        '%s<value>%s</value>\n' %
+                        (' ' * self.indent, data[attrb]['wire-color']['value']))
                     self.indent -= 4
                     self.file.write('%s</wire_color>\n' % (' ' * self.indent))
                 self.indent -= 4
-            
+
             # position
             elif attrb == 'position':
-                self.file.write('%s<%s>\n' %(' ' * self.indent, attrb))
+                self.file.write('%s<%s>\n' % (' ' * self.indent, attrb))
                 for tag in ('x', 'y', 'z'):
                     self.indent += 4
-                    self.file.write('%s<%s>%d</%s>\n' % (' ' * self.indent, tag,
-                                                        data[attrb][tag], tag))
+                    self.file.write(
+                        '%s<%s>%d</%s>\n' %
+                        (' ' * self.indent, tag, data[attrb][tag], tag))
                     self.indent -= 4
 
             if attrb != 'attribute':
@@ -1000,10 +1126,13 @@ class WriteWorkspaceFile(object):
                     # surface attribute
                     if data[attrb][name]['map'] is None:
                         continue
-                    self.file.write('%s<%s name="%s" map="%d">\n' %
-                                   (' ' * self.indent, attrb, name, data[attrb][name]['map']))
+                    self.file.write(
+                        '%s<%s name="%s" map="%d">\n' %
+                        (' ' * self.indent, attrb, name, data[attrb][name]['map']))
                     self.indent += 4
-                    self.file.write('%s<value>%s</value>\n' % (' ' * self.indent, data[attrb][name]['value']))
+                    self.file.write(
+                        '%s<value>%s</value>\n' %
+                        (' ' * self.indent, data[attrb][name]['value']))
                     self.indent -= 4
                     # end tag
                     self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
@@ -1018,30 +1147,42 @@ class WriteWorkspaceFile(object):
                         self.file.write('%s<%s>\n' % (' ' * self.indent, att))
                         for type in ('isosurface', 'slice'):
                             self.indent += 4
-                            self.file.write('%s<%s>\n' % (' ' * self.indent, type))
+                            self.file.write(
+                                '%s<%s>\n' %
+                                (' ' * self.indent, type))
                             self.indent += 4
-                            self.file.write('%s<value>%d</value>\n' % (' ' * self.indent,
-                                                                       data[attrb][att][type]['value']))
+                            self.file.write(
+                                '%s<value>%d</value>\n' %
+                                (' ' * self.indent, data[attrb][att][type]['value']))
                             if att == 'shading':
-                                self.file.write('%s<desc>%s</desc>\n' % (' ' * self.indent,
-                                                                         data[attrb][att][type]['desc']))
+                                self.file.write(
+                                    '%s<desc>%s</desc>\n' %
+                                    (' ' * self.indent, data[attrb][att][type]['desc']))
                             self.indent -= 4
-                            self.file.write('%s</%s>\n' % (' ' * self.indent, type))
+                            self.file.write(
+                                '%s</%s>\n' %
+                                (' ' * self.indent, type))
                             self.indent -= 4
                         self.file.write('%s</%s>\n' % (' ' * self.indent, att))
 
                 if 'box' in data[attrb]:
                     self.file.write('%s<box>\n' % (' ' * self.indent))
                     self.indent += 4
-                    self.file.write('%s<enabled>%d</enabled>\n' % (' ' * self.indent, data[attrb]['box']['enabled']))
+                    self.file.write(
+                        '%s<enabled>%d</enabled>\n' %
+                        (' ' * self.indent, data[attrb]['box']['enabled']))
                     self.indent -= 4
                     self.file.write('%s</box>\n' % (' ' * self.indent))
 
                 if 'mode' in data[attrb]:
                     self.file.write('%s<mode>\n' % (' ' * self.indent))
                     self.indent += 4
-                    self.file.write('%s<desc>%s</desc>\n' % (' ' * self.indent, data[attrb]['mode']['desc']))
-                    self.file.write('%s<value>%d</value>\n' % (' ' * self.indent, data[attrb]['mode']['value']))
+                    self.file.write(
+                        '%s<desc>%s</desc>\n' %
+                        (' ' * self.indent, data[attrb]['mode']['desc']))
+                    self.file.write(
+                        '%s<value>%d</value>\n' %
+                        (' ' * self.indent, data[attrb]['mode']['value']))
                     self.indent -= 4
                     self.file.write('%s</mode>\n' % (' ' * self.indent))
                 self.indent -= 4
@@ -1051,8 +1192,15 @@ class WriteWorkspaceFile(object):
                 self.file.write('%s<%s>\n' % (' ' * self.indent, attrb))
                 for tag in ('x', 'y', 'z'):
                     self.indent += 4
-                    self.file.write('%s<%s>%d</%s>\n' % (' ' * self.indent, tag,
-                                                         data[attrb].get(tag, 0), tag))
+                    self.file.write(
+                        '%s<%s>%d</%s>\n' %
+                        (' ' *
+                         self.indent,
+                         tag,
+                         data[attrb].get(
+                             tag,
+                             0),
+                            tag))
                     self.indent -= 4
             if attrb == 'isosurface':
                 for isosurface in data[attrb]:
@@ -1073,11 +1221,15 @@ class WriteWorkspaceFile(object):
                                 except TypeError:  # None
                                     val = ''
                             self.indent += 4
-                            self.file.write(('%s<%s>' % (' ' * self.indent, att)) + val)
+                            self.file.write(
+                                ('%s<%s>' %
+                                 (' ' * self.indent, att)) + val)
                             self.file.write('</%s>\n' % att)
                             self.indent -= 4
                         # end tag
-                        self.file.write('%s</%s>\n' % (' ' * self.indent, name))
+                        self.file.write(
+                            '%s</%s>\n' %
+                            (' ' * self.indent, name))
                         self.indent -= 4
                     self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
 
@@ -1092,11 +1244,15 @@ class WriteWorkspaceFile(object):
                                 continue
                             val = slice_[name][att]
                             self.indent += 4
-                            self.file.write(('%s<%s>' % (' ' * self.indent, att)) + str(val))
+                            self.file.write(
+                                ('%s<%s>' %
+                                 (' ' * self.indent, att)) + str(val))
                             self.file.write('</%s>\n' % att)
                             self.indent -= 4
                         # end tag
-                        self.file.write('%s</%s>\n' % (' ' * self.indent, name))
+                        self.file.write(
+                            '%s</%s>\n' %
+                            (' ' * self.indent, name))
                         self.indent -= 4
                     self.file.write('%s</%s>\n' % (' ' * self.indent, attrb))
             if attrb not in ('attribute', 'isosurface', 'slice'):
@@ -1114,17 +1270,18 @@ class WriteWorkspaceFile(object):
         """
         self.indent += 4
         for attrb in data.iterkeys():
-            if len(data[attrb]) < 1: # skip empty attributes
+            if len(data[attrb]) < 1:  # skip empty attributes
                 continue
 
-            if 'object' not in data[attrb]: # skip disabled
+            if 'object' not in data[attrb]:  # skip disabled
                 continue
             if attrb == 'lines':
                 self.file.write('%s<v%s>\n' % (' ' * self.indent, attrb))
             elif attrb == 'points':
                 markerId = data[attrb]['marker']['value']
-                marker = UserSettings.Get(group = 'nviz', key = 'vector',
-                                          subkey = ['points', 'marker'], settings_type='internal')[markerId]
+                marker = UserSettings.Get(
+                    group='nviz', key='vector', subkey=[
+                        'points', 'marker'], settings_type='internal')[markerId]
                 self.file.write('%s<v%s marker="%s">\n' % (' ' * self.indent,
                                                            attrb,
                                                            marker))
@@ -1133,16 +1290,22 @@ class WriteWorkspaceFile(object):
                 if name in ('object', 'marker'):
                     continue
                 if name == 'mode':
-                    self.file.write('%s<%s type="%s">\n' % (' ' * self.indent, name,
-                                                          data[attrb][name]['type']))
+                    self.file.write(
+                        '%s<%s type="%s">\n' %
+                        (' ' * self.indent, name, data[attrb][name]['type']))
                     if data[attrb][name]['type'] == 'surface':
                         self.indent += 4
-                        for idx, surface in enumerate(data[attrb][name]['surface']['value']):
+                        for idx, surface in enumerate(
+                                data[attrb][name]['surface']['value']):
                             checked = data[attrb][name]['surface']['show'][idx]
                             self.file.write('%s<map>\n' % (' ' * self.indent))
                             self.indent += 4
-                            self.file.write('%s<name>%s</name>\n' % (' ' * self.indent, surface))
-                            self.file.write('%s<checked>%s</checked>\n' % (' ' * self.indent, int(checked)))
+                            self.file.write(
+                                '%s<name>%s</name>\n' %
+                                (' ' * self.indent, surface))
+                            self.file.write(
+                                '%s<checked>%s</checked>\n' %
+                                (' ' * self.indent, int(checked)))
                             self.indent -= 4
                             self.file.write('%s</map>\n' % (' ' * self.indent))
                         self.indent -= 4
@@ -1151,7 +1314,9 @@ class WriteWorkspaceFile(object):
                     self.file.write('%s<%s ' % (' ' * self.indent, name))
                     for key in data[attrb][name].iterkeys():
                         if key.startswith('use'):
-                            self.file.write('%s="%s" ' % (key, int(data[attrb][name][key])))
+                            self.file.write(
+                                '%s="%s" ' %
+                                (key, int(data[attrb][name][key])))
                     self.file.write('>\n')
                     self.indent += 4
                     for key, value in data[attrb][name].iteritems():
@@ -1159,13 +1324,17 @@ class WriteWorkspaceFile(object):
                             continue
                         if value is None:
                             value = ''
-                        self.file.write('%s<%s>%s</%s>\n' % (' ' * self.indent, key, value, key))
+                        self.file.write(
+                            '%s<%s>%s</%s>\n' %
+                            (' ' * self.indent, key, value, key))
                     self.indent -= 4
                     self.file.write('%s</%s>\n' % (' ' * self.indent, name))
                 else:
                     self.file.write('%s<%s>\n' % (' ' * self.indent, name))
                     self.indent += 4
-                    self.file.write('%s<value>%s</value>\n' % (' ' * self.indent, data[attrb][name]['value']))
+                    self.file.write(
+                        '%s<value>%s</value>\n' %
+                        (' ' * self.indent, data[attrb][name]['value']))
                     self.indent -= 4
                     self.file.write('%s</%s>\n' % (' ' * self.indent, name))
             self.indent -= 4
@@ -1191,59 +1360,91 @@ class WriteWorkspaceFile(object):
         # position
         self.file.write('%s<v_position>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<x>%.2f</x>\n' % (' ' * self.indent, view['position']['x']))
-        self.file.write('%s<y>%.2f</y>\n' % (' ' * self.indent, view['position']['y']))
+        self.file.write(
+            '%s<x>%.2f</x>\n' %
+            (' ' * self.indent, view['position']['x']))
+        self.file.write(
+            '%s<y>%.2f</y>\n' %
+            (' ' * self.indent, view['position']['y']))
         self.indent -= 4
         self.file.write('%s</v_position>\n' % (' ' * self.indent))
         # perspective
         self.file.write('%s<persp>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<value>%d</value>\n' % (' ' * self.indent, view['persp']['value']))
-        self.file.write('%s<step>%d</step>\n' % (' ' * self.indent, view['persp']['step']))
-        self.file.write('%s<min>%d</min>\n' % (' ' * self.indent, iview['persp']['min']))
-        self.file.write('%s<max>%d</max>\n' % (' ' * self.indent, iview['persp']['max']))
+        self.file.write('%s<value>%d</value>\n' %
+                        (' ' * self.indent, view['persp']['value']))
+        self.file.write('%s<step>%d</step>\n' %
+                        (' ' * self.indent, view['persp']['step']))
+        self.file.write('%s<min>%d</min>\n' %
+                        (' ' * self.indent, iview['persp']['min']))
+        self.file.write('%s<max>%d</max>\n' %
+                        (' ' * self.indent, iview['persp']['max']))
         self.indent -= 4
         self.file.write('%s</persp>\n' % (' ' * self.indent))
         # height
         self.file.write('%s<v_height>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<value>%d</value>\n' % (' ' * self.indent, iview['height']['value']))
-        self.file.write('%s<min>%d</min>\n' % (' ' * self.indent, iview['height']['min']))
-        self.file.write('%s<max>%d</max>\n' % (' ' * self.indent, iview['height']['max']))
+        self.file.write('%s<value>%d</value>\n' %
+                        (' ' * self.indent, iview['height']['value']))
+        self.file.write('%s<min>%d</min>\n' %
+                        (' ' * self.indent, iview['height']['min']))
+        self.file.write('%s<max>%d</max>\n' %
+                        (' ' * self.indent, iview['height']['max']))
         self.indent -= 4
         self.file.write('%s</v_height>\n' % (' ' * self.indent))
         # twist
         self.file.write('%s<twist>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<value>%d</value>\n' % (' ' * self.indent, view['twist']['value']))
-        self.file.write('%s<min>%d</min>\n' % (' ' * self.indent, iview['twist']['min']))
-        self.file.write('%s<max>%d</max>\n' % (' ' * self.indent, iview['twist']['max']))
+        self.file.write('%s<value>%d</value>\n' %
+                        (' ' * self.indent, view['twist']['value']))
+        self.file.write('%s<min>%d</min>\n' %
+                        (' ' * self.indent, iview['twist']['min']))
+        self.file.write('%s<max>%d</max>\n' %
+                        (' ' * self.indent, iview['twist']['max']))
         self.indent -= 4
         self.file.write('%s</twist>\n' % (' ' * self.indent))
         # z-exag
         self.file.write('%s<z-exag>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<value>%.2f</value>\n' % (' ' * self.indent, view['z-exag']['value']))
-        self.file.write('%s<min>%d</min>\n' % (' ' * self.indent, view['z-exag']['min']))
-        self.file.write('%s<max>%d</max>\n' % (' ' * self.indent, view['z-exag']['max']))
-        self.file.write('%s<llRatio>%.2f</llRatio>\n' % (' ' * self.indent, iview['z-exag']['llRatio']))
+        self.file.write('%s<value>%.2f</value>\n' %
+                        (' ' * self.indent, view['z-exag']['value']))
+        self.file.write('%s<min>%d</min>\n' %
+                        (' ' * self.indent, view['z-exag']['min']))
+        self.file.write('%s<max>%d</max>\n' %
+                        (' ' * self.indent, view['z-exag']['max']))
+        self.file.write('%s<llRatio>%.2f</llRatio>\n' %
+                        (' ' * self.indent, iview['z-exag']['llRatio']))
         self.indent -= 4
         self.file.write('%s</z-exag>\n' % (' ' * self.indent))
         # focus (look here)
         self.file.write('%s<focus>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<x>%d</x>\n' % (' ' * self.indent, iview['focus']['x']))
-        self.file.write('%s<y>%d</y>\n' % (' ' * self.indent, iview['focus']['y']))
-        self.file.write('%s<z>%d</z>\n' % (' ' * self.indent, iview['focus']['z']))
+        self.file.write(
+            '%s<x>%d</x>\n' %
+            (' ' * self.indent, iview['focus']['x']))
+        self.file.write(
+            '%s<y>%d</y>\n' %
+            (' ' * self.indent, iview['focus']['y']))
+        self.file.write(
+            '%s<z>%d</z>\n' %
+            (' ' * self.indent, iview['focus']['z']))
         self.indent -= 4
         self.file.write('%s</focus>\n' % (' ' * self.indent))
         # rotation
-        rotation = ','.join([str(i) for i in iview['rotation']]) if iview.get('rotation', '') else ''
-        self.file.write('%s<rotation>%s</rotation>\n' % (' ' * self.indent, rotation))
+        rotation = ','.join(
+            [str(i) for i in iview['rotation']]) if iview.get(
+            'rotation', '') else ''
+        self.file.write(
+            '%s<rotation>%s</rotation>\n' %
+            (' ' * self.indent, rotation))
 
         # background
-        self.__writeTagWithValue('background_color', view['background']['color'][:3], format = 'd:%d:%d')
-        
+        self.__writeTagWithValue(
+            'background_color',
+            view['background']['color'][
+                :3],
+            format='d:%d:%d')
+
         self.indent -= 4
         self.file.write('%s</view>\n' % (' ' * self.indent))
         #
@@ -1254,9 +1455,15 @@ class WriteWorkspaceFile(object):
         # position
         self.file.write('%s<l_position>\n' % (' ' * self.indent))
         self.indent += 4
-        self.file.write('%s<x>%.2f</x>\n' % (' ' * self.indent, light['position']['x']))
-        self.file.write('%s<y>%.2f</y>\n' % (' ' * self.indent, light['position']['y']))
-        self.file.write('%s<z>%d</z>\n' % (' ' * self.indent, light['position']['z']))
+        self.file.write(
+            '%s<x>%.2f</x>\n' %
+            (' ' * self.indent, light['position']['x']))
+        self.file.write(
+            '%s<y>%.2f</y>\n' %
+            (' ' * self.indent, light['position']['y']))
+        self.file.write(
+            '%s<z>%d</z>\n' %
+            (' ' * self.indent, light['position']['z']))
         self.indent -= 4
         self.file.write('%s</l_position>\n' % (' ' * self.indent))
         # bright
@@ -1264,8 +1471,8 @@ class WriteWorkspaceFile(object):
         # ambient
         self.__writeTagWithValue('ambient', light['ambient'])
         # color
-        self.__writeTagWithValue('color', light['color'][:3], format = 'd:%d:%d')
-        
+        self.__writeTagWithValue('color', light['color'][:3], format='d:%d:%d')
+
         self.indent -= 4
         self.file.write('%s</light>\n' % (' ' * self.indent))
         #
@@ -1277,21 +1484,25 @@ class WriteWorkspaceFile(object):
             for idx, plane in enumerate(constants):
                 self.file.write('%s<plane>\n' % (' ' * self.indent))
                 self.indent += 4
-                self.__writeTagWithValue('height', constants[idx]['constant']['value'])
-                self.__writeTagWithValue('fine_resolution', constants[idx]['constant']['resolution'])
-                self.__writeTagWithValue('color', constants[idx]['constant']['color'], format = 's')
+                self.__writeTagWithValue(
+                    'height', constants[idx]['constant']['value'])
+                self.__writeTagWithValue(
+                    'fine_resolution',
+                    constants[idx]['constant']['resolution'])
+                self.__writeTagWithValue(
+                    'color', constants[idx]['constant']['color'], format='s')
                 self.indent -= 4
                 self.file.write('%s</plane>\n' % (' ' * self.indent))
             self.indent -= 4
             self.file.write('%s</constant_planes>\n' % (' ' * self.indent))
         self.indent -= 4
-        
+
         self.file.write('%s</nviz_state>\n' % (' ' * self.indent))
         self.indent -= 4
-    
-    def __writeTagWithValue(self, tag, data, format = 'd'):
+
+    def __writeTagWithValue(self, tag, data, format='d'):
         """Helper function for writing pair tag
-        
+
         :param tag: written tag
         :param data: written data
         :param format: conversion type
@@ -1302,8 +1513,70 @@ class WriteWorkspaceFile(object):
         self.file.write(('<value>%' + format + '</value>\n') % data)
         self.indent -= 4
         self.file.write('%s</%s>\n' % (' ' * self.indent, tag))
-        
+
+    def __writeOverlay(self, mapdisp):
+        """Function for writing map elements (barscale, northarrow etc.)
+        """
+        disp_size = mapdisp.GetMapWindow().GetClientSize()
+        for overlay in mapdisp.decorations.values():
+            self.__writeOverlayParams(disp_size, overlay.cmd, overlay.coords)
+
+    def __writeOverlayParams(self, disp_size, cmd, coord_px):
+        """
+        :param mapdisp: mapdisplay
+        :param cmd: d.* command with flags and parameters
+        """
+        # Canvas width = display width minus 1 px on both sides
+        cnvs_w = float(disp_size[0])
+        # Canvas height = display height minus 1 px on bottom and height of toolbar
+        cnvs_h = float(disp_size[1])
+
+        x_prcn = round(coord_px[0] / cnvs_w * 100, 1)
+        y_prcn = 100 - round(coord_px[1] / cnvs_h * 100, 1)
+        self.indent += 4
+        self.file.write('%s<overlay name="%s">\n' % (' ' * self.indent, cmd[0]))
+        self.indent += 4
+        for prm in cmd[1:]:
+            if prm.startswith('-'):
+                flags = []
+                if prm.startswith('--'):
+                    flags.append(prm[2:])
+                else:
+                    flags = list(prm[1:])
+                for f in flags:
+                    self.file.write('%s<flag name="%s" />\n' % (' ' * self.indent, f))
+
+            elif prm.startswith("at="):
+                # legend "at" argument takes 4 numbers not 2
+                if cmd[0] == "d.legend":
+                    leg_coord_prcn = prm.split("=", 1)[1].split(",")
+                    leg_w = float(leg_coord_prcn[3]) - float(leg_coord_prcn[2])
+                    leg_h = float(leg_coord_prcn[1]) - float(leg_coord_prcn[0])
+                    self.file.write('%s<parameter name="at">\n' % (' ' * self.indent))
+                    self.indent += 4
+                    self.file.write('%s<value>%.1f,%.1f,%.1f,%.1f</value>\n' % (' ' * self.indent,
+                                    y_prcn - leg_h, y_prcn, x_prcn, x_prcn + leg_w))
+                    self.indent -= 4
+                    self.file.write('%s</parameter>\n' % (' ' * self.indent))
+                else:
+                    self.file.write('%s<parameter name="at">\n' % (' ' * self.indent))
+                    self.indent += 4
+                    self.file.write('%s<value>%.1f,%.1f</value>\n' % (' ' * self.indent, x_prcn, y_prcn))
+                    self.indent -= 4
+                    self.file.write('%s</parameter>\n' % (' ' * self.indent))
+            else:
+                self.file.write('%s<parameter name="%s">\n' % (' ' * self.indent, prm.split("=", 1)[0]))
+                self.indent += 4
+                self.file.write('%s<value>%s</value>\n' % (' ' * self.indent, prm.split("=", 1)[1]))
+                self.indent -= 4
+                self.file.write('%s</parameter>\n' % (' ' * self.indent))
+        self.indent -= 4
+        self.file.write('%s</overlay>\n' % (' ' * self.indent))
+        self.indent -= 4
+
+
 class ProcessGrcFile(object):
+
     def __init__(self, filename):
         """Process GRC file"""
         self.filename = filename
@@ -1330,26 +1603,34 @@ class ProcessGrcFile(object):
         try:
             file = open(self.filename, "r")
         except IOError:
-            wx.MessageBox(parent=parent,
-                          message=_("Unable to open file <%s> for reading.") % self.filename,
-                          caption=_("Error"), style=wx.OK | wx.ICON_ERROR)
+            wx.MessageBox(
+                parent=parent,
+                message=_("Unable to open file <%s> for reading.") %
+                self.filename,
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR)
             return []
 
         line_id = 1
         for line in file.readlines():
             self.process_line(line.rstrip('\n'), line_id)
-            line_id +=1
+            line_id += 1
 
         file.close()
 
         if self.num_error > 0:
-            wx.MessageBox(parent=parent,
-                          message=_("Some lines were skipped when reading settings "
-                                    "from file <%(file)s>.\nSee 'Command output' window for details.\n\n"
-                                    "Number of skipped lines: %(line)d") % \
-                                        { 'file' : self.filename, 'line' : self.num_error },
-                          caption=_("Warning"), style=wx.OK | wx.ICON_EXCLAMATION)
-            parent._gconsole.WriteLog('Map layers loaded from GRC file <%s>' % self.filename)
+            wx.MessageBox(
+                parent=parent,
+                message=_(
+                    "Some lines were skipped when reading settings "
+                    "from file <%(file)s>.\nSee 'Command output' window for details.\n\n"
+                    "Number of skipped lines: %(line)d") %
+                {'file': self.filename, 'line': self.num_error},
+                caption=_("Warning"),
+                style=wx.OK | wx.ICON_EXCLAMATION)
+            parent._gconsole.WriteLog(
+                'Map layers loaded from GRC file <%s>' %
+                self.filename)
             parent._gconsole.WriteLog('Skipped lines:\n%s' % self.error)
 
         return self.layers
@@ -1360,21 +1641,21 @@ class ProcessGrcFile(object):
         if element == 'Group':
             self.groupName = self._get_value(line)
             self.layers.append({
-                    "type"    : 'group',
-                    "name"    : self.groupName,
-                    "checked" : None,
-                    "opacity" : None,
-                    "cmd"     : None,
-                    "group"   : self.inGroup,
-                    "display" : 0 })
+                "type": 'group',
+                "name": self.groupName,
+                "checked": None,
+                "opacity": None,
+                "cmd": None,
+                "group": self.inGroup,
+                "display": 0})
             self.inGroup = True
 
         elif element == '_check':
-            if int(self._get_value(line)) ==  1:
+            if int(self._get_value(line)) == 1:
                 self.layers[-1]['checked'] = True
             else:
                 self.layers[-1]['checked'] = False
-            
+
         elif element == 'End':
             if self.inRaster:
                 self.inRaster = False
@@ -1384,7 +1665,7 @@ class ProcessGrcFile(object):
                 self.inGroup = False
             elif self.inGridline:
                 self.inGridline = False
-        
+
         elif element == 'opacity':
             self.layers[-1]['opacity'] = float(self._get_value(line))
 
@@ -1392,26 +1673,26 @@ class ProcessGrcFile(object):
         elif element == 'Raster':
             self.inRaster = True
             self.layers.append({
-                    "type"    : 'raster',
-                    "name"    : self._get_value(line),
-                    "checked" : None,
-                    "opacity" : None,
-                    "cmd"     : ['d.rast'],
-                    "group"   : self.inGroup,
-                    "display" : 0})
+                "type": 'raster',
+                "name": self._get_value(line),
+                "checked": None,
+                "opacity": None,
+                "cmd": ['d.rast'],
+                "group": self.inGroup,
+                "display": 0})
 
         elif element == 'map' and self.inRaster:
             self.layers[-1]['cmd'].append('map=%s' % self._get_value(line))
-            
+
         elif element == 'overlay' and self.inRaster:
             if int(self._get_value(line)) == 1:
                 self.layers[-1]['cmd'].append('-o')
-            
+
         elif element == 'rastquery' and self.inRaster:
             value = self._get_value(line)
             if value != '':
                 self.layers[-1]['cmd'].append('catlist=%s' % value)
-            
+
         elif element == 'bkcolor' and self.inRaster:
             value = self._get_value(line)
             if value != '':
@@ -1421,17 +1702,17 @@ class ProcessGrcFile(object):
         elif element == 'Vector':
             self.inVector = True
             self.layers.append({
-                    "type"    : 'vector',
-                    "name"    : self._get_value(line),
-                    "checked" : None,
-                    "opacity" : None,
-                    "cmd"     : ['d.vect'],
-                    "group"   : self.inGroup,
-                    "display" : 0})
+                "type": 'vector',
+                "name": self._get_value(line),
+                "checked": None,
+                "opacity": None,
+                "cmd": ['d.vect'],
+                "group": self.inGroup,
+                "display": 0})
 
         elif element == 'vector' and self.inVector:
             self.layers[-1]['cmd'].append('map=%s' % self._get_value(line))
-                
+
         elif element in ('display_shape',
                          'display_cat',
                          'display_topo',
@@ -1443,11 +1724,12 @@ class ProcessGrcFile(object):
                          'type_centroid',
                          'type_area',
                          'type_face') and self.inVector:
-            
+
             if int(self._get_value(line)) == 1:
                 name = element.split('_')[0]
                 type = element.split('_')[1]
-                paramId = self._get_cmd_param_index(self.layers[-1]['cmd'], name)
+                paramId = self._get_cmd_param_index(
+                    self.layers[-1]['cmd'], name)
                 if paramId == -1:
                     self.layers[-1]['cmd'].append('%s=%s' % (name, type))
                 else:
@@ -1458,8 +1740,8 @@ class ProcessGrcFile(object):
                          'lcolor') and self.inVector:
             value = self._get_value(line)
             if value != '':
-                self.layers[-1]['cmd'].append('%s=%s' % (element,
-                                                         self._color_name_to_rgb(value)))
+                self.layers[-1]['cmd'].append('%s=%s' %
+                                              (element, self._color_name_to_rgb(value)))
 
         elif element == 'rdmcolor' and self.inVector:
             if int(self._get_value(line)) == 1:
@@ -1482,7 +1764,7 @@ class ProcessGrcFile(object):
             if value != '':
                 self.layers[-1]['cmd'].append('%s=%s' % (element,
                                                          value))
-        
+
         elif element == 'lwidth':
             value = self._get_value(line)
             if value != '':
@@ -1492,7 +1774,7 @@ class ProcessGrcFile(object):
             value = self._get_value(line)
             if value != '':
                 self.layers[-1]['cmd'].append('llayer=%s' % value)
-                                        
+
         elif element == 'attribute':
             value = self._get_value(line)
             if value != '':
@@ -1507,28 +1789,31 @@ class ProcessGrcFile(object):
         elif element == 'gridline':
             self.inGridline = True
             self.layers.append({
-                    "type"    : 'grid',
-                    "name"    : self._get_value(line),
-                    "checked" : None,
-                    "opacity" : None,
-                    "cmd"     : ['d.grid'],
-                    "group"   : self.inGroup,
-                    "display" : 0})
+                "type": 'grid',
+                "name": self._get_value(line),
+                "checked": None,
+                "opacity": None,
+                "cmd": ['d.grid'],
+                "group": self.inGroup,
+                "display": 0})
 
         elif element == 'gridcolor':
             value = self._get_value(line)
             if value != '':
-                self.layers[-1]['cmd'].append('color=%s' % self._color_name_to_rgb(value))
+                self.layers[-1]['cmd'].append('color=%s' %
+                                              self._color_name_to_rgb(value))
 
         elif element == 'gridborder':
             value = self._get_value(line)
             if value != '':
-                self.layers[-1]['cmd'].append('bordercolor=%s' % self._color_name_to_rgb(value))
+                self.layers[-1]['cmd'].append('bordercolor=%s' %
+                                              self._color_name_to_rgb(value))
 
         elif element == 'textcolor':
             value = self._get_value(line)
             if value != '':
-                self.layers[-1]['cmd'].append('textcolor=%s' % self._color_name_to_rgb(value))
+                self.layers[-1]['cmd'].append('textcolor=%s' %
+                                              self._color_name_to_rgb(value))
 
         elif element in ('gridsize',
                          'gridorigin'):
@@ -1540,17 +1825,17 @@ class ProcessGrcFile(object):
             value = self._get_value(line)
             if value != '':
                 self.layers[-1]['cmd'].append('%s=%s' % (element, value))
-        
+
         elif element == 'griddraw':
             value = self._get_value(line)
             if value == '0':
                 self.layers[-1]['cmd'].append('-n')
-                
+
         elif element == 'gridgeo':
             value = self._get_value(line)
             if value == '1':
                 self.layers[-1]['cmd'].append('-g')
-        
+
         elif element == 'borderdraw':
             value = self._get_value(line)
             if value == '0':
@@ -1560,7 +1845,7 @@ class ProcessGrcFile(object):
             value = self._get_value(line)
             if value == '0':
                 self.layers[-1]['cmd'].append('-t')
-        
+
         else:
             self.error += _(' row %d:') % line_id + line + os.linesep
             self.num_error += 1
diff --git a/gui/wxpython/core/ws.py b/gui/wxpython/core/ws.py
index 8742ada..1332f8b 100644
--- a/gui/wxpython/core/ws.py
+++ b/gui/wxpython/core/ws.py
@@ -9,7 +9,7 @@ Classes:
  - ws::RenderWMSMgr
  - ws::GDALRasterMerger
 
-(C) 2012 by the GRASS Development Team
+(C) 2012-2015 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -18,23 +18,24 @@ This program is free software under the GNU General Public License
 """
 import sys
 import copy
+import time
 
 import wx
 from wx.lib.newevent import NewEvent
 
 from grass.script.utils import try_remove
 from grass.script import core as grass
+from grass.exceptions import CalledModuleError
 
-from core          import utils
-from core.debug    import Debug
-
-from core.gconsole import CmdThread, GStderr, EVT_CMD_DONE, EVT_CMD_OUTPUT
+from core import utils
+from core.debug import Debug
+from core.gthread import gThread
 from core.utils import _
 
 try:
     haveGdal = True
     from osgeo import gdal
-    from osgeo import gdalconst 
+    from osgeo import gdalconst
 except ImportError:
     haveGdal = False
 
@@ -44,9 +45,10 @@ from grass.pydispatch.signal import Signal
 class RenderWMSMgr(wx.EvtHandler):
     """Fetch and prepare WMS data for rendering.
     """
-    def __init__(self, layer, mapfile, maskfile):
+
+    def __init__(self, layer, env):
         if not haveGdal:
-            sys.stderr.write(_("Unable to load GDAL Python bindings.\n"\
+            sys.stderr.write(_("Unable to load GDAL Python bindings.\n"
                                "WMS layers can not be displayed without the bindings.\n"))
 
         self.layer = layer
@@ -54,25 +56,20 @@ class RenderWMSMgr(wx.EvtHandler):
         wx.EvtHandler.__init__(self)
 
         # thread for d.wms commands
-        self.thread = CmdThread(self)
-        self.Bind(EVT_CMD_DONE, self.OnDataFetched)
+        self.thread = gThread()
 
+        self._startTime = None
         self.downloading = False
         self.renderedRegion = None
         self.updateMap = True
         self.fetched_data_cmd = None
 
-        self.cmdStdErr = GStderr(self)
-
-        self.mapfile = mapfile
-        self.maskfile = maskfile
         self.tempMap = grass.tempfile()
         self.dstSize = {}
- 
-        self.Bind(EVT_CMD_OUTPUT, self.OnCmdOutput)
-        
+
         self.dataFetched = Signal('RenderWMSMgr.dataFetched')
         self.updateProgress = Signal('RenderWMSMgr.updateProgress')
+        self.renderingFailed = Signal('RenderWMSMgr.renderingFailed')
 
     def __del__(self):
         try_remove(self.tempMap)
@@ -87,6 +84,9 @@ class RenderWMSMgr(wx.EvtHandler):
         if not haveGdal:
             return
 
+        Debug.msg(1, "RenderWMSMgr.Render(%s): force=%d img=%s" %
+                  (self.layer, self.layer.forceRender, self.layer.mapfile))
+
         env = copy.copy(env)
         self.dstSize['cols'] = int(env["GRASS_RENDER_WIDTH"])
         self.dstSize['rows'] = int(env["GRASS_RENDER_HEIGHT"])
@@ -95,7 +95,7 @@ class RenderWMSMgr(wx.EvtHandler):
         self._fitAspect(region, self.dstSize)
 
         self.updateMap = True
-        fetchData = False
+        fetchData = True  # changed to True when calling Render()
         zoomChanged = False
 
         if self.renderedRegion is None or \
@@ -110,7 +110,7 @@ class RenderWMSMgr(wx.EvtHandler):
 
             for c in ['e-w resol', 'n-s resol']:
                 if self.renderedRegion and \
-                    region[c] != self.renderedRegion[c]:
+                        region[c] != self.renderedRegion[c]:
                     zoomChanged = True
                     break
 
@@ -118,35 +118,36 @@ class RenderWMSMgr(wx.EvtHandler):
             self.fetched_data_cmd = None
             self.renderedRegion = region
 
-            try_remove(self.mapfile)
+            try_remove(self.layer.mapfile)
             try_remove(self.tempMap)
 
             self.currentPid = self.thread.GetId()
-            self.thread.abort()
+            # self.thread.Terminate()
             self.downloading = True
 
             self.fetching_cmd = cmd
-            cmdList = utils.CmdTupleToList(cmd)
-
-            if Debug.GetLevel() < 3:
-                cmdList.append('--quiet')
 
             env["GRASS_RENDER_FILE"] = self.tempMap
             env["GRASS_REGION"] = self._createRegionStr(region)
 
-            self.thread.RunCmd(cmdList, env=env, stderr=self.cmdStdErr)
+            cmd_render = copy.deepcopy(cmd)
+            cmd_render[1]['quiet'] = True  # be quiet
 
-    def OnCmdOutput(self, event):
-        """Print cmd output according to debug level.
-        """
-        if Debug.GetLevel() == 0:
-            if event.type == 'error':
-                sys.stderr.write(event.text)
-                sys.stderr.flush()
-        else:
-            Debug.msg(1, event.text)
+            self._startTime = time.time()
+            self.thread.Run(callable=self._render, cmd=cmd_render, env=env,
+                            ondone=self.OnRenderDone)
+            self.layer.forceRender = False
 
-    def OnDataFetched(self, event):
+        self.updateProgress.emit(layer=self.layer)
+
+    def _render(self, cmd, env):
+        try:
+            return grass.run_command(cmd[0], env=env, **cmd[1])
+        except CalledModuleError as e:
+            grass.error(e)
+            return 1
+
+    def OnRenderDone(self, event):
         """Fetch data
         """
         if event.pid != self.currentPid:
@@ -158,20 +159,31 @@ class RenderWMSMgr(wx.EvtHandler):
             self.fetched_data_cmd = None
             return
 
-        self.mapMerger = GDALRasterMerger(targetFile = self.mapfile, region = self.renderedRegion,
-                                          bandsNum = 3, gdalDriver = 'PNM', fillValue = 0)
-        self.mapMerger.AddRasterBands(self.tempMap, {1 : 1, 2 : 2, 3 : 3})
+        self.mapMerger = GDALRasterMerger(
+            targetFile=self.layer.mapfile,
+            region=self.renderedRegion,
+            bandsNum=3,
+            gdalDriver='PNM',
+            fillValue=0)
+        self.mapMerger.AddRasterBands(self.tempMap, {1: 1, 2: 2, 3: 3})
         del self.mapMerger
 
-        self.maskMerger = GDALRasterMerger(targetFile = self.maskfile, region = self.renderedRegion,
-                                           bandsNum = 1, gdalDriver = 'PNM', fillValue = 0)
+        self.maskMerger = GDALRasterMerger(
+            targetFile=self.layer.maskfile,
+            region=self.renderedRegion,
+            bandsNum=1,
+            gdalDriver='PNM',
+            fillValue=0)
         #{4 : 1} alpha channel (4) to first and only channel (1) in mask
-        self.maskMerger.AddRasterBands(self.tempMap, {4 : 1}) 
+        self.maskMerger.AddRasterBands(self.tempMap, {4: 1})
         del self.maskMerger
 
         self.fetched_data_cmd = self.fetching_cmd
 
-        self.dataFetched.emit()
+        Debug.msg(1, "RenderWMSMgr.OnRenderDone(%s): ret=%d time=%f" %
+                  (self.layer, event.ret, time.time() - self._startTime))
+
+        self.dataFetched.emit(layer=self.layer)
 
     def _getRegionDict(self, env):
         """Parse string from GRASS_REGION env variable into dict.
@@ -206,7 +218,7 @@ class RenderWMSMgr(wx.EvtHandler):
         return regionStr
 
     def IsDownloading(self):
-        """Is it downloading any data from WMS server? 
+        """Is it downloading any data from WMS server?
         """
         return self.downloading
 
@@ -216,7 +228,7 @@ class RenderWMSMgr(wx.EvtHandler):
         if region['n-s resol'] > region['e-w resol']:
             delta = region['n-s resol'] * size['cols'] / 2
 
-            center = (region['east'] - region['west'])/2
+            center = (region['east'] - region['west']) / 2
 
             region['east'] = center + delta + region['west']
             region['west'] = center - delta + region['west']
@@ -225,16 +237,21 @@ class RenderWMSMgr(wx.EvtHandler):
         else:
             delta = region['e-w resol'] * size['rows'] / 2
 
-            center = (region['north'] - region['south'])/2 
+            center = (region['north'] - region['south']) / 2
 
             region['north'] = center + delta + region['south']
             region['south'] = center - delta + region['south']
             region['n-s resol'] = region['e-w resol']
 
     def Abort(self):
-        """Abort process"""
+        """Abort rendering process"""
+        Debug.msg(1, "RenderWMSMgr({}).Abort()".format(self.layer))
+        self.thread.Terminate()
+
+        # force rendering layer next time
+        self.layer.forceRender = True
         self.updateMap = False
-        self.thread.abort(abortall = True)        
+        self.thread.Terminate(False)
 
 
 class GDALRasterMerger:
@@ -242,7 +259,9 @@ class GDALRasterMerger:
 
         Based on gdal_merge.py utility.
     """
-    def __init__(self, targetFile, region, bandsNum, gdalDriver, fillValue = None):
+
+    def __init__(self, targetFile, region, bandsNum,
+                 gdalDriver, fillValue=None):
         """Create raster for merging.
         """
         self.gdalDrvType = gdalDriver
@@ -250,12 +269,19 @@ class GDALRasterMerger:
         nsRes = (region['south'] - region['north']) / region['rows']
         ewRes = (region['east'] - region['west']) / region['cols']
 
-        self.tGeotransform = [region['west'], ewRes, 0, region['north'], 0, nsRes]
+        self.tGeotransform = [
+            region['west'],
+            ewRes, 0, region['north'],
+            0, nsRes]
 
-        self.tUlx, self.tUly, self.tLrx, self.tLry = self._getCorners(self.tGeotransform, region)
+        self.tUlx, self.tUly, self.tLrx, self.tLry = self._getCorners(
+            self.tGeotransform, region)
 
         driver = gdal.GetDriverByName(self.gdalDrvType)
-        self.tDataset = driver.Create(targetFile, region['cols'], region['rows'], bandsNum,  gdal.GDT_Byte)
+        self.tDataset = driver.Create(
+            targetFile, region['cols'],
+            region['rows'],
+            bandsNum, gdal.GDT_Byte)
 
         if fillValue is not None:
             # fill raster bands with a constant value
@@ -265,29 +291,29 @@ class GDALRasterMerger:
     def AddRasterBands(self, sourceFile, sTBands):
         """Add raster bands from sourceFile into the merging raster.
         """
-        sDataset = gdal.Open(sourceFile, gdal.GA_ReadOnly) 
+        sDataset = gdal.Open(sourceFile, gdal.GA_ReadOnly)
         if sDataset is None:
             return
 
         sGeotransform = sDataset.GetGeoTransform()
 
         sSize = {
-                    'rows' :  sDataset.RasterYSize,
-                    'cols' :  sDataset.RasterXSize
-                 }
+            'rows': sDataset.RasterYSize,
+            'cols': sDataset.RasterXSize
+        }
 
         sUlx, sUly, sLrx, sLry = self._getCorners(sGeotransform, sSize)
 
         # figure out intersection region
-        tIntsctUlx = max(self.tUlx,sUlx)
-        tIntsctLrx = min(self.tLrx,sLrx)
+        tIntsctUlx = max(self.tUlx, sUlx)
+        tIntsctLrx = min(self.tLrx, sLrx)
         if self.tGeotransform[5] < 0:
-            tIntsctUly = min(self.tUly,sUly)
-            tIntsctLry = max(self.tLry,sLry)
+            tIntsctUly = min(self.tUly, sUly)
+            tIntsctLry = max(self.tLry, sLry)
         else:
-            tIntsctUly = max(self.tUly,sUly)
-            tIntsctLry = min(self.tLry,sLry)
-        
+            tIntsctUly = max(self.tUly, sUly)
+            tIntsctLry = min(self.tLry, sLry)
+
         # do they even intersect?
         if tIntsctUlx >= tIntsctLrx:
             return
@@ -296,12 +322,21 @@ class GDALRasterMerger:
         if self.tGeotransform[5] > 0 and tIntsctUly >= tIntsctLry:
             return
 
-
         # compute target window in pixel coordinates.
-        tXoff = int((tIntsctUlx - self.tGeotransform[0]) / self.tGeotransform[1] + 0.1)
-        tYoff = int((tIntsctUly - self.tGeotransform[3]) / self.tGeotransform[5] + 0.1)
-        tXsize = int((tIntsctLrx - self.tGeotransform[0])/self.tGeotransform[1] + 0.5) - tXoff
-        tYsize = int((tIntsctLry - self.tGeotransform[3])/self.tGeotransform[5] + 0.5) - tYoff
+        tXoff = int(
+            (tIntsctUlx -
+             self.tGeotransform[0]) /
+            self.tGeotransform[1] +
+            0.1)
+        tYoff = int(
+            (tIntsctUly -
+             self.tGeotransform[3]) /
+            self.tGeotransform[5] +
+            0.1)
+        tXsize = int(
+            (tIntsctLrx - self.tGeotransform[0]) / self.tGeotransform[1] + 0.5) - tXoff
+        tYsize = int(
+            (tIntsctLry - self.tGeotransform[3]) / self.tGeotransform[5] + 0.5) - tYoff
 
         if tXsize < 1 or tYsize < 1:
             return
@@ -309,17 +344,19 @@ class GDALRasterMerger:
         # Compute source window in pixel coordinates.
         sXoff = int((tIntsctUlx - sGeotransform[0]) / sGeotransform[1])
         sYoff = int((tIntsctUly - sGeotransform[3]) / sGeotransform[5])
-        sXsize = int((tIntsctLrx - sGeotransform[0]) / sGeotransform[1] + 0.5) - sXoff
-        sYsize = int((tIntsctLry - sGeotransform[3]) / sGeotransform[5] + 0.5) - sYoff
+        sXsize = int(
+            (tIntsctLrx - sGeotransform[0]) / sGeotransform[1] + 0.5) - sXoff
+        sYsize = int(
+            (tIntsctLry - sGeotransform[3]) / sGeotransform[5] + 0.5) - sYoff
 
         if sXsize < 1 or sYsize < 1:
             return
 
         for sBandNnum, tBandNum in sTBands.iteritems():
-            bandData = sDataset.GetRasterBand(sBandNnum).ReadRaster(sXoff, sYoff, sXsize,
-                                                                    sYsize, tXsize, tYsize, gdal.GDT_Byte)
-            self.tDataset.GetRasterBand(tBandNum).WriteRaster(tXoff, tYoff, tXsize, tYsize, bandData, 
-                                                              tXsize, tYsize, gdal.GDT_Byte)
+            bandData = sDataset.GetRasterBand(sBandNnum).ReadRaster(
+                sXoff, sYoff, sXsize, sYsize, tXsize, tYsize, gdal.GDT_Byte)
+            self.tDataset.GetRasterBand(tBandNum).WriteRaster(
+                tXoff, tYoff, tXsize, tYsize, bandData, tXsize, tYsize, gdal.GDT_Byte)
 
     def _getCorners(self, geoTrans, size):
 
@@ -328,13 +365,13 @@ class GDALRasterMerger:
         lrx = geoTrans[0] + size['cols'] * geoTrans[1]
         lry = geoTrans[3] + size['rows'] * geoTrans[5]
 
-        return ulx, uly, lrx, lry 
+        return ulx, uly, lrx, lry
 
     def SetGeorefAndProj(self):
         """Set georeference and projection to target file
         """
-        projection = grass.read_command('g.proj', 
-                                        flags = 'wf')
+        projection = grass.read_command('g.proj',
+                                        flags='wf')
         self.tDataset.SetProjection(projection)
 
         self.tDataset.SetGeoTransform(self.tGeotransform)
diff --git a/gui/wxpython/datacatalog/Makefile b/gui/wxpython/datacatalog/Makefile
new file mode 100644
index 0000000..e14518a
--- /dev/null
+++ b/gui/wxpython/datacatalog/Makefile
@@ -0,0 +1,5 @@
+MODULE_TOPDIR = ../../..
+
+include $(MODULE_TOPDIR)/include/Make/GuiScript.make
+
+default: guiscript
diff --git a/gui/wxpython/datacatalog/__init__.py b/gui/wxpython/datacatalog/__init__.py
new file mode 100644
index 0000000..80cc42a
--- /dev/null
+++ b/gui/wxpython/datacatalog/__init__.py
@@ -0,0 +1,5 @@
+all = [
+    'catalog',
+    'frame',
+    'tree',
+]
diff --git a/gui/wxpython/datacatalog/catalog.py b/gui/wxpython/datacatalog/catalog.py
new file mode 100644
index 0000000..c06ac97
--- /dev/null
+++ b/gui/wxpython/datacatalog/catalog.py
@@ -0,0 +1,99 @@
+"""
+ at package datacatalog::catalog
+
+ at brief Data catalog
+
+Classes:
+ - datacatalog::DataCatalog
+
+(C) 2014 by Tereza Fiedlerova, and the GRASS Development Team
+
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Tereza Fiedlerova
+"""
+
+import wx
+
+from core.gthread import gThread
+from core.debug import Debug
+from datacatalog.tree import DataCatalogTree
+from core.utils import _
+from datacatalog.toolbars import DataCatalogToolbar
+
+from grass.pydispatch.signal import Signal
+
+
+class DataCatalog(wx.Panel):
+    """Data catalog panel"""
+
+    def __init__(self, parent, giface=None, id=wx.ID_ANY,
+                 title=_("Data catalog"), name='catalog', **kwargs):
+        """Panel constructor  """
+        self.showNotification = Signal('DataCatalog.showNotification')
+        self.changeMapset = Signal('DataCatalog.changeMapset')
+        self.changeLocation = Signal('DataCatalog.changeLocation')
+        self.parent = parent
+        self.baseTitle = title
+        wx.Panel.__init__(self, parent=parent, id=id, **kwargs)
+        self.SetName("DataCatalog")
+
+        Debug.msg(1, "DataCatalog.__init__()")
+
+        # toolbar
+        self.toolbar = DataCatalogToolbar(parent=self)
+
+        # tree with layers
+        self.tree = DataCatalogTree(self, giface=giface)
+        self.thread = gThread()
+        self._loaded = False
+        self.tree.showNotification.connect(self.showNotification)
+        self.tree.changeMapset.connect(self.changeMapset)
+        self.tree.changeLocation.connect(self.changeLocation)
+
+        # some layout
+        self._layout()
+
+    def _layout(self):
+        """Do layout"""
+        sizer = wx.BoxSizer(wx.VERTICAL)
+
+        sizer.Add(item=self.toolbar, proportion=0,
+                  flag=wx.EXPAND)
+
+        sizer.Add(item=self.tree.GetControl(), proportion=1,
+                  flag=wx.EXPAND)
+
+        self.SetAutoLayout(True)
+        self.SetSizer(sizer)
+
+        self.Layout()
+
+    def LoadItems(self):
+        if self._loaded:
+            return
+
+        self.thread.Run(callable=self.tree.InitTreeItems,
+                        ondone=lambda event: self.LoadItemsDone())
+
+    def LoadItemsDone(self):
+        self._loaded = True
+        self.tree.ExpandCurrentMapset()
+
+    def OnReloadTree(self, event):
+        """Reload whole tree"""
+        self.tree.ReloadTreeItems()
+        self.tree.ExpandCurrentMapset()
+
+    def OnReloadCurrentMapset(self, event):
+        """Reload current mapset tree only"""
+        self.tree.ReloadCurrentMapset()
+
+    def SetRestriction(self, restrict):
+        """Allow editing other mapsets or restrict editing to current mapset"""
+        self.tree.SetRestriction(restrict)
+
+    def Filter(self, text):
+        self.tree.Filter(text=text)
diff --git a/gui/wxpython/datacatalog/frame.py b/gui/wxpython/datacatalog/frame.py
new file mode 100644
index 0000000..4978e4a
--- /dev/null
+++ b/gui/wxpython/datacatalog/frame.py
@@ -0,0 +1,130 @@
+"""
+ at package datacatalog::frame
+
+ at brief Data catalog frame class
+
+Classes:
+ - datacatalog::DataCatalogFrame
+
+(C) 2014-2016 by Tereza Fiedlerova, and the GRASS Development Team
+
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Tereza Fiedlerova (original author)
+ at author Martin Landa <landa.martin gmail.com> (various improvements)
+"""
+
+import os
+import sys
+
+import wx
+
+from core.utils import _
+from core.globalvar import ICONDIR
+from core.gcmd import RunCommand, GMessage
+from datacatalog.tree import DataCatalogTree
+from datacatalog.toolbars import DataCatalogToolbar
+
+
+class DataCatalogFrame(wx.Frame):
+    """Frame for testing purposes only."""
+
+    def __init__(self, parent, giface=None):
+        wx.Frame.__init__(self, parent=parent,
+                          title=_('GRASS GIS Data Catalog'))
+        self.SetName("DataCatalog")
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self._giface = giface
+        self.panel = wx.Panel(self)
+
+        self.toolbar = DataCatalogToolbar(parent=self)
+        # workaround for http://trac.wxwidgets.org/ticket/13888
+        if sys.platform != 'darwin':
+            self.SetToolBar(self.toolbar)
+
+        # tree
+        self.tree = DataCatalogTree(parent=self.panel, giface=self._giface)
+        self.tree.InitTreeItems()
+        self.tree.ExpandCurrentMapset()
+        self.tree.changeMapset.connect(lambda mapset:
+                                       self.ChangeLocationMapset(location=None,
+                                                                 mapset=mapset))
+        self.tree.changeLocation.connect(lambda mapset, location:
+                                         self.ChangeLocationMapset(location=location,
+                                                                   mapset=mapset))
+
+        # buttons
+        self.btnClose = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
+        self.btnClose.SetToolTipString(_("Close GRASS GIS Data Catalog"))
+        self.btnClose.SetDefault()
+
+        # events
+        self.btnClose.Bind(wx.EVT_BUTTON, self.OnCloseWindow)
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+
+        self._layout()
+
+    def _layout(self):
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(self.tree, proportion=1, flag=wx.EXPAND)
+
+        btnSizer = wx.BoxSizer(wx.HORIZONTAL)
+        btnSizer.AddStretchSpacer()
+        btnSizer.Add(self.btnClose)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND,
+                  border=5)
+
+        self.panel.SetSizer(sizer)
+        sizer.Fit(self.panel)
+
+        self.SetMinSize((400, 500))
+
+    def OnCloseWindow(self, event):
+        """Cancel button pressed"""
+        if not isinstance(event, wx.CloseEvent):
+            self.Destroy()
+
+        event.Skip()
+
+    def OnReloadTree(self, event):
+        """Reload whole tree"""
+        self.tree.ReloadTreeItems()
+        self.tree.ExpandCurrentMapset()
+
+    def OnReloadCurrentMapset(self, event):
+        """Reload current mapset tree only"""
+        self.tree.ReloadCurrentMapset()
+
+    def SetRestriction(self, restrict):
+        """Allow editing other mapsets or restrict editing to current mapset"""
+        self.tree.SetRestriction(restrict)
+
+    def ChangeLocationMapset(self, mapset, location=None):
+        """Change mapset or location"""
+        if location:
+            if RunCommand('g.mapset', parent=self,
+                          location=location,
+                          mapset=mapset) == 0:
+                GMessage(parent=self,
+                         message=_("Current location is <%(loc)s>.\n"
+                                   "Current mapset is <%(mapset)s>.") %
+                         {'loc': location, 'mapset': mapset})
+        else:
+            if RunCommand('g.mapset',
+                          parent=self,
+                          mapset=mapset) == 0:
+                GMessage(parent=self,
+                         message=_("Current mapset is <%s>.") % mapset)
+
+    def Filter(self, text):
+        self.tree.Filter(text=text)
diff --git a/gui/wxpython/datacatalog/g.gui.datacatalog.html b/gui/wxpython/datacatalog/g.gui.datacatalog.html
new file mode 100644
index 0000000..a63e2a7
--- /dev/null
+++ b/gui/wxpython/datacatalog/g.gui.datacatalog.html
@@ -0,0 +1,58 @@
+<!-- meta page description: wxGUI Data Catalog -->
+<!-- meta page index: topic_gui|GUI -->
+<h2>DESCRIPTION</h2>
+
+The <b>Data Catalog</b> is a <em><a href="wxGUI.html">wxGUI</a></em> component
+for browsing, modifying and managing GRASS maps.
+
+<p>
+Data Catalog allows you to:
+
+<ul>
+  <li>browse GRASS locations and mapsets in the current GIS directory</li>
+  <li>browse GRASS 2D/3D raster and vector maps</li>
+  <li>rename GRASS maps in the current mapset</li>
+  <li>copy GRASS maps from different mapsets into current mapsets (within the same location)</li>
+  <li>delete GRASS maps located in the current mapset</li>
+</ul>
+
+<h2>NOTES</h2>
+
+<h3>WARNING</h3>
+
+Data Catalog is <b>experimental and requires significant
+developement!</b>, see
+the <a href="http://trac.osgeo.org/grass/wiki/wxGUIDevelopment/wxDataCatalog">trac
+wiki page</a>.
+
+<h3>TODO</h3>
+
+<ul>
+  <li>Extend this manual, add screenshot</li>
+  <li>Improve this tool,
+see <a href="http://trac.osgeo.org/grass/wiki/wxGUIDevelopment/wxDataCatalog">trac
+wiki page</a></li>
+</ul>
+
+<h2>SEE ALSO</h2>
+
+<em>
+  <a href="wxGUI.html">wxGUI</a><br>
+  <a href="wxGUI.components.html">wxGUI components</a>
+</em>
+
+<p>
+<em>
+  <a href="g.copy.html">g.copy</a>,
+  <a href="g.copy.html">g.rename</a>,
+  <a href="g.copy.html">g.remove</a>,
+  <a href="g.list.html">g.list</a>
+</em>
+
+<h2>AUTHOR</h2>
+
+Tereza Fiedlerova, OSGeoREL, Czech Technical University in Prague,
+Czech Republic
+
+<p>
+<i>$Date: 2015-09-06 17:12:27 +0200 (Sun, 06 Sep 2015) $</i>
diff --git a/gui/wxpython/datacatalog/g.gui.datacatalog.py b/gui/wxpython/datacatalog/g.gui.datacatalog.py
new file mode 100644
index 0000000..33b0dc4
--- /dev/null
+++ b/gui/wxpython/datacatalog/g.gui.datacatalog.py
@@ -0,0 +1,52 @@
+#!/usr/bin/env python
+############################################################################
+#
+# MODULE:    Data catalog
+# AUTHOR(S): Tereza Fiedlerova
+# PURPOSE:   GRASS data catalog for browsing, modifying and managing GRASS maps
+# COPYRIGHT: (C) 2014-2015 by Tereza Fiedlerova, and the GRASS Development Team
+#
+#  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 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.
+#
+############################################################################
+
+#%module
+#% description: Tool for browsing, modifying and managing GRASS maps.
+#% keyword: general
+#% keyword: GUI
+#% keyword: map management
+#%end
+
+import grass.script as gscript
+
+
+def main():
+    options, flags = gscript.parser()
+
+    # import wx only after running parser
+    # to avoid issues when only interface is needed
+    import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
+    from core.giface import StandaloneGrassInterface
+    from datacatalog.frame import DataCatalogFrame
+
+    app = wx.App()
+
+    frame = DataCatalogFrame(parent=None, giface=StandaloneGrassInterface())
+    frame.CentreOnScreen()
+    frame.Show()
+    app.MainLoop()
+
+if __name__ == '__main__':
+    main()
diff --git a/gui/wxpython/datacatalog/toolbars.py b/gui/wxpython/datacatalog/toolbars.py
new file mode 100644
index 0000000..ca6a765
--- /dev/null
+++ b/gui/wxpython/datacatalog/toolbars.py
@@ -0,0 +1,84 @@
+"""
+ at package datacatalog.toolbars
+
+ at brief Data Catalog toolbars
+
+Classes:
+ - toolbars::DataCatalogToolbar(BaseToolbar)
+
+(C) 2016 by the GRASS Development Team
+
+This program is free software under the GNU General Public License
+(>=v2). Read the file COPYING that comes with GRASS for details.
+
+ at author Martin Landa <landa.martin gmail.com>
+"""
+
+import wx
+from gui_core.toolbars import BaseToolbar
+from icons.icon import MetaIcon
+from core.utils import _
+
+icons = {
+    'reloadTree': MetaIcon(
+        img='redraw',
+        label=_("Reload GRASS locations")),
+    'reloadMapset': MetaIcon(
+        img='reload',
+        label=_("Reload current GRASS mapset only")),
+    'unlocked': MetaIcon(
+        img='unlocked',
+        label=_("Click to restrict editing to current mapset only")),
+    'locked': MetaIcon(
+        img='locked',
+        label=_("Click to allow editing other mapsets")),
+}
+
+
+class DataCatalogToolbar(BaseToolbar):
+    """Main data catalog toolbar
+    """
+
+    def __init__(self, parent):
+        """Main toolbar constructor
+        """
+        BaseToolbar.__init__(self, parent)
+
+        self.InitToolbar(self._toolbarData())
+        self.filterId = wx.NewId()
+        self.filter = wx.TextCtrl(parent=self, id=self.filterId)
+        self.filter.SetSize((120, self.filter.GetBestSize()[1]))
+        self.filter.Bind(wx.EVT_TEXT,
+                         lambda event: self.parent.Filter(
+                         self.filter.GetValue()))
+        self.AddControl(wx.StaticText(self, label=_("Search:")))
+        self.AddControl(self.filter)
+        help = _("Type to search database by map type or name. "
+                 "Use prefix 'r:', 'v:' and 'r3:'"
+                 "to show only raster, vector or 3D raster data, respectively. "
+                 "Use Python regular expressions to refine your search.")
+        self.SetToolShortHelp(self.filterId, help)
+        # realize the toolbar
+        self.Realize()
+
+    def _toolbarData(self):
+        """Returns toolbar data (name, icon, handler)"""
+        # BaseIcons are a set of often used icons. It is possible
+        # to reuse icons in ./trunk/gui/icons/grass or add new ones there.
+        return self._getToolbarData((("reloadTree", icons["reloadTree"],
+                                      self.parent.OnReloadTree),
+                                     ("reloadMapset", icons["reloadMapset"],
+                                      self.parent.OnReloadCurrentMapset),
+                                     ("lock", icons['locked'],
+                                      self.OnSetRestriction, wx.ITEM_CHECK)
+                                     ))
+
+    def OnSetRestriction(self, event):
+        if self.GetToolState(self.lock):
+            self.SetToolNormalBitmap(self.lock, icons['unlocked'].GetBitmap())
+            self.SetToolShortHelp(self.lock, icons['unlocked'].GetLabel())
+            self.parent.SetRestriction(restrict=False)
+        else:
+            self.SetToolNormalBitmap(self.lock, icons['locked'].GetBitmap())
+            self.SetToolShortHelp(self.lock, icons['locked'].GetLabel())
+            self.parent.SetRestriction(restrict=True)
diff --git a/gui/wxpython/datacatalog/tree.py b/gui/wxpython/datacatalog/tree.py
new file mode 100644
index 0000000..02c31de
--- /dev/null
+++ b/gui/wxpython/datacatalog/tree.py
@@ -0,0 +1,970 @@
+"""
+ at package datacatalog::tree
+
+ at brief Data catalog tree classes
+
+Classes:
+ - datacatalog::LocationMapTree
+ - datacatalog::DataCatalogTree
+
+(C) 2014-2015 by Tereza Fiedlerova, and the GRASS Development Team
+
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Tereza Fiedlerova
+ at author Anna Petrasova (kratochanna gmail com)
+"""
+import os
+import re
+import copy
+from multiprocessing import Process, Queue, cpu_count
+
+import wx
+
+from core.gcmd import RunCommand, GError, GMessage, GWarning
+from core.utils import GetListOfLocations
+from core.debug import Debug
+from gui_core.dialogs import TextEntryDialog
+from core.giface import StandaloneGrassInterface
+from core.treemodel import TreeModel, DictNode
+from gui_core.treeview import TreeView
+
+from grass.pydispatch.signal import Signal
+
+import grass.script as gscript
+from grass.script import gisenv
+from grass.exceptions import CalledModuleError
+
+
+def filterModel(model, element=None, name=None):
+    """Filter tree model based on type or name of map using regular expressions.
+    Copies tree and remove nodes which don't match."""
+    fmodel = copy.deepcopy(model)
+    nodesToRemove = []
+    if name:
+        try:
+            regex = re.compile(name)
+        except:
+            return fmodel
+    for gisdbase in fmodel.root.children:
+        for location in gisdbase.children:
+            for mapset in location.children:
+                for elem in mapset.children:
+                    if element and elem.label != element:
+                        nodesToRemove.append(elem)
+                        continue
+                    for node in elem.children:
+                        if name and regex.search(node.label) is None:
+                            nodesToRemove.append(node)
+
+    for node in reversed(nodesToRemove):
+        fmodel.RemoveNode(node)
+
+    cleanUpTree(fmodel)
+    return fmodel
+
+
+def cleanUpTree(model):
+    """Removes empty element/mapsets/locations nodes.
+    It first removes empty elements, then mapsets, then locations"""
+    # removes empty elements
+    nodesToRemove = []
+    for gisdbase in model.root.children:
+        for location in gisdbase.children:
+            for mapset in location.children:
+                for element in mapset.children:
+                    if not element.children:
+                        nodesToRemove.append(element)
+    for node in reversed(nodesToRemove):
+        model.RemoveNode(node)
+    # removes empty mapsets
+    nodesToRemove = []
+    for gisdbase in model.root.children:
+        for location in gisdbase.children:
+            for mapset in location.children:
+                if not mapset.children:
+                    nodesToRemove.append(mapset)
+    for node in reversed(nodesToRemove):
+        model.RemoveNode(node)
+    # removes empty locations
+    nodesToRemove = []
+    for gisdbase in model.root.children:
+        for location in gisdbase.children:
+            if not location.children:
+                nodesToRemove.append(location)
+    for node in reversed(nodesToRemove):
+        model.RemoveNode(node)
+
+def getEnvironment(gisdbase, location, mapset):
+    """Creates environment to be passed in run_command for example.
+    Returns tuple with temporary file path and the environment. The user
+    of this function is responsile for deleting the file."""
+    tmp_gisrc_file = gscript.tempfile()
+    with open(tmp_gisrc_file, 'w') as f:
+        f.write('MAPSET: {mapset}\n'.format(mapset=mapset))
+        f.write('GISDBASE: {g}\n'.format(g=gisdbase))
+        f.write('LOCATION_NAME: {l}\n'.format(l=location))
+        f.write('GUI: text\n')
+    env = os.environ.copy()
+    env['GISRC'] = tmp_gisrc_file
+    return tmp_gisrc_file, env
+
+
+def getLocationTree(gisdbase, location, queue, mapsets=None):
+    """Creates dictionary with mapsets, elements, layers for given location.
+    Returns tuple with the dictionary and error (or None)"""
+    tmp_gisrc_file, env = getEnvironment(gisdbase, location, 'PERMANENT')
+    env['GRASS_SKIP_MAPSET_OWNER_CHECK'] = '1'
+
+    maps_dict = {}
+    elements = ['raster', 'raster_3d', 'vector']
+    try:
+        if not mapsets:
+            mapsets = gscript.read_command(
+                'g.mapsets',
+                flags='l',
+                separator='comma',
+                quiet=True,
+                env=env).strip()
+    except CalledModuleError:
+        queue.put(
+            (maps_dict,
+             _("Failed to read mapsets from location <{l}>.").format(
+                 l=location)))
+        gscript.try_remove(tmp_gisrc_file)
+        return
+    else:
+        listOfMapsets = mapsets.split(',')
+        Debug.msg(
+            4, "Location <{}>: {} mapsets found".format(
+                location, len(listOfMapsets)))
+        for each in listOfMapsets:
+            maps_dict[each] = {}
+            for elem in elements:
+                maps_dict[each][elem] = []
+    try:
+        maplist = gscript.read_command(
+            'g.list', flags='mt', type=elements,
+            mapset=','.join(listOfMapsets),
+            quiet=True, env=env).strip()
+    except CalledModuleError:
+        queue.put(
+            (maps_dict,
+             _("Failed to read maps from location <{l}>.").format(
+                 l=location)))
+        gscript.try_remove(tmp_gisrc_file)
+        return
+    else:
+        # fill dictionary
+        listOfMaps = maplist.splitlines()
+        Debug.msg(
+            4, "Location <{}>: {} maps found".format(
+                location, len(listOfMaps)))
+        for each in listOfMaps:
+            ltype, wholename = each.split('/')
+            name, mapset = wholename.split('@')
+            maps_dict[mapset][ltype].append(name)
+
+    queue.put((maps_dict, None))
+    gscript.try_remove(tmp_gisrc_file)
+
+
+def map_exists(name, element, env, mapset=None):
+    """Check is map is present in the mapset given in the environment
+
+    :param name: name of the map
+    :param element: data type ('raster', 'raster_3d', and 'vector')
+    :param env environment created by function getEnvironment
+    """
+    if not mapset:
+        mapset = gscript.run_command('g.mapset', flags='p', env=env).strip()
+    # change type to element used by find file
+    if element == 'raster':
+        element = 'cell'
+    elif element == 'raster_3d':
+        element = 'grid3'
+    # g.findfile returns non-zero when file was not found
+    # se we ignore return code and just focus on stdout
+    process = gscript.start_command(
+        'g.findfile',
+        flags='n',
+        element=element,
+        file=name,
+        mapset=mapset,
+        stdout=gscript.PIPE,
+        stderr=gscript.PIPE,
+        env=env)
+    output, errors = process.communicate()
+    info = gscript.parse_key_val(output, sep='=')
+    # file is the key questioned in grass.script.core find_file()
+    # return code should be equivalent to checking the output
+    if info['file']:
+        return True
+    else:
+        return False
+
+
+class NameEntryDialog(TextEntryDialog):
+
+    def __init__(self, element, mapset, env, **kwargs):
+        TextEntryDialog.__init__(self, **kwargs)
+        self._element = element
+        self._mapset = mapset
+        self._env = env
+        id_OK = self.GetAffirmativeId()
+        self.Bind(wx.EVT_BUTTON, self.OnOK, self.FindWindowById(id_OK))
+
+    def OnOK(self, event):
+        new = self.GetValue()
+        if not new:
+            return
+        if map_exists(new, self._element, self._env, self._mapset):
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Map of type {elem} <{name}> already exists in mapset <{mapset}>. "
+                    "Do you want to overwrite it?").format(
+                    elem=self._element,
+                    name=new,
+                    mapset=self._mapset),
+                caption=_("Overwrite?"),
+                style=wx.YES_NO)
+            if dlg.ShowModal() == wx.ID_YES:
+                dlg.Destroy()
+                self._env['GRASS_OVERWRITE'] = '1'
+                self.EndModal(wx.ID_OK)
+            else:
+                dlg.Destroy()
+                return
+        else:
+            self.EndModal(wx.ID_OK)
+
+
+class DataCatalogNode(DictNode):
+    """Node representing item in datacatalog."""
+
+    def __init__(self, label, data=None):
+        super(DataCatalogNode, self).__init__(label=label, data=data)
+
+    def match(self, **kwargs):
+        """Method used for searching according to given parameters.
+
+        :param value: dictionary value to be matched
+        :param key: data dictionary key
+        """
+        if not kwargs:
+            return False
+
+        for key in kwargs:
+            if not (key in self.data and self.data[key] == kwargs[key]):
+                return False
+        return True
+
+
+class LocationMapTree(TreeView):
+
+    def __init__(
+            self, parent, model=None, style=wx.TR_HIDE_ROOT | wx.TR_EDIT_LABELS
+            | wx.TR_LINES_AT_ROOT | wx.TR_HAS_BUTTONS | wx.TR_FULL_ROW_HIGHLIGHT |
+            wx.TR_SINGLE):
+        """Location Map Tree constructor."""
+        self._model = TreeModel(DataCatalogNode)
+        self._orig_model = self._model
+        super(
+            LocationMapTree,
+            self).__init__(
+            parent=parent,
+            model=self._model,
+            id=wx.ID_ANY,
+            style=style)
+        self.showNotification = Signal('Tree.showNotification')
+        self.changeMapset = Signal('Tree.changeMapset')
+        self.changeLocation = Signal('Tree.changeLocation')
+        self.parent = parent
+        self.contextMenu.connect(self.OnRightClick)
+        self.itemActivated.connect(self.OnDoubleClick)
+
+        self._initVariables()
+
+    def _initTreeItems(self, locations=None, mapsets=None):
+        """Add locations, mapsets and layers to the tree.
+        Runs in multiple processes. Saves resulting data and error."""
+        # mapsets param currently unused
+        genv = gisenv()
+        if not locations:
+            locations = GetListOfLocations(genv['GISDBASE'])
+
+        loc_count = proc_count = 0
+        queue_list = []
+        proc_list = []
+        loc_list = []
+        nprocs = 4
+        try:
+            nprocs = cpu_count()
+        except NotImplementedError:
+            nprocs = 4
+
+        results = dict()
+        errors = []
+        location_nodes = []
+        nlocations = len(locations)
+        grassdata_node = self._model.AppendNode(
+            parent=self._model.root, label=_('GRASS locations in {}').format(
+                genv['GISDBASE']), data=dict(
+                type='grassdata'))
+        for location in locations:
+            results[location] = dict()
+            varloc = self._model.AppendNode(
+                parent=grassdata_node, label=location, data=dict(
+                    type='location', name=location))
+            location_nodes.append(varloc)
+            loc_count += 1
+
+            Debug.msg(
+                3, "Scanning location <{}> ({}/{})".format(location, loc_count, nlocations))
+
+            q = Queue()
+            p = Process(target=getLocationTree,
+                        args=(genv['GISDBASE'], location, q))
+            p.start()
+
+            queue_list.append(q)
+            proc_list.append(p)
+            loc_list.append(location)
+
+            proc_count += 1
+            # Wait for all running processes
+            if proc_count == nprocs or loc_count == nlocations:
+                Debug.msg(4, "Process subresults")
+                for i in range(len(loc_list)):
+                    maps, error = queue_list[i].get()
+                    proc_list[i].join()
+                    if error:
+                        errors.append(error)
+
+                    for key in sorted(maps.keys()):
+                        mapset_node = self._model.AppendNode(
+                            parent=location_nodes[i],
+                            label=key, data=dict(
+                                type='mapset', name=key))
+                        self._populateMapsetItem(mapset_node, maps[key])
+
+                proc_count = 0
+                proc_list = []
+                queue_list = []
+                loc_list = []
+                location_nodes = []
+
+        if errors:
+            wx.CallAfter(GWarning, '\n'.join(errors))
+        Debug.msg(1, "Tree filled")
+        self.RefreshItems()
+
+    def InitTreeItems(self):
+        """Load locations, mapsets and layers in the tree."""
+        raise NotImplementedError()
+
+    def ReloadTreeItems(self):
+        """Reload locations, mapsets and layers in the tree."""
+        self._orig_model = self._model
+        self._model.RemoveNode(self._model.root)
+        self.InitTreeItems()
+
+    def ReloadCurrentMapset(self):
+        """Reload current mapset tree only."""
+        def get_first_child(node):
+            try:
+                child = mapsetItem.children[0]
+            except IndexError:
+                child = None
+            return child
+
+        genv = gisenv()
+        locationItem, mapsetItem = self.GetCurrentLocationMapsetNode()
+        if not locationItem or not mapsetItem:
+            return
+
+        if mapsetItem.children:
+            node = get_first_child(mapsetItem)
+            while node:
+                self._model.RemoveNode(node)
+                node = get_first_child(mapsetItem)
+
+        q = Queue()
+        p = Process(
+            target=getLocationTree,
+            args=(
+                genv['GISDBASE'],
+                locationItem.data['name'],
+                q,
+                mapsetItem.data['name']))
+        p.start()
+        maps, error = q.get()
+        if error:
+            raise CalledModuleError(error)
+
+        self._populateMapsetItem(mapsetItem, maps[mapsetItem.data['name']])
+        self._orig_model = copy.deepcopy(self._model)
+        self.RefreshNode(mapsetItem)
+        self.RefreshItems()
+
+    def _populateMapsetItem(self, mapset_node, data):
+        for elem in data:
+            if data[elem]:
+                element_node = self._model.AppendNode(
+                    parent=mapset_node, label=elem,
+                    data=dict(type='element', name=elem))
+                for layer in data[elem]:
+                    self._model.AppendNode(parent=element_node, label=layer,
+                                           data=dict(type=elem, name=layer))
+
+    def _popupMenuLayer(self):
+        """Create popup menu for layers"""
+        raise NotImplementedError()
+
+    def _popupMenuMapset(self):
+        """Create popup menu for mapsets"""
+        raise NotImplementedError()
+
+    def _popupMenuElement(self):
+        """Create popup menu for elements"""
+        raise NotImplementedError()
+
+    def _initVariables(self):
+        """Init variables."""
+        self.selected_layer = None
+        self.selected_type = None
+        self.selected_mapset = None
+        self.selected_location = None
+
+    def GetControl(self):
+        """Returns control itself."""
+        return self
+
+    def DefineItems(self, item):
+        """Set selected items."""
+        self.selected_layer = None
+        self.selected_type = None
+        self.selected_mapset = None
+        self.selected_location = None
+
+        type = item.data['type']
+        if type in ('raster', 'raster_3d', 'vector'):
+            self.selected_layer = item
+            type = 'element'
+            item = item.parent
+
+        if type == 'element':
+            self.selected_type = item
+            type = 'mapset'
+            item = item.parent
+
+        if type == 'mapset':
+            self.selected_mapset = item
+            type = 'location'
+            item = item.parent
+
+        if type == 'location':
+            self.selected_location = item
+
+    def OnSelChanged(self, event):
+        self.selected_layer = None
+
+    def OnRightClick(self, node):
+        """Display popup menu."""
+        self.DefineItems(node)
+        if self.selected_layer:
+            self._popupMenuLayer()
+        elif self.selected_mapset and not self.selected_type:
+            self._popupMenuMapset()
+        elif self.selected_type:
+            self._popupMenuElement()
+
+    def OnDoubleClick(self, node):
+        """Expand/Collapse node."""
+        if self.IsNodeExpanded(node):
+            self.CollapseNode(node, recursive=False)
+        else:
+            self.ExpandNode(node, recursive=False)
+
+    def ExpandCurrentLocation(self):
+        """Expand current location"""
+        location = gscript.gisenv()['LOCATION_NAME']
+        item = self._model.SearchNodes(name=location, type='location')
+        if item:
+            self.Select(item[0], select=True)
+            self.ExpandNode(item[0], recursive=False)
+        else:
+            Debug.msg(1, "Location <%s> not found" % location)
+
+    def GetCurrentLocationMapsetNode(self):
+        """Get current mapset node"""
+        genv = gisenv()
+        location = genv['LOCATION_NAME']
+        mapset = genv['MAPSET']
+        locationItem = self._model.SearchNodes(name=location, type='location')
+        if not locationItem:
+            return None, None
+
+        mapsetItem = self._model.SearchNodes(
+            parent=locationItem[0],
+            name=mapset, type='mapset')
+        if not mapsetItem:
+            return locationItem[0], None
+
+        return locationItem[0], mapsetItem[0]
+
+    def ExpandCurrentMapset(self):
+        """Expand current mapset"""
+        locationItem, mapsetItem = self.GetCurrentLocationMapsetNode()
+        if mapsetItem:
+            self.Select(mapsetItem, select=True)
+            self.ExpandNode(mapsetItem, recursive=True)
+
+
+class DataCatalogTree(LocationMapTree):
+
+    def __init__(self, parent, giface=None):
+        """Data Catalog Tree constructor."""
+        super(DataCatalogTree, self).__init__(parent)
+        self._giface = giface
+        self._restricted = True
+
+        self._initVariablesCatalog()
+        self.beginDrag = Signal('DataCatalogTree.beginDrag')
+        self.endDrag = Signal('DataCatalogTree.endDrag')
+        self.startEdit = Signal('DataCatalogTree.startEdit')
+        self.endEdit = Signal('DataCatalogTree.endEdit')
+
+        self.Bind(wx.EVT_TREE_BEGIN_DRAG, lambda evt:
+                  self._emitSignal(evt.GetItem(), self.beginDrag, event=evt))
+        self.Bind(wx.EVT_TREE_END_DRAG, lambda evt:
+                  self._emitSignal(evt.GetItem(), self.endDrag, event=evt))
+        self.beginDrag.connect(self.OnBeginDrag)
+        self.endDrag.connect(self.OnEndDrag)
+
+        self.Bind(wx.EVT_TREE_BEGIN_LABEL_EDIT, lambda evt:
+                  self._emitSignal(evt.GetItem(), self.startEdit, event=evt))
+        self.Bind(wx.EVT_TREE_END_LABEL_EDIT, lambda evt:
+                  self._emitSignal(evt.GetItem(), self.endEdit, event=evt))
+        self.startEdit.connect(self.OnStartEditLabel)
+        self.endEdit.connect(self.OnEditLabel)
+
+    def _initVariablesCatalog(self):
+        """Init variables."""
+        self.copy_layer = None
+        self.copy_type = None
+        self.copy_mapset = None
+        self.copy_location = None
+
+    def SetRestriction(self, restrict):
+        self._restricted = restrict
+
+    def _runCommand(self, prog, **kwargs):
+        cmdString = ' '.join(gscript.make_command(prog, **kwargs))
+        ret = RunCommand(prog, parent=self, **kwargs)
+
+        return ret, cmdString
+
+    def InitTreeItems(self):
+        """Add locations, mapsets and layers to the tree."""
+        self._initTreeItems()
+
+    def OnCopyMap(self, event):
+        """Copy layer or mapset (just save it temporarily, copying is done by paste)"""
+        self.copy_layer = self.selected_layer
+        self.copy_type = self.selected_type
+        self.copy_mapset = self.selected_mapset
+        self.copy_location = self.selected_location
+        label = _(
+            "Map <{layer}> marked for copying. "
+            "You can paste it to the current mapset "
+            "<{mapset}>.".format(
+                layer=self.copy_layer.label,
+                mapset=gisenv()['MAPSET']))
+        self.showNotification.emit(message=label)
+
+    def OnRenameMap(self, event):
+        """Rename layer with dialog"""
+        old_name = self.selected_layer.label
+        gisrc, env = getEnvironment(
+            gisenv()['GISDBASE'],
+            self.selected_location.label, mapset=self.selected_mapset.label)
+        new_name = self._getNewMapName(
+            _('New name'),
+            _('Rename map'),
+            old_name,
+            env=env,
+            mapset=self.selected_mapset.label,
+            element=self.selected_type.label)
+        if new_name:
+            self.Rename(old_name, new_name)
+
+    def OnStartEditLabel(self, node, event):
+        """Start label editing"""
+        self.DefineItems(node)
+        Debug.msg(1, "Start label edit {name}".format(name=node.label))
+        label = _("Editing {name}").format(name=node.label)
+        self.showNotification.emit(message=label)
+        if not self.selected_layer:
+            event.Veto()
+
+    def OnEditLabel(self, node, event):
+        """End label editing"""
+        if self.selected_layer and not event.IsEditCancelled():
+            old_name = node.label
+            Debug.msg(1, "End label edit {name}".format(name=old_name))
+            new_name = event.GetLabel()
+            self.Rename(old_name, new_name)
+
+    def Rename(self, old, new):
+        """Rename layer"""
+        string = old + ',' + new
+        gisrc, env = getEnvironment(
+            gisenv()['GISDBASE'],
+            self.selected_location.label, self.selected_mapset.label)
+        label = _("Renaming map <{name}>...").format(name=string)
+        self.showNotification.emit(message=label)
+        if self.selected_type.label == 'vector':
+            renamed, cmd = self._runCommand('g.rename', vector=string, env=env)
+        elif self.selected_type.label == 'raster':
+            renamed, cmd = self._runCommand('g.rename', raster=string, env=env)
+        else:
+            renamed, cmd = self._runCommand(
+                'g.rename', raster3d=string, env=env)
+        if renamed == 0:
+            self.selected_layer.label = new
+            self.selected_layer.data['name'] = new
+            self.RefreshNode(self.selected_layer)
+            self.showNotification.emit(
+                message=_("{cmd} -- completed").format(cmd=cmd))
+            Debug.msg(1, "LAYER RENAMED TO: " + new)
+        gscript.try_remove(gisrc)
+
+    def OnPasteMap(self, event):
+        """Paste layer"""
+        # copying between mapsets of one location
+        if not self.copy_layer:
+            GMessage(_("No map selected for copying."), parent=self)
+            return
+        if self.selected_location == self.copy_location:
+            gisrc, env = getEnvironment(
+                gisenv()['GISDBASE'], self.selected_location.label, mapset=self.selected_mapset.label)
+            new_name = self._getNewMapName(
+                _('New name'),
+                _('Copy map'),
+                self.copy_layer.label,
+                env=env,
+                mapset=self.selected_mapset.label,
+                element=self.copy_type.label)
+            if not new_name:
+                return
+            if map_exists(
+                    new_name, element=self.copy_type.label, env=env,
+                    mapset=self.selected_mapset.label):
+                GMessage(
+                    _("Failed to copy map: new map has the same name"),
+                    parent=self)
+                return
+
+            if not self.selected_type:
+                found = self._model.SearchNodes(
+                    parent=self.selected_mapset, type='element',
+                    name=self.copy_type.label)
+                self.selected_type = found[0] if found else None
+
+            overwrite = False
+            if self.selected_type:
+                found = self._model.SearchNodes(
+                    parent=self.selected_type,
+                    type=self.copy_type.label,
+                    name=new_name)
+                if found and found[0]:
+                    dlg = wx.MessageDialog(
+                        parent=self,
+                        message=_(
+                            "Map <{map}> already exists "
+                            "in the current mapset. "
+                            "Do you want to overwrite it?").format(
+                            map=new_name),
+                        caption=_("Overwrite?"),
+                        style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+                    ret = dlg.ShowModal()
+                    dlg.Destroy()
+                    if ret == wx.ID_YES:
+                        overwrite = True
+
+            string = self.copy_layer.label + '@' + self.copy_mapset.label + ',' + new_name
+
+            pasted = 0
+            label = _("Copying <{name}>...").format(name=string)
+            self.showNotification.emit(message=label)
+            if self.copy_type.label == 'vector':
+                pasted, cmd = self._runCommand(
+                    'g.copy', vector=string, overwrite=overwrite, env=env)
+                node = 'vector'
+            elif self.copy_type.label == 'raster':
+                pasted, cmd = self._runCommand(
+                    'g.copy', raster=string, overwrite=overwrite, env=env)
+                node = 'raster'
+            else:
+                pasted, cmd = self._runCommand(
+                    'g.copy', raster_3d=string, overwrite=overwrite, env=env)
+                node = 'raster_3d'
+            if pasted == 0:
+                self.InsertLayer(
+                    name=new_name,
+                    mapset_node=self.selected_mapset,
+                    element_name=node)
+                Debug.msg(1, "COPIED TO: " + new_name)
+                self.showNotification.emit(
+                    message=_("g.copy completed").format(cmd=cmd))
+            gscript.try_remove(gisrc)
+        else:
+            GError(
+                _("Failed to copy map: action is allowed only within the same location."),
+                parent=self)
+
+        # expand selected mapset
+        self.ExpandNode(self.selected_mapset, recursive=True)
+
+    def InsertLayer(self, name, mapset_node, element_name):
+        """Insert layer into model and refresh tree"""
+        found_element = self._model.SearchNodes(
+            parent=mapset_node, type='element', name=element_name)
+        found_element = found_element[0] if found_element else None
+        if not found_element:
+            # add type node if not exists
+            found_element = self._model.AppendNode(
+                parent=mapset_node, label=element_name,
+                data=dict(type='element', name=element_name))
+        found = self._model.SearchNodes(parent=found_element, name=name)
+        if len(found) == 0:
+            self._model.AppendNode(parent=found_element, label=name,
+                                   data=dict(type=element_name, name=name))
+            self._model.SortChildren(found_element)
+            self.RefreshNode(mapset_node, recursive=True)
+
+    def OnDeleteMap(self, event):
+        """Delete layer or mapset"""
+        name = self.selected_layer.label
+        gisrc, env = getEnvironment(
+            gisenv()['GISDBASE'],
+            self.selected_location.label, self.selected_mapset.label)
+        if self._confirmDialog(
+                question=_(
+                    "Do you really want to delete map <{m}> of type <{etype}> from mapset "
+                    "<{mapset}> in location <{loc}>?").format(
+                    m=name, mapset=self.selected_mapset.label,
+                    etype=self.selected_type.label,
+                    loc=self.selected_location.label),
+                title=_('Delete map')) == wx.ID_YES:
+            label = _("Deleting {name}...").format(name=name)
+            self.showNotification.emit(message=label)
+            if self.selected_type.label == 'vector':
+                removed, cmd = self._runCommand(
+                    'g.remove', flags='f', type='vector', name=name, env=env)
+            elif self.selected_type.label == 'raster':
+                removed, cmd = self._runCommand(
+                    'g.remove', flags='f', type='raster', name=name, env=env)
+            else:
+                removed, cmd = self._runCommand(
+                    'g.remove', flags='f', type='raster_3d', name=name, env=env)
+            if removed == 0:
+                self._model.RemoveNode(self.selected_layer)
+                self.RefreshNode(self.selected_type, recursive=True)
+                Debug.msg(1, "LAYER " + name + " DELETED")
+                self.showNotification.emit(
+                    message=_("g.remove completed").format(cmd=cmd))
+        gscript.try_remove(gisrc)
+
+    def OnDisplayLayer(self, event):
+        """Display layer in current graphics view"""
+        layerName = []
+        if self.selected_location.label == gisenv(
+        )['LOCATION_NAME'] and self.selected_mapset:
+            string = self.selected_layer.label + '@' + self.selected_mapset.label
+            layerName.append(string)
+            label = _("Displaying {name}...").format(name=string)
+            self.showNotification.emit(message=label)
+            label = "d." + self.selected_type.label[:4] + " --q map=" + string + \
+                    _(" -- completed. Go to Layers tab for further operations.")
+            if self.selected_type.label == 'vector':
+                self._giface.lmgr.AddMaps(layerName, 'vector', True)
+            elif self.selected_type.label == 'raster':
+                self._giface.lmgr.AddMaps(layerName, 'raster', True)
+            else:
+                self._giface.lmgr.AddMaps(layerName, 'raster_3d', True)
+                # generate this message (command) automatically?
+                label = "d.rast --q map=" + string + _(
+                    " -- completed. Go to Layers tab for further operations.")
+            self.showNotification.emit(message=label)
+            Debug.msg(1, "LAYER " + self.selected_layer.label + " DISPLAYED")
+        else:
+            GError(
+                _("Failed to display layer: not in current mapset or invalid layer"),
+                parent=self)
+
+    def OnBeginDrag(self, node, event):
+        """Just copy necessary data"""
+        self.DefineItems(node)
+        if self.selected_layer and not (self._restricted and gisenv()[
+                                        'LOCATION_NAME'] != self.selected_location.label):
+            event.Allow()
+            self.OnCopyMap(event)
+            Debug.msg(1, "DRAG")
+        else:
+            event.Veto()
+
+    def OnEndDrag(self, node, event):
+        """Copy layer into target"""
+
+        if not wx.GetMouseState().ControlDown():
+            GMessage(_("Moving maps not implemented"), parent=self)
+            event.Veto()
+            return
+        if node:
+            self.DefineItems(node)
+            if self._restricted and gisenv(
+            )['MAPSET'] != self.selected_mapset.label:
+                GMessage(
+                    _("Maps can be copied only to current mapset"),
+                    parent=self)
+                event.Veto()
+                return
+            if self.selected_location == self.copy_location and self.selected_mapset:
+                event.Allow()
+                self.OnPasteMap(event)
+                Debug.msg(1, "DROP DONE")
+            else:
+                event.Veto()
+
+    def OnSwitchLocationMapset(self, event):
+        genv = gisenv()
+        if self.selected_location.label == genv['LOCATION_NAME']:
+            self.changeMapset.emit(mapset=self.selected_mapset.label)
+        else:
+            self.changeLocation.emit(mapset=self.selected_mapset.label, location=self.selected_location.label)
+        self.ExpandCurrentMapset()
+
+    def Filter(self, text):
+        """Filter tree based on name and type."""
+        text = text.strip()
+        if len(text.split(':')) > 1:
+            name = text.split(':')[1].strip()
+            elem = text.split(':')[0].strip()
+            if 'r' == elem:
+                element = 'raster'
+            elif 'r3' == elem:
+                element = 'raster_3d'
+            elif 'v' == elem:
+                element = 'vector'
+            else:
+                element = None
+        else:
+            element = None
+            name = text.strip()
+
+        self._model = filterModel(self._orig_model, name=name, element=element)
+        self.RefreshItems()
+        self.ExpandCurrentMapset()
+
+    def _getNewMapName(self, message, title, value, element, mapset, env):
+        """Dialog for simple text entry"""
+        dlg = NameEntryDialog(parent=self, message=message, caption=title,
+                              element=element, env=env, mapset=mapset)
+        dlg.SetValue(value)
+        if dlg.ShowModal() == wx.ID_OK:
+            name = dlg.GetValue()
+        else:
+            name = None
+        dlg.Destroy()
+
+        return name
+
+    def _confirmDialog(self, question, title):
+        """Confirm dialog"""
+        dlg = wx.MessageDialog(self, question, title, wx.YES_NO)
+        res = dlg.ShowModal()
+        dlg.Destroy()
+        return res
+
+    def _popupMenuLayer(self):
+        """Create popup menu for layers"""
+        menu = wx.Menu()
+        genv = gisenv()
+        if self._restricted:
+            currentMapset = currentLocation = False
+            if self.selected_location.label == genv['LOCATION_NAME']:
+                currentLocation = True
+                if self.selected_mapset.label == genv['MAPSET']:
+                    currentMapset = True
+        else:
+            currentMapset = currentLocation = True
+
+        item = wx.MenuItem(menu, wx.NewId(), _("&Copy"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnCopyMap, item)
+        item.Enable(currentLocation)
+
+        item = wx.MenuItem(menu, wx.NewId(), _("&Paste"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnPasteMap, item)
+        if not(
+                currentLocation and self.copy_layer and self.selected_location ==
+                self.copy_location):
+            item.Enable(False)
+
+        item = wx.MenuItem(menu, wx.NewId(), _("&Delete"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnDeleteMap, item)
+        item.Enable(currentMapset)
+
+        item = wx.MenuItem(menu, wx.NewId(), _("&Rename"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnRenameMap, item)
+        item.Enable(currentMapset)
+
+        if not isinstance(self._giface, StandaloneGrassInterface) and \
+           self.selected_location.label == genv['LOCATION_NAME']:
+            menu.AppendSeparator()
+            item = wx.MenuItem(menu, wx.NewId(), _("&Display layer"))
+            menu.AppendItem(item)
+            self.Bind(wx.EVT_MENU, self.OnDisplayLayer, item)
+
+        self.PopupMenu(menu)
+        menu.Destroy()
+
+    def _popupMenuMapset(self):
+        """Create popup menu for mapsets"""
+        menu = wx.Menu()
+        genv = gisenv()
+
+        item = wx.MenuItem(menu, wx.NewId(), _("&Paste"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnPasteMap, item)
+        if not (self.copy_layer and self.selected_location == self.copy_location):
+            item.Enable(False)
+
+        item = wx.MenuItem(menu, wx.NewId(), _("&Switch mapset"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnSwitchLocationMapset, item)
+        if (self.selected_location.label == genv['LOCATION_NAME']
+                and self.selected_mapset.label == genv['MAPSET']):
+            item.Enable(False)
+        self.PopupMenu(menu)
+        menu.Destroy()
+
+    def _popupMenuElement(self):
+        """Create popup menu for elements"""
+        menu = wx.Menu()
+        item = wx.MenuItem(menu, wx.NewId(), _("&Paste"))
+        menu.AppendItem(item)
+        self.Bind(wx.EVT_MENU, self.OnPasteMap, item)
+        if not (self.copy_layer and self.selected_location == self.copy_location):
+            item.Enable(False)
+
+        self.PopupMenu(menu)
+        menu.Destroy()
diff --git a/gui/wxpython/dbmgr/__init__.py b/gui/wxpython/dbmgr/__init__.py
index cf25c6f..e57d7d1 100644
--- a/gui/wxpython/dbmgr/__init__.py
+++ b/gui/wxpython/dbmgr/__init__.py
@@ -5,4 +5,4 @@ all = [
     'manager',
     'base',
     'dialogs',
-    ]
+]
diff --git a/gui/wxpython/dbmgr/base.py b/gui/wxpython/dbmgr/base.py
index db1dbb2..27196d6 100644
--- a/gui/wxpython/dbmgr/base.py
+++ b/gui/wxpython/dbmgr/base.py
@@ -40,24 +40,26 @@ import math
 from core import globalvar
 import wx
 import wx.lib.mixins.listctrl as listmix
-import wx.lib.flatnotebook    as FN
+import wx.lib.flatnotebook as FN
 import wx.lib.scrolledpanel as scrolled
 
 import grass.script as grass
 
 from dbmgr.sqlbuilder import SQLBuilderSelect, SQLBuilderUpdate
-from core.gcmd        import RunCommand, GException, GError, GMessage, GWarning
-from core.utils       import ListOfCatsToRange, _
+from core.gcmd import RunCommand, GException, GError, GMessage, GWarning
+from core.utils import ListOfCatsToRange, _
 from gui_core.dialogs import CreateNewVector
-from dbmgr.vinfo      import VectorDBInfo, GetUnicodeValue, CreateDbInfoDesc
-from core.debug       import Debug
-from dbmgr.dialogs    import ModifyTableRecord, AddColumnDialog
-from core.settings    import UserSettings
+from dbmgr.vinfo import VectorDBInfo, GetUnicodeValue, CreateDbInfoDesc
+from core.debug import Debug
+from dbmgr.dialogs import ModifyTableRecord, AddColumnDialog
+from core.settings import UserSettings
+
 
 class Log:
     """The log output SQL is redirected to the status bar of the
     containing frame.
     """
+
     def __init__(self, parent):
         self.parent = parent
 
@@ -66,66 +68,70 @@ class Log:
         if self.parent:
             self.parent.SetStatusText(text_string.strip())
 
+
 class VirtualAttributeList(wx.ListCtrl,
                            listmix.ListCtrlAutoWidthMixin,
                            listmix.ColumnSorterMixin):
     """Support virtual list class for Attribute Table Manager (browse page)
     """
+
     def __init__(self, parent, log, dbMgrData, layer, pages):
         # initialize variables
-        self.parent  = parent
-        self.log     = log
+        self.parent = parent
+        self.log = log
         self.dbMgrData = dbMgrData
         self.mapDBInfo = self.dbMgrData['mapDBInfo']
-        self.layer   = layer
+        self.layer = layer
         self.pages = pages
 
         self.fieldCalc = None
-        self.fieldStats = None      
-        self.columns = {} # <- LoadData()
-        
+        self.fieldStats = None
+        self.columns = {}  # <- LoadData()
+
         self.sqlFilter = {}
 
-        wx.ListCtrl.__init__(self, parent = parent, id = wx.ID_ANY,
-                             style = wx.LC_REPORT | wx.LC_HRULES |
-                             wx.LC_VRULES | wx.LC_VIRTUAL | wx.LC_SORT_ASCENDING)
-        
+        wx.ListCtrl.__init__(self, parent=parent, id=wx.ID_ANY,
+                             style=wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES |
+                             wx.LC_VIRTUAL | wx.LC_SORT_ASCENDING)
+
         try:
             keyColumn = self.LoadData(layer)
         except GException as e:
-            GError(parent = self,
-                   message = e.value)
+            GError(parent=self,
+                   message=e.value)
             return
-        
+
         # add some attributes (colourful background for each item rows)
         self.attr1 = wx.ListItemAttr()
-        self.attr1.SetBackgroundColour(wx.Colour(238,238,238))
+        self.attr1.SetBackgroundColour(wx.Colour(238, 238, 238))
         self.attr2 = wx.ListItemAttr()
         self.attr2.SetBackgroundColour("white")
         self.il = wx.ImageList(16, 16)
-        self.sm_up = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_GO_UP,   wx.ART_TOOLBAR,
-                                                          (16,16)))
-        self.sm_dn = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_GO_DOWN, wx.ART_TOOLBAR,
-                                                          (16,16)))
+        self.sm_up = self.il.Add(
+            wx.ArtProvider_GetBitmap(
+                wx.ART_GO_UP, wx.ART_TOOLBAR, (16, 16)))
+        self.sm_dn = self.il.Add(
+            wx.ArtProvider_GetBitmap(
+                wx.ART_GO_DOWN, wx.ART_TOOLBAR, (16, 16)))
         self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
-        
+
         # setup mixins
         listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.ColumnSorterMixin.__init__(self, len(self.columns))
 
         # sort item by category (id)
         if keyColumn > -1:
-            self.SortListItems(col = keyColumn, ascending = True) 
+            self.SortListItems(col=keyColumn, ascending=True)
         elif keyColumn:
-            self.SortListItems(col = 0, ascending = True) 
-        
+            self.SortListItems(col=0, ascending=True)
+
         # events
-        self.Bind(wx.EVT_LIST_ITEM_SELECTED,   self.OnItemSelected)
+        self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
         self.Bind(wx.EVT_LIST_ITEM_DESELECTED, self.OnItemDeselected)
-        self.Bind(wx.EVT_LIST_COL_CLICK,       self.OnColumnSort)     
-        self.Bind(wx.EVT_LIST_COL_RIGHT_CLICK, self.OnColumnMenu)     
-        
-    def Update(self, mapDBInfo = None):
+        self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumnSort)
+        self.Bind(wx.EVT_LIST_COL_RIGHT_CLICK, self.OnColumnMenu)
+
+    def Update(self, mapDBInfo=None):
         """Update list according new mapDBInfo description"""
         if mapDBInfo:
             self.mapDBInfo = mapDBInfo
@@ -133,46 +139,46 @@ class VirtualAttributeList(wx.ListCtrl,
         else:
             self.LoadData(self.layer, **self.sqlFilter)
 
-    def LoadData(self, layer, columns = None, where = None, sql = None):
+    def LoadData(self, layer, columns=None, where=None, sql=None):
         """Load data into list
 
         :param layer: layer number
         :param columns: list of columns for output (-> v.db.select)
         :param where: where statement (-> v.db.select)
         :param sql: full sql statement (-> db.select)
-        
-        :return: id of key column 
+
+        :return: id of key column
         :return: -1 if key column is not displayed
         """
         self.log.write(_("Loading data..."))
-        
-        tableName    = self.mapDBInfo.layers[layer]['table']
-        keyColumn    = self.mapDBInfo.layers[layer]['key']
+
+        tableName = self.mapDBInfo.layers[layer]['table']
+        keyColumn = self.mapDBInfo.layers[layer]['key']
         try:
             self.columns = self.mapDBInfo.tables[tableName]
         except KeyError:
             raise GException(_("Attribute table <%s> not found. "
-                                    "For creating the table switch to "
-                                    "'Manage layers' tab.") % tableName)
-        
+                               "For creating the table switch to "
+                               "'Manage layers' tab.") % tableName)
+
         if not columns:
             columns = self.mapDBInfo.GetColumns(tableName)
         else:
             all = self.mapDBInfo.GetColumns(tableName)
             for col in columns:
                 if col not in all:
-                    GError(parent = self,
-                           message = _("Column <%(column)s> not found in "
-                                       "in the table <%(table)s>.") % \
-                               { 'column' : col, 'table' : tableName })
+                    GError(parent=self,
+                           message=_("Column <%(column)s> not found in "
+                                     "in the table <%(table)s>.") %
+                           {'column': col, 'table': tableName})
                     return
-        
+
         try:
             # for maps connected via v.external
             keyId = columns.index(keyColumn)
         except:
             keyId = -1
-        
+
         # read data
         # FIXME: Max. number of rows, while the GUI is still usable
 
@@ -184,46 +190,46 @@ class VirtualAttributeList(wx.ListCtrl,
         # highly unlikely to exist naturally.
         fs = '{_sep_}'
 
-        outFile = tempfile.NamedTemporaryFile(mode = 'w+b')
+        outFile = tempfile.NamedTemporaryFile(mode='w+b')
 
-        cmdParams = dict(quiet = True,
-                         parent = self,
-                         flags = 'c',
-                         separator = fs)
+        cmdParams = dict(quiet=True,
+                         parent=self,
+                         flags='c',
+                         separator=fs)
 
         if sql:
-            cmdParams.update(dict(sql = sql,
-                                  output = outFile.name,
-                                  overwrite = True))
+            cmdParams.update(dict(sql=sql,
+                                  output=outFile.name,
+                                  overwrite=True))
             ret = RunCommand('db.select',
                              **cmdParams)
-            self.sqlFilter = {"sql" : sql}
+            self.sqlFilter = {"sql": sql}
         else:
-            cmdParams.update(dict(map = self.mapDBInfo.map,
-                                  layer = layer,
-                                  where = where,
-                                  stdout = outFile))
-            
-            self.sqlFilter = {"where" : where}
+            cmdParams.update(dict(map=self.mapDBInfo.map,
+                                  layer=layer,
+                                  where=where,
+                                  stdout=outFile))
+
+            self.sqlFilter = {"where": where}
 
             if columns:
-                cmdParams.update(dict(columns = ','.join(columns)))
+                cmdParams.update(dict(columns=','.join(columns)))
 
             ret = RunCommand('v.db.select',
                              **cmdParams)
-        
+
         # These two should probably be passed to init more cleanly
         # setting the numbers of items = number of elements in the dictionary
-        self.itemDataMap  = {}
+        self.itemDataMap = {}
         self.itemIndexMap = []
-        self.itemCatsMap  = {}
-        
+        self.itemCatsMap = {}
+
         self.DeleteAllItems()
-        
+
         # self.ClearAll()
         for i in range(self.GetColumnCount()):
             self.DeleteColumn(0)
-        
+
         i = 0
         info = wx.ListItem()
         info.m_mask = wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT
@@ -233,18 +239,19 @@ class VirtualAttributeList(wx.ListCtrl,
             info.m_text = column
             self.InsertColumnInfo(i, info)
             i += 1
-            
+
             if i >= 256:
                 self.log.write(_("Can display only 256 columns."))
-        
+
         i = 0
         outFile.seek(0)
-        
+
         while True:
             # os.linesep doesn't work here (MSYS)
             # not sure what the replace is for?
             # but we need strip to get rid of the ending newline
-            # which on windows leaves \r in a last empty attribute table cell and causes error
+            # which on windows leaves \r in a last empty attribute table cell
+            # and causes error
             record = outFile.readline().strip().replace('\n', '')
 
             if not record:
@@ -252,64 +259,67 @@ class VirtualAttributeList(wx.ListCtrl,
 
             record = record.split(fs)
             if len(columns) != len(record):
-                GError(parent = self,
-                       message = _("Inconsistent number of columns "
-                                   "in the table <%(table)s>.") % \
-                               {'table' : tableName })
-                self.columns = {} # because of IsEmpty method
+                GError(parent=self,
+                       message=_("Inconsistent number of columns "
+                                 "in the table <%(table)s>.") %
+                       {'table': tableName})
+                self.columns = {}  # because of IsEmpty method
                 return
 
             self.AddDataRow(i, record, columns, keyId)
-            
+
             i += 1
             if i >= 100000:
                 self.log.write(_("Viewing limit: 100000 records."))
                 break
-        
+
         self.SetItemCount(i)
-        
+
         if where:
             item = -1
             while True:
                 item = self.GetNextItem(item)
                 if item == -1:
                     break
-                self.SetItemState(item, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
-        
+                self.SetItemState(
+                    item,
+                    wx.LIST_STATE_SELECTED,
+                    wx.LIST_STATE_SELECTED)
+
         i = 0
         for col in columns:
-            width = self.columns[col]['length'] * 6 # FIXME
+            width = self.columns[col]['length'] * 6  # FIXME
             if width < 60:
                 width = 60
             if width > 300:
                 width = 300
-            self.SetColumnWidth(col = i, width = width)
+            self.SetColumnWidth(col=i, width=width)
             i += 1
-        
+
         self.SendSizeEvent()
-        
-        self.log.write(_("Number of loaded records: %d") % \
-                           self.GetItemCount())
-        
+
+        self.log.write(_("Number of loaded records: %d") %
+                       self.GetItemCount())
+
         return keyId
-    
+
     def AddDataRow(self, i, record, columns, keyId):
         """Add row to the data list"""
         self.itemDataMap[i] = []
         keyColumn = self.mapDBInfo.layers[self.layer]['key']
         j = 0
         cat = None
-        
+
         if keyColumn == 'OGC_FID':
-            self.itemDataMap[i].append(i+1)
+            self.itemDataMap[i].append(i + 1)
             j += 1
             cat = i + 1
-        
+
         for value in record:
             if self.columns[columns[j]]['ctype'] != types.StringType:
                 try:
-                    ### casting disabled (2009/03)
-                    ### self.itemDataMap[i].append(self.columns[columns[j]]['ctype'](value))
+                    # casting disabled (2009/03)
+                    # self.itemDataMap[i].append(self.columns[columns[j]]['ctype'](value))
                     self.itemDataMap[i].append(value)
                 except ValueError:
                     self.itemDataMap[i].append(_('Unknown value'))
@@ -320,32 +330,36 @@ class VirtualAttributeList(wx.ListCtrl,
                 except UnicodeDecodeError:
                     self.itemDataMap[i].append(_("Unable to decode value. "
                                                  "Set encoding in GUI preferences ('Attributes')."))
-                
+
             if not cat and keyId > -1 and keyId == j:
                 try:
-                    cat = self.columns[columns[j]]['ctype'] (value)
+                    cat = self.columns[columns[j]]['ctype'](value)
                 except ValueError as e:
                     cat = -1
-                    GError(parent = self,
-                           message = _("Error loading attribute data. "
-                                       "Record number: %(rec)d. Unable to convert value '%(val)s' in "
-                                       "key column (%(key)s) to integer.\n\n"
-                                       "Details: %(detail)s") % \
-                               { 'rec' : i + 1, 'val' : value,
-                                 'key' : keyColumn, 'detail' : e})
+                    GError(
+                        parent=self,
+                        message=_(
+                            "Error loading attribute data. "
+                            "Record number: %(rec)d. Unable to convert value '%(val)s' in "
+                            "key column (%(key)s) to integer.\n\n"
+                            "Details: %(detail)s") % {
+                            'rec': i + 1,
+                            'val': value,
+                            'key': keyColumn,
+                            'detail': e})
             j += 1
-        
+
         self.itemIndexMap.append(i)
-        if keyId > -1: # load cats only when LoadData() is called first time
+        if keyId > -1:  # load cats only when LoadData() is called first time
             self.itemCatsMap[i] = cat
-        
+
     def OnItemSelected(self, event):
         """Item selected. Add item to selected cats..."""
         #         cat = int(self.GetItemText(event.m_itemIndex))
         #         if cat not in self.selectedCats:
         #             self.selectedCats.append(cat)
         #             self.selectedCats.sort()
-        
+
         event.Skip()
 
     def OnItemDeselected(self, event):
@@ -372,7 +386,7 @@ class VirtualAttributeList(wx.ListCtrl,
         cats = []
         for item in range(self.GetItemCount()):
             cats.append(self.GetItemText(item))
-        
+
         return cats
 
     def GetColumnText(self, index, col):
@@ -392,7 +406,7 @@ class VirtualAttributeList(wx.ListCtrl,
 
     def OnGetItemAttr(self, item):
         """Get item attributes"""
-        if ( item % 2) == 0:
+        if (item % 2) == 0:
             return self.attr2
         else:
             return self.attr1
@@ -400,70 +414,100 @@ class VirtualAttributeList(wx.ListCtrl,
     def OnColumnMenu(self, event):
         """Column heading right mouse button -> pop-up menu"""
         self._col = event.GetColumn()
-        
+
         popupMenu = wx.Menu()
 
-        if not hasattr (self, "popupID"):
-            self.popupId = { 'sortAsc' : wx.NewId(),
-                             'sortDesc' : wx.NewId(),
-                             'calculate' : wx.NewId(),
-                             'area' : wx.NewId(),
-                             'length' : wx.NewId(),
-                             'compact' : wx.NewId(),
-                             'fractal' : wx.NewId(),
-                             'perimeter' : wx.NewId(),
-                             'ncats' : wx.NewId(),
-                             'slope' : wx.NewId(),
-                             'lsin' : wx.NewId(),
-                             'lazimuth' : wx.NewId(),
-                             'calculator' : wx.NewId(),
-                             'stats' : wx.NewId() }
-        
-        popupMenu.Append(self.popupId['sortAsc'], text = _("Sort ascending"))
-        popupMenu.Append(self.popupId['sortDesc'], text = _("Sort descending"))
+        if not hasattr(self, "popupID"):
+            self.popupId = {'sortAsc': wx.NewId(),
+                            'sortDesc': wx.NewId(),
+                            'calculate': wx.NewId(),
+                            'area': wx.NewId(),
+                            'length': wx.NewId(),
+                            'compact': wx.NewId(),
+                            'fractal': wx.NewId(),
+                            'perimeter': wx.NewId(),
+                            'ncats': wx.NewId(),
+                            'slope': wx.NewId(),
+                            'lsin': wx.NewId(),
+                            'lazimuth': wx.NewId(),
+                            'calculator': wx.NewId(),
+                            'stats': wx.NewId()}
+
+        popupMenu.Append(self.popupId['sortAsc'], text=_("Sort ascending"))
+        popupMenu.Append(self.popupId['sortDesc'], text=_("Sort descending"))
         popupMenu.AppendSeparator()
         subMenu = wx.Menu()
-        popupMenu.AppendMenu(self.popupId['calculate'], _("Calculate (only numeric columns)"),
-                             subMenu)
-        popupMenu.Append(self.popupId['calculator'], text = _("Field calculator"))
+        popupMenu.AppendMenu(self.popupId['calculate'], _(
+            "Calculate (only numeric columns)"), subMenu)
+        popupMenu.Append(
+            self.popupId['calculator'],
+            text=_("Field calculator"))
         popupMenu.AppendSeparator()
-        popupMenu.Append(self.popupId['stats'], text = _("Statistics"))
-        
+        popupMenu.Append(self.popupId['stats'], text=_("Statistics"))
+
         if not self.pages['manageTable']:
             popupMenu.AppendSeparator()
             self.popupId['addCol'] = wx.NewId()
-            popupMenu.Append(self.popupId['addCol'], text = _("Add column"))
+            popupMenu.Append(self.popupId['addCol'], text=_("Add column"))
             if not self.dbMgrData['editable']:
                 popupMenu.Enable(self.popupId['addCol'], False)
 
         if not self.dbMgrData['editable']:
             popupMenu.Enable(self.popupId['calculator'], False)
-          
-        if not self.dbMgrData['editable'] or \
-                self.columns[self.GetColumn(self._col).GetText()]['ctype'] not in (types.IntType, types.FloatType):
+
+        if not self.dbMgrData['editable'] or self.columns[
+                self.GetColumn(self._col).GetText()]['ctype'] not in (
+                types.IntType, types.FloatType):
             popupMenu.Enable(self.popupId['calculate'], False)
-        
-        subMenu.Append(self.popupId['area'],  text = _("Area size"))
-        subMenu.Append(self.popupId['length'],  text = _("Line length"))
-        subMenu.Append(self.popupId['compact'],  text = _("Compactness of an area"))
-        subMenu.Append(self.popupId['fractal'],  text = _("Fractal dimension of boundary defining a polygon"))
-        subMenu.Append(self.popupId['perimeter'],  text = _("Perimeter length of an area"))
-        subMenu.Append(self.popupId['ncats'],  text = _("Number of features for each category"))
-        subMenu.Append(self.popupId['slope'], text = _("Slope steepness of 3D line"))
-        subMenu.Append(self.popupId['lsin'], text = _("Line sinuousity"))
-        subMenu.Append(self.popupId['lazimuth'], text = _("Line azimuth"))
-        
-        self.Bind (wx.EVT_MENU, self.OnColumnSortAsc,  id = self.popupId['sortAsc'])
-        self.Bind (wx.EVT_MENU, self.OnColumnSortDesc, id = self.popupId['sortDesc'])
-        self.Bind(wx.EVT_MENU, self.OnFieldCalculator, id = self.popupId['calculator'])
-        self.Bind(wx.EVT_MENU, self.OnFieldStatistics, id = self.popupId['stats'])
-        if not self.pages['manageTable']:
-            self.Bind(wx.EVT_MENU, self.OnAddColumn, id = self.popupId['addCol'])
 
-        for id in (self.popupId['area'], self.popupId['length'], self.popupId['compact'],
-                   self.popupId['fractal'], self.popupId['perimeter'], self.popupId['ncats'],
-                   self.popupId['slope'], self.popupId['lsin'], self.popupId['lazimuth']):
-            self.Bind(wx.EVT_MENU, self.OnColumnCompute, id = id)
+        subMenu.Append(self.popupId['area'], text=_("Area size"))
+        subMenu.Append(self.popupId['length'], text=_("Line length"))
+        subMenu.Append(
+            self.popupId['compact'],
+            text=_("Compactness of an area"))
+        subMenu.Append(self.popupId['fractal'], text=_(
+            "Fractal dimension of boundary defining a polygon"))
+        subMenu.Append(
+            self.popupId['perimeter'],
+            text=_("Perimeter length of an area"))
+        subMenu.Append(self.popupId['ncats'], text=_(
+            "Number of features for each category"))
+        subMenu.Append(
+            self.popupId['slope'],
+            text=_("Slope steepness of 3D line"))
+        subMenu.Append(self.popupId['lsin'], text=_("Line sinuousity"))
+        subMenu.Append(self.popupId['lazimuth'], text=_("Line azimuth"))
+
+        self.Bind(
+            wx.EVT_MENU,
+            self.OnColumnSortAsc,
+            id=self.popupId['sortAsc'])
+        self.Bind(
+            wx.EVT_MENU,
+            self.OnColumnSortDesc,
+            id=self.popupId['sortDesc'])
+        self.Bind(
+            wx.EVT_MENU,
+            self.OnFieldCalculator,
+            id=self.popupId['calculator'])
+        self.Bind(
+            wx.EVT_MENU,
+            self.OnFieldStatistics,
+            id=self.popupId['stats'])
+        if not self.pages['manageTable']:
+            self.Bind(wx.EVT_MENU, self.OnAddColumn, id=self.popupId['addCol'])
+
+        for id in (
+                self.popupId['area'],
+                self.popupId['length'],
+                self.popupId['compact'],
+                self.popupId['fractal'],
+                self.popupId['perimeter'],
+                self.popupId['ncats'],
+                self.popupId['slope'],
+                self.popupId['lsin'],
+                self.popupId['lazimuth']):
+            self.Bind(wx.EVT_MENU, self.OnColumnCompute, id=id)
 
         self.PopupMenu(popupMenu)
         popupMenu.Destroy()
@@ -471,25 +515,25 @@ class VirtualAttributeList(wx.ListCtrl,
     def OnColumnSort(self, event):
         """Column heading left mouse button -> sorting"""
         self._col = event.GetColumn()
-        
+
         self.ColumnSort()
-        
+
         event.Skip()
 
     def OnColumnSortAsc(self, event):
         """Sort values of selected column (ascending)"""
-        self.SortListItems(col = self._col, ascending = True)
+        self.SortListItems(col=self._col, ascending=True)
         event.Skip()
 
     def OnColumnSortDesc(self, event):
         """Sort values of selected column (descending)"""
-        self.SortListItems(col = self._col, ascending = False)
+        self.SortListItems(col=self._col, ascending=False)
         event.Skip()
-        
+
     def OnColumnCompute(self, event):
         """Compute values of selected column"""
         id = event.GetId()
-        
+
         option = None
         if id == self.popupId['area']:
             option = 'area'
@@ -509,19 +553,19 @@ class VirtualAttributeList(wx.ListCtrl,
             option = 'sinuous'
         elif id == self.popupId['lazimuth']:
             option = 'azimuth'
-        
+
         if not option:
             return
-        
+
         RunCommand('v.to.db',
-                   parent = self.parent,
-                   map = self.mapDBInfo.map,
-                   layer = self.layer, 
-                   option = option,
-                   columns = self.GetColumn(self._col).GetText())
-        
+                   parent=self.parent,
+                   map=self.mapDBInfo.map,
+                   layer=self.layer,
+                   option=option,
+                   columns=self.GetColumn(self._col).GetText())
+
         self.LoadData(self.layer)
-        
+
     def ColumnSort(self):
         """Sort values of selected column (self._col)"""
         # remove duplicated arrow symbol from column header
@@ -532,14 +576,17 @@ class VirtualAttributeList(wx.ListCtrl,
         for column in range(self.GetColumnCount()):
             info.m_text = self.GetColumn(column).GetText()
             self.SetColumn(column, info)
-        
+
     def OnFieldCalculator(self, event):
         """Calls SQLBuilderUpdate instance"""
         if not self.fieldCalc:
-            self.fieldCalc = SQLBuilderUpdate(parent = self, id = wx.ID_ANY,
-                                              vectmap = self.dbMgrData['vectName'],
-                                              layer = self.layer,
-                                              column = self.GetColumn(self._col).GetText())
+            self.fieldCalc = SQLBuilderUpdate(
+                parent=self,
+                id=wx.ID_ANY,
+                vectmap=self.dbMgrData['vectName'],
+                layer=self.layer,
+                column=self.GetColumn(
+                    self._col).GetText())
             self.fieldCalc.Show()
         else:
             self.fieldCalc.Raise()
@@ -547,31 +594,34 @@ class VirtualAttributeList(wx.ListCtrl,
     def OnFieldStatistics(self, event):
         """Calls FieldStatistics instance"""
         if not self.fieldStats:
-            self.fieldStats = FieldStatistics(parent = self, id = wx.ID_ANY)
+            self.fieldStats = FieldStatistics(parent=self, id=wx.ID_ANY)
             self.fieldStats.Show()
         else:
             self.fieldStats.Raise()
 
         selLayer = self.dbMgrData['mapDBInfo'].layers[self.layer]
-        self.fieldStats.Update(driver = selLayer['driver'],
-                               database = selLayer['database'],
-                               table = selLayer['table'],
-                               column = self.GetColumn(self._col).GetText())
+        self.fieldStats.Update(driver=selLayer['driver'],
+                               database=selLayer['database'],
+                               table=selLayer['table'],
+                               column=self.GetColumn(self._col).GetText())
 
     def OnAddColumn(self, event):
         """Add column into table"""
         table = self.dbMgrData['mapDBInfo'].layers[self.layer]['table']
-        dlg = AddColumnDialog(parent = self, title = _('Add column to table <%s>') % table)
+        dlg = AddColumnDialog(
+            parent=self,
+            title=_('Add column to table <%s>') %
+            table)
         if not dlg:
             return
         if dlg.ShowModal() == wx.ID_OK:
             data = dlg.GetData()
-            self.pages['browse'].AddColumn(name = data['name'],
-                                           ctype = data['ctype'],
-                                           length = data['length'])
+            self.pages['browse'].AddColumn(name=data['name'],
+                                           ctype=data['ctype'],
+                                           length=data['length'])
         dlg.Destroy()
 
-    def SortItems(self, sorter = cmp):
+    def SortItems(self, sorter=cmp):
         """Sort items"""
         items = list(self.itemDataMap.keys())
         items.sort(self.Sorter)
@@ -579,27 +629,31 @@ class VirtualAttributeList(wx.ListCtrl,
 
         # redraw the list
         self.Refresh()
-        
+
     def Sorter(self, key1, key2):
         colName = self.GetColumn(self._col).GetText()
         ascending = self._colSortFlag[self._col]
         try:
-            item1 = self.columns[colName]["ctype"](self.itemDataMap[key1][self._col])
-            item2 = self.columns[colName]["ctype"](self.itemDataMap[key2][self._col])
+            item1 = self.columns[colName]["ctype"](
+                self.itemDataMap[key1][self._col])
+            item2 = self.columns[colName]["ctype"](
+                self.itemDataMap[key2][self._col])
         except ValueError:
             item1 = self.itemDataMap[key1][self._col]
             item2 = self.itemDataMap[key2][self._col]
 
-        if type(item1) == types.StringType or type(item2) == types.StringTypes:
+        if isinstance(
+                item1, types.StringType) or isinstance(
+                item2, types.StringTypes):
             cmpVal = locale.strcoll(str(item1), str(item2))
         else:
             cmpVal = cmp(item1, item2)
 
-
-        # If the items are equal then pick something else to make the sort value unique
+        # If the items are equal then pick something else to make the sort
+        # value unique
         if cmpVal == 0:
-            cmpVal = apply(cmp, self.GetSecondarySortValues(self._col, key1, key2))
-        
+            cmpVal = cmp(*self.GetSecondarySortValues(self._col, key1, key2))
+
         if ascending:
             return cmpVal
         else:
@@ -613,22 +667,24 @@ class VirtualAttributeList(wx.ListCtrl,
         """Check if list if empty"""
         if self.columns:
             return False
-        
+
         return True
 
+
 class DbMgrBase:
-    def __init__(self, id = wx.ID_ANY, mapdisplay = None,
-                 vectorName = None, item = None, giface = None,
-                 statusbar = None, 
+
+    def __init__(self, id=wx.ID_ANY, mapdisplay=None,
+                 vectorName=None, item=None, giface=None,
+                 statusbar=None,
                  **kwargs):
-        """Base class, which enables usage of separate pages of Attribute Table Manager 
+        """Base class, which enables usage of separate pages of Attribute Table Manager
 
         :param id: window id
         :param mapdisplay: MapFrame instance
         :param vectorName: name of vector map
         :param item: item from Layer Tree
         :param log: log window
-        :param statusbar: widget with statusbar 
+        :param statusbar: widget with statusbar
         :param kwagrs: other wx.Frame's arguments
         """
 
@@ -639,7 +695,7 @@ class DbMgrBase:
 
         self.mapdisplay = mapdisplay
 
-        if  self.mapdisplay:
+        if self.mapdisplay:
             self.map = mapdisplay.Map
         else:
             self.map = None
@@ -647,35 +703,39 @@ class DbMgrBase:
         if not self.mapdisplay:
             pass
         elif self.mapdisplay.tree and \
-            self.dbMgrData['treeItem'] and not self.dbMgrData['vectName']:
+                self.dbMgrData['treeItem'] and not self.dbMgrData['vectName']:
             maptree = self.mapdisplay.tree
-            name = maptree.GetLayerInfo(self.dbMgrData['treeItem'], key = 'maplayer').GetName()
+            name = maptree.GetLayerInfo(
+                self.dbMgrData['treeItem'],
+                key='maplayer').GetName()
             self.dbMgrData['vectName'] = name
-        
+
         # vector attributes can be changed only if vector map is in
         # the current mapset
         mapInfo = None
         if self.dbMgrData['vectName']:
-            mapInfo = grass.find_file(name = self.dbMgrData['vectName'], element = 'vector')
+            mapInfo = grass.find_file(
+                name=self.dbMgrData['vectName'],
+                element='vector')
         if not mapInfo or mapInfo['mapset'] != grass.gisenv()['MAPSET']:
             self.dbMgrData['editable'] = False
         else:
             self.dbMgrData['editable'] = True
-        
+
         self.giface = giface
 
         # status bar log class
-        self.log = Log(statusbar) # -> statusbar
+        self.log = Log(statusbar)  # -> statusbar
 
         # -> layers / tables description
         self.dbMgrData['mapDBInfo'] = VectorDBInfo(self.dbMgrData['vectName'])
 
-        # store information, which pages were initialized 
+        # store information, which pages were initialized
         self.pages = {
-                        'browse' : None,
-                        'manageTable' : None,
-                        'manageLayer' : None
-                     }
+            'browse': None,
+            'manageTable': None,
+            'manageLayer': None
+        }
 
     def ChangeVectorMap(self, vectorName):
         """Change of vector map
@@ -683,7 +743,7 @@ class DbMgrBase:
         Does not import layers of new vector map into pages.
         For the import use methods addLayer in DbMgrBrowsePage and DbMgrTablesPage
         """
-        if self.pages['browse']: 
+        if self.pages['browse']:
             self.pages['browse'].DeleteAllPages()
         if self.pages['manageTable']:
             self.pages['manageTable'].DeleteAllPages()
@@ -695,7 +755,9 @@ class DbMgrBase:
 
         # vector attributes can be changed only if vector map is in
         # the current mapset
-        mapInfo = grass.find_file(name = self.dbMgrData['vectName'], element = 'vector')
+        mapInfo = grass.find_file(
+            name=self.dbMgrData['vectName'],
+            element='vector')
         if not mapInfo or mapInfo['mapset'] != grass.gisenv()['MAPSET']:
             self.dbMgrData['editable'] = False
         else:
@@ -703,9 +765,9 @@ class DbMgrBase:
 
         # 'manage layers page
         if self.pages['manageLayer']:
-            self.pages['manageLayer'].UpdatePage()       
+            self.pages['manageLayer'].UpdatePage()
 
-    def CreateDbMgrPage(self, parent, pageName, onlyLayer = -1):
+    def CreateDbMgrPage(self, parent, pageName, onlyLayer=-1):
         """Creates chosen page
 
         :param pageName: can be 'browse' or 'manageTable' or
@@ -714,20 +776,21 @@ class DbMgrBase:
         :return: created instance of page, if the page has been already
                  created returns the previously created instance
         :return: None  if wrong identifier was passed
-        """       
+        """
         if pageName == 'browse':
             if not self.pages['browse']:
-                self.pages[pageName] = DbMgrBrowsePage(parent = parent, parentDbMgrBase = self,
-                                                     onlyLayer = onlyLayer)
+                self.pages[pageName] = DbMgrBrowsePage(
+                    parent=parent, parentDbMgrBase=self, onlyLayer=onlyLayer)
             return self.pages[pageName]
         if pageName == 'manageTable':
             if not self.pages['manageTable']:
-                self.pages[pageName] = DbMgrTablesPage(parent = parent, parentDbMgrBase = self,
-                                                          onlyLayer = onlyLayer)
+                self.pages[pageName] = DbMgrTablesPage(
+                    parent=parent, parentDbMgrBase=self, onlyLayer=onlyLayer)
             return self.pages[pageName]
         if pageName == 'manageLayer':
             if not self.pages['manageLayer']:
-                self.pages[pageName] = DbMgrLayersPage(parent = parent, parentDbMgrBase = self)
+                self.pages[pageName] = DbMgrLayersPage(
+                    parent=parent, parentDbMgrBase=self)
             return self.pages[pageName]
         return None
 
@@ -740,13 +803,13 @@ class DbMgrBase:
             # if self.browsePage.GetPageText(page).replace('Layer ', '').strip() == str(layer):
             # self.browsePage.DeletePage(page)
             # break
-            if self.pages['browse']: 
+            if self.pages['browse']:
                 self.pages['browse'].DeletePage(layer)
-            if self.pages['manageTable']:                
+            if self.pages['manageTable']:
                 self.pages['manageTable'].DeletePage(layer)
 
         # fetch fresh db info
-        self.dbMgrData['mapDBInfo'] = VectorDBInfo(self.dbMgrData['vectName'])    
+        self.dbMgrData['mapDBInfo'] = VectorDBInfo(self.dbMgrData['vectName'])
 
         #
         # add new page
@@ -762,7 +825,7 @@ class DbMgrBase:
         # manage layers page
         if self.pages['manageLayer']:
             self.pages['manageLayer'].UpdatePage()
-    
+
     def GetVectorName(self):
         """Get vector name"""
         return self.dbMgrData['vectName']
@@ -771,7 +834,9 @@ class DbMgrBase:
         """Get layers of vector map which have table"""
         return self.dbMgrData['mapDBInfo'].layers.keys()
 
+
 class DbMgrNotebookBase(FN.FlatNotebook):
+
     def __init__(self, parent, parentDbMgrBase):
         """Base class for notebook with attribute tables in tabs
 
@@ -788,18 +853,18 @@ class DbMgrNotebookBase(FN.FlatNotebook):
         self.map = self.parentDbMgrBase.map
         self.mapdisplay = self.parentDbMgrBase.mapdisplay
 
-        #TODO no need to have it in class scope make it local? 
-        self.listOfCommands      = [] 
+        # TODO no need to have it in class scope make it local?
+        self.listOfCommands = []
         self.listOfSQLStatements = []
 
-        #initializet pages
+        # initializet pages
         self.pages = self.parentDbMgrBase.pages
 
         # shared data among pages
         self.dbMgrData = self.parentDbMgrBase.dbMgrData
 
         # set up virtual lists (each layer)
-        ### {layer: list, widgets...}
+        # {layer: list, widgets...}
         self.layerPage = {}
 
         # currently selected layer
@@ -809,11 +874,11 @@ class DbMgrNotebookBase(FN.FlatNotebook):
         self.layers = []
 
         if globalvar.hasAgw:
-            dbmStyle = { 'agwStyle' : globalvar.FNPageStyle }
+            dbmStyle = {'agwStyle': globalvar.FNPageStyle}
         else:
-            dbmStyle = { 'style' : globalvar.FNPageStyle }
+            dbmStyle = {'style': globalvar.FNPageStyle}
 
-        FN.FlatNotebook.__init__(self,parent = self.parent, id = wx.ID_ANY,
+        FN.FlatNotebook.__init__(self, parent=self.parent, id=wx.ID_ANY,
                                  **dbmStyle)
 
         self.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnLayerPageChanged)
@@ -821,25 +886,27 @@ class DbMgrNotebookBase(FN.FlatNotebook):
     def OnLayerPageChanged(self, event):
         """Layer tab changed"""
 
-        # because of SQL Query notebook  
+        # because of SQL Query notebook
         if event.GetEventObject() != self:
             return
 
-        pageNum = self.GetSelection()    
+        pageNum = self.GetSelection()
         self.selLayer = self.layers[pageNum]
         try:
             idCol = self.layerPage[self.selLayer]['whereColumn']
         except KeyError:
             idCol = None
-        
+
         try:
             # update statusbar
-            self.log.write(_("Number of loaded records: %d") % \
-                               self.FindWindowById(self.layerPage[self.selLayer]['data']).\
-                               GetItemCount())
+            self.log.write(
+                _("Number of loaded records: %d") %
+                self.FindWindowById(
+                    self.layerPage[
+                        self.selLayer]['data']). GetItemCount())
         except:
             pass
-        
+
         if idCol:
             winCol = self.FindWindowById(idCol)
             table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]
@@ -853,15 +920,16 @@ class DbMgrNotebookBase(FN.FlatNotebook):
         """
         # perform GRASS commands (e.g. v.db.addcolumn)
         wx.BeginBusyCursor()
-        
+
         if len(listOfCommands) > 0:
             for cmd in listOfCommands:
-                RunCommand(prog = cmd[0],
-                           quiet = True,
-                           parent = self,
+                RunCommand(prog=cmd[0],
+                           quiet=True,
+                           parent=self,
                            **cmd[1])
-            
-            self.dbMgrData['mapDBInfo'] = VectorDBInfo(self.dbMgrData['vectName'])
+
+            self.dbMgrData['mapDBInfo'] = VectorDBInfo(
+                self.dbMgrData['vectName'])
             if self.pages['manageTable']:
                 self.pages['manageTable'].UpdatePage(self.selLayer)
 
@@ -869,13 +937,15 @@ class DbMgrNotebookBase(FN.FlatNotebook):
                 self.pages['browse'].UpdatePage(self.selLayer)
             # reset list of commands
             listOfCommands = []
-        
-        # perform SQL non-select statements (e.g. 'delete from table where cat=1')
+
+        # perform SQL non-select statements (e.g. 'delete from table where
+        # cat=1')
         if len(listOfSQLStatements) > 0:
             fd, sqlFilePath = tempfile.mkstemp(text=True)
             sqlFile = open(sqlFilePath, 'w')
             for sql in listOfSQLStatements:
-                enc = UserSettings.Get(group = 'atm', key = 'encoding', subkey = 'value')
+                enc = UserSettings.Get(
+                    group='atm', key='encoding', subkey='value')
                 if not enc and 'GRASS_DB_ENCODING' in os.environ:
                     enc = os.environ['GRASS_DB_ENCODING']
                 if enc:
@@ -885,24 +955,26 @@ class DbMgrNotebookBase(FN.FlatNotebook):
                 sqlFile.write(os.linesep)
             sqlFile.close()
 
-            driver   = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["driver"]
-            database = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["database"]
-            
+            driver = self.dbMgrData['mapDBInfo'].layers[
+                self.selLayer]["driver"]
+            database = self.dbMgrData['mapDBInfo'].layers[
+                self.selLayer]["database"]
+
             Debug.msg(3, 'AttributeManger.ApplyCommands(): %s' %
                       ';'.join(["%s" % s for s in listOfSQLStatements]))
-            
+
             RunCommand('db.execute',
-                       parent = self,
-                       input = sqlFilePath,
-                       driver = driver,
-                       database = database)
-            
+                       parent=self,
+                       input=sqlFilePath,
+                       driver=driver,
+                       database=database)
+
             os.close(fd)
             os.remove(sqlFilePath)
             # reset list of statements
             self.listOfSQLStatements = []
-            
-        wx.EndBusyCursor()        
+
+        wx.EndBusyCursor()
 
     def DeletePage(self, layer):
         """Removes layer page"""
@@ -931,56 +1003,60 @@ class DbMgrNotebookBase(FN.FlatNotebook):
     def AddColumn(self, name, ctype, length):
         """Add new column to the table"""
         table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
-        
+
         if not name:
-            GError(parent = self,
-                   message = _("Unable to add column to the table. "
-                               "No column name defined."))
+            GError(parent=self,
+                   message=_("Unable to add column to the table. "
+                             "No column name defined."))
             return False
-         
+
         # cast type if needed
         if ctype == 'double':
             ctype = 'double precision'
         if ctype != 'varchar':
-            length = '' # FIXME
-        
+            length = ''  # FIXME
+
         # check for duplicate items
         if name in self.dbMgrData['mapDBInfo'].GetColumns(table):
-            GError(parent = self,
-                   message = _("Column <%(column)s> already exists in table <%(table)s>.") % \
-                       {'column' : name, 'table' : self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]}
-                   )
+            GError(
+                parent=self,
+                message=_("Column <%(column)s> already exists in table <%(table)s>.") % {
+                    'column': name,
+                    'table': self.dbMgrData['mapDBInfo'].layers[
+                        self.selLayer]["table"]})
             return False
 
         # add v.db.addcolumn command to the list
         if ctype == 'varchar':
             ctype += ' (%d)' % length
         self.listOfCommands.append(('v.db.addcolumn',
-                                    { 'map'     : self.dbMgrData['vectName'],
-                                      'layer'   : self.selLayer,
-                                      'columns' : '%s %s' % (name, ctype) }
+                                    {'map': self.dbMgrData['vectName'],
+                                     'layer': self.selLayer,
+                                     'columns': '%s %s' % (name, ctype)}
                                     ))
         # apply changes
         self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
-                
+
         return True
 
     def GetAddedLayers(self):
         """Get list of added layers"""
         return self.layers[:]
 
+
 class DbMgrBrowsePage(DbMgrNotebookBase):
-    def __init__(self, parent, parentDbMgrBase, onlyLayer = -1):
+
+    def __init__(self, parent, parentDbMgrBase, onlyLayer=-1):
         """Browse page class
 
         :param parent: GUI parent
         :param parentDbMgrBase: instance of DbMgrBase class
         :param onlyLayer: create only tab of given layer, if -1 creates
-                          tabs of all layers 
+                          tabs of all layers
         """
 
-        DbMgrNotebookBase.__init__(self, parent = parent, 
-                                       parentDbMgrBase = parentDbMgrBase)
+        DbMgrNotebookBase.__init__(self, parent=parent,
+                                   parentDbMgrBase=parentDbMgrBase)
 
         #   for Sql Query notebook adaptation on current width
         self.sqlBestSize = None
@@ -991,10 +1067,13 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             self.AddLayer(layer)
 
         if self.layers:
-            self.SetSelection(0) 
+            self.SetSelection(0)
             self.selLayer = self.layers[0]
-            self.log.write(_("Number of loaded records: %d") % \
-                           self.FindWindowById(self.layerPage[self.selLayer]['data']).GetItemCount())
+            self.log.write(
+                _("Number of loaded records: %d") %
+                self.FindWindowById(
+                    self.layerPage[
+                        self.selLayer]['data']).GetItemCount())
 
         # query map layer (if parent (GMFrame) is given)
         self.qlayer = None
@@ -1002,30 +1081,31 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         # sqlbuilder
         self.builder = None
 
-    def AddLayer(self, layer, pos = -1):
+    def AddLayer(self, layer, pos=-1):
         """Adds tab which represents table and enables browse it
 
         :param layer: vector map layer conntected to table
         :param pos: position of tab, if -1 it is added to end
 
-        :return: True if layer was added 
+        :return: True if layer was added
         :return: False if layer was not added - layer has been already
-                 added or has empty table or does not exist 
+                 added or has empty table or does not exist
         """
         if layer in self.layers or \
-            layer not in self.parentDbMgrBase.GetVectorLayers():
-            return False    
+                layer not in self.parentDbMgrBase.GetVectorLayers():
+            return False
 
-        panel = wx.Panel(parent = self, id = wx.ID_ANY)
-            
-        #IMPORTANT NOTE: wx.StaticBox MUST be defined BEFORE any of the 
+        panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        # IMPORTANT NOTE: wx.StaticBox MUST be defined BEFORE any of the
         #   controls that are placed IN the wx.StaticBox, or it will freeze
         #   on the Mac
-            
-        listBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                               label = " %s " % _("Attribute data - right-click to edit/manage records"))
+
+        listBox = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Attribute data - right-click to edit/manage records"))
         listSizer = wx.StaticBoxSizer(listBox, wx.VERTICAL)
-            
+
         win = VirtualAttributeList(panel, self.log,
                                    self.dbMgrData, layer, self.pages)
         if win.IsEmpty():
@@ -1033,165 +1113,195 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             return False
 
         self.layers.append(layer)
-            
+
         win.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnDataItemActivated)
 
         self.layerPage[layer] = {'browsePage': panel.GetId()}
-            
+
         label = _("Table")
         if not self.dbMgrData['editable']:
             label += _(" (readonly)")
 
         if pos == -1:
-            pos = self.GetPageCount() 
-        self.InsertPage(pos, page = panel,
-                        text = " %d / %s %s" % \
-                       (layer, label, self.dbMgrData['mapDBInfo'].layers[layer]['table']))
-            
+            pos = self.GetPageCount()
+        self.InsertPage(
+            pos, page=panel, text=" %d / %s %s" %
+            (layer, label, self.dbMgrData['mapDBInfo'].layers[layer]['table']))
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
 
-        sqlQueryPanel = wx.Panel(parent = panel, id = wx.ID_ANY)
+        sqlQueryPanel = wx.Panel(parent=panel, id=wx.ID_ANY)
 
-        # attribute data            
-        sqlBox = wx.StaticBox(parent = sqlQueryPanel, id = wx.ID_ANY,
-                              label = " %s " % _("SQL Query"))
+        # attribute data
+        sqlBox = wx.StaticBox(parent=sqlQueryPanel, id=wx.ID_ANY,
+                              label=" %s " % _("SQL Query"))
 
         sqlSizer = wx.StaticBoxSizer(sqlBox, wx.VERTICAL)
 
-        win.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnDataRightUp) #wxMSW
-        win.Bind(wx.EVT_RIGHT_UP,            self.OnDataRightUp) #wxGTK
-        if UserSettings.Get(group = 'atm', key = 'leftDbClick', subkey = 'selection') == 0:
+        win.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnDataRightUp)  # wxMSW
+        win.Bind(wx.EVT_RIGHT_UP, self.OnDataRightUp)  # wxGTK
+        if UserSettings.Get(group='atm', key='leftDbClick',
+                            subkey='selection') == 0:
             win.Bind(wx.EVT_LEFT_DCLICK, self.OnDataItemEdit)
             win.Bind(wx.EVT_COMMAND_LEFT_DCLICK, self.OnDataItemEdit)
         else:
             win.Bind(wx.EVT_LEFT_DCLICK, self.OnDataDrawSelected)
             win.Bind(wx.EVT_COMMAND_LEFT_DCLICK, self.OnDataDrawSelected)
-            
-        listSizer.Add(item = win, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 3)
+
+        listSizer.Add(item=win, proportion=1,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=3)
 
         # sql statement box
         FNPageStyle = FN.FNB_NO_NAV_BUTTONS | \
-                       FN.FNB_NO_X_BUTTON
+            FN.FNB_NO_X_BUTTON
         if globalvar.hasAgw:
-            dbmStyle = { 'agwStyle' : FNPageStyle }
+            dbmStyle = {'agwStyle': FNPageStyle}
         else:
-            dbmStyle = { 'style' : FNPageStyle }
-        sqlNtb = FN.FlatNotebook(parent = sqlQueryPanel, id = wx.ID_ANY,
+            dbmStyle = {'style': FNPageStyle}
+        sqlNtb = FN.FlatNotebook(parent=sqlQueryPanel, id=wx.ID_ANY,
                                  **dbmStyle)
         # Simple tab
-        simpleSqlPanel = wx.Panel(parent = sqlNtb, id = wx.ID_ANY)
-        sqlNtb.AddPage(page = simpleSqlPanel,
-                       text = _('Simple'))
-
-        btnApply = wx.Button(parent = simpleSqlPanel, id = wx.ID_APPLY, name = 'btnApply')
-        btnApply.SetToolTipString(_("Apply SELECT statement and reload data records"))
+        simpleSqlPanel = wx.Panel(parent=sqlNtb, id=wx.ID_ANY)
+        sqlNtb.AddPage(page=simpleSqlPanel,
+                       text=_('Simple'))
+
+        btnApply = wx.Button(
+            parent=simpleSqlPanel,
+            id=wx.ID_APPLY,
+            name='btnApply')
+        btnApply.SetToolTipString(
+            _("Apply SELECT statement and reload data records"))
         btnApply.Bind(wx.EVT_BUTTON, self.OnApplySqlStatement)
 
-        whereSimpleSqlPanel = wx.Panel(parent = simpleSqlPanel, id = wx.ID_ANY, name = 'wherePanel')   
-        sqlWhereColumn = wx.ComboBox(parent = whereSimpleSqlPanel, id = wx.ID_ANY,
-                                     size = (150,-1),
-                                     style = wx.CB_SIMPLE | wx.CB_READONLY,
-                                     choices = self.dbMgrData['mapDBInfo'].GetColumns(self.dbMgrData['mapDBInfo'].layers[layer]['table']))
+        whereSimpleSqlPanel = wx.Panel(
+            parent=simpleSqlPanel,
+            id=wx.ID_ANY,
+            name='wherePanel')
+        sqlWhereColumn = wx.ComboBox(
+            parent=whereSimpleSqlPanel, id=wx.ID_ANY, size=(150, -1),
+            style=wx.CB_SIMPLE | wx.CB_READONLY,
+            choices=self.dbMgrData['mapDBInfo'].GetColumns(
+                self.dbMgrData['mapDBInfo'].layers[layer]['table']))
         sqlWhereColumn.SetSelection(0)
-        sqlWhereCond = wx.Choice(parent = whereSimpleSqlPanel, id = wx.ID_ANY,
-                                 size = (55,-1),
-                                 choices = ['=', '!=', '<', '<=', '>', '>='])
+        sqlWhereCond = wx.Choice(parent=whereSimpleSqlPanel, id=wx.ID_ANY,
+                                 size=(55, -1),
+                                 choices=['=', '!=', '<', '<=', '>', '>='])
         sqlWhereCond.SetSelection(0)
-        sqlWhereValue = wx.TextCtrl(parent = whereSimpleSqlPanel, id = wx.ID_ANY, value = "",
-                                    style = wx.TE_PROCESS_ENTER)
-        sqlWhereValue.SetToolTipString(_("Example: %s") % "MULTILANE = 'no' AND OBJECTID < 10")
-
-        sqlLabel = wx.StaticText(parent = simpleSqlPanel, id = wx.ID_ANY,
-                                label = "SELECT * FROM %s WHERE " % \
-                                      self.dbMgrData['mapDBInfo'].layers[layer]['table'])
+        sqlWhereValue = wx.TextCtrl(
+            parent=whereSimpleSqlPanel,
+            id=wx.ID_ANY,
+            value="",
+            style=wx.TE_PROCESS_ENTER)
+        sqlWhereValue.SetToolTipString(
+            _("Example: %s") %
+            "MULTILANE = 'no' AND OBJECTID < 10")
+
+        sqlLabel = wx.StaticText(
+            parent=simpleSqlPanel,
+            id=wx.ID_ANY,
+            label="SELECT * FROM %s WHERE " %
+            self.dbMgrData['mapDBInfo'].layers[layer]['table'])
         # Advanced tab
-        advancedSqlPanel = wx.Panel(parent = sqlNtb, id = wx.ID_ANY)   
-        sqlNtb.AddPage(page = advancedSqlPanel,
-                       text = _('Builder'))
-
-        btnSqlBuilder = wx.Button(parent = advancedSqlPanel, id = wx.ID_ANY, label = _("SQL Builder"))
+        advancedSqlPanel = wx.Panel(parent=sqlNtb, id=wx.ID_ANY)
+        sqlNtb.AddPage(page=advancedSqlPanel,
+                       text=_('Builder'))
+
+        btnSqlBuilder = wx.Button(
+            parent=advancedSqlPanel,
+            id=wx.ID_ANY,
+            label=_("SQL Builder"))
         btnSqlBuilder.Bind(wx.EVT_BUTTON, self.OnBuilder)
 
-        sqlStatement = wx.TextCtrl(parent = advancedSqlPanel, id = wx.ID_ANY,
-                                   value = "SELECT * FROM %s" % \
-                                       self.dbMgrData['mapDBInfo'].layers[layer]['table'],
-                                   style = wx.TE_PROCESS_ENTER)
-        sqlStatement.SetToolTipString(_("Example: %s") % "SELECT * FROM roadsmajor WHERE MULTILANE = 'no' AND OBJECTID < 10")
+        sqlStatement = wx.TextCtrl(
+            parent=advancedSqlPanel,
+            id=wx.ID_ANY,
+            value="SELECT * FROM %s" %
+            self.dbMgrData['mapDBInfo'].layers[layer]['table'],
+            style=wx.TE_PROCESS_ENTER)
+        sqlStatement.SetToolTipString(
+            _("Example: %s") %
+            "SELECT * FROM roadsmajor WHERE MULTILANE = 'no' AND OBJECTID < 10")
         sqlWhereValue.Bind(wx.EVT_TEXT_ENTER, self.OnApplySqlStatement)
         sqlStatement.Bind(wx.EVT_TEXT_ENTER, self.OnApplySqlStatement)
 
         # Simple tab layout
-        simpleSqlSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-
-        sqlSimpleWhereSizer= wx.BoxSizer(wx.HORIZONTAL)
-
-        sqlSimpleWhereSizer.Add(item = sqlWhereColumn,
-                                flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL| wx.LEFT,
-                                border = 3)
-        sqlSimpleWhereSizer.Add(item = sqlWhereCond,
-                                flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
-                                border = 3)
-        sqlSimpleWhereSizer.Add(item = sqlWhereValue, proportion = 1,
-                                flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
-                                border = 3)
+        simpleSqlSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        sqlSimpleWhereSizer = wx.BoxSizer(wx.HORIZONTAL)
+
+        sqlSimpleWhereSizer.Add(
+            item=sqlWhereColumn,
+            flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=3)
+        sqlSimpleWhereSizer.Add(
+            item=sqlWhereCond,
+            flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=3)
+        sqlSimpleWhereSizer.Add(
+            item=sqlWhereValue,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=3)
         whereSimpleSqlPanel.SetSizer(sqlSimpleWhereSizer)
-        simpleSqlSizer.Add(item = sqlLabel, border = 5, pos = (0, 0),
-                           flag = wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.LEFT)
-        simpleSqlSizer.Add(item = whereSimpleSqlPanel, border = 5, pos = (0, 1),
-                           flag = wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.EXPAND)     
-        simpleSqlSizer.Add(item = btnApply, border = 5, pos = (0, 2),
-                           flag = wx.ALIGN_CENTER_VERTICAL | wx.TOP)
+        simpleSqlSizer.Add(item=sqlLabel, border=5, pos=(0, 0),
+                           flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.LEFT)
+        simpleSqlSizer.Add(item=whereSimpleSqlPanel, border=5, pos=(0, 1),
+                           flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.EXPAND)
+        simpleSqlSizer.Add(item=btnApply, border=5, pos=(0, 2),
+                           flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP)
         simpleSqlSizer.AddGrowableCol(1)
 
         simpleSqlPanel.SetSizer(simpleSqlSizer)
 
         # Advanced tab layout
-        advancedSqlSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
+        advancedSqlSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         advancedSqlSizer.AddGrowableCol(0)
 
-        advancedSqlSizer.Add(item = sqlStatement,
-                             flag = wx.EXPAND | wx.ALL, border = 5)
-        advancedSqlSizer.Add(item = btnSqlBuilder,
-                             flag = wx.ALIGN_RIGHT | wx.TOP | wx.RIGHT | wx.BOTTOM, border = 5)
+        advancedSqlSizer.Add(item=sqlStatement,
+                             flag=wx.EXPAND | wx.ALL, border=5)
+        advancedSqlSizer.Add(
+            item=btnSqlBuilder,
+            flag=wx.ALIGN_RIGHT | wx.TOP | wx.RIGHT | wx.BOTTOM,
+            border=5)
 
-        sqlSizer.Add(item = sqlNtb,
-                     flag = wx.ALL | wx.EXPAND,
-                     border = 3)
+        sqlSizer.Add(item=sqlNtb,
+                     flag=wx.ALL | wx.EXPAND,
+                     border=3)
 
         advancedSqlPanel.SetSizer(advancedSqlSizer)
 
-        pageSizer.Add(item = listSizer,
-                      proportion = 1,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 5)
+        pageSizer.Add(item=listSizer,
+                      proportion=1,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=5)
 
         sqlQueryPanel.SetSizer(sqlSizer)
-        
-        pageSizer.Add(item = sqlQueryPanel,
-                      proportion = 0,
-                      flag = wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.EXPAND,
-                      border = 5)
+
+        pageSizer.Add(item=sqlQueryPanel,
+                      proportion=0,
+                      flag=wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.EXPAND,
+                      border=5)
 
         panel.SetSizer(pageSizer)
-         
+
         sqlNtb.Bind(wx.EVT_SIZE, self.OnSqlQuerySizeWrap(layer))
 
-        self.layerPage[layer]['data']      = win.GetId()
-        self.layerPage[layer]['sqlNtb']    = sqlNtb.GetId()
+        self.layerPage[layer]['data'] = win.GetId()
+        self.layerPage[layer]['sqlNtb'] = sqlNtb.GetId()
         self.layerPage[layer]['whereColumn'] = sqlWhereColumn.GetId()
         self.layerPage[layer]['whereOperator'] = sqlWhereCond.GetId()
-        self.layerPage[layer]['where']     = sqlWhereValue.GetId()
-        self.layerPage[layer]['builder']   = btnSqlBuilder.GetId()
+        self.layerPage[layer]['where'] = sqlWhereValue.GetId()
+        self.layerPage[layer]['builder'] = btnSqlBuilder.GetId()
         self.layerPage[layer]['statement'] = sqlStatement.GetId()
-        self.layerPage[layer]['sqlIsReduced'] = False  # for SQL Query adaptation on width     
+        # for SQL Query adaptation on width
+        self.layerPage[layer]['sqlIsReduced'] = False
 
         return True
 
     def OnSqlQuerySizeWrap(self, layer):
         """Helper function"""
-        return lambda event : self.OnSqlQuerySize(event, layer)  
+        return lambda event: self.OnSqlQuerySize(event, layer)
 
     def OnSqlQuerySize(self, event, layer):
         """Adapts SQL Query Simple tab on current width"""
@@ -1200,8 +1310,8 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         if not self.sqlBestSize:
             self.sqlBestSize = sqlNtb.GetBestSize()
 
-        size = sqlNtb.GetSize()    
-        sqlReduce = self.sqlBestSize[0] > size[0] 
+        size = sqlNtb.GetSize()
+        sqlReduce = self.sqlBestSize[0] > size[0]
         if (sqlReduce and self.layerPage[layer]['sqlIsReduced']) or \
            (not sqlReduce and not self.layerPage[layer]['sqlIsReduced']):
             event.Skip()
@@ -1247,24 +1357,40 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             self.popupDataID10 = wx.NewId()
             self.popupDataID11 = wx.NewId()
 
-            self.Bind(wx.EVT_MENU, self.OnDataItemEdit,       id = self.popupDataID1)
-            self.Bind(wx.EVT_MENU, self.OnDataItemAdd,        id = self.popupDataID2)
-            self.Bind(wx.EVT_MENU, self.OnDataItemDelete,     id = self.popupDataID3)
-            self.Bind(wx.EVT_MENU, self.OnDataItemDeleteAll,  id = self.popupDataID4)
-            self.Bind(wx.EVT_MENU, self.OnDataSelectAll,      id = self.popupDataID5)
-            self.Bind(wx.EVT_MENU, self.OnDataSelectNone,     id = self.popupDataID6)
-            self.Bind(wx.EVT_MENU, self.OnDataDrawSelected,   id = self.popupDataID7)
-            self.Bind(wx.EVT_MENU, self.OnDataDrawSelectedZoom, id = self.popupDataID8)
-            self.Bind(wx.EVT_MENU, self.OnExtractSelected,    id = self.popupDataID9)
-            self.Bind(wx.EVT_MENU, self.OnDeleteSelected,     id = self.popupDataID11)
-            self.Bind(wx.EVT_MENU, self.OnDataReload,         id = self.popupDataID10)
+            self.Bind(wx.EVT_MENU, self.OnDataItemEdit, id=self.popupDataID1)
+            self.Bind(wx.EVT_MENU, self.OnDataItemAdd, id=self.popupDataID2)
+            self.Bind(wx.EVT_MENU, self.OnDataItemDelete, id=self.popupDataID3)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnDataItemDeleteAll,
+                id=self.popupDataID4)
+            self.Bind(wx.EVT_MENU, self.OnDataSelectAll, id=self.popupDataID5)
+            self.Bind(wx.EVT_MENU, self.OnDataSelectNone, id=self.popupDataID6)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnDataDrawSelected,
+                id=self.popupDataID7)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnDataDrawSelectedZoom,
+                id=self.popupDataID8)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnExtractSelected,
+                id=self.popupDataID9)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnDeleteSelected,
+                id=self.popupDataID11)
+            self.Bind(wx.EVT_MENU, self.OnDataReload, id=self.popupDataID10)
 
         tlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
         # generate popup-menu
         menu = wx.Menu()
         menu.Append(self.popupDataID1, _("Edit selected record"))
         selected = tlist.GetFirstSelected()
-        if not self.dbMgrData['editable'] or selected == -1 or tlist.GetNextSelected(selected) != -1:
+        if not self.dbMgrData[
+                'editable'] or selected == -1 or tlist.GetNextSelected(selected) != -1:
             menu.Enable(self.popupDataID1, False)
         menu.Append(self.popupDataID2, _("Insert new record"))
         menu.Append(self.popupDataID3, _("Delete selected record(s)"))
@@ -1278,7 +1404,9 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         menu.Append(self.popupDataID6, _("Deselect all"))
         menu.AppendSeparator()
         menu.Append(self.popupDataID7, _("Highlight selected features"))
-        menu.Append(self.popupDataID8, _("Highlight selected features and zoom"))
+        menu.Append(
+            self.popupDataID8,
+            _("Highlight selected features and zoom"))
         if not self.map or len(tlist.GetSelectedItems()) == 0:
             menu.Enable(self.popupDataID7, False)
             menu.Enable(self.popupDataID8, False)
@@ -1297,66 +1425,68 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         menu.Destroy()
 
         # update statusbar
-        self.log.write(_("Number of loaded records: %d") % \
-                           tlist.GetItemCount())
+        self.log.write(_("Number of loaded records: %d") %
+                       tlist.GetItemCount())
 
     def OnDataItemEdit(self, event):
         """Edit selected record of the attribute table"""
-        tlist      = self.FindWindowById(self.layerPage[self.selLayer]['data'])
-        item      = tlist.GetFirstSelected()
+        tlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
+        item = tlist.GetFirstSelected()
         if item == -1:
             return
-        table     = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
+        table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
         keyColumn = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['key']
-        cat       = tlist.itemCatsMap[tlist.itemIndexMap[item]]
+        cat = tlist.itemCatsMap[tlist.itemIndexMap[item]]
 
         # (column name, value)
         data = []
 
         # collect names of all visible columns
         columnName = []
-        for i in range(tlist.GetColumnCount()): 
+        for i in range(tlist.GetColumnCount()):
             columnName.append(tlist.GetColumn(i).GetText())
 
-
         # key column must be always presented
         if keyColumn not in columnName:
-            columnName.insert(0, keyColumn) # insert key column on first position
+            # insert key column on first position
+            columnName.insert(0, keyColumn)
             data.append((keyColumn, str(cat)))
             keyId = 0
             missingKey = True
         else:
             missingKey = False
-            
+
         # add other visible columns
         for i in range(len(columnName)):
-            ctype = self.dbMgrData['mapDBInfo'].tables[table][columnName[i]]['ctype']
-            ctypeStr = self.dbMgrData['mapDBInfo'].tables[table][columnName[i]]['type']
-            if columnName[i] == keyColumn: # key 
-                if missingKey is False: 
+            ctype = self.dbMgrData['mapDBInfo'].tables[
+                table][columnName[i]]['ctype']
+            ctypeStr = self.dbMgrData['mapDBInfo'].tables[
+                table][columnName[i]]['type']
+            if columnName[i] == keyColumn:  # key
+                if missingKey is False:
                     data.append((columnName[i], ctype, ctypeStr, str(cat)))
                     keyId = i
             else:
                 if missingKey is True:
-                    value = tlist.GetItem(item, i-1).GetText()
+                    value = tlist.GetItem(item, i - 1).GetText()
                 else:
                     value = tlist.GetItem(item, i).GetText()
                 data.append((columnName[i], ctype, ctypeStr, value))
 
-        dlg = ModifyTableRecord(parent = self, 
-                                title = _("Update existing record"),
-                                data = data, keyEditable = (keyId, False))
+        dlg = ModifyTableRecord(parent=self,
+                                title=_("Update existing record"),
+                                data=data, keyEditable=(keyId, False))
 
         if dlg.ShowModal() == wx.ID_OK:
-            values = dlg.GetValues() # string
+            values = dlg.GetValues()  # string
             updateList = list()
             try:
-                for i in range(len(values)): 
-                    if i == keyId: # skip key column
+                for i in range(len(values)):
+                    if i == keyId:  # skip key column
                         continue
                     if tlist.GetItem(item, i).GetText() == values[i]:
-                        continue # no change
-                    
+                        continue  # no change
+
                     column = tlist.columns[columnName[i]]
                     if len(values[i]) > 0:
                         try:
@@ -1364,89 +1494,99 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
                                 idx = i - 1
                             else:
                                 idx = i
-                            
+
                             if column['ctype'] != types.StringType:
-                                tlist.itemDataMap[item][idx] = column['ctype'] (values[i])
-                            else: # -> string
+                                tlist.itemDataMap[item][
+                                    idx] = column['ctype'](values[i])
+                            else:  # -> string
                                 tlist.itemDataMap[item][idx] = values[i]
                         except ValueError:
-                            raise ValueError(_("Value '%(value)s' needs to be entered as %(type)s.") % \
-                                                 {'value' : str(values[i]),
-                                                  'type' : column['type']})
-                        
+                            raise ValueError(_("Value '%(value)s' needs to be entered as %(type)s.") %
+                                             {'value': str(values[i]),
+                                              'type': column['type']})
+
                         if column['ctype'] == types.StringType:
-                            if "'" in values[i]: # replace "'" -> "''"
+                            if "'" in values[i]:  # replace "'" -> "''"
                                 values[i] = values[i].replace("'", "''")
-                            updateList.append("%s='%s'" % (columnName[i], values[i]))
+                            updateList.append(
+                                "%s='%s'" %
+                                (columnName[i], values[i]))
                         else:
-                            updateList.append("%s=%s" % (columnName[i], values[i]))
-                    else: # -> NULL
+                            updateList.append(
+                                "%s=%s" %
+                                (columnName[i], values[i]))
+                    else:  # -> NULL
                         updateList.append("%s=NULL" % (columnName[i]))
             except ValueError as err:
-                GError(parent = self,
-                       message = _("Unable to update existing record.\n%s") % err,
-                       showTraceback = False)
+                GError(
+                    parent=self,
+                    message=_("Unable to update existing record.\n%s") %
+                    err,
+                    showTraceback=False)
                 self.OnDataItemEdit(event)
                 return
-            
+
             if updateList:
-                self.listOfSQLStatements.append('UPDATE %s SET %s WHERE %s=%d' % \
-                                                    (table, ','.join(updateList),
-                                                     keyColumn, cat))
-                self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
-            
+                self.listOfSQLStatements.append(
+                    'UPDATE %s SET %s WHERE %s=%d' %
+                    (table, ','.join(updateList), keyColumn, cat))
+                self.ApplyCommands(
+                    self.listOfCommands,
+                    self.listOfSQLStatements)
+
             tlist.Update()
-        
+
     def OnDataItemAdd(self, event):
         """Add new record to the attribute table"""
-        tlist      = self.FindWindowById(self.layerPage[self.selLayer]['data'])
-        table     = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
+        tlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
+        table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
         keyColumn = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['key']
-        
+
         # (column name, value)
         data = []
 
         # collect names of all visible columns
         columnName = []
-        for i in range(tlist.GetColumnCount()): 
+        for i in range(tlist.GetColumnCount()):
             columnName.append(tlist.GetColumn(i).GetText())
 
         # maximal category number
         if len(tlist.itemCatsMap.values()) > 0:
             maxCat = max(tlist.itemCatsMap.values())
         else:
-            maxCat = 0 # starting category '1'
-        
+            maxCat = 0  # starting category '1'
+
         # key column must be always presented
         if keyColumn not in columnName:
-            columnName.insert(0, keyColumn) # insert key column on first position
+            # insert key column on first position
+            columnName.insert(0, keyColumn)
             data.append((keyColumn, str(maxCat + 1)))
             missingKey = True
         else:
             missingKey = False
-            
+
         # add other visible columns
         colIdx = 0
         keyId = -1
         for col in columnName:
             ctype = self.dbMgrData['mapDBInfo'].tables[table][col]['ctype']
             ctypeStr = self.dbMgrData['mapDBInfo'].tables[table][col]['type']
-            if col == keyColumn: # key 
-                if missingKey is False: 
+            if col == keyColumn:  # key
+                if missingKey is False:
                     data.append((col, ctype, ctypeStr, str(maxCat + 1)))
                     keyId = colIdx
             else:
                 data.append((col, ctype, ctypeStr, ''))
-            
+
             colIdx += 1
-                
-        dlg = ModifyTableRecord(parent = self,
-                                title = _("Insert new record"),
-                                data = data, keyEditable = (keyId, True))
+
+        dlg = ModifyTableRecord(parent=self,
+                                title=_("Insert new record"),
+                                data=data, keyEditable=(keyId, True))
 
         if dlg.ShowModal() == wx.ID_OK:
-            try: # get category number
-                cat = int(dlg.GetValues(columns = [keyColumn])[0])
+            try:  # get category number
+                cat = int(dlg.GetValues(columns=[keyColumn])[0])
             except:
                 cat = -1
 
@@ -1455,21 +1595,21 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
                     raise ValueError(_("Record with category number %d "
                                        "already exists in the table.") % cat)
 
-                values = dlg.GetValues() # values (need to be casted)
+                values = dlg.GetValues()  # values (need to be casted)
                 columnsString = ''
-                valuesString   = ''
-                
+                valuesString = ''
+
                 for i in range(len(values)):
-                    if len(values[i]) == 0: # NULL
+                    if len(values[i]) == 0:  # NULL
                         if columnName[i] == keyColumn:
                             raise ValueError(_("Category number (column %s)"
                                                " is missing.") % keyColumn)
                         else:
                             continue
-                    
+
                     try:
                         if tlist.columns[columnName[i]]['ctype'] == int:
-                            # values[i] is stored as text. 
+                            # values[i] is stored as text.
                             values[i] = int(float(values[i]))
                         elif tlist.columns[columnName[i]]['ctype'] == float:
                             values[i] = float(values[i])
@@ -1478,74 +1618,76 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
                                          {'value': values[i],
                                           'type': tlist.columns[columnName[i]]['type']})
                     columnsString += '%s,' % columnName[i]
-                    
+
                     if tlist.columns[columnName[i]]['ctype'] == str:
                         valuesString += "'%s'," % values[i].replace("'", "''")
                     else:
                         valuesString += "%s," % values[i]
-                
+
             except ValueError as err:
-                GError(parent = self,
-                       message = _("Unable to insert new record.\n%s") % err,
-                       showTraceback = False)
+                GError(parent=self,
+                       message=_("Unable to insert new record.\n%s") % err,
+                       showTraceback=False)
                 self.OnDataItemAdd(event)
                 return
-            
-            # remove category if need 
+
+            # remove category if need
             if missingKey is True:
                 del values[0]
-                
+
             # add new item to the tlist
             if len(tlist.itemIndexMap) > 0:
                 index = max(tlist.itemIndexMap) + 1
             else:
                 index = 0
-            
+
             tlist.itemIndexMap.append(index)
             tlist.itemDataMap[index] = values
             tlist.itemCatsMap[index] = cat
             tlist.SetItemCount(tlist.GetItemCount() + 1)
 
-            self.listOfSQLStatements.append('INSERT INTO %s (%s) VALUES(%s)' % \
-                                                (table,
-                                                 columnsString.rstrip(','),
-                                                 valuesString.rstrip(',')))
-            
+            self.listOfSQLStatements.append('INSERT INTO %s (%s) VALUES(%s)' %
+                                            (table,
+                                             columnsString.rstrip(','),
+                                             valuesString.rstrip(',')))
+
             self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
 
-        
     def OnDataItemDelete(self, event):
         """Delete selected item(s) from the tlist (layer/category pair)"""
         dlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
         item = dlist.GetFirstSelected()
-        
-        table    = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]
-        key      = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["key"]
-        
+
+        table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]
+        key = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["key"]
+
         indices = []
         # collect SQL statements
         while item != -1:
             index = dlist.itemIndexMap[item]
             indices.append(index)
-            
+
             cat = dlist.itemCatsMap[index]
-            
-            self.listOfSQLStatements.append('DELETE FROM %s WHERE %s=%d' % \
-                                                (table, key, cat))
-            
+
+            self.listOfSQLStatements.append('DELETE FROM %s WHERE %s=%d' %
+                                            (table, key, cat))
+
             item = dlist.GetNextSelected(item)
-        
-        if UserSettings.Get(group = 'atm', key = 'askOnDeleteRec', subkey = 'enabled'):
-            deleteDialog = wx.MessageBox(parent = self,
-                                         message = _("Selected data records (%d) will be permanently deleted "
-                                                   "from table. Do you want to delete them?") % \
-                                             (len(self.listOfSQLStatements)),
-                                         caption = _("Delete records"),
-                                         style = wx.YES_NO | wx.CENTRE)
+
+        if UserSettings.Get(
+                group='atm', key='askOnDeleteRec', subkey='enabled'):
+            deleteDialog = wx.MessageBox(
+                parent=self,
+                message=_(
+                    "Selected data records (%d) will be permanently deleted "
+                    "from table. Do you want to delete them?") %
+                (len(self.listOfSQLStatements)),
+                caption=_("Delete records"),
+                style=wx.YES_NO | wx.CENTRE)
             if deleteDialog != wx.YES:
                 self.listOfSQLStatements = []
                 return False
-        
+
         # restore maps
         i = 0
         indexTemp = copy.copy(dlist.itemIndexMap)
@@ -1554,7 +1696,7 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         dlist.itemDataMap = {}
         catsTemp = copy.deepcopy(dlist.itemCatsMap)
         dlist.itemCatsMap = {}
-        
+
         i = 0
         for index in indexTemp:
             if index in indices:
@@ -1562,37 +1704,41 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             dlist.itemIndexMap.append(i)
             dlist.itemDataMap[i] = dataTemp[index]
             dlist.itemCatsMap[i] = catsTemp[index]
-            
+
             i += 1
-            
+
         dlist.SetItemCount(len(dlist.itemIndexMap))
-        
+
         # deselect items
         item = dlist.GetFirstSelected()
         while item != -1:
-            dlist.SetItemState(item, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
+            dlist.SetItemState(
+                item, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
             item = dlist.GetNextSelected(item)
-        
+
         # submit SQL statements
         self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
-        
+
         return True
 
     def OnDataItemDeleteAll(self, event):
         """Delete all items from the list"""
         dlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
-        if UserSettings.Get(group = 'atm', key = 'askOnDeleteRec', subkey = 'enabled'):
-            deleteDialog = wx.MessageBox(parent = self,
-                                         message = _("All data records (%d) will be permanently deleted "
-                                                   "from table. Do you want to delete them?") % \
-                                             (len(dlist.itemIndexMap)),
-                                         caption = _("Delete records"),
-                                         style = wx.YES_NO | wx.CENTRE)
+        if UserSettings.Get(
+                group='atm', key='askOnDeleteRec', subkey='enabled'):
+            deleteDialog = wx.MessageBox(
+                parent=self,
+                message=_(
+                    "All data records (%d) will be permanently deleted "
+                    "from table. Do you want to delete them?") %
+                (len(dlist.itemIndexMap)),
+                caption=_("Delete records"),
+                style=wx.YES_NO | wx.CENTRE)
             if deleteDialog != wx.YES:
                 return
 
         dlist.DeleteAllItems()
-        dlist.itemDataMap  = {}
+        dlist.itemDataMap = {}
         dlist.itemIndexMap = []
         dlist.SetItemCount(0)
 
@@ -1600,45 +1746,48 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         self.listOfSQLStatements.append('DELETE FROM %s' % table)
 
         self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
-        
+
         event.Skip()
 
     def _drawSelected(self, zoom, selectedOnly=True):
         """Highlight selected features"""
         if not self.map or not self.mapdisplay:
             return
-        
+
         tlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
         if selectedOnly:
             fn = tlist.GetSelectedItems
         else:
             fn = tlist.GetItems
-        
+
         cats = map(int, fn())
-        
+
         digitToolbar = None
         if 'vdigit' in self.mapdisplay.toolbars:
             digitToolbar = self.mapdisplay.toolbars['vdigit']
-        if digitToolbar and digitToolbar.GetLayer() and \
-                digitToolbar.GetLayer().GetName() == self.dbMgrData['vectName']:
+        if digitToolbar and digitToolbar.GetLayer() and digitToolbar.GetLayer(
+        ).GetName() == self.dbMgrData['vectName']:
             display = self.mapdisplay.GetMapWindow().GetDisplay()
-            display.SetSelected(cats, layer = self.selLayer)
+            display.SetSelected(cats, layer=self.selLayer)
             if zoom:
                 n, s, w, e = display.GetRegionSelected()
-                self.mapdisplay.Map.GetRegion(n = n, s = s, w = w, e = e,
-                                              update = True)
+                self.mapdisplay.Map.GetRegion(n=n, s=s, w=w, e=e,
+                                              update=True)
         else:
             # add map layer with higlighted vector features
-            self.AddQueryMapLayer(selectedOnly) # -> self.qlayer
+            self.AddQueryMapLayer(selectedOnly)  # -> self.qlayer
 
             # set opacity based on queried layer
             if self.parent and self.mapdisplay.tree and \
                     self.dbMgrData['treeItem']:
-                maptree = self.mapdisplay.tree # TODO: giface
-                opacity = maptree.GetLayerInfo(self.dbMgrData['treeItem'], key = 'maplayer').GetOpacity()
+                maptree = self.mapdisplay.tree  # TODO: giface
+                opacity = maptree.GetLayerInfo(
+                    self.dbMgrData['treeItem'],
+                    key='maplayer').GetOpacity()
                 self.qlayer.SetOpacity(opacity)
             if zoom:
-                keyColumn = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['key']
+                keyColumn = self.dbMgrData[
+                    'mapDBInfo'].layers[self.selLayer]['key']
                 where = ''
                 for range in ListOfCatsToRange(cats).split(','):
                     if '-' in range:
@@ -1649,16 +1798,16 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
                     else:
                         where += '%s = %d or ' % (keyColumn, int(range))
                 where = where.rstrip('or ')
-                
+
                 select = RunCommand('v.db.select',
-                                    parent = self,
-                                    read = True,
-                                    quiet = True,
-                                    flags = 'r',
-                                    map = self.dbMgrData['mapDBInfo'].map,
-                                    layer = int(self.selLayer),
-                                    where = where)
-                
+                                    parent=self,
+                                    read=True,
+                                    quiet=True,
+                                    flags='r',
+                                    map=self.dbMgrData['mapDBInfo'].map,
+                                    layer=int(self.selLayer),
+                                    where=where)
+
                 region = {}
                 for line in select.splitlines():
                     key, value = line.split('=')
@@ -1666,25 +1815,27 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
 
                 nsdist = ewdist = 0
                 renderer = self.mapdisplay.GetMap()
-                nsdist = 10 * ((renderer.GetCurrentRegion()['n'] - renderer.GetCurrentRegion()['s']) /
-                        renderer.height)
-                ewdist = 10 * ((renderer.GetCurrentRegion()['e'] - renderer.GetCurrentRegion()['w']) /
-                        renderer.width)
+                nsdist = 10 * ((renderer.GetCurrentRegion()
+                                ['n'] - renderer.GetCurrentRegion()['s']) / renderer.height)
+                ewdist = 10 * ((renderer.GetCurrentRegion()
+                                ['e'] - renderer.GetCurrentRegion()['w']) / renderer.width)
                 north = region['n'] + nsdist
                 south = region['s'] - nsdist
                 west = region['w'] - ewdist
                 east = region['e'] + ewdist
-                renderer.GetRegion(n = north, s = south, w = west, e = east, update = True)
-                self.mapdisplay.GetMapWindow().ZoomHistory(n = north, s = south, w = west, e = east)
-        
+                renderer.GetRegion(
+                    n=north, s=south, w=west, e=east, update=True)
+                self.mapdisplay.GetMapWindow().ZoomHistory(n=north, s=south, w=west, e=east)
+
         if zoom:
             self.mapdisplay.Map.AdjustRegion()           # adjust resolution
-            self.mapdisplay.Map.AlignExtentFromDisplay() # adjust extent
-            self.mapdisplay.MapWindow.UpdateMap(render = True,  renderVector = True)
+            self.mapdisplay.Map.AlignExtentFromDisplay()  # adjust extent
+            self.mapdisplay.MapWindow.UpdateMap(render=True, renderVector=True)
         else:
-            self.mapdisplay.MapWindow.UpdateMap(render = False, renderVector = True)
-        
-    def AddQueryMapLayer(self, selectedOnly = True):
+            self.mapdisplay.MapWindow.UpdateMap(
+                render=False, renderVector=True)
+
+    def AddQueryMapLayer(self, selectedOnly=True):
         """Redraw a map
 
         :return: True if map has been redrawn, False if no map is given
@@ -1695,15 +1846,19 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         else:
             fn = tlist.GetItems
 
-        cats = { self.selLayer : fn() }
-        
+        cats = {self.selLayer: fn()}
+
         if self.mapdisplay.Map.GetLayerIndex(self.qlayer) < 0:
             self.qlayer = None
-            
+
         if self.qlayer:
-            self.qlayer.SetCmd(self.mapdisplay.AddTmpVectorMapLayer(self.dbMgrData['vectName'], cats, addLayer = False))
+            self.qlayer.SetCmd(
+                self.mapdisplay.AddTmpVectorMapLayer(
+                    self.dbMgrData['vectName'],
+                    cats, addLayer=False))
         else:
-            self.qlayer = self.mapdisplay.AddTmpVectorMapLayer(self.dbMgrData['vectName'], cats)
+            self.qlayer = self.mapdisplay.AddTmpVectorMapLayer(
+                self.dbMgrData['vectName'], cats)
 
         return self.qlayer
 
@@ -1721,7 +1876,10 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             item = tlist.GetNextItem(item)
             if item == -1:
                 break
-            tlist.SetItemState(item, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
+            tlist.SetItemState(
+                item,
+                wx.LIST_STATE_SELECTED,
+                wx.LIST_STATE_SELECTED)
 
         event.Skip()
 
@@ -1734,21 +1892,21 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             item = tlist.GetNextItem(item, wx.LIST_STATE_SELECTED)
             if item == -1:
                 break
-            tlist.SetItemState(item, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
+            tlist.SetItemState(
+                item, 0, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
         tlist.Focus(0)
-        
-        event.Skip()
 
+        event.Skip()
 
     def OnDataDrawSelected(self, event):
         """Reload table description"""
-        self._drawSelected(zoom = False)
+        self._drawSelected(zoom=False)
         event.Skip()
 
     def OnDataDrawSelectedZoom(self, event):
-        self._drawSelected(zoom = True)
+        self._drawSelected(zoom=True)
         event.Skip()
- 
+
     def OnExtractSelected(self, event):
         """Extract vector objects selected in attribute browse window
         to new vector map
@@ -1757,32 +1915,33 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         # cats = tlist.selectedCats[:]
         cats = tlist.GetSelectedItems()
         if len(cats) == 0:
-            GMessage(parent = self,
-                     message = _('Nothing to extract.'))
+            GMessage(parent=self,
+                     message=_('Nothing to extract.'))
             return
         else:
             # dialog to get file name
-            dlg = CreateNewVector(parent=self, title=_('Extract selected features'),
-                                  giface=self.giface,
-                                  cmd=(('v.extract',
-                                        {'input': self.dbMgrData['vectName'],
-                                         'cats': ListOfCatsToRange(cats)},
-                                        'output')),
-                                  disableTable=True)
+            dlg = CreateNewVector(
+                parent=self, title=_('Extract selected features'),
+                giface=self.giface,
+                cmd=(('v.extract',
+                      {'input': self.dbMgrData['vectName'],
+                       'cats': ListOfCatsToRange(cats)},
+                      'output')),
+                disableTable=True)
             if not dlg:
                 return
-            
-            name = dlg.GetName(full = True)
+
+            name = dlg.GetName(full=True)
 
             if not self.mapdisplay and self.mapdisplay.tree:
-                pass 
+                pass
             elif name and dlg.IsChecked('add'):
                 # add layer to map layer tree
-                self.mapdisplay.tree.AddLayer(ltype = 'vector',
-                                              lname = name,
-                                              lcmd = ['d.vect', 'map=%s' % name])
+                self.mapdisplay.tree.AddLayer(ltype='vector',
+                                              lname=name,
+                                              lcmd=['d.vect', 'map=%s' % name])
             dlg.Destroy()
-            
+
     def OnDeleteSelected(self, event):
         """Delete vector objects selected in attribute browse window
         (attribures and geometry)
@@ -1790,9 +1949,9 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         tlist = self.FindWindowById(self.layerPage[self.selLayer]['data'])
         cats = tlist.GetSelectedItems()
         if len(cats) == 0:
-            GMessage(parent = self,
-                     message = _('Nothing to delete.'))
-        
+            GMessage(parent=self,
+                     message=_('Nothing to delete.'))
+
             return
 
         display = None
@@ -1800,44 +1959,49 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             pass
         elif 'vdigit' in self.mapdisplay.toolbars:
             digitToolbar = self.mapdisplay.toolbars['vdigit']
-            if digitToolbar and digitToolbar.GetLayer() and \
-                    digitToolbar.GetLayer().GetName() == self.dbMgrData['vectName']:
+            if digitToolbar and digitToolbar.GetLayer() and digitToolbar.GetLayer(
+            ).GetName() == self.dbMgrData['vectName']:
                 display = self.mapdisplay.GetMapWindow().GetDisplay()
-                display.SetSelected(map(int, cats), layer = self.selLayer)
-                self.mapdisplay.MapWindow.UpdateMap(render = True, renderVector = True)
-        
+                display.SetSelected(map(int, cats), layer=self.selLayer)
+                self.mapdisplay.MapWindow.UpdateMap(
+                    render=True, renderVector=True)
+
         if self.OnDataItemDelete(None) and self.mapdisplay:
             if display:
                 self.mapdisplay.GetMapWindow().digit.DeleteSelectedLines()
             else:
                 RunCommand('v.edit',
-                           parent = self,
-                           quiet = True,
-                           map = self.dbMgrData['vectName'],
-                           tool = 'delete',
-                           cats = ListOfCatsToRange(cats))
-            
-            self.mapdisplay.MapWindow.UpdateMap(render = True, renderVector = True)
-     
+                           parent=self,
+                           quiet=True,
+                           map=self.dbMgrData['vectName'],
+                           tool='delete',
+                           cats=ListOfCatsToRange(cats))
+
+            self.mapdisplay.MapWindow.UpdateMap(render=True, renderVector=True)
+
     def OnApplySqlStatement(self, event):
         """Apply simple/advanced sql statement"""
-        keyColumn = -1 # index of key column
+        keyColumn = -1  # index of key column
         listWin = self.FindWindowById(self.layerPage[self.selLayer]['data'])
         sql = None
         win = self.FindWindowById(self.layerPage[self.selLayer]['sqlNtb'])
         if not win:
             return
-        
+
         showSelected = False
         wx.BeginBusyCursor()
         if win.GetSelection() == 0:
             # simple sql statement
-            whereCol = self.FindWindowById(self.layerPage[self.selLayer]['whereColumn']).GetStringSelection()
-            whereOpe = self.FindWindowById(self.layerPage[self.selLayer]['whereOperator']).GetStringSelection()
-            whereWin = self.FindWindowById(self.layerPage[self.selLayer]['where'])
+            whereCol = self.FindWindowById(self.layerPage[self.selLayer][
+                                           'whereColumn']).GetStringSelection()
+            whereOpe = self.FindWindowById(self.layerPage[self.selLayer][
+                                           'whereOperator']).GetStringSelection()
+            whereWin = self.FindWindowById(
+                self.layerPage[self.selLayer]['where'])
             whereVal = whereWin.GetValue().strip()
-            table    = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]
-            if self.dbMgrData['mapDBInfo'].tables[table][whereCol]['ctype'] == str:
+            table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]
+            if self.dbMgrData['mapDBInfo'].tables[
+                    table][whereCol]['ctype'] == str:
                 # string attribute, check for quotes
                 whereVal = whereVal.replace('"', "'")
                 if whereVal:
@@ -1846,20 +2010,27 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
                     if not whereVal.endswith("'"):
                         whereVal += "'"
                     whereWin.SetValue(whereVal)
-            
+
             try:
                 if len(whereVal) > 0:
                     showSelected = True
-                    keyColumn = listWin.LoadData(self.selLayer, where = whereCol + whereOpe + whereVal)
+                    keyColumn = listWin.LoadData(
+                        self.selLayer, where=whereCol + whereOpe + whereVal)
                 else:
                     keyColumn = listWin.LoadData(self.selLayer)
             except GException as e:
-                GError(parent = self,
-                       message = _("Loading attribute data failed.\n\n%s") % e.value)
-                self.FindWindowById(self.layerPage[self.selLayer]['where']).SetValue('')
+                GError(
+                    parent=self,
+                    message=_("Loading attribute data failed.\n\n%s") %
+                    e.value)
+                self.FindWindowById(
+                    self.layerPage[
+                        self.selLayer]['where']).SetValue('')
         else:
             # advanced sql statement
-            win = self.FindWindowById(self.layerPage[self.selLayer]['statement'])
+            win = self.FindWindowById(
+                self.layerPage[
+                    self.selLayer]['statement'])
             try:
                 cols, where = self.ValidateSelectStatement(win.GetValue())
                 if cols is None and where is None:
@@ -1867,64 +2038,79 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
                 if where:
                     showSelected = True
             except TypeError:
-                GError(parent = self,
-                       message = _("Loading attribute data failed.\n"
-                                   "Invalid SQL select statement.\n\n%s") % win.GetValue())
-                win.SetValue("SELECT * FROM %s" % self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table'])
+                GError(
+                    parent=self, message=_(
+                        "Loading attribute data failed.\n"
+                        "Invalid SQL select statement.\n\n%s") %
+                    win.GetValue())
+                win.SetValue(
+                    "SELECT * FROM %s" %
+                    self.dbMgrData['mapDBInfo'].layers[
+                        self.selLayer]['table'])
                 cols = None
                 where = None
-            
+
             if cols or where or sql:
                 try:
-                    keyColumn = listWin.LoadData(self.selLayer, columns = cols,
-                                                 where = where, sql = sql)
+                    keyColumn = listWin.LoadData(self.selLayer, columns=cols,
+                                                 where=where, sql=sql)
                 except GException as e:
-                    GError(parent = self,
-                           message = _("Loading attribute data failed.\n\n%s") % e.value)
-                    win.SetValue("SELECT * FROM %s" % self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table'])
-        
+                    GError(
+                        parent=self,
+                        message=_("Loading attribute data failed.\n\n%s") %
+                        e.value)
+                    win.SetValue(
+                        "SELECT * FROM %s" %
+                        self.dbMgrData['mapDBInfo'].layers[
+                            self.selLayer]['table'])
+
         # sort by key column
         if sql and 'order by' in sql.lower():
-            pass # don't order by key column
+            pass  # don't order by key column
         else:
             if keyColumn > -1:
-                listWin.SortListItems(col = keyColumn, ascending = True)
+                listWin.SortListItems(col=keyColumn, ascending=True)
             else:
-                listWin.SortListItems(col = 0, ascending = True) 
-        
+                listWin.SortListItems(col=0, ascending=True)
+
         wx.EndBusyCursor()
-        
+
         # update statusbar
-        self.log.write(_("Number of loaded records: %d") % \
-                           self.FindWindowById(self.layerPage[self.selLayer]['data']).GetItemCount())
+        self.log.write(
+            _("Number of loaded records: %d") %
+            self.FindWindowById(
+                self.layerPage[
+                    self.selLayer]['data']).GetItemCount())
 
         # update map display if needed
         if self.mapdisplay and \
-                UserSettings.Get(group = 'atm', key = 'highlight', subkey = 'auto'):
+                UserSettings.Get(group='atm', key='highlight', subkey='auto'):
             # TODO: replace by signals
             if showSelected:
-                self._drawSelected(zoom=False, selectedOnly=False) 
+                self._drawSelected(zoom=False, selectedOnly=False)
             else:
                 self.mapdisplay.RemoveQueryLayer()
-                self.mapdisplay.MapWindow.UpdateMap(render=False) # TODO: replace by signals
+                self.mapdisplay.MapWindow.UpdateMap(
+                    render=False)  # TODO: replace by signals
 
-    def OnBuilder(self,event):
+    def OnBuilder(self, event):
         """SQL Builder button pressed -> show the SQLBuilder dialog"""
         if not self.builder:
-            self.builder = SQLBuilderSelect(parent = self, id = wx.ID_ANY, 
-                                            vectmap = self.dbMgrData['vectName'],
-                                            layer = self.selLayer,
-                                            evtHandler = self.OnBuilderEvt)
+            self.builder = SQLBuilderSelect(parent=self, id=wx.ID_ANY,
+                                            vectmap=self.dbMgrData['vectName'],
+                                            layer=self.selLayer,
+                                            evtHandler=self.OnBuilderEvt)
             self.builder.Show()
         else:
             self.builder.Raise()
-        
+
     def OnBuilderEvt(self, event):
         if event == 'apply':
             sqlstr = self.builder.GetSQLStatement()
-            self.FindWindowById(self.layerPage[self.selLayer]['statement']).SetValue(sqlstr)
+            self.FindWindowById(self.layerPage[self.selLayer][
+                                'statement']).SetValue(sqlstr)
             # apply query
-            #self.listOfSQLStatements.append(sqlstr) #TODO probably it was bug 
+            # self.listOfSQLStatements.append(sqlstr) #TODO probably it was bug
             self.OnApplySqlStatement(None)
             # close builder on apply
             if self.builder.CloseOnApply():
@@ -1940,7 +2126,7 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         """
         if statement[0:7].lower() != 'select ':
             return None
-        
+
         cols = ''
         index = 7
         for c in statement[index:]:
@@ -1952,26 +2138,28 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             cols = None
         else:
             cols = cols.split(',')
-        
-        tablelen = len(self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table'])
-        
-        if statement[index+1:index+6].lower() != 'from ' or \
-                statement[index+6:index+6+tablelen] != '%s' % \
+
+        tablelen = len(
+            self.dbMgrData['mapDBInfo'].layers[
+                self.selLayer]['table'])
+
+        if statement[index + 1:index + 6].lower() != 'from ' or \
+                statement[index + 6:index + 6 + tablelen] != '%s' % \
                 (self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']):
             return None
-        
-        if len(statement[index+7+tablelen:]) > 0:
+
+        if len(statement[index + 7 + tablelen:]) > 0:
             index = statement.lower().find('where ')
             if index > -1:
-                where = statement[index+6:]
+                where = statement[index + 6:]
             else:
                 where = None
         else:
             where = None
-        
+
         return (cols, where)
 
-    def LoadData(self, layer, columns = None, where = None, sql = None):
+    def LoadData(self, layer, columns=None, where=None, sql=None):
         """Load data into list
 
         :param int layer: layer number
@@ -1979,7 +2167,7 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
         :param str where: where statement
         :param str sql: full sql statement
 
-        :return: id of key column 
+        :return: id of key column
         :return: -1 if key column is not displayed
         """
         listWin = self.FindWindowById(self.layerPage[layer]['data'])
@@ -1998,27 +2186,33 @@ class DbMgrBrowsePage(DbMgrNotebookBase):
             return
         win = self.FindWindowById(self.layerPage[self.selLayer]['sqlNtb'])
         if win.GetSelection() == 0:
-            self.FindWindowById(self.layerPage[layer]['whereColumn']).SetSelection(0)
-            self.FindWindowById(self.layerPage[layer]['whereOperator']).SetSelection(0)
+            self.FindWindowById(
+                self.layerPage[layer]['whereColumn']).SetSelection(0)
+            self.FindWindowById(
+                self.layerPage[layer]['whereOperator']).SetSelection(0)
             self.FindWindowById(self.layerPage[layer]['where']).SetValue('')
         else:
-            sqlWin = self.FindWindowById(self.layerPage[self.selLayer]['statement'])
-            sqlWin.SetValue("SELECT * FROM %s" % self.dbMgrData['mapDBInfo'].layers[layer]['table'])
-            
+            sqlWin = self.FindWindowById(
+                self.layerPage[self.selLayer]['statement'])
+            sqlWin.SetValue("SELECT * FROM %s" %
+                            self.dbMgrData['mapDBInfo'].layers[layer]['table'])
+
         self.UpdatePage(layer)
-        
-class DbMgrTablesPage(DbMgrNotebookBase):   
-    def __init__(self, parent, parentDbMgrBase, onlyLayer = -1):
+
+
+class DbMgrTablesPage(DbMgrNotebookBase):
+
+    def __init__(self, parent, parentDbMgrBase, onlyLayer=-1):
         """Page for managing tables
 
         :param parent: GUI parent
         :param parentDbMgrBase: instance of DbMgrBase class
         :param onlyLayer: create only tab of given layer, if -1
-                          creates tabs of all layers 
+                          creates tabs of all layers
         """
 
-        DbMgrNotebookBase.__init__(self, parent = parent,
-                                 parentDbMgrBase = parentDbMgrBase)
+        DbMgrNotebookBase.__init__(self, parent=parent,
+                                   parentDbMgrBase=parentDbMgrBase)
 
         for layer in self.dbMgrData['mapDBInfo'].layers.keys():
             if onlyLayer > 0 and layer != onlyLayer:
@@ -2026,26 +2220,26 @@ class DbMgrTablesPage(DbMgrNotebookBase):
             self.AddLayer(layer)
 
         if self.layers:
-            self.SetSelection(0) # select first layer
+            self.SetSelection(0)  # select first layer
             self.selLayer = self.layers[0]
 
-    def AddLayer(self, layer, pos = -1):
-        """Adds tab which represents table 
+    def AddLayer(self, layer, pos=-1):
+        """Adds tab which represents table
 
         :param layer: vector map layer connected to table
         :param pos: position of tab, if -1 it is added to end
 
-        :return: True if layer was added 
-        :return: False if layer was not added - layer has been already added or does not exist 
+        :return: True if layer was added
+        :return: False if layer was not added - layer has been already added or does not exist
         """
         if layer in self.layers or \
-            layer not in self.parentDbMgrBase.GetVectorLayers():
+                layer not in self.parentDbMgrBase.GetVectorLayers():
             return False
 
-        self.layers.append(layer) 
+        self.layers.append(layer)
 
         self.layerPage[layer] = {}
-        panel = wx.Panel(parent = self, id = wx.ID_ANY)
+        panel = wx.Panel(parent=self, id=wx.ID_ANY)
         self.layerPage[layer]['tablePage'] = panel.GetId()
         label = _("Table")
         if not self.dbMgrData['editable']:
@@ -2053,162 +2247,198 @@ class DbMgrTablesPage(DbMgrNotebookBase):
 
         if pos == -1:
             pos = self.GetPageCount()
-        self.InsertPage(pos, page = panel,
-                        text = " %d / %s %s" % (layer, label,
-                        self.dbMgrData['mapDBInfo'].layers[layer]['table']))
-            
+        self.InsertPage(
+            pos, page=panel, text=" %d / %s %s" %
+            (layer, label, self.dbMgrData['mapDBInfo'].layers[layer]['table']))
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-            
+
         #
         # dbInfo
         #
-        dbBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                                      label = " %s " % _("Database connection"))
+        dbBox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                             label=" %s " % _("Database connection"))
         dbSizer = wx.StaticBoxSizer(dbBox, wx.VERTICAL)
-        dbSizer.Add(item = CreateDbInfoDesc(panel, self.dbMgrData['mapDBInfo'], layer),
-                    proportion = 1,
-                    flag = wx.EXPAND | wx.ALL,
-                    border = 3)
-            
+        dbSizer.Add(
+            item=CreateDbInfoDesc(
+                panel,
+                self.dbMgrData['mapDBInfo'],
+                layer),
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
+
         #
         # table description
         #
         table = self.dbMgrData['mapDBInfo'].layers[layer]['table']
-        tableBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                                label = " %s " % _("Table <%s> - right-click to delete column(s)") % table)
-        
+        tableBox = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Table <%s> - right-click to delete column(s)") %
+            table)
+
         tableSizer = wx.StaticBoxSizer(tableBox, wx.VERTICAL)
-            
+
         tlist = self._createTableDesc(panel, table)
-        tlist.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnTableRightUp) #wxMSW
-        tlist.Bind(wx.EVT_RIGHT_UP,            self.OnTableRightUp) #wxGTK
+        tlist.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnTableRightUp)  # wxMSW
+        tlist.Bind(wx.EVT_RIGHT_UP, self.OnTableRightUp)  # wxGTK
         self.layerPage[layer]['tableData'] = tlist.GetId()
-           
+
         # manage columns (add)
-        addBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Add column"))
+        addBox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                              label=" %s " % _("Add column"))
         addSizer = wx.StaticBoxSizer(addBox, wx.HORIZONTAL)
-           
-        column = wx.TextCtrl(parent = panel, id = wx.ID_ANY, value = '',
-                             size = (150, -1), style = wx.TE_PROCESS_ENTER)
-        column.Bind(wx.EVT_TEXT,       self.OnTableAddColumnName)
+
+        column = wx.TextCtrl(parent=panel, id=wx.ID_ANY, value='',
+                             size=(150, -1), style=wx.TE_PROCESS_ENTER)
+        column.Bind(wx.EVT_TEXT, self.OnTableAddColumnName)
         column.Bind(wx.EVT_TEXT_ENTER, self.OnTableItemAdd)
         self.layerPage[layer]['addColName'] = column.GetId()
-        addSizer.Add(item =  wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Column")),
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-        addSizer.Add(item = column, proportion = 1,
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-           
-        ctype = wx.Choice (parent = panel, id = wx.ID_ANY,
-                           choices = ["integer",
-                                      "double",
-                                      "varchar",
-                                      "date"]) # FIXME
+        addSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Column")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        addSizer.Add(item=column, proportion=1,
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                     border=5)
+
+        ctype = wx.Choice(parent=panel, id=wx.ID_ANY,
+                          choices=["integer",
+                                   "double",
+                                   "varchar",
+                                   "date"])  # FIXME
         ctype.SetSelection(0)
         ctype.Bind(wx.EVT_CHOICE, self.OnTableChangeType)
         self.layerPage[layer]['addColType'] = ctype.GetId()
-        addSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Type")), 
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-        addSizer.Add(item = ctype,
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-            
-        length = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                             initial = 250,
-                             min = 1, max = 1e6)
+        addSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Type")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        addSizer.Add(item=ctype,
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                     border=5)
+
+        length = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                             initial=250,
+                             min=1, max=1e6)
         length.Enable(False)
         self.layerPage[layer]['addColLength'] = length.GetId()
-        addSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Length")),
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-        addSizer.Add(item = length,
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-            
-        btnAddCol = wx.Button(parent = panel, id = wx.ID_ANY, label = _("Add"))
+        addSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Length")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        addSizer.Add(item=length,
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                     border=5)
+
+        btnAddCol = wx.Button(parent=panel, id=wx.ID_ANY, label=_("Add"))
         btnAddCol.Bind(wx.EVT_BUTTON, self.OnTableItemAdd)
         btnAddCol.Enable(False)
         self.layerPage[layer]['addColButton'] = btnAddCol.GetId()
-        addSizer.Add(item = btnAddCol, flag = wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND,
-                     border = 3)
-            
+        addSizer.Add(item=btnAddCol, flag=wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND,
+                     border=3)
+
         # manage columns (rename)
-        renameBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                                 label = " %s " % _("Rename column"))
+        renameBox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                                 label=" %s " % _("Rename column"))
         renameSizer = wx.StaticBoxSizer(renameBox, wx.HORIZONTAL)
-            
-        columnFrom = wx.ComboBox(parent = panel, id = wx.ID_ANY, size = (150, -1),
-                                 style = wx.CB_SIMPLE | wx.CB_READONLY,
-                                 choices = self.dbMgrData['mapDBInfo'].GetColumns(table))
+
+        columnFrom = wx.ComboBox(
+            parent=panel, id=wx.ID_ANY, size=(150, -1),
+            style=wx.CB_SIMPLE | wx.CB_READONLY,
+            choices=self.dbMgrData['mapDBInfo'].GetColumns(table))
         columnFrom.SetSelection(0)
         self.layerPage[layer]['renameCol'] = columnFrom.GetId()
-        renameSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Column")),
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                        border = 5)
-        renameSizer.Add(item = columnFrom, proportion = 1,
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                        border = 5)
-            
-        columnTo = wx.TextCtrl(parent = panel, id = wx.ID_ANY, value = '',
-                               size = (150, -1), style = wx.TE_PROCESS_ENTER)
-        columnTo.Bind(wx.EVT_TEXT,       self.OnTableRenameColumnName)
+        renameSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Column")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        renameSizer.Add(item=columnFrom, proportion=1,
+                        flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                        border=5)
+
+        columnTo = wx.TextCtrl(parent=panel, id=wx.ID_ANY, value='',
+                               size=(150, -1), style=wx.TE_PROCESS_ENTER)
+        columnTo.Bind(wx.EVT_TEXT, self.OnTableRenameColumnName)
         columnTo.Bind(wx.EVT_TEXT_ENTER, self.OnTableItemChange)
         self.layerPage[layer]['renameColTo'] = columnTo.GetId()
-        renameSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("To")),
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                        border = 5)
-        renameSizer.Add(item = columnTo, proportion = 1,
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                        border = 5)
-            
-        btnRenameCol = wx.Button(parent = panel, id = wx.ID_ANY, label = _("&Rename"))
+        renameSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("To")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        renameSizer.Add(item=columnTo, proportion=1,
+                        flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                        border=5)
+
+        btnRenameCol = wx.Button(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("&Rename"))
         btnRenameCol.Bind(wx.EVT_BUTTON, self.OnTableItemChange)
         btnRenameCol.Enable(False)
         self.layerPage[layer]['renameColButton'] = btnRenameCol.GetId()
-        renameSizer.Add(item = btnRenameCol, flag = wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND,
-                        border = 3)
-            
-        tableSizer.Add(item = tlist,
-                       flag = wx.ALL | wx.EXPAND,
-                       proportion = 1,
-                       border = 3)
-            
+        renameSizer.Add(
+            item=btnRenameCol,
+            flag=wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND,
+            border=3)
+
+        tableSizer.Add(item=tlist,
+                       flag=wx.ALL | wx.EXPAND,
+                       proportion=1,
+                       border=3)
+
         pageSizer.Add(item=dbSizer,
-                      flag = wx.ALL | wx.EXPAND,
-                      proportion = 0,
-                      border = 3)
-           
-        pageSizer.Add(item = tableSizer,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
-                      proportion = 1,
-                      border = 3)
-            
-        pageSizer.Add(item = addSizer,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
-                      proportion = 0,
-                      border = 3)
-        pageSizer.Add(item = renameSizer,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
-                      proportion = 0,
-                      border = 3)
-            
+                      flag=wx.ALL | wx.EXPAND,
+                      proportion=0,
+                      border=3)
+
+        pageSizer.Add(item=tableSizer,
+                      flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+                      proportion=1,
+                      border=3)
+
+        pageSizer.Add(item=addSizer,
+                      flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+                      proportion=0,
+                      border=3)
+        pageSizer.Add(item=renameSizer,
+                      flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+                      proportion=0,
+                      border=3)
+
         panel.SetSizer(pageSizer)
-           
+
         if not self.dbMgrData['editable']:
-            for widget in [columnTo, columnFrom, length, ctype, 
-                           column,   btnAddCol,  btnRenameCol]:
+            for widget in [columnTo, columnFrom, length, ctype,
+                           column, btnAddCol, btnRenameCol]:
                 widget.Enable(False)
 
         return True
 
     def _createTableDesc(self, parent, table):
         """Create list with table description"""
-        tlist = TableListCtrl(parent = parent, id = wx.ID_ANY,
-                             table = self.dbMgrData['mapDBInfo'].tables[table],
-                             columns = self.dbMgrData['mapDBInfo'].GetColumns(table))
+        tlist = TableListCtrl(
+            parent=parent,
+            id=wx.ID_ANY,
+            table=self.dbMgrData['mapDBInfo'].tables[table],
+            columns=self.dbMgrData['mapDBInfo'].GetColumns(table))
         tlist.Populate()
         # sorter
         # itemDataMap = list.Populate()
@@ -2219,7 +2449,9 @@ class DbMgrTablesPage(DbMgrNotebookBase):
     def OnTableChangeType(self, event):
         """Data type for new column changed. Enable or disable
         data length widget"""
-        win = self.FindWindowById(self.layerPage[self.selLayer]['addColLength'])
+        win = self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['addColLength'])
         if event.GetString() == "varchar":
             win.Enable(True)
         else:
@@ -2227,9 +2459,13 @@ class DbMgrTablesPage(DbMgrNotebookBase):
 
     def OnTableRenameColumnName(self, event):
         """Editing column name to be added to the table"""
-        btn  = self.FindWindowById(self.layerPage[self.selLayer]['renameColButton'])
-        col  = self.FindWindowById(self.layerPage[self.selLayer]['renameCol'])
-        colTo = self.FindWindowById(self.layerPage[self.selLayer]['renameColTo'])
+        btn = self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameColButton'])
+        col = self.FindWindowById(self.layerPage[self.selLayer]['renameCol'])
+        colTo = self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameColTo'])
         if len(col.GetValue()) > 0 and len(colTo.GetValue()) > 0:
             btn.Enable(True)
         else:
@@ -2239,7 +2475,9 @@ class DbMgrTablesPage(DbMgrNotebookBase):
 
     def OnTableAddColumnName(self, event):
         """Editing column name to be added to the table"""
-        btn = self.FindWindowById(self.layerPage[self.selLayer]['addColButton'])
+        btn = self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['addColButton'])
         if len(event.GetString()) > 0:
             btn.Enable(True)
         else:
@@ -2249,50 +2487,61 @@ class DbMgrTablesPage(DbMgrNotebookBase):
 
     def OnTableItemChange(self, event):
         """Rename column in the table"""
-        tlist   = self.FindWindowById(self.layerPage[self.selLayer]['tableData'])
-        name   = self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).GetValue()
-        nameTo = self.FindWindowById(self.layerPage[self.selLayer]['renameColTo']).GetValue()
+        tlist = self.FindWindowById(self.layerPage[self.selLayer]['tableData'])
+        name = self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameCol']).GetValue()
+        nameTo = self.FindWindowById(self.layerPage[self.selLayer][
+                                     'renameColTo']).GetValue()
 
         table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]["table"]
 
         if not name or not nameTo:
-            GError(parent = self,
-                   message = _("Unable to rename column. "
-                               "No column name defined."))
+            GError(parent=self,
+                   message=_("Unable to rename column. "
+                             "No column name defined."))
             return
         else:
-            item = tlist.FindItem(start = -1, str = name)
+            item = tlist.FindItem(start=-1, str=name)
             if item > -1:
-                if tlist.FindItem(start = -1, str = nameTo) > -1:
-                    GError(parent = self,
-                           message = _("Unable to rename column <%(column)s> to "
-                                       "<%(columnTo)s>. Column already exists "
-                                       "in the table <%(table)s>.") % \
-                               {'column' : name, 'columnTo' : nameTo,
-                                'table' : table})
+                if tlist.FindItem(start=-1, str=nameTo) > -1:
+                    GError(parent=self,
+                           message=_("Unable to rename column <%(column)s> to "
+                                     "<%(columnTo)s>. Column already exists "
+                                     "in the table <%(table)s>.") %
+                           {'column': name, 'columnTo': nameTo,
+                            'table': table})
                     return
                 else:
                     tlist.SetItemText(item, nameTo)
 
                     self.listOfCommands.append(('v.db.renamecolumn',
-                                                { 'map'    : self.dbMgrData['vectName'],
-                                                  'layer'  : self.selLayer,
-                                                  'column' : '%s,%s' % (name, nameTo) }
+                                                {'map': self.dbMgrData['vectName'],
+                                                 'layer': self.selLayer,
+                                                 'column': '%s,%s' % (name, nameTo)}
                                                 ))
             else:
-                GError(parent = self,
-                       message = _("Unable to rename column. "
-                                   "Column <%(column)s> doesn't exist in the table <%(table)s>.") % 
-                       {'column' : name, 'table' : table})
+                GError(
+                    parent=self,
+                    message=_(
+                        "Unable to rename column. "
+                        "Column <%(column)s> doesn't exist in the table <%(table)s>.") % {
+                        'column': name,
+                        'table': table})
                 return
-            
+
         # apply changes
         self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
 
         # update widgets
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetItems(self.dbMgrData['mapDBInfo'].GetColumns(table))
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetSelection(0)
-        self.FindWindowById(self.layerPage[self.selLayer]['renameColTo']).SetValue('')
+        self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameCol']).SetItems(
+            self.dbMgrData['mapDBInfo'].GetColumns(table))
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'renameCol']).SetSelection(0)
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'renameColTo']).SetValue('')
 
         event.Skip()
 
@@ -2302,20 +2551,27 @@ class DbMgrTablesPage(DbMgrNotebookBase):
             self.popupTableID1 = wx.NewId()
             self.popupTableID2 = wx.NewId()
             self.popupTableID3 = wx.NewId()
-            self.Bind(wx.EVT_MENU, self.OnTableItemDelete,    id = self.popupTableID1)
-            self.Bind(wx.EVT_MENU, self.OnTableItemDeleteAll, id = self.popupTableID2)
-            self.Bind(wx.EVT_MENU, self.OnTableReload,        id = self.popupTableID3)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnTableItemDelete,
+                id=self.popupTableID1)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnTableItemDeleteAll,
+                id=self.popupTableID2)
+            self.Bind(wx.EVT_MENU, self.OnTableReload, id=self.popupTableID3)
 
         # generate popup-menu
         menu = wx.Menu()
         menu.Append(self.popupTableID1, _("Drop selected column"))
-        if self.FindWindowById(self.layerPage[self.selLayer]['tableData']).GetFirstSelected() == -1:
+        if self.FindWindowById(self.layerPage[self.selLayer][
+                               'tableData']).GetFirstSelected() == -1:
             menu.Enable(self.popupTableID1, False)
         menu.Append(self.popupTableID2, _("Drop all columns"))
         menu.AppendSeparator()
         menu.Append(self.popupTableID3, _("Reload"))
-        
-        if not self.dbMgrData['editable']: 
+
+        if not self.dbMgrData['editable']:
             menu.Enable(self.popupTableID1, False)
             menu.Enable(self.popupTableID2, False)
 
@@ -2325,10 +2581,11 @@ class DbMgrTablesPage(DbMgrNotebookBase):
     def OnTableItemDelete(self, event):
         """Delete selected item(s) from the list"""
         tlist = self.FindWindowById(self.layerPage[self.selLayer]['tableData'])
-        
+
         item = tlist.GetFirstSelected()
         countSelected = tlist.GetSelectedItemCount()
-        if UserSettings.Get(group = 'atm', key = 'askOnDeleteRec', subkey = 'enabled'):
+        if UserSettings.Get(
+                group='atm', key='askOnDeleteRec', subkey='enabled'):
             # if the user select more columns to delete, all the columns name
             # will appear the the warning dialog
             if tlist.GetSelectedItemCount() > 1:
@@ -2339,102 +2596,127 @@ class DbMgrTablesPage(DbMgrNotebookBase):
                         deleteColumns += ", '%s'" % tlist.GetItemText(item)
             else:
                 deleteColumns = "column '%s'" % tlist.GetItemText(item)
-            deleteDialog = wx.MessageBox(parent = self,
-                                         message = _("Selected %s will PERMANENTLY removed "
-                                                   "from table. Do you want to drop the column?") % \
-                                             (deleteColumns),
-                                         caption = _("Drop column(s)"),
-                                         style = wx.YES_NO | wx.CENTRE)
+            deleteDialog = wx.MessageBox(
+                parent=self,
+                message=_(
+                    "Selected %s will PERMANENTLY removed "
+                    "from table. Do you want to drop the column?") %
+                (deleteColumns),
+                caption=_("Drop column(s)"),
+                style=wx.YES_NO | wx.CENTRE)
             if deleteDialog != wx.YES:
                 return False
         item = tlist.GetFirstSelected()
         while item != -1:
             self.listOfCommands.append(('v.db.dropcolumn',
-                                        { 'map' : self.dbMgrData['vectName'],
-                                          'layer' : self.selLayer,
-                                          'column' : tlist.GetItemText(item) }
+                                        {'map': self.dbMgrData['vectName'],
+                                         'layer': self.selLayer,
+                                         'column': tlist.GetItemText(item)}
                                         ))
             tlist.DeleteItem(item)
             item = tlist.GetFirstSelected()
-        
+
         # apply changes
         self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
-        
+
         # update widgets
         table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetItems(self.dbMgrData['mapDBInfo'].GetColumns(table))
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetSelection(0)
-        
+        self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameCol']).SetItems(
+            self.dbMgrData['mapDBInfo'].GetColumns(table))
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'renameCol']).SetSelection(0)
+
         event.Skip()
 
     def OnTableItemDeleteAll(self, event):
         """Delete all items from the list"""
-        table     = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
-        cols      = self.dbMgrData['mapDBInfo'].GetColumns(table)
+        table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
+        cols = self.dbMgrData['mapDBInfo'].GetColumns(table)
         keyColumn = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['key']
         if keyColumn in cols:
             cols.remove(keyColumn)
-        
-        if UserSettings.Get(group = 'atm', key = 'askOnDeleteRec', subkey = 'enabled'):
-            deleteDialog = wx.MessageBox(parent = self,
-                                         message = _("Selected columns\n%s\nwill PERMANENTLY removed "
-                                                   "from table. Do you want to drop the columns?") % \
-                                             ('\n'.join(cols)),
-                                         caption = _("Drop column(s)"),
-                                         style = wx.YES_NO | wx.CENTRE)
+
+        if UserSettings.Get(
+                group='atm', key='askOnDeleteRec', subkey='enabled'):
+            deleteDialog = wx.MessageBox(
+                parent=self,
+                message=_(
+                    "Selected columns\n%s\nwill PERMANENTLY removed "
+                    "from table. Do you want to drop the columns?") %
+                ('\n'.join(cols)),
+                caption=_("Drop column(s)"),
+                style=wx.YES_NO | wx.CENTRE)
             if deleteDialog != wx.YES:
                 return False
-        
+
         for col in cols:
             self.listOfCommands.append(('v.db.dropcolumn',
-                                        { 'map' : self.dbMgrData['vectName'],
-                                          'layer' : self.selLayer,
-                                          'column' : col }
+                                        {'map': self.dbMgrData['vectName'],
+                                         'layer': self.selLayer,
+                                         'column': col}
                                         ))
-        self.FindWindowById(self.layerPage[self.selLayer]['tableData']).DeleteAllItems()
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'tableData']).DeleteAllItems()
 
         # apply changes
         self.ApplyCommands(self.listOfCommands, self.listOfSQLStatements)
 
         # update widgets
         table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetItems(self.dbMgrData['mapDBInfo'].GetColumns(table))
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetSelection(0)
+        self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameCol']).SetItems(
+            self.dbMgrData['mapDBInfo'].GetColumns(table))
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'renameCol']).SetSelection(0)
 
         event.Skip()
 
-    def OnTableReload(self, event = None):
+    def OnTableReload(self, event=None):
         """Reload table description"""
-        self.FindWindowById(self.layerPage[self.selLayer]['tableData']).Populate(update = True)
+        self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['tableData']).Populate(
+            update=True)
         self.listOfCommands = []
 
     def OnTableItemAdd(self, event):
         """Add new column to the table"""
-        name = self.FindWindowById(self.layerPage[self.selLayer]['addColName']).GetValue()
-                
-        ctype = self.FindWindowById(self.layerPage[self.selLayer]['addColType']). \
-            GetStringSelection()
-        
-        length = int(self.FindWindowById(self.layerPage[self.selLayer]['addColLength']). \
-                     GetValue())
-        
+        name = self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['addColName']).GetValue()
+
+        ctype = self.FindWindowById(self.layerPage[self.selLayer][
+                                    'addColType']). GetStringSelection()
+
+        length = int(
+            self.FindWindowById(
+                self.layerPage[
+                    self.selLayer]['addColLength']). GetValue())
+
         # add item to the list of table columns
         tlist = self.FindWindowById(self.layerPage[self.selLayer]['tableData'])
 
-
-        index = tlist.InsertStringItem(sys.maxint, str(name))
+        index = tlist.InsertStringItem(tlist.GetItemCount(), str(name))
         tlist.SetStringItem(index, 0, str(name))
         tlist.SetStringItem(index, 1, str(ctype))
         tlist.SetStringItem(index, 2, str(length))
-        
+
         self.AddColumn(name, ctype, length)
 
         # update widgets
         table = self.dbMgrData['mapDBInfo'].layers[self.selLayer]['table']
-        self.FindWindowById(self.layerPage[self.selLayer]['addColName']).SetValue('')
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetItems(self.dbMgrData['mapDBInfo'].GetColumns(table))
-        self.FindWindowById(self.layerPage[self.selLayer]['renameCol']).SetSelection(0)
-        
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'addColName']).SetValue('')
+        self.FindWindowById(
+            self.layerPage[
+                self.selLayer]['renameCol']).SetItems(
+            self.dbMgrData['mapDBInfo'].GetColumns(table))
+        self.FindWindowById(self.layerPage[self.selLayer][
+                            'renameCol']).SetSelection(0)
+
         event.Skip()
 
     def UpdatePage(self, layer):
@@ -2444,86 +2726,90 @@ class DbMgrTablesPage(DbMgrNotebookBase):
 
             # update table description
             tlist = self.FindWindowById(self.layerPage[layer]['tableData'])
-            tlist.Update(table = self.dbMgrData['mapDBInfo'].tables[table],
-                         columns = self.dbMgrData['mapDBInfo'].GetColumns(table))
+            tlist.Update(table=self.dbMgrData['mapDBInfo'].tables[table],
+                         columns=self.dbMgrData['mapDBInfo'].GetColumns(table))
             self.OnTableReload(None)
 
+
 class DbMgrLayersPage(wx.Panel):
+
     def __init__(self, parent, parentDbMgrBase):
         """Create layer manage page"""
         self.parentDbMgrBase = parentDbMgrBase
         self.dbMgrData = self.parentDbMgrBase.dbMgrData
 
-        wx.Panel.__init__(self, parent = parent)
-        splitterWin = wx.SplitterWindow(parent = self, id = wx.ID_ANY)
+        wx.Panel.__init__(self, parent=parent)
+        splitterWin = wx.SplitterWindow(parent=self, id=wx.ID_ANY)
         splitterWin.SetMinimumPaneSize(100)
-                
+
         #
         # list of layers
         #
-        panelList = wx.Panel(parent = splitterWin, id = wx.ID_ANY)
+        panelList = wx.Panel(parent=splitterWin, id=wx.ID_ANY)
 
-        panelListSizer  = wx.BoxSizer(wx.VERTICAL)
-        layerBox = wx.StaticBox(parent = panelList, id = wx.ID_ANY,
-                                label = " %s " % _("List of layers"))
+        panelListSizer = wx.BoxSizer(wx.VERTICAL)
+        layerBox = wx.StaticBox(parent=panelList, id=wx.ID_ANY,
+                                label=" %s " % _("List of layers"))
         layerSizer = wx.StaticBoxSizer(layerBox, wx.VERTICAL)
 
         self.layerList = self._createLayerDesc(panelList)
-        self.layerList.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnLayerRightUp) #wxMSW
-        self.layerList.Bind(wx.EVT_RIGHT_UP,            self.OnLayerRightUp) #wxGTK
-        
-        layerSizer.Add(item = self.layerList,
-                       flag = wx.ALL | wx.EXPAND,
-                       proportion = 1,
-                       border = 3)
-
-        panelListSizer.Add(item = layerSizer,
-                           flag = wx.ALL | wx.EXPAND,
-                           proportion = 1,
-                           border = 3)
+        self.layerList.Bind(
+            wx.EVT_COMMAND_RIGHT_CLICK,
+            self.OnLayerRightUp)  # wxMSW
+        self.layerList.Bind(wx.EVT_RIGHT_UP, self.OnLayerRightUp)  # wxGTK
+
+        layerSizer.Add(item=self.layerList,
+                       flag=wx.ALL | wx.EXPAND,
+                       proportion=1,
+                       border=3)
+
+        panelListSizer.Add(item=layerSizer,
+                           flag=wx.ALL | wx.EXPAND,
+                           proportion=1,
+                           border=3)
 
         panelList.SetSizer(panelListSizer)
 
         #
         # manage part
         #
-        panelManage = wx.Panel(parent = splitterWin, id = wx.ID_ANY)
-         
+        panelManage = wx.Panel(parent=splitterWin, id=wx.ID_ANY)
+
         manageSizer = wx.BoxSizer(wx.VERTICAL)
 
-        self.manageLayerBook = LayerBook(parent = panelManage, id = wx.ID_ANY,
-                                         parentDialog = self)
+        self.manageLayerBook = LayerBook(parent=panelManage, id=wx.ID_ANY,
+                                         parentDialog=self)
         if not self.dbMgrData['editable']:
             self.manageLayerBook.Enable(False)
 
-        manageSizer.Add(item = self.manageLayerBook,
-                        proportion = 1,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
-                        border = 5)
+        manageSizer.Add(item=self.manageLayerBook,
+                        proportion=1,
+                        flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+                        border=5)
 
-        panelSizer  = wx.BoxSizer(wx.VERTICAL)
-        panelSizer.Add(item = splitterWin,
-                      proportion = 1, 
-                      flag = wx.EXPAND) 
+        panelSizer = wx.BoxSizer(wx.VERTICAL)
+        panelSizer.Add(item=splitterWin,
+                       proportion=1,
+                       flag=wx.EXPAND)
 
         panelManage.SetSizer(manageSizer)
-        splitterWin.SplitHorizontally(panelList, panelManage, 100) 
+        splitterWin.SplitHorizontally(panelList, panelManage, 100)
         splitterWin.Fit()
         self.SetSizer(panelSizer)
 
     def _createLayerDesc(self, parent):
         """Create list of linked layers"""
-        tlist = LayerListCtrl(parent = parent, id = wx.ID_ANY,
-                             layers = self.dbMgrData['mapDBInfo'].layers)
-        
+        tlist = LayerListCtrl(parent=parent, id=wx.ID_ANY,
+                              layers=self.dbMgrData['mapDBInfo'].layers)
+
         tlist.Populate()
         # sorter
         # itemDataMap = list.Populate()
         # listmix.ColumnSorterMixin.__init__(self, 2)
 
         return tlist
-   
-    def UpdatePage(self):           
+
+    def UpdatePage(self):
         #
         # 'manage layers' page
         #
@@ -2532,45 +2818,50 @@ class DbMgrLayersPage(wx.Panel):
         #self.dbMgrData['mapDBInfo'] = VectorDBInfo(self.dbMgrData['vectName'])
 
         self.layerList.Update(self.dbMgrData['mapDBInfo'].layers)
-        self.layerList.Populate(update = True)
+        self.layerList.Populate(update=True)
         # update selected widgets
         listOfLayers = map(str, self.dbMgrData['mapDBInfo'].layers.keys())
-        ### delete layer page
+        # delete layer page
         self.manageLayerBook.deleteLayer.SetItems(listOfLayers)
         if len(listOfLayers) > 0:
-            self.manageLayerBook.deleteLayer.SetStringSelection(listOfLayers[0])
-            tableName = self.dbMgrData['mapDBInfo'].layers[int(listOfLayers[0])]['table']
+            self.manageLayerBook.deleteLayer.SetStringSelection(
+                listOfLayers
+                [0])
+            tableName = self.dbMgrData['mapDBInfo'].layers[int(listOfLayers[0])][
+                'table']
             maxLayer = max(self.dbMgrData['mapDBInfo'].layers.keys())
         else:
             tableName = ''
             maxLayer = 0
-        self.manageLayerBook.deleteTable.SetLabel( \
-            _('Drop also linked attribute table (%s)') % \
-                tableName)
-        ### add layer page
-        self.manageLayerBook.addLayerWidgets['layer'][1].SetValue(\
-            maxLayer+1)
-        ### modify layer
-        self.manageLayerBook.modifyLayerWidgets['layer'][1].SetItems(listOfLayers)
-        self.manageLayerBook.OnChangeLayer(event = None)
+        self.manageLayerBook.deleteTable.SetLabel(
+            _('Drop also linked attribute table (%s)') %
+            tableName)
+        # add layer page
+        self.manageLayerBook.addLayerWidgets['layer'][1].SetValue(
+            maxLayer + 1)
+        # modify layer
+        self.manageLayerBook.modifyLayerWidgets[
+            'layer'][1].SetItems(listOfLayers)
+        self.manageLayerBook.OnChangeLayer(event=None)
 
     def OnLayerRightUp(self, event):
         """Layer description area, context menu"""
         pass
 
+
 class TableListCtrl(wx.ListCtrl,
                     listmix.ListCtrlAutoWidthMixin):
     #                    listmix.TextEditMixin):
     """Table description list"""
 
-    def __init__(self, parent, id, table, columns, pos = wx.DefaultPosition,
-                 size = wx.DefaultSize):
+    def __init__(self, parent, id, table, columns, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize):
 
-        self.parent  = parent
-        self.table   = table
+        self.parent = parent
+        self.table = table
         self.columns = columns
         wx.ListCtrl.__init__(self, parent, id, pos, size,
-                             style = wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES |
+                             style=wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES |
                              wx.BORDER_NONE)
 
         listmix.ListCtrlAutoWidthMixin.__init__(self)
@@ -2578,27 +2869,27 @@ class TableListCtrl(wx.ListCtrl,
 
     def Update(self, table, columns):
         """Update column description"""
-        self.table   = table
+        self.table = table
         self.columns = columns
 
-    def Populate(self, update = False):
+    def Populate(self, update=False):
         """Populate the list"""
-        itemData = {} # requested by sorter
+        itemData = {}  # requested by sorter
 
         if not update:
             headings = [_("Column name"), _("Data type"), _("Data length")]
             i = 0
             for h in headings:
-                self.InsertColumn(col = i, heading = h)
+                self.InsertColumn(col=i, heading=h)
                 i += 1
-            self.SetColumnWidth(col = 0, width = 350)
-            self.SetColumnWidth(col = 1, width = 175)
+            self.SetColumnWidth(col=0, width=350)
+            self.SetColumnWidth(col=1, width=175)
         else:
             self.DeleteAllItems()
 
         i = 0
         for column in self.columns:
-            index = self.InsertStringItem(sys.maxint, str(column))
+            index = self.InsertStringItem(i, str(column))
             self.SetStringItem(index, 0, str(column))
             self.SetStringItem(index, 1, str(self.table[column]['type']))
             self.SetStringItem(index, 2, str(self.table[column]['length']))
@@ -2609,9 +2900,10 @@ class TableListCtrl(wx.ListCtrl,
             i = i + 1
 
         self.SendSizeEvent()
-        
+
         return itemData
 
+
 class LayerListCtrl(wx.ListCtrl,
                     listmix.ListCtrlAutoWidthMixin):
                     # listmix.ColumnSorterMixin):
@@ -2619,13 +2911,13 @@ class LayerListCtrl(wx.ListCtrl,
     """Layer description list"""
 
     def __init__(self, parent, id, layers,
-                 pos = wx.DefaultPosition,
-                 size = wx.DefaultSize):
+                 pos=wx.DefaultPosition,
+                 size=wx.DefaultSize):
 
         self.parent = parent
         self.layers = layers
         wx.ListCtrl.__init__(self, parent, id, pos, size,
-                             style = wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES |
+                             style=wx.LC_REPORT | wx.LC_HRULES | wx.LC_VRULES |
                              wx.BORDER_NONE)
 
         listmix.ListCtrlAutoWidthMixin.__init__(self)
@@ -2635,27 +2927,32 @@ class LayerListCtrl(wx.ListCtrl,
         """Update description"""
         self.layers = layers
 
-    def Populate(self, update = False):
+    def Populate(self, update=False):
         """Populate the list"""
-        itemData = {} # requested by sorter
+        itemData = {}  # requested by sorter
 
         if not update:
-            headings = [_("Layer"),  _("Driver"), _("Database"), _("Table"), _("Key")]
+            headings = [
+                _("Layer"),
+                _("Driver"),
+                _("Database"),
+                _("Table"),
+                _("Key")]
             i = 0
             for h in headings:
-                self.InsertColumn(col = i, heading = h)
+                self.InsertColumn(col=i, heading=h)
                 i += 1
         else:
             self.DeleteAllItems()
 
         i = 0
         for layer in self.layers.keys():
-            index = self.InsertStringItem(sys.maxint, str(layer))
+            index = self.InsertStringItem(i, str(layer))
             self.SetStringItem(index, 0, str(layer))
             database = str(self.layers[layer]['database'])
-            driver   = str(self.layers[layer]['driver'])
-            table    = str(self.layers[layer]['table'])
-            key      = str(self.layers[layer]['key'])
+            driver = str(self.layers[layer]['driver'])
+            table = str(self.layers[layer]['table'])
+            key = str(self.layers[layer]['key'])
             self.SetStringItem(index, 1, driver)
             self.SetStringItem(index, 2, database)
             self.SetStringItem(index, 3, table)
@@ -2669,63 +2966,66 @@ class LayerListCtrl(wx.ListCtrl,
             i += 1
 
         for i in range(self.GetColumnCount()):
-            self.SetColumnWidth(col = i, width = wx.LIST_AUTOSIZE)
-            if self.GetColumnWidth(col = i) < 60:
-                self.SetColumnWidth(col = i, width = 60)
+            self.SetColumnWidth(col=i, width=wx.LIST_AUTOSIZE)
+            if self.GetColumnWidth(col=i) < 60:
+                self.SetColumnWidth(col=i, width=60)
 
         self.SendSizeEvent()
-        
+
         return itemData
 
+
 class LayerBook(wx.Notebook):
     """Manage layers (add, delete, modify)"""
+
     def __init__(self, parent, id,
                  parentDialog,
-                 style = wx.BK_DEFAULT):
-        wx.Notebook.__init__(self, parent, id, style = style)
+                 style=wx.BK_DEFAULT):
+        wx.Notebook.__init__(self, parent, id, style=style)
 
-        self.parent       = parent
+        self.parent = parent
         self.parentDialog = parentDialog
-        self.mapDBInfo    = self.parentDialog.dbMgrData['mapDBInfo']
+        self.mapDBInfo = self.parentDialog.dbMgrData['mapDBInfo']
 
         #
         # drivers
         #
         drivers = RunCommand('db.drivers',
-                             quiet = True,
-                             read = True,
-                             flags = 'p')
-        
+                             quiet=True,
+                             read=True,
+                             flags='p')
+
         self.listOfDrivers = []
         for drv in drivers.splitlines():
             self.listOfDrivers.append(drv.strip())
-        
+
         #
         # get default values
         #
         self.defaultConnect = {}
         connect = RunCommand('db.connect',
-                             flags = 'p',
-                             read = True,
-                             quiet = True)
-        
+                             flags='p',
+                             read=True,
+                             quiet=True)
+
         for line in connect.splitlines():
             item, value = line.split(':', 1)
             self.defaultConnect[item.strip()] = value.strip()
-        
-        ### really needed?
+
+        # really needed?
         # if len(self.defaultConnect['driver']) == 0 or \
         #        len(self.defaultConnect['database']) == 0:
         #     GWarning(parent = self.parent,
         #              message = _("Unknown default DB connection. "
         #                          "Please define DB connection using db.connect module."))
-        
+
         self.defaultTables = self._getTables(self.defaultConnect['driver'],
                                              self.defaultConnect['database'])
         try:
-            self.defaultColumns = self._getColumns(self.defaultConnect['driver'],
-                                                    self.defaultConnect['database'],
-                                                    self.defaultTables[0])
+            self.defaultColumns = self._getColumns(
+                self.defaultConnect['driver'],
+                self.defaultConnect['database'],
+                self.defaultTables[0])
         except IndexError:
             self.defaultColumns = []
 
@@ -2735,111 +3035,118 @@ class LayerBook(wx.Notebook):
 
     def _createAddPage(self):
         """Add new layer"""
-        self.addPanel = wx.Panel(parent = self, id = wx.ID_ANY)
-        self.AddPage(page = self.addPanel, text = _("Add layer"))
-        
+        self.addPanel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.AddPage(page=self.addPanel, text=_("Add layer"))
+
         try:
             maxLayer = max(self.mapDBInfo.layers.keys())
         except ValueError:
             maxLayer = 0
 
         # layer description
-        
-        layerBox = wx.StaticBox (parent = self.addPanel, id = wx.ID_ANY,
-                                 label = " %s " % (_("Layer description")))
+
+        layerBox = wx.StaticBox(parent=self.addPanel, id=wx.ID_ANY,
+                                label=" %s " % (_("Layer description")))
         layerSizer = wx.StaticBoxSizer(layerBox, wx.VERTICAL)
-        
+
         #
         # list of layer widgets (label, value)
         #
         self.addLayerWidgets = {'layer':
-                                    (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                   label = '%s:' % _("Layer")),
-                                     wx.SpinCtrl(parent = self.addPanel, id = wx.ID_ANY, size = (65, -1),
-                                                 initial = maxLayer+1,
-                                                 min = 1, max = 1e6)),
+                                (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                               label='%s:' % _("Layer")),
+                                 wx.SpinCtrl(parent=self.addPanel, id=wx.ID_ANY, size=(65, -1),
+                                             initial=maxLayer + 1,
+                                             min=1, max=1e6)),
                                 'driver':
-                                    (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                   label = '%s:' % _("Driver")),
-                                     wx.Choice(parent = self.addPanel, id = wx.ID_ANY, size = (200, -1),
-                                               choices = self.listOfDrivers)),
+                                    (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                                   label='%s:' % _("Driver")),
+                                     wx.Choice(parent=self.addPanel, id=wx.ID_ANY, size=(200, -1),
+                                               choices=self.listOfDrivers)),
                                 'database':
-                                    (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                   label = '%s:' % _("Database")),
-                                     wx.TextCtrl(parent = self.addPanel, id = wx.ID_ANY,
-                                                 value = '',
-                                                 style = wx.TE_PROCESS_ENTER)),
+                                    (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                                   label='%s:' % _("Database")),
+                                     wx.TextCtrl(parent=self.addPanel, id=wx.ID_ANY,
+                                                 value='',
+                                                 style=wx.TE_PROCESS_ENTER)),
                                 'table':
-                                    (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                   label = '%s:' % _("Table")),
-                                     wx.Choice(parent = self.addPanel, id = wx.ID_ANY, size = (200, -1),
-                                               choices = self.defaultTables)),
+                                    (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                                   label='%s:' % _("Table")),
+                                     wx.Choice(parent=self.addPanel, id=wx.ID_ANY, size=(200, -1),
+                                               choices=self.defaultTables)),
                                 'key':
-                                    (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                   label = '%s:' % _("Key column")),
-                                     wx.Choice(parent = self.addPanel, id = wx.ID_ANY, size = (200, -1),
-                                               choices = self.defaultColumns)),
+                                    (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                                   label='%s:' % _("Key column")),
+                                     wx.Choice(parent=self.addPanel, id=wx.ID_ANY, size=(200, -1),
+                                               choices=self.defaultColumns)),
                                 'addCat':
-                                    (wx.CheckBox(parent = self.addPanel, id = wx.ID_ANY,
-                                                 label = _("Insert record for each category into table")),
+                                    (wx.CheckBox(parent=self.addPanel, id=wx.ID_ANY,
+                                                 label=_("Insert record for each category into table")),
                                      None),
                                 }
-        
+
         # set default values for widgets
-        self.addLayerWidgets['driver'][1].SetStringSelection(self.defaultConnect['driver'])
-        self.addLayerWidgets['database'][1].SetValue(self.defaultConnect['database'])
+        self.addLayerWidgets['driver'][1].SetStringSelection(
+            self.defaultConnect['driver'])
+        self.addLayerWidgets['database'][1].SetValue(
+            self.defaultConnect['database'])
         self.addLayerWidgets['table'][1].SetSelection(0)
         self.addLayerWidgets['key'][1].SetSelection(0)
+        self.addLayerWidgets['addCat'][0].SetValue(True)
         # events
-        self.addLayerWidgets['driver'][1].Bind(wx.EVT_CHOICE, self.OnDriverChanged)
-        self.addLayerWidgets['database'][1].Bind(wx.EVT_TEXT_ENTER, self.OnDatabaseChanged)
-        self.addLayerWidgets['table'][1].Bind(wx.EVT_CHOICE, self.OnTableChanged)
-        
+        self.addLayerWidgets['driver'][1].Bind(
+            wx.EVT_CHOICE, self.OnDriverChanged)
+        self.addLayerWidgets['database'][1].Bind(
+            wx.EVT_TEXT_ENTER, self.OnDatabaseChanged)
+        self.addLayerWidgets['table'][1].Bind(
+            wx.EVT_CHOICE, self.OnTableChanged)
+
         # tooltips
-        self.addLayerWidgets['addCat'][0].SetToolTipString(_("You need to add categories "
-                                                             "by v.category module."))
+        self.addLayerWidgets['addCat'][0].SetToolTipString(
+            _("You need to add categories " "by v.category module."))
 
         # table description
-        tableBox = wx.StaticBox (parent = self.addPanel, id = wx.ID_ANY,
-                                 label = " %s " % (_("Table description")))
+        tableBox = wx.StaticBox(parent=self.addPanel, id=wx.ID_ANY,
+                                label=" %s " % (_("Table description")))
         tableSizer = wx.StaticBoxSizer(tableBox, wx.VERTICAL)
 
         #
         # list of table widgets
         #
-        keyCol = UserSettings.Get(group = 'atm', key = 'keycolumn', subkey = 'value')
-        self.tableWidgets = {'table': (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                     label = '%s:' % _("Table name")),
-                                       wx.TextCtrl(parent = self.addPanel, id = wx.ID_ANY,
-                                                   value = '',
-                                                   style = wx.TE_PROCESS_ENTER)),
-                             'key': (wx.StaticText(parent = self.addPanel, id = wx.ID_ANY,
-                                                   label = '%s:' % _("Key column")),
-                                     wx.TextCtrl(parent = self.addPanel, id = wx.ID_ANY,
-                                                 value = keyCol,
-                                                 style = wx.TE_PROCESS_ENTER))}
+        keyCol = UserSettings.Get(group='atm', key='keycolumn', subkey='value')
+        self.tableWidgets = {'table': (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                                     label='%s:' % _("Table name")),
+                                       wx.TextCtrl(parent=self.addPanel, id=wx.ID_ANY,
+                                                   value='',
+                                                   style=wx.TE_PROCESS_ENTER)),
+                             'key': (wx.StaticText(parent=self.addPanel, id=wx.ID_ANY,
+                                                   label='%s:' % _("Key column")),
+                                     wx.TextCtrl(parent=self.addPanel, id=wx.ID_ANY,
+                                                 value=keyCol,
+                                                 style=wx.TE_PROCESS_ENTER))}
         # events
-        self.tableWidgets['table'][1].Bind(wx.EVT_TEXT_ENTER, self.OnCreateTable)
+        self.tableWidgets['table'][1].Bind(
+            wx.EVT_TEXT_ENTER, self.OnCreateTable)
         self.tableWidgets['key'][1].Bind(wx.EVT_TEXT_ENTER, self.OnCreateTable)
-        
-        btnTable   = wx.Button(self.addPanel, wx.ID_ANY, _("&Create table"),
-                             size = (125,-1))
+
+        btnTable = wx.Button(self.addPanel, wx.ID_ANY, _("&Create table"),
+                             size=(125, -1))
         btnTable.Bind(wx.EVT_BUTTON, self.OnCreateTable)
-        
-        btnLayer   = wx.Button(self.addPanel, wx.ID_ANY, _("&Add layer"),
-                             size = (125,-1))
+
+        btnLayer = wx.Button(self.addPanel, wx.ID_ANY, _("&Add layer"),
+                             size=(125, -1))
         btnLayer.Bind(wx.EVT_BUTTON, self.OnAddLayer)
-        
+
         btnDefault = wx.Button(self.addPanel, wx.ID_ANY, _("&Set default"),
-                               size = (125,-1))
+                               size=(125, -1))
         btnDefault.Bind(wx.EVT_BUTTON, self.OnSetDefault)
-        
+
         # do layout
-        
+
         pageSizer = wx.BoxSizer(wx.HORIZONTAL)
-                
+
         # data area
-        dataSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+        dataSizer = wx.GridBagSizer(hgap=5, vgap=5)
         row = 0
         for key in ('layer', 'driver', 'database', 'table', 'key', 'addCat'):
             label, value = self.addLayerWidgets[key]
@@ -2847,10 +3154,10 @@ class LayerBook(wx.Notebook):
                 span = (1, 2)
             else:
                 span = (1, 1)
-            dataSizer.Add(item = label,
-                          flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0),
-                          span = span)
-            
+            dataSizer.Add(item=label,
+                          flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0),
+                          span=span)
+
             if not value:
                 row += 1
                 continue
@@ -2859,68 +3166,68 @@ class LayerBook(wx.Notebook):
                 style = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT
             else:
                 style = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND
-            
-            dataSizer.Add(item = value,
-                          flag = style, pos = (row, 1))
-            
+
+            dataSizer.Add(item=value,
+                          flag=style, pos=(row, 1))
+
             row += 1
-        
+
         dataSizer.AddGrowableCol(1)
-        layerSizer.Add(item = dataSizer,
-                       proportion = 1,
-                       flag = wx.ALL | wx.EXPAND,
-                       border = 5)
-        
+        layerSizer.Add(item=dataSizer,
+                       proportion=1,
+                       flag=wx.ALL | wx.EXPAND,
+                       border=5)
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = btnDefault,
-                     proportion = 0,
-                     flag = wx.ALL | wx.ALIGN_LEFT,
-                     border = 5)
-        
-        btnSizer.Add(item = (5, 5),
-                     proportion = 1,
-                     flag = wx.ALL | wx.EXPAND,
-                     border = 5)
-        
-        btnSizer.Add(item = btnLayer,
-                     proportion = 0,
-                     flag = wx.ALL | wx.ALIGN_RIGHT,
-                     border = 5)
-        
-        layerSizer.Add(item = btnSizer,
-                       proportion = 0,
-                       flag = wx.ALL | wx.EXPAND,
-                       border = 0)
-                
+        btnSizer.Add(item=btnDefault,
+                     proportion=0,
+                     flag=wx.ALL | wx.ALIGN_LEFT,
+                     border=5)
+
+        btnSizer.Add(item=(5, 5),
+                     proportion=1,
+                     flag=wx.ALL | wx.EXPAND,
+                     border=5)
+
+        btnSizer.Add(item=btnLayer,
+                     proportion=0,
+                     flag=wx.ALL | wx.ALIGN_RIGHT,
+                     border=5)
+
+        layerSizer.Add(item=btnSizer,
+                       proportion=0,
+                       flag=wx.ALL | wx.EXPAND,
+                       border=0)
+
         # data area
-        dataSizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5)
+        dataSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         dataSizer.AddGrowableCol(1)
         for key in ['table', 'key']:
             label, value = self.tableWidgets[key]
-            dataSizer.Add(item = label,
-                          flag = wx.ALIGN_CENTER_VERTICAL)
-            dataSizer.Add(item = value,
-                          flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
-
-        tableSizer.Add(item = dataSizer,
-                       proportion = 1,
-                       flag = wx.ALL | wx.EXPAND,
-                       border = 5)
-
-        tableSizer.Add(item = btnTable,
-                       proportion = 0,
-                       flag = wx.ALL | wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT,
-                       border = 5)
-
-        pageSizer.Add(item = layerSizer,
-                      proportion = 3,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 3)
-        
-        pageSizer.Add(item = tableSizer,
-                      proportion = 2,
-                      flag = wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
-                      border = 3)
+            dataSizer.Add(item=label,
+                          flag=wx.ALIGN_CENTER_VERTICAL)
+            dataSizer.Add(item=value,
+                          flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+
+        tableSizer.Add(item=dataSizer,
+                       proportion=1,
+                       flag=wx.ALL | wx.EXPAND,
+                       border=5)
+
+        tableSizer.Add(item=btnTable,
+                       proportion=0,
+                       flag=wx.ALL | wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT,
+                       border=5)
+
+        pageSizer.Add(item=layerSizer,
+                      proportion=3,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=3)
+
+        pageSizer.Add(item=tableSizer,
+                      proportion=2,
+                      flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
+                      border=3)
 
         # SetVirtualSizeHints is deprecated and is
         # exactly the same as FitInside() in wxWidgets 2.9 and later
@@ -2930,36 +3237,41 @@ class LayerBook(wx.Notebook):
         self.addPanel.SetAutoLayout(True)
         self.addPanel.SetSizer(pageSizer)
         pageSizer.Fit(self.addPanel)
-        
+
     def _createDeletePage(self):
         """Delete layer"""
-        self.deletePanel = wx.Panel(parent = self, id = wx.ID_ANY)
-        self.AddPage(page = self.deletePanel, text = _("Remove layer"))
+        self.deletePanel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.AddPage(page=self.deletePanel, text=_("Remove layer"))
 
-        label = wx.StaticText(parent = self.deletePanel, id = wx.ID_ANY,
-                              label = '%s:' % _("Layer to remove"))
+        label = wx.StaticText(parent=self.deletePanel, id=wx.ID_ANY,
+                              label='%s:' % _("Layer to remove"))
 
-        self.deleteLayer = wx.ComboBox(parent = self.deletePanel, id = wx.ID_ANY, size = (100, -1),
-                                       style = wx.CB_SIMPLE | wx.CB_READONLY,
-                                       choices = map(str, self.mapDBInfo.layers.keys()))
-        self.deleteLayer.SetSelection(0)           
+        self.deleteLayer = wx.ComboBox(
+            parent=self.deletePanel, id=wx.ID_ANY, size=(100, -1),
+            style=wx.CB_SIMPLE | wx.CB_READONLY,
+            choices=map(str, self.mapDBInfo.layers.keys()))
+        self.deleteLayer.SetSelection(0)
         self.deleteLayer.Bind(wx.EVT_COMBOBOX, self.OnChangeLayer)
 
         try:
-            tableName = self.mapDBInfo.layers[int(self.deleteLayer.GetStringSelection())]['table']
+            tableName = self.mapDBInfo.layers[
+                int(self.deleteLayer.GetStringSelection())]['table']
         except ValueError:
             tableName = ''
-            
-        self.deleteTable = wx.CheckBox(parent = self.deletePanel, id = wx.ID_ANY,
-                                       label = _('Drop also linked attribute table (%s)') % \
-                                       tableName)
+
+        self.deleteTable = wx.CheckBox(
+            parent=self.deletePanel,
+            id=wx.ID_ANY,
+            label=_('Drop also linked attribute table (%s)') %
+            tableName)
 
         if tableName == '':
             self.deleteLayer.Enable(False)
             self.deleteTable.Enable(False)
-            
-        btnDelete   = wx.Button(self.deletePanel, wx.ID_DELETE, _("&Remove layer"),
-                                size = (125,-1))
+
+        btnDelete = wx.Button(
+            self.deletePanel, wx.ID_DELETE, _("&Remove layer"),
+            size=(125, -1))
         btnDelete.Bind(wx.EVT_BUTTON, self.OnDeleteLayer)
 
         #
@@ -2969,89 +3281,90 @@ class LayerBook(wx.Notebook):
 
         dataSizer = wx.BoxSizer(wx.VERTICAL)
 
-        flexSizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
 
-        flexSizer.Add(item = label,
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = self.deleteLayer,
-                      flag = wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=label,
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=self.deleteLayer,
+                      flag=wx.ALIGN_CENTER_VERTICAL)
 
-        dataSizer.Add(item = flexSizer,
-                      proportion = 0,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 1)
+        dataSizer.Add(item=flexSizer,
+                      proportion=0,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=1)
 
-        dataSizer.Add(item = self.deleteTable,
-                      proportion = 0,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 1)
+        dataSizer.Add(item=self.deleteTable,
+                      proportion=0,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=1)
 
-        pageSizer.Add(item = dataSizer,
-                      proportion = 1,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 5)
+        pageSizer.Add(item=dataSizer,
+                      proportion=1,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=5)
 
-        pageSizer.Add(item = btnDelete,
-                      proportion = 0,
-                      flag = wx.ALL | wx.ALIGN_RIGHT,
-                      border = 5)
+        pageSizer.Add(item=btnDelete,
+                      proportion=0,
+                      flag=wx.ALL | wx.ALIGN_RIGHT,
+                      border=5)
 
         self.deletePanel.SetSizer(pageSizer)
 
     def _createModifyPage(self):
         """Modify layer"""
-        self.modifyPanel = wx.Panel(parent = self, id = wx.ID_ANY)
-        self.AddPage(page = self.modifyPanel, text = _("Modify layer"))
+        self.modifyPanel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.AddPage(page=self.modifyPanel, text=_("Modify layer"))
 
         #
         # list of layer widgets (label, value)
         #
         self.modifyLayerWidgets = {'layer':
-                                       (wx.StaticText(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                      label = '%s:' % _("Layer")),
-                                        wx.ComboBox(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                    size = (100, -1),
-                                                    style = wx.CB_SIMPLE | wx.CB_READONLY,
-                                                    choices = map(str, 
-                                                                self.mapDBInfo.layers.keys()))),
+                                   (wx.StaticText(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                  label='%s:' % _("Layer")),
+                                    wx.ComboBox(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                size=(100, -1),
+                                                style=wx.CB_SIMPLE | wx.CB_READONLY,
+                                                choices=map(str,
+                                                            self.mapDBInfo.layers.keys()))),
                                    'driver':
-                                       (wx.StaticText(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                      label = '%s:' % _("Driver")),
-                                        wx.Choice(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                  size = (200, -1),
-                                                  choices = self.listOfDrivers)),
+                                       (wx.StaticText(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                      label='%s:' % _("Driver")),
+                                        wx.Choice(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                  size=(200, -1),
+                                                  choices=self.listOfDrivers)),
                                    'database':
-                                       (wx.StaticText(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                      label = '%s:' % _("Database")),
-                                        wx.TextCtrl(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                    value = '', size = (350, -1),
-                                                    style = wx.TE_PROCESS_ENTER)),
+                                       (wx.StaticText(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                      label='%s:' % _("Database")),
+                                        wx.TextCtrl(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                    value='', size=(350, -1),
+                                                    style=wx.TE_PROCESS_ENTER)),
                                    'table':
-                                       (wx.StaticText(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                      label = '%s:' % _("Table")),
-                                        wx.Choice(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                  size = (200, -1),
-                                                  choices = self.defaultTables)),
+                                       (wx.StaticText(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                      label='%s:' % _("Table")),
+                                        wx.Choice(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                  size=(200, -1),
+                                                  choices=self.defaultTables)),
                                    'key':
-                                       (wx.StaticText(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                      label = '%s:' % _("Key column")),
-                                        wx.Choice(parent = self.modifyPanel, id = wx.ID_ANY,
-                                                  size = (200, -1),
-                                                  choices = self.defaultColumns))}
-        
+                                       (wx.StaticText(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                      label='%s:' % _("Key column")),
+                                        wx.Choice(parent=self.modifyPanel, id=wx.ID_ANY,
+                                                  size=(200, -1),
+                                                  choices=self.defaultColumns))}
+
         # set default values for widgets
         self.modifyLayerWidgets['layer'][1].SetSelection(0)
         try:
-            layer = int(self.modifyLayerWidgets['layer'][1].GetStringSelection())
+            layer = int(self.modifyLayerWidgets[
+                        'layer'][1].GetStringSelection())
         except ValueError:
             layer = None
             for label in self.modifyLayerWidgets.keys():
                 self.modifyLayerWidgets[label][1].Enable(False)
 
         if layer:
-            driver   = self.mapDBInfo.layers[layer]['driver']
+            driver = self.mapDBInfo.layers[layer]['driver']
             database = self.mapDBInfo.layers[layer]['database']
-            table    = self.mapDBInfo.layers[layer]['table']
+            table = self.mapDBInfo.layers[layer]['table']
 
             listOfColumns = self._getColumns(driver, database, table)
             self.modifyLayerWidgets['driver'][1].SetStringSelection(driver)
@@ -3060,21 +3373,24 @@ class LayerBook(wx.Notebook):
                 self.modifyLayerWidgets['table'][1].SetStringSelection(table)
             else:
                 if self.defaultConnect['schema'] != '':
-                    table = self.defaultConnect['schema'] + table # try with default schema
+                    # try with default schema
+                    table = self.defaultConnect['schema'] + table
                 else:
-                    table = 'public.' + table # try with 'public' schema
+                    table = 'public.' + table  # try with 'public' schema
                 self.modifyLayerWidgets['table'][1].SetStringSelection(table)
             self.modifyLayerWidgets['key'][1].SetItems(listOfColumns)
             self.modifyLayerWidgets['key'][1].SetSelection(0)
 
         # events
-        self.modifyLayerWidgets['layer'][1].Bind(wx.EVT_COMBOBOX, self.OnChangeLayer)
+        self.modifyLayerWidgets['layer'][1].Bind(
+            wx.EVT_COMBOBOX, self.OnChangeLayer)
         # self.modifyLayerWidgets['driver'][1].Bind(wx.EVT_CHOICE, self.OnDriverChanged)
         # self.modifyLayerWidgets['database'][1].Bind(wx.EVT_TEXT_ENTER, self.OnDatabaseChanged)
         # self.modifyLayerWidgets['table'][1].Bind(wx.EVT_CHOICE, self.OnTableChanged)
 
-        btnModify = wx.Button(self.modifyPanel, wx.ID_DELETE, _("&Modify layer"),
-                              size = (125,-1))
+        btnModify = wx.Button(
+            self.modifyPanel, wx.ID_DELETE, _("&Modify layer"),
+            size=(125, -1))
         btnModify.Bind(wx.EVT_BUTTON, self.OnModifyLayer)
 
         #
@@ -3083,28 +3399,28 @@ class LayerBook(wx.Notebook):
         pageSizer = wx.BoxSizer(wx.VERTICAL)
 
         # data area
-        dataSizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5)
+        dataSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         dataSizer.AddGrowableCol(1)
         for key in ('layer', 'driver', 'database', 'table', 'key'):
             label, value = self.modifyLayerWidgets[key]
-            dataSizer.Add(item = label,
-                          flag = wx.ALIGN_CENTER_VERTICAL)
+            dataSizer.Add(item=label,
+                          flag=wx.ALIGN_CENTER_VERTICAL)
             if key == 'layer':
-                dataSizer.Add(item = value,
-                              flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+                dataSizer.Add(item=value,
+                              flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
             else:
-                dataSizer.Add(item = value,
-                              flag = wx.ALIGN_CENTER_VERTICAL)
+                dataSizer.Add(item=value,
+                              flag=wx.ALIGN_CENTER_VERTICAL)
 
-        pageSizer.Add(item = dataSizer,
-                      proportion = 1,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 5)
+        pageSizer.Add(item=dataSizer,
+                      proportion=1,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=5)
 
-        pageSizer.Add(item = btnModify,
-                      proportion = 0,
-                      flag = wx.ALL | wx.ALIGN_RIGHT,
-                      border = 5)
+        pageSizer.Add(item=btnModify,
+                      proportion=0,
+                      flag=wx.ALL | wx.ALIGN_RIGHT,
+                      border=5)
 
         self.modifyPanel.SetSizer(pageSizer)
 
@@ -3113,22 +3429,23 @@ class LayerBook(wx.Notebook):
         tables = []
 
         ret = RunCommand('db.tables',
-                         parent = self,
-                         read = True,
-                         flags = 'p',
-                         driver = driver,
-                         database = database)
-        
+                         parent=self,
+                         read=True,
+                         flags='p',
+                         driver=driver,
+                         database=database)
+
         if ret is None:
-            GError(parent = self,
-                   message = _("Unable to get list of tables.\n"
-                               "Please use db.connect to set database parameters."))
-            
+            GError(
+                parent=self, message=_(
+                    "Unable to get list of tables.\n"
+                    "Please use db.connect to set database parameters."))
+
             return tables
-        
+
         for table in ret.splitlines():
             tables.append(table)
-        
+
         return tables
 
     def _getColumns(self, driver, database, table):
@@ -3136,19 +3453,19 @@ class LayerBook(wx.Notebook):
         columns = []
 
         ret = RunCommand('db.columns',
-                         parent = self,
-                         quiet = True,
-                         read = True,
-                         driver = driver,
-                         database = database,
-                         table = table)
-        
-        if ret == None:
+                         parent=self,
+                         quiet=True,
+                         read=True,
+                         driver=driver,
+                         database=database,
+                         table=table)
+
+        if ret is None:
             return columns
-        
+
         for column in ret.splitlines():
             columns.append(column)
-        
+
         return columns
 
     def OnDriverChanged(self, event):
@@ -3157,8 +3474,8 @@ class LayerBook(wx.Notebook):
         database = self.addLayerWidgets['database'][1].GetValue()
 
         winTable = self.addLayerWidgets['table'][1]
-        winKey   = self.addLayerWidgets['key'][1]
-        tables   = self._getTables(driver, database)
+        winKey = self.addLayerWidgets['key'][1]
+        tables = self._getTables(driver, database)
 
         winTable.SetItems(tables)
         winTable.SetSelection(0)
@@ -3174,11 +3491,11 @@ class LayerBook(wx.Notebook):
 
     def OnTableChanged(self, event):
         """Table name changed, update list of columns"""
-        driver   = self.addLayerWidgets['driver'][1].GetStringSelection()
+        driver = self.addLayerWidgets['driver'][1].GetStringSelection()
         database = self.addLayerWidgets['database'][1].GetValue()
-        table    = event.GetString()
+        table = event.GetString()
 
-        win  = self.addLayerWidgets['key'][1]
+        win = self.addLayerWidgets['key'][1]
         cols = self._getColumns(driver, database, table)
         win.SetItems(cols)
         win.SetSelection(0)
@@ -3187,23 +3504,23 @@ class LayerBook(wx.Notebook):
 
     def OnSetDefault(self, event):
         """Set default values"""
-        driver   = self.addLayerWidgets['driver'][1]
+        driver = self.addLayerWidgets['driver'][1]
         database = self.addLayerWidgets['database'][1]
-        table    = self.addLayerWidgets['table'][1]
-        key      = self.addLayerWidgets['key'][1]
+        table = self.addLayerWidgets['table'][1]
+        key = self.addLayerWidgets['key'][1]
 
         driver.SetStringSelection(self.defaultConnect['driver'])
         database.SetValue(self.defaultConnect['database'])
         tables = self._getTables(self.defaultConnect['driver'],
-                                  self.defaultConnect['database'])
+                                 self.defaultConnect['database'])
         table.SetItems(tables)
         table.SetSelection(0)
         if len(tables) == 0:
             key.SetItems([])
         else:
             cols = self._getColumns(self.defaultConnect['driver'],
-                                     self.defaultConnect['database'],
-                                     tables[0])
+                                    self.defaultConnect['database'],
+                                    tables[0])
             key.SetItems(cols)
             key.SetSelection(0)
 
@@ -3211,34 +3528,36 @@ class LayerBook(wx.Notebook):
 
     def OnCreateTable(self, event):
         """Create new table (name and key column given)"""
-        driver   = self.addLayerWidgets['driver'][1].GetStringSelection()
+        driver = self.addLayerWidgets['driver'][1].GetStringSelection()
         database = self.addLayerWidgets['database'][1].GetValue()
-        table    = self.tableWidgets['table'][1].GetValue()
-        key      = self.tableWidgets['key'][1].GetValue()
-        
+        table = self.tableWidgets['table'][1].GetValue()
+        key = self.tableWidgets['key'][1].GetValue()
+
         if not table or not key:
-            GError(parent = self,
-                   message = _("Unable to create new table. "
-                               "Table name or key column name is missing."))
+            GError(parent=self,
+                   message=_("Unable to create new table. "
+                             "Table name or key column name is missing."))
             return
 
         if table in self.addLayerWidgets['table'][1].GetItems():
-            GError(parent = self,
-                   message = _("Unable to create new table. "
-                               "Table <%s> already exists in the database.") % table)
+            GError(
+                parent=self, message=_(
+                    "Unable to create new table. "
+                    "Table <%s> already exists in the database.") %
+                table)
             return
-        
+
         # create table
         sql = 'CREATE TABLE %s (%s INTEGER)' % (table, key)
 
         RunCommand('db.execute',
-                   quiet = True,
-                   parent = self,
-                   stdin = sql,
-                   input = '-',
-                   driver = driver,
-                   database = database)
-        
+                   quiet=True,
+                   parent=self,
+                   stdin=sql,
+                   input='-',
+                   driver=driver,
+                   database=database)
+
         # update list of tables
         tableList = self.addLayerWidgets['table'][1]
         tableList.SetItems(self._getTables(driver, database))
@@ -3248,54 +3567,56 @@ class LayerBook(wx.Notebook):
         keyList = self.addLayerWidgets['key'][1]
         keyList.SetItems(self._getColumns(driver, database, table))
         keyList.SetStringSelection(key)
-        
+
         event.Skip()
 
     def OnAddLayer(self, event):
         """Add new layer to vector map"""
-        layer    = int(self.addLayerWidgets['layer'][1].GetValue())
+        layer = int(self.addLayerWidgets['layer'][1].GetValue())
         layerWin = self.addLayerWidgets['layer'][1]
-        driver   = self.addLayerWidgets['driver'][1].GetStringSelection()
+        driver = self.addLayerWidgets['driver'][1].GetStringSelection()
         database = self.addLayerWidgets['database'][1].GetValue()
-        table    = self.addLayerWidgets['table'][1].GetStringSelection()
-        key      = self.addLayerWidgets['key'][1].GetStringSelection()
-        
+        table = self.addLayerWidgets['table'][1].GetStringSelection()
+        key = self.addLayerWidgets['key'][1].GetStringSelection()
+
         if layer in self.mapDBInfo.layers.keys():
-            GError(parent = self,
-                   message = _("Unable to add new layer to vector map <%(vector)s>. "
-                               "Layer %(layer)d already exists.") % \
-                       {'vector' : self.mapDBInfo.map, 'layer' : layer})
+            GError(
+                parent=self,
+                message=_(
+                    "Unable to add new layer to vector map <%(vector)s>. "
+                    "Layer %(layer)d already exists.") %
+                {'vector': self.mapDBInfo.map, 'layer': layer})
             return
 
         # add new layer
         ret = RunCommand('v.db.connect',
-                         parent = self,
-                         quiet = True,
-                         map = self.mapDBInfo.map,
-                         driver = driver,
-                         database = database,
-                         table = table,
-                         key = key,
-                         layer = layer)
-        
+                         parent=self,
+                         quiet=True,
+                         map=self.mapDBInfo.map,
+                         driver=driver,
+                         database=database,
+                         table=table,
+                         key=key,
+                         layer=layer)
+
         # insert records into table if required
         if self.addLayerWidgets['addCat'][0].IsChecked():
             RunCommand('v.to.db',
-                       parent = self,
-                       quiet = True,
-                       map = self.mapDBInfo.map,
-                       layer = layer,
-                       qlayer = layer,
-                       option = 'cat',
-                       columns = key)
+                       parent=self,
+                       quiet=True,
+                       map=self.mapDBInfo.map,
+                       layer=layer,
+                       qlayer=layer,
+                       option='cat',
+                       columns=key)
 
         if ret == 0:
             # update dialog (only for new layer)
-            self.parentDialog.parentDbMgrBase.UpdateDialog(layer = layer) 
+            self.parentDialog.parentDbMgrBase.UpdateDialog(layer=layer)
             # update db info
             self.mapDBInfo = self.parentDialog.dbMgrData['mapDBInfo']
             # increase layer number
-            layerWin.SetValue(layer+1)
+            layerWin.SetValue(layer + 1)
 
         if len(self.mapDBInfo.layers.keys()) == 1:
             # first layer add --- enable previously disabled widgets
@@ -3303,7 +3624,7 @@ class LayerBook(wx.Notebook):
             self.deleteTable.Enable()
             for label in self.modifyLayerWidgets.keys():
                 self.modifyLayerWidgets[label][1].Enable()
-            
+
     def OnDeleteLayer(self, event):
         """Delete layer"""
         try:
@@ -3312,17 +3633,17 @@ class LayerBook(wx.Notebook):
             return
 
         RunCommand('v.db.connect',
-                   parent = self,
-                   flags = 'd',
-                   map = self.mapDBInfo.map,
-                   layer = layer)
+                   parent=self,
+                   flags='d',
+                   map=self.mapDBInfo.map,
+                   layer=layer)
 
         # drop also table linked to layer which is deleted
         if self.deleteTable.IsChecked():
-            driver   = self.addLayerWidgets['driver'][1].GetStringSelection()
+            driver = self.addLayerWidgets['driver'][1].GetStringSelection()
             database = self.addLayerWidgets['database'][1].GetValue()
-            table    = self.mapDBInfo.layers[layer]['table']
-            sql      = 'DROP TABLE %s' % (table)
+            table = self.mapDBInfo.layers[layer]['table']
+            sql = 'DROP TABLE %s' % (table)
 
             RunCommand('db.execute',
                        input='-',
@@ -3331,14 +3652,14 @@ class LayerBook(wx.Notebook):
                        quiet=True,
                        driver=driver,
                        database=database)
-            
+
             # update list of tables
             tableList = self.addLayerWidgets['table'][1]
             tableList.SetItems(self._getTables(driver, database))
             tableList.SetStringSelection(table)
-        
+
         # update dialog
-        self.parentDialog.parentDbMgrBase.UpdateDialog(layer = layer) 
+        self.parentDialog.parentDbMgrBase.UpdateDialog(layer=layer)
         # update db info
         self.mapDBInfo = self.parentDialog.dbMgrData['mapDBInfo']
 
@@ -3348,7 +3669,7 @@ class LayerBook(wx.Notebook):
             self.deleteTable.Enable(False)
             for label in self.modifyLayerWidgets.keys():
                 self.modifyLayerWidgets[label][1].Enable(False)
-            
+
         event.Skip()
 
     def OnChangeLayer(self, event):
@@ -3362,9 +3683,9 @@ class LayerBook(wx.Notebook):
                 return
 
         if self.GetCurrentPage() == self.modifyPanel:
-            driver   = self.mapDBInfo.layers[layer]['driver']
+            driver = self.mapDBInfo.layers[layer]['driver']
             database = self.mapDBInfo.layers[layer]['database']
-            table    = self.mapDBInfo.layers[layer]['table']
+            table = self.mapDBInfo.layers[layer]['table']
             listOfColumns = self._getColumns(driver, database, table)
             self.modifyLayerWidgets['driver'][1].SetStringSelection(driver)
             self.modifyLayerWidgets['database'][1].SetValue(database)
@@ -3372,8 +3693,9 @@ class LayerBook(wx.Notebook):
             self.modifyLayerWidgets['key'][1].SetItems(listOfColumns)
             self.modifyLayerWidgets['key'][1].SetSelection(0)
         else:
-            self.deleteTable.SetLabel(_('Drop also linked attribute table (%s)') % \
-                                          self.mapDBInfo.layers[layer]['table'])
+            self.deleteTable.SetLabel(
+                _('Drop also linked attribute table (%s)') %
+                self.mapDBInfo.layers[layer]['table'])
         if event:
             event.Skip()
 
@@ -3396,57 +3718,69 @@ class LayerBook(wx.Notebook):
         if modify:
             # delete layer
             RunCommand('v.db.connect',
-                       parent = self,
-                       quiet = True,
-                       flags = 'd',
-                       map = self.mapDBInfo.map,
-                       layer = layer)
+                       parent=self,
+                       quiet=True,
+                       flags='d',
+                       map=self.mapDBInfo.map,
+                       layer=layer)
 
             # add modified layer
-            RunCommand('v.db.connect',
-                       quiet = True,
-                       map = self.mapDBInfo.map,
-                       driver = self.modifyLayerWidgets['driver'][1].GetStringSelection(),
-                       database = self.modifyLayerWidgets['database'][1].GetValue(),
-                       table = self.modifyLayerWidgets['table'][1].GetStringSelection(),
-                       key = self.modifyLayerWidgets['key'][1].GetStringSelection(),
-                       layer = int(layer))
-            
+            RunCommand(
+                'v.db.connect',
+                quiet=True,
+                map=self.mapDBInfo.map,
+                driver=self.modifyLayerWidgets['driver'][1].GetStringSelection(),
+                database=self.modifyLayerWidgets['database'][1].GetValue(),
+                table=self.modifyLayerWidgets['table'][1].GetStringSelection(),
+                key=self.modifyLayerWidgets['key'][1].GetStringSelection(),
+                layer=int(layer))
+
             # update dialog (only for new layer)
-            self.parentDialog.parentDbMgrBase.UpdateDialog(layer = layer) 
+            self.parentDialog.parentDbMgrBase.UpdateDialog(layer=layer)
             # update db info
             self.mapDBInfo = self.parentDialog.dbMgrData['mapDBInfo']
 
         event.Skip()
 
+
 class FieldStatistics(wx.Frame):
+
     def __init__(self, parent, id=wx.ID_ANY,
-                 style = wx.DEFAULT_FRAME_STYLE, **kwargs):
+                 style=wx.DEFAULT_FRAME_STYLE, **kwargs):
         """Dialog to display and save statistics of field stats
         """
         self.parent = parent
-        wx.Frame.__init__(self, parent, id, style = style, **kwargs)
-        
-        self.SetTitle(_("Field statistics"))
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_sql.ico'), wx.BITMAP_TYPE_ICO))
+        wx.Frame.__init__(self, parent, id, style=style, **kwargs)
 
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.sp = scrolled.ScrolledPanel(parent=self.panel, id=wx.ID_ANY, size=(250, 150),
-                                         style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="Statistics" )
-        self.text = wx.TextCtrl(parent=self.sp, id=wx.ID_ANY, style=wx.TE_MULTILINE|wx.TE_READONLY)
+        self.SetTitle(_("Field statistics"))
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_sql.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.sp = scrolled.ScrolledPanel(parent=self.panel, id=wx.ID_ANY, size=(
+            250, 150), style=wx.TAB_TRAVERSAL | wx.SUNKEN_BORDER, name="Statistics")
+        self.text = wx.TextCtrl(
+            parent=self.sp,
+            id=wx.ID_ANY,
+            style=wx.TE_MULTILINE | wx.TE_READONLY)
         self.text.SetBackgroundColour("white")
-                
+
         # buttons
-        self.btnClipboard = wx.Button(parent=self.panel, id = wx.ID_COPY)
-        self.btnClipboard.SetToolTipString(_("Copy statistics the clipboard (Ctrl+C)"))
+        self.btnClipboard = wx.Button(parent=self.panel, id=wx.ID_COPY)
+        self.btnClipboard.SetToolTipString(
+            _("Copy statistics the clipboard (Ctrl+C)"))
         self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
         self.btnCancel.SetDefault()
 
         # bindings
         self.btnCancel.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btnClipboard.Bind(wx.EVT_BUTTON, self.OnCopy)
-        
+
         self._layout()
 
     def _layout(self):
@@ -3454,27 +3788,31 @@ class FieldStatistics(wx.Frame):
         txtSizer = wx.BoxSizer(wx.VERTICAL)
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        txtSizer.Add(item = self.text, proportion = 1, 
-                     flag = wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 5)
-        
+        txtSizer.Add(item=self.text, proportion=1, flag=wx.EXPAND |
+                     wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+
         self.sp.SetSizer(txtSizer)
         self.sp.SetAutoLayout(True)
-        self.sp.SetupScrolling() 
+        self.sp.SetupScrolling()
 
-        sizer.Add(item = self.sp, proportion = 1, flag = wx.GROW |
-                  wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 3)
+        sizer.Add(item=self.sp, proportion=1, flag=wx.GROW |
+                  wx.LEFT | wx.RIGHT | wx.BOTTOM, border=3)
 
-        line = wx.StaticLine(parent = self.panel, id = wx.ID_ANY,
-                             size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 3)
+        line = wx.StaticLine(parent=self.panel, id=wx.ID_ANY,
+                             size=(20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=3)
 
         # buttons
-        btnSizer.Add(item = self.btnClipboard, proportion = 0,
-                     flag = wx.ALIGN_LEFT | wx.ALL, border = 5)
-        btnSizer.Add(item = self.btnCancel, proportion = 0,
-                     flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)        
-        sizer.Add(item = btnSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        btnSizer.Add(item=self.btnClipboard, proportion=0,
+                     flag=wx.ALIGN_LEFT | wx.ALL, border=5)
+        btnSizer.Add(item=self.btnCancel, proportion=0,
+                     flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+        sizer.Add(
+            item=btnSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
@@ -3485,7 +3823,7 @@ class FieldStatistics(wx.Frame):
         stats = self.text.GetValue()
         rdata = wx.TextDataObject()
         rdata.SetText(stats)
-        
+
         if wx.TheClipboard.Open():
             wx.TheClipboard.SetData(rdata)
             wx.TheClipboard.Close()
@@ -3497,7 +3835,7 @@ class FieldStatistics(wx.Frame):
 
     def Update(self, driver, database, table, column):
         """!Update statistics for given column
-        
+
         :param: column column name
         """
         if driver == 'dbf':
@@ -3505,57 +3843,64 @@ class FieldStatistics(wx.Frame):
                    message=_("Statistics is not support for DBF tables."))
             self.Close()
             return
-        
+
         fd, sqlFilePath = tempfile.mkstemp(text=True)
         sqlFile = open(sqlFilePath, 'w')
         stats = ['count', 'min', 'max', 'avg', 'sum', 'null']
         for fn in stats:
             if fn == 'null':
-                sqlFile.write('select count(*) from %s where %s is null;%s' % (table, column, os.linesep))
+                sqlFile.write(
+                    'select count(*) from %s where %s is null;%s' %
+                    (table, column, os.linesep))
             else:
-                sqlFile.write('select %s(%s) from %s;%s' % (fn, column, table, os.linesep))
+                sqlFile.write(
+                    'select %s(%s) from %s;%s' %
+                    (fn, column, table, os.linesep))
         sqlFile.close()
-        
+
         dataStr = RunCommand('db.select',
-                             parent = self.parent,
-                             read = True,
+                             parent=self.parent,
+                             read=True,
                              flags='c',
-                             input = sqlFilePath,
-                             driver = driver,
-                             database = database)
+                             input=sqlFilePath,
+                             driver=driver,
+                             database=database)
         if not dataStr:
-            GError(parent = self.parent,
-                   message = _("Unable to calculte statistics."))
+            GError(parent=self.parent,
+                   message=_("Unable to calculte statistics."))
             self.Close()
             return
-        
+
         dataLines = dataStr.splitlines()
         if len(dataLines) != len(stats):
-            GError(parent = self.parent,
-                   message = _("Unable to calculte statistics. "
-                               "Invalid number of lines %d (should be %d).") % (len(dataLines), len(stats)))
+            GError(
+                parent=self.parent, message=_(
+                    "Unable to calculte statistics. "
+                    "Invalid number of lines %d (should be %d).") %
+                (len(dataLines), len(stats)))
             self.Close()
             return
-        
+
         # calculate stddev
         avg = float(dataLines[stats.index('avg')])
         count = float(dataLines[stats.index('count')])
-        sql = "select (%(column)s - %(avg)f)*(%(column)s - %(avg)f) from %(table)s" % { 'column' : column, 'avg' : avg, 'table' : table }
+        sql = "select (%(column)s - %(avg)f)*(%(column)s - %(avg)f) from %(table)s" % {
+            'column': column, 'avg': avg, 'table': table}
         dataVar = RunCommand('db.select',
-                             parent = self.parent,
-                             read = True,
+                             parent=self.parent,
+                             read=True,
                              flags='c',
-                             sql = sql,
-                             driver = driver,
-                             database = database)
+                             sql=sql,
+                             driver=driver,
+                             database=database)
         if not dataVar:
-            GWarning(parent = self.parent,
-                     message = _("Unable to calculte standard deviation."))
+            GWarning(parent=self.parent,
+                     message=_("Unable to calculte standard deviation."))
         varSum = 0
         for var in dataVar.splitlines():
             varSum += float(var)
-        stddev = math.sqrt(varSum/count)
-        
+        stddev = math.sqrt(varSum / count)
+
         self.SetTitle(_("Field statistics <%s>") % column)
         self.text.Clear()
         for idx in range(len(stats)):
diff --git a/gui/wxpython/dbmgr/dialogs.py b/gui/wxpython/dbmgr/dialogs.py
index 3aaada7..04ede1f 100644
--- a/gui/wxpython/dbmgr/dialogs.py
+++ b/gui/wxpython/dbmgr/dialogs.py
@@ -25,24 +25,26 @@ from core.utils import _
 import wx
 import wx.lib.scrolledpanel as scrolled
 
-from core.gcmd        import RunCommand, GError
-from core.debug       import Debug
-from core.settings    import UserSettings
-from dbmgr.vinfo      import VectorDBInfo, GetUnicodeValue
+from core.gcmd import RunCommand, GError
+from core.debug import Debug
+from core.settings import UserSettings
+from dbmgr.vinfo import VectorDBInfo, GetUnicodeValue
 from gui_core.widgets import IntegerValidator, FloatValidator
 
+
 class DisplayAttributesDialog(wx.Dialog):
+
     def __init__(self, parent, map,
-                 query = None, cats = None, line = None,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
-                 pos = wx.DefaultPosition,
-                 action = "add", ignoreError = False):
+                 query=None, cats=None, line=None,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+                 pos=wx.DefaultPosition,
+                 action="add", ignoreError=False):
         """Standard dialog used to add/update/display attributes linked
         to the vector map.
-        
+
         Attribute data can be selected based on layer and category number
         or coordinates.
-        
+
         :param parent:
         :param map: vector map
         :param query: query coordinates and distance (used for v.edit)
@@ -53,62 +55,66 @@ class DisplayAttributesDialog(wx.Dialog):
         :param action: (add, update, display)
         :param ignoreError: True to ignore errors
         """
-        self.parent = parent # mapdisplay.BufferedWindow
-        self.map    = map
+        self.parent = parent  # mapdisplay.BufferedWindow
+        self.map = map
         self.action = action
 
         # ids/cats of selected features
         # fid : {layer : cats}
         self.cats = {}
-        self.fid = -1 # feature id
-        
+        self.fid = -1  # feature id
+
         # get layer/table/column information
         self.mapDBInfo = VectorDBInfo(self.map)
-        
-        layers = self.mapDBInfo.layers.keys() # get available layers
+
+        layers = self.mapDBInfo.layers.keys()  # get available layers
 
         # check if db connection / layer exists
         if len(layers) <= 0:
             if not ignoreError:
-                dlg = wx.MessageDialog(parent = self.parent,
-                                       message = _("No attribute table found.\n\n"
-                                                   "Do you want to create a new attribute table "
-                                                   "and defined a link to vector map <%s>?") % self.map,
-                                       caption = _("Create table?"),
-                                       style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+                dlg = wx.MessageDialog(
+                    parent=self.parent,
+                    message=_(
+                        "No attribute table found.\n\n"
+                        "Do you want to create a new attribute table "
+                        "and defined a link to vector map <%s>?") %
+                    self.map,
+                    caption=_("Create table?"),
+                    style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
                 if dlg.ShowModal() == wx.ID_YES:
                     lmgr = self.parent.lmgr
-                    lmgr.OnShowAttributeTable(event = None, selection = 'layers')
-                
+                    lmgr.OnShowAttributeTable(event=None, selection='layers')
+
                 dlg.Destroy()
-            
+
             self.mapDBInfo = None
-        
-        wx.Dialog.__init__(self, parent = self.parent, id = wx.ID_ANY,
-                           title = "", style = style, pos = pos)
+
+        wx.Dialog.__init__(self, parent=self.parent, id=wx.ID_ANY,
+                           title="", style=style, pos=pos)
 
         # dialog body
         mainSizer = wx.BoxSizer(wx.VERTICAL)
 
         # notebook
-        self.notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+        self.notebook = wx.Notebook(
+            parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
 
-        self.closeDialog = wx.CheckBox(parent = self, id = wx.ID_ANY,
-                                       label = _("Close dialog on submit"))
+        self.closeDialog = wx.CheckBox(parent=self, id=wx.ID_ANY,
+                                       label=_("Close dialog on submit"))
         self.closeDialog.SetValue(True)
         if self.action == 'display':
             self.closeDialog.Enable(False)
-        
+
         # feature id (text/choice for duplicates)
-        self.fidMulti = wx.Choice(parent = self, id = wx.ID_ANY,
-                                  size = (150, -1))
+        self.fidMulti = wx.Choice(parent=self, id=wx.ID_ANY,
+                                  size=(150, -1))
         self.fidMulti.Bind(wx.EVT_CHOICE, self.OnFeature)
-        self.fidText = wx.StaticText(parent = self, id = wx.ID_ANY)
+        self.fidText = wx.StaticText(parent=self, id=wx.ID_ANY)
+
+        self.noFoundMsg = wx.StaticText(parent=self, id=wx.ID_ANY,
+                                        label=_("No attributes found"))
 
-        self.noFoundMsg = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                        label = _("No attributes found"))
-        
-        self.UpdateDialog(query = query, cats = cats)
+        self.UpdateDialog(query=query, cats=cats)
 
         # set title
         if self.action == "update":
@@ -120,11 +126,11 @@ class DisplayAttributesDialog(wx.Dialog):
 
         # buttons
         btnCancel = wx.Button(self, wx.ID_CANCEL)
-        btnReset  = wx.Button(self, wx.ID_UNDO, _("&Reload"))
+        btnReset = wx.Button(self, wx.ID_UNDO, _("&Reload"))
         btnSubmit = wx.Button(self, wx.ID_OK, _("&Submit"))
         if self.action == 'display':
             btnSubmit.Enable(False)
-        
+
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(btnCancel)
         btnSizer.AddButton(btnReset)
@@ -133,25 +139,28 @@ class DisplayAttributesDialog(wx.Dialog):
         btnSizer.AddButton(btnSubmit)
         btnSizer.Realize()
 
-        mainSizer.Add(item = self.noFoundMsg, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = self.notebook, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
+        mainSizer.Add(item=self.noFoundMsg, proportion=0,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(item=self.notebook, proportion=1,
+                      flag=wx.EXPAND | wx.ALL, border=5)
         fidSizer = wx.BoxSizer(wx.HORIZONTAL)
-        fidSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                        label = _("Feature id:")),
-                     proportion = 0, border = 5,
-                     flag = wx.ALIGN_CENTER_VERTICAL)
-        fidSizer.Add(item = self.fidMulti, proportion = 0,
-                     flag = wx.EXPAND | wx.ALL,  border = 5)
-        fidSizer.Add(item = self.fidText, proportion = 0,
-                     flag = wx.EXPAND | wx.ALL,  border = 5)
-        mainSizer.Add(item = fidSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 5)
-        mainSizer.Add(item = self.closeDialog, proportion = 0, flag = wx.EXPAND | wx.LEFT | wx.RIGHT,
-                      border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
+        fidSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                        label=_("Feature id:")),
+                     proportion=0, border=5,
+                     flag=wx.ALIGN_CENTER_VERTICAL)
+        fidSizer.Add(item=self.fidMulti, proportion=0,
+                     flag=wx.EXPAND | wx.ALL, border=5)
+        fidSizer.Add(item=self.fidText, proportion=0,
+                     flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(item=fidSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
+        mainSizer.Add(
+            item=self.closeDialog,
+            proportion=0,
+            flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
+            border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
 
         # bindigs
         btnReset.Bind(wx.EVT_BUTTON, self.OnReset)
@@ -169,11 +178,11 @@ class DisplayAttributesDialog(wx.Dialog):
             self.SetMinSize((w, 200))
         else:
             self.SetMinSize((w, h))
-        
+
         if self.notebook.GetPageCount() == 0:
             Debug.msg(2, "DisplayAttributesDialog(): Nothing found!")
             ### self.mapDBInfo = None
-        
+
     def OnSQLStatement(self, event):
         """Update SQL statement"""
         pass
@@ -185,36 +194,36 @@ class DisplayAttributesDialog(wx.Dialog):
         :return: False attributes not found
         """
         return bool(self.mapDBInfo and self.notebook.GetPageCount() > 0)
-    
-    def GetSQLString(self, updateValues = False):
+
+    def GetSQLString(self, updateValues=False):
         """Create SQL statement string based on self.sqlStatement
 
         Show error message when invalid values are entered.
-        
+
         If updateValues is True, update dataFrame according to values
         in textfields.
         """
         sqlCommands = []
         # find updated values for each layer/category
-        for layer in self.mapDBInfo.layers.keys(): # for each layer
+        for layer in self.mapDBInfo.layers.keys():  # for each layer
             table = self.mapDBInfo.GetTable(layer)
             key = self.mapDBInfo.GetKeyColumn(layer)
             columns = self.mapDBInfo.GetTableDesc(table)
-            for idx in range(len(columns[key]['values'])): # for each category
+            for idx in range(len(columns[key]['values'])):  # for each category
                 updatedColumns = []
                 updatedValues = []
                 for name in columns.keys():
                     if name == key:
                         cat = columns[name]['values'][idx]
                         continue
-                    ctype  = columns[name]['ctype']
+                    ctype = columns[name]['ctype']
                     value = columns[name]['values'][idx]
-                    id    = columns[name]['ids'][idx]
+                    id = columns[name]['ids'][idx]
                     try:
                         newvalue = self.FindWindowById(id).GetValue()
                     except:
                         newvalue = self.FindWindowById(id).GetLabel()
-                  
+
                     if newvalue:
                         try:
                             if ctype == int:
@@ -222,18 +231,19 @@ class DisplayAttributesDialog(wx.Dialog):
                             elif ctype == float:
                                 newvalue = float(newvalue)
                         except ValueError:
-                            GError(parent = self,
-                                   message = _("Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s.") % \
-                                       {'col' : name,
-                                        'value' : str(newvalue),
-                                        'type' : columns[name]['type'].lower()},
-                                   showTraceback = False)
+                            GError(
+                                parent=self,
+                                message=_("Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s.") % {
+                                    'col': name,
+                                    'value': str(newvalue),
+                                    'type': columns[name]['type'].lower()},
+                                showTraceback=False)
                             sqlCommands.append(None)
                             continue
                     else:
                         if self.action == 'add':
                             continue
-                    
+
                     if newvalue != value:
                         updatedColumns.append(name)
                         if not newvalue:
@@ -260,13 +270,13 @@ class DisplayAttributesDialog(wx.Dialog):
                     else:
                         sqlString += name + "=" + updatedValues[idx] + ","
 
-                sqlString = sqlString[:-1] # remove last comma
+                sqlString = sqlString[:-1]  # remove last comma
 
                 if self.action == "add":
                     sqlString += ") VALUES (%s," % cat
                     for value in updatedValues:
                         sqlString += value + ","
-                    sqlString = sqlString[:-1] # remove last comma
+                    sqlString = sqlString[:-1]  # remove last comma
                     sqlString += ")"
                 else:
                     sqlString += " WHERE %s=%s" % (key, cat)
@@ -274,11 +284,13 @@ class DisplayAttributesDialog(wx.Dialog):
             # for each category
         # for each layer END
 
-        Debug.msg(3, "DisplayAttributesDialog.GetSQLString(): %s" % sqlCommands)
+        Debug.msg(
+            3, "DisplayAttributesDialog.GetSQLString(): %s" %
+            sqlCommands)
 
         return sqlCommands
 
-    def OnReset(self, event = None):
+    def OnReset(self, event=None):
         """Reset form"""
         for layer in self.mapDBInfo.layers.keys():
             table = self.mapDBInfo.layers[layer]["table"]
@@ -286,7 +298,7 @@ class DisplayAttributesDialog(wx.Dialog):
             columns = self.mapDBInfo.tables[table]
             for idx in range(len(columns[key]['values'])):
                 for name in columns.keys():
-                    type  = columns[name]['type']
+                    type = columns[name]['type']
                     value = columns[name]['values'][idx]
                     if value is None:
                         value = ''
@@ -294,7 +306,7 @@ class DisplayAttributesDialog(wx.Dialog):
                         id = columns[name]['ids'][idx]
                     except IndexError:
                         id = wx.NOT_FOUND
-                    
+
                     if name != key and id != wx.NOT_FOUND:
                         self.FindWindowById(id).SetValue(str(value))
 
@@ -306,10 +318,10 @@ class DisplayAttributesDialog(wx.Dialog):
         if hasattr(self, "digit"):
             self.parent.digit.GetDisplay().SetSelected([])
             if frame.IsAutoRendered():
-                self.parent.UpdateMap(render = False)
+                self.parent.UpdateMap(render=False)
         elif frame.IsAutoRendered():
             frame.RemoveQueryLayer()
-            self.parent.UpdateMap(render = True)
+            self.parent.UpdateMap(render=True)
         if self.IsModal():
             self.EndModal(wx.ID_OK)
         else:
@@ -319,11 +331,11 @@ class DisplayAttributesDialog(wx.Dialog):
         """Submit records"""
         layer = 1
         close = True
-        enc = UserSettings.Get(group = 'atm', key = 'encoding', subkey = 'value')
+        enc = UserSettings.Get(group='atm', key='encoding', subkey='value')
         if not enc and 'GRASS_DB_ENCODING' in os.environ:
             enc = os.environ['GRASS_DB_ENCODING']
-        
-        for sql in self.GetSQLString(updateValues = True):
+
+        for sql in self.GetSQLString(updateValues=True):
             if not sql:
                 close = False
                 continue
@@ -331,26 +343,26 @@ class DisplayAttributesDialog(wx.Dialog):
                 sql = sql.encode(enc)
             else:
                 sql = sql.encode('utf-8')
-            
+
             driver, database = self.mapDBInfo.GetDbSettings(layer)
             Debug.msg(1, "SQL: %s" % sql)
             RunCommand('db.execute',
-                       parent = self,
-                       quiet = True,
-                       input = '-',
-                       stdin = sql,
-                       driver = driver,
-                       database = database)
-            
+                       parent=self,
+                       quiet=True,
+                       input='-',
+                       stdin=sql,
+                       driver=driver,
+                       database=database)
+
             layer += 1
-        
+
         if close and self.closeDialog.IsChecked():
             self.OnClose(event)
 
     def OnFeature(self, event):
         self.fid = int(event.GetString())
-        self.UpdateDialog(cats = self.cats, fid = self.fid)
-        
+        self.UpdateDialog(cats=self.cats, fid=self.fid)
+
     def GetCats(self):
         """Get id of selected vector object or 'None' if nothing selected
 
@@ -358,23 +370,23 @@ class DisplayAttributesDialog(wx.Dialog):
         """
         if self.fid < 0:
             return None
-        
+
         return self.cats[self.fid]
 
     def GetFid(self):
         """Get selected feature id"""
         return self.fid
-    
-    def UpdateDialog(self, map = None, query = None, cats = None, fid = -1,
-                     action = None):
+
+    def UpdateDialog(self, map=None, query=None, cats=None, fid=-1,
+                     action=None):
         """Update dialog
-        
+
         :param map: name of vector map
         :param query:
         :param cats:
         :param fid: feature id
         :param action: add, update, display or None
-        
+
         :return: True if updated
         :return: False
         """
@@ -386,21 +398,21 @@ class DisplayAttributesDialog(wx.Dialog):
                 enabled = True
             self.closeDialog.Enable(enabled)
             self.FindWindowById(wx.ID_OK).Enable(enabled)
-        
+
         if map:
             self.map = map
             # get layer/table/column information
             self.mapDBInfo = VectorDBInfo(self.map)
-        
+
         if not self.mapDBInfo:
             return False
-        
+
         self.mapDBInfo.Reset()
-        
-        layers = self.mapDBInfo.layers.keys() # get available layers
-        
+
+        layers = self.mapDBInfo.layers.keys()  # get available layers
+
         # id of selected line
-        if query: # select by position
+        if query:  # select by position
             data = self.mapDBInfo.SelectByPoint(query[0],
                                                 query[1])
             self.cats = {}
@@ -411,7 +423,7 @@ class DisplayAttributesDialog(wx.Dialog):
                     if data['Id'][idx] is not None:
                         tfid = int(data['Id'][idx])
                     else:
-                        tfid = 0 # Area / Volume
+                        tfid = 0  # Area / Volume
                     if not tfid in self.cats:
                         self.cats[tfid] = {}
                     if not layer in self.cats[tfid]:
@@ -421,14 +433,14 @@ class DisplayAttributesDialog(wx.Dialog):
                     idx += 1
         else:
             self.cats = cats
-        
+
         if fid > 0:
             self.fid = fid
         elif len(self.cats.keys()) > 0:
             self.fid = self.cats.keys()[0]
         else:
             self.fid = -1
-        
+
         if len(self.cats.keys()) == 1:
             self.fidMulti.Show(False)
             self.fidText.Show(True)
@@ -444,24 +456,23 @@ class DisplayAttributesDialog(wx.Dialog):
                 choices.append(str(tfid))
             self.fidMulti.SetItems(choices)
             self.fidMulti.SetStringSelection(str(self.fid))
-        
+
         # reset notebook
         self.notebook.DeleteAllPages()
-        
-        for layer in layers: # for each layer
-            if not query: # select by layer/cat
+
+        for layer in layers:  # for each layer
+            if not query:  # select by layer/cat
                 if self.fid > 0 and layer in self.cats[self.fid]:
                     for cat in self.cats[self.fid][layer]:
-                        nselected = self.mapDBInfo.SelectFromTable(layer,
-                                                                   where = "%s=%d" % \
-                                                                   (self.mapDBInfo.layers[layer]['key'],
-                                                                    cat))
+                        nselected = self.mapDBInfo.SelectFromTable(
+                            layer, where="%s=%d" %
+                            (self.mapDBInfo.layers[layer]['key'], cat))
                 else:
                     nselected = 0
-            
+
             # if nselected <= 0 and self.action != "add":
             #    continue # nothing selected ...
-            
+
             if self.action == "add":
                 if nselected <= 0:
                     if layer in self.cats[self.fid]:
@@ -471,47 +482,51 @@ class DisplayAttributesDialog(wx.Dialog):
                         for name in columns.keys():
                             if name == key:
                                 for cat in self.cats[self.fid][layer]:
-                                    self.mapDBInfo.tables[table][name]['values'].append(cat)
+                                    self.mapDBInfo.tables[table][
+                                        name]['values'].append(cat)
                             else:
-                                self.mapDBInfo.tables[table][name]['values'].append(None)
-                else: # change status 'add' -> 'update'
+                                self.mapDBInfo.tables[table][
+                                    name]['values'].append(None)
+                else:  # change status 'add' -> 'update'
                     self.action = "update"
-            
-            table   = self.mapDBInfo.layers[layer]["table"]
-            key   = self.mapDBInfo.layers[layer]["key"]
+
+            table = self.mapDBInfo.layers[layer]["table"]
+            key = self.mapDBInfo.layers[layer]["key"]
             columns = self.mapDBInfo.tables[table]
-            
+
             for idx in range(len(columns[key]['values'])):
                 for name in columns.keys():
                     if name == key:
                         cat = int(columns[name]['values'][idx])
                         break
 
-                # use scrolled panel instead (and fix initial max height of the window to 480px)
-                panel = scrolled.ScrolledPanel(parent = self.notebook, id = wx.ID_ANY,
-                                               size = (-1, 150))
-                panel.SetupScrolling(scroll_x = False)
-                
-                self.notebook.AddPage(page = panel, text = " %s %d / %s %d" % (_("Layer"), layer,
-                                                                           _("Category"), cat))
-                
+                # use scrolled panel instead (and fix initial max height of the
+                # window to 480px)
+                panel = scrolled.ScrolledPanel(
+                    parent=self.notebook, id=wx.ID_ANY, size=(-1, 150))
+                panel.SetupScrolling(scroll_x=False)
+
+                self.notebook.AddPage(
+                    page=panel, text=" %s %d / %s %d" %
+                    (_("Layer"), layer, _("Category"), cat))
+
                 # notebook body
                 border = wx.BoxSizer(wx.VERTICAL)
-                
-                flexSizer = wx.FlexGridSizer (cols = 3, hgap = 3, vgap = 3)
+
+                flexSizer = wx.FlexGridSizer(cols=3, hgap=3, vgap=3)
                 flexSizer.AddGrowableCol(2)
                 # columns (sorted by index)
                 names = [''] * len(columns.keys())
                 for name in columns.keys():
                     names[columns[name]['index']] = name
-                
+
                 for name in names:
-                    if name == key: # skip key column (category)
+                    if name == key:  # skip key column (category)
                         continue
-                    
-                    vtype  = columns[name]['type'].lower()
-                    ctype  = columns[name]['ctype']
-                    
+
+                    vtype = columns[name]['type'].lower()
+                    ctype = columns[name]['ctype']
+
                     if columns[name]['values'][idx] is not None:
                         if columns[name]['ctype'] != types.StringType:
                             value = str(columns[name]['values'][idx])
@@ -519,43 +534,51 @@ class DisplayAttributesDialog(wx.Dialog):
                             value = columns[name]['values'][idx]
                     else:
                         value = ''
-                    
-                    colName = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                            label = name)
-                    colType = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                            label = "[%s]:" % vtype)
-                    colValue = wx.TextCtrl(parent = panel, id = wx.ID_ANY, value = value)
+
+                    colName = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                            label=name)
+                    colType = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                            label="[%s]:" % vtype)
+                    colValue = wx.TextCtrl(
+                        parent=panel, id=wx.ID_ANY, value=value)
                     colValue.SetName(name)
                     if ctype == int:
                         colValue.SetValidator(IntegerValidator())
                     elif ctype == float:
                         colValue.SetValidator(FloatValidator())
-                    
+
                     self.Bind(wx.EVT_TEXT, self.OnSQLStatement, colValue)
                     if self.action == 'display':
                         colValue.SetWindowStyle(wx.TE_READONLY)
-                    
-                    flexSizer.Add(colName, proportion = 0,
-                                  flag = wx.ALIGN_CENTER_VERTICAL)
-                    flexSizer.Add(colType, proportion = 0,
-                                  flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-                    flexSizer.Add(colValue, proportion = 1,
-                                  flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+
+                    flexSizer.Add(colName, proportion=0,
+                                  flag=wx.ALIGN_CENTER_VERTICAL)
+                    flexSizer.Add(
+                        colType,
+                        proportion=0,
+                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+                    flexSizer.Add(colValue, proportion=1,
+                                  flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
                     # add widget reference to self.columns
-                    columns[name]['ids'].append(colValue.GetId()) # name, type, values, id
+                    columns[name]['ids'].append(
+                        colValue.GetId())  # name, type, values, id
                 # for each attribute (including category) END
-                border.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
+                border.Add(
+                    item=flexSizer,
+                    proportion=1,
+                    flag=wx.ALL | wx.EXPAND,
+                    border=5)
                 panel.SetSizer(border)
             # for each category END
         # for each layer END
-        
+
         if self.notebook.GetPageCount() == 0:
             self.noFoundMsg.Show(True)
         else:
             self.noFoundMsg.Show(False)
-        
+
         self.Layout()
-        
+
         return True
 
     def SetColumnValue(self, layer, column, value):
@@ -566,46 +589,48 @@ class DisplayAttributesDialog(wx.Dialog):
         """
         table = self.mapDBInfo.GetTable(layer)
         columns = self.mapDBInfo.GetTableDesc(table)
-        
+
         for key, col in columns.iteritems():
             if key == column:
-                col['values'] = [col['ctype'](value),]
+                col['values'] = [col['ctype'](value), ]
                 break
-        
+
+
 class ModifyTableRecord(wx.Dialog):
-    def __init__(self, parent, title, data, keyEditable = (-1, True),
-                 id = wx.ID_ANY, style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+
+    def __init__(self, parent, title, data, keyEditable=(-1, True),
+                 id=wx.ID_ANY, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
         """Dialog for inserting/updating table record
-        
+
         :param data: a list: [(column, value)]
         :param keyEditable: (id, editable?) indicates if textarea for
                             key column is editable(True) or not
         """
         # parent -> VDigitWindow
-        wx.Dialog.__init__(self, parent, id, title, style = style)
-        
+        wx.Dialog.__init__(self, parent, id, title, style=style)
+
         self.CenterOnParent()
-        
+
         self.keyId = keyEditable[0]
-        
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY)
+
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY)
         box.Hide()
-        self.dataPanel = scrolled.ScrolledPanel(parent = self, id = wx.ID_ANY,
-                                                style = wx.TAB_TRAVERSAL)
-        self.dataPanel.SetupScrolling(scroll_x = False)
-        
+        self.dataPanel = scrolled.ScrolledPanel(parent=self, id=wx.ID_ANY,
+                                                style=wx.TAB_TRAVERSAL)
+        self.dataPanel.SetupScrolling(scroll_x=False)
+
         # buttons
         self.btnCancel = wx.Button(self, wx.ID_CANCEL)
         self.btnSubmit = wx.Button(self, wx.ID_OK, _("&Submit"))
         self.btnSubmit.SetDefault()
-        
+
         # data area
         self.widgets = []
         cId = 0
         self.usebox = False
         self.cat = None
         winFocus = False
-        
+
         for column, ctype, ctypeStr, value in data:
             if self.keyId == cId:
                 self.cat = int(value)
@@ -617,11 +642,12 @@ class ModifyTableRecord(wx.Dialog):
                     cId += 1
                     continue
                 else:
-                    valueWin = wx.SpinCtrl(parent = self.dataPanel, id = wx.ID_ANY,
-                                           value = value, min = -1e9, max = 1e9, size = (250, -1))
+                    valueWin = wx.SpinCtrl(
+                        parent=self.dataPanel, id=wx.ID_ANY, value=value,
+                        min=-1e9, max=1e9, size=(250, -1))
             else:
-                valueWin = wx.TextCtrl(parent = self.dataPanel, id = wx.ID_ANY,
-                                       value = value, size = (250, -1))
+                valueWin = wx.TextCtrl(parent=self.dataPanel, id=wx.ID_ANY,
+                                       value=value, size=(250, -1))
                 if ctype == int:
                     valueWin.SetValidator(IntegerValidator())
                 elif ctype == float:
@@ -629,115 +655,118 @@ class ModifyTableRecord(wx.Dialog):
                 if not winFocus:
                     wx.CallAfter(valueWin.SetFocus)
                     winFocus = True
-            
-            label = wx.StaticText(parent = self.dataPanel, id = wx.ID_ANY,
-                                  label = column)
-            ctype = wx.StaticText(parent = self.dataPanel, id = wx.ID_ANY,
-                                  label = "[%s]:" % ctypeStr.lower())
-            self.widgets.append((label.GetId(), ctype.GetId(), valueWin.GetId()))
-            
+
+            label = wx.StaticText(parent=self.dataPanel, id=wx.ID_ANY,
+                                  label=column)
+            ctype = wx.StaticText(parent=self.dataPanel, id=wx.ID_ANY,
+                                  label="[%s]:" % ctypeStr.lower())
+            self.widgets.append(
+                (label.GetId(), ctype.GetId(), valueWin.GetId()))
+
             cId += 1
-        
+
         self._layout()
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # data area
-        dataSizer = wx.FlexGridSizer(cols = 3, hgap = 3, vgap = 3)
+        dataSizer = wx.FlexGridSizer(cols=3, hgap=3, vgap=3)
         dataSizer.AddGrowableCol(2)
-        
+
         for labelId, ctypeId, valueId in self.widgets:
             label = self.FindWindowById(labelId)
             ctype = self.FindWindowById(ctypeId)
             value = self.FindWindowById(valueId)
-            
-            dataSizer.Add(label, proportion = 0,
-                          flag = wx.ALIGN_CENTER_VERTICAL)
-            dataSizer.Add(ctype, proportion = 0,
-                          flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-            dataSizer.Add(value, proportion = 0,
-                          flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
-        
+
+            dataSizer.Add(label, proportion=0,
+                          flag=wx.ALIGN_CENTER_VERTICAL)
+            dataSizer.Add(ctype, proportion=0,
+                          flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+            dataSizer.Add(value, proportion=0,
+                          flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+
         self.dataPanel.SetAutoLayout(True)
         self.dataPanel.SetSizer(dataSizer)
         dataSizer.Fit(self.dataPanel)
-        
+
         if self.usebox:
-            self.boxSizer.Add(item = self.dataPanel, proportion = 1,
-                              flag = wx.EXPAND | wx.ALL, border = 5)
-            
+            self.boxSizer.Add(item=self.dataPanel, proportion=1,
+                              flag=wx.EXPAND | wx.ALL, border=5)
+
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnSubmit)
         btnSizer.Realize()
-        
+
         if not self.usebox:
-            sizer.Add(item = self.dataPanel, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
+            sizer.Add(item=self.dataPanel, proportion=1,
+                      flag=wx.EXPAND | wx.ALL, border=5)
         else:
-            sizer.Add(item = self.boxSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALL, border = 5)
-        
+            sizer.Add(item=self.boxSizer, proportion=1,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL, border=5)
+
         framewidth = self.GetBestSize()[0] + 25
         self.SetMinSize((framewidth, 250))
 
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         sizer.Fit(self)
-        
+
         self.Layout()
-        
-    def GetValues(self, columns = None):
+
+    def GetValues(self, columns=None):
         """Return list of values (casted to string).
-        
+
         If columns is given (list), return only values of given columns.
         """
         valueList = list()
         for labelId, ctypeId, valueId in self.widgets:
             column = self.FindWindowById(labelId).GetLabel()
             if columns is None or column in columns:
-                value = GetUnicodeValue(self.FindWindowById(valueId).GetValue())
+                value = GetUnicodeValue(
+                    self.FindWindowById(valueId).GetValue())
                 valueList.append(value)
-        
+
         # add key value
         if self.usebox:
             valueList.insert(self.keyId, GetUnicodeValue(str(self.cat)))
-        
+
         return valueList
 
+
 class AddColumnDialog(wx.Dialog):
-    def __init__(self, parent, title, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE  | wx.RESIZE_BORDER):
+
+    def __init__(self, parent, title, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
         """Dialog for adding column into table
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style)
-        
+        wx.Dialog.__init__(self, parent, id, title, style=style)
+
         self.CenterOnParent()
 
-        self.data = {} 
-        self.data['addColName'] = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = '',
-                                              size = (150, -1), style = wx.TE_PROCESS_ENTER)
+        self.data = {}
+        self.data['addColName'] = wx.TextCtrl(
+            parent=self, id=wx.ID_ANY, value='', size=(
+                150, -1), style=wx.TE_PROCESS_ENTER)
 
-           
-        self.data['addColType'] = wx.Choice (parent = self, id = wx.ID_ANY,
-                                             choices = ["integer",
-                                                        "double",
-                                                        "varchar",
-                                                        "date"]) # FIXME
+        self.data['addColType'] = wx.Choice(parent=self, id=wx.ID_ANY,
+                                            choices=["integer",
+                                                     "double",
+                                                     "varchar",
+                                                     "date"])  # FIXME
         self.data['addColType'].SetSelection(0)
         self.data['addColType'].Bind(wx.EVT_CHOICE, self.OnTableChangeType)
-            
-        self.data['addColLength'] = wx.SpinCtrl(parent = self, id = wx.ID_ANY, size = (65, -1),
-                                                initial = 250,
-                                                min = 1, max = 1e6)
-        self.data['addColLength'].Enable(False)
 
+        self.data['addColLength'] = wx.SpinCtrl(
+            parent=self, id=wx.ID_ANY, size=(
+                65, -1), initial=250, min=1, max=1e6)
+        self.data['addColLength'].Enable(False)
 
         # buttons
         self.btnCancel = wx.Button(self, wx.ID_CANCEL)
@@ -751,37 +780,49 @@ class AddColumnDialog(wx.Dialog):
         sizer = wx.BoxSizer(wx.VERTICAL)
         addSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        addSizer.Add(item =  wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Column")),
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-        addSizer.Add(item = self.data['addColName'], proportion = 1,
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-
-        addSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Type")), 
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-        addSizer.Add(item = self.data['addColType'],
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-
-        addSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Length")),
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-        addSizer.Add(item = self.data['addColLength'],
-                     flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                     border = 5)
-
-        sizer.Add(item = addSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        addSizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Column")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        addSizer.Add(item=self.data['addColName'], proportion=1,
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                     border=5)
+
+        addSizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Type")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        addSizer.Add(item=self.data['addColType'],
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                     border=5)
+
+        addSizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Length")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+            border=5)
+        addSizer.Add(item=self.data['addColLength'],
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                     border=5)
+
+        sizer.Add(item=addSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
 
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
 
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
 
         self.SetSizer(sizer)
 
@@ -795,11 +836,11 @@ class AddColumnDialog(wx.Dialog):
         values['length'] = int(self.data['addColLength'].GetValue())
 
         return values
-  
+
     def OnTableChangeType(self, event):
         """Data type for new column changed. Enable or disable
         data length widget"""
         if event.GetString() == "varchar":
             self.data['addColLength'].Enable(True)
         else:
-            self.data['addColLength'].Enable(False)     
+            self.data['addColLength'].Enable(False)
diff --git a/gui/wxpython/dbmgr/g.gui.dbmgr.html b/gui/wxpython/dbmgr/g.gui.dbmgr.html
index cf8cbeb..890238f 100644
--- a/gui/wxpython/dbmgr/g.gui.dbmgr.html
+++ b/gui/wxpython/dbmgr/g.gui.dbmgr.html
@@ -81,4 +81,4 @@ Michael Barton, Arizona State University, USA<br>
 Jachym Cepicky
 
 <p>
-<i>$Date: 2016-04-09 17:17:44 +0200 (Sat, 09 Apr 2016) $</i>
+<i>$Date: 2016-04-09 17:15:24 +0200 (Sat, 09 Apr 2016) $</i>
diff --git a/gui/wxpython/dbmgr/g.gui.dbmgr.py b/gui/wxpython/dbmgr/g.gui.dbmgr.py
index 9574d12..96d7e18 100755
--- a/gui/wxpython/dbmgr/g.gui.dbmgr.py
+++ b/gui/wxpython/dbmgr/g.gui.dbmgr.py
@@ -35,6 +35,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.utils import _
     from dbmgr.manager import AttributeManager
 
@@ -44,11 +48,13 @@ def main():
         gscript.fatal(_("Vector map <%s> not found") % options['map'])
 
     app = wx.App()
-    gscript.message(_("Loading attribute data for vector map <%s>...") % mapName)
-    f = AttributeManager(parent=None, id=wx.ID_ANY,
-                         title="%s - <%s>" % (_("GRASS GIS Attribute Table Manager"),
-                                              mapName),
-                         size=(900, 600), vectorName=mapName)
+    gscript.message(
+        _("Loading attribute data for vector map <%s>...") %
+        mapName)
+    f = AttributeManager(
+        parent=None, id=wx.ID_ANY, title="%s - <%s>" %
+        (_("GRASS GIS Attribute Table Manager"), mapName), size=(
+            900, 600), vectorName=mapName)
     f.Show()
 
     app.MainLoop()
diff --git a/gui/wxpython/dbmgr/manager.py b/gui/wxpython/dbmgr/manager.py
index d9b3aea..7812423 100644
--- a/gui/wxpython/dbmgr/manager.py
+++ b/gui/wxpython/dbmgr/manager.py
@@ -26,21 +26,23 @@ import sys
 import os
 
 import wx
-import wx.lib.flatnotebook    as FN
+import wx.lib.flatnotebook as FN
 
 import grass.script as grass
 
-from core             import globalvar
-from core.gcmd        import GMessage
-from core.debug       import Debug
+from core import globalvar
+from core.gcmd import GMessage
+from core.debug import Debug
 from core.utils import _
-from dbmgr.base       import DbMgrBase
+from dbmgr.base import DbMgrBase
 from gui_core.widgets import GNotebook
-                
+
+
 class AttributeManager(wx.Frame, DbMgrBase):
-    def __init__(self, parent, id = wx.ID_ANY,
-                 title = None, vectorName = None, item = None, log = None,
-                 selection = None, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=None, vectorName=None, item=None, log=None,
+                 selection=None, **kwargs):
         """GRASS Attribute Table Manager window
 
         :param parent: parent window
@@ -57,12 +59,12 @@ class AttributeManager(wx.Frame, DbMgrBase):
             mapdisplay = self.parent.GetMapDisplay()
         except:
             mapdisplay = None
-        
-        DbMgrBase.__init__(self, id = id, mapdisplay = mapdisplay,
-                           vectorName = vectorName, item = item, 
-                           log = log, statusbar = self, 
+
+        DbMgrBase.__init__(self, id=id, mapdisplay=mapdisplay,
+                           vectorName=vectorName, item=item,
+                           log=log, statusbar=self,
                            **kwargs)
-        
+
         wx.Frame.__init__(self, parent, id, *kwargs)
 
         # title
@@ -72,72 +74,86 @@ class AttributeManager(wx.Frame, DbMgrBase):
                 title += _("READONLY - ")
             title += "<%s>" % (self.dbMgrData['vectName'])
 
-
         self.SetTitle(title)
-        
+
         # icon
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_sql.ico'), wx.BITMAP_TYPE_ICO))
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_sql.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
 
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-             
         if len(self.dbMgrData['mapDBInfo'].layers.keys()) == 0:
-            GMessage(parent = self.parent,
-                     message = _("Database connection for vector map <%s> "
-                                 "is not defined in DB file. "
-                                 "You can define new connection in "
-                                 "'Manage layers' tab.") % self.dbMgrData['vectName'])
-        
+            GMessage(
+                parent=self.parent, message=_(
+                    "Database connection for vector map <%s> "
+                    "is not defined in DB file. "
+                    "You can define new connection in "
+                    "'Manage layers' tab.") %
+                self.dbMgrData['vectName'])
+
         busy = wx.BusyInfo(message=_("Please wait, loading attribute data..."),
                            parent=self.parent)
         wx.SafeYield()
-        self.CreateStatusBar(number = 1)
+        self.CreateStatusBar(number=1)
+
+        self.notebook = GNotebook(self.panel, style=globalvar.FNPageDStyle)
 
-        self.notebook = GNotebook(self.panel, style = globalvar.FNPageDStyle)
-                
-        self.CreateDbMgrPage(parent = self, pageName = 'browse')
+        self.CreateDbMgrPage(parent=self, pageName='browse')
 
-        self.notebook.AddPage(page = self.pages['browse'], text = _("Browse data"),
-                              name = 'browse')
+        self.notebook.AddPage(page=self.pages['browse'], text=_("Browse data"),
+                              name='browse')
         self.pages['browse'].SetTabAreaColour(globalvar.FNPageColor)
 
-        self.CreateDbMgrPage(parent = self, pageName = 'manageTable')
+        self.CreateDbMgrPage(parent=self, pageName='manageTable')
 
-        self.notebook.AddPage(page = self.pages['manageTable'], text = _("Manage tables"),
-                              name = 'table')
+        self.notebook.AddPage(
+            page=self.pages['manageTable'],
+            text=_("Manage tables"),
+            name='table')
         self.pages['manageTable'].SetTabAreaColour(globalvar.FNPageColor)
 
-        self.CreateDbMgrPage(parent = self, pageName = 'manageLayer')
-        self.notebook.AddPage(page = self.pages['manageLayer'], text = _("Manage layers"),
-                              name = 'layers')
+        self.CreateDbMgrPage(parent=self, pageName='manageLayer')
+        self.notebook.AddPage(
+            page=self.pages['manageLayer'],
+            text=_("Manage layers"),
+            name='layers')
         del busy
 
         if selection:
             wx.CallAfter(self.notebook.SetSelectionByName, selection)
         else:
-            wx.CallAfter(self.notebook.SetSelection, 0) # select browse tab
-        
+            wx.CallAfter(self.notebook.SetSelection, 0)  # select browse tab
+
         # buttons
-        self.btnClose   = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
+        self.btnClose = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
         self.btnClose.SetToolTipString(_("Close Attribute Table Manager"))
-        self.btnReload = wx.Button(parent = self.panel, id = wx.ID_REFRESH)
-        self.btnReload.SetToolTipString(_("Reload currently selected attribute data"))
-        self.btnReset = wx.Button(parent = self.panel, id = wx.ID_CLEAR)
-        self.btnReset.SetToolTipString(_("Reload all attribute data (drop current selection)"))
-        
+        self.btnReload = wx.Button(parent=self.panel, id=wx.ID_REFRESH)
+        self.btnReload.SetToolTipString(
+            _("Reload currently selected attribute data"))
+        self.btnReset = wx.Button(parent=self.panel, id=wx.ID_CLEAR)
+        self.btnReset.SetToolTipString(
+            _("Reload all attribute data (drop current selection)"))
+
         # events
-        self.btnClose.Bind(wx.EVT_BUTTON,   self.OnCloseWindow)
-        self.btnReload.Bind(wx.EVT_BUTTON,  self.OnReloadData)
-        self.btnReset.Bind(wx.EVT_BUTTON,   self.OnReloadDataAll)
-        self.notebook.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
+        self.btnClose.Bind(wx.EVT_BUTTON, self.OnCloseWindow)
+        self.btnReload.Bind(wx.EVT_BUTTON, self.OnReloadData)
+        self.btnReset.Bind(wx.EVT_BUTTON, self.OnReloadDataAll)
+        self.notebook.Bind(
+            FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+            self.OnPageChanged)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
 
         # do layout
         self._layout()
 
         # self.SetMinSize(self.GetBestSize())
-        self.SetSize((700, 550)) # FIXME hard-coded size
+        self.SetSize((700, 550))  # FIXME hard-coded size
         self.SetMinSize(self.GetSize())
-    
+
     def _layout(self):
         """Do layout"""
         # frame body
@@ -145,36 +161,36 @@ class AttributeManager(wx.Frame, DbMgrBase):
 
         # buttons
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnReset, proportion = 1,
-                     flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
-        btnSizer.Add(item = self.btnReload, proportion = 1,
-                     flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
-        btnSizer.Add(item = self.btnClose, proportion = 1,
-                     flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
+        btnSizer.Add(item=self.btnReset, proportion=1,
+                     flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
+        btnSizer.Add(item=self.btnReload, proportion=1,
+                     flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
+        btnSizer.Add(item=self.btnClose, proportion=1,
+                     flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
 
-        mainSizer.Add(item = self.notebook, proportion = 1, flag = wx.EXPAND)
-        mainSizer.Add(item = btnSizer, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        mainSizer.Add(item=self.notebook, proportion=1, flag=wx.EXPAND)
+        mainSizer.Add(item=btnSizer, flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
 
         self.panel.SetAutoLayout(True)
         self.panel.SetSizer(mainSizer)
         mainSizer.Fit(self.panel)
         self.Layout()
-  
+
     def OnCloseWindow(self, event):
         """Cancel button pressed"""
         if self.parent and self.parent.GetName() == 'LayerManager':
             # deregister ATM
             self.parent.dialogs['atm'].remove(self)
-                    
+
         if not isinstance(event, wx.CloseEvent):
             self.Destroy()
-        
+
         event.Skip()
 
     def OnReloadData(self, event):
         """Reload data"""
         if self.pages['browse']:
-            self.pages['browse'].OnDataReload(event) # TODO replace by signal
+            self.pages['browse'].OnDataReload(event)  # TODO replace by signal
 
     def OnReloadDataAll(self, event):
         """Reload all data"""
@@ -191,11 +207,13 @@ class AttributeManager(wx.Frame, DbMgrBase):
                 id = None
         except KeyError:
             id = None
-        
+
         if event.GetSelection() == self.notebook.GetPageIndexByName('browse') and id:
             win = self.FindWindowById(id)
             if win:
-                self.log.write(_("Number of loaded records: %d") % win.GetItemCount())
+                self.log.write(
+                    _("Number of loaded records: %d") %
+                    win.GetItemCount())
             else:
                 self.log.write("")
             self.btnReload.Enable()
@@ -204,14 +222,14 @@ class AttributeManager(wx.Frame, DbMgrBase):
             self.log.write("")
             self.btnReload.Enable(False)
             self.btnReset.Enable(False)
-        
-        event.Skip()   
+
+        event.Skip()
 
     def OnTextEnter(self, event):
         pass
 
     def UpdateDialog(self, layer):
         """Updates dialog layout for given layer"""
-        DbMgrBase.UpdateDialog(self, layer = layer)
+        DbMgrBase.UpdateDialog(self, layer=layer)
         # set current page selection
-        self.notebook.SetSelectionByName('layers') 
+        self.notebook.SetSelectionByName('layers')
diff --git a/gui/wxpython/dbmgr/sqlbuilder.py b/gui/wxpython/dbmgr/sqlbuilder.py
index 7822173..62cc6e1 100644
--- a/gui/wxpython/dbmgr/sqlbuilder.py
+++ b/gui/wxpython/dbmgr/sqlbuilder.py
@@ -33,256 +33,317 @@ import wx
 
 from grass.pydispatch.signal import Signal
 
-from core.gcmd   import RunCommand, GError, GMessage
+from core.gcmd import RunCommand, GError, GMessage
 from dbmgr.vinfo import CreateDbInfoDesc, VectorDBInfo, GetUnicodeValue
 
 import grass.script as grass
 
+
 class SQLBuilder(wx.Frame):
     """SQLBuider class
     Base class for classes, which builds SQL statements.
     """
-    def __init__(self, parent, title, vectmap, modeChoices, id = wx.ID_ANY,
-                 layer = 1):
+
+    def __init__(self, parent, title, vectmap, modeChoices, id=wx.ID_ANY,
+                 layer=1):
         wx.Frame.__init__(self, parent, id, title)
-        
+
         self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_sql.ico'),
                              wx.BITMAP_TYPE_ICO))
-        
-        self.parent     = parent
-        
+
+        self.parent = parent
+
         # variables
-        self.vectmap = vectmap # fullname
+        self.vectmap = vectmap  # fullname
         if not "@" in self.vectmap:
-            self.vectmap = grass.find_file(self.vectmap, element = 'vector')['fullname']
+            self.vectmap = grass.find_file(
+                self.vectmap, element='vector')['fullname']
             if not self.vectmap:
                 grass.fatal(_("Vector map <%s> not found") % vectmap)
         self.mapname, self.mapset = self.vectmap.split("@", 1)
-        
+
         # db info
         self.layer = layer
         self.dbInfo = VectorDBInfo(self.vectmap)
         self.tablename = self.dbInfo.GetTable(self.layer)
         self.driver, self.database = self.dbInfo.GetDbSettings(self.layer)
-        
+
         self.colvalues = []     # array with unique values in selected column
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
 
         # statusbar
         self.statusbar = self.CreateStatusBar(number=1)
-        
+
         self._doLayout(modeChoices)
 
         self.panel.SetAutoLayout(True)
         self.panel.SetSizer(self.pagesizer)
         self.pagesizer.Fit(self.panel)
-        
+
         self.SetMinSize((400, 600))
         self.SetClientSize(self.panel.GetSize())
         self.CenterOnParent()
-                
+
     def _doLayout(self, modeChoices):
         """Do dialog layout"""
-        
+
         self.pagesizer = wx.BoxSizer(wx.VERTICAL)
 
-        
         # dbInfo
-        databasebox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                   label = " %s " % _("Database connection"))
+        databasebox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                   label=" %s " % _("Database connection"))
         databaseboxsizer = wx.StaticBoxSizer(databasebox, wx.VERTICAL)
-        databaseboxsizer.Add(item = CreateDbInfoDesc(self.panel, self.dbInfo, layer = self.layer),
-                             proportion=1,
-                             flag=wx.EXPAND | wx.ALL,
-                             border=3)
+        databaseboxsizer.Add(
+            item=CreateDbInfoDesc(
+                self.panel,
+                self.dbInfo,
+                layer=self.layer),
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=3)
 
         #
         # text areas
         #
         # sql box
-        sqlbox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                              label = " %s " % _("Query"))
+        sqlbox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                              label=" %s " % _("Query"))
         sqlboxsizer = wx.StaticBoxSizer(sqlbox, wx.VERTICAL)
 
-        self.text_sql = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY,
-                                    value = '', size = (-1, 50),
+        self.text_sql = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY,
+                                    value='', size=(-1, 50),
                                     style=wx.TE_MULTILINE)
-        
+
         self.text_sql.SetInsertionPointEnd()
         wx.CallAfter(self.text_sql.SetFocus)
 
-        sqlboxsizer.Add(item = self.text_sql, flag = wx.EXPAND)
-        
+        sqlboxsizer.Add(item=self.text_sql, flag=wx.EXPAND)
+
         #
         # buttons
         #
-        self.btn_clear  = wx.Button(parent = self.panel, id = wx.ID_CLEAR)
+        self.btn_clear = wx.Button(parent=self.panel, id=wx.ID_CLEAR)
         self.btn_clear.SetToolTipString(_("Set SQL statement to default"))
-        self.btn_apply  = wx.Button(parent = self.panel, id = wx.ID_APPLY)
-        self.btn_apply.SetToolTipString(_("Apply SQL statement in Attribute Table Manager"))
-        self.btn_close  = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
+        self.btn_apply = wx.Button(parent=self.panel, id=wx.ID_APPLY)
+        self.btn_apply.SetToolTipString(
+            _("Apply SQL statement in Attribute Table Manager"))
+        self.btn_close = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
         self.btn_close.SetToolTipString(_("Close the dialog"))
-        
-        self.btn_logic = { 'is' : ['=', ],
-                           'isnot' : ['!=', ],
-                           'like'  : ['LIKE', ],
-                           'gt'    : ['>', ],
-                           'ge'    : ['>=', ],
-                           'lt'    : ['<', ],
-                           'le'    : ['<=', ],
-                           'or'    : ['OR', ],
-                           'not'   : ['NOT', ],
-                           'and'   : ['AND', ],
-                           'brac'  : ['()', ],
-                           'prc'   : ['%', ] }
-    
-        self.btn_logicpanel = wx.Panel(parent = self.panel, id = wx.ID_ANY)    
+
+        self.btn_logic = {'is': ['=', ],
+                          'isnot': ['!=', ],
+                          'like': ['LIKE', ],
+                          'gt': ['>', ],
+                          'ge': ['>=', ],
+                          'lt': ['<', ],
+                          'le': ['<=', ],
+                          'or': ['OR', ],
+                          'not': ['NOT', ],
+                          'and': ['AND', ],
+                          'brac': ['()', ],
+                          'prc': ['%', ]}
+
+        self.btn_logicpanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
         for key, value in self.btn_logic.iteritems():
-            btn = wx.Button(parent = self.btn_logicpanel, id = wx.ID_ANY,
-                            label = value[0])
+            btn = wx.Button(parent=self.btn_logicpanel, id=wx.ID_ANY,
+                            label=value[0])
             self.btn_logic[key].append(btn.GetId())
-            
-        self.buttonsizer = wx.FlexGridSizer(cols = 4, hgap = 5, vgap = 5)
-        self.buttonsizer.Add(item = self.btn_clear)
-        self.buttonsizer.Add(item = self.btn_apply)
-        self.buttonsizer.Add(item = self.btn_close)
-        
+
+        self.buttonsizer = wx.FlexGridSizer(cols=4, hgap=5, vgap=5)
+        self.buttonsizer.Add(item=self.btn_clear)
+        self.buttonsizer.Add(item=self.btn_apply)
+        self.buttonsizer.Add(item=self.btn_close)
+
         btn_logicsizer = wx.GridBagSizer(5, 5)
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['is'][1]), pos = (0,0))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['isnot'][1]), pos = (1,0))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['like'][1]), pos = (2, 0))
-
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['gt'][1]), pos = (0, 1))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['ge'][1]), pos = (1, 1))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['or'][1]), pos = (2, 1))
-
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['lt'][1]), pos = (0, 2))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['le'][1]), pos = (1, 2))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['not'][1]), pos = (2, 2))
-
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['brac'][1]), pos = (0, 3))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['prc'][1]), pos = (1, 3))
-        btn_logicsizer.Add(item = self.FindWindowById(self.btn_logic['and'][1]), pos = (2, 3))
-    
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['is'][1]), pos=(
+                0, 0))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['isnot'][1]), pos=(
+                1, 0))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['like'][1]), pos=(
+                2, 0))
+
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['gt'][1]), pos=(
+                0, 1))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['ge'][1]), pos=(
+                1, 1))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['or'][1]), pos=(
+                2, 1))
+
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['lt'][1]), pos=(
+                0, 2))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['le'][1]), pos=(
+                1, 2))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['not'][1]), pos=(
+                2, 2))
+
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['brac'][1]), pos=(
+                0, 3))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['prc'][1]), pos=(
+                1, 3))
+        btn_logicsizer.Add(
+            item=self.FindWindowById(
+                self.btn_logic['and'][1]), pos=(
+                2, 3))
+
         self.btn_logicpanel.SetSizer(btn_logicsizer)
 
         #
         # list boxes (columns, values)
         #
         self.hsizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        columnsbox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                  label = " %s " % _("Columns"))
+
+        columnsbox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                  label=" %s " % _("Columns"))
         columnsizer = wx.StaticBoxSizer(columnsbox, wx.VERTICAL)
-        self.list_columns = wx.ListBox(parent = self.panel, id = wx.ID_ANY,
-                                       choices = self.dbInfo.GetColumns(self.tablename),
-                                       style = wx.LB_MULTIPLE)
-        columnsizer.Add(item = self.list_columns, proportion = 1,
-                        flag = wx.EXPAND)
+        self.list_columns = wx.ListBox(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            choices=self.dbInfo.GetColumns(
+                self.tablename),
+            style=wx.LB_MULTIPLE)
+        columnsizer.Add(item=self.list_columns, proportion=1,
+                        flag=wx.EXPAND)
 
         modesizer = wx.BoxSizer(wx.VERTICAL)
-        
-        self.mode = wx.RadioBox(parent = self.panel, id = wx.ID_ANY,
-                                label = " %s " % _("Interactive insertion"),
-                                choices = modeChoices, 
-                                style = wx.RA_SPECIFY_COLS,
-                                majorDimension = 1)
 
-        self.mode.SetSelection(1) # default 'values'
-        modesizer.Add(item = self.mode, proportion = 1,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL | wx.EXPAND, border = 5)
+        self.mode = wx.RadioBox(parent=self.panel, id=wx.ID_ANY,
+                                label=" %s " % _("Interactive insertion"),
+                                choices=modeChoices,
+                                style=wx.RA_SPECIFY_COLS,
+                                majorDimension=1)
+
+        self.mode.SetSelection(1)  # default 'values'
+        modesizer.Add(item=self.mode, proportion=1,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL | wx.EXPAND, border=5)
 
         # self.list_columns.SetMinSize((-1,130))
         # self.list_values.SetMinSize((-1,100))
 
-        self.valuespanel = wx.Panel(parent = self.panel, id = wx.ID_ANY)
-        valuesbox = wx.StaticBox(parent = self.valuespanel, id = wx.ID_ANY,
-                                 label = " %s " % _("Values"))
+        self.valuespanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
+        valuesbox = wx.StaticBox(parent=self.valuespanel, id=wx.ID_ANY,
+                                 label=" %s " % _("Values"))
         valuesizer = wx.StaticBoxSizer(valuesbox, wx.VERTICAL)
-        self.list_values = wx.ListBox(parent = self.valuespanel, id = wx.ID_ANY,
-                                      choices = self.colvalues,
-                                      style = wx.LB_MULTIPLE)
-        valuesizer.Add(item = self.list_values, proportion = 1,
-                       flag = wx.EXPAND)
+        self.list_values = wx.ListBox(parent=self.valuespanel, id=wx.ID_ANY,
+                                      choices=self.colvalues,
+                                      style=wx.LB_MULTIPLE)
+        valuesizer.Add(item=self.list_values, proportion=1,
+                       flag=wx.EXPAND)
         self.valuespanel.SetSizer(valuesizer)
 
-        self.btn_unique = wx.Button(parent = self.valuespanel, id = wx.ID_ANY,
-                                    label = _("Get all values"))
+        self.btn_unique = wx.Button(parent=self.valuespanel, id=wx.ID_ANY,
+                                    label=_("Get all values"))
         self.btn_unique.Enable(False)
-        self.btn_uniquesample = wx.Button(parent = self.valuespanel, id = wx.ID_ANY,
-                                          label = _("Get sample"))
-        self.btn_uniquesample.SetToolTipString(_("Get first 256 unique values as sample"))
+        self.btn_uniquesample = wx.Button(
+            parent=self.valuespanel,
+            id=wx.ID_ANY,
+            label=_("Get sample"))
+        self.btn_uniquesample.SetToolTipString(
+            _("Get first 256 unique values as sample"))
         self.btn_uniquesample.Enable(False)
 
         buttonsizer3 = wx.BoxSizer(wx.HORIZONTAL)
-        buttonsizer3.Add(item = self.btn_uniquesample, proportion = 0,
-                         flag = wx.ALIGN_CENTER_HORIZONTAL | wx.RIGHT, border = 5)
-        buttonsizer3.Add(item = self.btn_unique, proportion = 0,
-                         flag = wx.ALIGN_CENTER_HORIZONTAL)
+        buttonsizer3.Add(item=self.btn_uniquesample, proportion=0,
+                         flag=wx.ALIGN_CENTER_HORIZONTAL | wx.RIGHT, border=5)
+        buttonsizer3.Add(item=self.btn_unique, proportion=0,
+                         flag=wx.ALIGN_CENTER_HORIZONTAL)
 
-        valuesizer.Add(item = buttonsizer3, proportion = 0,
-                       flag = wx.TOP, border = 5)
+        valuesizer.Add(item=buttonsizer3, proportion=0,
+                       flag=wx.TOP, border=5)
 
         # go to
         gotosizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.goto = wx.TextCtrl(parent = self.valuespanel, id = wx.ID_ANY, style = wx.TE_PROCESS_ENTER)
-        gotosizer.Add(item = wx.StaticText(parent = self.valuespanel, id = wx.ID_ANY,
-                                              label = _("Go to:")), proportion = 0,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border = 5)
-        gotosizer.Add(item = self.goto, proportion = 1,
-                      flag = wx.EXPAND)
-        valuesizer.Add(item = gotosizer, proportion = 0,
-                       flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        self.hsizer.Add(item = columnsizer, proportion = 1,
-                        flag = wx.EXPAND)
-        self.hsizer.Add(item = self.valuespanel, proportion = 1,
-                        flag = wx.EXPAND)
-
-        self.close_onapply = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                         label = _("Close dialog on apply"))
+        self.goto = wx.TextCtrl(
+            parent=self.valuespanel,
+            id=wx.ID_ANY,
+            style=wx.TE_PROCESS_ENTER)
+        gotosizer.Add(item=wx.StaticText(parent=self.valuespanel, id=wx.ID_ANY,
+                                         label=_("Go to:")), proportion=0,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT, border=5)
+        gotosizer.Add(item=self.goto, proportion=1,
+                      flag=wx.EXPAND)
+        valuesizer.Add(item=gotosizer, proportion=0,
+                       flag=wx.ALL | wx.EXPAND, border=5)
+
+        self.hsizer.Add(item=columnsizer, proportion=1,
+                        flag=wx.EXPAND)
+        self.hsizer.Add(item=self.valuespanel, proportion=1,
+                        flag=wx.EXPAND)
+
+        self.close_onapply = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Close dialog on apply"))
         self.close_onapply.SetValue(True)
- 
-        self.pagesizer.Add(item = databaseboxsizer,
-                           flag = wx.ALL | wx.EXPAND, border = 5)
-        self.pagesizer.Add(item = modesizer, proportion = 0,
-                           flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        self.pagesizer.Add(item = self.hsizer, proportion = 1,
-                           flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+
+        self.pagesizer.Add(item=databaseboxsizer,
+                           flag=wx.ALL | wx.EXPAND, border=5)
+        self.pagesizer.Add(
+            item=modesizer,
+            proportion=0,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
+        self.pagesizer.Add(
+            item=self.hsizer,
+            proportion=1,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
         # self.pagesizer.Add(self.btn_uniqe,0,wx.ALIGN_LEFT|wx.TOP,border=5)
         # self.pagesizer.Add(self.btn_uniqesample,0,wx.ALIGN_LEFT|wx.TOP,border=5)
-        self.pagesizer.Add(item = self.btn_logicpanel, proportion = 0,
-                           flag = wx.ALIGN_CENTER_HORIZONTAL)
-        self.pagesizer.Add(item = sqlboxsizer, proportion = 0,
-                           flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 5)
-        self.pagesizer.Add(item = self.buttonsizer, proportion = 0,
-                           flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        self.pagesizer.Add(item = self.close_onapply, proportion = 0,
-                           flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        
+        self.pagesizer.Add(item=self.btn_logicpanel, proportion=0,
+                           flag=wx.ALIGN_CENTER_HORIZONTAL)
+        self.pagesizer.Add(item=sqlboxsizer, proportion=0,
+                           flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
+        self.pagesizer.Add(item=self.buttonsizer, proportion=0,
+                           flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+        self.pagesizer.Add(
+            item=self.close_onapply,
+            proportion=0,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
+
         #
         # bindings
         #
         self.mode.Bind(wx.EVT_RADIOBOX, self.OnMode)
-        #self.text_sql.Bind(wx.EVT_ACTIVATE, self.OnTextSqlActivate)TODO
+        # self.text_sql.Bind(wx.EVT_ACTIVATE, self.OnTextSqlActivate)TODO
 
-        self.btn_unique.Bind(wx.EVT_BUTTON,       self.OnUniqueValues)
+        self.btn_unique.Bind(wx.EVT_BUTTON, self.OnUniqueValues)
         self.btn_uniquesample.Bind(wx.EVT_BUTTON, self.OnSampleValues)
-        
+
         for key, value in self.btn_logic.iteritems():
             self.FindWindowById(value[1]).Bind(wx.EVT_BUTTON, self.OnAddMark)
-                     
-        self.btn_close.Bind(wx.EVT_BUTTON,       self.OnClose)
-        self.btn_clear.Bind(wx.EVT_BUTTON,       self.OnClear)
-        self.btn_apply.Bind(wx.EVT_BUTTON,       self.OnApply)
 
-        self.list_columns.Bind(wx.EVT_LISTBOX,   self.OnAddColumn)
-        self.list_values.Bind(wx.EVT_LISTBOX,    self.OnAddValue)
-        self.goto.Bind(wx.EVT_TEXT,              self.OnGoTo)
-        self.goto.Bind(wx.EVT_TEXT_ENTER,        self.OnAddValue)
+        self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
+        self.btn_clear.Bind(wx.EVT_BUTTON, self.OnClear)
+        self.btn_apply.Bind(wx.EVT_BUTTON, self.OnApply)
 
-    def OnUniqueValues(self, event, justsample = False):
+        self.list_columns.Bind(wx.EVT_LISTBOX, self.OnAddColumn)
+        self.list_values.Bind(wx.EVT_LISTBOX, self.OnAddValue)
+        self.goto.Bind(wx.EVT_TEXT, self.OnGoTo)
+        self.goto.Bind(wx.EVT_TEXT_ENTER, self.OnAddValue)
+
+    def OnUniqueValues(self, event, justsample=False):
         """Get unique values"""
         vals = []
         try:
@@ -291,29 +352,34 @@ class SQLBuilder(wx.Frame):
         except:
             self.list_values.Clear()
             return
-        
+
         self.list_values.Clear()
-        
-        data = grass.db_select(sql = "SELECT %s FROM %s" % (column, self.tablename),
-                               database = self.database,
-                               driver = self.driver, sep = '{_sep_}')
+
+        data = grass.db_select(
+            sql="SELECT %s FROM %s" %
+            (column,
+             self.tablename),
+            database=self.database,
+            driver=self.driver,
+            sep='{_sep_}')
         if not data:
             return
-        
-        desc = self.dbInfo.GetTableDesc(self.dbInfo.GetTable(self.layer))[column]
-        
+
+        desc = self.dbInfo.GetTableDesc(
+            self.dbInfo.GetTable(self.layer))[column]
+
         i = 0
         for item in sorted(set(map(lambda x: desc['ctype'](x[0]), data))):
             if justsample and i > 255:
                 break
-            
+
             if desc['type'] != 'character':
                 item = str(item)
             else:
                 item = GetUnicodeValue(item)
             self.list_values.Append(item)
             i += 1
-        
+
     def OnSampleValues(self, event):
         """Get sample values"""
         self.OnUniqueValues(None, True)
@@ -323,12 +389,12 @@ class SQLBuilder(wx.Frame):
         idx = self.list_columns.GetSelections()
         for i in idx:
             column = self.list_columns.GetString(i)
-            self._add(element = 'column', value = column)
-        
+            self._add(element='column', value=column)
+
         if not self.btn_uniquesample.IsEnabled():
             self.btn_uniquesample.Enable(True)
             self.btn_unique.Enable(True)
-        
+
     def OnAddValue(self, event):
         """Add value"""
         selection = self.list_values.GetSelections()
@@ -340,19 +406,21 @@ class SQLBuilder(wx.Frame):
         value = self.list_values.GetString(idx)
         idx = self.list_columns.GetSelections()[0]
         column = self.list_columns.GetString(idx)
-        
-        ctype = self.dbInfo.GetTableDesc(self.dbInfo.GetTable(self.layer))[column]['type']
-        
+
+        ctype = self.dbInfo.GetTableDesc(
+            self.dbInfo.GetTable(
+                self.layer))[column]['type']
+
         if ctype == 'character':
             value = "'%s'" % value
-        
-        self._add(element = 'value', value = value)
+
+        self._add(element='value', value=value)
 
     def OnGoTo(self, event):
         # clear all previous selections
         for item in self.list_values.GetSelections():
             self.list_values.Deselect(item)
-        
+
         gotoText = event.GetString()
         lenLimit = len(gotoText)
         found = idx = 0
@@ -364,7 +432,7 @@ class SQLBuilder(wx.Frame):
 
         if found > 0:
             self.list_values.SetSelection(found)
-            
+
     def OnAddMark(self, event):
         """Add mark"""
         mark = None
@@ -372,41 +440,42 @@ class SQLBuilder(wx.Frame):
            self.btn_logicpanel.IsShown():
             btns = self.btn_logic
         elif self.btn_arithmeticpanel and \
-             self.btn_arithmeticpanel.IsShown():
+                self.btn_arithmeticpanel.IsShown():
             btns = self.btn_arithmetic
-             
+
         for key, value in btns.iteritems():
             if event.GetId() == value[1]:
                 mark = value[0]
                 break
-        
-        self._add(element = 'mark', value = mark)
+
+        self._add(element='mark', value=mark)
 
     def GetSQLStatement(self):
         """Return SQL statement"""
-        return self.text_sql.GetValue().strip().replace("\n"," ")
-        
+        return self.text_sql.GetValue().strip().replace("\n", " ")
+
     def OnClose(self, event):
         self.Destroy()
         event.Skip()
- 
+
+
 class SQLBuilderSelect(SQLBuilder):
     """Class for building SELECT SQL statement"""
-    def __init__(self, parent, vectmap, id = wx.ID_ANY,
-                 layer = 1, evtHandler = None):
+
+    def __init__(self, parent, vectmap, id=wx.ID_ANY,
+                 layer=1, evtHandler=None):
 
         self.evtHandler = evtHandler
 
         # set dialog title
         title = _("GRASS SQL Builder (%(type)s) - <%(map)s>") % \
-                 { 'type' : "SELECT", 'map' : vectmap }
+            {'type': "SELECT", 'map': vectmap}
 
-        modeChoices = [_("Column to show (SELECT clause)"), 
+        modeChoices = [_("Column to show (SELECT clause)"),
                        _("Constraint for query (WHERE clause)")]
 
-        SQLBuilder.__init__(self, parent, title, vectmap, id = wx.ID_ANY,
-                            modeChoices = modeChoices, layer = layer)
-
+        SQLBuilder.__init__(self, parent, title, vectmap, id=wx.ID_ANY,
+                            modeChoices=modeChoices, layer=layer)
 
     def _doLayout(self, modeChoices):
         """Do dialog layout"""
@@ -414,16 +483,18 @@ class SQLBuilderSelect(SQLBuilder):
         SQLBuilder._doLayout(self, modeChoices)
 
         self.text_sql.SetValue("SELECT * FROM %s" % self.tablename)
-        self.text_sql.SetToolTipString(_("Example: %s") % "SELECT * FROM roadsmajor WHERE MULTILANE = 'no' OR OBJECTID < 10")
+        self.text_sql.SetToolTipString(
+            _("Example: %s") %
+            "SELECT * FROM roadsmajor WHERE MULTILANE = 'no' OR OBJECTID < 10")
 
-        self.btn_verify = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                    label = _("Verify"))
+        self.btn_verify = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                    label=_("Verify"))
         self.btn_verify.SetToolTipString(_("Verify SQL statement"))
 
-        self.buttonsizer.Insert(item = self.btn_verify, before = 1)
-        
+        self.buttonsizer.Insert(item=self.btn_verify, before=1)
+
         self.text_sql.Bind(wx.EVT_TEXT, self.OnText)
-        self.btn_verify.Bind(wx.EVT_BUTTON,      self.OnVerify)
+        self.btn_verify.Bind(wx.EVT_BUTTON, self.OnVerify)
 
         self.text_sql.SetInsertionPoint(self.text_sql.GetLastPosition())
         self.statusbar.SetStatusText(_("SQL statement not verified"), 0)
@@ -431,11 +502,11 @@ class SQLBuilderSelect(SQLBuilder):
     def OnApply(self, event):
         """Apply button pressed"""
         if self.evtHandler:
-            self.evtHandler(event = 'apply')
-        
+            self.evtHandler(event='apply')
+
         if self.close_onapply.IsChecked():
             self.Destroy()
-            
+
         event.Skip()
 
     def OnClear(self, event):
@@ -448,8 +519,8 @@ class SQLBuilderSelect(SQLBuilder):
             self.valuespanel.Hide()
             self.btn_logicpanel.Hide()
         elif self.mode.GetSelection() == 1:
-             self.valuespanel.Show()
-             self.btn_logicpanel.Show()
+            self.valuespanel.Show()
+            self.btn_logicpanel.Show()
         self.pagesizer.Layout()
 
     def OnText(self, event):
@@ -458,21 +529,21 @@ class SQLBuilderSelect(SQLBuilder):
             self.btn_verify.Enable(True)
         else:
             self.btn_verify.Enable(False)
-            
+
     def OnVerify(self, event):
         """Verify button pressed"""
         ret, msg = RunCommand('db.select',
-                              getErrorMsg = True,
-                              table = self.tablename,
-                              sql = self.text_sql.GetValue(),
-                              flags = 't',
-                              driver = self.driver,
-                              database = self.database)
-        
+                              getErrorMsg=True,
+                              table=self.tablename,
+                              sql=self.text_sql.GetValue(),
+                              flags='t',
+                              driver=self.driver,
+                              database=self.database)
+
         if ret != 0 and msg:
             self.statusbar.SetStatusText(_("SQL statement is not valid"), 0)
-            GError(parent = self,
-                   message = _("SQL statement is not valid.\n\n%s") % msg)
+            GError(parent=self,
+                   message=_("SQL statement is not valid.\n\n%s") % msg)
         else:
             self.statusbar.SetStatusText(_("SQL statement is valid"), 0)
 
@@ -485,7 +556,7 @@ class SQLBuilderSelect(SQLBuilder):
         curspos = self.text_sql.GetInsertionPoint()
         newsqlstr = ''
         if element == 'column':
-            if self.mode.GetSelection() == 0: # -> column
+            if self.mode.GetSelection() == 0:  # -> column
                 idx1 = len('select')
                 idx2 = sqlstr.lower().find('from')
                 colstr = sqlstr[idx1:idx2].strip()
@@ -494,28 +565,28 @@ class SQLBuilderSelect(SQLBuilder):
                 else:
                     cols = colstr.split(',')
                 if value in cols:
-                        cols.remove(value)
+                    cols.remove(value)
                 else:
                     cols.append(value)
-                
+
                 if len(cols) < 1:
-                    cols = ['*',]  
+                    cols = ['*', ]
                 newsqlstr = 'SELECT ' + ','.join(cols) + ' '
                 curspos = len(newsqlstr)
                 newsqlstr += sqlstr[idx2:]
-            else: # -> where
+            else:  # -> where
                 newsqlstr = ''
                 if sqlstr.lower().find('where') < 0:
-                    newsqlstr += ' WHERE'       
+                    newsqlstr += ' WHERE'
                 newsqlstr += ' ' + value
                 curspos = self.text_sql.GetLastPosition() + len(newsqlstr)
                 newsqlstr = sqlstr + newsqlstr
 
-        elif element in  ['value', 'mark']:
+        elif element in ['value', 'mark']:
             addstr = ' ' + value + ' '
             newsqlstr = sqlstr[:curspos] + addstr + sqlstr[curspos:]
             curspos += len(addstr)
-        
+
         if newsqlstr:
             self.text_sql.SetValue(newsqlstr)
 
@@ -529,30 +600,32 @@ class SQLBuilderSelect(SQLBuilder):
     def OnClose(self, event):
         """Close button pressed"""
         if self.evtHandler:
-            self.evtHandler(event = 'close')
-    
+            self.evtHandler(event='close')
+
         SQLBuilder.OnClose(self, event)
 
+
 class SQLBuilderUpdate(SQLBuilder):
     """Class for building UPDATE SQL statement"""
-    def __init__(self, parent, vectmap, id = wx.ID_ANY,
-                 layer = 1, column = None):
 
-        self.column = column 
+    def __init__(self, parent, vectmap, id=wx.ID_ANY,
+                 layer=1, column=None):
+
+        self.column = column
         # set dialog title
         title = _("GRASS SQL Builder (%(type)s) - <%(map)s>") % \
-                 { 'type' : "UPDATE", 'map' : vectmap }
+            {'type': "UPDATE", 'map': vectmap}
 
-        modeChoices = [_("Column to set (SET clause)"), 
-                       _("Constraint for query (WHERE clause)"), 
+        modeChoices = [_("Column to set (SET clause)"),
+                       _("Constraint for query (WHERE clause)"),
                        _("Calculate column value to set")]
 
-        SQLBuilder.__init__(self, parent, title, vectmap, id = wx.ID_ANY,
-                            modeChoices = modeChoices, layer = layer)
+        SQLBuilder.__init__(self, parent, title, vectmap, id=wx.ID_ANY,
+                            modeChoices=modeChoices, layer=layer)
 
         # signals
         self.sqlApplied = Signal("SQLBuilder.sqlApplied")
-        if parent: # TODO: replace by giface
+        if parent:  # TODO: replace by giface
             self.sqlApplied.connect(parent.Update)
 
     def _doLayout(self, modeChoices):
@@ -562,61 +635,78 @@ class SQLBuilderUpdate(SQLBuilder):
 
         self.initText = "UPDATE %s SET" % self.tablename
         if self.column:
-            self.initText += " %s = " % self.column 
+            self.initText += " %s = " % self.column
 
         self.text_sql.SetValue(self.initText)
 
-        self.btn_arithmetic = { 'eq'        : ['=', ],
-                                'brac'      : ['()',],
-                                'plus'      : ['+', ],
-                                'minus'     : ['-', ],
-                                'divide'    : ['/', ],
-                                'multiply'  : ['*', ]} 
+        self.btn_arithmetic = {'eq': ['=', ],
+                               'brac': ['()', ],
+                               'plus': ['+', ],
+                               'minus': ['-', ],
+                               'divide': ['/', ],
+                               'multiply': ['*', ]}
 
-        self.btn_arithmeticpanel = wx.Panel(parent = self.panel, id = wx.ID_ANY)
+        self.btn_arithmeticpanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
 
         for key, value in self.btn_arithmetic.iteritems():
-            btn = wx.Button(parent = self.btn_arithmeticpanel, id = wx.ID_ANY,
-                            label = value[0])
+            btn = wx.Button(parent=self.btn_arithmeticpanel, id=wx.ID_ANY,
+                            label=value[0])
             self.btn_arithmetic[key].append(btn.GetId())
 
-        btn_arithmeticsizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-
-        btn_arithmeticsizer.Add(item = self.FindWindowById(self.btn_arithmetic['eq'][1]), pos = (0, 0))
-        btn_arithmeticsizer.Add(item = self.FindWindowById(self.btn_arithmetic['brac'][1]), pos = (1, 0))
-
-        btn_arithmeticsizer.Add(item = self.FindWindowById(self.btn_arithmetic['plus'][1]), pos = (0, 1))
-        btn_arithmeticsizer.Add(item = self.FindWindowById(self.btn_arithmetic['minus'][1]), pos = (1, 1))
-
-        btn_arithmeticsizer.Add(item = self.FindWindowById(self.btn_arithmetic['divide'][1]), pos = (0, 2))
-        btn_arithmeticsizer.Add(item = self.FindWindowById(self.btn_arithmetic['multiply'][1]), pos = (1, 2))
+        btn_arithmeticsizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        btn_arithmeticsizer.Add(
+            item=self.FindWindowById(
+                self.btn_arithmetic['eq'][1]), pos=(
+                0, 0))
+        btn_arithmeticsizer.Add(
+            item=self.FindWindowById(
+                self.btn_arithmetic['brac'][1]), pos=(
+                1, 0))
+
+        btn_arithmeticsizer.Add(
+            item=self.FindWindowById(
+                self.btn_arithmetic['plus'][1]), pos=(
+                0, 1))
+        btn_arithmeticsizer.Add(
+            item=self.FindWindowById(
+                self.btn_arithmetic['minus'][1]), pos=(
+                1, 1))
+
+        btn_arithmeticsizer.Add(
+            item=self.FindWindowById(
+                self.btn_arithmetic['divide'][1]), pos=(
+                0, 2))
+        btn_arithmeticsizer.Add(
+            item=self.FindWindowById(
+                self.btn_arithmetic['multiply'][1]), pos=(
+                1, 2))
 
         self.btn_arithmeticpanel.SetSizer(btn_arithmeticsizer)
 
-        self.pagesizer.Insert(item = self.btn_arithmeticpanel, before = 3,
-                              proportion = 0, flag = wx.ALIGN_CENTER_HORIZONTAL)       
+        self.pagesizer.Insert(item=self.btn_arithmeticpanel, before=3,
+                              proportion=0, flag=wx.ALIGN_CENTER_HORIZONTAL)
 
-
-        self.funcpanel = wx.Panel(parent = self.panel, id = wx.ID_ANY)
+        self.funcpanel = wx.Panel(parent=self.panel, id=wx.ID_ANY)
         self._initSqlFunctions()
-        funcsbox = wx.StaticBox(parent = self.funcpanel, id = wx.ID_ANY,
-                                label = " %s " % _("Functions"))
+        funcsbox = wx.StaticBox(parent=self.funcpanel, id=wx.ID_ANY,
+                                label=" %s " % _("Functions"))
         funcsizer = wx.StaticBoxSizer(funcsbox, wx.VERTICAL)
-        self.list_func = wx.ListBox(parent = self.funcpanel, id = wx.ID_ANY,
-                                    choices = self.sqlFuncs['sqlite'].keys(),
-                                    style = wx.LB_SORT)
+        self.list_func = wx.ListBox(parent=self.funcpanel, id=wx.ID_ANY,
+                                    choices=self.sqlFuncs['sqlite'].keys(),
+                                    style=wx.LB_SORT)
 
-        funcsizer.Add(item = self.list_func, proportion = 1,
-                      flag = wx.EXPAND)
+        funcsizer.Add(item=self.list_func, proportion=1,
+                      flag=wx.EXPAND)
 
         self.funcpanel.SetSizer(funcsizer)
 
-        self.hsizer.Insert(item =  self.funcpanel, before = 2,
-                          proportion = 1, flag = wx.EXPAND) 
+        self.hsizer.Insert(item=self.funcpanel, before=2,
+                           proportion=1, flag=wx.EXPAND)
 
-        self.list_func.Bind(wx.EVT_LISTBOX,    self.OnAddFunc)
+        self.list_func.Bind(wx.EVT_LISTBOX, self.OnAddFunc)
         for key, value in self.btn_arithmetic.iteritems():
-            self.FindWindowById(value[1]).Bind(wx.EVT_BUTTON, self.OnAddMark)  
+            self.FindWindowById(value[1]).Bind(wx.EVT_BUTTON, self.OnAddMark)
         self.mode.SetSelection(0)
         self.OnMode(None)
         self.text_sql.SetInsertionPoint(self.text_sql.GetLastPosition())
@@ -625,18 +715,18 @@ class SQLBuilderUpdate(SQLBuilder):
         """Apply button pressed"""
 
         ret, msg = RunCommand('db.execute',
-                             getErrorMsg = True,
-                             parent = self,
-                             stdin = self.text_sql.GetValue(),
-                             input = '-',
-                             driver = self.driver,
-                             database = self.database)
+                              getErrorMsg=True,
+                              parent=self,
+                              stdin=self.text_sql.GetValue(),
+                              input='-',
+                              driver=self.driver,
+                              database=self.database)
 
         if ret != 0 and msg:
             self.statusbar.SetStatusText(_("SQL statement was not applied"), 0)
         else:
             self.statusbar.SetStatusText(_("SQL statement applied"), 0)
-        
+
         self.sqlApplied.emit()
 
     def OnClear(self, event):
@@ -651,31 +741,31 @@ class SQLBuilderUpdate(SQLBuilder):
             self.btn_arithmeticpanel.Hide()
             self.funcpanel.Hide()
         elif self.mode.GetSelection() == 1:
-             self.valuespanel.Show()
-             self.btn_logicpanel.Show()
-             self.btn_arithmeticpanel.Hide()
-             self.funcpanel.Hide()       
+            self.valuespanel.Show()
+            self.btn_logicpanel.Show()
+            self.btn_arithmeticpanel.Hide()
+            self.funcpanel.Hide()
         elif self.mode.GetSelection() == 2:
-             self.valuespanel.Hide()
-             self.btn_logicpanel.Hide()
-             self.btn_arithmeticpanel.Show()
-             self.funcpanel.Show()
+            self.valuespanel.Hide()
+            self.btn_logicpanel.Hide()
+            self.btn_arithmeticpanel.Show()
+            self.funcpanel.Show()
         self.pagesizer.Layout()
 
-
     def OnAddFunc(self, event):
         """Add function to the query"""
 
         if self.driver == 'dbf':
-            GMessage(parent = self,
-                     message = _("Dbf driver does not support usage of SQL functions."))
+            GMessage(
+                parent=self,
+                message=_(
+                    "Dbf driver does not support usage of SQL functions."))
             return
 
         idx = self.list_func.GetSelections()
         for i in idx:
-            func =  self.sqlFuncs['sqlite'][self.list_func.GetString(i)][0]
-            self._add(element = 'func', value = func)
-        
+            func = self.sqlFuncs['sqlite'][self.list_func.GetString(i)][0]
+            self._add(element='func', value=func)
 
     def _add(self, element, value):
         """Add element to the query
@@ -687,41 +777,41 @@ class SQLBuilderUpdate(SQLBuilder):
         newsqlstr = ''
 
         if element in  ['value', 'mark', 'func'] or \
-          (element == 'column' and self.mode.GetSelection() == 2):
+                (element == 'column' and self.mode.GetSelection() == 2):
             addstr = ' ' + value + ' '
             newsqlstr = sqlstr[:curspos] + addstr + sqlstr[curspos:]
             curspos += len(addstr)
         elif element == 'column':
-            if self.mode.GetSelection() == 0: # -> column
+            if self.mode.GetSelection() == 0:  # -> column
                 idx1 = sqlstr.lower().find('set') + len('set')
                 idx2 = sqlstr.lower().find('where')
 
-                if idx2 >= 0: 
+                if idx2 >= 0:
                     colstr = sqlstr[idx1:idx2].strip()
                 else:
                     colstr = sqlstr[idx1:].strip()
- 
-                cols =  [col.split('=')[0].strip() for col in colstr.split(',')]
+
+                cols = [col.split('=')[0].strip() for col in colstr.split(',')]
                 if unicode(value) in cols:
                     self.text_sql.SetInsertionPoint(curspos)
-                    wx.CallAfter(self.text_sql.SetFocus)           
+                    wx.CallAfter(self.text_sql.SetFocus)
                     return
                 if colstr:
                     colstr += ','
                 colstr = ' ' + colstr
                 colstr += ' ' + value + '= '
                 newsqlstr = sqlstr[:idx1] + colstr
-                if idx2 >= 0: 
+                if idx2 >= 0:
                     newsqlstr += sqlstr[idx2:]
                 curspos = idx1 + len(colstr)
 
-            elif  self.mode.GetSelection() == 1: # -> where
+            elif self.mode.GetSelection() == 1:  # -> where
                 newsqlstr = ''
                 if sqlstr.lower().find('where') < 0:
                     newsqlstr += ' WHERE'
                 newsqlstr += ' ' + value
                 curspos = self.text_sql.GetLastPosition() + len(newsqlstr)
-                newsqlstr = sqlstr + newsqlstr              
+                newsqlstr = sqlstr + newsqlstr
 
         if newsqlstr:
             self.text_sql.SetValue(newsqlstr)
@@ -734,22 +824,22 @@ class SQLBuilderUpdate(SQLBuilder):
         self.sqlFuncs = {}
         # TODO add functions for other drivers
         self.sqlFuncs['sqlite'] = {
-                                 'ABS'   : ['ABS()'],
-                                 'LENGTH'   : ['LENGTH()'],
-                                 'LOWER'   : ['LOWER()'],
-                                 'LTRIM'   : ['LTRIM(,)'],
-                                 'MAX'   : ['MAX()'],
-                                 'MIN'   : ['MIN()'],
-                                 'RTRIM'   : ['RTRIM(,)'],
-                                 'SUBSTR' : ['SUBSTR (,[,])'],                         
-                                 'TRIM' : ['TRIM (,)']                            
-                                }
+            'ABS': ['ABS()'],
+            'LENGTH': ['LENGTH()'],
+            'LOWER': ['LOWER()'],
+            'LTRIM': ['LTRIM(,)'],
+            'MAX': ['MAX()'],
+            'MIN': ['MIN()'],
+            'RTRIM': ['RTRIM(,)'],
+            'SUBSTR': ['SUBSTR (,[,])'],
+            'TRIM': ['TRIM (,)']
+        }
 
 if __name__ == "__main__":
     if len(sys.argv) not in [3, 4]:
         print >>sys.stderr, __doc__
         sys.exit()
-    
+
     if len(sys.argv) == 3:
         layer = 1
     else:
@@ -764,7 +854,7 @@ if __name__ == "__main__":
         sys.exit()
 
     app = wx.App(0)
-    sqlb = sqlBuilder(parent = None, vectmap = sys.argv[2], layer = layer)
+    sqlb = sqlBuilder(parent=None, vectmap=sys.argv[2], layer=layer)
     sqlb.Show()
-      
+
     app.MainLoop()
diff --git a/gui/wxpython/dbmgr/vinfo.py b/gui/wxpython/dbmgr/vinfo.py
index 370e7cd..1463706 100644
--- a/gui/wxpython/dbmgr/vinfo.py
+++ b/gui/wxpython/dbmgr/vinfo.py
@@ -20,11 +20,12 @@ import types
 import wx
 
 from gui_core.gselect import VectorDBInfo as VectorDBInfoBase
-from core.gcmd        import RunCommand, GError
-from core.settings    import UserSettings
+from core.gcmd import RunCommand, GError
+from core.settings import UserSettings
 from core.utils import _
 import grass.script as grass
 
+
 def GetUnicodeValue(value):
     """Get unicode value
 
@@ -32,57 +33,69 @@ def GetUnicodeValue(value):
 
     :return: unicode value
     """
-    if type(value) == types.UnicodeType:
+    if isinstance(value, types.UnicodeType):
         return value
-    
-    enc = UserSettings.Get(group = 'atm', key = 'encoding', subkey = 'value')
+
+    enc = UserSettings.Get(group='atm', key='encoding', subkey='value')
     if not enc and 'GRASS_DB_ENCODING' in os.environ:
         enc = os.environ['GRASS_DB_ENCODING']
     else:
-        enc = 'utf-8' # assuming UTF-8
-    
-    return unicode(str(value), enc, errors = 'replace')
+        enc = 'utf-8'  # assuming UTF-8
+
+    return unicode(str(value), enc, errors='replace')
+
 
 def CreateDbInfoDesc(panel, mapDBInfo, layer):
     """Create database connection information content"""
-    infoFlexSizer = wx.FlexGridSizer (cols = 2, hgap = 1, vgap = 1)
+    infoFlexSizer = wx.FlexGridSizer(cols=2, hgap=1, vgap=1)
     infoFlexSizer.AddGrowableCol(1)
-    
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = "Driver:"))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = mapDBInfo.layers[layer]['driver']))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = "Database:"))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = mapDBInfo.layers[layer]['database']))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = "Table:"))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = mapDBInfo.layers[layer]['table']))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = "Key:"))
-    infoFlexSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = mapDBInfo.layers[layer]['key']))
-    
+
+    infoFlexSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label="Driver:"))
+    infoFlexSizer.Add(
+        item=wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=mapDBInfo.layers[layer]['driver']))
+    infoFlexSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label="Database:"))
+    infoFlexSizer.Add(
+        item=wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=mapDBInfo.layers[layer]['database']))
+    infoFlexSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label="Table:"))
+    infoFlexSizer.Add(
+        item=wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=mapDBInfo.layers[layer]['table']))
+    infoFlexSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label="Key:"))
+    infoFlexSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=mapDBInfo.layers[layer]['key']))
+
     return infoFlexSizer
-        
+
+
 class VectorDBInfo(VectorDBInfoBase):
     """Class providing information about attribute tables
     linked to the vector map"""
+
     def __init__(self, map):
         VectorDBInfoBase.__init__(self, map)
-        
+
     def GetColumns(self, table):
         """Return list of columns names (based on their index)"""
         try:
             names = [''] * len(self.tables[table].keys())
         except KeyError:
             return []
-        
+
         for name, desc in self.tables[table].iteritems():
             names[desc['index']] = name
-        
+
         return names
 
     def SelectByPoint(self, queryCoords, qdist):
@@ -93,17 +106,21 @@ class VectorDBInfo(VectorDBInfoBase):
         nselected = 0
 
         try:
-            data = grass.vector_what(map=self.map,
-                                     coord=(float(queryCoords[0]), float(queryCoords[1])),
-                                     distance=float(qdist))
+            data = grass.vector_what(
+                map=self.map, coord=(
+                    float(
+                        queryCoords[0]), float(
+                        queryCoords[1])), distance=float(qdist))
         except grass.ScriptError:
-            GError(parent=None,
-                   message=_("Failed to query vector map <{map}>. "
-                             "Check database settings and topology.").format(map=self.map))
+            GError(
+                parent=None, message=_(
+                    "Failed to query vector map <{map}>. "
+                    "Check database settings and topology.").format(
+                    map=self.map))
 
         if len(data) < 1 or all(('Table' not in record) for record in data):
             return None
-        
+
         # process attributes
         ret = dict()
         for key in ['Category', 'Layer', 'Table', 'Id']:
@@ -119,11 +136,11 @@ class VectorDBInfo(VectorDBInfoBase):
                     value = None
                 else:
                     if self.tables[table][key]['ctype'] != types.StringType:
-                        value = self.tables[table][key]['ctype'] (value)
+                        value = self.tables[table][key]['ctype'](value)
                     else:
                         value = GetUnicodeValue(value)
                 self.tables[table][key]['values'].append(value)
-            
+
             for key, value in record.iteritems():
                 if key == 'Attributes':
                     continue
@@ -133,8 +150,8 @@ class VectorDBInfo(VectorDBInfoBase):
                 ret['Id'].append(None)
 
         return ret
-    
-    def SelectFromTable(self, layer, cols = '*', where = None):
+
+    def SelectFromTable(self, layer, cols='*', where=None):
         """Select records from the table
 
         Return number of selected records, -1 on error
@@ -144,29 +161,29 @@ class VectorDBInfo(VectorDBInfoBase):
 
         nselected = 0
 
-        table = self.layers[layer]["table"] # get table desc
+        table = self.layers[layer]["table"]  # get table desc
         # select values (only one record)
         if where is None or where is '':
             sql = "SELECT %s FROM %s" % (cols, table)
         else:
             sql = "SELECT %s FROM %s WHERE %s" % (cols, table, where)
-        
+
         ret = RunCommand('db.select',
-                         read = True,
-                         quiet = True,
-                         flags = 'v',
-                         sql= sql,
-                         database = self.layers[layer]["database"],
-                         driver = self.layers[layer]["driver"])
-        
+                         read=True,
+                         quiet=True,
+                         flags='v',
+                         sql=sql,
+                         database=self.layers[layer]["database"],
+                         driver=self.layers[layer]["driver"])
+
         # self.tables[table][key][1] = str(cat)
         if ret:
             for line in ret.splitlines():
                 name, value = line.split('|')
                 # casting ...
                 if value:
-                    if self.tables[table][name]['ctype'] != type(''):
-                        value = self.tables[table][name]['ctype'] (value)
+                    if not isinstance('', self.tables[table][name]['ctype']):
+                        value = self.tables[table][name]['ctype'](value)
                     else:
                         value = GetUnicodeValue(value)
                 else:
diff --git a/gui/wxpython/docs/wxGUI.components.html b/gui/wxpython/docs/wxGUI.components.html
index 1b8a0a4..b5509ac 100644
--- a/gui/wxpython/docs/wxGUI.components.html
+++ b/gui/wxpython/docs/wxGUI.components.html
@@ -4,6 +4,7 @@
 List of available <em><a href="wxGUI.html">wxGUI</a></em> components:
 
 <ul>
+  <li><a href="wxGUI.modules.html">Module dialogs</a></li>
   <li><a href="wxGUI.nviz.html">3D Viewer</a> (nviz)</li>
   <li><a href="wxGUI.animation.html">Animation tool</a>,
     available as a command line tool <em><a href="g.gui.animation.html">g.gui.animation</a></em></li>
@@ -11,6 +12,8 @@ List of available <em><a href="wxGUI.html">wxGUI</a></em> components:
     available also as a command line tool <em><a href="g.gui.dbmgr.html">g.gui.dbmgr</a></em></li>
   <li><a href="wxGUI.psmap.html">Cartographic Composer</a>,
     available also as a command line tool <em><a href="g.gui.psmap.html">g.gui.psmap</a></em></li>
+  <li><a href="wxGUI.datacatalog.html">Data Catalog</a>,
+    available also as a command line tool <em><a href="g.gui.datacatalog.html">g.gui.datacatalog</a></em></li>
   <li><a href="wxGUI.gmodeler.html">Graphical Modeler</a>,
     available also as a command line tool <em><a href="g.gui.gmodeler.html">g.gui.gmodeler</a></em></li>
   <li><a href="wxGUI.gcp.html">Ground Control Points Manager</a>,
@@ -23,10 +26,12 @@ List of available <em><a href="wxGUI.html">wxGUI</a></em> components:
   <li>Configuration tool for r.li modules, <em><a href="g.gui.rlisetup.html">g.gui.rlisetup</a></em></li>
   <li><a href="wxGUI.timeline.html">Timeline Tool</a>,
      available also as a command line tool <em><a href="g.gui.timeline.html">g.gui.timeline</a></em></li>
+  <li><a href="wxGUI.tplot.html">Temporal Plot Tool</a>,
+     available also as a command line tool <em><a href="g.gui.tplot.html">g.gui.tplot</a></em></li>
   <li><a href="wxGUI.vdigit.html">Vector Digitizer</a>,
      available also as a command line tool <em><a href="g.gui.vdigit.html">g.gui.vdigit</a></em></li>
   <li><a href="wxGUI.vnet.html">Vector Network Analysis Tool</a></li>
 </ul>
 
 <p>
-<i>$Date: 2014-04-19 19:50:06 +0200 (Sat, 19 Apr 2014) $</i>
+<i>$Date: 2016-03-15 23:01:07 +0100 (Tue, 15 Mar 2016) $</i>
diff --git a/gui/wxpython/docs/wxGUI.html b/gui/wxpython/docs/wxGUI.html
index dea5b3f..f86c0ab 100644
--- a/gui/wxpython/docs/wxGUI.html
+++ b/gui/wxpython/docs/wxGUI.html
@@ -7,7 +7,7 @@ in 2D and 3D, calling GRASS GIS modules, and interacting with data.
 
 
 <h3>Overview</h3>
-The GUI is composed of <em>two</em> main components:
+The GUI is composed of <em>three</em> main components:
 
 <ul>
   <li>The <b>Layer Manager</b> includes map layer management, integrated
@@ -18,6 +18,7 @@ The GUI is composed of <em>two</em> main components:
   set of map layers in the layer manager. The user may start multiple map 
   displays during a session. The map layers for each display are grouped
   under different tabs in the Layer Manager.</li>
+  <li><a href="wxGUI.modules.html">Module dialogs</a> enable running GRASS modules.</li>
 </ul>
 
 <h3>Layer Manager</h3>
@@ -349,20 +350,14 @@ the computational region extents.
 
 <dl>
 
-  <dt><img src="icons/show.png" alt="icon"> 
-    <em>Display map</em></dt>
-  <dd>Displays all active layers from layer tree and re-renders for display
-    any layers that have changed since the last time the display was updated, 
-    including layers added or removed.</dd>
-  
   <dt><img src="icons/layer-redraw.png" alt="icon"> 
-    <em>Re-render map</em></dt>
-  <dd>Re-renders all active layers regardless of whether they have changed
-    or not.</dd>
+    <em>Re-render display</em></dt>
+  <dd>Re-renders all active map layers regardless of whether they have changed
+    or not, see <em><a href="d.redraw.html">d.redraw</a></em>.</dd>
   
   <dt><img src="icons/erase.png" alt="icon"> 
     <em>Erase display</em></dt>
-  <dd>Erases the currently selected map display to a white background.
+  <dd>Erases the currently selected map display to a white background,
     see <em><a href="d.erase.html">d.erase</a></em>.</dd>
   
   <dt><img src="icons/pointer.png" alt="icon"> 
@@ -575,7 +570,7 @@ the computational region extents.
 
 <dl>
   <dt>Ctrl+Tab</dt>
-  <dd>Switch 'Map layers' and 'Command output' tab</dd>
+  <dd>Switch 'Layers' and 'Console' tab</dd>
   <dt>Ctrl+Q</dt>
   <dd>Quit</dd>
 </dl>
@@ -590,7 +585,7 @@ the computational region extents.
   <dd>Close workspace</dd>
 </dl>
 
-<b>Map Layers</b>
+<b>Layers</b>
 <dl>
   <dt>Ctrl+Shift+L</dt>
   <dd>Add multiple raster or vector map layers to current map display</dd>
@@ -602,7 +597,7 @@ the computational region extents.
   <dd>Close current map display</dd>
 </dl>
 
-<b>Command line prompt</b>
+<b>Console</b>
 <dl>
   <dt>Tab</dt>
   <dd>Show command tooltips</dd>
@@ -679,7 +674,7 @@ The user can also start GRASS from the shell command line with the wxGUI
 specifying the <tt>-gui</tt> (or <tt>-wxpython</tt>) switch:
 
 <div class="code"><pre>
-grass71 -gui
+grass72 -gui
 </pre></div>
 
 
@@ -694,6 +689,7 @@ using <a href="http://www.wxpython.org">wxPython</a> library.
 
 <em>
   <a href="wxGUI.components.html">wxGUI components</a><br>
+  <a href="wxGUI.modules.html">wxGUI module dialogs</a>
   <a href="wxGUI.toolboxes.html">wxGUI toolboxes (menu customization)</a>
 </em>
 
@@ -721,4 +717,4 @@ Matej Krejci, OSGeoREL, Czech Technical University in Prague, Czech Republic<br>
 Icons created by <a href="http://robert.szczepanek.pl">Robert Szczepanek</a>, Poland (<a href="https://github.com/Cracert/GIS-icons">Git repository</a>)
 
 <p>
-<i>$Date: 2016-04-26 17:15:05 +0200 (Tue, 26 Apr 2016) $</i>
+<i>$Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $</i>
diff --git a/gui/wxpython/docs/wxGUI.iscatt.html b/gui/wxpython/docs/wxGUI.iscatt.html
index 9408801..0d2456a 100644
--- a/gui/wxpython/docs/wxGUI.iscatt.html
+++ b/gui/wxpython/docs/wxGUI.iscatt.html
@@ -82,4 +82,4 @@ Turek, <a href="http://grasswiki.osgeo.org/wiki/GRASS_GSoC_2013_GRASS_GIS_Intera
 Summer of Code 2013</a> (mentor: Martin Landa)
 
 <p>
-<i>$Date: 2015-10-22 00:41:33 +0200 (Thu, 22 Oct 2015) $</i>
+<i>$Date: 2015-10-22 00:30:01 +0200 (Thu, 22 Oct 2015) $</i>
diff --git a/gui/wxpython/docs/wxGUI.modules.html b/gui/wxpython/docs/wxGUI.modules.html
new file mode 100644
index 0000000..26939bc
--- /dev/null
+++ b/gui/wxpython/docs/wxGUI.modules.html
@@ -0,0 +1,191 @@
+<!-- meta page description: wxGUI Module dialogs -->
+<!-- meta page index: wxGUI -->
+<h2>DESCRIPTION</h2>
+
+GRASS GIS functionality is organized into modules, which are standalone programs
+with defined interface. Their graphical user interface (GUI) is a dialog
+with several tabs which organize module parameters into groups.
+<p>
+Each parameter can have different type of input fields,
+for example text entry or drop-down list.
+Flags are represented as checkboxes. The parameter (or flag) name
+is visible on the right side of each input field
+so that it is simple to understand how the module dialog
+relates to the command representation which is used in the manuals and tutorials.
+The commands can be used to call the module in the command line, Shell scripts
+or, with a slight modification, in a Python script.
+
+
+<center>
+  <img src="wxGUI_modules_parameters.png" border="0" alt="r.neighbors dialog">
+</center>
+
+
+<h3>Tabs</h3>
+Module parameters and flags are organized in tabs. Their names can depend on a module,
+however every module has <i>Command output</i> tab where the progress can be observed,
+and the module output including text results or warnings are printed.
+The last <i>Manual</i> tab contains description of module's parameters
+and examples. The same information can be found in the online manual as well.
+
+<p>
+The style of the tabs can be changed through <i>GUI settings</i> - 
+<i>Appearance</i> - <i>Module dialog style</i>. Note that the style appearance
+depends on the platform and some styles might be more suitable
+for different platforms.
+
+<center>
+  <img src="wxGUI_modules_style_left.png" border="0" alt="dialog style left">
+  <img src="wxGUI_modules_style_top.png" border="0" alt="dialog style top">
+  <br>
+  Figure: Example of style "left" and "top" on Ubuntu.
+</center>
+
+<h3>Flags</h3>
+Module flags are represented as checkboxes with description. There
+are three special flags - <i>overwrite</i>, <i>verbose</i> and <i>quiet</i>.
+Flags <i>verbose</i> and <i>quiet</i> set the level of verbosity of the module
+(how detailed the messages should be).
+<center>
+  <img src="wxGUI_modules_flags.png" border="0" alt="dialog flags">
+  <br>
+</center>
+<p>
+Modules which output a new map or a new file have the flag <i>overwrite</i>
+which must be used when the specified output map or file is already present.
+If the map or file of the specified name already exist and <i>overwrite</i>
+flag is not used, an error message appears:
+<pre>
+r.slope.aspect elevation=elevation slope=slope
+ERROR: option <slope>: <slope> exists. To overwrite, use the --overwrite flag
+</pre>
+
+If using the command instead of GUI, these flags are unlike other flags
+prefixed with double dash:
+<div class="code"><pre>
+r.slope.aspect elevation=elevation slope=slope --overwrite --quiet
+</pre></div>
+
+<h3>Current working directory</h3>
+Certain modules require a file as input or output.
+Either the full path to the file needs to be specified
+or a path relative
+to the current working directory is enough, for example only the name of the file.
+<b>Current working directory</b> is a directory where GRASS would look 
+for or output files to if the full path is not specified.
+By default working directory is user's home folder.
+It can be changed in wxGUI menu
+<i>Settings</i> - <i>GRASS working environment</i> -
+<i>Change working directory</i>,
+or by typing <tt>cd</tt> and pressing Enter in the wxGUI Command console.
+If the working directory is changed to a directory where the input files are,
+then it is enough to specify just the name of the file instead of the full path.
+
+<p>
+This applies to external files such as text files or GeoTiff files.
+This does not apply to raster maps, vector maps
+and other geospatial data stored in GRASS database
+which do not need any path to be specified.
+
+
+<h3>Special widgets</h3>
+For raster, vector or 3D raster input, there is a special
+widget which after clicking on the arrow to the right pops up
+a list of existing maps from different mapsets.
+Selecting a map from the popup list will add it to the entry field.
+In case multiple maps can be specified (denoted by <i>[multiple]</i> label),
+selecting a map from the popup list will append the map names with
+comma in between.
+
+<center>
+  <img src="wxGUI_modules_widget_selection.png" border="0" alt="widget for selecting maps">
+  <br>
+</center>
+
+<p>
+If the input file is supposed to be a text file
+(for example color rules in r.colors),
+it is possible to type the text in the provided box directly instead
+of creating a new file in a text editor and saving it.
+A temporary file is created in this case. By pressing the <i>Save as</i>
+button, the content of the box is then saved into user specified file,
+so that user's workflow can be reproduced later. With <i>Load</i>
+button we can display the content of selected file and edit it 
+directly in the box.
+
+<center>
+  <img src="wxGUI_modules_widget_file1.png" border="0" alt="widget for input files">
+  <img src="wxGUI_modules_widget_file2.png" border="0" alt="widget for input files">
+  <br>
+  <p> Figure: In the first image, user specified a full path to a file.
+      In the second image, user typed color rules conveniently
+      into the box below, however the rules will not be stored permanently.
+</center>
+
+
+<h2>NOTES</h2>
+Dialogs are generated automatically based on module interface defined using <a href="g.parser.html">g.parser</a>.
+Command line interface can be obtained when running the module with a <i>--help</i>
+flag. The options and flags are the same as in the module GUI.
+<pre>
+r.neighbors --help
+
+Description:
+ Makes each cell category value a function of the category
+values assigned to the cells around it, and stores new cell
+values in an output raster map layer.
+Keywords:
+ raster, algebra, statistics, aggregation, neighbor, focal
+statistics, filter
+Usage:
+ r.neighbors [-ac] input=name [selection=name]
+output=name[,name,...]
+   [method=string[,string,...]] [size=value] [title=phrase]
+[weight=name]
+   [gauss=value] [quantile=value[,value,...]] [--overwrite]
+[--help]
+   [--verbose] [--quiet] [--ui]
+Flags:
+  -a   Do not align output with the input
+  -c   Use circular neighborhood
+ --o   Allow output files to overwrite existing files
+ --h   Print usage summary
+ --v   Verbose module output
+ --q   Quiet module output
+ --ui  Force launching GUI dialog
+Parameters:
+      input   Name of input raster map
+  selection   Name of an input raster map to select the
+cells which should be processed
+     output   Name for output raster map
+     method   Neighborhood operation
+              options:
+average,median,mode,minimum,maximum,range,stddev,sum,
+count,variance,diversity,interspersion,quart1,quart3,
+                       perc90,quantile
+              default: average
+       size   Neighborhood size
+              default: 3
+      title   Title for output raster map
+     weight   Text file containing weights
+      gauss   Sigma (in cells) for Gaussian filter
+   quantile   Quantile to calculate for method=quantile
+              options: 0.0-1.0
+</pre>
+
+<h2>SEE ALSO</h2>
+
+<em>
+  <a href="wxGUI.html">wxGUI</a><br>
+  <a href="wxGUI.components.html">wxGUI components</a>
+</em>
+
+<h2>AUTHORS</h2>
+GRASS Development Team<br>
+manual by Anna Petrasova, OSGeoREL, Faculty of Civil Engineering, Czech Technical University in Prague<br>
+Vaclav Petras, OSGeoREL, Faculty of Civil Engineering, Czech Technical University in Prague<br>
+
+
+
+<p>
+<em>$Date: 2016-04-09 18:43:25 +0200 (Sat, 09 Apr 2016) $</em>
diff --git a/gui/wxpython/docs/wxGUI.nviz.html b/gui/wxpython/docs/wxGUI.nviz.html
index 6772534..36c07ed 100644
--- a/gui/wxpython/docs/wxGUI.nviz.html
+++ b/gui/wxpython/docs/wxGUI.nviz.html
@@ -440,4 +440,4 @@ with contributions by Terrance McGhee.
 
 
 <p>
-<i>$Date: 2015-07-11 16:04:13 +0200 (Sat, 11 Jul 2015) $</i>
+<i>$Date: 2015-07-11 16:01:46 +0200 (Sat, 11 Jul 2015) $</i>
diff --git a/gui/wxpython/docs/wxGUI.toolboxes.html b/gui/wxpython/docs/wxGUI.toolboxes.html
index a8a7dc4..defbc62 100644
--- a/gui/wxpython/docs/wxGUI.toolboxes.html
+++ b/gui/wxpython/docs/wxGUI.toolboxes.html
@@ -208,4 +208,4 @@ Vaclav Petras, OSGeoREL, Faculty of Civil Engineering, Czech Technical Universit
 
 
 <p>
-<em>$Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</em>
+<em>$Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</em>
diff --git a/gui/wxpython/docs/wxGUI_map_display.jpg b/gui/wxpython/docs/wxGUI_map_display.jpg
index 4b15b63..796d4f9 100644
Binary files a/gui/wxpython/docs/wxGUI_map_display.jpg and b/gui/wxpython/docs/wxGUI_map_display.jpg differ
diff --git a/gui/wxpython/docs/wxGUI_modules_flags.png b/gui/wxpython/docs/wxGUI_modules_flags.png
new file mode 100644
index 0000000..b2b73d2
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_flags.png differ
diff --git a/gui/wxpython/docs/wxGUI_modules_parameters.png b/gui/wxpython/docs/wxGUI_modules_parameters.png
new file mode 100644
index 0000000..69ad820
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_parameters.png differ
diff --git a/gui/wxpython/docs/wxGUI_modules_style_left.png b/gui/wxpython/docs/wxGUI_modules_style_left.png
new file mode 100644
index 0000000..01e84b0
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_style_left.png differ
diff --git a/gui/wxpython/docs/wxGUI_modules_style_top.png b/gui/wxpython/docs/wxGUI_modules_style_top.png
new file mode 100644
index 0000000..3cf33e5
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_style_top.png differ
diff --git a/gui/wxpython/docs/wxGUI_modules_widget_file1.png b/gui/wxpython/docs/wxGUI_modules_widget_file1.png
new file mode 100644
index 0000000..17eb2e0
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_widget_file1.png differ
diff --git a/gui/wxpython/docs/wxGUI_modules_widget_file2.png b/gui/wxpython/docs/wxGUI_modules_widget_file2.png
new file mode 100644
index 0000000..3c763f6
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_widget_file2.png differ
diff --git a/gui/wxpython/docs/wxGUI_modules_widget_selection.png b/gui/wxpython/docs/wxGUI_modules_widget_selection.png
new file mode 100644
index 0000000..1cbf827
Binary files /dev/null and b/gui/wxpython/docs/wxGUI_modules_widget_selection.png differ
diff --git a/gui/wxpython/docs/wxgui_sphinx/_templates/oholosidebar.html b/gui/wxpython/docs/wxgui_sphinx/_templates/oholosidebar.html
deleted file mode 100644
index 93b382f..0000000
--- a/gui/wxpython/docs/wxgui_sphinx/_templates/oholosidebar.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<p width="210px">
-<iframe src='http://www.ohloh.net/p/3666/widgets/project_factoids_stats.html' scrolling='no' marginHeight=0 marginWidth=0 style='height: 160px; width: 210px; border: none;'></iframe>
-</p>
-<p width="210px">
-<iframe src='http://www.ohloh.net/p/3666/widgets/project_languages.html' scrolling='no' marginHeight=0 marginWidth=0 style='height: 160px; width: 210px; border: none;'></iframe>
-</p>
-<p width="210px">
-<iframe src='http://www.ohloh.net/p/3666/widgets/project_cocomo.html' scrolling='no' marginHeight=0 marginWidth=0 style='height: 160px; width: 210px; border: none;'></iframe>
-</p>
\ No newline at end of file
diff --git a/gui/wxpython/docs/wxgui_sphinx/conf.py b/gui/wxpython/docs/wxgui_sphinx/conf.py
index a07da26..28c572d 100644
--- a/gui/wxpython/docs/wxgui_sphinx/conf.py
+++ b/gui/wxpython/docs/wxgui_sphinx/conf.py
@@ -12,7 +12,8 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys, os
+import sys
+import os
 from datetime import date
 import string
 from shutil import copy
@@ -22,12 +23,19 @@ from shutil import copy
 # documentation root, use os.path.abspath to make it absolute, like shown here.
 if not os.getenv('GISBASE'):
     sys.exit("GISBASE not defined")
-sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass')))
+sys.path.insert(
+    0,
+    os.path.abspath(
+        os.path.join(
+            os.environ['GISBASE'],
+            'etc',
+            'python',
+            'grass')))
 
 from grass.script import core
 
-footer_tmpl = string.Template(\
-r"""
+footer_tmpl = string.Template(
+    r"""
 {% block footer %}<hr class="header">
 <p><a href="../index.html">Help Index</a> | <a href="../topics.html">Topics Index</a> | <a href="../keywords.html">Keywords Index</a> | <a href="../full_index.html">Full Index</a></p>
 <p>© 2003-${year} <a href="http://grass.osgeo.org">GRASS Development Team</a>, GRASS GIS ${grass_version} Reference Manual</p>
@@ -39,10 +47,13 @@ today = date.today()
 
 copy("_templates/layout.html.template", "_templates/layout.html")
 with open("_templates/layout.html", "a+b") as f:
-    f.write(footer_tmpl.substitute(grass_version=grass_version, year=today.year))
+    f.write(
+        footer_tmpl.substitute(
+            grass_version=grass_version,
+            year=today.year))
     f.close()
 
-# -- General configuration -----------------------------------------------------
+# -- General configuration -----------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
 #needs_sphinx = '1.0'
@@ -174,7 +185,7 @@ html_static_path = ['_static']
 #html_use_smartypants = True
 
 # Custom sidebar templates, maps document names to template names.
-html_sidebars = {"**":["localtoc.html",'relations.html','searchbox.html']}
+html_sidebars = {"**": ["localtoc.html", 'relations.html', 'searchbox.html']}
 
 # Additional templates that should be rendered to pages, maps page names to
 # template names.
@@ -213,22 +224,22 @@ htmlhelp_basename = 'wxGUIdoc'
 # -- Options for LaTeX output ---------------------------------------------
 
 latex_elements = {
-# The paper size ('letterpaper' or 'a4paper').
-'papersize': 'a4paper',
+    # The paper size ('letterpaper' or 'a4paper').
+    'papersize': 'a4paper',
 
-# The font size ('10pt', '11pt' or '12pt').
-'pointsize': '10pt',
+    # The font size ('10pt', '11pt' or '12pt').
+    'pointsize': '10pt',
 
-# Additional stuff for the LaTeX preamble.
-#'preamble': '',
+    # Additional stuff for the LaTeX preamble.
+    #'preamble': '',
 }
 
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title,
 #  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-  ('index', 'wxGUI.tex', u'wxGUI Documentation',
-   u'GRASS Development Team', 'manual'),
+    ('index', 'wxGUI.tex', u'wxGUI Documentation',
+     u'GRASS Development Team', 'manual'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
@@ -271,9 +282,9 @@ man_pages = [
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-  ('index', 'wxGUI', u'wxGUI Documentation',
-   u'GRASS Development Team', 'wxGUI', 'One line description of project.',
-   'Miscellaneous'),
+    ('index', 'wxGUI', u'wxGUI Documentation',
+     u'GRASS Development Team', 'wxGUI', 'One line description of project.',
+     'Miscellaneous'),
 ]
 
 # Documents to append as an appendix to all manuals.
diff --git a/gui/wxpython/gcp/__init__.py b/gui/wxpython/gcp/__init__.py
index a939142..a8b5957 100644
--- a/gui/wxpython/gcp/__init__.py
+++ b/gui/wxpython/gcp/__init__.py
@@ -2,4 +2,4 @@ all = [
     'manager',
     'mapdisplay',
     'toolbars',
-    ]
+]
diff --git a/gui/wxpython/gcp/g.gui.gcp.html b/gui/wxpython/gcp/g.gui.gcp.html
index d8f6f30..d782d03 100644
--- a/gui/wxpython/gcp/g.gui.gcp.html
+++ b/gui/wxpython/gcp/g.gui.gcp.html
@@ -315,4 +315,4 @@ Markus Metz<br><br>
 Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>$Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<i>$Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/gui/wxpython/gcp/g.gui.gcp.py b/gui/wxpython/gcp/g.gui.gcp.py
index 0c26a99..358535c 100755
--- a/gui/wxpython/gcp/g.gui.gcp.py
+++ b/gui/wxpython/gcp/g.gui.gcp.py
@@ -47,6 +47,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.settings import UserSettings
     from core.globalvar import CheckWxVersion
     from core.giface import StandaloneGrassInterface
diff --git a/gui/wxpython/gcp/manager.py b/gui/wxpython/gcp/manager.py
index 0f41c9a..d0d5057 100644
--- a/gui/wxpython/gcp/manager.py
+++ b/gui/wxpython/gcp/manager.py
@@ -35,22 +35,22 @@ from copy import copy
 import wx
 from wx.lib.mixins.listctrl import CheckListCtrlMixin, ColumnSorterMixin, ListCtrlAutoWidthMixin
 import wx.lib.colourselect as csel
-import wx.wizard           as wiz
+import wx.wizard as wiz
 
 import grass.script as grass
 
-from core              import globalvar
-from core              import utils
-from core.render       import Map
+from core import globalvar
+from core import utils
+from core.render import Map
 from core.utils import _
-from gui_core.gselect  import Select, LocationSelect, MapsetSelect
-from gui_core.dialogs  import GroupDialog
-from core.gcmd         import RunCommand, GMessage, GError, GWarning, EncodeString
-from core.settings     import UserSettings
-from gcp.mapdisplay    import MapFrame
+from gui_core.gselect import Select, LocationSelect, MapsetSelect
+from gui_core.dialogs import GroupDialog
+from core.gcmd import RunCommand, GMessage, GError, GWarning, EncodeString
+from core.settings import UserSettings
+from gcp.mapdisplay import MapFrame
 from core.giface import Notification
 
-from location_wizard.wizard   import TitledPage as TitledPage
+from location_wizard.wizard import TitledPage as TitledPage
 
 #
 # global variables
@@ -60,10 +60,11 @@ global tgt_map
 global maptype
 
 src_map = ''
-tgt_map = { 'raster' : '',
-            'vector' : '' }
+tgt_map = {'raster': '',
+           'vector': ''}
 maptype = 'raster'
 
+
 def getSmallUpArrowImage():
     stream = open(os.path.join(globalvar.IMGDIR, 'small_up_arrow.png'), 'rb')
     try:
@@ -72,6 +73,7 @@ def getSmallUpArrowImage():
         stream.close()
     return img
 
+
 def getSmallDnArrowImage():
     stream = open(os.path.join(globalvar.IMGDIR, 'small_down_arrow.png'), 'rb')
     try:
@@ -81,20 +83,21 @@ def getSmallDnArrowImage():
     stream.close()
     return img
 
+
 class GCPWizard(object):
     """
     Start wizard here and finish wizard here
     """
 
     def __init__(self, parent, giface):
-        self.parent = parent # GMFrame
+        self.parent = parent  # GMFrame
         self._giface = giface
 
         #
         # get environmental variables
         #
         self.grassdatabase = grass.gisenv()['GISDBASE']
-        
+
         #
         # read original environment settings
         #
@@ -110,13 +113,13 @@ class GCPWizard(object):
                 self.gisrc_dict[key.strip()] = value.strip()
         finally:
             f.close()
-            
+
         self.currentlocation = self.gisrc_dict['LOCATION_NAME']
         self.currentmapset = self.gisrc_dict['MAPSET']
         # location for xy map to georectify
         self.newlocation = ''
         # mapset for xy map to georectify
-        self.newmapset = '' 
+        self.newmapset = ''
 
         global maptype
         global src_map
@@ -133,7 +136,10 @@ class GCPWizard(object):
         #
         # define wizard pages
         #
-        self.wizard = wiz.Wizard(parent=parent, id=wx.ID_ANY, title=_("Setup for georectification"))
+        self.wizard = wiz.Wizard(
+            parent=parent,
+            id=wx.ID_ANY,
+            title=_("Setup for georectification"))
         self.startpage = LocationPage(self.wizard, self)
         self.grouppage = GroupPage(self.wizard, self)
         self.mappage = DispMapPage(self.wizard, self)
@@ -165,12 +171,12 @@ class GCPWizard(object):
         if self.wizard.RunWizard(self.startpage):
             success = self.OnWizFinished()
             if success == False:
-                GMessage(parent = self.parent,
-                         message = _("Georectifying setup canceled."))
+                GMessage(parent=self.parent,
+                         message=_("Georectifying setup canceled."))
                 self.Cleanup()
         else:
-            GMessage(parent = self.parent,
-                     message = _("Georectifying setup canceled."))
+            GMessage(parent=self.parent,
+                     message=_("Georectifying setup canceled."))
             self.Cleanup()
 
         #
@@ -179,25 +185,31 @@ class GCPWizard(object):
         if success != False:
             # instance of render.Map to be associated with display
             self.SwitchEnv('source')
-            self.SrcMap = Map(gisrc=self.source_gisrc) 
+            self.SrcMap = Map(gisrc=self.source_gisrc)
             self.SwitchEnv('target')
             self.TgtMap = Map(gisrc=self.target_gisrc)
             self.Map = self.SrcMap
-            
+
             #
             # add layer to source map
             #
             if maptype == 'raster':
                 rendertype = 'raster'
                 cmdlist = ['d.rast', 'map=%s' % src_map]
-            else: # -> vector layer
+            else:  # -> vector layer
                 rendertype = 'vector'
                 cmdlist = ['d.vect', 'map=%s' % src_map]
-            
+
             self.SwitchEnv('source')
             name, found = utils.GetLayerNameFromCmd(cmdlist)
-            self.SrcMap.AddLayer(ltype=rendertype, command=cmdlist, active=True,
-                                 name=name, hidden=False, opacity=1.0, render=False)
+            self.SrcMap.AddLayer(
+                ltype=rendertype,
+                command=cmdlist,
+                active=True,
+                name=name,
+                hidden=False,
+                opacity=1.0,
+                render=False)
 
             self.SwitchEnv('target')
             if tgt_map['raster']:
@@ -206,26 +218,38 @@ class GCPWizard(object):
                 #
                 rendertype = 'raster'
                 cmdlist = ['d.rast', 'map=%s' % tgt_map['raster']]
-                
+
                 name, found = utils.GetLayerNameFromCmd(cmdlist)
-                self.TgtMap.AddLayer(ltype=rendertype, command=cmdlist, active=True,
-                                     name=name, hidden=False, opacity=1.0, render=False)
-            
+                self.TgtMap.AddLayer(
+                    ltype=rendertype,
+                    command=cmdlist,
+                    active=True,
+                    name=name,
+                    hidden=False,
+                    opacity=1.0,
+                    render=False)
+
             if tgt_map['vector']:
                 #
                 # add raster layer to target map
                 #
                 rendertype = 'vector'
                 cmdlist = ['d.vect', 'map=%s' % tgt_map['vector']]
-                
+
                 name, found = utils.GetLayerNameFromCmd(cmdlist)
-                self.TgtMap.AddLayer(ltype=rendertype, command=cmdlist, active=True,
-                                     name=name, hidden=False, opacity=1.0, render=False)
-            
+                self.TgtMap.AddLayer(
+                    ltype=rendertype,
+                    command=cmdlist,
+                    active=True,
+                    name=name,
+                    hidden=False,
+                    opacity=1.0,
+                    render=False)
+
             #
             # start GCP Manager
             #
-            self.gcpmgr = GCP(self.parent, giface = self._giface, 
+            self.gcpmgr = GCP(self.parent, giface=self._giface,
                               grwiz=self, size=globalvar.MAP_WINDOW_SIZE,
                               toolbars=["gcpdisp"],
                               Map=self.SrcMap, lmgr=self.parent)
@@ -238,7 +262,7 @@ class GCPWizard(object):
             self.gcpmgr._mgr.Update()
         else:
             self.Cleanup()
-                            
+
     def SetSrcEnv(self, location, mapset):
         """Create environment to use for location and mapset
         that are the source of the file(s) to georectify
@@ -249,21 +273,22 @@ class GCPWizard(object):
         :return: False on error
         :return: True on success
         """
-        
+
         self.newlocation = location
         self.newmapset = mapset
-        
-        # check to see if we are georectifying map in current working location/mapset
+
+        # check to see if we are georectifying map in current working
+        # location/mapset
         if self.newlocation == self.currentlocation and self.newmapset == self.currentmapset:
             return False
-        
+
         self.gisrc_dict['LOCATION_NAME'] = location
         self.gisrc_dict['MAPSET'] = mapset
-        
+
         self.source_gisrc = EncodeString(utils.GetTempfile())
 
         try:
-            f = open(self.source_gisrc, mode='w')        
+            f = open(self.source_gisrc, mode='w')
             for line in self.gisrc_dict.items():
                 f.write(line[0] + ": " + line[1] + "\n")
         finally:
@@ -276,7 +301,8 @@ class GCPWizard(object):
         Switches between original working location/mapset and
         location/mapset that is source of file(s) to georectify
         """
-        # check to see if we are georectifying map in current working location/mapset
+        # check to see if we are georectifying map in current working
+        # location/mapset
         if self.newlocation == self.currentlocation and self.newmapset == self.currentmapset:
             return False
 
@@ -286,16 +312,16 @@ class GCPWizard(object):
             os.environ['GISRC'] = str(self.source_gisrc)
 
         return True
-    
+
     def OnWizFinished(self):
         # self.Cleanup()
 
         return True
-        
+
     def OnGLMFocus(self, event):
         """Layer Manager focus"""
         # self.SwitchEnv('target')
-        
+
         event.Skip()
 
     def Cleanup(self):
@@ -306,50 +332,71 @@ class GCPWizard(object):
         self.SwitchEnv('target')
         self.wizard.Destroy()
 
+
 class LocationPage(TitledPage):
     """
     Set map type (raster or vector) to georectify and
     select location/mapset of map(s) to georectify.
     """
+
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard, _("Select map type and location/mapset"))
+        TitledPage.__init__(self, wizard, _(
+            "Select map type and location/mapset"))
 
         self.parent = parent
         self.grassdatabase = self.parent.grassdatabase
-        
+
         self.xylocation = ''
         self.xymapset = ''
-        
+
         #
         # layout
         #
         # map type
-        self.rb_maptype = wx.RadioBox(parent=self, id=wx.ID_ANY,
-                                      label=' %s ' % _("Map type to georectify"),
-                                      choices=[_('raster'), _('vector')],
-                                      majorDimension=wx.RA_SPECIFY_COLS)
+        self.rb_maptype = wx.RadioBox(
+            parent=self, id=wx.ID_ANY, label=' %s ' %
+            _("Map type to georectify"), choices=[
+                _('raster'), _('vector')], majorDimension=wx.RA_SPECIFY_COLS)
         self.sizer.Add(item=self.rb_maptype,
                        flag=wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, border=5,
                        pos=(1, 1), span=(1, 2))
 
         # location
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Select source location:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(2, 1))
-        self.cb_location = LocationSelect(parent = self, gisdbase = self.grassdatabase)
-        self.sizer.Add(item=self.cb_location,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(2, 2))
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select source location:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                1))
+        self.cb_location = LocationSelect(
+            parent=self, gisdbase=self.grassdatabase)
+        self.sizer.Add(
+            item=self.cb_location,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                2))
 
         # mapset
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Select source mapset:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(3, 1))
-        self.cb_mapset = MapsetSelect(parent = self, gisdbase = self.grassdatabase,
-                                              setItems = False)
-        self.sizer.Add(item=self.cb_mapset,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(3,2))
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select source mapset:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                3,
+                1))
+        self.cb_mapset = MapsetSelect(parent=self, gisdbase=self.grassdatabase,
+                                      setItems=False)
+        self.sizer.Add(item=self.cb_mapset, flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5, pos=(3, 2))
         self.sizer.AddGrowableCol(2)
 
         #
@@ -362,7 +409,7 @@ class LocationPage(TitledPage):
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
         # self.Bind(wx.EVT_CLOSE, self.parent.Cleanup)
 
-    def OnMaptype(self,event):
+    def OnMaptype(self, event):
         """Change map type"""
         global maptype
 
@@ -370,17 +417,17 @@ class LocationPage(TitledPage):
             maptype = 'raster'
         else:
             maptype = 'vector'
-        
+
     def OnLocation(self, event):
         """Sets source location for map(s) to georectify"""
         self.xylocation = event.GetString()
-        
-        #create a list of valid mapsets
+
+        # create a list of valid mapsets
         tmplist = os.listdir(os.path.join(self.grassdatabase, self.xylocation))
         self.mapsetList = []
         for item in tmplist:
             if os.path.isdir(os.path.join(self.grassdatabase, self.xylocation, item)) and \
-                os.path.exists(os.path.join(self.grassdatabase, self.xylocation, item, 'WIND')):
+                    os.path.exists(os.path.join(self.grassdatabase, self.xylocation, item, 'WIND')):
                 if item != 'PERMANENT':
                     self.mapsetList.append(item)
 
@@ -389,7 +436,7 @@ class LocationPage(TitledPage):
         self.mapsetList.insert(0, 'PERMANENT')
         self.cb_mapset.SetItems(self.mapsetList)
         self.cb_mapset.SetStringSelection(self.xymapset)
-        
+
         if not wx.FindWindowById(wx.ID_FORWARD).IsEnabled():
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
 
@@ -398,43 +445,46 @@ class LocationPage(TitledPage):
         if self.xylocation == '':
             GMessage(_('You must select a valid location '
                        'before selecting a mapset'),
-                     parent = self)
+                     parent=self)
             return
 
         self.xymapset = event.GetString()
-        
+
         if not wx.FindWindowById(wx.ID_FORWARD).IsEnabled():
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
 
     def OnPageChanging(self, event=None):
         if event.GetDirection() and \
-               (self.xylocation == '' or self.xymapset == ''):
+                (self.xylocation == '' or self.xymapset == ''):
             GMessage(_('You must select a valid location '
-                            'and mapset in order to continue'),
-                          parent = self)
+                       'and mapset in order to continue'),
+                     parent=self)
             event.Veto()
             return
-        
+
         self.parent.SetSrcEnv(self.xylocation, self.xymapset)
-        
+
     def OnEnterPage(self, event=None):
         if self.xylocation == '' or self.xymapset == '':
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
         else:
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
 
+
 class GroupPage(TitledPage):
     """
     Set group to georectify. Create group if desired.
     """
+
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard, _("Select image/map group to georectify"))
+        TitledPage.__init__(self, wizard, _(
+            "Select image/map group to georectify"))
 
         self.parent = parent
-        
+
         self.grassdatabase = self.parent.grassdatabase
         self.groupList = []
-        
+
         self.xylocation = ''
         self.xymapset = ''
         self.xygroup = ''
@@ -446,42 +496,73 @@ class GroupPage(TitledPage):
         # layout
         #
         # group
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Select group:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(1, 1))
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select group:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                1,
+                1))
         self.cb_group = wx.ComboBox(parent=self, id=wx.ID_ANY,
                                     choices=self.groupList, size=(350, -1),
                                     style=wx.CB_DROPDOWN | wx.CB_READONLY)
-        self.sizer.Add(item=self.cb_group,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(1, 2))
-        
-        # create group               
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Create group if none exists')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(2, 1))
+        self.sizer.Add(item=self.cb_group, flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5, pos=(1, 2))
+
+        # create group
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Create group if none exists')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                1))
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.btn_mkgroup = wx.Button(parent=self, id=wx.ID_ANY, label=_("Create/edit group..."))
-        self.btn_vgroup = wx.Button(parent=self, id=wx.ID_ANY, label=_("Add vector map to group..."))
+        self.btn_mkgroup = wx.Button(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Create/edit group..."))
+        self.btn_vgroup = wx.Button(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Add vector map to group..."))
         btnSizer.Add(item=self.btn_mkgroup,
                      flag=wx.RIGHT, border=5)
 
         btnSizer.Add(item=self.btn_vgroup,
                      flag=wx.LEFT, border=5)
-        
-        self.sizer.Add(item=btnSizer,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(2, 2))
-        
+
+        self.sizer.Add(
+            item=btnSizer,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                2))
+
         # extension
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Extension for output maps:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(3, 1))
-        self.ext_txt = wx.TextCtrl(parent=self, id=wx.ID_ANY, value="", size=(350,-1))
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Extension for output maps:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                3,
+                1))
+        self.ext_txt = wx.TextCtrl(
+            parent=self, id=wx.ID_ANY, value="", size=(
+                350, -1))
         self.ext_txt.SetValue(self.extension)
-        self.sizer.Add(item=self.ext_txt,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(3, 2))
+        self.sizer.Add(item=self.ext_txt, flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5, pos=(3, 2))
 
         self.sizer.AddGrowableCol(2)
         #
@@ -496,12 +577,12 @@ class GroupPage(TitledPage):
         # hide vector group button by default
         self.btn_vgroup.Hide()
 
-    def OnGroup(self, event):        
+    def OnGroup(self, event):
         self.xygroup = event.GetString()
-        
+
     def OnMkGroup(self, event):
         """Create new group in source location/mapset"""
-        dlg = GroupDialog(parent = self, defaultGroup = self.xygroup)
+        dlg = GroupDialog(parent=self, defaultGroup=self.xygroup)
         dlg.DisableSubgroupEdit()
         dlg.ShowModal()
         gr, s = dlg.GetSelectedGroup()
@@ -510,25 +591,25 @@ class GroupPage(TitledPage):
         else:
             gr = ''
         dlg.Destroy()
-        
+
         self.OnEnterPage()
         self.Update()
-        
+
     def OnVGroup(self, event):
         """Add vector maps to group"""
-        dlg = VectGroup(parent = self,
-                        id = wx.ID_ANY,
-                        grassdb = self.grassdatabase,
-                        location = self.xylocation,
-                        mapset = self.xymapset,
-                        group = self.xygroup)
+        dlg = VectGroup(parent=self,
+                        id=wx.ID_ANY,
+                        grassdb=self.grassdatabase,
+                        location=self.xylocation,
+                        mapset=self.xymapset,
+                        group=self.xygroup)
 
         if dlg.ShowModal() != wx.ID_OK:
             return
 
         dlg.MakeVGroup()
         self.OnEnterPage()
-        
+
     def OnExtension(self, event):
         self.extension = self.ext_txt.GetValue()
 
@@ -536,20 +617,20 @@ class GroupPage(TitledPage):
         if event.GetDirection() and self.xygroup == '':
             GMessage(_('You must select a valid image/map '
                        'group in order to continue'),
-                     parent = self)
+                     parent=self)
             event.Veto()
             return
 
         if event.GetDirection() and self.extension == '':
             GMessage(_('You must enter an map name '
                        'extension in order to continue'),
-                     parent = self)
+                     parent=self)
             event.Veto()
             return
 
     def OnEnterPage(self, event=None):
         global maptype
-        
+
         self.groupList = []
 
         self.xylocation = self.parent.gisrc_dict['LOCATION_NAME']
@@ -571,7 +652,7 @@ class GroupPage(TitledPage):
                                               'group',
                                               item)):
                     self.groupList.append(item)
-        
+
         if maptype == 'raster':
             self.btn_vgroup.Hide()
             self.Bind(wx.EVT_BUTTON, self.OnMkGroup, self.btn_mkgroup)
@@ -580,34 +661,37 @@ class GroupPage(TitledPage):
             self.btn_vgroup.Show()
             self.Bind(wx.EVT_BUTTON, self.OnMkGroup, self.btn_mkgroup)
             self.Bind(wx.EVT_BUTTON, self.OnVGroup, self.btn_vgroup)
-        
+
         utils.ListSortLower(self.groupList)
         self.cb_group.SetItems(self.groupList)
-        
+
         if len(self.groupList) > 0:
             if self.xygroup and self.xygroup in self.groupList:
                 self.cb_group.SetStringSelection(self.xygroup)
             else:
                 self.cb_group.SetSelection(0)
                 self.xygroup = self.groupList[0]
-        
+
         if self.xygroup == '' or \
                 self.extension == '':
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
         else:
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
-        
+
         # switch to source
         self.parent.SwitchEnv('source')
-    
+
+
 class DispMapPage(TitledPage):
     """
     Select ungeoreferenced map to display for interactively
     setting ground control points (GCPs).
     """
+
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard,
-                            _("Select maps to display for ground control point (GCP) creation"))
+        TitledPage.__init__(
+            self, wizard,
+            _("Select maps to display for ground control point (GCP) creation"))
 
         self.parent = parent
         global maptype
@@ -615,38 +699,77 @@ class DispMapPage(TitledPage):
         #
         # layout
         #
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Select source map to display:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(1, 1))
-        
-        self.srcselection = Select(self, id=wx.ID_ANY,
-                                   size=globalvar.DIALOG_GSELECT_SIZE, type=maptype, updateOnPopup = False)
-        
-        self.sizer.Add(item=self.srcselection,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(1, 2))
-
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Select target raster map to display:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(2, 1))
-
-        self.tgtrastselection = Select(self, id=wx.ID_ANY,
-                                   size=globalvar.DIALOG_GSELECT_SIZE, type='raster', updateOnPopup = False)
-
-        self.sizer.Add(item=self.tgtrastselection,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(2, 2))
-
-        self.sizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_('Select target vector map to display:')),
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(3, 1))
-
-        self.tgtvectselection = Select(self, id=wx.ID_ANY,
-                                   size=globalvar.DIALOG_GSELECT_SIZE, type='vector', updateOnPopup = False)
-        
-        self.sizer.Add(item=self.tgtvectselection,
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
-                       pos=(3, 2))
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select source map to display:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                1,
+                1))
+
+        self.srcselection = Select(
+            self,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            type=maptype,
+            updateOnPopup=False)
+
+        self.sizer.Add(
+            item=self.srcselection,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                1,
+                2))
+
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select target raster map to display:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                1))
+
+        self.tgtrastselection = Select(
+            self, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
+            type='raster', updateOnPopup=False)
+
+        self.sizer.Add(
+            item=self.tgtrastselection,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                2))
+
+        self.sizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select target vector map to display:')),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                3,
+                1))
+
+        self.tgtvectselection = Select(
+            self, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
+            type='vector', updateOnPopup=False)
+
+        self.sizer.Add(
+            item=self.tgtvectselection,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                3,
+                2))
 
         #
         # bindings
@@ -671,12 +794,13 @@ class DispMapPage(TitledPage):
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
 
         try:
-        # set computational region to match selected map and zoom display to region
+            # set computational region to match selected map and zoom display
+            # to region
             if maptype == 'raster':
                 p = RunCommand('g.region', 'raster=src_map')
             elif maptype == 'vector':
                 p = RunCommand('g.region', 'vector=src_map')
-            
+
             if p.returncode == 0:
                 print 'returncode = ', str(p.returncode)
                 self.parent.Map.region = self.parent.Map.GetRegion()
@@ -689,7 +813,7 @@ class DispMapPage(TitledPage):
 
         tgt_map['raster'] = self.tgtrastselection.GetValue()
 
-    def OnTgtVectSelection(self,event):
+    def OnTgtVectSelection(self, event):
         """Source map to display selected"""
         global tgt_map
 
@@ -702,12 +826,12 @@ class DispMapPage(TitledPage):
         if event.GetDirection() and (src_map == ''):
             GMessage(_('You must select a source map '
                        'in order to continue'),
-                     parent = self)
+                     parent=self)
             event.Veto()
             return
 
         self.parent.SwitchEnv('target')
-        
+
     def OnEnterPage(self, event=None):
         global maptype
         global src_map
@@ -717,18 +841,19 @@ class DispMapPage(TitledPage):
 
         if maptype == 'raster':
             ret = RunCommand('i.group',
-                             parent = self,
-                             read = True,
-                             group = self.parent.grouppage.xygroup,
-                             flags = 'g')            
+                             parent=self,
+                             read=True,
+                             group=self.parent.grouppage.xygroup,
+                             flags='g')
 
             if ret:
                 self.parent.src_maps = ret.splitlines()
             else:
-                GError(parent = self,
-                       message = _('No maps in selected group <%s>.\n'
-                                   'Please edit group or select another group.') %
-                       self.parent.grouppage.xygroup)
+                GError(
+                    parent=self, message=_(
+                        'No maps in selected group <%s>.\n'
+                        'Please edit group or select another group.') %
+                    self.parent.grouppage.xygroup)
                 return
 
         elif maptype == 'vector':
@@ -738,11 +863,11 @@ class DispMapPage(TitledPage):
             # make list of vectors to georectify from VREF
 
             vgrpfile = os.path.join(grassdatabase,
-                                     xylocation,
-                                     xymapset,
-                                     'group',
-                                     self.parent.grouppage.xygroup,
-                                     'VREF')
+                                    xylocation,
+                                    xymapset,
+                                    'group',
+                                    self.parent.grouppage.xygroup,
+                                    'VREF')
 
             f = open(vgrpfile)
             try:
@@ -753,16 +878,17 @@ class DispMapPage(TitledPage):
                     self.parent.src_maps.append(vect)
             finally:
                 f.close()
-                
+
             if len(self.parent.src_maps) < 1:
-                GError(parent = self,
-                       message = _('No maps in selected group <%s>.\n'
-                                   'Please edit group or select another group.') %
-                       self.parent.grouppage.xygroup)
+                GError(
+                    parent=self, message=_(
+                        'No maps in selected group <%s>.\n'
+                        'Please edit group or select another group.') %
+                    self.parent.grouppage.xygroup)
                 return
 
         # filter out all maps not in group
-        self.srcselection.tcp.GetElementList(elements = self.parent.src_maps)
+        self.srcselection.tcp.GetElementList(elements=self.parent.src_maps)
         src_map = self.parent.src_maps[0]
         self.srcselection.SetValue(src_map)
 
@@ -778,26 +904,35 @@ class DispMapPage(TitledPage):
         else:
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
 
+
 class GCP(MapFrame, ColumnSorterMixin):
     """
     Manages ground control points for georectifying. Calculates RMS statistics.
     Calls i.rectify or v.rectify to georectify map.
     """
-    def __init__(self, parent, giface, grwiz = None, id = wx.ID_ANY,
-                 title = _("Manage Ground Control Points"),
-                 size = (700, 300), toolbars = ["gcpdisp"], Map = None, lmgr = None):
 
-        self.grwiz = grwiz # GR Wizard
+    def __init__(self, parent, giface, grwiz=None, id=wx.ID_ANY,
+                 title=_("Manage Ground Control Points"),
+                 size=(700, 300), toolbars=["gcpdisp"], Map=None, lmgr=None):
+
+        self.grwiz = grwiz  # GR Wizard
         self._giface = giface
 
         if tgt_map['raster'] == '' and tgt_map['vector'] == '':
             self.show_target = False
         else:
             self.show_target = True
-        
+
         #wx.Frame.__init__(self, parent, id, title, size = size, name = "GCPFrame")
-        MapFrame.__init__(self, parent = parent, giface = self._giface, title = title, size = size,
-                            Map=Map, toolbars=toolbars, name='GCPMapWindow')
+        MapFrame.__init__(
+            self,
+            parent=parent,
+            giface=self._giface,
+            title=title,
+            size=size,
+            Map=Map,
+            toolbars=toolbars,
+            name='GCPMapWindow')
 
         # init variables
         self.parent = parent
@@ -805,8 +940,10 @@ class GCP(MapFrame, ColumnSorterMixin):
         #
         # register data structures for drawing GCP's
         #
-        self.pointsToDrawTgt = self.TgtMapWindow.RegisterGraphicsToDraw(graphicsType = "point", setStatusFunc = self.SetGCPSatus)
-        self.pointsToDrawSrc = self.SrcMapWindow.RegisterGraphicsToDraw(graphicsType = "point", setStatusFunc = self.SetGCPSatus)
+        self.pointsToDrawTgt = self.TgtMapWindow.RegisterGraphicsToDraw(
+            graphicsType="point", setStatusFunc=self.SetGCPSatus)
+        self.pointsToDrawSrc = self.SrcMapWindow.RegisterGraphicsToDraw(
+            graphicsType="point", setStatusFunc=self.SetGCPSatus)
 
         # connect to the map windows signals
         # used to add or edit GCP
@@ -837,44 +974,44 @@ class GCP(MapFrame, ColumnSorterMixin):
         self.VectGRList = []
 
         self.file = {
-            'points' : os.path.join(self.grassdatabase,
-                                    self.xylocation,
-                                    self.xymapset,
-                                    'group',
-                                    self.xygroup,
-                                    'POINTS'),
-            'points_bak' : os.path.join(self.grassdatabase,
-                                    self.xylocation,
-                                    self.xymapset,
-                                    'group',
-                                    self.xygroup,
-                                    'POINTS_BAK'),
-            'rgrp' : os.path.join(self.grassdatabase,
-                                  self.xylocation,
-                                  self.xymapset,
-                                  'group',
-                                  self.xygroup,
-                                  'REF'),
-            'vgrp' : os.path.join(self.grassdatabase,
-                                  self.xylocation,
-                                  self.xymapset,
-                                  'group',
-                                  self.xygroup,
-                                  'VREF'),
-            'target' : os.path.join(self.grassdatabase,
-                                    self.xylocation,
-                                    self.xymapset,
-                                    'group',
-                                    self.xygroup,
-                                    'TARGET'),
-            }
+            'points': os.path.join(self.grassdatabase,
+                                   self.xylocation,
+                                   self.xymapset,
+                                   'group',
+                                   self.xygroup,
+                                   'POINTS'),
+            'points_bak': os.path.join(self.grassdatabase,
+                                       self.xylocation,
+                                       self.xymapset,
+                                       'group',
+                                       self.xygroup,
+                                       'POINTS_BAK'),
+            'rgrp': os.path.join(self.grassdatabase,
+                                 self.xylocation,
+                                 self.xymapset,
+                                 'group',
+                                 self.xygroup,
+                                 'REF'),
+            'vgrp': os.path.join(self.grassdatabase,
+                                 self.xylocation,
+                                 self.xymapset,
+                                 'group',
+                                 self.xygroup,
+                                 'VREF'),
+            'target': os.path.join(self.grassdatabase,
+                                   self.xylocation,
+                                   self.xymapset,
+                                   'group',
+                                   self.xygroup,
+                                   'TARGET'),
+        }
 
         # make a backup of the current points file
         if os.path.exists(self.file['points']):
             shutil.copy(self.file['points'], self.file['points_bak'])
 
         # polynomial order transformation for georectification
-        self.gr_order = 1 
+        self.gr_order = 1
         # interpolation method for georectification
         self.gr_method = 'nearest'
         # region clipping for georectified map
@@ -887,17 +1024,17 @@ class GCP(MapFrame, ColumnSorterMixin):
         self.bkw_rmserror = 0.0
         # list map coords and ID of map display they came from
         self.mapcoordlist = []
-        self.mapcoordlist.append([ 0,        # GCP number
-                                   0.0,      # source east
-                                   0.0,      # source north
-                                   0.0,      # target east
-                                   0.0,      # target north
-                                   0.0,      # forward error
-                                   0.0 ] )   # backward error
+        self.mapcoordlist.append([0,        # GCP number
+                                  0.0,      # source east
+                                  0.0,      # source north
+                                  0.0,      # target east
+                                  0.0,      # target north
+                                  0.0,      # forward error
+                                  0.0])   # backward error
 
         # init vars to highlight high RMS errors
         self.highest_only = True
-        self.show_unused =  True
+        self.show_unused = True
         self.highest_key = -1
         self.rmsthresh = 0
         self.rmsmean = 0
@@ -911,8 +1048,8 @@ class GCP(MapFrame, ColumnSorterMixin):
         # CheckListCtrlMixin must set an ImageList first
         self.il = self.list.GetImageList(wx.IMAGE_LIST_SMALL)
 
-        SmallUpArrow = wx.BitmapFromImage(getSmallUpArrowImage())            
-        SmallDnArrow = wx.BitmapFromImage(getSmallDnArrowImage())            
+        SmallUpArrow = wx.BitmapFromImage(getSmallUpArrowImage())
+        SmallDnArrow = wx.BitmapFromImage(getSmallDnArrowImage())
         self.sm_dn = self.il.Add(SmallDnArrow)
         self.sm_up = self.il.Add(SmallUpArrow)
 
@@ -925,7 +1062,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         self.mapwin.SetNamedCursor('cross')
 
         self.mapwin = self.TgtMapWindow
-        
+
         # set mouse characteristics
         self.mapwin.mouse['box'] = 'point'
         self.mapwin.mouse["use"] == "pointer"
@@ -949,10 +1086,10 @@ class GCP(MapFrame, ColumnSorterMixin):
         # bindings
         #
         self.Bind(wx.EVT_ACTIVATE, self.OnFocus)
-        self.Bind(wx.EVT_SIZE,     self.OnSize)
-        self.Bind(wx.EVT_IDLE,     self.OnIdle)
-        self.Bind(wx.EVT_CLOSE,    self.OnQuit)
-        
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
+        self.Bind(wx.EVT_CLOSE, self.OnQuit)
+
         self.SetSettings()
 
     def __del__(self):
@@ -960,7 +1097,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         # leaving the method here but was used only to delete gcpmanagement
         # from layer manager which is now not needed
         pass
-        
+
     def CreateGCPList(self):
         """Create GCP List Control"""
 
@@ -969,7 +1106,7 @@ class GCP(MapFrame, ColumnSorterMixin):
     # Used by the ColumnSorterMixin, see wx/lib/mixins/listctrl.py
     def GetListCtrl(self):
         return self.list
-        
+
     def GetMapCoordList(self):
         return self.mapcoordlist
 
@@ -979,13 +1116,13 @@ class GCP(MapFrame, ColumnSorterMixin):
 
     def GetFwdError(self):
         return self.fwd_rmserror
-        
+
     def GetBkwError(self):
         return self.bkw_rmserror
-                
+
     def InitMapDisplay(self):
         self.list.LoadData()
-        
+
         # initialize column sorter
         self.itemDataMap = self.mapcoordlist
         ncols = self.list.GetColumnCount()
@@ -997,19 +1134,20 @@ class GCP(MapFrame, ColumnSorterMixin):
         """
         Sets rectification target to current location and mapset
         """
-        # check to see if we are georectifying map in current working location/mapset
+        # check to see if we are georectifying map in current working
+        # location/mapset
         if self.newlocation == self.currentlocation and self.newmapset == self.currentmapset:
             RunCommand('i.target',
-                       parent = self,
-                       flags = 'c',
-                       group = tgroup)
+                       parent=self,
+                       flags='c',
+                       group=tgroup)
         else:
             self.grwiz.SwitchEnv('source')
             RunCommand('i.target',
-                       parent = self,
-                       group = tgroup,
-                       location = tlocation,
-                       mapset = tmapset)
+                       parent=self,
+                       group=tgroup,
+                       location=tlocation,
+                       mapset=tmapset)
             self.grwiz.SwitchEnv('target')
 
     def AddGCP(self, event):
@@ -1017,16 +1155,17 @@ class GCP(MapFrame, ColumnSorterMixin):
         Appends an item to GCP list
         """
         keyval = self.list.AddGCPItem() + 1
-        # source east, source north, target east, target north, forward error, backward error
-        self.mapcoordlist.append([ keyval,             # GCP number
-                                   0.0,                # source east
-                                   0.0,                # source north
-                                   0.0,                # target east
-                                   0.0,                # target north
-                                   0.0,                # forward error
-                                   0.0 ] )             # backward error
-
-        if self.statusbarManager.GetMode() == 8: # go to
+        # source east, source north, target east, target north, forward error,
+        # backward error
+        self.mapcoordlist.append([keyval,             # GCP number
+                                  0.0,                # source east
+                                  0.0,                # source north
+                                  0.0,                # target east
+                                  0.0,                # target north
+                                  0.0,                # forward error
+                                  0.0])             # backward error
+
+        if self.statusbarManager.GetMode() == 8:  # go to
             self.StatusbarUpdate()
 
     def DeleteGCP(self, event):
@@ -1036,8 +1175,10 @@ class GCP(MapFrame, ColumnSorterMixin):
         minNumOfItems = self.OnGROrder(None)
 
         if self.list.GetItemCount() <= minNumOfItems:
-            GMessage(parent = self,
-                     message=_("At least %d GCPs required. Operation canceled.") % minNumOfItems)
+            GMessage(
+                parent=self,
+                message=_("At least %d GCPs required. Operation canceled.") %
+                minNumOfItems)
             return
 
         key = self.list.DeleteGCPItem()
@@ -1053,24 +1194,27 @@ class GCP(MapFrame, ColumnSorterMixin):
         # update selected
         if self.list.GetItemCount() > 0:
             if self.list.selected < self.list.GetItemCount():
-                self.list.selectedkey = self.list.GetItemData(self.list.selected)
+                self.list.selectedkey = self.list.GetItemData(
+                    self.list.selected)
             else:
                 self.list.selected = self.list.GetItemCount() - 1
-                self.list.selectedkey = self.list.GetItemData(self.list.selected)
-                
+                self.list.selectedkey = self.list.GetItemData(
+                    self.list.selected)
+
             self.list.SetItemState(self.list.selected,
-                              wx.LIST_STATE_SELECTED,
-                              wx.LIST_STATE_SELECTED)
+                                   wx.LIST_STATE_SELECTED,
+                                   wx.LIST_STATE_SELECTED)
         else:
             self.list.selected = wx.NOT_FOUND
             self.list.selectedkey = -1
 
         self.UpdateColours()
 
-        if self.statusbarManager.GetMode() == 8: # go to
+        if self.statusbarManager.GetMode() == 8:  # go to
             self.StatusbarUpdate()
             if self.list.selectedkey > 0:
-                self.statusbarManager.SetProperty('gotoGCP', self.list.selectedkey)
+                self.statusbarManager.SetProperty(
+                    'gotoGCP', self.list.selectedkey)
 
     def ClearGCP(self, event):
         """
@@ -1085,56 +1229,63 @@ class GCP(MapFrame, ColumnSorterMixin):
         self.list.SetStringItem(index, 6, '')
         self.list.CheckItem(index, False)
 
-        # GCP number, source E, source N, target E, target N, fwd error, bkwd error
+        # GCP number, source E, source N, target E, target N, fwd error, bkwd
+        # error
         self.mapcoordlist[key] = [key, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
 
     def SetSettings(self):
         """Sets settings for drawing of GCP's.
         """
-        self.highest_only = UserSettings.Get(group='gcpman', key='rms', subkey='highestonly')
-        self.show_unused =  UserSettings.Get(group='gcpman', key='symbol', subkey='unused')
-        
-        colours = { "color"  : "default", 
-                    "hcolor" : "highest", 
-                    "scolor" : "selected",
-                    "ucolor" : "unused" }
-        wpx = UserSettings.Get(group = 'gcpman', key = 'symbol', subkey = 'width')
-        
+        self.highest_only = UserSettings.Get(
+            group='gcpman', key='rms', subkey='highestonly')
+        self.show_unused = UserSettings.Get(
+            group='gcpman', key='symbol', subkey='unused')
+
+        colours = {"color": "default",
+                   "hcolor": "highest",
+                   "scolor": "selected",
+                   "ucolor": "unused"}
+        wpx = UserSettings.Get(group='gcpman', key='symbol', subkey='width')
+
         for k, v in colours.iteritems():
-            col = UserSettings.Get(group='gcpman', key='symbol', subkey= k)
-            self.pointsToDrawSrc.GetPen(v).SetColour(wx.Colour(col[0], col[1], col[2], 255)) # TODO GetPen neni to spatne? 
-            self.pointsToDrawTgt.GetPen(v).SetColour(wx.Colour(col[0], col[1], col[2], 255))
-            
+            col = UserSettings.Get(group='gcpman', key='symbol', subkey=k)
+            self.pointsToDrawSrc.GetPen(v).SetColour(wx.Colour(
+                col[0], col[1], col[2], 255))  # TODO GetPen neni to spatne?
+            self.pointsToDrawTgt.GetPen(v).SetColour(
+                wx.Colour(col[0], col[1], col[2], 255))
+
             self.pointsToDrawSrc.GetPen(v).SetWidth(wpx)
             self.pointsToDrawTgt.GetPen(v).SetWidth(wpx)
-        
-        spx = UserSettings.Get(group = 'gcpman', key = 'symbol', subkey = 'size')
+
+        spx = UserSettings.Get(group='gcpman', key='symbol', subkey='size')
         self.pointsToDrawSrc.SetPropertyVal("size", int(spx))
         self.pointsToDrawTgt.SetPropertyVal("size", int(spx))
-        
+
         font = self.GetFont()
         font.SetPointSize(int(spx) + 2)
-        
+
         textProp = {}
         textProp['active'] = True
         textProp['font'] = font
         self.pointsToDrawSrc.SetPropertyVal("text", textProp)
         self.pointsToDrawTgt.SetPropertyVal("text", copy(textProp))
-        
+
     def SetGCPSatus(self, item, itemIndex):
         """Before GCP is drawn, decides it's colour and whether it
         will be drawed.
         """
         key = self.list.GetItemData(itemIndex)
-        itemIndex += 1 # incremented because of itemDataMap (has one more item) - will be changed
-        
+        # incremented because of itemDataMap (has one more item) - will be
+        # changed
+        itemIndex += 1
+
         if not self.list.IsChecked(key - 1):
-                wxPen = "unused"
-                if not self.show_unused:
-                    item.SetPropertyVal('hide', True)
-                else:
-                    item.SetPropertyVal('hide', False)
-        
+            wxPen = "unused"
+            if not self.show_unused:
+                item.SetPropertyVal('hide', True)
+            else:
+                item.SetPropertyVal('hide', False)
+
         else:
             item.SetPropertyVal('hide', False)
             if self.highest_only == True:
@@ -1147,10 +1298,10 @@ class GCP(MapFrame, ColumnSorterMixin):
                     wxPen = "highest"
                 else:
                     wxPen = "default"
-        
+
         if itemIndex == self.list.selectedkey:
             wxPen = "selected"
-        
+
         item.SetPropertyVal('label', str(itemIndex))
         item.SetPropertyVal('penName', wxPen)
 
@@ -1172,44 +1323,44 @@ class GCP(MapFrame, ColumnSorterMixin):
                 currloc = _("source")
             else:
                 currloc = _("target")
-            ret = wx.MessageBox(parent = self,
-                                caption = _("Set GCP coordinates"),
-                                message = _('Set %(coor)s coordinates for GCP No. %(key)s? \n\n'
-                                            'East: %(coor0)s \n'
-                                            'North: %(coor1)s') % \
-                                    { 'coor' : currloc,
-                                      'key' : str(key),
-                                      'coor0' : str(coord0),
-                                      'coor1' : str(coord1) },
-                                style = wx.ICON_QUESTION | wx.YES_NO | wx.CENTRE)
-            
+            ret = wx.MessageBox(
+                parent=self, caption=_("Set GCP coordinates"),
+                message=_(
+                    'Set %(coor)s coordinates for GCP No. %(key)s? \n\n'
+                    'East: %(coor0)s \n'
+                    'North: %(coor1)s') %
+                {'coor': currloc, 'key': str(key),
+                 'coor0': str(coord0),
+                 'coor1': str(coord1)},
+                style=wx.ICON_QUESTION | wx.YES_NO | wx.CENTRE)
+
             # for wingrass
             if os.name == 'nt':
                 self.MapWindow.SetFocus()
             if ret == wx.NO:
                 return
-        
+
         if coordtype == 'source':
             self.list.SetStringItem(index, 1, str(coord0))
             self.list.SetStringItem(index, 2, str(coord1))
             self.mapcoordlist[key][1] = coord[0]
             self.mapcoordlist[key][2] = coord[1]
             self.pointsToDrawSrc.GetItem(key - 1).SetCoords([coord0, coord1])
-            
+
         elif coordtype == 'target':
             self.list.SetStringItem(index, 3, str(coord0))
             self.list.SetStringItem(index, 4, str(coord1))
             self.mapcoordlist[key][3] = coord[0]
             self.mapcoordlist[key][4] = coord[1]
             self.pointsToDrawTgt.GetItem(key - 1).SetCoords([coord0, coord1])
-        
+
         self.list.SetStringItem(index, 5, '0')
         self.list.SetStringItem(index, 6, '0')
         self.mapcoordlist[key][5] = 0.0
         self.mapcoordlist[key][6] = 0.0
-        
+
         # self.list.ResizeColumns()
-        
+
     def SaveGCPs(self, event):
         """Make a POINTS file or save GCP coordinates to existing
         POINTS file
@@ -1224,7 +1375,8 @@ class GCP(MapFrame, ColumnSorterMixin):
             f.write("# target mapset: " + self.currentmapset + '\n')
             f.write("#\tsource\t\ttarget\t\tstatus\n")
             f.write("#\teast\tnorth\teast\tnorth\t(1=ok, 0=ignore)\n")
-            f.write("#-----------------------     -----------------------     ---------------\n")
+            f.write(
+                "#-----------------------     -----------------------     ---------------\n")
 
             for index in range(self.list.GetItemCount()):
                 if self.list.IsChecked(index) == True:
@@ -1236,12 +1388,26 @@ class GCP(MapFrame, ColumnSorterMixin):
                 coord1 = self.list.GetItem(index, 2).GetText()
                 coord2 = self.list.GetItem(index, 3).GetText()
                 coord3 = self.list.GetItem(index, 4).GetText()
-                f.write(coord0 + ' ' + coord1 + '     ' + coord2 + ' ' + coord3 + '     ' + check + '\n')
+                f.write(
+                    coord0 +
+                    ' ' +
+                    coord1 +
+                    '     ' +
+                    coord2 +
+                    ' ' +
+                    coord3 +
+                    '     ' +
+                    check +
+                    '\n')
 
         except IOError as err:
-            GError(parent = self,
-                   message="%s <%s>. %s%s" % (_("Writing POINTS file failed"),
-                                              self.file['points'], os.linesep, err))
+            GError(
+                parent=self,
+                message="%s <%s>. %s%s" %
+                (_("Writing POINTS file failed"),
+                 self.file['points'],
+                    os.linesep,
+                    err))
             return
 
         f.close()
@@ -1249,41 +1415,43 @@ class GCP(MapFrame, ColumnSorterMixin):
         # if event != None save also to backup file
         if event:
             shutil.copy(self.file['points'], self.file['points_bak'])
-            self._giface.WriteLog(_('POINTS file saved for group <%s>') % self.xygroup)
+            self._giface.WriteLog(
+                _('POINTS file saved for group <%s>') %
+                self.xygroup)
             #self.SetStatusText(_('POINTS file saved'))
 
     def ReadGCPs(self):
         """
         Reads GCPs and georectified coordinates from POINTS file
         """
-        
+
         self.GCPcount = 0
 
         sourceMapWin = self.SrcMapWindow
         targetMapWin = self.TgtMapWindow
-        
+
         if not sourceMapWin:
-            GError(parent = self,
-                   message = "%s. %s%s" % (_("source mapwin not defined"),
-                                           os.linesep, err))
-        
+            GError(parent=self,
+                   message="%s. %s%s" % (_("source mapwin not defined"),
+                                         os.linesep, err))
+
         if not targetMapWin:
-            GError(parent = self,
+            GError(parent=self,
                    message="%s. %s%s" % (_("target mapwin not defined"),
                                          os.linesep, err))
-        
+
         try:
             f = open(self.file['points'], 'r')
             GCPcnt = 0
-            
+
             for line in f.readlines():
-                if line[0] == '#' or line =='':
+                if line[0] == '#' or line == '':
                     continue
                 line = line.replace('\n', '').strip()
                 coords = map(float, line.split())
                 if coords[4] == 1:
                     check = True
-                    self.GCPcount +=1
+                    self.GCPcount += 1
                 else:
                     check = False
 
@@ -1296,9 +1464,13 @@ class GCP(MapFrame, ColumnSorterMixin):
                 GCPcnt += 1
 
         except IOError as err:
-            GError(parent = self,
-                   message = "%s <%s>. %s%s" % (_("Reading POINTS file failed"),
-                                                self.file['points'], os.linesep, err))
+            GError(
+                parent=self,
+                message="%s <%s>. %s%s" %
+                (_("Reading POINTS file failed"),
+                 self.file['points'],
+                    os.linesep,
+                    err))
             return
 
         f.close()
@@ -1320,13 +1492,13 @@ class GCP(MapFrame, ColumnSorterMixin):
 
         # delete all items in mapcoordlist
         self.mapcoordlist = []
-        self.mapcoordlist.append([ 0,        # GCP number
-                                   0.0,      # source east
-                                   0.0,      # source north
-                                   0.0,      # target east
-                                   0.0,      # target north
-                                   0.0,      # forward error
-                                   0.0 ] )   # backward error
+        self.mapcoordlist.append([0,        # GCP number
+                                  0.0,      # source east
+                                  0.0,      # source north
+                                  0.0,      # target east
+                                  0.0,      # target north
+                                  0.0,      # forward error
+                                  0.0])   # backward error
 
         self.list.LoadData()
         self.itemDataMap = self.mapcoordlist
@@ -1341,7 +1513,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         if self.show_target:
             targetMapWin = self.TgtMapWindow
             targetMapWin.UpdateMap(render=False, renderVector=False)
-    
+
     def OnFocus(self, event):
         # TODO: it is here just to remove old or obsolate beavior of base class gcp/MapFrame?
         # self.grwiz.SwitchEnv('source')
@@ -1361,29 +1533,31 @@ class GCP(MapFrame, ColumnSorterMixin):
         """
         RMS button handler
         """
-        self.RMSError(self.xygroup,self.gr_order)
+        self.RMSError(self.xygroup, self.gr_order)
 
         sourceMapWin = self.SrcMapWindow
         sourceMapWin.UpdateMap(render=False, renderVector=False)
         if self.show_target:
             targetMapWin = self.TgtMapWindow
             targetMapWin.UpdateMap(render=False, renderVector=False)
-        
+
     def CheckGCPcount(self, msg=False):
         """
         Checks to make sure that the minimum number of GCPs have been defined and
         are active for the selected transformation order
         """
         if (self.GCPcount < 3 and self.gr_order == 1) or \
-            (self.GCPcount < 6 and self.gr_order == 2) or \
-            (self.GCPcount < 10 and self.gr_order == 3):
+                (self.GCPcount < 6 and self.gr_order == 2) or \
+                (self.GCPcount < 10 and self.gr_order == 3):
             if msg:
-                GWarning(parent = self,
-                         message=_('Insufficient points defined and active (checked) '
-                                   'for selected rectification method (order: %d).\n'
-                                   '3+ points needed for 1st order,\n'
-                                   '6+ points for 2nd order, and\n'
-                                   '10+ points for 3rd order.') % self.gr_order)
+                GWarning(
+                    parent=self, message=_(
+                        'Insufficient points defined and active (checked) '
+                        'for selected rectification method (order: %d).\n'
+                        '3+ points needed for 1st order,\n'
+                        '6+ points for 2nd order, and\n'
+                        '10+ points for 3rd order.') %
+                    self.gr_order)
                 return False
         else:
             return True
@@ -1394,7 +1568,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         """
         global maptype
         self.SaveGCPs(None)
-        
+
         if self.CheckGCPcount(msg=True) == False:
             return
 
@@ -1411,26 +1585,26 @@ class GCP(MapFrame, ColumnSorterMixin):
             wx.Yield()
 
             ret, msg = RunCommand('i.rectify',
-                                  parent = self,
-                                  getErrorMsg = True,
-                                  quiet = True,
-                                  group = self.xygroup,
-                                  extension = self.extension,
-                                  order = self.gr_order,
+                                  parent=self,
+                                  getErrorMsg=True,
+                                  quiet=True,
+                                  group=self.xygroup,
+                                  extension=self.extension,
+                                  order=self.gr_order,
                                   method=self.gr_method,
-                                  flags = flags)
+                                  flags=flags)
 
             busy.Destroy()
 
             # provide feedback on failure
             if ret != 0:
                 print >> sys.stderr, msg
-                
+
         elif maptype == 'vector':
             # loop through all vectors in VREF
 
             self.grwiz.SwitchEnv('source')
-            
+
             # make list of vectors to georectify from VREF
             f = open(self.file['vgrp'])
             vectlist = []
@@ -1442,33 +1616,34 @@ class GCP(MapFrame, ColumnSorterMixin):
                     vectlist.append(vect)
             finally:
                 f.close()
-                               
+
             # georectify each vector in VREF using v.rectify
             for vect in vectlist:
                 self.outname = str(vect.split('@')[0]) + self.extension
-                self._giface.WriteLog(text = _('Transforming <%s>...') % vect,
+                self._giface.WriteLog(text=_('Transforming <%s>...') % vect,
                                       notification=Notification.MAKE_VISIBLE)
                 ret = msg = ''
-                
-                busy = wx.BusyInfo(message=_("Rectifying vector map <%s>, please wait...") % vect,
-                                   parent=self)
+
+                busy = wx.BusyInfo(
+                    message=_("Rectifying vector map <%s>, please wait...") %
+                    vect, parent=self)
                 wx.Yield()
 
                 ret, msg = RunCommand('v.rectify',
-                                      parent = self,
-                                      getErrorMsg = True,
-                                      quiet = True,
-                                      input = vect,
-                                      output = self.outname,
-                                      group = self.xygroup,
-                                      order = self.gr_order)
+                                      parent=self,
+                                      getErrorMsg=True,
+                                      quiet=True,
+                                      input=vect,
+                                      output=self.outname,
+                                      group=self.xygroup,
+                                      order=self.gr_order)
 
                 busy.Destroy()
 
                 # provide feedback on failure
                 if ret != 0:
                     print >> sys.stderr, msg
-                                                   
+
         self.grwiz.SwitchEnv('target')
 
     def OnGeorectDone(self, **kargs):
@@ -1476,17 +1651,17 @@ class GCP(MapFrame, ColumnSorterMixin):
         global maptype
         if maptype == 'raster':
             return
-        
+
         returncode = kargs['returncode']
-        
+
         if returncode == 0:
             self.VectGRList.append(self.outname)
             print '*****vector list = ' + str(self.VectGRList)
         else:
-            self._giface.WriteError(_('Georectification of vector map <%s> failed') %
-                                      self.outname)
+            self._giface.WriteError(
+                _('Georectification of vector map <%s> failed') %
+                self.outname)
 
-         
     def OnSettings(self, event):
         """GCP Manager settings"""
         dlg = GrSettingsDialog(parent=self, giface=self._giface,
@@ -1494,11 +1669,11 @@ class GCP(MapFrame, ColumnSorterMixin):
 
         if dlg.ShowModal() == wx.ID_OK:
             pass
-        
+
         dlg.Destroy()
 
     def UpdateColours(self, srcrender=False, srcrenderVector=False,
-                            tgtrender=False, tgtrenderVector=False):
+                      tgtrender=False, tgtrenderVector=False):
         """update colours"""
         highest_fwd_err = 0.0
         self.highest_key = 0
@@ -1522,7 +1697,7 @@ class GCP(MapFrame, ColumnSorterMixin):
                         self.list.SetItemTextColour(index, wx.BLACK)
             else:
                 self.list.SetItemTextColour(index, wx.BLACK)
-        
+
         if self.highest_only and highest_fwd_err > 0.0:
             self.list.SetItemTextColour(highest_idx, wx.RED)
 
@@ -1530,14 +1705,16 @@ class GCP(MapFrame, ColumnSorterMixin):
         sourceMapWin.UpdateMap(render=srcrender, renderVector=srcrenderVector)
         if self.show_target:
             targetMapWin = self.TgtMapWindow
-            targetMapWin.UpdateMap(render=tgtrender, renderVector=tgtrenderVector)
+            targetMapWin.UpdateMap(
+                render=tgtrender,
+                renderVector=tgtrenderVector)
 
     def OnQuit(self, event):
         """Quit georectifier"""
-        ret = wx.MessageBox(parent=self,
-                      caption=_("Quit GCP Manager"),
-                      message=_('Save ground control points?'),
-                      style=wx.ICON_QUESTION | wx.YES_NO | wx.CANCEL | wx.CENTRE)
+        ret = wx.MessageBox(
+            parent=self, caption=_("Quit GCP Manager"),
+            message=_('Save ground control points?'),
+            style=wx.ICON_QUESTION | wx.YES_NO | wx.CANCEL | wx.CENTRE)
 
         if ret != wx.CANCEL:
             if ret == wx.YES:
@@ -1557,7 +1734,7 @@ class GCP(MapFrame, ColumnSorterMixin):
 
             self.Destroy()
 
-        #event.Skip()
+        # event.Skip()
 
     def OnGROrder(self, event):
         """
@@ -1568,7 +1745,7 @@ class GCP(MapFrame, ColumnSorterMixin):
 
         numOfItems = self.list.GetItemCount()
         minNumOfItems = numOfItems
-        
+
         if self.gr_order == 1:
             minNumOfItems = 3
             # self.SetStatusText(_('Insufficient points, 3+ points needed for 1st order'))
@@ -1586,7 +1763,7 @@ class GCP(MapFrame, ColumnSorterMixin):
             self.AddGCP(None)
 
         return minNumOfItems
-    
+
     def RMSError(self, xygroup, order):
         """
         Uses m.transform to calculate forward and backward error for each used GCP
@@ -1595,32 +1772,36 @@ class GCP(MapFrame, ColumnSorterMixin):
         """
         # save GCPs to points file to make sure that all checked GCPs are used
         self.SaveGCPs(None)
-        #self.SetStatusText('')
-        
+        # self.SetStatusText('')
+
         if self.CheckGCPcount(msg=True) == False:
             return
-        
+
         # get list of forward and reverse rms error values for each point
         self.grwiz.SwitchEnv('source')
-        
+
         ret = RunCommand('m.transform',
-                         parent = self,
-                         read = True,
-                         group = xygroup,
-                         order = order)
-        
+                         parent=self,
+                         read=True,
+                         group=xygroup,
+                         order=order)
+
         self.grwiz.SwitchEnv('target')
 
         if ret:
             errlist = ret.splitlines()
         else:
-            GError(parent = self,
+            GError(parent=self,
                    message=_('Could not calculate RMS Error.\n'
                              'Possible error with m.transform.'))
             return
-        
+
         # insert error values into GCP list for checked items
-        sdfactor = float(UserSettings.Get(group='gcpman', key='rms', subkey='sdfactor'))
+        sdfactor = float(
+            UserSettings.Get(
+                group='gcpman',
+                key='rms',
+                subkey='sdfactor'))
         GCPcount = 0
         sumsq_fwd_err = 0.0
         sumsq_bkw_err = 0.0
@@ -1628,7 +1809,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         highest_fwd_err = 0.0
         self.highest_key = 0
         highest_idx = 0
-        
+
         for index in range(self.list.GetItemCount()):
             key = self.list.GetItemData(index)
             if self.list.IsChecked(index):
@@ -1643,7 +1824,7 @@ class GCP(MapFrame, ColumnSorterMixin):
                         highest_fwd_err = float(fwd_err)
                         self.highest_key = key
                         highest_idx = index
-                        
+
                 sumsq_fwd_err += float(fwd_err)**2
                 sumsq_bkw_err += float(bkw_err)**2
                 sum_fwd_err += float(fwd_err)
@@ -1673,26 +1854,26 @@ class GCP(MapFrame, ColumnSorterMixin):
                     key = self.list.GetItemData(index)
                     if (self.mapcoordlist[key][5] > self.rmsthresh):
                         self.list.SetItemTextColour(index, wx.RED)
-            
+
         # calculate global RMS error (geometric mean)
-        self.fwd_rmserror = round((sumsq_fwd_err/GCPcount)**0.5,4)
-        self.bkw_rmserror = round((sumsq_bkw_err/GCPcount)**0.5,4)
+        self.fwd_rmserror = round((sumsq_fwd_err / GCPcount)**0.5, 4)
+        self.bkw_rmserror = round((sumsq_bkw_err / GCPcount)**0.5, 4)
         self.list.ResizeColumns()
 
-    def GetNewExtent(self, region, map = None):
+    def GetNewExtent(self, region, map=None):
 
         coord_file = utils.GetTempfile()
-        newreg = { 'n' : 0.0, 's' : 0.0, 'e' : 0.0, 'w' : 0.0,}
+        newreg = {'n': 0.0, 's': 0.0, 'e': 0.0, 'w': 0.0, }
 
         try:
             f = open(coord_file, mode='w')
-            # NW corner        
+            # NW corner
             f.write(str(region['e']) + " " + str(region['n']) + "\n")
-            # NE corner        
+            # NE corner
             f.write(str(region['e']) + " " + str(region['s']) + "\n")
-            # SW corner        
+            # SW corner
             f.write(str(region['w']) + " " + str(region['n']) + "\n")
-            # SE corner        
+            # SE corner
             f.write(str(region['w']) + " " + str(region['s']) + "\n")
         finally:
             f.close()
@@ -1706,39 +1887,39 @@ class GCP(MapFrame, ColumnSorterMixin):
         if self.CheckGCPcount(msg=True) == False:
             self.gr_order = order
             return
-        
+
         self.gr_order = order
 
         # get list of forward and reverse rms error values for each point
         self.grwiz.SwitchEnv('source')
-        
+
         if map == 'source':
             ret = RunCommand('m.transform',
-                             parent = self,
-                             read = True,
-                             group = self.xygroup,
-                             order = 1,
-                             format = 'dst',
-                             coords = coord_file)
+                             parent=self,
+                             read=True,
+                             group=self.xygroup,
+                             order=1,
+                             format='dst',
+                             coords=coord_file)
 
         elif map == 'target':
             ret = RunCommand('m.transform',
-                             parent = self,
-                             read = True,
-                             group = self.xygroup,
-                             order = 1,
-                             flags = 'r',
-                             format = 'src',
-                             coords = coord_file)
+                             parent=self,
+                             read=True,
+                             group=self.xygroup,
+                             order=1,
+                             flags='r',
+                             format='src',
+                             coords=coord_file)
 
         os.unlink(coord_file)
-        
+
         self.grwiz.SwitchEnv('target')
 
         if ret:
             errlist = ret.splitlines()
         else:
-            GError(parent = self,
+            GError(parent=self,
                    message=_('Could not calculate new extends.\n'
                              'Possible error with m.transform.'))
             return
@@ -1788,7 +1969,8 @@ class GCP(MapFrame, ColumnSorterMixin):
     def UpdateActive(self, win):
 
         # optionally disable tool zoomback tool
-        self.GetMapToolbar().Enable('zoomback', enable = (len(self.MapWindow.zoomhistory) > 1))
+        self.GetMapToolbar().Enable('zoomback',
+                                    enable=(len(self.MapWindow.zoomhistory) > 1))
 
         if self.activemap.GetSelection() != (win == self.TgtMapWindow):
             self.activemap.SetSelection(win == self.TgtMapWindow)
@@ -1805,7 +1987,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         self.Map.region['w'] = newreg['w']
 
         self.MapWindow.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
-                 self.Map.region['e'], self.Map.region['w'])
+                                   self.Map.region['e'], self.Map.region['w'])
 
         # LL locations
         if self.Map.projinfo['proj'] == 'll':
@@ -1813,19 +1995,20 @@ class GCP(MapFrame, ColumnSorterMixin):
                 newreg['n'] = 90.0
             if newreg['s'] < -90.0:
                 newreg['s'] = -90.0
-        
+
         ce = newreg['w'] + (newreg['e'] - newreg['w']) / 2
         cn = newreg['s'] + (newreg['n'] - newreg['s']) / 2
-        
+
         # calculate new center point and display resolution
         self.Map.region['center_easting'] = ce
         self.Map.region['center_northing'] = cn
         self.Map.region["ewres"] = (newreg['e'] - newreg['w']) / self.Map.width
-        self.Map.region["nsres"] = (newreg['n'] - newreg['s']) / self.Map.height
+        self.Map.region["nsres"] = (
+            newreg['n'] - newreg['s']) / self.Map.height
         self.Map.AlignExtentFromDisplay()
 
         self.MapWindow.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
-                 self.Map.region['e'], self.Map.region['w'])
+                                   self.Map.region['e'], self.Map.region['w'])
 
         if self.MapWindow.redrawAll is False:
             self.MapWindow.redrawAll = True
@@ -1868,11 +2051,13 @@ class GCP(MapFrame, ColumnSorterMixin):
         zoommenu = wx.Menu()
         # Add items to the menu
 
-        zoomsource = wx.MenuItem(zoommenu, wx.ID_ANY, _('Adjust source display to target display'))
+        zoomsource = wx.MenuItem(zoommenu, wx.ID_ANY, _(
+            'Adjust source display to target display'))
         zoommenu.AppendItem(zoomsource)
         self.Bind(wx.EVT_MENU, self.OnZoomToTarget, zoomsource)
 
-        zoomtarget = wx.MenuItem(zoommenu, wx.ID_ANY, _('Adjust target display to source display'))
+        zoomtarget = wx.MenuItem(zoommenu, wx.ID_ANY, _(
+            'Adjust target display to source display'))
         zoommenu.AppendItem(zoomtarget)
         self.Bind(wx.EVT_MENU, self.OnZoomToSource, zoomtarget)
 
@@ -1880,7 +2065,7 @@ class GCP(MapFrame, ColumnSorterMixin):
         # will be called before PopupMenu returns.
         self.PopupMenu(zoommenu)
         zoommenu.Destroy()
-        
+
     def OnSize(self, event):
         """Adjust Map Windows after GCP Map Display has been resized
         """
@@ -1909,10 +2094,11 @@ class GCP(MapFrame, ColumnSorterMixin):
                 event.RequestMore()
         pass
 
+
 class GCPList(wx.ListCtrl,
               CheckListCtrlMixin,
               ListCtrlAutoWidthMixin):
-              
+
     def __init__(self, parent, gcp, id=wx.ID_ANY,
                  pos=wx.DefaultPosition, size=wx.DefaultSize,
                  style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_HRULES |
@@ -1920,7 +2106,7 @@ class GCPList(wx.ListCtrl,
 
         wx.ListCtrl.__init__(self, parent, id, pos, size, style)
 
-        self.gcp = gcp # GCP class
+        self.gcp = gcp  # GCP class
         self.render = True
 
         # Mixin settings
@@ -1929,7 +2115,7 @@ class GCPList(wx.ListCtrl,
         # TextEditMixin.__init__(self)
 
         # tracks whether list items are checked or not
-        self.CheckList = [] 
+        self.CheckList = []
 
         self._Create()
 
@@ -1946,29 +2132,30 @@ class GCPList(wx.ListCtrl,
             # normal, simple columns
             idx_col = 0
             for col in (_('use'),
-                _('source E'),
-                _('source N'),
-                _('target E'),
-                _('target N'),
-                _('Forward error'),
-                _('Backward error')):
+                        _('source E'),
+                        _('source N'),
+                        _('target E'),
+                        _('target N'),
+                        _('Forward error'),
+                        _('Backward error')):
                 self.InsertColumn(idx_col, col)
                 idx_col += 1
         else:
             # the hard way: we want images on the column header
             info = wx.ListItem()
-            info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT)
+            info.SetMask(
+                wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT)
             info.SetImage(-1)
             info.m_format = wx.LIST_FORMAT_LEFT
 
             idx_col = 0
             for lbl in (_('use'),
-                _('source E'),
-                _('source N'),
-                _('target E'),
-                _('target N'),
-                _('Forward error'),
-                _('Backward error')):
+                        _('source E'),
+                        _('source N'),
+                        _('target E'),
+                        _('target N'),
+                        _('Forward error'),
+                        _('Backward error')):
                 info.SetText(lbl)
                 self.InsertColumnInfo(idx_col, info)
                 idx_col += 1
@@ -2007,7 +2194,7 @@ class GCPList(wx.ListCtrl,
             if self.gcp.show_target:
                 targetMapWin = self.gcp.TgtMapWindow
                 targetMapWin.UpdateMap(render=False, renderVector=False)
-    
+
     def AddGCPItem(self):
         """
         Appends an item to GCP list
@@ -2030,10 +2217,12 @@ class GCPList(wx.ListCtrl,
                           wx.LIST_STATE_SELECTED)
 
         self.ResizeColumns()
-        
-        self.gcp.pointsToDrawSrc.AddItem(coords = [0,0], label = str(self.selectedkey))
-        self.gcp.pointsToDrawTgt.AddItem(coords = [0,0], label = str(self.selectedkey))
-        
+
+        self.gcp.pointsToDrawSrc.AddItem(
+            coords=[0, 0], label=str(self.selectedkey))
+        self.gcp.pointsToDrawTgt.AddItem(
+            coords=[0, 0], label=str(self.selectedkey))
+
         self.EnsureVisible(self.selected)
 
         return self.selected
@@ -2046,16 +2235,16 @@ class GCPList(wx.ListCtrl,
 
         key = self.GetItemData(self.selected)
         self.DeleteItem(self.selected)
-        
+
         if self.selected != wx.NOT_FOUND:
             item = self.gcp.pointsToDrawSrc.GetItem(key - 1)
             self.gcp.pointsToDrawSrc.DeleteItem(item)
-            
+
             item = self.gcp.pointsToDrawTgt.GetItem(key - 1)
             self.gcp.pointsToDrawTgt.DeleteItem(item)
-        
+
         return key
-        
+
     def ResizeColumns(self):
         """Resize columns"""
         minWidth = [90, 120]
@@ -2064,7 +2253,7 @@ class GCPList(wx.ListCtrl,
             # first column is checkbox, don't set to minWidth
             if i > 0 and self.GetColumnWidth(i) < minWidth[i > 4]:
                 self.SetColumnWidth(i, minWidth[i > 4])
-        
+
         self.SendSizeEvent()
 
     def GetSelected(self):
@@ -2099,11 +2288,11 @@ class GCPList(wx.ListCtrl,
         dlg = EditGCP(parent=self, id=wx.ID_ANY, data=coords, gcpno=key)
 
         if dlg.ShowModal() == wx.ID_OK:
-            values = dlg.GetValues() # string
-            
+            values = dlg.GetValues()  # string
+
             if len(values) == 0:
-                GError(parent = self,
-                       message=_("Invalid coordinate value. Operation canceled."))
+                GError(parent=self, message=_(
+                    "Invalid coordinate value. Operation canceled."))
             else:
                 for i in range(len(values)):
                     if values[i] != coords[i]:
@@ -2122,39 +2311,41 @@ class GCPList(wx.ListCtrl,
                                                   float(values[3]),
                                                   0.0,
                                                   0.0]
-                    
-                    self.gcp.pointsToDrawSrc.GetItem(key - 1).SetCoords([float(values[0]), 
-                                                                         float(values[1])])
-                    self.gcp.pointsToDrawTgt.GetItem(key - 1).SetCoords([float(values[2]), 
-                                                                         float(values[3])])
+
+                    self.gcp.pointsToDrawSrc.GetItem(
+                        key - 1).SetCoords([float(values[0]), float(values[1])])
+                    self.gcp.pointsToDrawTgt.GetItem(
+                        key - 1).SetCoords([float(values[2]), float(values[3])])
                     self.gcp.UpdateColours()
-                    
+
     def OnColClick(self, event):
         """ListCtrl forgets selected item..."""
         self.selected = self.FindItemData(-1, self.selectedkey)
         self.SetItemState(self.selected,
                           wx.LIST_STATE_SELECTED,
                           wx.LIST_STATE_SELECTED)
-        
+
         event.Skip()
 
+
 class VectGroup(wx.Dialog):
     """Dialog to create a vector group (VREF file) for georectifying
 
     .. todo::
         Replace by g.group
     """
+
     def __init__(self, parent, id, grassdb, location, mapset, group,
                  style=wx.DEFAULT_DIALOG_STYLE):
-        
+
         wx.Dialog.__init__(self, parent, id, style=style,
-                           title = _("Create vector map group"))
-        
+                           title=_("Create vector map group"))
+
         self.grassdatabase = grassdb
         self.xylocation = location
         self.xymapset = mapset
         self.xygroup = group
-        
+
         #
         # get list of valid vector directories
         #
@@ -2164,15 +2355,15 @@ class VectGroup(wx.Dialog):
                                            'vector'))
         for dir in vectlist:
             if not os.path.isfile(os.path.join(self.grassdatabase,
-                                           self.xylocation,
-                                           self.xymapset,
-                                           'vector',
-                                           dir,
-                                           'coor')):
+                                               self.xylocation,
+                                               self.xymapset,
+                                               'vector',
+                                               dir,
+                                               'coor')):
                 vectlist.remove(dir)
-        
+
         utils.ListSortLower(vectlist)
-        
+
         # path to vref file
         self.vgrpfile = os.path.join(self.grassdatabase,
                                      self.xylocation,
@@ -2180,23 +2371,22 @@ class VectGroup(wx.Dialog):
                                      'group',
                                      self.xygroup,
                                      'VREF')
-        
+
         #
         # buttons
         #
-        self.btnCancel = wx.Button(parent = self,
-                                   id = wx.ID_CANCEL)
-        self.btnOK = wx.Button(parent = self,
-                                   id = wx.ID_OK)
+        self.btnCancel = wx.Button(parent=self,
+                                   id=wx.ID_CANCEL)
+        self.btnOK = wx.Button(parent=self,
+                               id=wx.ID_OK)
         self.btnOK.SetDefault()
 
-
         #
         # list of vector maps
         #
-        self.listMap = wx.CheckListBox(parent = self, id = wx.ID_ANY,
-                                      choices = vectlist)
-        
+        self.listMap = wx.CheckListBox(parent=self, id=wx.ID_ANY,
+                                       choices=vectlist)
+
         if os.path.isfile(self.vgrpfile):
             f = open(self.vgrpfile)
             try:
@@ -2209,64 +2399,71 @@ class VectGroup(wx.Dialog):
                 self.listMap.SetCheckedStrings(checked)
             finally:
                 f.close()
-                
-        line = wx.StaticLine(parent = self,
-                             id = wx.ID_ANY, size = (20, -1),
-                             style = wx.LI_HORIZONTAL)
+
+        line = wx.StaticLine(parent=self,
+                             id=wx.ID_ANY, size=(20, -1),
+                             style=wx.LI_HORIZONTAL)
 
         #
         # layout
         #
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         box = wx.BoxSizer(wx.HORIZONTAL)
-        box.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                     label = _('Select vector map(s) to add to group:')),
-                flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
-                border = 5)
-
-        box.Add(item = self.listMap,
-                flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
-                border = 5)
-
-        
-        sizer.Add(box, flag = wx.ALIGN_RIGHT | wx.ALL,
-                  border = 3)
-        
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
-                  border = 5)
-        
+        box.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_('Select vector map(s) to add to group:')),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
+            border=5)
+
+        box.Add(item=self.listMap,
+                flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
+                border=5)
+
+        sizer.Add(box, flag=wx.ALIGN_RIGHT | wx.ALL,
+                  border=3)
+
+        sizer.Add(item=line, proportion=0,
+                  flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                  border=5)
+
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOK)
         btnSizer.Realize()
 
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER,
-                  border = 5)
-        
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER,
+                  border=5)
+
         self.SetSizer(sizer)
         sizer.Fit(self)
         self.Layout()
-        
+
     def MakeVGroup(self):
         """Create VREF file"""
         vgrouplist = []
         for item in range(self.listMap.GetCount()):
             if not self.listMap.IsChecked(item):
                 continue
-            vgrouplist.append(self.listMap.GetString(item) + '@' + self.xymapset)
-        
+            vgrouplist.append(
+                self.listMap.GetString(item) +
+                '@' +
+                self.xymapset)
+
         f = open(self.vgrpfile, mode='w')
         try:
             for vect in vgrouplist:
                 f.write(vect + '\n')
         finally:
             f.close()
-        
+
+
 class EditGCP(wx.Dialog):
+
     def __init__(self, parent, data, gcpno, id=wx.ID_ANY,
                  title=_("Edit GCP"),
                  style=wx.DEFAULT_DIALOG_STYLE):
@@ -2278,13 +2475,14 @@ class EditGCP(wx.Dialog):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.StaticBox (parent=panel, id=wx.ID_ANY,
-                            label=" %s %s " % (_("Ground Control Point No."), str(gcpno)))
+        box = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s %s " %
+            (_("Ground Control Point No."), str(gcpno)))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
         # source coordinates
         gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
-       
+
         self.xcoord = wx.TextCtrl(parent=panel, id=wx.ID_ANY, size=(150, -1))
         self.ycoord = wx.TextCtrl(parent=panel, id=wx.ID_ANY, size=(150, -1))
         self.ecoord = wx.TextCtrl(parent=panel, id=wx.ID_ANY, size=(150, -1))
@@ -2294,7 +2492,7 @@ class EditGCP(wx.Dialog):
         tmp_coord = data[1]
         data[1] = data[2]
         data[2] = tmp_coord
-        
+
         row = 0
         col = 0
         idx = 0
@@ -2322,7 +2520,7 @@ class EditGCP(wx.Dialog):
                 col = 0
 
         boxSizer.Add(item=gridSizer, proportion=1,
-                  flag=wx.EXPAND | wx.ALL, border=5)
+                     flag=wx.EXPAND | wx.ALL, border=5)
 
         sizer.Add(item=boxSizer, proportion=1,
                   flag=wx.EXPAND | wx.ALL, border=5)
@@ -2364,9 +2562,12 @@ class EditGCP(wx.Dialog):
 
         return valuelist
 
+
 class GrSettingsDialog(wx.Dialog):
-    def __init__(self, parent, id, giface, title, pos=wx.DefaultPosition, size=wx.DefaultSize,
-                 style=wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(
+            self, parent, id, giface, title, pos=wx.DefaultPosition,
+            size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE):
         wx.Dialog.__init__(self, parent, id, title, pos, size, style)
         """
         Dialog to set profile text options: font, title
@@ -2377,16 +2578,16 @@ class GrSettingsDialog(wx.Dialog):
         #
         self.parent = parent
         self.new_src_map = src_map
-        self.new_tgt_map = { 'raster' : tgt_map['raster'],
-                             'vector' : tgt_map['vector'] }
+        self.new_tgt_map = {'raster': tgt_map['raster'],
+                            'vector': tgt_map['vector']}
         self.sdfactor = 0
 
         self.symbol = {}
-        
+
         self.methods = ["nearest",
                         "linear",
                         "linear_f",
-                        "cubic", 
+                        "cubic",
                         "cubic_f",
                         "lanczos",
                         "lanczos_f"]
@@ -2406,7 +2607,8 @@ class GrSettingsDialog(wx.Dialog):
         btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
         btnApply.SetToolTipString(_("Apply changes for the current session"))
         btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
-        btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
+        btnSave.SetToolTipString(
+            _("Apply and save changes to user settings file (default for next sessions)"))
         btnClose.Bind(wx.EVT_BUTTON, self.OnClose)
         btnClose.SetToolTipString(_("Close dialog"))
 
@@ -2415,17 +2617,21 @@ class GrSettingsDialog(wx.Dialog):
         btnSizer.Add(btnApply, flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(btnSave, flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(btnClose, flag=wx.LEFT | wx.RIGHT, border=5)
-        
+
         # sizers
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item=notebook, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(
+            item=notebook,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         mainSizer.Add(item=btnSizer, proportion=0,
-                       flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+                      flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
         #              flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
 
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
-        
+
     def __CreateSymbologyPage(self, notebook):
         """Create notebook page with symbology settings"""
 
@@ -2437,24 +2643,41 @@ class GrSettingsDialog(wx.Dialog):
         rmsgridSizer = wx.GridBagSizer(vgap=5, hgap=5)
 
         # highlight only highest forward RMS error
-        self.highlighthighest = wx.CheckBox(parent=panel, id=wx.ID_ANY,
-                                label=_("Highlight highest RMS error only"))
+        self.highlighthighest = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_("Highlight highest RMS error only"))
         hh = UserSettings.Get(group='gcpman', key='rms', subkey='highestonly')
         self.highlighthighest.SetValue(hh)
-        rmsgridSizer.Add(item=self.highlighthighest, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        rmsgridSizer.Add(
+            item=self.highlighthighest,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                0,
+                0))
 
         # RMS forward error threshold
-        rmslabel = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Highlight RMS error > M + SD * factor:"))
-        rmslabel.SetToolTip(wx.ToolTip(_("Highlight GCPs with an RMS error larger than \n"
-                              "mean + standard deviation * given factor. \n"
-                              "Recommended values for this factor are between 1 and 2.")))
-        rmsgridSizer.Add(item=rmslabel, flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0))
-        sdfactor = UserSettings.Get(group='gcpman', key='rms', subkey='sdfactor')
+        rmslabel = wx.StaticText(
+            parent=panel, id=wx.ID_ANY,
+            label=_("Highlight RMS error > M + SD * factor:"))
+        rmslabel.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Highlight GCPs with an RMS error larger than \n"
+                    "mean + standard deviation * given factor. \n"
+                    "Recommended values for this factor are between 1 and 2.")))
+        rmsgridSizer.Add(
+            item=rmslabel,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                1,
+                0))
+        sdfactor = UserSettings.Get(
+            group='gcpman', key='rms', subkey='sdfactor')
         self.rmsWin = wx.TextCtrl(parent=panel, id=wx.ID_ANY,
-                       size=(70,-1), style=wx.TE_NOHIDESEL)
+                                  size=(70, -1), style=wx.TE_NOHIDESEL)
         self.rmsWin.SetValue("%s" % str(sdfactor))
         if (self.parent.highest_only == True):
-           self.rmsWin.Disable()
+            self.rmsWin.Disable()
 
         self.symbol['sdfactor'] = self.rmsWin.GetId()
         rmsgridSizer.Add(item=self.rmsWin, flag=wx.ALIGN_RIGHT, pos=(1, 1))
@@ -2487,14 +2710,17 @@ class GrSettingsDialog(wx.Dialog):
         # symbol color for high forward RMS error
         #
         row += 1
-        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Color for high RMS error:"))
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Color for high RMS error:"))
         gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
         hcol = UserSettings.Get(group='gcpman', key='symbol', subkey='hcolor')
         hcolWin = csel.ColourSelect(parent=panel, id=wx.ID_ANY,
-                                   colour=wx.Colour(hcol[0],
-                                                    hcol[1],
-                                                    hcol[2],
-                                                    255))
+                                    colour=wx.Colour(hcol[0],
+                                                     hcol[1],
+                                                     hcol[2],
+                                                     255))
         self.symbol['hcolor'] = hcolWin.GetId()
         gridSizer.Add(item=hcolWin,
                       flag=wx.ALIGN_RIGHT,
@@ -2504,14 +2730,17 @@ class GrSettingsDialog(wx.Dialog):
         # symbol color for selected GCP
         #
         row += 1
-        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Color for selected GCP:"))
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Color for selected GCP:"))
         gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
         scol = UserSettings.Get(group='gcpman', key='symbol', subkey='scolor')
         scolWin = csel.ColourSelect(parent=panel, id=wx.ID_ANY,
-                                   colour=wx.Colour(scol[0],
-                                                    scol[1],
-                                                    scol[2],
-                                                    255))
+                                    colour=wx.Colour(scol[0],
+                                                     scol[1],
+                                                     scol[2],
+                                                     255))
         self.symbol['scolor'] = scolWin.GetId()
         gridSizer.Add(item=scolWin,
                       flag=wx.ALIGN_RIGHT,
@@ -2521,14 +2750,17 @@ class GrSettingsDialog(wx.Dialog):
         # symbol color for unused GCP
         #
         row += 1
-        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Color for unused GCPs:"))
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Color for unused GCPs:"))
         gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
         ucol = UserSettings.Get(group='gcpman', key='symbol', subkey='ucolor')
         ucolWin = csel.ColourSelect(parent=panel, id=wx.ID_ANY,
-                                   colour=wx.Colour(ucol[0],
-                                                    ucol[1],
-                                                    ucol[2],
-                                                    255))
+                                    colour=wx.Colour(ucol[0],
+                                                     ucol[1],
+                                                     ucol[2],
+                                                     255))
         self.symbol['ucolor'] = ucolWin.GetId()
         gridSizer.Add(item=ucolWin,
                       flag=wx.ALIGN_RIGHT,
@@ -2537,33 +2769,52 @@ class GrSettingsDialog(wx.Dialog):
         # show unused GCPs
         row += 1
         self.showunused = wx.CheckBox(parent=panel, id=wx.ID_ANY,
-                                label=_("Show unused GCPs"))
+                                      label=_("Show unused GCPs"))
         shuu = UserSettings.Get(group='gcpman', key='symbol', subkey='unused')
         self.showunused.SetValue(shuu)
-        gridSizer.Add(item=self.showunused, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        gridSizer.Add(
+            item=self.showunused,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
 
         #
         # symbol size
         #
         row += 1
-        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Symbol size:"))
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Symbol size:"))
         gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        symsize = int(UserSettings.Get(group='gcpman', key='symbol', subkey='size'))
+        symsize = int(
+            UserSettings.Get(
+                group='gcpman',
+                key='symbol',
+                subkey='size'))
         sizeWin = wx.SpinCtrl(parent=panel, id=wx.ID_ANY,
-                             min=1, max=20)
+                              min=1, max=20)
         sizeWin.SetValue(symsize)
         self.symbol['size'] = sizeWin.GetId()
         gridSizer.Add(item=sizeWin,
                       flag=wx.ALIGN_RIGHT,
                       pos=(row, 1))
-        
+
         #
         # symbol width
         #
         row += 1
-        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Line width:"))
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Line width:"))
         gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        width = int(UserSettings.Get(group='gcpman', key='symbol', subkey='width'))
+        width = int(
+            UserSettings.Get(
+                group='gcpman',
+                key='symbol',
+                subkey='width'))
         widWin = wx.SpinCtrl(parent=panel, id=wx.ID_ANY,
                              min=1, max=10)
         widWin.SetValue(width)
@@ -2572,7 +2823,7 @@ class GrSettingsDialog(wx.Dialog):
                       flag=wx.ALIGN_RIGHT,
                       pos=(row, 1))
         gridSizer.AddGrowableCol(1)
-        
+
         boxSizer.Add(item=gridSizer, flag=wx.EXPAND)
         sizer.Add(item=boxSizer, flag=wx.EXPAND | wx.ALL, border=5)
 
@@ -2580,39 +2831,72 @@ class GrSettingsDialog(wx.Dialog):
         # maps to display
         #
         # source map to display
-        self.srcselection = Select(panel, id=wx.ID_ANY,
-                                   size=globalvar.DIALOG_GSELECT_SIZE, type='maptype', updateOnPopup = False)
+        self.srcselection = Select(
+            panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            type='maptype',
+            updateOnPopup=False)
         self.parent.grwiz.SwitchEnv('source')
         self.srcselection.SetElementList(maptype)
         # filter out all maps not in group
-        self.srcselection.tcp.GetElementList(elements = self.parent.src_maps)
+        self.srcselection.tcp.GetElementList(elements=self.parent.src_maps)
 
         # target map(s) to display
         self.parent.grwiz.SwitchEnv('target')
-        self.tgtrastselection = Select(panel, id=wx.ID_ANY,
-                                   size=globalvar.DIALOG_GSELECT_SIZE, type='raster', updateOnPopup = False)
+        self.tgtrastselection = Select(
+            panel, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
+            type='raster', updateOnPopup=False)
         self.tgtrastselection.SetElementList('cell')
         self.tgtrastselection.GetElementList()
 
-        self.tgtvectselection = Select(panel, id=wx.ID_ANY,
-                                   size=globalvar.DIALOG_GSELECT_SIZE, type='vector', updateOnPopup = False)
+        self.tgtvectselection = Select(
+            panel, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
+            type='vector', updateOnPopup=False)
         self.tgtvectselection.SetElementList('vector')
         self.tgtvectselection.GetElementList()
 
-        sizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY, label=_('Select source map to display:')),
-                       proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
-        sizer.Add(item=self.srcselection, proportion=0, 
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        sizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_('Select source map to display:')),
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        sizer.Add(
+            item=self.srcselection,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
         self.srcselection.SetValue(src_map)
-        sizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY, label=_('Select target raster map to display:')),
-                       proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
-        sizer.Add(item=self.tgtrastselection, proportion=0, 
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        sizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_('Select target raster map to display:')),
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        sizer.Add(
+            item=self.tgtrastselection,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
         self.tgtrastselection.SetValue(tgt_map['raster'])
-        sizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY, label=_('Select target vector map to display:')),
-                       proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
-        sizer.Add(item=self.tgtvectselection, proportion=0, 
-                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        sizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_('Select target vector map to display:')),
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        sizer.Add(
+            item=self.tgtvectselection,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
         self.tgtvectselection.SetValue(tgt_map['vector'])
 
         # bindings
@@ -2623,7 +2907,7 @@ class GrSettingsDialog(wx.Dialog):
         self.tgtvectselection.Bind(wx.EVT_TEXT, self.OnTgtVectSelection)
 
         panel.SetSizer(sizer)
-        
+
         return panel
 
     def __CreateRectificationPage(self, notebook):
@@ -2635,40 +2919,65 @@ class GrSettingsDialog(wx.Dialog):
         sizer = wx.BoxSizer(wx.VERTICAL)
 
         # transformation order
-        self.rb_grorder = wx.RadioBox(parent=panel, id=wx.ID_ANY,
-                                       label=" %s " % _("Select rectification order"),
-                                       choices=[_('1st order'), _('2nd order'), _('3rd order')],
-                                       majorDimension=wx.RA_SPECIFY_COLS)
+        self.rb_grorder = wx.RadioBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Select rectification order"),
+            choices=[
+                _('1st order'),
+                _('2nd order'),
+                _('3rd order')],
+            majorDimension=wx.RA_SPECIFY_COLS)
         sizer.Add(item=self.rb_grorder, proportion=0,
-                       flag=wx.EXPAND | wx.ALL, border=5)
+                  flag=wx.EXPAND | wx.ALL, border=5)
         self.rb_grorder.SetSelection(self.parent.gr_order - 1)
 
         # interpolation method
         gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
-        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY, label=_('Select interpolation method:')),
-                       pos=(0,0), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_('Select interpolation method:')),
+            pos=(
+                0,
+                0),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
         self.grmethod = wx.Choice(parent=panel, id=wx.ID_ANY,
-                                  choices = self.methods)
-        gridSizer.Add(item=self.grmethod, pos=(0,1),
-                       flag=wx.ALIGN_RIGHT, border=5)
+                                  choices=self.methods)
+        gridSizer.Add(item=self.grmethod, pos=(0, 1),
+                      flag=wx.ALIGN_RIGHT, border=5)
         self.grmethod.SetStringSelection(self.parent.gr_method)
         gridSizer.AddGrowableCol(1)
         sizer.Add(item=gridSizer, flag=wx.EXPAND | wx.ALL, border=5)
 
         # clip to region
-        self.check = wx.CheckBox(parent=panel, id=wx.ID_ANY,
-                                label=_("clip to computational region in target location"))
+        self.check = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "clip to computational region in target location"))
         sizer.Add(item=self.check, proportion=0,
-                       flag=wx.EXPAND | wx.ALL, border=5)
+                  flag=wx.EXPAND | wx.ALL, border=5)
         self.check.SetValue(self.parent.clip_to_region)
 
         # extension
-        sizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY, label=_('Extension for output maps:')),
-                       proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
-        self.ext_txt = wx.TextCtrl(parent=panel, id=wx.ID_ANY, value="", size=(350,-1))
+        sizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_('Extension for output maps:')),
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        self.ext_txt = wx.TextCtrl(
+            parent=panel, id=wx.ID_ANY, value="", size=(
+                350, -1))
         self.ext_txt.SetValue(self.parent.extension)
-        sizer.Add(item=self.ext_txt,
-                       proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        sizer.Add(
+            item=self.ext_txt,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
 
         # bindings
         self.ext_txt.Bind(wx.EVT_TEXT, self.OnExtension)
@@ -2677,7 +2986,7 @@ class GrSettingsDialog(wx.Dialog):
         self.Bind(wx.EVT_CHECKBOX, self.OnClipRegion, self.check)
 
         panel.SetSizer(sizer)
-        
+
         return panel
 
     def OnHighlight(self, event):
@@ -2689,36 +2998,36 @@ class GrSettingsDialog(wx.Dialog):
             self.parent.highest_only = False
             self.rmsWin.Enable()
 
-    def OnSDFactor(self,event):
+    def OnSDFactor(self, event):
         """New factor for RMS threshold = M + SD * factor"""
         try:
             self.sdfactor = float(self.rmsWin.GetValue())
         except ValueError:
             return
         if self.sdfactor <= 0:
-            GError(parent = self,
+            GError(parent=self,
                    message=_('RMS threshold factor must be > 0'))
         elif self.sdfactor < 1:
-            GError(parent = self,
+            GError(parent=self,
                    message=_('RMS threshold factor is < 1\n'
                              'Too many points might be highlighted'))
-        
-    def OnSrcSelection(self,event):
+
+    def OnSrcSelection(self, event):
         """Source map to display selected"""
         global src_map
 
         tmp_map = self.srcselection.GetValue()
-        
+
         if not tmp_map == '' and not tmp_map == src_map:
             self.new_src_map = tmp_map
 
-    def OnTgtRastSelection(self,event):
+    def OnTgtRastSelection(self, event):
         """Target map to display selected"""
         global tgt_map
 
         self.new_tgt_map['raster'] = self.tgtrastselection.GetValue()
 
-    def OnTgtVectSelection(self,event):
+    def OnTgtVectSelection(self, event):
         """Target map to display selected"""
         global tgt_map
 
@@ -2729,7 +3038,7 @@ class GrSettingsDialog(wx.Dialog):
 
     def OnClipRegion(self, event):
         self.parent.clip_to_region = event.IsChecked()
-        
+
     def OnExtension(self, event):
         self.parent.extension = self.ext_txt.GetValue()
 
@@ -2740,32 +3049,60 @@ class GrSettingsDialog(wx.Dialog):
 
         layers = None
 
-        UserSettings.Set(group = 'gcpman', key = 'rms', subkey = 'highestonly',
-                         value = self.highlighthighest.GetValue())
-        
+        UserSettings.Set(group='gcpman', key='rms', subkey='highestonly',
+                         value=self.highlighthighest.GetValue())
+
         if self.sdfactor > 0:
             UserSettings.Set(group='gcpman', key='rms', subkey='sdfactor',
                              value=self.sdfactor)
-            
+
             self.parent.sdfactor = self.sdfactor
             if self.parent.rmsthresh > 0:
                 self.parent.rmsthresh = self.parent.rmsmean + self.parent.sdfactor * self.parent.rmssd
-        
-        UserSettings.Set(group='gcpman', key='symbol', subkey='color',
-                         value=tuple(wx.FindWindowById(self.symbol['color']).GetColour()))
-        UserSettings.Set(group='gcpman', key='symbol', subkey='hcolor',
-                         value=tuple(wx.FindWindowById(self.symbol['hcolor']).GetColour()))
-        UserSettings.Set(group='gcpman', key='symbol', subkey='scolor',
-                         value=tuple(wx.FindWindowById(self.symbol['scolor']).GetColour()))
-        UserSettings.Set(group='gcpman', key='symbol', subkey='ucolor',
-                         value=tuple(wx.FindWindowById(self.symbol['ucolor']).GetColour()))
+
+        UserSettings.Set(
+            group='gcpman',
+            key='symbol',
+            subkey='color',
+            value=tuple(
+                wx.FindWindowById(
+                    self.symbol['color']).GetColour()))
+        UserSettings.Set(
+            group='gcpman',
+            key='symbol',
+            subkey='hcolor',
+            value=tuple(
+                wx.FindWindowById(
+                    self.symbol['hcolor']).GetColour()))
+        UserSettings.Set(
+            group='gcpman',
+            key='symbol',
+            subkey='scolor',
+            value=tuple(
+                wx.FindWindowById(
+                    self.symbol['scolor']).GetColour()))
+        UserSettings.Set(
+            group='gcpman',
+            key='symbol',
+            subkey='ucolor',
+            value=tuple(
+                wx.FindWindowById(
+                    self.symbol['ucolor']).GetColour()))
         UserSettings.Set(group='gcpman', key='symbol', subkey='unused',
                          value=self.showunused.GetValue())
-        UserSettings.Set(group='gcpman', key='symbol', subkey='size',
-                         value=wx.FindWindowById(self.symbol['size']).GetValue())
-        UserSettings.Set(group='gcpman', key='symbol', subkey='width',
-                         value=wx.FindWindowById(self.symbol['width']).GetValue())
-        
+        UserSettings.Set(
+            group='gcpman',
+            key='symbol',
+            subkey='size',
+            value=wx.FindWindowById(
+                self.symbol['size']).GetValue())
+        UserSettings.Set(
+            group='gcpman',
+            key='symbol',
+            subkey='width',
+            value=wx.FindWindowById(
+                self.symbol['width']).GetValue())
+
         srcrender = False
         srcrenderVector = False
         tgtrender = False
@@ -2775,7 +3112,7 @@ class GrSettingsDialog(wx.Dialog):
             # remove old layer
             layers = self.parent.grwiz.SrcMap.GetListOfLayers()
             self.parent.grwiz.SrcMap.DeleteLayer(layers[0])
-            
+
             src_map = self.new_src_map
             if maptype == 'raster':
                 cmdlist = ['d.rast', 'map=%s' % src_map]
@@ -2785,8 +3122,9 @@ class GrSettingsDialog(wx.Dialog):
                 srcrenderVector = True
             self.parent.grwiz.SwitchEnv('source')
             name, found = utils.GetLayerNameFromCmd(cmdlist)
-            self.parent.grwiz.SrcMap.AddLayer(ltype=maptype, command=cmdlist, active=True,
-                              name=name, hidden=False, opacity=1.0, render=False)
+            self.parent.grwiz.SrcMap.AddLayer(
+                ltype=maptype, command=cmdlist, active=True, name=name,
+                hidden=False, opacity=1.0, render=False)
 
             self.parent.grwiz.SwitchEnv('target')
 
@@ -2798,7 +3136,7 @@ class GrSettingsDialog(wx.Dialog):
                 self.parent.grwiz.TgtMap.DeleteLayer(layers[0])
                 del layers[0]
                 layers = self.parent.grwiz.TgtMap.GetListOfLayers()
-            #self.parent.grwiz.TgtMap.DeleteAllLayers()
+            # self.parent.grwiz.TgtMap.DeleteAllLayers()
             reload_target = True
             tgt_map['raster'] = self.new_tgt_map['raster']
             tgt_map['vector'] = self.new_tgt_map['vector']
@@ -2806,16 +3144,18 @@ class GrSettingsDialog(wx.Dialog):
             if tgt_map['raster'] != '':
                 cmdlist = ['d.rast', 'map=%s' % tgt_map['raster']]
                 name, found = utils.GetLayerNameFromCmd(cmdlist)
-                self.parent.grwiz.TgtMap.AddLayer(ltype='raster', command=cmdlist, active=True,
-                                  name=name, hidden=False, opacity=1.0, render=False)
+                self.parent.grwiz.TgtMap.AddLayer(
+                    ltype='raster', command=cmdlist, active=True, name=name,
+                    hidden=False, opacity=1.0, render=False)
 
                 tgtrender = True
 
             if tgt_map['vector'] != '':
                 cmdlist = ['d.vect', 'map=%s' % tgt_map['vector']]
                 name, found = utils.GetLayerNameFromCmd(cmdlist)
-                self.parent.grwiz.TgtMap.AddLayer(ltype='vector', command=cmdlist, active=True,
-                                  name=name, hidden=False, opacity=1.0, render=False)
+                self.parent.grwiz.TgtMap.AddLayer(
+                    ltype='vector', command=cmdlist, active=True, name=name,
+                    hidden=False, opacity=1.0, render=False)
 
                 tgtrenderVector = True
 
@@ -2826,7 +3166,7 @@ class GrSettingsDialog(wx.Dialog):
                 self.parent._mgr.Update()
                 self.parent.activemap.SetSelection(0)
                 self.parent.activemap.Enable(False)
-                self.parent.GetMapToolbar().Enable('zoommenu', enable = False)
+                self.parent.GetMapToolbar().Enable('zoommenu', enable=False)
         else:
             if self.parent.show_target == False:
                 self.parent.show_target = True
@@ -2834,11 +3174,16 @@ class GrSettingsDialog(wx.Dialog):
                 self.parent._mgr.Update()
                 self.parent.activemap.SetSelection(0)
                 self.parent.activemap.Enable(True)
-                self.parent.GetMapToolbar().Enable('zoommenu', enable = True)
-                self.parent.TgtMapWindow.ZoomToMap(layers = self.parent.TgtMap.GetListOfLayers())
-        
-        self.parent.UpdateColours(srcrender, srcrenderVector, tgtrender, tgtrenderVector)
-        self.parent.SetSettings()        
+                self.parent.GetMapToolbar().Enable('zoommenu', enable=True)
+                self.parent.TgtMapWindow.ZoomToMap(
+                    layers=self.parent.TgtMap.GetListOfLayers())
+
+        self.parent.UpdateColours(
+            srcrender,
+            srcrenderVector,
+            tgtrender,
+            tgtrenderVector)
+        self.parent.SetSettings()
 
     def OnSave(self, event):
         """Button 'Save' pressed"""
@@ -2847,13 +3192,15 @@ class GrSettingsDialog(wx.Dialog):
         UserSettings.ReadSettingsFile(settings=fileSettings)
         fileSettings['gcpman'] = UserSettings.Get(group='gcpman')
         file = UserSettings.SaveToFile(fileSettings)
-        self.parent._giface.WriteLog(_('GCP Manager settings saved to file \'%s\'.') % file)
-        #self.Close()
+        self.parent._giface.WriteLog(
+            _('GCP Manager settings saved to file \'%s\'.') %
+            file)
+        # self.Close()
 
     def OnApply(self, event):
         """Button 'Apply' pressed"""
         self.UpdateSettings()
-        #self.Close()
+        # self.Close()
 
     def OnClose(self, event):
         """Button 'Cancel' pressed"""
diff --git a/gui/wxpython/gcp/mapdisplay.py b/gui/wxpython/gcp/mapdisplay.py
index a6f2226..85c06c2 100644
--- a/gui/wxpython/gcp/mapdisplay.py
+++ b/gui/wxpython/gcp/mapdisplay.py
@@ -23,14 +23,14 @@ from core import globalvar
 import wx
 import wx.aui
 
-from mapdisp.toolbars  import MapToolbar
-from gcp.toolbars      import GCPDisplayToolbar, GCPManToolbar
-from mapdisp.gprint    import PrintOptions
-from core.gcmd         import GMessage
+from mapdisp.toolbars import MapToolbar
+from gcp.toolbars import GCPDisplayToolbar, GCPManToolbar
+from mapdisp.gprint import PrintOptions
+from core.gcmd import GMessage
 from core.utils import _
-from gui_core.dialogs  import GetImageHandlers, ImageSizeDialog
-from gui_core.mapdisp  import SingleMapFrame
-from core.settings     import UserSettings
+from gui_core.dialogs import GetImageHandlers, ImageSizeDialog
+from gui_core.mapdisp import SingleMapFrame
+from core.settings import UserSettings
 from mapwin.buffered import BufferedMapWindow
 from mapwin.base import MapWindowProperties
 
@@ -40,10 +40,12 @@ import gcp.statusbar as sbgcp
 # for standalone app
 cmdfilename = None
 
+
 class MapFrame(SingleMapFrame):
     """Main frame for map display window. Drawing takes place in
     child double buffered drawing window.
     """
+
     def __init__(self, parent, giface,
                  title=_("GRASS GIS Manage Ground Control Points"),
                  toolbars=["gcpdisp"], Map=None, auimgr=None,
@@ -58,9 +60,16 @@ class MapFrame(SingleMapFrame):
         :param auimgs: AUI manager
         :param kwargs: wx.Frame attribures
         """
-        
-        SingleMapFrame.__init__(self, parent = parent, giface = giface, title = title,
-                              Map = Map, auimgr = auimgr, name = name, **kwargs)
+
+        SingleMapFrame.__init__(
+            self,
+            parent=parent,
+            giface=giface,
+            title=title,
+            Map=Map,
+            auimgr=auimgr,
+            name=name,
+            **kwargs)
 
         self._giface = giface
         # properties are shared in other objects, so defining here
@@ -76,15 +85,15 @@ class MapFrame(SingleMapFrame):
 
         self.activemap = self.toolbars['gcpdisp'].togglemap
         self.activemap.SetSelection(0)
-        
-        self.SrcMap        = self.grwiz.SrcMap       # instance of render.Map
-        self.TgtMap        = self.grwiz.TgtMap       # instance of render.Map
+
+        self.SrcMap = self.grwiz.SrcMap       # instance of render.Map
+        self.TgtMap = self.grwiz.TgtMap       # instance of render.Map
         self._mgr.SetDockSizeConstraint(0.5, 0.5)
 
         #
         # Add statusbar
         #
-        
+
         # items for choice
         self.statusbarItems = [sb.SbCoordinates,
                                sb.SbRegionExtent,
@@ -96,32 +105,35 @@ class MapFrame(SingleMapFrame):
                                sb.SbProjection,
                                sbgcp.SbGoToGCP,
                                sbgcp.SbRMSError]
-                            
-        
+
         # create statusbar and its manager
-        statusbar = self.CreateStatusBar(number = 4, style = 0)
+        statusbar = self.CreateStatusBar(number=4, style=0)
         statusbar.SetStatusWidths([-5, -2, -1, -1])
-        self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
-        
+        self.statusbarManager = sb.SbManager(
+            mapframe=self, statusbar=statusbar)
+
         # fill statusbar manager
-        self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
-        self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
-        self.statusbarManager.AddStatusbarItem(sb.SbRender(self, statusbar = statusbar, position = 3))
-        
-        self.statusbarManager.SetMode(8) # goto GCP
+        self.statusbarManager.AddStatusbarItemsByClass(
+            self.statusbarItems, mapframe=self, statusbar=statusbar)
+        self.statusbarManager.AddStatusbarItem(
+            sb.SbMask(self, statusbar=statusbar, position=2))
+        self.statusbarManager.AddStatusbarItem(
+            sb.SbRender(self, statusbar=statusbar, position=3))
+
+        self.statusbarManager.SetMode(8)  # goto GCP
 
         #
         # Init map display (buffered DC & set default cursor)
         #
         self.grwiz.SwitchEnv('source')
-        self.SrcMapWindow = BufferedMapWindow(parent=self, giface=self._giface, id=wx.ID_ANY,
-                                              properties=self.mapWindowProperties,
-                                              Map=self.SrcMap)
+        self.SrcMapWindow = BufferedMapWindow(
+            parent=self, giface=self._giface, id=wx.ID_ANY,
+            properties=self.mapWindowProperties, Map=self.SrcMap)
 
         self.grwiz.SwitchEnv('target')
-        self.TgtMapWindow = BufferedMapWindow(parent=self, giface=self._giface, id=wx.ID_ANY,
-                                              properties=self.mapWindowProperties,
-                                              Map=self.TgtMap)
+        self.TgtMapWindow = BufferedMapWindow(
+            parent=self, giface=self._giface, id=wx.ID_ANY,
+            properties=self.mapWindowProperties, Map=self.TgtMap)
         self.MapWindow = self.SrcMapWindow
         self.Map = self.SrcMap
         self._setUpMapWindow(self.SrcMapWindow)
@@ -139,9 +151,9 @@ class MapFrame(SingleMapFrame):
         #
         # initialize region values
         #
-        self._initMap(Map = self.SrcMap) 
-        self._initMap(Map = self.TgtMap) 
-        
+        self._initMap(Map=self.SrcMap)
+        self._initMap(Map=self.TgtMap)
+
         self.GetMapToolbar().SelectDefault()
 
         #
@@ -149,29 +161,30 @@ class MapFrame(SingleMapFrame):
         #
         self.activemap.Bind(wx.EVT_CHOICE, self.OnUpdateActive)
         self.Bind(wx.EVT_SIZE, self.OnSize)
-        
+
         #
         # Update fancy gui style
         #
-        # AuiManager wants a CentrePane, workaround to get two equally sized windows
+        # AuiManager wants a CentrePane, workaround to get two equally sized
+        # windows
         self.list = self.CreateGCPList()
 
         #self.SrcMapWindow.SetSize((300, 300))
         #self.TgtMapWindow.SetSize((300, 300))
         self.list.SetSize((100, 150))
         self._mgr.AddPane(self.list, wx.aui.AuiPaneInfo().
-                  Name("gcplist").Caption(_("GCP List")).LeftDockable(False).
-                  RightDockable(False).PinButton().FloatingSize((600,200)).
-                  CloseButton(False).DestroyOnClose(True).
-                  Top().Layer(1).MinSize((200,100)))
+                          Name("gcplist").Caption(_("GCP List")).LeftDockable(False).
+                          RightDockable(False).PinButton().FloatingSize((600, 200)).
+                          CloseButton(False).DestroyOnClose(True).
+                          Top().Layer(1).MinSize((200, 100)))
         self._mgr.AddPane(self.SrcMapWindow, wx.aui.AuiPaneInfo().
-                  Name("source").Caption(_("Source Display")).Dockable(False).
-                  CloseButton(False).DestroyOnClose(True).Floatable(False).
-                  Centre())
+                          Name("source").Caption(_("Source Display")).Dockable(False).
+                          CloseButton(False).DestroyOnClose(True).Floatable(False).
+                          Centre())
         self._mgr.AddPane(self.TgtMapWindow, wx.aui.AuiPaneInfo().
-                  Name("target").Caption(_("Target Display")).Dockable(False).
-                  CloseButton(False).DestroyOnClose(True).Floatable(False).
-                  Right().Layer(0))
+                          Name("target").Caption(_("Target Display")).Dockable(False).
+                          CloseButton(False).DestroyOnClose(True).Floatable(False).
+                          Right().Layer(0))
 
         srcwidth, srcheight = self.SrcMapWindow.GetSize()
         tgtwidth, tgtheight = self.TgtMapWindow.GetSize()
@@ -192,7 +205,7 @@ class MapFrame(SingleMapFrame):
         # Init print module and classes
         #
         self.printopt = PrintOptions(self, self.MapWindow)
-        
+
         #
         # Initialization of digitization tool
         #
@@ -201,7 +214,7 @@ class MapFrame(SingleMapFrame):
         # set active map
         self.MapWindow = self.SrcMapWindow
         self.Map = self.SrcMap
-        
+
         # do not init zoom history here, that happens when zooming to map(s)
 
         #
@@ -213,7 +226,7 @@ class MapFrame(SingleMapFrame):
         self.dialogs['barscale'] = None
         self.dialogs['legend'] = None
 
-        self.decorationDialog = None # decoration/overlays
+        self.decorationDialog = None  # decoration/overlays
 
         # doing nice things in statusbar when other things are ready
         self.statusbarManager.Update()
@@ -231,7 +244,7 @@ class MapFrame(SingleMapFrame):
 
     def AddToolbar(self, name):
         """Add defined toolbar to the window
-        
+
         Currently known toolbars are:
          - 'map'     - basic map toolbar
          - 'vdigit'  - vector digitizer
@@ -254,7 +267,8 @@ class MapFrame(SingleMapFrame):
 
         # GCP display
         elif name == "gcpdisp":
-            self.toolbars['gcpdisp'] = GCPDisplayToolbar(self, self._toolSwitcher)
+            self.toolbars['gcpdisp'] = GCPDisplayToolbar(
+                self, self._toolSwitcher)
 
             self._mgr.AddPane(self.toolbars['gcpdisp'],
                               wx.aui.AuiPaneInfo().
@@ -265,7 +279,7 @@ class MapFrame(SingleMapFrame):
                               CloseButton(False).Layer(2))
 
             if self.show_target == False:
-                self.toolbars['gcpdisp'].Enable('zoommenu', enable = False)
+                self.toolbars['gcpdisp'].Enable('zoommenu', enable=False)
 
             self.toolbars['gcpman'] = GCPManToolbar(self)
 
@@ -276,7 +290,7 @@ class MapFrame(SingleMapFrame):
                               LeftDockable(False).RightDockable(False).
                               BottomDockable(False).TopDockable(True).
                               CloseButton(False).Layer(2))
-            
+
         self._mgr.Update()
 
     def OnUpdateProgress(self, event):
@@ -284,9 +298,9 @@ class MapFrame(SingleMapFrame):
         Update progress bar info
         """
         self.GetProgressBar().UpdateProgress(event.layer, event.map)
-        
+
         event.Skip()
-        
+
     def OnFocus(self, event):
         """
         Change choicebook page to match display.
@@ -304,8 +318,8 @@ class MapFrame(SingleMapFrame):
     def OnDraw(self, event):
         """Re-display current map composition
         """
-        self.MapWindow.UpdateMap(render = False)
-        
+        self.MapWindow.UpdateMap(render=False)
+
     def OnRender(self, event):
         """Re-render map composition (each map layer)
         """
@@ -318,13 +332,13 @@ class MapFrame(SingleMapFrame):
         self.SrcMapWindow.UpdateMap(render=True)
         if self.show_target:
             self.TgtMapWindow.UpdateMap(render=True)
-        
+
         # update statusbar
         self.StatusbarUpdate()
 
     def OnPointer(self, event):
         """Pointer button clicked
-        """      
+        """
         self.SrcMapWindow.SetModePointer()
         self.TgtMapWindow.SetModePointer()
         # change the default cursor
@@ -364,8 +378,8 @@ class MapFrame(SingleMapFrame):
         """
         img = self.MapWindow.img
         if not img:
-            GMessage(parent = self,
-                     message = _("Nothing to render (empty map). Operation canceled."))
+            GMessage(parent=self, message=_(
+                "Nothing to render (empty map). Operation canceled."))
             return
         filetype, ltype = GetImageHandlers(img)
 
@@ -377,29 +391,29 @@ class MapFrame(SingleMapFrame):
             return
         width, height = dlg.GetValues()
         dlg.Destroy()
-        
+
         # get filename
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to save the image "
-                                        "(no need to add extension)"),
-                            wildcard = filetype,
+        dlg = wx.FileDialog(parent=self,
+                            message=_("Choose a file name to save the image "
+                                      "(no need to add extension)"),
+                            wildcard=filetype,
                             style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
-        
+
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
                 dlg.Destroy()
                 return
-            
+
             base, ext = os.path.splitext(path)
             fileType = ltype[dlg.GetFilterIndex()]['type']
-            extType  = ltype[dlg.GetFilterIndex()]['ext']
+            extType = ltype[dlg.GetFilterIndex()]['ext']
             if ext != extType:
                 path = base + '.' + extType
-            
+
             self.MapWindow.SaveToFile(path, fileType,
                                       width, height)
-            
+
         dlg.Destroy()
 
     def PrintMenu(self, event):
@@ -430,25 +444,25 @@ class MapFrame(SingleMapFrame):
         """
         Set display extents to match selected raster map (ignore NULLs)
         """
-        self.MapWindow.ZoomToMap(ignoreNulls = True)
-        
+        self.MapWindow.ZoomToMap(ignoreNulls=True)
+
     def OnZoomToSaved(self, event):
         """Set display geometry to match extents in
         saved region file
         """
         self.MapWindow.SetRegion(zoomOnly=True)
-        
+
     def OnDisplayToWind(self, event):
         """Set computational region (WIND file) to match display
         extents
         """
         self.MapWindow.DisplayToWind()
- 
+
     def SaveDisplayRegion(self, event):
         """Save display extents to named region file.
         """
         self.MapWindow.SaveDisplayRegion()
-        
+
     def OnZoomMenu(self, event):
         """Popup Zoom menu
         """
@@ -456,11 +470,13 @@ class MapFrame(SingleMapFrame):
         zoommenu = wx.Menu()
         # Add items to the menu
 
-        zoomwind = wx.MenuItem(zoommenu, wx.ID_ANY, _('Zoom to computational region (set with g.region)'))
+        zoomwind = wx.MenuItem(zoommenu, wx.ID_ANY, _(
+            'Zoom to computational region (set with g.region)'))
         zoommenu.AppendItem(zoomwind)
         self.Bind(wx.EVT_MENU, self.OnZoomToWind, zoomwind)
 
-        zoomdefault = wx.MenuItem(zoommenu, wx.ID_ANY, _('Zoom to default region'))
+        zoomdefault = wx.MenuItem(
+            zoommenu, wx.ID_ANY, _('Zoom to default region'))
         zoommenu.AppendItem(zoomdefault)
         self.Bind(wx.EVT_MENU, self.OnZoomToDefault, zoomdefault)
 
@@ -468,11 +484,13 @@ class MapFrame(SingleMapFrame):
         zoommenu.AppendItem(zoomsaved)
         self.Bind(wx.EVT_MENU, self.OnZoomToSaved, zoomsaved)
 
-        savewind = wx.MenuItem(zoommenu, wx.ID_ANY, _('Set computational region from display'))
+        savewind = wx.MenuItem(zoommenu, wx.ID_ANY, _(
+            'Set computational region from display'))
         zoommenu.AppendItem(savewind)
         self.Bind(wx.EVT_MENU, self.OnDisplayToWind, savewind)
 
-        savezoom = wx.MenuItem(zoommenu, wx.ID_ANY, _('Save display geometry to named region'))
+        savezoom = wx.MenuItem(zoommenu, wx.ID_ANY, _(
+            'Save display geometry to named region'))
         zoommenu.AppendItem(savezoom)
         self.Bind(wx.EVT_MENU, self.SaveDisplayRegion, savezoom)
 
@@ -480,13 +498,12 @@ class MapFrame(SingleMapFrame):
         # will be called before PopupMenu returns.
         self.PopupMenu(zoommenu)
         zoommenu.Destroy()
-        
-        
+
     def IsStandalone(self):
         """Check if Map display is standalone"""
         # we do not know and we do not care, so always False
         return True
-    
+
     def GetLayerManager(self):
         """Get reference to Layer Manager
 
@@ -496,13 +513,13 @@ class MapFrame(SingleMapFrame):
 
     def GetSrcWindow(self):
         return self.SrcMapWindow
-        
+
     def GetTgtWindow(self):
         return self.TgtMapWindow
-    
+
     def GetShowTarget(self):
         return self.show_target
-        
+
     def GetMapToolbar(self):
         """Returns toolbar with zooming tools"""
         return self.toolbars['gcpdisp']
diff --git a/gui/wxpython/gcp/statusbar.py b/gui/wxpython/gcp/statusbar.py
index 8389d14..a197ad0 100644
--- a/gui/wxpython/gcp/statusbar.py
+++ b/gui/wxpython/gcp/statusbar.py
@@ -30,6 +30,7 @@ class SbGoToGCP(SbItem):
     Requires MapFrame.GetSrcWindow, MapFrame.GetTgtWindow,
     MapFrame.GetListCtrl, MapFrame.GetMapCoordList.
     """
+
     def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'gotoGCP'
@@ -112,6 +113,7 @@ class SbRMSError(SbTextItem):
 
     Requires MapFrame.GetFwdError, MapFrame.GetBkwError.
     """
+
     def __init__(self, mapframe, statusbar, position=0):
         SbTextItem.__init__(self, mapframe, statusbar, position)
         self.name = 'RMSError'
diff --git a/gui/wxpython/gcp/toolbars.py b/gui/wxpython/gcp/toolbars.py
index b5cd686..a37049d 100644
--- a/gui/wxpython/gcp/toolbars.py
+++ b/gui/wxpython/gcp/toolbars.py
@@ -20,7 +20,7 @@ import sys
 
 import wx
 
-from core              import globalvar
+from core import globalvar
 from core.utils import _
 from gui_core.toolbars import BaseToolbar, BaseIcons
 from icons.icon import MetaIcon
@@ -31,32 +31,33 @@ class GCPManToolbar(BaseToolbar):
 
     :param parent: reference to GCP widget
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
     def _toolbarData(self):
         icons = {
-            'gcpAdd'     : MetaIcon(img = 'gcp-add',
-                                    label = _('Add new GCP to the list')),
-            'gcpDelete'  : MetaIcon(img = 'gcp-delete',
-                                    label = _('Delete selected GCP')),
-            'gcpClear'   : MetaIcon(img = 'gcp-remove',
-                                    label = _('Clear selected GCP')),
-            'gcpRms'     : MetaIcon(img = 'gcp-rms',
-                                    label = _('Recalculate RMS error')),
-            'georectify' : MetaIcon(img = 'georectify',
-                                    label = _('Georectify')),
-            'gcpSave'    : MetaIcon(img = 'gcp-save',
-                                    label = _('Save GCPs to POINTS file')),
-            'gcpReload'  : MetaIcon(img = 'reload',
-                                    label = _('Reload GCPs from POINTS file')),
-            }
-        
+            'gcpAdd': MetaIcon(img='gcp-add',
+                               label=_('Add new GCP to the list')),
+            'gcpDelete': MetaIcon(img='gcp-delete',
+                                  label=_('Delete selected GCP')),
+            'gcpClear': MetaIcon(img='gcp-remove',
+                                 label=_('Clear selected GCP')),
+            'gcpRms': MetaIcon(img='gcp-rms',
+                               label=_('Recalculate RMS error')),
+            'georectify': MetaIcon(img='georectify',
+                                   label=_('Georectify')),
+            'gcpSave': MetaIcon(img='gcp-save',
+                                label=_('Save GCPs to POINTS file')),
+            'gcpReload': MetaIcon(img='reload',
+                                  label=_('Reload GCPs from POINTS file')),
+        }
+
         return self._getToolbarData((('gcpAdd', icons["gcpAdd"],
                                       self.parent.AddGCP),
                                      ('gcpDelete', icons["gcpDelete"],
@@ -74,48 +75,57 @@ class GCPManToolbar(BaseToolbar):
                                      ('gcpReload', icons["gcpReload"],
                                       self.parent.ReloadGCPs))
                                     )
-    
+
+
 class GCPDisplayToolbar(BaseToolbar):
     """GCP Display toolbar
     """
+
     def __init__(self, parent, toolSwitcher):
         """GCP Display toolbar constructor
         """
         BaseToolbar.__init__(self, parent, toolSwitcher)
-        
+
         self.InitToolbar(self._toolbarData())
         self._default = self.gcpset
-        
+
         # add tool to toggle active map window
         self.togglemapid = wx.NewId()
-        self.togglemap = wx.Choice(parent = self, id = self.togglemapid,
-                                   choices = [_('source'), _('target')])
+        self.togglemap = wx.Choice(parent=self, id=self.togglemapid,
+                                   choices=[_('source'), _('target')])
 
         self.InsertControl(10, self.togglemap)
 
-        self.SetToolShortHelp(self.togglemapid, '%s %s %s' % (_('Set map canvas for '),
-                                                              BaseIcons["zoomBack"].GetLabel(),
-                                                              _(' / Zoom to map')))
+        self.SetToolShortHelp(
+            self.togglemapid, '%s %s %s' %
+            (_('Set map canvas for '),
+             BaseIcons["zoomBack"].GetLabel(),
+             _(' / Zoom to map')))
 
         for tool in (self.gcpset, self.pan, self.zoomin, self.zoomout):
-            self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
+            self.toolSwitcher.AddToolToGroup(
+                group='mouseUse', toolbar=self, tool=tool)
 
         # realize the toolbar
         self.Realize()
 
         self.EnableTool(self.zoomback, False)
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         icons = {
-            'gcpSet'    : MetaIcon(img = 'gcp-create',
-                                   label = _('Update GCP coordinates'),
-                                   desc = _('Update GCP coordinates)')),
-            'quit'      : BaseIcons['quit'].SetLabel(_('Quit georectification tool')),
-            'settings'  : BaseIcons['settings'].SetLabel( _('Georectifier settings')),
-            'help'      : BaseIcons['help'].SetLabel(_('Georectifier manual')),
-            }
-        
+            'gcpSet': MetaIcon(
+                img='gcp-create',
+                label=_('Update GCP coordinates'),
+                desc=_('Update GCP coordinates)')),
+            'quit': BaseIcons['quit'].SetLabel(
+                _('Quit georectification tool')),
+            'settings': BaseIcons['settings'].SetLabel(
+                _('Georectifier settings')),
+            'help': BaseIcons['help'].SetLabel(
+                _('Georectifier manual')),
+        }
+
         return self._getToolbarData((("displaymap", BaseIcons["display"],
                                       self.parent.OnDraw),
                                      ("rendermap", BaseIcons["render"],
diff --git a/gui/wxpython/gis_set.py b/gui/wxpython/gis_set.py
index ca5ef34..4a1187b 100644
--- a/gui/wxpython/gis_set.py
+++ b/gui/wxpython/gis_set.py
@@ -45,14 +45,20 @@ sys.stderr = codecs.getwriter('utf8')(sys.stderr)
 
 
 class GRASSStartup(wx.Frame):
+    exit_success = 0
+    # 2 is file not found from python interpreter
+    exit_user_requested = 5
+
     """GRASS start-up screen"""
-    def __init__(self, parent = None, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE):
+
+    def __init__(self, parent=None, id=wx.ID_ANY,
+                 style=wx.DEFAULT_FRAME_STYLE):
 
         #
         # GRASS variables
         #
-        self.gisbase  = os.getenv("GISBASE")
-        self.grassrc  = self._readGisRC()
+        self.gisbase = os.getenv("GISBASE")
+        self.grassrc = self._readGisRC()
         self.gisdbase = self.GetRCValue("GISDBASE")
 
         #
@@ -61,10 +67,10 @@ class GRASSStartup(wx.Frame):
         self.listOfLocations = []
         self.listOfMapsets = []
         self.listOfMapsetsSelectable = []
-        
-        wx.Frame.__init__(self, parent = parent, id = id, style = style)
-        
-        self.locale = wx.Locale(language = wx.LANGUAGE_DEFAULT)
+
+        wx.Frame.__init__(self, parent=parent, id=id, style=style)
+
+        self.locale = wx.Locale(language=wx.LANGUAGE_DEFAULT)
 
         # scroll panel was used here but not properly and is probably not need
         # as long as it is not high too much
@@ -78,17 +84,23 @@ class GRASSStartup(wx.Frame):
         # image
         try:
             if os.getenv('ISISROOT'):
-                name = os.path.join(globalvar.GUIDIR, "images", "startup_banner_isis.png")
+                name = os.path.join(
+                    globalvar.GUIDIR,
+                    "images",
+                    "startup_banner_isis.png")
             else:
-                name = os.path.join(globalvar.GUIDIR, "images", "startup_banner.png")
+                name = os.path.join(
+                    globalvar.GUIDIR, "images", "startup_banner.png")
             self.hbitmap = wx.StaticBitmap(self.panel, wx.ID_ANY,
-                                           wx.Bitmap(name = name,
-                                                     type = wx.BITMAP_TYPE_PNG))
+                                           wx.Bitmap(name=name,
+                                                     type=wx.BITMAP_TYPE_PNG))
         except:
-            self.hbitmap = wx.StaticBitmap(self.panel, wx.ID_ANY, wx.BitmapFromImage(wx.EmptyImage(530,150)))
+            self.hbitmap = wx.StaticBitmap(
+                self.panel, wx.ID_ANY, wx.BitmapFromImage(
+                    wx.EmptyImage(530, 150)))
 
         # labels
-        ### crashes when LOCATION doesn't exist
+        # crashes when LOCATION doesn't exist
         # get version & revision
         versionFile = open(os.path.join(globalvar.ETCDIR, "VERSIONNUMBER"))
         versionLine = versionFile.readline().rstrip('\n')
@@ -102,13 +114,16 @@ class GRASSStartup(wx.Frame):
         except ValueError:
             grassVersion = versionLine
             grassRevisionStr = ''
-        
-        self.gisdbase_box = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
-                                         label=" %s " % _("1. Select GRASS GIS database directory"))
-        self.location_box = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
-                                         label=" %s " % _("2. Select GRASS Location"))
-        self.mapset_box = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
-                                         label=" %s " % _("3. Select GRASS Mapset"))
+
+        self.gisdbase_box = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("1. Select GRASS GIS database directory"))
+        self.location_box = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("2. Select GRASS Location"))
+        self.mapset_box = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("3. Select GRASS Mapset"))
 
         self.lmessage = wx.StaticText(parent=self.panel)
         # It is not clear if all wx versions supports color, so try-except.
@@ -119,7 +134,7 @@ class GRASSStartup(wx.Frame):
             self.lmessage.SetForegroundColour(wx.Colour(255, 0, 0))
         except AttributeError:
             pass
-        
+
         self.gisdbase_panel = wx.Panel(parent=self.panel)
         self.location_panel = wx.Panel(parent=self.panel)
         self.mapset_panel = wx.Panel(parent=self.panel)
@@ -152,57 +167,62 @@ class GRASSStartup(wx.Frame):
             pass
 
         # buttons
-        self.bstart = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                label = _("Start &GRASS session"))
+        self.bstart = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                label=_("Start &GRASS session"))
         self.bstart.SetDefault()
-        self.bexit = wx.Button(parent = self.panel, id = wx.ID_EXIT)
+        self.bexit = wx.Button(parent=self.panel, id=wx.ID_EXIT)
         self.bstart.SetMinSize((180, self.bexit.GetSize()[1]))
-        self.bhelp = wx.Button(parent = self.panel, id = wx.ID_HELP)
-        self.bbrowse = wx.Button(parent = self.gisdbase_panel, id = wx.ID_ANY,
-                                 label = _("&Browse"))
-        self.bmapset = wx.Button(parent = self.mapset_panel, id = wx.ID_ANY,
-        # GTC New mapset
-                                 label = _("&New"))
+        self.bhelp = wx.Button(parent=self.panel, id=wx.ID_HELP)
+        self.bbrowse = wx.Button(parent=self.gisdbase_panel, id=wx.ID_ANY,
+                                 label=_("&Browse"))
+        self.bmapset = wx.Button(parent=self.mapset_panel, id=wx.ID_ANY,
+                                 # GTC New mapset
+                                 label=_("&New"))
         self.bmapset.SetToolTipString(
             _("Create a new Mapset in selected Location"))
-        self.bwizard = wx.Button(parent = self.location_panel, id = wx.ID_ANY,
-        # GTC New location
-                                 label = _("N&ew"))
-        self.bwizard.SetToolTipString(_("Create a new location using location wizard."
-                                        " After location is created successfully,"
-                                        " GRASS session is started."))
+        self.bwizard = wx.Button(parent=self.location_panel, id=wx.ID_ANY,
+                                 # GTC New location
+                                 label=_("N&ew"))
+        self.bwizard.SetToolTipString(
+            _(
+                "Create a new location using location wizard."
+                " After location is created successfully,"
+                " GRASS session is started."))
         self.rename_location_button = wx.Button(parent=self.location_panel, id=wx.ID_ANY,
-        # GTC Rename location
+                                                # GTC Rename location
                                                 label=_("Ren&ame"))
-        self.rename_location_button.SetToolTipString(_("Rename selected location"))
+        self.rename_location_button.SetToolTipString(
+            _("Rename selected location"))
         self.delete_location_button = wx.Button(parent=self.location_panel, id=wx.ID_ANY,
-        # GTC Delete location
+                                                # GTC Delete location
                                                 label=_("De&lete"))
-        self.delete_location_button.SetToolTipString(_("Delete selected location"))
+        self.delete_location_button.SetToolTipString(
+            _("Delete selected location"))
         self.rename_mapset_button = wx.Button(parent=self.mapset_panel, id=wx.ID_ANY,
-        # GTC Rename mapset
-                                                label=_("&Rename"))
+                                              # GTC Rename mapset
+                                              label=_("&Rename"))
         self.rename_mapset_button.SetToolTipString(_("Rename selected mapset"))
         self.delete_mapset_button = wx.Button(parent=self.mapset_panel, id=wx.ID_ANY,
-        # GTC Delete mapset
+                                              # GTC Delete mapset
                                               label=_("&Delete"))
         self.delete_mapset_button.SetToolTipString(_("Delete selected mapset"))
 
         # textinputs
-        self.tgisdbase = wx.TextCtrl(parent = self.gisdbase_panel, id = wx.ID_ANY, value = "", size = (300, -1),
-                                     style = wx.TE_PROCESS_ENTER)
+        self.tgisdbase = wx.TextCtrl(
+            parent=self.gisdbase_panel, id=wx.ID_ANY, value="", size=(
+                300, -1), style=wx.TE_PROCESS_ENTER)
 
         # Locations
-        self.lblocations = GListBox(parent = self.location_panel,
+        self.lblocations = GListBox(parent=self.location_panel,
                                     id=wx.ID_ANY, size=(180, 200),
-                                    choices = self.listOfLocations)
+                                    choices=self.listOfLocations)
         self.lblocations.SetColumnWidth(0, 180)
 
         # TODO: sort; but keep PERMANENT on top of list
         # Mapsets
-        self.lbmapsets = GListBox(parent = self.mapset_panel,
+        self.lbmapsets = GListBox(parent=self.mapset_panel,
                                   id=wx.ID_ANY, size=(180, 200),
-                                  choices = self.listOfMapsets)
+                                  choices=self.listOfMapsets)
         self.lbmapsets.SetColumnWidth(0, 180)
 
         # layout & properties, first do layout so everything is created
@@ -210,24 +230,24 @@ class GRASSStartup(wx.Frame):
         self._set_properties(grassVersion, grassRevisionStr)
 
         # events
-        self.bbrowse.Bind(wx.EVT_BUTTON,      self.OnBrowse)
-        self.bstart.Bind(wx.EVT_BUTTON,       self.OnStart)
-        self.bexit.Bind(wx.EVT_BUTTON,        self.OnExit)
-        self.bhelp.Bind(wx.EVT_BUTTON,        self.OnHelp)
-        self.bmapset.Bind(wx.EVT_BUTTON,      self.OnCreateMapset)
-        self.bwizard.Bind(wx.EVT_BUTTON,      self.OnWizard)
-        
+        self.bbrowse.Bind(wx.EVT_BUTTON, self.OnBrowse)
+        self.bstart.Bind(wx.EVT_BUTTON, self.OnStart)
+        self.bexit.Bind(wx.EVT_BUTTON, self.OnExit)
+        self.bhelp.Bind(wx.EVT_BUTTON, self.OnHelp)
+        self.bmapset.Bind(wx.EVT_BUTTON, self.OnCreateMapset)
+        self.bwizard.Bind(wx.EVT_BUTTON, self.OnWizard)
+
         self.rename_location_button.Bind(wx.EVT_BUTTON, self.RenameLocation)
         self.delete_location_button.Bind(wx.EVT_BUTTON, self.DeleteLocation)
         self.rename_mapset_button.Bind(wx.EVT_BUTTON, self.RenameMapset)
         self.delete_mapset_button.Bind(wx.EVT_BUTTON, self.DeleteMapset)
-        
+
         self.lblocations.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelectLocation)
-        self.lbmapsets.Bind(wx.EVT_LIST_ITEM_SELECTED,   self.OnSelectMapset)
+        self.lbmapsets.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSelectMapset)
         self.lbmapsets.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnStart)
         self.tgisdbase.Bind(wx.EVT_TEXT_ENTER, self.OnSetDatabase)
-        self.Bind(wx.EVT_CLOSE,               self.OnCloseWindow)
-        
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+
     def _set_properties(self, version, revision):
         """Set frame properties"""
         self.SetTitle(_("GRASS GIS %s startup%s") % (version, revision))
@@ -254,66 +274,69 @@ class GRASSStartup(wx.Frame):
         try:
             self.tgisdbase.SetValue(self.gisdbase)
         except UnicodeDecodeError:
-            wx.MessageBox(parent = self, caption = _("Error"),
-                          message = _("Unable to set GRASS database. "
-                                      "Check your locale settings."),
-                          style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
-        
+            wx.MessageBox(parent=self, caption=_("Error"),
+                          message=_("Unable to set GRASS database. "
+                                    "Check your locale settings."),
+                          style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
+
         self.OnSetDatabase(None)
         location = self.GetRCValue("LOCATION_NAME")
         if location == "<UNKNOWN>":
             return
         if not os.path.isdir(os.path.join(self.gisdbase, location)):
             location = None
-        
+
         # list of locations
         self.UpdateLocations(self.gisdbase)
         try:
             self.lblocations.SetSelection(self.listOfLocations.index(location),
-                                          force = True)
-            self.lblocations.EnsureVisible(self.listOfLocations.index(location))
+                                          force=True)
+            self.lblocations.EnsureVisible(
+                self.listOfLocations.index(location))
         except ValueError:
-            sys.stderr.write(_("ERROR: Location <%s> not found\n") % self.GetRCValue("LOCATION_NAME"))
+            sys.stderr.write(
+                _("ERROR: Location <%s> not found\n") %
+                self.GetRCValue("LOCATION_NAME"))
             if len(self.listOfLocations) > 0:
-                self.lblocations.SetSelection(0, force = True)
+                self.lblocations.SetSelection(0, force=True)
                 self.lblocations.EnsureVisible(0)
                 location = self.listOfLocations[0]
             else:
                 return
-        
+
         # list of mapsets
         self.UpdateMapsets(os.path.join(self.gisdbase, location))
         mapset = self.GetRCValue("MAPSET")
         if mapset:
             try:
                 self.lbmapsets.SetSelection(self.listOfMapsets.index(mapset),
-                                            force = True)
+                                            force=True)
                 self.lbmapsets.EnsureVisible(self.listOfMapsets.index(mapset))
             except ValueError:
                 sys.stderr.write(_("ERROR: Mapset <%s> not found\n") % mapset)
-                self.lbmapsets.SetSelection(0, force = True)
+                self.lbmapsets.SetSelection(0, force=True)
                 self.lbmapsets.EnsureVisible(0)
-        
+
     def _do_layout(self):
         sizer = wx.BoxSizer(wx.VERTICAL)
         self.sizer = sizer  # for the layout call after changing message
-        dbase_sizer     = wx.BoxSizer(wx.HORIZONTAL)
-        
-        location_mapset_sizer  = wx.BoxSizer(wx.HORIZONTAL)
+        dbase_sizer = wx.BoxSizer(wx.HORIZONTAL)
+
+        location_mapset_sizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        gisdbase_panel_sizer  = wx.BoxSizer(wx.VERTICAL)
-        gisdbase_boxsizer = wx.StaticBoxSizer(self.gisdbase_box, wx.VERTICAL)        
+        gisdbase_panel_sizer = wx.BoxSizer(wx.VERTICAL)
+        gisdbase_boxsizer = wx.StaticBoxSizer(self.gisdbase_box, wx.VERTICAL)
+
+        btns_sizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        btns_sizer      = wx.BoxSizer(wx.HORIZONTAL)
-        
         self.gisdbase_panel.SetSizer(gisdbase_panel_sizer)
 
         # gis data directory
-        
+
         gisdbase_boxsizer.Add(item=self.gisdbase_panel, proportion=1,
                               flag=wx.EXPAND | wx.ALL,
                               border=1)
-        
+
         gisdbase_panel_sizer.Add(item=dbase_sizer, proportion=1,
                                  flag=wx.EXPAND | wx.ALL,
                                  border=1)
@@ -321,12 +344,12 @@ class GRASSStartup(wx.Frame):
                                  flag=wx.EXPAND | wx.ALL,
                                  border=1)
 
-        dbase_sizer.Add(item = self.tgisdbase, proportion = 1,
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                        border = 1)
-        dbase_sizer.Add(item = self.bbrowse, proportion = 0,
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                        border = 1)
+        dbase_sizer.Add(item=self.tgisdbase, proportion=1,
+                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                        border=1)
+        dbase_sizer.Add(item=self.bbrowse, proportion=0,
+                        flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                        border=1)
 
         gisdbase_panel_sizer.Fit(self.gisdbase_panel)
 
@@ -348,9 +371,11 @@ class GRASSStartup(wx.Frame):
                            flag=wx.ALIGN_CENTER_HORIZONTAL | wx.ALL,
                            border=1)
             for button in buttons:
-                buttons_sizer.Add(item=button, proportion=0,
-                                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                                  border=3)
+                buttons_sizer.Add(
+                    item=button,
+                    proportion=0,
+                    flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                    border=3)
             box_sizer.Add(item=panel, proportion=1,
                           flag=wx.EXPAND | wx.ALL,
                           border=1)
@@ -379,40 +404,40 @@ class GRASSStartup(wx.Frame):
 
         # location and mapset sizer
         location_mapset_sizer.Add(item=location_boxsizer, proportion=1,
-                           flag = wx.LEFT | wx.RIGHT | wx.EXPAND,
-                           border = 3) 
+                                  flag=wx.LEFT | wx.RIGHT | wx.EXPAND,
+                                  border=3)
         location_mapset_sizer.Add(item=mapset_boxsizer, proportion=1,
-                           flag = wx.RIGHT | wx.EXPAND,
-                           border = 3)
+                                  flag=wx.RIGHT | wx.EXPAND,
+                                  border=3)
 
         # buttons
-        btns_sizer.Add(item = self.bstart, proportion = 0,
-                       flag = wx.ALIGN_CENTER_HORIZONTAL |
+        btns_sizer.Add(item=self.bstart, proportion=0,
+                       flag=wx.ALIGN_CENTER_HORIZONTAL |
                        wx.ALIGN_CENTER_VERTICAL |
                        wx.ALL,
-                       border = 5)
-        btns_sizer.Add(item = self.bexit, proportion = 0,
-                       flag = wx.ALIGN_CENTER_HORIZONTAL |
+                       border=5)
+        btns_sizer.Add(item=self.bexit, proportion=0,
+                       flag=wx.ALIGN_CENTER_HORIZONTAL |
                        wx.ALIGN_CENTER_VERTICAL |
                        wx.ALL,
-                       border = 5)
-        btns_sizer.Add(item = self.bhelp, proportion = 0,
-                       flag = wx.ALIGN_CENTER_HORIZONTAL |
+                       border=5)
+        btns_sizer.Add(item=self.bhelp, proportion=0,
+                       flag=wx.ALIGN_CENTER_HORIZONTAL |
                        wx.ALIGN_CENTER_VERTICAL |
                        wx.ALL,
-                       border = 5)
-        
+                       border=5)
+
         # main sizer
-        sizer.Add(item = self.hbitmap,
-                  proportion = 0,
-                  flag = wx.ALIGN_CENTER_VERTICAL |
+        sizer.Add(item=self.hbitmap,
+                  proportion=0,
+                  flag=wx.ALIGN_CENTER_VERTICAL |
                   wx.ALIGN_CENTER_HORIZONTAL |
                   wx.ALL,
-                  border = 3) # image
+                  border=3)  # image
         sizer.Add(item=gisdbase_boxsizer, proportion=0,
-                  flag = wx.ALIGN_CENTER_HORIZONTAL |
+                  flag=wx.ALIGN_CENTER_HORIZONTAL |
                   wx.RIGHT | wx.LEFT | wx.TOP | wx.EXPAND,
-                  border = 3) # GISDBASE setting
+                  border=3)  # GISDBASE setting
 
         # warning/error message
         sizer.Add(item=self.lmessage,
@@ -420,13 +445,13 @@ class GRASSStartup(wx.Frame):
                   flag=wx.ALIGN_CENTER_VERTICAL |
                   wx.ALIGN_LEFT | wx.ALL | wx.EXPAND, border=5)
         sizer.Add(item=location_mapset_sizer, proportion=1,
-                  flag = wx.RIGHT | wx.LEFT | wx.EXPAND,
-                  border = 1)
-        sizer.Add(item = btns_sizer, proportion = 0,
-                  flag = wx.ALIGN_CENTER_VERTICAL |
+                  flag=wx.RIGHT | wx.LEFT | wx.EXPAND,
+                  border=1)
+        sizer.Add(item=btns_sizer, proportion=0,
+                  flag=wx.ALIGN_CENTER_VERTICAL |
                   wx.ALIGN_CENTER_HORIZONTAL |
                   wx.RIGHT | wx.LEFT,
-                  border = 3)
+                  border=3)
 
         self.panel.SetAutoLayout(True)
         self.panel.SetSizer(sizer)
@@ -438,9 +463,9 @@ class GRASSStartup(wx.Frame):
         """Read variables from $HOME/.grass7/rc file
         """
         grassrc = {}
-        
+
         gisrc = os.getenv("GISRC")
-        
+
         if gisrc and os.path.isfile(gisrc):
             try:
                 rc = open(gisrc, "r")
@@ -448,12 +473,12 @@ class GRASSStartup(wx.Frame):
                     try:
                         key, val = line.split(":", 1)
                     except ValueError as e:
-                        sys.stderr.write(_('Invalid line in GISRC file (%s):%s\n' % \
-                                               (e, line)))
+                        sys.stderr.write(
+                            _('Invalid line in GISRC file (%s):%s\n' % (e, line)))
                     grassrc[key.strip()] = DecodeString(val.strip())
             finally:
                 rc.close()
-        
+
         return grassrc
 
     def _showWarning(self, text):
@@ -494,45 +519,48 @@ class GRASSStartup(wx.Frame):
     def GetRCValue(self, value):
         """Return GRASS variable (read from GISRC)
         """
-        if self.grassrc.has_key(value):
+        if value in self.grassrc:
             return self.grassrc[value]
         else:
             return None
-        
+
     def OnWizard(self, event):
         """Location wizard started"""
         from location_wizard.wizard import LocationWizard
-        gWizard = LocationWizard(parent = self,
-                                 grassdatabase = self.tgisdbase.GetValue())
-        if gWizard.location !=  None:
+        gWizard = LocationWizard(parent=self,
+                                 grassdatabase=self.tgisdbase.GetValue())
+        if gWizard.location is not None:
             self.tgisdbase.SetValue(gWizard.grassdatabase)
             self.OnSetDatabase(None)
             self.UpdateMapsets(os.path.join(self.gisdbase, gWizard.location))
-            self.lblocations.SetSelection(self.listOfLocations.index(gWizard.location))
+            self.lblocations.SetSelection(
+                self.listOfLocations.index(
+                    gWizard.location))
             self.lbmapsets.SetSelection(0)
             self.SetLocation(self.gisdbase, gWizard.location, 'PERMANENT')
             if gWizard.georeffile:
-                message = _("Do you want to import <%(name)s> to the newly created location?") % \
-                    {'name': gWizard.georeffile}
-                dlg = wx.MessageDialog(parent = self,
-                                       message = message,
-                                       caption = _("Import data?"),
-                                       style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+                message = _("Do you want to import <%(name)s> to the newly created location?") % {
+                    'name': gWizard.georeffile}
+                dlg = wx.MessageDialog(parent=self, message=message, caption=_(
+                    "Import data?"), style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
                 dlg.CenterOnScreen()
                 if dlg.ShowModal() == wx.ID_YES:
                     self.ImportFile(gWizard.georeffile)
                 else:
-                    self.SetDefaultRegion(location = gWizard.location)
+                    self.SetDefaultRegion(location=gWizard.location)
                 dlg.Destroy()
             else:
-                self.SetDefaultRegion(location = gWizard.location)
-
-            dlg = TextEntryDialog(parent=self,
-                                  message=_("Do you want to create new mapset?"),
-                                  caption=_("Create new mapset"),
-                                  defaultValue=self._getDefaultMapsetName(),
-                                  validator=GenericValidator(grass.legal_name, self._nameValidationFailed),
-                                  style=wx.OK | wx.CANCEL | wx.HELP)
+                self.SetDefaultRegion(location=gWizard.location)
+
+            dlg = TextEntryDialog(
+                parent=self,
+                message=_("Do you want to create new mapset?"),
+                caption=_("Create new mapset"),
+                defaultValue=self._getDefaultMapsetName(),
+                validator=GenericValidator(
+                    grass.legal_name,
+                    self._nameValidationFailed),
+                style=wx.OK | wx.CANCEL | wx.HELP)
             help = dlg.FindWindowById(wx.ID_HELP)
             help.Bind(wx.EVT_BUTTON, self.OnHelp)
             if dlg.ShowModal() == wx.ID_OK:
@@ -544,15 +572,14 @@ class GRASSStartup(wx.Frame):
         caption = _("Location <%s> created") % location
         message = _("Do you want to set the default "
                     "region extents and resolution now?")
-        dlg = wx.MessageDialog(parent = self,
-                               message = "%(caption)s.\n\n%(extent)s" % ({'caption': caption,
-                                                                          'extent': message}),
-                               caption = caption,
-                               style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+        dlg = wx.MessageDialog(
+            parent=self, message="%(caption)s.\n\n%(extent)s" %
+            ({'caption': caption, 'extent': message}),
+            caption=caption, style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
         dlg.CenterOnScreen()
         if dlg.ShowModal() == wx.ID_YES:
             dlg.Destroy()
-            defineRegion = RegionDef(self, location = location)
+            defineRegion = RegionDef(self, location=location)
             defineRegion.CenterOnScreen()
             defineRegion.ShowModal()
             defineRegion.Destroy()
@@ -566,71 +593,87 @@ class GRASSStartup(wx.Frame):
         """
         RunCommand('db.connect', flags='c')
         mapName = os.path.splitext(os.path.basename(filePath))[0]
-        vectors = RunCommand('v.in.ogr', input = filePath, flags = 'l',
-                             read = True)
-        
+        vectors = RunCommand('v.in.ogr', input=filePath, flags='l',
+                             read=True)
+
         wx.BeginBusyCursor()
         wx.Yield()
         if mapName in vectors:
             # vector detected
-            returncode, error = RunCommand('v.in.ogr', input=filePath, output=mapName, flags='e',
-                                           getErrorMsg=True)
+            returncode, error = RunCommand(
+                'v.in.ogr', input=filePath, output=mapName, flags='e',
+                getErrorMsg=True)
         else:
-            returncode, error = RunCommand('r.in.gdal', input=filePath, output=mapName, flags='e',
-                                           getErrorMsg=True)
+            returncode, error = RunCommand(
+                'r.in.gdal', input=filePath, output=mapName, flags='e',
+                getErrorMsg=True)
         wx.EndBusyCursor()
 
         if returncode != 0:
-            GError(parent = self,
-                   message = _("Import of <%(name)s> failed.\n"
-                               "Reason: %(msg)s") % ({'name': filePath, 'msg': error}))
+            GError(
+                parent=self,
+                message=_(
+                    "Import of <%(name)s> failed.\n"
+                    "Reason: %(msg)s") % ({
+                        'name': filePath,
+                        'msg': error}))
         else:
-            GMessage(message=_("Data file <%(name)s> imported successfully. "
-                               "The location's default region was set from this imported map.") %
-                               {'name': filePath},
-                     parent=self)
+            GMessage(
+                message=_(
+                    "Data file <%(name)s> imported successfully. "
+                    "The location's default region was set from this imported map.") % {
+                    'name': filePath},
+                parent=self)
 
     # the event can be refactored out by using lambda in bind
     def RenameMapset(self, event):
         """Rename selected mapset
         """
         location = self.listOfLocations[self.lblocations.GetSelection()]
-        mapset   = self.listOfMapsets[self.lbmapsets.GetSelection()]
-        if mapset ==  'PERMANENT':
-            GMessage(parent = self,
-                     message = _('Mapset <PERMANENT> is required for valid GRASS location.\n\n'
-                                 'This mapset cannot be renamed.'))
+        mapset = self.listOfMapsets[self.lbmapsets.GetSelection()]
+        if mapset == 'PERMANENT':
+            GMessage(
+                parent=self, message=_(
+                    'Mapset <PERMANENT> is required for valid GRASS location.\n\n'
+                    'This mapset cannot be renamed.'))
             return
-        
-        dlg = TextEntryDialog(parent = self,
-                              message = _('Current name: %s\n\nEnter new name:') % mapset,
-                              caption = _('Rename selected mapset'),
-                              validator = GenericValidator(grass.legal_name, self._nameValidationFailed))
-        
-        if dlg.ShowModal() ==  wx.ID_OK:
+
+        dlg = TextEntryDialog(
+            parent=self,
+            message=_('Current name: %s\n\nEnter new name:') %
+            mapset,
+            caption=_('Rename selected mapset'),
+            validator=GenericValidator(
+                grass.legal_name,
+                self._nameValidationFailed))
+
+        if dlg.ShowModal() == wx.ID_OK:
             newmapset = dlg.GetValue()
-            if newmapset ==  mapset:
+            if newmapset == mapset:
                 dlg.Destroy()
                 return
-            
+
             if newmapset in self.listOfMapsets:
-                wx.MessageBox(parent = self,
-                              caption = _('Message'),
-                              message = _('Unable to rename mapset.\n\n'
-                                        'Mapset <%s> already exists in location.') % newmapset,
-                              style = wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
+                wx.MessageBox(
+                    parent=self, caption=_('Message'), message=_(
+                        'Unable to rename mapset.\n\n'
+                        'Mapset <%s> already exists in location.') %
+                    newmapset, style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
             else:
                 try:
                     os.rename(os.path.join(self.gisdbase, location, mapset),
                               os.path.join(self.gisdbase, location, newmapset))
                     self.OnSelectLocation(None)
-                    self.lbmapsets.SetSelection(self.listOfMapsets.index(newmapset))
-                except StandardError as e:
-                    wx.MessageBox(parent = self,
-                                  caption = _('Error'),
-                                  message = _('Unable to rename mapset.\n\n%s') % e,
-                                  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
-            
+                    self.lbmapsets.SetSelection(
+                        self.listOfMapsets.index(newmapset))
+                except Exception as e:
+                    wx.MessageBox(
+                        parent=self,
+                        caption=_('Error'),
+                        message=_('Unable to rename mapset.\n\n%s') %
+                        e,
+                        style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
+
         dlg.Destroy()
 
     def RenameLocation(self, event):
@@ -638,64 +681,75 @@ class GRASSStartup(wx.Frame):
         """
         location = self.listOfLocations[self.lblocations.GetSelection()]
 
-        dlg = TextEntryDialog(parent = self,
-                              message = _('Current name: %s\n\nEnter new name:') % location,
-                              caption = _('Rename selected location'),
-                              validator = GenericValidator(grass.legal_name, self._nameValidationFailed))
+        dlg = TextEntryDialog(
+            parent=self,
+            message=_('Current name: %s\n\nEnter new name:') %
+            location,
+            caption=_('Rename selected location'),
+            validator=GenericValidator(
+                grass.legal_name,
+                self._nameValidationFailed))
 
-        if dlg.ShowModal() ==  wx.ID_OK:
+        if dlg.ShowModal() == wx.ID_OK:
             newlocation = dlg.GetValue()
-            if newlocation ==  location:
+            if newlocation == location:
                 dlg.Destroy()
                 return
 
             if newlocation in self.listOfLocations:
-                wx.MessageBox(parent = self,
-                              caption = _('Message'),
-                              message = _('Unable to rename location.\n\n'
-                                        'Location <%s> already exists in GRASS database.') % newlocation,
-                              style = wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
+                wx.MessageBox(
+                    parent=self, caption=_('Message'), message=_(
+                        'Unable to rename location.\n\n'
+                        'Location <%s> already exists in GRASS database.') %
+                    newlocation, style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
             else:
                 try:
                     os.rename(os.path.join(self.gisdbase, location),
                               os.path.join(self.gisdbase, newlocation))
                     self.UpdateLocations(self.gisdbase)
-                    self.lblocations.SetSelection(self.listOfLocations.index(newlocation))
+                    self.lblocations.SetSelection(
+                        self.listOfLocations.index(newlocation))
                     self.UpdateMapsets(newlocation)
-                except StandardError as e:
-                    wx.MessageBox(parent = self,
-                                  caption = _('Error'),
-                                  message = _('Unable to rename location.\n\n%s') % e,
-                                  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
-        
+                except Exception as e:
+                    wx.MessageBox(
+                        parent=self,
+                        caption=_('Error'),
+                        message=_('Unable to rename location.\n\n%s') %
+                        e,
+                        style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
+
         dlg.Destroy()
 
     def DeleteMapset(self, event):
         """Delete selected mapset
         """
         location = self.listOfLocations[self.lblocations.GetSelection()]
-        mapset   = self.listOfMapsets[self.lbmapsets.GetSelection()]
-        if mapset ==  'PERMANENT':
-            GMessage(parent = self,
-                     message = _('Mapset <PERMANENT> is required for valid GRASS location.\n\n'
-                                 'This mapset cannot be deleted.'))
+        mapset = self.listOfMapsets[self.lbmapsets.GetSelection()]
+        if mapset == 'PERMANENT':
+            GMessage(
+                parent=self, message=_(
+                    'Mapset <PERMANENT> is required for valid GRASS location.\n\n'
+                    'This mapset cannot be deleted.'))
             return
-        
-        dlg = wx.MessageDialog(parent = self, message = _("Do you want to continue with deleting mapset <%(mapset)s> "
-                                                      "from location <%(location)s>?\n\n"
-                                                      "ALL MAPS included in this mapset will be "
-                                                      "PERMANENTLY DELETED!") % {'mapset' : mapset,
-                                                                                 'location' : location},
-                               caption = _("Delete selected mapset"),
-                               style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-
-        if dlg.ShowModal() ==  wx.ID_YES:
+
+        dlg = wx.MessageDialog(
+            parent=self,
+            message=_(
+                "Do you want to continue with deleting mapset <%(mapset)s> "
+                "from location <%(location)s>?\n\n"
+                "ALL MAPS included in this mapset will be "
+                "PERMANENTLY DELETED!") %
+            {'mapset': mapset, 'location': location},
+            caption=_("Delete selected mapset"),
+            style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+
+        if dlg.ShowModal() == wx.ID_YES:
             try:
                 shutil.rmtree(os.path.join(self.gisdbase, location, mapset))
                 self.OnSelectLocation(None)
                 self.lbmapsets.SetSelection(0)
             except:
-                wx.MessageBox(message = _('Unable to delete mapset'))
+                wx.MessageBox(message=_('Unable to delete mapset'))
 
         dlg.Destroy()
 
@@ -706,14 +760,18 @@ class GRASSStartup(wx.Frame):
 
         location = self.listOfLocations[self.lblocations.GetSelection()]
 
-        dlg = wx.MessageDialog(parent = self, message = _("Do you want to continue with deleting "
-                                                      "location <%s>?\n\n"
-                                                      "ALL MAPS included in this location will be "
-                                                      "PERMANENTLY DELETED!") % (location),
-                               caption = _("Delete selected location"),
-                               style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+        dlg = wx.MessageDialog(
+            parent=self,
+            message=_(
+                "Do you want to continue with deleting "
+                "location <%s>?\n\n"
+                "ALL MAPS included in this location will be "
+                "PERMANENTLY DELETED!") %
+            (location),
+            caption=_("Delete selected location"),
+            style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
 
-        if dlg.ShowModal() ==  wx.ID_YES:
+        if dlg.ShowModal() == wx.ID_YES:
             try:
                 shutil.rmtree(os.path.join(self.gisdbase, location))
                 self.UpdateLocations(self.gisdbase)
@@ -721,7 +779,7 @@ class GRASSStartup(wx.Frame):
                 self.OnSelectLocation(None)
                 self.lbmapsets.SetSelection(0)
             except:
-                wx.MessageBox(message = _('Unable to delete location'))
+                wx.MessageBox(message=_('Unable to delete location'))
 
         dlg.Destroy()
 
@@ -752,35 +810,35 @@ class GRASSStartup(wx.Frame):
 
     def UpdateMapsets(self, location):
         """Update list of mapsets"""
-        self.FormerMapsetSelection = wx.NOT_FOUND # for non-selectable item
-        
+        self.FormerMapsetSelection = wx.NOT_FOUND  # for non-selectable item
+
         self.listOfMapsetsSelectable = list()
         self.listOfMapsets = GetListOfMapsets(self.gisdbase, location)
-        
+
         self.lbmapsets.Clear()
-        
+
         # disable mapset with denied permission
         locationName = os.path.basename(location)
-        
+
         ret = RunCommand('g.mapset',
-                         read = True,
-                         flags = 'l',
-                         location = locationName,
-                         gisdbase = self.gisdbase)
-            
+                         read=True,
+                         flags='l',
+                         location=locationName,
+                         gisdbase=self.gisdbase)
+
         if ret:
             for line in ret.splitlines():
                 self.listOfMapsetsSelectable += line.split(' ')
         else:
             RunCommand("g.gisenv",
-                       set = "GISDBASE=%s" % self.gisdbase)
+                       set="GISDBASE=%s" % self.gisdbase)
             RunCommand("g.gisenv",
-                       set = "LOCATION_NAME=%s" % locationName)
+                       set="LOCATION_NAME=%s" % locationName)
             RunCommand("g.gisenv",
-                       set = "MAPSET=PERMANENT")
+                       set="MAPSET=PERMANENT")
             # first run only
             self.listOfMapsetsSelectable = copy.copy(self.listOfMapsets)
-        
+
         disabled = []
         idx = 0
         for mapset in self.listOfMapsets:
@@ -789,40 +847,44 @@ class GRASSStartup(wx.Frame):
                                                 locationName,
                                                 mapset, ".gislock")):
                 disabled.append(idx)
-            idx +=  1
-        
-        self.lbmapsets.InsertItems(self.listOfMapsets, 0, disabled = disabled)
-        
+            idx += 1
+
+        self.lbmapsets.InsertItems(self.listOfMapsets, 0, disabled=disabled)
+
         return self.listOfMapsets
 
     def OnSelectLocation(self, event):
         """Location selected"""
         if event:
             self.lblocations.SetSelection(event.GetIndex())
-            
-        if self.lblocations.GetSelection() !=  wx.NOT_FOUND:
-            self.UpdateMapsets(os.path.join(self.gisdbase,
-                                            self.listOfLocations[self.lblocations.GetSelection()]))
+
+        if self.lblocations.GetSelection() != wx.NOT_FOUND:
+            self.UpdateMapsets(
+                os.path.join(
+                    self.gisdbase,
+                    self.listOfLocations[
+                        self.lblocations.GetSelection()]))
         else:
             self.listOfMapsets = []
-        
+
         disabled = []
         idx = 0
         try:
-            locationName = self.listOfLocations[self.lblocations.GetSelection()]
+            locationName = self.listOfLocations[
+                self.lblocations.GetSelection()]
         except IndexError:
             locationName = ''
-        
+
         for mapset in self.listOfMapsets:
             if mapset not in self.listOfMapsetsSelectable or \
                     os.path.isfile(os.path.join(self.gisdbase,
                                                 locationName,
                                                 mapset, ".gislock")):
                 disabled.append(idx)
-            idx +=  1
+            idx += 1
 
         self.lbmapsets.Clear()
-        self.lbmapsets.InsertItems(self.listOfMapsets, 0, disabled = disabled)
+        self.lbmapsets.InsertItems(self.listOfMapsets, 0, disabled=disabled)
 
         if len(self.listOfMapsets) > 0:
             self.lbmapsets.SetSelection(0)
@@ -845,7 +907,7 @@ class GRASSStartup(wx.Frame):
             self.delete_location_button.Enable(False)
             self.rename_mapset_button.Enable(False)
             self.delete_mapset_button.Enable(False)
-        
+
     def OnSelectMapset(self, event):
         """Mapset selected"""
         self.lbmapsets.SetSelection(event.GetIndex())
@@ -863,10 +925,10 @@ class GRASSStartup(wx.Frame):
         if not os.path.exists(gisdbase):
             self._showError(_("Path '%s' doesn't exist.") % gisdbase)
             return
-        
+
         self.gisdbase = self.tgisdbase.GetValue()
         self.UpdateLocations(self.gisdbase)
-        
+
         self.OnSelectLocation(None)
 
     def OnBrowse(self, event):
@@ -875,109 +937,126 @@ class GRASSStartup(wx.Frame):
             defaultPath = os.getenv('HOME')
         else:
             defaultPath = ""
-        
-        dlg = wx.DirDialog(parent = self, message = _("Choose GIS Data Directory"),
-                           defaultPath = defaultPath, style = wx.DD_DEFAULT_STYLE)
-        
-        if dlg.ShowModal() ==  wx.ID_OK:
+
+        dlg = wx.DirDialog(parent=self, message=_("Choose GIS Data Directory"),
+                           defaultPath=defaultPath, style=wx.DD_DEFAULT_STYLE)
+
+        if dlg.ShowModal() == wx.ID_OK:
             self.gisdbase = dlg.GetPath()
             self.tgisdbase.SetValue(self.gisdbase)
             self.OnSetDatabase(event)
-        
+
         dlg.Destroy()
 
     def OnCreateMapset(self, event):
         """Create new mapset"""
-        dlg = TextEntryDialog(parent = self,
-                              message = _('Enter name for new mapset:'),
-                              caption = _('Create new mapset'),
-                              defaultValue = self._getDefaultMapsetName(),
-                              validator = GenericValidator(grass.legal_name, self._nameValidationFailed))
+        dlg = TextEntryDialog(
+            parent=self,
+            message=_('Enter name for new mapset:'),
+            caption=_('Create new mapset'),
+            defaultValue=self._getDefaultMapsetName(),
+            validator=GenericValidator(
+                grass.legal_name,
+                self._nameValidationFailed))
         if dlg.ShowModal() == wx.ID_OK:
             mapset = dlg.GetValue()
-            return self.CreateNewMapset(mapset = mapset)
+            return self.CreateNewMapset(mapset=mapset)
         else:
             return False
 
     def CreateNewMapset(self, mapset):
         if mapset in self.listOfMapsets:
-            GMessage(parent = self,
-                     message = _("Mapset <%s> already exists.") % mapset)
+            GMessage(parent=self,
+                     message=_("Mapset <%s> already exists.") % mapset)
             return False
 
         if mapset.lower() == 'ogr':
-            dlg1 = wx.MessageDialog(parent = self,
-                                    message = _("Mapset <%s> is reserved for direct "
-                                                "read access to OGR layers. Please consider to use "
-                                                "another name for your mapset.\n\n"
-                                                "Are you really sure that you want to create this mapset?") % mapset,
-                                    caption = _("Reserved mapset name"),
-                                    style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+            dlg1 = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "Mapset <%s> is reserved for direct "
+                    "read access to OGR layers. Please consider to use "
+                    "another name for your mapset.\n\n"
+                    "Are you really sure that you want to create this mapset?") %
+                mapset,
+                caption=_("Reserved mapset name"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
             ret = dlg1.ShowModal()
             dlg1.Destroy()
             if ret == wx.ID_NO:
                 dlg1.Destroy()
                 return False
-        
+
         try:
             self.gisdbase = self.tgisdbase.GetValue()
             location = self.listOfLocations[self.lblocations.GetSelection()]
             os.mkdir(os.path.join(self.gisdbase, location, mapset))
-            # copy WIND file and its permissions from PERMANENT and set permissions to u+rw,go+r
-            shutil.copy(os.path.join(self.gisdbase, location, 'PERMANENT', 'WIND'),
-                        os.path.join(self.gisdbase, location, mapset))
+            # copy WIND file and its permissions from PERMANENT and set
+            # permissions to u+rw,go+r
+            shutil.copy(
+                os.path.join(
+                    self.gisdbase,
+                    location,
+                    'PERMANENT',
+                    'WIND'),
+                os.path.join(
+                    self.gisdbase,
+                    location,
+                    mapset))
             # os.chmod(os.path.join(database,location,mapset,'WIND'), 0644)
             self.OnSelectLocation(None)
             self.lbmapsets.SetSelection(self.listOfMapsets.index(mapset))
             self.bstart.SetFocus()
 
             return True
-        except StandardError as e:
-            GError(parent = self,
-                   message = _("Unable to create new mapset: %s") % e,
-                   showTraceback = False)
+        except Exception as e:
+            GError(parent=self,
+                   message=_("Unable to create new mapset: %s") % e,
+                   showTraceback=False)
             return False
 
     def OnStart(self, event):
         """'Start GRASS' button clicked"""
-        dbase    = self.tgisdbase.GetValue()
+        dbase = self.tgisdbase.GetValue()
         location = self.listOfLocations[self.lblocations.GetSelection()]
-        mapset   = self.listOfMapsets[self.lbmapsets.GetSelection()]
-        
+        mapset = self.listOfMapsets[self.lbmapsets.GetSelection()]
+
         lockfile = os.path.join(dbase, location, mapset, '.gislock')
         if os.path.isfile(lockfile):
-            dlg = wx.MessageDialog(parent = self,
-                                   message = _("GRASS is already running in selected mapset <%(mapset)s>\n"
-                                               "(file %(lock)s found).\n\n"
-                                               "Concurrent use not allowed.\n\n"
-                                               "Do you want to try to remove .gislock (note that you "
-                                               "need permission for this operation) and continue?") % 
-                                   { 'mapset' : mapset, 'lock' : lockfile },
-                                   caption = _("Lock file found"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
-                                   wx.ICON_QUESTION | wx.CENTRE)
-            
+            dlg = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "GRASS is already running in selected mapset <%(mapset)s>\n"
+                    "(file %(lock)s found).\n\n"
+                    "Concurrent use not allowed.\n\n"
+                    "Do you want to try to remove .gislock (note that you "
+                    "need permission for this operation) and continue?") %
+                {'mapset': mapset, 'lock': lockfile},
+                caption=_("Lock file found"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+
             ret = dlg.ShowModal()
             dlg.Destroy()
             if ret == wx.ID_YES:
-                dlg1 = wx.MessageDialog(parent = self,
-                                        message = _("ARE YOU REALLY SURE?\n\n"
-                                                    "If you really are running another GRASS session doing this "
-                                                    "could corrupt your data. Have another look in the processor "
-                                                    "manager just to be sure..."),
-                                        caption = _("Lock file found"),
-                                        style = wx.YES_NO | wx.NO_DEFAULT |
-                                        wx.ICON_QUESTION | wx.CENTRE)
-                
+                dlg1 = wx.MessageDialog(
+                    parent=self,
+                    message=_(
+                        "ARE YOU REALLY SURE?\n\n"
+                        "If you really are running another GRASS session doing this "
+                        "could corrupt your data. Have another look in the processor "
+                        "manager just to be sure..."),
+                    caption=_("Lock file found"),
+                    style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+
                 ret = dlg1.ShowModal()
                 dlg1.Destroy()
-                
+
                 if ret == wx.ID_YES:
                     try:
                         os.remove(lockfile)
                     except IOError as e:
                         GError(_("Unable to remove '%(lock)s'.\n\n"
-                                 "Details: %(reason)s") % { 'lock' : lockfile, 'reason' : e})
+                                 "Details: %(reason)s") % {'lock': lockfile, 'reason': e})
                 else:
                     return
             else:
@@ -987,98 +1066,108 @@ class GRASSStartup(wx.Frame):
 
     def SetLocation(self, dbase, location, mapset):
         RunCommand("g.gisenv",
-                   set = "GISDBASE=%s" % dbase)
+                   set="GISDBASE=%s" % dbase)
         RunCommand("g.gisenv",
-                   set = "LOCATION_NAME=%s" % location)
+                   set="LOCATION_NAME=%s" % location)
         RunCommand("g.gisenv",
-                   set = "MAPSET=%s" % mapset)
+                   set="MAPSET=%s" % mapset)
 
     def _getDefaultMapsetName(self):
         """Returns default name for mapset."""
         try:
             defaultName = getpass.getuser()
-            defaultName.encode('ascii') # raise error if not ascii (not valid mapset name)
-        except: # whatever might go wrong
+            # raise error if not ascii (not valid mapset name)
+            defaultName.encode('ascii')
+        except:  # whatever might go wrong
             defaultName = 'user'
 
         return defaultName
 
     def ExitSuccessfully(self):
         self.Destroy()
-        sys.exit(0)
+        sys.exit(self.exit_success)
 
     def OnExit(self, event):
         """'Exit' button clicked"""
         self.Destroy()
-        sys.exit(2)
+        sys.exit(self.exit_user_requested)
 
     def OnHelp(self, event):
         """'Help' button clicked"""
 
         # help text in lib/init/helptext.html
-        RunCommand('g.manual', entry = 'helptext')
+        RunCommand('g.manual', entry='helptext')
 
     def OnCloseWindow(self, event):
         """Close window event"""
         event.Skip()
-        sys.exit(2)
+        sys.exit(self.exit_user_requested)
 
     def _nameValidationFailed(self, ctrl):
-        message = _("Name <%(name)s> is not a valid name for location or mapset. "
-                    "Please use only ASCII characters excluding %(chars)s "
-                    "and space.") % {'name': ctrl.GetValue(), 'chars': '/"\'@,=*~'}
+        message = _(
+            "Name <%(name)s> is not a valid name for location or mapset. "
+            "Please use only ASCII characters excluding %(chars)s "
+            "and space.") % {
+            'name': ctrl.GetValue(),
+            'chars': '/"\'@,=*~'}
         GError(parent=self, message=message, caption=_("Invalid name"))
 
 
 class GListBox(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
     """Use wx.ListCtrl instead of wx.ListBox, different style for
     non-selectable items (e.g. mapsets with denied permission)"""
+
     def __init__(self, parent, id, size,
-                 choices, disabled = []):
-        wx.ListCtrl.__init__(self, parent, id, size = size,
-                             style = wx.LC_REPORT | wx.LC_NO_HEADER | wx.LC_SINGLE_SEL |
-                             wx.BORDER_SUNKEN)
-        
+                 choices, disabled=[]):
+        wx.ListCtrl.__init__(
+            self, parent, id, size=size, style=wx.LC_REPORT | wx.LC_NO_HEADER |
+            wx.LC_SINGLE_SEL | wx.BORDER_SUNKEN)
+
         listmix.ListCtrlAutoWidthMixin.__init__(self)
-        
+
         self.InsertColumn(0, '')
-        
+
         self.selected = wx.NOT_FOUND
-        
+
         self._LoadData(choices, disabled)
-        
-    def _LoadData(self, choices, disabled = []):
+
+    def _LoadData(self, choices, disabled=[]):
         """Load data into list
-        
+
         :param choices: list of item
         :param disabled: list of indices of non-selectable items
         """
         idx = 0
+        count = self.GetItemCount()
         for item in choices:
-            index = self.InsertStringItem(sys.maxint, item)
+            index = self.InsertStringItem(count + idx, item)
             self.SetStringItem(index, 0, item)
-            
+
             if idx in disabled:
                 self.SetItemTextColour(idx, wx.Colour(150, 150, 150))
-            idx +=  1
-        
+            idx += 1
+
     def Clear(self):
         self.DeleteAllItems()
-        
-    def InsertItems(self, choices, pos, disabled = []):
+
+    def InsertItems(self, choices, pos, disabled=[]):
         self._LoadData(choices, disabled)
-        
-    def SetSelection(self, item, force = False):
+
+    def SetSelection(self, item, force=False):
         if item !=  wx.NOT_FOUND and \
-                (platform.system() !=  'Windows' or force):
-            ### Windows -> FIXME
-            self.SetItemState(item, wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED)
-        
+                (platform.system() != 'Windows' or force):
+            # Windows -> FIXME
+            self.SetItemState(
+                item,
+                wx.LIST_STATE_SELECTED,
+                wx.LIST_STATE_SELECTED)
+
         self.selected = item
-        
+
     def GetSelection(self):
         return self.selected
-        
+
+
 class StartUp(wx.App):
     """Start-up application"""
 
@@ -1089,25 +1178,26 @@ class StartUp(wx.App):
         StartUp.CenterOnScreen()
         self.SetTopWindow(StartUp)
         StartUp.Show()
-        
-        if StartUp.GetRCValue("LOCATION_NAME") ==  "<UNKNOWN>":
+
+        if StartUp.GetRCValue("LOCATION_NAME") == "<UNKNOWN>":
             # TODO: This is not ideal, either it should be checked elsewhere
             # where other checks are performed or it should use some public
             # API. There is no reason for not exposing it.
             # TODO: another question is what should be warning, hint or message
-            StartUp._showWarning(_('GRASS needs a directory (GRASS database) '
-                                   'in which to store its data. '
-                                   'Create one now if you have not already done so. '
-                                   'A popular choice is "grassdata", located in '
-                                   'your home directory. '
-                                   'Press Browse button to select the directory.'))
+            StartUp._showWarning(
+                _(
+                    'GRASS needs a directory (GRASS database) '
+                    'in which to store its data. '
+                    'Create one now if you have not already done so. '
+                    'A popular choice is "grassdata", located in '
+                    'your home directory. '
+                    'Press Browse button to select the directory.'))
 
         return 1
 
-if __name__ ==  "__main__":
+if __name__ == "__main__":
     if os.getenv("GISBASE") is None:
         sys.exit("Failed to start GUI, GRASS GIS is not running.")
-        
-    
+
     GRASSStartUp = StartUp(0)
     GRASSStartUp.MainLoop()
diff --git a/gui/wxpython/gis_set_error.py b/gui/wxpython/gis_set_error.py
index ed376e7..73b294a 100644
--- a/gui/wxpython/gis_set_error.py
+++ b/gui/wxpython/gis_set_error.py
@@ -1,4 +1,4 @@
-""" 
+"""
 @package gis_set_error
 
 GRASS start-up screen error message.
@@ -17,21 +17,22 @@ import sys
 from core import globalvar
 import wx
 
+
 def main():
     app = wx.App()
-    
+
     if len(sys.argv) == 1:
         msg = "Unknown reason"
     else:
         msg = ''
         for m in sys.argv[1:]:
             msg += m
-    
-    wx.MessageBox(caption = "Error",
-                  message = msg,
-                  style = wx.OK | wx.ICON_ERROR)
-    
+
+    wx.MessageBox(caption="Error",
+                  message=msg,
+                  style=wx.OK | wx.ICON_ERROR)
+
     app.MainLoop()
-    
+
 if __name__ == "__main__":
     main()
diff --git a/gui/wxpython/gmodeler/__init__.py b/gui/wxpython/gmodeler/__init__.py
index 7771643..135e005 100644
--- a/gui/wxpython/gmodeler/__init__.py
+++ b/gui/wxpython/gmodeler/__init__.py
@@ -7,4 +7,4 @@ all = [
     'dialogs',
     'toolbars',
     'frame',
-    ]
+]
diff --git a/gui/wxpython/gmodeler/dialogs.py b/gui/wxpython/gmodeler/dialogs.py
index ccc0807..eb5394f 100644
--- a/gui/wxpython/gmodeler/dialogs.py
+++ b/gui/wxpython/gmodeler/dialogs.py
@@ -29,51 +29,59 @@ import sys
 import wx
 import wx.lib.mixins.listctrl as listmix
 
-from core                 import globalvar
-from core                 import utils
+from core import globalvar
+from core import utils
 from core.utils import _
-from gui_core.widgets     import SearchModuleWidget, SimpleValidator
-from core.gcmd            import GError, EncodeString
-from gui_core.dialogs     import SimpleDialog, MapLayersDialogForModeler
-from gui_core.prompt      import GPromptSTC
-from gui_core.gselect     import Select, ElementSelect
-from gmodeler.model       import *
-from lmgr.menudata        import LayerManagerMenuData
+from gui_core.widgets import SearchModuleWidget, SimpleValidator
+from core.gcmd import GError, EncodeString
+from gui_core.dialogs import SimpleDialog, MapLayersDialogForModeler
+from gui_core.prompt import GPromptSTC
+from gui_core.gselect import Select, ElementSelect
+from gmodeler.model import *
+from lmgr.menudata import LayerManagerMenuData
 
 from grass.script import task as gtask
 
+
 class ModelDataDialog(SimpleDialog):
     """Data item properties dialog"""
-    def __init__(self, parent, shape, title = _("Data properties")):
+
+    def __init__(self, parent, shape, title=_("Data properties")):
         self.parent = parent
         self.shape = shape
-        
+
         label, etype = self._getLabel()
         self.etype = etype
         SimpleDialog.__init__(self, parent, title)
-                
-        self.element = Select(parent = self.panel,
-                              type = self.shape.GetPrompt(),
-                              validator = SimpleValidator(callback = self.ValidatorCallback))
+
+        self.element = Select(
+            parent=self.panel,
+            type=self.shape.GetPrompt(),
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
         if shape.GetValue():
             self.element.SetValue(shape.GetValue())
-        
-        self.Bind(wx.EVT_BUTTON, self.OnOK,     self.btnOK)
+
+        self.Bind(wx.EVT_BUTTON, self.OnOK, self.btnOK)
         self.Bind(wx.EVT_BUTTON, self.OnCancel, self.btnCancel)
         if self.etype:
-            self.typeSelect = ElementSelect(parent = self.panel,
-                                            elements = ['raster', 'raster_3d', 'vector'],
-                                            size = globalvar.DIALOG_GSELECT_SIZE)
+            self.typeSelect = ElementSelect(
+                parent=self.panel,
+                elements=[
+                    'raster',
+                    'raster_3d',
+                    'vector'],
+                size=globalvar.DIALOG_GSELECT_SIZE)
             self.typeSelect.Bind(wx.EVT_CHOICE, self.OnType)
             self.typeSelect.SetSelection(0)
             self.element.SetType('raster')
-            
+
         if shape.GetValue():
             self.btnOK.Enable()
-        
+
         self._layout()
         self.SetMinSize(self.GetSize())
-        
+
     def _getLabel(self):
         etype = False
         prompt = self.shape.GetPrompt()
@@ -86,21 +94,26 @@ class ModelDataDialog(SimpleDialog):
             label = _('Name of element:')
 
         return label, etype
-    
+
     def _layout(self):
         """Do layout"""
         if self.etype:
-            self.dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                    label = _("Type of element:")),
-                               proportion = 0, flag = wx.ALL, border = 1)
-            self.dataSizer.Add(item = self.typeSelect,
-                               proportion = 0, flag = wx.ALL, border = 1)
-        self.dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                label = _("Name of element:")),
-                           proportion = 0, flag = wx.ALL, border = 1)
+            self.dataSizer.Add(
+                item=wx.StaticText(
+                    parent=self.panel,
+                    id=wx.ID_ANY,
+                    label=_("Type of element:")),
+                proportion=0,
+                flag=wx.ALL,
+                border=1)
+            self.dataSizer.Add(item=self.typeSelect,
+                               proportion=0, flag=wx.ALL, border=1)
+        self.dataSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                              label=_("Name of element:")),
+                           proportion=0, flag=wx.ALL, border=1)
         self.dataSizer.Add(self.element, proportion=0,
-                      flag=wx.EXPAND | wx.ALL, border=1)
-        
+                           flag=wx.EXPAND | wx.ALL, border=1)
+
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
@@ -126,16 +139,16 @@ class ModelDataDialog(SimpleDialog):
                 self.shape.SetPrompt('vector')
             elif elem == 'raster_3d':
                 self.shape.SetPrompt('raster_3d')
-        
+
         self.parent.canvas.Refresh()
         self.parent.SetStatusText('', 0)
         self.shape.SetPropDialog(None)
-        
+
         if self.IsModal():
-            event.Skip() 
+            event.Skip()
         else:
             self.Destroy()
-    
+
     def OnCancel(self, event):
         """Cancel pressed"""
         self.shape.SetPropDialog(None)
@@ -144,93 +157,110 @@ class ModelDataDialog(SimpleDialog):
         else:
             self.Destroy()
 
+
 class ModelSearchDialog(wx.Dialog):
-    def __init__(self, parent, title = _("Add GRASS command to the model"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, title=_("Add GRASS command to the model"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         """Graphical modeler module search window
-        
+
         :param parent: parent window
         :param id: window id
         :param title: window title
         :param kwargs: wx.Dialogs' arguments
         """
         self.parent = parent
-        
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title, **kwargs)
+
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=title,
+            **kwargs)
         self.SetName("ModelerDialog")
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
         self._command = None
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.cmdBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.cmdBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                    label=" %s " % _("Command"))
-        self.labelBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                   label=" %s " % _("Label and comment"))
-        
+        self.labelBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                     label=" %s " % _("Label and comment"))
+
         # menu data for search widget and prompt
         menuModel = LayerManagerMenuData()
-        
-        self.cmd_prompt = GPromptSTC(parent = self, menuModel = menuModel.GetModel())
+
+        self.cmd_prompt = GPromptSTC(
+            parent=self, menuModel=menuModel.GetModel())
         self.cmd_prompt.promptRunCmd.connect(self.OnCommand)
-        self.cmd_prompt.commandSelected.connect(lambda command: self.label.SetValue(command))
-        self.search = SearchModuleWidget(parent = self.panel,
-                                         model = menuModel.GetModel(),
-                                         showTip = True)
-        self.search.moduleSelected.connect(lambda name:
-                                           self.cmd_prompt.SetTextAndFocus(name + ' '))
+        self.cmd_prompt.commandSelected.connect(
+            lambda command: self.label.SetValue(command))
+        self.search = SearchModuleWidget(parent=self.panel,
+                                         model=menuModel.GetModel(),
+                                         showTip=True)
+        self.search.moduleSelected.connect(
+            lambda name: self.cmd_prompt.SetTextAndFocus(name + ' '))
         wx.CallAfter(self.cmd_prompt.SetFocus)
-        
-        self.label = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY)
-        self.comment = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, style =  wx.TE_MULTILINE)
-        
+
+        self.label = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY)
+        self.comment = wx.TextCtrl(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            style=wx.TE_MULTILINE)
+
         self.btnCancel = wx.Button(self.panel, wx.ID_CANCEL)
-        self.btnOk     = wx.Button(self.panel, wx.ID_OK)
+        self.btnOk = wx.Button(self.panel, wx.ID_OK)
         self.btnOk.SetDefault()
 
         self.Bind(wx.EVT_BUTTON, self.OnOk, self.btnOk)
         self.Bind(wx.EVT_BUTTON, self.OnCancel, self.btnCancel)
-        
+
         self._layout()
-        
+
         self.SetSize((500, -1))
 
     def _layout(self):
         cmdSizer = wx.StaticBoxSizer(self.cmdBox, wx.VERTICAL)
-        cmdSizer.Add(item = self.cmd_prompt, proportion = 1,
-                     flag = wx.EXPAND)
+        cmdSizer.Add(item=self.cmd_prompt, proportion=1,
+                     flag=wx.EXPAND)
         labelSizer = wx.StaticBoxSizer(self.labelBox, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        gridSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                           label = _("Label:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        gridSizer.Add(item = self.label, pos = (0, 1), flag =  wx.EXPAND)
-        gridSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                           label = _("Comment:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-        gridSizer.Add(item = self.comment, pos = (1, 1), flag =  wx.EXPAND)
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+        gridSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Label:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        gridSizer.Add(item=self.label, pos=(0, 1), flag=wx.EXPAND)
+        gridSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Comment:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0))
+        gridSizer.Add(item=self.comment, pos=(1, 1), flag=wx.EXPAND)
         gridSizer.AddGrowableRow(1)
         gridSizer.AddGrowableCol(1)
-        labelSizer.Add(item = gridSizer, proportion = 1, flag = wx.EXPAND)
-        
+        labelSizer.Add(item=gridSizer, proportion=1, flag=wx.EXPAND)
+
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = self.search, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 3)
-        mainSizer.Add(item = cmdSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border = 3)
-        mainSizer.Add(item = labelSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border = 3)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+        mainSizer.Add(item=self.search, proportion=0,
+                      flag=wx.EXPAND | wx.ALL, border=3)
+        mainSizer.Add(item=cmdSizer, proportion=1,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=3)
+        mainSizer.Add(item=labelSizer, proportion=1,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border=3)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(mainSizer)
         mainSizer.Fit(self)
-        
+
         self.Layout()
 
     def GetPanel(self):
@@ -255,18 +285,20 @@ class ModelSearchDialog(wx.Dialog):
     def GetLabel(self):
         """Get label and comment"""
         return self.label.GetValue(), self.comment.GetValue()
-    
+
     def ValidateCmd(self, cmd):
         if len(cmd) < 1:
-            GError(parent = self,
-                   message = _("Command not defined.\n\n"
-                               "Unable to add new action to the model."))
+            GError(parent=self,
+                   message=_("Command not defined.\n\n"
+                             "Unable to add new action to the model."))
             return False
-        
+
         if cmd[0] not in globalvar.grassCmd:
-            GError(parent = self,
-                   message = _("'%s' is not a GRASS module.\n\n"
-                               "Unable to add new action to the model.") % cmd[0])
+            GError(
+                parent=self, message=_(
+                    "'%s' is not a GRASS module.\n\n"
+                    "Unable to add new action to the model.") %
+                cmd[0])
             return False
         return True
 
@@ -286,7 +318,7 @@ class ModelSearchDialog(wx.Dialog):
     def OnCancel(self, event):
         """Cancel pressed, close window"""
         self.Hide()
-        
+
     def Reset(self):
         """Reset dialog"""
         self.search.Reset()
@@ -295,128 +327,136 @@ class ModelSearchDialog(wx.Dialog):
         self.cmd_prompt.OnCmdErase(None)
         self.cmd_prompt.SetFocus()
 
+
 class ModelRelationDialog(wx.Dialog):
     """Relation properties dialog"""
-    def __init__(self, parent, shape, id = wx.ID_ANY, title = _("Relation properties"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, shape, id=wx.ID_ANY,
+                 title=_("Relation properties"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         self.parent = parent
         self.shape = shape
-        
+
         options = self._getOptions()
         if not options:
             self.valid = False
             return
-        
+
         self.valid = True
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.fromBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                    label = " %s " % _("From"))
-        self.toBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                  label = " %s " % _("To"))
-        
-        self.option = wx.ComboBox(parent = self.panel, id = wx.ID_ANY,
-                                  style = wx.CB_READONLY,
-                                  choices = options)
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.fromBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                    label=" %s " % _("From"))
+        self.toBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                  label=" %s " % _("To"))
+
+        self.option = wx.ComboBox(parent=self.panel, id=wx.ID_ANY,
+                                  style=wx.CB_READONLY,
+                                  choices=options)
         self.option.Bind(wx.EVT_COMBOBOX, self.OnOption)
-        
+
         self.btnCancel = wx.Button(self.panel, wx.ID_CANCEL)
-        self.btnOk     = wx.Button(self.panel, wx.ID_OK)
+        self.btnOk = wx.Button(self.panel, wx.ID_OK)
         self.btnOk.Enable(False)
-        
+
         self._layout()
 
     def _layout(self):
         mainSizer = wx.BoxSizer(wx.VERTICAL)
 
         fromSizer = wx.StaticBoxSizer(self.fromBox, wx.VERTICAL)
-        self._layoutShape(shape = self.shape.GetFrom(), sizer = fromSizer)
+        self._layoutShape(shape=self.shape.GetFrom(), sizer=fromSizer)
         toSizer = wx.StaticBoxSizer(self.toBox, wx.VERTICAL)
-        self._layoutShape(shape = self.shape.GetTo(), sizer = toSizer)
+        self._layoutShape(shape=self.shape.GetTo(), sizer=toSizer)
 
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
-        
-        mainSizer.Add(item = fromSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = toSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+
+        mainSizer.Add(item=fromSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(item=toSizer, proportion=0, flag=wx.EXPAND |
+                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(mainSizer)
         mainSizer.Fit(self.panel)
-        
+
         self.Layout()
         self.SetSize(self.GetBestSize())
-        
+
     def _layoutShape(self, shape, sizer):
         if isinstance(shape, ModelData):
-            sizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                           label = _("Data: %s") % shape.GetLog()),
-                      proportion = 1, flag = wx.EXPAND | wx.ALL,
-                      border = 5)
+            sizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Data: %s") % shape.GetLog()),
+                      proportion=1, flag=wx.EXPAND | wx.ALL,
+                      border=5)
         elif isinstance(shape, ModelAction):
-            gridSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-            gridSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                               label = _("Command:")),
-                          pos = (0, 0))
-            gridSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                               label = shape.GetLabel()),
-                          pos = (0, 1))
-            gridSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                               label = _("Option:")),
-                          flag = wx.ALIGN_CENTER_VERTICAL,
-                          pos = (1, 0))
-            gridSizer.Add(item = self.option,
-                          pos = (1, 1))
-            sizer.Add(item = gridSizer,
-                      proportion = 1, flag = wx.EXPAND | wx.ALL,
-                      border = 5)
-            
+            gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+            gridSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                             label=_("Command:")),
+                          pos=(0, 0))
+            gridSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                             label=shape.GetLabel()),
+                          pos=(0, 1))
+            gridSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                             label=_("Option:")),
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(1, 0))
+            gridSizer.Add(item=self.option,
+                          pos=(1, 1))
+            sizer.Add(item=gridSizer,
+                      proportion=1, flag=wx.EXPAND | wx.ALL,
+                      border=5)
+
     def _getOptions(self):
         """Get relevant options"""
         items = []
         fromShape = self.shape.GetFrom()
         if not isinstance(fromShape, ModelData):
-            GError(parent = self.parent,
-                   message = _("Relation doesn't start with data item.\n"
-                               "Unable to add relation."))
+            GError(parent=self.parent,
+                   message=_("Relation doesn't start with data item.\n"
+                             "Unable to add relation."))
             return items
-        
+
         toShape = self.shape.GetTo()
         if not isinstance(toShape, ModelAction):
-            GError(parent = self.parent,
-                   message = _("Relation doesn't point to GRASS command.\n"
-                               "Unable to add relation."))
+            GError(parent=self.parent,
+                   message=_("Relation doesn't point to GRASS command.\n"
+                             "Unable to add relation."))
             return items
-        
+
         prompt = fromShape.GetPrompt()
         task = toShape.GetTask()
         for p in task.get_options()['params']:
             if p.get('prompt', '') == prompt and \
                     'name' in p:
                 items.append(p['name'])
-        
+
         if not items:
-            GError(parent = self.parent,
-                   message = _("No relevant option found.\n"
-                               "Unable to add relation."))
+            GError(parent=self.parent,
+                   message=_("No relevant option found.\n"
+                             "Unable to add relation."))
         return items
-    
+
     def GetOption(self):
         """Get selected option"""
         return self.option.GetStringSelection()
-    
+
     def IsValid(self):
         """Check if relation is valid"""
         return self.valid
-    
+
     def OnOption(self, event):
         """Set option"""
         if event.GetString():
@@ -424,207 +464,227 @@ class ModelRelationDialog(wx.Dialog):
         else:
             self.btnOk.Enable(False)
 
+
 class ModelItemDialog(wx.Dialog):
     """Abstract item properties dialog"""
-    def __init__(self, parent, shape, title, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, shape, title, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         self.parent = parent
         self.shape = shape
-        
-        wx.Dialog.__init__(self, parent, id, title = title, style = style, **kwargs)
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.condBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+
+        wx.Dialog.__init__(
+            self,
+            parent,
+            id,
+            title=title,
+            style=style,
+            **kwargs)
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.condBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                     label=" %s " % _("Condition"))
-        self.condText = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY,
-                                    value = shape.GetLabel())
-        
-        self.itemList = ItemCheckListCtrl(parent = self.panel,
-                                          columns = [_("Label"),
-                                                     _("Command")],
-                                          shape = shape,
-                                          frame = parent)
-        
+        self.condText = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY,
+                                    value=shape.GetLabel())
+
+        self.itemList = ItemCheckListCtrl(parent=self.panel,
+                                          columns=[_("Label"),
+                                                   _("Command")],
+                                          shape=shape,
+                                          frame=parent)
+
         self.itemList.Populate(self.parent.GetModel().GetItems())
-        
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnOk     = wx.Button(parent = self.panel, id = wx.ID_OK)
+
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnOk = wx.Button(parent=self.panel, id=wx.ID_OK)
         self.btnOk.SetDefault()
-        
+
     def _layout(self):
         """Do layout (virtual method)"""
         pass
-    
+
     def GetCondition(self):
         """Get loop condition"""
         return self.condText.GetValue()
 
+
 class ModelLoopDialog(ModelItemDialog):
     """Loop properties dialog"""
-    def __init__(self, parent, shape, id = wx.ID_ANY, title = _("Loop properties"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, shape, id=wx.ID_ANY, title=_("Loop properties"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         ModelItemDialog.__init__(self, parent, shape, title,
-                                 style = style, **kwargs)
-        
-        self.listBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+                                 style=style, **kwargs)
+
+        self.listBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                     label=" %s " % _("List of items in loop"))
-        
-        self.btnSeries = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                   label = _("Series"))
-        self.btnSeries.SetToolTipString(_("Define map series as condition for the loop"))
+
+        self.btnSeries = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                   label=_("Series"))
+        self.btnSeries.SetToolTipString(
+            _("Define map series as condition for the loop"))
         self.btnSeries.Bind(wx.EVT_BUTTON, self.OnSeries)
-        
+
         self._layout()
         self.SetMinSize(self.GetSize())
         self.SetSize((500, 400))
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         condSizer = wx.StaticBoxSizer(self.condBox, wx.HORIZONTAL)
-        condSizer.Add(item = self.condText, proportion = 1,
-                      flag = wx.ALL, border = 3)
-        condSizer.Add(item = self.btnSeries, proportion = 0,
-                      flag = wx.EXPAND)
+        condSizer.Add(item=self.condText, proportion=1,
+                      flag=wx.ALL, border=3)
+        condSizer.Add(item=self.btnSeries, proportion=0,
+                      flag=wx.EXPAND)
 
         listSizer = wx.StaticBoxSizer(self.listBox, wx.VERTICAL)
-        listSizer.Add(item = self.itemList, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL, border = 3)
-        
+        listSizer.Add(item=self.itemList, proportion=1,
+                      flag=wx.EXPAND | wx.ALL, border=3)
+
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
 
-        sizer.Add(item = condSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALL, border = 3)
-        sizer.Add(item = listSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 3)
-        sizer.Add(item = btnSizer, proportion=0,
-                  flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
-        
+        sizer.Add(item=condSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL, border=3)
+        sizer.Add(item=listSizer, proportion=1,
+                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=3)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
-        
+
         self.Layout()
-        
+
     def GetItems(self):
         """Get list of selected actions"""
         return self.itemList.GetItems()
 
     def OnSeries(self, event):
         """Define map series as condition"""
-        dialog = MapLayersDialogForModeler(parent = self, title = _("Define series of maps"))
+        dialog = MapLayersDialogForModeler(
+            parent=self, title=_("Define series of maps"))
         if dialog.ShowModal() != wx.ID_OK:
             dialog.Destroy()
             return
-        
+
         cond = dialog.GetDSeries()
         if not cond:
             cond = 'map in %s' % map(lambda x: str(x), dialog.GetMapLayers())
-        
+
         self.condText.SetValue(cond)
-                               
+
         dialog.Destroy()
 
+
 class ModelConditionDialog(ModelItemDialog):
     """Condition properties dialog"""
-    def __init__(self, parent, shape, id = wx.ID_ANY, title = _("If-else properties"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, shape, id=wx.ID_ANY,
+                 title=_("If-else properties"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         ModelItemDialog.__init__(self, parent, shape, title,
-                                 style = style, **kwargs)
-        
-        self.listBoxIf = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                      label=" %s " % _("List of items in 'if' block"))
+                                 style=style, **kwargs)
+
+        self.listBoxIf = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("List of items in 'if' block"))
         self.itemListIf = self.itemList
         self.itemListIf.SetName('IfBlockList')
-        
-        self.listBoxElse = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                        label=" %s " % _("List of items in 'else' block"))
-        self.itemListElse = ItemCheckListCtrl(parent = self.panel,
-                                              columns = [_("Label"),
-                                                         _("Command")],
-                                              shape = shape, frame = parent)
+
+        self.listBoxElse = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("List of items in 'else' block"))
+        self.itemListElse = ItemCheckListCtrl(parent=self.panel,
+                                              columns=[_("Label"),
+                                                       _("Command")],
+                                              shape=shape, frame=parent)
         self.itemListElse.SetName('ElseBlockList')
         self.itemListElse.Populate(self.parent.GetModel().GetItems())
-        
+
         self._layout()
         self.SetMinSize(self.GetSize())
         self.SetSize((500, 400))
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         condSizer = wx.StaticBoxSizer(self.condBox, wx.VERTICAL)
-        condSizer.Add(item = self.condText, proportion = 1,
-                      flag = wx.EXPAND)
-        
+        condSizer.Add(item=self.condText, proportion=1,
+                      flag=wx.EXPAND)
+
         listIfSizer = wx.StaticBoxSizer(self.listBoxIf, wx.VERTICAL)
-        listIfSizer.Add(item = self.itemListIf, proportion = 1,
-                        flag = wx.EXPAND)
+        listIfSizer.Add(item=self.itemListIf, proportion=1,
+                        flag=wx.EXPAND)
         listElseSizer = wx.StaticBoxSizer(self.listBoxElse, wx.VERTICAL)
-        listElseSizer.Add(item = self.itemListElse, proportion = 1,
-                          flag = wx.EXPAND)
-        
+        listElseSizer.Add(item=self.itemListElse, proportion=1,
+                          flag=wx.EXPAND)
+
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
 
-        sizer.Add(item = condSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALL, border = 3)
-        sizer.Add(item = listIfSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 3)
-        sizer.Add(item = listElseSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 3)
-        sizer.Add(item = btnSizer, proportion=0,
-                  flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
-        
+        sizer.Add(item=condSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL, border=3)
+        sizer.Add(item=listIfSizer, proportion=1,
+                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=3)
+        sizer.Add(item=listElseSizer, proportion=1,
+                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=3)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
-        
+
         self.Layout()
 
     def OnCheckItemIf(self, index, flag):
         """Item in if-block checked/unchecked"""
         if flag is False:
             return
-        
+
         aId = int(self.itemListIf.GetItem(index, 0).GetText())
         if aId in self.itemListElse.GetItems()['checked']:
             self.itemListElse.CheckItemById(aId, False)
-            
+
     def OnCheckItemElse(self, index, flag):
         """Item in else-block checked/unchecked"""
         if flag is False:
             return
-        
+
         aId = int(self.itemListElse.GetItem(index, 0).GetText())
         if aId in self.itemListIf.GetItems()['checked']:
             self.itemListIf.CheckItemById(aId, False)
-        
+
     def GetItems(self):
         """Get items"""
-        return { 'if'   : self.itemListIf.GetItems(),
-                 'else' : self.itemListElse.GetItems() }
+        return {'if': self.itemListIf.GetItems(),
+                'else': self.itemListElse.GetItems()}
+
 
 class ModelListCtrl(wx.ListCtrl,
                     listmix.ListCtrlAutoWidthMixin,
                     listmix.TextEditMixin):
-    def __init__(self, parent, columns, frame, id = wx.ID_ANY, columnsNotEditable = [],
-                 style = wx.LC_REPORT | wx.BORDER_NONE |
-                 wx.LC_HRULES | wx.LC_VRULES, **kwargs):
+
+    def __init__(
+            self, parent, columns, frame, id=wx.ID_ANY, columnsNotEditable=[],
+            style=wx.LC_REPORT | wx.BORDER_NONE | wx.LC_HRULES | wx.LC_VRULES, **
+            kwargs):
         """List of model variables"""
         self.parent = parent
         self.columns = columns
         self.shape = None
-        self.frame  = frame
+        self.frame = frame
         self.columnNotEditable = columnsNotEditable
 
-        wx.ListCtrl.__init__(self, parent, id = id, style = style, **kwargs)
+        wx.ListCtrl.__init__(self, parent, id=id, style=style, **kwargs)
         listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.TextEditMixin.__init__(self)
 
@@ -633,48 +693,52 @@ class ModelListCtrl(wx.ListCtrl,
             self.InsertColumn(i, col)
             self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER)
             i += 1
-        
-        self.itemDataMap = {} # requested by sorter
-        self.itemCount   = 0
-        
+
+        self.itemDataMap = {}  # requested by sorter
+        self.itemCount = 0
+
         self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginEdit)
         self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEndEdit)
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick)
-        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightUp) #wxMSW
-        self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)            #wxGTK
-                
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightUp)  # wxMSW
+        self.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)  # wxGTK
+
     def OnBeginEdit(self, event):
         """Editing of item started"""
         if self.columnNotEditable and event.m_col in self.columnNotEditable:
             event.Veto()
-            self.SetItemState(event.m_itemIndex,
-                              wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
+            self.SetItemState(
+                event.m_itemIndex,
+                wx.LIST_STATE_SELECTED,
+                wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
         else:
             event.Allow()
 
     def OnEndEdit(self, event):
         """Finish editing of item"""
         pass
-    
+
     def GetListCtrl(self):
         """Used by ColumnSorterMixin"""
         return self
-    
+
     def OnColClick(self, event):
         """Click on column header (order by)"""
         event.Skip()
 
+
 class VariableListCtrl(ModelListCtrl):
+
     def __init__(self, parent, columns, **kwargs):
         """List of model variables"""
         ModelListCtrl.__init__(self, parent, columns, **kwargs)
 
-        self.SetColumnWidth(2, 200) # default value
+        self.SetColumnWidth(2, 200)  # default value
 
     def GetData(self):
         """Get list data"""
         return self.itemDataMap
-    
+
     def Populate(self, data):
         """Populate the list"""
         self.itemDataMap = dict()
@@ -684,19 +748,19 @@ class VariableListCtrl(ModelListCtrl):
                                    values.get('value', ''),
                                    values.get('description', '')]
             i += 1
-        
+
         self.itemCount = len(self.itemDataMap.keys())
         self.DeleteAllItems()
         i = 0
         for name, vtype, value, desc in self.itemDataMap.itervalues():
-            index = self.InsertStringItem(sys.maxint, name)
+            index = self.InsertStringItem(i, name)
             self.SetStringItem(index, 0, name)
             self.SetStringItem(index, 1, vtype)
             self.SetStringItem(index, 2, value)
             self.SetStringItem(index, 3, desc)
             self.SetItemData(index, i)
             i += 1
-        
+
     def Append(self, name, vtype, value, desc):
         """Append new item to the list
 
@@ -707,17 +771,17 @@ class VariableListCtrl(ModelListCtrl):
             if iname == name:
                 return _("Variable <%s> already exists in the model. "
                          "Adding variable failed.") % name
-        
-        index = self.InsertStringItem(sys.maxint, name)
+
+        index = self.InsertStringItem(self.GetItemCount(), name)
         self.SetStringItem(index, 0, name)
         self.SetStringItem(index, 1, vtype)
         self.SetStringItem(index, 2, value)
         self.SetStringItem(index, 3, desc)
         self.SetItemData(index, self.itemCount)
-        
+
         self.itemDataMap[self.itemCount] = [name, vtype, value, desc]
         self.itemCount += 1
-        
+
         return None
 
     def OnRemove(self, event):
@@ -728,35 +792,37 @@ class VariableListCtrl(ModelListCtrl):
             del self.itemDataMap[item]
             item = self.GetFirstSelected()
         self.parent.UpdateModelVariables()
-        
+
         event.Skip()
-        
+
     def OnRemoveAll(self, event):
         """Remove all variable(s) from the model"""
-        dlg = wx.MessageBox(parent=self,
-                            message=_("Do you want to delete all variables from "
-                                      "the model?"),
-                            caption=_("Delete variables"),
-                            style=wx.YES_NO | wx.CENTRE)
+        dlg = wx.MessageBox(
+            parent=self,
+            message=_(
+                "Do you want to delete all variables from "
+                "the model?"),
+            caption=_("Delete variables"),
+            style=wx.YES_NO | wx.CENTRE)
         if dlg != wx.YES:
             return
-        
+
         self.DeleteAllItems()
         self.itemDataMap = dict()
-        
+
         self.parent.UpdateModelVariables()
-        
+
     def OnEndEdit(self, event):
         """Finish editing of item"""
         itemIndex = event.GetIndex()
         columnIndex = event.GetColumn()
         nameOld = self.GetItem(itemIndex, 0).GetText()
 
-        if columnIndex == 0: # TODO
+        if columnIndex == 0:  # TODO
             event.Veto()
-        
+
         self.itemDataMap[itemIndex][columnIndex] = event.GetText()
-        
+
         self.parent.UpdateModelVariables()
 
     def OnReload(self, event):
@@ -769,10 +835,10 @@ class VariableListCtrl(ModelListCtrl):
             self.popupID1 = wx.NewId()
             self.popupID2 = wx.NewId()
             self.popupID3 = wx.NewId()
-            self.Bind(wx.EVT_MENU, self.OnRemove,    id = self.popupID1)
-            self.Bind(wx.EVT_MENU, self.OnRemoveAll, id = self.popupID2)
-            self.Bind(wx.EVT_MENU, self.OnReload,    id = self.popupID3)
-        
+            self.Bind(wx.EVT_MENU, self.OnRemove, id=self.popupID1)
+            self.Bind(wx.EVT_MENU, self.OnRemoveAll, id=self.popupID2)
+            self.Bind(wx.EVT_MENU, self.OnReload, id=self.popupID3)
+
         # generate popup-menu
         menu = wx.Menu()
         menu.Append(self.popupID1, _("Delete selected"))
@@ -780,21 +846,23 @@ class VariableListCtrl(ModelListCtrl):
         if self.GetFirstSelected() == -1:
             menu.Enable(self.popupID1, False)
             menu.Enable(self.popupID2, False)
-        
+
         menu.AppendSeparator()
         menu.Append(self.popupID3, _("Reload"))
-        
+
         self.PopupMenu(menu)
         menu.Destroy()
 
+
 class ItemListCtrl(ModelListCtrl):
-    def __init__(self, parent, columns, frame, disablePopup = False, **kwargs):
+
+    def __init__(self, parent, columns, frame, disablePopup=False, **kwargs):
         """List of model actions"""
         self.disablePopup = disablePopup
 
         ModelListCtrl.__init__(self, parent, columns, frame, **kwargs)
         self.itemIdMap = list()
-        
+
         self.SetColumnWidth(0, 100)
         self.SetColumnWidth(1, 75)
         if len(self.columns) >= 3:
@@ -803,34 +871,40 @@ class ItemListCtrl(ModelListCtrl):
     def GetData(self):
         """Get list data"""
         return self.itemDataMap
-    
+
     def Populate(self, data):
         """Populate the list"""
         self.itemDataMap = dict()
         self.itemIdMap = list()
-        
+
         if self.shape:
             items = self.frame.GetModel().GetItems(objType=ModelAction)
             if isinstance(self.shape, ModelCondition):
                 if self.GetLabel() == 'ElseBlockList':
-                    shapeItems = map(lambda x: x.GetId(), self.shape.GetItems(items)['else'])
+                    shapeItems = map(
+                        lambda x: x.GetId(),
+                        self.shape.GetItems(items)['else'])
                 else:
-                    shapeItems = map(lambda x: x.GetId(), self.shape.GetItems(items)['if'])
+                    shapeItems = map(
+                        lambda x: x.GetId(),
+                        self.shape.GetItems(items)['if'])
             else:
-                shapeItems = map(lambda x: x.GetId(), self.shape.GetItems(items))
+                shapeItems = map(
+                    lambda x: x.GetId(),
+                    self.shape.GetItems(items))
         else:
             shapeItems = list()
-        
+
         i = 0
-        if len(self.columns) == 2: # ItemCheckList
+        if len(self.columns) == 2:  # ItemCheckList
             checked = list()
         for action in data:
             if isinstance(action, ModelData) or \
                     action == self.shape:
                 continue
-            
+
             self.itemIdMap.append(action.GetId())
-            
+
             if len(self.columns) == 2:
                 self.itemDataMap[i] = [action.GetLabel(),
                                        action.GetLog()]
@@ -856,15 +930,15 @@ class ItemListCtrl(ModelListCtrl):
                                        bId,
                                        ','.join(params),
                                        action.GetLog()]
-            
+
             i += 1
-        
+
         self.itemCount = len(self.itemDataMap.keys())
         self.DeleteAllItems()
         i = 0
         if len(self.columns) == 2:
             for name, desc in self.itemDataMap.itervalues():
-                index = self.InsertStringItem(sys.maxint, str(i))
+                index = self.InsertStringItem(i, str(i))
                 self.SetStringItem(index, 0, name)
                 self.SetStringItem(index, 1, desc)
                 self.SetItemData(index, i)
@@ -873,38 +947,38 @@ class ItemListCtrl(ModelListCtrl):
                 i += 1
         else:
             for name, inloop, param, desc in self.itemDataMap.itervalues():
-                index = self.InsertStringItem(sys.maxint, str(i))
+                index = self.InsertStringItem(i, str(i))
                 self.SetStringItem(index, 0, name)
                 self.SetStringItem(index, 1, inloop)
                 self.SetStringItem(index, 2, param)
                 self.SetStringItem(index, 3, desc)
                 self.SetItemData(index, i)
                 i += 1
-                
+
     def OnRemove(self, event):
         """Remove selected action(s) from the model"""
         model = self.frame.GetModel()
         canvas = self.frame.GetCanvas()
-        
+
         item = self.GetFirstSelected()
         while item != -1:
             self.DeleteItem(item)
             del self.itemDataMap[item]
-            
-            action = model.GetItem(item+1) # action indices starts at 1
+
+            action = model.GetItem(item + 1)  # action indices starts at 1
             if not action:
                 item = self.GetFirstSelected()
                 continue
-            
+
             canvas.RemoveShapes([action])
             self.frame.ModelChanged()
-            
+
             item = self.GetFirstSelected()
-        
+
         canvas.Refresh()
-        
+
         event.Skip()
-    
+
     def OnEndEdit(self, event):
         """Finish editing of item"""
         itemIndex = event.GetIndex()
@@ -915,10 +989,10 @@ class ItemListCtrl(ModelListCtrl):
             event.Veto()
             return
 
-        action.SetLabel(label = event.GetText())
+        action.SetLabel(label=event.GetText())
         self.frame.ModelChanged()
 
-    def OnReload(self, event = None):
+    def OnReload(self, event=None):
         """Reload list of actions"""
         self.Populate(self.frame.GetModel().GetItems(objType=ModelAction))
 
@@ -926,13 +1000,13 @@ class ItemListCtrl(ModelListCtrl):
         """Mouse right button up"""
         if self.disablePopup:
             return
-        
+
         if not hasattr(self, "popupId"):
             self.popupID = dict()
             self.popupID['remove'] = wx.NewId()
             self.popupID['reload'] = wx.NewId()
-            self.Bind(wx.EVT_MENU, self.OnRemove,    id = self.popupID['remove'])
-            self.Bind(wx.EVT_MENU, self.OnReload,    id = self.popupID['reload'])
+            self.Bind(wx.EVT_MENU, self.OnRemove, id=self.popupID['remove'])
+            self.Bind(wx.EVT_MENU, self.OnReload, id=self.popupID['reload'])
 
         # generate popup-menu
         menu = wx.Menu()
@@ -941,10 +1015,10 @@ class ItemListCtrl(ModelListCtrl):
             menu.Enable(self.popupID['remove'], False)
         menu.AppendSeparator()
         menu.Append(self.popupID['reload'], _("Reload"))
-        
+
         self.PopupMenu(menu)
         menu.Destroy()
-    
+
     def MoveItems(self, items, up):
         """Move items in the list
 
@@ -953,54 +1027,62 @@ class ItemListCtrl(ModelListCtrl):
         """
         if len(items) < 1:
             return
-        
+
         if items[0] == 0 and up:
             del items[0]
         if len(items) < 1:
             return
-        
-        if items[-1] == len(self.itemDataMap.keys())-1 and not up:
+
+        if items[-1] == len(self.itemDataMap.keys()) - 1 and not up:
             del items[-1]
         if len(items) < 1:
             return
 
-        model = self.frame.GetModel()        
+        model = self.frame.GetModel()
         modelActions = model.GetItems(objType=ModelAction)
         idxList = dict()
         itemsToSelect = list()
         for i in items:
             if up:
-                idx = i-1
+                idx = i - 1
             else:
-                idx = i+1
+                idx = i + 1
             itemsToSelect.append(idx)
-            idxList[model.GetItemIndex(modelActions[i])] = model.GetItemIndex(modelActions[idx])
-        
+            idxList[
+                model.GetItemIndex(
+                    modelActions[i])] = model.GetItemIndex(
+                modelActions[idx])
+
         # reorganize model items
         model.ReorderItems(idxList)
         model.Normalize()
         self.Populate(model.GetItems(objType=ModelAction))
-        
+
         # re-selected originaly selected item
         for item in itemsToSelect:
-            self.SetItemState(item,  wx.LIST_STATE_SELECTED, wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
+            self.SetItemState(
+                item,
+                wx.LIST_STATE_SELECTED,
+                wx.LIST_STATE_SELECTED | wx.LIST_STATE_FOCUSED)
+
 
 class ItemCheckListCtrl(ItemListCtrl, listmix.CheckListCtrlMixin):
+
     def __init__(self, parent, shape, columns, frame, **kwargs):
         self.parent = parent
-        self.frame  = frame
-        
+        self.frame = frame
+
         ItemListCtrl.__init__(self, parent, columns, frame,
-                              disablePopup = True, **kwargs)
+                              disablePopup=True, **kwargs)
         listmix.CheckListCtrlMixin.__init__(self)
         self.SetColumnWidth(0, 100)
-        
-        self.shape  = shape
-        
+
+        self.shape = shape
+
     def OnBeginEdit(self, event):
         """Disable editing"""
         event.Veto()
-        
+
     def OnCheckItem(self, index, flag):
         """Item checked/unchecked"""
         name = self.GetLabel()
@@ -1008,19 +1090,19 @@ class ItemCheckListCtrl(ItemListCtrl, listmix.CheckListCtrlMixin):
             self.window.OnCheckItemIf(index, flag)
         elif name == 'ElseBlockList' and self.window:
             self.window.OnCheckItemElse(index, flag)
-        
+
     def GetItems(self):
         """Get list of selected actions"""
-        ids = { 'checked'   : list(),
-                'unchecked' : list() }
-        
+        ids = {'checked': list(),
+               'unchecked': list()}
+
         # action ids start at 1
         for i in range(self.GetItemCount()):
             if self.IsChecked(i):
                 ids['checked'].append(self.itemIdMap[i])
             else:
                 ids['unchecked'].append(self.itemIdMap[i])
-            
+
         return ids
 
     def CheckItemById(self, aId, flag):
diff --git a/gui/wxpython/gmodeler/frame.py b/gui/wxpython/gmodeler/frame.py
index a7d9401..3beaadb 100644
--- a/gui/wxpython/gmodeler/frame.py
+++ b/gui/wxpython/gmodeler/frame.py
@@ -29,40 +29,42 @@ import re
 import random
 
 import wx
-from   wx.lib import ogl
-import wx.lib.flatnotebook    as FN
+from wx.lib import ogl
+import wx.lib.flatnotebook as FN
 
-from core                 import globalvar
+from core import globalvar
 from core.utils import _
-from gui_core.widgets     import GNotebook
+from gui_core.widgets import GNotebook
 from core.gconsole        import GConsole, \
     EVT_CMD_RUN, EVT_CMD_DONE, EVT_CMD_PREPARE
-from gui_core.goutput     import GConsoleWindow
-from core.debug           import Debug
-from core.gcmd            import GMessage, GException, GWarning, GError, RunCommand
-from gui_core.dialogs     import GetImageHandlers, TextEntryDialog
-from gui_core.ghelp       import ShowAboutDialog
+from gui_core.goutput import GConsoleWindow
+from core.debug import Debug
+from core.gcmd import GMessage, GException, GWarning, GError, RunCommand
+from gui_core.dialogs import GetImageHandlers, TextEntryDialog
+from gui_core.ghelp import ShowAboutDialog
 from gui_core.preferences import PreferencesBaseDialog
-from core.settings        import UserSettings
-from gui_core.menu        import Menu
-from gmodeler.menudata    import ModelerMenuData
-from gui_core.forms       import GUI
+from core.settings import UserSettings
+from gui_core.menu import Menu
+from gmodeler.menudata import ModelerMenuData
+from gui_core.forms import GUI
 from gmodeler.preferences import PreferencesDialog, PropertiesDialog
-from gmodeler.toolbars    import ModelerToolbar
+from gmodeler.toolbars import ModelerToolbar
 from core.giface import Notification
-from gui_core.pystc       import PyStc
+from gui_core.pystc import PyStc
 from gmodeler.giface import GraphicalModelerGrassInterface
-from gmodeler.model       import *
-from gmodeler.dialogs     import *
+from gmodeler.model import *
+from gmodeler.dialogs import *
 
 from grass.script.utils import try_remove
 from grass.script import core as grass
 
+
 class ModelFrame(wx.Frame):
-    def __init__(self, parent, giface, id = wx.ID_ANY,
-                 title = _("GRASS GIS Graphical Modeler"), **kwargs):
+
+    def __init__(self, parent, giface, id=wx.ID_ANY,
+                 title=_("GRASS GIS Graphical Modeler"), **kwargs):
         """Graphical modeler main window
-        
+
         :param parent: parent window
         :param id: window id
         :param title: window title
@@ -71,91 +73,121 @@ class ModelFrame(wx.Frame):
         """
         self.parent = parent
         self._giface = giface
-        self.searchDialog = None # module search dialog
+        self.searchDialog = None  # module search dialog
         self.baseTitle = title
         self.modelFile = None    # loaded model
         self.modelChanged = False
-        self.randomness = 40 # random layout
-        
+        self.randomness = 40  # random layout
+
         self.cursors = {
-            "default" : wx.StockCursor(wx.CURSOR_ARROW),
-            "cross"   : wx.StockCursor(wx.CURSOR_CROSS),
-            }
-        
-        wx.Frame.__init__(self, parent = parent, id = id, title = title, **kwargs)
+            "default": wx.StockCursor(wx.CURSOR_ARROW),
+            "cross": wx.StockCursor(wx.CURSOR_CROSS),
+        }
+
+        wx.Frame.__init__(self, parent=parent, id=id, title=title, **kwargs)
         self.SetName("Modeler")
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
-        self.menubar = Menu(parent = self, model = ModelerMenuData().GetModel(separators=True))        
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.menubar = Menu(
+            parent=self,
+            model=ModelerMenuData().GetModel(
+                separators=True))
         self.SetMenuBar(self.menubar)
-        
-        self.toolbar = ModelerToolbar(parent = self)
+
+        self.toolbar = ModelerToolbar(parent=self)
         # workaround for http://trac.wxwidgets.org/ticket/13888
         if sys.platform != 'darwin':
             self.SetToolBar(self.toolbar)
-        
-        self.statusbar = self.CreateStatusBar(number = 1)
-        
-        self.notebook = GNotebook(parent = self,
-                                  style = FN.FNB_FANCY_TABS | FN.FNB_BOTTOM |
+
+        self.statusbar = self.CreateStatusBar(number=1)
+
+        self.notebook = GNotebook(parent=self,
+                                  style=FN.FNB_FANCY_TABS | FN.FNB_BOTTOM |
                                   FN.FNB_NO_NAV_BUTTONS | FN.FNB_NO_X_BUTTON)
-        
+
         self.canvas = ModelCanvas(self)
         self.canvas.SetBackgroundColour(wx.WHITE)
         self.canvas.SetCursor(self.cursors["default"])
 
         self.model = Model(self.canvas)
-        
-        self.variablePanel = VariablePanel(parent = self)
-        
-        self.itemPanel = ItemPanel(parent = self)
-        
-        self.pythonPanel = PythonPanel(parent = self)
-        
-        self._gconsole = GConsole(guiparent = self)
-        self.goutput = GConsoleWindow(parent = self, gconsole = self._gconsole)
-        self.goutput.showNotification.connect(lambda message: self.SetStatusText(message))
+
+        self.variablePanel = VariablePanel(parent=self)
+
+        self.itemPanel = ItemPanel(parent=self)
+
+        self.pythonPanel = PythonPanel(parent=self)
+
+        self._gconsole = GConsole(guiparent=self)
+        self.goutput = GConsoleWindow(parent=self, gconsole=self._gconsole)
+        self.goutput.showNotification.connect(
+            lambda message: self.SetStatusText(message))
 
         # here events are binded twice
-        self._gconsole.Bind(EVT_CMD_RUN,
-            lambda event: self._switchPageHandler(event=event, notification=Notification.MAKE_VISIBLE))
-        self._gconsole.Bind(EVT_CMD_DONE,
-            lambda event: self._switchPageHandler(event=event, notification=Notification.RAISE_WINDOW))
+        self._gconsole.Bind(
+            EVT_CMD_RUN,
+            lambda event: self._switchPageHandler(
+                event=event,
+                notification=Notification.MAKE_VISIBLE))
+        self._gconsole.Bind(
+            EVT_CMD_DONE,
+            lambda event: self._switchPageHandler(
+                event=event,
+                notification=Notification.RAISE_WINDOW))
         self.Bind(EVT_CMD_RUN, self.OnCmdRun)
-        self._gconsole.Bind(EVT_CMD_DONE, self.OnCmdDone) # rewrite default method to avoid hiding progress bar
+        # rewrite default method to avoid hiding progress bar
+        self._gconsole.Bind(EVT_CMD_DONE, self.OnCmdDone)
         self.Bind(EVT_CMD_PREPARE, self.OnCmdPrepare)
-        
-        self.notebook.AddPage(page = self.canvas, text=_('Model'), name = 'model')
-        self.notebook.AddPage(page = self.itemPanel, text=_('Items'), name = 'items')
-        self.notebook.AddPage(page = self.variablePanel, text=_('Variables'), name = 'variables')
-        self.notebook.AddPage(page = self.pythonPanel, text=_('Python editor'), name = 'python')
-        self.notebook.AddPage(page = self.goutput, text=_('Command output'), name = 'output')
+
+        self.notebook.AddPage(page=self.canvas, text=_('Model'), name='model')
+        self.notebook.AddPage(
+            page=self.itemPanel,
+            text=_('Items'),
+            name='items')
+        self.notebook.AddPage(
+            page=self.variablePanel,
+            text=_('Variables'),
+            name='variables')
+        self.notebook.AddPage(
+            page=self.pythonPanel,
+            text=_('Python editor'),
+            name='python')
+        self.notebook.AddPage(
+            page=self.goutput,
+            text=_('Command output'),
+            name='output')
         wx.CallAfter(self.notebook.SetSelectionByName, 'model')
         wx.CallAfter(self.ModelChanged, False)
 
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.Bind(wx.EVT_SIZE, self.OnSize)
-        self.notebook.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
-        
+        self.notebook.Bind(
+            FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+            self.OnPageChanged)
+
         self._layout()
         self.SetMinSize((640, 300))
         self.SetSize((800, 600))
-        
+
         # fix goutput's pane size
         if self.goutput:
             self.goutput.SetSashPosition(int(self.GetSize()[1] * .75))
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        sizer.Add(item = self.notebook, proportion = 1,
-                  flag = wx.EXPAND)
-        
+        sizer.Add(item=self.notebook, proportion=1,
+                  flag=wx.EXPAND)
+
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         sizer.Fit(self)
-        
+
         self.Layout()
 
     def _addEvent(self, item):
@@ -173,20 +205,29 @@ class ModelFrame(wx.Frame):
     def GetCanvas(self):
         """Get canvas"""
         return self.canvas
-    
+
     def GetModel(self):
         """Get model"""
         return self.model
-    
-    def ModelChanged(self, changed = True):
+
+    def ModelChanged(self, changed=True):
         """Update window title"""
         self.modelChanged = changed
-        
+
         if self.modelFile:
             if self.modelChanged:
-                self.SetTitle(self.baseTitle + " - " +  os.path.basename(self.modelFile) + '*')
+                self.SetTitle(
+                    self.baseTitle +
+                    " - " +
+                    os.path.basename(
+                        self.modelFile) +
+                    '*')
             else:
-                self.SetTitle(self.baseTitle + " - " +  os.path.basename(self.modelFile))
+                self.SetTitle(
+                    self.baseTitle +
+                    " - " +
+                    os.path.basename(
+                        self.modelFile))
         else:
             self.SetTitle(self.baseTitle)
 
@@ -196,25 +237,26 @@ class ModelFrame(wx.Frame):
         if page == self.notebook.GetPageIndexByName('python'):
             if self.pythonPanel.IsEmpty():
                 self.pythonPanel.RefreshScript()
-            
+
             if self.pythonPanel.IsModified():
-                self.SetStatusText(_('Python script contains local modifications'), 0)
+                self.SetStatusText(
+                    _('Python script contains local modifications'), 0)
             else:
                 self.SetStatusText(_('Python script is up-to-date'), 0)
         elif page == self.notebook.GetPageIndexByName('items'):
             self.itemPanel.Update()
-            
+
         event.Skip()
 
     def OnVariables(self, event):
         """Switch to variables page"""
         self.notebook.SetSelectionByName('variables')
-        
+
     def OnRemoveItem(self, event):
         """Remove shape
         """
         self.GetCanvas().RemoveSelected()
-        
+
     def OnCanvasRefresh(self, event):
         """Refresh canvas"""
         self.SetStatusText(_("Redrawing model..."), 0)
@@ -226,77 +268,77 @@ class ModelFrame(wx.Frame):
         try:
             action = self.GetModel().GetItems()[event.pid]
             if hasattr(action, "task"):
-                action.Update(running = True)
+                action.Update(running=True)
         except IndexError:
             pass
-        
+
     def OnCmdPrepare(self, event):
         """Prepare for running command"""
         if not event.userData:
             return
-        
-        event.onPrepare(item = event.userData['item'],
-                        params = event.userData['params'])
-        
+
+        event.onPrepare(item=event.userData['item'],
+                        params=event.userData['params'])
+
     def OnCmdDone(self, event):
         """Command done (or aborted)"""
         self.goutput.GetProgressBar().SetValue(0)
         try:
             action = self.GetModel().GetItems()[event.pid]
             if hasattr(action, "task"):
-                action.Update(running = True)
+                action.Update(running=True)
         except IndexError:
             pass
 
     def OnCloseWindow(self, event):
         """Close window"""
-        if self.modelChanged and \
-                UserSettings.Get(group='manager', key='askOnQuit', subkey='enabled'):
+        if self.modelChanged and UserSettings.Get(
+                group='manager', key='askOnQuit', subkey='enabled'):
             if self.modelFile:
                 message = _("Do you want to save changes in the model?")
             else:
                 message = _("Do you want to store current model settings "
                             "to model file?")
-            
+
             # ask user to save current settings
             dlg = wx.MessageDialog(self,
-                                   message = message,
+                                   message=message,
                                    caption=_("Quit Graphical Modeler"),
-                                   style = wx.YES_NO | wx.YES_DEFAULT |
+                                   style=wx.YES_NO | wx.YES_DEFAULT |
                                    wx.CANCEL | wx.ICON_QUESTION | wx.CENTRE)
             ret = dlg.ShowModal()
             if ret == wx.ID_YES:
                 if not self.modelFile:
-                        self.OnWorkspaceSaveAs()
+                    self.OnWorkspaceSaveAs()
                 else:
                     self.WriteModelFile(self.modelFile)
             elif ret == wx.ID_CANCEL:
                 dlg.Destroy()
                 return
             dlg.Destroy()
-        
+
         self.Destroy()
 
     def OnSize(self, event):
         """Window resized, save to the model"""
         self.ModelChanged()
         event.Skip()
-        
+
     def OnPreferences(self, event):
         """Open preferences dialog"""
-        dlg = PreferencesDialog(parent = self, giface = self._giface)
+        dlg = PreferencesDialog(parent=self, giface=self._giface)
         dlg.CenterOnParent()
-        
+
         dlg.ShowModal()
         self.canvas.Refresh()
-        
+
     def OnHelp(self, event):
         """Show help"""
-        self._giface.Help(entry = 'wxGUI.gmodeler')
+        self._giface.Help(entry='wxGUI.gmodeler')
 
     def OnModelProperties(self, event):
         """Model properties dialog"""
-        dlg = PropertiesDialog(parent = self)
+        dlg = PropertiesDialog(parent=self)
         dlg.CentreOnParent()
         properties = self.model.GetProperties()
         dlg.Init(properties)
@@ -304,81 +346,86 @@ class ModelFrame(wx.Frame):
             self.ModelChanged()
             for key, value in dlg.GetValues().iteritems():
                 properties[key] = value
-            for action in self.model.GetItems(objType = ModelAction):
+            for action in self.model.GetItems(objType=ModelAction):
                 action.GetTask().set_flag('overwrite', properties['overwrite'])
-        
+
         dlg.Destroy()
-        
+
     def OnDeleteData(self, event):
         """Delete intermediate data"""
         rast, vect, rast3d, msg = self.model.GetIntermediateData()
-        
+
         if not rast and not vect and not rast3d:
-            GMessage(parent = self,
-                     message = _('No intermediate data to delete.'))
+            GMessage(parent=self,
+                     message=_('No intermediate data to delete.'))
             return
-        
-        dlg = wx.MessageDialog(parent = self,
-                               message= _("Do you want to permanently delete data?%s" % msg),
-                               caption=_("Delete intermediate data?"),
-                               style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
-        
+
+        dlg = wx.MessageDialog(
+            parent=self,
+            message=_(
+                "Do you want to permanently delete data?%s" %
+                msg),
+            caption=_("Delete intermediate data?"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+
         ret = dlg.ShowModal()
         if ret == wx.ID_YES:
             dlg.Destroy()
-            
+
             if rast:
                 self._gconsole.RunCmd(['g.remove', '-f', 'type=raster',
-                                       'name=%s' %','.join(rast)])
+                                       'name=%s' % ','.join(rast)])
             if rast3d:
                 self._gconsole.RunCmd(['g.remove', '-f', 'type=raster_3d',
-                                       'name=%s' %','.join(rast3d)])
+                                       'name=%s' % ','.join(rast3d)])
             if vect:
                 self._gconsole.RunCmd(['g.remove', '-f', 'type=vector',
-                                       'name=%s' %','.join(vect)])
-            
-            self.SetStatusText(_("%d maps deleted from current mapset") % \
-                                 int(len(rast) + len(rast3d) + len(vect)))
+                                       'name=%s' % ','.join(vect)])
+
+            self.SetStatusText(_("%d maps deleted from current mapset") %
+                               int(len(rast) + len(rast3d) + len(vect)))
             return
-        
+
         dlg.Destroy()
-                
+
     def OnModelNew(self, event):
         """Create new model"""
         Debug.msg(4, "ModelFrame.OnModelNew():")
-        
+
         # ask user to save current model
         if self.modelFile and self.modelChanged:
             self.OnModelSave()
         elif self.modelFile is None and \
                 (self.model.GetNumItems() > 0 or len(self.model.GetData()) > 0):
-            dlg = wx.MessageDialog(self, message=_("Current model is not empty. "
-                                                   "Do you want to store current settings "
-                                                   "to model file?"),
-                                   caption=_("Create new model?"),
-                                   style=wx.YES_NO | wx.YES_DEFAULT |
-                                   wx.CANCEL | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Current model is not empty. "
+                    "Do you want to store current settings "
+                    "to model file?"),
+                caption=_("Create new model?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
             ret = dlg.ShowModal()
             if ret == wx.ID_YES:
                 self.OnModelSaveAs()
             elif ret == wx.ID_CANCEL:
                 dlg.Destroy()
                 return
-            
+
             dlg.Destroy()
-        
+
         # delete all items
         self.canvas.GetDiagram().DeleteAllShapes()
         self.model.Reset()
         self.canvas.Refresh()
         self.itemPanel.Update()
         self.variablePanel.Reset()
-        
+
         # no model file loaded
         self.modelFile = None
         self.modelChanged = False
         self.SetTitle(self.baseTitle)
-        
+
     def GetModelFile(self, ext=True):
         """Get model file
 
@@ -389,88 +436,110 @@ class ModelFrame(wx.Frame):
         if ext:
             return self.modelFile
         return os.path.splitext(self.modelFile)[0]
-    
+
     def OnModelOpen(self, event):
         """Load model from file"""
         filename = ''
-        dlg = wx.FileDialog(parent = self, message=_("Choose model file"),
-                            defaultDir = os.getcwd(),
+        dlg = wx.FileDialog(parent=self, message=_("Choose model file"),
+                            defaultDir=os.getcwd(),
                             wildcard=_("GRASS Model File (*.gxm)|*.gxm"))
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
-                    
+
         if not filename:
             return
-        
+
         Debug.msg(4, "ModelFrame.OnModelOpen(): filename=%s" % filename)
-        
+
         # close current model
         self.OnModelClose()
-        
+
         self.LoadModelFile(filename)
-        
+
         self.modelFile = filename
-        self.SetTitle(self.baseTitle + " - " +  os.path.basename(self.modelFile))
-        self.SetStatusText(_('%(items)d items (%(actions)d actions) loaded into model') % \
-                               { 'items' : self.model.GetNumItems(),
-                                 'actions' : self.model.GetNumItems(actionOnly = True) }, 0)
-        
-    def OnModelSave(self, event = None):
+        self.SetTitle(
+            self.baseTitle +
+            " - " +
+            os.path.basename(
+                self.modelFile))
+        self.SetStatusText(
+            _('%(items)d items (%(actions)d actions) loaded into model') % {
+                'items': self.model.GetNumItems(),
+                'actions': self.model.GetNumItems(
+                    actionOnly=True)},
+            0)
+
+    def OnModelSave(self, event=None):
         """Save model to file"""
         if self.modelFile and self.modelChanged:
-            dlg = wx.MessageDialog(self, message=_("Model file <%s> already exists. "
-                                                   "Do you want to overwrite this file?") % \
-                                       self.modelFile,
-                                   caption=_("Save model"),
-                                   style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Model file <%s> already exists. "
+                    "Do you want to overwrite this file?") %
+                self.modelFile,
+                caption=_("Save model"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() == wx.ID_NO:
                 dlg.Destroy()
             else:
-                Debug.msg(4, "ModelFrame.OnModelSave(): filename=%s" % self.modelFile)
+                Debug.msg(
+                    4, "ModelFrame.OnModelSave(): filename=%s" %
+                    self.modelFile)
                 self.WriteModelFile(self.modelFile)
                 self.SetStatusText(_('File <%s> saved') % self.modelFile, 0)
-                self.SetTitle(self.baseTitle + " - " +  os.path.basename(self.modelFile))
+                self.SetTitle(
+                    self.baseTitle +
+                    " - " +
+                    os.path.basename(
+                        self.modelFile))
         elif not self.modelFile:
             self.OnModelSaveAs(None)
-        
+
     def OnModelSaveAs(self, event):
         """Create model to file as"""
         filename = ''
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose file to save current model"),
-                            defaultDir = os.getcwd(),
+        dlg = wx.FileDialog(parent=self,
+                            message=_("Choose file to save current model"),
+                            defaultDir=os.getcwd(),
                             wildcard=_("GRASS Model File (*.gxm)|*.gxm"),
                             style=wx.FD_SAVE)
-        
-        
+
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
-        
+
         if not filename:
             return
-        
+
         # check for extension
         if filename[-4:] != ".gxm":
             filename += ".gxm"
-        
+
         if os.path.exists(filename):
-            dlg = wx.MessageDialog(parent = self,
-                                   message=_("Model file <%s> already exists. "
-                                             "Do you want to overwrite this file?") % filename,
-                                   caption=_("File already exists"),
-                                   style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "Model file <%s> already exists. "
+                    "Do you want to overwrite this file?") %
+                filename,
+                caption=_("File already exists"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() != wx.ID_YES:
                 dlg.Destroy()
                 return
-        
+
         Debug.msg(4, "GMFrame.OnModelSaveAs(): filename=%s" % filename)
-        
+
         self.WriteModelFile(filename)
         self.modelFile = filename
-        self.SetTitle(self.baseTitle + " - " + os.path.basename(self.modelFile))
+        self.SetTitle(
+            self.baseTitle +
+            " - " +
+            os.path.basename(
+                self.modelFile))
         self.SetStatusText(_('File <%s> saved') % self.modelFile, 0)
 
-    def OnModelClose(self, event = None):
+    def OnModelClose(self, event=None):
         """Close model file"""
         Debug.msg(4, "ModelFrame.OnModelClose(): file=%s" % self.modelFile)
         # ask user to save current model
@@ -478,33 +547,35 @@ class ModelFrame(wx.Frame):
             self.OnModelSave()
         elif self.modelFile is None and \
                 (self.model.GetNumItems() > 0 or len(self.model.GetData()) > 0):
-            dlg = wx.MessageDialog(self, message=_("Current model is not empty. "
-                                                   "Do you want to store current settings "
-                                                   "to model file?"),
-                                   caption=_("Create new model?"),
-                                   style=wx.YES_NO | wx.YES_DEFAULT |
-                                   wx.CANCEL | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Current model is not empty. "
+                    "Do you want to store current settings "
+                    "to model file?"),
+                caption=_("Create new model?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
             ret = dlg.ShowModal()
             if ret == wx.ID_YES:
                 self.OnModelSaveAs()
             elif ret == wx.ID_CANCEL:
                 dlg.Destroy()
                 return
-            
+
             dlg.Destroy()
-        
+
         self.modelFile = None
         self.SetTitle(self.baseTitle)
-        
+
         self.canvas.GetDiagram().DeleteAllShapes()
         self.model.Reset()
-        
+
         self.canvas.Refresh()
-        
+
     def OnRunModel(self, event):
         """Run entire model"""
-        self.model.Run(self._gconsole, self.OnDone, parent = self)
-        
+        self.model.Run(self._gconsole, self.OnDone, parent=self)
+
     def OnDone(self, event):
         """Computation finished
 
@@ -518,33 +589,34 @@ class ModelFrame(wx.Frame):
                 data = self.model.fileInput[finput]
                 if not data:
                     continue
-                
+
                 fd = open(finput, "w")
                 try:
                     fd.write(data)
                 finally:
                     fd.close()
             del self.model.fileInput
-        
-    def OnValidateModel(self, event, showMsg = True):
+
+    def OnValidateModel(self, event, showMsg=True):
         """Validate entire model"""
         if self.model.GetNumItems() < 1:
-            GMessage(parent = self, 
-                     message = _('Model is empty. Nothing to validate.'))
+            GMessage(parent=self,
+                     message=_('Model is empty. Nothing to validate.'))
             return
-        
-        
+
         self.SetStatusText(_('Validating model...'), 0)
         errList = self.model.Validate()
         self.SetStatusText('', 0)
-        
+
         if errList:
-            GWarning(parent = self,
-                     message = _('Model is not valid.\n\n%s') % '\n'.join(errList))
+            GWarning(
+                parent=self,
+                message=_('Model is not valid.\n\n%s') %
+                '\n'.join(errList))
         else:
-            GMessage(parent = self,
-                     message = _('Model is valid.'))
-    
+            GMessage(parent=self,
+                     message=_('Model is valid.'))
+
     def OnExportImage(self, event):
         """Export model to image (default image)
         """
@@ -555,8 +627,8 @@ class ModelFrame(wx.Frame):
         # get current size of canvas
         for shape in self.canvas.GetDiagram().GetShapeList():
             w, h = shape.GetBoundingBoxMax()
-            x    = shape.GetX()
-            y    = shape.GetY()
+            x = shape.GetX()
+            y = shape.GetY()
             xmin = x - w / 2
             xmax = x + w / 2
             ymin = y - h / 2
@@ -571,54 +643,55 @@ class ModelFrame(wx.Frame):
                 ymaxImg = ymax
         size = wx.Size(int(xmaxImg - xminImg) + 50,
                        int(ymaxImg - yminImg) + 50)
-        bitmap = wx.EmptyBitmap(width = size.width, height = size.height)
-        
+        bitmap = wx.EmptyBitmap(width=size.width, height=size.height)
+
         filetype, ltype = GetImageHandlers(wx.ImageFromBitmap(bitmap))
-        
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to save the image (no need to add extension)"),
-                            defaultDir = "",
-                            defaultFile = "",
-                            wildcard = filetype,
-                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
-        
+
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose a file name to save the image (no need to add extension)"),
+            defaultDir="",
+            defaultFile="",
+            wildcard=filetype,
+            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
                 dlg.Destroy()
                 return
-            
+
             base, ext = os.path.splitext(path)
             fileType = ltype[dlg.GetFilterIndex()]['type']
-            extType  = ltype[dlg.GetFilterIndex()]['ext']
+            extType = ltype[dlg.GetFilterIndex()]['ext']
             if ext != extType:
                 path = base + '.' + extType
-            
+
             dc = wx.MemoryDC(bitmap)
             dc.SetBackground(wx.WHITE_BRUSH)
             dc.SetBackgroundMode(wx.SOLID)
-            
+
             dc.BeginDrawing()
             self.canvas.GetDiagram().Clear(dc)
             self.canvas.GetDiagram().Redraw(dc)
             dc.EndDrawing()
-            
+
             bitmap.SaveFile(path, fileType)
             self.SetStatusText(_("Model exported to <%s>") % path)
-        
+
         dlg.Destroy()
-        
-    def OnExportPython(self, event = None, text = None):
+
+    def OnExportPython(self, event=None, text=None):
         """Export model to Python script"""
-        filename = self.pythonPanel.SaveAs(force = True)
+        filename = self.pythonPanel.SaveAs(force=True)
         self.SetStatusText(_("Model exported to <%s>") % filename)
 
     def OnDefineRelation(self, event):
         """Define relation between data and action items"""
         self.canvas.SetCursor(self.cursors["cross"])
-        self.defineRelation = { 'from' : None,
-                                'to'   : None }
-        
+        self.defineRelation = {'from': None,
+                               'to': None}
+
     def OnDefineLoop(self, event):
         """Define new loop in the model
 
@@ -626,18 +699,18 @@ class ModelFrame(wx.Frame):
             move to ModelCanvas?
         """
         self.ModelChanged()
-        
+
         width, height = self.canvas.GetSize()
-        loop = ModelLoop(self, x = width/2, y = height/2,
-                         id = self.model.GetNumItems() + 1)
+        loop = ModelLoop(self, x=width / 2, y=height / 2,
+                         id=self.model.GetNumItems() + 1)
         self.canvas.diagram.AddShape(loop)
         loop.Show(True)
-        
+
         self._addEvent(loop)
         self.model.AddItem(loop)
-        
+
         self.canvas.Refresh()
-        
+
     def OnDefineCondition(self, event):
         """Define new condition in the model
 
@@ -645,18 +718,18 @@ class ModelFrame(wx.Frame):
             move to ModelCanvas?
         """
         self.ModelChanged()
-        
+
         width, height = self.canvas.GetSize()
-        cond = ModelCondition(self, x = width/2, y = height/2,
-                              id = self.model.GetNumItems() + 1)
+        cond = ModelCondition(self, x=width / 2, y=height / 2,
+                              id=self.model.GetNumItems() + 1)
         self.canvas.diagram.AddShape(cond)
         cond.Show(True)
-        
+
         self._addEvent(cond)
         self.model.AddItem(cond)
-        
+
         self.canvas.Refresh()
-    
+
     def OnAddAction(self, event):
         """Add action to model"""
         if self.searchDialog is None:
@@ -664,105 +737,125 @@ class ModelFrame(wx.Frame):
             self.searchDialog.CentreOnParent()
         else:
             self.searchDialog.Reset()
-        
+
         if self.searchDialog.ShowModal() == wx.ID_CANCEL:
             self.searchDialog.Hide()
             return
-            
+
         cmd = self.searchDialog.GetCmd()
         self.searchDialog.Hide()
-        
+
         self.ModelChanged()
-        
+
         # add action to canvas
         x, y = self.canvas.GetNewShapePos()
         label, comment = self.searchDialog.GetLabel()
-        action = ModelAction(self.model, cmd = cmd,
-                             x = x + self._randomShift(),
-                             y = y + self._randomShift(),
-                             id = self.model.GetNextId(), label = label, comment = comment)
+        action = ModelAction(
+            self.model,
+            cmd=cmd,
+            x=x + self._randomShift(),
+            y=y + self._randomShift(),
+            id=self.model.GetNextId(),
+            label=label,
+            comment=comment)
         overwrite = self.model.GetProperties().get('overwrite', None)
         if overwrite is not None:
             action.GetTask().set_flag('overwrite', overwrite)
-        
+
         self.canvas.diagram.AddShape(action)
         action.Show(True)
-        
+
         self._addEvent(action)
         self.model.AddItem(action)
-        
+
         self.itemPanel.Update()
         self.canvas.Refresh()
         time.sleep(.1)
-        
+
         # show properties dialog
         win = action.GetPropDialog()
         if not win:
             cmdLength = len(action.GetLog(string=False))
             if cmdLength > 1 and action.IsValid():
-                self.GetOptData(dcmd = action.GetLog(string = False), layer = action,
-                                params = action.GetParams(), propwin = None)
+                self.GetOptData(dcmd=action.GetLog(string=False), layer=action,
+                                params=action.GetParams(), propwin=None)
             else:
-                gmodule = GUI(parent = self, show = True,
-                              giface = GraphicalModelerGrassInterface(self.model))
-                gmodule.ParseCommand(action.GetLog(string = False),
-                                     completed = (self.GetOptData, action, action.GetParams()))
+                gmodule = GUI(
+                    parent=self,
+                    show=True,
+                    giface=GraphicalModelerGrassInterface(
+                        self.model))
+                gmodule.ParseCommand(
+                    action.GetLog(
+                        string=False), completed=(
+                        self.GetOptData, action, action.GetParams()))
         elif win and not win.IsShown():
             win.Show()
-        
+
         if win:
             win.Raise()
-        
+
     def OnAddData(self, event):
         """Add data item to model
         """
         # add action to canvas
         width, height = self.canvas.GetSize()
-        data = ModelData(self, x = width/2 + self._randomShift(),
-                         y = height/2 + self._randomShift())
-       
-        dlg = ModelDataDialog(parent = self, shape = data)
+        data = ModelData(self, x=width / 2 + self._randomShift(),
+                         y=height / 2 + self._randomShift())
+
+        dlg = ModelDataDialog(parent=self, shape=data)
         data.SetPropDialog(dlg)
         dlg.CentreOnParent()
         ret = dlg.ShowModal()
         dlg.Destroy()
         if ret != wx.ID_OK:
             return
-        
+
         data.Update()
         self.canvas.diagram.AddShape(data)
         data.Show(True)
-        
+
         self.ModelChanged()
-        
+
         self._addEvent(data)
         self.model.AddItem(data)
-        
+
         self.canvas.Refresh()
 
     def OnAddComment(self, event):
         """Add comment to the model"""
-        dlg = TextEntryDialog(parent = self, message = _("Comment:"), caption = _("Add comment"),
-                              textStyle = wx.TE_MULTILINE, textSize = (300, 75))
-        
+        dlg = TextEntryDialog(
+            parent=self,
+            message=_("Comment:"),
+            caption=_("Add comment"),
+            textStyle=wx.TE_MULTILINE,
+            textSize=(
+                300,
+                75))
+
         if dlg.ShowModal() == wx.ID_OK:
             comment = dlg.GetValue()
             if not comment:
-                GError(_("Empty comment. Nothing to add to the model."), parent = self)
+                GError(
+                    _("Empty comment. Nothing to add to the model."),
+                    parent=self)
             else:
                 x, y = self.canvas.GetNewShapePos()
-                commentObj = ModelComment(self.model, x = x + self._randomShift(), y = y + self._randomShift(),
-                                          id = self.model.GetNextId(), label = comment)
+                commentObj = ModelComment(
+                    self.model, x=x + self._randomShift(),
+                    y=y + self._randomShift(),
+                    id=self.model.GetNextId(),
+                    label=comment)
                 self.canvas.diagram.AddShape(commentObj)
                 commentObj.Show(True)
                 self._addEvent(commentObj)
                 self.model.AddItem(commentObj)
-                
+
                 self.canvas.Refresh()
                 self.ModelChanged()
-        
+
         dlg.Destroy()
-        
+
     def _switchPageHandler(self, event, notification):
         self._switchPage(notification=notification)
         event.Skip()
@@ -781,54 +874,62 @@ class ModelFrame(wx.Frame):
     def OnAbout(self, event):
         """Display About window"""
         ShowAboutDialog(prgName=_('wxGUI Graphical Modeler'), startYear='2010')
-        
+
     def GetOptData(self, dcmd, layer, params, propwin):
         """Process action data"""
-        if params: # add data items
+        if params:  # add data items
             width, height = self.canvas.GetSize()
-            x = width/2 - 200 + self._randomShift()
-            y = height/2 + self._randomShift()
+            x = width / 2 - 200 + self._randomShift()
+            y = height / 2 + self._randomShift()
             for p in params['params']:
-                if p.get('prompt', '') not in ('raster', 'vector', 'raster_3d', 'dbtable'):
+                if p.get(
+                        'prompt', '') not in (
+                        'raster', 'vector', 'raster_3d', 'dbtable'):
                     continue
 
                 # add new data item if defined or required
-                if p.get('value', None) or \
-                   (p.get('age', 'old') != 'old' and p.get('required', 'no') == 'yes'):
+                if p.get(
+                        'value', None) or(
+                        p.get('age', 'old') != 'old' and p.get('required', 'no') ==
+                        'yes'):
                     data = layer.FindData(p.get('name', ''))
                     if data:
                         data.SetValue(p.get('value', ''))
                         data.Update()
                         continue
-                    
+
                     data = self.model.FindData(p.get('value', ''),
                                                p.get('prompt', ''))
                     if data:
                         if p.get('age', 'old') == 'old':
-                            rel = ModelRelation(parent = self, fromShape = data,
-                                                toShape = layer, param = p.get('name', ''))
+                            rel = ModelRelation(
+                                parent=self, fromShape=data, toShape=layer,
+                                param=p.get('name', ''))
                         else:
-                            rel = ModelRelation(parent = self, fromShape = layer,
-                                                toShape = data, param = p.get('name', ''))
+                            rel = ModelRelation(
+                                parent=self, fromShape=layer, toShape=data,
+                                param=p.get('name', ''))
                         layer.AddRelation(rel)
                         data.AddRelation(rel)
                         self.AddLine(rel)
                         data.Update()
                         continue
-                    
-                    data = ModelData(self, value = p.get('value', ''),
-                                     prompt = p.get('prompt', ''),
-                                     x = x, y = y)
+
+                    data = ModelData(self, value=p.get('value', ''),
+                                     prompt=p.get('prompt', ''),
+                                     x=x, y=y)
                     self._addEvent(data)
                     self.canvas.diagram.AddShape(data)
                     data.Show(True)
-                                                            
+
                     if p.get('age', 'old') == 'old':
-                        rel = ModelRelation(parent = self, fromShape = data,
-                                            toShape = layer, param = p.get('name', ''))
+                        rel = ModelRelation(
+                            parent=self, fromShape=data, toShape=layer,
+                            param=p.get('name', ''))
                     else:
-                        rel = ModelRelation(parent = self, fromShape = layer,
-                                            toShape = data, param = p.get('name', ''))
+                        rel = ModelRelation(
+                            parent=self, fromShape=layer, toShape=data,
+                            param=p.get('name', ''))
                     layer.AddRelation(rel)
                     data.AddRelation(rel)
                     self.AddLine(rel)
@@ -842,28 +943,28 @@ class ModelFrame(wx.Frame):
                         for item in remList:
                             self.canvas.diagram.RemoveShape(item)
                             item.__del__()
-            
+
                         for item in upList:
                             item.Update()
 
             # valid / parameterized ?
             layer.SetValid(params)
-            
+
             self.canvas.Refresh()
-        
+
         if dcmd:
             layer.SetProperties(params, propwin)
-            
+
         self.SetStatusText(layer.GetLog(), 0)
-        
+
     def AddLine(self, rel):
         """Add connection between model objects
-        
+
         :param rel: relation
         """
         fromShape = rel.GetFrom()
-        toShape   = rel.GetTo()
-        
+        toShape = rel.GetTo()
+
         rel.SetCanvas(self)
         rel.SetPen(wx.BLACK_PEN)
         rel.SetBrush(wx.BLACK_BRUSH)
@@ -872,37 +973,41 @@ class ModelFrame(wx.Frame):
         rel.MakeLineControlPoints(2)
         if points:
             for x, y in points:
-                rel.InsertLineControlPoint(point = wx.RealPoint(x, y))
-        
+                rel.InsertLineControlPoint(point=wx.RealPoint(x, y))
+
         self._addEvent(rel)
         try:
             fromShape.AddLine(rel, toShape)
         except TypeError:
-            pass # bug when connecting ModelCondition and ModelLoop - to be fixed
-        
+            pass  # bug when connecting ModelCondition and ModelLoop - to be fixed
+
         self.canvas.diagram.AddShape(rel)
         rel.Show(True)
-        
+
     def LoadModelFile(self, filename):
         """Load model definition stored in GRASS Model XML file (gxm)
         """
         try:
             self.model.LoadModel(filename)
         except GException as e:
-            GError(parent = self,
-                   message = _("Reading model file <%s> failed.\n"
-                               "Invalid file, unable to parse XML document.\n\n%s") % \
-                       (filename, e),
-                   showTraceback = False)
+            GError(
+                parent=self, message=_(
+                    "Reading model file <%s> failed.\n"
+                    "Invalid file, unable to parse XML document.\n\n%s") %
+                (filename, e), showTraceback=False)
             return
-        
+
         self.modelFile = filename
-        self.SetTitle(self.baseTitle + " - " +  os.path.basename(self.modelFile))
-        
+        self.SetTitle(
+            self.baseTitle +
+            " - " +
+            os.path.basename(
+                self.modelFile))
+
         self.SetStatusText(_("Please wait, loading model..."), 0)
-        
+
         # load actions
-        for item in self.model.GetItems(objType = ModelAction):
+        for item in self.model.GetItems(objType=ModelAction):
             self._addEvent(item)
             self.canvas.diagram.AddShape(item)
             item.Show(True)
@@ -916,116 +1021,128 @@ class ModelFrame(wx.Frame):
                 self.canvas.diagram.AddShape(dataItem)
                 self.AddLine(rel)
                 dataItem.Show(True)
-        
+
         # load loops
-        for item in self.model.GetItems(objType = ModelLoop):
+        for item in self.model.GetItems(objType=ModelLoop):
             self._addEvent(item)
             self.canvas.diagram.AddShape(item)
             item.Show(True)
-            
+
             # connect items in the loop
             self.DefineLoop(item)
 
         # load conditions
-        for item in self.model.GetItems(objType = ModelCondition):
+        for item in self.model.GetItems(objType=ModelCondition):
             self._addEvent(item)
             self.canvas.diagram.AddShape(item)
             item.Show(True)
-            
+
             # connect items in the condition
             self.DefineCondition(item)
-        
+
         # load comments
-        for item in self.model.GetItems(objType = ModelComment):
+        for item in self.model.GetItems(objType=ModelComment):
             self._addEvent(item)
             self.canvas.diagram.AddShape(item)
             item.Show(True)
-        
+
         # load variables
         self.variablePanel.Update()
         self.itemPanel.Update()
         self.SetStatusText('', 0)
-        
+
         # final updates
-        for action in self.model.GetItems(objType = ModelAction):
+        for action in self.model.GetItems(objType=ModelAction):
             action.SetValid(action.GetParams())
             action.Update()
-        
+
         self.canvas.Refresh(True)
-        
+
     def WriteModelFile(self, filename):
         """Save model to model file, recover original file on error.
-        
+
         :return: True on success
         :return: False on failure
         """
         self.ModelChanged(False)
         tmpfile = tempfile.TemporaryFile(mode='w+b')
         try:
-            WriteModelFile(fd = tmpfile, model = self.model)
-        except StandardError:
-            GError(parent = self,
-                   message = _("Writing current settings to model file failed."))
+            WriteModelFile(fd=tmpfile, model=self.model)
+        except Exception:
+            GError(parent=self,
+                   message=_("Writing current settings to model file failed."))
             return False
-        
+
         try:
             mfile = open(filename, "w")
             tmpfile.seek(0)
             for line in tmpfile.readlines():
                 mfile.write(line)
         except IOError:
-            wx.MessageBox(parent = self,
-                          message = _("Unable to open file <%s> for writing.") % filename,
-                          caption = _("Error"),
-                          style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+            wx.MessageBox(
+                parent=self,
+                message=_("Unable to open file <%s> for writing.") %
+                filename,
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             return False
-        
+
         mfile.close()
-        
+
         return True
-    
+
     def DefineLoop(self, loop):
         """Define loop with given list of items"""
         parent = loop
         items = loop.GetItems(self.GetModel().GetItems())
         if not items:
             return
-        
+
         # remove defined relations first
         for rel in loop.GetRelations():
             self.canvas.GetDiagram().RemoveShape(rel)
         loop.Clear()
-        
+
         for item in items:
-            rel = ModelRelation(parent = self, fromShape = parent, toShape = item)
+            rel = ModelRelation(parent=self, fromShape=parent, toShape=item)
             dx = item.GetX() - parent.GetX()
             dy = item.GetY() - parent.GetY()
             loop.AddRelation(rel)
             if dx != 0:
-                rel.SetControlPoints(((parent.GetX(), parent.GetY() + dy / 2),
-                                      (parent.GetX() + dx, parent.GetY() + dy / 2)))
+                rel.SetControlPoints(
+                    ((parent.GetX(),
+                      parent.GetY() + dy / 2),
+                     (parent.GetX() + dx, parent.GetY() + dy / 2)))
             self.AddLine(rel)
             parent = item
-        
+
         # close loop
         item = items[-1]
-        rel = ModelRelation(parent = self, fromShape = item, toShape = loop)
+        rel = ModelRelation(parent=self, fromShape=item, toShape=loop)
         loop.AddRelation(rel)
         self.AddLine(rel)
         dx = (item.GetX() - loop.GetX()) + loop.GetWidth() / 2 + 50
         dy = item.GetHeight() / 2 + 50
         rel.MakeLineControlPoints(0)
-        rel.InsertLineControlPoint(point = wx.RealPoint(loop.GetX() - loop.GetWidth() / 2 ,
-                                                        loop.GetY()))
-        rel.InsertLineControlPoint(point = wx.RealPoint(item.GetX(),
-                                                        item.GetY() + item.GetHeight() / 2))
-        rel.InsertLineControlPoint(point = wx.RealPoint(item.GetX(),
-                                                        item.GetY() + dy))
-        rel.InsertLineControlPoint(point = wx.RealPoint(item.GetX() - dx,
-                                                        item.GetY() + dy))
-        rel.InsertLineControlPoint(point = wx.RealPoint(item.GetX() - dx,
-                                                        loop.GetY()))
-        
+        rel.InsertLineControlPoint(
+            point=wx.RealPoint(
+                loop.GetX() -
+                loop.GetWidth() /
+                2,
+                loop.GetY()))
+        rel.InsertLineControlPoint(
+            point=wx.RealPoint(
+                item.GetX(),
+                item.GetY() +
+                item.GetHeight() /
+                2))
+        rel.InsertLineControlPoint(point=wx.RealPoint(item.GetX(),
+                                                      item.GetY() + dy))
+        rel.InsertLineControlPoint(point=wx.RealPoint(item.GetX() - dx,
+                                                      item.GetY() + dy))
+        rel.InsertLineControlPoint(point=wx.RealPoint(item.GetX() - dx,
+                                                      loop.GetY()))
+
         self.canvas.Refresh()
 
     def DefineCondition(self, condition):
@@ -1033,55 +1150,63 @@ class ModelFrame(wx.Frame):
         items = condition.GetItems(self.model.GetItems(objType=ModelAction))
         if not items['if'] and not items['else']:
             return
-        
+
         parent = condition
-        
+
         # remove defined relations first
         for rel in condition.GetRelations():
             self.canvas.GetDiagram().RemoveShape(rel)
         condition.Clear()
-        dxIf   = condition.GetX() + condition.GetWidth() / 2
+        dxIf = condition.GetX() + condition.GetWidth() / 2
         dxElse = condition.GetX() - condition.GetWidth() / 2
-        dy     = condition.GetY()
+        dy = condition.GetY()
         for branch in items.keys():
             for item in items[branch]:
-                rel = ModelRelation(parent = self, fromShape = parent,
-                                    toShape = item)
+                rel = ModelRelation(parent=self, fromShape=parent,
+                                    toShape=item)
                 condition.AddRelation(rel)
                 self.AddLine(rel)
                 rel.MakeLineControlPoints(0)
                 if branch == 'if':
-                    rel.InsertLineControlPoint(point = wx.RealPoint(item.GetX() - item.GetWidth() / 2, item.GetY()))
-                    rel.InsertLineControlPoint(point = wx.RealPoint(dxIf, dy))
+                    rel.InsertLineControlPoint(
+                        point=wx.RealPoint(
+                            item.GetX() - item.GetWidth() / 2,
+                            item.GetY()))
+                    rel.InsertLineControlPoint(point=wx.RealPoint(dxIf, dy))
                 else:
-                    rel.InsertLineControlPoint(point = wx.RealPoint(dxElse, dy))
-                    rel.InsertLineControlPoint(point = wx.RealPoint(item.GetX() - item.GetWidth() / 2, item.GetY()))
+                    rel.InsertLineControlPoint(point=wx.RealPoint(dxElse, dy))
+                    rel.InsertLineControlPoint(
+                        point=wx.RealPoint(
+                            item.GetX() - item.GetWidth() / 2,
+                            item.GetY()))
                 parent = item
-        
+
         self.canvas.Refresh()
-        
+
+
 class ModelCanvas(ogl.ShapeCanvas):
     """Canvas where model is drawn"""
+
     def __init__(self, parent):
         self.parent = parent
         ogl.OGLInitialize()
         ogl.ShapeCanvas.__init__(self, parent)
-        
+
         self.diagram = ogl.Diagram()
         self.SetDiagram(self.diagram)
         self.diagram.SetCanvas(self)
-        
-        self.SetScrollbars(20, 20, 2000/20, 2000/20)
-        
-        self.Bind(wx.EVT_KEY_UP,  self.OnKeyUp)
-        self.Bind(wx.EVT_LEFT_DOWN,  self.OnLeftDown)
+
+        self.SetScrollbars(20, 20, 2000 / 20, 2000 / 20)
+
+        self.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
+        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
 
     def OnKeyUp(self, event):
         """Key pressed"""
         kc = event.GetKeyCode()
         if kc == wx.WXK_DELETE:
             self.RemoveSelected()
-        
+
     def OnLeftDown(self, evt):
         self.SetFocus()
         evt.Skip()
@@ -1089,9 +1214,10 @@ class ModelCanvas(ogl.ShapeCanvas):
     def RemoveSelected(self):
         """Remove selected shapes"""
         self.parent.ModelChanged()
-        
+
         diagram = self.GetDiagram()
-        shapes = [shape for shape in diagram.GetShapeList() if shape.Selected()]
+        shapes = [shape for shape in diagram.GetShapeList()
+                  if shape.Selected()]
         self.RemoveShapes(shapes)
 
     def RemoveShapes(self, shapes):
@@ -1106,12 +1232,12 @@ class ModelCanvas(ogl.ShapeCanvas):
             for item in remList:
                 diagram.RemoveShape(item)
                 item.__del__()
-            
+
             for item in upList:
                 item.Update()
-        
+
         self.Refresh()
-        
+
     def GetNewShapePos(self):
         """Determine optimal position for newly added object
 
@@ -1119,7 +1245,7 @@ class ModelCanvas(ogl.ShapeCanvas):
         """
         xNew, yNew = map(lambda x: x / 2, self.GetSize())
         diagram = self.GetDiagram()
-        
+
         for shape in diagram.GetShapeList():
             y = shape.GetY()
             yBox = shape.GetBoundingBoxMin()[1] / 2
@@ -1138,33 +1264,35 @@ class ModelCanvas(ogl.ShapeCanvas):
 
         return selected
 
+
 class ModelEvtHandler(ogl.ShapeEvtHandler):
     """Model event handler class"""
+
     def __init__(self, log, frame):
         ogl.ShapeEvtHandler.__init__(self)
         self.log = log
         self.frame = frame
         self.x = self.y = None
-        
-    def OnLeftClick(self, x, y, keys = 0, attachment = 0):
+
+    def OnLeftClick(self, x, y, keys=0, attachment=0):
         """Left mouse button pressed -> select item & update statusbar"""
         shape = self.GetShape()
         canvas = shape.GetCanvas()
         dc = wx.ClientDC(canvas)
-        
+
         # probably does nothing, removed from wxPython 2.9
         # canvas.PrepareDC(dc)
-        
+
         if hasattr(self.frame, 'defineRelation'):
             drel = self.frame.defineRelation
             if drel['from'] is None:
                 drel['from'] = shape
             elif drel['to'] is None:
                 drel['to'] = shape
-                rel = ModelRelation(parent = self.frame, fromShape = drel['from'],
-                                    toShape = drel['to'])
-                dlg = ModelRelationDialog(parent = self.frame,
-                                          shape = rel)
+                rel = ModelRelation(parent=self.frame, fromShape=drel['from'],
+                                    toShape=drel['to'])
+                dlg = ModelRelationDialog(parent=self.frame,
+                                          shape=rel)
                 if dlg.IsValid():
                     ret = dlg.ShowModal()
                     if ret == wx.ID_OK:
@@ -1173,45 +1301,50 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
                         drel['from'].AddRelation(rel)
                         drel['to'].AddRelation(rel)
                         drel['from'].Update()
-                        params = { 'params' : [{ 'name' : option,
-                                                 'value' : drel['from'].GetValue()}] }
+                        params = {'params': [
+                            {'name': option, 'value': drel['from'].GetValue()}]}
                         drel['to'].MergeParams(params)
                         self.frame.AddLine(rel)
-                
+
                     dlg.Destroy()
                 del self.frame.defineRelation
-        
+
         # select object
-        self._onSelectShape(shape, append = True if keys == 1 else False)
-        
+        self._onSelectShape(shape, append=True if keys == 1 else False)
+
         if hasattr(shape, "GetLog"):
             self.log.SetStatusText(shape.GetLog(), 0)
         else:
             self.log.SetStatusText('', 0)
-        
-    def OnLeftDoubleClick(self, x, y, keys = 0, attachment = 0):
+
+    def OnLeftDoubleClick(self, x, y, keys=0, attachment=0):
         """Left mouse button pressed (double-click) -> show properties"""
         self.OnProperties()
-        
-    def OnProperties(self, event = None):
+
+    def OnProperties(self, event=None):
         """Show properties dialog"""
         self.frame.ModelChanged()
         shape = self.GetShape()
         if isinstance(shape, ModelAction):
-            gmodule = GUI(parent = self.frame, show = True,
-                          giface = GraphicalModelerGrassInterface(self.frame.GetModel()))
-            gmodule.ParseCommand(shape.GetLog(string = False),
-                                 completed = (self.frame.GetOptData, shape, shape.GetParams()))
-        
+            gmodule = GUI(
+                parent=self.frame,
+                show=True,
+                giface=GraphicalModelerGrassInterface(
+                    self.frame.GetModel()))
+            gmodule.ParseCommand(
+                shape.GetLog(
+                    string=False), completed=(
+                    self.frame.GetOptData, shape, shape.GetParams()))
+
         elif isinstance(shape, ModelData):
             if shape.GetPrompt() in ('raster', 'vector', 'raster_3d'):
-                dlg = ModelDataDialog(parent = self.frame, shape = shape)
+                dlg = ModelDataDialog(parent=self.frame, shape=shape)
                 shape.SetPropDialog(dlg)
                 dlg.CentreOnParent()
                 dlg.Show()
-        
+
         elif isinstance(shape, ModelLoop):
-            dlg = ModelLoopDialog(parent = self.frame, shape = shape)
+            dlg = ModelLoopDialog(parent=self.frame, shape=shape)
             dlg.CentreOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 shape.SetLabel(dlg.GetCondition())
@@ -1231,11 +1364,11 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
                 self.frame.DefineLoop(shape)
                 self.frame.SetStatusText(shape.GetLog(), 0)
             self.frame.GetCanvas().Refresh()
-            
+
             dlg.Destroy()
-        
+
         elif isinstance(shape, ModelCondition):
-            dlg = ModelConditionDialog(parent = self.frame, shape = shape)
+            dlg = ModelConditionDialog(parent=self.frame, shape=shape)
             dlg.CentreOnParent()
             if dlg.ShowModal() == wx.ID_OK:
                 shape.SetLabel(dlg.GetCondition())
@@ -1251,29 +1384,29 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
                         action.SetBlock(shape)
                         if action:
                             alist.append(aId)
-                    shape.SetItems(alist, branch = b)
+                    shape.SetItems(alist, branch=b)
                 self.frame.DefineCondition(shape)
             self.frame.GetCanvas().Refresh()
-            
+
             dlg.Destroy()
-                   
-    def OnBeginDragLeft(self, x, y, keys = 0, attachment = 0):
+
+    def OnBeginDragLeft(self, x, y, keys=0, attachment=0):
         """Drag shape (begining)"""
         self.frame.ModelChanged()
         if self._previousHandler:
             self._previousHandler.OnBeginDragLeft(x, y, keys, attachment)
-        
-    def OnEndDragLeft(self, x, y, keys = 0, attachment = 0):
+
+    def OnEndDragLeft(self, x, y, keys=0, attachment=0):
         """Drag shape (end)"""
         if self._previousHandler:
             self._previousHandler.OnEndDragLeft(x, y, keys, attachment)
-        
+
         shape = self.GetShape()
         if isinstance(shape, ModelLoop):
             self.frame.DefineLoop(shape)
         elif isinstance(shape, ModelCondition):
             self.frame.DefineCondition(shape)
-        
+
         for mo in shape.GetBlock():
             if isinstance(mo, ModelLoop):
                 self.frame.DefineLoop(mo)
@@ -1289,79 +1422,109 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
         self.frame.ModelChanged()
         if self._previousHandler:
             self._previousHandler.OnEndSize(x, y)
-        
-    def OnRightClick(self, x, y, keys = 0, attachment = 0):
+
+    def OnRightClick(self, x, y, keys=0, attachment=0):
         """Right click -> pop-up menu"""
-        if not hasattr (self, "popupID"):
+        if not hasattr(self, "popupID"):
             self.popupID = dict()
             for key in ('remove', 'enable', 'addPoint',
                         'delPoint', 'intermediate', 'props', 'id',
                         'label', 'comment'):
                 self.popupID[key] = wx.NewId()
-        
+
         # record coordinates
         self.x = x
         self.y = y
-        
+
         # select object
         shape = self.GetShape()
         self._onSelectShape(shape)
-        
+
         popupMenu = wx.Menu()
         popupMenu.Append(self.popupID['remove'], text=_('Remove'))
-        self.frame.Bind(wx.EVT_MENU, self.OnRemove, id = self.popupID['remove'])
+        self.frame.Bind(wx.EVT_MENU, self.OnRemove, id=self.popupID['remove'])
         if isinstance(shape, ModelAction) or isinstance(shape, ModelLoop):
             if shape.IsEnabled():
                 popupMenu.Append(self.popupID['enable'], text=_('Disable'))
-                self.frame.Bind(wx.EVT_MENU, self.OnDisable, id = self.popupID['enable'])
+                self.frame.Bind(
+                    wx.EVT_MENU,
+                    self.OnDisable,
+                    id=self.popupID['enable'])
             else:
                 popupMenu.Append(self.popupID['enable'], text=_('Enable'))
-                self.frame.Bind(wx.EVT_MENU, self.OnEnable, id = self.popupID['enable'])
+                self.frame.Bind(
+                    wx.EVT_MENU,
+                    self.OnEnable,
+                    id=self.popupID['enable'])
         if isinstance(shape, ModelAction) or isinstance(shape, ModelComment):
             popupMenu.AppendSeparator()
         if isinstance(shape, ModelAction):
             popupMenu.Append(self.popupID['label'], text=_('Set label'))
-            self.frame.Bind(wx.EVT_MENU, self.OnSetLabel, id = self.popupID['label'])
+            self.frame.Bind(
+                wx.EVT_MENU,
+                self.OnSetLabel,
+                id=self.popupID['label'])
         if isinstance(shape, ModelAction) or isinstance(shape, ModelComment):
             popupMenu.Append(self.popupID['comment'], text=_('Set comment'))
-            self.frame.Bind(wx.EVT_MENU, self.OnSetComment, id = self.popupID['comment'])
+            self.frame.Bind(
+                wx.EVT_MENU,
+                self.OnSetComment,
+                id=self.popupID['comment'])
 
         if isinstance(shape, ModelRelation):
             popupMenu.AppendSeparator()
-            popupMenu.Append(self.popupID['addPoint'], text=_('Add control point'))
-            self.frame.Bind(wx.EVT_MENU, self.OnAddPoint, id = self.popupID['addPoint'])
-            popupMenu.Append(self.popupID['delPoint'], text=_('Remove control point'))
-            self.frame.Bind(wx.EVT_MENU, self.OnRemovePoint, id = self.popupID['delPoint'])
+            popupMenu.Append(
+                self.popupID['addPoint'],
+                text=_('Add control point'))
+            self.frame.Bind(
+                wx.EVT_MENU,
+                self.OnAddPoint,
+                id=self.popupID['addPoint'])
+            popupMenu.Append(
+                self.popupID['delPoint'],
+                text=_('Remove control point'))
+            self.frame.Bind(
+                wx.EVT_MENU,
+                self.OnRemovePoint,
+                id=self.popupID['delPoint'])
             if len(shape.GetLineControlPoints()) == 2:
                 popupMenu.Enable(self.popupID['delPoint'], False)
-        
+
         if isinstance(shape, ModelData) and '@' not in shape.GetValue():
             popupMenu.AppendSeparator()
-            popupMenu.Append(self.popupID['intermediate'], text=_('Intermediate'),
-                             kind = wx.ITEM_CHECK)
+            popupMenu.Append(
+                self.popupID['intermediate'],
+                text=_('Intermediate'),
+                kind=wx.ITEM_CHECK)
             if self.GetShape().IsIntermediate():
                 popupMenu.Check(self.popupID['intermediate'], True)
-            
-            self.frame.Bind(wx.EVT_MENU, self.OnIntermediate, id = self.popupID['intermediate'])
-            
+
+            self.frame.Bind(
+                wx.EVT_MENU,
+                self.OnIntermediate,
+                id=self.popupID['intermediate'])
+
         if isinstance(shape, ModelData) or \
                 isinstance(shape, ModelAction) or \
                 isinstance(shape, ModelLoop):
             popupMenu.AppendSeparator()
             popupMenu.Append(self.popupID['props'], text=_('Properties'))
-            self.frame.Bind(wx.EVT_MENU, self.OnProperties, id = self.popupID['props'])
-        
+            self.frame.Bind(
+                wx.EVT_MENU,
+                self.OnProperties,
+                id=self.popupID['props'])
+
         self.frame.PopupMenu(popupMenu)
         popupMenu.Destroy()
 
     def OnDisable(self, event):
         """Disable action"""
         self._onEnable(False)
-        
+
     def OnEnable(self, event):
         """Disable action"""
         self._onEnable(True)
-        
+
     def _onEnable(self, enable):
         shape = self.GetShape()
         shape.Enable(enable)
@@ -1370,8 +1533,11 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
 
     def OnSetLabel(self, event):
         shape = self.GetShape()
-        dlg = wx.TextEntryDialog(parent = self.frame, message = _("Label:"), caption = _("Set label"),
-                                 defaultValue = shape.GetLabel())
+        dlg = wx.TextEntryDialog(
+            parent=self.frame,
+            message=_("Label:"),
+            caption=_("Set label"),
+            defaultValue=shape.GetLabel())
         if dlg.ShowModal() == wx.ID_OK:
             label = dlg.GetValue()
             shape.SetLabel(label)
@@ -1379,12 +1545,14 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
             self.frame.itemPanel.Update()
             self.frame.canvas.Refresh()
         dlg.Destroy()
-    
+
     def OnSetComment(self, event):
         shape = self.GetShape()
-        dlg = TextEntryDialog(parent = self.frame, message = _("Comment:"), caption = _("Set comment"),
-                              defaultValue = shape.GetComment(),
-                              textStyle = wx.TE_MULTILINE, textSize = (300, 75))
+        dlg = TextEntryDialog(
+            parent=self.frame, message=_("Comment:"),
+            caption=_("Set comment"),
+            defaultValue=shape.GetComment(),
+            textStyle=wx.TE_MULTILINE, textSize=(300, 75))
         if dlg.ShowModal() == wx.ID_OK:
             comment = dlg.GetValue()
             shape.SetComment(comment)
@@ -1395,35 +1563,35 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
     def _onSelectShape(self, shape, append=False):
         canvas = shape.GetCanvas()
         dc = wx.ClientDC(canvas)
-        
+
         if shape.Selected():
             shape.Select(False, dc)
         else:
             redraw = False
             shapeList = canvas.GetDiagram().GetShapeList()
             toUnselect = list()
-            
+
             if not append:
                 for s in shapeList:
                     if s.Selected():
                         toUnselect.append(s)
-            
+
             shape.Select(True, dc)
-            
+
             for s in toUnselect:
                 s.Select(False, dc)
 
         canvas.Refresh(False)
-        
+
     def OnAddPoint(self, event):
         """Add control point"""
         shape = self.GetShape()
-        shape.InsertLineControlPoint(point = wx.RealPoint(self.x, self.y))
+        shape.InsertLineControlPoint(point=wx.RealPoint(self.x, self.y))
         shape.ResetShapes()
         shape.Select(True)
         self.frame.ModelChanged()
         self.frame.canvas.Refresh()
-        
+
     def OnRemovePoint(self, event):
         """Remove control point"""
         shape = self.GetShape()
@@ -1432,7 +1600,7 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
         shape.Select(True)
         self.frame.ModelChanged()
         self.frame.canvas.Refresh()
-        
+
     def OnIntermediate(self, event):
         """Mark data as intermediate"""
         self.frame.ModelChanged()
@@ -1445,114 +1613,121 @@ class ModelEvtHandler(ogl.ShapeEvtHandler):
         """
         self.frame.GetCanvas().RemoveShapes([self.GetShape()])
         self.frame.itemPanel.Update()
-       
+
+
 class VariablePanel(wx.Panel):
-    def __init__(self, parent, id = wx.ID_ANY,
+
+    def __init__(self, parent, id=wx.ID_ANY,
                  **kwargs):
         """Manage model variables panel
         """
         self.parent = parent
-        
-        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
-        
-        self.listBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                    label=" %s " % _("List of variables - right-click to delete"))
-        
-        self.list = VariableListCtrl(parent = self,
-                                     columns = [_("Name"), _("Data type"),
-                                                _("Default value"), _("Description")],
-                                     frame = self.parent)
-        
+
+        wx.Panel.__init__(self, parent=parent, id=id, **kwargs)
+
+        self.listBox = wx.StaticBox(
+            parent=self, id=wx.ID_ANY, label=" %s " %
+            _("List of variables - right-click to delete"))
+
+        self.list = VariableListCtrl(
+            parent=self,
+            columns=[
+                _("Name"),
+                _("Data type"),
+                _("Default value"),
+                _("Description")],
+            frame=self.parent)
+
         # add new category
-        self.addBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                   label = " %s " % _("Add new variable"))
-        self.name = wx.TextCtrl(parent = self, id = wx.ID_ANY)
+        self.addBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                   label=" %s " % _("Add new variable"))
+        self.name = wx.TextCtrl(parent=self, id=wx.ID_ANY)
         wx.CallAfter(self.name.SetFocus)
-        self.type = wx.Choice(parent = self, id = wx.ID_ANY,
-                              choices = [_("integer"),
-                                         _("float"),
-                                         _("string"),
-                                         _("raster"),
-                                         _("vector"),
-                                         _("region"),
-                                         _("mapset"),
-                                         _("file"),
-                                         _("dir")])
-        self.type.SetSelection(2) # string
-        self.value = wx.TextCtrl(parent = self, id = wx.ID_ANY)
-        self.desc = wx.TextCtrl(parent = self, id = wx.ID_ANY)
-        
+        self.type = wx.Choice(parent=self, id=wx.ID_ANY,
+                              choices=[_("integer"),
+                                       _("float"),
+                                       _("string"),
+                                       _("raster"),
+                                       _("vector"),
+                                       _("region"),
+                                       _("mapset"),
+                                       _("file"),
+                                       _("dir")])
+        self.type.SetSelection(2)  # string
+        self.value = wx.TextCtrl(parent=self, id=wx.ID_ANY)
+        self.desc = wx.TextCtrl(parent=self, id=wx.ID_ANY)
+
         # buttons
-        self.btnAdd = wx.Button(parent = self, id = wx.ID_ADD)
+        self.btnAdd = wx.Button(parent=self, id=wx.ID_ADD)
         self.btnAdd.SetToolTipString(_("Add new variable to the model"))
         self.btnAdd.Enable(False)
-        
+
         # bindings
         self.name.Bind(wx.EVT_TEXT, self.OnText)
         self.value.Bind(wx.EVT_TEXT, self.OnText)
         self.desc.Bind(wx.EVT_TEXT, self.OnText)
         self.btnAdd.Bind(wx.EVT_BUTTON, self.OnAdd)
-        
+
         self._layout()
 
     def _layout(self):
         """Layout dialog"""
         listSizer = wx.StaticBoxSizer(self.listBox, wx.VERTICAL)
-        listSizer.Add(item = self.list, proportion = 1,
-                      flag = wx.EXPAND)
-        
+        listSizer.Add(item=self.list, proportion=1,
+                      flag=wx.EXPAND)
+
         addSizer = wx.StaticBoxSizer(self.addBox, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                           label = "%s:" % _("Name")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 0))
-        gridSizer.Add(item = self.name,
-                      pos = (0, 1),
-                      flag = wx.EXPAND)
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                           label = "%s:" % _("Data type")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 2))
-        gridSizer.Add(item = self.type,
-                      pos = (0, 3))
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                           label = "%s:" % _("Default value")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1, 0))
-        gridSizer.Add(item = self.value,
-                      pos = (1, 1), span = (1, 3),
-                      flag = wx.EXPAND)
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                           label = "%s:" % _("Description")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 0))
-        gridSizer.Add(item = self.desc,
-                      pos = (2, 1), span = (1, 3),
-                      flag = wx.EXPAND)
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label="%s:" % _("Name")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 0))
+        gridSizer.Add(item=self.name,
+                      pos=(0, 1),
+                      flag=wx.EXPAND)
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label="%s:" % _("Data type")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 2))
+        gridSizer.Add(item=self.type,
+                      pos=(0, 3))
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label="%s:" % _("Default value")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(1, 0))
+        gridSizer.Add(item=self.value,
+                      pos=(1, 1), span=(1, 3),
+                      flag=wx.EXPAND)
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label="%s:" % _("Description")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 0))
+        gridSizer.Add(item=self.desc,
+                      pos=(2, 1), span=(1, 3),
+                      flag=wx.EXPAND)
         gridSizer.AddGrowableCol(1)
-        addSizer.Add(item = gridSizer,
-                     flag = wx.EXPAND)
-        addSizer.Add(item = self.btnAdd, proportion = 0,
-                     flag = wx.TOP | wx.ALIGN_RIGHT, border = 5)
-        
+        addSizer.Add(item=gridSizer,
+                     flag=wx.EXPAND)
+        addSizer.Add(item=self.btnAdd, proportion=0,
+                     flag=wx.TOP | wx.ALIGN_RIGHT, border=5)
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = listSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        mainSizer.Add(item = addSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALIGN_CENTER |
-                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        
+        mainSizer.Add(item=listSizer, proportion=1,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+        mainSizer.Add(item=addSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALIGN_CENTER |
+                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
-        
+
     def OnText(self, event):
         """Text entered"""
         if self.name.GetValue():
             self.btnAdd.Enable()
         else:
             self.btnAdd.Enable(False)
-    
+
     def OnAdd(self, event):
         """Add new variable to the list"""
         msg = self.list.Append(self.name.GetValue(),
@@ -1561,89 +1736,99 @@ class VariablePanel(wx.Panel):
                                self.desc.GetValue())
         self.name.SetValue('')
         self.name.SetFocus()
-        
+
         if msg:
-            GError(parent = self,
-                   message = msg)
+            GError(parent=self,
+                   message=msg)
         else:
-            self.type.SetSelection(2) # string
+            self.type.SetSelection(2)  # string
             self.value.SetValue('')
             self.desc.SetValue('')
             self.UpdateModelVariables()
-        
+
     def UpdateModelVariables(self):
         """Update model variables"""
         variables = dict()
         for values in self.list.GetData().itervalues():
             name = values[0]
-            variables[name] = { 'type' : str(values[1]) }
+            variables[name] = {'type': str(values[1])}
             if values[2]:
                 variables[name]['value'] = values[2]
             if values[3]:
                 variables[name]['description'] = values[3]
-        
+
         self.parent.GetModel().SetVariables(variables)
         self.parent.ModelChanged()
 
     def Update(self):
         """Reload list of variables"""
         self.list.OnReload(None)
-        
+
     def Reset(self):
         """Remove all variables"""
         self.list.DeleteAllItems()
         self.parent.GetModel().SetVariables([])
-        
+
+
 class ItemPanel(wx.Panel):
-    def __init__(self, parent, id = wx.ID_ANY,
+
+    def __init__(self, parent, id=wx.ID_ANY,
                  **kwargs):
         """Manage model items
         """
         self.parent = parent
-        
-        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
-        
-        self.listBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                    label=" %s " % _("List of items - right-click to delete"))
-        
-        self.list = ItemListCtrl(parent = self,
-                                 columns = [_("Label"), _("In loop"), _("Parameterized"),
-                                            _("Command")],
-                                 columnsNotEditable = [1, 2, 3],
-                                 frame = self.parent)
-        
+
+        wx.Panel.__init__(self, parent=parent, id=id, **kwargs)
+
+        self.listBox = wx.StaticBox(
+            parent=self, id=wx.ID_ANY, label=" %s " %
+            _("List of items - right-click to delete"))
+
+        self.list = ItemListCtrl(
+            parent=self,
+            columns=[
+                _("Label"),
+                _("In loop"),
+                _("Parameterized"),
+                _("Command")],
+            columnsNotEditable=[
+                1,
+                2,
+                3],
+            frame=self.parent)
+
         self.btnMoveUp = wx.Button(parent=self, id=wx.ID_UP)
         self.btnMoveDown = wx.Button(parent=self, id=wx.ID_DOWN)
         self.btnRefresh = wx.Button(parent=self, id=wx.ID_REFRESH)
-        
+
         self.btnMoveUp.Bind(wx.EVT_BUTTON, self.OnMoveItemsUp)
         self.btnMoveDown.Bind(wx.EVT_BUTTON, self.OnMoveItemsDown)
         self.btnRefresh.Bind(wx.EVT_BUTTON, self.list.OnReload)
-                
+
         self._layout()
 
     def _layout(self):
         """Layout dialog"""
         listSizer = wx.StaticBoxSizer(self.listBox, wx.VERTICAL)
-        listSizer.Add(item = self.list, proportion = 1,
-                      flag = wx.EXPAND)
-        
+        listSizer.Add(item=self.list, proportion=1,
+                      flag=wx.EXPAND)
+
         manageSizer = wx.BoxSizer(wx.VERTICAL)
-        manageSizer.Add(item=self.btnMoveUp, border = 5, flag = wx.ALL)
-        manageSizer.Add(item=self.btnMoveDown, border = 5,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM)
-        manageSizer.Add(item=self.btnRefresh, border = 5,
-                        flag = wx.LEFT | wx.RIGHT)
-        
+        manageSizer.Add(item=self.btnMoveUp, border=5, flag=wx.ALL)
+        manageSizer.Add(item=self.btnMoveDown, border=5,
+                        flag=wx.LEFT | wx.RIGHT | wx.BOTTOM)
+        manageSizer.Add(item=self.btnRefresh, border=5,
+                        flag=wx.LEFT | wx.RIGHT)
+
         mainSizer = wx.BoxSizer(wx.HORIZONTAL)
-        mainSizer.Add(item = listSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 3)
-        mainSizer.Add(item = manageSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 3)
+        mainSizer.Add(item=listSizer, proportion=1,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=3)
+        mainSizer.Add(item=manageSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=3)
 
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
-        
+
     def Update(self):
         """Reload list of variables"""
         self.list.OnReload(None)
@@ -1658,18 +1843,18 @@ class ItemPanel(wx.Panel):
                 break
             items.append(next)
             current = next
-        
+
         if not items:
-            GMessage(_("No items to selected."), parent = self)
-            
+            GMessage(_("No items to selected."), parent=self)
+
         return items
-    
+
     def OnMoveItemsUp(self, event):
         """Item moved up, update action ids"""
         items = self._getSelectedItems()
         if not items:
             return
-        self.list.MoveItems(items, up = True)
+        self.list.MoveItems(items, up=True)
         self.parent.GetCanvas().Refresh()
         self.parent.ModelChanged()
 
@@ -1678,59 +1863,61 @@ class ItemPanel(wx.Panel):
         items = self._getSelectedItems()
         if not items:
             return
-        self.list.MoveItems(items, up = False)
+        self.list.MoveItems(items, up=False)
         self.parent.GetCanvas().Refresh()
         self.parent.ModelChanged()
-    
+
+
 class PythonPanel(wx.Panel):
-    def __init__(self, parent, id = wx.ID_ANY,
+
+    def __init__(self, parent, id=wx.ID_ANY,
                  **kwargs):
         """Model as python script
         """
         self.parent = parent
-        
-        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
 
-        self.filename = None # temp file to run
-        
-        self.bodyBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                    label = " %s " % _("Python script"))
-        self.body = PyStc(parent = self, statusbar = self.parent.GetStatusBar())
+        wx.Panel.__init__(self, parent=parent, id=id, **kwargs)
+
+        self.filename = None  # temp file to run
 
-        self.btnRun = wx.Button(parent = self, id = wx.ID_ANY, label = _("&Run"))
+        self.bodyBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                    label=" %s " % _("Python script"))
+        self.body = PyStc(parent=self, statusbar=self.parent.GetStatusBar())
+
+        self.btnRun = wx.Button(parent=self, id=wx.ID_ANY, label=_("&Run"))
         self.btnRun.SetToolTipString(_("Run python script"))
         self.Bind(wx.EVT_BUTTON, self.OnRun, self.btnRun)
-        self.btnSaveAs = wx.Button(parent = self, id = wx.ID_SAVEAS)
+        self.btnSaveAs = wx.Button(parent=self, id=wx.ID_SAVEAS)
         self.btnSaveAs.SetToolTipString(_("Save python script to file"))
         self.Bind(wx.EVT_BUTTON, self.OnSaveAs, self.btnSaveAs)
-        self.btnRefresh = wx.Button(parent = self, id = wx.ID_REFRESH)
+        self.btnRefresh = wx.Button(parent=self, id=wx.ID_REFRESH)
         self.btnRefresh.SetToolTipString(_("Refresh python script based on the model.\n"
                                            "It will discards all local changes."))
         self.Bind(wx.EVT_BUTTON, self.OnRefresh, self.btnRefresh)
-        
+
         self._layout()
-        
+
     def _layout(self):
         sizer = wx.BoxSizer(wx.VERTICAL)
         bodySizer = wx.StaticBoxSizer(self.bodyBox, wx.HORIZONTAL)
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        bodySizer.Add(item = self.body, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL, border = 3)
-        
-        btnSizer.Add(item = self.btnRefresh, proportion = 0,
-                     flag = wx.LEFT | wx.RIGHT, border = 5)
+
+        bodySizer.Add(item=self.body, proportion=1,
+                      flag=wx.EXPAND | wx.ALL, border=3)
+
+        btnSizer.Add(item=self.btnRefresh, proportion=0,
+                     flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.AddStretchSpacer()
-        btnSizer.Add(item = self.btnSaveAs, proportion = 0,
-                     flag = wx.RIGHT | wx.ALIGN_RIGHT, border = 5)
-        btnSizer.Add(item = self.btnRun, proportion = 0,
-                     flag = wx.RIGHT | wx.ALIGN_RIGHT, border = 5)
-        
-        sizer.Add(item = bodySizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 3)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALL, border = 3)
-        
+        btnSizer.Add(item=self.btnSaveAs, proportion=0,
+                     flag=wx.RIGHT | wx.ALIGN_RIGHT, border=5)
+        btnSizer.Add(item=self.btnRun, proportion=0,
+                     flag=wx.RIGHT | wx.ALIGN_RIGHT, border=5)
+
+        sizer.Add(item=bodySizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=3)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL, border=3)
+
         sizer.Fit(self)
         sizer.SetSizeHints(self)
         self.SetSizer(sizer)
@@ -1743,56 +1930,65 @@ class PythonPanel(wx.Panel):
             fd.write(self.body.GetText())
         except IOError as e:
             GError(_("Unable to launch Python script. %s") % e,
-                   parent = self)
+                   parent=self)
             return
         finally:
             fd.close()
             mode = stat.S_IMODE(os.lstat(self.filename)[stat.ST_MODE])
             os.chmod(self.filename, mode | stat.S_IXUSR)
-        
-        self.parent._gconsole.RunCmd([fd.name], skipInterface=True, onDone=self.OnDone)
-        
+
+        self.parent._gconsole.RunCmd(
+            [fd.name],
+            skipInterface=True, onDone=self.OnDone)
+
         event.Skip()
 
     def OnDone(self, event):
         """Python script finished"""
         try_remove(self.filename)
         self.filename = None
-        
-    def SaveAs(self, force = False):
+
+    def SaveAs(self, force=False):
         """Save python script to file
 
         :return: filename
         """
         filename = ''
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose file to save"),
-                            defaultFile = os.path.basename(self.parent.GetModelFile(ext=False)),
-                            defaultDir = os.getcwd(),
-                            wildcard = _("Python script (*.py)|*.py"),
-                            style = wx.FD_SAVE)
-        
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose file to save"),
+            defaultFile=os.path.basename(
+                self.parent.GetModelFile(
+                    ext=False)),
+            defaultDir=os.getcwd(),
+            wildcard=_("Python script (*.py)|*.py"),
+            style=wx.FD_SAVE)
+
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
-        
+
         if not filename:
             return ''
-        
+
         # check for extension
         if filename[-3:] != ".py":
             filename += ".py"
-        
+
         if os.path.exists(filename):
-            dlg = wx.MessageDialog(self, message=_("File <%s> already exists. "
-                                                   "Do you want to overwrite this file?") % filename,
-                                   caption=_("Save file"),
-                                   style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "File <%s> already exists. "
+                    "Do you want to overwrite this file?") %
+                filename,
+                caption=_("Save file"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() == wx.ID_NO:
                 dlg.Destroy()
                 return ''
-            
+
             dlg.Destroy()
-        
+
         fd = open(filename, "w")
         try:
             if force:
@@ -1801,17 +1997,17 @@ class PythonPanel(wx.Panel):
                 fd.write(self.body.GetText())
         finally:
             fd.close()
-        
+
         # executable file
         os.chmod(filename, stat.S_IRWXU | stat.S_IWUSR)
-        
+
         return filename
-    
+
     def OnSaveAs(self, event):
         """Save python script to file"""
-        self.SaveAs(force = False)
+        self.SaveAs(force=False)
         event.Skip()
-        
+
     def RefreshScript(self):
         """Refresh Python script
 
@@ -1819,38 +2015,39 @@ class PythonPanel(wx.Panel):
         :return: False script hasn't been updated
         """
         if self.body.modified:
-            dlg = wx.MessageDialog(self,
-                                   message = _("Python script is locally modificated. "
-                                               "Refresh will discard all changes. "
-                                               "Do you really want to continue?"),
-                                   caption=_("Update"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
-                                   wx.ICON_QUESTION | wx.CENTRE)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Python script is locally modificated. "
+                    "Refresh will discard all changes. "
+                    "Do you really want to continue?"),
+                caption=_("Update"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             ret = dlg.ShowModal()
             dlg.Destroy()
             if ret == wx.ID_NO:
                 return False
-        
+
         fd = tempfile.TemporaryFile()
         WritePythonFile(fd, self.parent.GetModel())
         fd.seek(0)
         self.body.SetText(fd.read())
         fd.close()
-        
+
         self.body.modified = False
-        
+
         return True
-    
+
     def OnRefresh(self, event):
         """Refresh Python script"""
         if self.RefreshScript():
             self.parent.SetStatusText(_('Python script is up-to-date'), 0)
         event.Skip()
-        
+
     def IsModified(self):
         """Check if python script has been modified"""
         return self.body.modified
-    
+
     def IsEmpty(self):
         """Check if python script is empty"""
         return len(self.body.GetText()) == 0
diff --git a/gui/wxpython/gmodeler/g.gui.gmodeler.html b/gui/wxpython/gmodeler/g.gui.gmodeler.html
index 6128b17..8e2596e 100644
--- a/gui/wxpython/gmodeler/g.gui.gmodeler.html
+++ b/gui/wxpython/gmodeler/g.gui.gmodeler.html
@@ -3,26 +3,26 @@
 <h2>DESCRIPTION</h2>
 
 <p>
-The <b>Graphical Modeler</b> is
-a <em><a href="wxGUI.html">wxGUI</a></em> component which allows the user to
-create, edit, and manage complex models using easy-to-use
-interface. When performing analytical operations in GRASS, the
-operations are not isolated, but part of a chain of operations. Using
-Graphical Modeler, that chain of processes (ie. GRASS modules)
-can be wrapped into one process (ie. model). So it's easier to execute
-the model later with slightly different inputs or parameters.
+The <b>Graphical Modeler</b> is a <em><a href="wxGUI.html">wxGUI</a></em>
+component which allows the user to create, edit, and manage simple and
+complex models using an easy-to-use interface.
+When performing analytical operations in GRASS GIS, the
+operations are not isolated, but part of a chain of operations. Using the
+Graphical Modeler, a chain of processes (i.e. GRASS GIS modules)
+can be wrapped into one process (i.e. model). Subsequently it is easier to
+execute the model later on even with slightly different inputs or parameters.
 <br>
 Models represent a programming technique used in GRASS GIS to
-concatenate models together to accomplish a task. It is advantageous
-when user see boxes and ovals that are connected by lines and
-represent some tasks rather than seeing lines of coded text. Graphical
-Modeler can be used as custom tool that automates a process. Created
-model can simplify or shorten a task can be run many times and it can
-also be shared with others. Important note is that models cannot
-perform specified tasks that one cannot perform manually with GRASS
-GIS. It is recommended to first do process manually, note the steps
-(eg. using Copy button in module dialogs) and later duplicate them in
-model.
+concatenate single steps together to accomplish a task. It is advantageous
+when the user see boxes and ovals that are connected by lines and
+represent some tasks rather than seeing lines of coded text. The Graphical
+Modeler can be used as a custom tool that automates a process. Created
+models can simplify or shorten a task which can be run many times and it can
+also be easily shared with others. Important to note is that models cannot
+perform specified tasks that one cannot also manually perform with GRASS
+GIS. It is recommended to first to develop the process manually, note down
+the steps (e.g. by using the <i>Copy</i> button in module dialogs) and later
+replicate them in model.
 
 <p>
 The Graphical Modeler allows you to:
@@ -31,103 +31,105 @@ The Graphical Modeler allows you to:
   <li>define data items (raster, vector, 3D raster maps)</li>
   <li>define actions (GRASS commands)</li>
   <li>define relations between data and action items</li>
-  <li>define loops (eg. map series) and conditions (if-else statements)</li>
+  <li>define loops (e.g. map series) and conditions (if-else statements)</li>
   <li>define model variables</li>
   <li>parameterize GRASS commands</li>
   <li>define intermediate data</li>
   <li>validate and run model</li>
-  <li>store model properties to the file (<i>GRASS Model File|*.gxm</i>)</li>
+  <li>save model properties to a file (<i>GRASS Model File|*.gxm</i>)</li>
   <li>export model to Python script</li>
   <li>export model to image file</li>
 </ul>
 
 <h3>Main dialog</h3>
 
-Graphical Modeler can be launched from the Layer Manager menu
-<tt>File -> Graphical modeler</tt> or from the main
+The Graphical Modeler can be launched from the Layer Manager menu
+<tt>File -> Graphical modeler</tt> or from the main
 toolbar <img src="icons/modeler-main.png" alt="icon">. It's also
 available as stand-alone module <em>g.gui.gmodeler</em>.
 
 <p>
 The main Graphical Modeler menu contains options which enable the user
 to fully control the model. Directly under the main menu one can find
-toolbar with buttons (see figure below). There are options like
+toolbar with buttons (see figure below). There are options including
 (<font size="2" color="red">1</font>) Create new model,
 (<font size="2" color="red">2</font>) Load model from file,
 (<font size="2" color="red">3</font>) Save current model to file,
 (<font size="2" color="red">4</font>) Export model to image,
 (<font size="2" color="red">5</font>) Export model to Python script,
-(<font size="2" color="red">6</font>) Add command (GRASS modul) to
-model, (<font size="2" color="red">7</font>) Add data to model,
+(<font size="2" color="red">6</font>) Add command (GRASS modul) to model,
+(<font size="2" color="red">7</font>) Add data to model,
 (<font size="2" color="red">8</font>) Manually define relation between
-data and commands, (<font size="2" color="red">9</font>) Add
-loop/series to model, (<font size="2" color="red">10</font>) Add
-comment to model, (<font size="2" color="red">11</font>) Redraw model
-canvas, (<font size="2" color="red">12</font>) Validate model,
-(<font size="2" color="red">13</font>) Run model, (<font size="2"
-color="red">14</font>) Manage model variables, (<font size="2"
-color="red">15</font>) Model settings, (<font size="2"
-color="red">16</font>) Show manual and last of them is button
+data and commands,
+(<font size="2" color="red">9</font>) Add loop/series to model,
+(<font size="2" color="red">10</font>) Add comment to model,
+(<font size="2" color="red">11</font>) Redraw model canvas,
+(<font size="2" color="red">12</font>) Validate model,
+(<font size="2" color="red">13</font>) Run model,
+(<font size="2" color="red">14</font>) Manage model variables,
+(<font size="2" color="red">15</font>) Model settings,
+(<font size="2" color="red">16</font>) Show manual,
 (<font size="2" color="red">17</font>) Quit Graphical Modeler.
 
 <p>
 <center>
-<br>
 <img src="g_gui_gmodeler_toolbar.png">
 <br>
 <i>Figure: Components of Graphical Modeler menu toolbar.</i>
 </center>
 
 <p>
-There is also lower menu bar in Graphical modeler dialog where one can
-manage model items, see commands, add or manage model variables,
-define default values and descriptions. Python editor dialog window
-allows seeing performation written in Python code. Rightmost tab of
-bottom menu is automatically triggered when model is activated and
-shows all the steps of running GRASS modeler modules. In case of some
-errors in calculation process, it is written at that place.
+There is also a lower menu bar in the Graphical modeler dialog where one can
+manage model items, visualize commands, add or manage model variables,
+define default values and descriptions. The Python editor dialog window
+allows seeing workflows written in Python code. The rightmost tab of
+the bottom menu is automatically triggered when the model is activated and
+shows all the steps of running GRASS modeler modules. In case of errors
+in the calculation process, it is written at that place.
 
 <center>
+<a href="g_gui_gmodeler_lower_toolbar.png"><img src="g_gui_gmodeler_lower_toolbar.png" width="700"></a>
 <br>
-<img src="g_gui_gmodeler_lower_toolbar.png">
-<br>
-<i>Figure: Lower Graphical Modeler menu toolbar.</i>
+<i>Figure: Lower Graphical Modeler menu toolbar.
+</i>
 </center>
 
 <h3>Components of models</h3>
 
-The workflow is usually established from four types of diagrams. Input and derived 
-model data are usually represented with oval diagram. 
-This type of model elements stores path to 
-specific data on user's disk. It is possible to insert vector data, raster data, 
-database tables, etc. Type of data is clear distinguishable in model by color. 
-Different model elements are shown on the figures below.
+The workflow is usually established from four types of diagrams. Input and
+derived model data are usually represented with oval diagrams. This type of
+model elements stores path to specific data on the user's disk. It is
+possible to insert vector data, raster data, database tables, etc.
+The type of data is clearly distinguishable in the model by its color.
+Different model elements are shown in the figures below.
 
 <ul>
-  <li> (<font size="2" color="red">A</font>) raster data: <img src="g_gui_gmodeler_mraster.png" alt="raster" style="margin: 0px 0px -5px 0px">
-  <li> (<font size="2" color="red">B</font>) relation: <img src="g_gui_gmodeler_mrelation.png" alt="relation" style="margin: 10px 0px 0px 0px">
-  <li> (<font size="2" color="red">C</font>) GRASS module: <img src="g_gui_gmodeler_mmodule.png" alt="module" style="margin: 0px 0px -5px 0px">
-  <li> (<font size="2" color="red">D</font>) loop: <img src="g_gui_gmodeler_mloop.png" alt="loop" style="margin: 15px 0px -5px 0px">
-  <li> (<font size="2" color="red">E</font>) database table: <img src="g_gui_gmodeler_mdb.png" alt="db" style="margin: 10px 0px -5px 0px">
-  <li> (<font size="2" color="red">F</font>) 3D raster data: <img src="g_gui_gmodeler_mraster3d.png" alt="raster3D" style="margin: 10px 0px -5px 0px"> 
-  <li> (<font size="2" color="red">G</font>) vector data: <img src="g_gui_gmodeler_mvector.png" alt="vector" style="margin: 10px 0px -5px 0px">  
-  <li> (<font size="2" color="red">H</font>) disabled GRASS module: <img src="g_gui_gmodeler_mmodulex.png" alt="module" style="margin: 10px 0px -5px 0px"> 
-  <li> (<font size="2" color="red">I</font>) comment: <img src="g_gui_gmodeler_mcomment.png" alt="comment" style="margin: 10px 0px -5px 0px">  
+  <li> (<font size="2" color="red">A</font>) raster data: <img src="g_gui_gmodeler_raster.png" alt="raster" style="margin: 0px 0px -5px 0px">
+  <li> (<font size="2" color="red">B</font>) relation: <img src="g_gui_gmodeler_relation.png" alt="relation" style="margin: 10px 0px 0px 0px">
+  <li> (<font size="2" color="red">C</font>) GRASS module: <img src="g_gui_gmodeler_modul.png" alt="module" style="margin: 0px 0px -5px 0px">
+  <li> (<font size="2" color="red">D</font>) loop: <img src="g_gui_gmodeler_loop.png" alt="loop" style="margin: 15px 0px -5px 0px">
+  <li> (<font size="2" color="red">E</font>) database table: <img src="g_gui_gmodeler_db.png" alt="db" style="margin: 10px 0px -5px 0px">
+  <li> (<font size="2" color="red">F</font>) 3D raster data: <img src="g_gui_gmodeler_raster3d.png" alt="raster3D" style="margin: 10px 0px -5px 0px"> 
+  <li> (<font size="2" color="red">G</font>) vector data: <img src="g_gui_gmodeler_vector.png" alt="vector" style="margin: 10px 0px -5px 0px">  
+  <li> (<font size="2" color="red">H</font>) disabled GRASS module: <img src="g_gui_gmodeler_modulex.png" alt="module" style="margin: 10px 0px -5px 0px"> 
+  <li> (<font size="2" color="red">I</font>) comment: <img src="g_gui_gmodeler_comment.png" alt="comment" style="margin: 10px 0px -5px 0px">  
 </ul> 
 
 <center>
-<img src="g_gui_gmodeler_frame1.png">
+<a href="g_gui_gmodeler_model_classification.png">
+<img src="g_gui_gmodeler_model_classification.png" width="500"></a>
 <br>
 <i>Figure: A model to perform unsupervised classification using MLC
-(<a href="i.maxlik.html">i.maxlik</a>) and SMAP
-(<a href="i.smap.html">i.smap</a>).</i>
+(<a href="i.maxlik.html">i.maxlik</a>) and SMAP (<a href="i.smap.html">i.smap</a>).
+</i>
 </center>
 
 <p>
 Another example:
 
 <center>
-<img src="g_gui_gmodeler_frame2.png">
+<a href="g_gui_gmodeler_model_usle.png">
+<img src="g_gui_gmodeler_model_usle.png" width="600"></a>
 <br>
 <i>Figure: A model to perform estimation of average annual soil loss
 caused by sheet and rill erosion using The Universal Soil Loss
@@ -138,25 +140,26 @@ Equation.</i>
 Example as part of landslide prediction process:
 
 <center>
-<br>
-<img src="g_gui_gmodeler_frame3.png">
+<a href="g_gui_gmodeler_model_landslides.png">
+<img src="g_gui_gmodeler_model_landslides.png" width="600"></a>
 <br>
 <i>Figure: A model to perform creation of parametric maps used by geologists 
-to predict landlides in area of interest.</i>
+to predict landslides in the area of interest.</i>
 </center>
 
 <h2>EXAMPLE</h2>
 
-In this example <tt>zipcodes_wake</tt> vector data
-and <tt>elev_state_500m</tt> raster data from the North Carolina
+In this example the <tt>zipcodes_wake</tt> vector data and the
+<tt>elev_state_500m</tt> raster data from the North Carolina
 sample dataset (original <a href="http://grass.osgeo.org/sampledata/north_carolina/nc_rast_geotiff.zip">raster</a> and
 <a href="http://grass.osgeo.org/sampledata/north_carolina/nc_shape.zip">vector</a>
 data) are used to calculate average elevation for every
-zone. Important part of the process is Graphical Modeler, namely it's
+zone. The important part of the process is the Graphical Modeler, namely its
 possibilities of process automation.
 
-<p>
-In command console it would be as follows:
+<h3>The workflow shown as a series of commands</h3>
+
+In the command console the procedure looks as follows:
 
 <div class="code"><pre>
 # input data import
@@ -168,7 +171,7 @@ g.region vector=zipcodes_wake
 v.rast.stats -c map=zipcodes_wake raster=elevation column_prefix=rst method=average 
 # univariate statistics on selected table column for zipcode map calculation
 v.db.univar map=zipcodes_wake column=rst_average 
-# conversation from vector to raster layer (due to result presentation)
+# conversion from vector to raster layer (due to result presentation)
 v.to.rast input=zipcodes_wake output=zipcodes_avg use=attr attribute_column=rst_average 
 # display settings
 r.colors -e map=zipcodes_avg color=bgyr                                         
@@ -180,76 +183,245 @@ d.northarrow style=1a at=85.0,15.0 color=black fill_color=black width=0 fontsize
 d.legend raster=zipcodes_avg lines=50 thin=5 labelnum=5 color=black fontsize=10 
 </pre></div>
 
-To start performing above steps as automatic process with Graphical Modeler press 
-<img src="icons/modeler-main.png" alt="icon"> icon or
+<h3>Defining the workflow in the Graphical Modeler</h3>
+
+To start performing above steps as an automatic process with the Graphical Modeler
+press the <img src="icons/modeler-main.png" alt="icon"> icon or
 type <em>g.gui.gmodeler</em>. The simplest way of inserting elements
-is by adding complete GRASS command to Command field in GRASS command
-dialog (see figure below).  With full text search one can faster
-module hunting. Then label and command can be added. In case that only
-module name is inserted, after <i>Enter</i> button pressing, module
-dialog window is displayed and it is possible to set all of usual
+is by adding the complete GRASS command to the Command field in the GRASS command
+dialog (see figure below).  With full text search one can do faster
+module hunting. Next, the label and the command can be added. In case that only
+a module name is inserted, after pressing the <i>Enter</i> button, the
+module dialog window is displayed and it is possible to set all of the usual
 module options (parameters and flags).
 
+<p> 
 <center>
-<img src="g_gui_gmodeler_dlg_module.png">
+<a href="g_gui_gmodeler_dlg_module.png"><img src="g_gui_gmodeler_dlg_module.png"
+width="400"></a>
 <br>
 <i>Figure: Dialog for adding GRASS commands to model.</i>
 </center>
 
-<p>  
-All of used modules can be parameterized in model. That causes launching 
-dialog with input options for model after model is run. In this example
-input layers (<tt>zipcodes_wake</tt> vector data and <tt>elev_state_500m</tt> 
-raster data) are parameterized. Parameterized elements have a little thicker boarder
-in model scheme with diagrams.
+<h3>Managing model parameters</h3>  
+All used modules can be parameterized in the model. That causes launching the
+dialog with input options for model after the model is run. In this example,
+input layers (<tt>zipcodes_wake</tt> vector map and <tt>elev_state_500m</tt> 
+raster map) are parameterized. Parameterized elements show their diagram border
+slightly thicker than those of unparameterized elements.
 
 <center>
-<img src="g_gui_gmodeler_parameter.png">
+<a href="g_gui_gmodeler_parameter.png">
+<img src="g_gui_gmodeler_parameter.png" width="500"></a>
 <br>
-<i>Figure: A model parameter settings.</i>
+<i>Figure: Model parameter settings.</i>
 </center>
 
 <p>
-Final model, list of all model items, Python code window with <i>Save</i> and 
-<i>Run</i> option are on figures below.
+The final model, the list of all model items, and the Python code window with
+<i>Save</i> and <i>Run</i> option are shown in the figures below.
 
 <center>
-<img src="g_gui_gmodeler_zc.png">
+<a href="g_gui_gmodeler_model_avg.png">
+<img src="g_gui_gmodeler_model_avg.png" width="600"></a>
 <br>
 <i>Figure: A model to perform average statistics for zipcode zones.</i>
 </center>
 <br>
 <center>
-<img src="g_gui_gmodeler_zc_items.png">
+<a href="g_gui_gmodeler_items.png">
+<img src="g_gui_gmodeler_items.png" width="600"></a>
+<p>
+<a href="g_gui_gmodeler_python.png">
+<img src="g_gui_gmodeler_python.png" width="600"></a>
 <br>
 <i>Figure: Items with Python editor window.</i>
 </center>
 
-<p>The resultant model for Graphical Modeler is
-available <a href="g_gui_gmodeler_zipcodes_avg_elevation.gxm
-">here</a>.
+<p>
+For convenience, this model for the Graphical Modeler is also available for download
+<a href="g_gui_gmodeler_zipcodes_avg_elevation.gxm">here</a>.
+
+<p>
+The model is run by clicking the <i>Run</i> button
+<img src="icons/execute.png" alt="run">. When all inputs are set, the results can
+be displayed as shown in the next Figure:
+
+<center>
+<a href="g_gui_gmodeler_avg_run.png"><img src="g_gui_gmodeler_avg_run.png" width="500"></a>
+<a href="g_gui_gmodeler_avg_map.png"><img src="g_gui_gmodeler_avg_map.png" width="300"></a>
+<br>
+<i>Figure: Average elevation for ZIP codes using North Carolina sample dataset as 
+an automatic calculation performed by Graphical Modeler.</i>
+</center>
+
+<h3>Managing model properties</h3>  
+When one wants to run model again with the same data or the same names, it is 
+necessary to use <tt>--overwrite</tt> option. It will cause maps with identical 
+names to be overwritten. Instead of setting it for every 
+module separately it is handy to change the Model Property settings globally.
+This dialog includes also metadata settings, where model name, model description 
+and author(s) of the model can be specified.
+
+<center>
+<a href="g_gui_gmodeler_model_properties.png">
+<img src="g_gui_gmodeler_model_properties.png" width="350"></a>
+<br>
+<i>Figure: Model properties.</i>
+</center>
+
+<h3>Defining variables</h3>
+
+Another useful trick is the possibility to set variables. Their content can be used 
+as a substitute for other items. Value of variables can be values such as 
+raster or vector data, integer, float, string value or they may constitute some 
+region, mapset, file or direction data type.   
+
+Then it is not
+necessary to set any parameters for input data. The dialog with variable settings 
+is automatically displayed after model is run. So, instead of model parameters 
+(e.g. <tt>r.import</tt> a <tt>v.import</tt>, see the Figure
+<em><a href="g_gui_gmodeler_avg_run.png">Run model dialog</a></em> above) 
+there are <tt>Variables</tt>.
+
+<center>
+<a href="g_gui_gmodeler_variables_run.png">
+<img src="g_gui_gmodeler_variables_run.png" width="500"></a>
+<br>
+<i>Figure: Model with variable inputs.</i>
+</center>
 
 <p>
-After model is run with <img src="icons/execute.png" alt="run"> button
-and inputs are set, results can be displayed as follows:
+The key point is the usage of <tt>%</tt> before the substituting variable and 
+settings in <tt>Variables</tt> dialog. For example, in case of a model variable 
+<tt>raster</tt> that points to an input file path and which value is required to be 
+used as one of inputs for a particular model, it should be specified in the
+<tt>Variables</tt> dialog with its respective name (<tt>raster</tt>), data type,
+default value and description. Then it should be set in the module dialog as
+input called <tt>%raster</tt>.
+
+<center>
+<a href="g_gui_gmodeler_variables.png">
+<img src="g_gui_gmodeler_variables.png" width="600"></a>
+<br>
+<i>Figure: Example of raster file variable settings.</i>
+</center>
 
+<br>
 <center>
-<img src="g_gui_gmodeler_avg_auto.png">
+<a href="g_gui_gmodeler_variables_raster.png">
+<img src="g_gui_gmodeler_variables_raster.png" width="600"></a>
 <br>
-<i>Figure: Average elevation for zipcodes using North Carolina sample dataset as 
-automatic calculation performed by Graphical Modeler.</i>
+<i>Figure: Example of raster file variable usage.</i>
 </center>
 
+<h3>Saving the model file</h3>
+Finally, the model settings can be stored as a GRASS GIS Model file with
+<tt>*.gxm</tt> extension. The advantage is that it can be shared as a
+reusable workflow that may be run also by other users with different data.
+
 <p>
-Very useful advantage is that for example, this model can later be
-used to calculate (let's say) average precipe value for every
-administrative region in Slovakia using <tt>precip</tt> raster data
-from
+<!-- TODO: next line, which model? -->
+For example, this model can later be used to calculate the average precipitation
+for every administrative region in Slovakia using the <tt>precip</tt> raster data from
 <a href="https://grass.osgeo.org/uploads/grass/sampledata/slovakia3d_grass7.tar.gz">
 Slovakia precipitation dataset</a> and administration boundaries of Slovakia from 
 <a href="https://www.geoportal.sk/sk/zbgis_smd/na-stiahnutie/">Slovak Geoportal</a>
 (only with a few clicks).
 
+<h3>Handling intermediate data</h3>
+There can be some data in a model that did not exist before the process and 
+that it is not worth it to maintain after the process executes. They can 
+be described as being <tt>Intermediate</tt> by single clicking using the right 
+mouse button, see figure below. All such data should be deleted following 
+model completion. The boundary of intermediate component is dotted line.
+
+<center>
+<a href="g_gui_gmodeler_intermediate_data.png">
+<img src="g_gui_gmodeler_intermediate_data.png" width="400"></a>
+<br>
+<i>Figure: Usage and definition of intermediate data in model.</i>
+</center>
+ 
+<h3>Using the Python editor</h3>
+By using the Python editor in the Graphical Modeler one can add Python code and then 
+run it with <i>Run</i> button or just save it as a Python script <tt>*.py</tt>.
+The result is shown in the Figure below:
+
+<center>
+<a href="g_gui_gmodeler_python_code.png">
+<img src="g_gui_gmodeler_python_code.png" width="350"></a>
+<a href="g_gui_gmodeler_python_code_result.png">
+<img src="g_gui_gmodeler_python_code_result.png" width="350"></a>
+<br>
+<i>Figure: Python editor in the wxGUI Graphical Modeler.</i>
+</center>
+
+<h3>Defining loops</h3>
+In the example below the <a href="http://e4ftl01.cr.usgs.gov/MOLT/MOD13Q1.006/">MODIS MOD13Q1</a>
+(NDVI) satellite data products are used in a loop. The original data are 
+stored as coded integer values that need to be multiplied by the
+value <tt>0.0001</tt> to represent real <i>ndvi values</i>. Moreover, GRASS GIS
+provides a predefined color table called <tt>ndvi</tt> to represent <i>ndvi data</i>.  
+In this case it is not necessary to work with every image separately. 
+<br>
+The Graphical Modeler is an appropriate tool to 
+process data in an effective way using loop and variables (<tt>%map</tt> for a 
+particular MODIS image in mapset and <tt>%ndvi</tt> for original data name suffix). 
+After the loop component is added to model, it is necessary to define series of maps
+with required settings of map type, mapset, etc.
+
+<center>
+<a href="g_gui_gmodeler_loop_dlg.png">
+<img src="g_gui_gmodeler_loop_dlg.png" width="300"></a>
+<br>
+<i>Figure: MODIS data representation in GRASS GIS after Graphical Modeler usage.</i>
+</center>
+
+<p>
+When the model is supplemented by all of modules, these modules should be 
+ticked in the boxes of loop dialog. The final model and its results are shown below.
+
+<center>
+<a href="g_gui_gmodeler_loop_final.png">
+<img src="g_gui_gmodeler_loop_final.png" width="400"></a>
+<br>
+<i>Figure: Model with loop.</i>
+</center>
+
+<p>
+<center>
+<a href="g_gui_gmodeler_modis_1o.png">
+<img src="g_gui_gmodeler_modis_1o.png" width="300"></a>
+<a href="g_gui_gmodeler_modis_1.png">
+<img src="g_gui_gmodeler_modis_1.png" width="300"></a>
+<a href="g_gui_gmodeler_modis_2o.png">
+<img src="g_gui_gmodeler_modis_2o.png" width="300"></a><br>
+<a href="g_gui_gmodeler_modis_2.png">
+<img src="g_gui_gmodeler_modis_2.png" width="300"></a>
+<a href="g_gui_gmodeler_modis_3o.png">
+<img src="g_gui_gmodeler_modis_3o.png" width="300"></a>
+<a href="g_gui_gmodeler_modis_3.png">
+<img src="g_gui_gmodeler_modis_3.png" width="300"></a>
+<br>
+<i>Figure: MODIS data representation in GRASS GIS after Graphical Modeler usage.</i>
+</center>
+
+<p>
+The steps to enter in the command console of the Graphical Modeler would be as follows:
+
+<!-- TODO: WHY does the white space usage differ?? -->
+<div class="code"><pre>
+# note that the white space usage differs from the standard command line usage
+
+# rename original image with preselected suffix
+g.rename raster = %map,%map.%ndvi
+# convert integer values
+r.mapcalc expression = %map = %map.%ndvi * 0.0001
+# set color table appropriate for nvdi data
+r.colors = map = %map color = ndvi
+</pre></div>
+
 <h2>SEE ALSO</h2>
 
 <em>
@@ -257,11 +429,9 @@ Slovakia precipitation dataset</a> and administration boundaries of Slovakia fro
   <a href="wxGUI.components.html">wxGUI components</a>
 </em>
 
-<!--
 <p>
-User-defined models available
-from <a href="http://svn.osgeo.org/grass/grass-addons/wxgui_modeler">SVN</a>.
--->
+See also selected user models available from this 
+<a href="http://svn.osgeo.org/grass/grass-addons/grass7/models">SVN repository</a>.
 
 <p>
 See also
@@ -275,4 +445,4 @@ Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic<br>
 Various manual improvements by Ludmila Furkevicova, Slovak University of Technology in Bratislava, Slovak Republic
 
 <p>
-<i>$Date: 2016-09-19 12:31:40 +0200 (Mon, 19 Sep 2016) $</i>
+<i>$Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/gui/wxpython/gmodeler/g.gui.gmodeler.py b/gui/wxpython/gmodeler/g.gui.gmodeler.py
index f29e815..ed84028 100755
--- a/gui/wxpython/gmodeler/g.gui.gmodeler.py
+++ b/gui/wxpython/gmodeler/g.gui.gmodeler.py
@@ -41,6 +41,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.giface import StandaloneGrassInterface
     from core.globalvar import CheckWxVersion
     from gmodeler.frame import ModelFrame
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_avg_auto.png b/gui/wxpython/gmodeler/g_gui_gmodeler_avg_auto.png
deleted file mode 100644
index 85a24f0..0000000
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_avg_auto.png and /dev/null differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_avg_map.png b/gui/wxpython/gmodeler/g_gui_gmodeler_avg_map.png
new file mode 100644
index 0000000..7264210
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_avg_map.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_avg_run.png b/gui/wxpython/gmodeler/g_gui_gmodeler_avg_run.png
new file mode 100644
index 0000000..9b0eddb
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_avg_run.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_comment.png b/gui/wxpython/gmodeler/g_gui_gmodeler_comment.png
new file mode 100644
index 0000000..009d568
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_comment.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_db.png b/gui/wxpython/gmodeler/g_gui_gmodeler_db.png
new file mode 100644
index 0000000..b0810b2
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_db.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_dlg_module.png b/gui/wxpython/gmodeler/g_gui_gmodeler_dlg_module.png
index 51efbcd..6d1e923 100644
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_dlg_module.png and b/gui/wxpython/gmodeler/g_gui_gmodeler_dlg_module.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_frame1.png b/gui/wxpython/gmodeler/g_gui_gmodeler_frame1.png
deleted file mode 100644
index 379b81e..0000000
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_frame1.png and /dev/null differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_frame2.png b/gui/wxpython/gmodeler/g_gui_gmodeler_frame2.png
deleted file mode 100644
index 339cfe7..0000000
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_frame2.png and /dev/null differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_frame3.png b/gui/wxpython/gmodeler/g_gui_gmodeler_frame3.png
deleted file mode 100644
index 35a82a8..0000000
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_frame3.png and /dev/null differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_intermediate_data.png b/gui/wxpython/gmodeler/g_gui_gmodeler_intermediate_data.png
new file mode 100644
index 0000000..446b266
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_intermediate_data.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_items.png b/gui/wxpython/gmodeler/g_gui_gmodeler_items.png
new file mode 100644
index 0000000..976bb12
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_items.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_loop.png b/gui/wxpython/gmodeler/g_gui_gmodeler_loop.png
new file mode 100644
index 0000000..ef12da3
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_loop.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_loop_dlg.png b/gui/wxpython/gmodeler/g_gui_gmodeler_loop_dlg.png
new file mode 100644
index 0000000..aa792fe
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_loop_dlg.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_loop_final.png b/gui/wxpython/gmodeler/g_gui_gmodeler_loop_final.png
new file mode 100644
index 0000000..931ce40
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_loop_final.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_lower_toolbar.png b/gui/wxpython/gmodeler/g_gui_gmodeler_lower_toolbar.png
index 2023634..63d5c4c 100644
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_lower_toolbar.png and b/gui/wxpython/gmodeler/g_gui_gmodeler_lower_toolbar.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_model_avg.png b/gui/wxpython/gmodeler/g_gui_gmodeler_model_avg.png
new file mode 100644
index 0000000..57175a1
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_model_avg.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_model_classification.png b/gui/wxpython/gmodeler/g_gui_gmodeler_model_classification.png
new file mode 100644
index 0000000..03ff551
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_model_classification.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_model_landslides.png b/gui/wxpython/gmodeler/g_gui_gmodeler_model_landslides.png
new file mode 100644
index 0000000..26df9a8
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_model_landslides.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_model_properties.png b/gui/wxpython/gmodeler/g_gui_gmodeler_model_properties.png
new file mode 100644
index 0000000..3e65565
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_model_properties.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_model_usle.png b/gui/wxpython/gmodeler/g_gui_gmodeler_model_usle.png
new file mode 100644
index 0000000..b703f3d
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_model_usle.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modis_1.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_1.png
new file mode 100644
index 0000000..bd35562
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_1.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modis_1o.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_1o.png
new file mode 100644
index 0000000..80f8f96
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_1o.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modis_2.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_2.png
new file mode 100644
index 0000000..7cbde59
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_2.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modis_2o.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_2o.png
new file mode 100644
index 0000000..6e8e270
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_2o.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modis_3.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_3.png
new file mode 100644
index 0000000..8f708ed
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_3.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modis_3o.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_3o.png
new file mode 100644
index 0000000..fc1d832
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modis_3o.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modul.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modul.png
new file mode 100644
index 0000000..8816927
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modul.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_modulex.png b/gui/wxpython/gmodeler/g_gui_gmodeler_modulex.png
new file mode 100644
index 0000000..583b29d
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_modulex.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_parameter.png b/gui/wxpython/gmodeler/g_gui_gmodeler_parameter.png
index 4d1dae7..7cda701 100644
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_parameter.png and b/gui/wxpython/gmodeler/g_gui_gmodeler_parameter.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_python.png b/gui/wxpython/gmodeler/g_gui_gmodeler_python.png
new file mode 100644
index 0000000..8f9cc07
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_python.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_python_code.png b/gui/wxpython/gmodeler/g_gui_gmodeler_python_code.png
new file mode 100644
index 0000000..77b3ea6
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_python_code.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_python_code_result.png b/gui/wxpython/gmodeler/g_gui_gmodeler_python_code_result.png
new file mode 100644
index 0000000..f11b702
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_python_code_result.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_raster.png b/gui/wxpython/gmodeler/g_gui_gmodeler_raster.png
new file mode 100644
index 0000000..c5f8e60
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_raster.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_raster3d.png b/gui/wxpython/gmodeler/g_gui_gmodeler_raster3d.png
new file mode 100644
index 0000000..79032f1
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_raster3d.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_relation.png b/gui/wxpython/gmodeler/g_gui_gmodeler_relation.png
new file mode 100644
index 0000000..22815f5
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_relation.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_toolbar.png b/gui/wxpython/gmodeler/g_gui_gmodeler_toolbar.png
index f18e262..4e20958 100644
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_toolbar.png and b/gui/wxpython/gmodeler/g_gui_gmodeler_toolbar.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_variables.png b/gui/wxpython/gmodeler/g_gui_gmodeler_variables.png
new file mode 100644
index 0000000..70d6aec
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_variables.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_variables_raster.png b/gui/wxpython/gmodeler/g_gui_gmodeler_variables_raster.png
new file mode 100644
index 0000000..c6d0d27
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_variables_raster.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_variables_run.png b/gui/wxpython/gmodeler/g_gui_gmodeler_variables_run.png
new file mode 100644
index 0000000..04c6c39
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_variables_run.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_vector.png b/gui/wxpython/gmodeler/g_gui_gmodeler_vector.png
new file mode 100644
index 0000000..c21ceca
Binary files /dev/null and b/gui/wxpython/gmodeler/g_gui_gmodeler_vector.png differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_zc.png b/gui/wxpython/gmodeler/g_gui_gmodeler_zc.png
deleted file mode 100644
index 790b21a..0000000
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_zc.png and /dev/null differ
diff --git a/gui/wxpython/gmodeler/g_gui_gmodeler_zc_items.png b/gui/wxpython/gmodeler/g_gui_gmodeler_zc_items.png
deleted file mode 100644
index df4ba16..0000000
Binary files a/gui/wxpython/gmodeler/g_gui_gmodeler_zc_items.png and /dev/null differ
diff --git a/gui/wxpython/gmodeler/giface.py b/gui/wxpython/gmodeler/giface.py
index d5f16c4..687908e 100644
--- a/gui/wxpython/gmodeler/giface.py
+++ b/gui/wxpython/gmodeler/giface.py
@@ -16,17 +16,19 @@ This program is free software under the GNU General Public License
 
 from grass.pydispatch.signal import Signal
 
+
 class GraphicalModelerGrassInterface():
     """@implements core::giface::GrassInterface"""
+
     def __init__(self, model):
         self._model = model
-    
+
         # Signal emitted to request updating of map (TODO)
         self.updateMap = Signal('GraphicalModelerGrassInterface.updateMap')
-        
+
     def GetLayerTree(self):
         return None
-    
+
     def GetLayerList(self, prompt):
         return self._model.GetMaps(prompt)
 
diff --git a/gui/wxpython/gmodeler/menudata.py b/gui/wxpython/gmodeler/menudata.py
index 2b0955c..60b7f20 100644
--- a/gui/wxpython/gmodeler/menudata.py
+++ b/gui/wxpython/gmodeler/menudata.py
@@ -17,12 +17,14 @@ This program is free software under the GNU General Public License
 import os
 
 from core import globalvar
-from core.menutree  import MenuTreeModelBuilder
+from core.menutree import MenuTreeModelBuilder
+
 
 class ModelerMenuData(MenuTreeModelBuilder):
-    def __init__(self, filename = None):
+
+    def __init__(self, filename=None):
         if not filename:
-            filename = os.path.join(globalvar.WXGUIDIR, 'xml', 'menudata_modeler.xml')
-        
-        MenuTreeModelBuilder.__init__(self, filename)
+            filename = os.path.join(
+                globalvar.WXGUIDIR, 'xml', 'menudata_modeler.xml')
 
+        MenuTreeModelBuilder.__init__(self, filename)
diff --git a/gui/wxpython/gmodeler/model.py b/gui/wxpython/gmodeler/model.py
index 1eb9d32..b711648 100644
--- a/gui/wxpython/gmodeler/model.py
+++ b/gui/wxpython/gmodeler/model.py
@@ -35,64 +35,67 @@ import time
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
 
 import xml.sax.saxutils as saxutils
 
 import wx
 from wx.lib import ogl
 
-from core                import globalvar
-from core                import utils
+from core import globalvar
+from core import utils
 from core.utils import _
-from core.gcmd           import GMessage, GException, GError, RunCommand, EncodeString, GWarning, GetDefaultEncoding
-from core.settings       import UserSettings
-from gui_core.forms      import GUI, CmdPanel
-from gui_core.widgets    import GNotebook
+from core.gcmd import GMessage, GException, GError, RunCommand, EncodeString, GWarning, GetDefaultEncoding
+from core.settings import UserSettings
+from gui_core.forms import GUI, CmdPanel
+from gui_core.widgets import GNotebook
 from gmodeler.giface import GraphicalModelerGrassInterface
 
 from grass.script import core as grass
 from grass.script import task as gtask
 
+
 class Model(object):
     """Class representing the model"""
-    def __init__(self, canvas = None):
-        self.items   = list() # list of ordered items (action/loop/condition)
-        
+
+    def __init__(self, canvas=None):
+        self.items = list()  # list of ordered items (action/loop/condition)
+
         # model properties
-        self.properties = { 'name'        : _("model"),
-                            'description' : _("Script generated by wxGUI Graphical Modeler."),
-                            'author'      : getpass.getuser() }
+        self.properties = {
+            'name': _("model"),
+            'description': _("Script generated by wxGUI Graphical Modeler."),
+            'author': getpass.getuser()}
         # model variables
         self.variables = dict()
         self.variablesParams = dict()
-        
-        self.canvas  = canvas
-        
+
+        self.canvas = canvas
+
     def GetCanvas(self):
         """Get canvas or None"""
         return self.canvas
 
-    def GetItems(self, objType = None):
+    def GetItems(self, objType=None):
         """Get list of model items
 
         :param objType: Object type to filter model objects
         """
         if not objType:
             return self.items
-        
+
         result = list()
         for item in self.items:
             if isinstance(item, objType):
                 result.append(item)
-        
+
         return result
-    
+
     def GetItem(self, aId, objType=None):
         """Get item of given id
 
         :param aId: item id
-        
+
         :return: Model* instance
         :return: None if no item found
         """
@@ -106,12 +109,12 @@ class Model(object):
     def GetItemIndex(self, item):
         """Return list index of given item"""
         return self.items.index(item)
-    
-    def GetNumItems(self, actionOnly = False):
+
+    def GetNumItems(self, actionOnly=False):
         """Get number of items"""
         if actionOnly:
-            return len(self.GetItems(objType = ModelAction))
-        
+            return len(self.GetItems(objType=ModelAction))
+
         return len(self.GetItems())
 
     def ReorderItems(self, idxList):
@@ -120,17 +123,17 @@ class Model(object):
             item = self.items.pop(oldIdx)
             items.append(item)
             self.items.insert(newIdx, item)
-            try:
-                nextItem = self.items[newIdx+1]
-            except IndexError:
-                continue # newIdx is the last item in the list
-            items.append(nextItem)
-            x = item.GetX()
-            y = item.GetY()
-            item.SetX(nextItem.GetX())
-            item.SetY(nextItem.GetY())
-            nextItem.SetX(x)
-            nextItem.SetY(y)
+            # try:
+            #     nextItem = self.items[newIdx+1]
+            # except IndexError:
+            #     continue # newIdx is the last item in the list
+            # items.append(nextItem)
+            # x = item.GetX()
+            # y = item.GetY()
+            # item.SetX(nextItem.GetX())
+            # item.SetY(nextItem.GetY())
+            # nextItem.SetX(x)
+            # nextItem.SetY(y)
 
         dc = wx.ClientDC(self.canvas)
         for item in items:
@@ -140,25 +143,25 @@ class Model(object):
                     self.canvas.parent.DefineLoop(mo)
                 elif isinstance(mo, ModelCondition):
                     self.canvas.parent.DefineCondition(mo)
-            
+
     def Normalize(self):
         # check for inconsistecies
         for idx in range(1, len(self.items)):
             if not self.items[idx].GetBlock() and \
-                    isinstance(self.items[idx-1], ModelLoop):
+                    isinstance(self.items[idx - 1], ModelLoop):
                 # swap action not-in-block with previously defined
                 # loop
-                itemPrev = self.items[idx-1]
-                self.items[idx-1] = self.items[idx]
+                itemPrev = self.items[idx - 1]
+                self.items[idx - 1] = self.items[idx]
                 self.items[idx] = itemPrev
-        
+
         # update ids
         iId = 1
         for item in self.items:
             item.SetId(iId)
             item.SetLabel()
             iId += 1
-        
+
     def GetNextId(self):
         """Get next id (data ignored)
 
@@ -166,35 +169,35 @@ class Model(object):
         """
         if len(self.items) < 1:
             return 1
-        
+
         currId = self.items[-1].GetId()
         if currId > 0:
             return currId + 1
-        
+
         return 1
 
     def GetProperties(self):
         """Get model properties"""
         return self.properties
 
-    def GetVariables(self, params = False):
+    def GetVariables(self, params=False):
         """Get model variables"""
         if params:
             return self.variablesParams
-        
+
         return self.variables
-    
+
     def SetVariables(self, data):
         """Set model variables"""
         self.variables = data
-    
+
     def Reset(self):
         """Reset model"""
         self.items = list()
 
     def RemoveItem(self, item, reference=None):
         """Remove item from model
-        
+
         :item: item to be removed
         :reference: reference item valid for deletion
 
@@ -212,13 +215,13 @@ class Model(object):
                     relList.append(data)
                 else:
                     upList.append(data)
-            
+
         elif isinstance(item, ModelData):
             for rel in item.GetRelations():
                 otherItem = rel.GetTo() if rel.GetFrom() == item else rel.GetFrom()
                 if reference and reference != otherItem:
                     doRemove = False
-                    continue # avoid recursive deletion
+                    continue  # avoid recursive deletion
                 relList.append(rel)
                 if reference and reference != otherItem:
                     relList.append(otherItem)
@@ -233,16 +236,16 @@ class Model(object):
 
         if doRemove and item in self.items:
             self.items.remove(item)
-        
+
         return relList, upList
-    
+
     def FindAction(self, aId):
         """Find action by id"""
-        alist = self.GetItems(objType = ModelAction)
+        alist = self.GetItems(objType=ModelAction)
         for action in alist:
             if action.GetId() == aId:
                 return action
-        
+
         return None
 
     def GetMaps(self, prompt):
@@ -254,28 +257,28 @@ class Model(object):
             if prompt == data.GetPrompt():
                 mapName = data.GetValue()
                 if not mapName or mapName[0] is '%':
-                    continue # skip variables
+                    continue  # skip variables
                 maps.append(mapName)
-        
+
         return maps
 
     def GetData(self):
         """Get list of data items"""
         result = list()
-        dataItems = self.GetItems(objType = ModelData)
-        
-        for action in self.GetItems(objType = ModelAction):
+        dataItems = self.GetItems(objType=ModelData)
+
+        for action in self.GetItems(objType=ModelAction):
             for rel in action.GetRelations():
                 dataItem = rel.GetData()
                 if dataItem not in result:
                     result.append(dataItem)
                 if dataItem in dataItems:
                     dataItems.remove(dataItem)
-        
+
         # standalone data
         if dataItems:
             result += dataItems
-        
+
         return result
 
     def FindData(self, value, prompt):
@@ -291,104 +294,110 @@ class Model(object):
             if data.GetValue() == value and \
                     data.GetPrompt() == prompt:
                 return data
-        
+
         return None
-                
+
     def LoadModel(self, filename):
         """Load model definition stored in GRASS Model XML file (gxm)
-        
+
         .. todo::
              Validate against DTD
-        
+
         Raise exception on error.
         """
         dtdFilename = os.path.join(globalvar.WXGUIDIR, "xml", "grass-gxm.dtd")
-        
+
         # parse workspace file
         try:
             gxmXml = ProcessModelFile(etree.parse(filename))
-        except StandardError as e:
+        except Exception as e:
             raise GException(unicode(e))
-        
+
         if self.canvas:
             win = self.canvas.parent
             if gxmXml.pos:
                 win.SetPosition(gxmXml.pos)
             if gxmXml.size:
                 win.SetSize(gxmXml.size)
-        
+
         # load properties
         self.properties = gxmXml.properties
-        self.variables  = gxmXml.variables
-        
+        self.variables = gxmXml.variables
+
         # load actions
         for action in gxmXml.actions:
-            actionItem = ModelAction(parent = self, 
-                                     x = action['pos'][0],
-                                     y = action['pos'][1],
-                                     width = action['size'][0],
-                                     height = action['size'][1],
-                                     task = action['task'],
-                                     id = action['id'],
-                                     label = action['label'],
-                                     comment = action['comment'])
-            
+            actionItem = ModelAction(parent=self,
+                                     x=action['pos'][0],
+                                     y=action['pos'][1],
+                                     width=action['size'][0],
+                                     height=action['size'][1],
+                                     task=action['task'],
+                                     id=action['id'],
+                                     label=action['label'],
+                                     comment=action['comment'])
+
             if action['disabled']:
                 actionItem.Enable(False)
-            
-            self.AddItem(actionItem, pos = actionItem.GetId()-1)
-            
+
+            self.AddItem(actionItem, pos=actionItem.GetId() - 1)
+
             actionItem.SetValid(actionItem.GetTask().get_options())
-            actionItem.GetLog() # substitute variables (-> valid/invalid)
+            actionItem.GetLog()  # substitute variables (-> valid/invalid)
 
         # load data & relations
         for data in gxmXml.data:
-            dataItem = ModelData(parent = self, 
-                                 x = data['pos'][0],
-                                 y = data['pos'][1],
-                                 width = data['size'][0],
-                                 height = data['size'][1],
-                                 prompt = data['prompt'],
-                                 value = data['value'])
+            dataItem = ModelData(parent=self,
+                                 x=data['pos'][0],
+                                 y=data['pos'][1],
+                                 width=data['size'][0],
+                                 height=data['size'][1],
+                                 prompt=data['prompt'],
+                                 value=data['value'])
             dataItem.SetIntermediate(data['intermediate'])
-            
+
             for rel in data['rels']:
                 actionItem = self.FindAction(rel['id'])
-                
+
                 if rel['dir'] == 'from':
-                    relation = ModelRelation(parent = self, fromShape = dataItem,
-                                             toShape = actionItem, param = rel['name'])
+                    relation = ModelRelation(
+                        parent=self,
+                        fromShape=dataItem,
+                        toShape=actionItem,
+                        param=rel['name'])
                 else:
-                    relation = ModelRelation(parent = self, fromShape = actionItem,
-                                             toShape = dataItem, param = rel['name'])
+                    relation = ModelRelation(
+                        parent=self,
+                        fromShape=actionItem,
+                        toShape=dataItem,
+                        param=rel['name'])
                 relation.SetControlPoints(rel['points'])
                 actionItem.AddRelation(relation)
                 dataItem.AddRelation(relation)
 
             if self.canvas:
                 dataItem.Update()
-           
+
         # load loops
         for loop in gxmXml.loops:
-            loopItem = ModelLoop(parent = self, 
-                                 x = loop['pos'][0],
-                                 y = loop['pos'][1],
-                                 width = loop['size'][0],
-                                 height = loop['size'][1],
-                                 label = loop['text'],
-                                 id = loop['id'])
-            self.AddItem(loopItem, pos = loopItem.GetId()-1)
-        
+            loopItem = ModelLoop(parent=self,
+                                 x=loop['pos'][0],
+                                 y=loop['pos'][1],
+                                 width=loop['size'][0],
+                                 height=loop['size'][1],
+                                 label=loop['text'],
+                                 id=loop['id'])
+            self.AddItem(loopItem, pos=loopItem.GetId() - 1)
+
         # load conditions
         for condition in gxmXml.conditions:
-            conditionItem = ModelCondition(parent = self, 
-                                           x = condition['pos'][0],
-                                           y = condition['pos'][1],
-                                           width = condition['size'][0],
-                                           height = condition['size'][1],
-                                           label = condition['text'],
-                                           id = condition['id'])
-            self.AddItem(conditionItem, pos = conditionItem.GetId()-1)
+            conditionItem = ModelCondition(parent=self,
+                                           x=condition['pos'][0],
+                                           y=condition['pos'][1],
+                                           width=condition['size'][0],
+                                           height=condition['size'][1],
+                                           label=condition['text'],
+                                           id=condition['id'])
+            self.AddItem(conditionItem, pos=conditionItem.GetId() - 1)
 
         # define loops & if/else items
         for loop in gxmXml.loops:
@@ -397,7 +406,7 @@ class Model(object):
             for idx in loop['items']:
                 action = self.GetItem(idx, objType=ModelAction)
                 action.SetBlock(loopItem)
-        
+
         for condition in gxmXml.conditions:
             conditionItem = self.GetItem(condition['id'])
             for b in condition['items'].keys():
@@ -405,8 +414,8 @@ class Model(object):
                 for aId in condition['items'][b]:
                     action = self.GetItem(aId)
                     alist.append(action)
-                conditionItem.SetItems(alist, branch = b)
-            
+                conditionItem.SetItems(alist, branch=b)
+
             items = conditionItem.GetItems()
             for b in items.keys():
                 for action in items[b]:
@@ -414,17 +423,17 @@ class Model(object):
 
         # load comments
         for comment in gxmXml.comments:
-            commentItem = ModelComment(parent = self, 
-                                       x = comment['pos'][0],
-                                       y = comment['pos'][1],
-                                       width = comment['size'][0],
-                                       height = comment['size'][1],
-                                       id = comment['id'],
-                                       label = comment['text'])
-            
-            self.AddItem(commentItem, pos = commentItem.GetId()-1)
-        
-    def AddItem(self, newItem, pos = -1):
+            commentItem = ModelComment(parent=self,
+                                       x=comment['pos'][0],
+                                       y=comment['pos'][1],
+                                       width=comment['size'][0],
+                                       height=comment['size'][1],
+                                       id=comment['id'],
+                                       label=comment['text'])
+
+            self.AddItem(commentItem, pos=commentItem.GetId() - 1)
+
+    def AddItem(self, newItem, pos=-1):
         """Add item to the list"""
         if pos != -1:
             self.items.insert(pos, newItem)
@@ -434,14 +443,14 @@ class Model(object):
         # for item in self.items:
         #     item.SetId(i)
         #     i += 1
-        
+
     def IsValid(self):
         """Return True if model is valid"""
         if self.Validate():
             return False
-        
+
         return True
-    
+
     def Validate(self):
         """Validate model, return None if model is valid otherwise
         error string"""
@@ -449,12 +458,12 @@ class Model(object):
 
         variables = self.GetVariables().keys()
         pattern = re.compile(r'(.*)(%.+\s?)(.*)')
-        for action in self.GetItems(objType = ModelAction):
-            cmd = action.GetLog(string = False)
-            
-            task = GUI(show = None).ParseCommand(cmd = cmd)
+        for action in self.GetItems(objType=ModelAction):
+            cmd = action.GetLog(string=False)
+
+            task = GUI(show=None).ParseCommand(cmd=cmd)
             errList += map(lambda x: cmd[0] + ': ' + x, task.get_cmd_error())
-            
+
             # check also variables
             for opt in cmd[1:]:
                 if '=' not in opt:
@@ -462,7 +471,7 @@ class Model(object):
                 key, value = opt.split('=', 1)
                 sval = pattern.search(value)
                 if sval:
-                    var = sval.group(2).strip()[1:] # strip '%' from beginning
+                    var = sval.group(2).strip()[1:]  # strip '%' from beginning
                     found = False
                     for v in variables:
                         if var.startswith(v):
@@ -470,28 +479,34 @@ class Model(object):
                             break
                     if not found:
                         report = True
-                        for item in filter(lambda x: isinstance(x, ModelLoop), action.GetBlock()):
+                        for item in filter(
+                                lambda x: isinstance(x, ModelLoop),
+                                action.GetBlock()):
                             if var in item.GetLabel():
                                 report = False
                                 break
                         if report:
-                            errList.append(cmd[0] + ": " + _("undefined variable '%s'") % var)
-            ### TODO: check variables in file only optionally
+                            errList.append(
+                                cmd[0] +
+                                ": " +
+                                _("undefined variable '%s'") %
+                                var)
+            # TODO: check variables in file only optionally
             ### errList += self._substituteFile(action, checkOnly = True)
-        
+
         return errList
 
-    def _substituteFile(self, item, params = None, checkOnly = False):
+    def _substituteFile(self, item, params=None, checkOnly=False):
         """Subsitute variables in command file inputs
 
         :param bool checkOnly: tuble - True to check variable, don't touch files
-        
+
         :return: list of undefined variables
         """
         errList = list()
-        
+
         self.fileInput = dict()
-        
+
         # collect ascii inputs
         for p in item.GetParams()['params']:
             if p.get('element', '') == 'file' and \
@@ -501,7 +516,7 @@ class Model(object):
                 if filename and \
                         mimetypes.guess_type(filename)[0] == 'text/plain':
                     self.fileInput[filename] = None
-        
+
         for finput in self.fileInput:
             # read lines
             fd = open(finput, "r")
@@ -509,7 +524,7 @@ class Model(object):
                 data = self.fileInput[finput] = fd.read()
             finally:
                 fd.close()
-            
+
             # substitute variables
             write = False
             variables = self.GetVariables()
@@ -524,21 +539,21 @@ class Model(object):
                             else:
                                 value = str(p.get('value', ''))
                             break
-                
+
                 if not value:
                     value = variables[variable].get('value', '')
-                
+
                 data = pattern.sub(value, data)
                 if not checkOnly:
                     write = True
-            
+
             pattern = re.compile(r'(.*)(%.+\s?)(.*)')
             sval = pattern.search(data)
             if sval:
-                var = sval.group(2).strip()[1:] # ignore '%'
-                cmd = item.GetLog(string = False)[0]
+                var = sval.group(2).strip()[1:]  # ignore '%'
+                cmd = item.GetLog(string=False)[0]
                 errList.append(cmd + ": " + _("undefined variable '%s'") % var)
-            
+
             if not checkOnly:
                 if write:
                     fd = open(finput, "w")
@@ -548,13 +563,14 @@ class Model(object):
                         fd.close()
                 else:
                     self.fileInput[finput] = None
-        
+
         return errList
-    
+
     def OnPrepare(self, item, params):
-        self._substituteFile(item, params, checkOnly = False)
+        self._substituteFile(item, params, checkOnly=False)
 
-    def RunAction(self, item, params, log, onDone, onPrepare = None, statusbar = None):
+    def RunAction(self, item, params, log, onDone,
+                  onPrepare=None, statusbar=None):
         """Run given action
 
         :param item: action item
@@ -566,21 +582,21 @@ class Model(object):
         """
         name = '({0}) {1}'.format(item.GetId(), item.GetLabel())
         if name in params:
-            paramsOrig = item.GetParams(dcopy = True)
+            paramsOrig = item.GetParams(dcopy=True)
             item.MergeParams(params[name])
-        
+
         if statusbar:
             statusbar.SetStatusText(_('Running model...'), 0)
-            
-        data = { 'item' : item,
-                 'params' : copy.deepcopy(params) }
-        log.RunCmd(command = item.GetLog(string = False, substitute = params),
-                   onDone = onDone, onPrepare = self.OnPrepare, userData = data)
-        
+
+        data = {'item': item,
+                'params': copy.deepcopy(params)}
+        log.RunCmd(command=item.GetLog(string=False, substitute=params),
+                   onDone=onDone, onPrepare=self.OnPrepare, userData=data)
+
         if name in params:
             item.SetParams(paramsOrig)
 
-    def Run(self, log, onDone, parent = None):
+    def Run(self, log, onDone, parent=None):
         """Run model
 
         :param log: logging window (see gconsole.GConsole)
@@ -588,14 +604,14 @@ class Model(object):
         :param parent: window for messages or None
         """
         if self.GetNumItems() < 1:
-            GMessage(parent = parent,
-                     message = _('Model is empty. Nothing to run.'))
+            GMessage(parent=parent,
+                     message=_('Model is empty. Nothing to run.'))
             return
-        
+
         statusbar = None
         if isinstance(parent, wx.Frame):
             statusbar = parent.GetStatusBar()
-        
+
         # validation
         if statusbar:
             statusbar.SetStatusText(_('Validating model...'), 0)
@@ -603,49 +619,63 @@ class Model(object):
         if statusbar:
             statusbar.SetStatusText('', 0)
         if errList:
-            dlg = wx.MessageDialog(parent = parent,
-                                   message = _('Model is not valid. Do you want to '
-                                               'run the model anyway?\n\n%s') % '\n'.join(errList),
-                                   caption = _("Run model?"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
-                                   wx.ICON_QUESTION | wx.CENTRE)
+            dlg = wx.MessageDialog(
+                parent=parent,
+                message=_(
+                    'Model is not valid. Do you want to '
+                    'run the model anyway?\n\n%s') %
+                '\n'.join(errList),
+                caption=_("Run model?"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             ret = dlg.ShowModal()
             dlg.Destroy()
             if ret != wx.ID_YES:
                 return
-        
+
         # parametrization
         params = self.Parameterize()
         delInterData = False
         if params:
-            dlg = ModelParamDialog(parent = parent,
-                                   model = self,
-                                   params = params)
+            dlg = ModelParamDialog(parent=parent,
+                                   model=self,
+                                   params=params)
             dlg.CenterOnParent()
-            
+
             ret = dlg.ShowModal()
             if ret != wx.ID_OK:
                 dlg.Destroy()
                 return
-            
+
             err = dlg.GetErrors()
             delInterData = dlg.DeleteIntermediateData()
             dlg.Destroy()
             if err:
-                GError(parent = parent, message = unicode('\n'.join(err)))
+                GError(parent=parent, message=unicode('\n'.join(err)))
                 return
-            
+
             err = list()
             for key, item in params.iteritems():
                 for p in item['params']:
                     if p.get('value', '') == '':
-                        err.append((key, p.get('name', ''), p.get('description', '')))
+                        err.append(
+                            (key, p.get(
+                                'name', ''), p.get(
+                                'description', '')))
             if err:
-                GError(parent = parent,
-                       message = _("Variables below not defined:") + \
-                           "\n\n" + unicode('\n'.join(map(lambda x: "%s: %s (%s)" % (x[0], x[1], x[2]), err))))
+                GError(
+                    parent=parent,
+                    message=_("Variables below not defined:") +
+                    "\n\n" +
+                    unicode(
+                        '\n'.join(
+                            map(
+                                lambda x: "%s: %s (%s)" %
+                                (x[0],
+                                 x[1],
+                                    x[2]),
+                                err))))
                 return
-        
+
         log.cmdThread.SetId(-1)
         for item in self.GetItems():
             if not item.IsEnabled():
@@ -656,7 +686,7 @@ class Model(object):
                 self.RunAction(item, params, log, onDone)
             elif isinstance(item, ModelLoop):
                 cond = item.GetLabel()
-                
+
                 # substitute variables in condition
                 variables = self.GetVariables()
                 for variable in variables:
@@ -668,71 +698,77 @@ class Model(object):
                                 if variable == p.get('name', ''):
                                     value = p.get('value', '')
                                     break
-                        
+
                         if not value:
                             value = variables[variable].get('value', '')
-                        
+
                         if not value:
                             continue
-                        
+
                         vtype = variables[variable].get('type', 'string')
                         if vtype == 'string':
                             value = '"' + value + '"'
                         cond = pattern.sub(value, cond)
-                
+
                 # split condition
-                ### TODO: this part needs some better solution
-                condVar, condText = map(lambda x: x.strip(), re.split('\s* in \s*', cond))
+                # TODO: this part needs some better solution
+                condVar, condText = map(
+                    lambda x: x.strip(),
+                    re.split('\s* in \s*', cond))
                 pattern = re.compile('%' + condVar)
-                ### for vars()[condVar] in eval(condText): ?
+                # for vars()[condVar] in eval(condText): ?
                 vlist = list()
                 if condText[0] == '`' and condText[-1] == '`':
                     # run command
-                    cmd, dcmd = utils.CmdToTuple(condText[1:-1].split(' '))
+                    cmd, dcmd = gtask.cmdlist_to_tuple(
+                        condText[1: -1].split(' '))
                     ret = RunCommand(cmd,
-                                     read = True,
+                                     read=True,
                                      **dcmd)
                     if ret:
                         vlist = ret.splitlines()
                 else:
                     vlist = eval(condText)
-                
+
                 if 'variables' not in params:
-                    params['variables'] = { 'params' : [] }
-                varDict = { 'name' : condVar, 'value' : '' }
+                    params['variables'] = {'params': []}
+                varDict = {'name': condVar, 'value': ''}
                 params['variables']['params'].append(varDict)
-                                
+
                 for var in vlist:
                     for action in item.GetItems(self.GetItems()):
                         if not action.IsEnabled():
                             continue
-                        
+
                         varDict['value'] = var
-                                                
-                        self.RunAction(item = action, params = params,
-                                       log = log, onDone = onDone)
+
+                        self.RunAction(item=action, params=params,
+                                       log=log, onDone=onDone)
                 params['variables']['params'].remove(varDict)
-        
+
         if delInterData:
             self.DeleteIntermediateData(log)
-        
+
         # discard values
         if params:
             for item in params.itervalues():
                 for p in item['params']:
                     p['value'] = ''
-        
+
     def DeleteIntermediateData(self, log):
         """Detele intermediate data"""
         rast, vect, rast3d, msg = self.GetIntermediateData()
-        
+
         if rast:
-            log.RunCmd(['g.remove', '-f', 'type=raster', 'name=%s' %','.join(rast)])
+            log.RunCmd(['g.remove', '-f', 'type=raster',
+                        'name=%s' % ','.join(rast)])
         if rast3d:
-            log.RunCmd(['g.remove', '-f', 'type=raster_3d', 'name=%s' %','.join(rast3d)])
+            log.RunCmd(['g.remove', '-f', 'type=raster_3d',
+                        'name=%s' % ','.join(rast3d)])
         if vect:
-            log.RunCmd(['g.remove', '-f', 'type=vector', 'name=%s' %','.join(vect)])
-        
+            log.RunCmd(['g.remove', '-f', 'type=vector',
+                        'name=%s' % ','.join(vect)])
+
     def GetIntermediateData(self):
         """Get info about intermediate data"""
         rast = list()
@@ -749,7 +785,7 @@ class Model(object):
                 vect.append(name)
             elif prompt == 'raster_3d':
                 rast3d.append(name)
-        
+
         msg = ''
         if rast:
             msg += '\n\n%s: ' % _('Raster maps')
@@ -760,33 +796,34 @@ class Model(object):
         if vect:
             msg += '\n\n%s: ' % _('Vector maps')
             msg += ', '.join(vect)
-        
+
         return rast, vect, rast3d, msg
 
     def Update(self):
         """Update model"""
         for item in self.items:
             item.Update()
-        
+
     def IsParameterized(self):
         """Return True if model is parameterized"""
         if self.Parameterize():
             return True
-        
+
         return False
-    
+
     def Parameterize(self):
         """Return parameterized options"""
         result = dict()
         idx = 0
         if self.variables:
             params = list()
-            result["variables"] = { 'flags'  : list(),
-                                    'params' : params,
-                                    'idx'    : idx }
+            result["variables"] = {'flags': list(),
+                                   'params': params,
+                                   'idx': idx}
             for name, values in self.variables.iteritems():
                 gtype = values.get('type', 'string')
-                if gtype in ('raster', 'vector', 'mapset', 'file', 'region', 'dir'):
+                if gtype in ('raster', 'vector', 'mapset',
+                             'file', 'region', 'dir'):
                     gisprompt = True
                     prompt = gtype
                     if gtype == 'raster':
@@ -799,65 +836,67 @@ class Model(object):
                     prompt = None
                     element = None
                     ptype = gtype
-                params.append({ 'gisprompt' : gisprompt,
-                                'multiple'  : False,
-                                'description' : values.get('description', ''),
-                                'guidependency' : '',
-                                'default' : '',
-                                'age' : None,
-                                'required' : True,
-                                'value' : values.get('value', ''),
-                                'label' : '',
-                                'guisection' : '',
-                                'key_desc' : '',
-                                'values' : list(),
-                                'parameterized' : False,
-                                'values_desc' : list(),
-                                'prompt' : prompt,
-                                'element' : element,
-                                'type' : ptype,
-                                'name' : name })
-            
+                params.append({'gisprompt': gisprompt,
+                               'multiple': False,
+                               'description': values.get('description', ''),
+                               'guidependency': '',
+                               'default': '',
+                               'age': None,
+                               'required': True,
+                               'value': values.get('value', ''),
+                               'label': '',
+                               'guisection': '',
+                               'key_desc': '',
+                               'values': list(),
+                               'parameterized': False,
+                               'values_desc': list(),
+                               'prompt': prompt,
+                               'element': element,
+                               'type': ptype,
+                               'name': name})
+
             idx += 1
-        
-        for action in self.GetItems(objType = ModelAction):
+
+        for action in self.GetItems(objType=ModelAction):
             if not action.IsEnabled():
                 continue
-            name   = '({0}) {1}'.format(action.GetId(), action.GetLabel())
+            name = '({0}) {1}'.format(action.GetId(), action.GetLabel())
             params = action.GetParams()
             increment = False
             for f in params['flags']:
                 if f.get('parameterized', False):
                     if name not in result:
                         increment = True
-                        result[name] = { 'flags' : list(),
-                                         'params': list(),
-                                         'idx'   : idx }
+                        result[name] = {'flags': list(),
+                                        'params': list(),
+                                        'idx': idx}
                     result[name]['flags'].append(f)
             for p in params['params']:
                 if p.get('parameterized', False):
                     if name not in result:
                         increment = True
-                        result[name] = { 'flags' : list(),
-                                         'params': list(),
-                                         'idx'   : idx }
+                        result[name] = {'flags': list(),
+                                        'params': list(),
+                                        'idx': idx}
                     result[name]['params'].append(p)
             if increment:
                 idx += 1
-        
-        self.variablesParams = result # record parameters
-        
+
+        self.variablesParams = result  # record parameters
+
         return result
 
+
 class ModelObject(object):
-    def __init__(self, id = -1, label = ''):
-        self.id   = id     # internal id, should be not changed
+
+    def __init__(self, id=-1, label=''):
+        self.id = id     # internal id, should be not changed
         self.label = ''
-        self.rels = list() # list of ModelRelations
-        
+        self.rels = list()  # list of ModelRelations
+
         self.isEnabled = True
-        self.inBlock   = list() # list of related loops/conditions
-        
+        self.inBlock = list()  # list of related loops/conditions
+
     def __del__(self):
         pass
 
@@ -868,7 +907,7 @@ class ModelObject(object):
     def SetLabel(self, label=''):
         """Set label"""
         self.label = label
-        
+
     def GetId(self):
         """Get id"""
         return self.id
@@ -879,23 +918,22 @@ class ModelObject(object):
             for loop in self.inBlock:
                 # update block item
                 loop.UpdateItem(self.id, newId)
-        
-        self.id = newId
 
+        self.id = newId
 
     def AddRelation(self, rel):
         """Record new relation
         """
         self.rels.append(rel)
 
-    def GetRelations(self, fdir = None):
+    def GetRelations(self, fdir=None):
         """Get list of relations
-        
+
         :param bool fdir: True for 'from'
         """
         if fdir is None:
             return self.rels
-        
+
         result = list()
         for rel in self.rels:
             if fdir == 'from':
@@ -904,14 +942,14 @@ class ModelObject(object):
             else:
                 if rel.GetTo() == self:
                     result.append(rel)
-        
+
         return result
-    
+
     def IsEnabled(self):
         """Get True if action is enabled, otherwise False"""
         return self.isEnabled
-    
-    def Enable(self, enabled = True):
+
+    def Enable(self, enabled=True):
         """Enable/disable action"""
         self.isEnabled = enabled
         self.Update()
@@ -927,7 +965,7 @@ class ModelObject(object):
         """
         if item not in self.inBlock:
             self.inBlock.append(item)
-        
+
     def UnSetBlock(self, item):
         """Remove object from the block (loop/consition)
 
@@ -936,7 +974,7 @@ class ModelObject(object):
         """
         if item in self.inBlock:
             self.inBlock.remove(item)
-        
+
     def GetBlock(self):
         """Get list of related ModelObject(s) which defines block
         (loop/condition)
@@ -944,7 +982,7 @@ class ModelObject(object):
         :return: list of ModelObjects
         """
         return self.inBlock
-    
+
     def GetBlockId(self):
         """Get list of related ids which defines block
 
@@ -953,48 +991,55 @@ class ModelObject(object):
         ret = list()
         for mo in self.inBlock:
             ret.append(mo.GetId())
-        
+
         return ret
-    
+
+
 class ModelAction(ModelObject, ogl.DividedShape):
     """Action class (GRASS module)"""
-    def __init__(self, parent, x, y, id = -1, cmd = None, task = None,
-                 width = None, height = None, label = None, comment = ''):
+
+    def __init__(self, parent, x, y, id=-1, cmd=None, task=None,
+                 width=None, height=None, label=None, comment=''):
         ModelObject.__init__(self, id, label)
-        
-        self.parent  = parent
-        self.task    = task
+
+        self.parent = parent
+        self.task = task
         self.comment = comment
-        
+
         if not width:
-            width = UserSettings.Get(group='modeler', key='action', subkey=('size', 'width'))
+            width = UserSettings.Get(
+                group='modeler', key='action', subkey=(
+                    'size', 'width'))
         if not height:
-            height = UserSettings.Get(group='modeler', key='action', subkey=('size', 'height'))
-        
+            height = UserSettings.Get(
+                group='modeler', key='action', subkey=(
+                    'size', 'height'))
+
         if cmd:
-            self.task = GUI(show = None).ParseCommand(cmd = cmd)
+            self.task = GUI(show=None).ParseCommand(cmd=cmd)
         else:
             if task:
                 self.task = task
             else:
                 self.task = None
-        
+
         self.propWin = None
-        
+
         self.data = list()   # list of connected data items
-        
+
         self.isValid = False
         self.isParameterized = False
-        
+
         if self.parent.GetCanvas():
             ogl.DividedShape.__init__(self, width, height)
-        
+
             self.regionLabel = ogl.ShapeRegion()
-            self.regionLabel.SetFormatMode(ogl.FORMAT_CENTRE_HORIZ | ogl.FORMAT_CENTRE_VERT)
+            self.regionLabel.SetFormatMode(
+                ogl.FORMAT_CENTRE_HORIZ | ogl.FORMAT_CENTRE_VERT)
             self.AddRegion(self.regionLabel)
-            
+
             self.regionComment = None
-            
+
             self.SetCanvas(self.parent)
             self.SetX(x)
             self.SetY(y)
@@ -1003,14 +1048,14 @@ class ModelAction(ModelObject, ogl.DividedShape):
             self.SetLabel(label)
             if comment:
                 self.SetComment(comment)
-            
+
             self.SetRegionSizes()
             self.ReformatRegions()
 
         if self.task:
             self.SetValid(self.task.get_options())
-        
-    def _setBrush(self, running = False):
+
+    def _setBrush(self, running=False):
         """Set brush"""
         if running:
             color = UserSettings.Get(group='modeler', key='action',
@@ -1024,10 +1069,10 @@ class ModelAction(ModelObject, ogl.DividedShape):
         else:
             color = UserSettings.Get(group='modeler', key='action',
                                      subkey=('color', 'invalid'))
-        
+
         wxColor = wx.Colour(color[0], color[1], color[2])
         self.SetBrush(wx.Brush(wxColor))
-        
+
     def _setPen(self):
         """Set pen"""
         if self.isParameterized:
@@ -1040,14 +1085,14 @@ class ModelAction(ModelObject, ogl.DividedShape):
             style = wx.SOLID
         else:
             style = wx.DOT
-        
+
         pen = wx.Pen(wx.BLACK, width, style)
         self.SetPen(pen)
 
     def ReformatRegions(self):
         rnum = 0
         canvas = self.parent.GetCanvas()
-        
+
         dc = wx.ClientDC(canvas)  # used for measuring
 
         for region in self.GetRegions():
@@ -1067,15 +1112,15 @@ class ModelAction(ModelObject, ogl.DividedShape):
         :param label: if None use command string instead
         """
         if label:
-            self.label = label 
+            self.label = label
         elif self.label:
             label = self.label
         else:
             try:
-                label = self.task.get_cmd(ignoreErrors = True)[0]
+                label = self.task.get_cmd(ignoreErrors=True)[0]
             except:
                 label = _("unknown")
-        
+
         idx = self.GetId()
         self.regionLabel.SetText('(%d) %s' % (idx, label))
         self.SetRegionSizes()
@@ -1092,8 +1137,8 @@ class ModelAction(ModelObject, ogl.DividedShape):
             font.SetStyle(wx.ITALIC)
             self.regionComment.SetFont(font)
 
-        ### clear doesn't work
-        ### self.regionComment.ClearText()
+        # clear doesn't work
+        # self.regionComment.ClearText()
         self.regionComment.SetText(comment)
 
         self.ClearRegions()
@@ -1114,22 +1159,22 @@ class ModelAction(ModelObject, ogl.DividedShape):
     def SetProperties(self, params, propwin):
         """Record properties dialog"""
         self.task.params = params['params']
-        self.task.flags  = params['flags']
+        self.task.flags = params['flags']
         self.propWin = propwin
 
     def GetPropDialog(self):
         """Get properties dialog"""
         return self.propWin
 
-    def GetLog(self, string = True, substitute = None):
+    def GetLog(self, string=True, substitute=None):
         """Get logging info
 
         :param string: True to get cmd as a string otherwise a list
         :param substitute: dictionary of parameter to substitute or None
         """
-        cmd = self.task.get_cmd(ignoreErrors = True, ignoreRequired = True,
-                                ignoreDefault = False)
-        
+        cmd = self.task.get_cmd(ignoreErrors=True, ignoreRequired=True,
+                                ignoreDefault=False)
+
         # substitute variables
         if substitute:
             variables = []
@@ -1141,7 +1186,7 @@ class ModelAction(ModelObject, ogl.DividedShape):
 
             # order variables by length
             for variable in sorted(variables, key=len, reverse=True):
-                pattern= re.compile('%' + variable)
+                pattern = re.compile('%' + variable)
                 value = ''
                 if substitute and 'variables' in substitute:
                     for p in substitute['variables']['params']:
@@ -1151,53 +1196,53 @@ class ModelAction(ModelObject, ogl.DividedShape):
                             else:
                                 value = str(p.get('value', ''))
                             break
-                    
+
                 if not value:
                     value = variables[variable].get('value', '')
-                
+
                 if not value:
                     continue
-                
+
                 for idx in range(len(cmd)):
                     if pattern.search(cmd[idx]):
                         cmd[idx] = pattern.sub(value, cmd[idx])
                     idx += 1
-        
+
         if string:
             if cmd is None:
                 return ''
             else:
                 return ' '.join(cmd)
-        
+
         return cmd
-    
+
     def GetLabel(self):
         """Get name"""
         if self.label:
             return self.label
-        
-        cmd = self.task.get_cmd(ignoreErrors = True)
+
+        cmd = self.task.get_cmd(ignoreErrors=True)
         if cmd and len(cmd) > 0:
             return cmd[0]
-        
+
         return _('unknown')
 
-    def GetParams(self, dcopy = False):
+    def GetParams(self, dcopy=False):
         """Get dictionary of parameters"""
         if dcopy:
             return copy.deepcopy(self.task.get_options())
-        
+
         return self.task.get_options()
 
     def GetTask(self):
         """Get grassTask instance"""
         return self.task
-    
+
     def SetParams(self, params):
         """Set dictionary of parameters"""
         self.task.params = params['params']
-        self.task.flags  = params['flags']
-        
+        self.task.flags = params['flags']
+
     def MergeParams(self, params):
         """Merge dictionary of parameters"""
         if 'flags' in params:
@@ -1208,10 +1253,10 @@ class ModelAction(ModelObject, ogl.DividedShape):
             for p in params['params']:
                 self.task.set_param(p['name'],
                                     p.get('value', ''))
-        
+
     def SetValid(self, options):
         """Set validity for action
-        
+
         :param options: dictionary with flags and params (gtask)
         """
         self.isValid = True
@@ -1228,48 +1273,48 @@ class ModelAction(ModelObject, ogl.DividedShape):
                 self.isValid = False
             if not self.isParameterized and p.get('parameterized', False):
                 self.isParameterized = True
-        
+
         if self.parent.GetCanvas():
             self._setBrush()
             self._setPen()
-        
+
     def IsValid(self):
         """Check validity (all required parameters set)"""
         return self.isValid
-    
+
     def IsParameterized(self):
         """Check if action is parameterized"""
         return self.isParameterized
 
     def GetParameterizedParams(self):
         """Return parameterized flags and options"""
-        param = { 'flags': [], 'params' : [] }
-        
+        param = {'flags': [], 'params': []}
+
         options = self.GetParams()
-        
+
         for f in options['flags']:
             if f.get('parameterized', False):
                 param['flags'].append(f)
-        
+
         for p in options['params']:
             if p.get('parameterized', False):
                 param['params'].append(p)
-        
+
         return param
-        
+
     def FindData(self, name):
         """Find data item by name"""
         for rel in self.GetRelations():
             data = rel.GetData()
             if name == rel.GetLabel() and name in data.GetLabel():
                 return data
-        
+
         return None
 
-    def Update(self, running = False):
+    def Update(self, running=False):
         """Update action"""
         if running:
-            self._setBrush(running = True)
+            self._setBrush(running=True)
         else:
             self._setBrush()
         self._setPen()
@@ -1278,13 +1323,16 @@ class ModelAction(ModelObject, ogl.DividedShape):
         """Draw action in canvas"""
         self._setBrush()
         self._setPen()
-        ogl.RectangleShape.Recentre(self, dc) # re-center text
+        ogl.RectangleShape.Recentre(self, dc)  # re-center text
         ogl.RectangleShape.OnDraw(self, dc)
 
+
 class ModelData(ModelObject, ogl.EllipseShape):
-    def __init__(self, parent, x, y, value = '', prompt = '', width = None, height = None):
+
+    def __init__(self, parent, x, y, value='',
+                 prompt='', width=None, height=None):
         """Data item class
-        
+
         :param parent: window parent
         :param x, y: position of the shape
         :param fname, tname: list of parameter names from / to
@@ -1293,41 +1341,45 @@ class ModelData(ModelObject, ogl.EllipseShape):
         :param width, height: dimension of the shape
         """
         ModelObject.__init__(self)
-        
-        self.parent  = parent
-        self.value   = value
-        self.prompt  = prompt
+
+        self.parent = parent
+        self.value = value
+        self.prompt = prompt
         self.intermediate = False
         self.propWin = None
         if not width:
-            width = UserSettings.Get(group='modeler', key='data', subkey=('size', 'width'))
+            width = UserSettings.Get(
+                group='modeler', key='data', subkey=(
+                    'size', 'width'))
         if not height:
-            height = UserSettings.Get(group='modeler', key='data', subkey=('size', 'height'))
-        
+            height = UserSettings.Get(
+                group='modeler', key='data', subkey=(
+                    'size', 'height'))
+
         if self.parent.GetCanvas():
             ogl.EllipseShape.__init__(self, width, height)
-            
+
             self.SetCanvas(self.parent)
             self.SetX(x)
             self.SetY(y)
             self._setPen()
             self._setBrush()
             self.SetLabel()
-            
+
     def IsIntermediate(self):
         """Checks if data item is intermediate"""
         return self.intermediate
-    
+
     def SetIntermediate(self, im):
         """Set intermediate flag"""
         self.intermediate = im
-  
+
     def OnDraw(self, dc):
         self._setPen()
-        
+
         ogl.EllipseShape.OnDraw(self, dc)
-        
-    def GetLog(self, string = True):
+
+    def GetLog(self, string=True):
         """Get logging info"""
         name = list()
         for rel in self.GetRelations():
@@ -1342,20 +1394,20 @@ class ModelData(ModelObject, ogl.EllipseShape):
         name = list()
         for rel in self.GetRelations():
             name.append(rel.GetLabel())
-        
+
         return name
-    
+
     def GetPrompt(self):
         """Get prompt"""
         return self.prompt
 
     def SetPrompt(self, prompt):
         """Set prompt
-        
+
         :param prompt:
         """
         self.prompt = prompt
-        
+
     def GetValue(self):
         """Get value"""
         return self.value
@@ -1374,10 +1426,13 @@ class ModelData(ModelObject, ogl.EllipseShape):
                 else:
                     action = rel.GetFrom()
 
-                task = GUI(show = None).ParseCommand(cmd = action.GetLog(string = False))
+                task = GUI(
+                    show=None).ParseCommand(
+                    cmd=action.GetLog(
+                        string=False))
                 task.set_param(rel.GetLabel(), self.value)
                 action.MergeParams(task.get_options())
-        
+
     def GetPropDialog(self):
         """Get properties dialog"""
         return self.propWin
@@ -1389,23 +1444,23 @@ class ModelData(ModelObject, ogl.EllipseShape):
     def _setBrush(self):
         """Set brush"""
         if self.prompt == 'raster':
-            color = UserSettings.Get(group = 'modeler', key = 'data',
-                                     subkey = ('color', 'raster'))
+            color = UserSettings.Get(group='modeler', key='data',
+                                     subkey=('color', 'raster'))
         elif self.prompt == 'raster_3d':
-            color = UserSettings.Get(group = 'modeler', key = 'data',
-                                     subkey = ('color', 'raster3d'))
+            color = UserSettings.Get(group='modeler', key='data',
+                                     subkey=('color', 'raster3d'))
         elif self.prompt == 'vector':
-            color = UserSettings.Get(group = 'modeler', key = 'data',
-                                     subkey = ('color', 'vector'))
+            color = UserSettings.Get(group='modeler', key='data',
+                                     subkey=('color', 'vector'))
         elif self.prompt == 'dbtable':
-            color = UserSettings.Get(group = 'modeler', key = 'data',
-                                     subkey = ('color', 'dbtable'))
+            color = UserSettings.Get(group='modeler', key='data',
+                                     subkey=('color', 'dbtable'))
         else:
-            color = UserSettings.Get(group = 'modeler', key = 'action',
-                                     subkey = ('color', 'invalid'))
+            color = UserSettings.Get(group='modeler', key='action',
+                                     subkey=('color', 'invalid'))
         wxColor = wx.Colour(color[0], color[1], color[2])
         self.SetBrush(wx.Brush(wxColor))
-        
+
     def _setPen(self):
         """Set pen"""
         isParameterized = False
@@ -1420,19 +1475,19 @@ class ModelData(ModelObject, ogl.EllipseShape):
                     break
 
         if isParameterized:
-            width = int(UserSettings.Get(group = 'modeler', key = 'action',
-                                         subkey = ('width', 'parameterized')))
+            width = int(UserSettings.Get(group='modeler', key='action',
+                                         subkey=('width', 'parameterized')))
         else:
-            width = int(UserSettings.Get(group = 'modeler', key = 'action',
-                                         subkey = ('width', 'default')))
+            width = int(UserSettings.Get(group='modeler', key='action',
+                                         subkey=('width', 'default')))
         if self.intermediate:
             style = wx.DOT
         else:
             style = wx.SOLID
-        
+
         pen = wx.Pen(wx.BLACK, width, style)
         self.SetPen(pen)
-        
+
     def SetLabel(self):
         """Update text"""
         self.ClearText()
@@ -1444,26 +1499,28 @@ class ModelData(ModelObject, ogl.EllipseShape):
             self.AddText(self.value)
         else:
             self.AddText(_('<not defined>'))
-        
+
     def Update(self):
         """Update action"""
         self._setBrush()
         self._setPen()
         self.SetLabel()
 
+
 class ModelRelation(ogl.LineShape):
     """Data - action relation"""
-    def __init__(self, parent, fromShape, toShape, param = ''):
+
+    def __init__(self, parent, fromShape, toShape, param=''):
         self.fromShape = fromShape
-        self.toShape   = toShape
-        self.param     = param
-        self.parent    = parent
-        
-        self._points    = None
-        
-        if self.parent.GetCanvas():        
+        self.toShape = toShape
+        self.param = param
+        self.parent = parent
+
+        self._points = None
+
+        if self.parent.GetCanvas():
             ogl.LineShape.__init__(self)
-    
+
     def __del__(self):
         if self in self.fromShape.rels:
             self.fromShape.rels.remove(self)
@@ -1473,11 +1530,11 @@ class ModelRelation(ogl.LineShape):
     def GetFrom(self):
         """Get id of 'from' shape"""
         return self.fromShape
-    
+
     def GetTo(self):
         """Get id of 'to' shape"""
         return self.toShape
-    
+
     def GetData(self):
         """Get related ModelData instance
 
@@ -1488,45 +1545,48 @@ class ModelRelation(ogl.LineShape):
             return self.fromShape
         elif isinstance(self.toShape, ModelData):
             return self.toShape
-        
+
         return None
-    
+
     def GetLabel(self):
         """Get parameter name"""
         return self.param
-    
+
     def ResetShapes(self):
         """Reset related objects"""
         self.fromShape.ResetControlPoints()
         self.toShape.ResetControlPoints()
         self.ResetControlPoints()
-        
+
     def SetControlPoints(self, points):
         """Set control points"""
         self._points = points
-        
+
     def GetControlPoints(self):
         """Get list of control points"""
         return self._points
-    
+
     def _setPen(self):
         """Set pen"""
         pen = wx.Pen(wx.BLACK, 1, wx.SOLID)
         self.SetPen(pen)
-        
+
     def OnDraw(self, dc):
         """Draw relation"""
         self._setPen()
         ogl.LineShape.OnDraw(self, dc)
-    
+
     def SetName(self, param):
         self.param = param
 
+
 class ModelItem(ModelObject):
-    def __init__(self, parent, x, y, id = -1, width = None, height = None, label = '', items = []):
+
+    def __init__(self, parent, x, y, id=-1, width=None,
+                 height=None, label='', items=[]):
         """Abstract class for loops and conditions"""
         ModelObject.__init__(self, id, label)
-        self.parent  = parent
+        self.parent = parent
 
     def _setPen(self):
         """Set pen"""
@@ -1534,7 +1594,7 @@ class ModelItem(ModelObject):
             style = wx.SOLID
         else:
             style = wx.DOT
-        
+
         pen = wx.Pen(wx.BLACK, 1, style)
         self.SetPen(pen)
 
@@ -1559,25 +1619,32 @@ class ModelItem(ModelObject):
     def AddRelation(self, rel):
         """Record relation"""
         self.rels.append(rel)
-        
+
     def Clear(self):
         """Clear object, remove rels"""
         self.rels = list()
-   
+
+
 class ModelLoop(ModelItem, ogl.RectangleShape):
-    def __init__(self, parent, x, y, id=-1, idx=-1, width = None, height = None, label = '', items = []):
+
+    def __init__(self, parent, x, y, id=-1, idx=-1,
+                 width=None, height=None, label='', items=[]):
         """Defines a loop"""
         ModelItem.__init__(self, parent, x, y, id, width, height, label, items)
-        self.itemIds = list() # unordered        
+        self.itemIds = list()  # unordered
 
         if not width:
-            width = UserSettings.Get(group='modeler', key='loop', subkey=('size', 'width'))
+            width = UserSettings.Get(
+                group='modeler', key='loop', subkey=(
+                    'size', 'width'))
         if not height:
-            height = UserSettings.Get(group='modeler', key='loop', subkey=('size', 'height'))
-        
+            height = UserSettings.Get(
+                group='modeler', key='loop', subkey=(
+                    'size', 'height'))
+
         if self.parent.GetCanvas():
             ogl.RectangleShape.__init__(self, width, height)
-            
+
             self.SetCanvas(self.parent)
             self.SetX(x)
             self.SetY(y)
@@ -1594,17 +1661,17 @@ class ModelLoop(ModelItem, ogl.RectangleShape):
         else:
             color = UserSettings.Get(group='modeler', key='loop',
                                      subkey=('color', 'valid'))
-        
+
         wxColor = wx.Colour(color[0], color[1], color[2])
         self.SetBrush(wx.Brush(wxColor))
 
-    def Enable(self, enabled = True):
+    def Enable(self, enabled=True):
         """Enable/disable action"""
         for idx in self.itemIds:
             item = self.parent.FindAction(idx)
             if item:
                 item.Enable(enabled)
-        
+
         ModelObject.Enable(self, enabled)
         self.Update()
 
@@ -1618,7 +1685,7 @@ class ModelLoop(ModelItem, ogl.RectangleShape):
         for item in items:
             if item.GetId() in self.itemIds:
                 result.append(item)
-        
+
         return result
 
     def SetItems(self, items):
@@ -1630,38 +1697,50 @@ class ModelLoop(ModelItem, ogl.RectangleShape):
         idx = self.itemIds.index(oldId)
         if idx != -1:
             self.itemIds[idx] = newId
-        
+
     def OnDraw(self, dc):
         """Draw loop in canvas"""
         self._setBrush()
-        ogl.RectangleShape.Recentre(self, dc) # re-center text
+        ogl.RectangleShape.Recentre(self, dc)  # re-center text
         ogl.RectangleShape.OnDraw(self, dc)
 
+
 class ModelCondition(ModelItem, ogl.PolygonShape):
-    def __init__(self, parent, x, y, id = -1, width = None, height = None, label = '',
-                 items = { 'if' : [], 'else' : [] }):
+
+    def __init__(self, parent, x, y, id=-1, width=None, height=None, label='',
+                 items={'if': [], 'else': []}):
         """Defines a if-else condition"""
         ModelItem.__init__(self, parent, x, y, id, width, height, label, items)
-        self.itemIds = {'if' : [], 'else': []}
-        
+        self.itemIds = {'if': [], 'else': []}
+
         if not width:
-            self.width = UserSettings.Get(group='modeler', key='if-else', subkey=('size', 'width'))
+            self.width = UserSettings.Get(
+                group='modeler',
+                key='if-else',
+                subkey=(
+                    'size',
+                    'width'))
         else:
             self.width = width
         if not height:
-            self.height = UserSettings.Get(group='modeler', key='if-else', subkey=('size', 'height'))
+            self.height = UserSettings.Get(
+                group='modeler',
+                key='if-else',
+                subkey=(
+                    'size',
+                    'height'))
         else:
             self.height = height
-        
+
         if self.parent.GetCanvas():
             ogl.PolygonShape.__init__(self)
-            
+
             points = [(0, - self.height / 2),
                       (self.width / 2, 0),
                       (0, self.height / 2),
                       (- self.width / 2, 0)]
             self.Create(points)
-            
+
             self.SetCanvas(self.parent)
             self.SetX(x)
             self.SetY(y)
@@ -1685,16 +1764,16 @@ class ModelCondition(ModelItem, ogl.PolygonShape):
 
     def GetItems(self, items):
         """Get sorted items by id"""
-        result = {'if' : [], 'else': []}
+        result = {'if': [], 'else': []}
         for item in items:
             if item.GetId() in self.itemIds['if']:
                 result['if'].append(item)
             elif item.GetId() in self.itemIds['else']:
                 result['else'].append(item)
-        
+
         return result
 
-    def SetItems(self, items, branch = 'if'):
+    def SetItems(self, items, branch='if'):
         """Set items (id)
 
         :param items: list of items
@@ -1703,16 +1782,22 @@ class ModelCondition(ModelItem, ogl.PolygonShape):
         if branch in ['if', 'else']:
             self.itemIds[branch] = items
 
+
 class ModelComment(ModelObject, ogl.RectangleShape):
-    def __init__(self, parent, x, y, id = -1, width = None, height = None, label = ''):
+
+    def __init__(self, parent, x, y, id=-1, width=None, height=None, label=''):
         """Defines a model comment"""
         ModelObject.__init__(self, id, label)
 
         if not width:
-            width = UserSettings.Get(group='modeler', key='comment', subkey=('size', 'width'))
+            width = UserSettings.Get(
+                group='modeler', key='comment', subkey=(
+                    'size', 'width'))
         if not height:
-            height = UserSettings.Get(group='modeler', key='comment', subkey=('size', 'height'))
-        
+            height = UserSettings.Get(
+                group='modeler', key='comment', subkey=(
+                    'size', 'height'))
+
         if parent.GetCanvas():
             ogl.RectangleShape.__init__(self, width, height)
             self.SetCanvas(parent)
@@ -1725,10 +1810,10 @@ class ModelComment(ModelObject, ogl.RectangleShape):
             self._setBrush()
             self.SetLabel(label)
 
-    def _setBrush(self, running = False):
+    def _setBrush(self, running=False):
         """Set brush"""
         color = UserSettings.Get(group='modeler', key='comment',
-                                     subkey='color')
+                                 subkey='color')
         wxColor = wx.Colour(color[0], color[1], color[2])
         self.SetBrush(wx.Brush(wxColor))
 
@@ -1743,13 +1828,13 @@ class ModelComment(ModelObject, ogl.RectangleShape):
         :param label: if None use command string instead
         """
         if label:
-            self.label = label 
+            self.label = label
         elif self.label:
             label = self.label
         else:
             label = ''
         idx = self.GetId()
-        
+
         self.ClearText()
         self.AddText('(%d) %s' % (idx, label))
 
@@ -1760,8 +1845,10 @@ class ModelComment(ModelObject, ogl.RectangleShape):
         self.SetLabel(comment)
         self.GetCanvas().Refresh()
 
+
 class ProcessModelFile:
     """Process GRASS model file (gxm)"""
+
     def __init__(self, tree):
         """A ElementTree handler for the GXM XML file, as defined in
         grass-gxm.dtd.
@@ -1774,14 +1861,15 @@ class ProcessModelFile:
                 tagName = self.root.tag
             else:
                 tabName = _("empty")
-            raise GException(_("Details: unsupported tag name '{}'.").format(tagName))
-        
+            raise GException(
+                _("Details: unsupported tag name '{}'.").format(tagName))
+
         # list of actions, data
         self.properties = dict()
-        self.variables  = dict() 
+        self.variables = dict()
         self.actions = list()
-        self.data    = list()
-        self.loops   = list()
+        self.data = list()
+        self.loops = list()
         self.conditions = list()
         self.comments = list()
 
@@ -1790,18 +1878,18 @@ class ProcessModelFile:
         self._processVariables()
         self._processItems()
         self._processData()
-        
+
     def _filterValue(self, value):
         """Filter value
-        
+
         :param value:
         """
         value = value.replace('<', '<')
         value = value.replace('>', '>')
-        
+
         return value
-        
-    def _getNodeText(self, node, tag, default = ''):
+
+    def _getNodeText(self, node, tag, default=''):
         """Get node text"""
         p = node.find(tag)
         if p is not None:
@@ -1809,18 +1897,18 @@ class ProcessModelFile:
                 return utils.normalize_whitespace(p.text)
             else:
                 return ''
-        
+
         return default
-    
+
     def _processWindow(self):
         """Process window properties"""
         node = self.root.find('window')
         if node is None:
             self.pos = self.size = None
             return
-        
+
         self.pos, self.size = self._getDim(node)
-        
+
     def _processProperties(self):
         """Process model properties"""
         node = self.root.find('properties')
@@ -1828,12 +1916,12 @@ class ProcessModelFile:
             return
         for key in ('name', 'description', 'author'):
             self._processProperty(node, key)
-        
+
         for f in node.findall('flag'):
             name = f.get('name', '')
             if name == 'overwrite':
                 self.properties['overwrite'] = True
-        
+
     def _processProperty(self, pnode, name):
         """Process given property"""
         node = pnode.find(name)
@@ -1850,11 +1938,11 @@ class ProcessModelFile:
         for node in vnode.findall('variable'):
             name = node.get('name', '')
             if not name:
-                continue # should not happen
-            self.variables[name] = { 'type' : node.get('type', 'string') }
+                continue  # should not happen
+            self.variables[name] = {'type': node.get('type', 'string')}
             for key in ('description', 'value'):
                 self._processVariable(node, name, key)
-        
+
     def _processVariable(self, pnode, name, key):
         """Process given variable"""
         node = pnode.find(key)
@@ -1873,8 +1961,8 @@ class ProcessModelFile:
         """Process model file"""
         for action in self.root.findall('action'):
             pos, size = self._getDim(action)
-            disabled  = False
-            
+            disabled = False
+
             task = action.find('task')
             if task is not None:
                 if task.find('disabled') is not None:
@@ -1882,7 +1970,7 @@ class ProcessModelFile:
                 task = self._processTask(task)
             else:
                 task = None
-            
+
             aId = int(action.get('id', -1))
             label = action.get('name')
             comment = action.find('comment')
@@ -1890,14 +1978,14 @@ class ProcessModelFile:
                 commentString = comment.text
             else:
                 commentString = ''
-            
-            self.actions.append({ 'pos'      : pos,
-                                  'size'     : size,
-                                  'task'     : task,
-                                  'id'       : aId,
-                                  'disabled' : disabled,
-                                  'label'    : label,
-                                  'comment'  : commentString})
+
+            self.actions.append({'pos': pos,
+                                 'size': size,
+                                 'task': task,
+                                 'id': aId,
+                                 'disabled': disabled,
+                                 'label': label,
+                                 'comment': commentString})
 
     def _getDim(self, node):
         """Get position and size of shape"""
@@ -1909,7 +1997,7 @@ class ProcessModelFile:
                 pos = (posVal[0], posVal[1])
             except:
                 pos = None
-        
+
         sizeAttr = node.get('size', None)
         if sizeAttr:
             sizeVal = map(int, sizeAttr.split(','))
@@ -1917,9 +2005,9 @@ class ProcessModelFile:
                 size = (sizeVal[0], sizeVal[1])
             except:
                 size = None
-        
-        return pos, size        
-    
+
+        return pos, size
+
     def _processData(self):
         """Process model file"""
         for data in self.root.findall('data'):
@@ -1929,17 +2017,17 @@ class ProcessModelFile:
             if param is not None:
                 prompt = param.get('prompt', None)
                 value = self._filterValue(self._getNodeText(param, 'value'))
-            
+
             if data.find('intermediate') is None:
                 intermediate = False
             else:
                 intermediate = True
-            
+
             rels = list()
             for rel in data.findall('relation'):
-                defrel = { 'id'  : int(rel.get('id', -1)),
-                           'dir' : rel.get('dir', 'to'),
-                           'name' : rel.get('name', '') }
+                defrel = {'id': int(rel.get('id', -1)),
+                          'dir': rel.get('dir', 'to'),
+                          'name': rel.get('name', '')}
                 points = list()
                 for point in rel.findall('point'):
                     x = self._filterValue(self._getNodeText(point, 'x'))
@@ -1947,14 +2035,14 @@ class ProcessModelFile:
                     points.append((float(x), float(y)))
                 defrel['points'] = points
                 rels.append(defrel)
-            
-            self.data.append({ 'pos' : pos,
-                               'size': size,
-                               'prompt' : prompt,
-                               'value' : value,
-                               'intermediate' : intermediate,
-                               'rels' : rels })
-        
+
+            self.data.append({'pos': pos,
+                              'size': size,
+                              'prompt': prompt,
+                              'value': value,
+                              'intermediate': intermediate,
+                              'rels': rels})
+
     def _processTask(self, node):
         """Process task
 
@@ -1963,13 +2051,13 @@ class ProcessModelFile:
         """
         cmd = list()
         parameterized = list()
-        
+
         name = node.get('name', None)
         if not name:
             return None
-        
+
         cmd.append(name)
-        
+
         # flags
         for f in node.findall('flag'):
             flag = f.get('name', '')
@@ -1986,46 +2074,53 @@ class ProcessModelFile:
             name = p.get('name', '')
             if p.find('parameterized') is not None:
                 parameterized.append(('param', name))
-            cmd.append('%s=%s' % (name,
-                                  self._filterValue(self._getNodeText(p, 'value'))))
-        
-        task, err = GUI(show = None, checkError = True).ParseCommand(cmd = cmd)
+            cmd.append(
+                '%s=%s' %
+                (name, self._filterValue(
+                    self._getNodeText(
+                        p, 'value'))))
+
+        task, err = GUI(show=None, checkError=True).ParseCommand(cmd=cmd)
         if err:
             GWarning(os.linesep.join(err))
-        
+
         for opt, name in parameterized:
             if opt == 'flag':
-                task.set_flag(name, True, element = 'parameterized')
+                task.set_flag(name, True, element='parameterized')
             else:
-                task.set_param(name, True, element = 'parameterized')
-        
+                task.set_param(name, True, element='parameterized')
+
         return task
 
     def _processLoops(self):
         """Process model loops"""
         for node in self.root.findall('loop'):
             pos, size = self._getDim(node)
-            text = self._filterValue(self._getNodeText(node, 'condition')).strip()
+            text = self._filterValue(
+                self._getNodeText(
+                    node, 'condition')).strip()
             aid = list()
             for anode in node.findall('item'):
                 try:
                     aid.append(int(anode.text))
                 except ValueError:
                     pass
-            
-            self.loops.append({ 'pos'     : pos,
-                                'size'    : size,
-                                'text'    : text,
-                                'id'      : int(node.get('id', -1)),
-                                'items'   : aid })
-        
+
+            self.loops.append({'pos': pos,
+                               'size': size,
+                               'text': text,
+                               'id': int(node.get('id', -1)),
+                               'items': aid})
+
     def _processConditions(self):
         """Process model conditions"""
         for node in self.root.findall('if-else'):
             pos, size = self._getDim(node)
-            text = self._filterValue(self._getNodeText(node, 'condition')).strip()
-            aid = { 'if'   : list(),
-                    'else' : list() }
+            text = self._filterValue(
+                self._getNodeText(
+                    node, 'condition')).strip()
+            aid = {'if': list(),
+                   'else': list()}
             for b in aid.keys():
                 bnode = node.find(b)
                 if bnode is None:
@@ -2035,12 +2130,12 @@ class ProcessModelFile:
                         aid[b].append(int(anode.text))
                     except ValueError:
                         pass
-            
-            self.conditions.append({ 'pos'     : pos,
-                                     'size'    : size,
-                                     'text'    : text,
-                                     'id'      : int(node.get('id', -1)),
-                                     'items'   : aid })
+
+            self.conditions.append({'pos': pos,
+                                    'size': size,
+                                    'text': text,
+                                    'id': int(node.get('id', -1)),
+                                    'items': aid})
 
     def _processComments(self):
         """Process model comments"""
@@ -2048,38 +2143,40 @@ class ProcessModelFile:
             pos, size = self._getDim(node)
             text = self._filterValue(node.text)
 
-            self.comments.append({ 'pos'     : pos,
-                                   'size'    : size,
-                                   'text'    : text,
-                                   'id'      : int(node.get('id', -1)),
-                                   'text'    : text })
-        
+            self.comments.append({'pos': pos,
+                                  'size': size,
+                                  'text': text,
+                                  'id': int(node.get('id', -1)),
+                                  'text': text})
+
+
 class WriteModelFile:
     """Generic class for writing model file"""
+
     def __init__(self, fd, model):
-        self.fd         = fd
-        self.model      = model
+        self.fd = fd
+        self.model = model
         self.properties = model.GetProperties()
-        self.variables  = model.GetVariables()
-        self.items      = model.GetItems()
-        
+        self.variables = model.GetVariables()
+        self.items = model.GetItems()
+
         self.indent = 0
-        
+
         self._header()
-        
+
         self._window()
         self._properties()
         self._variables()
         self._items()
-        
+
         dataList = list()
-        for action in model.GetItems(objType = ModelAction):
+        for action in model.GetItems(objType=ModelAction):
             for rel in action.GetRelations():
                 dataItem = rel.GetData()
                 if dataItem not in dataList:
                     dataList.append(dataItem)
         self._data(dataList)
-        
+
         self._footer()
 
     def _filterValue(self, value):
@@ -2090,14 +2187,17 @@ class WriteModelFile:
         """
         value = saxutils.escape(value)
         return value
-        
+
     def _header(self):
         """Write header"""
-        self.fd.write('<?xml version="1.0" encoding="%s"?>\n' % GetDefaultEncoding(forceUTF8 = True))
+        self.fd.write(
+            '<?xml version="1.0" encoding="%s"?>\n' %
+            GetDefaultEncoding(
+                forceUTF8=True))
         self.fd.write('<!DOCTYPE gxm SYSTEM "grass-gxm.dtd">\n')
         self.fd.write('%s<gxm>\n' % (' ' * self.indent))
         self.indent += 4
-                
+
     def _footer(self):
         """Write footer"""
         self.indent -= 4
@@ -2108,28 +2208,43 @@ class WriteModelFile:
         canvas = self.model.GetCanvas()
         if canvas is None:
             return
-        win  = canvas.parent
-        pos  = win.GetPosition()
+        win = canvas.parent
+        pos = win.GetPosition()
         size = win.GetSize()
-        self.fd.write('%s<window pos="%d,%d" size="%d,%d" />\n' % \
-                          (' ' * self.indent, pos[0], pos[1], size[0], size[1]))
-        
+        self.fd.write('%s<window pos="%d,%d" size="%d,%d" />\n' %
+                      (' ' * self.indent, pos[0], pos[1], size[0], size[1]))
+
     def _properties(self):
         """Write model properties"""
         self.fd.write('%s<properties>\n' % (' ' * self.indent))
         self.indent += 4
         if self.properties['name']:
-            self.fd.write('%s<name>%s</name>\n' % (' ' * self.indent, EncodeString(self.properties['name'])))
+            self.fd.write(
+                '%s<name>%s</name>\n' %
+                (' ' *
+                 self.indent,
+                 EncodeString(
+                     self.properties['name'])))
         if self.properties['description']:
-            self.fd.write('%s<description>%s</description>\n' % (' ' * self.indent,
-                                                                 EncodeString(self.properties['description'])))
+            self.fd.write(
+                '%s<description>%s</description>\n' %
+                (' ' *
+                 self.indent,
+                 EncodeString(
+                     self.properties['description'])))
         if self.properties['author']:
-            self.fd.write('%s<author>%s</author>\n' % (' ' * self.indent,
-                                                       EncodeString(self.properties['author'])))
-        
+            self.fd.write(
+                '%s<author>%s</author>\n' %
+                (' ' *
+                 self.indent,
+                 EncodeString(
+                     self.properties['author'])))
+
         if 'overwrite' in self.properties and \
                 self.properties['overwrite']:
-            self.fd.write('%s<flag name="overwrite" />\n' % (' ' * self.indent))
+            self.fd.write(
+                '%s<flag name="overwrite" />\n' %
+                (' ' * self.indent))
         self.indent -= 4
         self.fd.write('%s</properties>\n' % (' ' * self.indent))
 
@@ -2140,20 +2255,22 @@ class WriteModelFile:
         self.fd.write('%s<variables>\n' % (' ' * self.indent))
         self.indent += 4
         for name, values in self.variables.iteritems():
-            self.fd.write('%s<variable name="%s" type="%s">\n' % \
-                              (' ' * self.indent, EncodeString(name), values['type']))
+            self.fd.write(
+                '%s<variable name="%s" type="%s">\n' %
+                (' ' * self.indent, EncodeString(name), values['type']))
             self.indent += 4
             if 'value' in values:
-                self.fd.write('%s<value>%s</value>\n' % \
-                                  (' ' * self.indent, EncodeString(values['value'])))
+                self.fd.write('%s<value>%s</value>\n' %
+                              (' ' * self.indent, EncodeString(values['value'])))
             if 'description' in values:
-                self.fd.write('%s<description>%s</description>\n' % \
-                                  (' ' * self.indent, EncodeString(values['description'])))
+                self.fd.write(
+                    '%s<description>%s</description>\n' %
+                    (' ' * self.indent, EncodeString(values['description'])))
             self.indent -= 4
             self.fd.write('%s</variable>\n' % (' ' * self.indent))
         self.indent -= 4
         self.fd.write('%s</variables>\n' % (' ' * self.indent))
-        
+
     def _items(self):
         """Write actions/loops/conditions"""
         for item in self.items:
@@ -2165,17 +2282,28 @@ class WriteModelFile:
                 self._condition(item)
             elif isinstance(item, ModelComment):
                 self._comment(item)
-        
+
     def _action(self, action):
         """Write actions"""
-        self.fd.write('%s<action id="%d" name="%s" pos="%d,%d" size="%d,%d">\n' % \
-                          (' ' * self.indent, action.GetId(), EncodeString(action.GetLabel()), action.GetX(), action.GetY(),
-                           action.GetWidth(), action.GetHeight()))
+        self.fd.write(
+            '%s<action id="%d" name="%s" pos="%d,%d" size="%d,%d">\n' %
+            (' ' *
+             self.indent,
+             action.GetId(),
+             EncodeString(
+                 action.GetLabel()),
+                action.GetX(),
+                action.GetY(),
+                action.GetWidth(),
+                action.GetHeight()))
         self.indent += 4
         comment = action.GetComment()
         if comment:
-            self.fd.write('%s<comment>%s</comment>\n' % (' ' * self.indent, EncodeString(comment)))
-        self.fd.write('%s<task name="%s">\n' % (' ' * self.indent, action.GetLog(string = False)[0]))
+            self.fd.write(
+                '%s<comment>%s</comment>\n' %
+                (' ' * self.indent, EncodeString(comment)))
+        self.fd.write('%s<task name="%s">\n' %
+                      (' ' * self.indent, action.GetLog(string=False)[0]))
         self.indent += 4
         if not action.IsEnabled():
             self.fd.write('%s<disabled />\n' % (' ' * self.indent))
@@ -2185,47 +2313,72 @@ class WriteModelFile:
                     if f.get('value', False) or f.get('parameterized', False):
                         if f.get('parameterized', False):
                             if f.get('value', False) == False:
-                                self.fd.write('%s<flag name="%s" value="0" parameterized="1" />\n' %
-                                              (' ' * self.indent, f.get('name', '')))
+                                self.fd.write(
+                                    '%s<flag name="%s" value="0" parameterized="1" />\n' %
+                                    (' ' *
+                                     self.indent,
+                                     f.get(
+                                         'name',
+                                         '')))
                             else:
-                                self.fd.write('%s<flag name="%s" parameterized="1" />\n' %
-                                              (' ' * self.indent, f.get('name', '')))
+                                self.fd.write(
+                                    '%s<flag name="%s" parameterized="1" />\n' %
+                                    (' ' *
+                                     self.indent,
+                                     f.get(
+                                         'name',
+                                         '')))
                         else:
-                            self.fd.write('%s<flag name="%s" />\n' %
-                                          (' ' * self.indent, f.get('name', '')))
-            else: # parameter
+                            self.fd.write(
+                                '%s<flag name="%s" />\n' %
+                                (' ' * self.indent, f.get('name', '')))
+            else:  # parameter
                 for p in val:
-                    if not p.get('value', '') and not p.get('parameterized', False):
+                    if not p.get(
+                            'value', '') and not p.get(
+                            'parameterized', False):
                         continue
                     self.fd.write('%s<parameter name="%s">\n' %
                                   (' ' * self.indent, p.get('name', '')))
                     self.indent += 4
                     if p.get('parameterized', False):
-                        self.fd.write('%s<parameterized />\n' % (' ' * self.indent))
-                    self.fd.write('%s<value>%s</value>\n' %
-                                  (' ' * self.indent, self._filterValue(p.get('value', ''))))
+                        self.fd.write(
+                            '%s<parameterized />\n' %
+                            (' ' * self.indent))
+                    self.fd.write(
+                        '%s<value>%s</value>\n' %
+                        (' ' *
+                         self.indent,
+                         self._filterValue(
+                             p.get(
+                                 'value',
+                                 ''))))
                     self.indent -= 4
                     self.fd.write('%s</parameter>\n' % (' ' * self.indent))
         self.indent -= 4
         self.fd.write('%s</task>\n' % (' ' * self.indent))
         self.indent -= 4
         self.fd.write('%s</action>\n' % (' ' * self.indent))
-                
+
     def _data(self, dataList):
         """Write data"""
         for data in dataList:
-            self.fd.write('%s<data pos="%d,%d" size="%d,%d">\n' % \
-                              (' ' * self.indent, data.GetX(), data.GetY(),
-                               data.GetWidth(), data.GetHeight()))
+            self.fd.write('%s<data pos="%d,%d" size="%d,%d">\n' %
+                          (' ' * self.indent, data.GetX(), data.GetY(),
+                           data.GetWidth(), data.GetHeight()))
             self.indent += 4
-            self.fd.write('%s<data-parameter prompt="%s">\n' % \
-                              (' ' * self.indent, data.GetPrompt()))
+            self.fd.write('%s<data-parameter prompt="%s">\n' %
+                          (' ' * self.indent, data.GetPrompt()))
             self.indent += 4
-            self.fd.write('%s<value>%s</value>\n' %
-                          (' ' * self.indent, self._filterValue(data.GetValue())))
+            self.fd.write(
+                '%s<value>%s</value>\n' %
+                (' ' *
+                 self.indent,
+                 self._filterValue(
+                     data.GetValue())))
             self.indent -= 4
             self.fd.write('%s</data-parameter>\n' % (' ' * self.indent))
-            
+
             if data.IsIntermediate():
                 self.fd.write('%s<intermediate />\n' % (' ' * self.indent))
 
@@ -2235,29 +2388,39 @@ class WriteModelFile:
                     if ft == 'from':
                         aid = rel.GetTo().GetId()
                     else:
-                        aid  = rel.GetFrom().GetId()
-                    self.fd.write('%s<relation dir="%s" id="%d" name="%s">\n' % \
-                                      (' ' * self.indent, ft, aid, rel.GetLabel()))
+                        aid = rel.GetFrom().GetId()
+                    self.fd.write('%s<relation dir="%s" id="%d" name="%s">\n' %
+                                  (' ' * self.indent, ft, aid, rel.GetLabel()))
                     self.indent += 4
                     for point in rel.GetLineControlPoints()[1:-1]:
                         self.fd.write('%s<point>\n' % (' ' * self.indent))
                         self.indent += 4
                         x, y = point.Get()
-                        self.fd.write('%s<x>%d</x>\n' % (' ' * self.indent, int(x)))
-                        self.fd.write('%s<y>%d</y>\n' % (' ' * self.indent, int(y)))
+                        self.fd.write(
+                            '%s<x>%d</x>\n' %
+                            (' ' * self.indent, int(x)))
+                        self.fd.write(
+                            '%s<y>%d</y>\n' %
+                            (' ' * self.indent, int(y)))
                         self.indent -= 4
                         self.fd.write('%s</point>\n' % (' ' * self.indent))
                     self.indent -= 4
                     self.fd.write('%s</relation>\n' % (' ' * self.indent))
-                
+
             self.indent -= 4
             self.fd.write('%s</data>\n' % (' ' * self.indent))
 
     def _loop(self, loop):
         """Write loops"""
-        self.fd.write('%s<loop id="%d" pos="%d,%d" size="%d,%d">\n' % \
-                          (' ' * self.indent, loop.GetId(), loop.GetX(), loop.GetY(),
-                           loop.GetWidth(), loop.GetHeight()))
+        self.fd.write(
+            '%s<loop id="%d" pos="%d,%d" size="%d,%d">\n' %
+            (' ' *
+             self.indent,
+             loop.GetId(),
+             loop.GetX(),
+             loop.GetY(),
+             loop.GetWidth(),
+             loop.GetHeight()))
         self.indent += 4
         cond = loop.GetLabel()
         if cond:
@@ -2272,9 +2435,15 @@ class WriteModelFile:
     def _condition(self, condition):
         """Write conditions"""
         bbox = condition.GetBoundingBoxMin()
-        self.fd.write('%s<if-else id="%d" pos="%d,%d" size="%d,%d">\n' % \
-                          (' ' * self.indent, condition.GetId(), condition.GetX(), condition.GetY(),
-                           bbox[0], bbox[1]))
+        self.fd.write(
+            '%s<if-else id="%d" pos="%d,%d" size="%d,%d">\n' %
+            (' ' *
+             self.indent,
+             condition.GetId(),
+             condition.GetX(),
+             condition.GetY(),
+             bbox[0],
+                bbox[1]))
         text = condition.GetLabel()
         self.indent += 4
         if text:
@@ -2291,24 +2460,34 @@ class WriteModelFile:
                               (' ' * self.indent, item.GetId()))
             self.indent -= 4
             self.fd.write('%s</%s>\n' % (' ' * self.indent, b))
-        
+
         self.indent -= 4
         self.fd.write('%s</if-else>\n' % (' ' * self.indent))
 
     def _comment(self, comment):
         """Write comment"""
-        self.fd.write('%s<comment id="%d" pos="%d,%d" size="%d,%d">%s</comment>\n' % \
-                          (' ' * self.indent, comment.GetId(), comment.GetX(), comment.GetY(),
-                           comment.GetWidth(), comment.GetHeight(), EncodeString(comment.GetLabel())))
-        
+        self.fd.write(
+            '%s<comment id="%d" pos="%d,%d" size="%d,%d">%s</comment>\n' %
+            (' ' *
+             self.indent,
+             comment.GetId(),
+             comment.GetX(),
+             comment.GetY(),
+             comment.GetWidth(),
+             comment.GetHeight(),
+             EncodeString(
+                 comment.GetLabel())))
+
+
 class WritePythonFile:
+
     def __init__(self, fd, model):
         """Class for exporting model to Python script
 
         :param fd: file descriptor
         """
-        self.fd     = fd
-        self.model  = model
+        self.fd = fd
+        self.model = model
         self.indent = 4
 
         self._writePython()
@@ -2326,111 +2505,118 @@ class WritePythonFile:
             return 'G_OPT_M_DIR'
         elif string == 'region':
             return 'G_OPT_M_REGION'
-        
+
         return ''
 
     def _writePython(self):
         """Write model to file"""
         properties = self.model.GetProperties()
-        
+
         # header
         self.fd.write(
-r"""#!/usr/bin/env python
+            r"""#!/usr/bin/env python
 #
 #%s
 #
 # MODULE:       %s
 #
 # AUTHOR(S):    %s
-#               
+#
 # PURPOSE:      %s
 #
 # DATE:         %s
 #
 #%s
-"""% ('#' * 77,
-       EncodeString(properties['name']),
-       EncodeString(properties['author']),
-       EncodeString('\n# '.join(properties['description'].splitlines())),
-       time.asctime(),
-       '#' * 77))
-        
+""" %
+            ('#' *
+             77,
+             EncodeString(
+                 properties['name']),
+                EncodeString(
+                 properties['author']),
+                EncodeString(
+                 '\n# '.join(
+                     properties['description'].splitlines())),
+                time.asctime(),
+                '#' *
+                77))
+
         # UI
         self.fd.write(
-r"""
+            r"""
 #%%module
 #%% description: %s
 #%%end
-"""% (EncodeString(' '.join(properties['description'].splitlines()))))
+""" % (EncodeString(' '.join(properties['description'].splitlines()))))
 
         variables = self.model.GetVariables()
         for key, data in variables.iteritems():
             otype = self._getStandardizedOption(data['type'])
             self.fd.write(
-r"""
+                r"""
 #%%option %s
 #%% key: %s
 #%% description: %s
 #%% required: yes
-"""% (otype, key, data['description']))
+""" % (otype, key, data['description']))
             if 'value' in data:
                 self.fd.write("#%% answer: %s\n" % data['value'])
             self.fd.write("#% end\n")
-        
+
         # import modules
         self.fd.write(
-r"""
+            r"""
 import sys
 import os
 import atexit
 
 from grass.script import parser, run_command
 """)
-        
+
         # cleanup()
         rast, vect, rast3d, msg = self.model.GetIntermediateData()
         self.fd.write(
-r"""
+            r"""
 def cleanup():
 """)
         if rast:
             self.fd.write(
-r"""  run_command('g.remove', flags='f', type='raster',
+                r"""  run_command('g.remove', flags='f', type='raster',
                       name=%s)
-"""% ','.join(map(lambda x: "'" + x + "'", rast)))
+""" % ','.join(map(lambda x: "'" + x + "'", rast)))
         if vect:
             self.fd.write(
-r"""  run_command('g.remove', flags='f', type='vector',
+                r"""  run_command('g.remove', flags='f', type='vector',
                       name=%s)
-"""% ','.join(map(lambda x: "'" + x + "'", vect)))
+""" % ','.join(map(lambda x: "'" + x + "'", vect)))
         if rast3d:
             self.fd.write(
-r"""  run_command('g.remove', flags='f', type='raster_3d',
+                r"""  run_command('g.remove', flags='f', type='raster_3d',
                       name=%s)
-"""% ','.join(map(lambda x: "'" + x + "'", rast3d)))
+""" % ','.join(map(lambda x: "'" + x + "'", rast3d)))
         if not rast and not vect and not rast3d:
             self.fd.write('    pass\n')
-        
+
         self.fd.write("\ndef main():\n")
         for item in self.model.GetItems():
-            self._writePythonItem(item, variables = self.model.GetVariables())
-        
+            self._writePythonItem(item, variables=self.model.GetVariables())
+
         self.fd.write("\n    return 0\n")
-        
+
         self.fd.write(
-r"""
+            r"""
 if __name__ == "__main__":
     options, flags = parser()
     atexit.register(cleanup)
     sys.exit(main())
 """)
-        
-    def _writePythonItem(self, item, ignoreBlock = True, variables = {}):
+
+    def _writePythonItem(self, item, ignoreBlock=True, variables={}):
         """Write model object to Python file"""
         if isinstance(item, ModelAction):
-            if ignoreBlock and item.GetBlockId(): # ignore items in loops of conditions
+            if ignoreBlock and item.GetBlockId():  # ignore items in loops of conditions
                 return
-            self._writePythonAction(item, variables = variables)
+            self._writePythonAction(item, variables=variables)
         elif isinstance(item, ModelLoop) or isinstance(item, ModelCondition):
             # substitute condition
             cond = item.GetLabel()
@@ -2442,51 +2628,68 @@ if __name__ == "__main__":
                         value = '"' + value + '"'
                     cond = pattern.sub(value, cond)
             if isinstance(item, ModelLoop):
-                condVar, condText = map(lambda x: x.strip(), re.split('\s* in \s*', cond))
+                condVar, condText = map(
+                    lambda x: x.strip(),
+                    re.split('\s* in \s*', cond))
                 cond = "%sfor %s in " % (' ' * self.indent, condVar)
                 if condText[0] == '`' and condText[-1] == '`':
-                    task = GUI(show = None).ParseCommand(cmd = utils.split(condText[1:-1]))
+                    task = GUI(
+                        show=None).ParseCommand(
+                        cmd=utils.split(
+                            condText[
+                                1:-
+                                1]))
                     cond += "grass.read_command("
-                    cond += self._getPythonActionCmd(task, len(cond), variables = [condVar]) + ".splitlines()"
+                    cond += self._getPythonActionCmd(task,
+                                                     len(cond),
+                                                     variables=[condVar]) + ".splitlines()"
                 else:
                     cond += condText
                 self.fd.write('%s:\n' % cond)
                 self.indent += 4
                 variablesLoop = variables.copy()
                 variablesLoop[condVar] = None
-                for action in item.GetItems(self.model.GetItems(objType=ModelAction)):
-                    self._writePythonItem(action, ignoreBlock = False, variables = variablesLoop)
+                for action in item.GetItems(
+                        self.model.GetItems(objType=ModelAction)):
+                    self._writePythonItem(
+                        action, ignoreBlock=False, variables=variablesLoop)
                 self.indent -= 4
             if isinstance(item, ModelCondition):
                 self.fd.write('%sif %s:\n' % (' ' * self.indent, cond))
                 self.indent += 4
                 condItems = item.GetItems()
                 for action in condItems['if']:
-                    self._writePythonItem(action, ignoreBlock = False)
+                    self._writePythonItem(action, ignoreBlock=False)
                 if condItems['else']:
                     self.indent -= 4
                     self.fd.write('%selse:\n' % (' ' * self.indent))
                     self.indent += 4
                     for action in condItems['else']:
-                        self._writePythonItem(action, ignoreBlock = False)
+                        self._writePythonItem(action, ignoreBlock=False)
                 self.indent += 4
         self.fd.write('\n')
         if isinstance(item, ModelComment):
             self._writePythonComment(item)
-        
-    def _writePythonAction(self, item, variables = {}):
+
+    def _writePythonAction(self, item, variables={}):
         """Write model action to Python file"""
-        task = GUI(show = None).ParseCommand(cmd = item.GetLog(string = False))
+        task = GUI(show=None).ParseCommand(cmd=item.GetLog(string=False))
         strcmd = "%srun_command(" % (' ' * self.indent)
-        self.fd.write(strcmd + self._getPythonActionCmd(task, len(strcmd), variables) + '\n')
-        
-    def _getPythonActionCmd(self, task, cmdIndent, variables = {}):
+        self.fd.write(
+            strcmd +
+            self._getPythonActionCmd(
+                task,
+                len(strcmd),
+                variables) +
+            '\n')
+
+    def _getPythonActionCmd(self, task, cmdIndent, variables={}):
         opts = task.get_options()
-        
+
         ret = ''
         flags = ''
         params = list()
-        
+
         for f in opts['flags']:
             if f.get('value', False):
                 name = f.get('name', '')
@@ -2494,14 +2697,14 @@ if __name__ == "__main__":
                     params.append('%s = True' % name)
                 else:
                     flags += name
-        
+
         for p in opts['params']:
             name = p.get('name', None)
             value = p.get('value', None)
             if name and value:
                 ptype = p.get('type', 'string')
                 foundVar = False
-                
+
                 for var in sorted(variables, key=len, reverse=True):
                     data = variables[var]
                     if '%' + var in value:
@@ -2512,7 +2715,7 @@ if __name__ == "__main__":
                     params.append("%s = %s" % (name, value))
                 else:
                     params.append('%s = "%s"' % (name, value))
-        
+
         ret += '"%s"' % task.get_name()
         if flags:
             ret += ",\n%sflags = '%s'" % (' ' * cmdIndent, flags)
@@ -2523,7 +2726,7 @@ if __name__ == "__main__":
             ret += "%s%s)" % (' ' * cmdIndent, params[-1])
         else:
             ret += ")"
-        
+
         return ret
 
     def _writePythonComment(self, item):
@@ -2537,22 +2740,22 @@ if __name__ == "__main__":
         :param string: string to be modified
         :param variable: variable to be substituted
         :param data: data related to the variable
-        
+
         :return: modified string
         """
         result = ''
-        ss = re.split("\w*(%"+variable+")w*", string)
-        
+        ss = re.split("\w*(%" + variable + ")w*", string)
+
         if not ss[0] and not ss[-1]:
             if data:
                 return "options['%s']" % variable
             else:
                 return variable
-        
+
         for s in ss:
             if not s or s == '"':
                 continue
-            
+
             if s == '%' + variable:
                 if data:
                     result += "+options['%s']+" % variable
@@ -2560,74 +2763,84 @@ if __name__ == "__main__":
                     result += '+%s+' % variable
             else:
                 result += '"' + s
-                if not s.endswith(']'): # options
+                if not s.endswith(']'):  # options
                     result += '"'
-        
+
         return result.strip('+')
 
 
 class ModelParamDialog(wx.Dialog):
-    def __init__(self, parent, model, params, id = wx.ID_ANY, title = _("Model parameters"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(
+            self, parent, model, params, id=wx.ID_ANY,
+            title=_("Model parameters"),
+            style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         """Model parameters dialog
         """
         self.parent = parent
-        self._model  = model
+        self._model = model
         self.params = params
-        self.tasks  = list() # list of tasks/pages
-        
-        wx.Dialog.__init__(self, parent = parent, id = id, title = title, style = style, **kwargs)
-        
-        self.notebook = GNotebook(parent = self, 
-                                  style = globalvar.FNPageDStyle)
-        
+        self.tasks = list()  # list of tasks/pages
+
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=title,
+            style=style,
+            **kwargs)
+
+        self.notebook = GNotebook(parent=self,
+                                  style=globalvar.FNPageDStyle)
+
         panel = self._createPages()
         wx.CallAfter(self.notebook.SetSelection, 0)
 
         # intermediate data?
-        self.interData = wx.CheckBox(parent = self, label = _("Delete intermediate data when finish"))
+        self.interData = wx.CheckBox(parent=self, label=_(
+            "Delete intermediate data when finish"))
         self.interData.SetValue(True)
         rast, vect, rast3d, msg = self._model.GetIntermediateData()
         if not rast and not vect and not rast3d:
             self.interData.Hide()
-        
-        self.btnCancel = wx.Button(parent = self, id = wx.ID_CANCEL)
-        self.btnRun    = wx.Button(parent = self, id = wx.ID_OK,
-                                   label = _("&Run"))
+
+        self.btnCancel = wx.Button(parent=self, id=wx.ID_CANCEL)
+        self.btnRun = wx.Button(parent=self, id=wx.ID_OK,
+                                label=_("&Run"))
         self.btnRun.SetDefault()
-        
+
         self._layout()
-        
+
         size = self.GetBestSize()
         self.SetMinSize(size)
         self.SetSize((size.width, size.height +
                       panel.constrained_size[1] -
                       panel.panelMinHeight))
-                
+
     def _layout(self):
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnRun)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = self.notebook, proportion = 1,
-                      flag = wx.EXPAND)
+        mainSizer.Add(item=self.notebook, proportion=1,
+                      flag=wx.EXPAND)
         if self.interData.IsShown():
-            mainSizer.Add(item = self.interData, proportion = 0,
-                          flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-
-            mainSizer.Add(item = wx.StaticLine(parent = self, id = wx.ID_ANY,
-                                               style = wx.LI_HORIZONTAL),
-                          proportion = 0,
-                          flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 5) 
-        
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+            mainSizer.Add(item=self.interData, proportion=0,
+                          flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
+            mainSizer.Add(item=wx.StaticLine(parent=self, id=wx.ID_ANY,
+                                             style=wx.LI_HORIZONTAL),
+                          proportion=0,
+                          flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
+
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
-        
+
     def _createPages(self):
         """Create for each parameterized module its own page"""
         nameOrdered = [''] * len(self.params.keys())
@@ -2638,23 +2851,23 @@ class ModelParamDialog(wx.Dialog):
             panel = self._createPage(name, params)
             if name == 'variables':
                 name = _('Variables')
-            self.notebook.AddPage(page = panel, text = name)
-        
+            self.notebook.AddPage(page=panel, text=name)
+
         return panel
-    
+
     def _createPage(self, name, params):
         """Define notebook page"""
         if name in globalvar.grassCmd:
             task = gtask.grassTask(name)
         else:
             task = gtask.grassTask()
-        task.flags  = params['flags']
+        task.flags = params['flags']
         task.params = params['params']
-        
-        panel = CmdPanel(parent = self, id = wx.ID_ANY, task = task,
-                         giface = GraphicalModelerGrassInterface(self._model))
+
+        panel = CmdPanel(parent=self, id=wx.ID_ANY, task=task,
+                         giface=GraphicalModelerGrassInterface(self._model))
         self.tasks.append(task)
-        
+
         return panel
 
     def GetErrors(self):
@@ -2662,12 +2875,12 @@ class ModelParamDialog(wx.Dialog):
         errList = list()
         for task in self.tasks:
             errList += task.get_cmd_error()
-        
+
         return errList
 
     def DeleteIntermediateData(self):
         """Check if to detele intermediate data"""
         if self.interData.IsShown() and self.interData.IsChecked():
             return True
-        
+
         return False
diff --git a/gui/wxpython/gmodeler/preferences.py b/gui/wxpython/gmodeler/preferences.py
index 40003b3..243b239 100644
--- a/gui/wxpython/gmodeler/preferences.py
+++ b/gui/wxpython/gmodeler/preferences.py
@@ -16,613 +16,755 @@ This program is free software under the GNU General Public License
 """
 
 import wx
-import wx.lib.colourselect    as csel
+import wx.lib.colourselect as csel
 
-from core                 import globalvar
+from core import globalvar
 from gui_core.preferences import PreferencesBaseDialog
-from core.settings        import UserSettings
+from core.settings import UserSettings
 from core.utils import _
 
+
 class PreferencesDialog(PreferencesBaseDialog):
     """User preferences dialog"""
-    def __init__(self, parent, giface, settings = UserSettings,
-                 title = _("Modeler settings")):
-        
-        PreferencesBaseDialog.__init__(self, parent = parent, giface = giface, title = title,
-                                       settings = settings)
-        
+
+    def __init__(self, parent, giface, settings=UserSettings,
+                 title=_("Modeler settings")):
+
+        PreferencesBaseDialog.__init__(
+            self,
+            parent=parent,
+            giface=giface,
+            title=title,
+            settings=settings)
+
         # create notebook pages
         self._createGeneralPage(self.notebook)
         self._createActionPage(self.notebook)
         self._createDataPage(self.notebook)
         self._createLoopPage(self.notebook)
         self._createCommentPage(self.notebook)
-        
+
         self.SetMinSize(self.GetBestSize())
         self.SetSize(self.size)
 
     def _createGeneralPage(self, notebook):
         """Create notebook page for action settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("General"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("General"))
+
         # colors
         border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Item properties"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Item properties"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Disabled:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        rColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='disabled', subkey='color'),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Disabled:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        rColor = csel.ColourSelect(
+            parent=panel,
+            id=wx.ID_ANY,
+            colour=self.settings.Get(
+                group='modeler',
+                key='disabled',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         rColor.SetName('GetColour')
         self.winId['modeler:disabled:color'] = rColor.GetId()
-        
-        gridSizer.Add(item = rColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=rColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
 
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createActionPage(self, notebook):
         """Create notebook page for action settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Command"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Command"))
+
         # colors
         border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Color"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Color"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Valid:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        vColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='action', subkey=('color', 'valid')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Valid:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        vColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='action', subkey=(
+                    'color', 'valid')), size=globalvar.DIALOG_COLOR_SIZE)
         vColor.SetName('GetColour')
         self.winId['modeler:action:color:valid'] = vColor.GetId()
-        
-        gridSizer.Add(item = vColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=vColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Invalid:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        iColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='action', subkey=('color', 'invalid')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Invalid:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        iColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='action', subkey=(
+                    'color', 'invalid')), size=globalvar.DIALOG_COLOR_SIZE)
         iColor.SetName('GetColour')
         self.winId['modeler:action:color:invalid'] = iColor.GetId()
-        
-        gridSizer.Add(item = iColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=iColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Running:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        rColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='action', subkey=('color', 'running')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Running:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        rColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='action', subkey=(
+                    'color', 'running')), size=globalvar.DIALOG_COLOR_SIZE)
         rColor.SetName('GetColour')
         self.winId['modeler:action:color:running'] = rColor.GetId()
-        
-        gridSizer.Add(item = rColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=rColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         # size
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Shape size"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Shape size"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap=3, vgap=3)
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Width:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        
-        width = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                            min = 0, max = 500,
-                            initial = self.settings.Get(group='modeler', key='action', subkey=('size', 'width')))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Width:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+
+        width = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='action',
+                subkey=(
+                    'size',
+                    'width')))
         width.SetName('GetValue')
         self.winId['modeler:action:size:width'] = width.GetId()
-        
-        gridSizer.Add(item = width,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=width,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent=panel, id=wx.ID_ANY,
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
                                          label=_("Height:")),
-                      flag = wx.ALIGN_LEFT |
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
                       pos=(row, 0))
-        
-        height = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                             min = 0, max = 500,
-                             initial = self.settings.Get(group='modeler', key='action', subkey=('size', 'height')))
+
+        height = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='action',
+                subkey=(
+                    'size',
+                    'height')))
         height.SetName('GetValue')
         self.winId['modeler:action:size:height'] = height.GetId()
-        
-        gridSizer.Add(item = height,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=height,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
-        border.Add(item=sizer, proportion=0, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
-                
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createDataPage(self, notebook):
         """Create notebook page for data settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Data"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Data"))
+
         # colors
         border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Type"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Type"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Raster:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        rColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='data', subkey=('color', 'raster')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Raster:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        rColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='data', subkey=(
+                    'color', 'raster')), size=globalvar.DIALOG_COLOR_SIZE)
         rColor.SetName('GetColour')
         self.winId['modeler:data:color:raster'] = rColor.GetId()
-        
-        gridSizer.Add(item = rColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=rColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("3D raster:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        r3Color = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                    colour = self.settings.Get(group='modeler', key='data', subkey=('color', 'raster3d')),
-                                    size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("3D raster:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        r3Color = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='data', subkey=(
+                    'color', 'raster3d')), size=globalvar.DIALOG_COLOR_SIZE)
         r3Color.SetName('GetColour')
         self.winId['modeler:data:color:raster3d'] = r3Color.GetId()
-        
-        gridSizer.Add(item = r3Color,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=r3Color,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Vector:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        vColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='data', subkey=('color', 'vector')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Vector:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        vColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='data', subkey=(
+                    'color', 'vector')), size=globalvar.DIALOG_COLOR_SIZE)
         vColor.SetName('GetColour')
         self.winId['modeler:data:color:vector'] = vColor.GetId()
-        
-        gridSizer.Add(item = vColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=vColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Table:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        tColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='data', subkey=('color', 'dbtable')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Table:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        tColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='data', subkey=(
+                    'color', 'dbtable')), size=globalvar.DIALOG_COLOR_SIZE)
         tColor.SetName('GetColour')
         self.winId['modeler:data:color:dbtable'] = tColor.GetId()
-        
-        gridSizer.Add(item = tColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=tColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
 
         # size
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Shape size"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Shape size"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap=3, vgap=3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Width:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        
-        width = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                            min = 0, max = 500,
-                            initial = self.settings.Get(group='modeler', key='data', subkey=('size', 'width')))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Width:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+
+        width = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='data',
+                subkey=(
+                    'size',
+                    'width')))
         width.SetName('GetValue')
         self.winId['modeler:data:size:width'] = width.GetId()
-        
-        gridSizer.Add(item = width,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=width,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent=panel, id=wx.ID_ANY,
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
                                          label=_("Height:")),
-                      flag = wx.ALIGN_LEFT |
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
                       pos=(row, 0))
-        
-        height = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                             min = 0, max = 500,
-                             initial = self.settings.Get(group='modeler', key='data', subkey=('size', 'height')))
+
+        height = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='data',
+                subkey=(
+                    'size',
+                    'height')))
         height.SetName('GetValue')
         self.winId['modeler:data:size:height'] = height.GetId()
-        
-        gridSizer.Add(item = height,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=height,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
-        border.Add(item=sizer, proportion=0, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createLoopPage(self, notebook):
         """Create notebook page for loop settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Loop"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Loop"))
+
         # colors
         border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Color"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Color"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Valid:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        vColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='loop', subkey=('color', 'valid')),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Valid:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        vColor = csel.ColourSelect(
+            parent=panel, id=wx.ID_ANY, colour=self.settings.Get(
+                group='modeler', key='loop', subkey=(
+                    'color', 'valid')), size=globalvar.DIALOG_COLOR_SIZE)
         vColor.SetName('GetColour')
         self.winId['modeler:loop:color:valid'] = vColor.GetId()
-        
-        gridSizer.Add(item = vColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=vColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         # size
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Shape size"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Shape size"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap=3, vgap=3)
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Width:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        
-        width = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                            min = 0, max = 500,
-                            initial = self.settings.Get(group='modeler', key='loop', subkey=('size', 'width')))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Width:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+
+        width = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='loop',
+                subkey=(
+                    'size',
+                    'width')))
         width.SetName('GetValue')
         self.winId['modeler:loop:size:width'] = width.GetId()
-        
-        gridSizer.Add(item = width,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=width,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent=panel, id=wx.ID_ANY,
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
                                          label=_("Height:")),
-                      flag = wx.ALIGN_LEFT |
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
                       pos=(row, 0))
-        
-        height = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                             min = 0, max = 500,
-                             initial = self.settings.Get(group='modeler', key='loop', subkey=('size', 'height')))
+
+        height = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='loop',
+                subkey=(
+                    'size',
+                    'height')))
         height.SetName('GetValue')
         self.winId['modeler:loop:size:height'] = height.GetId()
-        
-        gridSizer.Add(item = height,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=height,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
-        border.Add(item=sizer, proportion=0, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
-                
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createCommentPage(self, notebook):
         """Create notebook page for comment settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Comment"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Comment"))
+
         # colors
         border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Color"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Color"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Valid:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        vColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                   colour = self.settings.Get(group='modeler', key='comment', subkey='color'),
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Valid:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+        vColor = csel.ColourSelect(
+            parent=panel,
+            id=wx.ID_ANY,
+            colour=self.settings.Get(
+                group='modeler',
+                key='comment',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         vColor.SetName('GetColour')
         self.winId['modeler:comment:color'] = vColor.GetId()
-        
-        gridSizer.Add(item = vColor,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=vColor,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         # size
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Shape size"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Shape size"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap=3, vgap=3)
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Width:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        
-        width = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                            min = 0, max = 500,
-                            initial = self.settings.Get(group='modeler', key='comment', subkey=('size', 'width')))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Width:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+
+        width = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='comment',
+                subkey=(
+                    'size',
+                    'width')))
         width.SetName('GetValue')
         self.winId['modeler:comment:size:width'] = width.GetId()
-        
-        gridSizer.Add(item = width,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=width,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent=panel, id=wx.ID_ANY,
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
                                          label=_("Height:")),
-                      flag = wx.ALIGN_LEFT |
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
                       pos=(row, 0))
-        
-        height = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                             min = 0, max = 500,
-                             initial = self.settings.Get(group='modeler', key='comment', subkey=('size', 'height')))
+
+        height = wx.SpinCtrl(
+            parent=panel,
+            id=wx.ID_ANY,
+            min=0,
+            max=500,
+            initial=self.settings.Get(
+                group='modeler',
+                key='comment',
+                subkey=(
+                    'size',
+                    'height')))
         height.SetName('GetValue')
         self.winId['modeler:comment:size:height'] = height.GetId()
-        
-        gridSizer.Add(item = height,
-                      flag = wx.ALIGN_RIGHT |
+
+        gridSizer.Add(item=height,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
-        border.Add(item=sizer, proportion=0, flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
-                
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def OnApply(self, event):
         """Button 'Apply' pressed"""
         PreferencesBaseDialog.OnApply(self, event)
-        
+
         self.parent.GetModel().Update()
         self.parent.GetCanvas().Refresh()
 
     def OnSave(self, event):
         """Button 'Save' pressed"""
         PreferencesBaseDialog.OnSave(self, event)
-        
+
         self.parent.GetModel().Update()
         self.parent.GetCanvas().Refresh()
 
+
 class PropertiesDialog(wx.Dialog):
     """Model properties dialog
     """
-    def __init__(self, parent, id = wx.ID_ANY,
-                 title = _('Model properties'),
-                 size = (350, 400),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
-        wx.Dialog.__init__(self, parent, id, title, size = size,
-                           style = style)
-        
-        self.metaBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_('Model properties'),
+                 size=(350, 400),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+        wx.Dialog.__init__(self, parent, id, title, size=size,
+                           style=style)
+
+        self.metaBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
                                     label=" %s " % _("Metadata"))
-        self.cmdBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
+        self.cmdBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
                                    label=" %s " % _("Commands"))
-        
-        self.name = wx.TextCtrl(parent = self, id = wx.ID_ANY,
-                                size = (300, 25))
-        self.desc = wx.TextCtrl(parent = self, id = wx.ID_ANY,
-                                style = wx.TE_MULTILINE,
-                                size = (300, 50))
-        self.author = wx.TextCtrl(parent = self, id = wx.ID_ANY,
-                                size = (300, 25))
-        
+
+        self.name = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                                size=(300, 25))
+        self.desc = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                                style=wx.TE_MULTILINE,
+                                size=(300, 50))
+        self.author = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                                  size=(300, 25))
+
         # commands
-        self.overwrite = wx.CheckBox(parent = self, id=wx.ID_ANY,
-                                     label=_("Allow output files to overwrite existing files"))
-        self.overwrite.SetValue(UserSettings.Get(group='cmd', key='overwrite', subkey='enabled'))
-        
+        self.overwrite = wx.CheckBox(parent=self, id=wx.ID_ANY, label=_(
+            "Allow output files to overwrite existing files"))
+        self.overwrite.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='overwrite',
+                subkey='enabled'))
+
         # buttons
-        self.btnOk     = wx.Button(self, wx.ID_OK)
+        self.btnOk = wx.Button(self, wx.ID_OK)
         self.btnCancel = wx.Button(self, wx.ID_CANCEL)
         self.btnOk.SetDefault()
-        
+
         self.btnOk.SetToolTipString(_("Apply properties"))
         self.btnOk.SetDefault()
         self.btnCancel.SetToolTipString(_("Close dialog and ignore changes"))
-        
+
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
-        
+
         self._layout()
 
     def _layout(self):
         metaSizer = wx.StaticBoxSizer(self.metaBox, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(hgap = 3, vgap = 3)
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                         label = _("Name:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 0))
-        gridSizer.Add(item = self.name,
-                      flag = wx.ALIGN_LEFT |
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label=_("Name:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 0))
+        gridSizer.Add(item=self.name,
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos = (0, 1))
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                         label = _("Description:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1, 0))
-        gridSizer.Add(item = self.desc,
-                      flag = wx.ALIGN_LEFT |
+                      pos=(0, 1))
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label=_("Description:")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(1, 0))
+        gridSizer.Add(item=self.desc,
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos = (1, 1))
-        gridSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                         label = _("Author(s):")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 0))
-        gridSizer.Add(item = self.author,
-                      flag = wx.ALIGN_LEFT |
+                      pos=(1, 1))
+        gridSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label=_("Author(s):")),
+                      flag=wx.ALIGN_LEFT |
+                      wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 0))
+        gridSizer.Add(item=self.author,
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos = (2, 1))
+                      pos=(2, 1))
         gridSizer.AddGrowableCol(1)
         gridSizer.AddGrowableRow(1)
-        metaSizer.Add(item = gridSizer, proportion = 1, flag = wx.EXPAND)
-        
+        metaSizer.Add(item=gridSizer, proportion=1, flag=wx.EXPAND)
+
         cmdSizer = wx.StaticBoxSizer(self.cmdBox, wx.VERTICAL)
-        cmdSizer.Add(item = self.overwrite,
-                     flag = wx.EXPAND | wx.ALL, border = 3)
-        
+        cmdSizer.Add(item=self.overwrite,
+                     flag=wx.EXPAND | wx.ALL, border=3)
+
         btnStdSizer = wx.StdDialogButtonSizer()
         btnStdSizer.AddButton(self.btnCancel)
         btnStdSizer.AddButton(self.btnOk)
         btnStdSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
         mainSizer.Add(item=metaSizer, proportion=1,
                       flag=wx.EXPAND | wx.ALL, border=5)
-        mainSizer.Add(item=cmdSizer, proportion=0,
-                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+        mainSizer.Add(
+            item=cmdSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+            border=5)
         mainSizer.Add(item=btnStdSizer, proportion=0,
                       flag=wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border=5)
-        
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
 
     def OnCloseWindow(self, event):
         self.Hide()
-        
+
     def GetValues(self):
         """Get values"""
-        return { 'name'        : self.name.GetValue(),
-                 'description' : self.desc.GetValue(),
-                 'author'      : self.author.GetValue(),
-                 'overwrite'   : self.overwrite.IsChecked() }
-    
+        return {'name': self.name.GetValue(),
+                'description': self.desc.GetValue(),
+                'author': self.author.GetValue(),
+                'overwrite': self.overwrite.IsChecked()}
+
     def Init(self, prop):
         """Initialize dialog"""
         self.name.SetValue(prop['name'])
diff --git a/gui/wxpython/gmodeler/toolbars.py b/gui/wxpython/gmodeler/toolbars.py
index a2de02d..a444645 100644
--- a/gui/wxpython/gmodeler/toolbars.py
+++ b/gui/wxpython/gmodeler/toolbars.py
@@ -19,15 +19,17 @@ import sys
 
 import wx
 
-from core              import globalvar
+from core import globalvar
 from core.utils import _
 from gui_core.toolbars import BaseToolbar, BaseIcons
 
-from icons.icon        import MetaIcon
+from icons.icon import MetaIcon
+
 
 class ModelerToolbar(BaseToolbar):
     """Graphical modeler toolbaro (see gmodeler.py)
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
 
@@ -36,47 +38,47 @@ class ModelerToolbar(BaseToolbar):
             parent.SetToolBar(self)
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         icons = {
-            'new'        : MetaIcon(img = 'create',
-                                    label = _('Create new model (Ctrl+N)')),
-            'open'       : MetaIcon(img = 'open',
-                                    label = _('Load model from file (Ctrl+O)')),
-            'save'       : MetaIcon(img = 'save',
-                                    label = _('Save current model to file (Ctrl+S)')),
-            'toImage'    : MetaIcon(img = 'image-export',
-                                    label = _('Export model to image')),
-            'toPython'   : MetaIcon(img = 'python-export',
-                                    label = _('Export model to Python script')),
-            'actionAdd'  : MetaIcon(img = 'module-add',
-                                    label = _('Add command (GRASS module) to model')),
-            'dataAdd'    : MetaIcon(img = 'data-add',
-                                    label = _('Add data to model')),
-            'relation'   : MetaIcon(img = 'relation-create',
-                                    label = _('Manually define relation between data and commands')),
-            'loop'       : MetaIcon(img = 'loop-add',
-                                    label = _('Add loop/series to model')),
-            'comment'    : MetaIcon(img = 'label-add',
-                                    label = _('Add comment to model')),
-            'run'        : MetaIcon(img = 'execute',
-                                    label = _('Run model')),
-            'validate'   : MetaIcon(img = 'check',
-                                    label = _('Validate model')),
-            'settings'   : BaseIcons['settings'].SetLabel(_('Modeler settings')),
-            'properties' : MetaIcon(img = 'options',
-                                    label = _('Show model properties')),
-            'variables'  : MetaIcon(img = 'modeler-variables',
-                                    label = _('Manage model variables')),
-            'redraw'     : MetaIcon(img = 'redraw',
-                                    label = _('Redraw model canvas')),
-            'quit'       : BaseIcons['quit'].SetLabel(_('Quit Graphical Modeler')),
-            }
-        
+            'new': MetaIcon(img='create',
+                            label=_('Create new model (Ctrl+N)')),
+            'open': MetaIcon(img='open',
+                             label=_('Load model from file (Ctrl+O)')),
+            'save': MetaIcon(img='save',
+                             label=_('Save current model to file (Ctrl+S)')),
+            'toImage': MetaIcon(img='image-export',
+                                label=_('Export model to image')),
+            'toPython': MetaIcon(img='python-export',
+                                 label=_('Export model to Python script')),
+            'actionAdd': MetaIcon(img='module-add',
+                                  label=_('Add command (GRASS module) to model')),
+            'dataAdd': MetaIcon(img='data-add',
+                                label=_('Add data to model')),
+            'relation': MetaIcon(img='relation-create',
+                                 label=_('Manually define relation between data and commands')),
+            'loop': MetaIcon(img='loop-add',
+                             label=_('Add loop/series to model')),
+            'comment': MetaIcon(img='label-add',
+                                label=_('Add comment to model')),
+            'run': MetaIcon(img='execute',
+                            label=_('Run model')),
+            'validate': MetaIcon(img='check',
+                                 label=_('Validate model')),
+            'settings': BaseIcons['settings'].SetLabel(_('Modeler settings')),
+            'properties': MetaIcon(img='options',
+                                   label=_('Show model properties')),
+            'variables': MetaIcon(img='modeler-variables',
+                                  label=_('Manage model variables')),
+            'redraw': MetaIcon(img='redraw',
+                               label=_('Redraw model canvas')),
+            'quit': BaseIcons['quit'].SetLabel(_('Quit Graphical Modeler')),
+        }
+
         return self._getToolbarData((('new', icons['new'],
                                       self.parent.OnModelNew),
                                      ('open', icons['open'],
diff --git a/gui/wxpython/gui_core/__init__.py b/gui/wxpython/gui_core/__init__.py
index e5b28e4..6170e49 100644
--- a/gui/wxpython/gui_core/__init__.py
+++ b/gui/wxpython/gui_core/__init__.py
@@ -13,4 +13,4 @@ all = [
     'forms',
     'toolbars',
     'treeview',
-    ]
+]
diff --git a/gui/wxpython/gui_core/dialogs.py b/gui/wxpython/gui_core/dialogs.py
index c155e20..88321e4 100644
--- a/gui/wxpython/gui_core/dialogs.py
+++ b/gui/wxpython/gui_core/dialogs.py
@@ -12,16 +12,12 @@ List of classes:
  - :class:`SavedRegion`
  - :class:`GroupDialog`
  - :class:`MapLayersDialog`
- - :class:`ImportDialog`
- - :class:`GdalImportDialog`
- - :class:`GdalOutputDialog`
- - :class:`DxfImportDialog`
- - :class:`LayersList` (used by MultiImport)
  - :class:`SetOpacityDialog`
  - :class:`ImageSizeDialog`
  - :class:`SqlQueryFrame`
  - :class:`SymbolDialog`
  - :class:`QuitDialog`
+ - :class:`DefaultFontDialog`
 
 (C) 2008-2016 by the GRASS Development Team
 
@@ -35,87 +31,92 @@ This program is free software under the GNU General Public License
 import os
 import sys
 import re
-from bisect import bisect
 
 import wx
-import wx.lib.filebrowsebutton as filebrowse
-import wx.lib.mixins.listctrl as listmix
 
 from grass.script import core as grass
-from grass.script import task as gtask
-from grass.script.utils import natural_sort
+from grass.script.utils import natural_sort, try_remove
 
 from grass.pydispatch.signal import Signal
 
 from core import globalvar
-from core.gcmd import GError, RunCommand, GMessage, GWarning
+from core.gcmd import GError, RunCommand, GMessage
 from gui_core.gselect import LocationSelect, MapsetSelect, Select, \
-                             OgrTypeSelect, GdalSelect, MapsetSelect, \
-                             SubGroupSelect
-from gui_core.widgets import SingleSymbolPanel, GListCtrl, SimpleValidator
-from core.utils import GetValidLayerName, _
-from core.settings import UserSettings, GetDisplayVectSettings
+    OgrTypeSelect, SubGroupSelect
+from gui_core.widgets import SingleSymbolPanel, GListCtrl, SimpleValidator, MapValidator
+from core.utils import _
+from core.settings import UserSettings
 from core.debug import Debug
 
+
 class SimpleDialog(wx.Dialog):
-    def __init__(self, parent, title, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+
+    def __init__(self, parent, title, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
                  **kwargs):
         """General dialog to choose given element (location, mapset, vector map, etc.)
-        
+
         :param parent: window
         :param title: window title
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
         self.SetExtraStyle(wx.WS_EX_VALIDATE_RECURSIVELY)
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnOK     = wx.Button(parent = self.panel, id = wx.ID_OK)
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnOK = wx.Button(parent=self.panel, id=wx.ID_OK)
         self.btnOK.SetDefault()
-                
+
         self.__layout()
         self.warning = _("Required item is not set.")
 
     def __layout(self):
         """Do layout"""
         self.sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         self.dataSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # self.informLabel = wx.StaticText(self.panel, id = wx.ID_ANY)
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOK)
         btnSizer.Realize()
-        
-        self.sizer.Add(item = self.dataSizer, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+
+        self.sizer.Add(item=self.dataSizer, proportion=1,
+                       flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         # self.sizer.Add(item = self.informLabel, proportion = 0, flag = wx.ALL, border = 5)
-        self.sizer.Add(item = btnSizer, proportion = 0,
-                       flag = wx.EXPAND | wx.ALL, border = 5)
+        self.sizer.Add(item=btnSizer, proportion=0,
+                       flag=wx.EXPAND | wx.ALL, border=5)
 
     def ValidatorCallback(self, win):
-        GMessage(parent = self, message = self.warning)
+        GMessage(parent=self, message=self.warning)
         # self.informLabel.SetForegroundColour(wx.Colour(255, 0, 0))
         # self.informLabel.SetLabel(self.warning)
 
 
 class LocationDialog(SimpleDialog):
     """Dialog used to select location"""
-    def __init__(self, parent, title = _("Select GRASS location and mapset")):
+
+    def __init__(self, parent, title=_("Select GRASS location and mapset")):
         SimpleDialog.__init__(self, parent, title)
 
-        self.element1 = LocationSelect(parent = self.panel, id = wx.ID_ANY,
-                                      size = globalvar.DIALOG_GSELECT_SIZE,
-                                      validator = SimpleValidator(callback = self.ValidatorCallback))
+        self.element1 = LocationSelect(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
         self.element1.Bind(wx.EVT_TEXT, self.OnLocation)
-        self.element2 = MapsetSelect(parent = self.panel, id = wx.ID_ANY,
-                                     size = globalvar.DIALOG_GSELECT_SIZE,
-                                     setItems = False, skipCurrent = True,
-                                     validator = SimpleValidator(callback = self.ValidatorCallback))
+        self.element2 = MapsetSelect(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            setItems=False,
+            skipCurrent=True,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
         self.element1.SetFocus()
         self.warning = _("Location or mapset is not defined.")
         self._layout()
@@ -123,102 +124,126 @@ class LocationDialog(SimpleDialog):
 
     def _layout(self):
         """Do layout"""
-        self.dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                label = _("Name of GRASS location:")),
-                           proportion = 0, flag = wx.ALL, border = 1)
-        self.dataSizer.Add(self.element1, proportion = 0,
-                           flag = wx.EXPAND | wx.ALL, border = 1)
- 
-        self.dataSizer.Add(wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                         label = _("Name of mapset:")), proportion = 0,
-                           flag = wx.EXPAND | wx.ALL, border = 1)
-
-        self.dataSizer.Add(self.element2, proportion = 0,
-                           flag = wx.EXPAND | wx.ALL, border = 1)
-       
+        self.dataSizer.Add(
+            item=wx.StaticText(
+                parent=self.panel,
+                id=wx.ID_ANY,
+                label=_("Name of GRASS location:")),
+            proportion=0,
+            flag=wx.ALL,
+            border=1)
+        self.dataSizer.Add(self.element1, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
+
+        self.dataSizer.Add(
+            wx.StaticText(
+                parent=self.panel,
+                id=wx.ID_ANY,
+                label=_("Name of mapset:")),
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=1)
+
+        self.dataSizer.Add(self.element2, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
+
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
     def OnLocation(self, event):
         """Select mapset given location name"""
         location = event.GetString()
-        
+
         if location:
             dbase = grass.gisenv()['GISDBASE']
-            self.element2.UpdateItems(dbase = dbase, location = location)
+            self.element2.UpdateItems(dbase=dbase, location=location)
             self.element2.SetSelection(0)
             mapset = self.element2.GetStringSelection()
 
     def GetValues(self):
         """Get location, mapset"""
         return (self.element1.GetValue(), self.element2.GetValue())
-    
+
+
 class MapsetDialog(SimpleDialog):
     """Dialog used to select mapset"""
-    def __init__(self, parent, title = _("Select mapset in GRASS location"),
-                 location = None):
+
+    def __init__(self, parent, title=_("Select mapset in GRASS location"),
+                 location=None):
         SimpleDialog.__init__(self, parent, title)
 
         if location:
             self.SetTitle(self.GetTitle() + ' <%s>' % location)
         else:
-            self.SetTitle(self.GetTitle() + ' <%s>' % grass.gisenv()['LOCATION_NAME'])
-        
-        self.element = MapsetSelect(parent = self.panel, id = wx.ID_ANY, skipCurrent = True,
-                                    size = globalvar.DIALOG_GSELECT_SIZE,
-                                    validator = SimpleValidator(callback = self.ValidatorCallback))
-        
+            self.SetTitle(
+                self.GetTitle() + ' <%s>' %
+                grass.gisenv()['LOCATION_NAME'])
+
+        self.element = MapsetSelect(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            skipCurrent=True,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
+
         self.element.SetFocus()
         self.warning = _("Name of mapset is missing.")
-        
+
         self._layout()
         self.SetMinSize(self.GetSize())
 
     def _layout(self):
         """Do layout"""
-        self.dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                label = _("Name of mapset:")),
-                           proportion = 0, flag = wx.ALL, border = 1)
-        self.dataSizer.Add(self.element, proportion = 0,
-                           flag = wx.EXPAND | wx.ALL, border = 1)
+        self.dataSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                              label=_("Name of mapset:")),
+                           proportion=0, flag=wx.ALL, border=1)
+        self.dataSizer.Add(self.element, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
     def GetMapset(self):
         return self.element.GetValue()
 
+
 class VectorDialog(SimpleDialog):
-    def __init__(self, parent, title = _("Select vector map"), layerTree = None):
+
+    def __init__(self, parent, title=_("Select vector map"), layerTree=None):
         """Dialog for selecting existing vector map
 
         :param parent: parent window
         :param title: window title
         :param layerTree: show only vector maps in given layer tree if not None
-        
+
         :return: dialog instance
         """
         SimpleDialog.__init__(self, parent, title)
-        
-        self.element = Select(parent = self.panel, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                              type = 'vector', layerTree = layerTree,
-                              validator = SimpleValidator(callback = self.ValidatorCallback))
+
+        self.element = Select(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            type='vector',
+            layerTree=layerTree,
+            validator=MapValidator())
         self.element.SetFocus()
-        
+
         self.warning = _("Name of vector map is missing.")
         wx.CallAfter(self._layout)
-        
+
     def _layout(self):
         """Do layout"""
-        self.dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                label = _("Name of vector map:")),
-                           proportion = 0, flag = wx.ALL, border = 1)
-        self.dataSizer.Add(item = self.element, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 1)
-        
+        self.dataSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                              label=_("Name of vector map:")),
+                           proportion=0, flag=wx.ALL, border=1)
+        self.dataSizer.Add(item=self.element, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
+
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
-    def GetName(self, full = False):
+    def GetName(self, full=False):
         """Get name of vector map to be created
 
         :param full: True to get fully qualified name
@@ -229,12 +254,14 @@ class VectorDialog(SimpleDialog):
                 return name
             else:
                 return name + '@' + grass.gisenv()['MAPSET']
-        
+
         return name.split('@', 1)[0]
 
+
 class NewVectorDialog(VectorDialog):
-    def __init__(self, parent, title = _("Create new vector map"),
-                 disableAdd = False, disableTable = False, showType = False):
+
+    def __init__(self, parent, title=_("Create new vector map"),
+                 disableAdd=False, disableTable=False, showType=False):
         """Dialog for creating new vector map
 
         :param parent: parent window
@@ -242,80 +269,98 @@ class NewVectorDialog(VectorDialog):
         :param disableAdd: disable 'add layer' checkbox
         :param disableTable: disable 'create table' checkbox
         :param showType: True to show feature type selector (used for creating new empty OGR layers)
-        
+
         :return: dialog instance
         """
         VectorDialog.__init__(self, parent, title)
-        
+
         # determine output format
         if showType:
-            self.ftype = OgrTypeSelect(parent = self, panel = self.panel)
+            self.ftype = OgrTypeSelect(parent=self, panel=self.panel)
         else:
             self.ftype = None
-        
+
         # create attribute table
-        self.table = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                 label = _("Create attribute table"))
+        self.table = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
+                                 label=_("Create attribute table"))
         self.table.SetValue(True)
         if disableTable:
             self.table.Enable(False)
-        
+
         if showType:
             self.keycol = None
         else:
-            self.keycol = wx.TextCtrl(parent = self.panel, id =  wx.ID_ANY,
-                                      size = globalvar.DIALOG_SPIN_SIZE)
-            self.keycol.SetValue(UserSettings.Get(group = 'atm', key = 'keycolumn', subkey = 'value'))
+            self.keycol = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY,
+                                      size=globalvar.DIALOG_SPIN_SIZE)
+            self.keycol.SetValue(
+                UserSettings.Get(
+                    group='atm',
+                    key='keycolumn',
+                    subkey='value'))
             if disableTable:
                 self.keycol.Enable(False)
-        
-        self.addbox = wx.CheckBox(parent = self.panel,
-                                  label = _('Add created map into layer tree'), style = wx.NO_BORDER)
+
+        self.addbox = wx.CheckBox(
+            parent=self.panel,
+            label=_('Add created map into layer tree'),
+            style=wx.NO_BORDER)
         if disableAdd:
             self.addbox.SetValue(True)
             self.addbox.Enable(False)
         else:
-            self.addbox.SetValue(UserSettings.Get(group = 'cmd', key = 'addNewLayer', subkey = 'enabled'))
+            self.addbox.SetValue(
+                UserSettings.Get(
+                    group='cmd',
+                    key='addNewLayer',
+                    subkey='enabled'))
 
         self.table.Bind(wx.EVT_CHECKBOX, self.OnTable)
-        
+
         self.warning = _("Name of new vector map is missing.")
-        
+
     def OnTable(self, event):
         if self.keycol:
             self.keycol.Enable(event.IsChecked())
-        
+
     def _layout(self):
         """Do layout"""
-        self.dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                label = _("Name for new vector map:")),
-                           proportion = 0, flag = wx.ALL, border = 1)
-        self.dataSizer.Add(item = self.element, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 1)
+        self.dataSizer.Add(
+            item=wx.StaticText(
+                parent=self.panel,
+                id=wx.ID_ANY,
+                label=_("Name for new vector map:")),
+            proportion=0,
+            flag=wx.ALL,
+            border=1)
+        self.dataSizer.Add(item=self.element, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
         if self.ftype:
             self.dataSizer.AddSpacer(1)
-            self.dataSizer.Add(item = self.ftype, proportion = 0,
-                               flag = wx.EXPAND | wx.ALL, border = 1)
-        
-        self.dataSizer.Add(item = self.table, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 1)
-        
+            self.dataSizer.Add(item=self.ftype, proportion=0,
+                               flag=wx.EXPAND | wx.ALL, border=1)
+
+        self.dataSizer.Add(item=self.table, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
+
         if self.keycol:
             keySizer = wx.BoxSizer(wx.HORIZONTAL)
-            keySizer.Add(item = wx.StaticText(parent = self.panel, label = _("Key column:")),
-                         proportion = 0,
-                         flag = wx.ALIGN_CENTER_VERTICAL)
+            keySizer.Add(
+                item=wx.StaticText(
+                    parent=self.panel,
+                    label=_("Key column:")),
+                proportion=0,
+                flag=wx.ALIGN_CENTER_VERTICAL)
             keySizer.AddSpacer(10)
-            keySizer.Add(item = self.keycol, proportion = 0,
-                         flag = wx.ALIGN_RIGHT)
-            self.dataSizer.Add(item = keySizer, proportion = 1,
-                               flag = wx.EXPAND | wx.ALL, border = 1)
-            
+            keySizer.Add(item=self.keycol, proportion=0,
+                         flag=wx.ALIGN_RIGHT)
+            self.dataSizer.Add(item=keySizer, proportion=1,
+                               flag=wx.EXPAND | wx.ALL, border=1)
+
         self.dataSizer.AddSpacer(5)
-        
-        self.dataSizer.Add(item = self.addbox, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 1)
-        
+
+        self.dataSizer.Add(item=self.addbox, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
+
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
         self.SetMinSize(self.GetSize())
@@ -324,8 +369,8 @@ class NewVectorDialog(VectorDialog):
         """Get key column name"""
         if self.keycol:
             return self.keycol.GetValue()
-        return UserSettings.Get(group = 'atm', key = 'keycolumn', subkey = 'value')
-    
+        return UserSettings.Get(group='atm', key='keycolumn', subkey='value')
+
     def IsChecked(self, key):
         """Get dialog properties
 
@@ -338,9 +383,9 @@ class NewVectorDialog(VectorDialog):
             return self.addbox.IsChecked()
         elif key == 'table':
             return self.table.IsChecked()
-        
+
         return None
-    
+
     def GetFeatureType(self):
         """Get feature type for OGR
 
@@ -353,9 +398,9 @@ class NewVectorDialog(VectorDialog):
         return None
 
 
-def CreateNewVector(parent, cmd, title = _('Create new vector map'),
+def CreateNewVector(parent, cmd, title=_('Create new vector map'),
                     exceptMap=None, giface=None,
-                    disableAdd = False, disableTable = False):
+                    disableAdd=False, disableTable=False):
     """Create new vector map layer
 
     :param cmd: (prog, \*\*kwargs)
@@ -374,29 +419,29 @@ def CreateNewVector(parent, cmd, title = _('Create new vector map'),
         showType = True
     else:
         showType = False
-    dlg = NewVectorDialog(parent, title = title,
-                          disableAdd = disableAdd, disableTable = disableTable,
-                          showType = showType)
-    
+    dlg = NewVectorDialog(parent, title=title,
+                          disableAdd=disableAdd, disableTable=disableTable,
+                          showType=showType)
+
     if dlg.ShowModal() != wx.ID_OK:
         dlg.Destroy()
         return None
 
     outmap = dlg.GetName()
-    key    = dlg.GetKey()
+    key = dlg.GetKey()
     if outmap == exceptMap:
-        GError(parent = parent,
-               message = _("Unable to create vector map <%s>.") % outmap)
+        GError(parent=parent,
+               message=_("Unable to create vector map <%s>.") % outmap)
         dlg.Destroy()
         return None
     if dlg.table.IsEnabled() and not key:
-        GError(parent = parent,
-               message = _("Invalid or empty key column.\n"
-                           "Unable to create vector map <%s>.") % outmap)
+        GError(parent=parent,
+               message=_("Invalid or empty key column.\n"
+                         "Unable to create vector map <%s>.") % outmap)
         dlg.Destroy()
         return
-        
-    if outmap == '': # should not happen
+
+    if outmap == '':  # should not happen
         dlg.Destroy()
         return None
 
@@ -404,135 +449,162 @@ def CreateNewVector(parent, cmd, title = _('Create new vector map'),
     cmd[1][cmd[2]] = outmap
     if showType:
         cmd[1]['type'] = dlg.GetFeatureType()
-        
+
     curMapset = grass.gisenv()['MAPSET']
     if isNative:
         listOfVectors = grass.list_grouped('vector')[curMapset]
     else:
         listOfVectors = RunCommand('v.external',
-                                   quiet = True,
-                                   parent = parent,
-                                   read = True,
-                                   flags = 'l',
-                                   input = vExternalOut['dsn']).splitlines()
-    
+                                   quiet=True,
+                                   parent=parent,
+                                   read=True,
+                                   flags='l',
+                                   input=vExternalOut['dsn']).splitlines()
+
     overwrite = False
-    if not UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled') and \
-            outmap in listOfVectors:
-        dlgOw = wx.MessageDialog(parent, message = _("Vector map <%s> already exists "
-                                                     "in the current mapset. "
-                                                     "Do you want to overwrite it?") % outmap,
-                                 caption = _("Overwrite?"),
-                                 style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+    if not UserSettings.Get(group='cmd', key='overwrite',
+                            subkey='enabled') and outmap in listOfVectors:
+        dlgOw = wx.MessageDialog(
+            parent,
+            message=_(
+                "Vector map <%s> already exists "
+                "in the current mapset. "
+                "Do you want to overwrite it?") %
+            outmap,
+            caption=_("Overwrite?"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
         if dlgOw.ShowModal() == wx.ID_YES:
             overwrite = True
         else:
             dlgOw.Destroy()
             dlg.Destroy()
             return None
-        
-    if UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'):
+
+    if UserSettings.Get(group='cmd', key='overwrite', subkey='enabled'):
         overwrite = True
-        
-    ret = RunCommand(prog = cmd[0],
-                     parent = parent,
-                     overwrite = overwrite,
+
+    ret = RunCommand(prog=cmd[0],
+                     parent=parent,
+                     overwrite=overwrite,
                      **cmd[1])
     if ret != 0:
         dlg.Destroy()
         return None
-    
-    if not isNative and \
-            not grass.find_file(outmap, element = 'vector', mapset = curMapset)['fullname']:
+
+    if not isNative and not grass.find_file(
+            outmap, element='vector', mapset=curMapset)['fullname']:
         # create link for OGR layers
         RunCommand('v.external',
-                   overwrite = overwrite,
-                   parent = parent,
-                   input = vExternalOut['dsn'],
-                   layer = outmap)
-        
+                   overwrite=overwrite,
+                   parent=parent,
+                   input=vExternalOut['dsn'],
+                   layer=outmap)
+
     # create attribute table
     if dlg.table.IsEnabled() and dlg.table.IsChecked():
         if isNative:
             sql = 'CREATE TABLE %s (%s INTEGER)' % (outmap, key)
-            
+
             RunCommand('db.connect',
-                       flags = 'c')
-            
+                       flags='c')
+
             Debug.msg(1, "SQL: %s" % sql)
             RunCommand('db.execute',
-                       quiet = True,
-                       parent = parent,
-                       input = '-',
-                       stdin = sql)
-            
+                       quiet=True,
+                       parent=parent,
+                       input='-',
+                       stdin=sql)
+
             RunCommand('v.db.connect',
-                       quiet = True,
-                       parent = parent,
-                       map = outmap,
-                       table = outmap,
-                       key = key,
-                       layer = '1')
+                       quiet=True,
+                       parent=parent,
+                       map=outmap,
+                       table=outmap,
+                       key=key,
+                       layer='1')
         # TODO: how to deal with attribute tables for OGR layers?
-            
+
     # return fully qualified map name
     if '@' not in outmap:
         outmap += '@' + grass.gisenv()['MAPSET']
-    
+
     # if giface:
     #     giface.WriteLog(_("New vector map <%s> created") % outmap)
-        
+
     return dlg
 
+
 class SavedRegion(wx.Dialog):
-    def __init__(self, parent, title, id = wx.ID_ANY, loadsave = 'load',
+
+    def __init__(self, parent, title, id=wx.ID_ANY, loadsave='load',
                  **kwargs):
         """Loading or saving of display extents to saved region file
 
         :param loadsave: load or save region?
         """
         wx.Dialog.__init__(self, parent, id, title, **kwargs)
-        
+
         self.loadsave = loadsave
         self.wind = ''
-        
+
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         box = wx.BoxSizer(wx.HORIZONTAL)
-        label = wx.StaticText(parent = self, id = wx.ID_ANY)
-        box.Add(item = label, proportion = 0, flag = wx.ALIGN_CENTRE | wx.ALL, border = 5)
+        label = wx.StaticText(parent=self, id=wx.ID_ANY)
+        box.Add(
+            item=label,
+            proportion=0,
+            flag=wx.ALIGN_CENTRE | wx.ALL,
+            border=5)
         if loadsave == 'load':
             label.SetLabel(_("Load region:"))
-            self._selection = Select(parent=self, size=globalvar.DIALOG_GSELECT_SIZE,
-                                     type='windows')
+            self._selection = Select(
+                parent=self,
+                size=globalvar.DIALOG_GSELECT_SIZE,
+                type='windows')
         elif loadsave == 'save':
             label.SetLabel(_("Save region:"))
-            self._selection = Select(parent=self, size=globalvar.DIALOG_GSELECT_SIZE,
-                                     type='windows', mapsets=[grass.gisenv()['MAPSET']], fullyQualified = False)
-        
-        box.Add(item=self._selection, proportion=0, flag=wx.ALIGN_CENTRE | wx.ALL, border=5)
+            self._selection = Select(
+                parent=self,
+                size=globalvar.DIALOG_GSELECT_SIZE,
+                type='windows',
+                mapsets=[
+                    grass.gisenv()['MAPSET']],
+                fullyQualified=False)
+
+        box.Add(
+            item=self._selection,
+            proportion=0,
+            flag=wx.ALIGN_CENTRE | wx.ALL,
+            border=5)
         self._selection.SetFocus()
         self._selection.Bind(wx.EVT_TEXT, self.OnRegion)
-        
-        sizer.Add(item = box, proportion = 0, flag = wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                  border = 5)
-        
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border = 5)
-        
+
+        sizer.Add(item=box, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+
+        line = wx.StaticLine(
+            parent=self, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=5)
+
         btnsizer = wx.StdDialogButtonSizer()
-        
-        btn = wx.Button(parent = self, id = wx.ID_OK)
+
+        btn = wx.Button(parent=self, id=wx.ID_OK)
         btn.SetDefault()
         btnsizer.AddButton(btn)
-        
-        btn = wx.Button(parent = self, id = wx.ID_CANCEL)
+
+        btn = wx.Button(parent=self, id=wx.ID_CANCEL)
         btnsizer.AddButton(btn)
         btnsizer.Realize()
-        
-        sizer.Add(item = btnsizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        
+
+        sizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
+
         self.SetSizer(sizer)
         sizer.Fit(self)
         self.Layout()
@@ -557,13 +629,14 @@ class SavedRegion(wx.Dialog):
 
 class GroupDialog(wx.Dialog):
     """Dialog for creating/editing groups"""
-    def __init__(self, parent = None, defaultGroup = None,  defaultSubgroup = None, 
-                 title = _("Create or edit imagery groups"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
-                     
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title,
-                            style = style, **kwargs)
-                            
+
+    def __init__(self, parent=None, defaultGroup=None, defaultSubgroup=None,
+                 title=_("Create or edit imagery groups"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=title,
+                           style=style, **kwargs)
+
         self.parent = parent
         self.defaultGroup = defaultGroup
         self.defaultSubgroup = defaultSubgroup
@@ -585,18 +658,19 @@ class GroupDialog(wx.Dialog):
         self.flt_pattern = ''
 
         self.bodySizer = self._createDialogBody()
-        
+
         # buttons
-        btnOk = wx.Button(parent = self, id = wx.ID_OK)
-        btnApply = wx.Button(parent = self, id = wx.ID_APPLY)
-        btnClose = wx.Button(parent = self, id = wx.ID_CANCEL)
-        
-        btnOk.SetToolTipString(_("Apply changes to selected group and close dialog"))
+        btnOk = wx.Button(parent=self, id=wx.ID_OK)
+        btnApply = wx.Button(parent=self, id=wx.ID_APPLY)
+        btnClose = wx.Button(parent=self, id=wx.ID_CANCEL)
+
+        btnOk.SetToolTipString(
+            _("Apply changes to selected group and close dialog"))
         btnApply.SetToolTipString(_("Apply changes to selected group"))
         btnClose.SetToolTipString(_("Close dialog, changes are not applied"))
 
-        #btnOk.SetDefault()
-        
+        # btnOk.SetDefault()
+
         # sizers & do layout
         # btnSizer = wx.BoxSizer(wx.HORIZONTAL)
         # btnSizer.Add(item = btnClose, proportion = 0,
@@ -608,20 +682,20 @@ class GroupDialog(wx.Dialog):
         btnSizer.AddButton(btnApply)
         btnSizer.AddButton(btnClose)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = self.bodySizer, proportion = 1,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 10)
-        mainSizer.Add(item = wx.StaticLine(parent = self, id = wx.ID_ANY,
-                      style = wx.LI_HORIZONTAL), proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 10) 
-        
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.ALIGN_RIGHT, border = 10)
+        mainSizer.Add(item=self.bodySizer, proportion=1,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=10)
+        mainSizer.Add(item=wx.StaticLine(parent=self, id=wx.ID_ANY,
+                                         style=wx.LI_HORIZONTAL), proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=10)
+
+        mainSizer.Add(item=btnSizer, proportion=0, flag=wx.LEFT |
+                      wx.RIGHT | wx.BOTTOM | wx.ALIGN_RIGHT, border=10)
 
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
-        
+
         btnOk.Bind(wx.EVT_BUTTON, self.OnOk)
         btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
         btnClose.Bind(wx.EVT_BUTTON, self.OnClose)
@@ -632,7 +706,7 @@ class GroupDialog(wx.Dialog):
 
     def _createDialogBody(self):
         bodySizer = wx.BoxSizer(wx.VERTICAL)
-        #TODO same text in MapLayersDialogBase
+        # TODO same text in MapLayersDialogBase
 
         filter_tooltip = _("Put here a regular expression."
                            " Characters '.*' stand for anything,"
@@ -640,130 +714,164 @@ class GroupDialog(wx.Dialog):
                            " and '$' for the end.")
 
         # group selection
-        bodySizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                           label = _("Select existing group or "
-                                                     "enter name of new group:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.TOP, border = 10)
-        self.groupSelect = Select(parent = self, type = 'group',
-                                  mapsets = [grass.gisenv()['MAPSET']],
-                                  size = globalvar.DIALOG_GSELECT_SIZE,
-                                  fullyQualified = False) # searchpath?
-    
-        bodySizer.Add(item = self.groupSelect, flag = wx.TOP | wx.EXPAND, border = 5)
-
-        self.subg_chbox = wx.CheckBox(parent = self, id = wx.ID_ANY,
-                                      label = _("Edit/create subgroup"))
-
-        bodySizer.Add(item = self.subg_chbox,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.TOP, border = 10)
+        bodySizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                         label=_("Select existing group or "
+                                                 "enter name of new group:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=10)
+        self.groupSelect = Select(parent=self, type='group',
+                                  mapsets=[grass.gisenv()['MAPSET']],
+                                  size=globalvar.DIALOG_GSELECT_SIZE,
+                                  fullyQualified=False)  # searchpath?
+
+        bodySizer.Add(item=self.groupSelect, flag=wx.TOP | wx.EXPAND, border=5)
+
+        self.subg_chbox = wx.CheckBox(parent=self, id=wx.ID_ANY,
+                                      label=_("Edit/create subgroup"))
+
+        bodySizer.Add(item=self.subg_chbox,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=10)
 
         self.subg_panel = wx.Panel(self)
         subg_sizer = wx.BoxSizer(wx.VERTICAL)
 
-        subg_sizer.Add(item = wx.StaticText(parent=self.subg_panel, id = wx.ID_ANY,
-                       label = _("Select existing subgroup or "
-                                 "enter name of new subgroup:")),
-                       flag = wx.ALIGN_CENTER_VERTICAL)
+        subg_sizer.Add(
+            item=wx.StaticText(
+                parent=self.subg_panel,
+                id=wx.ID_ANY,
+                label=_(
+                    "Select existing subgroup or "
+                    "enter name of new subgroup:")),
+            flag=wx.ALIGN_CENTER_VERTICAL)
 
-        self.subGroupSelect = SubGroupSelect(parent = self.subg_panel)
+        self.subGroupSelect = SubGroupSelect(parent=self.subg_panel)
 
-        subg_sizer.Add(item=self.subGroupSelect, flag=wx.EXPAND | wx.TOP, border = 5)
+        subg_sizer.Add(
+            item=self.subGroupSelect,
+            flag=wx.EXPAND | wx.TOP,
+            border=5)
 
         self.subg_panel.SetSizer(subg_sizer)
 
-        bodySizer.Add(item = self.subg_panel, flag = wx.TOP | wx.EXPAND, border = 5)
-        
+        bodySizer.Add(item=self.subg_panel, flag=wx.TOP | wx.EXPAND, border=5)
+
         bodySizer.AddSpacer(10)
 
         buttonSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # layers in group
         self.gListPanel = wx.Panel(self)
 
-        gListSizer  = wx.GridBagSizer(vgap=3, hgap=2)
+        gListSizer = wx.GridBagSizer(vgap=3, hgap=2)
 
         self.g_sel_all = wx.CheckBox(parent=self.gListPanel, id=wx.ID_ANY,
-                                  label=_("Select all"))
+                                     label=_("Select all"))
 
         gListSizer.Add(item=self.g_sel_all,
                        flag=wx.ALIGN_CENTER_VERTICAL,
-                       pos=(0,1))
+                       pos=(0, 1))
+
+        gListSizer.Add(
+            item=wx.StaticText(
+                parent=self.gListPanel,
+                label=_("Pattern:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                1,
+                0))
 
-        gListSizer.Add(item = wx.StaticText(parent = self.gListPanel, label = _("Pattern:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1,0))
-        
         self.gfilter = wx.TextCtrl(parent=self.gListPanel, id=wx.ID_ANY,
-                                  value="",
-                                  size=(250,-1))
+                                   value="",
+                                   size=(250, -1))
         self.gfilter.SetToolTipString(filter_tooltip)
-        
 
         gListSizer.Add(item=self.gfilter,
                        flag=wx.EXPAND,
-                       pos=(1,1))
-
-        gListSizer.Add(item = wx.StaticText(parent = self.gListPanel, 
-                                           label = _("List of maps:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border = 5, pos=(2,0))
+                       pos=(1, 1))
+
+        gListSizer.Add(
+            item=wx.StaticText(
+                parent=self.gListPanel,
+                label=_("List of maps:")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM,
+            border=5,
+            pos=(
+                2,
+                0))
 
         sizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        self.gLayerBox = wx.ListBox(parent = self.gListPanel,  id = wx.ID_ANY, size = (-1, 150),
-                                   style = wx.LB_MULTIPLE | wx.LB_NEEDED_SB)
-        sizer.Add(item = self.gLayerBox, proportion = 1, flag = wx.EXPAND)
-        
-        self.addLayer = wx.Button(self.gListPanel, id = wx.ID_ADD)
-        self.addLayer.SetToolTipString(_("Select map layers and add them to the list."))
-        buttonSizer.Add(item = self.addLayer, flag = wx.BOTTOM, border = 10)
-        
-        self.removeLayer = wx.Button(self.gListPanel, id = wx.ID_REMOVE)
-        self.removeLayer.SetToolTipString(_("Remove selected layer(s) from list."))
-        buttonSizer.Add(item = self.removeLayer)
-        sizer.Add(item = buttonSizer, flag = wx.LEFT, border = 5)
-        
-        gListSizer.Add(item=sizer, flag=wx.EXPAND, pos=(2,1))
+        self.gLayerBox = wx.ListBox(
+            parent=self.gListPanel, id=wx.ID_ANY, size=(-1, 150),
+            style=wx.LB_MULTIPLE | wx.LB_NEEDED_SB)
+        sizer.Add(item=self.gLayerBox, proportion=1, flag=wx.EXPAND)
+
+        self.addLayer = wx.Button(self.gListPanel, id=wx.ID_ADD)
+        self.addLayer.SetToolTipString(
+            _("Select map layers and add them to the list."))
+        buttonSizer.Add(item=self.addLayer, flag=wx.BOTTOM, border=10)
+
+        self.removeLayer = wx.Button(self.gListPanel, id=wx.ID_REMOVE)
+        self.removeLayer.SetToolTipString(
+            _("Remove selected layer(s) from list."))
+        buttonSizer.Add(item=self.removeLayer)
+        sizer.Add(item=buttonSizer, flag=wx.LEFT, border=5)
+
+        gListSizer.Add(item=sizer, flag=wx.EXPAND, pos=(2, 1))
         gListSizer.AddGrowableCol(1)
         gListSizer.AddGrowableRow(2)
 
         self.gListPanel.SetSizer(gListSizer)
         bodySizer.Add(item=self.gListPanel, proportion=1, flag=wx.EXPAND)
-        
+
         # layers in subgroup
         self.subgListPanel = wx.Panel(self)
 
-        subgListSizer  = wx.GridBagSizer(vgap=3, hgap=2)
+        subgListSizer = wx.GridBagSizer(vgap=3, hgap=2)
 
         # select toggle
-        self.subg_sel_all = wx.CheckBox(parent=self.subgListPanel, id=wx.ID_ANY,
-                                  label=_("Select all"))
+        self.subg_sel_all = wx.CheckBox(
+            parent=self.subgListPanel,
+            id=wx.ID_ANY,
+            label=_("Select all"))
 
         subgListSizer.Add(item=self.subg_sel_all,
                           flag=wx.ALIGN_CENTER_VERTICAL,
-                          pos=(0,1))
+                          pos=(0, 1))
+
+        subgListSizer.Add(
+            item=wx.StaticText(
+                parent=self.subgListPanel,
+                label=_("Pattern:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                1,
+                0))
 
-        subgListSizer.Add(item = wx.StaticText(parent=self.subgListPanel, label=_("Pattern:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1,0))
-        
         self.subgfilter = wx.TextCtrl(parent=self.subgListPanel, id=wx.ID_ANY,
-                                  value="",
-                                  size=(250,-1))
+                                      value="",
+                                      size=(250, -1))
         self.subgfilter.SetToolTipString(filter_tooltip)
-        
-        subgListSizer.Add(item=self.subgfilter,
-                      flag=wx.EXPAND,
-                      pos=(1,1))
-
-        subgListSizer.Add(item = wx.StaticText(parent = self.subgListPanel, 
-                                           label = _("List of maps:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM, border = 5, pos=(2,0))
-
-        self.subgListBox = wx.CheckListBox(parent = self.subgListPanel, id = wx.ID_ANY,
-                                           size = (250, 100))
-        self.subgListBox.SetToolTipString(_("Check maps from group to be included into subgroup."))
 
-        subgListSizer.Add(item=self.subgListBox, flag=wx.EXPAND, pos=(2,1))
+        subgListSizer.Add(item=self.subgfilter,
+                          flag=wx.EXPAND,
+                          pos=(1, 1))
+
+        subgListSizer.Add(
+            item=wx.StaticText(
+                parent=self.subgListPanel,
+                label=_("List of maps:")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM,
+            border=5,
+            pos=(
+                2,
+                0))
+
+        self.subgListBox = wx.CheckListBox(
+            parent=self.subgListPanel, id=wx.ID_ANY, size=(250, 100))
+        self.subgListBox.SetToolTipString(
+            _("Check maps from group to be included into subgroup."))
+
+        subgListSizer.Add(item=self.subgListBox, flag=wx.EXPAND, pos=(2, 1))
         subgListSizer.AddGrowableCol(1)
         subgListSizer.AddGrowableRow(2)
 
@@ -771,8 +879,10 @@ class GroupDialog(wx.Dialog):
         bodySizer.Add(item=self.subgListPanel, proportion=1, flag=wx.EXPAND)
 
         self.infoLabel = wx.StaticText(parent=self, id=wx.ID_ANY)
-        bodySizer.Add(item = self.infoLabel, 
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM, border = 5)
+        bodySizer.Add(
+            item=self.infoLabel,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP | wx.BOTTOM,
+            border=5)
 
         # bindings
         self.gfilter.Bind(wx.EVT_TEXT, self.OnGroupFilter)
@@ -783,13 +893,14 @@ class GroupDialog(wx.Dialog):
         self.addLayer.Bind(wx.EVT_BUTTON, self.OnAddLayer)
         self.removeLayer.Bind(wx.EVT_BUTTON, self.OnRemoveLayer)
         self.subg_chbox.Bind(wx.EVT_CHECKBOX, self.OnSubgChbox)
-        self.subGroupSelect.Bind(wx.EVT_TEXT, lambda event : self.SubGroupSelected())
+        self.subGroupSelect.Bind(
+            wx.EVT_TEXT, lambda event: self.SubGroupSelected())
         self.subg_sel_all.Bind(wx.EVT_CHECKBOX, self.OnSubgSelAll)
         self.g_sel_all.Bind(wx.EVT_CHECKBOX, self.OnGSelAll)
 
         if self.defaultGroup:
             self.groupSelect.SetValue(self.defaultGroup)
-        
+
         if self.defaultSubgroup is not None:
             self.subGroupSelect.SetValue(self.defaultSubgroup)
             self.subg_chbox.SetValue(1)
@@ -797,7 +908,7 @@ class GroupDialog(wx.Dialog):
         else:
             self.subg_chbox.SetValue(0)
             self.SubgChbox(False)
-        
+
         return bodySizer
 
     def OnGLayerCheck(self, event):
@@ -839,13 +950,13 @@ class GroupDialog(wx.Dialog):
             for item in range(self.subgListBox.GetCount()):
                 if not self.subgListBox.IsChecked(item):
                     not_all_checked = True
-        
+
         self.subg_sel_all.SetValue(not not_all_checked)
 
     def OnSubgroupFilter(self, event):
         text = event.GetString()
         self.gfilter.ChangeValue(text)
-        self.flt_pattern = text 
+        self.flt_pattern = text
 
         self.FilterGroup()
         self.FilterSubgroup()
@@ -876,8 +987,8 @@ class GroupDialog(wx.Dialog):
         self.dataChanged = val
 
     def DisableSubgroupEdit(self):
-        """Disable editation of subgroups in the dialog 
-        
+        """Disable editation of subgroups in the dialog
+
         .. todo::
             used by gcp manager, maybe the gcp m should also support subgroups
         """
@@ -887,7 +998,7 @@ class GroupDialog(wx.Dialog):
         self.subgListBox.Hide()
 
         self.Layout()
-    
+
     def OnSubgChbox(self, event):
         edit_subg = self.subg_chbox.GetValue()
         self.SubgChbox(edit_subg)
@@ -921,19 +1032,19 @@ class GroupDialog(wx.Dialog):
 
     def OnAddLayer(self, event):
         """Add new layer to listbox"""
-        dlg = MapLayersDialogForGroups(parent = self, title = _("Add selected map layers into group"))
-        
+        dlg = MapLayersDialogForGroups(
+            parent=self, title=_("Add selected map layers into group"))
+
         if dlg.ShowModal() != wx.ID_OK:
             dlg.Destroy()
             return
-        
+
         layers = dlg.GetMapLayers()
         for layer in layers:
             if layer not in self.gmaps:
                 self.gLayerBox.Append(layer)
                 self.gmaps.append(layer)
                 self.dataChanged = True
-            
 
     def OnRemoveLayer(self, event):
         """Remove layer from listbox"""
@@ -943,7 +1054,7 @@ class GroupDialog(wx.Dialog):
             self.gLayerBox.Delete(sel)
             self.gmaps.remove(m)
             self.dataChanged = True
-                
+
     def GetLayers(self):
         """Get layers"""
         if self.edit_subg:
@@ -955,7 +1066,7 @@ class GroupDialog(wx.Dialog):
             layers = self.gmaps[:]
 
         return layers
-        
+
     def OnGroupSelected(self, event):
         """Text changed in group selector"""
         # callAfter must be called to close popup before other actions
@@ -969,9 +1080,9 @@ class GroupDialog(wx.Dialog):
         groups = self.GetExistGroups()
         if group in groups:
             maps = self.GetGroupLayers(group)
-        
+
         self.subGroupSelect.Insert(group)
-        
+
         self.gmaps = maps
         maps = self._filter(maps)
 
@@ -1004,7 +1115,7 @@ class GroupDialog(wx.Dialog):
 
         subgroup = self.subGroupSelect.GetValue().strip()
         group = self.currentGroup
-        
+
         gmaps = list()
         groups = self.GetExistGroups()
 
@@ -1023,7 +1134,7 @@ class GroupDialog(wx.Dialog):
         self.subgListBox.Set(gmaps)
 
         for i, m in enumerate(gmaps):
-            if self.subgmaps.has_key(m):
+            if m in self.subgmaps:
                 self.subgListBox.Check(i)
             else:
                 self.subgListBox.Check(i, False)
@@ -1038,7 +1149,7 @@ class GroupDialog(wx.Dialog):
         if len(self.flt_pattern) == 0:
             flt_data = data[:]
             return flt_data
-        
+
         for dt in data:
             try:
                 if re.compile(self.flt_pattern).search(dt):
@@ -1055,48 +1166,56 @@ class GroupDialog(wx.Dialog):
             self._checkGroupChange()
 
     def _checkGroupChange(self):
-        if  self.currentGroup and self.dataChanged:
-            dlg = wx.MessageDialog(self, message = _("Group <%s> was changed, "
-                                                     "do you want to apply changes?") % self.currentGroup,
-                                   caption = _("Unapplied changes"),
-                                   style = wx.YES_NO | wx.ICON_QUESTION | wx.YES_DEFAULT)
+        if self.currentGroup and self.dataChanged:
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Group <%s> was changed, "
+                    "do you want to apply changes?") %
+                self.currentGroup,
+                caption=_("Unapplied changes"),
+                style=wx.YES_NO | wx.ICON_QUESTION | wx.YES_DEFAULT)
             if dlg.ShowModal() == wx.ID_YES:
                 self.ApplyChanges()
-                
+
             dlg.Destroy()
         self.dataChanged = False
 
     def _checkSubgroupChange(self):
         if self.currentSubgroup and self.dataChanged:
-            dlg = wx.MessageDialog(self, message = _("Subgroup <%s> was changed, "
-                                                     "do you want to apply changes?") % self.currentSubgroup,
-                                   caption = _("Unapplied changes"),
-                                   style = wx.YES_NO | wx.ICON_QUESTION | wx.YES_DEFAULT)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Subgroup <%s> was changed, "
+                    "do you want to apply changes?") %
+                self.currentSubgroup,
+                caption=_("Unapplied changes"),
+                style=wx.YES_NO | wx.ICON_QUESTION | wx.YES_DEFAULT)
             if dlg.ShowModal() == wx.ID_YES:
                 self.ApplyChanges()
-                
+
             dlg.Destroy()
         self.dataChanged = False
 
     def ShowGroupLayers(self, mapList):
         """Show map layers in currently selected group"""
         self.gLayerBox.Set(mapList)
-                
+
     def EditGroup(self, group, subgroup=None):
         """Edit selected group"""
         layersNew = self.GetLayers()
         layersOld = self.GetGroupLayers(group, subgroup)
-        
+
         add = []
         remove = []
         for layerNew in layersNew:
             if layerNew not in layersOld:
                 add.append(layerNew)
-                
+
         for layerOld in layersOld:
             if layerOld not in layersNew:
                 remove.append(layerOld)
-                
+
         kwargs = {}
         if subgroup:
             kwargs["subgroup"] = subgroup
@@ -1104,39 +1223,39 @@ class GroupDialog(wx.Dialog):
         ret = None
         if remove:
             ret = RunCommand('i.group',
-                             parent = self,
-                             group = group,
-                             flags = 'r',
-                             input = ','.join(remove),
+                             parent=self,
+                             group=group,
+                             flags='r',
+                             input=','.join(remove),
                              **kwargs)
-                        
+
         if add:
             ret = RunCommand('i.group',
-                             parent = self,
-                             group = group,
-                             input = ','.join(add),
+                             parent=self,
+                             group=group,
+                             input=','.join(add),
                              **kwargs)
-                            
+
         return ret
-        
+
     def CreateNewGroup(self, group, subgroup):
         """Create new group"""
         layers = self.GetLayers()
         if not layers:
-            GMessage(parent = self,
-                     message = _("No raster maps selected."))
+            GMessage(parent=self,
+                     message=_("No raster maps selected."))
             return 1
-        
+
         kwargs = {}
         if subgroup:
             kwargs["subgroup"] = subgroup
 
         ret = RunCommand('i.group',
-                          parent = self,
-                          group = group,
-                          input = layers,
-                          **kwargs)
-        #update subgroup select
+                         parent=self,
+                         group=group,
+                         input=layers,
+                         **kwargs)
+        # update subgroup select
         self.SubGroupSelected()
         return ret
 
@@ -1147,8 +1266,8 @@ class GroupDialog(wx.Dialog):
     def GetExistSubgroups(self, group):
         """Returns existing subgroups in a group"""
         return RunCommand('i.group', group=group,
-                           read=True, flags='sg').splitlines()
-        
+                          read=True, flags='sg').splitlines()
+
     def ShowResult(self, group, returnCode, create):
         """Show if operation was successfull."""
         group += '@' + grass.gisenv()['MAPSET']
@@ -1164,15 +1283,15 @@ class GroupDialog(wx.Dialog):
                 label = _("Creating of new group <%s> failed.") % group
             else:
                 label = _("Changing of group <%s> failed.") % group
-            
+
         self.infoLabel.SetLabel(label)
         wx.FutureCall(4000, self.ClearNotification)
-        
+
     def GetSelectedGroup(self):
         """Return currently selected group (without mapset)"""
         g = self.groupSelect.GetValue().split('@')[0]
         if self.edit_subg:
-            s = self.subGroupSelect.GetValue() 
+            s = self.subGroupSelect.GetValue()
         else:
             s = None
         return g, s
@@ -1185,31 +1304,30 @@ class GroupDialog(wx.Dialog):
             kwargs['subgroup'] = subgroup
 
         res = RunCommand('i.group',
-                         parent = self,
-                         flags = 'g',
-                         read = True, **kwargs)
+                         parent=self,
+                         flags='g',
+                         read=True, **kwargs)
         if not res:
             return []
         return res.splitlines()
-    
+
     def ClearNotification(self):
         """Clear notification string"""
         self.infoLabel.SetLabel("")
-       
+
     def ApplyChanges(self):
         """Create or edit group"""
         group = self.currentGroup
         if not group:
-            GMessage(parent = self,
-                     message = _("No group selected."))
+            GMessage(parent=self,
+                     message=_("No group selected."))
             return False
 
-
         if self.edit_subg and not self.currentSubgroup:
-            GMessage(parent = self,
-                     message = _("No subgroup selected."))
+            GMessage(parent=self,
+                     message=_("No subgroup selected."))
             return 0
-        
+
         if self.edit_subg:
             subgroup = self.currentSubgroup
         else:
@@ -1218,75 +1336,78 @@ class GroupDialog(wx.Dialog):
         groups = self.GetExistGroups()
         if group in groups:
             ret = self.EditGroup(group, subgroup)
-            self.ShowResult(group = group, returnCode = ret, create = False)
-            
+            self.ShowResult(group=group, returnCode=ret, create=False)
+
         else:
             ret = self.CreateNewGroup(group, subgroup)
-            self.ShowResult(group = group, returnCode = ret, create = True)
-            
+            self.ShowResult(group=group, returnCode=ret, create=True)
+
         self.dataChanged = False
-        
+
         return True
-        
+
     def OnApply(self, event):
         """Apply changes"""
         self.ApplyChanges()
-        
+
     def OnOk(self, event):
         """Apply changes and close dialog"""
         if self.ApplyChanges():
             self.OnClose(event)
-        
+
     def OnClose(self, event):
         """Close dialog"""
         if not self.IsModal():
             self.Destroy()
         event.Skip()
-        
+
+
 class MapLayersDialogBase(wx.Dialog):
     """Base dialog for selecting map layers (raster, vector).
 
     There are 3 subclasses: MapLayersDialogForGroups, MapLayersDialogForModeler,
     MapLayersDialog. Base class contains core functionality.
     """
-    def __init__(self, parent, title, 
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title,
-                           style = style, **kwargs)
-        
-        self.parent = parent # GMFrame or ?
-        
-        self.applyAddingMapLayers = Signal('MapLayersDialogBase.applyAddingMapLayers')
-        
+
+    def __init__(self, parent, title,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=title,
+                           style=style, **kwargs)
+
+        self.parent = parent  # GMFrame or ?
+
+        self.applyAddingMapLayers = Signal(
+            'MapLayersDialogBase.applyAddingMapLayers')
+
         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # dialog body
         self.bodySizer = self._createDialogBody()
-        self.mainSizer.Add(item = self.bodySizer, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        
+        self.mainSizer.Add(item=self.bodySizer, proportion=1,
+                           flag=wx.EXPAND | wx.ALL, border=5)
+
         # update list of layer to be loaded
-        self.map_layers = [] # list of map layers (full list type/mapset)
-        self.LoadMapLayers(self.GetLayerType(cmd = True),
+        self.map_layers = []  # list of map layers (full list type/mapset)
+        self.LoadMapLayers(self.GetLayerType(cmd=True),
                            self.mapset.GetStringSelection())
 
         self._fullyQualifiedNames()
         self._modelerDSeries()
 
         # buttons
-        btnCancel = wx.Button(parent = self, id = wx.ID_CANCEL)
-        btnOk = wx.Button(parent = self, id = wx.ID_OK)
+        btnCancel = wx.Button(parent=self, id=wx.ID_CANCEL)
+        btnOk = wx.Button(parent=self, id=wx.ID_OK)
         btnOk.SetDefault()
-        
+
         # sizers & do layout
         self.btnSizer = wx.StdDialogButtonSizer()
         self.btnSizer.AddButton(btnCancel)
         self.btnSizer.AddButton(btnOk)
         self._addApplyButton()
         self.btnSizer.Realize()
-        
-        self.mainSizer.Add(item = self.btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
+
+        self.mainSizer.Add(item=self.btnSizer, proportion=0,
+                           flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
 
         self.SetSizer(self.mainSizer)
         self.mainSizer.Fit(self)
@@ -1309,11 +1430,12 @@ class MapLayersDialogBase(wx.Dialog):
     def _fullyQualifiedNames(self):
         """Adds CheckBox which determines is fully qualified names are retuned.
         """
-        self.fullyQualified = wx.CheckBox(parent = self, id = wx.ID_ANY,
-                                           label = _("Use fully-qualified map names"))
+        self.fullyQualified = wx.CheckBox(
+            parent=self, id=wx.ID_ANY,
+            label=_("Use fully-qualified map names"))
         self.fullyQualified.SetValue(True)
-        self.mainSizer.Add(item = self.fullyQualified, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 5)
+        self.mainSizer.Add(item=self.fullyQualified, proportion=0,
+                           flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
 
     def _useFullyQualifiedNames(self):
         return self.fullyQualified.IsChecked()
@@ -1333,79 +1455,86 @@ class MapLayersDialogBase(wx.Dialog):
         return True
 
     def _createDialogBody(self):
-        bodySizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        bodySizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # layer type
-        bodySizer.Add(item = wx.StaticText(parent = self, label = _("Map type:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0,0))
-        
-        self.layerType = wx.Choice(parent = self, id = wx.ID_ANY,
-                                   choices = self._layerTypes(), size = (100,-1))
+        bodySizer.Add(item=wx.StaticText(parent=self, label=_("Map type:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 0))
+
+        self.layerType = wx.Choice(parent=self, id=wx.ID_ANY,
+                                   choices=self._layerTypes(), size=(100, -1))
 
         self.layerType.SetSelection(0)
-            
-        bodySizer.Add(item = self.layerType,
-                           pos = (0,1))
+
+        bodySizer.Add(item=self.layerType,
+                      pos=(0, 1))
         self.layerType.Bind(wx.EVT_CHOICE, self.OnChangeParams)
 
         # select toggle
-        self.toggle = wx.CheckBox(parent = self, id = wx.ID_ANY,
-                                  label = _("Select toggle"))
+        self.toggle = wx.CheckBox(parent=self, id=wx.ID_ANY,
+                                  label=_("Select toggle"))
         self.toggle.SetValue(self._selectAll())
-        bodySizer.Add(item = self.toggle,
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0,2))
-        
+        bodySizer.Add(item=self.toggle,
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 2))
+
         # mapset filter
-        bodySizer.Add(item = wx.StaticText(parent = self, label = _("Mapset:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1,0))
-        
-        self.mapset = MapsetSelect(parent = self, searchPath = True)
+        bodySizer.Add(item=wx.StaticText(parent=self, label=_("Mapset:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(1, 0))
+
+        self.mapset = MapsetSelect(parent=self, searchPath=True)
         self.mapset.SetStringSelection(grass.gisenv()['MAPSET'])
-        bodySizer.Add(item = self.mapset,
-                      pos = (1,1), span = (1, 2))
-        
+        bodySizer.Add(item=self.mapset,
+                      pos=(1, 1), span=(1, 2))
+
         # map name filter
-        bodySizer.Add(item = wx.StaticText(parent = self, label = _("Pattern:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2,0))
-        
-        self.filter = wx.TextCtrl(parent = self, id = wx.ID_ANY,
-                                  value = "",
-                                  size = (250,-1))
-        bodySizer.Add(item = self.filter,
-                      flag = wx.EXPAND,
-                      pos = (2,1), span = (1, 2))
+        bodySizer.Add(item=wx.StaticText(parent=self, label=_("Pattern:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 0))
+
+        self.filter = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                                  value="",
+                                  size=(250, -1))
+        bodySizer.Add(item=self.filter,
+                      flag=wx.EXPAND,
+                      pos=(2, 1), span=(1, 2))
 
         self.filter.SetFocus()
-        #TODO same text in GroupDialog
-        self.filter.SetToolTipString(_("Put here a regular expression."
-                                       " Characters '.*' stand for anything,"
-                                       " character '^' stands for the beginning"
-                                       " and '$' for the end."))
-
-        # layer list 
-        bodySizer.Add(item = wx.StaticText(parent = self, label = _("List of maps:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_TOP,
-                      pos = (3,0))
-        self.layers = wx.CheckListBox(parent = self, id = wx.ID_ANY,
-                                      size = (250, 100),
-                                      choices = [])
-        bodySizer.Add(item = self.layers,
-                      flag = wx.EXPAND,
-                      pos = (3,1), span = (1, 2))
-        
+        # TODO same text in GroupDialog
+        self.filter.SetToolTipString(
+            _(
+                "Put here a regular expression."
+                " Characters '.*' stand for anything,"
+                " character '^' stands for the beginning"
+                " and '$' for the end."))
+
+        # layer list
+        bodySizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                label=_("List of maps:")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_TOP,
+            pos=(
+                3,
+                0))
+        self.layers = wx.CheckListBox(parent=self, id=wx.ID_ANY,
+                                      size=(250, 100),
+                                      choices=[])
+        bodySizer.Add(item=self.layers,
+                      flag=wx.EXPAND,
+                      pos=(3, 1), span=(1, 2))
+
         bodySizer.AddGrowableCol(1)
         bodySizer.AddGrowableRow(3)
-        
+
         # bindings
         self.mapset.Bind(wx.EVT_TEXT, self.OnChangeParams)
         self.layers.Bind(wx.EVT_RIGHT_DOWN, self.OnMenu)
         self.filter.Bind(wx.EVT_TEXT, self.OnFilter)
         self.toggle.Bind(wx.EVT_CHECKBOX, self.OnToggle)
-        
+
         return bodySizer
 
     def LoadMapLayers(self, type, mapset):
@@ -1414,22 +1543,22 @@ class MapLayersDialogBase(wx.Dialog):
         :param str type: layer type ('raster' or 'vector')
         :param str mapset: mapset name
         """
-        self.map_layers = grass.list_grouped(type = type)[mapset]
+        self.map_layers = grass.list_grouped(type=type)[mapset]
         self.layers.Set(natural_sort(self.map_layers))
-        
+
         # check all items by default
         for item in range(self.layers.GetCount()):
-            
-            self.layers.Check(item, check = self._selectAll())
-        
+
+            self.layers.Check(item, check=self._selectAll())
+
     def OnChangeParams(self, event):
         """Filter parameters changed by user"""
         # update list of layer to be loaded
-        self.LoadMapLayers(self.GetLayerType(cmd = True),
+        self.LoadMapLayers(self.GetLayerType(cmd=True),
                            self.mapset.GetStringSelection())
-        
+
         event.Skip()
-        
+
     def OnMenu(self, event):
         """Table description area, context menu"""
         if not hasattr(self, "popupID1"):
@@ -1437,16 +1566,16 @@ class MapLayersDialogBase(wx.Dialog):
             self.popupDataID2 = wx.NewId()
             self.popupDataID3 = wx.NewId()
 
-            self.Bind(wx.EVT_MENU, self.OnSelectAll,    id = self.popupDataID1)
-            self.Bind(wx.EVT_MENU, self.OnSelectInvert, id = self.popupDataID2)
-            self.Bind(wx.EVT_MENU, self.OnDeselectAll,  id = self.popupDataID3)
-        
+            self.Bind(wx.EVT_MENU, self.OnSelectAll, id=self.popupDataID1)
+            self.Bind(wx.EVT_MENU, self.OnSelectInvert, id=self.popupDataID2)
+            self.Bind(wx.EVT_MENU, self.OnDeselectAll, id=self.popupDataID3)
+
         # generate popup-menu
         menu = wx.Menu()
         menu.Append(self.popupDataID1, _("Select all"))
         menu.Append(self.popupDataID2, _("Invert selection"))
         menu.Append(self.popupDataID3, _("Deselect all"))
-        
+
         self.PopupMenu(menu)
         menu.Destroy()
 
@@ -1454,7 +1583,7 @@ class MapLayersDialogBase(wx.Dialog):
         """Select all map layer from list"""
         for item in range(self.layers.GetCount()):
             self.layers.Check(item, True)
-        
+
     def OnSelectInvert(self, event):
         """Invert current selection"""
         for item in range(self.layers.GetCount()):
@@ -1462,18 +1591,18 @@ class MapLayersDialogBase(wx.Dialog):
                 self.layers.Check(item, False)
             else:
                 self.layers.Check(item, True)
-        
+
     def OnDeselectAll(self, event):
         """Select all map layer from list"""
         for item in range(self.layers.GetCount()):
             self.layers.Check(item, False)
-        
+
     def OnFilter(self, event):
         """Apply filter for map names"""
         if len(event.GetString()) == 0:
-            self.layers.Set(self.map_layers) 
-            return 
-        
+            self.layers.Set(self.map_layers)
+            return
+
         list = []
         for layer in self.map_layers:
             try:
@@ -1485,17 +1614,17 @@ class MapLayersDialogBase(wx.Dialog):
 
         self.layers.Set(list)
         self.OnSelectAll(None)
-        
+
         event.Skip()
-        
+
     def OnToggle(self, event):
         """Select toggle (check or uncheck all layers)"""
         check = event.Checked()
         for item in range(self.layers.GetCount()):
             self.layers.Check(item, check)
-        
+
         event.Skip()
-        
+
     def GetMapLayers(self):
         """Return list of checked map layers"""
         layerNames = []
@@ -1511,17 +1640,17 @@ class MapLayersDialogBase(wx.Dialog):
                 layerNames.append(self.layers.GetString(item) + '@' + mapset)
             else:
                 layerNames.append(self.layers.GetString(item))
-        
+
         return layerNames
-    
-    def GetLayerType(self, cmd = False):
+
+    def GetLayerType(self, cmd=False):
         """Get selected layer type
 
         :param bool cmd: True for g.list
         """
         if not cmd:
             return self.layerType.GetStringSelection()
-        
+
         sel = self.layerType.GetSelection()
         if sel == 0:
             ltype = 'raster'
@@ -1529,36 +1658,42 @@ class MapLayersDialogBase(wx.Dialog):
             ltype = 'raster_3d'
         else:
             ltype = 'vector'
-        
+
         return ltype
 
+
 class MapLayersDialog(MapLayersDialogBase):
-    """Subclass of MapLayersDialogBase used in Layer Manager. 
+    """Subclass of MapLayersDialogBase used in Layer Manager.
 
     Contains apply button, which sends wxApplyMapLayers event.
     """
+
     def __init__(self, parent, title, **kwargs):
-        MapLayersDialogBase.__init__(self, parent = parent, title = title, **kwargs)
+        MapLayersDialogBase.__init__(
+            self, parent=parent, title=title, **kwargs)
 
     def _addApplyButton(self):
-        btnApply = wx.Button(parent = self, id = wx.ID_APPLY)
+        btnApply = wx.Button(parent=self, id=wx.ID_APPLY)
         self.btnSizer.AddButton(btnApply)
         btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
 
     def OnApply(self, event):
-        self.applyAddingMapLayers.emit(mapLayers = self.GetMapLayers(),
-                                       ltype = self.GetLayerType(cmd = True))
+        self.applyAddingMapLayers.emit(mapLayers=self.GetMapLayers(),
+                                       ltype=self.GetLayerType(cmd=True))
+
 
 class MapLayersDialogForGroups(MapLayersDialogBase):
-    """Subclass of MapLayersDialogBase used for specyfying maps in an imagery group. 
+    """Subclass of MapLayersDialogBase used for specyfying maps in an imagery group.
 
     Shows only raster maps.
     """
+
     def __init__(self, parent, title, **kwargs):
-        MapLayersDialogBase.__init__(self, parent = parent, title = title, **kwargs)
+        MapLayersDialogBase.__init__(
+            self, parent=parent, title=title, **kwargs)
 
     def _layerTypes(self):
-        return [_('raster'),]
+        return [_('raster'), ]
 
     def _selectAll(self):
         """Could be overriden"""
@@ -1572,17 +1707,19 @@ class MapLayersDialogForGroups(MapLayersDialogBase):
 
 
 class MapLayersDialogForModeler(MapLayersDialogBase):
-    """Subclass of MapLayersDialogBase used in Modeler. 
+    """Subclass of MapLayersDialogBase used in Modeler.
     """
+
     def __init__(self, parent, title, **kwargs):
-        MapLayersDialogBase.__init__(self, parent = parent, title = title, **kwargs)
+        MapLayersDialogBase.__init__(
+            self, parent=parent, title=title, **kwargs)
 
     def _modelerDSeries(self):
-        self.dseries = wx.CheckBox(parent = self, id = wx.ID_ANY,
-                                   label = _("Dynamic series (%s)") % 'g.list')
+        self.dseries = wx.CheckBox(parent=self, id=wx.ID_ANY,
+                                   label=_("Dynamic series (%s)") % 'g.list')
         self.dseries.SetValue(False)
-        self.mainSizer.Add(item = self.dseries, proportion = 0,
-                           flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 5)
+        self.mainSizer.Add(item=self.dseries, proportion=0,
+                           flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
 
     def GetDSeries(self):
         """Used by modeler only
@@ -1591,757 +1728,84 @@ class MapLayersDialogForModeler(MapLayersDialogBase):
         """
         if not self.dseries or not self.dseries.IsChecked():
             return ''
-        
-        cond = 'map in `g.list type=%s ' % self.GetLayerType(cmd = True)
+
+        cond = 'map in `g.list type=%s ' % self.GetLayerType(cmd=True)
         patt = self.filter.GetValue()
         if patt:
             cond += 'pattern=%s ' % patt
         cond += 'mapset=%s`' % self.mapset.GetStringSelection()
-        
-        return cond
 
-    
-class ImportDialog(wx.Dialog):
-    """Dialog for bulk import of various data (base class)"""
-    def __init__(self, parent, giface, itype,
-                 id = wx.ID_ANY, title = _("Multiple import"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
-        self.parent = parent    # GMFrame 
-        self._giface = giface  # used to add layers
-        self.importType = itype
-        self.options = dict()   # list of options
-        self.options_par = dict()
-        
-        self.commandId = -1  # id of running command
-        
-        wx.Dialog.__init__(self, parent, id, title, style = style,
-                           name = "MultiImportDialog")
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.layerBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY)
-        if self.importType == 'gdal':
-            label = _("List of raster layers")
-        elif self.importType == 'ogr':
-            label = _("List of vector layers")
-        else:
-            label = _("List of %s layers") % self.importType.upper()
-        self.layerBox.SetLabel(" %s - %s " % (label, _("right click to (un)select all")))
-        
-        # list of layers
-        columns = [_('Layer id'),
-                   _('Layer name'),
-                   _('Name for output GRASS map (editable)')]
-        if itype == 'ogr':
-            columns.insert(2, _('Feature type'))
-            columns.insert(3, _('Projection match'))
-
-        self.list = LayersList(parent = self.panel, columns = columns)
-        self.list.LoadData()
-
-        self.optionBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                      label = "%s" % _("Options"))
-        
-        cmd = self._getCommand()
-        task = gtask.parse_interface(cmd)
-        for f in task.get_options()['flags']:
-            name = f.get('name', '')
-            desc = f.get('label', '')
-            if not desc:
-                desc = f.get('description', '')
-            if not name and not desc:
-                continue
-            if cmd == 'r.in.gdal' and name not in ('o', 'e', 'l', 'k'):
-                continue
-            elif cmd == 'r.external' and name not in ('o', 'e', 'r', 'h', 'v'):
-                continue
-            elif cmd == 'v.in.ogr' and name not in ('c', 'z', 't', 'o', 'r', 'e', 'w'):
-                continue
-            elif cmd == 'v.external' and name not in ('b'):
-                continue
-            elif cmd == 'v.in.dxf' and name not in ('e', 't', 'b', 'f', 'i'):
-                continue
-            self.options[name] = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                             label = desc)
-        
-        for p in task.get_options()['params']:
-            name = p.get('name', '')
-            desc = p.get('label', '')
-            if not desc:
-                desc = p.get('description', '')
-            if not name and not desc:
-                continue
-            if cmd == 'v.in.ogr' and name == 'encoding':
-                self.options_par[name] = (_('Encoding'),
-                                          wx.TextCtrl(parent = self.panel, id = wx.ID_ANY))
-        
-        self.overwrite = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                     label = _("Allow output files to overwrite existing files"))
-        self.overwrite.SetValue(UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'))
-        
-        self.add = wx.CheckBox(parent = self.panel, id = wx.ID_ANY)
-        self.closeOnFinish = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                     label = _("Close dialog on finish"))
-        self.closeOnFinish.SetValue(UserSettings.Get(group = 'cmd', key = 'closeDlg', subkey = 'enabled'))
-        
-        #
-        # buttons
-        #
-        # cancel
-        self.btn_close = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
-        self.btn_close.SetToolTipString(_("Close dialog"))
-        self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
-        # run
-        self.btn_run = wx.Button(parent = self.panel, id = wx.ID_OK, label = _("&Import"))
-        self.btn_run.SetToolTipString(_("Import selected layers"))
-        self.btn_run.SetDefault()
-        self.btn_run.Bind(wx.EVT_BUTTON, self.OnRun)
-
-        self.Bind(wx.EVT_CLOSE, lambda evt: self.Destroy())
-        
-    def doLayout(self):
-        """Do layout"""
-        dialogSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        # dsn input
-        dialogSizer.Add(item = self.dsnInput, proportion = 0,
-                        flag = wx.EXPAND)
-        
-        #
-        # list of DXF layers
-        #
-        layerSizer = wx.StaticBoxSizer(self.layerBox, wx.HORIZONTAL)
-
-        layerSizer.Add(item = self.list, proportion = 1,
-                      flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        dialogSizer.Add(item = layerSizer, proportion = 1,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-
-        # options
-        optionSizer = wx.StaticBoxSizer(self.optionBox, wx.VERTICAL)
-        for key in self.options.keys():
-            optionSizer.Add(item = self.options[key], proportion = 0)
-        if self.options_par:
-            gridBox = wx.GridBagSizer(vgap = 5, hgap = 5)
-            row = 0
-            for label, win in self.options_par.itervalues():
-                gridBox.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                 label = label + ':'),
-                            pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-                gridBox.Add(item = win, pos = (row, 1), flag = wx.EXPAND)
-                row += 1
-            
-            gridBox.AddGrowableCol(1)
-            optionSizer.Add(item = gridBox, proportion = 0,
-                            flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        
-        dialogSizer.Add(item = optionSizer, proportion = 0,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        
-        dialogSizer.Add(item = self.overwrite, proportion = 0,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        
-        dialogSizer.Add(item = self.add, proportion = 0,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        
-        dialogSizer.Add(item = self.closeOnFinish, proportion = 0,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        #
-        # buttons
-        #
-        btnsizer = wx.BoxSizer(orient = wx.HORIZONTAL)
-        
-        btnsizer.Add(item = self.btn_close, proportion = 0,
-                     flag = wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER,
-                     border = 10)
-        
-        btnsizer.Add(item = self.btn_run, proportion = 0,
-                     flag = wx.RIGHT | wx.ALIGN_CENTER,
-                     border = 10)
-        
-        dialogSizer.Add(item = btnsizer, proportion = 0,
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.ALIGN_RIGHT,
-                        border = 10)
-        
-        # dialogSizer.SetSizeHints(self.panel)
-        self.panel.SetAutoLayout(True)
-        self.panel.SetSizer(dialogSizer)
-        dialogSizer.Fit(self.panel)
-        
-        # auto-layout seems not work here - FIXME
-        size = wx.Size(globalvar.DIALOG_GSELECT_SIZE[0] + 225, 550)
-        self.SetMinSize(size)
-        self.SetSize((size.width, size.height + 100))
-        # width = self.GetSize()[0]
-        # self.list.SetColumnWidth(col = 1, width = width / 2 - 50)
-        self.Layout()
-
-    def _getCommand(self):
-        """Get command"""
-        return ''
-    
-    def OnClose(self, event = None):
-        """Close dialog"""
-        self.Close()
-
-    def OnRun(self, event):
-        """Import/Link data (each layes as separate vector map)"""
-        pass
-
-    def AddLayers(self, returncode, cmd = None, userData = None):
-        """Add imported/linked layers into layer tree"""
-        if not self.add.IsChecked() or returncode != 0:
-            return
-
-        # TODO: if importing map creates more map the folowing does not work
-        # * do nothing if map does not exist or
-        # * try to determine names using regexp or
-        # * persuade import tools to report map names
-        self.commandId += 1
-        layer, output = self.list.GetLayers()[self.commandId]
-        
-        if '@' not in output:
-            name = output + '@' + grass.gisenv()['MAPSET']
-        else:
-            name = output
-        
-        # add imported layers into layer tree
-        # an alternative would be emit signal (mapCreated) and (optionally)
-        # connect to this signal
-        llist = self._giface.GetLayerList()
-        if self.importType == 'gdal':
-            if userData:
-                nBands = int(userData.get('nbands', 1))
-            else:
-                nBands = 1
-            
-            if UserSettings.Get(group = 'rasterLayer', key = 'opaque', subkey = 'enabled'):
-                nFlag = True
-            else:
-                nFlag = False
-            
-            for i in range(1, nBands+1):
-                nameOrig = name
-                if nBands > 1:
-                    mapName, mapsetName = name.split('@')
-                    mapName += '.%d' % i
-                    name = mapName + '@' + mapsetName
-                    
-                cmd = ['d.rast',
-                       'map=%s' % name]
-                if nFlag:
-                    cmd.append('-n')
-                
-                llist.AddLayer(ltype='raster',
-                               name=name, checked=True,
-                               cmd=cmd)
-                name = nameOrig
-        else:
-            llist.AddLayer(ltype='vector',
-                           name=name, checked=True,
-                           cmd=['d.vect',
-                                'map=%s' % name] + GetDisplayVectSettings())
-
-        self._giface.GetMapWindow().ZoomToMap()
-
-    def OnAbort(self, event):
-        """Abort running import
-
-        .. todo::
-            not yet implemented
-        """
-        pass
-
-    def OnCmdDone(self, event):
-        """Do what has to be done after importing"""
-        pass
-
-
-class GdalImportDialog(ImportDialog):
-    def __init__(self, parent, giface, ogr = False, link = False):
-        """Dialog for bulk import of various raster/vector data
-
-        .. todo::
-            Split into GdalImportDialog and OgrImportDialog
-
-        :param parent: parent window
-        :param ogr: True for OGR (vector) otherwise GDAL (raster)
-        :param link: True for linking data otherwise importing data
-        """
-        self._giface = giface
-        self.link = link
-        self.ogr  = ogr
-        
-        if ogr:
-            ImportDialog.__init__(self, parent, giface=giface, itype='ogr')
-            if link:
-                self.SetTitle(_("Link external vector data"))
-            else:
-                self.SetTitle(_("Import vector data"))
-        else:
-            ImportDialog.__init__(self, parent, giface=giface, itype='gdal') 
-            if link:
-                self.SetTitle(_("Link external raster data"))
-            else:
-                self.SetTitle(_("Import raster data"))
-        
-        self.dsnInput = GdalSelect(parent = self, panel = self.panel,
-                                   ogr = ogr, link = link)
-        self.dsnInput.reloadDataRequired.connect(lambda data: self.list.LoadData(data))
-
-        if link:
-            self.add.SetLabel(_("Add linked layers into layer tree"))
-        else:
-            self.add.SetLabel(_("Add imported layers into layer tree"))
-        
-        self.add.SetValue(UserSettings.Get(group = 'cmd', key = 'addNewLayer', subkey = 'enabled'))
-
-        if link:
-            self.btn_run.SetLabel(_("&Link"))
-            self.btn_run.SetToolTipString(_("Link selected layers"))
-        else:
-            self.btn_run.SetLabel(_("&Import"))
-            self.btn_run.SetToolTipString(_("Import selected layers"))
-
-        self.doLayout()
-
-    def OnRun(self, event):
-        """Import/Link data (each layes as separate vector map)"""
-        self.commandId = -1
-        data = self.list.GetLayers()
-        if not data:
-            GMessage(_("No layers selected. Operation canceled."),
-                     parent = self)
-            return
-        
-        dsn  = self.dsnInput.GetDsn()
-        ext  = self.dsnInput.GetFormatExt()
-        
-        # determine data driver for PostGIS links
-        self.popOGR = False
-        if self.importType == 'ogr' and \
-                self.dsnInput.GetType() == 'db' and \
-                self.dsnInput.GetFormat() == 'PostgreSQL' and \
-                'GRASS_VECTOR_OGR' not in os.environ:
-            self.popOGR = True
-            os.environ['GRASS_VECTOR_OGR'] = '1'
-        
-        for layer, output in data:
-            userData = {}
-            if self.importType == 'ogr':
-                if ext and layer.rfind(ext) > -1:
-                    layer = layer.replace('.' + ext, '')
-                if '|' in layer:
-                    layer, geometry = layer.split('|', 1)
-                else:
-                    geometry = None
-                if self.link:
-                    cmd = ['v.external',
-                           'input=%s' % dsn,
-                           'output=%s' % output,
-                           'layer=%s' % layer]
-                else:
-                    cmd = ['v.in.ogr',
-                           'input=%s' % dsn,
-                           'layer=%s' % layer,
-                           'output=%s' % output]
-                    if geometry:
-                        cmd.append('geometry=%s' % geometry)
-            else: # gdal
-                if self.dsnInput.GetType() == 'dir':
-                    idsn = os.path.join(dsn, layer)
-                else:
-                    idsn = dsn
-
-                # check number of bands
-                nBandsStr = RunCommand('r.in.gdal',
-                                       flags = 'p',
-                                       input = idsn, read = True)
-                nBands = -1
-                if nBandsStr:
-                    try:
-                        nBands = int(nBandsStr.rstrip('\n'))
-                    except:
-                        pass
-                if nBands < 0:
-                    GWarning(_("Unable to determine number of raster bands"),
-                             parent = self)
-                    nBands = 1
-
-                userData['nbands'] = nBands
-                if self.link:
-                    cmd = ['r.external',
-                           'input=%s' % idsn,
-                           'output=%s' % output]
-                else:
-                    cmd = ['r.in.gdal',
-                           'input=%s' % idsn,
-                           'output=%s' % output]
-                    if nBands > 1:
-                        cmd.append('-k')
-            
-            if self.overwrite.IsChecked():
-                cmd.append('--overwrite')
-            
-            for key in self.options.keys():
-                if self.options[key].IsChecked():
-                    cmd.append('-%s' % key)
-            for key in self.options_par.keys():
-                value = self.options_par[key][1].GetValue()
-                if value:
-                    cmd.append('%s=%s' % (key, value))
-            
-            if UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled') and \
-                    '--overwrite' not in cmd:
-                cmd.append('--overwrite')
-            
-            # run in Layer Manager
-            self._giface.RunCmd(cmd, onDone=self.OnCmdDone, userData=userData, addLayer=False)
-
-    def OnCmdDone(self, event):
-        """Load layers and close if required"""
-        if not hasattr(self, 'AddLayers'):
-            return
-
-        self.AddLayers(event.returncode, event.cmd, event.userData)
-
-        if self.popOGR:
-            os.environ.pop('GRASS_VECTOR_OGR')
-
-        if event.returncode == 0 and self.closeOnFinish.IsChecked():
-            self.Close()
-
-    def _getCommand(self):
-        """Get command"""
-        if self.link:
-            if self.ogr:
-                return 'v.external'
-            else:
-                return 'r.external'
-        else:
-            if self.ogr:
-                return 'v.in.ogr'
-            else:
-                return 'r.in.gdal'
-        
-        return ''
-
-class GdalOutputDialog(wx.Dialog):
-    def __init__(self, parent, id = wx.ID_ANY, ogr = False,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, *kwargs):
-        """Dialog for setting output format for rasters/vectors
-
-        .. todo::
-            Split into GdalOutputDialog and OgrOutputDialog
-
-        :param parent: parent window
-        :param id: window id
-        :param ogr: True for OGR (vector) otherwise GDAL (raster)
-        :param style: window style
-        :param *kwargs: other wx.Dialog's arguments
-        """
-        self.parent = parent # GMFrame 
-        self.ogr = ogr
-        wx.Dialog.__init__(self, parent, id = id, style = style, *kwargs)
-        if self.ogr:
-            self.SetTitle(_("Define output format for vector data"))
-        else:
-            self.SetTitle(_("Define output format for raster data"))
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
+        return cond
 
-        # buttons
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnCancel.SetToolTipString(_("Close dialog"))
-        self.btnOk = wx.Button(parent = self.panel, id = wx.ID_OK)
-        self.btnOk.SetToolTipString(_("Set external format and close dialog"))
-        self.btnOk.SetDefault()
-        
-        self.dsnInput = GdalSelect(parent = self, panel = self.panel,
-                                   ogr = ogr,
-                                   exclude = ['file', 'protocol'], dest = True)
-        
-        self.Bind(wx.EVT_BUTTON, self.OnCancel, self.btnCancel)
-        self.Bind(wx.EVT_BUTTON, self.OnOK, self.btnOk)
-        
-        self._layout()
-
-    def _layout(self):
-        dialogSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        dialogSizer.Add(item = self.dsnInput, proportion = 1,
-                        flag = wx.EXPAND)
-
-        btnSizer = wx.BoxSizer(orient = wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnCancel, proportion = 0,
-                     flag = wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER,
-                     border = 10)
-        btnSizer.Add(item = self.btnOk, proportion = 0,
-                     flag = wx.RIGHT | wx.ALIGN_CENTER,
-                     border = 10)
-        
-        dialogSizer.Add(item = btnSizer, proportion = 0,
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP | wx.ALIGN_RIGHT,
-                        border = 10)
-        
-        self.panel.SetAutoLayout(True)
-        self.panel.SetSizer(dialogSizer)
-        dialogSizer.Fit(self.panel)
-
-        size = wx.Size(globalvar.DIALOG_GSELECT_SIZE[0] + 225, self.GetBestSize()[1] + 35)
-        self.SetMinSize(size)
-        self.SetSize((size.width, size.height))
-        self.Layout()
-        
-    def OnCancel(self, event):
-        self.Destroy()
-        
-    def OnOK(self, event):
-        if self.dsnInput.GetType() == 'native':
-            RunCommand('v.external.out',
-                       parent = self,
-                       flags = 'r')
-        else:
-            dsn = self.dsnInput.GetDsn()
-            frmt = self.dsnInput.GetFormat()
-            options = self.dsnInput.GetOptions()
-            if not dsn:
-                GMessage(_("No data source selected."), parent=self)
-                return
-            
-            RunCommand('v.external.out',
-                       parent = self,
-                       output = dsn, format = frmt,
-                       options = options)
-        self.Close()
-        
-class DxfImportDialog(ImportDialog):
-    """Dialog for bulk import of DXF layers"""
-    def __init__(self, parent, giface):
-        ImportDialog.__init__(self, parent, giface=giface, itype='dxf',
-                              title = _("Import DXF layers"))
-        self._giface = giface
-        self.dsnInput = filebrowse.FileBrowseButton(parent = self.panel, id = wx.ID_ANY, 
-                                                    size = globalvar.DIALOG_GSELECT_SIZE, labelText = '',
-                                                    dialogTitle = _('Choose DXF file to import'),
-                                                    buttonText = _('Browse'),
-                                                    startDirectory = os.getcwd(), fileMode = 0,
-                                                    changeCallback = self.OnSetDsn,
-                                                    fileMask = "DXF File (*.dxf)|*.dxf")
-        
-        self.add.SetLabel(_("Add imported layers into layer tree"))
-        
-        self.add.SetValue(UserSettings.Get(group = 'cmd', key = 'addNewLayer', subkey = 'enabled'))
-        
-        self.doLayout()
-
-    def _getCommand(self):
-        """Get command"""
-        return 'v.in.dxf'
-    
-    def OnRun(self, event):
-        """Import/Link data (each layes as separate vector map)"""
-        data = self.list.GetLayers()
-        if not data:
-            GMessage(_("No layers selected."), parent=self)
-            return
-        
-        # hide dialog
-        self.Hide()
-        
-        inputDxf = self.dsnInput.GetValue()
-        
-        for layer, output in data:
-            cmd = ['v.in.dxf',
-                   'input=%s' % inputDxf,
-                   'layers=%s' % layer,
-                   'output=%s' % output]
-
-            for key in self.options.keys():
-                if self.options[key].IsChecked():
-                    cmd.append('-%s' % key)
-            
-            if self.overwrite.IsChecked() or \
-                    UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'):
-                cmd.append('--overwrite')
-            
-            # run in Layer Manager
-            self._giface.RunCmd(cmd, onDone=self.OnCmdDone, addLayer=False)
-
-    def OnCmdDone(self, event):
-        """Load layers and close if required"""
-        if not hasattr(self, 'AddLayers'):
-            return
-
-        self.AddLayers(event.returncode, event.cmd)
-
-        if self.closeOnFinish.IsChecked():
-            self.Close()
-
-    def OnSetDsn(self, event):
-        """Input DXF file defined, update list of layer widget"""
-        path = event.GetString()
-        if not path:
-            return 
-        
-        data = list()        
-        ret = RunCommand('v.in.dxf',
-                         quiet = True,
-                         parent = self,
-                         read = True,
-                         flags = 'l',
-                         input = path)
-        if not ret:
-            self.list.LoadData()
-            return
-            
-        for line in ret.splitlines():
-            layerId = line.split(':')[0].split(' ')[1]
-            layerName = line.split(':')[1].strip()
-            grassName = GetValidLayerName(layerName)
-            data.append((layerId, layerName.strip(), grassName.strip()))
-        
-        self.list.LoadData(data)
-
-
-class LayersList(GListCtrl, listmix.TextEditMixin):
-    """List of layers to be imported (dxf, shp...)"""
-    def __init__(self, parent, columns, log = None):
-        GListCtrl.__init__(self, parent)
-        
-        self.log = log
-        
-        # setup mixins
-        listmix.TextEditMixin.__init__(self)
-        
-        for i in range(len(columns)):
-            self.InsertColumn(i, columns[i])
-        
-        if len(columns) == 3:
-            width = (65, 200)
-        else:
-            width = (65, 180, 90, 70)
-        
-        for i in range(len(width)):
-            self.SetColumnWidth(col = i, width = width[i])
-        
-    def LoadData(self, data = None):
-        """Load data into list"""
-        self.DeleteAllItems()
-        if data is None:
-            return
-        
-        for item in data:
-            index = self.InsertStringItem(sys.maxint, str(item[0]))
-            for i in range(1, len(item)):
-                self.SetStringItem(index, i, item[i])
-        
-        # check by default only on one item
-        if len(data) == 1:
-            self.CheckItem(index, True)
-        
-    def OnLeftDown(self, event):
-        """Allow editing only output name
-        
-        Code taken from TextEditMixin class.
-        """
-        x, y = event.GetPosition()
-        
-        colLocs = [0]
-        loc = 0
-        for n in range(self.GetColumnCount()):
-            loc = loc + self.GetColumnWidth(n)
-            colLocs.append(loc)
-        
-        col = bisect(colLocs, x + self.GetScrollPos(wx.HORIZONTAL)) - 1
-        
-        if col == self.GetColumnCount() - 1:
-            listmix.TextEditMixin.OnLeftDown(self, event)
-        else:
-            event.Skip()
-        
-    def GetLayers(self):
-        """Get list of layers (layer name, output name)"""
-        data = []
-        item = -1
-        while True:
-            item = self.GetNextItem(item)
-            if item == -1:
-                break
-            if not self.IsChecked(item):
-                continue
-            # layer / output name
-            layer = self.GetItem(item, 1).GetText()
-            ftype = self.GetItem(item, 2).GetText()
-            if '/' in ftype:
-                layer += '|%s' % ftype.split('/', 1)[0]
-            output = self.GetItem(item, self.GetColumnCount() - 1).GetText()
-            data.append((layer, output))
-        
-        return data
 
 class SetOpacityDialog(wx.Dialog):
     """Set opacity of map layers.
-    Dialog expects opacity between 0 and 1 and returns this range, too.    
+    Dialog expects opacity between 0 and 1 and returns this range, too.
     """
-    def __init__(self, parent, id = wx.ID_ANY, title = _("Set Map Layer Opacity"),
-                 size = wx.DefaultSize, pos = wx.DefaultPosition,
-                 style = wx.DEFAULT_DIALOG_STYLE, opacity = 1):
+
+    def __init__(self, parent, id=wx.ID_ANY, title=_("Set Map Layer Opacity"),
+                 size=wx.DefaultSize, pos=wx.DefaultPosition,
+                 style=wx.DEFAULT_DIALOG_STYLE, opacity=1):
 
         self.parent = parent    # GMFrame
         self.opacity = opacity  # current opacity
 
-        super(SetOpacityDialog, self).__init__(parent, id = id, pos = pos,
-                                               size = size, style = style, title = title)
+        super(
+            SetOpacityDialog,
+            self).__init__(
+            parent,
+            id=id,
+            pos=pos,
+            size=size,
+            style=style,
+            title=title)
 
         self.applyOpacity = Signal('SetOpacityDialog.applyOpacity')
-        panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
+        panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.GridBagSizer(vgap = 5, hgap = 5)
-        self.value = wx.Slider(panel, id = wx.ID_ANY, value = int(self.opacity * 100),
-                               style = wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | \
-                                   wx.SL_TOP | wx.SL_LABELS,
-                               minValue = 0, maxValue = 100,
-                               size = (350, -1))
-
-        box.Add(item = self.value,
-                flag = wx.ALIGN_CENTRE, pos = (0, 0), span = (1, 2))
-        box.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                   label = _("transparent")),
-                pos = (1, 0))
-        box.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                   label = _("opaque")),
-                flag = wx.ALIGN_RIGHT,
-                pos = (1, 1))
-
-        sizer.Add(item = box, proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 5)
-
-        line = wx.StaticLine(parent = panel, id = wx.ID_ANY,
-                             style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 5)
+        box = wx.GridBagSizer(vgap=5, hgap=5)
+        self.value = wx.Slider(
+            panel, id=wx.ID_ANY, value=int(self.opacity * 100),
+            style=wx.SL_HORIZONTAL | wx.SL_AUTOTICKS | wx.SL_TOP | wx.SL_LABELS,
+            minValue=0, maxValue=100, size=(350, -1))
+
+        box.Add(item=self.value,
+                flag=wx.ALIGN_CENTRE, pos=(0, 0), span=(1, 2))
+        box.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                   label=_("transparent")),
+                pos=(1, 0))
+        box.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                   label=_("opaque")),
+                flag=wx.ALIGN_RIGHT,
+                pos=(1, 1))
+
+        sizer.Add(item=box, proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+
+        line = wx.StaticLine(parent=panel, id=wx.ID_ANY,
+                             style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
 
         # buttons
         btnsizer = wx.StdDialogButtonSizer()
 
-        btnOK = wx.Button(parent = panel, id = wx.ID_OK)
+        btnOK = wx.Button(parent=panel, id=wx.ID_OK)
         btnOK.SetDefault()
         btnsizer.AddButton(btnOK)
 
-        btnCancel = wx.Button(parent = panel, id = wx.ID_CANCEL)
+        btnCancel = wx.Button(parent=panel, id=wx.ID_CANCEL)
         btnsizer.AddButton(btnCancel)
 
-        btnApply = wx.Button(parent = panel, id = wx.ID_APPLY)
+        btnApply = wx.Button(parent=panel, id=wx.ID_APPLY)
         btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
         btnsizer.AddButton(btnApply)
         btnsizer.Realize()
 
-        sizer.Add(item = btnsizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 5)
+        sizer.Add(item=btnsizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
 
         panel.SetSizer(sizer)
         sizer.Fit(panel)
@@ -2357,7 +1821,7 @@ class SetOpacityDialog(wx.Dialog):
         return opacity
 
     def OnApply(self, event):
-        self.applyOpacity.emit(value = self.GetOpacity())
+        self.applyOpacity.emit(value=self.GetOpacity())
 
 
 def GetImageHandlers(image):
@@ -2366,131 +1830,139 @@ def GetImageHandlers(image):
     ltype = list()
     for h in image.GetHandlers():
         lext.append(h.GetExtension())
-        
+
     filetype = ''
     if 'png' in lext:
         filetype += "PNG file (*.png)|*.png|"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_PNG,
-                       'ext'  : 'png' })
-    filetype +=  "BMP file (*.bmp)|*.bmp|"
-    ltype.append({ 'type' : wx.BITMAP_TYPE_BMP,
-                   'ext'  : 'bmp' })
+        ltype.append({'type': wx.BITMAP_TYPE_PNG,
+                      'ext': 'png'})
+    filetype += "BMP file (*.bmp)|*.bmp|"
+    ltype.append({'type': wx.BITMAP_TYPE_BMP,
+                  'ext': 'bmp'})
     if 'gif' in lext:
         filetype += "GIF file (*.gif)|*.gif|"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_GIF,
-                       'ext'  : 'gif' })
-        
+        ltype.append({'type': wx.BITMAP_TYPE_GIF,
+                      'ext': 'gif'})
+
     if 'jpg' in lext:
         filetype += "JPG file (*.jpg)|*.jpg|"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_JPEG,
-                       'ext'  : 'jpg' })
+        ltype.append({'type': wx.BITMAP_TYPE_JPEG,
+                      'ext': 'jpg'})
 
     if 'pcx' in lext:
         filetype += "PCX file (*.pcx)|*.pcx|"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_PCX,
-                       'ext'  : 'pcx' })
-        
+        ltype.append({'type': wx.BITMAP_TYPE_PCX,
+                      'ext': 'pcx'})
+
     if 'pnm' in lext:
         filetype += "PNM file (*.pnm)|*.pnm|"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_PNM,
-                       'ext'  : 'pnm' })
+        ltype.append({'type': wx.BITMAP_TYPE_PNM,
+                      'ext': 'pnm'})
 
     if 'tif' in lext:
         filetype += "TIF file (*.tif)|*.tif|"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_TIF,
-                       'ext'  : 'tif' })
+        ltype.append({'type': wx.BITMAP_TYPE_TIF,
+                      'ext': 'tif'})
 
     if 'xpm' in lext:
         filetype += "XPM file (*.xpm)|*.xpm"
-        ltype.append({ 'type' : wx.BITMAP_TYPE_XPM,
-                       'ext'  : 'xpm' })
-    
+        ltype.append({'type': wx.BITMAP_TYPE_XPM,
+                      'ext': 'xpm'})
+
     return filetype, ltype
 
+
 class ImageSizeDialog(wx.Dialog):
     """Set size for saved graphic file"""
-    def __init__(self, parent, id = wx.ID_ANY, title = _("Set image size"),
-                 style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY, title=_("Set image size"),
+                 style=wx.DEFAULT_DIALOG_STYLE, **kwargs):
         self.parent = parent
-        
-        wx.Dialog.__init__(self, parent, id = id, style = style, title = title, **kwargs)
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.box = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                label = ' % s' % _("Image size"))
-        
+
+        wx.Dialog.__init__(
+            self,
+            parent,
+            id=id,
+            style=style,
+            title=title,
+            **kwargs)
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.box = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                label=' % s' % _("Image size"))
+
         size = self.parent.GetWindow().GetClientSize()
-        self.width = wx.SpinCtrl(parent = self.panel, id = wx.ID_ANY,
-                                 style = wx.SP_ARROW_KEYS)
+        self.width = wx.SpinCtrl(parent=self.panel, id=wx.ID_ANY,
+                                 style=wx.SP_ARROW_KEYS)
         self.width.SetRange(20, 1e6)
         self.width.SetValue(size.width)
         wx.CallAfter(self.width.SetFocus)
-        self.height = wx.SpinCtrl(parent = self.panel, id = wx.ID_ANY,
-                                  style = wx.SP_ARROW_KEYS)
+        self.height = wx.SpinCtrl(parent=self.panel, id=wx.ID_ANY,
+                                  style=wx.SP_ARROW_KEYS)
         self.height.SetRange(20, 1e6)
         self.height.SetValue(size.height)
-        self.template = wx.Choice(parent = self.panel, id = wx.ID_ANY,
-                                  size = (125, -1),
-                                  choices = [ "",
-                                              "640x480",
-                                              "800x600",
-                                              "1024x768",
-                                              "1280x960",
-                                              "1600x1200",
-                                              "1920x1440" ])
-        
-        self.btnOK = wx.Button(parent = self.panel, id = wx.ID_OK)
+        self.template = wx.Choice(parent=self.panel, id=wx.ID_ANY,
+                                  size=(125, -1),
+                                  choices=["",
+                                           "640x480",
+                                           "800x600",
+                                           "1024x768",
+                                           "1280x960",
+                                           "1600x1200",
+                                           "1920x1440"])
+
+        self.btnOK = wx.Button(parent=self.panel, id=wx.ID_OK)
         self.btnOK.SetDefault()
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+
         self.template.Bind(wx.EVT_CHOICE, self.OnTemplate)
-        
+
         self._layout()
         self.SetSize(self.GetBestSize())
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # body
         box = wx.StaticBoxSizer(self.box, wx.HORIZONTAL)
-        fbox = wx.FlexGridSizer(cols = 2, vgap = 5, hgap = 5)
-        fbox.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                      label = _("Width:")),
-                 flag = wx.ALIGN_CENTER_VERTICAL)
-        fbox.Add(item = self.width)
-        fbox.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                      label = _("Height:")),
-                 flag = wx.ALIGN_CENTER_VERTICAL)
-        fbox.Add(item = self.height)
-        fbox.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                      label = _("Template:")),
-                 flag = wx.ALIGN_CENTER_VERTICAL)
-        fbox.Add(item = self.template)
-        
-        box.Add(item = fbox, proportion = 1,
-                flag = wx.EXPAND | wx.ALL, border = 5)
-        sizer.Add(item = box, proportion = 1,
-                  flag=wx.EXPAND | wx.ALL, border = 3)
-        
+        fbox = wx.FlexGridSizer(cols=2, vgap=5, hgap=5)
+        fbox.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                    label=_("Width:")),
+                 flag=wx.ALIGN_CENTER_VERTICAL)
+        fbox.Add(item=self.width)
+        fbox.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                    label=_("Height:")),
+                 flag=wx.ALIGN_CENTER_VERTICAL)
+        fbox.Add(item=self.height)
+        fbox.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                    label=_("Template:")),
+                 flag=wx.ALIGN_CENTER_VERTICAL)
+        fbox.Add(item=self.template)
+
+        box.Add(item=fbox, proportion=1,
+                flag=wx.EXPAND | wx.ALL, border=5)
+        sizer.Add(item=box, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=3)
+
         # buttons
         btnsizer = wx.StdDialogButtonSizer()
         btnsizer.AddButton(self.btnOK)
         btnsizer.AddButton(self.btnCancel)
         btnsizer.Realize()
 
-        sizer.Add(item = btnsizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_RIGHT | wx.ALL, border=5)
-        
+        sizer.Add(item=btnsizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_RIGHT | wx.ALL, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
         self.Layout()
-    
+
     def GetValues(self):
         """Get width/height values"""
         return self.width.GetValue(), self.height.GetValue()
-    
+
     def OnTemplate(self, event):
         """Template selected"""
         sel = event.GetString()
@@ -2500,53 +1972,60 @@ class ImageSizeDialog(wx.Dialog):
             width, height = map(int, sel.split('x'))
         self.width.SetValue(width)
         self.height.SetValue(height)
-        
+
+
 class SqlQueryFrame(wx.Frame):
-    def __init__(self, parent, id = wx.ID_ANY,
-                 title = _("GRASS GIS SQL Query Utility"),
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_("GRASS GIS SQL Query Utility"),
                  *kwargs):
         """SQL Query Utility window
         """
         self.parent = parent
 
-        wx.Frame.__init__(self, parent = parent, id = id, title = title, *kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_sql.ico'), wx.BITMAP_TYPE_ICO))
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.sqlBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                   label = _(" SQL statement "))
-        self.sql = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY,
-                               style = wx.TE_MULTILINE)
-        
-        self.btnApply = wx.Button(parent = self.panel, id = wx.ID_APPLY)
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
+        wx.Frame.__init__(self, parent=parent, id=id, title=title, *kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_sql.ico'),
+                wx.BITMAP_TYPE_ICO))
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.sqlBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                   label=_(" SQL statement "))
+        self.sql = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY,
+                               style=wx.TE_MULTILINE)
+
+        self.btnApply = wx.Button(parent=self.panel, id=wx.ID_APPLY)
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
         self.Bind(wx.EVT_BUTTON, self.OnCloseWindow, self.btnCancel)
-        
+
         self._layout()
 
         self.SetMinSize(wx.Size(300, 150))
         self.SetSize(wx.Size(500, 200))
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         sqlSizer = wx.StaticBoxSizer(self.sqlBox, wx.HORIZONTAL)
-        sqlSizer.Add(item = self.sql, proportion = 1,
-                     flag = wx.EXPAND)
+        sqlSizer.Add(item=self.sql, proportion=1,
+                     flag=wx.EXPAND)
 
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnApply)
         btnSizer.AddButton(self.btnCancel)
         btnSizer.Realize()
-        
-        sizer.Add(item = sqlSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 5) 
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-       
+
+        sizer.Add(item=sqlSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=5)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+
         self.panel.SetSizer(sizer)
-        
+
         self.Layout()
 
     def OnCloseWindow(self, event):
@@ -2554,83 +2033,99 @@ class SqlQueryFrame(wx.Frame):
         """
         self.Close()
 
+
 class SymbolDialog(wx.Dialog):
     """Dialog for GRASS symbols selection.
-    
+
     Dialog is called in gui_core::forms module.
     """
-    def __init__(self, parent, symbolPath, currentSymbol = None, title = _("Symbols")):
+
+    def __init__(self, parent, symbolPath,
+                 currentSymbol=None, title=_("Symbols")):
         """Dialog constructor.
-        
+
         It is assumed that symbolPath contains folders with symbols.
-        
+
         :param parent: dialog parent
         :param symbolPath: absolute path to symbols
         :param currentSymbol: currently selected symbol (e.g. 'basic/x')
         :param title: dialog title
         """
-        wx.Dialog.__init__(self, parent = parent, title = title, id = wx.ID_ANY)
-        
+        wx.Dialog.__init__(self, parent=parent, title=title, id=wx.ID_ANY)
+
         self.symbolPath = symbolPath
-        self.currentSymbol = currentSymbol # default basic/x
+        self.currentSymbol = currentSymbol  # default basic/x
         self.selected = None
         self.selectedDir = None
-        
+
         self._layout()
-        
+
     def _layout(self):
-        mainPanel = wx.Panel(self, id = wx.ID_ANY)
+        mainPanel = wx.Panel(self, id=wx.ID_ANY)
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        vSizer = wx.BoxSizer( wx.VERTICAL)
-        fgSizer = wx.FlexGridSizer(rows = 2, vgap = 5, hgap = 5)
-        self.folderChoice = wx.Choice(mainPanel, id = wx.ID_ANY, choices = os.listdir(self.symbolPath))
+        vSizer = wx.BoxSizer(wx.VERTICAL)
+        fgSizer = wx.FlexGridSizer(rows=2, vgap=5, hgap=5)
+        self.folderChoice = wx.Choice(
+            mainPanel,
+            id=wx.ID_ANY,
+            choices=os.listdir(
+                self.symbolPath))
         self.folderChoice.Bind(wx.EVT_CHOICE, self.OnFolderSelect)
-        
-        fgSizer.Add(item = wx.StaticText(mainPanel, id = wx.ID_ANY, label = _("Symbol directory:")),
-                   proportion = 0,
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-                   
-        fgSizer.Add(item = self.folderChoice, proportion = 0,
-                   flag = wx.ALIGN_CENTER, border = 0)
-                   
-        self.infoLabel = wx.StaticText(mainPanel, id = wx.ID_ANY)
-        fgSizer.Add(wx.StaticText(mainPanel, id = wx.ID_ANY, label = _("Symbol name:")), 
-                    flag = wx.ALIGN_CENTRE_VERTICAL)
-        fgSizer.Add(self.infoLabel, proportion = 0, 
-                    flag = wx.ALIGN_CENTRE_VERTICAL)
-        vSizer.Add(fgSizer, proportion = 0, flag = wx.ALL, border = 5)
-        
+
+        fgSizer.Add(
+            item=wx.StaticText(
+                mainPanel,
+                id=wx.ID_ANY,
+                label=_("Symbol directory:")),
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL)
+
+        fgSizer.Add(item=self.folderChoice, proportion=0,
+                    flag=wx.ALIGN_CENTER, border=0)
+
+        self.infoLabel = wx.StaticText(mainPanel, id=wx.ID_ANY)
+        fgSizer.Add(
+            wx.StaticText(
+                mainPanel,
+                id=wx.ID_ANY,
+                label=_("Symbol name:")),
+            flag=wx.ALIGN_CENTRE_VERTICAL)
+        fgSizer.Add(self.infoLabel, proportion=0,
+                    flag=wx.ALIGN_CENTRE_VERTICAL)
+        vSizer.Add(fgSizer, proportion=0, flag=wx.ALL, border=5)
+
         self.panels = self._createSymbolPanels(mainPanel)
         for panel in self.panels:
-            vSizer.Add(panel, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        mainSizer.Add(vSizer, proportion = 1, flag = wx.ALL| wx.EXPAND, border = 5)
-        self.btnCancel = wx.Button(parent = mainPanel, id = wx.ID_CANCEL)
-        self.btnOK     = wx.Button(parent = mainPanel, id = wx.ID_OK)
+            vSizer.Add(panel, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        mainSizer.Add(vSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=5)
+        self.btnCancel = wx.Button(parent=mainPanel, id=wx.ID_CANCEL)
+        self.btnOK = wx.Button(parent=mainPanel, id=wx.ID_OK)
         self.btnOK.SetDefault()
         self.btnOK.Enable(False)
-        
+
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOK)
         btnSizer.Realize()
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-                      
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+
         # show panel with the largest number of images and fit size
         count = []
         for folder in os.listdir(self.symbolPath):
-            count.append(len(os.listdir(os.path.join(self.symbolPath, folder))))
-            
+            count.append(
+                len(os.listdir(os.path.join(self.symbolPath, folder))))
+
         index = count.index(max(count))
         self.folderChoice.SetSelection(index)
         self.OnFolderSelect(None)
         self.infoLabel.Show()
-        
+
         mainPanel.SetSizerAndFit(mainSizer)
         self.SetSize(self.GetBestSize())
-        
+
         # show currently selected symbol
         if self.currentSymbol:
             # set directory
@@ -2643,60 +2138,62 @@ class SymbolDialog(wx.Dialog):
                     panel.Select()
         else:
             self.folderChoice.SetSelection(0)
-            
+
         self.OnFolderSelect(None)
-        
+
     def _createSymbolPanels(self, parent):
         """Creates multiple panels with symbols.
-        
+
         Panels are shown/hidden according to selected folder."""
         folders = os.listdir(self.symbolPath)
-        
+
         panels = []
         self.symbolPanels = []
-        
+
         for folder in folders:
-            panel = wx.Panel(parent, style = wx.BORDER_RAISED)
-            sizer = wx.GridSizer(cols = 6, vgap = 3, hgap = 3)
-            images = self._getSymbols(path = os.path.join(self.symbolPath, folder))
-        
+            panel = wx.Panel(parent, style=wx.BORDER_RAISED)
+            sizer = wx.GridSizer(cols=6, vgap=3, hgap=3)
+            images = self._getSymbols(
+                path=os.path.join(
+                    self.symbolPath, folder))
+
             symbolPanels = []
             for img in images:
-                iP = SingleSymbolPanel(parent = panel, symbolPath = img)
+                iP = SingleSymbolPanel(parent=panel, symbolPath=img)
                 iP.symbolSelectionChanged.connect(self.SelectionChanged)
-                sizer.Add(item = iP, proportion = 0, flag = wx.ALIGN_CENTER)
+                sizer.Add(item=iP, proportion=0, flag=wx.ALIGN_CENTER)
                 symbolPanels.append(iP)
-            
+
             panel.SetSizerAndFit(sizer)
             panel.Hide()
             panels.append(panel)
             self.symbolPanels.append(symbolPanels)
-            
+
         return panels
-        
+
     def _getSymbols(self, path):
         # we assume that images are in subfolders (1 level only)
         imageList = []
         for image in os.listdir(path):
             imageList.append(os.path.join(path, image))
-                
+
         return sorted(imageList)
-            
+
     def OnFolderSelect(self, event):
         """Selected folder with symbols changed."""
         idx = self.folderChoice.GetSelection()
         for i in range(len(self.panels)):
             sizer = self.panels[i].GetContainingSizer()
-            sizer.Show(self.panels[i], i == idx, recursive = True)
+            sizer.Show(self.panels[i], i == idx, recursive=True)
             sizer.Layout()
-        
+
         if self.selectedDir == self.folderChoice.GetStringSelection():
             self.btnOK.Enable()
             self.infoLabel.SetLabel(self.selected)
         else:
             self.btnOK.Disable()
             self.infoLabel.SetLabel('')
-        
+
     def SelectionChanged(self, name, doubleClick):
         """Selected symbol changed."""
         if doubleClick:
@@ -2706,14 +2203,14 @@ class SymbolDialog(wx.Dialog):
             for panel in self.symbolPanels[i]:
                 if panel.GetName() != name:
                     panel.Deselect()
-                
+
         self.btnOK.Enable()
-        
+
         self.selected = name
         self.selectedDir = self.folderChoice.GetStringSelection()
-        
+
         self.infoLabel.SetLabel(name)
-        
+
     def GetSelectedSymbolName(self):
         """Returns currently selected symbol name (e.g. 'basic/x').
         """
@@ -2727,34 +2224,49 @@ class SymbolDialog(wx.Dialog):
 
 
 class TextEntryDialog(wx.Dialog):
-    """Simple dialog with text field. 
+    """Simple dialog with text field.
 
     It differs from wx.TextEntryDialog because it allows adding validator.
     """
-    def __init__(self, parent, message, caption='',
-                 defaultValue='', validator=wx.DefaultValidator, 
-                 style=wx.OK | wx.CANCEL | wx.CENTRE, textStyle=0, textSize=(300, -1),
-                 **kwargs):
-        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=caption, **kwargs)
+
+    def __init__(
+            self, parent, message, caption='', defaultValue='',
+            validator=wx.DefaultValidator, style=wx.OK | wx.CANCEL | wx.CENTRE,
+            textStyle=0, textSize=(300, -1),
+            **kwargs):
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=caption,
+            **kwargs)
 
         vbox = wx.BoxSizer(wx.VERTICAL)
 
         stline = wx.StaticText(self, id=wx.ID_ANY, label=message)
         vbox.Add(item=stline, proportion=0, flag=wx.EXPAND | wx.ALL, border=10)
 
-        self._textCtrl = wx.TextCtrl(self, id=wx.ID_ANY,
-                                     value=defaultValue, validator=validator, style=textStyle)
+        self._textCtrl = wx.TextCtrl(
+            self,
+            id=wx.ID_ANY,
+            value=defaultValue,
+            validator=validator,
+            style=textStyle)
         self._textCtrl.SetInitialSize(textSize)
         wx.CallAfter(self._textCtrl.SetFocus)
-        
-        vbox.Add(item=self._textCtrl, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=10)
+
+        vbox.Add(
+            item=self._textCtrl,
+            proportion=0,
+            flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
+            border=10)
         self._textCtrl.SetFocus()
 
         sizer = self.CreateSeparatedButtonSizer(style)
         vbox.Add(item=sizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
 
         self.SetSizerAndFit(vbox)
-        
+
     def GetValue(self):
         return self._textCtrl.GetValue()
 
@@ -2764,11 +2276,12 @@ class TextEntryDialog(wx.Dialog):
 
 class HyperlinkDialog(wx.Dialog):
     """Dialog for displaying message with hyperlink."""
+
     def __init__(self, parent, title, message, hyperlink,
-                hyperlinkLabel=None, style=wx.OK):
+                 hyperlinkLabel=None, style=wx.OK):
         """Constructor
 
-        :param parent: gui parent         
+        :param parent: gui parent
         :param title: dialog title
         :param message: message
         :param hyperlink: url
@@ -2781,74 +2294,295 @@ class HyperlinkDialog(wx.Dialog):
         sizer = wx.BoxSizer(wx.VERTICAL)
 
         label = wx.StaticText(self, label=message)
-        sizer.Add(item=label, proportion=0, flag=wx.ALIGN_CENTRE|wx.ALL, border=10)
+        sizer.Add(
+            item=label,
+            proportion=0,
+            flag=wx.ALIGN_CENTRE | wx.ALL,
+            border=10)
         hyperlinkLabel = hyperlinkLabel if hyperlinkLabel else hyperlink
-        hyperlinkCtrl = wx.HyperlinkCtrl(self, id=wx.ID_ANY,
-                                         label=hyperlinkLabel, url=hyperlink,
-                                         style=wx.HL_ALIGN_LEFT|wx.HL_CONTEXTMENU)
-        sizer.Add(item=hyperlinkCtrl, proportion=0, flag=wx.EXPAND|wx.ALL, border=10)        
+        hyperlinkCtrl = wx.HyperlinkCtrl(
+            self, id=wx.ID_ANY, label=hyperlinkLabel, url=hyperlink,
+            style=wx.HL_ALIGN_LEFT | wx.HL_CONTEXTMENU)
+        sizer.Add(
+            item=hyperlinkCtrl,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=10)
 
         btnsizer = self.CreateSeparatedButtonSizer(style)
-        sizer.Add(item=btnsizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
-    
+        sizer.Add(
+            item=btnsizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=10)
+
         self.SetSizer(sizer)
         sizer.Fit(self)
 
+
 class QuitDialog(wx.Dialog):
+
     def __init__(self, parent, title=_("Quit GRASS GIS"), id=wx.ID_ANY,
                  style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         """Dialog to quit GRASS
-        
+
         :param parent: window
         """
         wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-
-        self._icon = wx.StaticBitmap(parent=self.panel, id=wx.ID_ANY,
-                                     bitmap=wx.ArtProvider().GetBitmap(wx.ART_QUESTION, client=wx.ART_MESSAGE_BOX))
-
-        self.informLabel = wx.StaticText(parent=self.panel, id=wx.ID_ANY,
-                                         label=_("Do you want to quit GRASS including shell "
-                                                 "prompt or just close the GUI?"))
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnClose = wx.Button(parent = self.panel, id = wx.ID_NO,
-                                   label=_("Close GUI"))
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self._icon = wx.StaticBitmap(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            bitmap=wx.ArtProvider().GetBitmap(
+                wx.ART_QUESTION,
+                client=wx.ART_MESSAGE_BOX))
+
+        self.informLabel = wx.StaticText(
+            parent=self.panel, id=wx.ID_ANY, label=_(
+                "Do you want to quit GRASS including shell "
+                "prompt or just close the GUI?"))
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnClose = wx.Button(parent=self.panel, id=wx.ID_NO,
+                                  label=_("Close GUI"))
         self.btnClose.SetFocus()
-        self.btnQuit = wx.Button(parent = self.panel, id = wx.ID_YES,
-                                   label=_("Quit GRASS GIS"))
+        self.btnQuit = wx.Button(parent=self.panel, id=wx.ID_YES,
+                                 label=_("Quit GRASS GIS"))
         self.btnQuit.SetMinSize((130, self.btnQuit.GetSize()[1]))
         self.btnQuit.SetForegroundColour(wx.Colour(35, 142, 35))
-        
+
         self.btnClose.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btnQuit.Bind(wx.EVT_BUTTON, self.OnQuit)
-        
+
         self.__layout()
 
     def __layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
         btnSizer.Add(item=self.btnCancel, flag=wx.RIGHT, border=5)
         btnSizer.Add(item=self.btnClose, flag=wx.RIGHT, border=5)
         btnSizer.Add(item=self.btnQuit, flag=wx.RIGHT, border=5)
-        
+
         bodySizer = wx.BoxSizer(wx.HORIZONTAL)
         bodySizer.Add(item=self._icon, flag=wx.RIGHT, border=10)
         bodySizer.Add(item=self.informLabel, proportion=1, flag=wx.EXPAND)
-        
-        sizer.Add(item = bodySizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 15)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
+
+        sizer.Add(item=bodySizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=15)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
 
         self.panel.SetSizer(sizer)
         sizer.Fit(self)
         self.Layout()
-        
+
     def OnClose(self, event):
         self.EndModal(wx.ID_NO)
 
     def OnQuit(self, event):
         self.EndModal(wx.ID_YES)
-        
+
+
+class DefaultFontDialog(wx.Dialog):
+    """
+    Opens a file selection dialog to select default font
+    to use in all GRASS displays
+    """
+
+    def __init__(self, parent, title, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE |
+                 wx.RESIZE_BORDER,
+                 settings=UserSettings,
+                 type='font'):
+
+        self.settings = settings
+        self.type = type
+
+        wx.Dialog.__init__(self, parent, id, title, style=style)
+
+        panel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.tmp_file = grass.tempfile(False) + '.png'
+
+        self.fontdict, fontdict_reverse, self.fontlist = self.GetFonts()
+
+        border = wx.BoxSizer(wx.VERTICAL)
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Font settings"))
+        sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                              label=_("Select font:"))
+        gridSizer.Add(item=label,
+                      flag=wx.ALIGN_TOP,
+                      pos=(0, 0))
+
+        self.fontlb = wx.ListBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            pos=wx.DefaultPosition,
+            choices=self.fontlist,
+            style=wx.LB_SINGLE)
+        self.Bind(wx.EVT_LISTBOX, self.EvtListBox, self.fontlb)
+        self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtListBoxDClick, self.fontlb)
+
+        gridSizer.Add(item=self.fontlb,
+                      flag=wx.EXPAND, pos=(1, 0))
+
+        self.renderfont = wx.StaticBitmap(panel, bitmap=wx.EmptyBitmapRGBA(100, 50, 255, 255, 255))
+        gridSizer.Add(item=self.renderfont,
+                      flag=wx.EXPAND, pos=(2, 0))
+
+        if self.type == 'font':
+            if "GRASS_FONT" in os.environ:
+                self.font = os.environ["GRASS_FONT"]
+            else:
+                self.font = self.settings.Get(group='display',
+                                              key='font', subkey='type')
+            self.encoding = self.settings.Get(group='display',
+                                              key='font', subkey='encoding')
+
+            label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                  label=_("Character encoding:"))
+            gridSizer.Add(item=label,
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(3, 0))
+
+            self.textentry = wx.TextCtrl(parent=panel, id=wx.ID_ANY,
+                                         value=self.encoding)
+            gridSizer.Add(item=self.textentry,
+                          flag=wx.EXPAND, pos=(4, 0))
+
+            self.textentry.Bind(wx.EVT_TEXT, self.OnEncoding)
+
+        elif self.type == 'outputfont':
+            self.font = self.settings.Get(group='appearance',
+                                          key='outputfont', subkey='type')
+            self.fontsize = self.settings.Get(group='appearance',
+                                              key='outputfont', subkey='size')
+            label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                  label=_("Font size:"))
+            gridSizer.Add(item=label,
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(2, 0))
+
+            self.spin = wx.SpinCtrl(parent=panel, id=wx.ID_ANY)
+            if self.fontsize:
+                self.spin.SetValue(int(self.fontsize))
+            self.spin.Bind(wx.EVT_SPINCTRL, self.OnSizeSpin)
+            self.spin.Bind(wx.EVT_TEXT, self.OnSizeSpin)
+            gridSizer.Add(item=self.spin,
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(3, 0))
+
+        else:
+            return
+
+        if self.font:
+            self.fontlb.SetStringSelection(fontdict_reverse[self.font], True)
+
+        gridSizer.AddGrowableCol(0)
+        sizer.Add(item=gridSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL,
+                  border=5)
+
+        border.Add(item=sizer, proportion=1,
+                   flag=wx.ALL | wx.EXPAND, border=3)
+
+        btnsizer = wx.StdDialogButtonSizer()
+
+        btn = wx.Button(parent=panel, id=wx.ID_OK)
+        btn.SetDefault()
+        btnsizer.AddButton(btn)
+
+        btn = wx.Button(parent=panel, id=wx.ID_CANCEL)
+        btnsizer.AddButton(btn)
+        btnsizer.Realize()
+
+        border.Add(item=btnsizer, proportion=0,
+                   flag=wx.EXPAND | wx.ALIGN_RIGHT | wx.ALL, border=5)
+
+        panel.SetAutoLayout(True)
+        panel.SetSizer(border)
+        border.Fit(self)
+        row, col = gridSizer.GetItemPosition(self.renderfont)
+        self.renderfont.SetSize(gridSizer.GetCellSize(row, col))
+        if self.font:
+            self.RenderText(self.font, _("Example"), size=self.renderfont.GetSize())
+
+        self.Layout()
+
+    def OnEncoding(self, event):
+        self.encoding = event.GetString()
+
+    def EvtListBox(self, event):
+        self.font = self.fontdict[event.GetString()]
+        self.RenderText(self.font, "Example", size=self.renderfont.GetSize())
+        event.Skip()
+
+    def EvtListBoxDClick(self, event):
+        self.font = self.fontdict[event.GetString()]
+        event.Skip()
+
+    def OnSizeSpin(self, event):
+        self.fontsize = self.spin.GetValue()
+        event.Skip()
+
+    def GetFonts(self):
+        """
+        parses fonts directory or fretypecap file to get a list of fonts
+        for the listbox
+        """
+        fontlist = []
+        fontdict = {}
+        fontdict_reverse = {}
+        env = os.environ.copy()
+        driver = UserSettings.Get(group='display', key='driver', subkey='type')
+        if driver == 'png':
+            env['GRASS_RENDER_IMMEDIATE'] = 'png'
+        else:
+            env['GRASS_RENDER_IMMEDIATE'] = 'cairo'
+        ret = RunCommand('d.fontlist', flags='v',
+                         read=True,
+                         env=env)
+        if not ret:
+            return fontlist
+
+        dfonts = ret.splitlines()
+        for line in dfonts:
+            shortname = line.split('|')[0]
+            longname = line.split('|')[1]
+            # not sure when this happens?
+            if shortname.startswith('#'):
+                continue
+            fontlist.append(longname)
+            fontdict[longname] = shortname
+            fontdict_reverse[shortname] = longname
+        fontlist = natural_sort(list(set(fontlist)))
+
+        return fontdict, fontdict_reverse, fontlist
+
+    def RenderText(self, font, text, size):
+        """Renders an example text with the selected font and resets the bitmap widget"""
+        env = os.environ.copy()
+        driver = UserSettings.Get(group='display', key='driver', subkey='type')
+        if driver == 'png':
+            env['GRASS_RENDER_IMMEDIATE'] = 'png'
+        else:
+            env['GRASS_RENDER_IMMEDIATE'] = 'cairo'
+        env['GRASS_RENDER_WIDTH'] = str(size[0])
+        env['GRASS_RENDER_HEIGHT'] = str(size[1])
+        env['GRASS_RENDER_FILE'] = self.tmp_file
+        ret = RunCommand('d.text', text=text, font=font, align='cc', at='50,50',
+                         size=80, color='black', env=env)
+        if ret == 0:
+            self.renderfont.SetBitmap(wx.Bitmap(self.tmp_file))
+        else:
+            self.renderfont.SetBitmap(wx.EmptyBitmapRGBA(size[0], size[1]))
+        try_remove(self.tmp_file)
diff --git a/gui/wxpython/gui_core/forms.py b/gui/wxpython/gui_core/forms.py
index afdc8f5..e513972 100644
--- a/gui/wxpython/gui_core/forms.py
+++ b/gui/wxpython/gui_core/forms.py
@@ -68,31 +68,35 @@ try:
     import wx.lib.agw.flatnotebook as FN
 except ImportError:
     import wx.lib.flatnotebook as FN
-import wx.lib.colourselect     as csel
+import wx.lib.colourselect as csel
 import wx.lib.filebrowsebutton as filebrowse
 from wx.lib.newevent import NewEvent
 
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
 
 from grass.pydispatch.signal import Signal
 
 from grass.script import core as grass
 from grass.script import task as gtask
 
+from grass.script.setup import set_gui_path
+set_gui_path()
+
 from core import globalvar
 from gui_core.widgets import StaticWrapText, ScrolledPanel, ColorTablesComboBox, \
-                             BarscalesComboBox, NArrowsComboBox
-from gui_core.ghelp   import HelpPanel
-from gui_core         import gselect
-from core             import gcmd
-from core             import utils
+    BarscalesComboBox, NArrowsComboBox
+from gui_core.ghelp import HelpPanel
+from gui_core import gselect
+from core import gcmd
+from core import utils
 from core.utils import _
-from core.settings    import UserSettings
+from core.settings import UserSettings
 from gui_core.widgets import FloatValidator, GNotebook, FormNotebook, FormListbook
 from core.giface import Notification
+from gui_core.widgets import LayersList
 
 wxUpdateDialog, EVT_DIALOG_UPDATE = NewEvent()
 
@@ -101,39 +105,47 @@ wxUpdateDialog, EVT_DIALOG_UPDATE = NewEvent()
 #_blackList = { 'enabled' : False,
 #               'items'   : { 'r.buffer' : {'params' : ['input', 'output'],
 #                                           'flags' : ['z', 'overwrite']}}}
-_blackList = { 'enabled' : False,
-               'items'   : {} }
+_blackList = {'enabled': False,
+              'items': {}}
 
 
-def text_beautify(someString , width = 70):
+def text_beautify(someString, width=70):
     """Make really long texts shorter, clean up whitespace and remove
     trailing punctuation.
     """
     if width > 0:
-        return escape_ampersand(string.strip(
-                os.linesep.join(textwrap.wrap(utils.normalize_whitespace(someString), width)),
+        return escape_ampersand(
+            string.strip(
+                os.linesep.join(
+                    textwrap.wrap(
+                        utils.normalize_whitespace(someString),
+                        width)),
                 ".,;:"))
     else:
-        return escape_ampersand(string.strip(utils.normalize_whitespace(someString), ".,;:"))
-    
+        return escape_ampersand(string.strip(
+            utils.normalize_whitespace(someString), ".,;:"))
+
+
 def escape_ampersand(text):
     """Escapes ampersands with additional ampersand for GUI"""
     return string.replace(text, "&", "&&")
 
+
 class UpdateThread(Thread):
     """Update dialog widgets in the thread"""
+
     def __init__(self, parent, event, eventId, task):
         Thread.__init__(self)
-        
+
         self.parent = parent
         self.event = event
         self.eventId = eventId
         self.task = task
         self.setDaemon(True)
-        
+
         # list of functions which updates the dialog
         self.data = {}
-        
+
     def run(self):
         # get widget id
         if not self.eventId:
@@ -147,8 +159,8 @@ class UpdateThread(Thread):
                         self.eventId = p['wxId'][0]
             if self.eventId is None:
                 return
-        
-        p = self.task.get_param(self.eventId, element = 'wxId', raiseError = False)
+
+        p = self.task.get_param(self.eventId, element='wxId', raiseError=False)
         if not p or 'wxId-bind' not in p:
             return
 
@@ -157,40 +169,42 @@ class UpdateThread(Thread):
         # pType = p.get('prompt', '')
         # if not pType:
         #     return
-        
+
         # check for map/input parameter
-        pMap = self.task.get_param('map', raiseError = False)
-        
+        pMap = self.task.get_param('map', raiseError=False)
+
         if not pMap:
-            pMap = self.task.get_param('input', raiseError = False)
-        
+            pMap = self.task.get_param('input', raiseError=False)
+
         if pMap:
             map = pMap.get('value', '')
         else:
             map = None
-        
+
         # avoid running db.describe several times
         cparams = dict()
-        cparams[map] = { 'dbInfo' : None,
-                         'layers' : None, }
-        
+        cparams[map] = {'dbInfo': None,
+                        'layers': None, }
+
         # update reference widgets
         for uid in p['wxId-bind']:
             win = self.parent.FindWindowById(uid)
             if not win:
                 continue
-            
+
             name = win.GetName()
-            
-            ### @todo: replace name by isinstance() and signals
 
-            pBind = self.task.get_param(uid, element = 'wxId', raiseError = False)
+            # @todo: replace name by isinstance() and signals
+
+            pBind = self.task.get_param(uid, element='wxId', raiseError=False)
             if pBind:
                 pBind['value'] = ''
-            
-            # set appropriate types in t.* modules and g.list/remove element selections
+
+            # set appropriate types in t.* modules and g.list/remove element
+            # selections
             if name == 'Select':
-                type_param = self.task.get_param('type', element='name', raiseError=False)
+                type_param = self.task.get_param(
+                    'type', element='name', raiseError=False)
 
                 if 'all' in type_param.get('value'):
                     etype = type_param.get('values')[:]
@@ -206,25 +220,33 @@ class UpdateThread(Thread):
                     self.data[win.GetParent().SetElementList] = {'type': etype}
 
                 # t.(un)register has one type for 'input', 'maps'
-                maps_param = self.task.get_param('maps', element='name', raiseError=False)
+                maps_param = self.task.get_param(
+                    'maps', element='name', raiseError=False)
                 if self.task.get_name().startswith('t') and maps_param is not None:
                     if maps_param['wxId'][0] != uid:
-                        element_dict = {'raster': 'strds', 'vector': 'stvds', 'raster_3d': 'str3ds'}
-                        self.data[win.GetParent().SetType] = {'etype': element_dict[type_param.get('value')]}
+                        element_dict = {
+                            'raster': 'strds',
+                            'vector': 'stvds',
+                            'raster_3d': 'str3ds'}
+                        self.data[
+                            win.GetParent().SetType] = {
+                            'etype': element_dict[
+                                type_param.get('value')]}
 
             map = layer = None
             driver = db = None
             if name in ('LayerSelect', 'ColumnSelect'):
-                if p.get('element', '') == 'vector': # -> vector
+                if p.get('element', '') == 'vector':  # -> vector
                     # get map name
                     map = p.get('value', '')
-                    
+
                     # get layer
                     for bid in p['wxId-bind']:
-                        p = self.task.get_param(bid, element = 'wxId', raiseError = False)
+                        p = self.task.get_param(
+                            bid, element='wxId', raiseError=False)
                         if not p:
                             continue
-                        
+
                         if p.get('element', '') in ['layer', 'layer_all']:
                             layer = p.get('value', '')
                             if layer != '':
@@ -232,39 +254,43 @@ class UpdateThread(Thread):
                             else:
                                 layer = p.get('default', '')
                             break
-                        
-                elif p.get('element', '') in ['layer', 'layer_all']: # -> layer
+
+                elif p.get('element', '') in ['layer', 'layer_all']:  # -> layer
                     # get layer
                     layer = p.get('value', '')
                     if layer != '':
                         layer = p.get('value', '')
                     else:
                         layer = p.get('default', '')
-                    
+
                     # get map name
-                    pMapL = self.task.get_param(p['wxId'][0], element = 'wxId-bind', raiseError = False)
+                    pMapL = self.task.get_param(
+                        p['wxId'][0], element='wxId-bind', raiseError=False)
                     if pMapL:
                         map = pMapL.get('value', '')
-            
+
             if name == 'TableSelect' or \
                     (name == 'ColumnSelect' and not map):
-                pDriver = self.task.get_param('dbdriver', element = 'prompt', raiseError = False)
+                pDriver = self.task.get_param(
+                    'dbdriver', element='prompt', raiseError=False)
                 if pDriver:
                     driver = pDriver.get('value', '')
-                pDb = self.task.get_param('dbname', element = 'prompt', raiseError = False)
+                pDb = self.task.get_param(
+                    'dbname', element='prompt', raiseError=False)
                 if pDb:
                     db = pDb.get('value', '')
                 if name == 'ColumnSelect':
-                    pTable = self.task.get_param('dbtable', element = 'element', raiseError = False)
+                    pTable = self.task.get_param(
+                        'dbtable', element='element', raiseError=False)
                     if pTable:
                         table = pTable.get('value', '')
 
             if name == 'LayerSelect':
                 # determine format
                 native = True
-                
+
                 for id in pMap['wxId']:
-                    winVec  = self.parent.FindWindowById(id)
+                    winVec = self.parent.FindWindowById(id)
                     if winVec.GetName() == 'VectorFormat' and \
                             winVec.GetSelection() != 0:
                         native = False
@@ -272,114 +298,138 @@ class UpdateThread(Thread):
                 # TODO: update only if needed
                 if native:
                     if map:
-                        self.data[win.InsertLayers] = { 'vector' : map }
+                        self.data[win.InsertLayers] = {'vector': map}
                     else:
-                        self.data[win.InsertLayers] = { }
+                        self.data[win.InsertLayers] = {}
                 else:
                     if map:
-                        self.data[win.InsertLayers] = { 'dsn' : map.rstrip('@OGR') }
+                        self.data[win.InsertLayers] = {
+                            'dsn': map.rstrip('@OGR')}
                     else:
-                        self.data[win.InsertLayers] = { }
-            
+                        self.data[win.InsertLayers] = {}
+
             elif name == 'TableSelect':
-                self.data[win.InsertTables] = { 'driver' : driver,
-                                                'database' : db }
-                
+                self.data[win.InsertTables] = {'driver': driver,
+                                               'database': db}
+
             elif name == 'ColumnSelect':
                 if map:
                     if map in cparams:
                         if not cparams[map]['dbInfo']:
                             cparams[map]['dbInfo'] = gselect.VectorDBInfo(map)
-                        self.data[win.GetParent().InsertColumns] = { 'vector' : map, 'layer' : layer,
-                                                                     'dbInfo' : cparams[map]['dbInfo'] }
-                else: # table
+                        self.data[win.GetParent().InsertColumns] = {
+                            'vector': map, 'layer': layer,
+                            'dbInfo': cparams[map]['dbInfo']}
+                else:  # table
                     if driver and db:
-                        self.data[win.GetParent().InsertTableColumns] = { 'table' : pTable.get('value'),
-                                                                          'driver' : driver,
-                                                                          'database' : db }
+                        self.data[win.GetParent().InsertTableColumns] = {
+                            'table': pTable.get('value'),
+                            'driver': driver, 'database': db}
                     elif pTable:
-                        self.data[win.GetParent().InsertTableColumns] = { 'table'  : pTable.get('value') }
-            
+                        self.data[win.GetParent().InsertTableColumns] = {
+                            'table': pTable.get('value')}
+
             elif name == 'SubGroupSelect':
-                self.data[win.Insert] = { 'group' : p.get('value', '')}
+                self.data[win.Insert] = {'group': p.get('value', '')}
 
             elif name == 'SignatureSelect':
                 if p.get('prompt', 'group') == 'group':
                     group = p.get('value', '')
-                    pSubGroup = self.task.get_param('subgroup', element = 'prompt', raiseError = False)
+                    pSubGroup = self.task.get_param(
+                        'subgroup', element='prompt', raiseError=False)
                     if pSubGroup:
                         subgroup = pSubGroup.get('value', '')
                     else:
                         subgroup = None
                 else:
                     subgroup = p.get('value', '')
-                    pGroup = self.task.get_param('group', element = 'prompt', raiseError = False)
+                    pGroup = self.task.get_param(
+                        'group', element='prompt', raiseError=False)
                     if pGroup:
                         group = pGroup.get('value', '')
                     else:
                         group = None
-                
-                self.data[win.Insert] = { 'group' : group,
-                                          'subgroup' : subgroup}
-                
+
+                self.data[win.Insert] = {'group': group,
+                                         'subgroup': subgroup}
+
             elif name == 'LocationSelect':
-                pDbase = self.task.get_param('dbase', element = 'element', raiseError = False)
+                pDbase = self.task.get_param(
+                    'dbase', element='element', raiseError=False)
                 if pDbase:
-                    self.data[win.UpdateItems] = { 'dbase' : pDbase.get('value', '')}
+                    self.data[
+                        win.UpdateItems] = {
+                        'dbase': pDbase.get(
+                            'value', '')}
 
             elif name == 'MapsetSelect':
-                pDbase = self.task.get_param('dbase', element = 'element', raiseError = False)
-                pLocation = self.task.get_param('location', element = 'element', raiseError = False)
+                pDbase = self.task.get_param(
+                    'dbase', element='element', raiseError=False)
+                pLocation = self.task.get_param(
+                    'location', element='element', raiseError=False)
                 if pDbase and pLocation:
-                    self.data[win.UpdateItems] = { 'dbase' : pDbase.get('value', ''),
-                                                   'location' : pLocation.get('value', '')}
+                    self.data[
+                        win.UpdateItems] = {
+                        'dbase': pDbase.get(
+                            'value', ''), 'location': pLocation.get(
+                            'value', '')}
 
             elif name == 'ProjSelect':
-                pDbase = self.task.get_param('dbase', element = 'element', raiseError = False)
-                pLocation = self.task.get_param('location', element = 'element', raiseError = False)
-                pMapset = self.task.get_param('mapset', element = 'element', raiseError = False)
+                pDbase = self.task.get_param(
+                    'dbase', element='element', raiseError=False)
+                pLocation = self.task.get_param(
+                    'location', element='element', raiseError=False)
+                pMapset = self.task.get_param(
+                    'mapset', element='element', raiseError=False)
                 if pDbase and pLocation and pMapset:
-                    self.data[win.UpdateItems] = { 'dbase' : pDbase.get('value', ''),
-                                                   'location' : pLocation.get('value', ''),
-                                                   'mapset' : pMapset.get('value', '')}
+                    self.data[
+                        win.UpdateItems] = {
+                        'dbase': pDbase.get(
+                            'value', ''), 'location': pLocation.get(
+                            'value', ''), 'mapset': pMapset.get(
+                            'value', '')}
+
 
 def UpdateDialog(parent, event, eventId, task):
     return UpdateThread(parent, event, eventId, task)
 
+
 class UpdateQThread(Thread):
     """Update dialog widgets in the thread"""
     requestId = 0
+
     def __init__(self, parent, requestQ, resultQ, **kwds):
         Thread.__init__(self, **kwds)
-        
-        self.parent = parent # cmdPanel
+
+        self.parent = parent  # cmdPanel
         self.setDaemon(True)
-        
+
         self.requestQ = requestQ
         self.resultQ = resultQ
-        
+
         self.start()
-        
+
     def Update(self, callable, *args, **kwds):
-        UpdateQThread.requestId +=  1
-        
+        UpdateQThread.requestId += 1
+
         self.request = None
         self.requestQ.put((UpdateQThread.requestId, callable, args, kwds))
-        
+
         return UpdateQThread.requestId
-    
+
     def run(self):
         while True:
             requestId, callable, args, kwds = self.requestQ.get()
-            
+
             self.request = callable(*args, **kwds)
 
             self.resultQ.put((requestId, self.request.run()))
-           
+
             if self.request:
-                event = wxUpdateDialog(data = self.request.data)
+                event = wxUpdateDialog(data=self.request.data)
                 wx.PostEvent(self.parent, event)
 
+
 class TaskFrame(wx.Frame):
     """This is the Frame containing the dialog for options input.
 
@@ -394,87 +444,101 @@ class TaskFrame(wx.Frame):
     The command is checked and sent to the clipboard when clicking
     'Copy'.
     """
-    def __init__(self, parent, giface, task_description, id = wx.ID_ANY,
-                 get_dcmd = None, layer = None,
-                 style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL, **kwargs):
+
+    def __init__(self, parent, giface, task_description, id=wx.ID_ANY,
+                 get_dcmd=None, layer=None,
+                 style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL, **kwargs):
         self.get_dcmd = get_dcmd
-        self.layer    = layer
-        self.task     = task_description
-        self.parent   = parent             # LayerTree | Modeler | None | ...
-        self._giface  = giface
+        self.layer = layer
+        self.task = task_description
+        self.parent = parent             # LayerTree | Modeler | None | ...
+        self._giface = giface
 
         self.dialogClosing = Signal('TaskFrame.dialogClosing')
-        
+
         # module name + keywords
         title = self.task.get_name()
         try:
-            if self.task.keywords !=  ['']:
-                title +=   " [" + ', '.join(self.task.keywords) + "]"
+            if self.task.keywords != ['']:
+                title += " [" + ', '.join(self.task.keywords) + "]"
         except ValueError:
             pass
-        
-        wx.Frame.__init__(self, parent = parent, id = id, title = title,
-                          name = "MainFrame", style = style, **kwargs)
-        
-        self.locale = wx.Locale(language = wx.LANGUAGE_DEFAULT)
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
+
+        wx.Frame.__init__(self, parent=parent, id=id, title=title,
+                          name="MainFrame", style=style, **kwargs)
+
+        self.locale = wx.Locale(language=wx.LANGUAGE_DEFAULT)
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
         # statusbar
         self.CreateStatusBar()
-        
+
         # icon
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_dialog.ico'), wx.BITMAP_TYPE_ICO))
-        
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_dialog.ico'),
+                wx.BITMAP_TYPE_ICO))
+
         guisizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # set apropriate output window
         if self.parent:
             self.standalone = False
         else:
             self.standalone = True
-        
+
         # logo + description
         topsizer = wx.BoxSizer(wx.HORIZONTAL)
-        
+
         # GRASS logo
-        self.logo = wx.StaticBitmap(parent = self.panel,
-                                    bitmap = wx.Bitmap(name = os.path.join(globalvar.IMGDIR,
-                                                                           'grass_form.png'),
-                                                     type = wx.BITMAP_TYPE_PNG))
-        topsizer.Add(item = self.logo, proportion = 0, border = 3,
-                     flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL)
-        
+        self.logo = wx.StaticBitmap(
+            parent=self.panel,
+            bitmap=wx.Bitmap(
+                name=os.path.join(
+                    globalvar.IMGDIR,
+                    'grass_form.png'),
+                type=wx.BITMAP_TYPE_PNG))
+        topsizer.Add(item=self.logo, proportion=0, border=3,
+                     flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL)
+
         # add module description
         if self.task.label:
             module_desc = self.task.label + ' ' + self.task.description
         else:
             module_desc = self.task.description
-        
+
         self.description = StaticWrapText(parent=self.panel,
                                           label=module_desc)
-        topsizer.Add(item = self.description, proportion = 1, border = 5,
-                     flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
-        
-        guisizer.Add(item = topsizer, proportion = 0, flag = wx.EXPAND)
-        
+        topsizer.Add(item=self.description, proportion=1, border=5,
+                     flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+
+        guisizer.Add(item=topsizer, proportion=0, flag=wx.EXPAND)
+
         self.panel.SetSizerAndFit(guisizer)
         self.Layout()
-        
+
         # notebooks
-        self.notebookpanel = CmdPanel(parent = self.panel, giface = self._giface, task = self.task,
-                                      frame = self)
+        self.notebookpanel = CmdPanel(
+            parent=self.panel,
+            giface=self._giface,
+            task=self.task,
+            frame=self)
         self._gconsole = self.notebookpanel._gconsole
         if self._gconsole:
             self._gconsole.mapCreated.connect(self.OnMapCreated)
-            self._gconsole.updateMap.connect(lambda: self._giface.updateMap.emit())
+            self._gconsole.updateMap.connect(
+                lambda: self._giface.updateMap.emit())
         self.goutput = self.notebookpanel.goutput
         if self.goutput:
-            self.goutput.showNotification.connect(lambda message: self.SetStatusText(message))
-        
+            self.goutput.showNotification.connect(
+                lambda message: self.SetStatusText(message))
+
         self.notebookpanel.OnUpdateValues = self.updateValuesHook
-        guisizer.Add(item = self.notebookpanel, proportion = 1, flag = wx.EXPAND)
-        
+        guisizer.Add(item=self.notebookpanel, proportion=1, flag=wx.EXPAND)
+
         # status bar
         status_text = _("Enter parameters for '") + self.task.name + "'"
         try:
@@ -482,9 +546,9 @@ class TaskFrame(wx.Frame):
             self.updateValuesHook()
         except ValueError:
             self.SetStatusText(status_text)
-        
+
         # buttons
-        btnsizer = wx.BoxSizer(orient = wx.HORIZONTAL)
+        btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
         # cancel
         if sys.platform == 'darwin':
             # stock id automatically adds ctrl-c shortcut to close dialog
@@ -505,30 +569,31 @@ class TaskFrame(wx.Frame):
         accelTableList.append((wx.ACCEL_CTRL, ord('Q'), wx.ID_CLOSE))
         # TODO: bind Ctrl-t for tile windows here (trac #2004)
 
-        if self.get_dcmd is not None: # A callback has been set up
-            btn_apply = wx.Button(parent = self.panel, id = wx.ID_APPLY)
-            btn_ok = wx.Button(parent = self.panel, id = wx.ID_OK)
+        if self.get_dcmd is not None:  # A callback has been set up
+            btn_apply = wx.Button(parent=self.panel, id=wx.ID_APPLY)
+            btn_ok = wx.Button(parent=self.panel, id=wx.ID_OK)
             btn_ok.SetDefault()
 
-            btnsizer.Add(item = btn_apply, proportion = 0,
-                         flag = wx.ALL | wx.ALIGN_CENTER,
-                         border = 10)
-            btnsizer.Add(item = btn_ok, proportion = 0,
-                         flag = wx.ALL | wx.ALIGN_CENTER,
-                         border = 10)
-            
+            btnsizer.Add(item=btn_apply, proportion=0,
+                         flag=wx.ALL | wx.ALIGN_CENTER,
+                         border=10)
+            btnsizer.Add(item=btn_ok, proportion=0,
+                         flag=wx.ALL | wx.ALIGN_CENTER,
+                         border=10)
+
             btn_apply.Bind(wx.EVT_BUTTON, self.OnApply)
             btn_ok.Bind(wx.EVT_BUTTON, self.OnOK)
-        else: # We're standalone
+        else:  # We're standalone
             # run
-            self.btn_run = wx.Button(parent = self.panel, id = wx.ID_OK, label =  _("&Run"))
+            self.btn_run = wx.Button(
+                parent=self.panel, id=wx.ID_OK, label=_("&Run"))
             self.btn_run.SetToolTipString(_("Run the command (Ctrl+R)"))
             self.btn_run.SetDefault()
             self.btn_run.SetForegroundColour(wx.Colour(35, 142, 35))
-            
-            btnsizer.Add(item = self.btn_run, proportion = 0,
-                         flag = wx.ALL | wx.ALIGN_CENTER,
-                         border = 10)
+
+            btnsizer.Add(item=self.btn_run, proportion=0,
+                         flag=wx.ALL | wx.ALIGN_CENTER,
+                         border=10)
 
             self.btn_run.Bind(wx.EVT_BUTTON, self.OnRun)
             self.Bind(wx.EVT_MENU, self.OnRun, id=wx.ID_OK)
@@ -540,27 +605,36 @@ class TaskFrame(wx.Frame):
             self.btn_clipboard = wx.Button(parent=self.panel, label=_("Copy"))
         else:
             self.btn_clipboard = wx.Button(parent=self.panel, id=wx.ID_COPY)
-        self.btn_clipboard.SetToolTipString(_("Copy the current command string to the clipboard"))
+        self.btn_clipboard.SetToolTipString(
+            _("Copy the current command string to the clipboard"))
         btnsizer.Add(item=self.btn_clipboard, proportion=0,
-                         flag=wx.ALL | wx.ALIGN_CENTER,
-                         border=10)
+                     flag=wx.ALL | wx.ALIGN_CENTER,
+                     border=10)
         self.btn_clipboard.Bind(wx.EVT_BUTTON, self.OnCopy)
 
         # help
-        self.btn_help = wx.Button(parent = self.panel, id = wx.ID_HELP)
-        self.btn_help.SetToolTipString(_("Show manual page of the command (Ctrl+H)"))
+        self.btn_help = wx.Button(parent=self.panel, id=wx.ID_HELP)
+        self.btn_help.SetToolTipString(
+            _("Show manual page of the command (Ctrl+H)"))
         self.btn_help.Bind(wx.EVT_BUTTON, self.OnHelp)
         self.Bind(wx.EVT_MENU, self.OnHelp, id=wx.ID_HELP)
         accelTableList.append((wx.ACCEL_CTRL, ord('H'), wx.ID_HELP))
 
         if self.notebookpanel.notebook.GetPageIndexByName('manual') < 0:
             self.btn_help.Hide()
-        
+
         # add help button
-        btnsizer.Add(item = self.btn_help, proportion = 0, flag = wx.ALL | wx.ALIGN_CENTER, border = 10)
-        
-        guisizer.Add(item = btnsizer, proportion = 0, flag = wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT,
-                     border = 30)
+        btnsizer.Add(
+            item=self.btn_help,
+            proportion=0,
+            flag=wx.ALL | wx.ALIGN_CENTER,
+            border=10)
+
+        guisizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT,
+            border=30)
         # abort key bindings
         abortId = wx.NewId()
         self.Bind(wx.EVT_MENU, self.OnAbort, id=abortId)
@@ -568,78 +642,101 @@ class TaskFrame(wx.Frame):
         # set accelerator table
         accelTable = wx.AcceleratorTable(accelTableList)
         self.SetAcceleratorTable(accelTable)
-        
+
         if self._giface and self._giface.GetLayerTree():
             addLayer = False
             for p in self.task.params:
                 if p.get('age', 'old') == 'new' and \
-                   p.get('prompt', '') in ('raster', 'vector', '3d-raster'):
+                   p.get('prompt', '') in ('raster', 'vector', 'raster_3d'):
                     addLayer = True
-            
+
             if addLayer:
                 # add newly created map into layer tree
-                self.addbox = wx.CheckBox(parent = self.panel,
-                                          label = _('Add created map(s) into layer tree'), style = wx.NO_BORDER)
-                self.addbox.SetValue(UserSettings.Get(group = 'cmd', key = 'addNewLayer', subkey = 'enabled'))
-                guisizer.Add(item = self.addbox, proportion = 0,
-                             flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                             border = 5)
-        
+                self.addbox = wx.CheckBox(
+                    parent=self.panel,
+                    label=_('Add created map(s) into layer tree'),
+                    style=wx.NO_BORDER)
+                self.addbox.SetValue(
+                    UserSettings.Get(
+                        group='cmd',
+                        key='addNewLayer',
+                        subkey='enabled'))
+                guisizer.Add(item=self.addbox, proportion=0,
+                             flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                             border=5)
+
         hasNew = False
         for p in self.task.params:
             if p.get('age', 'old') == 'new':
                 hasNew = True
                 break
-        
+
         if self.get_dcmd is None and hasNew:
             # close dialog when command is terminated
-            self.closebox = wx.CheckBox(parent = self.panel,
-                                        label = _('Close dialog on finish'), style = wx.NO_BORDER)
-            self.closebox.SetValue(UserSettings.Get(group = 'cmd', key = 'closeDlg', subkey = 'enabled'))
-            self.closebox.SetToolTipString(_("Close dialog when command is successfully finished. "
-                                             "Change this settings in Preferences dialog ('Command' tab)."))
-            guisizer.Add(item = self.closebox, proportion = 0,
-                         flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                         border = 5)
+            self.closebox = wx.CheckBox(
+                parent=self.panel,
+                label=_('Close dialog on finish'),
+                style=wx.NO_BORDER)
+            self.closebox.SetValue(
+                UserSettings.Get(
+                    group='cmd',
+                    key='closeDlg',
+                    subkey='enabled'))
+            self.closebox.SetToolTipString(
+                _(
+                    "Close dialog when command is successfully finished. "
+                    "Change this settings in Preferences dialog ('Command' tab)."))
+            guisizer.Add(item=self.closebox, proportion=0,
+                         flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                         border=5)
         # bindings
-        self.Bind(wx.EVT_CLOSE,  self.OnCancel)
-        
+        self.Bind(wx.EVT_CLOSE, self.OnCancel)
+
         # do layout
         # called automatically by SetSizer()
-        self.panel.SetAutoLayout(True) 
+        self.panel.SetAutoLayout(True)
         self.panel.SetSizerAndFit(guisizer)
-        
+
         sizeFrame = self.GetBestSize()
         self.SetMinSize(sizeFrame)
-        
+
         if hasattr(self, "closebox"):
             scale = 0.33
         else:
             scale = 0.50
-        self.SetSize(wx.Size(sizeFrame[0], sizeFrame[1] + scale * max(self.notebookpanel.panelMinHeight,
-                                                                      self.notebookpanel.constrained_size[1])))
-        
+        self.SetSize(
+            wx.Size(
+                sizeFrame[0],
+                sizeFrame[1] + scale * max(
+                    self.notebookpanel.panelMinHeight,
+                    self.notebookpanel.constrained_size[1])))
+
         # thread to update dialog
         # create queues
         self.requestQ = Queue.Queue()
         self.resultQ = Queue.Queue()
-        self.updateThread = UpdateQThread(self.notebookpanel, self.requestQ, self.resultQ)
-        
+        self.updateThread = UpdateQThread(
+            self.notebookpanel, self.requestQ, self.resultQ)
+
         self.Layout()
-        
+
         # keep initial window size limited for small screens
         width, height = self.GetSizeTuple()
         self.SetSize(wx.Size(min(width, 650),
                              min(height, 500)))
-        
+
         # fix goutput's pane size (required for Mac OSX)
         if self.goutput:
             self.goutput.SetSashPosition(int(self.GetSize()[1] * .75))
-        
-    def updateValuesHook(self, event = None):
+
+    def updateValuesHook(self, event=None):
         """Update status bar data"""
-        self.SetStatusText(' '.join([gcmd.DecodeString(each) if isinstance(each, str) else each
-                                     for each in self.notebookpanel.createCmd(ignoreErrors=True)]))
+        self.SetStatusText(
+            ' '.join(
+                [gcmd.DecodeString(each)
+                 if isinstance(each, str) else each
+                 for each in self.notebookpanel.createCmd(
+                     ignoreErrors=True)]))
         if event:
             event.Skip()
 
@@ -660,10 +757,10 @@ class TaskFrame(wx.Frame):
             self.btn_run.Enable(True)
 
         if hasattr(self, "get_dcmd") and \
-                    self.get_dcmd is None and \
-                    hasattr(self, "closebox") and \
-                    self.closebox.IsChecked() and \
-                    (event.returncode == 0):
+                self.get_dcmd is None and \
+                hasattr(self, "closebox") and \
+                self.closebox.IsChecked() and \
+                (event.returncode == 0):
             # was closed also when aborted but better is leave it open
             wx.FutureCall(2000, self.Close)
 
@@ -677,10 +774,10 @@ class TaskFrame(wx.Frame):
             add = True
         else:
             add = False
-        
+
         if self._giface:
             self._giface.mapCreated.emit(name=name, ltype=ltype, add=add)
-    
+
     def OnOK(self, event):
         """OK button pressed"""
         cmd = self.OnApply(event)
@@ -690,14 +787,14 @@ class TaskFrame(wx.Frame):
     def OnApply(self, event):
         """Apply the command"""
         if self._giface and hasattr(self._giface, "_model"):
-            cmd = self.createCmd(ignoreErrors = True, ignoreRequired = True)
+            cmd = self.createCmd(ignoreErrors=True, ignoreRequired=True)
         else:
             cmd = self.createCmd()
-        
+
         if cmd is not None and self.get_dcmd is not None:
             # return d.* command to layer tree for rendering
-            self.get_dcmd(cmd, self.layer, {"params": self.task.params, 
-                                            "flags" : self.task.flags},
+            self.get_dcmd(cmd, self.layer, {"params": self.task.params,
+                                            "flags": self.task.flags},
                           self)
             # echo d.* command to output console
             # self.parent.writeDCommand(cmd)
@@ -707,62 +804,64 @@ class TaskFrame(wx.Frame):
     def OnRun(self, event):
         """Run the command"""
         cmd = self.createCmd()
-        
+
         if not cmd or len(cmd) < 1:
             return
-        
+
         ret = 0
-        if self.standalone or cmd[0][0:2] !=  "d.":
+        if self.standalone or cmd[0][0:2] != "d.":
             # Send any non-display command to parent window (probably wxgui.py)
             # put to parents switch to 'Command output'
             self.notebookpanel.notebook.SetSelectionByName('output')
-            
+
             try:
                 if self.task.path:
-                    cmd[0] = self.task.path # full path
-                
-                ret = self._gconsole.RunCmd(cmd, onDone = self.OnDone)
+                    cmd[0] = self.task.path  # full path
+
+                ret = self._gconsole.RunCmd(cmd, onDone=self.OnDone)
             except AttributeError as e:
-                print >> sys.stderr, "%s: Probably not running in wxgui.py session?" % (e)
-                print >> sys.stderr, "parent window is: %s" % (str(self.parent))
+                print >> sys.stderr, "%s: Probably not running in wxgui.py session?" % (
+                    e)
+                print >>sys.stderr, "parent window is: %s" % (
+                    str(self.parent))
         else:
             gcmd.Command(cmd)
-        
+
         if ret != 0:
             self.notebookpanel.notebook.SetSelection(0)
             return
-        
+
         # update buttons status
         for btn in (self.btn_run,
                     self.btn_cancel,
                     self.btn_clipboard,
                     self.btn_help):
             btn.Enable(False)
-        
+
     def OnAbort(self, event):
         """Abort running command"""
         from core.gconsole import wxCmdAbort
-        event = wxCmdAbort(aborted = True)
+        event = wxCmdAbort(aborted=True)
         wx.PostEvent(self._gconsole, event)
 
     def OnCopy(self, event):
         """Copy the command"""
         cmddata = wx.TextDataObject()
         # list -> string
-        cmdlist = self.createCmd(ignoreErrors = True)
+        cmdlist = self.createCmd(ignoreErrors=True)
         # TODO: better protect whitespace with quotes
         for i in range(1, len(cmdlist)):
             if ' ' in cmdlist[i]:
-                optname, val =  cmdlist[i].split("=", 1)
+                optname, val = cmdlist[i].split("=", 1)
                 cmdlist[i] = '%s="%s"' % (optname, val)
         cmdstring = ' '.join(cmdlist)
         cmddata.SetText(cmdstring)
         if wx.TheClipboard.Open():
-#            wx.TheClipboard.UsePrimarySelection(True)
+            #            wx.TheClipboard.UsePrimarySelection(True)
             wx.TheClipboard.SetData(cmddata)
             wx.TheClipboard.Close()
-            self.SetStatusText(_("'%s' copied to clipboard") % \
-                                    (cmdstring))
+            self.SetStatusText(_("'%s' copied to clipboard") %
+                               (cmdstring))
 
     def OnCancel(self, event):
         """Cancel button pressed"""
@@ -772,17 +871,18 @@ class TaskFrame(wx.Frame):
                 self.parent and \
                 self.parent.GetName() in ('LayerTree',
                                           'MapWindow'):
-            # display decorations and 
+            # display decorations and
             # pressing OK or cancel after setting layer properties
-            if self.task.name in ['d.barscale','d.legend', 'd.northarrow', 'd.histogram'] \
-                or len(self.parent.GetLayerInfo(self.layer, key = 'cmd')) >=  1:
+            if self.task.name in ['d.barscale', 'd.legend', 'd.northarrow', 'd.histogram', 'd.text', 'd.legend.vect'] \
+                    or len(self.parent.GetLayerInfo(self.layer, key='cmd')) >= 1:
                 self.Hide()
             # canceled layer with nothing set
-            elif len(self.parent.GetLayerInfo(self.layer, key = 'cmd')) < 1:
+            elif len(self.parent.GetLayerInfo(self.layer, key='cmd')) < 1:
                 try:
                     self.parent.Delete(self.layer)
                 except ValueError:
-                    # happens when closing dialog of a new layer which was removed from tree
+                    # happens when closing dialog of a new layer which was
+                    # removed from tree
                     pass
                 self.Destroy()
         else:
@@ -794,172 +894,200 @@ class TaskFrame(wx.Frame):
         if self.notebookpanel.notebook.GetPageIndexByName('manual') > -1:
             self.notebookpanel.notebook.SetSelectionByName('manual')
             self.notebookpanel.OnPageChange(None)
-        
-        if event:    
+
+        if event:
             event.Skip()
-        
-    def createCmd(self, ignoreErrors = False, ignoreRequired = False):
+
+    def createCmd(self, ignoreErrors=False, ignoreRequired=False):
         """Create command string (python list)"""
-        return self.notebookpanel.createCmd(ignoreErrors = ignoreErrors,
-                                            ignoreRequired = ignoreRequired)
+        return self.notebookpanel.createCmd(ignoreErrors=ignoreErrors,
+                                            ignoreRequired=ignoreRequired)
+
 
 class CmdPanel(wx.Panel):
     """A panel containing a notebook dividing in tabs the different
     guisections of the GRASS cmd.
     """
-    def __init__(self, parent, giface, task, id = wx.ID_ANY, frame = None, *args, **kwargs):
+
+    def __init__(self, parent, giface, task, id=wx.ID_ANY,
+                 frame=None, *args, **kwargs):
         if frame:
             self.parent = frame
         else:
             self.parent = parent
         self.task = task
         self._giface = giface
-        
-        wx.Panel.__init__(self, parent, id = id, *args, **kwargs)
+
+        wx.Panel.__init__(self, parent, id=id, *args, **kwargs)
 
         self.mapCreated = Signal
-        self.updateMap  = Signal
+        self.updateMap = Signal
 
         # Determine tab layout
         sections = []
         is_section = {}
-        not_hidden = [ p for p in self.task.params + self.task.flags if not p.get('hidden', False) == True ]
+        not_hidden = [
+            p for p in self.task.params +
+            self.task.flags if not p.get(
+                'hidden',
+                False) == True]
 
-        self.label_id = [] # wrap titles on resize
+        self.label_id = []  # wrap titles on resize
 
         self.Bind(wx.EVT_SIZE, self.OnSize)
-        
+
         for task in not_hidden:
             if task.get('required', False) and not task.get('guisection', ''):
-                # All required go into Main, even if they had defined another guisection
+                # All required go into Main, even if they had defined another
+                # guisection
                 task['guisection'] = _('Required')
-            if task.get('guisection','') == '':
+            if task.get('guisection', '') == '':
                 # Undefined guisections end up into Options
                 task['guisection'] = _('Optional')
             if task['guisection'] not in is_section:
-                # We do it like this to keep the original order, except for Main which goes first
+                # We do it like this to keep the original order, except for
+                # Main which goes first
                 is_section[task['guisection']] = 1
                 sections.append(task['guisection'])
             else:
-                is_section[ task['guisection'] ] +=  1
+                is_section[task['guisection']] += 1
         del is_section
 
         # 'Required' tab goes first, 'Optional' as the last one
-        for (newidx,content) in [ (0,_('Required')), (len(sections)-1,_('Optional')) ]:
+        for (newidx, content) in [(0, _('Required')),
+                                  (len(sections) - 1, _('Optional'))]:
             if content in sections:
                 idx = sections.index(content)
-                sections[idx:idx+1] = []
-                sections[newidx:newidx] =  [content]
+                sections[idx:idx + 1] = []
+                sections[newidx:newidx] = [content]
 
-        panelsizer = wx.BoxSizer(orient = wx.VERTICAL)
+        panelsizer = wx.BoxSizer(orient=wx.VERTICAL)
 
         # build notebook
-        style = UserSettings.Get(group = 'appearance', key = 'commandNotebook', subkey = 'selection')
-        if style == 0: # basic top
-            self.notebook = FormNotebook(self, style = wx.BK_TOP)
+        style = UserSettings.Get(
+            group='appearance',
+            key='commandNotebook',
+            subkey='selection')
+        if style == 0:  # basic top
+            self.notebook = FormNotebook(self, style=wx.BK_TOP)
             self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChange)
-        elif style == 1: # basic left
-            self.notebook = FormNotebook(self, style = wx.BK_LEFT)
+        elif style == 1:  # basic left
+            self.notebook = FormNotebook(self, style=wx.BK_LEFT)
             self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChange)
-        elif style == 2: # fancy green
-            self.notebook = GNotebook(self, style = globalvar.FNPageStyle | FN.FNB_NO_X_BUTTON )
+        elif style == 2:  # fancy green
+            self.notebook = GNotebook(
+                self, style=globalvar.FNPageStyle | FN.FNB_NO_X_BUTTON)
             self.notebook.SetTabAreaColour(globalvar.FNPageColor)
-            self.notebook.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChange)
+            self.notebook.Bind(
+                FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+                self.OnPageChange)
         elif style == 3:
-            self.notebook = FormListbook(self, style = wx.BK_LEFT)
+            self.notebook = FormListbook(self, style=wx.BK_LEFT)
             self.notebook.Bind(wx.EVT_LISTBOOK_PAGE_CHANGED, self.OnPageChange)
         self.notebook.Refresh()
 
         tab = {}
         tabsizer = {}
         for section in sections:
-            tab[section] = ScrolledPanel(parent = self.notebook)
+            tab[section] = ScrolledPanel(parent=self.notebook)
             tab[section].SetScrollRate(10, 10)
-            tabsizer[section] = wx.BoxSizer(orient = wx.VERTICAL)
-        
+            tabsizer[section] = wx.BoxSizer(orient=wx.VERTICAL)
 
         #
         # flags
         #
-        visible_flags = [ f for f in self.task.flags if not f.get('hidden', False) == True ]
+        visible_flags = [
+            f for f in self.task.flags if not f.get(
+                'hidden', False) == True]
         for f in visible_flags:
             # we don't want another help (checkbox appeared in r58783)
             if f['name'] == 'help':
                 continue
-            which_sizer = tabsizer[ f['guisection'] ]
-            which_panel = tab[ f['guisection'] ]
+            which_sizer = tabsizer[f['guisection']]
+            which_panel = tab[f['guisection']]
             # if label is given: description -> tooltip
-            if f.get('label','') !=  '':
+            if f.get('label', '') != '':
                 title = text_beautify(f['label'])
-                tooltip = text_beautify(f['description'], width = -1)
+                tooltip = text_beautify(f['description'], width=-1)
             else:
                 title = text_beautify(f['description'])
                 tooltip = None
             title_sizer = wx.BoxSizer(wx.HORIZONTAL)
-            rtitle_txt = wx.StaticText(parent = which_panel,
-                                       label = '(' + f['name'] + ')')
-            chk = wx.CheckBox(parent = which_panel, label = title, style = wx.NO_BORDER)
+            rtitle_txt = wx.StaticText(parent=which_panel,
+                                       label='(' + f['name'] + ')')
+            chk = wx.CheckBox(
+                parent=which_panel,
+                label=title,
+                style=wx.NO_BORDER)
             self.label_id.append(chk.GetId())
             if tooltip:
                 chk.SetToolTipString(tooltip)
             chk.SetValue(f.get('value', False))
-            title_sizer.Add(item = chk, proportion = 1,
-                            flag = wx.EXPAND)
-            title_sizer.Add(item = rtitle_txt, proportion = 0,
-                            flag = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
-            which_sizer.Add(item = title_sizer, proportion = 0,
-                            flag = wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border = 5)
-            f['wxId'] = [ chk.GetId(), ]
+            title_sizer.Add(item=chk, proportion=1,
+                            flag=wx.EXPAND)
+            title_sizer.Add(item=rtitle_txt, proportion=0,
+                            flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL)
+            which_sizer.Add(
+                item=title_sizer,
+                proportion=0,
+                flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT,
+                border=5)
+            f['wxId'] = [chk.GetId(), ]
             chk.Bind(wx.EVT_CHECKBOX, self.OnSetValue)
-            
-            if self.parent.GetName() == 'MainFrame' and (self._giface and hasattr(self._giface, "_model")):
-                parChk = wx.CheckBox(parent = which_panel, id = wx.ID_ANY,
-                                     label = _("Parameterized in model"))
+
+            if self.parent.GetName() == 'MainFrame' and (
+                    self._giface and hasattr(self._giface, "_model")):
+                parChk = wx.CheckBox(parent=which_panel, id=wx.ID_ANY,
+                                     label=_("Parameterized in model"))
                 parChk.SetName('ModelParam')
                 parChk.SetValue(f.get('parameterized', False))
                 if 'wxId' in f:
                     f['wxId'].append(parChk.GetId())
                 else:
-                    f['wxId'] = [ parChk.GetId() ]
+                    f['wxId'] = [parChk.GetId()]
                 parChk.Bind(wx.EVT_CHECKBOX, self.OnSetValue)
-                which_sizer.Add(item = parChk, proportion = 0,
-                                flag = wx.LEFT, border = 20)
-            
+                which_sizer.Add(item=parChk, proportion=0,
+                                flag=wx.LEFT, border=20)
+
             if f['name'] in ('verbose', 'quiet'):
                 chk.Bind(wx.EVT_CHECKBOX, self.OnVerbosity)
-                vq = UserSettings.Get(group = 'cmd', key = 'verbosity', subkey = 'selection')
+                vq = UserSettings.Get(
+                    group='cmd', key='verbosity', subkey='selection')
                 if f['name'] == vq:
                     chk.SetValue(True)
                     f['value'] = True
-            
+
             if f['name'] == 'overwrite':
-                value = UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled')
-                if value: # override only when enabled
+                value = UserSettings.Get(
+                    group='cmd', key='overwrite', subkey='enabled')
+                if value:  # override only when enabled
                     f['value'] = value
                     chk.SetValue(f['value'])
-        
+
         #
         # parameters
         #
-        visible_params = [ p for p in self.task.params if not p.get('hidden', False) == True ]
-        
+        visible_params = [
+            p for p in self.task.params if not p.get(
+                'hidden', False) == True]
+
         try:
             first_param = visible_params[0]
         except IndexError:
             first_param = None
-        
+
         for p in visible_params:
             which_sizer = tabsizer[p['guisection']]
             which_panel = tab[p['guisection']]
             # if label is given -> label and description -> tooltip
             # otherwise description -> lavel
-            if p.get('label','') !=  '':
+            if p.get('label', '') != '':
                 title = text_beautify(p['label'])
-                tooltip = text_beautify(p['description'], width = -1)
+                tooltip = text_beautify(p['description'], width=-1)
             else:
                 title = text_beautify(p['description'])
                 tooltip = None
-            
+
             prompt = p.get('prompt', '')
 
             # title sizer (description, name, type)
@@ -967,10 +1095,10 @@ class CmdPanel(wx.Panel):
                     p.get('multiple', False) and \
                     p.get('gisprompt', False) == False and \
                     p.get('type', '') == 'string':
-                title_txt = wx.StaticBox(parent = which_panel, id = wx.ID_ANY)
+                title_txt = wx.StaticBox(parent=which_panel, id=wx.ID_ANY)
             else:
                 title_sizer = wx.BoxSizer(wx.HORIZONTAL)
-                title_txt = wx.StaticText(parent = which_panel)
+                title_txt = wx.StaticText(parent=which_panel)
                 if p['key_desc']:
                     ltype = ','.join(p['key_desc'])
                 else:
@@ -982,183 +1110,241 @@ class CmdPanel(wx.Panel):
                     required_txt.SetToolTipString(_("This option is required"))
                 else:
                     required_txt = wx.StaticText(parent=which_panel, label="")
-                rtitle_txt = wx.StaticText(parent = which_panel,
-                                           label = '(' + p['name'] + '=' + ltype + ')')
-                title_sizer.Add(item = title_txt, proportion = 0,
-                                flag = wx.LEFT | wx.TOP | wx.EXPAND, border = 5)
-                title_sizer.Add(item = required_txt, proportion=1,
-                                flag = wx.EXPAND, border=0)
-                title_sizer.Add(item = rtitle_txt, proportion = 0,
-                                flag = wx.ALIGN_RIGHT | wx.RIGHT | wx.TOP, border = 5)
-                which_sizer.Add(item = title_sizer, proportion = 0,
-                                flag = wx.EXPAND)
+                rtitle_txt = wx.StaticText(
+                    parent=which_panel,
+                    label='(' + p['name'] + '=' + ltype + ')')
+                title_sizer.Add(item=title_txt, proportion=0,
+                                flag=wx.LEFT | wx.TOP | wx.EXPAND, border=5)
+                title_sizer.Add(item=required_txt, proportion=1,
+                                flag=wx.EXPAND, border=0)
+                title_sizer.Add(
+                    item=rtitle_txt,
+                    proportion=0,
+                    flag=wx.ALIGN_RIGHT | wx.RIGHT | wx.TOP,
+                    border=5)
+                which_sizer.Add(item=title_sizer, proportion=0,
+                                flag=wx.EXPAND)
             self.label_id.append(title_txt.GetId())
 
             # title expansion
-            if p.get('multiple', False) and len(p.get('values','')) == 0:
+            if p.get('multiple', False) and len(p.get('values', '')) == 0:
                 title = _("[multiple]") + " " + title
-                if p.get('value','') ==  '' :
-                    p['value'] = p.get('default','')
+                if p.get('value', '') == '':
+                    p['value'] = p.get('default', '')
 
             if (len(p.get('values', [])) > 0):
-                valuelist      = map(str, p.get('values',[]))
-                valuelist_desc = map(unicode, p.get('values_desc',[]))
+                valuelist = map(str, p.get('values', []))
+                valuelist_desc = map(unicode, p.get('values_desc', []))
                 required_text = "*" if p.get('required', False) else ""
                 if p.get('multiple', False) and \
-                        p.get('gisprompt',False) == False and \
+                        p.get('gisprompt', False) == False and \
                         p.get('type', '') == 'string':
-                    title_txt.SetLabel(" %s:%s  (%s=%s) " % (title, required_text, p['name'], p['type']))
-                    stSizer = wx.StaticBoxSizer(box = title_txt, orient = wx.VERTICAL)
+                    title_txt.SetLabel(
+                        " %s:%s  (%s=%s) " %
+                        (title, required_text, p['name'], p['type']))
+                    stSizer = wx.StaticBoxSizer(
+                        box=title_txt, orient=wx.VERTICAL)
                     if valuelist_desc:
-                        hSizer = wx.FlexGridSizer(cols = 1, vgap = 1)
+                        hSizer = wx.FlexGridSizer(cols=1, vgap=1)
                     else:
-                        hSizer = wx.FlexGridSizer(cols = 6, vgap = 1, hgap = 1)
+                        hSizer = wx.FlexGridSizer(cols=6, vgap=1, hgap=1)
                     isEnabled = {}
                     # copy default values
                     if p['value'] == '':
                         p['value'] = p.get('default', '')
-                        
+
                     for defval in p.get('value', '').split(','):
-                        isEnabled[ defval ] = 'yes'
+                        isEnabled[defval] = 'yes'
                         # for multi checkboxes, this is an array of all wx IDs
                         # for each individual checkbox
-                        p[ 'wxId' ] = list()
+                        p['wxId'] = list()
                     idx = 0
                     for val in valuelist:
                         try:
                             label = valuelist_desc[idx]
                         except IndexError:
                             label = val
-                        
-                        chkbox = wx.CheckBox(parent = which_panel,
-                                             label = text_beautify(label))
-                        p[ 'wxId' ].append(chkbox.GetId())
+
+                        chkbox = wx.CheckBox(parent=which_panel,
+                                             label=text_beautify(label))
+                        p['wxId'].append(chkbox.GetId())
                         if val in isEnabled:
                             chkbox.SetValue(True)
-                        hSizer.Add(item = chkbox, proportion = 0)
+                        hSizer.Add(item=chkbox, proportion=0)
                         chkbox.Bind(wx.EVT_CHECKBOX, self.OnUpdateSelection)
                         chkbox.Bind(wx.EVT_CHECKBOX, self.OnCheckBoxMulti)
-                        idx +=  1
-                        
-                    stSizer.Add(item = hSizer, proportion = 0,
-                                flag = wx.ADJUST_MINSIZE | wx.ALL, border = 1)
-                    which_sizer.Add(item = stSizer, proportion = 0,
-                                    flag = wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT, border = 5)
+                        idx += 1
+
+                    stSizer.Add(item=hSizer, proportion=0,
+                                flag=wx.ADJUST_MINSIZE | wx.ALL, border=1)
+                    which_sizer.Add(
+                        item=stSizer,
+                        proportion=0,
+                        flag=wx.EXPAND | wx.TOP | wx.RIGHT | wx.LEFT,
+                        border=5)
                 elif p.get('gisprompt', False) is False:
-                    if len(valuelist) == 1: # -> textctrl
-                        title_txt.SetLabel("%s (%s %s):" % (title, _('valid range'),
-                                                            str(valuelist[0])))
+                    if len(valuelist) == 1:  # -> textctrl
+                        title_txt.SetLabel(
+                            "%s (%s %s):" %
+                            (title, _('valid range'),
+                             str(valuelist[0])))
                         if p.get('type', '') == 'integer' and \
                                 not p.get('multiple', False):
 
-                            # for multiple integers use textctrl instead of spinsctrl
+                            # for multiple integers use textctrl instead of
+                            # spinsctrl
                             try:
-                                minValue, maxValue = map(int, valuelist[0].rsplit('-', 1))
+                                minValue, maxValue = map(
+                                    int, valuelist[0].rsplit('-', 1))
                             except ValueError:
                                 minValue = -1e6
                                 maxValue = 1e6
-                            txt2 = wx.SpinCtrl(parent = which_panel, id = wx.ID_ANY, size = globalvar.DIALOG_SPIN_SIZE,
-                                               min = minValue, max = maxValue)
+                            txt2 = wx.SpinCtrl(
+                                parent=which_panel,
+                                id=wx.ID_ANY,
+                                size=globalvar.DIALOG_SPIN_SIZE,
+                                min=minValue,
+                                max=maxValue)
                             style = wx.BOTTOM | wx.LEFT
                         else:
-                            txt2 = wx.TextCtrl(parent = which_panel, value = p.get('default',''))
+                            txt2 = wx.TextCtrl(
+                                parent=which_panel, value=p.get(
+                                    'default', ''))
                             style = wx.EXPAND | wx.BOTTOM | wx.LEFT
-                        
+
                         value = self._getValue(p)
                         # parameter previously set
                         if value:
                             if isinstance(txt2, wx.SpinCtrl):
-                                txt2.SetValue(int(value)) 
+                                txt2.SetValue(int(value))
                             else:
                                 txt2.SetValue(value)
-                        
-                        which_sizer.Add(item = txt2, proportion = 0,
-                                        flag = style, border = 5)
 
-                        p['wxId'] = [ txt2.GetId(), ]
+                        which_sizer.Add(item=txt2, proportion=0,
+                                        flag=style, border=5)
+
+                        p['wxId'] = [txt2.GetId(), ]
                         txt2.Bind(wx.EVT_TEXT, self.OnSetValue)
                     else:
-                        
+
                         title_txt.SetLabel(title + ':')
                         value = self._getValue(p)
-                        
-                        if p['name'] == 'icon': # symbols
-                            bitmap = wx.Bitmap(os.path.join(globalvar.SYMBDIR, value) + '.png')
-                            bb = wx.BitmapButton(parent = which_panel, id = wx.ID_ANY,
-                                                 bitmap = bitmap)
-                            iconLabel = wx.StaticText(parent = which_panel, id = wx.ID_ANY)
+
+                        if p['name'] in ('icon', 'icon_area', 'icon_line'):  # symbols
+                            bitmap = wx.Bitmap(
+                                os.path.join(
+                                    globalvar.SYMBDIR,
+                                    value) + '.png')
+                            bb = wx.BitmapButton(
+                                parent=which_panel, id=wx.ID_ANY, bitmap=bitmap)
+                            iconLabel = wx.StaticText(
+                                parent=which_panel, id=wx.ID_ANY)
                             iconLabel.SetLabel(value)
                             p['value'] = value
                             p['wxId'] = [bb.GetId(), iconLabel.GetId()]
                             bb.Bind(wx.EVT_BUTTON, self.OnSetSymbol)
                             this_sizer = wx.BoxSizer(wx.HORIZONTAL)
-                            this_sizer.Add(item = bb, proportion = 0,
-                                            flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT, border = 5)
-                            this_sizer.Add(item = iconLabel, proportion = 0,
-                                            flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border = 5)
-                            which_sizer.Add(item = this_sizer, proportion = 0,
-                                            flag = wx.ADJUST_MINSIZE, border = 0)
+                            this_sizer.Add(
+                                item=bb, proportion=0, flag=wx.ADJUST_MINSIZE |
+                                wx.BOTTOM | wx.LEFT, border=5)
+                            this_sizer.Add(
+                                item=iconLabel,
+                                proportion=0,
+                                flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.ALIGN_CENTER_VERTICAL,
+                                border=5)
+                            which_sizer.Add(item=this_sizer, proportion=0,
+                                            flag=wx.ADJUST_MINSIZE, border=0)
                         else:
                             # list of values (combo)
-                            cb = wx.ComboBox(parent=which_panel, id=wx.ID_ANY, value=p.get('default',''),
-                                             size=globalvar.DIALOG_COMBOBOX_SIZE,
-                                             choices=valuelist, style=wx.CB_DROPDOWN)
+                            cb = wx.ComboBox(
+                                parent=which_panel, id=wx.ID_ANY, value=p.get(
+                                    'default', ''),
+                                size=globalvar.DIALOG_COMBOBOX_SIZE,
+                                choices=valuelist, style=wx.CB_DROPDOWN)
                             if value:
-                                cb.SetValue(value) # parameter previously set
-                            which_sizer.Add(item = cb, proportion = 0,
-                                            flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT, border = 5)
-                            p['wxId'] = [cb.GetId(),]
+                                cb.SetValue(value)  # parameter previously set
+                            which_sizer.Add(
+                                item=cb, proportion=0, flag=wx.ADJUST_MINSIZE |
+                                wx.BOTTOM | wx.LEFT, border=5)
+                            p['wxId'] = [cb.GetId(), ]
                             cb.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
                             cb.Bind(wx.EVT_TEXT, self.OnSetValue)
                             if p.get('guidependency', ''):
-                                cb.Bind(wx.EVT_COMBOBOX, self.OnUpdateSelection)
-            
+                                cb.Bind(
+                                    wx.EVT_COMBOBOX, self.OnUpdateSelection)
+
             # text entry
-            if (p.get('type','string') in ('string','integer','float')
-                and len(p.get('values',[])) == 0
-                and p.get('gisprompt',False) == False
-                and p.get('prompt','') !=  'color'):
+            if (p.get('type', 'string') in ('string', 'integer', 'float')
+                    and len(p.get('values', [])) == 0
+                    and p.get('gisprompt', False) == False
+                    and p.get('prompt', '') != 'color'):
 
                 title_txt.SetLabel(title + ':')
+                p['wxId'] = []
                 if p.get('multiple', False) or \
                         p.get('type', 'string') == 'string' or \
                         len(p.get('key_desc', [])) > 1:
-                    txt3 = wx.TextCtrl(parent = which_panel, value = p.get('default',''))
-                    
+                    win = wx.TextCtrl(
+                        parent=which_panel, value=p.get(
+                            'default', ''))
+
                     value = self._getValue(p)
                     if value:
                         # parameter previously set
-                        txt3.SetValue(str(value))
-                    
-                    txt3.Bind(wx.EVT_TEXT, self.OnSetValue)
+                        win.SetValue(str(value))
+
+                    win.Bind(wx.EVT_TEXT, self.OnSetValue)
                     style = wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT
+                    if p.get('name', '') == 'font':
+                        font_btn = wx.Button(parent=which_panel, label=_("Select font"))
+                        font_btn.Bind(wx.EVT_BUTTON, self.OnSelectFont)
+                        font_sizer = wx.BoxSizer(wx.HORIZONTAL)
+                        font_sizer.Add(item=win, proportion=1,
+                                       flag=style, border=5)
+                        font_sizer.Add(item=font_btn, proportion=0,
+                                       flag=style, border=5)
+                        
+                        which_sizer.Add(item=font_sizer, proportion=0,
+                                        flag=style, border=5)
+                        p['wxId'].append(font_btn.GetId())
+                    else:
+                        which_sizer.Add(item=win, proportion=0,
+                                        flag=style, border=5)
+
                 elif p.get('type', '') == 'integer':
                     minValue = -1e9
                     maxValue = 1e9
                     value = self._getValue(p)
-                    
-                    txt3 = wx.SpinCtrl(parent = which_panel, value = p.get('default', ''),
-                                       size = globalvar.DIALOG_SPIN_SIZE,
-                                       min = minValue, max = maxValue)
+
+                    win = wx.SpinCtrl(
+                        parent=which_panel,
+                        value=p.get(
+                            'default',
+                            ''),
+                        size=globalvar.DIALOG_SPIN_SIZE,
+                        min=minValue,
+                        max=maxValue)
                     if value:
-                        txt3.SetValue(int(value)) # parameter previously set
-                        txt3.Bind(wx.EVT_SPINCTRL, self.OnSetValue)
+                        win.SetValue(int(value))  # parameter previously set
+                        win.Bind(wx.EVT_SPINCTRL, self.OnSetValue)
 
                     style = wx.BOTTOM | wx.LEFT | wx.RIGHT
-                else: # float
-                    txt3 = wx.TextCtrl(parent = which_panel, value = p.get('default',''),
-                                       validator = FloatValidator())
+                    which_sizer.Add(item=win, proportion=0,
+                                    flag=style, border=5)
+                else:  # float
+                    win = wx.TextCtrl(
+                        parent=which_panel, value=p.get(
+                            'default', ''), validator=FloatValidator())
                     style = wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT
-                    
+                    which_sizer.Add(item=win, proportion=0,
+                                    flag=style, border=5)
+
                     value = self._getValue(p)
                     if value:
-                        txt3.SetValue(str(value)) # parameter previously set
-                
-                txt3.Bind(wx.EVT_TEXT, self.OnSetValue)
-                
-                which_sizer.Add(item = txt3, proportion = 0,
-                                flag = style, border = 5)
-                p['wxId'] = [ txt3.GetId(), ]
+                        win.SetValue(str(value))  # parameter previously set
+
+                win.Bind(wx.EVT_TEXT, self.OnSetValue)
+                p['wxId'].append(win.GetId())
 
             #
             # element selection tree combobox (maps, icons, regions, etc.)
@@ -1166,34 +1352,38 @@ class CmdPanel(wx.Panel):
             if p.get('gisprompt', False):
                 title_txt.SetLabel(title + ':')
                 # GIS element entry
-                if p.get('prompt','') not in ('color',
-                                              'subgroup',
-                                              'sigfile',
-                                              'separator',
-                                              'dbdriver',
-                                              'dbname',
-                                              'dbtable',
-                                              'dbcolumn',
-                                              'layer',
-                                              'location',
-                                              'mapset',
-                                              'dbase',
-                                              'coords',
-                                              'file',
-                                              'dir',
-                                              'colortable',
-                                              'barscale',
-                                              'northarrow'):
+                if p.get('prompt', '') not in ('color',
+                                               'cat',
+                                               'cats',
+                                               'subgroup',
+                                               'sigfile',
+                                               'separator',
+                                               'dbdriver',
+                                               'dbname',
+                                               'dbtable',
+                                               'dbcolumn',
+                                               'layer',
+                                               'location',
+                                               'mapset',
+                                               'dbase',
+                                               'coords',
+                                               'file',
+                                               'dir',
+                                               'colortable',
+                                               'barscale',
+                                               'northarrow',
+                                               'datasource',
+                                               'datasource_layer'):
                     multiple = p.get('multiple', False)
                     if p.get('age', '') == 'new':
-                        mapsets = [grass.gisenv()['MAPSET'],]
+                        mapsets = [grass.gisenv()['MAPSET'], ]
                     else:
                         mapsets = None
                     if self.task.name in ('r.proj', 'v.proj') \
                             and p.get('name', '') == 'input':
-                        selection = gselect.ProjSelect(parent = which_panel,
-                                                       isRaster = self.task.name == 'r.proj')
-                        p['wxId'] = [ selection.GetId(), ]
+                        selection = gselect.ProjSelect(
+                            parent=which_panel, isRaster=self.task.name == 'r.proj')
+                        p['wxId'] = [selection.GetId(), ]
                         selection.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
                         selection.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
                     else:
@@ -1201,29 +1391,46 @@ class CmdPanel(wx.Panel):
                         # hack for t.* modules
                         if elem in ('stds', 'map'):
                             orig_elem = elem
-                            type_param = self.task.get_param('type', element = 'name', raiseError = False)
+                            type_param = self.task.get_param(
+                                'type', element='name', raiseError=False)
                             if type_param:
                                 elem = type_param.get('default', None)
                                 # for t.(un)register:
-                                maps_param = self.task.get_param('maps', element = 'name', raiseError = False)
+                                maps_param = self.task.get_param(
+                                    'maps', element='name', raiseError=False)
                                 if maps_param and orig_elem == 'stds':
-                                    element_dict = {'raster': 'strds', 'vector': 'stvds', 'raster_3d': 'str3ds'}
-                                    elem = element_dict[type_param.get('default')]
-                        
-                        if self._giface and hasattr(self._giface, "_model"):
-                            extraItems = {_('Graphical Modeler') : self._giface.GetLayerList(p.get('prompt'))}
-                        else:
-                            extraItems = None
-                        selection = gselect.Select(parent = which_panel, id = wx.ID_ANY,
-                                                   size = globalvar.DIALOG_GSELECT_SIZE,
-                                                   type = elem, multiple = multiple, nmaps = len(p.get('key_desc', [])),
-                                                   mapsets = mapsets, fullyQualified = p.get('age', 'old') == 'old',
-                                                   extraItems = extraItems)
-                        
+                                    element_dict = {
+                                        'raster': 'strds', 'vector': 'stvds', 'raster_3d': 'str3ds'}
+                                    elem = element_dict[
+                                        type_param.get('default')]
+
+                        extraItems = None
+                        if self._giface:
+                            if hasattr(self._giface, "_model"):
+                                extraItems = {
+                                    _('Graphical Modeler'): self._giface.GetLayerList(
+                                        p.get('prompt'))}
+                            else:
+                                layers = self._giface.GetLayerList()
+                                if len(layers) > 0:
+                                    mapList = []
+                                    extraItems = {_('Map Display'): mapList}
+                                    for layer in layers:
+                                        if layer.type != p.get('prompt'):
+                                            continue
+                                        mapList.append(str(layer))
+                        selection = gselect.Select(
+                            parent=which_panel, id=wx.ID_ANY,
+                            size=globalvar.DIALOG_GSELECT_SIZE, type=elem,
+                            multiple=multiple, nmaps=len(
+                                p.get('key_desc', [])),
+                            mapsets=mapsets, fullyQualified=p.get(
+                                'age', 'old') == 'old', extraItems=extraItems)
+
                         value = self._getValue(p)
                         if value:
                             selection.SetValue(value)
-                        
+
                         formatSelector = True
                         # A gselect.Select is a combobox with two children: a textctl and a popupwindow;
                         # we target the textctl here
@@ -1233,23 +1440,26 @@ class CmdPanel(wx.Panel):
                         else:
                             p['wxId'] = [textWin.GetId(), ]
                         if prompt != 'vector':
-                            self.FindWindowById(p['wxId'][0]).Bind(wx.EVT_TEXT, self.OnSetValue)
+                            self.FindWindowById(
+                                p['wxId'][0]).Bind(
+                                wx.EVT_TEXT, self.OnSetValue)
 
                     if prompt == 'vector':
                         win = self.FindWindowById(p['wxId'][0])
                         # handlers should be bound in this order
-                        # OnUpdateSelection depends on calling OnSetValue first which is bad
+                        # OnUpdateSelection depends on calling OnSetValue first
+                        # which is bad
                         win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
                         win.Bind(wx.EVT_TEXT, self.OnSetValue)
 
                         # if formatSelector and p.get('age', 'old') == 'old':
                         #     # OGR supported (read-only)
                         #     self.hsizer = wx.BoxSizer(wx.HORIZONTAL)
-                            
+
                         #     self.hsizer.Add(item = selection,
                         #                     flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_TOP,
                         #                     border = 5)
-                            
+
                         #     # format (native / ogr)
                         #     rbox = wx.RadioBox(parent = which_panel, id = wx.ID_ANY,
                         #                        label = " %s " % _("Format"),
@@ -1259,38 +1469,42 @@ class CmdPanel(wx.Panel):
                         #         rbox.SetSelection(1)
                         #     rbox.SetName('VectorFormat')
                         #     rbox.Bind(wx.EVT_RADIOBOX, self.OnVectorFormat)
-                            
+
                         #     self.hsizer.Add(item = rbox,
                         #                     flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT |
                         #                     wx.RIGHT | wx.ALIGN_TOP,
                         #                     border = 5)
-                            
+
                         #     ogrSelection = gselect.GdalSelect(parent = self, panel = which_panel, ogr = True,
                         #                                       default = 'dir',
                         #                                       exclude = ['file'])
                         #     self.Bind(gselect.EVT_GDALSELECT, self.OnUpdateSelection)
                         #     self.Bind(gselect.EVT_GDALSELECT, self.OnSetValue)
-                            
+
                         #     ogrSelection.SetName('OgrSelect')
                         #     ogrSelection.Hide()
-                            
+
                         #     which_sizer.Add(item = self.hsizer, proportion = 0)
-                            
+
                         #     p['wxId'].append(rbox.GetId())
                         #     p['wxId'].append(ogrSelection.GetId())
                         #     for win in ogrSelection.GetDsnWin():
                         #         p['wxId'].append(win.GetId())
                         # else:
-                        which_sizer.Add(item = selection, proportion = 0,
-                                        flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                        border = 5)
+                        which_sizer.Add(
+                            item=selection,
+                            proportion=0,
+                            flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                            border=5)
                     elif prompt == 'group':
                         win = self.FindWindowById(p['wxId'][0])
                         win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
                         win.Bind(wx.EVT_TEXT, self.OnSetValue)
-                        which_sizer.Add(item = selection, proportion = 0,
-                                        flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                        border = 5)
+                        which_sizer.Add(
+                            item=selection,
+                            proportion=0,
+                            flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                            border=5)
                     else:
                         if prompt in ('stds', 'strds', 'stvds', 'str3ds'):
                             showButton = True
@@ -1303,58 +1517,77 @@ class CmdPanel(wx.Panel):
                         else:
                             showButton = False
                         if showButton:
-                            iconTheme = UserSettings.Get(group='appearance', key='iconTheme', subkey='type')
-                            bitmap = wx.Bitmap(os.path.join(globalvar.ICONDIR, iconTheme, 'map-info.png'))
-                            bb = wx.BitmapButton(parent=which_panel, bitmap=bitmap)
+                            iconTheme = UserSettings.Get(
+                                group='appearance', key='iconTheme', subkey='type')
+                            bitmap = wx.Bitmap(
+                                os.path.join(
+                                    globalvar.ICONDIR, iconTheme,
+                                    'map-info.png'))
+                            bb = wx.BitmapButton(
+                                parent=which_panel, bitmap=bitmap)
                             bb.Bind(wx.EVT_BUTTON, self.OnTimelineTool)
-                            bb.SetToolTipString(_("Show graphical representation of temporal extent of dataset(s) ."))
+                            bb.SetToolTipString(
+                                _("Show graphical representation of temporal extent of dataset(s) ."))
                             p['wxId'].append(bb.GetId())
 
                             hSizer = wx.BoxSizer(wx.HORIZONTAL)
-                            hSizer.Add(item=selection, proportion=0,
-                                       flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                       border=5)
-                            hSizer.Add(item=bb, proportion=0,
-                                       flag=wx.EXPAND|wx.BOTTOM | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                       border=5)
+                            hSizer.Add(
+                                item=selection,
+                                proportion=0,
+                                flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                                border=5)
+                            hSizer.Add(
+                                item=bb,
+                                proportion=0,
+                                flag=wx.EXPAND | wx.BOTTOM | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                                border=5)
                             which_sizer.Add(hSizer)
                         else:
-                            which_sizer.Add(item=selection, proportion=0,
-                                            flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                            border=5)
+                            which_sizer.Add(
+                                item=selection,
+                                proportion=0,
+                                flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                                border=5)
 
                 # subgroup
                 elif prompt == 'subgroup':
-                    selection = gselect.SubGroupSelect(parent = which_panel)
-                    p['wxId'] = [ selection.GetId() ]
+                    selection = gselect.SubGroupSelect(parent=which_panel)
+                    p['wxId'] = [selection.GetId()]
                     selection.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
                     selection.Bind(wx.EVT_TEXT, self.OnSetValue)
-                    which_sizer.Add(item = selection, proportion = 0,
-                                    flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                    border = 5)
+                    which_sizer.Add(
+                        item=selection,
+                        proportion=0,
+                        flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                        border=5)
 
                 # sigrature file
                 elif prompt == 'sigfile':
-                    selection = gselect.SignatureSelect(parent = which_panel, element = p.get('element', 'sig'))
-                    p['wxId'] = [ selection.GetId() ]
+                    selection = gselect.SignatureSelect(
+                        parent=which_panel, element=p.get('element', 'sig'))
+                    p['wxId'] = [selection.GetId()]
                     selection.Bind(wx.EVT_TEXT, self.OnSetValue)
                     selection.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
-                    which_sizer.Add(item = selection, proportion = 0,
-                                    flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                    border = 5)
+                    which_sizer.Add(
+                        item=selection,
+                        proportion=0,
+                        flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                        border=5)
 
                 # separator
                 elif prompt == 'separator':
-                    win = gselect.SeparatorSelect(parent = which_panel)
+                    win = gselect.SeparatorSelect(parent=which_panel)
                     value = self._getValue(p)
                     win.SetValue(value)
-                    p['wxId'] = [ win.GetId() ]
+                    p['wxId'] = [win.GetId()]
                     win.Bind(wx.EVT_TEXT, self.OnSetValue)
                     win.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
-                    which_sizer.Add(item = win, proportion = 0,
-                                    flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
-                                    border = 5)
-                
+                    which_sizer.Add(
+                        item=win,
+                        proportion=0,
+                        flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                        border=5)
+
                 # layer, dbdriver, dbname, dbcolumn, dbtable entry
                 elif prompt in ('dbdriver',
                                 'dbname',
@@ -1365,116 +1598,128 @@ class CmdPanel(wx.Panel):
                                 'mapset',
                                 'dbase'):
                     if p.get('multiple', 'no') == 'yes':
-                        win = wx.TextCtrl(parent = which_panel, value = p.get('default',''),
-                                          size = globalvar.DIALOG_TEXTCTRL_SIZE)
+                        win = wx.TextCtrl(
+                            parent=which_panel, value=p.get(
+                                'default', ''), size=globalvar.DIALOG_TEXTCTRL_SIZE)
                         win.Bind(wx.EVT_TEXT, self.OnSetValue)
                     else:
                         value = self._getValue(p)
-                        
+
                         if prompt == 'layer':
                             if p.get('element', 'layer') == 'layer_all':
                                 all = True
                             else:
                                 all = False
                             if p.get('age', 'old') == 'old':
-                                win = gselect.LayerSelect(parent = which_panel,
-                                                          all = all,
-                                                          default = p['default'])
+                                win = gselect.LayerSelect(parent=which_panel,
+                                                          all=all,
+                                                          default=p['default'])
                                 win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
                                 win.Bind(wx.EVT_TEXT, self.OnSetValue)
-                                win.SetValue(str(value))    # default or previously set value
+                                win.SetValue(
+                                    str(value))    # default or previously set value
                             else:
-                                win = wx.SpinCtrl(parent = which_panel, id = wx.ID_ANY,
-                                                  min = 1, max = 100, initial = int(p['default']))
+                                win = wx.SpinCtrl(
+                                    parent=which_panel, id=wx.ID_ANY, min=1,
+                                    max=100, initial=int(p['default']))
                                 win.Bind(wx.EVT_SPINCTRL, self.OnSetValue)
-                                win.SetValue(int(value))    # default or previously set value
+                                win.SetValue(
+                                    int(value))    # default or previously set value
 
-                            p['wxId'] = [ win.GetId() ]
+                            p['wxId'] = [win.GetId()]
 
                         elif prompt == 'dbdriver':
-                            win = gselect.DriverSelect(parent = which_panel,
-                                                       choices = p.get('values', []),
-                                                       value = value)
+                            win = gselect.DriverSelect(
+                                parent=which_panel, choices=p.get(
+                                    'values', []),
+                                value=value)
                             win.Bind(wx.EVT_COMBOBOX, self.OnUpdateSelection)
                             win.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
                         elif prompt == 'dbname':
-                            win = gselect.DatabaseSelect(parent = which_panel,
-                                                         value = value)
+                            win = gselect.DatabaseSelect(parent=which_panel,
+                                                         value=value)
                             win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
                             win.Bind(wx.EVT_TEXT, self.OnSetValue)
                         elif prompt == 'dbtable':
                             if p.get('age', 'old') == 'old':
-                                win = gselect.TableSelect(parent = which_panel)
-                                win.Bind(wx.EVT_COMBOBOX, self.OnUpdateSelection)
+                                win = gselect.TableSelect(parent=which_panel)
+                                win.Bind(
+                                    wx.EVT_COMBOBOX, self.OnUpdateSelection)
                                 win.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
                             else:
-                                win = wx.TextCtrl(parent = which_panel, value = p.get('default',''),
-                                                  size = globalvar.DIALOG_TEXTCTRL_SIZE)
+                                win = wx.TextCtrl(
+                                    parent=which_panel, value=p.get(
+                                        'default', ''),
+                                    size=globalvar.DIALOG_TEXTCTRL_SIZE)
                                 win.Bind(wx.EVT_TEXT, self.OnSetValue)
                         elif prompt == 'dbcolumn':
-                            win = gselect.ColumnSelect(parent = which_panel,
-                                                       value = value,
-                                                       param = p,
-                                                       multiple =  p.get('multiple', False))
-                        
+                            win = gselect.ColumnSelect(
+                                parent=which_panel, value=value, param=p,
+                                multiple=p.get('multiple', False))
+
                             # A gselect.ColumnSelect is a combobox
                             # with two children: a textctl and a
                             # popupwindow; we target the textctl here
                             textWin = win.GetTextCtrl()
-                            p['wxId'] = [ textWin.GetId(), ]
-                            
+                            p['wxId'] = [textWin.GetId(), ]
+
                             textWin.Bind(wx.EVT_TEXT, self.OnSetValue)
                             win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
 
                         elif prompt == 'location':
-                            win = gselect.LocationSelect(parent = which_panel,
-                                                         value = value)
-                            win.Bind(wx.EVT_COMBOBOX,     self.OnUpdateSelection)
-                            win.Bind(wx.EVT_COMBOBOX,     self.OnSetValue)
-                        
+                            win = gselect.LocationSelect(parent=which_panel,
+                                                         value=value)
+                            win.Bind(wx.EVT_COMBOBOX, self.OnUpdateSelection)
+                            win.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
+
                         elif prompt == 'mapset':
                             if p.get('age', 'old') == 'old':
                                 new = False
                             else:
                                 new = True
-                            
-                            win = gselect.MapsetSelect(parent = which_panel,
-                                                       value = value, new = new,
-                                                       multiple = p.get('multiple', False))
+
+                            win = gselect.MapsetSelect(
+                                parent=which_panel, value=value, new=new,
+                                multiple=p.get('multiple', False))
                             textWin = win.GetTextCtrl()
-                            p['wxId'] = [ textWin.GetId(), win.GetId() ]
-                            
+                            p['wxId'] = [textWin.GetId(), win.GetId()]
+
                             textWin.Bind(wx.EVT_TEXT, self.OnSetValue)
                             win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
-                            
+
                         elif prompt == 'dbase':
-                            win = gselect.DbaseSelect(parent = which_panel,
-                                                      changeCallback = self.OnSetValue)
+                            win = gselect.DbaseSelect(
+                                parent=which_panel, changeCallback=self.OnSetValue)
                             win.Bind(wx.EVT_TEXT, self.OnUpdateSelection)
-                            p['wxId'] = [ win.GetChildren()[1].GetId() ]
-                            
+                            p['wxId'] = [win.GetChildren()[1].GetId()]
+
                     if 'wxId' not in p:
                         try:
-                            p['wxId'] = [ win.GetId(), ]
+                            p['wxId'] = [win.GetId(), ]
                         except AttributeError:
                             pass
-                    
+
                     flags = wx.BOTTOM | wx.LEFT | wx.RIGHT
                     if prompt == 'dbname':
                         flags |= wx.EXPAND
-                    which_sizer.Add(item = win, proportion = 0,
-                                    flag = flags, border = 5)
+                    which_sizer.Add(item=win, proportion=0,
+                                    flag=flags, border=5)
                 # color entry
                 elif prompt == 'color':
-                    default_color = (200,200,200)
+                    default_color = (200, 200, 200)
                     label_color = _("Select Color")
-                    if p.get('default','') !=  '':
-                        default_color, label_color = utils.color_resolve(p['default'])
-                    if p.get('value','') !=  '' and p.get('value','') != 'none': # parameter previously set
+                    if p.get('default', '') != '':
+                        default_color, label_color = utils.color_resolve(p[
+                                                                         'default'])
+                    if p.get('value', '') != '' and p.get(
+                            'value', '') != 'none':  # parameter previously set
                         if not p.get('multiple', False):
-                            default_color, label_color = utils.color_resolve(p['value'])
-                    if p.get('element', '') == 'color_none' or p.get('multiple', False):
-                        this_sizer = wx.BoxSizer(orient = wx.HORIZONTAL)
+                            default_color, label_color = utils.color_resolve(p[
+                                                                             'value'])
+                    if p.get(
+                            'element', '') == 'color_none' or p.get(
+                            'multiple', False):
+                        this_sizer = wx.BoxSizer(orient=wx.HORIZONTAL)
                     else:
                         this_sizer = which_sizer
                     colorSize = 150
@@ -1483,207 +1728,329 @@ class CmdPanel(wx.Panel):
                     # and either a "transparent" checkbox or None
                     p['wxId'] = [None] * 3
                     if p.get('multiple', False):
-                        txt = wx.TextCtrl(parent = which_panel, id = wx.ID_ANY)
-                        this_sizer.Add(item = txt, proportion = 1,
-                                       flag = wx.ADJUST_MINSIZE | wx.LEFT | wx.TOP, border = 5)
+                        txt = wx.TextCtrl(parent=which_panel, id=wx.ID_ANY)
+                        this_sizer.Add(
+                            item=txt,
+                            proportion=1,
+                            flag=wx.ADJUST_MINSIZE | wx.LEFT | wx.TOP,
+                            border=5)
                         txt.Bind(wx.EVT_TEXT, self.OnSetValue)
                         if p.get('value', ''):
                             txt.SetValue(p['value'])
                         colorSize = 40
                         label_color = ''
                         p['wxId'][1] = txt.GetId()
-                        which_sizer.Add(this_sizer, flag = wx.EXPAND | wx.RIGHT, border = 5)
-
-                    btn_colour = csel.ColourSelect(parent = which_panel, id = wx.ID_ANY,
-                                                   label = label_color, colour = default_color,
-                                                   pos = wx.DefaultPosition, size = (colorSize, 32))
-                    this_sizer.Add(item = btn_colour, proportion = 0,
-                                   flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT, border = 5)
-                    btn_colour.Bind(csel.EVT_COLOURSELECT,  self.OnColorChange)
+                        which_sizer.Add(
+                            this_sizer, flag=wx.EXPAND | wx.RIGHT, border=5)
+
+                    btn_colour = csel.ColourSelect(
+                        parent=which_panel, id=wx.ID_ANY, label=label_color,
+                        colour=default_color, pos=wx.DefaultPosition,
+                        size=(colorSize, 32))
+                    this_sizer.Add(
+                        item=btn_colour,
+                        proportion=0,
+                        flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT,
+                        border=5)
+                    btn_colour.Bind(csel.EVT_COLOURSELECT, self.OnColorChange)
                     p['wxId'][0] = btn_colour.GetId()
 
                     if p.get('element', '') == 'color_none':
-                        none_check = wx.CheckBox(which_panel, wx.ID_ANY, _("Transparent"))
-                        if p.get('value','')  == "none":
+                        none_check = wx.CheckBox(
+                            which_panel, wx.ID_ANY, _("Transparent"))
+                        if p.get('value', '') == "none":
                             none_check.SetValue(True)
                         else:
                             none_check.SetValue(False)
-                        this_sizer.Add(item = none_check, proportion = 0,
-                                       flag = wx.ADJUST_MINSIZE | wx.LEFT | wx.RIGHT | wx.TOP, border = 5)
+                        this_sizer.Add(
+                            item=none_check, proportion=0,
+                            flag=wx.ADJUST_MINSIZE | wx.LEFT | wx.RIGHT | wx.TOP,
+                            border=5)
                         which_sizer.Add(this_sizer)
                         none_check.Bind(wx.EVT_CHECKBOX, self.OnColorChange)
                         p['wxId'][2] = none_check.GetId()
 
-
                 # file selector
-                elif p.get('prompt','') !=  'color' and p.get('prompt', '') == 'file':
+                elif p.get('prompt', '') != 'color' and p.get('prompt', '') == 'file':
                     if p.get('age', 'new') == 'new':
                         fmode = wx.FD_SAVE
                     else:
                         fmode = wx.FD_OPEN
                     # check wildcard
                     try:
-                        fExt = os.path.splitext(p.get('key_desc', ['*.*'])[0])[1]
+                        fExt = os.path.splitext(
+                            p.get('key_desc', ['*.*'])[0])[1]
                     except:
                         fExt = None
                     if not fExt:
                         fMask = '*'
                     else:
-                        fMask = '%s files (*%s)|*%s|Files (*)|*' % (fExt[1:].upper(), fExt, fExt)
-                    fbb = filebrowse.FileBrowseButton(parent = which_panel, id = wx.ID_ANY, fileMask = fMask,
-                                                      size = globalvar.DIALOG_GSELECT_SIZE, labelText = '',
-                                                      dialogTitle = _('Choose %s') % \
-                                                          p.get('description', _('file')).lower(),
-                                                      buttonText = _('Browse'),
-                                                      startDirectory = os.getcwd(), fileMode = fmode,
-                                                      changeCallback = self.OnSetValue)
+                        fMask = '%s files (*%s)|*%s|Files (*)|*' % (
+                            fExt[1:].upper(), fExt, fExt)
+                    fbb = filebrowse.FileBrowseButton(
+                        parent=which_panel,
+                        id=wx.ID_ANY,
+                        fileMask=fMask,
+                        size=globalvar.DIALOG_GSELECT_SIZE,
+                        labelText='',
+                        dialogTitle=_('Choose %s') %
+                        p.get(
+                            'description',
+                            _('file')).lower(),
+                        buttonText=_('Browse'),
+                        startDirectory=os.getcwd(),
+                        fileMode=fmode,
+                        changeCallback=self.OnSetValue)
                     value = self._getValue(p)
                     if value:
-                        fbb.SetValue(value) # parameter previously set
-                    which_sizer.Add(item = fbb, proportion = 0,
-                                    flag = wx.EXPAND | wx.RIGHT, border = 5)
-                    
+                        fbb.SetValue(value)  # parameter previously set
+                    which_sizer.Add(item=fbb, proportion=0,
+                                    flag=wx.EXPAND | wx.RIGHT, border=5)
+
                     # A file browse button is a combobox with two children:
                     # a textctl and a button;
                     # we have to target the button here
-                    p['wxId'] = [ fbb.GetChildren()[1].GetId() ]
-                    if p.get('age', 'new') == 'old' and \
-                            p.get('prompt', '') == 'file' and p.get('element', '') == 'file' and \
-                            UserSettings.Get(group = 'cmd', key = 'interactiveInput', subkey = 'enabled'):
+                    p['wxId'] = [fbb.GetChildren()[1].GetId()]
+                    if p.get(
+                            'age', 'new') == 'old' and p.get(
+                            'prompt', '') == 'file' and p.get(
+                            'element', '') == 'file' and UserSettings.Get(
+                            group='cmd', key='interactiveInput', subkey='enabled'):
                         # widget for interactive input
-                        ifbb = wx.TextCtrl(parent = which_panel, id = wx.ID_ANY,
-                                           style = wx.TE_MULTILINE,
-                                           size = (-1, 75))
+                        ifbb = wx.TextCtrl(parent=which_panel, id=wx.ID_ANY,
+                                           style=wx.TE_MULTILINE,
+                                           size=(-1, 75))
                         if p.get('value', '') and os.path.isfile(p['value']):
                             f = open(p['value'])
                             ifbb.SetValue(''.join(f.readlines()))
                             f.close()
-                        
+
                         ifbb.Bind(wx.EVT_TEXT, self.OnFileText)
-                        
-                        btnLoad = wx.Button(parent = which_panel, id = wx.ID_ANY, label = _("&Load"))
-                        btnLoad.SetToolTipString(_("Load and edit content of a file"))
+
+                        btnLoad = wx.Button(
+                            parent=which_panel, id=wx.ID_ANY, label=_("&Load"))
+                        btnLoad.SetToolTipString(
+                            _("Load and edit content of a file"))
                         btnLoad.Bind(wx.EVT_BUTTON, self.OnFileLoad)
-                        btnSave = wx.Button(parent = which_panel, id = wx.ID_ANY, label = _("&Save as"))
-                        btnSave.SetToolTipString(_("Save content to a file for further use"))
+                        btnSave = wx.Button(
+                            parent=which_panel, id=wx.ID_ANY, label=_("&Save as"))
+                        btnSave.SetToolTipString(
+                            _("Save content to a file for further use"))
                         btnSave.Bind(wx.EVT_BUTTON, self.OnFileSave)
-                        
-                        fileContentLabel = wx.StaticText(parent=which_panel,
-                            id=wx.ID_ANY,
+
+                        fileContentLabel = wx.StaticText(
+                            parent=which_panel, id=wx.ID_ANY,
                             label=_('or enter values directly:'))
                         fileContentLabel.SetToolTipString(
                             _("Enter file content directly instead of specifying"
                               " a file."
                               " Temporary file will be automatically created."))
-                        which_sizer.Add(item=fileContentLabel,
-                                        proportion = 0,
-                                        flag = wx.EXPAND | wx.RIGHT | wx.LEFT | wx.BOTTOM, border = 5)
-                        which_sizer.Add(item = ifbb, proportion = 1,
-                                        flag = wx.EXPAND | wx.RIGHT | wx.LEFT, border = 5)
+                        which_sizer.Add(
+                            item=fileContentLabel,
+                            proportion=0,
+                            flag=wx.EXPAND | wx.RIGHT | wx.LEFT | wx.BOTTOM,
+                            border=5)
+                        which_sizer.Add(
+                            item=ifbb,
+                            proportion=1,
+                            flag=wx.EXPAND | wx.RIGHT | wx.LEFT,
+                            border=5)
                         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-                        btnSizer.Add(item = btnLoad, proportion = 0,
-                                     flag = wx.ALIGN_RIGHT | wx.RIGHT, border = 10)
-                        btnSizer.Add(item = btnSave, proportion = 0,
-                                     flag = wx.ALIGN_RIGHT)
-                        which_sizer.Add(item = btnSizer, proportion = 0,
-                                        flag = wx.ALIGN_RIGHT | wx.RIGHT | wx.TOP, border = 5)
-                        
+                        btnSizer.Add(item=btnLoad, proportion=0,
+                                     flag=wx.ALIGN_RIGHT | wx.RIGHT, border=10)
+                        btnSizer.Add(item=btnSave, proportion=0,
+                                     flag=wx.ALIGN_RIGHT)
+                        which_sizer.Add(
+                            item=btnSizer,
+                            proportion=0,
+                            flag=wx.ALIGN_RIGHT | wx.RIGHT | wx.TOP,
+                            border=5)
+
                         p['wxId'].append(ifbb.GetId())
                         p['wxId'].append(btnLoad.GetId())
                         p['wxId'].append(btnSave.GetId())
-                
+
                 # directory selector
-                elif p.get('prompt','') != 'color' and p.get('prompt', '') == 'dir':
-                    fbb = filebrowse.DirBrowseButton(parent = which_panel, id = wx.ID_ANY,
-                                                     size = globalvar.DIALOG_GSELECT_SIZE, labelText = '',
-                                                     dialogTitle = _('Choose %s') % \
-                                                         p.get('description', _('Directory')),
-                                                     buttonText = _('Browse'),
-                                                     startDirectory = os.getcwd(),
-                                                     changeCallback = self.OnSetValue)
+                elif p.get('prompt', '') != 'color' and p.get('prompt', '') == 'dir':
+                    fbb = filebrowse.DirBrowseButton(
+                        parent=which_panel,
+                        id=wx.ID_ANY,
+                        size=globalvar.DIALOG_GSELECT_SIZE,
+                        labelText='',
+                        dialogTitle=_('Choose %s') %
+                        p.get(
+                            'description',
+                            _('Directory')),
+                        buttonText=_('Browse'),
+                        startDirectory=os.getcwd(),
+                        changeCallback=self.OnSetValue)
                     value = self._getValue(p)
                     if value:
-                        fbb.SetValue(value) # parameter previously set
-                    which_sizer.Add(item = fbb, proportion = 0,
-                                    flag = wx.EXPAND | wx.RIGHT, border = 5)
-                    
+                        fbb.SetValue(value)  # parameter previously set
+                    which_sizer.Add(item=fbb, proportion=0,
+                                    flag=wx.EXPAND | wx.RIGHT, border=5)
+
                     # A file browse button is a combobox with two children:
                     # a textctl and a button;
                     # we have to target the button here
-                    p['wxId'] = [ fbb.GetChildren()[1].GetId() ]
-                    
+                    p['wxId'] = [fbb.GetChildren()[1].GetId()]
+
                 # interactive inserting of coordinates from map window
                 elif prompt == 'coords':
                     # interactive inserting if layer manager is accessible
                     if self._giface:
-                        win = gselect.CoordinatesSelect(parent = which_panel,
-                                                        giface = self._giface,
-                                                        multiple =  p.get('multiple', False),
-                                                        param = p)
+                        win = gselect.CoordinatesSelect(
+                            parent=which_panel, giface=self._giface, multiple=p.get(
+                                'multiple', False), param=p)
+                        p['wxId'] = [win.GetTextWin().GetId()]
+                        win.GetTextWin().Bind(wx.EVT_TEXT, self.OnSetValue)
+                        # bind closing event because destructor is not working
+                        # properly
+                        if hasattr(self.parent, 'dialogClosing'):
+                            self.parent.dialogClosing.connect(win.OnClose)
+
+                    # normal text field
+                    else:
+                        win = wx.TextCtrl(parent=which_panel)
+                        p['wxId'] = [win.GetId()]
+                        win.Bind(wx.EVT_TEXT, self.OnSetValue)
+
+                    which_sizer.Add(
+                        item=win,
+                        proportion=0,
+                        flag=wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT,
+                        border=5)
+
+                elif prompt in ('cat', 'cats'):
+                    # interactive selection of vector categories if layer
+                    # manager is accessible
+                    if self._giface:
+                        win = gselect.VectorCategorySelect(
+                            parent=which_panel, giface=self._giface, task=self.task)
+
                         p['wxId'] = [win.GetTextWin().GetId()]
                         win.GetTextWin().Bind(wx.EVT_TEXT, self.OnSetValue)
-                        # bind closing event because destructor is not working properly
+                        # bind closing event because destructor is not working
+                        # properly
                         if hasattr(self.parent, 'dialogClosing'):
                             self.parent.dialogClosing.connect(win.OnClose)
-                    
                     # normal text field
                     else:
-                        win = wx.TextCtrl(parent = which_panel)
+                        win = wx.TextCtrl(parent=which_panel)
+                        value = self._getValue(p)
+                        win.SetValue(value)
                         p['wxId'] = [win.GetId()]
                         win.Bind(wx.EVT_TEXT, self.OnSetValue)
-                    
-                    which_sizer.Add(item = win, 
-                                    proportion = 0,
-                                    flag = wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT, 
-                                    border = 5)
+
+                    which_sizer.Add(
+                        item=win,
+                        proportion=0,
+                        flag=wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT,
+                        border=5)
+
                 elif prompt in ('colortable', 'barscale', 'northarrow'):
                     if prompt == 'colortable':
-                        cb = ColorTablesComboBox(parent=which_panel, value=p.get('default',''),
-                                                 size=globalvar.DIALOG_COMBOBOX_SIZE,
-                                                 choices=valuelist)
+                        cb = ColorTablesComboBox(
+                            parent=which_panel, value=p.get('default', ''),
+                            size=globalvar.DIALOG_COMBOBOX_SIZE,
+                            choices=valuelist)
                     elif prompt == 'barscale':
-                        cb = BarscalesComboBox(parent=which_panel, value=p.get('default',''),
-                                               size=globalvar.DIALOG_COMBOBOX_SIZE,
-                                               choices=valuelist)
+                        cb = BarscalesComboBox(
+                            parent=which_panel, value=p.get('default', ''),
+                            size=globalvar.DIALOG_COMBOBOX_SIZE,
+                            choices=valuelist)
                     elif prompt == 'northarrow':
-                        cb = NArrowsComboBox(parent=which_panel, value=p.get('default',''),
-                                             size=globalvar.DIALOG_COMBOBOX_SIZE,
-                                             choices=valuelist)
-                    
+                        cb = NArrowsComboBox(
+                            parent=which_panel, value=p.get('default', ''),
+                            size=globalvar.DIALOG_COMBOBOX_SIZE,
+                            choices=valuelist)
+
                     value = self._getValue(p)
                     if value:
-                        cb.SetValue(value) # parameter previously set
-                    which_sizer.Add(item = cb, proportion = 0,
-                                    flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT, border = 5)
+                        cb.SetValue(value)  # parameter previously set
+                    which_sizer.Add(
+                        item=cb,
+                        proportion=0,
+                        flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT,
+                        border=5)
                     p['wxId'] = [cb.GetId(), cb.GetTextCtrl().GetId()]
                     cb.Bind(wx.EVT_COMBOBOX, self.OnSetValue)
                     cb.GetTextCtrl().Bind(wx.EVT_TEXT, self.OnSetValue)
                     if p.get('guidependency', ''):
                         cb.Bind(wx.EVT_COMBOBOX, self.OnUpdateSelection)
 
-            if self.parent.GetName() == 'MainFrame' and (self._giface and hasattr(self._giface, "_model")):
-                parChk = wx.CheckBox(parent = which_panel, id = wx.ID_ANY,
-                                     label = _("Parameterized in model"))
+                elif prompt == 'datasource':
+                    win = gselect.GdalSelect(parent=parent, panel=which_panel,
+                                             ogr=True)
+                    win.Bind(wx.EVT_TEXT, self.OnSetValue)
+                    win.Bind(wx.EVT_CHOICE, self.OnSetValue)
+                    p['wxId'] = [
+                        win.GetId(),
+                        win.fileWidgets['browse'].GetChildren()[1].GetId(),
+                        win.dirWidgets['browse'].GetChildren()[1].GetId(),
+                        win.dbWidgets['choice'].GetId()]
+                    value = self._getValue(p)
+                    if value:
+                        win.fileWidgets['browse'].GetChildren()[1].SetValue(
+                            value)  # parameter previously set
+                    which_sizer.Add(item=win, proportion=0,
+                                    flag=wx.EXPAND)
+
+                elif prompt == 'datasource_layer':
+                    self.win1 = LayersList(
+                        parent=which_panel,
+                        columns=[
+                            _('Layer id'),
+                            _('Layer name'),
+                            _('Feature type'),
+                            _('Projection match')])
+                    which_sizer.Add(item=self.win1, proportion=0,
+                                    flag=wx.EXPAND | wx.ALL, border=3)
+                    porf = self.task.get_param(
+                        'input', element='name', raiseError=False)
+                    if porf and 'wxId' in porf:
+                        winDataSource = self.FindWindowById(porf['wxId'][0])
+                        winDataSource.reloadDataRequired.connect(
+                            lambda listData: self.win1.LoadData(
+                                listData, False))
+                        p['wxId'] = [self.win1.GetId()]
+
+                        def OnCheckItem(index, flag):
+                            layers = list()
+                            for layer, match, listId in self.win1.GetLayers():
+                                layers.append(layer)
+                            porf = self.task.get_param(
+                                'layer', element='name', raiseError=False)
+                            porf['value'] = ','.join(layers)
+                            self.OnUpdateValues()  # TODO: replace by signal
+
+                        self.win1.OnCheckItem = OnCheckItem
+
+            if self.parent.GetName() == 'MainFrame' and (
+                    self._giface and hasattr(self._giface, "_model")):
+                parChk = wx.CheckBox(parent=which_panel, id=wx.ID_ANY,
+                                     label=_("Parameterized in model"))
                 parChk.SetName('ModelParam')
                 parChk.SetValue(p.get('parameterized', False))
                 if 'wxId' in p:
                     p['wxId'].append(parChk.GetId())
                 else:
-                    p['wxId'] = [ parChk.GetId() ]
+                    p['wxId'] = [parChk.GetId()]
                 parChk.Bind(wx.EVT_CHECKBOX, self.OnSetValue)
-                which_sizer.Add(item = parChk, proportion = 0,
-                                flag = wx.LEFT, border = 20)
-                
+                which_sizer.Add(item=parChk, proportion=0,
+                                flag=wx.LEFT, border=20)
+
             if title_txt is not None:
                 # create tooltip if given
                 if len(p['values_desc']) > 0:
                     if tooltip:
-                        tooltip +=  2 * os.linesep
+                        tooltip += 2 * os.linesep
                     else:
                         tooltip = ''
                     if len(p['values']) == len(p['values_desc']):
                         for i in range(len(p['values'])):
-                            tooltip +=  p['values'][i] + ': ' + p['values_desc'][i] + os.linesep
+                            tooltip += p['values'][i] + ': ' + \
+                                p['values_desc'][i] + os.linesep
                     tooltip.strip(os.linesep)
                 if tooltip:
                     title_txt.SetToolTipString(tooltip)
@@ -1692,7 +2059,7 @@ class CmdPanel(wx.Panel):
                 if 'wxId' in p and len(p['wxId']) > 0:
                     win = self.FindWindowById(p['wxId'][0])
                     win.SetFocus()
-        
+
         #
         # set widget relations for OnUpdateSelection
         #
@@ -1710,20 +2077,21 @@ class CmdPanel(wx.Panel):
         pMapset = None
         for p in self.task.params:
             guidep = p.get('guidependency', '')
-            
+
             if guidep:
                 # fixed options dependency defined
                 options = guidep.split(',')
                 for opt in options:
-                    pOpt = self.task.get_param(opt, element = 'name', raiseError = False)
+                    pOpt = self.task.get_param(
+                        opt, element='name', raiseError=False)
                     if pOpt and id:
                         if 'wxId-bind' not in p:
                             p['wxId-bind'] = list()
-                        p['wxId-bind'] +=  pOpt['wxId']
+                        p['wxId-bind'] += pOpt['wxId']
                 continue
             if p.get('gisprompt', False) == False:
                 continue
-            
+
             prompt = p.get('prompt', '')
             if prompt in ('raster', 'vector'):
                 name = p.get('name', '')
@@ -1751,7 +2119,7 @@ class CmdPanel(wx.Panel):
                 pLocation = p
             elif prompt == 'mapset':
                 pMapset = p
-        
+
         # collect ids
         pColumnIds = []
         for p in pColumn:
@@ -1762,17 +2130,17 @@ class CmdPanel(wx.Panel):
         pSigFileIds = []
         for p in pSigFile:
             pSigFileIds += p['wxId']
-        
+
         # set wxId-bindings
         if pMap:
             pMap['wxId-bind'] = []
             if pLayer:
-                pMap['wxId-bind'] +=  pLayerIds
+                pMap['wxId-bind'] += pLayerIds
             pMap['wxId-bind'] += copy.copy(pColumnIds)
         if pLayer:
             for p in pLayer:
                 p['wxId-bind'] = copy.copy(pColumnIds)
-        
+
         if pDriver and pTable:
             pDriver['wxId-bind'] = pTable['wxId']
 
@@ -1781,24 +2149,24 @@ class CmdPanel(wx.Panel):
 
         if pTable and pColumnIds:
             pTable['wxId-bind'] = pColumnIds
-        
+
         if pGroup and pSubGroup:
             if pSigFile:
                 pGroup['wxId-bind'] = pSigFileIds + pSubGroup['wxId']
                 pSubGroup['wxId-bind'] = pSigFileIds
             else:
                 pGroup['wxId-bind'] = pSubGroup['wxId']
-        
+
         if pDbase and pLocation:
             pDbase['wxId-bind'] = pLocation['wxId']
 
         if pLocation and pMapset:
             pLocation['wxId-bind'] = pMapset['wxId']
-        
+
         if pLocation and pMapset and pMap:
             # pLocation['wxId-bind'] +=  pMap['wxId']
             pMapset['wxId-bind'] = pMap['wxId']
-        
+
         #
         # determine panel size
         #
@@ -1812,57 +2180,72 @@ class CmdPanel(wx.Panel):
 
         # TODO: be less arbitrary with these 600
         self.panelMinHeight = 100
-        self.constrained_size = (min(600, maxsizes[0]) + 25, min(400, maxsizes[1]) + 25)
+        self.constrained_size = (
+            min(600, maxsizes[0]) + 25, min(400, maxsizes[1]) + 25)
         for section in sections:
-            tab[section].SetMinSize((self.constrained_size[0], self.panelMinHeight))
-        
-        
+            tab[section].SetMinSize(
+                (self.constrained_size[0], self.panelMinHeight))
+
         # add pages to notebook
         imageList = wx.ImageList(16, 16)
         self.notebook.AssignImageList(imageList)
 
         for section in sections:
-            self.notebook.AddPage(page = tab[section], text = section, name = section)
+            self.notebook.AddPage(
+                page=tab[section],
+                text=section, name=section)
             index = self.AddBitmapToImageList(section, imageList)
             if index >= 0:
                 self.notebook.SetPageImage(section, index)
 
         # are we running from command line?
-        ### add 'command output' tab regardless standalone dialog
+        # add 'command output' tab regardless standalone dialog
         if self.parent.GetName() == "MainFrame" and self.parent.get_dcmd is None:
             from core.gconsole import GConsole, EVT_CMD_RUN, EVT_CMD_DONE
             from gui_core.goutput import GConsoleWindow
-            self._gconsole = GConsole(guiparent = self.notebook, giface = self._giface)
-            self.goutput = GConsoleWindow(parent = self.notebook, gconsole = self._gconsole, margin = False)
-            self._gconsole.Bind(EVT_CMD_RUN,
-                                lambda event:
-                                    self._switchPageHandler(event=event, notification=Notification.MAKE_VISIBLE))
-            self._gconsole.Bind(EVT_CMD_DONE,
-                                lambda event:
-                                    self._switchPageHandler(event = event, notification=Notification.RAISE_WINDOW))
-            self.outpage = self.notebook.AddPage(page = self.goutput, text = _("Command output"), name = 'output')
+            self._gconsole = GConsole(
+                guiparent=self.notebook, giface=self._giface)
+            self.goutput = GConsoleWindow(
+                parent=self.notebook,
+                gconsole=self._gconsole,
+                margin=False)
+            self._gconsole.Bind(
+                EVT_CMD_RUN, lambda event: self._switchPageHandler(
+                    event=event, notification=Notification.MAKE_VISIBLE))
+            self._gconsole.Bind(
+                EVT_CMD_DONE, lambda event: self._switchPageHandler(
+                    event=event, notification=Notification.RAISE_WINDOW))
+            self.outpage = self.notebook.AddPage(
+                page=self.goutput, text=_("Command output"), name='output')
         else:
             self.goutput = None
             self._gconsole = None
 
-        self.manualTab = HelpPanel(parent = self.notebook, command = self.task.get_name())
+        self.manualTab = HelpPanel(
+            parent=self.notebook,
+            command=self.task.get_name())
         if not self.manualTab.GetFile():
             self.manualTab.Hide()
         else:
-            self.notebook.AddPage(page = self.manualTab, text = _("Manual"), name = 'manual')
-            index = self.AddBitmapToImageList(section = 'manual', imageList = imageList)
+            self.notebook.AddPage(
+                page=self.manualTab,
+                text=_("Manual"),
+                name='manual')
+            index = self.AddBitmapToImageList(
+                section='manual', imageList=imageList)
             if index >= 0:
                 self.notebook.SetPageImage('manual', index)
-        
+
         if self.manualTab.IsLoaded():
-            self.manualTab.SetMinSize((self.constrained_size[0], self.panelMinHeight))
+            self.manualTab.SetMinSize(
+                (self.constrained_size[0], self.panelMinHeight))
 
         self.notebook.SetSelection(0)
 
-        panelsizer.Add(item = self.notebook, proportion = 1, flag = wx.EXPAND)
+        panelsizer.Add(item=self.notebook, proportion=1, flag=wx.EXPAND)
         self.SetSizer(panelsizer)
         panelsizer.Fit(self.notebook)
-        
+
         self.Bind(EVT_DIALOG_UPDATE, self.OnUpdateDialog)
 
     def _getValue(self, p):
@@ -1870,10 +2253,10 @@ class CmdPanel(wx.Panel):
 
         :param p: parameter directory
         """
-        if p.get('value', '') !=  '':
+        if p.get('value', '') != '':
             return p['value']
         return p.get('default', '')
-        
+
     def OnFileLoad(self, event):
         """Load file to interactive input"""
         me = event.GetId()
@@ -1883,31 +2266,31 @@ class CmdPanel(wx.Panel):
                 win['file'] = self.FindWindowById(p['wxId'][0])
                 win['text'] = self.FindWindowById(p['wxId'][1])
                 break
-        
+
         if not win:
             return
-        
+
         path = win['file'].GetValue()
         if not path:
-            gcmd.GMessage(parent = self,
-                          message = _("Nothing to load."))
+            gcmd.GMessage(parent=self,
+                          message=_("Nothing to load."))
             return
-        
+
         data = ''
         try:
             f = open(path, "r")
         except IOError as e:
-            gcmd.GError(parent = self, showTraceback = False,
-                        message = _("Unable to load file.\n\nReason: %s") % e)
+            gcmd.GError(parent=self, showTraceback=False,
+                        message=_("Unable to load file.\n\nReason: %s") % e)
             return
-        
+
         try:
             data = f.read()
         finally:
             f.close()
-        
+
         win['text'].SetValue(data)
-        
+
     def OnFileSave(self, event):
         """Save interactive input to the file"""
         wId = event.GetId()
@@ -1917,49 +2300,53 @@ class CmdPanel(wx.Panel):
                 win['file'] = self.FindWindowById(p['wxId'][0])
                 win['text'] = self.FindWindowById(p['wxId'][1])
                 break
-        
+
         if not win:
             return
 
         text = win['text'].GetValue()
         if not text:
-            gcmd.GMessage(parent = self,
-                          message = _("Nothing to save."))
+            gcmd.GMessage(parent=self,
+                          message=_("Nothing to save."))
             return
-        
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Save input as..."),
-                            defaultDir = os.getcwd(),
-                            style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+
+        dlg = wx.FileDialog(parent=self,
+                            message=_("Save input as..."),
+                            defaultDir=os.getcwd(),
+                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
 
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             enc = locale.getdefaultlocale()[1]
-            f = codecs.open(path, encoding = enc, mode = 'w', errors='replace')
+            f = codecs.open(path, encoding=enc, mode='w', errors='replace')
             try:
                 f.write(text + os.linesep)
             finally:
                 f.close()
-            
+
             win['file'].SetValue(path)
-        
+
         dlg.Destroy()
-        
+
     def OnFileText(self, event):
         """File input interactively entered"""
         text = event.GetString()
-        p = self.task.get_param(value = event.GetId(), element = 'wxId', raiseError = False)
+        p = self.task.get_param(
+            value=event.GetId(),
+            element='wxId',
+            raiseError=False)
         if not p:
-            return # should not happen
+            return  # should not happen
         win = self.FindWindowById(p['wxId'][0])
         if text:
             filename = win.GetValue()
-            if not filename or filename == p['default']:  # m.proj has - as default
+            if not filename or filename == p[
+                    'default']:  # m.proj has - as default
                 filename = grass.tempfile()
                 win.SetValue(filename)
-                
+
             enc = locale.getdefaultlocale()[1]
-            f = codecs.open(filename, encoding = enc, mode = 'w', errors='replace')
+            f = codecs.open(filename, encoding=enc, mode='w', errors='replace')
             try:
                 f.write(text)
                 if text[-1] != os.linesep:
@@ -1968,18 +2355,21 @@ class CmdPanel(wx.Panel):
                 f.close()
         else:
             win.SetValue('')
-        
+
     def OnVectorFormat(self, event):
         """Change vector format (native / ogr).
 
-        Currently unused.        
+        Currently unused.
         """
         sel = event.GetSelection()
         idEvent = event.GetId()
-        p = self.task.get_param(value = idEvent, element = 'wxId', raiseError = False)
+        p = self.task.get_param(
+            value=idEvent,
+            element='wxId',
+            raiseError=False)
         if not p:
-            return # should not happen
-        
+            return  # should not happen
+
         # detect windows
         winNative = None
         winOgr = None
@@ -1988,53 +2378,56 @@ class CmdPanel(wx.Panel):
                 continue
             name = self.FindWindowById(id).GetName()
             if name == 'Select':
-                winNative = self.FindWindowById(id + 1)  # fix the mystery (also in nviz_tools.py)
+                # fix the mystery (also in nviz_tools.py)
+                winNative = self.FindWindowById(id + 1)
             elif name == 'OgrSelect':
                 winOgr = self.FindWindowById(id)
-        
+
         # enable / disable widgets & update values
         rbox = self.FindWindowByName('VectorFormat')
         self.hsizer.Remove(rbox)
         if sel == 0:   # -> native
             winOgr.Hide()
             self.hsizer.Remove(winOgr)
-            
-            self.hsizer.Add(item = winNative,
-                            flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_TOP,
-                            border = 5)
+
+            self.hsizer.Add(
+                item=winNative,
+                flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_TOP,
+                border=5)
             winNative.Show()
             p['value'] = winNative.GetValue()
-        
-        elif sel == 1: # -> OGR
+
+        elif sel == 1:  # -> OGR
             sizer = wx.BoxSizer(wx.VERTICAL)
-            
+
             winNative.Hide()
             self.hsizer.Remove(winNative)
 
-            sizer.Add(item = winOgr)
+            sizer.Add(item=winOgr)
             winOgr.Show()
             p['value'] = winOgr.GetDsn()
-            
-            self.hsizer.Add(item = sizer,
-                            flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_TOP,
-                            border = 5)
-        
-        self.hsizer.Add(item = rbox,
-                        flag = wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT |
+
+            self.hsizer.Add(
+                item=sizer,
+                flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT | wx.RIGHT | wx.TOP | wx.ALIGN_TOP,
+                border=5)
+
+        self.hsizer.Add(item=rbox,
+                        flag=wx.ADJUST_MINSIZE | wx.BOTTOM | wx.LEFT |
                         wx.RIGHT | wx.ALIGN_TOP,
-                        border = 5)
-        
+                        border=5)
+
         self.hsizer.Layout()
         self.Layout()
         self.OnUpdateValues()
         self.OnUpdateSelection(event)
-        
+
     def OnUpdateDialog(self, event):
         for fn, kwargs in event.data.iteritems():
             fn(**kwargs)
-        
+
         self.parent.updateValuesHook()
-        
+
     def OnVerbosity(self, event):
         """Verbosity level changed"""
         verbose = self.FindWindowById(self.task.get_flag('verbose')['wxId'][0])
@@ -2056,7 +2449,7 @@ class CmdPanel(wx.Panel):
             sel = self.notebook.GetSelection()
         else:
             sel = event.GetSelection()
-        
+
         idx = self.notebook.GetPageIndexByName('manual')
         if idx > -1 and sel == idx:
             # calling LoadPage() is strangely time-consuming (only first call)
@@ -2093,13 +2486,14 @@ class CmdPanel(wx.Panel):
         myId = event.GetId()
         for p in self.task.params:
             if 'wxId' in p and myId in p['wxId']:
-                multiple = p['wxId'][1] is not None # multiple colors
+                multiple = p['wxId'][1] is not None  # multiple colors
                 hasTansp = p['wxId'][2] is not None
                 if multiple:
                     # selected color is added at the end of textCtrl
                     colorchooser = wx.FindWindowById(p['wxId'][0])
                     new_color = colorchooser.GetValue()[:]
-                    new_label = utils.rgb2str.get(new_color, ':'.join(map(str, new_color)))
+                    new_label = utils.rgb2str.get(
+                        new_color, ':'.join(map(str, new_color)))
                     textCtrl = wx.FindWindowById(p['wxId'][1])
                     val = textCtrl.GetValue()
                     sep = ','
@@ -2107,22 +2501,23 @@ class CmdPanel(wx.Panel):
                         val += sep
                     val += new_label
                     textCtrl.SetValue(val)
-                    p[ 'value' ] = val
+                    p['value'] = val
                 elif hasTansp and wx.FindWindowById(p['wxId'][2]).GetValue():
-                    p[ 'value' ] = 'none'
+                    p['value'] = 'none'
                 else:
                     colorchooser = wx.FindWindowById(p['wxId'][0])
                     new_color = colorchooser.GetValue()[:]
                     # This is weird: new_color is a 4-tuple and new_color[:] is a 3-tuple
                     # under wx2.8.1
-                    new_label = utils.rgb2str.get(new_color, ':'.join(map(str,new_color)))
+                    new_label = utils.rgb2str.get(
+                        new_color, ':'.join(map(str, new_color)))
                     colorchooser.SetLabel(new_label)
                     colorchooser.SetColour(new_color)
                     colorchooser.Refresh()
-                    p[ 'value' ] = colorchooser.GetLabel()
+                    p['value'] = colorchooser.GetLabel()
         self.OnUpdateValues()
 
-    def OnUpdateValues(self, event = None):
+    def OnUpdateValues(self, event=None):
         """If we were part of a richer interface, report back the
         current command being built.
 
@@ -2150,12 +2545,12 @@ class CmdPanel(wx.Panel):
         theValue = theParam['values'][myIndex]
 
         if event.Checked():
-            currentValues[ theValue ] = 1
+            currentValues[theValue] = 1
         else:
-            del currentValues[ theValue ]
+            del currentValues[theValue]
 
         # Keep the original order, so that some defaults may be recovered
-        currentValueList = [] 
+        currentValueList = []
         for v in theParam['values']:
             if v in currentValues:
                 currentValueList.append(v)
@@ -2176,64 +2571,72 @@ class CmdPanel(wx.Panel):
         myId = event.GetId()
         me = wx.FindWindowById(myId)
         name = me.GetName()
-        
+
         found = False
         for porf in self.task.params + self.task.flags:
             if 'wxId' not in porf:
                 continue
+
             if myId in porf['wxId']:
                 found = True
                 break
-        
+
         if not found:
             return
-        
+
         if name == 'GdalSelect':
             porf['value'] = event.dsn
         elif name == 'ModelParam':
             porf['parameterized'] = me.IsChecked()
+        elif name == 'GdalSelectDataSource':
+            win = self.FindWindowById(porf['wxId'][0])
+            porf['value'] = win.GetDsn()
+            pLayer = self.task.get_param(
+                'layer', element='name', raiseError=False)
+            if pLayer:
+                pLayer['value'] = ''
         else:
             if isinstance(me, wx.SpinCtrl):
                 porf['value'] = str(me.GetValue())
             elif isinstance(me, wx.ComboBox):
                 porf['value'] = me.GetValue()
             elif isinstance(me, wx.Choice):
-                porf['value'] = me.GetStringSelection()                    
+                porf['value'] = me.GetStringSelection()
             else:
                 porf['value'] = me.GetValue()
-        
+
         self.OnUpdateValues(event)
-        
+
         event.Skip()
-        
+
     def OnSetSymbol(self, event):
         """Shows dialog for symbol selection"""
         myId = event.GetId()
-        
+
         for p in self.task.params:
             if 'wxId' in p and myId in p['wxId']:
                 from gui_core.dialogs import SymbolDialog
-                dlg = SymbolDialog(self, symbolPath = globalvar.SYMBDIR,
-                                   currentSymbol = p['value'])
+                dlg = SymbolDialog(self, symbolPath=globalvar.SYMBDIR,
+                                   currentSymbol=p['value'])
                 if dlg.ShowModal() == wx.ID_OK:
                     img = dlg.GetSelectedSymbolPath()
                     p['value'] = dlg.GetSelectedSymbolName()
-                    
+
                     bitmapButton = wx.FindWindowById(p['wxId'][0])
                     label = wx.FindWindowById(p['wxId'][1])
-                    
+
                     bitmapButton.SetBitmapLabel(wx.Bitmap(img + '.png'))
                     label.SetLabel(p['value'])
-                    
+
                     self.OnUpdateValues(event)
-                    
+
                 dlg.Destroy()
 
     def OnTimelineTool(self, event):
         """Show Timeline Tool with dataset(s) from gselect.
 
         .. todo::
-            update from gselect automatically        
+            update from gselect automatically
         """
         myId = event.GetId()
 
@@ -2247,6 +2650,24 @@ class CmdPanel(wx.Panel):
                 from timeline import frame
                 frame.run(parent=self, datasets=datasets)
 
+    def OnSelectFont(self, event):
+        """Select font using font dialog"""
+        myId = event.GetId()
+        for p in self.task.params:
+            if 'wxId' in p and myId in p['wxId']:
+                from gui_core.dialogs import DefaultFontDialog
+                dlg = DefaultFontDialog(parent=self,
+                                        title=_('Select font'),
+                                        style=wx.DEFAULT_DIALOG_STYLE,
+                                        type='font')
+                if dlg.ShowModal() == wx.ID_OK:
+                    if dlg.font:
+                        p['value'] = dlg.font
+                        self.FindWindowById(p['wxId'][1]).SetValue(dlg.font)
+                        self.OnUpdateValues(event)
+                dlg.Destroy()
+
+
     def OnUpdateSelection(self, event):
         """Update dialog (layers, tables, columns, etc.)
         """
@@ -2266,8 +2687,8 @@ class CmdPanel(wx.Panel):
                                             None,
                                             None,
                                             self.task)
-            
-    def createCmd(self, ignoreErrors = False, ignoreRequired = False):
+
+    def createCmd(self, ignoreErrors=False, ignoreRequired=False):
         """Produce a command line string (list) or feeding into GRASS.
 
         :param ignoreErrors: True then it will return whatever has been
@@ -2275,37 +2696,46 @@ class CmdPanel(wx.Panel):
                              a correct command for GRASS
         """
         try:
-            cmd = self.task.get_cmd(ignoreErrors = ignoreErrors,
-                                   ignoreRequired = ignoreRequired)
+            cmd = self.task.get_cmd(ignoreErrors=ignoreErrors,
+                                    ignoreRequired=ignoreRequired)
         except ValueError as err:
-            dlg = wx.MessageDialog(parent = self,
-                                   message = gcmd.DecodeString(str(err)),
-                                   caption = _("Error in %s") % self.task.name,
-                                   style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+            dlg = wx.MessageDialog(parent=self,
+                                   message=gcmd.DecodeString(str(err)),
+                                   caption=_("Error in %s") % self.task.name,
+                                   style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             dlg.ShowModal()
             dlg.Destroy()
             cmd = None
-        
+
         return cmd
-    
+
     def OnSize(self, event):
         width = event.GetSize()[0]
         fontsize = self.GetFont().GetPointSize()
         text_width = max(width / (fontsize - 3), 70)
-        
+
         for id in self.label_id:
             win = self.FindWindowById(id)
             label = win.GetLabel()
             label_new = '\n'.join(textwrap.wrap(label, text_width))
             win.SetLabel(label_new)
-            
+
         event.Skip()
-        
+
     def AddBitmapToImageList(self, section, imageList):
-        iconTheme = UserSettings.Get(group = 'appearance', key = 'iconTheme', subkey = 'type')
-        iconSectionDict = {'manual': os.path.join(globalvar.ICONDIR, iconTheme, 'help.png')}
+        iconTheme = UserSettings.Get(
+            group='appearance',
+            key='iconTheme',
+            subkey='type')
+        iconSectionDict = {
+            'manual': os.path.join(
+                globalvar.ICONDIR,
+                iconTheme,
+                'help.png')}
         if section in iconSectionDict.keys():
-            image = wx.Image(iconSectionDict[section]).Scale(16, 16, wx.IMAGE_QUALITY_HIGH)
+            image = wx.Image(
+                iconSectionDict[section]).Scale(
+                16, 16, wx.IMAGE_QUALITY_HIGH)
             idx = imageList.Add(wx.BitmapFromImage(image))
             return idx
 
@@ -2313,42 +2743,43 @@ class CmdPanel(wx.Panel):
 
 
 class GUI:
-    def __init__(self, parent = None, giface = None, show = True, modal = False,
-                 centreOnParent = False, checkError = False):
+
+    def __init__(self, parent=None, giface=None, show=True, modal=False,
+                 centreOnParent=False, checkError=False):
         """Parses GRASS commands when module is imported and used from
         Layer Manager.
         """
         self.parent = parent
-        self.show   = show
-        self.modal  = modal
+        self.show = show
+        self.modal = modal
         self._giface = giface
         self.centreOnParent = centreOnParent
-        self.checkError     = checkError
-        
+        self.checkError = checkError
+
         self.grass_task = None
         self.cmd = list()
-        
+
         global _blackList
         if self.parent:
             _blackList['enabled'] = True
         else:
             _blackList['enabled'] = False
-        
+
     def GetCmd(self):
         """Get validated command"""
         return self.cmd
-    
-    def ParseCommand(self, cmd, completed = None):
+
+    def ParseCommand(self, cmd, completed=None):
         """Parse command
-        
+
         Note: cmd is given as list
-        
+
         If command is given with options, return validated cmd list:
          - add key name for first parameter if not given
          - change mapname to mapname at mapset
         """
         dcmd_params = {}
-        if completed == None:
+        if completed is None:
             get_dcmd = None
             layer = None
             dcmd_params = None
@@ -2357,75 +2788,79 @@ class GUI:
             layer = completed[1]
             if completed[2]:
                 dcmd_params.update(completed[2])
-        
+
         # parse the interface decription
         try:
             global _blackList
             self.grass_task = gtask.parse_interface(cmd[0],
-                                                    blackList = _blackList)
+                                                    blackList=_blackList)
         except (grass.ScriptError, ValueError) as e:
             raise gcmd.GException(e.value)
-        
+
         # if layer parameters previously set, re-insert them into dialog
         if completed is not None:
             if 'params' in dcmd_params:
                 self.grass_task.params = dcmd_params['params']
             if 'flags' in dcmd_params:
                 self.grass_task.flags = dcmd_params['flags']
-        
+
         err = list()
         # update parameters if needed && validate command
         if len(cmd) > 1:
             i = 0
             cmd_validated = [cmd[0]]
             for option in cmd[1:]:
-                if option[0] == '-': # flag
+                if option[0] == '-':  # flag
                     if len(option) == 1:  # catch typo like 'g.proj - w'
-                        raise gcmd.GException, _("Unable to parse command '%s'") % ' '.join(cmd)
+                        raise gcmd.GException(
+                            _("Unable to parse command '%s'") %
+                            ' '.join(cmd))
                     if option[1] == '-':
                         self.grass_task.set_flag(option[2:], True)
                     else:
                         self.grass_task.set_flag(option[1], True)
                     cmd_validated.append(option)
-                else: # parameter
+                else:  # parameter
                     try:
                         key, value = option.split('=', 1)
                     except ValueError:
                         if self.grass_task.firstParam:
-                            if i == 0: # add key name of first parameter if not given
+                            if i == 0:  # add key name of first parameter if not given
                                 key = self.grass_task.firstParam
                                 value = option
                             else:
-                                raise gcmd.GException, _("Unable to parse command '%s'") % ' '.join(cmd)
+                                raise gcmd.GException(
+                                    _("Unable to parse command '%s'") % ' '.join(cmd))
                         else:
                             continue
-                    
-                    task = self.grass_task.get_param(key, raiseError = False)
+
+                    task = self.grass_task.get_param(key, raiseError=False)
                     if not task:
-                        err.append(_("%(cmd)s: parameter '%(key)s' not available") % \
-                                       { 'cmd' : cmd[0],
-                                         'key' : key })
+                        err.append(
+                            _("%(cmd)s: parameter '%(key)s' not available") % {
+                                'cmd': cmd[0],
+                                'key': key})
                         continue
-                    
+
                     self.grass_task.set_param(key, value)
                     cmd_validated.append(key + '=' + value)
                     i += 1
-            
+
             # update original command list
             cmd = cmd_validated
-        
+
         if self.show is not None:
-            self.mf = TaskFrame(parent = self.parent, giface = self._giface,
-                                task_description = self.grass_task,
-                                get_dcmd = get_dcmd, layer = layer)
+            self.mf = TaskFrame(parent=self.parent, giface=self._giface,
+                                task_description=self.grass_task,
+                                get_dcmd=get_dcmd, layer=layer)
         else:
             self.mf = None
-        
+
         if get_dcmd is not None:
             # update only propwin reference
-            get_dcmd(dcmd = None, layer = layer, params = None,
-                     propwin = self.mf)
-        
+            get_dcmd(dcmd=None, layer=layer, params=None,
+                     propwin=self.mf)
+
         if self.show is not None:
             self.mf.notebookpanel.OnUpdateSelection(None)
             if self.show is True:
@@ -2437,19 +2872,19 @@ class GUI:
                 self.mf.MakeModal(self.modal)
             else:
                 self.mf.OnApply(None)
-        
+
         self.cmd = cmd
-        
+
         if self.checkError:
             return self.grass_task, err
         else:
             return self.grass_task
-    
+
     def GetCommandInputMapParamKey(self, cmd):
         """Get parameter key for input raster/vector map
-        
+
         :param cmd: module name
-        
+
         :return: parameter key
         :return: None on failure
         """
@@ -2457,37 +2892,44 @@ class GUI:
         if not self.grass_task:
             tree = etree.fromstring(gtask.get_interface_description(cmd))
             self.grass_task = gtask.processTask(tree).get_task()
-            
+
             for p in self.grass_task.params:
                 if p.get('name', '') in ('input', 'map'):
                     age = p.get('age', '')
                     prompt = p.get('prompt', '')
-                    element = p.get('element', '') 
+                    element = p.get('element', '')
                     if age == 'old' and \
                             element in ('cell', 'grid3', 'vector') and \
-                            prompt in ('raster', '3d-raster', 'vector'):
+                            prompt in ('raster', 'raster_3d', 'vector'):
                         return p.get('name', None)
         return None
 
+
 class GrassGUIApp(wx.App):
     """Stand-alone GRASS command GUI
     """
+
     def __init__(self, grass_task):
         self.grass_task = grass_task
         wx.App.__init__(self, False)
-        
+
     def OnInit(self):
         msg = self.grass_task.get_error_msg()
         if msg:
-            gcmd.GError(msg + '\n\n' +
-                        _('Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable.'))
+            gcmd.GError(
+                msg +
+                '\n\n' +
+                _('Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable.'))
             return True
-        
-        self.mf = TaskFrame(parent = None, giface = None, task_description = self.grass_task)
+
+        self.mf = TaskFrame(
+            parent=None,
+            giface=None,
+            task_description=self.grass_task)
         self.mf.CentreOnScreen()
         self.mf.Show(True)
         self.SetTopWindow(self.mf)
-        
+
         return True
 
 
@@ -2503,21 +2945,22 @@ Test:
 
 
 if __name__ == "__main__":
-    
+
     if len(sys.argv) == 1:
         sys.exit(_(USAGE_MESSAGE).format(name=sys.argv[0]))
 
-    if sys.argv[1] !=  'test':
-        q = wx.LogNull()        
+    if sys.argv[1] != 'test':
+        q = wx.LogNull()
         from core.debug import Debug
         Debug.msg(1, "forms.py called using command: %s" % sys.argv[1])
         cmd = utils.split(sys.argv[1])
         task = gtask.grassTask(cmd[0])
         task.set_options(cmd[1:])
-        Debug.msg(1, "forms.py opening form for: %s" % task.get_cmd(ignoreErrors=True, ignoreRequired=True))
+        Debug.msg(1, "forms.py opening form for: %s" %
+                  task.get_cmd(ignoreErrors=True, ignoreRequired=True))
         app = GrassGUIApp(task)
         app.MainLoop()
-    else: #Test
+    else:  # Test
         # Test grassTask from within a GRASS session
         if os.getenv("GISBASE") is not None:
             task = gtask.grassTask("d.vect")
@@ -2526,7 +2969,8 @@ if __name__ == "__main__":
             task.get_param('layer')['value'] = 1
             task.get_param('label_bcolor')['value'] = "red"
             # the default parameter display is added automatically
-            assert ' '.join(task.get_cmd()) == "d.vect -i map=map_name layer=1 display=shape label_bcolor=red"
+            assert ' '.join(
+                task.get_cmd()) == "d.vect -i map=map_name layer=1 display=shape label_bcolor=red"
             print "Creation of task successful"
         # Test interface building with handmade grassTask,
         # possibly outside of a GRASS session.
@@ -2534,105 +2978,98 @@ if __name__ == "__main__":
         task = gtask.grassTask()
         task.name = "TestTask"
         task.description = "This is an artificial grassTask() object intended for testing purposes."
-        task.keywords = ["grass","test","task"]
+        task.keywords = ["grass", "test", "task"]
         task.params = [
             {
-            "name" : "text",
-            "description" : "Descriptions go into tooltips if labels are present, like this one",
-            "label" : "Enter some text",
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "hidden_text",
-            "description" : "This text should not appear in the form",
-            "hidden" : True,
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "text_default",
-            "description" : "Enter text to override the default",
-            "default" : "default text",
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "text_prefilled",
-            "description" : "You should see a friendly welcome message here",
-            "value" : "hello, world",
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "plain_color",
-            "description" : "This is a plain color, and it is a compulsory parameter",
-            "required" : False,
-            "gisprompt" : True,
-            "prompt" : "color",
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "transparent_color",
-            "description" : "This color becomes transparent when set to none",
-            "guisection" : "tab",
-            "gisprompt" : True,
-            "prompt" : "color",
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "multi",
-            "description" : "A multiple selection",
-            'default': u'red,green,blue',
-            'gisprompt': False,
-            'guisection': 'tab',
-            'multiple': u'yes',
-            'type': u'string',
-            'value': '',
-            'values': ['red', 'green', u'yellow', u'blue', u'purple', u'other'],
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "single",
-            "description" : "A single multiple-choice selection",
-            'values': ['red', 'green', u'yellow', u'blue', u'purple', u'other'],
-            "guisection" : "tab",
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "large_multi",
-            "description" : "A large multiple selection",
-            "gisprompt" : False,
-            "multiple" : "yes",
-            # values must be an array of strings
-            "values" : utils.str2rgb.keys() + map(str, utils.str2rgb.values()),
-            "key_desc": ["value"],
-            "values_desc": []
-            },{
-            "name" : "a_file",
-            "description" : "A file selector",
-            "gisprompt" : True,
-            "element" : "file",
-            "key_desc": ["value"],
-            "values_desc": []
-            }
-            ]
-        task.flags = [
-            {
-            "name" : "a",
-            "description" : "Some flag, will appear in Main since it is required",
-            "required" : True,
-            "value" : False,
-            "suppress_required": False
-            },{
-            "name" : "b",
-            "description" : "pre-filled flag, will appear in options since it is not required",
-            "value" : True,
-            "suppress_required": False
-            },{
-            "name" : "hidden_flag",
-            "description" : "hidden flag, should not be changeable",
-            "hidden" : "yes",
-            "value" : True,
-            "suppress_required": False
+                "name": "text",
+                "description": "Descriptions go into tooltips if labels are present, like this one",
+                "label": "Enter some text",
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "hidden_text",
+                "description": "This text should not appear in the form",
+                "hidden": True,
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "text_default",
+                "description": "Enter text to override the default",
+                "default": "default text",
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "text_prefilled",
+                "description": "You should see a friendly welcome message here",
+                "value": "hello, world",
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "plain_color",
+                "description": "This is a plain color, and it is a compulsory parameter",
+                "required": False,
+                "gisprompt": True,
+                "prompt": "color",
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "transparent_color",
+                "description": "This color becomes transparent when set to none",
+                "guisection": "tab",
+                "gisprompt": True,
+                "prompt": "color",
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "multi",
+                "description": "A multiple selection",
+                'default': u'red,green,blue',
+                'gisprompt': False,
+                'guisection': 'tab',
+                'multiple': u'yes',
+                'type': u'string',
+                'value': '',
+                'values': ['red', 'green', u'yellow', u'blue', u'purple', u'other'],
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "single",
+                "description": "A single multiple-choice selection",
+                'values': ['red', 'green', u'yellow', u'blue', u'purple', u'other'],
+                "guisection": "tab",
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "large_multi",
+                "description": "A large multiple selection",
+                "gisprompt": False,
+                "multiple": "yes",
+                # values must be an array of strings
+                "values": utils.str2rgb.keys() + map(str, utils.str2rgb.values()),
+                "key_desc": ["value"],
+                "values_desc": []
+            }, {
+                "name": "a_file",
+                "description": "A file selector",
+                "gisprompt": True,
+                "element": "file",
+                "key_desc": ["value"],
+                "values_desc": []
             }
-            ]
+        ]
+        task.flags = [{"name": "a",
+                       "description": "Some flag, will appear in Main since it is required",
+                       "required": True,
+                       "value": False,
+                       "suppress_required": False},
+                      {"name": "b",
+                       "description": "pre-filled flag, will appear in options since it is not required",
+                       "value": True,
+                       "suppress_required": False},
+                      {"name": "hidden_flag",
+                       "description": "hidden flag, should not be changeable",
+                       "hidden": "yes",
+                       "value": True,
+                       "suppress_required": False}]
         q = wx.LogNull()
         GrassGUIApp(task).MainLoop()
-
diff --git a/gui/wxpython/gui_core/ghelp.py b/gui/wxpython/gui_core/ghelp.py
index 9865b1c..b41a2a0 100644
--- a/gui/wxpython/gui_core/ghelp.py
+++ b/gui/wxpython/gui_core/ghelp.py
@@ -33,139 +33,152 @@ except ImportError:
 
 import grass.script as grass
 
-from core             import globalvar
+from core import globalvar
 from core.utils import _
-from core.gcmd        import GError, DecodeString
+from core.gcmd import GError, DecodeString
 from gui_core.widgets import FormNotebook, ScrolledPanel
-from core.debug       import Debug
+from core.debug import Debug
 
 
 class AboutWindow(wx.Frame):
     """Create custom About Window
     """
-    def __init__(self, parent, size = (770, 460), 
-                 title = _('About GRASS GIS'), **kwargs):
-        wx.Frame.__init__(self, parent = parent, id = wx.ID_ANY, title = title, size = size, **kwargs)
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
+
+    def __init__(self, parent, size=(770, 460),
+                 title=_('About GRASS GIS'), **kwargs):
+        wx.Frame.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=title,
+            size=size,
+            **kwargs)
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
         # icon
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
 
         # notebook
-        self.aboutNotebook = FormNotebook(self.panel, style = wx.BK_LEFT)
-        
+        self.aboutNotebook = FormNotebook(self.panel, style=wx.BK_LEFT)
+
         for title, win in ((_("Info"), self._pageInfo()),
                            (_("Copyright"), self._pageCopyright()),
                            (_("License"), self._pageLicense()),
                            (_("Citation"), self._pageCitation()),
                            (_("Authors"), self._pageCredit()),
                            (_("Contributors"), self._pageContributors()),
-                           (_("Extra contributors"), self._pageContributors(extra = True)),
+                           (_("Extra contributors"), self._pageContributors(extra=True)),
                            (_("Translators"), self._pageTranslators()),
                            (_("Translation status"), self._pageStats())):
-            self.aboutNotebook.AddPage(page = win, text = title)
+            self.aboutNotebook.AddPage(page=win, text=title)
         wx.CallAfter(self.aboutNotebook.SetSelection, 0)
         wx.CallAfter(self.aboutNotebook.Refresh)
-        
+
         # buttons
-        self.btnClose = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
+        self.btnClose = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
         self.btnClose.Bind(wx.EVT_BUTTON, self.OnCloseWindow)
 
         self._doLayout()
-        
+
     def _doLayout(self):
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnClose, proportion = 0,
-                     flag = wx.ALL | wx.ALIGN_RIGHT,
-                     border = 5)
-        
+        btnSizer.Add(item=self.btnClose, proportion=0,
+                     flag=wx.ALL | wx.ALIGN_RIGHT,
+                     border=5)
+
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(item = self.aboutNotebook, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 1)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALL | wx.ALIGN_RIGHT, border = 1)
-        
+        sizer.Add(item=self.aboutNotebook, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=1)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALL | wx.ALIGN_RIGHT, border=1)
+
         self.SetMinSize((400, 400))
-        
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
-                
+
         self.Layout()
-        
+
     def _pageInfo(self):
         """Info page"""
         # get version and web site
         vInfo = grass.version()
         if not vInfo:
             sys.stderr.write(_("Unable to get GRASS version\n"))
-        
+
         infoTxt = ScrolledPanel(self.aboutNotebook)
         infoTxt.SetBackgroundColour('WHITE')
         infoTxt.SetupScrolling()
         infoSizer = wx.BoxSizer(wx.VERTICAL)
-        infoGridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+        infoGridSizer = wx.GridBagSizer(vgap=5, hgap=5)
         logo = os.path.join(globalvar.ICONDIR, "grass-64x64.png")
-        logoBitmap = wx.StaticBitmap(parent = infoTxt, id = wx.ID_ANY,
-                                     bitmap = wx.Bitmap(name = logo,
-                                                        type = wx.BITMAP_TYPE_PNG))
-        infoSizer.Add(item = logoBitmap, proportion = 0,
-                      flag = wx.ALL | wx.ALIGN_CENTER, border = 20)
-        
+        logoBitmap = wx.StaticBitmap(parent=infoTxt, id=wx.ID_ANY,
+                                     bitmap=wx.Bitmap(name=logo,
+                                                      type=wx.BITMAP_TYPE_PNG))
+        infoSizer.Add(item=logoBitmap, proportion=0,
+                      flag=wx.ALL | wx.ALIGN_CENTER, border=20)
+
         infoLabel = 'GRASS GIS %s' % vInfo.get('version', _('unknown version'))
         if 'x86_64' in vInfo.get('build_platform', ''):
             infoLabel += ' (64bit)'
-        info = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                             label = infoLabel + os.linesep)
+        info = wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                             label=infoLabel + os.linesep)
         info.SetFont(wx.Font(13, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
         info.SetForegroundColour(wx.Colour(35, 142, 35))
-        infoSizer.Add(item = info, proportion = 0,
-                      flag = wx.BOTTOM | wx.ALIGN_CENTER, border = 1)
+        infoSizer.Add(item=info, proportion=0,
+                      flag=wx.BOTTOM | wx.ALIGN_CENTER, border=1)
 
         team = wx.StaticText(parent=infoTxt, label=_grassDevTeam(1999) + '\n')
-        infoSizer.Add(item = team, proportion = 0,
-                      flag = wx.BOTTOM | wx.ALIGN_CENTER, border = 1)
-        
+        infoSizer.Add(item=team, proportion=0,
+                      flag=wx.BOTTOM | wx.ALIGN_CENTER, border=1)
+
         row = 0
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = _('Official GRASS site:')),
-                          pos = (row, 0),
-                          flag = wx.ALIGN_RIGHT)
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label=_('Official GRASS site:')),
+                          pos=(row, 0),
+                          flag=wx.ALIGN_RIGHT)
 
-        infoGridSizer.Add(item = HyperLinkCtrl(parent = infoTxt, id = wx.ID_ANY,
-                                               label = 'http://grass.osgeo.org'),
-                          pos = (row, 1),
-                          flag = wx.ALIGN_LEFT)
+        infoGridSizer.Add(item=HyperLinkCtrl(parent=infoTxt, id=wx.ID_ANY,
+                                             label='http://grass.osgeo.org'),
+                          pos=(row, 1),
+                          flag=wx.ALIGN_LEFT)
 
         row += 2
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = '%s:' % _('Code Revision')),
-                          pos = (row, 0),
-                          flag = wx.ALIGN_RIGHT)
-        
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = vInfo.get('revision', '?')),
-                          pos = (row, 1),
-                          flag = wx.ALIGN_LEFT)
-        
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label='%s:' % _('Code Revision')),
+                          pos=(row, 0),
+                          flag=wx.ALIGN_RIGHT)
+
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label=vInfo.get('revision', '?')),
+                          pos=(row, 1),
+                          flag=wx.ALIGN_LEFT)
+
         row += 1
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = '%s:' % _('Build Date')),
-                          pos = (row, 0),
-                          flag = wx.ALIGN_RIGHT)
-        
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = vInfo.get('build_date', '?')),
-                          pos = (row, 1),
-                          flag = wx.ALIGN_LEFT)
-        
-        ### show only basic info
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label='%s:' % _('Build Date')),
+                          pos=(row, 0),
+                          flag=wx.ALIGN_RIGHT)
+
+        infoGridSizer.Add(
+            item=wx.StaticText(
+                parent=infoTxt, id=wx.ID_ANY, label=vInfo.get(
+                    'build_date', '?')), pos=(
+                row, 1), flag=wx.ALIGN_LEFT)
+
+        # show only basic info
         # row += 1
         # infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
         #                                        label = '%s:' % _('GIS Library Revision')),
         #                   pos = (row, 0),
         #                   flag = wx.ALIGN_RIGHT)
-        
+
         # infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
         #                                        label = vInfo['libgis_revision'] + ' (' +
         #                                        vInfo['libgis_date'].split(' ')[0] + ')'),
@@ -173,38 +186,39 @@ class AboutWindow(wx.Frame):
         #                   flag = wx.ALIGN_LEFT)
 
         row += 2
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = 'Python:'),
-                          pos = (row, 0),
-                          flag = wx.ALIGN_RIGHT)
-        
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = platform.python_version()),
-                          pos = (row, 1),
-                          flag = wx.ALIGN_LEFT)
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label='Python:'),
+                          pos=(row, 0),
+                          flag=wx.ALIGN_RIGHT)
+
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label=platform.python_version()),
+                          pos=(row, 1),
+                          flag=wx.ALIGN_LEFT)
 
         row += 1
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label =  'wxPython:'),
-                          pos = (row, 0),
-                          flag = wx.ALIGN_RIGHT)
-        
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = wx.__version__),
-                          pos = (row, 1),
-                          flag = wx.ALIGN_LEFT)
-        
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label='wxPython:'),
+                          pos=(row, 0),
+                          flag=wx.ALIGN_RIGHT)
+
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label=wx.__version__),
+                          pos=(row, 1),
+                          flag=wx.ALIGN_LEFT)
+
         infoGridSizer.AddGrowableCol(0)
         infoGridSizer.AddGrowableCol(1)
-        infoSizer.Add(item = infoGridSizer,
-                      proportion = 1,
-                      flag = wx.EXPAND | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL)
-        
+        infoSizer.Add(
+            item=infoGridSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL)
+
         row += 2
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = "%s:" % _('Language')),
-                          pos = (row, 0),
-                          flag = wx.ALIGN_RIGHT)
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label="%s:" % _('Language')),
+                          pos=(row, 0),
+                          flag=wx.ALIGN_RIGHT)
         self.langUsed = grass.gisenv().get('LANG', None)
         if not self.langUsed:
             import locale
@@ -213,16 +227,16 @@ class AboutWindow(wx.Frame):
                 self.langUsed = _('unknown')
             else:
                 self.langUsed = u'%s.%s' % (loc[0], loc[1])
-        infoGridSizer.Add(item = wx.StaticText(parent = infoTxt, id = wx.ID_ANY,
-                                               label = self.langUsed),
-                          pos = (row, 1),
-                          flag = wx.ALIGN_LEFT)        
-        
+        infoGridSizer.Add(item=wx.StaticText(parent=infoTxt, id=wx.ID_ANY,
+                                             label=self.langUsed),
+                          pos=(row, 1),
+                          flag=wx.ALIGN_LEFT)
+
         infoTxt.SetSizer(infoSizer)
         infoSizer.Fit(infoTxt)
-       
+
         return infoTxt
-    
+
     def _pageCopyright(self):
         """Copyright information"""
         copyfile = os.path.join(os.getenv("GISBASE"), "COPYING")
@@ -232,21 +246,22 @@ class AboutWindow(wx.Frame):
             copyrightFile.close()
         else:
             copytext = _('%s file missing') % 'COPYING'
-        
+
         # put text into a scrolling panel
         copyrightwin = ScrolledPanel(self.aboutNotebook)
-        copyrightwin.SetBackgroundColour('WHITE')
-        copyrighttxt = wx.StaticText(copyrightwin, id = wx.ID_ANY, label = copytext)
+        copyrighttxt = wx.TextCtrl(
+            copyrightwin, id=wx.ID_ANY, value=copytext,
+        style=wx.TE_MULTILINE | wx.TE_READONLY)
         copyrightwin.SetAutoLayout(True)
         copyrightwin.sizer = wx.BoxSizer(wx.VERTICAL)
-        copyrightwin.sizer.Add(item = copyrighttxt, proportion = 1,
-                               flag = wx.EXPAND | wx.ALL, border = 3)
+        copyrightwin.sizer.Add(item=copyrighttxt, proportion=1,
+                               flag=wx.EXPAND | wx.ALL, border=3)
         copyrightwin.SetSizer(copyrightwin.sizer)
         copyrightwin.Layout()
         copyrightwin.SetupScrolling()
-        
+
         return copyrightwin
-    
+
     def _pageLicense(self):
         """Licence about"""
         licfile = os.path.join(os.getenv("GISBASE"), "GPL.TXT")
@@ -258,18 +273,19 @@ class AboutWindow(wx.Frame):
             license = _('%s file missing') % 'GPL.TXT'
         # put text into a scrolling panel
         licensewin = ScrolledPanel(self.aboutNotebook)
-        licensewin.SetBackgroundColour('WHITE')
-        licensetxt = wx.StaticText(licensewin, id = wx.ID_ANY, label = license)
+        licensetxt = wx.TextCtrl(
+            licensewin, id=wx.ID_ANY, value=license,
+        style=wx.TE_MULTILINE | wx.TE_READONLY)
         licensewin.SetAutoLayout(True)
         licensewin.sizer = wx.BoxSizer(wx.VERTICAL)
-        licensewin.sizer.Add(item = licensetxt, proportion = 1,
-                flag = wx.EXPAND | wx.ALL, border = 3)
+        licensewin.sizer.Add(item=licensetxt, proportion=1,
+                             flag=wx.EXPAND | wx.ALL, border=3)
         licensewin.SetSizer(licensewin.sizer)
         licensewin.Layout()
         licensewin.SetupScrolling()
-        
+
         return licensewin
-    
+
     def _pageCitation(self):
         """Citation information"""
         try:
@@ -283,9 +299,9 @@ class AboutWindow(wx.Frame):
 
         # put text into a scrolling panel
         window = ScrolledPanel(self.aboutNotebook)
-        window.SetBackgroundColour('WHITE')
-        stat_text = wx.StaticText(
-            window, id=wx.ID_ANY, label=text)
+        stat_text = wx.TextCtrl(
+            window, id=wx.ID_ANY, value=text,
+        style=wx.TE_MULTILINE | wx.TE_READONLY)
         window.SetAutoLayout(True)
         window.sizer = wx.BoxSizer(wx.VERTICAL)
         window.sizer.Add(item=stat_text, proportion=1,
@@ -298,7 +314,7 @@ class AboutWindow(wx.Frame):
 
     def _pageCredit(self):
         """Credit about"""
-                # credits
+        # credits
         authfile = os.path.join(os.getenv("GISBASE"), "AUTHORS")
         if os.path.exists(authfile):
             authorsFile = open(authfile, 'r')
@@ -307,26 +323,31 @@ class AboutWindow(wx.Frame):
         else:
             authors = _('%s file missing') % 'AUTHORS'
         authorwin = ScrolledPanel(self.aboutNotebook)
-        authorwin.SetBackgroundColour('WHITE')
-        authortxt = wx.StaticText(authorwin, id = wx.ID_ANY, label = authors)
+        authortxt = wx.TextCtrl(
+            authorwin, id=wx.ID_ANY, value=authors,
+        style=wx.TE_MULTILINE | wx.TE_READONLY)
         authorwin.SetAutoLayout(True)
         authorwin.SetupScrolling()
         authorwin.sizer = wx.BoxSizer(wx.VERTICAL)
-        authorwin.sizer.Add(item = authortxt, proportion = 1,
-                flag = wx.EXPAND | wx.ALL, border = 3)
+        authorwin.sizer.Add(item=authortxt, proportion=1,
+                            flag=wx.EXPAND | wx.ALL, border=3)
         authorwin.SetSizer(authorwin.sizer)
-        authorwin.Layout()      
-        
+        authorwin.Layout()
+
         return authorwin
 
-    def _pageContributors(self, extra = False):
+    def _pageContributors(self, extra=False):
         """Contributors info"""
         if extra:
-            contribfile = os.path.join(os.getenv("GISBASE"), "contributors_extra.csv")
+            contribfile = os.path.join(
+                os.getenv("GISBASE"),
+                "contributors_extra.csv")
         else:
-            contribfile = os.path.join(os.getenv("GISBASE"), "contributors.csv")
+            contribfile = os.path.join(
+                os.getenv("GISBASE"),
+                "contributors.csv")
         if os.path.exists(contribfile):
-            contribFile = codecs.open(contribfile, encoding = 'utf-8', mode = 'r')
+            contribFile = codecs.open(contribfile, encoding='utf-8', mode='r')
             contribs = list()
             errLines = list()
             for line in contribFile.readlines()[1:]:
@@ -335,7 +356,8 @@ class AboutWindow(wx.Frame):
                     if extra:
                         name, email, country, rfc2_agreed = line.split(',')
                     else:
-                        cvs_id, name, email, country, osgeo_id, rfc2_agreed = line.split(',')
+                        cvs_id, name, email, country, osgeo_id, rfc2_agreed = line.split(
+                            ',')
                 except ValueError:
                     errLines.append(line)
                     continue
@@ -343,49 +365,60 @@ class AboutWindow(wx.Frame):
                     contribs.append((name, email, country))
                 else:
                     contribs.append((name, email, country, osgeo_id))
-            
+
             contribFile.close()
-            
+
             if errLines:
-                GError(parent = self,
-                       message = _("Error when reading file '%s'.") % contribfile + \
-                           "\n\n" + _("Lines:") + " %s" % \
-                           os.linesep.join(map(DecodeString, errLines)))
+                GError(parent=self, message=_("Error when reading file '%s'.") %
+                       contribfile + "\n\n" + _("Lines:") + " %s" %
+                       os.linesep.join(map(DecodeString, errLines)))
         else:
             contribs = None
-        
+
         contribwin = ScrolledPanel(self.aboutNotebook)
-        contribwin.SetBackgroundColour('WHITE')
         contribwin.SetAutoLayout(True)
         contribwin.SetupScrolling()
         contribwin.sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         if not contribs:
-            contribtxt = wx.StaticText(contribwin, id = wx.ID_ANY,
-                                       label = _('%s file missing') % contribfile)
-            contribwin.sizer.Add(item = contribtxt, proportion = 1,
-                                 flag = wx.EXPAND | wx.ALL, border = 3)
+            contribtxt = wx.StaticText(
+                contribwin,
+                id=wx.ID_ANY,
+                label=_('%s file missing') %
+                contribfile)
+            contribwin.sizer.Add(item=contribtxt, proportion=1,
+                                 flag=wx.EXPAND | wx.ALL, border=3)
         else:
             if extra:
                 items = (_('Name'), _('E-mail'), _('Country'))
             else:
                 items = (_('Name'), _('E-mail'), _('Country'), _('OSGeo_ID'))
-            contribBox = wx.FlexGridSizer(cols = len(items), vgap = 5, hgap = 5)
+            contribBox = wx.FlexGridSizer(cols=len(items), vgap=5, hgap=5)
             for item in items:
-                text = wx.StaticText(parent = contribwin, id = wx.ID_ANY,
-                                        label = item)
-                text.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
-                contribBox.Add(item = text)
-            for vals in sorted(contribs, key = lambda x: x[0]):
+                text = wx.StaticText(parent=contribwin, id=wx.ID_ANY,
+                                     label=item)
+                text.SetFont(
+                    wx.Font(
+                        10,
+                        wx.DEFAULT,
+                        wx.NORMAL,
+                        wx.BOLD,
+                        0,
+                        ""))
+                contribBox.Add(item=text)
+            for vals in sorted(contribs, key=lambda x: x[0]):
                 for item in vals:
-                    contribBox.Add(item = wx.StaticText(parent = contribwin, id = wx.ID_ANY,
-                                                        label = item))
-            contribwin.sizer.Add(item = contribBox, proportion = 1,
-                                 flag = wx.EXPAND | wx.ALL, border = 3)
-        
+                    contribBox.Add(
+                        item=wx.StaticText(
+                            parent=contribwin,
+                            id=wx.ID_ANY,
+                            label=item))
+            contribwin.sizer.Add(item=contribBox, proportion=1,
+                                 flag=wx.EXPAND | wx.ALL, border=3)
+
         contribwin.SetSizer(contribwin.sizer)
-        contribwin.Layout()      
-        
+        contribwin.Layout()
+
         return contribwin
 
     def _pageTranslators(self):
@@ -407,71 +440,88 @@ class AboutWindow(wx.Frame):
                         translators[language] = list()
                     translators[language].append((name, email))
             translatorsFile.close()
-            
+
             if errLines:
-                GError(parent = self,
-                       message = _("Error when reading file '%s'.") % translatorsfile + \
-                           "\n\n" + _("Lines:") + " %s" % \
-                           os.linesep.join(map(DecodeString, errLines)))
+                GError(parent=self, message=_("Error when reading file '%s'.") %
+                       translatorsfile + "\n\n" + _("Lines:") + " %s" %
+                       os.linesep.join(map(DecodeString, errLines)))
         else:
             translators = None
-        
+
         translatorswin = ScrolledPanel(self.aboutNotebook)
         translatorswin.SetBackgroundColour('WHITE')
         translatorswin.SetAutoLayout(True)
         translatorswin.SetupScrolling()
         translatorswin.sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         if not translators:
-            translatorstxt = wx.StaticText(translatorswin, id = wx.ID_ANY,
-                                           label = _('%s file missing') % 'translators.csv')
-            translatorswin.sizer.Add(item = translatorstxt, proportion = 1,
-                                 flag = wx.EXPAND | wx.ALL, border = 3)
+            translatorstxt = wx.StaticText(
+                translatorswin,
+                id=wx.ID_ANY,
+                label=_('%s file missing') %
+                'translators.csv')
+            translatorswin.sizer.Add(item=translatorstxt, proportion=1,
+                                     flag=wx.EXPAND | wx.ALL, border=3)
         else:
-            translatorsBox = wx.FlexGridSizer(cols = 4, vgap = 5, hgap = 5)
-            languages = translators.keys()
-            languages.sort()
-            tname = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                label = _('Name'))
+            translatorsBox = wx.FlexGridSizer(cols=4, vgap=5, hgap=5)
+            languages = sorted(translators.keys())
+            tname = wx.StaticText(parent=translatorswin, id=wx.ID_ANY,
+                                  label=_('Name'))
             tname.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
-            translatorsBox.Add(item = tname)
-            temail = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                label = _('E-mail'))
+            translatorsBox.Add(item=tname)
+            temail = wx.StaticText(parent=translatorswin, id=wx.ID_ANY,
+                                   label=_('E-mail'))
             temail.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
-            translatorsBox.Add(item = temail)
-            tlang = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                label = _('Language'))
+            translatorsBox.Add(item=temail)
+            tlang = wx.StaticText(parent=translatorswin, id=wx.ID_ANY,
+                                  label=_('Language'))
             tlang.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
-            translatorsBox.Add(item = tlang)
-            tnat = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                label = _('Nation'))
+            translatorsBox.Add(item=tlang)
+            tnat = wx.StaticText(parent=translatorswin, id=wx.ID_ANY,
+                                 label=_('Nation'))
             tnat.SetFont(wx.Font(10, wx.DEFAULT, wx.NORMAL, wx.BOLD, 0, ""))
-            translatorsBox.Add(item = tnat)           
+            translatorsBox.Add(item=tnat)
             for lang in languages:
                 for translator in translators[lang]:
                     name, email = translator
-                    translatorsBox.Add(item = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                                            label =  unicode(name, "utf-8")))
-                    translatorsBox.Add(item = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                                            label = email))
-                    translatorsBox.Add(item = wx.StaticText(parent = translatorswin, id = wx.ID_ANY,
-                                                            label = lang))                                                            
-                    flag = os.path.join(globalvar.ICONDIR, "flags", "%s.png" % lang.lower())
+                    translatorsBox.Add(
+                        item=wx.StaticText(
+                            parent=translatorswin,
+                            id=wx.ID_ANY,
+                            label=unicode(
+                                name,
+                                "utf-8")))
+                    translatorsBox.Add(
+                        item=wx.StaticText(
+                            parent=translatorswin,
+                            id=wx.ID_ANY,
+                            label=email))
+                    translatorsBox.Add(
+                        item=wx.StaticText(
+                            parent=translatorswin,
+                            id=wx.ID_ANY,
+                            label=lang))
+                    flag = os.path.join(
+                        globalvar.ICONDIR, "flags", "%s.png" %
+                        lang.lower())
                     if os.path.exists(flag):
-                        flagBitmap = wx.StaticBitmap(parent = translatorswin, id = wx.ID_ANY,
-                                     bitmap = wx.Bitmap(name = flag,
-                                                        type = wx.BITMAP_TYPE_PNG))
-                        translatorsBox.Add(item = flagBitmap)
+                        flagBitmap = wx.StaticBitmap(
+                            parent=translatorswin, id=wx.ID_ANY, bitmap=wx.Bitmap(
+                                name=flag, type=wx.BITMAP_TYPE_PNG))
+                        translatorsBox.Add(item=flagBitmap)
                     else:
-                        translatorsBox.Add(item = wx.StaticText(parent = translatorswin, 
-                                        id = wx.ID_ANY, label = lang))
-            
-            translatorswin.sizer.Add(item = translatorsBox, proportion = 1,
-                                 flag = wx.EXPAND | wx.ALL, border = 3)
-        
+                        translatorsBox.Add(
+                            item=wx.StaticText(
+                                parent=translatorswin,
+                                id=wx.ID_ANY,
+                                label=lang))
+
+            translatorswin.sizer.Add(item=translatorsBox, proportion=1,
+                                     flag=wx.EXPAND | wx.ALL, border=3)
+
         translatorswin.SetSizer(translatorswin.sizer)
-        translatorswin.Layout()      
-        
+        translatorswin.Layout()
+
         return translatorswin
 
     def _langString(self, k, v):
@@ -490,60 +540,61 @@ class AboutWindow(wx.Frame):
         except:
             pass
         return allStr
- 
+
     def _langBox(self, par, k, v):
         """Return box"""
-        langBox = wx.FlexGridSizer(cols = 4, vgap = 5, hgap = 5)
-        tkey = wx.StaticText(parent = par, id = wx.ID_ANY,
-                            label = k.upper())
-        langBox.Add(item = tkey)
+        langBox = wx.FlexGridSizer(cols=4, vgap=5, hgap=5)
+        tkey = wx.StaticText(parent=par, id=wx.ID_ANY,
+                             label=k.upper())
+        langBox.Add(item=tkey)
         try:
-            tgood = wx.StaticText(parent = par, id = wx.ID_ANY,
-                                label = _("%d translated" % v['good']))
+            tgood = wx.StaticText(parent=par, id=wx.ID_ANY,
+                                  label=_("%d translated" % v['good']))
             tgood.SetForegroundColour(wx.Colour(35, 142, 35))
-            langBox.Add(item = tgood)           
+            langBox.Add(item=tgood)
         except:
-            tgood = wx.StaticText(parent = par, id = wx.ID_ANY,
-                                label = "")
-            langBox.Add(item = tgood)
+            tgood = wx.StaticText(parent=par, id=wx.ID_ANY,
+                                  label="")
+            langBox.Add(item=tgood)
         try:
-            tfuzzy = wx.StaticText(parent = par, id = wx.ID_ANY,
-                                label = _("   %d fuzzy" % v['fuzzy']))
-            tfuzzy.SetForegroundColour(wx.Colour(255, 142, 0))                    
-            langBox.Add(item = tfuzzy)
+            tfuzzy = wx.StaticText(parent=par, id=wx.ID_ANY,
+                                   label=_("   %d fuzzy" % v['fuzzy']))
+            tfuzzy.SetForegroundColour(wx.Colour(255, 142, 0))
+            langBox.Add(item=tfuzzy)
         except:
-            tfuzzy = wx.StaticText(parent = par, id = wx.ID_ANY,
-                                label = "")
-            langBox.Add(item = tfuzzy)
+            tfuzzy = wx.StaticText(parent=par, id=wx.ID_ANY,
+                                   label="")
+            langBox.Add(item=tfuzzy)
         try:
-            tbad = wx.StaticText(parent = par, id = wx.ID_ANY,
-                                label = _("   %d untranslated" % v['bad']))
+            tbad = wx.StaticText(parent=par, id=wx.ID_ANY,
+                                 label=_("   %d untranslated" % v['bad']))
             tbad.SetForegroundColour(wx.Colour(255, 0, 0))
-            langBox.Add(item = tbad)
+            langBox.Add(item=tbad)
         except:
-            tbad = wx.StaticText(parent = par, id = wx.ID_ANY,
-                                label = "")
-            langBox.Add(item = tbad)                           
+            tbad = wx.StaticText(parent=par, id=wx.ID_ANY,
+                                 label="")
+            langBox.Add(item=tbad)
         return langBox
-        
+
     def _langPanel(self, lang, js):
         """Create panel for each languages"""
         text = self._langString(lang, js['total'])
-        panel = wx.CollapsiblePane(self.statswin, -1, label=text, style=wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE)
+        panel = wx.CollapsiblePane(
+            self.statswin, -1, label=text, style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE)
         panel.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged)
         win = panel.GetPane()
         # TODO IT DOESN'T WORK
         # TO ADD ONLY WHEN TAB IS OPENED
-        #if lang == self.langUsed.split('_')[0]:
-            #panel.Collapse(False)
-        #else:
-            #panel.Collapse(True)        
+        # if lang == self.langUsed.split('_')[0]:
+        # panel.Collapse(False)
+        # else:
+        # panel.Collapse(True)
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        for k,v in js.iteritems():
-            if k != 'total' and k!= 'name':
-                box = self._langBox(win, k,v)
-                pageSizer.Add(item = box, proportion = 1,
-                                 flag = wx.EXPAND | wx.ALL, border = 3)
+        for k, v in js.iteritems():
+            if k != 'total' and k != 'name':
+                box = self._langBox(win, k, v)
+                pageSizer.Add(item=box, proportion=1,
+                              flag=wx.EXPAND | wx.ALL, border=3)
 
         win.SetSizer(pageSizer)
         pageSizer.SetSizeHints(win)
@@ -553,7 +604,7 @@ class AboutWindow(wx.Frame):
     def OnPaneChanged(self, evt):
         """Redo the layout"""
         # TODO better to test on Windows
-        self.statswin.SetupScrolling(scrollToTop = False)
+        self.statswin.SetupScrolling(scrollToTop=False)
 
     def _pageStats(self):
         """Translation statistics info"""
@@ -572,30 +623,30 @@ class AboutWindow(wx.Frame):
         if not jsStats:
             Debug.msg(5, _("File <%s> not found") % fname)
             statsSizer = wx.BoxSizer(wx.VERTICAL)
-            statstext = wx.StaticText(self.statswin, id = wx.ID_ANY,
-                                           label = _('%s file missing') % fname)
-            statsSizer.Add(item = statstext, proportion = 1,
-                                 flag = wx.EXPAND | wx.ALL, border = 3)
+            statstext = wx.StaticText(self.statswin, id=wx.ID_ANY,
+                                      label=_('%s file missing') % fname)
+            statsSizer.Add(item=statstext, proportion=1,
+                           flag=wx.EXPAND | wx.ALL, border=3)
         else:
-            languages = jsStats['langs'].keys()
-            languages.sort()
-            
+            languages = sorted(jsStats['langs'].keys())
+
             statsSizer = wx.BoxSizer(wx.VERTICAL)
             for lang in languages:
                 v = jsStats['langs'][lang]
                 panel = self._langPanel(lang, v)
                 statsSizer.Add(panel)
-        
+
         self.statswin.SetSizer(statsSizer)
-        self.statswin.SetupScrolling(scroll_x = False, scroll_y = True)
+        self.statswin.SetupScrolling(scroll_x=False, scroll_y=True)
         self.statswin.Layout()
         self.statswin.Fit()
         return self.statswin
-    
+
     def OnCloseWindow(self, event):
         """Close window"""
         self.Close()
 
+
 class HelpFrame(wx.Dialog):
     """GRASS Quickstart help window
 
@@ -607,29 +658,33 @@ class HelpFrame(wx.Dialog):
     Currently not used (was in location wizard before)
     due to unsolved problems - window sometimes does not respond.
     """
+
     def __init__(self, parent, id, title, size, file):
-        wx.Dialog.__init__(self, parent = parent, id = id, title = title,
-                           size = size, style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MINIMIZE_BOX)
-        
+        wx.Dialog.__init__(
+            self, parent=parent, id=id, title=title, size=size,
+            style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER | wx.MINIMIZE_BOX)
+
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # text
-        content = HelpPanel(parent = self)
+        content = HelpPanel(parent=self)
         content.LoadPage(file)
-        
-        sizer.Add(item = content, proportion = 1, flag = wx.EXPAND)
-        
+
+        sizer.Add(item=content, proportion=1, flag=wx.EXPAND)
+
         self.SetAutoLayout(True)
         self.SetSizer(sizer)
         self.Layout()
 
+
 class HelpWindow(HtmlWindow):
     """This panel holds the text from GRASS docs.
-    
+
     GISBASE must be set in the environment to find the html docs dir.
     The SYNOPSIS section is skipped, since this Panel is supposed to
     be integrated into the cmdPanel and options are obvious there.
     """
+
     def __init__(self, parent, command, text, skipDescription,
                  **kwargs):
         """If command is given, the corresponding HTML help
@@ -646,31 +701,31 @@ class HelpWindow(HtmlWindow):
         self.parent = parent
         if not globalvar.CheckWxVersion([2, 9]):
             wx.InitAllImageHandlers()
-        HtmlWindow.__init__(self, parent = parent, **kwargs)
-        
+        HtmlWindow.__init__(self, parent=parent, **kwargs)
+
         self.loaded = False
         self.history = list()
         self.historyIdx = 0
         self.fspath = os.path.join(os.getenv("GISBASE"), "docs", "html")
-        
-        self.SetStandardFonts (size = 10)
+
+        self.SetStandardFonts(size=10)
         self.SetBorders(10)
-        
+
         if text is None:
             if skipDescription:
                 url = os.path.join(self.fspath, command + ".html")
                 self.fillContentsFromFile(url,
-                                          skipDescription = skipDescription)
+                                          skipDescription=skipDescription)
                 self.history.append(url)
                 self.loaded = True
             else:
-                ### FIXME: calling LoadPage() is strangely time-consuming (only first call)
+                # FIXME: calling LoadPage() is strangely time-consuming (only first call)
                 # self.LoadPage(self.fspath + command + ".html")
                 self.loaded = False
         else:
             self.SetPage(text)
             self.loaded = True
-        
+
     def OnLinkClicked(self, linkinfo):
         url = linkinfo.GetHref()
         if url[:4] != 'http':
@@ -678,13 +733,13 @@ class HelpWindow(HtmlWindow):
         self.history.append(url)
         self.historyIdx += 1
         self.parent.OnHistory()
-        
+
         super(HelpWindow, self).OnLinkClicked(linkinfo)
-        
-    def fillContentsFromFile(self, htmlFile, skipDescription = True):
+
+    def fillContentsFromFile(self, htmlFile, skipDescription=True):
         """Load content from file.
-        
-        Currently not used.        
+
+        Currently not used.
         """
         aLink = re.compile(r'(<a href="?)(.+\.html?["\s]*>)', re.IGNORECASE)
         imgLink = re.compile(r'(<img src="?)(.+\.[png|gif])', re.IGNORECASE)
@@ -701,82 +756,92 @@ class HelpWindow(HtmlWindow):
                     else:
                         # FIXME: find only first item
                         findALink = aLink.search(l)
-                        if findALink is not None: 
-                            contents.append(aLink.sub(findALink.group(1)+
-                                                      self.fspath+findALink.group(2),l))
+                        if findALink is not None:
+                            contents.append(
+                                aLink.sub(
+                                    findALink.group(1) +
+                                    self.fspath +
+                                    findALink.group(2),
+                                    l))
                         findImgLink = imgLink.search(l)
-                        if findImgLink is not None: 
-                            contents.append(imgLink.sub(findImgLink.group(1)+
-                                                        self.fspath+findImgLink.group(2),l))
-                        
+                        if findImgLink is not None:
+                            contents.append(
+                                imgLink.sub(
+                                    findImgLink.group(1) +
+                                    self.fspath +
+                                    findImgLink.group(2),
+                                    l))
+
                         if findALink is None and findImgLink is None:
                             contents.append(l)
             self.SetPage("".join(contents))
             self.loaded = True
-        except: # The Manual file was not found
+        except:  # The Manual file was not found
             self.loaded = False
-        
+
+
 class HelpPanel(wx.Panel):
-    def __init__(self, parent, command = "index", text = None,
-                 skipDescription = False, **kwargs):
+
+    def __init__(self, parent, command="index", text=None,
+                 skipDescription=False, **kwargs):
         self.command = command
-        wx.Panel.__init__(self, parent = parent, id = wx.ID_ANY)
-        
+        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
+
         self.content = HelpWindow(self, command, text, skipDescription)
-        
-        self.btnNext = wx.Button(parent = self, id = wx.ID_ANY,
-                                 label = _("&Next"))
+
+        self.btnNext = wx.Button(parent=self, id=wx.ID_ANY,
+                                 label=_("&Next"))
         self.btnNext.Enable(False)
-        self.btnPrev = wx.Button(parent = self, id = wx.ID_ANY,
-                                 label = _("&Previous"))
+        self.btnPrev = wx.Button(parent=self, id=wx.ID_ANY,
+                                 label=_("&Previous"))
         self.btnPrev.Enable(False)
-        
+
         self.btnNext.Bind(wx.EVT_BUTTON, self.OnNext)
         self.btnPrev.Bind(wx.EVT_BUTTON, self.OnPrev)
-        
+
         self._layout()
 
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        btnSizer.Add(item = self.btnPrev, proportion = 0,
-                     flag = wx.ALL, border = 5)
-        btnSizer.Add(item = wx.Size(1, 1), proportion = 1)
-        btnSizer.Add(item = self.btnNext, proportion = 0,
-                     flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        
-        sizer.Add(item = self.content, proportion = 1,
-                  flag = wx.EXPAND)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.EXPAND)
-        
+
+        btnSizer.Add(item=self.btnPrev, proportion=0,
+                     flag=wx.ALL, border=5)
+        btnSizer.Add(item=wx.Size(1, 1), proportion=1)
+        btnSizer.Add(item=self.btnNext, proportion=0,
+                     flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+
+        sizer.Add(item=self.content, proportion=1,
+                  flag=wx.EXPAND)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND)
+
         self.SetSizer(sizer)
         sizer.Fit(self)
 
-    def LoadPage(self, path = None):
+    def LoadPage(self, path=None):
         """Load page"""
         if not path:
             path = self.GetFile()
         self.content.history.append(path)
         self.content.LoadPage(path)
-        
+
     def GetFile(self):
         """Get HTML file"""
         fMan = os.path.join(self.content.fspath, self.command + ".html")
         if os.path.isfile(fMan):
             return fMan
-        
+
         # check also addons
         faMan = os.path.join(os.getenv('GRASS_ADDON_BASE'), "docs", "html",
                              self.command + ".html")
         if os.getenv('GRASS_ADDON_BASE') and \
                 os.path.isfile(faMan):
             return faMan
-        
+
         return None
-    
+
     def IsLoaded(self):
         return self.content.loaded
 
@@ -800,9 +865,9 @@ class HelpPanel(wx.Panel):
         path = self.content.history[idx]
         self.content.LoadPage(path)
         self.OnHistory()
-        
+
         event.Skip()
-        
+
     def OnPrev(self, event):
         """Load previous page"""
         self.content.historyIdx -= 1
@@ -810,9 +875,10 @@ class HelpPanel(wx.Panel):
         path = self.content.history[idx]
         self.content.LoadPage(path)
         self.OnHistory()
-        
+
         event.Skip()
 
+
 def ShowAboutDialog(prgName, startYear):
     """Displays About window.
 
@@ -820,23 +886,35 @@ def ShowAboutDialog(prgName, startYear):
     :param startYear: the first year of existence of the program
     """
     info = wx.AboutDialogInfo()
-    
-    info.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+
+    info.SetIcon(
+        wx.Icon(
+            os.path.join(
+                globalvar.ICONDIR,
+                'grass.ico'),
+            wx.BITMAP_TYPE_ICO))
     info.SetName(prgName)
     info.SetWebSite('http://grass.osgeo.org')
-    info.SetDescription(_grassDevTeam(startYear) + '\n\n' +
-                        '\n'.join(textwrap.wrap('This program is free software under the GNU General Public License'
-                                                '(>=v2). Read the file COPYING that comes with GRASS for details.', 75)))
-    
+    info.SetDescription(
+        _grassDevTeam(startYear) +
+        '\n\n' +
+        '\n'.join(
+            textwrap.wrap(
+                'This program is free software under the GNU General Public License'
+                '(>=v2). Read the file COPYING that comes with GRASS for details.',
+                75)))
+
     wx.AboutBox(info)
 
+
 def _grassDevTeam(start):
     try:
         end = grass.version()['date']
     except KeyError:
         sys.stderr.write(_("Unable to get GRASS version\n"))
-        
+
         from datetime import date
         end = date.today().year
-    
-    return '%(c)s %(start)s-%(end)s by the GRASS Development Team' % {'c': unichr(169), 'start': start, 'end': end}
+
+    return '%(c)s %(start)s-%(end)s by the GRASS Development Team' % {
+        'c': unichr(169), 'start': start, 'end': end}
diff --git a/gui/wxpython/gui_core/goutput.py b/gui/wxpython/gui_core/goutput.py
index fc78c2b..9aab84c 100644
--- a/gui/wxpython/gui_core/goutput.py
+++ b/gui/wxpython/gui_core/goutput.py
@@ -23,16 +23,16 @@ import os
 import textwrap
 
 import wx
-from   wx import stc
+from wx import stc
 
 from grass.pydispatch.signal import Signal
 
-from core.gcmd       import GError, EncodeString
+from core.gcmd import GError, EncodeString
 from core.gconsole   import GConsole, \
     EVT_CMD_OUTPUT, EVT_CMD_PROGRESS, EVT_CMD_RUN, EVT_CMD_DONE, \
     Notification
 from gui_core.prompt import GPromptSTC
-from core.settings   import UserSettings
+from core.settings import UserSettings
 from core.utils import _
 from gui_core.widgets import SearchModuleWidget
 
@@ -45,9 +45,10 @@ GC_PROMPT = 2
 class GConsoleWindow(wx.SplitterWindow):
     """Create and manage output console for commands run by GUI.
     """
-    def __init__(self, parent, gconsole, menuModel = None, margin = False,
-                 style = wx.TAB_TRAVERSAL | wx.FULL_REPAINT_ON_RESIZE,
-                 gcstyle = GC_EMPTY,
+
+    def __init__(self, parent, gconsole, menuModel=None, margin=False,
+                 style=wx.TAB_TRAVERSAL | wx.FULL_REPAINT_ON_RESIZE,
+                 gcstyle=GC_EMPTY,
                  **kwargs):
         """
         :param parent: gui parent
@@ -59,19 +60,23 @@ class GConsoleWindow(wx.SplitterWindow):
                         (GC_EMPTY, GC_PROMPT to show command prompt,
                         GC_SEARCH to show search widget)
         """
-        wx.SplitterWindow.__init__(self, parent, id = wx.ID_ANY, style = style, **kwargs)
+        wx.SplitterWindow.__init__(
+            self, parent, id=wx.ID_ANY, style=style, **kwargs)
         self.SetName("GConsole")
-        
+
         self.panelOutput = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.panelProgress = wx.Panel(parent=self.panelOutput, id=wx.ID_ANY, name='progressPanel')
+        self.panelProgress = wx.Panel(
+            parent=self.panelOutput,
+            id=wx.ID_ANY,
+            name='progressPanel')
         self.panelPrompt = wx.Panel(parent=self, id=wx.ID_ANY)
         # initialize variables
-        self.parent = parent # GMFrame | CmdPanel | ?
+        self.parent = parent  # GMFrame | CmdPanel | ?
         self._gconsole = gconsole
         self._menuModel = menuModel
 
         self._gcstyle = gcstyle
-        self.lineWidth       = 80
+        self.lineWidth = 80
 
         # signal which requests showing of a notification
         self.showNotification = Signal("GConsoleWindow.showNotification")
@@ -81,9 +86,9 @@ class GConsoleWindow(wx.SplitterWindow):
         self.contentChanged = Signal("GConsoleWindow.contentChanged")
 
         # progress bar
-        self.progressbar = wx.Gauge(parent = self.panelProgress, id = wx.ID_ANY,
-                                    range = 100, pos = (110, 50), size = (-1, 25),
-                                    style = wx.GA_HORIZONTAL)
+        self.progressbar = wx.Gauge(parent=self.panelProgress, id=wx.ID_ANY,
+                                    range=100, pos=(110, 50), size=(-1, 25),
+                                    style=wx.GA_HORIZONTAL)
         self._gconsole.Bind(EVT_CMD_PROGRESS, self.OnCmdProgress)
         self._gconsole.Bind(EVT_CMD_OUTPUT, self.OnCmdOutput)
         self._gconsole.Bind(EVT_CMD_RUN, self.OnCmdRun)
@@ -95,8 +100,11 @@ class GConsoleWindow(wx.SplitterWindow):
         self._gconsole.writeError.connect(self.WriteError)
 
         # text control for command output
-        self.cmdOutput = GStc(parent = self.panelOutput, id = wx.ID_ANY, margin = margin,
-                               wrap = None)
+        self.cmdOutput = GStc(
+            parent=self.panelOutput,
+            id=wx.ID_ANY,
+            margin=margin,
+            wrap=None)
 
         # search & command prompt
         # move to the if below
@@ -109,58 +117,68 @@ class GConsoleWindow(wx.SplitterWindow):
         if not self._gcstyle & GC_PROMPT:
             self.cmdPrompt.Hide()
 
-
         if self._gcstyle & GC_SEARCH:
-            self.infoCollapseLabelExp = _("Click here to show search module engine")
-            self.infoCollapseLabelCol = _("Click here to hide search module engine")
-            self.searchPane = wx.CollapsiblePane(parent = self.panelOutput,
-                                                 label = self.infoCollapseLabelExp,
-                                                 style = wx.CP_DEFAULT_STYLE |
-                                                 wx.CP_NO_TLW_RESIZE | wx.EXPAND)
-            self.MakeSearchPaneContent(self.searchPane.GetPane(), self._menuModel)
+            self.infoCollapseLabelExp = _(
+                "Click here to show search module engine")
+            self.infoCollapseLabelCol = _(
+                "Click here to hide search module engine")
+            self.searchPane = wx.CollapsiblePane(
+                parent=self.panelOutput, label=self.infoCollapseLabelExp,
+                style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE | wx.EXPAND)
+            self.MakeSearchPaneContent(
+                self.searchPane.GetPane(), self._menuModel)
             self.searchPane.Collapse(True)
-            self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnSearchPaneChanged, self.searchPane) 
-            self.search.moduleSelected.connect(lambda name:
-                                               self.cmdPrompt.SetTextAndFocus(name + ' '))
+            self.Bind(
+                wx.EVT_COLLAPSIBLEPANE_CHANGED,
+                self.OnSearchPaneChanged,
+                self.searchPane)
+            self.search.moduleSelected.connect(
+                lambda name: self.cmdPrompt.SetTextAndFocus(name + ' '))
         else:
             self.search = None
 
-
         if self._gcstyle & GC_PROMPT:
             cmdLabel = _("Command prompt")
-            self.outputBox = wx.StaticBox(parent = self.panelOutput, id = wx.ID_ANY,
-                                          label = " %s " % _("Output window"))
+            self.outputBox = wx.StaticBox(
+                parent=self.panelOutput,
+                id=wx.ID_ANY,
+                label=" %s " %
+                _("Output window"))
 
-            self.cmdBox = wx.StaticBox(parent = self.panelOutput, id = wx.ID_ANY,
-                                       label = " %s " % cmdLabel)
+            self.cmdBox = wx.StaticBox(parent=self.panelOutput, id=wx.ID_ANY,
+                                       label=" %s " % cmdLabel)
 
         # buttons
-        self.btnOutputClear = wx.Button(parent = self.panelOutput, id = wx.ID_CLEAR)
+        self.btnOutputClear = wx.Button(
+            parent=self.panelOutput, id=wx.ID_CLEAR)
         self.btnOutputClear.SetToolTipString(_("Clear output window content"))
-        self.btnCmdClear = wx.Button(parent = self.panelOutput, id = wx.ID_CLEAR)
+        self.btnCmdClear = wx.Button(parent=self.panelOutput, id=wx.ID_CLEAR)
         self.btnCmdClear.SetToolTipString(_("Clear command prompt content"))
-        self.btnOutputSave  = wx.Button(parent = self.panelOutput, id = wx.ID_SAVE)
-        self.btnOutputSave.SetToolTipString(_("Save output window content to the file"))
-        self.btnCmdAbort = wx.Button(parent = self.panelProgress, id = wx.ID_STOP)
+        self.btnOutputSave = wx.Button(parent=self.panelOutput, id=wx.ID_SAVE)
+        self.btnOutputSave.SetToolTipString(
+            _("Save output window content to the file"))
+        self.btnCmdAbort = wx.Button(parent=self.panelProgress, id=wx.ID_STOP)
         self.btnCmdAbort.SetToolTipString(_("Abort running command"))
-        self.btnCmdProtocol = wx.ToggleButton(parent = self.panelOutput, id = wx.ID_ANY,
-                                              label = _("&Log file"),
-                                              size = self.btnCmdClear.GetSize())
+        self.btnCmdProtocol = wx.ToggleButton(
+            parent=self.panelOutput,
+            id=wx.ID_ANY,
+            label=_("&Log file"),
+            size=self.btnCmdClear.GetSize())
         self.btnCmdProtocol.SetToolTipString(_("Toggle to save list of executed commands into "
                                                "a file; content saved when switching off."))
-        
+
         if not self._gcstyle & GC_PROMPT:
             self.btnCmdClear.Hide()
             self.btnCmdProtocol.Hide()
-        
-        self.btnCmdClear.Bind(wx.EVT_BUTTON,     self.cmdPrompt.OnCmdErase)
-        self.btnOutputClear.Bind(wx.EVT_BUTTON,  self.OnOutputClear)
-        self.btnOutputSave.Bind(wx.EVT_BUTTON,   self.OnOutputSave)
-        self.btnCmdAbort.Bind(wx.EVT_BUTTON,     self._gconsole.OnCmdAbort)
+
+        self.btnCmdClear.Bind(wx.EVT_BUTTON, self.cmdPrompt.OnCmdErase)
+        self.btnOutputClear.Bind(wx.EVT_BUTTON, self.OnOutputClear)
+        self.btnOutputSave.Bind(wx.EVT_BUTTON, self.OnOutputSave)
+        self.btnCmdAbort.Bind(wx.EVT_BUTTON, self._gconsole.OnCmdAbort)
         self.btnCmdProtocol.Bind(wx.EVT_TOGGLEBUTTON, self.OnCmdProtocol)
-        
+
         self._layout()
-        
+
     def _layout(self):
         """Do layout"""
         self.outputSizer = wx.BoxSizer(wx.VERTICAL)
@@ -172,56 +190,73 @@ class GConsoleWindow(wx.SplitterWindow):
         else:
             outBtnSizer = wx.BoxSizer(wx.HORIZONTAL)
             cmdBtnSizer = wx.BoxSizer(wx.HORIZONTAL)
-            
-        
+
         if self._gcstyle & GC_PROMPT:
             promptSizer = wx.BoxSizer(wx.VERTICAL)
-            promptSizer.Add(item = self.cmdPrompt, proportion = 1,
-                        flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, border = 3)
-            helpText = wx.StaticText(self.panelPrompt, id = wx.ID_ANY,
-                                 label = "Press Tab to display command help, Ctrl+Space to autocomplete")
-            helpText.SetForegroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
-            promptSizer.Add(item = helpText,
-                            proportion = 0, flag = wx.EXPAND | wx.LEFT, border = 5)
-        
+            promptSizer.Add(
+                item=self.cmdPrompt,
+                proportion=1,
+                flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP,
+                border=3)
+            helpText = wx.StaticText(
+                self.panelPrompt, id=wx.ID_ANY,
+                label="Press Tab to display command help, Ctrl+Space to autocomplete")
+            helpText.SetForegroundColour(
+                wx.SystemSettings_GetColour(
+                    wx.SYS_COLOUR_GRAYTEXT))
+            promptSizer.Add(item=helpText,
+                            proportion=0, flag=wx.EXPAND | wx.LEFT, border=5)
+
         if self._gcstyle & GC_SEARCH:
-            self.outputSizer.Add(item = self.searchPane, proportion = 0,
-                            flag = wx.EXPAND | wx.ALL, border = 3)
-        self.outputSizer.Add(item = self.cmdOutput, proportion = 1,
-                        flag = wx.EXPAND | wx.ALL, border = 3)
+            self.outputSizer.Add(item=self.searchPane, proportion=0,
+                                 flag=wx.EXPAND | wx.ALL, border=3)
+        self.outputSizer.Add(item=self.cmdOutput, proportion=1,
+                             flag=wx.EXPAND | wx.ALL, border=3)
         if self._gcstyle & GC_PROMPT:
             proportion = 1
         else:
             proportion = 0
             outBtnSizer.AddStretchSpacer()
 
-        outBtnSizer.Add(item = self.btnOutputClear, proportion = proportion,
-                        flag = wx.ALIGN_LEFT | wx.LEFT | wx.RIGHT, border = 5)
-
-        outBtnSizer.Add(item = self.btnOutputSave, proportion = proportion,
-                        flag = wx.ALIGN_RIGHT | wx.RIGHT, border = 5)
-
-        cmdBtnSizer.Add(item = self.btnCmdProtocol, proportion = 1,
-                        flag = wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border = 5)
-        cmdBtnSizer.Add(item = self.btnCmdClear, proportion = 1,
-                        flag = wx.ALIGN_CENTER | wx.RIGHT, border = 5)
-        progressSizer.Add(item = self.btnCmdAbort, proportion = 0,
-                          flag = wx.ALL|wx.ALIGN_CENTER, border = 5)
-        progressSizer.Add(item = self.progressbar, proportion = 1,
-                          flag = wx.ALIGN_CENTER|wx.RIGHT|wx.TOP|wx.BOTTOM, border = 5)
-                          
+        outBtnSizer.Add(
+            item=self.btnOutputClear,
+            proportion=proportion,
+            flag=wx.ALIGN_LEFT | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+            border=5)
+
+        outBtnSizer.Add(item=self.btnOutputSave, proportion=proportion,
+                        flag=wx.ALIGN_RIGHT | wx.RIGHT | wx.BOTTOM, border=5)
+
+        cmdBtnSizer.Add(
+            item=self.btnCmdProtocol,
+            proportion=1,
+            flag=wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+            border=5)
+        cmdBtnSizer.Add(item=self.btnCmdClear, proportion=1,
+                        flag=wx.ALIGN_CENTER | wx.RIGHT | wx.BOTTOM, border=5)
+        progressSizer.Add(item=self.btnCmdAbort, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER, border=5)
+        progressSizer.Add(
+            item=self.progressbar,
+            proportion=1,
+            flag=wx.ALIGN_CENTER | wx.RIGHT | wx.TOP | wx.BOTTOM,
+            border=5)
+
         self.panelProgress.SetSizer(progressSizer)
         progressSizer.Fit(self.panelProgress)
-        
-        btnSizer.Add(item = outBtnSizer, proportion = 1,
-                     flag = wx.ALL | wx.ALIGN_CENTER, border = 5)
-        btnSizer.Add(item = cmdBtnSizer, proportion = 1,
-                     flag = wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM | wx.RIGHT, border = 5)
-        self.outputSizer.Add(item = self.panelProgress, proportion = 0,
-                        flag = wx.EXPAND)
-        self.outputSizer.Add(item = btnSizer, proportion = 0,
-                        flag = wx.EXPAND)
-        
+
+        btnSizer.Add(item=outBtnSizer, proportion=1,
+                     flag=wx.ALL | wx.ALIGN_CENTER, border=5)
+        btnSizer.Add(
+            item=cmdBtnSizer,
+            proportion=1,
+            flag=wx.ALIGN_CENTER | wx.TOP | wx.BOTTOM | wx.RIGHT,
+            border=5)
+        self.outputSizer.Add(item=self.panelProgress, proportion=0,
+                             flag=wx.EXPAND)
+        self.outputSizer.Add(item=btnSizer, proportion=0,
+                             flag=wx.EXPAND)
+
         self.outputSizer.Fit(self)
         self.outputSizer.SetSizeHints(self)
         self.panelOutput.SetSizer(self.outputSizer)
@@ -229,12 +264,12 @@ class GConsoleWindow(wx.SplitterWindow):
         # avoid to use a deprecated method in wxPython >= 2.9
         getattr(self.outputSizer, 'FitInside',
                 self.outputSizer.SetVirtualSizeHints)(self.panelOutput)
-        
+
         if self._gcstyle & GC_PROMPT:
             promptSizer.Fit(self)
             promptSizer.SetSizeHints(self)
             self.panelPrompt.SetSizer(promptSizer)
-        
+
         # split window
         if self._gcstyle & GC_PROMPT:
             self.SplitHorizontally(self.panelOutput, self.panelPrompt, -50)
@@ -242,9 +277,9 @@ class GConsoleWindow(wx.SplitterWindow):
             self.SplitHorizontally(self.panelOutput, self.panelPrompt, -45)
             self.Unsplit()
         self.SetMinimumPaneSize(self.btnCmdClear.GetSize()[1] + 25)
-        
+
         self.SetSashGravity(1.0)
-        
+
         self.outputSizer.Hide(self.panelProgress)
         # layout
         self.SetAutoLayout(True)
@@ -253,29 +288,29 @@ class GConsoleWindow(wx.SplitterWindow):
     def MakeSearchPaneContent(self, pane, model):
         """Create search pane"""
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        self.search = SearchModuleWidget(parent = pane,
-                                         model = model)
+
+        self.search = SearchModuleWidget(parent=pane,
+                                         model=model)
 
         self.search.showNotification.connect(self.showNotification)
 
-        border.Add(item = self.search, proportion = 0,
-                   flag = wx.EXPAND | wx.ALL, border = 1)
-        
+        border.Add(item=self.search, proportion=0,
+                   flag=wx.EXPAND | wx.ALL, border=1)
+
         pane.SetSizer(border)
         border.Fit(pane)
-        
+
     def OnSearchPaneChanged(self, event):
         """Collapse search module box"""
         if self.searchPane.IsExpanded():
             self.searchPane.SetLabel(self.infoCollapseLabelCol)
         else:
             self.searchPane.SetLabel(self.infoCollapseLabelExp)
-        
+
         self.panelOutput.Layout()
         self.panelOutput.SendSizeEvent()
-        
-    def GetPanel(self, prompt = True):
+
+    def GetPanel(self, prompt=True):
         """Get panel
 
         :param prompt: get prompt / output panel
@@ -289,8 +324,8 @@ class GConsoleWindow(wx.SplitterWindow):
 
     def WriteLog(self, text, style=None, wrap=None,
                  notification=Notification.HIGHLIGHT):
-        """Generic method for writing log message in 
-        given style. 
+        """Generic method for writing log message in
+        given style.
 
         Emits contentChanged signal.
 
@@ -308,47 +343,53 @@ class GConsoleWindow(wx.SplitterWindow):
 
         if not style:
             style = self.cmdOutput.StyleDefault
-        
+
         # p1 = self.cmdOutput.GetCurrentPos()
         p1 = self.cmdOutput.GetEndStyled()
         # self.cmdOutput.GotoPos(p1)
         self.cmdOutput.DocumentEnd()
-        
+
         for line in text.splitlines():
             # fill space
             if len(line) < self.lineWidth:
-                diff = self.lineWidth - len(line) 
+                diff = self.lineWidth - len(line)
                 line += diff * ' '
-            
-            self.cmdOutput.AddTextWrapped(line, wrap = wrap) # adds '\n'
-            
+
+            self.cmdOutput.AddTextWrapped(line, wrap=wrap)  # adds '\n'
+
             p2 = self.cmdOutput.GetCurrentPos()
-            
+
             self.cmdOutput.StartStyling(p1, 0xff)
             self.cmdOutput.SetStyling(p2 - p1, style)
-        
+
         self.cmdOutput.EnsureCaretVisible()
 
         self.contentChanged.emit(notification=notification)
-        
-    def WriteCmdLog(self, text, pid=None, notification=Notification.MAKE_VISIBLE):
+
+    def WriteCmdLog(self, text, pid=None,
+                    notification=Notification.MAKE_VISIBLE):
         """Write message in selected style
-        
+
         :param text: message to be printed
         :param pid: process pid or None
         :param switchPage: True to switch page
         """
         if pid:
             text = '(' + str(pid) + ') ' + text
-        self.WriteLog(text, style=self.cmdOutput.StyleCommand, notification=notification)
+        self.WriteLog(
+            text,
+            style=self.cmdOutput.StyleCommand,
+            notification=notification)
 
     def WriteWarning(self, text):
         """Write message in warning style"""
-        self.WriteLog(text, style=self.cmdOutput.StyleWarning, notification=Notification.MAKE_VISIBLE)
+        self.WriteLog(text, style=self.cmdOutput.StyleWarning,
+                      notification=Notification.MAKE_VISIBLE)
 
     def WriteError(self, text):
         """Write message in error style"""
-        self.WriteLog(text, style=self.cmdOutput.StyleError, notification=Notification.MAKE_VISIBLE)
+        self.WriteLog(text, style=self.cmdOutput.StyleError,
+                      notification=Notification.MAKE_VISIBLE)
 
     def OnOutputClear(self, event):
         """Clear content of output window"""
@@ -366,43 +407,52 @@ class GConsoleWindow(wx.SplitterWindow):
         text = self.cmdOutput.GetSelectedText()
         if not text:
             text = self.cmdOutput.GetText()
-        
+
         # add newline if needed
         if len(text) > 0 and text[-1] != '\n':
             text += '\n'
-        
-        dlg = wx.FileDialog(self, message = _("Save file as..."),
-                            defaultFile = "grass_cmd_output.txt",
-                            wildcard = _("%(txt)s (*.txt)|*.txt|%(files)s (*)|*") % 
-                            {'txt': _("Text files"), 'files': _("Files")},
-                            style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
-        
+
+        dlg = wx.FileDialog(
+            self, message=_("Save file as..."),
+            defaultFile="grass_cmd_output.txt",
+            wildcard=_("%(txt)s (*.txt)|*.txt|%(files)s (*)|*") %
+            {'txt': _("Text files"),
+             'files': _("Files")},
+            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+
         # Show the dialog and retrieve the user response. If it is the OK response,
         # process the data.
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
-            
+
             try:
                 output = open(path, "w")
                 output.write(EncodeString(text))
             except IOError as e:
-                GError(_("Unable to write file '%(path)s'.\n\nDetails: %(error)s") % {'path': path, 'error': e})
+                GError(
+                    _("Unable to write file '%(path)s'.\n\nDetails: %(error)s") % {
+                        'path': path,
+                        'error': e})
             finally:
                 output.close()
             message = _("Command output saved into '%s'") % path
-            self.showNotification.emit(message = message)
-        
+            self.showNotification.emit(message=message)
+
         dlg.Destroy()
 
     def SetCopyingOfSelectedText(self, copy):
         """Enable or disable copying of selected text in to clipboard.
         Effects prompt and output.
-        
+
         :param bool copy: True for enable, False for disable
         """
         if copy:
-            self.cmdPrompt.Bind(stc.EVT_STC_PAINTED, self.cmdPrompt.OnTextSelectionChanged)
-            self.cmdOutput.Bind(stc.EVT_STC_PAINTED, self.cmdOutput.OnTextSelectionChanged)
+            self.cmdPrompt.Bind(
+                stc.EVT_STC_PAINTED,
+                self.cmdPrompt.OnTextSelectionChanged)
+            self.cmdOutput.Bind(
+                stc.EVT_STC_PAINTED,
+                self.cmdOutput.OnTextSelectionChanged)
         else:
             self.cmdPrompt.Unbind(stc.EVT_STC_PAINTED)
             self.cmdOutput.Unbind(stc.EVT_STC_PAINTED)
@@ -413,7 +463,7 @@ class GConsoleWindow(wx.SplitterWindow):
         Emits contentChanged signal.
         """
         message = event.text
-        type  = event.type
+        type = event.type
 
         self.cmdOutput.AddStyledMessage(message, type)
 
@@ -430,8 +480,8 @@ class GConsoleWindow(wx.SplitterWindow):
     def CmdProtocolSave(self):
         """Save list of manually entered commands into a text log file"""
         if not hasattr(self, 'cmdFileProtocol'):
-            return # it should not happen
-        
+            return  # it should not happen
+
         try:
             output = open(self.cmdFileProtocol, "a")
             cmds = self.cmdPrompt.GetCommands()
@@ -439,16 +489,16 @@ class GConsoleWindow(wx.SplitterWindow):
             if len(cmds) > 0:
                 output.write('\n')
         except IOError as e:
-            GError(_("Unable to write file '%(filePath)s'.\n\nDetails: %(error)s") % 
-                    {'filePath': self.cmdFileProtocol, 'error': e})
+            GError(_("Unable to write file '%(filePath)s'.\n\nDetails: %(error)s") %
+                   {'filePath': self.cmdFileProtocol, 'error': e})
         finally:
             output.close()
-        
+
         message = _("Command log saved to '%s'") % self.cmdFileProtocol
-        self.showNotification.emit(message = message)
+        self.showNotification.emit(message=message)
         del self.cmdFileProtocol
-        
-    def OnCmdProtocol(self, event = None):
+
+    def OnCmdProtocol(self, event=None):
         """Save commands into file"""
         if not event.IsChecked():
             # stop capturing commands, save list of commands to the
@@ -458,18 +508,20 @@ class GConsoleWindow(wx.SplitterWindow):
             # start capturing commands
             self.cmdPrompt.ClearCommands()
             # ask for the file
-            dlg = wx.FileDialog(self, message = _("Save file as..."),
-                                defaultFile = "grass_cmd_log.txt",
-                                wildcard = _("%(txt)s (*.txt)|*.txt|%(files)s (*)|*") % 
-                                            {'txt': _("Text files"), 'files': _("Files")},
-                                style = wx.FD_SAVE)
+            dlg = wx.FileDialog(
+                self, message=_("Save file as..."),
+                defaultFile="grass_cmd_log.txt",
+                wildcard=_("%(txt)s (*.txt)|*.txt|%(files)s (*)|*") %
+                {'txt': _("Text files"),
+                 'files': _("Files")},
+                style=wx.FD_SAVE)
             if dlg.ShowModal() == wx.ID_OK:
                 self.cmdFileProtocol = dlg.GetPath()
             else:
                 wx.CallAfter(self.btnCmdProtocol.SetValue, False)
-            
+
             dlg.Destroy()
-            
+
         event.Skip()
 
     def OnCmdRun(self, event):
@@ -481,7 +533,7 @@ class GConsoleWindow(wx.SplitterWindow):
     def OnCmdDone(self, event):
         """Command done (or aborted)
         """
-        self.progressbar.SetValue(0) # reset progress bar on '0%'
+        self.progressbar.SetValue(0)  # reset progress bar on '0%'
         wx.CallLater(100, self._hideProgress)
         event.Skip()
 
@@ -492,7 +544,7 @@ class GConsoleWindow(wx.SplitterWindow):
     def ResetFocus(self):
         """Reset focus"""
         self.cmdPrompt.SetFocus()
-        
+
     def GetPrompt(self):
         """Get prompt"""
         return self.cmdPrompt
@@ -508,21 +560,22 @@ class GStc(stc.StyledTextCtrl):
     Author:    Jean-Michel Fauth, Switzerland
     Copyright: (c) 2005-2007 Jean-Michel Fauth
     Licence:   GPL
-    """  
-    def __init__(self, parent, id, margin = False, wrap = None):
+    """
+
+    def __init__(self, parent, id, margin=False, wrap=None):
         stc.StyledTextCtrl.__init__(self, parent, id)
         self.parent = parent
         self.SetUndoCollection(True)
         self.SetReadOnly(True)
 
         # remember position of line begining (used for '\r')
-        self.linePos         = -1
+        self.linePos = -1
 
         #
         # styles
-        #                
+        #
         self.SetStyle()
-        
+
         #
         # line margins
         #
@@ -549,64 +602,80 @@ class GStc(stc.StyledTextCtrl):
         # bindings
         #
         self.Bind(wx.EVT_WINDOW_DESTROY, self.OnDestroy)
-        
+
     def OnTextSelectionChanged(self, event):
         """Copy selected text to clipboard and skip event.
         The same function is in TextCtrlAutoComplete class (prompt.py).
         """
         wx.CallAfter(self.Copy)
         event.Skip()
-        
+
     def SetStyle(self):
-        """Set styles for styled text output windows with type face 
+        """Set styles for styled text output windows with type face
         and point size selected by user (Courier New 10 is default)"""
-        
-        typeface = UserSettings.Get(group = 'appearance', key = 'outputfont', subkey = 'type')   
+
+        typeface = UserSettings.Get(
+            group='appearance',
+            key='outputfont',
+            subkey='type')
         if typeface == "":
             typeface = "Courier New"
-        
-        typesize = UserSettings.Get(group = 'appearance', key = 'outputfont', subkey = 'size')
-        if typesize == None or typesize <= 0:
+
+        typesize = UserSettings.Get(
+            group='appearance',
+            key='outputfont',
+            subkey='size')
+        if typesize is None or typesize <= 0:
             typesize = 10
         typesize = float(typesize)
-        
-        self.StyleDefault     = 0
-        self.StyleDefaultSpec = "face:%s,size:%d,fore:#000000,back:#FFFFFF" % (typeface, typesize)
-        self.StyleCommand     = 1
-        self.StyleCommandSpec = "face:%s,size:%d,,fore:#000000,back:#bcbcbc" % (typeface, typesize)
-        self.StyleOutput      = 2
-        self.StyleOutputSpec  = "face:%s,size:%d,,fore:#000000,back:#FFFFFF" % (typeface, typesize)
+
+        self.StyleDefault = 0
+        self.StyleDefaultSpec = "face:%s,size:%d,fore:#000000,back:#FFFFFF" % (
+            typeface,
+            typesize)
+        self.StyleCommand = 1
+        self.StyleCommandSpec = "face:%s,size:%d,,fore:#000000,back:#bcbcbc" % (
+            typeface, typesize)
+        self.StyleOutput = 2
+        self.StyleOutputSpec = "face:%s,size:%d,,fore:#000000,back:#FFFFFF" % (
+            typeface,
+            typesize)
         # fatal error
-        self.StyleError       = 3
-        self.StyleErrorSpec   = "face:%s,size:%d,,fore:#7F0000,back:#FFFFFF" % (typeface, typesize)
+        self.StyleError = 3
+        self.StyleErrorSpec = "face:%s,size:%d,,fore:#7F0000,back:#FFFFFF" % (
+            typeface,
+            typesize)
         # warning
-        self.StyleWarning     = 4
-        self.StyleWarningSpec = "face:%s,size:%d,,fore:#0000FF,back:#FFFFFF" % (typeface, typesize)
+        self.StyleWarning = 4
+        self.StyleWarningSpec = "face:%s,size:%d,,fore:#0000FF,back:#FFFFFF" % (
+            typeface, typesize)
         # message
-        self.StyleMessage     = 5
-        self.StyleMessageSpec = "face:%s,size:%d,,fore:#000000,back:#FFFFFF" % (typeface, typesize)
+        self.StyleMessage = 5
+        self.StyleMessageSpec = "face:%s,size:%d,,fore:#000000,back:#FFFFFF" % (
+            typeface, typesize)
         # unknown
-        self.StyleUnknown     = 6
-        self.StyleUnknownSpec = "face:%s,size:%d,,fore:#000000,back:#FFFFFF" % (typeface, typesize)
-        
+        self.StyleUnknown = 6
+        self.StyleUnknownSpec = "face:%s,size:%d,,fore:#000000,back:#FFFFFF" % (
+            typeface, typesize)
+
         # default and clear => init
         self.StyleSetSpec(stc.STC_STYLE_DEFAULT, self.StyleDefaultSpec)
         self.StyleClearAll()
         self.StyleSetSpec(self.StyleCommand, self.StyleCommandSpec)
-        self.StyleSetSpec(self.StyleOutput,  self.StyleOutputSpec)
-        self.StyleSetSpec(self.StyleError,   self.StyleErrorSpec)
+        self.StyleSetSpec(self.StyleOutput, self.StyleOutputSpec)
+        self.StyleSetSpec(self.StyleError, self.StyleErrorSpec)
         self.StyleSetSpec(self.StyleWarning, self.StyleWarningSpec)
         self.StyleSetSpec(self.StyleMessage, self.StyleMessageSpec)
-        self.StyleSetSpec(self.StyleUnknown, self.StyleUnknownSpec)        
+        self.StyleSetSpec(self.StyleUnknown, self.StyleUnknownSpec)
 
     def OnDestroy(self, evt):
         """The clipboard contents can be preserved after
         the app has exited"""
-        
+
         wx.TheClipboard.Flush()
         evt.Skip()
 
-    def AddTextWrapped(self, txt, wrap = None):
+    def AddTextWrapped(self, txt, wrap=None):
         """Add string to text area.
 
         String is wrapped and linesep is also added to the end
@@ -631,24 +700,27 @@ class GStc(stc.StyledTextCtrl):
                     self.AddText(seg)
         else:
             self.linePos = self.GetCurrentPos()
-            
+
             try:
                 self.AddText(txt)
             except UnicodeDecodeError:
-                enc = UserSettings.Get(group = 'atm', key = 'encoding', subkey = 'value')
+                enc = UserSettings.Get(
+                    group='atm', key='encoding', subkey='value')
                 if enc:
-                    txt = unicode(txt, enc, errors = 'replace')
+                    txt = unicode(txt, enc, errors='replace')
                 elif 'GRASS_DB_ENCODING' in os.environ:
-                    txt = unicode(txt, os.environ['GRASS_DB_ENCODING'], errors = 'replace')
+                    txt = unicode(
+                        txt, os.environ['GRASS_DB_ENCODING'],
+                        errors='replace')
                 else:
                     txt = EncodeString(txt)
-                
+
                 self.AddText(txt)
 
         # reset output window to read only
         self.SetReadOnly(True)
 
-    def AddStyledMessage(self, message, style = None):
+    def AddStyledMessage(self, message, style=None):
         """Add message to text area.
 
         Handles messages with progress percentages.
@@ -662,10 +734,10 @@ class GStc(stc.StyledTextCtrl):
             message = 'WARNING: ' + message
         elif style == 'error':
             message = 'ERROR: ' + message
-        
+
         p1 = self.GetEndStyled()
         self.GotoPos(p1)
-        
+
         # is this still needed?
         if '\b' in message:
             if self.linePos < 0:
@@ -685,48 +757,53 @@ class GStc(stc.StyledTextCtrl):
                     if c != ' ':
                         last_c = c
             if last_c not in ('0123456789'):
-                self.AddTextWrapped('\n', wrap = None)
+                self.AddTextWrapped('\n', wrap=None)
                 self.linePos = -1
         else:
-            self.linePos = -1 # don't force position
+            self.linePos = -1  # don't force position
             if '\n' not in message:
-                self.AddTextWrapped(message, wrap = 60)
+                self.AddTextWrapped(message, wrap=60)
             else:
-                self.AddTextWrapped(message, wrap = None)
+                self.AddTextWrapped(message, wrap=None)
         p2 = self.GetCurrentPos()
-        
+
         if p2 >= p1:
             self.StartStyling(p1, 0xff)
-        
+
             if style == 'error':
                 self.SetStyling(p2 - p1, self.StyleError)
             elif style == 'warning':
                 self.SetStyling(p2 - p1, self.StyleWarning)
             elif style == 'message':
                 self.SetStyling(p2 - p1, self.StyleMessage)
-            else: # unknown
+            else:  # unknown
                 self.SetStyling(p2 - p1, self.StyleUnknown)
-        
+
         self.EnsureCaretVisible()
 
 
 class GConsoleFrame(wx.Frame):
     """Standalone GConsole for testing only"""
-    def __init__(self, parent, id = wx.ID_ANY, title = "GConsole Test Frame",
-                 style = wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL, **kwargs):
-        wx.Frame.__init__(self, parent = parent, id = id, title = title, style = style)
 
-        panel = wx.Panel(self, id = wx.ID_ANY)
-        
+    def __init__(self, parent, id=wx.ID_ANY, title="GConsole Test Frame",
+                 style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL, **kwargs):
+        wx.Frame.__init__(self, parent=parent, id=id, title=title, style=style)
+
+        panel = wx.Panel(self, id=wx.ID_ANY)
+
         from lmgr.menudata import LayerManagerMenuData
         menuTreeBuilder = LayerManagerMenuData()
         self.gconsole = GConsole(guiparent=self)
-        self.goutput = GConsoleWindow(parent = panel, gconsole = self.gconsole,
+        self.goutput = GConsoleWindow(parent=panel, gconsole=self.gconsole,
                                       menuModel=menuTreeBuilder.GetModel(),
-                                      gcstyle = GC_SEARCH | GC_PROMPT)
+                                      gcstyle=GC_SEARCH | GC_PROMPT)
 
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = self.goutput, proportion = 1, flag = wx.EXPAND, border = 0)
+        mainSizer.Add(
+            item=self.goutput,
+            proportion=1,
+            flag=wx.EXPAND,
+            border=0)
 
         panel.SetSizer(mainSizer)
         mainSizer.Fit(panel)
@@ -735,7 +812,7 @@ class GConsoleFrame(wx.Frame):
 
 def testGConsole():
     app = wx.App()
-    frame = GConsoleFrame(parent = None)
+    frame = GConsoleFrame(parent=None)
     frame.Show()
     app.MainLoop()
 
diff --git a/gui/wxpython/gui_core/gselect.py b/gui/wxpython/gui_core/gselect.py
index a578463..0ea524f 100644
--- a/gui/wxpython/gui_core/gselect.py
+++ b/gui/wxpython/gui_core/gselect.py
@@ -24,6 +24,7 @@ Classes:
  - :class:`ElementSelect`
  - :class:`OgrTypeSelect`
  - :class:`CoordinatesSelect`
+ - :class:`VectorCategorySelect`
  - :class:`SignatureSelect`
  - :class:`SeparatorSelect`
 
@@ -36,6 +37,7 @@ This program is free software under the GNU General Public License
 @author Martin Landa <landa.martin gmail.com>
 @author Vaclav Petras <wenzeslaus gmail.com> (menu customization)
 @author Stepan Turek <stepan.turek seznam.cz> (CoordinatesSelect, ListCtrlComboPopup)
+ at author Matej Krejci <matejkrejci gmail.com> (VectorCategorySelect)
 """
 
 import os
@@ -45,13 +47,13 @@ import copy
 
 import wx
 import wx.combo
-import wx.lib.buttons          as  buttons
+import wx.lib.buttons as buttons
 import wx.lib.filebrowsebutton as filebrowse
 
 from core import globalvar
 
 import grass.script as grass
-from   grass.script import task as gtask
+from grass.script import task as gtask
 from grass.exceptions import CalledModuleError
 try:
     from grass.pygrass import messages
@@ -59,24 +61,28 @@ except ImportError as e:
     print >> sys.stderr, _("Unable to import pyGRASS: %s\n"
                            "Some functionality will be not accessible") % e
 
-from gui_core.widgets  import ManageSettingsWidget, CoordinatesValidator
+from gui_core.widgets import ManageSettingsWidget, CoordinatesValidator
 
-from core.gcmd     import RunCommand, GError, GMessage
+from core.gcmd import RunCommand, GError, GMessage, GWarning
 from core.utils    import GetListOfLocations, GetListOfMapsets, \
-                          GetFormats, rasterFormatExtension, vectorFormatExtension
-from core.utils    import GetSettingsPath, GetValidLayerName, ListSortLower
-from core.utils    import GetVectorNumberOfLayers, _
+    GetFormats, rasterFormatExtension, vectorFormatExtension
+from core.utils import GetSettingsPath, GetValidLayerName, ListSortLower
+from core.utils import GetVectorNumberOfLayers, _
 from core.settings import UserSettings
-from core.debug    import Debug
+from core.debug import Debug
+from gui_core.vselect import VectorSelectBase
+
 from grass.pydispatch.signal import Signal
 
 
 class Select(wx.combo.ComboCtrl):
-    def __init__(self, parent, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                 type = None, multiple = False, nmaps = 1,
-                 mapsets = None, updateOnPopup = True, onPopup = None,
-                 fullyQualified = True, extraItems = {}, layerTree = None,
-                 validator = wx.DefaultValidator):
+
+    def __init__(
+            self, parent, id=wx.ID_ANY, size=globalvar.DIALOG_GSELECT_SIZE,
+            type=None, multiple=False, nmaps=1, mapsets=None,
+            updateOnPopup=True, onPopup=None, fullyQualified=True,
+            extraItems={},
+            layerTree=None, validator=wx.DefaultValidator):
         """Custom control to create a ComboBox with a tree control to
         display and select GIS elements within acessible mapsets.
         Elements can be selected with mouse. Can allow multiple
@@ -94,22 +100,33 @@ class Select(wx.combo.ComboCtrl):
         :param layerTree: show only elements from given layer tree if not None
         :param validator: validator for TextCtrl
         """
-        wx.combo.ComboCtrl.__init__(self, parent=parent, id=id, size=size, validator=validator)
+        wx.combo.ComboCtrl.__init__(
+            self,
+            parent=parent,
+            id=id,
+            size=size,
+            validator=validator)
         if globalvar.CheckWxVersion([3]):
             self.SetName("Select")
         else:
             self.GetChildren()[0].SetName("Select")
-            
+
         self.GetChildren()[0].type = type
 
         self.tcp = TreeCtrlComboPopup()
         self.SetPopupControl(self.tcp)
         self.SetPopupExtents(0, 100)
         if type:
-            self.tcp.SetData(type = type, mapsets = mapsets,
-                             multiple = multiple, nmaps = nmaps,
-                             updateOnPopup = updateOnPopup, onPopup = onPopup,
-                             fullyQualified = fullyQualified, extraItems = extraItems, layerTree = layerTree)
+            self.tcp.SetData(
+                type=type,
+                mapsets=mapsets,
+                multiple=multiple,
+                nmaps=nmaps,
+                updateOnPopup=updateOnPopup,
+                onPopup=onPopup,
+                fullyQualified=fullyQualified,
+                extraItems=extraItems,
+                layerTree=layerTree)
         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
 
     def OnKeyDown(self, event):
@@ -124,29 +141,31 @@ class Select(wx.combo.ComboCtrl):
                 self.ShowPopup()
             event.Skip()
 
-    def SetElementList(self, type, mapsets = None):
+    def SetElementList(self, type, mapsets=None):
         """Set element list
 
         :param type: GIS element type
         :param mapsets: list of acceptable mapsets (None for all in search path)
         """
-        self.tcp.SetData(type = type, mapsets = mapsets)
+        self.tcp.SetData(type=type, mapsets=mapsets)
 
     def GetElementList(self):
         """Load elements"""
         self.tcp.GetElementList()
 
-    def SetType(self, etype, multiple = False, nmaps = 1,
-                mapsets = None, updateOnPopup = True, onPopup = None):
+    def SetType(self, etype, multiple=False, nmaps=1,
+                mapsets=None, updateOnPopup=True, onPopup=None):
         """Param set element type for widget
 
         :param etype: element type, see gselect.ElementSelect
         """
-        self.tcp.SetData(type = etype, mapsets = mapsets,
-                         multiple = multiple, nmaps = nmaps,
-                         updateOnPopup = updateOnPopup, onPopup = onPopup)
+        self.tcp.SetData(type=etype, mapsets=mapsets,
+                         multiple=multiple, nmaps=nmaps,
+                         updateOnPopup=updateOnPopup, onPopup=onPopup)
+
 
 class VectorSelect(Select):
+
     def __init__(self, parent, ftype, **kwargs):
         """Custom to create a ComboBox with a tree control to display and
         select vector maps. You can filter the vector maps. If you
@@ -154,8 +173,8 @@ class VectorSelect(Select):
 
         :param ftype: filter vector maps based on feature type
         """
-        Select.__init__(self, parent = parent, id = wx.ID_ANY,
-                        type = 'vector', **kwargs)
+        Select.__init__(self, parent=parent, id=wx.ID_ANY,
+                        type='vector', **kwargs)
 
         self.ftype = ftype
 
@@ -183,22 +202,23 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
 
     """
     # overridden ComboPopup methods
+
     def Init(self):
         self.value = []            # for multiple is False ->
-                                   # len(self.value) in [0,1]
+        # len(self.value) in [0,1]
         self.curitem = None
         self.multiple = False
         self.updateOnPopup = True
         self.filterItems = []      # limit items based on this list,
-                                   # see layerTree parameter
+        # see layerTree parameter
 
     def Create(self, parent):
         self.seltree = wx.TreeCtrl(parent, style=wx.TR_HIDE_ROOT
-                                   |wx.TR_HAS_BUTTONS
-                                   |wx.TR_SINGLE
-                                   |wx.TR_LINES_AT_ROOT
-                                   |wx.SIMPLE_BORDER
-                                   |wx.TR_FULL_ROW_HIGHLIGHT)
+                                   | wx.TR_HAS_BUTTONS
+                                   | wx.TR_SINGLE
+                                   | wx.TR_LINES_AT_ROOT
+                                   | wx.SIMPLE_BORDER
+                                   | wx.TR_FULL_ROW_HIGHLIGHT)
         self.seltree.Bind(wx.EVT_MOTION, self.OnMotion)
         self.seltree.Bind(wx.EVT_LEFT_DOWN, self.OnLeftDown)
         # the following dummy handler are needed to keep tree events
@@ -210,9 +230,12 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
         self.seltree.Bind(wx.EVT_TREE_BEGIN_DRAG, lambda x: None)
         self.seltree.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, lambda x: None)
         # navigation in list/tree is handled automatically since wxPython 3
-        # for older versions, we have to workaround it and write our own navigation
+        # for older versions, we have to workaround it and write our own
+        # navigation
         if globalvar.CheckWxVersion(version=[3]):
-            self.seltree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self._onItemConfirmed)
+            self.seltree.Bind(
+                wx.EVT_TREE_ITEM_ACTIVATED,
+                self._onItemConfirmed)
             self.seltree.Bind(wx.EVT_TREE_KEY_DOWN, self._onDismissPopup)
         else:
             self.seltree.Bind(wx.EVT_TREE_ITEM_ACTIVATED, lambda x: None)
@@ -236,7 +259,7 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
         if winValue:
             self.value = winValue.split(',')
 
-    def OnPopup(self, force = False):
+    def OnPopup(self, force=False):
         """Limited only for first selected
         """
         if not force and not self.updateOnPopup:
@@ -246,7 +269,7 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
         inputText = self.GetCombo().GetValue().strip()
         if inputText:
             root = self.seltree.GetRootItem()
-            match = self.FindItem(root, inputText, startLetters = True)
+            match = self.FindItem(root, inputText, startLetters=True)
             if match.IsOk():
                 self.seltree.EnsureVisible(match)
                 self.seltree.SelectItem(match)
@@ -254,10 +277,13 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
     def GetAdjustedSize(self, minWidth, prefHeight, maxHeight):
         """Reads UserSettings to get height (which was 200 in old implementation).
         """
-        height = UserSettings.Get(group = 'appearance', key = 'gSelectPopupHeight', subkey = 'value')
+        height = UserSettings.Get(
+            group='appearance',
+            key='gSelectPopupHeight',
+            subkey='value')
         return wx.Size(minWidth, min(height, maxHeight))
 
-    def FindItem(self, parentItem, text, startLetters = False):
+    def FindItem(self, parentItem, text, startLetters=False):
         """Finds item with given name or starting with given text
         """
         startletters = startLetters
@@ -266,7 +292,7 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
             if self.seltree.GetItemText(item) == text:
                 return item
             if self.seltree.ItemHasChildren(item):
-                item = self.FindItem(item, text, startLetters = startletters)
+                item = self.FindItem(item, text, startLetters=startletters)
                 if wx.TreeItemId.IsOk(item):
                     return item
             elif startletters and self.seltree.GetItemText(item).startswith(text.split('@', 1)[0]):
@@ -278,18 +304,18 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
         root = self.seltree.GetRootItem()
         if not root:
             root = self.seltree.AddRoot("<hidden root>")
-        self.seltree.AppendItem(root, text = value)
+        self.seltree.AppendItem(root, text=value)
 
     def SetItems(self, items):
         root = self.seltree.GetRootItem()
         if not root:
             root = self.seltree.AddRoot("<hidden root>")
         for item in items:
-            self.seltree.AppendItem(root, text = item)
+            self.seltree.AppendItem(root, text=item)
 
     def OnKeyUp(self, event):
         """Enable to select items using keyboard.
-        
+
         Unused with wxPython 3, can be removed in the future.
         """
         item = self.seltree.GetSelection()
@@ -356,9 +382,10 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
         if 'onPopup' in kargs:
             self.onPopup = kargs['onPopup']
         if kargs.get('layerTree', None):
-            self.filterItems = [] # reset
+            self.filterItems = []  # reset
             ltype = kargs['type']
-            for layer in kargs['layerTree'].GetVisibleLayers(skipDigitized = True):
+            for layer in kargs['layerTree'].GetVisibleLayers(
+                    skipDigitized=True):
                 if layer.GetType() != ltype:
                     continue
                 self.filterItems.append(layer.GetName())
@@ -367,11 +394,13 @@ class ListCtrlComboPopup(wx.combo.ComboPopup):
         """Delete all items in popup"""
         self.seltree.DeleteAllItems()
 
+
 class TreeCtrlComboPopup(ListCtrlComboPopup):
     """Create a tree ComboBox for selecting maps and other GIS elements
     in accessible mapsets within the current location
     """
     # overridden ComboPopup methods
+
     def Init(self):
 
         ListCtrlComboPopup.Init(self)
@@ -389,7 +418,7 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         """Set filter for GIS elements, see e.g. VectorSelect"""
         self.filterElements = filter
 
-    def OnPopup(self, force = False):
+    def OnPopup(self, force=False):
         """Limited only for first selected"""
         if not force and not self.updateOnPopup:
             return
@@ -397,13 +426,13 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
             selected, exclude = self.onPopup(self.type)
         else:
             selected = None
-            exclude  = False
+            exclude = False
 
         self.GetElementList(selected, exclude)
 
         ListCtrlComboPopup.OnPopup(self, force)
 
-    def GetElementList(self, elements = None, exclude = False):
+    def GetElementList(self, elements=None, exclude=False):
         """Get filtered list of GIS elements in accessible mapsets
         and display as tree with all relevant elements displayed
         beneath each mapset branch
@@ -412,7 +441,7 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         self.seltree.DeleteAllItems()
         if self.type:
             self._getElementList(self.type, self.mapsets, elements, exclude)
-        
+
         if len(self.value) > 0:
             root = self.seltree.GetRootItem()
             if not root:
@@ -424,7 +453,8 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
             except:
                 pass
 
-    def _getElementList(self, element, mapsets = None, elements = None, exclude = False):
+    def _getElementList(self, element, mapsets=None,
+                        elements=None, exclude=False):
         """Get list of GIS elements in accessible mapsets and display as tree
         with all relevant elements displayed beneath each mapset branch
 
@@ -435,7 +465,7 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         """
         # get current mapset
         curr_mapset = grass.gisenv()['MAPSET']
-        
+
         # map element types to g.list types
         elementdict = {'cell': 'raster',
                        'raster': 'raster',
@@ -457,7 +487,7 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         renamed_elements = []
         for elem in element_list:
             if elem not in elementdict:
-                self.AddItem(_('Not selectable element'), node = False)
+                self.AddItem(_('Not selectable element'), node=False)
                 return
             else:
                 renamed_elements.append(elementdict[elem])
@@ -465,7 +495,8 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         if element in ('stds', 'strds', 'str3ds', 'stvds'):
             if self.tgis_error is False:
                 import grass.temporal as tgis
-                filesdict = tgis.tlist_grouped(elementdict[element], element == 'stds')
+                filesdict = tgis.tlist_grouped(
+                    elementdict[element], element == 'stds')
             else:
                 filesdict = None
         else:
@@ -475,15 +506,15 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         # add extra items first
         if self.extraItems:
             for group, items in self.extraItems.iteritems():
-                node = self.AddItem(group, node = True)
+                node = self.AddItem(group, node=True)
                 self.seltree.SetItemTextColour(node, wx.Colour(50, 50, 200))
                 for item in items:
-                    self.AddItem(item, node = False, parent = node)
+                    self.AddItem(item, node=False, parent=node)
                 self.seltree.ExpandAllChildren(node)
 
         # list of mapsets in current location
         if mapsets is None:
-            mapsets = grass.mapsets(search_path = True)
+            mapsets = grass.mapsets(search_path=True)
 
         # current mapset first
         if curr_mapset in mapsets and mapsets[0] != curr_mapset:
@@ -492,7 +523,8 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
 
         first_mapset = None
         for mapset in mapsets:
-            mapset_node = self.AddItem(_('Mapset') + ': ' + mapset, node = True, mapset = mapset)
+            mapset_node = self.AddItem(
+                _('Mapset') + ': ' + mapset, node=True, mapset=mapset)
             node = mapset_node
             if not first_mapset:
                 first_mapset = mapset_node
@@ -501,39 +533,49 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
             if mapset not in filesdict:
                 continue
             try:
-                if type(filesdict[mapset]) == dict:
+                if isinstance(filesdict[mapset], dict):
                     for elementType in filesdict[mapset].keys():
-                        node = self.AddItem(_('Type: ') + elementType, mapset = mapset,
-                                            node = True, parent = mapset_node)
-                        self.seltree.SetItemTextColour(node, wx.Colour(50, 50, 200))
+                        node = self.AddItem(
+                            _('Type: ') + elementType,
+                            mapset=mapset,
+                            node=True,
+                            parent=mapset_node)
+                        self.seltree.SetItemTextColour(
+                            node, wx.Colour(50, 50, 200))
                         elem_list = filesdict[mapset][elementType]
-                        self._addItems(elist = elem_list, elements = elements,
-                                       mapset = mapset, exclude = exclude, node = node)
+                        self._addItems(
+                            elist=elem_list,
+                            elements=elements,
+                            mapset=mapset,
+                            exclude=exclude,
+                            node=node)
                 else:
                     elem_list = filesdict[mapset]
-                    self._addItems(elist = elem_list, elements = elements,
-                                   mapset = mapset, exclude = exclude, node = node)
-            except StandardError as e:
+                    self._addItems(elist=elem_list, elements=elements,
+                                   mapset=mapset, exclude=exclude, node=node)
+            except Exception as e:
                 sys.stderr.write(_("GSelect: invalid item: %s") % e)
                 continue
 
             if self.seltree.ItemHasChildren(mapset_node):
-                sel = UserSettings.Get(group='appearance', key='elementListExpand',
-                                       subkey='selection')
+                sel = UserSettings.Get(
+                    group='appearance',
+                    key='elementListExpand',
+                    subkey='selection')
                 collapse = True
 
-                if sel == 0: # collapse all except PERMANENT and current
+                if sel == 0:  # collapse all except PERMANENT and current
                     if mapset in ('PERMANENT', curr_mapset):
                         collapse = False
-                elif sel == 1: # collapse all except PERMANENT
+                elif sel == 1:  # collapse all except PERMANENT
                     if mapset == 'PERMANENT':
                         collapse = False
-                elif sel == 2: # collapse all except current
+                elif sel == 2:  # collapse all except current
                     if mapset == curr_mapset:
                         collapse = False
-                elif sel == 3: # collapse all
+                elif sel == 3:  # collapse all
                     pass
-                elif sel == 4: # expand all
+                elif sel == 4:  # expand all
                     collapse = False
 
                 if collapse:
@@ -560,7 +602,7 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
             if elem != '':
                 fullqElem = elem + '@' + mapset
                 if self.filterItems and fullqElem not in self.filterItems:
-                    continue # skip items missed in self.filterItems
+                    continue  # skip items missed in self.filterItems
 
                 if elements is not None:
                     if (exclude and fullqElem in elements) or \
@@ -569,11 +611,12 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
 
                 if self.filterElements:
                     if self.filterElements(fullqElem):
-                        self.AddItem(elem, mapset = mapset, node = False, parent = node)
+                        self.AddItem(
+                            elem, mapset=mapset, node=False, parent=node)
                 else:
-                    self.AddItem(elem, mapset = mapset, node = False, parent = node)
+                    self.AddItem(elem, mapset=mapset, node=False, parent=node)
 
-    def AddItem(self, value, mapset = None, node = True, parent = None):
+    def AddItem(self, value, mapset=None, node=True, parent=None):
         if not parent:
             root = self.seltree.GetRootItem()
             if not root:
@@ -582,13 +625,14 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
 
         data = {'node': node, 'mapset': mapset}
 
-        item = self.seltree.AppendItem(parent, text = value, data = wx.TreeItemData(data))
+        item = self.seltree.AppendItem(
+            parent, text=value, data=wx.TreeItemData(data))
         return item
 
     def OnKeyUp(self, event):
         """Enables to select items using keyboard
 
-        Unused with wxPython 3, can be removed in the future.        
+        Unused with wxPython 3, can be removed in the future.
         """
 
         item = self.seltree.GetSelection()
@@ -597,13 +641,16 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
 
         # problem with GetPrevVisible
         elif event.GetKeyCode() == wx.WXK_UP:
-            if self.seltree.ItemHasChildren(item) and self.seltree.IsExpanded(self.seltree.GetPrevSibling(item)):
-                itemPrev = self.seltree.GetLastChild(self.seltree.GetPrevSibling(item))
+            if self.seltree.ItemHasChildren(item) and self.seltree.IsExpanded(
+                    self.seltree.GetPrevSibling(item)):
+                itemPrev = self.seltree.GetLastChild(
+                    self.seltree.GetPrevSibling(item))
             else:
                 itemPrev = self.seltree.GetPrevSibling(item)
                 if not wx.TreeItemId.IsOk(itemPrev):
                     itemPrev = self.seltree.GetItemParent(item)
-                    if item == self.seltree.GetFirstChild(self.seltree.GetRootItem())[0]:
+                    if item == self.seltree.GetFirstChild(
+                            self.seltree.GetRootItem())[0]:
                         itemPrev = item
             self.seltree.SelectItem(itemPrev)
 
@@ -616,10 +663,14 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
                 parent = self.seltree.GetItemParent(selected)
             nextSibling = self.seltree.GetNextSibling(parent)
             if wx.TreeItemId.IsOk(nextSibling):
-                match = self.FindItem(nextSibling, self.GetCombo().GetValue().strip(), True)
+                match = self.FindItem(
+                    nextSibling, self.GetCombo().GetValue().strip(), True)
             else:
-                match = self.FindItem(self.seltree.GetFirstChild(self.seltree.GetItemParent(parent))[0],
-                                        self.GetCombo().GetValue().strip(), True)
+                match = self.FindItem(
+                    self.seltree.GetFirstChild(
+                        self.seltree.GetItemParent(parent))[0],
+                    self.GetCombo().GetValue().strip(),
+                    True)
             self.seltree.SelectItem(match)
 
         elif event.GetKeyCode() == wx.WXK_RIGHT:
@@ -711,26 +762,30 @@ class TreeCtrlComboPopup(ListCtrlComboPopup):
         """
         return self.type
 
+
 class VectorDBInfo:
     """Class providing information about attribute tables
     linked to a vector map"""
+
     def __init__(self, map):
         self.map = map
 
         # dictionary of layer number and associated (driver, database, table)
         self.layers = {}
-         # dictionary of table and associated columns (type, length, values, ids)
+        # dictionary of table and associated columns (type, length, values,
+        # ids)
         self.tables = {}
 
-        if not self._CheckDBConnection(): # -> self.layers
+        if not self._CheckDBConnection():  # -> self.layers
             return
 
-        self._DescribeTables() # -> self.tables
+        self._DescribeTables()  # -> self.tables
 
     def _CheckDBConnection(self):
         """Check DB connection"""
         nuldev = file(os.devnull, 'w+')
-        # if map is not defined (happens with vnet initialization) or it doesn't exist
+        # if map is not defined (happens with vnet initialization) or it
+        # doesn't exist
         try:
             self.layers = grass.vector_db(map=self.map, stderr=nuldev)
         except CalledModuleError:
@@ -745,14 +800,18 @@ class VectorDBInfo:
         for layer in self.layers.keys():
             # determine column names and types
             table = self.layers[layer]["table"]
-            columns = {} # {name: {type, length, [values], [ids]}}
+            columns = {}  # {name: {type, length, [values], [ids]}}
             i = 0
-            Debug.msg(1, "gselect.VectorDBInfo._DescribeTables(): table=%s driver=%s database=%s" % \
-                          (self.layers[layer]["table"], self.layers[layer]["driver"],
-                           self.layers[layer]["database"]))
-            for item in grass.db_describe(table = self.layers[layer]["table"],
-                                          driver = self.layers[layer]["driver"],
-                                          database = self.layers[layer]["database"])['cols']:
+            Debug.msg(
+                1,
+                "gselect.VectorDBInfo._DescribeTables(): table=%s driver=%s database=%s" %
+                (self.layers[layer]["table"],
+                 self.layers[layer]["driver"],
+                 self.layers[layer]["database"]))
+            for item in grass.db_describe(
+                    table=self.layers[layer]["table"],
+                    driver=self.layers[layer]["driver"],
+                    database=self.layers[layer]["database"])['cols']:
                 name, type, length = item
                 # FIXME: support more datatypes
                 if type.lower() == "integer":
@@ -762,12 +821,12 @@ class VectorDBInfo:
                 else:
                     ctype = str
 
-                columns[name.strip()] = { 'index'  : i,
-                                          'type'   : type.lower(),
-                                          'ctype'  : ctype,
-                                          'length' : int(length),
-                                          'values' : [],
-                                          'ids'    : []}
+                columns[name.strip()] = {'index': i,
+                                         'type': type.lower(),
+                                         'ctype': ctype,
+                                         'length': int(length),
+                                         'values': [],
+                                         'ids': []}
                 i += 1
 
             # check for key column
@@ -785,10 +844,10 @@ class VectorDBInfo:
     def Reset(self):
         """Reset"""
         for layer in self.layers:
-            table = self.layers[layer]["table"] # get table desc
+            table = self.layers[layer]["table"]  # get table desc
             for name in self.tables[table].keys():
                 self.tables[table][name]['values'] = []
-                self.tables[table][name]['ids']    = []
+                self.tables[table][name]['ids'] = []
 
     def GetName(self):
         """Get vector name"""
@@ -824,16 +883,24 @@ class VectorDBInfo:
         """
         return self.tables[table]
 
+
 class LayerSelect(wx.ComboBox):
-    def __init__(self, parent, id = wx.ID_ANY,
-                 size = globalvar.DIALOG_COMBOBOX_SIZE,
-                 vector = None, dsn = None, choices = [], all = False, default = None):
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 size=globalvar.DIALOG_COMBOBOX_SIZE,
+                 vector=None, dsn=None, choices=[], all=False, default=None):
         """Creates combo box for selecting vector map layer names
 
         :param str vector: vector map name (native or connected via v.external)
         :param str dsn: OGR data source name
         """
-        super(LayerSelect, self).__init__(parent, id, size = size, choices = choices)
+        super(
+            LayerSelect,
+            self).__init__(
+            parent,
+            id,
+            size=size,
+            choices=choices)
 
         self.all = all
 
@@ -842,9 +909,9 @@ class LayerSelect(wx.ComboBox):
         # default value
         self.default = default
 
-        self.InsertLayers(vector = vector, dsn = dsn)
+        self.InsertLayers(vector=vector, dsn=dsn)
 
-    def InsertLayers(self, vector = None, dsn = None):
+    def InsertLayers(self, vector=None, dsn=None):
         """Insert layers for a vector into the layer combobox
 
         :param str vector: vector map name (native or connected via v.external)
@@ -856,10 +923,10 @@ class LayerSelect(wx.ComboBox):
             layers = GetVectorNumberOfLayers(vector)
         elif dsn:
             ret = RunCommand('v.in.ogr',
-                             read = True,
-                             quiet = True,
-                             flags = 'l',
-                             input = dsn)
+                             read=True,
+                             quiet=True,
+                             flags='l',
+                             input=dsn)
             if ret:
                 layers = ret.splitlines()
 
@@ -882,9 +949,11 @@ class LayerSelect(wx.ComboBox):
         if self.default and self.default in layers:
             self.SetValue(self.default)
 
+
 class DriverSelect(wx.ComboBox):
     """Creates combo box for selecting database driver.
     """
+
     def __init__(self, parent, choices, value,
                  id=wx.ID_ANY, pos=wx.DefaultPosition,
                  size=globalvar.DIALOG_LAYER_SIZE, **kargs):
@@ -896,28 +965,47 @@ class DriverSelect(wx.ComboBox):
 
         self.SetStringSelection(value)
 
+
 class DatabaseSelect(wx.TextCtrl):
     """Creates combo box for selecting database driver.
     """
-    def __init__(self, parent, value = '', id = wx.ID_ANY,
-                 size = globalvar.DIALOG_TEXTCTRL_SIZE, **kargs):
-        super(DatabaseSelect, self).__init__(parent, id, value, size = size, **kargs)
+
+    def __init__(self, parent, value='', id=wx.ID_ANY,
+                 size=globalvar.DIALOG_TEXTCTRL_SIZE, **kargs):
+        super(
+            DatabaseSelect,
+            self).__init__(
+            parent,
+            id,
+            value,
+            size=size,
+            **kargs)
         self.SetName("DatabaseSelect")
 
+
 class TableSelect(wx.ComboBox):
     """Creates combo box for selecting attribute tables from the database
     """
+
     def __init__(self, parent,
-                 id = wx.ID_ANY, value = '',
-                 size = globalvar.DIALOG_COMBOBOX_SIZE, choices = [], **kargs):
-        super(TableSelect, self).__init__(parent, id, value, size = size, choices = choices,
-                                          style = wx.CB_READONLY, **kargs)
+                 id=wx.ID_ANY, value='',
+                 size=globalvar.DIALOG_COMBOBOX_SIZE, choices=[], **kargs):
+        super(
+            TableSelect,
+            self).__init__(
+            parent,
+            id,
+            value,
+            size=size,
+            choices=choices,
+            style=wx.CB_READONLY,
+            **kargs)
         self.SetName("TableSelect")
 
         if not choices:
             self.InsertTables()
 
-    def InsertTables(self, driver = None, database = None):
+    def InsertTables(self, driver=None, database=None):
         """Insert attribute tables into combobox"""
         items = []
 
@@ -928,10 +1016,10 @@ class TableSelect(wx.ComboBox):
             database = connect['database']
 
         ret = RunCommand('db.tables',
-                         flags = 'p',
-                         read = True,
-                         driver = driver,
-                         database = database)
+                         flags='p',
+                         read=True,
+                         driver=driver,
+                         database=database)
 
         if ret:
             for table in ret.splitlines():
@@ -955,10 +1043,11 @@ class ColumnSelect(wx.combo.ComboCtrl):
     :param param: parameters list (see menuform.py)
     :param kwags: wx.ComboBox parameters
     """
-    def __init__(self, parent, id = wx.ID_ANY, value = '',
-                 size = globalvar.DIALOG_COMBOBOX_SIZE,
-                 vector = None, layer = 1, multiple = False,
-                 param = None, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY, value='',
+                 size=globalvar.DIALOG_COMBOBOX_SIZE,
+                 vector=None, layer=1, multiple=False,
+                 param=None, **kwargs):
         self.defaultValue = value
         self.param = param
         self.columns = []
@@ -969,7 +1058,7 @@ class ColumnSelect(wx.combo.ComboCtrl):
 
         self.tcp = ListCtrlComboPopup()
         self.SetPopupControl(self.tcp)
-        self.tcp.SetData(multiple = multiple)
+        self.tcp.SetData(multiple=multiple)
 
         if vector:
             self.InsertColumns(vector, layer)
@@ -989,7 +1078,8 @@ class ColumnSelect(wx.combo.ComboCtrl):
         self.tcp.DeleteAllItems()
         self.SetValue('')
 
-    def InsertColumns(self, vector, layer, excludeKey = False, excludeCols = None, type = None, dbInfo = None):
+    def InsertColumns(self, vector, layer, excludeKey=False,
+                      excludeCols=None, type=None, dbInfo=None):
         """Insert columns for a vector attribute table into the columns combobox
 
         :param str vector: vector name
@@ -1013,13 +1103,13 @@ class ColumnSelect(wx.combo.ComboCtrl):
             self.columns = len(columnchoices.keys()) * ['']
             for key, val in columnchoices.iteritems():
                 self.columns[val['index']] = key
-            if excludeKey: # exclude key column
+            if excludeKey:  # exclude key column
                 self.columns.remove(keyColumn)
-            if excludeCols: # exclude key column
+            if excludeCols:  # exclude key column
                 for key in columnchoices.iterkeys():
                     if key in excludeCols:
                         self.columns.remove(key)
-            if type: # only selected column types
+            if type:  # only selected column types
                 for key, value in columnchoices.iteritems():
                     if value['type'] not in type:
                         try:
@@ -1051,10 +1141,10 @@ class ColumnSelect(wx.combo.ComboCtrl):
         self.columns[:] = []
 
         ret = RunCommand('db.columns',
-                         read = True,
-                         driver = driver,
-                         database = database,
-                         table = table)
+                         read=True,
+                         driver=driver,
+                         database=database,
+                         table=table)
 
         if ret:
             self.columns = ret.splitlines()
@@ -1070,22 +1160,32 @@ class ColumnSelect(wx.combo.ComboCtrl):
             if value != '' and value in self.columns:
                 self.SetValue(value)
 
+
 class DbaseSelect(wx.lib.filebrowsebutton.DirBrowseButton):
     """Widget for selecting GRASS Database"""
+
     def __init__(self, parent, **kwargs):
-        super(DbaseSelect, self).__init__(parent, id = wx.ID_ANY,
-                                          size = globalvar.DIALOG_GSELECT_SIZE, labelText = '',
-                                          dialogTitle = _('Choose GIS Data Directory'),
-                                          buttonText = _('Browse'),
-                                          startDirectory = grass.gisenv()['GISDBASE'],
-                                          **kwargs)
+        super(
+            DbaseSelect,
+            self).__init__(
+            parent,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText='',
+            dialogTitle=_('Choose GIS Data Directory'),
+            buttonText=_('Browse'),
+            startDirectory=grass.gisenv()['GISDBASE'],
+            **kwargs)
+
 
 class LocationSelect(wx.ComboBox):
     """Widget for selecting GRASS location"""
-    def __init__(self, parent, id = wx.ID_ANY, size = globalvar.DIALOG_COMBOBOX_SIZE,
-                 gisdbase = None, **kwargs):
-        super(LocationSelect, self).__init__(parent, id, size = size,
-                                             style = wx.CB_READONLY, **kwargs)
+
+    def __init__(
+            self, parent, id=wx.ID_ANY, size=globalvar.DIALOG_COMBOBOX_SIZE,
+            gisdbase=None, **kwargs):
+        super(LocationSelect, self).__init__(parent, id, size=size,
+                                             style=wx.CB_READONLY, **kwargs)
         self.SetName("LocationSelect")
 
         if not gisdbase:
@@ -1106,19 +1206,22 @@ class LocationSelect(wx.ComboBox):
         else:
             self.SetItems([])
 
+
 class MapsetSelect(wx.combo.ComboCtrl):
     """Widget for selecting GRASS mapset"""
-    def __init__(self, parent, id = wx.ID_ANY, size = globalvar.DIALOG_COMBOBOX_SIZE,
-                 gisdbase = None, location = None, setItems = True,
-                 searchPath = False, new = False, skipCurrent = False, multiple = False, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 size=globalvar.DIALOG_COMBOBOX_SIZE, gisdbase=None,
+                 location=None, setItems=True, searchPath=False, new=False,
+                 skipCurrent=False, multiple=False, **kwargs):
         style = 0
-        ### disabled, read-only widget has no TextCtrl children (TODO: rewrite)
-        ### if not new and not multiple:
+        # disabled, read-only widget has no TextCtrl children (TODO: rewrite)
+        # if not new and not multiple:
         ###     style = wx.CB_READONLY
 
-        wx.combo.ComboCtrl.__init__(self, parent, id, size = size,
-                                    style = style, **kwargs)
-        self.searchPath  = searchPath
+        wx.combo.ComboCtrl.__init__(self, parent, id, size=size,
+                                    style=style, **kwargs)
+        self.searchPath = searchPath
         self.skipCurrent = skipCurrent
         self.SetName("MapsetSelect")
         if not gisdbase:
@@ -1133,12 +1236,12 @@ class MapsetSelect(wx.combo.ComboCtrl):
 
         self.tcp = ListCtrlComboPopup()
         self.SetPopupControl(self.tcp)
-        self.tcp.SetData(multiple = multiple)
+        self.tcp.SetData(multiple=multiple)
 
         if setItems:
             self.tcp.SetItems(self._getMapsets())
 
-    def UpdateItems(self, location, dbase = None):
+    def UpdateItems(self, location, dbase=None):
         """Update list of mapsets for given location
 
         :param str dbase: path to GIS database (None to use currently
@@ -1159,11 +1262,11 @@ class MapsetSelect(wx.combo.ComboCtrl):
     def _getMapsets(self):
         if self.searchPath:
             mlist = RunCommand('g.mapsets',
-                               read = True, flags = 'p',
-                               sep = 'newline').splitlines()
+                               read=True, flags='p',
+                               sep='newline').splitlines()
         else:
             mlist = GetListOfMapsets(self.gisdbase, self.location,
-                                     selectable = False)
+                                     selectable=False)
 
         gisenv = grass.gisenv()
         if self.skipCurrent and \
@@ -1189,7 +1292,7 @@ class MapsetSelect(wx.combo.ComboCtrl):
         """For backward compatibility. MapsetSelect changed to allow
         multiple selection, this required to change super-class from
         wx.ComboBox to wx.combo.ComboCtrl"""
-        self.SetValue('') # TODO: implement SetSelection()
+        self.SetValue('')  # TODO: implement SetSelection()
 
     def SetItems(self, items):
         """For backward compatibility. MapsetSelect changed to allow
@@ -1198,11 +1301,13 @@ class MapsetSelect(wx.combo.ComboCtrl):
         self.tcp.DeleteAllItems()
         self.tcp.SetItems(items)
 
+
 class SubGroupSelect(wx.ComboBox):
     """Widget for selecting subgroups"""
-    def __init__(self, parent, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                 **kwargs):
-        super(SubGroupSelect, self).__init__(parent, id, size = size,
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 size=globalvar.DIALOG_GSELECT_SIZE, **kwargs):
+        super(SubGroupSelect, self).__init__(parent, id, size=size,
                                              **kwargs)
         self.SetName("SubGroupSelect")
 
@@ -1224,7 +1329,9 @@ class SubGroupSelect(wx.ComboBox):
         except OSError:
             self.SetItems([])
 
+
 class FormatSelect(wx.Choice):
+
     def __init__(self, parent, srcType, ogr=False,
                  size=globalvar.DIALOG_SPIN_SIZE,
                  **kwargs):
@@ -1256,12 +1363,11 @@ class FormatSelect(wx.Choice):
 
         return formatToExt.get(name, '')
 
-# unused code since r47938
-# wxGdalSelect, EVT_GDALSELECT = NewEvent()
 
 class GdalSelect(wx.Panel):
+
     def __init__(self, parent, panel, ogr=False, link=False, dest=False,
-                 exclude=None):
+                 exclude=None, settings=True):
         """Widget for selecting GDAL/OGR datasource, format
 
         .. todo::
@@ -1280,33 +1386,23 @@ class GdalSelect(wx.Panel):
         self.dest = dest
         self._sourceType = None
 
-        wx.Panel.__init__(self, parent=panel)
+        wx.Panel.__init__(self, parent=panel, name='GdalSelect')
 
         self.reloadDataRequired = Signal('GdalSelect.reloadDataRequired')
 
-        if self.ogr:
-            settingsFile = os.path.join(GetSettingsPath(), 'wxOGR')
-        else:
-            settingsFile = os.path.join(GetSettingsPath(), 'wxGDAL')
-
-        self.settsManager = ManageSettingsWidget(parent=self,
-                                                 settingsFile=settingsFile)
-        self.settsManager.settingsChanged.connect(self.OnSettingsChanged)
-        self.settsManager.settingsSaving.connect(self.OnSettingsSaving)
-
         self.inputBox = wx.StaticBox(parent=self)
         if dest:
             self.inputBox.SetLabel(" %s " % _("Output settings"))
         else:
-            self.inputBox.SetLabel(" %s " % _("Source settings"))
+            self.inputBox.SetLabel(" %s " % _("Source input"))
 
         # source type
         sources = list()
-        self.sourceMap = { 'file'   : -1,
-                           'dir'    : -1,
-                           'db'     : -1,
-                           'pro'    : -1,
-                           'native' : -1 }
+        self.sourceMap = {'file': -1,
+                          'dir': -1,
+                          'db': -1,
+                          'pro': -1,
+                          'native': -1}
         idx = 0
         if dest:
             sources.append(_("Native"))
@@ -1332,7 +1428,7 @@ class GdalSelect(wx.Panel):
             idx += 1
         self.sourceMapByIdx = {}
         for name, idx in self.sourceMap.items():
-            self.sourceMapByIdx[ idx ] = name
+            self.sourceMapByIdx[idx] = name
 
         self.source = wx.RadioBox(parent=self, id=wx.ID_ANY,
                                   style=wx.RA_SPECIFY_COLS,
@@ -1343,9 +1439,11 @@ class GdalSelect(wx.Panel):
             self.source.SetLabel(" %s " % _('Source type'))
 
         self.source.SetSelection(0)
-        self.source.Bind(wx.EVT_RADIOBOX,
-                         lambda evt: self.SetSourceType(self.sourceMapByIdx[evt.GetInt()]))
-
+        self.source.Bind(
+            wx.EVT_RADIOBOX,
+            lambda evt: self.SetSourceType(
+                self.sourceMapByIdx[
+                    evt.GetInt()]))
 
         self.nativeWidgets = {}
         self.fileWidgets = {}
@@ -1364,18 +1462,18 @@ class GdalSelect(wx.Panel):
         if not ogr:
             extList = rasterFormatExtension
             fileMask += ('%(name)s (*.%(low1)s;*.%(low2)s;*.%(up1)s;*.%(up2)s)|'
-                        '*.%(low1)s;*.%(low2)s;*.%(up1)s;*.%(up2)s|' %
-                        {'name': 'GeoTIFF', 'low1': 'tif', 'low2': 'tiff', 'up1': 'TIF', 'up2': 'TIFF'})
+                         '*.%(low1)s;*.%(low2)s;*.%(up1)s;*.%(up2)s|' %
+                         {'name': 'GeoTIFF', 'low1': 'tif', 'low2': 'tiff', 'up1': 'TIF', 'up2': 'TIFF'})
         else:
             extList = vectorFormatExtension
-            fileMask += '%(name)s (*.%(low)s;*.%(up)s)|*.%(low)s;*.%(up)s|' % {'name': 'ESRI Shapefile', 'low': 'shp', 'up': 'SHP'}
-        
+            fileMask += '%(name)s (*.%(low)s;*.%(up)s)|*.%(low)s;*.%(up)s|' % {
+                'name': 'ESRI Shapefile', 'low': 'shp', 'up': 'SHP'}
+
         for name, ext in sorted(extList.items()):
             if name in ('ESRI Shapefile', 'GeoTIFF'):
                 continue
-            fileMask += '%(name)s (*.%(low)s;*.%(up)s)|*.%(low)s;*.%(up)s|' % {'name': name,
-                                                                               'low': ext.lower(),
-                                                                               'up': ext.upper()}
+            fileMask += '%(name)s (*.%(low)s;*.%(up)s)|*.%(low)s;*.%(up)s|' % {
+                'name': name, 'low': ext.lower(), 'up': ext.upper()}
         fileMask += '%s (*.zip;*.ZIP)|*.zip;*.ZIP|' % _('ZIP files')
         fileMask += '%s (*.gz;*.GZ)|*.gz;*.GZ|' % _('GZIP files')
         fileMask += '%s (*.tar;*.TAR)|*.tar;*.TAR|' % _('TAR files')
@@ -1384,37 +1482,45 @@ class GdalSelect(wx.Panel):
         # only contains formats with extensions hardcoded
 
         self.filePanel = wx.Panel(parent=self)
-        browse = filebrowse.FileBrowseButton(parent=self.filePanel, id=wx.ID_ANY,
-                                             size=globalvar.DIALOG_GSELECT_SIZE,
-                                             labelText = _('File:'),
-                                             dialogTitle=_('Choose file to import'),
-                                             buttonText=_('Browse'),
-                                             startDirectory=os.getcwd(),
-                                             changeCallback=self.OnUpdate,
-                                             fileMask=fileMask)
+        browse = filebrowse.FileBrowseButton(
+            parent=self.filePanel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText=_('File:'),
+            dialogTitle=_('Choose file to import'),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            changeCallback=self.OnUpdate,
+            fileMask=fileMask)
+        browse.GetChildren()[1].SetName('GdalSelectDataSource')
         self.fileWidgets['browse'] = browse
         self.fileWidgets['options'] = wx.TextCtrl(parent=self.filePanel)
 
         # directory
         self.dirPanel = wx.Panel(parent=self)
-        browse = filebrowse.DirBrowseButton(parent=self.dirPanel, id=wx.ID_ANY,
-                                            size=globalvar.DIALOG_GSELECT_SIZE,
-                                            labelText=_('Directory:'),
-                                            dialogTitle=_('Choose input directory'),
-                                            buttonText=_('Browse'),
-                                            startDirectory=os.getcwd(),
-                                            changeCallback=self.OnUpdate)
+        browse = filebrowse.DirBrowseButton(
+            parent=self.dirPanel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText=_('Directory:'),
+            dialogTitle=_('Choose input directory'),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            changeCallback=self.OnUpdate)
+        browse.GetChildren()[1].SetName('GdalSelectDataSource')
 
         self.dirWidgets['browse'] = browse
         formatSelect = wx.Choice(parent=self.dirPanel, size=(300, -1))
         self.dirWidgets['format'] = formatSelect
         fileFormats = GetFormats(writableOnly=dest)[fType]['file']
         formatSelect.SetItems(sorted(list(fileFormats)))
-        formatSelect.Bind(wx.EVT_CHOICE, lambda evt: self.SetExtension(self.dirWidgets['format'].GetStringSelection()))
+        formatSelect.Bind(
+            wx.EVT_CHOICE, lambda evt: self.SetExtension(
+                self.dirWidgets['format'].GetStringSelection()))
         formatSelect.Bind(wx.EVT_CHOICE, self.OnUpdate)
 
-        self.dirWidgets['extensionLabel'] = wx.StaticText(parent=self.dirPanel,
-                                                          label = _("Extension:"))
+        self.dirWidgets['extensionLabel'] = wx.StaticText(
+            parent=self.dirPanel, label=_("Extension:"))
         self.dirWidgets['extension'] = wx.TextCtrl(parent=self.dirPanel)
         self.dirWidgets['extension'].Bind(wx.EVT_TEXT, self.ExtensionChanged)
         self.dirWidgets['options'] = wx.TextCtrl(parent=self.dirPanel)
@@ -1433,58 +1539,79 @@ class GdalSelect(wx.Panel):
         self.dbPanel = wx.Panel(parent=self)
         self.dbFormats = GetFormats(writableOnly=dest)[fType]['database']
         dbChoice = wx.Choice(parent=self.dbPanel, choices=self.dbFormats)
-        dbChoice.Bind(wx.EVT_CHOICE, lambda evt: self.SetDatabase(db=dbChoice.GetStringSelection()))
+        dbChoice.Bind(
+            wx.EVT_CHOICE,
+            lambda evt: self.SetDatabase(
+                db=dbChoice.GetStringSelection()))
         self.dbWidgets['format'] = dbChoice
 
-        browse = filebrowse.FileBrowseButton(parent=self.dbPanel, id=wx.ID_ANY,
-                                             size=globalvar.DIALOG_GSELECT_SIZE,
-                                             labelText=_("Name:"),
-                                             dialogTitle=_('Choose file'),
-                                             buttonText=_('Browse'),
-                                             startDirectory=os.getcwd(),
-                                             changeCallback=self.OnUpdate)
+        browse = filebrowse.FileBrowseButton(
+            parent=self.dbPanel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText=_("Name:"),
+            dialogTitle=_('Choose file'),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            changeCallback=self.OnUpdate)
+        browse.GetChildren()[1].SetName('GdalSelectDataSource')
+
         self.dbWidgets['browse'] = browse
-        self.dbWidgets['choice'] = wx.Choice(parent=self.dbPanel)
+        self.dbWidgets['choice'] = wx.Choice(
+            parent=self.dbPanel, name='GdalSelectDataSource')
         self.dbWidgets['choice'].Bind(wx.EVT_CHOICE, self.OnUpdate)
-        self.dbWidgets['text'] = wx.TextCtrl(parent=self.dbPanel)
+        self.dbWidgets['text'] = wx.TextCtrl(
+            parent=self.dbPanel, name='GdalSelectDataSource')
         self.dbWidgets['text'].Bind(wx.EVT_TEXT, self.OnUpdate)
-        self.dbWidgets['textLabel1'] = wx.StaticText(parent=self.dbPanel, label=_("Name:"))
-        self.dbWidgets['textLabel2'] = wx.StaticText(parent=self.dbPanel, label=_("Name:"))
-        self.dbWidgets['featType'] = wx.RadioBox(parent=self.dbPanel, id=wx.ID_ANY,
-                                                 label = " %s " % _("Feature type:"),
-                                                 choices = [_("simple features"), _("topological")],
-                                                 majorDimension=2,
-                                                 style = wx.RA_SPECIFY_COLS)
+        self.dbWidgets['textLabel1'] = wx.StaticText(
+            parent=self.dbPanel, label=_("Name:"))
+        self.dbWidgets['textLabel2'] = wx.StaticText(
+            parent=self.dbPanel, label=_("Name:"))
+        self.dbWidgets['featType'] = wx.RadioBox(
+            parent=self.dbPanel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Feature type:"),
+            choices=[
+                _("simple features"),
+                _("topological")],
+            majorDimension=2,
+            style=wx.RA_SPECIFY_COLS)
         if dest:
             self.dbWidgets['featType'].Disable()
         else:
             self.dbWidgets['featType'].Hide()
-        browse = filebrowse.DirBrowseButton(parent=self.dbPanel, id=wx.ID_ANY,
-                                            size=globalvar.DIALOG_GSELECT_SIZE,
-                                            labelText=_('Directory:'),
-                                            dialogTitle=_('Choose input directory'),
-                                            buttonText=_('Browse'),
-                                            startDirectory=os.getcwd(),
-                                            changeCallback=self.OnUpdate)
+        browse = filebrowse.DirBrowseButton(
+            parent=self.dbPanel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText=_('Directory:'),
+            dialogTitle=_('Choose input directory'),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            changeCallback=self.OnUpdate)
         self.dbWidgets['dirbrowse'] = browse
         self.dbWidgets['options'] = wx.TextCtrl(parent=self.dbPanel)
 
         # protocol
         self.protocolPanel = wx.Panel(parent=self)
         protocolFormats = GetFormats(writableOnly=self.dest)[fType]['protocol']
-        protocolChoice = wx.Choice(parent=self.protocolPanel, choices=protocolFormats)
+        protocolChoice = wx.Choice(
+            parent=self.protocolPanel,
+            choices=protocolFormats)
         self.protocolWidgets['format'] = protocolChoice
 
         self.protocolWidgets['text'] = wx.TextCtrl(parent=self.protocolPanel)
         self.protocolWidgets['text'].Bind(wx.EVT_TEXT, self.OnUpdate)
-        self.protocolWidgets['options'] = wx.TextCtrl(parent=self.protocolPanel)
+        self.protocolWidgets['options'] = wx.TextCtrl(
+            parent=self.protocolPanel)
 
         # native
         self.nativePanel = wx.Panel(parent=self)
 
         self._layout()
         sourceType = 'file'
-        self.SetSourceType(sourceType) # needed always to fit dialog size
+        self.SetSourceType(sourceType)  # needed always to fit dialog size
         if self.dest:
             current = RunCommand('v.external.out',
                                  parent=self,
@@ -1505,11 +1632,11 @@ class GdalSelect(wx.Panel):
         format = data.get('format', '')
         pg = 'conninfo' in data.keys()
         if pg:
-            dsn=''
+            dsn = ''
             for item in data.get('conninfo').split(' '):
                 k, v = item.split('=')
                 if k == 'dbname':
-                    dsn=v
+                    dsn = v
                     break
             optList = list()
             for k, v in data.iteritems():
@@ -1524,7 +1651,7 @@ class GdalSelect(wx.Panel):
         self.SetSourceType(sourceType)
         self.source.SetSelection(self.sourceMap[sourceType])
 
-        dsn = os.path.expandvars(dsn) # v.external.out uses $HOME
+        dsn = os.path.expandvars(dsn)  # v.external.out uses $HOME
         # fill in default values
         if sourceType == 'dir':
             self.dirWidgets['format'].SetStringSelection(format)
@@ -1544,7 +1671,7 @@ class GdalSelect(wx.Panel):
 
     def _layout(self):
         """Layout"""
-        mainSizer = wx.BoxSizer(wx.VERTICAL)
+        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
 
         self.changingSizer = wx.StaticBoxSizer(self.inputBox, wx.VERTICAL)
 
@@ -1558,11 +1685,11 @@ class GdalSelect(wx.Panel):
         sizer.AddGrowableCol(0)
         if self.dest:
             sizer.Add(item=wx.StaticText(parent=self.filePanel,
-                                         label = _("Creation options:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1, 0))
+                                         label=_("Creation options:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(1, 0))
             sizer.Add(item=self.fileWidgets['options'],
-                      flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                       pos=(1, 1))
 
         else:
@@ -1572,11 +1699,11 @@ class GdalSelect(wx.Panel):
         # directory
         sizer = wx.GridBagSizer(vgap=3, hgap=10)
         sizer.Add(item=wx.StaticText(parent=self.dirPanel,
-                                       label = _("Format:")),
-                          flag=wx.ALIGN_CENTER_VERTICAL,
-                          pos=(0, 0))
+                                     label=_("Format:")),
+                  flag=wx.ALIGN_CENTER_VERTICAL,
+                  pos=(0, 0))
         sizer.Add(item=self.dirWidgets['format'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(0, 1))
         sizer.Add(item=self.dirWidgets['extensionLabel'],
                   flag=wx.ALIGN_CENTER_VERTICAL,
@@ -1585,20 +1712,20 @@ class GdalSelect(wx.Panel):
                   flag=wx.ALIGN_CENTER_VERTICAL,
                   pos=(0, 3))
         sizer.Add(item=self.dirWidgets['browse'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(1, 0), span=(1, 4))
         if self.dest:
             sizer.Add(item=wx.StaticText(parent=self.dirPanel,
-                                         label = _("Creation options:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 0))
+                                         label=_("Creation options:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 0))
             sizer.Add(item=self.dirWidgets['options'],
-                      flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                       pos=(2, 1))
             helpBtn = wx.Button(parent=self.dirPanel, id=wx.ID_HELP)
             helpBtn.Bind(wx.EVT_BUTTON, self.OnHelp)
             sizer.Add(item=helpBtn,
-                      flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                       pos=(2, 2))
 
             self.dirWidgets['extensionLabel'].Hide()
@@ -1611,9 +1738,9 @@ class GdalSelect(wx.Panel):
         # database
         sizer = wx.GridBagSizer(vgap=1, hgap=5)
         sizer.Add(item=wx.StaticText(parent=self.dbPanel,
-                                       label = _("Format:")),
-                          flag=wx.ALIGN_CENTER_VERTICAL,
-                          pos=(0, 0))
+                                     label=_("Format:")),
+                  flag=wx.ALIGN_CENTER_VERTICAL,
+                  pos=(0, 0))
         sizer.Add(item=self.dbWidgets['format'],
                   flag=wx.ALIGN_CENTER_VERTICAL,
                   pos=(0, 1))
@@ -1621,30 +1748,30 @@ class GdalSelect(wx.Panel):
                   flag=wx.ALIGN_CENTER_VERTICAL,
                   pos=(1, 0))
         sizer.Add(item=self.dbWidgets['text'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(1, 1), span=(1, 2))
         sizer.Add(item=self.dbWidgets['browse'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(2, 0), span=(1, 3))
         sizer.Add(item=self.dbWidgets['dirbrowse'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(3, 0), span=(1, 2))
         sizer.Add(item=self.dbWidgets['textLabel2'],
                   flag=wx.ALIGN_CENTER_VERTICAL,
                   pos=(4, 0))
         sizer.Add(item=self.dbWidgets['choice'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(4, 1), span=(1, 2))
         if self.dest:
             sizer.Add(item=self.dbWidgets['featType'],
                       pos=(0, 2), flag=wx.EXPAND)
 
             sizer.Add(item=wx.StaticText(parent=self.dbPanel,
-                                         label = _("Creation options:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (5, 0))
+                                         label=_("Creation options:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(5, 0))
             sizer.Add(item=self.dbWidgets['options'],
-                      flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                       pos=(5, 1), span=(1, 2))
 
             # help button
@@ -1663,26 +1790,26 @@ class GdalSelect(wx.Panel):
         # protocol
         sizer = wx.GridBagSizer(vgap=3, hgap=3)
         sizer.Add(item=wx.StaticText(parent=self.protocolPanel,
-                                       label = _("Format:")),
-                          flag=wx.ALIGN_CENTER_VERTICAL,
-                          pos=(0, 0))
+                                     label=_("Format:")),
+                  flag=wx.ALIGN_CENTER_VERTICAL,
+                  pos=(0, 0))
         sizer.Add(item=self.protocolWidgets['format'],
                   flag=wx.ALIGN_CENTER_VERTICAL,
                   pos=(0, 1))
         sizer.Add(item=wx.StaticText(parent=self.protocolPanel,
-                                     label = _("Protocol:")),
-                          flag=wx.ALIGN_CENTER_VERTICAL,
-                          pos=(1, 0))
+                                     label=_("Protocol:")),
+                  flag=wx.ALIGN_CENTER_VERTICAL,
+                  pos=(1, 0))
         sizer.Add(item=self.protocolWidgets['text'],
-                  flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                   pos=(1, 1))
         if self.dest:
             sizer.Add(item=wx.StaticText(parent=self.protocolPanel,
-                                         label = _("Creation options:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 0))
+                                         label=_("Creation options:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 0))
             sizer.Add(item=self.protocolWidgets['options'],
-                      flag=wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
                       pos=(2, 1))
 
         else:
@@ -1693,8 +1820,8 @@ class GdalSelect(wx.Panel):
         # native
         sizer = wx.BoxSizer(wx.VERTICAL)
         sizer.Add(item=wx.StaticText(parent=self.nativePanel,
-                                     label = _("No settings available")),
-                          flag=wx.ALIGN_CENTER_VERTICAL|wx.ALL|wx.EXPAND, border=5)
+                                     label=_("No settings available")),
+                  flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border=5)
         self.nativePanel.SetSizer(sizer)
 
         for panel in (self.nativePanel, self.filePanel,
@@ -1704,15 +1831,12 @@ class GdalSelect(wx.Panel):
             self.changingSizer.Add(item=panel, proportion=1,
                                    flag=wx.EXPAND)
 
-        mainSizer.Add(item=self.settsManager, proportion=0,
-                      flag=wx.ALL | wx.EXPAND, border=5)
-        mainSizer.Add(item=self.source, proportion=0,
-                      flag=wx.LEFT | wx.RIGHT | wx.EXPAND, border=5)
-        mainSizer.Add(item=self.changingSizer, proportion=1,
-                      flag=wx.ALL | wx.EXPAND, border=5)
-        self.mainSizer = mainSizer
-        self.SetSizer(mainSizer)
-        mainSizer.Fit(self)
+        self.mainSizer.Add(item=self.source, proportion=0,
+                           flag=wx.LEFT | wx.RIGHT | wx.EXPAND, border=5)
+        self.mainSizer.Add(item=self.changingSizer, proportion=1,
+                           flag=wx.ALL | wx.EXPAND, border=5)
+        self.SetSizer(self.mainSizer)
+        self.mainSizer.Fit(self)
 
     def _getExtension(self, name):
         """Get file extension by format name"""
@@ -1726,10 +1850,16 @@ class GdalSelect(wx.Panel):
         """Set source type (db, file, dir, ...).
         Does not switch radioboxes."""
         self._sourceType = sourceType
-        self.changingSizer.Show(item=self.filePanel, show=(sourceType == 'file'))
-        self.changingSizer.Show(item=self.nativePanel, show=(sourceType == 'native'))
+        self.changingSizer.Show(
+            item=self.filePanel, show=(
+                sourceType == 'file'))
+        self.changingSizer.Show(
+            item=self.nativePanel, show=(
+                sourceType == 'native'))
         self.changingSizer.Show(item=self.dirPanel, show=(sourceType == 'dir'))
-        self.changingSizer.Show(item=self.protocolPanel, show=(sourceType == 'pro'))
+        self.changingSizer.Show(
+            item=self.protocolPanel, show=(
+                sourceType == 'pro'))
         self.changingSizer.Show(item=self.dbPanel, show=(sourceType is 'db'))
 
         self.changingSizer.Layout()
@@ -1748,7 +1878,7 @@ class GdalSelect(wx.Panel):
             self.SetDatabase(db)
 
         if not self.dest:
-            self.reloadDataRequired.emit(data=None)
+            self.reloadDataRequired.emit(listData=None, data=None)
             self._reloadLayers()
 
     def OnSettingsChanged(self, data):
@@ -1774,7 +1904,7 @@ class GdalSelect(wx.Panel):
             self.protocolWidgets['options'].SetValue(data[3])
         elif data[0] == 'db':
             name = self._getCurrentDbWidgetName()
-            if name =='choice':
+            if name == 'choice':
                 if len(data[1].split(':', 1)) > 1:
                     for item in data[1].split(':', 1)[1].split(','):
                         key, value = item.split('=', 1)
@@ -1788,14 +1918,29 @@ class GdalSelect(wx.Panel):
             self.dbWidgets['options'].SetValue(data[3])
 
         if not self.dest:
-            self.reloadDataRequired.emit(data=None)
+            self.reloadDataRequired.emit(listData=None, data=None)
             self._reloadLayers()
 
+    def AttachSettings(self):
+        if self.ogr:
+            settingsFile = os.path.join(GetSettingsPath(), 'wxOGR')
+        else:
+            settingsFile = os.path.join(GetSettingsPath(), 'wxGDAL')
+
+        self.settsManager = ManageSettingsWidget(parent=self,
+                                                 settingsFile=settingsFile)
+        self.settsManager.settingsChanged.connect(self.OnSettingsChanged)
+        self.settsManager.settingsSaving.connect(self.OnSettingsSaving)
+
+        # do layout
+        self.mainSizer.Insert(0, item=self.settsManager,
+                              flag=wx.ALL | wx.EXPAND, border=5)
+
     def OnSettingsSaving(self, name):
         """Saving data"""
         if not self.GetDsn():
-            GMessage(parent = self,
-                     message = _("No data source defined, settings are not saved."))
+            GMessage(parent=self, message=_(
+                "No data source defined, settings are not saved."))
             return
 
         self.settsManager.SetDataToSave((self._sourceType, self.GetDsn(),
@@ -1819,10 +1964,11 @@ class GdalSelect(wx.Panel):
         """Get datasource name
         """
         if self._sourceType == 'db':
-            if self.dbWidgets['format'].GetStringSelection() in ('PostgreSQL',
-                                                                 'PostGIS Raster driver'):
+            if self.dbWidgets['format'].GetStringSelection() in(
+                    'PostgreSQL', 'PostGIS Raster driver'):
 
-                dsn = 'PG:dbname=%s' % self.dbWidgets['choice'].GetStringSelection()
+                dsn = 'PG:dbname=%s' % self.dbWidgets[
+                    'choice'].GetStringSelection()
             else:
                 name = self._getCurrentDbWidgetName()
                 if name == 'choice':
@@ -1859,7 +2005,7 @@ class GdalSelect(wx.Panel):
         sizer = self.dbPanel.GetSizer()
         showBrowse = db in ('SQLite', 'Rasterlite')
         showDirbrowse = db in ('FileGDB')
-        showChoice = db in ('PostgreSQL','PostGIS WKT Raster driver',
+        showChoice = db in ('PostgreSQL', 'PostGIS WKT Raster driver',
                             'PostGIS Raster driver')
         enableFeatType = self.dest and self.ogr and db in ('PostgreSQL')
         showText = not(showBrowse or showChoice or showDirbrowse)
@@ -1873,14 +2019,18 @@ class GdalSelect(wx.Panel):
         self.dbWidgets['featType'].Enable(enableFeatType)
         if showChoice:
             # try to get list of PG databases
-            dbNames = RunCommand('db.databases', parent=self, quiet=True, read=True,
-                                 driver='pg').splitlines()
+            dbNames = RunCommand(
+                'db.databases',
+                parent=self,
+                quiet=True,
+                read=True,
+                driver='pg').splitlines()
             if dbNames is not None:
                 self.dbWidgets['choice'].SetItems(sorted(dbNames))
                 self.dbWidgets['choice'].SetSelection(0)
             elif grass.find_program('psql', '--help'):
                 if not self.dbWidgets['choice'].GetItems():
-                    p = grass.Popen(['psql', '-ltA'], stdout = grass.PIPE)
+                    p = grass.Popen(['psql', '-ltA'], stdout=grass.PIPE)
                     ret = p.communicate()[0]
                     if ret:
                         dbNames = list()
@@ -1908,57 +2058,101 @@ class GdalSelect(wx.Panel):
 
     def _reloadLayers(self):
         """Reload list of layers"""
+
+        def hasRastSameProjAsLocation(dsn):
+
+            ret = RunCommand('r.external',
+                             quiet=True,
+                             read=True,
+                             flags='t',
+                             input=dsn)
+
+            # v.external returns info for individual bands, however projection is shared by all bands ->
+            # (it is possible to take first line)
+
+            lines = ret.splitlines()
+            projectionMatch = '0'
+            if lines:
+                bandNumber, bandType, projectionMatch = map(
+                    lambda x: x.strip(), lines[0].split(','))
+
+            return projectionMatch
+
+        def getProjMatchCaption(projectionMatch):
+
+            if projectionMatch == '0':
+                projectionMatchCaption = _("No")
+            else:
+                projectionMatchCaption = _("Yes")
+
+            return projectionMatchCaption
+
         dsn = self.GetDsn()
         if not dsn:
             return
 
         data = list()
+        listData = list()
         layerId = 1
 
         if self.ogr:
             ret = RunCommand('v.external',
-                             quiet = True,
-                             read = True,
-                             flags = 't',
-                             input = dsn)
+                             quiet=True,
+                             read=True,
+                             flags='t',
+                             input=dsn)
             if not ret:
-                self.reloadDataRequired.emit(data=None)
+                self.reloadDataRequired.emit(listData=None, data=None)
                 return
 
             layerId = 1
             for line in ret.splitlines():
-                layerName, featureType, projection, geometryColumn = map(lambda x: x.strip(), line.split(','))
-                if projection == '0':
-                    projectionMatch = _("No")
-                else:
-                    projectionMatch = _("Yes")
+                layerName, featureType, projectionMatch, geometryColumn = map(
+                    lambda x: x.strip(), line.split(','))
+                projectionMatchCaption = getProjMatchCaption(projectionMatch)
                 grassName = GetValidLayerName(layerName)
                 if geometryColumn:
                     featureType = geometryColumn + '/' + featureType
-                data.append((layerId, layerName, featureType, projectionMatch, grassName))
+                listData.append(
+                    (layerId,
+                     layerName,
+                     featureType,
+                     projectionMatchCaption,
+                     grassName))
+                data.append(
+                    (layerId,
+                     layerName,
+                     featureType,
+                     int(projectionMatch),
+                        grassName))
                 layerId += 1
         else:
             if self._sourceType == 'file':
                 baseName = os.path.basename(dsn)
                 grassName = GetValidLayerName(baseName.split('.', -1)[0])
-                data.append((layerId, baseName, grassName))
+                projectionMatch = hasRastSameProjAsLocation(dsn)
+                projectionMatchCaption = getProjMatchCaption(projectionMatch)
+                listData.append(
+                    (layerId, baseName, projectionMatchCaption, grassName))
+                data.append(
+                    (layerId, baseName, int(projectionMatch), grassName))
             elif self._sourceType == 'dir':
                 ext = self.dirWidgets['extension'].GetValue()
-                for filename in glob.glob(os.path.join(dsn, "%s") % self._getExtPatternGlob(ext)):
+                for filename in glob.glob(os.path.join(
+                        dsn, "%s") % self._getExtPatternGlob(ext)):
                     baseName = os.path.basename(filename)
                     grassName = GetValidLayerName(baseName.split('.', -1)[0])
-                    data.append((layerId, baseName, grassName))
+                    projectionMatch = hasRastSameProjAsLocation(filename)
+                    projectionMatchCaption = getProjMatchCaption(
+                        projectionMatch)
+                    listData.append(
+                        (layerId, baseName, projectionMatchCaption, grassName))
+                    data.append(
+                        (layerId, baseName, int(projectionMatch), grassName))
                     layerId += 1
-# unused code since r47938
-#        if self.ogr:
-#            dsn += '@OGR'
-#
-#        evt = wxGdalSelect(dsn = dsn)
-#        evt.SetId(self.input[self.dsnType][1].GetId())
-#        wx.PostEvent(self.parent, evt)
 
-        if self.parent.GetName() == 'MultiImportDialog':
-            self.reloadDataRequired.emit(data=data)
+        # emit signal
+        self.reloadDataRequired.emit(listData=listData, data=data)
 
     def ExtensionChanged(self, event):
         if not self.dest:
@@ -2021,22 +2215,24 @@ class GdalSelect(wx.Panel):
                 if self.ogr:
                     cmd = 'v.external'
                 else:
-                    cmd =  'r.external'
+                    cmd = 'r.external'
             else:
                 if self.ogr:
                     cmd = 'v.in.ogr'
                 else:
                     cmd = 'r.in.gdal'
 
-        RunCommand('g.manual', entry = cmd)
+        RunCommand('g.manual', entry=cmd)
+
 
 class ProjSelect(wx.ComboBox):
     """Widget for selecting input raster/vector map used by
     r.proj/v.proj modules."""
-    def __init__(self, parent, isRaster, id = wx.ID_ANY, size = globalvar.DIALOG_COMBOBOX_SIZE,
-                 **kwargs):
-        super(ProjSelect, self).__init__(parent, id, size = size,
-                                         style = wx.CB_READONLY, **kwargs)
+
+    def __init__(self, parent, isRaster, id=wx.ID_ANY,
+                 size=globalvar.DIALOG_COMBOBOX_SIZE, **kwargs):
+        super(ProjSelect, self).__init__(parent, id, size=size,
+                                         style=wx.CB_READONLY, **kwargs)
         self.SetName("ProjSelect")
         self.isRaster = isRaster
 
@@ -2050,20 +2246,20 @@ class ProjSelect(wx.ComboBox):
             mapset = grass.gisenv()['MAPSET']
         if self.isRaster:
             ret = RunCommand('r.proj',
-                             quiet = True,
-                             read = True,
-                             flags = 'l',
-                             dbase = dbase,
-                             location = location,
-                             mapset = mapset)
+                             quiet=True,
+                             read=True,
+                             flags='l',
+                             dbase=dbase,
+                             location=location,
+                             mapset=mapset)
         else:
             ret = RunCommand('v.proj',
-                             quiet = True,
-                             read = True,
-                             flags = 'l',
-                             dbase = dbase,
-                             location = location,
-                             mapset = mapset)
+                             quiet=True,
+                             read=True,
+                             flags='l',
+                             dbase=dbase,
+                             location=location,
+                             mapset=mapset)
         listMaps = list()
         if ret:
             for line in ret.splitlines():
@@ -2073,24 +2269,26 @@ class ProjSelect(wx.ComboBox):
         self.SetItems(listMaps)
         self.SetValue('')
 
+
 class ElementSelect(wx.Choice):
-    def __init__(self, parent, id = wx.ID_ANY, elements = None,
-                 size = globalvar.DIALOG_COMBOBOX_SIZE,
+
+    def __init__(self, parent, id=wx.ID_ANY, elements=None,
+                 size=globalvar.DIALOG_COMBOBOX_SIZE,
                  **kwargs):
         """Widget for selecting GIS element
 
         :param parent: parent window
         :param elements: filter elements
         """
-        super(ElementSelect, self).__init__(parent, id, size = size,
+        super(ElementSelect, self).__init__(parent, id, size=size,
                                             **kwargs)
         self.SetName("ElementSelect")
 
         task = gtask.parse_interface('g.list')
-        p = task.get_param(value = 'type')
+        p = task.get_param(value='type')
         self.values = p.get('values', [])
         self.valuesDesc = p.get('values_desc', [])
-        
+
         if elements:
             values = []
             valuesDesc = []
@@ -2101,7 +2299,7 @@ class ElementSelect(wx.Choice):
                     valuesDesc.append(self.valuesDesc[idx])
             self.values = values
             self.valuesDesc = valuesDesc
-        
+
         self.SetItems(self.valuesDesc)
 
     def GetValue(self, name):
@@ -2114,32 +2312,33 @@ class ElementSelect(wx.Choice):
             return self.values[idx]
         return ''
 
+
 class OgrTypeSelect(wx.Panel):
+
     def __init__(self, parent, panel, **kwargs):
         """Widget to choose OGR feature type
 
         :param parent: parent window
         :param panel: wx.Panel instance used as parent window
         """
-        wx.Panel.__init__(self, parent = panel, id = wx.ID_ANY)
+        wx.Panel.__init__(self, parent=panel, id=wx.ID_ANY)
 
-        self.ftype = wx.Choice(parent = self, id = wx.ID_ANY,
-                               size = (200, -1),
-                               choices = (_("Point"), _("LineString"), _("Polygon")))
+        self.ftype = wx.Choice(parent=self, id=wx.ID_ANY, size=(
+            200, -1), choices=(_("Point"), _("LineString"), _("Polygon")))
         self._layout()
 
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.HORIZONTAL)
-        sizer.Add(item = wx.StaticText(parent = self,
-                                       id = wx.ID_ANY,
-                                       label = _("Feature type:")),
-                  proportion = 1,
-                  flag = wx.ALIGN_CENTER_VERTICAL,
-                  border  = 5)
-        sizer.Add(item = self.ftype,
-                  proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_RIGHT)
+        sizer.Add(item=wx.StaticText(parent=self,
+                                     id=wx.ID_ANY,
+                                     label=_("Feature type:")),
+                  proportion=1,
+                  flag=wx.ALIGN_CENTER_VERTICAL,
+                  border=5)
+        sizer.Add(item=self.ftype,
+                  proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_RIGHT)
 
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -2157,8 +2356,10 @@ class OgrTypeSelect(wx.Panel):
         elif sel == 2:
             return 'boundary'
 
+
 class CoordinatesSelect(wx.Panel):
-    def __init__(self, parent, giface, multiple = False, **kwargs):
+
+    def __init__(self, parent, giface, multiple=False, **kwargs):
         """Widget to get coordinates from map window  by mouse click
 
         :param parent: parent window
@@ -2167,7 +2368,7 @@ class CoordinatesSelect(wx.Panel):
         """
         self._giface = giface
         self.multiple = multiple
-        self.mapWin   = None
+        self.mapWin = None
         self.drawMapWin = None
 
         super(CoordinatesSelect, self).__init__(parent=parent, id=wx.ID_ANY)
@@ -2176,28 +2377,32 @@ class CoordinatesSelect(wx.Panel):
                                        size=globalvar.DIALOG_TEXTCTRL_SIZE,
                                        validator=CoordinatesValidator())
 
-        icon = wx.Bitmap(os.path.join(globalvar.ICONDIR, "grass", "pointer.png"))
-        self.buttonInsCoords = buttons.ThemedGenBitmapToggleButton(parent=self, id=wx.ID_ANY,
-                                                                   bitmap=icon,
-                                                                   size=globalvar.DIALOG_COLOR_SIZE)
+        icon = wx.Bitmap(
+            os.path.join(
+                globalvar.ICONDIR,
+                "grass",
+                "pointer.png"))
+        self.buttonInsCoords = buttons.ThemedGenBitmapToggleButton(
+            parent=self, id=wx.ID_ANY, bitmap=icon, size=globalvar.DIALOG_COLOR_SIZE)
         self.registered = False
         self.buttonInsCoords.Bind(wx.EVT_BUTTON, self._onClick)
 
         mapdisp = self._giface.GetMapDisplay()
         if mapdisp:
             switcher = mapdisp.GetToolSwitcher()
-            switcher.AddCustomToolToGroup(group='mouseUse',
-                                          btnId=self.buttonInsCoords.GetId(),
-                                          toggleHandler=self.buttonInsCoords.SetValue)
+            switcher.AddCustomToolToGroup(
+                group='mouseUse',
+                btnId=self.buttonInsCoords.GetId(),
+                toggleHandler=self.buttonInsCoords.SetValue)
         self._doLayout()
-        self.coordsField.Bind(wx.EVT_TEXT, lambda event : self._draw(delay=1))
+        self.coordsField.Bind(wx.EVT_TEXT, lambda event: self._draw(delay=1))
 
     def _doLayout(self):
         self.dialogSizer = wx.BoxSizer(wx.HORIZONTAL)
-        self.dialogSizer.Add(item = self.coordsField,
-                             proportion = 1,
-                             flag = wx.EXPAND)
-        self.dialogSizer.Add(item = self.buttonInsCoords)
+        self.dialogSizer.Add(item=self.coordsField,
+                             proportion=1,
+                             flag=wx.EXPAND)
+        self.dialogSizer.Add(item=self.buttonInsCoords)
         self.SetSizer(self.dialogSizer)
 
     def _onClick(self, event):
@@ -2215,9 +2420,8 @@ class CoordinatesSelect(wx.Panel):
             self.registered = True
             self._giface.GetMapDisplay().Raise()
         else:
-            if self.mapWin and \
-               self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN,
-                                                       self._onMapClickHandler):
+            if self.mapWin and self.mapWin.UnregisterMouseEventHandler(
+                    wx.EVT_LEFT_DOWN, self._onMapClickHandler):
                 self.registered = False
                 return
 
@@ -2231,20 +2435,23 @@ class CoordinatesSelect(wx.Panel):
             self.drawCleanUp()
             if self.mapWin:
                 self.drawMapWin = self.mapWin
-                self.pointsToDraw = self.drawMapWin.RegisterGraphicsToDraw(graphicsType="point")
+                self.pointsToDraw = self.drawMapWin.RegisterGraphicsToDraw(
+                    graphicsType="point")
 
         if self.drawMapWin:
-                items = self.pointsToDraw.GetAllItems()
-                for i in items:
-                    self.pointsToDraw.DeleteItem(i)
+            items = self.pointsToDraw.GetAllItems()
+            for i in items:
+                self.pointsToDraw.DeleteItem(i)
 
-                coords = self._getCoords()
-                if coords is not None:
-                    for i in range(len(coords)/2):
-                        i = i * 2
-                        self.pointsToDraw.AddItem(coords=(coords[i], coords[i + 1]))
+            coords = self._getCoords()
+            if coords is not None:
+                for i in range(len(coords) / 2):
+                    i = i * 2
+                    self.pointsToDraw.AddItem(
+                        coords=(coords[i], coords[i + 1]))
 
-                self._giface.updateMap.emit(render=False, renderVector=False, delay=delay)
+            self._giface.updateMap.emit(
+                render=False, renderVector=False, delay=delay)
 
     def _getCoords(self):
         """Get list of coordinates.
@@ -2292,16 +2499,160 @@ class CoordinatesSelect(wx.Panel):
         """Get TextCtrl widget"""
         return self.coordsField
 
+
+class VectorCategorySelect(wx.Panel):
+    """Widget that allows interactive selection of vector features"""
+
+    def __init__(self, parent, giface, task=None):
+        super(VectorCategorySelect, self).__init__(parent=parent, id=wx.ID_ANY)
+        self.task = task
+        self.parent = parent
+        self.giface = giface
+
+        self.selectedFeatures = None
+        self.registered = False
+        self._vectorSelect = None
+
+        self.mapdisp = self.giface.GetMapDisplay()
+
+        self.catsField = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                                     size=globalvar.DIALOG_TEXTCTRL_SIZE)
+
+        icon = wx.Bitmap(
+            os.path.join(
+                globalvar.ICONDIR,
+                "grass",
+                "select.png"))
+        self.buttonVecSelect = buttons.ThemedGenBitmapToggleButton(
+            parent=self, id=wx.ID_ANY, bitmap=icon, size=globalvar.DIALOG_COLOR_SIZE)
+        self.buttonVecSelect.Bind(wx.EVT_BUTTON, self._onClick)
+
+        if self.mapdisp:
+            switcher = self.mapdisp.GetToolSwitcher()
+            switcher.AddCustomToolToGroup(
+                group='mouseUse',
+                btnId=self.buttonVecSelect.GetId(),
+                toggleHandler=self.buttonVecSelect.SetValue)
+
+        self._layout()
+
+    def _isMapSelected(self):
+        """Check if layer list contains at least one selected map
+        """
+        layerList = self.giface.GetLayerList()
+        layerSelected = layerList.GetSelectedLayer()
+        if layerSelected is None:
+            GWarning(
+                _("No vector map selected in layer manager. Operation canceled."))
+            return False
+
+        return True
+
+    def _chckMap(self):
+        """Check if selected map in 'input' widget is the same as selected map in lmgr """
+        if self._isMapSelected():
+            layerList = self.giface.GetLayerList()
+            layerSelected = layerList.GetSelectedLayer()
+            inputName = self.task.get_param('input')
+            if inputName['value'] != str(layerSelected):
+                if inputName['value'] == '' or inputName['value'] is None:
+                    GWarning(_("Input vector map is not selected"))
+                    return False
+                GWarning(
+                    _(
+                        "Input vector map <%s> and selected map <%s> in layer manager are different. "
+                        "Operation canceled.") %
+                    (inputName['value'], str(layerSelected)))
+                return False
+            return True
+        return False
+
+    def _onClick(self, evt=None):
+        if self.task is not None:
+            if not self._chckMap():
+                self.buttonVecSelect.SetValue(False)
+                return
+        else:
+            if not self._isMapSelected():
+                self.buttonVecSelect.SetValue(False)
+                return
+        if self._vectorSelect is None:
+
+            if self.mapdisp:
+                if self.buttonVecSelect.IsEnabled():
+                    switcher = self.mapdisp.GetToolSwitcher()
+                    switcher.ToolChanged(self.buttonVecSelect.GetId())
+
+                self._vectorSelect = VectorSelectBase(
+                    self.mapdisp, self.giface)
+                if self.mapdisp.GetWindow().RegisterMouseEventHandler(
+                        wx.EVT_LEFT_DOWN, self._onMapClickHandler, 'cross') == False:
+                    return
+                self.registered = True
+                self.mapdisp.Raise()
+        else:
+            self.OnClose()
+
+    def OnClose(self, event=None):
+        if not self.mapdisp:
+            return
+
+        switcher = self.mapdisp.GetToolSwitcher()
+        switcher.RemoveCustomToolFromGroup(self.buttonVecSelect.GetId())
+        if self._vectorSelect is not None:
+            tmp = self._vectorSelect.GetLineStringSelectedCats()
+            self._vectorSelect.OnClose()
+            self.catsField.SetValue(tmp)
+        self._vectorSelect = None
+
+    def _onMapClickHandler(self, event):
+        """Update category text input widget"""
+        if event == "unregistered":
+            return
+
+        if self.task is None:
+            if not self._isMapSelected():
+                self.OnClose()
+            else:
+                self.catsField.SetValue(
+                    self._vectorSelect.GetLineStringSelectedCats())
+        else:
+            if not self._chckMap():
+                self.OnClose()
+            else:
+                self.catsField.SetValue(
+                    self._vectorSelect.GetLineStringSelectedCats())
+
+    def GetTextWin(self):
+        return self.catsField
+
+    def GetValue(self):
+        return self.catsField.GetValue()
+
+    def SetValue(self, value):
+        self.catsField.SetValue(value)
+
+    def _layout(self):
+        self.dialogSizer = wx.BoxSizer(wx.HORIZONTAL)
+        self.dialogSizer.Add(item=self.catsField,
+                             proportion=1,
+                             flag=wx.EXPAND)
+
+        self.dialogSizer.Add(item=self.buttonVecSelect)
+        self.SetSizer(self.dialogSizer)
+
+
 class SignatureSelect(wx.ComboBox):
     """Widget for selecting signatures"""
-    def __init__(self, parent, element, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                 **kwargs):
-        super(SignatureSelect, self).__init__(parent, id, size = size,
+
+    def __init__(self, parent, element, id=wx.ID_ANY,
+                 size=globalvar.DIALOG_GSELECT_SIZE, **kwargs):
+        super(SignatureSelect, self).__init__(parent, id, size=size,
                                               **kwargs)
         self.element = element
         self.SetName("SignatureSelect")
 
-    def Insert(self, group, subgroup = None):
+    def Insert(self, group, subgroup=None):
         """Insert signatures for defined group/subgroup
 
         :param group: group name (can be fully-qualified)
@@ -2316,8 +2667,10 @@ class SignatureSelect(wx.ComboBox):
             name = group
             mapset = gisenv['MAPSET']
 
-        path = os.path.join(gisenv['GISDBASE'], gisenv['LOCATION_NAME'], mapset,
-                            'group', name)
+        path = os.path.join(
+            gisenv['GISDBASE'],
+            gisenv['LOCATION_NAME'],
+            mapset, 'group', name)
 
         if subgroup:
             path = os.path.join(path, 'subgroup', subgroup)
@@ -2330,11 +2683,13 @@ class SignatureSelect(wx.ComboBox):
             self.SetItems([])
         self.SetValue('')
 
+
 class SeparatorSelect(wx.ComboBox):
     """Widget for selecting seperator"""
-    def __init__(self, parent, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                 **kwargs):
-        super(SeparatorSelect, self).__init__(parent, id, size = size,
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 size=globalvar.DIALOG_GSELECT_SIZE, **kwargs):
+        super(SeparatorSelect, self).__init__(parent, id, size=size,
                                               **kwargs)
         self.SetName("SeparatorSelect")
         self.SetItems(['pipe', 'comma', 'space', 'tab', 'newline'])
diff --git a/gui/wxpython/gui_core/mapdisp.py b/gui/wxpython/gui_core/mapdisp.py
index a11ab7a..3ae51c9 100644
--- a/gui/wxpython/gui_core/mapdisp.py
+++ b/gui/wxpython/gui_core/mapdisp.py
@@ -23,10 +23,9 @@ import os
 import sys
 
 import wx
-import wx.aui
 
-from core        import globalvar
-from core.debug  import Debug
+from core import globalvar
+from core.debug import Debug
 from core.utils import _
 from gui_core.toolbars import ToolSwitcher
 
@@ -35,14 +34,14 @@ from grass.script import core as grass
 
 class MapFrameBase(wx.Frame):
     """Base class for map display window
-    
+
     Derived class must use (create and initialize) \c statusbarManager
     or override
     GetProperty(), SetProperty() and HasProperty() methods.
-    
+
     Several methods has to be overriden or
     \c NotImplementedError("MethodName") will be raised.
-    
+
     If derived class enables and disables auto-rendering,
     it should override IsAutoRendered method.
 
@@ -53,17 +52,18 @@ class MapFrameBase(wx.Frame):
     one map will be current.
     Current instances of map window and map renderer should be returned
     by methods GetWindow() and GetMap() respectively.
-    
+
     AUI manager is stored in \c self._mgr.
     """
-    def __init__(self, parent = None, id = wx.ID_ANY, title = None,
-                 style = wx.DEFAULT_FRAME_STYLE,
-                 auimgr = None, name = None, **kwargs):
+
+    def __init__(self, parent=None, id=wx.ID_ANY, title='',
+                 style=wx.DEFAULT_FRAME_STYLE,
+                 auimgr=None, name='', **kwargs):
         """
 
         .. warning::
             Use \a auimgr parameter only if you know what you are doing.
-        
+
         :param parent: gui parent
         :param id: wx id
         :param title: window title
@@ -73,39 +73,58 @@ class MapFrameBase(wx.Frame):
         :param name: frame name
         :param kwargs: arguments passed to \c wx.Frame
         """
-        
-        self.parent     = parent
-        
-        wx.Frame.__init__(self, parent, id, title, style = style, name = name, **kwargs)
-                
+
+        self.parent = parent
+
+        wx.Frame.__init__(
+            self,
+            parent,
+            id,
+            title,
+            style=style,
+            name=name,
+            **kwargs)
+
         #
         # set the size & system icon
         #
         self.SetClientSize(self.GetSize())
         self.iconsize = (16, 16)
 
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_map.ico'), wx.BITMAP_TYPE_ICO))
-        
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_map.ico'),
+                wx.BITMAP_TYPE_ICO))
+
         # toolbars
         self.toolbars = {}
-        
+
         #
         # Fancy gui
         #
-        if auimgr == None:
-            self._mgr = wx.aui.AuiManager(self)
+        if auimgr is None:
+            from wx.aui import AuiManager
+            self._mgr = AuiManager(self)
         else:
             self._mgr = auimgr
-        
+
         # handles switching between tools in different toolbars
         self._toolSwitcher = ToolSwitcher()
         self._toolSwitcher.toggleToolChanged.connect(self._onToggleTool)
 
-        # set accelerator table for fullscreen
-        fullScreenId = wx.NewId()
-        self.Bind(wx.EVT_MENU, self.OnFullScreen, id=fullScreenId)
-        accelTable = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F11, fullScreenId)])
-        self.SetAcceleratorTable(accelTable)
+        # set accelerator table (fullscreen, close window)
+        accelTable = []
+        for wxId, handler, entry, kdb in (
+            (wx.NewId(),
+             self.OnFullScreen, wx.ACCEL_NORMAL, wx.WXK_F11),
+            (wx.NewId(),
+             self.OnCloseWindow, wx.ACCEL_CTRL, ord('W'))):
+            self.Bind(wx.EVT_MENU, handler, id=wxId)
+            accelTable.append((entry, kdb, wxId))
+
+        self.SetAcceleratorTable(wx.AcceleratorTable(accelTable))
 
     def _initMap(self, Map):
         """Initialize map display, set dimensions and map region
@@ -113,12 +132,20 @@ class MapFrameBase(wx.Frame):
         if not grass.find_program('g.region', '--help'):
             sys.exit(_("GRASS module '%s' not found. Unable to start map "
                        "display window.") % 'g.region')
-        
+
         Debug.msg(2, "MapFrame._initMap():")
         Map.ChangeMapSize(self.GetClientSize())
-        Map.region = Map.GetRegion() # g.region -upgc
+        Map.region = Map.GetRegion()  # g.region -upgc
         # self.Map.SetRegion() # adjust region to match display window
 
+    def _resize(self):
+        Debug.msg(1, "MapFrame._resize():")
+        wm, hw = self.MapWindow.GetClientSize()
+        wf, hf = self.GetSize()
+        dw = wf - wm
+        dh = hf - hw
+        self.SetSize((wf + dw, hf + dh))
+
     def _onToggleTool(self, id):
         if self._toolSwitcher.IsToolInGroup(id, 'mouseUse'):
             self.GetWindow().UnregisterAllHandlers()
@@ -127,7 +154,7 @@ class MapFrameBase(wx.Frame):
         """Adjust statusbar on changing size"""
         # reposition checkbox in statusbar
         self.StatusbarReposition()
-        
+
         # update statusbar
         self.StatusbarUpdate()
 
@@ -139,88 +166,91 @@ class MapFrameBase(wx.Frame):
         self.ShowFullScreen(not self.IsFullScreen())
         event.Skip()
 
+    def OnCloseWindow(self, event):
+        self.Destroy()
+
     def GetToolSwitcher(self):
         return self._toolSwitcher
 
     def SetProperty(self, name, value):
         """Sets property"""
         self.statusbarManager.SetProperty(name, value)
-        
+
     def GetProperty(self, name):
         """Returns property"""
         return self.statusbarManager.GetProperty(name)
-        
+
     def HasProperty(self, name):
         """Checks whether object has property"""
         return self.statusbarManager.HasProperty(name)
-    
+
     def GetPPM(self):
         """Get pixel per meter
-        
+
         .. todo::
             now computed every time, is it necessary?
-        
+
         .. todo::
             enable user to specify ppm (and store it in UserSettings)
         """
         # TODO: need to be fixed...
-        ### screen X region problem
-        ### user should specify ppm
+        # screen X region problem
+        # user should specify ppm
         dc = wx.ScreenDC()
         dpSizePx = wx.DisplaySize()   # display size in pixels
-        dpSizeMM = wx.DisplaySizeMM() # display size in mm (system)
-        dpSizeIn = (dpSizeMM[0] / 25.4, dpSizeMM[1] / 25.4) # inches
-        sysPpi  = dc.GetPPI()
+        dpSizeMM = wx.DisplaySizeMM()  # display size in mm (system)
+        dpSizeIn = (dpSizeMM[0] / 25.4, dpSizeMM[1] / 25.4)  # inches
+        sysPpi = dc.GetPPI()
         comPpi = (dpSizePx[0] / dpSizeIn[0],
                   dpSizePx[1] / dpSizeIn[1])
 
         ppi = comPpi                  # pixel per inch
-        ppm = ((ppi[0] / 2.54) * 100, # pixel per meter
-                    (ppi[1] / 2.54) * 100)
-        
+        ppm = ((ppi[0] / 2.54) * 100,  # pixel per meter
+               (ppi[1] / 2.54) * 100)
+
         Debug.msg(4, "MapFrameBase.GetPPM(): size: px=%d,%d mm=%f,%f "
-                  "in=%f,%f ppi: sys=%d,%d com=%d,%d; ppm=%f,%f" % \
+                  "in=%f,%f ppi: sys=%d,%d com=%d,%d; ppm=%f,%f" %
                   (dpSizePx[0], dpSizePx[1], dpSizeMM[0], dpSizeMM[1],
                    dpSizeIn[0], dpSizeIn[1],
                    sysPpi[0], sysPpi[1], comPpi[0], comPpi[1],
                    ppm[0], ppm[1]))
-        
+
         return ppm
-    
-    def SetMapScale(self, value, map = None):
+
+    def SetMapScale(self, value, map=None):
         """Set current map scale
-        
+
         :param value: scale value (n if scale is 1:n)
         :param map: Map instance (if none self.Map is used)
         """
         if not map:
             map = self.Map
-        
+
         region = self.Map.region
         dEW = value * (region['cols'] / self.GetPPM()[0])
         dNS = value * (region['rows'] / self.GetPPM()[1])
         region['n'] = region['center_northing'] + dNS / 2.
         region['s'] = region['center_northing'] - dNS / 2.
-        region['w'] = region['center_easting']  - dEW / 2.
-        region['e'] = region['center_easting']  + dEW / 2.
-        
+        region['w'] = region['center_easting'] - dEW / 2.
+        region['e'] = region['center_easting'] + dEW / 2.
+
         # add to zoom history
         self.GetWindow().ZoomHistory(region['n'], region['s'],
-                                   region['e'], region['w'])
-    
-    def GetMapScale(self, map = None):
+                                     region['e'], region['w'])
+
+    def GetMapScale(self, map=None):
         """Get current map scale
-        
+
         :param map: Map instance (if none self.Map is used)
         """
         if not map:
             map = self.GetMap()
-        
+
         region = map.region
         ppm = self.GetPPM()
 
         heightCm = region['rows'] / ppm[1] * 100
-        widthCm  = region['cols'] / ppm[0] * 100
+        widthCm = region['cols'] / ppm[0] * 100
 
         Debug.msg(4, "MapFrame.GetMapScale(): width_cm=%f, height_cm=%f" %
                   (widthCm, heightCm))
@@ -228,19 +258,20 @@ class MapFrameBase(wx.Frame):
         xscale = (region['e'] - region['w']) / (region['cols'] / ppm[0])
         yscale = (region['n'] - region['s']) / (region['rows'] / ppm[1])
         scale = (xscale + yscale) / 2.
-        
-        Debug.msg(3, "MapFrame.GetMapScale(): xscale=%f, yscale=%f -> scale=%f" % \
-                      (xscale, yscale, scale))
-        
+
+        Debug.msg(
+            3, "MapFrame.GetMapScale(): xscale=%f, yscale=%f -> scale=%f" %
+            (xscale, yscale, scale))
+
         return scale
-        
+
     def GetProgressBar(self):
         """Returns progress bar
-        
+
         Progress bar can be used by other classes.
         """
         return self.statusbarManager.GetProgressBar()
-        
+
     def GetMap(self):
         """Returns current map (renderer) instance"""
         raise NotImplementedError("GetMap")
@@ -252,26 +283,25 @@ class MapFrameBase(wx.Frame):
     def GetWindows(self):
         """Returns list of map windows"""
         raise NotImplementedError("GetWindows")
-        
+
     def GetMapToolbar(self):
         """Returns toolbar with zooming tools"""
         raise NotImplementedError("GetMapToolbar")
-       
+
     def GetToolbar(self, name):
-        """Returns toolbar if exists else None.
-        
-        Toolbars dictionary contains currently used toolbars only.
+        """Returns toolbar if exists and is active, else None.
         """
-        if name in self.toolbars:
+        if name in self.toolbars and self.toolbars[name].IsShown():
             return self.toolbars[name]
-        
+
         return None
-       
+
     def StatusbarUpdate(self):
         """Update statusbar content"""
-        Debug.msg(5, "MapFrameBase.StatusbarUpdate()")
-        self.statusbarManager.Update()
-        
+        if self.statusbarManager:
+            Debug.msg(5, "MapFrameBase.StatusbarUpdate()")
+            self.statusbarManager.Update()
+
     def IsAutoRendered(self):
         """Check if auto-rendering is enabled"""
         # TODO: this is now not the right place to access this attribute
@@ -279,47 +309,49 @@ class MapFrameBase(wx.Frame):
         # and pass the right object in the init of derived class?
         # or do not use this method at all, let mapwindow decide
         return self.mapWindowProperties.autoRender
-        
+
     def CoordinatesChanged(self):
         """Shows current coordinates on statusbar.
         """
         # assuming that the first mode is coordinates
         # probably shold not be here but good solution is not available now
-        if self.statusbarManager.GetMode() == 0:
-            self.statusbarManager.ShowItem('coordinates')
-        
+        if self.statusbarManager:
+            if self.statusbarManager.GetMode() == 0:
+                self.statusbarManager.ShowItem('coordinates')
+
     def StatusbarReposition(self):
         """Reposition items in statusbar"""
-        self.statusbarManager.Reposition()
-        
-    def StatusbarEnableLongHelp(self, enable = True):
+        if self.statusbarManager:
+            self.statusbarManager.Reposition()
+
+    def StatusbarEnableLongHelp(self, enable=True):
         """Enable/disable toolbars long help"""
         for toolbar in self.toolbars.itervalues():
             toolbar.EnableLongHelp(enable)
-        
+
     def IsStandalone(self):
         """Check if map frame is standalone"""
         raise NotImplementedError("IsStandalone")
-   
+
     def OnRender(self, event):
         """Re-render map composition (each map layer)
         """
         raise NotImplementedError("OnRender")
-        
+
     def OnDraw(self, event):
         """Re-display current map composition
         """
-        self.MapWindow.UpdateMap(render = False)
-        
+        self.MapWindow.UpdateMap(render=False)
+
     def OnErase(self, event):
         """Erase the canvas
         """
         self.MapWindow.EraseMap()
-        
+
     def OnZoomIn(self, event):
         """Zoom in the map."""
         self.MapWindow.SetModeZoomIn()
-        
+
     def OnZoomOut(self, event):
         """Zoom out the map."""
         self.MapWindow.SetModeZoomOut()
@@ -327,12 +359,13 @@ class MapFrameBase(wx.Frame):
     def _setUpMapWindow(self, mapWindow):
         """Binds map windows' zoom history signals to map toolbar."""
         # enable or disable zoom history tool
-        mapWindow.zoomHistoryAvailable.connect(
-            lambda:
-            self.GetMapToolbar().Enable('zoomBack', enable=True))
-        mapWindow.zoomHistoryUnavailable.connect(
-            lambda:
-            self.GetMapToolbar().Enable('zoomBack', enable=False))
+        if self.GetMapToolbar():
+            mapWindow.zoomHistoryAvailable.connect(
+                lambda:
+                self.GetMapToolbar().Enable('zoomBack', enable=True))
+            mapWindow.zoomHistoryUnavailable.connect(
+                lambda:
+                self.GetMapToolbar().Enable('zoomBack', enable=False))
         mapWindow.mouseMoving.connect(self.CoordinatesChanged)
 
     def OnPointer(self, event):
@@ -348,20 +381,20 @@ class MapFrameBase(wx.Frame):
         """Zoom last (previously stored position)
         """
         self.MapWindow.ZoomBack()
-        
+
     def OnZoomToMap(self, event):
         """
         Set display extents to match selected raster (including NULLs)
         or vector map.
         """
-        self.MapWindow.ZoomToMap(layers = self.Map.GetListOfLayers())
-    
+        self.MapWindow.ZoomToMap(layers=self.Map.GetListOfLayers())
+
     def OnZoomToWind(self, event):
         """Set display geometry to match computational region
         settings (set with g.region)
         """
         self.MapWindow.ZoomToWind()
-        
+
     def OnZoomToDefault(self, event):
         """Set display geometry to match default region settings
         """
@@ -370,21 +403,22 @@ class MapFrameBase(wx.Frame):
 
 class SingleMapFrame(MapFrameBase):
     """Frame with one map window.
-    
+
     It is base class for frames which needs only one map.
-    
+
     Derived class should have \c self.MapWindow or
     it has to override GetWindow() methods.
-    
+
     @note To access maps use getters only
     (when using class or when writing class itself).
     """
-    def __init__(self, parent = None, giface = None, id = wx.ID_ANY, title = None,
-                 style = wx.DEFAULT_FRAME_STYLE,
-                 Map = None,
-                 auimgr = None, name = None, **kwargs):
+
+    def __init__(self, parent=None, giface=None, id=wx.ID_ANY, title='',
+                 style=wx.DEFAULT_FRAME_STYLE,
+                 Map=None,
+                 auimgr=None, name='', **kwargs):
         """
-        
+
         :param parent: gui parent
         :param id: wx id
         :param title: window title
@@ -394,17 +428,18 @@ class SingleMapFrame(MapFrameBase):
         :param kwargs: arguments passed to MapFrameBase
         """
 
-        MapFrameBase.__init__(self, parent = parent, id = id, title = title,
-                              style = style,
-                              auimgr = auimgr, name = name, **kwargs)
+        MapFrameBase.__init__(self, parent=parent, id=id, title=title,
+                              style=style,
+                              auimgr=auimgr, name=name, **kwargs)
 
         self.Map = Map       # instance of render.Map
 
         #
         # initialize region values
         #
-        self._initMap(Map = self.Map)
-        
+        if self.Map:
+            self._initMap(Map=self.Map)
+
     def GetMap(self):
         """Returns map (renderer) instance"""
         return self.Map
@@ -412,7 +447,7 @@ class SingleMapFrame(MapFrameBase):
     def GetWindow(self):
         """Returns map window"""
         return self.MapWindow
-        
+
     def GetWindows(self):
         """Returns list of map windows"""
         return [self.MapWindow]
@@ -420,42 +455,43 @@ class SingleMapFrame(MapFrameBase):
     def OnRender(self, event):
         """Re-render map composition (each map layer)
         """
-        self.GetWindow().UpdateMap(render = True, renderVector = True)
-        
+        self.GetWindow().UpdateMap(render=True, renderVector=True)
+
         # update statusbar
         self.StatusbarUpdate()
-        
+
 
 class DoubleMapFrame(MapFrameBase):
     """Frame with two map windows.
-    
+
     It is base class for frames which needs two maps.
     There is no primary and secondary map. Both maps are equal.
     However, one map is current.
-    
+
     It is expected that derived class will call _bindWindowsActivation()
     when both map windows will be initialized.
-    
+
     Drived class should have method GetMapToolbar() returns toolbar
     which has methods SetActiveMap() and Enable().
-    
+
     @note To access maps use getters only
     (when using class or when writing class itself).
-    
+
     .. todo:
         Use it in GCP manager (probably changes to both DoubleMapFrame
         and GCP MapFrame will be neccessary).
     """
-    def __init__(self, parent = None, id = wx.ID_ANY, title = None,
-                 style = wx.DEFAULT_FRAME_STYLE,
-                 firstMap = None, secondMap = None,
-                 auimgr = None, name = None, **kwargs):
+
+    def __init__(self, parent=None, id=wx.ID_ANY, title=None,
+                 style=wx.DEFAULT_FRAME_STYLE,
+                 firstMap=None, secondMap=None,
+                 auimgr=None, name=None, **kwargs):
         """
-        
+
         \a firstMap is set as active (by assign it to \c self.Map).
         Derived class should assging to \c self.MapWindow to make one
         map window current by dafault.
-        
+
         :param parent: gui parent
         :param id: wx id
         :param title: window title
@@ -463,11 +499,11 @@ class DoubleMapFrame(MapFrameBase):
         :param name: frame name
         :param kwargs: arguments passed to MapFrameBase
         """
-        
-        MapFrameBase.__init__(self, parent = parent, id = id, title = title,
-                              style = style,
-                              auimgr = auimgr, name = name, **kwargs)
-        
+
+        MapFrameBase.__init__(self, parent=parent, id=id, title=title,
+                              style=style,
+                              auimgr=auimgr, name=name, **kwargs)
+
         self.firstMap = firstMap
         self.secondMap = secondMap
         self.Map = firstMap
@@ -475,15 +511,15 @@ class DoubleMapFrame(MapFrameBase):
         #
         # initialize region values
         #
-        self._initMap(Map = self.firstMap)
-        self._initMap(Map = self.secondMap)
+        self._initMap(Map=self.firstMap)
+        self._initMap(Map=self.secondMap)
         self._bindRegions = False
-    
+
     def _bindWindowsActivation(self):
         self.GetFirstWindow().Bind(wx.EVT_ENTER_WINDOW, self.ActivateFirstMap)
         self.GetSecondWindow().Bind(wx.EVT_ENTER_WINDOW, self.ActivateSecondMap)
-    
-    def _onToggleTool(self, id): 
+
+    def _onToggleTool(self, id):
         if self._toolSwitcher.IsToolInGroup(id, 'mouseUse'):
             self.GetFirstWindow().UnregisterAllHandlers()
             self.GetSecondWindow().UnregisterAllHandlers()
@@ -492,41 +528,41 @@ class DoubleMapFrame(MapFrameBase):
         """Returns first Map instance
         """
         return self.firstMap
-        
+
     def GetSecondMap(self):
         """Returns second Map instance
         """
         return self.secondMap
-        
+
     def GetFirstWindow(self):
         """Get first map window"""
         return self.firstMapWindow
-    
+
     def GetSecondWindow(self):
         """Get second map window"""
         return self.secondMapWindow
-    
+
     def GetMap(self):
         """Returns current map (renderer) instance
-        
+
         @note Use this method to access current map renderer.
         (It is not guarented that current map will be stored in
         \c self.Map in future versions.)
         """
         return self.Map
-    
+
     def GetWindow(self):
         """Returns current map window
-        
+
         :func:`GetMap()`
         """
         return self.MapWindow
-    
+
     def GetWindows(self):
         """Return list of all windows"""
         return [self.firstMapWindow, self.secondMapWindow]
-    
-    def ActivateFirstMap(self, event = None):
+
+    def ActivateFirstMap(self, event=None):
         """Make first Map and MapWindow active and (un)bind regions of the two Maps."""
         if self.MapWindow == self.firstMapWindow:
             return
@@ -538,20 +574,23 @@ class DoubleMapFrame(MapFrameBase):
         # bind/unbind regions
         if self._bindRegions:
             self.firstMapWindow.zoomChanged.connect(self.OnZoomChangedFirstMap)
-            self.secondMapWindow.zoomChanged.disconnect(self.OnZoomChangedSecondMap)
+            self.secondMapWindow.zoomChanged.disconnect(
+                self.OnZoomChangedSecondMap)
 
-    def ActivateSecondMap(self, event = None):
+    def ActivateSecondMap(self, event=None):
         """Make second Map and MapWindow active and (un)bind regions of the two Maps."""
         if self.MapWindow == self.secondMapWindow:
-            return        
+            return
 
         self.Map = self.secondMap
         self.MapWindow = self.secondMapWindow
         self.GetMapToolbar().SetActiveMap(1)
 
         if self._bindRegions:
-            self.secondMapWindow.zoomChanged.connect(self.OnZoomChangedSecondMap)
-            self.firstMapWindow.zoomChanged.disconnect(self.OnZoomChangedFirstMap)
+            self.secondMapWindow.zoomChanged.connect(
+                self.OnZoomChangedSecondMap)
+            self.firstMapWindow.zoomChanged.disconnect(
+                self.OnZoomChangedFirstMap)
 
     def SetBindRegions(self, on):
         """Set or unset binding display regions."""
@@ -559,14 +598,18 @@ class DoubleMapFrame(MapFrameBase):
 
         if on:
             if self.MapWindow == self.firstMapWindow:
-                self.firstMapWindow.zoomChanged.connect(self.OnZoomChangedFirstMap)
+                self.firstMapWindow.zoomChanged.connect(
+                    self.OnZoomChangedFirstMap)
             else:
-                self.secondMapWindow.zoomChanged.connect(self.OnZoomChangedSecondMap)
+                self.secondMapWindow.zoomChanged.connect(
+                    self.OnZoomChangedSecondMap)
         else:
             if self.MapWindow == self.firstMapWindow:
-                self.firstMapWindow.zoomChanged.disconnect(self.OnZoomChangedFirstMap)
+                self.firstMapWindow.zoomChanged.disconnect(
+                    self.OnZoomChangedFirstMap)
             else:
-                self.secondMapWindow.zoomChanged.disconnect(self.OnZoomChangedSecondMap)
+                self.secondMapWindow.zoomChanged.disconnect(
+                    self.OnZoomChangedSecondMap)
 
     def OnZoomChangedFirstMap(self):
         """Display region of the first window (Map) changed.
@@ -576,7 +619,7 @@ class DoubleMapFrame(MapFrameBase):
         """
         region = self.GetFirstMap().GetCurrentRegion()
         self.GetSecondMap().region.update(region)
-        self.Render(mapToRender = self.GetSecondWindow())
+        self.Render(mapToRender=self.GetSecondWindow())
 
     def OnZoomChangedSecondMap(self):
         """Display region of the second window (Map) changed.
@@ -586,7 +629,7 @@ class DoubleMapFrame(MapFrameBase):
         """
         region = self.GetSecondMap().GetCurrentRegion()
         self.GetFirstMap().region.update(region)
-        self.Render(mapToRender = self.GetFirstWindow())
+        self.Render(mapToRender=self.GetFirstWindow())
 
     def OnZoomIn(self, event):
         """Zoom in the map."""
@@ -597,7 +640,7 @@ class DoubleMapFrame(MapFrameBase):
         """Zoom out the map."""
         self.GetFirstWindow().SetModeZoomOut()
         self.GetSecondWindow().SetModeZoomOut()
-        
+
     def OnPan(self, event):
         """Panning, set mouse to pan"""
         self.GetFirstWindow().SetModePan()
@@ -616,35 +659,36 @@ class DoubleMapFrame(MapFrameBase):
     def OnRender(self, event):
         """Re-render map composition (each map layer)
         """
-        self.Render(mapToRender = self.GetFirstWindow())
-        self.Render(mapToRender = self.GetSecondWindow())
-    
+        self.Render(mapToRender=self.GetFirstWindow())
+        self.Render(mapToRender=self.GetSecondWindow())
+
     def Render(self, mapToRender):
         """Re-render map composition"""
-        mapToRender.UpdateMap(render = True,
-                              renderVector = mapToRender == self.GetFirstWindow())
-        
+        mapToRender.UpdateMap(
+            render=True,
+            renderVector=mapToRender == self.GetFirstWindow())
+
         # update statusbar
         self.StatusbarUpdate()
-        
+
     def OnErase(self, event):
         """Erase the canvas
         """
-        self.Erase(mapToErase = self.GetFirstWindow())
-        self.Erase(mapToErase = self.GetSecondWindow())
-        
+        self.Erase(mapToErase=self.GetFirstWindow())
+        self.Erase(mapToErase=self.GetSecondWindow())
+
     def Erase(self, mapToErase):
         """Erase the canvas
         """
         mapToErase.EraseMap()
-        
+
     def OnDraw(self, event):
         """Re-display current map composition
         """
-        self.Draw(mapToDraw = self.GetFirstWindow())
-        self.Draw(mapToDraw = self.GetSecondWindow())
-        
+        self.Draw(mapToDraw=self.GetFirstWindow())
+        self.Draw(mapToDraw=self.GetSecondWindow())
+
     def Draw(self, mapToDraw):
         """Re-display current map composition
         """
-        mapToDraw.UpdateMap(render = False)
+        mapToDraw.UpdateMap(render=False)
diff --git a/gui/wxpython/gui_core/menu.py b/gui/wxpython/gui_core/menu.py
index 49f1ad5..b29ca1e 100644
--- a/gui/wxpython/gui_core/menu.py
+++ b/gui/wxpython/gui_core/menu.py
@@ -21,17 +21,19 @@ This program is free software under the GNU General Public License
 import re
 import wx
 
-from core              import globalvar
-from core              import utils
-from core.gcmd         import EncodeString
+from core import globalvar
+from core import utils
+from core.gcmd import EncodeString
 from core.utils import _
-from gui_core.widgets  import SearchModuleWidget
+from gui_core.widgets import SearchModuleWidget
 from gui_core.treeview import CTreeView
 from icons.icon import MetaIcon
 
 from grass.pydispatch.signal import Signal
 
+
 class Menu(wx.MenuBar):
+
     def __init__(self, parent, model):
         """Creates menubar"""
         wx.MenuBar.__init__(self)
@@ -42,7 +44,7 @@ class Menu(wx.MenuBar):
 
         for child in self.model.root.children:
             self.Append(self._createMenu(child), child.label)
-        
+
     def _createMenu(self, node):
         """Creates menu"""
         menu = wx.Menu()
@@ -54,15 +56,16 @@ class Menu(wx.MenuBar):
             else:
                 data = child.data.copy()
                 data.pop('label')
-                
+
                 self._createMenuItem(menu, label=child.label, **data)
-        
+
         self.parent.Bind(wx.EVT_MENU_HIGHLIGHT_ALL, self.OnMenuHighlight)
-        
+
         return menu
 
-    def _createMenuItem(self, menu, label, description, handler, command, keywords,
-                        shortcut = '', icon = '', wxId = wx.ID_ANY, kind = wx.ITEM_NORMAL):
+    def _createMenuItem(
+            self, menu, label, description, handler, command, keywords,
+            shortcut='', icon='', wxId=wx.ID_ANY, kind=wx.ITEM_NORMAL):
         """Creates menu items
         There are three menu styles (menu item text styles).
         1 -- label only, 2 -- label and cmd name, 3 -- cmd name only
@@ -70,51 +73,52 @@ class Menu(wx.MenuBar):
         if not label:
             menu.AppendSeparator()
             return
-        
+
         if command:
             helpString = command + ' -- ' + description
         else:
             helpString = description
-        
+
         if shortcut:
             label += '\t' + shortcut
-        
+
         menuItem = wx.MenuItem(menu, wxId, label, helpString, kind)
         if icon:
-            menuItem.SetBitmap(MetaIcon(img = icon).GetBitmap(self.bmpsize))
+            menuItem.SetBitmap(MetaIcon(img=icon).GetBitmap(self.bmpsize))
         menu.AppendItem(menuItem)
-        
+
         self.menucmd[menuItem.GetId()] = command
-        
-        if command: 
-            try: 
-                cmd = utils.split(str(command)) 
-            except UnicodeError: 
+
+        if command:
+            try:
+                cmd = utils.split(str(command))
+            except UnicodeError:
                 cmd = utils.split(EncodeString((command)))
-            # disable only grass commands which are not present (e.g. r.in.lidar)
+            # disable only grass commands which are not present (e.g.
+            # r.in.lidar)
             if cmd and cmd[0] not in globalvar.grassCmd and \
                re.match('[rvdipmgt][3bs]?\.([a-z0-9\.])+', cmd[0]):
                 menuItem.Enable(False)
 
         rhandler = eval('self.parent.' + handler)
         self.parent.Bind(wx.EVT_MENU, rhandler, menuItem)
-        
+
     def GetData(self):
         """Get menu data"""
         return self.model
-    
+
     def GetCmd(self):
         """Get dictionary of commands (key is id)
 
         :return: dictionary of commands
         """
         return self.menucmd
-        
+
     def OnMenuHighlight(self, event):
         """
         Default menu help handler
         """
-         # Show how to get menu item info from this event handler
+        # Show how to get menu item info from this event handler
         id = event.GetMenuId()
         item = self.FindItemById(id)
         if item:
@@ -124,22 +128,25 @@ class Menu(wx.MenuBar):
         # but in this case just call Skip so the default is done
         event.Skip()
 
+
 class SearchModuleWindow(wx.Panel):
     """Menu tree and search widget for searching modules.
-    
+
     Signal:
         showNotification - attribute 'message'
     """
-    def __init__(self, parent, handlerObj, model, id = wx.ID_ANY, **kwargs):
+
+    def __init__(self, parent, handlerObj, model, id=wx.ID_ANY, **kwargs):
         self.parent = parent
         self.handlerObj = handlerObj
-        
+
         self.showNotification = Signal('SearchModuleWindow.showNotification')
-        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
-        
+        wx.Panel.__init__(self, parent=parent, id=id, **kwargs)
+
         # tree
         self._tree = CTreeView(model=model, parent=self)
-        self._tree.SetToolTipString(_("Double-click or Ctrl-Enter to run selected module"))
+        self._tree.SetToolTipString(
+            _("Double-click or Ctrl-Enter to run selected module"))
 
 #        self._dataBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
 #                                     label = " %s " % _("Module tree"))
@@ -148,65 +155,69 @@ class SearchModuleWindow(wx.Panel):
         self._search = SearchModuleWidget(parent=self,
                                           model=model,
                                           showChoice=False)
-        self._search.showSearchResult.connect(lambda result: self._tree.Select(result))
+        self._search.showSearchResult.connect(
+            lambda result: self._tree.Select(result))
         self._search.showNotification.connect(self.showNotification)
-        
-        self._helpText = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                       label="Press Enter for next match, Ctrl+Enter to run command")
-        self._helpText.SetForegroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
-        
+
+        self._helpText = wx.StaticText(
+            parent=self, id=wx.ID_ANY,
+            label="Press Enter for next match, Ctrl+Enter to run command")
+        self._helpText.SetForegroundColour(
+            wx.SystemSettings_GetColour(
+                wx.SYS_COLOUR_GRAYTEXT))
+
         # buttons
         self._btnRun = wx.Button(self, id=wx.ID_OK, label=_("&Run"))
         self._btnRun.SetToolTipString(_("Run selected module from the tree"))
-        
+
         # bindings
         self._btnRun.Bind(wx.EVT_BUTTON, lambda evt: self.Run())
-        self.Bind(wx.EVT_KEY_UP,  self.OnKeyUp)
-        
+        self.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
+
         self._tree.selectionChanged.connect(self.OnItemSelected)
         self._tree.itemActivated.connect(lambda node: self.Run(node))
 
         self._layout()
-        
+
         self._search.SetFocus()
-        
+
     def _layout(self):
         """Do dialog layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # body
         dataSizer = wx.BoxSizer(wx.HORIZONTAL)
-        dataSizer.Add(item = self._tree, proportion =1,
-                      flag = wx.EXPAND)
-        
+        dataSizer.Add(item=self._tree, proportion=1,
+                      flag=wx.EXPAND)
+
         # buttons
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self._btnRun, proportion = 0)
-        
-        sizer.Add(item = dataSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 5)
-
-        sizer.Add(item = self._search, proportion = 0,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.BOTTOM | wx.RIGHT, border = 5)
-        
+        btnSizer.Add(item=self._btnRun, proportion=0)
+
+        sizer.Add(item=dataSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=5)
+
+        sizer.Add(item=self._search, proportion=0,
+                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.BOTTOM | wx.RIGHT, border=5)
+
         sizer.Add(item=self._helpText,
                   proportion=0, flag=wx.EXPAND | wx.LEFT, border=5)
-        
+
         sizer.Fit(self)
         sizer.SetSizeHints(self)
-        
+
         self.SetSizer(sizer)
-        
+
         self.Fit()
-        self.SetAutoLayout(True)        
+        self.SetAutoLayout(True)
         self.Layout()
-        
+
     def Run(self, module=None):
         """Run selected command.
-        
+
         :param module: module (represented by tree node)
         """
         if module is None:
@@ -230,18 +241,18 @@ class SearchModuleWindow(wx.Panel):
         if event.ControlDown() and \
                 event.GetKeyCode() in (wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER):
             self.Run()
-        
+
     def OnItemSelected(self, node):
-        """Item selected"""    
+        """Item selected"""
         data = node.data
         if not data or 'command' not in data:
             return
-        
+
         if data['command']:
             label = data['command']
             if data['description']:
                 label += ' -- ' + data['description']
         else:
             label = data['description']
-        
+
         self.showNotification.emit(message=label)
diff --git a/gui/wxpython/gui_core/preferences.py b/gui/wxpython/gui_core/preferences.py
index 8914426..21d8085 100644
--- a/gui/wxpython/gui_core/preferences.py
+++ b/gui/wxpython/gui_core/preferences.py
@@ -11,7 +11,6 @@ used in PreferencesDialog.
 Classes:
  - preferences::PreferencesBaseDialog
  - preferences::PreferencesDialog
- - preferences::DefaultFontDialog
  - preferences::MapsetAccess
  - preferences::CheckListMapset
 
@@ -36,61 +35,66 @@ except ImportError:
     havePwd = False
 
 import wx
-import wx.lib.colourselect    as csel
+import wx.lib.colourselect as csel
 import wx.lib.mixins.listctrl as listmix
 import wx.lib.scrolledpanel as SP
 
 from grass.pydispatch.signal import Signal
+import grass.script as grass
+from grass.exceptions import OpenError
 
-from grass.script import core as grass
-
-from core          import globalvar
-from core.gcmd     import RunCommand, GError
-from core.utils    import ListOfMapsets, GetColorTables, ReadEpsgCodes, _
+from core import globalvar
+from core.gcmd import RunCommand, GError
+from core.utils import ListOfMapsets, GetColorTables, ReadEpsgCodes, _
 from core.settings import UserSettings
-from gui_core.dialogs import SymbolDialog
+from gui_core.dialogs import SymbolDialog, DefaultFontDialog
 from gui_core.widgets import IntegerValidator, ColorTablesComboBox
-from core.debug       import Debug
+from core.debug import Debug
+
 
 class PreferencesBaseDialog(wx.Dialog):
     """Base preferences dialog"""
-    def __init__(self, parent, giface, settings, title = _("User settings"),
-                 size = (500, 475),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
-        self.parent = parent # ModelerFrame
-        self.title  = title
-        self.size   = size
+
+    def __init__(self, parent, giface, settings, title=_("User settings"),
+                 size=(500, 475),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+        self.parent = parent  # ModelerFrame
+        self.title = title
+        self.size = size
         self.settings = settings
         self._giface = giface
-        
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title,
-                           style = style)
-        
+
+        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=title,
+                           style=style)
+
         self.settingsChanged = Signal('PreferencesBaseDialog.settingsChanged')
-        
+
         # notebook
-        self.notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
-        
+        self.notebook = wx.Notebook(
+            parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
+
         # dict for window ids
         self.winId = {}
-        
+
         # create notebook pages
-        
+
         # buttons
         self.btnDefault = wx.Button(self, wx.ID_ANY, _("Set to default"))
         self.btnSave = wx.Button(self, wx.ID_SAVE)
         self.btnApply = wx.Button(self, wx.ID_APPLY)
         self.btnCancel = wx.Button(self, wx.ID_CANCEL)
         self.btnSave.SetDefault()
-        
+
         # bindigs
         self.btnDefault.Bind(wx.EVT_BUTTON, self.OnDefault)
         self.btnDefault.SetToolTipString(_("Revert settings to default"))
         self.btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
-        self.btnApply.SetToolTipString(_("Apply changes for the current session only and close"))
+        self.btnApply.SetToolTipString(
+            _("Apply changes for the current session only and close"))
         self.btnApply.SetLabel(_("Save for this session only"))
         self.btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
-        self.btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
+        self.btnSave.SetToolTipString(
+            _("Apply and save changes to user settings file (default for next sessions)"))
         self.btnSave.SetDefault()
         self.btnCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
         self.btnCancel.SetToolTipString(_("Close dialog and ignore changes"))
@@ -98,26 +102,30 @@ class PreferencesBaseDialog(wx.Dialog):
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
 
         self._layout()
-        
+
     def _layout(self):
         """Layout window"""
         # sizers
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnDefault, proportion = 1,
-                     flag = wx.ALL, border = 5)
+        btnSizer.Add(item=self.btnDefault, proportion=1,
+                     flag=wx.ALL, border=5)
         btnStdSizer = wx.StdDialogButtonSizer()
         btnStdSizer.AddButton(self.btnCancel)
         btnStdSizer.AddButton(self.btnSave)
         btnStdSizer.AddButton(self.btnApply)
         btnStdSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = self.notebook, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND, border = 0)
-        mainSizer.Add(item = btnStdSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
-        
+        mainSizer.Add(
+            item=self.notebook,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND, border=0)
+        mainSizer.Add(item=btnStdSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border=5)
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
 
@@ -127,10 +135,13 @@ class PreferencesBaseDialog(wx.Dialog):
         for gks in self.winId.keys():
             try:
                 group, key, subkey = gks.split(':')
-                value = self.settings.Get(group, key, subkey, settings_type='default')
+                value = self.settings.Get(
+                    group, key, subkey, settings_type='default')
             except ValueError:
                 group, key, subkey, subkey1 = gks.split(':')
-                value = self.settings.Get(group, key, [subkey, subkey1], settings_type='default')
+                value = self.settings.Get(
+                    group, key, [subkey, subkey1],
+                    settings_type='default')
             win = self.FindWindowById(self.winId[gks])
 
             if win.GetName() in ('GetValue', 'IsChecked'):
@@ -149,34 +160,48 @@ class PreferencesBaseDialog(wx.Dialog):
         Emits signal settingsChanged.
         """
         if self._updateSettings():
-            self._giface.WriteLog(_('Settings applied to current session but not saved'))
+            self._giface.WriteLog(
+                _('Settings applied to current session but not saved'))
             self.settingsChanged.emit()
             self.Close()
 
     def OnCloseWindow(self, event):
         event.Skip()
         self.Destroy()
-        
+
     def OnCancel(self, event):
         """Button 'Cancel' pressed"""
         self.Close()
-    
+
     def OnSave(self, event):
         """Button 'Save' pressed
         Emits signal settingsChanged.
         """
         if self._updateSettings():
-            lang = self.settings.Get(group = 'language', key = 'locale', subkey = 'lc_all')
+            lang = self.settings.Get(
+                group='language', key='locale', subkey='lc_all')
             if lang == 'system':
-                # Most fool proof way to use system locale is to not provide any locale info at all
-                self.settings.Set(group = 'language', key = 'locale', subkey = 'lc_all', value = None)
+                # Most fool proof way to use system locale is to not provide
+                # any locale info at all
+                self.settings.Set(
+                    group='language',
+                    key='locale',
+                    subkey='lc_all',
+                    value=None)
                 lang = None
             if lang == 'en':
-                # GRASS doesn't ship EN translation, default texts have to be used instead
-                self.settings.Set(group = 'language', key = 'locale', subkey = 'lc_all', value = 'C')
+                # GRASS doesn't ship EN translation, default texts have to be
+                # used instead
+                self.settings.Set(
+                    group='language',
+                    key='locale',
+                    subkey='lc_all',
+                    value='C')
                 lang = 'C'
             self.settings.SaveToFile()
-            Debug.msg(1, "Settings saved to file '%s'" % self.settings.filePath)
+            Debug.msg(
+                1, "Settings saved to file '%s'" %
+                self.settings.filePath)
             self.settingsChanged.emit()
             self.Close()
 
@@ -188,7 +213,7 @@ class PreferencesBaseDialog(wx.Dialog):
                 subkey1 = None
             except ValueError:
                 group, key, subkey, subkey1 = item.split(':')
-            
+
             id = self.winId[item]
             win = self.FindWindowById(id)
             if win.GetName() == 'GetValue':
@@ -207,10 +232,14 @@ class PreferencesBaseDialog(wx.Dialog):
                 value = win.GetValue()
 
             if key == 'keycolumn' and value == '':
-                wx.MessageBox(parent = self,
-                              message = _("Key column cannot be empty string."),
-                              caption = _("Error"), style = wx.OK | wx.ICON_ERROR)
-                win.SetValue(self.settings.Get(group = 'atm', key = 'keycolumn', subkey = 'value'))
+                wx.MessageBox(parent=self,
+                              message=_("Key column cannot be empty string."),
+                              caption=_("Error"), style=wx.OK | wx.ICON_ERROR)
+                win.SetValue(
+                    self.settings.Get(
+                        group='atm',
+                        key='keycolumn',
+                        subkey='value'))
                 return False
             if subkey1:
                 self.settings.Set(group, value, key, [subkey, subkey1])
@@ -222,11 +251,16 @@ class PreferencesBaseDialog(wx.Dialog):
 
 class PreferencesDialog(PreferencesBaseDialog):
     """User preferences dialog"""
-    def __init__(self, parent, giface, title = _("GUI Settings"),
-                 settings = UserSettings):
-        PreferencesBaseDialog.__init__(self, parent = parent, giface = giface, title = title,
-                                       settings = settings)
-        
+
+    def __init__(self, parent, giface, title=_("GUI Settings"),
+                 settings=UserSettings):
+        PreferencesBaseDialog.__init__(
+            self,
+            parent=parent,
+            giface=giface,
+            title=title,
+            settings=settings)
+
         # create notebook pages
         self._createGeneralPage(self.notebook)
         self._createAppearancePage(self.notebook)
@@ -235,189 +269,269 @@ class PreferencesDialog(PreferencesBaseDialog):
         self._createLayersPage(self.notebook)
         self._createAttributeManagerPage(self.notebook)
         self._createProjectionPage(self.notebook)
-        
+
         self.SetMinSize(self.GetBestSize())
         self.SetSize(self.size)
-        
+
     def _createGeneralPage(self, notebook):
         """Create notebook page for general settings"""
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("General"))
-        
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("General"))
+
         border = wx.BoxSizer(wx.VERTICAL)
         #
         # Layer Manager settings
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Layer Manager settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Layer Manager settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         #
         # ask when removing map layer from layer tree
         #
         row = 0
-        askOnRemoveLayer = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                       label = _("Ask when removing map layer from layer tree"),
-                                       name = 'IsChecked')
-        askOnRemoveLayer.SetValue(self.settings.Get(group = 'manager', key = 'askOnRemoveLayer', subkey = 'enabled'))
+        askOnRemoveLayer = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Ask when removing map layer from layer tree"), name='IsChecked')
+        askOnRemoveLayer.SetValue(
+            self.settings.Get(
+                group='manager',
+                key='askOnRemoveLayer',
+                subkey='enabled'))
         self.winId['manager:askOnRemoveLayer:enabled'] = askOnRemoveLayer.GetId()
-        
-        gridSizer.Add(item = askOnRemoveLayer,
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=askOnRemoveLayer,
+                      pos=(row, 0), span=(1, 2))
+
         row += 1
-        askOnQuit = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                label = _("Ask when quiting wxGUI or closing display"),
-                                name = 'IsChecked')
-        askOnQuit.SetValue(self.settings.Get(group = 'manager', key = 'askOnQuit', subkey = 'enabled'))
+        askOnQuit = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Ask when quiting wxGUI or closing display"), name='IsChecked')
+        askOnQuit.SetValue(
+            self.settings.Get(
+                group='manager',
+                key='askOnQuit',
+                subkey='enabled'))
         self.winId['manager:askOnQuit:enabled'] = askOnQuit.GetId()
-        
-        gridSizer.Add(item = askOnQuit,
-                      pos = (row, 0), span = (1, 2))
+
+        gridSizer.Add(item=askOnQuit,
+                      pos=(row, 0), span=(1, 2))
 
         row += 1
-        hideSearch = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                 label = _("Hide '%s' tab (requires GUI restart)") % _("Search module"),
-                                 name = 'IsChecked')
-        hideSearch.SetValue(self.settings.Get(group = 'manager', key = 'hideTabs', subkey = 'search'))
+        hideSearch = wx.CheckBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Hide '%s' tab (requires GUI restart)") %
+            _("Modules"),
+            name='IsChecked')
+        hideSearch.SetValue(
+            self.settings.Get(
+                group='manager',
+                key='hideTabs',
+                subkey='search'))
         self.winId['manager:hideTabs:search'] = hideSearch.GetId()
-        
-        gridSizer.Add(item = hideSearch,
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=hideSearch,
+                      pos=(row, 0), span=(1, 2))
+
         row += 1
-        hidePyShell = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                  label = _("Hide '%s' tab (requires GUI restart)") % _("Python shell"),
-                                  name = 'IsChecked')
-        hidePyShell.SetValue(self.settings.Get(group = 'manager', key = 'hideTabs', subkey = 'pyshell'))
+        hidePyShell = wx.CheckBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Hide '%s' tab (requires GUI restart)") %
+            _("Python"),
+            name='IsChecked')
+        hidePyShell.SetValue(
+            self.settings.Get(
+                group='manager',
+                key='hideTabs',
+                subkey='pyshell'))
         self.winId['manager:hideTabs:pyshell'] = hidePyShell.GetId()
-        
-        gridSizer.Add(item = hidePyShell,
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=hidePyShell,
+                      pos=(row, 0), span=(1, 2))
+
         #
         # Selected text is copied to clipboard
         #
         row += 1
-        copySelectedTextToClipboard = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                                  label = _("Automatically copy selected text to clipboard (in Command console)"),
-                                                  name = 'IsChecked')
-        copySelectedTextToClipboard.SetValue(self.settings.Get(group = 'manager', key = 'copySelectedTextToClipboard', subkey = 'enabled'))
-        self.winId['manager:copySelectedTextToClipboard:enabled'] = copySelectedTextToClipboard.GetId()
-        
-        gridSizer.Add(item = copySelectedTextToClipboard,
-                      pos = (row, 0), span = (1, 2))
-        
+        copySelectedTextToClipboard = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_(
+                "Automatically copy selected text to clipboard (in the Console tab)"),
+            name='IsChecked')
+        copySelectedTextToClipboard.SetValue(
+            self.settings.Get(
+                group='manager',
+                key='copySelectedTextToClipboard',
+                subkey='enabled'))
+        self.winId[
+            'manager:copySelectedTextToClipboard:enabled'] = copySelectedTextToClipboard.GetId()
+
+        gridSizer.Add(item=copySelectedTextToClipboard,
+                      pos=(row, 0), span=(1, 2))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
         #
         # workspace
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Workspace settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Workspace settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         row = 0
-        posDisplay = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                 label = _("Suppress positioning Map Display Window(s)"),
-                                 name = 'IsChecked')
-        posDisplay.SetValue(self.settings.Get(group = 'general', key = 'workspace',
-                                              subkey = ['posDisplay', 'enabled']))
+        posDisplay = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Suppress positioning Map Display Window(s)"), name='IsChecked')
+        posDisplay.SetValue(
+            self.settings.Get(
+                group='general',
+                key='workspace',
+                subkey=[
+                    'posDisplay',
+                    'enabled']))
         self.winId['general:workspace:posDisplay:enabled'] = posDisplay.GetId()
-        
-        gridSizer.Add(item = posDisplay,
-                      pos = (row, 0), span = (1, 2))
-        
-        row += 1 
-        
-        posManager = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                 label = _("Suppress positioning Layer Manager window"),
-                                 name = 'IsChecked')
-        posManager.SetValue(self.settings.Get(group = 'general', key = 'workspace',
-                                              subkey = ['posManager', 'enabled']))
+
+        gridSizer.Add(item=posDisplay,
+                      pos=(row, 0), span=(1, 2))
+
+        row += 1
+
+        posManager = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Suppress positioning Layer Manager window"), name='IsChecked')
+        posManager.SetValue(
+            self.settings.Get(
+                group='general',
+                key='workspace',
+                subkey=[
+                    'posManager',
+                    'enabled']))
         self.winId['general:workspace:posManager:enabled'] = posManager.GetId()
-        
-        gridSizer.Add(item = posManager,
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=posManager,
+                      pos=(row, 0), span=(1, 2))
+
         row += 1
-        defaultPos = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                 label = _("Save current window layout as default"),
-                                 name = 'IsChecked')
-        defaultPos.SetValue(self.settings.Get(group = 'general', key = 'defWindowPos', subkey = 'enabled'))
-        defaultPos.SetToolTip(wx.ToolTip (_("Save current position and size of Layer Manager window and opened "
-                                            "Map Display window(s) and use as default for next sessions.")))
+        defaultPos = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Save current window layout as default"), name='IsChecked')
+        defaultPos.SetValue(
+            self.settings.Get(
+                group='general',
+                key='defWindowPos',
+                subkey='enabled'))
+        defaultPos.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Save current position and size of Layer Manager window and opened "
+                    "Map Display window(s) and use as default for next sessions.")))
         self.winId['general:defWindowPos:enabled'] = defaultPos.GetId()
-        
-        gridSizer.Add(item = defaultPos,
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=defaultPos,
+                      pos=(row, 0), span=(1, 2))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createAppearancePage(self, notebook):
         """Create notebook page for display settings"""
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("Appearance"))
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("Appearance"))
 
         border = wx.BoxSizer(wx.VERTICAL)
 
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Font settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Font settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         #
         # font settings
         #
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
 
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Font for command output:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Font for command output:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        outfontButton = wx.Button(parent = panel, id = wx.ID_ANY,
-                                  label = _("Set font"))
-        gridSizer.Add(item = outfontButton,
-                      flag = wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 0))
+        outfontButton = wx.Button(parent=panel, id=wx.ID_ANY,
+                                  label=_("Set font"))
+        gridSizer.Add(item=outfontButton,
+                      flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 1))
         gridSizer.AddGrowableCol(0)
 
         #
         # languages
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Language settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Language settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
 
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Choose language (requires to save and GRASS restart):")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        locales = self.settings.Get(group = 'language', key = 'locale', 
-                                         subkey = 'choices', settings_type='internal')
-        loc = self.settings.Get(group = 'language', key = 'locale', subkey = 'lc_all')
-        elementList = wx.Choice(parent = panel, id = wx.ID_ANY, size = (325, -1),
-                                choices = locales, name = "GetStringSelection")
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Choose language (requires to save and GRASS restart):")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        locales = self.settings.Get(group='language', key='locale',
+                                    subkey='choices', settings_type='internal')
+        loc = self.settings.Get(
+            group='language',
+            key='locale',
+            subkey='lc_all')
+        elementList = wx.Choice(parent=panel, id=wx.ID_ANY, size=(325, -1),
+                                choices=locales, name="GetStringSelection")
         if loc in locales:
             elementList.SetStringSelection(loc)
         if loc == 'C':
@@ -426,917 +540,1257 @@ class PreferencesDialog(PreferencesBaseDialog):
             elementList.SetStringSelection('system')
         self.winId['language:locale:lc_all'] = elementList.GetId()
 
-        gridSizer.Add(item = elementList,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=elementList,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
         gridSizer.AddGrowableCol(0)
         #
         # appearence
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Appearance settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Appearance settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer  =  wx.GridBagSizer (hgap = 3, vgap = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         #
         # element list
         #
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Element list:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Element list:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        elementList = wx.Choice(parent = panel, id = wx.ID_ANY, size = (325, -1),
-                                choices = self.settings.Get(group = 'appearance', key = 'elementListExpand',
-                                                            subkey = 'choices', settings_type='internal'),
-                                name = "GetSelection")
-        elementList.SetSelection(self.settings.Get(group = 'appearance', key = 'elementListExpand',
-                                                   subkey = 'selection'))
+                      pos=(row, 0))
+        elementList = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(325, -1),
+            choices=self.settings.Get(
+                group='appearance', key='elementListExpand', subkey='choices',
+                settings_type='internal'),
+            name="GetSelection")
+        elementList.SetSelection(
+            self.settings.Get(
+                group='appearance',
+                key='elementListExpand',
+                subkey='selection'))
         self.winId['appearance:elementListExpand:selection'] = elementList.GetId()
 
-        gridSizer.Add(item = elementList,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=elementList,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
-        
+                      pos=(row, 1))
+
         #
         # menu style
         #
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Menu style (requires to save and GUI restart):")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        listOfStyles = self.settings.Get(group = 'appearance', key = 'menustyle',
-                                         subkey='choices', settings_type='internal')
-        
-        menuItemText = wx.Choice(parent = panel, id = wx.ID_ANY, size = (325, -1),
-                                 choices = listOfStyles,
-                                 name = "GetSelection")
-        menuItemText.SetSelection(self.settings.Get(group = 'appearance', key = 'menustyle', subkey = 'selection'))
-        
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Menu style (requires to save and GUI restart):")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        listOfStyles = self.settings.Get(
+            group='appearance',
+            key='menustyle',
+            subkey='choices',
+            settings_type='internal')
+
+        menuItemText = wx.Choice(parent=panel, id=wx.ID_ANY, size=(325, -1),
+                                 choices=listOfStyles,
+                                 name="GetSelection")
+        menuItemText.SetSelection(
+            self.settings.Get(
+                group='appearance',
+                key='menustyle',
+                subkey='selection'))
+
         self.winId['appearance:menustyle:selection'] = menuItemText.GetId()
-        
-        gridSizer.Add(item = menuItemText,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
-        
+
+        gridSizer.Add(item=menuItemText,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
+
         #
         # gselect.TreeCtrlComboPopup height
         #
         row += 1
-        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Height of map selection popup window (in pixels):")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        min = self.settings.Get(group = 'appearance', key = 'gSelectPopupHeight', subkey = 'min', settings_type='internal')
-        max = self.settings.Get(group = 'appearance', key = 'gSelectPopupHeight', subkey = 'max', settings_type='internal')
-        value = self.settings.Get(group = 'appearance', key = 'gSelectPopupHeight', subkey = 'value')
-        
-        popupHeightSpin = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (100, -1))
-        popupHeightSpin.SetRange(min,max)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Height of map selection popup window (in pixels):")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        min = self.settings.Get(
+            group='appearance',
+            key='gSelectPopupHeight',
+            subkey='min',
+            settings_type='internal')
+        max = self.settings.Get(
+            group='appearance',
+            key='gSelectPopupHeight',
+            subkey='max',
+            settings_type='internal')
+        value = self.settings.Get(
+            group='appearance',
+            key='gSelectPopupHeight',
+            subkey='value')
+
+        popupHeightSpin = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(100, -1))
+        popupHeightSpin.SetRange(min, max)
         popupHeightSpin.SetValue(value)
-        
-        self.winId['appearance:gSelectPopupHeight:value'] = popupHeightSpin.GetId()
-        
-        gridSizer.Add(item = popupHeightSpin,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
-        
-        
+
+        self.winId[
+            'appearance:gSelectPopupHeight:value'] = popupHeightSpin.GetId()
+
+        gridSizer.Add(item=popupHeightSpin,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
+
         #
         # icon theme
         #
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Icon theme (requires GUI restart):")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        iconTheme = wx.Choice(parent = panel, id = wx.ID_ANY, size = (100, -1),
-                              choices = self.settings.Get(group = 'appearance', key = 'iconTheme',
-                                                        subkey = 'choices', settings_type='internal'),
-                              name = "GetStringSelection")
-        iconTheme.SetStringSelection(self.settings.Get(group = 'appearance', key = 'iconTheme', subkey = 'type'))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Icon theme (requires GUI restart):")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        iconTheme = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(100, -1),
+            choices=self.settings.Get(
+                group='appearance', key='iconTheme', subkey='choices',
+                settings_type='internal'),
+            name="GetStringSelection")
+        iconTheme.SetStringSelection(
+            self.settings.Get(
+                group='appearance',
+                key='iconTheme',
+                subkey='type'))
         self.winId['appearance:iconTheme:type'] = iconTheme.GetId()
 
-        gridSizer.Add(item = iconTheme,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=iconTheme,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
         #
         # command dialog style
         #
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Module dialog style:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Module dialog style:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        styleList = wx.Choice(parent = panel, id = wx.ID_ANY, size = (325, -1),
-                                choices = self.settings.Get(group = 'appearance', key = 'commandNotebook',
-                                                            subkey = 'choices', settings_type='internal'),
-                                name = "GetSelection")
-        styleList.SetSelection(self.settings.Get(group = 'appearance', key = 'commandNotebook',
-                                                   subkey = 'selection'))
+                      pos=(row, 0))
+        styleList = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(325, -1),
+            choices=self.settings.Get(
+                group='appearance', key='commandNotebook', subkey='choices',
+                settings_type='internal'),
+            name="GetSelection")
+        styleList.SetSelection(
+            self.settings.Get(
+                group='appearance',
+                key='commandNotebook',
+                subkey='selection'))
         self.winId['appearance:commandNotebook:selection'] = styleList.GetId()
 
-        gridSizer.Add(item = styleList,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=styleList,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-                
+
         # bindings
         if sys.platform == 'darwin':
             outfontButton.Bind(wx.EVT_BUTTON, self.OnSetOutputFontCustomDialog)
         else:
             outfontButton.Bind(wx.EVT_BUTTON, self.OnSetOutputFont)
-        
+
         return panel
-    
+
     def _createDisplayPage(self, notebook):
         """Create notebook page for display settings"""
-   
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("Map Display"))
+
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("Map Display"))
 
         border = wx.BoxSizer(wx.VERTICAL)
 
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Font settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Font settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         #
         # font settings
         #
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Default font for GRASS displays:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        fontButton = wx.Button(parent = panel, id = wx.ID_ANY,
-                               label = _("Set font"))
-        gridSizer.Add(item = fontButton,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Default font for GRASS displays:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        fontButton = wx.Button(parent=panel, id=wx.ID_ANY,
+                               label=_("Set font"))
+        gridSizer.Add(item=fontButton,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 1))
+                      pos=(row, 1))
 
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
 
         #
         # display settings
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Default display settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Default display settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         #
         # display driver
         #
         row = 0
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Display driver:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Display driver:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        listOfDrivers = self.settings.Get(group = 'display', key = 'driver', subkey = 'choices', settings_type='internal')
-        driver = wx.Choice(parent = panel, id = wx.ID_ANY, size = (150, -1),
-                           choices = listOfDrivers,
-                           name = "GetStringSelection")
-        driver.SetStringSelection(self.settings.Get(group = 'display', key = 'driver', subkey = 'type'))
+                      pos=(row, 0))
+        listOfDrivers = self.settings.Get(
+            group='display', key='driver', subkey='choices',
+            settings_type='internal')
+        driver = wx.Choice(parent=panel, id=wx.ID_ANY, size=(150, -1),
+                           choices=listOfDrivers,
+                           name="GetStringSelection")
+        driver.SetStringSelection(
+            self.settings.Get(
+                group='display',
+                key='driver',
+                subkey='type'))
         self.winId['display:driver:type'] = driver.GetId()
-        
-        gridSizer.Add(item = driver,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
-        
+
+        gridSizer.Add(item=driver,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
+
         #
         # Statusbar mode
         #
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Statusbar mode:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Statusbar mode:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        listOfModes = self.settings.Get(group = 'display', key = 'statusbarMode', subkey = 'choices', settings_type='internal')
-        statusbarMode = wx.Choice(parent = panel, id = wx.ID_ANY, size = (150, -1),
-                                  choices = listOfModes,
-                                  name = "GetSelection")
-        statusbarMode.SetSelection(self.settings.Get(group = 'display', key = 'statusbarMode', subkey = 'selection'))
+                      pos=(row, 0))
+        listOfModes = self.settings.Get(
+            group='display',
+            key='statusbarMode',
+            subkey='choices',
+            settings_type='internal')
+        statusbarMode = wx.Choice(parent=panel, id=wx.ID_ANY, size=(150, -1),
+                                  choices=listOfModes,
+                                  name="GetSelection")
+        statusbarMode.SetSelection(
+            self.settings.Get(
+                group='display',
+                key='statusbarMode',
+                subkey='selection'))
         self.winId['display:statusbarMode:selection'] = statusbarMode.GetId()
 
-        gridSizer.Add(item = statusbarMode,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
+        gridSizer.Add(item=statusbarMode,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
 
         #
         # Background color
         #
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Background color:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Background color:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        bgColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                    colour = self.settings.Get(group = 'display', key = 'bgcolor', subkey = 'color'),
-                                    size = globalvar.DIALOG_COLOR_SIZE)
+                      pos=(row, 0))
+        bgColor = csel.ColourSelect(
+            parent=panel,
+            id=wx.ID_ANY,
+            colour=self.settings.Get(
+                group='display',
+                key='bgcolor',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         bgColor.SetName('GetColour')
         self.winId['display:bgcolor:color'] = bgColor.GetId()
-        
-        gridSizer.Add(item = bgColor,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
-        
+
+        gridSizer.Add(item=bgColor,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
+
         #
         # Align extent to display size
         #
         row += 1
-        alignExtent = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                  label = _("Align region extent based on display size"),
-                                  name = "IsChecked")
-        alignExtent.SetValue(self.settings.Get(group = 'display', key = 'alignExtent', subkey = 'enabled'))
+        alignExtent = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Align region extent based on display size"), name="IsChecked")
+        alignExtent.SetValue(
+            self.settings.Get(
+                group='display',
+                key='alignExtent',
+                subkey='enabled'))
         self.winId['display:alignExtent:enabled'] = alignExtent.GetId()
 
-        gridSizer.Add(item = alignExtent,
-                      pos = (row, 0), span = (1, 2))
-        
+        gridSizer.Add(item=alignExtent,
+                      pos=(row, 0), span=(1, 2))
+
         #
         # Use computation resolution
         #
         row += 1
-        compResolution = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                     label = _("Constrain display resolution to computational settings"),
-                                     name = "IsChecked")
-        compResolution.SetValue(self.settings.Get(group = 'display', key = 'compResolution', subkey = 'enabled'))
+        compResolution = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Constrain display resolution to computational settings"), name="IsChecked")
+        compResolution.SetValue(
+            self.settings.Get(
+                group='display',
+                key='compResolution',
+                subkey='enabled'))
         self.winId['display:compResolution:enabled'] = compResolution.GetId()
 
-        gridSizer.Add(item = compResolution,
-                      pos = (row, 0), span = (1, 2))
+        gridSizer.Add(item=compResolution,
+                      pos=(row, 0), span=(1, 2))
 
         #
         # auto-rendering
         #
         row += 1
-        autoRendering = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                    label = _("Enable auto-rendering"),
-                                    name = "IsChecked")
-        autoRendering.SetValue(self.settings.Get(group = 'display', key = 'autoRendering', subkey = 'enabled'))
+        autoRendering = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                    label=_("Enable auto-rendering"),
+                                    name="IsChecked")
+        autoRendering.SetValue(
+            self.settings.Get(
+                group='display',
+                key='autoRendering',
+                subkey='enabled'))
         self.winId['display:autoRendering:enabled'] = autoRendering.GetId()
 
-        gridSizer.Add(item = autoRendering,
-                      pos = (row, 0), span = (1, 2))
-        
+        gridSizer.Add(item=autoRendering,
+                      pos=(row, 0), span=(1, 2))
+
         #
         # auto-zoom
         #
         row += 1
-        autoZooming = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                  label = _("Enable auto-zooming to selected map layer"),
-                                  name = "IsChecked")
-        autoZooming.SetValue(self.settings.Get(group = 'display', key = 'autoZooming', subkey = 'enabled'))
+        autoZooming = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Enable auto-zooming to selected map layer"), name="IsChecked")
+        autoZooming.SetValue(
+            self.settings.Get(
+                group='display',
+                key='autoZooming',
+                subkey='enabled'))
         self.winId['display:autoZooming:enabled'] = autoZooming.GetId()
 
-        gridSizer.Add(item = autoZooming,
-                      pos = (row, 0), span = (1, 2))
-        
+        gridSizer.Add(item=autoZooming,
+                      pos=(row, 0), span=(1, 2))
+
         #
         # mouse wheel zoom
         #
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                          label = _("Mouse wheel action:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Mouse wheel action:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        listOfModes = self.settings.Get(group = 'display', key = 'mouseWheelZoom', subkey = 'choices', settings_type='internal')
-        zoomAction = wx.Choice(parent = panel, id = wx.ID_ANY, size = (200, -1),
-                               choices = listOfModes,
-                               name = "GetSelection")
-        zoomAction.SetSelection(self.settings.Get(group = 'display', key = 'mouseWheelZoom', subkey = 'selection'))
+                      pos=(row, 0))
+        listOfModes = self.settings.Get(
+            group='display',
+            key='mouseWheelZoom',
+            subkey='choices',
+            settings_type='internal')
+        zoomAction = wx.Choice(parent=panel, id=wx.ID_ANY, size=(200, -1),
+                               choices=listOfModes,
+                               name="GetSelection")
+        zoomAction.SetSelection(
+            self.settings.Get(
+                group='display',
+                key='mouseWheelZoom',
+                subkey='selection'))
         self.winId['display:mouseWheelZoom:selection'] = zoomAction.GetId()
-        gridSizer.Add(item = zoomAction,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
+        gridSizer.Add(item=zoomAction,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                          label = _("Mouse scrolling direction:")),
-                      flag = wx.ALIGN_LEFT |
-                      wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        listOfModes = self.settings.Get(group = 'display', key = 'scrollDirection', subkey = 'choices', settings_type='internal')
-        scrollDir = wx.Choice(parent = panel, id = wx.ID_ANY, size = (200, -1),
-                               choices = listOfModes,
-                               name = "GetSelection")
-        scrollDir.SetSelection(self.settings.Get(group = 'display', key = 'scrollDirection', subkey = 'selection'))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Mouse scrolling direction:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        listOfModes = self.settings.Get(
+            group='display',
+            key='scrollDirection',
+            subkey='choices',
+            settings_type='internal')
+        scrollDir = wx.Choice(parent=panel, id=wx.ID_ANY, size=(200, -1),
+                              choices=listOfModes,
+                              name="GetSelection")
+        scrollDir.SetSelection(
+            self.settings.Get(
+                group='display',
+                key='scrollDirection',
+                subkey='selection'))
         self.winId['display:scrollDirection:selection'] = scrollDir.GetId()
-        gridSizer.Add(item = scrollDir,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
+        gridSizer.Add(item=scrollDir,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
 
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         #
         # advanced
         #
-        
+
         # see initialization of nviz GLWindow
         if globalvar.CheckWxVersion(version=[2, 8, 11]) and \
            sys.platform not in ('win32', 'darwin'):
-            box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Advanced display settings"))
+            box = wx.StaticBox(
+                parent=panel, id=wx.ID_ANY, label=" %s " %
+                _("Advanced display settings"))
             sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-    
-            gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
+
+            gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
             row = 0
-            gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                               label = _("3D view depth buffer (possible values are 16, 24, 32):")),
-                          flag = wx.ALIGN_LEFT |
-                          wx.ALIGN_CENTER_VERTICAL,
-                          pos = (row, 0))
-            value = self.settings.Get(group='display', key='nvizDepthBuffer', subkey='value')
-            textCtrl = wx.TextCtrl(parent=panel, id=wx.ID_ANY, value=str(value), validator=IntegerValidator(),
-                                   name='GetValue')
+            gridSizer.Add(
+                item=wx.StaticText(
+                    parent=panel,
+                    id=wx.ID_ANY,
+                    label=_("3D view depth buffer (possible values are 16, 24, 32):")),
+                flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            value = self.settings.Get(
+                group='display',
+                key='nvizDepthBuffer',
+                subkey='value')
+            textCtrl = wx.TextCtrl(
+                parent=panel,
+                id=wx.ID_ANY,
+                value=str(value),
+                validator=IntegerValidator(),
+                name='GetValue')
             self.winId['display:nvizDepthBuffer:value'] = textCtrl.GetId()
-            gridSizer.Add(item = textCtrl,
-                          flag = wx.ALIGN_RIGHT |
+            gridSizer.Add(item=textCtrl,
+                          flag=wx.ALIGN_RIGHT |
                           wx.ALIGN_CENTER_VERTICAL,
-                          pos = (row, 1))
-    
+                          pos=(row, 1))
+
             gridSizer.AddGrowableCol(0)
-            sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-            border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        
+            sizer.Add(
+                item=gridSizer,
+                proportion=1,
+                flag=wx.ALL | wx.EXPAND,
+                border=5)
+            border.Add(
+                item=sizer,
+                proportion=0,
+                flag=wx.ALL | wx.EXPAND,
+                border=3)
+
         panel.SetSizer(border)
-                
+
         # bindings
         fontButton.Bind(wx.EVT_BUTTON, self.OnSetFont)
         zoomAction.Bind(wx.EVT_CHOICE, self.OnEnableWheelZoom)
-        
+
         # enable/disable controls according to settings
         self.OnEnableWheelZoom(None)
-        
+
         return panel
 
     def _createCmdPage(self, notebook):
         """Create notebook page for commad dialog settings"""
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("Modules"))
-        
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("Modules"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Module dialog settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Module dialog settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         #
         # command dialog settings
         #
         row = 0
         # overwrite
-        overwrite = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                label = _("Allow output files to overwrite existing files"),
-                                name = "IsChecked")
-        overwrite.SetValue(self.settings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled'))
+        overwrite = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Allow output files to overwrite existing files"), name="IsChecked")
+        overwrite.SetValue(
+            self.settings.Get(
+                group='cmd',
+                key='overwrite',
+                subkey='enabled'))
         self.winId['cmd:overwrite:enabled'] = overwrite.GetId()
-        
-        gridSizer.Add(item = overwrite,
-                      pos = (row, 0), span = (1, 2))
+
+        gridSizer.Add(item=overwrite,
+                      pos=(row, 0), span=(1, 2))
         row += 1
         # close
-        close = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                            label = _("Close dialog when module is successfully finished"),
-                            name = "IsChecked")
-        close.SetValue(self.settings.Get(group = 'cmd', key = 'closeDlg', subkey = 'enabled'))
+        close = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_("Close dialog when module is successfully finished"),
+            name="IsChecked")
+        close.SetValue(
+            self.settings.Get(
+                group='cmd',
+                key='closeDlg',
+                subkey='enabled'))
         self.winId['cmd:closeDlg:enabled'] = close.GetId()
-        
-        gridSizer.Add(item = close,
-                      pos = (row, 0), span = (1, 2))
+
+        gridSizer.Add(item=close,
+                      pos=(row, 0), span=(1, 2))
         row += 1
         # add layer
-        add = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                          label = _("Add created map into layer tree"),
-                          name = "IsChecked")
-        add.SetValue(self.settings.Get(group = 'cmd', key = 'addNewLayer', subkey = 'enabled'))
+        add = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                          label=_("Add created map into layer tree"),
+                          name="IsChecked")
+        add.SetValue(
+            self.settings.Get(
+                group='cmd',
+                key='addNewLayer',
+                subkey='enabled'))
         self.winId['cmd:addNewLayer:enabled'] = add.GetId()
-    
-        gridSizer.Add(item = add,
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=add,
+                      pos=(row, 0), span=(1, 2))
+
         row += 1
         # interactive input
-        interactive = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                  label = _("Allow interactive input"),
-                                  name = "IsChecked")
-        interactive.SetValue(self.settings.Get(group = 'cmd', key = 'interactiveInput', subkey = 'enabled'))
+        interactive = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                  label=_("Allow interactive input"),
+                                  name="IsChecked")
+        interactive.SetValue(
+            self.settings.Get(
+                group='cmd',
+                key='interactiveInput',
+                subkey='enabled'))
         self.winId['cmd:interactiveInput:enabled'] = interactive.GetId()
-        gridSizer.Add(item = interactive,
-                      pos = (row, 0), span = (1, 2))
-        
+        gridSizer.Add(item=interactive,
+                      pos=(row, 0), span=(1, 2))
+
         row += 1
         # verbosity
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Verbosity level:")),
-                      flag = wx.ALIGN_LEFT |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Verbosity level:")),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        verbosity = wx.Choice(parent = panel, id = wx.ID_ANY, size = (200, -1),
-                              choices = self.settings.Get(group = 'cmd', key = 'verbosity', subkey = 'choices', settings_type='internal'),
-                              name = "GetStringSelection")
-        verbosity.SetStringSelection(self.settings.Get(group = 'cmd', key = 'verbosity', subkey = 'selection'))
+                      pos=(row, 0))
+        verbosity = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(200, -1),
+            choices=self.settings.Get(
+                group='cmd', key='verbosity', subkey='choices',
+                settings_type='internal'),
+            name="GetStringSelection")
+        verbosity.SetStringSelection(
+            self.settings.Get(
+                group='cmd',
+                key='verbosity',
+                subkey='selection'))
         self.winId['cmd:verbosity:selection'] = verbosity.GetId()
-        
-        gridSizer.Add(item = verbosity,
-                      pos = (row, 1), flag = wx.ALIGN_RIGHT)
-        
+
+        gridSizer.Add(item=verbosity,
+                      pos=(row, 1), flag=wx.ALIGN_RIGHT)
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createLayersPage(self, notebook):
         """Create notebook page for layer settings"""
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("Layers"))
-        
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("Layers"))
+
         border = wx.BoxSizer(wx.VERTICAL)
         #
         # raster settings
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Default raster settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Default raster settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
         #
         # raster overlay
         #
         row = 0
-        rasterOpaque = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                    label = _("Make null cells opaque"),
-                                    name = 'IsChecked')
-        rasterOpaque.SetValue(self.settings.Get(group = 'rasterLayer', key = 'opaque', subkey = 'enabled'))
+        rasterOpaque = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                   label=_("Make null cells opaque"),
+                                   name='IsChecked')
+        rasterOpaque.SetValue(
+            self.settings.Get(
+                group='rasterLayer',
+                key='opaque',
+                subkey='enabled'))
         self.winId['rasterLayer:opaque:enabled'] = rasterOpaque.GetId()
-        
-        gridSizer.Add(item = rasterOpaque,
-                      pos = (row, 0), span = (1, 2))
+
+        gridSizer.Add(item=rasterOpaque,
+                      pos=(row, 0), span=(1, 2))
 
         # default color table
         row += 1
-        rasterCTCheck = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                    label = _("Default color table"),
-                                    name = 'IsChecked')
-        rasterCTCheck.SetValue(self.settings.Get(group = 'rasterLayer', key = 'colorTable', subkey = 'enabled'))
+        rasterCTCheck = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                    label=_("Default color table"),
+                                    name='IsChecked')
+        rasterCTCheck.SetValue(
+            self.settings.Get(
+                group='rasterLayer',
+                key='colorTable',
+                subkey='enabled'))
         self.winId['rasterLayer:colorTable:enabled'] = rasterCTCheck.GetId()
         rasterCTCheck.Bind(wx.EVT_CHECKBOX, self.OnCheckColorTable)
-        
-        gridSizer.Add(item = rasterCTCheck, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 0))
-        
-        rasterCTName = ColorTablesComboBox(parent=panel, size=globalvar.DIALOG_COMBOBOX_SIZE,
-                                           choices=GetColorTables(),
-                                           name="GetStringSelection")
-        rasterCTName.SetStringSelection(self.settings.Get(group = 'rasterLayer', key = 'colorTable', subkey = 'selection'))
+
+        gridSizer.Add(item=rasterCTCheck, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0))
+
+        rasterCTName = ColorTablesComboBox(
+            parent=panel,
+            size=globalvar.DIALOG_COMBOBOX_SIZE,
+            choices=GetColorTables(),
+            name="GetStringSelection")
+        rasterCTName.SetStringSelection(
+            self.settings.Get(
+                group='rasterLayer',
+                key='colorTable',
+                subkey='selection'))
         self.winId['rasterLayer:colorTable:selection'] = rasterCTName.GetId()
         if not rasterCTCheck.IsChecked():
             rasterCTName.Enable(False)
-        
-        gridSizer.Add(item = rasterCTName,
-                      pos = (row, 1))
-        
+
+        gridSizer.Add(item=rasterCTName,
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         #
         # vector settings
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Default vector settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Default vector settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.FlexGridSizer (cols = 7, hgap = 10, vgap = 3)
-        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Display:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
+
+        gridSizer = wx.FlexGridSizer(cols=7, hgap=10, vgap=3)
+
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Display:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         for type in ('point', 'line', 'centroid', 'boundary',
                      'area', 'face'):
-            chkbox = wx.CheckBox(parent = panel, label = type)
-            checked = self.settings.Get(group = 'vectorLayer', key = 'showType',
-                                        subkey = [type, 'enabled'])
+            chkbox = wx.CheckBox(parent=panel, label=type)
+            checked = self.settings.Get(group='vectorLayer', key='showType',
+                                        subkey=[type, 'enabled'])
             chkbox.SetValue(checked)
-            self.winId['vectorLayer:showType:%s:enabled' % type] = chkbox.GetId()
-            gridSizer.Add(item = chkbox)
+            self.winId[
+                'vectorLayer:showType:%s:enabled' %
+                type] = chkbox.GetId()
+            gridSizer.Add(item=chkbox)
 
-        sizer.Add(item = gridSizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        sizer.Add(
+            item=gridSizer,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
 
         row = col = 0
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         # feature color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Feature color:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-        featureColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                         colour = self.settings.Get(group = 'vectorLayer',
-                                                                    key = 'featureColor',
-                                                                    subkey = 'color'),
-                                         size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Feature color:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        featureColor = csel.ColourSelect(
+            parent=panel,
+            id=wx.ID_ANY,
+            colour=self.settings.Get(
+                group='vectorLayer',
+                key='featureColor',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         featureColor.SetName('GetColour')
         self.winId['vectorLayer:featureColor:color'] = featureColor.GetId()
-        gridSizer.Add(item = featureColor, pos = (row, col + 2), flag = wx.ALIGN_RIGHT)
-        
-        transpFeature = wx.CheckBox(parent  = panel, id = wx.ID_ANY,
-                                    label = _("Transparent"), name = "IsChecked")
-        transpFeature.SetValue(self.settings.Get(group = 'vectorLayer', key = 'featureColor',
-                                                     subkey =  ['transparent', 'enabled']))
-        self.winId['vectorLayer:featureColor:transparent:enabled'] = transpFeature.GetId()
-        gridSizer.Add(item = transpFeature, pos = (row, col + 1), flag = wx.ALIGN_CENTER_VERTICAL)
-
+        gridSizer.Add(
+            item=featureColor,
+            pos=(
+                row,
+                col + 2),
+            flag=wx.ALIGN_RIGHT)
+
+        transpFeature = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                    label=_("Transparent"), name="IsChecked")
+        transpFeature.SetValue(
+            self.settings.Get(
+                group='vectorLayer',
+                key='featureColor',
+                subkey=[
+                    'transparent',
+                    'enabled']))
+        self.winId[
+            'vectorLayer:featureColor:transparent:enabled'] = transpFeature.GetId()
+        gridSizer.Add(
+            item=transpFeature,
+            pos=(
+                row,
+                col + 1),
+            flag=wx.ALIGN_CENTER_VERTICAL)
 
         # area fill color
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Area fill color:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, col))
-        fillColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                      colour = self.settings.Get(group = 'vectorLayer',
-                                                                 key = 'areaFillColor',
-                                                                 subkey = 'color'),
-                                      size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Area fill color:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, col))
+        fillColor = csel.ColourSelect(
+            parent=panel,
+            id=wx.ID_ANY,
+            colour=self.settings.Get(
+                group='vectorLayer',
+                key='areaFillColor',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         fillColor.SetName('GetColour')
         self.winId['vectorLayer:areaFillColor:color'] = fillColor.GetId()
-        gridSizer.Add(item = fillColor, pos = (row, col + 2), flag = wx.ALIGN_RIGHT)
-
-        transpArea = wx.CheckBox(parent  = panel, id = wx.ID_ANY,
-                                 label = _("Transparent"), name = "IsChecked")
-        transpArea.SetValue(self.settings.Get(group = 'vectorLayer', key = 'areaFillColor',
-                                              subkey = ['transparent', 'enabled']))
-        self.winId['vectorLayer:areaFillColor:transparent:enabled'] = transpArea.GetId()
-        gridSizer.Add(item = transpArea, pos = (row, col + 1), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=fillColor, pos=(row, col + 2), flag=wx.ALIGN_RIGHT)
+
+        transpArea = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                 label=_("Transparent"), name="IsChecked")
+        transpArea.SetValue(
+            self.settings.Get(
+                group='vectorLayer',
+                key='areaFillColor',
+                subkey=[
+                    'transparent',
+                    'enabled']))
+        self.winId[
+            'vectorLayer:areaFillColor:transparent:enabled'] = transpArea.GetId()
+        gridSizer.Add(
+            item=transpArea, pos=(row, col + 1),
+            flag=wx.ALIGN_CENTER_VERTICAL)
 
         # line
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Line width:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, col))
-        hlWidth = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (50, -1),
-                              initial = self.settings.Get(group = 'vectorLayer', key = 'line', subkey = 'width'),
-                              min = 1, max = 1e6, name = "GetValue")
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Line width:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, col))
+        hlWidth = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(50, -1),
+            initial=self.settings.Get(
+                group='vectorLayer', key='line', subkey='width'),
+            min=1, max=1e6, name="GetValue")
         self.winId['vectorLayer:line:width'] = hlWidth.GetId()
-        gridSizer.Add(item = hlWidth, pos = (row, col + 1), span = (1, 2), flag = wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=hlWidth, pos=(row, col + 1),
+            span=(1, 2),
+            flag=wx.ALIGN_RIGHT)
 
         # symbol
         row = 0
         col = 4
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Symbol size:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, col))
-        ptSize = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (50, -1),
-                              initial = self.settings.Get(group = 'vectorLayer', key = 'point', subkey = 'size'),
-                              min = 1, max = 1e6, name = "GetValue")
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Symbol size:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, col))
+        ptSize = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(50, -1),
+            initial=self.settings.Get(
+                group='vectorLayer', key='point', subkey='size'),
+            min=1, max=1e6, name="GetValue")
         self.winId['vectorLayer:point:size'] = ptSize.GetId()
-        gridSizer.Add(item = ptSize, pos = (row, col + 2), flag = wx.ALIGN_RIGHT)
+        gridSizer.Add(item=ptSize, pos=(row, col + 2), flag=wx.ALIGN_RIGHT)
 
         row += 1
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Symbol:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, col))
-        symbolPath = self.settings.Get(group = 'vectorLayer', key = 'point', subkey = 'symbol')
-        symbolLabel = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                    label = symbolPath, name = 'GetLabel')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Symbol:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, col))
+        symbolPath = self.settings.Get(
+            group='vectorLayer', key='point', subkey='symbol')
+        symbolLabel = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                    label=symbolPath, name='GetLabel')
         symbolLabel.SetMinSize((150, -1))
         self.winId['vectorLayer:point:symbol'] = symbolLabel.GetId()
-        gridSizer.Add(item = symbolLabel, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT, pos = (row, col + 1))
-
-        bitmap = wx.Bitmap(os.path.join(globalvar.SYMBDIR, symbolPath) + '.png')
-        bb = wx.BitmapButton(parent = panel, id = wx.ID_ANY, bitmap = bitmap, name = "symbolButton")
+        gridSizer.Add(
+            item=symbolLabel,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            pos=(
+                row,
+                col + 1))
+
+        bitmap = wx.Bitmap(
+            os.path.join(
+                globalvar.SYMBDIR,
+                symbolPath) + '.png')
+        bb = wx.BitmapButton(
+            parent=panel,
+            id=wx.ID_ANY,
+            bitmap=bitmap,
+            name="symbolButton")
         bb.Bind(wx.EVT_BUTTON, self.OnSetSymbol)
-        gridSizer.Add(item = bb, pos = (row, col + 2))
+        gridSizer.Add(item=bb, pos=(row, col + 2))
 
         gridSizer.AddGrowableCol(0)
         gridSizer.AddGrowableCol(3)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createAttributeManagerPage(self, notebook):
         """Create notebook page for 'Attribute Table Manager' settings"""
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("Attributes"))
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("Attributes"))
 
         pageSizer = wx.BoxSizer(wx.VERTICAL)
 
         #
         # highlighting
         #
-        highlightBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                                    label = " %s " % _("Highlight selected features"))
+        highlightBox = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Highlight selected features"))
         highlightSizer = wx.StaticBoxSizer(highlightBox, wx.VERTICAL)
 
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
-        
+
         # color
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Color:"))
-        hlColor = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                    colour = self.settings.Get(group = 'atm', key = 'highlight', subkey = 'color'),
-                                    size = globalvar.DIALOG_COLOR_SIZE)
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Color:"))
+        hlColor = csel.ColourSelect(
+            parent=panel,
+            id=wx.ID_ANY,
+            colour=self.settings.Get(
+                group='atm',
+                key='highlight',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         hlColor.SetName('GetColour')
         self.winId['atm:highlight:color'] = hlColor.GetId()
 
-        flexSizer.Add(label, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(hlColor, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+        flexSizer.Add(label, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            hlColor,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
 
         # width
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Line width (in pixels):"))
-        hlWidth = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (50, -1),
-                              initial = self.settings.Get(group = 'atm', key = 'highlight',subkey = 'width'),
-                              min = 1, max = 1e6)
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Line width (in pixels):"))
+        hlWidth = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(50, -1),
+            initial=self.settings.Get(
+                group='atm', key='highlight', subkey='width'),
+            min=1, max=1e6)
         self.winId['atm:highlight:width'] = hlWidth.GetId()
 
-        flexSizer.Add(label, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(hlWidth, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+        flexSizer.Add(label, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            hlWidth,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
 
         # auto
-        autoHighlight = wx.CheckBox(parent = panel, id = wx.ID_ANY, label = _("Automatically hightlight selected features in map display"))
-        autoHighlight.SetValue(self.settings.Get(group = 'atm', key = 'highlight', subkey = 'auto'))
+        autoHighlight = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Automatically hightlight selected features in map display"))
+        autoHighlight.SetValue(
+            self.settings.Get(
+                group='atm',
+                key='highlight',
+                subkey='auto'))
         self.winId['atm:highlight:auto'] = autoHighlight.GetId()
-        
-        flexSizer.Add(autoHighlight, proportion = 1)
-        
-        highlightSizer.Add(item = flexSizer,
-                           proportion = 0,
-                           flag = wx.ALL | wx.EXPAND,
-                           border = 5)
 
-        pageSizer.Add(item = highlightSizer,
-                      proportion = 0,
-                      flag = wx.ALL | wx.EXPAND,
-                      border = 5)
+        flexSizer.Add(autoHighlight, proportion=1)
+
+        highlightSizer.Add(item=flexSizer,
+                           proportion=0,
+                           flag=wx.ALL | wx.EXPAND,
+                           border=5)
+
+        pageSizer.Add(item=highlightSizer,
+                      proportion=0,
+                      flag=wx.ALL | wx.EXPAND,
+                      border=5)
 
         #
         # data browser related settings
         #
-        dataBrowserBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                                    label = " %s " % _("Data browser"))
+        dataBrowserBox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                                      label=" %s " % _("Data browser"))
         dataBrowserSizer = wx.StaticBoxSizer(dataBrowserBox, wx.VERTICAL)
 
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Left mouse double click:"))
-        leftDbClick = wx.Choice(parent = panel, id = wx.ID_ANY,
-                                choices = self.settings.Get(group = 'atm', key = 'leftDbClick', subkey = 'choices', settings_type='internal'),
-                                name = "GetSelection")
-        leftDbClick.SetSelection(self.settings.Get(group = 'atm', key = 'leftDbClick', subkey = 'selection'))
+        label = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Left mouse double click:"))
+        leftDbClick = wx.Choice(
+            parent=panel,
+            id=wx.ID_ANY,
+            choices=self.settings.Get(
+                group='atm',
+                key='leftDbClick',
+                subkey='choices',
+                settings_type='internal'),
+            name="GetSelection")
+        leftDbClick.SetSelection(
+            self.settings.Get(
+                group='atm',
+                key='leftDbClick',
+                subkey='selection'))
         self.winId['atm:leftDbClick:selection'] = leftDbClick.GetId()
 
-        flexSizer.Add(label, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(leftDbClick, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+        flexSizer.Add(label, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            leftDbClick,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
 
         # encoding
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                              label = _("Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"))
-        encoding = wx.TextCtrl(parent = panel, id = wx.ID_ANY,
-                               value = self.settings.Get(group = 'atm', key = 'encoding', subkey = 'value'),
-                               name = "GetValue", size = (200, -1))
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_(
+            "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"))
+        encoding = wx.TextCtrl(
+            parent=panel, id=wx.ID_ANY, value=self.settings.Get(
+                group='atm', key='encoding', subkey='value'), name="GetValue", size=(
+                200, -1))
         self.winId['atm:encoding:value'] = encoding.GetId()
 
-        flexSizer.Add(label, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(encoding, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+        flexSizer.Add(label, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            encoding,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
 
         # ask on delete record
-        askOnDeleteRec = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                     label = _("Ask when deleting data record(s) from table"),
-                                     name = 'IsChecked')
-        askOnDeleteRec.SetValue(self.settings.Get(group = 'atm', key = 'askOnDeleteRec', subkey = 'enabled'))
+        askOnDeleteRec = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Ask when deleting data record(s) from table"), name='IsChecked')
+        askOnDeleteRec.SetValue(
+            self.settings.Get(
+                group='atm',
+                key='askOnDeleteRec',
+                subkey='enabled'))
         self.winId['atm:askOnDeleteRec:enabled'] = askOnDeleteRec.GetId()
 
-        flexSizer.Add(askOnDeleteRec, proportion = 0)
+        flexSizer.Add(askOnDeleteRec, proportion=0)
 
-        dataBrowserSizer.Add(item = flexSizer,
-                           proportion = 0,
-                           flag = wx.ALL | wx.EXPAND,
-                           border = 5)
+        dataBrowserSizer.Add(item=flexSizer,
+                             proportion=0,
+                             flag=wx.ALL | wx.EXPAND,
+                             border=5)
 
-        pageSizer.Add(item = dataBrowserSizer,
-                      proportion = 0,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
-                      border = 3)
+        pageSizer.Add(item=dataBrowserSizer,
+                      proportion=0,
+                      flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+                      border=3)
 
         #
         # create table
         #
-        createTableBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                                    label = " %s " % _("Create table"))
+        createTableBox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                                      label=" %s " % _("Create table"))
         createTableSizer = wx.StaticBoxSizer(createTableBox, wx.VERTICAL)
 
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
 
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                              label = _("Key column:"))
-        keyColumn = wx.TextCtrl(parent = panel, id = wx.ID_ANY,
-                                size = (250, -1))
-        keyColumn.SetValue(self.settings.Get(group = 'atm', key = 'keycolumn', subkey = 'value'))
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                              label=_("Key column:"))
+        keyColumn = wx.TextCtrl(parent=panel, id=wx.ID_ANY,
+                                size=(250, -1))
+        keyColumn.SetValue(
+            self.settings.Get(
+                group='atm',
+                key='keycolumn',
+                subkey='value'))
         self.winId['atm:keycolumn:value'] = keyColumn.GetId()
-        
-        flexSizer.Add(label, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(keyColumn, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
-
-        createTableSizer.Add(item = flexSizer,
-                             proportion = 0,
-                             flag = wx.ALL | wx.EXPAND,
-                             border = 5)
-
-        pageSizer.Add(item = createTableSizer,
-                      proportion = 0,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
-                      border = 3)
-        
+
+        flexSizer.Add(label, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            keyColumn,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+
+        createTableSizer.Add(item=flexSizer,
+                             proportion=0,
+                             flag=wx.ALL | wx.EXPAND,
+                             border=5)
+
+        pageSizer.Add(item=createTableSizer,
+                      proportion=0,
+                      flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+                      border=3)
+
         panel.SetSizer(pageSizer)
 
         return panel
 
     def _createProjectionPage(self, notebook):
         """Create notebook page for workspace settings"""
-        panel = SP.ScrolledPanel(parent = notebook, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
-        notebook.AddPage(page = panel, text = _("Projection"))
-        
+        panel = SP.ScrolledPanel(parent=notebook, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
+        notebook.AddPage(page=panel, text=_("Projection"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         #
         # projections statusbar settings
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Projection statusbar settings"))
+        box = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Projection statusbar settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         # note for users expecting on-the-fly data reprojection
         row = 0
-        note0 = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                             label = _("\nNote: This only controls the coordinates "
-                                       "displayed in the lower-left of the Map "
-                                       "Display\nwindow's status bar. It is purely "
-                                       "cosmetic and does not affect the working "
-                                       "location's\nprojection in any way. You will "
-                                       "need to enable the Projection check box in "
-                                       "the drop-down\nmenu located at the bottom "
-                                       "of the Map Display window.\n"))
-        gridSizer.Add(item = note0,
-                      span = (1, 2),
-                      pos = (row, 0))
+        note0 = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, label=_(
+                "\nNote: This only controls the coordinates "
+                "displayed in the lower-left of the Map "
+                "Display\nwindow's status bar. It is purely "
+                "cosmetic and does not affect the working "
+                "location's\nprojection in any way. You will "
+                "need to enable the Projection check box in "
+                "the drop-down\nmenu located at the bottom "
+                "of the Map Display window.\n"))
+        gridSizer.Add(item=note0,
+                      span=(1, 2),
+                      pos=(row, 0))
 
         # epsg
         row += 1
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                              label = _("EPSG code:"))
-        epsgCode = wx.ComboBox(parent = panel, id = wx.ID_ANY,
-                               name = "GetValue",
-                               size = (150, -1))
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                              label=_("EPSG code:"))
+        epsgCode = wx.ComboBox(parent=panel, id=wx.ID_ANY,
+                               name="GetValue",
+                               size=(150, -1))
         self.epsgCodeDict = dict()
-        epsgCode.SetValue(str(self.settings.Get(group = 'projection', key = 'statusbar', subkey = 'epsg')))
+        epsgCode.SetValue(str(self.settings.Get(
+            group='projection', key='statusbar', subkey='epsg')))
         self.winId['projection:statusbar:epsg'] = epsgCode.GetId()
-        
-        gridSizer.Add(item = label,
-                      pos = (row, 0),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = epsgCode,
-                      pos = (row, 1), span = (1, 2))
+
+        gridSizer.Add(item=label,
+                      pos=(row, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=epsgCode,
+                      pos=(row, 1), span=(1, 2))
 
         # proj
         row += 1
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                              label = _("Proj.4 string (required):"))
-        projString = wx.TextCtrl(parent = panel, id = wx.ID_ANY,
-                                 value = self.settings.Get(group = 'projection', key = 'statusbar', subkey = 'proj4'),
-                                 name = "GetValue", size = (400, -1))
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                              label=_("Proj.4 string (required):"))
+        projString = wx.TextCtrl(
+            parent=panel, id=wx.ID_ANY, value=self.settings.Get(
+                group='projection', key='statusbar', subkey='proj4'), name="GetValue", size=(
+                400, -1))
         self.winId['projection:statusbar:proj4'] = projString.GetId()
 
-        gridSizer.Add(item = label,
-                      pos = (row, 0),
-                      flag  =  wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = projString,
-                      pos = (row, 1), span = (1, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
+        gridSizer.Add(item=label,
+                      pos=(row, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=projString,
+                      pos=(row, 1), span=(1, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # epsg file
         row += 1
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                              label = _("EPSG file:"))
-        projFile = wx.TextCtrl(parent = panel, id = wx.ID_ANY,
-                               value  =  self.settings.Get(group = 'projection', key = 'statusbar', subkey = 'projFile'),
-                               name = "GetValue", size = (400, -1))
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                              label=_("EPSG file:"))
+        projFile = wx.TextCtrl(
+            parent=panel, id=wx.ID_ANY, value=self.settings.Get(
+                group='projection', key='statusbar', subkey='projFile'),
+            name="GetValue", size=(400, -1))
         self.winId['projection:statusbar:projFile'] = projFile.GetId()
-        gridSizer.Add(item = label,
-                      pos = (row, 0),
-                      flag  =  wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = projFile,
-                      pos = (row, 1),
-                      flag  =  wx.ALIGN_CENTER_VERTICAL)
-        
+        gridSizer.Add(item=label,
+                      pos=(row, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=projFile,
+                      pos=(row, 1),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # note + button
         row += 1
-        note = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                             label = _("Load EPSG codes (be patient), enter EPSG code or "
-                                       "insert Proj.4 string directly."))
-        gridSizer.Add(item = note,
-                      span = (1, 2),
-                      pos = (row, 0))
+        note = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, label=_(
+                "Load EPSG codes (be patient), enter EPSG code or "
+                "insert Proj.4 string directly."))
+        gridSizer.Add(item=note,
+                      span=(1, 2),
+                      pos=(row, 0))
 
         row += 1
-        epsgLoad = wx.Button(parent = panel, id = wx.ID_ANY,
-                             label = _("&Load EPSG codes"))
-        gridSizer.Add(item = epsgLoad,
-                      flag = wx.ALIGN_RIGHT,
-                      pos = (row, 1))
-        
+        epsgLoad = wx.Button(parent=panel, id=wx.ID_ANY,
+                             label=_("&Load EPSG codes"))
+        gridSizer.Add(item=epsgLoad,
+                      flag=wx.ALIGN_RIGHT,
+                      pos=(row, 1))
+
         gridSizer.AddGrowableCol(1)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
 
         #
         # format
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Coordinates format"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Coordinates format"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer (hgap = 3, vgap = 3)
+
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
         # ll format
-        ll = wx.RadioBox(parent = panel, id = wx.ID_ANY,
-                         label = " %s " % _("Lat/long projections"),
-                         choices = ["DMS", "DEG"],
-                         name = "GetStringSelection")
+        ll = wx.RadioBox(parent=panel, id=wx.ID_ANY,
+                         label=" %s " % _("Lat/long projections"),
+                         choices=["DMS", "DEG"],
+                         name="GetStringSelection")
         self.winId['projection:format:ll'] = ll.GetId()
-        if self.settings.Get(group = 'projection', key = 'format', subkey = 'll') == 'DMS':
+        if self.settings.Get(group='projection',
+                             key='format', subkey='ll') == 'DMS':
             ll.SetSelection(0)
         else:
             ll.SetSelection(1)
-        
+
         # precision
-        precision =  wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                                 min = 0, max = 12,
-                                 name = "GetValue")
-        precision.SetValue(int(self.settings.Get(group = 'projection', key = 'format', subkey = 'precision')))
+        precision = wx.SpinCtrl(parent=panel, id=wx.ID_ANY,
+                                min=0, max=12,
+                                name="GetValue")
+        precision.SetValue(int(self.settings.Get(
+            group='projection', key='format', subkey='precision')))
         self.winId['projection:format:precision'] = precision.GetId()
-                
-        gridSizer.Add(item = ll,
-                      pos = (row, 0))
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Precision:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
-                      border = 20,
-                      pos = (row, 1))
-        gridSizer.Add(item = precision,
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 2))
-        
-        
+
+        gridSizer.Add(item=ll,
+                      pos=(row, 0))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Precision:")),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
+                      border=20,
+                      pos=(row, 1))
+        gridSizer.Add(item=precision,
+                      flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 2))
+
         gridSizer.AddGrowableCol(2)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+
         panel.SetSizer(border)
 
         # bindings
         epsgLoad.Bind(wx.EVT_BUTTON, self.OnLoadEpsgCodes)
         epsgCode.Bind(wx.EVT_COMBOBOX, self.OnSetEpsgCode)
         epsgCode.Bind(wx.EVT_TEXT_ENTER, self.OnSetEpsgCode)
-        
+
         return panel
 
     def _updateSettings(self):
@@ -1345,7 +1799,8 @@ class PreferencesDialog(PreferencesBaseDialog):
         #
         # update default window dimension
         #
-        if self.settings.Get(group = 'general', key = 'defWindowPos', subkey = 'enabled') is True:
+        if self.settings.Get(
+                group='general', key='defWindowPos', subkey='enabled') is True:
             dim = ''
             # layer manager
             pos = self.parent.GetPosition()
@@ -1353,49 +1808,68 @@ class PreferencesDialog(PreferencesBaseDialog):
             dim = '%d,%d,%d,%d' % (pos[0], pos[1], size[0], size[1])
             # opened displays
             for mapdisp in self._giface.GetAllMapDisplays():
-                pos  = mapdisp.GetPosition()
+                pos = mapdisp.GetPosition()
                 size = mapdisp.GetSize()
 
                 # window size must be larger than zero, not minimized
                 if not mapdisp.IsIconized() and (size[0] > 0 and size[1] > 0):
                     dim += ',%d,%d,%d,%d' % (pos[0], pos[1], size[0], size[1])
 
-            self.settings.Set(group = 'general', key = 'defWindowPos', subkey = 'dim', value = dim)
+            self.settings.Set(
+                group='general',
+                key='defWindowPos',
+                subkey='dim',
+                value=dim)
 
         return True
 
     def OnCheckColorTable(self, event):
         """Set/unset default color table"""
-        win = self.FindWindowById(self.winId['rasterLayer:colorTable:selection'])
+        win = self.FindWindowById(
+            self.winId['rasterLayer:colorTable:selection'])
         if event.IsChecked():
             win.Enable()
         else:
             win.Enable(False)
-        
+
     def OnLoadEpsgCodes(self, event):
         """Load EPSG codes from the file"""
         win = self.FindWindowById(self.winId['projection:statusbar:projFile'])
         path = win.GetValue()
+        epsgCombo = self.FindWindowById(
+            self.winId['projection:statusbar:epsg'])
         wx.BeginBusyCursor()
-        self.epsgCodeDict = ReadEpsgCodes(path)
+        try:
+            self.epsgCodeDict = ReadEpsgCodes(path)
+        except OpenError as e:
+            wx.EndBusyCursor()
+            epsgCombo.SetItems([])
+            GError(
+                parent=self,
+                message=_("Unable to read EPGS codes: {}").format(e),
+                showTraceback=False)
+            return
 
-        epsgCombo = self.FindWindowById(self.winId['projection:statusbar:epsg'])
-        if type(self.epsgCodeDict) == type(''):
-            wx.MessageBox(parent = self,
-                          message = _("Unable to read EPSG codes: %s") % self.epsgCodeDict,
-                          caption = _("Error"),  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+        if isinstance(self.epsgCodeDict, type('')):
+            wx.MessageBox(
+                parent=self,
+                message=_("Unable to read EPSG codes: %s") %
+                self.epsgCodeDict,
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             self.epsgCodeDict = dict()
             epsgCombo.SetItems([])
             epsgCombo.SetValue('')
-            self.FindWindowById(self.winId['projection:statusbar:proj4']).SetValue('')
+            self.FindWindowById(
+                self.winId['projection:statusbar:proj4']).SetValue('')
             wx.EndBusyCursor()
             return
-        
+
         choices = map(str, sorted(self.epsgCodeDict.keys()))
 
         epsgCombo.SetItems(choices)
         wx.EndBusyCursor()
-        code = 4326 # default
+        code = 4326  # default
         win = self.FindWindowById(self.winId['projection:statusbar:proj4'])
         if code in self.epsgCodeDict:
             epsgCombo.SetStringSelection(str(code))
@@ -1404,43 +1878,52 @@ class PreferencesDialog(PreferencesBaseDialog):
             epsgCombo.SetSelection(0)
             code = int(epsgCombo.GetStringSelection())
             win.SetValue(self.epsgCodeDict[code][1].replace('<>', '').strip())
-    
+
     def OnSetEpsgCode(self, event):
         """EPSG code selected"""
         winCode = self.FindWindowById(event.GetId())
         win = self.FindWindowById(self.winId['projection:statusbar:proj4'])
         if not self.epsgCodeDict:
-            wx.MessageBox(parent = self,
-                          message = _("EPSG code %s not found") % event.GetString(),
-                          caption = _("Error"),  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+            wx.MessageBox(
+                parent=self,
+                message=_("EPSG code %s not found") %
+                event.GetString(),
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             winCode.SetValue('')
             win.SetValue('')
-        
+
         try:
             code = int(event.GetString())
         except ValueError:
-            wx.MessageBox(parent = self,
-                          message = _("EPSG code %s not found") % str(code),
-                          caption = _("Error"),  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+            wx.MessageBox(
+                parent=self,
+                message=_("EPSG code %s not found") %
+                str(code),
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             winCode.SetValue('')
             win.SetValue('')
-        
+
         try:
             win.SetValue(self.epsgCodeDict[code][1].replace('<>', '').strip())
         except KeyError:
-            wx.MessageBox(parent = self,
-                          message = _("EPSG code %s not found") % str(code),
-                          caption = _("Error"),  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+            wx.MessageBox(
+                parent=self,
+                message=_("EPSG code %s not found") %
+                str(code),
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             winCode.SetValue('')
             win.SetValue('')
-        
+
     def OnSetFont(self, event):
         """'Set font' button pressed"""
-        dlg = DefaultFontDialog(parent = self,
-                                title = _('Select default display font'),
-                                style = wx.DEFAULT_DIALOG_STYLE,
-                                type = 'font')
-        
+        dlg = DefaultFontDialog(parent=self,
+                                title=_('Select default display font'),
+                                style=wx.DEFAULT_DIALOG_STYLE,
+                                type='font')
+
         if dlg.ShowModal() == wx.ID_OK:
             # set default font and encoding environmental variables
             if dlg.font:
@@ -1449,20 +1932,21 @@ class PreferencesDialog(PreferencesBaseDialog):
                     self.settings.Set(group='display', value=dlg.font,
                                       key='font', subkey='type')
                 except UnicodeEncodeError:
-                    GError(parent=self, message=_("Failed to set default display font. "
-                                                  "Try different font."),
-                           showTraceback=True)
+                    GError(
+                        parent=self, message=_(
+                            "Failed to set default display font. "
+                            "Try different font."), showTraceback=True)
                     dlg.Destroy()
                     return
 
             if dlg.encoding and \
                     dlg.encoding != "ISO-8859-1":
                 os.environ["GRASS_ENCODING"] = dlg.encoding
-                self.settings.Set(group = 'display', value = dlg.encoding,
-                                  key = 'font', subkey = 'encoding')
-                
+                self.settings.Set(group='display', value=dlg.encoding,
+                                  key='font', subkey='encoding')
+
         dlg.Destroy()
-        
+
         event.Skip()
 
     def OnSetOutputFontCustomDialog(self, event):
@@ -1485,32 +1969,45 @@ class PreferencesDialog(PreferencesBaseDialog):
         """'Set output font' button pressed
         """
 
-        type = self.settings.Get(group = 'appearance', key = 'outputfont', subkey = 'type')   
-                           
-        size = self.settings.Get(group = 'appearance', key = 'outputfont', subkey = 'size')
-        if size == None or size == 0: size = 11
+        type = self.settings.Get(
+            group='appearance',
+            key='outputfont',
+            subkey='type')
+
+        size = self.settings.Get(
+            group='appearance',
+            key='outputfont',
+            subkey='size')
+        if size is None or size == 0:
+            size = 11
         size = float(size)
-        if type == None or type == '': type = 'Courier'
+        if type is None or type == '':
+            type = 'Courier'
 
-        outfont = wx.Font(size, wx.FONTFAMILY_MODERN, wx.NORMAL, wx.FONTWEIGHT_NORMAL, faceName=type)
+        outfont = wx.Font(
+            size,
+            wx.FONTFAMILY_MODERN,
+            wx.NORMAL,
+            wx.FONTWEIGHT_NORMAL,
+            faceName=type)
 
         fontdata = wx.FontData()
         fontdata.EnableEffects(True)
         fontdata.SetColour('black')
         fontdata.SetInitialFont(outfont)
-        
+
         dlg = wx.FontDialog(self, fontdata)
-        
+
         'FIXME: native font dialog does not initialize with current font'
 
         if dlg.ShowModal() == wx.ID_OK:
             outdata = dlg.GetFontData()
             font = outdata.GetChosenFont()
 
-            self.settings.Set(group = 'appearance', value = font.GetFaceName(),
-                                  key = 'outputfont', subkey = 'type')
-            self.settings.Set(group = 'appearance', value = font.GetPointSize(),
-                                  key = 'outputfont', subkey = 'size')
+            self.settings.Set(group='appearance', value=font.GetFaceName(),
+                              key='outputfont', subkey='type')
+            self.settings.Set(group='appearance', value=font.GetPointSize(),
+                              key='outputfont', subkey='size')
         dlg.Destroy()
 
         event.Skip()
@@ -1520,8 +2017,8 @@ class PreferencesDialog(PreferencesBaseDialog):
         winId = self.winId['vectorLayer:point:symbol']
         label = self.FindWindowById(winId)
         bb = self.FindWindowByName('symbolButton')
-        dlg = SymbolDialog(self, symbolPath = globalvar.SYMBDIR,
-                           currentSymbol = label.GetLabel())
+        dlg = SymbolDialog(self, symbolPath=globalvar.SYMBDIR,
+                           currentSymbol=label.GetLabel())
         if dlg.ShowModal() == wx.ID_OK:
             img = dlg.GetSelectedSymbolPath()
             label.SetLabel(dlg.GetSelectedSymbolName())
@@ -1537,201 +2034,43 @@ class PreferencesDialog(PreferencesBaseDialog):
             enable = True
         scrollId = self.winId['display:scrollDirection:selection']
         self.FindWindowById(scrollId).Enable(enable)
-        
-class DefaultFontDialog(wx.Dialog):
-    """
-    Opens a file selection dialog to select default font
-    to use in all GRASS displays
-    """
-    def __init__(self, parent, title, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE |
-                 wx.RESIZE_BORDER,
-                 settings = UserSettings,
-                 type = 'font'):
-        
-        self.settings = settings
-        self.type = type
-        
-        wx.Dialog.__init__(self, parent, id, title, style = style)
-
-        panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.fontlist = self.GetFonts()
-        
-        border = wx.BoxSizer(wx.VERTICAL)
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Font settings"))
-        sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-
-        gridSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-
-        label = wx.StaticText(parent=panel, id=wx.ID_ANY,
-                              label=_("Select font:"))
-        gridSizer.Add(item=label,
-                      flag=wx.ALIGN_TOP,
-                      pos=(0, 0))
 
-        self.fontlb = wx.ListBox(
-            parent=panel,
-            id=wx.ID_ANY,
-            pos=wx.DefaultPosition,
-            choices=self.fontlist,
-            style=wx.LB_SINGLE)
-        self.Bind(wx.EVT_LISTBOX, self.EvtListBox, self.fontlb)
-        self.Bind(wx.EVT_LISTBOX_DCLICK, self.EvtListBoxDClick, self.fontlb)
-
-        gridSizer.Add(item = self.fontlb,
-                flag = wx.EXPAND, pos = (1, 0))
-
-        if self.type == 'font':
-            if "GRASS_FONT" in os.environ:
-                self.font = os.environ["GRASS_FONT"]
-            else:
-                self.font = self.settings.Get(group = 'display',
-                                              key = 'font', subkey = 'type')
-            self.encoding = self.settings.Get(group = 'display',
-                                          key = 'font', subkey = 'encoding')
-
-            label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                  label = _("Character encoding:"))
-            gridSizer.Add(item = label,
-                          flag = wx.ALIGN_CENTER_VERTICAL,
-                          pos = (2, 0))
-
-            self.textentry = wx.TextCtrl(parent = panel, id = wx.ID_ANY,
-                                         value = self.encoding)
-            gridSizer.Add(item = self.textentry,
-                    flag = wx.EXPAND, pos = (3, 0))
-
-            self.textentry.Bind(wx.EVT_TEXT, self.OnEncoding)
-
-        elif self.type == 'outputfont':
-            self.font = self.settings.Get(group = 'appearance',
-                                              key = 'outputfont', subkey = 'type')
-            self.fontsize = self.settings.Get(group = 'appearance',
-                                          key = 'outputfont', subkey = 'size')
-            label = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                              label = _("Font size:"))
-            gridSizer.Add(item = label,
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 0))
-                      
-            self.spin = wx.SpinCtrl(parent = panel, id = wx.ID_ANY)
-            if self.fontsize:
-                self.spin.SetValue(int(self.fontsize))
-            self.spin.Bind(wx.EVT_SPINCTRL, self.OnSizeSpin)
-            self.spin.Bind(wx.EVT_TEXT, self.OnSizeSpin)
-            gridSizer.Add(item = self.spin,
-                      flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (3, 0))
-
-        else: 
-            return
-
-        if self.font:
-            self.fontlb.SetStringSelection(self.font, True)
-
-        gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL,
-                  border = 5)
-
-        border.Add(item = sizer, proportion = 1,
-                   flag = wx.ALL | wx.EXPAND, border = 3)
-        
-        btnsizer = wx.StdDialogButtonSizer()
-
-        btn = wx.Button(parent = panel, id = wx.ID_OK)
-        btn.SetDefault()
-        btnsizer.AddButton(btn)
-
-        btn = wx.Button(parent = panel, id = wx.ID_CANCEL)
-        btnsizer.AddButton(btn)
-        btnsizer.Realize()
-
-        border.Add(item = btnsizer, proportion = 0,
-                   flag = wx.EXPAND | wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        
-        panel.SetAutoLayout(True)
-        panel.SetSizer(border)
-        border.Fit(self)
-        
-        self.Layout()
-
-    def OnEncoding(self, event):
-        self.encoding = event.GetString()
-
-    def EvtListBox(self, event):
-        self.font = event.GetString()
-        event.Skip()
-
-    def EvtListBoxDClick(self, event):
-        self.font = event.GetString()
-        event.Skip()
-        
-    def OnSizeSpin(self, event):
-        self.fontsize = self.spin.GetValue()
-        event.Skip()
-    
-    def GetFonts(self):
-        """
-        parses fonts directory or fretypecap file to get a list of fonts
-        for the listbox
-        """
-        fontlist = []
-        env = os.environ.copy()
-        driver = UserSettings.Get(group='display', key='driver', subkey='type')
-        if driver == 'png':
-            env['GRASS_RENDER_IMMEDIATE'] = 'png'
-        else:
-            env['GRASS_RENDER_IMMEDIATE'] = 'cairo'
-        ret = RunCommand('d.fontlist',
-                         read=True,
-                         env=env)
-        if not ret:
-            return fontlist
-
-        dfonts = ret.splitlines()
-        dfonts.sort(lambda x,y: cmp(x.lower(), y.lower()))
-        for item in range(len(dfonts)):
-            # ignore duplicate fonts and those starting with #
-            if not dfonts[item].startswith('#') and \
-                  dfonts[item] != dfonts[item-1]:
-                fontlist.append(dfonts[item])
-
-        return fontlist
 
 class MapsetAccess(wx.Dialog):
     """Controls setting options and displaying/hiding map overlay
     decorations
     """
-    def __init__(self, parent, id = wx.ID_ANY,
-                 title = _('Manage access to mapsets'),
-                 size  =  (350, 400),
-                 style  =  wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
-        wx.Dialog.__init__(self, parent, id, title, size = size, style = style)
-
-        self.all_mapsets_ordered = ListOfMapsets(get = 'ordered')
-        self.accessible_mapsets  = ListOfMapsets(get = 'accessible')
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_('Manage access to mapsets'),
+                 size=(350, 400),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+        wx.Dialog.__init__(self, parent, id, title, size=size, style=style)
+
+        self.all_mapsets_ordered = ListOfMapsets(get='ordered')
+        self.accessible_mapsets = ListOfMapsets(get='accessible')
         self.curr_mapset = grass.gisenv()['MAPSET']
 
-        # make a checklistbox from available mapsets and check those that are active
+        # make a checklistbox from available mapsets and check those that are
+        # active
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        label = wx.StaticText(parent = self, id = wx.ID_ANY,
-                              label = _("Check a mapset to make it accessible, uncheck it to hide it.\n"
-                                        "  Notes:\n"
-                                        "    - The current mapset is always accessible.\n"
-                                        "    - You may only write to the current mapset.\n"
-                                        "    - You may only write to mapsets which you own."))
-        
-        sizer.Add(item = label, proportion = 0,
-                  flag = wx.ALL, border = 5)
-
-        self.mapsetlb = CheckListMapset(parent = self)
+        label = wx.StaticText(
+            parent=self, id=wx.ID_ANY, label=_(
+                "Check a mapset to make it accessible, uncheck it to hide it.\n"
+                "  Notes:\n"
+                "    - The current mapset is always accessible.\n"
+                "    - You may only write to the current mapset.\n"
+                "    - You may only write to mapsets which you own."))
+
+        sizer.Add(item=label, proportion=0,
+                  flag=wx.ALL, border=5)
+
+        self.mapsetlb = CheckListMapset(parent=self)
         self.mapsetlb.LoadData()
-        
-        sizer.Add(item = self.mapsetlb, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
+
+        sizer.Add(item=self.mapsetlb, proportion=1,
+                  flag=wx.ALL | wx.EXPAND, border=5)
 
         # check all accessible mapsets
         for mset in self.accessible_mapsets:
@@ -1741,10 +2080,10 @@ class MapsetAccess(wx.Dialog):
         #self.mapsetlb.Enable(0, False)
 
         # dialog buttons
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY,
-                             style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_CENTRE | wx.ALL, border = 5)
+        line = wx.StaticLine(parent=self, id=wx.ID_ANY,
+                             style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_CENTRE | wx.ALL, border=5)
 
         btnsizer = wx.StdDialogButtonSizer()
         okbtn = wx.Button(self, wx.ID_OK)
@@ -1755,8 +2094,8 @@ class MapsetAccess(wx.Dialog):
         btnsizer.AddButton(cancelbtn)
         btnsizer.Realize()
 
-        sizer.Add(item = btnsizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        sizer.Add(item=btnsizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALIGN_RIGHT | wx.ALL, border=5)
 
         # do layout
         self.Layout()
@@ -1764,7 +2103,7 @@ class MapsetAccess(wx.Dialog):
         sizer.Fit(self)
 
         self.SetMinSize(size)
-        
+
     def GetMapsets(self):
         """Get list of checked mapsets"""
         ms = []
@@ -1776,13 +2115,16 @@ class MapsetAccess(wx.Dialog):
 
         return ms
 
-class CheckListMapset(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
+
+class CheckListMapset(
+        wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
     """List of mapset/owner/group"""
-    def __init__(self, parent, log = None):
+
+    def __init__(self, parent, log=None):
         self.parent = parent
-        
+
         wx.ListCtrl.__init__(self, parent, wx.ID_ANY,
-                             style = wx.LC_REPORT)
+                             style=wx.LC_REPORT)
         listmix.CheckListCtrlMixin.__init__(self)
         self.log = log
 
@@ -1795,28 +2137,33 @@ class CheckListMapset(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Check
         self.InsertColumn(1, _('Owner'))
         ### self.InsertColumn(2, _('Group'))
         gisenv = grass.gisenv()
-        locationPath = os.path.join(gisenv['GISDBASE'], gisenv['LOCATION_NAME'])
+        locationPath = os.path.join(
+            gisenv['GISDBASE'],
+            gisenv['LOCATION_NAME'])
 
         for mapset in self.parent.all_mapsets_ordered:
-            index = self.InsertStringItem(sys.maxint, mapset)
+            index = self.InsertStringItem(self.GetItemCount(), mapset)
             mapsetPath = os.path.join(locationPath,
                                       mapset)
             stat_info = os.stat(mapsetPath)
             if havePwd:
                 try:
-                    self.SetStringItem(index, 1, "%s" % pwd.getpwuid(stat_info.st_uid)[0])
+                    self.SetStringItem(
+                        index, 1, "%s" %
+                        pwd.getpwuid(
+                            stat_info.st_uid)[0])
                 except KeyError:
                     self.SetStringItem(index, 1, "nobody")
                 # FIXME: get group name
-                ### self.SetStringItem(index, 2, "%-8s" % stat_info.st_gid) 
+                ### self.SetStringItem(index, 2, "%-8s" % stat_info.st_gid)
             else:
                 # FIXME: no pwd under MS Windows (owner: 0, group: 0)
                 self.SetStringItem(index, 1, "%-8s" % stat_info.st_uid)
                 ### self.SetStringItem(index, 2, "%-8s" % stat_info.st_gid)
-                
-        self.SetColumnWidth(col = 0, width = wx.LIST_AUTOSIZE)
+
+        self.SetColumnWidth(col=0, width=wx.LIST_AUTOSIZE)
         ### self.SetColumnWidth(col = 1, width = wx.LIST_AUTOSIZE)
-        
+
     def OnCheckItem(self, index, flag):
         """Mapset checked/unchecked"""
         mapset = self.parent.all_mapsets_ordered[index]
diff --git a/gui/wxpython/gui_core/prompt.py b/gui/wxpython/gui_core/prompt.py
index 6c1a8d5..ab4febf 100644
--- a/gui/wxpython/gui_core/prompt.py
+++ b/gui/wxpython/gui_core/prompt.py
@@ -30,64 +30,69 @@ from grass.script import task as gtask
 
 from grass.pydispatch.signal import Signal
 
-from core          import globalvar
-from core          import utils
-from core.gcmd     import EncodeString, DecodeString
+from core import globalvar
+from core import utils
+from core.gcmd import EncodeString, DecodeString
 from core.utils import _
 
 
 class GPrompt(object):
     """Abstract class for interactive wxGUI prompt
-    
+
     Signal promptRunCmd - emitted to run command from prompt
                         - attribute 'cmd'
 
     See subclass GPromptPopUp and GPromptSTC.
     """
+
     def __init__(self, parent, menuModel):
         self.parent = parent                 # GConsole
-        self.panel  = self.parent.GetPanel()
+        self.panel = self.parent.GetPanel()
 
         self.promptRunCmd = Signal('GPrompt.promptRunCmd')
 
         # probably only subclasses need this
         self._menuModel = menuModel
 
-        self.mapList    = self._getListOfMaps()
+        self.mapList = self._getListOfMaps()
         self.mapsetList = utils.ListOfMapsets()
-        
+
         # auto complete items
-        self.autoCompList   = list()
+        self.autoCompList = list()
         self.autoCompFilter = None
-        
+
         # command description (gtask.grassTask)
-        self.cmdDesc   = None
-        
+        self.cmdDesc = None
+
         self.cmdbuffer = self._readHistory()
-        self.cmdindex  = len(self.cmdbuffer)
-        
+        self.cmdindex = len(self.cmdbuffer)
+
         # list of traced commands
         self.commands = list()
-        
+
     def _readHistory(self):
         """Get list of commands from history file"""
         hist = list()
         env = grass.gisenv()
         try:
-            fileHistory = codecs.open(os.path.join(env['GISDBASE'],
-                                                   env['LOCATION_NAME'],
-                                                   env['MAPSET'],
-                                                   '.bash_history'),
-                                      encoding = 'utf-8', mode = 'r', errors='replace')
+            fileHistory = codecs.open(
+                os.path.join(
+                    env['GISDBASE'],
+                    env['LOCATION_NAME'],
+                    env['MAPSET'],
+                    '.bash_history'),
+                encoding='utf-8',
+                mode='r',
+                errors='replace')
         except IOError:
             return hist
-        
+
         try:
             for line in fileHistory.readlines():
                 hist.append(line.replace('\n', ''))
         finally:
             fileHistory.close()
-        
+
         return hist
 
     def _getListOfMaps(self):
@@ -95,18 +100,18 @@ class GPrompt(object):
         result = dict()
         result['raster'] = grass.list_strings('raster')
         result['vector'] = grass.list_strings('vector')
-        
+
         return result
-    
+
     def _runCmd(self, cmdString):
         """Run command
-        
+
         :param str cmdString: command to run
         """
         if not cmdString:
             return
 
-        self.commands.append(cmdString) # trace commands
+        self.commands.append(cmdString)  # trace commands
 
         # parse command into list
         try:
@@ -118,36 +123,37 @@ class GPrompt(object):
         self.promptRunCmd.emit(cmd=cmd)
 
         # add command to history & clean prompt
-        ### self.UpdateCmdHistory(cmd)
+        # self.UpdateCmdHistory(cmd)
         self.OnCmdErase(None)
         self.ShowStatusText('')
-        
+
     def GetCommands(self):
         """Get list of launched commands"""
         return self.commands
-    
+
     def ClearCommands(self):
         """Clear list of commands"""
         del self.commands[:]
 
 
 class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
-    """Styled wxGUI prompt with autocomplete and calltips"""  
-    def __init__(self, parent, menuModel, margin = False):
-        GPrompt.__init__(self, parent = parent, menuModel = menuModel)
-        wx.stc.StyledTextCtrl.__init__(self, self.panel, id = wx.ID_ANY)
-        
+    """Styled wxGUI prompt with autocomplete and calltips"""
+
+    def __init__(self, parent, menuModel, margin=False):
+        GPrompt.__init__(self, parent=parent, menuModel=menuModel)
+        wx.stc.StyledTextCtrl.__init__(self, self.panel, id=wx.ID_ANY)
+
         #
         # styles
-        #                
+        #
         self.SetWrapMode(True)
-        self.SetUndoCollection(True)        
-        
+        self.SetUndoCollection(True)
+
         #
         # create command and map lists for autocompletion
         #
-        self.AutoCompSetIgnoreCase(False) 
-                
+        self.AutoCompSetIgnoreCase(False)
+
         #
         # line margins
         #
@@ -159,7 +165,7 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
             self.SetMarginWidth(0, 30)
         else:
             self.SetMarginWidth(0, 0)
-        
+
         #
         # miscellaneous
         #
@@ -168,7 +174,7 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
         self.UsePopUp(True)
         self.SetSelBackground(True, "#FFFF00")
         self.SetUseHorizontalScrollBar(True)
-        
+
         #
         # bindings
         #
@@ -185,20 +191,21 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
 
         # signal to notify selected command
         self.commandSelected = Signal('GPromptSTC.commandSelected')
-        
+
     def OnTextSelectionChanged(self, event):
         """Copy selected text to clipboard and skip event.
         The same function is in GStc class (goutput.py).
         """
         wx.CallAfter(self.Copy)
         event.Skip()
-        
+
     def OnItemChanged(self, event):
-        """Change text in statusbar 
+        """Change text in statusbar
         if the item selection in the auto-completion list is changed"""
         # list of commands
         if self.toComplete['entity'] == 'command':
-            item = self.toComplete['cmd'].rpartition('.')[0] + '.' + self.autoCompList[event.GetIndex()] 
+            item = self.toComplete['cmd'].rpartition(
+                '.')[0] + '.' + self.autoCompList[event.GetIndex()]
             try:
                 nodes = self._menuModel.SearchNodes(key='command', value=item)
                 desc = ''
@@ -206,11 +213,13 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                     self.commandSelected.emit(command=item)
                     desc = nodes[0].data['description']
             except KeyError:
-                desc = '' 
+                desc = ''
             self.ShowStatusText(desc)
-        # list of flags    
+        # list of flags
         elif self.toComplete['entity'] == 'flags':
-            desc = self.cmdDesc.get_flag(self.autoCompList[event.GetIndex()])['description']
+            desc = self.cmdDesc.get_flag(
+                self.autoCompList[
+                    event.GetIndex()])['description']
             self.ShowStatusText(desc)
         # list of parameters
         elif self.toComplete['entity'] == 'params':
@@ -220,12 +229,15 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                 desc = '[' + desc + ']'
             desc += ': ' + item['description']
             self.ShowStatusText(desc)
-        # list of flags and commands       
+        # list of flags and commands
         elif self.toComplete['entity'] == 'params+flags':
             if self.autoCompList[event.GetIndex()][0] == '-':
-                desc = self.cmdDesc.get_flag(self.autoCompList[event.GetIndex()].strip('-'))['description']
+                desc = self.cmdDesc.get_flag(
+                    self.autoCompList[
+                        event.GetIndex()].strip('-'))['description']
             else:
-                item = self.cmdDesc.get_param(self.autoCompList[event.GetIndex()])
+                item = self.cmdDesc.get_param(
+                    self.autoCompList[event.GetIndex()])
                 desc = item['name'] + '=' + item['type']
                 if not item['required']:
                     desc = '[' + desc + ']'
@@ -233,31 +245,33 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
             self.ShowStatusText(desc)
         else:
             self.ShowStatusText('')
-            
+
     def OnItemSelected(self, event):
         """Item selected from the list"""
         lastWord = self.GetWordLeft()
-        # to insert selection correctly if selected word partly matches written text
+        # to insert selection correctly if selected word partly matches written
+        # text
         match = difflib.SequenceMatcher(None, event.GetText(), lastWord)
-        matchTuple = match.find_longest_match(0, len(event.GetText()), 0, len(lastWord))
-    
+        matchTuple = match.find_longest_match(
+            0, len(event.GetText()), 0, len(lastWord))
+
         compl = event.GetText()[matchTuple[2]:]
         text = self.GetTextLeft() + compl
         # add space or '=' at the end
         end = '='
-        for char in ('.','-','='):
+        for char in ('.', '-', '='):
             if text.split(' ')[-1].find(char) >= 0:
                 end = ' '
-        
+
         compl += end
         text += end
 
         self.AddText(compl)
         pos = len(text)
         self.SetCurrentPos(pos)
-        
+
         cmd = text.strip().split(' ')[0]
-        
+
         if not self.cmdDesc or cmd != self.cmdDesc.get_name():
             try:
                 self.cmdDesc = gtask.parse_interface(cmd)
@@ -281,17 +295,17 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
 
     def UpdateCmdHistory(self, cmd):
         """Update command history
-        
+
         :param cmd: command given as a string
         """
-        # add command to history    
+        # add command to history
         self.cmdbuffer.append(cmd)
-        
+
         # keep command history to a managable size
         if len(self.cmdbuffer) > 200:
             del self.cmdbuffer[0]
         self.cmdindex = len(self.cmdbuffer)
-        
+
     def EntityToComplete(self):
         """Determines which part of command (flags, parameters) should
         be completed at current cursor position"""
@@ -301,10 +315,10 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
             cmd = entry.split()[0].strip()
         except IndexError:
             return toComplete
-        
+
         try:
             splitted = utils.split(str(entry))
-        except ValueError: # No closing quotation error
+        except ValueError:  # No closing quotation error
             return toComplete
         if len(splitted) > 0 and cmd in globalvar.grassCmd:
             toComplete['cmd'] = cmd
@@ -316,13 +330,14 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                     toComplete['entity'] = 'params+flags'
             else:
                 # get word left from current position
-                word = self.GetWordLeft(withDelimiter = True)
-                
+                word = self.GetWordLeft(withDelimiter=True)
+
                 if word[0] == '=' and word[-1] == '@':
                     toComplete['entity'] = 'mapsets'
                 elif word[0] == '=':
                     # get name of parameter
-                    paramName = self.GetWordLeft(withDelimiter = False, ignoredDelimiter = '=').strip('=')
+                    paramName = self.GetWordLeft(
+                        withDelimiter=False, ignoredDelimiter='=').strip('=')
                     if paramName:
                         try:
                             param = self.cmdDesc.get_param(paramName)
@@ -330,7 +345,7 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                             return toComplete
                     else:
                         return toComplete
-                    
+
                     if param['values']:
                         toComplete['entity'] = 'param values'
                     elif param['prompt'] == 'raster' and param['element'] == 'cell':
@@ -344,22 +359,22 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
         else:
             toComplete['entity'] = 'command'
             toComplete['cmd'] = cmd
-        
+
         return toComplete
-    
-    def GetWordLeft(self, withDelimiter = False, ignoredDelimiter = None):
+
+    def GetWordLeft(self, withDelimiter=False, ignoredDelimiter=None):
         """Get word left from current cursor position. The beginning
-        of the word is given by space or chars: .,-= 
-        
+        of the word is given by space or chars: .,-=
+
         :param withDelimiter: returns the word with the initial delimeter
         :param ignoredDelimiter: finds the word ignoring certain delimeter
         """
         textLeft = self.GetTextLeft()
-        
+
         parts = list()
         if ignoredDelimiter is None:
             ignoredDelimiter = ''
-        
+
         for char in set(' .,-=') - set(ignoredDelimiter):
             if not withDelimiter:
                 delimiter = ''
@@ -367,12 +382,14 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                 delimiter = char
             parts.append(delimiter + textLeft.rpartition(char)[2])
         return min(parts, key=lambda x: len(x))
-         
+
     def ShowList(self):
         """Show sorted auto-completion list if it is not empty"""
         if len(self.autoCompList) > 0:
             self.autoCompList.sort()
-            self.AutoCompShow(lenEntered = 0, itemList = ' '.join(self.autoCompList))    
+            self.AutoCompShow(
+                lenEntered=0, itemList=' '.join(
+                    self.autoCompList))
 
     def OnKeyPressed(self, event):
         """Key pressed capture special treatment for tabulator to show help"""
@@ -438,7 +455,7 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
         .. todo::
             event.ControlDown() for manual autocomplete
         """
-        # keycodes used: "." = 46, "=" = 61, "-" = 45 
+        # keycodes used: "." = 46, "=" = 61, "-" = 45
         pos = self.GetCurrentPos()
         # complete command after pressing '.'
         if event.GetKeyCode() == 46:
@@ -448,15 +465,18 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
             self.CharRight()
             self.toComplete = self.EntityToComplete()
             try:
-                if self.toComplete['entity'] == 'command': 
+                if self.toComplete['entity'] == 'command':
                     for command in globalvar.grassCmd:
                         try:
                             if command.find(self.toComplete['cmd']) == 0:
-                                dotNumber = list(self.toComplete['cmd']).count('.') 
-                                self.autoCompList.append(command.split('.',dotNumber)[-1])
-                        except UnicodeDecodeError as e: # TODO: fix it
-                            sys.stderr.write(DecodeString(command) + ": " + unicode(e))
-                            
+                                dotNumber = list(
+                                    self.toComplete['cmd']).count('.')
+                                self.autoCompList.append(
+                                    command.split('.', dotNumber)[-1])
+                        except UnicodeDecodeError as e:  # TODO: fix it
+                            sys.stderr.write(
+                                DecodeString(command) + ": " + unicode(e))
+
             except (KeyError, TypeError):
                 return
             self.ShowList()
@@ -471,16 +491,16 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
             self.CharRight()
             self.toComplete = self.EntityToComplete()
             if self.toComplete['entity'] == 'flags' and self.cmdDesc:
-                if self.GetTextLeft()[-2:] == ' -': # complete e.g. --quite
+                if self.GetTextLeft()[-2:] == ' -':  # complete e.g. --quite
                     for flag in self.cmdDesc.get_options()['flags']:
                         if len(flag['name']) == 1:
                             self.autoCompList.append(flag['name'])
                 else:
                     for flag in self.cmdDesc.get_options()['flags']:
                         if len(flag['name']) > 1:
-                            self.autoCompList.append(flag['name'])            
+                            self.autoCompList.append(flag['name'])
             self.ShowList()
-            
+
         # complete map or values after parameter
         elif event.GetKeyCode() == 61:
             self.autoCompList = list()
@@ -492,56 +512,59 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
             elif self.toComplete['entity'] == 'vector map':
                 self.autoCompList = self.mapList['vector']
             elif self.toComplete['entity'] == 'param values':
-                param = self.GetWordLeft(withDelimiter = False, ignoredDelimiter='=').strip(' =')
+                param = self.GetWordLeft(
+                    withDelimiter=False,
+                    ignoredDelimiter='=').strip(' =')
                 self.autoCompList = self.cmdDesc.get_param(param)['values']
             self.ShowList()
-        
+
         # complete mapset ('@')
         elif event.GetKeyCode() == 64:
             self.autoCompList = list()
             self.InsertText(pos, '@')
             self.CharRight()
             self.toComplete = self.EntityToComplete()
-            
+
             if self.toComplete['entity'] == 'mapsets':
                 self.autoCompList = self.mapsetList
             self.ShowList()
-            
-        # complete after pressing CTRL + Space          
+
+        # complete after pressing CTRL + Space
         elif event.GetKeyCode() == wx.WXK_SPACE and event.ControlDown():
             self.autoCompList = list()
             self.toComplete = self.EntityToComplete()
 
-            #complete command
+            # complete command
             if self.toComplete['entity'] == 'command':
                 for command in globalvar.grassCmd:
                     if command.find(self.toComplete['cmd']) == 0:
-                        dotNumber = list(self.toComplete['cmd']).count('.') 
-                        self.autoCompList.append(command.split('.',dotNumber)[-1])
-                
-            
+                        dotNumber = list(self.toComplete['cmd']).count('.')
+                        self.autoCompList.append(
+                            command.split('.', dotNumber)[-1])
+
             # complete flags in such situations (| is cursor):
             # r.colors -| ...w, q, l
-            # r.colors -w| ...w, q, l  
+            # r.colors -w| ...w, q, l
             elif self.toComplete['entity'] == 'flags' and self.cmdDesc:
                 for flag in self.cmdDesc.get_options()['flags']:
                     if len(flag['name']) == 1:
                         self.autoCompList.append(flag['name'])
-                    
+
             # complete parameters in such situations (| is cursor):
             # r.colors -w | ...color, map, rast, rules
             # r.colors col| ...color
             elif self.toComplete['entity'] == 'params' and self.cmdDesc:
                 for param in self.cmdDesc.get_options()['params']:
-                    if param['name'].find(self.GetWordLeft(withDelimiter=False)) == 0:
-                        self.autoCompList.append(param['name'])           
-            
+                    if param['name'].find(
+                            self.GetWordLeft(withDelimiter=False)) == 0:
+                        self.autoCompList.append(param['name'])
+
             # complete flags or parameters in such situations (| is cursor):
             # r.colors | ...-w, -q, -l, color, map, rast, rules
             # r.colors color=grey | ...-w, -q, -l, color, map, rast, rules
             elif self.toComplete['entity'] == 'params+flags' and self.cmdDesc:
                 self.autoCompList = list()
-                
+
                 for param in self.cmdDesc.get_options()['params']:
                     self.autoCompList.append(param['name'])
                 for flag in self.cmdDesc.get_options()['flags']:
@@ -549,12 +572,12 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                         self.autoCompList.append('-' + flag['name'])
                     else:
                         self.autoCompList.append('--' + flag['name'])
-                    
-                self.ShowList() 
-                   
-            # complete map or values after parameter  
+
+                self.ShowList()
+
+            # complete map or values after parameter
             # r.buffer input=| ...list of raster maps
-            # r.buffer units=| ... feet, kilometers, ...   
+            # r.buffer units=| ... feet, kilometers, ...
             elif self.toComplete['entity'] == 'raster map':
                 self.autoCompList = list()
                 self.autoCompList = self.mapList['raster']
@@ -563,9 +586,11 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                 self.autoCompList = self.mapList['vector']
             elif self.toComplete['entity'] == 'param values':
                 self.autoCompList = list()
-                param = self.GetWordLeft(withDelimiter = False, ignoredDelimiter='=').strip(' =')
+                param = self.GetWordLeft(
+                    withDelimiter=False,
+                    ignoredDelimiter='=').strip(' =')
                 self.autoCompList = self.cmdDesc.get_param(param)['values']
-                
+
             self.ShowList()
 
         elif event.GetKeyCode() == wx.WXK_SPACE:
@@ -579,23 +604,23 @@ class GPromptSTC(GPrompt, wx.stc.StyledTextCtrl):
                     except IOError:
                         self.cmdDesc = None
             event.Skip()
-        
+
         else:
             event.Skip()
 
     def ShowStatusText(self, text):
         """Requests showing of notification, e.g. showing in a statusbar."""
         self.showNotification.emit(message=text)
-        
+
     def GetTextLeft(self):
         """Returns all text left of the caret"""
         pos = self.GetCurrentPos()
         self.HomeExtend()
         entry = self.GetSelectedText()
         self.SetCurrentPos(pos)
-        
+
         return entry
-    
+
     def OnDestroy(self, event):
         """The clipboard contents can be preserved after
         the app has exited"""
diff --git a/gui/wxpython/gui_core/pyedit.py b/gui/wxpython/gui_core/pyedit.py
new file mode 100644
index 0000000..c762be1
--- /dev/null
+++ b/gui/wxpython/gui_core/pyedit.py
@@ -0,0 +1,695 @@
+"""GRASS GIS Simple Python Editor
+
+Copyright (C) 2016 by the GRASS Development Team
+
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+:authors: Martin Landa
+"""
+
+import sys
+import os
+import stat
+from StringIO import StringIO
+import time
+
+import wx
+
+import grass.script as gscript
+from grass.script.utils import try_remove
+
+# needed just for testing
+if __name__ == '__main__':
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
+from core.utils import _
+from core.gcmd import EncodeString, GError
+from core.giface import StandaloneGrassInterface
+from gui_core.pystc import PyStc
+from core import globalvar
+from core.menutree import MenuTreeModelBuilder
+from gui_core.menu import Menu
+from gui_core.toolbars import BaseToolbar, BaseIcons
+from icons.icon import MetaIcon
+from core.debug import Debug
+
+# TODO: add validation: call/import pep8 (error message if not available)
+# TODO: run with parameters (alternatively, just use console or GUI)
+# TODO: add more examples (better separate file)
+# TODO: add test for templates and examples
+# TODO: add pep8 test for templates and examples
+# TODO: add snippets?
+
+
+def script_template():
+    """The most simple script which runs and gives something"""
+    return r"""#!/usr/bin/env python
+
+import grass.script as gscript
+
+
+def main():
+    gscript.run_command('g.region', flags='p')
+
+
+if __name__ == '__main__':
+    main()
+"""
+
+
+def module_template():
+    """Template from which to start writing GRASS module"""
+    import getpass
+    author = getpass.getuser()
+
+    properties = {}
+    properties['name'] = 'module name'
+    properties['author'] = author
+    properties['description'] = 'Module description'
+
+    output = StringIO()
+    # header
+    output.write(
+        r"""#!/usr/bin/env python
+#
+#%s
+#
+# MODULE:       %s
+#
+# AUTHOR(S):    %s
+#
+# PURPOSE:      %s
+#
+# DATE:         %s
+#
+#%s
+""" % ('#' * 72,
+            EncodeString(properties['name']),
+            EncodeString(properties['author']),
+            EncodeString('\n# '.join(properties['description'].splitlines())),
+            time.asctime(),
+            '#' * 72))
+
+    # UI
+    output.write(
+        r"""
+#%%module
+#%% description: %s
+#%%end
+""" % (EncodeString(' '.join(properties['description'].splitlines()))))
+
+    # import modules
+    output.write(
+        r"""
+import sys
+import os
+import atexit
+
+import grass.script as gscript
+""")
+
+    # cleanup()
+    output.write(
+        r"""
+RAST_REMOVE = []
+
+def cleanup():
+""")
+    output.write(
+        r"""    gscript.run_command('g.remove', flags='f', type='raster',
+                          name=RAST_REMOVE)
+""")
+    output.write("\ndef main():\n")
+    output.write(
+        r"""    options, flags = gscript.parser()
+    gscript.run_command('g.remove', flags='f', type='raster',
+                        name=RAST_REMOVE)
+""")
+
+    output.write("\n    return 0\n")
+
+    output.write(
+        r"""
+if __name__ == "__main__":
+    atexit.register(cleanup)
+    sys.exit(main())
+""")
+    return output.getvalue()
+
+
+def script_example():
+    """Example of a simple script"""
+    return r"""#!/usr/bin/env python
+
+import grass.script as gscript
+
+def main():
+    input_raster = 'elevation'
+    output_raster = 'high_areas'
+    stats = gscript.parse_command('r.univar', map='elevation', flags='g')
+    raster_mean = float(stats['mean'])
+    raster_stddev = float(stats['stddev'])
+    raster_high = raster_mean + raster_stddev
+    gscript.mapcalc('{r} = {a} > {m}'.format(r=output_raster, a=input_raster,
+                                             m=raster_high))
+
+if __name__ == "__main__":
+    main()
+"""
+
+
+def module_example():
+    """Example of a GRASS module"""
+    return r"""#!/usr/bin/env python
+
+#%module
+#% description: Adds the values of two rasters (A + B)
+#% keyword: raster
+#% keyword: algebra
+#% keyword: sum
+#%end
+#%option G_OPT_R_INPUT
+#% key: araster
+#% description: Name of input raster A in an expression A + B
+#%end
+#%option G_OPT_R_INPUT
+#% key: braster
+#% description: Name of input raster B in an expression A + B
+#%end
+#%option G_OPT_R_OUTPUT
+#%end
+
+
+import sys
+
+import grass.script as gscript
+
+
+def main():
+    options, flags = gscript.parser()
+    araster = options['araster']
+    braster = options['braster']
+    output = options['output']
+
+    gscript.mapcalc('{r} = {a} + {b}'.format(r=output, a=araster, b=braster))
+
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())
+"""
+
+
+def module_error_handling_example():
+    """Example of a GRASS module"""
+    return r"""#!/usr/bin/env python
+
+#%module
+#% description: Selects values from raster above value of mean plus standard deviation
+#% keyword: raster
+#% keyword: select
+#% keyword: standard deviation
+#%end
+#%option G_OPT_R_INPUT
+#%end
+#%option G_OPT_R_OUTPUT
+#%end
+
+
+import sys
+
+import grass.script as gscript
+from grass.exceptions import CalledModuleError
+
+
+def main():
+    options, flags = gscript.parser()
+    input_raster = options['input']
+    output_raster = options['output']
+
+    try:
+        stats = gscript.parse_command('r.univar', map=input_raster, flags='g')
+    except CalledModuleError as e:
+        gscript.fatal('{}'.format(e))
+    raster_mean = float(stats['mean'])
+    raster_stddev = float(stats['stddev'])
+    raster_high = raster_mean + raster_stddev
+    gscript.mapcalc('{r} = {i} > {v}'.format(r=output_raster, i=input_raster,
+                                             v=raster_high))
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())
+"""
+
+
+def open_url(url):
+    import webbrowser
+    webbrowser.open(url)
+
+
+class PyEditController(object):
+    # using the naming GUI convention, change for controller?
+    # pylint: disable=invalid-name
+
+    def __init__(self, panel, guiparent, giface):
+        """Simple editor, this class could be a pure controller"""
+        self.guiparent = guiparent
+        self.giface = giface
+        self.body = panel
+        self.filename = None
+        self.tempfile = None  # bool, make them strings for better code
+        self.overwrite = False
+        self.parameters = None
+
+    def OnRun(self, event):
+        """Run Python script"""
+        if not self.filename:
+            self.filename = gscript.tempfile() + '.py'
+            self.tempfile = True
+            try:
+                fd = open(self.filename, "w")
+                fd.write(self.body.GetText())
+            except IOError as e:
+                GError(_("Unable to launch Python script. %s") % e,
+                       parent=self.guiparent)
+                return
+            finally:
+                fd.close()
+                mode = stat.S_IMODE(os.lstat(self.filename)[stat.ST_MODE])
+                os.chmod(self.filename, mode | stat.S_IXUSR)
+        else:
+            # always save automatically before running
+            fd = open(self.filename, "w")
+            try:
+                fd.write(self.body.GetText())
+            finally:
+                fd.close()
+            # set executable file
+            # (not sure if needed every time but useful for opened files)
+            os.chmod(self.filename, stat.S_IRWXU | stat.S_IWUSR)
+
+        # run in console as other modules, avoid Python shell which
+        # carries variables over to the next execution
+        env = os.environ.copy()
+        if self.overwrite:
+            env['GRASS_OVERWRITE'] = '1'
+        cmd = [fd.name]
+        if self.parameters:
+            cmd.extend(self.parameters)
+        self.giface.RunCmd(cmd, env=env)
+
+    def SaveAs(self):
+        """Save python script to file"""
+        if self.tempfile:
+            try_remove(self.filename)
+            self.tempfile = False
+
+        filename = None
+        dlg = wx.FileDialog(parent=self.guiparent,
+                            message=_("Choose file to save"),
+                            defaultDir=os.getcwd(),
+                            wildcard=_("Python script (*.py)|*.py"),
+                            style=wx.FD_SAVE)
+
+        if dlg.ShowModal() == wx.ID_OK:
+            filename = dlg.GetPath()
+
+        if not filename:
+            return
+
+        # check for extension
+        if filename[-3:] != ".py":
+            filename += ".py"
+
+        if os.path.exists(filename):
+            dlg = wx.MessageDialog(
+                parent=self.guiparent,
+                message=_("File <%s> already exists. "
+                          "Do you want to overwrite this file?") % filename,
+                caption=_("Save file"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            if dlg.ShowModal() == wx.ID_NO:
+                dlg.Destroy()
+                return
+
+            dlg.Destroy()
+
+        self.filename = filename
+        self.tempfile = False
+        self.Save()
+
+    def Save(self):
+        """Save current content to a file and set executable permissions"""
+        assert self.filename
+        fd = open(self.filename, "w")
+        try:
+            fd.write(self.body.GetText())
+        finally:
+            fd.close()
+
+        # executable file
+        os.chmod(self.filename, stat.S_IRWXU | stat.S_IWUSR)
+
+    def OnSave(self, event):
+        """Save python script to file
+
+        Just save if file already specified, save as action otherwise.
+        """
+        if self.filename and not self.tempfile:
+            self.Save()
+        else:
+            self.SaveAs()
+
+    def IsModified(self):
+        """Check if python script has been modified"""
+        return self.body.modified
+
+    def Open(self):
+        """Ask for a filename and load its content"""
+        filename = ''
+        dlg = wx.FileDialog(parent=self.guiparent,
+                            message=_("Open file"),
+                            defaultDir=os.getcwd(),
+                            wildcard=_("Python script (*.py)|*.py"),
+                            style=wx.OPEN)
+
+        if dlg.ShowModal() == wx.ID_OK:
+            filename = dlg.GetPath()
+
+        if not filename:
+            return
+
+        fd = open(filename, "r")
+        try:
+            self.body.SetText(fd.read())
+        finally:
+            fd.close()
+
+        self.filename = filename
+        self.tempfile = False
+
+    def OnOpen(self, event):
+        """Handle open event but ask about replacing content first"""
+        if self.CanReplaceContent('file'):
+            self.Open()
+
+    def IsEmpty(self):
+        """Check if python script is empty"""
+        return len(self.body.GetText()) == 0
+
+    def IsContentValuable(self):
+        """Check if content of the editor is valuable to user
+
+        Used for example to check if content should be saved before closing.
+        The content is not valuable for example if it already saved in a file.
+        """
+        Debug.msg(2, "pyedit IsContentValuable? empty={}, modified={}",
+                  self.IsEmpty(), self.IsModified())
+        return not self.IsEmpty() and self.IsModified()
+
+    def SetScriptTemplate(self, event):
+        if self.CanReplaceContent('template'):
+            self.body.SetText(script_template())
+
+    def SetModuleTemplate(self, event):
+        if self.CanReplaceContent('template'):
+            self.body.SetText(module_template())
+
+    def SetScriptExample(self, event):
+        if self.CanReplaceContent('example'):
+            self.body.SetText(script_example())
+
+    def SetModuleExample(self, event):
+        if self.CanReplaceContent('example'):
+            self.body.SetText(module_example())
+
+    def SetModuleErrorHandlingExample(self, event):
+        if self.CanReplaceContent('example'):
+            self.body.SetText(module_error_handling_example())
+
+    def CanReplaceContent(self, by_message):
+        """Check with user if we can replace content by something else
+
+        Asks user if replacement is OK depending on the state of the editor.
+        Use before replacing all editor content by some other text.
+        
+        :param by_message: message used to ask user if it is OK to replace
+            the content with something else; special values are 'template',
+            'example' and 'file' which will use predefined messages, otherwise
+            a translatable, user visible string should be used.
+        """
+        if by_message == 'template':
+            message = _("Replace the content by the template?")
+        elif by_message == 'example':
+            message = _("Replace the content by the example?")
+        elif by_message == 'file':
+            message = _("Replace the current content by the file content?")
+        else:
+            message = by_message
+        if self.IsContentValuable():
+            dlg = wx.MessageDialog(
+                parent=self.guiparent, message=message,
+                caption=_("Replace content"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            if dlg.ShowModal() == wx.ID_NO:
+                dlg.Destroy()
+                return False
+            dlg.Destroy()
+        return True
+
+    def OnSetParameters(self, event):
+        """Handle setting CLI parameters for the script (asks for input)"""
+        dlg = wx.TextEntryDialog(
+            parent=self.guiparent,
+            caption=_("Set parameters for the script"),
+            message=_("Specify command line parameters for the script separated by spaces:"),
+            )
+        if self.parameters:
+            dlg.SetValue(" ".join(self.parameters))
+        # TODO: modality might not be needed here if we bind the events
+        if dlg.ShowModal() == wx.ID_OK:
+            text = dlg.GetValue().strip()
+            # TODO: split in the same way as in console
+            if text:
+                self.parameters = text.split()
+            else:
+                self.parameters = None
+
+    def OnHelp(self, event):
+        # inspired by g.manual but simple not using GRASS_HTML_BROWSER
+        # not using g.manual because it does not show
+        entry = 'libpython/script_intro.html'
+        major, minor, patch = gscript.version()['version'].split('.')
+        url = 'http://grass.osgeo.org/grass%s%s/manuals/%s' % (
+            major, minor, entry)
+        open_url(url)
+
+    def OnPythonHelp(self, event):
+        url = 'https://docs.python.org/%s/tutorial/' % sys.version_info[0]
+        open_url(url)
+
+    def OnModulesHelp(self, event):
+        self.giface.Help('full_index')
+
+    def OnSubmittingHelp(self, event):
+        open_url('https://trac.osgeo.org/grass/wiki/Submitting/Python')
+
+    def OnAddonsHelp(self, event):
+        open_url('https://grass.osgeo.org/development/code-submission/')
+
+    def OnSupport(self, event):
+        open_url('https://grass.osgeo.org/support/')
+
+
+class PyEditToolbar(BaseToolbar):
+    # GUI class
+    # pylint: disable=too-many-ancestors
+    # pylint: disable=too-many-public-methods
+    """PyEdit toolbar"""
+
+    def __init__(self, parent):
+        BaseToolbar.__init__(self, parent)
+
+        self.icons = {
+            'open': MetaIcon(img='open',
+                             label=_('Open (Ctrl+O)')),
+            'save': MetaIcon(img='save',
+                             label=_('Save (Ctrl+S)')),
+            'run': MetaIcon(img='execute',
+                            label=_('Run (Ctrl+R)')),
+            # TODO: better icons for overwrite modes
+            'overwriteTrue': MetaIcon(img='locked',
+                                      label=_('Activate overwrite')),
+            'overwriteFalse': MetaIcon(img='unlocked',
+                                       label=_('Deactive overwrite')),
+        }
+
+        # workaround for http://trac.wxwidgets.org/ticket/13888
+        if sys.platform == 'darwin':
+            parent.SetToolBar(self)
+
+        self.InitToolbar(self._toolbarData())
+
+        # realize the toolbar
+        self.Realize()
+
+    def _toolbarData(self):
+        """Toolbar data"""
+        return self._getToolbarData((('open', self.icons['open'],
+                                      self.parent.OnOpen),
+                                     ('save', self.icons['save'],
+                                      self.parent.OnSave),
+                                     (None, ),
+                                     ('run', self.icons['run'],
+                                      self.parent.OnRun),
+                                     ('overwrite', self.icons['overwriteTrue'],
+                                      self.OnSetOverwrite, wx.ITEM_CHECK),
+                                     (None, ),
+                                     ("help", BaseIcons['help'],
+                                      self.parent.OnHelp),
+                                     ))
+
+    # TODO: add overwrite also to the menu and sync with toolbar
+    def OnSetOverwrite(self, event):
+        if self.GetToolState(self.overwrite):
+            self.SetToolNormalBitmap(self.overwrite,
+                                     self.icons['overwriteFalse'].GetBitmap())
+            self.SetToolShortHelp(self.overwrite,
+                                  self.icons['overwriteFalse'].GetLabel())
+            self.parent.overwrite = True
+        else:
+            self.SetToolNormalBitmap(self.overwrite,
+                                     self.icons['overwriteTrue'].GetBitmap())
+            self.SetToolShortHelp(self.overwrite,
+                                  self.icons['overwriteTrue'].GetLabel())
+            self.parent.overwrite = False
+
+
+class PyEditFrame(wx.Frame):
+    # GUI class and a lot of trampoline methods
+    # pylint: disable=missing-docstring
+    # pylint: disable=too-many-public-methods
+    # pylint: disable=invalid-name
+
+    def __init__(self, parent, giface, id=wx.ID_ANY,
+                 title=_("GRASS GIS Simple Python Editor"),
+                 **kwargs):
+        wx.Frame.__init__(self, parent=parent, id=id, title=title, **kwargs)
+        self.parent = parent
+
+        filename = os.path.join(
+            globalvar.WXGUIDIR, 'xml', 'menudata_pyedit.xml')
+        self.menubar = Menu(
+            parent=self,
+            model=MenuTreeModelBuilder(filename).GetModel(separators=True))
+        self.SetMenuBar(self.menubar)
+
+        self.toolbar = PyEditToolbar(parent=self)
+        # workaround for http://trac.wxwidgets.org/ticket/13888
+        # TODO: toolbar is set in toolbar and here
+        if sys.platform != 'darwin':
+            self.SetToolBar(self.toolbar)
+
+        self.panel = PyStc(parent=self)
+        self.controller = PyEditController(
+            panel=self.panel, guiparent=self, giface=giface)
+
+        # don't start with an empty page
+        self.panel.SetText(script_template())
+
+        sizer = wx.BoxSizer(wx.VERTICAL)
+        sizer.Add(item=self.panel, proportion=1,
+                  flag=wx.EXPAND)
+        sizer.Fit(self)
+        sizer.SetSizeHints(self)
+        self.SetSizer(sizer)
+        self.Fit()
+        self.SetAutoLayout(True)
+        self.Layout()
+        self.Bind(wx.EVT_CLOSE, self.OnClose)
+
+    # TODO: it would be nice if we can pass the controller to the menu
+    # might not be possible on the side of menu
+    # here we use self and self.controller which might make it harder
+    def OnOpen(self, *args, **kwargs):
+        self.controller.OnOpen(*args, **kwargs)
+
+    def OnSave(self, *args, **kwargs):
+        self.controller.OnSave(*args, **kwargs)
+
+    def OnClose(self, *args, **kwargs):
+        # this will be often true because PyStc is using EVT_KEY_DOWN
+        # to say if it was modified, not actual user change in text
+        if self.controller.IsContentValuable():
+            self.controller.OnSave(*args, **kwargs)
+        self.Destroy()
+
+    def OnRun(self, *args, **kwargs):
+        # save without asking
+        self.controller.OnRun(*args, **kwargs)
+
+    def OnHelp(self, *args, **kwargs):
+        self.controller.OnHelp(*args, **kwargs)
+
+    def OnSimpleScriptTemplate(self, *args, **kwargs):
+        self.controller.SetScriptTemplate(*args, **kwargs)
+
+    def OnGrassModuleTemplate(self, *args, **kwargs):
+        self.controller.SetModuleTemplate(*args, **kwargs)
+
+    def OnSimpleScriptExample(self, *args, **kwargs):
+        self.controller.SetScriptExample(*args, **kwargs)
+
+    def OnGrassModuleExample(self, *args, **kwargs):
+        self.controller.SetModuleExample(*args, **kwargs)
+
+    def OnGrassModuleErrorHandlingExample(self, *args, **kwargs):
+        self.controller.SetModuleErrorHandlingExample(*args, **kwargs)
+
+    def OnPythonHelp(self, *args, **kwargs):
+        self.controller.OnPythonHelp(*args, **kwargs)
+
+    def OnModulesHelp(self, *args, **kwargs):
+        self.controller.OnModulesHelp(*args, **kwargs)
+
+    def OnSubmittingHelp(self, *args, **kwargs):
+        self.controller.OnSubmittingHelp(*args, **kwargs)
+
+    def OnAddonsHelp(self, *args, **kwargs):
+        self.controller.OnAddonsHelp(*args, **kwargs)
+
+    def OnSupport(self, *args, **kwargs):
+        self.controller.OnSupport(*args, **kwargs)
+
+    def _get_overwrite(self):
+        return self.controller.overwrite
+
+    def _set_overwrite(self, overwrite):
+        self.controller.overwrite = overwrite
+
+    overwrite = property(_get_overwrite, _set_overwrite,
+                         doc="Tells if overwrite should be used")
+
+    def OnSetParameters(self, *args, **kwargs):
+        self.controller.OnSetParameters(*args, **kwargs)
+
+
+def main():
+    """Test application (potentially useful as g.gui.pyedit)"""
+    app = wx.App()
+    giface = StandaloneGrassInterface()
+    simple_editor = PyEditFrame(parent=None, giface=giface)
+    simple_editor.SetSize((600, 800))
+    simple_editor.Show()
+    app.MainLoop()
+
+
+if __name__ == '__main__':
+    main()
diff --git a/gui/wxpython/gui_core/pystc.py b/gui/wxpython/gui_core/pystc.py
index 9659885..4555fee 100644
--- a/gui/wxpython/gui_core/pystc.py
+++ b/gui/wxpython/gui_core/pystc.py
@@ -27,148 +27,254 @@ class PyStc(stc.StyledTextCtrl):
     usage)
 
     Based on StyledTextCtrl_2 from wxPython demo
-    """  
-    def __init__(self, parent, id = wx.ID_ANY, statusbar = None):
+    """
+
+    def __init__(self, parent, id=wx.ID_ANY, statusbar=None):
         stc.StyledTextCtrl.__init__(self, parent, id)
-        
+
         self.parent = parent
         self.statusbar = statusbar
-        
-        self.modified = False # content modified ?
-        
-        self.faces = { 'times': 'Times New Roman',
-                       'mono' : 'Courier New',
-                       'helv' : 'Arial',
-                       'other': 'Comic Sans MS',
-                       'size' : 10,
-                       'size2': 8,
-                       }
-        
+
+        self.modified = False  # content modified ?
+
+        # this is supposed to get monospace
+        font = wx.Font(
+            9,
+            wx.FONTFAMILY_MODERN,
+            wx.FONTSTYLE_NORMAL,
+            wx.FONTWEIGHT_NORMAL)
+        face = font.GetFaceName()
+        size = font.GetPointSize()
+
+        # setting the monospace here to not mess with the rest of the code
+        # TODO: review the whole styling
+        self.faces = {'times': face,
+                      'mono': face,
+                      'helv': face,
+                      'other': face,
+                      'size': 10,
+                      'size2': 8,
+                      }
+
         self.CmdKeyAssign(ord('B'), stc.STC_SCMOD_CTRL, stc.STC_CMD_ZOOMIN)
         self.CmdKeyAssign(ord('N'), stc.STC_SCMOD_CTRL, stc.STC_CMD_ZOOMOUT)
-        
+
         self.SetLexer(stc.STC_LEX_PYTHON)
         self.SetKeyWords(0, " ".join(keyword.kwlist))
-        
+
         self.SetProperty("fold", "1")
         self.SetProperty("tab.timmy.whinge.level", "1")
         self.SetMargins(0, 0)
         self.SetTabWidth(4)
         self.SetUseTabs(False)
-        
+
         self.SetEdgeMode(stc.STC_EDGE_BACKGROUND)
         self.SetEdgeColumn(78)
-        
+
         # setup a margin to hold fold markers
         self.SetMarginType(2, stc.STC_MARGIN_SYMBOL)
         self.SetMarginMask(2, stc.STC_MASK_FOLDERS)
         self.SetMarginSensitive(2, True)
         self.SetMarginWidth(2, 12)
-        
+
         # like a flattened tree control using square headers
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPEN,    stc.STC_MARK_BOXMINUS,          "white", "#808080")
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDER,        stc.STC_MARK_BOXPLUS,           "white", "#808080")
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDERSUB,     stc.STC_MARK_VLINE,             "white", "#808080")
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDERTAIL,    stc.STC_MARK_LCORNER,           "white", "#808080")
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDEREND,     stc.STC_MARK_BOXPLUSCONNECTED,  "white", "#808080")
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDEROPENMID, stc.STC_MARK_BOXMINUSCONNECTED, "white", "#808080")
-        self.MarkerDefine(stc.STC_MARKNUM_FOLDERMIDTAIL, stc.STC_MARK_TCORNER,           "white", "#808080")
-        
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDEROPEN,
+            stc.STC_MARK_BOXMINUS,
+            "white",
+            "#808080")
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDER,
+            stc.STC_MARK_BOXPLUS,
+            "white",
+            "#808080")
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDERSUB,
+            stc.STC_MARK_VLINE,
+            "white",
+            "#808080")
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDERTAIL,
+            stc.STC_MARK_LCORNER,
+            "white",
+            "#808080")
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDEREND,
+            stc.STC_MARK_BOXPLUSCONNECTED,
+            "white",
+            "#808080")
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDEROPENMID,
+            stc.STC_MARK_BOXMINUSCONNECTED,
+            "white",
+            "#808080")
+        self.MarkerDefine(
+            stc.STC_MARKNUM_FOLDERMIDTAIL,
+            stc.STC_MARK_TCORNER,
+            "white",
+            "#808080")
+
         self.Bind(stc.EVT_STC_UPDATEUI, self.OnUpdateUI)
         self.Bind(stc.EVT_STC_MARGINCLICK, self.OnMarginClick)
         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyPressed)
-        
+
+        # show whitespace
+        self.SetViewWhiteSpace(1)
+        # make the symbols very light gray to be less distracting
+        self.SetWhitespaceForeground(True, wx.Colour(200, 200, 200))
+
         # Make some styles, the lexer defines what each style is used
         # for, we just have to define what each style looks like.
         # This set is adapted from Scintilla sample property files.
-        
+
         # global default styles for all languages
-        self.StyleSetSpec(stc.STC_STYLE_DEFAULT,     "face:%(helv)s,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_STYLE_DEFAULT,
+            "face:%(helv)s,size:%(size)d" %
+            self.faces)
         self.StyleClearAll()  # reset all to be like the default
-        
+
         # global default styles for all languages
-        self.StyleSetSpec(stc.STC_STYLE_DEFAULT,     "face:%(helv)s,size:%(size)d" % self.faces)
-        self.StyleSetSpec(stc.STC_STYLE_LINENUMBER,  "back:#C0C0C0,face:%(helv)s,size:%(size2)d" % self.faces)
-        self.StyleSetSpec(stc.STC_STYLE_CONTROLCHAR, "face:%(other)s" % self.faces)
-        self.StyleSetSpec(stc.STC_STYLE_BRACELIGHT,  "fore:#FFFFFF,back:#0000FF,bold")
-        self.StyleSetSpec(stc.STC_STYLE_BRACEBAD,    "fore:#000000,back:#FF0000,bold")
-        
+        self.StyleSetSpec(
+            stc.STC_STYLE_DEFAULT,
+            "face:%(helv)s,size:%(size)d" %
+            self.faces)
+        self.StyleSetSpec(
+            stc.STC_STYLE_LINENUMBER,
+            "back:#C0C0C0,face:%(helv)s,size:%(size2)d" %
+            self.faces)
+        self.StyleSetSpec(
+            stc.STC_STYLE_CONTROLCHAR,
+            "face:%(other)s" %
+            self.faces)
+        self.StyleSetSpec(
+            stc.STC_STYLE_BRACELIGHT,
+            "fore:#FFFFFF,back:#0000FF,bold")
+        self.StyleSetSpec(
+            stc.STC_STYLE_BRACEBAD,
+            "fore:#000000,back:#FF0000,bold")
+
         # Python styles
-        # Default 
-        self.StyleSetSpec(stc.STC_P_DEFAULT, "fore:#000000,face:%(helv)s,size:%(size)d" % self.faces)
+        # Default
+        self.StyleSetSpec(
+            stc.STC_P_DEFAULT,
+            "fore:#000000,face:%(helv)s,size:%(size)d" %
+            self.faces)
         # Comments
-        self.StyleSetSpec(stc.STC_P_COMMENTLINE, "fore:#007F00,face:%(other)s,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_COMMENTLINE,
+            "fore:#007F00,face:%(other)s,size:%(size)d" %
+            self.faces)
         # Number
-        self.StyleSetSpec(stc.STC_P_NUMBER, "fore:#007F7F,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_NUMBER,
+            "fore:#007F7F,size:%(size)d" %
+            self.faces)
         # String
-        self.StyleSetSpec(stc.STC_P_STRING, "fore:#7F007F,face:%(helv)s,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_STRING,
+            "fore:#7F007F,face:%(helv)s,size:%(size)d" %
+            self.faces)
         # Single quoted string
-        self.StyleSetSpec(stc.STC_P_CHARACTER, "fore:#7F007F,face:%(helv)s,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_CHARACTER,
+            "fore:#7F007F,face:%(helv)s,size:%(size)d" %
+            self.faces)
         # Keyword
-        self.StyleSetSpec(stc.STC_P_WORD, "fore:#00007F,bold,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_WORD,
+            "fore:#00007F,bold,size:%(size)d" %
+            self.faces)
         # Triple quotes
-        self.StyleSetSpec(stc.STC_P_TRIPLE, "fore:#7F0000,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_TRIPLE,
+            "fore:#7F0000,size:%(size)d" %
+            self.faces)
         # Triple double quotes
-        self.StyleSetSpec(stc.STC_P_TRIPLEDOUBLE, "fore:#7F0000,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_TRIPLEDOUBLE,
+            "fore:#7F0000,size:%(size)d" %
+            self.faces)
         # Class name definition
-        self.StyleSetSpec(stc.STC_P_CLASSNAME, "fore:#0000FF,bold,underline,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_CLASSNAME,
+            "fore:#0000FF,bold,underline,size:%(size)d" %
+            self.faces)
         # Function or method name definition
-        self.StyleSetSpec(stc.STC_P_DEFNAME, "fore:#007F7F,bold,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_DEFNAME,
+            "fore:#007F7F,bold,size:%(size)d" %
+            self.faces)
         # Operators
-        self.StyleSetSpec(stc.STC_P_OPERATOR, "bold,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_OPERATOR,
+            "bold,size:%(size)d" %
+            self.faces)
         # Identifiers
-        self.StyleSetSpec(stc.STC_P_IDENTIFIER, "fore:#000000,face:%(helv)s,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_IDENTIFIER,
+            "fore:#000000,face:%(helv)s,size:%(size)d" %
+            self.faces)
         # Comment-blocks
-        self.StyleSetSpec(stc.STC_P_COMMENTBLOCK, "fore:#7F7F7F,size:%(size)d" % self.faces)
+        self.StyleSetSpec(
+            stc.STC_P_COMMENTBLOCK,
+            "fore:#7F7F7F,size:%(size)d" %
+            self.faces)
         # End of line where string is not closed
-        self.StyleSetSpec(stc.STC_P_STRINGEOL, "fore:#000000,face:%(mono)s,back:#E0C0E0,eol,size:%(size)d" % self.faces)
-        
+        self.StyleSetSpec(
+            stc.STC_P_STRINGEOL,
+            "fore:#000000,face:%(mono)s,back:#E0C0E0,eol,size:%(size)d" %
+            self.faces)
+
         self.SetCaretForeground("BLUE")
-        
+
     def OnKeyPressed(self, event):
         """Key pressed
-        
+
         .. todo::
             implement code completion (see wxPython demo)
         """
         if not self.modified:
             self.modified = True
             if self.statusbar:
-                self.statusbar.SetStatusText(_('Python script contains local modifications'), 0)
-        
+                self.statusbar.SetStatusText(
+                    _('Python script contains local modifications'), 0)
+
         event.Skip()
-        
+
     def OnUpdateUI(self, evt):
         # check for matching braces
         braceAtCaret = -1
         braceOpposite = -1
         charBefore = None
         caretPos = self.GetCurrentPos()
-        
+
         if caretPos > 0:
-            charBefore  = self.GetCharAt(caretPos - 1)
+            charBefore = self.GetCharAt(caretPos - 1)
             styleBefore = self.GetStyleAt(caretPos - 1)
-        
+
         # check before
-        if charBefore and chr(charBefore) in "[]{}()" and styleBefore == stc.STC_P_OPERATOR:
+        if charBefore and chr(
+                charBefore) in "[]{}()" and styleBefore == stc.STC_P_OPERATOR:
             braceAtCaret = caretPos - 1
-        
+
         # check after
         if braceAtCaret < 0:
             charAfter = self.GetCharAt(caretPos)
             styleAfter = self.GetStyleAt(caretPos)
-            
-            if charAfter and chr(charAfter) in "[]{}()" and styleAfter == stc.STC_P_OPERATOR:
+
+            if charAfter and chr(
+                    charAfter) in "[]{}()" and styleAfter == stc.STC_P_OPERATOR:
                 braceAtCaret = caretPos
-        
+
         if braceAtCaret >= 0:
             braceOpposite = self.BraceMatch(braceAtCaret)
-        
-        if braceAtCaret != -1  and braceOpposite == -1:
+
+        if braceAtCaret != -1 and braceOpposite == -1:
             self.BraceBadLight(braceAtCaret)
         else:
             self.BraceHighlight(braceAtCaret, braceOpposite)
-        
+
     def OnMarginClick(self, evt):
         # fold and unfold as needed
         if evt.GetMargin() == 2:
@@ -176,8 +282,9 @@ class PyStc(stc.StyledTextCtrl):
                 self.FoldAll()
             else:
                 lineClicked = self.LineFromPosition(evt.GetPosition())
-                
-                if self.GetFoldLevel(lineClicked) & stc.STC_FOLDLEVELHEADERFLAG:
+
+                if self.GetFoldLevel(
+                        lineClicked) & stc.STC_FOLDLEVELHEADERFLAG:
                     if evt.GetShift():
                         self.SetFoldExpanded(lineClicked, True)
                         self.Expand(lineClicked, True, True, 1)
@@ -190,23 +297,23 @@ class PyStc(stc.StyledTextCtrl):
                             self.Expand(lineClicked, True, True, 100)
                     else:
                         self.ToggleFold(lineClicked)
-        
+
     def FoldAll(self):
         lineCount = self.GetLineCount()
         expanding = True
-        
+
         # find out if we are folding or unfolding
         for lineNum in range(lineCount):
             if self.GetFoldLevel(lineNum) & stc.STC_FOLDLEVELHEADERFLAG:
                 expanding = not self.GetFoldExpanded(lineNum)
                 break
-        
+
         lineNum = 0
         while lineNum < lineCount:
             level = self.GetFoldLevel(lineNum)
             if level & stc.STC_FOLDLEVELHEADERFLAG and \
                (level & stc.STC_FOLDLEVELNUMBERMASK) == stc.STC_FOLDLEVELBASE:
-                
+
                 if expanding:
                     self.SetFoldExpanded(lineNum, True)
                     lineNum = self.Expand(lineNum, True)
@@ -214,16 +321,16 @@ class PyStc(stc.StyledTextCtrl):
                 else:
                     lastChild = self.GetLastChild(lineNum, -1)
                     self.SetFoldExpanded(lineNum, False)
-                    
+
                     if lastChild > lineNum:
-                        self.HideLines(lineNum+1, lastChild)
-            
+                        self.HideLines(lineNum + 1, lastChild)
+
             lineNum = lineNum + 1
-        
+
     def Expand(self, line, doExpand, force=False, visLevels=0, level=-1):
         lastChild = self.GetLastChild(line, level)
         line = line + 1
-        
+
         while line <= lastChild:
             if force:
                 if visLevels > 0:
@@ -233,24 +340,24 @@ class PyStc(stc.StyledTextCtrl):
             else:
                 if doExpand:
                     self.ShowLines(line, line)
-            
+
             if level == -1:
                 level = self.GetFoldLevel(line)
-            
+
             if level & stc.STC_FOLDLEVELHEADERFLAG:
                 if force:
                     if visLevels > 1:
                         self.SetFoldExpanded(line, True)
                     else:
                         self.SetFoldExpanded(line, False)
-                    
-                    line = self.Expand(line, doExpand, force, visLevels-1)
+
+                    line = self.Expand(line, doExpand, force, visLevels - 1)
                 else:
                     if doExpand and self.GetFoldExpanded(line):
-                        line = self.Expand(line, True, force, visLevels-1)
+                        line = self.Expand(line, True, force, visLevels - 1)
                     else:
-                        line = self.Expand(line, False, force, visLevels-1)
+                        line = self.Expand(line, False, force, visLevels - 1)
             else:
                 line = line + 1
-        
+
         return line
diff --git a/gui/wxpython/gui_core/query.py b/gui/wxpython/gui_core/query.py
index 582c19b..435e440 100644
--- a/gui/wxpython/gui_core/query.py
+++ b/gui/wxpython/gui_core/query.py
@@ -23,55 +23,76 @@ from core.treemodel import TreeModel, DictNode
 
 from grass.pydispatch.signal import Signal
 
+
 class QueryDialog(wx.Dialog):
-    def __init__(self, parent, data = None):
-        wx.Dialog.__init__(self, parent, id = wx.ID_ANY,
-                           title = _("Query results"),
-                           size = (420, 400),
-                           style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
+
+    def __init__(self, parent, data=None):
+        wx.Dialog.__init__(self, parent, id=wx.ID_ANY,
+                           title=_("Query results"),
+                           size=(420, 400),
+                           style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
         # send query output to console
         self.redirectOutput = Signal('QueryDialog.redirectOutput')
 
         self.data = data
 
-        self.panel = wx.Panel(self, id = wx.ID_ANY)
+        self.panel = wx.Panel(self, id=wx.ID_ANY)
         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
 
-        helpText = wx.StaticText(self.panel, wx.ID_ANY,
-                                 label=_("Right click to copy selected values to clipboard."))
-        helpText.SetForegroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
+        helpText = wx.StaticText(self.panel, wx.ID_ANY, label=_(
+            "Right click to copy selected values to clipboard."))
+        helpText.SetForegroundColour(
+            wx.SystemSettings_GetColour(
+                wx.SYS_COLOUR_GRAYTEXT))
         self.mainSizer.Add(item=helpText, proportion=0, flag=wx.ALL, border=5)
 
         self._colNames = [_("Feature"), _("Value")]
         self._model = QueryTreeBuilder(self.data, column=self._colNames[1])
         self.tree = TreeListView(model=self._model, parent=self.panel,
                                  columns=self._colNames,
-                                 style=wx.TR_DEFAULT_STYLE | 
+                                 style=wx.TR_DEFAULT_STYLE |
                                  wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_MULTIPLE)
 
         self.tree.SetColumnWidth(0, 220)
         self.tree.SetColumnWidth(1, 1000)
         self.tree.ExpandAll(self._model.root)
         self.tree.contextMenu.connect(self.ShowContextMenu)
-        self.mainSizer.Add(item = self.tree, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
+        self.mainSizer.Add(
+            item=self.tree,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
 
-        
-        close = wx.Button(self.panel, id = wx.ID_CLOSE)
+        close = wx.Button(self.panel, id=wx.ID_CLOSE)
         close.Bind(wx.EVT_BUTTON, lambda event: self.Close())
-        copy = wx.Button(self.panel, id = wx.ID_ANY, label = _("Copy all to clipboard"))
+        copy = wx.Button(
+            self.panel,
+            id=wx.ID_ANY,
+            label=_("Copy all to clipboard"))
         copy.Bind(wx.EVT_BUTTON, self.Copy)
         self.Bind(wx.EVT_CLOSE, self.OnClose)
         self.redirect = wx.CheckBox(self.panel, label=_("Redirect to console"))
         self.redirect.SetValue(False)
-        self.redirect.Bind(wx.EVT_CHECKBOX, lambda evt: self._onRedirect(evt.IsChecked()))
+        self.redirect.Bind(
+            wx.EVT_CHECKBOX,
+            lambda evt: self._onRedirect(
+                evt.IsChecked()))
 
         hbox = wx.BoxSizer(wx.HORIZONTAL)
-        hbox.Add(item=self.redirect, proportion=0, flag=wx.EXPAND | wx.RIGHT, border=5)
+        hbox.Add(
+            item=self.redirect,
+            proportion=0,
+            flag=wx.EXPAND | wx.RIGHT,
+            border=5)
         hbox.AddStretchSpacer(1)
         hbox.Add(item=copy, proportion=0, flag=wx.EXPAND | wx.RIGHT, border=5)
         hbox.Add(item=close, proportion=0, flag=wx.EXPAND | wx.ALL, border=0)
 
-        self.mainSizer.Add(item=hbox, proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
+        self.mainSizer.Add(
+            item=hbox,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self.panel.SetSizer(self.mainSizer)
         self.mainSizer.Fit(self.panel)
         # for Windows
@@ -93,41 +114,55 @@ class QueryDialog(wx.Dialog):
 
     def ShowContextMenu(self, node):
         """Show context menu.
-        
+
         Menu for copying distinguishes single and multiple selection.
         """
         nodes = self.tree.GetSelected()
         if not nodes:
             return
-            
+
         menu = wx.Menu()
         texts = []
         if len(nodes) > 1:
             values = []
             for node in nodes:
-                values.append((node.label, node.data[self._colNames[1]] if node.data else ''))
+                values.append(
+                    (node.label, node.data[
+                        self._colNames[1]] if node.data else ''))
             col1 = '\n'.join([val[1] for val in values if val[1]])
             col2 = '\n'.join([val[0] for val in values if val[0]])
             table = '\n'.join([val[0] + ': ' + val[1] for val in values])
-            texts.append((_("Copy from '%s' column") % self._colNames[1], col1))
-            texts.append((_("Copy from '%s' column") % self._colNames[0], col2))
+            texts.append(
+                (_("Copy from '%s' column") %
+                 self._colNames[1], col1))
+            texts.append(
+                (_("Copy from '%s' column") %
+                 self._colNames[0], col2))
             texts.append((_("Copy selected lines"), table))
         else:
             label1 = nodes[0].label
             texts.append((_("Copy '%s'" % self._cutLabel(label1)), label1))
             if nodes[0].data and nodes[0].data[self._colNames[1]]:
                 label2 = nodes[0].data[self._colNames[1]]
-                texts.insert(0, (_("Copy '%s'" % self._cutLabel(label2)), label2))
+                texts.insert(
+                    0, (_(
+                        "Copy '%s'" %
+                        self._cutLabel(label2)), label2))
                 texts.append((_("Copy line"), label1 + ': ' + label2))
 
         ids = []
         for text in texts:
             id = wx.NewId()
             ids.append(id)
-            self.Bind(wx.EVT_MENU, lambda evt, t=text[1], id=id: self._copyText(t), id=id)
- 
+            self.Bind(
+                wx.EVT_MENU,
+                lambda evt,
+                t=text[1],
+                id=id: self._copyText(t),
+                id=id)
+
             menu.Append(id, text[0])
- 
+
         # show the popup menu
         self.PopupMenu(menu)
         menu.Destroy()
@@ -136,8 +171,8 @@ class QueryDialog(wx.Dialog):
 
     def _onRedirect(self, redirect):
         """Emits instructions to redirect query results.
-        
-        :param redirect: True to start redirecting, False to stop        
+
+        :param redirect: True to start redirecting, False to stop
         """
         if redirect:
             self.redirectOutput.emit(output=_("Query results:"), style='cmd')
@@ -147,14 +182,14 @@ class QueryDialog(wx.Dialog):
 
     def _textToRedirect(self):
         text = printResults(self._model, self._colNames[1])
-        text += '\n' + "-"* 50 + '\n'
+        text += '\n' + "-" * 50 + '\n'
         return text
 
     def _cutLabel(self, label):
         limit = 15
         if len(label) > limit:
             return label[:limit] + '...'
-            
+
         return label
 
     def _copyText(self, text):
@@ -205,17 +240,22 @@ def QueryTreeBuilder(data, column):
 
 def printResults(model, valueCol):
     """Print all results to string.
-    
+
     :param model: results tree model
     :param valueCol: column name with value to be printed
     """
     def printTree(node, textList, valueCol, indent=0):
         if node.data.get(valueCol, '') or node.children:
-            textList.append(indent*' ' + node.label + ': ' + node.data.get(valueCol, ''))
+            textList.append(
+                indent * ' ' + node.label + ': ' + node.data.get(valueCol, ''))
         for child in node.children:
-            printTree(node=child, textList=textList, valueCol=valueCol, indent=indent + 2)
-    
-    textList=[]
+            printTree(
+                node=child,
+                textList=textList,
+                valueCol=valueCol,
+                indent=indent + 2)
+
+    textList = []
     for child in model.root.children:
         printTree(node=child, textList=textList, valueCol=valueCol)
     return '\n'.join(textList)
@@ -248,16 +288,23 @@ def test():
     app = wx.App()
     from grass.script import vector as gvect
     from grass.script import raster as grast
-    testdata1 = grast.raster_what(map = ('elevation_shade at PERMANENT','landclass96'),
-                                  coord = [(638509.051416,224742.348346)],
-                                  localized=True)
+    testdata1 = grast.raster_what(
+        map=('elevation_shade at PERMANENT', 'landclass96'),
+        coord=[(638509.051416, 224742.348346)],
+        localized=True)
+
+    testdata2 = gvect.vector_what(
+        map=(
+            'firestations', 'bridges'), coord=(
+            633177.897487, 221352.921257), distance=10)
 
-    testdata2 = gvect.vector_what(map=('firestations','bridges'),
-                                  coord=(633177.897487,221352.921257), distance=10)
-    
     testdata = testdata1 + testdata2
-    data = PrepareQueryResults(coordinates = (638509.051416,224742.348346), result = testdata)
-    frame = QueryDialog(parent = None, data = data)
+    data = PrepareQueryResults(
+        coordinates=(
+            638509.051416,
+            224742.348346),
+        result=testdata)
+    frame = QueryDialog(parent=None, data=data)
     frame.ShowModal()
     frame.Destroy()
     app.MainLoop()
diff --git a/gui/wxpython/gui_core/simplelmgr.py b/gui/wxpython/gui_core/simplelmgr.py
index afb4846..3cbb2bc 100644
--- a/gui/wxpython/gui_core/simplelmgr.py
+++ b/gui/wxpython/gui_core/simplelmgr.py
@@ -29,6 +29,7 @@ from gui_core.dialogs import SetOpacityDialog
 from core.utils import GetLayerNameFromCmd
 from core.gcmd import GError
 from core.layerlist import LayerList
+from core.utils import _
 
 SIMPLE_LMGR_RASTER = 1
 SIMPLE_LMGR_VECTOR = 2
@@ -44,9 +45,11 @@ SIMPLE_LMGR_TB_RIGHT = 128
 class SimpleLayerManager(wx.Panel):
     """Simple layer manager class provides similar functionality to
     Layertree, but it's just list, not tree."""
-    def __init__(self, parent, layerList,
-                 lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_LEFT,
-                 toolbarCls=None, modal=False):
+
+    def __init__(
+            self, parent, layerList, lmgrStyle=SIMPLE_LMGR_RASTER |
+            SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_LEFT, toolbarCls=None,
+            modal=False):
         wx.Panel.__init__(self, parent=parent, name='SimpleLayerManager')
 
         self._style = lmgrStyle
@@ -66,8 +69,12 @@ class SimpleLayerManager(wx.Panel):
         # needed in order not to change selection when moving layers
         self._blockSelectionChanged = False
 
-        self._checkList.Bind(wx.EVT_LISTBOX, lambda evt: self._selectionChanged())
-        self._checkList.Bind(wx.EVT_LISTBOX_DCLICK, self.OnLayerChangeProperties)
+        self._checkList.Bind(
+            wx.EVT_LISTBOX,
+            lambda evt: self._selectionChanged())
+        self._checkList.Bind(
+            wx.EVT_LISTBOX_DCLICK,
+            self.OnLayerChangeProperties)
         self._checkList.Bind(wx.EVT_CHECKLISTBOX, self.OnLayerChecked)
         self._checkList.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
 
@@ -94,9 +101,9 @@ class SimpleLayerManager(wx.Panel):
                              CloseButton(False).
                              BestSize((self._checkList.GetBestSize())))
         paneInfo = wx.aui.AuiPaneInfo(). \
-                   Name("toolbar").Caption(_("Toolbar")).ToolbarPane(). \
-                   CloseButton(False).Layer(1).Gripper(False). \
-                   BestSize((self._toolbar.GetBestSize()))
+            Name("toolbar").Caption(_("Toolbar")).ToolbarPane(). \
+            CloseButton(False).Layer(1).Gripper(False). \
+            BestSize((self._toolbar.GetBestSize()))
         if self._style & SIMPLE_LMGR_TB_LEFT:
             paneInfo.Left()
         elif self._style & SIMPLE_LMGR_TB_RIGHT:
@@ -134,7 +141,12 @@ class SimpleLayerManager(wx.Panel):
                   _("Copy map names to clipboard (bottom to top)")]
         for label, text in zip(labels, texts):
             id = wx.NewId()
-            self.Bind(wx.EVT_MENU, lambda evt, t=text, id=id: self._copyText(t), id=id)
+            self.Bind(
+                wx.EVT_MENU,
+                lambda evt,
+                t=text,
+                id=id: self._copyText(t),
+                id=id)
 
             menu.Append(id, label)
 
@@ -146,7 +158,7 @@ class SimpleLayerManager(wx.Panel):
     def _copyText(self, text):
         """Helper function for copying
 
-        TODO: move to utils?        
+        TODO: move to utils?
         """
         if wx.TheClipboard.Open():
             do = wx.TextDataObject()
@@ -172,8 +184,8 @@ class SimpleLayerManager(wx.Panel):
         Dummy layer is added first."""
         cmd = ['d.rast']
         layer = self.AddRaster(name='', cmd=cmd, hidden=True, dialog=None)
-        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(cmd=cmd,
-                                                    completed=(self.GetOptData, layer, ''))
+        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(
+            cmd=cmd, completed=(self.GetOptData, layer, ''))
         event.Skip()
 
     def OnAddVector(self, event):
@@ -182,8 +194,8 @@ class SimpleLayerManager(wx.Panel):
         cmd = ['d.vect']
 
         layer = self.AddVector(name='', cmd=cmd, hidden=True, dialog=None)
-        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(cmd=cmd,
-                                                   completed=(self.GetOptData, layer, ''))
+        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(
+            cmd=cmd, completed=(self.GetOptData, layer, ''))
         event.Skip()
 
     def OnAddRast3d(self, event):
@@ -191,8 +203,8 @@ class SimpleLayerManager(wx.Panel):
         Dummy layer is added first."""
         cmd = ['d.rast3d']
         layer = self.AddRast3d(name='', cmd=cmd, hidden=True, dialog=None)
-        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(cmd=cmd,
-                                                   completed=(self.GetOptData, layer, ''))
+        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(
+            cmd=cmd, completed=(self.GetOptData, layer, ''))
         event.Skip()
 
     def OnAddRGB(self, event):
@@ -200,15 +212,16 @@ class SimpleLayerManager(wx.Panel):
         Dummy layer is added first."""
         cmd = ['d.rgb']
         layer = self.AddRGB(name='', cmd=cmd, hidden=True, dialog=None)
-        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(cmd=cmd,
-                                                    completed=(self.GetOptData, layer, ''))
+        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(
+            cmd=cmd, completed=(self.GetOptData, layer, ''))
         event.Skip()
 
     def OnRemove(self, event):
         """Removes selected layers from list."""
         layers = self._layerList.GetSelectedLayers(activeOnly=False)
         for layer in layers:
-            self.layerRemoved.emit(index=self._layerList.GetLayerIndex(layer), layer=layer)
+            self.layerRemoved.emit(
+                index=self._layerList.GetLayerIndex(layer), layer=layer)
             self._layerList.RemoveLayer(layer)
         self._update()
         self.anyChange.emit()
@@ -239,7 +252,8 @@ class SimpleLayerManager(wx.Panel):
         for layer in layers:
             idx = self._layerList.GetLayerIndex(layer)
             if idx < len(self._layerList) - 1:
-                self.layerMovedDown.emit(index=self._layerList.GetLayerIndex(layer), layer=layer)
+                self.layerMovedDown.emit(
+                    index=self._layerList.GetLayerIndex(layer), layer=layer)
                 self._layerList.MoveLayerDown(layer)
         self._update()
         self._blockSelectionChanged = False
@@ -256,9 +270,8 @@ class SimpleLayerManager(wx.Panel):
 
     def _layerChangeProperties(self, layer):
         """Opens new module dialog or recycles it."""
-        GUI(parent=self, giface=None,
-            modal=self._modal).ParseCommand(cmd=layer.cmd,
-                                            completed=(self.GetOptData, layer, ''))
+        GUI(parent=self, giface=None, modal=self._modal).ParseCommand(
+            cmd=layer.cmd, completed=(self.GetOptData, layer, ''))
 
     def OnLayerChangeOpacity(self, event):
         """Opacity of a layer is changing."""
@@ -279,9 +292,11 @@ class SimpleLayerManager(wx.Panel):
 
     def _setLayerOpacity(self, layer, value):
         """Sets layer's opacity.'"""
-        layer.opacity = value 
+        layer.opacity = value
         self._update()
-        self.opacityChanged.emit(index=self._layerList.GetLayerIndex(layer), layer=layer)
+        self.opacityChanged.emit(
+            index=self._layerList.GetLayerIndex(layer),
+            layer=layer)
         self.anyChange.emit()
 
     def _update(self):
@@ -297,8 +312,10 @@ class SimpleLayerManager(wx.Panel):
 
         for layer in self._layerList:
             if layer.opacity < 1:
-                items.append("{name} (opacity {opacity}%)".format(name=layer.name,
-                                                                  opacity=int(layer.opacity * 100)))
+                items.append(
+                    "{name} (opacity {opacity}%)".format(
+                        name=layer.name, opacity=int(
+                            layer.opacity * 100)))
             else:
                 items.append(layer.name)
             active.append(layer.IsActive())
@@ -329,7 +346,9 @@ class SimpleLayerManager(wx.Panel):
                         signal = self.cmdChanged
 
                     layer.name = mapName
-                    signal.emit(index=self._layerList.GetLayerIndex(layer), layer=layer)
+                    signal.emit(
+                        index=self._layerList.GetLayerIndex(layer),
+                        layer=layer)
                 except ValueError as e:
                     self._layerList.RemoveLayer(layer)
                     GError(parent=self,
@@ -387,6 +406,7 @@ class SimpleLmgrToolbar(BaseToolbar):
     Style of the toolbar can be changed (horizontal,
     vertical, which map types to include).
     """
+
     def __init__(self, parent, lmgrStyle):
         """Toolbar constructor
         """
@@ -406,17 +426,17 @@ class SimpleLmgrToolbar(BaseToolbar):
         """Toolbar data"""
         data = [('edit', icons['edit'],
                  self.parent.OnLayerChangeProperties),
-                 ('remove', icons['remove'],
+                ('remove', icons['remove'],
                  self.parent.OnRemove),
-                 (None, ),
-                 ('up', icons['up'],
+                (None, ),
+                ('up', icons['up'],
                  self.parent.OnLayerUp),
-                 ('down', icons['down'],
+                ('down', icons['down'],
                  self.parent.OnLayerDown),
-                 (None, ),
-                 ('opacity', icons['opacity'],
+                (None, ),
+                ('opacity', icons['opacity'],
                  self.parent.OnLayerChangeOpacity),
-                 ]
+                ]
         if self._style & SIMPLE_LMGR_RASTER3D:
             data.insert(0, ('addRaster3d', icons['addRast3d'],
                             self.parent.OnAddRast3d))
@@ -453,10 +473,11 @@ icons = {
                           label=_("Add 3D raster map layer"),
                           desc=_("Add 3D raster map layer")),
     'addRGB': MetaIcon(img='layer-rgb-add', label=_('Add RGB map layer'))
-    }
+}
 
 
 class TestFrame(wx.Frame):
+
     def __init__(self, parent):
         wx.Frame.__init__(self, parent=parent)
         SimpleLayerManager(parent=self, layerList=LayerList())
diff --git a/gui/wxpython/gui_core/toolbars.py b/gui/wxpython/gui_core/toolbars.py
index 8713092..f083e08 100644
--- a/gui/wxpython/gui_core/toolbars.py
+++ b/gui/wxpython/gui_core/toolbars.py
@@ -32,64 +32,65 @@ from grass.pydispatch.signal import Signal
 
 
 BaseIcons = {
-    'display'    : MetaIcon(img = 'show',
-                            label = _('Display map'),
-                            desc  =  _('Re-render modified map layers only')),
-    'render'     : MetaIcon(img = 'layer-redraw',
-                            label = _('Render map'),
-                            desc = _('Force re-rendering all map layers')),
-    'erase'      : MetaIcon(img = 'erase',
-                            label = _('Erase display'),
-                            desc = _('Erase display canvas with given background color')),
-    'pointer'    : MetaIcon(img = 'pointer',
-                            label = _('Pointer')),
-    'zoomIn'     : MetaIcon(img = 'zoom-in',
-                            label = _('Zoom in'),
-                            desc = _('Drag or click mouse to zoom')),
-    'zoomOut'    : MetaIcon(img = 'zoom-out',
-                            label = _('Zoom out'),
-                            desc = _('Drag or click mouse to unzoom')),
-    'zoomBack'   : MetaIcon(img = 'zoom-last',
-                            label = _('Return to previous zoom')),
-    'zoomMenu'   : MetaIcon(img = 'zoom-more',
-                            label = _('Various zoom options'),
-                            desc = _('Zoom to default or saved region, save to named region, ...')),
-    'zoomExtent' : MetaIcon(img = 'zoom-extent',
-                            label = _('Zoom to selected map layer(s)')),
-    'zoomRegion' : MetaIcon(img = 'zoom-region',
-                            label = _('Zoom to computational region extent')),
-    'pan'        : MetaIcon(img = 'pan',
-                            label = _('Pan'),
-                            desc = _('Drag with mouse to pan')),
-    'saveFile'   : MetaIcon(img = 'map-export',
-                            label = _('Save display to file')),
-    'print'      : MetaIcon(img = 'print',
-                            label = _('Print display')),
-    'font'       : MetaIcon(img = 'font',
-                            label = _('Select font')),
-    'help'       : MetaIcon(img = 'help',
-                            label = _('Show manual')),
-    'quit'       : MetaIcon(img = 'quit',
-                            label = _('Quit')),
-    'addRast'    : MetaIcon(img = 'layer-raster-add',
-                            label = _('Add raster map layer')),
-    'addVect'    : MetaIcon(img = 'layer-vector-add',
-                            label = _('Add vector map layer')),
-    'overlay'    : MetaIcon(img = 'overlay-add',
-                            label = _('Add map elements'),
-                            desc = _('Overlay elements like scale and legend onto map')),
-    'histogramD' : MetaIcon(img = 'layer-raster-histogram',
-                            label = _('Create histogram with d.histogram')),
-    'settings'   : MetaIcon(img = 'settings',
-                            label = _("Settings")),
-    }
-    
+    'display': MetaIcon(img='show',
+                        label=_('Display map'),
+                        desc=_('Re-render modified map layers only')),
+    'render': MetaIcon(img='layer-redraw',
+                       label=_('Render map'),
+                       desc=_('Force re-rendering all map layers')),
+    'erase': MetaIcon(img='erase',
+                      label=_('Erase display'),
+                      desc=_('Erase display canvas with given background color')),
+    'pointer': MetaIcon(img='pointer',
+                        label=_('Pointer')),
+    'zoomIn': MetaIcon(img='zoom-in',
+                       label=_('Zoom in'),
+                       desc=_('Drag or click mouse to zoom')),
+    'zoomOut': MetaIcon(img='zoom-out',
+                        label=_('Zoom out'),
+                        desc=_('Drag or click mouse to unzoom')),
+    'zoomBack': MetaIcon(img='zoom-last',
+                         label=_('Return to previous zoom')),
+    'zoomMenu': MetaIcon(img='zoom-more',
+                         label=_('Various zoom options'),
+                         desc=_('Zoom to default or saved region, save to named region, ...')),
+    'zoomExtent': MetaIcon(img='zoom-extent',
+                           label=_('Zoom to selected map layer(s)')),
+    'zoomRegion': MetaIcon(img='zoom-region',
+                           label=_('Zoom to computational region extent')),
+    'pan': MetaIcon(img='pan',
+                    label=_('Pan'),
+                    desc=_('Drag with mouse to pan')),
+    'saveFile': MetaIcon(img='map-export',
+                         label=_('Save display to file')),
+    'print': MetaIcon(img='print',
+                      label=_('Print display')),
+    'font': MetaIcon(img='font',
+                     label=_('Select font')),
+    'help': MetaIcon(img='help',
+                     label=_('Show manual')),
+    'quit': MetaIcon(img='quit',
+                     label=_('Quit')),
+    'addRast': MetaIcon(img='layer-raster-add',
+                        label=_('Add raster map layer')),
+    'addVect': MetaIcon(img='layer-vector-add',
+                        label=_('Add vector map layer')),
+    'overlay': MetaIcon(img='overlay-add',
+                        label=_('Add map elements'),
+                        desc=_('Overlay elements like scale and legend onto map')),
+    'histogramD': MetaIcon(img='layer-raster-histogram',
+                           label=_('Create histogram with d.histogram')),
+    'settings': MetaIcon(img='settings',
+                         label=_("Settings")),
+}
+
+
 class BaseToolbar(wx.ToolBar):
     """Abstract toolbar class.
-    
+
     Following code shows how to create new basic toolbar:
 
-    
+
         class MyToolbar(BaseToolbar):
             def __init__(self, parent):
                 BaseToolbar.__init__(self, parent)
@@ -100,36 +101,37 @@ class BaseToolbar(wx.ToolBar):
                 return self._getToolbarData((("help", Icons["help"],
                                               self.parent.OnHelp),
                                               ))
-    
+
     """
-    def __init__(self, parent, toolSwitcher=None, style=wx.NO_BORDER|wx.TB_HORIZONTAL):
+
+    def __init__(self, parent, toolSwitcher=None,
+                 style=wx.NO_BORDER | wx.TB_HORIZONTAL):
         self.parent = parent
         wx.ToolBar.__init__(self, parent=self.parent, id=wx.ID_ANY,
                             style=style)
-        
 
         self._default = None
         self.SetToolBitmapSize(globalvar.toolbarSize)
-        
+
         self.toolSwitcher = toolSwitcher
         self.handlers = {}
-        
+
     def InitToolbar(self, toolData):
         """Initialize toolbar, add tools to the toolbar
         """
         for tool in toolData:
             self.CreateTool(*tool)
-        
+
         self._data = toolData
-        
+
     def _toolbarData(self):
         """Toolbar data (virtual)"""
         return None
-    
+
     def CreateTool(self, label, bitmap, kind,
-                   shortHelp, longHelp, handler, pos = -1):
+                   shortHelp, longHelp, handler, pos=-1):
         """Add tool to the toolbar
-        
+
         :param pos: if -1 add tool, if > 0 insert at given pos
         :return: id of tool
         """
@@ -137,38 +139,38 @@ class BaseToolbar(wx.ToolBar):
         tool = -1
         if label:
             tool = vars(self)[label] = wx.NewId()
-            Debug.msg(3, "CreateTool(): tool=%d, label=%s bitmap=%s" % \
-                          (tool, label, bitmap))
+            Debug.msg(3, "CreateTool(): tool=%d, label=%s bitmap=%s" %
+                      (tool, label, bitmap))
             if pos < 0:
                 toolWin = self.AddLabelTool(tool, label, bitmap,
                                             bmpDisabled, kind,
                                             shortHelp, longHelp)
             else:
                 toolWin = self.InsertLabelTool(pos, tool, label, bitmap,
-                                            bmpDisabled, kind,
-                                            shortHelp, longHelp)
+                                               bmpDisabled, kind,
+                                               shortHelp, longHelp)
             self.handlers[tool] = handler
             self.Bind(wx.EVT_TOOL, handler, toolWin)
             self.Bind(wx.EVT_TOOL, self.OnTool, toolWin)
-        else: # separator
+        else:  # separator
             self.AddSeparator()
 
         return tool
 
-    def EnableLongHelp(self, enable = True):
+    def EnableLongHelp(self, enable=True):
         """Enable/disable long help
-        
+
         :param enable: True for enable otherwise disable
         """
         for tool in self._data:
-            if tool[0] == '': # separator
+            if tool[0] == '':  # separator
                 continue
 
             if enable:
                 self.SetToolLongHelp(vars(self)[tool[0]], tool[4])
             else:
                 self.SetToolLongHelp(vars(self)[tool[0]], "")
-        
+
     def OnTool(self, event):
         """Tool selected
         """
@@ -180,16 +182,16 @@ class BaseToolbar(wx.ToolBar):
     def SelectTool(self, id):
         self.ToggleTool(id, True)
         self.toolSwitcher.ToolChanged(id)
-        
+
         self.handlers[id](event=None)
 
     def SelectDefault(self):
         """Select default tool"""
         self.SelectTool(self._default)
-        
+
     def FixSize(self, width):
         """Fix toolbar width on Windows
-            
+
         .. todo::
             Determine why combobox causes problems here
         """
@@ -197,9 +199,9 @@ class BaseToolbar(wx.ToolBar):
             size = self.GetBestSize()
             self.SetSize((size[0] + width, size[1]))
 
-    def Enable(self, tool, enable = True):
+    def Enable(self, tool, enable=True):
         """Enable/Disable defined tool
-        
+
         :param tool: name
         :param enable: True to enable otherwise disable tool
         """
@@ -210,19 +212,19 @@ class BaseToolbar(wx.ToolBar):
             # this error was ignored for a long time
             raise AttributeError("Toolbar does not have a tool %s." % tool)
             return
-        
+
         self.EnableTool(id, enable)
 
-    def EnableAll(self, enable = True):
+    def EnableAll(self, enable=True):
         """Enable/Disable all tools
-        
+
         :param enable: True to enable otherwise disable tool
         """
         for item in self._toolbarData():
             if not item[0]:
                 continue
             self.Enable(item[0], enable)
-        
+
     def _getToolbarData(self, data):
         """Define tool
         """
@@ -231,73 +233,77 @@ class BaseToolbar(wx.ToolBar):
             retData.append(self._defineTool(*args))
         return retData
 
-    def _defineTool(self, name = None, icon = None, handler = None, item = wx.ITEM_NORMAL, pos = -1):
+    def _defineTool(self, name=None, icon=None, handler=None,
+                    item=wx.ITEM_NORMAL, pos=-1):
         """Define tool
         """
         if name:
             return (name, icon.GetBitmap(),
                     item, icon.GetLabel(), icon.GetDesc(),
                     handler, pos)
-        return ("", "", "", "", "", "") # separator
+        return ("", "", "", "", "", "")  # separator
 
     def _onMenu(self, data):
         """Toolbar pop-up menu"""
         menu = wx.Menu()
-        
+
         for icon, handler in data:
             item = wx.MenuItem(menu, wx.ID_ANY, icon.GetLabel())
             item.SetBitmap(icon.GetBitmap(self.parent.iconsize))
             menu.AppendItem(item)
             self.Bind(wx.EVT_MENU, handler, item)
-        
+
         self.PopupMenu(menu)
         menu.Destroy()
 
-    def CreateSelectionButton(self, tooltip = _("Select graphics tool")):
+    def CreateSelectionButton(self, tooltip=_("Select graphics tool")):
         """Add button to toolbar for selection of graphics drawing mode.
 
         Button must be custom (not toolbar tool) to set smaller width.
         """
         arrowPath = os.path.join(IMGDIR, 'small_down_arrow.png')
         if os.path.isfile(arrowPath) and os.path.getsize(arrowPath):
-            bitmap = wx.Bitmap(name = arrowPath)
+            bitmap = wx.Bitmap(name=arrowPath)
         else:
-            bitmap = wx.ArtProvider.GetBitmap(id = wx.ART_MISSING_IMAGE, client = wx.ART_TOOLBAR)
-        button =  wx.BitmapButton(parent=self, id=wx.ID_ANY, size=((-1, self.GetToolSize()[1])),
-                                  bitmap=bitmap, style=wx.NO_BORDER)
+            bitmap = wx.ArtProvider.GetBitmap(
+                id=wx.ART_MISSING_IMAGE, client=wx.ART_TOOLBAR)
+        button = wx.BitmapButton(parent=self, id=wx.ID_ANY, size=(
+            (-1, self.GetToolSize()[1])), bitmap=bitmap, style=wx.NO_BORDER)
         button.SetToolTipString(tooltip)
 
         return button
 
+
 class ToolSwitcher:
     """Class handling switching tools in toolbar and custom toggle buttons."""
+
     def __init__(self):
         self._groups = defaultdict(lambda: defaultdict(list))
         self._toolsGroups = defaultdict(list)
-        
+
         # emitted when tool is changed
         self.toggleToolChanged = Signal('ToolSwitcher.toggleToolChanged')
 
     def AddToolToGroup(self, group, toolbar, tool):
         """Adds tool from toolbar to group of exclusive tools.
-        
+
         :param group: name of group (e.g. 'mouseUse')
         :param toolbar: instance of toolbar
         :param tool: id of a tool from the toolbar
         """
         self._groups[group][toolbar].append(tool)
         self._toolsGroups[tool].append(group)
-        
+
     def AddCustomToolToGroup(self, group, btnId, toggleHandler):
         """Adds custom tool from to group of exclusive tools (some toggle button).
-        
+
         :param group: name of group (e.g. 'mouseUse')
         :param btnId: id of a tool (typically button)
         :param toggleHandler: handler to be called to switch the button
         """
         self._groups[group]['custom'].append((btnId, toggleHandler))
         self._toolsGroups[btnId].append(group)
-       
+
     def RemoveCustomToolFromGroup(self, tool):
         """Removes custom tool from group.
 
@@ -308,14 +314,14 @@ class ToolSwitcher:
         for group in self._toolsGroups[tool]:
             self._groups[group]['custom'] = \
                 [(bid, hdlr) for (bid, hdlr)
-                in self._groups[group]['custom'] if bid != tool]
-        
+                 in self._groups[group]['custom'] if bid != tool]
+
     def RemoveToolbarFromGroup(self, group, toolbar):
         """Removes toolbar from group.
-        
+
         Before toolbar is destroyed, it must be removed from group, too.
         Otherwise we can expect some DeadObject errors.
-        
+
         :param group: name of group (e.g. 'mouseUse')
         :param toolbar: instance of toolbar
         """
@@ -342,7 +348,7 @@ class ToolSwitcher:
 
     def ToolChanged(self, tool):
         """When any tool/button is pressed, other tools from group must be unchecked.
-        
+
         :param tool: id of a tool/button
         """
         for group in self._toolsGroups[tool]:
diff --git a/gui/wxpython/gui_core/treeview.py b/gui/wxpython/gui_core/treeview.py
index 03c88ad..44b131d 100644
--- a/gui/wxpython/gui_core/treeview.py
+++ b/gui/wxpython/gui_core/treeview.py
@@ -42,6 +42,7 @@ class AbstractTreeViewMixin(VirtualTree):
         itemActivated - attribute 'node'
         contextMenu - attribute 'node'
     """
+
     def __init__(self, model, parent, *args, **kw):
         self._model = model
         super(AbstractTreeViewMixin, self).__init__(parent=parent, *args, **kw)
@@ -51,16 +52,16 @@ class AbstractTreeViewMixin(VirtualTree):
         self.contextMenu = Signal('TreeView.contextMenu')
 
         self.Bind(wx.EVT_TREE_SEL_CHANGED, lambda evt:
-                                           self._emitSignal(evt.GetItem(), self.selectionChanged))
+                  self._emitSignal(evt.GetItem(), self.selectionChanged))
         self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, lambda evt:
-                                           self._emitSignal(evt.GetItem(), self.itemActivated))
+                  self._emitSignal(evt.GetItem(), self.itemActivated))
         self.Bind(wx.EVT_TREE_ITEM_MENU, lambda evt:
-                                           self._emitSignal(evt.GetItem(), self.contextMenu))
+                  self._emitSignal(evt.GetItem(), self.contextMenu))
 
     def SetModel(self, model):
         """Set tree model and refresh.
-        
-        :param model: tree model        
+
+        :param model: tree model
         """
         self._model = model
         self.RefreshItems()
@@ -107,7 +108,48 @@ class AbstractTreeViewMixin(VirtualTree):
         item = self.GetItemByIndex(index)
         self.SelectItem(item, select)
 
-    def _emitSignal(self, item, signal):
+    def ExpandNode(self, node, recursive=True):
+        """Expand items.
+
+        :param node: node representing item
+        :param recursive: True/False to expand all children
+        """
+        index = self._model.GetIndexOfNode(node)
+        item = self.GetItemByIndex(index)
+        if recursive:
+            self.ExpandAllChildren(item)
+        else:
+            self.Expand(item)
+        self.EnsureVisible(item)
+
+    def IsNodeExpanded(self, node):
+        """Check if node is expanded"""
+        index = self._model.GetIndexOfNode(node)
+        item = self.GetItemByIndex(index)
+
+        return self.IsExpanded(item)
+
+    def CollapseNode(self, node, recursive=True):
+        """Collapse items.
+
+        :param node: node representing item
+        :param recursive: True/False to collapse all children
+        """
+        index = self._model.GetIndexOfNode(node)
+        item = self.GetItemByIndex(index)
+        if recursive:
+            self.CollapseAllChildren(item)
+        else:
+            self.Collapse(item)
+
+    def RefreshNode(self, node, recursive=False):
+        """Refreshes node."""
+        index = self._model.GetIndexOfNode(node)
+        self.RefreshItem(index)
+        if recursive:
+            self.RefreshChildrenRecursively(self.GetItemByIndex(index))
+
+    def _emitSignal(self, item, signal, **kwargs):
         """Helper method for emitting signals.
 
         :param item: tree item
@@ -117,31 +159,36 @@ class AbstractTreeViewMixin(VirtualTree):
             return
         index = self.GetIndexOfItem(item)
         node = self._model.GetNodeByIndex(index)
-        signal.emit(node = node)
+        signal.emit(node=node, **kwargs)
 
 
 class TreeView(AbstractTreeViewMixin, wx.TreeCtrl):
     """Tree view class inheriting from wx.TreeCtrl"""
+
     def __init__(self, model, parent, *args, **kw):
         super(TreeView, self).__init__(parent=parent, model=model, *args, **kw)
         self.RefreshItems()
 
+
 class CTreeView(AbstractTreeViewMixin, CT.CustomTreeCtrl):
     """Tree view class inheriting from wx.TreeCtrl"""
+
     def __init__(self, model, parent, **kw):
         if hasAgw:
             style = 'agwStyle'
         else:
             style = 'style'
-        
+
         if style not in kw:
             kw[style] = CT.TR_HIDE_ROOT | CT.TR_FULL_ROW_HIGHLIGHT |\
                 CT.TR_HAS_BUTTONS | CT.TR_LINES_AT_ROOT | CT.TR_SINGLE
         super(CTreeView, self).__init__(parent=parent, model=model, **kw)
         self.SetBackgroundColour("white")
         self.RefreshItems()
-        
+
+
 class TreeListView(AbstractTreeViewMixin, ExpansionState, gizmos.TreeListCtrl):
+
     def __init__(self, model, parent, columns, **kw):
         self._columns = columns
         super(TreeListView, self).__init__(parent=parent, model=model, **kw)
@@ -150,8 +197,8 @@ class TreeListView(AbstractTreeViewMixin, ExpansionState, gizmos.TreeListCtrl):
         self.SetMainColumn(0)
         self.RefreshItems()
         # to solve events inconsitency
-        self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK,  lambda evt:
-                                           self._emitSignal(evt.GetItem(), self.contextMenu))
+        self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, lambda evt:
+                  self._emitSignal(evt.GetItem(), self.contextMenu))
         self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnRightClick)
 
     def OnGetItemText(self, index, column=0):
@@ -170,16 +217,18 @@ class TreeListView(AbstractTreeViewMixin, ExpansionState, gizmos.TreeListCtrl):
 
     def OnRightClick(self, event):
         """Select item on right click.
-        
-        With multiple selection we don't want to deselect all items        
+
+        With multiple selection we don't want to deselect all items
         """
         item = event.GetItem()
         if not self.IsSelected(item):
             self.SelectItem(item)
         event.Skip()
 
+
 class TreeFrame(wx.Frame):
     """Frame for testing purposes only."""
+
     def __init__(self, model=None):
         wx.Frame.__init__(self, None, title='Test tree')
 
@@ -199,7 +248,7 @@ class TreeFrame(wx.Frame):
     def OnSelChanged(self):
         print 'selected items: ' + \
               str([node.label for node in self.tree.GetSelected()])
-        
+
     def OnItemActivated(self, node):
         print 'activated: ' + node.label
 
@@ -209,12 +258,17 @@ def main():
     root = tree.root
     n1 = tree.AppendNode(parent=root, label='node1')
     n2 = tree.AppendNode(parent=root, label='node2')
-    n3 = tree.AppendNode(parent=root, label='node3') # pylint: disable=W0612
+    n3 = tree.AppendNode(parent=root, label='node3')  # pylint: disable=W0612
     n11 = tree.AppendNode(parent=n1, label='node11', data={'xxx': 'A'})
-    n12 = tree.AppendNode(parent=n1, label='node12', data={'xxx': 'B'}) # pylint: disable=W0612
-    n21 = tree.AppendNode(parent=n2, label='node21', data={'xxx': 'A'}) # pylint: disable=W0612
-    n111 = tree.AppendNode(parent=n11, label='node111', data={'xxx': 'A'}) # pylint: disable=W0612
-
+    n12 = tree.AppendNode(
+        parent=n1, label='node12', data={
+            'xxx': 'B'})  # pylint: disable=W0612
+    n21 = tree.AppendNode(
+        parent=n2, label='node21', data={
+            'xxx': 'A'})  # pylint: disable=W0612
+    n111 = tree.AppendNode(
+        parent=n11, label='node111', data={
+            'xxx': 'A'})  # pylint: disable=W0612
 
     app = wx.App()
     frame = TreeFrame(model=tree)
diff --git a/gui/wxpython/gui_core/vselect.py b/gui/wxpython/gui_core/vselect.py
new file mode 100644
index 0000000..0e5248b
--- /dev/null
+++ b/gui/wxpython/gui_core/vselect.py
@@ -0,0 +1,429 @@
+"""
+ at package gui_core.vselect
+
+ at brief wxGUI classes for interactive selection of vector
+features. Allows creating a new vector map from selected vector
+features or return their categories
+
+Classes:
+- vselect::VectorSelectList
+- vselect::VectorSelectDialog
+- vselect::VectorSelectBase
+- vselect::VectorSelectHighlighter
+
+(C) 2014-2015 by Matej Krejci, and the GRASS Development Team
+
+This program is free software under the GNU General Public License
+(>=v2). Read the file COPYING that comes with GRASS for details.
+
+ at author Matej Krejci <matejkrejci gmail.com> (mentor: Martin Landa)
+"""
+
+import string
+import random
+
+import wx
+import wx.lib.mixins.listctrl as listmix
+
+from core.utils import _
+from core.gcmd import GMessage, GError, GWarning
+from core.gcmd import RunCommand
+
+import grass.script as grass
+from grass.pydispatch.signal import Signal
+
+
+class VectorSelectList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin):
+    """Widget for managing vector features selected from map display
+    """
+
+    def __init__(self, parent):
+        wx.ListCtrl.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            style=wx.LC_REPORT | wx.BORDER_SUNKEN)
+        listmix.ListCtrlAutoWidthMixin.__init__(self)
+
+        self.InsertColumn(col=0, heading=_('category'))
+        self.InsertColumn(col=1, heading=_('type'))
+        self.SetColumnWidth(0, 100)
+        self.SetColumnWidth(1, 100)
+
+        self.index = 0
+        self.dictIndex = {}
+
+    def AddItem(self, item):
+        if 'Category' not in item:
+            return
+
+        pos = self.InsertStringItem(0, str(item['Category']))
+        self.SetStringItem(pos, 1, str(item['Type']))
+        self.dictIndex[str(item['Category'])] = pos
+
+    def RemoveItem(self, item):
+        index = self.dictIndex.get(str(item['Category']), -1)
+        if index > -1:
+            self.DeleteItem(index)
+
+
+class VectorSelectDialog(wx.Dialog):
+    """Dialog for managing vector features selected from map display"""
+
+    def __init__(self, parent, title=_("Select features"), size=(200, 300)):
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=title,
+            size=size,
+            style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER)
+
+        self._layout()
+
+    def AddWidget(self, widget, proportion=1, flag=wx.EXPAND):
+        self.mainSizer.Add(widget, proportion=proportion, flag=flag)
+        self.Layout()
+
+    def _layout(self):
+        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
+        self.SetSizer(self.mainSizer)
+
+        self.Show()
+
+
+class VectorSelectBase():
+    """@brief Main class of vector selection function
+
+    It allows selecting vector features from map display and to export
+    them as a new vector map. Current version allows selecting
+    features one-by-one by single click in map display.
+
+    This class can be initialized with (see CreateDialog()) or without
+    (see gselect) dialog (see VectorSelectDialog).
+    """
+
+    def __init__(self, parent, giface):
+        self.parent = parent
+        self._giface = giface
+        self.register = False
+        self.mapWin = self._giface.GetMapWindow()
+        self.mapDisp = giface.GetMapDisplay()
+        self.RegisterMapEvtHandler()
+
+        self.selectedFeatures = []
+        self.mapName = None  # chosen map for selecting features
+
+        self._dialog = None
+        self.onCloseDialog = None
+
+        self.updateLayer = Signal('VectorSelectBase.updateLayer')
+
+        self.painter = VectorSelectHighlighter(self.mapDisp, giface)
+
+    def CreateDialog(self, createButton=True):
+        """Create dialog
+
+        :param createButton: True to add 'create new map' button
+        """
+        if self._dialog:
+            return
+
+        self._dialog = VectorSelectDialog(parent=self.parent)
+        self._dialog.Bind(wx.EVT_CLOSE, self.OnCloseDialog)
+        if createButton:
+            createMap = wx.Button(
+                self._dialog, wx.ID_ANY, _("Create a new map"))
+            createMap.Bind(wx.EVT_BUTTON, self.OnExportMap)
+            self._dialog.AddWidget(createMap, proportion=0.1)
+        self.slist = VectorSelectList(self._dialog)
+        self.slist.Bind(wx.EVT_LIST_KEY_DOWN, self.OnDelete)
+        self.slist.Bind(wx.EVT_LIST_ITEM_RIGHT_CLICK, self.OnDeleteRow)
+        self._dialog.AddWidget(self.slist)
+
+        self.onCloseDialog = Signal('VectorSelectBase.onCloseDialog')
+
+    def OnDeleteRow(self, event=None):
+        """Delete row in widget
+        """
+        index = self.slist.GetFocusedItem()
+        category = self.slist.GetItemText(index)
+        for item in self.selectedFeatures:
+            if int(item['Category']) == int(category):
+                self.selectedFeatures.remove(item)
+                break
+        self.slist.DeleteItem(index)
+        self._draw()
+
+    def OnDelete(self, event):
+        """Delete row in widget by press key(delete)
+        """
+        keycode = event.GetKeyCode()
+        if keycode == wx.WXK_DELETE:
+            self.OnDeleteRow()
+
+    def RegisterMapEvtHandler(self):
+        if not self.register:
+            self.mapWin.RegisterMouseEventHandler(wx.EVT_LEFT_DOWN,
+                                                  self._onMapClickHandler,
+                                                  'cross')
+        self.register = True
+
+    def UnregisterMapEvtHandler(self):
+        """Unregistrates _onMapClickHandler from mapWin"""
+        if self.register:
+            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN,
+                                                    self._onMapClickHandler)
+        self.register = False
+
+    def OnClose(self):
+        self.selectedFeatures = []
+        self._draw()
+        self.UnregisterMapEvtHandler()
+
+    def OnCloseDialog(self, evt=None):
+        if not self.onCloseDialog:
+            return
+
+        self.onCloseDialog.emit()
+        self.selectedFeatures = []
+        self.painter.Clear()
+        self._dialog.Destroy()
+        self.UnregisterMapEvtHandler()
+
+    def Reset(self):
+        """Remove items from dialog list"""
+        self.selectedFeatures = []
+        if self._dialog:
+            self.slist.DeleteAllItems()
+            self._dialog.Raise()
+        self.RegisterMapEvtHandler()
+
+    def _onMapClickHandler(self, event):
+        """Registred handler for clicking on grass disp
+        """
+        if event == "unregistered":
+            return
+        vWhatDic = self.QuerySelectedMap()
+        if 'Category' in vWhatDic:
+            self.AddVecInfo(vWhatDic)
+            self._draw()
+            if self._dialog:
+                self._dialog.Raise()
+
+    def AddVecInfo(self, vInfoDictTMP):
+        """Update vector in list
+
+        Note: click on features add category
+              second click on the same vector remove category from list
+        """
+        if len(self.selectedFeatures) > 0:
+            for sel in self.selectedFeatures:
+                if sel['Category'] == vInfoDictTMP[
+                        'Category']:  # features is selected=> remove features
+                    self.selectedFeatures.remove(sel)
+                    if self._dialog:  # if dialog initilized->update dialog
+                        self.slist.RemoveItem(vInfoDictTMP)
+                    return True
+
+            self.selectedFeatures.append(vInfoDictTMP)
+            if self._dialog:
+                self.slist.AddItem(vInfoDictTMP)
+        else:  # only one is selected
+            self.selectedFeatures.append(vInfoDictTMP)
+            if self._dialog:
+                self.slist.AddItem(vInfoDictTMP)
+
+        if len(self.selectedFeatures) == 0:
+            return False
+
+        return True
+
+    def _draw(self):
+        """Call class 'VectorSelectHighlighter' to draw selected features"""
+        self.updateLayer.emit()
+        if len(self.selectedFeatures) > 0:
+            self.painter.SetLayer(self.selectedFeatures[0]['Layer'])
+            self.painter.SetMap(self.selectedFeatures[0]['Map'])
+            tmp = list()
+            for i in self.selectedFeatures:
+                tmp.append(i['Category'])
+
+            self.painter.SetCats(tmp)
+            self.painter.DrawSelected()
+        else:
+            self.painter.Clear()
+
+    def GetSelectedMap(self):
+        """Return name of selected map in layer tree"""
+        layerList = self._giface.GetLayerList()
+        layerSelected = layerList.GetSelectedLayer()
+        if layerSelected is None:
+            return None
+
+        if not layerSelected.maplayer.IsActive():
+            GWarning(_("Selected map <%s> has been disabled for rendering. "
+                       "Operation canceled.") % str(layerSelected), parent=self.mapWin)
+            return None
+
+        if layerSelected:
+            mapName = str(layerSelected)
+            if self.mapName is not None:
+                if self.mapName != mapName:
+                    self.Reset()
+        else:
+            mapName = None
+            self.UnregisterMapEvtHandler()
+            GError(_("No map layer selected. Operation canceled."))
+        return mapName
+
+    def QuerySelectedMap(self):
+        """Return w.what info from last clicked coords on display
+
+        """
+        self.mapName = self.GetSelectedMap()
+        if not self.mapName:
+            return {}
+
+        mapInfo = self.mapWin.GetMap()
+        threshold = 10.0 * (
+            (mapInfo.region['e'] - mapInfo.region['w']) / mapInfo.width)
+        try:
+            query = grass.vector_what(map=[self.mapName],
+                                      coord=self.mapWin.GetLastEN(),
+                                      distance=threshold, skip_attributes=True)
+        except grass.ScriptError:
+            GError(parent=self,
+                   message=_("Failed to query vector map(s) <%s>.") % self.map)
+            return None
+
+        return query[0]
+
+    def GetLineStringSelectedCats(self):
+        """Return line of categories separated by comma"""
+        strTMP = ''
+        for cat in self.selectedFeatures:
+            strTMP += str(cat['Category']) + ','
+        return strTMP[:-1]
+
+    def _id_generator(self, size=6,
+                      chars=string.ascii_uppercase + string.digits):
+        return ''.join(random.choice(chars) for _ in range(size))
+
+    def OnExportMap(self, event):
+        """Export selected features to a new map
+
+        Add new map layer to layer tree and checked it
+
+        @todo: set color of map to higlight color
+        """
+
+        if len(self.selectedFeatures) == 0:
+            GMessage(_('No features selected'))
+            return
+        lst = ''
+        for cat in self.selectedFeatures:  # build text string of categories for v.extract input
+            lst += str(cat['Category']) + ','
+        lst = lst[:-1]
+        outMap = str(self.selectedFeatures[0][
+                     'Map']) + '_selection' + str(self._id_generator(3))
+        ret, err = RunCommand('v.extract',
+                              input=self.selectedFeatures[0]['Map'],
+                              layer=self.selectedFeatures[0]['Layer'],
+                              output=outMap,
+                              cats=lst,
+                              getErrorMsg=True)
+        if ret == 0:
+            tree = self._giface.GetLayerTree()
+            if tree:
+                tree.AddLayer(ltype='vector', lname=outMap,
+                              lcmd=['d.vect', 'map=%s' % outMap],
+                              lchecked=True)
+
+                # TODO colorize new map
+                self.Reset()
+            else:
+                GMessage(_('Vector map <%s> was created') % outMap)
+                self.Reset()
+        else:
+            GError(_("Unable to create a new vector map.\n\nReason: %s") % err)
+
+    """
+    def SetSelectedCat(self, cats):
+        # allows setting selected vector categories by list of cats (per line)
+        info = self.QuerySelectedMap()
+        if 'Category' not in info:
+            return
+
+        for cat in cats.splitlines():
+            tmpDict = {}
+            tmpDict['Category'] = cat
+            tmpDict['Map'] = info['Map']
+            tmpDict['Layer'] = info['Layer']
+            tmpDict['Type'] = '-'
+            self.AddVecInfo(tmpDict)
+
+        self._draw()
+    """
+
+
+class VectorSelectHighlighter():
+    """Class for highlighting selected features on display
+
+    :param mapdisp: Map display frame
+    """
+
+    def __init__(self, mapdisp, giface):
+        self.qlayer = None
+        self.mapdisp = mapdisp
+        self.giface = giface
+        self.layerCat = {}
+        self.data = {}
+        self.data['Category'] = list()
+        self.data['Map'] = None
+        self.data['Layer'] = None
+
+    def SetMap(self, map):
+        self.data['Map'] = map
+
+    def SetLayer(self, layer):
+        self.data['Layer'] = layer
+
+    def SetCats(self, cats):
+        self.data['Category'] = cats
+
+    def Clear(self):
+        self.data['Category'] = list()
+        self.data['Map'] = None
+        self.data['Layer'] = None
+        self.mapdisp.RemoveQueryLayer()
+        self.giface.GetMapWindow().UpdateMap(render=False)
+
+    def DrawSelected(self):
+        """Highlight selected features"""
+        self.layerCat[int(self.data['Layer'])] = self.data['Category']
+
+        # add map layer with higlighted vector features
+        self.AddQueryMapLayer()  # -> self.qlayer
+        self.qlayer.SetOpacity(0.7)
+        self.giface.updateMap.emit(render=True, renderVector=True)
+
+    def AddQueryMapLayer(self):
+        """Redraw a map
+
+        :return: True if map has been redrawn, False if no map is given
+        """
+        if self.mapdisp.GetMap().GetLayerIndex(self.qlayer) < 0:
+            self.qlayer = None
+
+        if self.qlayer:
+            self.qlayer.SetCmd(
+                self.mapdisp.AddTmpVectorMapLayer(
+                    self.data['Map'],
+                    self.layerCat,
+                    addLayer=False))
+        else:
+            self.qlayer = self.mapdisp.AddTmpVectorMapLayer(
+                self.data['Map'], self.layerCat)
+
+        return self.qlayer
diff --git a/gui/wxpython/gui_core/widgets.py b/gui/wxpython/gui_core/widgets.py
index 359c344..3ea7625 100644
--- a/gui/wxpython/gui_core/widgets.py
+++ b/gui/wxpython/gui_core/widgets.py
@@ -14,6 +14,12 @@ Classes:
  - widgets::CoordinatesValidator
  - widgets::IntegerValidator
  - widgets::FloatValidator
+ - widgets::EmailValidator
+ - widgets::TimeISOValidator
+ - widgets::MapValidator
+ - widgets::NTCValidator
+ - widgets::SimpleValidator
+ - widgets::GenericValidator
  - widgets::GListCtrl
  - widgets::SearchModuleWidget
  - widgets::ManageSettingsWidget
@@ -21,6 +27,10 @@ Classes:
  - widgets::ColorTablesComboBox
  - widgets::BarscalesComboBox
  - widgets::NArrowsComboBox
+ - widgets::LayersList
+
+ at todo:
+ - move validators to a separate file gui_core/validators.py
 
 (C) 2008-2014 by the GRASS Development Team
 
@@ -31,11 +41,15 @@ This program is free software under the GNU General Public License
 @author Enhancements by Michael Barton <michael.barton asu.edu>
 @author Anna Kratochvilova <kratochanna gmail.com> (Google SoC 2011)
 @author Stepan Turek <stepan.turek seznam.cz> (ManageSettingsWidget - created from GdalSelect)
+ at author Matej Krejci <matejkrejci gmail.com> (Google GSoC 2014; EmailValidator, TimeISOValidator)
 """
 
 import os
 import sys
 import string
+import re
+from bisect import bisect
+from datetime import datetime
 
 import wx
 import wx.lib.mixins.listctrl as listmix
@@ -44,24 +58,26 @@ from wx.lib.stattext import GenStaticText
 from wx.lib.wordwrap import wordwrap
 import wx.combo
 try:
-    import wx.lib.agw.flatnotebook   as FN
+    import wx.lib.agw.flatnotebook as FN
 except ImportError:
-    import wx.lib.flatnotebook   as FN
+    import wx.lib.flatnotebook as FN
 try:
     from wx.lib.buttons import ThemedGenBitmapTextButton as BitmapTextButton
-except ImportError: # not sure about TGBTButton version
+except ImportError:  # not sure about TGBTButton version
     from wx.lib.buttons import GenBitmapTextButton as BitmapTextButton
 try:
     import wx.lib.agw.customtreectrl as CT
 except ImportError:
     import wx.lib.customtreectrl as CT
 
+from grass.script import core as grass
+
 from grass.pydispatch.signal import Signal
 
-from core        import globalvar
+from core import globalvar
 from core.utils import _
-from core.gcmd   import GMessage, GError
-from core.debug  import Debug
+from core.gcmd import GMessage, GError
+from core.debug import Debug
 
 
 class NotebookController:
@@ -73,6 +89,7 @@ class NotebookController:
     Methods inherited from notebook class must be delegated explicitly
     and other methods can be delegated by @c __getattr__.
     """
+
     def __init__(self, classObject, widget):
         """
         :param classObject: notebook class name (object, i.e. FlatNotebook)
@@ -105,7 +122,7 @@ class NotebookController:
             del kwargs['name']
         try:
             self.classObject.InsertPage(self.widget, **kwargs)
-        except TypeError, e:  # documentation says 'index', but certain versions of wx require 'n'
+        except TypeError as e:  # documentation says 'index', but certain versions of wx require 'n'
             kwargs['n'] = kwargs['index']
             del kwargs['index']
             self.classObject.InsertPage(self.widget, **kwargs)
@@ -176,7 +193,8 @@ class NotebookController:
         if page not in self.notebookPages:
             return -1
         for pageIndex in range(self.classObject.GetPageCount(self.widget)):
-            if self.notebookPages[page] == self.classObject.GetPage(self.widget, pageIndex):
+            if self.notebookPages[page] == self.classObject.GetPage(
+                    self.widget, pageIndex):
                 break
         return pageIndex
 
@@ -203,11 +221,14 @@ class NotebookController:
 
 class FlatNotebookController(NotebookController):
     """Controller specialized for FN.FlatNotebook subclasses"""
+
     def __init__(self, classObject, widget):
         NotebookController.__init__(self, classObject, widget)
 
     def BindPageChanged(self):
-        self.widget.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnRemoveHighlight)
+        self.widget.Bind(
+            FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+            self.OnRemoveHighlight)
 
     def GetPageIndexByName(self, page):
         """Get notebook page index
@@ -217,7 +238,8 @@ class FlatNotebookController(NotebookController):
         if page not in self.notebookPages:
             return -1
 
-        return self.classObject.GetPageIndex(self.widget, self.notebookPages[page])
+        return self.classObject.GetPageIndex(
+            self.widget, self.notebookPages[page])
 
     def InsertPage(self, **kwargs):
         """Insert a new page
@@ -236,6 +258,7 @@ class GNotebook(FN.FlatNotebook):
     Enables advanced style settings.
     Problems with hidden tabs and does not respect system colors (native look).
     """
+
     def __init__(self, parent, style, **kwargs):
         if globalvar.hasAgw:
             FN.FlatNotebook.__init__(self, parent, id=wx.ID_ANY,
@@ -276,6 +299,7 @@ class FormNotebook(wx.Notebook):
 
     Respects native look.
     """
+
     def __init__(self, parent, style):
         wx.Notebook.__init__(self, parent, id=wx.ID_ANY, style=style)
         self.controller = NotebookController(classObject=wx.Notebook,
@@ -310,6 +334,7 @@ class FormListbook(wx.Listbook):
 
     Respects native look.
     """
+
     def __init__(self, parent, style):
         wx.Listbook.__init__(self, parent, id=wx.ID_ANY, style=style)
         self.controller = NotebookController(classObject=wx.Listbook,
@@ -341,6 +366,7 @@ class FormListbook(wx.Listbook):
 
 class ScrolledPanel(SP.ScrolledPanel):
     """Custom ScrolledPanel to avoid strange behaviour concerning focus"""
+
     def __init__(self, parent, style=wx.TAB_TRAVERSAL):
         SP.ScrolledPanel.__init__(self, parent=parent, id=wx.ID_ANY,
                                   style=style)
@@ -351,8 +377,9 @@ class ScrolledPanel(SP.ScrolledPanel):
 
 class NumTextCtrl(wx.TextCtrl):
     """Class derived from wx.TextCtrl for numerical values only"""
-    def __init__(self, parent,  **kwargs):
-##        self.precision = kwargs.pop('prec')
+
+    def __init__(self, parent, **kwargs):
+        ##        self.precision = kwargs.pop('prec')
         wx.TextCtrl.__init__(self, parent=parent,
                              validator=NTCValidator(flag='DIGIT_ONLY'),
                              **kwargs)
@@ -376,11 +403,12 @@ class NumTextCtrl(wx.TextCtrl):
 
 class FloatSlider(wx.Slider):
     """Class derived from wx.Slider for floats"""
+
     def __init__(self, **kwargs):
         Debug.msg(1, "FloatSlider.__init__()")
         wx.Slider.__init__(self, **kwargs)
         self.coef = 1.
-        #init range
+        # init range
         self.minValueOrig = 0
         self.maxValueOrig = 1
 
@@ -401,22 +429,32 @@ class FloatSlider(wx.Slider):
         self.minValueOrig = minValue
         self.maxValueOrig = maxValue
         if abs(minValue) < 1 or abs(maxValue) < 1:
-            while (abs(minValue) < 1 and minValue != 0) or (abs(maxValue) < 1 and maxValue != 0):
+            while (abs(minValue) < 1 and minValue != 0) or (
+                    abs(maxValue) < 1 and maxValue != 0):
                 minValue *= 100
                 maxValue *= 100
                 self.coef *= 100
-            super(FloatSlider, self).SetValue(super(FloatSlider, self).GetValue() * self.coef)
+            super(
+                FloatSlider,
+                self).SetValue(
+                super(
+                    FloatSlider,
+                    self).GetValue() *
+                self.coef)
         super(FloatSlider, self).SetRange(minValue, maxValue)
-        Debug.msg(4, "FloatSlider.SetRange(): minValue = %f, maxValue = %f" % (minValue, maxValue))
+        Debug.msg(
+            4, "FloatSlider.SetRange(): minValue = %f, maxValue = %f" %
+            (minValue, maxValue))
 
     def GetValue(self):
         val = super(FloatSlider, self).GetValue()
-        Debug.msg(4, "FloatSlider.GetValue(): value = %f" % (val/self.coef))
-        return val/self.coef
+        Debug.msg(4, "FloatSlider.GetValue(): value = %f" % (val / self.coef))
+        return val / self.coef
 
 
 class SymbolButton(BitmapTextButton):
     """Button with symbol and label."""
+
     def __init__(self, parent, usage, label, **kwargs):
         """Constructor
 
@@ -452,7 +490,7 @@ class SymbolButton(BitmapTextButton):
     def DrawRecord(self, dc, size):
         """Draw record symbol"""
         dc.SetBrush(wx.Brush(wx.Colour(255, 0, 0)))
-        dc.DrawCircle(size[0]/2, size[1] / 2, size[0] / 2)
+        dc.DrawCircle(size[0] / 2, size[1] / 2, size[0] / 2)
 
     def DrawStop(self, dc, size):
         """Draw stop symbol"""
@@ -463,7 +501,7 @@ class SymbolButton(BitmapTextButton):
         """Draw play symbol"""
         dc.SetBrush(wx.Brush(wx.Colour(0, 255, 0)))
         points = (wx.Point(0, 0), wx.Point(0, size[1]), wx.Point(size[0],
-                  size[1] / 2))
+                                                                 size[1] / 2))
         dc.DrawPolygon(points)
 
     def DrawPause(self, dc, size):
@@ -477,7 +515,8 @@ class StaticWrapText(GenStaticText):
     """A Static Text widget that wraps its text to fit parents width,
     enlarging its height if necessary."""
 
-    def __init__(self, parent, id=wx.ID_ANY, label='', margin=0, *args, **kwds):
+    def __init__(self, parent, id=wx.ID_ANY,
+                 label='', margin=0, *args, **kwds):
         self._margin = margin
         self._initialLabel = label
         self.init = False
@@ -491,7 +530,8 @@ class StaticWrapText(GenStaticText):
             self.init = True
         parent = self.GetParent()
         newExtent = wx.ClientDC(parent).GetMultiLineTextExtent(self.GetLabel())
-        # when starting, width is very small and height is big which creates very high windows
+        # when starting, width is very small and height is big which creates
+        # very high windows
         if newExtent[0] < newExtent[1]:
             return (0, 0)
         return newExtent[:2]
@@ -514,6 +554,7 @@ class StaticWrapText(GenStaticText):
 
 
 class BaseValidator(wx.PyValidator):
+
     def __init__(self):
         wx.PyValidator.__init__(self)
 
@@ -557,10 +598,10 @@ class BaseValidator(wx.PyValidator):
         return True
 
     def TransferToWindow(self):
-        return True # Prevent wxDialog from complaining.
+        return True  # Prevent wxDialog from complaining.
 
     def TransferFromWindow(self):
-        return True # Prevent wxDialog from complaining.
+        return True  # Prevent wxDialog from complaining.
 
 
 class CoordinatesValidator(BaseValidator):
@@ -598,6 +639,7 @@ class CoordinatesValidator(BaseValidator):
 
 class IntegerValidator(BaseValidator):
     """Validator for floating-point input"""
+
     def __init__(self):
         BaseValidator.__init__(self)
         self.type = int
@@ -609,6 +651,7 @@ class IntegerValidator(BaseValidator):
 
 class FloatValidator(BaseValidator):
     """Validator for floating-point input"""
+
     def __init__(self):
         BaseValidator.__init__(self)
         self.type = float
@@ -617,8 +660,58 @@ class FloatValidator(BaseValidator):
         """Clone validator"""
         return FloatValidator()
 
+
+class EmailValidator(BaseValidator):
+    """Validator for email input"""
+
+    def __init__(self):
+        BaseValidator.__init__(self)
+
+    def Validate(self):
+        """Validate input"""
+        textCtrl = self.GetWindow()
+        text = textCtrl.GetValue()
+        if text:
+            if re.match(r'\b[\w.-]+@[\w.-]+.\w{2,4}\b', text) is None:
+                self._notvalid()
+                return False
+
+        self._valid()
+        return True
+
+    def Clone(self):
+        """Clone validator"""
+        return EmailValidator()
+
+
+class TimeISOValidator(BaseValidator):
+    """Validator for time ISO format (YYYY-MM-DD) input"""
+
+    def __init__(self):
+        BaseValidator.__init__(self)
+
+    def Validate(self):
+        """Validate input"""
+        textCtrl = self.GetWindow()
+        text = textCtrl.GetValue()
+        if text:
+            try:
+                datetime.strptime(text, '%Y-%m-%d')
+            except:
+                self._notvalid()
+                return False
+
+        self._valid()
+        return True
+
+    def Clone(self):
+        """Clone validator"""
+        return TimeISOValidator()
+
+
 class NTCValidator(wx.PyValidator):
     """validates input in textctrls, taken from wxpython demo"""
+
     def __init__(self, flag=None):
         wx.PyValidator.__init__(self)
         self.flag = flag
@@ -646,6 +739,7 @@ class SimpleValidator(wx.PyValidator):
     """This validator is used to ensure that the user has entered something
         into the text object editor dialog's text field.
     """
+
     def __init__(self, callback):
         """Standard constructor.
         """
@@ -677,7 +771,7 @@ class SimpleValidator(wx.PyValidator):
         error occurred.  We simply return True, as we don't do any data
         transfer.
         """
-        return True # Prevent wxDialog from complaining.
+        return True  # Prevent wxDialog from complaining.
 
     def TransferFromWindow(self):
         """Transfer data from window to validator.
@@ -686,13 +780,14 @@ class SimpleValidator(wx.PyValidator):
         error occurred.  We simply return True, as we don't do any data
         transfer.
         """
-        return True # Prevent wxDialog from complaining.
+        return True  # Prevent wxDialog from complaining.
 
 
 class GenericValidator(wx.PyValidator):
     """This validator checks condition and calls callback
     in case the condition is not fulfilled.
     """
+
     def __init__(self, condition, callback):
         """Standard constructor.
 
@@ -724,12 +819,33 @@ class GenericValidator(wx.PyValidator):
     def TransferToWindow(self):
         """Transfer data from validator to window.
         """
-        return True # Prevent wxDialog from complaining.
+        return True  # Prevent wxDialog from complaining.
 
     def TransferFromWindow(self):
         """Transfer data from window to validator.
         """
-        return True # Prevent wxDialog from complaining.
+        return True  # Prevent wxDialog from complaining.
+
+
+class MapValidator(GenericValidator):
+    """Validator for map name input
+
+    See G_legal_filename()
+    """
+
+    def __init__(self):
+        def _mapNameValidationFailed(ctrl):
+            message = _(
+                "Name <%(name)s> is not a valid name for GRASS map. "
+                "Please use only ASCII characters excluding %(chars)s "
+                "and space.") % {
+                'name': ctrl.GetValue(),
+                'chars': '/"\'@,=*~'}
+            GError(message, caption=_("Invalid name"))
+
+        GenericValidator.__init__(self,
+                                  grass.legal_name,
+                                  _mapNameValidationFailed)
 
 
 class SingleSymbolPanel(wx.Panel):
@@ -738,6 +854,7 @@ class SingleSymbolPanel(wx.Panel):
     Changes background when selected. Assumes that parent will catch
     events emitted on mouse click. Used in gui_core::dialog::SymbolDialog.
     """
+
     def __init__(self, parent, symbolPath):
         """Panel constructor
 
@@ -748,7 +865,8 @@ class SingleSymbolPanel(wx.Panel):
         :param parent: parent (gui_core::dialog::SymbolDialog)
         :param symbolPath: absolute path to symbol
         """
-        self.symbolSelectionChanged = Signal('SingleSymbolPanel.symbolSelectionChanged')
+        self.symbolSelectionChanged = Signal(
+            'SingleSymbolPanel.symbolSelectionChanged')
 
         wx.Panel.__init__(self, parent, id=wx.ID_ANY, style=wx.BORDER_RAISED)
         self.SetName(os.path.splitext(os.path.basename(symbolPath))[0])
@@ -759,7 +877,11 @@ class SingleSymbolPanel(wx.Panel):
         self.deselectColor = wx.SystemSettings.GetColour(wx.SYS_COLOUR_WINDOW)
 
         sizer = wx.BoxSizer()
-        sizer.Add(item = self.sBmp, proportion=0, flag=wx.ALL | wx.ALIGN_CENTER, border = 5)
+        sizer.Add(
+            item=self.sBmp,
+            proportion=0,
+            flag=wx.ALL | wx.ALIGN_CENTER,
+            border=5)
         self.SetBackgroundColour(self.deselectColor)
         self.SetMinSize(self.GetBestSize())
         self.SetSizerAndFit(sizer)
@@ -777,7 +899,8 @@ class SingleSymbolPanel(wx.Panel):
         self.Refresh()
         event.Skip()
 
-        self.symbolSelectionChanged.emit(name=self.GetName(), doubleClick=False)
+        self.symbolSelectionChanged.emit(
+            name=self.GetName(), doubleClick=False)
 
     def OnDoubleClick(self, event):
         self.symbolSelectionChanged.emit(name=self.GetName(), doubleClick=True)
@@ -795,9 +918,11 @@ class SingleSymbolPanel(wx.Panel):
         self.Refresh()
 
 
-class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
+class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin,
+                listmix.CheckListCtrlMixin):
     """Generic ListCtrl with popup menu to select/deselect all
     items"""
+
     def __init__(self, parent):
         self.parent = parent
 
@@ -808,12 +933,8 @@ class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCt
         # setup mixins
         listmix.ListCtrlAutoWidthMixin.__init__(self)
 
-        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnPopupMenu) #wxMSW
-        self.Bind(wx.EVT_RIGHT_UP,            self.OnPopupMenu) #wxGTK
-
-    def LoadData(self):
-        """Load data into list"""
-        pass
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnPopupMenu)  # wxMSW
+        self.Bind(wx.EVT_RIGHT_UP, self.OnPopupMenu)  # wxGTK
 
     def OnPopupMenu(self, event):
         """Show popup menu"""
@@ -824,7 +945,7 @@ class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCt
             self.popupDataID1 = wx.NewId()
             self.popupDataID2 = wx.NewId()
 
-            self.Bind(wx.EVT_MENU, self.OnSelectAll,  id=self.popupDataID1)
+            self.Bind(wx.EVT_MENU, self.OnSelectAll, id=self.popupDataID1)
             self.Bind(wx.EVT_MENU, self.OnSelectNone, id=self.popupDataID2)
 
         # generate popup-menu
@@ -859,6 +980,53 @@ class GListCtrl(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCt
 
         event.Skip()
 
+    def GetData(self, checked=None):
+        """Get list data"""
+        data = []
+        checkedList = []
+
+        item = -1
+        while True:
+
+            row = []
+            item = self.GetNextItem(item)
+            if item == -1:
+                break
+
+            isChecked = self.IsChecked(item)
+            if checked is not None and checked != isChecked:
+                continue
+
+            checkedList.append(isChecked)
+
+            for i in range(self.GetColumnCount()):
+                row.append(self.GetItem(item, i).GetText())
+
+            row.append(item)
+            data.append(tuple(row))
+
+        if checked is not None:
+            return tuple(data)
+        else:
+            return (tuple(data), tuple(checkedList))
+
+    def LoadData(self, data=None, selectOne=True):
+        """Load data into list"""
+        self.DeleteAllItems()
+        if data is None:
+            return
+
+        idx = 0
+        for item in data:
+            index = self.InsertStringItem(idx, str(item[0]))
+            for i in range(1, self.GetColumnCount()):
+                self.SetStringItem(index, i, item[i])
+            idx += 1
+
+        # check by default only on one item
+        if len(data) == 1 and selectOne:
+            self.CheckItem(index, True)
+
 
 class SearchModuleWidget(wx.Panel):
     """Search module widget (used e.g. in SearchModuleWindow)
@@ -868,12 +1036,13 @@ class SearchModuleWidget(wx.Panel):
         showSearchResult - attribute 'result' is a node (representing module)
         showNotification - attribute 'message'
     """
+
     def __init__(self, parent, model,
                  showChoice=True, showTip=False, **kwargs):
         self._showTip = showTip
         self._showChoice = showChoice
         self._model = model
-        self._results = [] # list of found nodes
+        self._results = []  # list of found nodes
         self._resultIndex = -1
         self._searchKeys = ['description', 'keywords', 'command']
         self._oldValue = ''
@@ -885,27 +1054,32 @@ class SearchModuleWidget(wx.Panel):
         wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY, **kwargs)
 
 #        self._box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-#                                label = " %s " % _("Find module - (press Enter for next match)"))
+# label = " %s " % _("Find module - (press Enter for next match)"))
 
         if sys.platform == 'win32':
-            self._search = wx.TextCtrl(parent = self, id = wx.ID_ANY,
-                                       size = (-1, 25), style = wx.TE_PROCESS_ENTER)
+            self._search = wx.TextCtrl(
+                parent=self, id=wx.ID_ANY, size=(-1, 25),
+                style=wx.TE_PROCESS_ENTER)
         else:
-            self._search = wx.SearchCtrl(parent = self, id = wx.ID_ANY,
-                                         size = (-1, 25), style = wx.TE_PROCESS_ENTER)
+            self._search = wx.SearchCtrl(
+                parent=self, id=wx.ID_ANY, size=(-1, 25),
+                style=wx.TE_PROCESS_ENTER)
             self._search.SetDescriptiveText(_('Fulltext search'))
-            self._search.SetToolTipString(_("Type to search in all modules. Press Enter for next match."))
+            self._search.SetToolTipString(
+                _("Type to search in all modules. Press Enter for next match."))
 
         self._search.Bind(wx.EVT_TEXT, self.OnSearchModule)
         self._search.Bind(wx.EVT_TEXT_ENTER, self.OnEnter)
 
         if self._showTip:
-            self._searchTip = StaticWrapText(parent = self, id = wx.ID_ANY,
-                                             size = (-1, 35))
+            self._searchTip = StaticWrapText(parent=self, id=wx.ID_ANY,
+                                             size=(-1, 35))
 
         if self._showChoice:
             self._searchChoice = wx.Choice(parent=self, id=wx.ID_ANY)
-            self._searchChoice.SetItems(self._searchModule(keys=['command'], value=''))
+            self._searchChoice.SetItems(
+                self._searchModule(
+                    keys=['command'], value=''))
             self._searchChoice.Bind(wx.EVT_CHOICE, self.OnSelectModule)
 
         self._layout()
@@ -927,7 +1101,7 @@ class SearchModuleWidget(wx.Panel):
             boxSizer.Add(item=hSizer, flag=wx.EXPAND)
         if self._showTip:
             boxSizer.Add(item=self._searchTip,
-                          flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
 
         sizer.Add(item=boxSizer, proportion=1)
 
@@ -955,10 +1129,11 @@ class SearchModuleWidget(wx.Panel):
         self._oldValue = value
 
         if len(value) <= 2:
-            if len(value) == 0: # reset
+            if len(value) == 0:  # reset
                 commands = self._searchModule(keys=['command'], value='')
             else:
-                self.showNotification.emit(message=_("Searching, please type more characters."))
+                self.showNotification.emit(
+                    message=_("Searching, please type more characters."))
                 return
         else:
             commands = self._searchModule(keys=self._searchKeys, value=value)
@@ -989,14 +1164,14 @@ class SearchModuleWidget(wx.Panel):
         nodes.sort(key=lambda node: self._model.GetIndexOfNode(node))
         self._results = nodes
         self._resultIndex = -1
-        commands = [node.data['command'] for node in nodes if node.data['command']]
-        commands.sort() # return sorted list of commands (TODO: sort in better way)
+        commands = sorted([node.data['command']
+                           for node in nodes if node.data['command']])
 
         return commands
 
     def OnSelectModule(self, event):
         """Module selected from choice, update command prompt"""
-        cmd  = self._searchChoice.GetStringSelection()
+        cmd = self._searchChoice.GetStringSelection()
         self.moduleSelected.emit(name=cmd)
 
         if self._showTip:
@@ -1014,6 +1189,7 @@ class SearchModuleWidget(wx.Panel):
 
 class ManageSettingsWidget(wx.Panel):
     """Widget which allows loading and saving settings into file."""
+
     def __init__(self, parent, settingsFile):
         """
         Signals:
@@ -1036,7 +1212,7 @@ class ManageSettingsWidget(wx.Panel):
         wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
 
         self.settingsBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
-                                        label=" %s " % _("Settings"))
+                                        label=" %s " % _("Profiles"))
 
         self.settingsChoice = wx.Choice(parent=self, id=wx.ID_ANY)
         self.settingsChoice.Bind(wx.EVT_CHOICE, self.OnSettingsChanged)
@@ -1045,13 +1221,14 @@ class ManageSettingsWidget(wx.Panel):
         self.btnSettingsSave.SetToolTipString(_("Save current settings"))
         self.btnSettingsDel = wx.Button(parent=self, id=wx.ID_REMOVE)
         self.btnSettingsDel.Bind(wx.EVT_BUTTON, self.OnSettingsDelete)
-        self.btnSettingsSave.SetToolTipString(_("Delete currently selected settings"))
+        self.btnSettingsSave.SetToolTipString(
+            _("Delete currently selected settings"))
 
         # escaping with '$' character - index in self.esc_chars
         self.e_char_i = 0
         self.esc_chars = ['$', ';']
 
-        self._settings = self._loadSettings() # -> self.settingsChoice.SetItems()
+        self._settings = self._loadSettings()  # -> self.settingsChoice.SetItems()
         self.settingsLoaded.emit(settings=self._settings)
 
         self.data_to_save = []
@@ -1064,12 +1241,18 @@ class ManageSettingsWidget(wx.Panel):
     def _layout(self):
 
         self.settingsSizer = wx.StaticBoxSizer(self.settingsBox, wx.HORIZONTAL)
-        self.settingsSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
-                                                  label=_("Load settings:")),
-                               flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.LEFT,
-                               border=5)
-        self.settingsSizer.Add(item=self.settingsChoice,
-                               proportion=1, flag=wx.EXPAND | wx.BOTTOM, border=3)
+        self.settingsSizer.Add(
+            item=wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Load:")),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.LEFT,
+            border=5)
+        self.settingsSizer.Add(
+            item=self.settingsChoice,
+            proportion=1,
+            flag=wx.EXPAND | wx.BOTTOM,
+            border=3)
         self.settingsSizer.Add(item=self.btnSettingsSave,
                                flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=3)
         self.settingsSizer.Add(item=self.btnSettingsDel,
@@ -1079,8 +1262,8 @@ class ManageSettingsWidget(wx.Panel):
         """Load named settings"""
         name = event.GetString()
         if name not in self._settings:
-            GError(parent = self,
-                   message = _("Settings <%s> not found") % name)
+            GError(parent=self,
+                   message=_("Settings <%s> not found") % name)
             return
 
         data = self._settings[name]
@@ -1108,10 +1291,14 @@ class ManageSettingsWidget(wx.Panel):
     def SaveSettings(self, name):
         # check if settings item already exists
         if name in self._settings:
-            dlgOwt = wx.MessageDialog(self, message=_("Settings <%s> already exists. "
-                                                      "Do you want to overwrite the settings?") % name,
-                                      caption=_("Save settings"),
-                                      style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlgOwt = wx.MessageDialog(
+                self,
+                message=_(
+                    "Settings <%s> already exists. "
+                    "Do you want to overwrite the settings?") %
+                name,
+                caption=_("Save settings"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlgOwt.ShowModal() != wx.ID_YES:
                 dlgOwt.Destroy()
                 return
@@ -1157,8 +1344,8 @@ class ManageSettingsWidget(wx.Panel):
         """
         name = self.settingsChoice.GetStringSelection()
         if not name:
-            GMessage(parent = self,
-                     message = _("No settings is defined. Operation canceled."))
+            GMessage(parent=self,
+                     message=_("No settings is defined. Operation canceled."))
             return
 
         self._settings.pop(name)
@@ -1179,11 +1366,15 @@ class ManageSettingsWidget(wx.Panel):
                 for v in values:
                     # escaping characters
                     for e_ch in self.esc_chars:
-                        v = v.replace(e_ch, self.esc_chars[self.e_char_i] + e_ch)
+                        v = v.replace(
+                            e_ch, self.esc_chars[
+                                self.e_char_i] + e_ch)
                     if first:
                         # escaping characters
                         for e_ch in self.esc_chars:
-                            key = key.replace(e_ch, self.esc_chars[self.e_char_i] + e_ch)
+                            key = key.replace(
+                                e_ch, self.esc_chars[
+                                    self.e_char_i] + e_ch)
                         fd.write('%s;%s;' % (key, v))
                         first = False
                     else:
@@ -1191,8 +1382,8 @@ class ManageSettingsWidget(wx.Panel):
                 fd.write('\n')
 
         except IOError:
-            GError(parent = self,
-                   message = _("Unable to save settings"))
+            GError(parent=self,
+                   message=_("Unable to save settings"))
             return -1
         fd.close()
 
@@ -1261,18 +1452,20 @@ class ManageSettingsWidget(wx.Panel):
                         # $$$$$; - it is not separator
                         i_esc_chars = 0
                         while True:
-                            if line[idx - (i_esc_chars + 1)] == self.esc_chars[self.e_char_i]:
+                            if line[idx - (i_esc_chars + 1)
+                                    ] == self.esc_chars[self.e_char_i]:
                                 i_esc_chars += 1
                             else:
                                 break
-                        if i_esc_chars%2 != 0:
+                        if i_esc_chars % 2 != 0:
                             i_last = idx + 1
                             continue
 
-                    lineItem = line[i_last_found : idx]
+                    lineItem = line[i_last_found: idx]
                     # unescape characters
                     for e_ch in self.esc_chars:
-                        lineItem = lineItem.replace(self.esc_chars[self.e_char_i] + e_ch, e_ch)
+                        lineItem = lineItem.replace(
+                            self.esc_chars[self.e_char_i] + e_ch, e_ch)
                     if i_last_found == 0:
                         key = lineItem
                     else:
@@ -1300,19 +1493,31 @@ class ManageSettingsWidget(wx.Panel):
                 lineData = line.rstrip('\n').split(';')
                 if len(lineData) > 4:
                     # type, dsn, format, options
-                    data[lineData[0]] = (lineData[1], lineData[2], lineData[3], lineData[4])
+                    data[
+                        lineData[0]] = (
+                        lineData[1],
+                        lineData[2],
+                        lineData[3],
+                        lineData[4])
                 else:
-                    data[lineData[0]] = (lineData[1], lineData[2], lineData[3], '')
+                    data[
+                        lineData[0]] = (
+                        lineData[1],
+                        lineData[2],
+                        lineData[3],
+                        '')
             except ValueError:
                 pass
 
         return data
 
+
 class PictureComboBox(wx.combo.OwnerDrawnComboBox):
     """Abstract class of ComboBox with pictures.
 
         Derived class has to specify has to specify _getPath method.
     """
+
     def OnDrawItem(self, dc, rect, item, flags):
         """Overridden from OwnerDrawnComboBox.
 
@@ -1328,7 +1533,8 @@ class PictureComboBox(wx.combo.OwnerDrawnComboBox):
         # for painting the items in the popup
         bitmap = self.GetPictureBitmap(self.GetString(item))
         if bitmap:
-            dc.DrawBitmap(bitmap, r.x, r.y + (r.height - bitmap.GetHeight()) / 2)
+            dc.DrawBitmap(
+                bitmap, r.x, r.y + (r.height - bitmap.GetHeight()) / 2)
             width = bitmap.GetWidth() + 10
         else:
             width = 0
@@ -1366,26 +1572,89 @@ class ColorTablesComboBox(PictureComboBox):
     """ComboBox with drawn color tables (created by thumbnails.py).
 
     Used in r(3).colors dialog."""
+
     def _getPath(self, name):
-        return os.path.join(os.getenv("GISBASE"), "docs", "html", "colortables", "%s.png" % name)
+        return os.path.join(
+            os.getenv("GISBASE"),
+            "docs", "html", "colortables", "%s.png" % name)
 
 
 class BarscalesComboBox(PictureComboBox):
     """ComboBox with barscales for d.barscale."""
+
     def _getPath(self, name):
-        return os.path.join(os.getenv("GISBASE"), "docs", "html", "barscales", name + '.png')
+        return os.path.join(
+            os.getenv("GISBASE"),
+            "docs", "html", "barscales", name + '.png')
 
 
 class NArrowsComboBox(PictureComboBox):
     """ComboBox with north arrows for d.barscale."""
+
     def _getPath(self, name):
-        path = os.path.join(os.getenv("GISBASE"), "gui", "images",
-                            'symbols', 'n_arrows')
-        try:
-            int(name[0])
-            return os.path.join(path, 'n_arrow{name}.png'.format(name=name))
-        except ValueError:
-            return os.path.join(path, '{name}.png'.format(name=name))
+        return os.path.join(
+            os.getenv("GISBASE"),
+            "docs", "html", "northarrows", "%s.png" % name)
 
-    def OnMeasureItem(self, item):
-        return 32
+
+class LayersList(GListCtrl, listmix.TextEditMixin):
+    """List of layers to be imported (dxf, shp...)"""
+
+    def __init__(self, parent, columns, log=None):
+        GListCtrl.__init__(self, parent)
+
+        self.log = log
+
+        # setup mixins
+        listmix.TextEditMixin.__init__(self)
+
+        for i in range(len(columns)):
+            self.InsertColumn(i, columns[i])
+
+        width = []
+        if len(columns) == 3:
+            width = (65, 200)
+        elif len(columns) == 4:
+            width = (65, 200, 90)
+        elif len(columns) == 5:
+            width = (65, 180, 90, 70)
+
+        for i in range(len(width)):
+            self.SetColumnWidth(col=i, width=width[i])
+
+    def OnLeftDown(self, event):
+        """Allow editing only output name
+
+        Code taken from TextEditMixin class.
+        """
+        x, y = event.GetPosition()
+
+        colLocs = [0]
+        loc = 0
+        for n in range(self.GetColumnCount()):
+            loc = loc + self.GetColumnWidth(n)
+            colLocs.append(loc)
+
+        col = bisect(colLocs, x + self.GetScrollPos(wx.HORIZONTAL)) - 1
+
+        if col == self.GetColumnCount() - 1:
+            listmix.TextEditMixin.OnLeftDown(self, event)
+        else:
+            event.Skip()
+
+    def GetLayers(self):
+        """Get list of layers (layer name, output name, list id)"""
+        layers = []
+
+        data = self.GetData(checked=True)
+
+        for itm in data:
+
+            layer = itm[1]
+            ftype = itm[2]
+            if '/' in ftype:
+                layer += '|%s' % ftype.split('/', 1)[0]
+            output = itm[self.GetColumnCount() - 1]
+            layers.append((layer, output, itm[-1]))
+
+        return layers
diff --git a/gui/wxpython/iclass/__init__.py b/gui/wxpython/iclass/__init__.py
index 73c582a..79322f4 100644
--- a/gui/wxpython/iclass/__init__.py
+++ b/gui/wxpython/iclass/__init__.py
@@ -6,4 +6,4 @@ all = [
     'toolbars',
     'statistics',
     'frame',
-    ]
+]
diff --git a/gui/wxpython/iclass/dialogs.py b/gui/wxpython/iclass/dialogs.py
index fdeec9b..d5ef960 100644
--- a/gui/wxpython/iclass/dialogs.py
+++ b/gui/wxpython/iclass/dialogs.py
@@ -25,41 +25,47 @@ import wx
 import wx.lib.mixins.listctrl as listmix
 import wx.lib.scrolledpanel as scrolled
 
-from core               import globalvar
+from core import globalvar
 from core.utils import _
-from core.settings      import UserSettings
-from core.gcmd          import GError, RunCommand, GMessage
-from gui_core.dialogs   import SimpleDialog, GroupDialog
-from gui_core           import gselect
-from gui_core.widgets   import SimpleValidator
-from iclass.statistics  import Statistics, BandStatistics
+from core.settings import UserSettings
+from core.gcmd import GError, RunCommand, GMessage
+from gui_core.dialogs import SimpleDialog, GroupDialog
+from gui_core import gselect
+from gui_core.widgets import SimpleValidator
+from iclass.statistics import Statistics, BandStatistics
 
 import grass.script as grass
 
+
 class IClassGroupDialog(SimpleDialog):
     """Dialog for imagery group selection"""
-    def __init__(self, parent, group = None, subgroup = None, 
-                 title = _("Select imagery group"), id = wx.ID_ANY):
+
+    def __init__(self, parent, group=None, subgroup=None,
+                 title=_("Select imagery group"), id=wx.ID_ANY):
         """
         Does post init and layout.
-        
+
         :param parent: gui parent
         :param title: dialog window title
         :param id: wx id
         """
         SimpleDialog.__init__(self, parent, title)
-        
+
         self.use_subg = True
 
-        self.groupSelect = gselect.Select(parent = self.panel, type = 'group',
-                                      mapsets = [grass.gisenv()['MAPSET']],
-                                      size = globalvar.DIALOG_GSELECT_SIZE,
-                                      validator = SimpleValidator(callback = self.ValidatorCallback))
+        self.groupSelect = gselect.Select(
+            parent=self.panel,
+            type='group',
+            mapsets=[
+                grass.gisenv()['MAPSET']],
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
 
         # TODO use when subgroup will be optional
-        #self.subg_chbox = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
+        # self.subg_chbox = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
         #                              label = _("Use subgroup"))
-        self.subGroupSelect = gselect.SubGroupSelect(parent = self.panel)
+        self.subGroupSelect = gselect.SubGroupSelect(parent=self.panel)
 
         self.groupSelect.SetFocus()
         if group:
@@ -68,12 +74,13 @@ class IClassGroupDialog(SimpleDialog):
         if subgroup:
             self.subGroupSelect.SetValue(subgroup)
 
-        self.editGroup = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                   label = _("Create/edit group..."))
+        self.editGroup = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                   label=_("Create/edit group..."))
 
         self.editGroup.Bind(wx.EVT_BUTTON, self.OnEditGroup)
-        self.groupSelect.GetTextCtrl().Bind(wx.EVT_TEXT, 
-                                           lambda event : wx.CallAfter(self.GroupSelected))
+        self.groupSelect.GetTextCtrl().Bind(
+            wx.EVT_TEXT, lambda event: wx.CallAfter(
+                self.GroupSelected))
 
         self.warning = _("Name of imagery group is missing.")
         self._layout()
@@ -81,33 +88,37 @@ class IClassGroupDialog(SimpleDialog):
 
     def _layout(self):
         """Do layout"""
-        self.dataSizer.Add(wx.StaticText(self.panel, id = wx.ID_ANY,
-                                         label = _("Name of imagery group:")),
-                                         proportion = 0, 
-                                         flag = wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT,
-                                         border = 5)
-        self.dataSizer.Add(self.groupSelect, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        
-        # TODO use when subgroup will be optional
-        #self.dataSizer.Add(self.subg_chbox, proportion = 0,
-        #              flag = wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border = 5)
-
-        self.dataSizer.Add(wx.StaticText(self.panel, id = wx.ID_ANY,
-                                         label = _("Name of imagery subgroup:")),
-                           proportion = 0, flag = wx.EXPAND | wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT,
-                           border = 5)
-        self.dataSizer.Add(self.subGroupSelect, proportion = 0,
-                       flag = wx.EXPAND | wx.ALL, border = 5)
+        self.dataSizer.Add(wx.StaticText(self.panel, id=wx.ID_ANY,
+                                         label=_("Name of imagery group:")),
+                           proportion=0,
+                           flag=wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT,
+                           border=5)
+        self.dataSizer.Add(self.groupSelect, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=5)
 
-        self.dataSizer.Add(self.editGroup, proportion = 0,
-                      flag = wx.ALL, border = 5)
+        # TODO use when subgroup will be optional
+        # self.dataSizer.Add(self.subg_chbox, proportion = 0,
+        # flag = wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border = 5)
+
+        self.dataSizer.Add(
+            wx.StaticText(
+                self.panel,
+                id=wx.ID_ANY,
+                label=_("Name of imagery subgroup:")),
+            proportion=0,
+            flag=wx.EXPAND | wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT,
+            border=5)
+        self.dataSizer.Add(self.subGroupSelect, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=5)
+
+        self.dataSizer.Add(self.editGroup, proportion=0,
+                           flag=wx.ALL, border=5)
 
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
-        #TODO use when subgroup will be optional
-        #self.subg_panel.Show(False)
+        # TODO use when subgroup will be optional
+        # self.subg_panel.Show(False)
         #self.subg_chbox.Bind(wx.EVT_CHECKBOX, self.OnSubgChbox)
 
     def OnSubgChbox(self, event):
@@ -115,10 +126,10 @@ class IClassGroupDialog(SimpleDialog):
 
         if self.use_subg:
             self.subg_panel.Show()
-            #self.SubGroupSelected()
+            # self.SubGroupSelected()
         else:
             self.subg_panel.Hide()
-            #self.GroupSelected()
+            # self.GroupSelected()
         self.SetMinSize(self.GetBestSize())
         self.Layout()
 
@@ -131,7 +142,7 @@ class IClassGroupDialog(SimpleDialog):
             ret = (self.groupSelect.GetValue(), None)
 
         return ret
-        
+
     def OnEditGroup(self, event):
         """Launch edit group dialog"""
         g, s = self.GetData()
@@ -155,36 +166,38 @@ class IClassGroupDialog(SimpleDialog):
 
     def GetGroupBandsErr(self, parent):
         """Get list of raster bands which are in the soubgroup of group with both having same name.
-           If the group does not exists or it does not contain any bands in subgoup with same name, 
+           If the group does not exists or it does not contain any bands in subgoup with same name,
            error dialog is shown.
         """
         gr, s = self.GetData()
 
         group = grass.find_file(name=gr, element='group')
-    
+
         bands = []
         g = group['name']
-    
+
         if g:
             if self.use_subg:
                 if s == '':
                     GError(_("Please choose a subgroup."), parent=parent)
                     return bands
                 if s not in self.GetSubgroups(g):
-                    GError(_("Subgroup <%s> not found in group <%s>") % (s, g), parent=parent)
+                    GError(
+                        _("Subgroup <%s> not found in group <%s>") %
+                        (s, g), parent=parent)
                     return bands
 
             bands = self.GetGroupBands(g, s)
             if not bands:
                 if self.use_subg:
-                    GError(_("No data found in subgroup <%s> of group <%s>.\n" \
-                             ".") \
-                               % (s, g), parent=parent)
-        
+                    GError(_("No data found in subgroup <%s> of group <%s>.\n"
+                             ".")
+                           % (s, g), parent=parent)
+
                 else:
-                    GError(_("No data found in group <%s>.\n" \
-                             ".") \
-                               % g, parent=parent)
+                    GError(_("No data found in group <%s>.\n"
+                             ".")
+                           % g, parent=parent)
         else:
             GError(_("Group <%s> not found") % gr, parent=parent)
 
@@ -200,33 +213,38 @@ class IClassGroupDialog(SimpleDialog):
         res = RunCommand('i.group',
                          flags='g',
                          group=group,
-                         read = True, **kwargs).strip()
+                         read=True, **kwargs).strip()
         bands = None
         if res.split('\n')[0]:
             bands = res.split('\n')
-            
+
         return bands
 
     def GetSubgroups(self, group):
         return RunCommand('i.group', group=group,
-                           read=True, flags='sg').splitlines()
+                          read=True, flags='sg').splitlines()
+
 
 class IClassMapDialog(SimpleDialog):
     """Dialog for adding raster/vector map"""
+
     def __init__(self, parent, title, element):
         """
-        
+
         :param parent: gui parent
         :param title: dialog title
         :param element: element type ('raster', 'vector')
         """
-        
-        SimpleDialog.__init__(self, parent, title = title)
-        
+
+        SimpleDialog.__init__(self, parent, title=title)
+
         self.elementType = element
-        self.element = gselect.Select(parent = self.panel, type = element,
-                                      size = globalvar.DIALOG_GSELECT_SIZE,
-                                      validator = SimpleValidator(callback = self.ValidatorCallback))
+        self.element = gselect.Select(
+            parent=self.panel,
+            type=element,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
         self.element.SetFocus()
 
         self.warning = _("Name of map is missing.")
@@ -239,12 +257,12 @@ class IClassMapDialog(SimpleDialog):
             label = _("Name of raster map:")
         elif self.elementType == 'vector':
             label = _("Name of vector map:")
-        self.dataSizer.Add(wx.StaticText(self.panel, id = wx.ID_ANY,
-                                         label = label),
-                           proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
-        self.dataSizer.Add(self.element, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        
+        self.dataSizer.Add(wx.StaticText(self.panel, id=wx.ID_ANY,
+                                         label=label),
+                           proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
+        self.dataSizer.Add(self.element, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=5)
+
         self.panel.SetSizer(self.sizer)
         self.sizer.Fit(self)
 
@@ -255,52 +273,68 @@ class IClassMapDialog(SimpleDialog):
 
 class IClassCategoryManagerDialog(wx.Dialog):
     """Dialog for managing categories (classes).
-    
+
     Alows adding, deleting class and changing its name and color.
     """
-    def __init__(self, parent, title = _("Class manager"), id = wx.ID_ANY):
+
+    def __init__(self, parent, title=_("Class manager"), id=wx.ID_ANY):
         """
         Does post init and layout.
-        
+
         :param parent: gui parent
         :param title: dialog window title
         :param id: wx id
         """
-        wx.Dialog.__init__(self, parent = parent, title = title, id = id)
-        
+        wx.Dialog.__init__(self, parent=parent, title=title, id=id)
+
         self.parent = parent
-        panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
+        panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.StaticBox(panel, id = wx.ID_ANY,
-                           label = " %s " % _("Classes"))
+        box = wx.StaticBox(panel, id=wx.ID_ANY,
+                           label=" %s " % _("Classes"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        self.catList = CategoryListCtrl(panel, mapwindow = parent, 
-                                               stats_data = parent.stats_data)
-        addButton = wx.Button(panel, id = wx.ID_ADD)
-        deleteButton = wx.Button(panel, id = wx.ID_DELETE)
-        
-        gridSizer.Add(item = self.catList, pos = (0, 0), span = (3, 1), flag = wx.EXPAND)
-        gridSizer.Add(item = addButton, pos = (0, 1), flag = wx.EXPAND)
-        gridSizer.Add(item = deleteButton, pos = (1, 1), flag = wx.EXPAND)
-                
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+        self.catList = CategoryListCtrl(panel, mapwindow=parent,
+                                        stats_data=parent.stats_data)
+        addButton = wx.Button(panel, id=wx.ID_ADD)
+        deleteButton = wx.Button(panel, id=wx.ID_DELETE)
+
+        gridSizer.Add(
+            item=self.catList, pos=(
+                0, 0), span=(
+                3, 1), flag=wx.EXPAND)
+        gridSizer.Add(item=addButton, pos=(0, 1), flag=wx.EXPAND)
+        gridSizer.Add(item=deleteButton, pos=(1, 1), flag=wx.EXPAND)
+
         gridSizer.AddGrowableCol(0)
         gridSizer.AddGrowableRow(2)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = sizer, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainSizer.Add(
+            item=sizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        closeButton = wx.Button(panel, id = wx.ID_CLOSE)
-        btnSizer.Add(item = wx.Size(-1, -1), proportion = 1, flag = wx.EXPAND)
-        btnSizer.Add(item = closeButton, proportion = 0, flag = wx.ALIGN_RIGHT)
-        mainSizer.Add(item = btnSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
-        
+        closeButton = wx.Button(panel, id=wx.ID_CLOSE)
+        btnSizer.Add(item=wx.Size(-1, -1), proportion=1, flag=wx.EXPAND)
+        btnSizer.Add(item=closeButton, proportion=0, flag=wx.ALIGN_RIGHT)
+        mainSizer.Add(
+            item=btnSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+
         addButton.Bind(wx.EVT_BUTTON, self.OnAddCategory)
         deleteButton.Bind(wx.EVT_BUTTON, self.OnDeleteCategory)
         closeButton.Bind(wx.EVT_BUTTON, self.OnClose)
         self.Bind(wx.EVT_CLOSE, self.OnClose)
-        
+
         panel.SetSizer(mainSizer)
         mainSizer.Fit(self)
 
@@ -313,66 +347,70 @@ class IClassCategoryManagerDialog(wx.Dialog):
             cat = max(self.parent.stats_data.GetCategories()) + 1
         else:
             cat = 1
-        defaultName = 'class' + '_' + str(cat) # intentionally not translatable
+        # intentionally not translatable
+        defaultName = 'class' + '_' + str(cat)
         defaultColor = '0:0:0'
-        self.catList.AddCategory(cat = cat, name = defaultName, color = defaultColor)
-        
+        self.catList.AddCategory(cat=cat, name=defaultName, color=defaultColor)
+
     def OnDeleteCategory(self, event):
         self.catList.DeleteCategory()
-        
+
     def OnClose(self, event):
         self.catList.DeselectAll()
-        
+
         self.Hide()
-        #if not isinstance(event, wx.CloseEvent):
-            #self.Destroy()
-            
-        #event.Skip()
-        
+        # if not isinstance(event, wx.CloseEvent):
+        # self.Destroy()
+
+        # event.Skip()
+
     def GetListCtrl(self):
         """Returns list widget"""
         return self.catList
-        
+
+
 class CategoryListCtrl(wx.ListCtrl,
                        listmix.ListCtrlAutoWidthMixin,
                        listmix.TextEditMixin):
     """Widget for controling list of classes (categories).
-    
+
     CategoryListCtrl updates choice in mapwindow and removes raster map
     when deleting class (category).
     It uses virtual data in the terms of @c wx.ListCtrl.
-    
+
     .. todo::
         delete vector features after deleting class
     """
-    def __init__(self, parent, mapwindow, stats_data, id = wx.ID_ANY):
+
+    def __init__(self, parent, mapwindow, stats_data, id=wx.ID_ANY):
         """
         :param parent: gui parent
         :param mapwindow: mapwindow instance with iclass toolbar and remove raster method
         :param stats_data: StatisticsData instance (defined in statistics.py)
         :param id: wx id
         """
-        wx.ListCtrl.__init__(self, parent, id,
-                             style = wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|wx.LC_VRULES)
+        wx.ListCtrl.__init__(
+            self, parent, id, style=wx.LC_REPORT | wx.LC_VIRTUAL | wx.LC_HRULES |
+            wx.LC_VRULES)
         self.columns = ((_('Class name'), 'name'),
                         (_('Color'), 'color'))
-        self.Populate(columns = self.columns)
+        self.Populate(columns=self.columns)
         self.mapWindow = mapwindow
         self.stats_data = stats_data
         self.SetItemCount(len(self.stats_data.GetCategories()))
-        
+
         self.rightClickedItemIdx = wx.NOT_FOUND
-        
+
         listmix.ListCtrlAutoWidthMixin.__init__(self)
 
         listmix.TextEditMixin.__init__(self)
-        
+
         self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnEdit)
         self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnCategorySelected)
-        
-        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnClassRightUp) #wxMSW
-        self.Bind(wx.EVT_RIGHT_UP,            self.OnClassRightUp) #wxGTK
-    
+
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnClassRightUp)  # wxMSW
+        self.Bind(wx.EVT_RIGHT_UP, self.OnClassRightUp)  # wxGTK
+
         self.stats_data.statisticsAdded.connect(self.Update)
         self.stats_data.statisticsDeleted.connect(self.Update)
         self.stats_data.allStatisticsDeleted.connect(self.Update)
@@ -387,38 +425,40 @@ class CategoryListCtrl(wx.ListCtrl,
             try:
                 text.encode('ascii')
             except UnicodeEncodeError:
-                GMessage(parent = self, message = _("Please use only ASCII characters."))
+                GMessage(parent=self, message=_(
+                    "Please use only ASCII characters."))
                 return
 
         cat = self.stats_data.GetCategories()[row]
-        self.stats_data.GetStatistics(cat).SetStatistics(stats = {attr : text})
-        
+        self.stats_data.GetStatistics(cat).SetStatistics(stats={attr: text})
+
         toolbar = self.mapWindow.toolbars['iClass']
         toolbar.choice.SetSelection(row)
         self.Select(row)
-        
+
         if attr == 'name':
-            self.mapWindow.UpdateRasterName(text, toolbar.GetSelectedCategoryIdx())
-            
-        self.mapWindow.UpdateChangeState(changes = True)
-        
+            self.mapWindow.UpdateRasterName(
+                text, toolbar.GetSelectedCategoryIdx())
+
+        self.mapWindow.UpdateChangeState(changes=True)
+
     def Populate(self, columns):
         for i, col in enumerate(columns):
-            self.InsertColumn(i, col[0])#wx.LIST_FORMAT_RIGHT
+            self.InsertColumn(i, col[0])  # wx.LIST_FORMAT_RIGHT
 
         self.SetColumnWidth(0, 100)
         self.SetColumnWidth(1, 100)
-        
+
     def AddCategory(self, cat, name, color):
         """Add category record (used when importing areas)"""
 
         self.stats_data.AddStatistics(cat, name, color)
         self.SetItemCount(len(self.stats_data.GetCategories()))
-        
-        self.mapWindow.UpdateChangeState(changes = True)
-                
+
+        self.mapWindow.UpdateChangeState(changes=True)
+
     def DeleteCategory(self):
-        indexList = sorted(self.GetSelectedIndices(), reverse = True)
+        indexList = sorted(self.GetSelectedIndices(), reverse=True)
         del_cats = []
         cats = self.stats_data.GetCategories()
 
@@ -429,17 +469,17 @@ class CategoryListCtrl(wx.ListCtrl,
 
             name = stat.rasterName
             self.mapWindow.RemoveTempRaster(name)
-            
+
             del_cats.append(cat)
             self.stats_data.DeleteStatistics(cat)
-            
+
         self.SetItemCount(len(self.stats_data.GetCategories()))
-        
-        self.mapWindow.UpdateChangeState(changes = True)
-        
-        self.mapWindow.DeleteAreas(cats = del_cats)
-            
-    def GetSelectedIndices(self, state =  wx.LIST_STATE_SELECTED):
+
+        self.mapWindow.UpdateChangeState(changes=True)
+
+        self.mapWindow.DeleteAreas(cats=del_cats)
+
+    def GetSelectedIndices(self, state=wx.LIST_STATE_SELECTED):
         indices = []
         lastFound = -1
         while True:
@@ -450,7 +490,7 @@ class CategoryListCtrl(wx.ListCtrl,
                 lastFound = index
                 indices.append(index)
         return indices
-        
+
     def OnEdit(self, event):
         currentItem = event.m_itemIndex
         currentCol = event.m_col
@@ -458,7 +498,7 @@ class CategoryListCtrl(wx.ListCtrl,
             col = self.OnGetItemText(currentItem, currentCol)
             col = map(int, col.split(':'))
 
-            col_data =  wx.ColourData()
+            col_data = wx.ColourData()
             col_data.SetColour(wx.Colour(*col))
 
             dlg = wx.ColourDialog(self, col_data)
@@ -470,9 +510,9 @@ class CategoryListCtrl(wx.ListCtrl,
                 self.SetVirtualData(currentItem, currentCol, color)
             dlg.Destroy()
             wx.CallAfter(self.SetFocus)
-        
+
         event.Skip()
-        
+
     def OnCategorySelected(self, event):
         """Highlight selected areas"""
         indexList = self.GetSelectedIndices()
@@ -480,46 +520,51 @@ class CategoryListCtrl(wx.ListCtrl,
         cats = self.stats_data.GetCategories()
         for i in indexList:
             sel_cats.append(cats[i])
-        
+
         self.mapWindow.HighlightCategory(sel_cats)
         if event:
             event.Skip()
-        
+
     def OnClassRightUp(self, event):
         """Show context menu on right click"""
         item, flags = self.HitTest((event.GetX(), event.GetY()))
         if item != wx.NOT_FOUND and flags & wx.LIST_HITTEST_ONITEM:
             self.rightClickedItemIdx = item
-           
+
         if not hasattr(self, "popupZoomtoAreas"):
             self.popupZoomtoAreas = wx.NewId()
-            self.Bind(wx.EVT_MENU, self.OnZoomToAreasByCat, id = self.popupZoomtoAreas)
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnZoomToAreasByCat,
+                id=self.popupZoomtoAreas)
 
         # generate popup-menu
         menu = wx.Menu()
-        menu.Append(self.popupZoomtoAreas, _("Zoom to training areas of selected class"))
-        
+        menu.Append(
+            self.popupZoomtoAreas,
+            _("Zoom to training areas of selected class"))
+
         self.PopupMenu(menu)
         menu.Destroy()
-    
+
     def OnZoomToAreasByCat(self, event):
         """Zoom to areas of given category"""
         cat = self.stats_data.GetCategories()[self.rightClickedItemIdx]
         self.mapWindow.ZoomToAreasByCat(cat)
-        
+
     def DeselectAll(self):
         """Deselect all items"""
         indexList = self.GetSelectedIndices()
         for i in indexList:
-            self.Select(i, on = 0)
-         
+            self.Select(i, on=0)
+
         # no highlight
         self.OnCategorySelected(None)
-        
+
     def OnGetItemText(self, item, col):
         cat = self.stats_data.GetCategories()[item]
         stat = self.stats_data.GetStatistics(cat)
-        return getattr(stat, self.columns[col][1]) 
+        return getattr(stat, self.columns[col][1])
 
     def OnGetItemImage(self, item):
         return -1
@@ -532,65 +577,70 @@ class CategoryListCtrl(wx.ListCtrl,
         back_c = wx.Colour(*map(int, self.OnGetItemText(item, 1).split(':')))
         text_c = wx.Colour(*ContrastColor(back_c))
 
-        # if it is in scope of the method, gui falls, using self solved it 
-        self.l = wx.ListItemAttr(colText = text_c, colBack =  back_c)
+        # if it is in scope of the method, gui falls, using self solved it
+        self.l = wx.ListItemAttr(colText=text_c, colBack=back_c)
         return self.l
-    
+
+
 def ContrastColor(color):
-    """Decides which value shoud have text to be contrast with backgroud color 
+    """Decides which value shoud have text to be contrast with backgroud color
         (bright bg -> black, dark bg -> white)
 
     .. todo::
-        could be useful by other apps, consider moving it into gui_core 
+        could be useful by other apps, consider moving it into gui_core
     """
-    #gacek, http://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color
-    a = 1 - ( 0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2])/255;
+    # gacek,
+    # http://stackoverflow.com/questions/1855884/determine-font-color-based-on-background-color
+    a = 1 - (0.299 * color[0] + 0.587 * color[1] + 0.114 * color[2]) / 255
 
     if a < 0.5:
         d = 0
     else:
-        d = 255 
-    # maybe return just bool if text shoud be dark or bright 
+        d = 255
+    # maybe return just bool if text shoud be dark or bright
     return (d, d, d)
 
+
 class IClassSignatureFileDialog(wx.Dialog):
-    def __init__(self, parent, group, subgroup, 
-                 file = None, title = _("Save signature file"), id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+
+    def __init__(self, parent, group, subgroup,
+                 file=None, title=_("Save signature file"), id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
                  **kwargs):
         """Dialog for saving signature file
-        
+
         :param parent: window
         :param group: group name
         :param file: signature file name
         :param title: window title
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
-        
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
+
         self.fileName = file
-        
+
         env = grass.gisenv()
-        
+
         # inconsistent group and subgroup name
-        # path: grassdata/nc_spm_08/landsat/group/test_group/subgroup/test_group/sig/sigFile
+        # path:
+        # grassdata/nc_spm_08/landsat/group/test_group/subgroup/test_group/sig/sigFile
         self.baseFilePath = os.path.join(env['GISDBASE'],
                                          env['LOCATION_NAME'],
                                          env['MAPSET'],
                                          'group', group,
                                          'subgroup', subgroup,
                                          'sig')
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnOK     = wx.Button(parent = self.panel, id = wx.ID_OK)
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnOK = wx.Button(parent=self.panel, id=wx.ID_OK)
         self.btnOK.SetDefault()
         self.btnOK.Enable(False)
-        
+
         self.__layout()
-        
+
         self.fileNameCtrl.Bind(wx.EVT_TEXT, self.OnTextChanged)
         self.OnTextChanged(None)
-        
+
     def OnTextChanged(self, event):
         """Name for signature file given"""
         file = self.fileNameCtrl.GetValue()
@@ -598,100 +648,114 @@ class IClassSignatureFileDialog(wx.Dialog):
             self.btnOK.Enable(True)
         else:
             self.btnOK.Enable(False)
-            
+
         path = os.path.join(self.baseFilePath, file)
         self.filePathText.SetLabel(path)
-        bestSize = self.pathPanel.GetBestVirtualSize() 
+        bestSize = self.pathPanel.GetBestVirtualSize()
         self.pathPanel.SetVirtualSize(bestSize)
         self.pathPanel.Scroll(*bestSize)
-        
+
     def __layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         dataSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                           label = _("Enter name of signature file:")),
-                      proportion = 0, flag = wx.ALL, border = 3)
-        self.fileNameCtrl = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, size = (400, -1))
+
+        dataSizer.Add(
+            item=wx.StaticText(
+                parent=self.panel,
+                id=wx.ID_ANY,
+                label=_("Enter name of signature file:")),
+            proportion=0,
+            flag=wx.ALL,
+            border=3)
+        self.fileNameCtrl = wx.TextCtrl(
+            parent=self.panel, id=wx.ID_ANY, size=(400, -1))
         if self.fileName:
             self.fileNameCtrl.SetValue(self.fileName)
-        dataSizer.Add(item = self.fileNameCtrl,
-                      proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-    
-        dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                                label = _("Signature file path:")),
-                           proportion = 0, flag = wx.ALL, border = 3)
-        
-        self.pathPanel = scrolled.ScrolledPanel(self.panel, size = (-1, 40))
+        dataSizer.Add(item=self.fileNameCtrl,
+                      proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
+        dataSizer.Add(item=wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Signature file path:")),
+                      proportion=0, flag=wx.ALL, border=3)
+
+        self.pathPanel = scrolled.ScrolledPanel(self.panel, size=(-1, 40))
         pathSizer = wx.BoxSizer()
-        self.filePathText = wx.StaticText(parent = self.pathPanel, id = wx.ID_ANY,
-                                                label = self.baseFilePath)
-        pathSizer.Add(self.filePathText, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        self.pathPanel.SetupScrolling(scroll_x = True, scroll_y = False)
+        self.filePathText = wx.StaticText(parent=self.pathPanel, id=wx.ID_ANY,
+                                          label=self.baseFilePath)
+        pathSizer.Add(
+            self.filePathText,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        self.pathPanel.SetupScrolling(scroll_x=True, scroll_y=False)
         self.pathPanel.SetSizer(pathSizer)
 
-        dataSizer.Add(item = self.pathPanel,
-                      proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-                      
+        dataSizer.Add(item=self.pathPanel,
+                      proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOK)
         btnSizer.Realize()
-        
-        sizer.Add(item = dataSizer, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+
+        sizer.Add(item=dataSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self)
-        
+
         self.SetMinSize(self.GetSize())
-        
-    def GetFileName(self, fullPath = False):
+
+    def GetFileName(self, fullPath=False):
         """Returns signature file name
-        
+
         :param fullPath: return full path of sig. file
         """
         if fullPath:
-            return os.path.join(self.baseFilePath, self.fileNameCtrl.GetValue())
-            
+            return os.path.join(self.baseFilePath,
+                                self.fileNameCtrl.GetValue())
+
         return self.fileNameCtrl.GetValue()
-        
+
+
 class IClassExportAreasDialog(wx.Dialog):
-    def __init__(self, parent, vectorName = None, title = _("Export training areas"), id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+
+    def __init__(self, parent, vectorName=None,
+                 title=_("Export training areas"),
+                 id=wx.ID_ANY, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
                  **kwargs):
         """Dialog for export of training areas to vector layer
-        
+
         :param parent: window
         :param vectorName: name of vector layer for export
         :param title: window title
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
-        
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
+
         self.vectorName = vectorName
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnOK     = wx.Button(parent = self.panel, id = wx.ID_OK)
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnOK = wx.Button(parent=self.panel, id=wx.ID_OK)
         self.btnOK.SetDefault()
         self.btnOK.Enable(False)
         self.btnOK.Bind(wx.EVT_BUTTON, self.OnOK)
-        
+
         self.__layout()
-        
+
         self.vectorNameCtrl.Bind(wx.EVT_TEXT, self.OnTextChanged)
         self.OnTextChanged(None)
         wx.CallAfter(self.vectorNameCtrl.SetFocus)
 
     def OnTextChanged(self, event):
         """Name of new vector map given.
-        
+
         Enable/diable OK button.
         """
         file = self.vectorNameCtrl.GetValue()
@@ -699,71 +763,79 @@ class IClassExportAreasDialog(wx.Dialog):
             self.btnOK.Enable(True)
         else:
             self.btnOK.Enable(False)
-        
+
     def __layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         dataSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                           label = _("Enter name of new vector map:")),
-                      proportion = 0, flag = wx.ALL, border = 3)
-        self.vectorNameCtrl = gselect.Select(parent = self.panel, type = 'vector',
-                                             mapsets = [grass.gisenv()['MAPSET']],
-                                             size = globalvar.DIALOG_GSELECT_SIZE)
+
+        dataSizer.Add(
+            item=wx.StaticText(
+                parent=self.panel,
+                id=wx.ID_ANY,
+                label=_("Enter name of new vector map:")),
+            proportion=0,
+            flag=wx.ALL,
+            border=3)
+        self.vectorNameCtrl = gselect.Select(
+            parent=self.panel, type='vector',
+            mapsets=[grass.gisenv()['MAPSET']],
+            size=globalvar.DIALOG_GSELECT_SIZE)
         if self.vectorName:
             self.vectorNameCtrl.SetValue(self.vectorName)
-        dataSizer.Add(item = self.vectorNameCtrl,
-                      proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        self.withTableCtrl = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                       label = _("Export attribute table"))
+        dataSizer.Add(item=self.vectorNameCtrl,
+                      proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+        self.withTableCtrl = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Export attribute table"))
         self.withTableCtrl.SetValue(True)
-        self.withTableCtrl.SetToolTipString(_("Export attribute table containing" 
-                                              " computed statistical data"))
-        
-        dataSizer.Add(item = self.withTableCtrl,
-                      proportion = 0, flag = wx.ALL, border = 3)
-                      
+        self.withTableCtrl.SetToolTipString(
+            _("Export attribute table containing" " computed statistical data"))
+
+        dataSizer.Add(item=self.withTableCtrl,
+                      proportion=0, flag=wx.ALL, border=3)
+
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOK)
         btnSizer.Realize()
-        
-        sizer.Add(item = dataSizer, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+
+        sizer.Add(item=dataSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self)
-        
+
         self.SetMinSize(self.GetSize())
-        
+
     def GetVectorName(self):
         """Returns vector name"""
         return self.vectorNameCtrl.GetValue()
-        
+
     def WithTable(self):
         """Returns true if attribute table should be exported too"""
         return self.withTableCtrl.IsChecked()
-        
+
     def OnOK(self, event):
         """Checks if map exists and can be overwritten."""
-        overwrite = UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled')
+        overwrite = UserSettings.Get(
+            group='cmd', key='overwrite', subkey='enabled')
         vName = self.GetVectorName()
-        res = grass.find_file(vName, element = 'vector')
+        res = grass.find_file(vName, element='vector')
         if res['fullname'] and overwrite is False:
-            qdlg = wx.MessageDialog(parent = self,
-                                        message = _("Vector map <%s> already exists."
-                                                    " Do you want to overwrite it?" % vName) ,
-                                        caption = _("Vector <%s> exists" % vName),
-                                        style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+            qdlg = wx.MessageDialog(
+                parent=self, message=_(
+                    "Vector map <%s> already exists."
+                    " Do you want to overwrite it?" %
+                    vName), caption=_(
+                    "Vector <%s> exists" %
+                    vName), style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             if qdlg.ShowModal() == wx.ID_YES:
                 event.Skip()
             qdlg.Destroy()
         else:
             event.Skip()
-            
diff --git a/gui/wxpython/iclass/digit.py b/gui/wxpython/iclass/digit.py
index 4e13d57..1a924cf 100644
--- a/gui/wxpython/iclass/digit.py
+++ b/gui/wxpython/iclass/digit.py
@@ -19,26 +19,28 @@ for details.
 import wx
 
 from vdigit.mapwindow import VDigitWindow
-from vdigit.wxdigit   import IVDigit
+from vdigit.wxdigit import IVDigit
 from vdigit.wxdisplay import DisplayDriver, TYPE_AREA
-from core.gcmd        import GWarning
+from core.gcmd import GWarning
 from core.utils import _
 try:
-    from grass.lib.gis    import G_verbose, G_set_verbose
+    from grass.lib.gis import G_verbose, G_set_verbose
     from grass.lib.vector import *
-    from grass.lib.vedit  import *
+    from grass.lib.vedit import *
 except ImportError:
     pass
 
 import grass.script as grass
 
+
 class IClassVDigitWindow(VDigitWindow):
     """Class similar to VDigitWindow but specialized for wxIClass."""
+
     def __init__(self, parent, giface, map, properties):
         """
-        
+
         @a parent should has toolbar providing current class (category).
-        
+
         :param parent: gui parent
         :param map: map renderer instance
         """
@@ -52,45 +54,49 @@ class IClassVDigitWindow(VDigitWindow):
 
         region = grass.region()
         e, n = self.Pixel2Cell(event.GetPositionTuple())
-        if not ((region['s'] <= n <= region['n']) and (region['w'] <= e <= region['e'])):
-            GWarning(parent = self.parent, 
-                     message = _("You are trying to create a training area "
-                                 "outside the computational region. "
-                                 "Please, use g.region to set the appropriate region first."))
+        if not((region['s'] <= n <= region['n'])
+               and(region['w'] <= e <= region['e'])):
+            GWarning(
+                parent=self.parent, message=_(
+                    "You are trying to create a training area "
+                    "outside the computational region. "
+                    "Please, use g.region to set the appropriate region first."))
             return
 
         cat = self.GetCurrentCategory()
-        
+
         if cat is None and action == "addLine":
-            dlg = wx.MessageDialog(parent = self.parent,
-                      message = _("In order to create a training area, "
-                                  "you have to select class first.\n\n"
-                                  "There is no class yet, "
-                                  "do you want to create one?"),
-                      caption = _("No class selected"),
-                      style = wx.YES_NO)
+            dlg = wx.MessageDialog(
+                parent=self.parent,
+                message=_(
+                    "In order to create a training area, "
+                    "you have to select class first.\n\n"
+                    "There is no class yet, "
+                    "do you want to create one?"),
+                caption=_("No class selected"),
+                style=wx.YES_NO)
             if dlg.ShowModal() == wx.ID_YES:
                 self.parent.OnCategoryManager(None)
-                
+
             dlg.Destroy()
             event.Skip()
             return
-        
+
         super(IClassVDigitWindow, self)._onLeftDown(event)
-        
+
     def _addRecord(self):
         return False
-        
+
     def _updateATM(self):
         pass
-        
+
     def _onRightUp(self, event):
         super(IClassVDigitWindow, self)._onRightUp(event)
-        self.parent.UpdateChangeState(changes = True)
-        
+        self.parent.UpdateChangeState(changes=True)
+
     def GetCurrentCategory(self):
         """Returns current category (class).
-        
+
         Category should be assigned to new features (areas).
         It is taken from parent's toolbar.
         """
@@ -100,20 +106,22 @@ class IClassVDigitWindow(VDigitWindow):
         """Get color associated with given category"""
         r, g, b = map(int, self.parent.GetClassColor(cat).split(':'))
         return wx.Colour(r, g, b)
-        
+
+
 class IClassVDigit(IVDigit):
     """Class similar to IVDigit but specialized for wxIClass."""
+
     def __init__(self, mapwindow):
-        IVDigit.__init__(self, mapwindow, driver = IClassDisplayDriver)
-        self._settings['closeBoundary'] = True # snap to the first node
-        
+        IVDigit.__init__(self, mapwindow, driver=IClassDisplayDriver)
+        self._settings['closeBoundary'] = True  # snap to the first node
+
     def _getNewFeaturesLayer(self):
         return 1
-        
+
     def _getNewFeaturesCat(self):
         cat = self.mapWindow.GetCurrentCategory()
         return cat
-        
+
     def DeleteAreasByCat(self, cats):
         """Delete areas (centroid+boundaries) by categories
 
@@ -121,12 +129,12 @@ class IClassVDigit(IVDigit):
         """
         for cat in cats:
             Vedit_delete_areas_cat(self.poMapInfo, 1, cat)
-       
-    def CopyMap(self, name, tmp = False):
+
+    def CopyMap(self, name, tmp=False):
         """Make a copy of open vector map
 
         Note: Attributes are not copied
-        
+
         :param name: name for a copy
         :param tmp: True for temporary map
 
@@ -136,9 +144,9 @@ class IClassVDigit(IVDigit):
         if not self.poMapInfo:
             # nothing to copy
             return -1
-        
+
         poMapInfoNew = pointer(Map_info())
-        
+
         if not tmp:
             open_fn = Vect_open_new
         else:
@@ -150,33 +158,42 @@ class IClassVDigit(IVDigit):
 
         verbose = G_verbose()
         G_set_verbose(-1)      # be silent
-        
+
         if Vect_copy_map_lines(self.poMapInfo, poMapInfoNew) == 1:
             G_set_verbose(verbose)
             return -1
-        
+
         Vect_build(poMapInfoNew)
         G_set_verbose(verbose)
-        
+
         ret = Vect_get_num_lines(poMapInfoNew)
         Vect_close(poMapInfoNew)
-        
+
         return ret
 
     def GetMapInfo(self):
         """Returns Map_info() struct of open vector map"""
         return self.poMapInfo
 
+
 class IClassDisplayDriver(DisplayDriver):
     """Class similar to DisplayDriver but specialized for wxIClass
 
     .. todo::
         needs refactoring (glog, gprogress)
     """
+
     def __init__(self, device, deviceTmp, mapObj, window, glog, gprogress):
-        DisplayDriver.__init__(self, device, deviceTmp, mapObj, window, glog, gprogress)
+        DisplayDriver.__init__(
+            self,
+            device,
+            deviceTmp,
+            mapObj,
+            window,
+            glog,
+            gprogress)
         self._cat = -1
-        
+
     def _drawObject(self, robj):
         """Draw given object to the device
 
@@ -185,9 +202,9 @@ class IClassDisplayDriver(DisplayDriver):
         if robj.type == TYPE_AREA:
             self._cat = Vect_get_area_cat(self.poMapInfo, robj.fid, 1)
         elif robj.type == TYPE_CENTROIDIN:
-            return # skip centroids
+            return  # skip centroids
         DisplayDriver._drawObject(self, robj)
-        
+
     def _definePen(self, rtype):
         """Define pen/brush based on rendered object)
 
@@ -198,7 +215,7 @@ class IClassDisplayDriver(DisplayDriver):
         pen, brush = DisplayDriver._definePen(self, rtype)
         if self._cat > 0 and rtype == TYPE_AREA:
             brush = wx.Brush(self.window.GetCategoryColor(self._cat), wx.SOLID)
-        
+
         return pen, brush
 
     def CloseMap(self):
diff --git a/gui/wxpython/iclass/frame.py b/gui/wxpython/iclass/frame.py
index 9527f78..f90f20b 100644
--- a/gui/wxpython/iclass/frame.py
+++ b/gui/wxpython/iclass/frame.py
@@ -40,71 +40,78 @@ except ImportError as e:
 
 import grass.script as grass
 
-from mapdisp            import statusbar as sb
+from mapdisp import statusbar as sb
 from mapwin.buffered import BufferedMapWindow
-from vdigit.toolbars    import VDigitToolbar
-from gui_core.mapdisp   import DoubleMapFrame
-from core.render        import Map, MapLayer
-from core.gcmd          import RunCommand, GMessage, GError, GWarning
-from gui_core.dialogs   import SetOpacityDialog
+from vdigit.toolbars import VDigitToolbar
+from gui_core.mapdisp import DoubleMapFrame
+from core.render import Map, MapLayer
+from core.gcmd import RunCommand, GMessage, GError, GWarning
+from gui_core.dialogs import SetOpacityDialog
 from mapwin.base import MapWindowProperties
-from dbmgr.vinfo        import VectorDBInfo
+from dbmgr.vinfo import VectorDBInfo
 import grass.script as grass
 
-from iclass.digit       import IClassVDigitWindow, IClassVDigit
+from iclass.digit import IClassVDigitWindow, IClassVDigit
 from iclass.toolbars    import IClassMapToolbar, IClassMiscToolbar,\
-                               IClassToolbar, IClassMapManagerToolbar
-from iclass.statistics  import StatisticsData, Statistics, BandStatistics
+    IClassToolbar, IClassMapManagerToolbar
+from iclass.statistics import StatisticsData, Statistics, BandStatistics
 from iclass.dialogs     import CategoryListCtrl, IClassCategoryManagerDialog,\
-                               IClassGroupDialog, IClassSignatureFileDialog,\
-                               IClassExportAreasDialog, IClassMapDialog
-from iclass.plots       import PlotPanel
+    IClassGroupDialog, IClassSignatureFileDialog,\
+    IClassExportAreasDialog, IClassMapDialog
+from iclass.plots import PlotPanel
 
 from grass.pydispatch.signal import Signal
 
+
 class IClassMapFrame(DoubleMapFrame):
     """wxIClass main frame
-    
+
     It has two map windows one for digitizing training areas and one for
     result preview.
     It generates histograms, raster maps and signature files using
     @c I_iclass_* functions from C imagery library.
-    
+
     It is wxGUI counterpart of old i.class module.
     """
-    def __init__(self, parent = None, giface = None, title = _("GRASS GIS Supervised Classification Tool"),
-                 toolbars = ["iClassMisc", "iClassMap", "vdigit", "iClass"],
-                 size = (875, 600), name = 'IClassWindow', **kwargs):
+
+    def __init__(
+            self, parent=None, giface=None,
+            title=_("GRASS GIS Supervised Classification Tool"),
+            toolbars=["iClassMisc", "iClassMap", "vdigit", "iClass"],
+            size=(875, 600),
+            name='IClassWindow', **kwargs):
         """
         :param parent: (no parent is expected)
         :param title: window title
         :param toolbars: dictionary of active toolbars (defalult value represents all toolbars)
         :param size: default size
         """
-        DoubleMapFrame.__init__(self, parent = parent, title = title,
-                                name = name,
-                                firstMap = Map(), secondMap = Map(),
+        DoubleMapFrame.__init__(self, parent=parent, title=title,
+                                name=name,
+                                firstMap=Map(), secondMap=Map(),
                                 **kwargs)
         self._giface = giface
+        self.tree = None
         self.mapWindowProperties = MapWindowProperties()
         self.mapWindowProperties.setValuesFromUserSettings()
         # show computation region by defaut
         self.mapWindowProperties.showRegion = True
 
-        self.firstMapWindow = IClassVDigitWindow(parent = self, giface = self._giface,
-                                                 properties=self.mapWindowProperties,
-                                                 map = self.firstMap)
-        self.secondMapWindow = BufferedMapWindow(parent=self, giface=self._giface,
-                                                 properties=self.mapWindowProperties,
-                                                 Map=self.secondMap)
-        self.MapWindow = self.firstMapWindow # current by default
-        
+        self.firstMapWindow = IClassVDigitWindow(
+            parent=self, giface=self._giface,
+            properties=self.mapWindowProperties, map=self.firstMap)
+        self.secondMapWindow = BufferedMapWindow(
+            parent=self, giface=self._giface,
+            properties=self.mapWindowProperties, Map=self.secondMap)
+        self.MapWindow = self.firstMapWindow  # current by default
+
         self._bindWindowsActivation()
         self._setUpMapWindow(self.firstMapWindow)
         self._setUpMapWindow(self.secondMapWindow)
         self.firstMapWindow.InitZoomHistory()
         self.secondMapWindow.InitZoomHistory()
-        # TODO: for vdigit: it does nothing here because areas do not produce this info
+        # TODO: for vdigit: it does nothing here because areas do not produce
+        # this info
         self.firstMapWindow.digitizingInfo.connect(
             lambda text:
             self.statusbarManager.statusbarItems['coordinates'].SetAdditionalInfo(text))
@@ -114,7 +121,7 @@ class IClassMapFrame(DoubleMapFrame):
         self.SetSize(size)
 
         #
-        #Signals
+        # Signals
         #
 
         self.groupSet = Signal("IClassMapFrame.groupSet")
@@ -125,7 +132,7 @@ class IClassMapFrame(DoubleMapFrame):
         #
         # Add toolbars
         #
-        
+
         toolbarsCopy = toolbars[:]
         if sys.platform == 'win32':
             self.AddToolbar(toolbarsCopy.pop(1))
@@ -135,13 +142,13 @@ class IClassMapFrame(DoubleMapFrame):
         for toolb in toolbarsCopy:
             self.AddToolbar(toolb)
         self.firstMapWindow.SetToolbar(self.toolbars['vdigit'])
-        
+
         self.GetMapToolbar().GetActiveMapTool().Bind(wx.EVT_CHOICE, self.OnUpdateActive)
-        
+
         #
         # Add statusbar
         #
-        
+
         # items for choice
         self.statusbarItems = [sb.SbCoordinates,
                                sb.SbRegionExtent,
@@ -153,54 +160,65 @@ class IClassMapFrame(DoubleMapFrame):
                                sb.SbMapScale,
                                sb.SbGoTo,
                                sb.SbProjection]
-        
+
         # create statusbar and its manager
-        statusbar = self.CreateStatusBar(number = 4, style = 0)
+        statusbar = self.CreateStatusBar(number=4, style=0)
         statusbar.SetStatusWidths([-5, -2, -1, -1])
-        self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
-        
+        self.statusbarManager = sb.SbManager(
+            mapframe=self, statusbar=statusbar)
+
         # fill statusbar manager
-        self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
-        self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
-        self.statusbarManager.AddStatusbarItem(sb.SbRender(self, statusbar = statusbar, position = 3))
-        
+        self.statusbarManager.AddStatusbarItemsByClass(
+            self.statusbarItems, mapframe=self, statusbar=statusbar)
+        self.statusbarManager.AddStatusbarItem(
+            sb.SbMask(self, statusbar=statusbar, position=2))
+        self.statusbarManager.AddStatusbarItem(
+            sb.SbRender(self, statusbar=statusbar, position=3))
+
         self.statusbarManager.Update()
 
-        self.trainingMapManager = MapManager(self, mapWindow = self.GetFirstWindow(),
-                                             Map = self.GetFirstMap())
-        self.previewMapManager = MapManager(self, mapWindow = self.GetSecondWindow(),
-                                            Map = self.GetSecondMap())
-                                                   
+        self.trainingMapManager = MapManager(
+            self, mapWindow=self.GetFirstWindow(),
+            Map=self.GetFirstMap())
+        self.previewMapManager = MapManager(
+            self, mapWindow=self.GetSecondWindow(),
+            Map=self.GetSecondMap())
+
         self.changes = False
         self.exportVector = None
-        
+
         # dialogs
         self.dialogs = dict()
         self.dialogs['classManager'] = None
         self.dialogs['scatt_plot'] = None
         # just to make digitizer happy
         self.dialogs['attributes'] = None
-        self.dialogs['category']   = None
-        
+        self.dialogs['category'] = None
+
         # PyPlot init
-        self.plotPanel = PlotPanel(self, giface = self._giface, stats_data = self.stats_data)
-                                   
+        self.plotPanel = PlotPanel(
+            self,
+            giface=self._giface,
+            stats_data=self.stats_data)
+
         self._addPanes()
         self._mgr.Update()
-        
-        self.trainingMapManager.SetToolbar(self.toolbars['iClassTrainingMapManager'])
-        self.previewMapManager.SetToolbar(self.toolbars['iClassPreviewMapManager'])
-        
+
+        self.trainingMapManager.SetToolbar(
+            self.toolbars['iClassTrainingMapManager'])
+        self.previewMapManager.SetToolbar(
+            self.toolbars['iClassPreviewMapManager'])
+
         # default action
         self.GetMapToolbar().SelectDefault()
-        
+
         wx.CallAfter(self.AddTrainingAreaMap)
-        
+
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.Bind(wx.EVT_SIZE, self.OnSize)
 
         self.SendSizeEvent()
-        
+
     def OnCloseWindow(self, event):
         self.GetFirstWindow().GetDigit().CloseMap()
         self.plotPanel.CloseWindow()
@@ -214,81 +232,81 @@ class IClassMapFrame(DoubleMapFrame):
         I_free_group_ref(self.refer)
         for st in self.cStatisticsDict.values():
             I_iclass_free_statistics(st)
-            
+
         self.RemoveTempVector()
         for i in self.stats_data.GetCategories():
             self.RemoveTempRaster(self.stats_data.GetStatistics(i).rasterName)
-            
+
     def OnHelp(self, event):
         """Show help page"""
-        self._giface.Help(entry = 'wxGUI.iclass')
-        
+        self._giface.Help(entry='wxGUI.iclass')
+
     def _getTempVectorName(self):
         """Return new name for temporary vector map (training areas)"""
-        vectorPath = grass.tempfile(create = False)
-        
-        return 'trAreas' + os.path.basename(vectorPath).replace('.','')
+        vectorPath = grass.tempfile(create=False)
+
+        return 'trAreas' + os.path.basename(vectorPath).replace('.', '')
 
     def SetGroup(self, group, subgroup):
         """Set group and subgroup manually"""
-        self.g = {'group' : group, 'subgroup' : subgroup}
+        self.g = {'group': group, 'subgroup': subgroup}
 
     def CreateTempVector(self):
         """Create temporary vector map for training areas"""
         vectorName = self._getTempVectorName()
-        
+
         env = os.environ.copy()
-        env['GRASS_VECTOR_TEMPORARY'] = '1' # create temporary map
+        env['GRASS_VECTOR_TEMPORARY'] = '1'  # create temporary map
         cmd = ('v.edit', {'tool': 'create',
                           'map': vectorName})
-        
-        ret = RunCommand(prog = cmd[0],
-                         parent = self, env = env,
+
+        ret = RunCommand(prog=cmd[0],
+                         parent=self, env=env,
                          **cmd[1])
-        
+
         if ret != 0:
             return False
-        
+
         return vectorName
-    
+
     def RemoveTempVector(self):
         """Removes temporary vector map with training areas"""
-        ret = RunCommand(prog = 'g.remove',
-                         parent = self,
-                         flags = 'f',
-                         type = 'vector',
-                         name = self.trainingAreaVector)
+        ret = RunCommand(prog='g.remove',
+                         parent=self,
+                         flags='f',
+                         type='vector',
+                         name=self.trainingAreaVector)
         if ret != 0:
             return False
         return True
-        
+
     def RemoveTempRaster(self, raster):
         """Removes temporary raster maps"""
         self.GetFirstMap().Clean()
         self.GetSecondMap().Clean()
-        ret = RunCommand(prog = 'g.remove',
-                         parent = self,
-                         flags = 'f',
-                         type = 'raster',
-                         name = raster)
+        ret = RunCommand(prog='g.remove',
+                         parent=self,
+                         flags='f',
+                         type='raster',
+                         name=raster)
         if ret != 0:
             return False
         return True
 
     def AddToolbar(self, name):
         """Add defined toolbar to the window
-        
+
         Currently known toolbars are:
          - 'iClassMap'          - basic map toolbar
          - 'iClass'             - iclass tools
          - 'iClassMisc'         - miscellaneous (help)
          - 'vdigit'             - digitizer toolbar (areas)
-         
+
          Toolbars 'iClassPreviewMapManager' are added in _addPanes().
         """
         if name == "iClassMap":
             self.toolbars[name] = IClassMapToolbar(self, self._toolSwitcher)
-            
+
             self._mgr.AddPane(self.toolbars[name],
                               wx.aui.AuiPaneInfo().
                               Name(name).Caption(_("Map Toolbar")).
@@ -297,10 +315,11 @@ class IClassMapFrame(DoubleMapFrame):
                               BottomDockable(False).TopDockable(True).
                               CloseButton(False).Layer(2).Row(1).
                               BestSize((self.toolbars[name].GetBestSize())))
-                              
+
         if name == "iClass":
-            self.toolbars[name] = IClassToolbar(self, stats_data=self.stats_data)
-            
+            self.toolbars[name] = IClassToolbar(
+                self, stats_data=self.stats_data)
+
             self._mgr.AddPane(self.toolbars[name],
                               wx.aui.AuiPaneInfo().
                               Name(name).Caption(_("IClass Toolbar")).
@@ -309,10 +328,10 @@ class IClassMapFrame(DoubleMapFrame):
                               BottomDockable(False).TopDockable(True).
                               CloseButton(False).Layer(2).Row(2).
                               BestSize((self.toolbars[name].GetBestSize())))
-                              
+
         if name == "iClassMisc":
             self.toolbars[name] = IClassMiscToolbar(self)
-            
+
             self._mgr.AddPane(self.toolbars[name],
                               wx.aui.AuiPaneInfo().
                               Name(name).Caption(_("IClass Misc Toolbar")).
@@ -323,13 +342,23 @@ class IClassMapFrame(DoubleMapFrame):
                               BestSize((self.toolbars[name].GetBestSize())))
 
         if name == "vdigit":
-            self.toolbars[name] = VDigitToolbar(parent=self, toolSwitcher=self._toolSwitcher,
-                                                MapWindow=self.GetFirstWindow(),
-                                                digitClass=IClassVDigit, giface=self._giface,
-                                                tools = ['addArea', 'moveVertex', 'addVertex',
-                                                         'removeVertex', 'editLine', 'moveLine',
-                                                         'deleteArea',
-                                                         'undo', 'redo'])
+            self.toolbars[name] = VDigitToolbar(
+                parent=self,
+                toolSwitcher=self._toolSwitcher,
+                MapWindow=self.GetFirstWindow(),
+                digitClass=IClassVDigit,
+                giface=self._giface,
+                tools=[
+                    'addArea',
+                    'moveVertex',
+                    'addVertex',
+                    'removeVertex',
+                    'editLine',
+                    'moveLine',
+                    'deleteArea',
+                    'undo',
+                    'redo',
+                    'settings'])
             self._mgr.AddPane(self.toolbars[name],
                               wx.aui.AuiPaneInfo().
                               Name(name).Caption(_("Digitization Toolbar")).
@@ -338,41 +367,41 @@ class IClassMapFrame(DoubleMapFrame):
                               BottomDockable(False).TopDockable(True).
                               CloseButton(False).Layer(2).Row(2).
                               BestSize((self.toolbars[name].GetBestSize())))
-                              
+
     def _addPanes(self):
         """Add mapwindows and toolbars to aui manager"""
         if sys.platform == 'win32':
-            self._addPaneMapWindow(name = 'training')
-            self._addPaneToolbar(name = 'iClassTrainingMapManager')
-            self._addPaneMapWindow(name = 'preview')
-            self._addPaneToolbar(name = 'iClassPreviewMapManager')
+            self._addPaneMapWindow(name='training')
+            self._addPaneToolbar(name='iClassTrainingMapManager')
+            self._addPaneMapWindow(name='preview')
+            self._addPaneToolbar(name='iClassPreviewMapManager')
         else:
-            self._addPaneToolbar(name = 'iClassPreviewMapManager')
-            self._addPaneMapWindow(name = 'preview')
-            self._addPaneToolbar(name = 'iClassTrainingMapManager')
-            self._addPaneMapWindow(name = 'training')
+            self._addPaneToolbar(name='iClassPreviewMapManager')
+            self._addPaneMapWindow(name='preview')
+            self._addPaneToolbar(name='iClassTrainingMapManager')
+            self._addPaneMapWindow(name='training')
 
         # otherwise best size was ignored
-        self._mgr.SetDockSizeConstraint(0.5, 0.5) 
+        self._mgr.SetDockSizeConstraint(0.5, 0.5)
 
         self._mgr.AddPane(self.plotPanel, wx.aui.AuiPaneInfo().
-                  Name("plots").Caption(_("Plots")).
-                  Dockable(False).Floatable(False).CloseButton(False).
-                  Left().Layer(1).BestSize((335, -1)))
-        
+                          Name("plots").Caption(_("Plots")).
+                          Dockable(False).Floatable(False).CloseButton(False).
+                          Left().Layer(1).BestSize((335, -1)))
+
     def _addPaneToolbar(self, name):
         if name == 'iClassPreviewMapManager':
             parent = self.previewMapManager
         else:
             parent = self.trainingMapManager
-        
+
         self.toolbars[name] = IClassMapManagerToolbar(self, parent)
         self._mgr.AddPane(self.toolbars[name],
                           wx.aui.AuiPaneInfo().ToolbarPane().Movable().
                           Name(name).
                           CloseButton(False).Center().Layer(0).
                           BestSize((self.toolbars[name].GetBestSize())))
-        
+
     def _addPaneMapWindow(self, name):
         if name == 'preview':
             window = self.GetSecondWindow()
@@ -380,12 +409,12 @@ class IClassMapFrame(DoubleMapFrame):
         else:
             window = self.GetFirstWindow()
             caption = _("Training Areas Display")
-        
+
         self._mgr.AddPane(window, wx.aui.AuiPaneInfo().
                           Name(name).Caption(caption).
                           Dockable(False).Floatable(False).CloseButton(False).
                           Center().Layer(0))
-        
+
     def IsStandalone(self):
         """Check if Map display is standalone"""
         return True
@@ -414,49 +443,57 @@ class IClassMapFrame(DoubleMapFrame):
         """
         mapTb = self.GetMapToolbar()
         # optionally disable tool zoomback tool
-        mapTb.Enable('zoomBack', enable = (len(self.MapWindow.zoomhistory) > 1))
+        mapTb.Enable('zoomBack', enable=(len(self.MapWindow.zoomhistory) > 1))
 
         if mapTb.GetActiveMap() != (win == self.secondMapWindow):
             mapTb.SetActiveMap((win == self.secondMapWindow))
-        self.StatusbarUpdate() 
+        self.StatusbarUpdate()
 
     def ActivateFirstMap(self, event=None):
         DoubleMapFrame.ActivateFirstMap(self, event)
-        self.GetMapToolbar().Enable('zoomBack', enable=(len(self.MapWindow.zoomhistory) > 1))
+        self.GetMapToolbar().Enable('zoomBack',
+                                    enable=(len(self.MapWindow.zoomhistory) > 1))
 
     def ActivateSecondMap(self, event=None):
         DoubleMapFrame.ActivateSecondMap(self, event)
-        self.GetMapToolbar().Enable('zoomBack', enable=(len(self.MapWindow.zoomhistory) > 1))
+        self.GetMapToolbar().Enable('zoomBack',
+                                    enable=(len(self.MapWindow.zoomhistory) > 1))
 
     def GetMapToolbar(self):
         """Returns toolbar with zooming tools"""
-        return self.toolbars['iClassMap']
+        return self.toolbars[
+            'iClassMap'] if 'iClassMap' in self.toolbars else None
 
     def GetClassColor(self, cat):
         """Get class color as string
 
         :param cat: class category
-        
+
         :return: 'R:G:B'
         """
         if cat in self.stats_data.GetCategories():
             return self.stats_data.GetStatistics(cat).color
         return '0:0:0'
-        
+
     def OnZoomMenu(self, event):
         """Popup Zoom menu """
         zoommenu = wx.Menu()
         # Add items to the menu
 
         i = 0
-        for label, handler in ((_('Adjust Training Area Display to Preview Display'), self.OnZoomToPreview),
-                               (_('Adjust Preview display to Training Area Display'), self.OnZoomToTraining),
-                               (_("Display synchronization ON"), lambda event: self.SetBindRegions(True)),
-                               (_("Display synchronization OFF"), lambda event: self.SetBindRegions(False))):
+        for label, handler in (
+            (_('Adjust Training Area Display to Preview Display'),
+             self.OnZoomToPreview),
+            (_('Adjust Preview display to Training Area Display'),
+             self.OnZoomToTraining),
+            (_("Display synchronization ON"),
+             lambda event: self.SetBindRegions(True)),
+            (_("Display synchronization OFF"),
+             lambda event: self.SetBindRegions(False))):
             if label is None:
                 zoommenu.AppendSeparator()
                 continue
-            
+
             item = wx.MenuItem(zoommenu, wx.ID_ANY, label)
             zoommenu.AppendItem(item)
             self.Bind(wx.EVT_MENU, handler, item)
@@ -465,12 +502,12 @@ class IClassMapFrame(DoubleMapFrame):
             elif i == 4:
                 item.Enable(self._bindRegions)
             i += 1
-        
+
         # Popup the menu. If an item is selected then its handler
         # will be called before PopupMenu returns.
         self.PopupMenu(zoommenu)
         zoommenu.Destroy()
-        
+
     def OnZoomToTraining(self, event):
         """Set preview display to match extents of training display """
 
@@ -481,9 +518,9 @@ class IClassMapFrame(DoubleMapFrame):
 
         newreg = self.firstMap.GetCurrentRegion()
         self.GetSecondMap().region = copy.copy(newreg)
-        
+
         self.Render(self.GetSecondWindow())
-        
+
     def OnZoomToPreview(self, event):
         """Set preview display to match extents of training display """
 
@@ -494,16 +531,16 @@ class IClassMapFrame(DoubleMapFrame):
 
         newreg = self.GetSecondMap().GetCurrentRegion()
         self.GetFirstMap().region = copy.copy(newreg)
-        
+
         self.Render(self.GetFirstWindow())
-        
+
     def AddBands(self):
         """Add imagery group"""
         dlg = IClassGroupDialog(self, group=self.g['group'])
-        
+
         while True:
             if dlg.ShowModal() == wx.ID_OK:
-                
+
                 if dlg.GetGroupBandsErr(parent=self):
                     g, s = dlg.GetData()
                     group = grass.find_file(name=g, element='group')
@@ -512,235 +549,257 @@ class IClassMapFrame(DoubleMapFrame):
                     self.groupSet.emit(group=self.g['group'],
                                        subgroup=self.g['subgroup'])
                     break
-            else: 
+            else:
                 break
-        
+
         dlg.Destroy()
 
     def OnImportAreas(self, event):
         """Import training areas"""
         # check if we have any changes
         if self.GetAreasCount() or self.stats_data.GetCategories():
-            qdlg = wx.MessageDialog(parent = self,
-                                    message = _("All changes will be lost. "
-                                                "Do you want to continue?") ,
-                                    style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+            qdlg = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "All changes will be lost. "
+                    "Do you want to continue?"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             if qdlg.ShowModal() == wx.ID_NO:
                 qdlg.Destroy()
                 return
             qdlg.Destroy()
-            
-        dlg = IClassMapDialog(self, title = _("Import vector map"), element = 'vector')
+
+        dlg = IClassMapDialog(
+            self, title=_("Import vector map"),
+            element='vector')
         if dlg.ShowModal() == wx.ID_OK:
             vName = dlg.GetMap()
-            
+
             self.ImportAreas(vName)
-            
+
         dlg.Destroy()
-        
+
     def _checkImportedTopo(self, vector):
         """Check if imported vector map has areas
-        
+
         :param str vector: vector map name
-        
+
         :return: warning message (empty if topology is ok)
         """
-        topo = grass.vector_info_topo(map = vector)
-        
+        topo = grass.vector_info_topo(map=vector)
+
         warning = ''
         if topo['areas'] == 0:
             warning = _("No areas in vector map <%s>.\n" % vector)
         if topo['points'] or topo['lines']:
-            warning +=_("Vector map <%s> contains points or lines, "
-                        "these features are ignored." % vector)
-            
+            warning += _("Vector map <%s> contains points or lines, "
+                         "these features are ignored." % vector)
+
         return warning
-            
+
     def ImportAreas(self, vector):
         """Import training areas.
-        
+
         If table connected, try load certain columns to class manager
-        
+
         :param str vector: vector map name
         """
         warning = self._checkImportedTopo(vector)
         if warning:
-             GMessage(parent = self, message = warning)
-             return
-        
+            GMessage(parent=self, message=warning)
+            return
+
         wx.BeginBusyCursor()
         wx.Yield()
-        
+
         # close, build, copy and open again the temporary vector
         digitClass = self.GetFirstWindow().GetDigit()
-        
+
         # open vector map to be imported
         if digitClass.OpenMap(vector, update=False) is None:
-            GError(parent = self, message = _("Unable to open vector map <%s>") % vector)
+            GError(
+                parent=self,
+                message=_("Unable to open vector map <%s>") %
+                vector)
             return
-        
+
         # copy features to the temporary map
         vname = self._getTempVectorName()
-        os.environ['GRASS_VECTOR_TEMPORARY'] = '1' # avoid deleting temporary map
-        if digitClass.CopyMap(vname, tmp = True) == -1:
-            GError(parent = self, message = _("Unable to copy vector features from <%s>") % vector)
+        # avoid deleting temporary map
+        os.environ['GRASS_VECTOR_TEMPORARY'] = '1'
+        if digitClass.CopyMap(vname, tmp=True) == -1:
+            GError(
+                parent=self,
+                message=_("Unable to copy vector features from <%s>") %
+                vector)
             return
         del os.environ['GRASS_VECTOR_TEMPORARY']
-        
+
         # close map
         digitClass.CloseMap()
-        
+
         # open temporary map (copy of imported map)
-        self.poMapInfo = digitClass.OpenMap(vname, tmp = True)
+        self.poMapInfo = digitClass.OpenMap(vname, tmp=True)
         if self.poMapInfo is None:
-            GError(parent = self, message = _("Unable to open temporary vector map"))
+            GError(parent=self, message=_(
+                "Unable to open temporary vector map"))
             return
 
         # remove temporary rasters
         for cat in self.stats_data.GetCategories():
-            self.RemoveTempRaster(self.stats_data.GetStatistics(cat).rasterName)
-        
+            self.RemoveTempRaster(
+                self.stats_data.GetStatistics(cat).rasterName)
+
         # clear current statistics
         self.stats_data.DeleteAllStatistics()
-        
+
         # reset plots
         self.plotPanel.Reset()
-        
-        self.GetFirstWindow().UpdateMap(render = False, renderVector = True)
-        
+
+        self.GetFirstWindow().UpdateMap(render=False, renderVector=True)
+
         self.ImportClasses(vector)
-        
+
         # should be saved in attribute table?
         self.toolbars['iClass'].UpdateStddev(1.5)
-        
+
         wx.EndBusyCursor()
-        
+
         return True
-        
+
     def ImportClasses(self, vector):
         """If imported map has table, try to import certain columns to class manager"""
         # check connection
         dbInfo = VectorDBInfo(vector)
         connected = (len(dbInfo.layers.keys()) > 0)
-        
+
         # remove attribute table of temporary vector, we don't need it
         if connected:
             RunCommand('v.db.droptable',
-                       flags = 'f',
-                       map = self.trainingAreaVector)
-        
+                       flags='f',
+                       map=self.trainingAreaVector)
+
         # we use first layer with table, TODO: user should choose
         layer = None
         for key in dbInfo.layers.keys():
             if dbInfo.GetTable(key):
                 layer = key
-        
+
         # get columns to check if we can use them
         # TODO: let user choose which columns mean what
-        if layer is not None: 
-            columns = dbInfo.GetColumns(table = dbInfo.GetTable(layer))
+        if layer is not None:
+            columns = dbInfo.GetColumns(table=dbInfo.GetTable(layer))
         else:
             columns = []
-        
+
         # get class manager
         if self.dialogs['classManager'] is None:
             self.dialogs['classManager'] = IClassCategoryManagerDialog(self)
-                
+
         listCtrl = self.dialogs['classManager'].GetListCtrl()
-        
+
         # unable to load data (no connection, table, right columns)
         if not connected or layer is None or \
-                   'class' not in columns or \
-                   'color' not in columns:
+                'class' not in columns or \
+                'color' not in columns:
             # no table connected
             cats = RunCommand('v.category',
-                       input = vector,
-                       layer = 1, # set layer?
-                       # type = ['centroid', 'area'] ?
-                       option = "print",
-                       read = True)
+                              input=vector,
+                              layer=1,  # set layer?
+                              # type = ['centroid', 'area'] ?
+                              option="print",
+                              read=True)
             cats = map(int, cats.strip().split())
             cats = sorted(list(set(cats)))
 
             for cat in cats:
-                listCtrl.AddCategory(cat = cat, name = 'class_%d' % cat, color = "0:0:0")
+                listCtrl.AddCategory(
+                    cat=cat, name='class_%d' %
+                    cat, color="0:0:0")
         # connection, table and columns exists
         else:
             columns = ['cat', 'class', 'color']
             ret = RunCommand('v.db.select',
-                                 quiet = True,
-                                 parent = self,
-                                 flags = 'c',
-                                 map = vector,
-                                 layer = 1,
-                                 columns = ','.join(columns),
-                                 read = True)
+                             quiet=True,
+                             parent=self,
+                             flags='c',
+                             map=vector,
+                             layer=1,
+                             columns=','.join(columns),
+                             read=True)
             records = ret.strip().splitlines()
             for record in records:
                 record = record.split('|')
-                listCtrl.AddCategory(cat = int(record[0]), name = record[1], color = record[2])
-            
+                listCtrl.AddCategory(
+                    cat=int(record[0]),
+                    name=record[1],
+                    color=record[2])
+
     def OnExportAreas(self, event):
         """Export training areas"""
         if self.GetAreasCount() == 0:
-            GMessage(parent = self, message = _("No training areas to export."))
+            GMessage(parent=self, message=_("No training areas to export."))
             return
-            
-        dlg = IClassExportAreasDialog(self, vectorName = self.exportVector)
-        
+
+        dlg = IClassExportAreasDialog(self, vectorName=self.exportVector)
+
         if dlg.ShowModal() == wx.ID_OK:
             vName = dlg.GetVectorName()
             self.exportVector = vName
             withTable = dlg.WithTable()
             dlg.Destroy()
-            
-            if self.ExportAreas(vectorName = vName, withTable = withTable):
-                GMessage(_("%d training areas (%d classes) exported to vector map <%s>.") % \
-                             (self.GetAreasCount(), len(self.stats_data.GetCategories()),
-                              self.exportVector), parent = self)
-                    
+
+            if self.ExportAreas(vectorName=vName, withTable=withTable):
+                GMessage(
+                    _("%d training areas (%d classes) exported to vector map <%s>.") %
+                    (self.GetAreasCount(), len(
+                        self.stats_data.GetCategories()), self.exportVector), parent=self)
+
     def ExportAreas(self, vectorName, withTable):
         """Export training areas to new vector map (with attribute table).
-        
+
         :param str vectorName: name of exported vector map
         :param bool withTable: true if attribute table is required
         """
         wx.BeginBusyCursor()
         wx.Yield()
-        
+
         # close, build, copy and open again the temporary vector
         digitClass = self.GetFirstWindow().GetDigit()
         if '@' in vectorName:
             vectorName = vectorName.split('@')[0]
         if digitClass.CopyMap(vectorName) < 0:
             return False
-        
+
         if not withTable:
             wx.EndBusyCursor()
             return False
-            
+
         # add new table
         columns = ["class varchar(30)",
                    "color varchar(11)",
-                   "n_cells integer",]
-                   
+                   "n_cells integer", ]
+
         nbands = len(self.GetGroupLayers(self.g['group'], self.g['subgroup']))
-        for statistic, format in (("min", "integer"), ("mean", "double precision"), ("max", "integer")):
+        for statistic, format in (
+                ("min", "integer"),
+                ("mean", "double precision"),
+                ("max", "integer")):
             for i in range(nbands):
                 # 10 characters limit?
-                columns.append("band%(band)d_%(stat)s %(format)s" % {'band' : i + 1,
-                                                                    'stat' : statistic,
-                                                                    'format' : format})
-        
+                columns.append(
+                    "band%(band)d_%(stat)s %(format)s" %
+                    {'band': i + 1, 'stat': statistic, 'format': format})
+
         if 0 != RunCommand('v.db.addtable',
-                           map = vectorName,
-                           columns = columns,
-                           parent = self):
+                           map=vectorName,
+                           columns=columns,
+                           parent=self):
             wx.EndBusyCursor()
             return False
-        
+
         try:
-            dbInfo =  grass.vector_db(vectorName)[1]
+            dbInfo = grass.vector_db(vectorName)[1]
         except KeyError:
             wx.EndBusyCursor()
             return False
@@ -751,25 +810,50 @@ class IClassMapFrame(DoubleMapFrame):
         # populate table
         for cat in self.stats_data.GetCategories():
             stat = self.stats_data.GetStatistics(cat)
-            
-            self._runDBUpdate(dbFile, table = dbInfo['table'], column = "class", value = stat.name, cat = cat)
-            self._runDBUpdate(dbFile, table = dbInfo['table'], column = "color", value = stat.color, cat = cat)
-            
+
+            self._runDBUpdate(
+                dbFile,
+                table=dbInfo['table'],
+                column="class",
+                value=stat.name,
+                cat=cat)
+            self._runDBUpdate(
+                dbFile,
+                table=dbInfo['table'],
+                column="color",
+                value=stat.color,
+                cat=cat)
+
             if not stat.IsReady():
                 continue
-                
-            self._runDBUpdate(dbFile, table = dbInfo['table'], column = "n_cells",value = stat.ncells, cat = cat)
-            
+
+            self._runDBUpdate(
+                dbFile,
+                table=dbInfo['table'],
+                column="n_cells",
+                value=stat.ncells,
+                cat=cat)
+
             for i in range(nbands):
-                self._runDBUpdate(dbFile, table = dbInfo['table'], column = "band%d_min" % (i + 1), value = stat.bands[i].min, cat = cat)
-                self._runDBUpdate(dbFile, table = dbInfo['table'], column = "band%d_mean" % (i + 1), value = stat.bands[i].mean, cat = cat)
-                self._runDBUpdate(dbFile, table = dbInfo['table'], column = "band%d_max" % (i + 1), value = stat.bands[i].max, cat = cat)
-                
+                self._runDBUpdate(
+                    dbFile, table=dbInfo['table'], column="band%d_min" %
+                    (i + 1), value=stat.bands[i].min, cat=cat)
+                self._runDBUpdate(
+                    dbFile, table=dbInfo['table'], column="band%d_mean" %
+                    (i + 1), value=stat.bands[i].mean, cat=cat)
+                self._runDBUpdate(
+                    dbFile, table=dbInfo['table'], column="band%d_max" %
+                    (i + 1), value=stat.bands[i].max, cat=cat)
+
         if dbInfo['driver'] != 'dbf':
             dbFile.write("COMMIT\n")
         dbFile.file.close()
 
-        ret = RunCommand('db.execute', input=dbFile.name, driver=dbInfo['driver'], database=dbInfo['database'])
+        ret = RunCommand(
+            'db.execute',
+            input=dbFile.name,
+            driver=dbInfo['driver'],
+            database=dbInfo['database'])
         wx.EndBusyCursor()
         os.remove(dbFile.name)
         if ret != 0:
@@ -778,20 +862,20 @@ class IClassMapFrame(DoubleMapFrame):
 
     def _runDBUpdate(self, tmpFile, table, column, value, cat):
         """Helper function for UPDATE statement
-        
+
         :param tmpFile: file where to write UPDATE statements
         :param table: table name
         :param column: name of updated column
         :param value: new value
         :param cat: which category to update
         """
-        if type(value) == (types.IntType, types.FloatType):
+        if isinstance(value, (types.IntType, types.FloatType)):
             tmpFile.write("UPDATE %s SET %s = %d WHERE cat = %d\n" %
                           (table, column, value, cat))
         else:
             tmpFile.write("UPDATE %s SET %s = '%s' WHERE cat = %d\n" %
                           (table, column, value, cat))
-        
+
     def OnCategoryManager(self, event):
         """Show category management dialog"""
         if self.dialogs['classManager'] is None:
@@ -802,91 +886,103 @@ class IClassMapFrame(DoubleMapFrame):
         else:
             if not self.dialogs['classManager'].IsShown():
                 self.dialogs['classManager'].Show()
-        
+
     def CategoryChanged(self, currentCat):
         """Updates everything which depends on current category.
-        
-        Updates number of stddev, histograms, layer in preview display. 
+
+        Updates number of stddev, histograms, layer in preview display.
         """
         if currentCat:
-          stat = self.stats_data.GetStatistics(currentCat)
-          nstd = stat.nstd
-          self.toolbars['iClass'].UpdateStddev(nstd)
-          
-          self.plotPanel.UpdateCategory(currentCat)
-          self.plotPanel.OnPlotTypeSelected(None)
-                                   
-          name = stat.rasterName
-          name = self.previewMapManager.GetAlias(name)
-          if name:
-              self.previewMapManager.SelectLayer(name)
-
-        self.categoryChanged.emit(cat = currentCat)
-        
+            stat = self.stats_data.GetStatistics(currentCat)
+            nstd = stat.nstd
+            self.toolbars['iClass'].UpdateStddev(nstd)
+
+            self.plotPanel.UpdateCategory(currentCat)
+            self.plotPanel.OnPlotTypeSelected(None)
+
+            name = stat.rasterName
+            name = self.previewMapManager.GetAlias(name)
+            if name:
+                self.previewMapManager.SelectLayer(name)
+
+        self.categoryChanged.emit(cat=currentCat)
+
     def DeleteAreas(self, cats):
         """Removes all training areas of given categories
-        
+
         :param cats: list of categories to be deleted
         """
         self.firstMapWindow.GetDigit().DeleteAreasByCat(cats)
         self.firstMapWindow.UpdateMap(render=False, renderVector=True)
-        
+
     def HighlightCategory(self, cats):
         """Highlight araes given by category"""
-        self.firstMapWindow.GetDigit().GetDisplay().SetSelected(cats, layer = 1)
+        self.firstMapWindow.GetDigit().GetDisplay().SetSelected(cats, layer=1)
         self.firstMapWindow.UpdateMap(render=False, renderVector=True)
-        
+
     def ZoomToAreasByCat(self, cat):
         """Zoom to areas given by category"""
         n, s, w, e = self.GetFirstWindow().GetDigit().GetDisplay().GetRegionSelected()
-        self.GetFirstMap().GetRegion(n = n, s = s, w = w, e = e, update = True)
+        self.GetFirstMap().GetRegion(n=n, s=s, w=w, e=e, update=True)
         self.GetFirstMap().AdjustRegion()
         self.GetFirstMap().AlignExtentFromDisplay()
-        
-        self.GetFirstWindow().UpdateMap(render = True, renderVector = True)
-        
+
+        self.GetFirstWindow().UpdateMap(render=True, renderVector=True)
+
     def UpdateRasterName(self, newName, cat):
         """Update alias of raster map when category name is changed"""
         origName = self.stats_data.GetStatistics(cat).rasterName
         self.previewMapManager.SetAlias(origName, self._addSuffix(newName))
-        
+
     def StddevChanged(self, cat, nstd):
         """Standard deviation multiplier changed, rerender map, histograms"""
         stat = self.stats_data.GetStatistics(cat)
-        stat.SetStatistics({"nstd" : nstd})
-        
+        stat.SetStatistics({"nstd": nstd})
+
         if not stat.IsReady():
             return
-            
+
         raster = stat.rasterName
-        
+
         cstat = self.cStatisticsDict[cat]
         I_iclass_statistics_set_nstd(cstat, nstd)
-        
+
         I_iclass_create_raster(cstat, self.refer, raster)
         self.Render(self.GetSecondWindow())
-    
+
         stat.SetBandStatistics(cstat)
         self.plotPanel.StddevChanged()
-        
+
     def UpdateChangeState(self, changes):
         """Informs if any important changes happened
         since last analysis computation.
         """
         self.changes = changes
-        
-    def AddRasterMap(self, name, firstMap = True, secondMap = True):
+
+    def AddRasterMap(self, name, firstMap=True, secondMap=True):
         """Add raster map to Map"""
         cmdlist = ['d.rast', 'map=%s' % name]
         if firstMap:
-            self.GetFirstMap().AddLayer(ltype='raster', command=cmdlist, active=True,
-                                        name=name, hidden=False, opacity=1.0, render=False)
+            self.GetFirstMap().AddLayer(
+                ltype='raster',
+                command=cmdlist,
+                active=True,
+                name=name,
+                hidden=False,
+                opacity=1.0,
+                render=False)
             self.Render(self.GetFirstWindow())
         if secondMap:
-            self.GetSecondMap().AddLayer(ltype='raster', command=cmdlist, active=True,
-                                        name=name, hidden=False, opacity=1.0, render=False)
+            self.GetSecondMap().AddLayer(
+                ltype='raster',
+                command=cmdlist,
+                active=True,
+                name=name,
+                hidden=False,
+                opacity=1.0,
+                render=False)
             self.Render(self.GetSecondWindow())
-           
+
     def AddTrainingAreaMap(self):
         """Add vector map with training areas to Map (training
         sub-display)"""
@@ -894,89 +990,111 @@ class IClassMapFrame(DoubleMapFrame):
         if vname:
             self.trainingAreaVector = vname
         else:
-            GMessage(parent = self, message = _("Failed to create temporary vector map."))
+            GMessage(parent=self, message=_(
+                "Failed to create temporary vector map."))
             return
-        
+
         # use 'hidden' for temporary maps (TODO: do it better)
-        mapLayer = self.GetFirstMap().AddLayer(ltype = 'vector',
-                                               command = ['d.vect', 'map=%s' % vname],
-                                               name = vname, active = False, hidden = True)
-        
+        mapLayer = self.GetFirstMap().AddLayer(
+            ltype='vector',
+            command=[
+                'd.vect',
+                'map=%s' %
+                vname],
+            name=vname,
+            active=False,
+            hidden=True)
+
         self.toolbars['vdigit'].StartEditing(mapLayer)
         self.poMapInfo = self.GetFirstWindow().GetDigit().GetMapInfo()
         self.Render(self.GetFirstWindow())
-        
+
     def OnRunAnalysis(self, event):
         """Run analysis and update plots"""
         if self.RunAnalysis():
             currentCat = self.GetCurrentCategoryIdx()
-            self.plotPanel.UpdatePlots(group = self.g['group'], subgroup = self.g['subgroup'], 
-                                       currentCat = currentCat, stats_data = self.stats_data)
-        
+            self.plotPanel.UpdatePlots(
+                group=self.g['group'],
+                subgroup=self.g['subgroup'],
+                currentCat=currentCat,
+                stats_data=self.stats_data)
+
     def RunAnalysis(self):
         """Run analysis
-        
+
         Calls C functions to compute all statistics and creates raster maps.
         Signatures are created but signature file is not.
         """
-        if not self.CheckInput(group = self.g['group'], vector = self.trainingAreaVector):
+        if not self.CheckInput(
+                group=self.g['group'],
+                vector=self.trainingAreaVector):
             return
-            
+
         for statistic in self.cStatisticsDict.values():
             I_iclass_free_statistics(statistic)
         self.cStatisticsDict = {}
-        
+
         # init Ref struct with the files in group */
         I_free_group_ref(self.refer)
 
-        if (not I_iclass_init_group(self.g['group'], self.g["subgroup"], self.refer)):
+        if (not I_iclass_init_group(
+                self.g['group'], self.g["subgroup"], self.refer)):
             return False
-        
+
         I_free_signatures(self.signatures)
         I_iclass_init_signatures(self.signatures, self.refer)
-        
+
         # why create copy
         #cats = self.statisticsList[:]
-        
+
         cats = self.stats_data.GetCategories()
         for i in cats:
             stats = self.stats_data.GetStatistics(i)
-            
+
             statistics_obj = IClass_statistics()
             statistics = pointer(statistics_obj)
-            
-            I_iclass_init_statistics(statistics, 
+
+            I_iclass_init_statistics(statistics,
                                      stats.category,
                                      stats.name,
                                      stats.color,
                                      stats.nstd)
-            
-            ret = I_iclass_analysis(statistics, self.refer, self.poMapInfo, "1",
-                                 self.g['group'], stats.rasterName)
+
+            ret = I_iclass_analysis(
+                statistics,
+                self.refer,
+                self.poMapInfo,
+                "1",
+                self.g['group'],
+                stats.rasterName)
             if ret > 0:
                 # tests
                 self.cStatisticsDict[i] = statistics
-                
+
                 stats.SetFromcStatistics(statistics)
                 stats.SetReady()
-                
+
                 # stat is already part of stats_data?
                 #self.statisticsDict[stats.category] = stats
-                
-                self.ConvertToNull(name = stats.rasterName)
-                self.previewMapManager.AddLayer(name = stats.rasterName,
-                                                alias = self._addSuffix(stats.name), resultsLayer = True)
+
+                self.ConvertToNull(name=stats.rasterName)
+                self.previewMapManager.AddLayer(
+                    name=stats.rasterName, alias=self._addSuffix(
+                        stats.name), resultsLayer=True)
                 # write statistics
                 I_iclass_add_signature(self.signatures, statistics)
-                
+
             elif ret == 0:
-                GMessage(parent = self, message = _("No area in category %s. Category skipped.") % stats.category)
+                GMessage(
+                    parent=self,
+                    message=_("No area in category %s. Category skipped.") %
+                    stats.category)
                 I_iclass_free_statistics(statistics)
             else:
-                GMessage(parent = self, message = _("Analysis failed."))
+                GMessage(parent=self, message=_("Analysis failed."))
                 I_iclass_free_statistics(statistics)
-        
-        self.UpdateChangeState(changes = False)
+
+        self.UpdateChangeState(changes=False)
         return True
 
     def _addSuffix(self, name):
@@ -986,117 +1104,127 @@ class IClassMapFrame(DoubleMapFrame):
     def OnSaveSigFile(self, event):
         """Asks for signature file name and saves it."""
         if not self.g['group']:
-            GMessage(parent = self, message = _("No imagery group selected."))
+            GMessage(parent=self, message=_("No imagery group selected."))
             return
-            
+
         if self.changes:
-            qdlg = wx.MessageDialog(parent = self,
-                                    message = _("Due to recent changes in classes, "
-                                                "signatures can be outdated and should be recalculated. "
-                                                "Do you still want to continue?") ,
-                                   caption = _("Outdated signatures"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+            qdlg = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "Due to recent changes in classes, "
+                    "signatures can be outdated and should be recalculated. "
+                    "Do you still want to continue?"),
+                caption=_("Outdated signatures"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             if qdlg.ShowModal() == wx.ID_YES:
                 qdlg.Destroy()
             else:
                 qdlg.Destroy()
                 return
-                    
-        dlg = IClassSignatureFileDialog(self, 
-                                        group = self.g['group'], 
-                                        subgroup = self.g['subgroup'], 
-                                        file = self.sigFile)
-        
+
+        dlg = IClassSignatureFileDialog(self,
+                                        group=self.g['group'],
+                                        subgroup=self.g['subgroup'],
+                                        file=self.sigFile)
+
         if dlg.ShowModal() == wx.ID_OK:
-            if os.path.exists(dlg.GetFileName(fullPath = True)):
-                qdlg = wx.MessageDialog(parent = self,
-                                        message = _("A signature file named %s already exists.\n"
-                                                    "Do you want to replace it?") % dlg.GetFileName(),
-                                        caption = _("File already exists"),
-                                        style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+            if os.path.exists(dlg.GetFileName(fullPath=True)):
+                qdlg = wx.MessageDialog(
+                    parent=self,
+                    message=_(
+                        "A signature file named %s already exists.\n"
+                        "Do you want to replace it?") %
+                    dlg.GetFileName(),
+                    caption=_("File already exists"),
+                    style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
                 if qdlg.ShowModal() == wx.ID_YES:
                     qdlg.Destroy()
                 else:
                     qdlg.Destroy()
                     return
             self.sigFile = dlg.GetFileName()
-            self.WriteSignatures(self.signatures, self.g['group'], self.g['subgroup'], self.sigFile)
-            
+            self.WriteSignatures(
+                self.signatures,
+                self.g['group'],
+                self.g['subgroup'],
+                self.sigFile)
+
         dlg.Destroy()
-        
+
     def InitStatistics(self):
         """Initialize variables and c structures neccessary for
         computing statistics.
         """
-        self.g = {'group' : None, 'subgroup' : None}
+        self.g = {'group': None, 'subgroup': None}
         self.sigFile = None
-        
+
         self.stats_data = StatisticsData()
-        
+
         self.cStatisticsDict = {}
-        
+
         self.signatures_obj = Signature()
         self.signatures = pointer(self.signatures_obj)
-        I_init_signatures(self.signatures, 0) # must be freed on exit
-        
+        I_init_signatures(self.signatures, 0)  # must be freed on exit
+
         refer_obj = Ref()
         self.refer = pointer(refer_obj)
-        I_init_group_ref(self.refer) # must be freed on exit
-        
+        I_init_group_ref(self.refer)  # must be freed on exit
+
     def WriteSignatures(self, signatures, group, subgroup, filename):
         """Writes current signatures to signature file
-        
+
         :param signatures: signature (c structure)
         :param group: imagery group
         :param filename: signature file name
         """
         I_iclass_write_signatures(signatures, group, subgroup, filename)
-                                        
+
     def CheckInput(self, group, vector):
         """Check if input is valid"""
         # check if group is ok
-        #TODO check subgroup
+        # TODO check subgroup
         if not group:
-            GMessage(parent = self,
-                     message = _("No imagery group selected. "
-                                 "Operation canceled."))
+            GMessage(parent=self,
+                     message=_("No imagery group selected. "
+                               "Operation canceled."))
             return False
-            
+
         groupLayers = self.GetGroupLayers(self.g['group'], self.g['subgroup'])
-            
+
         nLayers = len(groupLayers)
         if nLayers <= 1:
-            GMessage(parent = self,
-                     message = _("Group <%(group)s> does not have enough files "
-                                 "(it has %(files)d files). Operation canceled.") % \
-                         { 'group' : group,
-                           'files' : nLayers })
+            GMessage(
+                parent=self,
+                message=_(
+                    "Group <%(group)s> does not have enough files "
+                    "(it has %(files)d files). Operation canceled.") %
+                {'group': group, 'files': nLayers})
             return False
-        
-        #check if vector has any areas
+
+        # check if vector has any areas
         if self.GetAreasCount() == 0:
-            GMessage(parent = self,
-            message = _("No areas given. "
-                        "Operation canceled."))
+            GMessage(parent=self,
+                     message=_("No areas given. "
+                               "Operation canceled."))
             return False
-            
+
         # check if vector is inside raster
         regionBox = bound_box()
         Vect_get_map_box(self.poMapInfo, byref(regionBox))
-        
+
         rasterInfo = grass.raster_info(groupLayers[0])
-        
+
         if regionBox.N > rasterInfo['north'] or \
            regionBox.S < rasterInfo['south'] or \
            regionBox.E > rasterInfo['east'] or \
            regionBox.W < rasterInfo['west']:
-           GMessage(parent = self,
-                    message = _("Vector features are outside raster layers. "
-                                "Operation canceled."))
-           return False
-            
+            GMessage(parent=self,
+                     message=_("Vector features are outside raster layers. "
+                               "Operation canceled."))
+            return False
+
         return True
-        
+
     def GetAreasCount(self):
         """Returns number of not dead areas"""
         count = 0
@@ -1105,10 +1233,10 @@ class IClassMapFrame(DoubleMapFrame):
             if Vect_area_alive(self.poMapInfo, i + 1):
                 count += 1
         return count
-        
+
     def GetGroupLayers(self, group, subgroup=None):
         """Get layers in subgroup (expecting same name for group and subgroup)
-    
+
         .. todo::
             consider moving this function to core module for convenient
         """
@@ -1117,42 +1245,42 @@ class IClassMapFrame(DoubleMapFrame):
             kwargs['subgroup'] = subgroup
 
         res = RunCommand('i.group',
-                         flags = 'g',
-                         group = group,
-                         read = True, **kwargs).strip()
+                         flags='g',
+                         group=group,
+                         read=True, **kwargs).strip()
         if res.splitlines()[0]:
             return sorted(res.splitlines())
-        
+
         return []
-    
+
     def ConvertToNull(self, name):
         """Sets value which represents null values for given raster map.
-        
+
         :param name: raster map name
         """
         RunCommand('r.null',
-                   map = name,
-                   setnull = 0)
-                     
+                   map=name,
+                   setnull=0)
+
     def GetCurrentCategoryIdx(self):
         """Returns current category number"""
         return self.toolbars['iClass'].GetSelectedCategoryIdx()
-        
+
     def OnZoomIn(self, event):
         """Enable zooming for plots"""
         super(IClassMapFrame, self).OnZoomIn(event)
-        self.plotPanel.EnableZoom(type = 1)
-        
+        self.plotPanel.EnableZoom(type=1)
+
     def OnZoomOut(self, event):
         """Enable zooming for plots"""
         super(IClassMapFrame, self).OnZoomOut(event)
-        self.plotPanel.EnableZoom(type = -1)
-        
+        self.plotPanel.EnableZoom(type=-1)
+
     def OnPan(self, event):
         """Enable panning for plots"""
         super(IClassMapFrame, self).OnPan(event)
         self.plotPanel.EnablePan()
-        
+
     def OnPointer(self, event):
         """Set pointer mode.
 
@@ -1165,20 +1293,22 @@ class IClassMapFrame(DoubleMapFrame):
     def GetMapManagers(self):
         """Get map managers of wxIClass
 
-        :return: trainingMapManager, previewMapManager 
+        :return: trainingMapManager, previewMapManager
         """
         return self.trainingMapManager, self.previewMapManager
 
+
 class MapManager:
     """Class for managing map renderer.
-    
+
     It is connected with iClassMapManagerToolbar.
     """
+
     def __init__(self, frame, mapWindow, Map):
         """
-        
+
         It is expected that \a mapWindow is conected with \a Map.
-        
+
         :param frame: application main window
         :param mapWindow: map window instance
         :param map: map renderer instance
@@ -1187,38 +1317,37 @@ class MapManager:
         self.frame = frame
         self.mapWindow = mapWindow
         self.toolbar = None
-        
+
         self.layerName = {}
-        
-        
+
     def SetToolbar(self, toolbar):
         self.toolbar = toolbar
-        
-    def AddLayer(self, name, alias = None, resultsLayer = False):
-        """Adds layer to Map and update toolbar 
-        
+
+    def AddLayer(self, name, alias=None, resultsLayer=False):
+        """Adds layer to Map and update toolbar
+
         :param str name: layer (raster) name
         :param str resultsLayer: True if layer is temp. raster showing the results of computation
         """
-        if (resultsLayer and
-            name in [l.GetName() for l in self.map.GetListOfLayers(name = name)]):
+        if (resultsLayer and name in [l.GetName()
+                                      for l in self.map.GetListOfLayers(name=name)]):
             self.frame.Render(self.mapWindow)
             return
-            
+
         cmdlist = ['d.rast', 'map=%s' % name]
-        self.map.AddLayer(ltype = 'raster', command = cmdlist, active = True,
-                          name = name, hidden = False, opacity = 1.0, render = True)
+        self.map.AddLayer(ltype='raster', command=cmdlist, active=True,
+                          name=name, hidden=False, opacity=1.0, render=True)
         self.frame.Render(self.mapWindow)
-        
+
         if alias is not None:
             self.layerName[alias] = name
             name = alias
         else:
             self.layerName[name] = name
-            
+
         self.toolbar.choice.Insert(name, 0)
         self.toolbar.choice.SetSelection(0)
-        
+
     def AddLayerRGB(self, cmd):
         """Adds RGB layer and update toolbar.
 
@@ -1229,8 +1358,8 @@ class MapManager:
             if '=' in param:
                 name.append(param.split('=')[1])
         name = ','.join(name)
-        self.map.AddLayer(ltype = 'rgb', command = cmd, active = True,
-                          name = name, hidden = False, opacity = 1.0, render = True)
+        self.map.AddLayer(ltype='rgb', command=cmd, active=True,
+                          name=name, hidden=False, opacity=1.0, render=True)
         self.frame.Render(self.mapWindow)
         self.layerName[name] = name
         self.toolbar.choice.Insert(name, 0)
@@ -1238,11 +1367,11 @@ class MapManager:
 
     def RemoveTemporaryLayer(self, name):
         """Removes temporary layer (if exists) from Map and and updates toolbar.
-        
+
         :param name: real name of layer
         """
         # check if layer is loaded
-        layers = self.map.GetListOfLayers(ltype = 'raster')
+        layers = self.map.GetListOfLayers(ltype='raster')
         idx = None
         for i, layer in enumerate(layers):
             if name == layer.GetName():
@@ -1251,13 +1380,13 @@ class MapManager:
         if idx is None:
             return
         # remove it from Map
-        self.map.RemoveLayer(name = name)
-        
+        self.map.RemoveLayer(name=name)
+
         # update inner list of layers
         alias = self.GetAlias(name)
         if alias not in self.layerName:
             return
-            
+
         del self.layerName[alias]
         # update choice
         idx = self.toolbar.choice.FindString(alias)
@@ -1265,9 +1394,9 @@ class MapManager:
             self.toolbar.choice.Delete(idx)
             if not self.toolbar.choice.IsEmpty():
                 self.toolbar.choice.SetSelection(0)
-        
+
         self.frame.Render(self.mapWindow)
-    
+
     def Render(self):
         """
         .. todo::
@@ -1277,66 +1406,67 @@ class MapManager:
     def RemoveLayer(self, name, idx):
         """Removes layer from Map and update toolbar"""
         name = self.layerName[name]
-        self.map.RemoveLayer(name = name)
+        self.map.RemoveLayer(name=name)
         del self.layerName[name]
         self.toolbar.choice.Delete(idx)
         if not self.toolbar.choice.IsEmpty():
             self.toolbar.choice.SetSelection(0)
-            
+
         self.frame.Render(self.mapWindow)
-            
+
     def SelectLayer(self, name):
         """Moves selected layer to top"""
-        layers = self.map.GetListOfLayers(ltype = 'rgb') + \
-                 self.map.GetListOfLayers(ltype = 'raster')
+        layers = self.map.GetListOfLayers(ltype='rgb') + \
+            self.map.GetListOfLayers(ltype='raster')
         idx = None
         for i, layer in enumerate(layers):
             if self.layerName[name] == layer.GetName():
                 idx = i
                 break
-                
-        if idx is not None: # should not happen
+
+        if idx is not None:  # should not happen
             layers.append(layers.pop(idx))
-            
+
             choice = self.toolbar.choice
             idx = choice.FindString(name)
             choice.Delete(idx)
             choice.Insert(name, 0)
             choice.SetSelection(0)
-            
-            #layers.reverse()
+
+            # layers.reverse()
             self.map.SetLayers(layers)
             self.frame.Render(self.mapWindow)
-        
+
     def SetOpacity(self, name):
         """Sets opacity of layers."""
         name = self.layerName[name]
-        layers = self.map.GetListOfLayers(name = name)
+        layers = self.map.GetListOfLayers(name=name)
         if not layers:
             return
-            
+
         # works for first layer only
         oldOpacity = layers[0].GetOpacity()
-        dlg = SetOpacityDialog(self.frame, opacity = oldOpacity)
-        dlg.applyOpacity.connect(lambda value:
-                                 self._changeOpacity(layer=layers[0], opacity=value))
-        
+        dlg = SetOpacityDialog(self.frame, opacity=oldOpacity)
+        dlg.applyOpacity.connect(
+            lambda value: self._changeOpacity(
+                layer=layers[0], opacity=value))
+
         if dlg.ShowModal() == wx.ID_OK:
             self._changeOpacity(layer=layers[0], opacity=dlg.GetOpacity())
-            
+
         dlg.Destroy()
 
     def _changeOpacity(self, layer, opacity):
         self.map.ChangeOpacity(layer=layer, opacity=opacity)
         self.frame.Render(self.mapWindow)
-                
+
     def GetAlias(self, name):
         """Returns alias for layer"""
-        name =  [k for k, v in self.layerName.iteritems() if v == name]
+        name = [k for k, v in self.layerName.iteritems() if v == name]
         if name:
             return name[0]
         return None
-        
+
     def SetAlias(self, original, alias):
         name = self.GetAlias(original)
         if name:
@@ -1346,16 +1476,16 @@ class MapManager:
             if idx != wx.NOT_FOUND:
                 self.toolbar.choice.SetString(idx, alias)
 
+
 def test():
     import core.render as render
 
     app = wx.App()
     wx.InitAllImageHandlers()
-    
+
     frame = IClassMapFrame()
     frame.Show()
     app.MainLoop()
 
 if __name__ == "__main__":
     test()
-    
diff --git a/gui/wxpython/iclass/g.gui.iclass.html b/gui/wxpython/iclass/g.gui.iclass.html
index 3d80810..591de6f 100644
--- a/gui/wxpython/iclass/g.gui.iclass.html
+++ b/gui/wxpython/iclass/g.gui.iclass.html
@@ -90,4 +90,4 @@ Vaclav Petras,
  <a href="http://www.cvut.cz">Czech Technical University in Prague</a>, Czech Republic
 
 <p>
-<i>$Date: 2014-04-20 19:57:39 +0200 (Sun, 20 Apr 2014) $</i>
+<i>$Date: 2014-04-20 15:20:39 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/gui/wxpython/iclass/g.gui.iclass.py b/gui/wxpython/iclass/g.gui.iclass.py
index 83ffdc2..0db698d 100755
--- a/gui/wxpython/iclass/g.gui.iclass.py
+++ b/gui/wxpython/iclass/g.gui.iclass.py
@@ -58,6 +58,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.settings import UserSettings
     from core.globalvar import CheckWxVersion
     from core.giface import StandaloneGrassInterface
@@ -90,7 +94,9 @@ def main():
         trainingmap_name = gscript.find_file(name=options['trainingmap'],
                                              element='vector')['fullname']
         if not trainingmap_name:
-            gscript.fatal(_("Vector map <%s> not found") % options['trainingmap'])
+            gscript.fatal(
+                _("Vector map <%s> not found") %
+                options['trainingmap'])
 
     # define display driver
     driver = UserSettings.Get(group='display', key='driver', subkey='type')
diff --git a/gui/wxpython/iclass/plots.py b/gui/wxpython/iclass/plots.py
index af70bd8..5229166 100644
--- a/gui/wxpython/iclass/plots.py
+++ b/gui/wxpython/iclass/plots.py
@@ -28,25 +28,27 @@ import wx.lib.scrolledpanel as scrolled
 from core.utils import _
 from core.gcmd import GError
 
+
 class PlotPanel(scrolled.ScrolledPanel):
     """Panel for drawing multiple plots.
-    
+
     There are three types of plots: histograms, coincidence plots and scatter plots.
     Histograms show frequency of cell category values in training areas
     for each band and for one category. Coincidence plots show min max range
     of classes for each band.
     """
+
     def __init__(self, parent, giface, stats_data):
         scrolled.ScrolledPanel.__init__(self, parent)
-        
-        self.SetupScrolling(scroll_x = False, scroll_y = True)
+
+        self.SetupScrolling(scroll_x=False, scroll_y=True)
         self._giface = giface
         self.parent = parent
         self.canvasList = []
         self.bandList = []
         self.stats_data = stats_data
         self.currentCat = None
-        
+
         self.mainSizer = wx.BoxSizer(wx.VERTICAL)
 
         self._createControlPanel()
@@ -64,46 +66,64 @@ class PlotPanel(scrolled.ScrolledPanel):
     def _createPlotPanel(self):
 
         self.canvasPanel = wx.Panel(parent=self)
-        self.mainSizer.Add(item = self.canvasPanel, proportion = 1, flag = wx.EXPAND, border = 0)
+        self.mainSizer.Add(
+            item=self.canvasPanel,
+            proportion=1,
+            flag=wx.EXPAND,
+            border=0)
         self.canvasSizer = wx.BoxSizer(wx.VERTICAL)
         self.canvasPanel.SetSizer(self.canvasSizer)
 
     def _createControlPanel(self):
-        self.plotSwitch = wx.Choice(self, id = wx.ID_ANY,
-                                     choices = [_("Histograms"),
-                                                _("Coincident plots"),
-                                                _("Scatter plots")])
-        self.mainSizer.Add(self.plotSwitch, proportion = 0, flag = wx.EXPAND|wx.ALL, border = 5)
+        self.plotSwitch = wx.Choice(self, id=wx.ID_ANY,
+                                    choices=[_("Histograms"),
+                                             _("Coincident plots"),
+                                             _("Scatter plots")])
+        self.mainSizer.Add(
+            self.plotSwitch,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self.plotSwitch.Bind(wx.EVT_CHOICE, self.OnPlotTypeSelected)
-    
+
     def _createScatterPlotPanel(self):
         """Init interactive scatter plot tool
         """
         try:
             from iscatt.frame import IClassIScattPanel
-            self.iscatt_panel = IClassIScattPanel(parent=self, 
-                                                  giface=self._giface, 
-                                                  iclass_mapwin = self.parent.GetFirstWindow())
-            self.mainSizer.Add(self.iscatt_panel, proportion = 1, flag = wx.EXPAND, border = 0)
+            self.iscatt_panel = IClassIScattPanel(
+                parent=self, giface=self._giface,
+                iclass_mapwin=self.parent.GetFirstWindow())
+            self.mainSizer.Add(
+                self.iscatt_panel,
+                proportion=1,
+                flag=wx.EXPAND,
+                border=0)
             self.iscatt_panel.Hide()
         except ImportError as e:
-            self.scatt_error = _("Scatter plot functionality is disabled.\n\nReason: " \
-                                 "Unable to import packages needed for scatter plot.\n%s" % e)
-            wx.CallAfter(GError, self.scatt_error, showTraceback=False, parent=self)
+            self.scatt_error = _(
+                "Scatter plot functionality is disabled.\n\nReason: "
+                "Unable to import packages needed for scatter plot.\n%s" %
+                e)
+            wx.CallAfter(
+                GError,
+                self.scatt_error,
+                showTraceback=False,
+                parent=self)
             self.iscatt_panel = None
 
     def OnPlotTypeSelected(self, event):
         """Plot type selected"""
 
         if self.plotSwitch.GetSelection() in [0, 1]:
-            self.SetupScrolling(scroll_x = False, scroll_y = True)
+            self.SetupScrolling(scroll_x=False, scroll_y=True)
             if self.iscatt_panel:
                 self.iscatt_panel.Hide()
             self.canvasPanel.Show()
             self.Layout()
 
         elif self.plotSwitch.GetSelection() == 2:
-            self.SetupScrolling(scroll_x = False, scroll_y = False)
+            self.SetupScrolling(scroll_x=False, scroll_y=False)
             if self.iscatt_panel:
                 self.iscatt_panel.Show()
             else:
@@ -130,35 +150,35 @@ class PlotPanel(scrolled.ScrolledPanel):
         if self.plotSwitch.GetSelection() == 0:
             stat = self.stats_data.GetStatistics(self.currentCat)
             self.UpdateRanges(stat)
-        
-    def EnableZoom(self, type, enable = True):
+
+    def EnableZoom(self, type, enable=True):
         for canvas in self.canvasList:
             canvas.SetEnableZoom(enable)
-            
+
         #canvas.zoom = type
-        
-    def EnablePan(self, enable = True):
+
+    def EnablePan(self, enable=True):
         for canvas in self.canvasList:
             canvas.SetEnableDrag(enable)
-            
+
     def DestroyPlots(self):
         """Destroy all plot canvases"""
         for panel in self.canvasList:
             panel.Destroy()
-            
+
         self.canvasList = []
 
     def ClearPlots(self):
         """Clears plot canvases"""
         for bandIdx in range(len(self.bandList)):
             self.canvasList[bandIdx].Clear()
-            
+
     def Reset(self):
         """Reset plots (when new map imported)"""
         self.currentCat = None
         self.ClearPlots()
         # bands are still the same
-        
+
     def CreatePlotCanvases(self):
         """Create plot canvases according to the number of bands"""
         for band in self.bandList:
@@ -167,15 +187,19 @@ class PlotPanel(scrolled.ScrolledPanel):
             canvas.SetFontSizeTitle(10)
             canvas.SetFontSizeAxis(8)
             self.canvasList.append(canvas)
-            
-            self.canvasSizer.Add(item = canvas, proportion = 1, flag = wx.EXPAND, border = 0)
-        
+
+            self.canvasSizer.Add(
+                item=canvas,
+                proportion=1,
+                flag=wx.EXPAND,
+                border=0)
+
         self.SetVirtualSize(self.GetBestVirtualSize())
         self.Layout()
-        
+
     def UpdatePlots(self, group, subgroup, currentCat, stats_data):
         """Update plots after new analysis
-        
+
         :param group: imagery group
         :param subgroup: imagery group
         :param currentCat: currently selected category (class)
@@ -184,24 +208,24 @@ class PlotPanel(scrolled.ScrolledPanel):
         self.stats_data = stats_data
         self.currentCat = currentCat
         self.bandList = self.parent.GetGroupLayers(group, subgroup)
-        
+
         graphType = self.plotSwitch.GetSelection()
 
         stat = self.stats_data.GetStatistics(currentCat)
         if not stat.IsReady() and graphType == 0:
             return
-            
+
         self.DestroyPlots()
         self.CreatePlotCanvases()
         self.OnPlotTypeSelected(None)
-        
+
     def UpdateCategory(self, cat):
         self.currentCat = cat
-    
+
     def DrawCoincidencePlots(self):
         """Draw coincidence plots"""
         for bandIdx in range(len(self.bandList)):
-            self.canvasList[bandIdx].SetYSpec(type = 'none')
+            self.canvasList[bandIdx].SetYSpec(type='none')
             lines = []
             level = 0.5
             lines.append(self.DrawInvisibleLine(level))
@@ -213,19 +237,20 @@ class PlotPanel(scrolled.ScrolledPanel):
                     continue
                 color = stat.color
                 level = i + 1
-                line = self.DrawCoincidenceLine(level, color, stat.bands[bandIdx])
+                line = self.DrawCoincidenceLine(
+                    level, color, stat.bands[bandIdx])
                 lines.append(line)
-            
-            # invisible 
+
+            # invisible
             level += 0.5
             lines.append(self.DrawInvisibleLine(level))
-            
-            plotGraph = plot.PlotGraphics(lines, title = self.bandList[bandIdx])
+
+            plotGraph = plot.PlotGraphics(lines, title=self.bandList[bandIdx])
             self.canvasList[bandIdx].Draw(plotGraph)
-        
+
     def DrawCoincidenceLine(self, level, color, bandValues):
         """Draw line between band min and max values
-        
+
         :param level: y coordinate of line
         :param color: class color
         :param bandValues: BandStatistics instance
@@ -234,75 +259,80 @@ class PlotPanel(scrolled.ScrolledPanel):
         maxim = bandValues.max
         points = [(minim, level), (maxim, level)]
         color = wx.Colour(*map(int, color.split(':')))
-        return plot.PolyLine(points, colour = color, width = 4)
-        
+        return plot.PolyLine(points, colour=color, width=4)
+
     def DrawInvisibleLine(self, level):
         """Draw white line to achieve better margins"""
         points = [(100, level), (101, level)]
-        return plot.PolyLine(points, colour = wx.WHITE, width = 1)
-        
+        return plot.PolyLine(points, colour=wx.WHITE, width=1)
+
     def DrawHistograms(self, statistics):
         """Draw histograms for one class
-        
+
         :param statistics: statistics for one class
         """
         self.histogramLines = []
         for bandIdx in range(len(self.bandList)):
             self.canvasList[bandIdx].Clear()
-            self.canvasList[bandIdx].SetYSpec(type = 'auto')
-            histgramLine = self.CreateHistogramLine(bandValues = statistics.bands[bandIdx])
-                                                
-            meanLine = self.CreateMean(bandValues = statistics.bands[bandIdx])
-            
-            minLine = self.CreateMin(bandValues = statistics.bands[bandIdx])
-            
-            maxLine = self.CreateMax(bandValues = statistics.bands[bandIdx])
-            
-            self.histogramLines.append([histgramLine, meanLine, minLine, maxLine])
-            
-            maxRangeLine = self.CreateMaxRange(bandValues = statistics.bands[bandIdx])
-            minRangeLine = self.CreateMinRange(bandValues = statistics.bands[bandIdx])
-            
-            plotGraph = plot.PlotGraphics(self.histogramLines[bandIdx] + [minRangeLine, maxRangeLine],
-                                          title = self.bandList[bandIdx])
+            self.canvasList[bandIdx].SetYSpec(type='auto')
+            histgramLine = self.CreateHistogramLine(
+                bandValues=statistics.bands[bandIdx])
+
+            meanLine = self.CreateMean(bandValues=statistics.bands[bandIdx])
+
+            minLine = self.CreateMin(bandValues=statistics.bands[bandIdx])
+
+            maxLine = self.CreateMax(bandValues=statistics.bands[bandIdx])
+
+            self.histogramLines.append(
+                [histgramLine, meanLine, minLine, maxLine])
+
+            maxRangeLine = self.CreateMaxRange(
+                bandValues=statistics.bands[bandIdx])
+            minRangeLine = self.CreateMinRange(
+                bandValues=statistics.bands[bandIdx])
+
+            plotGraph = plot.PlotGraphics(
+                self.histogramLines[bandIdx] + [minRangeLine, maxRangeLine],
+                title=self.bandList[bandIdx])
             self.canvasList[bandIdx].Draw(plotGraph)
-                            
+
     def CreateMinRange(self, bandValues):
         maxVal = max(bandValues.histo)
         rMin = bandValues.rangeMin
-        
+
         points = [(rMin, 0), (rMin, maxVal)]
-        
-        return plot.PolyLine(points, colour = wx.RED, width = 1)
-        
+
+        return plot.PolyLine(points, colour=wx.RED, width=1)
+
     def CreateMaxRange(self, bandValues):
         maxVal = max(bandValues.histo)
         rMax = bandValues.rangeMax
         points = [(rMax, 0), (rMax, maxVal)]
-        
-        return plot.PolyLine(points, colour = wx.RED, width = 1)
-        
+
+        return plot.PolyLine(points, colour=wx.RED, width=1)
+
     def CreateMean(self, bandValues):
         maxVal = max(bandValues.histo)
         mean = bandValues.mean
         points = [(mean, 0), (mean, maxVal)]
-        
-        return plot.PolyLine(points, colour = wx.BLUE, width = 1)
-        
+
+        return plot.PolyLine(points, colour=wx.BLUE, width=1)
+
     def CreateMin(self, bandValues):
         maxVal = max(bandValues.histo)
         minim = bandValues.min
         points = [(minim, 0), (minim, maxVal)]
-        
-        return plot.PolyLine(points, colour = wx.Colour(200, 200, 200), width = 1)
-        
+
+        return plot.PolyLine(points, colour=wx.Colour(200, 200, 200), width=1)
+
     def CreateMax(self, bandValues):
         maxVal = max(bandValues.histo)
         maxim = bandValues.max
         points = [(maxim, 0), (maxim, maxVal)]
-        
-        return plot.PolyLine(points, colour = wx.Colour(200, 200, 200), width = 1)
-        
+
+        return plot.PolyLine(points, colour=wx.Colour(200, 200, 200), width=1)
+
     def CreateHistogramLine(self, bandValues):
         points = []
         for cellCat, count in enumerate(bandValues.histo):
@@ -311,20 +341,22 @@ class PlotPanel(scrolled.ScrolledPanel):
             if cellCat > bandValues.max + 5:
                 break
             points.append((cellCat, count))
-            
-        return plot.PolyLine(points, colour = wx.BLACK, width = 1)
-         
+
+        return plot.PolyLine(points, colour=wx.BLACK, width=1)
+
     def UpdateRanges(self, statistics):
         """Redraw ranges lines in histograms when std dev multiplier changes
-        
+
         :param statistics: python Statistics instance
         """
         for bandIdx in range(len(self.bandList)):
             self.canvasList[bandIdx].Clear()
-            maxRangeLine = self.CreateMaxRange(bandValues = statistics.bands[bandIdx])
-            minRangeLine = self.CreateMinRange(bandValues = statistics.bands[bandIdx])
-            
-            plotGraph = plot.PlotGraphics(self.histogramLines[bandIdx] + [minRangeLine, maxRangeLine],
-                                          title = self.bandList[bandIdx])
+            maxRangeLine = self.CreateMaxRange(
+                bandValues=statistics.bands[bandIdx])
+            minRangeLine = self.CreateMinRange(
+                bandValues=statistics.bands[bandIdx])
+
+            plotGraph = plot.PlotGraphics(
+                self.histogramLines[bandIdx] + [minRangeLine, maxRangeLine],
+                title=self.bandList[bandIdx])
             self.canvasList[bandIdx].Draw(plotGraph)
-        
diff --git a/gui/wxpython/iclass/statistics.py b/gui/wxpython/iclass/statistics.py
index 7200716..63641ca 100644
--- a/gui/wxpython/iclass/statistics.py
+++ b/gui/wxpython/iclass/statistics.py
@@ -30,38 +30,42 @@ except ImportError as e:
 
 from grass.pydispatch.signal import Signal
 
+
 class StatisticsData:
     """Stores all statistics.
     """
+
     def __init__(self):
         self.statisticsDict = {}
         self.statisticsList = []
 
-        self.statisticsAdded = Signal("StatisticsData.statisticsAdded") 
-        self.statisticsDeleted = Signal("StatisticsData.statisticsDeleted") 
-        self.allStatisticsDeleted = Signal("StatisticsData.allStatisticsDeleted") 
+        self.statisticsAdded = Signal("StatisticsData.statisticsAdded")
+        self.statisticsDeleted = Signal("StatisticsData.statisticsDeleted")
+        self.allStatisticsDeleted = Signal(
+            "StatisticsData.allStatisticsDeleted")
 
-        self.statisticsSet = Signal("StatisticsData.statisticsSet") 
+        self.statisticsSet = Signal("StatisticsData.statisticsSet")
 
     def GetStatistics(self, cat):
         return self.statisticsDict[cat]
 
     def AddStatistics(self, cat, name, color):
         st = Statistics()
-        st.SetBaseStatistics(cat = cat, name = name, color = color)
-        st.statisticsSet.connect(lambda stats : self.statisticsSet.emit(cat = cat, 
-                                                                        stats = stats))
+        st.SetBaseStatistics(cat=cat, name=name, color=color)
+        st.statisticsSet.connect(
+            lambda stats: self.statisticsSet.emit(
+                cat=cat, stats=stats))
 
         self.statisticsDict[cat] = st
         self.statisticsList.append(cat)
 
-        self.statisticsAdded.emit(cat = cat, name = name, color = color)
+        self.statisticsAdded.emit(cat=cat, name=name, color=color)
 
     def DeleteStatistics(self, cat):
         del self.statisticsDict[cat]
         self.statisticsList.remove(cat)
 
-        self.statisticsDeleted.emit(cat = cat)
+        self.statisticsDeleted.emit(cat=cat)
 
     def GetCategories(self):
         return self.statisticsList[:]
@@ -72,13 +76,15 @@ class StatisticsData:
 
         self.allStatisticsDeleted.emit()
 
+
 class Statistics:
     """Statistis conected to one class (category).
-    
+
     It is Python counterpart of similar C structure.
     But it adds some attributes or features used in wxIClass.
     It is not interface to C structure (it copies values).
     """
+
     def __init__(self):
         self.category = -1
         self.name = ""
@@ -90,19 +96,19 @@ class Statistics:
         self.bands = []
         self.ready = False
 
-        self.statisticsSet = Signal("Statistics.statisticsSet") 
+        self.statisticsSet = Signal("Statistics.statisticsSet")
 
-    def SetReady(self, ready = True):
+    def SetReady(self, ready=True):
         self.ready = ready
-        
+
     def IsReady(self):
         return self.ready
-        
+
     def SetBaseStatistics(self, cat, name, color):
         """Sets basic (non-statistical) values.
-        
+
         .. todo::
-            Later self.name is changed but self.rasterName is not. 
+            Later self.name is changed but self.rasterName is not.
             self.rasterName should not be set by user. It can remains
             the same. But it should be done more explicitly. Currently
             it looks like unintentional feature or bug.
@@ -110,16 +116,16 @@ class Statistics:
         self.category = cat
         self.name = name
         self.color = color
-        
-        rasterPath = grass.tempfile(create = False)
+
+        rasterPath = grass.tempfile(create=False)
         name = name.replace(' ', '_')
         self.rasterName = name + '_' + os.path.basename(rasterPath)
-        
+
     def SetFromcStatistics(self, cStatistics):
         """Sets all statistical values.
-        
+
         Copies all statistic values from \a cStattistics.
-        
+
         :param cStatistics: pointer to C statistics structure
         """
         cat = c_int()
@@ -138,12 +144,12 @@ class Statistics:
         I_iclass_statistics_get_color(cStatistics, byref(color))
         if self.color != color.value:
             set_stats["color"] = color.value
-        
+
         nbands = c_int()
         I_iclass_statistics_get_nbands(cStatistics, byref(nbands))
         if self.nbands != nbands.value:
             set_stats["nbands"] = nbands.value
-        
+
         ncells = c_int()
         I_iclass_statistics_get_ncells(cStatistics, byref(ncells))
         if self.ncells != ncells.value:
@@ -153,19 +159,19 @@ class Statistics:
         I_iclass_statistics_get_nstd(cStatistics, byref(nstd))
         if self.nstd != nstd.value:
             set_stats["nstd"] = nstd.value
-                
+
         self.SetStatistics(set_stats)
         self.SetBandStatistics(cStatistics)
 
     def SetBandStatistics(self, cStatistics):
         """Sets all band statistics.
-        
+
         :param cStatistics: pointer to C statistics structure
         """
         self.bands = []
         for i in range(self.nbands):
             band = BandStatistics()
-            band.SetFromcStatistics(cStatistics, index = i)
+            band.SetFromcStatistics(cStatistics, index=i)
             self.bands.append(band)
 
     def SetStatistics(self, stats):
@@ -173,24 +179,25 @@ class Statistics:
         for st, val in stats.iteritems():
             setattr(self, st, val)
 
-        self.statisticsSet.emit(stats = stats)
+        self.statisticsSet.emit(stats=stats)
+
 
 class BandStatistics:
     """Statistis conected to one band within class (category).
-    
+
     :class:`Statistics`
     """
+
     def __init__(self):
         self.min = self.max = None
         self.rangeMin = self.rangeMax = None
         self.mean = None
         self.stddev = None
-        self.histo = [0] * 256 # max categories
-        
-        
+        self.histo = [0] * 256  # max categories
+
     def SetFromcStatistics(self, cStatistics, index):
         """Sets statistics for one band by given index.
-        
+
         :param cStatistics: pointer to C statistics structure
         :param index: index of band in C statistics structure
         """
@@ -198,19 +205,18 @@ class BandStatistics:
         I_iclass_statistics_get_min(cStatistics, index, byref(min))
         I_iclass_statistics_get_max(cStatistics, index, byref(max))
         self.min, self.max = min.value, max.value
-        
+
         rangeMin, rangeMax = c_int(), c_int()
         I_iclass_statistics_get_range_min(cStatistics, index, byref(rangeMin))
         I_iclass_statistics_get_range_max(cStatistics, index, byref(rangeMax))
         self.rangeMin, self.rangeMax = rangeMin.value, rangeMax.value
-        
+
         mean, stddev = c_float(), c_float()
         I_iclass_statistics_get_mean(cStatistics, index, byref(mean))
         I_iclass_statistics_get_stddev(cStatistics, index, byref(stddev))
         self.mean, self.stddev = mean.value, stddev.value
-        
+
         histo = c_int()
         for i in range(len(self.histo)):
             I_iclass_statistics_get_histo(cStatistics, index, i, byref(histo))
             self.histo[i] = histo.value
-        
diff --git a/gui/wxpython/iclass/toolbars.py b/gui/wxpython/iclass/toolbars.py
index ce69ed2..5ece6ce 100644
--- a/gui/wxpython/iclass/toolbars.py
+++ b/gui/wxpython/iclass/toolbars.py
@@ -29,67 +29,80 @@ from gui_core.forms import GUI
 import grass.script as grass
 
 iClassIcons = {
-        'opacity' : MetaIcon(img = 'layer-opacity',
-                             label = _('Set opacity level')),
-        'classManager' : MetaIcon(img = 'table-manager',
-                                  label = _('Class manager')),
-        'selectGroup' : MetaIcon(img = 'layer-group-add',
-                                 label = _('Select imagery group')),
-        'run' : MetaIcon(img = 'execute',
-                         label = _('Run analysis, update histogram and coincidence plots')),
-        'sigFile' : MetaIcon(img = 'script-save',
-                             label = _('Save signature file for i.maxlik')),
-        'delCmd' : MetaIcon(img = 'layer-remove',
-                            label = _('Remove selected map layer')),
-        'exportAreas' : MetaIcon(img = 'layer-export',
-                            label = _('Export training areas to vector map')),
-        'importAreas' : MetaIcon(img = 'layer-import',
-                            label = _('Import training areas from vector map')),
-        'addRgb' : MetaIcon(img = 'layer-rgb-add',
-                            label = _('Add RGB map layer'))
-        }
-        
+    'opacity': MetaIcon(
+        img='layer-opacity',
+        label=_('Set opacity level')),
+    'classManager': MetaIcon(
+        img='table-manager',
+        label=_('Class manager')),
+    'selectGroup': MetaIcon(
+        img='layer-group-add',
+        label=_('Select imagery group')),
+    'run': MetaIcon(
+        img='execute',
+        label=_('Run analysis, update histogram and coincidence plots')),
+    'sigFile': MetaIcon(
+        img='script-save',
+        label=_('Save signature file for i.maxlik')),
+    'delCmd': MetaIcon(
+        img='layer-remove',
+        label=_('Remove selected map layer')),
+    'exportAreas': MetaIcon(
+        img='layer-export',
+        label=_('Export training areas to vector map')),
+    'importAreas': MetaIcon(
+        img='layer-import',
+        label=_('Import training areas from vector map')),
+    'addRgb': MetaIcon(
+        img='layer-rgb-add',
+        label=_('Add RGB map layer'))}
+
+
 class IClassMapToolbar(BaseToolbar):
     """IClass Map toolbar
     """
+
     def __init__(self, parent, toolSwitcher):
         """IClass Map toolbar constructor
         """
         BaseToolbar.__init__(self, parent, toolSwitcher)
-        
+
         self.InitToolbar(self._toolbarData())
         self._default = self.pan
-        
+
         # add tool to toggle active map window
         self.togglemapid = wx.NewId()
-        self.togglemap = wx.Choice(parent = self, id = self.togglemapid,
-                                   choices = [_('Training'), _('Preview')])
-        
+        self.togglemap = wx.Choice(parent=self, id=self.togglemapid,
+                                   choices=[_('Training'), _('Preview')])
+
         self.InsertControl(9, self.togglemap)
 
-        self.SetToolShortHelp(self.togglemapid, '%s %s %s' % (_('Set map canvas for '),
-                                                              BaseIcons["zoomBack"].GetLabel(),
-                                                              _('/ Zoom to map')))
+        self.SetToolShortHelp(
+            self.togglemapid, '%s %s %s' %
+            (_('Set map canvas for '),
+             BaseIcons["zoomBack"].GetLabel(),
+             _('/ Zoom to map')))
 
         for tool in (self.pan, self.zoomIn, self.zoomOut):
-            self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
+            self.toolSwitcher.AddToolToGroup(
+                group='mouseUse', toolbar=self, tool=tool)
         # realize the toolbar
         self.Realize()
-        
+
         self.EnableTool(self.zoomBack, False)
-        
+
     def GetActiveMapTool(self):
         """Return widget for selecting active maps"""
         return self.togglemap
-        
+
     def GetActiveMap(self):
         """Get currently selected map"""
         return self.togglemap.GetSelection()
-        
+
     def SetActiveMap(self, index):
         """Set currently selected map"""
         return self.togglemap.SetSelection(index)
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         icons = BaseIcons
@@ -118,10 +131,13 @@ class IClassMapToolbar(BaseToolbar):
                                       self.parent.OnZoomBack),
                                      ("zoomToMap", icons["zoomExtent"],
                                       self.parent.OnZoomToMap)
-                                    ))
+                                     ))
+
+
 class IClassToolbar(BaseToolbar):
     """IClass toolbar
     """
+
     def __init__(self, parent, stats_data):
         """IClass toolbar constructor
         """
@@ -129,25 +145,25 @@ class IClassToolbar(BaseToolbar):
 
         BaseToolbar.__init__(self, parent)
         self.InitToolbar(self._toolbarData())
-        
-        self.choice = wx.Choice(parent = self, id = wx.ID_ANY, size = (110, -1))
+
+        self.choice = wx.Choice(parent=self, id=wx.ID_ANY, size=(110, -1))
         choiceid = self.InsertControl(3, self.choice)
-        
+
         self.choice.Bind(wx.EVT_CHOICE, self.OnSelectCategory)
-        
+
         # stupid workaround to insert small space between controls
-        self.InsertControl(4, wx.StaticText(self, id = wx.ID_ANY, label = ' '))
-        
-        self.combo = wx.ComboBox(self, id = wx.ID_ANY, size = (130, -1), 
-                                 style = wx.TE_PROCESS_ENTER)
+        self.InsertControl(4, wx.StaticText(self, id=wx.ID_ANY, label=' '))
+
+        self.combo = wx.ComboBox(self, id=wx.ID_ANY, size=(130, -1),
+                                 style=wx.TE_PROCESS_ENTER)
         self.InitStddev()
         comboid = self.InsertControl(5, self.combo)
-        
+
         self.EnableControls(False)
-        
+
         self.combo.Bind(wx.EVT_COMBOBOX, self.OnStdChangeSelection)
         self.combo.Bind(wx.EVT_TEXT_ENTER, self.OnStdChangeText)
-    
+
         self.stats_data.statisticsAdded.connect(self.Update)
         self.stats_data.statisticsDeleted.connect(self.Update)
         self.stats_data.allStatisticsDeleted.connect(self.Update)
@@ -155,37 +171,37 @@ class IClassToolbar(BaseToolbar):
 
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         icons = iClassIcons
         return self._getToolbarData((("selectGroup", icons['selectGroup'],
-                                      lambda event : self.parent.AddBands()),
-                                      (None, ),
-                                      ("classManager", icons['classManager'],
+                                      lambda event: self.parent.AddBands()),
+                                     (None, ),
+                                     ("classManager", icons['classManager'],
                                       self.parent.OnCategoryManager),
-                                      (None, ),
-                                      ("runAnalysis", icons['run'],
+                                     (None, ),
+                                     ("runAnalysis", icons['run'],
                                       self.parent.OnRunAnalysis),
-                                      (None, ),
-                                      ("importAreas", icons['importAreas'],
+                                     (None, ),
+                                     ("importAreas", icons['importAreas'],
                                       self.parent.OnImportAreas),
-                                      ("exportAreas", icons['exportAreas'],
+                                     ("exportAreas", icons['exportAreas'],
                                       self.parent.OnExportAreas),
-                                      ("sigFile", icons['sigFile'],
+                                     ("sigFile", icons['sigFile'],
                                       self.parent.OnSaveSigFile),
-                                    ))
+                                     ))
 
     def OnMotion(self, event):
         print self.choice.GetStringSelection()
-                                
+
     def OnSelectCategory(self, event):
         idx = self.choice.GetSelection()
         cat = self.choice.GetClientData(idx)
 
         self._updateColor(cat)
-        self.parent.CategoryChanged(currentCat = cat)
-        
+        self.parent.CategoryChanged(currentCat=cat)
+
     def _updateColor(self, cat):
 
         if cat:
@@ -203,23 +219,23 @@ class IClassToolbar(BaseToolbar):
         self.choice.Clear()
         for name, idx in zip(catNames, catIdx):
             self.choice.Append(name, idx)
-        
+
     def GetSelectedCategoryName(self):
         return self.choice.GetStringSelection()
-        
+
     def GetSelectedCategoryIdx(self):
         idx = self.choice.GetSelection()
         if idx != wx.NOT_FOUND:
             return self.choice.GetClientData(idx)
-        
+
         return None
-        
+
     def OnStdChangeSelection(self, event):
         idx = self.combo.GetSelection()
         nstd = self.combo.GetClientData(idx)
-        
+
         self.StddevChanged(nstd)
-        
+
     def OnStdChangeText(self, event):
         val = self.combo.GetValue().strip()
         try:
@@ -229,27 +245,32 @@ class IClassToolbar(BaseToolbar):
                 nstd = float(val.split()[0])
             except ValueError:
                 nstd = None
-                
+
         if nstd is not None:
             self.StddevChanged(nstd)
-            
+
     def StddevChanged(self, nstd):
         idx = self.GetSelectedCategoryIdx()
         if not idx:
             return
-            
-        self.parent.StddevChanged(cat = idx, nstd = nstd)
-        
+
+        self.parent.StddevChanged(cat=idx, nstd=nstd)
+
     def UpdateStddev(self, nstd):
         self.combo.SetValue(' '.join(("%.2f" % nstd, _('std dev'))))
-        
+
     def InitStddev(self):
         for nstd in range(50, 250, 25):
             nstd /= 100.
-            self.combo.Append(item = ' '.join(("%.2f" % nstd, _('std dev'))), clientData = nstd)
-        self.combo.SetSelection(4) # 1.5
-        
-    def EnableControls(self, enable = True):
+            self.combo.Append(
+                item=' '.join(
+                    ("%.2f" %
+                     nstd,
+                     _('std dev'))),
+                clientData=nstd)
+        self.combo.SetSelection(4)  # 1.5
+
+    def EnableControls(self, enable=True):
         self.combo.Enable(enable)
         self.choice.Enable(enable)
 
@@ -261,7 +282,7 @@ class IClassToolbar(BaseToolbar):
         for cat in cats:
             stat = self.stats_data.GetStatistics(cat)
             catNames.append(stat.name)
-        self.SetCategories(catNames = catNames, catIdx = cats)
+        self.SetCategories(catNames=catNames, catIdx=cats)
         if name in catNames:
             self.choice.SetStringSelection(name)
             cat = self.GetSelectedCategoryIdx()
@@ -279,26 +300,28 @@ class IClassToolbar(BaseToolbar):
         self._updateColor(cat)
         self.parent.CategoryChanged(cat)
         # don't forget to update maps, histo, ...
-        
+
+
 class IClassMapManagerToolbar(BaseToolbar):
     """IClass toolbar
     """
+
     def __init__(self, parent, mapManager):
         """IClass toolbar constructor
         """
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        self.choice = wx.Choice(parent = self, id = wx.ID_ANY, size = (300, -1))
-        
+        self.choice = wx.Choice(parent=self, id=wx.ID_ANY, size=(300, -1))
+
         self.choiceid = self.AddControl(self.choice)
-        
+
         self.choice.Bind(wx.EVT_CHOICE, self.OnSelectLayer)
-        
+
         self.mapManager = mapManager
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         return self._getToolbarData((("addRast", BaseIcons['addRast'],
@@ -306,58 +329,63 @@ class IClassMapManagerToolbar(BaseToolbar):
                                      ('addRgb', iClassIcons['addRgb'],
                                       self.OnAddRGB),
                                      ("delRast", iClassIcons['delCmd'],
-                                     self.OnDelRast),
+                                      self.OnDelRast),
                                      ("setOpacity", iClassIcons['opacity'],
-                                     self.OnSetOpacity),
-                                    ))
-                                    
+                                      self.OnSetOpacity),
+                                     ))
+
     def OnSelectLayer(self, event):
         layer = self.choice.GetStringSelection()
-        self.mapManager.SelectLayer(name = layer)
-        
+        self.mapManager.SelectLayer(name=layer)
+
     def OnAddRast(self, event):
-        dlg = IClassMapDialog(self, title = _("Add raster map"), element = 'raster')
+        dlg = IClassMapDialog(
+            self, title=_("Add raster map"),
+            element='raster')
         if dlg.ShowModal() == wx.ID_OK:
-            raster = grass.find_file(name = dlg.GetMap(), element = 'cell')
+            raster = grass.find_file(name=dlg.GetMap(), element='cell')
             if raster['fullname']:
-                self.mapManager.AddLayer(name = raster['fullname'])
-                
+                self.mapManager.AddLayer(name=raster['fullname'])
+
         dlg.Destroy()
-        
+
     def OnAddRGB(self, event):
         cmd = ['d.rgb']
-        GUI(parent = self.parent).ParseCommand(cmd, completed = (self.GetOptData, '', ''))
+        GUI(parent=self.parent).ParseCommand(
+            cmd, completed=(self.GetOptData, '', ''))
 
     def GetOptData(self, dcmd, layer, params, propwin):
         if dcmd:
-            self.mapManager.AddLayerRGB(cmd = dcmd)
+            self.mapManager.AddLayerRGB(cmd=dcmd)
 
     def OnDelRast(self, event):
         layer = self.choice.GetStringSelection()
         idx = self.choice.GetSelection()
         if layer:
-            self.mapManager.RemoveLayer(name = layer, idx = idx)
-            
+            self.mapManager.RemoveLayer(name=layer, idx=idx)
+
     def OnSetOpacity(self, event):
         layer = self.choice.GetStringSelection()
         idx = self.choice.GetSelection()
         if idx == wx.NOT_FOUND:
             return
-            
-        self.mapManager.SetOpacity(name = layer)
+
+        self.mapManager.SetOpacity(name=layer)
+
 
 class IClassMiscToolbar(BaseToolbar):
     """IClass toolbar
     """
+
     def __init__(self, parent):
         """IClass toolbar constructor
         """
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         icons = BaseIcons
@@ -366,4 +394,3 @@ class IClassMiscToolbar(BaseToolbar):
                                      ("quit", icons['quit'],
                                       self.parent.OnCloseWindow),
                                      ))
-    
diff --git a/gui/wxpython/icons/__init__.py b/gui/wxpython/icons/__init__.py
index ab9ef3d..5530af3 100644
--- a/gui/wxpython/icons/__init__.py
+++ b/gui/wxpython/icons/__init__.py
@@ -1 +1 @@
-all = [ "grass" ]
+all = ["grass"]
diff --git a/gui/wxpython/icons/icon.py b/gui/wxpython/icons/icon.py
index 76d6da1..84574e7 100644
--- a/gui/wxpython/icons/icon.py
+++ b/gui/wxpython/icons/icon.py
@@ -26,84 +26,95 @@ from core.utils import _
 
 # default icon set
 import grass_icons
-iconSetDefault  = grass_icons.iconSet
+iconSetDefault = grass_icons.iconSet
 iconPathDefault = grass_icons.iconPath
 
-iconTheme = UserSettings.Get(group = 'appearance', key = 'iconTheme', subkey = 'type')
+iconTheme = UserSettings.Get(
+    group='appearance',
+    key='iconTheme',
+    subkey='type')
 if iconTheme != 'grass':
-    sys.stderr.write(_("Unknown iconset '%s', using default 'grass'...\n") % (iconTheme))
+    sys.stderr.write(
+        _("Unknown iconset '%s', using default 'grass'...\n") %
+        (iconTheme))
 
-iconSet  = iconSetDefault
+iconSet = iconSetDefault
 iconPath = iconPathDefault
 
 # join paths
 try:
     if iconPath and not os.path.exists(iconPath):
         raise OSError
-    
+
     for key, img in iconSet.iteritems():
         if key not in iconSet or \
-                iconSet[key] is None: # add key
+                iconSet[key] is None:  # add key
             iconSet[key] = img
-        
+
         iconSet[key] = os.path.join(iconPath, iconSet[key])
-except StandardError as e:
+except Exception as e:
     sys.exit(_("Unable to load icon theme. Reason: %s. Quiting wxGUI...") % e)
-    
+
+
 class MetaIcon:
     """Handle icon metadata (image path, tooltip, ...)
     """
-    def __init__(self, img, label = None, desc = None):
+
+    def __init__(self, img, label=None, desc=None):
         self.imagepath = iconSet.get(img, wx.ART_MISSING_IMAGE)
         if not self.imagepath:
             self.type = 'unknown'
         else:
-            if self.imagepath.find ('wxART_') > -1:
+            if self.imagepath.find('wxART_') > -1:
                 self.type = 'wx'
             else:
                 self.type = 'img'
-        
+
         self.label = label
-        
+
         if desc:
             self.description = desc
         else:
             self.description = ''
-        
+
     def __str__(self):
-        return "label=%s, img=%s, type=%s" % (self.label, self.imagepath, self.type)
+        return "label=%s, img=%s, type=%s" % (
+            self.label, self.imagepath, self.type)
 
-    def GetBitmap(self, size = None):
+    def GetBitmap(self, size=None):
         bmp = None
-        
+
         if self.type == 'wx':
-            bmp = wx.ArtProvider.GetBitmap(id = self.imagepath, client = wx.ART_TOOLBAR, size = size)
+            bmp = wx.ArtProvider.GetBitmap(
+                id=self.imagepath, client=wx.ART_TOOLBAR, size=size)
         elif self.type == 'img':
-            if os.path.isfile(self.imagepath) and os.path.getsize(self.imagepath):
+            if os.path.isfile(
+                    self.imagepath) and os.path.getsize(
+                    self.imagepath):
                 if size and len(size) == 2:
-                    image = wx.Image(name = self.imagepath)
+                    image = wx.Image(name=self.imagepath)
                     image.Rescale(size[0], size[1])
                     bmp = image.ConvertToBitmap()
                 elif self.imagepath:
-                    bmp = wx.Bitmap(name = self.imagepath)
-        
+                    bmp = wx.Bitmap(name=self.imagepath)
+
         return bmp
-    
+
     def GetLabel(self):
         return self.label
 
     def GetDesc(self):
         return self.description
-    
+
     def GetImageName(self):
         return os.path.basename(self.imagepath)
 
-    def SetLabel(self, label = None, desc = None):
+    def SetLabel(self, label=None, desc=None):
         """Set label/description for icon
 
         :param label: icon label (None for no change)
         :param desc: icon description (None for no change)
-        
+
         :return: copy of original object
         """
         cobj = copy.copy(self)
@@ -111,5 +122,5 @@ class MetaIcon:
             cobj.label = label
         if desc:
             cobj.description = desc
-        
+
         return cobj
diff --git a/gui/wxpython/iscatt/__init__.py b/gui/wxpython/iscatt/__init__.py
index 73dd1f8..5368a92 100644
--- a/gui/wxpython/iscatt/__init__.py
+++ b/gui/wxpython/iscatt/__init__.py
@@ -6,4 +6,4 @@ all = [
     'iscatt_core',
     'toolbars',
     'core_c',
-    ]
+]
diff --git a/gui/wxpython/iscatt/controllers.py b/gui/wxpython/iscatt/controllers.py
index d820051..33a3955 100644
--- a/gui/wxpython/iscatt/controllers.py
+++ b/gui/wxpython/iscatt/controllers.py
@@ -25,12 +25,11 @@ from copy import deepcopy
 import wx
 
 
-
 from core.gcmd import GException, GError, GMessage, RunCommand, GWarning
 from core.settings import UserSettings
 from core.gthread import gThread
 from iscatt.iscatt_core import Core, idBandsToidScatt, GetRasterInfo, GetRegion, \
-MAX_SCATT_SIZE, WARN_SCATT_SIZE, MAX_NCELLS, WARN_NCELLS
+    MAX_SCATT_SIZE, WARN_SCATT_SIZE, MAX_NCELLS, WARN_NCELLS
 from iscatt.dialogs import AddScattPlotDialog, ExportCategoryRaster
 from iclass.dialogs import IClassGroupDialog
 
@@ -38,12 +37,14 @@ import grass.script as grass
 
 from grass.pydispatch.signal import Signal
 
+
 class ScattsManager:
     """Main controller
     """
-    def __init__(self, guiparent, giface, iclass_mapwin = None):
+
+    def __init__(self, guiparent, giface, iclass_mapwin=None):
         self.giface = giface
-        self.mapDisp  = giface.GetMapDisplay()
+        self.mapDisp = giface.GetMapDisplay()
 
         if iclass_mapwin:
             self.mapWin = iclass_mapwin
@@ -57,15 +58,15 @@ class ScattsManager:
         self.core = Core()
 
         self.cats_mgr = CategoriesManager(self, self.core)
-        self.render_mgr = PlotsRenderingManager(scatt_mgr=self, 
-                                                cats_mgr=self.cats_mgr, 
+        self.render_mgr = PlotsRenderingManager(scatt_mgr=self,
+                                                cats_mgr=self.cats_mgr,
                                                 core=self.core)
 
         self.thread = gThread()
-        
+
         self.plots = {}
 
-        self.plot_mode =  None
+        self.plot_mode = None
         self.pol_sel_mode = [False, None]
 
         self.data_set = False
@@ -77,17 +78,17 @@ class ScattsManager:
 
         self.computingStarted = Signal("ScattsManager.computingStarted")
 
-        if iclass_mapwin: 
-            self.digit_conn = IClassDigitConnection(self, 
-                                                    self.mapWin, 
+        if iclass_mapwin:
+            self.digit_conn = IClassDigitConnection(self,
+                                                    self.mapWin,
                                                     self.core.CatRastUpdater())
-            self.iclass_conn = IClassConnection(self, 
-                                                iclass_mapwin.parent, 
+            self.iclass_conn = IClassConnection(self,
+                                                iclass_mapwin.parent,
                                                 self.cats_mgr)
         else:
             self.digit_conn = IMapWinDigitConnection()
-            self.iclass_conn = IMapDispConnection(scatt_mgr=self, 
-                                                  cats_mgr=self.cats_mgr, 
+            self.iclass_conn = IMapDispConnection(scatt_mgr=self,
+                                                  cats_mgr=self.cats_mgr,
                                                   giface=self.giface)
 
         self._initSettings()
@@ -95,7 +96,7 @@ class ScattsManager:
         self.modeSet = Signal("ScattsManager.mondeSet")
 
     def CleanUp(self):
-        self.thread.Terminate() 
+        self.thread.Terminate()
         # there should be better way hot to clean up the thread
         # than calling the clean up function outside the thread,
         # which still may running
@@ -107,28 +108,28 @@ class ScattsManager:
                 scatt['scatt'].CleanUp()
 
         self.plots.clear()
-    
+
     def _initSettings(self):
         """Initialization of settings (if not already defined)
         """
         # initializes default settings
         initSettings = [
-                        ['selection', 'sel_pol', (255,255,0)],
-                        ['selection', 'sel_pol_vertex', (255,0,0)],
-                        ['selection', 'sel_area', (0,255,19)],
-                        ['selection', "snap_tresh", 10],
-                        ['selection', 'sel_area_opacty', 50],
-                        ['ellipses', 'show_ellips', True],
-                       ]
-
-        for init in initSettings: 
+            ['selection', 'sel_pol', (255, 255, 0)],
+            ['selection', 'sel_pol_vertex', (255, 0, 0)],
+            ['selection', 'sel_area', (0, 255, 19)],
+            ['selection', "snap_tresh", 10],
+            ['selection', 'sel_area_opacty', 50],
+            ['ellipses', 'show_ellips', True],
+        ]
+
+        for init in initSettings:
             UserSettings.ReadSettingsFile()
-            UserSettings.Append(dict = UserSettings.userSettings, 
-                                group ='scatt',
-                                key = init[0],
-                                subkey =init[1],
-                                value = init[2],
-                                overwrite = False)
+            UserSettings.Append(dict=UserSettings.userSettings,
+                                group='scatt',
+                                key=init[0],
+                                subkey=init[1],
+                                value=init[2],
+                                overwrite=False)
 
     def SetData(self):
         self.iclass_conn.SetData()
@@ -137,13 +138,13 @@ class ScattsManager:
     def SetBands(self, bands):
         self.busy = wx.BusyInfo(_("Loading data..."))
         self.data_set = False
-        self.thread.Run(callable=self.core.CleanUp, 
-                        ondone=lambda event : self.CleanUpDone())
+        self.thread.Run(callable=self.core.CleanUp,
+                        ondone=lambda event: self.CleanUpDone())
 
         if self.show_add_scatt_plot:
-            show_add=True
+            show_add = True
         else:
-            show_add=False
+            show_add = False
 
         self.all_bands_to_bands = dict(zip(bands, [-1] * len(bands)))
         self.all_bands = bands
@@ -159,7 +160,7 @@ class ScattsManager:
         self.bands = bands[:]
         self.bands_info = {}
         valid_bands = []
-    
+
         for b in self.bands[:]:
             i = GetRasterInfo(b)
 
@@ -168,14 +169,14 @@ class ScattsManager:
                 valid_bands.append(b)
 
         for i, b in enumerate(valid_bands):
-            # name : index in core bands - 
-            # if not in core bands (not CELL type) -> index = -1 
+            # name : index in core bands -
+            # if not in core bands (not CELL type) -> index = -1
             self.all_bands_to_bands[b] = i
 
-        self.thread.Run(callable=self.core.SetData, 
-                        bands=valid_bands, 
-                        ondone=self.SetDataDone, 
-                        userdata={"show_add" : show_add})
+        self.thread.Run(callable=self.core.SetData,
+                        bands=valid_bands,
+                        ondone=self.SetDataDone,
+                        userdata={"show_add": show_add})
 
     def SetDataDone(self, event):
         del self.busy
@@ -188,7 +189,7 @@ class ScattsManager:
         self.bad_rasts = event.ret
         self.cats_mgr.SetData()
         if event.userdata['show_add']:
-          self.AddScattPlot()
+            self.AddScattPlot()
 
     def GetBands(self):
         return self.core.GetBands()
@@ -208,37 +209,39 @@ class ScattsManager:
         bands = self.core.GetBands()
 
         #added_bands_ids = []
-        #for scatt_id in self.plots):
+        # for scatt_id in self.plots):
         #    added_bands_ids.append[idBandsToidScatt(scatt_id)]
 
         self.digit_conn.Update()
 
         ncells = self.region["rows"] * self.region["cols"]
         if ncells > MAX_NCELLS:
-            GError(_(parent=self.guiparent,
-                     mmessage=_("Interactive Scatter Plot Tool can not be used.\n"
-                                "Number of cells (rows*cols) <%d> in current region" 
-                                "is higher than maximum limit <%d>.\n\n"
-                                "You can reduce number of cells in current region using <g.region> command."
-                       % (ncells, MAX_NCELLS))))
+            GError(
+                _(
+                    parent=self.guiparent, mmessage=_(
+                        "Interactive Scatter Plot Tool can not be used.\n"
+                        "Number of cells (rows*cols) <%d> in current region"
+                        "is higher than maximum limit <%d>.\n\n"
+                        "You can reduce number of cells in current region using <g.region> command." %
+                        (ncells, MAX_NCELLS))))
             return
         elif ncells > WARN_NCELLS:
             dlg = wx.MessageDialog(
-                     parent=self.guiparent, 
-                     message=_("Number of cells (rows*cols) <%d> in current region is "
-                               "higher than recommended threshold <%d>.\n"
-                               "It is strongly advised to reduce number of cells "
-                               "in current region below recommend threshold.\n "
-                               "It can be done by <g.region> command.\n\n" 
-                               "Do you want to continue using "
-                               "Interactive Scatter Plot Tool with this region?" 
-                     % (ncells, WARN_NCELLS)), 
-                     style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_WARNING)
+                parent=self.guiparent,
+                message=_("Number of cells (rows*cols) <%d> in current region is "
+                          "higher than recommended threshold <%d>.\n"
+                          "It is strongly advised to reduce number of cells "
+                          "in current region below recommend threshold.\n "
+                          "It can be done by <g.region> command.\n\n"
+                          "Do you want to continue using "
+                          "Interactive Scatter Plot Tool with this region?"
+                          % (ncells, WARN_NCELLS)),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_WARNING)
             ret = dlg.ShowModal()
             if ret != wx.ID_YES:
                 return
-                
-        dlg = AddScattPlotDialog(parent=self.guiparent, 
+
+        dlg = AddScattPlotDialog(parent=self.guiparent,
                                  bands=self.all_bands,
                                  check_bands_callback=self.CheckBands)
 
@@ -259,17 +262,17 @@ class ScattsManager:
                 b_2_id = self.all_bands_to_bands[self.all_bands[b_2]]
 
                 scatt_id = idBandsToidScatt(b_1_id, b_2_id, len(bands))
-                if self.plots.has_key(scatt_id):
+                if scatt_id in self.plots:
                     continue
 
-                self.plots[scatt_id] = {'transpose' : transpose,
-                                        'scatt' : None}
+                self.plots[scatt_id] = {'transpose': transpose,
+                                        'scatt': None}
                 scatt_ids.append(scatt_id)
-            
+
             self._addScattPlot(scatt_ids)
-            
+
         dlg.Destroy()
-     
+
     def CheckBands(self, b_1, b_2):
         bands = self.core.GetBands()
         added_scatts_ids = self.plots.keys()
@@ -278,15 +281,16 @@ class ScattsManager:
         b_2_id = self.all_bands_to_bands[self.all_bands[b_1]]
 
         scatt_id = idBandsToidScatt(b_1_id, b_2_id, len(bands))
-        
+
         if scatt_id in added_scatts_ids:
-            GWarning(parent=self.guiparent, 
-                     message=_("Scatter plot with same band combination (regardless x y order) " 
-                               "is already displayed."))
+            GWarning(
+                parent=self.guiparent, message=_(
+                    "Scatter plot with same band combination (regardless x y order) "
+                    "is already displayed."))
             return False
 
-        b_1_name =  self.all_bands[b_1]
-        b_2_name =  self.all_bands[b_2]
+        b_1_name = self.all_bands[b_1]
+        b_2_name = self.all_bands[b_2]
 
         b_1_i = self.bands_info[b_1_name]
         b_2_i = self.bands_info[b_2_name]
@@ -296,7 +300,7 @@ class ScattsManager:
             if self.bands_info[b] is None:
                 err += _("Band <%s> is not CELL (integer) type.\n" % b)
         if err:
-            GMessage(parent=self.guiparent, 
+            GMessage(parent=self.guiparent,
                      message=_("Scatter plot cannot be added.\n" + err))
             return False
 
@@ -304,27 +308,30 @@ class ScattsManager:
         if mrange > MAX_SCATT_SIZE:
             GWarning(parent=self.guiparent,
                      message=_("Scatter plot cannot be added.\n"
-                               "Multiple of bands ranges <%s:%d * %s:%d = %d> " 
-                               "is higher than maximum limit <%d>.\n" 
-                                  % (b_1_name, b_1_i['range'], b_1_name, b_2_i['range'], 
+                               "Multiple of bands ranges <%s:%d * %s:%d = %d> "
+                               "is higher than maximum limit <%d>.\n"
+                               % (b_1_name, b_1_i['range'], b_1_name, b_2_i['range'],
                                   mrange, MAX_SCATT_SIZE)))
             return False
         elif mrange > WARN_SCATT_SIZE:
-            dlg = wx.MessageDialog(parent = self.guiparent,
-                     message=_("Multiple of bands ranges <%s:%d * %s:%d = %d> " 
-                               "is higher than recommended limit <%d>.\n" 
-                               "It is strongly advised to reduce range extend of bands" 
-                               "(e. g. using r.rescale) below recommended threshold.\n\n"
-                               "Do you really want to add this scatter plot?" 
-                                % (b_1_name, b_1_i['range'], b_1_name, b_2_i['range'], 
-                                   mrange, WARN_SCATT_SIZE)), 
-                     style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_WARNING)
+            dlg = wx.MessageDialog(
+                parent=self.guiparent,
+                message=_(
+                    "Multiple of bands ranges <%s:%d * %s:%d = %d> "
+                    "is higher than recommended limit <%d>.\n"
+                    "It is strongly advised to reduce range extend of bands"
+                    "(e. g. using r.rescale) below recommended threshold.\n\n"
+                    "Do you really want to add this scatter plot?" %
+                    (b_1_name, b_1_i['range'],
+                     b_1_name, b_2_i['range'],
+                     mrange, WARN_SCATT_SIZE)),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_WARNING)
             ret = dlg.ShowModal()
             if ret != wx.ID_YES:
-                return False  
+                return False
 
         return True
-        
+
     def _addScattPlot(self, scatt_ids):
         self.render_mgr.NewRunningProcess()
         self.thread.Run(callable=self.core.AddScattPlots,
@@ -338,14 +345,14 @@ class ScattsManager:
         for s_id in scatt_ids:
             trans = self.plots[s_id]['transpose']
 
-            self.plots[s_id]['scatt'] = self.guiparent.NewScatterPlot(scatt_id=s_id, 
-                                                                      transpose=trans)
+            self.plots[s_id]['scatt'] = self.guiparent.NewScatterPlot(
+                scatt_id=s_id, transpose=trans)
 
             self.plots[s_id]['scatt'].plotClosed.connect(self.PlotClosed)
             self.plots[s_id]['scatt'].cursorMove.connect(
-                                        lambda x, y, scatt_id: 
-                                        self.cursorPlotMove.emit(x=x, y=y, 
-                                                                 scatt_id=scatt_id))
+                lambda x, y, scatt_id:
+                self.cursorPlotMove.emit(x=x, y=y,
+                                         scatt_id=scatt_id))
 
             if self.plot_mode:
                 self.plots[s_id]['scatt'].SetMode(self.plot_mode)
@@ -363,7 +370,7 @@ class ScattsManager:
             if scatt['scatt']:
                 scatt['scatt'].SetMode(mode)
 
-        self.modeSet.emit(mode = mode)
+        self.modeSet.emit(mode=mode)
 
     def ActivateSelectionPolygonMode(self, activate):
         self.pol_sel_mode[0] = activate
@@ -371,14 +378,15 @@ class ScattsManager:
             if not scatt['scatt']:
                 continue
             scatt['scatt'].SetSelectionPolygonMode(activate)
-            if not activate and self.plot_mode not in ['zoom', 'pan', 'zoom_extend']:
+            if not activate and self.plot_mode not in [
+                    'zoom', 'pan', 'zoom_extend']:
                 self.SetPlotsMode(None)
 
         self.render_mgr.RunningProcessDone()
         return activate
 
-    def ProcessSelectionPolygons(self, process_mode):        
-        scatts_polygons = {}        
+    def ProcessSelectionPolygons(self, process_mode):
+        scatts_polygons = {}
         for scatt_id, scatt in self.plots.iteritems():
             if not scatt['scatt']:
                 continue
@@ -395,13 +403,15 @@ class ScattsManager:
 
         sel_cat_id = self.cats_mgr.GetSelectedCat()
         if not sel_cat_id:
-            dlg = wx.MessageDialog(parent = self.guiparent,
-                      message=_("In order to select arrea in scatter plot, "
-                                  "you have to select class first.\n\n"
-                                  "There is no class yet, "
-                                  "do you want to create one?"),
-                      caption=_("No class selected"),
-                      style = wx.YES_NO)
+            dlg = wx.MessageDialog(
+                parent=self.guiparent,
+                message=_(
+                    "In order to select arrea in scatter plot, "
+                    "you have to select class first.\n\n"
+                    "There is no class yet, "
+                    "do you want to create one?"),
+                caption=_("No class selected"),
+                style=wx.YES_NO)
             if dlg.ShowModal() == wx.ID_YES:
                 self.iclass_conn.EmptyCategories()
 
@@ -419,10 +429,10 @@ class ScattsManager:
         self.render_mgr.CategoryChanged(cat_ids=[sel_cat_id])
         self.render_mgr.CategoryCondsChanged(cat_ids=[sel_cat_id])
 
-        self.thread.Run(callable = self.core.UpdateCategoryWithPolygons, 
-                        cat_id = sel_cat_id,
-                        scatts_pols = scatts_polygons,
-                        value = value, ondone=self.SetEditCatDataDone)
+        self.thread.Run(callable=self.core.UpdateCategoryWithPolygons,
+                        cat_id=sel_cat_id,
+                        scatts_pols=scatts_polygons,
+                        value=value, ondone=self.SetEditCatDataDone)
 
     def SetEditCatDataDone(self, event):
         if not self.data_set:
@@ -430,12 +440,14 @@ class ScattsManager:
 
         self.render_mgr.RunningProcessDone()
         if event.exception:
-            GError(_("Error occurred during computation of scatter plot category:\n%s"), 
-                      parent = self.guiparent, showTraceback = False)
+            GError(
+                _("Error occurred during computation of scatter plot category:\n%s"),
+                parent=self.guiparent,
+                showTraceback=False)
 
         cat_id = event.ret
         self.iclass_conn.RenderCatRast(cat_id)
-            
+
     def SettingsUpdated(self, chanaged_setts):
         self.render_mgr.RenderRequest()
 
@@ -443,12 +455,14 @@ class ScattsManager:
     def GetCategoriesManager(self):
         return self.cats_mgr
 
+
 class PlotsRenderingManager:
     """Manages rendering of scatter plot.
 
     .. todo::
         still space for optimalization
     """
+
     def __init__(self, scatt_mgr, cats_mgr, core):
         self.scatt_mgr = scatt_mgr
         self.cats_mgr = cats_mgr
@@ -473,10 +487,10 @@ class PlotsRenderingManager:
             else:
                 for c in cat_ids:
                     if c not in self.data_to_render[scatt_id]:
-                         self.data_to_render[scatt_id].append(c) 
+                        self.data_to_render[scatt_id].append(c)
 
     def NewRunningProcess(self):
-        self.runningProcesses += 1 
+        self.runningProcesses += 1
 
     def RunningProcessDone(self):
         self.runningProcesses -= 1
@@ -497,18 +511,21 @@ class PlotsRenderingManager:
             if c not in self.cat_cond_ids:
                 self.cat_cond_ids.append(c)
 
-    def RenderScattPlts(self, scatt_ids = None):
+    def RenderScattPlts(self, scatt_ids=None):
         if len(self.render_queue) > 1:
-            return 
-        
+            return
+
         self.renderingStarted.emit()
         self.render_queue.append(self.scatt_mgr.thread.GetId())
 
         cats_attrs = deepcopy(self.cats_mgr.GetCategoriesAttrs())
         cats = self.cats_mgr.GetCategories()[:]
-        self.scatt_mgr.thread.Run(callable=self._renderscattplts, scatt_ids=scatt_ids,
-                                  cats=cats, cats_attrs=cats_attrs,
-                                  ondone=self.RenderingDone)
+        self.scatt_mgr.thread.Run(
+            callable=self._renderscattplts,
+            scatt_ids=scatt_ids,
+            cats=cats,
+            cats_attrs=cats_attrs,
+            ondone=self.RenderingDone)
 
     def _renderscattplts(self, scatt_ids, cats, cats_attrs):
         cats.reverse()
@@ -522,28 +539,29 @@ class PlotsRenderingManager:
 
             scatt_dt = self.scatts_dt.GetScatt(i_scatt_id)
             if self._showConfEllipses():
-                ellipses_dt = self.scatts_dt.GetEllipses(i_scatt_id, cats_attrs)
+                ellipses_dt = self.scatts_dt.GetEllipses(
+                    i_scatt_id, cats_attrs)
             else:
                 ellipses_dt = {}
 
             for c in scatt_dt.iterkeys():
                 try:
                     self.cat_ids.remove(c)
-                    scatt_dt[c]['render']=True
+                    scatt_dt[c]['render'] = True
                 except:
-                    scatt_dt[c]['render']=False
+                    scatt_dt[c]['render'] = False
 
             if self.scatt_mgr.pol_sel_mode[0]:
                 self._getSelectedAreas(cats, i_scatt_id, scatt_dt, cats_attrs)
 
             scatt['scatt'].Plot(cats_order=cats,
-                                scatts=scatt_dt, 
-                                ellipses=ellipses_dt, 
+                                scatts=scatt_dt,
+                                ellipses=ellipses_dt,
                                 styles=cats_attrs)
 
     def RenderingDone(self, event):
         self.render_queue.remove(event.pid)
-        if not self.render_queue:    
+        if not self.render_queue:
             self.renderingFinished.emit()
 
     def _getSelectedAreas(self, cats_order, scatt_id, scatt_dt, cats_attrs):
@@ -552,7 +570,7 @@ class PlotsRenderingManager:
         if not cat_id:
             return
 
-        sel_a_cat_id = -1        
+        sel_a_cat_id = -1
 
         s = self.scatt_conds_dt.GetScatt(scatt_id, [cat_id])
         if not s:
@@ -560,34 +578,36 @@ class PlotsRenderingManager:
 
         cats_order.append(sel_a_cat_id)
 
-        col = UserSettings.Get(group='scatt', 
-                                 key='selection', 
-                                 subkey='sel_area')
+        col = UserSettings.Get(group='scatt',
+                               key='selection',
+                               subkey='sel_area')
 
         col = ":".join(map(str, col))
-        opac = UserSettings.Get(group='scatt', 
-                                key='selection', 
+        opac = UserSettings.Get(group='scatt',
+                                key='selection',
                                 subkey='sel_area_opacty') / 100.0
 
-        cats_attrs[sel_a_cat_id] = {'color' : col,
-                                    'opacity' : opac,
-                                    'show' : True}
+        cats_attrs[sel_a_cat_id] = {'color': col,
+                                    'opacity': opac,
+                                    'show': True}
 
         scatt_dt[sel_a_cat_id] = s[cat_id]
-        
+
         scatt_dt[sel_a_cat_id]['render'] = False
         if cat_id in self.cat_cond_ids:
             scatt_dt[sel_a_cat_id]['render'] = True
             self.cat_cond_ids.remove(cat_id)
 
     def _showConfEllipses(self):
-        return UserSettings.Get(group='scatt', 
-                                key="ellipses", 
+        return UserSettings.Get(group='scatt',
+                                key="ellipses",
                                 subkey="show_ellips")
 
+
 class CategoriesManager:
     """Manages categories list of scatter plot.
     """
+
     def __init__(self, scatt_mgr, core):
 
         self.core = core
@@ -603,7 +623,7 @@ class CategoriesManager:
         self.initialized = Signal('CategoriesManager.initialized')
         self.setCategoryAttrs = Signal('CategoriesManager.setCategoryAttrs')
         self.deletedCategory = Signal('CategoriesManager.deletedCategory')
-        self.addedCategory = Signal('CategoriesManager.addedCategory')  
+        self.addedCategory = Signal('CategoriesManager.addedCategory')
 
     def ChangePosition(self, cat_id, new_pos):
         if new_pos >= len(self.cats_ids):
@@ -625,7 +645,7 @@ class CategoriesManager:
         return True
 
     def _addCategory(self, cat_id):
-        self.scatt_mgr.thread.Run(callable=self.core.AddCategory, 
+        self.scatt_mgr.thread.Run(callable=self.core.AddCategory,
                                   cat_id=cat_id)
 
     def SetData(self):
@@ -634,10 +654,10 @@ class CategoriesManager:
             return
 
         for cat_id in self.cats_ids:
-            self.scatt_mgr.thread.Run(callable=self.core.AddCategory, 
+            self.scatt_mgr.thread.Run(callable=self.core.AddCategory,
                                       cat_id=cat_id)
 
-    def AddCategory(self, cat_id = None, name = None, color = None, nstd = None):
+    def AddCategory(self, cat_id=None, name=None, color=None, nstd=None):
 
         if cat_id is None:
             if self.cats_ids:
@@ -646,34 +666,34 @@ class CategoriesManager:
                 cat_id = 1
 
         if self.scatt_mgr.data_set:
-            self.scatt_mgr.thread.Run(callable = self.core.AddCategory, 
-                                      cat_id = cat_id)
-            #TODO check number of cats
-            #if ret < 0: #TODO
+            self.scatt_mgr.thread.Run(callable=self.core.AddCategory,
+                                      cat_id=cat_id)
+            # TODO check number of cats
+            # if ret < 0: #TODO
             #    return -1;
 
         self.cats[cat_id] = {
-                                'name' : 'class_%d' % cat_id,
-                                'color' : "0:0:0",
-                                'opacity' : 1.0,
-                                'show' : True,
-                                'nstd' : 1.0,
-                            }
+            'name': 'class_%d' % cat_id,
+            'color': "0:0:0",
+            'opacity': 1.0,
+            'show': True,
+            'nstd': 1.0,
+        }
 
         self.cats_ids.insert(0, cat_id)
 
         if name is not None:
             self.cats[cat_id]["name"] = name
-   
+
         if color is not None:
             self.cats[cat_id]["color"] = color
 
         if nstd is not None:
             self.cats[cat_id]["nstd"] = nstd
 
-        self.addedCategory.emit(cat_id = cat_id,
-                                name = self.cats[cat_id]["name"], 
-                                color = self.cats[cat_id]["color"] )
+        self.addedCategory.emit(cat_id=cat_id,
+                                name=self.cats[cat_id]["name"],
+                                color=self.cats[cat_id]["color"])
         return cat_id
 
     def SetCategoryAttrs(self, cat_id, attrs_dict):
@@ -691,23 +711,24 @@ class CategoriesManager:
         if render:
             self.scatt_mgr.render_mgr.CategoryChanged(cat_ids=[cat_id])
             self.scatt_mgr.render_mgr.RenderRequest()
-        
+
         if update_cat_rast:
-            self.scatt_mgr.iclass_conn.UpdateCategoryRaster(cat_id, update_cat_rast)
+            self.scatt_mgr.iclass_conn.UpdateCategoryRaster(
+                cat_id, update_cat_rast)
 
-        self.setCategoryAttrs.emit(cat_id = cat_id, attrs_dict = attrs_dict)
+        self.setCategoryAttrs.emit(cat_id=cat_id, attrs_dict=attrs_dict)
 
     def DeleteCategory(self, cat_id):
 
         if self.scatt_mgr.data_set:
-            self.scatt_mgr.thread.Run(callable = self.core.DeleteCategory, 
-                                      cat_id = cat_id)
+            self.scatt_mgr.thread.Run(callable=self.core.DeleteCategory,
+                                      cat_id=cat_id)
         del self.cats[cat_id]
         self.cats_ids.remove(cat_id)
 
-        self.deletedCategory.emit(cat_id = cat_id)
+        self.deletedCategory.emit(cat_id=cat_id)
 
-    #TODO emit event?
+    # TODO emit event?
     def SetSelectedCat(self, cat_id):
         self.sel_cat_id = cat_id
         if self.scatt_mgr.pol_sel_mode[0]:
@@ -723,60 +744,66 @@ class CategoriesManager:
     def GetCategoriesAttrs(self):
         #TODO is mutable
         return self.cats
-     
+
     def GetCategories(self):
         return self.cats_ids[:]
 
     def SetCategoryPosition(self):
         if newindex > oldindex:
             newindex -= 1
-        
+
         self.cats_ids.insert(newindex, self.cats_ids.pop(oldindex))
 
     def ExportCatRast(self, cat_id):
 
         cat_attrs = self.GetCategoryAttrs(cat_id)
 
-        dlg = ExportCategoryRaster(parent=self.scatt_mgr.guiparent, 
-                                   rasterName=self.exportRaster, 
-                                   title=_("Export scatter plot raster of class <%s>")
-                                            % cat_attrs['name'])
-        
+        dlg = ExportCategoryRaster(
+            parent=self.scatt_mgr.guiparent,
+            rasterName=self.exportRaster,
+            title=_("Export scatter plot raster of class <%s>") %
+            cat_attrs['name'])
+
         if dlg.ShowModal() == wx.ID_OK:
             self.exportCatRast = dlg.GetRasterName()
             dlg.Destroy()
 
             self.scatt_mgr.thread.Run(callable=self.core.ExportCatRast,
-                                      userdata={'name' : cat_attrs['name']},
+                                      userdata={'name': cat_attrs['name']},
                                       cat_id=cat_id,
-                                      rast_name=self.exportCatRast, 
+                                      rast_name=self.exportCatRast,
                                       ondone=self.OnExportCatRastDone)
 
     def OnExportCatRastDone(self, event):
         ret, err = event.ret
         if ret == 0:
             cat_attrs = self.GetCategoryAttrs(event.kwds['cat_id'])
-            GMessage(_("Scatter plot raster of class <%s> exported to raster map <%s>.") % 
-                      (event.userdata['name'], event.kwds['rast_name']))
+            GMessage(
+                _("Scatter plot raster of class <%s> exported to raster map <%s>.") %
+                (event.userdata['name'], event.kwds['rast_name']))
         else:
-            GMessage(_("Export of scatter plot raster of class <%s> to map <%s> failed.\n%s") % 
-                      (event.userdata['name'], event.kwds['rast_name'], err))
+            GMessage(
+                _("Export of scatter plot raster of class <%s> to map <%s> failed.\n%s") %
+                (event.userdata['name'], event.kwds['rast_name'], err))
 
 
 class IMapWinDigitConnection:
     """Manage communication of the scatter plot with digitizer in
     mapwindow (does not work).
     """
+
     def Update(self):
         pass
 
     def SetData(self):
         pass
 
+
 class IClassDigitConnection:
     """Manages communication of the scatter plot with digitizer in
     wx.iclass.
     """
+
     def __init__(self, scatt_mgr, mapWin, scatt_rast_updater):
         self.mapWin = mapWin
         self.vectMap = None
@@ -785,19 +812,20 @@ class IClassDigitConnection:
         self.cats_mgr = scatt_mgr.cats_mgr
 
         self.cats_to_update = []
-        self.pids = {'mapwin_conn' : []}
+        self.pids = {'mapwin_conn': []}
 
         self.thread = self.scatt_mgr.thread
 
-        #TODO
-        self.mapWin.parent.toolbars["vdigit"].editingStarted.connect(self.DigitDataChanged)
+        # TODO
+        self.mapWin.parent.toolbars[
+            "vdigit"].editingStarted.connect(self.DigitDataChanged)
 
     def Update(self):
         self.thread.Run(callable=self.scatt_rast_updater.SyncWithMap)
 
     def SetData(self):
         self.cats_to_update = []
-        self.pids = {'mapwin_conn' : []}
+        self.pids = {'mapwin_conn': []}
 
     def _connectSignals(self):
         self.digit.featureAdded.connect(self.AddFeature)
@@ -814,11 +842,11 @@ class IClassDigitConnection:
         self.scatt_mgr.computingStarted.emit()
 
         self.pids['mapwin_conn'].append(self.thread.GetId())
-        self.thread.Run(callable = self.scatt_rast_updater.EditedFeature, 
-                        new_bboxs = new_bboxs, 
-                        old_bboxs = [], 
-                        old_areas_cats = [],
-                        new_areas_cats = new_areas_cats,
+        self.thread.Run(callable=self.scatt_rast_updater.EditedFeature,
+                        new_bboxs=new_bboxs,
+                        old_bboxs=[],
+                        old_areas_cats=[],
+                        new_areas_cats=new_areas_cats,
                         ondone=self.OnDone)
 
     def DeleteAreas(self, old_bboxs, old_areas_cats):
@@ -827,24 +855,25 @@ class IClassDigitConnection:
         self.scatt_mgr.computingStarted.emit()
 
         self.pids['mapwin_conn'].append(self.thread.GetId())
-        self.thread.Run(callable = self.scatt_rast_updater.EditedFeature, 
-                        new_bboxs = [], 
-                        old_bboxs = old_bboxs, 
-                        old_areas_cats = old_areas_cats,
-                        new_areas_cats = [],
+        self.thread.Run(callable=self.scatt_rast_updater.EditedFeature,
+                        new_bboxs=[],
+                        old_bboxs=old_bboxs,
+                        old_areas_cats=old_areas_cats,
+                        new_areas_cats=[],
                         ondone=self.OnDone)
 
-    def EditedFeature(self, new_bboxs, new_areas_cats, old_bboxs, old_areas_cats):
+    def EditedFeature(self, new_bboxs, new_areas_cats,
+                      old_bboxs, old_areas_cats):
         if not self.scatt_mgr.data_set:
             return
         self.scatt_mgr.computingStarted.emit()
 
         self.pids['mapwin_conn'].append(self.thread.GetId())
-        self.thread.Run(callable = self.scatt_rast_updater.EditedFeature, 
-                        new_bboxs = new_bboxs, 
-                        old_bboxs = old_bboxs, 
-                        old_areas_cats = old_areas_cats,
-                        new_areas_cats = new_areas_cats,
+        self.thread.Run(callable=self.scatt_rast_updater.EditedFeature,
+                        new_bboxs=new_bboxs,
+                        old_bboxs=old_bboxs,
+                        old_areas_cats=old_areas_cats,
+                        new_areas_cats=new_areas_cats,
                         ondone=self.OnDone)
 
     def DigitDataChanged(self, vectMap, digit):
@@ -852,7 +881,7 @@ class IClassDigitConnection:
         self.digit = digit
         self.vectMap = vectMap
 
-        self.digit.EmitSignals(emit = True)
+        self.digit.EmitSignals(emit=True)
 
         self.scatt_rast_updater.SetVectMap(vectMap)
 
@@ -864,48 +893,52 @@ class IClassDigitConnection:
         self.pids['mapwin_conn'].remove(event.pid)
         updated_cats = event.ret
         for cat in updated_cats:
-            if cat not in  self.cats_to_update:
+            if cat not in self.cats_to_update:
                 self.cats_to_update.append(cat)
 
         if not self.pids['mapwin_conn']:
-            self.thread.Run(callable = self.scatt_mgr.core.ComputeCatsScatts, 
-                            cats_ids = self.cats_to_update[:], ondone=self.Render)
+            self.thread.Run(
+                callable=self.scatt_mgr.core.ComputeCatsScatts,
+                cats_ids=self.cats_to_update[:],
+                ondone=self.Render)
             del self.cats_to_update[:]
 
     def Render(self, event):
         self.scatt_mgr.render_mgr.RenderScattPlts()
 
+
 class IMapDispConnection:
     """Manage comunication of the scatter plot with mapdisplay in mapwindow.
     """
+
     def __init__(self, scatt_mgr, cats_mgr, giface):
         self.scatt_mgr = scatt_mgr
         self.cats_mgr = cats_mgr
-        self.set_g = {'group' :  None, 'subg' :  None}
+        self.set_g = {'group': None, 'subg': None}
         self.giface = giface
         self.added_cats_rasts = {}
 
     def SetData(self):
 
-        dlg = IClassGroupDialog(self.scatt_mgr.guiparent, 
+        dlg = IClassGroupDialog(self.scatt_mgr.guiparent,
                                 group=self.set_g['group'],
                                 subgroup=self.set_g['subg'])
-        
+
         bands = []
         while True:
             if dlg.ShowModal() == wx.ID_OK:
-                
+
                 bands = dlg.GetGroupBandsErr(parent=self.scatt_mgr.guiparent)
                 if bands:
                     name, s = dlg.GetData()
-                    group = grass.find_file(name = name, element = 'group')
+                    group = grass.find_file(name=name, element='group')
                     self.set_g['group'] = group['name']
                     self.set_g['subg'] = s
 
                     break
-            else: 
+            else:
                 break
-        
+
         dlg.Destroy()
         self.added_cats_rasts = {}
 
@@ -915,10 +948,10 @@ class IMapDispConnection:
     def EmptyCategories(self):
         return None
 
-    def UpdateCategoryRaster(self, cat_id, attrs, render = True):
+    def UpdateCategoryRaster(self, cat_id, attrs, render=True):
 
         cat_rast = self.scatt_mgr.core.GetCatRast(cat_id)
-        if not grass.find_file(cat_rast, element = 'cell', mapset = '.')['file']:
+        if not grass.find_file(cat_rast, element='cell', mapset='.')['file']:
             return
         cats_attrs = self.cats_mgr.GetCategoryAttrs(cat_id)
 
@@ -935,9 +968,9 @@ class IMapDispConnection:
                 self.giface.updateMap.emit()
 
         if "name" in attrs:
-            #TODO hack
-            self.giface.GetLayerList()._tree.SetItemText(self.added_cats_rasts[cat_id], 
-                                                         cats_attrs['name'])
+            # TODO hack
+            self.giface.GetLayerList()._tree.SetItemText(
+                self.added_cats_rasts[cat_id], cats_attrs['name'])
             cats_attrs["name"]
 
     def RenderCatRast(self, cat_id):
@@ -946,26 +979,28 @@ class IMapDispConnection:
             cat_rast = self.scatt_mgr.core.GetCatRast(cat_id)
 
             cat_name = self.cats_mgr.GetCategoryAttrs(cat_id)['name']
-            self.UpdateCategoryRaster(cat_id, ['color'], render = False)
+            self.UpdateCategoryRaster(cat_id, ['color'], render=False)
 
             cmd = ['d.rast', 'map=%s' % cat_rast]
-            #TODO HACK
+            # TODO HACK
             layer = self.giface.GetLayerList()._tree.AddLayer(ltype="raster",
-                                                         lname=cat_name,
-                                                         lcmd=cmd,
-                                                         lchecked=True)
+                                                              lname=cat_name,
+                                                              lcmd=cmd,
+                                                              lchecked=True)
             self.added_cats_rasts[cat_id] = layer
-        else: #TODO settings
+        else:  # TODO settings
             self.giface.updateMap.emit()
 
+
 class IClassConnection:
     """Manage comunication of the scatter plot with mapdisplay in wx.iclass.
     """
+
     def __init__(self, scatt_mgr, iclass_frame, cats_mgr):
         self.iclass_frame = iclass_frame
         self.stats_data = self.iclass_frame.stats_data
         self.cats_mgr = cats_mgr
-        self.scatt_mgr= scatt_mgr
+        self.scatt_mgr = scatt_mgr
         self.added_cats_rasts = []
 
         self.stats_data.statisticsAdded.connect(self.AddCategory)
@@ -983,7 +1018,7 @@ class IClassConnection:
 
         self.SyncCats()
 
-    def UpdateCategoryRaster(self, cat_id, attrs, render = True):
+    def UpdateCategoryRaster(self, cat_id, attrs, render=True):
         if not self.scatt_mgr.data_set:
             return
 
@@ -991,7 +1026,7 @@ class IClassConnection:
         if not cat_rast:
             return
 
-        if not grass.find_file(cat_rast, element = 'cell', mapset = '.')['file']:
+        if not grass.find_file(cat_rast, element='cell', mapset='.')['file']:
             return
         cats_attrs = self.cats_mgr.GetCategoryAttrs(cat_id)
         train_mgr, preview_mgr = self.iclass_frame.GetMapManagers()
@@ -1021,11 +1056,11 @@ class IClassConnection:
             cat_rast = self.scatt_mgr.core.GetCatRast(cat_id)
 
             cat_name = self.cats_mgr.GetCategoryAttrs(cat_id)['name']
-            self.UpdateCategoryRaster(cat_id, ['color'], render = False)
-            train_mgr.AddLayer(cat_rast, alias = cat_name)
+            self.UpdateCategoryRaster(cat_id, ['color'], render=False)
+            train_mgr.AddLayer(cat_rast, alias=cat_name)
 
             self.added_cats_rasts.append(cat_id)
-        else: #TODO settings
+        else:  # TODO settings
             train_mgr.Render()
 
     def SetData(self):
@@ -1035,7 +1070,7 @@ class IClassConnection:
     def EmptyCategories(self):
         self.iclass_frame.OnCategoryManager(None)
 
-    def SyncCats(self, cats_ids = None):
+    def SyncCats(self, cats_ids=None):
         self.cats_mgr.addedCategory.disconnect(self.AddStatistics)
         cats = self.stats_data.GetCategories()
         for c in cats:
@@ -1046,12 +1081,16 @@ class IClassConnection:
         self.cats_mgr.addedCategory.connect(self.AddStatistics)
 
     def CategoryChanged(self, cat):
-        self.cats_mgr.SetSelectedCat(cat) 
+        self.cats_mgr.SetSelectedCat(cat)
 
     def AddCategory(self, cat, name, color):
         self.cats_mgr.addedCategory.disconnect(self.AddStatistics)
         stats = self.stats_data.GetStatistics(cat)
-        self.cats_mgr.AddCategory(cat_id = cat, name = name, color = color, nstd = stats.nstd)
+        self.cats_mgr.AddCategory(
+            cat_id=cat,
+            name=name,
+            color=color,
+            nstd=stats.nstd)
         self.cats_mgr.addedCategory.connect(self.AddStatistics)
 
     def DeleteCategory(self, cat):
@@ -1073,14 +1112,13 @@ class IClassConnection:
         cats_attr = {}
 
         for attr in ['name', 'color', 'nstd']:
-            if stats.has_key(attr):
+            if attr in stats:
                 cats_attr[attr] = stats[attr]
 
         if cats_attr:
             self.cats_mgr.SetCategoryAttrs(cat, cats_attr)
         self.cats_mgr.setCategoryAttrs.connect(self.SetStatistics)
 
-
     def SetStatistics(self, cat_id, attrs_dict):
         self.stats_data.statisticsSet.disconnect(self.SetCategory)
         self.stats_data.GetStatistics(cat_id).SetStatistics(attrs_dict)
@@ -1102,9 +1140,9 @@ class IClassConnection:
             kwargs['subgroup'] = subgroup
 
         res = RunCommand('i.group',
-                         flags = 'g',
-                         group = group,
-                         read = True, **kwargs).strip()
+                         flags='g',
+                         group=group,
+                         read=True, **kwargs).strip()
 
         if res.splitlines()[0]:
             bands = res.splitlines()
diff --git a/gui/wxpython/iscatt/core_c.py b/gui/wxpython/iscatt/core_c.py
index 4a46cfe..5a94044 100644
--- a/gui/wxpython/iscatt/core_c.py
+++ b/gui/wxpython/iscatt/core_c.py
@@ -24,10 +24,11 @@ except ImportError as e:
 
 from core.gcmd import GException
 
+
 def Rasterize(polygon, rast, region, value):
-    rows, cols = rast.shape 
+    rows, cols = rast.shape
 
-    #TODO creating of region is on many places
+    # TODO creating of region is on many places
     region['rows'] = rows
     region['cols'] = cols
 
@@ -42,16 +43,16 @@ def Rasterize(polygon, rast, region, value):
 
     return rast
 
+
 def ApplyColormap(vals, vals_mask, colmap, out_vals):
-    
+
     c_uint8_p = POINTER(c_uint8)
 
     vals_p = vals.ctypes.data_as(c_uint8_p)
 
-
     if hasattr(vals_mask, "ctypes"):
         vals_mask_p = vals_mask.ctypes.data_as(c_uint8_p)
-    else: #vals mask is empty (all data are selected)
+    else:  # vals mask is empty (all data are selected)
         vals_mask_p = None
     colmap_p = colmap.ctypes.data_as(c_uint8_p)
     out_vals_p = out_vals.ctypes.data_as(c_uint8_p)
@@ -59,6 +60,7 @@ def ApplyColormap(vals, vals_mask, colmap, out_vals):
     vals_size = vals.reshape((-1)).shape[0]
     I_apply_colormap(vals_p, vals_mask_p, vals_size, colmap_p, out_vals_p)
 
+
 def MergeArrays(merged_arr, overlay_arr, alpha):
     if merged_arr.shape != overlay_arr.shape:
         GException("MergeArrays: merged_arr.shape != overlay_arr.shape")
@@ -67,61 +69,89 @@ def MergeArrays(merged_arr, overlay_arr, alpha):
     merged_p = merged_arr.ctypes.data_as(c_uint8_p)
     overlay_p = overlay_arr.ctypes.data_as(c_uint8_p)
 
-    I_merge_arrays(merged_p, overlay_p, merged_arr.shape[0], merged_arr.shape[1], alpha)
+    I_merge_arrays(
+        merged_p,
+        overlay_p,
+        merged_arr.shape[0],
+        merged_arr.shape[1],
+        alpha)
+
 
-def ComputeScatts(region, scatt_conds, bands, n_bands, scatts, cats_rasts_conds, cats_rasts):
+def ComputeScatts(region, scatt_conds, bands, n_bands,
+                  scatts, cats_rasts_conds, cats_rasts):
     _memmapToFileNames(scatts)
     _memmapToFileNames(scatt_conds)
 
     q = Queue()
-    p = Process(target=_computeScattsProcess, args=(region, scatt_conds, bands, 
-                                                    n_bands, scatts, cats_rasts_conds, cats_rasts, q))
+    p = Process(
+        target=_computeScattsProcess,
+        args=(
+            region,
+            scatt_conds,
+            bands,
+            n_bands,
+            scatts,
+            cats_rasts_conds,
+            cats_rasts,
+            q))
     p.start()
     ret = q.get()
     p.join()
-    
+
     return ret[0], ret[1]
 
-#_memmapToFileNames and _fileNamesToMemmap are  workaround for older numpy version, 
+#_memmapToFileNames and _fileNamesToMemmap are  workaround for older numpy version,
 # where memmap objects are not pickable,
 # and therefore cannot be passed to process spawned by multiprocessing module
+
+
 def _memmapToFileNames(data):
 
-    for k, v in data.iteritems(): 
-        if v.has_key('np_vals'):
+    for k, v in data.iteritems():
+        if 'np_vals' in v:
             data[k]['np_vals'] = v['np_vals'].filename()
 
+
 def _fileNamesToMemmap(data):
-    for k, v in data.iteritems(): 
-        if v.has_key('np_vals'):
+    for k, v in data.iteritems():
+        if 'np_vals' in v:
             data[k]['np_vals'] = np.memmap(filename=v['np_vals'])
 
+
 def UpdateCatRast(patch_rast, region, cat_rast):
     q = Queue()
-    p = Process(target=_updateCatRastProcess, args=(patch_rast, region, cat_rast, q))
+    p = Process(
+        target=_updateCatRastProcess,
+        args=(
+            patch_rast,
+            region,
+            cat_rast,
+            q))
     p.start()
     ret = q.get()
     p.join()
 
     return ret
 
+
 def CreateCatRast(region, cat_rast):
     cell_head = _regionToCellHead(region)
-    I_create_cat_rast(pointer(cell_head), cat_rast)   
+    I_create_cat_rast(pointer(cell_head), cat_rast)
 
-def _computeScattsProcess(region, scatt_conds, bands, n_bands, scatts, 
+
+def _computeScattsProcess(region, scatt_conds, bands, n_bands, scatts,
                           cats_rasts_conds, cats_rasts, output_queue):
 
     _fileNamesToMemmap(scatts)
     _fileNamesToMemmap(scatt_conds)
 
-    sccats_c, cats_rasts_c, refs = _getComputationStruct(scatts, cats_rasts, 
-                                                         SC_SCATT_DATA, n_bands)
-    scatt_conds_c, cats_rasts_conds_c, refs2 = _getComputationStruct(scatt_conds, cats_rasts_conds, 
-                                                                     SC_SCATT_CONDITIONS, n_bands)
+    sccats_c, cats_rasts_c, refs = _getComputationStruct(
+        scatts, cats_rasts, SC_SCATT_DATA, n_bands)
+    scatt_conds_c, cats_rasts_conds_c, refs2 = _getComputationStruct(
+        scatt_conds, cats_rasts_conds, SC_SCATT_CONDITIONS, n_bands)
 
     char_bands = _stringListToCharArr(bands)
-   
+
     cell_head = _regionToCellHead(region)
 
     ret = I_compute_scatts(pointer(cell_head),
@@ -137,7 +167,8 @@ def _computeScattsProcess(region, scatt_conds, bands, n_bands, scatts,
 
     output_queue.put((ret, scatts))
 
-def _getBandcRange( band_info):
+
+def _getBandcRange(band_info):
     band_c_range = struct_Range()
 
     band_c_range.max = band_info['max']
@@ -145,14 +176,15 @@ def _getBandcRange( band_info):
 
     return band_c_range
 
+
 def _regionToCellHead(region):
     cell_head = struct_Cell_head()
     G_get_window(pointer(cell_head))
 
-    convert_dict = {'n' : 'north', 'e' : 'east', 
-                    'w' : 'west',  's' : 'south', 
-                    'nsres' : 'ns_res',
-                    'ewres' : 'ew_res'}
+    convert_dict = {'n': 'north', 'e': 'east',
+                    'w': 'west', 's': 'south',
+                    'nsres': 'ns_res',
+                    'ewres': 'ew_res'}
 
     for k, v in region.iteritems():
         if k in ["rows", "cols", "cells", "zone"]:  # zone added in r65224
@@ -160,13 +192,14 @@ def _regionToCellHead(region):
         else:
             v = float(v)
 
-        if convert_dict.has_key(k):
+        if k in convert_dict:
             k = convert_dict[k]
-           
+
         setattr(cell_head, k, v)
 
     return cell_head
 
+
 def _stringListToCharArr(str_list):
 
     arr = c_char_p * len(str_list)
@@ -179,56 +212,62 @@ def _stringListToCharArr(str_list):
 
     return char_arr
 
+
 def _getComputationStruct(cats, cats_rasts, cats_type, n_bands):
 
     sccats = struct_scCats()
-    I_sc_init_cats(pointer(sccats), c_int(n_bands), c_int(cats_type));
+    I_sc_init_cats(pointer(sccats), c_int(n_bands), c_int(cats_type))
 
-    refs = []        
+    refs = []
     cats_rasts_core = []
-    
+
     for cat_id, scatt_ids in cats.iteritems():
         cat_c_id = I_sc_add_cat(pointer(sccats))
         cats_rasts_core.append(cats_rasts[cat_id])
 
         for scatt_id, dt in scatt_ids.iteritems():
-            # if key is missing condition is always True (full scatter plor is computed)
-                vals = dt['np_vals']
+            # if key is missing condition is always True (full scatter plor is
+            # computed)
+            vals = dt['np_vals']
 
-                scatt_vals = scdScattData()
+            scatt_vals = scdScattData()
 
-                c_void_p = ctypes.POINTER(ctypes.c_void_p)
+            c_void_p = ctypes.POINTER(ctypes.c_void_p)
 
-                if cats_type == SC_SCATT_DATA:
-                    vals[:] = 0
-                elif cats_type == SC_SCATT_CONDITIONS:
-                    pass
-                else:
-                    return None
-                data_p = vals.ctypes.data_as(c_void_p)
-                I_scd_init_scatt_data(pointer(scatt_vals), cats_type, len(vals), data_p)
+            if cats_type == SC_SCATT_DATA:
+                vals[:] = 0
+            elif cats_type == SC_SCATT_CONDITIONS:
+                pass
+            else:
+                return None
+            data_p = vals.ctypes.data_as(c_void_p)
+            I_scd_init_scatt_data(
+                pointer(scatt_vals),
+                cats_type, len(vals),
+                data_p)
 
-                refs.append(scatt_vals)
+            refs.append(scatt_vals)
 
-                I_sc_insert_scatt_data(pointer(sccats),  
-                                       pointer(scatt_vals),
-                                       cat_c_id, scatt_id)
+            I_sc_insert_scatt_data(pointer(sccats),
+                                   pointer(scatt_vals),
+                                   cat_c_id, scatt_id)
 
     cats_rasts_c = _stringListToCharArr(cats_rasts_core)
 
     return sccats, cats_rasts_c, refs
 
+
 def _updateCatRastProcess(patch_rast, region, cat_rast, output_queue):
     cell_head = _regionToCellHead(region)
-    
-    
-    ret = I_insert_patch_to_cat_rast(patch_rast, 
-                                     pointer(cell_head), 
+
+    ret = I_insert_patch_to_cat_rast(patch_rast,
+                                     pointer(cell_head),
                                      cat_rast)
 
     output_queue.put(ret)
 
-def _rasterize(polygon, rast, region, value, output_queue):    
+
+def _rasterize(polygon, rast, region, value, output_queue):
     pol_size = len(polygon) * 2
     pol = np.array(polygon, dtype=float)
 
@@ -239,9 +278,9 @@ def _rasterize(polygon, rast, region, value, output_queue):
     rast_p = rast.ctypes.data_as(c_uint8_p)
 
     cell_h = _regionToCellHead(region)
-    I_rasterize(pol_p, 
-                len(polygon), 
-                value, 
+    I_rasterize(pol_p,
+                len(polygon),
+                value,
                 pointer(cell_h), rast_p)
 
     output_queue.put(rast)
diff --git a/gui/wxpython/iscatt/dialogs.py b/gui/wxpython/iscatt/dialogs.py
index b3add70..31ae798 100644
--- a/gui/wxpython/iscatt/dialogs.py
+++ b/gui/wxpython/iscatt/dialogs.py
@@ -32,10 +32,11 @@ from core.gcmd import GMessage
 from core.settings import UserSettings
 from gui_core.dialogs import SimpleDialog
 
+
 class AddScattPlotDialog(wx.Dialog):
 
-    def __init__(self, parent, bands, check_bands_callback, id  = wx.ID_ANY):
-        wx.Dialog.__init__(self, parent, title = _("Add scatter plots"), id = id)
+    def __init__(self, parent, bands, check_bands_callback, id=wx.ID_ANY):
+        wx.Dialog.__init__(self, parent, title=_("Add scatter plots"), id=id)
 
         self.bands = bands
 
@@ -53,71 +54,89 @@ class AddScattPlotDialog(wx.Dialog):
         self.labels = {}
         self.params = {}
 
-        self.band_1_label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("x axis:"))
+        self.band_1_label = wx.StaticText(
+            parent=self, id=wx.ID_ANY, label=_("x axis:"))
 
-        self.band_1_ch = wx.ComboBox(parent = self, id = wx.ID_ANY,
-                                     choices = self.bands,
-                                     style = wx.CB_READONLY, size = (350, 30))
+        self.band_1_ch = wx.ComboBox(parent=self, id=wx.ID_ANY,
+                                     choices=self.bands,
+                                     style=wx.CB_READONLY, size=(350, 30))
 
-        self.band_2_label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("y axis:"))
+        self.band_2_label = wx.StaticText(
+            parent=self, id=wx.ID_ANY, label=_("y axis:"))
 
-        self.band_2_ch = wx.ComboBox(parent = self, id = wx.ID_ANY,
-                                     choices = self.bands,
-                                     style = wx.CB_READONLY, size = (350, 30))
+        self.band_2_ch = wx.ComboBox(parent=self, id=wx.ID_ANY,
+                                     choices=self.bands,
+                                     style=wx.CB_READONLY, size=(350, 30))
 
-        self.scattsBox = wx.ListBox(parent = self,  id = wx.ID_ANY, size = (-1, 150),
-                                    style = wx.LB_MULTIPLE | wx.LB_NEEDED_SB)
+        self.scattsBox = wx.ListBox(parent=self, id=wx.ID_ANY, size=(-1, 150),
+                                    style=wx.LB_MULTIPLE | wx.LB_NEEDED_SB)
 
         # buttons
         self.btn_add = wx.Button(parent=self, id=wx.ID_ADD)
         self.btn_remove = wx.Button(parent=self, id=wx.ID_REMOVE)
-        
-        self.btn_close = wx.Button(parent=self, id=wx.ID_CANCEL)        
+
+        self.btn_close = wx.Button(parent=self, id=wx.ID_CANCEL)
         self.btn_ok = wx.Button(parent=self, id=wx.ID_OK)
 
         self._layout()
 
     def _layout(self):
 
-        border = wx.BoxSizer(wx.VERTICAL) 
+        border = wx.BoxSizer(wx.VERTICAL)
         dialogSizer = wx.BoxSizer(wx.VERTICAL)
 
         regionSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        dialogSizer.Add(item = self._addSelectSizer(title = self.band_1_label, 
-                                                    sel = self.band_1_ch))
-
-        dialogSizer.Add(item = self._addSelectSizer(title = self.band_2_label, 
-                                                    sel = self.band_2_ch))
+        dialogSizer.Add(item=self._addSelectSizer(title=self.band_1_label,
+                                                  sel=self.band_1_ch))
 
+        dialogSizer.Add(item=self._addSelectSizer(title=self.band_2_label,
+                                                  sel=self.band_2_ch))
 
-        dialogSizer.Add(item=self.btn_add, proportion=0,  flag = wx.TOP | wx.ALIGN_RIGHT, border = 5)
+        dialogSizer.Add(
+            item=self.btn_add,
+            proportion=0,
+            flag=wx.TOP | wx.ALIGN_RIGHT,
+            border=5)
 
-        box = wx.StaticBox(self, id = wx.ID_ANY,
-                           label = " %s " % _("Bands of scatter plots to be added (x y):"))
+        box = wx.StaticBox(
+            self, id=wx.ID_ANY, label=" %s " %
+            _("Bands of scatter plots to be added (x y):"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        sizer.Add(item=self.scattsBox, proportion=1, flag=wx.EXPAND | wx.TOP, border=5)
-        sizer.Add(item=self.btn_remove, proportion=0, flag=wx.TOP | wx.ALIGN_RIGHT, border = 5)
-
-        dialogSizer.Add(item=sizer, proportion=1,  flag = wx.EXPAND | wx.TOP, border = 5)
+        sizer.Add(
+            item=self.scattsBox,
+            proportion=1,
+            flag=wx.EXPAND | wx.TOP,
+            border=5)
+        sizer.Add(
+            item=self.btn_remove,
+            proportion=0,
+            flag=wx.TOP | wx.ALIGN_RIGHT,
+            border=5)
+
+        dialogSizer.Add(
+            item=sizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.TOP,
+            border=5)
 
         # buttons
-        self.btnsizer = wx.BoxSizer(orient = wx.HORIZONTAL)
+        self.btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+
+        self.btnsizer.Add(item=self.btn_close, proportion=0,
+                          flag=wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER,
+                          border=10)
 
-        self.btnsizer.Add(item = self.btn_close, proportion = 0,
-                          flag = wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER,
-                          border = 10)
-        
-        self.btnsizer.Add(item = self.btn_ok, proportion = 0,
-                          flag = wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER,
-                          border = 10)
+        self.btnsizer.Add(item=self.btn_ok, proportion=0,
+                          flag=wx.RIGHT | wx.LEFT | wx.ALIGN_CENTER,
+                          border=10)
 
-        dialogSizer.Add(item = self.btnsizer, proportion = 0,
-                        flag = wx.ALIGN_CENTER | wx.TOP, border = 5)
+        dialogSizer.Add(item=self.btnsizer, proportion=0,
+                        flag=wx.ALIGN_CENTER | wx.TOP, border=5)
 
-        border.Add(item = dialogSizer, proportion = 0,
-                   flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 10)
+        border.Add(item=dialogSizer, proportion=0,
+                   flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=10)
 
         self.SetSizer(border)
         self.Layout()
@@ -130,28 +149,28 @@ class AddScattPlotDialog(wx.Dialog):
         self.btn_remove.Bind(wx.EVT_BUTTON, self.OnRemoveLayer)
 
     def OnOk(self, event):
-        
+
         if not self.GetBands():
             GMessage(parent=self, message=_("No scatter plots selected."))
             return
 
         event.Skip()
 
-    def _addSelectSizer(self, title, sel): 
+    def _addSelectSizer(self, title, sel):
         """Helper layout function.
         """
-        selSizer = wx.BoxSizer(orient = wx.VERTICAL)
+        selSizer = wx.BoxSizer(orient=wx.VERTICAL)
 
         selTitleSizer = wx.BoxSizer(wx.HORIZONTAL)
-        selTitleSizer.Add(item = title, proportion = 1,
-                          flag = wx.TOP | wx.EXPAND, border = 5)
+        selTitleSizer.Add(item=title, proportion=1,
+                          flag=wx.TOP | wx.EXPAND, border=5)
 
-        selSizer.Add(item = selTitleSizer, proportion = 0,
-                     flag = wx.EXPAND)
+        selSizer.Add(item=selTitleSizer, proportion=0,
+                     flag=wx.EXPAND)
 
-        selSizer.Add(item = sel, proportion = 1,
-                     flag = wx.EXPAND | wx.TOP| wx.ALIGN_CENTER_VERTICAL,
-                     border = 5)
+        selSizer.Add(item=sel, proportion=1,
+                     flag=wx.EXPAND | wx.TOP | wx.ALIGN_CENTER_VERTICAL,
+                     border=5)
 
         return selSizer
 
@@ -183,13 +202,16 @@ class AddScattPlotDialog(wx.Dialog):
             GMessage(parent=self, message=_("Select both x and y bands."))
             return
         if b_y == b_x:
-            GMessage(parent=self, message=_("Selected bands must be different."))
+            GMessage(parent=self, message=_(
+                "Selected bands must be different."))
             return
 
-        if [b_x, b_y] in self.sel_bands_ids or [b_y, b_x] in self.sel_bands_ids:
-            GMessage(parent=self, 
-                     message=_("Scatter plot with same bands combination (regardless x y order) " 
-                               "has been already added into the list."))
+        if [b_x, b_y] in self.sel_bands_ids or [
+                b_y, b_x] in self.sel_bands_ids:
+            GMessage(
+                parent=self, message=_(
+                    "Scatter plot with same bands combination (regardless x y order) "
+                    "has been already added into the list."))
             return
 
         if not self.chb_callback(b_x, b_y):
@@ -205,36 +227,38 @@ class AddScattPlotDialog(wx.Dialog):
         self.scattsBox.Append(text)
         event.Skip()
 
+
 class ExportCategoryRaster(wx.Dialog):
-    def __init__(self, parent, title, rasterName = None, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+
+    def __init__(self, parent, title, rasterName=None, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
                  **kwargs):
         """Dialog for export of category raster.
-        
+
         :param parent: window
         :param str rasterName name of vector layer for export
         :param title: window title
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
-        
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
+
         self.rasterName = rasterName
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
-        self.btnCancel = wx.Button(parent = self.panel, id = wx.ID_CANCEL)
-        self.btnOK     = wx.Button(parent = self.panel, id = wx.ID_OK)
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnOK = wx.Button(parent=self.panel, id=wx.ID_OK)
         self.btnOK.SetDefault()
         self.btnOK.Enable(False)
         self.btnOK.Bind(wx.EVT_BUTTON, self.OnOK)
-        
+
         self.__layout()
-        
+
         self.vectorNameCtrl.Bind(wx.EVT_TEXT, self.OnTextChanged)
         self.OnTextChanged(None)
         wx.CallAfter(self.vectorNameCtrl.SetFocus)
 
     def OnTextChanged(self, event):
         """Name of new vector map given.
-        
+
         Enable/diable OK button.
         """
         file = self.vectorNameCtrl.GetValue()
@@ -242,66 +266,76 @@ class ExportCategoryRaster(wx.Dialog):
             self.btnOK.Enable(True)
         else:
             self.btnOK.Enable(False)
-        
+
     def __layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         dataSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        dataSizer.Add(item = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                           label = _("Enter name of new vector map:")),
-                      proportion = 0, flag = wx.ALL, border = 3)
-        self.vectorNameCtrl = Select(parent = self.panel, type = 'raster',
-                                     mapsets = [grass.gisenv()['MAPSET']],
-                                     size = globalvar.DIALOG_GSELECT_SIZE)
+
+        dataSizer.Add(
+            item=wx.StaticText(
+                parent=self.panel,
+                id=wx.ID_ANY,
+                label=_("Enter name of new vector map:")),
+            proportion=0,
+            flag=wx.ALL,
+            border=3)
+        self.vectorNameCtrl = Select(parent=self.panel, type='raster',
+                                     mapsets=[grass.gisenv()['MAPSET']],
+                                     size=globalvar.DIALOG_GSELECT_SIZE)
         if self.rasterName:
             self.vectorNameCtrl.SetValue(self.rasterName)
-        dataSizer.Add(item = self.vectorNameCtrl,
-                      proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        
-                      
+        dataSizer.Add(item=self.vectorNameCtrl,
+                      proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
         # buttons
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOK)
         btnSizer.Realize()
-        
-        sizer.Add(item = dataSizer, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                       flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+
+        sizer.Add(item=dataSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self)
-        
+
         self.SetMinSize(self.GetSize())
-        
+
     def GetRasterName(self):
         """Returns vector name"""
         return self.vectorNameCtrl.GetValue()
 
     def OnOK(self, event):
         """Checks if map exists and can be overwritten."""
-        overwrite = UserSettings.Get(group = 'cmd', key = 'overwrite', subkey = 'enabled')
+        overwrite = UserSettings.Get(
+            group='cmd', key='overwrite', subkey='enabled')
         rast_name = self.GetRasterName()
-        res = grass.find_file(rast_name, element = 'cell')
+        res = grass.find_file(rast_name, element='cell')
         if res['fullname'] and overwrite is False:
-            qdlg = wx.MessageDialog(parent = self,
-                                        message = _("Raster map <%s> already exists."
-                                                    " Do you want to overwrite it?" % rast_name) ,
-                                        caption = _("Raster <%s> exists" % rast_name),
-                                        style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+            qdlg = wx.MessageDialog(
+                parent=self, message=_(
+                    "Raster map <%s> already exists."
+                    " Do you want to overwrite it?" %
+                    rast_name), caption=_(
+                    "Raster <%s> exists" %
+                    rast_name), style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             if qdlg.ShowModal() == wx.ID_YES:
                 event.Skip()
             qdlg.Destroy()
         else:
             event.Skip()
 
+
 class SettingsDialog(wx.Dialog):
-    def __init__(self, parent, id, title, scatt_mgr, pos=wx.DefaultPosition, size=wx.DefaultSize,
-                 style=wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(
+            self, parent, id, title, scatt_mgr, pos=wx.DefaultPosition,
+            size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE):
         """Settings dialog"""
         wx.Dialog.__init__(self, parent, id, title, pos, size, style)
 
@@ -311,41 +345,45 @@ class SettingsDialog(wx.Dialog):
         self.parent = parent
         self.settings = {}
 
-        settsLabels = {} 
+        settsLabels = {}
 
-        self.settings["show_ellips"] = wx.CheckBox(parent = self, id=wx.ID_ANY,
-                                                   label = _('Show confidence ellipses'))
-        show_ellips = UserSettings.Get(group ='scatt', key = "ellipses", subkey = "show_ellips")
+        self.settings["show_ellips"] = wx.CheckBox(
+            parent=self, id=wx.ID_ANY, label=_('Show confidence ellipses'))
+        show_ellips = UserSettings.Get(
+            group='scatt', key="ellipses", subkey="show_ellips")
         self.settings["show_ellips"].SetValue(show_ellips)
 
-
         self.colorsSetts = {
-                            "sel_pol" : ["selection", _("Selection polygon color:")],
-                            "sel_pol_vertex" : ["selection", _("Color of selection polygon vertex:")], 
-                            "sel_area" : ["selection", _("Selected area color:")]
-                           }
+            "sel_pol": [
+                "selection", _("Selection polygon color:")], "sel_pol_vertex": [
+                "selection", _("Color of selection polygon vertex:")], "sel_area": [
+                "selection", _("Selected area color:")]}
 
         for settKey, sett in self.colorsSetts.iteritems():
-            settsLabels[settKey] = wx.StaticText(parent = self, id = wx.ID_ANY, label = sett[1])
-            col = UserSettings.Get(group ='scatt', key = sett[0], subkey = settKey)
-            self.settings[settKey] = csel.ColourSelect(parent = self, id = wx.ID_ANY,
-                                            colour = wx.Colour(col[0],
-                                                               col[1],
-                                                               col[2], 
-                                                               255))
+            settsLabels[settKey] = wx.StaticText(
+                parent=self, id=wx.ID_ANY, label=sett[1])
+            col = UserSettings.Get(group='scatt', key=sett[0], subkey=settKey)
+            self.settings[settKey] = csel.ColourSelect(
+                parent=self, id=wx.ID_ANY, colour=wx.Colour(
+                    col[0], col[1], col[2], 255))
 
         self.sizeSetts = {
-                          "snap_tresh" : ["selection", _("Snapping treshold in pixels:")],
-                          "sel_area_opacty" : ["selection", _("Selected area opacity:")]
-                         }
+            "snap_tresh": ["selection", _("Snapping treshold in pixels:")],
+            "sel_area_opacty": ["selection", _("Selected area opacity:")]
+        }
 
         for settKey, sett in self.sizeSetts.iteritems():
-            settsLabels[settKey] = wx.StaticText(parent = self, id = wx.ID_ANY, label = sett[1])
-            self.settings[settKey] = wx.SpinCtrl(parent = self, id = wx.ID_ANY, min=0, max = 100)
-            size = int(UserSettings.Get(group = 'scatt', key = sett[0], subkey = settKey))
+            settsLabels[settKey] = wx.StaticText(
+                parent=self, id=wx.ID_ANY, label=sett[1])
+            self.settings[settKey] = wx.SpinCtrl(
+                parent=self, id=wx.ID_ANY, min=0, max=100)
+            size = int(
+                UserSettings.Get(
+                    group='scatt',
+                    key=sett[0],
+                    subkey=settKey))
             self.settings[settKey].SetValue(size)
 
-
         # buttons
         self.btnSave = wx.Button(self, wx.ID_SAVE)
         self.btnApply = wx.Button(self, wx.ID_APPLY)
@@ -354,24 +392,26 @@ class SettingsDialog(wx.Dialog):
 
         # bindings
         self.btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
-        self.btnApply.SetToolTipString(_("Apply changes for the current session"))
+        self.btnApply.SetToolTipString(
+            _("Apply changes for the current session"))
         self.btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
-        self.btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
+        self.btnSave.SetToolTipString(
+            _("Apply and save changes to user settings file (default for next sessions)"))
         self.btnClose.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btnClose.SetToolTipString(_("Close dialog"))
 
-        #Layout
+        # Layout
 
         # Analysis result style layout
         self.SetMinSize(self.GetBestSize())
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        sel_pol_box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                   label =" %s " % _("Selection style:"))
+        sel_pol_box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                   label=" %s " % _("Selection style:"))
         selPolBoxSizer = wx.StaticBoxSizer(sel_pol_box, wx.VERTICAL)
 
-        gridSizer = wx.GridBagSizer(vgap = 1, hgap = 1)
+        gridSizer = wx.GridBagSizer(vgap=1, hgap=1)
 
         row = 0
         setts = dict(self.colorsSetts.items() + self.sizeSetts.items())
@@ -380,25 +420,30 @@ class SettingsDialog(wx.Dialog):
                       "sel_area_opacty", "snap_tresh"]
         for settKey in settsOrder:
             sett = setts[settKey]
-            gridSizer.Add(item = settsLabels[settKey], flag = wx.ALIGN_CENTER_VERTICAL, pos =(row, 0))
-            gridSizer.Add(item = self.settings[settKey],
-                          flag = wx.ALIGN_RIGHT | wx.ALL, border = 5,
-                          pos =(row, 1))  
+            gridSizer.Add(
+                item=settsLabels[settKey],
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            gridSizer.Add(item=self.settings[settKey],
+                          flag=wx.ALIGN_RIGHT | wx.ALL, border=5,
+                          pos=(row, 1))
             row += 1
 
         gridSizer.AddGrowableCol(1)
-        selPolBoxSizer.Add(item = gridSizer, flag = wx.EXPAND)
+        selPolBoxSizer.Add(item=gridSizer, flag=wx.EXPAND)
 
-        ell_box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                               label =" %s " % _("Ellipses settings:"))
+        ell_box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                               label=" %s " % _("Ellipses settings:"))
         ellPolBoxSizer = wx.StaticBoxSizer(ell_box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 1, hgap = 1)
+        gridSizer = wx.GridBagSizer(vgap=1, hgap=1)
 
         sett = setts[settKey]
 
         row = 0
-        gridSizer.Add(item=self.settings["show_ellips"], 
-                      flag=wx.ALIGN_CENTER_VERTICAL, 
+        gridSizer.Add(item=self.settings["show_ellips"],
+                      flag=wx.ALIGN_CENTER_VERTICAL,
                       pos=(row, 0))
 
         gridSizer.AddGrowableCol(1)
@@ -411,11 +456,15 @@ class SettingsDialog(wx.Dialog):
 
         sizer.Add(item=selPolBoxSizer, flag=wx.EXPAND | wx.ALL, border=5)
         sizer.Add(item=ellPolBoxSizer, flag=wx.EXPAND | wx.ALL, border=5)
-        sizer.Add(item=btnSizer, flag=wx.EXPAND | wx.ALL, border=5, proportion=0)    
+        sizer.Add(
+            item=btnSizer,
+            flag=wx.EXPAND | wx.ALL,
+            border=5,
+            proportion=0)
 
         self.SetSizer(sizer)
         sizer.Fit(self)
-     
+
     def OnSave(self, event):
         """Button 'Save' pressed"""
         self.UpdateSettings()
@@ -429,47 +478,57 @@ class SettingsDialog(wx.Dialog):
 
     def UpdateSettings(self):
 
-        chanaged_setts = [];
+        chanaged_setts = []
         for settKey, sett in self.colorsSetts.iteritems():
             col = tuple(self.settings[settKey].GetColour())
-            col_s = UserSettings.Get(group='scatt', key=sett[0], subkey=settKey)
+            col_s = UserSettings.Get(
+                group='scatt', key=sett[0], subkey=settKey)
             if col_s != col:
-                UserSettings.Set(group='scatt', 
-                                 key=sett[0], 
+                UserSettings.Set(group='scatt',
+                                 key=sett[0],
                                  subkey=settKey,
                                  value=col)
                 chanaged_setts.append([settKey, sett[0]])
 
         for settKey, sett in self.sizeSetts.iteritems():
             val = self.settings[settKey].GetValue()
-            val_s = UserSettings.Get(group ='scatt', key = sett[0], subkey = settKey)
+            val_s = UserSettings.Get(
+                group='scatt', key=sett[0], subkey=settKey)
 
             if val_s != val:
-                UserSettings.Set(group = 'scatt', key = sett[0], subkey = settKey, 
-                                 value = val)
+                UserSettings.Set(group='scatt', key=sett[0], subkey=settKey,
+                                 value=val)
                 chanaged_setts.append([settKey, sett[0]])
 
         val = self.settings['show_ellips'].IsChecked()
-        val_s = UserSettings.Get(group ='scatt', key='ellipses', subkey='show_ellips')
+        val_s = UserSettings.Get(
+            group='scatt',
+            key='ellipses',
+            subkey='show_ellips')
 
         if val != val_s:
-            UserSettings.Set(group='scatt', key='ellipses', subkey='show_ellips', 
-                             value=val)
+            UserSettings.Set(
+                group='scatt',
+                key='ellipses',
+                subkey='show_ellips',
+                value=val)
             chanaged_setts.append(['ellipses', 'show_ellips'])
 
-        if chanaged_setts: 
+        if chanaged_setts:
             self.scatt_mgr.SettingsUpdated(chanaged_setts)
 
     def OnApply(self, event):
         """Button 'Apply' pressed"""
         self.UpdateSettings()
-        #self.Close()
+        # self.Close()
 
     def OnClose(self, event):
         """Button 'Cancel' pressed"""
         self.Close()
 
+
 class ManageBusyCursorMixin:
+
     def __init__(self, window):
         self.win = window
 
@@ -479,8 +538,8 @@ class ManageBusyCursorMixin:
         self.win.Bind(wx.EVT_ENTER_WINDOW, self.OnEnter)
         self.win.Bind(wx.EVT_LEAVE_WINDOW, self.OnLeave)
 
-    def OnLeave(self, event):   
-        self.cur_inside = False     
+    def OnLeave(self, event):
+        self.cur_inside = False
         self.busy_cur = None
 
     def OnEnter(self, event):
@@ -496,15 +555,17 @@ class ManageBusyCursorMixin:
 
         self.busy_cur = None
 
+
 class RenameClassDialog(SimpleDialog):
+
     def __init__(self, parent, old_name, title=("Change class name")):
         SimpleDialog.__init__(self, parent, title)
 
-        self.name = wx.TextCtrl(self.panel, id = wx.ID_ANY) 
+        self.name = wx.TextCtrl(self.panel, id=wx.ID_ANY)
         self.name.SetValue(old_name)
 
-        self.dataSizer.Add(self.name, proportion = 0,
-                           flag = wx.EXPAND | wx.ALL, border = 1)
+        self.dataSizer.Add(self.name, proportion=0,
+                           flag=wx.EXPAND | wx.ALL, border=1)
 
         self.panel.SetSizer(self.sizer)
         self.name.SetMinSize((200, -1))
diff --git a/gui/wxpython/iscatt/frame.py b/gui/wxpython/iscatt/frame.py
index 97a0b1d..ba3e9a0 100644
--- a/gui/wxpython/iscatt/frame.py
+++ b/gui/wxpython/iscatt/frame.py
@@ -41,44 +41,54 @@ try:
 except ImportError:
     import wx.lib.agw.aui as aui
 
+
 class IClassIScattPanel(wx.Panel, ManageBusyCursorMixin):
-    def __init__(self, parent, giface, iclass_mapwin = None,
-                 id = wx.ID_ANY):
 
-        #wx.SplitterWindow.__init__(self, parent = parent, id = id,
+    def __init__(self, parent, giface, iclass_mapwin=None,
+                 id=wx.ID_ANY):
+
+        # wx.SplitterWindow.__init__(self, parent = parent, id = id,
         #                           style = wx.SP_LIVE_UPDATE)
-        wx.Panel.__init__(self, parent = parent, id = wx.ID_ANY)
+        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
         ManageBusyCursorMixin.__init__(self, window=self)
 
-        self.scatt_mgr = self._createScattMgr(guiparent=parent, giface=giface, 
+        self.scatt_mgr = self._createScattMgr(guiparent=parent, giface=giface,
                                               iclass_mapwin=iclass_mapwin)
 
         # toobars
         self.toolbars = {}
         self.toolbars['mainToolbar'] = self._createMainToolbar()
-        self.toolbars['editingToolbar'] = EditingToolbar(parent = self, scatt_mgr = self.scatt_mgr)
-        
+        self.toolbars['editingToolbar'] = EditingToolbar(
+            parent=self, scatt_mgr=self.scatt_mgr)
+
         self._createCategoryPanel(self)
 
         self.plot_panel = ScatterPlotsPanel(self, self.scatt_mgr)
 
         self.mainsizer = wx.BoxSizer(wx.VERTICAL)
-        self.mainsizer.Add(item = self.toolbars['mainToolbar'], proportion = 0, flag = wx.EXPAND)
-        self.mainsizer.Add(item = self.toolbars['editingToolbar'], proportion = 0, flag = wx.EXPAND)
-        self.mainsizer.Add(item = self.catsPanel, proportion = 0, 
-                           flag = wx.EXPAND | wx.LEFT | wx.RIGHT , border = 5)
-        self.mainsizer.Add(item = self.plot_panel, proportion = 1, flag = wx.EXPAND)
+        self.mainsizer.Add(
+            item=self.toolbars['mainToolbar'],
+            proportion=0, flag=wx.EXPAND)
+        self.mainsizer.Add(
+            item=self.toolbars['editingToolbar'],
+            proportion=0, flag=wx.EXPAND)
+        self.mainsizer.Add(item=self.catsPanel, proportion=0,
+                           flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
+        self.mainsizer.Add(item=self.plot_panel, proportion=1, flag=wx.EXPAND)
 
         self.catsPanel.Hide()
         self.toolbars['editingToolbar'].Hide()
 
         self.SetSizer(self.mainsizer)
-        
-        self.scatt_mgr.computingStarted.connect(lambda : self.UpdateCur(busy=True))
-        self.scatt_mgr.renderingStarted.connect(lambda : self.UpdateCur(busy=True))
-        self.scatt_mgr.renderingFinished.connect(lambda : self.UpdateCur(busy=False))
 
-        #self.SetSashGravity(0.5)
+        self.scatt_mgr.computingStarted.connect(
+            lambda: self.UpdateCur(busy=True))
+        self.scatt_mgr.renderingStarted.connect(
+            lambda: self.UpdateCur(busy=True))
+        self.scatt_mgr.renderingFinished.connect(
+            lambda: self.UpdateCur(busy=False))
+
+        # self.SetSashGravity(0.5)
         #self.SplitHorizontally(self.head_panel, self.plot_panel, -50)
         self.Layout()
 
@@ -90,14 +100,14 @@ class IClassIScattPanel(wx.Panel, ManageBusyCursorMixin):
         ManageBusyCursorMixin.UpdateCur(self, busy)
 
     def _selCatInIScatt(self):
-         return False
+        return False
 
     def _createMainToolbar(self):
-         return MainToolbar(parent = self, scatt_mgr = self.scatt_mgr)
+        return MainToolbar(parent=self, scatt_mgr=self.scatt_mgr)
 
     def _createScattMgr(self, guiparent, giface, iclass_mapwin):
-        return ScattsManager(guiparent=self, giface=giface, iclass_mapwin=iclass_mapwin)
-
+        return ScattsManager(guiparent=self, giface=giface,
+                             iclass_mapwin=iclass_mapwin)
 
     def NewScatterPlot(self, scatt_id, transpose):
         return self.plot_panel.NewScatterPlot(scatt_id, transpose)
@@ -108,45 +118,66 @@ class IClassIScattPanel(wx.Panel, ManageBusyCursorMixin):
 
     def ShowCategoryPanel(self, show):
         self.catsPanel.Show(show)
-        
-        #if show:
-        #    self.SetSashSize(5) 
-        #else:
+
+        # if show:
+        #    self.SetSashSize(5)
+        # else:
         #    self.SetSashSize(0)
         self.plot_panel.SetVirtualSize(self.plot_panel.GetBestVirtualSize())
         self.Layout()
 
     def _createCategoryPanel(self, parent):
         self.catsPanel = wx.Panel(parent=parent)
-        self.cats_list = CategoryListCtrl(parent=self.catsPanel, 
-                                          cats_mgr=self.scatt_mgr.GetCategoriesManager(),
-                                          sel_cats_in_iscatt=self._selCatInIScatt())
+        self.cats_list = CategoryListCtrl(
+            parent=self.catsPanel,
+            cats_mgr=self.scatt_mgr.GetCategoriesManager(),
+            sel_cats_in_iscatt=self._selCatInIScatt())
 
         self.catsPanel.SetMinSize((-1, 100))
         self.catsPanel.SetInitialSize((-1, 150))
 
         box_capt = wx.StaticBox(parent=self.catsPanel, id=wx.ID_ANY,
-                             label=' %s ' % _("Classes"),)
+                                label=' %s ' % _("Classes"),)
         catsSizer = wx.StaticBoxSizer(box_capt, wx.VERTICAL)
 
-        self.toolbars['categoryToolbar'] = self._createCategoryToolbar(self.catsPanel)
+        self.toolbars['categoryToolbar'] = self._createCategoryToolbar(
+            self.catsPanel)
 
-        catsSizer.Add(item=self.cats_list, proportion=1,  flag=wx.EXPAND | wx.TOP, border = 5)
+        catsSizer.Add(
+            item=self.cats_list,
+            proportion=1,
+            flag=wx.EXPAND | wx.TOP,
+            border=5)
         if self.toolbars['categoryToolbar']:
             catsSizer.Add(item=self.toolbars['categoryToolbar'], proportion=0)
 
         self.catsPanel.SetSizer(catsSizer)
-    
+
     def _createCategoryToolbar(self, parent):
         return CategoryToolbar(parent=parent,
-                               scatt_mgr=self.scatt_mgr, 
+                               scatt_mgr=self.scatt_mgr,
                                cats_list=self.cats_list)
 
+
 class IScattDialog(wx.Dialog):
-    def __init__(self, parent, giface, title=_("GRASS GIS Interactive Scatter Plot Tool"),
-                 id=wx.ID_ANY, style=wx.DEFAULT_FRAME_STYLE, **kwargs):
-        wx.Dialog.__init__(self, parent, id, style=style, title = title, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+
+    def __init__(
+            self, parent, giface,
+            title=_("GRASS GIS Interactive Scatter Plot Tool"),
+            id=wx.ID_ANY, style=wx.DEFAULT_FRAME_STYLE, **kwargs):
+        wx.Dialog.__init__(
+            self,
+            parent,
+            id,
+            style=style,
+            title=title,
+            **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
 
         self.iscatt_panel = MapDispIScattPanel(self, giface)
 
@@ -161,26 +192,31 @@ class IScattDialog(wx.Dialog):
 
     def OnCloseWindow(self, event):
         event.Skip()
-        #self.
+        # self.
+
 
 class MapDispIScattPanel(IClassIScattPanel):
+
     def __init__(self, parent, giface,
                  id=wx.ID_ANY, **kwargs):
         IClassIScattPanel.__init__(self, parent=parent, giface=giface,
-                                         id=id, **kwargs)
+                                   id=id, **kwargs)
 
     def _createScattMgr(self, guiparent, giface, iclass_mapwin):
-        return ScattsManager(guiparent = self, giface = giface)
+        return ScattsManager(guiparent=self, giface=giface)
 
     def _createMainToolbar(self):
-         return MainToolbar(parent = self, scatt_mgr = self.scatt_mgr, opt_tools=['add_group'])
+        return MainToolbar(
+            parent=self, scatt_mgr=self.scatt_mgr, opt_tools=['add_group'])
 
     def _selCatInIScatt(self):
-         return True
+        return True
+
 
 class ScatterPlotsPanel(scrolled.ScrolledPanel):
+
     def __init__(self, parent, scatt_mgr, id=wx.ID_ANY):
-    
+
         scrolled.ScrolledPanel.__init__(self, parent)
         self.SetupScrolling(scroll_x=False, scroll_y=True, scrollToTop=False)
 
@@ -188,10 +224,10 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
 
         self.mainPanel = wx.Panel(parent=self, id=wx.ID_ANY)
 
-        #self._createCategoryPanel()
+        # self._createCategoryPanel()
         # Fancy gui
         self._mgr = aui.AuiManager(self.mainPanel)
-        #self._mgr.SetManagedWindow(self)
+        # self._mgr.SetManagedWindow(self)
 
         self._mgr.Update()
 
@@ -202,11 +238,11 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         self.Bind(aui.EVT_AUI_PANE_CLOSE, self.OnPlotPaneClosed)
 
         dlgSize = (-1, 400)
-        #self.SetBestSize(dlgSize)
-        #self.SetInitialSize(dlgSize)
+        # self.SetBestSize(dlgSize)
+        # self.SetInitialSize(dlgSize)
         self.SetAutoLayout(1)
-        #fix goutput's pane size (required for Mac OSX)
-        #if self.gwindow:         
+        # fix goutput's pane size (required for Mac OSX)
+        # if self.gwindow:
         #    self.gwindow.SetSashPosition(int(self.GetSize()[1] * .75))
         self.ignore_scroll = 0
         self.Bind(wx.EVT_MOUSEWHEEL, self.OnMouseWheel)
@@ -217,7 +253,7 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         self.scatts = {}
 
         self.Bind(wx.EVT_CLOSE, self.OnClose)
-        
+
         self.scatt_mgr.cursorPlotMove.connect(self.CursorPlotMove)
 
     def SetBusy(self, busy):
@@ -256,17 +292,18 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         del self.scatt_id_scatt_i[scatt_id]
         del self.scatts[scatt_id]
 
-        if pane.IsOk(): 
-          self._mgr.ClosePane(pane) 
-        self._mgr.Update() 
+        if pane.IsOk():
+            self._mgr.ClosePane(pane)
+        self._mgr.Update()
 
     def OnMouseWheel(self, event):
-        #TODO very ugly find some better solution        
+        # TODO very ugly find some better solution
         self.ignore_scroll = 3
         event.Skip()
 
     def ScrollChildIntoView(self, child):
-        #For aui manager it does not work and returns position always to the top -> deactivated.
+        # For aui manager it does not work and returns position always to the
+        # top -> deactivated.
         pass
 
     def OnPlotPaneClosed(self, event):
@@ -282,13 +319,13 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         else:
             event.Skip()
 
-        #wx.CallAfter(self._mgr.Update)
-        #wx.CallAfter(self.Layout)
+        # wx.CallAfter(self._mgr.Update)
+        # wx.CallAfter(self.Layout)
 
     def _doLayout(self):
 
         mainsizer = wx.BoxSizer(wx.VERTICAL)
-        mainsizer.Add(item = self.mainPanel, proportion = 1, flag = wx.EXPAND)
+        mainsizer.Add(item=self.mainPanel, proportion=1, flag=wx.EXPAND)
         self.SetSizer(mainsizer)
 
         self.Layout()
@@ -296,7 +333,7 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
 
     def OnClose(self, event):
         """Close dialog"""
-        #TODO
+        # TODO
         print "closed"
         self.scatt_mgr.CleanUp()
         self.Destroy()
@@ -305,7 +342,7 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         pass
 
     def _newScatterPlotName(self, scatt_id):
-        name = self._getScatterPlotName(self.scatt_i) 
+        name = self._getScatterPlotName(self.scatt_i)
         self.scatt_id_scatt_i[scatt_id] = self.scatt_i
         self.scatt_i += 1
         return name
@@ -315,26 +352,26 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         return name
 
     def NewScatterPlot(self, scatt_id, transpose):
-        #TODO needs to be resolved (should be in this class)
+        # TODO needs to be resolved (should be in this class)
 
-        scatt = ScatterPlotWidget(parent = self.mainPanel, 
-                                  scatt_mgr = self.scatt_mgr, 
-                                  scatt_id = scatt_id, 
-                                  transpose = transpose)
+        scatt = ScatterPlotWidget(parent=self.mainPanel,
+                                  scatt_mgr=self.scatt_mgr,
+                                  scatt_id=scatt_id,
+                                  transpose=transpose)
         scatt.plotClosed.connect(self.ScatterPlotClosed)
         self.transpose[scatt_id] = transpose
-        
+
         caption = self._creteCaption(scatt_id)
         self._mgr.AddPane(scatt,
-                           aui.AuiPaneInfo().Dockable(True).Floatable(True).
-                           Name(self._newScatterPlotName(scatt_id)).MinSize((-1, 300)).
-                           Caption(caption).
-                           Center().Position(1).MaximizeButton(True).
-                           MinimizeButton(True).CaptionVisible(True).
-                           CloseButton(True).Layer(0))
+                          aui.AuiPaneInfo().Dockable(True).Floatable(True).
+                          Name(self._newScatterPlotName(scatt_id)).MinSize((-1, 300)).
+                          Caption(caption).
+                          Center().Position(1).MaximizeButton(True).
+                          MinimizeButton(True).CaptionVisible(True).
+                          CloseButton(True).Layer(0))
 
         self._mgr.Update()
-  
+
         self.SetVirtualSize(self.GetBestVirtualSize())
         self.Layout()
 
@@ -347,10 +384,10 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         transpose = self.transpose[scatt_id]
         bands = self.scatt_mgr.GetBands()
 
-        #TODO too low level
+        # TODO too low level
         b1_id, b2_id = idScattToidBands(scatt_id, len(bands))
 
-        x_b =  bands[b1_id].split('@')[0]
+        x_b = bands[b1_id].split('@')[0]
         y_b = bands[b2_id].split('@')[0]
 
         if transpose:
@@ -361,39 +398,40 @@ class ScatterPlotsPanel(scrolled.ScrolledPanel):
         return "%s x: %s y: %s" % (_("scatter plot"), x_b, y_b)
 
     def GetScattMgr(self):
-        return  self.scatt_mgr
+        return self.scatt_mgr
+
 
 class CategoryListCtrl(wx.ListCtrl,
                        listmix.ListCtrlAutoWidthMixin):
-                       #listmix.TextEditMixin):
+                       # listmix.TextEditMixin):
 
-    def __init__(self, parent, cats_mgr, sel_cats_in_iscatt, id = wx.ID_ANY):
+    def __init__(self, parent, cats_mgr, sel_cats_in_iscatt, id=wx.ID_ANY):
 
-        wx.ListCtrl.__init__(self, parent, id,
-                             style = wx.LC_REPORT|wx.LC_VIRTUAL|wx.LC_HRULES|
-                                     wx.LC_VRULES|wx.LC_SINGLE_SEL|wx.LC_NO_HEADER)
+        wx.ListCtrl.__init__(
+            self, parent, id, style=wx.LC_REPORT | wx.LC_VIRTUAL | wx.LC_HRULES |
+            wx.LC_VRULES | wx.LC_SINGLE_SEL | wx.LC_NO_HEADER)
         self.columns = ((_('Class name'), 'name'), )
-                        #(_('Color'), 'color'))
+        #(_('Color'), 'color'))
 
         self.sel_cats_in_iscatt = sel_cats_in_iscatt
 
-        self.Populate(columns = self.columns)
-        
+        self.Populate(columns=self.columns)
+
         self.cats_mgr = cats_mgr
         self.SetItemCount(len(self.cats_mgr.GetCategories()))
 
         self.rightClickedItemIdx = wx.NOT_FOUND
-        
+
         listmix.ListCtrlAutoWidthMixin.__init__(self)
 
-        #listmix.TextEditMixin.__init__(self)
-      
-        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnCategoryRightUp) #wxMSW
-        self.Bind(wx.EVT_RIGHT_UP,            self.OnCategoryRightUp) #wxGTK
+        # listmix.TextEditMixin.__init__(self)
+
+        self.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnCategoryRightUp)  # wxMSW
+        self.Bind(wx.EVT_RIGHT_UP, self.OnCategoryRightUp)  # wxGTK
 
         #self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnEdit)
         self.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnSel)
-             
+
         self.cats_mgr.setCategoryAttrs.connect(self.Update)
         self.cats_mgr.deletedCategory.connect(self.Update)
         self.cats_mgr.addedCategory.connect(self.Update)
@@ -409,24 +447,25 @@ class CategoryListCtrl(wx.ListCtrl,
             try:
                 text.encode('ascii')
             except UnicodeEncodeError:
-                GMessage(parent = self, message = _("Please use only ASCII characters."))
+                GMessage(parent=self, message=_(
+                    "Please use only ASCII characters."))
                 return
 
         cat_id = self.cats_mgr.GetCategories()[row]
 
         self.cats_mgr.setCategoryAttrs.disconnect(self.Update)
-        self.cats_mgr.SetCategoryAttrs(cat_id, {attr : text})
+        self.cats_mgr.SetCategoryAttrs(cat_id, {attr: text})
         self.cats_mgr.setCategoryAttrs.connect(self.Update)
-        
+
         self.Select(row)
-        
+
     def Populate(self, columns):
         for i, col in enumerate(columns):
-            self.InsertColumn(i, col[0])#wx.LIST_FORMAT_RIGHT
+            self.InsertColumn(i, col[0])  # wx.LIST_FORMAT_RIGHT
 
         #self.SetColumnWidth(0, 100)
         #self.SetColumnWidth(1, 100)
-        
+
     def AddCategory(self):
 
         self.cats_mgr.addedCategory.disconnect(self.Update)
@@ -437,35 +476,35 @@ class CategoryListCtrl(wx.ListCtrl,
             GError(_("Maximum limit of categories number was reached."))
             return
         self.SetItemCount(len(self.cats_mgr.GetCategories()))
-                        
+
     def DeleteCategory(self):
-        indexList = sorted(self.GetSelectedIndices(), reverse = True)
+        indexList = sorted(self.GetSelectedIndices(), reverse=True)
         cats = []
         for i in indexList:
             # remove temporary raster
             cat_id = self.cats_mgr.GetCategories()[i]
-            
+
             cats.append(cat_id)
 
             self.cats_mgr.deletedCategory.disconnect(self.Update)
             self.cats_mgr.DeleteCategory(cat_id)
             self.cats_mgr.deletedCategory.connect(self.Update)
-            
+
         self.SetItemCount(len(self.cats_mgr.GetCategories()))
-        
+
     def OnSel(self, event):
         if self.sel_cats_in_iscatt:
             indexList = self.GetSelectedIndices()
             sel_cats = []
             cats = self.cats_mgr.GetCategories()
             for i in indexList:
-                sel_cats.append(cats[i])       
+                sel_cats.append(cats[i])
 
             if sel_cats:
                 self.cats_mgr.SetSelectedCat(sel_cats[0])
         event.Skip()
 
-    def GetSelectedIndices(self, state =  wx.LIST_STATE_SELECTED):
+    def GetSelectedIndices(self, state=wx.LIST_STATE_SELECTED):
         indices = []
         lastFound = -1
         while True:
@@ -475,17 +514,17 @@ class CategoryListCtrl(wx.ListCtrl,
             else:
                 lastFound = index
                 indices.append(index)
-        return indices        
+        return indices
 
     def DeselectAll(self):
         """Deselect all items"""
         indexList = self.GetSelectedIndices()
         for i in indexList:
-            self.Select(i, on = 0)
-         
+            self.Select(i, on=0)
+
         # no highlight
         self.OnCategorySelected(None)
-        
+
     def OnGetItemText(self, item, col):
         attr = self.columns[col][1]
         cat_id = self.cats_mgr.GetCategories()[item]
@@ -499,17 +538,18 @@ class CategoryListCtrl(wx.ListCtrl,
         cat_id = self.cats_mgr.GetCategories()[item]
 
         cattr = self.cats_mgr.GetCategoryAttrs(cat_id)
-        
+
         if cattr['show']:
             c = cattr['color']
-            
+
             back_c = wx.Colour(*map(int, c.split(':')))
             text_c = wx.Colour(*ContrastColor(back_c))
         else:
             back_c = wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTION)
-            text_c = wx.SystemSettings.GetColour(wx.SYS_COLOUR_INACTIVECAPTIONTEXT)
+            text_c = wx.SystemSettings.GetColour(
+                wx.SYS_COLOUR_INACTIVECAPTIONTEXT)
 
-        # if it is in scope of the method, gui falls, using self solved it 
+        # if it is in scope of the method, gui falls, using self solved it
         self.l = wx.ListItemAttr(colText=text_c, colBack=back_c)
         return self.l
 
@@ -525,7 +565,7 @@ class CategoryListCtrl(wx.ListCtrl,
         cats = self.cats_mgr.GetCategories()
         cat_id = cats[cat_idx]
         showed = self.cats_mgr.GetCategoryAttrs(cat_id)['show']
-        
+
         menu = wx.Menu()
 
         item_id = wx.NewId()
@@ -546,13 +586,17 @@ class CategoryListCtrl(wx.ListCtrl,
             text = _("Show")
 
         item_id = wx.NewId()
-        menu.Append(item_id, text = text)
-        self.Bind(wx.EVT_MENU, lambda event : self._setCatAttrs(cat_id=cat_id,
-                                                                attrs={'show' : not showed}), 
-                                                                id=item_id) 
-        
+        menu.Append(item_id, text=text)
+        self.Bind(
+            wx.EVT_MENU,
+            lambda event: self._setCatAttrs(
+                cat_id=cat_id,
+                attrs={
+                    'show': not showed}),
+            id=item_id)
+
         menu.AppendSeparator()
-        
+
         item_id = wx.NewId()
         menu.Append(item_id, text=_("Move to top"))
         self.Bind(wx.EVT_MENU, self.OnMoveTop, id=item_id)
@@ -590,7 +634,7 @@ class CategoryListCtrl(wx.ListCtrl,
 
     def OnExportCatRast(self, event):
         """Export training areas"""
-        #TODO
+        # TODO
         #   GMessage(parent=self, message=_("No class raster to export."))
         #    return
 
@@ -632,7 +676,7 @@ class CategoryListCtrl(wx.ListCtrl,
         col = self.cats_mgr.GetCategoryAttrs(cat_id)['color']
         col = map(int, col.split(':'))
 
-        col_data =  wx.ColourData()
+        col_data = wx.ColourData()
         col_data.SetColour(wx.Colour(*col))
 
         dlg = wx.ColourDialog(self, col_data)
@@ -641,7 +685,7 @@ class CategoryListCtrl(wx.ListCtrl,
         if dlg.ShowModal() == wx.ID_OK:
             color = dlg.GetColourData().GetColour().Get()
             color = ':'.join(map(str, color))
-            self.cats_mgr.SetCategoryAttrs(cat_id, {"color" : color})
+            self.cats_mgr.SetCategoryAttrs(cat_id, {"color": color})
 
         dlg.Destroy()
 
@@ -653,16 +697,18 @@ class CategoryListCtrl(wx.ListCtrl,
         value = cat_attrs['opacity'] * 100
         name = cat_attrs['name']
 
-        dlg = SetOpacityDialog(self, opacity = value,
-                               title = _("Change opacity of class <%s>" % name))
+        dlg = SetOpacityDialog(self, opacity=value,
+                               title=_("Change opacity of class <%s>" % name))
 
-        dlg.applyOpacity.connect(lambda value:
-                                 self._setCatAttrs(cat_id=cat_id, attrs={'opacity' : value}))
+        dlg.applyOpacity.connect(
+            lambda value: self._setCatAttrs(
+                cat_id=cat_id, attrs={
+                    'opacity': value}))
         dlg.CentreOnParent()
 
         if dlg.ShowModal() == wx.ID_OK:
-            self._setCatAttrs(cat_id=cat_id, attrs={'opacity' : value})
-        
+            self._setCatAttrs(cat_id=cat_id, attrs={'opacity': value})
+
         dlg.Destroy()
 
     def OnRename(self, event):
@@ -676,9 +722,10 @@ class CategoryListCtrl(wx.ListCtrl,
             if dlg.ShowModal() == wx.ID_OK:
                 name = dlg.GetNewName().strip()
                 if not name:
-                    GMessage(parent=self, message=_("Empty name was inserted."))
+                    GMessage(parent=self, message=_(
+                        "Empty name was inserted."))
                 else:
-                    self.cats_mgr.SetCategoryAttrs(cat_id, {"name" : name})
+                    self.cats_mgr.SetCategoryAttrs(cat_id, {"name": name})
                     break
             else:
                 break
diff --git a/gui/wxpython/iscatt/iscatt_core.py b/gui/wxpython/iscatt/iscatt_core.py
index f428694..6c81a29 100644
--- a/gui/wxpython/iscatt/iscatt_core.py
+++ b/gui/wxpython/iscatt/iscatt_core.py
@@ -25,7 +25,7 @@ import time
 import numpy as np
 
 # used iclass perimeters algorithm instead of convolve2d
-#from matplotlib.path import Path 
+#from matplotlib.path import Path
 #from scipy.signal import convolve2d
 
 from math import sqrt, ceil, floor
@@ -36,24 +36,27 @@ from core.gcmd import GException, GError, RunCommand
 import grass.script as grass
 
 from core_c import CreateCatRast, ComputeScatts, UpdateCatRast, \
-                   Rasterize, SC_SCATT_DATA, SC_SCATT_CONDITIONS
+    Rasterize, SC_SCATT_DATA, SC_SCATT_CONDITIONS
 
 MAX_SCATT_SIZE = 4100 * 4100
 WARN_SCATT_SIZE = 2000 * 2000
 MAX_NCELLS = 65536 * 65536
 WARN_NCELLS = 12000 * 12000
 
+
 class Core:
     """Represents scatter plot backend.
     """
+
     def __init__(self):
-        
+
         self.an_data = AnalyzedData()
 
         self.scatts_dt = ScattPlotsData(self.an_data)
         self.scatt_conds_dt = ScattPlotsCondsData(self.an_data)
 
-        self.cat_rast_updater = CatRastUpdater(self.scatts_dt, self.an_data, self)
+        self.cat_rast_updater = CatRastUpdater(
+            self.scatts_dt, self.an_data, self)
 
     def SetData(self, bands):
         """Set bands for analysis.
@@ -85,7 +88,7 @@ class Core:
         return self.an_data.GetBands()
 
     def GetScattsData(self):
-        return self.scatts_dt, self.scatt_conds_dt;
+        return self.scatts_dt, self.scatt_conds_dt
 
     def GetRegion(self):
         return self.an_data.GetRegion()
@@ -94,9 +97,9 @@ class Core:
         return self.scatts_dt.GetCatRast(cat_id)
 
     def AddScattPlots(self, scatt_ids):
-    
+
         for s_id in scatt_ids:
-            self.scatts_dt.AddScattPlot(scatt_id = s_id)
+            self.scatts_dt.AddScattPlot(scatt_id=s_id)
 
         cats_ids = self.scatts_dt.GetCategories()
         self.ComputeCatsScatts(cats_ids)
@@ -114,7 +117,7 @@ class Core:
         for k, v in bbox.iteritems():
             bbox[k] = self._validExtend(v)
 
-        arr[bbox['btm_y'] : bbox['up_y'], bbox['btm_x'] : bbox['up_x']] = value
+        arr[bbox['btm_y']: bbox['up_y'], bbox['btm_x']: bbox['up_x']] = value
 
         self.ComputeCatsScatts([cat_id])
         return cat_id
@@ -136,12 +139,12 @@ class Core:
         cats_rasts = self.scatts_dt.GetCatsRasts()
         cats_rasts_conds = self.scatts_dt.GetCatsRastsConds()
 
-        returncode, scatts = ComputeScatts(self.an_data.GetRegion(), 
-                                           scatt_conds, 
+        returncode, scatts = ComputeScatts(self.an_data.GetRegion(),
+                                           scatt_conds,
                                            bands,
-                                           len(self.GetBands()), 
-                                           scatts, 
-                                           cats_rasts_conds, 
+                                           len(self.GetBands()),
+                                           scatts,
+                                           cats_rasts_conds,
                                            cats_rasts)
 
         if returncode < 0:
@@ -149,7 +152,7 @@ class Core:
 
     def CatRastUpdater(self):
         return self.cat_rast_updater
-    
+
     def UpdateCategoryWithPolygons(self, cat_id, scatts_pols, value):
         start_time = time.clock()
 
@@ -161,7 +164,7 @@ class Core:
             if self.scatt_conds_dt.AddScattPlot(cat_id, scatt_id) < 0:
                 return False
 
-            b1, b2 = idScattToidBands(scatt_id, len(self.an_data.GetBands()))    
+            b1, b2 = idScattToidBands(scatt_id, len(self.an_data.GetBands()))
             b = self.scatts_dt.GetBandsInfo(scatt_id)
 
             region = {}
@@ -172,50 +175,52 @@ class Core:
             region['e'] = b['b1']['max'] + 0.5
 
             arr = self.scatt_conds_dt.GetValuesArr(cat_id, scatt_id)
-            arr = Rasterize(polygon=coords, 
-                            rast=arr, 
-                            region=region, 
+            arr = Rasterize(polygon=coords,
+                            rast=arr,
+                            region=region,
                             value=value)
 
             # previous way of rasterization / used scipy
-            #raster_pol = RasterizePolygon(coords, b['b1']['range'], b['b1']['min'], 
-            #                                      b['b2']['range'], b['b2']['min'])
+            # raster_pol = RasterizePolygon(coords, b['b1']['range'], b['b1']['min'],
+            # b['b2']['range'], b['b2']['min'])
 
-            #raster_ind = np.where(raster_pol > 0) 
+            #raster_ind = np.where(raster_pol > 0)
             #arr = self.scatt_conds_dt.GetValuesArr(cat_id, scatt_id)
 
             #arr[raster_ind] = value
-            #arr.flush()
-        
+            # arr.flush()
+
         self.ComputeCatsScatts([cat_id])
         return cat_id
 
     def ExportCatRast(self, cat_id, rast_name):
 
-        cat_rast = self.scatts_dt.GetCatRast(cat_id);
+        cat_rast = self.scatts_dt.GetCatRast(cat_id)
         if not cat_rast:
             return 1
-        
-        return RunCommand("g.copy", 
+
+        return RunCommand("g.copy",
                           raster=cat_rast + ',' + rast_name,
                           getErrorMsg=True,
                           overwrite=True)
 
     def _validExtend(self, val):
-        #TODO do it general
-        if  val > 255:
+        # TODO do it general
+        if val > 255:
             val = 255
         elif val < 0:
             val = 0
 
         return val
 
+
 class CatRastUpdater:
     """Update backend data structures according to selected areas in mapwindow.
     """
+
     def __init__(self, scatts_dt, an_data, core):
         self.scatts_dt = scatts_dt
-        self.an_data = an_data # TODO may be confusing
+        self.an_data = an_data  # TODO may be confusing
         self.core = core
         self.vectMap = None
 
@@ -223,7 +228,8 @@ class CatRastUpdater:
         self.vectMap = vectMap
 
     def SyncWithMap(self):
-        #TODO possible optimization - bbox only of vertex and its two neighbours
+        # TODO possible optimization - bbox only of vertex and its two
+        # neighbours
 
         region = self.an_data.GetRegion()
 
@@ -238,23 +244,25 @@ class CatRastUpdater:
         for cat_id in self.scatts_dt.GetCategories():
             if cat_id == 0:
                 continue
-            
-            cat = [{1 : [cat_id]}]
+
+            cat = [{1: [cat_id]}]
             self._updateCatRast(bbox, cat, updated_cats)
 
         return updated_cats
 
-    def EditedFeature(self, new_bboxs, new_areas_cats, old_bboxs, old_areas_cats):
-        #TODO possible optimization - bbox only of vertex and its two neighbours
+    def EditedFeature(self, new_bboxs, new_areas_cats,
+                      old_bboxs, old_areas_cats):
+        # TODO possible optimization - bbox only of vertex and its two
+        # neighbours
 
         bboxs = old_bboxs + new_bboxs
-        areas_cats = old_areas_cats + new_areas_cats 
+        areas_cats = old_areas_cats + new_areas_cats
 
         updated_cats = []
 
         for i in range(len(areas_cats)):
             self._updateCatRast(bboxs[i], areas_cats[i], updated_cats)
-        
+
         return updated_cats
 
     def _updateCatRast(self, bbox, areas_cats, updated_cats):
@@ -266,7 +274,7 @@ class CatRastUpdater:
                 continue
 
             layer = areas_cats[c].keys()[0]
-            cat =  areas_cats[c][layer][0]
+            cat = areas_cats[c][layer][0]
 
             if cat in rasterized_cats:
                 continue
@@ -276,34 +284,38 @@ class CatRastUpdater:
 
             grass_region = self._create_grass_region_env(bbox)
 
-            #TODO hack check if raster exists?
+            # TODO hack check if raster exists?
             patch_rast = "temp_scatt_patch_%d" % (os.getpid())
             self._rasterize(grass_region, layer, cat, patch_rast)
 
             region = self.an_data.GetRegion()
-            ret = UpdateCatRast(patch_rast, region, self.scatts_dt.GetCatRastCond(cat))
+            ret = UpdateCatRast(
+                patch_rast,
+                region,
+                self.scatts_dt.GetCatRastCond(cat))
             if ret < 0:
-                GException(_("Patching category raster conditions file failed."))            
+                GException(
+                    _("Patching category raster conditions file failed."))
             RunCommand("g.remove", flags='f', type='raster', name=patch_rast)
 
     def _rasterize(self, grass_region, layer, cat, out_rast):
 
-        #TODO different thread may be problem when user edits map
+        # TODO different thread may be problem when user edits map
         environs = os.environ.copy()
         environs['GRASS_VECTOR_TEMPORARY'] = '1'
 
         ret, text, msg = RunCommand("v.category",
                                     input=self.vectMap,
-                                    getErrorMsg = True,
+                                    getErrorMsg=True,
                                     option='report',
                                     read=True,
                                     env=environs)
 
         ret, text, msg = RunCommand("v.build",
-                                    map = self.vectMap,
-                                    getErrorMsg = True,
-                                    read = True,
-                                    env = environs)
+                                    map=self.vectMap,
+                                    getErrorMsg=True,
+                                    read=True,
+                                    env=environs)
 
         if ret != 0:
             GException(_("v.build failed:\n%s" % msg))
@@ -313,15 +325,15 @@ class CatRastUpdater:
         environs['GRASS_VECTOR_TEMPORARY'] = '1'
 
         ret, text, msg = RunCommand("v.to.rast",
-                                    input = self.vectMap,
-                                    use = "cat",
-                                    layer = str(layer),
-                                    cat = str(cat),
-                                    output = out_rast,
-                                    getErrorMsg = True,
-                                    read = True,
-                                    overwrite = True,
-                                    env = environs)
+                                    input=self.vectMap,
+                                    use="cat",
+                                    layer=str(layer),
+                                    cat=str(cat),
+                                    output=out_rast,
+                                    getErrorMsg=True,
+                                    read=True,
+                                    overwrite=True,
+                                    env=environs)
 
         if ret != 0:
             GException(_("v.to.rast failed:\n%s" % msg))
@@ -336,40 +348,46 @@ class CatRastUpdater:
         elif bbox["maxy"] >= r["n"]:
             new_r["n"] = bbox["maxy"]
         else:
-            new_r["n"] = ceil((bbox["maxy"] - r["s"]) / r["nsres"]) * r["nsres"] + r["s"]
+            new_r["n"] = ceil(
+                (bbox["maxy"] - r["s"]) / r["nsres"]) * r["nsres"] + r["s"]
 
         if bbox["miny"] >= r["n"]:
             return 0
         elif bbox["miny"] <= r["s"]:
             new_r["s"] = bbox["miny"]
         else:
-            new_r["s"] = floor((bbox["miny"] - r["s"]) / r["nsres"]) * r["nsres"] + r["s"]
+            new_r["s"] = floor(
+                (bbox["miny"] - r["s"]) / r["nsres"]) * r["nsres"] + r["s"]
 
         if bbox["maxx"] <= r["w"]:
             return 0
         elif bbox["maxx"] >= r["e"]:
             new_r["e"] = bbox["maxx"]
         else:
-            new_r["e"] = ceil((bbox["maxx"] - r["w"]) / r["ewres"]) * r["ewres"] + r["w"]
+            new_r["e"] = ceil(
+                (bbox["maxx"] - r["w"]) / r["ewres"]) * r["ewres"] + r["w"]
 
         if bbox["minx"] >= r["e"]:
             return 0
         elif bbox["minx"] <= r["w"]:
             new_r["w"] = bbox["minx"]
         else:
-            new_r["w"] = floor((bbox["minx"] - r["w"]) / r["ewres"]) * r["ewres"] + r["w"]
+            new_r["w"] = floor(
+                (bbox["minx"] - r["w"]) / r["ewres"]) * r["ewres"] + r["w"]
 
-        #TODO check regions resolution
+        # TODO check regions resolution
         new_r["nsres"] = r["nsres"]
         new_r["ewres"] = r["ewres"]
 
-        return {"GRASS_REGION" :  grass.region_env(**new_r)}
+        return {"GRASS_REGION": grass.region_env(**new_r)}
+
 
 class AnalyzedData:
     """Represents analyzed data (bands, region).
     """
+
     def __init__(self):
-        
+
         self.bands = []
         self.bands_info = {}
 
@@ -393,9 +411,9 @@ class AnalyzedData:
 
             if i is None:
                 GException("raster %s is not CELL type" % (b))
-    
+
             self.bands_info[b] = i
-            #TODO check size of raster
+            # TODO check size of raster
 
         return True
 
@@ -406,22 +424,24 @@ class AnalyzedData:
         band = self.bands[band_id]
         return self.bands_info[band]
 
+
 class ScattPlotsCondsData:
     """Data structure for selected areas in scatter plot(condtions).
     """
+
     def __init__(self, an_data):
 
         self.an_data = an_data
 
-        #TODO
+        # TODO
         self.max_n_cats = 10
-    
+
         self.dtype = 'uint8'
-        self.type = 1;
+        self.type = 1
         self.CleanUp()
 
     def CleanUp(self):
-    
+
         self.cats = {}
 
         self.n_scatts = -1
@@ -434,10 +454,10 @@ class ScattPlotsCondsData:
 
         self.CleanUp()
 
-        self.n_scatts =  (n_bands - 1) * n_bands / 2;
+        self.n_scatts = (n_bands - 1) * n_bands / 2
         self.n_bands = n_bands
 
-        self.AddCategory(cat_id = 0)
+        self.AddCategory(cat_id=0)
 
     def AddCategory(self, cat_id):
 
@@ -464,27 +484,36 @@ class ScattPlotsCondsData:
 
     def GetCatScatts(self, cat_id):
 
-        if not self.cats.has_key(cat_id):
+        if cat_id not in self.cats:
             return False
 
         return self.cats[cat_id].keys()
 
-
     def AddScattPlot(self, cat_id, scatt_id):
 
-        if not self.cats.has_key(cat_id):
+        if cat_id not in self.cats:
             return -1
 
-        if self.cats[cat_id].has_key(scatt_id):
+        if scatt_id in self.cats[cat_id]:
             return 0
 
         b_i = self.GetBandsInfo(scatt_id)
 
-        shape = (b_i['b2']['max'] - b_i['b2']['min'] + 1, b_i['b1']['max'] - b_i['b1']['min'] + 1)
+        shape = (
+            b_i['b2']['max'] -
+            b_i['b2']['min'] +
+            1,
+            b_i['b1']['max'] -
+            b_i['b1']['min'] +
+            1)
 
-        np_vals = np.memmap(grass.tempfile(), dtype=self.dtype, mode='w+', shape=shape)
+        np_vals = np.memmap(
+            grass.tempfile(),
+            dtype=self.dtype,
+            mode='w+',
+            shape=shape)
 
-        self.cats[cat_id][scatt_id] = {'np_vals' : np_vals}
+        self.cats[cat_id][scatt_id] = {'np_vals': np_vals}
 
         return 1
 
@@ -494,17 +523,17 @@ class ScattPlotsCondsData:
         b1_info = self.an_data.GetBandInfo(b1)
         b2_info = self.an_data.GetBandInfo(b2)
 
-        bands_info = {'b1' : b1_info,
-                      'b2' : b2_info}
+        bands_info = {'b1': b1_info,
+                      'b2': b2_info}
 
         return bands_info
 
     def DeleScattPlot(self, cat_id, scatt_id):
 
-        if not self.cats.has_key(cat_id):
+        if cat_id not in self.cats:
             return False
 
-        if not self.cats[cat_id].has_key(scatt_id):
+        if scatt_id not in self.cats[cat_id]:
             return False
 
         del self.cats[cat_id][scatt_id]
@@ -512,63 +541,68 @@ class ScattPlotsCondsData:
 
     def GetValuesArr(self, cat_id, scatt_id):
 
-        if not self.cats.has_key(cat_id):
+        if cat_id not in self.cats:
             return None
 
-        if not self.cats[cat_id].has_key(scatt_id):
+        if scatt_id not in self.cats[cat_id]:
             return None
 
         return self.cats[cat_id][scatt_id]['np_vals']
 
     def GetData(self, requested_dt):
-        
+
         cats = {}
         for cat_id, scatt_ids in requested_dt.iteritems():
-            if not cats.has_key(cat_id):
+            if cat_id not in cats:
                 cats[cat_id] = {}
             for scatt_id in scatt_ids:
-                # if key is missing condition is always True (full scatter plor is computed)
-                if self.cats[cat_id].has_key(scatt_id):
-                    cats[cat_id][scatt_id] = {'np_vals' : self.cats[cat_id][scatt_id]['np_vals'],
-                                              'bands_info' : self.GetBandsInfo(scatt_id)}
-                        
+                # if key is missing condition is always True (full scatter plor
+                # is computed)
+                if scatt_id in self.cats[cat_id]:
+                    cats[cat_id][scatt_id] = {
+                        'np_vals': self.cats[cat_id][scatt_id]['np_vals'],
+                        'bands_info': self.GetBandsInfo(scatt_id)}
+
         return cats
 
     def SetData(self, cats):
-        
-        for cat_id, scatt_ids in cats.iteritems():            
+
+        for cat_id, scatt_ids in cats.iteritems():
             for scatt_id in scatt_ids:
-                # if key is missing condition is always True (full scatter plor is computed)
-                if self.cats[cat_id].has_key(scatt_id):
-                    self.cats[cat_id][scatt_id]['np_vals'] = cats[cat_id][scatt_id]['np_vals']
+                # if key is missing condition is always True (full scatter plor
+                # is computed)
+                if scatt_id in self.cats[cat_id]:
+                    self.cats[cat_id][scatt_id]['np_vals'] = cats[
+                        cat_id][scatt_id]['np_vals']
 
-    def GetScatt(self, scatt_id, cats_ids = None):
+    def GetScatt(self, scatt_id, cats_ids=None):
         scatts = {}
         for cat_id in self.cats.iterkeys():
             if cats_ids and cat_id not in cats_ids:
                 continue
-            if not self.cats[cat_id].has_key(scatt_id):
+            if scatt_id not in self.cats[cat_id]:
                 continue
 
-            scatts[cat_id] = {'np_vals' : self.cats[cat_id][scatt_id]['np_vals'],
-                              'bands_info' : self.GetBandsInfo(scatt_id)}
+            scatts[cat_id] = {'np_vals': self.cats[cat_id][scatt_id][
+                'np_vals'], 'bands_info': self.GetBandsInfo(scatt_id)}
         return scatts
 
-                   
+
 class ScattPlotsData(ScattPlotsCondsData):
     """Data structure for computed points (classes) in scatter plots.\
     """
+
     def __init__(self, an_data):
 
         self.cats_rasts = {}
-        self.cats_rasts_conds = {}    
-        self.scatts_ids = []    
+        self.cats_rasts_conds = {}
+        self.scatts_ids = []
 
         ScattPlotsCondsData.__init__(self, an_data)
 
         self.dtype = 'uint32'
 
-        #TODO
+        # TODO
         self.type = 0
 
     def AddCategory(self, cat_id):
@@ -584,7 +618,8 @@ class ScattPlotsData(ScattPlotsCondsData):
             self.cats_rasts[cat_id] = None
         else:
             self.cats_rasts_conds[cat_id] = grass.tempfile()
-            self.cats_rasts[cat_id] = "temp_cat_rast_%d_%d" % (cat_id, os.getpid())
+            self.cats_rasts[cat_id] = "temp_cat_rast_%d_%d" % (
+                cat_id, os.getpid())
             region = self.an_data.GetRegion()
             CreateCatRast(region, self.cats_rasts_conds[cat_id])
 
@@ -593,7 +628,7 @@ class ScattPlotsData(ScattPlotsCondsData):
     def DeleteCategory(self, cat_id):
 
         ScattPlotsCondsData.DeleteCategory(self, cat_id)
-        
+
         grass.try_remove(self.cats_rasts_conds[cat_id])
         del self.cats_rasts_conds[cat_id]
 
@@ -604,26 +639,26 @@ class ScattPlotsData(ScattPlotsCondsData):
         return True
 
     def AddScattPlot(self, scatt_id):
-        
+
         if scatt_id in self.scatts_ids:
             return False
 
         self.scatts_ids.append(scatt_id)
         for cat_id in self.cats.iterkeys():
-                ScattPlotsCondsData.AddScattPlot(self, cat_id, scatt_id)
-                self.cats[cat_id][scatt_id]['ellipse'] = None
+            ScattPlotsCondsData.AddScattPlot(self, cat_id, scatt_id)
+            self.cats[cat_id][scatt_id]['ellipse'] = None
 
         return True
 
     def DeleteScatterPlot(self, scatt_id):
-        
+
         if scatt_id not in self.scatts_ids:
             return False
 
         self.scatts_ids.remove(scatt_id)
 
         for cat_id in self.cats.iterkeys():
-                ScattPlotsCondsData.DeleteScattPlot(self, cat_id, scatt_id)
+            ScattPlotsCondsData.DeleteScattPlot(self, cat_id, scatt_id)
 
         return True
 
@@ -664,36 +699,36 @@ class ScattPlotsData(ScattPlotsCondsData):
 
         x_diff = (x - x_avg)
         y_diff = (y - y_avg)
-        
-        x_diff = (x - x_avg) 
-        y_diff = (y - y_avg) 
+
+        x_diff = (x - x_avg)
+        y_diff = (y - y_avg)
 
         diffs = x_diff * y_diff.T
         cov = np.dot(diffs, weights) / (np.sum(weights) - 1)
 
         diffs = x_diff * x_diff.T
-        var_x = np.dot(diffs, weights) /  (np.sum(weights) - 1)
-        
+        var_x = np.dot(diffs, weights) / (np.sum(weights) - 1)
+
         diffs = y_diff * y_diff.T
-        var_y = np.dot(diffs, weights) /  (np.sum(weights) - 1)
+        var_y = np.dot(diffs, weights) / (np.sum(weights) - 1)
 
-        cov = np.array([[var_x, cov],[cov, var_y]])
+        cov = np.array([[var_x, cov], [cov, var_y]])
 
         def eigsorted(cov):
             vals, vecs = np.linalg.eigh(cov)
             order = vals.argsort()[::-1]
-            return vals[order], vecs[:,order]
+            return vals[order], vecs[:, order]
 
         vals, vecs = eigsorted(cov)
-        theta = np.degrees(np.arctan2(*vecs[:,0][::-1]))
+        theta = np.degrees(np.arctan2(*vecs[:, 0][::-1]))
 
         # Width and height are "full" widths, not radius
         width, height = 2 * nstd * np.sqrt(vals)
 
-        ellipse = {'pos' : pos, 
-                   'width' : width,
-                   'height' : height,
-                   'theta' : theta}
+        ellipse = {'pos': pos,
+                   'width': width,
+                   'height': height,
+                   'theta': theta}
 
         del data
         del flatten_data
@@ -704,9 +739,9 @@ class ScattPlotsData(ScattPlotsCondsData):
 
     def CleanUp(self):
 
-        ScattPlotsCondsData.CleanUp(self)        
+        ScattPlotsCondsData.CleanUp(self)
         for tmp in self.cats_rasts_conds.itervalues():
-            grass.try_remove(tmp) 
+            grass.try_remove(tmp)
         for tmp in self.cats_rasts.itervalues():
             RunCommand("g.remove", flags='f',
                        type='raster', name=tmp,
@@ -716,7 +751,7 @@ class ScattPlotsData(ScattPlotsCondsData):
         self.cats_rasts_conds = {}
 
     def GetCatRast(self, cat_id):
-        if self.cats_rasts.has_key(cat_id):
+        if cat_id in self.cats_rasts:
             return self.cats_rasts[cat_id]
         return None
 
@@ -754,7 +789,7 @@ def RasterizePolygon(pol, height, min_h, width, min_w):
     nx = width
     ny = height
 
-    x, y =  np.meshgrid(np.arange(-0.5 + min_w, nx + 0.5 + min_w, dtype=float), 
+    x, y =  np.meshgrid(np.arange(-0.5 + min_w, nx + 0.5 + min_w, dtype=float),
                         np.arange(-0.5 + min_h, ny + 0.5 + min_h, dtype=float))
     x, y = x.flatten(), y.flatten()
 
@@ -772,40 +807,46 @@ def RasterizePolygon(pol, height, min_h, width, min_w):
     return raster
 """
 
+
 def idScattToidBands(scatt_id, n_bands):
     """Get bands ids from scatter plot id."""
     n_b1 = n_bands - 1
 
-    band_1 = (int) ((2 * n_b1 + 1 - sqrt(((2 * n_b1 + 1) * (2 * n_b1 + 1) - 8 * scatt_id))) / 2)
+    band_1 = (int)(
+        (2 * n_b1 + 1 - sqrt(((2 * n_b1 + 1) * (2 * n_b1 + 1) - 8 * scatt_id))) / 2)
 
     band_2 = scatt_id - (band_1 * (2 * n_b1 + 1) - band_1 * band_1) / 2 + band_1 + 1
 
     return band_1, band_2
 
+
 def idBandsToidScatt(band_1_id, band_2_id, n_bands):
     """Get scatter plot id from band ids."""
-    if band_2_id <  band_1_id:
+    if band_2_id < band_1_id:
         tmp = band_1_id
         band_1_id = band_2_id
         band_2_id = tmp
 
     n_b1 = n_bands - 1
 
-    scatt_id = (band_1_id * (2 * n_b1 + 1) - band_1_id * band_1_id) / 2 + band_2_id - band_1_id - 1
+    scatt_id = (
+        band_1_id * (2 * n_b1 + 1) - band_1_id * band_1_id) / 2 + band_2_id - band_1_id - 1
 
     return scatt_id
 
+
 def GetRegion():
     ret, region, msg = RunCommand("g.region",
-                                  flags = "gp",
-                                  getErrorMsg = True,
-                                  read = True)
+                                  flags="gp",
+                                  getErrorMsg=True,
+                                  read=True)
 
     if ret != 0:
         raise GException("g.region failed:\n%s" % msg)
 
     return _parseRegion(region)
 
+
 def _parseRegion(region_str):
 
     region = {}
@@ -821,18 +862,19 @@ def _parseRegion(region_str):
 
     return region
 
+
 def GetRasterInfo(rast):
     ret, out, msg = RunCommand("r.info",
-                                map = rast,
-                                flags = "rg",
-                                getErrorMsg = True,
-                                read = True)
+                               map=rast,
+                               flags="rg",
+                               getErrorMsg=True,
+                               read=True)
 
-    if  ret != 0:
+    if ret != 0:
         raise GException("r.info failed:\n%s" % msg)
 
     out = out.splitlines()
-    raster_info = {} 
+    raster_info = {}
 
     for b in out:
         if not b.strip():
diff --git a/gui/wxpython/iscatt/plots.py b/gui/wxpython/iscatt/plots.py
index 875fa6d..eb334da 100644
--- a/gui/wxpython/iscatt/plots.py
+++ b/gui/wxpython/iscatt/plots.py
@@ -30,7 +30,7 @@ try:
     matplotlib.use('WXAgg')
     from matplotlib.figure import Figure
     from matplotlib.backends.backend_wxagg import \
-    FigureCanvasWxAgg as FigCanvas
+        FigureCanvasWxAgg as FigCanvas
     from matplotlib.lines import Line2D
     from matplotlib.artist import Artist
     from matplotlib.mlab import dist_point_to_segment
@@ -45,12 +45,14 @@ except ImportError as e:
 import grass.script as grass
 from grass.pydispatch.signal import Signal
 
+
 class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
+
     def __init__(self, parent, scatt_id, scatt_mgr, transpose,
-                 id = wx.ID_ANY):
-        #TODO should not be transpose and scatt_id but x, y
+                 id=wx.ID_ANY):
+        # TODO should not be transpose and scatt_id but x, y
         wx.Panel.__init__(self, parent, id)
-        # bacause of aui (if floatable it can not take cursor from parent)        
+        # bacause of aui (if floatable it can not take cursor from parent)
         ManageBusyCursorMixin.__init__(self, window=self)
 
         self.parent = parent
@@ -75,12 +77,12 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
         self.Layout()
 
         self.base_scale = 1.2
-        self.Bind(wx.EVT_CLOSE,lambda event : self.CleanUp())
+        self.Bind(wx.EVT_CLOSE, lambda event: self.CleanUp())
 
         self.plotClosed = Signal("ScatterPlotWidget.plotClosed")
         self.cursorMove = Signal("ScatterPlotWidget.cursorMove")
 
-        self.contex_menu = ScatterPlotContextMenu(plot = self)
+        self.contex_menu = ScatterPlotContextMenu(plot=self)
 
         self.ciddscroll = None
 
@@ -96,7 +98,7 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
 
     def _createWidgets(self):
 
-        # Create the mpl Figure and FigCanvas objects. 
+        # Create the mpl Figure and FigCanvas objects.
         # 5x4 inches, 100 dots-per-inch
         #
         self.dpi = 100
@@ -104,16 +106,16 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
         self.fig.autolayout = True
 
         self.canvas = FigCanvas(self, -1, self.fig)
-        
-        self.axes = self.fig.add_axes([0.0,0.0,1,1])
+
+        self.axes = self.fig.add_axes([0.0, 0.0, 1, 1])
 
         pol = Polygon(list(zip([0], [0])), animated=True)
         self.axes.add_patch(pol)
-        self.polygon_drawer = PolygonDrawer(self.axes, pol = pol, empty_pol = True)
+        self.polygon_drawer = PolygonDrawer(self.axes, pol=pol, empty_pol=True)
 
         self.zoom_wheel_coords = None
         self.zoom_rect_coords = None
-        self.zoom_rect = Polygon(list(zip([0], [0])), facecolor = 'none')
+        self.zoom_rect = Polygon(list(zip([0], [0])), facecolor='none')
         self.zoom_rect.set_visible(False)
         self.axes.add_patch(self.zoom_rect)
 
@@ -125,7 +127,8 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
     def SetMode(self, mode):
         self._deactivateMode()
         if mode == 'zoom':
-            self.ciddscroll = self.canvas.mpl_connect('scroll_event', self.ZoomWheel)
+            self.ciddscroll = self.canvas.mpl_connect(
+                'scroll_event', self.ZoomWheel)
             self.mode = 'zoom'
         elif mode == 'zoom_extend':
             self.mode = 'zoom_extend'
@@ -138,7 +141,7 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
         self.polygon_drawer.SetSelectionPolygonMode(activate)
 
     def _deactivateMode(self):
-        self.mode  = None
+        self.mode = None
         self.polygon_drawer.SetMode(None)
 
         if self.ciddscroll:
@@ -165,11 +168,12 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
         return self.polygon_drawer.SetEmpty()
 
     def OnRelease(self, event):
-        if not self.mode == "zoom": return
+        if not self.mode == "zoom":
+            return
         self.zoom_rect.set_visible(False)
         self.ZoomRectangle(event)
         self.canvas.draw()
-    
+
     def OnPress(self, event):
         'on button press we will see if the mouse is over us and store some data'
         if not event.inaxes:
@@ -178,8 +182,8 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
             self.ZoomToExtend()
 
         if event.xdata and event.ydata:
-            self.zoom_wheel_coords = { 'x' : event.xdata, 'y' : event.ydata}
-            self.zoom_rect_coords = { 'x' : event.xdata, 'y' : event.ydata}
+            self.zoom_wheel_coords = {'x': event.xdata, 'y': event.ydata}
+            self.zoom_rect_coords = {'x': event.xdata, 'y': event.ydata}
         else:
             self.zoom_wheel_coords = None
             self.zoom_rect_coords = None
@@ -191,15 +195,15 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
             self.canvas.mpl_disconnect(self.cidpress)
         if self.cidrelease:
             self.canvas.mpl_disconnect(self.cidrelease)
-        #self.canvas.mpl_disconnect(self.cidmotion)
+        # self.canvas.mpl_disconnect(self.cidmotion)
 
     def _doLayout(self):
-        
+
         self.main_sizer = wx.BoxSizer(wx.VERTICAL)
         self.main_sizer.Add(self.canvas, 1, wx.LEFT | wx.TOP | wx.GROW)
         self.SetSizer(self.main_sizer)
         self.main_sizer.Fit(self)
-    
+
     def Plot(self, cats_order, scatts, ellipses, styles):
         """Redraws the figure
         """
@@ -215,15 +219,16 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
 
         q = Queue()
         _rendDtMemmapsToFiles(self.rend_dt)
-        p = Process(target=MergeImg, args=(cats_order, scatts, styles, 
+        p = Process(target=MergeImg, args=(cats_order, scatts, styles,
                                            self.rend_dt, q))
         p.start()
         merged_img, self.full_extend, self.rend_dt = q.get()
         p.join()
-        
 
         _rendDtFilesToMemmaps(self.rend_dt)
-        merged_img = np.memmap(filename=merged_img['dt'], shape=merged_img['sh'])
+        merged_img = np.memmap(
+            filename=merged_img['dt'],
+            shape=merged_img['sh'])
 
         #merged_img, self.full_extend = MergeImg(cats_order, scatts, styles, None)
         self.axes.clear()
@@ -233,7 +238,7 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
             merged_img = np.transpose(merged_img, (1, 0, 2))
 
         img = imshow(self.axes, merged_img,
-                     extent= [int(ceil(x)) for x in self.full_extend],
+                     extent=[int(ceil(x)) for x in self.full_extend],
                      origin='lower',
                      interpolation='nearest',
                      aspect="equal")
@@ -244,9 +249,9 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
         for cat_id in cats_order:
             if cat_id == 0:
                 continue
-            if not ellipses.has_key(cat_id):
+            if cat_id not in ellipses:
                 continue
-                
+
             e = ellipses[cat_id]
             if not e:
                 continue
@@ -255,37 +260,39 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
             if self.transpose:
                 e['theta'] = 360 - e['theta'] + 90
                 if e['theta'] >= 360:
-                    e['theta'] = abs(360 - e['theta']) 
-                
+                    e['theta'] = abs(360 - e['theta'])
+
                 e['pos'] = [e['pos'][1], e['pos'][0]]
 
-            ellip = Ellipse(xy=e['pos'], 
-                            width=e['width'], 
-                            height=e['height'], 
-                            angle=e['theta'], 
+            ellip = Ellipse(xy=e['pos'],
+                            width=e['width'],
+                            height=e['height'],
+                            angle=e['theta'],
                             edgecolor="w",
-                            linewidth=1.5, 
+                            linewidth=1.5,
                             facecolor='None')
             self.axes.add_artist(ellip)
             callafter_list.append([self.axes.draw_artist, [ellip]])
 
-            color = map(lambda v : int(v)/255.0, styles[cat_id]['color'].split(":"))
+            color = map(
+                lambda v: int(v) / 255.0,
+                styles[cat_id]['color'].split(":"))
 
-            ellip = Ellipse(xy=e['pos'], 
-                            width=e['width'], 
-                            height=e['height'], 
-                            angle=e['theta'], 
+            ellip = Ellipse(xy=e['pos'],
+                            width=e['width'],
+                            height=e['height'],
+                            angle=e['theta'],
                             edgecolor=color,
-                            linewidth=1, 
+                            linewidth=1,
                             facecolor='None')
 
             self.axes.add_artist(ellip)
             callafter_list.append([self.axes.draw_artist, [ellip]])
-            
-            center = Line2D([e['pos'][0]], [e['pos'][1]], 
+
+            center = Line2D([e['pos'][0]], [e['pos'][1]],
                             marker='x',
                             markeredgecolor='w',
-                            #markerfacecolor=color,
+                            # markerfacecolor=color,
                             markersize=2)
             self.axes.add_artist(center)
             callafter_list.append([self.axes.draw_artist, [center]])
@@ -294,17 +301,17 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
 
         if c:
             self.axes.axis(c)
-        wx.CallAfter(lambda : self.CallAfter(callafter_list))
-    
+        wx.CallAfter(lambda: self.CallAfter(callafter_list))
+
     def CallAfter(self, funcs_list):
-        while funcs_list: 
-            fcn, args = funcs_list.pop(0) 
-            fcn(*args) 
+        while funcs_list:
+            fcn, args = funcs_list.pop(0)
+            fcn(*args)
 
         self.canvas.draw()
 
     def CleanUp(self):
-        self.plotClosed.emit(scatt_id = self.scatt_id)
+        self.plotClosed.emit(scatt_id=self.scatt_id)
         self.Destroy()
 
     def ZoomWheel(self, event):
@@ -315,34 +322,37 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
         # http://stackoverflow.com/questions/11551049/matplotlib-plot-zooming-with-scroll-wheel
         cur_xlim = self.axes.get_xlim()
         cur_ylim = self.axes.get_ylim()
-        
+
         xdata = event.xdata
-        ydata = event.ydata 
+        ydata = event.ydata
         if event.button == 'up':
-            scale_factor = 1/self.base_scale
+            scale_factor = 1 / self.base_scale
         elif event.button == 'down':
             scale_factor = self.base_scale
         else:
             scale_factor = 1
 
         extend = (xdata - (xdata - cur_xlim[0]) * scale_factor,
-                  xdata + (cur_xlim[1] - xdata) * scale_factor, 
+                  xdata + (cur_xlim[1] - xdata) * scale_factor,
                   ydata - (ydata - cur_ylim[0]) * scale_factor,
                   ydata + (cur_ylim[1] - ydata) * scale_factor)
 
         self.axes.axis(extend)
-        
+
         self.canvas.draw()
 
     def ZoomRectangle(self, event):
         # get the current x and y limits
-        if not self.mode == "zoom": return
-        if event.inaxes is None: return
-        if event.button != 1: return
+        if not self.mode == "zoom":
+            return
+        if event.inaxes is None:
+            return
+        if event.button != 1:
+            return
 
         cur_xlim = self.axes.get_xlim()
         cur_ylim = self.axes.get_ylim()
-        
+
         x1, y1 = event.xdata, event.ydata
         x2 = deepcopy(self.zoom_rect_coords['x'])
         y2 = deepcopy(self.zoom_rect_coords['y'])
@@ -351,64 +361,74 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
             return
 
         if x1 > x2:
-            tmp = x1 
+            tmp = x1
             x1 = x2
             x2 = tmp
 
         if y1 > y2:
-            tmp = y1 
+            tmp = y1
             y1 = y2
             y2 = tmp
 
         self.axes.axis((x1, x2, y1, y2))
-        #self.axes.set_xlim(x1, x2)#, auto = True)
-        #self.axes.set_ylim(y1, y2)#, auto = True)
+        # self.axes.set_xlim(x1, x2)#, auto = True)
+        # self.axes.set_ylim(y1, y2)#, auto = True)
         self.canvas.draw()
 
     def Motion(self, event):
         self.PanMotion(event)
         self.ZoomRectMotion(event)
-        
-        if event.inaxes is None: 
+
+        if event.inaxes is None:
             return
-        
-        self.cursorMove.emit(x=event.xdata, y=event.ydata, scatt_id=self.scatt_id)
+
+        self.cursorMove.emit(
+            x=event.xdata,
+            y=event.ydata,
+            scatt_id=self.scatt_id)
 
     def OnCanvasLeave(self, event):
         self.cursorMove.emit(x=None, y=None, scatt_id=self.scatt_id)
 
     def PanMotion(self, event):
         'on mouse movement'
-        if not self.mode == "pan": 
+        if not self.mode == "pan":
             return
-        if event.inaxes is None: 
+        if event.inaxes is None:
             return
-        if event.button != 1: 
+        if event.button != 1:
             return
 
         cur_xlim = self.axes.get_xlim()
         cur_ylim = self.axes.get_ylim()
 
-        x,y = event.xdata, event.ydata
-        
+        x, y = event.xdata, event.ydata
+
         mx = (x - self.zoom_wheel_coords['x']) * 0.6
         my = (y - self.zoom_wheel_coords['y']) * 0.6
 
-        extend = (cur_xlim[0] - mx, cur_xlim[1] - mx, cur_ylim[0] - my, cur_ylim[1] - my)
+        extend = (
+            cur_xlim[0] - mx,
+            cur_xlim[1] - mx,
+            cur_ylim[0] - my,
+            cur_ylim[1] - my)
 
         self.zoom_wheel_coords['x'] = x
         self.zoom_wheel_coords['y'] = y
 
         self.axes.axis(extend)
 
-        #self.canvas.copy_from_bbox(self.axes.bbox)
-        #self.canvas.restore_region(self.background)
+        # self.canvas.copy_from_bbox(self.axes.bbox)
+        # self.canvas.restore_region(self.background)
         self.canvas.draw()
-        
+
     def ZoomRectMotion(self, event):
-        if not self.mode == "zoom": return
-        if event.inaxes is None: return
-        if event.button != 1: return
+        if not self.mode == "zoom":
+            return
+        if event.inaxes is None:
+            return
+        if event.button != 1:
+            return
 
         x1, y1 = event.xdata, event.ydata
         self.zoom_rect.set_visible(True)
@@ -417,115 +437,137 @@ class ScatterPlotWidget(wx.Panel, ManageBusyCursorMixin):
 
         self.zoom_rect.xy = ((x1, y1), (x1, y2), (x2, y2), (x2, y1), (x1, y1))
 
-        #self.axes.draw_artist(self.zoom_rect)
+        # self.axes.draw_artist(self.zoom_rect)
         self.canvas.draw()
 
-def MergeImg(cats_order, scatts, styles, rend_dt, output_queue):
 
-        _rendDtFilesToMemmaps(rend_dt)
+def MergeImg(cats_order, scatts, styles, rend_dt, output_queue):
 
-        init = True
-        merged_img = None
-        merge_tmp = grass.tempfile()
-        for cat_id in cats_order:
-            if not scatts.has_key(cat_id):
+    _rendDtFilesToMemmaps(rend_dt)
+
+    init = True
+    merged_img = None
+    merge_tmp = grass.tempfile()
+    for cat_id in cats_order:
+        if cat_id not in scatts:
+            continue
+        scatt = scatts[cat_id]
+        # print "color map %d" % cat_id
+        # TODO make more general
+        if cat_id != 0 and (styles[cat_id]['opacity'] == 0.0 or
+                            not styles[cat_id]['show']):
+            if cat_id in rend_dt and not rend_dt[cat_id]:
+                del rend_dt[cat_id]
+            continue
+        if init:
+
+            b2_i = scatt['bands_info']['b1']
+            b1_i = scatt['bands_info']['b2']
+
+            full_extend = (
+                b1_i['min'] - 0.5,
+                b1_i['max'] + 0.5,
+                b2_i['min'] - 0.5,
+                b2_i['max'] + 0.5)
+
+        # if it does not need to be updated and was already rendered
+        if not _renderCat(cat_id, rend_dt, scatt, styles):
+            # is empty - has only zeros
+            if rend_dt[cat_id] is None:
                 continue
-            scatt = scatts[cat_id]
-            #print "color map %d" % cat_id
-            #TODO make more general
-            if cat_id != 0 and (styles[cat_id]['opacity'] == 0.0 or \
-               not styles[cat_id]['show']):
-                if rend_dt.has_key(cat_id) and not rend_dt[cat_id]:
-                    del rend_dt[cat_id]
+        else:
+            masked_cat = np.ma.masked_less_equal(scatt['np_vals'], 0)
+            vmax = np.amax(masked_cat)
+            # totally empty -> no need to render
+            if vmax == 0:
+                render_cat_ids[cat_id] = None
                 continue
-            if init:
-
-                b2_i = scatt['bands_info']['b1']
-                b1_i = scatt['bands_info']['b2']
-
-                full_extend = (b1_i['min'] - 0.5, b1_i['max'] + 0.5, b2_i['min'] - 0.5, b2_i['max'] + 0.5) 
-            
-            # if it does not need to be updated and was already rendered 
-            if not _renderCat(cat_id, rend_dt, scatt, styles):
-                # is empty - has only zeros
-                if rend_dt[cat_id] is None:
-                    continue
-            else:
-                masked_cat = np.ma.masked_less_equal(scatt['np_vals'], 0)
-                vmax = np.amax(masked_cat)
-                # totally empty -> no need to render
-                if vmax == 0:
-                    render_cat_ids[cat_id] = None
-                    continue
-
-                cmap = _getColorMap(cat_id, styles)
-                masked_cat = np.uint8(masked_cat * (255.0 / float(vmax)))
-
-                cmap = np.uint8(cmap._lut * 255)
-                sh =masked_cat.shape
-
-                rend_dt[cat_id] = {}
-                if cat_id != 0:
-                    rend_dt[cat_id]['color'] = styles[cat_id]['color']
-                
-                rend_dt[cat_id]['dt'] = np.memmap(grass.tempfile(), dtype='uint8', mode='w+', 
-                                                                    shape=(sh[0], sh[1], 4))
-
-                #colored_cat = np.zeros(dtype='uint8', )
-                ApplyColormap(masked_cat, masked_cat.mask, cmap, rend_dt[cat_id]['dt'])
-
-                #colored_cat = np.uint8(cmap(masked_cat) * 255)
-                del masked_cat
-                del cmap
-            
-            #colored_cat[...,3] = np.choose(masked_cat.mask, (255, 0))
-            if init:
-                merged_img = np.memmap(merge_tmp, dtype='uint8', mode='w+', 
-                                       shape=rend_dt[cat_id]['dt'].shape)
-                merged_img[:] = rend_dt[cat_id]['dt']
-                init = False
-            else:
-                MergeArrays(merged_img, rend_dt[cat_id]['dt'], styles[cat_id]['opacity'])
 
-            """
-                #c_img_a = np.memmap(grass.tempfile(), dtype="uint16", mode='w+', shape = shape) 
+            cmap = _getColorMap(cat_id, styles)
+            masked_cat = np.uint8(masked_cat * (255.0 / float(vmax)))
+
+            cmap = np.uint8(cmap._lut * 255)
+            sh = masked_cat.shape
+
+            rend_dt[cat_id] = {}
+            if cat_id != 0:
+                rend_dt[cat_id]['color'] = styles[cat_id]['color']
+
+            rend_dt[cat_id]['dt'] = np.memmap(
+                grass.tempfile(),
+                dtype='uint8',
+                mode='w+',
+                shape=(
+                    sh[0],
+                    sh[1],
+                    4))
+
+            #colored_cat = np.zeros(dtype='uint8', )
+            ApplyColormap(
+                masked_cat,
+                masked_cat.mask,
+                cmap,
+                rend_dt[cat_id]['dt'])
+
+            #colored_cat = np.uint8(cmap(masked_cat) * 255)
+            del masked_cat
+            del cmap
+
+        #colored_cat[...,3] = np.choose(masked_cat.mask, (255, 0))
+        if init:
+            merged_img = np.memmap(merge_tmp, dtype='uint8', mode='w+',
+                                   shape=rend_dt[cat_id]['dt'].shape)
+            merged_img[:] = rend_dt[cat_id]['dt']
+            init = False
+        else:
+            MergeArrays(
+                merged_img,
+                rend_dt[cat_id]['dt'],
+                styles[cat_id]['opacity'])
+
+        """
+                #c_img_a = np.memmap(grass.tempfile(), dtype="uint16", mode='w+', shape = shape)
                 c_img_a = colored_cat.astype('uint16')[:,:,3] * styles[cat_id]['opacity']
 
                 #TODO apply strides and there will be no need for loop
                 #b = as_strided(a, strides=(0, a.strides[3], a.strides[3], a.strides[3]), shape=(3, a.shape[0], a.shape[1]))
-                
+
                 for i in range(3):
                     merged_img[:,:,i] = (merged_img[:,:,i] * (255 - c_img_a) + colored_cat[:,:,i] * c_img_a) / 255;
                 merged_img[:,:,3] = (merged_img[:,:,3] * (255 - c_img_a) + 255 * c_img_a) / 255;
-                
+
                 del c_img_a
             """
 
-        _rendDtMemmapsToFiles(rend_dt)
+    _rendDtMemmapsToFiles(rend_dt)
 
-        merged_img = {'dt' : merged_img.filename, 'sh' : merged_img.shape} 
-        output_queue.put((merged_img, full_extend, rend_dt))
+    merged_img = {'dt': merged_img.filename, 'sh': merged_img.shape}
+    output_queue.put((merged_img, full_extend, rend_dt))
 
 #_rendDtMemmapsToFiles and _rendDtFilesToMemmaps are workarounds for older numpy versions,
-# where memmap objects are not pickable  
+# where memmap objects are not pickable
+
+
 def _rendDtMemmapsToFiles(rend_dt):
 
     for k, v in rend_dt.iteritems():
-        if v.has_key('dt'):
+        if 'dt' in v:
             rend_dt[k]['sh'] = v['dt'].shape
             rend_dt[k]['dt'] = v['dt'].filename
 
+
 def _rendDtFilesToMemmaps(rend_dt):
 
     for k, v in rend_dt.iteritems():
-        if v.has_key('dt'):
+        if 'dt' in v:
             rend_dt[k]['dt'] = np.memmap(filename=v['dt'], shape=v['sh'])
             del rend_dt[k]['sh']
 
+
 def _renderCat(cat_id, rend_dt, scatt, styles):
     return True
 
-    if not rend_dt.has_key(cat_id):
+    if cat_id not in rend_dt:
         return True
     if not rend_dt[cat_id]:
         return False
@@ -533,64 +575,70 @@ def _renderCat(cat_id, rend_dt, scatt, styles):
         return True
     if cat_id != 0 and \
        rend_dt[cat_id]['color'] != styles[cat_id]['color']:
-       return True
-    
+        return True
+
     return False
 
+
 def _getColorMap(cat_id, styles):
     cmap = matplotlib.cm.jet
     if cat_id == 0:
-        cmap.set_bad('w',1.)
+        cmap.set_bad('w', 1.)
         cmap._init()
         cmap._lut[len(cmap._lut) - 1, -1] = 0
     else:
         colors = styles[cat_id]['color'].split(":")
 
-        cmap.set_bad('w',1.)
+        cmap.set_bad('w', 1.)
         cmap._init()
         cmap._lut[len(cmap._lut) - 1, -1] = 0
-        cmap._lut[:, 0] = int(colors[0])/255.0
-        cmap._lut[:, 1] = int(colors[1])/255.0
-        cmap._lut[:, 2] = int(colors[2])/255.0
+        cmap._lut[:, 0] = int(colors[0]) / 255.0
+        cmap._lut[:, 1] = int(colors[1]) / 255.0
+        cmap._lut[:, 2] = int(colors[2]) / 255.0
 
     return cmap
 
+
 class ScatterPlotContextMenu:
+
     def __init__(self, plot):
 
         self.plot = plot
         self.canvas = plot.canvas
         self.cidpress = self.canvas.mpl_connect(
             'button_press_event', self.ContexMenu)
-   
+
     def ContexMenu(self, event):
         if not event.inaxes:
             return
 
         if event.button == 3:
-            menu = wx.Menu()       
-            menu_items = [["zoom_to_extend", _("Zoom to scatter plot extend"), 
-                            lambda event : self.plot.ZoomToExtend()]]
+            menu = wx.Menu()
+            menu_items = [["zoom_to_extend", _("Zoom to scatter plot extend"),
+                           lambda event: self.plot.ZoomToExtend()]]
 
             for item in menu_items:
                 item_id = wx.ID_ANY
-                menu.Append(item_id, text = item[1])
-                menu.Bind(wx.EVT_MENU, item[2], id = item_id)
+                menu.Append(item_id, text=item[1])
+                menu.Bind(wx.EVT_MENU, item[2], id=item_id)
+
+            wx.CallAfter(self.ShowMenu, menu)
 
-            wx.CallAfter(self.ShowMenu, menu) 
-   
     def ShowMenu(self, menu):
         self.plot.PopupMenu(menu)
         menu.Destroy()
-        self.plot.ReleaseMouse() 
+        self.plot.ReleaseMouse()
+
 
 class PolygonDrawer:
     """
     An polygon editor.
     """
+
     def __init__(self, ax, pol, empty_pol):
         if pol.figure is None:
-            raise RuntimeError('You must first add the polygon to a figure or canvas before defining the interactor')
+            raise RuntimeError(
+                'You must first add the polygon to a figure or canvas before defining the interactor')
         self.ax = ax
         self.canvas = pol.figure.canvas
 
@@ -603,12 +651,17 @@ class PolygonDrawer:
 
         style = self._getPolygonStyle()
 
-        self.line = Line2D(x, y, marker='o', markerfacecolor='r', animated=True)
+        self.line = Line2D(
+            x,
+            y,
+            marker='o',
+            markerfacecolor='r',
+            animated=True)
         self.ax.add_line(self.line)
-        #self._update_line(pol)
+        # self._update_line(pol)
 
         cid = self.pol.add_callback(self.poly_changed)
-        self.moving_ver_idx = None # the active vert
+        self.moving_ver_idx = None  # the active vert
 
         self.mode = None
 
@@ -617,38 +670,42 @@ class PolygonDrawer:
 
         #self.canvas.mpl_connect('draw_event', self.DrawCallback)
         self.canvas.mpl_connect('button_press_event', self.OnButtonPressed)
-        self.canvas.mpl_connect('button_release_event', self.ButtonReleaseCallback)
-        self.canvas.mpl_connect('motion_notify_event', self.motion_notify_callback)
-    
+        self.canvas.mpl_connect(
+            'button_release_event',
+            self.ButtonReleaseCallback)
+        self.canvas.mpl_connect(
+            'motion_notify_event',
+            self.motion_notify_callback)
+
         self.it = 0
 
     def _getPolygonStyle(self):
         style = {}
-        style['sel_pol'] = UserSettings.Get(group='scatt', 
-                                            key='selection', 
+        style['sel_pol'] = UserSettings.Get(group='scatt',
+                                            key='selection',
                                             subkey='sel_pol')
-        style['sel_pol_vertex'] = UserSettings.Get(group='scatt', 
-                                                   key='selection', 
+        style['sel_pol_vertex'] = UserSettings.Get(group='scatt',
+                                                   key='selection',
                                                    subkey='sel_pol_vertex')
 
-        style['sel_pol'] = [i / 255.0 for i in style['sel_pol']] 
-        style['sel_pol_vertex'] = [i / 255.0 for i in style['sel_pol_vertex']] 
+        style['sel_pol'] = [i / 255.0 for i in style['sel_pol']]
+        style['sel_pol_vertex'] = [i / 255.0 for i in style['sel_pol_vertex']]
 
         return style
 
     def _getSnapTresh(self):
-        return UserSettings.Get(group='scatt', 
-                                key='selection', 
+        return UserSettings.Get(group='scatt',
+                                key='selection',
                                 subkey='snap_tresh')
 
     def SetMode(self, mode):
         self.mode = mode
 
     def SetSelectionPolygonMode(self, activate):
-        
+
         self.Show(activate)
         if not activate and self.mode:
-            self.SetMode(None) 
+            self.SetMode(None)
 
     def Show(self, show):
         if show:
@@ -670,7 +727,7 @@ class PolygonDrawer:
     def _setEmptyPol(self, empty_pol):
         self.empty_pol = empty_pol
         if self.empty_pol:
-            #TODO
+            # TODO
             self.pol.xy = np.array([[0, 0]])
         self._show(not empty_pol)
 
@@ -692,14 +749,14 @@ class PolygonDrawer:
 
     def DrawCallback(self, event):
 
-        style=self._getPolygonStyle()
+        style = self._getPolygonStyle()
         self.pol.set_facecolor(style['sel_pol'])
         self.line.set_markerfacecolor(style['sel_pol_vertex'])
 
         self.background = self.canvas.copy_from_bbox(self.ax.bbox)
         self.ax.draw_artist(self.pol)
         self.ax.draw_artist(self.line)
-    
+
     def poly_changed(self, pol):
         'this method is called whenever the polygon object is called'
         # only copy the artist props to the line (except visibility)
@@ -714,11 +771,11 @@ class PolygonDrawer:
         xy = np.asarray(self.pol.xy)
         xyt = self.pol.get_transform().transform(xy)
         xt, yt = xyt[:, 0], xyt[:, 1]
-        d = np.sqrt((xt-event.x)**2 + (yt-event.y)**2)
+        d = np.sqrt((xt - event.x)**2 + (yt - event.y)**2)
         indseq = np.nonzero(np.equal(d, np.amin(d)))[0]
         ind = indseq[0]
 
-        if d[ind]>=self._getSnapTresh():
+        if d[ind] >= self._getSnapTresh():
             ind = None
 
         return ind
@@ -727,7 +784,7 @@ class PolygonDrawer:
         if not event.inaxes:
             return
 
-        if event.button in [2, 3]: 
+        if event.button in [2, 3]:
             return
 
         if self.mode == "delete_vertex":
@@ -742,19 +799,22 @@ class PolygonDrawer:
 
     def ButtonReleaseCallback(self, event):
         'whenever a mouse button is released'
-        if not self.showverts: return
-        if event.button != 1: return
+        if not self.showverts:
+            return
+        if event.button != 1:
+            return
         self.moving_ver_idx = None
 
     def ShowVertices(self, show):
         self.showverts = show
         self.line.set_visible(self.showverts)
-        if not self.showverts: self.moving_ver_idx = None
+        if not self.showverts:
+            self.moving_ver_idx = None
 
     def _deleteVertex(self, event):
         ind = self.get_ind_under_point(event)
 
-        if ind  is None or self.empty_pol:
+        if ind is None or self.empty_pol:
             return
 
         if len(self.pol.xy) <= 2:
@@ -763,12 +823,12 @@ class PolygonDrawer:
             return
 
         coords = []
-        for i,tup in enumerate(self.pol.xy): 
+        for i, tup in enumerate(self.pol.xy):
             if i == ind:
                 continue
             elif i == 0 and ind == len(self.pol.xy) - 1:
                 continue
-            elif i == len(self.pol.xy) - 1 and ind == 0: 
+            elif i == len(self.pol.xy) - 1 and ind == 0:
                 continue
 
             coords.append(tup)
@@ -783,13 +843,13 @@ class PolygonDrawer:
             return
 
         xys = self.pol.get_transform().transform(self.pol.xy)
-        p = event.x, event.y # display coords
-        for i in range(len(xys)-1):
+        p = event.x, event.y  # display coords
+        for i in range(len(xys) - 1):
             s0 = xys[i]
-            s1 = xys[i+1]
+            s1 = xys[i + 1]
             d = dist_point_to_segment(p, s0, s1)
 
-            if d<=self._getSnapTresh():
+            if d <= self._getSnapTresh():
                 self.pol.xy = np.array(
                     list(self.pol.xy[:i + 1]) +
                     [(event.xdata, event.ydata)] +
@@ -808,32 +868,38 @@ class PolygonDrawer:
             self.empty_pol = False
         else:
             self.pol.xy = np.array(
-                        [(event.xdata, event.ydata)] +
-                        list(self.pol.xy[1:]) +
-                        [(event.xdata, event.ydata)])
+                [(event.xdata, event.ydata)] +
+                list(self.pol.xy[1:]) +
+                [(event.xdata, event.ydata)])
 
         self.line.set_data(zip(*self.pol.xy))
-        
+
         self.Redraw()
 
     def motion_notify_callback(self, event):
         'on mouse movement'
-        if not self.mode == "move_vertex": return
-        if not self.showverts: return
-        if self.empty_pol: return
-        if self.moving_ver_idx is None: return
-        if event.inaxes is None: return
-        if event.button != 1: return
+        if not self.mode == "move_vertex":
+            return
+        if not self.showverts:
+            return
+        if self.empty_pol:
+            return
+        if self.moving_ver_idx is None:
+            return
+        if event.inaxes is None:
+            return
+        if event.button != 1:
+            return
 
         self.it += 1
 
-        x,y = event.xdata, event.ydata
+        x, y = event.xdata, event.ydata
 
-        self.pol.xy[self.moving_ver_idx] = x,y
+        self.pol.xy[self.moving_ver_idx] = x, y
         if self.moving_ver_idx == 0:
-            self.pol.xy[len(self.pol.xy) - 1] = x,y
+            self.pol.xy[len(self.pol.xy) - 1] = x, y
         elif self.moving_ver_idx == len(self.pol.xy) - 1:
-            self.pol.xy[0] = x,y
+            self.pol.xy[0] = x, y
 
         self.line.set_data(zip(*self.pol.xy))
 
@@ -841,6 +907,7 @@ class PolygonDrawer:
 
         self.Redraw()
 
+
 class ModestImage(mi.AxesImage):
     """
     Computationally modest image class.
@@ -860,6 +927,7 @@ class ModestImage(mi.AxesImage):
 
     Author: Chris Beaumont <beaumont at hawaii.edu>
     """
+
     def __init__(self, minx=0.0, miny=0.0, *args, **kwargs):
         if 'extent' in kwargs and kwargs['extent'] is not None:
             raise NotImplementedError("ModestImage does not support extents")
@@ -886,10 +954,10 @@ class ModestImage(mi.AxesImage):
             raise TypeError("Image data can not convert to float")
 
         if (self._A.ndim not in (2, 3) or
-            (self._A.ndim == 3 and self._A.shape[-1] not in (3, 4))):
+                (self._A.ndim == 3 and self._A.shape[-1] not in (3, 4))):
             raise TypeError("Invalid dimensions for image data")
 
-        self._imcache =None
+        self._imcache = None
         self._rgbacache = None
         self._oldxslice = None
         self._oldyslice = None
@@ -919,11 +987,11 @@ class ModestImage(mi.AxesImage):
 
         # have we already calculated what we need?
         if sx == self._sx and sy == self._sy and \
-            x0 == self._bounds[0] and x1 == self._bounds[1] and \
-            y0 == self._bounds[2] and y1 == self._bounds[3]:
+                x0 == self._bounds[0] and x1 == self._bounds[1] and \
+                y0 == self._bounds[2] and y1 == self._bounds[3]:
             return
 
-        self._A = self._full_res[y0 - self.miny:y1 - self.miny:sy, 
+        self._A = self._full_res[y0 - self.miny:y1 - self.miny:sy,
                                  x0 - self.minx:x1 - self.minx:sx]
 
         x1 = x0 + self._A.shape[1] * sx
@@ -939,6 +1007,7 @@ class ModestImage(mi.AxesImage):
         self._scale_to_res()
         super(ModestImage, self).draw(renderer, *args, **kwargs)
 
+
 def imshow(axes, X, cmap=None, norm=None, aspect=None,
            interpolation=None, alpha=None, vmin=None, vmax=None,
            origin=None, extent=None, shape=None, filternorm=1,
@@ -958,15 +1027,25 @@ def imshow(axes, X, cmap=None, norm=None, aspect=None,
     axes.set_aspect(aspect)
 
     if extent:
-        minx=extent[0]
-        miny=extent[2]
+        minx = extent[0]
+        miny = extent[2]
     else:
-        minx=0.0
-        miny=0.0
-
-    im = ModestImage(minx, miny, axes, cmap, norm, interpolation, origin, extent,
-                     filternorm=filternorm,
-                     filterrad=filterrad, resample=resample, **kwargs)
+        minx = 0.0
+        miny = 0.0
+
+    im = ModestImage(
+        minx,
+        miny,
+        axes,
+        cmap,
+        norm,
+        interpolation,
+        origin,
+        extent,
+        filternorm=filternorm,
+        filterrad=filterrad,
+        resample=resample,
+        **kwargs)
 
     im.set_data(X)
     im.set_alpha(alpha)
@@ -976,7 +1055,7 @@ def imshow(axes, X, cmap=None, norm=None, aspect=None,
         # image does not already have clipping set, clip to axes patch
         im.set_clip_path(axes.patch)
 
-    #if norm is None and shape is None:
+    # if norm is None and shape is None:
     #    im.set_clim(vmin, vmax)
     if vmin is not None or vmax is not None:
         im.set_clim(vmin, vmax)
diff --git a/gui/wxpython/iscatt/toolbars.py b/gui/wxpython/iscatt/toolbars.py
index 0df2c3e..0827b01 100644
--- a/gui/wxpython/iscatt/toolbars.py
+++ b/gui/wxpython/iscatt/toolbars.py
@@ -22,16 +22,18 @@ from core.gcmd import GException, GError, RunCommand
 from iscatt.iscatt_core import idBandsToidScatt
 from iscatt.dialogs import SettingsDialog
 
+
 class MainToolbar(BaseToolbar):
     """Main toolbar
     """
+
     def __init__(self, parent, scatt_mgr, opt_tools=None):
         BaseToolbar.__init__(self, parent)
         self.scatt_mgr = scatt_mgr
         self.opt_tools = opt_tools
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
         self.scatt_mgr.modeSet.connect(self.ModeSet)
@@ -39,81 +41,90 @@ class MainToolbar(BaseToolbar):
     def _toolbarData(self):
 
         icons = {
-                'selectGroup' : MetaIcon(img = 'layer-group-add',
-                                 label = _('Select imagery group')),
-                'settings'   : BaseIcons['settings'].SetLabel( _('Settings')),
-                'help'       : MetaIcon(img = 'help',
-                                         label = _('Show manual')),
-                'add_scatt_pl'  : MetaIcon(img = 'layer-raster-analyze',
-                                            label = _('Add scatter plot')),
-                'selCatPol'  : MetaIcon(img = 'polygon',
-                                      label = _('Select area with polygon')),
-                'pan'        : MetaIcon(img = 'pan',
-                                         label = _('Pan mode for scatter plots')),
-                'zoomIn'     : MetaIcon(img = 'zoom-in',
-                                        label = _('Zoom mode for scatter plots (left mouse button, wheel)')),
-                'zoomExtent' : MetaIcon(img = 'zoom-extent',
-                                       label = _('Zoom to scatter plot data extend mode (click on scatter plot for zooming to extend)')),
-                'cats_mgr' : MetaIcon(img = 'table-manager',
-                                          label = _('Show/hide class manager'))
-                }
-            
+            'selectGroup': MetaIcon(
+                img='layer-group-add',
+                label=_('Select imagery group')),
+            'settings': BaseIcons['settings'].SetLabel(
+                _('Settings')),
+            'help': MetaIcon(
+                img='help',
+                label=_('Show manual')),
+            'add_scatt_pl': MetaIcon(
+                img='layer-raster-analyze',
+                label=_('Add scatter plot')),
+            'selCatPol': MetaIcon(
+                img='polygon',
+                label=_('Select area with polygon')),
+            'pan': MetaIcon(
+                img='pan',
+                label=_('Pan mode for scatter plots')),
+            'zoomIn': MetaIcon(
+                img='zoom-in',
+                label=_('Zoom mode for scatter plots (left mouse button, wheel)')),
+            'zoomExtent': MetaIcon(
+                img='zoom-extent',
+                label=_('Zoom to scatter plot data extend mode (click on scatter plot for zooming to extend)')),
+            'cats_mgr': MetaIcon(
+                img='table-manager',
+                label=_('Show/hide class manager'))}
+
         tools = [
-                    ('add_scatt', icons["add_scatt_pl"],
-                    lambda event : self.scatt_mgr.AddScattPlot()),
-                    (None, ),
-                    ("cats_mgr", icons['cats_mgr'],
-                    lambda event: self.parent.ShowCategoryPanel(event.Checked()), wx.ITEM_CHECK),
-                    (None, ),
-                    ("pan", icons["pan"],
-                    lambda event: self.SetPloltsMode(event, 'pan'),
-                    wx.ITEM_CHECK),
-                    ("zoom", icons["zoomIn"],
-                    lambda event: self.SetPloltsMode(event, 'zoom'),
-                    wx.ITEM_CHECK),
-                    ("zoom_extend", icons["zoomExtent"],
-                    lambda event: self.SetPloltsMode(event, 'zoom_extend'),
-                    wx.ITEM_CHECK),
-                    (None, ),
-                    ('sel_pol_mode', icons['selCatPol'],
-                    self.ActivateSelectionPolygonMode,
-                    wx.ITEM_CHECK),
-                    (None, ),
-                    ('settings', icons["settings"],
-                    self.OnSettings),
-                    ('help', icons["help"],
-                     self.OnHelp)                    
-                ]
+            ('add_scatt', icons["add_scatt_pl"],
+             lambda event: self.scatt_mgr.AddScattPlot()),
+            (None,),
+            ("cats_mgr", icons['cats_mgr'],
+             lambda event: self.parent.ShowCategoryPanel(event.Checked()),
+             wx.ITEM_CHECK),
+            (None,),
+            ("pan", icons["pan"],
+             lambda event: self.SetPloltsMode(event, 'pan'),
+             wx.ITEM_CHECK),
+            ("zoom", icons["zoomIn"],
+             lambda event: self.SetPloltsMode(event, 'zoom'),
+             wx.ITEM_CHECK),
+            ("zoom_extend", icons["zoomExtent"],
+             lambda event: self.SetPloltsMode(event, 'zoom_extend'),
+             wx.ITEM_CHECK),
+            (None,),
+            ('sel_pol_mode', icons['selCatPol'],
+             self.ActivateSelectionPolygonMode, wx.ITEM_CHECK),
+            (None,),
+            ('settings', icons["settings"],
+             self.OnSettings),
+            ('help', icons["help"],
+             self.OnHelp)]
 
         if self.opt_tools and "add_group" in self.opt_tools:
             tools.insert(0, ("selectGroup", icons['selectGroup'],
-                             lambda event : self.scatt_mgr.SetData()))
+                             lambda event: self.scatt_mgr.SetData()))
 
         return self._getToolbarData(tools)
 
-    def GetToolId(self, toolName): #TODO can be useful in base
-        return vars(self)[toolName]            
+    def GetToolId(self, toolName):  # TODO can be useful in base
+        return vars(self)[toolName]
 
     def SetPloltsMode(self, event, tool_name):
         self.scatt_mgr.modeSet.disconnect(self.ModeSet)
-        if event.Checked()  == True:
-            for i_tool_data in  self._data:
+        if event.Checked() == True:
+            for i_tool_data in self._data:
                 i_tool_name = i_tool_data[0]
-                if not i_tool_name or i_tool_name in ["cats_mgr", "sel_pol_mode"]:
+                if not i_tool_name or i_tool_name in [
+                        "cats_mgr", "sel_pol_mode"]:
                     continue
                 if i_tool_name == tool_name:
                     continue
                 i_tool_id = vars(self)[i_tool_name]
                 self.ToggleTool(i_tool_id, False)
 
-            self.scatt_mgr.SetPlotsMode(mode = tool_name)
+            self.scatt_mgr.SetPlotsMode(mode=tool_name)
         else:
-            self.scatt_mgr.SetPlotsMode(mode = None)
+            self.scatt_mgr.SetPlotsMode(mode=None)
         self.scatt_mgr.modeSet.connect(self.ModeSet)
 
     def ActivateSelectionPolygonMode(self, event):
 
-        activated = self.scatt_mgr.ActivateSelectionPolygonMode(event.Checked())
+        activated = self.scatt_mgr.ActivateSelectionPolygonMode(
+            event.Checked())
         self.parent.ShowPlotEditingToolbar(activated)
 
         i_tool_id = vars(self)['sel_pol_mode']
@@ -123,33 +134,35 @@ class MainToolbar(BaseToolbar):
         self.UnsetMode()
 
     def UnsetMode(self):
-        for i_tool_data in  self._data:
-                i_tool_name = i_tool_data[0]
-                if not i_tool_name or i_tool_name in ["cats_mgr", "sel_pol_mode"]:
-                    continue
-                i_tool_id = vars(self)[i_tool_name]
-                self.ToggleTool(i_tool_id, False)
+        for i_tool_data in self._data:
+            i_tool_name = i_tool_data[0]
+            if not i_tool_name or i_tool_name in ["cats_mgr", "sel_pol_mode"]:
+                continue
+            i_tool_id = vars(self)[i_tool_name]
+            self.ToggleTool(i_tool_id, False)
 
     def OnSettings(self, event):
-        dlg = SettingsDialog(parent=self, id=wx.ID_ANY, 
-                             title=_('Settings'), scatt_mgr = self.scatt_mgr)
-        
+        dlg = SettingsDialog(parent=self, id=wx.ID_ANY,
+                             title=_('Settings'), scatt_mgr=self.scatt_mgr)
+
         dlg.ShowModal()
         dlg.Destroy()
 
-    def OnHelp(self, event) :
-            RunCommand('g.manual',
-                       entry = 'wxGUI.iscatt')
+    def OnHelp(self, event):
+        RunCommand('g.manual',
+                   entry='wxGUI.iscatt')
+
 
 class EditingToolbar(BaseToolbar):
     """Main toolbar
     """
+
     def __init__(self, parent, scatt_mgr):
         BaseToolbar.__init__(self, parent)
         self.scatt_mgr = scatt_mgr
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
         self.scatt_mgr.modeSet.connect(self.ModeSet)
@@ -158,55 +171,54 @@ class EditingToolbar(BaseToolbar):
         """Toolbar data
         """
         self.icons = {
-            'sel_add'         : MetaIcon(img = 'layer-add',
-                                         label = _('Include selected area to class'),
-                                         desc = _('Include selected area to class')),
-            'sel_remove'      : MetaIcon(img = 'layer-remove',
-                                         label = _('Exclude selected area from class'),
-                                         desc = _('Exclude selected area from class')),
-            'addVertex'       : MetaIcon(img = 'vertex-create',
-                                         label = _('Add new vertex'),
-                                         desc = _('Add new vertex to polygon boundary scatter plot')),
-            'editLine'        : MetaIcon(img = 'polygon-create',
-                                         label = _('Create selection polygon'),
-                                         desc = _('Add new vertex between last and first points of the boundary')),
-            'moveVertex'      : MetaIcon(img = 'vertex-move',
-                                         label = _('Move vertex'),
-                                         desc = _('Move boundary vertex')),
-            'removeVertex'    : MetaIcon(img = 'vertex-delete',
-                                         label = _('Remove vertex'),
-                                         desc = _('Remove boundary vertex')),
-            'delete'        : MetaIcon(img = 'polygon-delete',
-                                       label = _("Remove polygon (click on scatter plot for removing it's polygon)")),
-            }
-
-        return self._getToolbarData((
-                                    ("sel_add", self.icons["sel_add"],
-                                     lambda event: self.scatt_mgr.ProcessSelectionPolygons('add')),
-                                     ("sel_remove", self.icons['sel_remove'],
-                                     lambda event: self.scatt_mgr.ProcessSelectionPolygons('remove')),
-                                     (None, ),
-                                     ("add_vertex", self.icons["editLine"],
-                                     lambda event: self.SetMode(event, 'add_vertex'),
-                                     wx.ITEM_CHECK),
-                                     ("add_boundary_vertex", self.icons['addVertex'],
-                                     lambda event: self.SetMode(event, 'add_boundary_vertex'),
-                                     wx.ITEM_CHECK),
-                                     ("move_vertex", self.icons["moveVertex"],
-                                     lambda event: self.SetMode(event, 'move_vertex'),
-                                     wx.ITEM_CHECK),
-                                     ('delete_vertex', self.icons['removeVertex'],
-                                     lambda event: self.SetMode(event, 'delete_vertex'),
-                                     wx.ITEM_CHECK),
-                                     ('remove_polygon', self.icons['delete'],
-                                     lambda event: self.SetMode(event, 'remove_polygon'),
-                                     wx.ITEM_CHECK)
-                                    ))
+            'sel_add': MetaIcon(img='layer-add',
+                                label=_('Include selected area to class'),
+                                desc=_('Include selected area to class')),
+            'sel_remove': MetaIcon(img='layer-remove',
+                                   label=_('Exclude selected area from class'),
+                                   desc=_('Exclude selected area from class')),
+            'addVertex': MetaIcon(img='vertex-create',
+                                  label=_('Add new vertex'),
+                                  desc=_('Add new vertex to polygon boundary scatter plot')),
+            'editLine': MetaIcon(img='polygon-create',
+                                 label=_('Create selection polygon'),
+                                 desc=_('Add new vertex between last and first points of the boundary')),
+            'moveVertex': MetaIcon(img='vertex-move',
+                                   label=_('Move vertex'),
+                                   desc=_('Move boundary vertex')),
+            'removeVertex': MetaIcon(img='vertex-delete',
+                                     label=_('Remove vertex'),
+                                     desc=_('Remove boundary vertex')),
+            'delete': MetaIcon(img='polygon-delete',
+                               label=_("Remove polygon (click on scatter plot for removing it's polygon)")),
+        }
+
+        return self._getToolbarData(
+            (("sel_add", self.icons["sel_add"],
+              lambda event: self.scatt_mgr.ProcessSelectionPolygons('add')),
+             ("sel_remove", self.icons['sel_remove'],
+              lambda event: self.scatt_mgr.ProcessSelectionPolygons('remove')),
+             (None,),
+             ("add_vertex", self.icons["editLine"],
+              lambda event: self.SetMode(event, 'add_vertex'),
+              wx.ITEM_CHECK),
+             ("add_boundary_vertex", self.icons['addVertex'],
+              lambda event: self.SetMode(event, 'add_boundary_vertex'),
+              wx.ITEM_CHECK),
+             ("move_vertex", self.icons["moveVertex"],
+              lambda event: self.SetMode(event, 'move_vertex'),
+              wx.ITEM_CHECK),
+             ('delete_vertex', self.icons['removeVertex'],
+              lambda event: self.SetMode(event, 'delete_vertex'),
+              wx.ITEM_CHECK),
+             ('remove_polygon', self.icons['delete'],
+              lambda event: self.SetMode(event, 'remove_polygon'),
+              wx.ITEM_CHECK)))
 
     def SetMode(self, event, tool_name):
         self.scatt_mgr.modeSet.disconnect(self.ModeSet)
         if event.Checked() == True:
-            for i_tool_data in  self._data:
+            for i_tool_data in self._data:
                 i_tool_name = i_tool_data[0]
                 if not i_tool_name:
                     continue
@@ -225,19 +237,21 @@ class EditingToolbar(BaseToolbar):
             self.UnsetMode()
 
     def UnsetMode(self):
-        for i_tool_data in  self._data:
-                i_tool_name = i_tool_data[0]
-                if not i_tool_name:
-                    continue
-                i_tool_id = vars(self)[i_tool_name]
-                self.ToggleTool(i_tool_id, False)
+        for i_tool_data in self._data:
+            i_tool_name = i_tool_data[0]
+            if not i_tool_name:
+                continue
+            i_tool_id = vars(self)[i_tool_name]
+            self.ToggleTool(i_tool_id, False)
 
     def GetToolId(self, toolName):
         return vars(self)[toolName]
 
+
 class CategoryToolbar(BaseToolbar):
     """Main toolbar
     """
+
     def __init__(self, parent, scatt_mgr, cats_list):
         BaseToolbar.__init__(self, parent)
         self.scatt_mgr = scatt_mgr
@@ -245,7 +259,7 @@ class CategoryToolbar(BaseToolbar):
         self.cats_list = cats_list
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
@@ -253,15 +267,14 @@ class CategoryToolbar(BaseToolbar):
         """Toolbar data
         """
         self.icons = {
-            'add_class'     : MetaIcon(img = 'layer-add',
-                                       label = _('Add class')),
-            'remove_class'  : MetaIcon(img = 'layer-remove',
-                                       label = _('Remove selected class'))
-            }
-
-        return self._getToolbarData((
-                                    ("add_class", self.icons["add_class"],
-                                     lambda event: self.cats_mgr.AddCategory()),
-                                     ("remove_class", self.icons['remove_class'],
-                                     lambda event: self.cats_list.DeleteCategory()),
-                                    ))
+            'add_class': MetaIcon(img='layer-add',
+                                  label=_('Add class')),
+            'remove_class': MetaIcon(img='layer-remove',
+                                     label=_('Remove selected class'))
+        }
+
+        return self._getToolbarData(
+            (("add_class", self.icons["add_class"],
+              lambda event: self.cats_mgr.AddCategory()),
+             ("remove_class", self.icons['remove_class'],
+              lambda event: self.cats_list.DeleteCategory()),))
diff --git a/gui/wxpython/lmgr/__init__.py b/gui/wxpython/lmgr/__init__.py
index b3cb597..efbe2c0 100644
--- a/gui/wxpython/lmgr/__init__.py
+++ b/gui/wxpython/lmgr/__init__.py
@@ -5,4 +5,5 @@ all = [
     'pyshell',
     'frame',
     'giface',
-    ]
+    'datacatalog'
+]
diff --git a/gui/wxpython/lmgr/frame.py b/gui/wxpython/lmgr/frame.py
index 2f81181..f62dac9 100644
--- a/gui/wxpython/lmgr/frame.py
+++ b/gui/wxpython/lmgr/frame.py
@@ -28,64 +28,68 @@ import re
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
 
 from core import globalvar
 import wx
 import wx.aui
 try:
-    import wx.lib.agw.flatnotebook   as FN
+    import wx.lib.agw.flatnotebook as FN
 except ImportError:
-    import wx.lib.flatnotebook   as FN
+    import wx.lib.flatnotebook as FN
 
 if os.path.join(globalvar.ETCDIR, "python") not in sys.path:
     sys.path.append(os.path.join(globalvar.ETCDIR, "python"))
 
-from grass.script          import core as grass
+from grass.script import core as grass
 
-from core.gcmd             import RunCommand, GError, GMessage, EncodeString
-from core.settings         import UserSettings, GetDisplayVectSettings
-from core.utils            import SetAddOnPath, GetLayerNameFromCmd, command2ltype, _
-from gui_core.preferences  import MapsetAccess, PreferencesDialog
-from lmgr.layertree        import LayerTree, LMIcons
-from lmgr.menudata         import LayerManagerMenuData, LayerManagerModuleTree
-from gui_core.widgets      import GNotebook, FormNotebook
+from core.gcmd import RunCommand, GError, GMessage, EncodeString
+from core.settings import UserSettings, GetDisplayVectSettings
+from core.utils import SetAddOnPath, GetLayerNameFromCmd, command2ltype, _
+from gui_core.preferences import MapsetAccess, PreferencesDialog
+from lmgr.layertree import LayerTree, LMIcons
+from lmgr.menudata import LayerManagerMenuData, LayerManagerModuleTree
+from gui_core.widgets import GNotebook, FormNotebook
 from modules.mcalc_builder import MapCalcFrame
-from dbmgr.manager         import AttributeManager
-from core.workspace        import ProcessWorkspaceFile, ProcessGrcFile, WriteWorkspaceFile
-from core.gconsole         import GConsole, EVT_IGNORED_CMD_RUN
-from core.giface           import Notification
-from gui_core.goutput      import GConsoleWindow, GC_SEARCH, GC_PROMPT
-from gui_core.dialogs      import GdalOutputDialog, DxfImportDialog, GdalImportDialog, MapLayersDialog
-from gui_core.dialogs      import LocationDialog, MapsetDialog, CreateNewVector, GroupDialog, QuitDialog
-from modules.colorrules    import RasterColorTable, VectorColorTable
-from gui_core.menu         import Menu, SearchModuleWindow
-from gmodeler.model        import Model
-from gmodeler.frame        import ModelFrame
-from psmap.frame           import PsMapFrame
-from core.debug            import Debug
-from gui_core.ghelp        import AboutWindow
-from modules.extensions    import InstallExtensionWindow, ManageExtensionWindow
-from lmgr.toolbars         import LMWorkspaceToolbar, LMDataToolbar, LMToolsToolbar
-from lmgr.toolbars         import LMMiscToolbar, LMVectorToolbar, LMNvizToolbar
-from lmgr.pyshell          import PyShellWindow
-from lmgr.giface           import LayerManagerGrassInterface
-from gui_core.forms        import GUI
-from gcp.manager           import GCPWizard
-from nviz.main             import haveNviz
-from nviz.preferences      import NvizPreferencesDialog
-from mapswipe.frame        import SwipeMapFrame
-from rlisetup.frame        import RLiSetupFrame
+from dbmgr.manager import AttributeManager
+from core.workspace import ProcessWorkspaceFile, ProcessGrcFile, WriteWorkspaceFile
+from core.gconsole import GConsole, EVT_IGNORED_CMD_RUN
+from core.giface import Notification
+from gui_core.goutput import GConsoleWindow, GC_SEARCH, GC_PROMPT
+from modules.import_export import GdalOutputDialog, DxfImportDialog, GdalImportDialog, OgrImportDialog
+from gui_core.dialogs import LocationDialog, MapsetDialog, CreateNewVector, GroupDialog, MapLayersDialog, QuitDialog
+from modules.colorrules import RasterColorTable, VectorColorTable
+from gui_core.menu import Menu, SearchModuleWindow
+from gmodeler.model import Model
+from gmodeler.frame import ModelFrame
+from psmap.frame import PsMapFrame
+from core.debug import Debug
+from gui_core.ghelp import AboutWindow
+from modules.extensions import InstallExtensionWindow, ManageExtensionWindow
+from lmgr.toolbars import LMWorkspaceToolbar, LMDataToolbar, LMToolsToolbar
+from lmgr.toolbars import LMMiscToolbar, LMVectorToolbar, LMNvizToolbar
+from lmgr.pyshell import PyShellWindow
+from lmgr.giface import LayerManagerGrassInterface
+from datacatalog.catalog import DataCatalog
+from gui_core.forms import GUI
+from gcp.manager import GCPWizard
+from nviz.main import haveNviz
+from nviz.preferences import NvizPreferencesDialog
+from mapswipe.frame import SwipeMapFrame
+from rlisetup.frame import RLiSetupFrame
+
 
 class GMFrame(wx.Frame):
     """Layer Manager frame with notebook widget for controlling GRASS
     GIS. Includes command console page for typing GRASS (and other)
     commands, tree widget page for managing map layers.
     """
-    def __init__(self, parent, id = wx.ID_ANY, title = None,
-                 workspace = None,
-                 size = globalvar.GM_WINDOW_SIZE, style = wx.DEFAULT_FRAME_STYLE, **kwargs):
-        self.parent    = parent
+
+    def __init__(
+            self, parent, id=wx.ID_ANY, title=None, workspace=None,
+            size=globalvar.GM_WINDOW_SIZE, style=wx.DEFAULT_FRAME_STYLE, **
+            kwargs):
+        self.parent = parent
         if title:
             self.baseTitle = title
         else:
@@ -96,67 +100,72 @@ class GMFrame(wx.Frame):
                 grassVersion = "?"
             self.baseTitle = _("GRASS GIS %s Layer Manager") % grassVersion
 
-        self.iconsize  = (16, 16)
+        self.iconsize = (16, 16)
 
-        self.displayIndex    = 0          # index value for map displays and layer trees
-        self.currentPage     = None       # currently selected page for layer tree notebook
-        self.currentPageNum  = None       # currently selected page number for layer tree notebook
+        self.displayIndex = 0          # index value for map displays and layer trees
+        self.currentPage = None       # currently selected page for layer tree notebook
+        self.currentPageNum = None       # currently selected page number for layer tree notebook
         self.workspaceFile = workspace    # workspace file
         self.workspaceChanged = False     # track changes in workspace
-        self.loadingWorkspace = False     # if we are currently loading workspace to ignore some events
+        # if we are currently loading workspace to ignore some events
+        self.loadingWorkspace = False
         self.cwdPath = None               # current working directory
 
-        wx.Frame.__init__(self, parent = parent, id = id, size = size,
-                          style = style, **kwargs)
+        wx.Frame.__init__(self, parent=parent, id=id, size=size,
+                          style=style, **kwargs)
         self._setTitle()
         self.SetName("LayerManager")
-        
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
+
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
         self._giface = LayerManagerGrassInterface(self)
-        
+
         # the main menu bar
         self._menuTreeBuilder = LayerManagerMenuData()
         # the search tree and command console
         self._moduleTreeBuilder = LayerManagerModuleTree()
         self._auimgr = wx.aui.AuiManager(self)
-        
-        
+
         # list of open dialogs
-        self.dialogs        = dict()
+        self.dialogs = dict()
         self.dialogs['preferences'] = None
         self.dialogs['nvizPreferences'] = None
         self.dialogs['atm'] = list()
-        
+
         # create widgets
         self._createMenuBar()
-        self.statusbar = self.CreateStatusBar(number = 1)
-        self.notebook  = self._createNoteBook()
-        self.toolbars  = { 'workspace' : LMWorkspaceToolbar(parent = self),
-                           'data'      : LMDataToolbar(parent = self),
-                           'tools'     : LMToolsToolbar(parent = self),
-                           'misc'      : LMMiscToolbar(parent = self),
-                           'vector'    : LMVectorToolbar(parent = self),
-                           'nviz'      : LMNvizToolbar(parent = self)}
-        self._toolbarsData = { 'workspace' : ("toolbarWorkspace",     # name
-                                              _("Workspace Toolbar"), # caption
-                                              1),                     # row
-                               'data'      : ("toolbarData",
-                                              _("Data Toolbar"),
-                                              1),
-                               'misc'      : ("toolbarMisc",
-                                              _("Misc Toolbar"),
-                                              2),
-                               'tools'     : ("toolbarTools",
-                                              _("Tools Toolbar"),
-                                              2),
-                               'vector'    : ("toolbarVector",
-                                              _("Vector Toolbar"),
-                                              2),
-                               'nviz'      : ("toolbarNviz",
-                                              _("3D view Toolbar"),
-                                              2),                                            
-                               }
+        self.statusbar = self.CreateStatusBar(number=1)
+        self.notebook = self._createNoteBook()
+        self.toolbars = {'workspace': LMWorkspaceToolbar(parent=self),
+                         'data': LMDataToolbar(parent=self),
+                         'tools': LMToolsToolbar(parent=self),
+                         'misc': LMMiscToolbar(parent=self),
+                         'vector': LMVectorToolbar(parent=self),
+                         'nviz': LMNvizToolbar(parent=self)}
+        self._toolbarsData = {'workspace': ("toolbarWorkspace",     # name
+                                            _("Workspace Toolbar"),  # caption
+                                            1),                     # row
+                              'data': ("toolbarData",
+                                       _("Data Toolbar"),
+                                       1),
+                              'misc': ("toolbarMisc",
+                                       _("Misc Toolbar"),
+                                       2),
+                              'tools': ("toolbarTools",
+                                        _("Tools Toolbar"),
+                                        2),
+                              'vector': ("toolbarVector",
+                                         _("Vector Toolbar"),
+                                         2),
+                              'nviz': ("toolbarNviz",
+                                       _("3D view Toolbar"),
+                                       2),
+                              }
         if sys.platform == 'win32':
             self._toolbarsList = ('workspace', 'data',
                                   'vector', 'tools', 'misc', 'nviz')
@@ -173,10 +182,10 @@ class GMFrame(wx.Frame):
                                  BottomDockable(False).TopDockable(True).
                                  CloseButton(False).Layer(2).
                                  BestSize((self.toolbars[toolbar].GetBestSize())))
-            
+
         self._auimgr.GetPane('toolbarNviz').Hide()
         # bindings
-        self.Bind(wx.EVT_CLOSE,    self.OnCloseWindowOrExit)
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindowOrExit)
         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
 
         self._giface.mapCreated.connect(self.OnMapCreated)
@@ -187,30 +196,34 @@ class GMFrame(wx.Frame):
 
         # AUI stuff
         self._auimgr.AddPane(self.notebook, wx.aui.AuiPaneInfo().
-                             Left().CentrePane().BestSize((-1,-1)).Dockable(False).
+                             Left().CentrePane().BestSize((-1, -1)).Dockable(False).
                              CloseButton(False).DestroyOnClose(True).Row(1).Layer(0))
 
         self._auimgr.Update()
 
         wx.CallAfter(self.notebook.SetSelectionByName, 'layers')
-        
+
         # use default window layout ?
-        if UserSettings.Get(group = 'general', key = 'defWindowPos', subkey = 'enabled'):
-            dim = UserSettings.Get(group = 'general', key = 'defWindowPos', subkey = 'dim')
+        if UserSettings.Get(
+                group='general', key='defWindowPos', subkey='enabled'):
+            dim = UserSettings.Get(
+                group='general',
+                key='defWindowPos',
+                subkey='dim')
             try:
-               x, y = map(int, dim.split(',')[0:2])
-               w, h = map(int, dim.split(',')[2:4])
-               self.SetPosition((x, y))
-               self.SetSize((w, h))
+                x, y = map(int, dim.split(',')[0:2])
+                w, h = map(int, dim.split(',')[2:4])
+                self.SetPosition((x, y))
+                self.SetSize((w, h))
             except:
                 pass
         else:
             # does center (of screen) make sense for lmgr?
             self.Centre()
-        
+
         self.Layout()
         self.Show()
-        
+
         # load workspace file if requested
         if self.workspaceFile:
             # load given workspace file
@@ -220,21 +233,21 @@ class GMFrame(wx.Frame):
                 self.workspaceFile = None
         else:
             # start default initial display
-            self.NewDisplay(show = False)
+            self.NewDisplay(show=False)
 
         # show map display widnow
         # -> OnSize() -> UpdateMap()
-        for mapdisp in self.GetMapDisplay(onlyCurrent = False):
+        for mapdisp in self.GetMapDisplay(onlyCurrent=False):
             mapdisp.Show()
-        
+
         # redirect stderr to log area
         self._gconsole.Redirect()
-        
+
         # fix goutput's pane size (required for Mac OSX)`
         self.goutput.SetSashPosition(int(self.GetSize()[1] * .8))
-        
+
         self.workspaceChanged = False
-        
+
         # start with layer manager on top
         if self.currentPage:
             self.GetMapDisplay().Raise()
@@ -243,67 +256,91 @@ class GMFrame(wx.Frame):
     def _setTitle(self):
         """Set frame title"""
         if self.workspaceFile:
-            self.SetTitle(self.baseTitle + " - " +  os.path.splitext(os.path.basename(self.workspaceFile))[0])
+            self.SetTitle(
+                self.baseTitle +
+                " - " +
+                os.path.splitext(
+                    os.path.basename(
+                        self.workspaceFile))[0])
         else:
             self.SetTitle(self.baseTitle)
-        
+
     def _createMenuBar(self):
         """Creates menu bar"""
-        self.menubar = Menu(parent=self, model=self._menuTreeBuilder.GetModel(separators=True))
+        self.menubar = Menu(
+            parent=self,
+            model=self._menuTreeBuilder.GetModel(
+                separators=True))
         self.SetMenuBar(self.menubar)
         self.menucmd = self.menubar.GetCmd()
-        
+
     def _createTabMenu(self):
         """Creates context menu for display tabs.
-        
+
         Used to rename display.
         """
         menu = wx.Menu()
-        item = wx.MenuItem(menu, id = wx.ID_ANY, text = _("Rename Map Display"))
+        item = wx.MenuItem(menu, id=wx.ID_ANY, text=_("Rename Map Display"))
         menu.AppendItem(item)
         self.Bind(wx.EVT_MENU, self.OnRenameDisplay, item)
-        
+
         return menu
-        
+
     def _setCopyingOfSelectedText(self):
-        copy = UserSettings.Get(group = 'manager', key = 'copySelectedTextToClipboard', subkey = 'enabled')
+        copy = UserSettings.Get(
+            group='manager',
+            key='copySelectedTextToClipboard',
+            subkey='enabled')
         self.goutput.SetCopyingOfSelectedText(copy)
-    
+
     def IsPaneShown(self, name):
         """Check if pane (toolbar, ...) of given name is currently shown"""
         if self._auimgr.GetPane(name).IsOk():
             return self._auimgr.GetPane(name).IsShown()
         return False
-    
+
     def _createNoteBook(self):
         """Creates notebook widgets"""
         if sys.platform == 'win32':
-            self.notebook = GNotebook(parent=self, style=globalvar.FNPageDStyle)
+            self.notebook = GNotebook(
+                parent=self, style=globalvar.FNPageDStyle)
         else:
             self.notebook = FormNotebook(parent=self, style=wx.NB_BOTTOM)
         # create displays notebook widget and add it to main notebook page
         cbStyle = globalvar.FNPageStyle
         if globalvar.hasAgw:
-            self.notebookLayers = FN.FlatNotebook(self.notebook, id=wx.ID_ANY, agwStyle=cbStyle)
+            self.notebookLayers = FN.FlatNotebook(
+                self.notebook, id=wx.ID_ANY, agwStyle=cbStyle)
         else:
-            self.notebookLayers = FN.FlatNotebook(self.notebook, id=wx.ID_ANY, style=cbStyle)
+            self.notebookLayers = FN.FlatNotebook(
+                self.notebook, id=wx.ID_ANY, style=cbStyle)
         self.notebookLayers.SetTabAreaColour(globalvar.FNPageColor)
         menu = self._createTabMenu()
         self.notebookLayers.SetRightClickMenu(menu)
-        self.notebook.AddPage(page = self.notebookLayers, text = _("Map layers"), name = 'layers')
-        
+        self.notebook.AddPage(
+            page=self.notebookLayers,
+            text=_("Layers"),
+            name='layers')
+
         # create 'command output' text area
-        self._gconsole = GConsole(guiparent = self, giface = self._giface,
-                                  ignoredCmdPattern = '^d\..*|^r[3]?\.mapcalc$|^i.group$|^r.in.gdal$|'
-                                                      '^r.external$|^r.external.out$|'
-                                                      '^v.in.ogr$|^v.external$|^v.external.out$|'
-                                                      '^cd$|^cd .*')
-        self.goutput = GConsoleWindow(parent=self.notebook, gconsole=self._gconsole,
-                                      menuModel=self._moduleTreeBuilder.GetModel(),
-                                      gcstyle = GC_PROMPT)
-        self.notebook.AddPage(page = self.goutput, text = _("Command console"), name = 'output')
-
-        self.goutput.showNotification.connect(lambda message: self.SetStatusText(message))
+        self._gconsole = GConsole(
+            guiparent=self, giface=self._giface,
+            ignoredCmdPattern='^d\..*|^r[3]?\.mapcalc$|^i.group$|^r.in.gdal$|'
+            '^r.external$|^r.external.out$|'
+            '^v.in.ogr$|^v.external$|^v.external.out$|'
+            '^cd$|^cd .*')
+        self.goutput = GConsoleWindow(
+            parent=self.notebook,
+            gconsole=self._gconsole,
+            menuModel=self._moduleTreeBuilder.GetModel(),
+            gcstyle=GC_PROMPT)
+        self.notebook.AddPage(
+            page=self.goutput,
+            text=_("Console"),
+            name='output')
+
+        self.goutput.showNotification.connect(
+            lambda message: self.SetStatusText(message))
 
         self._gconsole.mapCreated.connect(self.OnMapCreated)
         self.goutput.contentChanged.connect(
@@ -313,33 +350,64 @@ class GMFrame(wx.Frame):
                             lambda event: self.RunSpecialCmd(event.cmd))
 
         self._setCopyingOfSelectedText()
-        
+
         # create 'search module' notebook page
-        if not UserSettings.Get(group = 'manager', key = 'hideTabs', subkey = 'search'):
-            self.search = SearchModuleWindow(parent=self.notebook, handlerObj=self,
-                                             model=self._moduleTreeBuilder.GetModel())
-            self.search.showNotification.connect(lambda message: self.SetStatusText(message))
-            self.notebook.AddPage(page = self.search, text = _("Search modules"), name = 'search')
+        if not UserSettings.Get(
+                group='manager', key='hideTabs', subkey='search'):
+            self.search = SearchModuleWindow(
+                parent=self.notebook, handlerObj=self,
+                model=self._moduleTreeBuilder.GetModel())
+            self.search.showNotification.connect(
+                lambda message: self.SetStatusText(message))
+            self.notebook.AddPage(
+                page=self.search,
+                text=_("Modules"),
+                name='search')
         else:
             self.search = None
-        
+
+        # create 'data catalog' notebook page
+        self.datacatalog = DataCatalog(
+            parent=self.notebook, giface=self._giface)
+        self.datacatalog.showNotification.connect(
+            lambda message: self.SetStatusText(message))
+        self.datacatalog.changeMapset.connect(lambda mapset: self.ChangeMapset(mapset))
+        self.datacatalog.changeLocation.connect(lambda mapset, location: self.ChangeLocation(location, mapset))
+        self.notebook.AddPage(
+            page=self.datacatalog,
+            text=_("Data"),
+            name='catalog')
+
         # create 'python shell' notebook page
-        if not UserSettings.Get(group = 'manager', key = 'hideTabs', subkey = 'pyshell'):
-            self.pyshell = PyShellWindow(parent=self.notebook, giface=self._giface)
-            self.notebook.AddPage(page = self.pyshell, text = _("Python shell"), name = 'pyshell')
+        if not UserSettings.Get(
+                group='manager', key='hideTabs', subkey='pyshell'):
+            self.pyshell = PyShellWindow(
+                parent=self.notebook, giface=self._giface)
+            self.notebook.AddPage(
+                page=self.pyshell,
+                text=_("Python"),
+                name='pyshell')
         else:
             self.pyshell = None
-        
+
         # bindings
         if sys.platform == 'win32':
-            self.notebook.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
+            self.notebook.Bind(
+                FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+                self.OnPageChanged)
         else:
-            self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
-        self.notebookLayers.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,    self.OnCBPageChanged)
-        self.notebookLayers.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CLOSING,    self.OnCBPageClosed)
-        
+            self.notebook.Bind(
+                wx.EVT_NOTEBOOK_PAGE_CHANGED,
+                self.OnPageChanged)
+        self.notebookLayers.Bind(
+            FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+            self.OnCBPageChanged)
+        self.notebookLayers.Bind(
+            FN.EVT_FLATNOTEBOOK_PAGE_CLOSING,
+            self.OnCBPageClosed)
+
         return self.notebook
-            
+
     def AddNvizTools(self, firstTime):
         """Add nviz notebook page
 
@@ -349,106 +417,119 @@ class GMFrame(wx.Frame):
         Debug.msg(5, "GMFrame.AddNvizTools()")
         if not haveNviz:
             return
-        
+
         from nviz.main import NvizToolWindow
-        
+
         # show toolbar
         self._auimgr.GetPane('toolbarNviz').Show()
         # reorder other toolbars
-        for pos, toolbar in enumerate(('toolbarVector', 'toolbarTools', 'toolbarMisc','toolbarNviz')):
+        for pos, toolbar in enumerate(
+                ('toolbarVector', 'toolbarTools', 'toolbarMisc', 'toolbarNviz')):
             self._auimgr.GetPane(toolbar).Row(2).Position(pos)
         self._auimgr.Update()
-        
+
         # create nviz tools tab
-        self.nviz = NvizToolWindow(parent=self.notebook, tree=self.GetLayerTree(),
-                                   display=self.GetMapDisplay())
+        self.nviz = NvizToolWindow(
+            parent=self.notebook,
+            tree=self.GetLayerTree(),
+            display=self.GetMapDisplay())
         idx = self.notebook.GetPageIndexByName('layers')
-        self.notebook.InsertPage(index=idx + 1, page=self.nviz, text=_("3D view"), name='nviz')
+        self.notebook.InsertPage(
+            index=idx + 1,
+            page=self.nviz,
+            text=_("3D view"),
+            name='nviz')
         self.notebook.SetSelectionByName('nviz')
 
         # this is a bit strange here since a new window is created everytime
         if not firstTime:
-            for page in ('view', 'light', 'fringe', 'constant', 'cplane', 'animation'):
+            for page in ('view', 'light', 'fringe',
+                         'constant', 'cplane', 'animation'):
                 self.nviz.UpdatePage(page)
 
     def RemoveNvizTools(self):
         """Remove nviz notebook page"""
-        # if more mapwindow3D were possible, check here if nb page should be removed
+        # if more mapwindow3D were possible, check here if nb page should be
+        # removed
         self.notebook.SetSelectionByName('layers')
         self.notebook.DeletePage('nviz')
 
         # hide toolbar
         self._auimgr.GetPane('toolbarNviz').Hide()
-        for pos, toolbar in enumerate(('toolbarVector', 'toolbarTools', 'toolbarMisc')):
+        for pos, toolbar in enumerate(
+                ('toolbarVector', 'toolbarTools', 'toolbarMisc')):
             self._auimgr.GetPane(toolbar).Row(2).Position(pos)
         self._auimgr.Update()
-    
+
     def WorkspaceChanged(self):
         """Update window title"""
         if not self.workspaceChanged:
             self.workspaceChanged = True
-        
+
         if self.workspaceFile:
             self._setTitle()
-        
+
     def OnLocationWizard(self, event):
         """Launch location wizard"""
         from location_wizard.wizard import LocationWizard
         from location_wizard.dialogs import RegionDef
-        
-        gWizard = LocationWizard(parent = self,
-                                 grassdatabase = grass.gisenv()['GISDBASE'])
+
+        gWizard = LocationWizard(parent=self,
+                                 grassdatabase=grass.gisenv()['GISDBASE'])
         location = gWizard.location
-        
-        if location !=  None:
-            dlg = wx.MessageDialog(parent = self,
-                                   message = _('Location <%s> created.\n\n'
-                                               'Do you want to switch to the '
-                                               'new location?') % location,
+
+        if location is not None:
+            dlg = wx.MessageDialog(parent=self,
+                                   message=_('Location <%s> created.\n\n'
+                                             'Do you want to switch to the '
+                                             'new location?') % location,
                                    caption=_("Switch to new location?"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
+                                   style=wx.YES_NO | wx.NO_DEFAULT |
                                    wx.ICON_QUESTION | wx.CENTRE)
-            
+
             ret = dlg.ShowModal()
             dlg.Destroy()
             if ret == wx.ID_YES:
-                if RunCommand('g.mapset', parent = self,
-                              location = location,
-                              mapset = 'PERMANENT') != 0:
+                if RunCommand('g.mapset', parent=self,
+                              location=location,
+                              mapset='PERMANENT') != 0:
                     return
 
                 # close current workspace and create new one
                 self.OnWorkspaceClose()
                 self.OnWorkspaceNew()
-                GMessage(parent = self,
-                         message = _("Current location is <%(loc)s>.\n"
-                                     "Current mapset is <%(mapset)s>.") % \
-                             { 'loc' : location, 'mapset' : 'PERMANENT' })
+                GMessage(parent=self,
+                         message=_("Current location is <%(loc)s>.\n"
+                                   "Current mapset is <%(mapset)s>.") %
+                         {'loc': location, 'mapset': 'PERMANENT'})
 
                 # code duplication with gis_set.py
-                dlg = wx.MessageDialog(parent = self,
-                               message = _("Do you want to set the default "
-                                           "region extents and resolution now?"),
-                               caption = _("Location <%s> created") % location,
-                               style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+                dlg = wx.MessageDialog(
+                    parent=self,
+                    message=_(
+                        "Do you want to set the default "
+                        "region extents and resolution now?"),
+                    caption=_("Location <%s> created") %
+                    location,
+                    style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
                 dlg.CenterOnScreen()
                 if dlg.ShowModal() == wx.ID_YES:
                     dlg.Destroy()
-                    defineRegion = RegionDef(self, location = location)
+                    defineRegion = RegionDef(self, location=location)
                     defineRegion.CenterOnScreen()
                     defineRegion.ShowModal()
                     defineRegion.Destroy()
                 else:
                     dlg.Destroy()
-        
+
     def OnSettingsChanged(self):
         """Here can be functions which have to be called
-        after receiving settingsChanged signal. 
+        after receiving settingsChanged signal.
         Now only set copying of selected text to clipboard (in goutput).
         """
-        ### self._createMenuBar() # bug when menu is re-created on the fly
+        # self._createMenuBar() # bug when menu is re-created on the fly
         self._setCopyingOfSelectedText()
-        
+
     def OnGCPManager(self, event=None, cmd=None):
         """Launch georectifier module. See OnIClass documentation.
         """
@@ -456,17 +537,17 @@ class GMFrame(wx.Frame):
 
     def OnGModeler(self, event=None, cmd=None):
         """Launch Graphical Modeler. See OnIClass documentation."""
-        win = ModelFrame(parent = self, giface = self._giface)
+        win = ModelFrame(parent=self, giface=self._giface)
         win.CentreOnScreen()
-        
+
         win.Show()
-        
+
     def OnPsMap(self, event=None, cmd=None):
         """Launch Cartographic Composer. See OnIClass documentation.
         """
-        win = PsMapFrame(parent = self)
+        win = PsMapFrame(parent=self)
         win.CentreOnScreen()
-        
+
         win.Show()
 
     def OnMapSwipe(self, event=None, cmd=None):
@@ -477,9 +558,12 @@ class GMFrame(wx.Frame):
         tree = self.GetLayerTree()
         if tree:
             for layer in tree.GetSelections():
-                if tree.GetLayerInfo(layer, key = 'maplayer').GetType() != 'raster':
+                if tree.GetLayerInfo(
+                        layer, key='maplayer').GetType() != 'raster':
                     continue
-                rasters.append(tree.GetLayerInfo(layer, key = 'maplayer').GetName())
+                rasters.append(
+                    tree.GetLayerInfo(
+                        layer, key='maplayer').GetName())
 
         if len(rasters) >= 1:
             win.SetFirstRaster(rasters[0])
@@ -492,60 +576,63 @@ class GMFrame(wx.Frame):
 
     def OnRLiSetup(self, event=None, cmd=None):
         """Launch r.li Setup. See OnIClass documentation."""
-        win = RLiSetupFrame(parent = self)
+        win = RLiSetupFrame(parent=self)
         win.CentreOnScreen()
-        
+
         win.Show()
 
     def OnDone(self, event):
         """Command execution finished"""
         if hasattr(self, "model"):
-            self.model.DeleteIntermediateData(log = self._gconsole)
+            self.model.DeleteIntermediateData(log=self._gconsole)
             del self.model
         self.SetStatusText('')
-        
+
     def OnRunModel(self, event):
         """Run model"""
         filename = ''
-        dlg = wx.FileDialog(parent = self, message =_("Choose model to run"),
-                            defaultDir = os.getcwd(),
-                            wildcard = _("GRASS Model File (*.gxm)|*.gxm"))
+        dlg = wx.FileDialog(parent=self, message=_("Choose model to run"),
+                            defaultDir=os.getcwd(),
+                            wildcard=_("GRASS Model File (*.gxm)|*.gxm"))
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
-        
+
         if not filename:
             dlg.Destroy()
             return
-        
+
         self.model = Model()
         self.model.LoadModel(filename)
-        self.model.Run(log = self.GetLogWindow(), onDone = self.OnDone, parent = self)
-        
+        self.model.Run(
+            log=self.GetLogWindow(),
+            onDone=self.OnDone,
+            parent=self)
+
         dlg.Destroy()
-        
+
     def OnMapsets(self, event):
         """Launch mapset access dialog
         """
-        dlg = MapsetAccess(parent = self, id = wx.ID_ANY)
+        dlg = MapsetAccess(parent=self, id=wx.ID_ANY)
         dlg.CenterOnScreen()
-        
+
         if dlg.ShowModal() == wx.ID_OK:
             ms = dlg.GetMapsets()
             RunCommand('g.mapsets',
-                       parent = self,
-                       mapset = '%s' % ','.join(ms),
-                       operation = 'set')
-        
+                       parent=self,
+                       mapset='%s' % ','.join(ms),
+                       operation='set')
+
     def OnCBPageChanged(self, event):
         """Page in notebook (display) changed"""
-        self.currentPage    = self.notebookLayers.GetCurrentPage()
+        self.currentPage = self.notebookLayers.GetCurrentPage()
         self.currentPageNum = self.notebookLayers.GetSelection()
         try:
             self.GetMapDisplay().SetFocus()
             self.GetMapDisplay().Raise()
         except:
             pass
-        
+
         event.Skip()
 
     def OnPageChanged(self, event):
@@ -553,30 +640,34 @@ class GMFrame(wx.Frame):
         page = event.GetSelection()
         if page == self.notebook.GetPageIndexByName('output'):
             wx.CallAfter(self.goutput.ResetFocus)
+        elif page == self.notebook.GetPageIndexByName('catalog'):
+            wx.CallAfter(self.datacatalog.LoadItems)
         self.SetStatusText('', 0)
-        
+
         event.Skip()
 
     def OnCBPageClosed(self, event):
         """Page of notebook closed
         Also close associated map display
         """
-        if UserSettings.Get(group = 'manager', key = 'askOnQuit', subkey = 'enabled'):
-            maptree = self.GetLayerTree()
-            
+
+        # save changes in the workspace
+        maptree = self.GetLayerTree()
+        if  self.workspaceChanged and UserSettings.Get(
+                group='manager', key='askOnQuit', subkey='enabled'):
             if self.workspaceFile:
                 message = _("Do you want to save changes in the workspace?")
             else:
                 message = _("Do you want to store current settings "
                             "to workspace file?")
-            
+
             # ask user to save current settings
             if maptree.GetCount() > 0:
                 name = self.notebookLayers.GetPageText(self.currentPageNum)
                 dlg = wx.MessageDialog(self,
-                                       message = message,
-                                       caption = _("Close Map Display %s") % name,
-                                       style = wx.YES_NO | wx.YES_DEFAULT |
+                                       message=message,
+                                       caption=_("Close Map Display %s") % name,
+                                       style=wx.YES_NO | wx.YES_DEFAULT |
                                        wx.CANCEL | wx.ICON_QUESTION | wx.CENTRE)
                 ret = dlg.ShowModal()
                 if ret == wx.ID_YES:
@@ -617,23 +708,23 @@ class GMFrame(wx.Frame):
         if re.compile('^d\..*').search(command[0]):
             self.RunDisplayCmd(command)
         elif re.compile('r[3]?\.mapcalc').search(command[0]):
-            self.OnMapCalculator(event = None, cmd = command)
+            self.OnMapCalculator(event=None, cmd=command)
         elif command[0] == 'i.group':
-            self.OnEditImageryGroups(event = None, cmd = command)
+            self.OnEditImageryGroups(event=None, cmd=command)
         elif command[0] == 'r.in.gdal':
-            self.OnImportGdalLayers(event = None, cmd = command)
+            self.OnImportGdalLayers(event=None, cmd=command)
         elif command[0] == 'r.external':
-            self.OnLinkGdalLayers(event = None, cmd = command)
+            self.OnLinkGdalLayers(event=None, cmd=command)
         elif command[0] == 'r.external.out':
-             self.OnRasterOutputFormat(event = None)
+            self.OnRasterOutputFormat(event=None)
         elif command[0] == 'v.in.ogr':
-            self.OnImportOgrLayers(event = None, cmd = command)
+            self.OnImportOgrLayers(event=None, cmd=command)
         elif command[0] == 'v.external':
-            self.OnLinkOgrLayers(event = None, cmd = command)
+            self.OnLinkOgrLayers(event=None, cmd=command)
         elif command[0] == 'v.external.out':
-             self.OnVectorOutputFormat(event = None)
+            self.OnVectorOutputFormat(event=None)
         elif command[0] == 'cd':
-             self.OnChangeCWD(event=None, cmd=command)
+            self.OnChangeCWD(event=None, cmd=command)
         else:
             raise ValueError('Layer Manager special command (%s)'
                              ' not supported.' % ' '.join(command))
@@ -644,54 +735,71 @@ class GMFrame(wx.Frame):
         :param command: command in a list
         """
         if not self.currentPage:
-            self.NewDisplay(show = True)
+            self.NewDisplay(show=True)
         try:
             # display GRASS commands
             layertype = command2ltype[command[0]]
         except KeyError:
-            GMessage(parent = self,
-                     message = _("Command '%s' not yet implemented in the WxGUI. "
-                                 "Try adding it as a command layer instead.") % command[0])
+            GMessage(
+                parent=self, message=_(
+                    "Command '%s' not yet implemented in the WxGUI. "
+                    "Try adding it as a command layer instead.") %
+                command[0])
             return
-        
+
         if layertype == 'barscale':
             if len(command) > 1:
-                self.GetMapDisplay().AddBarscale(cmd = command, showDialog = False)
+                self.GetMapDisplay().AddBarscale(cmd=command)
             else:
-                self.GetMapDisplay().AddBarscale(showDialog = True)
+                self.GetMapDisplay().AddBarscale()
         elif layertype == 'rastleg':
             if len(command) > 1:
-                self.GetMapDisplay().AddLegend(cmd = command, showDialog = False)
+                self.GetMapDisplay().AddLegendRast(cmd=command)
+            else:
+                self.GetMapDisplay().AddLegendRast()
+        elif layertype == 'vectleg':
+            if len(command) > 1:
+                self.GetMapDisplay().AddLegendVect(cmd=command, showDialog=False)
+            else:
+                self.GetMapDisplay().AddLegendVect(showDialog=True)
+        elif layertype == 'northarrow':
+            if len(command) > 1:
+                self.GetMapDisplay().AddArrow(cmd=command)
+            else:
+                self.GetMapDisplay().AddArrow()
+        elif layertype == 'text':
+            if len(command) > 1:
+                self.GetMapDisplay().AddDtext(cmd=command)
             else:
-                self.GetMapDisplay().AddLegend(showDialog = True)
+                self.GetMapDisplay().AddDtext()
         elif layertype == 'redraw':
             self.GetMapDisplay().OnRender(None)
         elif layertype == 'export':
-            GUI(parent=self, show=False).ParseCommand(command,
-                                                      completed=(self.GetMapDisplay().DOutFileOptData,
-                                                                 '', ''))
+            GUI(parent=self, show=False).ParseCommand(
+                command, completed=(self.GetMapDisplay().DOutFileOptData, '', ''))
         elif layertype == 'torast':
             if len(command) <= 1:
-                task = GUI(parent=self, show=True).ParseCommand(command,
-                                                                completed=(self.GetMapDisplay().DToRastOptData,
-                                                                '', ''))
+                task = GUI(
+                    parent=self, show=True).ParseCommand(
+                    command, completed=(
+                        self.GetMapDisplay().DToRastOptData, '', ''))
             else:
-                task = GUI(parent=self, show=None).ParseCommand(command,
-                                                                completed=(self.GetMapDisplay().DToRastOptData,
-                                                                '', ''))
+                task = GUI(
+                    parent=self, show=None).ParseCommand(
+                    command, completed=(
+                        self.GetMapDisplay().DToRastOptData, '', ''))
                 self.GetMapDisplay().DToRast(command=task.get_cmd())
         else:
             # add layer into layer tree
-            lname, found = GetLayerNameFromCmd(command, fullyQualified = True,
-                                               layerType = layertype)
-            self.GetLayerTree().AddLayer(ltype = layertype,
-                                         lname = lname,
-                                         lcmd = command)
+            lname, found = GetLayerNameFromCmd(command, fullyQualified=True,
+                                               layerType=layertype)
+            self.GetLayerTree().AddLayer(ltype=layertype, lchecked=True if lname else None,
+                                         lname=lname, lcmd=command)
 
     def GetLayerNotebook(self):
         """Get Layers Notebook"""
         return self.notebookLayers
-    
+
     def GetLayerTree(self):
         """Get current layer tree
 
@@ -701,8 +809,8 @@ class GMFrame(wx.Frame):
         if self.currentPage:
             return self.currentPage.maptree
         return None
-    
-    def GetMapDisplay(self, onlyCurrent = True):
+
+    def GetMapDisplay(self, onlyCurrent=True):
         """Get current map display
 
         :param bool onlyCurrent: True to return only active mapdisplay
@@ -716,24 +824,25 @@ class GMFrame(wx.Frame):
                 return self.GetLayerTree().GetMapDisplay()
             else:
                 return None
-        else: # -> return list of all mapdisplays
+        else:  # -> return list of all mapdisplays
             mlist = list()
             for idx in range(0, self.notebookLayers.GetPageCount()):
-                mlist.append(self.notebookLayers.GetPage(idx).maptree.GetMapDisplay())
-            
+                mlist.append(self.notebookLayers.GetPage(
+                    idx).maptree.GetMapDisplay())
+
             return mlist
 
     def GetLogWindow(self):
         """Gets console for command output and messages"""
         return self._gconsole
-    
+
     def GetToolbar(self, name):
         """Returns toolbar if exists else None"""
         if name in self.toolbars:
             return self.toolbars[name]
-        
+
         return None
-        
+
     def GetMenuCmd(self, event):
         """Get GRASS command from menu item
 
@@ -746,135 +855,141 @@ class GMFrame(wx.Frame):
 
         try:
             cmdlist = cmd.split(' ')
-        except: # already list?
+        except:  # already list?
             cmdlist = cmd
-        
+
         # check list of dummy commands for GUI modules that do not have GRASS
-        # bin modules or scripts. 
-        if cmd in ['vcolors', 'r.mapcalc', 'r3.mapcalc', 'v.krige']:
+        # bin modules or scripts.
+        if cmd in ['vcolors', 'r.mapcalc', 'r3.mapcalc']:
             return cmdlist
 
         try:
             layer = self.GetLayerTree().layer_selected
-            name = self.GetLayerTree().GetLayerInfo(layer, key = 'maplayer').name
-            type = self.GetLayerTree().GetLayerInfo(layer, key = 'type')
+            name = self.GetLayerTree().GetLayerInfo(layer, key='maplayer').name
+            type = self.GetLayerTree().GetLayerInfo(layer, key='type')
         except:
             layer = None
 
-        if layer and len(cmdlist) == 1: # only if no parameters given
-            if (type == 'raster' and cmdlist[0][0] == 'r' and cmdlist[0][1] != '3') or \
-                    (type == 'vector' and cmdlist[0][0] == 'v'):
+        if layer and len(cmdlist) == 1:  # only if no parameters given
+            if (type == 'raster' and cmdlist[0][0] == 'r' and cmdlist[0][
+                    1] != '3') or (type == 'vector' and cmdlist[0][0] == 'v'):
                 input = GUI().GetCommandInputMapParamKey(cmdlist[0])
                 if input:
                     cmdlist.append("%s=%s" % (input, name))
-        
+
         return cmdlist
 
-    def RunMenuCmd(self, event = None, cmd = []):
+    def RunMenuCmd(self, event=None, cmd=[]):
         """Run command selected from menu"""
-        if event:       
+        if event:
             cmd = self.GetMenuCmd(event)
         self._gconsole.RunCmd(cmd)
 
-    def OnMenuCmd(self, event = None, cmd = []):
+    def OnMenuCmd(self, event=None, cmd=[]):
         """Parse command selected from menu"""
-        if event:       
+        if event:
             cmd = self.GetMenuCmd(event)
         GUI(parent=self, giface=self._giface).ParseCommand(cmd)
-        
+
     def OnVNet(self, event):
         """Vector network analysis tool"""
         if self.GetMapDisplay():
             self.GetMapDisplay().OnVNet(event)
         else:
-            self.NewDisplay(show = True).OnVNet(event)
-        
+            self.NewDisplay(show=True).OnVNet(event)
+
     def OnVDigit(self, event):
         """Start vector digitizer
         """
         if not self.currentPage:
             self.MsgNoLayerSelected()
             return
-        
+
         tree = self.GetLayerTree()
         layer = tree.layer_selected
         # no map layer selected
         if not layer:
             self.MsgNoLayerSelected()
             return
-        
+
         # available only for vector map layers
         try:
-            mapLayer = tree.GetLayerInfo(layer, key = 'maplayer')
+            mapLayer = tree.GetLayerInfo(layer, key='maplayer')
         except:
             mapLayer = None
-        
+
         if not mapLayer or mapLayer.GetType() != 'vector':
-            GMessage(parent = self,
-                     message = _("Selected map layer is not vector."))
+            GMessage(parent=self,
+                     message=_("Selected map layer is not vector."))
             return
-        
+
         if mapLayer.GetMapset() != grass.gisenv()['MAPSET']:
-            GMessage(parent = self,
-                     message = _("Editing is allowed only for vector maps from the "
-                                 "current mapset."))
+            GMessage(
+                parent=self, message=_(
+                    "Editing is allowed only for vector maps from the "
+                    "current mapset."))
             return
-        
+
         if not tree.GetLayerInfo(layer):
             return
-        dcmd = tree.GetLayerInfo(layer, key = 'cmd')
+        dcmd = tree.GetLayerInfo(layer, key='cmd')
         if not dcmd:
             return
-        
+
         digitToolbar = self.GetMapDisplay().GetToolbar('vdigit')
         if digitToolbar:
             stopOnly = False
             if mapLayer is digitToolbar.GetLayer():
                 stopOnly = True
-            tree.OnStopEditing(None) # TODO: change to signal
+            tree.OnStopEditing(None)  # TODO: change to signal
             if stopOnly:
                 return
-        
-        tree.OnStartEditing(None) # TODO: change to signal
-        
+
+        tree.OnStartEditing(None)  # TODO: change to signal
+
     def OnRunScript(self, event):
         """Run user-defined script"""
         # open dialog and choose script file
-        dlg = wx.FileDialog(parent = self, message = _("Choose script file to run"),
-                            defaultDir = os.getcwd(),
-                            wildcard = _("Python script (*.py)|*.py|Bash script (*.sh)|*.sh"))
-        
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose script file to run"),
+            defaultDir=os.getcwd(),
+            wildcard=_("Python script (*.py)|*.py|Bash script (*.sh)|*.sh"))
+
         filename = None
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
-        
+
         if not filename:
             return False
         try:
             filename_encoded = EncodeString(filename)
         except UnicodeEncodeError:
-            GError(parent=self,
-                   message = _("Due to the limitations of your operating system, "
-                               "the script path cannot contain certain non-ascii characters. "
-                               "Please rename the script or move it to a different location."))
+            GError(
+                parent=self, message=_(
+                    "Due to the limitations of your operating system, "
+                    "the script path cannot contain certain non-ascii characters. "
+                    "Please rename the script or move it to a different location."))
             return
-        
+
         if not os.path.exists(filename):
-            GError(parent = self,
-                   message = _("Script file '%s' doesn't exist. "
-                               "Operation canceled.") % filename)
+            GError(parent=self,
+                   message=_("Script file '%s' doesn't exist. "
+                             "Operation canceled.") % filename)
             return
 
         # check permission
         if not os.access(filename, os.X_OK):
-            dlg = wx.MessageDialog(self,
-                                   message = _("Script <%s> is not executable. "
-                                               "Do you want to set the permissions "
-                                               "that allows you to run this script "
-                                               "(note that you must be the owner of the file)?" % \
-                                                   os.path.basename(filename)),
-                                   caption = _("Set permission?"),
-                                   style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Script <%s> is not executable. "
+                    "Do you want to set the permissions "
+                    "that allows you to run this script "
+                    "(note that you must be the owner of the file)?" %
+                    os.path.basename(filename)),
+                caption=_("Set permission?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() != wx.ID_YES:
                 return
             dlg.Destroy()
@@ -882,9 +997,11 @@ class GMFrame(wx.Frame):
                 mode = stat.S_IMODE(os.lstat(filename)[stat.ST_MODE])
                 os.chmod(filename, mode | stat.S_IXUSR)
             except OSError:
-                GError(_("Unable to set permission. Operation canceled."), parent = self)
+                GError(
+                    _("Unable to set permission. Operation canceled."),
+                    parent=self)
                 return
-        
+
         # check GRASS_ADDON_PATH
         addonPath = os.getenv('GRASS_ADDON_PATH', [])
         if addonPath:
@@ -892,89 +1009,97 @@ class GMFrame(wx.Frame):
         dirName = os.path.dirname(filename_encoded)
         if dirName not in addonPath:
             addonPath.append(dirName)
-            dlg = wx.MessageDialog(self,
-                                   message = _("Directory '%s' is not defined in GRASS_ADDON_PATH. "
-                                               "Do you want add this directory to GRASS_ADDON_PATH?") % \
-                                       dirName,
-                                   caption = _("Update Addons path?"),
-                                   style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Directory '%s' is not defined in GRASS_ADDON_PATH. "
+                    "Do you want add this directory to GRASS_ADDON_PATH?") %
+                dirName, caption=_("Update Addons path?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() == wx.ID_YES:
-                SetAddOnPath(os.pathsep.join(addonPath), key = 'PATH')
+                SetAddOnPath(os.pathsep.join(addonPath), key='PATH')
             dlg.Destroy()
-        
+
         self._gconsole.WriteCmdLog(_("Launching script '%s'...") % filename)
         self._gconsole.RunCmd([filename])
-        
+
     def OnChangeLocation(self, event):
         """Change current location"""
-        dlg = LocationDialog(parent = self)
+        dlg = LocationDialog(parent=self)
         if dlg.ShowModal() == wx.ID_OK:
             location, mapset = dlg.GetValues()
             dlg.Destroy()
-            
+
             if not location or not mapset:
-                GError(parent = self,
-                       message = _("No location/mapset provided. Operation canceled."))
-                return # this should not happen
-            
-            if RunCommand('g.mapset', parent = self,
-                          location = location,
-                          mapset = mapset) != 0:
-                return # error reported
-            
-            # close current workspace and create new one
-            self.OnWorkspaceClose()
-            self.OnWorkspaceNew()
-            GMessage(parent = self,
-                     message = _("Current location is <%(loc)s>.\n"
-                                 "Current mapset is <%(mapset)s>.") % \
-                         { 'loc' : location, 'mapset' : mapset })
-        
+                GError(
+                    parent=self,
+                    message=_(
+                        "No location/mapset provided. Operation canceled."))
+                return  # this should not happen
+            self.ChangeLocation(location, mapset)
+
+    def ChangeLocation(self, location, mapset):
+        if RunCommand('g.mapset', parent=self,
+                      location=location,
+                      mapset=mapset) != 0:
+            return  # error reported
+
+        # close current workspace and create new one
+        self.OnWorkspaceClose()
+        self.OnWorkspaceNew()
+        GMessage(parent=self,
+                 message=_("Current location is <%(loc)s>.\n"
+                           "Current mapset is <%(mapset)s>.") %
+                 {'loc': location, 'mapset': mapset})
+
     def OnCreateMapset(self, event):
         """Create new mapset"""
-        dlg = wx.TextEntryDialog(parent = self,
-                                 message = _('Enter name for new mapset:'),
-                                 caption = _('Create new mapset'))
-        
-        if dlg.ShowModal() ==  wx.ID_OK:
+        dlg = wx.TextEntryDialog(parent=self,
+                                 message=_('Enter name for new mapset:'),
+                                 caption=_('Create new mapset'))
+
+        if dlg.ShowModal() == wx.ID_OK:
             mapset = dlg.GetValue()
             if not mapset:
-                GError(parent = self,
-                       message = _("No mapset provided. Operation canceled."))
+                GError(parent=self,
+                       message=_("No mapset provided. Operation canceled."))
                 return
-            
+
             ret = RunCommand('g.mapset',
-                             parent = self,
-                             flags = 'c',
-                             mapset = mapset)
+                             parent=self,
+                             flags='c',
+                             mapset=mapset)
             if ret == 0:
-                GMessage(parent = self,
-                         message = _("Current mapset is <%s>.") % mapset)
-                
+                GMessage(parent=self,
+                         message=_("Current mapset is <%s>.") % mapset)
+
     def OnChangeMapset(self, event):
         """Change current mapset"""
-        dlg = MapsetDialog(parent = self)
-        
+        dlg = MapsetDialog(parent=self)
+
         if dlg.ShowModal() == wx.ID_OK:
             mapset = dlg.GetMapset()
             dlg.Destroy()
-            
+
             if not mapset:
-                GError(parent = self,
-                       message = _("No mapset provided. Operation canceled."))
+                GError(parent=self,
+                       message=_("No mapset provided. Operation canceled."))
                 return
-            
-            if RunCommand('g.mapset',
-                          parent = self,
-                          mapset = mapset) == 0:
-                GMessage(parent = self,
-                         message = _("Current mapset is <%s>.") % mapset)
-        
-                dispId = 1
-                for display in self.GetMapDisplay(onlyCurrent = False):
-                    display.SetTitleNumber(dispId) # TODO: signal ?
-                    dispId += 1 
-        
+            self.ChangeMapset(mapset)
+
+    def ChangeMapset(self, mapset):
+        """Change current mapset and update map display title"""
+        if RunCommand('g.mapset',
+                      parent=self,
+                      mapset=mapset) == 0:
+            GMessage(parent=self,
+                     message=_("Current mapset is <%s>.") % mapset)
+
+            dispId = 1
+            for display in self.GetMapDisplay(onlyCurrent=False):
+                display.SetTitleNumber(dispId)  # TODO: signal ?
+                dispId += 1
+
     def OnChangeCWD(self, event=None, cmd=None):
         """Change current working directory
 
@@ -1005,8 +1130,8 @@ class GMFrame(wx.Frame):
             # but this should be solved by the function not caller
             # also because of translations
             self._giface.WriteLog(_("If ~ (tilde) is present as the first"
-                " directory on the path, it is replaced"
-                " by user's home directory."))
+                                    " directory on the path, it is replaced"
+                                    " by user's home directory."))
 
         # check correctness of cmd
         if cmd and cmd[0] != 'cd':
@@ -1051,25 +1176,25 @@ class GMFrame(wx.Frame):
     def GetCwdPath(self):
         """Get current working directory or None"""
         return self.cwdPath
-    
+
     def OnNewVector(self, event):
         """Create new vector map layer"""
         dlg = CreateNewVector(self, giface=self._giface,
                               cmd=(('v.edit',
                                     {'tool': 'create'},
                                     'map')))
-        
+
         if not dlg:
             return
-        
-        name = dlg.GetName(full = True)
+
+        name = dlg.GetName(full=True)
         if name and dlg.IsChecked('add'):
             # add layer to map layer tree
-            self.GetLayerTree().AddLayer(ltype = 'vector',
-                                            lname = name,
-                                            lcmd = ['d.vect', 'map=%s' % name])
+            self.GetLayerTree().AddLayer(ltype='vector',
+                                         lname=name, lchecked=True,
+                                         lcmd=['d.vect', 'map=%s' % name])
         dlg.Destroy()
-        
+
     def OnSystemInfo(self, event):
         """Print system information"""
         vInfo = grass.version()
@@ -1077,12 +1202,12 @@ class GMFrame(wx.Frame):
             sys.stderr.write(_("Unable to get GRASS version\n"))
 
         # check also OSGeo4W on MS Windows
-        if sys.platform == 'win32' and \
-                not os.path.exists(os.path.join(os.getenv("GISBASE"), "WinGRASS-README.url")):
+        if sys.platform == 'win32' and not os.path.exists(
+                os.path.join(os.getenv("GISBASE"), "WinGRASS-README.url")):
             osgeo4w = ' (OSGeo4W)'
         else:
             osgeo4w = ''
-        
+
         self._gconsole.WriteCmdLog(_("System Info"))
         # platform from UTF-8 conversion was added because of the Fedora 19 release
         # which has the name "Schrödinger’s cat" (umlaut and special ' character)
@@ -1092,35 +1217,45 @@ class GMFrame(wx.Frame):
                                 "%s: %s\n"
                                 "%s: %s\n"
                                 # "%s: %s (%s)\n"
-                                "GDAL/OGR: %s\n"
+                                "GDAL: %s\n"
                                 "PROJ.4: %s\n"
                                 "GEOS: %s\n"
                                 "SQLite: %s\n"
                                 "Python: %s\n"
                                 "wxPython: %s\n"
-                                "%s: %s%s\n"% (_("GRASS version"), vInfo.get('version', _('unknown version')),
-                                               _("GRASS SVN Revision"), vInfo.get('revision', '?'),
-                                               _("Build Date"), vInfo.get('build_date', '?'),
-                                               _("Build Platform"), vInfo.get('build_platform', '?'),
-                                               # _("GIS Library Revision"), vInfo.get('libgis_revision'], vInfo.get('libgis_date'].split(' ', 1)[0],
-                                               vInfo.get('gdal', '?'), vInfo.get('proj4', '?'), vInfo.get('geos', '?'), vInfo.get('sqlite', '?'),
-                                               platform.python_version(),
-                                               wx.__version__,
-                                               _("Platform"), platform.platform().decode('utf8', 'replace'), osgeo4w),
+                                "%s: %s%s\n" % (_("GRASS version"), vInfo.get('version', _('unknown version')),
+                                                _("GRASS SVN revision"), vInfo.get(
+                                                    'revision', '?'),
+                                                _("Build date"), vInfo.get(
+                                                    'build_date', '?'),
+                                                _("Build platform"), vInfo.get(
+                                                    'build_platform', '?'),
+                                                # _("GIS Library Revision"),
+                                                # vInfo.get('libgis_revision'],
+                                                # vInfo.get('libgis_date'].split('
+                                                # ', 1)[0],
+                                                vInfo.get(
+                                                    'gdal', '?'), vInfo.get(
+                                                    'proj4', '?'), vInfo.get(
+                                                    'geos', '?'), vInfo.get(
+                                                    'sqlite', '?'),
+                                                platform.python_version(),
+                                                wx.__version__,
+                                                _("Platform"), platform.platform().decode('utf8', 'replace'), osgeo4w),
                                 notification=Notification.MAKE_VISIBLE)
         self._gconsole.WriteCmdLog(' ')
-    
+
     def OnAboutGRASS(self, event):
         """Display 'About GRASS' dialog"""
         win = AboutWindow(self)
         win.CentreOnScreen()
-        win.Show(True)  
+        win.Show(True)
 
     def _popupMenu(self, data):
         """Create popup menu
         """
         menu = wx.Menu()
-        
+
         for key, handler in data:
             if key is None:
                 menu.AppendSeparator()
@@ -1129,7 +1264,7 @@ class GMFrame(wx.Frame):
             item.SetBitmap(LMIcons[key].GetBitmap(self.iconsize))
             menu.AppendItem(item)
             self.Bind(wx.EVT_MENU, handler, item)
-        
+
         # create menu
         self.PopupMenu(menu)
         menu.Destroy()
@@ -1137,64 +1272,70 @@ class GMFrame(wx.Frame):
     def OnImportMenu(self, event):
         """Import maps menu (import, link)
         """
-        self._popupMenu((('rastImport',    self.OnImportGdalLayers),
-                         ('rastLink',      self.OnLinkGdalLayers),
-                         ('rastUnpack',    self.OnUnpackRaster),
-                         ('rastOut',       self.OnRasterOutputFormat),
+        self._popupMenu((('rastImport', self.OnImportGdalLayers),
+                         ('vectImport', self.OnImportOgrLayers),
                          (None, None),
-                         ('vectImport',    self.OnImportOgrLayers),
-                         ('vectLink',      self.OnLinkOgrLayers),
-                         ('vectUnpack',    self.OnUnpackVector),
-                         ('vectOut',       self.OnVectorOutputFormat)))
-        
-    def OnWorkspaceNew(self, event = None):
+                         ('rastUnpack', self.OnUnpackRaster),
+                         ('vectUnpack', self.OnUnpackVector),
+                         (None, None),
+                         ('rastLink', self.OnLinkGdalLayers),
+                         ('vectLink', self.OnLinkOgrLayers),
+                         ('rastOut', self.OnRasterOutputFormat),
+                         ('vectOut', self.OnVectorOutputFormat)))
+
+    def OnWorkspaceNew(self, event=None):
         """Create new workspace file
 
         Erase current workspace settings first
         """
         Debug.msg(4, "GMFrame.OnWorkspaceNew():")
-        
+
         # start new map display if no display is available
         if not self.currentPage:
             self.NewDisplay()
-        
+
         maptree = self.GetLayerTree()
-        
+
         # ask user to save current settings
         if self.workspaceFile and self.workspaceChanged:
             self.OnWorkspaceSave()
         elif self.workspaceFile is None and maptree.GetCount() > 0:
-             dlg = wx.MessageDialog(self, message = _("Current workspace is not empty. "
-                                                    "Do you want to store current settings "
-                                                    "to workspace file?"),
-                                    caption = _("Create new workspace?"),
-                                    style = wx.YES_NO | wx.YES_DEFAULT | \
-                                        wx.CANCEL | wx.ICON_QUESTION)
-             ret = dlg.ShowModal()
-             if ret == wx.ID_YES:
-                 self.OnWorkspaceSaveAs()
-             elif ret == wx.ID_CANCEL:
-                 dlg.Destroy()
-                 return
-             
-             dlg.Destroy()
-        
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Current workspace is not empty. "
+                    "Do you want to store current settings "
+                    "to workspace file?"),
+                caption=_("Create new workspace?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.CANCEL | wx.ICON_QUESTION)
+            ret = dlg.ShowModal()
+            if ret == wx.ID_YES:
+                self.OnWorkspaceSaveAs()
+            elif ret == wx.ID_CANCEL:
+                dlg.Destroy()
+                return
+
+            dlg.Destroy()
+
         # delete all items
         maptree.DeleteAllItems()
-        
+
         # add new root element
         maptree.root = maptree.AddRoot("Map Layers")
-        self.GetLayerTree().SetPyData(maptree.root, (None,None))
-        
+        self.GetLayerTree().SetPyData(maptree.root, (None, None))
+
         # no workspace file loaded
         self.workspaceFile = None
         self.workspaceChanged = False
         self._setTitle()
-        
-    def OnWorkspaceOpen(self, event = None):
+
+    def OnWorkspaceOpen(self, event=None):
         """Open file with workspace definition"""
-        dlg = wx.FileDialog(parent = self, message = _("Choose workspace file"),
-                            defaultDir = os.getcwd(), wildcard = _("GRASS Workspace File (*.gxw)|*.gxw"))
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose workspace file"),
+            defaultDir=os.getcwd(),
+            wildcard=_("GRASS Workspace File (*.gxw)|*.gxw"))
 
         filename = ''
         if dlg.ShowModal() == wx.ID_OK:
@@ -1204,7 +1345,7 @@ class GMFrame(wx.Frame):
             return
 
         Debug.msg(4, "GMFrame.OnWorkspaceOpen(): filename=%s" % filename)
-        
+
         # delete current layer tree content
         self.OnWorkspaceClose()
         self.loadingWorkspace = True
@@ -1219,7 +1360,7 @@ class GMFrame(wx.Frame):
 
         .. todo::
             Validate against DTD
-        
+
         :return: True on success
         :return: False on error
         """
@@ -1227,19 +1368,22 @@ class GMFrame(wx.Frame):
         try:
             gxwXml = ProcessWorkspaceFile(etree.parse(filename))
         except Exception as e:
-            GError(parent = self,
-                   message = _("Reading workspace file <%s> failed.\n"
-                               "Invalid file, unable to parse XML document.") % filename)
+            GError(
+                parent=self, message=_(
+                    "Reading workspace file <%s> failed.\n"
+                    "Invalid file, unable to parse XML document.") %
+                filename)
             return
-        
-        busy = wx.BusyInfo(message = _("Please wait, loading workspace..."),
-                           parent = self)
+
+        busy = wx.BusyInfo(message=_("Please wait, loading workspace..."),
+                           parent=self)
         wx.Yield()
 
         #
         # load layer manager window properties
         #
-        if UserSettings.Get(group = 'general', key = 'workspace', subkey = ['posManager', 'enabled']) is False:
+        if UserSettings.Get(group='general', key='workspace', subkey=[
+                            'posManager', 'enabled']) is False:
             if gxwXml.layerManager['pos']:
                 self.SetPosition(gxwXml.layerManager['pos'])
             if gxwXml.layerManager['size']:
@@ -1248,72 +1392,81 @@ class GMFrame(wx.Frame):
                 self.cwdPath = gxwXml.layerManager['cwd']
                 if os.path.isdir(self.cwdPath):
                     os.chdir(self.cwdPath)
-        
+
         #
         # start map displays first (list of layers can be empty)
         #
         displayId = 0
         mapdisplay = list()
         for display in gxwXml.displays:
-            mapdisp = self.NewDisplay(name = display['name'], show = False)
+            mapdisp = self.NewDisplay(name=display['name'], show=False)
             mapdisplay.append(mapdisp)
             maptree = self.notebookLayers.GetPage(displayId).maptree
-            
+
             # set windows properties
-            mapdisp.SetProperties(render = display['render'],
-                                  mode = display['mode'],
-                                  showCompExtent = display['showCompExtent'],
-                                  alignExtent = display['alignExtent'],
-                                  constrainRes = display['constrainRes'],
-                                  projection = display['projection']['enabled'])
+            mapdisp.SetProperties(render=display['render'],
+                                  mode=display['mode'],
+                                  showCompExtent=display['showCompExtent'],
+                                  alignExtent=display['alignExtent'],
+                                  constrainRes=display['constrainRes'],
+                                  projection=display['projection']['enabled'])
 
             if display['projection']['enabled']:
                 if display['projection']['epsg']:
-                    UserSettings.Set(group = 'display', key = 'projection', subkey = 'epsg',
-                                     value = display['projection']['epsg'])
+                    UserSettings.Set(
+                        group='display',
+                        key='projection',
+                        subkey='epsg',
+                        value=display['projection']['epsg'])
                     if display['projection']['proj']:
-                        UserSettings.Set(group = 'display', key = 'projection', subkey = 'proj4',
-                                         value = display['projection']['proj'])
-            
+                        UserSettings.Set(
+                            group='display',
+                            key='projection',
+                            subkey='proj4',
+                            value=display['projection']['proj'])
+
             # set position and size of map display
-            if not UserSettings.Get(group = 'general', key = 'workspace', subkey = ['posDisplay', 'enabled']):
+            if not UserSettings.Get(
+                    group='general', key='workspace',
+                    subkey=['posDisplay', 'enabled']):
                 if display['pos']:
                     mapdisp.SetPosition(display['pos'])
                 if display['size']:
                     mapdisp.SetSize(display['size'])
-                    
+
             # set extent if defined
             if display['extent']:
                 w, s, e, n, b, t = display['extent']
-                region = maptree.Map.region = maptree.Map.GetRegion(w = w, s = s, e = e, n = n)
+                region = maptree.Map.region = maptree.Map.GetRegion(
+                    w=w, s=s, e=e, n=n)
                 mapdisp.GetWindow().ResetZoomHistory()
                 mapdisp.GetWindow().ZoomHistory(region['n'],
                                                 region['s'],
                                                 region['e'],
                                                 region['w'])
-            
+
             displayId += 1
-            mapdisp.Show() # show mapdisplay
+            mapdisp.Show()  # show mapdisplay
             # set render property to False to speed up loading layers
             mapdisp.mapWindowProperties.autoRender = False
 
         maptree = None
         selectList = []  # list of selected layers
-        # 
+        #
         # load list of map layers
         #
         for layer in gxwXml.layers:
             display = layer['display']
             maptree = self.notebookLayers.GetPage(display).maptree
 
-            newItem = maptree.AddLayer(ltype = layer['type'],
-                                       lname = layer['name'],
-                                       lchecked = layer['checked'],
-                                       lopacity = layer['opacity'],
-                                       lcmd = layer['cmd'],
-                                       lgroup = layer['group'],
-                                       lnviz = layer['nviz'],
-                                       lvdigit = layer['vdigit'])
+            newItem = maptree.AddLayer(ltype=layer['type'],
+                                       lname=layer['name'],
+                                       lchecked=layer['checked'],
+                                       lopacity=layer['opacity'],
+                                       lcmd=layer['cmd'],
+                                       lgroup=layer['group'],
+                                       lnviz=layer['nviz'],
+                                       lvdigit=layer['vdigit'])
 
             if 'selected' in layer:
                 selectList.append((maptree, newItem, layer['selected']))
@@ -1325,35 +1478,53 @@ class GMFrame(wx.Frame):
             else:
                 maptree.SelectItem(layer, select=False)
 
+
         busy.Destroy()
 
         # set render property again when all layers are loaded
         for i, display in enumerate(gxwXml.displays):
             mapdisplay[i].mapWindowProperties.autoRender = display['render']
-            
-        for idx, mdisp in enumerate(mapdisplay):
-            ### avoid double-rendering when loading workspace
-            ### mdisp.MapWindow2D.UpdateMap()
+
+            for overlay in gxwXml.overlays:
+                # overlay["cmd"][0] name of command e.g. d.barscale, d.legend
+                # overlay["cmd"][1:] parameters and flags
+                if overlay['display'] == i:
+                    if overlay['cmd'][0] == "d.legend.vect":
+                        mapdisplay[i].AddLegendVect(overlay['cmd'])
+                    if overlay['cmd'][0] == "d.legend":
+                        mapdisplay[i].AddLegendRast(overlay['cmd'])
+                    if overlay['cmd'][0] == "d.barscale":
+                        mapdisplay[i].AddBarscale(overlay['cmd'])
+                    if overlay['cmd'][0] == "d.northarrow":
+                        mapdisplay[i].AddArrow(overlay['cmd'])
+                    if overlay['cmd'][0] == "d.text":
+                        mapdisplay[i].AddDtext(overlay['cmd'])
+
+            # avoid double-rendering when loading workspace
+            # mdisp.MapWindow2D.UpdateMap()
             # nviz
-            if gxwXml.displays[idx]['viewMode'] == '3d':
-                mdisp.AddNviz()
-                self.nviz.UpdateState(view = gxwXml.nviz_state['view'],
-                                              iview = gxwXml.nviz_state['iview'],
-                                              light = gxwXml.nviz_state['light'])
-                mdisp.MapWindow3D.constants = gxwXml.nviz_state['constants']
-                for idx, constant in enumerate(mdisp.MapWindow3D.constants):
-                    mdisp.MapWindow3D.AddConstant(constant, idx + 1)
+            if gxwXml.displays[i]['viewMode'] == '3d':
+                mapdisplay[i].AddNviz()
+                self.nviz.UpdateState(view=gxwXml.nviz_state['view'],
+                                      iview=gxwXml.nviz_state['iview'],
+                                      light=gxwXml.nviz_state['light'])
+                mapdisplay[i].MapWindow3D.constants = gxwXml.nviz_state['constants']
+                for idx, constant in enumerate(mapdisplay[i].MapWindow3D.constants):
+                    mapdisplay[i].MapWindow3D.AddConstant(constant, i + 1)
                 for page in ('view', 'light', 'fringe', 'constant', 'cplane'):
                     self.nviz.UpdatePage(page)
                 self.nviz.UpdateSettings()
-                mdisp.toolbars['map'].combo.SetSelection(1)
-            
+                mapdisplay[i].toolbars['map'].combo.SetSelection(1)
+
         return True
-    
+
     def OnWorkspaceLoadGrcFile(self, event):
         """Load map layers from GRC file (Tcl/Tk GUI) into map layer tree"""
-        dlg = wx.FileDialog(parent = self, message = _("Choose GRC file to load"),
-                            defaultDir = os.getcwd(), wildcard = _("Old GRASS Workspace File (*.grc)|*.grc"))
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose GRC file to load"),
+            defaultDir=os.getcwd(),
+            wildcard=_("Old GRASS Workspace File (*.grc)|*.grc"))
 
         filename = ''
         if dlg.ShowModal() == wx.ID_OK:
@@ -1362,36 +1533,43 @@ class GMFrame(wx.Frame):
         if filename == '':
             return
 
-        Debug.msg(4, "GMFrame.OnWorkspaceLoadGrcFile(): filename=%s" % filename)
+        Debug.msg(
+            4,
+            "GMFrame.OnWorkspaceLoadGrcFile(): filename=%s" %
+            filename)
 
         # start new map display if no display is available
         if not self.currentPage:
             self.NewDisplay()
 
-        busy = wx.BusyInfo(message = _("Please wait, loading workspace..."),
-                           parent = self)
+        busy = wx.BusyInfo(message=_("Please wait, loading workspace..."),
+                           parent=self)
         wx.Yield()
 
         maptree = None
         for layer in ProcessGrcFile(filename).read(self):
             maptree = self.notebookLayers.GetPage(layer['display']).maptree
-            newItem = maptree.AddLayer(ltype = layer['type'],
-                                       lname = layer['name'],
-                                       lchecked = layer['checked'],
-                                       lopacity = layer['opacity'],
-                                       lcmd = layer['cmd'],
-                                       lgroup = layer['group'])
+            newItem = maptree.AddLayer(ltype=layer['type'],
+                                       lname=layer['name'],
+                                       lchecked=layer['checked'],
+                                       lopacity=layer['opacity'],
+                                       lcmd=layer['cmd'],
+                                       lgroup=layer['group'])
 
             busy.Destroy()
-            
+
         if maptree:
             # reverse list of map layers
             maptree.Map.ReverseListOfLayers()
 
-    def OnWorkspaceSaveAs(self, event = None):
+    def OnWorkspaceSaveAs(self, event=None):
         """Save workspace definition to selected file"""
-        dlg = wx.FileDialog(parent = self, message = _("Choose file to save current workspace"),
-                            defaultDir = os.getcwd(), wildcard = _("GRASS Workspace File (*.gxw)|*.gxw"), style = wx.FD_SAVE)
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose file to save current workspace"),
+            defaultDir=os.getcwd(),
+            wildcard=_("GRASS Workspace File (*.gxw)|*.gxw"),
+            style=wx.FD_SAVE)
 
         filename = ''
         if dlg.ShowModal() == wx.ID_OK:
@@ -1405,9 +1583,14 @@ class GMFrame(wx.Frame):
             filename += ".gxw"
 
         if os.path.exists(filename):
-            dlg = wx.MessageDialog(self, message = _("Workspace file <%s> already exists. "
-                                                     "Do you want to overwrite this file?") % filename,
-                                   caption = _("Save workspace"), style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Workspace file <%s> already exists. "
+                    "Do you want to overwrite this file?") %
+                filename,
+                caption=_("Save workspace"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() != wx.ID_YES:
                 dlg.Destroy()
                 return False
@@ -1418,17 +1601,23 @@ class GMFrame(wx.Frame):
         self.workspaceFile = filename
         self._setTitle()
 
-    def OnWorkspaceSave(self, event = None):
+    def OnWorkspaceSave(self, event=None):
         """Save file with workspace definition"""
         if self.workspaceFile:
-            dlg = wx.MessageDialog(self, message = _("Workspace file <%s> already exists. "
-                                                   "Do you want to overwrite this file?") % \
-                                       self.workspaceFile,
-                                   caption = _("Save workspace"), style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                self,
+                message=_(
+                    "Workspace file <%s> already exists. "
+                    "Do you want to overwrite this file?") %
+                self.workspaceFile,
+                caption=_("Save workspace"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlg.ShowModal() == wx.ID_NO:
                 dlg.Destroy()
             else:
-                Debug.msg(4, "GMFrame.OnWorkspaceSave(): filename=%s" % self.workspaceFile)
+                Debug.msg(
+                    4, "GMFrame.OnWorkspaceSave(): filename=%s" %
+                    self.workspaceFile)
                 self.SaveToWorkspaceFile(self.workspaceFile)
                 self._setTitle()
                 self.workspaceChanged = False
@@ -1437,103 +1626,113 @@ class GMFrame(wx.Frame):
 
     def SaveToWorkspaceFile(self, filename):
         """Save layer tree layout to workspace file
-        
+
         :return: True on success, False on error
         """
-        tmpfile = tempfile.TemporaryFile(mode = 'w+b')
+        tmpfile = tempfile.TemporaryFile(mode='w+b')
         try:
-            WriteWorkspaceFile(lmgr = self, file = tmpfile)
-        except StandardError as e:
-            GError(parent = self,
-                   message = _("Writing current settings to workspace file "
-                               "failed."))
+            WriteWorkspaceFile(lmgr=self, file=tmpfile)
+        except Exception as e:
+            GError(parent=self,
+                   message=_("Writing current settings to workspace file "
+                             "failed."))
             return False
-        
+
         try:
             mfile = open(filename, "w")
             tmpfile.seek(0)
             for line in tmpfile.readlines():
                 mfile.write(line)
         except IOError:
-            GError(parent = self,
-                   message = _("Unable to open file <%s> for writing.") % filename)
+            GError(
+                parent=self,
+                message=_("Unable to open file <%s> for writing.") %
+                filename)
             return False
-        
+
         mfile.close()
-        
+
         return True
-    
-    def OnWorkspaceClose(self, event = None):
+
+    def OnWorkspaceClose(self, event=None):
         """Close file with workspace definition
-        
+
         If workspace has been modified ask user to save the changes.
         """
-        Debug.msg(4, "GMFrame.OnWorkspaceClose(): file=%s" % self.workspaceFile)
-        
+        Debug.msg(
+            4, "GMFrame.OnWorkspaceClose(): file=%s" %
+            self.workspaceFile)
+
         self.OnDisplayCloseAll()
         self.workspaceFile = None
         self.workspaceChanged = False
         self._setTitle()
         self.displayIndex = 0
         self.currentPage = None
-        
-    def OnDisplayClose(self, event = None):
+
+    def OnDisplayClose(self, event=None):
         """Close current map display window
         """
         if self.currentPage and self.GetMapDisplay():
             self.GetMapDisplay().OnCloseWindow(event)
-        
-    def OnDisplayCloseAll(self, event = None):
+
+    def OnDisplayCloseAll(self, event=None):
         """Close all open map display windows
         """
-        for display in self.GetMapDisplay(onlyCurrent = False):
+        for display in self.GetMapDisplay(onlyCurrent=False):
             display.OnCloseWindow(event)
-        
+
     def OnRenameDisplay(self, event):
         """Change Map Display name"""
         name = self.notebookLayers.GetPageText(self.currentPageNum)
-        dlg = wx.TextEntryDialog(self, message = _("Enter new name:"),
-                                 caption = _("Rename Map Display"), defaultValue = name)
+        dlg = wx.TextEntryDialog(
+            self, message=_("Enter new name:"),
+            caption=_("Rename Map Display"),
+            defaultValue=name)
         if dlg.ShowModal() == wx.ID_OK:
             name = dlg.GetValue()
-            self.notebookLayers.SetPageText(page = self.currentPageNum, text = name)
+            self.notebookLayers.SetPageText(
+                page=self.currentPageNum, text=name)
             mapdisplay = self.GetMapDisplay()
-            mapdisplay.SetTitle(_("GRASS GIS {version} Map Display: {name} - Location: {loc}").format(
-                                 version=grass.version()['version'], name=name,
-                                 loc=grass.gisenv()["LOCATION_NAME"]))
+            mapdisplay.SetTitle(
+                _("GRASS GIS {version} Map Display: {name} - Location: {loc}").format(
+                    version=grass.version()['version'],
+                    name=name,
+                    loc=grass.gisenv()["LOCATION_NAME"]))
         dlg.Destroy()
-        
+
     def OnRasterRules(self, event):
         """Launches dialog for raster color rules
         """
-        ctable = RasterColorTable(self, layerTree = self.GetLayerTree())
+        ctable = RasterColorTable(self, layerTree=self.GetLayerTree())
         ctable.Show()
         ctable.CentreOnScreen()
 
     def OnVectorRules(self, event):
         """Launches dialog for vector color rules
         """
-        ctable = VectorColorTable(self, layerTree = self.GetLayerTree(),
-                                  attributeType = 'color')
+        ctable = VectorColorTable(self, layerTree=self.GetLayerTree(),
+                                  attributeType='color')
         ctable.Show()
         ctable.CentreOnScreen()
-        
-    def OnEditImageryGroups(self, event, cmd = None):
+
+    def OnEditImageryGroups(self, event, cmd=None):
         """Show dialog for creating and editing groups.
         """
         dlg = GroupDialog(self)
         dlg.CentreOnScreen()
         dlg.Show()
-        
+
     def OnInstallExtension(self, event):
         """Install extension from GRASS Addons SVN repository"""
-        win = InstallExtensionWindow(self, giface=self._giface, size = (650, 550))
+        win = InstallExtensionWindow(
+            self, giface=self._giface, size=(650, 550))
         win.CentreOnScreen()
         win.Show()
-        
+
     def OnManageExtension(self, event):
         """Uninstall extension"""
-        win = ManageExtensionWindow(self, size = (650, 300))
+        win = ManageExtensionWindow(self, size=(650, 300))
         win.CentreOnScreen()
         win.Show()
 
@@ -1546,14 +1745,18 @@ class GMFrame(wx.Frame):
             self.dialogs['preferences'].CenterOnParent()
 
             dlg.settingsChanged.connect(self.OnSettingsChanged)
-            self.Bind(wx.EVT_CLOSE, lambda evt: self.dialogs.update(preferences=None), dlg)
+            self.Bind(
+                wx.EVT_CLOSE,
+                lambda evt: self.dialogs.update(
+                    preferences=None),
+                dlg)
 
         self.dialogs['preferences'].Show()
-        
+
     def OnNvizPreferences(self, event):
         """Show nviz preferences"""
         if not self.dialogs['nvizPreferences']:
-            dlg = NvizPreferencesDialog(parent = self, giface = self._giface)
+            dlg = NvizPreferencesDialog(parent=self, giface=self._giface)
             self.dialogs['nvizPreferences'] = dlg
             self.dialogs['nvizPreferences'].CenterOnScreen()
 
@@ -1562,8 +1765,8 @@ class GMFrame(wx.Frame):
     def OnHelp(self, event):
         """Show help
         """
-        self._gconsole.RunCmd(['g.manual','-i'])
-        
+        self._gconsole.RunCmd(['g.manual', '-i'])
+
     def OnIClass(self, event=None, cmd=None):
         """Start wxIClass tool
 
@@ -1571,7 +1774,7 @@ class GMFrame(wx.Frame):
         and contained in menu/toolboxes must be event and cmd.
         When called from menu event is always None and cmd is the
         associated command (list containing a module name and parameters).
-        
+
         .. todo::
             This documentation is actually documentation of some
             component related to gui_core/menu.py file.
@@ -1581,10 +1784,10 @@ class GMFrame(wx.Frame):
             GError(_('Unable to launch "Supervised Classification Tool".\n\n'
                      'Reason: %s') % errMsg)
             return
-        
-        win = IClassMapFrame(parent = self, giface = self._giface)
+
+        win = IClassMapFrame(parent=self, giface=self._giface)
         win.CentreOnScreen()
-        
+
         win.Show()
 
     def OnAnimationTool(self, event=None, cmd=None):
@@ -1599,9 +1802,11 @@ class GMFrame(wx.Frame):
         tree = self.GetLayerTree()
         if tree:
             rasters = []
-            for layer in tree.GetSelectedLayers(checkedOnly = False):
-                if tree.GetLayerInfo(layer, key = 'type') == 'raster':
-                    rasters.append(tree.GetLayerInfo(layer, key = 'maplayer').GetName())
+            for layer in tree.GetSelectedLayers(checkedOnly=False):
+                if tree.GetLayerInfo(layer, key='type') == 'raster':
+                    rasters.append(
+                        tree.GetLayerInfo(
+                            layer, key='maplayer').GetName())
             if len(rasters) >= 2:
                 from core.layerlist import LayerList
                 from animation.data import AnimLayer
@@ -1628,23 +1833,24 @@ class GMFrame(wx.Frame):
         try:
             from tplot.frame import TplotFrame
         except ImportError:
-            GError(parent=self, message=_("Unable to start Temporal Plot Tool."))
+            GError(parent=self, message=_(
+                "Unable to start Temporal Plot Tool."))
             return
         frame = TplotFrame(parent=self, giface=self._giface)
         frame.Show()
-          
+
     def OnHistogram(self, event):
         """Init histogram display canvas and tools
         """
         from modules.histogram import HistogramFrame
         win = HistogramFrame(self, giface=self._giface)
-        
+
         win.CentreOnScreen()
         win.Show()
         win.Refresh()
         win.Update()
 
-    def OnMapCalculator(self, event, cmd = ''):
+    def OnMapCalculator(self, event, cmd=''):
         """Init map calculator for interactive creation of mapcalc statements
         """
         if event:
@@ -1652,125 +1858,125 @@ class GMFrame(wx.Frame):
                 cmd = self.GetMenuCmd(event)
             except KeyError:
                 cmd = ['r.mapcalc']
-        
-        win = MapCalcFrame(parent = self,
-                           giface = self._giface,
-                           cmd = cmd[0])
+
+        win = MapCalcFrame(parent=self,
+                           giface=self._giface,
+                           cmd=cmd[0])
         win.CentreOnScreen()
         win.Show()
-    
-    def OnVectorCleaning(self, event, cmd = ''):
+
+    def OnVectorCleaning(self, event, cmd=''):
         """Init interactive vector cleaning
         """
         from modules.vclean import VectorCleaningFrame
-        win = VectorCleaningFrame(parent = self)
+        win = VectorCleaningFrame(parent=self)
         win.CentreOnScreen()
         win.Show()
 
     def OnRasterOutputFormat(self, event):
         """Set raster output format handler"""
-        self.OnMenuCmd(cmd = ['r.external.out'])
+        self.OnMenuCmd(cmd=['r.external.out'])
 
     def OnVectorOutputFormat(self, event):
         """Set vector output format handler"""
-        dlg = GdalOutputDialog(parent = self, ogr = True)
+        dlg = GdalOutputDialog(parent=self, ogr=True)
         dlg.CentreOnScreen()
         dlg.Show()
 
     def OnUnpackRaster(self, event):
         """Unpack raster map handler"""
-        self.OnMenuCmd(cmd = ['r.unpack'])
+        self.OnMenuCmd(cmd=['r.unpack'])
 
     def OnUnpackVector(self, event):
         """Unpack vector map handler"""
-        self.OnMenuCmd(cmd = ['v.unpack'])
+        self.OnMenuCmd(cmd=['v.unpack'])
 
-    def OnImportDxfFile(self, event, cmd = None):
+    def OnImportDxfFile(self, event, cmd=None):
         """Convert multiple DXF layers to GRASS vector map layers"""
-        dlg = DxfImportDialog(parent = self, giface = self._giface)
+        dlg = DxfImportDialog(parent=self, giface=self._giface)
         dlg.CentreOnScreen()
         dlg.Show()
 
-    def OnImportGdalLayers(self, event, cmd = None):
+    def OnImportGdalLayers(self, event, cmd=None):
         """Convert multiple GDAL layers to GRASS raster map layers"""
-        dlg = GdalImportDialog(parent = self, giface = self._giface)
+        dlg = GdalImportDialog(parent=self, giface=self._giface)
         dlg.CentreOnScreen()
         dlg.Show()
 
-    def OnLinkGdalLayers(self, event, cmd = None):
+    def OnLinkGdalLayers(self, event, cmd=None):
         """Link multiple GDAL layers to GRASS raster map layers"""
-        dlg = GdalImportDialog(parent = self, giface = self._giface, link = True)
+        dlg = GdalImportDialog(parent=self, giface=self._giface, link=True)
         dlg.CentreOnScreen()
         dlg.Show()
-        
-    def OnImportOgrLayers(self, event, cmd = None):
+
+    def OnImportOgrLayers(self, event, cmd=None):
         """Convert multiple OGR layers to GRASS vector map layers"""
-        dlg = GdalImportDialog(parent = self, giface = self._giface, ogr = True)
+        dlg = OgrImportDialog(parent=self, giface=self._giface)
         dlg.CentreOnScreen()
         dlg.Show()
-        
-    def OnLinkOgrLayers(self, event, cmd = None):
+
+    def OnLinkOgrLayers(self, event, cmd=None):
         """Links multiple OGR layers to GRASS vector map layers"""
-        dlg = GdalImportDialog(parent = self, giface = self._giface, ogr = True, link = True)
+        dlg = OgrImportDialog(parent=self, giface=self._giface, link=True)
         dlg.CentreOnScreen()
         dlg.Show()
-        
-    def OnAddWS(self, event, cmd = None):
+
+    def OnAddWS(self, event, cmd=None):
         """Add web services layer"""
         from web_services.dialogs import AddWSDialog
-        dlg = AddWSDialog(parent = self, giface = self._giface)
+        dlg = AddWSDialog(parent=self, giface=self._giface)
         dlg.CentreOnScreen()
         x, y = dlg.GetPosition()
         dlg.SetPosition((x, y - 200))
         dlg.Show()
 
-    def OnShowAttributeTable(self, event, selection = None):
+    def OnShowAttributeTable(self, event, selection=None):
         """Show attribute table of the given vector map layer
         """
         if not self.currentPage:
             self.MsgNoLayerSelected()
             return
-        
+
         tree = self.GetLayerTree()
         layer = tree.layer_selected
         # no map layer selected
         if not layer:
             self.MsgNoLayerSelected()
             return
-        
+
         # available only for vector map layers
         try:
-            maptype = tree.GetLayerInfo(layer, key = 'maplayer').type
+            maptype = tree.GetLayerInfo(layer, key='maplayer').type
         except:
             maptype = None
-        
+
         if not maptype or maptype != 'vector':
-            GMessage(parent = self,
-                     message = _("Selected map layer is not vector."))
+            GMessage(parent=self,
+                     message=_("Selected map layer is not vector."))
             return
-        
+
         if not tree.GetLayerInfo(layer):
             return
-        dcmd = tree.GetLayerInfo(layer, key = 'cmd')
+        dcmd = tree.GetLayerInfo(layer, key='cmd')
         if not dcmd:
             return
 
-        dbmanager = AttributeManager(parent = self, id = wx.ID_ANY,
-                                     size = wx.Size(500, 300),
-                                     item = layer, log = self._gconsole,
-                                     selection = selection)
+        dbmanager = AttributeManager(parent=self, id=wx.ID_ANY,
+                                     size=wx.Size(500, 300),
+                                     item=layer, log=self._gconsole,
+                                     selection=selection)
 
         # register ATM dialog
         self.dialogs['atm'].append(dbmanager)
-        
+
         # show ATM window
         dbmanager.Show()
-        
-    def OnNewDisplay(self, event = None):
+
+    def OnNewDisplay(self, event=None):
         """Create new layer tree and map display instance"""
         self.NewDisplay()
 
-    def NewDisplay(self, name = None, show = True):
+    def NewDisplay(self, name=None, show=True):
         """Create new layer tree, which will
         create an associated map display frame
 
@@ -1780,28 +1986,37 @@ class GMFrame(wx.Frame):
         :return: reference to mapdisplay intance
         """
         Debug.msg(1, "GMFrame.NewDisplay(): idx=%d" % self.displayIndex)
-        
-        # make a new page in the bookcontrol for the layer tree (on page 0 of the notebook)
-        self.pg_panel = wx.Panel(self.notebookLayers, id = wx.ID_ANY, style = wx.EXPAND)
+
+        # make a new page in the bookcontrol for the layer tree (on page 0 of
+        # the notebook)
+        self.pg_panel = wx.Panel(
+            self.notebookLayers,
+            id=wx.ID_ANY,
+            style=wx.EXPAND)
         if name:
             dispName = name
         else:
             dispName = "Display " + str(self.displayIndex + 1)
-        self.notebookLayers.AddPage(self.pg_panel, text = dispName, select = True)
+        self.notebookLayers.AddPage(self.pg_panel, text=dispName, select=True)
         self.currentPage = self.notebookLayers.GetCurrentPage()
-        
-        # create layer tree (tree control for managing GIS layers)  and put on new notebook page
-        self.currentPage.maptree = LayerTree(self.currentPage, giface = self._giface,
-                                             id = wx.ID_ANY, pos = wx.DefaultPosition,
-                                             size = wx.DefaultSize, style = wx.TR_HAS_BUTTONS |
-                                             wx.TR_LINES_AT_ROOT| wx.TR_HIDE_ROOT |
-                                             wx.TR_DEFAULT_STYLE| wx.NO_BORDER | wx.FULL_REPAINT_ON_RESIZE,
-                                             idx = self.displayIndex, lmgr = self, notebook = self.notebookLayers,
-                                             showMapDisplay = show)
-        
+
+        # create layer tree (tree control for managing GIS layers)  and put on
+        # new notebook page
+        self.currentPage.maptree = LayerTree(
+            self.currentPage, giface=self._giface, id=wx.ID_ANY,
+            pos=wx.DefaultPosition, size=wx.DefaultSize,
+            style=wx.TR_HAS_BUTTONS | wx.TR_LINES_AT_ROOT | wx.TR_HIDE_ROOT | wx.
+            TR_DEFAULT_STYLE | wx.NO_BORDER | wx.FULL_REPAINT_ON_RESIZE,
+            idx=self.displayIndex, lmgr=self, notebook=self.notebookLayers,
+            showMapDisplay=show)
+
         # layout for controls
         cb_boxsizer = wx.BoxSizer(wx.VERTICAL)
-        cb_boxsizer.Add(self.GetLayerTree(), proportion = 1, flag = wx.EXPAND, border = 1)
+        cb_boxsizer.Add(
+            self.GetLayerTree(),
+            proportion=1,
+            flag=wx.EXPAND,
+            border=1)
         self.currentPage.SetSizer(cb_boxsizer)
         cb_boxsizer.Fit(self.GetLayerTree())
         self.currentPage.Layout()
@@ -1818,23 +2033,23 @@ class GMFrame(wx.Frame):
         mapdisplay.ending3dMode.connect(self.RemoveNvizTools)
 
         # use default window layout
-        if UserSettings.Get(group = 'general', key = 'defWindowPos', subkey = 'enabled'):
-            dim = UserSettings.Get(group = 'general', key = 'defWindowPos', subkey = 'dim')
+        if UserSettings.Get(
+                group='general', key='defWindowPos', subkey='enabled'):
+            dim = UserSettings.Get(
+                group='general',
+                key='defWindowPos',
+                subkey='dim')
             idx = 4 + self.displayIndex * 4
             try:
                 x, y = map(int, dim.split(',')[idx:idx + 2])
                 w, h = map(int, dim.split(',')[idx + 2:idx + 4])
                 self.GetMapDisplay().SetPosition((x, y))
-                # map display is sized with different height, this
-                # extra call "solves" the issue, strangely trunk
-                # doens't have this issue (TODO: investigate why)
-                self.GetMapDisplay().SetSize((w, h-1)) 
                 self.GetMapDisplay().SetSize((w, h))
             except:
                 pass
-        
+
         self.displayIndex += 1
-        
+
         return self.GetMapDisplay()
 
     def _onMapDisplayFocus(self, notebookLayerPage):
@@ -1858,17 +2073,18 @@ class GMFrame(wx.Frame):
             if self.GetLayerNotebook().GetPage(page) != mapDisplayPage:
                 mapdisp.Disable3dMode()
 
-    def OnAddMaps(self, event = None):
+    def OnAddMaps(self, event=None):
         """Add selected map layers into layer tree"""
-        dialog = MapLayersDialog(parent = self, title = _("Add selected map layers into layer tree"))
+        dialog = MapLayersDialog(parent=self, title=_(
+            "Add selected map layers into layer tree"))
         dialog.applyAddingMapLayers.connect(self.AddMaps)
         val = dialog.ShowModal()
-        
+
         if val == wx.ID_OK:
-            self.AddMaps(dialog.GetMapLayers(), dialog.GetLayerType(cmd = True))
+            self.AddMaps(dialog.GetMapLayers(), dialog.GetLayerType(cmd=True))
         dialog.Destroy()
 
-    def AddMaps(self, mapLayers, ltype, check = False):
+    def AddMaps(self, mapLayers, ltype, check=False):
         """Add map layers to layer tree.
 
         :param list mapLayers: list of map names
@@ -1879,34 +2095,33 @@ class GMFrame(wx.Frame):
         # start new map display if no display is available
         if not self.currentPage:
             self.NewDisplay()
-            
+
         maptree = self.GetLayerTree()
-        
+
         for layerName in mapLayers:
             if ltype == 'raster':
                 cmd = ['d.rast', 'map=%s' % layerName]
-                wxType = 'raster'
             elif ltype == 'raster_3d':
                 cmd = ['d.rast3d', 'map=%s' % layerName]
-                wxType = '3d-raster'
             elif ltype == 'vector':
-                cmd = ['d.vect', 'map=%s' % layerName] + GetDisplayVectSettings()
-                wxType = 'vector'
+                cmd = [
+                    'd.vect', 'map=%s' %
+                    layerName] + GetDisplayVectSettings()
             else:
-                GError(parent = self,
-                       message = _("Unsupported map layer type <%s>.") % ltype)
+                GError(parent=self,
+                       message=_("Unsupported map layer type <%s>.") % ltype)
                 return
-            
-            newItem = maptree.AddLayer(ltype = wxType,
-                                       lname = layerName,
-                                       lchecked = check,
-                                       lopacity = 1.0,
-                                       lcmd = cmd,
-                                       lgroup = None)
+
+            newItem = maptree.AddLayer(ltype=ltype,
+                                       lname=layerName,
+                                       lchecked=check,
+                                       lopacity=1.0,
+                                       lcmd=cmd,
+                                       lgroup=None)
 
     def _updateCurrentMap(self, **kwargs):
         """Updates map of the current map window."""
-        if kwargs.has_key('delay'):
+        if 'delay' in kwargs:
             self.GetMapDisplay().GetWindow().UpdateMap(delay=kwargs['delay'])
         else:
             self.GetMapDisplay().GetWindow().UpdateMap()
@@ -1915,8 +2130,8 @@ class GMFrame(wx.Frame):
         """Decides wheter the map should be added to layer tree."""
         if add is None:
             # add new map into layer if globally enabled
-            if UserSettings.Get(group = 'cmd',
-                                key = 'addNewLayer', subkey = 'enabled'):
+            if UserSettings.Get(group='cmd',
+                                key='addNewLayer', subkey='enabled'):
                 self.AddOrUpdateMap(name, ltype)
         elif add:
             # add new map into layer tree
@@ -1924,71 +2139,61 @@ class GMFrame(wx.Frame):
         else:
             # update the map
             display = self.GetMapDisplay()
-            display.GetWindow().UpdateMap(render = True)
+            display.GetWindow().UpdateMap(render=True)
 
     def AddOrUpdateMap(self, mapName, ltype):
         """Add map layer or update"""
         # start new map display if no display is available
-
-        # TODO: standardize type identifiers
-        convertType = {'raster': 'raster',
-                       '3d-raster': 'raster_3d',
-                       'vector': 'vector'}
-        try:
-            grassType = convertType[ltype]
-        except KeyError:
-            if ltype in convertType.values():
-                grassType = ltype
-            else:
-                GError(parent = self,
-                       message = _("Unsupported map layer type <%s>.") % ltype)
-                return
+        if ltype not in ['raster', 'raster_3d', 'vector']:
+            GError(parent=self,
+                   message=_("Unsupported map layer type <%s>.") % ltype)
+            return
 
         if not self.currentPage:
-            self.AddMaps([mapName], grassType, check = True)
+            self.AddMaps([mapName], ltype, check=True)
         else:
             display = self.GetMapDisplay()
             mapLayers = map(lambda x: x.GetName(),
-                            display.GetMap().GetListOfLayers(ltype = ltype))
+                            display.GetMap().GetListOfLayers(ltype=ltype))
             if mapName in mapLayers:
-                display.GetWindow().UpdateMap(render = True)
+                display.GetWindow().UpdateMap(render=True)
             else:
-                self.AddMaps([mapName], grassType, check = True)
+                self.AddMaps([mapName], ltype, check=True)
 
     def OnAddRaster(self, event):
         """Add raster map layer"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
-        
+            self.NewDisplay(show=True)
+
         self.notebook.SetSelectionByName('layers')
         self.GetLayerTree().AddLayer('raster')
-        
+
     def OnAddRasterMisc(self, event):
         """Create misc raster popup-menu"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
-        
-        self._popupMenu((('layer3d-raster', self.OnAddRaster3D),
+            self.NewDisplay(show=True)
+
+        self._popupMenu((('layerRaster_3d', self.OnAddRaster3D),
                          (None, None),
-                         ('layerRgb',    self.OnAddRasterRGB),
-                         ('layerHis',    self.OnAddRasterHIS),
+                         ('layerRgb', self.OnAddRasterRGB),
+                         ('layerHis', self.OnAddRasterHIS),
                          (None, None),
                          ('layerShaded', self.OnAddRasterShaded),
                          (None, None),
                          ('layerRastarrow', self.OnAddRasterArrow),
-                         ('layerRastnum',   self.OnAddRasterNum)))
-        
+                         ('layerRastnum', self.OnAddRasterNum)))
+
         # show map display
         self.GetMapDisplay().Show()
-        
+
     def OnAddVector(self, event):
         """Add vector map to the current layer tree"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
-        
+            self.NewDisplay(show=True)
+
         self.notebook.SetSelectionByName('layers')
         self.GetLayerTree().AddLayer('vector')
 
@@ -1996,11 +2201,11 @@ class GMFrame(wx.Frame):
         """Create misc vector popup-menu"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
+            self.NewDisplay(show=True)
 
         self._popupMenu((('layerThememap', self.OnAddVectorTheme),
-                         ('layerThemechart',    self.OnAddVectorChart)))
-        
+                         ('layerThemechart', self.OnAddVectorChart)))
+
         # show map display
         self.GetMapDisplay().Show()
 
@@ -2018,22 +2223,22 @@ class GMFrame(wx.Frame):
         """Create decoration overlay menu"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
+            self.NewDisplay(show=True)
 
-        self._popupMenu((('layerGrid',     self.OnAddGrid),
-                         ('layerLabels',   self.OnAddLabels),
+        self._popupMenu((('layerGrid', self.OnAddGrid),
+                         ('layerLabels', self.OnAddLabels),
                          ('layerGeodesic', self.OnAddGeodesic),
-                         ('layerRhumb',    self.OnAddRhumb),
+                         ('layerRhumb', self.OnAddRhumb),
                          (None, None),
-                         ('layerCmd',      self.OnAddCommand)))
-        
+                         ('layerCmd', self.OnAddCommand)))
+
         # show map display
         self.GetMapDisplay().Show()
-        
+
     def OnAddRaster3D(self, event):
         """Add 3D raster map to the current layer tree"""
         self.notebook.SetSelectionByName('layers')
-        self.GetLayerTree().AddLayer('3d-raster')
+        self.GetLayerTree().AddLayer('raster_3d')
 
     def OnAddRasterRGB(self, event):
         """Add RGB raster map to the current layer tree"""
@@ -2086,7 +2291,7 @@ class GMFrame(wx.Frame):
         """Add command line map layer to the current layer tree"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
+            self.NewDisplay(show=True)
 
         self.notebook.SetSelectionByName('layers')
         self.GetLayerTree().AddLayer('command')
@@ -2098,7 +2303,7 @@ class GMFrame(wx.Frame):
         """Add layer group"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
+            self.NewDisplay(show=True)
 
         self.notebook.SetSelectionByName('layers')
         self.GetLayerTree().AddLayer('group')
@@ -2125,7 +2330,7 @@ class GMFrame(wx.Frame):
         """Add vector labels map layer to the current layer tree"""
         # start new map display if no display is available
         if not self.currentPage:
-            self.NewDisplay(show = True)
+            self.NewDisplay(show=True)
 
         self.notebook.SetSelectionByName('layers')
         self.GetLayerTree().AddLayer('labels')
@@ -2140,7 +2345,8 @@ class GMFrame(wx.Frame):
             self.MsgNoLayerSelected()
             return
 
-        if UserSettings.Get(group = 'manager', key = 'askOnRemoveLayer', subkey = 'enabled'):
+        if UserSettings.Get(
+                group='manager', key='askOnRemoveLayer', subkey='enabled'):
             layerName = ''
             for item in self.GetLayerTree().GetSelections():
                 name = self.GetLayerTree().GetItemText(item)
@@ -2150,33 +2356,35 @@ class GMFrame(wx.Frame):
                 else:
                     layerName += '<' + name + '>,\n'
             layerName = layerName.rstrip(',\n')
-            
-            if len(layerName) > 2: # <>
+
+            if len(layerName) > 2:  # <>
                 message = _("Do you want to remove map layer(s)\n%s\n"
                             "from layer tree?") % layerName
             else:
                 message = _("Do you want to remove selected map layer(s) "
                             "from layer tree?")
 
-            dlg = wx.MessageDialog (parent = self, message = message,
-                                    caption = _("Remove map layer"),
-                                    style  =  wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                parent=self,
+                message=message,
+                caption=_("Remove map layer"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
 
             if dlg.ShowModal() != wx.ID_YES:
                 dlg.Destroy()
                 return
-            
+
             dlg.Destroy()
 
         for layer in self.GetLayerTree().GetSelections():
-            if self.GetLayerTree().GetLayerInfo(layer, key = 'type') == 'group':
+            if self.GetLayerTree().GetLayerInfo(layer, key='type') == 'group':
                 self.GetLayerTree().DeleteChildren(layer)
             self.GetLayerTree().Delete(layer)
-        
+
     def OnKeyDown(self, event):
         """Key pressed"""
         kc = event.GetKeyCode()
-        
+
         if event.ControlDown():
             if kc == wx.WXK_TAB:
                 # switch layer list / command output
@@ -2184,19 +2392,19 @@ class GMFrame(wx.Frame):
                     self.notebook.SetSelectionByName('output')
                 else:
                     self.notebook.SetSelectionByName('layers')
-        
+
         try:
             ckc = chr(kc)
         except ValueError:
             event.Skip()
             return
-        
+
         if event.CtrlDown():
             if kc == 'R':
                 self.OnAddRaster(None)
             elif kc == 'V':
                 self.OnAddVector(None)
-        
+
         event.Skip()
 
     def OnCloseWindow(self, event):
@@ -2215,34 +2423,34 @@ class GMFrame(wx.Frame):
             self._closeWindow(event)
             if ret == wx.ID_YES:
                 self._quitGRASS()
-        
+
     def _closeWindow(self, event):
         """Close wxGUI"""
         # save command protocol if actived
         if self.goutput.btnCmdProtocol.GetValue():
             self.goutput.CmdProtocolSave()
-        
+
         if not self.currentPage:
             self._auimgr.UnInit()
             self.Destroy()
             return
-        
-        # save changes in the workspace
-        maptree = self.GetLayerTree()
-        if self.workspaceChanged and \
-                UserSettings.Get(group = 'manager', key = 'askOnQuit', subkey = 'enabled'):
+
+        if UserSettings.Get(group='manager', key='askOnQuit',
+                            subkey='enabled') and self.workspaceChanged:
+            maptree = self.GetLayerTree()
+
             if self.workspaceFile:
                 message = _("Do you want to save changes in the workspace?")
             else:
                 message = _("Do you want to store current settings "
                             "to workspace file?")
-            
+
             # ask user to save current settings
             if maptree.GetCount() > 0:
                 dlg = wx.MessageDialog(self,
-                                       message = message,
-                                       caption = _("Quit GRASS GUI"),
-                                       style = wx.YES_NO | wx.YES_DEFAULT |
+                                       message=message,
+                                       caption=_("Quit GRASS GUI"),
+                                       style=wx.YES_NO | wx.YES_DEFAULT |
                                        wx.CANCEL | wx.ICON_QUESTION | wx.CENTRE)
                 ret = dlg.ShowModal()
                 dlg.Destroy()
@@ -2252,21 +2460,22 @@ class GMFrame(wx.Frame):
                     else:
                         self.SaveToWorkspaceFile(self.workspaceFile)
                 elif ret == wx.ID_CANCEL:
-                    # when called from menu, it gets CommandEvent and not CloseEvent
+                    # when called from menu, it gets CommandEvent and not
+                    # CloseEvent
                     if hasattr(event, 'Veto'):
                         event.Veto()
                     return
-        
+
         # don't ask any more...
-        UserSettings.Set(group = 'manager', key = 'askOnQuit', subkey = 'enabled',
-                         value = False)
-        
+        UserSettings.Set(group='manager', key='askOnQuit', subkey='enabled',
+                         value=False)
+
         self.OnDisplayCloseAll()
-        
+
         self.notebookLayers.DeleteAllPages()
         self._auimgr.UnInit()
         self.Destroy()
-        
+
     def _quitGRASS(self):
         """Quit GRASS terminal"""
         try:
@@ -2278,18 +2487,18 @@ class GMFrame(wx.Frame):
         Debug.msg(1, "Exiting shell with pid={}".format(shellPid))
         import signal
         os.kill(shellPid, signal.SIGTERM)
-        
+
     def MsgNoLayerSelected(self):
         """Show dialog message 'No layer selected'"""
-        wx.MessageBox(parent = self,
-                      message = _("No map layer selected. Operation canceled."),
-                      caption = _("Message"),
-                      style = wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
-                      
-    def MsgDisplayResolution(self, limitText = None):
+        wx.MessageBox(parent=self,
+                      message=_("No map layer selected. Operation canceled."),
+                      caption=_("Message"),
+                      style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
+
+    def MsgDisplayResolution(self, limitText=None):
         """Returns dialog for d.rast.num, d.rast.arrow
             when display resolution is not constrained
-            
+
         :param limitText: adds a note about cell limit
         """
         message = _("Display resolution is currently not constrained to "
@@ -2299,8 +2508,8 @@ class GMFrame(wx.Frame):
                     "the resolution?")
         if limitText:
             message += "\n\n%s" % _(limitText)
-        dlg = wx.MessageDialog(parent = self,
-                               message = message,
-                               caption = _("Constrain map to region geometry?"),
-                               style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+        dlg = wx.MessageDialog(
+            parent=self, message=message,
+            caption=_("Constrain map to region geometry?"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
         return dlg
diff --git a/gui/wxpython/lmgr/giface.py b/gui/wxpython/lmgr/giface.py
index 1aa3809..bb9af66 100644
--- a/gui/wxpython/lmgr/giface.py
+++ b/gui/wxpython/lmgr/giface.py
@@ -29,6 +29,7 @@ class Layer(object):
         Currently implemented without specifying the interface.
         It only provides all attributes of existing layer as used in lmgr.
     """
+
     def __init__(self, pydata):
         self._pydata = pydata
 
@@ -44,13 +45,19 @@ class Layer(object):
 
 class LayerList(object):
     """@implements core.giface.Layer"""
+
     def __init__(self, tree):
         self._tree = tree
 
+    def __len__(self):
+        return len([layer for layer in self])
+
     def __iter__(self):
         """Iterates over the contents of the list."""
-        for item in self._tree.GetSelectedLayer(multi=True):
+        item = self._tree.GetFirstChild(self._tree.root)[0]
+        while item and item.IsOk():
             yield Layer(self._tree.GetPyData(item))
+            item = self._tree.GetNextItem(item)
 
     def __getitem__(self, index):
         """Select a layer from the LayerList using the index."""
@@ -90,7 +97,7 @@ class LayerList(object):
 
         Launches property dialog if needed (raster, vector, etc.)
 
-        :param ltype: layer type (raster, vector, 3d-raster, ...)
+        :param ltype: layer type (raster, vector, raster_3d, ...)
         :param name: layer name
         :param checked: if True layer is checked
         :param opacity: layer opacity level
@@ -128,6 +135,7 @@ class LayerList(object):
 
 class LayerManagerGrassInterface(object):
     """@implements core::giface::GrassInterface"""
+
     def __init__(self, lmgr):
         """Costructor is specific to the current implementation.
 
@@ -195,6 +203,23 @@ class LayerManagerGrassInterface(object):
     def UpdateCmdHistory(self, cmd):
         self.lmgr.goutput.GetPrompt().UpdateCmdHistory(cmd)
 
+    def ShowStatusbar(self, show=True):
+        self.lmgr.GetMapDisplay().statusbarManager.Show(show)
+
+    def IsStatusbarShown(self):
+        return self.lmgr.GetMapDisplay().statusbarManager.IsShown()
+
+    def ShowAllToolbars(self, show=True):
+        if not show:  # hide
+            action = self.lmgr.GetMapDisplay().RemoveToolbar
+        else:
+            action = self.lmgr.GetMapDisplay().AddToolbar
+        for toolbar in self.lmgr.GetMapDisplay().GetToolbarNames():
+            action(toolbar)
+
+    def AreAllToolbarsShown(self):
+        return self.lmgr.GetMapDisplay().GetMapToolbar().IsShown()
+
 
 class LayerManagerGrassInterfaceForMapDisplay(object):
     """Provides reference only to the given layer list (according to tree),
@@ -202,6 +227,7 @@ class LayerManagerGrassInterfaceForMapDisplay(object):
 
         @implements core::giface::GrassInterface
     """
+
     def __init__(self, giface, tree):
         """
         :param giface: original grass interface
@@ -211,7 +237,8 @@ class LayerManagerGrassInterfaceForMapDisplay(object):
         self.tree = tree
 
         # Signal emitted to request updating of map
-        self.updateMap = Signal('LayerManagerGrassInterfaceForMapDisplay.updateMap')
+        self.updateMap = Signal(
+            'LayerManagerGrassInterfaceForMapDisplay.updateMap')
 
     def GetLayerTree(self):
         return self.tree
diff --git a/gui/wxpython/lmgr/layertree.py b/gui/wxpython/lmgr/layertree.py
index c1ef3c2..a061613 100644
--- a/gui/wxpython/lmgr/layertree.py
+++ b/gui/wxpython/lmgr/layertree.py
@@ -10,7 +10,7 @@ Classes:
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
- 
+
 @author Michael Barton (Arizona State University)
 @author Jachym Cepicky (Mendel University of Agriculture)
 @author Martin Landa <landa.martin gmail.com>
@@ -22,106 +22,108 @@ try:
     import wx.lib.agw.customtreectrl as CT
 except ImportError:
     import wx.lib.customtreectrl as CT
-import wx.lib.buttons  as buttons
+import wx.lib.buttons as buttons
 try:
-    import treemixin 
+    import treemixin
 except ImportError:
     from wx.lib.mixins import treemixin
 
 from grass.script import core as grass
 from grass.script import vector as gvector
 
-from core                 import globalvar
-from gui_core.dialogs     import SqlQueryFrame, SetOpacityDialog, TextEntryDialog
-from gui_core.forms       import GUI
-from mapdisp.frame        import MapFrame
-from core.render          import Map
-from wxplot.histogram     import HistogramPlotFrame
-from core.utils           import GetLayerNameFromCmd, ltype2command, _
-from wxplot.profile       import ProfileFrame
-from core.debug           import Debug
-from core.settings        import UserSettings, GetDisplayVectSettings
-from vdigit.main          import haveVDigit
-from core.gcmd            import GWarning, GError, RunCommand
-from icons.icon           import MetaIcon
+from core import globalvar
+from gui_core.dialogs import SqlQueryFrame, SetOpacityDialog, TextEntryDialog
+from gui_core.forms import GUI
+from mapdisp.frame import MapFrame
+from core.render import Map
+from wxplot.histogram import HistogramPlotFrame
+from core.utils import GetLayerNameFromCmd, ltype2command, _
+from wxplot.profile import ProfileFrame
+from core.debug import Debug
+from core.settings import UserSettings, GetDisplayVectSettings
+from vdigit.main import haveVDigit
+from core.gcmd import GWarning, GError, RunCommand
+from icons.icon import MetaIcon
 from web_services.dialogs import SaveWMSLayerDialog
-from gui_core.widgets import GenericValidator
+from gui_core.widgets import MapValidator
 from lmgr.giface import LayerManagerGrassInterfaceForMapDisplay
 from core.giface import Notification
 
 TREE_ITEM_HEIGHT = 25
 
 LMIcons = {
-    'rastImport' : MetaIcon(img = 'layer-import',
-                            label = _('Import raster data')),
-    'rastLink'   : MetaIcon(img = 'layer-import',
-                            label = _('Link external raster data')),
-    'rastUnpack' : MetaIcon(img = 'layer-import',
-                            label = _('Unpack raster map')),
-    'rastOut'    : MetaIcon(img = 'layer-export',
-                            label = _('Set raster output format')),
-    'vectImport' : MetaIcon(img = 'layer-import',
-                            label = _('Import vector data')),
-    'vectLink'   : MetaIcon(img = 'layer-import',
-                                    label = _('Link external vector data')),
-    'vectUnpack' : MetaIcon(img = 'layer-import',
-                            label = _('Unpack vector map')),
-    'vectOut'    : MetaIcon(img = 'layer-export',
-                            label = _('Set vector output format')),
-    'wmsImport'  : MetaIcon(img = 'layer-wms-add',
-                            label = _('Import data from WMS server')),
-    'layerCmd'     : MetaIcon(img = 'layer-command-add',
-                            label = _('Add command layer')),
-    'quit'       : MetaIcon(img = 'quit',
-                            label = _('Quit')),
-    'layerRaster'    : MetaIcon(img = 'raster',
-                            label = _('Add raster map layer')),
-    'layerRgb'     : MetaIcon(img = 'rgb',
-                            label = _('Add RGB map layer')),
-    'layerHis'     : MetaIcon(img = 'his',
-                                    label = _('Add HIS map layer')),
-    'layerShaded'  : MetaIcon(img = 'shaded-relief',
-                              label = _('Add shaded relief map layer')),
-    'layerRastarrow'  : MetaIcon(img = 'aspect-arrow',
-                            label = _('Add raster flow arrows')),
-    'layerRastnum'    : MetaIcon(img = 'cell-cats',
-                            label = _('Add raster cell numbers')),
-    'layerVector'    : MetaIcon(img = 'vector',
-                            label = _('Add vector map layer')),
-    'layerThememap': MetaIcon(img = 'vector-thematic',
-                            label = _('Add thematic area (choropleth) map layer')),
-    'layerThemechart'   : MetaIcon(img = 'vector-chart',
-                            label = _('Add thematic chart layer')),
-    'layerGrid'    : MetaIcon(img = 'layer-grid-add',
-                            label = _('Add grid layer')),
-    'layerGeodesic': MetaIcon(img = 'shortest-distance',
-                            label = _('Add geodesic line layer')),
-    'layerRhumb'   : MetaIcon(img = 'shortest-distance',
-                            label = _('Add rhumbline layer')),
-    'layerLabels'  : MetaIcon(img = 'label',
-                            label = _('Add labels')),
-    'layer3d-raster'  : MetaIcon(img = 'raster3d',
-                            label = _('Add 3D raster map layer'),
-                            desc  =  _('Note that 3D raster data are rendered only in 3D view mode')),
-    'layerWms'      :  MetaIcon(img = 'wms',
-                            label = _('Add WMS layer.')),
-    'layerOptions'  : MetaIcon(img = 'options',
-                               label = _('Set options')),
-    'layerEdited'     : MetaIcon(img = 'layer-edit',
-                               label = _("Editing mode")),
-    'layerBgmap'     : MetaIcon(img = 'layer-bottom',
-                               label = _("Background vector map"))
-    }
+    'rastImport': MetaIcon(img='layer-import',
+                           label=_('Import raster data')),
+    'rastLink': MetaIcon(img='layer-import',
+                         label=_('Link external raster data')),
+    'rastUnpack': MetaIcon(img='layer-import',
+                           label=_('Unpack GRASS raster map')),
+    'rastOut': MetaIcon(img='layer-export',
+                        label=_('Set raster output format')),
+    'vectImport': MetaIcon(img='layer-import',
+                           label=_('Import vector data')),
+    'vectLink': MetaIcon(img='layer-import',
+                         label=_('Link external vector data')),
+    'vectUnpack': MetaIcon(img='layer-import',
+                           label=_('Unpack GRASS vector map')),
+    'vectOut': MetaIcon(img='layer-export',
+                        label=_('Set vector output format')),
+    'wmsImport': MetaIcon(img='layer-wms-add',
+                          label=_('Import data from WMS server')),
+    'layerCmd': MetaIcon(img='layer-command-add',
+                         label=_('Add command layer')),
+    'quit': MetaIcon(img='quit',
+                     label=_('Quit')),
+    'layerRaster': MetaIcon(img='raster',
+                            label=_('Add raster map layer')),
+    'layerRgb': MetaIcon(img='rgb',
+                         label=_('Add RGB map layer')),
+    'layerHis': MetaIcon(img='his',
+                         label=_('Add HIS map layer')),
+    'layerShaded': MetaIcon(img='shaded-relief',
+                            label=_('Add shaded relief map layer')),
+    'layerRastarrow': MetaIcon(img='aspect-arrow',
+                               label=_('Add raster flow arrows')),
+    'layerRastnum': MetaIcon(img='cell-cats',
+                             label=_('Add raster cell numbers')),
+    'layerVector': MetaIcon(img='vector',
+                            label=_('Add vector map layer')),
+    'layerThememap': MetaIcon(img='vector-thematic',
+                              label=_('Add thematic (choropleth) vector map layer')),
+    'layerThemechart': MetaIcon(img='vector-chart',
+                                label=_('Add thematic chart layer')),
+    'layerGrid': MetaIcon(img='layer-grid-add',
+                          label=_('Add grid layer')),
+    'layerGeodesic': MetaIcon(img='shortest-distance',
+                              label=_('Add geodesic line layer')),
+    'layerRhumb': MetaIcon(img='shortest-distance',
+                           label=_('Add rhumbline layer')),
+    'layerLabels': MetaIcon(img='label',
+                            label=_('Add labels')),
+    'layerRaster_3d': MetaIcon(img='raster3d',
+                               label=_('Add 3D raster map layer'),
+                               desc=_('Note that 3D raster data are rendered only in 3D view mode')),
+    'layerWms': MetaIcon(img='wms',
+                         label=_('Add WMS layer.')),
+    'layerOptions': MetaIcon(img='options',
+                             label=_('Set options')),
+    'layerEdited': MetaIcon(img='layer-edit',
+                            label=_("Editing mode")),
+    'layerBgmap': MetaIcon(img='layer-bottom',
+                           label=_("Background vector map"))
+}
+
 
 class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
     """Creates layer tree structure
     """
+
     def __init__(self, parent, giface,
-                 id = wx.ID_ANY, style = wx.SUNKEN_BORDER,
-                 ctstyle = CT.TR_HAS_BUTTONS | CT.TR_HAS_VARIABLE_ROW_HEIGHT |
+                 id=wx.ID_ANY, style=wx.SUNKEN_BORDER,
+                 ctstyle=CT.TR_HAS_BUTTONS | CT.TR_HAS_VARIABLE_ROW_HEIGHT |
                  CT.TR_HIDE_ROOT | CT.TR_ROW_LINES | CT.TR_FULL_ROW_HIGHLIGHT |
                  CT.TR_MULTIPLE, **kwargs):
-        
+
         if 'style' in kwargs:
             ctstyle |= kwargs['style']
             del kwargs['style']
@@ -129,7 +131,8 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         del kwargs['idx']
         self.lmgr = kwargs['lmgr']
         del kwargs['lmgr']
-        self.notebook = kwargs['notebook']   # GIS Manager notebook for layer tree
+        # GIS Manager notebook for layer tree
+        self.notebook = kwargs['notebook']
         del kwargs['notebook']
         showMapDisplay = kwargs['showMapDisplay']
         del kwargs['showMapDisplay']
@@ -146,78 +149,94 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         # layer change requires a rerendering
         # (used to request rendering only when layer changes are finished)
         self.rerender = False
-        self.hitCheckbox = False             # if cursor points at layer checkbox (to cancel selection changes)
+        # if cursor points at layer checkbox (to cancel selection changes)
+        self.hitCheckbox = False
         self.forceCheck = False              # force check layer if CheckItem is called
-        
+
         try:
             ctstyle |= CT.TR_ALIGN_WINDOWS
         except AttributeError:
             pass
-        
+
         if globalvar.hasAgw:
-            super(LayerTree, self).__init__(parent, id, agwStyle = ctstyle, **kwargs)
+            super(
+                LayerTree,
+                self).__init__(
+                parent,
+                id,
+                agwStyle=ctstyle,
+                **kwargs)
         else:
-            super(LayerTree, self).__init__(parent, id, style = ctstyle, **kwargs)
+            super(
+                LayerTree,
+                self).__init__(
+                parent,
+                id,
+                style=ctstyle,
+                **kwargs)
         self.SetName("LayerTree")
         self.SetBackgroundColour("white")
-        
-        ### SetAutoLayout() causes that no vertical scrollbar is displayed
-        ### when some layers are not visible in layer tree
+
+        # SetAutoLayout() causes that no vertical scrollbar is displayed
+        # when some layers are not visible in layer tree
         # self.SetAutoLayout(True)
         self.SetGradientStyle(1)
         self.EnableSelectionGradient(True)
         self._setGradient()
-        
+
         # init associated map display
-        pos = wx.Point((self.displayIndex + 1) * 25, (self.displayIndex + 1) * 25)
-        self._gifaceForDisplay = LayerManagerGrassInterfaceForMapDisplay(self._giface,
-                                                                         self)
+        pos = wx.Point(
+            (self.displayIndex + 1) * 25,
+            (self.displayIndex + 1) * 25)
+        self._gifaceForDisplay = LayerManagerGrassInterfaceForMapDisplay(
+            self._giface, self)
         self.mapdisplay = MapFrame(self, giface=self._gifaceForDisplay,
-                                   id = wx.ID_ANY, pos = pos,
-                                   size = globalvar.MAP_WINDOW_SIZE,
-                                   style = wx.DEFAULT_FRAME_STYLE,
+                                   id=wx.ID_ANY, pos=pos,
+                                   size=globalvar.MAP_WINDOW_SIZE,
+                                   style=wx.DEFAULT_FRAME_STYLE,
                                    tree=self, notebook=self.notebook,
-                                   lmgr = self.lmgr, page = self.treepg,
-                                   Map = self.Map)
-        
+                                   lmgr=self.lmgr, page=self.treepg,
+                                   Map=self.Map)
+
         self.mapdisplay.SetTitleNumber(self.displayIndex + 1)
-        
+
         # show new display
         if showMapDisplay is True:
             self.mapdisplay.Show()
             self.mapdisplay.Refresh()
             self.mapdisplay.Update()
-        
+
         self.root = self.AddRoot(_("Map Layers"))
         self.SetPyData(self.root, (None, None))
-        
+
         # create image list to use with layer tree
         self.bmpsize = (16, 16)
-        il = wx.ImageList(16, 16, mask = False)
-        trart = wx.ArtProvider.GetBitmap(wx.ART_FILE_OPEN, wx.ART_OTHER, (16, 16))
+        il = wx.ImageList(16, 16, mask=False)
+        trart = wx.ArtProvider.GetBitmap(
+            wx.ART_FILE_OPEN, wx.ART_OTHER, (16, 16))
         self.folder_open = il.Add(trart)
         trart = wx.ArtProvider.GetBitmap(wx.ART_FOLDER, wx.ART_OTHER, (16, 16))
         self.folder = il.Add(trart)
         self._setIcons(il)
         self.AssignImageList(il)
 
-        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED,   self.OnActivateLayer)
-        self.Bind(wx.EVT_TREE_SEL_CHANGED,      self.OnChangeSel)
-        self.Bind(wx.EVT_TREE_SEL_CHANGING,     self.OnChangingSel)
-        self.Bind(CT.EVT_TREE_ITEM_CHECKED,     self.OnLayerChecked)
-        self.Bind(CT.EVT_TREE_ITEM_CHECKING,    self.OnLayerChecking)
-        self.Bind(wx.EVT_TREE_DELETE_ITEM,      self.OnDeleteLayer)
+        self.Bind(wx.EVT_TREE_ITEM_ACTIVATED, self.OnActivateLayer)
+        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnChangeSel)
+        self.Bind(wx.EVT_TREE_SEL_CHANGING, self.OnChangingSel)
+        self.Bind(CT.EVT_TREE_ITEM_CHECKED, self.OnLayerChecked)
+        self.Bind(CT.EVT_TREE_ITEM_CHECKING, self.OnLayerChecking)
+        self.Bind(wx.EVT_TREE_DELETE_ITEM, self.OnDeleteLayer)
         self.Bind(wx.EVT_TREE_ITEM_RIGHT_CLICK, self.OnLayerContextMenu)
-        self.Bind(wx.EVT_TREE_END_DRAG,         self.OnEndDrag)
-        self.Bind(wx.EVT_TREE_END_LABEL_EDIT,   self.OnRenamed)
-        self.Bind(wx.EVT_KEY_UP,                self.OnKeyUp)
-        self.Bind(wx.EVT_KEY_DOWN,                self.OnKeyDown)
-        self.Bind(wx.EVT_IDLE,                  self.OnIdle)
-        self.Bind(wx.EVT_MOTION,                self.OnMotion)
+        self.Bind(wx.EVT_TREE_END_DRAG, self.OnEndDrag)
+        self.Bind(wx.EVT_TREE_END_LABEL_EDIT, self.OnRenamed)
+        self.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
+        self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
+        self.Bind(wx.EVT_MOTION, self.OnMotion)
 
     def _setIcons(self, il):
         self._icon = {}
-        for iconName in ("layerRaster", "layer3d-raster", "layerRgb",
+        for iconName in ("layerRaster", "layerRaster_3d", "layerRgb",
                          "layerHis", "layerShaded", "layerRastarrow",
                          "layerRastnum", "layerVector", "layerThememap",
                          "layerThemechart", "layerGrid", "layerGeodesic",
@@ -226,33 +245,33 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             iconKey = iconName[len("layer"):].lower()
             icon = LMIcons[iconName].GetBitmap(self.bmpsize)
             self._icon[iconKey] = il.Add(icon)
-            
+
     def _getSelectedLayer(self):
         """Get selected layer.
 
         :return: None if no layer selected
         :return: first layer (GenericTreeItem instance) of all selected
         """
-        return self.GetSelectedLayer(multi = False, checkedOnly = False)
+        return self.GetSelectedLayer(multi=False, checkedOnly=False)
 
     # for compatibility
-    layer_selected = property(fget = _getSelectedLayer)
+    layer_selected = property(fget=_getSelectedLayer)
 
-    def GetSelectedLayers(self, checkedOnly = False):
+    def GetSelectedLayers(self, checkedOnly=False):
         """Get selected layers as a list.
 
         .. todo::
             somewhere we have checkedOnly default True and elsewhere False
         """
-        return self.GetSelectedLayer(multi = True, checkedOnly = checkedOnly)
+        return self.GetSelectedLayer(multi=True, checkedOnly=checkedOnly)
 
-    def GetSelectedLayer(self, multi = False, checkedOnly = False):
+    def GetSelectedLayer(self, multi=False, checkedOnly=False):
         """Get selected layer from layer tree.
-        
+
         :param bool multi: return multiple selection as a list
         :param bool checkedOnly: return only the checked layers
 
-        :return: None or [] for multi == True if no layer selected 
+        :return: None or [] for multi == True if no layer selected
         :return: first layer (GenericTreeItem instance) of all selected or a list
         """
         ret = []
@@ -273,7 +292,7 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         """!Returns next item from tree (flattened expanded tree)"""
         # this is a not empty group
         if self.GetChildrenCount(item):
-                return self.GetFirstChild(item)[0]
+            return self.GetFirstChild(item)[0]
         # this is a layer outside group
         if self.GetItemParent(item) == self.root:
             return self.GetNextSibling(item)
@@ -288,10 +307,10 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
 
     def SetItemIcon(self, item, iconName=None):
         if not iconName:
-            iconName = self.GetLayerInfo(item, key = 'maplayer').GetType()
+            iconName = self.GetLayerInfo(item, key='maplayer').GetType()
         self.SetItemImage(item, self._icon[iconName])
-        
-    def _setGradient(self, iType = None):
+
+    def _setGradient(self, iType=None):
         """Set gradient for items
 
         :param iType: bgmap, vdigit or None
@@ -305,32 +324,32 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         else:
             self.SetFirstGradientColour(wx.Colour(100, 100, 100))
             self.SetSecondGradientColour(wx.Colour(150, 150, 150))
-        
+
     def GetSelections(self):
         """Returns a list of selected items.
 
         This method is copied from customtreecontrol and overriden because
-        with some version wx (?) multiple selection doesn't work. 
+        with some version wx (?) multiple selection doesn't work.
         Probably it is caused by another GetSelections method in treemixin.DragAndDrop?
         """
         array = []
         idRoot = self.GetRootItem()
         if idRoot:
             array = self.FillArray(idRoot, array)
-        
-        #else: the tree is empty, so no selections
+
+        # else: the tree is empty, so no selections
 
         return array
 
     def GetMap(self):
         """Get map instace"""
         return self.Map
-    
+
     def GetMapDisplay(self):
         """Get associated MapFrame"""
         return self.mapdisplay
 
-    def GetLayerInfo(self, layer, key = None):
+    def GetLayerInfo(self, layer, key=None):
         """Get layer info.
 
         :param layer: GenericTreeItem instance
@@ -370,60 +389,70 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             # can cause another idle event
             self.rerender = False
             if self.mapdisplay.IsAutoRendered():
-                self.mapdisplay.GetMapWindow().UpdateMap(render=True)
-        
+                self.mapdisplay.GetMapWindow().UpdateMap(render=False)
+
         event.Skip()
-        
+
     def OnKeyUp(self, event):
         """Key pressed"""
         key = event.GetKeyCode()
-        
+
         if key == wx.WXK_DELETE and self.lmgr and \
                 not self.GetEditControl():
             self.lmgr.OnDeleteLayer(None)
-        
+
         event.Skip()
 
     def OnKeyDown(self, event):
         """Skip event, otherwise causing error when layertree is empty"""
         event.Skip()
 
-    def OnLayerContextMenu (self, event):
+    def OnLayerContextMenu(self, event):
         """Contextual menu for item/layer"""
         if not self.layer_selected:
             event.Skip()
             return
 
-        ltype = self.GetLayerInfo(self.layer_selected, key = 'type')
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
-        
-        Debug.msg (4, "LayerTree.OnContextMenu: layertype=%s" % \
-                       ltype)
+        ltype = self.GetLayerInfo(self.layer_selected, key='type')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
 
-        if not hasattr (self, "popupID"):
+        Debug.msg(4, "LayerTree.OnContextMenu: layertype=%s" %
+                  ltype)
+
+        if not hasattr(self, "popupID"):
             self.popupID = dict()
-            for key in ('remove', 'rename', 'opacity', 'nviz', 'zoom',
-                        'region', 'export', 'attr', 'edit', 'save_ws',
-                        'bgmap', 'topo', 'meta', 'null', 'zoom1',
-                        'color', 'hist', 'univar', 'prof', 'properties', 'sql', 'copy',
-                        'report', 'export-pg', 'pack'):
+            for key in (
+                    'remove', 'rename', 'opacity', 'nviz', 'zoom', 'region',
+                    'export', 'attr', 'edit', 'save_ws', 'bgmap', 'topo', 'meta',
+                    'null', 'zoom1', 'color', 'colori', 'hist', 'univar', 'prof',
+                    'properties', 'sql', 'copy', 'report', 'export-pg',
+                    'export-attr', 'pack'):
                 self.popupID[key] = wx.NewId()
-        
+
         # get current mapset
         currentMapset = grass.gisenv()['MAPSET']
 
         self.popupMenu = wx.Menu()
 
         numSelected = len(self.GetSelections())
-        
-        item = wx.MenuItem(self.popupMenu, id = self.popupID['remove'], text = _("Remove"))
-        item.SetBitmap(MetaIcon(img = 'layer-remove').GetBitmap(self.bmpsize))
+
+        item = wx.MenuItem(
+            self.popupMenu,
+            id=self.popupID['remove'],
+            text=_("Remove"))
+        item.SetBitmap(MetaIcon(img='layer-remove').GetBitmap(self.bmpsize))
         self.popupMenu.AppendItem(item)
-        self.Bind(wx.EVT_MENU, self.lmgr.OnDeleteLayer, id = self.popupID['remove'])
-        
+        self.Bind(
+            wx.EVT_MENU,
+            self.lmgr.OnDeleteLayer,
+            id=self.popupID['remove'])
+
         if ltype != "command" and numSelected == 1:
-            self.popupMenu.Append(self.popupID['rename'], text = _("Rename"))
-            self.Bind(wx.EVT_MENU, self.OnRenameLayer, id = self.popupID['rename'])
+            self.popupMenu.Append(self.popupID['rename'], text=_("Rename"))
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnRenameLayer,
+                id=self.popupID['rename'])
 
         # when multiple maps are selected of different types
         # we cannot zoom or change region
@@ -434,111 +463,207 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             if self.GetLayerInfo(layer, key='type') != ltype:
                 same = False
                 break
-        
+
         # map layer items
         if ltype not in ("group", "command"):
             if numSelected == 1:
                 self.popupMenu.AppendSeparator()
-                if ltype != '3d-raster':
-                    item = wx.MenuItem(self.popupMenu, id = self.popupID['opacity'], text=_("Change opacity level"))
-                    item.SetBitmap(MetaIcon(img = 'layer-opacity').GetBitmap(self.bmpsize))
+                if ltype != 'raster_3d':
+                    item = wx.MenuItem(
+                        self.popupMenu,
+                        id=self.popupID['opacity'],
+                        text=_("Change opacity level"))
+                    item.SetBitmap(
+                        MetaIcon(img='layer-opacity').GetBitmap(self.bmpsize))
                     self.popupMenu.AppendItem(item)
-                    self.Bind(wx.EVT_MENU, self.OnPopupOpacityLevel, id=self.popupID['opacity'])
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['properties'], text = _("Properties"))
-                item.SetBitmap(MetaIcon(img = 'options').GetBitmap(self.bmpsize))
+                    self.Bind(
+                        wx.EVT_MENU,
+                        self.OnPopupOpacityLevel,
+                        id=self.popupID['opacity'])
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['properties'],
+                    text=_("Properties"))
+                item.SetBitmap(MetaIcon(img='options').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind(wx.EVT_MENU, self.OnPopupProperties, id = self.popupID['properties'])
-            
-                if ltype in ('raster', 'vector', '3d-raster') and self.mapdisplay.IsPaneShown('3d'):
-                    self.popupMenu.Append(self.popupID['nviz'], _("3D view properties"))
-                    self.Bind (wx.EVT_MENU, self.OnNvizProperties, id = self.popupID['nviz'])
-
-            if same and ltype in ('raster', 'vector', 'rgb', '3d-raster'):
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnPopupProperties,
+                    id=self.popupID['properties'])
+
+                if ltype in ('raster', 'vector',
+                             'raster_3d') and self.mapdisplay.IsPaneShown('3d'):
+                    self.popupMenu.Append(
+                        self.popupID['nviz'],
+                        _("3D view properties"))
+                    self.Bind(
+                        wx.EVT_MENU,
+                        self.OnNvizProperties,
+                        id=self.popupID['nviz'])
+
+            if same and ltype in ('raster', 'vector', 'rgb', 'raster_3d'):
                 self.popupMenu.AppendSeparator()
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['zoom'], text = _("Zoom to selected map(s)"))
-                item.SetBitmap(MetaIcon(img = 'zoom-layer').GetBitmap(self.bmpsize))
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['zoom'],
+                    text=_("Zoom to selected map(s)"))
+                item.SetBitmap(
+                    MetaIcon(img='zoom-layer').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind(wx.EVT_MENU, self.mapdisplay.OnZoomToMap, id = self.popupID['zoom'])
-                
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['region'], text = _("Set computational region from selected map(s)"))
-                item.SetBitmap(MetaIcon(img = 'region').GetBitmap(self.bmpsize))
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.mapdisplay.OnZoomToMap,
+                    id=self.popupID['zoom'])
+
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['region'],
+                    text=_("Set computational region from selected map(s)"))
+                item.SetBitmap(MetaIcon(img='region').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind(wx.EVT_MENU, self.OnSetCompRegFromMap, id = self.popupID['region'])
-        
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnSetCompRegFromMap,
+                    id=self.popupID['region'])
+
         # specific items
         try:
-            mltype = self.GetLayerInfo(self.layer_selected, key = 'type')
+            mltype = self.GetLayerInfo(self.layer_selected, key='type')
         except:
             mltype = None
-        
+
         # vector layers (specific items)
         if mltype and mltype == "vector" and numSelected == 1:
             self.popupMenu.AppendSeparator()
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['export'], text = _("Export common formats"))
-            item.SetBitmap(MetaIcon(img = 'layer-export').GetBitmap(self.bmpsize))
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['export'],
+                text=_("Export common formats"))
+            item.SetBitmap(
+                MetaIcon(img='layer-export').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['v.out.ogr',
-                                                                        'input=%s' % mapLayer.GetName()]),
-                      id = self.popupID['export'])
+            self.Bind(
+                wx.EVT_MENU,
+                lambda x: self.lmgr.OnMenuCmd(
+                    cmd=[
+                        'v.out.ogr',
+                        'input=%s' %
+                        mapLayer.GetName()]),
+                id=self.popupID['export'])
             if 'v.out.ogr' not in globalvar.grassCmd:
                 self.popupMenu.Enable(self.popupID['export'], False)
 
-            self.popupMenu.Append(self.popupID['export-pg'], text = _("Export PostGIS"))
-            self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['v.out.postgis',
-                                                                        'input=%s' % mapLayer.GetName()]),
-                      id = self.popupID['export-pg'])
+            self.popupMenu.Append(
+                self.popupID['export-pg'],
+                text=_("Export PostGIS"))
+            self.Bind(
+                wx.EVT_MENU,
+                lambda x: self.lmgr.OnMenuCmd(
+                    cmd=[
+                        'v.out.postgis',
+                        'input=%s' %
+                        mapLayer.GetName()]),
+                id=self.popupID['export-pg'])
             if 'v.out.postgis' not in globalvar.grassCmd:
                 self.popupMenu.Enable(self.popupID['export-pg'], False)
 
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['pack'], text = _("Create pack"))
+            self.popupMenu.Append(
+                self.popupID['export-attr'],
+                text=_("Export attribute table"))
+            self.Bind(
+                wx.EVT_MENU,
+                lambda x: self.lmgr.OnMenuCmd(
+                    cmd=[
+                        'v.db.select',
+                        'map=%s' %
+                        mapLayer.GetName()]),
+                id=self.popupID['export-attr'])
+            if 'v.db.select' not in globalvar.grassCmd:
+                self.popupMenu.Enable(self.popupID['export-attr'], False)
+
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['pack'],
+                text=_("Create pack"))
             self.popupMenu.AppendItem(item)
-            self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['v.pack',
-                                                                        'input=%s' % mapLayer.GetName()]),
-                      id = self.popupID['pack'])
-            
-            lmapset = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetMapset()
+            self.Bind(
+                wx.EVT_MENU,
+                lambda x: self.lmgr.OnMenuCmd(
+                    cmd=[
+                        'v.pack',
+                        'input=%s' %
+                        mapLayer.GetName()]),
+                id=self.popupID['pack'])
+
+            lmapset = self.GetLayerInfo(
+                self.layer_selected, key='maplayer').GetMapset()
             if lmapset != currentMapset:
-                self.popupMenu.Append(self.popupID['copy'], text = _("Make a copy in the current mapset"))
-                self.Bind(wx.EVT_MENU, self.OnCopyMap, id = self.popupID['copy'])
-            
+                self.popupMenu.Append(
+                    self.popupID['copy'],
+                    text=_("Make a copy in the current mapset"))
+                self.Bind(wx.EVT_MENU, self.OnCopyMap, id=self.popupID['copy'])
+
             self.popupMenu.AppendSeparator()
 
             self.popupMenu.Append(self.popupID['color'], _("Set color table"))
-            self.Bind (wx.EVT_MENU, self.OnVectorColorTable, id = self.popupID['color'])
-
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['attr'], text = _("Show attribute data"))
-            item.SetBitmap(MetaIcon(img = 'table').GetBitmap(self.bmpsize))
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnVectorColorTable,
+                id=self.popupID['color'])
+
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['attr'],
+                text=_("Show attribute data"))
+            item.SetBitmap(MetaIcon(img='table').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            self.Bind(wx.EVT_MENU, self.lmgr.OnShowAttributeTable, id = self.popupID['attr'])
+            self.Bind(
+                wx.EVT_MENU,
+                self.lmgr.OnShowAttributeTable,
+                id=self.popupID['attr'])
 
             digitToolbar = self.mapdisplay.GetToolbar('vdigit')
             if digitToolbar:
                 vdigitLayer = digitToolbar.GetLayer()
             else:
                 vdigitLayer = None
-            layer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+            layer = self.GetLayerInfo(self.layer_selected, key='maplayer')
             if vdigitLayer is not layer:
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['edit'], text = _("Start editing"))
-                self.Bind (wx.EVT_MENU, self.OnStartEditing, id = self.popupID['edit'])
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['edit'],
+                    text=_("Start editing"))
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnStartEditing,
+                    id=self.popupID['edit'])
             else:
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['edit'], text = _("Stop editing"))
-                self.Bind (wx.EVT_MENU, self.OnStopEditing,  id = self.popupID['edit'])
-            item.SetBitmap(MetaIcon(img = 'edit').GetBitmap(self.bmpsize))
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['edit'],
+                    text=_("Stop editing"))
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnStopEditing,
+                    id=self.popupID['edit'])
+            item.SetBitmap(MetaIcon(img='edit').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            
-            ### removed from layer tree
+
+            # removed from layer tree
             #  if digitToolbar:
-                # background vector map
-                # self.popupMenu.Append(self.popupID['bgmap'],
-                #                       text = _("Use as background vector map for digitizer"),
-                #                       kind = wx.ITEM_CHECK)
-                # self.Bind(wx.EVT_MENU, self.OnSetBgMap, id = self.popupID['bgmap'])
-                # if UserSettings.Get(group = 'vdigit', key = 'bgmap', subkey = 'value',
-                #                     internal = True) == layer.GetName():
-                #     self.popupMenu.Check(self.popupID['bgmap'], True)
-            
-            self.popupMenu.Append(self.popupID['topo'], text = _("Rebuild topology"))
-            self.Bind(wx.EVT_MENU, self.OnTopology, id = self.popupID['topo'])
+            # background vector map
+            # self.popupMenu.Append(self.popupID['bgmap'],
+            #                       text = _("Use as background vector map for digitizer"),
+            #                       kind = wx.ITEM_CHECK)
+            # self.Bind(wx.EVT_MENU, self.OnSetBgMap, id = self.popupID['bgmap'])
+            # if UserSettings.Get(group = 'vdigit', key = 'bgmap', subkey = 'value',
+            #                     internal = True) == layer.GetName():
+            #     self.popupMenu.Check(self.popupID['bgmap'], True)
+
+            self.popupMenu.Append(
+                self.popupID['topo'],
+                text=_("Rebuild topology"))
+            self.Bind(wx.EVT_MENU, self.OnTopology, id=self.popupID['topo'])
 
             # determine format
             # if layer and layer.GetType() == 'vector':
@@ -552,111 +677,200 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             #             info['format'].split(',')[1] == 'PostgreSQL':
             #         self.popupMenu.Append(self.popupID['sql'], text = _("SQL Spatial Query"))
             #         self.Bind(wx.EVT_MENU, self.OnSqlQuery, id = self.popupID['sql'])
-            
+
             if layer.GetMapset() != currentMapset:
                 # only vector map in current mapset can be edited
-                self.popupMenu.Enable (self.popupID['edit'], False)
-                self.popupMenu.Enable (self.popupID['topo'], False)
+                self.popupMenu.Enable(self.popupID['edit'], False)
+                self.popupMenu.Enable(self.popupID['topo'], False)
             elif digitToolbar and digitToolbar.GetLayer():
                 # vector map already edited
                 vdigitLayer = digitToolbar.GetLayer()
                 if vdigitLayer is layer:
                     self.popupMenu.Enable(self.popupID['remove'], False)
                     # self.popupMenu.Enable(self.popupID['bgmap'],  False)
-                    self.popupMenu.Enable(self.popupID['topo'],   False)
+                    self.popupMenu.Enable(self.popupID['topo'], False)
                 # else:
                 ###    self.popupMenu.Enable(self.popupID['bgmap'], True)
-            
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['meta'], text = _("Metadata"))
-            item.SetBitmap(MetaIcon(img = 'layer-info').GetBitmap(self.bmpsize))
+
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['meta'],
+                text=_("Metadata"))
+            item.SetBitmap(MetaIcon(img='layer-info').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            self.Bind (wx.EVT_MENU, self.OnMetadata, id = self.popupID['meta'])
-        
+            self.Bind(wx.EVT_MENU, self.OnMetadata, id=self.popupID['meta'])
+
         # raster layers (specific items)
         elif mltype and mltype == "raster":
             if same:
-                self.popupMenu.Append(self.popupID['zoom1'], text=_("Zoom to selected map(s) (ignore NULLs)"))
-                self.Bind(wx.EVT_MENU, self.mapdisplay.OnZoomToRaster, id=self.popupID['zoom1'])
-            
+                self.popupMenu.Append(
+                    self.popupID['zoom1'],
+                    text=_("Zoom to selected map(s) (ignore NULLs)"))
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.mapdisplay.OnZoomToRaster,
+                    id=self.popupID['zoom1'])
+
             self.popupMenu.AppendSeparator()
-            
+
             if numSelected == 1:
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['export'], text = _("Export"))
-                item.SetBitmap(MetaIcon(img = 'layer-export').GetBitmap(self.bmpsize))
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['export'],
+                    text=_("Export"))
+                item.SetBitmap(
+                    MetaIcon(img='layer-export').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['r.out.gdal',
-                                                                            'input=%s' % mapLayer.GetName()]),
-                          id = self.popupID['export'])
-
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['pack'], text = _("Create pack"))
+                self.Bind(
+                    wx.EVT_MENU,
+                    lambda x: self.lmgr.OnMenuCmd(
+                        cmd=[
+                            'r.out.gdal',
+                            'input=%s' %
+                            mapLayer.GetName()]),
+                    id=self.popupID['export'])
+
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['pack'],
+                    text=_("Create pack"))
                 self.popupMenu.AppendItem(item)
-                self.Bind(wx.EVT_MENU, lambda x: self.lmgr.OnMenuCmd(cmd = ['r.pack',
-                                                                            'input=%s' % mapLayer.GetName()]),
-                          id = self.popupID['pack'])
-                
-                lmapset = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetMapset()
+                self.Bind(
+                    wx.EVT_MENU,
+                    lambda x: self.lmgr.OnMenuCmd(
+                        cmd=[
+                            'r.pack',
+                            'input=%s' %
+                            mapLayer.GetName()]),
+                    id=self.popupID['pack'])
+
+                lmapset = self.GetLayerInfo(
+                    self.layer_selected, key='maplayer').GetMapset()
                 if lmapset != currentMapset:
-                    self.popupMenu.Append(self.popupID['copy'], text = _("Make a copy in the current mapset"))
-                    self.Bind(wx.EVT_MENU, self.OnCopyMap, id = self.popupID['copy'])
-                
+                    self.popupMenu.Append(
+                        self.popupID['copy'],
+                        text=_("Make a copy in the current mapset"))
+                    self.Bind(
+                        wx.EVT_MENU,
+                        self.OnCopyMap,
+                        id=self.popupID['copy'])
+
                 self.popupMenu.AppendSeparator()
-                
-            self.popupMenu.Append(self.popupID['color'], _("Set color table"))
-            self.Bind (wx.EVT_MENU, self.OnRasterColorTable, id = self.popupID['color'])
 
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['hist'], text = _("Histogram"))
-            item.SetBitmap(MetaIcon(img = 'layer-raster-histogram').GetBitmap(self.bmpsize))
+            self.popupMenu.Append(self.popupID['color'], _("Set color table"))
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnRasterColorTable,
+                id=self.popupID['color'])
+            self.popupMenu.Append(
+                self.popupID['colori'],
+                _("Set color table interactively"))
+            self.Bind(
+                wx.EVT_MENU,
+                self.lmgr.OnRasterRules,
+                id=self.popupID['colori'])
+
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['hist'],
+                text=_("Histogram"))
+            item.SetBitmap(
+                MetaIcon(img='layer-raster-histogram').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            self.Bind (wx.EVT_MENU, self.OnHistogram, id = self.popupID['hist'])
-
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['univar'], text = _("Univariate raster statistics"))
-            item.SetBitmap(MetaIcon(img = 'raster-stats').GetBitmap(self.bmpsize))
+            self.Bind(wx.EVT_MENU, self.OnHistogram, id=self.popupID['hist'])
+
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['univar'],
+                text=_("Univariate raster statistics"))
+            item.SetBitmap(
+                MetaIcon(img='raster-stats').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            self.Bind (wx.EVT_MENU, self.OnUnivariateStats, id = self.popupID['univar'])
-
-            item = wx.MenuItem(self.popupMenu, id = self.popupID['report'], text = _("Report raster statistics"))
-            item.SetBitmap(MetaIcon(img = 'stats').GetBitmap(self.bmpsize))
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnUnivariateStats,
+                id=self.popupID['univar'])
+
+            item = wx.MenuItem(
+                self.popupMenu,
+                id=self.popupID['report'],
+                text=_("Report raster statistics"))
+            item.SetBitmap(MetaIcon(img='stats').GetBitmap(self.bmpsize))
             self.popupMenu.AppendItem(item)
-            self.Bind(wx.EVT_MENU, self.OnReportStats, id = self.popupID['report'])
-            
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnReportStats,
+                id=self.popupID['report'])
+
             if numSelected == 1:
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['prof'], text = _("Profile"))
-                item.SetBitmap(MetaIcon(img = 'layer-raster-profile').GetBitmap(self.bmpsize))
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['prof'],
+                    text=_("Profile"))
+                item.SetBitmap(
+                    MetaIcon(img='layer-raster-profile').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind (wx.EVT_MENU, self.OnProfile, id = self.popupID['prof'])
-
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['meta'], text = _("Metadata"))
-                item.SetBitmap(MetaIcon(img = 'layer-info').GetBitmap(self.bmpsize))
+                self.Bind(wx.EVT_MENU, self.OnProfile, id=self.popupID['prof'])
+
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['meta'],
+                    text=_("Metadata"))
+                item.SetBitmap(
+                    MetaIcon(img='layer-info').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind (wx.EVT_MENU, self.OnMetadata, id = self.popupID['meta'])
-            
-        elif mltype and mltype == '3d-raster':
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnMetadata,
+                    id=self.popupID['meta'])
+
+        elif mltype and mltype == 'raster_3d':
             if numSelected == 1:
                 self.popupMenu.AppendSeparator()
-                self.popupMenu.Append(self.popupID['color'], _("Set color table"))
-                self.Bind(wx.EVT_MENU, self.OnRasterColorTable, id=self.popupID['color'])
-                
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['univar'], text = _("Univariate raster statistics"))
-                item.SetBitmap(MetaIcon(img = 'stats').GetBitmap(self.bmpsize))
+                self.popupMenu.Append(
+                    self.popupID['color'],
+                    _("Set color table"))
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnRasterColorTable,
+                    id=self.popupID['color'])
+
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['univar'],
+                    text=_("Univariate raster statistics"))
+                item.SetBitmap(MetaIcon(img='stats').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind (wx.EVT_MENU, self.OnUnivariateStats, id = self.popupID['univar'])
-                 
-                item = wx.MenuItem(self.popupMenu, id = self.popupID['meta'], text = _("Metadata"))
-                item.SetBitmap(MetaIcon(img = 'layer-info').GetBitmap(self.bmpsize))
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnUnivariateStats,
+                    id=self.popupID['univar'])
+
+                item = wx.MenuItem(
+                    self.popupMenu,
+                    id=self.popupID['meta'],
+                    text=_("Metadata"))
+                item.SetBitmap(
+                    MetaIcon(img='layer-info').GetBitmap(self.bmpsize))
                 self.popupMenu.AppendItem(item)
-                self.Bind (wx.EVT_MENU, self.OnMetadata, id = self.popupID['meta'])
-        
+                self.Bind(
+                    wx.EVT_MENU,
+                    self.OnMetadata,
+                    id=self.popupID['meta'])
+
         # web service layers (specific item)
         elif mltype and mltype == "wms":
-            self.popupMenu.Append(self.popupID['save_ws'], text = _("Save web service layer"))
-            self.Bind(wx.EVT_MENU, self.OnSaveWs, id = self.popupID['save_ws'])
+            self.popupMenu.Append(
+                self.popupID['save_ws'],
+                text=_("Save web service layer"))
+            self.Bind(wx.EVT_MENU, self.OnSaveWs, id=self.popupID['save_ws'])
 
         self.PopupMenu(self.popupMenu)
         self.popupMenu.Destroy()
 
     def OnSaveWs(self, event):
         """Show dialog for saving web service layer into GRASS vector/raster layer"""
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
         dlg = SaveWMSLayerDialog(parent=self, layer=mapLayer,
                                  giface=self._gifaceForDisplay)
         dlg.CentreOnScreen()
@@ -664,7 +878,7 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
 
     def OnTopology(self, event):
         """Rebuild topology of selected vector map"""
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
         cmd = ['v.build',
                'map=%s' % mapLayer.GetName()]
         self._giface.RunCmd(cmd)
@@ -672,24 +886,24 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
     def OnSqlQuery(self, event):
         """Show SQL query window for PostGIS layers
         """
-        dlg = SqlQueryFrame(parent = self)
+        dlg = SqlQueryFrame(parent=self)
         dlg.CentreOnScreen()
         dlg.Show()
-        
+
     def OnMetadata(self, event):
         """Print metadata of raster/vector map layer
-        
+
         .. todo::
             Dialog to modify metadata
         """
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
-        mltype = self.GetLayerInfo(self.layer_selected,key = 'type')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
+        mltype = self.GetLayerInfo(self.layer_selected, key='type')
 
         if mltype == 'raster':
             cmd = ['r.info']
         elif mltype == 'vector':
             cmd = ['v.info']
-        elif mltype == '3d-raster':
+        elif mltype == 'raster_3d':
             cmd = ['r3.info']
         cmd.append('map=%s' % mapLayer.GetName())
 
@@ -699,14 +913,14 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
     def OnSetCompRegFromRaster(self, event):
         """Set computational region from selected raster map (ignore NULLs).
         Unused, removed item from layer context menu"""
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
 
         cmd = ['g.region', 'raster=%s' % mapLayer.GetName(),
                'zoom=%s' % mapLayer.GetName()]
 
         # print output to command log area
         self._giface.RunCmd(cmd, notification=Notification.NO_NOTIFICATION)
-        
+
         # re-render map display
         self._giface.GetMapWindow().UpdateMap(render=True)
 
@@ -717,19 +931,19 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         vect = []
         rast3d = []
         for layer in self.GetSelections():
-            mapLayer = self.GetLayerInfo(layer, key = 'maplayer')
-            mltype = self.GetLayerInfo(layer, key = 'type')
-                
+            mapLayer = self.GetLayerInfo(layer, key='maplayer')
+            mltype = self.GetLayerInfo(layer, key='type')
+
             if mltype == 'raster':
                 rast.append(mapLayer.GetName())
             elif mltype == 'vector':
                 vect.append(mapLayer.GetName())
-            elif mltype == '3d-raster':
+            elif mltype == 'raster_3d':
                 rast3d.append(mapLayer.GetName())
             elif mltype == 'rgb':
                 for rname in mapLayer.GetName().splitlines():
                     rast.append(rname)
-        
+
         cmd = ['g.region']
         if rast:
             cmd.append('raster=%s' % ','.join(rast))
@@ -737,25 +951,28 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             cmd.append('vector=%s' % ','.join(vect))
         if rast3d:
             cmd.append('raster_3d=%s' % ','.join(rast3d))
-        
+
         # print output to command log area
         if len(cmd) > 1:
-            if mltype == '3d-raster':
+            if mltype == 'raster_3d':
                 cmd.append('-3')
-            self._giface.RunCmd(cmd, compReg = False,
+            self._giface.RunCmd(cmd, compReg=False,
                                 notification=Notification.NO_NOTIFICATION)
-        
+
         # re-render map display
         self._giface.GetMapWindow().UpdateMap(render=True)
-            
+
     def OnProfile(self, event):
         """Plot profile of given raster map layer"""
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
         if not mapLayer.GetName():
-            wx.MessageBox(parent = self,
-                          message = _("Unable to create profile of "
-                                    "raster map."),
-                          caption = _("Error"), style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+            wx.MessageBox(
+                parent=self,
+                message=_(
+                    "Unable to create profile of "
+                    "raster map."),
+                caption=_("Error"),
+                style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
             return
         self.mapdisplay.Profile(rasters=[mapLayer.GetName()])
 
@@ -764,36 +981,34 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         raster2d = []
         raster3d = []
         for layer in self.GetSelectedLayers():
-            if self.GetLayerInfo(layer, key='type') == '3d-raster':
-                raster3d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+            if self.GetLayerInfo(layer, key='type') == 'raster_3d':
+                raster3d.append(
+                    self.GetLayerInfo(
+                        layer, key='maplayer').GetName())
             else:
-                raster2d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
-        
+                raster2d.append(
+                    self.GetLayerInfo(
+                        layer, key='maplayer').GetName())
+
         if raster2d:
-            GUI(parent = self, giface = self._giface).ParseCommand(['r.colors',
-                                                                    'map=%s' % ','.join(raster2d)])
+            GUI(parent=self, giface=self._giface).ParseCommand(
+                ['r.colors', 'map=%s' % ','.join(raster2d)])
         if raster3d:
-            GUI(parent = self, giface = self._giface).ParseCommand(['r3.colors',
-                                                                    'map=%s' % ','.join(raster3d)])
-            
+            GUI(parent=self, giface=self._giface).ParseCommand(
+                ['r3.colors', 'map=%s' % ','.join(raster3d)])
+
     def OnVectorColorTable(self, event):
         """Set color table for vector map"""
-        name = self.GetLayerInfo(self.layer_selected, key = 'maplayer').GetName()
-        GUI(parent = self, centreOnParent = False).ParseCommand(['v.colors',
-                                                                 'map=%s' % name])
-        
-    def _mapNameValidationFailed(self, ctrl):
-        message = _("Name <%(name)s> is not a valid name for GRASS map. "
-                    "Please use only ASCII characters excluding %(chars)s "
-                    "and space.") % {'name': ctrl.GetValue(), 'chars': '/"\'@,=*~'}
-        GError(parent=self, message=message, caption=_("Invalid name"))
+        name = self.GetLayerInfo(self.layer_selected, key='maplayer').GetName()
+        GUI(parent=self, centreOnParent=False).ParseCommand(['v.colors',
+                                                             'map=%s' % name])
 
     def OnCopyMap(self, event):
         """Copy selected map into current mapset"""
         layer = self.GetSelectedLayer()
         ltype = self.GetLayerInfo(layer, key='type')
-        lnameSrc = self.GetLayerInfo(layer, key = 'maplayer').GetName()
-        
+        lnameSrc = self.GetLayerInfo(layer, key='maplayer').GetName()
+
         if ltype == 'raster':
             key = 'raster'
             module = 'rast'
@@ -802,86 +1017,108 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             key = 'vector'
             module = 'vect'
             label = _('Vector map')
-        elif ltype == '3d-raster':
+        elif ltype == 'raster_3d':
             key = 'raster_3d'
             module = 'rast3d'
             label = _('3D raster map')
         else:
-            GError(_("Unsupported map type <%s>") % ltype, parent = self)
+            GError(_("Unsupported map type <%s>") % ltype, parent=self)
             return
-        
+
         # TODO: replace by New[Raster|Vector]Dialog
-        dlg = TextEntryDialog(parent = self,
-                              message = _('Enter name for the new %s in the current mapset:') % label.lower(),
-                              caption = _('Make a copy of %s <%s>') % (label.lower(), lnameSrc),
-                              defaultValue = lnameSrc.split('@')[0],
-                              validator = GenericValidator(grass.legal_name, self._mapNameValidationFailed),
-                              size = (700, -1))
+        dlg = TextEntryDialog(
+            parent=self,
+            message=_('Enter name for the new %s in the current mapset:') %
+            label.lower(),
+            caption=_('Make a copy of %s <%s>') % (label.lower(),
+                                                   lnameSrc),
+            defaultValue=lnameSrc.split('@')[0],
+            validator=MapValidator(),
+            size=(700, -1))
         if dlg.ShowModal() == wx.ID_OK:
             lnameDst = dlg.GetValue()
             dlg.Destroy()
         else:
             dlg.Destroy()
             return
-        
+
         currentMapset = grass.gisenv()['MAPSET']
         # check if map already exists
         if lnameDst in grass.list_grouped(key)[currentMapset]:
-            dlgOw = wx.MessageDialog(parent = self, message = _("%s <%s> already exists "
-                                                                "in the current mapset. "
-                                                                "Do you want to overwrite it?") % (label, lnameDst),
-                                     caption = _("Overwrite?"),
-                                     style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlgOw = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "%s <%s> already exists "
+                    "in the current mapset. "
+                    "Do you want to overwrite it?") %
+                (label,
+                 lnameDst),
+                caption=_("Overwrite?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlgOw.ShowModal() != wx.ID_YES:
                 return
-        
-        kwargs = {key : '%s,%s' % (lnameSrc, lnameDst)}
-        if 0 != RunCommand('g.copy', overwrite = True, **kwargs):
+
+        kwargs = {key: '%s,%s' % (lnameSrc, lnameDst)}
+        if 0 != RunCommand('g.copy', overwrite=True, **kwargs):
             GError(_("Unable to make copy of <%s>") % lnameSrc,
                    parent=self)
             return
-        
+
         if '@' in lnameDst:
             mapsetDst = lnameDst.split('@')[1]
             if mapsetDst != currentMapset:
-                GError(_("Unable to make copy of <%s>. Mapset <%s> is not current mapset.") % \
-                           (lnameSrc, mapsetDst))
+                GError(
+                    _("Unable to make copy of <%s>. Mapset <%s> is not current mapset.") %
+                    (lnameSrc, mapsetDst))
                 return
-            
+
         lnameDst += '@' + currentMapset
         # add copied map to the layer tree
-        self.AddLayer(ltype, lname = lnameDst, lcmd = ['d.%s' % module, 'map=%s' % lnameDst])
+        self.AddLayer(
+            ltype,
+            lname=lnameDst,
+            lcmd=[
+                'd.%s' %
+                module,
+                'map=%s' %
+                lnameDst])
 
     def OnHistogram(self, event):
         """Plot histogram for given raster map layer
         """
         rasterList = []
         for layer in self.GetSelectedLayers():
-            rasterList.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+            rasterList.append(
+                self.GetLayerInfo(
+                    layer, key='maplayer').GetName())
 
         if not rasterList:
-            GError(parent = self,
-                   message = _("Unable to display histogram of "
-                               "raster map. No map name defined."))
+            GError(parent=self,
+                   message=_("Unable to display histogram of "
+                             "raster map. No map name defined."))
             return
-        
-        win = HistogramPlotFrame(parent = self, rasterList = rasterList)
+
+        win = HistogramPlotFrame(parent=self, rasterList=rasterList)
         win.CentreOnScreen()
         win.Show()
-                
+
     def OnUnivariateStats(self, event):
         """Univariate 2D/3D raster statistics"""
         raster2d = []
         raster3d = []
         for layer in self.GetSelectedLayers():
-            if self.GetLayerInfo(layer, key='type') == '3d-raster':
-                raster3d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
+            if self.GetLayerInfo(layer, key='type') == 'raster_3d':
+                raster3d.append(
+                    self.GetLayerInfo(
+                        layer, key='maplayer').GetName())
             else:
-                raster2d.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
-        
+                raster2d.append(
+                    self.GetLayerInfo(
+                        layer, key='maplayer').GetName())
+
         if raster2d:
             self._giface.RunCmd(['r.univar', 'map=%s' % ','.join(raster2d)])
-        
+
         if raster3d:
             self._giface.RunCmd(['r3.univar', 'map=%s' % ','.join(raster3d)])
 
@@ -891,39 +1128,42 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         # TODO: Implement self.GetSelectedLayers(ltype='raster')
         for layer in self.GetSelectedLayers():
             if self.GetLayerInfo(layer, key='type') == 'raster':
-                rasters.append(self.GetLayerInfo(layer, key = 'maplayer').GetName())
-        
+                rasters.append(
+                    self.GetLayerInfo(
+                        layer, key='maplayer').GetName())
+
         if rasters:
-            self._giface.RunCmd(['r.report', 'map=%s' % ','.join(rasters), 'units=h,c,p'])
-        
+            self._giface.RunCmd(['r.report', 'map=%s' %
+                                 ','.join(rasters), 'units=h,c,p'])
+
     def OnStartEditing(self, event):
         """Start editing vector map layer requested by the user
         """
-        mapLayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+        mapLayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
         if not haveVDigit:
             from vdigit import errorMsg
-            
-            self.mapdisplay.toolbars['map'].combo.SetValue (_("2D view"))
-            
+
+            self.mapdisplay.toolbars['map'].combo.SetValue(_("2D view"))
+
             GError(_("Unable to start wxGUI vector digitizer.\n"
-                     "Details: %s") % errorMsg, parent = self)
+                     "Details: %s") % errorMsg, parent=self)
             return
-        
-        if not self.mapdisplay.GetToolbar('vdigit'): # enable tool
+
+        if not self.mapdisplay.GetToolbar('vdigit'):  # enable tool
             self.mapdisplay.AddToolbar('vdigit')
 
-        else: # tool already enabled
+        else:  # tool already enabled
             pass
-        
+
         # mark layer as 'edited'
         self.mapdisplay.toolbars['vdigit'].StartEditing(mapLayer)
-        
+
     def StartEditing(self, layerItem):
         self._setGradient('vdigit')
         if layerItem:
             self.SetItemIcon(layerItem, 'edited')
             self.RefreshLine(layerItem)
-        
+
     def OnStopEditing(self, event):
         """Stop editing the current vector map layer
         """
@@ -938,37 +1178,43 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         try:
             layerItem = self.FindItemByData('name', mapName)[0]
         except IndexError:
-             return
-        
+            return
+
         if not unset:
             self._setGradient('bgmap')
             self.SetItemIcon(layerItem, 'bgmap')
         else:
             self._setGradient()
             self.SetItemIcon(layerItem)
-        
+
         self.RefreshLine(layerItem)
 
-    def OnPopupProperties (self, event):
+    def OnPopupProperties(self, event):
         """Popup properties dialog"""
         self.PropertiesDialog(self.layer_selected)
 
     def OnPopupOpacityLevel(self, event):
         """Popup opacity level indicator"""
-        if not self.GetLayerInfo(self.layer_selected, key = 'ctrl'):
+        if not self.GetLayerInfo(self.layer_selected, key='ctrl'):
             return
-        
-        maplayer = self.GetLayerInfo(self.layer_selected, key = 'maplayer')
+
+        maplayer = self.GetLayerInfo(self.layer_selected, key='maplayer')
         current_opacity = maplayer.GetOpacity()
-        
-        dlg = SetOpacityDialog(self, opacity = current_opacity,
-                               title = _("Set opacity of <%s>") % maplayer.GetName())
-        dlg.applyOpacity.connect(lambda value:
-                                 self.ChangeLayerOpacity(layer=self.layer_selected, value=value))
+
+        dlg = SetOpacityDialog(
+            self,
+            opacity=current_opacity,
+            title=_("Set opacity of <%s>") %
+            maplayer.GetName())
+        dlg.applyOpacity.connect(
+            lambda value: self.ChangeLayerOpacity(
+                layer=self.layer_selected, value=value))
         dlg.CentreOnParent()
 
         if dlg.ShowModal() == wx.ID_OK:
-            self.ChangeLayerOpacity(layer = self.layer_selected, value = dlg.GetOpacity())
+            self.ChangeLayerOpacity(
+                layer=self.layer_selected,
+                value=dlg.GetOpacity())
         dlg.Destroy()
 
     def ChangeLayerOpacity(self, layer, value):
@@ -977,23 +1223,24 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         :param layer: layer for which to change (item in layertree)
         :param value: opacity value (float between 0 and 1)
         """
-        maplayer = self.GetLayerInfo(layer, key = 'maplayer')
+        maplayer = self.GetLayerInfo(layer, key='maplayer')
         self.Map.ChangeOpacity(maplayer, value)
         maplayer.SetOpacity(value)
         self.SetItemText(layer,
                          self._getLayerName(layer))
-        
+
         # vector layer currently edited
-        if self.GetMapDisplay().GetToolbar('vdigit') and \
-                self.GetMapDisplay().GetToolbar('vdigit').GetLayer() == maplayer:
+        if self.GetMapDisplay().GetToolbar('vdigit') and self.GetMapDisplay(
+        ).GetToolbar('vdigit').GetLayer() == maplayer:
             alpha = int(value * 255)
-            self.GetMapDisplay().GetWindow().digit.GetDisplay().UpdateSettings(alpha = alpha)
-            
+            self.GetMapDisplay().GetWindow().digit.GetDisplay().UpdateSettings(alpha=alpha)
+
         # redraw map if auto-rendering is enabled
         renderVector = False
         if self.GetMapDisplay().GetToolbar('vdigit'):
             renderVector = True
-        self.GetMapDisplay().GetWindow().UpdateMap(render = False, renderVector = renderVector)
+        self.GetMapDisplay().GetWindow().UpdateMap(
+            render=False, renderVector=renderVector)
 
     def OnNvizProperties(self, event):
         """Nviz-related properties (raster/vector/volume)
@@ -1002,37 +1249,37 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             vector/volume
         """
         self.lmgr.notebook.SetSelectionByName('nviz')
-        ltype = self.GetLayerInfo(self.layer_selected, key = 'type')
+        ltype = self.GetLayerInfo(self.layer_selected, key='type')
         if ltype == 'raster':
             self.lmgr.nviz.SetPage('surface')
         elif ltype == 'vector':
             self.lmgr.nviz.SetPage('vector')
-        elif ltype == '3d-raster':
+        elif ltype == 'raster_3d':
             self.lmgr.nviz.SetPage('volume')
-        
-    def OnRenameLayer (self, event):
+
+    def OnRenameLayer(self, event):
         """Rename layer"""
         self.EditLabel(self.layer_selected)
         self.GetEditControl().SetSelection(-1, -1)
-        
+
     def OnRenamed(self, event):
         """Layer renamed"""
         if not event.GetLabel():
             event.Skip()
             return
-        
+
         item = self.layer_selected
-        self.SetLayerInfo(item, key = 'label', value = event.GetLabel())
+        self.SetLayerInfo(item, key='label', value=event.GetLabel())
         self.SetItemText(item, self._getLayerName(item))
-        
+
         event.Skip()
 
-    def AddLayer(self, ltype, lname = None, lchecked = None,
-                 lopacity = 1.0, lcmd = None, lgroup = None, lvdigit = None, lnviz = None, multiple = True):
+    def AddLayer(self, ltype, lname=None, lchecked=None, lopacity=1.0,
+                 lcmd=None, lgroup=None, lvdigit=None, lnviz=None, multiple=True):
         """Add new item to the layer tree, create corresponding MapLayer instance.
         Launch property dialog if needed (raster, vector, etc.)
 
-        :param ltype: layer type (raster, vector, 3d-raster, ...)
+        :param ltype: layer type (raster, vector, raster_3d, ...)
         :param lname: layer name
         :param lchecked: if True layer is checked
         :param lopacity: layer opacity level
@@ -1046,19 +1293,19 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             # check for duplicates
             item = self.GetFirstChild(self.root)[0]
             while item and item.IsOk():
-                if self.GetLayerInfo(item, key = 'type') == 'vector':
-                    name = self.GetLayerInfo(item, key = 'maplayer').GetName()
+                if self.GetLayerInfo(item, key='type') == 'vector':
+                    name = self.GetLayerInfo(item, key='maplayer').GetName()
                     if name == lname:
                         return
                 item = self.GetNextItem(item)
-        
+
         selectedLayer = self.GetSelectedLayer()
         # deselect active item
-        if selectedLayer:
+        if lchecked != False and selectedLayer:
             self.SelectItem(selectedLayer, select=False)
-        
-        Debug.msg (3, "LayerTree().AddLayer(): ltype=%s" % (ltype))
-        
+
+        Debug.msg(3, "LayerTree().AddLayer(): ltype=%s" % (ltype))
+
         if ltype == 'command':
             # generic command item
             ctrl = self._createCommandCtrl()
@@ -1070,61 +1317,79 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             grouptext = _('Layer group:') + str(self.groupnode)
             self.groupnode += 1
         else:
-            btnbmp = LMIcons["layerOptions"].GetBitmap((16,16))
-            ctrl = buttons.GenBitmapButton(self, id = wx.ID_ANY, bitmap = btnbmp, size = (24,24))
+            btnbmp = LMIcons["layerOptions"].GetBitmap((16, 16))
+            ctrl = buttons.GenBitmapButton(
+                self, id=wx.ID_ANY, bitmap=btnbmp, size=(24, 24))
             ctrl.SetToolTipString(_("Click to edit layer settings"))
             self.Bind(wx.EVT_BUTTON, self.OnLayerContextMenu, ctrl)
         # add layer to the layer tree
         if selectedLayer and selectedLayer != self.GetRootItem():
-            if self.GetLayerInfo(selectedLayer, key = 'type') == 'group' \
-                and self.IsExpanded(selectedLayer):
-                # add to group (first child of self.layer_selected) if group expanded
-                layer = self.PrependItem(parent = selectedLayer,
-                                         text = '', ct_type = 1, wnd = ctrl)
+            if self.GetLayerInfo(selectedLayer, key='type') == 'group' \
+                    and self.IsExpanded(selectedLayer):
+                # add to group (first child of self.layer_selected) if group
+                # expanded
+                layer = self.PrependItem(parent=selectedLayer,
+                                         text='', ct_type=1, wnd=ctrl)
             else:
                 # prepend to individual layer or non-expanded group
                 if lgroup == -1:
                     # -> last child of root (loading from workspace)
-                    layer = self.AppendItem(parentId = self.root,
-                                            text = '', ct_type = 1, wnd = ctrl)
+                    layer = self.AppendItem(parentId=self.root,
+                                            text='', ct_type=1, wnd=ctrl)
                 elif lgroup > -1:
                     # -> last child of group (loading from workspace)
-                    parent = self.FindItemByIndex(index = lgroup)
+                    parent = self.FindItemByIndex(index=lgroup)
                     if not parent:
                         parent = self.root
-                    layer = self.AppendItem(parentId = parent,
-                                            text = '', ct_type = 1, wnd = ctrl)
+                    layer = self.AppendItem(parentId=parent,
+                                            text='', ct_type=1, wnd=ctrl)
                 elif lgroup is None:
                     # -> previous sibling of selected layer
                     parent = self.GetItemParent(selectedLayer)
-                    layer = self.InsertItem(parentId = parent,
-                                            input = self.GetPrevSibling(selectedLayer),
-                                            text = '', ct_type = 1, wnd = ctrl)
-        else: # add first layer to the layer tree (first child of root)
-            layer = self.PrependItem(parent = self.root, text = '', ct_type = 1, wnd = ctrl)
-        
+                    layer = self.InsertItem(
+                        parentId=parent, input=self.GetPrevSibling(
+                            selectedLayer),
+                        text='', ct_type=1, wnd=ctrl)
+        else:  # add first layer to the layer tree (first child of root)
+            layer = self.PrependItem(
+                parent=self.root, text='', ct_type=1, wnd=ctrl)
+
         # layer is initially unchecked as inactive (beside 'command')
         # use predefined value if given
         if lchecked is not None:
             checked = lchecked
+            render = True if checked else False
         else:
-            checked = True
-        
+            checked = False
+            render = False
+
         self.forceCheck = True
-        
+
         # add text and icons for each layer ltype
         if ltype == 'command':
             self.SetItemImage(layer, self._icon['cmd'])
         elif ltype == 'group':
             self.SetItemImage(layer, self.folder, CT.TreeItemIcon_Normal)
-            self.SetItemImage(layer, self.folder_open, CT.TreeItemIcon_Expanded)
+            self.SetItemImage(
+                layer,
+                self.folder_open,
+                CT.TreeItemIcon_Expanded)
             self.SetItemText(layer, grouptext)
         else:
             if ltype in self._icon:
                 self.SetItemImage(layer, self._icon[ltype])
-                # do not use title() - will not work with ltype == '3d-raster'
-                self.SetItemText(layer, '%s %s' % (LMIcons["layer"+ltype[0].upper()+ltype[1:]].GetLabel(),
-                                                   _('(double click to set properties)') + ' ' * 15))
+                # do not use title() - will not work with ltype == 'raster_3d'
+                self.SetItemText(
+                    layer,
+                    '%s %s' %
+                    (LMIcons[
+                        "layer" +
+                        ltype[0].upper() +
+                        ltype[
+                            1:]].GetLabel(),
+                        _('(double click to set properties)') +
+                        ' ' *
+                        15))
             else:
                 self.SetItemImage(layer, self._icon['cmd'])
                 self.SetItemText(layer, ltype)
@@ -1132,74 +1397,81 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         if ltype != 'group':
             if lcmd and len(lcmd) > 1:
                 cmd = lcmd
-                render = False
                 name, found = GetLayerNameFromCmd(lcmd)
             else:
                 cmd = []
                 if ltype == 'command' and lname:
                     for c in lname.split(';'):
                         cmd.append(c.split(' '))
-                
-                render = False
+
                 name = None
-            
+
             if ctrl:
                 ctrlId = ctrl.GetId()
             else:
                 ctrlId = None
-            
-            # add a data object to hold the layer's command (does not apply to generic command layers)
-            self.SetPyData(layer, ({'cmd'      : cmd,
-                                    'type'     : ltype,
-                                    'ctrl'     : ctrlId,
-                                    'label'    : None,
-                                    'maplayer' : None,
-                                    'vdigit'   : lvdigit,
-                                    'nviz'     : lnviz,
-                                    'propwin'  : None}, 
+
+            # add a data object to hold the layer's command (does not
+            # apply to generic command layers)
+            self.SetPyData(layer, ({'cmd': cmd,
+                                    'type': ltype,
+                                    'ctrl': ctrlId,
+                                    'label': None,
+                                    'maplayer': None,
+                                    'vdigit': lvdigit,
+                                    'nviz': lnviz,
+                                    'propwin': None},
                                    None))
+
             # must be after SetPyData because it calls OnLayerChecked
             # which calls GetVisibleLayers which requires already set PyData
             self.CheckItem(layer, checked=checked)
-            
-            # find previous map layer instance 
+
+            # find previous map layer instance
             prevItem = self.GetFirstChild(self.root)[0]
-            prevMapLayer = None 
+            prevMapLayer = None
             pos = -1
-            while prevItem and prevItem.IsOk() and prevItem != layer: 
-                if self.GetLayerInfo(prevItem, key = 'maplayer'): 
-                    prevMapLayer = self.GetLayerInfo(prevItem, key = 'maplayer')
-                
-                prevItem = self.GetNextItem(prevItem) 
-                
-                if prevMapLayer: 
+            while prevItem and prevItem.IsOk() and prevItem != layer:
+                if self.GetLayerInfo(prevItem, key='maplayer'):
+                    prevMapLayer = self.GetLayerInfo(prevItem, key='maplayer')
+
+                prevItem = self.GetNextItem(prevItem)
+
+                if prevMapLayer:
                     pos = self.Map.GetLayerIndex(prevMapLayer)
-                else: 
+                else:
                     pos = -1
-            
-            maplayer = self.Map.AddLayer(pos = pos,
-                                         ltype = ltype, command = self.GetLayerInfo(prevItem, key = 'cmd'), name = name,
-                                         active = checked, hidden = False,
-                                         opacity = lopacity, render = render)
-            self.SetLayerInfo(layer, key = 'maplayer', value = maplayer)
-            
+
+            maplayer = self.Map.AddLayer(
+                pos=pos,
+                ltype=ltype,
+                command=self.GetLayerInfo(
+                    prevItem,
+                    key='cmd'),
+                name=name,
+                active=checked,
+                hidden=False,
+                opacity=lopacity,
+                render=render)
+            self.SetLayerInfo(layer, key='maplayer', value=maplayer)
+
             # run properties dialog if no properties given
             if len(cmd) == 0:
-                self.PropertiesDialog(layer, show = True)
+                self.PropertiesDialog(layer, show=True)
             else:
                 self.first = False
-        
-        else: # group
-            self.SetPyData(layer, ({'cmd'      : None,
-                                    'type'     : ltype,
-                                    'ctrl'     : None,
-                                    'label'    : None,
-                                    'maplayer' : None,
-                                    'propwin'  : None}, 
+        else:  # group
+            self.SetPyData(layer, ({'cmd': None,
+                                    'type': ltype,
+                                    'ctrl': None,
+                                    'label': None,
+                                    'maplayer': None,
+                                    'propwin': None},
                                    None))
-        
+
         # select new item
-        self.SelectItem(layer, select = True)
+        if lchecked != False:
+            self.SelectItem(layer, select=True)
 
         # use predefined layer name if given
         if lname:
@@ -1213,51 +1485,46 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             if ltype == 'group':
                 self.OnRenameLayer(None)
 
-        
         return layer
 
-    def PropertiesDialog(self, layer, show = True):
+    def PropertiesDialog(self, layer, show=True):
         """Launch the properties dialog"""
-        ltype  = self.GetLayerInfo(layer, key = 'type')
+        ltype = self.GetLayerInfo(layer, key='type')
         if 'propwin' in self.GetLayerInfo(layer) and \
-                self.GetLayerInfo(layer, key = 'propwin') is not None:
+                self.GetLayerInfo(layer, key='propwin') is not None:
             # recycle GUI dialogs
-            win = self.GetLayerInfo(layer, key = 'propwin')
+            win = self.GetLayerInfo(layer, key='propwin')
             if win.IsShown():
                 win.SetFocus()
             else:
                 win.Show()
-            
             return
-        
+
         params = self.GetLayerParams(layer)
-                
-        Debug.msg (3, "LayerTree.PropertiesDialog(): ltype=%s" % \
-                   ltype)
+
+        Debug.msg(3, "LayerTree.PropertiesDialog(): ltype=%s" %
+                  ltype)
 
         cmd = None
-        if self.GetLayerInfo(layer, key = 'cmd'):
-
-            module = GUI(parent = self, show = show, centreOnParent = False)
-            module.ParseCommand(self.GetLayerInfo(layer, key = 'cmd'),
-                                completed = (self.GetOptData,layer,params))
-            
-            self.SetLayerInfo(layer, key = 'cmd', value = module.GetCmd())
-        elif self.GetLayerInfo(layer, key = 'type') != 'command':
+        if self.GetLayerInfo(layer, key='cmd'):
+            module = GUI(parent=self, show=show, centreOnParent=False)
+            module.ParseCommand(self.GetLayerInfo(layer, key='cmd'),
+                                completed=(self.GetOptData, layer, params))
+            self.SetLayerInfo(layer, key='cmd', value=module.GetCmd())
+        elif self.GetLayerInfo(layer, key='type') != 'command':
             cmd = [ltype2command[ltype]]
-            if ltype == 'raster':
-                if UserSettings.Get(group = 'rasterLayer', key = 'opaque', subkey = 'enabled'):
-                    cmd.append('-n')
-            elif ltype == 'rgb':
-                if UserSettings.Get(group = 'rasterLayer', key = 'opaque', subkey = 'enabled'):
+            if ltype in ('raster', 'rgb'):
+                if UserSettings.Get(group='rasterLayer',
+                                    key='opaque', subkey='enabled'):
                     cmd.append('-n')
             elif ltype == 'vector':
                 cmd += GetDisplayVectSettings()
-            
+
         if cmd:
-            GUI(parent = self, centreOnParent = False).ParseCommand(cmd,
-                                                                    completed = (self.GetOptData,layer,params))
-        
+            module = GUI(parent=self, centreOnParent=False)
+            module.ParseCommand(cmd,
+                                completed=(self.GetOptData, layer, params))
+
     def OnActivateLayer(self, event):
         """Double click on the layer item.
         Launch property dialog, or expand/collapse group of items, etc.
@@ -1273,21 +1540,20 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             return
 
         self.PropertiesDialog(layer)
-        
-        
+
     def OnDeleteLayer(self, event):
         """Remove selected layer item from the layer tree"""
         self.lmgr.WorkspaceChanged()
         item = event.GetItem()
-        
+
         try:
             item.properties.Close(True)
         except:
             pass
 
         if item != self.root:
-            Debug.msg (3, "LayerTree.OnDeleteLayer(): name=%s" % \
-                           (self.GetItemText(item)))
+            Debug.msg(3, "LayerTree.OnDeleteLayer(): name=%s" %
+                      (self.GetItemText(item)))
         else:
             self.root = None
 
@@ -1295,8 +1561,8 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         self.Unselect()
 
         try:
-            if self.GetLayerInfo(item, key = 'type') != 'group':
-                self.Map.DeleteLayer(self.GetLayerInfo(item, key = 'maplayer'))
+            if self.GetLayerInfo(item, key='type') != 'group':
+                self.Map.DeleteLayer(self.GetLayerInfo(item, key='maplayer'))
         except:
             pass
 
@@ -1304,11 +1570,12 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         self.rerender = True
         nlayers = self.GetVisibleLayers()
         if not nlayers:
-            self.first = True # layer tree is empty
+            self.first = True  # layer tree is empty
         self.Map.SetLayers(nlayers)
-        
+
         if self.mapdisplay.GetToolbar('vdigit'):
-            self.mapdisplay.toolbars['vdigit'].UpdateListOfLayers (updateTool = True)
+            self.mapdisplay.toolbars[
+                'vdigit'].UpdateListOfLayers(updateTool=True)
 
         # here was some dead code related to layer and nviz
         # however, in condition was rerender = False
@@ -1331,82 +1598,93 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
 
     def OnLayerChecked(self, event):
         """Enable/disable data layer"""
-        self.lmgr.WorkspaceChanged()
-        
-        item    = event.GetItem()
+
+        item = event.GetItem()
         checked = item.IsChecked()
-        
+
         digitToolbar = self.mapdisplay.GetToolbar('vdigit')
         if not self.first:
             # change active parameter for item in layers list in render.Map
-            if self.GetLayerInfo(item, key = 'type') == 'group':
+            if self.GetLayerInfo(item, key='type') == 'group':
                 child, cookie = self.GetFirstChild(item)
                 while child:
                     self.forceCheck = True
                     self.CheckItem(child, checked)
-                    mapLayer = self.GetLayerInfo(child, key = 'maplayer')
-                    if not digitToolbar or \
-                           (digitToolbar and digitToolbar.GetLayer() != mapLayer):
+                    mapLayer = self.GetLayerInfo(child, key='maplayer')
+                    if not digitToolbar or(
+                            digitToolbar
+                            and digitToolbar.GetLayer() !=
+                            mapLayer):
                         # ignore when map layer is edited
                         self.Map.ChangeLayerActive(mapLayer, checked)
+                        self.lmgr.WorkspaceChanged()
                     child = self.GetNextSibling(child)
             else:
-                mapLayer = self.GetLayerInfo(item, key = 'maplayer')
-                if mapLayer and (not digitToolbar or \
-                       (digitToolbar and digitToolbar.GetLayer() != mapLayer)):
+                mapLayer = self.GetLayerInfo(item, key='maplayer')
+                if mapLayer and (not digitToolbar or (
+                        digitToolbar and digitToolbar.GetLayer() != mapLayer)):
                     # ignore when map layer is edited
                     self.Map.ChangeLayerActive(mapLayer, checked)
-        
+                    self.lmgr.WorkspaceChanged()
+
         # nviz
         if self.mapdisplay.IsPaneShown('3d') and \
                 self.GetPyData(item) is not None:
             # nviz - load/unload data layer
-            mapLayer = self.GetLayerInfo(item, key = 'maplayer')
+            mapLayer = self.GetLayerInfo(item, key='maplayer')
             if mapLayer is None:
                 return
 
-            self.mapdisplay.SetStatusText(_("Please wait, updating data..."), 0)
+            self.mapdisplay.SetStatusText(
+                _("Please wait, updating data..."), 0)
+            self.lmgr.WorkspaceChanged()
 
-            if checked: # enable
+            if checked:  # enable
                 if mapLayer.type == 'raster':
                     self.mapdisplay.MapWindow.LoadRaster(item)
-                elif mapLayer.type == '3d-raster':
+                elif mapLayer.type == 'raster_3d':
                     self.mapdisplay.MapWindow.LoadRaster3d(item)
                 elif mapLayer.type == 'vector':
                     vInfo = gvector.vector_info_topo(mapLayer.GetName())
                     if (vInfo['points'] + vInfo['centroids']) > 0:
-                        self.mapdisplay.MapWindow.LoadVector(item, points = True)
+                        self.mapdisplay.MapWindow.LoadVector(item, points=True)
                     if (vInfo['lines'] + vInfo['boundaries']) > 0:
-                        self.mapdisplay.MapWindow.LoadVector(item, points = False)
+                        self.mapdisplay.MapWindow.LoadVector(
+                            item, points=False)
 
-            else: # disable
+            else:  # disable
                 if mapLayer.type == 'raster':
                     self.mapdisplay.MapWindow.UnloadRaster(item)
-                elif mapLayer.type == '3d-raster':
+                elif mapLayer.type == 'raster_3d':
                     self.mapdisplay.MapWindow.UnloadRaster3d(item)
                 elif mapLayer.type == 'vector':
                     self.mapdisplay.MapWindow.UnloadVector(item)
-            
+
             self.mapdisplay.SetStatusText("", 0)
-        
+
         # redraw map if auto-rendering is enabled
         self.rerender = True
         self.Map.SetLayers(self.GetVisibleLayers())
-        
+
+        # if interactive vector feature selection is open -> reset
+        vselect = self._giface.GetMapDisplay().GetDialog('vselect')
+        if vselect:
+            vselect.Reset()
+
     def OnCmdChanged(self, event):
         """Change command string"""
         ctrl = event.GetEventObject().GetId()
-        
+
         # find layer tree item by ctrl
         layer = self.GetFirstChild(self.root)[0]
         while layer and layer.IsOk():
-            if self.GetLayerInfo(layer, key = 'ctrl') == ctrl:
+            if self.GetLayerInfo(layer, key='ctrl') == ctrl:
                 break
             layer = self.GetNextItem(layer)
-        
+
         # change parameters for item in layers list in render.Map
         self.ChangeLayer(layer)
-        
+
         event.Skip()
 
     def OnMotion(self, event):
@@ -1418,12 +1696,13 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         # workaround: in order not to check checkox when clicking outside
         # we need flag TREE_HITTEST_ONITEMCHECKICON but not TREE_HITTEST_ONITEMLABEL
         # this applies only for TR_FULL_ROW_HIGHLIGHT style
-        if (flags & CT.TREE_HITTEST_ONITEMCHECKICON) and not (flags & CT.TREE_HITTEST_ONITEMLABEL):
+        if (flags & CT.TREE_HITTEST_ONITEMCHECKICON) and not (
+                flags & CT.TREE_HITTEST_ONITEMLABEL):
             self.hitCheckbox = True
         else:
             self.hitCheckbox = False
         event.Skip()
-        
+
     def OnChangingSel(self, event):
         """Selection is changing.
 
@@ -1447,10 +1726,13 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         layer = event.GetItem()
         digitToolbar = self.mapdisplay.GetToolbar('vdigit')
         if digitToolbar:
-            mapLayer = self.GetLayerInfo(layer, key = 'maplayer')
-            bgmap = UserSettings.Get(group = 'vdigit', key = 'bgmap', subkey = 'value',
-                                     settings_type='internal')
-            
+            mapLayer = self.GetLayerInfo(layer, key='maplayer')
+            bgmap = UserSettings.Get(
+                group='vdigit',
+                key='bgmap',
+                subkey='value',
+                settings_type='internal')
+
             if digitToolbar.GetLayer() == mapLayer:
                 self._setGradient('vdigit')
             elif bgmap == mapLayer.GetName():
@@ -1461,38 +1743,44 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             self._setGradient()
 
         self.RefreshLine(layer)
-        
+
         # update statusbar -> show command string
-        if self.GetLayerInfo(layer, key = 'maplayer'):
-            cmd = self.GetLayerInfo(layer, key = 'maplayer').GetCmd(string = True)
+        if self.GetLayerInfo(layer, key='maplayer'):
+            cmd = self.GetLayerInfo(layer, key='maplayer').GetCmd(string=True)
             if len(cmd) > 0:
                 self.lmgr.SetStatusText(cmd)
-        
+
         # set region if auto-zooming is enabled
-        if self.GetLayerInfo(layer, key = 'cmd') and \
-               UserSettings.Get(group = 'display', key = 'autoZooming', subkey = 'enabled'):
-            mapLayer = self.GetLayerInfo(layer, key = 'maplayer')
+        if self.GetLayerInfo(layer, key='cmd') and UserSettings.Get(
+                group='display', key='autoZooming', subkey='enabled'):
+            mapLayer = self.GetLayerInfo(layer, key='maplayer')
             if mapLayer.GetType() in ('raster', 'vector'):
                 render = self.mapdisplay.IsAutoRendered()
-                self.mapdisplay.MapWindow.ZoomToMap(layers = [mapLayer,],
-                                                    render = render)
-        
+                self.mapdisplay.MapWindow.ZoomToMap(layers=[mapLayer, ],
+                                                    render=render)
+
         # update nviz tools
         if self.mapdisplay.IsPaneShown('3d'):
             if self.layer_selected.IsChecked():
                 # update Nviz tool window
-                type = self.GetLayerInfo(self.layer_selected, key = 'maplayer').type
-                
+                type = self.GetLayerInfo(
+                    self.layer_selected, key='maplayer').type
+
                 if type == 'raster':
                     self.lmgr.nviz.UpdatePage('surface')
                     self.lmgr.nviz.SetPage('surface')
                 elif type == 'vector':
                     self.lmgr.nviz.UpdatePage('vector')
                     self.lmgr.nviz.SetPage('vector')
-                elif type == '3d-raster':
+                elif type == 'raster_3d':
                     self.lmgr.nviz.UpdatePage('volume')
                     self.lmgr.nviz.SetPage('volume')
 
+        # if interactive vector feature selection is open -> reset
+        vselect = self._giface.GetMapDisplay().GetDialog('vselect')
+        if vselect:
+            vselect.Reset()
+
     def OnEndDrag(self, event):
         self.StopDragging()
         dropTarget = event.GetItem()
@@ -1501,12 +1789,12 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
             self.mapdisplay.MapWindow.UnloadDataLayers(True)
         if self.IsValidDropTarget(dropTarget):
             self.UnselectAll()
-            if dropTarget != None:
+            if dropTarget is not None:
                 self.SelectItem(dropTarget)
             self.OnDrop(dropTarget, self._dragItem)
-        elif dropTarget == None:
+        elif dropTarget is None:
             self.OnDrop(dropTarget, self._dragItem)
-            
+
     def OnDrop(self, dropTarget, dragItem):
         # save everthing associated with item to drag
         try:
@@ -1514,69 +1802,76 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         except:
             return
 
-        Debug.msg (4, "LayerTree.OnDrop(): layer=%s" % \
-                   (self.GetItemText(dragItem)))
-        
-        # recreate data layer, insert copy of layer in new position, and delete original at old position
-        newItem  = self.RecreateItem (dragItem, dropTarget)
+        Debug.msg(4, "LayerTree.OnDrop(): layer=%s" %
+                  (self.GetItemText(dragItem)))
+
+        # recreate data layer, insert copy of layer in new position, and delete
+        # original at old position
+        newItem = self.RecreateItem(dragItem, dropTarget)
 
         # if recreated layer is a group, also recreate its children
-        if  self.GetLayerInfo(newItem, key = 'type') == 'group':
+        if self.GetLayerInfo(newItem, key='type') == 'group':
             (child, cookie) = self.GetFirstChild(dragItem)
             if child:
                 while child:
-                    self.RecreateItem(child, dropTarget, parent = newItem)
+                    self.RecreateItem(child, dropTarget, parent=newItem)
                     child, cookie = self.GetNextChild(old, cookie)
-        
+
         # delete layer at original position
         try:
-            self.Delete(old) # entry in render.Map layers list automatically deleted by OnDeleteLayer handler
+            # entry in render.Map layers list automatically deleted by
+            # OnDeleteLayer handler
+            self.Delete(old)
         except AttributeError:
             pass
 
         # redraw map if auto-rendering is enabled
         self.rerender = True
         self.Map.SetLayers(self.GetVisibleLayers())
-        
+
         # select new item
         self.SelectItem(newItem)
-        
-    def RecreateItem (self, dragItem, dropTarget, parent = None):
+
+    def RecreateItem(self, dragItem, dropTarget, parent=None):
         """Recreate item (needed for OnEndDrag())
         """
-        Debug.msg (4, "LayerTree.RecreateItem(): layer=%s" % \
-                   self.GetItemText(dragItem))
+        Debug.msg(4, "LayerTree.RecreateItem(): layer=%s" %
+                  self.GetItemText(dragItem))
 
         # fetch data (dragItem)
         checked = self.IsItemChecked(dragItem)
-        image   = self.GetItemImage(dragItem, 0)
-        text    = self.GetItemText(dragItem)
-        if self.GetLayerInfo(dragItem, key = 'type') == 'command':
+        image = self.GetItemImage(dragItem, 0)
+        text = self.GetItemText(dragItem)
+        if self.GetLayerInfo(dragItem, key='type') == 'command':
             # recreate command layer
             newctrl = self._createCommandCtrl()
             try:
-                newctrl.SetValue(self.GetLayerInfo(dragItem, key = 'maplayer').GetCmd(string = True))
+                newctrl.SetValue(
+                    self.GetLayerInfo(
+                        dragItem,
+                        key='maplayer').GetCmd(
+                        string=True))
             except:
                 pass
             newctrl.Bind(wx.EVT_TEXT_ENTER, self.OnCmdChanged)
             data = self.GetPyData(dragItem)
 
-        elif self.GetLayerInfo(dragItem, key = 'ctrl'):
+        elif self.GetLayerInfo(dragItem, key='ctrl'):
             # recreate data layer
-            btnbmp = LMIcons["layerOptions"].GetBitmap((16,16))
-            newctrl = buttons.GenBitmapButton(self, id = wx.ID_ANY, bitmap = btnbmp, size = (24, 24))
+            btnbmp = LMIcons["layerOptions"].GetBitmap((16, 16))
+            newctrl = buttons.GenBitmapButton(
+                self, id=wx.ID_ANY, bitmap=btnbmp, size=(24, 24))
             newctrl.SetToolTipString(_("Click to edit layer settings"))
             self.Bind(wx.EVT_BUTTON, self.OnLayerContextMenu, newctrl)
             data = self.GetPyData(dragItem)
-        
 
-        elif self.GetLayerInfo(dragItem, key = 'type') == 'group':
+        elif self.GetLayerInfo(dragItem, key='type') == 'group':
             # recreate group
             newctrl = None
-            data    = None
-            
+            data = None
+
         # decide where to put recreated item
-        if dropTarget != None and dropTarget != self.GetRootItem():
+        if dropTarget is not None and dropTarget != self.GetRootItem():
             if parent:
                 # new item is a group
                 afteritem = parent
@@ -1585,129 +1880,147 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
                 afteritem = dropTarget
 
             # dragItem dropped on group
-            if  self.GetLayerInfo(afteritem, key = 'type') == 'group':
-                newItem = self.PrependItem(afteritem, text = text, \
-                                      ct_type = 1, wnd = newctrl, image = image, \
-                                      data = data)
+            if self.GetLayerInfo(afteritem, key='type') == 'group':
+                newItem = self.PrependItem(afteritem, text=text,
+                                           ct_type=1, wnd=newctrl, image=image,
+                                           data=data)
                 self.Expand(afteritem)
             else:
-                #dragItem dropped on single layer
+                # dragItem dropped on single layer
                 newparent = self.GetItemParent(afteritem)
-                newItem = self.InsertItem(newparent, self.GetPrevSibling(afteritem), \
-                                       text = text, ct_type = 1, wnd = newctrl, \
-                                       image = image, data = data)
+                newItem = self.InsertItem(
+                    newparent,
+                    self.GetPrevSibling(afteritem),
+                    text=text,
+                    ct_type=1,
+                    wnd=newctrl,
+                    image=image,
+                    data=data)
         else:
-            # if dragItem not dropped on a layer or group, append or prepend it to the layer tree
+            # if dragItem not dropped on a layer or group, append or prepend it
+            # to the layer tree
             if self.flag & wx.TREE_HITTEST_ABOVE:
-                newItem = self.PrependItem(self.root, text = text, \
-                                      ct_type = 1, wnd = newctrl, image = image, \
-                                      data = data)
+                newItem = self.PrependItem(self.root, text=text,
+                                           ct_type=1, wnd=newctrl, image=image,
+                                           data=data)
             elif (self.flag &  wx.TREE_HITTEST_BELOW) or (self.flag & wx.TREE_HITTEST_NOWHERE) \
-                     or (self.flag & wx.TREE_HITTEST_TOLEFT) or (self.flag & wx.TREE_HITTEST_TORIGHT):
-                newItem = self.AppendItem(self.root, text = text, \
-                                      ct_type = 1, wnd = newctrl, image = image, \
-                                      data = data)
+                    or (self.flag & wx.TREE_HITTEST_TOLEFT) or (self.flag & wx.TREE_HITTEST_TORIGHT):
+                newItem = self.AppendItem(self.root, text=text,
+                                          ct_type=1, wnd=newctrl, image=image,
+                                          data=data)
 
-        #update new layer 
+        # update new layer
         self.SetPyData(newItem, self.GetPyData(dragItem))
         if newctrl:
-            self.SetLayerInfo(newItem, key = 'ctrl', value = newctrl.GetId())
+            self.SetLayerInfo(newItem, key='ctrl', value=newctrl.GetId())
         else:
-            self.SetLayerInfo(newItem, key = 'ctrl', value = None)
-            
+            self.SetLayerInfo(newItem, key='ctrl', value=None)
+
         self.forceCheck = True
-        self.CheckItem(newItem, checked = checked) # causes a new render
-        
+        self.CheckItem(newItem, checked=checked)  # causes a new render
+
         return newItem
 
-    def _getLayerName(self, item, lname = ''):
+    def _getLayerName(self, item, lname=''):
         """Get layer name string
 
         :param lname: optional layer name
         """
-        mapLayer = self.GetLayerInfo(item, key = 'maplayer')
+        mapLayer = self.GetLayerInfo(item, key='maplayer')
         if not mapLayer:
             return lname
-        
+
         if not lname:
-            lname  = self.GetLayerInfo(item, key = 'label')
-        opacity  = int(mapLayer.GetOpacity() * 100)
+            lname = self.GetLayerInfo(item, key='label')
+        opacity = int(mapLayer.GetOpacity() * 100)
         if not lname:
-            dcmd    = self.GetLayerInfo(item, key = 'cmd')
-            lname, found = GetLayerNameFromCmd(dcmd, layerType = mapLayer.GetType(),
-                                               fullyQualified = True)
+            dcmd = self.GetLayerInfo(item, key='cmd')
+            lname, found = GetLayerNameFromCmd(
+                dcmd, layerType=mapLayer.GetType(), fullyQualified=True)
             if not found:
                 return None
-        
+
         if opacity < 100:
             return lname + ' (%s %d' % (_('opacity:'), opacity) + '%)'
-        
+
         return lname
-                
+
     def GetOptData(self, dcmd, layer, params, propwin):
         """Process layer data (when changes in properties dialog are applied)
         """
         # set layer text to map name
         if dcmd:
-            self.SetLayerInfo(layer, key = 'cmd', value = dcmd)
-            mapText  = self._getLayerName(layer)
+            self.SetLayerInfo(layer, key='cmd', value=dcmd)
+            mapText = self._getLayerName(layer)
             mapName, found = GetLayerNameFromCmd(dcmd)
-            mapLayer = self.GetLayerInfo(layer, key = 'maplayer')
+            mapLayer = self.GetLayerInfo(layer, key='maplayer')
             self.SetItemText(layer, mapName)
-            
+
             if not mapText or not found:
                 propwin.Hide()
-                GWarning(parent = self,
-                         message = _("Map <%s> not found.") % mapName)
+                GWarning(parent=self,
+                         message=_("Map <%s> not found.") % mapName)
                 return
-        
+
+            if not mapLayer.IsActive():
+                self.forceCheck = True
+                self.CheckItem(layer, True)
+                mapLayer.SetActive(True)
+
         # update layer data
         if params:
             self.SetPyData(layer, (self.GetLayerInfo(layer), params))
-        self.SetLayerInfo(layer, key = 'propwin', value = propwin)
-        
+        self.SetLayerInfo(layer, key='propwin', value=propwin)
+
         # change parameters for item in layers list in render.Map
-        self.ChangeLayer(layer)
-        
+        if params:
+            self.ChangeLayer(layer)
+
         # set region if auto-zooming is enabled or layer tree contains
         # only one map layer
         if dcmd:
-            if not self.mapdisplay.IsPaneShown('3d') and (self.first or
-                    UserSettings.Get(group = 'display', key = 'autoZooming', subkey = 'enabled')):
-                mapLayer = self.GetLayerInfo(layer, key = 'maplayer')
+            if not self.mapdisplay.IsPaneShown('3d') and(
+                self.first or UserSettings.Get(
+                    group='display', key='autoZooming', subkey='enabled')):
+                mapLayer = self.GetLayerInfo(layer, key='maplayer')
                 if mapLayer.GetType() in ('raster', 'vector'):
-                    self.mapdisplay.MapWindow.ZoomToMap(layers = [mapLayer,],
-                                                        render = False)
-            
-            self.first = False # first layer has been already added to
-                               # the layer tree
-        
-        # update nviz session        
+                    self.mapdisplay.MapWindow.ZoomToMap(layers=[mapLayer, ],
+                                                        render=False)
+
+            self.first = False  # first layer has been already added to
+            # the layer tree
+
+        # update nviz session
         if self.mapdisplay.IsPaneShown('3d') and dcmd:
-            mapLayer = self.GetLayerInfo(layer, key = 'maplayer')
+            mapLayer = self.GetLayerInfo(layer, key='maplayer')
             mapWin = self.mapdisplay.MapWindow
             if len(mapLayer.GetCmd()) > 0:
                 if mapLayer.type == 'raster':
                     if mapWin.IsLoaded(layer):
                         mapWin.UnloadRaster(layer)
-                    
+
                     mapWin.LoadRaster(layer)
-                    
-                elif mapLayer.type == '3d-raster':
+
+                elif mapLayer.type == 'raster_3d':
                     if mapWin.IsLoaded(layer):
                         mapWin.UnloadRaster3d(layer)
-                    
+
                     mapWin.LoadRaster3d(layer)
-                    
+
                 elif mapLayer.type == 'vector':
                     if mapWin.IsLoaded(layer):
                         mapWin.UnloadVector(layer)
-                    
+
                     mapWin.LoadVector(layer)
 
                 # reset view when first layer loaded
-                nlayers = len(mapWin.Map.GetListOfLayers(ltype = ('raster', '3d-raster', 'vector'),
-                                                         active = True))
+                nlayers = len(
+                    mapWin.Map.GetListOfLayers(
+                        ltype=(
+                            'raster',
+                            'raster_3d',
+                            'vector'),
+                        active=True))
                 if nlayers < 2:
                     mapWin.ResetView()
 
@@ -1746,12 +2059,12 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
 
     def ChangeLayer(self, item):
         """Change layer"""
-        type = self.GetLayerInfo(item, key = 'type')
+        type = self.GetLayerInfo(item, key='type')
         layerName = None
-        
+
         if type == 'command':
-            win = self.FindWindowById(self.GetLayerInfo(item, key = 'ctrl'))
-            if win.GetValue() != None:
+            win = self.FindWindowById(self.GetLayerInfo(item, key='ctrl'))
+            if win.GetValue() is not None:
                 cmd = win.GetValue().split(';')
                 cmdlist = []
                 for c in cmd:
@@ -1761,26 +2074,37 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
                 hidden = not self.IsVisible(item)
         elif type != 'group':
             if self.GetPyData(item) is not None:
-                cmdlist = self.GetLayerInfo(item, key = 'cmd')
-                opac = self.GetLayerInfo(item, key = 'maplayer').GetOpacity()
+                cmdlist = self.GetLayerInfo(item, key='cmd')
+                opac = self.GetLayerInfo(item, key='maplayer').GetOpacity()
                 chk = self.IsItemChecked(item)
                 hidden = not self.IsVisible(item)
                 # determine layer name
-                layerName, found = GetLayerNameFromCmd(cmdlist, fullyQualified = True)
+                layerName, found = GetLayerNameFromCmd(
+                    cmdlist, fullyQualified=True)
                 if not found:
                     layerName = self.GetItemText(item)
-        
-        maplayer = self.Map.ChangeLayer(layer = self.GetLayerInfo(item, key = 'maplayer'), type = type,
-                                        command = cmdlist, name = layerName,
-                                        active = chk, hidden = hidden, opacity = opac, render = False)
-        
-        self.SetLayerInfo(item, key = 'maplayer', value = maplayer)
-        
-        # if digitization tool enabled -> update list of available vector map layers
+
+        maplayer = self.Map.ChangeLayer(
+            layer=self.GetLayerInfo(
+                item,
+                key='maplayer'),
+            type=type,
+            command=cmdlist,
+            name=layerName,
+            active=chk,
+            hidden=hidden,
+            opacity=opac)
+
+        self.SetLayerInfo(item, key='maplayer', value=maplayer)
+
+        # if digitization tool enabled -> update list of available vector map
+        # layers
         if self.mapdisplay.GetToolbar('vdigit'):
-            self.mapdisplay.GetToolbar('vdigit').UpdateListOfLayers(updateTool = True)
+            self.mapdisplay.GetToolbar(
+                'vdigit').UpdateListOfLayers(updateTool=True)
 
         self.Map.SetLayers(self.GetVisibleLayers())
+
         # redraw map if auto-rendering is enabled
         self.rerender = True
 
@@ -1790,9 +2114,9 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
 
     def FindItemByData(self, key, value):
         """Find item based on key and value (see PyData[0]).
-        
+
         If key is 'name', finds item(s) of given maplayer name.
-        
+
         :return: item instance
         :return: None not found
         """
@@ -1813,30 +2137,30 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         while item and item.IsOk():
             if i == index:
                 return item
-            
+
             item = self.GetNextItem(item)
             i += 1
-        
+
         return None
-    
-    def EnableItemType(self, type, enable = True):
+
+    def EnableItemType(self, type, enable=True):
         """Enable/disable items in layer tree"""
         item = self.GetFirstChild(self.root)[0]
         while item and item.IsOk():
-            mapLayer = self.GetLayerInfo(item, key = 'maplayer')
+            mapLayer = self.GetLayerInfo(item, key='maplayer')
             if mapLayer and type == mapLayer.type:
                 self.EnableItem(item, enable)
-            
+
             item = self.GetNextSibling(item)
-        
+
     def __FindSubItemByData(self, item, key, value):
         """Support method for FindItemByData"""
         while item and item.IsOk():
-            itemValue = self.GetLayerInfo(item, key = key)
-            
+            itemValue = self.GetLayerInfo(item, key=key)
+
             if value == itemValue:
                 return item
-            if self.GetLayerInfo(item, key = 'type') == 'group':
+            if self.GetLayerInfo(item, key='type') == 'group':
                 subItem = self.GetFirstChild(item)[0]
                 found = self.__FindSubItemByData(subItem, key, value)
                 if found:
@@ -1850,19 +2174,19 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         items = []
         while item and item.IsOk():
             try:
-                itemLayer = self.GetLayerInfo(item, key = 'maplayer')
+                itemLayer = self.GetLayerInfo(item, key='maplayer')
             except KeyError:
                 return None
-            
+
             if itemLayer and value == itemLayer.GetName():
                 items.append(item)
-            if self.GetLayerInfo(item, key = 'type') == 'group':
+            if self.GetLayerInfo(item, key='type') == 'group':
                 subItem = self.GetFirstChild(item)[0]
                 found = self.__FindSubItemByName(subItem, value)
                 if found:
                     items.extend(found)
             item = self.GetNextSibling(item)
-        
+
         if items:
             return items
         return None
@@ -1872,7 +2196,6 @@ class LayerTree(treemixin.DragAndDrop, CT.CustomTreeCtrl):
         height = 25
         if sys.platform in ('win32', 'darwin'):
             height = 40
-        ctrl = wx.TextCtrl(self, id = wx.ID_ANY, value = '',
-                               pos = wx.DefaultPosition, size = (self.GetSize()[0]-100, height),
-                               style = wx.TE_PROCESS_ENTER | wx.TE_DONTWRAP)
+        ctrl = wx.TextCtrl(self, id=wx.ID_ANY, value='', pos=wx.DefaultPosition, size=(
+            self.GetSize()[0] - 100, height), style=wx.TE_PROCESS_ENTER | wx.TE_DONTWRAP)
         return ctrl
diff --git a/gui/wxpython/lmgr/menudata.py b/gui/wxpython/lmgr/menudata.py
index ee9df9d..3278f60 100644
--- a/gui/wxpython/lmgr/menudata.py
+++ b/gui/wxpython/lmgr/menudata.py
@@ -17,7 +17,7 @@ This program is free software under the GNU General Public License
 
 import os
 
-from core.menutree  import MenuTreeModelBuilder
+from core.menutree import MenuTreeModelBuilder
 from core.toolboxes import getMenudataFile
 from core.globalvar import WXGUIDIR
 from core.gcmd import GError
@@ -25,6 +25,7 @@ from core.utils import _
 
 
 class LayerManagerMenuData(MenuTreeModelBuilder):
+
     def __init__(self, filename=None):
         if filename:
             expandAddons = False
@@ -37,7 +38,8 @@ class LayerManagerMenuData(MenuTreeModelBuilder):
                                        newFile='menudata.xml',
                                        fallback=fallback)
         try:
-            MenuTreeModelBuilder.__init__(self, filename, expandAddons=expandAddons)
+            MenuTreeModelBuilder.__init__(
+                self, filename, expandAddons=expandAddons)
         except (ValueError, AttributeError, TypeError):
             GError(_("Unable to parse user toolboxes XML files. "
                      "Default main menu will be loaded."))
@@ -46,6 +48,7 @@ class LayerManagerMenuData(MenuTreeModelBuilder):
 
 
 class LayerManagerModuleTree(MenuTreeModelBuilder):
+
     def __init__(self, filename=None):
         if filename:
             expandAddons = False
@@ -59,7 +62,8 @@ class LayerManagerModuleTree(MenuTreeModelBuilder):
                                        fallback=fallback)
         # TODO: try-except useless?
         try:
-            MenuTreeModelBuilder.__init__(self, filename, expandAddons=expandAddons)
+            MenuTreeModelBuilder.__init__(
+                self, filename, expandAddons=expandAddons)
         except (ValueError, AttributeError, TypeError):
             GError(_("Unable to parse user toolboxes XML files. "
                      "Default module tree will be loaded."))
diff --git a/gui/wxpython/lmgr/pyshell.py b/gui/wxpython/lmgr/pyshell.py
index 90f96e0..9141949 100644
--- a/gui/wxpython/lmgr/pyshell.py
+++ b/gui/wxpython/lmgr/pyshell.py
@@ -21,61 +21,74 @@ This program is free software under the GNU General Public License
 import sys
 
 import wx
-from wx.py.shell   import Shell as PyShell
+from wx.py.shell import Shell as PyShell
 from wx.py.version import VERSION
 
 import grass.script as grass
+from grass.script.utils import try_remove
+
 from core.utils import _
 
+
 class PyShellWindow(wx.Panel):
     """Python Shell Window"""
-    def __init__(self, parent, giface, id = wx.ID_ANY, **kwargs):
+
+    def __init__(self, parent, giface, id=wx.ID_ANY, **kwargs):
         self.parent = parent
         self.giface = giface
-        
-        wx.Panel.__init__(self, parent = parent, id = id, **kwargs)
-        
+
+        wx.Panel.__init__(self, parent=parent, id=id, **kwargs)
+
         self.intro = _("Welcome to wxGUI Interactive Python Shell %s") % VERSION + "\n\n" + \
             _("Type %s for more GRASS scripting related information.") % "\"help(grass)\"" + "\n" + \
             _("Type %s to add raster or vector to the layer tree.") % "\"AddLayer()\"" + "\n\n"
-        self.shell = PyShell(parent = self, id = wx.ID_ANY,
-                             introText = self.intro,
+        self.shell = PyShell(parent=self, id=wx.ID_ANY,
+                             introText=self.intro,
                              locals={'grass': grass,
                                      'AddLayer': self.AddLayer})
-        
+
         sys.displayhook = self._displayhook
-        
+
         self.btnClear = wx.Button(self, wx.ID_CLEAR)
         self.btnClear.Bind(wx.EVT_BUTTON, self.OnClear)
         self.btnClear.SetToolTipString(_("Delete all text from the shell"))
-                
+
+        self.btnSimpleEditor = wx.Button(
+            self, id=wx.ID_ANY, label=_("Simple &editor"))
+        self.btnSimpleEditor.Bind(wx.EVT_BUTTON, self.OnSimpleEditor)
+        self.btnSimpleEditor.SetToolTipString(
+            _("Open a simple Python code editor"))
+
         self._layout()
-        
+
     def _displayhook(self, value):
-        print value # do not modify __builtin__._
-        
+        print value  # do not modify __builtin__._
+
     def _layout(self):
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
-        sizer.Add(item = self.shell, proportion = 1,
-                  flag = wx.EXPAND)
-        
+
+        sizer.Add(item=self.shell, proportion=1,
+                  flag=wx.EXPAND)
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnClear, proportion = 0,
-                     flag = wx.EXPAND | wx.RIGHT, border = 5)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        
+        btnSizer.Add(item=self.btnSimpleEditor, proportion=0,
+                     flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
+        btnSizer.AddStretchSpacer()
+        btnSizer.Add(item=self.btnClear, proportion=0,
+                     flag=wx.EXPAND | wx.ALIGN_RIGHT, border=5)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL | wx.EXPAND, border=5)
+
         sizer.Fit(self)
         sizer.SetSizeHints(self)
-        
+
         self.SetSizer(sizer)
-        
+
         self.Fit()
-        self.SetAutoLayout(True)        
+        self.SetAutoLayout(True)
         self.Layout()
 
-    def AddLayer(self, name, ltype = 'auto'):
+    def AddLayer(self, name, ltype='auto'):
         """Add selected map to the layer tree
 
         :param name: name of raster/vector map to be added
@@ -84,33 +97,44 @@ class PyShellWindow(wx.Panel):
         fname = None
         if ltype == 'raster' or ltype != 'vector':
             # check for raster
-            fname = grass.find_file(name, element = 'cell')['fullname']
+            fname = grass.find_file(name, element='cell')['fullname']
             if fname:
                 ltype = 'raster'
                 lcmd = 'd.rast'
-        
+
         if not fname and (ltype == 'vector' or ltype != 'raster'):
             # if not found check for vector
-            fname = grass.find_file(name, element = 'vector')['fullname']
+            fname = grass.find_file(name, element='vector')['fullname']
             if fname:
                 ltype = 'vector'
                 lcmd = 'd.vect'
-        
+
         if not fname:
             return _("Raster or vector map <%s> not found") % (name)
-        
-        self.giface.GetLayerTree().AddLayer(ltype = ltype,
-                                            lname = fname,
-                                            lchecked = True,
-                                            lcmd = [lcmd, 'map=%s' % fname])
+
+        self.giface.GetLayerTree().AddLayer(ltype=ltype,
+                                            lname=fname,
+                                            lchecked=True,
+                                            lcmd=[lcmd, 'map=%s' % fname])
         if ltype == 'raster':
             return _('Raster map <%s> added') % fname
-        
+
         return _('Vector map <%s> added') % fname
-    
+
     def OnClear(self, event):
         """Delete all text from the shell
         """
         self.shell.clear()
         self.shell.showIntro(self.intro)
         self.shell.prompt()
+
+    def OnSimpleEditor(self, event):
+        # import on demand
+        from gui_core.pyedit import PyEditFrame
+
+        # we don't keep track of them and we don't care about open files
+        # there when closing the main GUI
+        simpleEditor = PyEditFrame(parent=self, giface=self.giface)
+        simpleEditor.SetSize(self.parent.GetSize())
+        simpleEditor.CenterOnScreen()
+        simpleEditor.Show()
diff --git a/gui/wxpython/lmgr/toolbars.py b/gui/wxpython/lmgr/toolbars.py
index 4ccacb6..b190035 100644
--- a/gui/wxpython/lmgr/toolbars.py
+++ b/gui/wxpython/lmgr/toolbars.py
@@ -22,19 +22,21 @@ This program is free software under the GNU General Public License
 @author Anna Kratochvilova <kratochanna gmail.com>
 """
 
-from core.gcmd          import RunCommand
-from gui_core.toolbars  import BaseToolbar, BaseIcons
-from icons.icon         import MetaIcon
+from core.gcmd import RunCommand
+from gui_core.toolbars import BaseToolbar, BaseIcons
+from icons.icon import MetaIcon
 from core.utils import _
 
+
 class LMWorkspaceToolbar(BaseToolbar):
     """Layer Manager `workspace` toolbar
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
@@ -42,15 +44,19 @@ class LMWorkspaceToolbar(BaseToolbar):
         """Toolbar data
         """
         icons = {
-            'newdisplay'    : MetaIcon(img = 'monitor-create',
-                                       label = _('Start new map display')),
-            'workspaceNew'  : MetaIcon(img = 'create',
-                                       label = _('Create new workspace (Ctrl+N)')),
-            'workspaceOpen' : MetaIcon(img = 'open',
-                                       label = _('Open existing workspace file (Ctrl+O)')),
-            'workspaceSave' : MetaIcon(img = 'save',
-                                       label = _('Save current workspace to file (Ctrl+S)')),
-            }
+            'newdisplay': MetaIcon(
+                img='monitor-create',
+                label=_('Start new map display')),
+            'workspaceNew': MetaIcon(
+                img='create',
+                label=_('Create new workspace (Ctrl+N)')),
+            'workspaceOpen': MetaIcon(
+                img='open',
+                label=_('Open existing workspace file (Ctrl+O)')),
+            'workspaceSave': MetaIcon(
+                img='save',
+                label=_('Save current workspace to file (Ctrl+S)')),
+        }
         return self._getToolbarData((('newdisplay', icons["newdisplay"],
                                       self.parent.OnNewDisplay),
                                      ('workspaceNew', icons["workspaceNew"],
@@ -61,14 +67,16 @@ class LMWorkspaceToolbar(BaseToolbar):
                                       self.parent.OnWorkspaceSave),
                                      ))
 
+
 class LMDataToolbar(BaseToolbar):
     """Layer Manager `data` toolbar
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
@@ -76,24 +84,33 @@ class LMDataToolbar(BaseToolbar):
         """Toolbar data
         """
         icons = {
-            'addMulti'   : MetaIcon(img = 'layer-open',
-                                    label = _('Add multiple raster or vector map layers (Ctrl+Shift+L)')),
-            'addRast'    : BaseIcons['addRast'].SetLabel(_("Add raster map layer (Ctrl+Shift+R)")),
-            'rastMisc'   : MetaIcon(img = 'layer-raster-more',
-                                    label = _('Add various raster map layers (RGB, HIS, shaded relief...)')),
-            'addVect'    : BaseIcons['addVect'].SetLabel(_("Add vector map layer (Ctrl+Shift+V)")),
-            'vectMisc'   : MetaIcon(img = 'layer-vector-more',
-                                    label = _('Add various vector map layers (thematic, chart...)')),
-            'addWS'       : MetaIcon(img = 'layer-wms-add',
-                                     label = _('Add web service layer (WMS, WMTS, NASA OnEarth)')),
-            'addGroup'   : MetaIcon(img = 'layer-group-add',
-                                    label = _('Add group')),
-            'addOverlay' : MetaIcon(img = 'layer-more',
-                                    label = _('Add various overlays')),
-            'delCmd'     : MetaIcon(img = 'layer-remove',
-                                    label = _('Remove selected map layer(s) from layer tree')),
-            }
-        
+            'addMulti': MetaIcon(
+                img='layer-open',
+                label=_('Add multiple raster or vector map layers (Ctrl+Shift+L)')),
+            'addRast': BaseIcons['addRast'].SetLabel(
+                _("Add raster map layer (Ctrl+Shift+R)")),
+            'rastMisc': MetaIcon(
+                img='layer-raster-more',
+                label=_('Add various raster map layers (RGB, HIS, shaded relief...)')),
+            'addVect': BaseIcons['addVect'].SetLabel(
+                _("Add vector map layer (Ctrl+Shift+V)")),
+            'vectMisc': MetaIcon(
+                img='layer-vector-more',
+                label=_('Add various vector map layers (thematic, chart...)')),
+            'addWS': MetaIcon(
+                img='layer-wms-add',
+                label=_('Add web service layer (WMS, WMTS, NASA OnEarth)')),
+            'addGroup': MetaIcon(
+                img='layer-group-add',
+                label=_('Add group')),
+            'addOverlay': MetaIcon(
+                img='layer-more',
+                label=_('Add various overlays')),
+            'delCmd': MetaIcon(
+                img='layer-remove',
+                label=_('Remove selected map layer(s) from layer tree')),
+        }
+
         return self._getToolbarData((('addMulti', icons["addMulti"],
                                       self.parent.OnAddMaps),
                                      ('addrast', icons["addRast"],
@@ -104,25 +121,27 @@ class LMDataToolbar(BaseToolbar):
                                       self.parent.OnAddVector),
                                      ('vectmisc', icons["vectMisc"],
                                       self.parent.OnAddVectorMisc),
-                                     ('addovl',  icons["addOverlay"],
+                                     ('addovl', icons["addOverlay"],
                                       self.parent.OnAddOverlay),
-                                     ('addWS',  icons["addWS"],
+                                     ('addWS', icons["addWS"],
                                       self.parent.OnAddWS),
                                      (None, ),
-                                     ('addgrp',  icons["addGroup"],
+                                     ('addgrp', icons["addGroup"],
                                       self.parent.OnAddGroup),
-                                     ('delcmd',  icons["delCmd"],
+                                     ('delcmd', icons["delCmd"],
                                       self.parent.OnDeleteLayer),
                                      ))
 
+
 class LMToolsToolbar(BaseToolbar):
     """Layer Manager `tools` toolbar
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
@@ -130,20 +149,22 @@ class LMToolsToolbar(BaseToolbar):
         """Toolbar data
         """
         icons = {
-            'import'  : MetaIcon(img = 'layer-import',
-                                 label = _('Import/link raster or vector data')),
-            'mapcalc' : MetaIcon(img = 'raster-calculator',
-                                 label = _('Raster Map Calculator')),
-            'modeler' : MetaIcon(img = 'modeler-main',
-                                 label = _('Graphical Modeler')),
-            'georectify' : MetaIcon(img = 'georectify',
-                                 label = _('Georectifier')),
-            'composer': MetaIcon(img = 'print-compose',
-                                 label = _('Cartographic Composer')),
-            'script-load': MetaIcon(img = 'script-load',
-                                 label = _('Launch user-defined script')),
-            }
-        
+            'import': MetaIcon(img='layer-import',
+                               label=_('Import/link raster or vector data')),
+            'mapcalc': MetaIcon(img='raster-calculator',
+                                label=_('Raster Map Calculator')),
+            'modeler': MetaIcon(img='modeler-main',
+                                label=_('Graphical Modeler')),
+            'georectify': MetaIcon(img='georectify',
+                                   label=_('Georectifier')),
+            'composer': MetaIcon(img='print-compose',
+                                 label=_('Cartographic Composer')),
+            'script-load': MetaIcon(img='script-load',
+                                    label=_('Launch user-defined script')),
+            'python': MetaIcon(img='python',
+                               label=_('Open a simple Python code editor')),
+        }
+
         return self._getToolbarData((('importMap', icons["import"],
                                       self.parent.OnImportMenu),
                                      (None, ),
@@ -158,16 +179,20 @@ class LMToolsToolbar(BaseToolbar):
                                      (None, ),
                                      ('script-load', icons['script-load'],
                                       self.parent.OnRunScript),
+                                     ('python', icons['python'],
+                                      self.parent.pyshell.OnSimpleEditor),
                                      ))
 
+
 class LMMiscToolbar(BaseToolbar):
     """Layer Manager `misc` toolbar
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
@@ -175,24 +200,26 @@ class LMMiscToolbar(BaseToolbar):
         """Toolbar data
         """
         icons = {
-            'settings'   : BaseIcons['settings'].SetLabel(_('GUI settings')),
-            'help'       : BaseIcons['help'].SetLabel(_('GRASS manual')),
-            }
-        
+            'settings': BaseIcons['settings'].SetLabel(_('GUI settings')),
+            'help': BaseIcons['help'].SetLabel(_('GRASS manual')),
+        }
+
         return self._getToolbarData((('settings', icons["settings"],
                                       self.parent.OnPreferences),
                                      ('help', icons["help"],
                                       self.parent.OnHelp),
                                      ))
 
+
 class LMVectorToolbar(BaseToolbar):
     """Layer Manager `vector` toolbar
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
 
@@ -200,47 +227,54 @@ class LMVectorToolbar(BaseToolbar):
         """Toolbar data
         """
         icons = {
-            'vdigit'     : MetaIcon(img = 'edit',
-                                    label = _('Edit selected vector map')),
-            'attrTable'  : MetaIcon(img = 'table',
-                                    label = _('Show attribute data for selected vector map')),
-            }
-        
+            'vdigit': MetaIcon(
+                img='edit',
+                label=_('Edit selected vector map')),
+            'attrTable': MetaIcon(
+                img='table',
+                label=_('Show attribute data for selected vector map')),
+        }
+
         return self._getToolbarData((('vdigit', icons["vdigit"],
                                       self.parent.OnVDigit),
                                      ('attribute', icons["attrTable"],
                                       self.parent.OnShowAttributeTable),
                                      ))
 
+
 class LMNvizToolbar(BaseToolbar):
     """Nviz toolbar
     """
+
     def __init__(self, parent):
         self.lmgr = parent
-        
+
         BaseToolbar.__init__(self, parent)
-        
+
         # only one dialog can be open
-        self.settingsDialog   = None
-        
+        self.settingsDialog = None
+
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         icons = {
-            'cmd'    : MetaIcon(img = 'script-save',
-                                label = _('Generate command for m.nviz.image'),
-                                desc = _('Generate command for m.nviz.image based on current state')),
-            'settings' : MetaIcon(img = '3d-settings',
-                                  label = _('3D view mode settings'),
-                                  desc = _('Show 3D view mode settings dialog')),
-            'help'   : MetaIcon(img = '3d-help',
-                                label = _('Show 3D view mode manual')),
-            }
-        
+            'cmd': MetaIcon(
+                img='script-save',
+                label=_('Generate command for m.nviz.image'),
+                desc=_('Generate command for m.nviz.image based on current state')),
+            'settings': MetaIcon(
+                img='3d-settings',
+                label=_('3D view mode settings'),
+                desc=_('Show 3D view mode settings dialog')),
+            'help': MetaIcon(
+                img='3d-help',
+                label=_('Show 3D view mode manual')),
+        }
+
         return self._getToolbarData((("nvizCmd", icons['cmd'],
                                       self.OnNvizCmd),
                                      (None, ),
@@ -249,11 +283,11 @@ class LMNvizToolbar(BaseToolbar):
                                      ("help", icons["help"],
                                       self.OnHelp))
                                     )
-        
+
     def OnNvizCmd(self, event):
         """Show m.nviz.image command"""
         self.lmgr.GetLayerTree().GetMapDisplay().GetWindow().OnNvizCmd()
-        
+
     def OnHelp(self, event):
         """Show 3D view mode help"""
         if not self.lmgr:
diff --git a/gui/wxpython/location_wizard/__init__.py b/gui/wxpython/location_wizard/__init__.py
index d9d4698..f703019 100644
--- a/gui/wxpython/location_wizard/__init__.py
+++ b/gui/wxpython/location_wizard/__init__.py
@@ -2,4 +2,4 @@ all = [
     'wizard',
     'base',
     'dialogs',
-    ]
+]
diff --git a/gui/wxpython/location_wizard/base.py b/gui/wxpython/location_wizard/base.py
index ab77ce5..502db22 100644
--- a/gui/wxpython/location_wizard/base.py
+++ b/gui/wxpython/location_wizard/base.py
@@ -13,42 +13,49 @@ This program is free software under the GNU General Public License
 
 @author Michael Barton
 @author Jachym Cepicky
- at author Martin Landa <landa.martin gmail.com>   
+ at author Martin Landa <landa.martin gmail.com>
 """
 
 import wx
 
+
 class BaseClass(wx.Object):
     """Base class providing basic methods"""
+
     def __init__(self):
         pass
 
-    def MakeLabel(self, text = "", style = wx.ALIGN_LEFT, parent = None, tooltip = None):
+    def MakeLabel(self, text="", style=wx.ALIGN_LEFT,
+                  parent=None, tooltip=None):
         """Make aligned label"""
         if not parent:
             parent = self
-        label =  wx.StaticText(parent = parent, id = wx.ID_ANY, label = text,
-                              style = style)
+        label = wx.StaticText(parent=parent, id=wx.ID_ANY, label=text,
+                              style=style)
         if tooltip:
             label.SetToolTipString(tooltip)
         return label
 
-    def MakeTextCtrl(self, text = '', size = (100,-1), style = 0, parent = None, tooltip = None):
+    def MakeTextCtrl(
+            self, text='', size=(100, -1),
+            style=0, parent=None, tooltip=None):
         """Generic text control"""
         if not parent:
             parent = self
-        textCtrl = wx.TextCtrl(parent = parent, id = wx.ID_ANY, value = text,
-                               size = size, style = style)
+        textCtrl = wx.TextCtrl(parent=parent, id=wx.ID_ANY, value=text,
+                               size=size, style=style)
         if tooltip:
             textCtrl.SetToolTipString(tooltip)
         return textCtrl
 
-    def MakeButton(self, text, id = wx.ID_ANY, size = (-1,-1), parent = None, tooltip = None):
+    def MakeButton(
+            self, text, id=wx.ID_ANY, size=(-1, -1),
+            parent=None, tooltip=None):
         """Generic button"""
         if not parent:
             parent = self
-        button = wx.Button(parent = parent, id = id, label = text,
-                           size = size)
+        button = wx.Button(parent=parent, id=id, label=text,
+                           size=size)
         if tooltip:
             button.SetToolTipString(tooltip)
         return button
diff --git a/gui/wxpython/location_wizard/dialogs.py b/gui/wxpython/location_wizard/dialogs.py
index 4e14bc6..9cb76a9 100644
--- a/gui/wxpython/location_wizard/dialogs.py
+++ b/gui/wxpython/location_wizard/dialogs.py
@@ -15,33 +15,40 @@ This program is free software under the GNU General Public License
 
 @author Michael Barton
 @author Jachym Cepicky
- at author Martin Landa <landa.martin gmail.com>   
+ at author Martin Landa <landa.martin gmail.com>
 """
 import os
 
 import wx
 import wx.lib.scrolledpanel as scrolled
 
-from core                 import globalvar
-from core.gcmd            import RunCommand
+from core import globalvar
+from core.gcmd import RunCommand
 from core.utils import _
 from location_wizard.base import BaseClass
 
 from grass.script import core as grass
 
+
 class RegionDef(BaseClass, wx.Dialog):
     """Page for setting default region extents and resolution
     """
-    def __init__(self, parent, id = wx.ID_ANY, size = (800, 600),
-                 title = _("Set default region extent and resolution"), location = None):
-        wx.Dialog.__init__(self, parent, id, title, size = size)
-        panel = wx.Panel(self, id = wx.ID_ANY)
-        
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
+
+    def __init__(self, parent, id=wx.ID_ANY, size=(800, 600), title=_(
+            "Set default region extent and resolution"), location=None):
+        wx.Dialog.__init__(self, parent, id, title, size=size)
+        panel = wx.Panel(self, id=wx.ID_ANY)
+
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
         self.parent = parent
         self.location = location
-        
+
         #
         # default values
         #
@@ -57,46 +64,66 @@ class RegionDef(BaseClass, wx.Dialog):
         self.bottom = 0.0
         #         self.nsres3 = 1.0
         #         self.ewres3 = 1.0
-        self.tbres  = 1.0
-        
+        self.tbres = 1.0
+
         #
         # inputs
         #
         # 2D
-        self.tnorth = self.MakeTextCtrl(text = str(self.north), size = (150, -1), parent = panel)
-        self.tsouth = self.MakeTextCtrl(str(self.south), size = (150, -1), parent = panel)
-        self.twest = self.MakeTextCtrl(str(self.west), size = (150, -1), parent = panel)
-        self.teast = self.MakeTextCtrl(str(self.east), size = (150, -1), parent = panel)
-        self.tnsres = self.MakeTextCtrl(str(self.nsres), size = (150, -1), parent = panel)
-        self.tewres = self.MakeTextCtrl(str(self.ewres), size = (150, -1), parent = panel)
-        
+        self.tnorth = self.MakeTextCtrl(
+            text=str(
+                self.north), size=(
+                150, -1), parent=panel)
+        self.tsouth = self.MakeTextCtrl(
+            str(self.south),
+            size=(150, -1),
+            parent=panel)
+        self.twest = self.MakeTextCtrl(
+            str(self.west),
+            size=(150, -1),
+            parent=panel)
+        self.teast = self.MakeTextCtrl(
+            str(self.east),
+            size=(150, -1),
+            parent=panel)
+        self.tnsres = self.MakeTextCtrl(
+            str(self.nsres),
+            size=(150, -1),
+            parent=panel)
+        self.tewres = self.MakeTextCtrl(
+            str(self.ewres),
+            size=(150, -1),
+            parent=panel)
+
         #
         # labels
         #
-        self.lrows  = self.MakeLabel(parent = panel)
-        self.lcols  = self.MakeLabel(parent = panel)
-        self.lcells = self.MakeLabel(parent = panel)
-        
+        self.lrows = self.MakeLabel(parent=panel)
+        self.lcols = self.MakeLabel(parent=panel)
+        self.lcells = self.MakeLabel(parent=panel)
+
         #
         # buttons
         #
-        self.bset = self.MakeButton(text = _("&Set region"), id = wx.ID_OK, parent = panel)
-        self.bcancel = wx.Button(panel, id = wx.ID_CANCEL)
+        self.bset = self.MakeButton(
+            text=_("&Set region"),
+            id=wx.ID_OK, parent=panel)
+        self.bcancel = wx.Button(panel, id=wx.ID_CANCEL)
         self.bset.SetDefault()
-        
+
         #
         # image
         #
         self.img = wx.Image(os.path.join(globalvar.IMGDIR, "qgis_world.png"),
                             wx.BITMAP_TYPE_PNG).ConvertToBitmap()
-        
+
         #
         # set current working environment to PERMANENT mapset
         # in selected location in order to set default region (WIND)
         #
         envval = {}
         ret = RunCommand('g.gisenv',
-                         read = True)
+                         read=True)
         if ret:
             for line in ret.splitlines():
                 key, val = line.split('=')
@@ -105,34 +132,38 @@ class RegionDef(BaseClass, wx.Dialog):
             self.currmapset = envval['MAPSET'].strip("';")
             if self.currlocation != self.location or self.currmapset != 'PERMANENT':
                 RunCommand('g.gisenv',
-                           set = 'LOCATION_NAME=%s' % self.location)
+                           set='LOCATION_NAME=%s' % self.location)
                 RunCommand('g.gisenv',
-                           set = 'MAPSET=PERMANENT')
+                           set='MAPSET=PERMANENT')
         else:
-            dlg = wx.MessageBox(parent = self,
-                                message = _('Invalid location selected.'),
-                                caption = _("Error"), style = wx.ID_OK | wx.ICON_ERROR)
+            dlg = wx.MessageBox(
+                parent=self,
+                message=_('Invalid location selected.'),
+                caption=_("Error"),
+                style=wx.ID_OK | wx.ICON_ERROR)
             return
-        
+
         #
         # get current region settings
         #
         region = {}
         ret = RunCommand('g.region',
-                         read = True,
-                         flags = 'gp3')
+                         read=True,
+                         flags='gp3')
         if ret:
             for line in ret.splitlines():
                 key, val = line.split('=')
                 region[key] = float(val)
         else:
-            dlg = wx.MessageBox(parent = self,
-                                message = _("Invalid region"),
-                                caption = _("Error"), style = wx.ID_OK | wx.ICON_ERROR)
+            dlg = wx.MessageBox(
+                parent=self,
+                message=_("Invalid region"),
+                caption=_("Error"),
+                style=wx.ID_OK | wx.ICON_ERROR)
             dlg.ShowModal()
             dlg.Destroy()
             return
-        
+
         #
         # update values
         # 2D
@@ -153,20 +184,23 @@ class RegionDef(BaseClass, wx.Dialog):
         self.tbres = float(region['tbres'])
         self.depth = int(region['depths'])
         self.cells3 = int(region['cells3'])
-        
+
         #
         # 3D box collapsable
         #
         self.infoCollapseLabelExp = _("Click here to show 3D settings")
         self.infoCollapseLabelCol = _("Click here to hide 3D settings")
-        self.settings3D = wx.CollapsiblePane(parent = panel,
-                                             label = self.infoCollapseLabelExp,
-                                             style = wx.CP_DEFAULT_STYLE |
+        self.settings3D = wx.CollapsiblePane(parent=panel,
+                                             label=self.infoCollapseLabelExp,
+                                             style=wx.CP_DEFAULT_STYLE |
                                              wx.CP_NO_TLW_RESIZE | wx.EXPAND)
         self.MakeSettings3DPaneContent(self.settings3D.GetPane())
-        self.settings3D.Collapse(False) # FIXME
-        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnSettings3DPaneChanged, self.settings3D)
-        
+        self.settings3D.Collapse(False)  # FIXME
+        self.Bind(
+            wx.EVT_COLLAPSIBLEPANE_CHANGED,
+            self.OnSettings3DPaneChanged,
+            self.settings3D)
+
         #
         # set current region settings
         #
@@ -184,74 +218,89 @@ class RegionDef(BaseClass, wx.Dialog):
         self.lrows.SetLabel(_("Rows: %d") % self.rows)
         self.lcols.SetLabel(_("Cols: %d") % self.cols)
         self.lcells.SetLabel(_("Cells: %d") % self.cells)
-        
+
         #
         # bindings
         #
         self.Bind(wx.EVT_BUTTON, self.OnSetButton, self.bset)
         self.Bind(wx.EVT_BUTTON, self.OnCancel, self.bcancel)
-        self.tnorth.Bind(wx.EVT_TEXT,   self.OnValue)
-        self.tsouth.Bind(wx.EVT_TEXT,   self.OnValue)
-        self.teast.Bind(wx.EVT_TEXT,    self.OnValue)
-        self.twest.Bind(wx.EVT_TEXT,    self.OnValue)
-        self.tnsres.Bind(wx.EVT_TEXT,   self.OnValue)
-        self.tewres.Bind(wx.EVT_TEXT,   self.OnValue)
-        self.ttop.Bind(wx.EVT_TEXT,     self.OnValue)
-        self.tbottom.Bind(wx.EVT_TEXT,  self.OnValue)
+        self.tnorth.Bind(wx.EVT_TEXT, self.OnValue)
+        self.tsouth.Bind(wx.EVT_TEXT, self.OnValue)
+        self.teast.Bind(wx.EVT_TEXT, self.OnValue)
+        self.twest.Bind(wx.EVT_TEXT, self.OnValue)
+        self.tnsres.Bind(wx.EVT_TEXT, self.OnValue)
+        self.tewres.Bind(wx.EVT_TEXT, self.OnValue)
+        self.ttop.Bind(wx.EVT_TEXT, self.OnValue)
+        self.tbottom.Bind(wx.EVT_TEXT, self.OnValue)
         #         self.tnsres3.Bind(wx.EVT_TEXT,  self.OnValue)
         #         self.tewres3.Bind(wx.EVT_TEXT,  self.OnValue)
-        self.ttbres.Bind(wx.EVT_TEXT,   self.OnValue)
-        
+        self.ttbres.Bind(wx.EVT_TEXT, self.OnValue)
+
         self.__DoLayout(panel)
         self.SetMinSize(self.GetBestSize())
         self.minWindowSize = self.GetMinSize()
         wx.CallAfter(self.settings3D.Collapse, True)
-    
+
     def MakeSettings3DPaneContent(self, pane):
         """Create 3D region settings pane"""
         border = wx.BoxSizer(wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 0, hgap = 0)
+        gridSizer = wx.GridBagSizer(vgap=0, hgap=0)
 
         # inputs
-        self.ttop = wx.TextCtrl(parent = pane, id = wx.ID_ANY, value = str(self.top),
-                                size = (150, -1))
-        self.tbottom = wx.TextCtrl(parent = pane, id = wx.ID_ANY, value = str(self.bottom),
-                                size = (150, -1))
-        self.ttbres = wx.TextCtrl(parent = pane, id = wx.ID_ANY, value = str(self.tbres),
-                                size = (150, -1))
+        self.ttop = wx.TextCtrl(parent=pane, id=wx.ID_ANY, value=str(self.top),
+                                size=(150, -1))
+        self.tbottom = wx.TextCtrl(
+            parent=pane, id=wx.ID_ANY, value=str(
+                self.bottom), size=(
+                150, -1))
+        self.ttbres = wx.TextCtrl(
+            parent=pane, id=wx.ID_ANY, value=str(
+                self.tbres), size=(
+                150, -1))
         #         self.tnsres3 = wx.TextCtrl(parent = pane, id = wx.ID_ANY, value = str(self.nsres3),
         #                                    size = (150, -1))
         #         self.tewres3  =  wx.TextCtrl(parent = pane, id = wx.ID_ANY, value = str(self.ewres3),
         #                                    size = (150, -1))
 
-        #labels
-        self.ldepth = wx.StaticText(parent = pane, label = _("Depth: %d") % self.depth)
-        self.lcells3  =  wx.StaticText(parent = pane, label = _("3D Cells: %d") % self.cells3)
+        # labels
+        self.ldepth = wx.StaticText(
+            parent=pane,
+            label=_("Depth: %d") %
+            self.depth)
+        self.lcells3 = wx.StaticText(
+            parent=pane,
+            label=_("3D Cells: %d") %
+            self.cells3)
 
         # top
-        gridSizer.Add(item = wx.StaticText(parent = pane, label = _("Top")),
-                      flag = wx.ALIGN_CENTER |
-                      wx.LEFT | wx.RIGHT | wx.TOP, border = 5,
-                      pos = (0, 1))
-        gridSizer.Add(item = self.ttop,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL |
-                      wx.ALL, border = 5, pos = (1, 1))
+        gridSizer.Add(item=wx.StaticText(parent=pane, label=_("Top")),
+                      flag=wx.ALIGN_CENTER |
+                      wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+                      pos=(0, 1))
+        gridSizer.Add(item=self.ttop,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALL, border=5, pos=(1, 1))
         # bottom
-        gridSizer.Add(item = wx.StaticText(parent = pane, label = _("Bottom")),
-                      flag = wx.ALIGN_CENTER |
-                      wx.LEFT | wx.RIGHT | wx.TOP, border = 5,
-                      pos = (0, 2))
-        gridSizer.Add(item = self.tbottom,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL |
-                      wx.ALL, border = 5, pos = (1, 2))
+        gridSizer.Add(item=wx.StaticText(parent=pane, label=_("Bottom")),
+                      flag=wx.ALIGN_CENTER |
+                      wx.LEFT | wx.RIGHT | wx.TOP, border=5,
+                      pos=(0, 2))
+        gridSizer.Add(item=self.tbottom,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALL, border=5, pos=(1, 2))
         # tbres
-        gridSizer.Add(item = wx.StaticText(parent = pane, label = _("T-B resolution")),
-                      flag = wx.ALIGN_CENTER | 
-                      wx.LEFT | wx.RIGHT | wx.TOP, border = 5,
-                      pos = (0, 3))
-        gridSizer.Add(item = self.ttbres,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL |
-                      wx.ALL, border = 5, pos = (1, 3))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=pane,
+                label=_("T-B resolution")),
+            flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT | wx.TOP,
+            border=5,
+            pos=(
+                0,
+                3))
+        gridSizer.Add(item=self.ttbres,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.ALL, border=5, pos=(1, 3))
 
         # res
         #         gridSizer.Add(item = wx.StaticText(parent = pane, label = _("3D N-S resolution")),
@@ -270,16 +319,16 @@ class RegionDef(BaseClass, wx.Dialog):
         #                       wx.ALL, border = 5, pos = (3, 3))
 
         # rows/cols/cells
-        gridSizer.Add(item = self.ldepth,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.ALL, border = 5, pos = (2, 1))
+        gridSizer.Add(item=self.ldepth,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(2, 1))
 
-        gridSizer.Add(item = self.lcells3,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.ALL, border = 5, pos = (2, 2))
+        gridSizer.Add(item=self.lcells3,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(2, 2))
 
-        border.Add(item = gridSizer, proportion = 1,
-                   flag = wx.ALL | wx.ALIGN_CENTER | wx.EXPAND, border = 5)
+        border.Add(item=gridSizer, proportion=1,
+                   flag=wx.ALL | wx.ALIGN_CENTER | wx.EXPAND, border=5)
 
         pane.SetSizer(border)
         border.Fit(pane)
@@ -303,101 +352,103 @@ class RegionDef(BaseClass, wx.Dialog):
     def __DoLayout(self, panel):
         """Window layout"""
         frameSizer = wx.BoxSizer(wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 0, hgap = 0)
+        gridSizer = wx.GridBagSizer(vgap=0, hgap=0)
         settings3DSizer = wx.BoxSizer(wx.VERTICAL)
         buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
 
         # north
-        gridSizer.Add(item = self.MakeLabel(text = _("North"), parent = panel),
-                      flag = wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL |
-                      wx.TOP | wx.LEFT | wx.RIGHT, border = 5, pos = (0, 2))
-        gridSizer.Add(item = self.tnorth,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL |
+        gridSizer.Add(item=self.MakeLabel(text=_("North"), parent=panel),
+                      flag=wx.ALIGN_BOTTOM | wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.TOP | wx.LEFT | wx.RIGHT, border=5, pos=(0, 2))
+        gridSizer.Add(item=self.tnorth,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5, pos = (1, 2))
+                      wx.ALL, border=5, pos=(1, 2))
         # west
-        gridSizer.Add(item = self.MakeLabel(text = _("West"), parent = panel),
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=self.MakeLabel(text=_("West"), parent=panel),
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.LEFT | wx.TOP | wx.BOTTOM, border = 5, pos = (2, 0))
-        gridSizer.Add(item = self.twest,
-                      flag = wx.ALIGN_RIGHT |
+                      wx.LEFT | wx.TOP | wx.BOTTOM, border=5, pos=(2, 0))
+        gridSizer.Add(item=self.twest,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5,  pos = (2, 1))
+                      wx.ALL, border=5, pos=(2, 1))
 
-        gridSizer.Add(item = wx.StaticBitmap(panel, wx.ID_ANY, self.img, (-1, -1),
-                                           (self.img.GetWidth(), self.img.GetHeight())),
-                      flag = wx.ALIGN_CENTER |
-                      wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5, pos = (2, 2))
+        gridSizer.Add(
+            item=wx.StaticBitmap(
+                panel, wx.ID_ANY, self.img, (-1, -1),
+                (self.img.GetWidth(),
+                 self.img.GetHeight())),
+            flag=wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5,
+            pos=(2, 2))
 
         # east
-        gridSizer.Add(item = self.teast,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL |
+        gridSizer.Add(item=self.teast,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5,  pos = (2, 3))
-        gridSizer.Add(item = self.MakeLabel(text = _("East"), parent = panel),
-                      flag = wx.ALIGN_LEFT |
+                      wx.ALL, border=5, pos=(2, 3))
+        gridSizer.Add(item=self.MakeLabel(text=_("East"), parent=panel),
+                      flag=wx.ALIGN_LEFT |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.RIGHT | wx.TOP | wx.BOTTOM, border = 5, pos = (2, 4))
+                      wx.RIGHT | wx.TOP | wx.BOTTOM, border=5, pos=(2, 4))
         # south
-        gridSizer.Add(item = self.tsouth,
-                      flag = wx.ALIGN_CENTER_HORIZONTAL |
+        gridSizer.Add(item=self.tsouth,
+                      flag=wx.ALIGN_CENTER_HORIZONTAL |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5, pos = (3, 2))
-        gridSizer.Add(item = self.MakeLabel(text = _("South"), parent = panel),
-                      flag = wx.ALIGN_TOP | wx.ALIGN_CENTER_HORIZONTAL |
-                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5, pos = (4, 2))
+                      wx.ALL, border=5, pos=(3, 2))
+        gridSizer.Add(item=self.MakeLabel(text=_("South"), parent=panel),
+                      flag=wx.ALIGN_TOP | wx.ALIGN_CENTER_HORIZONTAL |
+                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5, pos=(4, 2))
         # ns-res
-        gridSizer.Add(item = self.MakeLabel(text = _("N-S resolution"), parent = panel),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.TOP | wx.LEFT | wx.RIGHT, border = 5, pos = (5, 1))
-        gridSizer.Add(item = self.tnsres,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=self.MakeLabel(text=_("N-S resolution"), parent=panel),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.TOP | wx.LEFT | wx.RIGHT, border=5, pos=(5, 1))
+        gridSizer.Add(item=self.tnsres,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5,  pos = (6, 1))
+                      wx.ALL, border=5, pos=(6, 1))
         # ew-res
-        gridSizer.Add(item = self.MakeLabel(text = _("E-W resolution"), parent = panel),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.TOP | wx.LEFT | wx.RIGHT, border = 5, pos = (5, 3))
-        gridSizer.Add(item = self.tewres,
-                      flag = wx.ALIGN_RIGHT |
+        gridSizer.Add(item=self.MakeLabel(text=_("E-W resolution"), parent=panel),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.TOP | wx.LEFT | wx.RIGHT, border=5, pos=(5, 3))
+        gridSizer.Add(item=self.tewres,
+                      flag=wx.ALIGN_RIGHT |
                       wx.ALIGN_CENTER_VERTICAL |
-                      wx.ALL, border = 5,  pos = (6, 3))
+                      wx.ALL, border=5, pos=(6, 3))
         # rows/cols/cells
-        gridSizer.Add(item = self.lrows,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.ALL, border = 5, pos = (7, 1))
+        gridSizer.Add(item=self.lrows,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(7, 1))
 
-        gridSizer.Add(item = self.lcells,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.ALL, border = 5, pos = (7, 2))
+        gridSizer.Add(item=self.lcells,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(7, 2))
 
-        gridSizer.Add(item = self.lcols,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
-                      wx.ALL, border = 5, pos = (7, 3))
+        gridSizer.Add(item=self.lcols,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER |
+                      wx.ALL, border=5, pos=(7, 3))
 
         # 3D
-        settings3DSizer.Add(item = self.settings3D,
-                            flag = wx.ALL,
-                            border = 5)
+        settings3DSizer.Add(item=self.settings3D,
+                            flag=wx.ALL,
+                            border=5)
 
         # buttons
-        buttonSizer.Add(item = self.bcancel, proportion = 1,
-                        flag = wx.ALIGN_RIGHT |
+        buttonSizer.Add(item=self.bcancel, proportion=1,
+                        flag=wx.ALIGN_RIGHT |
                         wx.ALIGN_CENTER_VERTICAL |
-                        wx.ALL, border = 10)
-        buttonSizer.Add(item = self.bset, proportion = 1,
-                        flag = wx.ALIGN_CENTER |
+                        wx.ALL, border=10)
+        buttonSizer.Add(item=self.bset, proportion=1,
+                        flag=wx.ALIGN_CENTER |
                         wx.ALIGN_CENTER_VERTICAL |
-                        wx.ALL, border = 10)
+                        wx.ALL, border=10)
 
-        frameSizer.Add(item = gridSizer, proportion = 1,
-                       flag = wx.ALL | wx.ALIGN_CENTER, border = 5)
-        frameSizer.Add(item = settings3DSizer, proportion = 0,
-                       flag = wx.ALL | wx.ALIGN_CENTER, border = 5)
-        frameSizer.Add(item = buttonSizer, proportion = 0,
-                       flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
+        frameSizer.Add(item=gridSizer, proportion=1,
+                       flag=wx.ALL | wx.ALIGN_CENTER, border=5)
+        frameSizer.Add(item=settings3DSizer, proportion=0,
+                       flag=wx.ALL | wx.ALIGN_CENTER, border=5)
+        frameSizer.Add(item=buttonSizer, proportion=0,
+                       flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
 
         self.SetAutoLayout(True)
         panel.SetSizer(frameSizer)
@@ -434,10 +485,10 @@ class RegionDef(BaseClass, wx.Dialog):
 
         except ValueError as e:
             if len(event.GetString()) > 0 and event.GetString() != '-':
-                dlg = wx.MessageBox(parent = self,
-                                    message = _("Invalid value: %s") % e,
-                                    caption = _("Error"),
-                                    style = wx.OK | wx.ICON_ERROR)
+                dlg = wx.MessageBox(parent=self,
+                                    message=_("Invalid value: %s") % e,
+                                    caption=_("Error"),
+                                    style=wx.OK | wx.ICON_ERROR)
                 # reset values
                 self.tnorth.SetValue(str(self.north))
                 self.tsouth.SetValue(str(self.south))
@@ -470,28 +521,29 @@ class RegionDef(BaseClass, wx.Dialog):
         self.ldepth.SetLabel(_("Depth: %d" % self.depth))
         self.lcells3.SetLabel(_("3D Cells: %d" % self.cells3))
 
-    def OnSetButton(self, event = None):
+    def OnSetButton(self, event=None):
         """Set default region"""
         ret = RunCommand('g.region',
-                         flags = 'sgpa',
-                         n = self.north,
-                         s = self.south,
-                         e = self.east,
-                         w = self.west,
-                         nsres = self.nsres,
-                         ewres = self.ewres,
-                         t = self.top,
-                         b = self.bottom,
-                         tbres = self.tbres)
+                         flags='sgpa',
+                         n=self.north,
+                         s=self.south,
+                         e=self.east,
+                         w=self.west,
+                         nsres=self.nsres,
+                         ewres=self.ewres,
+                         t=self.top,
+                         b=self.bottom,
+                         tbres=self.tbres)
         if ret == 0:
             self.Destroy()
 
     def OnCancel(self, event):
         self.Destroy()
 
+
 class TransList(wx.VListBox):
     """Creates a multiline listbox for selecting datum transforms"""
-        
+
     def OnDrawItem(self, dc, rect, n):
         if self.GetSelection() == n:
             c = wx.SystemSettings.GetColour(wx.SYS_COLOUR_HIGHLIGHTTEXT)
@@ -504,7 +556,7 @@ class TransList(wx.VListBox):
 
     def OnMeasureItem(self, n):
         height = 0
-        if self._getItemText(n) == None:
+        if self._getItemText(n) is None:
             return
         for line in self._getItemText(n).splitlines():
             w, h = self.GetTextExtent(line)
@@ -514,23 +566,26 @@ class TransList(wx.VListBox):
     def _getItemText(self, item):
         global transformlist
         transitem = transformlist[item]
-        if transitem.strip() !='':
+        if transitem.strip() != '':
             return transitem
 
+
 class SelectTransformDialog(wx.Dialog):
     """Dialog for selecting datum transformations"""
-    def __init__(self, parent, transforms, title = _("Select datum transformation"),
-                 pos = wx.DefaultPosition, size = wx.DefaultSize, 
-                 style = wx.DEFAULT_DIALOG_STYLE|wx.RESIZE_BORDER):
+
+    def __init__(self, parent, transforms,
+                 title=_("Select datum transformation"),
+                 pos=wx.DefaultPosition, size=wx.DefaultSize,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
 
         wx.Dialog.__init__(self, parent, wx.ID_ANY, title, pos, size, style)
 
         global transformlist
         self.CentreOnParent()
-        
+
         # default transform number
         self.transnum = 0
-        
+
         panel = scrolled.ScrolledPanel(self, wx.ID_ANY)
         sizer = wx.BoxSizer(wx.VERTICAL)
 
@@ -543,16 +598,17 @@ class SelectTransformDialog(wx.Dialog):
         #
         # dialog body
         #
-        bodyBox = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                               label = " %s " % _("Select from list of datum transformations"))
-        bodySizer = wx.StaticBoxSizer(bodyBox)       
-        
+        bodyBox = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Select from list of datum transformations"))
+        bodySizer = wx.StaticBoxSizer(bodyBox)
+
         # add no transform option
         transforms = '---\n\n0\nDo not apply any datum transformations\n\n' + transforms
-        
+
         transformlist = transforms.split('---')
         tlistlen = len(transformlist)
-        
+
         # calculate size for transform list
         height = 0
         width = 0
@@ -560,59 +616,67 @@ class SelectTransformDialog(wx.Dialog):
             w, h = self.GetTextExtent(line)
             height += h
             width = max(width, w)
-            
+
         height = height + 5
-        if height > 400: height = 400
+        if height > 400:
+            height = 400
         width = width + 5
-        if width > 400: width = 400
+        if width > 400:
+            width = 400
 
         #
         # VListBox for displaying and selecting transformations
         #
-        self.translist = TransList(panel, id = -1, size = (width, height), style = wx.SUNKEN_BORDER)
+        self.translist = TransList(
+            panel, id=-1, size=(width, height),
+            style=wx.SUNKEN_BORDER)
         self.translist.SetItemCount(tlistlen)
         self.translist.SetSelection(2)
         self.translist.SetFocus()
-        
+
         self.Bind(wx.EVT_LISTBOX, self.ClickTrans, self.translist)
 
-        bodySizer.Add(item = self.translist, proportion = 1, flag = wx.ALIGN_CENTER|wx.ALL|wx.EXPAND)
+        bodySizer.Add(
+            item=self.translist,
+            proportion=1,
+            flag=wx.ALIGN_CENTER | wx.ALL | wx.EXPAND)
 
         #
         # buttons
         #
         btnsizer = wx.StdDialogButtonSizer()
 
-        btn = wx.Button(parent = panel, id = wx.ID_OK)
+        btn = wx.Button(parent=panel, id=wx.ID_OK)
         btn.SetDefault()
         btnsizer.AddButton(btn)
 
-        btn = wx.Button(parent = panel, id = wx.ID_CANCEL)
+        btn = wx.Button(parent=panel, id=wx.ID_CANCEL)
         btnsizer.AddButton(btn)
         btnsizer.Realize()
 
-        sizer.Add(item = bodySizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
+        sizer.Add(item=bodySizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
 
-        sizer.Add(item = btnsizer, proportion = 0,
-                  flag =  wx.ALL | wx.ALIGN_RIGHT, border = 5)
+        sizer.Add(item=btnsizer, proportion=0,
+                  flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
 
         sizer.Fit(panel)
 
         self.SetSize(self.GetBestSize())
         self.Layout()
-        
+
     def ClickTrans(self, event):
         """Get the number of the datum transform to use in g.proj"""
         self.transnum = event.GetSelection()
         self.transnum = self.transnum - 1
-    
+
     def GetTransform(self):
         """Get the number of the datum transform to use in g.proj"""
         self.transnum = self.translist.GetSelection()
         self.transnum = self.transnum - 1
         return self.transnum
 
+
 def testRegionDef():
     import sys
     import wx.lib.inspection
@@ -620,7 +684,7 @@ def testRegionDef():
 
     app = wx.App()
 
-    dlg = RegionDef(None, location = grass.gisenv()["LOCATION_NAME"])
+    dlg = RegionDef(None, location=grass.gisenv()["LOCATION_NAME"])
     dlg.Show()
     wx.lib.inspection.InspectionTool().Show()
     app.MainLoop()
diff --git a/gui/wxpython/location_wizard/wizard.py b/gui/wxpython/location_wizard/wizard.py
index 9fffce9..c566016 100644
--- a/gui/wxpython/location_wizard/wizard.py
+++ b/gui/wxpython/location_wizard/wizard.py
@@ -16,6 +16,7 @@ Classes:
  - wizard::GeoreferencedFilePage
  - wizard::WKTPage
  - wizard::EPSGPage
+ - wizard::IAUPage
  - wizard::CustomPage
  - wizard::SummaryPage
  - wizard::LocationWizard
@@ -32,6 +33,7 @@ This program is free software under the GNU General Public License
 @author Hamish Bowman (planetary ellipsoids)
 """
 import os
+import sys
 import locale
 
 import wx
@@ -39,15 +41,16 @@ import wx.lib.mixins.listctrl as listmix
 import wx.wizard as wiz
 import wx.lib.scrolledpanel as scrolled
 
-from core                    import globalvar
-from core                    import utils
+from core import globalvar
+from core import utils
 from core.utils import _
-from core.gcmd               import RunCommand, GError, GMessage, GWarning
-from gui_core.widgets        import GenericValidator
-from location_wizard.base    import BaseClass
+from core.gcmd import RunCommand, GError, GMessage, GWarning
+from gui_core.widgets import GenericValidator
+from location_wizard.base import BaseClass
 from location_wizard.dialogs import SelectTransformDialog
 
 from grass.script import core as grass
+from grass.exceptions import OpenError
 
 global coordsys
 global north
@@ -58,112 +61,135 @@ global resolution
 global wizerror
 global translist
 
+
 class TitledPage(BaseClass, wiz.WizardPageSimple):
     """Class to make wizard pages. Generic methods to make labels,
     text entries, and buttons.
     """
+
     def __init__(self, parent, title):
 
         self.page = wiz.WizardPageSimple.__init__(self, parent)
 
         # page title
-        self.title = wx.StaticText(parent = self, id = wx.ID_ANY, label = title)
+        self.title = wx.StaticText(parent=self, id=wx.ID_ANY, label=title)
         self.title.SetFont(wx.Font(13, wx.SWISS, wx.NORMAL, wx.BOLD))
 
         # main sizers
         self.pagesizer = wx.BoxSizer(wx.VERTICAL)
-        self.sizer = wx.GridBagSizer(vgap = 0, hgap = 0)
+        self.sizer = wx.GridBagSizer(vgap=0, hgap=0)
         self.sizer.SetCols(5)
         self.sizer.SetRows(6)
-        
+
     def DoLayout(self):
         """Do page layout"""
-        self.pagesizer.Add(item = self.title, proportion = 0,
-                           flag = wx.ALIGN_CENTRE | wx.ALL,
-                           border = 5)
-        self.pagesizer.Add(item = wx.StaticLine(self, -1), proportion = 0,
-                           flag = wx.EXPAND | wx.ALL,
-                           border = 0)
-        self.pagesizer.Add(item = self.sizer, proportion = 1,
-                           flag = wx.EXPAND)
-        
+        self.pagesizer.Add(item=self.title, proportion=0,
+                           flag=wx.ALIGN_CENTRE | wx.ALL,
+                           border=5)
+        self.pagesizer.Add(item=wx.StaticLine(self, -1), proportion=0,
+                           flag=wx.EXPAND | wx.ALL,
+                           border=0)
+        self.pagesizer.Add(item=self.sizer, proportion=1,
+                           flag=wx.EXPAND)
+
         self.SetAutoLayout(True)
         self.SetSizer(self.pagesizer)
         self.Layout()
 
+
 class DatabasePage(TitledPage):
     """Wizard page for setting GIS data directory and location name"""
+
     def __init__(self, wizard, parent, grassdatabase):
-        TitledPage.__init__(self, wizard, _("Define GRASS Database and Location Name"))
+        TitledPage.__init__(self, wizard, _(
+            "Define GRASS Database and Location Name"))
+
+        self.grassdatabase = grassdatabase
+        self.location = ''
+        self.locTitle = ''
 
-        self.grassdatabase  = grassdatabase
-        self.location       = ''
-        self.locTitle       = ''
-        
         # buttons
         self.bbrowse = self.MakeButton(_("Browse"))
 
         # text controls
-        self.tgisdbase = self.MakeTextCtrl(grassdatabase, size = (300, -1))
-        self.tlocation = self.MakeTextCtrl("newLocation", size = (300, -1))
+        self.tgisdbase = self.MakeTextCtrl(grassdatabase, size=(300, -1))
+        self.tlocation = self.MakeTextCtrl("newLocation", size=(300, -1))
         self.tlocation.SetFocus()
-        self.tlocation.SetValidator(GenericValidator(grass.legal_name, self._nameValidationFailed))
-        self.tlocTitle = self.MakeTextCtrl(size = (400, -1))
-        
+        self.tlocation.SetValidator(
+            GenericValidator(
+                grass.legal_name,
+                self._nameValidationFailed))
+        self.tlocTitle = self.MakeTextCtrl(size=(400, -1))
+
         # layout
-        self.sizer.Add(item = self.MakeLabel(_("GIS Data Directory:")),
-                       flag = wx.ALIGN_RIGHT |
+        self.sizer.Add(item=self.MakeLabel(_("GIS Data Directory:")),
+                       flag=wx.ALIGN_RIGHT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (1, 1))
-        self.sizer.Add(item = self.tgisdbase,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5,
+                       pos=(1, 1))
+        self.sizer.Add(item=self.tgisdbase,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (1, 2))
-        self.sizer.Add(item = self.bbrowse,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5,
+                       pos=(1, 2))
+        self.sizer.Add(item=self.bbrowse,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (1, 3))
-        
-        self.sizer.Add(item = self.MakeLabel("%s:" % _("Project Location"),
-                                             tooltip = _("Name of location directory in GIS Data Directory")),
-                       flag = wx.ALIGN_RIGHT |
+                       wx.ALL, border=5,
+                       pos=(1, 3))
+
+        self.sizer.Add(
+            item=self.MakeLabel(
+                "%s:" %
+                _("Project Location"),
+                tooltip=_("Name of location directory in GIS Data Directory")),
+            flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                2,
+                1))
+        self.sizer.Add(item=self.tlocation,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (2, 1))
-        self.sizer.Add(item = self.tlocation,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5,
+                       pos=(2, 2))
+
+        self.sizer.Add(
+            item=self.MakeLabel(
+                "%s:" %
+                _("Location Title"),
+                tooltip=_(
+                    "Optional location title, "
+                    "you can leave this field blank.")),
+            flag=wx.ALIGN_RIGHT | wx.ALIGN_TOP | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5,
+            pos=(
+                3,
+                1))
+        self.sizer.Add(item=self.tlocTitle,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (2, 2))
-
-        self.sizer.Add(item = self.MakeLabel("%s:" % _("Location Title"),
-                                             tooltip = _("Optional location title, "
-                                                         "you can leave this field blank.")),
-                       flag = wx.ALIGN_RIGHT |
-                       wx.ALIGN_TOP | wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (3, 1))
-        self.sizer.Add(item = self.tlocTitle,
-                       flag = wx.ALIGN_LEFT |
-                       wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5,
-                       pos = (3, 2), span  =  (1, 2))
+                       wx.ALL, border=5,
+                       pos=(3, 2), span=(1, 2))
         self.sizer.AddGrowableCol(3)
-        
+
         # bindings
-        self.Bind(wx.EVT_BUTTON,                self.OnBrowse, self.bbrowse)
+        self.Bind(wx.EVT_BUTTON, self.OnBrowse, self.bbrowse)
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
-        self.tgisdbase.Bind(wx.EVT_TEXT,        self.OnChangeName)
-        self.tlocation.Bind(wx.EVT_TEXT,        self.OnChangeName)
+        self.tgisdbase.Bind(wx.EVT_TEXT, self.OnChangeName)
+        self.tlocation.Bind(wx.EVT_TEXT, self.OnChangeName)
 
     def _nameValidationFailed(self, ctrl):
-        message = _("Name <%(name)s> is not a valid name for location. "
-                    "Please use only ASCII characters excluding %(chars)s "
-                    "and space.") % {'name': ctrl.GetValue(), 'chars': '/"\'@,=*~'}
-        GError(parent=self, message=message, caption=_("Invalid location name"))
+        message = _(
+            "Name <%(name)s> is not a valid name for location. "
+            "Please use only ASCII characters excluding %(chars)s "
+            "and space.") % {
+            'name': ctrl.GetValue(),
+            'chars': '/"\'@,=*~'}
+        GError(
+            parent=self,
+            message=message,
+            caption=_("Invalid location name"))
 
     def OnChangeName(self, event):
         """Name for new location was changed"""
@@ -183,16 +209,19 @@ class DatabasePage(TitledPage):
         if dlg.ShowModal() == wx.ID_OK:
             self.grassdatabase = dlg.GetPath()
             self.tgisdbase.SetValue(self.grassdatabase)
-            
+
         dlg.Destroy()
 
-    def OnPageChanging(self, event = None):
+    def OnPageChanging(self, event=None):
         error = None
-        if os.path.isdir(os.path.join(self.tgisdbase.GetValue(), self.tlocation.GetValue())):
+        if os.path.isdir(
+            os.path.join(
+                self.tgisdbase.GetValue(),
+                self.tlocation.GetValue())):
             error = _("Location already exists in GRASS Database.")
 
         if error:
-            GError(parent = self,
+            GError(parent=self,
                    message="%s <%s>.%s%s" % (_("Unable to create location"),
                                              str(self.tlocation.GetValue()),
                                              os.linesep,
@@ -200,70 +229,86 @@ class DatabasePage(TitledPage):
             event.Veto()
             return
 
-        self.location      = self.tlocation.GetValue()
+        self.location = self.tlocation.GetValue()
         self.grassdatabase = self.tgisdbase.GetValue()
-        self.locTitle      = self.tlocTitle.GetValue()
+        self.locTitle = self.tlocTitle.GetValue()
         if os.linesep in self.locTitle or \
                 len(self.locTitle) > 255:
-            GWarning(parent = self,
-                     message = _("Title of the location is limited only to one line and "
-                                 "256 characters. The rest of the text will be ignored."))
+            GWarning(
+                parent=self, message=_(
+                    "Title of the location is limited only to one line and "
+                    "256 characters. The rest of the text will be ignored."))
             self.locTitle = self.locTitle.split(os.linesep)[0][:255]
-            
+
+
 class CoordinateSystemPage(TitledPage):
     """Wizard page for choosing method for location creation"""
+
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard, _("Choose method for creating a new location"))
-        
+        TitledPage.__init__(self, wizard, _(
+            "Choose method for creating a new location"))
+
         self.parent = parent
         global coordsys
-        
+
         # toggles
-        self.radioEpsg = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                        label = _("Select EPSG code of spatial reference system"),
-                                        style  =  wx.RB_GROUP)
-        self.radioFile = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                        label = _("Read projection and datum terms from a "
-                                                  "georeferenced data file"))
-        self.radioWkt = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                       label = _("Read projection and datum terms from a "
-                                                 "Well Known Text (WKT) .prj file"))
-        self.radioSrs = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                       label = _("Select coordinate system parameters from a list"))
-        self.radioProj = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                        label = _("Specify projection and datum terms using custom "
-                                                  "PROJ.4 parameters"))
-        self.radioXy = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                      label = _("Create a generic Cartesian coordinate system (XY)"))
-        
+        self.radioEpsg = wx.RadioButton(parent=self, id=wx.ID_ANY, label=_(
+            "Select EPSG code of spatial reference system"), style=wx.RB_GROUP)
+        #self.radioIau = wx.RadioButton(
+        #    parent=self, id=wx.ID_ANY,
+        #    label=_("Select IAU code of spatial reference system"))
+        self.radioFile = wx.RadioButton(
+            parent=self, id=wx.ID_ANY, label=_(
+                "Read projection and datum terms from a "
+                "georeferenced data file"))
+        self.radioWkt = wx.RadioButton(
+            parent=self, id=wx.ID_ANY, label=_(
+                "Read projection and datum terms from a "
+                "Well Known Text (WKT) .prj file"))
+        self.radioSrs = wx.RadioButton(parent=self, id=wx.ID_ANY, label=_(
+            "Select coordinate system parameters from a list"))
+        self.radioProj = wx.RadioButton(
+            parent=self, id=wx.ID_ANY, label=_(
+                "Specify projection and datum terms using custom "
+                "PROJ.4 parameters"))
+        self.radioXy = wx.RadioButton(parent=self, id=wx.ID_ANY, label=_(
+            "Create a generic Cartesian coordinate system (XY)"))
+
         # layout
         self.sizer.SetVGap(10)
-        self.sizer.Add(item = self.radioEpsg,
-                       flag = wx.ALIGN_LEFT, pos = (1, 1))
-        self.sizer.Add(item = self.radioFile,
-                       flag = wx.ALIGN_LEFT, pos = (2, 1))
-        self.sizer.Add(item = self.radioWkt,
-                       flag = wx.ALIGN_LEFT, pos = (3, 1))
-        self.sizer.Add(item = self.radioSrs,
-                       flag = wx.ALIGN_LEFT, pos = (4, 1))
-        self.sizer.Add(item = self.radioProj,
-                       flag = wx.ALIGN_LEFT, pos = (5, 1))
-        self.sizer.Add(item = self.radioXy,
-                       flag = wx.ALIGN_LEFT, pos = (6, 1))
+        self.sizer.Add(item=wx.StaticText(parent=self, label=_("Simple methods:")),
+                       flag=wx.ALIGN_LEFT, pos=(1, 1))
+        self.sizer.Add(item=self.radioEpsg,
+                       flag=wx.ALIGN_LEFT, pos=(2, 1))
+        #self.sizer.Add(item=self.radioIau,
+        #               flag=wx.ALIGN_LEFT, pos=(1, 1))
+        self.sizer.Add(item=self.radioFile,
+                       flag=wx.ALIGN_LEFT, pos=(3, 1))
+        self.sizer.Add(item=self.radioWkt,
+                       flag=wx.ALIGN_LEFT, pos=(4, 1))
+        self.sizer.Add(item=self.radioXy,
+                       flag=wx.ALIGN_LEFT, pos=(5, 1))
+        self.sizer.Add(item=wx.StaticText(parent=self, label=_("Advanced methods:")),
+                       flag=wx.ALIGN_LEFT, pos=(6, 1))
+        self.sizer.Add(item=self.radioSrs,
+                       flag=wx.ALIGN_LEFT, pos=(7, 1))
+        self.sizer.Add(item=self.radioProj,
+                       flag=wx.ALIGN_LEFT, pos=(8, 1))
         self.sizer.AddGrowableCol(1)
 
         # bindings
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioEpsg.GetId())
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioFile.GetId())
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioWkt.GetId())
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioSrs.GetId())
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioProj.GetId())
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioXy.GetId())
-        self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED,  self.OnEnterPage)
-        
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioEpsg.GetId())
+        #self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioIau.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioFile.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioWkt.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioSrs.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioProj.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioXy.GetId())
+        self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
+
     def OnEnterPage(self, event):
         global coordsys
-        
+
         if not coordsys:
             coordsys = "epsg"
             self.radioEpsg.SetValue(True)
@@ -272,6 +317,8 @@ class CoordinateSystemPage(TitledPage):
                 self.radioSrs.SetValue(True)
             if coordsys == "epsg":
                 self.radioEpsg.SetValue(True)
+            #if coordsys == "iau":
+            #    self.radioIau.SetValue(True)
             if coordsys == "file":
                 self.radioFile.SetValue(True)
             if coordsys == "wkt":
@@ -280,7 +327,7 @@ class CoordinateSystemPage(TitledPage):
                 self.radioProj.SetValue(True)
             if coordsys == "xy":
                 self.radioXy.SetValue(True)
-        
+
         if event.GetDirection():
             if coordsys == 'proj':
                 self.SetNext(self.parent.projpage)
@@ -288,6 +335,9 @@ class CoordinateSystemPage(TitledPage):
             if coordsys == "epsg":
                 self.SetNext(self.parent.epsgpage)
                 self.parent.sumpage.SetPrev(self.parent.epsgpage)
+            #if coordsys == "iau":
+            #    self.SetNext(self.parent.iaupage)
+            #    self.parent.sumpage.SetPrev(self.parent.iaupage)
             if coordsys == "file":
                 self.SetNext(self.parent.filepage)
                 self.parent.sumpage.SetPrev(self.parent.filepage)
@@ -300,10 +350,10 @@ class CoordinateSystemPage(TitledPage):
             if coordsys == "xy":
                 self.SetNext(self.parent.sumpage)
                 self.parent.sumpage.SetPrev(self.parent.csystemspage)
-        
+
         if not wx.FindWindowById(wx.ID_FORWARD).IsEnabled():
             wx.FindWindowById(wx.ID_FORWARD).Enable()
-    
+
     def SetVal(self, event):
         """Choose method"""
         global coordsys
@@ -311,6 +361,10 @@ class CoordinateSystemPage(TitledPage):
             coordsys = "proj"
             self.SetNext(self.parent.projpage)
             self.parent.sumpage.SetPrev(self.parent.datumpage)
+        #elif event.GetId() == self.radioIau.GetId():
+        #    coordsys = "iau"
+        #    self.SetNext(self.parent.iaupage)
+        #    self.parent.sumpage.SetPrev(self.parent.iaupage)
         elif event.GetId() == self.radioEpsg.GetId():
             coordsys = "epsg"
             self.SetNext(self.parent.epsgpage)
@@ -332,8 +386,10 @@ class CoordinateSystemPage(TitledPage):
             self.SetNext(self.parent.sumpage)
             self.parent.sumpage.SetPrev(self.parent.csystemspage)
 
+
 class ProjectionsPage(TitledPage):
     """Wizard page for selecting projection (select coordinate system option)"""
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Choose projection"))
 
@@ -343,37 +399,37 @@ class ProjectionsPage(TitledPage):
         self.p4proj = ''
 
         # text input
-        self.tproj = self.MakeTextCtrl("", size = (200,-1))
-        
+        self.tproj = self.MakeTextCtrl("", size=(200, -1))
+
         # search box
-        self.searchb = wx.SearchCtrl(self, size = (200,-1),
-                                     style = wx.TE_PROCESS_ENTER)
+        self.searchb = wx.SearchCtrl(self, size=(200, -1),
+                                     style=wx.TE_PROCESS_ENTER)
 
         # projection list
-        self.projlist = ItemList(self, data = self.parent.projdesc.items(),
-                                 columns = [_('Code'), _('Description')])
-        self.projlist.resizeLastColumn(30) 
+        self.projlist = ItemList(self, data=self.parent.projdesc.items(),
+                                 columns=[_('Code'), _('Description')])
+        self.projlist.resizeLastColumn(30)
 
         # layout
-        self.sizer.Add(item = self.MakeLabel(_("Projection code:")),
-                       flag = wx.ALIGN_LEFT |
+        self.sizer.Add(item=self.MakeLabel(_("Projection code:")),
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 1))
-        self.sizer.Add(item = self.tproj,
-                       flag = wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL,
-                       border = 5, pos = (1, 2))
-
-        self.sizer.Add(item = self.MakeLabel(_("Search in description:")),
-                       flag = wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                       border = 5, pos = (2, 1))
-        self.sizer.Add(item = self.searchb,
-                       flag = wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL,
-                       border = 5, pos = (2, 2))
-        
-        self.sizer.Add(item = self.projlist,
-                       flag = wx.EXPAND |
+                       wx.ALL, border=5, pos=(1, 1))
+        self.sizer.Add(item=self.tproj,
+                       flag=wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL,
+                       border=5, pos=(1, 2))
+
+        self.sizer.Add(item=self.MakeLabel(_("Search in description:")),
+                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                       border=5, pos=(2, 1))
+        self.sizer.Add(item=self.searchb,
+                       flag=wx.ALIGN_RIGHT | wx.EXPAND | wx.ALL,
+                       border=5, pos=(2, 2))
+
+        self.sizer.Add(item=self.projlist,
+                       flag=wx.EXPAND |
                        wx.ALIGN_LEFT |
-                       wx.ALL, border = 5, pos = (3, 1), span = (1, 3))
+                       wx.ALL, border=5, pos=(3, 1), span=(1, 3))
         self.sizer.AddGrowableCol(3)
         self.sizer.AddGrowableRow(3)
 
@@ -383,9 +439,9 @@ class ProjectionsPage(TitledPage):
         self.searchb.Bind(wx.EVT_TEXT_ENTER, self.OnSearch)
         self.projlist.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
-        self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED,  self.OnEnterPage)
-        
-    def OnPageChanging(self,event):
+        self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
+
+    def OnPageChanging(self, event):
         if event.GetDirection() and self.proj not in self.parent.projections.keys():
             event.Veto()
 
@@ -396,13 +452,13 @@ class ProjectionsPage(TitledPage):
         nextButton = wx.FindWindowById(wx.ID_FORWARD)
         if self.proj not in self.parent.projections.keys() and nextButton.IsEnabled():
             nextButton.Enable(False)
-        
+
         if self.proj in self.parent.projections.keys():
             if self.proj == 'stp':
-                wx.MessageBox('Currently State Plane projections must be selected using the '
-                              'text-based setup (g.setproj), or entered by EPSG code or '
-                              'custom PROJ.4 terms.',
-                              'Warning', wx.ICON_WARNING)
+                wx.MessageBox(
+                    'Currently State Plane projections must be selected using the '
+                    'text-based setup (g.setproj), or entered by EPSG code or '
+                    'custom PROJ.4 terms.', 'Warning', wx.ICON_WARNING)
                 self.proj = ''
                 self.tproj.SetValue(self.proj)
                 nextButton.Enable(False)
@@ -422,15 +478,16 @@ class ProjectionsPage(TitledPage):
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
 
         event.Skip()
-    
+
     def OnSearch(self, event):
         """Search projection by desc"""
         str = event.GetString()
         try:
-            self.proj, self.projdesc = self.projlist.Search(index = [0,1], pattern = event.GetString())
+            self.proj, self.projdesc = self.projlist.Search(
+                index=[0, 1], pattern=event.GetString())
         except:
             self.proj = self.projdesc = ''
-            
+
         event.Skip()
 
     def OnItemSelected(self, event):
@@ -440,26 +497,27 @@ class ProjectionsPage(TitledPage):
         # set values
         self.proj = self.projlist.GetItem(index, 0).GetText().lower()
         self.tproj.SetValue(self.proj)
-        
+
         event.Skip()
 
+
 class ItemList(wx.ListCtrl,
                listmix.ListCtrlAutoWidthMixin,
                listmix.ColumnSorterMixin):
     """Generic list (for projections, ellipsoids, etc.)"""
 
-    def __init__(self, parent, columns, data = None):
-        wx.ListCtrl.__init__(self, parent = parent, id = wx.ID_ANY,
-                             style = wx.LC_REPORT |
-                             wx.LC_VIRTUAL | 
+    def __init__(self, parent, columns, data=None):
+        wx.ListCtrl.__init__(self, parent=parent, id=wx.ID_ANY,
+                             style=wx.LC_REPORT |
+                             wx.LC_VIRTUAL |
                              wx.LC_HRULES |
                              wx.LC_VRULES |
                              wx.LC_SINGLE_SEL |
-                             wx.LC_SORT_ASCENDING, size = (550, 125))
+                             wx.LC_SORT_ASCENDING, size=(550, 125))
 
         # original data or None
         self.sourceData = data
-        
+
         #
         # insert columns
         #
@@ -471,47 +529,49 @@ class ItemList(wx.ListCtrl,
         # add some attributes
         #
         self.attr1 = wx.ListItemAttr()
-        self.attr1.SetBackgroundColour(wx.Colour(238,238,238))
+        self.attr1.SetBackgroundColour(wx.Colour(238, 238, 238))
         self.attr2 = wx.ListItemAttr()
         self.attr2.SetBackgroundColour("white")
 
         if self.sourceData:
             self.Populate()
-        
+
         for i in range(self.GetColumnCount()):
             self.SetColumnWidth(i, wx.LIST_AUTOSIZE_USEHEADER)
             if self.GetColumnWidth(i) < 80:
                 self.SetColumnWidth(i, 80)
-        
+
         #
         # listmix
         #
         listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.ColumnSorterMixin.__init__(self, self.GetColumnCount())
-            
+
         self.il = wx.ImageList(16, 16)
-        self.sm_up = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_GO_UP,   wx.ART_TOOLBAR,
-                                                          (16,16)))
-        self.sm_dn = self.il.Add(wx.ArtProvider_GetBitmap(wx.ART_GO_DOWN, wx.ART_TOOLBAR,
-                                                          (16,16)))
+        self.sm_up = self.il.Add(
+            wx.ArtProvider_GetBitmap(
+                wx.ART_GO_UP, wx.ART_TOOLBAR, (16, 16)))
+        self.sm_dn = self.il.Add(
+            wx.ArtProvider_GetBitmap(
+                wx.ART_GO_DOWN, wx.ART_TOOLBAR, (16, 16)))
         self.SetImageList(self.il, wx.IMAGE_LIST_SMALL)
 
         #
         # sort by first column
         #
         if self.sourceData:
-            self.SortListItems(col = 0, ascending = True)
+            self.SortListItems(col=0, ascending=True)
 
         #
         # bindings
         #
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColumnClick)
 
-    def Populate(self, data = None, update = False):
+    def Populate(self, data=None, update=False):
         """Populate list"""
-        self.itemDataMap  = {}
+        self.itemDataMap = {}
         self.itemIndexMap = []
-        
+
         if data is None:
             data = self.sourceData
         elif update:
@@ -524,22 +584,22 @@ class ItemList(wx.ListCtrl,
             for value in data:
                 self.itemDataMap[row] = [value[0]]
                 for i in range(1, len(value)):
-                     self.itemDataMap[row].append(value[i])
+                    self.itemDataMap[row].append(value[i])
                 self.itemIndexMap.append(row)
                 row += 1
 
             self.SetItemCount(row)
-            
+
             # set column width
             self.SetColumnWidth(0, 80)
             self.SetColumnWidth(1, 300)
-            
+
             self.SendSizeEvent()
-            
-        except StandardError as e:
-            wx.MessageBox(parent = self,
-                          message = _("Unable to read list: %s") % e,
-                          caption = _("Error"), style = wx.OK | wx.ICON_ERROR)
+
+        except Exception as e:
+            wx.MessageBox(parent=self,
+                          message=_("Unable to read list: %s") % e,
+                          caption=_("Error"), style=wx.OK | wx.ICON_ERROR)
 
     def OnColumnClick(self, event):
         """Sort by column"""
@@ -569,12 +629,12 @@ class ItemList(wx.ListCtrl,
     def OnGetItemAttr(self, item):
         """Get item attributes"""
         index = self.itemIndexMap[item]
-        if ( index % 2) == 0:
+        if (index % 2) == 0:
             return self.attr2
         else:
             return self.attr1
 
-    def SortItems(self, sorter = cmp):
+    def SortItems(self, sorter=cmp):
         """Sort items"""
         items = list(self.itemDataMap.keys())
         items.sort(self.Sorter)
@@ -582,7 +642,7 @@ class ItemList(wx.ListCtrl,
 
         # redraw the list
         self.Refresh()
-        
+
     def Sorter(self, key1, key2):
         colName = self.GetColumn(self._col).GetText()
         ascending = self._colSortFlag[self._col]
@@ -590,15 +650,15 @@ class ItemList(wx.ListCtrl,
         item1 = self.itemDataMap[key1][self._col]
         item2 = self.itemDataMap[key2][self._col]
 
-        if type(item1) == type('') or type(item2) == type(''):
+        if isinstance(item1, type('')) or isinstance(item2, type('')):
             cmpVal = locale.strcoll(str(item1), str(item2))
         else:
             cmpVal = cmp(item1, item2)
 
-
-        # If the items are equal then pick something else to make the sort value unique
+        # If the items are equal then pick something else to make the sort
+        # value unique
         if cmpVal == 0:
-            cmpVal = apply(cmp, self.GetSecondarySortValues(self._col, key1, key2))
+            cmpVal = cmp(*self.GetSecondarySortValues(self._col, key1, key2))
 
         if ascending:
             return cmpVal
@@ -609,7 +669,7 @@ class ItemList(wx.ListCtrl,
         """Used by listmix.ColumnSorterMixin"""
         return self
 
-    def Search (self, index, pattern):
+    def Search(self, index, pattern):
         """Search projection by description
         Return first found item or None
         """
@@ -636,59 +696,62 @@ class ItemList(wx.ListCtrl,
         else:
             return []
 
+
 class ProjParamsPage(TitledPage):
     """Wizard page for selecting method of setting coordinate system
     parameters (select coordinate system option)
     """
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Choose projection parameters"))
         global coordsys
-        
+
         self.parent = parent
         self.panel = None
         self.prjParamSizer = None
-        
+
         self.pparam = dict()
-        
+
         self.p4projparams = ''
         self.projdesc = ''
 
-
-        radioSBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                 label = " %s " % _("Select datum or ellipsoid (next page)"))
+        radioSBox = wx.StaticBox(
+            parent=self, id=wx.ID_ANY, label=" %s " %
+            _("Select datum or ellipsoid (next page)"))
         radioSBSizer = wx.StaticBoxSizer(radioSBox)
-        self.sizer.Add(item = radioSBSizer, pos = (0, 1),
-                       flag = wx.EXPAND | wx.ALIGN_TOP | wx.TOP, border = 10)
+        self.sizer.Add(item=radioSBSizer, pos=(0, 1),
+                       flag=wx.EXPAND | wx.ALIGN_TOP | wx.TOP, border=10)
         self.sizer.AddGrowableCol(1)
-        
-        self.radio1 = wx.RadioButton(parent = self, id = wx.ID_ANY, 
-                                     label = _("Datum with associated ellipsoid"),
-                                     style  =  wx.RB_GROUP)
-        self.radioEpsg = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                                     label = _("Ellipsoid only"))   
-        
+
+        self.radio1 = wx.RadioButton(
+            parent=self, id=wx.ID_ANY,
+            label=_("Datum with associated ellipsoid"),
+            style=wx.RB_GROUP)
+        self.radioEpsg = wx.RadioButton(parent=self, id=wx.ID_ANY,
+                                        label=_("Ellipsoid only"))
+
         # default button setting
         if self.radio1.GetValue() == False and self.radioEpsg.GetValue() == False:
             self.radio1.SetValue(True)
             self.SetNext(self.parent.datumpage)
-            #            self.parent.sumpage.SetPrev(self.parent.datumpage)  
-        
-        radioSBSizer.Add(item = self.radio1,
-                         flag = wx.ALIGN_LEFT | wx.RIGHT, border = 20)
-        radioSBSizer.Add(item = self.radioEpsg,
-                         flag = wx.ALIGN_LEFT)
-        
+            #            self.parent.sumpage.SetPrev(self.parent.datumpage)
+
+        radioSBSizer.Add(item=self.radio1,
+                         flag=wx.ALIGN_LEFT | wx.RIGHT, border=20)
+        radioSBSizer.Add(item=self.radioEpsg,
+                         flag=wx.ALIGN_LEFT)
+
         # bindings
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radio1.GetId())
-        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioEpsg.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radio1.GetId())
+        self.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id=self.radioEpsg.GetId())
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, self.OnPageChange)
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
-        
+
     def OnParamEntry(self, event):
         """Parameter value changed"""
-        id  = event.GetId()
+        id = event.GetId()
         val = event.GetString()
-        
+
         if id not in self.pparam:
             event.Skip()
             return
@@ -700,16 +763,16 @@ class ProjParamsPage(TitledPage):
             if val < 1:
                 win.SetValue(1)
             elif val > 60:
-                    win.SetValue(60)
-        
+                win.SetValue(60)
+
         if param['type'] == 'bool':
             param['value'] = event.GetSelection()
         else:
             param['value'] = val
-        
+
         event.Skip()
-        
-    def OnPageChange(self,event=None):
+
+    def OnPageChange(self, event=None):
         """Go to next page"""
         if event.GetDirection():
             self.p4projparams = ''
@@ -721,98 +784,115 @@ class ProjParamsPage(TitledPage):
                         self.p4projparams += (' +' + param['proj4'])
                 else:
                     if param['value'] is None:
-                        wx.MessageBox(parent = self,
-                                      message = _('You must enter a value for %s') % param['desc'],
-                                      caption = _('Error'), style = wx.ICON_ERROR | wx.CENTRE)
+                        wx.MessageBox(
+                            parent=self,
+                            message=_('You must enter a value for %s') %
+                            param['desc'],
+                            caption=_('Error'),
+                            style=wx.ICON_ERROR | wx.CENTRE)
                         event.Veto()
                     else:
-                        self.p4projparams += (' +' + param['proj4'] + '=' + str(param['value']))
+                        self.p4projparams += (' +' +
+                                              param['proj4'] +
+                                              '=' +
+                                              str(param['value']))
 
-    def OnEnterPage(self,event):
+    def OnEnterPage(self, event):
         """Page entered"""
         self.projdesc = self.parent.projections[self.parent.projpage.proj][0]
         if self.prjParamSizer is None:
             # entering page for the first time
-            self.paramSBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                     label = _(" Enter parameters for %s projection ") % self.projdesc)
+            self.paramSBox = wx.StaticBox(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_(" Enter parameters for %s projection ") %
+                self.projdesc)
             paramSBSizer = wx.StaticBoxSizer(self.paramSBox)
-            
-            self.panel = scrolled.ScrolledPanel(parent = self, id = wx.ID_ANY)
+
+            self.panel = scrolled.ScrolledPanel(parent=self, id=wx.ID_ANY)
             self.panel.SetupScrolling()
-            
-            self.prjParamSizer = wx.GridBagSizer(vgap = 0, hgap = 0) 
-            
-            self.sizer.Add(item = paramSBSizer, pos = (1, 1),
-                           flag = wx.EXPAND)
+
+            self.prjParamSizer = wx.GridBagSizer(vgap=0, hgap=0)
+
+            self.sizer.Add(item=paramSBSizer, pos=(1, 1),
+                           flag=wx.EXPAND)
             self.sizer.AddGrowableRow(1)
-            paramSBSizer.Add(item = self.panel, proportion = 1, 
-                             flag = wx.ALIGN_CENTER | wx.EXPAND)
-            
+            paramSBSizer.Add(item=self.panel, proportion=1,
+                             flag=wx.ALIGN_CENTER | wx.EXPAND)
+
             paramSBSizer.Fit(self.panel)
             self.panel.SetSizer(self.prjParamSizer)
-                    
+
         if event.GetDirection():
             self.prjParamSizer.Clear(True)
-            self.paramSBox.SetLabel(_(" Enter parameters for %s projection ") % self.projdesc)
+            self.paramSBox.SetLabel(
+                _(" Enter parameters for %s projection ") %
+                self.projdesc)
             self.pparam = dict()
             row = 0
-            for paramgrp in self.parent.projections[self.parent.projpage.proj][1]:
+            for paramgrp in self.parent.projections[
+                    self.parent.projpage.proj][1]:
                 # get parameters
                 id = wx.NewId()
-                param = self.pparam[id] = { 'type' : self.parent.paramdesc[paramgrp[0]][0],
-                                            'proj4': self.parent.paramdesc[paramgrp[0]][1],
-                                            'desc' : self.parent.paramdesc[paramgrp[0]][2] }
-                
+                param = self.pparam[id] = {
+                    'type': self.parent.paramdesc[
+                        paramgrp[0]][0], 'proj4': self.parent.paramdesc[
+                        paramgrp[0]][1], 'desc': self.parent.paramdesc[
+                        paramgrp[0]][2]}
+
                 # default values
                 if param['type'] == 'bool':
                     param['value'] = 0
                 elif param['type'] == 'zone':
-                    param['value'] = 30 
+                    param['value'] = 30
                     param['desc'] += ' (1-60)'
                 else:
                     param['value'] = paramgrp[2]
-                
-                label = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = param['desc'], 
-                                      style = wx.ALIGN_RIGHT | wx.ST_NO_AUTORESIZE)
+
+                label = wx.StaticText(
+                    parent=self.panel,
+                    id=wx.ID_ANY,
+                    label=param['desc'],
+                    style=wx.ALIGN_RIGHT | wx.ST_NO_AUTORESIZE)
                 if param['type'] == 'bool':
-                    win = wx.Choice(parent = self.panel, id = id, size = (100,-1), 
-                                    choices = [_('No'), _('Yes')])  
+                    win = wx.Choice(parent=self.panel, id=id, size=(100, -1),
+                                    choices=[_('No'), _('Yes')])
                     win.SetSelection(param['value'])
                     win.Bind(wx.EVT_CHOICE, self.OnParamEntry)
                 elif param['type'] == 'zone':
-                    win = wx.SpinCtrl(parent = self.panel, id = id,
-                                      size = (100, -1), 
-                                      style = wx.SP_ARROW_KEYS | wx.SP_WRAP,
-                                      min = 1, max = 60)
+                    win = wx.SpinCtrl(parent=self.panel, id=id,
+                                      size=(100, -1),
+                                      style=wx.SP_ARROW_KEYS | wx.SP_WRAP,
+                                      min=1, max=60)
                     win.SetValue(param['value'])
                     win.Bind(wx.EVT_SPINCTRL, self.OnParamEntry)
                     win.Bind(wx.EVT_TEXT, self.OnParamEntry)
                 else:
-                    win = wx.TextCtrl(parent = self.panel, id = id,
-                                      value = param['value'],
+                    win = wx.TextCtrl(parent=self.panel, id=id,
+                                      value=param['value'],
                                       size=(100, -1))
                     win.Bind(wx.EVT_TEXT, self.OnParamEntry)
                     if paramgrp[1] == 'noask':
                         win.Enable(False)
-                    
-                self.prjParamSizer.Add(item = label, pos = (row, 1),
-                                       flag = wx.ALIGN_RIGHT | 
+
+                self.prjParamSizer.Add(item=label, pos=(row, 1),
+                                       flag=wx.ALIGN_RIGHT |
                                        wx.ALIGN_CENTER_VERTICAL |
-                                       wx.RIGHT, border = 5)
-                self.prjParamSizer.Add(item = win, pos = (row, 2),
-                                       flag = wx.ALIGN_LEFT | 
+                                       wx.RIGHT, border=5)
+                self.prjParamSizer.Add(item=win, pos=(row, 2),
+                                       flag=wx.ALIGN_LEFT |
                                        wx.ALIGN_CENTER_VERTICAL |
-                                       wx.LEFT, border = 5)           
+                                       wx.LEFT, border=5)
                 row += 1
-        
+
         self.panel.SetSize(self.panel.GetBestSize())
         self.panel.Layout()
         self.Layout()
         self.Update()
-        
+
         if not wx.FindWindowById(wx.ID_FORWARD).IsEnabled():
             wx.FindWindowById(wx.ID_FORWARD).Enable()
-        
+
         event.Skip()
 
     def SetVal(self, event):
@@ -823,7 +903,8 @@ class ProjParamsPage(TitledPage):
         elif event.GetId() == self.radioEpsg.GetId():
             self.SetNext(self.parent.ellipsepage)
             self.parent.sumpage.SetPrev(self.parent.ellipsepage)
-    
+
+
 class DatumPage(TitledPage):
     """Wizard page for selecting datum (with associated ellipsoid)
     and datum transformation parameters (select coordinate system option)
@@ -840,44 +921,45 @@ class DatumPage(TitledPage):
         self.proj4params = ''
 
         # text input
-        self.tdatum = self.MakeTextCtrl("", size = (200,-1))
+        self.tdatum = self.MakeTextCtrl("", size=(200, -1))
 
         # search box
-        self.searchb = wx.SearchCtrl(self, size = (200,-1),
-                                     style = wx.TE_PROCESS_ENTER)
+        self.searchb = wx.SearchCtrl(self, size=(200, -1),
+                                     style=wx.TE_PROCESS_ENTER)
 
         # create list control for datum/elipsoid list
         data = []
         for key in self.parent.datums.keys():
-            data.append([key, self.parent.datums[key][0], self.parent.datums[key][1]])
-        self.datumlist = ItemList(self,
-                                  data = data,
-                                  columns = [_('Code'), _('Ellipsoid'), _('Description')])
-        self.datumlist.resizeLastColumn(10) 
-        
+            data.append([key, self.parent.datums[key][
+                        0], self.parent.datums[key][1]])
+        self.datumlist = ItemList(
+            self, data=data, columns=[
+                _('Code'), _('Ellipsoid'), _('Description')])
+        self.datumlist.resizeLastColumn(10)
+
         # layout
-        self.sizer.Add(item = self.MakeLabel(_("Datum code:")),
-                       flag = wx.ALIGN_LEFT |
+        self.sizer.Add(item=self.MakeLabel(_("Datum code:")),
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 1))
-        self.sizer.Add(item = self.tdatum,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 1))
+        self.sizer.Add(item=self.tdatum,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 2))
+                       wx.ALL, border=5, pos=(1, 2))
 
-        self.sizer.Add(item = self.MakeLabel(_("Search in description:")),
-                       flag = wx.ALIGN_LEFT |
+        self.sizer.Add(item=self.MakeLabel(_("Search in description:")),
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (2, 1))
-        self.sizer.Add(item = self.searchb,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(2, 1))
+        self.sizer.Add(item=self.searchb,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (2, 2))
+                       wx.ALL, border=5, pos=(2, 2))
 
-        self.sizer.Add(item = self.datumlist,
-                       flag = wx.EXPAND |
+        self.sizer.Add(item=self.datumlist,
+                       flag=wx.EXPAND |
                        wx.ALIGN_LEFT |
-                       wx.ALL, border = 5, pos = (3, 1), span = (1, 4))
+                       wx.ALL, border=5, pos=(3, 1), span=(1, 4))
         self.sizer.AddGrowableCol(4)
         self.sizer.AddGrowableRow(3)
 
@@ -895,25 +977,26 @@ class DatumPage(TitledPage):
     def OnPageChanging(self, event):
         self.proj4params = ''
         proj = self.parent.projpage.p4proj
-        
+
         if event.GetDirection():
             if self.datum not in self.parent.datums:
                 event.Veto()
             else:
-                # check for datum tranforms            
-#                proj4string = self.parent.CreateProj4String() + ' +datum=%s' % self.datum
+                # check for datum tranforms
+                #                proj4string = self.parent.CreateProj4String() + ' +datum=%s' % self.datum
                 ret = RunCommand('g.proj',
-                                 read = True,
-                                 proj4 = '%s' % proj,
-                                 datum = '%s' % self.datum, 
-                                 datum_trans = '-1',
-                                 flags = 't')
+                                 read=True,
+                                 proj4='%s' % proj,
+                                 datum='%s' % self.datum,
+                                 datum_trans='-1',
+                                 flags='t')
 #                wx.Messagebox('here')
                 if ret != '':
                     dtrans = ''
                     # open a dialog to select datum transform number
-                    dlg = SelectTransformDialog(self.parent.parent, transforms=ret)
-                    
+                    dlg = SelectTransformDialog(
+                        self.parent.parent, transforms=ret)
+
                     if dlg.ShowModal() == wx.ID_OK:
                         dtrans = dlg.GetTransform()
                         if dtrans == '':
@@ -924,18 +1007,20 @@ class DatumPage(TitledPage):
                         dlg.Destroy()
                         event.Veto()
                         return 'Datum transform is required.'
-                    
+
                     self.parent.datum_trans = dtrans
-                
+
             self.GetNext().SetPrev(self)
             self.parent.ellipsepage.ellipse = self.ellipse
-            self.parent.ellipsepage.ellipseparams = self.parent.ellipsoids[self.ellipse][1]
+            self.parent.ellipsepage.ellipseparams = self.parent.ellipsoids[
+                self.ellipse][1]
 
-    def OnEnterPage(self,event):
+    def OnEnterPage(self, event):
         self.parent.datum_trans = None
         if event.GetDirection():
             if len(self.datum) == 0:
-                # disable 'next' button by default when entering from previous page
+                # disable 'next' button by default when entering from previous
+                # page
                 wx.FindWindowById(wx.ID_FORWARD).Enable(False)
             else:
                 wx.FindWindowById(wx.ID_FORWARD).Enable(True)
@@ -965,17 +1050,22 @@ class DatumPage(TitledPage):
                 self.datumparams.remove('dz=0.0')
             except:
                 pass
-            
+
             nextButton.Enable(True)
-            
-        self.Update()    
+
+        self.Update()
         event.Skip()
 
     def OnDSearch(self, event):
         """Search geodetic datum by desc"""
-        str =  self.searchb.GetValue()
+        str = self.searchb.GetValue()
         try:
-            self.datum, self.ellipsoid, self.datumdesc = self.datumlist.Search(index = [0,1,2], pattern = str)
+            self.datum, self.ellipsoid, self.datumdesc = self.datumlist.Search(
+                index=[
+                    0,
+                    1,
+                    2],
+                pattern=str)
         except:
             self.datum = self.datumdesc = self.ellipsoid = ''
 
@@ -988,9 +1078,10 @@ class DatumPage(TitledPage):
 
         self.datum = self.datumlist.GetItem(index, 0).GetText()
         self.tdatum.SetValue(self.datum)
-        
+
         event.Skip()
 
+
 class EllipsePage(TitledPage):
     """Wizard page for selecting ellipsoid (select coordinate system option)"""
 
@@ -1005,17 +1096,17 @@ class EllipsePage(TitledPage):
         self.proj4params = ''
 
         # text input
-        self.tellipse = self.MakeTextCtrl("", size = (200,-1))
+        self.tellipse = self.MakeTextCtrl("", size=(200, -1))
 
         # search box
-        self.searchb = wx.SearchCtrl(self, size = (200,-1),
-                                     style = wx.TE_PROCESS_ENTER)
+        self.searchb = wx.SearchCtrl(self, size=(200, -1),
+                                     style=wx.TE_PROCESS_ENTER)
         # radio buttons
-        self.radio1 = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                        label = _("Earth based"),
-                        style  =  wx.RB_GROUP)
-        self.radioEpsg = wx.RadioButton(parent = self, id = wx.ID_ANY,
-                        label = _("Planetary bodies"))
+        self.radio1 = wx.RadioButton(parent=self, id=wx.ID_ANY,
+                                     label=_("Earth based"),
+                                     style=wx.RB_GROUP)
+        self.radioEpsg = wx.RadioButton(parent=self, id=wx.ID_ANY,
+                                        label=_("Planetary bodies"))
 
         # create list control for ellipse list
         data = []
@@ -1023,40 +1114,40 @@ class EllipsePage(TitledPage):
         for key in self.parent.ellipsoids.keys():
             data.append([key, self.parent.ellipsoids[key][0]])
 
-        self.ellipselist = ItemList(self, data = data,
-                                    columns = [_('Code'), _('Description')])
-        self.ellipselist.resizeLastColumn(30)                             
+        self.ellipselist = ItemList(self, data=data,
+                                    columns=[_('Code'), _('Description')])
+        self.ellipselist.resizeLastColumn(30)
 
         # layout
 
-        self.sizer.Add(item = self.MakeLabel(_("Ellipsoid code:")),
-                       flag = wx.ALIGN_RIGHT |
+        self.sizer.Add(item=self.MakeLabel(_("Ellipsoid code:")),
+                       flag=wx.ALIGN_RIGHT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 1))
-        self.sizer.Add(item = self.tellipse,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 1))
+        self.sizer.Add(item=self.tellipse,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 2))
-        self.sizer.Add(item = self.radio1,
-                       flag = wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT, 
-                       border = 25, pos = (1, 3))
+                       wx.ALL, border=5, pos=(1, 2))
+        self.sizer.Add(item=self.radio1,
+                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+                       border=25, pos=(1, 3))
 
-        self.sizer.Add(item = self.MakeLabel(_("Search in description:")),
-                       flag = wx.ALIGN_RIGHT |
+        self.sizer.Add(item=self.MakeLabel(_("Search in description:")),
+                       flag=wx.ALIGN_RIGHT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (2, 1))
-        self.sizer.Add(item = self.searchb,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(2, 1))
+        self.sizer.Add(item=self.searchb,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (2, 2))
-        self.sizer.Add(item = self.radioEpsg,
-                       flag = wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
-                       border = 25, pos = (2, 3))
+                       wx.ALL, border=5, pos=(2, 2))
+        self.sizer.Add(item=self.radioEpsg,
+                       flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+                       border=25, pos=(2, 3))
 
-        self.sizer.Add(item = self.ellipselist,
-                       flag = wx.EXPAND |
+        self.sizer.Add(item=self.ellipselist,
+                       flag=wx.EXPAND |
                        wx.ALIGN_LEFT |
-                       wx.ALL, border = 5, pos = (3, 1), span = (1, 4))
+                       wx.ALL, border=5, pos=(3, 1), span=(1, 4))
         self.sizer.AddGrowableCol(4)
         self.sizer.AddGrowableRow(3)
 
@@ -1066,13 +1157,19 @@ class EllipsePage(TitledPage):
         self.tellipse.Bind(wx.EVT_TEXT_ENTER, self.OnText)
         self.searchb.Bind(wx.EVT_TEXT_ENTER, self.OnSearch)
 
-        self.radio1.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radio1.GetId())
-        self.radioEpsg.Bind(wx.EVT_RADIOBUTTON, self.SetVal, id = self.radioEpsg.GetId())
+        self.radio1.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.SetVal,
+            id=self.radio1.GetId())
+        self.radioEpsg.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.SetVal,
+            id=self.radioEpsg.GetId())
 
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
 
-    def OnEnterPage(self,event):
+    def OnEnterPage(self, event):
         if len(self.ellipse) == 0:
             # disable 'next' button by default
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
@@ -1083,25 +1180,26 @@ class EllipsePage(TitledPage):
 
     def OnPageChanging(self, event):
         if event.GetDirection() \
-          and self.ellipse not in self.parent.ellipsoids \
-          and self.ellipse not in self.parent.planetary_ellipsoids:
+                and self.ellipse not in self.parent.ellipsoids \
+                and self.ellipse not in self.parent.planetary_ellipsoids:
             event.Veto()
 
-        #print self.ellipse, self.ellipsedesc, self.ellipseparams
+        # print self.ellipse, self.ellipsedesc, self.ellipseparams
 
         self.proj4params = ''
         self.GetNext().SetPrev(self)
         self.parent.datumpage.datumparams = ''
         # self.GetNext().SetPrev(self) (???)
 
-    #FIXME: index number doesn't translate when you've given a valid name from the other list
+    # FIXME: index number doesn't translate when you've given a valid name
+    # from the other list
     def OnText(self, event):
         """Ellipspoid code changed"""
         self.ellipse = event.GetString()
         nextButton = wx.FindWindowById(wx.ID_FORWARD)
         if len(self.ellipse) == 0 or \
-          (self.ellipse not in self.parent.ellipsoids and \
-           self.ellipse not in self.parent.planetary_ellipsoids):
+            (self.ellipse not in self.parent.ellipsoids and
+             self.ellipse not in self.parent.planetary_ellipsoids):
             nextButton.Enable(False)
             self.ellipsedesc = ''
             self.ellipseparams = ''
@@ -1111,33 +1209,36 @@ class EllipsePage(TitledPage):
             self.ellipseparams = self.parent.ellipsoids[self.ellipse][1]
             nextButton.Enable(True)
         elif self.ellipse in self.parent.planetary_ellipsoids:
-            self.ellipsedesc = self.parent.planetary_ellipsoids[self.ellipse][0]
-            self.ellipseparams = self.parent.planetary_ellipsoids[self.ellipse][1]
+            self.ellipsedesc = self.parent.planetary_ellipsoids[
+                self.ellipse][0]
+            self.ellipseparams = self.parent.planetary_ellipsoids[
+                self.ellipse][1]
             nextButton.Enable(True)
-        #print self.ellipse, self.ellipsedesc, self.ellipseparams
+        # print self.ellipse, self.ellipsedesc, self.ellipseparams
 
     def OnSearch(self, event):
         """Search ellipsoid by desc"""
         try:
-            self.ellipse, self.ellipsedesc = \
-                self.ellipselist.Search(index=[0,1], pattern=event.GetString())
+            self.ellipse, self.ellipsedesc = self.ellipselist.Search(
+                index=[0, 1], pattern=event.GetString())
             if self.scope is 'earth':
                 self.ellipseparams = self.parent.ellipsoids[self.ellipse][1]
             else:
-                self.ellipseparams = self.parent.planetary_ellipsoids[self.ellipse][1]
+                self.ellipseparams = self.parent.planetary_ellipsoids[
+                    self.ellipse][1]
         except:
             self.ellipse = self.ellipsedesc = self.ellipseparams = ''
 
         event.Skip()
 
-    def OnItemSelected(self,event):
+    def OnItemSelected(self, event):
         """Ellipsoid selected"""
         index = event.m_itemIndex
         item = event.GetItem()
 
         self.ellipse = self.ellipselist.GetItem(index, 0).GetText()
         self.tellipse.SetValue(self.ellipse)
-        
+
         event.Skip()
 
     def SetVal(self, event):
@@ -1148,12 +1249,12 @@ class EllipsePage(TitledPage):
             self.scope = 'earth'
             for key in self.parent.ellipsoids.keys():
                 data.append([key, self.parent.ellipsoids[key][0]])
-        elif event.GetId() == self.radioEpsgx.GetId():
+        elif event.GetId() == self.radioEpsg.GetId():
             self.scope = 'planetary'
             for key in self.parent.planetary_ellipsoids.keys():
                 data.append([key, self.parent.planetary_ellipsoids[key][0]])
 
-        self.ellipselist.Populate(data = data, update = True)
+        self.ellipselist.Populate(data=data, update=True)
 
 
 class GeoreferencedFilePage(TitledPage):
@@ -1166,19 +1267,19 @@ class GeoreferencedFilePage(TitledPage):
         self.georeffile = ''
 
         # create controls
-        self.lfile= self.MakeLabel(_("Georeferenced file:"))
-        self.tfile = self.MakeTextCtrl(size = (300,-1))
+        self.lfile = self.MakeLabel(_("Georeferenced file:"))
+        self.tfile = self.MakeTextCtrl(size=(300, -1))
         self.bbrowse = self.MakeButton(_("Browse"))
 
         # do layout
-        self.sizer.Add(item = self.lfile, flag = wx.ALIGN_LEFT |
+        self.sizer.Add(item=self.lfile, flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTRE_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 1))
-        self.sizer.Add(item = self.tfile, flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 1))
+        self.sizer.Add(item=self.tfile, flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTRE_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 2))
-        self.sizer.Add(item = self.bbrowse, flag = wx.ALIGN_LEFT |
-                       wx.ALL, border = 5, pos = (1, 3))
+                       wx.ALL, border=5, pos=(1, 2))
+        self.sizer.Add(item=self.bbrowse, flag=wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 3))
         self.sizer.AddGrowableCol(3)
 
         self.bbrowse.Bind(wx.EVT_BUTTON, self.OnBrowse)
@@ -1230,29 +1331,31 @@ class GeoreferencedFilePage(TitledPage):
 
         event.Skip()
 
+
 class WKTPage(TitledPage):
     """Wizard page for selecting WKT file to use
     for setting coordinate system parameters"""
 
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard, _("Select Well Known Text (WKT) .prj file"))
+        TitledPage.__init__(self, wizard, _(
+            "Select Well Known Text (WKT) .prj file"))
 
         self.wktfile = ''
 
         # create controls
-        self.lfile= self.MakeLabel(_("WKT .prj file:"))
-        self.tfile = self.MakeTextCtrl(size = (300,-1))
+        self.lfile = self.MakeLabel(_("WKT .prj file:"))
+        self.tfile = self.MakeTextCtrl(size=(300, -1))
         self.bbrowse = self.MakeButton(_("Browse"))
 
         # do layout
-        self.sizer.Add(item = self.lfile, flag = wx.ALIGN_LEFT |
+        self.sizer.Add(item=self.lfile, flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTRE_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 1))
-        self.sizer.Add(item = self.tfile, flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 1))
+        self.sizer.Add(item=self.tfile, flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTRE_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 2))
-        self.sizer.Add(item = self.bbrowse, flag = wx.ALIGN_LEFT |
-                       wx.ALL, border = 5, pos = (1, 3))
+                       wx.ALL, border=5, pos=(1, 2))
+        self.sizer.Add(item=self.bbrowse, flag=wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 3))
         self.sizer.AddGrowableCol(3)
 
         self.bbrowse.Bind(wx.EVT_BUTTON, self.OnBrowse)
@@ -1291,11 +1394,12 @@ class WKTPage(TitledPage):
 
     def OnBrowse(self, event):
         """Choose file"""
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Select Well Known Text (WKT) .prj file"),
-                            defaultDir = os.getcwd(),
-                            wildcard = "PRJ files (*.prj)|*.prj|Files (*.*)|*.*",
-                            style = wx.FD_OPEN)
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Select Well Known Text (WKT) .prj file"),
+            defaultDir=os.getcwd(),
+            wildcard="PRJ files (*.prj)|*.prj|Files (*.*)|*.*",
+            style=wx.FD_OPEN)
 
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
@@ -1304,6 +1408,7 @@ class WKTPage(TitledPage):
 
         event.Skip()
 
+
 class EPSGPage(TitledPage):
     """Wizard page for selecting EPSG code for
     setting coordinate system parameters"""
@@ -1317,55 +1422,62 @@ class EPSGPage(TitledPage):
         self.epsgparams = ''
 
         # labels
-        self.lfile = self.MakeLabel(_("Path to the EPSG-codes file:"),
-                                    style = wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
-        self.lcode = self.MakeLabel(_("EPSG code:"),
-                                    style = wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
+        self.lfile = self.MakeLabel(
+            _("Path to the EPSG-codes file:"),
+            style=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
+        self.lcode = self.MakeLabel(
+            _("EPSG code:"),
+            style=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
         # text input
         epsgdir = utils.PathJoin(os.environ["GRASS_PROJSHARE"], 'epsg')
-        self.tfile = self.MakeTextCtrl(text = epsgdir, size = (200,-1),
-                                       style = wx.TE_PROCESS_ENTER)
-        self.tcode = self.MakeTextCtrl(size = (200,-1))
+        self.tfile = self.MakeTextCtrl(text=epsgdir, size=(200, -1),
+                                       style=wx.TE_PROCESS_ENTER)
+        self.tcode = self.MakeTextCtrl(size=(200, -1))
 
         # buttons
         self.bbrowse = self.MakeButton(_("Browse"))
-        
+
         # search box
-        self.searchb = wx.SearchCtrl(self, size = (200,-1),
-                                     style = wx.TE_PROCESS_ENTER)
+        self.searchb = wx.SearchCtrl(self, size=(200, -1),
+                                     style=wx.TE_PROCESS_ENTER)
 
-        self.epsglist = ItemList(self, data = None,
-                                 columns = [_('Code'), _('Description'), _('Parameters')])
+        self.epsglist = ItemList(
+            self,
+            data=None,
+            columns=[
+                _('Code'),
+                _('Description'),
+                _('Parameters')])
 
         # layout
-        self.sizer.Add(item = self.lfile,
-                       flag = wx.ALIGN_LEFT |
+        self.sizer.Add(item=self.lfile,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 1), span = (1, 2))
-        self.sizer.Add(item = self.tfile,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 1), span=(1, 2))
+        self.sizer.Add(item=self.tfile,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 3))
-        self.sizer.Add(item = self.bbrowse,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 3))
+        self.sizer.Add(item=self.bbrowse,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (1, 4))
-        self.sizer.Add(item = self.lcode,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(1, 4))
+        self.sizer.Add(item=self.lcode,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (2, 1), span = (1, 2))
-        self.sizer.Add(item = self.tcode,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(2, 1), span=(1, 2))
+        self.sizer.Add(item=self.tcode,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (2, 3))
-        self.sizer.Add(item = self.searchb,
-                       flag = wx.ALIGN_LEFT |
+                       wx.ALL, border=5, pos=(2, 3))
+        self.sizer.Add(item=self.searchb,
+                       flag=wx.ALIGN_LEFT |
                        wx.ALIGN_CENTER_VERTICAL |
-                       wx.ALL, border = 5, pos = (3, 3))
-        
-        self.sizer.Add(item = self.epsglist,
-                       flag = wx.ALIGN_LEFT | wx.EXPAND, pos = (4, 1),
-                       span = (1, 4))
+                       wx.ALL, border=5, pos=(3, 3))
+
+        self.sizer.Add(item=self.epsglist,
+                       flag=wx.ALIGN_LEFT | wx.EXPAND, pos=(4, 1),
+                       span=(1, 4))
         self.sizer.AddGrowableCol(3)
         self.sizer.AddGrowableRow(4)
 
@@ -1390,7 +1502,7 @@ class EPSGPage(TitledPage):
 
         # load default epsg database file
         self.OnBrowseCodes(None)
-        
+
         event.Skip()
 
     def OnPageChanging(self, event):
@@ -1401,16 +1513,17 @@ class EPSGPage(TitledPage):
             else:
                 # check for datum transforms
                 ret = RunCommand('g.proj',
-                                 read = True,
-                                 epsg = self.epsgcode,
-                                 datum_trans = '-1',
-                                 flags = 't')
-                
+                                 read=True,
+                                 epsg=self.epsgcode,
+                                 datum_trans='-1',
+                                 flags='t')
+
                 if ret != '':
                     dtrans = ''
                     # open a dialog to select datum transform number
-                    dlg = SelectTransformDialog(self.parent.parent, transforms = ret)
-                    
+                    dlg = SelectTransformDialog(
+                        self.parent.parent, transforms=ret)
+
                     if dlg.ShowModal() == wx.ID_OK:
                         dtrans = dlg.GetTransform()
                         if dtrans == '':
@@ -1421,7 +1534,7 @@ class EPSGPage(TitledPage):
                         dlg.Destroy()
                         event.Veto()
                         return 'Datum transform is required.'
-                    
+
                     self.parent.datum_trans = dtrans
             self.GetNext().SetPrev(self)
 
@@ -1431,23 +1544,24 @@ class EPSGPage(TitledPage):
             self.epsgcode = int(self.epsgcode)
         except:
             self.epsgcode = None
-            
+
         nextButton = wx.FindWindowById(wx.ID_FORWARD)
 
-        if self.epsgcode and self.epsgcode in self.epsgCodeDict.keys():
+        if self.epsgcode and self.epsgCodeDict and \
+                self.epsgcode in self.epsgCodeDict.keys():
             self.epsgdesc = self.epsgCodeDict[self.epsgcode][0]
             self.epsgparams = self.epsgCodeDict[self.epsgcode][1]
             if not nextButton.IsEnabled():
                 nextButton.Enable(True)
         else:
-            self.epsgcode = None # not found
+            self.epsgcode = None  # not found
             if nextButton.IsEnabled():
                 nextButton.Enable(False)
             self.epsgdesc = self.epsgparams = ''
-        
+
     def OnSearch(self, event):
-        value =  self.searchb.GetValue()
-        
+        value = self.searchb.GetValue()
+
         if value == '':
             self.epsgcode = None
             self.epsgdesc = self.epsgparams = ''
@@ -1457,28 +1571,33 @@ class EPSGPage(TitledPage):
         else:
             try:
                 self.epsgcode, self.epsgdesc, self.epsgparams = \
-                        self.epsglist.Search(index=[0,1,2], pattern=value)
-            except (IndexError, ValueError): # -> no item found
+                    self.epsglist.Search(index=[0, 1, 2], pattern=value)
+            except (IndexError, ValueError):  # -> no item found
                 self.epsgcode = None
                 self.epsgdesc = self.epsgparams = ''
                 self.tcode.SetValue('')
 
         event.Skip()
-        
+
     def OnBrowse(self, event):
         """Define path for EPSG code file"""
         path = os.path.dirname(self.tfile.GetValue())
         if not path:
             path = os.getcwd()
-        
-        dlg = wx.FileDialog(parent = self, message = _("Choose EPSG codes file"),
-                            defaultDir = path, defaultFile = "", wildcard = "*", style = wx.FD_OPEN)
-        
+
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose EPSG codes file"),
+            defaultDir=path,
+            defaultFile="",
+            wildcard="*",
+            style=wx.FD_OPEN)
+
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             self.tfile.SetValue(path)
             self.OnBrowseCodes(None)
-        
+
         dlg.Destroy()
 
         event.Skip()
@@ -1493,48 +1612,299 @@ class EPSGPage(TitledPage):
         self.tcode.SetValue(str(self.epsgcode))
 
         event.Skip()
-        
-    def OnBrowseCodes(self, event, search = None):
+
+    def OnBrowseCodes(self, event, search=None):
         """Browse EPSG codes"""
-        self.epsgCodeDict = utils.ReadEpsgCodes(self.tfile.GetValue())
+        try:
+            self.epsgCodeDict = utils.ReadEpsgCodes(self.tfile.GetValue())
+        except OpenError as e:
+            GError(
+                parent=self,
+                message=_("Unable to read EPGS codes: {}").format(e),
+                showTraceback=False)
+            self.epsglist.Populate(list(), update=True)
+            return
+
+        data = list()
+        for code, val in self.epsgCodeDict.iteritems():
+            if code is not None:
+                data.append((code, val[0], val[1]))
+
+        self.epsglist.Populate(data, update=True)
+
+
+class IAUPage(TitledPage):
+    """Wizard page for selecting IAU code/WKT for
+    setting coordinate system parameters"""
+
+    def __init__(self, wizard, parent):
+        TitledPage.__init__(self, wizard, _("Choose IAU Code"))
+        self.parent = parent
+        self.epsgCodeDict = {}
+        self.epsgcode = None
+        self.epsgdesc = ''
+        self.epsgparams = ''
+
+        # labels
+        self.lfile = self.MakeLabel(
+            _("Path to the IAU-codes file:"),
+            style=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
+        self.lcode = self.MakeLabel(
+            _("IAU code:"),
+            style=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL)
+        # text input
+        epsgdir = utils.PathJoin(
+            globalvar.ETCDIR,
+            "proj",
+            "ogr_csv",
+            'iau2009.csv')
+        self.tfile = self.MakeTextCtrl(text=epsgdir, size=(200, -1),
+                                       style=wx.TE_PROCESS_ENTER)
+        self.tcode = self.MakeTextCtrl(size=(200, -1))
+
+        # buttons
+        self.bbrowse = self.MakeButton(_("Browse"))
+
+        # search box
+        self.searchb = wx.SearchCtrl(self, size=(200, -1),
+                                     style=wx.TE_PROCESS_ENTER)
+
+        self.epsglist = ItemList(
+            self,
+            data=None,
+            columns=[
+                _('Code'),
+                _('Description'),
+                _('Parameters')])
+
+        # layout
+        self.sizer.Add(item=self.lfile,
+                       flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL |
+                       wx.ALL, border=5, pos=(1, 1), span=(1, 2))
+        self.sizer.Add(item=self.tfile,
+                       flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL |
+                       wx.ALL, border=5, pos=(1, 3))
+        self.sizer.Add(item=self.bbrowse,
+                       flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL |
+                       wx.ALL, border=5, pos=(1, 4))
+        self.sizer.Add(item=self.lcode,
+                       flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL |
+                       wx.ALL, border=5, pos=(2, 1), span=(1, 2))
+        self.sizer.Add(item=self.tcode,
+                       flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL |
+                       wx.ALL, border=5, pos=(2, 3))
+        self.sizer.Add(item=self.searchb,
+                       flag=wx.ALIGN_LEFT |
+                       wx.ALIGN_CENTER_VERTICAL |
+                       wx.ALL, border=5, pos=(3, 3))
+
+        self.sizer.Add(item=self.epsglist,
+                       flag=wx.ALIGN_LEFT | wx.EXPAND, pos=(4, 1),
+                       span=(1, 4))
+        self.sizer.AddGrowableCol(3)
+        self.sizer.AddGrowableRow(4)
+
+        # events
+        self.bbrowse.Bind(wx.EVT_BUTTON, self.OnBrowse)
+        self.tfile.Bind(wx.EVT_TEXT_ENTER, self.OnBrowseCodes)
+        self.tcode.Bind(wx.EVT_TEXT, self.OnText)
+        self.tcode.Bind(wx.EVT_TEXT_ENTER, self.OnText)
+        self.epsglist.Bind(wx.EVT_LIST_ITEM_SELECTED, self.OnItemSelected)
+        self.searchb.Bind(wx.EVT_TEXT_ENTER, self.OnSearch)
+        self.Bind(wiz.EVT_WIZARD_PAGE_CHANGING, self.OnPageChanging)
+        self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
+
+    def OnEnterPage(self, event):
+        self.parent.datum_trans = None
+        if event.GetDirection():
+            if not self.epsgcode:
+                # disable 'next' button by default
+                wx.FindWindowById(wx.ID_FORWARD).Enable(False)
+            else:
+                wx.FindWindowById(wx.ID_FORWARD).Enable(True)
+
+        # load default epsg database file
+        self.OnBrowseCodes(None)
+
+        event.Skip()
+
+    def OnPageChanging(self, event):
+        if event.GetDirection():
+            if not self.epsgcode:
+                event.Veto()
+                return
+            else:
+                # check for datum transforms
+                ret = RunCommand('g.proj',
+                                 read=True,
+                                 proj4=self.epsgparams,
+                                 datum_trans='-1',
+                                 flags='t')
+
+                if ret != '':
+                    dtrans = ''
+                    # open a dialog to select datum transform number
+                    dlg = SelectTransformDialog(
+                        self.parent.parent, transforms=ret)
+
+                    if dlg.ShowModal() == wx.ID_OK:
+                        dtrans = dlg.GetTransform()
+                        if dtrans == '':
+                            dlg.Destroy()
+                            event.Veto()
+                            return 'Datum transform is required.'
+                    else:
+                        dlg.Destroy()
+                        event.Veto()
+                        return 'Datum transform is required.'
+
+                    self.parent.datum_trans = dtrans
+                    self.parent.epsgcode = self.epsgcode
+                    self.parent.epsgdesc = self.epsgdesc
+
+                # prepare +nadgrids or +towgs84 terms for Summary page. first
+                # convert them:
+                ret, projlabel, err = RunCommand(
+                    'g.proj', flags='jft', proj4=self.epsgparams,
+                    datum_trans=self.parent.datum_trans, getErrorMsg=True,
+                    read=True)
+                # splitting on space alone would break for grid files with
+                # space in pathname
+                for projterm in projlabel.split(' +'):
+                    if projterm.find(
+                            "towgs84=") != -1 or projterm.find("nadgrids=") != -1:
+                        self.custom_dtrans_string = ' +%s' % projterm
+                        break
+
+            self.GetNext().SetPrev(self)
+
+    def OnText(self, event):
+        self.epsgcode = event.GetString()
+        try:
+            self.epsgcode = int(self.epsgcode)
+        except:
+            self.epsgcode = None
+
+        nextButton = wx.FindWindowById(wx.ID_FORWARD)
+
+        # if self.epsgcode and self.epsgcode in self.epsgCodeDict.keys():
+        if self.epsgcode:
+            self.epsgdesc = self.epsgCodeDict[self.epsgcode][0]
+            self.epsgparams = self.epsgCodeDict[self.epsgcode][1]
+            if not nextButton.IsEnabled():
+                nextButton.Enable(True)
+        else:
+            self.epsgcode = None  # not found
+            if nextButton.IsEnabled():
+                nextButton.Enable(False)
+            self.epsgdesc = self.epsgparams = ''
+
+    def OnSearch(self, event):
+        value = self.searchb.GetValue()
+
+        if value == '':
+            self.epsgcode = None
+            self.epsgdesc = self.epsgparams = ''
+            self.tcode.SetValue('')
+            self.searchb.SetValue('')
+            self.OnBrowseCodes(None)
+        else:
+            try:
+                self.epsgcode, self.epsgdesc, self.epsgparams = \
+                    self.epsglist.Search(index=[0, 1, 2], pattern=value)
+            except (IndexError, ValueError):  # -> no item found
+                self.epsgcode = None
+                self.epsgdesc = self.epsgparams = ''
+                self.tcode.SetValue('')
+
+        event.Skip()
+
+    def OnBrowse(self, event):
+        """Define path for IAU code file"""
+        path = os.path.dirname(self.tfile.GetValue())
+        if not path:
+            path = os.getcwd()
 
-        if type(self.epsgCodeDict) != dict:
-            wx.MessageBox(parent = self,
-                          message = _("Unable to read EPGS codes: %s") % self.epsgCodeDict,
-                          caption = _("Error"),  style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
-            self.epsglist.Populate(list(), update = True)
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose IAU codes file"),
+            defaultDir=path,
+            defaultFile="",
+            wildcard="*",
+            style=wx.FD_OPEN)
+
+        if dlg.ShowModal() == wx.ID_OK:
+            path = dlg.GetPath()
+            self.tfile.SetValue(path)
+            self.OnBrowseCodes(None)
+
+        dlg.Destroy()
+
+        event.Skip()
+
+    def OnItemSelected(self, event):
+        """IAU code selected from the list"""
+        index = event.m_itemIndex
+        item = event.GetItem()
+
+        self.epsgcode = int(self.epsglist.GetItem(index, 0).GetText())
+        # This is here that the index 2 (aka WKT) should be loaded in a
+        # variable
+        self.epsgdesc = self.epsglist.GetItem(index, 1).GetText()
+        self.tcode.SetValue(str(self.epsgcode))
+
+        event.Skip()
+
+    def OnBrowseCodes(self, event, search=None):
+        """Browse IAU codes"""
+        try:
+            self.epsgCodeDict = utils.ReadEpsgCodes(self.tfile.GetValue())
+        except OpenError as e:
+            GError(
+                parent=self,
+                message=_("Unable to read IAU codes: {}").format(e),
+                showTraceback=False)
+            self.epsglist.Populate(list(), update=True)
             return
-        
+
         data = list()
         for code, val in self.epsgCodeDict.iteritems():
             if code is not None:
                 data.append((code, val[0], val[1]))
-        
-        self.epsglist.Populate(data, update = True)
-        
+
+        self.epsglist.Populate(data, update=True)
+
+
 class CustomPage(TitledPage):
     """Wizard page for entering custom PROJ.4 string
     for setting coordinate system parameters"""
 
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard,
-                            _("Choose method of specifying georeferencing parameters"))
+        TitledPage.__init__(
+            self, wizard,
+            _("Choose method of specifying georeferencing parameters"))
         global coordsys
         self.customstring = ''
         self.parent = parent
 
         # widgets
-        self.text_proj4string = self.MakeTextCtrl(size = (400, 200),
-                                                  style = wx.TE_MULTILINE)
-        self.label_proj4string = self.MakeLabel(_("Enter PROJ.4 parameters string:"))
+        self.text_proj4string = self.MakeTextCtrl(size=(400, 200),
+                                                  style=wx.TE_MULTILINE)
+        self.label_proj4string = self.MakeLabel(
+            _("Enter PROJ.4 parameters string:"))
 
         # layout
         self.sizer.Add(self.label_proj4string,
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (1, 1))
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(1, 1))
         self.sizer.Add(self.text_proj4string,
-                       flag = wx.ALIGN_LEFT | wx.ALL | wx.EXPAND, 
-                       border = 5, pos = (2, 1), span = (1, 2))
+                       flag=wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
+                       border=5, pos=(2, 1), span=(1, 2))
         self.sizer.AddGrowableRow(2)
         self.sizer.AddGrowableCol(2)
 
@@ -1560,22 +1930,22 @@ class CustomPage(TitledPage):
             # check for datum tranforms
             # FIXME: -t flag is a hack-around for trac bug #1849
             ret, out, err = RunCommand('g.proj',
-                                       read = True, getErrorMsg = True,
-                                       proj4 = self.customstring, 
-                                       datum_trans = '-1',
-                                       flags = 't')
+                                       read=True, getErrorMsg=True,
+                                       proj4=self.customstring,
+                                       datum_trans='-1',
+                                       flags='t')
             if ret != 0:
-                wx.MessageBox(parent = self,
-                              message = err,
-                              caption = _("Error"),
-                              style = wx.OK | wx.ICON_ERROR | wx.CENTRE)
+                wx.MessageBox(parent=self,
+                              message=err,
+                              caption=_("Error"),
+                              style=wx.OK | wx.ICON_ERROR | wx.CENTRE)
                 event.Veto()
                 return
 
             if out:
                 dtrans = ''
                 # open a dialog to select datum transform number
-                dlg = SelectTransformDialog(self.parent.parent, transforms = out)
+                dlg = SelectTransformDialog(self.parent.parent, transforms=out)
 
                 if dlg.ShowModal() == wx.ID_OK:
                     dtrans = dlg.GetTransform()
@@ -1587,24 +1957,27 @@ class CustomPage(TitledPage):
                     dlg.Destroy()
                     event.Veto()
                     return _('Datum transform is required.')
-                
+
                 self.parent.datum_trans = dtrans
 
-                # prepare +nadgrids or +towgs84 terms for Summary page. first convert them:
+                # prepare +nadgrids or +towgs84 terms for Summary page. first
+                # convert them:
                 ret, projlabel, err = RunCommand('g.proj',
-                                                 flags = 'jft',
-                                                 proj4 = self.customstring,
-                                                 datum_trans = dtrans,
-                                                 getErrorMsg = True,
-                                                 read = True)
-                # splitting on space alone would break for grid files with space in pathname
+                                                 flags='jft',
+                                                 proj4=self.customstring,
+                                                 datum_trans=dtrans,
+                                                 getErrorMsg=True,
+                                                 read=True)
+                # splitting on space alone would break for grid files with
+                # space in pathname
                 for projterm in projlabel.split(' +'):
-                    if projterm.find("towgs84=") != -1 or projterm.find("nadgrids=") != -1:
+                    if projterm.find(
+                            "towgs84=") != -1 or projterm.find("nadgrids=") != -1:
                         self.custom_dtrans_string = ' +%s' % projterm
                         break
 
         self.GetNext().SetPrev(self)
-            
+
     def GetProjstring(self, event):
         """Change proj string"""
         # TODO: check PROJ.4 syntax
@@ -1617,86 +1990,94 @@ class CustomPage(TitledPage):
             if not nextButton.IsEnabled():
                 nextButton.Enable()
 
+
 class SummaryPage(TitledPage):
     """Shows summary result of choosing coordinate system parameters
     prior to creating location"""
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Summary"))
         self.parent = parent
 
-        self.panelTitle = scrolled.ScrolledPanel(parent = self, id = wx.ID_ANY)
-        self.panelProj4string = scrolled.ScrolledPanel(parent = self, id = wx.ID_ANY)
-        self.panelProj = scrolled.ScrolledPanel(parent = self, id = wx.ID_ANY)
+        self.panelTitle = scrolled.ScrolledPanel(parent=self, id=wx.ID_ANY)
+        self.panelProj4string = scrolled.ScrolledPanel(
+            parent=self, id=wx.ID_ANY)
+        self.panelProj = scrolled.ScrolledPanel(parent=self, id=wx.ID_ANY)
 
         # labels
-        self.ldatabase    = self.MakeLabel()
-        self.llocation    = self.MakeLabel()
-        self.llocTitle    = self.MakeLabel(parent = self.panelTitle)
-        self.lprojection  = self.MakeLabel(parent = self.panelProj)
-        self.lproj4string = self.MakeLabel(parent = self.panelProj4string)
-        
+        self.ldatabase = self.MakeLabel()
+        self.llocation = self.MakeLabel()
+        self.llocTitle = self.MakeLabel(parent=self.panelTitle)
+        self.lprojection = self.MakeLabel(parent=self.panelProj)
+        self.lproj4string = self.MakeLabel(parent=self.panelProj4string)
+
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
-        
+
         # do sub-page layout
         self._doLayout()
-        
+
     def _doLayout(self):
         """Do page layout"""
 
         titleSizer = wx.BoxSizer(wx.VERTICAL)
-        titleSizer.Add(item = self.llocTitle, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL, border = 5)
-        self.panelTitle.SetSizer(titleSizer)        
-        
+        titleSizer.Add(item=self.llocTitle, proportion=1,
+                       flag=wx.EXPAND | wx.ALL, border=5)
+        self.panelTitle.SetSizer(titleSizer)
+
         projSizer = wx.BoxSizer(wx.VERTICAL)
-        projSizer.Add(item = self.lprojection, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL, border = 5)
-        self.panelProj.SetSizer(projSizer)        
-        
+        projSizer.Add(item=self.lprojection, proportion=1,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+        self.panelProj.SetSizer(projSizer)
+
         proj4stringSizer = wx.BoxSizer(wx.VERTICAL)
-        proj4stringSizer.Add(item = self.lproj4string, proportion = 1,
-                       flag = wx.EXPAND | wx.ALL, border = 5)
+        proj4stringSizer.Add(item=self.lproj4string, proportion=1,
+                             flag=wx.EXPAND | wx.ALL, border=5)
         self.panelProj4string.SetSizer(proj4stringSizer)
 
         self.panelProj4string.SetupScrolling()
-        self.panelProj.SetupScrolling(scroll_y = False)
-        self.panelTitle.SetupScrolling(scroll_y = False)
-
-        self.sizer.Add(item = self.MakeLabel(_("GRASS Database:")),
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (1, 0))
-        self.sizer.Add(item = self.ldatabase, 
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (1, 1))
-        self.sizer.Add(item = self.MakeLabel(_("Location Name:")),
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (2, 0))
-        self.sizer.Add(item = self.llocation,
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (2, 1))
-        self.sizer.Add(item = self.MakeLabel(_("Location Title:")),
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (3, 0))
-        self.sizer.Add(item = self.panelTitle,
-                       flag = wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
-                       border = 0, pos = (3, 1))
-        self.sizer.Add(item = self.MakeLabel(_("Projection:")),
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (4, 0))
-        self.sizer.Add(item = self.panelProj,
-                       flag = wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
-                       border = 0, pos = (4, 1))
-        self.sizer.Add(item = self.MakeLabel(_("PROJ.4 definition:\n (non-definitive)")),
-                       flag = wx.ALIGN_LEFT | wx.ALL,
-                       border = 5, pos = (5, 0))
-        self.sizer.Add(item = self.panelProj4string,
-                       flag = wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
-                       border = 0, pos = (5, 1))
+        self.panelProj.SetupScrolling(scroll_y=False)
+        self.panelTitle.SetupScrolling(scroll_y=False)
+
+        self.sizer.Add(item=self.MakeLabel(_("GRASS Database:")),
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(1, 0))
+        self.sizer.Add(item=self.ldatabase,
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(1, 1))
+        self.sizer.Add(item=self.MakeLabel(_("Location Name:")),
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(2, 0))
+        self.sizer.Add(item=self.llocation,
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(2, 1))
+        self.sizer.Add(item=self.MakeLabel(_("Location Title:")),
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(3, 0))
+        self.sizer.Add(item=self.panelTitle,
+                       flag=wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
+                       border=0, pos=(3, 1))
+        self.sizer.Add(item=self.MakeLabel(_("Projection:")),
+                       flag=wx.ALIGN_LEFT | wx.ALL,
+                       border=5, pos=(4, 0))
+        self.sizer.Add(item=self.panelProj,
+                       flag=wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
+                       border=0, pos=(4, 1))
+        self.sizer.Add(
+            item=self.MakeLabel(
+                _("PROJ.4 definition:\n (non-definitive)")),
+            flag=wx.ALIGN_LEFT | wx.ALL,
+            border=5,
+            pos=(
+                5,
+                0))
+        self.sizer.Add(item=self.panelProj4string,
+                       flag=wx.ALIGN_LEFT | wx.ALL | wx.EXPAND,
+                       border=0, pos=(5, 1))
         self.sizer.AddGrowableCol(1)
         self.sizer.AddGrowableRow(3, 1)
         self.sizer.AddGrowableRow(4, 1)
         self.sizer.AddGrowableRow(5, 5)
-   
+
     def OnEnterPage(self, event):
         """Insert values into text controls for summary of location
         creation options
@@ -1704,13 +2085,14 @@ class SummaryPage(TitledPage):
         database = self.parent.startpage.grassdatabase
         location = self.parent.startpage.location
         proj4string = self.parent.CreateProj4String()
+        iauproj4string = self.parent.iaupage.epsgparams
         epsgcode = self.parent.epsgpage.epsgcode
         datum = self.parent.datumpage.datum
         dtrans = self.parent.datum_trans
         global coordsys
 
-        #print coordsys,proj4string
-        if coordsys in ('proj', 'epsg', 'wkt', 'file'):
+        # print coordsys,proj4string
+        if coordsys in ('proj', 'epsg', 'iau', 'wkt', 'file'):
             extra_opts = {}
             extra_opts['location'] = 'location'
             extra_opts['getErrorMsg'] = True
@@ -1723,49 +2105,60 @@ class SummaryPage(TitledPage):
                     extra_opts['datum_trans'] = dtrans
 
                 ret, projlabel, err = RunCommand('g.proj',
-                                                 flags = 'jf',
-                                                 proj4 = proj4string,
+                                                 flags='jf',
+                                                 proj4=proj4string,
                                                  **extra_opts)
-            elif coordsys == 'epsg':
+            elif coordsys == 'iau':
+                addl_opts = {}
+                if len(datum) > 0:
+                    extra_opts['datum'] = '%s' % datum
+                    extra_opts['datum_trans'] = dtrans
+
                 ret, projlabel, err = RunCommand('g.proj',
-                                                 flags = 'jft',
-                                                 epsg = epsgcode,
-                                                 datum_trans = dtrans,
+                                                 flags='jf',
+                                                 proj4=iauproj4string,
                                                  **extra_opts)
-            elif coordsys == 'file':
+            elif coordsys == 'epsg':
                 ret, projlabel, err = RunCommand('g.proj',
-                                                 flags = 'jft',
-                                                 georef = self.parent.filepage.georeffile,
+                                                 flags='jft',
+                                                 epsg=epsgcode,
+                                                 datum_trans=dtrans,
                                                  **extra_opts)
+            elif coordsys == 'file':
+                ret, projlabel, err = RunCommand(
+                    'g.proj', flags='jft',
+                    georef=self.parent.filepage.georeffile, **extra_opts)
             elif coordsys == 'wkt':
-                ret, projlabel, err = RunCommand('g.proj',
-                                                 flags = 'jft',
-                                                 wkt = self.parent.wktpage.wktfile,
-                                                 **extra_opts)
+                ret, projlabel, err = RunCommand(
+                    'g.proj', flags='jft', wkt=self.parent.wktpage.wktfile, **extra_opts)
 
             finishButton = wx.FindWindowById(wx.ID_FORWARD)
             if ret == 0:
                 if datum != '':
                     projlabel = projlabel + '+datum=%s' % datum
-                self.lproj4string.SetLabel(projlabel.replace(' +', os.linesep + '+'))
+                self.lproj4string.SetLabel(
+                    projlabel.replace(' +', os.linesep + '+'))
                 finishButton.Enable(True)
             else:
-                GError(err, parent = self)
+                GError(err, parent=self)
                 self.lproj4string.SetLabel('')
                 finishButton.Enable(False)
-        
+
         projdesc = self.parent.projpage.projdesc
         ellipsedesc = self.parent.ellipsepage.ellipsedesc
         datumdesc = self.parent.datumpage.datumdesc
-        #print projdesc,ellipsedesc,datumdesc
+        # print projdesc,ellipsedesc,datumdesc
         self.ldatabase.SetLabel(database)
         self.llocation.SetLabel(location)
         self.llocTitle.SetLabel(self.parent.startpage.locTitle)
-        
+
         label = ''
         if coordsys == 'epsg':
             label = 'EPSG code %s (%s)' % (self.parent.epsgpage.epsgcode,
                                            self.parent.epsgpage.epsgdesc)
+        elif coordsys == 'iau':
+            label = 'IAU code %s (%s)' % (self.parent.iaupage.epsgcode,
+                                          self.parent.iaupage.epsgdesc)
         elif coordsys == 'file':
             label = 'matches file %s' % self.parent.filepage.georeffile
 
@@ -1782,17 +2175,24 @@ class SummaryPage(TitledPage):
         elif coordsys == 'custom':
             label = _("custom")
             combo_str = self.parent.custompage.customstring + \
-                        self.parent.custompage.custom_dtrans_string
-            self.lproj4string.SetLabel(('%s' % combo_str.replace(' +', os.linesep + '+')))
+                self.parent.custompage.custom_dtrans_string
+            self.lproj4string.SetLabel(
+                ('%s' %
+                 combo_str.replace(
+                     ' +',
+                     os.linesep +
+                     '+')))
 
         self.lprojection.SetLabel(label)
-        
+
     def OnFinish(self, event):
-        dlg = wx.MessageDialog(parent = self.wizard,
-                               message = _("Do you want to create GRASS location <%s>?") % location,
-                               caption = _("Create new location?"),
-                               style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
-        
+        dlg = wx.MessageDialog(
+            parent=self.wizard,
+            message=_("Do you want to create GRASS location <%s>?") %
+            location,
+            caption=_("Create new location?"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+
         if dlg.ShowModal() == wx.ID_NO:
             dlg.Destroy()
             event.Veto()
@@ -1800,27 +2200,29 @@ class SummaryPage(TitledPage):
             dlg.Destroy()
             event.Skip()
 
+
 class LocationWizard(wx.Object):
     """Start wizard here and finish wizard here
     """
+
     def __init__(self, parent, grassdatabase):
         self.__cleanUp()
-        
+
         global coordsys
         self.parent = parent
-        
+
         #
         # define wizard image
         #
         imagePath = os.path.join(globalvar.IMGDIR, "loc_wizard_qgis.png")
         wizbmp = wx.Image(imagePath, wx.BITMAP_TYPE_PNG)
         wizbmp = wizbmp.ConvertToBitmap()
-        
+
         #
         # get georeferencing information from tables in $GISBASE/etc
         #
         self.__readData()
-        
+
         #
         # datum transform number and list of datum transforms
         #
@@ -1833,17 +2235,20 @@ class LocationWizard(wx.Object):
         #
         # define wizard pages
         #
-        self.wizard = WizardWithHelpButton(parent, id = wx.ID_ANY,
-                                           title = _("Define new GRASS Location"),
-                                           bitmap = wizbmp)
+        self.wizard = WizardWithHelpButton(
+            parent,
+            id=wx.ID_ANY,
+            title=_("Define new GRASS Location"),
+            bitmap=wizbmp)
         self.wizard.Bind(wiz.EVT_WIZARD_HELP, self.OnHelp)
 
         self.startpage = DatabasePage(self.wizard, self, grassdatabase)
         self.csystemspage = CoordinateSystemPage(self.wizard, self)
         self.projpage = ProjectionsPage(self.wizard, self)
         self.datumpage = DatumPage(self.wizard, self)
-        self.paramspage = ProjParamsPage(self.wizard,self)
+        self.paramspage = ProjParamsPage(self.wizard, self)
         self.epsgpage = EPSGPage(self.wizard, self)
+        self.iaupage = IAUPage(self.wizard, self)
         self.filepage = GeoreferencedFilePage(self.wizard, self)
         self.wktpage = WKTPage(self.wizard, self)
         self.ellipsepage = EllipsePage(self.wizard, self)
@@ -1874,6 +2279,9 @@ class LocationWizard(wx.Object):
         self.epsgpage.SetPrev(self.csystemspage)
         self.epsgpage.SetNext(self.sumpage)
 
+        self.iaupage.SetPrev(self.csystemspage)
+        self.iaupage.SetNext(self.sumpage)
+
         self.filepage.SetPrev(self.csystemspage)
         self.filepage.SetNext(self.sumpage)
 
@@ -1884,7 +2292,7 @@ class LocationWizard(wx.Object):
         self.custompage.SetNext(self.sumpage)
 
         self.sumpage.SetPrev(self.csystemspage)
-        
+
         #
         # do pages layout
         #
@@ -1894,6 +2302,7 @@ class LocationWizard(wx.Object):
         self.datumpage.DoLayout()
         self.paramspage.DoLayout()
         self.epsgpage.DoLayout()
+        self.iaupage.DoLayout()
         self.filepage.DoLayout()
         self.wktpage.DoLayout()
         self.ellipsepage.DoLayout()
@@ -1902,11 +2311,11 @@ class LocationWizard(wx.Object):
         self.wizard.FitToPage(self.datumpage)
         size = self.wizard.GetPageSize()
         self.wizard.SetPageSize((size[0], size[1] + 75))
-        
+
         # new location created?
-        self.location = None 
+        self.location = None
         success = False
-        
+
         # location created in different GIS database?
         self.altdb = False
 
@@ -1922,23 +2331,23 @@ class LocationWizard(wx.Object):
                 self.georeffile = self.filepage.georeffile
                 # FIXME here was code for setting default region, what for is this if:
                 # if self.altdb == False:
-                    
-            else: # -> error
+
+            else:  # -> error
                 self.wizard.Destroy()
-                GError(parent = self.parent,
-                       message = "%s" % _("Unable to create new location. "
-                                          "Location <%(loc)s> not created.\n\n"
-                                          "Details: %(err)s") % \
-                           { 'loc' : self.startpage.location,
-                             'err' : msg })
-        else: # -> canceled
+                GError(parent=self.parent,
+                       message="%s" % _("Unable to create new location. "
+                                        "Location <%(loc)s> not created.\n\n"
+                                        "Details: %(err)s") %
+                       {'loc': self.startpage.location,
+                        'err': msg})
+        else:  # -> canceled
             self.wizard.Destroy()
-            GMessage(parent = self.parent,
-                     message = _("Location wizard canceled. "
-                                 "Location not created."))
-            
+            GMessage(parent=self.parent,
+                     message=_("Location wizard canceled. "
+                               "Location not created."))
+
         self.__cleanUp()
-        
+
     def __cleanUp(self):
         global coordsys
         global north
@@ -1948,7 +2357,7 @@ class LocationWizard(wx.Object):
         global resolution
         global wizerror
         global translist
-        
+
         coordsys = None
         north = None
         south = None
@@ -1971,12 +2380,15 @@ class LocationWizard(wx.Object):
                 paramslist = params.split(';')
                 plist = []
                 for p in paramslist:
-                    if p == '': continue
+                    if p == '':
+                        continue
                     p1, pdefault = p.split(',')
                     pterm, pask = p1.split('=')
                     p = [pterm.strip(), pask.strip(), pdefault.strip()]
                     plist.append(p)
-                self.projections[proj.lower().strip()] = (projdesc.strip(), plist)
+                self.projections[
+                    proj.lower().strip()] = (
+                    projdesc.strip(), plist)
                 self.projdesc[proj.lower().strip()] = projdesc.strip()
             except:
                 continue
@@ -1997,7 +2409,9 @@ class LocationWizard(wx.Object):
             datumdesc = datumdesc.strip('"')
             paramlist = params.split()
             ellipsoid = paramlist.pop(0)
-            self.datums[datum] = (ellipsoid, datumdesc.replace('_', ' '), paramlist)
+            self.datums[datum] = (
+                ellipsoid, datumdesc.replace(
+                    '_', ' '), paramlist)
         f.close()
 
         # read Earth-based ellipsiod definitions
@@ -2017,7 +2431,12 @@ class LocationWizard(wx.Object):
         f.close()
 
         # read Planetary ellipsiod definitions
-        f = open(os.path.join(globalvar.ETCDIR, "proj", "ellipse.table.solar.system"), "r")
+        f = open(
+            os.path.join(
+                globalvar.ETCDIR,
+                "proj",
+                "ellipse.table.solar.system"),
+            "r")
         self.planetary_ellipsoids = {}
         for line in f.readlines():
             line = line.expandtabs(1)
@@ -2052,115 +2471,127 @@ class LocationWizard(wx.Object):
         """
         database = self.startpage.grassdatabase
         location = self.startpage.location
-        
+
         # location already exists?
-        if os.path.isdir(os.path.join(database,location)):
-            GError(parent = self.wizard,
-                   message = "%s <%s>: %s" % \
-                       (_("Unable to create new location"),
-                        os.path.join(database, location),
-                        _("Location already exists in GRASS Database.")))
+        if os.path.isdir(os.path.join(database, location)):
+            GError(parent=self.wizard,
+                   message="%s <%s>: %s" %
+                   (_("Unable to create new location"),
+                    os.path.join(database, location),
+                    _("Location already exists in GRASS Database.")))
             return None
-        
+
         # current GISDbase or a new one?
-        current_gdb = grass.gisenv()['GISDBASE']
+        current_gdb = grass.gisenv()['GISDBASE'].decode(sys.stdin.encoding)
         if current_gdb != database:
             # change to new GISDbase or create new one
             if os.path.isdir(database) != True:
                 # create new directory
                 os.mkdir(database)
-            
+
             # change to new GISDbase directory
             RunCommand('g.gisenv',
-                       parent = self.wizard,
-                       set = 'GISDBASE=%s' % database)
-            
-            wx.MessageBox(parent = self.wizard,
-                          message = _("Location <%(loc)s> will be created "
-                                    "in GIS data directory <%(dir)s>. "
-                                    "You will need to change the default GIS "
-                                    "data directory in the GRASS startup screen.") % \
-                              { 'loc' : location, 'dir' : database},
-                          caption = _("New GIS data directory"), 
-                          style = wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
-            
+                       parent=self.wizard,
+                       set='GISDBASE=%s' % database)
+
+            wx.MessageBox(
+                parent=self.wizard,
+                message=_(
+                    "Location <%(loc)s> will be created "
+                    "in GIS data directory <%(dir)s>. "
+                    "You will need to change the default GIS "
+                    "data directory in the GRASS startup screen.") %
+                {'loc': location, 'dir': database},
+                caption=_("New GIS data directory"),
+                style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
+
             # location created in alternate GISDbase
             self.altdb = True
-        
+
         global coordsys
         try:
             if coordsys == "xy":
-                grass.create_location(dbase = self.startpage.grassdatabase,
-                                      location = self.startpage.location,
-                                      desc = self.startpage.locTitle)
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      desc=self.startpage.locTitle)
             elif coordsys == "proj":
-                grass.create_location(dbase = self.startpage.grassdatabase,
-                                      location = self.startpage.location,
-                                      proj4 = self.CreateProj4String(),
-                                      datum = self.datumpage.datum,
-                                      datum_trans = self.datum_trans,
-                                      desc = self.startpage.locTitle)
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      proj4=self.CreateProj4String(),
+                                      datum=self.datumpage.datum,
+                                      datum_trans=self.datum_trans,
+                                      desc=self.startpage.locTitle)
             elif coordsys == 'custom':
                 addl_opts = {}
                 if self.datum_trans is not None:
                     addl_opts['datum_trans'] = self.datum_trans
 
-                grass.create_location(dbase = self.startpage.grassdatabase,
-                                      location = self.startpage.location,
-                                      proj4 = self.custompage.customstring,
-                                      desc = self.startpage.locTitle,
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      proj4=self.custompage.customstring,
+                                      desc=self.startpage.locTitle,
                                       **addl_opts)
             elif coordsys == "epsg":
                 if not self.epsgpage.epsgcode:
                     return _('EPSG code missing.')
-                
-                grass.create_location(dbase = self.startpage.grassdatabase,
-                                      location = self.startpage.location,
-                                      epsg = self.epsgpage.epsgcode,
-                                      datum = self.datumpage.datum,
-                                      datum_trans = self.datum_trans,
-                                      desc = self.startpage.locTitle)
+
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      epsg=self.epsgpage.epsgcode,
+                                      datum=self.datumpage.datum,
+                                      datum_trans=self.datum_trans,
+                                      desc=self.startpage.locTitle)
+            elif coordsys == "iau":
+                if not self.iaupage.epsgcode:
+                    return _('IAU code missing.')
+
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      proj4=self.iaupage.epsgparams,
+                                      datum=self.datumpage.datum,
+                                      datum_trans=self.datum_trans,
+                                      desc=self.startpage.locTitle)
             elif coordsys == "file":
                 if not self.filepage.georeffile or \
                         not os.path.isfile(self.filepage.georeffile):
                     return _("File <%s> not found." % self.filepage.georeffile)
-                
-                grass.create_location(dbase = self.startpage.grassdatabase,
-                                      location = self.startpage.location,
-                                      filename = self.filepage.georeffile,
-                                      desc = self.startpage.locTitle)
+
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      filename=self.filepage.georeffile,
+                                      desc=self.startpage.locTitle)
             elif coordsys == "wkt":
                 if not self.wktpage.wktfile or \
                         not os.path.isfile(self.wktpage.wktfile):
                     return _("File <%s> not found." % self.wktpage.wktfile)
-                
-                grass.create_location(dbase = self.startpage.grassdatabase,
-                                      location = self.startpage.location,
-                                      wkt = self.wktpage.wktfile,
-                                      desc = self.startpage.locTitle)
-        
+
+                grass.create_location(dbase=self.startpage.grassdatabase,
+                                      location=self.startpage.location,
+                                      wkt=self.wktpage.wktfile,
+                                      desc=self.startpage.locTitle)
+
         except grass.ScriptError as e:
             return e.value
-        
+
         return None
-    
+
     def CreateProj4String(self):
         """Constract PROJ.4 string"""
         location = self.startpage.location
         proj = self.projpage.p4proj
         projdesc = self.projpage.projdesc
         proj4params = self.paramspage.p4projparams
-                
+
 #        datum = self.datumpage.datum
         if self.datumpage.datumdesc:
-            datumdesc = self.datumpage.datumdesc +' - ' + self.datumpage.ellipse
+            datumdesc = self.datumpage.datumdesc + ' - ' + self.datumpage.ellipse
         else:
             datumdesc = ''
-        datumparams = self.datumpage.datumparams        
+        datumparams = self.datumpage.datumparams
         ellipse = self.ellipsepage.ellipse
         ellipsedesc = self.ellipsepage.ellipsedesc
         ellipseparams = self.ellipsepage.ellipseparams
-        
+
         #
         # creating PROJ.4 string
         #
@@ -2175,11 +2606,11 @@ class LocationWizard(wx.Object):
             else:
                 item = ' +' + item
             proj4string = '%s %s' % (proj4string, item)
-        
+
         # set datum transform parameters if relevant
         if datumparams:
             for item in datumparams:
-                proj4string = '%s +%s' % (proj4string,item)
+                proj4string = '%s +%s' % (proj4string, item)
 
         proj4string = '%s +no_defs' % proj4string
 
@@ -2189,11 +2620,13 @@ class LocationWizard(wx.Object):
         """'Help' button clicked"""
 
         # help text in lib/init/helptext.html
-        RunCommand('g.manual', entry = 'helptext')
+        RunCommand('g.manual', entry='helptext')
+
 
 class WizardWithHelpButton(wiz.Wizard):
+
     def __init__(self, parent, id, title, bitmap):
         pre = wiz.PreWizard()
         pre.SetExtraStyle(wx.wizard.WIZARD_EX_HELPBUTTON)
-        pre.Create(parent = parent, id = id, title = title, bitmap = bitmap)
+        pre.Create(parent=parent, id=id, title=title, bitmap=bitmap)
         self.PostCreate(pre)
diff --git a/gui/wxpython/mapdisp/__init__.py b/gui/wxpython/mapdisp/__init__.py
index 7fcfa78..9898a7c 100644
--- a/gui/wxpython/mapdisp/__init__.py
+++ b/gui/wxpython/mapdisp/__init__.py
@@ -6,4 +6,4 @@ all = [
     'toolbars',
     'frame',
     'gprint',
-    ]
+]
diff --git a/gui/wxpython/mapdisp/frame.py b/gui/wxpython/mapdisp/frame.py
index fa8413a..b76d078 100644
--- a/gui/wxpython/mapdisp/frame.py
+++ b/gui/wxpython/mapdisp/frame.py
@@ -9,7 +9,7 @@ Can be used either from Layer Manager or as d.mon backend.
 Classes:
  - mapdisp::MapFrame
 
-(C) 2006-2014 by the GRASS Development Team
+(C) 2006-2016 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -30,29 +30,30 @@ from core import globalvar
 import wx
 import wx.aui
 
-from core.render        import Map
-from mapdisp.toolbars   import MapToolbar, NvizIcons
-from mapdisp.gprint     import PrintOptions
-from core.gcmd          import GError, GMessage, RunCommand
-from dbmgr.dialogs      import DisplayAttributesDialog
-from core.utils         import ListOfCatsToRange, GetLayerNameFromCmd, _
+from core.render import Map
+from mapdisp.toolbars import MapToolbar, NvizIcons
+from mapdisp.gprint import PrintOptions
+from core.gcmd import GError, GMessage, RunCommand
+from dbmgr.dialogs import DisplayAttributesDialog
+from core.utils import ListOfCatsToRange, GetLayerNameFromCmd, _
 from gui_core.dialogs import GetImageHandlers, ImageSizeDialog
-from core.debug         import Debug
-from core.settings      import UserSettings
-from gui_core.mapdisp   import SingleMapFrame
+from core.debug import Debug
+from core.settings import UserSettings
+from gui_core.mapdisp import SingleMapFrame
 from mapwin.base import MapWindowProperties
-from gui_core.query     import QueryDialog, PrepareQueryResults
+from gui_core.query import QueryDialog, PrepareQueryResults
 from mapwin.buffered import BufferedMapWindow
-from mapwin.decorations import TextLayerDialog, \
-    LegendController, BarscaleController, ArrowController
-from modules.histogram  import HistogramFrame
-from wxplot.histogram   import HistogramPlotFrame
-from wxplot.profile     import ProfileFrame
-from wxplot.scatter     import ScatterFrame
+from mapwin.decorations import LegendController, BarscaleController, \
+    ArrowController, DtextController, LegendVectController
+from modules.histogram import HistogramFrame
+from wxplot.histogram import HistogramPlotFrame
+from wxplot.profile import ProfileFrame
+from wxplot.scatter import ScatterFrame
 from mapwin.analysis import ProfileController, MeasureDistanceController, \
     MeasureAreaController
 from gui_core.forms import GUI
 from core.giface import Notification
+from gui_core.vselect import VectorSelectBase, VectorSelectHighlighter
 
 from mapdisp import statusbar as sb
 
@@ -65,25 +66,28 @@ class MapFrame(SingleMapFrame):
     """Main frame for map display window. Drawing takes place in
     child double buffered drawing window.
     """
-    def __init__(self, parent, giface, title = _("GRASS GIS - Map display"),
-                 toolbars = ["map"], tree = None, notebook = None, lmgr = None,
-                 page = None, Map = Map(), auimgr = None, name = 'MapWindow', **kwargs):
+
+    def __init__(self, parent, giface, title=_("GRASS GIS - Map display"),
+                 toolbars=["map"], statusbar=True,
+                 tree=None, notebook=None, lmgr=None,
+                 page=None, Map=None, auimgr=None, name='MapWindow', **kwargs):
         """Main map display window with toolbars, statusbar and
         2D map window, 3D map window and digitizer.
-        
+
         :param toolbars: array of activated toolbars, e.g. ['map', 'digit']
+        :param statusbar: True to add statusbar
         :param tree: reference to layer tree
         :param notebook: control book ID in Layer Manager
         :param lmgr: Layer Manager
         :param page: notebook page with layer tree
         :param map: instance of render.Map
-        :param auimgs: AUI manager
+        :param auimgr: AUI manager
         :param name: frame name
         :param kwargs: wx.Frame attributes
         """
-        SingleMapFrame.__init__(self, parent = parent, title = title,
-                              Map = Map, auimgr = auimgr, name = name, **kwargs)
-        
+        SingleMapFrame.__init__(self, parent=parent, title=title,
+                                Map=Map, auimgr=auimgr, name=name, **kwargs)
+
         self._giface = giface
         # Layer Manager object
         # need by GLWindow (a lot), VDigitWindow (a little bit)
@@ -118,51 +122,13 @@ class MapFrame(SingleMapFrame):
         #
         # Add statusbar
         #
-        
-        # items for choice
-        self.statusbarItems = [sb.SbCoordinates,
-                               sb.SbRegionExtent,
-                               sb.SbCompRegionExtent,
-                               sb.SbShowRegion,
-                               sb.SbAlignExtent,
-                               sb.SbResolution,
-                               sb.SbDisplayGeometry,
-                               sb.SbMapScale,
-                               sb.SbGoTo,
-                               sb.SbProjection]
-                            
-        self.statusbarItemsHiddenInNviz = (sb.SbAlignExtent,
-                                           sb.SbDisplayGeometry,
-                                           sb.SbShowRegion,
-                                           sb.SbResolution,
-                                           sb.SbMapScale)
-        
-        # create statusbar and its manager
-        statusbar = self.CreateStatusBar(number = 4, style = 0)
-        if globalvar.wxPython3:
-            statusbar.SetMinHeight(24)
-        statusbar.SetStatusWidths([-5, -2, -1, -1])
-        self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
-        
-        # fill statusbar manager
-        self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
-        self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
-        sbRender = sb.SbRender(self, statusbar = statusbar, position = 3)
-        self.statusbarManager.AddStatusbarItem(sbRender)
-        
-        self.statusbarManager.Update()
-        
-        #
-        self.Map.updateProgress.connect(self.statusbarManager.SetProgress)
+        self.statusbarManager = None
+        if statusbar:
+            self.CreateStatusbar()
 
         # init decoration objects
         self.decorations = {}
-        self.legend = LegendController(self.Map, self._giface)
-        self.barscale = BarscaleController(self.Map, self._giface)
-        self.arrow = ArrowController(self.Map, self._giface)
-        self.decorations[self.legend.id] = self.legend
-        self.decorations[self.barscale.id] = self.barscale
-        self.decorations[self.arrow.id] = self.arrow
+        self._decorationWindows = {}
 
         self.mapWindowProperties.autoRenderChanged.connect(
             lambda value:
@@ -171,16 +137,12 @@ class MapFrame(SingleMapFrame):
         #
         # Init map display (buffered DC & set default cursor)
         #
-        self.MapWindow2D = BufferedMapWindow(self, giface = self._giface,
-                                             Map=self.Map,
-                                             properties=self.mapWindowProperties,
-                                             overlays=self.decorations)
+        self.MapWindow2D = BufferedMapWindow(
+            self, giface=self._giface, Map=self.Map,
+            properties=self.mapWindowProperties, overlays=self.decorations)
         self.MapWindow2D.mapQueried.connect(self.Query)
         self.MapWindow2D.overlayActivated.connect(self._activateOverlay)
-        self.MapWindow2D.overlayHidden.connect(self._hideOverlay)
-        self.MapWindow2D.overlayHidden.connect(self._hideOverlay)
-        for overlay in (self.legend, self.barscale, self.arrow):
-            overlay.overlayChanged.connect(lambda: self.MapWindow2D.UpdateMap(render=False, renderVector=False))
+        self.MapWindow2D.overlayRemoved.connect(self.RemoveOverlay)
         self._setUpMapWindow(self.MapWindow2D)
 
         self.MapWindow2D.mouseHandlerUnregistered.connect(self.ResetPointer)
@@ -195,25 +157,22 @@ class MapFrame(SingleMapFrame):
         # used by vector digitizer
         self.MapWindowVDigit = None
         # used by Nviz (3D display mode)
-        self.MapWindow3D = None 
+        self.MapWindow3D = None
 
-        #
-        # initialize region values
-        #
-        self._initMap(Map = self.Map) 
+        if 'map' in self.toolbars:
+            self.toolbars['map'].SelectDefault()
 
-        self.toolbars['map'].SelectDefault()
         #
         # Bind various events
         #
-        self.Bind(wx.EVT_CLOSE,    self.OnCloseWindow)
-        self.Bind(wx.EVT_SIZE,     self.OnSize)
-        
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+
         #
         # Update fancy gui style
         #
         self._mgr.AddPane(self.MapWindow, wx.aui.AuiPaneInfo().CentrePane().
-                          Dockable(False).BestSize((-1,-1)).Name('2d').
+                          Dockable(False).BestSize((-1, -1)).Name('2d').
                           CloseButton(False).DestroyOnClose(True).
                           Layer(0))
         self._mgr.Update()
@@ -231,13 +190,63 @@ class MapFrame(SingleMapFrame):
         self.dialogs['category'] = None
         self.dialogs['vnet'] = None
         self.dialogs['query'] = None
+        self.dialogs['vselect'] = None
 
         # initialize layers to query (d.what.vect/rast)
         self._vectQueryLayers = []
         self._rastQueryLayers = []
+        # initialize highlighter for vector features
+        self._highlighter_layer = None
 
         self.measureController = None
 
+        self._resize()
+
+    def CreateStatusbar(self):
+        if self.statusbarManager:
+            return
+
+        # items for choice
+        self.statusbarItems = [sb.SbCoordinates,
+                               sb.SbRegionExtent,
+                               sb.SbCompRegionExtent,
+                               sb.SbShowRegion,
+                               sb.SbAlignExtent,
+                               sb.SbResolution,
+                               sb.SbDisplayGeometry,
+                               sb.SbMapScale,
+                               sb.SbGoTo,
+                               sb.SbProjection]
+
+        self.statusbarItemsHiddenInNviz = (sb.SbAlignExtent,
+                                           sb.SbDisplayGeometry,
+                                           sb.SbShowRegion,
+                                           sb.SbResolution,
+                                           sb.SbMapScale)
+
+        # create statusbar and its manager
+        statusbar = self.CreateStatusBar(number=4, style=0)
+        if globalvar.wxPython3:
+            statusbar.SetMinHeight(24)
+        statusbar.SetStatusWidths([-5, -2, -1, -1])
+        self.statusbarManager = sb.SbManager(
+            mapframe=self, statusbar=statusbar)
+
+        # fill statusbar manager
+        self.statusbarManager.AddStatusbarItemsByClass(
+            self.statusbarItems, mapframe=self, statusbar=statusbar)
+        self.statusbarManager.AddStatusbarItem(
+            sb.SbMask(self, statusbar=statusbar, position=2))
+        sbRender = sb.SbRender(self, statusbar=statusbar, position=3)
+        self.statusbarManager.AddStatusbarItem(sbRender)
+
+        self.statusbarManager.Update()
+
+        #
+        self.Map.GetRenderMgr().updateProgress.connect(self.statusbarManager.SetProgress)
+        self.Map.GetRenderMgr().renderingFailed.connect(lambda cmd, error: self._giface.WriteError(
+            _("Failed to run command '{command}'. Details:\n{error}").format(command=' '.join(cmd), error=error)))
+
     def GetMapWindow(self):
         return self.MapWindow
 
@@ -250,11 +259,11 @@ class MapFrame(SingleMapFrame):
             grassVersion = "?"
 
         gisenv = grass.gisenv()
-        title = _("GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s") % \
-            {'version': grassVersion,
-             'id': str(displayId),
-             'loc': gisenv["LOCATION_NAME"],
-             'mapset': gisenv["MAPSET"]}
+        title = _("GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s") % {
+            'version': grassVersion,
+            'id': str(displayId),
+            'loc': gisenv["LOCATION_NAME"],
+            'mapset': gisenv["MAPSET"]}
 
         self.SetTitle(title)
 
@@ -263,48 +272,48 @@ class MapFrame(SingleMapFrame):
         """
         from vdigit.main import haveVDigit, VDigit
         from vdigit.toolbars import VDigitToolbar
-        
+
         if not haveVDigit:
             from vdigit import errorMsg
-            
+
             self.toolbars['map'].combo.SetValue(_("2D view"))
-            
+
             GError(_("Unable to start wxGUI vector digitizer.\n"
-                     "Details: %s") % errorMsg, parent = self)
+                     "Details: %s") % errorMsg, parent=self)
             return
 
         if not self.MapWindowVDigit:
             from vdigit.mapwindow import VDigitWindow
-            self.MapWindowVDigit = VDigitWindow(parent=self, giface=self._giface,
-                                                properties=self.mapWindowProperties,
-                                                Map=self.Map, tree=self.tree,
-                                                lmgr=self._layerManager,
-                                                overlays=self.decorations)
+            self.MapWindowVDigit = VDigitWindow(
+                parent=self, giface=self._giface,
+                properties=self.mapWindowProperties, Map=self.Map,
+                tree=self.tree, lmgr=self._layerManager,
+                overlays=self.decorations)
             self._setUpMapWindow(self.MapWindowVDigit)
             self.MapWindowVDigit.digitizingInfo.connect(
                 lambda text:
                 self.statusbarManager.statusbarItems['coordinates'].SetAdditionalInfo(text))
             self.MapWindowVDigit.digitizingInfoUnavailable.connect(
-                lambda:
-                self.statusbarManager.statusbarItems['coordinates'].SetAdditionalInfo(None))
+                lambda: self.statusbarManager.statusbarItems['coordinates'].SetAdditionalInfo(None))
             self.MapWindowVDigit.Show()
-            self._mgr.AddPane(self.MapWindowVDigit, wx.aui.AuiPaneInfo().CentrePane().
-                          Dockable(False).BestSize((-1,-1)).Name('vdigit').
-                          CloseButton(False).DestroyOnClose(True).
-                          Layer(0))
-        
+            self._mgr.AddPane(
+                self.MapWindowVDigit, wx.aui.AuiPaneInfo().CentrePane(). Dockable(False).BestSize(
+                    (-1, -1)).Name('vdigit'). CloseButton(False).DestroyOnClose(True). Layer(0))
+
         self._switchMapWindow(self.MapWindowVDigit)
-        
+
         if self._mgr.GetPane('2d').IsShown():
             self._mgr.GetPane('2d').Hide()
         elif self._mgr.GetPane('3d').IsShown():
             self._mgr.GetPane('3d').Hide()
         self._mgr.GetPane('vdigit').Show()
-        self.toolbars['vdigit'] = VDigitToolbar(parent=self, toolSwitcher=self._toolSwitcher,
-                                                MapWindow = self.MapWindow,
-                                                digitClass=VDigit, giface=self._giface)
+        if 'vdigit' not in self.toolbars:
+            self.toolbars['vdigit'] = VDigitToolbar(
+                parent=self, toolSwitcher=self._toolSwitcher,
+                MapWindow=self.MapWindow, digitClass=VDigit,
+                giface=self._giface)
         self.MapWindowVDigit.SetToolbar(self.toolbars['vdigit'])
-        
+
         self._mgr.AddPane(self.toolbars['vdigit'],
                           wx.aui.AuiPaneInfo().
                           Name("vdigittoolbar").Caption(_("Vector Digitizer Toolbar")).
@@ -315,52 +324,70 @@ class MapFrame(SingleMapFrame):
                           BestSize((self.toolbars['vdigit'].GetBestSize())))
         # change mouse to draw digitized line
         self.MapWindow.mouse['box'] = "point"
-        self.MapWindow.zoomtype     = 0
-        self.MapWindow.pen          = wx.Pen(colour = 'red',   width = 2, style = wx.SOLID)
-        self.MapWindow.polypen      = wx.Pen(colour = 'green', width = 2, style = wx.SOLID)
+        self.MapWindow.zoomtype = 0
+        self.MapWindow.pen = wx.Pen(colour='red', width=2, style=wx.SOLID)
+        self.MapWindow.polypen = wx.Pen(
+            colour='green', width=2, style=wx.SOLID)
 
     def AddNviz(self):
         """Add 3D view mode window
         """
         from nviz.main import haveNviz, GLWindow, errorMsg
-        
+
         # check for GLCanvas and OpenGL
         if not haveNviz:
             self.toolbars['map'].combo.SetValue(_("2D view"))
-            GError(parent = self,
-                   message = _("Unable to switch to 3D display mode.\nThe Nviz python extension "
-                               "was not found or loaded properly.\n"
-                               "Switching back to 2D display mode.\n\nDetails: %s" % errorMsg))
+            GError(
+                parent=self, message=_(
+                    "Unable to switch to 3D display mode.\nThe Nviz python extension "
+                    "was not found or loaded properly.\n"
+                    "Switching back to 2D display mode.\n\nDetails: %s" %
+                    errorMsg))
             return
 
         # here was disabling 3D for other displays, now done on starting3dMode
 
         self.toolbars['map'].Enable2D(False)
         # add rotate tool to map toolbar
-        self.toolbars['map'].InsertTool((('rotate', NvizIcons['rotate'],
-                                          self.OnRotate, wx.ITEM_CHECK, 7),)) # 7 is position
-        self._toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self.toolbars['map'],
-                                          tool=self.toolbars['map'].rotate)
+        self.toolbars['map'].InsertTool(
+            (('rotate',
+              NvizIcons['rotate'],
+              self.OnRotate,
+              wx.ITEM_CHECK,
+              7),
+             ))  # 7 is position
+        self._toolSwitcher.AddToolToGroup(
+            group='mouseUse', toolbar=self.toolbars['map'],
+            tool=self.toolbars['map'].rotate)
         self.toolbars['map'].InsertTool((('flyThrough', NvizIcons['flyThrough'],
                                           self.OnFlyThrough, wx.ITEM_CHECK, 8),))
-        self._toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self.toolbars['map'],
-                                          tool=self.toolbars['map'].flyThrough)
-        self.toolbars['map'].ChangeToolsDesc(mode2d = False)
+        self._toolSwitcher.AddToolToGroup(
+            group='mouseUse', toolbar=self.toolbars['map'],
+            tool=self.toolbars['map'].flyThrough)
         # update status bar
-        
-        self.statusbarManager.HideStatusbarChoiceItemsByClass(self.statusbarItemsHiddenInNviz)
+
+        self.statusbarManager.HideStatusbarChoiceItemsByClass(
+            self.statusbarItemsHiddenInNviz)
         self.statusbarManager.SetMode(0)
-        
+
         # erase map window
         self.MapWindow.EraseMap()
-        
-        self._giface.WriteCmdLog(_("Starting 3D view mode..."), notification=Notification.HIGHLIGHT)
+
+        self._giface.WriteCmdLog(
+            _("Starting 3D view mode..."),
+            notification=Notification.HIGHLIGHT)
         self.SetStatusText(_("Please wait, loading data..."), 0)
-        
+
         # create GL window
         if not self.MapWindow3D:
-            self.MapWindow3D = GLWindow(self, giface = self._giface, id = wx.ID_ANY, frame = self,
-                                        Map = self.Map, tree = self.tree, lmgr = self._layerManager)
+            self.MapWindow3D = GLWindow(
+                self,
+                giface=self._giface,
+                id=wx.ID_ANY,
+                frame=self,
+                Map=self.Map,
+                tree=self.tree,
+                lmgr=self._layerManager)
             self._setUpMapWindow(self.MapWindow3D)
             self.MapWindow3D.mapQueried.connect(self.Query)
             self._switchMapWindow(self.MapWindow3D)
@@ -371,23 +398,22 @@ class MapFrame(SingleMapFrame):
 
             # switch from MapWindow to MapWindowGL
             self._mgr.GetPane('2d').Hide()
-            self._mgr.AddPane(self.MapWindow3D, wx.aui.AuiPaneInfo().CentrePane().
-                              Dockable(False).BestSize((-1,-1)).Name('3d').
-                              CloseButton(False).DestroyOnClose(True).
-                              Layer(0))
-            
+            self._mgr.AddPane(
+                self.MapWindow3D, wx.aui.AuiPaneInfo().CentrePane(). Dockable(False).BestSize(
+                    (-1, -1)).Name('3d'). CloseButton(False).DestroyOnClose(True). Layer(0))
+
             self.MapWindow3D.Show()
-            self.MapWindow3D.ResetViewHistory()            
+            self.MapWindow3D.ResetViewHistory()
             self.MapWindow3D.UpdateView(None)
             self.MapWindow3D.overlayActivated.connect(self._activateOverlay)
-            self.MapWindow3D.overlayHidden.connect(self._hideOverlay)
-            self.legend.overlayChanged.connect(self.MapWindow3D.UpdateOverlays)
+            self.MapWindow3D.overlayRemoved.connect(self.RemoveOverlay)
         else:
             self._switchMapWindow(self.MapWindow3D)
-            os.environ['GRASS_REGION'] = self.Map.SetRegion(windres = True, windres3 = True)
+            os.environ['GRASS_REGION'] = self.Map.SetRegion(
+                windres=True, windres3=True)
             self.MapWindow3D.GetDisplay().Init()
             del os.environ['GRASS_REGION']
-            
+
             # switch from MapWindow to MapWindowGL
             self._mgr.GetPane('2d').Hide()
             self._mgr.GetPane('3d').Show()
@@ -397,20 +423,25 @@ class MapFrame(SingleMapFrame):
 
             self.MapWindow3D.ResetViewHistory()
 
+        # connect signals for updating overlays
+        for overlay in self.decorations.values():
+            overlay.overlayChanged.connect(self.MapWindow3D.UpdateOverlays)
+        self.Map.GetRenderMgr().renderDone.connect(self.MapWindow3D._onUpdateOverlays)
+
         self._giface.updateMap.disconnect(self.MapWindow2D.UpdateMap)
         self._giface.updateMap.connect(self.MapWindow3D.UpdateMap)
         self.MapWindow3D.overlays = self.MapWindow2D.overlays
-        self.MapWindow3D.textdict = self.MapWindow2D.textdict
         # update overlays needs to be called after because getClientSize
         # is called during update and it must give reasonable values
         wx.CallAfter(self.MapWindow3D.UpdateOverlays)
-        
+
         self.SetStatusText("", 0)
         self._mgr.Update()
 
     def Disable3dMode(self):
         """Disables 3D mode (NVIZ) in user interface."""
-        # TODO: this is broken since item is removed but switch is drived by index
+        # TODO: this is broken since item is removed but switch is drived by
+        # index
         if '3D' in self.toolbars['map'].combo.GetString(1):
             self.toolbars['map'].combo.Delete(1)
 
@@ -421,18 +452,19 @@ class MapFrame(SingleMapFrame):
             self.toolbars['map'].RemoveTool(self.toolbars['map'].flyThrough)
         except AttributeError:
             pass
-        
+
         # update status bar
-        self.statusbarManager.ShowStatusbarChoiceItemsByClass(self.statusbarItemsHiddenInNviz)
-        self.statusbarManager.SetMode(UserSettings.Get(group = 'display',
-                                                       key = 'statusbarMode',
-                                                       subkey = 'selection'))
+        self.statusbarManager.ShowStatusbarChoiceItemsByClass(
+            self.statusbarItemsHiddenInNviz)
+        self.statusbarManager.SetMode(UserSettings.Get(group='display',
+                                                       key='statusbarMode',
+                                                       subkey='selection'))
         self.SetStatusText(_("Please wait, unloading data..."), 0)
         # unloading messages from library cause highlight anyway
         self._giface.WriteCmdLog(_("Switching back to 2D view mode..."),
                                  notification=Notification.NO_NOTIFICATION)
         if self.MapWindow3D:
-            self.MapWindow3D.OnClose(event = None)
+            self.MapWindow3D.OnClose(event=None)
         # switch from MapWindowGL to MapWindow
         self._mgr.GetPane('2d').Show()
         self._mgr.GetPane('3d').Hide()
@@ -442,19 +474,22 @@ class MapFrame(SingleMapFrame):
         self.ending3dMode.emit()
         try:
             self.MapWindow2D.overlays = self.MapWindow3D.overlays
-            self.MapWindow2D.textdict = self.MapWindow3D.textdict
         except AttributeError:
             pass
         # TODO: here we end because self.MapWindow3D is None for a while
         self._giface.updateMap.disconnect(self.MapWindow3D.UpdateMap)
         self._giface.updateMap.connect(self.MapWindow2D.UpdateMap)
-        self.legend.overlayChanged.disconnect(self.MapWindow3D.UpdateOverlays)
+        # disconnect overlays
+        for overlay in self.decorations.values():
+            overlay.overlayChanged.disconnect(self.MapWindow3D.UpdateOverlays)
+        self.Map.GetRenderMgr().renderDone.disconnect(self.MapWindow3D._onUpdateOverlays)
+        self.MapWindow3D.ClearTextures()
 
         self.MapWindow.UpdateMap()
         self._mgr.Update()
         self.GetMapToolbar().SelectDefault()
-        
-    def AddToolbar(self, name, fixed = False):
+
+    def AddToolbar(self, name, fixed=False):
         """Add defined toolbar to the window
 
         Currently recognized toolbars are:
@@ -466,8 +501,10 @@ class MapFrame(SingleMapFrame):
         """
         # default toolbar
         if name == "map":
-            self.toolbars['map'] = MapToolbar(self, toolSwitcher=self._toolSwitcher)
-            
+            if 'map' not in self.toolbars:
+                self.toolbars['map'] = MapToolbar(
+                    self, toolSwitcher=self._toolSwitcher)
+
             self._mgr.AddPane(self.toolbars['map'],
                               wx.aui.AuiPaneInfo().
                               Name("maptoolbar").Caption(_("Map Toolbar")).
@@ -476,42 +513,41 @@ class MapFrame(SingleMapFrame):
                               BottomDockable(False).TopDockable(True).
                               CloseButton(False).Layer(2).
                               BestSize((self.toolbars['map'].GetBestSize())))
-            
+
         # vector digitizer
         elif name == "vdigit":
-            self.toolbars['map'].combo.SetValue(_("Digitize"))
+            self.toolbars['map'].combo.SetValue(_("Vector digitizer"))
             self._addToolbarVDigit()
-        
+
         if fixed:
             self.toolbars['map'].combo.Disable()
-         
+
         self._mgr.Update()
-        
-    def RemoveToolbar (self, name):
+
+    def RemoveToolbar(self, name, destroy=False):
         """Removes defined toolbar from the window
 
-        .. todo::
-            Only hide, activate by calling AddToolbar()
+        :param name toolbar to remove
+        :param destroy True to destroy otherwise toolbar is only hidden
         """
-        # cannot hide main toolbar
-        if name == "map":
-            return
-        
         self._mgr.DetachPane(self.toolbars[name])
-        self._toolSwitcher.RemoveToolbarFromGroup('mouseUse', self.toolbars[name])
-        self.toolbars[name].Destroy()
-        self.toolbars.pop(name)
-        
+        if destroy:
+            self._toolSwitcher.RemoveToolbarFromGroup(
+                'mouseUse', self.toolbars[name])
+            self.toolbars[name].Destroy()
+            self.toolbars.pop(name)
+        else:
+            self.toolbars[name].Hide()
+
         if name == 'vdigit':
             self._mgr.GetPane('vdigit').Hide()
             self._mgr.GetPane('2d').Show()
             self._switchMapWindow(self.MapWindow2D)
-            
-        self.toolbars['map'].combo.SetValue(_("2D view"))
+
         self.toolbars['map'].Enable2D(True)
-        
+
         self._mgr.Update()
-    
+
     def IsPaneShown(self, name):
         """Check if pane (toolbar, mapWindow ...) of given name is currently shown"""
         if self._mgr.GetPane(name).IsOk():
@@ -520,7 +556,7 @@ class MapFrame(SingleMapFrame):
 
     def RemoveQueryLayer(self):
         """Removes temporary map layers (queries)"""
-        qlayer = self.GetMap().GetListOfLayers(name = globalvar.QUERYLAYER)
+        qlayer = self.GetMap().GetListOfLayers(name=globalvar.QUERYLAYER)
         for layer in qlayer:
             self.GetMap().DeleteLayer(layer)
 
@@ -528,32 +564,55 @@ class MapFrame(SingleMapFrame):
         """Re-render map composition (each map layer)
         """
         self.RemoveQueryLayer()
-        
+
         # deselect features in vdigit
         if self.GetToolbar('vdigit'):
             if self.MapWindow.digit:
                 self.MapWindow.digit.GetDisplay().SetSelected([])
-            self.MapWindow.UpdateMap(render = True, renderVector = True)
+            self.MapWindow.UpdateMap(render=True, renderVector=True)
         else:
-            self.MapWindow.UpdateMap(render = True)
-        
+            self.MapWindow.UpdateMap(render=True)
+
+        # reset dialog with selected features
+        if self.dialogs['vselect']:
+            self.dialogs['vselect'].Reset()
+
         # update statusbar
         self.StatusbarUpdate()
 
     def OnPointer(self, event):
         """Pointer button clicked
-        """      
+        """
         self.MapWindow.SetModePointer()
 
         if self.GetToolbar('vdigit'):
             self.toolbars['vdigit'].action['id'] = -1
-            self.toolbars['vdigit'].action['desc']=''
+            self.toolbars['vdigit'].action['desc'] = ''
+
+    def OnSelect(self, event):
+        """Vector feature selection button clicked
+        """
+        layerList = self._giface.GetLayerList()
+        layerSelected = layerList.GetSelectedLayer()
+        if not self.dialogs['vselect']:
+            if layerSelected is None:
+                GMessage(_("No map layer selected. Operation canceled."))
+                return
+
+            self.dialogs['vselect'] = VectorSelectBase(
+                self.parent, self._giface)
+            self.dialogs['vselect'].CreateDialog(createButton=True)
+            self.dialogs['vselect'].onCloseDialog.connect(
+                self._onCloseVectorSelectDialog)
+
+    def _onCloseVectorSelectDialog(self):
+        self.dialogs['vselect'] = None
 
     def OnRotate(self, event):
         """Rotate 3D view
         """
         self.MapWindow.mouse['use'] = "rotate"
-        
+
         # change the cursor
         self.MapWindow.SetNamedCursor('hand')
 
@@ -561,7 +620,7 @@ class MapFrame(SingleMapFrame):
         """Fly-through mode
         """
         self.MapWindow.mouse['use'] = "fly"
-        
+
         # change the cursor
         self.MapWindow.SetNamedCursor('hand')
         self.MapWindow.SetFocus()
@@ -572,7 +631,7 @@ class MapFrame(SingleMapFrame):
         filetype, ltype = self._prepareSaveToFile()
         if not ltype:
             return
-        
+
         # get size
         dlg = ImageSizeDialog(self)
         dlg.CentreOnParent()
@@ -581,34 +640,34 @@ class MapFrame(SingleMapFrame):
             return
         width, height = dlg.GetValues()
         dlg.Destroy()
-        
+
         # get filename
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to save the image "
-                                        "(no need to add extension)"),
-                            wildcard = filetype,
-                            style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
-        
+        dlg = wx.FileDialog(parent=self,
+                            message=_("Choose a file name to save the image "
+                                      "(no need to add extension)"),
+                            wildcard=filetype,
+                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
                 dlg.Destroy()
                 return
-            
+
             base, ext = os.path.splitext(path)
             fileType = ltype[dlg.GetFilterIndex()]['type']
-            extType  = ltype[dlg.GetFilterIndex()]['ext']
+            extType = ltype[dlg.GetFilterIndex()]['ext']
             if ext != extType:
                 path = base + '.' + extType
-            
+
             self.MapWindow.SaveToFile(path, fileType,
                                       width, height)
-            
+
         dlg.Destroy()
 
     def DOutFile(self, command):
         """Saves map to image by running d.out.file from gui or d.mon.
-        Command is expected to be validated by parser.        
+        Command is expected to be validated by parser.
         """
         filetype, ltype = self._prepareSaveToFile()
         if not ltype:
@@ -655,7 +714,8 @@ class MapFrame(SingleMapFrame):
         """Saves currently loaded composition of layers as a raster map.
         """
         if self.IsPaneShown('3d'):
-            self._giface.WriteError(_('d.to.rast can be used only in 2D mode.'))
+            self._giface.WriteError(
+                _('d.to.rast can be used only in 2D mode.'))
             return
         outputRaster = None
         overwrite = False
@@ -676,8 +736,9 @@ class MapFrame(SingleMapFrame):
         dOutFileCmd = ['d.out.file', 'output=' + pngFile, 'format=png']
         self.DOutFile(dOutFileCmd)
         # import back as red, green, blue rasters
-        returncode, messages = RunCommand('r.in.gdal', flags='o', input=pngFile, output=tmpName,
-                                          quiet=True, overwrite=overwrite, getErrorMsg=True)
+        returncode, messages = RunCommand(
+            'r.in.gdal', flags='o', input=pngFile, output=tmpName, quiet=True,
+            overwrite=overwrite, getErrorMsg=True)
         if not returncode == 0:
             self._giface.WriteError(_('Failed to run d.to.rast:\n') + messages)
             return
@@ -690,13 +751,23 @@ class MapFrame(SingleMapFrame):
             self._giface.WriteError(_('Failed to run d.to.rast:\n') + messages)
             return
         # composite
-        returncode, messages = RunCommand('r.composite', red=tmpName + '.red',
-                                          green=tmpName + '.green', blue=tmpName + '.blue',
-                                          output=outputRaster, quiet=True,
-                                          overwrite=overwrite, getErrorMsg=True)
+        returncode, messages = RunCommand(
+            'r.composite', red=tmpName + '.red', green=tmpName + '.green',
+            blue=tmpName + '.blue', output=outputRaster, quiet=True,
+            overwrite=overwrite, getErrorMsg=True)
         grass.del_temp_region()
-        RunCommand('g.remove', type='raster', flags='f', quiet=True,
-                   name=[tmpName + '.red', tmpName + '.green', tmpName + '.blue'])
+        RunCommand(
+            'g.remove',
+            type='raster',
+            flags='f',
+            quiet=True,
+            name=[
+                tmpName +
+                '.red',
+                tmpName +
+                '.green',
+                tmpName +
+                '.blue'])
         if not returncode == 0:
             self._giface.WriteError(_('Failed to run d.to.rast:\n') + messages)
             grass.try_remove(pngFile)
@@ -725,13 +796,15 @@ class MapFrame(SingleMapFrame):
         """Get wildcards and format extensions."""
         if self.IsPaneShown('3d'):
             filetype = "TIF file (*.tif)|*.tif|PPM file (*.ppm)|*.ppm"
-            ltype = [{ 'ext' : 'tif', 'type' : 'tif' },
-                     { 'ext' : 'ppm', 'type' : 'ppm' }]
+            ltype = [{'ext': 'tif', 'type': 'tif'},
+                     {'ext': 'ppm', 'type': 'ppm'}]
         else:
             img = self.MapWindow.img
             if not img:
-                GMessage(parent = self,
-                         message = _("Nothing to render (empty map). Operation canceled."))
+                GMessage(
+                    parent=self,
+                    message=_(
+                        "Nothing to render (empty map). Operation canceled."))
                 return None, None
             filetype, ltype = GetImageHandlers(img)
         return filetype, ltype
@@ -766,7 +839,7 @@ class MapFrame(SingleMapFrame):
         Debug.msg(2, "MapFrame.OnCloseWindow(): function starts")
         pgnum = None
         self.Map.Clean()
-        
+
         # close edited map and 3D tools properly
         if self.GetToolbar('vdigit'):
             maplayer = self.toolbars['vdigit'].GetLayer()
@@ -774,7 +847,9 @@ class MapFrame(SingleMapFrame):
                 self.toolbars['vdigit'].OnExit()
         if self.IsPaneShown('3d'):
             self.RemoveNviz()
-        
+        if hasattr(self, 'rdigit') and self.rdigit:
+            self.rdigit.CleanUp()
+
         if not self._layerManager:
             self.Destroy()
         elif self.page:
@@ -784,7 +859,7 @@ class MapFrame(SingleMapFrame):
         Debug.msg(2, "MapFrame.OnCloseWindow(): function ends")
 
     def Query(self, x, y):
-        """Query selected layers. 
+        """Query selected layers.
 
         :param x,y: coordinates
         """
@@ -796,6 +871,8 @@ class MapFrame(SingleMapFrame):
             rast = []
             vect = []
             for layer in layers:
+                if layer.type == 'command':
+                    continue
                 name, found = GetLayerNameFromCmd(layer.cmd)
                 if not found:
                     continue
@@ -814,17 +891,21 @@ class MapFrame(SingleMapFrame):
                     lmap = digitToolbar.GetLayer().GetName()
                     for name in vect:
                         if lmap == name:
-                            self._giface.WriteWarning(_("Vector map <%s> "
-                                                                      "opened for editing - skipped.") % lmap)
+                            self._giface.WriteWarning(
+                                _("Vector map <%s> " "opened for editing - skipped.") % lmap)
                             vect.remove(name)
 
         if not (rast + vect):
-            GMessage(parent = self,
-                     message = _('No raster or vector map layer selected for querying.'))
+            GMessage(
+                parent=self,
+                message=_(
+                    'No raster or vector map layer selected for querying.'))
             return
 
-        # set query snap distance for v.what at map unit equivalent of 10 pixels
-        qdist = 10.0 * ((self.Map.region['e'] - self.Map.region['w']) / self.Map.width)
+        # set query snap distance for v.what at map unit equivalent of 10
+        # pixels
+        qdist = 10.0 * (
+            (self.Map.region['e'] - self.Map.region['w']) / self.Map.width)
 
         # TODO: replace returning None by exception or so
         try:
@@ -838,7 +919,7 @@ class MapFrame(SingleMapFrame):
             if rast:
                 self.MapWindow.QuerySurface(x, y)
             if vect:
-                self.QueryMap(east, north, qdist, rast = [], vect = vect)
+                self.QueryMap(east, north, qdist, rast=[], vect=vect)
 
     def SetQueryLayersAndActivate(self, ltype, maps):
         """Activate query mode and set layers to query.
@@ -851,7 +932,7 @@ class MapFrame(SingleMapFrame):
 
     def QueryMap(self, east, north, qdist, rast, vect):
         """Query raster or vector map layers by r/v.what
-        
+
         :param east,north: coordinates
         :param qdist: query distance
         :param rast: raster map names
@@ -859,10 +940,13 @@ class MapFrame(SingleMapFrame):
         """
         Debug.msg(1, "QueryMap(): raster=%s vector=%s" % (','.join(rast),
                                                           ','.join(vect)))
+        if self._highlighter_layer is None:
+            self._highlighter_layer = VectorSelectHighlighter(
+                mapdisp=self._giface.GetMapDisplay(), giface=self._giface)
 
         # use display region settings instead of computation region settings
         self.tmpreg = os.getenv("GRASS_REGION")
-        os.environ["GRASS_REGION"] = self.Map.SetRegion(windres = False)
+        os.environ["GRASS_REGION"] = self.Map.SetRegion(windres=False)
 
         rastQuery = []
         vectQuery = []
@@ -870,74 +954,63 @@ class MapFrame(SingleMapFrame):
             rastQuery = grass.raster_what(map=rast, coord=(east, north),
                                           localized=True)
         if vect:
-            encoding = UserSettings.Get(group='atm', key='encoding', subkey='value')
+            encoding = UserSettings.Get(
+                group='atm', key='encoding', subkey='value')
             try:
-                vectQuery = grass.vector_what(map=vect, coord=(east, north), distance=qdist,
-                                              encoding=encoding)
+                vectQuery = grass.vector_what(
+                    map=vect, coord=(east, north),
+                    distance=qdist, encoding=encoding)
             except grass.ScriptError:
-                GError(parent=self,
-                       message=_("Failed to query vector map(s) <{maps}>. "
-                                 "Check database settings and topology.").format(maps=','.join(vect)))
+                GError(
+                    parent=self, message=_(
+                        "Failed to query vector map(s) <{maps}>. "
+                        "Check database settings and topology.").format(
+                        maps=','.join(vect)))
         self._QueryMapDone()
-        if 'Id' in vectQuery:
+
+        self._highlighter_layer.Clear()
+        if vectQuery and 'Category' in vectQuery[0]:
             self._queryHighlight(vectQuery)
 
         result = rastQuery + vectQuery
-        result = PrepareQueryResults(coordinates = (east, north), result = result)
+        result = PrepareQueryResults(coordinates=(east, north), result=result)
         if self.dialogs['query']:
             self.dialogs['query'].Raise()
             self.dialogs['query'].SetData(result)
         else:
-            self.dialogs['query'] = QueryDialog(parent = self, data = result)
+            self.dialogs['query'] = QueryDialog(parent=self, data=result)
             self.dialogs['query'].Bind(wx.EVT_CLOSE, self._oncloseQueryDialog)
-            self.dialogs['query'].redirectOutput.connect(self._onRedirectQueryOutput)
+            self.dialogs['query'].redirectOutput.connect(
+                self._onRedirectQueryOutput)
             self.dialogs['query'].Show()
 
     def _oncloseQueryDialog(self, event):
         self.dialogs['query'] = None
         self._vectQueryLayers = []
         self._rastQueryLayers = []
+        self._highlighter_layer.Clear()
+        self._highlighter_layer = None
         event.Skip()
 
     def _onRedirectQueryOutput(self, output, style='log'):
         """Writes query output into console"""
         if style == 'log':
-            self._giface.WriteLog(output, notification=Notification.MAKE_VISIBLE)
+            self._giface.WriteLog(
+                output, notification=Notification.MAKE_VISIBLE)
         elif style == 'cmd':
             self._giface.WriteCmdLog(output)
 
     def _queryHighlight(self, vectQuery):
         """Highlight category from query."""
-        cats = name = None
-        for res in vectQuery:
-            cats = {res['Layer']: [res['Category']]}
-            name = res['Map']
-        try:
-            qlayer = self.Map.GetListOfLayers(name = globalvar.QUERYLAYER)[0]
-        except IndexError:
-            qlayer = None
-
-        if not (cats and name):
-            if qlayer:
-                self.Map.DeleteLayer(qlayer)
-                self.MapWindow.UpdateMap(render = False, renderVector = False)
-            return
+        if len(vectQuery) > 0:
+            self._highlighter_layer.SetLayer(vectQuery[0]['Layer'])
+            self._highlighter_layer.SetMap(vectQuery[0]['Map'])
+            tmp = list()
+            for i in vectQuery:
+                tmp.append(i['Category'])
 
-        if not self.IsPaneShown('3d') and self.IsAutoRendered():
-            # highlight feature & re-draw map
-            if qlayer:
-                qlayer.SetCmd(self.AddTmpVectorMapLayer(name, cats,
-                                                        useId = False,
-                                                        addLayer = False))
-            else:
-                qlayer = self.AddTmpVectorMapLayer(name, cats, useId = False)
-            
-            # set opacity based on queried layer
-            # TODO fix
-            # opacity = layer.maplayer.GetOpacity(float = True)
-            # qlayer.SetOpacity(opacity)
-            
-            self.MapWindow.UpdateMap(render = False, renderVector = False)
+            self._highlighter_layer.SetCats(tmp)
+            self._highlighter_layer.DrawSelected()
 
     def _QueryMapDone(self):
         """Restore settings after querying (restore GRASS_REGION)
@@ -949,27 +1022,27 @@ class MapFrame(SingleMapFrame):
                 del os.environ["GRASS_REGION"]
         elif 'GRASS_REGION' in os.environ:
             del os.environ["GRASS_REGION"]
-        
+
         if hasattr(self, "tmpreg"):
             del self.tmpreg
-        
+
     def OnQuery(self, event):
         """Query tools menu"""
         self.MapWindow.mouse['use'] = "query"
         self.MapWindow.mouse['box'] = "point"
         self.MapWindow.zoomtype = 0
-        
+
         # change the cursor
         self.MapWindow.SetNamedCursor('cross')
-        
-    def AddTmpVectorMapLayer(self, name, cats, useId = False, addLayer = True):
+
+    def AddTmpVectorMapLayer(self, name, cats, useId=False, addLayer=True):
         """Add temporal vector map layer to map composition
 
         :param name: name of map layer
-        :param useId: use feature id instead of category 
+        :param useId: use feature id instead of category
         """
         # color settings from ATM
-        color = UserSettings.Get(group = 'atm', key = 'highlight', subkey = 'color')
+        color = UserSettings.Get(group='atm', key='highlight', subkey='color')
         colorStr = str(color[0]) + ":" + \
             str(color[1]) + ":" + \
             str(color[2])
@@ -978,23 +1051,37 @@ class MapFrame(SingleMapFrame):
         icon = ''
         size = 0
         # here we know that there is one selected layer and it is vector
-        vparam = self._giface.GetLayerList().GetSelectedLayers()[0].cmd
+        layerSelected = self._giface.GetLayerList().GetSelectedLayer()
+        if not layerSelected:
+            return None
+
+        vparam = layerSelected.cmd
         for p in vparam:
             if '=' in p:
-                parg,pval = p.split('=', 1)
-                if parg == 'icon': icon = pval
-                elif parg == 'size': size = float(pval)
-
-        pattern = ["d.vect",
-                   "map=%s" % name,
-                   "color=%s" % colorStr,
-                   "fill_color=%s" % colorStr,
-                   "width=%d"  % UserSettings.Get(group = 'atm', key = 'highlight', subkey = 'width')]
+                parg, pval = p.split('=', 1)
+                if parg == 'icon':
+                    icon = pval
+                elif parg == 'size':
+                    size = float(pval)
+
+        pattern = [
+            "d.vect",
+            "map=%s" %
+            name,
+            "color=%s" %
+            colorStr,
+            "fill_color=%s" %
+            colorStr,
+            "width=%d" %
+            UserSettings.Get(
+                group='atm',
+                key='highlight',
+                subkey='width')]
         if icon != '':
             pattern.append('icon=%s' % icon)
         if size > 0:
             pattern.append('size=%i' % size)
-        
+
         if useId:
             cmd = pattern
             cmd.append('-i')
@@ -1008,12 +1095,15 @@ class MapFrame(SingleMapFrame):
                 cmd[-1].append("cats=%s" % ListOfCatsToRange(lcats))
 
         if addLayer:
+            args = {}
             if useId:
-                return self.Map.AddLayer(ltype = 'vector', name = globalvar.QUERYLAYER, command = cmd,
-                                         active = True, hidden = True, opacity = 1.0)
+                args['ltype'] = 'vector'
             else:
-                return self.Map.AddLayer(ltype = 'command', name = globalvar.QUERYLAYER, command = cmd,
-                                         active = True, hidden = True, opacity = 1.0)
+                args['ltype'] = 'command'
+
+            return self.Map.AddLayer(name=globalvar.QUERYLAYER, command=cmd,
+                                     active=True, hidden=True, opacity=1.0,
+                                     render=True, **args)
         else:
             return cmd
 
@@ -1028,9 +1118,12 @@ class MapFrame(SingleMapFrame):
 
         :param controller: measurement class (MeasureDistanceController, MeasureAreaController)
         """
-        self.measureController = controller(self._giface, mapWindow=self.GetMapWindow())
-        # assure that the mode is ended and lines are cleared whenever other tool is selected
-        self._toolSwitcher.toggleToolChanged.connect(lambda: self.measureController.Stop())
+        self.measureController = controller(
+            self._giface, mapWindow=self.GetMapWindow())
+        # assure that the mode is ended and lines are cleared whenever other
+        # tool is selected
+        self._toolSwitcher.toggleToolChanged.connect(
+            lambda: self.measureController.Stop())
         self.measureController.Start()
 
     def OnProfile(self, event):
@@ -1045,8 +1138,8 @@ class MapFrame(SingleMapFrame):
 
     def Profile(self, rasters=None):
         """Launch profile tool"""
-        self.profileController = ProfileController(self._giface,
-                                                   mapWindow=self.GetMapWindow())
+        self.profileController = ProfileController(
+            self._giface, mapWindow=self.GetMapWindow())
         win = ProfileFrame(parent=self, rasterList=rasters,
                            units=self.Map.projinfo['units'],
                            controller=self.profileController)
@@ -1064,10 +1157,10 @@ class MapFrame(SingleMapFrame):
             if layer.maplayer.GetType() == 'raster':
                 raster.append(layer.maplayer.GetName())
 
-        win = HistogramPlotFrame(parent = self, rasterList = raster)
+        win = HistogramPlotFrame(parent=self, rasterList=raster)
         win.CentreOnParent()
         win.Show()
-        
+
     def OnScatterplot(self, event):
         """Init PyPlot scatterplot display canvas and tools
         """
@@ -1077,8 +1170,8 @@ class MapFrame(SingleMapFrame):
             if layer.maplayer.GetType() == 'raster':
                 raster.append(layer.maplayer.GetName())
 
-        win = ScatterFrame(parent = self, rasterList = raster)
-        
+        win = ScatterFrame(parent=self, rasterList=raster)
+
         win.CentreOnParent()
         win.Show()
         # Open raster select dialog to make sure that at least 2 rasters (and the desired rasters)
@@ -1089,7 +1182,7 @@ class MapFrame(SingleMapFrame):
         """Init histogram display canvas and tools
         """
         win = HistogramFrame(self, giface=self._giface)
-        
+
         win.CentreOnParent()
         win.Show()
         win.Refresh()
@@ -1098,206 +1191,147 @@ class MapFrame(SingleMapFrame):
     def _activateOverlay(self, overlayId):
         """Launch decoration dialog according to overlay id.
 
-        :param overlayId: id of overlay        
+        :param overlayId: id of overlay
         """
-        if overlayId > 100:
-            self.OnAddText(None)
-        elif overlayId == 0:
-            self.AddLegend(cmd=self.legend.cmd, showDialog=True)
-        elif overlayId == 1:
-            self.AddBarscale(showDialog=True)
-        elif overlayId == 2:
-            self.AddArrow(showDialog=True)
-
-    def _hideOverlay(self, overlayId):
+        dlg = self.decorations[overlayId].dialog
+        if dlg.IsShown():
+            dlg.SetFocus()
+            dlg.Raise()
+        else:
+            dlg.Show()
+
+    def RemoveOverlay(self, overlayId):
         """Hide overlay.
 
-        :param overlayId: id of overlay        
+        :param overlayId: id of overlay
         """
-        self.decorations[overlayId].Hide()
+        del self._decorationWindows[self.decorations[overlayId].dialog]
+        self.decorations[overlayId].Remove()
+        del self.decorations[overlayId]
 
-    def AddBarscale(self, cmd=None, showDialog=None):
+    def AddBarscale(self, cmd=None):
         """Handler for scale bar map decoration menu selection."""
         if self.IsPaneShown('3d'):
             self.MapWindow3D.SetDrawScalebar((70, 70))
             return
 
-        if self.barscale.IsShown() and showDialog is None:
-            self.barscale.Hide()
-            return
-
         if cmd:
-            self.barscale.cmd = cmd
-
-        if not showDialog:
-            self.barscale.Show()
-            return
+            show = False
+        else:
+            show = True
+            cmd = ['d.barscale']
 
         # Decoration overlay control dialog
-        if self.barscale.dialog:
-            if self.barscale.dialog.IsShown():
-                self.barscale.dialog.SetFocus()
-                self.barscale.dialog.Raise()
-            else:
-                self.barscale.dialog.Show()
-        else:
-            # If location is latlon, only display north arrow (scale won't work)
-            #        proj = self.Map.projinfo['proj']
-            #        if proj == 'll':
-            #            barcmd = 'd.barscale -n'
-            #        else:
-            #            barcmd = 'd.barscale'
-
-            # decoration overlay control dialog
-            GUI(parent=self, giface=self._giface, show=True,
-                modal=False).ParseCommand(self.barscale.cmd,
-                                          completed=(self.barscale.GetOptData, None, None))
+        GUI(parent=self, giface=self._giface, show=show, modal=False).ParseCommand(
+            cmd, completed=(self.GetOptData, None, None))
 
         self.MapWindow.mouse['use'] = 'pointer'
 
-    def AddLegend(self, cmd=None, showDialog=None):
-        """Handler for legend map decoration menu selection."""
-        if self.legend.IsShown() and showDialog is None:
-            self.legend.Hide()
-            return
+    def AddLegendRast(self, cmd=None):
+        """Handler for legend raster map decoration menu selection."""
+
         if cmd:
-            self.legend.cmd = cmd
+            show = False
         else:
+            show = True
+            cmd = ['d.legend']
             layers = self._giface.GetLayerList().GetSelectedLayers()
             for layer in layers:
                 if layer.type == 'raster':
-                    isMap = False
-                    # replace map
-                    for i, legendParam in enumerate(self.legend.cmd[1:]):
-                        idx = i + 1
-                        param_val = legendParam.split('=')
-                        if len(param_val) != 2:
-                            continue
-                        param, val = param_val
-                        if param == 'raster':
-                            self.legend.cmd[idx] = 'raster={rast}'.format(rast=layer.maplayer.name)
-                            isMap = True
-                        elif param in ('use', 'range'):
-                            # clear range or use to avoid problems
-                            del self.legend.cmd[idx]
-
-                    if not isMap:  # for the first time
-                        self.legend.cmd.append('raster=%s' % layer.maplayer.name)
+                    cmd.append('raster={rast}'.format(rast=layer.maplayer.name))
                     break
 
-        if not showDialog and self.legend.CmdIsValid():
-            self.legend.Show()
-            return
+        GUI(parent=self, giface=self._giface, show=show, modal=False).ParseCommand(
+            cmd, completed=(self.GetOptData, None, None))
 
-        # Decoration overlay control dialog
-        # always create new one to avoid problem when switching between maps
-        if self.legend.dialog:
-            if self.legend.dialog.IsShown():
-                self.legend.dialog.SetFocus()
-                self.legend.dialog.Raise()
-            else:
-                self.legend.dialog.Destroy()
-                self.legend.dialog = None
-        if not self.legend.dialog:
-            GUI(parent=self, giface=self._giface, show=True,
-                modal=False).ParseCommand(self.legend.cmd,
-                                          completed=(self.legend.GetOptData, None, None))
+        self.MapWindow.mouse['use'] = 'pointer'
+
+    def AddLegendVect(self, cmd=None, showDialog=None):
+        """Handler for legend vector map decoration menu selection."""
+
+        if cmd:
+            show = False
+        else:
+            show = True
+            cmd = ['d.legend.vect']
+
+        GUI(parent=self, giface=self._giface, show=show, modal=False).ParseCommand(
+            cmd, completed=(self.GetOptData, None, None))
 
         self.MapWindow.mouse['use'] = 'pointer'
 
-    def AddArrow(self, cmd=None, showDialog=None):
+    def AddArrow(self, cmd=None):
         """Handler for north arrow menu selection."""
         if self.IsPaneShown('3d'):
             # here was opening of appearance page of nviz notebook
-            # but now moved to MapWindow3D where are other problematic nviz calls
+            # but now moved to MapWindow3D where are other problematic nviz
+            # calls
             self.MapWindow3D.SetDrawArrow((70, 70))
             return
 
-        if self.arrow.IsShown() and showDialog is None:
-            self.arrow.Hide()
-            return
         if cmd:
-            self.arrow.cmd = cmd
-
-        if not showDialog:
-            self.arrow.Show()
-            return
+            show = False
+        else:
+            show = True
+            cmd = ['d.northarrow']
 
         # Decoration overlay control dialog
-        if self.arrow.dialog:
-            if self.arrow.dialog.IsShown():
-                self.arrow.dialog.SetFocus()
-                self.arrow.dialog.Raise()
-            else:
-                self.arrow.dialog.Show()
-        else:
-            GUI(parent=self, giface=self._giface, show=True,
-                modal=False).ParseCommand(self.arrow.cmd,
-                                          completed=(self.arrow.GetOptData, None, None))
+        GUI(parent=self, giface=self._giface, show=show, modal=False).ParseCommand(
+            cmd, completed=(self.GetOptData, None, None))
 
         self.MapWindow.mouse['use'] = 'pointer'
 
-    def OnAddText(self, event):
-        """Handler for text decoration menu selection.
-        """
-        if self.MapWindow.dragid > -1:
-            id = self.MapWindow.dragid
-            self.MapWindow.dragid = -1
+    def AddDtext(self, cmd=None):
+        """Handler for d.text menu selection."""
+        if cmd:
+            show = False
         else:
-            # index for overlay layer in render
-            if len(self.MapWindow.textdict.keys()) > 0:
-                id = max(self.MapWindow.textdict.keys()) + 1
-            else:
-                id = 101
-        
-        self.dialogs['text'] = TextLayerDialog(parent = self, ovlId = id, 
-                                               title = _('Add text layer'),
-                                               size = (400, 200))
-        self.dialogs['text'].CenterOnParent()
-
-        # If OK button pressed in decoration control dialog
-        if self.dialogs['text'].ShowModal() == wx.ID_OK:
-            text = self.dialogs['text'].GetValues()['text']
-            active = self.dialogs['text'].GetValues()['active']
-        
-            # delete object if it has no text or is not active
-            if text == '' or active == False:
-                try:
-                    self.MapWindow2D.pdc.ClearId(id)
-                    self.MapWindow2D.pdc.RemoveId(id)
-                    del self.MapWindow.textdict[id]
-                    if self.IsPaneShown('3d'):
-                        self.MapWindow3D.UpdateOverlays()
-                        self.MapWindow.UpdateMap()
-                    else:
-                        self.MapWindow2D.UpdateMap(render = False, renderVector = False)
-                except:
-                    pass
-                return
+            show = True
+            cmd = ['d.text']
+
+        # Decoration overlay control dialog
+        GUI(parent=self, giface=self._giface, show=show, modal=False).ParseCommand(
+            cmd, completed=(self.GetOptData, None, None))
 
-            
-            self.MapWindow.textdict[id] = self.dialogs['text'].GetValues()
-            
-            if self.IsPaneShown('3d'):
-                self.MapWindow3D.UpdateOverlays()
-                self.MapWindow3D.UpdateMap()
-            else:
-                self.MapWindow2D.pdc.ClearId(id)
-                self.MapWindow2D.pdc.SetId(id)
-                self.MapWindow2D.UpdateMap(render = False, renderVector = False)
-            
         self.MapWindow.mouse['use'] = 'pointer'
-        
-    def GetOptData(self, dcmd, type, params, propwin):
-        """Callback method for decoration overlay command generated by
-        dialog created in menuform.py
+
+    def GetOptData(self, dcmd, layer, params, propwin):
+        """Called after options are set through module dialog.
+
+        :param dcmd: resulting command
+        :param layer: not used
+        :param params: module parameters (not used)
+        :param propwin: dialog window
         """
-        # Reset comand and rendering options in render.Map. Always render decoration.
-        # Showing/hiding handled by PseudoDC
-        self.Map.ChangeOverlay(ovltype = type, type = 'overlay', name = '', command = dcmd,
-                               active = True, render = False)
-        self.params[type] = params
-        self.propwin[type] = propwin
+
+        if not dcmd:
+            return
+        if propwin in self._decorationWindows:
+            overlay = self._decorationWindows[propwin]
+        else:
+            cmd = dcmd[0]
+            if cmd == 'd.northarrow':
+                overlay = ArrowController(self.Map, self._giface)
+            elif cmd == 'd.barscale':
+                overlay = BarscaleController(self.Map, self._giface)
+            elif cmd == 'd.legend':
+                overlay = LegendController(self.Map, self._giface)
+            elif cmd == 'd.legend.vect':
+                overlay = LegendVectController(self.Map, self._giface)
+            elif cmd == 'd.text':
+                overlay = DtextController(self.Map, self._giface)
+
+            self.decorations[overlay.id] = overlay
+            overlay.overlayChanged.connect(lambda: self.MapWindow2D.UpdateMap(
+                                           render=False, renderVector=False))
+            if self.IsPaneShown('3d'):
+                overlay.overlayChanged.connect(self.MapWindow3D.UpdateOverlays)
+
+            overlay.dialog = propwin
+            self._decorationWindows[propwin] = overlay
+
+        overlay.cmd = dcmd
+        overlay.Show()
 
     def OnZoomToMap(self, event):
         """Set display extents to match selected raster (including
@@ -1306,21 +1340,21 @@ class MapFrame(SingleMapFrame):
         Debug.msg(3, "MapFrame.OnZoomToMap()")
         layers = None
         if self.IsStandalone():
-            layers = self.MapWindow.GetMap().GetListOfLayers(active = False)
-        
-        self.MapWindow.ZoomToMap(layers = layers)
+            layers = self.MapWindow.GetMap().GetListOfLayers(active=False)
+
+        self.MapWindow.ZoomToMap(layers=layers)
 
     def OnZoomToRaster(self, event):
         """Set display extents to match selected raster map (ignore NULLs)
         """
-        self.MapWindow.ZoomToMap(ignoreNulls = True)
-        
+        self.MapWindow.ZoomToMap(ignoreNulls=True)
+
     def OnZoomToSaved(self, event):
         """Set display geometry to match extents in
         saved region file
         """
         self.MapWindow.SetRegion(zoomOnly=True)
-        
+
     def OnSetDisplayToWind(self, event):
         """Set computational region (WIND file) to match display
         extents
@@ -1332,7 +1366,7 @@ class MapFrame(SingleMapFrame):
         file
         """
         self.MapWindow.SetRegion(zoomOnly=False)
- 
+
     def OnSetExtentToWind(self, event):
         """Set compulational region extent interactively"""
         self.MapWindow.SetModeDrawRegion()
@@ -1340,41 +1374,49 @@ class MapFrame(SingleMapFrame):
     def OnSaveDisplayRegion(self, event):
         """Save display extents to named region file.
         """
-        self.MapWindow.SaveRegion(display = True)
+        self.MapWindow.SaveRegion(display=True)
 
     def OnSaveWindRegion(self, event):
         """Save computational region to named region file.
         """
-        self.MapWindow.SaveRegion(display = False)
-        
+        self.MapWindow.SaveRegion(display=False)
+
     def OnZoomMenu(self, event):
         """Popup Zoom menu
         """
         zoommenu = wx.Menu()
-        
-        for label, handler in ((_('Zoom to default region'), self.OnZoomToDefault),
-                               (_('Zoom to saved region'), self.OnZoomToSaved),
-                               (None, None),
-                               (_('Set computational region extent from display'), self.OnSetDisplayToWind),
-                               (_('Set computational region extent interactively'), self.OnSetExtentToWind),
-                               (_('Set computational region from named region'),   self.OnSetWindToRegion),
-                               (None, None),
-                               (_('Save display geometry to named region'), self.OnSaveDisplayRegion),
-                               (_('Save computational region to named region'), self.OnSaveWindRegion)):
+
+        for label, handler in (
+            (_('Zoom to default region'),
+             self.OnZoomToDefault),
+            (_('Zoom to saved region'),
+             self.OnZoomToSaved),
+            (None, None),
+            (_('Set computational region extent from display'),
+             self.OnSetDisplayToWind),
+            (_('Set computational region extent interactively'),
+             self.OnSetExtentToWind),
+            (_('Set computational region from named region'),
+             self.OnSetWindToRegion),
+            (None, None),
+            (_('Save display geometry to named region'),
+             self.OnSaveDisplayRegion),
+            (_('Save computational region to named region'),
+             self.OnSaveWindRegion)):
             if label:
                 mid = wx.MenuItem(zoommenu, wx.ID_ANY, label)
                 zoommenu.AppendItem(mid)
                 self.Bind(wx.EVT_MENU, handler, mid)
             else:
                 zoommenu.AppendSeparator()
-        
+
         # Popup the menu. If an item is selected then its handler will
         # be called before PopupMenu returns.
         self.PopupMenu(zoommenu)
         zoommenu.Destroy()
 
-    def SetProperties(self, render = False, mode = 0, showCompExtent = False,
-                      constrainRes = False, projection = False, alignExtent = True):
+    def SetProperties(self, render=False, mode=0, showCompExtent=False,
+                      constrainRes=False, projection=False, alignExtent=True):
         """Set properies of map display window"""
         self.mapWindowProperties.autoRender = render
         self.statusbarManager.SetMode(mode)
@@ -1383,7 +1425,7 @@ class MapFrame(SingleMapFrame):
         self.mapWindowProperties.alignExtent = alignExtent
         self.mapWindowProperties.resolution = constrainRes
         self.SetProperty('projection', projection)
-        
+
     def IsStandalone(self):
         """Check if Map display is standalone
 
@@ -1415,15 +1457,23 @@ class MapFrame(SingleMapFrame):
 
     def GetMapToolbar(self):
         """Returns toolbar with zooming tools"""
-        return self.toolbars['map']
+        return self.toolbars['map'] if 'map' in self.toolbars else None
+
+    def GetToolbarNames(self):
+        """Return toolbar names"""
+        return self.toolbars.keys()
+
+    def GetDialog(self, name):
+        """Get selected dialog if exist"""
+        return self.dialogs.get(name, None)
 
     def OnVNet(self, event):
-        """Dialog for v.net* modules 
+        """Dialog for v.net* modules
         """
         if self.dialogs['vnet']:
             self.dialogs['vnet'].Raise()
             return
-        
+
         from vnet.dialogs import VNETDialog
         self.dialogs['vnet'] = VNETDialog(parent=self, giface=self._giface)
         self.dialogs['vnet'].CenterOnScreen()
@@ -1443,3 +1493,71 @@ class MapFrame(SingleMapFrame):
         map_win.ActivateWin()
 
         self.MapWindow = map_win
+
+    def AddRDigit(self):
+        """Adds raster digitizer: creates toolbar and digitizer controller,
+        binds events and signals."""
+        from rdigit.controller import RDigitController, EVT_UPDATE_PROGRESS
+        from rdigit.toolbars import RDigitToolbar
+
+        self.rdigit = RDigitController(self._giface,
+                                       mapWindow=self.GetMapWindow())
+        self.toolbars['rdigit'] = RDigitToolbar(
+            parent=self, controller=self.rdigit,
+            toolSwitcher=self._toolSwitcher)
+        # connect signals
+        self.rdigit.newRasterCreated.connect(
+            self.toolbars['rdigit'].NewRasterAdded)
+        self.rdigit.newRasterCreated.connect(
+            lambda name: self._giface.mapCreated.emit(
+                name=name, ltype='raster'))
+        self.rdigit.newFeatureCreated.connect(
+            self.toolbars['rdigit'].UpdateCellValues)
+        self.rdigit.uploadMapCategories.connect(
+            self.toolbars['rdigit'].UpdateCellValues)
+        self.rdigit.showNotification.connect(
+            lambda text: self.SetStatusText(text, 0))
+        self.rdigit.quitDigitizer.connect(self.QuitRDigit)
+        self.rdigit.Bind(
+            EVT_UPDATE_PROGRESS,
+            lambda evt: self.statusbarManager.SetProgress(
+                evt.range,
+                evt.value,
+                evt.text))
+        rasters = self.GetMap().GetListOfLayers(
+            ltype='raster', mapset=grass.gisenv()['MAPSET'])
+        self.toolbars['rdigit'].UpdateRasterLayers(rasters)
+        self.toolbars['rdigit'].SelectDefault()
+
+        self.GetMap().layerAdded.connect(self._updateRDigitLayers)
+        self.GetMap().layerRemoved.connect(self._updateRDigitLayers)
+        self.GetMap().layerChanged.connect(self._updateRDigitLayers)
+        self._mgr.AddPane(self.toolbars['rdigit'],
+                          wx.aui.AuiPaneInfo().
+                          Name("rdigit toolbar").Caption(_("Raster Digitizer Toolbar")).
+                          ToolbarPane().Top().Row(1).
+                          LeftDockable(False).RightDockable(False).
+                          BottomDockable(False).TopDockable(True).Floatable().
+                          CloseButton(False).Layer(2).DestroyOnClose().
+                          BestSize((self.toolbars['rdigit'].GetBestSize())))
+        self._mgr.Update()
+
+        self.rdigit.Start()
+
+    def _updateRDigitLayers(self, layer):
+        mapset = grass.gisenv()['MAPSET']
+        self.toolbars['rdigit'].UpdateRasterLayers(
+            rasters=self.GetMap().GetListOfLayers(
+                ltype='raster', mapset=mapset))
+
+    def QuitRDigit(self):
+        """Calls digitizer cleanup, removes digitizer object and disconnects
+        signals from Map."""
+        self.rdigit.CleanUp()
+        # disconnect updating layers
+        self.GetMap().layerAdded.disconnect(self._updateRDigitLayers)
+        self.GetMap().layerRemoved.disconnect(self._updateRDigitLayers)
+        self.GetMap().layerChanged.disconnect(self._updateRDigitLayers)
+
+        self.RemoveToolbar('rdigit', destroy=True)
+        self.rdigit = None
diff --git a/gui/wxpython/mapdisp/gprint.py b/gui/wxpython/mapdisp/gprint.py
index 0b2cd80..ec3a4e3 100644
--- a/gui/wxpython/mapdisp/gprint.py
+++ b/gui/wxpython/mapdisp/gprint.py
@@ -16,12 +16,14 @@ This program is free software under the GNU General Public License
 @author Michael Barton (Arizona State University)
 """
 
-import  wx
+import wx
 
 from core.gcmd import GMessage
 from core.utils import _
 
+
 class MapPrint(wx.Printout):
+
     def __init__(self, canvas):
         wx.Printout.__init__(self)
         self.canvas = canvas
@@ -92,7 +94,9 @@ class MapPrint(wx.Printout):
 
         return True
 
+
 class PrintOptions(wx.Object):
+
     def __init__(self, parent, mapwin):
         self.mapframe = parent
         self.mapwin = mapwin
@@ -116,7 +120,7 @@ class PrintOptions(wx.Object):
         # this makes a copy of the wx.PrintData instead of just saving
         # a reference to the one inside the PrintDialogData that will
         # be destroyed when the dialog is destroyed
-        self.printData = wx.PrintData( dlg.GetPageSetupData().GetPrintData() )
+        self.printData = wx.PrintData(dlg.GetPageSetupData().GetPrintData())
 
         dlg.Destroy()
 
@@ -150,5 +154,6 @@ class PrintOptions(wx.Object):
             GMessage(_("There was a problem printing.\n"
                        "Perhaps your current printer is not set correctly?"))
         else:
-            self.printData = wx.PrintData( printer.GetPrintDialogData().GetPrintData() )
+            self.printData = wx.PrintData(
+                printer.GetPrintDialogData().GetPrintData())
         printout.Destroy()
diff --git a/gui/wxpython/mapdisp/main.py b/gui/wxpython/mapdisp/main.py
index 7d66ae0..2be2582 100644
--- a/gui/wxpython/mapdisp/main.py
+++ b/gui/wxpython/mapdisp/main.py
@@ -14,7 +14,7 @@ Classes:
 Usage:
 python mapdisp/main.py monitor-identifier /path/to/map/file /path/to/command/file /path/to/env/file
 
-(C) 2006-2014 by the GRASS Development Team
+(C) 2006-2015 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -28,51 +28,62 @@ This program is free software under the GNU General Public License
 
 import os
 import sys
+import time
+import shutil
+import fileinput
 
-from core          import globalvar
+from grass.script.setup import set_gui_path
+set_gui_path()
+
+from core import globalvar
 import wx
 
-from core          import utils
-from core.giface   import StandaloneGrassInterface
-from core.gcmd     import RunCommand
-from core.render   import Map, MapLayer
+from core import utils
+from core.giface import StandaloneGrassInterface
+from core.gcmd import RunCommand
+from core.render import Map, MapLayer, Overlay, RenderMapMgr
 from core.utils import _
 from mapdisp.frame import MapFrame
-from core.debug    import Debug
+from core.debug import Debug
 from core.settings import UserSettings
 
 from grass.script.utils import try_remove
 from grass.script import core as grass
+from grass.script.task import cmdtuple_to_list
 from grass.pydispatch.signal import Signal
 
 # for standalone app
-monFile = { 'cmd' : None,
-            'map' : None,
-            'env' : None,
-            }
+monFile = {'cmd': None,
+           'map': None,
+           'env': None,
+           }
 monName = None
 monSize = list(globalvar.MAP_WINDOW_SIZE)
+monDecor = False
+
 
 class DMonMap(Map):
+
     def __init__(self, giface, cmdfile=None, mapfile=None):
         """Map composition (stack of map layers and overlays)
 
         :param cmdline: full path to the cmd file (defined by d.mon)
         :param mapfile: full path to the map file (defined by d.mon)
         """
-
         Map.__init__(self)
 
         self._giface = giface
 
         # environment settings
-        self.env   = dict()
+        self.env = dict()
 
         self.cmdfile = cmdfile
 
         # list of layers for rendering added from cmd file
-        # TODO temporary solution, layer managment by different tools in GRASS should be resovled
+        # TODO temporary solution, layer managment by different tools in GRASS
+        # should be resovled
         self.ownedLayers = []
+        self.oldOverlays = []
 
         if mapfile:
             self.mapfileCmd = mapfile
@@ -82,13 +93,26 @@ class DMonMap(Map):
         self.mapfile = monFile['map']
         if os.path.splitext(self.mapfile)[1] != '.ppm':
             self.mapfile += '.ppm'
-        
-        # signal sent when d.out.file/d.to.rast appears in cmd file, attribute is cmd
+
+        # signal sent when d.out.file/d.to.rast appears in cmd file, attribute
+        # is cmd
         self.saveToFile = Signal('DMonMap.saveToFile')
         self.dToRast = Signal('DMonMap.dToRast')
-        # signal sent when d.what.rast/vect appears in cmd file, attribute is cmd
+        # signal sent when d.what.rast/vect appears in cmd file, attribute is
+        # cmd
         self.query = Signal('DMonMap.query')
 
+        self.renderMgr = RenderMapMgr(self)
+
+        # update legend file variable with the one d.mon uses
+        with open(monFile['env'], 'r') as f:
+            lines = f.readlines()
+            for line in lines:
+                if 'GRASS_LEGEND_FILE' in line:
+                    legfile = line.split('=', 1)[1].strip()
+                    self.renderMgr.UpdateRenderEnv({'GRASS_LEGEND_FILE': legfile})
+                    break
+
     def GetLayersFromCmdFile(self):
         """Get list of map layers from cmdfile
         """
@@ -96,14 +120,15 @@ class DMonMap(Map):
             return
 
         nlayers = 0
-
         try:
             fd = open(self.cmdfile, 'r')
             lines = fd.readlines()
             fd.close()
-            # detect d.out.file, delete the line from the cmd file and export graphics
+            # detect d.out.file, delete the line from the cmd file and export
+            # graphics
             if len(lines) > 0:
-                if lines[-1].startswith('d.out.file') or lines[-1].startswith('d.to.rast'):
+                if lines[-1].startswith('d.out.file') or \
+                   lines[-1].startswith('d.to.rast'):
                     dCmd = lines[-1].strip()
                     fd = open(self.cmdfile, 'w')
                     fd.writelines(lines[:-1])
@@ -119,62 +144,111 @@ class DMonMap(Map):
                     fd.writelines(lines[:-1])
                     fd.close()
                     if '=' in utils.split(dWhatCmd)[1]:
-                        maps = utils.split(dWhatCmd)[1].split('=')[1].split(',')
+                        maps = utils.split(dWhatCmd)[1].split('=')[
+                            1].split(',')
                     else:
                         maps = utils.split(dWhatCmd)[1].split(',')
-                    self.query.emit(ltype=utils.split(dWhatCmd)[0].split('.')[-1], maps=maps)
+                    self.query.emit(ltype=utils.split(dWhatCmd)[
+                                    0].split('.')[-1], maps=maps)
                     return
+            else:
+                # clean overlays after erase
+                self.oldOverlays = []
+                overlays = self._giface.GetMapDisplay().decorations.keys()
+                for each in overlays:
+                    self._giface.GetMapDisplay().RemoveOverlay(each)
 
             existingLayers = self.GetListOfLayers()
 
             # holds new rendreing order for every layer in existingLayers
-            layersOrder = [-1] * len(self.GetListOfLayers())
+            layersOrder = [-1] * len(existingLayers)
 
             # next number in rendering order
             next_layer = 0
-
+            mapFile = None
+            render_env = dict()
             for line in lines:
+                if line.startswith('#'):
+                    if 'GRASS_RENDER_FILE' in line:
+                        mapFile = line.split('=', 1)[1].strip()
+                    try:
+                        k, v = line[2:].strip().split('=', 1)
+                    except:
+                        pass
+                    render_env[k] = v
+                    continue
+
                 cmd = utils.split(line.strip())
-                ltype = None
 
+                ltype = None
                 try:
                     ltype = utils.command2ltype[cmd[0]]
                 except KeyError:
                     grass.warning(_("Unsupported command %s.") % cmd[0])
                     continue
 
-                name = utils.GetLayerNameFromCmd(cmd, fullyQualified = True,
-                                                 layerType = ltype)[0]
+                name = utils.GetLayerNameFromCmd(cmd, fullyQualified=True,
+                                                 layerType=ltype)[0]
+
+                args = {}
+
+                if ltype in ('barscale', 'rastleg', 'northarrow', 'text', 'vectleg'):
+                    # TODO: this is still not optimal
+                    # it is there to prevent adding the same overlay multiple times
+                    if cmd in self.oldOverlays:
+                        continue
+                    if ltype == 'rastleg':
+                        self._giface.GetMapDisplay().AddLegendRast(cmd=cmd)
+                    elif ltype == 'barscale':
+                        self._giface.GetMapDisplay().AddBarscale(cmd=cmd)
+                    elif ltype == 'northarrow':
+                        self._giface.GetMapDisplay().AddArrow(cmd=cmd)
+                    elif ltype == 'text':
+                        self._giface.GetMapDisplay().AddDtext(cmd=cmd)
+                    elif ltype == 'vectleg':
+                        self._giface.GetMapDisplay().AddLegendVect(cmd=cmd)
+                    self.oldOverlays.append(cmd)
+                    continue
+
+                classLayer = MapLayer
+                args['ltype'] = ltype
+
+                mapLayer = classLayer(name=name,
+                                      cmd=cmd,
+                                      Map=None,
+                                      hidden=True,
+                                      render=False,
+                                      mapfile=mapFile,
+                                      **args)
+                mapLayer.GetRenderMgr().updateProgress.connect(self.GetRenderMgr().ReportProgress)
+                if render_env:
+                    mapLayer.GetRenderMgr().UpdateRenderEnv(render_env)
+                    render_env = dict()
 
-                # creating temporary layer object to compare commands
-                # neccessary to get the same format
-                # supposing that there are no side effects
-                tmpMapLayer = MapLayer(ltype = ltype, name = name,
-                                       cmd = cmd, Map = None,
-                                       active = False, hidden = True,
-                                       opacity = 0)
                 exists = False
                 for i, layer in enumerate(existingLayers):
-                    if layer.GetCmd(string=True) == tmpMapLayer.GetCmd(string=True):
+                    if layer.GetCmd(
+                            string=True) == mapLayer.GetCmd(
+                            string=True):
                         exists = True
 
-                        if layersOrder[i] == -1: 
-                            layersOrder[i] = next_layer;
+                        if layersOrder[i] == -1:
+                            layersOrder[i] = next_layer
                             next_layer += 1
                         # layer must be put higher in render order (same cmd was insered more times)
                         # TODO delete rendurant cmds from cmd file?
                         else:
                             for j, l_order in enumerate(layersOrder):
                                 if l_order > layersOrder[i]:
-                                    layersOrder[j] -= 1;
-                            layersOrder[i] = next_layer - 1;
+                                    layersOrder[j] -= 1
+                            layersOrder[i] = next_layer - 1
 
                         break
                 if exists:
                     continue
 
-                newLayer = Map.AddLayer(self, ltype = ltype, command = cmd, active = True, name = name)
-                
+                newLayer = self._addLayer(mapLayer)
+
                 existingLayers.append(newLayer)
                 self.ownedLayers.append(newLayer)
 
@@ -186,7 +260,7 @@ class DMonMap(Map):
             reorderedLayers = [-1] * next_layer
             for i, layer in enumerate(existingLayers):
 
-                # owned layer was not found in cmd file -> is deleted 
+                # owned layer was not found in cmd file -> is deleted
                 if layersOrder[i] == -1 and layer in self.ownedLayers:
                     self.ownedLayers.remove(layer)
                     self.DeleteLayer(layer)
@@ -194,39 +268,39 @@ class DMonMap(Map):
                 # other layer e. g. added by wx.vnet are added to the top
                 elif layersOrder[i] == -1 and layer not in self.ownedLayers:
                     reorderedLayers.append(layer)
-                
-                # owned layer found in cmd file is added into proper rendering position
+
+                # owned layer found in cmd file is added into proper rendering
+                # position
                 else:
                     reorderedLayers[layersOrder[i]] = layer
 
             self.SetLayers(reorderedLayers)
 
         except IOError as e:
-            grass.warning(_("Unable to read cmdfile '%(cmd)s'. Details: %(det)s") % \
-                              { 'cmd' : self.cmdfile, 'det' : e })
+            grass.warning(
+                _("Unable to read cmdfile '%(cmd)s'. Details: %(det)s") %
+                {'cmd': self.cmdfile, 'det': e})
             return
 
-        self._giface.updateMap.emit()
+        Debug.msg(1, "Map.GetLayersFromCmdFile(): cmdfile=%s, nlayers=%d" %
+                  (self.cmdfile, nlayers))
+
+        self._giface.updateMap.emit(render=False)
 
-        Debug.msg(1, "Map.GetLayersFromCmdFile(): cmdfile=%s" % self.cmdfile)
-        Debug.msg(1, "                            nlayers=%d" % nlayers)
-                
     def Render(self, *args, **kwargs):
         """Render layer to image.
 
         For input params and returned data see overridden method in Map class.
         """
-        ret = Map.Render(self, *args, **kwargs)
+        return Map.Render(self, *args, **kwargs)
 
-        return ret
-    
     def AddLayer(self, *args, **kwargs):
         """Adds generic map layer to list of layers.
 
         For input params and returned data see overridden method in Map class.
         """
-        driver = UserSettings.Get(group = 'display', key = 'driver', subkey = 'type')
-    
+        driver = UserSettings.Get(group='display', key='driver', subkey='type')
+
         if driver == 'png':
             os.environ["GRASS_RENDER_IMMEDIATE"] = "png"
         else:
@@ -241,29 +315,47 @@ class DMonMap(Map):
 
 class Layer(object):
     """@implements core::giface::Layer"""
+
     def __init__(self, maplayer):
         self._maplayer = maplayer
 
     def __getattr__(self, name):
         if name == 'cmd':
-            return utils.CmdTupleToList(self._maplayer.GetCmd())
+            return cmdtuple_to_list(self._maplayer.GetCmd())
         elif hasattr(self._maplayer, name):
             return getattr(self._maplayer, name)
         elif name == 'maplayer':
             return self._maplayer
         elif name == 'type':
             return self._maplayer.GetType()
-            #elif name == 'ctrl':
+            # elif name == 'ctrl':
         elif name == 'label':
             return self._maplayer.GetName()
-            #elif name == 'propwin':
+            # elif name == 'propwin':
 
 
 class LayerList(object):
+    """@implements core::giface::LayerList"""
+
     def __init__(self, map, giface):
-        """@implements core::giface::LayerList"""
         self._map = map
         self._giface = giface
+        self._index = 0
+
+    def __len__(self):
+        return len(self._map.GetListOfLayers())
+
+    def __iter__(self):
+        return self
+
+    def next(self):
+        items = self._map.GetListOfLayers()
+        try:
+            result = items[self._index]
+        except IndexError:
+            raise StopIteration
+        self._index += 1
+        return result
 
     def GetSelectedLayers(self, checkedOnly=True):
         # hidden and selected vs checked and selected
@@ -288,7 +380,7 @@ class LayerList(object):
 
         Launches property dialog if needed (raster, vector, etc.)
 
-        :param ltype: layer type (raster, vector, 3d-raster, ...)
+        :param ltype: layer type (raster, vector, raster_3d, ...)
         :param name: layer name
         :param checked: if True layer is checked
         :param opacity: layer opacity level
@@ -327,6 +419,7 @@ class LayerList(object):
 
 class DMonGrassInterface(StandaloneGrassInterface):
     """@implements GrassInterface"""
+
     def __init__(self, mapframe):
         StandaloneGrassInterface.__init__(self)
         self._mapframe = mapframe
@@ -337,17 +430,65 @@ class DMonGrassInterface(StandaloneGrassInterface):
     def GetMapWindow(self):
         return self._mapframe.GetMapWindow()
 
+    def GetMapDisplay(self):
+        return self._mapframe
+
     def GetProgress(self):
         return self._mapframe.GetProgressBar()
 
+    def ShowStatusbar(self, show=True):
+        if not self._mapframe.statusbarManager:
+            self._mapframe.CreateStatusbar()
+
+        self._mapframe.statusbarManager.Show(show)
+
+    def IsStatusbarShown(self):
+        if not self._mapframe.statusbarManager:
+            return False
+
+        return self._mapframe.statusbarManager.IsShown()
+
+    def ShowAllToolbars(self, show=True):
+        if not show:  # hide
+            action = self._mapframe.RemoveToolbar
+        else:
+            action = self._mapframe.AddToolbar
+        toolbars = self._mapframe.GetToolbarNames()
+        if not toolbars:
+            toolbars.append('map')
+        for toolbar in toolbars:
+            action(toolbar)
+
+    def AreAllToolbarsShown(self):
+        toolbar = self._mapframe.GetMapToolbar()
+        if toolbar is None:
+            return False
+
+        return toolbar.IsShown()
+
 
 class DMonFrame(MapFrame):
+
     def OnZoomToMap(self, event):
         layers = self.MapWindow.GetMap().GetListOfLayers()
-        self.MapWindow.ZoomToMap(layers = layers)
-        
+        self.MapWindow.ZoomToMap(layers=layers)
+
+    def OnSize(self, event):
+        super(DMonFrame, self).OnSize(event)
+
+        # update env file
+        width, height = self.MapWindow.GetClientSize()
+        for line in fileinput.input(monFile['env'], inplace=True):
+            if 'GRASS_RENDER_WIDTH' in line:
+                print 'GRASS_RENDER_WIDTH={}'.format(width)
+            elif 'GRASS_RENDER_HEIGHT' in line:
+                print 'GRASS_RENDER_HEIGHT={}'.format(height)
+            else:
+                print line.rstrip('\n')
+
 
 class MapApp(wx.App):
+
     def OnInit(self):
         if not globalvar.CheckWxVersion([2, 9]):
             wx.InitAllImageHandlers()
@@ -355,35 +496,53 @@ class MapApp(wx.App):
         grass.set_raise_on_error(True)
         # actual use of StandaloneGrassInterface not yet tested
         # needed for adding functionality in future
-        giface = DMonGrassInterface(None)
+        self._giface = DMonGrassInterface(None)
+
+        return True
+
+    def CreateMapFrame(self, name, decorations=True):
+        toolbars = []
+        if decorations:
+            toolbars.append('map')
 
         if __name__ == "__main__":
             self.cmdTimeStamp = os.path.getmtime(monFile['cmd'])
-            self.Map = DMonMap(giface=giface, cmdfile=monFile['cmd'],
-                               mapfile = monFile['map'])
+            self.Map = DMonMap(giface=self._giface, cmdfile=monFile['cmd'],
+                               mapfile=monFile['map'])
+
+            self.timer = wx.PyTimer(self.watcher)
+            # check each 0.5s
+            global mtime
+            mtime = 500
+            self.timer.Start(mtime)
         else:
             self.Map = None
 
-        self.mapFrm = DMonFrame(parent = None, id = wx.ID_ANY, Map = self.Map,
-                                giface = giface, size = monSize)
+        self.mapFrm = DMonFrame(
+            parent=None,
+            id=wx.ID_ANY,
+            title=name,
+            Map=self.Map,
+            giface=self._giface,
+            size=monSize,
+            toolbars=toolbars,
+            statusbar=decorations)
+
         # FIXME: hack to solve dependency
-        giface._mapframe = self.mapFrm
-        # self.SetTopWindow(Map)
-        self.mapFrm.GetMapWindow().SetAlwaysRenderEnabled(True)
+        self._giface._mapframe = self.mapFrm
+
+        self.mapFrm.GetMapWindow().SetAlwaysRenderEnabled(False)
+
         self.Map.saveToFile.connect(lambda cmd: self.mapFrm.DOutFile(cmd))
         self.Map.dToRast.connect(lambda cmd: self.mapFrm.DToRast(cmd))
-        self.Map.query.connect(lambda ltype, maps: self.mapFrm.SetQueryLayersAndActivate(ltype=ltype, maps=maps))
-        self.mapFrm.Show()
-        
-        if __name__ == "__main__":
-            self.timer = wx.PyTimer(self.watcher)
-            #check each 0.5s
-            global mtime
-            mtime = 500
-            self.timer.Start(mtime)
-            
-        return True
-    
+        self.Map.query.connect(
+            lambda ltype,
+            maps: self.mapFrm.SetQueryLayersAndActivate(
+                ltype=ltype,
+                maps=maps))
+
+        return self.mapFrm
+
     def OnExit(self):
         if __name__ == "__main__":
             # stop the timer
@@ -391,20 +550,25 @@ class MapApp(wx.App):
             # terminate thread
             for f in monFile.itervalues():
                 try_remove(f)
-            
+
     def watcher(self):
         """Redraw, if new layer appears (check's timestamp of
         cmdfile)
         """
-        try:
-            # GISBASE and other system enviromental variables can not be used
-            # since the process inherited them from GRASS
-            # raises exception when vaiable does not exists
-            grass.gisenv()['GISDBASE']
-        except KeyError:
-            self.timer.Stop()
-            return
-        
+        ###
+        # TODO: find a better solution
+        ###
+        # the check below disabled, it's too much invasive to call
+        # g.gisenv in the watcher...
+        # try:
+        # GISBASE and other system enviromental variables can not be used
+        # since the process inherited them from GRASS
+        # raises exception when vaiable does not exists
+        # grass.gisenv()['GISDBASE']
+        # except KeyError:
+        #    self.timer.Stop()
+        #    return
+
         # todo: events
         try:
             currentCmdFileTime = os.path.getmtime(monFile['cmd'])
@@ -422,52 +586,52 @@ class MapApp(wx.App):
         return self.mapFrm
 
 if __name__ == "__main__":
-    # set command variable
-    if len(sys.argv) < 5:
+    if len(sys.argv) != 6:
         print __doc__
-        sys.exit(1)
-    
+        sys.exit(0)
+
+    # set command variable
     monName = sys.argv[1]
-    monFile = { 'map' : sys.argv[2],
-                'cmd' : sys.argv[3],
-                'env' : sys.argv[4],
-                }
-    if len(sys.argv) >= 6:
-        try:
-            monSize[0] = int(sys.argv[5])
-        except ValueError:
-            pass
-    
-    if len(sys.argv) == 7:
-        try:
-            monSize[1] = int(sys.argv[6])
-        except ValueError:
-            pass
+    monPath = sys.argv[2]
+    monFile = {'map': os.path.join(monPath, 'map.ppm'),
+               'cmd': os.path.join(monPath, 'cmd'),
+               'env': os.path.join(monPath, 'env')}
+
+    # monitor size
+    monSize = (int(sys.argv[3]), int(sys.argv[4]))
 
-    
+    monDecor = not bool(int(sys.argv[5]))
     grass.verbose(_("Starting map display <%s>...") % (monName))
 
+    # create pid file
+    pidFile = os.path.join(monPath, "pid")
+    fd = open(pidFile, 'w')
+    if not fd:
+        grass.fatal(_("Unable to create file <%s>") % pidFile)
+    fd.write("%s\n" % os.getpid())
+    fd.close()
+
     RunCommand('g.gisenv',
-               set = 'MONITOR_%s_PID=%d' % (monName.upper(), os.getpid()))
-    
+               set='MONITOR_%s_PID=%d' % (monName.upper(), os.getpid()))
+
+    start = time.time()
     gmMap = MapApp(0)
-    # set title
-    gmMap.mapFrm.SetTitle(monName)
-    
+    mapFrame = gmMap.CreateMapFrame(monName, monDecor)
+    mapFrame.Show()
+    Debug.msg(1, "WxMonitor started in %.6f sec" %
+              (time.time() - start))
+
     gmMap.MainLoop()
-    
+
     grass.verbose(_("Stopping map display <%s>...") % (monName))
 
     # clean up GRASS env variables
-    env = grass.gisenv()
-    env_name = 'MONITOR_%s' % monName.upper()
-    unset = list()
-    for key in env.keys():
-        if key.find(env_name) == 0 or \
-           (key == 'MONITOR' and env[key] == monName):
-            unset.append(key)
-    if unset:
-        RunCommand('g.gisenv',
-                   unset = '%s' % ','.join(unset))
-    
+    try:
+        shutil.rmtree(monPath)
+    except OSError:
+        pass
+
+    RunCommand('g.gisenv',
+               unset='MONITOR')
+
     sys.exit(0)
diff --git a/gui/wxpython/mapdisp/statusbar.py b/gui/wxpython/mapdisp/statusbar.py
index 28c165b..e390363 100644
--- a/gui/wxpython/mapdisp/statusbar.py
+++ b/gui/wxpython/mapdisp/statusbar.py
@@ -34,26 +34,29 @@ This program is free software under the GNU General Public License
 import copy
 import wx
 
-from core          import utils
-from core.gcmd     import GMessage, RunCommand
+from core import utils
+from core.gcmd import GMessage, RunCommand
 from core.settings import UserSettings
 from core.utils import _
 
-from grass.script  import core as grass
+from grass.script import core as grass
 
 from grass.pydispatch.signal import Signal
 
+
 class SbException:
     """Exception class used in SbManager and SbItems"""
+
     def __init__(self, message):
         self.message = message
+
     def __str__(self):
         return self.message
 
 
 class SbManager:
     """Statusbar manager for wx.Statusbar and SbItems.
-    
+
     Statusbar manager manages items added by AddStatusbarItem method.
     Provides progress bar (SbProgress) and choice (wx.Choice).
     Items with position 0 are shown according to choice selection.
@@ -62,30 +65,31 @@ class SbManager:
     and call Update method to show particular widgets.
     User settings (group = 'display', key = 'statusbarMode', subkey = 'selection')
     are taken into account.
-    
+
     .. todo::
-        generalize access to UserSettings (specify group, etc.) 
+        generalize access to UserSettings (specify group, etc.)
 
     .. todo::
         add GetMode method using name instead of index
     """
+
     def __init__(self, mapframe, statusbar):
         """Connects manager to statusbar
-        
+
         Creates choice and progress bar.
         """
         self.mapFrame = mapframe
         self.statusbar = statusbar
-        
+
         self.choice = wx.Choice(self.statusbar, wx.ID_ANY)
-        
+
         self.choice.Bind(wx.EVT_CHOICE, self.OnToggleStatus)
-        
+
         self.statusbarItems = dict()
-        
+
         self._postInitialized = False
         self._modeIndexSet = False
-        
+
         self.progressbar = SbProgress(self.mapFrame, self.statusbar, self)
         self.progressbar.progressShown.connect(self._progressShown)
         self.progressbar.progressHidden.connect(self._progressHidden)
@@ -93,66 +97,66 @@ class SbManager:
         self._oldStatus = ''
 
         self._hiddenItems = {}
-    
+
     def SetProperty(self, name, value):
         """Sets property represented by one of contained SbItems
-            
+
         :param name: name of SbItem (from name attribute)
         :param value: value to be set
         """
         self.statusbarItems[name].SetValue(value)
-        
+
     def GetProperty(self, name):
         """Returns property represented by one of contained SbItems
-        
+
         :param name: name of SbItem (from name attribute)
         """
         return self.statusbarItems[name].GetValue()
-        
+
     def HasProperty(self, name):
         """Checks whether property is represented by one of contained SbItems
-        
+
         :param name: name of SbItem (from name attribute)
-        
+
         :return: True if particular SbItem is contained, False otherwise
         """
         if name in self.statusbarItems:
             return True
         return False
-    
+
     def AddStatusbarItem(self, item):
         """Adds item to statusbar
-        
-        If item position is 0, item is managed by choice.        
-        
+
+        If item position is 0, item is managed by choice.
+
         :func:`AddStatusbarItemsByClass`
         """
         self.statusbarItems[item.name] = item
         if item.GetPosition() == 0:
-            self.choice.Append(item.label, clientData = item) #attrError?
-            
+            self.choice.Append(item.label, clientData=item)  # attrError?
+
     def AddStatusbarItemsByClass(self, itemClasses, **kwargs):
         """Adds items to statusbar
 
         :param list itemClasses: list of classes of items to be add
         :param kwargs: SbItem constructor parameters
-        
+
         :func:`AddStatusbarItem`
         """
         for Item in itemClasses:
             item = Item(**kwargs)
             self.AddStatusbarItem(item)
-                      
+
     def HideStatusbarChoiceItemsByClass(self, itemClasses):
         """Hides items showed in choice
-        
+
         Hides items with position 0 (items showed in choice) by removing
         them from choice.
-        
+
         :param itemClasses list of classes of items to be hided
-        
+
         :func:`ShowStatusbarChoiceItemsByClass`
-        
+
         .. todo::
             consider adding similar function which would take item names
         """
@@ -164,18 +168,18 @@ class SbManager:
                     index.append(i)
                     self._hiddenItems[i] = item
         # must be sorted in reverse order to be removed correctly
-        for i in sorted(index, reverse = True):
+        for i in sorted(index, reverse=True):
             self.choice.Delete(i)
-        
+
     def ShowStatusbarChoiceItemsByClass(self, itemClasses):
         """Shows items showed in choice
-        
+
         Shows items with position 0 (items showed in choice) by adding
         them to choice.
         Items are restored in their old positions.
-        
+
         :param itemClasses list of classes of items to be showed
-        
+
         :func:`HideStatusbarChoiceItemsByClass`
         """
         # must be sorted to be inserted correctly
@@ -183,38 +187,38 @@ class SbManager:
             item = self._hiddenItems[pos]
             if item.__class__ in itemClasses:
                 self.choice.Insert(item.label, pos, item)
-        
+
     def ShowItem(self, itemName):
         """Invokes showing of particular item
-        
+
         :func:`Update`
         """
         if self.statusbarItems[itemName].GetPosition() != 0 or \
            not self.progressbar.IsShown():
             self.statusbarItems[itemName].Show()
-        
+
     def _postInit(self):
         """Post-initialization method
-        
+
         It sets internal user settings,
         set choice's selection (from user settings) and does reposition.
         It needs choice filled by items.
         it is called automatically.
         """
-        UserSettings.Set(group = 'display',
-                         key = 'statusbarMode',
-                         subkey = 'choices',
-                         value = self.choice.GetItems(),
+        UserSettings.Set(group='display',
+                         key='statusbarMode',
+                         subkey='choices',
+                         value=self.choice.GetItems(),
                          settings_type='internal')
 
         if not self._modeIndexSet:
-            self.choice.SetSelection(UserSettings.Get(group = 'display',
-                                                      key = 'statusbarMode',
-                                                      subkey = 'selection'))
+            self.choice.SetSelection(UserSettings.Get(group='display',
+                                                      key='statusbarMode',
+                                                      subkey='selection'))
         self.Reposition()
-        
+
         self._postInitialized = True
-        
+
     def Update(self):
         """Updates statusbar
 
@@ -229,33 +233,33 @@ class SbManager:
                 if not self.progressbar.IsShown():
                     item.Hide()
             else:
-                item.Update() # mask, render
+                item.Update()  # mask, render
 
         if self.progressbar.IsShown():
             pass
         elif self.choice.GetCount() > 0:
             item = self.choice.GetClientData(self.choice.GetSelection())
             item.Update()
-        
+
     def Reposition(self):
         """Reposition items in statusbar
-        
+
         Set positions to all items managed by statusbar manager.
         It should not be necessary to call it manually.
         """
-        
+
         widgets = []
         for item in self.statusbarItems.values():
             widgets.append((item.GetPosition(), item.GetWidget()))
-            
+
         widgets.append((1, self.choice))
         widgets.append((1, self.progressbar.GetWidget()))
-                
+
         for idx, win in widgets:
             if not win:
                 continue
             rect = self.statusbar.GetFieldRect(idx)
-            if idx == 0: # show region / mapscale / process bar
+            if idx == 0:  # show region / mapscale / process bar
                 # -> size
                 wWin, hWin = win.GetBestSize()
                 # -> position
@@ -265,19 +269,19 @@ class SbManager:
                 # else:
                 x, y = rect.x + 3, rect.y - 1
                 w, h = wWin, rect.height + 2
-            else: # choice || auto-rendering
+            else:  # choice || auto-rendering
                 x, y = rect.x, rect.y
                 w, h = rect.width, rect.height + 1
                 if win == self.progressbar.GetWidget():
                     wWin = rect.width - 6
-                if idx == 2: # mask
+                if idx == 2:  # mask
                     x += 5
                     y += 4
-                elif idx == 3: # render
+                elif idx == 3:  # render
                     x += 5
             win.SetPosition((x, y))
             win.SetSize((w, h))
-        
+
     def GetProgressBar(self):
         """Returns progress bar"""
         return self.progressbar
@@ -294,21 +298,21 @@ class SbManager:
         """Toggle status text
         """
         self.Update()
-        if event.GetSelection() == 3: # use something better than magic numbers
+        if event.GetSelection() == 3:  # use something better than magic numbers
             # show computation region extent by default
             self.statusbarItems['region'].SetValue(True)
             # redraw map if auto-rendering is enabled
             if self.mapFrame.IsAutoRendered():
                 self.mapFrame.OnRender(None)
-        
+
     def SetMode(self, modeIndex):
         """Sets current mode
-        
+
         Mode is usually driven by user through choice.
         """
         self._modeIndexSet = True
         self.choice.SetSelection(modeIndex)
-    
+
     def GetMode(self):
         """Returns current mode"""
         return self.choice.GetSelection()
@@ -319,10 +323,19 @@ class SbManager:
         self.progressbar.SetValue(value)
         if text:
             self.statusbar.SetStatusText(text)
-        
+
+    def Show(self, show=True):
+        """Show/hide statusbar"""
+        self.statusbar.Show(show)
+
+    def IsShown(self):
+        """Check if statusbar is shown"""
+        return self.statusbar.IsShown()
+
+
 class SbItem:
     """Base class for statusbar items.
-    
+
     Each item represents functionality (or action) controlled by statusbar
     and related to MapFrame.
     One item is usually connected with one widget but it is not necessary.
@@ -330,80 +343,83 @@ class SbItem:
     Items are not widgets but can provide interface to them.
     Items usually has requirements to MapFrame instance
     (specified as MapFrame.methodname or MapWindow.methodname).
-    
+
     .. todo::
         consider externalizing position (see SbProgress use in SbManager)
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         """
-        
+
         :param mapframe: instance of class with MapFrame interface
         :param statusbar: statusbar instance (wx.Statusbar)
         :param position: item position in statusbar
-        
+
         .. todo::
             rewrite Update also in derived classes to take in account item position
         """
         self.mapFrame = mapframe
         self.statusbar = statusbar
         self.position = position
-    
+
     def Show(self):
         """Invokes showing of underlying widget.
-        
+
         In derived classes it can do what is appropriate for it,
         e.g. showing text on statusbar (only).
         """
         self.widget.Show()
-        
+
     def Hide(self):
         self.widget.Hide()
-        
+
     def SetValue(self, value):
         self.widget.SetValue(value)
-    
+
     def GetValue(self):
         return self.widget.GetValue()
-        
+
     def GetPosition(self):
         return self.position
-    
+
     def GetWidget(self):
         """Returns underlaying winget.
-        
+
         :return: widget or None if doesn't exist
         """
         return self.widget
-    
+
     def _update(self, longHelp):
         """Default implementation for Update method.
-        
+
         :param longHelp: True to enable long help (help from toolbars)
         """
         self.statusbar.SetStatusText("", 0)
         self.Show()
         self.mapFrame.StatusbarEnableLongHelp(longHelp)
-        
+
     def Update(self):
         """Called when statusbar action is activated (e.g. through wx.Choice).
         """
-        self._update(longHelp = False)
+        self._update(longHelp=False)
+
 
 class SbRender(SbItem):
     """Checkbox to enable and disable auto-rendering.
-    
+
     Requires MapFrame.OnRender method.
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'render'
         self._properties = mapframe.mapWindowProperties
-        self.widget = wx.CheckBox(parent = self.statusbar, id = wx.ID_ANY,
-                                  label = _("Render"))
-        
+        self.widget = wx.CheckBox(parent=self.statusbar, id=wx.ID_ANY,
+                                  label=_("Render"))
+
         self.widget.SetValue(self._properties.autoRender)
         self.widget.Hide()
-        self.widget.SetToolTip(wx.ToolTip (_("Enable/disable auto-rendering")))
+        self.widget.SetToolTip(wx.ToolTip(_("Enable/disable auto-rendering")))
 
         self._connectAutoRender()
         self.widget.Bind(wx.EVT_CHECKBOX, self._onCheckbox)
@@ -424,28 +440,33 @@ class SbRender(SbItem):
 
     def Update(self):
         self.Show()
-        
+
+
 class SbShowRegion(SbItem):
     """Checkbox to enable and disable showing of computational region.
-    
+
     Requires MapFrame.OnRender, MapFrame.IsAutoRendered, MapFrame.GetWindow.
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'region'
         self.label = _("Show comp. extent")
         self._properties = mapframe.mapWindowProperties
 
-        self.widget = wx.CheckBox(parent = self.statusbar, id = wx.ID_ANY,
-                                  label = _("Show computational extent"))
+        self.widget = wx.CheckBox(parent=self.statusbar, id=wx.ID_ANY,
+                                  label=_("Show computational extent"))
         self.widget.SetValue(self._properties.showRegion)
         self.widget.Hide()
-        self.widget.SetToolTip(wx.ToolTip (_("Show/hide computational "
-                                             "region extent (set with g.region). "
-                                             "Display region drawn as a blue box inside the "
-                                             "computational region, "
-                                             "computational region inside a display region "
-                                             "as a red box).")))
+        self.widget.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Show/hide computational "
+                    "region extent (set with g.region). "
+                    "Display region drawn as a blue box inside the "
+                    "computational region, "
+                    "computational region inside a display region "
+                    "as a red box).")))
         self.widget.Bind(wx.EVT_CHECKBOX, self.OnToggleShowRegion)
         self._connectShowRegion()
 
@@ -460,7 +481,7 @@ class SbShowRegion(SbItem):
 
     def OnToggleShowRegion(self, event):
         """Shows/Hides extent (comp. region) in map canvas.
-        
+
         Shows or hides according to checkbox value.
 
         .. todo::
@@ -480,26 +501,32 @@ class SbShowRegion(SbItem):
         SbItem.SetValue(self, value)
         self._connectShowRegion()
 
+
 class SbAlignExtent(SbItem):
     """Checkbox to select zoom behavior.
-    
+
     Used by BufferedWindow (through MapFrame property).
     See tooltip for explanation.
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'alignExtent'
         self.label = _("Display mode")
         self._properties = mapframe.mapWindowProperties
 
-        self.widget = wx.CheckBox(parent = self.statusbar, id = wx.ID_ANY,
-                                  label = _("Align region extent based on display size"))
+        self.widget = wx.CheckBox(
+            parent=self.statusbar, id=wx.ID_ANY,
+            label=_("Align region extent based on display size"))
         self.widget.SetValue(self._properties.alignExtent)
         self.widget.Hide()
-        self.widget.SetToolTip(wx.ToolTip (_("Align region extent based on display "
-                                             "size from center point. "
-                                             "Default value for new map displays can "
-                                             "be set up in 'User GUI settings' dialog.")))      
+        self.widget.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Align region extent based on display "
+                    "size from center point. "
+                    "Default value for new map displays can "
+                    "be set up in 'User GUI settings' dialog.")))
         self._connectAlignExtent()
         self.widget.Bind(wx.EVT_CHECKBOX, self._onCheckbox)
 
@@ -523,23 +550,27 @@ class SbAlignExtent(SbItem):
 
 class SbResolution(SbItem):
     """Checkbox to select used display resolution.
-    
-    Requires MapFrame.OnRender method. 
+
+    Requires MapFrame.OnRender method.
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'resolution'
         self.label = _("Display resolution")
         self._properties = self.mapFrame.mapWindowProperties
-        self.widget = wx.CheckBox(parent = self.statusbar, id = wx.ID_ANY,
-                                  label = _("Constrain display resolution to computational settings"))
+        self.widget = wx.CheckBox(parent=self.statusbar, id=wx.ID_ANY, label=_(
+            "Constrain display resolution to computational settings"))
         self.widget.SetValue(self._properties.resolution)
         self.widget.Hide()
-        self.widget.SetToolTip(wx.ToolTip (_("Constrain display resolution "
-                                             "to computational region settings. "
-                                             "Default value for new map displays can "
-                                             "be set up in 'User GUI settings' dialog.")))
-                                            
+        self.widget.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Constrain display resolution "
+                    "to computational region settings. "
+                    "Default value for new map displays can "
+                    "be set up in 'User GUI settings' dialog.")))
+
         self.widget.Bind(wx.EVT_CHECKBOX, self.OnToggleUpdateMap)
         self._connectResolutionChange()
 
@@ -565,19 +596,20 @@ class SbResolution(SbItem):
 
 class SbMapScale(SbItem):
     """Editable combobox to get/set current map scale.
-    
+
     Requires MapFrame.GetMapScale, MapFrame.SetMapScale
     and MapFrame.GetWindow (and GetWindow().UpdateMap()).
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'mapscale'
         self.label = _("Map scale")
-        
-        self.widget = wx.ComboBox(parent = self.statusbar, id = wx.ID_ANY,
-                                                    style = wx.TE_PROCESS_ENTER,
-                                                    size = (150, -1))
-        
+
+        self.widget = wx.ComboBox(parent=self.statusbar, id=wx.ID_ANY,
+                                  style=wx.TE_PROCESS_ENTER,
+                                  size=(150, -1))
+
         self.widget.SetItems(['1:1000',
                               '1:5000',
                               '1:10000',
@@ -586,14 +618,17 @@ class SbMapScale(SbItem):
                               '1:100000',
                               '1:1000000'])
         self.widget.Hide()
-        self.widget.SetToolTip(wx.ToolTip (_("As everyone's monitors and resolutions "
-                                            "are set differently these values are not "
-                                            "true map scales, but should get you into "
-                                            "the right neighborhood.")))
-                                            
+        self.widget.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "As everyone's monitors and resolutions "
+                    "are set differently these values are not "
+                    "true map scales, but should get you into "
+                    "the right neighborhood.")))
+
         self.widget.Bind(wx.EVT_TEXT_ENTER, self.OnChangeMapScale)
         self.widget.Bind(wx.EVT_COMBOBOX, self.OnChangeMapScale)
-        
+
         self.lastMapScale = None
 
     def Update(self):
@@ -602,8 +637,8 @@ class SbMapScale(SbItem):
         try:
             self.SetValue("1:%ld" % (scale + 0.5))
         except TypeError:
-            pass # FIXME, why this should happen?
-        
+            pass  # FIXME, why this should happen?
+
         self.lastMapScale = scale
         self.Show()
 
@@ -622,67 +657,67 @@ class SbMapScale(SbItem):
         except ValueError:
             self.SetValue('1:%ld' % int(self.lastMapScale))
             return
-        
+
         self.mapFrame.SetMapScale(value)
-        
+
         # redraw a map
         self.mapFrame.GetWindow().UpdateMap()
         self.GetWidget().SetFocus()
-        
-        
+
+
 class SbGoTo(SbItem):
     """Textctrl to set coordinates which to focus on.
-    
+
     Requires MapFrame.GetWindow, MapWindow.GoTo method.
     """
-    
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'goto'
         self.label = _("Go to")
-        
-        self.widget = wx.TextCtrl(parent = self.statusbar, id = wx.ID_ANY,
-                                                value = "", style = wx.TE_PROCESS_ENTER,
-                                                size = (300, -1))
-        
+
+        self.widget = wx.TextCtrl(parent=self.statusbar, id=wx.ID_ANY,
+                                  value="", style=wx.TE_PROCESS_ENTER,
+                                  size=(300, -1))
+
         self.widget.Hide()
-        
+
         self.widget.Bind(wx.EVT_TEXT_ENTER, self.OnGoTo)
-    
+
     def ReprojectENToMap(self, e, n, useDefinedProjection):
         """Reproject east, north from user defined projection
-        
+
         :param e,n: coordinate (for DMS string, else float or string)
         :param useDefinedProjection: projection defined by user in settings dialog
-        
+
         @throws SbException if useDefinedProjection is True and projection is not defined in UserSettings
         """
         if useDefinedProjection:
-            settings = UserSettings.Get(group = 'projection', key = 'statusbar', subkey = 'proj4')
+            settings = UserSettings.Get(
+                group='projection', key='statusbar', subkey='proj4')
             if not settings:
-                raise SbException(_("Projection not defined (check the settings)"))
+                raise SbException(
+                    _("Projection not defined (check the settings)"))
             else:
                 # reproject values
                 projIn = settings
                 projOut = RunCommand('g.proj',
-                                     flags = 'jf',
-                                     read = True)
+                                     flags='jf',
+                                     read=True)
                 proj = projIn.split(' ')[0].split('=')[1]
                 if proj in ('ll', 'latlong', 'longlat'):
                     e, n = utils.DMS2Deg(e, n)
-                    proj, coord1 = utils.ReprojectCoordinates(coord = (e, n),
-                                                              projIn = projIn,
-                                                              projOut = projOut, flags = 'd')
+                    proj, coord1 = utils.ReprojectCoordinates(
+                        coord=(e, n), projIn=projIn, projOut=projOut, flags='d')
                     e, n = coord1
                 else:
                     e, n = float(e), float(n)
-                    proj, coord1 = utils.ReprojectCoordinates(coord = (e, n),
-                                                              projIn = projIn,
-                                                              projOut = projOut, flags = 'd')
+                    proj, coord1 = utils.ReprojectCoordinates(
+                        coord=(e, n), projIn=projIn, projOut=projOut, flags='d')
                     e, n = coord1
         elif self.mapFrame.GetMap().projinfo['proj'] == 'll':
             e, n = utils.DMS2Deg(e, n)
-        else: 
+        else:
             e, n = float(e), float(n)
         return e, n
 
@@ -691,221 +726,258 @@ class SbGoTo(SbItem):
         """
         try:
             e, n = self.GetValue().split(';')
-            e, n = self.ReprojectENToMap(e, n, self.mapFrame.GetProperty('projection'))
+            e, n = self.ReprojectENToMap(
+                e, n, self.mapFrame.GetProperty('projection'))
             self.mapFrame.GetWindow().GoTo(e, n)
             self.widget.SetFocus()
         except ValueError:
             # FIXME: move this code to MapWindow/BufferedWindow/MapFrame
             region = self.mapFrame.GetMap().GetCurrentRegion()
-            precision = int(UserSettings.Get(group = 'projection', key = 'format',
-                                             subkey = 'precision'))
-            format = UserSettings.Get(group = 'projection', key = 'format',
-                                      subkey = 'll')
-            if self.mapFrame.GetMap().projinfo['proj'] == 'll' and format == 'DMS':
-                self.SetValue("%s" % utils.Deg2DMS(region['center_easting'], 
-                                                                            region['center_northing'],
-                                                                            precision = precision))
+            precision = int(UserSettings.Get(group='projection', key='format',
+                                             subkey='precision'))
+            format = UserSettings.Get(group='projection', key='format',
+                                      subkey='ll')
+            if self.mapFrame.GetMap().projinfo[
+                    'proj'] == 'll' and format == 'DMS':
+                self.SetValue("%s" % utils.Deg2DMS(region['center_easting'],
+                                                   region['center_northing'],
+                                                   precision=precision))
             else:
-                self.SetValue("%.*f; %.*f" % \
-                               (precision, region['center_easting'],
-                                precision, region['center_northing']))
+                self.SetValue("%.*f; %.*f" %
+                              (precision, region['center_easting'],
+                               precision, region['center_northing']))
         except SbException as e:
-            # FIXME: this may be useless since statusbar update checks user defined projection and this exception raises when user def proj does not exists
+            # FIXME: this may be useless since statusbar update checks user
+            # defined projection and this exception raises when user def proj
+            # does not exists
             self.statusbar.SetStatusText(str(e), 0)
 
     def GetCenterString(self, map):
         """Get current map center in appropriate format"""
         region = map.GetCurrentRegion()
-        precision = int(UserSettings.Get(group = 'projection', key = 'format',
-                                         subkey = 'precision'))
-        format = UserSettings.Get(group = 'projection', key = 'format',
-                                  subkey = 'll')
-        projection = UserSettings.Get(group='projection', key='statusbar', subkey='proj4')
-        
+        precision = int(UserSettings.Get(group='projection', key='format',
+                                         subkey='precision'))
+        format = UserSettings.Get(group='projection', key='format',
+                                  subkey='ll')
+        projection = UserSettings.Get(
+            group='projection',
+            key='statusbar',
+            subkey='proj4')
+
         if self.mapFrame.GetProperty('projection'):
             if not projection:
-                raise SbException(_("Projection not defined (check the settings)"))
+                raise SbException(
+                    _("Projection not defined (check the settings)"))
             else:
-                proj, coord  = utils.ReprojectCoordinates(coord = (region['center_easting'],
-                                                                   region['center_northing']),
-                                                          projOut = projection,
-                                                          flags = 'd')
+                proj, coord = utils.ReprojectCoordinates(
+                    coord=(region['center_easting'],
+                           region['center_northing']),
+                    projOut=projection, flags='d')
                 if coord:
-                    if proj in ('ll', 'latlong', 'longlat') and format == 'DMS':
+                    if proj in ('ll', 'latlong',
+                                'longlat') and format == 'DMS':
                         return "%s" % utils.Deg2DMS(coord[0],
-                                                                                coord[1],
-                                                                                precision = precision)
+                                                    coord[1],
+                                                    precision=precision)
                     else:
-                        return "%.*f; %.*f" % (precision, coord[0], precision, coord[1])
+                        return "%.*f; %.*f" % (precision,
+                                               coord[0], precision, coord[1])
                 else:
-                    raise SbException(_("Error in projection (check the settings)"))
+                    raise SbException(
+                        _("Error in projection (check the settings)"))
         else:
-            if self.mapFrame.GetMap().projinfo['proj'] == 'll' and format == 'DMS':
-                return "%s" % utils.Deg2DMS(region['center_easting'], region['center_northing'],
-                                                                      precision = precision)
+            if self.mapFrame.GetMap().projinfo[
+                    'proj'] == 'll' and format == 'DMS':
+                return "%s" % utils.Deg2DMS(
+                    region['center_easting'],
+                    region['center_northing'],
+                    precision=precision)
             else:
-                return "%.*f; %.*f" % (precision, region['center_easting'], precision, region['center_northing'])
-
+                return "%.*f; %.*f" % (
+                    precision, region['center_easting'],
+                    precision, region['center_northing'])
 
     def SetCenter(self):
         """Set current map center as item value"""
         center = self.GetCenterString(self.mapFrame.GetMap())
         self.SetValue(center)
-        
+
     def Update(self):
         self.statusbar.SetStatusText("")
-        
+
         try:
             self.SetCenter()
             self.Show()
         except SbException as e:
             self.statusbar.SetStatusText(str(e), 0)
-                        
+
         # disable long help
         self.mapFrame.StatusbarEnableLongHelp(False)
-        
+
 
 class SbProjection(SbItem):
     """Checkbox to enable user defined projection (can be set in settings)"""
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'projection'
         self.label = _("Projection")
-        
+
         self.defaultLabel = _("Use defined projection")
-        
-        self.widget = wx.CheckBox(parent = self.statusbar, id = wx.ID_ANY,
-                                  label = self.defaultLabel)
-        
+
+        self.widget = wx.CheckBox(parent=self.statusbar, id=wx.ID_ANY,
+                                  label=self.defaultLabel)
+
         self.widget.SetValue(False)
-        
+
         # necessary?
         size = self.widget.GetSize()
         self.widget.SetMinSize((size[0] + 150, size[1]))
-        
+
         self.widget.Hide()
-        self.widget.SetToolTip(wx.ToolTip (_("Reproject coordinates displayed "
-                                             "in the statusbar. Projection can be "
-                                             "defined in GUI preferences dialog "
-                                             "(tab 'Projection')")))
-                                            
+        self.widget.SetToolTip(
+            wx.ToolTip(
+                _(
+                    "Reproject coordinates displayed "
+                    "in the statusbar. Projection can be "
+                    "defined in GUI preferences dialog "
+                    "(tab 'Projection')")))
+
     def Update(self):
         self.statusbar.SetStatusText("")
-        epsg = UserSettings.Get(group = 'projection', key = 'statusbar', subkey = 'epsg')
+        epsg = UserSettings.Get(
+            group='projection',
+            key='statusbar',
+            subkey='epsg')
         if epsg:
             label = '%s (EPSG: %s)' % (self.defaultLabel, epsg)
             self.widget.SetLabel(label)
         else:
             self.widget.SetLabel(self.defaultLabel)
         self.Show()
-        
+
         # disable long help
         self.mapFrame.StatusbarEnableLongHelp(False)
-        
+
 
 class SbMask(SbItem):
     """StaticText to show whether mask is activated."""
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'mask'
-        
-        self.widget = wx.StaticText(parent = self.statusbar, id = wx.ID_ANY, label = _('MASK'))
+
+        self.widget = wx.StaticText(
+            parent=self.statusbar,
+            id=wx.ID_ANY,
+            label=_('MASK'))
         self.widget.SetForegroundColour(wx.Colour(255, 0, 0))
         self.widget.Hide()
-        
+
     def Update(self):
-        if grass.find_file(name = 'MASK', element = 'cell',
-                           mapset = grass.gisenv()['MAPSET'])['name']:
+        if grass.find_file(name='MASK', element='cell',
+                           mapset=grass.gisenv()['MAPSET'])['name']:
             self.Show()
         else:
             self.Hide()
-        
+
+
 class SbTextItem(SbItem):
     """Base class for items without widgets.
-    
+
     Only sets statusbar text.
     """
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbItem.__init__(self, mapframe, statusbar, position)
-        
+
         self.text = None
-        
+
     def Show(self):
         self.statusbar.SetStatusText(self.GetValue(), self.position)
-        
+
     def Hide(self):
         self.statusbar.SetStatusText("", self.position)
-        
+
     def SetValue(self, value):
         self.text = value
-    
+
     def GetValue(self):
         return self.text
-            
+
     def GetWidget(self):
         return None
-    
+
     def Update(self):
-        self._update(longHelp = True)
+        self._update(longHelp=True)
+
 
 class SbDisplayGeometry(SbTextItem):
     """Show current display resolution."""
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbTextItem.__init__(self, mapframe, statusbar, position)
         self.name = 'displayGeometry'
         self.label = _("Display geometry")
-        
+
     def Show(self):
         region = copy.copy(self.mapFrame.GetMap().GetCurrentRegion())
         if self.mapFrame.mapWindowProperties.resolution:
-            compRegion = self.mapFrame.GetMap().GetRegion(add3d = False)
-            region['rows'] = abs(int((region['n'] - region['s']) / compRegion['nsres']) + 0.5)
-            region['cols'] = abs(int((region['e'] - region['w']) / compRegion['ewres']) + 0.5)
+            compRegion = self.mapFrame.GetMap().GetRegion(add3d=False)
+            region['rows'] = abs(
+                int((region['n'] - region['s']) / compRegion['nsres']) + 0.5)
+            region['cols'] = abs(
+                int((region['e'] - region['w']) / compRegion['ewres']) + 0.5)
             region['nsres'] = compRegion['nsres']
             region['ewres'] = compRegion['ewres']
         self.SetValue("rows=%d; cols=%d; nsres=%.2f; ewres=%.2f" %
-                     (region["rows"], region["cols"],
-                      region["nsres"], region["ewres"]))
+                      (region["rows"], region["cols"],
+                       region["nsres"], region["ewres"]))
         SbTextItem.Show(self)
 
+
 class SbCoordinates(SbTextItem):
     """Show map coordinates when mouse moves.
-    
+
     Requires MapWindow.GetLastEN method."""
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbTextItem.__init__(self, mapframe, statusbar, position)
         self.name = 'coordinates'
         self.label = _("Coordinates")
         self._additionalInfo = None
         self._basicValue = None
-        
+
     def Show(self):
         """Show the last map window coordinates.
 
         .. todo::
             remove last EN call and use coordinates comming from signal
         """
-        precision = int(UserSettings.Get(group = 'projection', key = 'format',
-                             subkey = 'precision'))
-        format = UserSettings.Get(group = 'projection', key = 'format',
-                                       subkey = 'll')
+        precision = int(UserSettings.Get(group='projection', key='format',
+                                         subkey='precision'))
+        format = UserSettings.Get(group='projection', key='format',
+                                  subkey='ll')
         projection = self.mapFrame.GetProperty('projection')
         try:
             e, n = self.mapFrame.GetWindow().GetLastEN()
-            self._basicValue = self.ReprojectENFromMap(e, n, projection, precision, format)
+            self._basicValue = self.ReprojectENFromMap(
+                e, n, projection, precision, format)
             if self._additionalInfo:
-                value = "{coords} ({additionalInfo})".format(coords=self._basicValue,
-                                                             additionalInfo=self._additionalInfo)
+                value = "{coords} ({additionalInfo})".format(
+                    coords=self._basicValue, additionalInfo=self._additionalInfo)
             else:
                 value = self._basicValue
             self.SetValue(value)
         except SbException as e:
             self.SetValue(e.message)
-        # TODO: remove these excepts, they just hide errors, solve problems differently
+        # TODO: remove these excepts, they just hide errors, solve problems
+        # differently
         except TypeError as e:
             self.SetValue("")
         except AttributeError:
-            self.SetValue("") # during initialization MapFrame has no MapWindow
+            # during initialization MapFrame has no MapWindow
+            self.SetValue("")
         SbTextItem.Show(self)
 
     def SetAdditionalInfo(self, text):
@@ -921,62 +993,71 @@ class SbCoordinates(SbTextItem):
         """
         self._additionalInfo = text
 
-    def ReprojectENFromMap(self, e, n, useDefinedProjection, precision, format):
+    def ReprojectENFromMap(
+            self, e, n, useDefinedProjection, precision, format):
         """Reproject east, north to user defined projection.
-        
+
         :param e,n: coordinate
-        
+
         @throws SbException if useDefinedProjection is True and projection is not defined in UserSettings
         """
         if useDefinedProjection:
-            settings = UserSettings.Get(group = 'projection', key = 'statusbar', subkey = 'proj4')
+            settings = UserSettings.Get(
+                group='projection', key='statusbar', subkey='proj4')
             if not settings:
-                raise SbException(_("Projection not defined (check the settings)"))
+                raise SbException(
+                    _("Projection not defined (check the settings)"))
             else:
                 # reproject values
-                proj, coord  = utils.ReprojectCoordinates(coord = (e, n),
-                                                          projOut = settings,
-                                                          flags = 'd')
+                proj, coord = utils.ReprojectCoordinates(coord=(e, n),
+                                                         projOut=settings,
+                                                         flags='d')
                 if coord:
                     e, n = coord
-                    if proj in ('ll', 'latlong', 'longlat') and format == 'DMS':
-                        return utils.Deg2DMS(e, n, precision = precision)
+                    if proj in ('ll', 'latlong',
+                                'longlat') and format == 'DMS':
+                        return utils.Deg2DMS(e, n, precision=precision)
                     else:
                         return "%.*f; %.*f" % (precision, e, precision, n)
                 else:
-                    raise SbException(_("Error in projection (check the settings)"))
+                    raise SbException(
+                        _("Error in projection (check the settings)"))
         else:
-            if self.mapFrame.GetMap().projinfo['proj'] == 'll' and format == 'DMS':
-                return utils.Deg2DMS(e, n, precision = precision)
+            if self.mapFrame.GetMap().projinfo[
+                    'proj'] == 'll' and format == 'DMS':
+                return utils.Deg2DMS(e, n, precision=precision)
             else:
                 return "%.*f; %.*f" % (precision, e, precision, n)
-        
+
+
 class SbRegionExtent(SbTextItem):
     """Shows current display region"""
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbTextItem.__init__(self, mapframe, statusbar, position)
         self.name = 'displayRegion'
         self.label = _("Extent")
-        
+
     def Show(self):
-        precision = int(UserSettings.Get(group = 'projection', key = 'format',
-                             subkey = 'precision'))
-        format = UserSettings.Get(group = 'projection', key = 'format',
-                                       subkey = 'll')
-        projection = self.mapFrame.GetProperty('projection')        
+        precision = int(UserSettings.Get(group='projection', key='format',
+                                         subkey='precision'))
+        format = UserSettings.Get(group='projection', key='format',
+                                  subkey='ll')
+        projection = self.mapFrame.GetProperty('projection')
         region = self._getRegion()
         try:
-            regionReprojected = self.ReprojectRegionFromMap(region, projection, precision, format)
+            regionReprojected = self.ReprojectRegionFromMap(
+                region, projection, precision, format)
             self.SetValue(regionReprojected)
         except SbException as e:
             self.SetValue(e.message)
         SbTextItem.Show(self)
-    
+
     def _getRegion(self):
         """Get current display region"""
-        return self.mapFrame.GetMap().GetCurrentRegion() # display region
-        
-    def _formatRegion(self, w, e, s, n, nsres, ewres, precision = None):
+        return self.mapFrame.GetMap().GetCurrentRegion()  # display region
+
+    def _formatRegion(self, w, e, s, n, nsres, ewres, precision=None):
         """Format display region string for statusbar
 
         :param nsres,ewres: unused
@@ -986,118 +1067,134 @@ class SbRegionExtent(SbTextItem):
                                                  precision, s, precision, n)
         else:
             return "%s - %s, %s - %s" % (w, e, s, n)
-         
-           
-    def ReprojectRegionFromMap(self, region, useDefinedProjection, precision, format):
+
+    def ReprojectRegionFromMap(
+            self, region, useDefinedProjection, precision, format):
         """Reproject region values
-        
+
         .. todo::
             reorganize this method to remove code useful only for derived class SbCompRegionExtent
         """
         if useDefinedProjection:
-            settings = UserSettings.Get(group = 'projection', key = 'statusbar', subkey = 'proj4')
-            
+            settings = UserSettings.Get(
+                group='projection', key='statusbar', subkey='proj4')
+
             if not settings:
-                raise SbException(_("Projection not defined (check the settings)"))
+                raise SbException(
+                    _("Projection not defined (check the settings)"))
             else:
                 projOut = settings
-                proj, coord1 = utils.ReprojectCoordinates(coord = (region["w"], region["s"]),
-                                                          projOut = projOut, flags = 'd')
-                proj, coord2 = utils.ReprojectCoordinates(coord = (region["e"], region["n"]),
-                                                          projOut = projOut, flags = 'd')
+                proj, coord1 = utils.ReprojectCoordinates(
+                    coord=(region["w"], region["s"]), projOut=projOut, flags='d')
+                proj, coord2 = utils.ReprojectCoordinates(
+                    coord=(region["e"], region["n"]), projOut=projOut, flags='d')
                 # useless, used in derived class
-                proj, coord3 = utils.ReprojectCoordinates(coord = (0.0, 0.0),
-                                                          projOut = projOut, flags = 'd')
-                proj, coord4 = utils.ReprojectCoordinates(coord = (region["ewres"], region["nsres"]),
-                                                          projOut = projOut, flags = 'd')
+                proj, coord3 = utils.ReprojectCoordinates(
+                    coord=(0.0, 0.0), projOut=projOut, flags='d')
+                proj, coord4 = utils.ReprojectCoordinates(
+                    coord=(
+                        region
+                        ["ewres"],
+                        region
+                        ["nsres"]),
+                    projOut=projOut,
+                    flags='d')
                 if coord1 and coord2:
-                    if proj in ('ll', 'latlong', 'longlat') and format == 'DMS':
-                        w, s = utils.Deg2DMS(coord1[0], coord1[1], string = False,
-                                             precision = precision)
-                        e, n = utils.Deg2DMS(coord2[0], coord2[1], string = False,
-                                             precision = precision)
-                        ewres, nsres = utils.Deg2DMS(abs(coord3[0]) - abs(coord4[0]),
-                                                         abs(coord3[1]) - abs(coord4[1]),
-                                                         string = False, hemisphere = False,
-                                                         precision = precision)
-                        return self._formatRegion(w = w, s = s, e = e, n = n, ewres = ewres, nsres = nsres)
+                    if proj in ('ll', 'latlong',
+                                'longlat') and format == 'DMS':
+                        w, s = utils.Deg2DMS(
+                            coord1[0], coord1[1], string=False, precision=precision)
+                        e, n = utils.Deg2DMS(
+                            coord2[0], coord2[1], string=False, precision=precision)
+                        ewres, nsres = utils.Deg2DMS(
+                            abs(coord3[0]) - abs(coord4[0]),
+                            abs(coord3[1]) - abs(coord4[1]),
+                            string=False, hemisphere=False,
+                            precision=precision)
+                        return self._formatRegion(
+                            w=w, s=s, e=e, n=n, ewres=ewres, nsres=nsres)
                     else:
                         w, s = coord1
                         e, n = coord2
                         ewres, nsres = coord3
-                        return self._formatRegion(w = w, s = s, e = e, n = n, ewres = ewres,
-                                                  nsres = nsres, precision = precision)
+                        return self._formatRegion(
+                            w=w, s=s, e=e, n=n, ewres=ewres, nsres=nsres,
+                            precision=precision)
                 else:
-                    raise SbException(_("Error in projection (check the settings)"))
-                
+                    raise SbException(
+                        _("Error in projection (check the settings)"))
+
         else:
-            if self.mapFrame.GetMap().projinfo['proj'] == 'll' and format == 'DMS':
+            if self.mapFrame.GetMap().projinfo[
+                    'proj'] == 'll' and format == 'DMS':
                 w, s = utils.Deg2DMS(region["w"], region["s"],
-                                     string = False, precision = precision)
+                                     string=False, precision=precision)
                 e, n = utils.Deg2DMS(region["e"], region["n"],
-                                     string = False, precision = precision)
+                                     string=False, precision=precision)
                 ewres, nsres = utils.Deg2DMS(region['ewres'], region['nsres'],
-                                             string = False, precision = precision)
-                return self._formatRegion(w = w, s = s, e = e, n = n, ewres = ewres, nsres = nsres)
+                                             string=False, precision=precision)
+                return self._formatRegion(
+                    w=w, s=s, e=e, n=n, ewres=ewres, nsres=nsres)
             else:
                 w, s = region["w"], region["s"]
                 e, n = region["e"], region["n"]
                 ewres, nsres = region['ewres'], region['nsres']
-                return self._formatRegion(w = w, s = s, e = e, n = n, ewres = ewres,
-                                          nsres = nsres, precision = precision)
-                                
-                                
+                return self._formatRegion(w=w, s=s, e=e, n=n, ewres=ewres,
+                                          nsres=nsres, precision=precision)
+
+
 class SbCompRegionExtent(SbRegionExtent):
     """Shows computational region."""
-    def __init__(self, mapframe, statusbar, position = 0):
+
+    def __init__(self, mapframe, statusbar, position=0):
         SbRegionExtent.__init__(self, mapframe, statusbar, position)
         self.name = 'computationalRegion'
         self.label = _("Computational region")
-        
-    def _formatRegion(self, w, e, s, n, ewres, nsres, precision = None):
+
+    def _formatRegion(self, w, e, s, n, ewres, nsres, precision=None):
         """Format computational region string for statusbar"""
         if precision is not None:
-            return "%.*f - %.*f, %.*f - %.*f (%.*f, %.*f)" % (precision, w, precision, e,
-                                                              precision, s, precision, n,
-                                                              precision, ewres, precision, nsres)
+            return "%.*f - %.*f, %.*f - %.*f (%.*f, %.*f)" % (
+                precision, w, precision, e, precision, s, precision, n,
+                precision, ewres, precision, nsres)
         else:
             return "%s - %s, %s - %s (%s, %s)" % (w, e, s, n, ewres, nsres)
-        
+
     def _getRegion(self):
         """Returns computational region."""
-        return self.mapFrame.GetMap().GetRegion() # computational region
-        
-        
+        return self.mapFrame.GetMap().GetRegion()  # computational region
+
+
 class SbProgress(SbItem):
     """General progress bar to show progress.
-    
+
     Underlaying widget is wx.Gauge.
     """
-    def __init__(self, mapframe, statusbar, sbManager, position = 0):
+
+    def __init__(self, mapframe, statusbar, sbManager, position=0):
         self.progressShown = Signal('SbProgress.progressShown')
         self.progressHidden = Signal('SbProgress.progressHidden')
         SbItem.__init__(self, mapframe, statusbar, position)
         self.name = 'progress'
         self.sbManager = sbManager
         # on-render gauge
-        self.widget = wx.Gauge(parent = self.statusbar, id = wx.ID_ANY,
-                               range = 0, style = wx.GA_HORIZONTAL)
+        self.widget = wx.Gauge(parent=self.statusbar, id=wx.ID_ANY,
+                               range=0, style=wx.GA_HORIZONTAL)
         self.Hide()
-        
-        
+
     def GetRange(self):
         """Returns progress range."""
         return self.widget.GetRange()
-    
+
     def SetRange(self, range):
         """Sets progress range."""
-        if range > 0:        
+        if range > 0:
             if self.GetRange() != range:
                 self.widget.SetRange(range)
             self.Show()
         else:
             self.Hide()
-    
+
     def Show(self):
         if not self.IsShown():
             self.progressShown.emit()
@@ -1123,10 +1220,9 @@ class SbProgress(SbItem):
         if value == self.GetRange():
             self.Hide()
 
-
     def GetWidget(self):
         """Returns underlaying winget.
-        
+
         :return: widget or None if doesn't exist
         """
         return self.widget
diff --git a/gui/wxpython/mapdisp/test_mapdisp.py b/gui/wxpython/mapdisp/test_mapdisp.py
index ed4330b..d336e4e 100755
--- a/gui/wxpython/mapdisp/test_mapdisp.py
+++ b/gui/wxpython/mapdisp/test_mapdisp.py
@@ -68,6 +68,7 @@ from mapdisp.main import LayerList
 
 class MapdispGrassInterface(StandaloneGrassInterface):
     """@implements GrassInterface"""
+
     def __init__(self, map_):
         StandaloneGrassInterface.__init__(self)
         self._map = map_
@@ -93,12 +94,20 @@ def copyOfInitMap(map_, width, height):
 
 
 class TextShower(object):
+
     def __init__(self, parent, title):
         self._cf = wx.Frame(parent=parent, title=title)
         self._cp = wx.Panel(parent=self._cf, id=wx.ID_ANY)
         self._cs = wx.BoxSizer(wx.VERTICAL)
-        self._cl = wx.StaticText(parent=self._cp, id=wx.ID_ANY, label="No text set yet")
-        self._cs.Add(item=self._cl, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        self._cl = wx.StaticText(
+            parent=self._cp,
+            id=wx.ID_ANY,
+            label="No text set yet")
+        self._cs.Add(
+            item=self._cl,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         self._cp.SetSizer(self._cs)
         self._cp.Layout()
         self._cf.Show()
@@ -108,22 +117,31 @@ class TextShower(object):
 
 
 class Tester(object):
+
     def _listenToAllMapWindowSignals(self, window):
         output = sys.stderr
         # will make bad thigs after it is closed but who cares
         coordinatesShower = TextShower(window, "Coordinates")
 
         window.zoomChanged.connect(lambda: output.write("zoomChanged\n"))
-        window.zoomHistoryUnavailable.connect(lambda: output.write("zoomHistoryUnavailable\n"))
-        window.zoomHistoryAvailable.connect(lambda: output.write("zoomHistoryAvailable\n"))
+        window.zoomHistoryUnavailable.connect(
+            lambda: output.write("zoomHistoryUnavailable\n"))
+        window.zoomHistoryAvailable.connect(
+            lambda: output.write("zoomHistoryAvailable\n"))
 
         window.mapQueried.connect(lambda: output.write("mapQueried\n"))
         window.mouseEntered.connect(lambda: output.write("mouseEntered\n"))
-        window.mouseLeftUpPointer.connect(lambda: output.write("mouseLeftUpPointer\n"))
+        window.mouseLeftUpPointer.connect(
+            lambda: output.write("mouseLeftUpPointer\n"))
         window.mouseLeftUp.connect(lambda: output.write("mouseLeftUp\n"))
-        window.mouseMoving.connect(lambda x, y: coordinatesShower.SetLabel("%s , %s" % (x, y)))
-        window.mouseHandlerRegistered.connect(lambda: output.write("mouseHandlerRegistered\n"))
-        window.mouseHandlerUnregistered.connect(lambda: output.write("mouseHandlerUnregistered\n"))
+        window.mouseMoving.connect(
+            lambda x, y: coordinatesShower.SetLabel(
+                "%s , %s" %
+                (x, y)))
+        window.mouseHandlerRegistered.connect(
+            lambda: output.write("mouseHandlerRegistered\n"))
+        window.mouseHandlerUnregistered.connect(
+            lambda: output.write("mouseHandlerUnregistered\n"))
 
     def testMapWindow(self, giface, map_):
         self.frame = wx.Frame(parent=None, title=_("Map window test frame"))
@@ -154,7 +172,8 @@ class Tester(object):
         frame.Show()
 
     def testMapWindowApi(self, giface, map_):
-        self.frame = wx.Frame(parent=None, title=_("Map window API test frame"))
+        self.frame = wx.Frame(parent=None,
+                              title=_("Map window API test frame"))
         panel = wx.Panel(parent=self.frame, id=wx.ID_ANY)
         sizer = wx.BoxSizer(wx.VERTICAL)
 
@@ -183,8 +202,8 @@ class Tester(object):
         self.frame.Show()
 
     def testMapWindowDistance(self, giface, map_):
-        self.frame = wx.Frame(parent=None,
-                              title=_("Map window distance measurement test frame"))
+        self.frame = wx.Frame(parent=None, title=_(
+            "Map window distance measurement test frame"))
         panel = wx.Panel(parent=self.frame, id=wx.ID_ANY)
         sizer = wx.BoxSizer(wx.VERTICAL)
 
@@ -263,11 +282,11 @@ class Tester(object):
     def testMapWindowRlisetup(self, map_):
         self.frame = wx.Frame(parent=None,
                               title=_("Map window rlisetup test frame"))
-                              
+
         RLiSetupMapPanel(parent=self.frame, map_=map_)
         self.frame.Show()
 
-        
+
 def main():
     """Sets the GRASS display driver
     """
diff --git a/gui/wxpython/mapdisp/toolbars.py b/gui/wxpython/mapdisp/toolbars.py
index 2242715..2ab8f56 100644
--- a/gui/wxpython/mapdisp/toolbars.py
+++ b/gui/wxpython/mapdisp/toolbars.py
@@ -19,183 +19,204 @@ This program is free software under the GNU General Public License
 import wx
 
 from gui_core.toolbars import BaseToolbar, BaseIcons
-from nviz.main         import haveNviz
-from vdigit.main       import haveVDigit
-from icons.icon        import MetaIcon
+from nviz.main import haveNviz
+from vdigit.main import haveVDigit
+from icons.icon import MetaIcon
 from core.utils import _
 
-MapIcons =  {
-    'query'      : MetaIcon(img = 'info',
-                            label = _('Query raster/vector map(s)'),
-                            desc = _('Query selected raster/vector map(s)')),
-    'addBarscale': MetaIcon(img = 'scalebar-add',
-                            label = _('Show/hide scale bar')),
-    'addLegend'  : MetaIcon(img = 'legend-add',
-                            label = _('Show/hide legend')),
-    'addNorthArrow': MetaIcon(img = 'north-arrow-add',
-                              label = _('Show/hide north arrow')),
-    'analyze'    : MetaIcon(img = 'layer-raster-analyze',
-                            label = _('Analyze map'),
-                            desc = _('Measuring, profiling, histogramming, ...')),
+MapIcons = {
+    'query': MetaIcon(img='info',
+                      label=_('Query raster/vector map(s)'),
+                      desc=_('Query selected raster/vector map(s)')),
+    'select': MetaIcon(img='select',
+                       label=_('Select vector feature(s)'),
+                       desc=_('Select features interactively from vector map')),
+    'addBarscale': MetaIcon(img='scalebar-add',
+                            label=_('Add scale bar')),
+    'addRasterLegend': MetaIcon(img='legend-add',
+                          label=_('Add raster legend')),
+    'addVectorLegend': MetaIcon(img='legend-add',
+                                label=_('Add vector legend')),
+    'addNorthArrow': MetaIcon(img='north-arrow-add',
+                              label=_('Add north arrow')),
+    'analyze': MetaIcon(img='layer-raster-analyze',
+                        label=_('Analyze map'),
+                        desc=_('Measuring, profiling, histogramming, ...')),
     'measureDistance': MetaIcon(img='measure-length',
                                 label=_('Measure distance')),
-    'measureArea' : MetaIcon(img='area-measure',
-                             label=_('Measure area')),
-    'profile'    : MetaIcon(img = 'layer-raster-profile',
-                            label = _('Profile surface map')),
-    'scatter'    : MetaIcon(img = 'layer-raster-profile',
-                            label = _("Create bivariate scatterplot of raster maps")),
-    'addText'    : MetaIcon(img = 'text-add',
-                            label = _('Add text layer')),
-    'histogram'  : MetaIcon(img = 'layer-raster-histogram',
-                            label = _('Create histogram of raster map')),
-    'vnet'       : MetaIcon(img = 'vector-tools',
-                            label = _('Vector network analysis tool')),
-    }
+    'measureArea': MetaIcon(img='area-measure',
+                            label=_('Measure area')),
+    'profile': MetaIcon(img='layer-raster-profile',
+                        label=_('Profile surface map')),
+    'scatter': MetaIcon(img='layer-raster-profile',
+                        label=_("Create bivariate scatterplot of raster maps")),
+    'addText': MetaIcon(img='text-add',
+                        label=_('Add text')),
+    'histogram': MetaIcon(img='layer-raster-histogram',
+                          label=_('Create histogram of raster map')),
+    'vnet': MetaIcon(img='vector-tools',
+                     label=_('Vector network analysis tool')),
+}
 
 NvizIcons = {
-    'rotate'    : MetaIcon(img = '3d-rotate',
-                           label = _('Rotate 3D scene'),
-                           desc = _('Drag with mouse to rotate 3D scene')), 
-    'flyThrough': MetaIcon(img = 'flythrough',
-                           label = _('Fly-through mode'),
-                           desc = _('Drag with mouse, hold Ctrl down for different mode'
-                                    ' or Shift to accelerate')),
-    'zoomIn'    : BaseIcons['zoomIn'].SetLabel(desc = _('Click mouse to zoom')),
-    'zoomOut'   : BaseIcons['zoomOut'].SetLabel(desc = _('Click mouse to unzoom'))
-    }
+    'rotate': MetaIcon(
+        img='3d-rotate',
+        label=_('Rotate 3D scene'),
+        desc=_('Drag with mouse to rotate 3D scene')),
+    'flyThrough': MetaIcon(
+        img='flythrough',
+        label=_('Fly-through mode'),
+        desc=_(
+            'Drag with mouse, hold Ctrl down for different mode'
+            ' or Shift to accelerate')),
+    'zoomIn': BaseIcons['zoomIn'].SetLabel(
+        desc=_('Click mouse to zoom')),
+    'zoomOut': BaseIcons['zoomOut'].SetLabel(
+        desc=_('Click mouse to unzoom'))}
+
 
 class MapToolbar(BaseToolbar):
     """Map Display toolbar
     """
+
     def __init__(self, parent, toolSwitcher):
         """Map Display constructor
 
         :param parent: reference to MapFrame
         """
-        BaseToolbar.__init__(self, parent=parent, toolSwitcher=toolSwitcher) # MapFrame
-        
+        BaseToolbar.__init__(
+            self,
+            parent=parent,
+            toolSwitcher=toolSwitcher)  # MapFrame
+
         self.InitToolbar(self._toolbarData())
         self._default = self.pointer
-        
+
         # optional tools
-        choices = [ _('2D view'), ]
-        self.toolId = { '2d' : 0 }
+        toolNum = 0
+        choices = [_('2D view'), ]
+        self.toolId = {'2d': toolNum}
+        toolNum += 1
         if self.parent.GetLayerManager():
             log = self.parent.GetLayerManager().GetLogWindow()
-        
+
         if haveNviz:
             choices.append(_('3D view'))
-            self.toolId['3d'] = 1
+            self.toolId['3d'] = toolNum
+            toolNum += 1
         else:
             from nviz.main import errorMsg
             if self.parent.GetLayerManager():
-              log.WriteCmdLog(_('3D view mode not available'))
-              log.WriteWarning(_('Reason: %s') % str(errorMsg))
-            
+                log.WriteCmdLog(_('3D view mode not available'))
+                log.WriteWarning(_('Reason: %s') % str(errorMsg))
+
             self.toolId['3d'] = -1
 
         if haveVDigit:
-            choices.append(_('Digitize'))
-            if self.toolId['3d'] > -1:
-                self.toolId['vdigit'] = 2
-            else:
-                self.toolId['vdigit'] = 1
+            choices.append(_("Vector digitizer"))
+            self.toolId['vdigit'] = toolNum
+            toolNum += 1
         else:
             from vdigit.main import errorMsg
             if self.parent.GetLayerManager():
-              log.WriteCmdLog(_('Vector digitizer not available'))
-              log.WriteWarning(_('Reason: %s') % errorMsg)
-              log.WriteLog(_('Note that the wxGUI\'s vector digitizer is currently disabled '
-                             '(hopefully this will be fixed soon). '
-                             'Please keep an eye out for updated versions of GRASS. '
-                             'In the meantime you can use "v.digit" from the Develop Vector menu.'), wrap = 60)
-            
+                log.WriteCmdLog(_('Vector digitizer not available'))
+                log.WriteWarning(_('Reason: %s') % errorMsg)
+                log.WriteLog(
+                    _(
+                        'Note that the wxGUI\'s vector digitizer is currently disabled '
+                        '(hopefully this will be fixed soon). '
+                        'Please keep an eye out for updated versions of GRASS. '
+                        'In the meantime you can use "v.digit" from the Develop Vector menu.'),
+                    wrap=60)
+
             self.toolId['vdigit'] = -1
-        
-        self.combo = wx.ComboBox(parent = self, id = wx.ID_ANY,
-                                 choices = choices,
-                                 style = wx.CB_READONLY, size = (110, -1))
+        choices.append(_("Raster digitizer"))
+        self.toolId['rdigit'] = toolNum
+
+        self.combo = wx.ComboBox(parent=self, id=wx.ID_ANY,
+                                 choices=choices,
+                                 style=wx.CB_READONLY, size=(110, -1))
         self.combo.SetSelection(0)
-        
+
         self.comboid = self.AddControl(self.combo)
         self.parent.Bind(wx.EVT_COMBOBOX, self.OnSelectTool, self.comboid)
-        
+
         # realize the toolbar
         self.Realize()
-        
+
         # workaround for Mac bug. May be fixed by 2.8.8, but not before then.
         self.combo.Hide()
         self.combo.Show()
-        
-        for tool in (self.pointer, self.query, self.pan, self.zoomIn, self.zoomOut):
-            self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
-        
+
+        for tool in (self.pointer, self.select, self.query,
+                     self.pan, self.zoomIn, self.zoomOut):
+            self.toolSwitcher.AddToolToGroup(
+                group='mouseUse', toolbar=self, tool=tool)
+
         self.EnableTool(self.zoomBack, False)
-        
-        self.FixSize(width = 90)
-        
+
+        self.FixSize(width=90)
+
     def _toolbarData(self):
         """Toolbar data"""
-        return self._getToolbarData((('displayMap', BaseIcons['display'],
-                                      self.parent.OnDraw),
-                                     ('renderMap', BaseIcons['render'],
-                                      self.parent.OnRender),
-                                     ('erase', BaseIcons['erase'],
-                                      self.parent.OnErase),
-                                     ('pointer', BaseIcons['pointer'],
-                                      self.parent.OnPointer,
-                                      wx.ITEM_CHECK),
-                                     ('query', MapIcons['query'],
-                                      self.parent.OnQuery,
-                                      wx.ITEM_CHECK),
-                                     ('pan', BaseIcons['pan'],
-                                      self.parent.OnPan,
-                                      wx.ITEM_CHECK),
-                                     ('zoomIn', BaseIcons['zoomIn'],
-                                      self.parent.OnZoomIn,
-                                      wx.ITEM_CHECK),
-                                     ('zoomOut', BaseIcons['zoomOut'],
-                                      self.parent.OnZoomOut,
-                                      wx.ITEM_CHECK),
-                                     ('zoomExtent', BaseIcons['zoomExtent'],
-                                      self.parent.OnZoomToMap),
-                                     ('zoomRegion', BaseIcons['zoomRegion'],
-                                      self.parent.OnZoomToWind),
-                                     ('zoomBack', BaseIcons['zoomBack'],
-                                      self.parent.OnZoomBack),
-                                     ('zoomMenu', BaseIcons['zoomMenu'],
-                                      self.parent.OnZoomMenu),
-                                     ('analyze', MapIcons['analyze'],
-                                      self.OnAnalyze),
-                                     ('overlay', BaseIcons['overlay'],
-                                      self.OnDecoration),
-                                     ('saveFile', BaseIcons['saveFile'],
-                                      self.parent.SaveToFile),
-                                     ('printMap', BaseIcons['print'],
-                                      self.parent.PrintMenu),
-                                    ))
+        return self._getToolbarData((
+            ('renderMap', BaseIcons['render'],
+             self.parent.OnRender),
+            ('pointer', BaseIcons['pointer'],
+             self.parent.OnPointer,
+             wx.ITEM_CHECK),
+            ('select', MapIcons['select'],
+             self.parent.OnSelect,
+             wx.ITEM_CHECK),
+            ('query', MapIcons['query'],
+             self.parent.OnQuery,
+             wx.ITEM_CHECK),
+            ('pan', BaseIcons['pan'],
+             self.parent.OnPan,
+             wx.ITEM_CHECK),
+            ('zoomIn', BaseIcons['zoomIn'],
+             self.parent.OnZoomIn,
+             wx.ITEM_CHECK),
+            ('zoomOut', BaseIcons['zoomOut'],
+             self.parent.OnZoomOut,
+             wx.ITEM_CHECK),
+            ('zoomExtent', BaseIcons['zoomExtent'],
+             self.parent.OnZoomToMap),
+            ('zoomRegion', BaseIcons['zoomRegion'],
+             self.parent.OnZoomToWind),
+            ('zoomBack', BaseIcons['zoomBack'],
+             self.parent.OnZoomBack),
+            ('zoomMenu', BaseIcons['zoomMenu'],
+             self.parent.OnZoomMenu),
+            ('analyze', MapIcons['analyze'],
+             self.OnAnalyze),
+            ('overlay', BaseIcons['overlay'],
+             self.OnDecoration),
+            ('saveFile', BaseIcons['saveFile'],
+             self.parent.SaveToFile),
+        ))
+
     def InsertTool(self, data):
         """Insert tool to toolbar
-        
+
         :param data: toolbar data"""
         data = self._getToolbarData(data)
         for tool in data:
             self.CreateTool(*tool)
         self.Realize()
-        
+
         self.parent._mgr.GetPane('mapToolbar').BestSize(self.GetBestSize())
         self.parent._mgr.Update()
-        
+
     def RemoveTool(self, tool):
         """Remove tool from toolbar
-        
+
         :param tool: tool id"""
         self.DeleteTool(tool)
-        
+
         self.parent._mgr.GetPane('mapToolbar').BestSize(self.GetBestSize())
         self.parent._mgr.Update()
-        
+
     def ChangeToolsDesc(self, mode2d):
         """Change description of zoom tools for 2D/3D view"""
         if mode2d:
@@ -208,59 +229,73 @@ class MapToolbar(BaseToolbar):
                     tmp = list(data)
                     tmp[4] = icons[tool].GetDesc()
                     self._data[i] = tuple(tmp)
-        
+
     def OnSelectTool(self, event):
         """Select / enable tool available in tools list
         """
-        tool =  event.GetSelection()
-        
+        tool = event.GetSelection()
+
         if tool == self.toolId['2d']:
             self.ExitToolbars()
             self.Enable2D(True)
-            self.ChangeToolsDesc(mode2d = True)            
-        
+
         elif tool == self.toolId['3d'] and \
                 not (self.parent.MapWindow3D and self.parent.IsPaneShown('3d')):
             self.ExitToolbars()
             self.parent.AddNviz()
-            
+
         elif tool == self.toolId['vdigit'] and \
                 not self.parent.GetToolbar('vdigit'):
             self.ExitToolbars()
             self.parent.AddToolbar("vdigit")
             self.parent.MapWindow.SetFocus()
 
+        elif tool == self.toolId['rdigit']:
+            self.ExitToolbars()
+            self.parent.AddRDigit()
+
     def OnAnalyze(self, event):
         """Analysis tools menu
         """
         self._onMenu(((MapIcons["measureDistance"], self.parent.OnMeasureDistance),
                       (MapIcons["measureArea"], self.parent.OnMeasureArea),
-                      (MapIcons["profile"],     self.parent.OnProfile),
-                      (MapIcons["scatter"],     self.parent.OnScatterplot),
-                      (MapIcons["histogram"],   self.parent.OnHistogramPyPlot),
+                      (MapIcons["profile"], self.parent.OnProfile),
+                      (MapIcons["scatter"], self.parent.OnScatterplot),
+                      (MapIcons["histogram"], self.parent.OnHistogramPyPlot),
                       (BaseIcons["histogramD"], self.parent.OnHistogram),
-                      (MapIcons["vnet"],        self.parent.OnVNet)))
-        
+                      (MapIcons["vnet"], self.parent.OnVNet)))
+
     def OnDecoration(self, event):
         """Decorations overlay menu
         """
-        self._onMenu(((MapIcons["addLegend"], lambda evt: self.parent.AddLegend()),
-                      (MapIcons["addBarscale"], lambda evt: self.parent.AddBarscale()),
-                      (MapIcons["addNorthArrow"], lambda evt: self.parent.AddArrow()),
-                      (MapIcons["addText"], self.parent.OnAddText)))
+        self._onMenu(
+            ((MapIcons["addRasterLegend"],
+              lambda evt: self.parent.AddLegendRast()),
+             (MapIcons["addVectorLegend"],
+              lambda evt: self.parent.AddLegendVect()),
+             (MapIcons["addBarscale"],
+              lambda evt: self.parent.AddBarscale()),
+             (MapIcons["addNorthArrow"],
+              lambda evt: self.parent.AddArrow()),
+             (MapIcons["addText"],
+              lambda evt: self.parent.AddDtext())))
 
-        
     def ExitToolbars(self):
         if self.parent.GetToolbar('vdigit'):
             self.parent.toolbars['vdigit'].OnExit()
         if self.parent.GetLayerManager() and \
                 self.parent.GetLayerManager().IsPaneShown('toolbarNviz'):
             self.parent.RemoveNviz()
-        
+        if self.parent.GetToolbar('rdigit'):
+            self.parent.QuitRDigit()
+
     def Enable2D(self, enabled):
         """Enable/Disable 2D display mode specific tools"""
         for tool in (self.zoomRegion,
                      self.zoomMenu,
                      self.analyze,
-                     self.printMap):
+                     self.select):
             self.EnableTool(tool, enabled)
+        self.ChangeToolsDesc(enabled)
+        if enabled:
+            self.combo.SetValue(_("2D view"))
diff --git a/gui/wxpython/mapswipe/__init__.py b/gui/wxpython/mapswipe/__init__.py
index 684f809..7daf1e6 100644
--- a/gui/wxpython/mapswipe/__init__.py
+++ b/gui/wxpython/mapswipe/__init__.py
@@ -4,4 +4,4 @@ all = [
     'mapwindow',
     'toolbars',
     'frame',
-    ]
+]
diff --git a/gui/wxpython/mapswipe/dialogs.py b/gui/wxpython/mapswipe/dialogs.py
index 2c97bfa..f956ae6 100644
--- a/gui/wxpython/mapswipe/dialogs.py
+++ b/gui/wxpython/mapswipe/dialogs.py
@@ -28,7 +28,7 @@ from core.gcmd import GMessage
 from core.layerlist import LayerList
 from core.settings import UserSettings
 from gui_core.simplelmgr import SimpleLayerManager, SIMPLE_LMGR_RASTER, \
-   SIMPLE_LMGR_VECTOR, SIMPLE_LMGR_RGB, SIMPLE_LMGR_TB_LEFT, SIMPLE_LMGR_TB_RIGHT
+    SIMPLE_LMGR_VECTOR, SIMPLE_LMGR_RGB, SIMPLE_LMGR_TB_LEFT, SIMPLE_LMGR_TB_RIGHT
 
 from grass.pydispatch.signal import Signal
 
@@ -39,6 +39,7 @@ class SwipeMapDialog(wx.Dialog):
     There are two modes - simple (only two raster maps),
     or two layer lists.
     """
+
     def __init__(self, parent, title=_("Select raster maps"),
                  first=None, second=None,
                  firstLayerList=None, secondLayerList=None):
@@ -109,19 +110,35 @@ class SwipeMapDialog(wx.Dialog):
         panel = wx.Panel(self)
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        self._firstRaster = gselect.Select(parent=panel, type='raster',
-                                           size=globalvar.DIALOG_GSELECT_SIZE,
-                                           validator=SimpleValidator(callback=self.ValidatorCallback))
-
-        self._secondRaster = gselect.Select(parent=panel, type='raster',
-                                            size=globalvar.DIALOG_GSELECT_SIZE,
-                                            validator=SimpleValidator(callback=self.ValidatorCallback))
-        sizer.Add(wx.StaticText(panel, label=_("Name of top/left raster map:")),
-                  proportion=0, flag=wx.EXPAND | wx.ALL, border=5)
+        self._firstRaster = gselect.Select(
+            parent=panel,
+            type='raster',
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
+
+        self._secondRaster = gselect.Select(
+            parent=panel,
+            type='raster',
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            validator=SimpleValidator(
+                callback=self.ValidatorCallback))
+        sizer.Add(
+            wx.StaticText(
+                panel,
+                label=_("Name of top/left raster map:")),
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         sizer.Add(self._firstRaster, proportion=0,
                   flag=wx.EXPAND | wx.ALL, border=1)
-        sizer.Add(wx.StaticText(panel, label=_("Name of bottom/right raster map:")),
-                  proportion=0, flag=wx.EXPAND | wx.ALL, border=1)
+        sizer.Add(
+            wx.StaticText(
+                panel,
+                label=_("Name of bottom/right raster map:")),
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=1)
         sizer.Add(self._secondRaster, proportion=0,
                   flag=wx.EXPAND | wx.ALL, border=1)
 
@@ -136,14 +153,24 @@ class SwipeMapDialog(wx.Dialog):
         panel = wx.Panel(self)
         sizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        self._firstLmgr = SimpleLayerManager(parent=panel, layerList=self._firstLayerList,
-                                             lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB |
-                                             SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_LEFT)
-        self._secondLmgr = SimpleLayerManager(parent=panel, layerList=self._secondLayerList,
-                                              lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB |
-                                              SIMPLE_LMGR_VECTOR | SIMPLE_LMGR_TB_RIGHT)
-        sizer.Add(self._firstLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
-        sizer.Add(self._secondLmgr, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        self._firstLmgr = SimpleLayerManager(
+            parent=panel, layerList=self._firstLayerList,
+            lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB | SIMPLE_LMGR_VECTOR |
+            SIMPLE_LMGR_TB_LEFT)
+        self._secondLmgr = SimpleLayerManager(
+            parent=panel, layerList=self._secondLayerList,
+            lmgrStyle=SIMPLE_LMGR_RASTER | SIMPLE_LMGR_RGB | SIMPLE_LMGR_VECTOR |
+            SIMPLE_LMGR_TB_RIGHT)
+        sizer.Add(
+            self._firstLmgr,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        sizer.Add(
+            self._secondLmgr,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
         panel.SetSizer(sizer)
         sizer.Fit(panel)
 
@@ -152,12 +179,15 @@ class SwipeMapDialog(wx.Dialog):
     def _switchMode(self, simple):
         if simple:
             self._switchSizer.Show(self._firstPanel, show=True, recursive=True)
-            self._switchSizer.Show(self._secondPanel, show=False, recursive=True)
+            self._switchSizer.Show(
+                self._secondPanel, show=False, recursive=True)
             self.btnSwitch.SetLabel(_("Switch to advanced mode"))
             self.btnCancel.SetLabel(_("Cancel"))
         else:
-            self._switchSizer.Show(self._firstPanel, show=False, recursive=True)
-            self._switchSizer.Show(self._secondPanel, show=True, recursive=True)
+            self._switchSizer.Show(
+                self._firstPanel, show=False, recursive=True)
+            self._switchSizer.Show(
+                self._secondPanel, show=True, recursive=True)
             self.btnSwitch.SetLabel(_("Switch to simple mode"))
             self.btnCancel.SetLabel(_("Close"))
 
@@ -182,9 +212,11 @@ class SwipeMapDialog(wx.Dialog):
             return
 
         if win == self._firstRaster.GetTextCtrl():
-            GMessage(parent=self, message=_("Name of the first map is missing."))
+            GMessage(parent=self, message=_(
+                "Name of the first map is missing."))
         else:
-            GMessage(parent=self, message=_("Name of the second map is missing."))
+            GMessage(parent=self, message=_(
+                "Name of the second map is missing."))
 
     def _ok(self):
         self._apply()
@@ -197,7 +229,8 @@ class SwipeMapDialog(wx.Dialog):
     def GetValues(self):
         """Get raster maps"""
         if self.IsSimpleMode():
-            return (self._firstRaster.GetValue(), self._secondRaster.GetValue())
+            return (self._firstRaster.GetValue(),
+                    self._secondRaster.GetValue())
         else:
             return (self._firstLayerList, self._secondLayerList)
 
@@ -215,10 +248,12 @@ class SwipeMapDialog(wx.Dialog):
 
 class PreferencesDialog(PreferencesBaseDialog):
     """Mapswipe preferences dialog"""
+
     def __init__(self, parent, giface, title=_("Map Swipe settings"),
                  settings=UserSettings):
-        PreferencesBaseDialog.__init__(self, parent=parent, giface=giface, title=title,
-                                       settings=settings, size=(-1, 300))
+        PreferencesBaseDialog.__init__(
+            self, parent=parent, giface=giface, title=title, settings=settings,
+            size=(-1, 300))
 
         # create notebook pages
         self._createMirrorModePage(self.notebook)
@@ -238,61 +273,104 @@ class PreferencesDialog(PreferencesBaseDialog):
         gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Color:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        color = csel.ColourSelect(parent=panel,
-                                  colour=UserSettings.Get(group='mapswipe',
-                                                          key='cursor', subkey='color'),
-                                  size=globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Color:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        color = csel.ColourSelect(
+            parent=panel,
+            colour=UserSettings.Get(
+                group='mapswipe',
+                key='cursor',
+                subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
         self.winId['mapswipe:cursor:color'] = color.GetId()
 
         gridSizer.Add(item=color, pos=(row, 1), flag=wx.ALIGN_RIGHT)
 
         row += 1
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Shape:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        cursors = wx.Choice(parent=panel,
-                            choices=self.settings.Get(group='mapswipe', key='cursor',
-                                                      subkey=['type', 'choices'], settings_type='internal'),
-                            name="GetSelection")
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Shape:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        cursors = wx.Choice(
+            parent=panel,
+            choices=self.settings.Get(
+                group='mapswipe',
+                key='cursor',
+                subkey=[
+                    'type',
+                    'choices'],
+                settings_type='internal'),
+            name="GetSelection")
         cursors.SetSelection(self.settings.Get(group='mapswipe', key='cursor',
                                                subkey=['type', 'selection']))
         self.winId['mapswipe:cursor:type:selection'] = cursors.GetId()
 
-        gridSizer.Add(item=cursors, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos=(row, 1))
+        gridSizer.Add(item=cursors, flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Line width:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        width = wx.SpinCtrl(parent=panel, min=1, max=10,
-                            initial=self.settings.Get(group='mapswipe', key='cursor',
-                                                      subkey='width'),
-                            name="GetValue")
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Line width:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        width = wx.SpinCtrl(
+            parent=panel,
+            min=1,
+            max=10,
+            initial=self.settings.Get(
+                group='mapswipe',
+                key='cursor',
+                subkey='width'),
+            name="GetValue")
         self.winId['mapswipe:cursor:width'] = width.GetId()
 
-        gridSizer.Add(item=width, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos=(row, 1))
+        gridSizer.Add(item=width, flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item=wx.StaticText(parent=panel,
-                                         label=_("Size:")),
-                      flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        size = wx.SpinCtrl(parent=panel, min=4, max=50,
-                           initial=self.settings.Get(group='mapswipe', key='cursor',
-                                                     subkey='size'),
-                           name="GetValue")
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                label=_("Size:")),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        size = wx.SpinCtrl(
+            parent=panel,
+            min=4,
+            max=50,
+            initial=self.settings.Get(
+                group='mapswipe',
+                key='cursor',
+                subkey='size'),
+            name="GetValue")
         self.winId['mapswipe:cursor:size'] = size.GetId()
 
-        gridSizer.Add(item=size, flag=wx.ALIGN_RIGHT | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos=(row, 1))
+        gridSizer.Add(item=size, flag=wx.ALIGN_RIGHT |
+                      wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, pos=(row, 1))
 
         gridSizer.AddGrowableCol(1)
-        sizer.Add(item=gridSizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=3)
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=3)
         border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
         panel.SetSizer(border)
 
diff --git a/gui/wxpython/mapswipe/frame.py b/gui/wxpython/mapswipe/frame.py
index dcc9574..7a6a81b 100644
--- a/gui/wxpython/mapswipe/frame.py
+++ b/gui/wxpython/mapswipe/frame.py
@@ -21,29 +21,30 @@ import time
 
 import grass.script as grass
 
-from gui_core.mapdisp   import DoubleMapFrame
-from gui_core.dialogs   import GetImageHandlers
+from gui_core.mapdisp import DoubleMapFrame
+from gui_core.dialogs import GetImageHandlers
 from mapwin.base import MapWindowProperties
 from core import globalvar
-from core.render        import Map
-from mapdisp            import statusbar as sb
-from core.debug         import Debug
-from core.gcmd          import GError, GMessage
+from core.render import Map
+from mapdisp import statusbar as sb
+from core.debug import Debug
+from core.gcmd import GError, GMessage
 from core.utils import _
 from core.layerlist import LayerListToRendererConverter
 from gui_core.query import QueryDialog, PrepareQueryResults
 
-from mapswipe.toolbars  import SwipeMapToolbar, SwipeMainToolbar, SwipeMiscToolbar
+from mapswipe.toolbars import SwipeMapToolbar, SwipeMainToolbar, SwipeMiscToolbar
 from mapswipe.mapwindow import SwipeBufferedWindow
-from mapswipe.dialogs   import SwipeMapDialog, PreferencesDialog
+from mapswipe.dialogs import SwipeMapDialog, PreferencesDialog
 
 
 class SwipeMapFrame(DoubleMapFrame):
-    def __init__(self, parent  = None, giface = None, 
-                 title = _("GRASS GIS Map Swipe"), name = "swipe", **kwargs):
-        DoubleMapFrame.__init__(self, parent = parent, title = title, name = name,
-                                firstMap = Map(), secondMap = Map(), **kwargs)
-        Debug.msg (1, "SwipeMapFrame.__init__()")
+
+    def __init__(self, parent=None, giface=None,
+                 title=_("GRASS GIS Map Swipe"), name="swipe", **kwargs):
+        DoubleMapFrame.__init__(self, parent=parent, title=title, name=name,
+                                firstMap=Map(), secondMap=Map(), **kwargs)
+        Debug.msg(1, "SwipeMapFrame.__init__()")
         #
         # Add toolbars
         #
@@ -59,29 +60,34 @@ class SwipeMapFrame(DoubleMapFrame):
         #
         # create widgets
         #
-        self.splitter = MapSplitter(parent = self, id = wx.ID_ANY)
+        self.splitter = MapSplitter(parent=self, id=wx.ID_ANY)
+
+        self.sliderH = wx.Slider(self, id=wx.ID_ANY, style=wx.SL_HORIZONTAL)
+        self.sliderV = wx.Slider(self, id=wx.ID_ANY, style=wx.SL_VERTICAL)
 
-        self.sliderH = wx.Slider(self, id = wx.ID_ANY, style = wx.SL_HORIZONTAL)
-        self.sliderV = wx.Slider(self, id = wx.ID_ANY, style = wx.SL_VERTICAL)
-        
         self.mapWindowProperties = MapWindowProperties()
         self.mapWindowProperties.setValuesFromUserSettings()
-        self.mapWindowProperties.autoRenderChanged.connect(self.OnAutoRenderChanged)
-        self.firstMapWindow = SwipeBufferedWindow(parent = self.splitter, giface = self._giface,
-                                                  properties=self.mapWindowProperties,
-                                                  Map = self.firstMap)
-        self.secondMapWindow = SwipeBufferedWindow(parent = self.splitter, giface = self._giface,
-                                                   properties=self.mapWindowProperties,
-                                                   Map = self.secondMap)
+        self.mapWindowProperties.autoRenderChanged.connect(
+            self.OnAutoRenderChanged)
+        self.firstMapWindow = SwipeBufferedWindow(
+            parent=self.splitter, giface=self._giface,
+            properties=self.mapWindowProperties, Map=self.firstMap)
+        self.secondMapWindow = SwipeBufferedWindow(
+            parent=self.splitter, giface=self._giface,
+            properties=self.mapWindowProperties, Map=self.secondMap)
         # bind query signal
         self.firstMapWindow.mapQueried.connect(self.Query)
         self.secondMapWindow.mapQueried.connect(self.Query)
 
         # bind tracking cursosr to mirror it
-        self.firstMapWindow.Bind(wx.EVT_MOTION, lambda evt: self.TrackCursor(evt))
-        self.secondMapWindow.Bind(wx.EVT_MOTION, lambda evt: self.TrackCursor(evt))
-
-        self.MapWindow = self.firstMapWindow # current by default
+        self.firstMapWindow.Bind(
+            wx.EVT_MOTION,
+            lambda evt: self.TrackCursor(evt))
+        self.secondMapWindow.Bind(
+            wx.EVT_MOTION,
+            lambda evt: self.TrackCursor(evt))
+
+        self.MapWindow = self.firstMapWindow  # current by default
         self.firstMapWindow.zoomhistory = self.secondMapWindow.zoomhistory
         self.SetBindRegions(True)
 
@@ -102,8 +108,8 @@ class SwipeMapFrame(DoubleMapFrame):
         self.Bind(wx.EVT_IDLE, self.OnIdle)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
 
-        self.SetSize((825, 600))
-        
+        self.SetSize((800, 600))
+
         self._mgr.Update()
 
         self.rasters = {'first': None, 'second': None}
@@ -135,14 +141,14 @@ class SwipeMapFrame(DoubleMapFrame):
 
         event.Skip()
 
-    def ActivateFirstMap(self, event = None):
+    def ActivateFirstMap(self, event=None):
         """Switch tracking direction"""
         super(SwipeMapFrame, self).ActivateFirstMap(event)
 
         self.firstMapWindow.ClearLines()
         self.firstMapWindow.Refresh()
 
-    def ActivateSecondMap(self, event = None):
+    def ActivateSecondMap(self, event=None):
         """Switch tracking direction"""
         super(SwipeMapFrame, self).ActivateSecondMap(event)
 
@@ -151,11 +157,12 @@ class SwipeMapFrame(DoubleMapFrame):
 
     def CallAfterInit(self):
         self.InitSliderBindings()
-        self.splitter.SplitVertically(self.firstMapWindow, self.secondMapWindow, 0)
+        self.splitter.SplitVertically(
+            self.firstMapWindow, self.secondMapWindow, 0)
         self.splitter.Init()
         if not (self.rasters['first'] and self.rasters['second']):
             self.OnSelectLayers(event=None)
-        
+
     def InitStatusbar(self):
         """Init statusbar (default items)."""
         # items for choice
@@ -169,20 +176,23 @@ class SwipeMapFrame(DoubleMapFrame):
                                sb.SbMapScale,
                                sb.SbGoTo,
                                sb.SbProjection]
-        
+
         # create statusbar and its manager
-        statusbar = self.CreateStatusBar(number = 4, style = 0)
+        statusbar = self.CreateStatusBar(number=4, style=0)
         if globalvar.wxPython3:
             statusbar.SetMinHeight(24)
         statusbar.SetStatusWidths([-5, -2, -1, -1])
-        self.statusbarManager = sb.SbManager(mapframe = self, statusbar = statusbar)
-        
+        self.statusbarManager = sb.SbManager(
+            mapframe=self, statusbar=statusbar)
+
         # fill statusbar manager
-        self.statusbarManager.AddStatusbarItemsByClass(self.statusbarItems, mapframe = self, statusbar = statusbar)
-        self.statusbarManager.AddStatusbarItem(sb.SbMask(self, statusbar = statusbar, position = 2))
-        sbRender = sb.SbRender(self, statusbar = statusbar, position = 3)
+        self.statusbarManager.AddStatusbarItemsByClass(
+            self.statusbarItems, mapframe=self, statusbar=statusbar)
+        self.statusbarManager.AddStatusbarItem(
+            sb.SbMask(self, statusbar=statusbar, position=2))
+        sbRender = sb.SbRender(self, statusbar=statusbar, position=3)
         self.statusbarManager.AddStatusbarItem(sbRender)
-        
+
         self.statusbarManager.Update()
 
     def ResetSlider(self):
@@ -193,19 +203,25 @@ class SwipeMapFrame(DoubleMapFrame):
         self.slider.SetRange(0, size)
         self.slider.SetValue(self.splitter.GetSashPosition())
 
-
     def InitSliderBindings(self):
         self.sliderH.Bind(wx.EVT_SPIN, self.OnSliderPositionChanging)
-        self.sliderH.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.OnSliderPositionChanged)
+        self.sliderH.Bind(
+            wx.EVT_SCROLL_THUMBRELEASE,
+            self.OnSliderPositionChanged)
         self.sliderV.Bind(wx.EVT_SPIN, self.OnSliderPositionChanging)
-        self.sliderV.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.OnSliderPositionChanged)
-        self.splitter.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGING, self.OnSashChanging)
-        self.splitter.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnSashChanged)
-
+        self.sliderV.Bind(
+            wx.EVT_SCROLL_THUMBRELEASE,
+            self.OnSliderPositionChanged)
+        self.splitter.Bind(
+            wx.EVT_SPLITTER_SASH_POS_CHANGING,
+            self.OnSashChanging)
+        self.splitter.Bind(
+            wx.EVT_SPLITTER_SASH_POS_CHANGED,
+            self.OnSashChanged)
 
     def OnSliderPositionChanging(self, event):
         """Slider changes its position, sash must be moved too."""
-        Debug.msg (5, "SwipeMapFrame.OnSliderPositionChanging()")
+        Debug.msg(5, "SwipeMapFrame.OnSliderPositionChanging()")
 
         self.GetFirstWindow().movingSash = True
         self.GetSecondWindow().movingSash = True
@@ -217,27 +233,27 @@ class SwipeMapFrame(DoubleMapFrame):
 
     def OnSliderPositionChanged(self, event):
         """Slider position changed, sash must be moved too."""
-        Debug.msg (5, "SwipeMapFrame.OnSliderPositionChanged()")
+        Debug.msg(5, "SwipeMapFrame.OnSliderPositionChanged()")
 
         self.splitter.SetSashPosition(event.GetPosition())
         self.splitter.OnSashChanged(None)
 
     def OnSashChanging(self, event):
         """Sash position is changing, slider must be moved too."""
-        Debug.msg (5, "SwipeMapFrame.OnSashChanging()")
+        Debug.msg(5, "SwipeMapFrame.OnSashChanging()")
 
         self.slider.SetValue(self.splitter.GetSashPosition())
         event.Skip()
 
     def OnSashChanged(self, event):
         """Sash position changed, slider must be moved too."""
-        Debug.msg (5, "SwipeMapFrame.OnSashChanged()")
+        Debug.msg(5, "SwipeMapFrame.OnSashChanged()")
 
         self.OnSashChanging(event)
         event.Skip()
 
     def OnSize(self, event):
-        Debug.msg (4, "SwipeMapFrame.OnSize()")
+        Debug.msg(4, "SwipeMapFrame.OnSize()")
         self.resize = time.clock()
         super(SwipeMapFrame, self).OnSize(event)
 
@@ -249,7 +265,7 @@ class SwipeMapFrame(DoubleMapFrame):
             sizeAll = self.splitter.GetSize()
             w1.SetClientSize(sizeAll)
             w2.SetClientSize(sizeAll)
-            
+
             w1.OnSize(event)
             w2.OnSize(event)
             self.ResetSlider()
@@ -263,7 +279,7 @@ class SwipeMapFrame(DoubleMapFrame):
 
     def AddToolbar(self, name):
         """Add defined toolbar to the window
-        
+
         Currently known toolbars are:
          - 'swipeMap'          - basic map toolbar
          - 'swipeMain'         - swipe functionality
@@ -271,60 +287,60 @@ class SwipeMapFrame(DoubleMapFrame):
         if name == "swipeMap":
             self.toolbars[name] = SwipeMapToolbar(self, self._toolSwitcher)
             self._mgr.AddPane(self.toolbars[name],
-                      wx.aui.AuiPaneInfo().
-                      Name(name).Caption(_("Map Toolbar")).
-                      ToolbarPane().Top().
-                      LeftDockable(False).RightDockable(False).
-                      BottomDockable(False).TopDockable(True).
-                      CloseButton(False).Layer(2).Row(1).
-                      BestSize((self.toolbars[name].GetBestSize())))
+                              wx.aui.AuiPaneInfo().
+                              Name(name).Caption(_("Map Toolbar")).
+                              ToolbarPane().Top().
+                              LeftDockable(False).RightDockable(False).
+                              BottomDockable(False).TopDockable(True).
+                              CloseButton(False).Layer(2).Row(1).
+                              BestSize((self.toolbars[name].GetBestSize())))
 
         if name == "swipeMain":
             self.toolbars[name] = SwipeMainToolbar(self)
 
             self._mgr.AddPane(self.toolbars[name],
-                      wx.aui.AuiPaneInfo().
-                      Name(name).Caption(_("Main Toolbar")).
-                      ToolbarPane().Top().
-                      LeftDockable(False).RightDockable(False).
-                      BottomDockable(False).TopDockable(True).
-                      CloseButton(False).Layer(2).Row(1).
-                      BestSize((self.toolbars[name].GetBestSize())))
+                              wx.aui.AuiPaneInfo().
+                              Name(name).Caption(_("Main Toolbar")).
+                              ToolbarPane().Top().
+                              LeftDockable(False).RightDockable(False).
+                              BottomDockable(False).TopDockable(True).
+                              CloseButton(False).Layer(2).Row(1).
+                              BestSize((self.toolbars[name].GetBestSize())))
 
         if name == "swipeMisc":
             self.toolbars[name] = SwipeMiscToolbar(self)
 
             self._mgr.AddPane(self.toolbars[name],
-                      wx.aui.AuiPaneInfo().
-                      Name(name).Caption(_("Misc Toolbar")).
-                      ToolbarPane().Top().
-                      LeftDockable(False).RightDockable(False).
-                      BottomDockable(False).TopDockable(True).
-                      CloseButton(False).Layer(2).Row(1).
-                      BestSize((self.toolbars[name].GetBestSize())))
+                              wx.aui.AuiPaneInfo().
+                              Name(name).Caption(_("Misc Toolbar")).
+                              ToolbarPane().Top().
+                              LeftDockable(False).RightDockable(False).
+                              BottomDockable(False).TopDockable(True).
+                              CloseButton(False).Layer(2).Row(1).
+                              BestSize((self.toolbars[name].GetBestSize())))
 
     def _addPanes(self):
         """Add splitter window and sliders to aui manager"""
         # splitter window
         self._mgr.AddPane(self.splitter, wx.aui.AuiPaneInfo().
-                  Name('splitter').CaptionVisible(False).PaneBorder(True).
-                  Dockable(False).Floatable(False).CloseButton(False).
-                  Center().Layer(1).BestSize((self.splitter.GetBestSize())))
+                          Name('splitter').CaptionVisible(False).PaneBorder(True).
+                          Dockable(False).Floatable(False).CloseButton(False).
+                          Center().Layer(1).BestSize((self.splitter.GetBestSize())))
 
         # sliders
         self._mgr.AddPane(self.sliderH, wx.aui.AuiPaneInfo().
-                  Name('sliderH').CaptionVisible(False).PaneBorder(False).
-                  CloseButton(False).Gripper(True).GripperTop(False).
-                  BottomDockable(True).TopDockable(True).
-                  LeftDockable(False).RightDockable(False).
-                  Bottom().Layer(1).BestSize((self.sliderH.GetBestSize())))
+                          Name('sliderH').CaptionVisible(False).PaneBorder(False).
+                          CloseButton(False).Gripper(True).GripperTop(False).
+                          BottomDockable(True).TopDockable(True).
+                          LeftDockable(False).RightDockable(False).
+                          Bottom().Layer(1).BestSize((self.sliderH.GetBestSize())))
 
         self._mgr.AddPane(self.sliderV, wx.aui.AuiPaneInfo().
-                  Name('sliderV').CaptionVisible(False).PaneBorder(False).
-                  CloseButton(False).Gripper(True).GripperTop(True).
-                  BottomDockable(False).TopDockable(False).
-                  LeftDockable(True).RightDockable(True).
-                  Right().Layer(1).BestSize((self.sliderV.GetBestSize())))
+                          Name('sliderV').CaptionVisible(False).PaneBorder(False).
+                          CloseButton(False).Gripper(True).GripperTop(True).
+                          BottomDockable(False).TopDockable(False).
+                          LeftDockable(True).RightDockable(True).
+                          Right().Layer(1).BestSize((self.sliderV.GetBestSize())))
 
     def ZoomToMap(self):
         """
@@ -357,11 +373,12 @@ class SwipeMapFrame(DoubleMapFrame):
                                  firstLayerList=None, secondLayerList=None)
             dlg.applyChanges.connect(self.OnApplyInputChanges)
             # connect to convertor object to convert to Map
-            # store reference to convertor is needed otherwise it would be discarded
-            self._firstConverter = self._connectSimpleLmgr(dlg.GetFirstSimpleLmgr(),
-                                                           self.GetFirstMap())
-            self._secondConverter = self._connectSimpleLmgr(dlg.GetSecondSimpleLmgr(),
-                                                            self.GetSecondMap())
+            # store reference to convertor is needed otherwise it would be
+            # discarded
+            self._firstConverter = self._connectSimpleLmgr(
+                dlg.GetFirstSimpleLmgr(), self.GetFirstMap())
+            self._secondConverter = self._connectSimpleLmgr(
+                dlg.GetSecondSimpleLmgr(), self.GetSecondMap())
             self._inputDialog = dlg
             dlg.CentreOnParent()
             dlg.Show()
@@ -397,15 +414,18 @@ class SwipeMapFrame(DoubleMapFrame):
             if not (res1 and res2) and first and second:
                 message = ''
                 if not res1:
-                    message += _("Map <%s> not found. ") % self.rasters['first']
+                    message += _("Map <%s> not found. ") % self.rasters[
+                        'first']
                 if not res2:
-                    message += _("Map <%s> not found.") % self.rasters['second']
-                    GError(parent = self, message = message)
+                    message += _("Map <%s> not found.") % self.rasters[
+                        'second']
+                    GError(parent=self, message=message)
                     return
             self.ZoomToMap()
         else:
             LayerListToRendererConverter(self.GetFirstMap()).ConvertAll(first)
-            LayerListToRendererConverter(self.GetSecondMap()).ConvertAll(second)
+            LayerListToRendererConverter(
+                self.GetSecondMap()).ConvertAll(second)
 
         self.SetRasterNames()
         if self.IsAutoRendered():
@@ -413,38 +433,47 @@ class SwipeMapFrame(DoubleMapFrame):
 
     def SetFirstRaster(self, name):
         """Set raster map to first Map"""
-        raster = grass.find_file(name = name, element = 'cell')
+        raster = grass.find_file(name=name, element='cell')
         if raster['fullname']:
             self.rasters['first'] = raster['fullname']
-            self.SetLayer(name = raster['fullname'], mapInstance = self.GetFirstMap())
+            self.SetLayer(
+                name=raster['fullname'],
+                mapInstance=self.GetFirstMap())
             return True
 
         return False
 
     def SetSecondRaster(self, name):
         """Set raster map to second Map"""
-        raster = grass.find_file(name = name, element = 'cell')
+        raster = grass.find_file(name=name, element='cell')
         if raster['fullname']:
             self.rasters['second'] = raster['fullname']
-            self.SetLayer(name = raster['fullname'], mapInstance = self.GetSecondMap())
+            self.SetLayer(
+                name=raster['fullname'],
+                mapInstance=self.GetSecondMap())
             return True
 
         return False
 
     def SetLayer(self, name, mapInstance):
         """Sets layer in Map.
-        
+
         :param name: layer (raster) name
         """
-        Debug.msg (3, "SwipeMapFrame.SetLayer(): name=%s" % name)
-        
+        Debug.msg(3, "SwipeMapFrame.SetLayer(): name=%s" % name)
+
         # this simple application enables to keep only one raster
         mapInstance.DeleteAllLayers()
         cmdlist = ['d.rast', 'map=%s' % name]
         # add layer to Map instance (core.render)
-        newLayer = mapInstance.AddLayer(ltype = 'raster', command = cmdlist, active = True,
-                                        name = name, hidden = False, opacity = 1.0,
-                                        render = True)
+        newLayer = mapInstance.AddLayer(
+            ltype='raster',
+            command=cmdlist,
+            active=True,
+            name=name,
+            hidden=False,
+            opacity=1.0,
+            render=True)
 
     def OnSwitchWindows(self, event):
         """Switch windows position."""
@@ -517,32 +546,32 @@ class SwipeMapFrame(DoubleMapFrame):
         """
         img = self.firstMapWindow.img or self.secondMapWindow.img
         if not img:
-            GMessage(parent = self,
-                     message = _("Nothing to render (empty map). Operation canceled."))
+            GMessage(parent=self, message=_(
+                "Nothing to render (empty map). Operation canceled."))
             return
         filetype, ltype = GetImageHandlers(img)
-        
+
         # get filename
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to save the image "
-                                        "(no need to add extension)"),
-                            wildcard = filetype,
-                            style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
-        
+        dlg = wx.FileDialog(parent=self,
+                            message=_("Choose a file name to save the image "
+                                      "(no need to add extension)"),
+                            wildcard=filetype,
+                            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
                 dlg.Destroy()
                 return
-            
+
             base, ext = os.path.splitext(path)
             fileType = ltype[dlg.GetFilterIndex()]['type']
-            extType  = ltype[dlg.GetFilterIndex()]['ext']
+            extType = ltype[dlg.GetFilterIndex()]['ext']
             if ext != extType:
                 path = base + '.' + extType
-            
+
             self._saveToFile(path, fileType)
-            
+
         dlg.Destroy()
 
     def OnSwitchOrientation(self, event):
@@ -552,13 +581,15 @@ class SwipeMapFrame(DoubleMapFrame):
         splitter = self.splitter
         splitter.Unsplit()
         if splitter.GetSplitMode() == wx.SPLIT_HORIZONTAL:
-            splitter.SplitVertically(self.firstMapWindow, self.secondMapWindow, 0)
+            splitter.SplitVertically(
+                self.firstMapWindow, self.secondMapWindow, 0)
             self.slider = self.sliderH
             if self._mode == 'swipe':
                 self._mgr.GetPane('sliderH').Show()
                 self._mgr.GetPane('sliderV').Hide()
         else:
-            splitter.SplitHorizontally(self.firstMapWindow, self.secondMapWindow, 0)
+            splitter.SplitHorizontally(
+                self.firstMapWindow, self.secondMapWindow, 0)
             self.slider = self.sliderV
             if self._mode == 'swipe':
                 self._mgr.GetPane('sliderV').Show()
@@ -607,9 +638,11 @@ class SwipeMapFrame(DoubleMapFrame):
     def SetRasterNames(self):
         if not self._inputDialog or self._inputDialog.IsSimpleMode():
             if self.rasters['first']:
-                self.GetFirstWindow().SetRasterNameText(self.rasters['first'], 101)
+                self.GetFirstWindow().SetRasterNameText(
+                    self.rasters['first'], 101)
             if self.rasters['second']:
-                self.GetSecondWindow().SetRasterNameText(self.rasters['second'], 102)
+                self.GetSecondWindow().SetRasterNameText(
+                    self.rasters['second'], 102)
         else:
             self.GetFirstWindow().SetRasterNameText('', 101)
             self.GetSecondWindow().SetRasterNameText('', 102)
@@ -619,41 +652,66 @@ class SwipeMapFrame(DoubleMapFrame):
 
         :param x,y: coordinates
         """
-        rasters = ([layer.GetName() for layer in
-                    self.GetFirstMap().GetListOfLayers(ltype='raster', active=True)],
-                   [layer.GetName() for layer in
-                    self.GetSecondMap().GetListOfLayers(ltype='raster', active=True)])
-        vectors = ([layer.GetName() for layer in
-                    self.GetFirstMap().GetListOfLayers(ltype='vector', active=True)],
-                   [layer.GetName() for layer in
-                    self.GetSecondMap().GetListOfLayers(ltype='vector', active=True)])
+        rasters = (
+            [layer.GetName()
+             for layer in self.GetFirstMap().GetListOfLayers(
+                 ltype='raster', active=True)],
+            [layer.GetName()
+             for layer in self.GetSecondMap().GetListOfLayers(
+                 ltype='raster', active=True)])
+        vectors = (
+            [layer.GetName()
+             for layer in self.GetFirstMap().GetListOfLayers(
+                 ltype='vector', active=True)],
+            [layer.GetName()
+             for layer in self.GetSecondMap().GetListOfLayers(
+                 ltype='vector', active=True)])
 
         if not (rasters[0] + rasters[1] + vectors[0] + vectors[1]):
-            GMessage(parent=self,
-                     message=_('No raster or vector map layer selected for querying.'))
+            GMessage(
+                parent=self,
+                message=_(
+                    'No raster or vector map layer selected for querying.'))
             return
 
-        # set query snap distance for v.what at map unit equivalent of 10 pixels
-        qdist = 10.0 * ((self.GetFirstMap().region['e'] -
-                         self.GetFirstMap().region['w']) / self.GetFirstMap().width)
+        # set query snap distance for v.what at map unit equivalent of 10
+        # pixels
+        qdist = 10.0 * (
+            (self.GetFirstMap().region['e'] - self.GetFirstMap().region['w']) /
+            self.GetFirstMap().width)
 
         east, north = self.GetFirstWindow().Pixel2Cell((x, y))
 
         # use display region settings instead of computation region settings
         self.tmpreg = os.getenv("GRASS_REGION")
-        os.environ["GRASS_REGION"] = self.GetFirstMap().SetRegion(windres=False)
+        os.environ["GRASS_REGION"] = self.GetFirstMap(
+        ).SetRegion(windres=False)
 
         result = []
         if rasters[0]:
-            result.extend(grass.raster_what(map=rasters[0], coord=(east, north),
-                                            localized=True))
+            result.extend(
+                grass.raster_what(
+                    map=rasters[0],
+                    coord=(east, north),
+                    localized=True))
         if vectors[0]:
-            result.extend(grass.vector_what(map=vectors[0], coord=(east, north), distance=qdist))
+            result.extend(
+                grass.vector_what(
+                    map=vectors[0],
+                    coord=(east, north),
+                    distance=qdist))
         if rasters[1]:
-            result.extend(grass.raster_what(map=rasters[1], coord=(east, north),
-                                            localized=True))
+            result.extend(
+                grass.raster_what(
+                    map=rasters[1],
+                    coord=(east, north),
+                    localized=True))
         if vectors[1]:
-            result.extend(grass.vector_what(map=vectors[1], coord=(east, north), distance=qdist))
+            result.extend(
+                grass.vector_what(
+                    map=vectors[1],
+                    coord=(east, north),
+                    distance=qdist))
 
         self._QueryMapDone()
 
@@ -664,7 +722,8 @@ class SwipeMapFrame(DoubleMapFrame):
         else:
             self._queryDialog = QueryDialog(parent=self, data=result)
             self._queryDialog.Bind(wx.EVT_CLOSE, self._oncloseQueryDialog)
-            self._queryDialog.redirectOutput.connect(lambda output: self._giface.WriteLog(output))
+            self._queryDialog.redirectOutput.connect(
+                lambda output: self._giface.WriteLog(output))
             self._queryDialog.Show()
 
     def _oncloseQueryDialog(self, event):
@@ -694,7 +753,7 @@ class SwipeMapFrame(DoubleMapFrame):
         return True
 
     def OnHelp(self, event):
-        self._giface.Help(entry = 'wxGUI.mapswipe')
+        self._giface.Help(entry='wxGUI.mapswipe')
 
     def OnPreferences(self, event):
         if not self._preferencesDialog:
@@ -712,12 +771,13 @@ class SwipeMapFrame(DoubleMapFrame):
 
 class MapSplitter(wx.SplitterWindow):
     """Splitter window for displaying two maps"""
+
     def __init__(self, parent, id):
-        wx.SplitterWindow.__init__(self, parent = parent, id = id,
-                                   style = wx.SP_LIVE_UPDATE
+        wx.SplitterWindow.__init__(self, parent=parent, id=id,
+                                   style=wx.SP_LIVE_UPDATE
                                    )
         Debug.msg(2, "MapSplitter.__init__()")
-        
+
         self.sashWidthMin = 1
         self.sashWidthMax = 10
         self.Bind(wx.EVT_SPLITTER_SASH_POS_CHANGED, self.OnSashChanged)
@@ -728,7 +788,7 @@ class MapSplitter(wx.SplitterWindow):
         self._moveSash = enable
 
     def Init(self):
-        self.OnSashChanged(evt = None)
+        self.OnSashChanged(evt=None)
         self.SetMinimumPaneSize(0)
         self.SetSashSize(self.sashWidthMin)
 
@@ -763,13 +823,13 @@ class MapSplitter(wx.SplitterWindow):
         w1, w2 = self.GetWindow1(), self.GetWindow2()
         w1.movingSash = False
         w2.movingSash = False
-        
+
         wx.CallAfter(self.SashChanged)
 
     def SashChanged(self):
         Debug.msg(5, "MapSplitter.SashChanged()")
 
-        w1, w2 = self.GetWindow1(), self.GetWindow2() 
+        w1, w2 = self.GetWindow1(), self.GetWindow2()
         w1.SetImageCoords((0, 0))
         if self.GetSplitMode() == wx.SPLIT_VERTICAL:
             w = w1.GetSize()[0]
@@ -778,8 +838,8 @@ class MapSplitter(wx.SplitterWindow):
             h = w1.GetSize()[1]
             w2.SetImageCoords((0, -h))
 
-        w1.UpdateMap(render = False, renderVector = False)
-        w2.UpdateMap(render = False, renderVector = False)
+        w1.UpdateMap(render=False, renderVector=False)
+        w2.UpdateMap(render=False, renderVector=False)
 
         pos = self.GetSashPosition()
         self.last = pos
diff --git a/gui/wxpython/mapswipe/g.gui.mapswipe.py b/gui/wxpython/mapswipe/g.gui.mapswipe.py
index cb8532b..3787072 100755
--- a/gui/wxpython/mapswipe/g.gui.mapswipe.py
+++ b/gui/wxpython/mapswipe/g.gui.mapswipe.py
@@ -52,6 +52,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.settings import UserSettings
     from core.globalvar import CheckWxVersion
     from core.giface import StandaloneGrassInterface
diff --git a/gui/wxpython/mapswipe/mapwindow.py b/gui/wxpython/mapswipe/mapwindow.py
index 5aedd7f..6e3ffbc 100644
--- a/gui/wxpython/mapswipe/mapwindow.py
+++ b/gui/wxpython/mapswipe/mapwindow.py
@@ -32,11 +32,12 @@ EVT_MOTION = wx.PyEventBinder(EVT_MY_MOTION)
 
 
 class SwipeBufferedWindow(BufferedMapWindow):
-    """A subclass of BufferedWindow class. 
+    """A subclass of BufferedWindow class.
 
     Enables to draw the image translated.
     Special mouse events with changed coordinates are used.
     """
+
     def __init__(self, parent, giface, Map, properties, **kwargs):
         BufferedMapWindow.__init__(self, parent=parent, giface=giface, Map=Map,
                                    properties=properties, **kwargs)
@@ -106,7 +107,9 @@ class SwipeBufferedWindow(BufferedMapWindow):
 
     def SetImageCoords(self, coords):
         """Sets coordinates of rendered image"""
-        Debug.msg(3, "SwipeBufferedWindow.SetImageCoords(): coords = %s, %s" % (coords[0], coords[1]))
+        Debug.msg(
+            3, "SwipeBufferedWindow.SetImageCoords(): coords = %s, %s" %
+            (coords[0], coords[1]))
         self.specialCoords = coords
 
     def OnSize(self, event):
@@ -115,7 +118,8 @@ class SwipeBufferedWindow(BufferedMapWindow):
         if not self.movingSash:
             super(SwipeBufferedWindow, self).OnSize(event)
 
-    def Draw(self, pdc, img = None, drawid = None, pdctype = 'image', coords = [0, 0, 0, 0], pen = None):
+    def Draw(self, pdc, img=None, drawid=None, pdctype='image',
+             coords=[0, 0, 0, 0], pen=None, brush=None):
         """Draws image (map) with translated coordinates.
         """
         Debug.msg(2, "SwipeBufferedWindow.Draw()")
@@ -123,8 +127,9 @@ class SwipeBufferedWindow(BufferedMapWindow):
         if pdctype == 'image':
             coords = self.GetImageCoords()
 
-        return super(SwipeBufferedWindow, self).Draw(pdc, img, drawid, pdctype, coords, pen)
-        
+        return super(SwipeBufferedWindow, self).Draw(
+            pdc, img, drawid, pdctype, coords, pen, brush)
+
     def OnLeftDown(self, event):
         """Left mouse button pressed.
 
@@ -141,7 +146,7 @@ class SwipeBufferedWindow(BufferedMapWindow):
             if 99 in idlist:
                 idlist.remove(99)
             if idlist:
-                self.dragid = idlist[0] #drag whatever is on top
+                self.dragid = idlist[0]  # drag whatever is on top
         else:
             super(SwipeBufferedWindow, self).OnLeftDown(event)
 
@@ -150,7 +155,7 @@ class SwipeBufferedWindow(BufferedMapWindow):
 
         Coordinates must be adjusted.
         """
-        if (self.mouse['use'] == 'pointer' and self.dragid != None):
+        if (self.mouse['use'] == 'pointer' and self.dragid is not None):
             evX, evY = event.GetPositionTuple()
             imX, imY = self.GetImageCoords()
             self.DragItem(self.dragid, (evX + imX, evY + imY))
@@ -160,7 +165,9 @@ class SwipeBufferedWindow(BufferedMapWindow):
     def TranslateImage(self, dx, dy):
         """Translate image and redraw.
         """
-        Debug.msg(5, "SwipeBufferedWindow.TranslateImage(): dx = %s, dy = %s" % (dx, dy))
+        Debug.msg(
+            5, "SwipeBufferedWindow.TranslateImage(): dx = %s, dy = %s" %
+            (dx, dy))
 
         self.pdc.TranslateId(self.imageId, dx, dy)
         self.Refresh()
@@ -169,35 +176,61 @@ class SwipeBufferedWindow(BufferedMapWindow):
         """Sets text label with map name."""
         self.textdict[textId] = {'bbox': wx.Rect(), 'coords': [10, 10],
                                  'font': self.GetFont(), 'color': wx.BLACK,
-                                 'background' : wx.LIGHT_GREY,
+                                 'background': wx.LIGHT_GREY,
                                  'rotation': 0, 'text': name,
                                  'active': True}
 
-    def MouseDraw(self, pdc = None, begin = None, end = None):
+    def MouseDraw(self, pdc=None, begin=None, end=None):
         """Overriden method to recompute coordinates back to original values
         so that e.g. drawing of zoom box is done properly"""
         Debug.msg(5, "SwipeBufferedWindow.MouseDraw()")
 
         offsetX, offsetY = self.GetImageCoords()
-        begin = (self.mouse['begin'][0] + offsetX, self.mouse['begin'][1] + offsetY)
+        begin = (
+            self.mouse['begin'][0] +
+            offsetX,
+            self.mouse['begin'][1] +
+            offsetY)
         end = (self.mouse['end'][0] + offsetX, self.mouse['end'][1] + offsetY)
         super(SwipeBufferedWindow, self).MouseDraw(pdc, begin, end)
 
     def DrawMouseCursor(self, coords):
         """Draw moving cross."""
         self.pdcTmp.ClearId(self.lineid)
-        color = UserSettings.Get(group='mapswipe', key='cursor', subkey='color')
-        cursType = UserSettings.Get(group='mapswipe', key='cursor', subkey=['type', 'selection'])
+        color = UserSettings.Get(
+            group='mapswipe',
+            key='cursor',
+            subkey='color')
+        cursType = UserSettings.Get(
+            group='mapswipe', key='cursor', subkey=[
+                'type', 'selection'])
         size = UserSettings.Get(group='mapswipe', key='cursor', subkey='size')
-        width = UserSettings.Get(group='mapswipe', key='cursor', subkey='width')
+        width = UserSettings.Get(
+            group='mapswipe',
+            key='cursor',
+            subkey='width')
         if cursType == 0:
-            self.lineid = self.DrawCross(pdc=self.pdcTmp, coords=coords, size=size,
-                                         pen=wx.Pen(wx.Colour(*color), width))
+            self.lineid = self.DrawCross(
+                pdc=self.pdcTmp,
+                coords=coords,
+                size=size,
+                pen=wx.Pen(
+                    wx.Colour(
+                        *color),
+                    width))
         elif cursType == 1:
-            self.lineid = self.DrawRectangle(pdc=self.pdcTmp,
-                                             point1=(coords[0] - size / 2, coords[1] - size / 2),
-                                             point2=(coords[0] + size / 2, coords[1] + size / 2),
-                                             pen=wx.Pen(wx.Colour(*color), width))
+            self.lineid = self.DrawRectangle(
+                pdc=self.pdcTmp,
+                point1=(
+                    coords[0] - size / 2,
+                    coords[1] - size / 2),
+                point2=(
+                    coords[0] + size / 2,
+                    coords[1] + size / 2),
+                pen=wx.Pen(
+                    wx.Colour(
+                        *color),
+                    width))
         elif cursType == 2:
             self.lineid = self.DrawCircle(pdc=self.pdcTmp,
                                           coords=coords, radius=size / 2,
@@ -206,17 +239,17 @@ class SwipeBufferedWindow(BufferedMapWindow):
 
 class _MouseEvent(wx.PyCommandEvent):
     """
-    This event class takes a regular wxWindows mouse event as a parameter, 
-    and wraps it so that there is access to all the original methods. This 
+    This event class takes a regular wxWindows mouse event as a parameter,
+    and wraps it so that there is access to all the original methods. This
     is similar to subclassing, but you can't subclass a wxWindows event.
 
     The goal is to be able to it just like a regular mouse event.
 
-    Difference is that it is a CommandEvent, which propagates up the 
+    Difference is that it is a CommandEvent, which propagates up the
     window hierarchy until it is handled.
     """
 
-    def __init__(self, EventType, NativeEvent, WinID, changed = None):
+    def __init__(self, EventType, NativeEvent, WinID, changed=None):
         Debug.msg(5, "_MouseEvent:__init__()")
 
         wx.PyCommandEvent.__init__(self)
@@ -233,7 +266,7 @@ class _MouseEvent(wx.PyCommandEvent):
 
     def GetX(self):
         return self.changed[0]
-        
+
     def GetY(self):
         return self.changed[1]
 
diff --git a/gui/wxpython/mapswipe/toolbars.py b/gui/wxpython/mapswipe/toolbars.py
index 7c125dc..d516f78 100644
--- a/gui/wxpython/mapswipe/toolbars.py
+++ b/gui/wxpython/mapswipe/toolbars.py
@@ -23,18 +23,25 @@ from icons.icon import MetaIcon
 from core.utils import _
 
 
-swipeIcons = {'tools': MetaIcon(img='tools', label=_("Tools")),
-              'quit': BaseIcons['quit'].SetLabel(_("Quit Map Swipe")),
-              'addRast': BaseIcons['addRast'].SetLabel(_("Select raster maps")),
-              'query': MetaIcon(img='info',
-                                label=_('Query raster/vector map(s)'),
-                                desc=_('Query selected raster/vector map(s)')),
-              }
+swipeIcons = {
+    'tools': MetaIcon(
+        img='tools',
+        label=_("Tools")),
+    'quit': BaseIcons['quit'].SetLabel(
+        _("Quit Map Swipe")),
+    'addRast': BaseIcons['addRast'].SetLabel(
+        _("Select raster maps")),
+    'query': MetaIcon(
+        img='info',
+        label=_('Query raster/vector map(s)'),
+        desc=_('Query selected raster/vector map(s)')),
+}
 
 
 class SwipeMapToolbar(BaseToolbar):
     """Map toolbar (to control map zoom and rendering)
     """
+
     def __init__(self, parent, toolSwitcher):
         """Map toolbar constructor
         """
@@ -46,8 +53,10 @@ class SwipeMapToolbar(BaseToolbar):
         # realize the toolbar
         self.Realize()
 
-        for tool in (self.pointer, self.query, self.pan, self.zoomIn, self.zoomOut):
-            self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
+        for tool in (self.pointer, self.query, self.pan,
+                     self.zoomIn, self.zoomOut):
+            self.toolSwitcher.AddToolToGroup(
+                group='mouseUse', toolbar=self, tool=tool)
 
         self.EnableTool(self.zoomBack, False)
 
@@ -56,13 +65,8 @@ class SwipeMapToolbar(BaseToolbar):
         # BaseIcons are a set of often used icons. It is possible
         # to reuse icons in ./trunk/gui/icons/grass or add new ones there.
         icons = BaseIcons
-        return self._getToolbarData((("displaymap", icons["display"],
-                                      self.parent.OnDraw),
-                                     ("rendermap", icons["render"],
+        return self._getToolbarData((("rendermap", icons["render"],
                                       self.parent.OnRender),
-                                     ("erase", icons["erase"],
-                                      self.parent.OnErase),
-                                     (None, ),  # creates separator
                                      ("pointer", icons["pointer"],
                                       self.parent.OnPointer,
                                       wx.ITEM_CHECK),
@@ -98,6 +102,7 @@ class SwipeMapToolbar(BaseToolbar):
 class SwipeMainToolbar(BaseToolbar):
     """Toolbar with tools related to application functionality
     """
+
     def __init__(self, parent):
         """Toolbar constructor
         """
@@ -108,13 +113,18 @@ class SwipeMainToolbar(BaseToolbar):
         # add tool to toggle active map window
         self.toggleModeId = wx.NewId()
         self.toggleMode = wx.Choice(parent=self, id=self.toggleModeId)
-        for label, cdata in zip([_('Swipe mode'), _('Mirror mode')], ['swipe', 'mirror']):
+        for label, cdata in zip(
+                [_('Swipe mode'),
+                 _('Mirror mode')],
+                ['swipe', 'mirror']):
             self.toggleMode.Append(label, cdata)
         self.toggleMode.SetSelection(0)
         self.toggleMode.SetSize(self.toggleMode.GetBestSize())
-        self.toggleMode.Bind(wx.EVT_CHOICE,
-                             lambda event:
-                             self.parent.SetViewMode(self.toggleMode.GetClientData(event.GetSelection())))
+        self.toggleMode.Bind(
+            wx.EVT_CHOICE,
+            lambda event: self.parent.SetViewMode(
+                self.toggleMode.GetClientData(
+                    event.GetSelection())))
         self.InsertControl(3, self.toggleMode)
 
         help = _("Choose view mode")
@@ -142,7 +152,8 @@ class SwipeMainToolbar(BaseToolbar):
 
         for label, itype, handler, desc in (
             (_("Switch orientation"),
-             wx.ITEM_NORMAL, self.parent.OnSwitchOrientation, "switchOrientation"),
+             wx.ITEM_NORMAL, self.parent.OnSwitchOrientation,
+             "switchOrientation"),
             (_("Switch maps"),
              wx.ITEM_NORMAL, self.parent.OnSwitchWindows, "switchMaps")):
             # Add items to the menu
@@ -161,6 +172,7 @@ class SwipeMainToolbar(BaseToolbar):
 class SwipeMiscToolbar(BaseToolbar):
     """Toolbar with miscellaneous tools related to app
     """
+
     def __init__(self, parent):
         """Toolbar constructor
         """
diff --git a/gui/wxpython/mapwin/__init__.py b/gui/wxpython/mapwin/__init__.py
index a6f8448..2c31cf8 100644
--- a/gui/wxpython/mapwin/__init__.py
+++ b/gui/wxpython/mapwin/__init__.py
@@ -4,4 +4,4 @@ all = [
     'analysis',
     'decorations',
     'base',
-    ]
+]
diff --git a/gui/wxpython/mapwin/analysis.py b/gui/wxpython/mapwin/analysis.py
index b68414a..b581810 100644
--- a/gui/wxpython/mapwin/analysis.py
+++ b/gui/wxpython/mapwin/analysis.py
@@ -32,6 +32,7 @@ from grass.script.utils import parse_key_val
 
 class AnalysisControllerBase:
     """Base class for analysis which require drawing line in map display."""
+
     def __init__(self, giface, mapWindow):
         """
 
@@ -61,7 +62,8 @@ class AnalysisControllerBase:
             item = self._registeredGraphics.AddItem(coords=[[x, y]])
             item.SetPropertyVal('penName', 'analysisPen')
         else:
-            # needed to switch mouse begin and end to draw intermediate line properly
+            # needed to switch mouse begin and end to draw intermediate line
+            # properly
             coords = self._registeredGraphics.GetItem(0).GetCoords()[-1]
             self._mapWindow.mouse['begin'] = self._mapWindow.Cell2Pixel(coords)
 
@@ -76,7 +78,7 @@ class AnalysisControllerBase:
         item.SetCoords(coords)
         # draw
         self._mapWindow.ClearLines()
-        self._registeredGraphics.Draw(pdc=self._mapWindow.pdcTmp)
+        self._registeredGraphics.Draw()
         self._mapWindow.Refresh()
         wx.SafeYield()
 
@@ -118,7 +120,8 @@ class AnalysisControllerBase:
         self._mapWindow.UpdateMap(render=False)
 
         if restore:
-            # restore mouse['use'] and cursor to the state before measuring starts
+            # restore mouse['use'] and cursor to the state before measuring
+            # starts
             self._mapWindow.SetNamedCursor(self._oldCursor)
             self._mapWindow.mouse['use'] = self._oldMouseUse
 
@@ -129,8 +132,8 @@ class AnalysisControllerBase:
         self._oldMouseUse = self._mapWindow.mouse['use']
         self._oldCursor = self._mapWindow.GetNamedCursor()
 
-        self._registeredGraphics = self._mapWindow.RegisterGraphicsToDraw(graphicsType=self._graphicsType,
-                                                                          mapCoords=True)
+        self._registeredGraphics = self._mapWindow.RegisterGraphicsToDraw(
+            graphicsType=self._graphicsType, mapCoords=True)
 
         self._connectAll()
 
@@ -138,7 +141,8 @@ class AnalysisControllerBase:
         # TODO: better solution for drawing this line
         self._mapWindow.mouse['use'] = None
         self._mapWindow.mouse['box'] = "line"
-        self._mapWindow.pen = wx.Pen(colour='red', width=2, style=wx.SHORT_DASH)
+        self._mapWindow.pen = wx.Pen(
+            colour='red', width=2, style=wx.SHORT_DASH)
 
         self._registeredGraphics.AddPen('analysisPen', self._getPen())
 
@@ -150,8 +154,10 @@ class ProfileController(AnalysisControllerBase):
     """Class controls profiling in map display.
     It should be used inside ProfileFrame
     """
+
     def __init__(self, giface, mapWindow):
-        AnalysisControllerBase.__init__(self, giface=giface, mapWindow=mapWindow)
+        AnalysisControllerBase.__init__(
+            self, giface=giface, mapWindow=mapWindow)
 
         self.transectChanged = Signal('ProfileController.transectChanged')
         self._graphicsType = 'line'
@@ -172,7 +178,9 @@ class ProfileController(AnalysisControllerBase):
         self._mapWindow.mouseLeftUp.connect(self._addPoint)
 
     def _getPen(self):
-        return wx.Pen(colour=wx.Colour(0, 100, 0), width=2, style=wx.SHORT_DASH)
+        return wx.Pen(
+            colour=wx.Colour(0, 100, 0),
+            width=2, style=wx.SHORT_DASH)
 
     def Stop(self, restore=True):
         AnalysisControllerBase.Stop(self, restore=restore)
@@ -182,8 +190,10 @@ class ProfileController(AnalysisControllerBase):
 
 class MeasureDistanceController(AnalysisControllerBase):
     """Class controls measuring distance in map display."""
+
     def __init__(self, giface, mapWindow):
-        AnalysisControllerBase.__init__(self, giface=giface, mapWindow=mapWindow)
+        AnalysisControllerBase.__init__(
+            self, giface=giface, mapWindow=mapWindow)
 
         self._projInfo = self._mapWindow.Map.projinfo
         self._totaldist = 0.0  # total measured distance
@@ -229,11 +239,14 @@ class MeasureDistanceController(AnalysisControllerBase):
         # initiating output (and write a message)
         # e.g., in Layer Manager switch to output console
         # TODO: this should be something like: write important message or write tip
-        # TODO: mixed 'switching' and message? no, measuring handles 'swithing' on its own
-        self._giface.WriteWarning(_('Click and drag with left mouse button '
-                                    'to measure.%s'
-                                    'Double click with left button to clear.') %
-                                   (os.linesep))
+        # TODO: mixed 'switching' and message? no, measuring handles 'swithing'
+        # on its own
+        self._giface.WriteWarning(
+            _(
+                'Click and drag with left mouse button '
+                'to measure.%s'
+                'Double click with left button to clear.') %
+            (os.linesep))
         if self._projInfo['proj'] != 'xy':
             mapunits = self._projInfo['units']
             self._giface.WriteCmdLog(_('Measuring distance') + ' ('
@@ -257,7 +270,8 @@ class MeasureDistanceController(AnalysisControllerBase):
         :param beginpt,endpt: EN coordinates
         """
         # move also Distance method?
-        dist, (north, east) = self._mapWindow.Distance(beginpt, endpt, screen=False)
+        dist, (north, east) = self._mapWindow.Distance(
+            beginpt, endpt, screen=False)
 
         dist = round(dist, 3)
         mapunits = self._projInfo['units']
@@ -274,7 +288,8 @@ class MeasureDistanceController(AnalysisControllerBase):
         strdist = str(d)
         strtotdist = str(td)
 
-        if self._projInfo['proj'] == 'xy' or 'degree' not in self._projInfo['unit']:
+        if self._projInfo[
+                'proj'] == 'xy' or 'degree' not in self._projInfo['unit']:
             angle = int(math.degrees(math.atan2(north, east)) + 0.5)
             # uncomment below (or flip order of atan2(y,x) above) to use
             #   the mathematical theta convention (CCW from +x axis)
@@ -282,11 +297,12 @@ class MeasureDistanceController(AnalysisControllerBase):
             if angle < 0:
                 angle = 360 + angle
 
-            mstring = '%s = %s %s\n%s = %s %s\n%s = %d %s\n%s' \
-                % (_('segment'), strdist, dunits,
-                   _('total distance'), strtotdist, tdunits,
-                   _('bearing'), angle, _('degrees (clockwise from grid-north)'),
-                   '-' * 60)
+            mstring = '%s = %s %s\n%s = %s %s\n%s = %d %s\n%s' % (
+                _('segment'),
+                strdist, dunits, _('total distance'),
+                strtotdist, tdunits, _('bearing'),
+                angle, _('degrees (clockwise from grid-north)'),
+                '-' * 60)
         else:
             mstring = '%s = %s %s\n%s = %s %s\n%s' \
                 % (_('segment'), strdist, dunits,
@@ -300,8 +316,10 @@ class MeasureDistanceController(AnalysisControllerBase):
 
 class MeasureAreaController(AnalysisControllerBase):
     """Class controls measuring area in map display."""
+
     def __init__(self, giface, mapWindow):
-        AnalysisControllerBase.__init__(self, giface=giface, mapWindow=mapWindow)
+        AnalysisControllerBase.__init__(
+            self, giface=giface, mapWindow=mapWindow)
         self._graphicsType = 'polygon'
 
     def _doAnalysis(self, coords):
@@ -339,10 +357,12 @@ class MeasureAreaController(AnalysisControllerBase):
             return
         AnalysisControllerBase.Start(self)
 
-        self._giface.WriteWarning(_('Click and drag with left mouse button '
-                                    'to measure.%s'
-                                    'Double click with left button to clear.') %
-                                   (os.linesep))
+        self._giface.WriteWarning(
+            _(
+                'Click and drag with left mouse button '
+                'to measure.%s'
+                'Double click with left button to clear.') %
+            (os.linesep))
         self._giface.WriteCmdLog(_('Measuring area:'))
 
     def MeasureArea(self, coords):
@@ -352,16 +372,24 @@ class MeasureAreaController(AnalysisControllerBase):
         """
         # TODO: make sure appending first point is needed for m.measure
         coordinates = coords + [coords[0]]
-        coordinates = ','.join([str(item) for sublist in coordinates for item in sublist])
-        result = RunCommand('m.measure', flags='g', coordinates=coordinates, read=True).strip()
+        coordinates = ','.join([str(item)
+                                for sublist in coordinates for item in
+                                sublist])
+        result = RunCommand(
+            'm.measure',
+            flags='g',
+            coordinates=coordinates,
+            read=True).strip()
         result = parse_key_val(result)
         if 'units' not in result:
-            self._giface.WriteWarning(_("Units not recognized, measurement failed."))
+            self._giface.WriteWarning(
+                _("Units not recognized, measurement failed."))
             unit = ''
         else:
             unit = result['units'].split(',')[1]
         if 'area' not in result:
             text = _("Area: {area} {unit}\n").format(area=0, unit=unit)
         else:
-            text = _("Area: {area} {unit}\n").format(area=result['area'], unit=unit)
+            text = _("Area: {area} {unit}\n").format(
+                area=result['area'], unit=unit)
         self._giface.WriteLog(text, notification=Notification.MAKE_VISIBLE)
diff --git a/gui/wxpython/mapwin/base.py b/gui/wxpython/mapwin/base.py
index dac751c..f6a86d6 100644
--- a/gui/wxpython/mapwin/base.py
+++ b/gui/wxpython/mapwin/base.py
@@ -22,7 +22,7 @@ This program is free software under the GNU General Public License
 import wx
 
 from core.settings import UserSettings
-from core.gcmd     import GError
+from core.gcmd import GError
 from core.utils import _
 
 from grass.script import core as grass
@@ -30,15 +30,20 @@ from grass.pydispatch.signal import Signal
 
 
 class MapWindowProperties(object):
+
     def __init__(self):
         self._resolution = None
-        self.resolutionChanged = Signal('MapWindowProperties.resolutionChanged')
+        self.resolutionChanged = Signal(
+            'MapWindowProperties.resolutionChanged')
         self._autoRender = None
-        self.autoRenderChanged = Signal('MapWindowProperties.autoRenderChanged')
+        self.autoRenderChanged = Signal(
+            'MapWindowProperties.autoRenderChanged')
         self._showRegion = None
-        self.showRegionChanged = Signal('MapWindowProperties.showRegionChanged')
+        self.showRegionChanged = Signal(
+            'MapWindowProperties.showRegionChanged')
         self._alignExtent = None
-        self.alignExtentChanged = Signal('MapWindowProperties.alignExtentChanged')
+        self.alignExtentChanged = Signal(
+            'MapWindowProperties.alignExtentChanged')
 
     def setValuesFromUserSettings(self):
         """Convenient function to get values from user settings into this object."""
@@ -105,28 +110,31 @@ class MapWindowBase(object):
      - Pixel2Cell
      - Cell2Pixel (if it is possible)
     """
+
     def __init__(self, parent, giface, Map):
         self.parent = parent
         self.Map = Map
         self._giface = giface
 
         # Emitted when someone registers as mouse event handler
-        self.mouseHandlerRegistered = Signal('MapWindow.mouseHandlerRegistered')
+        self.mouseHandlerRegistered = Signal(
+            'MapWindow.mouseHandlerRegistered')
         # Emitted when mouse event handler is unregistered
-        self.mouseHandlerUnregistered = Signal('MapWindow.mouseHandlerUnregistered')
+        self.mouseHandlerUnregistered = Signal(
+            'MapWindow.mouseHandlerUnregistered')
         # emitted after double click in pointer mode on legend, text, scalebar
         self.overlayActivated = Signal('MapWindow.overlayActivated')
         # emitted when overlay should be hidden
-        self.overlayHidden = Signal('MapWindow.overlayHidden')
+        self.overlayRemoved = Signal('MapWindow.overlayRemoved')
 
         # mouse attributes -- position on the screen, begin and end of
         # dragging, and type of drawing
         self.mouse = {
-            'begin': [0, 0], # screen coordinates
-            'end'  : [0, 0],
-            'use'  : "pointer",
-            'box'  : "point"
-            }
+            'begin': [0, 0],  # screen coordinates
+            'end': [0, 0],
+            'use': "pointer",
+            'box': "point"
+        }
         # last east, north coordinates, changes on mouse motion
         self.lastEN = None
 
@@ -136,21 +144,21 @@ class MapWindowBase(object):
         # dictionary where event types are stored as keys and lists of
         # handlers for these types as values
         self.handlersContainer = {
-            wx.EVT_LEFT_DOWN : [],
-            wx.EVT_LEFT_UP : [],
-            wx.EVT_LEFT_DCLICK : [],
-            wx.EVT_MIDDLE_DOWN : [],
-            wx.EVT_MIDDLE_UP : [],
-            wx.EVT_MIDDLE_DCLICK : [],
-            wx.EVT_RIGHT_DOWN : [],
-            wx.EVT_RIGHT_UP : [],
-            wx.EVT_RIGHT_DCLICK : [],
-            wx.EVT_MOTION : [],
-            wx.EVT_ENTER_WINDOW : [],
-            wx.EVT_LEAVE_WINDOW : [],
-            wx.EVT_MOUSEWHEEL : [],
-            wx.EVT_MOUSE_EVENTS : []
-            }
+            wx.EVT_LEFT_DOWN: [],
+            wx.EVT_LEFT_UP: [],
+            wx.EVT_LEFT_DCLICK: [],
+            wx.EVT_MIDDLE_DOWN: [],
+            wx.EVT_MIDDLE_UP: [],
+            wx.EVT_MIDDLE_DCLICK: [],
+            wx.EVT_RIGHT_DOWN: [],
+            wx.EVT_RIGHT_UP: [],
+            wx.EVT_RIGHT_DCLICK: [],
+            wx.EVT_MOTION: [],
+            wx.EVT_ENTER_WINDOW: [],
+            wx.EVT_LEAVE_WINDOW: [],
+            wx.EVT_MOUSEWHEEL: [],
+            wx.EVT_MOUSE_EVENTS: []
+        }
 
         # available cursors
         self._cursors = {
@@ -159,7 +167,7 @@ class MapWindowBase(object):
             "hand": wx.StockCursor(wx.CURSOR_HAND),
             "pencil": wx.StockCursor(wx.CURSOR_PENCIL),
             "sizenwse": wx.StockCursor(wx.CURSOR_SIZENWSE)
-            }
+        }
 
         # default cursor for window is arrow (at least we rely on it here)
         # but we need to define attribute here
@@ -180,7 +188,7 @@ class MapWindowBase(object):
             self.Bind(ev, self.EventTypeHandler(handlers))
 
     def EventTypeHandler(self, evHandlers):
-        return lambda event : self.HandlersCaller(event, evHandlers)
+        return lambda event: self.HandlersCaller(event, evHandlers)
 
     def HandlersCaller(self, event, handlers):
         """Hepler function which calls all handlers registered for
@@ -191,11 +199,13 @@ class MapWindowBase(object):
                 handler(event)
             except:
                 handlers.remove(handler)
-                GError(parent=self,
-                       message=_("Error occurred during calling of handler: %s \n"
-                                 "Handler was unregistered.") % handler.__name__)
+                GError(
+                    parent=self, message=_(
+                        "Error occurred during calling of handler: %s \n"
+                        "Handler was unregistered.") %
+                    handler.__name__)
 
-        event.Skip() 
+        event.Skip()
 
     def RegisterMouseEventHandler(self, event, handler, cursor=None):
         """Binds event handler
@@ -245,20 +255,20 @@ class MapWindowBase(object):
         self.mouseHandlerRegistered.emit()
         # inserts handler into list
         for containerEv, handlers in self.handlersContainer.iteritems():
-            if event == containerEv: 
+            if event == containerEv:
                 handlers.append(handler)
-        
+
         self.mouse['useBeforeGenericEvent'] = self.mouse['use']
         self.mouse['use'] = 'genericEvent'
-        
+
         if cursor:
             self._overriddenCursor = self.GetNamedCursor()
             self.SetNamedCursor(cursor)
-        
+
         return True
 
     def UnregisterAllHandlers(self):
-        """Unregisters all registered handlers 
+        """Unregisters all registered handlers
 
         @depreciated This method is depreciated. Use Signals or drawing API instead.
 
@@ -271,11 +281,11 @@ class MapWindowBase(object):
                     handler("unregistered")
                     handlers.remove(handler)
                 except:
-                    GError(parent = self,
-                           message = _("Error occurred during unregistration of handler: %s \n \
+                    GError(parent=self,
+                           message=_("Error occurred during unregistration of handler: %s \n \
                                        Handler was unregistered.") % handler.__name__)
                     handlers.remove(handler)
-        
+
     def UnregisterMouseEventHandler(self, event, handler):
         """Unbinds event handler for event
 
@@ -288,11 +298,11 @@ class MapWindowBase(object):
 
         :param handler: handler to unbind
         :param event: event from which handler will be unbinded
-        
+
         :return: True if successful
         :return: False if event cannot be unbind
         """
-        # removes handler from list 
+        # removes handler from list
         for containerEv, handlers in self.handlersContainer.iteritems():
             if event != containerEv:
                 continue
@@ -301,27 +311,27 @@ class MapWindowBase(object):
                 if handler in handlers:
                     handlers.remove(handler)
                 else:
-                    grass.warning(_("Handler: %s was not registered") \
-                                      % handler.__name__)
+                    grass.warning(_("Handler: %s was not registered")
+                                  % handler.__name__)
             except:
-                GError(parent = self,
-                       message = _("Error occurred during unregistration of handler: %s \n \
+                GError(parent=self,
+                       message=_("Error occurred during unregistration of handler: %s \n \
                                        Handler was unregistered") % handler.__name__)
-                handlers.remove(handler) 
-        
+                handlers.remove(handler)
+
         # restore mouse use (previous state)
         self.mouse['use'] = self.mouse['useBeforeGenericEvent']
-        
+
         # restore overridden cursor
         if self._overriddenCursor:
             self.SetNamedCursor(self._overriddenCursor)
 
         self.mouseHandlerUnregistered.emit()
         return True
-    
+
     def Pixel2Cell(self, xyCoords):
         raise NotImplementedError()
-    
+
     def Cell2Pixel(self, enCoords):
         raise NotImplementedError()
 
diff --git a/gui/wxpython/mapwin/buffered.py b/gui/wxpython/mapwin/buffered.py
index 9c83f11..9882de5 100644
--- a/gui/wxpython/mapwin/buffered.py
+++ b/gui/wxpython/mapwin/buffered.py
@@ -33,12 +33,12 @@ from grass.pydispatch.signal import Signal
 
 import grass.script as grass
 
-from gui_core.dialogs   import SavedRegion
-from core.gcmd          import RunCommand, GException, GError, GMessage
-from core.debug         import Debug
-from core.settings      import UserSettings
+from gui_core.dialogs import SavedRegion
+from core.gcmd import RunCommand, GException, GError, GMessage
+from core.debug import Debug
+from core.settings import UserSettings
 from mapwin.base import MapWindowBase
-from core.utils         import GetGEventAttribsForHandler, _
+from core.utils import GetGEventAttribsForHandler, _
 import core.utils as utils
 from mapwin.graphics import GraphicsSet
 from core.gthread import gThread
@@ -60,9 +60,10 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     can also save the drawing to file by calling the
     SaveToFile() method.
     """
+
     def __init__(self, parent, giface, Map, properties,
                  id=wx.ID_ANY, overlays=None,
-                 style = wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs):
+                 style=wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs):
         """
         :param parent: parent window
         :param giface: grass interface instance
@@ -75,22 +76,27 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         MapWindowBase.__init__(self, parent=parent, giface=giface, Map=Map)
         wx.Window.__init__(self, parent=parent, id=id, style=style, **kwargs)
         self.SetBackgroundColour("white")
-        
+
         self._properties = properties
+        # this class should not ask for digit, this is a hack
+        self.digit = None
 
         # flags
-        self.resize = False # indicates whether or not a resize event has taken place
-        self.dragimg = None # initialize variable for map panning
-        self.alwaysRender = False # if it always sets render to True in self.UpdateMap()
+        self.resize = False  # indicates whether or not a resize event has taken place
+        self.dragimg = None  # initialize variable for map panning
+        self.alwaysRender = False  # if it always sets render to True in self.UpdateMap()
 
         # variables for drawing on DC
         self.pen = None      # pen for drawing zoom boxes, etc.
-        self.polypen = None  # pen for drawing polylines (measurements, profiles, etc)
-        # List of wx.Point tuples defining a polyline (geographical coordinates)
+        # pen for drawing polylines (measurements, profiles, etc)
+        self.polypen = None
+        # List of wx.Point tuples defining a polyline (geographical
+        # coordinates)
         self.polycoords = []
         # ID of rubber band line
         self.lineid = None
-        # ID of poly line resulting from cumulative rubber band lines (e.g. measurement)
+        # ID of poly line resulting from cumulative rubber band lines (e.g.
+        # measurement)
         self.plineid = None
 
         # following class members deals with merging more updateMap request
@@ -115,9 +121,11 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         self.mapQueried = Signal('BufferedWindow.mapQueried')
 
         # Emitted when the zoom history stack is emptied
-        self.zoomHistoryUnavailable = Signal('BufferedWindow.zoomHistoryUnavailable')
+        self.zoomHistoryUnavailable = Signal(
+            'BufferedWindow.zoomHistoryUnavailable')
         # Emitted when the zoom history stack is not empty
-        self.zoomHistoryAvailable = Signal('BufferedWindow.zoomHistoryAvailable')
+        self.zoomHistoryAvailable = Signal(
+            'BufferedWindow.zoomHistoryAvailable')
 
         # Emitted when map enters the window
         self.mouseEntered = Signal('BufferedWindow.mouseEntered')
@@ -129,6 +137,8 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         self.mouseLeftUpPointer = Signal('BufferedWindow.mouseLeftUpPointer')
         # Emitted when left mouse button is released
         self.mouseLeftUp = Signal('BufferedWindow.mouseLeftUp')
+        # Emitted when right mouse button is released
+        self.mouseRightUp = Signal('BufferedWindow.mouseRightUp')
         # Emitted when left mouse button was pressed
         self.mouseLeftDown = Signal('BufferedWindow.mouseLeftDown')
         # Emitted after double-click
@@ -138,52 +148,55 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         self.mouseMoving = Signal('BufferedWindow.mouseMoving')
 
         # event bindings
-        self.Bind(wx.EVT_PAINT,           self.OnPaint)
-        self.Bind(wx.EVT_SIZE,            self.OnSize)
-        self.Bind(wx.EVT_IDLE,            self.OnIdle)
+        self.Bind(wx.EVT_PAINT, self.OnPaint)
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
 
         self._bindMouseEvents()
 
         self.processMouse = True
 
         # render output objects
-        self.mapfile = None   # image file to be rendered
-        self.img     = None   # wx.Image object (self.mapfile)
+        self.img = None   # wx.Image object (self.mapfile)
         # decoration overlays
         self.overlays = overlays
-        self._overlayNames = {0:  _("legend"), 1: _("scale bar"), 2: _("north arrow")}
         # images and their PseudoDC ID's for painting and dragging
         self.imagedict = {}
         self.select = {}      # selecting/unselecting decorations for dragging
         self.textdict = {}    # text, font, and color indexed by id
 
+
         # zoom objects
-        self.zoomhistory  = [] # list of past zoom extents
-        self.currzoom     = 0  # current set of extents in zoom history being used
-        self.zoomtype     = 1  # 1 zoom in, 0 no zoom, -1 zoom out
-        self.hitradius    = 10 # distance for selecting map decorations
-        self.dialogOffset = 5  # offset for dialog (e.g. DisplayAttributesDialog)
+        self.zoomhistory = []  # list of past zoom extents
+        self.currzoom = 0  # current set of extents in zoom history being used
+        self.zoomtype = 1  # 1 zoom in, 0 no zoom, -1 zoom out
+        self.hitradius = 10  # distance for selecting map decorations
+        # offset for dialog (e.g. DisplayAttributesDialog)
+        self.dialogOffset = 5
 
         # OnSize called to make sure the buffer is initialized.
         # This might result in OnSize getting called twice on some
         # platforms at initialization, but little harm done.
-        ### self.OnSize(None)
+        # self.OnSize(None)
 
         self._definePseudoDC()
         # redraw all pdc's, pdcTmp layer is redrawn always (speed issue)
         self.redrawAll = True
 
         # will store an off screen empty bitmap for saving to file
-        self._buffer = wx.EmptyBitmap(max(1, self.Map.width), max(1, self.Map.height))
+        self._buffer = wx.EmptyBitmap(
+            max(1, self.Map.width),
+            max(1, self.Map.height))
 
-        self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x:None)
+        self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
 
         # rerender when Map reports change
         self.Map.layerChanged.connect(self.OnUpdateMap)
+        self.Map.GetRenderMgr().renderDone.connect(self._updateMFinished)
 
         # vars for handling mouse clicks
-        self.dragid   = -1
-        self.lastpos  = (0, 0)
+        self.dragid = -1
+        self.lastpos = (0, 0)
 
         # list for registration of graphics to draw
         self.graphicsSetList = []
@@ -204,23 +217,24 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def _definePseudoDC(self):
         """Define PseudoDC objects to use
         """
-        # create PseudoDC used for background map, map decorations like scales and legends
+        # create PseudoDC used for background map, map decorations like scales
+        # and legends
         self.pdc = wx.PseudoDC()
         # used for digitization tool
         self.pdcVector = None
-        # decorations (region box, etc.)
-        self.pdcDec = wx.PseudoDC()
+        # transparent objects (region box, raster digitizer)
+        self.pdcTransparent = wx.PseudoDC()
         # pseudoDC for temporal objects (select box, measurement tool, etc.)
         self.pdcTmp = wx.PseudoDC()
 
     def _bindMouseEvents(self):
         self.Bind(wx.EVT_MOUSE_EVENTS, self.MouseActions)
-        self.Bind(wx.EVT_MOTION,       self.OnMotion)
+        self.Bind(wx.EVT_MOTION, self.OnMotion)
         self.Bind(wx.EVT_CONTEXT_MENU, self.OnContextMenu)
 
     def OnContextMenu(self, event):
         """Show Map Display context menu"""
-        if hasattr(self, "digit"):
+        if self.digit:
             event.Skip()
             return
 
@@ -229,29 +243,53 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         if not hasattr(self, "popupCopyCoordinates"):
             self.popupCopyCoordinates = wx.NewId()
-            self.Bind(wx.EVT_MENU, self.OnCopyCoordinates, id = self.popupCopyCoordinates)
-        menu.Append(self.popupCopyCoordinates, _("Copy coordinates to clipboard"))
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnCopyCoordinates,
+                id=self.popupCopyCoordinates)
+        menu.Append(
+            self.popupCopyCoordinates,
+            _("Copy coordinates to clipboard"))
+        menu.AppendSeparator()
+        if not hasattr(self, "popupShowAllToolbars"):
+            self.popupShowAllToolbars = wx.NewId()
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnShowAllToolbars,
+                id=self.popupShowAllToolbars)
+        menu.Append(self.popupShowAllToolbars, _("Hide toolbars")
+                    if self._giface.AreAllToolbarsShown() else
+                    _("Show toolbars"))
+        if not hasattr(self, "popupShowStatusbar"):
+            self.popupShowStatusbar = wx.NewId()
+            self.Bind(
+                wx.EVT_MENU,
+                self.OnShowStatusbar,
+                id=self.popupShowStatusbar)
+        menu.Append(self.popupShowStatusbar, _("Hide statusbar")
+                    if self._giface.IsStatusbarShown() else _("Show statusbar"))
 
         pos = self.ScreenToClient(event.GetPosition())
         idlist = self.pdc.FindObjects(pos[0], pos[1], self.hitradius)
-        if idlist and idlist[0] in (0, 1, 2):  # legend, scale bar, north arrow
-            self._hide = wx.NewId()
+        if self.overlays and idlist and [i for i in idlist if i in self.overlays.keys()]:  # legend, scale bar, north arrow, dtext
+            menu.AppendSeparator()
+            removeId = wx.NewId()
             self.Bind(wx.EVT_MENU,
-                      lambda evt: self.overlayHidden.emit(overlayId=idlist[0]),
-                      id=self._hide)
-            menu.Append(self._hide,
-                        _("Hide {overlay}").format(overlay=self._overlayNames[idlist[0]]))
+                      lambda evt: self.overlayRemoved.emit(overlayId=idlist[0]),
+                      id=removeId)
+            menu.Append(removeId, self.overlays[idlist[0]].removeLabel)
 
-            if idlist[0] == 0:
-                self._resizeLegend = wx.NewId()
+            if self.overlays[idlist[0]].name == 'legend':
+                resizeLegendId = wx.NewId()
                 self.Bind(wx.EVT_MENU,
-                      lambda evt: self.overlays[idlist[0]].StartResizing(),
-                      id=self._resizeLegend)
-                menu.Append(self._resizeLegend, _("Resize legend"))
+                          lambda evt: self.overlays[idlist[0]].StartResizing(),
+                          id=resizeLegendId)
+                menu.Append(resizeLegendId, _("Resize legend"))
         self.PopupMenu(menu)
         menu.Destroy()
 
-    def Draw(self, pdc, img = None, drawid = None, pdctype = 'image', coords = [0, 0, 0, 0], pen = None):
+    def Draw(self, pdc, img=None, drawid=None, pdctype='image',
+             coords=[0, 0, 0, 0], pen=None, brush=None):
         """Draws map and overlay decorations
         """
         if drawid is None:
@@ -271,7 +309,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         if img and pdctype == 'image':
             # self.imagedict[img]['coords'] = coords
-            self.select[self.imagedict[img]['id']] = False # ?
+            self.select[self.imagedict[img]['id']] = False  # ?
 
         pdc.BeginDrawing()
 
@@ -282,14 +320,14 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         pdc.SetBackground(bg)
 
-        Debug.msg (5, "BufferedWindow.Draw(): id=%s, pdctype = %s, coord=%s" % \
-                       (drawid, pdctype, coords))
+        Debug.msg(5, "BufferedWindow.Draw(): id=%s, pdctype = %s, coord=%s" %
+                  (drawid, pdctype, coords))
 
         # set PseudoDC id
         if drawid is not None:
             pdc.SetId(drawid)
 
-        if pdctype == 'clear': # erase the display
+        if pdctype == 'clear':  # erase the display
             bg = wx.WHITE_BRUSH
             # bg = wx.Brush(self.GetBackgroundColour())
             pdc.SetBackground(bg)
@@ -300,35 +338,49 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             self.Refresh()
             return
 
-        if pdctype == 'image': # draw selected image
+        if pdctype == 'image':  # draw selected image
             bitmap = wx.BitmapFromImage(img)
-            w,h = bitmap.GetSize()
-            pdc.DrawBitmap(bitmap, coords[0], coords[1], True) # draw the composite map
-            pdc.SetIdBounds(drawid, wx.Rect(coords[0],coords[1], w, h))
-
-        elif pdctype == 'box': # draw a box on top of the map
+            w, h = bitmap.GetSize()
+            pdc.DrawBitmap(
+                bitmap, coords[0],
+                coords[1],
+                True)  # draw the composite map
+            pdc.SetIdBounds(drawid, wx.Rect(coords[0], coords[1], w, h))
+
+        elif pdctype == 'box':  # draw a box on top of the map
             if pen:
-                pdc.SetBrush(wx.Brush(wx.CYAN, wx.TRANSPARENT))
+                if not brush:
+                    brush = wx.Brush(wx.CYAN, wx.TRANSPARENT)
+                pdc.SetBrush(brush)
                 pdc.SetPen(pen)
-                x2 = max(coords[0],coords[2])
-                x1 = min(coords[0],coords[2])
-                y2 = max(coords[1],coords[3])
-                y1 = min(coords[1],coords[3])
-                rwidth = x2-x1
-                rheight = y2-y1
+                x2 = max(coords[0], coords[2])
+                x1 = min(coords[0], coords[2])
+                y2 = max(coords[1], coords[3])
+                y1 = min(coords[1], coords[3])
+                rwidth = x2 - x1
+                rheight = y2 - y1
                 rect = wx.Rect(x1, y1, rwidth, rheight)
                 pdc.DrawRectangleRect(rect)
                 pdc.SetIdBounds(drawid, rect)
 
-        elif pdctype == 'line': # draw a line on top of the map
+        elif pdctype == 'line':  # draw a line on top of the map
             if pen:
                 pdc.SetBrush(wx.Brush(wx.CYAN, wx.TRANSPARENT))
                 pdc.SetPen(pen)
-                pdc.DrawLinePoint(wx.Point(coords[0], coords[1]),wx.Point(coords[2], coords[3]))
-                pdc.SetIdBounds(drawid, wx.Rect(coords[0], coords[1], coords[2], coords[3]))
+                pdc.DrawLinePoint(
+                    wx.Point(
+                        coords[0], coords[1]), wx.Point(
+                        coords[2], coords[3]))
+                pdc.SetIdBounds(
+                    drawid, wx.Rect(
+                        coords[0],
+                        coords[1],
+                        coords[2],
+                        coords[3]))
 
         # polyline is a series of connected lines defined as sequence of points
-        # lines are individual, not connected lines which must be drawn as 1 object (e.g. cross)
+        # lines are individual, not connected lines which must be drawn as 1
+        # object (e.g. cross)
         elif pdctype in ('polyline', 'lines'):
             if pen:
                 pdc.SetBrush(wx.Brush(wx.CYAN, wx.TRANSPARENT))
@@ -338,8 +390,15 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                 if pdctype == 'polyline':
                     i = 1
                     while i < len(coords):
-                        pdc.DrawLinePoint(wx.Point(coords[i - 1][0], coords[i - 1][1]),
-                                          wx.Point(coords[i][0], coords[i][1]))
+                        pdc.DrawLinePoint(
+                            wx.Point(
+                                coords[
+                                    i - 1][0],
+                                coords[
+                                    i - 1][1]),
+                            wx.Point(
+                                coords[i][0],
+                                coords[i][1]))
                         i += 1
                 else:
                     for line in coords:
@@ -368,7 +427,9 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         elif pdctype == 'polygon':
             if pen:
                 pdc.SetPen(pen)
-                pdc.SetBrush(wx.TRANSPARENT_BRUSH)
+                if not brush:
+                    brush = wx.TRANSPARENT_BRUSH
+                pdc.SetBrush(brush)
                 pdc.DrawPolygon(points=coords)
                 x = min(coords, key=lambda x: x[0])[0]
                 y = min(coords, key=lambda x: x[1])[1]
@@ -376,16 +437,26 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                 h = max(coords, key=lambda x: x[1])[1] - y
                 pdc.SetIdBounds(drawid, wx.Rect(x, y, w, h))
 
-        elif pdctype == 'circle': # draw circle
+        elif pdctype == 'circle':  # draw circle
             if pen:
                 pdc.SetPen(pen)
-                pdc.SetBrush(wx.TRANSPARENT_BRUSH)
+                if not brush:
+                    brush = wx.TRANSPARENT_BRUSH
+                pdc.SetBrush(brush)
                 radius = abs(coords[2] - coords[0]) / 2
-                pdc.DrawCircle(max(coords[0], coords[2]) - radius,
-                               max(coords[1], coords[3]) - radius, radius=radius)
-                pdc.SetIdBounds(drawid, wx.Rect(coords[0], coords[1], coords[2], coords[3]))
-
-        elif pdctype == 'point': # draw point
+                pdc.DrawCircle(
+                    max(coords[0],
+                        coords[2]) - radius, max(coords[1],
+                                                 coords[3]) - radius,
+                    radius=radius)
+                pdc.SetIdBounds(
+                    drawid, wx.Rect(
+                        coords[0],
+                        coords[1],
+                        coords[2],
+                        coords[3]))
+
+        elif pdctype == 'point':  # draw point
             if pen:
                 pdc.SetPen(pen)
                 pdc.DrawPoint(coords[0], coords[1])
@@ -395,9 +466,9 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                                coords[1] + 5)
                 pdc.SetIdBounds(drawid, wx.Rect(coordsBound))
 
-        elif pdctype == 'text': # draw text on top of map
+        elif pdctype == 'text':  # draw text on top of map
             if not img['active']:
-                return # only draw active text
+                return  # only draw active text
             if 'rotation' in img:
                 rotation = float(img['rotation'])
             else:
@@ -412,7 +483,11 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             if rotation == 0:
                 pdc.DrawText(img['text'], coords[0], coords[1])
             else:
-                pdc.DrawRotatedText(img['text'], coords[0], coords[1], rotation)
+                pdc.DrawRotatedText(
+                    img['text'],
+                    coords[0],
+                    coords[1],
+                    rotation)
             pdc.SetIdBounds(drawid, bbox)
 
         pdc.EndDrawing()
@@ -421,7 +496,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         return drawid
 
-    def TextBounds(self, textinfo, relcoords = False):
+    def TextBounds(self, textinfo, relcoords=False):
         """Return text boundary data
 
         :param textinfo: text metadata (text, font, color, rotation)
@@ -439,8 +514,8 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         coords = textinfo['coords']
         bbox = wx.Rect(coords[0], coords[1], 0, 0)
         relCoords = (0, 0)
-        Debug.msg (4, "BufferedWindow.TextBounds(): text=%s, rotation=%f" % \
-                   (textinfo['text'], rotation))
+        Debug.msg(4, "BufferedWindow.TextBounds(): text=%s, rotation=%f" %
+                  (textinfo['text'], rotation))
 
         self.Update()
 
@@ -469,7 +544,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             relCoords = (boxw, 0)
         bbox[2] = boxw
         bbox[3] = boxh
-        bbox.Inflate(h,h)
+        bbox.Inflate(h, h)
         if relcoords:
             return coords, bbox, relCoords
         else:
@@ -480,7 +555,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         If self.redrawAll is False on self.pdcTmp content is re-drawn
         """
-        Debug.msg(4, "BufferedWindow.OnPaint(): redrawAll=%s" % self.redrawAll)
+        Debug.msg(5, "BufferedWindow.OnPaint(): redrawAll=%s" % self.redrawAll)
         dc = wx.BufferedPaintDC(self, self._buffer)
         dc.Clear()
 
@@ -498,12 +573,12 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             self.redrawAll = True
             switchDraw = True
 
-        if self.redrawAll: # redraw pdc and pdcVector
+        if self.redrawAll:  # redraw pdc and pdcVector
             # draw to the dc using the calculated clipping rect
             self.pdc.DrawToDCClipped(dc, rgn)
 
             # draw vector map layer
-            if hasattr(self, "digit"):
+            if self.digit:
                 # decorate with GDDC (transparency)
                 try:
                     gcdc = wx.GCDC(dc)
@@ -513,12 +588,12 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                     self.pdcVector.DrawToDCClipped(dc, rgn)
 
             self.bufferLast = None
-        else: # do not redraw pdc and pdcVector
+        else:  # do not redraw pdc and pdcVector
             if self.bufferLast is None:
                 # draw to the dc
                 self.pdc.DrawToDC(dc)
 
-                if hasattr(self, "digit"):
+                if self.digit:
                     # decorate with GDDC (transparency)
                     try:
                         gcdc = wx.GCDC(dc)
@@ -529,21 +604,22 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
                 # store buffered image
                 # self.bufferLast = wx.BitmapFromImage(self.buffer.ConvertToImage())
-                self.bufferLast = dc.GetAsBitmap(wx.Rect(0, 0, self.Map.width, self.Map.height))
+                self.bufferLast = dc.GetAsBitmap(
+                    wx.Rect(0, 0, self.Map.width, self.Map.height))
 
             self.pdc.DrawBitmap(self.bufferLast, 0, 0, False)
             self.pdc.DrawToDC(dc)
 
-        # draw decorations (e.g. region box)
+        # draw semitransparent objects (e.g. region box, raster digitizer
+        # objects)
         try:
             gcdc = wx.GCDC(dc)
-            self.pdcDec.DrawToDC(gcdc)
+            self.pdcTransparent.DrawToDC(gcdc)
         except NotImplementedError as e:
             print >> sys.stderr, e
-            self.pdcDec.DrawToDC(dc)
+            self.pdcTransparent.DrawToDC(dc)
 
         # draw temporary object on the foreground
-        ### self.pdcTmp.DrawToDCClipped(dc, rgn)
         self.pdcTmp.DrawToDC(dc)
 
         if switchDraw:
@@ -572,21 +648,23 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             # current drawing in it, so it can be used to save the image to
             # a file, or whatever.
             self._buffer.Destroy()
-            self._buffer = wx.EmptyBitmap(max(1, self.Map.width), max(1, self.Map.height))
+            self._buffer = wx.EmptyBitmap(
+                max(1, self.Map.width),
+                max(1, self.Map.height))
 
             # get the image to be rendered
             self.img = self.GetImage()
 
             # update map display
             updatemap = True
-            if self.img and self.Map.width + self.Map.height > 0: # scale image after resize
+            if self.img and self.Map.width + self.Map.height > 0:  # scale image after resize
                 self.img = self.img.Scale(self.Map.width, self.Map.height)
                 if len(self.Map.GetListOfLayers()) > 0:
                     self.UpdateMap()
                     updatemap = False
 
             if updatemap:
-                self.UpdateMap(render = True)
+                self.UpdateMap(render=True)
             self.resize = False
         elif self.resize:
             event.RequestMore()
@@ -602,20 +680,42 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param width: image width
         :param height: image height
         """
-        busy = wx.BusyInfo(message = _("Please wait, exporting image..."),
-                           parent = self)
+        Debug.msg(
+            1,
+            "MapWindow.SaveToFile(): %s (%dx%d)",
+            FileName,
+            width,
+            height)
+
+        self._fileName = FileName
+        self._fileType = FileType
+
+        self._busy = wx.BusyInfo(message=_("Please wait, exporting image..."),
+                                 parent=self)
         wx.Yield()
 
         self.Map.ChangeMapSize((width, height))
-        ibuffer = wx.EmptyBitmap(max(1, width), max(1, height))
-        self.Map.Render(force = True, windres = self._properties.resolution)
+        self.Map.Render(force=True, windres=self._properties.resolution)
+        renderMgr = self.Map.GetRenderMgr()
+        renderMgr.renderDone.disconnect(self._updateMFinished)
+        renderMgr.renderDone.connect(self._saveToFileDone)
+
+    def _saveToFileDone(self):
+        renderMgr = self.Map.GetRenderMgr()
+        renderMgr.renderDone.disconnect(self._saveToFileDone)
+
+        ibuffer = wx.EmptyBitmap(
+            max(1, self.Map.width),
+            max(1, self.Map.height))
+
         img = self.GetImage()
         self.pdc.RemoveAll()
-        self.Draw(self.pdc, img, drawid = 99)
+        self.Draw(self.pdc, img, drawid=99)
 
         # compute size ratio to move overlay accordingly
         cSize = self.GetClientSizeTuple()
-        ratio = float(width) / cSize[0], float(height) / cSize[1]
+        ratio = float(
+            self.Map.width) / cSize[0], float(self.Map.height) / cSize[1]
 
         # redraw legend, scalebar
         for img in self.GetOverlay():
@@ -623,18 +723,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             if self.imagedict[img]['layer'].IsActive():
                 id = self.imagedict[img]['id']
                 coords = int(ratio[0] * self.overlays[id].coords[0]),\
-                         int(ratio[1] * self.overlays[id].coords[1])
-                self.Draw(self.pdc, img = img, drawid = id,
-                          pdctype = self.overlays[id].pdcType, coords = coords)
+                    int(ratio[1] * self.overlays[id].coords[1])
+                self.Draw(self.pdc, img=img, drawid=id,
+                          pdctype=self.overlays[id].pdcType, coords=coords)
 
         # redraw text labels
         for id in self.textdict.keys():
             textinfo = self.textdict[id]
             oldCoords = textinfo['coords']
             textinfo['coords'] = ratio[0] * textinfo['coords'][0],\
-                                 ratio[1] * textinfo['coords'][1]
-            self.Draw(self.pdc, img = self.textdict[id], drawid = id,
-                      pdctype = 'text')
+                ratio[1] * textinfo['coords'][1]
+            self.Draw(self.pdc, img=self.textdict[id], drawid=id,
+                      pdctype='text')
             # set back old coordinates
             textinfo['coords'] = oldCoords
 
@@ -643,13 +743,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         # probably does nothing, removed from wxPython 2.9
         # self.PrepareDC(dc)
         self.pdc.DrawToDC(dc)
-        if self.pdcVector:
+        if self.digit:
             self.pdcVector.DrawToDC(dc)
-        ibuffer.SaveFile(FileName, FileType)
+        ibuffer.SaveFile(self._fileName, self._fileType)
 
-        busy.Destroy()
+        self._busy.Destroy()
+        del self._busy
+        del self._fileName
+        del self._fileType
 
-        self.UpdateMap(render = True)
+        renderMgr.renderDone.connect(self._updateMFinished)
+
+        self.UpdateMap(render=True)
         self.Refresh()
 
     def GetOverlay(self):
@@ -660,17 +765,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :return: list of images
         """
         imgs = []
-        for overlay in self.Map.GetListOfLayers(ltype = "overlay", active = True):
-            if overlay.mapfile is not None \
-               and os.path.isfile(overlay.mapfile) and os.path.getsize(overlay.mapfile):
+        for overlay in self.Map.GetListOfLayers(ltype="overlay", active=True):
+            if overlay.mapfile is not None and os.path.isfile(
+                    overlay.mapfile) and os.path.getsize(
+                    overlay.mapfile):
                 img = utils.autoCropImageFromFile(overlay.mapfile)
 
                 for key in self.imagedict.keys():
                     if self.imagedict[key]['id'] == overlay.id:
                         del self.imagedict[key]
 
-                self.imagedict[img] = { 'id' : overlay.id,
-                                        'layer' : overlay }
+                self.imagedict[img] = {'id': overlay.id,
+                                       'layer': overlay}
                 imgs.append(img)
 
         return imgs
@@ -683,7 +789,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :return: wx.Image instance (map composition)
         """
         imgId = 99
-        if self.mapfile and self.Map.mapfile and os.path.isfile(self.Map.mapfile) and \
+        if self.Map.mapfile and os.path.isfile(self.Map.mapfile) and \
                 os.path.getsize(self.Map.mapfile):
             img = wx.Image(self.Map.mapfile, wx.BITMAP_TYPE_ANY)
         else:
@@ -693,11 +799,11 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             if self.imagedict[key]['id'] == imgId:
                 del self.imagedict[key]
 
-        self.imagedict[img] = { 'id': imgId }
+        self.imagedict[img] = {'id': imgId}
 
         return img
 
-    def SetAlwaysRenderEnabled(self, alwaysRender = True):
+    def SetAlwaysRenderEnabled(self, alwaysRender=True):
         self.alwaysRender = alwaysRender
 
     def IsAlwaysRenderEnabled(self):
@@ -787,49 +893,34 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         """
         :func:`UpdateMap` for arguments description.
         """
-        start = time.clock()
+        Debug.msg(1, "BufferedWindow.UpdateMap(): started "
+                  "(render=%s, renderVector=%s)" % (render, renderVector))
+
         self.resize = False
 
         # was if self.Map.cmdfile and ...
         if self.IsAlwaysRenderEnabled() and self.img is None:
             render = True
 
-
-        #
-        # render background image if needed
-        #
-
-        # here was the change of the layertree rerender variable
-        # but it is fully the problem of layertree
-        # and so it is handled there
-        # remove this comment when it is old enough
-
         try:
             if render:
                 # update display size
                 self.Map.ChangeMapSize(self.GetClientSize())
-                if self._properties.resolution:
-                    # use computation region resolution for rendering
-                    windres = True
-                else:
-                    windres = False
-
-                self.mapfile = self.Map.Render(force = True,
-                                               windres = windres)
-            else:
-                self.mapfile = self.Map.Render(force = False)
 
+            self.Map.Render(force=render,
+                            windres=self._properties.resolution)
         except GException as e:
-            GError(message = e.value)
-            self.mapfile = None
+            GError(message=e.value)
 
-        self.img = self.GetImage() # id=99
+    def _updateMFinished(self, renderVector=True):
+        Debug.msg(1, "BufferedWindow.UpdateMap(): finished")
+        self.img = self.GetImage()  # id=99
 
         #
         # clear pseudoDcs
         #
         for pdc in (self.pdc,
-                    self.pdcDec,
+                    self.pdcTransparent,
                     self.pdcTmp):
             pdc.Clear()
             pdc.RemoveAll()
@@ -838,20 +929,21 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         # draw background map image to PseudoDC
         #
         if not self.img:
-            self.Draw(self.pdc, pdctype = 'clear')
+            self.Draw(self.pdc, pdctype='clear')
         else:
             try:
                 id = self.imagedict[self.img]['id']
-            except:
+            except Exception as e:
+                Debug.mgs(1, "UpdateMap() failed: %s", e)
                 return False
-
-            self.Draw(self.pdc, self.img, drawid = id)
+            self.Draw(self.pdc, self.img, drawid=id)
 
         #
         # render vector map layer
         #
-        if renderVector and hasattr(self, "digit"):
+        if renderVector and self.digit:
             self._updateMap()
+
         #
         # render overlays
         #
@@ -859,12 +951,13 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             # draw any active and defined overlays
             if self.imagedict[img]['layer'].IsActive():
                 id = self.imagedict[img]['id']
-                self.Draw(self.pdc, img = img, drawid = id,
-                          pdctype = self.overlays[id].pdcType, coords = self.overlays[id].coords)
+                self.Draw(self.pdc, img=img, drawid=id,
+                          pdctype=self.overlays[id].pdcType,
+                          coords=self.overlays[id].coords)
 
         for id in self.textdict.keys():
-            self.Draw(self.pdc, img = self.textdict[id], drawid = id,
-                      pdctype = 'text', coords = [10, 10, 10, 10])
+            self.Draw(self.pdc, img=self.textdict[id], drawid=id,
+                      pdctype='text', coords=[10, 10, 10, 10])
 
         # optionally draw computational extent box
         self.DrawCompRegionExtent()
@@ -874,17 +967,17 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         #
 
         # draw registered graphics
-        if  len(self.graphicsSetList) > 0:
+        if len(self.graphicsSetList) > 0:
             penOrig = self.pen
             polypenOrig = self.polypen
 
             for item in self.graphicsSetList:
                 try:
-                    item.Draw(self.pdcTmp)
+                    item.Draw()
                 except:
-                    GError(parent = self,
-                           message = _('Unable to draw registered graphics. '
-                                       'The graphics was unregistered.'))
+                    GError(parent=self,
+                           message=_('Unable to draw registered graphics. '
+                                     'The graphics was unregistered.'))
                     self.UnregisterGraphicsToDraw(item)
 
             self.pen = penOrig
@@ -893,11 +986,6 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         if len(self.polycoords) > 0:
             self.DrawLines(self.pdcTmp)
 
-        stop = time.clock()
-
-        Debug.msg (1, "BufferedWindow.UpdateMap(): render=%s, renderVector=%s -> time=%g" % \
-                   (render, renderVector, (stop-start)))
-
         return True
 
     def DrawCompRegionExtent(self):
@@ -911,11 +999,13 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             dispReg = self.Map.GetCurrentRegion()
             reg = None
             if utils.isInRegion(dispReg, compReg):
-                self.polypen = wx.Pen(colour = wx.Colour(0, 0, 255, 128), width = 3, style = wx.SOLID)
+                self.polypen = wx.Pen(
+                    colour=wx.Colour(0, 0, 255, 128),
+                    width=3, style=wx.SOLID)
                 reg = dispReg
             else:
-                self.polypen = wx.Pen(colour = wx.Colour(255, 0, 0, 128),
-                                      width = 3, style = wx.SOLID)
+                self.polypen = wx.Pen(colour=wx.Colour(255, 0, 0, 128),
+                                      width=3, style=wx.SOLID)
                 reg = compReg
 
             regionCoords = []
@@ -925,18 +1015,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             regionCoords.append((reg['w'], reg['s']))
             regionCoords.append((reg['w'], reg['n']))
             # draw region extent
-            self.DrawLines(pdc=self.pdcDec, polycoords=regionCoords)
+            self.DrawLines(pdc=self.pdcTransparent, polycoords=regionCoords)
 
     def EraseMap(self):
         """Erase map canvas
         """
-        self.Draw(self.pdc, pdctype = 'clear')
+        self.Draw(self.pdc, pdctype='clear')
 
-        if hasattr(self, "digit"):
-            self.Draw(self.pdcVector, pdctype = 'clear')
+        if self.digit:
+            self.Draw(self.pdcVector, pdctype='clear')
 
-        self.Draw(self.pdcDec, pdctype = 'clear')
-        self.Draw(self.pdcTmp, pdctype = 'clear')
+        self.Draw(self.pdcTransparent, pdctype='clear')
+        self.Draw(self.pdcTmp, pdctype='clear')
 
         self.Map.AbortAllThreads()
 
@@ -960,36 +1050,39 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def DragItem(self, id, coords):
         """Drag an overlay decoration item
         """
-        if id == 99 or id == '' or id is None: return
-        Debug.msg (5, "BufferedWindow.DragItem(): id=%d" % id)
+        if id == 99 or id == '' or id is None:
+            return
+        Debug.msg(5, "BufferedWindow.DragItem(): id=%d" % id)
         x, y = self.lastpos
         dx = coords[0] - x
         dy = coords[1] - y
         self.pdc.SetBackground(wx.Brush(self.GetBackgroundColour()))
         r = self.pdc.GetIdBounds(id)
 
-        if type(r) is list:
+        if isinstance(r, list):
             r = wx.Rect(r[0], r[1], r[2], r[3])
-        if id > 100: # text dragging
-            rtop = (r[0],r[1]-r[3],r[2],r[3])
+        if id in self.textdict:  # text dragging
+            rtop = (r[0], r[1] - r[3], r[2], r[3])
             r = r.Union(rtop)
-            rleft = (r[0]-r[2],r[1],r[2],r[3])
+            rleft = (r[0] - r[2], r[1], r[2], r[3])
             r = r.Union(rleft)
+
         self.pdc.TranslateId(id, dx, dy)
 
         r2 = self.pdc.GetIdBounds(id)
-        if type(r2) is list:
+        if isinstance(r2, list):
             r2 = wx.Rect(r[0], r[1], r[2], r[3])
-        if id > 100: # text
+        if id in self.textdict:  # text
             self.textdict[id]['bbox'] = r2
             self.textdict[id]['coords'][0] += dx
             self.textdict[id]['coords'][1] += dy
+
         r = r.Union(r2)
-        r.Inflate(4,4)
+        r.Inflate(4, 4)
         self.RefreshRect(r, False)
         self.lastpos = (coords[0], coords[1])
 
-    def MouseDraw(self, pdc = None, begin = None, end = None):
+    def MouseDraw(self, pdc=None, begin=None, end=None):
         """Mouse box or line from 'begin' to 'end'
 
         If not given from self.mouse['begin'] to self.mouse['end'].
@@ -1000,18 +1093,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         if begin is None:
             begin = self.mouse['begin']
         if end is None:
-            end   = self.mouse['end']
+            end = self.mouse['end']
 
-        Debug.msg (5, "BufferedWindow.MouseDraw(): use=%s, box=%s, begin=%f,%f, end=%f,%f" % \
-                       (self.mouse['use'], self.mouse['box'],
-                        begin[0], begin[1], end[0], end[1]))
+        Debug.msg(
+            5, "BufferedWindow.MouseDraw(): use=%s, box=%s, begin=%f,%f, end=%f,%f" %
+            (self.mouse['use'], self.mouse['box'], begin[0], begin[1], end[0], end[1]))
 
         if self.mouse['box'] == "box":
             boxid = wx.ID_NEW
             mousecoords = [begin[0], begin[1],
                            end[0], end[1]]
             r = pdc.GetIdBounds(boxid)
-            if type(r) is list:
+            if isinstance(r, list):
                 r = wx.Rect(r[0], r[1], r[2], r[3])
             r.Inflate(4, 4)
             try:
@@ -1020,27 +1113,31 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                 pass
             self.RefreshRect(r, False)
             pdc.SetId(boxid)
-            self.Draw(pdc, drawid = boxid, pdctype = 'box', coords = mousecoords)
+            self.Draw(pdc, drawid=boxid, pdctype='box', coords=mousecoords)
 
         elif self.mouse['box'] == "line":
             self.lineid = wx.ID_NEW
-            mousecoords = [begin[0], begin[1], \
+            mousecoords = [begin[0], begin[1],
                            end[0], end[1]]
-            x1 = min(begin[0],end[0])
-            x2 = max(begin[0],end[0])
-            y1 = min(begin[1],end[1])
-            y2 = max(begin[1],end[1])
-            r = wx.Rect(x1,y1,x2-x1,y2-y1)
-            r.Inflate(4,4)
+            x1 = min(begin[0], end[0])
+            x2 = max(begin[0], end[0])
+            y1 = min(begin[1], end[1])
+            y2 = max(begin[1], end[1])
+            r = wx.Rect(x1, y1, x2 - x1, y2 - y1)
+            r.Inflate(4, 4)
             try:
                 pdc.ClearId(self.lineid)
             except:
                 pass
             self.RefreshRect(r, False)
             pdc.SetId(self.lineid)
-            self.Draw(pdc, drawid = self.lineid, pdctype = 'line', coords = mousecoords)
+            self.Draw(
+                pdc,
+                drawid=self.lineid,
+                pdctype='line',
+                coords=mousecoords)
 
-    def DrawLines(self, pdc = None, polycoords = None):
+    def DrawLines(self, pdc=None, polycoords=None):
         """Draw polyline in PseudoDC
 
         Set self.pline to wx.NEW_ID + 1
@@ -1062,10 +1159,14 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             for p in polycoords:
                 coords.append(self.Cell2Pixel(p))
 
-            self.Draw(pdc, drawid = self.plineid, pdctype = 'polyline', coords = coords)
+            self.Draw(
+                pdc,
+                drawid=self.plineid,
+                pdctype='polyline',
+                coords=coords)
 
-            Debug.msg (4, "BufferedWindow.DrawLines(): coords=%s, id=%s" % \
-                           (coords, self.plineid))
+            Debug.msg(4, "BufferedWindow.DrawLines(): coords=%s, id=%s" %
+                      (coords, self.plineid))
 
             return self.plineid
 
@@ -1082,13 +1183,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param pen: pen to be used
         :param drawid: id of the drawn object (used by PseudoDC)
         """
-        Debug.msg (4, "BufferedWindow.DrawPolylines(): coords=%s" % coords)
-        self.lineId = self.Draw(pdc, drawid=None, pdctype='polyline', coords=coords, pen=pen)
+        Debug.msg(4, "BufferedWindow.DrawPolylines(): coords=%s" % coords)
+        self.lineId = self.Draw(
+            pdc,
+            drawid=None,
+            pdctype='polyline',
+            coords=coords,
+            pen=pen)
 
         return self.lineid
 
-    def DrawCross(self, pdc, coords, size, rotation = 0, pen = None,
-                  text = None, textAlign = 'lr', textOffset = (5, 5), drawid=None):
+    def DrawCross(self, pdc, coords, size, rotation=0, pen=None,
+                  text=None, textAlign='lr', textOffset=(5, 5), drawid=None):
         """Draw cross in PseudoDC
 
         .. todo::
@@ -1102,31 +1208,67 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param textOffset: offset for text (from center point)
         :param drawid: id of the drawn object (used by PseudoDC)
         """
-        Debug.msg(4, "BufferedWindow.DrawCross(): pdc=%s, coords=%s, size=%d" % \
+        Debug.msg(4, "BufferedWindow.DrawCross(): pdc=%s, coords=%s, size=%d" %
                   (pdc, coords, size))
-        coordsCross = ((coords[0], coords[1] - size, coords[0], coords[1] + size),
-                       (coords[0] - size, coords[1], coords[0] + size, coords[1]))
-
-        self.lineid = self.Draw(pdc, drawid=drawid, pdctype='lines', coords=coordsCross, pen=pen)
+        coordsCross = (
+            (coords[0],
+             coords[1] - size,
+                coords[0],
+                coords[1] + size),
+            (coords[0] - size,
+             coords[1],
+                coords[0] + size,
+                coords[1]))
+
+        self.lineid = self.Draw(
+            pdc,
+            drawid=drawid,
+            pdctype='lines',
+            coords=coordsCross,
+            pen=pen)
 
         if not text:
             return self.lineid
 
         if textAlign == 'ul':
-            coord = [coords[0] - textOffset[0], coords[1] - textOffset[1], 0, 0]
+            coord = [
+                coords[0] -
+                textOffset[0],
+                coords[1] -
+                textOffset[1],
+                0,
+                0]
         elif textAlign == 'ur':
-            coord = [coords[0] + textOffset[0], coords[1] - textOffset[1], 0, 0]
+            coord = [
+                coords[0] +
+                textOffset[0],
+                coords[1] -
+                textOffset[1],
+                0,
+                0]
         elif textAlign == 'lr':
-            coord = [coords[0] + textOffset[0], coords[1] + textOffset[1], 0, 0]
+            coord = [
+                coords[0] +
+                textOffset[0],
+                coords[1] +
+                textOffset[1],
+                0,
+                0]
         else:
-            coord = [coords[0] - textOffset[0], coords[1] + textOffset[1], 0, 0]
+            coord = [
+                coords[0] -
+                textOffset[0],
+                coords[1] +
+                textOffset[1],
+                0,
+                0]
 
-        self.Draw(pdc, img = text,
-                  pdctype = 'text', coords = coord, pen = pen)
+        self.Draw(pdc, img=text,
+                  pdctype='text', coords=coord, pen=pen)
 
         return self.lineid
 
-    def DrawRectangle(self, pdc, point1, point2, pen, drawid=None):
+    def DrawRectangle(self, pdc, point1, point2, pen, brush=None, drawid=None):
         """Draw rectangle (not filled) in PseudoDC
 
         :param pdc: PseudoDC
@@ -1135,13 +1277,20 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param pen: pen
         :param drawid: id of the drawn object (used by PseudoDC)
         """
-        Debug.msg(4, "BufferedWindow.DrawRectangle(): pdc=%s, point1=%s, point2=%s" % \
-                  (pdc, point1, point2))
+        Debug.msg(
+            4, "BufferedWindow.DrawRectangle(): pdc=%s, point1=%s, point2=%s" %
+            (pdc, point1, point2))
         coords = [point1[0], point1[1], point2[0], point2[1]]
-        self.lineid = self.Draw(pdc, drawid=drawid, pdctype='box', coords=coords, pen=pen)
+        self.lineid = self.Draw(
+            pdc,
+            drawid=drawid,
+            pdctype='box',
+            coords=coords,
+            pen=pen,
+            brush=brush)
         return self.lineid
 
-    def DrawCircle(self, pdc, coords, radius, pen, drawid=None):
+    def DrawCircle(self, pdc, coords, radius, pen, brush=None, drawid=None):
         """Draw circle (not filled) in PseudoDC
 
         :param pdc: PseudoDC
@@ -1150,14 +1299,21 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param pen: pen
         :param drawid: id of the drawn object (used by PseudoDC)
         """
-        Debug.msg(4, "BufferedWindow.DrawCircle(): pdc=%s, coords=%s, radius=%s" %
-                  (pdc, coords, radius))
+        Debug.msg(
+            4, "BufferedWindow.DrawCircle(): pdc=%s, coords=%s, radius=%s" %
+            (pdc, coords, radius))
         newcoords = [coords[0] - radius, coords[1] - radius,
                      coords[0] + radius, coords[1] + radius]
-        self.lineid = self.Draw(pdc, drawid=drawid, pdctype='circle', coords=newcoords, pen=pen)
+        self.lineid = self.Draw(
+            pdc,
+            drawid=drawid,
+            pdctype='circle',
+            coords=newcoords,
+            pen=pen,
+            brush=brush)
         return self.lineid
 
-    def DrawPolygon(self, pdc, coords, pen, drawid=None):
+    def DrawPolygon(self, pdc, coords, pen, brush=None, drawid=None):
         """Draws polygon from a list of points (do not append the first point)
 
         :param pdc: PseudoDC
@@ -1165,8 +1321,11 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param pen: pen
         :param drawid: id of the drawn object (used by PseudoDC)
         """
+        # avid wx.GCDC assert
+        if len(coords) <= 1:
+            return None
         self.lineid = self.Draw(pdc, drawid=drawid, pdctype='polygon',
-                                coords=coords, pen=pen)
+                                coords=coords, pen=pen, brush=brush)
         return self.lineid
 
     def _computeZoomToPointAndRecenter(self, position, zoomtype):
@@ -1179,8 +1338,8 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         if zoomtype > 0:
             begin = (position[0] - self.Map.width / 4,
                      position[1] - self.Map.height / 4)
-            end   = (position[0] + self.Map.width / 4,
-                     position[1] + self.Map.height / 4)
+            end = (position[0] + self.Map.width / 4,
+                   position[1] + self.Map.height / 4)
         else:
             begin = ((self.Map.width - position[0]) / 2,
                      (self.Map.height - position[1]) / 2)
@@ -1242,35 +1401,35 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def OnMouseWheel(self, event):
         """Mouse wheel moved
         """
-        zoomBehaviour = UserSettings.Get(group = 'display',
-                                         key = 'mouseWheelZoom',
-                                         subkey = 'selection')
+        zoomBehaviour = UserSettings.Get(group='display',
+                                         key='mouseWheelZoom',
+                                         subkey='selection')
         if zoomBehaviour == 2:
             event.Skip()
             return
 
         self.processMouse = False
-        current  = event.GetPositionTuple()[:]
+        current = event.GetPositionTuple()[:]
         wheel = event.GetWheelRotation()
-        Debug.msg (5, "BufferedWindow.MouseAction(): wheel=%d" % wheel)
+        Debug.msg(5, "BufferedWindow.MouseAction(): wheel=%d" % wheel)
 
         if wheel > 0:
             zoomtype = 1
         else:
             zoomtype = -1
-        if UserSettings.Get(group = 'display',
-                            key = 'scrollDirection',
-                            subkey = 'selection'):
+        if UserSettings.Get(group='display',
+                            key='scrollDirection',
+                            subkey='selection'):
             zoomtype *= -1
         # zoom 1/2 of the screen (TODO: settings)
         if zoomBehaviour == 0:  # zoom and recenter
-            begin, end = self._computeZoomToPointAndRecenter(position = current, zoomtype = zoomtype)
+            begin, end = self._computeZoomToPointAndRecenter(
+                position=current, zoomtype=zoomtype)
 
         elif zoomBehaviour == 1:  # zoom to current cursor position
-            begin = (current[0]/2, current[1]/2)
-            end = ((self.Map.width - current[0])/2 + current[0],
-                   (self.Map.height - current[1])/2 + current[1])
-
+            begin = (current[0] / 2, current[1] / 2)
+            end = ((self.Map.width - current[0]) / 2 + current[0],
+                   (self.Map.height - current[1]) / 2 + current[1])
 
         # zoom
         self.Zoom(begin, end, zoomtype)
@@ -1284,13 +1443,13 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def OnDragging(self, event):
         """Mouse dragging
         """
-        Debug.msg (5, "BufferedWindow.MouseAction(): Dragging")
-        current  = event.GetPositionTuple()[:]
+        Debug.msg(5, "BufferedWindow.MouseAction(): Dragging")
+        current = event.GetPositionTuple()[:]
         previous = self.mouse['begin']
         move = (current[0] - previous[0],
                 current[1] - previous[1])
 
-        if hasattr(self, "digit"):
+        if self.digit:
             digitToolbar = self.toolbar
         else:
             digitToolbar = None
@@ -1303,34 +1462,34 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         # dragging decoration overlay item
         elif (self.mouse['use'] == 'pointer' and
                 not digitToolbar and
-                self.dragid != None):
+                self.dragid is not None):
             coords = event.GetPositionTuple()
             self.DragItem(self.dragid, coords)
 
         # dragging anything else - rubber band box or line
         else:
             if (self.mouse['use'] == 'pointer' and
-                not digitToolbar):
+                    not digitToolbar):
                 return
 
             self.mouse['end'] = event.GetPositionTuple()[:]
             if (event.LeftIsDown() and
                 not (digitToolbar and
-                    digitToolbar.GetAction() in ("moveLine",) and
+                     digitToolbar.GetAction() in ("moveLine",) and
                      self.digit.GetDisplay().GetSelected() > 0)):
-                self.MouseDraw(pdc = self.pdcTmp)
+                self.MouseDraw(pdc=self.pdcTmp)
 
     def OnLeftDown(self, event):
         """Left mouse button pressed
         """
-        Debug.msg (5, "BufferedWindow.OnLeftDown(): use=%s" % \
-                   self.mouse["use"])
+        Debug.msg(5, "BufferedWindow.OnLeftDown(): use=%s" %
+                  self.mouse["use"])
 
         self.mouse['begin'] = event.GetPositionTuple()[:]
 
         # vector digizer
         if self.mouse["use"] == "pointer" and \
-                hasattr(self, "digit"):
+                self.digit:
             if event.ControlDown():
                 self.OnLeftDownUndo(event)
             else:
@@ -1346,7 +1505,8 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             if 99 in idlist:
                 idlist.remove(99)
             if idlist != []:
-                self.dragid = idlist[0] #drag whatever is on top
+                self.dragid = idlist[0]  # drag whatever is on top
+
         else:
             pass
         coords = self.Pixel2Cell(self.mouse['begin'])
@@ -1359,8 +1519,8 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         Emits mapQueried signal when mouse use is 'query'.
         """
-        Debug.msg (5, "BufferedWindow.OnLeftUp(): use=%s" % \
-                       self.mouse["use"])
+        Debug.msg(5, "BufferedWindow.OnLeftUp(): use=%s" %
+                  self.mouse["use"])
 
         self.mouse['end'] = event.GetPositionTuple()[:]
         coordinates = self.Pixel2Cell(self.mouse['end'])
@@ -1374,26 +1534,31 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                 # set region for click (zero-width box)
                 if begin[0] - end[0] == 0 or \
                         begin[1] - end[1] == 0:
-                    begin, end = self._computeZoomToPointAndRecenter(position = end, zoomtype = self.zoomtype)
+                    begin, end = self._computeZoomToPointAndRecenter(
+                        position=end, zoomtype=self.zoomtype)
             self.Zoom(begin, end, self.zoomtype)
 
             # redraw map
-            self.UpdateMap(render = True)
+            self.UpdateMap(render=True)
 
         elif self.mouse["use"] == "query":
-            self.mapQueried.emit(x=self.mouse['end'][0], y=self.mouse['end'][1])
+            self.mapQueried.emit(
+                x=self.mouse['end'][0],
+                y=self.mouse['end'][1])
 
         elif self.mouse["use"] == "pointer" and \
-                hasattr(self, "digit"):
+                self.digit:
             self._onLeftUp(event)
 
         elif (self.mouse['use'] == 'pointer' and
                 self.dragid >= 0):
             # end drag of overlay decoration
 
-            if self.dragid < 99 and self.dragid in self.overlays:
-                self.overlays[self.dragid].coords = self.pdc.GetIdBounds(self.dragid)
-            elif self.dragid > 100 and self.dragid in self.textdict:
+            if self.overlays and self.dragid in self.overlays:
+                self.overlays[
+                    self.dragid].coords = self.pdc.GetIdBounds(
+                    self.dragid)
+            elif self.dragid in self.textdict:
                 self.textdict[self.dragid]['bbox'] = self.pdc.GetIdBounds(self.dragid)
             else:
                 pass
@@ -1424,22 +1589,26 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                        n=north, s=south, e=east, w=west)
 
             # redraw map
-            self.UpdateMap(render = False)
+            self.UpdateMap(render=False)
 
-       # TODO: decide which coordinates to send (e, n, mouse['begin'], mouse['end'])
+       # TODO: decide which coordinates to send (e, n, mouse['begin'],
+       # mouse['end'])
         self.mouseLeftUp.emit(x=coordinates[0], y=coordinates[1])
 
     def OnButtonDClick(self, event):
         """Mouse button double click
         """
-        Debug.msg (5, "BufferedWindow.OnButtonDClick(): use=%s" % \
-                   self.mouse["use"])
+        Debug.msg(5, "BufferedWindow.OnButtonDClick(): use=%s" %
+                  self.mouse["use"])
 
         screenCoords = event.GetPosition()
 
         if self.mouse['use'] == 'pointer':
             # select overlay decoration options dialog
-            idlist  = self.pdc.FindObjects(screenCoords[0], screenCoords[1], self.hitradius)
+            idlist = self.pdc.FindObjects(
+                screenCoords[0],
+                screenCoords[1],
+                self.hitradius)
             if idlist:
                 self.dragid = idlist[0]
                 self.overlayActivated.emit(overlayId=self.dragid)
@@ -1450,10 +1619,10 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def OnRightDown(self, event):
         """Right mouse button pressed
         """
-        Debug.msg (5, "BufferedWindow.OnRightDown(): use=%s" % \
-                   self.mouse["use"])
+        Debug.msg(5, "BufferedWindow.OnRightDown(): use=%s" %
+                  self.mouse["use"])
 
-        if hasattr(self, "digit"):
+        if self.digit:
             self._onRightDown(event)
 
         event.Skip()
@@ -1461,15 +1630,18 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def OnRightUp(self, event):
         """Right mouse button released
         """
-        Debug.msg (5, "BufferedWindow.OnRightUp(): use=%s" % \
-                   self.mouse["use"])
+        Debug.msg(5, "BufferedWindow.OnRightUp(): use=%s" %
+                  self.mouse["use"])
 
-        if hasattr(self, "digit"):
+        if self.digit:
             self._onRightUp(event)
 
         self.redrawAll = True
         self.Refresh()
 
+        coords = self.Pixel2Cell(event.GetPosition())
+        self.mouseRightUp.emit(x=coords[0], y=coords[1])
+
         event.Skip()
 
     def OnMiddleDown(self, event):
@@ -1487,12 +1659,12 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         # set region in zoom or pan
         begin = self.mouse['begin']
-        end   = self.mouse['end']
+        end = self.mouse['end']
 
-        self.Zoom(begin, end, 0) # no zoom
+        self.Zoom(begin, end, 0)  # no zoom
 
         # redraw map
-        self.UpdateMap(render = True)
+        self.UpdateMap(render=True)
 
     def OnMouseEnter(self, event):
         """Mouse entered window and no mouse buttons were pressed
@@ -1506,9 +1678,16 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         """Motion event and no mouse buttons were pressed
         """
         if self.mouse["use"] == "pointer" and \
-                hasattr(self, "digit"):
+                self.digit:
             self._onMouseMoving(event)
 
+        pos = event.GetPosition()
+        idlist = self.pdc.FindObjects(pos[0], pos[1], self.hitradius)
+        if self.overlays and idlist and [i for i in idlist if i in self.overlays.keys()]:  # legend, scale bar, north arrow, dtext
+            self.SetToolTipString("Double click in Pointer mode to set object"
+                                  " properties,\nright click to remove")
+        else:
+            self.SetToolTip(None)
         event.Skip()
 
     def OnCopyCoordinates(self, event):
@@ -1516,13 +1695,22 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         e, n = self.GetLastEN()
         if wx.TheClipboard.Open():
             do = wx.TextDataObject()
-            # TODO: put delimiter in settings and apply also for Go to in statusbar
+            # TODO: put delimiter in settings and apply also for Go to in
+            # statusbar
             delim = ','
             do.SetText(str(e) + delim + str(n))
             wx.TheClipboard.SetData(do)
             wx.TheClipboard.Close()
 
-    def ClearLines(self, pdc = None):
+    def OnShowStatusbar(self, event):
+        """Show/hide statusbar"""
+        self._giface.ShowStatusbar(not self._giface.IsStatusbarShown())
+
+    def OnShowAllToolbars(self, event):
+        """Show/hide all toolbars"""
+        self._giface.ShowAllToolbars(not self._giface.AreAllToolbarsShown())
+
+    def ClearLines(self, pdc=None):
         """Clears temporary drawn lines from PseudoDC
         """
         if not pdc:
@@ -1566,7 +1754,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         w = self.Map.region["center_easting"] - (self.Map.width / 2) * res
         n = self.Map.region["center_northing"] + (self.Map.height / 2) * res
 
-        east  = w + x * res
+        east = w + x * res
         north = n - y * res
 
         return (east, north)
@@ -1575,7 +1763,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         """Convert real word coordinates to image coordinates
         """
         try:
-            east  = float(enCoords[0])
+            east = float(enCoords[0])
             north = float(enCoords[1])
         except:
             return None
@@ -1588,7 +1776,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         w = self.Map.region["center_easting"] - (self.Map.width / 2) * res
         n = self.Map.region["center_northing"] + (self.Map.height / 2) * res
 
-        x = (east  - w) / res
+        x = (east - w) / res
         y = (n - north) / res
 
         return (x, y)
@@ -1602,7 +1790,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         # threshold - too small squares do not make sense
         # can only zoom to windows of > 5x5 screen pixels
-        if abs(x2-x1) > 5 and abs(y2-y1) > 5 and zoomtype != 0:
+        if abs(x2 - x1) > 5 and abs(y2 - y1) > 5 and zoomtype != 0:
             if x1 > x2:
                 x1, x2 = x2, x1
             if y1 > y2:
@@ -1616,10 +1804,9 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             # zoom out
             elif zoomtype < 0:
                 newreg['w'], newreg['n'] = self.Pixel2Cell((-x1 * 2, -y1 * 2))
-                newreg['e'], newreg['s'] = self.Pixel2Cell((self.Map.width  + 2 * \
-                                                                (self.Map.width  - x2),
-                                                            self.Map.height + 2 * \
-                                                                (self.Map.height - y2)))
+                newreg['e'], newreg['s'] = self.Pixel2Cell(
+                    (self.Map.width + 2 * (self.Map.width - x2),
+                     self.Map.height + 2 * (self.Map.height - y2)))
         # pan
         elif zoomtype == 0:
             dx = x1 - x2
@@ -1628,7 +1815,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
                 dx = x1 - self.Map.width / 2
                 dy = y1 - self.Map.height / 2
             newreg['w'], newreg['n'] = self.Pixel2Cell((dx, dy))
-            newreg['e'], newreg['s'] = self.Pixel2Cell((self.Map.width  + dx,
+            newreg['e'], newreg['s'] = self.Pixel2Cell((self.Map.width + dx,
                                                         self.Map.height + dy))
 
         # if new region has been calculated, set the values
@@ -1644,15 +1831,17 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             # calculate new center point and display resolution
             self.Map.region['center_easting'] = ce
             self.Map.region['center_northing'] = cn
-            self.Map.region['ewres'] = (newreg['e'] - newreg['w']) / self.Map.width
-            self.Map.region['nsres'] = (newreg['n'] - newreg['s']) / self.Map.height
+            self.Map.region['ewres'] = (
+                newreg['e'] - newreg['w']) / self.Map.width
+            self.Map.region['nsres'] = (
+                newreg['n'] - newreg['s']) / self.Map.height
             if self._properties.alignExtent:
                 self.Map.AlignExtentFromDisplay()
             else:
                 for k in ('n', 's', 'e', 'w'):
                     self.Map.region[k] = newreg[k]
 
-            if hasattr(self, "digit") and \
+            if self.digit and \
                     hasattr(self, "moveInfo"):
                 self._zoom(None)
 
@@ -1680,9 +1869,9 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             self.zoomHistoryUnavailable.emit()
 
         # zoom to selected region
-        self.Map.GetRegion(n = zoom[0], s = zoom[1],
-                           e = zoom[2], w = zoom[3],
-                           update = True)
+        self.Map.GetRegion(n=zoom[0], s=zoom[1],
+                           e=zoom[2], w=zoom[3],
+                           update=True)
         # update map
         self.UpdateMap()
 
@@ -1704,7 +1893,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :return: removed history item if exists (or None)
         """
         removed = None
-        self.zoomhistory.append((n,s,e,w))
+        self.zoomhistory.append((n, s, e, w))
 
         if len(self.zoomhistory) > 10:
             removed = self.zoomhistory.pop(0)
@@ -1751,7 +1940,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         """Reset zoom history"""
         self.zoomhistory = list()
 
-    def ZoomToMap(self, layers = None, ignoreNulls = False, render = True):
+    def ZoomToMap(self, layers=None, ignoreNulls=False, render=True):
         """Set display extents to match selected raster
         or vector map(s).
 
@@ -1774,14 +1963,14 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             # only one raster is used: g.region does not support multiple
             if l.type == 'raster':
                 rast.append(l.GetName())
-            elif l.type == '3d-raster':
+            elif l.type == 'raster_3d':
                 rast3d = l.GetName()
             elif l.type == 'vector':
-                if hasattr(self, "digit") and \
+                if self.digit and \
                         self.toolbar.GetLayer() == l:
                     w, s, b, e, n, t = self.digit.GetDisplay().GetMapBoundingBox()
-                    self.Map.GetRegion(n = n, s = s, w = w, e = e,
-                                       update = True)
+                    self.Map.GetRegion(n=n, s=s, w=w, e=e,
+                                       update=True)
                     updated = True
                 else:
                     vect.append(l.name)
@@ -1816,8 +2005,8 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
     def ZoomToDefault(self):
         """Set display geometry to match default region settings
         """
-        self.Map.region = self.Map.GetRegion(default = True)
-        self.Map.AdjustRegion() # aling region extent to the display
+        self.Map.region = self.Map.GetRegion(default=True)
+        self.Map.AdjustRegion()  # aling region extent to the display
 
         self.ZoomHistory(self.Map.region['n'], self.Map.region['s'],
                          self.Map.region['e'], self.Map.region['w'])
@@ -1840,7 +2029,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         # add to zoom history
         self.ZoomHistory(region['n'], region['s'],
-                                   region['e'], region['w'])
+                         region['e'], region['w'])
         self.UpdateMap()
 
     def DisplayToWind(self):
@@ -1855,19 +2044,19 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         # for user to set explicitly with g.region
         new = self.Map.AlignResolution()
         RunCommand('g.region',
-                   parent = self,
-                   overwrite = True,
-                   n = new['n'],
-                   s = new['s'],
-                   e = new['e'],
-                   w = new['w'],
-                   rows = int(new['rows']),
-                   cols = int(new['cols']))
+                   parent=self,
+                   overwrite=True,
+                   n=new['n'],
+                   s=new['s'],
+                   e=new['e'],
+                   w=new['w'],
+                   rows=int(new['rows']),
+                   cols=int(new['cols']))
 
         if tmpreg:
             os.environ["GRASS_REGION"] = tmpreg
 
-        self.UpdateMap(render = False)
+        self.UpdateMap(render=False)
 
     def SetRegion(self, zoomOnly=True):
         """Set display extents/compulational region from named region
@@ -1879,26 +2068,28 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             label = _('Zoom to saved region extents')
         else:
             label = _('Set compulational region from named region')
-        dlg = SavedRegion(parent = self,
-                          title = label,
-                          loadsave = 'load')
+        dlg = SavedRegion(parent=self,
+                          title=label,
+                          loadsave='load')
 
         if dlg.ShowModal() == wx.ID_CANCEL or not dlg.GetName():
             dlg.Destroy()
             return
 
         region = dlg.GetName()
-        if not grass.find_file(name = region, element = 'windows')['name']:
-            GError(parent = self,
-                   message = _("Region <%s> not found. Operation canceled.") % region)
+        if not grass.find_file(name=region, element='windows')['name']:
+            GError(
+                parent=self,
+                message=_("Region <%s> not found. Operation canceled.") %
+                region)
             dlg.Destroy()
             return
 
         dlg.Destroy()
 
         if zoomOnly:
-            self.Map.GetRegion(regionName = region,
-                               update = True)
+            self.Map.GetRegion(regionName=region,
+                               update=True)
 
             self.ZoomHistory(self.Map.region['n'],
                              self.Map.region['s'],
@@ -1907,12 +2098,12 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         else:
             # set computation region from named region file
             RunCommand('g.region',
-                       parent = self,
-                       region = region)
+                       parent=self,
+                       region=region)
 
         self.UpdateMap()
 
-    def SaveRegion(self, display = True):
+    def SaveRegion(self, display=True):
         """Save display extents/compulational region to named region
         file.
 
@@ -1923,17 +2114,21 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         else:
             title = _("Save computational region to region file")
 
-        dlg = SavedRegion(parent = self, title = title, loadsave = 'save')
+        dlg = SavedRegion(parent=self, title=title, loadsave='save')
         if dlg.ShowModal() == wx.ID_CANCEL or not dlg.GetName():
             dlg.Destroy()
             return
 
         # test to see if it already exists and ask permission to overwrite
-        if grass.find_file(name = dlg.GetName(), element = 'windows')['name']:
-            overwrite = wx.MessageBox(parent = self,
-                                      message = _("Region file <%s> already exists. "
-                                                  "Do you want to overwrite it?") % (dlg.GetName()),
-                                      caption = _("Warning"), style = wx.YES_NO | wx.CENTRE)
+        if grass.find_file(name=dlg.GetName(), element='windows')['name']:
+            overwrite = wx.MessageBox(
+                parent=self,
+                message=_(
+                    "Region file <%s> already exists. "
+                    "Do you want to overwrite it?") %
+                (dlg.GetName()),
+                caption=_("Warning"),
+                style=wx.YES_NO | wx.CENTRE)
             if overwrite != wx.YES:
                 dlg.Destroy()
                 return
@@ -1951,10 +2146,10 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         :param name: region name
         """
         RunCommand('g.region',
-                   overwrite = True,
-                   parent = self,
-                   flags = 'u',
-                   save = name)
+                   overwrite=True,
+                   parent=self,
+                   flags='u',
+                   save=name)
 
     def _saveDisplayRegion(self, name):
         """Save display extents to region file
@@ -1968,21 +2163,21 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             del os.environ["GRASS_REGION"]
 
         RunCommand('g.region',
-                   overwrite = True,
-                   parent = self,
-                   flags = 'u',
-                   n = new['n'],
-                   s = new['s'],
-                   e = new['e'],
-                   w = new['w'],
-                   rows = int(new['rows']),
-                   cols = int(new['cols']),
-                   save = name)
+                   overwrite=True,
+                   parent=self,
+                   flags='u',
+                   n=new['n'],
+                   s=new['s'],
+                   e=new['e'],
+                   w=new['w'],
+                   rows=int(new['rows']),
+                   cols=int(new['cols']),
+                   save=name)
 
         if tmpreg:
             os.environ["GRASS_REGION"] = tmpreg
 
-    def Distance(self, beginpt, endpt, screen = True):
+    def Distance(self, beginpt, endpt, screen=True):
         """Calculates distance
 
         Ctypes required for LL-locations
@@ -1998,7 +2193,7 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
             e1, n1 = beginpt
             e2, n2 = endpt
 
-        dEast  = (e2 - e1)
+        dEast = (e2 - e1)
         dNorth = (n2 - n1)
 
         if self.Map.projinfo['proj'] == 'll' and haveCtypes:
@@ -2012,11 +2207,13 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
         """Get render.Map() instance"""
         return self.Map
 
-    def RegisterGraphicsToDraw(self, graphicsType, setStatusFunc=None, drawFunc=None,
-                               mapCoords=True):
+    def RegisterGraphicsToDraw(
+            self, graphicsType, pdc=None, setStatusFunc=None, drawFunc=None,
+            mapCoords=True):
         """This method registers graphics to draw.
 
         :param type: (string) - graphics type: "point", "line" or "rectangle"
+        :param pdc: PseudoDC object, default is pdcTmp
         :param setStatusFunc: function called before drawing each item
                               Status function should be in this form:
                               setStatusFunc(item, itemOrderNum)
@@ -2033,8 +2230,11 @@ class BufferedMapWindow(MapWindowBase, wx.Window):
 
         :return: reference to GraphicsSet, which was added.
         """
+        if not pdc:
+            pdc = self.pdcTmp
         item = GraphicsSet(parentMapWin=self,
                            graphicsType=graphicsType,
+                           pdc=pdc,
                            setStatusFunc=setStatusFunc,
                            drawFunc=drawFunc,
                            mapCoords=mapCoords)
diff --git a/gui/wxpython/mapwin/decorations.py b/gui/wxpython/mapwin/decorations.py
index 8b29524..9c9584e 100644
--- a/gui/wxpython/mapwin/decorations.py
+++ b/gui/wxpython/mapwin/decorations.py
@@ -22,8 +22,7 @@ import os
 from core.utils import _
 
 import wx
-from wx.lib.expando import ExpandoTextCtrl, EVT_ETC_LAYOUT_NEEDED
-        
+
 from grass.pydispatch.signal import Signal
 try:
     from PIL import Image
@@ -46,7 +45,8 @@ class OverlayController(object):
         self._defaultAt = ''
         self._cmd = None   # to be set by user
         self._name = None  # to be defined by subclass
-        self._id = None    # to be defined by subclass
+        self._removeLabel = None  # to be defined by subclass
+        self._id = wx.NewId()
         self._dialog = None
 
         # signals that overlay or its visibility changed
@@ -74,7 +74,8 @@ class OverlayController(object):
 
     def GetCoords(self):
         if self._coords is None:  # initial position
-            x, y = self.GetPlacement((self._renderer.width, self._renderer.height))
+            x, y = self.GetPlacement(
+                (self._renderer.width, self._renderer.height))
             self._coords = [x, y]
         return self._coords
 
@@ -90,6 +91,11 @@ class OverlayController(object):
 
     name = property(fget=GetName)
 
+    def GetRemoveLabel(self):
+        return self._removeLabel
+
+    removeLabel = property(fget=GetRemoveLabel)
+
     def GetId(self):
         return self._id
 
@@ -138,31 +144,24 @@ class OverlayController(object):
             self._overlay.SetActive(False)
         self.overlayChanged.emit()
 
-    def GetOptData(self, dcmd, layer, params, propwin):
-        """Called after options are set through module dialog.
-
-        :param dcmd: resulting command
-        :param layer: not used
-        :param params: module parameters (not used)
-        :param propwin: dialog window
-        """
-        if not dcmd:
-            return
-
-        self._cmd = dcmd
-        self._dialog = propwin
-
-        self.Show()
+    def Remove(self):
+        if self._dialog:
+            self._dialog.Destroy()
+        self._renderer.DeleteOverlay(self._overlay)
+        self.overlayChanged.emit()
 
     def _add(self):
-        self._overlay = self._renderer.AddOverlay(id=self._id, ltype=self._name,
-                                                  command=self.cmd, active=False,
-                                                  render=False, hidden=True)
+        self._overlay = self._renderer.AddOverlay(
+            id=self._id,
+            ltype=self._name,
+            command=self.cmd,
+            active=False,
+            render=True,
+            hidden=True)
         # check if successful
 
     def _update(self):
-        self._renderer.ChangeOverlay(id=self._id, command=self._cmd,
-                                     render=False)
+        self._renderer.ChangeOverlay(id=self._id, command=self._cmd)
 
     def CmdIsValid(self):
         """If command is valid"""
@@ -174,9 +173,12 @@ class OverlayController(object):
         :param screensize: screen size
         """
         if not hasPIL:
-            self._giface.WriteWarning(_("Please install Python Imaging Library (PIL)\n"
-                                        "for better control of legend and other decorations."))
+            self._giface.WriteWarning(
+                _(
+                    "Please install Python Imaging Library (PIL)\n"
+                    "for better control of legend and other decorations."))
             return 0, 0
+
         for param in self._cmd:
             if not param.startswith('at'):
                 continue
@@ -187,13 +189,37 @@ class OverlayController(object):
             return x, y
 
 
+class DtextController(OverlayController):
+
+    def __init__(self, renderer, giface):
+        OverlayController.__init__(self, renderer, giface)
+        self._name = 'text'
+        self._removeLabel = _("Remove text")
+        self._defaultAt = 'at=50,50'
+        self._cmd = ['d.text', self._defaultAt]
+
+    def CmdIsValid(self):
+        inputs = 0
+        for param in self._cmd[1:]:
+            param = param.split('=')
+            if len(param) == 1:
+                inputs += 1
+            else:
+                if param[0] == 'text' and len(param) == 2:
+                    inputs += 1
+        if inputs >= 1:
+            return True
+        return False
+
+
 class BarscaleController(OverlayController):
 
     def __init__(self, renderer, giface):
         OverlayController.__init__(self, renderer, giface)
-        self._id = 1
         self._name = 'barscale'
-        # different from default because the reference point is not in the middle
+        self._removeLabel = _("Remove scale bar")
+        # different from default because the reference point is not in the
+        # middle
         self._defaultAt = 'at=0,98'
         self._cmd = ['d.barscale', self._defaultAt]
 
@@ -202,32 +228,52 @@ class ArrowController(OverlayController):
 
     def __init__(self, renderer, giface):
         OverlayController.__init__(self, renderer, giface)
-        self._id = 2
         self._name = 'arrow'
-        # different from default because the reference point is not in the middle
+        self._removeLabel = _("Remove north arrow")
+        # different from default because the reference point is not in the
+        # middle
         self._defaultAt = 'at=85.0,25.0'
         self._cmd = ['d.northarrow', self._defaultAt]
 
 
+class LegendVectController(OverlayController):
+
+    def __init__(self, renderer, giface):
+        OverlayController.__init__(self, renderer, giface)
+        self._name = 'vectleg'
+        self._removeLabel = _("Remove vector legend")
+        # different from default because the reference point is not in the
+        # middle
+        self._defaultAt = 'at=20.0,80.0'
+        self._cmd = ['d.legend.vect', self._defaultAt]
+
+
 class LegendController(OverlayController):
 
     def __init__(self, renderer, giface):
         OverlayController.__init__(self, renderer, giface)
-        self._id = 0
         self._name = 'legend'
-        # TODO: synchronize with d.legend?
-        self._defaultAt = 'at=5,50,7,10'
+        self._removeLabel = _("Remove legend")
+        # default is in the center to avoid trimmed legend on the edge
+        self._defaultAt = 'at=5,50,47,50'
         self._cmd = ['d.legend', self._defaultAt]
 
     def GetPlacement(self, screensize):
         if not hasPIL:
-            self._giface.WriteWarning(_("Please install Python Imaging Library (PIL)\n"
-                                        "for better control of legend and other decorations."))
+            self._giface.WriteWarning(
+                _(
+                    "Please install Python Imaging Library (PIL)\n"
+                    "for better control of legend and other decorations."))
             return 0, 0
         for param in self._cmd:
             if not param.startswith('at'):
                 continue
-            b, t, l, r = [float(number) for number in param.split('=')[1].split(',')]  # pylint: disable-msg=W0612
+            # if the at= is the default, we will move the legend from the center to bottom left
+            if param == self._defaultAt:
+                b, t, l, r = 5, 50, 7, 10
+            else:
+                b, t, l, r = [float(number) for number in param.split(
+                    '=')[1].split(',')]  # pylint: disable-msg=W0612
             x = int((l / 100.) * screensize[0])
             y = int((1 - t / 100.) * screensize[1])
 
@@ -289,172 +335,10 @@ class LegendController(OverlayController):
         window = self._giface.GetMapWindow()
         window.mouseLeftUp.disconnect(self._finishResizing)
         screenSize = window.GetClientSizeTuple()
-        self.ResizeLegend(window.mouse["begin"], window.mouse["end"], screenSize)
+        self.ResizeLegend(
+            window.mouse["begin"],
+            window.mouse["end"],
+            screenSize)
         self._giface.GetMapDisplay().GetMapToolbar().SelectDefault()
         # redraw
         self.overlayChanged.emit()
-
-
-class TextLayerDialog(wx.Dialog):
-    """!Controls setting options and displaying/hiding map overlay decorations
-    """
-    def __init__(self, parent, ovlId, title, name='text', size=wx.DefaultSize,
-                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
-
-        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY, title=title, style=style, size=size)
-
-        self.ovlId = ovlId
-        self.parent = parent
-
-        if self.ovlId in self.parent.MapWindow.textdict.keys():
-            self.currText = self.parent.MapWindow.textdict[self.ovlId]['text']
-            self.currFont = self.parent.MapWindow.textdict[self.ovlId]['font']
-            self.currClr = self.parent.MapWindow.textdict[self.ovlId]['color']
-            self.currRot = self.parent.MapWindow.textdict[self.ovlId]['rotation']
-            self.currCoords = self.parent.MapWindow.textdict[self.ovlId]['coords']
-            self.currBB = self.parent.MapWindow.textdict[self.ovlId]['bbox']
-        else:
-            self.currClr = wx.BLACK
-            self.currText = ''
-            self.currFont = self.GetFont()
-            self.currRot = 0.0
-            self.currCoords = [10, 10]
-            self.currBB = wx.Rect()
-
-        self.sizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.GridBagSizer(vgap=5, hgap=5)
-
-        # show/hide
-        self.chkbox = wx.CheckBox(parent=self, id=wx.ID_ANY,
-                                  label=_('Show text object'))
-        if self.parent.Map.GetOverlay(self.ovlId) is None:
-            self.chkbox.SetValue(True)
-        else:
-            self.chkbox.SetValue(self.parent.MapWindow.overlays[self.ovlId]['layer'].IsActive())
-        box.Add(item=self.chkbox, span=(1, 2),
-                pos=(0, 0))
-
-        # text entry
-        box.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Text:")),
-                flag=wx.ALIGN_CENTER_VERTICAL,
-                pos=(1, 0))
-
-        self.textentry = ExpandoTextCtrl(parent=self, id=wx.ID_ANY, value="", size=(300, -1))
-        self.textentry.SetFont(self.currFont)
-        self.textentry.SetForegroundColour(self.currClr)
-        self.textentry.SetValue(self.currText)
-        # get rid of unneeded scrollbar when text box first opened
-        self.textentry.SetClientSize((300, -1))
-
-        box.Add(item=self.textentry,
-                flag=wx.EXPAND,
-                pos=(1, 1))
-
-        # rotation
-        box.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Rotation:")),
-                flag=wx.ALIGN_CENTER_VERTICAL,
-                pos=(2, 0))
-        self.rotation = wx.SpinCtrl(parent=self, id=wx.ID_ANY, value="", pos=(30, 50),
-                                    size=(75, -1), style=wx.SP_ARROW_KEYS)
-        self.rotation.SetRange(-360, 360)
-        self.rotation.SetValue(int(self.currRot))
-        box.Add(item=self.rotation,
-                flag=wx.ALIGN_RIGHT,
-                pos=(2, 1))
-
-        # font
-        box.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Font:")),
-                flag=wx.ALIGN_CENTER_VERTICAL,
-                pos=(3, 0))
-        fontbtn = wx.Button(parent=self, id=wx.ID_ANY, label=_("Set font"))
-        box.Add(item=fontbtn,
-                flag=wx.ALIGN_RIGHT,
-                pos=(3, 1))
-
-        box.AddGrowableCol(1)
-        box.AddGrowableRow(1)
-        self.sizer.Add(item=box, proportion=1,
-                       flag=wx.ALL | wx.EXPAND, border=10)
-
-        # note
-        box = wx.BoxSizer(wx.HORIZONTAL)
-        label = wx.StaticText(parent=self, id=wx.ID_ANY,
-                              label=_("Drag text with mouse in pointer mode "
-                                      "to position.\nDouble-click to change options"))
-        box.Add(item=label, proportion=0,
-                flag=wx.ALIGN_CENTRE | wx.ALL, border=5)
-        self.sizer.Add(item=box, proportion=0,
-                       flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER | wx.ALL, border=5)
-
-        line = wx.StaticLine(parent=self, id=wx.ID_ANY,
-                             size=(20, -1), style=wx.LI_HORIZONTAL)
-        self.sizer.Add(item=line, proportion=0,
-                       flag=wx.EXPAND | wx.ALIGN_CENTRE | wx.ALL, border=5)
-
-        btnsizer = wx.StdDialogButtonSizer()
-
-        btn = wx.Button(parent=self, id=wx.ID_OK)
-        btn.SetDefault()
-        btnsizer.AddButton(btn)
-
-        btn = wx.Button(parent=self, id=wx.ID_CANCEL)
-        btnsizer.AddButton(btn)
-        btnsizer.Realize()
-
-        self.sizer.Add(item=btnsizer, proportion=0,
-                       flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
-
-        self.SetSizer(self.sizer)
-        self.sizer.Fit(self)
-
-        # bindings
-        self.Bind(EVT_ETC_LAYOUT_NEEDED, self.OnRefit, self.textentry)
-        self.Bind(wx.EVT_BUTTON,     self.OnSelectFont, fontbtn)
-        self.Bind(wx.EVT_TEXT,       self.OnText,       self.textentry)
-        self.Bind(wx.EVT_SPINCTRL,   self.OnRotation,   self.rotation)
-
-        self.SetMinSize((400, 230))
-        
-    def OnRefit(self, event):
-        """Resize text entry to match text"""
-        self.sizer.Fit(self)
-
-    def OnText(self, event):
-        """Change text string"""
-        self.currText = event.GetString()
-
-    def OnRotation(self, event):
-        """Change rotation"""
-        self.currRot = event.GetInt()
-
-        event.Skip()
-
-    def OnSelectFont(self, event):
-        """Change font"""
-        data = wx.FontData()
-        data.EnableEffects(True)
-        data.SetColour(self.currClr)         # set colour
-        data.SetInitialFont(self.currFont)
-
-        dlg = wx.FontDialog(self, data)
-
-        if dlg.ShowModal() == wx.ID_OK:
-            data = dlg.GetFontData()
-            self.currFont = data.GetChosenFont()
-            self.currClr = data.GetColour()
-
-            self.textentry.SetFont(self.currFont)
-            self.textentry.SetForegroundColour(self.currClr)
-
-            self.Layout()
-
-        dlg.Destroy()
-
-    def GetValues(self):
-        """Get text properties"""
-        return {'text': self.currText,
-                'font': self.currFont,
-                'color': self.currClr,
-                'rotation': self.currRot,
-                'coords': self.currCoords,
-                'active': self.chkbox.IsChecked()}
diff --git a/gui/wxpython/mapwin/graphics.py b/gui/wxpython/mapwin/graphics.py
index 3e916eb..3f304d6 100644
--- a/gui/wxpython/mapwin/graphics.py
+++ b/gui/wxpython/mapwin/graphics.py
@@ -25,17 +25,20 @@ from core.utils import _
 
 class GraphicsSet:
 
-    def __init__(self, parentMapWin, graphicsType,
+    def __init__(self, parentMapWin, graphicsType, pdc,
                  setStatusFunc=None, drawFunc=None, mapCoords=True):
         """Class, which contains instances of GraphicsSetItem and
             draws them For description of parameters look at method
             RegisterGraphicsToDraw in BufferedWindow class.
         """
         self.pens = {
-            "default":  wx.Pen(colour=wx.BLACK, width=2, style=wx.SOLID),
-            "selected":  wx.Pen(colour=wx.GREEN, width=2, style=wx.SOLID),
-            "unused":  wx.Pen(colour=wx.LIGHT_GREY, width=2, style=wx.SOLID),
-            "highest":  wx.Pen(colour=wx.RED, width=2, style=wx.SOLID)
+            "default": wx.Pen(colour=wx.BLACK, width=2, style=wx.SOLID),
+            "selected": wx.Pen(colour=wx.GREEN, width=2, style=wx.SOLID),
+            "unused": wx.Pen(colour=wx.LIGHT_GREY, width=2, style=wx.SOLID),
+            "highest": wx.Pen(colour=wx.RED, width=2, style=wx.SOLID)
+        }
+        self.brushes = {
+            'default': wx.TRANSPARENT_BRUSH
         }
 
         # list contains instances of GraphicsSetItem
@@ -46,6 +49,7 @@ class GraphicsSet:
         self.parentMapWin = parentMapWin
         self.setStatusFunc = setStatusFunc
         self.mapCoords = mapCoords
+        self.pdc = pdc
 
         if drawFunc:
             self.drawFunc = drawFunc
@@ -54,10 +58,11 @@ class GraphicsSet:
             self.properties["size"] = 5
 
             self.properties["text"] = {}
-            self.properties["text"]['font'] = wx.Font(pointSize=self.properties["size"],
-                                                      family=wx.FONTFAMILY_DEFAULT,
-                                                      style=wx.FONTSTYLE_NORMAL,
-                                                      weight=wx.FONTWEIGHT_NORMAL)
+            self.properties["text"]['font'] = wx.Font(
+                pointSize=self.properties["size"],
+                family=wx.FONTFAMILY_DEFAULT,
+                style=wx.FONTSTYLE_NORMAL,
+                weight=wx.FONTWEIGHT_NORMAL)
             self.properties["text"]['active'] = True
 
             self.drawFunc = self.parentMapWin.DrawCross
@@ -71,14 +76,11 @@ class GraphicsSet:
         elif self.graphicsType == "polygon":
             self.drawFunc = self.parentMapWin.DrawPolygon
 
-    def Draw(self, pdc):
-        """Draws all containing items.
-
-        :param pdc: device context, where items are drawn
-        """
+    def Draw(self):
+        """Draws all containing items."""
         itemOrderNum = 0
         for item in self.itemsList:
-            self._clearId(pdc, item.GetId())
+            self._clearId(item.GetId())
             if self.setStatusFunc is not None:
                 self.setStatusFunc(item, itemOrderNum)
 
@@ -88,7 +90,8 @@ class GraphicsSet:
 
             if self.graphicsType == "point":
                 if item.GetPropertyVal("penName"):
-                    self.parentMapWin.pen = self.pens[item.GetPropertyVal("penName")]
+                    self.parentMapWin.pen = self.pens[
+                        item.GetPropertyVal("penName")]
                 else:
                     self.parentMapWin.pen = self.pens["default"]
 
@@ -105,10 +108,11 @@ class GraphicsSet:
                     self.properties["text"]['coords'] = [coords[0] + size,
                                                          coords[1] + size,
                                                          size, size]
-                    self.properties["text"]['color'] = self.parentMapWin.pen.GetColour()
+                    self.properties["text"][
+                        'color'] = self.parentMapWin.pen.GetColour()
                     self.properties["text"]['text'] = label
 
-                self.drawFunc(pdc=pdc, drawid=item.GetId(),
+                self.drawFunc(pdc=self.pdc, drawid=item.GetId(),
                               coords=coords,
                               text=self.properties["text"],
                               size=self.properties["size"])
@@ -120,11 +124,13 @@ class GraphicsSet:
                     pen = self.pens["default"]
 
                 if self.mapCoords:
-                    coords = [self.parentMapWin.Cell2Pixel(coords) for coords in item.GetCoords()]
+                    coords = [
+                        self.parentMapWin.Cell2Pixel(coords)
+                        for coords in item.GetCoords()]
                 else:
                     coords = item.GetCoords()
 
-                self.drawFunc(pdc=pdc, pen=pen,
+                self.drawFunc(pdc=self.pdc, pen=pen,
                               coords=coords, drawid=item.GetId())
 
             elif self.graphicsType == "rectangle":
@@ -132,26 +138,42 @@ class GraphicsSet:
                     pen = self.pens[item.GetPropertyVal("penName")]
                 else:
                     pen = self.pens["default"]
+                if item.GetPropertyVal("brushName"):
+                    brush = self.brushes[item.GetPropertyVal("brushName")]
+                else:
+                    brush = self.brushes["default"]
                 if self.mapCoords:
-                    coords = [self.parentMapWin.Cell2Pixel(coords) for coords in item.GetCoords()]
+                    coords = [
+                        self.parentMapWin.Cell2Pixel(coords)
+                        for coords in item.GetCoords()]
                 else:
                     coords = item.GetCoords()
 
-                self.drawFunc(pdc=pdc, pen=pen, drawid=item.GetId(),
-                              point1=coords[0],
-                              point2=coords[1])
+                self.drawFunc(
+                    pdc=self.pdc,
+                    pen=pen,
+                    brush=brush,
+                    drawid=item.GetId(),
+                    point1=coords[0],
+                    point2=coords[1])
 
             elif self.graphicsType == "polygon":
                 if item.GetPropertyVal("penName"):
                     pen = self.pens[item.GetPropertyVal("penName")]
                 else:
                     pen = self.pens["default"]
+                if item.GetPropertyVal("brushName"):
+                    brush = self.brushes[item.GetPropertyVal("brushName")]
+                else:
+                    brush = self.brushes["default"]
                 if self.mapCoords:
-                    coords = [self.parentMapWin.Cell2Pixel(coords) for coords in item.GetCoords()]
+                    coords = [
+                        self.parentMapWin.Cell2Pixel(coords)
+                        for coords in item.GetCoords()]
                 else:
                     coords = item.GetCoords()
 
-                self.drawFunc(pdc=pdc, pen=pen,
+                self.drawFunc(pdc=self.pdc, pen=pen, brush=brush,
                               coords=coords, drawid=item.GetId())
             itemOrderNum += 1
 
@@ -218,10 +240,7 @@ class GraphicsSet:
         :return: instance of GraphicsSetItem which is drawn in drawNum order
         :return: False if drawNum was out of range
         """
-        if drawNum < len(self.itemsList) and drawNum >= 0:
-            return self.itemsList[drawNum]
-        else:
-            return False
+        return self.itemsList[drawNum]
 
     def SetPropertyVal(self, propName, propVal):
         """Set property value
@@ -288,6 +307,37 @@ class GraphicsSet:
 
         return None
 
+    def AddBrush(self, brushName, brush):
+        """Add brush
+
+        :param brushName: name of added brush
+        :type brushName: str
+        :param brush: added brush
+        :type brush: wx.Brush
+
+        :return: True - if brush was added
+        :return: False - if brush already exists
+        """
+        if brushName in self.brushes:
+            return False
+
+        self.brushes[brushName] = brush
+        return True
+
+    def GetBrush(self, brushName):
+        """Get existing brush
+
+        :param brushName: name of brush
+        :type brushName: str
+
+        :return: wx.Brush reference if is found
+        :return: None if brushName was not found
+        """
+        if brushName in self.brushes:
+            return self.brushes[brushName]
+
+        return None
+
     def SetItemDrawOrder(self, item, drawNum):
         """Set draw order for item
 
@@ -300,7 +350,9 @@ class GraphicsSet:
         """
         if drawNum < len(self.itemsList) and drawNum >= 0 and \
                 item in self.itemsList:
-            self.itemsList.insert(drawNum, self.itemsList.pop(self.itemsList.index(item)))
+            self.itemsList.insert(
+                drawNum, self.itemsList.pop(
+                    self.itemsList.index(item)))
             return True
 
         return False
@@ -318,17 +370,18 @@ class GraphicsSet:
         except ValueError:
             return None
 
-    def _clearId(self, pdc, drawid):
+    def _clearId(self, drawid):
         """Clears old object before drawing new object."""
         try:
-            pdc.ClearId(drawid)
+            self.pdc.ClearId(drawid)
         except:
             pass
 
 
 class GraphicsSetItem:
 
-    def __init__(self, coords, penName=None, label=None, hide=False):
+    def __init__(self, coords, penName=None,
+                 brushName=None, label=None, hide=False):
         """Could be point or line according to graphicsType in
         GraphicsSet class
 
@@ -338,6 +391,8 @@ class GraphicsSetItem:
                                 rectangle: [[10, 12], [33, 45]]
         :param penName: if it is not defined 'default' pen is used
         :type penName: str
+        :param brushName: if it is not defined 'default' brush is used
+        :type brushName: str
         :param label: label, which will be drawn with point. It is
                       relevant just for 'point' type
         :type label: str
@@ -348,15 +403,26 @@ class GraphicsSetItem:
         self.coords = coords
 
         self.properties = {"penName": penName,
+                           "brushName": brushName,
                            "hide": hide,
                            "label": label}
         self.id = wx.NewId()
 
+    def AddProperty(self, propName):
+        """Adds new property, to set it, call SetPropertyVal afterwards.
+
+        :param propName - name of the newly defined property
+        :type propName: str
+        """
+        if not propName in self.properties:
+            self.properties[propName] = None
+
     def SetPropertyVal(self, propName, propVal):
         """Set property value
 
         :param propName: - property name: "penName", "hide" or "label"
                          - property "label" is relevant just for 'point' type
+                         - or newly defined property name
         :type propName: str
         :param propVal: property value to be set
 
diff --git a/gui/wxpython/modules/__init__.py b/gui/wxpython/modules/__init__.py
index 80eccbd..8874d0e 100644
--- a/gui/wxpython/modules/__init__.py
+++ b/gui/wxpython/modules/__init__.py
@@ -4,4 +4,4 @@ all = [
     'vclean',
     'colorrules',
     'histogram',
-    ]
+]
diff --git a/gui/wxpython/modules/colorrules.py b/gui/wxpython/modules/colorrules.py
index c0dc918..fdc800a 100644
--- a/gui/wxpython/modules/colorrules.py
+++ b/gui/wxpython/modules/colorrules.py
@@ -28,72 +28,76 @@ import copy
 import tempfile
 
 import wx
-import wx.lib.colourselect     as csel
-import wx.lib.scrolledpanel    as scrolled
+import wx.lib.colourselect as csel
+import wx.lib.scrolledpanel as scrolled
 import wx.lib.filebrowsebutton as filebrowse
 
 import grass.script as grass
+from grass.script.task import cmdlist_to_tuple
 
-from core             import globalvar
-from core             import utils
+from core import globalvar
+from core import utils
 from core.utils import _
-from core.gcmd        import GMessage, RunCommand, GError
+from core.gcmd import GMessage, RunCommand, GError
 from gui_core.gselect import Select, LayerSelect, ColumnSelect, VectorDBInfo
-from core.render      import Map
-from gui_core.forms   import GUI
-from core.debug       import Debug as Debug
-from core.settings    import UserSettings
+from core.render import Map
+from gui_core.forms import GUI
+from core.debug import Debug as Debug
+from core.settings import UserSettings
 from gui_core.widgets import ColorTablesComboBox
 
+
 class RulesPanel:
-    def __init__(self, parent, mapType, attributeType, properties, panelWidth = 180):
+
+    def __init__(self, parent, mapType, attributeType,
+                 properties, panelWidth=180):
         """Create rules panel
-        
+
         :param mapType: raster/vector
         :param attributeType: color/size for choosing widget type
         :param properties: properties of classes derived from ColorTable
         :param panelWidth: width of scroll panel"""
-        
+
         self.ruleslines = {}
         self.mapType = mapType
         self.attributeType = attributeType
         self.properties = properties
         self.parent = parent
         self.panelWidth = panelWidth
-        
-        self.mainSizer = wx.FlexGridSizer(cols = 3, vgap = 6, hgap = 4)
+
+        self.mainSizer = wx.FlexGridSizer(cols=3, vgap=6, hgap=4)
         # put small border at the top of panel
         for i in range(3):
-            self.mainSizer.Add(item = wx.Size(3, 3))
-        
-        self.mainPanel = scrolled.ScrolledPanel(parent, id = wx.ID_ANY,
-                                          size = (self.panelWidth, 300),
-                                          style = wx.TAB_TRAVERSAL | wx.SUNKEN_BORDER)
-                
+            self.mainSizer.Add(item=wx.Size(3, 3))
+
+        self.mainPanel = scrolled.ScrolledPanel(
+            parent, id=wx.ID_ANY, size=(self.panelWidth, 300),
+            style=wx.TAB_TRAVERSAL | wx.SUNKEN_BORDER)
+
         # (un)check all
-        self.checkAll = wx.CheckBox(parent, id = wx.ID_ANY, label = _("Check all"))
+        self.checkAll = wx.CheckBox(parent, id=wx.ID_ANY, label=_("Check all"))
         self.checkAll.SetValue(True)
         # clear button
-        self.clearAll = wx.Button(parent, id = wx.ID_ANY, label = _("Clear all"))
+        self.clearAll = wx.Button(parent, id=wx.ID_ANY, label=_("Clear all"))
         #  determines how many rules should be added
-        self.numRules = wx.SpinCtrl(parent, id = wx.ID_ANY,
-                                    min = 1, max = 1e6, initial = 1)
+        self.numRules = wx.SpinCtrl(parent, id=wx.ID_ANY,
+                                    min=1, max=1e6, initial=1)
         # add rules
-        self.btnAdd = wx.Button(parent, id = wx.ID_ADD)
-        
+        self.btnAdd = wx.Button(parent, id=wx.ID_ADD)
+
         self.btnAdd.Bind(wx.EVT_BUTTON, self.OnAddRules)
         self.checkAll.Bind(wx.EVT_CHECKBOX, self.OnCheckAll)
         self.clearAll.Bind(wx.EVT_BUTTON, self.OnClearAll)
 
         self.mainPanel.SetSizer(self.mainSizer)
         self.mainPanel.SetAutoLayout(True)
-        self.mainPanel.SetupScrolling()    
-    
+        self.mainPanel.SetupScrolling()
+
     def Clear(self):
         """Clear and widgets and delete information"""
         self.ruleslines.clear()
         self.mainSizer.Clear(deleteWindows=True)
-    
+
     def OnCheckAll(self, event):
         """(Un)check all rules"""
         check = event.GetInt()
@@ -102,134 +106,141 @@ class RulesPanel:
                 child.SetValue(check)
             else:
                 child.Enable(check)
-                
+
     def OnClearAll(self, event):
         """Delete all widgets in panel"""
         self.Clear()
-        
+
     def OnAddRules(self, event):
         """Add rules button pressed"""
         nrules = self.numRules.GetValue()
         self.AddRules(nrules)
-        
-    def AddRules(self, nrules, start = False):
+
+    def AddRules(self, nrules, start=False):
         """Add rules
-         
+
         :param start: set widgets (not append)
         """
-       
+
         snum = len(self.ruleslines.keys())
         if start:
             snum = 0
         for num in range(snum, snum + nrules):
             # enable
-            enable = wx.CheckBox(parent = self.mainPanel, id = num)
+            enable = wx.CheckBox(parent=self.mainPanel, id=num)
             enable.SetValue(True)
             enable.SetName('enable')
             enable.Bind(wx.EVT_CHECKBOX, self.OnRuleEnable)
             # value
-            txt_ctrl = wx.TextCtrl(parent = self.mainPanel, id = 1000 + num,
-                                   size = (80, -1),
-                                   style = wx.TE_NOHIDESEL)
+            txt_ctrl = wx.TextCtrl(parent=self.mainPanel, id=1000 + num,
+                                   size=(80, -1),
+                                   style=wx.TE_NOHIDESEL)
             if self.mapType == 'vector':
                 txt_ctrl.SetToolTipString(_("Enter vector attribute values"))
             txt_ctrl.Bind(wx.EVT_TEXT, self.OnRuleValue)
             txt_ctrl.SetName('source')
             if self.attributeType == 'color':
                 # color
-                columnCtrl = csel.ColourSelect(self.mainPanel, id = 2000 + num,
-                                               size  =  globalvar.DIALOG_COLOR_SIZE)
+                columnCtrl = csel.ColourSelect(
+                    self.mainPanel, id=2000 + num,
+                    size=globalvar.DIALOG_COLOR_SIZE)
                 columnCtrl.Bind(csel.EVT_COLOURSELECT, self.OnRuleColor)
                 columnCtrl.SetName('target')
                 if not start:
-                    self.ruleslines[enable.GetId()] = { 'value' : '',
-                                                        'color': "0:0:0" }
+                    self.ruleslines[enable.GetId()] = {'value': '',
+                                                       'color': "0:0:0"}
             else:
                 # size or width
                 init = 2
                 if self.attributeType == 'size':
                     init = 100
-                columnCtrl = wx.SpinCtrl(self.mainPanel, id = 2000 + num,
-                                         size = (50, -1), min = 1, max = 1e4,
-                                         initial = init)
+                columnCtrl = wx.SpinCtrl(self.mainPanel, id=2000 + num,
+                                         size=(50, -1), min=1, max=1e4,
+                                         initial=init)
                 columnCtrl.Bind(wx.EVT_SPINCTRL, self.OnRuleSize)
                 columnCtrl.Bind(wx.EVT_TEXT, self.OnRuleSize)
                 columnCtrl.SetName('target')
                 if not start:
-                    self.ruleslines[enable.GetId()] = { 'value' : '',
-                                                        self.attributeType: init }
-        
-            self.mainSizer.Add(item = enable, proportion = 0,
-                              flag = wx.ALIGN_CENTER_VERTICAL)
-            self.mainSizer.Add(item = txt_ctrl, proportion = 0,
-                              flag = wx.ALIGN_CENTER | wx.RIGHT, border = 5)
-            self.mainSizer.Add(item = columnCtrl, proportion = 0,
-                              flag = wx.ALIGN_CENTER | wx.RIGHT, border = 10)
-        
+                    self.ruleslines[
+                        enable.GetId()] = {
+                        'value': '',
+                        self.attributeType: init}
+
+            self.mainSizer.Add(item=enable, proportion=0,
+                               flag=wx.ALIGN_CENTER_VERTICAL)
+            self.mainSizer.Add(item=txt_ctrl, proportion=0,
+                               flag=wx.ALIGN_CENTER | wx.RIGHT, border=5)
+            self.mainSizer.Add(item=columnCtrl, proportion=0,
+                               flag=wx.ALIGN_CENTER | wx.RIGHT, border=10)
+
         self.mainPanel.Layout()
-        self.mainPanel.SetupScrolling(scroll_x = False)
-    
+        self.mainPanel.SetupScrolling(scroll_x=False)
+
     def OnRuleEnable(self, event):
         """Rule enabled/disabled"""
         id = event.GetId()
-        
+
         if event.IsChecked():
             self.mainPanel.FindWindowById(id + 1000).Enable()
             self.mainPanel.FindWindowById(id + 2000).Enable()
             if self.mapType == 'vector' and not self.parent.GetParent().colorTable:
                 vals = []
-                vals.append(self.mainPanel.FindWindowById(id + 1000).GetValue())
+                vals.append(
+                    self.mainPanel.FindWindowById(
+                        id + 1000).GetValue())
                 try:
-                    vals.append(self.mainPanel.FindWindowById(id + 1 + 1000).GetValue())
+                    vals.append(
+                        self.mainPanel.FindWindowById(
+                            id + 1 + 1000).GetValue())
                 except AttributeError:
                     vals.append(None)
                 value = self.SQLConvert(vals)
             else:
                 value = self.mainPanel.FindWindowById(id + 1000).GetValue()
             color = self.mainPanel.FindWindowById(id + 2000).GetValue()
-            
+
             if self.attributeType == 'color':
-            # color
+                # color
                 color_str = str(color[0]) + ':' \
-                          + str(color[1]) + ':' \
-                          + str(color[2])
-                self.ruleslines[id] = {'value' : value,
-                                       'color' : color_str }
-                
+                    + str(color[1]) + ':' \
+                    + str(color[2])
+                self.ruleslines[id] = {'value': value,
+                                       'color': color_str}
+
             else:
-            # size or width
-                self.ruleslines[id] = {'value' : value,
-                                       self.attributeType  : float(color) }
-        
+                # size or width
+                self.ruleslines[id] = {'value': value,
+                                       self.attributeType: float(color)}
+
         else:
             self.mainPanel.FindWindowById(id + 1000).Disable()
             self.mainPanel.FindWindowById(id + 2000).Disable()
             del self.ruleslines[id]
-        
+
     def OnRuleColor(self, event):
         """Rule color changed"""
         num = event.GetId()
-        
+
         rgba_color = event.GetValue()
-        
+
         rgb_string = str(rgba_color[0]) + ':' \
-                   + str(rgba_color[1]) + ':' \
-                   + str(rgba_color[2])
-        
-        self.ruleslines[num-2000]['color'] = rgb_string
-     
+            + str(rgba_color[1]) + ':' \
+            + str(rgba_color[2])
+
+        self.ruleslines[num - 2000]['color'] = rgb_string
+
     def OnRuleSize(self, event):
         """Rule size changed"""
         num = event.GetId()
         size = event.GetInt()
-        
+
         self.ruleslines[num - 2000][self.attributeType] = size
-        
+
     def OnRuleValue(self, event):
         """Rule value changed"""
         num = event.GetId()
         val = event.GetString().strip()
-        
+
         if val == '':
             return
         try:
@@ -245,8 +256,8 @@ class RulesPanel:
         else:
             self.SetVectorRule(num, val)
 
-    def SetRasterRule(self, num, val): 
-        """Set raster rule"""     
+    def SetRasterRule(self, num, val):
+        """Set raster rule"""
         self.ruleslines[num - 1000]['value'] = val
 
     def SetVectorRule(self, num, val):
@@ -258,65 +269,76 @@ class RulesPanel:
         except AttributeError:
             vals.append(None)
         self.ruleslines[num - 1000]['value'] = self.SQLConvert(vals)
-            
-    def Enable(self, enable = True):
+
+    def Enable(self, enable=True):
         """Enable/Disable all widgets"""
         for child in self.mainPanel.GetChildren():
             child.Enable(enable)
         sql = True
-        self.LoadRulesline(sql)# todo
+        self.LoadRulesline(sql)  # todo
         self.btnAdd.Enable(enable)
         self.numRules.Enable(enable)
         self.checkAll.Enable(enable)
         self.clearAll.Enable(enable)
-        
-        
+
     def LoadRules(self):
-        message = ""        
+        message = ""
         for item in range(len(self.ruleslines)):
             try:
-                self.mainPanel.FindWindowById(item + 1000).SetValue(self.ruleslines[item]['value'])
-                r, g, b = (0, 0, 0) # default
+                self.mainPanel.FindWindowById(
+                    item +
+                    1000).SetValue(
+                    self.ruleslines[item]['value'])
+                r, g, b = (0, 0, 0)  # default
                 if not self.ruleslines[item][self.attributeType]:
                     if self.attributeType == 'color':
-                        self.ruleslines[item][self.attributeType] = '%d:%d:%d' % (r, g, b)
+                        self.ruleslines[item][
+                            self.attributeType] = '%d:%d:%d' % (
+                            r, g, b)
                     elif self.attributeType == 'size':
-                        self.ruleslines[item][self.attributeType] = 100                
+                        self.ruleslines[item][self.attributeType] = 100
                     elif self.attributeType == 'width':
                         self.ruleslines[item][self.attributeType] = 2
-                    
+
                 if self.attributeType == 'color':
                     try:
-                        r, g, b = map(int, self.ruleslines[item][self.attributeType].split(':'))
+                        r, g, b = map(
+                            int, self.ruleslines[item][
+                                self.attributeType].split(':'))
                     except ValueError as e:
-                        message =  _("Bad color format. Use color format '0:0:0'")
-                    self.mainPanel.FindWindowById(item + 2000).SetValue((r, g, b))
+                        message = _(
+                            "Bad color format. Use color format '0:0:0'")
+                    self.mainPanel.FindWindowById(
+                        item + 2000).SetValue((r, g, b))
                 else:
                     value = float(self.ruleslines[item][self.attributeType])
                     self.mainPanel.FindWindowById(item + 2000).SetValue(value)
             except:
                 continue
-                
+
         if message:
-            GMessage(parent = self.parent, message = message)
+            GMessage(parent=self.parent, message=message)
             return False
-        
+
         return True
-                
+
     def SQLConvert(self, vals):
         """Prepare value for SQL query"""
         if vals[0].isdigit():
             sqlrule = '%s=%s' % (self.properties['sourceColumn'], vals[0])
             if vals[1]:
-                sqlrule += ' AND %s<%s' % (self.properties['sourceColumn'], vals[1])
+                sqlrule += ' AND %s<%s' % (
+                    self.properties['sourceColumn'], vals[1])
         else:
             sqlrule = '%s=%s' % (self.properties['sourceColumn'], vals[0])
-        
-        return sqlrule  
+
+        return sqlrule
+
 
 class ColorTable(wx.Frame):
-    def __init__(self, parent, title, layerTree = None, id = wx.ID_ANY,
-                 style = wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER,
+
+    def __init__(self, parent, title, layerTree=None, id=wx.ID_ANY,
+                 style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER,
                  **kwargs):
         """Dialog for interactively entering rules for map management
         commands
@@ -326,56 +348,63 @@ class ColorTable(wx.Frame):
         """
         self.parent = parent        # GMFrame ?
         self.layerTree = layerTree  # LayerTree or None
-        
-        wx.Frame.__init__(self, parent, id, title, style = style, **kwargs)
-        
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        
+
+        wx.Frame.__init__(self, parent, id, title, style=style, **kwargs)
+
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
         # instance of render.Map to be associated with display
-        self.Map  = Map() 
-        
+        self.Map = Map()
+
         # input map to change
         self.inmap = ''
-        
+
         # reference to layer with preview
         self.layer = None
-        
+
         # layout
         self._doLayout()
-        
+
         # bindings
-        self.Bind(wx.EVT_BUTTON, self.OnHelp,             self.btnHelp)
-        self.selectionInput.Bind(wx.EVT_TEXT,             self.OnSelectionInput)
-        self.Bind(wx.EVT_BUTTON, self.OnCancel,           self.btnCancel)
-        self.Bind(wx.EVT_BUTTON, self.OnApply,            self.btnApply)
-        self.Bind(wx.EVT_BUTTON, self.OnOK,               self.btnOK)
+        self.Bind(wx.EVT_BUTTON, self.OnHelp, self.btnHelp)
+        self.selectionInput.Bind(wx.EVT_TEXT, self.OnSelectionInput)
+        self.Bind(wx.EVT_BUTTON, self.OnCancel, self.btnCancel)
+        self.Bind(wx.EVT_BUTTON, self.OnApply, self.btnApply)
+        self.Bind(wx.EVT_BUTTON, self.OnOK, self.btnOK)
         self.Bind(wx.EVT_BUTTON, self.OnLoadDefaultTable, self.btnDefault)
-        
-        self.Bind(wx.EVT_CLOSE,  self.OnCloseWindow)
-       
+
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+
         self.Bind(wx.EVT_BUTTON, self.OnPreview, self.btnPreview)
-        
+
     def _initLayer(self):
         """Set initial layer when opening dialog"""
         # set map layer from layer tree, first selected,
         # if not the right type, than select another
         try:
             sel = self.layerTree.layer_selected
-            if sel and self.layerTree.GetLayerInfo(sel, key = 'type') == self.mapType:
+            if sel and self.layerTree.GetLayerInfo(
+                    sel, key='type') == self.mapType:
                 layer = sel
             else:
-                layer = self.layerTree.FindItemByData(key = 'type', value = self.mapType)
+                layer = self.layerTree.FindItemByData(
+                    key='type', value=self.mapType)
         except:
             layer = None
         if layer:
-            mapLayer = self.layerTree.GetLayerInfo(layer, key = 'maplayer')
+            mapLayer = self.layerTree.GetLayerInfo(layer, key='maplayer')
             name = mapLayer.GetName()
             type = mapLayer.GetType()
             self.selectionInput.SetValue(name)
             self.inmap = name
-    
+
     def _createMapSelection(self, parent):
         """Create map selection part of dialog"""
         # top controls
@@ -383,161 +412,190 @@ class ColorTable(wx.Frame):
             maplabel = _('Select raster map:')
         else:
             maplabel = _('Select vector map:')
-        inputBox = wx.StaticBox(parent, id = wx.ID_ANY,
-                                label = " %s " % maplabel)
+        inputBox = wx.StaticBox(parent, id=wx.ID_ANY,
+                                label=" %s " % maplabel)
         inputSizer = wx.StaticBoxSizer(inputBox, wx.VERTICAL)
 
-        self.selectionInput = Select(parent = parent, id = wx.ID_ANY,
-                                     size = globalvar.DIALOG_GSELECT_SIZE,
-                                     type = self.mapType)
+        self.selectionInput = Select(parent=parent, id=wx.ID_ANY,
+                                     size=globalvar.DIALOG_GSELECT_SIZE,
+                                     type=self.mapType)
         # layout
-        inputSizer.Add(item = self.selectionInput,
-                       flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border = 5)
-        
+        inputSizer.Add(
+            item=self.selectionInput,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND,
+            border=5)
+
         return inputSizer
-    
+
     def _createFileSelection(self, parent):
         """Create file (open/save rules) selection part of dialog"""
-        inputBox = wx.StaticBox(parent, id = wx.ID_ANY,
-                                label = " %s " % _("Import or export color table:"))
+        inputBox = wx.StaticBox(
+            parent, id=wx.ID_ANY, label=" %s " %
+            _("Import or export color table:"))
         inputSizer = wx.StaticBoxSizer(inputBox, wx.HORIZONTAL)
-        
-        self.loadRules = filebrowse.FileBrowseButton(parent = parent, id = wx.ID_ANY, fileMask = '*',
-                                                     labelText = '',
-                                                     dialogTitle = _('Choose file to load color table'),
-                                                     buttonText = _('Load'),
-                                                     toolTip = _("Type filename or click to choose "
-                                                                 "file and load color table"),
-                                                     startDirectory = os.getcwd(), fileMode = wx.FD_OPEN,
-                                                     changeCallback = self.OnLoadRulesFile)
-        self.saveRules = filebrowse.FileBrowseButton(parent = parent, id = wx.ID_ANY, fileMask = '*',
-                                                     labelText = '',
-                                                     dialogTitle = _('Choose file to save color table'),
-                                                     toolTip = _("Type filename or click to choose "
-                                                                 "file and save color table"),
-                                                     buttonText = _('Save'),
-                                                     startDirectory = os.getcwd(), fileMode = wx.FD_SAVE,
-                                                     changeCallback = self.OnSaveRulesFile)
-
-        colorTable = ColorTablesComboBox(parent = parent, size=globalvar.DIALOG_COMBOBOX_SIZE,
-                               choices = utils.GetColorTables(), name="colorTableChoice")
-        self.btnSet = wx.Button(parent = parent, id = wx.ID_ANY, label = _("&Set"), name = 'btnSet')
+
+        self.loadRules = filebrowse.FileBrowseButton(
+            parent=parent, id=wx.ID_ANY, fileMask='*', labelText='',
+            dialogTitle=_('Choose file to load color table'),
+            buttonText=_('Load'),
+            toolTip=_(
+                "Type filename or click to choose "
+                "file and load color table"),
+            startDirectory=os.getcwd(),
+            fileMode=wx.FD_OPEN, changeCallback=self.OnLoadRulesFile)
+        self.saveRules = filebrowse.FileBrowseButton(
+            parent=parent, id=wx.ID_ANY, fileMask='*', labelText='',
+            dialogTitle=_('Choose file to save color table'),
+            toolTip=_(
+                "Type filename or click to choose "
+                "file and save color table"),
+            buttonText=_('Save'),
+            startDirectory=os.getcwd(),
+            fileMode=wx.FD_SAVE, changeCallback=self.OnSaveRulesFile)
+
+        colorTable = ColorTablesComboBox(
+            parent=parent,
+            size=globalvar.DIALOG_COMBOBOX_SIZE,
+            choices=utils.GetColorTables(),
+            name="colorTableChoice")
+        self.btnSet = wx.Button(
+            parent=parent,
+            id=wx.ID_ANY,
+            label=_("&Set"),
+            name='btnSet')
         self.btnSet.Bind(wx.EVT_BUTTON, self.OnSetTable)
         self.btnSet.Enable(False)
-        
+
         # layout
-        gridSizer =  wx.GridBagSizer(hgap = 2, vgap = 2)
-        
-        gridSizer.Add(item = wx.StaticText(parent, label = _("Load color table:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = colorTable, pos = (0, 1))
-        gridSizer.Add(item = self.btnSet, pos = (0, 2), flag = wx.ALIGN_RIGHT)
-        gridSizer.Add(item = wx.StaticText(parent, label = _('Load color table from file:')),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.loadRules, pos = (1, 1), span = (1, 2), flag = wx.EXPAND)
-        gridSizer.Add(item = wx.StaticText(parent, label = _('Save color table to file:')),
-                      pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.saveRules, pos = (2, 1), span = (1, 2), flag = wx.EXPAND)
-        
+        gridSizer = wx.GridBagSizer(hgap=2, vgap=2)
+
+        gridSizer.Add(item=wx.StaticText(parent, label=_("Load color table:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=colorTable, pos=(0, 1))
+        gridSizer.Add(item=self.btnSet, pos=(0, 2), flag=wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent, label=_('Load color table from file:')), pos=(
+                1, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.loadRules, pos=(
+                1, 1), span=(
+                1, 2), flag=wx.EXPAND)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent, label=_('Save color table to file:')), pos=(
+                2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.saveRules, pos=(
+                2, 1), span=(
+                1, 2), flag=wx.EXPAND)
+
         gridSizer.AddGrowableCol(1)
-        inputSizer.Add(gridSizer, proportion = 1, flag = wx.EXPAND | wx.ALL,
-                       border = 5)
-        
+        inputSizer.Add(gridSizer, proportion=1, flag=wx.EXPAND | wx.ALL,
+                       border=5)
+
         if self.mapType == 'vector':
             # parent is collapsible pane
             parent.SetSizer(inputSizer)
-        
-        return inputSizer   
-         
+
+        return inputSizer
+
     def _createPreview(self, parent):
         """Create preview"""
         # initialize preview display
         self.InitDisplay()
-        self.preview = BufferedWindow(parent, id = wx.ID_ANY, size = (400, 300),
-                                      Map = self.Map)
+        self.preview = BufferedWindow(parent, id=wx.ID_ANY, size=(400, 300),
+                                      Map=self.Map)
         self.preview.EraseMap()
-        
+
     def _createButtons(self, parent):
         """Create buttons for leaving dialog"""
-        self.btnHelp    = wx.Button(parent, id = wx.ID_HELP)
-        self.btnCancel  = wx.Button(parent, id = wx.ID_CANCEL)
-        self.btnApply   = wx.Button(parent, id = wx.ID_APPLY) 
-        self.btnOK      = wx.Button(parent, id = wx.ID_OK)
-        self.btnDefault = wx.Button(parent, id = wx.ID_ANY,
-                                    label = _("Reload default table"))
-        
+        self.btnHelp = wx.Button(parent, id=wx.ID_HELP)
+        self.btnCancel = wx.Button(parent, id=wx.ID_CANCEL)
+        self.btnApply = wx.Button(parent, id=wx.ID_APPLY)
+        self.btnOK = wx.Button(parent, id=wx.ID_OK)
+        self.btnDefault = wx.Button(parent, id=wx.ID_ANY,
+                                    label=_("Reload default table"))
+
         self.btnOK.SetDefault()
         self.btnOK.Enable(False)
         self.btnApply.Enable(False)
         self.btnDefault.Enable(False)
-        
+
         # layout
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(wx.Size(-1, -1), proportion = 1)
+        btnSizer.Add(wx.Size(-1, -1), proportion=1)
         btnSizer.Add(self.btnDefault,
-                     flag = wx.LEFT | wx.RIGHT, border = 5)
+                     flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(self.btnHelp,
-                     flag = wx.LEFT | wx.RIGHT, border = 5)
+                     flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(self.btnCancel,
-                     flag = wx.LEFT | wx.RIGHT, border = 5)
+                     flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(self.btnApply,
-                     flag = wx.LEFT | wx.RIGHT, border = 5)
+                     flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(self.btnOK,
-                     flag = wx.LEFT | wx.RIGHT, border = 5)
-        
+                     flag=wx.LEFT | wx.RIGHT, border=5)
+
         return btnSizer
-    
+
     def _createBody(self, parent):
         """Create dialog body consisting of rules and preview"""
-        bodySizer =  wx.GridBagSizer(hgap = 5, vgap = 5)
+        bodySizer = wx.GridBagSizer(hgap=5, vgap=5)
 
         row = 0
         # label with range
-        self.cr_label = wx.StaticText(parent, id = wx.ID_ANY)
-        bodySizer.Add(item = self.cr_label, pos = (row, 0), span = (1, 3),
-                      flag = wx.ALL, border = 5)
+        self.cr_label = wx.StaticText(parent, id=wx.ID_ANY)
+        bodySizer.Add(item=self.cr_label, pos=(row, 0), span=(1, 3),
+                      flag=wx.ALL, border=5)
 
         row += 1
         # color table
-        self.rulesPanel = RulesPanel(parent = parent, mapType = self.mapType,
-                                     attributeType = self.attributeType, properties = self.properties)
-        
-        bodySizer.Add(item = self.rulesPanel.mainPanel, pos = (row, 0),
-                      span = (1, 2), flag = wx.EXPAND)
+        self.rulesPanel = RulesPanel(
+            parent=parent,
+            mapType=self.mapType,
+            attributeType=self.attributeType,
+            properties=self.properties)
+
+        bodySizer.Add(item=self.rulesPanel.mainPanel, pos=(row, 0),
+                      span=(1, 2), flag=wx.EXPAND)
         # add two rules as default
         self.rulesPanel.AddRules(2)
-        
+
         # preview window
-        self._createPreview(parent = parent)
-        bodySizer.Add(item = self.preview, pos = (row, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER)
-        
+        self._createPreview(parent=parent)
+        bodySizer.Add(item=self.preview, pos=(row, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_CENTER)
+
         row += 1
         # add ckeck all and clear all
-        bodySizer.Add(item = self.rulesPanel.checkAll, flag = wx.ALIGN_CENTER_VERTICAL, 
-                      pos = (row, 0))
-        bodySizer.Add(item = self.rulesPanel.clearAll, pos = (row, 1))
-        
+        bodySizer.Add(
+            item=self.rulesPanel.checkAll,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        bodySizer.Add(item=self.rulesPanel.clearAll, pos=(row, 1))
+
         # preview button
-        self.btnPreview = wx.Button(parent, id = wx.ID_ANY,
-                                    label = _("Preview"))
-        bodySizer.Add(item = self.btnPreview, pos = (row, 2),
-                      flag = wx.ALIGN_RIGHT)
+        self.btnPreview = wx.Button(parent, id=wx.ID_ANY,
+                                    label=_("Preview"))
+        bodySizer.Add(item=self.btnPreview, pos=(row, 2),
+                      flag=wx.ALIGN_RIGHT)
         self.btnPreview.Enable(False)
-        self.btnPreview.SetToolTipString(_("Show preview of map "
-                                           "(current Map Display extent is used)."))
-        
-        row +=1
+        self.btnPreview.SetToolTipString(
+            _("Show preview of map " "(current Map Display extent is used)."))
+
+        row += 1
         # add rules button and spin to sizer
-        bodySizer.Add(item = self.rulesPanel.numRules, pos = (row, 0),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        bodySizer.Add(item = self.rulesPanel.btnAdd, pos = (row, 1))
-        
+        bodySizer.Add(item=self.rulesPanel.numRules, pos=(row, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        bodySizer.Add(item=self.rulesPanel.btnAdd, pos=(row, 1))
+
         bodySizer.AddGrowableRow(1)
         bodySizer.AddGrowableCol(2)
 
-        return bodySizer    
-        
+        return bodySizer
+
     def InitDisplay(self):
         """Initialize preview display, set dimensions and region
         """
@@ -549,144 +607,158 @@ class ColorTable(wx.Frame):
         """Window closed
         """
         self.OnCancel(event)
-          
+
     def OnApply(self, event):
         """Apply selected color table
-        
+
         :return: True on success otherwise False
         """
         ret = self.CreateColorTable()
         if not ret:
-            GMessage(parent = self, message = _("No valid color rules given."))
+            GMessage(parent=self, message=_("No valid color rules given."))
         else:
             # re-render preview and current map window
             self.OnPreview(None)
             display = self.layerTree.GetMapDisplay()
             if display and display.IsAutoRendered():
-                display.GetWindow().UpdateMap(render = True)
-        
+                display.GetWindow().UpdateMap(render=True)
+
         return ret
 
     def OnOK(self, event):
         """Apply selected color table and close the dialog"""
         if self.OnApply(event):
             self.OnCancel(event)
-    
+
     def OnCancel(self, event):
         """Do not apply any changes, remove associated
             rendered images and close the dialog"""
         self.Map.Clean()
         self.Destroy()
-        
+
     def OnSetTable(self, event):
         """Load pre-defined color table"""
         ct = self.FindWindowByName("colorTableChoice").GetValue()
         # save original color table
-        ctOriginal = RunCommand('r.colors.out', read = True, map = self.inmap, rules = '-')
+        ctOriginal = RunCommand(
+            'r.colors.out',
+            read=True,
+            map=self.inmap,
+            rules='-')
         # set new color table
-        ret, err = RunCommand('r.colors', map = self.inmap, color = ct, getErrorMsg = True)
+        ret, err = RunCommand('r.colors', map=self.inmap,
+                              color=ct, getErrorMsg=True)
         if ret != 0:
-            GError(err, parent = self)
+            GError(err, parent=self)
             return
-        ctNew = RunCommand('r.colors.out', read = True, map = self.inmap, rules = '-')
+        ctNew = RunCommand(
+            'r.colors.out',
+            read=True,
+            map=self.inmap,
+            rules='-')
         # restore original table
-        RunCommand('r.colors', map = self.inmap, rules = '-', stdin = ctOriginal)
+        RunCommand('r.colors', map=self.inmap, rules='-', stdin=ctOriginal)
         # load color table
         self.rulesPanel.Clear()
-        self.ReadColorTable(ctable = ctNew)
+        self.ReadColorTable(ctable=ctNew)
 
     def OnSaveRulesFile(self, event):
         """Save color table to file"""
         path = event.GetString()
         if not path:
             return
-        
+
         if os.path.exists(path):
-            dlgOw = wx.MessageDialog(parent,
-                                     message = _("File <%s> already already exists. "
-                                                 "Do you want to overwrite it?") % path,
-                                     caption = _("Overwrite?"),
-                                     style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlgOw = wx.MessageDialog(
+                parent,
+                message=_(
+                    "File <%s> already already exists. "
+                    "Do you want to overwrite it?") %
+                path,
+                caption=_("Overwrite?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
             if dlgOw.ShowModal() != wx.ID_YES:
                 return
-        
-        rulestxt = ''   
+
+        rulestxt = ''
         for rule in self.rulesPanel.ruleslines.itervalues():
             if 'value' not in rule:
                 continue
             rulestxt += rule['value'] + ' ' + rule['color'] + '\n'
         if not rulestxt:
-            GMessage(message = _("Nothing to save."),
-                     parent = self)
+            GMessage(message=_("Nothing to save."),
+                     parent=self)
             return
-        
+
         fd = open(path, 'w')
         fd.write(rulestxt)
-        fd.close()            
-         
+        fd.close()
+
     def OnLoadRulesFile(self, event):
         """Load color table from file"""
         path = event.GetString()
         if not os.path.exists(path):
             return
-        
+
         self.rulesPanel.Clear()
-        
+
         fd = open(path, 'r')
-        self.ReadColorTable(ctable = fd.read())
+        self.ReadColorTable(ctable=fd.read())
         fd.close()
-        
+
     def ReadColorTable(self, ctable):
         """Read color table
-        
+
         :param table: color table in format coming from r.colors.out"""
-        
+
         rulesNumber = len(ctable.splitlines())
         self.rulesPanel.AddRules(rulesNumber)
-        
+
         minim = maxim = count = 0
         for line in ctable.splitlines():
             try:
                 value, color = map(lambda x: x.strip(), line.split(' '))
             except ValueError:
-                GMessage(parent = self, message = _("Invalid color table format"))
+                GMessage(parent=self, message=_("Invalid color table format"))
                 self.rulesPanel.Clear()
                 return
-            
+
             self.rulesPanel.ruleslines[count]['value'] = value
             self.rulesPanel.ruleslines[count]['color'] = color
-            self.rulesPanel.mainPanel.FindWindowById(count + 1000).SetValue(value)
+            self.rulesPanel.mainPanel.FindWindowById(
+                count + 1000).SetValue(value)
             rgb = list()
             for c in color.split(':'):
                 rgb.append(int(c))
-            self.rulesPanel.mainPanel.FindWindowById(count + 2000).SetColour(rgb)
+            self.rulesPanel.mainPanel.FindWindowById(
+                count + 2000).SetColour(rgb)
             # range
             try:
                 if float(value) < minim:
                     minim = float(value)
                 if float(value) > maxim:
                     maxim = float(value)
-            except ValueError: # nv, default
+            except ValueError:  # nv, default
                 pass
             count += 1
-        
+
         if self.mapType == 'vector':
             # raster min, max is known from r.info
             self.properties['min'], self.properties['max'] = minim, maxim
             self.SetRangeLabel()
-            
-        self.OnPreview(tmp = True)  
-         
+
+        self.OnPreview(tmp=True)
+
     def OnLoadDefaultTable(self, event):
         """Load internal color table"""
         self.LoadTable()
-        
-    def LoadTable(self, mapType = 'raster'):
+
+    def LoadTable(self, mapType='raster'):
         """Load current color table (using `r(v).colors.out`)
-        
+
         :param mapType: map type (raster or vector)"""
         self.rulesPanel.Clear()
-        
+
         if mapType == 'raster':
             cmd = ['r.colors.out',
                    'read=True',
@@ -697,89 +769,97 @@ class ColorTable(wx.Frame):
                    'read=True',
                    'map=%s' % self.inmap,
                    'rules=-']
-            
-            if self.properties['sourceColumn'] and self.properties['sourceColumn'] != 'cat':
+
+            if self.properties['sourceColumn'] and self.properties[
+                    'sourceColumn'] != 'cat':
                 cmd.append('column=%s' % self.properties['sourceColumn'])
-            
-        cmd = utils.CmdToTuple(cmd)
-        
+
+        cmd = cmdlist_to_tuple(cmd)
+
         if self.inmap:
             ctable = RunCommand(cmd[0], **cmd[1])
         else:
             self.OnPreview()
             return
-        
-        self.ReadColorTable(ctable = ctable)     
-    
-    def CreateColorTable(self, tmp = False):
+
+        self.ReadColorTable(ctable=ctable)
+
+    def CreateColorTable(self, tmp=False):
         """Creates color table
 
         :return: True on success
         :return: False on failure
         """
         rulestxt = ''
-        
+
         for rule in self.rulesPanel.ruleslines.itervalues():
-            if 'value' not in rule: # skip empty rules
+            if 'value' not in rule:  # skip empty rules
                 continue
-            
+
             if rule['value'] not in ('nv', 'default') and \
                     rule['value'][-1] != '%' and \
                     not self._IsNumber(rule['value']):
-                GError(_("Invalid rule value '%s'. Unable to apply color table.") % rule['value'],
-                       parent = self)
+                GError(
+                    _("Invalid rule value '%s'. Unable to apply color table.") %
+                    rule['value'], parent=self)
                 return False
-            
+
             rulestxt += rule['value'] + ' ' + rule['color'] + '\n'
-           
+
         if not rulestxt:
             return False
-        
+
         gtemp = utils.GetTempfile()
         output = open(gtemp, "w")
         try:
             output.write(rulestxt)
         finally:
             output.close()
-        
-        cmd = ['%s.colors' % self.mapType[0], #r.colors/v.colors
-                'map=%s' % self.inmap,
-                'rules=%s' % gtemp]
+
+        cmd = ['%s.colors' % self.mapType[0],  # r.colors/v.colors
+               'map=%s' % self.inmap,
+               'rules=%s' % gtemp]
         if self.mapType == 'vector' and self.properties['sourceColumn'] \
                 and self.properties['sourceColumn'] != 'cat':
             cmd.append('column=%s' % self.properties['sourceColumn'])
-        cmd = utils.CmdToTuple(cmd)
-        ret = RunCommand(cmd[0], **cmd[1])               
+
+        cmd = cmdlist_to_tuple(cmd)
+        ret = RunCommand(cmd[0], **cmd[1])
         if ret != 0:
             return False
-        
+
         return True
-    
+
     def DoPreview(self, ltype, cmdlist):
         """Update preview (based on computational region)"""
-        
+
         if not self.layer:
-            self.layer = self.Map.AddLayer(ltype = ltype, name = 'preview', command = cmdlist,
-                                           active = True, hidden = False, opacity = 1.0,
-                                           render = False) 
+            self.layer = self.Map.AddLayer(
+                ltype=ltype,
+                name='preview',
+                command=cmdlist,
+                active=True,
+                hidden=False,
+                opacity=1.0,
+                render=False)
         else:
             self.layer.SetCmd(cmdlist)
-        
+
         # apply new color table and display preview
-        self.CreateColorTable(tmp = True)
+        self.CreateColorTable(tmp=True)
         self.preview.UpdatePreview()
-        
+
     def RunHelp(self, cmd):
         """Show GRASS manual page"""
         RunCommand('g.manual',
-                   quiet = True,
-                   parent = self,
-                   entry = cmd)
+                   quiet=True,
+                   parent=self,
+                   entry=cmd)
 
     def SetMap(self, name):
         """Set map name and update dialog"""
         self.selectionInput.SetValue(name)
-        
+
     def _IsNumber(self, s):
         """Check if 's' is a number"""
         try:
@@ -787,88 +867,91 @@ class ColorTable(wx.Frame):
             return True
         except ValueError:
             return False
-        
+
+
 class RasterColorTable(ColorTable):
+
     def __init__(self, parent, **kwargs):
         """Dialog for interactively entering color rules for raster maps"""
 
         self.mapType = 'raster'
-        self.attributeType = 'color' 
-        self.colorTable = True 
+        self.attributeType = 'color'
+        self.colorTable = True
         # raster properties
         self.properties = {
             # min cat in raster map
-            'min' : None,
+            'min': None,
             # max cat in raster map
-            'max' : None,
-            }        
-        
-        ColorTable.__init__(self, parent,
-                            title = _('Create new color table for raster map'), **kwargs)
-        
+            'max': None,
+        }
+
+        ColorTable.__init__(self, parent, title=_(
+            'Create new color table for raster map'), **kwargs)
+
         self._initLayer()
-        
-        # self.SetMinSize(self.GetSize()) 
+        self.Map.GetRenderMgr().renderDone.connect(self._restoreColorTable)
+
+        # self.SetMinSize(self.GetSize())
         self.SetMinSize((650, 700))
-                
+
     def _doLayout(self):
         """Do main layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
         #
         # map selection
         #
-        mapSelection = self._createMapSelection(parent = self.panel)
-        sizer.Add(item = mapSelection, proportion = 0,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
+        mapSelection = self._createMapSelection(parent=self.panel)
+        sizer.Add(item=mapSelection, proportion=0,
+                  flag=wx.ALL | wx.EXPAND, border=5)
         #
         # manage extern tables
         #
-        fileSelection = self._createFileSelection(parent = self.panel)
-        sizer.Add(item = fileSelection, proportion = 0,
-                  flag = wx.LEFT | wx.RIGHT | wx.EXPAND, border = 5)
+        fileSelection = self._createFileSelection(parent=self.panel)
+        sizer.Add(item=fileSelection, proportion=0,
+                  flag=wx.LEFT | wx.RIGHT | wx.EXPAND, border=5)
         #
         # body & preview
         #
-        bodySizer = self._createBody(parent = self.panel)
-        sizer.Add(item = bodySizer, proportion = 1,
-                  flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+        bodySizer = self._createBody(parent=self.panel)
+        sizer.Add(item=bodySizer, proportion=1,
+                  flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
         #
         # buttons
         #
-        btnSizer = self._createButtons(parent = self.panel)
-        sizer.Add(item = wx.StaticLine(parent = self.panel, id = wx.ID_ANY,
-                                       style = wx.LI_HORIZONTAL), proportion = 0,
-                                       flag = wx.EXPAND | wx.ALL, border = 5) 
-        
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
-        
+        btnSizer = self._createButtons(parent=self.panel)
+        sizer.Add(item=wx.StaticLine(parent=self.panel, id=wx.ID_ANY,
+                                     style=wx.LI_HORIZONTAL), proportion=0,
+                  flag=wx.EXPAND | wx.ALL, border=5)
+
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALL | wx.ALIGN_RIGHT, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Layout()
         sizer.Fit(self.panel)
         self.Layout()
-    
+
     def OnSelectionInput(self, event):
         """Raster map selected"""
         if event:
             self.inmap = event.GetString()
-        
+
         self.loadRules.SetValue('')
         self.saveRules.SetValue('')
-        
+
         if self.inmap:
-            if not grass.find_file(name = self.inmap, element = 'cell')['file']:
+            if not grass.find_file(name=self.inmap, element='cell')['file']:
                 self.inmap = None
-        
+
         if not self.inmap:
             for btn in (self.btnPreview, self.btnOK,
                         self.btnApply, self.btnDefault, self.btnSet):
                 btn.Enable(False)
             self.LoadTable()
             return
-        
-        info = grass.raster_info(map = self.inmap)
-        
+
+        info = grass.raster_info(map=self.inmap)
+
         if info:
             self.properties['min'] = info['min']
             self.properties['max'] = info['max']
@@ -880,74 +963,85 @@ class RasterColorTable(ColorTable):
                         self.btnApply, self.btnDefault, self.btnSet):
                 btn.Enable(False)
             self.preview.EraseMap()
-            self.cr_label.SetLabel(_('Enter raster category values or percents'))
+            self.cr_label.SetLabel(
+                _('Enter raster category values or percents'))
             return
-        
+
         if info['datatype'] == 'CELL':
             mapRange = _('range')
         else:
             mapRange = _('fp range')
-        self.cr_label.SetLabel(_('Enter raster category values or percents (%(range)s = %(min)d-%(max)d)') %
-                                 { 'range' : mapRange,
-                                   'min' : self.properties['min'],
-                                   'max' : self.properties['max'] })                       
-        
+        self.cr_label.SetLabel(
+            _('Enter raster category values or percents (%(range)s = %(min)d-%(max)d)') %
+            {
+                'range': mapRange,
+                'min': self.properties['min'],
+                'max': self.properties['max']})
+
         for btn in (self.btnPreview, self.btnOK,
                     self.btnApply, self.btnDefault, self.btnSet):
             btn.Enable()
-        
-    def OnPreview(self, tmp = True):
+
+    def OnPreview(self, tmp=True):
         """Update preview (based on computational region)"""
         if not self.inmap:
             self.preview.EraseMap()
             return
-        
+
         cmdlist = ['d.rast',
                    'map=%s' % self.inmap]
         ltype = 'raster'
-        
+
         # find existing color table and copy to temp file
         try:
             name, mapset = self.inmap.split('@')
         except ValueError:
             name = self.inmap
-            mapset = grass.find_file(self.inmap, element = 'cell')['mapset']
+            mapset = grass.find_file(self.inmap, element='cell')['mapset']
             if not mapset:
                 return
-        old_colrtable = None
+        self._tmp = tmp
+        self._old_colrtable = None
         if mapset == grass.gisenv()['MAPSET']:
-            old_colrtable = grass.find_file(name = name, element = 'colr')['file']
+            self._old_colrtable = grass.find_file(
+                name=name, element='colr')['file']
         else:
-            old_colrtable = grass.find_file(name = name, element = 'colr2/' + mapset)['file']
-        
-        if old_colrtable:
-            colrtemp = utils.GetTempfile()
-            shutil.copyfile(old_colrtable, colrtemp)
-            
-        ColorTable.DoPreview(self, ltype, cmdlist)  
-        
+            self._old_colrtable = grass.find_file(
+                name=name, element='colr2/' + mapset)['file']
+
+        if self._old_colrtable:
+            self._colrtemp = utils.GetTempfile()
+            shutil.copyfile(self._old_colrtable, self._colrtemp)
+
+        ColorTable.DoPreview(self, ltype, cmdlist)
+
+    def _restoreColorTable(self):
         # restore previous color table
-        if tmp:
-            if old_colrtable:
-                shutil.copyfile(colrtemp, old_colrtable)
-                os.remove(colrtemp)
+        if self._tmp:
+            if self._old_colrtable:
+                shutil.copyfile(self._colrtemp, self._old_colrtable)
+                os.remove(self._colrtemp)
+                del self._colrtemp, self._old_colrtable
             else:
                 RunCommand('r.colors',
-                           parent = self,
-                           flags = 'r',
-                           map = self.inmap)
-        
+                           parent=self,
+                           flags='r',
+                           map=self.inmap)
+            del self._tmp
+
     def OnHelp(self, event):
         """Show GRASS manual page"""
         cmd = 'r.colors'
-        ColorTable.RunHelp(self, cmd = cmd)
-                     
+        ColorTable.RunHelp(self, cmd=cmd)
+
+
 class VectorColorTable(ColorTable):
+
     def __init__(self, parent, attributeType, **kwargs):
         """Dialog for interactively entering color rules for vector maps"""
         # dialog attributes
         self.mapType = 'vector'
-        self.attributeType = attributeType # color, size, width
+        self.attributeType = attributeType  # color, size, width
         # in version 7 v.colors used, otherwise color column only
         self.version7 = int(grass.version()['version'].split('.')[0]) >= 7
         self.colorTable = False
@@ -955,28 +1049,38 @@ class VectorColorTable(ColorTable):
         # vector properties
         self.properties = {
             # vector layer for attribute table to use for setting color
-            'layer' : 1, 
-            # vector attribute table used for setting color         
-            'table' : '',
+            'layer': 1,
+            # vector attribute table used for setting color
+            'table': '',
             # vector attribute column for assigning colors
-            'sourceColumn' : '', 
+            'sourceColumn': '',
             # vector attribute column to use for loading colors
-            'loadColumn' : '',
+            'loadColumn': '',
             # vector attribute column to use for storing colors
-            'storeColumn' : '',    
-            # vector attribute column for temporary storing colors   
-            'tmpColumn' : 'tmp_0',
+            'storeColumn': '',
+            # vector attribute column for temporary storing colors
+            'tmpColumn': 'tmp_0',
             # min value of attribute column/vector color table
             'min': None,
-            # max value of attribute column/vector color table            
+            # max value of attribute column/vector color table
             'max': None
-            }     
-        self.columnsProp = {'color': {'name': 'GRASSRGB', 'type1': 'varchar(11)', 'type2': ['character']},
-                            'size' : {'name': 'GRASSSIZE', 'type1': 'integer', 'type2': ['integer']},
-                            'width': {'name': 'GRASSWIDTH', 'type1': 'integer', 'type2': ['integer']}}
-        ColorTable.__init__(self, parent = parent,
-                            title = _('Create new color rules for vector map'), **kwargs)
-        
+        }
+        self.columnsProp = {
+            'color': {
+                'name': 'GRASSRGB',
+                'type1': 'varchar(11)',
+                'type2': ['character']},
+            'size': {
+                'name': 'GRASSSIZE',
+                'type1': 'integer',
+                'type2': ['integer']},
+            'width': {
+                'name': 'GRASSWIDTH',
+                'type1': 'integer',
+                'type2': ['integer']}}
+        ColorTable.__init__(self, parent=parent, title=_(
+            'Create new color rules for vector map'), **kwargs)
+
         # additional bindings for vector color management
         self.Bind(wx.EVT_COMBOBOX, self.OnLayerSelection, self.layerSelect)
 
@@ -984,150 +1088,164 @@ class VectorColorTable(ColorTable):
         self.fromColumn.Bind(wx.EVT_TEXT, self.OnFromColSelection)
         self.toColumn.Bind(wx.EVT_TEXT, self.OnToColSelection)
         self.Bind(wx.EVT_BUTTON, self.OnAddColumn, self.addColumn)
-        
+
         self._initLayer()
         if self.colorTable:
-            self.cr_label.SetLabel(_("Enter vector attribute values or percents:"))
+            self.cr_label.SetLabel(
+                _("Enter vector attribute values or percents:"))
         else:
             self.cr_label.SetLabel(_("Enter vector attribute values:"))
-        
-        #self.SetMinSize(self.GetSize()) 
+
+        # self.SetMinSize(self.GetSize())
         self.SetMinSize((650, 700))
-        
+
         self.CentreOnScreen()
         self.Show()
-    
+
     def _createVectorAttrb(self, parent):
         """Create part of dialog with layer/column selection"""
-        inputBox = wx.StaticBox(parent = parent, id = wx.ID_ANY,
-                                label = " %s " % _("Select vector columns"))
-        cb_vl_label = wx.StaticText(parent, id = wx.ID_ANY,
-                                             label = _('Layer:'))
-        cb_vc_label = wx.StaticText(parent, id = wx.ID_ANY,
-                                         label = _('Attribute column:'))
-                                        
+        inputBox = wx.StaticBox(parent=parent, id=wx.ID_ANY,
+                                label=" %s " % _("Select vector columns"))
+        cb_vl_label = wx.StaticText(parent, id=wx.ID_ANY,
+                                    label=_('Layer:'))
+        cb_vc_label = wx.StaticText(parent, id=wx.ID_ANY,
+                                    label=_('Attribute column:'))
+
         if self.attributeType == 'color':
-            labels =  [_("Load color from column:"), _("Save color to column:")]
+            labels = [_("Load color from column:"), _("Save color to column:")]
         elif self.attributeType == 'size':
-            labels =  [_("Load size from column:"), _("Save size to column:")]
+            labels = [_("Load size from column:"), _("Save size to column:")]
         elif self.attributeType == 'width':
-            labels =  [_("Load width from column:"), _("Save width to column:")]
-            
+            labels = [_("Load width from column:"), _("Save width to column:")]
+
         if self.version7 and self.attributeType == 'color':
-            self.useColumn = wx.CheckBox(parent, id = wx.ID_ANY,
-                                  label = _("Use color column instead of color table:"))
+            self.useColumn = wx.CheckBox(
+                parent, id=wx.ID_ANY,
+                label=_("Use color column instead of color table:"))
             self.useColumn.Bind(wx.EVT_CHECKBOX, self.OnCheckColumn)
-        
-        fromColumnLabel = wx.StaticText(parent, id = wx.ID_ANY,
-                                            label = labels[0])
-        toColumnLabel = wx.StaticText(parent, id = wx.ID_ANY,
-                                            label = labels[1])
-                                                
-        self.rgb_range_label = wx.StaticText(parent, id = wx.ID_ANY)
+
+        fromColumnLabel = wx.StaticText(parent, id=wx.ID_ANY,
+                                        label=labels[0])
+        toColumnLabel = wx.StaticText(parent, id=wx.ID_ANY,
+                                      label=labels[1])
+
+        self.rgb_range_label = wx.StaticText(parent, id=wx.ID_ANY)
         self.layerSelect = LayerSelect(parent)
         self.sourceColumn = ColumnSelect(parent)
         self.fromColumn = ColumnSelect(parent)
         self.toColumn = ColumnSelect(parent)
-        self.addColumn = wx.Button(parent, id = wx.ID_ANY,
-                                             label = _('Add column'))
-        self.addColumn.SetToolTipString(_("Add GRASSRGB column to current attribute table."))
-        
+        self.addColumn = wx.Button(parent, id=wx.ID_ANY,
+                                   label=_('Add column'))
+        self.addColumn.SetToolTipString(
+            _("Add GRASSRGB column to current attribute table."))
+
         # layout
         inputSizer = wx.StaticBoxSizer(inputBox, wx.VERTICAL)
-        vSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+        vSizer = wx.GridBagSizer(hgap=5, vgap=5)
         row = 0
-        vSizer.Add(cb_vl_label, pos = (row, 0),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-        vSizer.Add(self.layerSelect,  pos = (row, 1),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(cb_vl_label, pos=(row, 0),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(self.layerSelect, pos=(row, 1),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        row += 1
+        vSizer.Add(cb_vc_label, pos=(row, 0),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(self.sourceColumn, pos=(row, 1),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(self.rgb_range_label, pos=(row, 2),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
         row += 1
-        vSizer.Add(cb_vc_label, pos = (row, 0),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-        vSizer.Add(self.sourceColumn, pos = (row, 1),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-        vSizer.Add(self.rgb_range_label, pos = (row, 2),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-        row += 1   
         if self.version7 and self.attributeType == 'color':
-            vSizer.Add(self.useColumn, pos = (row, 0), span = (1, 2),
-                       flag = wx.ALIGN_CENTER_VERTICAL)
+            vSizer.Add(self.useColumn, pos=(row, 0), span=(1, 2),
+                       flag=wx.ALIGN_CENTER_VERTICAL)
             row += 1
-            
-        vSizer.Add(fromColumnLabel, pos = (row, 0),
-                  flag = wx.ALIGN_CENTER_VERTICAL)
-        vSizer.Add(self.fromColumn, pos = (row, 1),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
+
+        vSizer.Add(fromColumnLabel, pos=(row, 0),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(self.fromColumn, pos=(row, 1),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
         row += 1
-        vSizer.Add(toColumnLabel, pos = (row, 0),
-                  flag = wx.ALIGN_CENTER_VERTICAL)
-        vSizer.Add(self.toColumn, pos = (row, 1),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-        vSizer.Add(self.addColumn, pos = (row, 2),
-                   flag = wx.ALIGN_CENTER_VERTICAL)
-        inputSizer.Add(item = vSizer,
-                       flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border = 5)
-        self.colorColumnSizer = vSizer        
-        return inputSizer 
-       
+        vSizer.Add(toColumnLabel, pos=(row, 0),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(self.toColumn, pos=(row, 1),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        vSizer.Add(self.addColumn, pos=(row, 2),
+                   flag=wx.ALIGN_CENTER_VERTICAL)
+        inputSizer.Add(
+            item=vSizer,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND,
+            border=5)
+        self.colorColumnSizer = vSizer
+        return inputSizer
+
     def _doLayout(self):
         """Do main layout"""
-        scrollPanel = scrolled.ScrolledPanel(parent = self.panel, id = wx.ID_ANY,
-                                             style = wx.TAB_TRAVERSAL)
+        scrollPanel = scrolled.ScrolledPanel(parent=self.panel, id=wx.ID_ANY,
+                                             style=wx.TAB_TRAVERSAL)
         scrollPanel.SetupScrolling()
         sizer = wx.BoxSizer(wx.VERTICAL)
         #
         # map selection
         #
-        mapSelection = self._createMapSelection(parent = scrollPanel)
-        sizer.Add(item = mapSelection, proportion = 0,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
+        mapSelection = self._createMapSelection(parent=scrollPanel)
+        sizer.Add(item=mapSelection, proportion=0,
+                  flag=wx.ALL | wx.EXPAND, border=5)
         #
         # manage extern tables
         #
         if self.version7 and self.attributeType == 'color':
-            self.cp = wx.CollapsiblePane(scrollPanel, label = _("Import or export color table"),
-                                         winid = wx.ID_ANY,
-                                        style = wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE)
-            self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged, self.cp)
-        
-            self._createFileSelection(parent = self.cp.GetPane())
-            sizer.Add(item = self.cp, proportion = 0,
-                      flag = wx.ALL | wx.EXPAND, border = 5)
+            self.cp = wx.CollapsiblePane(
+                scrollPanel,
+                label=_("Import or export color table"),
+                winid=wx.ID_ANY,
+                style=wx.CP_DEFAULT_STYLE | wx.CP_NO_TLW_RESIZE)
+            self.Bind(
+                wx.EVT_COLLAPSIBLEPANE_CHANGED,
+                self.OnPaneChanged,
+                self.cp)
+
+            self._createFileSelection(parent=self.cp.GetPane())
+            sizer.Add(item=self.cp, proportion=0,
+                      flag=wx.ALL | wx.EXPAND, border=5)
         #
         # set vector attributes
         #
-        vectorAttrb = self._createVectorAttrb(parent = scrollPanel)
-        sizer.Add(item = vectorAttrb, proportion = 0,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
+        vectorAttrb = self._createVectorAttrb(parent=scrollPanel)
+        sizer.Add(item=vectorAttrb, proportion=0,
+                  flag=wx.ALL | wx.EXPAND, border=5)
         #
         # body & preview
         #
-        bodySizer = self._createBody(parent = scrollPanel)
-        sizer.Add(item = bodySizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        bodySizer = self._createBody(parent=scrollPanel)
+        sizer.Add(item=bodySizer, proportion=1,
+                  flag=wx.ALL | wx.EXPAND, border=5)
+
         scrollPanel.SetSizer(sizer)
-        scrollPanel.Fit()        
-        
+        scrollPanel.Fit()
+
         #
         # buttons
         #
         btnSizer = self._createButtons(self.panel)
-        
+
         mainsizer = wx.BoxSizer(wx.VERTICAL)
-        mainsizer.Add(scrollPanel, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainsizer.Add(item = wx.StaticLine(parent = self.panel, id = wx.ID_ANY,
-                                       style = wx.LI_HORIZONTAL), proportion = 0,
-                                       flag = wx.EXPAND | wx.ALL, border = 5) 
-        mainsizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND, border = 5)
-        
+        mainsizer.Add(
+            scrollPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainsizer.Add(item=wx.StaticLine(parent=self.panel, id=wx.ID_ANY,
+                                         style=wx.LI_HORIZONTAL), proportion=0,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+        mainsizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.ALL | wx.ALIGN_RIGHT | wx.EXPAND, border=5)
+
         self.panel.SetSizer(mainsizer)
         mainsizer.Layout()
-        mainsizer.Fit(self.panel)     
+        mainsizer.Fit(self.panel)
         self.Layout()
-        
-    def OnPaneChanged(self, event = None):
+
+    def OnPaneChanged(self, event=None):
         # redo the layout
         self.Layout()
         # and also change the labels
@@ -1135,29 +1253,32 @@ class VectorColorTable(ColorTable):
             self.cp.SetLabel('')
         else:
             self.cp.SetLabel(_("Import or export color table"))
-        
+
     def CheckMapset(self):
         """Check if current vector is in current mapset"""
-        if grass.find_file(name = self.inmap,
-                           element = 'vector')['mapset'] == grass.gisenv()['MAPSET']:
+        if grass.find_file(name=self.inmap, element='vector')[
+                'mapset'] == grass.gisenv()['MAPSET']:
             return True
         else:
-            return False 
-         
+            return False
+
     def NoConnection(self, vectorName):
-        dlg = wx.MessageDialog(parent = self,
-                                message = _("Database connection for vector map <%s> "
-                                            "is not defined in DB file.  Do you want to create and "
-                                            "connect new attribute table?") % vectorName,
-                                caption = _("No database connection defined"),
-                                style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+        dlg = wx.MessageDialog(
+            parent=self,
+            message=_(
+                "Database connection for vector map <%s> "
+                "is not defined in DB file.  Do you want to create and "
+                "connect new attribute table?") %
+            vectorName,
+            caption=_("No database connection defined"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
         if dlg.ShowModal() == wx.ID_YES:
             dlg.Destroy()
-            GUI(parent = self).ParseCommand(['v.db.addtable', 'map=' + self.inmap], 
-                                            completed = (self.CreateAttrTable, self.inmap, ''))
+            GUI(parent=self).ParseCommand(['v.db.addtable', 'map=' + self.inmap],
+                                          completed=(self.CreateAttrTable, self.inmap, ''))
         else:
             dlg.Destroy()
-  
+
     def OnCheckColumn(self, event):
         """Use color column instead of color table"""
         if self.useColumn.GetValue():
@@ -1166,7 +1287,7 @@ class VectorColorTable(ColorTable):
             self.fromColumn.Enable(True)
             self.toColumn.Enable(True)
             self.colorTable = False
-            
+
             if self.properties['loadColumn']:
                 self.LoadTable()
             else:
@@ -1178,12 +1299,12 @@ class VectorColorTable(ColorTable):
             self.toColumn.Enable(False)
             self.colorTable = True
             self.LoadTable()
-            
+
     def EnableVectorAttributes(self, enable):
         """Enable/disable part of dialog connected with db"""
         for child in self.colorColumnSizer.GetChildren():
             child.GetWindow().Enable(enable)
-    
+
     def DisableClearAll(self):
         """Enable, disable the whole dialog"""
         self.rulesPanel.Clear()
@@ -1192,7 +1313,7 @@ class VectorColorTable(ColorTable):
         self.btnOK.Enable(False)
         self.btnApply.Enable(False)
         self.preview.EraseMap()
-        
+
     def OnSelectionInput(self, event):
         """Vector map selected"""
         if event:
@@ -1200,51 +1321,54 @@ class VectorColorTable(ColorTable):
                 # switch to another map -> delete temporary column
                 self.DeleteTemporaryColumn()
             self.inmap = event.GetString()
-            
-        if self.version7 and self.attributeType == 'color': 
+
+        if self.version7 and self.attributeType == 'color':
             self.loadRules.SetValue('')
             self.saveRules.SetValue('')
-        
+
         if self.inmap:
-            if not grass.find_file(name = self.inmap, element = 'vector')['file']:
+            if not grass.find_file(name=self.inmap, element='vector')['file']:
                 self.inmap = None
-        
+
         self.UpdateDialog()
-       
+
     def UpdateDialog(self):
         """Update dialog after map selection"""
-        
+
         if not self.inmap:
             self.DisableClearAll()
             return
-        
+
         if not self.CheckMapset():
             # v.colors doesn't need the map to be in current mapset
             if not (self.version7 and self.attributeType == 'color'):
-                message = _("Selected map <%(map)s> is not in current mapset <%(mapset)s>. "
-                            "Attribute table cannot be edited.") % \
-                            { 'map' : self.inmap,
-                              'mapset' : grass.gisenv()['MAPSET'] }
-                wx.CallAfter(GMessage, parent = self, message = message)
+                message = _(
+                    "Selected map <%(map)s> is not in current mapset <%(mapset)s>. "
+                    "Attribute table cannot be edited.") % {
+                    'map': self.inmap,
+                    'mapset': grass.gisenv()['MAPSET']}
+                wx.CallAfter(GMessage, parent=self, message=message)
                 self.DisableClearAll()
                 return
-                
+
         # check for db connection
         self.dbInfo = VectorDBInfo(self.inmap)
         enable = True
 
-        if not len(self.dbInfo.layers): # no connection
-            if not (self.version7 and self.attributeType == 'color'): # otherwise it doesn't matter
+        if not len(self.dbInfo.layers):  # no connection
+            if not (self.version7 and self.attributeType ==
+                    'color'):  # otherwise it doesn't matter
                 wx.CallAfter(self.NoConnection, self.inmap)
                 enable = False
-            for combo in (self.layerSelect, self.sourceColumn, self.fromColumn, self.toColumn):
+            for combo in (self.layerSelect, self.sourceColumn,
+                          self.fromColumn, self.toColumn):
                 combo.SetValue("")
                 combo.Clear()
             for prop in ('sourceColumn', 'loadColumn', 'storeColumn'):
                 self.properties[prop] = ''
             self.EnableVectorAttributes(False)
-        else: # db connection exist
-        # initialize layer selection combobox
+        else:  # db connection exist
+            # initialize layer selection combobox
             self.EnableVectorAttributes(True)
             self.layerSelect.InsertLayers(self.inmap)
             # initialize attribute table for layer=1
@@ -1252,85 +1376,95 @@ class VectorColorTable(ColorTable):
             self.layerSelect.SetStringSelection(self.properties['layer'])
             layer = int(self.properties['layer'])
             self.properties['table'] = self.dbInfo.layers[layer]['table']
-            
+
             if self.attributeType == 'color':
-                self.AddTemporaryColumn(type = 'varchar(11)')
+                self.AddTemporaryColumn(type='varchar(11)')
             else:
-                self.AddTemporaryColumn(type = 'integer')
-            
-            # initialize column selection comboboxes 
-            
-            self.OnLayerSelection(event = None)
+                self.AddTemporaryColumn(type='integer')
+
+            # initialize column selection comboboxes
+
+            self.OnLayerSelection(event=None)
 
         if self.version7 and self.attributeType == 'color':
             self.useColumn.SetValue(False)
-            self.OnCheckColumn(event = None) 
+            self.OnCheckColumn(event=None)
             self.useColumn.Enable(self.CheckMapset())
-                    
+
         self.LoadTable()
-            
+
         self.btnPreview.Enable(enable)
         self.btnOK.Enable(enable)
-        self.btnApply.Enable(enable)   
-    
+        self.btnApply.Enable(enable)
+
     def AddTemporaryColumn(self, type):
         """Add temporary column to not overwrite the original values,
         need to be deleted when closing dialog and unloading map
-        
+
         :param type: type of column (e.g. vachar(11))"""
         if not self.CheckMapset():
             return
         # because more than one dialog with the same map can be opened we must test column name and
         # create another one
-        while self.properties['tmpColumn'] in self.dbInfo.GetTableDesc(self.properties['table']).keys():
+        while self.properties['tmpColumn'] in self.dbInfo.GetTableDesc(self.properties[
+                                                                       'table']).keys():
             name, idx = self.properties['tmpColumn'].split('_')
             idx = int(idx)
             idx += 1
             self.properties['tmpColumn'] = name + '_' + str(idx)
-        
+
         if self.version7:
             modul = 'v.db.addcolumn'
         else:
             modul = 'v.db.addcol'
         ret = RunCommand(modul,
-                         parent = self,
-                         map = self.inmap,
-                         layer = self.properties['layer'],
-                         column = '%s %s' % (self.properties['tmpColumn'], type))
-        
+                         parent=self,
+                         map=self.inmap,
+                         layer=self.properties['layer'],
+                         column='%s %s' % (self.properties['tmpColumn'], type))
+
     def DeleteTemporaryColumn(self):
         """Delete temporary column"""
         if not self.CheckMapset():
             return
-        
+
         if self.inmap:
             if self.version7:
                 modul = 'v.db.dropcolumn'
             else:
                 modul = 'v.db.dropcol'
             ret = RunCommand(modul,
-                             map = self.inmap,
-                             layer = self.properties['layer'],
-                             column = self.properties['tmpColumn'])
-        
+                             map=self.inmap,
+                             layer=self.properties['layer'],
+                             column=self.properties['tmpColumn'])
+
     def OnLayerSelection(self, event):
         # reset choices in column selection comboboxes if layer changes
         vlayer = int(self.layerSelect.GetStringSelection())
-        self.sourceColumn.InsertColumns(vector = self.inmap, layer = vlayer,
-                                        type = ['integer', 'double precision'], dbInfo = self.dbInfo,
-                                        excludeCols = ['tmpColumn'])
+        self.sourceColumn.InsertColumns(
+            vector=self.inmap, layer=vlayer,
+            type=['integer', 'double precision'],
+            dbInfo=self.dbInfo, excludeCols=['tmpColumn'])
         self.sourceColumn.SetValue('cat')
         self.properties['sourceColumn'] = self.sourceColumn.GetValue()
-        
+
         if self.attributeType == 'color':
             type = ['character']
         else:
             type = ['integer']
-        self.fromColumn.InsertColumns(vector = self.inmap, layer = vlayer, type = type,
-                                      dbInfo = self.dbInfo, excludeCols = ['tmpColumn'])
-        self.toColumn.InsertColumns(vector = self.inmap, layer = vlayer, type = type,
-                                    dbInfo = self.dbInfo, excludeCols = ['tmpColumn'])
-        
+        self.fromColumn.InsertColumns(
+            vector=self.inmap,
+            layer=vlayer,
+            type=type,
+            dbInfo=self.dbInfo,
+            excludeCols=['tmpColumn'])
+        self.toColumn.InsertColumns(
+            vector=self.inmap,
+            layer=vlayer,
+            type=type,
+            dbInfo=self.dbInfo,
+            excludeCols=['tmpColumn'])
+
         v = self.columnsProp[self.attributeType]['name']
         found = False
         if v in self.fromColumn.GetColumns():
@@ -1344,135 +1478,143 @@ class VectorColorTable(ColorTable):
         else:
             self.properties['loadColumn'] = ''
             self.properties['storeColumn'] = ''
-        
+
         if event:
             self.LoadTable()
         self.Update()
-        
+
     def OnSourceColumnSelection(self, event):
         self.properties['sourceColumn'] = event.GetString()
-        
+
         self.LoadTable()
-    
+
     def OnAddColumn(self, event):
         """Add GRASS(RGB,SIZE,WIDTH) column if it doesn't exist"""
-        if self.columnsProp[self.attributeType]['name'] not in self.fromColumn.GetColumns():
+        if self.columnsProp[self.attributeType][
+                'name'] not in self.fromColumn.GetColumns():
             if self.version7:
                 modul = 'v.db.addcolumn'
             else:
                 modul = 'v.db.addcol'
-            ret = RunCommand(modul,
-                             map = self.inmap,
-                             layer = self.properties['layer'],
-                             columns = '%s %s' % (self.columnsProp[self.attributeType]['name'],
-                                                  self.columnsProp[self.attributeType]['type1']))
-            self.toColumn.InsertColumns(self.inmap, self.properties['layer'],
-                                        type = self.columnsProp[self.attributeType]['type2'])
-            self.toColumn.SetValue(self.columnsProp[self.attributeType]['name'])
+            ret = RunCommand(
+                modul, map=self.inmap, layer=self.properties['layer'], columns='%s %s' %
+                (self.columnsProp[
+                    self.attributeType]['name'], self.columnsProp[
+                    self.attributeType]['type1']))
+            self.toColumn.InsertColumns(
+                self.inmap,
+                self.properties['layer'],
+                type=self.columnsProp[
+                    self.attributeType]['type2'])
+            self.toColumn.SetValue(
+                self.columnsProp[
+                    self.attributeType]['name'])
             self.properties['storeColumn'] = self.toColumn.GetValue()
-            
+
             self.LoadTable()
         else:
-            GMessage(parent = self,
-                     message = _("%s column already exists.") % \
-                         self.columnsProp[self.attributeType]['name'])
-                        
+            GMessage(parent=self,
+                     message=_("%s column already exists.") %
+                     self.columnsProp[self.attributeType]['name'])
+
     def CreateAttrTable(self, dcmd, layer, params, propwin):
         """Create attribute table"""
         if dcmd:
-            cmd = utils.CmdToTuple(dcmd)
+            cmd = cmdlist_to_tuple(dcmd)
             ret = RunCommand(cmd[0], **cmd[1])
             if ret == 0:
                 self.OnSelectionInput(None)
                 return True
-            
-        for combo in (self.layerSelect, self.sourceColumn, self.fromColumn, self.toColumn):
+
+        for combo in (self.layerSelect, self.sourceColumn,
+                      self.fromColumn, self.toColumn):
             combo.SetValue("")
             combo.Disable()
-        return False    
-    
+        return False
+
     def LoadTable(self):
         """Load table"""
         if self.colorTable:
-            ColorTable.LoadTable(self, mapType = 'vector')
+            ColorTable.LoadTable(self, mapType='vector')
         else:
             self.LoadRulesFromColumn()
-            
+
     def LoadRulesFromColumn(self):
         """Load current column (GRASSRGB, size column)"""
-        
+
         self.rulesPanel.Clear()
         if not self.properties['sourceColumn']:
             self.preview.EraseMap()
             return
-        
-        busy = wx.BusyInfo(message = _("Please wait, loading data from attribute table..."),
-                           parent = self)
+
+        busy = wx.BusyInfo(
+            message=_("Please wait, loading data from attribute table..."),
+            parent=self)
         wx.Yield()
-        
+
         columns = self.properties['sourceColumn']
         if self.properties['loadColumn']:
             columns += ',' + self.properties['loadColumn']
-        
-        sep = ';'            
+
+        sep = ';'
         if self.inmap:
-            outFile = tempfile.NamedTemporaryFile(mode = 'w+b')
+            outFile = tempfile.NamedTemporaryFile(mode='w+b')
             ret = RunCommand('v.db.select',
-                             quiet = True,
-                             flags = 'c',
-                             map = self.inmap,
-                             layer = self.properties['layer'],
-                             columns = columns,
-                             sep = sep,
-                             stdout = outFile)
+                             quiet=True,
+                             flags='c',
+                             map=self.inmap,
+                             layer=self.properties['layer'],
+                             columns=columns,
+                             sep=sep,
+                             stdout=outFile)
         else:
             self.preview.EraseMap()
             busy.Destroy()
             return
-        
+
         outFile.seek(0)
         i = 0
         minim = maxim = 0.0
         limit = 1000
-        
+
         colvallist = []
         readvals = False
-        
+
         while True:
             # os.linesep doesn't work here (MSYS)
             record = outFile.readline().replace('\n', '')
             if not record:
                 break
             self.rulesPanel.ruleslines[i] = {}
-            
+
             if not self.properties['loadColumn']:
                 col1 = record
                 col2 = None
             else:
                 col1, col2 = record.split(sep)
-            
+
             if float(col1) < minim:
                 minim = float(col1)
             if float(col1) > maxim:
                 maxim = float(col1)
 
-                
-            # color rules list should only have unique values of col1, not all records
-            if col1 not in colvallist:                
+            # color rules list should only have unique values of col1, not all
+            # records
+            if col1 not in colvallist:
                 self.rulesPanel.ruleslines[i]['value'] = col1
                 self.rulesPanel.ruleslines[i][self.attributeType] = col2
 
-                colvallist.append(col1)            
+                colvallist.append(col1)
                 i += 1
-            
+
             if i > limit and readvals == False:
-                dlg = wx.MessageDialog (parent = self, message = _(
-                                        "Number of loaded records reached %d, "
-                                        "displaying all the records will be time-consuming "
-                                        "and may lead to computer freezing, "
-                                        "do you still want to continue?") % i,
-                                        caption = _("Too many records"),
-                                        style  =  wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+                dlg = wx.MessageDialog(parent=self, message=_(
+                    "Number of loaded records reached %d, "
+                    "displaying all the records will be time-consuming "
+                    "and may lead to computer freezing, "
+                    "do you still want to continue?") % i,
+                    caption=_("Too many records"),
+                    style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
                 if dlg.ShowModal() == wx.ID_YES:
                     readvals = True
                     dlg.Destroy()
@@ -1481,95 +1623,108 @@ class VectorColorTable(ColorTable):
                     dlg.Destroy()
                     self.updateColumn = False
                     return
-            
-        self.rulesPanel.AddRules(i, start = True)
+
+        self.rulesPanel.AddRules(i, start=True)
         ret = self.rulesPanel.LoadRules()
-        
+
         self.properties['min'], self.properties['max'] = minim, maxim
         self.SetRangeLabel()
-        
+
         if ret:
-            self.OnPreview()   
+            self.OnPreview()
         else:
             self.rulesPanel.Clear()
-    
+
         busy.Destroy()
-        
+
     def SetRangeLabel(self):
         """Set labels with info about attribute column range"""
-        
+
         if self.properties['sourceColumn']:
-            ctype = self.dbInfo.GetTableDesc(self.properties['table'])[self.properties['sourceColumn']]['ctype']
+            ctype = self.dbInfo.GetTableDesc(
+                self.properties['table'])[
+                self.properties['sourceColumn']]['ctype']
         else:
             ctype = int
-        
+
         range = ''
         if self.properties['min'] or self.properties['max']:
             if ctype == float:
                 range = "%s: %.1f - %.1f)" % (_("range"),
-                                              self.properties['min'], self.properties['max'])
+                                              self.properties['min'],
+                                              self.properties['max'])
             elif ctype == int:
                 range = "%s: %d - %d)" % (_("range"),
-                                          self.properties['min'], self.properties['max'])
+                                          self.properties['min'],
+                                          self.properties['max'])
         if range:
             if self.colorTable:
-                self.cr_label.SetLabel(_("Enter vector attribute values or percents %s:") % range)
+                self.cr_label.SetLabel(
+                    _("Enter vector attribute values or percents %s:") %
+                    range)
             else:
-                self.cr_label.SetLabel(_("Enter vector attribute values %s:") % range)
+                self.cr_label.SetLabel(
+                    _("Enter vector attribute values %s:") %
+                    range)
         else:
             if self.colorTable:
-                self.cr_label.SetLabel(_("Enter vector attribute values or percents:"))
+                self.cr_label.SetLabel(
+                    _("Enter vector attribute values or percents:"))
             else:
                 self.cr_label.SetLabel(_("Enter vector attribute values:"))
-                
+
     def OnFromColSelection(self, event):
         """Selection in combobox (for loading values) changed"""
         self.properties['loadColumn'] = event.GetString()
-        
+
         self.LoadTable()
-    
+
     def OnToColSelection(self, event):
         """Selection in combobox (for storing values) changed"""
         self.properties['storeColumn'] = event.GetString()
-    
-    def OnPreview(self, event = None, tmp = True):
+
+    def OnPreview(self, event=None, tmp=True):
         """Update preview (based on computational region)"""
         if self.colorTable:
             self.OnTablePreview(tmp)
         else:
-            self.OnColumnPreview() 
-                                 
+            self.OnColumnPreview()
+
     def OnTablePreview(self, tmp):
         """Update preview (based on computational region)"""
         if not self.inmap:
             self.preview.EraseMap()
             return
-        
+
         ltype = 'vector'
         cmdlist = ['d.vect',
                    'map=%s' % self.inmap]
-        
+
         # find existing color table and copy to temp file
         try:
             name, mapset = self.inmap.split('@')
         except ValueError:
             name = self.inmap
-            mapset = grass.find_file(self.inmap, element = 'cell')['mapset']
+            mapset = grass.find_file(self.inmap, element='cell')['mapset']
             if not mapset:
                 return
-            
+
         old_colrtable = None
         if mapset == grass.gisenv()['MAPSET']:
-            old_colrtable = grass.find_file(name = 'colr', element = os.path.join('vector', name))['file']
+            old_colrtable = grass.find_file(
+                name='colr', element=os.path.join(
+                    'vector', name))['file']
         else:
-            old_colrtable = grass.find_file(name = name, element = os.path.join('vcolr2', mapset))['file']
-            
+            old_colrtable = grass.find_file(
+                name=name, element=os.path.join(
+                    'vcolr2', mapset))['file']
+
         if old_colrtable:
             colrtemp = utils.GetTempfile()
             shutil.copyfile(old_colrtable, colrtemp)
-            
-        ColorTable.DoPreview(self, ltype, cmdlist)  
-        
+
+        ColorTable.DoPreview(self, ltype, cmdlist)
+
         # restore previous color table
         if tmp:
             if old_colrtable:
@@ -1577,57 +1732,62 @@ class VectorColorTable(ColorTable):
                 os.remove(colrtemp)
             else:
                 RunCommand('v.colors',
-                           parent = self,
-                           flags = 'r',
-                           map = self.inmap)
+                           parent=self,
+                           flags='r',
+                           map=self.inmap)
+
     def OnColumnPreview(self):
         """Update preview (based on computational region)"""
         if not self.inmap or not self.properties['tmpColumn']:
             self.preview.EraseMap()
             return
-        
+
         cmdlist = ['d.vect',
                    'map=%s' % self.inmap,
                    'type=point,line,boundary,area']
-                
+
         if self.attributeType == 'color':
             cmdlist.append('rgb_column=%s' % self.properties['tmpColumn'])
         elif self.attributeType == 'size':
             cmdlist.append('size_column=%s' % self.properties['tmpColumn'])
         elif self.attributeType == 'width':
             cmdlist.append('width_column=%s' % self.properties['tmpColumn'])
-            
+
         ltype = 'vector'
-        
+
         ColorTable.DoPreview(self, ltype, cmdlist)
-        
+
     def OnHelp(self, event):
         """Show GRASS manual page"""
         cmd = 'v.colors'
-        ColorTable.RunHelp(self, cmd = cmd)
-        
+        ColorTable.RunHelp(self, cmd=cmd)
+
     def UseAttrColumn(self, useAttrColumn):
         """Find layers and apply the changes in d.vect command"""
-        layers = self.layerTree.FindItemByData(key = 'name', value = self.inmap)
+        layers = self.layerTree.FindItemByData(key='name', value=self.inmap)
         if not layers:
             return
         for layer in layers:
-            if self.layerTree.GetLayerInfo(layer, key = 'type') != 'vector':
+            if self.layerTree.GetLayerInfo(layer, key='type') != 'vector':
                 continue
-            cmdlist = self.layerTree.GetLayerInfo(layer, key = 'maplayer').GetCmd()
-            
+            cmdlist = self.layerTree.GetLayerInfo(
+                layer, key='maplayer').GetCmd()
+
             if self.attributeType == 'color':
                 if useAttrColumn:
-                    cmdlist[1].update({'rgb_column': self.properties['storeColumn']})
+                    cmdlist[1].update(
+                        {'rgb_column': self.properties['storeColumn']})
                 else:
                     cmdlist[1].pop('rgb_column', None)
             elif self.attributeType == 'size':
-                cmdlist[1].update({'size_column': self.properties['storeColumn']})
+                cmdlist[1].update(
+                    {'size_column': self.properties['storeColumn']})
             elif self.attributeType == 'width':
-                cmdlist[1].update({'width_column' :self.properties['storeColumn']})
-            self.layerTree.SetLayerInfo(layer, key = 'cmd', value = cmdlist)
-        
-    def CreateColorTable(self, tmp = False):
+                cmdlist[1].update(
+                    {'width_column': self.properties['storeColumn']})
+            self.layerTree.SetLayerInfo(layer, key='cmd', value=cmdlist)
+
+    def CreateColorTable(self, tmp=False):
         """Create color rules (color table or color column)"""
         if self.colorTable:
             ret = ColorTable.CreateColorTable(self)
@@ -1636,9 +1796,9 @@ class VectorColorTable(ColorTable):
                 ret = self.UpdateColorColumn(tmp)
             else:
                 ret = True
-        
+
         return ret
-        
+
     def UpdateColorColumn(self, tmp):
         """Creates color table
 
@@ -1646,38 +1806,38 @@ class VectorColorTable(ColorTable):
         :return: False on failure
         """
         rulestxt = ''
-        
+
         for rule in self.rulesPanel.ruleslines.itervalues():
-            if 'value' not in rule: # skip empty rules
+            if 'value' not in rule:  # skip empty rules
                 break
-            
+
             if tmp:
                 rgb_col = self.properties['tmpColumn']
             else:
                 rgb_col = self.properties['storeColumn']
                 if not self.properties['storeColumn']:
-                    GMessage(parent = self.parent,
-                             message = _("Please select column to save values to."))
-            
-            rulestxt += "UPDATE %s SET %s='%s' WHERE %s ;\n" % (self.properties['table'],
-                                                                rgb_col,
-                                                                rule[self.attributeType],
-                                                                rule['value'])
+                    GMessage(parent=self.parent, message=_(
+                        "Please select column to save values to."))
+
+            rulestxt += "UPDATE %s SET %s='%s' WHERE %s ;\n" % (
+                self.properties['table'],
+                rgb_col, rule[self.attributeType],
+                rule['value'])
         if not rulestxt:
             return False
-        
+
         gtemp = utils.GetTempfile()
         output = open(gtemp, "w")
         try:
             output.write(rulestxt)
         finally:
             output.close()
-        
+
         RunCommand('db.execute',
-                   parent = self,
-                   input = gtemp)
+                   parent=self,
+                   input=gtemp)
         return True
-    
+
     def OnCancel(self, event):
         """Do not apply any changes and close the dialog"""
         self.DeleteTemporaryColumn()
@@ -1686,7 +1846,7 @@ class VectorColorTable(ColorTable):
 
     def OnApply(self, event):
         """Apply selected color table
-        
+
         :return: True on success otherwise False
         """
         if self.colorTable:
@@ -1694,28 +1854,30 @@ class VectorColorTable(ColorTable):
         else:
             if not self.properties['storeColumn']:
                 GError(_("No color column defined. Operation canceled."),
-                       parent = self)
+                       parent=self)
                 return
-            
+
             self.UseAttrColumn(True)
-        
+
         return ColorTable.OnApply(self, event)
-        
+
+
 class ThematicVectorTable(VectorColorTable):
+
     def __init__(self, parent, vectorType, **kwargs):
         """Dialog for interactively entering color/size rules
         for vector maps for thematic mapping in nviz"""
         self.vectorType = vectorType
-        VectorColorTable.__init__(self, parent = parent, **kwargs)
-              
-        self.SetTitle(_("Thematic mapping for vector map in 3D view"))       
-                    
+        VectorColorTable.__init__(self, parent=parent, **kwargs)
+
+        self.SetTitle(_("Thematic mapping for vector map in 3D view"))
+
     def _initLayer(self):
         """Set initial layer when opening dialog"""
-        self.inmap = self.parent.GetLayerData(nvizType = 'vector', nameOnly = True)
+        self.inmap = self.parent.GetLayerData(nvizType='vector', nameOnly=True)
         self.selectionInput.SetValue(self.inmap)
         self.selectionInput.Disable()
-        
+
     def OnApply(self, event):
         """Apply selected color table
 
@@ -1723,85 +1885,92 @@ class ThematicVectorTable(VectorColorTable):
         """
         ret = self.CreateColorTable()
         if not ret:
-            GMessage(parent = self, message = _("No valid color rules given."))
-        
-        data = self.parent.GetLayerData(nvizType = 'vector')
-        data['vector']['points']['thematic']['layer'] = int(self.properties['layer'])
-        
+            GMessage(parent=self, message=_("No valid color rules given."))
+
+        data = self.parent.GetLayerData(nvizType='vector')
+        data['vector']['points']['thematic'][
+            'layer'] = int(self.properties['layer'])
+
         value = None
         if self.properties['storeColumn']:
             value = self.properties['storeColumn']
-            
+
         if not self.colorTable:
             if self.attributeType == 'color':
-                data['vector'][self.vectorType]['thematic']['rgbcolumn'] = value
+                data['vector'][self.vectorType][
+                    'thematic']['rgbcolumn'] = value
             else:
-                data['vector'][self.vectorType]['thematic']['sizecolumn'] = value
+                data['vector'][self.vectorType][
+                    'thematic']['sizecolumn'] = value
         else:
             if self.attributeType == 'color':
                 data['vector'][self.vectorType]['thematic']['rgbcolumn'] = None
             else:
-                data['vector'][self.vectorType]['thematic']['sizecolumn'] = None
-        
+                data['vector'][self.vectorType][
+                    'thematic']['sizecolumn'] = None
+
         data['vector'][self.vectorType]['thematic']['update'] = None
-        
-        from nviz.main            import haveNviz
+
+        from nviz.main import haveNviz
         if haveNviz:
-            from nviz.mapwindow   import wxUpdateProperties
-            
-            event = wxUpdateProperties(data = data)
+            from nviz.mapwindow import wxUpdateProperties
+
+            event = wxUpdateProperties(data=data)
             wx.PostEvent(self.parent.mapWindow, event)
-        
+
         self.parent.mapWindow.Refresh(False)
-        
+
         return ret
-           
+
+
 class BufferedWindow(wx.Window):
     """A Buffered window class"""
+
     def __init__(self, parent, id,
-                 style = wx.NO_FULL_REPAINT_ON_RESIZE,
-                 Map = None, **kwargs):
-        
-        wx.Window.__init__(self, parent, id, style = style, **kwargs)
+                 style=wx.NO_FULL_REPAINT_ON_RESIZE,
+                 Map=None, **kwargs):
+
+        wx.Window.__init__(self, parent, id, style=style, **kwargs)
 
         self.parent = parent
         self.Map = Map
-        
+
         # re-render the map from GRASS or just redraw image
         self.render = True
         # indicates whether or not a resize event has taken place
-        self.resize = False 
+        self.resize = False
 
         #
         # event bindings
         #
-        self.Bind(wx.EVT_PAINT,        self.OnPaint)
-        self.Bind(wx.EVT_IDLE,         self.OnIdle)
+        self.Bind(wx.EVT_PAINT, self.OnPaint)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
         self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
 
         #
         # render output objects
         #
         # image file to be rendered
-        self.mapfile = None 
+        self.mapfile = None
         # wx.Image object (self.mapfile)
         self.img = None
 
         self.pdc = wx.PseudoDC()
         # will store an off screen empty bitmap for saving to file
-        self._Buffer = None 
+        self._Buffer = None
 
         # make sure that extents are updated at init
         self.Map.region = self.Map.GetRegion()
         self.Map.SetRegion()
+        self.Map.GetRenderMgr().renderDone.connect(self._updatePreviewFinished)
 
-    def Draw(self, pdc, img = None, pdctype = 'image'):
+    def Draw(self, pdc, img=None, pdctype='image'):
         """Draws preview or clears window"""
         pdc.BeginDrawing()
 
-        Debug.msg (3, "BufferedWindow.Draw(): pdctype=%s" % (pdctype))
+        Debug.msg(3, "BufferedWindow.Draw(): pdctype=%s" % (pdctype))
 
-        if pdctype == 'clear': # erase the display
+        if pdctype == 'clear':  # erase the display
             bg = wx.WHITE_BRUSH
             pdc.SetBackground(bg)
             pdc.Clear()
@@ -1814,8 +1983,8 @@ class BufferedWindow(wx.Window):
             pdc.SetBackground(bg)
             bitmap = wx.BitmapFromImage(img)
             w, h = bitmap.GetSize()
-            pdc.DrawBitmap(bitmap, 0, 0, True) # draw the composite map
-            
+            pdc.DrawBitmap(bitmap, 0, 0, True)  # draw the composite map
+
         pdc.EndDrawing()
         self.Refresh()
 
@@ -1823,24 +1992,24 @@ class BufferedWindow(wx.Window):
         """Draw pseudo DC to buffer"""
         self._Buffer = wx.EmptyBitmap(self.Map.width, self.Map.height)
         dc = wx.BufferedPaintDC(self, self._Buffer)
-        
+
         # use PrepareDC to set position correctly
         # probably does nothing, removed from wxPython 2.9
         # self.PrepareDC(dc)
-        
+
         # we need to clear the dc BEFORE calling PrepareDC
         bg = wx.Brush(self.GetBackgroundColour())
         dc.SetBackground(bg)
         dc.Clear()
-        
+
         # create a clipping rect from our position and size
         # and the Update Region
         rgn = self.GetUpdateRegion()
         r = rgn.GetBox()
-        
+
         # draw to the dc using the calculated clipping rect
         self.pdc.DrawToDCClipped(dc, r)
-        
+
     def OnSize(self, event):
         """Init image size to match window size"""
         # set size of the input image
@@ -1855,7 +2024,7 @@ class BufferedWindow(wx.Window):
         self.img = self.GetImage()
 
         # update map display
-        if self.img and self.Map.width + self.Map.height > 0: # scale image during resize
+        if self.img and self.Map.width + self.Map.height > 0:  # scale image during resize
             self.img = self.img.Scale(self.Map.width, self.Map.height)
             self.render = False
             self.UpdatePreview()
@@ -1879,38 +2048,45 @@ class BufferedWindow(wx.Window):
             img = wx.Image(self.Map.mapfile, wx.BITMAP_TYPE_ANY)
         else:
             img = None
-        
+
         return img
-    
-    def UpdatePreview(self, img = None):
+
+    def UpdatePreview(self, img=None):
         """Update canvas if window changes geometry"""
-        Debug.msg (2, "BufferedWindow.UpdatePreview(%s): render=%s" % (img, self.render))
-        oldfont = ""
-        oldencoding = ""
-        
-        if self.render:
-            # extent is taken from current map display
-            try:
-                self.Map.region = copy.deepcopy(self.parent.parent.GetLayerTree().GetMap().GetCurrentRegion())
-            except AttributeError:
-                self.Map.region = self.Map.GetRegion()
-            # render new map images
-            self.mapfile = self.Map.Render(force = self.render)
-            self.img = self.GetImage()
-            self.resize = False
-        
+        Debug.msg(
+            2, "BufferedWindow.UpdatePreview(%s): render=%s" %
+            (img, self.render))
+
+        if not self.render:
+            return
+
+        # extent is taken from current map display
+        try:
+            self.Map.region = copy.deepcopy(
+                self.parent.parent.GetLayerTree().GetMap().GetCurrentRegion())
+        except AttributeError:
+            self.Map.region = self.Map.GetRegion()
+        # render new map images
+        self.mapfile = self.Map.Render(force=self.render)
+
+    def _updatePreviewFinished(self):
+        if not self.render:
+            return
+
+        self.img = self.GetImage()
+        self.resize = False
+
         if not self.img:
             return
-        
+
         # paint images to PseudoDC
         self.pdc.Clear()
         self.pdc.RemoveAll()
         # draw map image background
-        self.Draw(self.pdc, self.img, pdctype = 'image')
-        
+        self.Draw(self.pdc, self.img, pdctype='image')
+
         self.resize = False
-        
+
     def EraseMap(self):
         """Erase preview"""
-        self.Draw(self.pdc, pdctype = 'clear')
-    
+        self.Draw(self.pdc, pdctype='clear')
diff --git a/gui/wxpython/modules/extensions.py b/gui/wxpython/modules/extensions.py
index 6039b45..017a1d7 100644
--- a/gui/wxpython/modules/extensions.py
+++ b/gui/wxpython/modules/extensions.py
@@ -25,56 +25,70 @@ import wx
 
 from grass.script import task as gtask
 
-from core             import globalvar
-from core.gcmd        import GError, RunCommand, GException, GMessage
-from core.utils       import SetAddOnPath, _
+from core import globalvar
+from core.gcmd import GError, RunCommand, GException, GMessage
+from core.utils import SetAddOnPath, _
 from core.gthread import gThread
-from core.menutree    import TreeModel, ModuleNode
+from core.menutree import TreeModel, ModuleNode
 from gui_core.widgets import GListCtrl, SearchModuleWidget
 from gui_core.treeview import CTreeView
-from core.toolboxes   import toolboxesOutdated
+from core.toolboxes import toolboxesOutdated
 
 
 class InstallExtensionWindow(wx.Frame):
-    def __init__(self, parent, giface, id = wx.ID_ANY,
-                 title = _("Fetch & install extension from GRASS Addons"), **kwargs):
+
+    def __init__(self, parent, giface, id=wx.ID_ANY, title=_(
+            "Fetch & install extension from GRASS Addons"), **kwargs):
         self.parent = parent
         self._giface = giface
-        self.options = dict() # list of options
-
-        wx.Frame.__init__(self, parent = parent, id = id, title = title, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
-
-        self.repoBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                    label = " %s " % _("Repository"))
-        self.treeBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                    label = " %s " % _("List of extensions - double-click to install"))
-        
-        self.repo = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY)
-        
+        self.options = dict()  # list of options
+
+        wx.Frame.__init__(self, parent=parent, id=id, title=title, **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.repoBox = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("Repository (leave empty to use the official one)"))
+        self.treeBox = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("List of extensions - double-click to install"))
+
+        self.repo = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY)
+
         # modelBuilder loads data into tree model
         self.modelBuilder = ExtensionTreeModelBuilder()
         # tree view displays model data
-        self.tree = CTreeView(parent=self.panel, model=self.modelBuilder.GetModel())
-        
-        self.search = SearchModuleWidget(parent=self.panel, model=self.modelBuilder.GetModel(),
-                                         showChoice = False)
-        self.search.showSearchResult.connect(lambda result: self.tree.Select(result))
+        self.tree = CTreeView(
+            parent=self.panel,
+            model=self.modelBuilder.GetModel())
+
+        self.search = SearchModuleWidget(
+            parent=self.panel,
+            model=self.modelBuilder.GetModel(),
+            showChoice=False)
+        self.search.showSearchResult.connect(
+            lambda result: self.tree.Select(result))
         # show text in statusbar when notification appears
-        self.search.showNotification.connect(lambda message: self.SetStatusText(message))
+        self.search.showNotification.connect(
+            lambda message: self.SetStatusText(message))
         # load data in different thread
         self.thread = gThread()
 
-        self.optionBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                      label = " %s " % _("Options"))
+        self.optionBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                                      label=" %s " % _("Options"))
         task = gtask.parse_interface('g.extension')
         ignoreFlags = ['l', 'c', 'g', 'a', 'f', 't', 'help', 'quiet']
         if sys.platform == 'win32':
             ignoreFlags.append('d')
             ignoreFlags.append('i')
-        
+
         for f in task.get_options()['flags']:
             name = f.get('name', '')
             desc = f.get('label', '')
@@ -84,25 +98,30 @@ class InstallExtensionWindow(wx.Frame):
                 continue
             if name in ignoreFlags:
                 continue
-            self.options[name] = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                             label = desc)
-        defaultUrl = 'http://svn.osgeo.org/grass/grass-addons/grass7'
-        self.repo.SetValue(task.get_param(value = 'svnurl').get('default', defaultUrl))
-        
-        self.statusbar = self.CreateStatusBar(number = 1)
-        
-        self.btnFetch = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                  label = _("&Fetch"))
+            self.options[name] = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
+                                             label=desc)
+        defaultUrl = ''  # default/official one will be used when option empty
+        self.repo.SetValue(
+            task.get_param(
+                value='url').get(
+                'default',
+                defaultUrl))
+
+        self.statusbar = self.CreateStatusBar(number=1)
+
+        self.btnFetch = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                  label=_("&Fetch"))
         self.btnFetch.SetToolTipString(_("Fetch list of available modules "
                                          "from GRASS Addons SVN repository"))
-        self.btnClose = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
-        self.btnInstall = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                    label = _("&Install"))
-        self.btnInstall.SetToolTipString(_("Install selected add-ons GRASS module"))
+        self.btnClose = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
+        self.btnInstall = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                    label=_("&Install"))
+        self.btnInstall.SetToolTipString(
+            _("Install selected add-ons GRASS module"))
         self.btnInstall.Enable(False)
-        self.btnHelp = wx.Button(parent = self.panel, id = wx.ID_HELP)
+        self.btnHelp = wx.Button(parent=self.panel, id=wx.ID_HELP)
         self.btnHelp.SetToolTipString(_("Show g.extension manual page"))
-        
+
         self.btnClose.Bind(wx.EVT_BUTTON, lambda evt: self.Close())
         self.btnFetch.Bind(wx.EVT_BUTTON, self.OnFetch)
         self.btnInstall.Bind(wx.EVT_BUTTON, self.OnInstall)
@@ -112,7 +131,7 @@ class InstallExtensionWindow(wx.Frame):
         self.tree.contextMenu.connect(self.OnContextMenu)
 
         wx.CallAfter(self._fetch)
-        
+
         self._layout()
 
     def _layout(self):
@@ -120,56 +139,56 @@ class InstallExtensionWindow(wx.Frame):
         sizer = wx.BoxSizer(wx.VERTICAL)
         repoSizer = wx.StaticBoxSizer(self.repoBox, wx.VERTICAL)
         repo1Sizer = wx.BoxSizer(wx.HORIZONTAL)
-        repo1Sizer.Add(item = self.repo, proportion = 1,
-                      flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = 1)
-        repo1Sizer.Add(item = self.btnFetch, proportion = 0,
-                      flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL, border = 1)
-        repoSizer.Add(item = repo1Sizer,
-                      flag = wx.EXPAND)
-        
+        repo1Sizer.Add(item=self.repo, proportion=1,
+                       flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=1)
+        repo1Sizer.Add(item=self.btnFetch, proportion=0,
+                       flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL, border=1)
+        repoSizer.Add(item=repo1Sizer,
+                      flag=wx.EXPAND)
+
         findSizer = wx.BoxSizer(wx.HORIZONTAL)
-        findSizer.Add(item = self.search, proportion = 1)
-        
+        findSizer.Add(item=self.search, proportion=1)
+
         treeSizer = wx.StaticBoxSizer(self.treeBox, wx.HORIZONTAL)
-        treeSizer.Add(item = self.tree, proportion = 1,
-                      flag = wx.ALL | wx.EXPAND, border = 1)
+        treeSizer.Add(item=self.tree, proportion=1,
+                      flag=wx.ALL | wx.EXPAND, border=1)
 
         # options
         optionSizer = wx.StaticBoxSizer(self.optionBox, wx.VERTICAL)
         for key in self.options.keys():
-            optionSizer.Add(item = self.options[key], proportion = 0)
-        
+            optionSizer.Add(item=self.options[key], proportion=0)
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnHelp, proportion = 0)
+        btnSizer.Add(item=self.btnHelp, proportion=0)
         btnSizer.AddStretchSpacer()
-        btnSizer.Add(item = self.btnClose, proportion = 0,
-                     flag = wx.RIGHT, border = 5)
-        btnSizer.Add(item = self.btnInstall, proportion = 0)
-        
-        sizer.Add(item = repoSizer, proportion = 0,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        sizer.Add(item = findSizer, proportion = 0,
-                  flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        sizer.Add(item = treeSizer, proportion = 1,
-                  flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        sizer.Add(item = optionSizer, proportion = 0,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL | wx.EXPAND, border = 5)
-        
+        btnSizer.Add(item=self.btnClose, proportion=0,
+                     flag=wx.RIGHT, border=5)
+        btnSizer.Add(item=self.btnInstall, proportion=0)
+
+        sizer.Add(item=repoSizer, proportion=0,
+                  flag=wx.ALL | wx.EXPAND, border=3)
+        sizer.Add(item=findSizer, proportion=0,
+                  flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+        sizer.Add(item=treeSizer, proportion=1,
+                  flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+        sizer.Add(item=optionSizer, proportion=0,
+                  flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL | wx.EXPAND, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
-        
+
         self.Layout()
 
     def _getCmd(self):
         item = self.tree.GetSelected()
         if not item or 'command' not in item[0].data:
-            GError(_("Extension not defined"), parent = self)
+            GError(_("Extension not defined"), parent=self)
             return
 
         name = item[0].data['command']
-        
+
         flags = list()
         for key in self.options.keys():
             if self.options[key].IsChecked():
@@ -177,9 +196,9 @@ class InstallExtensionWindow(wx.Frame):
                     flags.append('-%s' % key)
                 else:
                     flags.append('--%s' % key)
-        
+
         return ['g.extension'] + flags + ['extension=' + name,
-                                          'svnurl=' + self.repo.GetValue().strip()]
+                                          'url=' + self.repo.GetValue().strip()]
 
     def OnFetch(self, event):
         """Fetch list of available extensions"""
@@ -188,34 +207,42 @@ class InstallExtensionWindow(wx.Frame):
     def _fetch(self):
         """Fetch list of available extensions"""
         wx.BeginBusyCursor()
-        self.SetStatusText(_("Fetching list of modules from GRASS-Addons SVN (be patient)..."), 0)
+        self.SetStatusText(
+            _("Fetching list of modules from GRASS-Addons SVN (be patient)..."), 0)
         try:
-            self.thread.Run(callable=self.modelBuilder.Load, url=self.repo.GetValue().strip(),
-                            ondone=lambda event: self._fetchDone())
+            self.thread.Run(
+                callable=self.modelBuilder.Load,
+                url=self.repo.GetValue().strip(),
+                ondone=lambda event: self._fetchDone())
         except GException as e:
             self._fetchDone()
-            GError(unicode(e), parent = self, showTraceback = False)
-            
+            GError(unicode(e), parent=self, showTraceback=False)
+
     def _fetchDone(self):
         self.tree.RefreshItems()
-        self.SetStatusText("", 0)
+        nitems = len(
+            self.modelBuilder.GetModel().SearchNodes(
+                key='command', value='*'))
+        self.SetStatusText(_("%d extensions loaded") % nitems, 0)
         wx.EndBusyCursor()
-        
+
     def OnContextMenu(self, node):
-        if not hasattr (self, "popupID"):
+        if not hasattr(self, "popupID"):
             self.popupID = dict()
             for key in ('install', 'help'):
                 self.popupID[key] = wx.NewId()
-        
+
         data = node.data
         if data and 'command' in data:
             self.popupMenu = wx.Menu()
-            self.popupMenu.Append(self.popupID['install'], text = _("Install"))
-            self.Bind(wx.EVT_MENU, self.OnInstall, id = self.popupID['install'])
+            self.popupMenu.Append(self.popupID['install'], text=_("Install"))
+            self.Bind(wx.EVT_MENU, self.OnInstall, id=self.popupID['install'])
             self.popupMenu.AppendSeparator()
-            self.popupMenu.Append(self.popupID['help'], text = _("Show manual page"))
-            self.Bind(wx.EVT_MENU, self.OnItemHelp, id = self.popupID['help'])
-            
+            self.popupMenu.Append(
+                self.popupID['help'],
+                text=_("Show manual page"))
+            self.Bind(wx.EVT_MENU, self.OnItemHelp, id=self.popupID['help'])
+
             self.PopupMenu(self.popupMenu)
             self.popupMenu.Destroy()
 
@@ -223,19 +250,19 @@ class InstallExtensionWindow(wx.Frame):
         data = node.data
         if data and 'command' in data:
             self.OnInstall(event=None)
-        
+
     def OnInstall(self, event):
         """Install selected extension"""
         log = self.parent.GetLogWindow()
         cmd = self._getCmd()
         if cmd:
-            log.RunCmd(cmd, onDone = self.OnDone)
-        
+            log.RunCmd(cmd, onDone=self.OnDone)
+
     def OnDone(self, event):
         if event.returncode == 0:
             if not os.getenv('GRASS_ADDON_BASE'):
-                SetAddOnPath(key = 'BASE')
-            
+                SetAddOnPath(key='BASE')
+
             globalvar.UpdateGRASSAddOnCommands()
             toolboxesOutdated()
 
@@ -243,7 +270,7 @@ class InstallExtensionWindow(wx.Frame):
         item = self.tree.GetSelected()
         if not item or 'command' not in item[0].data:
             return
-        
+
         self._giface.Help(entry=item[0].data['command'], online=True)
 
     def OnHelp(self, event):
@@ -259,18 +286,20 @@ class InstallExtensionWindow(wx.Frame):
             self.SetStatusText(data.get('description', ''), 0)
             self.btnInstall.Enable(True)
 
+
 class ExtensionTreeModelBuilder:
     """Tree model of available extensions."""
+
     def __init__(self):
         self.mainNodes = dict()
         self.model = TreeModel(ModuleNode)
         for prefix in ('display', 'database',
                        'general', 'imagery',
                        'misc', 'postscript', 'paint',
-                       'raster', 'raster3D', 'sites', 'temporal', 'vector', 'wxGUI', 'other'):
+                       'raster', 'raster3D', 'sites', 'temporal', 'vector', 'wxGUI',  'other'):
             node = self.model.AppendNode(parent=self.model.root, label=prefix)
             self.mainNodes[prefix] = node
-        
+
     def GetModel(self):
         return self.model
 
@@ -279,42 +308,41 @@ class ExtensionTreeModelBuilder:
         for node in self.mainNodes.values():
             for child in reversed(node.children):
                 self.model.RemoveNode(child)
-        
+
     def _expandPrefix(self, c):
-        name = { 'd'  : 'display',
-                 'db' : 'database',
-                 'g'  : 'general',
-                 'i'  : 'imagery',
-                 'm'  : 'misc',
-                 'ps' : 'postscript',
-                 'p'  : 'paint',
-                 'r'  : 'raster',
-                 'r3' : 'raster3D',
-                 's'  : 'sites',
-                 't'  : 'temporal',
-                 'v'  : 'vector',
-                 'wx' : 'wxGUI',
-                 ''   : 'other' }
-        
+        name = {'d': 'display',
+                'db': 'database',
+                'g': 'general',
+                'i': 'imagery',
+                'm': 'misc',
+                'ps': 'postscript',
+                'p': 'paint',
+                'r': 'raster',
+                'r3': 'raster3D',
+                's': 'sites',
+                't': 'temporal',
+                'v': 'vector',
+                'wx': 'wxGUI',
+                '': 'other'}
+
         if c in name:
             return name[c]
-        
+
         return c
-    
-    def Load(self, url, full = True):
+
+    def Load(self, url, full=True):
         """Load list of extensions"""
         self._emptyTree()
-        
+
         if full:
             flags = 'g'
         else:
             flags = 'l'
-        retcode, ret, msg = RunCommand('g.extension', read = True, getErrorMsg = True,
-                                       svnurl = url,
-                                       flags = flags, quiet = True)
+        retcode, ret, msg = RunCommand(
+            'g.extension', read=True, getErrorMsg=True, url=url, flags=flags, quiet=True)
         if retcode != 0:
             raise GException(_("Unable to load extensions. %s") % msg)
-        
+
         currentNode = None
         for line in ret.splitlines():
             if full:
@@ -331,7 +359,8 @@ class ExtensionTreeModelBuilder:
                         prefix = ''
                         name = value
                     mainNode = self.mainNodes[self._expandPrefix(prefix)]
-                    currentNode = self.model.AppendNode(parent=mainNode, label=value)
+                    currentNode = self.model.AppendNode(
+                        parent=mainNode, label=value)
                     currentNode.data = {'command': value}
                 else:
                     if currentNode is not None:
@@ -342,67 +371,90 @@ class ExtensionTreeModelBuilder:
                 except ValueError:
                     prefix = ''
                     name = line.strip()
-                
+
                 if self._expandPrefix(prefix) == prefix:
                     prefix = ''
                 module = prefix + '.' + name
                 mainNode = self.mainNodes[self._expandPrefix(prefix)]
-                currentNode = self.model.AppendNode(parent=mainNode, label=module)
+                currentNode = self.model.AppendNode(
+                    parent=mainNode, label=module)
                 currentNode.data = {'command': module,
                                     'keywords': '',
-                                    'description': ''}        
-        
+                                    'description': ''}
+
+
 class ManageExtensionWindow(wx.Frame):
-    def __init__(self, parent, id = wx.ID_ANY,
-                 title = _("Manage installed GRASS Addons extensions"), **kwargs):
+
+    def __init__(
+            self, parent, id=wx.ID_ANY,
+            title=_("Manage installed GRASS Addons extensions"),
+            **kwargs):
         self.parent = parent
-        
-        wx.Frame.__init__(self, parent = parent, id = id, title = title, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
 
-        self.extBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
-                                   label = " %s " % _("List of installed extensions"))
-        
-        self.extList = CheckListExtension(parent = self.panel)
+        wx.Frame.__init__(self, parent=parent, id=id, title=title, **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.extBox = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=" %s " %
+            _("List of installed extensions"))
+
+        self.extList = CheckListExtension(parent=self.panel)
 
         # buttons
-        self.btnUninstall = wx.Button(parent = self.panel, id = wx.ID_REMOVE, label=_("Uninstall"))
-        self.btnUninstall.SetToolTipString(_("Uninstall selected Addons extensions"))
-        self.btnUpdate = wx.Button(parent = self.panel, id = wx.ID_REFRESH, label=_("Reinstall"))
-        self.btnUpdate.SetToolTipString(_("Reinstall selected Addons extensions"))
+        self.btnUninstall = wx.Button(
+            parent=self.panel,
+            id=wx.ID_REMOVE,
+            label=_("Uninstall"))
+        self.btnUninstall.SetToolTipString(
+            _("Uninstall selected Addons extensions"))
+        self.btnUpdate = wx.Button(
+            parent=self.panel,
+            id=wx.ID_REFRESH,
+            label=_("Reinstall"))
+        self.btnUpdate.SetToolTipString(
+            _("Reinstall selected Addons extensions"))
+
+        self.btnClose = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
 
-        self.btnClose = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
-        
         self.btnUninstall.Bind(wx.EVT_BUTTON, self.OnUninstall)
         self.btnUpdate.Bind(wx.EVT_BUTTON, self.OnUpdate)
         self.btnClose.Bind(wx.EVT_BUTTON, lambda evt: self.Close())
-        
+
         self._layout()
-        
+
     def _layout(self):
         """Do layout"""
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         extSizer = wx.StaticBoxSizer(self.extBox, wx.HORIZONTAL)
-        extSizer.Add(item = self.extList, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 1)
-        
+        extSizer.Add(item=self.extList, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=1)
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = self.btnClose, proportion = 0,
-                     flag = wx.RIGHT, border = 5)
-        btnSizer.Add(item = self.btnUpdate, proportion = 0, flag=wx.RIGHT, border=5)
-        btnSizer.Add(item = self.btnUninstall, proportion = 0)
-        
-        sizer.Add(item = extSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        
+        btnSizer.Add(item=self.btnClose, proportion=0,
+                     flag=wx.RIGHT, border=5)
+        btnSizer.Add(
+            item=self.btnUpdate,
+            proportion=0,
+            flag=wx.RIGHT,
+            border=5)
+        btnSizer.Add(item=self.btnUninstall, proportion=0)
+
+        sizer.Add(item=extSizer, proportion=1,
+                  flag=wx.ALL | wx.EXPAND, border=3)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
-        
+
         self.Layout()
 
     def _getSelectedExtensions(self):
@@ -410,9 +462,9 @@ class ManageExtensionWindow(wx.Frame):
         if not eList:
             GMessage(_("No extension selected. "
                        "Operation canceled."),
-                     parent = self)
+                     parent=self)
             return []
-        
+
         return eList
 
     def OnUninstall(self, event):
@@ -420,26 +472,34 @@ class ManageExtensionWindow(wx.Frame):
         eList = self._getSelectedExtensions()
         if not eList:
             return
-        
+
         for ext in eList:
-            files = RunCommand('g.extension', parent = self, read = True, quiet = True,
-                               extension = ext, operation = 'remove').splitlines()
+            files = RunCommand(
+                'g.extension',
+                parent=self,
+                read=True,
+                quiet=True,
+                extension=ext,
+                operation='remove').splitlines()
             if len(files) > 10:
                 files = files[:10]
                 files.append('...')
-            dlg = wx.MessageDialog(parent = self,
-                                   message = _("List of files to be removed:\n%(files)s\n\n"
-                                               "Do you want really to remove <%(ext)s> extension?") % \
-                                       { 'files' : os.linesep.join(files), 'ext' : ext },
-                                   caption = _("Remove extension"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
-            
-            if dlg.ShowModal() ==  wx.ID_YES:
-                RunCommand('g.extension', flags = 'f', parent = self, quiet = True,
-                           extension = ext, operation = 'remove')
-        
+            dlg = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "List of files to be removed:\n%(files)s\n\n"
+                    "Do you want really to remove <%(ext)s> extension?") %
+                {'files': os.linesep.join(files),
+                 'ext': ext},
+                caption=_("Remove extension"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION)
+
+            if dlg.ShowModal() == wx.ID_YES:
+                RunCommand('g.extension', flags='f', parent=self, quiet=True,
+                           extension=ext, operation='remove')
+
         self.extList.LoadData()
-        
+
         # update prompt
         globalvar.UpdateGRASSAddOnCommands(eList)
         toolboxesOutdated()
@@ -449,30 +509,32 @@ class ManageExtensionWindow(wx.Frame):
         eList = self._getSelectedExtensions()
         if not eList:
             return
-        
+
         log = self.parent.GetLogWindow()
-        
+
         for ext in eList:
             log.RunCmd(['g.extension', 'extension=%s' % ext,
                         'operation=add'])
-        
+
+
 class CheckListExtension(GListCtrl):
     """List of mapset/owner/group"""
+
     def __init__(self, parent):
         GListCtrl.__init__(self, parent)
-        
+
         # load extensions
         self.InsertColumn(0, _('Extension'))
         self.LoadData()
-        
+
     def LoadData(self):
         """Load data into list"""
         self.DeleteAllItems()
         for ext in RunCommand('g.extension',
-                              quiet = True, parent = self, read = True,
-                              flags = 'a').splitlines():
+                              quiet=True, parent=self, read=True,
+                              flags='a').splitlines():
             if ext:
-                self.InsertStringItem(sys.maxint, ext)
+                self.InsertStringItem(self.GetItemCount(), ext)
 
     def GetExtensions(self):
         """Get extensions to be un-installed
@@ -483,5 +545,5 @@ class CheckListExtension(GListCtrl):
                 name = self.GetItemText(i)
                 if name:
                     extList.append(name)
-        
+
         return extList
diff --git a/gui/wxpython/modules/histogram.py b/gui/wxpython/modules/histogram.py
index de0b174..3e993df 100644
--- a/gui/wxpython/modules/histogram.py
+++ b/gui/wxpython/modules/histogram.py
@@ -22,16 +22,17 @@ import sys
 
 import wx
 
-from core                 import globalvar
-from core.render          import Map
-from gui_core.forms       import GUI
-from mapdisp.gprint       import PrintOptions
-from core.utils           import GetLayerNameFromCmd, _
-from gui_core.dialogs     import GetImageHandlers, ImageSizeDialog
+from core import globalvar
+from core.render import Map
+from gui_core.forms import GUI
+from mapdisp.gprint import PrintOptions
+from core.utils import GetLayerNameFromCmd, _
+from gui_core.dialogs import GetImageHandlers, ImageSizeDialog
 from gui_core.preferences import DefaultFontDialog
-from core.debug           import Debug
-from core.gcmd            import GError
-from gui_core.toolbars    import BaseToolbar, BaseIcons
+from core.debug import Debug
+from core.gcmd import GError
+from gui_core.toolbars import BaseToolbar, BaseIcons
+
 
 class BufferedWindow(wx.Window):
     """A Buffered window class.
@@ -41,90 +42,100 @@ class BufferedWindow(wx.Window):
     can also save the drawing to file by calling the
     SaveToFile(self,file_name,file_type) method.
     """
-    def __init__(self, parent, id = wx.ID_ANY,
-                 style = wx.NO_FULL_REPAINT_ON_RESIZE,
-                 Map = None, **kwargs):
-        
-        wx.Window.__init__(self, parent, id = id, style = style, **kwargs)
-        
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 style=wx.NO_FULL_REPAINT_ON_RESIZE,
+                 Map=None, **kwargs):
+
+        wx.Window.__init__(self, parent, id=id, style=style, **kwargs)
+
         self.parent = parent
         self.Map = Map
         self.mapname = self.parent.mapname
-        
+
         #
         # Flags
         #
         self.render = True  # re-render the map from GRASS or just redraw image
-        self.resize = False # indicates whether or not a resize event has taken place
-        self.dragimg = None # initialize variable for map panning
+        self.resize = False  # indicates whether or not a resize event has taken place
+        self.dragimg = None  # initialize variable for map panning
         self.pen = None     # pen for drawing zoom boxes, etc.
-        
+        self._oldfont = self._oldencoding = None
+
         #
         # Event bindings
         #
-        self.Bind(wx.EVT_PAINT,        self.OnPaint)
-        self.Bind(wx.EVT_SIZE,         self.OnSize)
-        self.Bind(wx.EVT_IDLE,         self.OnIdle)
-        
+        self.Bind(wx.EVT_PAINT, self.OnPaint)
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
+
         #
         # Render output objects
         #
-        self.mapfile = None # image file to be rendered
-        self.img = ""       # wx.Image object (self.mapfile)
-        
-        self.imagedict = {} # images and their PseudoDC ID's for painting and dragging
-        
+        self.mapfile = None  # image file to be rendered
+        self.img = None      # wx.Image object (self.mapfile)
+
+        self.imagedict = {}  # images and their PseudoDC ID's for painting and dragging
+
         self.pdc = wx.PseudoDC()
         # will store an off screen empty bitmap for saving to file
-        self._buffer = wx.EmptyBitmap(max(1, self.Map.width), max(1, self.Map.height))
-        
+        self._buffer = wx.EmptyBitmap(
+            max(1, self.Map.width),
+            max(1, self.Map.height))
+
         # make sure that extents are updated at init
         self.Map.region = self.Map.GetRegion()
-        self.Map.SetRegion() 
-        
-        self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x:None)
-        
-    def Draw(self, pdc, img = None, drawid = None, pdctype = 'image', coords = [0,0,0,0]):
+        self.Map.SetRegion()
+
+        self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
+
+    def Draw(self, pdc, img=None, drawid=None,
+             pdctype='image', coords=[0, 0, 0, 0]):
         """Draws histogram or clears window
         """
-        if drawid == None:
-            if pdctype == 'image' :
+        if drawid is None:
+            if pdctype == 'image':
                 drawid = imagedict[img]
             elif pdctype == 'clear':
-                drawid == None
+                drawid is None
             else:
                 drawid = wx.NewId()
         else:
             pdc.SetId(drawid)
-        
+
         pdc.BeginDrawing()
-        
-        Debug.msg (3, "BufferedWindow.Draw(): id=%s, pdctype=%s, coord=%s" % (drawid, pdctype, coords))
-        
-        if pdctype == 'clear': # erase the display
+
+        Debug.msg(
+            3, "BufferedWindow.Draw(): id=%s, pdctype=%s, coord=%s" %
+            (drawid, pdctype, coords))
+
+        if pdctype == 'clear':  # erase the display
             bg = wx.WHITE_BRUSH
             pdc.SetBackground(bg)
             pdc.Clear()
             self.Refresh()
             pdc.EndDrawing()
             return
-        
+
         if pdctype == 'image':
             bg = wx.TRANSPARENT_BRUSH
             pdc.SetBackground(bg)
             bitmap = wx.BitmapFromImage(img)
-            w,h = bitmap.GetSize()
-            pdc.DrawBitmap(bitmap, coords[0], coords[1], True) # draw the composite map
-            pdc.SetIdBounds(drawid, (coords[0],coords[1],w,h))
-        
+            w, h = bitmap.GetSize()
+            pdc.DrawBitmap(
+                bitmap, coords[0],
+                coords[1],
+                True)  # draw the composite map
+            pdc.SetIdBounds(drawid, (coords[0], coords[1], w, h))
+
         pdc.EndDrawing()
         self.Refresh()
-        
+
     def OnPaint(self, event):
         """Draw psuedo DC to buffer
         """
         dc = wx.BufferedPaintDC(self, self._buffer)
-        
+
         # use PrepareDC to set position correctly
         # probably does nothing, removed from wxPython 2.9
         # self.PrepareDC(dc)
@@ -137,31 +148,31 @@ class BufferedWindow(wx.Window):
         rgn = self.GetUpdateRegion()
         r = rgn.GetBox()
         # draw to the dc using the calculated clipping rect
-        self.pdc.DrawToDCClipped(dc,r)
-        
+        self.pdc.DrawToDCClipped(dc, r)
+
     def OnSize(self, event):
         """Init image size to match window size
         """
         # set size of the input image
         self.Map.width, self.Map.height = self.GetClientSize()
-        
+
         # Make new off screen bitmap: this bitmap will always have the
         # current drawing in it, so it can be used to save the image to
         # a file, or whatever.
         self._buffer = wx.EmptyBitmap(self.Map.width, self.Map.height)
-        
+
         # get the image to be rendered
         self.img = self.GetImage()
-        
+
         # update map display
-        if self.img and self.Map.width + self.Map.height > 0: # scale image during resize
+        if self.img and self.Map.width + self.Map.height > 0:  # scale image during resize
             self.img = self.img.Scale(self.Map.width, self.Map.height)
             self.render = False
             self.UpdateHist()
-        
+
         # re-render image on idle
         self.resize = True
-        
+
     def OnIdle(self, event):
         """Only re-render a histogram image from GRASS during idle
         time instead of multiple times during resizing.
@@ -170,7 +181,7 @@ class BufferedWindow(wx.Window):
             self.render = True
             self.UpdateHist()
         event.Skip()
-        
+
     def SaveToFile(self, FileName, FileType, width, height):
         """This will save the contents of the buffer to the specified
         file. See the wx.Windows docs for wx.Bitmap::SaveFile for the
@@ -179,21 +190,21 @@ class BufferedWindow(wx.Window):
         busy = wx.BusyInfo(message=_("Please wait, exporting image..."),
                            parent=self)
         wx.Yield()
-        
+
         self.Map.ChangeMapSize((width, height))
         ibuffer = wx.EmptyBitmap(max(1, width), max(1, height))
-        self.Map.Render(force=True, windres = True)
+        self.Map.Render(force=True, windres=True)
         img = self.GetImage()
-        self.Draw(self.pdc, img, drawid = 99)
+        self.Draw(self.pdc, img, drawid=99)
         dc = wx.BufferedDC(None, ibuffer)
         dc.Clear()
         # probably does nothing, removed from wxPython 2.9
         # self.PrepareDC(dc)
         self.pdc.DrawToDC(dc)
         ibuffer.SaveFile(FileName, FileType)
-        
+
         busy.Destroy()
-        
+
     def GetImage(self):
         """Converts files to wx.Image
         """
@@ -202,89 +213,112 @@ class BufferedWindow(wx.Window):
             img = wx.Image(self.Map.mapfile, wx.BITMAP_TYPE_ANY)
         else:
             img = None
-        
-        self.imagedict[img] = 99 # set image PeudoDC ID
+
+        self.imagedict[img] = 99  # set image PeudoDC ID
         return img
-    
-    def UpdateHist(self, img = None):
+
+    def UpdateHist(self, img=None):
         """Update canvas if histogram options changes or window
         changes geometry
         """
-        Debug.msg (2, "BufferedWindow.UpdateHist(%s): render=%s" % (img, self.render))
-        oldfont = ""
-        oldencoding = ""
+        Debug.msg(
+            2, "BufferedWindow.UpdateHist(%s): render=%s" %
+            (img, self.render))
         
-        if self.render:
-            # render new map images
-            # set default font and encoding environmental variables
-            if "GRASS_FONT" in os.environ:
-                oldfont = os.environ["GRASS_FONT"]
-            if self.parent.font != "": os.environ["GRASS_FONT"] = self.parent.font
-            if "GRASS_ENCODING" in os.environ:
-                oldencoding = os.environ["GRASS_ENCODING"]
-            if self.parent.encoding != None and self.parent.encoding != "ISO-8859-1":
-                os.environ[GRASS_ENCODING] = self.parent.encoding
-            
-            # using active comp region
-            self.Map.GetRegion(update = True)
-            
-            self.Map.width, self.Map.height = self.GetClientSize()
-            self.mapfile = self.Map.Render(force = self.render)
-            self.img = self.GetImage()
-            self.resize = False
+        if not self.render:
+            return
         
-        if not self.img: return
+        # render new map images
+        # set default font and encoding environmental variables
+        if "GRASS_FONT" in os.environ:
+            self._oldfont = os.environ["GRASS_FONT"]
+        if self.parent.font:
+            os.environ["GRASS_FONT"] = self.parent.font
+        if "GRASS_ENCODING" in os.environ:
+            self._oldencoding = os.environ["GRASS_ENCODING"]
+        if self.parent.encoding is not None and self.parent.encoding != "ISO-8859-1":
+            os.environ[GRASS_ENCODING] = self.parent.encoding
+
+        # using active comp region
+        self.Map.GetRegion(update=True)
+
+        self.Map.width, self.Map.height = self.GetClientSize()
+        self.mapfile = self.Map.Render(force=self.render)
+        self.Map.GetRenderMgr().renderDone.connect(self.UpdateHistDone)
+
+    def UpdateHistDone(self):
+        """Histogram image generated, finish rendering."""
+        self.img = self.GetImage()
+        self.resize = False
+
+        if not self.img:
+            return
         try:
             id = self.imagedict[self.img]
         except:
             return
-        
+
         # paint images to PseudoDC
         self.pdc.Clear()
         self.pdc.RemoveAll()
-        self.Draw(self.pdc, self.img, drawid = id) # draw map image background
-        
+        self.Draw(self.pdc, self.img, drawid=id)  # draw map image background
+
         self.resize = False
-        
+
         # update statusbar
-        # Debug.msg (3, "BufferedWindow.UpdateHist(%s): region=%s" % self.Map.region)
         self.Map.SetRegion()
-        self.parent.statusbar.SetStatusText("Image/Raster map <%s>" % self.parent.mapname)
-        
+        self.parent.statusbar.SetStatusText(
+            "Image/Raster map <%s>" %
+            self.parent.mapname)
+
         # set default font and encoding environmental variables
-        if oldfont != "":
-            os.environ["GRASS_FONT"] = oldfont
-        if oldencoding != "":
-            os.environ["GRASS_ENCODING"] = oldencoding
-        
+        if self._oldfont:
+            os.environ["GRASS_FONT"] = self._oldfont
+        if self._oldencoding:
+            os.environ["GRASS_ENCODING"] = self._oldencoding
+
     def EraseMap(self):
         """Erase the map display
         """
-        self.Draw(self.pdc, pdctype = 'clear')
-        
+        self.Draw(self.pdc, pdctype='clear')
+
+
 class HistogramFrame(wx.Frame):
     """Main frame for hisgram display window. Uses d.histogram
     rendered onto canvas
     """
+
     def __init__(self, parent, giface, id=wx.ID_ANY,
-                 title = _("GRASS GIS Histogramming Tool (d.histogram)"),
-                 size = wx.Size(500, 350),
-                 style = wx.DEFAULT_FRAME_STYLE, **kwargs):
-        wx.Frame.__init__(self, parent, id, title, size = size, style = style, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+                 title=_("GRASS GIS Histogramming Tool (d.histogram)"),
+                 size=wx.Size(500, 350),
+                 style=wx.DEFAULT_FRAME_STYLE, **kwargs):
+        wx.Frame.__init__(
+            self,
+            parent,
+            id,
+            title,
+            size=size,
+            style=style,
+            **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
 
         self._giface = giface
-        self.Map   = Map()         # instance of render.Map to be associated with display
+        self.Map = Map()         # instance of render.Map to be associated with display
         self.layer = None          # reference to layer with histogram
-        
+
         # Init variables
         self.params = {}  # previously set histogram parameters
-        self.propwin = '' # ID of properties dialog
-        
+        self.propwin = ''  # ID of properties dialog
+
         self.font = ""
-        self.encoding = 'ISO-8859-1' # default encoding for display fonts
-        
-        self.toolbar = HistogramToolbar(parent = self)
+        self.encoding = 'ISO-8859-1'  # default encoding for display fonts
+
+        self.toolbar = HistogramToolbar(parent=self)
         # workaround for http://trac.wxwidgets.org/ticket/13888
         if sys.platform != 'darwin':
             self.SetToolBar(self.toolbar)
@@ -299,27 +333,35 @@ class HistogramFrame(wx.Frame):
             self.mapname = layers[0].maplayer.name
 
         # Add statusbar
-        self.statusbar = self.CreateStatusBar(number = 1, style = 0)
+        self.statusbar = self.CreateStatusBar(number=1, style=0)
         # self.statusbar.SetStatusWidths([-2, -1])
         hist_frame_statusbar_fields = ["Histogramming %s" % self.mapname]
         for i in range(len(hist_frame_statusbar_fields)):
             self.statusbar.SetStatusText(hist_frame_statusbar_fields[i], i)
-        
+
         # Init map display
-        self.InitDisplay() # initialize region values
-        
+        self.InitDisplay()  # initialize region values
+
         # initialize buffered DC
-        self.HistWindow = BufferedWindow(self, id = wx.ID_ANY, Map = self.Map) # initialize buffered DC
-        
+        self.HistWindow = BufferedWindow(
+            self, id=wx.ID_ANY, Map=self.Map)  # initialize buffered DC
+
         # Bind various events
-        self.Bind(wx.EVT_CLOSE,    self.OnCloseWindow)
-        
+        self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
+
         # Init print module and classes
         self.printopt = PrintOptions(self, self.HistWindow)
-        
+
         # Add layer to the map
-        self.layer = self.Map.AddLayer(ltype = "command", name = 'histogram', command = [['d.histogram']],
-                                       active = False, hidden = False, opacity = 1, render = False)
+        self.layer = self.Map.AddLayer(
+            ltype="command",
+            name='histogram',
+            command=[
+                ['d.histogram']],
+            active=False,
+            hidden=False,
+            opacity=1,
+            render=False)
         if self.mapname:
             self.SetHistLayer(self.mapname, None)
         else:
@@ -331,84 +373,90 @@ class HistogramFrame(wx.Frame):
         """
         self.width, self.height = self.GetClientSize()
         self.Map.geom = self.width, self.height
-        
+
     def OnOptions(self, event):
         """Change histogram settings"""
         cmd = ['d.histogram']
         if self.mapname != '':
             cmd.append('map=%s' % self.mapname)
-        module = GUI(parent = self)
-        module.ParseCommand(cmd, completed = (self.GetOptData, None, self.params))
+        module = GUI(parent=self)
+        module.ParseCommand(
+            cmd,
+            completed=(
+                self.GetOptData,
+                None,
+                self.params))
 
     def GetOptData(self, dcmd, layer, params, propwin):
         """Callback method for histogram command generated by dialog
         created in menuform.py
         """
         if dcmd:
-            name, found = GetLayerNameFromCmd(dcmd, fullyQualified = True,
-                                              layerType = 'raster')
+            name, found = GetLayerNameFromCmd(dcmd, fullyQualified=True,
+                                              layerType='raster')
             if not found:
-                GError(parent = propwin,
-                       message = _("Raster map <%s> not found") % name)
+                GError(parent=propwin,
+                       message=_("Raster map <%s> not found") % name)
                 return
-            
+
             self.SetHistLayer(name, dcmd)
         self.params = params
         self.propwin = propwin
         self.HistWindow.UpdateHist()
-        
-    def SetHistLayer(self, name, cmd = None):
+
+    def SetHistLayer(self, name, cmd=None):
         """Set histogram layer
         """
         self.mapname = name
         if not cmd:
-            cmd = ['d.histogram',('map=%s' % self.mapname)]
-        self.layer = self.Map.ChangeLayer(layer = self.layer,
-                                          command = [cmd],
-                                          active = True)
-        
+            cmd = ['d.histogram', ('map=%s' % self.mapname)]
+        self.layer = self.Map.ChangeLayer(layer=self.layer,
+                                          command=[cmd],
+                                          active=True)
+
         return self.layer
 
     def SetHistFont(self, event):
         """Set font for histogram. If not set, font will be default
         display font.
         """
-        dlg = DefaultFontDialog(parent = self, id = wx.ID_ANY,
-                                title = _('Select font for histogram text'))        
+        dlg = DefaultFontDialog(parent=self, id=wx.ID_ANY,
+                                title=_('Select font for histogram text'))
         dlg.fontlb.SetStringSelection(self.font, True)
-        
+
         if dlg.ShowModal() == wx.ID_CANCEL:
             dlg.Destroy()
             return
-        
-        # set default font type, font, and encoding to whatever selected in dialog
-        if dlg.font != None:
+
+        # set default font type, font, and encoding to whatever selected in
+        # dialog
+        if dlg.font is not None:
             self.font = dlg.font
-        if dlg.encoding != None:
+        if dlg.encoding is not None:
             self.encoding = dlg.encoding
-        
+
         dlg.Destroy()
         self.HistWindow.UpdateHist()
 
     def OnErase(self, event):
         """Erase the histogram display
         """
-        self.HistWindow.Draw(self.HistWindow.pdc, pdctype = 'clear')
-        
+        self.HistWindow.Draw(self.HistWindow.pdc, pdctype='clear')
+
     def OnRender(self, event):
         """Re-render histogram
         """
         self.HistWindow.UpdateHist()
-        
+
     def GetWindow(self):
         """Get buffered window"""
         return self.HistWindow
-    
+
     def SaveToFile(self, event):
         """Save to file
         """
         filetype, ltype = GetImageHandlers(self.HistWindow.img)
-        
+
         # get size
         dlg = ImageSizeDialog(self)
         dlg.CentreOnParent()
@@ -417,58 +465,58 @@ class HistogramFrame(wx.Frame):
             return
         width, height = dlg.GetValues()
         dlg.Destroy()
-        
+
         # get filename
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to save the image "
-                                        "(no need to add extension)"),
-                            wildcard = filetype,
+        dlg = wx.FileDialog(parent=self,
+                            message=_("Choose a file name to save the image "
+                                      "(no need to add extension)"),
+                            wildcard=filetype,
                             style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
-        
+
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
                 dlg.Destroy()
                 return
-            
+
             base, ext = os.path.splitext(path)
             fileType = ltype[dlg.GetFilterIndex()]['type']
-            extType  = ltype[dlg.GetFilterIndex()]['ext']
+            extType = ltype[dlg.GetFilterIndex()]['ext']
             if ext != extType:
                 path = base + '.' + extType
-            
+
             self.HistWindow.SaveToFile(path, fileType,
                                        width, height)
-        
+
         self.HistWindow.UpdateHist()
         dlg.Destroy()
-        
+
     def PrintMenu(self, event):
         """Print options and output menu
         """
         point = wx.GetMousePosition()
         printmenu = wx.Menu()
         # Add items to the menu
-        setup = wx.MenuItem(printmenu, id = wx.ID_ANY, text = _('Page setup'))
+        setup = wx.MenuItem(printmenu, id=wx.ID_ANY, text=_('Page setup'))
         printmenu.AppendItem(setup)
         self.Bind(wx.EVT_MENU, self.printopt.OnPageSetup, setup)
-        
-        preview = wx.MenuItem(printmenu, id = wx.ID_ANY, text = _('Print preview'))
+
+        preview = wx.MenuItem(printmenu, id=wx.ID_ANY, text=_('Print preview'))
         printmenu.AppendItem(preview)
         self.Bind(wx.EVT_MENU, self.printopt.OnPrintPreview, preview)
-        
-        doprint = wx.MenuItem(printmenu, id = wx.ID_ANY, text = _('Print display'))
+
+        doprint = wx.MenuItem(printmenu, id=wx.ID_ANY, text=_('Print display'))
         printmenu.AppendItem(doprint)
         self.Bind(wx.EVT_MENU, self.printopt.OnDoPrint, doprint)
-        
+
         # Popup the menu.  If an item is selected then its handler
         # will be called before PopupMenu returns.
         self.PopupMenu(printmenu)
         printmenu.Destroy()
-        
+
     def OnQuit(self, event):
         self.Close(True)
-        
+
     def OnCloseWindow(self, event):
         """Window closed
         Also remove associated rendered images
@@ -479,10 +527,12 @@ class HistogramFrame(wx.Frame):
             pass
         self.Map.Clean()
         self.Destroy()
-        
+
+
 class HistogramToolbar(BaseToolbar):
     """Histogram toolbar (see histogram.py)
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
 
@@ -491,10 +541,10 @@ class HistogramToolbar(BaseToolbar):
             parent.SetToolBar(self)
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         return self._getToolbarData((('histogram', BaseIcons["histogramD"],
diff --git a/gui/wxpython/modules/import_export.py b/gui/wxpython/modules/import_export.py
new file mode 100644
index 0000000..f648748
--- /dev/null
+++ b/gui/wxpython/modules/import_export.py
@@ -0,0 +1,946 @@
+"""
+ at package modules.import_export
+
+ at brief Import/export dialogs used in wxGUI.
+
+List of classes:
+ - :class:`ImportDialog`
+ - :class:`GdalImportDialog`
+ - :class:`OgrImportDialog`
+ - :class:`GdalOutputDialog`
+ - :class:`DxfImportDialog`
+ - :class:`ReprojectionDialog`
+
+(C) 2008-2016 by the GRASS Development Team
+
+This program is free software under the GNU General Public License
+(>=v2). Read the file COPYING that comes with GRASS for details.
+
+ at author Martin Landa <landa.martin gmail.com>
+ at author Anna Kratochvilova <kratochanna gmail.com> (GroupDialog, SymbolDialog)
+"""
+
+import os
+
+import wx
+import wx.lib.flatnotebook as FN
+import wx.lib.filebrowsebutton as filebrowse
+
+from grass.script import core as grass
+from grass.script import task as gtask
+
+from core import globalvar
+from core.gcmd import RunCommand, GMessage, GWarning
+from gui_core.forms import CmdPanel
+from gui_core.gselect import OgrTypeSelect, GdalSelect, SubGroupSelect
+from gui_core.widgets import LayersList, GListCtrl, GNotebook
+from core.utils import GetValidLayerName, _
+from core.settings import UserSettings, GetDisplayVectSettings
+
+
+class ImportDialog(wx.Dialog):
+    """Dialog for bulk import of various data (base class)"""
+
+    def __init__(self, parent, giface, itype,
+                 id=wx.ID_ANY, title=_("Multiple import"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+        self.parent = parent    # GMFrame
+        self._giface = giface  # used to add layers
+        self.importType = itype
+        self.options = dict()   # list of options
+        self.options_par = dict()
+
+        self.commandId = -1  # id of running command
+
+        wx.Dialog.__init__(self, parent, id, title, style=style,
+                           name="MultiImportDialog")
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        self.layerBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY)
+        if self.importType == 'gdal':
+            label = _("List of raster layers")
+        elif self.importType == 'ogr':
+            label = _("List of vector layers")
+        else:
+            label = _("List of %s layers") % self.importType.upper()
+        self.layerBox.SetLabel(" %s - %s " %
+                               (label, _("right click to (un)select all")))
+
+        # list of layers
+        columns = [_('Layer id'),
+                   _('Layer name'),
+                   _('Name for output GRASS map (editable)')]
+        if itype == 'ogr':
+            columns.insert(2, _('Feature type'))
+            columns.insert(3, _('Projection match'))
+        elif itype == 'gdal':
+            columns.insert(2, _('Projection match'))
+
+        self.list = LayersList(parent=self.panel, columns=columns)
+        self.list.LoadData()
+
+        self.override = wx.CheckBox(
+            parent=self.panel, id=wx.ID_ANY,
+            label=_("Override projection check (use current location's projection)"))
+
+        self.overwrite = wx.CheckBox(
+            parent=self.panel, id=wx.ID_ANY,
+            label=_("Allow output files to overwrite existing files"))
+        self.overwrite.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='overwrite',
+                subkey='enabled'))
+
+        self.add = wx.CheckBox(parent=self.panel, id=wx.ID_ANY)
+        self.closeOnFinish = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
+                                         label=_("Close dialog on finish"))
+        self.closeOnFinish.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='closeDlg',
+                subkey='enabled'))
+
+        #
+        # buttons
+        #
+        # cancel
+        self.btn_close = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
+        self.btn_close.SetToolTipString(_("Close dialog"))
+        self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
+        # run
+        self.btn_run = wx.Button(
+            parent=self.panel,
+            id=wx.ID_OK,
+            label=_("&Import"))
+        self.btn_run.SetToolTipString(_("Import selected layers"))
+        self.btn_run.SetDefault()
+        self.btn_run.Bind(wx.EVT_BUTTON, self.OnRun)
+
+        self.Bind(wx.EVT_CLOSE, lambda evt: self.Destroy())
+
+        self.notebook = GNotebook(parent=self,
+                                  style=FN.FNB_FANCY_TABS | FN.FNB_BOTTOM |
+                                  FN.FNB_NO_X_BUTTON)
+
+        self.notebook.AddPage(page=self.panel,
+                              text=_('Source settings'),
+                              name='source')
+
+        self.createSettingsPage()
+
+    def createSettingsPage(self):
+
+        self._blackList = {
+            'enabled': True,
+            'items': {
+                self._getCommand(): {
+                    'params': self._getBlackListedParameters(),
+                    'flags': self._getBlackListedFlags()}}}
+
+        grass_task = gtask.parse_interface(self._getCommand(),
+                                           blackList=self._blackList)
+
+        self.advancedPagePanel = CmdPanel(
+            parent=self, giface=None, task=grass_task, frame=None)
+
+        self.notebook.AddPage(page=self.advancedPagePanel,
+                              text=_('Import settings'),
+                              name='settings')
+
+    def doLayout(self):
+        """Do layout"""
+        dialogSizer = wx.BoxSizer(wx.VERTICAL)
+
+        # dsn input
+        dialogSizer.Add(item=self.dsnInput, proportion=0,
+                        flag=wx.EXPAND)
+
+        #
+        # list of DXF layers
+        #
+        layerSizer = wx.StaticBoxSizer(self.layerBox, wx.HORIZONTAL)
+
+        layerSizer.Add(item=self.list, proportion=1,
+                       flag=wx.ALL | wx.EXPAND, border=5)
+
+        dialogSizer.Add(
+            item=layerSizer,
+            proportion=1,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
+
+        dialogSizer.Add(item=self.override, proportion=0,
+                        flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+
+        dialogSizer.Add(item=self.overwrite, proportion=0,
+                        flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+
+        dialogSizer.Add(item=self.add, proportion=0,
+                        flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+
+        dialogSizer.Add(item=self.closeOnFinish, proportion=0,
+                        flag=wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
+        #
+        # buttons
+        #
+        btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+
+        btnsizer.Add(item=self.btn_close, proportion=0,
+                     flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER,
+                     border=10)
+
+        btnsizer.Add(item=self.btn_run, proportion=0,
+                     flag=wx.RIGHT | wx.ALIGN_CENTER,
+                     border=10)
+
+        dialogSizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.ALIGN_RIGHT,
+            border=10)
+
+        # dialogSizer.SetSizeHints(self.panel)
+        self.panel.SetAutoLayout(True)
+        self.panel.SetSizer(dialogSizer)
+        dialogSizer.Fit(self.panel)
+
+        # auto-layout seems not work here - FIXME
+        size = wx.Size(globalvar.DIALOG_GSELECT_SIZE[0] + 225, 550)
+        self.SetMinSize(size)
+        self.SetSize((size.width, size.height + 100))
+        # width = self.GetSize()[0]
+        # self.list.SetColumnWidth(col = 1, width = width / 2 - 50)
+        self.Layout()
+
+    def _getCommand(self):
+        """Get command"""
+        raise NotImplementedError()
+
+    def _getBlackListedParameters(self):
+        """Get parameters which will not be showed in Settings page"""
+        raise NotImplementedError()
+
+    def _getBlackListedFlags(self):
+        """Get flags which will not be showed in Settings page"""
+        raise NotImplementedError()
+
+    def OnClose(self, event=None):
+        """Close dialog"""
+        self.Close()
+
+    def OnRun(self, event):
+        """Import/Link data (each layes as separate vector map)"""
+        pass
+
+    def AddLayers(self, returncode, cmd=None, userData=None):
+        """Add imported/linked layers into layer tree"""
+        if not self.add.IsChecked() or returncode != 0:
+            return
+
+        # TODO: if importing map creates more map the folowing does not work
+        # * do nothing if map does not exist or
+        # * try to determine names using regexp or
+        # * persuade import tools to report map names
+        self.commandId += 1
+        layer, output = self.list.GetLayers()[self.commandId][:2]
+
+        if '@' not in output:
+            name = output + '@' + grass.gisenv()['MAPSET']
+        else:
+            name = output
+
+        # add imported layers into layer tree
+        # an alternative would be emit signal (mapCreated) and (optionally)
+        # connect to this signal
+        llist = self._giface.GetLayerList()
+        if self.importType == 'gdal':
+            if userData:
+                nBands = int(userData.get('nbands', 1))
+            else:
+                nBands = 1
+
+            if UserSettings.Get(group='rasterLayer',
+                                key='opaque', subkey='enabled'):
+                nFlag = True
+            else:
+                nFlag = False
+
+            for i in range(1, nBands + 1):
+                nameOrig = name
+                if nBands > 1:
+                    mapName, mapsetName = name.split('@')
+                    mapName += '.%d' % i
+                    name = mapName + '@' + mapsetName
+
+                cmd = ['d.rast',
+                       'map=%s' % name]
+                if nFlag:
+                    cmd.append('-n')
+
+                llist.AddLayer(ltype='raster',
+                               name=name, checked=True,
+                               cmd=cmd)
+                name = nameOrig
+        else:
+            llist.AddLayer(ltype='vector',
+                           name=name, checked=True,
+                           cmd=['d.vect',
+                                'map=%s' % name] + GetDisplayVectSettings())
+
+        self._giface.GetMapWindow().ZoomToMap()
+
+    def OnAbort(self, event):
+        """Abort running import
+
+        .. todo::
+            not yet implemented
+        """
+        pass
+
+    def OnCmdDone(self, event):
+        """Do what has to be done after importing"""
+        pass
+
+    def _getLayersToReprojetion(self, projMatch_idx, grassName_idx):
+        """If there are layers with different projection from loation projection,
+           show dialog to user to explicitly select layers which will be reprojected..."""
+        differentProjLayers = []
+        data = self.list.GetData(checked=True)
+
+        for itm in data:
+
+            layerId = itm[-1]
+
+            # select only layers with different projetion
+            if self.layersData[layerId][projMatch_idx] == 0:
+                dt = [itm[0], itm[grassName_idx]]
+                differentProjLayers.append(tuple(dt))
+
+        layers = self.list.GetLayers()
+
+        if not self.link and \
+           differentProjLayers and \
+           not self.override.IsChecked(): # '-o' not in self.getSettingsPageCmd():
+
+            dlg = ReprojectionDialog(
+                parent=self,
+                giface=self._giface,
+                data=differentProjLayers)
+
+            ret = dlg.ShowModal()
+
+            if ret == wx.ID_OK:
+
+                # do not import unchecked layers
+                for itm in reversed(list(dlg.GetData(checked=False))):
+                    idx = itm[-1]
+                    layers.pop(idx)
+            else:
+                return None
+
+        return layers
+
+    def getSettingsPageCmd(self):
+
+        return self.advancedPagePanel.createCmd(
+            ignoreErrors=True, ignoreRequired=True)
+
+
+class GdalImportDialog(ImportDialog):
+
+    def __init__(self, parent, giface, link=False):
+        """Dialog for bulk import of various raster data
+
+        .. todo::
+            split importing logic from gui code
+
+        :param parent: parent window
+        :param link: True for linking data otherwise importing data
+        """
+        self._giface = giface
+        self.link = link
+
+        self.layersData = []
+
+        ImportDialog.__init__(self, parent, giface=giface, itype='gdal')
+        if link:
+            self.SetTitle(_("Link external raster data"))
+        else:
+            self.SetTitle(_("Import raster data"))
+
+        self.dsnInput = GdalSelect(parent=self, panel=self.panel,
+                                   ogr=False, link=link)
+        self.dsnInput.AttachSettings()
+        self.dsnInput.reloadDataRequired.connect(self.reload)
+
+        if link:
+            self.add.SetLabel(_("Add linked layers into layer tree"))
+        else:
+            self.add.SetLabel(_("Add imported layers into layer tree"))
+
+        self.add.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='addNewLayer',
+                subkey='enabled'))
+
+        if link:
+            self.btn_run.SetLabel(_("&Link"))
+            self.btn_run.SetToolTipString(_("Link selected layers"))
+        else:
+            self.btn_run.SetLabel(_("&Import"))
+            self.btn_run.SetToolTipString(_("Import selected layers"))
+
+        self.doLayout()
+
+    def reload(self, data, listData):
+
+        self.list.LoadData(listData)
+        self.layersData = data
+
+    def OnRun(self, event):
+        """Import/Link data (each layes as separate vector map)"""
+        self.commandId = -1
+        data = self.list.GetLayers()
+
+        data = self._getLayersToReprojetion(2, 3)
+
+        if data is None:
+            return
+
+        if not data:
+            GMessage(_("No layers selected. Operation canceled."),
+                     parent=self)
+            return
+
+        dsn = self.dsnInput.GetDsn()
+        ext = self.dsnInput.GetFormatExt()
+
+        for layer, output, listId in data:
+            userData = {}
+
+            if self.dsnInput.GetType() == 'dir':
+                idsn = os.path.join(dsn, layer)
+            else:
+                idsn = dsn
+
+            # check number of bands
+            nBandsStr = RunCommand('r.in.gdal',
+                                   flags='p',
+                                   input=idsn, read=True)
+            nBands = -1
+            if nBandsStr:
+                try:
+                    nBands = int(nBandsStr.rstrip('\n'))
+                except:
+                    pass
+            if nBands < 0:
+                GWarning(_("Unable to determine number of raster bands"),
+                         parent=self)
+                nBands = 1
+
+            userData['nbands'] = nBands
+            cmd = self.getSettingsPageCmd()
+            cmd.append('input=%s' % idsn)
+            cmd.append('output=%s' % output)
+
+            if self.override.IsChecked():
+                cmd.append('-o')
+
+            if self.overwrite.IsChecked():
+                cmd.append('--overwrite')
+
+            if UserSettings.Get(group='cmd', key='overwrite',
+                                subkey='enabled') and '--overwrite' not in cmd:
+                cmd.append('--overwrite')
+
+            # run in Layer Manager
+            self._giface.RunCmd(
+                cmd,
+                onDone=self.OnCmdDone,
+                userData=userData,
+                addLayer=False)
+
+    def OnCmdDone(self, event):
+        """Load layers and close if required"""
+        if not hasattr(self, 'AddLayers'):
+            return
+
+        self.AddLayers(event.returncode, event.cmd, event.userData)
+
+        if event.returncode == 0 and self.closeOnFinish.IsChecked():
+            self.Close()
+
+    def _getCommand(self):
+        """Get command"""
+        if self.link:
+            return 'r.external'
+        else:
+            return 'r.import'
+
+    def _getBlackListedParameters(self):
+        """Get flags which will not be showed in Settings page"""
+        return ['input', 'output']
+
+    def _getBlackListedFlags(self):
+        """Get flags which will not be showed in Settings page"""
+        return ['overwrite', 'o']
+
+
+class OgrImportDialog(ImportDialog):
+
+    def __init__(self, parent, giface, link=False):
+        """Dialog for bulk import of various vector data
+
+        .. todo::
+            split importing logic from gui code
+
+        :param parent: parent window
+        :param link: True for linking data otherwise importing data
+        """
+        self._giface = giface
+        self.link = link
+
+        self.layersData = []
+
+        ImportDialog.__init__(self, parent, giface=giface, itype='ogr')
+        if link:
+            self.SetTitle(_("Link external vector data"))
+        else:
+            self.SetTitle(_("Import vector data"))
+
+        self.dsnInput = GdalSelect(parent=self, panel=self.panel,
+                                   ogr=True, link=link)
+        self.dsnInput.AttachSettings()
+        self.dsnInput.reloadDataRequired.connect(self.reload)
+
+        if link:
+            self.add.SetLabel(_("Add linked layers into layer tree"))
+        else:
+            self.add.SetLabel(_("Add imported layers into layer tree"))
+
+        self.add.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='addNewLayer',
+                subkey='enabled'))
+
+        if link:
+            self.btn_run.SetLabel(_("&Link"))
+            self.btn_run.SetToolTipString(_("Link selected layers"))
+        else:
+            self.btn_run.SetLabel(_("&Import"))
+            self.btn_run.SetToolTipString(_("Import selected layers"))
+
+        self.doLayout()
+
+    def reload(self, data, listData):
+
+        self.list.LoadData(listData)
+        self.layersData = data
+
+    def OnRun(self, event):
+        """Import/Link data (each layes as separate vector map)"""
+        self.commandId = -1
+        data = self.list.GetLayers()
+
+        data = self._getLayersToReprojetion(3, 4)
+
+        if data is None:
+            return
+
+        if not data:
+            GMessage(_("No layers selected. Operation canceled."),
+                     parent=self)
+            return
+
+        dsn = self.dsnInput.GetDsn()
+        ext = self.dsnInput.GetFormatExt()
+
+        # determine data driver for PostGIS links
+        self.popOGR = False
+        if  self.dsnInput.GetType() == 'db' and \
+                self.dsnInput.GetFormat() == 'PostgreSQL' and \
+                'GRASS_VECTOR_OGR' not in os.environ:
+            self.popOGR = True
+            os.environ['GRASS_VECTOR_OGR'] = '1'
+
+        for layer, output, listId in data:
+            userData = {}
+
+            if ext and layer.rfind(ext) > -1:
+                layer = layer.replace('.' + ext, '')
+            if '|' in layer:
+                layer, geometry = layer.split('|', 1)
+            else:
+                geometry = None
+
+                # TODO
+                # if geometry:
+                #    cmd.append('geometry=%s' % geometry)
+
+            cmd = self.getSettingsPageCmd()
+            cmd.append('input=%s' % dsn)
+            cmd.append('layer=%s' % layer)
+            cmd.append('output=%s' % output)
+
+            if self.override.IsChecked():
+                cmd.append('-o')
+
+            if self.overwrite.IsChecked():
+                cmd.append('--overwrite')
+
+            # TODO options
+            if UserSettings.Get(group='cmd', key='overwrite',
+                                subkey='enabled') and '--overwrite' not in cmd:
+                cmd.append('--overwrite')
+
+            # run in Layer Manager
+            self._giface.RunCmd(
+                cmd,
+                onDone=self.OnCmdDone,
+                userData=userData,
+                addLayer=False)
+
+    def OnCmdDone(self, event):
+        """Load layers and close if required"""
+        if not hasattr(self, 'AddLayers'):
+            return
+
+        self.AddLayers(event.returncode, event.cmd, event.userData)
+
+        if self.popOGR:
+            os.environ.pop('GRASS_VECTOR_OGR')
+
+        if event.returncode == 0 and self.closeOnFinish.IsChecked():
+            self.Close()
+
+    def _getCommand(self):
+        """Get command"""
+        if self.link:
+            return 'v.external'
+        else:
+            return 'v.import'
+
+    def _getBlackListedParameters(self):
+        """Get parametrs which will not be showed in Settings page"""
+        return ['input', 'output', 'layer']
+
+    def _getBlackListedFlags(self):
+        """Get flags which will not be showed in Settings page"""
+        return ['overwrite', 'o', 'l', 'f']
+
+
+class GdalOutputDialog(wx.Dialog):
+
+    def __init__(self, parent, id=wx.ID_ANY, ogr=False,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, *kwargs):
+        """Dialog for setting output format for rasters/vectors
+
+        .. todo::
+            Split into GdalOutputDialog and OgrOutputDialog
+
+        :param parent: parent window
+        :param id: window id
+        :param ogr: True for OGR (vector) otherwise GDAL (raster)
+        :param style: window style
+        :param *kwargs: other wx.Dialog's arguments
+        """
+        self.parent = parent  # GMFrame
+        self.ogr = ogr
+        wx.Dialog.__init__(self, parent, id=id, style=style, *kwargs)
+        if self.ogr:
+            self.SetTitle(_("Define output format for vector data"))
+        else:
+            self.SetTitle(_("Define output format for raster data"))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        # buttons
+        self.btnCancel = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+        self.btnCancel.SetToolTipString(_("Close dialog"))
+        self.btnOk = wx.Button(parent=self.panel, id=wx.ID_OK)
+        self.btnOk.SetToolTipString(_("Set external format and close dialog"))
+        self.btnOk.SetDefault()
+
+        self.dsnInput = GdalSelect(parent=self, panel=self.panel,
+                                   ogr=ogr,
+                                   exclude=['file', 'protocol'], dest=True)
+        self.dsnInput.AttachSettings()
+
+        self.Bind(wx.EVT_BUTTON, self.OnCancel, self.btnCancel)
+        self.Bind(wx.EVT_BUTTON, self.OnOK, self.btnOk)
+
+        self._layout()
+
+    def _layout(self):
+        dialogSizer = wx.BoxSizer(wx.VERTICAL)
+
+        dialogSizer.Add(item=self.dsnInput, proportion=1,
+                        flag=wx.EXPAND)
+
+        btnSizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+        btnSizer.Add(item=self.btnCancel, proportion=0,
+                     flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER,
+                     border=10)
+        btnSizer.Add(item=self.btnOk, proportion=0,
+                     flag=wx.RIGHT | wx.ALIGN_CENTER,
+                     border=10)
+
+        dialogSizer.Add(
+            item=btnSizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.TOP | wx.ALIGN_RIGHT,
+            border=10)
+
+        self.panel.SetAutoLayout(True)
+        self.panel.SetSizer(dialogSizer)
+        dialogSizer.Fit(self.panel)
+
+        size = wx.Size(
+            globalvar.DIALOG_GSELECT_SIZE[0] + 225,
+            self.GetBestSize()[1] + 35)
+        self.SetMinSize(size)
+        self.SetSize((size.width, size.height))
+        self.Layout()
+
+    def OnCancel(self, event):
+        self.Destroy()
+
+    def OnOK(self, event):
+        if self.dsnInput.GetType() == 'native':
+            RunCommand('v.external.out',
+                       parent=self,
+                       flags='r')
+        else:
+            dsn = self.dsnInput.GetDsn()
+            frmt = self.dsnInput.GetFormat()
+            options = self.dsnInput.GetOptions()
+            if not dsn:
+                GMessage(_("No data source selected."), parent=self)
+                return
+
+            RunCommand('v.external.out',
+                       parent=self,
+                       output=dsn, format=frmt,
+                       options=options)
+        self.Close()
+
+
+class DxfImportDialog(ImportDialog):
+    """Dialog for bulk import of DXF layers"""
+
+    def __init__(self, parent, giface):
+        ImportDialog.__init__(self, parent, giface=giface, itype='dxf',
+                              title=_("Import DXF layers"))
+        self._giface = giface
+        self.dsnInput = filebrowse.FileBrowseButton(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            labelText='',
+            dialogTitle=_('Choose DXF file to import'),
+            buttonText=_('Browse'),
+            startDirectory=os.getcwd(),
+            fileMode=0,
+            changeCallback=self.OnSetDsn,
+            fileMask="DXF File (*.dxf)|*.dxf")
+
+        self.add.SetLabel(_("Add imported layers into layer tree"))
+
+        self.add.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='addNewLayer',
+                subkey='enabled'))
+
+        self.doLayout()
+
+    def _getCommand(self):
+        """Get command"""
+        return 'v.in.dxf'
+
+    def _getBlackListedParameters(self):
+
+        return ['input', 'output', 'layers']
+
+    def OnRun(self, event):
+        """Import/Link data (each layes as separate vector map)"""
+        data = self.list.GetLayers()
+        if not data:
+            GMessage(_("No layers selected."), parent=self)
+            return
+
+        # hide dialog
+        self.Hide()
+
+        inputDxf = self.dsnInput.GetValue()
+
+        for layer, output, itemId in data:
+
+            cmd = self.getSettingsPageCmd()
+            cmd.append('input=%s' % inputDxf)
+            cmd.append('layer=%s' % layer)
+            cmd.append('output=%s' % output)
+
+            for key in self.options.keys():
+                if self.options[key].IsChecked():
+                    cmd.append('-%s' % key)
+
+            if self.overwrite.IsChecked() or UserSettings.Get(
+                    group='cmd', key='overwrite', subkey='enabled'):
+                cmd.append('--overwrite')
+
+            # run in Layer Manager
+            self._giface.RunCmd(cmd, onDone=self.OnCmdDone, addLayer=False)
+
+    def OnCmdDone(self, event):
+        """Load layers and close if required"""
+        if not hasattr(self, 'AddLayers'):
+            return
+
+        self.AddLayers(event.returncode, event.cmd)
+
+        if self.closeOnFinish.IsChecked():
+            self.Close()
+
+    def OnSetDsn(self, event):
+        """Input DXF file defined, update list of layer widget"""
+        path = event.GetString()
+        if not path:
+            return
+
+        data = list()
+        ret = RunCommand('v.in.dxf',
+                         quiet=True,
+                         parent=self,
+                         read=True,
+                         flags='l',
+                         input=path)
+        if not ret:
+            self.list.LoadData()
+            return
+
+        for line in ret.splitlines():
+            layerId = line.split(':')[0].split(' ')[1]
+            layerName = line.split(':')[1].strip()
+            grassName = GetValidLayerName(layerName)
+            data.append((layerId, layerName.strip(), grassName.strip()))
+
+        self.list.LoadData(data)
+
+    def _getCommand(self):
+        """Get command"""
+        return 'v.in.dxf'
+
+    def _getBlackListedParameters(self):
+        """Get parametrs which will not be showed in Settings page"""
+        return ['input', 'output', 'layers']
+
+    def _getBlackListedFlags(self):
+        """Get flags which will not be showed in Settings page"""
+        return ['overwrite']
+
+
+class ReprojectionDialog(wx.Dialog):
+    """ """
+
+    def __init__(self, parent, giface, data,
+                 id=wx.ID_ANY, title=_("Reprojection"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER):
+        self.parent = parent    # GMFrame
+        self._giface = giface  # used to add layers
+
+        wx.Dialog.__init__(self, parent, id, title, style=style,
+                           name="MultiImportDialog")
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
+
+        # list of layers
+        columns = [_('Layer id'),
+                   _('Name for output GRASS map')]
+
+        self.list = GListCtrl(parent=self.panel)
+
+        for i in range(len(columns)):
+            self.list.InsertColumn(i, columns[i])
+
+        width = (65, 180)
+
+        for i in range(len(width)):
+            self.list.SetColumnWidth(col=i, width=width[i])
+
+        self.list.LoadData(data)
+
+        self.layerBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY)
+
+        self.labelText = wx.StaticText(parent=self.panel, id=wx.ID_ANY, label=_(
+            "Projection of following layers do not match with projection of current location. "))
+
+        label = _("Layers to be reprojected")
+        self.layerBox.SetLabel(" %s - %s " %
+                               (label, _("right click to (un)select all")))
+
+        #
+        # buttons
+        #
+        # cancel
+        self.btn_close = wx.Button(parent=self.panel, id=wx.ID_CANCEL)
+
+        # run
+        self.btn_run = wx.Button(
+            parent=self.panel,
+            id=wx.ID_OK,
+            label=_("&Import && reproject"))
+        self.btn_run.SetToolTipString(_("Reproject selected layers"))
+        self.btn_run.SetDefault()
+
+        self.doLayout()
+
+    def doLayout(self):
+        """Do layout"""
+        dialogSizer = wx.BoxSizer(wx.VERTICAL)
+
+        dialogSizer.Add(item=self.labelText,
+                        flag=wx.ALL | wx.EXPAND, border=5)
+
+        layerSizer = wx.StaticBoxSizer(self.layerBox, wx.HORIZONTAL)
+
+        layerSizer.Add(item=self.list, proportion=1,
+                       flag=wx.ALL | wx.EXPAND, border=5)
+
+        dialogSizer.Add(
+            item=layerSizer,
+            proportion=1,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
+
+        #
+        # buttons
+        #
+        btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+
+        btnsizer.Add(item=self.btn_close, proportion=0,
+                     flag=wx.LEFT | wx.RIGHT | wx.ALIGN_CENTER,
+                     border=10)
+
+        btnsizer.Add(item=self.btn_run, proportion=0,
+                     flag=wx.RIGHT | wx.ALIGN_CENTER,
+                     border=10)
+
+        dialogSizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.BOTTOM | wx.ALIGN_RIGHT,
+            border=10)
+
+        self.panel.SetSizer(dialogSizer)
+        dialogSizer.Fit(self.panel)
+
+        self.Layout()
+
+    def GetData(self, checked):
+
+        return self.list.GetData(checked)
diff --git a/gui/wxpython/modules/mapsets_picker.py b/gui/wxpython/modules/mapsets_picker.py
index fabeb10..33dabeb 100755
--- a/gui/wxpython/modules/mapsets_picker.py
+++ b/gui/wxpython/modules/mapsets_picker.py
@@ -2,6 +2,9 @@
 
 import wx
 
+from grass.script.setup import set_gui_path
+set_gui_path()
+
 from core.gcmd import RunCommand
 from core.utils import _
 from gui_core.preferences import MapsetAccess
@@ -10,15 +13,15 @@ from gui_core.preferences import MapsetAccess
 def main():
     app = wx.App()
 
-    dlg = MapsetAccess(parent = None)
+    dlg = MapsetAccess(parent=None)
     dlg.CenterOnScreen()
 
     if dlg.ShowModal() == wx.ID_OK:
         ms = dlg.GetMapsets()
         RunCommand('g.mapsets',
-                   parent = None,
-                   mapset = '%s' % ','.join(ms),
-                   operation = 'set')
+                   parent=None,
+                   mapset='%s' % ','.join(ms),
+                   operation='set')
 
     dlg.Destroy()
 
diff --git a/gui/wxpython/modules/mcalc_builder.py b/gui/wxpython/modules/mcalc_builder.py
index d81ead2..0a71e18 100644
--- a/gui/wxpython/modules/mcalc_builder.py
+++ b/gui/wxpython/modules/mcalc_builder.py
@@ -22,21 +22,23 @@ import re
 import wx
 import grass.script as grass
 
-from core             import globalvar
-from core.gcmd        import GError, RunCommand
-from core.giface      import StandaloneGrassInterface
+from core import globalvar
+from core.gcmd import GError, RunCommand
+from core.giface import StandaloneGrassInterface
 from core.utils import _
 from gui_core.gselect import Select
-from gui_core.forms   import GUI
+from gui_core.forms import GUI
 from gui_core.widgets import IntegerValidator
-from core.settings    import UserSettings
+from core.settings import UserSettings
+
 
 class MapCalcFrame(wx.Frame):
     """Mapcalc Frame class. Calculator-style window to create and run
     r(3).mapcalc statements.
     """
-    def __init__(self, parent, giface, cmd, id = wx.ID_ANY,
-                 style = wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, giface, cmd, id=wx.ID_ANY,
+                 style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER, **kwargs):
         self.parent = parent
         self._giface = giface
 
@@ -44,7 +46,7 @@ class MapCalcFrame(wx.Frame):
             self.log = self.parent.GetLogWindow()
         else:
             self.log = None
-        
+
         # grass command
         self.cmd = cmd
 
@@ -54,11 +56,16 @@ class MapCalcFrame(wx.Frame):
         if self.cmd == 'r3.mapcalc':
             self.rast3d = True
             title = _('GRASS GIS 3D Raster Map Calculator')
-            
-        wx.Frame.__init__(self, parent, id = id, title = title, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        
-        self.panel = wx.Panel(parent = self, id = wx.ID_ANY)
+
+        wx.Frame.__init__(self, parent, id=id, title=title, **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
+        self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
         self.CreateStatusBar()
 
         #
@@ -66,47 +73,47 @@ class MapCalcFrame(wx.Frame):
         #
         self.heading = _('mapcalc statement')
         self.funct_dict = {
-            'abs(x)':'abs()',
-            'acos(x)':'acos()',
-            'asin(x)':'asin()',
-            'atan(x)':'atan()',
-            'atan(x,y)':'atan( , )',
-            'cos(x)':'cos()',
-            'double(x)':'double()',
-            'eval([x,y,...,]z)':'eval()',
-            'exp(x)':'exp()',
-            'exp(x,y)':'exp( , )',
-            'float(x)':'float()',
-            'graph(x,x1,y1[x2,y2..])':'graph( , , )',
-            'if(x)':'if()',
-            'if(x,a)':'if( , )',
-            'if(x,a,b)':'if( , , )',
-            'if(x,a,b,c)':'if( , , , )',
-            'int(x)':'int()',
-            'isnull(x)':'isnull()',
-            'log(x)':'log(',
-            'log(x,b)':'log( , )',
-            'max(x,y[,z...])':'max( , )',
-            'median(x,y[,z...])':'median( , )',
-            'min(x,y[,z...])':'min( , )',
-            'mode(x,y[,z...])':'mode( , )',
-            'not(x)':'not()',
-            'pow(x,y)':'pow( , )',
-            'rand(a,b)':'rand( , )',
-            'round(x)':'round()',
-            'sin(x)':'sin()',
-            'sqrt(x)':'sqrt()',
-            'tan(x)':'tan()',
-            'xor(x,y)':'xor( , )',
-            'row()':'row()',
-            'col()':'col()',
-            'x()':'x()',
-            'y()':'y()',
-            'ewres()':'ewres()',
-            'nsres()':'nsres()',
-            'null()':'null()'
-            }
-        
+            'abs(x)': 'abs()',
+            'acos(x)': 'acos()',
+            'asin(x)': 'asin()',
+            'atan(x)': 'atan()',
+            'atan(x,y)': 'atan( , )',
+            'cos(x)': 'cos()',
+            'double(x)': 'double()',
+            'eval([x,y,...,]z)': 'eval()',
+            'exp(x)': 'exp()',
+            'exp(x,y)': 'exp( , )',
+            'float(x)': 'float()',
+            'graph(x,x1,y1[x2,y2..])': 'graph( , , )',
+            'if(x)': 'if()',
+            'if(x,a)': 'if( , )',
+            'if(x,a,b)': 'if( , , )',
+            'if(x,a,b,c)': 'if( , , , )',
+            'int(x)': 'int()',
+            'isnull(x)': 'isnull()',
+            'log(x)': 'log(',
+            'log(x,b)': 'log( , )',
+            'max(x,y[,z...])': 'max( , )',
+            'median(x,y[,z...])': 'median( , )',
+            'min(x,y[,z...])': 'min( , )',
+            'mode(x,y[,z...])': 'mode( , )',
+            'not(x)': 'not()',
+            'pow(x,y)': 'pow( , )',
+            'rand(a,b)': 'rand( , )',
+            'round(x)': 'round()',
+            'sin(x)': 'sin()',
+            'sqrt(x)': 'sqrt()',
+            'tan(x)': 'tan()',
+            'xor(x,y)': 'xor( , )',
+            'row()': 'row()',
+            'col()': 'col()',
+            'x()': 'x()',
+            'y()': 'y()',
+            'ewres()': 'ewres()',
+            'nsres()': 'nsres()',
+            'null()': 'null()'
+        }
+
         if self.rast3d:
             self.funct_dict['z()'] = 'z()'
             self.funct_dict['tbres()'] = 'tbres()'
@@ -114,147 +121,189 @@ class MapCalcFrame(wx.Frame):
         else:
             element = 'cell'
 
-        # characters which can be in raster map name but the map name must be then quoted
+        # characters which can be in raster map name but the map name must be
+        # then quoted
         self.charactersToQuote = '+-&!<>%~?^|'
-        # stores last typed map name in Select widget to distinguish typing from selection
+        # stores last typed map name in Select widget to distinguish typing
+        # from selection
         self.lastMapName = ''
-        
-        self.operatorBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+
+        self.operatorBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                         label=" %s " % _('Operators'))
-        self.outputBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+        self.outputBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                       label=" %s " % _('Output'))
-        self.operandBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+        self.operandBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                        label=" %s " % _('Operands'))
-        self.expressBox = wx.StaticBox(parent = self.panel, id = wx.ID_ANY,
+        self.expressBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
                                        label=" %s " % _('Expression'))
-        
+
         #
         # Buttons
         #
-        self.btn_clear = wx.Button(parent = self.panel, id = wx.ID_CLEAR)
-        self.btn_help = wx.Button(parent = self.panel, id = wx.ID_HELP)
-        self.btn_run = wx.Button(parent = self.panel, id = wx.ID_ANY, label = _("&Run"))
+        self.btn_clear = wx.Button(parent=self.panel, id=wx.ID_CLEAR)
+        self.btn_help = wx.Button(parent=self.panel, id=wx.ID_HELP)
+        self.btn_run = wx.Button(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            label=_("&Run"))
         self.btn_run.SetForegroundColour(wx.Colour(35, 142, 35))
         self.btn_run.SetDefault()
-        self.btn_close = wx.Button(parent = self.panel, id = wx.ID_CLOSE)
-        self.btn_save = wx.Button(parent = self.panel, id = wx.ID_SAVE)
+        self.btn_close = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
+        self.btn_save = wx.Button(parent=self.panel, id=wx.ID_SAVE)
         self.btn_save.SetToolTipString(_('Save expression to file'))
-        self.btn_load = wx.Button(parent = self.panel, id = wx.ID_ANY,
-                                  label = _("&Load"))
+        self.btn_load = wx.Button(parent=self.panel, id=wx.ID_ANY,
+                                  label=_("&Load"))
         self.btn_load.SetToolTipString(_('Load expression from file'))
         self.btn_copy = wx.Button(parent=self.panel, id=wx.ID_COPY)
-        self.btn_copy.SetToolTipString(_("Copy the current command string to the clipboard"))
-        
-        self.btn = dict()        
-        self.btn['pow'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "^")
+        self.btn_copy.SetToolTipString(
+            _("Copy the current command string to the clipboard"))
+
+        self.btn = dict()
+        self.btn['pow'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="^")
         self.btn['pow'].SetToolTipString(_('exponent'))
-        self.btn['div'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "/")
+        self.btn['div'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="/")
         self.btn['div'].SetToolTipString(_('divide'))
-        self.btn['add'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "+")
+        self.btn['add'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="+")
         self.btn['add'].SetToolTipString(_('add'))
-        self.btn['minus'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "-")
+        self.btn['minus'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="-")
         self.btn['minus'].SetToolTipString(_('subtract'))
-        self.btn['mod'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "%")
+        self.btn['mod'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="%")
         self.btn['mod'].SetToolTipString(_('modulus'))
-        self.btn['mult'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "*")
+        self.btn['mult'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="*")
         self.btn['mult'].SetToolTipString(_('multiply'))
 
-        self.btn['parenl'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "(") 
-        self.btn['parenr'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = ")")
-        self.btn['lshift'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "<<")
+        self.btn['parenl'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="(")
+        self.btn['parenr'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label=")")
+        self.btn['lshift'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="<<")
         self.btn['lshift'].SetToolTipString(_('left shift'))
-        self.btn['rshift'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = ">>")
+        self.btn['rshift'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label=">>")
         self.btn['rshift'].SetToolTipString(_('right shift'))
-        self.btn['rshiftu'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = ">>>")
+        self.btn['rshiftu'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label=">>>")
         self.btn['rshiftu'].SetToolTipString(_('right shift (unsigned)'))
-        self.btn['gt'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = ">")
+        self.btn['gt'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label=">")
         self.btn['gt'].SetToolTipString(_('greater than'))
-        self.btn['gteq'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = ">=")
+        self.btn['gteq'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label=">=")
         self.btn['gteq'].SetToolTipString(_('greater than or equal to'))
-        self.btn['lt'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "<")
+        self.btn['lt'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="<")
         self.btn['lt'].SetToolTipString(_('less than'))
-        self.btn['lteq'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "<=")
+        self.btn['lteq'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="<=")
         self.btn['lteq'].SetToolTipString(_('less than or equal to'))
-        self.btn['eq'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "==")
+        self.btn['eq'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="==")
         self.btn['eq'].SetToolTipString(_('equal to'))
-        self.btn['noteq'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "!=")
+        self.btn['noteq'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="!=")
         self.btn['noteq'].SetToolTipString(_('not equal to'))
 
-        self.btn['compl'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "~")
+        self.btn['compl'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="~")
         self.btn['compl'].SetToolTipString(_('one\'s complement'))
-        self.btn['not'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "!")
+        self.btn['not'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="!")
         self.btn['not'].SetToolTipString(_('NOT'))
-        self.btn['andbit'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = '&&')
+        self.btn['andbit'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label='&&')
         self.btn['andbit'].SetToolTipString(_('bitwise AND'))
-        self.btn['orbit'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "|")
+        self.btn['orbit'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="|")
         self.btn['orbit'].SetToolTipString(_('bitwise OR'))
-        self.btn['and'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "&&&&")
+        self.btn['and'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="&&&&")
         self.btn['and'].SetToolTipString(_('logical AND'))
-        self.btn['andnull'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "&&&&&&")
+        self.btn['andnull'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="&&&&&&")
         self.btn['andnull'].SetToolTipString(_('logical AND (ignores NULLs)'))
-        self.btn['or'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "||")
+        self.btn['or'] = wx.Button(parent=self.panel, id=wx.ID_ANY, label="||")
         self.btn['or'].SetToolTipString(_('logical OR'))
-        self.btn['ornull'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "|||")
+        self.btn['ornull'] = wx.Button(
+            parent=self.panel, id=wx.ID_ANY, label="|||")
         self.btn['ornull'].SetToolTipString(_('logical OR (ignores NULLs)'))
-        self.btn['cond'] = wx.Button(parent = self.panel, id = wx.ID_ANY, label = "a ? b : c") 
+        self.btn['cond'] = wx.Button(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            label="a ? b : c")
         self.btn['cond'].SetToolTipString(_('conditional'))
-        
+
         #
         # Text area
         #
-        self.text_mcalc = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, size = (-1, 75),
-                                      style = wx.TE_MULTILINE)
+        self.text_mcalc = wx.TextCtrl(
+            parent=self.panel, id=wx.ID_ANY, size=(-1, 75),
+            style=wx.TE_MULTILINE)
         wx.CallAfter(self.text_mcalc.SetFocus)
-        
+
         #
         # Map and function insertion text and ComboBoxes
-        self.newmaplabel = wx.StaticText(parent = self.panel, id = wx.ID_ANY)
+        self.newmaplabel = wx.StaticText(parent=self.panel, id=wx.ID_ANY)
         if self.rast3d:
-            self.newmaplabel.SetLabel(_('Name for new 3D raster map to create'))
+            self.newmaplabel.SetLabel(
+                _('Name for new 3D raster map to create'))
         else:
             self.newmaplabel.SetLabel(_('Name for new raster map to create'))
-        self.newmaptxt = wx.TextCtrl(parent = self.panel, id = wx.ID_ANY, size=(250, -1))
-        self.mapsellabel = wx.StaticText(parent = self.panel, id = wx.ID_ANY)
+        self.newmaptxt = wx.TextCtrl(
+            parent=self.panel, id=wx.ID_ANY, size=(250, -1))
+        self.mapsellabel = wx.StaticText(parent=self.panel, id=wx.ID_ANY)
         if self.rast3d:
             self.mapsellabel.SetLabel(_('Insert existing 3D raster map'))
         else:
             self.mapsellabel.SetLabel(_('Insert existing raster map'))
-        self.mapselect = Select(parent = self.panel, id = wx.ID_ANY, size = (250, -1),
-                                type = element, multiple = False)
-        self.functlabel = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                        label = _('Insert mapcalc function'))
-        self.function = wx.ComboBox(parent = self.panel, id = wx.ID_ANY, 
-                                    size = (250, -1), choices = sorted(self.funct_dict.keys()),
-                                    style = wx.CB_DROPDOWN |
-                                    wx.CB_READONLY | wx.TE_PROCESS_ENTER)
-        
-        self.overwrite = wx.CheckBox(parent = self.panel, id = wx.ID_ANY,
-                                     label=_("Allow output files to overwrite existing files"))
-        self.overwrite.SetValue(UserSettings.Get(group='cmd', key='overwrite', subkey='enabled'))
-
-        self.randomSeed = wx.CheckBox(parent=self.panel,
-                                      label=_("Generate random seed for rand()"))
-        self.randomSeedStaticText = wx.StaticText(parent=self.panel, label=_("Seed:"))
+        self.mapselect = Select(
+            parent=self.panel, id=wx.ID_ANY, size=(
+                250, -1), type=element, multiple=False)
+        self.functlabel = wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                        label=_('Insert mapcalc function'))
+        self.function = wx.ComboBox(
+            parent=self.panel, id=wx.ID_ANY, size=(250, -1),
+            choices=sorted(self.funct_dict.keys()),
+            style=wx.CB_DROPDOWN | wx.CB_READONLY | wx.TE_PROCESS_ENTER)
+
+        self.overwrite = wx.CheckBox(
+            parent=self.panel, id=wx.ID_ANY,
+            label=_("Allow output files to overwrite existing files"))
+        self.overwrite.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='overwrite',
+                subkey='enabled'))
+
+        self.randomSeed = wx.CheckBox(
+            parent=self.panel,
+            label=_("Generate random seed for rand()"))
+        self.randomSeedStaticText = wx.StaticText(
+            parent=self.panel, label=_("Seed:"))
         self.randomSeedText = wx.TextCtrl(parent=self.panel, size=(100, -1),
                                           validator=IntegerValidator())
-        self.randomSeedText.SetToolTipString(_("Integer seed for rand() function"))
+        self.randomSeedText.SetToolTipString(
+            _("Integer seed for rand() function"))
         self.randomSeed.SetValue(True)
         self.randomSeedStaticText.Disable()
         self.randomSeedText.Disable()
-        
 
-        self.addbox = wx.CheckBox(parent=self.panel,
-                                  label=_('Add created raster map into layer tree'), style = wx.NO_BORDER)
-        self.addbox.SetValue(UserSettings.Get(group='cmd', key='addNewLayer', subkey='enabled'))
+        self.addbox = wx.CheckBox(
+            parent=self.panel,
+            label=_('Add created raster map into layer tree'),
+            style=wx.NO_BORDER)
+        self.addbox.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='addNewLayer',
+                subkey='enabled'))
         if not self.parent or self.parent.GetName() != 'LayerManager':
             self.addbox.Hide()
-        
+
         #
         # Bindings
         #
         for btn in self.btn.keys():
             self.btn[btn].Bind(wx.EVT_BUTTON, self.AddMark)
-        
+
         self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btn_clear.Bind(wx.EVT_BUTTON, self.OnClear)
         self.btn_run.Bind(wx.EVT_BUTTON, self.OnMCalcRun)
@@ -262,7 +311,7 @@ class MapCalcFrame(wx.Frame):
         self.btn_save.Bind(wx.EVT_BUTTON, self.OnSaveExpression)
         self.btn_load.Bind(wx.EVT_BUTTON, self.OnLoadExpression)
         self.btn_copy.Bind(wx.EVT_BUTTON, self.OnCopy)
-        
+
         # self.mapselect.Bind(wx.EVT_TEXT, self.OnSelectTextEvt)
         self.mapselect.Bind(wx.EVT_TEXT, self.OnSelect)
         self.function.Bind(wx.EVT_COMBOBOX, self._return_funct)
@@ -280,120 +329,123 @@ class MapCalcFrame(wx.Frame):
         # workaround for http://trac.wxwidgets.org/ticket/13628
         self.SetSize(self.GetBestSize())
 
-    def _return_funct(self,event):
+    def _return_funct(self, event):
         i = event.GetString()
         self._addSomething(self.funct_dict[i])
-        
+
         # reset
         win = self.FindWindowById(event.GetId())
         win.SetValue('')
-        
+
     def _layout(self):
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         controlSizer = wx.BoxSizer(wx.HORIZONTAL)
         operatorSizer = wx.StaticBoxSizer(self.operatorBox, wx.HORIZONTAL)
         outOpeSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         buttonSizer1 = wx.GridBagSizer(5, 1)
-        buttonSizer1.Add(item = self.btn['add'], pos = (0,0))
-        buttonSizer1.Add(item = self.btn['minus'], pos = (0,1))
-        buttonSizer1.Add(item = self.btn['mod'], pos = (5,0))
-        buttonSizer1.Add(item = self.btn['mult'], pos = (1,0))
-        buttonSizer1.Add(item = self.btn['div'], pos = (1,1))
-        buttonSizer1.Add(item = self.btn['pow'], pos = (5,1))
-        buttonSizer1.Add(item = self.btn['gt'], pos = (2,0))
-        buttonSizer1.Add(item = self.btn['gteq'], pos = (2,1))
-        buttonSizer1.Add(item = self.btn['eq'], pos = (4,0))
-        buttonSizer1.Add(item = self.btn['lt'], pos = (3,0))
-        buttonSizer1.Add(item = self.btn['lteq'], pos = (3,1))
-        buttonSizer1.Add(item = self.btn['noteq'], pos = (4,1))
+        buttonSizer1.Add(item=self.btn['add'], pos=(0, 0))
+        buttonSizer1.Add(item=self.btn['minus'], pos=(0, 1))
+        buttonSizer1.Add(item=self.btn['mod'], pos=(5, 0))
+        buttonSizer1.Add(item=self.btn['mult'], pos=(1, 0))
+        buttonSizer1.Add(item=self.btn['div'], pos=(1, 1))
+        buttonSizer1.Add(item=self.btn['pow'], pos=(5, 1))
+        buttonSizer1.Add(item=self.btn['gt'], pos=(2, 0))
+        buttonSizer1.Add(item=self.btn['gteq'], pos=(2, 1))
+        buttonSizer1.Add(item=self.btn['eq'], pos=(4, 0))
+        buttonSizer1.Add(item=self.btn['lt'], pos=(3, 0))
+        buttonSizer1.Add(item=self.btn['lteq'], pos=(3, 1))
+        buttonSizer1.Add(item=self.btn['noteq'], pos=(4, 1))
 
         buttonSizer2 = wx.GridBagSizer(5, 1)
-        buttonSizer2.Add(item = self.btn['and'], pos = (0,0))
-        buttonSizer2.Add(item = self.btn['andbit'], pos = (1,0))
-        buttonSizer2.Add(item = self.btn['andnull'], pos = (2,0))
-        buttonSizer2.Add(item = self.btn['or'], pos = (0,1))
-        buttonSizer2.Add(item = self.btn['orbit'], pos = (1,1))
-        buttonSizer2.Add(item = self.btn['ornull'], pos = (2,1))
-        buttonSizer2.Add(item = self.btn['lshift'], pos = (3,0))
-        buttonSizer2.Add(item = self.btn['rshift'], pos = (3,1))
-        buttonSizer2.Add(item = self.btn['rshiftu'], pos = (4,0))
-        buttonSizer2.Add(item = self.btn['cond'], pos = (5,0))
-        buttonSizer2.Add(item = self.btn['compl'], pos = (5,1))
-        buttonSizer2.Add(item = self.btn['not'], pos = (4,1))
+        buttonSizer2.Add(item=self.btn['and'], pos=(0, 0))
+        buttonSizer2.Add(item=self.btn['andbit'], pos=(1, 0))
+        buttonSizer2.Add(item=self.btn['andnull'], pos=(2, 0))
+        buttonSizer2.Add(item=self.btn['or'], pos=(0, 1))
+        buttonSizer2.Add(item=self.btn['orbit'], pos=(1, 1))
+        buttonSizer2.Add(item=self.btn['ornull'], pos=(2, 1))
+        buttonSizer2.Add(item=self.btn['lshift'], pos=(3, 0))
+        buttonSizer2.Add(item=self.btn['rshift'], pos=(3, 1))
+        buttonSizer2.Add(item=self.btn['rshiftu'], pos=(4, 0))
+        buttonSizer2.Add(item=self.btn['cond'], pos=(5, 0))
+        buttonSizer2.Add(item=self.btn['compl'], pos=(5, 1))
+        buttonSizer2.Add(item=self.btn['not'], pos=(4, 1))
 
         outputSizer = wx.StaticBoxSizer(self.outputBox, wx.VERTICAL)
-        outputSizer.Add(item = self.newmaplabel,
-                        flag = wx.ALIGN_CENTER | wx.BOTTOM | wx.TOP, border = 5)
-        outputSizer.Add(item = self.newmaptxt,
-                        flag = wx.EXPAND)
-        
+        outputSizer.Add(item=self.newmaplabel,
+                        flag=wx.ALIGN_CENTER | wx.BOTTOM | wx.TOP, border=5)
+        outputSizer.Add(item=self.newmaptxt,
+                        flag=wx.EXPAND)
+
         operandSizer = wx.StaticBoxSizer(self.operandBox, wx.HORIZONTAL)
-        
+
         buttonSizer3 = wx.GridBagSizer(7, 1)
-        buttonSizer3.Add(item = self.functlabel, pos = (0,0),
-                         span = (1,2), flag = wx.ALIGN_CENTER)
-        buttonSizer3.Add(item = self.function, pos = (1,0),
-                         span = (1,2))                         
-        buttonSizer3.Add(item = self.mapsellabel, pos = (2,0),
-                         span = (1,2), flag = wx.ALIGN_CENTER)
-        buttonSizer3.Add(item = self.mapselect, pos = (3,0),
-                         span = (1,2))
+        buttonSizer3.Add(item=self.functlabel, pos=(0, 0),
+                         span=(1, 2), flag=wx.ALIGN_CENTER)
+        buttonSizer3.Add(item=self.function, pos=(1, 0),
+                         span=(1, 2))
+        buttonSizer3.Add(item=self.mapsellabel, pos=(2, 0),
+                         span=(1, 2), flag=wx.ALIGN_CENTER)
+        buttonSizer3.Add(item=self.mapselect, pos=(3, 0),
+                         span=(1, 2))
         threebutton = wx.GridBagSizer(1, 2)
-        threebutton.Add(item = self.btn['parenl'], pos = (0,0),
-                         span = (1,1), flag = wx.ALIGN_LEFT)
-        threebutton.Add(item = self.btn['parenr'], pos = (0,1),
-                         span = (1,1), flag = wx.ALIGN_CENTER)
-        threebutton.Add(item = self.btn_clear, pos = (0,2),
-                         span = (1,1), flag = wx.ALIGN_RIGHT)
-        buttonSizer3.Add(item = threebutton, pos = (4,0),
-                         span = (1,1), flag = wx.ALIGN_CENTER)
+        threebutton.Add(item=self.btn['parenl'], pos=(0, 0),
+                        span=(1, 1), flag=wx.ALIGN_LEFT)
+        threebutton.Add(item=self.btn['parenr'], pos=(0, 1),
+                        span=(1, 1), flag=wx.ALIGN_CENTER)
+        threebutton.Add(item=self.btn_clear, pos=(0, 2),
+                        span=(1, 1), flag=wx.ALIGN_RIGHT)
+        buttonSizer3.Add(item=threebutton, pos=(4, 0),
+                         span=(1, 1), flag=wx.ALIGN_CENTER)
 
         buttonSizer4 = wx.BoxSizer(wx.HORIZONTAL)
-        buttonSizer4.Add(item = self.btn_load,
-                         flag = wx.ALL, border = 5)
-        buttonSizer4.Add(item = self.btn_save,
-                         flag = wx.ALL, border = 5)                         
-        buttonSizer4.Add(item = self.btn_copy,
-                         flag = wx.ALL, border = 5)                         
+        buttonSizer4.Add(item=self.btn_load,
+                         flag=wx.ALL, border=5)
+        buttonSizer4.Add(item=self.btn_save,
+                         flag=wx.ALL, border=5)
+        buttonSizer4.Add(item=self.btn_copy,
+                         flag=wx.ALL, border=5)
         buttonSizer4.AddSpacer(30)
-        buttonSizer4.Add(item = self.btn_help,
-                         flag = wx.ALL, border = 5)
-        buttonSizer4.Add(item = self.btn_run,
-                         flag = wx.ALL, border = 5)
-        buttonSizer4.Add(item = self.btn_close,
-                         flag = wx.ALL, border = 5)
-        
-        operatorSizer.Add(item = buttonSizer1, proportion = 0,
-                          flag = wx.ALL | wx.EXPAND, border = 5)
-        operatorSizer.Add(item = buttonSizer2, proportion = 0,
-                          flag = wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND, border = 5)
-        
-        operandSizer.Add(item = buttonSizer3, proportion = 0,
-                         flag = wx.TOP | wx.BOTTOM | wx.RIGHT, border = 5)
-        
-        controlSizer.Add(item = operatorSizer, proportion = 1,
-                         flag = wx.RIGHT | wx.EXPAND, border = 5)
-        outOpeSizer.Add(item = outputSizer, proportion = 0,
-                         flag = wx.EXPAND)
-        outOpeSizer.Add(item = operandSizer, proportion = 1,
-                         flag = wx.EXPAND | wx.TOP, border = 5)
-        controlSizer.Add(item = outOpeSizer, proportion = 0,
-                         flag = wx.EXPAND)
+        buttonSizer4.Add(item=self.btn_help,
+                         flag=wx.ALL, border=5)
+        buttonSizer4.Add(item=self.btn_run,
+                         flag=wx.ALL, border=5)
+        buttonSizer4.Add(item=self.btn_close,
+                         flag=wx.ALL, border=5)
+
+        operatorSizer.Add(item=buttonSizer1, proportion=0,
+                          flag=wx.ALL | wx.EXPAND, border=5)
+        operatorSizer.Add(
+            item=buttonSizer2,
+            proportion=0,
+            flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND,
+            border=5)
+
+        operandSizer.Add(item=buttonSizer3, proportion=0,
+                         flag=wx.TOP | wx.BOTTOM | wx.RIGHT, border=5)
+
+        controlSizer.Add(item=operatorSizer, proportion=1,
+                         flag=wx.RIGHT | wx.EXPAND, border=5)
+        outOpeSizer.Add(item=outputSizer, proportion=0,
+                        flag=wx.EXPAND)
+        outOpeSizer.Add(item=operandSizer, proportion=1,
+                        flag=wx.EXPAND | wx.TOP, border=5)
+        controlSizer.Add(item=outOpeSizer, proportion=0,
+                         flag=wx.EXPAND)
 
         expressSizer = wx.StaticBoxSizer(self.expressBox, wx.HORIZONTAL)
-        expressSizer.Add(item = self.text_mcalc, proportion = 1,
-                         flag = wx.EXPAND)
-
-        sizer.Add(item = controlSizer, proportion = 0,
-                  flag = wx.EXPAND | wx.ALL,
-                  border = 5)        
-        sizer.Add(item = expressSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.LEFT | wx.RIGHT,
-                  border = 5)
-        sizer.Add(item = buttonSizer4, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL, border = 3)
+        expressSizer.Add(item=self.text_mcalc, proportion=1,
+                         flag=wx.EXPAND)
+
+        sizer.Add(item=controlSizer, proportion=0,
+                  flag=wx.EXPAND | wx.ALL,
+                  border=5)
+        sizer.Add(item=expressSizer, proportion=1,
+                  flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
+                  border=5)
+        sizer.Add(item=buttonSizer4, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL, border=3)
 
         randomSizer = wx.BoxSizer(wx.HORIZONTAL)
         randomSizer.Add(item=self.randomSeed, proportion=0,
@@ -405,52 +457,78 @@ class MapCalcFrame(wx.Frame):
                   flag=wx.LEFT | wx.RIGHT,
                   border=5)
 
-        sizer.Add(item = self.overwrite, proportion = 0,
-                  flag = wx.LEFT | wx.RIGHT,
-                  border = 5)
+        sizer.Add(item=self.overwrite, proportion=0,
+                  flag=wx.LEFT | wx.RIGHT,
+                  border=5)
         if self.addbox.IsShown():
-            sizer.Add(item = self.addbox, proportion = 0,
-                      flag = wx.LEFT | wx.RIGHT,
-                      border = 5)
-        
+            sizer.Add(item=self.addbox, proportion=0,
+                      flag=wx.LEFT | wx.RIGHT,
+                      border=5)
+
         self.panel.SetAutoLayout(True)
         self.panel.SetSizer(sizer)
         sizer.Fit(self.panel)
-        
+
         self.Layout()
-        
-    def AddMark(self,event):
+
+    def AddMark(self, event):
         """Sends operators to insertion method
         """
-        if event.GetId() == self.btn['compl'].GetId(): mark = "~"
-        elif event.GetId() == self.btn['not'].GetId(): mark = "!"
-        elif event.GetId() == self.btn['pow'].GetId(): mark = "^"
-        elif event.GetId() == self.btn['div'].GetId(): mark = "/"
-        elif event.GetId() == self.btn['add'].GetId(): mark = "+"
-        elif event.GetId() == self.btn['minus'].GetId(): mark = "-"
-        elif event.GetId() == self.btn['mod'].GetId(): mark = "%"
-        elif event.GetId() == self.btn['mult'].GetId(): mark = "*"
-        elif event.GetId() == self.btn['lshift'].GetId(): mark = "<<"
-        elif event.GetId() == self.btn['rshift'].GetId(): mark = ">>"
-        elif event.GetId() == self.btn['rshiftu'].GetId(): mark = ">>>"
-        elif event.GetId() == self.btn['gt'].GetId(): mark = ">"
-        elif event.GetId() == self.btn['gteq'].GetId(): mark = ">="
-        elif event.GetId() == self.btn['lt'].GetId(): mark = "<"
-        elif event.GetId() == self.btn['lteq'].GetId(): mark = "<="
-        elif event.GetId() == self.btn['eq'].GetId(): mark = "=="
-        elif event.GetId() == self.btn['noteq'].GetId(): mark = "!="
-        elif event.GetId() == self.btn['andbit'].GetId(): mark = "&"
-        elif event.GetId() == self.btn['orbit'].GetId(): mark = "|"
-        elif event.GetId() == self.btn['or'].GetId(): mark =  "||"
-        elif event.GetId() == self.btn['ornull'].GetId(): mark = "|||"
-        elif event.GetId() == self.btn['and'].GetId(): mark = "&&"
-        elif event.GetId() == self.btn['andnull'].GetId(): mark = "&&&"
-        elif event.GetId() == self.btn['cond'].GetId(): mark = " ? : "
-        elif event.GetId() == self.btn['parenl'].GetId(): mark = "("
-        elif event.GetId() == self.btn['parenr'].GetId(): mark = ")"
+        if event.GetId() == self.btn['compl'].GetId():
+            mark = "~"
+        elif event.GetId() == self.btn['not'].GetId():
+            mark = "!"
+        elif event.GetId() == self.btn['pow'].GetId():
+            mark = "^"
+        elif event.GetId() == self.btn['div'].GetId():
+            mark = "/"
+        elif event.GetId() == self.btn['add'].GetId():
+            mark = "+"
+        elif event.GetId() == self.btn['minus'].GetId():
+            mark = "-"
+        elif event.GetId() == self.btn['mod'].GetId():
+            mark = "%"
+        elif event.GetId() == self.btn['mult'].GetId():
+            mark = "*"
+        elif event.GetId() == self.btn['lshift'].GetId():
+            mark = "<<"
+        elif event.GetId() == self.btn['rshift'].GetId():
+            mark = ">>"
+        elif event.GetId() == self.btn['rshiftu'].GetId():
+            mark = ">>>"
+        elif event.GetId() == self.btn['gt'].GetId():
+            mark = ">"
+        elif event.GetId() == self.btn['gteq'].GetId():
+            mark = ">="
+        elif event.GetId() == self.btn['lt'].GetId():
+            mark = "<"
+        elif event.GetId() == self.btn['lteq'].GetId():
+            mark = "<="
+        elif event.GetId() == self.btn['eq'].GetId():
+            mark = "=="
+        elif event.GetId() == self.btn['noteq'].GetId():
+            mark = "!="
+        elif event.GetId() == self.btn['andbit'].GetId():
+            mark = "&"
+        elif event.GetId() == self.btn['orbit'].GetId():
+            mark = "|"
+        elif event.GetId() == self.btn['or'].GetId():
+            mark = "||"
+        elif event.GetId() == self.btn['ornull'].GetId():
+            mark = "|||"
+        elif event.GetId() == self.btn['and'].GetId():
+            mark = "&&"
+        elif event.GetId() == self.btn['andnull'].GetId():
+            mark = "&&&"
+        elif event.GetId() == self.btn['cond'].GetId():
+            mark = " ? : "
+        elif event.GetId() == self.btn['parenl'].GetId():
+            mark = "("
+        elif event.GetId() == self.btn['parenr'].GetId():
+            mark = ")"
         self._addSomething(mark)
-        
-    ### unused
+
+    # unused
     # def OnSelectTextEvt(self, event):
     #     """Checks if user is typing or the event was emited by map selection.
     #     Prevents from changing focus.
@@ -459,14 +537,14 @@ class MapCalcFrame(wx.Frame):
     #     if not (abs(len(item) - len(self.lastMapName)) == 1 and \
     #         self.lastMapName in item or item in self.lastMapName):
     #         self.OnSelect(event)
-        
+
     #     self.lastMapName = item
 
     def OnSelect(self, event):
         """Gets raster map or function selection and send it to
-        insertion method. 
+        insertion method.
 
-        Checks for characters which can be in raster map name but 
+        Checks for characters which can be in raster map name but
         the raster map name must be then quoted.
         """
         win = self.FindWindowById(event.GetId())
@@ -504,7 +582,8 @@ class MapCalcFrame(wx.Frame):
             if self.randomSeed.IsChecked():
                 seed_flag = ' -s'
             else:
-                seed = " seed={val}".format(val=self.randomSeedText.GetValue().strip())
+                seed = " seed={val}".format(
+                    val=self.randomSeedText.GetValue().strip())
 
         return ('{cmd} "{new} = {expr}"{seed}{seed_flag}{overwrite}'
                 .format(cmd=cmd, expr=expr, new=self.newmaptxt.GetValue(),
@@ -513,11 +592,11 @@ class MapCalcFrame(wx.Frame):
     def _addSomething(self, what):
         """Inserts operators, map names, and functions into text area
         """
-        mcalcstr  = self.text_mcalc.GetValue()
-        position  = self.text_mcalc.GetInsertionPoint()
-        
+        mcalcstr = self.text_mcalc.GetValue()
+        position = self.text_mcalc.GetInsertionPoint()
+
         newmcalcstr = mcalcstr[:position]
-        
+
         position_offset = 0
         try:
             if newmcalcstr[-1] != ' ':
@@ -525,9 +604,9 @@ class MapCalcFrame(wx.Frame):
                 position_offset += 1
         except:
             pass
-        
+
         newmcalcstr += what + ' ' + mcalcstr[position:]
-        
+
         self.text_mcalc.SetValue(newmcalcstr)
         if len(what) > 0:
             match = re.search(pattern="\(.*\)", string=what)
@@ -539,25 +618,26 @@ class MapCalcFrame(wx.Frame):
         self.text_mcalc.SetInsertionPoint(position + position_offset)
         self.text_mcalc.Update()
         self.text_mcalc.SetFocus()
-        
-    def OnMCalcRun(self,event):
+
+    def OnMCalcRun(self, event):
         """Builds and runs r.mapcalc statement
         """
         name = self.newmaptxt.GetValue().strip()
         if not name:
-            GError(parent = self,
-                   message = _("You must enter the name of "
-                               "a new raster map to create."))
+            GError(parent=self,
+                   message=_("You must enter the name of "
+                             "a new raster map to create."))
             return
-        
-        if not (name[0] == '"' and name[-1] == '"') and any((char in name) for char in self.charactersToQuote):
+
+        if not(name[0] == '"' and name[-1] == '"') and any((char in name)
+                                                           for char in self.charactersToQuote):
             name = '"' + name + '"'
 
         expr = self.text_mcalc.GetValue().strip().replace("\n", " ")
         if not expr:
-            GError(parent = self,
-                   message = _("You must enter an expression "
-                               "to create a new raster map."))
+            GError(parent=self,
+                   message=_("You must enter an expression "
+                             "to create a new raster map."))
             return
 
         seed_flag = seed = None
@@ -576,7 +656,7 @@ class MapCalcFrame(wx.Frame):
                 cmd.append('--overwrite')
             cmd.append(str('expression=%s = %s' % (name, expr)))
 
-            self.log.RunCmd(cmd, onDone = self.OnDone)
+            self.log.RunCmd(cmd, onDone=self.OnDone)
             self.parent.Raise()
         else:
             if self.overwrite.IsChecked():
@@ -600,43 +680,47 @@ class MapCalcFrame(wx.Frame):
         """
         if event.returncode != 0:
             return
-        name = self.newmaptxt.GetValue().strip(' "') + '@' + grass.gisenv()['MAPSET']
+        name = self.newmaptxt.GetValue().strip(
+            ' "') + '@' + grass.gisenv()['MAPSET']
         ltype = 'raster'
         if self.rast3d:
             ltype = 'raster_3d'
-        self._giface.mapCreated.emit(name=name, ltype=ltype, add=self.addbox.IsChecked())
+        self._giface.mapCreated.emit(
+            name=name, ltype=ltype, add=self.addbox.IsChecked())
 
     def OnSaveExpression(self, event):
         """Saves expression to file
         """
         mctxt = self.newmaptxt.GetValue() + ' = ' + self.text_mcalc.GetValue() + os.linesep
-        
-        #dialog
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to save the expression"),
-                            wildcard = _("Expression file (*)|*"),
-                            style = wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+
+        # dialog
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose a file name to save the expression"),
+            wildcard=_("Expression file (*)|*"),
+            style=wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
                 dlg.Destroy()
                 return
-            
+
             try:
                 fobj = open(path, 'w')
                 fobj.write(mctxt)
             finally:
                 fobj.close()
-        
+
         dlg.Destroy()
 
     def OnLoadExpression(self, event):
         """Load expression from file
         """
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose a file name to load the expression"),
-                            wildcard = _("Expression file (*)|*"),
-                            style = wx.FD_OPEN)
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_("Choose a file name to load the expression"),
+            wildcard=_("Expression file (*)|*"),
+            style=wx.FD_OPEN)
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             if not path:
@@ -644,22 +728,22 @@ class MapCalcFrame(wx.Frame):
                 return
 
             try:
-                fobj = open(path,'r')
+                fobj = open(path, 'r')
                 mctxt = fobj.read()
             finally:
                 fobj.close()
-            
+
             try:
                 result, exp = mctxt.split('=', 1)
             except ValueError:
                 result = ''
                 exp = mctxt
-            
+
             self.newmaptxt.SetValue(result.strip())
             self.text_mcalc.SetValue(exp.strip())
             self.text_mcalc.SetFocus()
             self.text_mcalc.SetInsertionPointEnd()
-        
+
         dlg.Destroy()
 
     def OnCopy(self, event):
@@ -669,25 +753,30 @@ class MapCalcFrame(wx.Frame):
         if wx.TheClipboard.Open():
             wx.TheClipboard.SetData(cmddata)
             wx.TheClipboard.Close()
-            self.SetStatusText(_("'{cmd}' copied to clipboard").format(cmd=command))
+            self.SetStatusText(
+                _("'{cmd}' copied to clipboard").format(
+                    cmd=command))
 
     def OnClear(self, event):
         """Clears text area
         """
         self.text_mcalc.SetValue('')
-        
+
     def OnHelp(self, event):
         """Launches r.mapcalc help
         """
-        RunCommand('g.manual', parent = self, entry = self.cmd)
-        
-    def OnClose(self,event):
+        RunCommand('g.manual', parent=self, entry=self.cmd)
+
+    def OnClose(self, event):
         """Close window"""
         self.Destroy()
 
 if __name__ == "__main__":
-    
+
     app = wx.App(0)
-    frame = MapCalcFrame(parent = None, cmd = 'r.mapcalc', giface = StandaloneGrassInterface())
+    frame = MapCalcFrame(
+        parent=None,
+        cmd='r.mapcalc',
+        giface=StandaloneGrassInterface())
     frame.Show()
     app.MainLoop()
diff --git a/gui/wxpython/modules/vclean.py b/gui/wxpython/modules/vclean.py
index 0a529b5..45de75b 100644
--- a/gui/wxpython/modules/vclean.py
+++ b/gui/wxpython/modules/vclean.py
@@ -19,18 +19,20 @@ import os
 import wx
 import wx.lib.scrolledpanel as scrolled
 
-from core.gcmd        import RunCommand, GError
-from core             import globalvar
+from core.gcmd import RunCommand, GError
+from core import globalvar
 from core.utils import _
 from gui_core.gselect import Select
-from core.settings    import UserSettings
+from core.settings import UserSettings
 from grass.script import core as grass
 
 
 class VectorCleaningFrame(wx.Frame):
-    def __init__(self, parent, id=wx.ID_ANY, title=_('Set up vector cleaning tools'),
-                 style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER,
-                 **kwargs):
+
+    def __init__(
+            self, parent, id=wx.ID_ANY,
+        title=_('Set up vector cleaning tools'),
+            style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER, **kwargs):
         """
         Dialog for interactively defining vector cleaning tools
         """
@@ -49,7 +51,12 @@ class VectorCleaningFrame(wx.Frame):
         self.CreateStatusBar()
 
         # icon
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
 
         self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
 
@@ -78,7 +85,7 @@ class VectorCleaningFrame(wx.Frame):
             _('remove small areas'),
             _('remove lines/boundaries of zero length'),
             _('remove small angles at nodes')
-            ]
+        ]
 
         self.tool_list = [
             'break',
@@ -94,7 +101,7 @@ class VectorCleaningFrame(wx.Frame):
             'rmarea',
             'rmline',
             'rmsa'
-            ]
+        ]
 
         self.ftype = [
             'point',
@@ -116,7 +123,7 @@ class VectorCleaningFrame(wx.Frame):
 
         # top controls
         self.inmaplabel = wx.StaticText(parent=self.panel, id=wx.ID_ANY,
-                                         label=_('Select input vector map:'))
+                                        label=_('Select input vector map:'))
         self.selectionInput = Select(parent=self.panel, id=wx.ID_ANY,
                                      size=globalvar.DIALOG_GSELECT_SIZE,
                                      type='vector')
@@ -129,13 +136,18 @@ class VectorCleaningFrame(wx.Frame):
                                          label=_('Select output vector map:'))
         self.selectionOutput = Select(parent=self.panel, id=wx.ID_ANY,
                                       size=globalvar.DIALOG_GSELECT_SIZE,
-                                      mapsets=[grass.gisenv()['MAPSET'],],
-                                      fullyQualified = False,
+                                      mapsets=[grass.gisenv()['MAPSET'], ],
+                                      fullyQualified=False,
                                       type='vector')
 
-        self.overwrite = wx.CheckBox(parent=self.panel, id=wx.ID_ANY,
-                                       label=_('Allow output files to overwrite existing files'))
-        self.overwrite.SetValue(UserSettings.Get(group='cmd', key='overwrite', subkey='enabled'))
+        self.overwrite = wx.CheckBox(
+            parent=self.panel, id=wx.ID_ANY,
+            label=_('Allow output files to overwrite existing files'))
+        self.overwrite.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='overwrite',
+                subkey='enabled'))
 
         # cleaning tools
         self.ct_label = wx.StaticText(parent=self.panel, id=wx.ID_ANY,
@@ -155,10 +167,14 @@ class VectorCleaningFrame(wx.Frame):
 
         # Buttons
         self.btn_close = wx.Button(parent=self.panel, id=wx.ID_CLOSE)
-        self.btn_run = wx.Button(parent=self.panel, id=wx.ID_ANY, label=_("&Run"))
+        self.btn_run = wx.Button(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            label=_("&Run"))
         self.btn_run.SetDefault()
         self.btn_clipboard = wx.Button(parent=self.panel, id=wx.ID_COPY)
-        self.btn_clipboard.SetToolTipString(_("Copy the current command string to the clipboard (Ctrl+C)"))
+        self.btn_clipboard.SetToolTipString(
+            _("Copy the current command string to the clipboard (Ctrl+C)"))
         self.btn_help = wx.Button(parent=self.panel, id=wx.ID_HELP)
 
         # bindings
@@ -187,10 +203,20 @@ class VectorCleaningFrame(wx.Frame):
         #
         inSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
-        inSizer.Add(item=self.inmaplabel, pos=(0, 0),
-                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border=1)
-        inSizer.Add(item=self.selectionInput, pos=(1, 0),
-                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border=1)
+        inSizer.Add(
+            item=self.inmaplabel,
+            pos=(
+                0,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND,
+            border=1)
+        inSizer.Add(
+            item=self.selectionInput,
+            pos=(
+                1,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND,
+            border=1)
 
         self.ftype_check = [
             wx.CheckBox(parent=self.panel, id=wx.ID_ANY, label=_('point')),
@@ -199,13 +225,13 @@ class VectorCleaningFrame(wx.Frame):
             wx.CheckBox(parent=self.panel, id=wx.ID_ANY, label=_('centroid')),
             wx.CheckBox(parent=self.panel, id=wx.ID_ANY, label=_('area')),
             wx.CheckBox(parent=self.panel, id=wx.ID_ANY, label=_('face'))
-            ]
+        ]
 
         typeoptSizer = wx.BoxSizer(wx.HORIZONTAL)
         for num in range(0, self.n_ftypes):
             type_box = self.ftype_check[num]
             if self.ftype[num] in ('point', 'line', 'area'):
-                type_box.SetValue(True);
+                type_box.SetValue(True)
             typeoptSizer.Add(item=type_box, flag=wx.ALIGN_LEFT, border=1)
 
         self.ftypeSizer.Add(item=typeoptSizer,
@@ -213,10 +239,20 @@ class VectorCleaningFrame(wx.Frame):
 
         outSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
-        outSizer.Add(item=self.outmaplabel, pos=(0, 0),
-                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border=1)
-        outSizer.Add(item=self.selectionOutput, pos=(1, 0),
-                       flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND, border=1)
+        outSizer.Add(
+            item=self.outmaplabel,
+            pos=(
+                0,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND,
+            border=1)
+        outSizer.Add(
+            item=self.selectionOutput,
+            pos=(
+                1,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL | wx.EXPAND,
+            border=1)
         replaceSizer = wx.BoxSizer(wx.HORIZONTAL)
         replaceSizer.Add(item=self.overwrite, proportion=1,
                          flag=wx.ALL | wx.EXPAND, border=1)
@@ -236,10 +272,18 @@ class VectorCleaningFrame(wx.Frame):
 
         manageBoxSizer = wx.GridBagSizer(hgap=10, vgap=1)
         # start with row 1 for nicer layout
-        manageBoxSizer.Add(item=self.btn_add, pos=(1, 0), border=2, flag=wx.ALL | wx.EXPAND)
-        manageBoxSizer.Add(item=self.btn_remove, pos=(2, 0), border=2, flag=wx.ALL | wx.EXPAND)
-        manageBoxSizer.Add(item=self.btn_moveup, pos=(3, 0), border=2, flag=wx.ALL | wx.EXPAND)
-        manageBoxSizer.Add(item=self.btn_movedown, pos=(4, 0), border=2, flag=wx.ALL | wx.EXPAND)
+        manageBoxSizer.Add(
+            item=self.btn_add, pos=(1, 0),
+            border=2, flag=wx.ALL | wx.EXPAND)
+        manageBoxSizer.Add(
+            item=self.btn_remove, pos=(2, 0),
+            border=2, flag=wx.ALL | wx.EXPAND)
+        manageBoxSizer.Add(
+            item=self.btn_moveup, pos=(3, 0),
+            border=2, flag=wx.ALL | wx.EXPAND)
+        manageBoxSizer.Add(
+            item=self.btn_movedown, pos=(4, 0),
+            border=2, flag=wx.ALL | wx.EXPAND)
 
         bodySizer.Add(item=manageBoxSizer, pos=(1, 2),
                       flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
@@ -272,14 +316,14 @@ class VectorCleaningFrame(wx.Frame):
                   flag=wx.ALL | wx.EXPAND, border=5)
 
         sizer.Add(item=wx.StaticLine(parent=self, id=wx.ID_ANY,
-                  style=wx.LI_HORIZONTAL), proportion=0,
+                                     style=wx.LI_HORIZONTAL), proportion=0,
                   flag=wx.EXPAND | wx.ALL, border=5)
 
         sizer.Add(item=bodySizer, proportion=1,
                   flag=wx.ALL | wx.EXPAND, border=5)
 
         sizer.Add(item=wx.StaticLine(parent=self, id=wx.ID_ANY,
-                  style=wx.LI_HORIZONTAL), proportion=0,
+                                     style=wx.LI_HORIZONTAL), proportion=0,
                   flag=wx.EXPAND | wx.ALL, border=5)
 
         sizer.Add(item=btnSizer, proportion=0,
@@ -317,13 +361,16 @@ class VectorCleaningFrame(wx.Frame):
                                 wx.CB_READONLY | wx.TE_PROCESS_ENTER)
         self.Bind(wx.EVT_COMBOBOX, self.OnSetTool, tool_cbox)
         # threshold
-        txt_ctrl = wx.TextCtrl(parent=self.ct_panel, id=2000 + num, value='0.00',
-                               size=(100, -1),
-                               style=wx.TE_NOHIDESEL)
+        txt_ctrl = wx.TextCtrl(
+            parent=self.ct_panel, id=2000 + num, value='0.00', size=(100, -1),
+            style=wx.TE_NOHIDESEL)
         self.Bind(wx.EVT_TEXT, self.OnThreshValue, txt_ctrl)
 
         # select with tool number
-        select = wx.CheckBox(parent=self.ct_panel, id=num, label=str(num) + '.')
+        select = wx.CheckBox(
+            parent=self.ct_panel,
+            id=num,
+            label=str(num) + '.')
         select.SetValue(False)
         self.Bind(wx.EVT_CHECKBOX, self.OnSelect, select)
 
@@ -350,7 +397,9 @@ class VectorCleaningFrame(wx.Frame):
             self.FindWindowById(id + 1000).SetValue('')
             self.toolslines[id]['tool_desc'] = ''
             self.toolslines[id]['tool'] = ''
-            self.SetStatusText(_("%s. cleaning tool removed, will be ignored") % id)
+            self.SetStatusText(
+                _("%s. cleaning tool removed, will be ignored") %
+                id)
         else:
             self.SetStatusText(_("Please select a cleaning tool to remove"))
 
@@ -364,7 +413,10 @@ class VectorCleaningFrame(wx.Frame):
             up_toolline = self.toolslines[id_up]
 
             self.FindWindowById(id_up).SetValue(True)
-            self.FindWindowById(id_up + 1000).SetValue(this_toolline['tool_desc'])
+            self.FindWindowById(
+                id_up +
+                1000).SetValue(
+                this_toolline['tool_desc'])
             self.FindWindowById(id_up + 2000).SetValue(this_toolline['thresh'])
             self.toolslines[id_up] = this_toolline
 
@@ -390,8 +442,14 @@ class VectorCleaningFrame(wx.Frame):
             down_toolline = self.toolslines[id_down]
 
             self.FindWindowById(id_down).SetValue(True)
-            self.FindWindowById(id_down + 1000).SetValue(this_toolline['tool_desc'])
-            self.FindWindowById(id_down + 2000).SetValue(this_toolline['thresh'])
+            self.FindWindowById(
+                id_down +
+                1000).SetValue(
+                this_toolline['tool_desc'])
+            self.FindWindowById(
+                id_down +
+                2000).SetValue(
+                this_toolline['thresh'])
             self.toolslines[id_down] = this_toolline
 
             self.FindWindowById(id).SetValue(False)
@@ -414,7 +472,11 @@ class VectorCleaningFrame(wx.Frame):
         self.toolslines[tool_no]['tool_desc'] = self.tool_desc_list[num]
         self.toolslines[tool_no]['tool'] = self.tool_list[num]
 
-        self.SetStatusText(str(tool_no) + '. ' + _("cleaning tool: '%s'") % (self.tool_list[num]))
+        self.SetStatusText(
+            str(tool_no) +
+            '. ' +
+            _("cleaning tool: '%s'") %
+            (self.tool_list[num]))
 
     def OnThreshValue(self, event):
         """Threshold value was entered"""
@@ -422,10 +484,11 @@ class VectorCleaningFrame(wx.Frame):
         num = id - 2000
         self.toolslines[num]['thresh'] = self.FindWindowById(id).GetValue()
 
-        self.SetStatusText(_("Threshold for %(num)s. tool '%(tool)s': %(thresh)s") % \
-                           {'num': num,
-                            'tool': self.toolslines[num]['tool'],
-                            'thresh': self.toolslines[num]['thresh']})
+        self.SetStatusText(
+            _("Threshold for %(num)s. tool '%(tool)s': %(thresh)s") % {
+                'num': num,
+                'tool': self.toolslines[num]['tool'],
+                'thresh': self.toolslines[num]['thresh']})
 
     def OnSelect(self, event):
         """Tool was selected"""
@@ -467,10 +530,10 @@ class VectorCleaningFrame(wx.Frame):
 
         if self.log:
             cmd = [self.cmd,
-                  'input=%s' % self.inmap,
-                  'output=%s' % self.outmap,
-                  'tool=%s' % self.tools_string,
-                  'thres=%s' % self.thresh_string]
+                   'input=%s' % self.inmap,
+                   'output=%s' % self.outmap,
+                   'tool=%s' % self.tools_string,
+                   'thres=%s' % self.thresh_string]
             if self.ftype_string:
                 cmd.append('type=%s' % self.ftype_string)
             if self.overwrite.IsChecked():
@@ -509,8 +572,8 @@ class VectorCleaningFrame(wx.Frame):
         self.GetCmdStrings()
         cmdstring = '%s' % (self.cmd)
         # list -> string
-        cmdstring += ' input=%s output=%s type=%s tool=%s thres=%s' % \
-                     (self.inmap, self.outmap, self.ftype_string, self.tools_string, self.thresh_string)
+        cmdstring += ' input=%s output=%s type=%s tool=%s thres=%s' % (
+            self.inmap, self.outmap, self.ftype_string, self.tools_string, self.thresh_string)
         if self.overwrite.IsChecked():
             cmdstring += ' --overwrite'
 
@@ -518,7 +581,8 @@ class VectorCleaningFrame(wx.Frame):
         if wx.TheClipboard.Open():
             wx.TheClipboard.SetData(cmddata)
             wx.TheClipboard.Close()
-            self.SetStatusText(_("Vector cleaning command copied to clipboard"))
+            self.SetStatusText(
+                _("Vector cleaning command copied to clipboard"))
 
     def GetCmdStrings(self):
         self.tools_string = ''
@@ -545,7 +609,8 @@ class VectorCleaningFrame(wx.Frame):
                     first = 0
                 else:
                     self.tools_string += ',%s' % self.toolslines[num]['tool']
-                    self.thresh_string += ',%s' % self.toolslines[num]['thresh']
+                    self.thresh_string += ',%s' % self.toolslines[
+                        num]['thresh']
 
         self.inmap = self.selectionInput.GetValue()
         self.outmap = self.selectionOutput.GetValue()
diff --git a/gui/wxpython/modules/vkrige.py b/gui/wxpython/modules/vkrige.py
index c96ab3a..0a462ed 100644
--- a/gui/wxpython/modules/vkrige.py
+++ b/gui/wxpython/modules/vkrige.py
@@ -16,15 +16,16 @@ for details.
 
 #@TODO move here imports related to wxGUI
 
-### generic imports
-import os, sys
+# generic imports
+import os
+import sys
 from tempfile import gettempdir
 import time
 import thread
 from core.utils import _
 
-### dependencies to be checked once, as they are quite
-### time-consuming. cfr. grass.parser.
+# dependencies to be checked once, as they are quite
+# time-consuming. cfr. grass.parser.
 
 try:
     import grass.script as grass
@@ -41,142 +42,241 @@ from core.giface import Notification
 #import help
 
 import wx
-#import wx.lib.plot as plot # for plotting the variogram.
+# import wx.lib.plot as plot # for plotting the variogram.
 import rpy2.robjects as robjects
 import rpy2.rinterface as rinterface
 
 # global variables
-maxint = 1e6 # instead of sys.maxint, not working with SpinCtrl on 64bit [reported by Bob Moskovitz]
+# instead of sys.maxint, not working with SpinCtrl on 64bit [reported by
+# Bob Moskovitz]
+maxint = 1e6
 
 #@TODO move away functions not regarding the GUI
 
+
 class KrigingPanel(wx.Panel):
     """Main panel. Contains all widgets except Menus and Statusbar. """
+
     def __init__(self, parent, Rinstance, controller, *args, **kwargs):
         wx.Panel.__init__(self, parent, *args, **kwargs)
-        
-        self.parent = parent 
+
+        self.parent = parent
         self.border = 4
-        
-        #    1. Input data 
-        InputBoxSizer = wx.StaticBoxSizer(wx.StaticBox(self, id = wx.ID_ANY, label = _("Input Data")), 
-                                          orient = wx.HORIZONTAL)
-        
-        flexSizer = wx.FlexGridSizer(cols = 3, hgap = 5, vgap = 5)
+
+        #    1. Input data
+        InputBoxSizer = wx.StaticBoxSizer(
+            wx.StaticBox(
+                self,
+                id=wx.ID_ANY,
+                label=_("Input Data")),
+            orient=wx.HORIZONTAL)
+
+        flexSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(1)
 
-        flexSizer.Add(item = wx.StaticText(self, id = wx.ID_ANY, label = _("Point dataset:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        self.InputDataMap = gselect.VectorSelect(parent = self,
-                                                 ftype = 'points',
-                                                 updateOnPopup = False)
+        flexSizer.Add(
+            item=wx.StaticText(
+                self,
+                id=wx.ID_ANY,
+                label=_("Point dataset:")),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        self.InputDataMap = gselect.VectorSelect(parent=self,
+                                                 ftype='points',
+                                                 updateOnPopup=False)
         self.InputDataMap.SetFocus()
-        flexSizer.Add(item = self.InputDataMap, flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        RefreshButton = wx.Button(self, id = wx.ID_REFRESH)
+        flexSizer.Add(item=self.InputDataMap, flag=wx.ALIGN_CENTER_VERTICAL)
+
+        RefreshButton = wx.Button(self, id=wx.ID_REFRESH)
         RefreshButton.Bind(wx.EVT_BUTTON, self.OnButtonRefresh)
-        flexSizer.Add(item = RefreshButton, flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        flexSizer.Add(item = wx.StaticText(self, id = wx.ID_ANY, label = _("Numeric column:")),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        self.InputDataColumn = gselect.ColumnSelect(self, id = wx.ID_ANY)
-        flexSizer.Add(item = self.InputDataColumn)
-        
-        self.InputDataMap.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnInputMapChanged)
-        self.InputDataColumn.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnInputColumnChanged)
-        
-        InputBoxSizer.Add(item = flexSizer)
-        
-        #    2. Kriging. In book pages one for each R package. Includes variogram fit.
-        KrigingSizer = wx.StaticBoxSizer(wx.StaticBox(self, id = wx.ID_ANY, label = _("Kriging")), wx.HORIZONTAL)
-
-        self.RPackagesBook = GNotebook(parent = self, style = globalvar.FNPageDStyle)
-        
-        for Rpackage in ["gstat"]: # , "geoR"]: #@TODO: enable it if/when it'll be implemented.
-            self.CreatePage(package = Rpackage, Rinstance = Rinstance, controller = controller)
-        
-        ## Command output. From menuform module, cmdPanel class
-        self._gconsole = gconsole.GConsole(guiparent = self)
-        self.goutput = goutput.GConsoleWindow(parent = self, gconsole = self._gconsole, margin = False)
+        flexSizer.Add(item=RefreshButton, flag=wx.ALIGN_CENTER_VERTICAL)
+
+        flexSizer.Add(
+            item=wx.StaticText(
+                self,
+                id=wx.ID_ANY,
+                label=_("Numeric column:")),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        self.InputDataColumn = gselect.ColumnSelect(self, id=wx.ID_ANY)
+        flexSizer.Add(item=self.InputDataColumn)
+
+        self.InputDataMap.GetChildren()[0].Bind(
+            wx.EVT_TEXT, self.OnInputMapChanged)
+        self.InputDataColumn.GetChildren()[0].Bind(
+            wx.EVT_TEXT, self.OnInputColumnChanged)
+
+        InputBoxSizer.Add(item=flexSizer)
+
+        # 2. Kriging. In book pages one for each R package. Includes variogram
+        # fit.
+        KrigingSizer = wx.StaticBoxSizer(
+            wx.StaticBox(
+                self,
+                id=wx.ID_ANY,
+                label=_("Kriging")),
+            wx.HORIZONTAL)
+
+        self.RPackagesBook = GNotebook(
+            parent=self, style=globalvar.FNPageDStyle)
+
+        # , "geoR"]: #@TODO: enable it if/when it'll be implemented.
+        for Rpackage in ["gstat"]:
+            self.CreatePage(
+                package=Rpackage,
+                Rinstance=Rinstance,
+                controller=controller)
+
+        # Command output. From menuform module, cmdPanel class
+        self._gconsole = gconsole.GConsole(guiparent=self)
+        self.goutput = goutput.GConsoleWindow(
+            parent=self, gconsole=self._gconsole, margin=False)
         self.goutputId = self.RPackagesBook.GetPageCount()
-        self.outpage = self.RPackagesBook.AddPage(page = self.goutput, text = _("Command output"), name = 'output')
-        self._gconsole.Bind(gconsole.EVT_CMD_RUN,
-                            lambda event:
-                                self._switchPageHandler(event=event, notification=Notification.MAKE_VISIBLE))
-        self._gconsole.Bind(gconsole.EVT_CMD_DONE,
-                            lambda event:
-                                self._switchPageHandler(event=event, notification=Notification.RAISE_WINDOW))
+        self.outpage = self.RPackagesBook.AddPage(
+            page=self.goutput, text=_("Command output"), name='output')
+        self._gconsole.Bind(
+            gconsole.EVT_CMD_RUN,
+            lambda event: self._switchPageHandler(
+                event=event,
+                notification=Notification.MAKE_VISIBLE))
+        self._gconsole.Bind(
+            gconsole.EVT_CMD_DONE,
+            lambda event: self._switchPageHandler(
+                event=event,
+                notification=Notification.RAISE_WINDOW))
         self.RPackagesBook.SetSelection(0)
-        KrigingSizer.Add(self.RPackagesBook, proportion = 1, flag = wx.EXPAND)
-        
+        KrigingSizer.Add(self.RPackagesBook, proportion=1, flag=wx.EXPAND)
+
         #    3. Output Parameters.
-        OutputSizer = wx.StaticBoxSizer(wx.StaticBox(self, id = wx.ID_ANY, label = _("Output")), wx.HORIZONTAL)
-        
-        OutputParameters = wx.GridBagSizer(hgap = 5, vgap = 5)
-        OutputParameters.Add(item = wx.StaticText(self, id = wx.ID_ANY, label = _("Name for the output raster map:")),
-                             flag = wx.ALIGN_CENTER_VERTICAL,
-                             pos = (0, 0))
-        self.OutputMapName = gselect.Select(parent = self, id = wx.ID_ANY,
-                                            type = 'raster',
-                                            mapsets = [grass.gisenv()['MAPSET']])
-        OutputParameters.Add(item = self.OutputMapName, flag = wx.EXPAND | wx.ALL,
-                             pos = (0, 1))
-        self.VarianceRasterCheckbox = wx.CheckBox(self, id = wx.ID_ANY, label = _("Export variance map as well: "))
-        self.VarianceRasterCheckbox.SetValue(state = True)
-        OutputParameters.Add(item = self.VarianceRasterCheckbox,
-                             flag = wx.ALIGN_CENTER_VERTICAL,
-                             pos = (1, 0))
-        self.OutputVarianceMapName = gselect.Select(parent = self, id = wx.ID_ANY,
-                                            type = 'raster',
-                                            mapsets = [grass.gisenv()['MAPSET']])
-        self.VarianceRasterCheckbox.Bind(wx.EVT_CHECKBOX, self.OnVarianceCBChecked)
-        OutputParameters.Add(item = self.OutputVarianceMapName, flag = wx.EXPAND | wx.ALL,
-                             pos = (1, 1))
-        
-        self.OverwriteCheckBox = wx.CheckBox(self, id = wx.ID_ANY,
-                                             label = _("Allow output files to overwrite existing files"))
-        self.OverwriteCheckBox.SetValue(UserSettings.Get(group='cmd', key='overwrite', subkey='enabled'))
-        OutputParameters.Add(item = self.OverwriteCheckBox,
-                             pos = (2, 0), span = (1, 2))
-        
+        OutputSizer = wx.StaticBoxSizer(
+            wx.StaticBox(
+                self,
+                id=wx.ID_ANY,
+                label=_("Output")),
+            wx.HORIZONTAL)
+
+        OutputParameters = wx.GridBagSizer(hgap=5, vgap=5)
+        OutputParameters.Add(
+            item=wx.StaticText(
+                self, id=wx.ID_ANY,
+                label=_("Name for the output raster map:")),
+            flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        self.OutputMapName = gselect.Select(parent=self, id=wx.ID_ANY,
+                                            type='raster',
+                                            mapsets=[grass.gisenv()['MAPSET']])
+        OutputParameters.Add(item=self.OutputMapName, flag=wx.EXPAND | wx.ALL,
+                             pos=(0, 1))
+        self.VarianceRasterCheckbox = wx.CheckBox(
+            self, id=wx.ID_ANY, label=_("Export variance map as well: "))
+        self.VarianceRasterCheckbox.SetValue(state=True)
+        OutputParameters.Add(item=self.VarianceRasterCheckbox,
+                             flag=wx.ALIGN_CENTER_VERTICAL,
+                             pos=(1, 0))
+        self.OutputVarianceMapName = gselect.Select(
+            parent=self, id=wx.ID_ANY, type='raster',
+            mapsets=[grass.gisenv()['MAPSET']])
+        self.VarianceRasterCheckbox.Bind(
+            wx.EVT_CHECKBOX, self.OnVarianceCBChecked)
+        OutputParameters.Add(
+            item=self.OutputVarianceMapName,
+            flag=wx.EXPAND | wx.ALL,
+            pos=(
+                1,
+                1))
+
+        self.OverwriteCheckBox = wx.CheckBox(self, id=wx.ID_ANY, label=_(
+            "Allow output files to overwrite existing files"))
+        self.OverwriteCheckBox.SetValue(
+            UserSettings.Get(
+                group='cmd',
+                key='overwrite',
+                subkey='enabled'))
+        OutputParameters.Add(item=self.OverwriteCheckBox,
+                             pos=(2, 0), span=(1, 2))
+
         OutputParameters.AddGrowableCol(1)
-        OutputSizer.Add(OutputParameters, proportion = 0, flag = wx.EXPAND | wx.ALL, border = self.border)
-        
+        OutputSizer.Add(
+            OutputParameters,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=self.border)
+
         #    4. Run Button and Quit Button
         ButtonSizer = wx.BoxSizer(wx.HORIZONTAL)
-        HelpButton = wx.Button(self, id = wx.ID_HELP)
+        HelpButton = wx.Button(self, id=wx.ID_HELP)
         HelpButton.Bind(wx.EVT_BUTTON, self.OnHelpButton)
-        QuitButton = wx.Button(self, id = wx.ID_EXIT)
+        QuitButton = wx.Button(self, id=wx.ID_EXIT)
         QuitButton.Bind(wx.EVT_BUTTON, self.OnCloseWindow)
-        self.RunButton = wx.Button(self, id = wx.ID_ANY, label = _("&Run")) # no stock ID for Run button.. 
+        # no stock ID for Run button..
+        self.RunButton = wx.Button(self, id=wx.ID_ANY, label=_("&Run"))
         self.RunButton.Bind(wx.EVT_BUTTON, self.OnRunButton)
-        self.RunButton.Enable(False) # disable it on loading the interface, as input map is not set
-        ButtonSizer.Add(HelpButton, proportion = 0, flag = wx.ALIGN_LEFT | wx.ALL, border = self.border)
-        ButtonSizer.Add(QuitButton, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = self.border)
-        ButtonSizer.Add(self.RunButton, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = self.border)
-        
+        # disable it on loading the interface, as input map is not set
+        self.RunButton.Enable(False)
+        ButtonSizer.Add(
+            HelpButton,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALL,
+            border=self.border)
+        ButtonSizer.Add(
+            QuitButton,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=self.border)
+        ButtonSizer.Add(
+            self.RunButton,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=self.border)
+
         #    Main Sizer. Add each child sizer as soon as it is ready.
         Sizer = wx.BoxSizer(wx.VERTICAL)
-        Sizer.Add(InputBoxSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = self.border)
-        Sizer.Add(KrigingSizer, proportion = 1, flag = wx.EXPAND | wx.ALL, border = self.border)
-        Sizer.Add(OutputSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = self.border)
-        Sizer.Add(ButtonSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = self.border)
+        Sizer.Add(
+            InputBoxSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=self.border)
+        Sizer.Add(
+            KrigingSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=self.border)
+        Sizer.Add(
+            OutputSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=self.border)
+        Sizer.Add(
+            ButtonSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=self.border)
         self.SetSizerAndFit(Sizer)
-        
+
         # last action of __init__: update imput data list.
         # it's performed in the few seconds gap while user examines interface before clicking anything.
         #@TODO: implement a splashcreen IF the maps cause a noticeable lag [markus' suggestion]
         self.InputDataMap.GetElementList()
-        
+
     def CreatePage(self, package, Rinstance, controller):
         """Creates the three notebook pages, one for each R package """
-        for package in ["gstat"]: #@TODO add here other packages when they will be implemented
-            classobj = eval("RBook"+package+"Panel")
-            setattr(self, "RBook"+package+"Panel", (classobj(self,
-                                                             id = wx.ID_ANY,
-                                                             Rinstance = Rinstance,
-                                                             controller = controller)))
-            self.RPackagesBook.AddPage(page = getattr(self, "RBook"+package+"Panel"), text = package)
+        for package in [
+                "gstat"]:  # @TODO add here other packages when they will be implemented
+            classobj = eval("RBook" + package + "Panel")
+            setattr(
+                self,
+                "RBook" +
+                package +
+                "Panel",
+                (classobj(
+                    self,
+                    id=wx.ID_ANY,
+                    Rinstance=Rinstance,
+                    controller=controller)))
+            self.RPackagesBook.AddPage(
+                page=getattr(
+                    self,
+                    "RBook" +
+                    package +
+                    "Panel"),
+                text=package)
 
     def OnButtonRefresh(self, event):
         """Forces refresh of list of available layers. """
@@ -188,15 +288,15 @@ class KrigingPanel(wx.Panel):
         event.Skip()
 
     def OnHelpButton(self, event):
-        grass.run_command('g.manual', entry = 'v.krige')
+        grass.run_command('g.manual', entry='v.krige')
         event.Skip()
 
     def OnInputMapChanged(self, event):
         """Refreshes list of columns."""
         MapName = event.GetString()
-        self.InputDataColumn.InsertColumns(vector = MapName,
-                                   layer = 1, excludeKey = False,
-                                   type = ['integer', 'double precision'])
+        self.InputDataColumn.InsertColumns(
+            vector=MapName, layer=1, excludeKey=False,
+            type=['integer', 'double precision'])
 
     def OnInputColumnChanged(self, event):
         """Fills output map name TextCtrl """
@@ -204,51 +304,77 @@ class KrigingPanel(wx.Panel):
         enable = bool(self.InputDataColumn.GetValue())
         self.RunButton.Enable(enable)
         self.RBookgstatPanel.PlotButton.Enable(enable)
-        
+
         if enable:
-            self.OutputMapName.SetValue(MapName.split("@")[0]+"_kriging")
-            self.OutputVarianceMapName.SetValue(MapName.split("@")[0]+"_kriging.var")
+            self.OutputMapName.SetValue(MapName.split("@")[0] + "_kriging")
+            self.OutputVarianceMapName.SetValue(
+                MapName.split("@")[0] + "_kriging.var")
         else:
             self.OutputMapName.SetValue('')
             self.OutputVarianceMapName.SetValue('')
-        
-    def OnRunButton(self,event):
+
+    def OnRunButton(self, event):
         """Execute R analysis. """
         #@FIXME: send data to main method instead of running it here.
-        
+
         #-1: get the selected notebook page. The user shall know that [s]he can modify settings in all
-        # pages, but only the selected one will be executed when Run is pressed.
+        # pages, but only the selected one will be executed when Run is
+        # pressed.
         SelectedPanel = self.RPackagesBook.GetCurrentPage()
-        
-        if self.RPackagesBook.GetPageText(self.RPackagesBook.GetSelection()) == 'Command output':
-            self._gconsole.WriteError("No parameters for running. Please select \"gstat\" tab, check parameters and re-run.")
-            return False # no break invoked by above function
-        
+
+        if self.RPackagesBook.GetPageText(
+                self.RPackagesBook.GetSelection()) == 'Command output':
+            self._gconsole.WriteError(
+                "No parameters for running. Please select \"gstat\" tab, check parameters and re-run.")
+            return False  # no break invoked by above function
+
         # mount command string as it would have been written on CLI
-        command = ["v.krige", "input=" + self.InputDataMap.GetValue(),
-                   "column=" + self.InputDataColumn.GetValue(),
-                   "output=" + self.OutputMapName.GetValue(), 
-                   "package=" + '%s' % self.RPackagesBook.GetPageText(self.RPackagesBook.GetSelection())]
-        
-        if not hasattr(SelectedPanel, 'VariogramCheckBox') or not SelectedPanel.VariogramCheckBox.IsChecked():
-            command.append("model=" + '%s' % SelectedPanel.ModelChoicebox.GetStringSelection().split(" ")[0])
-            
-        for i in ['Sill', 'Nugget', 'Range']:
-            if getattr(SelectedPanel, i+"ChextBox").IsChecked():
-                command.append(i.lower() + "=" + '%s' % getattr(SelectedPanel, i+'Ctrl').GetValue())
-        
+        command = [
+            "v.krige",
+            "input=" +
+            self.InputDataMap.GetValue(),
+            "column=" +
+            self.InputDataColumn.GetValue(),
+            "output=" +
+            self.OutputMapName.GetValue(),
+            "package=" +
+            '%s' %
+            self.RPackagesBook.GetPageText(
+                self.RPackagesBook.GetSelection())]
+
+        if not hasattr(
+                SelectedPanel, 'VariogramCheckBox') or not SelectedPanel.VariogramCheckBox.IsChecked():
+            command.append(
+                "model=" + '%s' %
+                SelectedPanel.ModelChoicebox.GetStringSelection().split(" ")[0])
+
+        for i in ['Sill', 'Nugget', 'Range', 'Kappa']:
+            if getattr(SelectedPanel, i + "ChextBox").IsChecked():
+                command.append(
+                    i.lower() +
+                    "=" +
+                    '%s' %
+                    getattr(
+                        SelectedPanel,
+                        i +
+                        'Ctrl').GetValue())
+
         if SelectedPanel.KrigingRadioBox.GetStringSelection() == "Block kriging":
-            command.append("block=" + '%s' % SelectedPanel.BlockSpinBox.GetValue())
+            command.append(
+                "block=" + '%s' %
+                SelectedPanel.BlockSpinBox.GetValue())
         if self.OverwriteCheckBox.IsChecked():
             command.append("--overwrite")
         if self.VarianceRasterCheckbox.IsChecked():
-            command.append("output_var=" + self.OutputVarianceMapName.GetValue())
-        
+            command.append(
+                "output_var=" +
+                self.OutputVarianceMapName.GetValue())
+
         # give it to the output console
         #@FIXME: it runs the command as a NEW instance. Reimports data, recalculates variogram fit..
-        #otherwise I can use Controller() and mimic RunCmd behaviour.
+        # otherwise I can use Controller() and mimic RunCmd behaviour.
         self._gconsole.RunCmd(command)
-    
+
     def OnVarianceCBChecked(self, event):
         self.OutputVarianceMapName.Enable(event.IsChecked())
 
@@ -270,21 +396,29 @@ class KrigingPanel(wx.Panel):
 
 class KrigingModule(wx.Frame):
     """Kriging module for GRASS GIS. Depends on R and its packages gstat and geoR. """
+
     def __init__(self, parent, Rinstance, controller, *args, **kwargs):
         wx.Frame.__init__(self, parent, *args, **kwargs)
         # setting properties and all widgettery
         self.SetTitle(_("Kriging Module"))
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_dialog.ico'), wx.BITMAP_TYPE_ICO))
-        self.log = Log(self) 
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_dialog.ico'),
+                wx.BITMAP_TYPE_ICO))
+        self.log = Log(self)
         self.CreateStatusBar()
         self.log.message(_("Ready."))
-        
+
         self.Panel = KrigingPanel(self, Rinstance, controller)
         self.SetMinSize(self.GetBestSize())
         self.SetSize(self.GetBestSize())
-    
+
+
 class Log:
     """The log output is redirected to the status bar of the containing frame. """
+
     def __init__(self, parent):
         self.parent = parent
 
@@ -292,220 +426,333 @@ class Log:
         """Updates status bar """
         self.parent.SetStatusText(text_string.strip())
 
+
 class RBookPanel(wx.Panel):
     """Generic notebook page with shared widgets and empty kriging functions. """
+
     def __init__(self, parent, *args, **kwargs):
         wx.Panel.__init__(self, parent, *args, **kwargs)
-        
+
         self.parent = parent
-        
-        self.VariogramSizer = wx.StaticBoxSizer(wx.StaticBox(self,
-                                                             id = wx.ID_ANY, 
-                                                             label = _("Variogram fitting")),
-                                                wx.HORIZONTAL)
+
+        self.VariogramSizer = wx.StaticBoxSizer(
+            wx.StaticBox(
+                self,
+                id=wx.ID_ANY,
+                label=_("Variogram fitting")),
+            wx.HORIZONTAL)
         self.LeftSizer = wx.BoxSizer(wx.VERTICAL)
         self.RightSizer = wx.BoxSizer(wx.VERTICAL)
-        self.ParametersSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+        self.ParametersSizer = wx.GridBagSizer(vgap=5, hgap=5)
+
+        self.VariogramSizer.Add(
+            self.LeftSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=parent.border)
+        self.VariogramSizer.Add(
+            self.RightSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=parent.border)
 
-        self.VariogramSizer.Add(self.LeftSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = parent.border)
-        self.VariogramSizer.Add(self.RightSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = parent.border)
-        
         # left side of Variogram fitting. The checkboxes and spinctrls.
-        self.PlotButton = wx.Button(self, id = wx.ID_ANY, label = _("Plot/refresh variogram")) # no stock ID for Run button.. 
+        # no stock ID for Run button..
+        self.PlotButton = wx.Button(
+            self, id=wx.ID_ANY, label=_("Plot/refresh variogram"))
         self.PlotButton.Bind(wx.EVT_BUTTON, self.OnPlotButton)
-        self.PlotButton.Enable(False) # grey it out until a suitable layer is available
-        self.LeftSizer.Add(self.PlotButton, proportion = 0, flag =  wx.ALL, border = parent.border)
-        self.LeftSizer.Add(self.ParametersSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = parent.border)
-        
-        self.ParametersList = ["Sill", "Nugget", "Range"]
-        MinValues = [0,0,1]
+        # grey it out until a suitable layer is available
+        self.PlotButton.Enable(False)
+        self.LeftSizer.Add(
+            self.PlotButton,
+            proportion=0,
+            flag=wx.ALL,
+            border=parent.border)
+        self.LeftSizer.Add(
+            self.ParametersSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=parent.border)
+
+        self.ParametersList = ["Sill", "Nugget", "Range", "Kappa"]
+        MinValues = [0, 0, 1, 0.1]
         for n in self.ParametersList:
-            setattr(self, n+"ChextBox", wx.CheckBox(self,
-                                                    id = self.ParametersList.index(n),
-                                                    label = _(n + ":")))
-            setattr(self, n+"Ctrl", (wx.SpinCtrl(self,
-                                                 id = wx.ID_ANY,
-                                                 min = MinValues[self.ParametersList.index(n)],
-                                                 max = maxint)))
-            getattr(self, n+"ChextBox").Bind(wx.EVT_CHECKBOX,
-                                             self.UseValue,
-                                             id = self.ParametersList.index(n))
-            setattr(self, n+"Sizer", (wx.BoxSizer(wx.HORIZONTAL)))
-            self.ParametersSizer.Add(getattr(self, n+"ChextBox"),
-                                     flag = wx.ALIGN_CENTER_VERTICAL,
-                                     pos = (self.ParametersList.index(n),0))
-            self.ParametersSizer.Add(getattr(self, n+"Ctrl"),
-                                     flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL,
-                                     pos = (self.ParametersList.index(n),1))
-        
+            setattr(
+                self,
+                n + "ChextBox",
+                wx.CheckBox(
+                    self,
+                    id=self.ParametersList.index(n),
+                    label=_(
+                        n + ":")))
+            # Kappa must be float
+            if n == "Kappa":
+                setattr(
+                    self,
+                    n + "Ctrl",
+                    (wx.SpinCtrlDouble(
+                        self,
+                        id=wx.ID_ANY,
+                        min=MinValues[
+                            self.ParametersList.index(n)],
+                        max=maxint,
+                        inc=0.1,
+                        initial=0.5)))
+            else:
+                setattr(
+                    self,
+                    n + "Ctrl",
+                    (wx.SpinCtrl(
+                        self,
+                        id=wx.ID_ANY,
+                        min=MinValues[
+                            self.ParametersList.index(n)],
+                        max=maxint)))
+            getattr(self, n + "ChextBox").Bind(wx.EVT_CHECKBOX,
+                                               self.UseValue,
+                                               id=self.ParametersList.index(n))
+            setattr(self, n + "Sizer", (wx.BoxSizer(wx.HORIZONTAL)))
+            self.ParametersSizer.Add(getattr(self, n + "ChextBox"),
+                                     flag=wx.ALIGN_CENTER_VERTICAL,
+                                     pos=(self.ParametersList.index(n), 0))
+            self.ParametersSizer.Add(getattr(self, n + "Ctrl"),
+                                     flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL,
+                                     pos=(self.ParametersList.index(n), 1))
+
         # right side of the Variogram fitting. The plot area.
         #Plot = wx.StaticText(self, id= wx.ID_ANY, label = "Check Plot Variogram to interactively fit model.")
         #PlotPanel = wx.Panel(self)
         #self.PlotArea = plot.PlotCanvas(PlotPanel)
         #self.PlotArea.SetInitialSize(size = (250,250))
         #self.RightSizer.Add(PlotPanel, proportion=0, flag= wx.EXPAND|wx.ALL, border=parent.border)
-        
-        self.KrigingSizer = wx.StaticBoxSizer(wx.StaticBox(self,
-                                                             id = wx.ID_ANY,
-                                                             label = _("Kriging techniques")),
-                                                wx.VERTICAL)
-        
-        KrigingList = ["Ordinary kriging", "Block kriging"]#, "Universal kriging"] #@FIXME: i18n on the list?
+
+        self.KrigingSizer = wx.StaticBoxSizer(
+            wx.StaticBox(
+                self,
+                id=wx.ID_ANY,
+                label=_("Kriging techniques")),
+            wx.VERTICAL)
+
+        # , "Universal kriging"] #@FIXME: i18n on the list?
+        KrigingList = ["Ordinary kriging", "Block kriging"]
         self.KrigingRadioBox = wx.RadioBox(self,
-                                           id = wx.ID_ANY,
-                                           choices = KrigingList,
-                                           majorDimension = 1,
-                                           style = wx.RA_SPECIFY_COLS)
+                                           id=wx.ID_ANY,
+                                           choices=KrigingList,
+                                           majorDimension=1,
+                                           style=wx.RA_SPECIFY_COLS)
         self.KrigingRadioBox.Bind(wx.EVT_RADIOBOX, self.HideBlockOptions)
-        self.KrigingSizer.Add(self.KrigingRadioBox, proportion = 0, flag = wx.EXPAND | wx.ALL, border = parent.border)
-        
+        self.KrigingSizer.Add(
+            self.KrigingRadioBox,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=parent.border)
+
         # block kriging parameters. Size.
         BlockSizer = wx.BoxSizer(wx.HORIZONTAL)
-        BlockLabel = wx.StaticText(self, id = wx.ID_ANY, label = _("Block size:"))
-        self.BlockSpinBox = wx.SpinCtrl(self, id = wx.ID_ANY, min = 1, max = maxint)
-        self.BlockSpinBox.Enable(False) # default choice is Ordinary kriging so block param is disabled
-        BlockSizer.Add(BlockLabel, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = parent.border)
-        BlockSizer.Add(self.BlockSpinBox, flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = parent.border)
-        self.KrigingSizer.Add(BlockSizer, flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = parent.border)
-        
+        BlockLabel = wx.StaticText(self, id=wx.ID_ANY, label=_("Block size:"))
+        self.BlockSpinBox = wx.SpinCtrl(self, id=wx.ID_ANY, min=1, max=maxint)
+        # default choice is Ordinary kriging so block param is disabled
+        self.BlockSpinBox.Enable(False)
+        BlockSizer.Add(
+            BlockLabel,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=parent.border)
+        BlockSizer.Add(
+            self.BlockSpinBox,
+            flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=parent.border)
+        self.KrigingSizer.Add(
+            BlockSizer,
+            flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=parent.border)
+
         self.Sizer = wx.BoxSizer(wx.VERTICAL)
-        self.Sizer.Add(self.VariogramSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = parent.border)
-        self.Sizer.Add(self.KrigingSizer,  proportion = 0, flag = wx.EXPAND | wx.ALL, border = parent.border)
-        
+        self.Sizer.Add(
+            self.VariogramSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=parent.border)
+        self.Sizer.Add(
+            self.KrigingSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=parent.border)
+
     def HideBlockOptions(self, event):
         self.BlockSpinBox.Enable(event.GetInt() == 1)
-    
-    def OnPlotButton(self,event):
+
+    def OnPlotButton(self, event):
         """Plots variogram with current options. """
         pass
-    
+
     def UseValue(self, event):
         """Enables/Disables the SpinCtrl in respect of the checkbox. """
         n = self.ParametersList[event.GetId()]
-        getattr(self, n+"Ctrl").Enable(event.IsChecked())
+        getattr(self, n + "Ctrl").Enable(event.IsChecked())
+
 
 class RBookgstatPanel(RBookPanel):
     """Subclass of RBookPanel, with specific gstat options and kriging functions. """
+
     def __init__(self, parent, Rinstance, controller, *args, **kwargs):
         RBookPanel.__init__(self, parent, *args, **kwargs)
-        
+
         # assigns Rinstance, that comes from the GUI call of v.krige.py.
         robjects = Rinstance
         self.controller = controller
-        
+
         if robjects.r.require('automap')[0]:
-            self.VariogramCheckBox = wx.CheckBox(self, id = wx.ID_ANY, label = _("Auto-fit variogram"))
-            self.LeftSizer.Insert(0,
-                                  self.VariogramCheckBox,
-                                  proportion = 0,
-                                  flag = wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                                  border = 4)
+            self.VariogramCheckBox = wx.CheckBox(
+                self, id=wx.ID_ANY, label=_("Auto-fit variogram"))
+            self.LeftSizer.Insert(
+                0,
+                self.VariogramCheckBox,
+                proportion=0,
+                flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                border=4)
             self.SetSizerAndFit(self.Sizer)
             self.VariogramCheckBox.Bind(wx.EVT_CHECKBOX, self.HideOptions)
-            self.VariogramCheckBox.SetValue(state = True) # check it by default
-        
-        ModelFactor = robjects.r.vgm().rx('long')
-        ModelList = robjects.r.levels(ModelFactor[0])
+            self.VariogramCheckBox.SetValue(state=True)  # check it by default
+
+        # Get list of available models. Show long name but use short one
+        ModelFactor = robjects.r.vgm()
+        ModelList = robjects.r.levels(ModelFactor[1])
+        self.ModelListShort = robjects.r.levels(ModelFactor[0])
         #@FIXME: no other way to let the Python pick it up..
-        # and this is te wrong place where to load this list. should be at the very beginning.
-        self.ModelChoicebox = wx.Choice(self, id = wx.ID_ANY, choices = ModelList)
-        
+        # and this is te wrong place where to load this list. should be at the
+        # very beginning.
+        self.ModelChoicebox = wx.Choice(self, id=wx.ID_ANY, choices=ModelList)
+
         # disable model parameters' widgets by default
-        for n in ["Sill", "Nugget", "Range"]:
-            getattr(self, n+"Ctrl").Enable(False)
+        for n in ["Sill", "Nugget", "Range", "Kappa"]:
+            getattr(self, n + "Ctrl").Enable(False)
         self.ModelChoicebox.Enable(False)
-        
+
         VariogramSubSizer = wx.BoxSizer(wx.HORIZONTAL)
-        VariogramSubSizer.Add(item = wx.StaticText(self,
-                                                 id =  wx.ID_ANY,
-                                                 label = _("Model: ")),
-                              flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                              border = 4)
-        VariogramSubSizer.Add(item = self.ModelChoicebox,
-                              flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL,
-                              border = 4)
-        
-        self.LeftSizer.Insert(2, item = VariogramSubSizer)
-        
+        VariogramSubSizer.Add(item=wx.StaticText(self,
+                                                 id=wx.ID_ANY,
+                                                 label=_("Model: ")),
+                              flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                              border=4)
+        VariogramSubSizer.Add(item=self.ModelChoicebox,
+                              flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                              border=4)
+
+        self.LeftSizer.Insert(2, item=VariogramSubSizer)
+
         self.SetSizerAndFit(self.Sizer)
-    
+
     def HideOptions(self, event):
         self.ModelChoicebox.Enable(not event.IsChecked())
-        for n in ["Sill", "Nugget", "Range"]:
+        for n in ["Sill", "Nugget", "Range", "Kappa"]:
             if not event.IsChecked():
-                getattr(self, n+"Ctrl").Enable(True)
-                getattr(self, n+ "ChextBox").SetValue(True)
-                getattr(self, n+ "ChextBox").Enable(False) # grey it out keeping it checked.. improvable
+                getattr(self, n + "Ctrl").Enable(True)
+                getattr(self, n + "ChextBox").SetValue(True)
+                # grey it out keeping it checked.. improvable
+                getattr(self, n + "ChextBox").Enable(False)
             else:
-                getattr(self, n+"Ctrl").Enable(False)
-                getattr(self, n+ "ChextBox").SetValue(False)
-                getattr(self, n+ "ChextBox").Enable(True)
+                getattr(self, n + "Ctrl").Enable(False)
+                getattr(self, n + "ChextBox").SetValue(False)
+                getattr(self, n + "ChextBox").Enable(True)
         #@FIXME: was for n in self.ParametersSizer.GetChildren(): n.Enable(False) but doesn't work
-        
-    def OnPlotButton(self,event):
+
+    def OnPlotButton(self, event):
         """Plots variogram with current options. """
-        ## BIG WARNING: smell of code duplication. Fix this asap. emminchia!
-        #controller = Controller() # sed, if needed,
+        # BIG WARNING: smell of code duplication. Fix this asap. emminchia!
+        # controller = Controller() # sed, if needed,
         #controller = self.controller
         map = self.parent.InputDataMap.GetValue()
         column = self.parent.InputDataColumn.GetValue()
-        
+
         # import data or pick them up
         if self.controller.InputData is None:
-            self.controller.InputData = self.controller.ImportMap(map = map,
-                                                          column = column)
+            self.controller.InputData = self.controller.ImportMap(
+                map=map, column=column)
         # fit the variogram or pick it up
         #~ Formula = self.controller.ComposeFormula(column = column,
-                                            #~ isblock = self.KrigingRadioBox.GetStringSelection() == "Block kriging")
-        if hasattr(self, 'VariogramCheckBox') and self.VariogramCheckBox.IsChecked():
+            #~ isblock = self.KrigingRadioBox.GetStringSelection() == "Block kriging")
+        if hasattr(
+                self, 'VariogramCheckBox') and self.VariogramCheckBox.IsChecked():
             self.model = ''
-            for each in ("Sill","Nugget","Range"):
-                if getattr(self, each+'ChextBox').IsChecked():
-                    setattr(self, each.lower(), getattr(self, each+"Ctrl").GetValue())
+            for each in ("Sill", "Nugget", "Range", "Kappa"):
+                if getattr(self, each + 'ChextBox').IsChecked():
+                    setattr(
+                        self, each.lower(), getattr(
+                            self, each + "Ctrl").GetValue())
                 else:
                     setattr(self, each.lower(), robjects.r('''NA'''))
+
         else:
-            self.model = self.ModelChoicebox.GetStringSelection().split(" ")[0]
-            for each in ("Sill","Nugget","Range"):
-                if getattr(self, each+'ChextBox').IsChecked(): #@FIXME will be removed when chextboxes will be frozen
-                    setattr(self, each.lower(), getattr(self, each+"Ctrl").GetValue())
-                    
+            self.model = self.ModelListShort[
+                self.ModelChoicebox.GetSelection()]
+            for each in ("Sill", "Nugget", "Range", "Kappa"):
+                # @FIXME will be removed when chextboxes will be frozen
+                if getattr(self, each + 'ChextBox').IsChecked():
+                    setattr(
+                        self, each.lower(), getattr(
+                            self, each + "Ctrl").GetValue())
+
         isblock = self.KrigingRadioBox.GetStringSelection() == "Block kriging"
         if isblock is not '':
             self.predictor = 'x+y'
         else:
             self.predictor = '1'
-        
-        self.controller.Variogram = self.controller.FitVariogram(robjects.Formula(str(column) + "~" + self.predictor),
-                                                         self.controller.InputData,
-                                                         model = self.model,
-                                                         sill = self.sill,
-                                                         nugget = self.nugget,
-                                                         range = self.range)
+
+        self.controller.Variogram = self.controller.FitVariogram(
+            robjects.Formula(str(column) + "~" + self.predictor),
+            self.controller.InputData, model=self.model, sill=self.sill,
+            nugget=self.nugget, range=self.range, kappa=self.kappa)
+
+        ''' Fill parameters with autofitted values '''
+        if hasattr(
+                self, 'VariogramCheckBox') and self.VariogramCheckBox.IsChecked():
+            for i in range(len(self.ModelListShort)):
+                if self.ModelListShort[
+                        i] == self.controller.Variogram['model']:
+                    self.ModelChoicebox.SetSelection(i)
+                    break
+            if not getattr(self, 'SillChextBox').IsChecked():
+                self.sill = self.controller.Variogram['variogrammodel'][1][1]
+                self.SillCtrl.SetValue(self.sill)
+            if not getattr(self, 'NuggetChextBox').IsChecked():
+                self.nugget = self.controller.Variogram['variogrammodel'][1][0]
+                self.NuggetCtrl.SetValue(self.nugget)
+            if not getattr(self, 'RangeChextBox').IsChecked():
+                self.range = self.controller.Variogram['variogrammodel'][2][1]
+                self.RangeCtrl.SetValue(self.range)
+            if not getattr(self, 'KappaChextBox').IsChecked():
+                self.kappa = self.controller.Variogram['variogrammodel'][3][1]
+                self.KappaCtrl.SetValue(self.kappa)
 
         # use R plot function, in a separate window.
         thread.start_new_thread(self.plot, ())
-        
+
     def plot(self):
-        #robjects.r.X11()
-        #robjects.r.png("variogram.png")
-        textplot = robjects.r.plot(self.controller.Variogram['datavariogram'], 
+        # robjects.r.X11()
+        # robjects.r.png("variogram.png")
+        textplot = robjects.r.plot(self.controller.Variogram['datavariogram'],
                                    self.controller.Variogram['variogrammodel'])
         print textplot
         self.refresh()
-        #robjects.r['dev.off']()
+        # robjects.r['dev.off']()
 
     def refresh(self):
         while True:
             rinterface.process_revents()
             time.sleep(0.2)
-        
+
+
 class RBookgeoRPanel(RBookPanel):
     """Subclass of RBookPanel, with specific geoR options and kriging functions. """
+
     def __init__(self, parent, *args, **kwargs):
         RBookPanel.__init__(self, parent, *args, **kwargs)
         #@TODO: change these two lines as soon as geoR f(x)s are integrated.
         for n in self.GetChildren():
             n.Hide()
-        self.Sizer.Add(wx.StaticText(self, id = wx.ID_ANY, label = _("Work in progress! No functionality provided.")))
+        self.Sizer.Add(
+            wx.StaticText(
+                self,
+                id=wx.ID_ANY,
+                label=_("Work in progress! No functionality provided.")))
         self.SetSizerAndFit(self.Sizer)
diff --git a/gui/wxpython/nviz/__init__.py b/gui/wxpython/nviz/__init__.py
index 26ce05a..70652e3 100644
--- a/gui/wxpython/nviz/__init__.py
+++ b/gui/wxpython/nviz/__init__.py
@@ -6,4 +6,4 @@ all = [
     'wxnviz',
     'workspace',
     'animation',
-    ]
+]
diff --git a/gui/wxpython/nviz/animation.py b/gui/wxpython/nviz/animation.py
index db94955..3e0daab 100644
--- a/gui/wxpython/nviz/animation.py
+++ b/gui/wxpython/nviz/animation.py
@@ -11,7 +11,7 @@ Classes:
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
 
- at author Anna Kratochvilova <kratochanna gmail.com> 
+ at author Anna Kratochvilova <kratochanna gmail.com>
 """
 
 import os
@@ -22,27 +22,29 @@ import wx
 from grass.pydispatch.signal import Signal
 from core.utils import _
 
+
 class Animation:
     """Class represents animation as a sequence of states (views).
     It enables to record, replay the sequence and finally generate
     all image files. Recording and replaying is based on timer events.
     There is no frame interpolation like in the Tcl/Tk based Nviz.
     """
+
     def __init__(self, mapWindow, timer):
         """Animation constructor
-        
+
         Signals:
             animationFinished - emitted when animation finished
                               - attribute 'mode'
             animationUpdateIndex - emitted during animation to update gui
                                  - attributes 'index' and 'mode'
-        
+
         :param mapWindow: glWindow where rendering takes place
         :param timer: timer for recording and replaying
         """
         self.animationFinished = Signal('Animation.animationFinished')
         self.animationUpdateIndex = Signal('Animation.animationUpdateIndex')
-        
+
         self.animationList = []         # view states
         self.timer = timer
         self.mapWindow = mapWindow
@@ -52,36 +54,37 @@ class Animation:
         self.mode = 'record'            # current mode (record, play, save)
         self.paused = False             # recording/replaying paused
         self.currentFrame = 0           # index of current frame
-        self.fps = 24 # user settings   # Frames per second
-        
+        self.fps = 24  # user settings   # Frames per second
+
         self.stopSaving = False         # stop during saving images
         self.animationSaved = False     # current animation saved or not
-        
+
     def Start(self):
         """Start recording/playing"""
         self.timer.Start(self.GetInterval())
-        
+
     def Pause(self):
         """Pause recording/playing"""
         self.timer.Stop()
-        
+
     def Stop(self):
         """Stop recording/playing"""
         self.timer.Stop()
         self.PostFinishedEvent()
-        
+
     def Update(self):
         """Record/play next view state (on timer event)"""
         self.actions[self.mode]()
-    
+
     def Record(self):
         """Record new view state"""
-        self.animationList.append({'view' : copy.deepcopy(self.mapWindow.view),
-                                   'iview': copy.deepcopy(self.mapWindow.iview)})
+        self.animationList.append(
+            {'view': copy.deepcopy(self.mapWindow.view),
+             'iview': copy.deepcopy(self.mapWindow.iview)})
         self.currentFrame += 1
-        self.PostUpdateIndexEvent(index = self.currentFrame)
+        self.PostUpdateIndexEvent(index=self.currentFrame)
         self.animationSaved = False
-        
+
     def Play(self):
         """Render next frame"""
         if not self.animationList:
@@ -92,94 +95,94 @@ class Animation:
         except IndexError:
             # no more frames
             self.Stop()
-            
+
     def IterAnimation(self):
         params = self.animationList[self.currentFrame]
         self.UpdateView(params)
         self.currentFrame += 1
-        
-        self.PostUpdateIndexEvent(index = self.currentFrame)
-        
+
+        self.PostUpdateIndexEvent(index=self.currentFrame)
+
     def UpdateView(self, params):
         """Update view data in map window and render"""
         toolWin = self.mapWindow.GetToolWin()
-        toolWin.UpdateState(view = params['view'], iview = params['iview'])
-        
+        toolWin.UpdateState(view=params['view'], iview=params['iview'])
+
         self.mapWindow.UpdateView()
-        
+
         self.mapWindow.render['quick'] = True
         self.mapWindow.Refresh(False)
-        
+
     def IsRunning(self):
         """Test if timer is running"""
         return self.timer.IsRunning()
-        
+
     def SetMode(self, mode):
         """Start animation mode
-        
+
         :param mode: animation mode (record, play, save)
         """
         self.mode = mode
-        
+
     def GetMode(self):
         """Get animation mode (record, play, save)"""
         return self.mode
-        
+
     def IsPaused(self):
         """Test if animation is paused"""
         return self.paused
-        
+
     def SetPause(self, pause):
         self.paused = pause
-        
+
     def Exists(self):
         """Returns if an animation has been recorded"""
         return bool(self.animationList)
-        
+
     def GetFrameCount(self):
         """Return number of recorded frames"""
         return len(self.animationList)
-        
+
     def Clear(self):
         """Clear all records"""
         self.animationList = []
         self.currentFrame = 0
-        
+
     def GoToFrame(self, index):
         """Render frame of given index"""
         if index >= len(self.animationList):
             return
-            
+
         self.currentFrame = index
         params = self.animationList[self.currentFrame]
         self.UpdateView(params)
-        
+
     def PostFinishedEvent(self):
         """Animation ends"""
         self.animationFinished.emit(mode=self.mode)
-        
+
     def PostUpdateIndexEvent(self, index):
         """Frame index changed, update tool window"""
         self.animationUpdateIndex(index=index, mode=self.mode)
-        
+
     def StopSaving(self):
         """Abort image files generation"""
         self.stopSaving = True
-        
+
     def IsSaved(self):
         """"Test if animation has been saved (to images)"""
         return self.animationSaved
-        
+
     def SaveAnimationFile(self, path, prefix, format):
         """Generate image files
-        
+
         :param path: path to direcory
         :param prefix: file prefix
         :param format: index of image file format
         """
         w, h = self.mapWindow.GetClientSizeTuple()
         toolWin = self.mapWindow.GetToolWin()
-        
+
         formatter = ':04.0f'
         n = len(self.animationList)
         if n < 10:
@@ -194,17 +197,24 @@ class Animation:
         for params in self.animationList:
             if not self.stopSaving:
                 self.UpdateView(params)
-                number = ('{frame' + formatter +'}').format(frame=self.currentFrame)
-                filename = "{prefix}_{number}.{ext}".format(prefix=prefix,
-                                                            number=number,
-                                                            ext=self.formats[format])
+                number = (
+                    '{frame' +
+                    formatter +
+                    '}').format(
+                    frame=self.currentFrame)
+                filename = "{prefix}_{number}.{ext}".format(
+                    prefix=prefix, number=number, ext=self.formats[format])
                 filepath = os.path.join(path, filename)
-                self.mapWindow.SaveToFile(FileName = filepath, FileType = self.formats[format],
-                                                  width = w, height = h)
+                self.mapWindow.SaveToFile(
+                    FileName=filepath,
+                    FileType=self.formats[format],
+                    width=w,
+                    height=h)
                 self.currentFrame += 1
-                
+
                 wx.Yield()
-                toolWin.UpdateFrameIndex(index = self.currentFrame, goToFrame = False)
+                toolWin.UpdateFrameIndex(
+                    index=self.currentFrame, goToFrame=False)
             else:
                 self.stopSaving = False
                 break
@@ -216,7 +226,7 @@ class Animation:
         :param fps: frames per second
         """
         self.fps = fps
-    
+
     def GetInterval(self):
         """Return timer interval in ms"""
         return 1000. / self.fps
diff --git a/gui/wxpython/nviz/main.py b/gui/wxpython/nviz/main.py
index 9ca6b6c..8066195 100644
--- a/gui/wxpython/nviz/main.py
+++ b/gui/wxpython/nviz/main.py
@@ -20,7 +20,7 @@ This program is free software under the GNU General Public License
 errorMsg = ''
 
 try:
-    from wx   import glcanvas
+    from wx import glcanvas
     from nviz import mapwindow
     from nviz import tools
     from nviz import workspace
@@ -31,10 +31,10 @@ except (ImportError, NameError) as err:
     errorMsg = err
 
 if haveNviz:
-    GLWindow       = mapwindow.GLWindow
+    GLWindow = mapwindow.GLWindow
     NvizToolWindow = tools.NvizToolWindow
-    NvizSettings   = workspace.NvizSettings
+    NvizSettings = workspace.NvizSettings
 else:
-    GLWindow       = None
+    GLWindow = None
     NvizToolWindow = None
-    NvizSettings   = None
+    NvizSettings = None
diff --git a/gui/wxpython/nviz/mapwindow.py b/gui/wxpython/nviz/mapwindow.py
index 6b58ef3..6537c97 100644
--- a/gui/wxpython/nviz/mapwindow.py
+++ b/gui/wxpython/nviz/mapwindow.py
@@ -28,50 +28,54 @@ import types
 from threading import Thread
 
 import wx
-from   wx.lib.newevent import NewEvent
-from   wx              import glcanvas
-from wx.glcanvas       import WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE
+from wx.lib.newevent import NewEvent
+from wx import glcanvas
+from wx.glcanvas import WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE
 
 import grass.script as grass
 from grass.pydispatch.signal import Signal
 
-from core.gcmd          import GMessage, GException, GError
-from core.debug         import Debug
+from core.gcmd import GMessage, GException, GError
+from core.debug import Debug
 from mapwin.base import MapWindowBase
-from core.settings      import UserSettings
-from nviz.workspace     import NvizSettings
-from nviz.animation     import Animation
-from nviz               import wxnviz
-from core.globalvar     import CheckWxVersion
-from core.utils         import str2rgb, _
+from core.settings import UserSettings
+from nviz.workspace import NvizSettings
+from nviz.animation import Animation
+from nviz import wxnviz
+from core.globalvar import CheckWxVersion
+from core.utils import str2rgb, _
 from core.giface import Notification
 
-wxUpdateProperties, EVT_UPDATE_PROP  = NewEvent()
-wxUpdateView,       EVT_UPDATE_VIEW  = NewEvent()
-wxUpdateLight,      EVT_UPDATE_LIGHT = NewEvent()
-wxUpdateCPlane,     EVT_UPDATE_CPLANE = NewEvent()
+wxUpdateProperties, EVT_UPDATE_PROP = NewEvent()
+wxUpdateView, EVT_UPDATE_VIEW = NewEvent()
+wxUpdateLight, EVT_UPDATE_LIGHT = NewEvent()
+wxUpdateCPlane, EVT_UPDATE_CPLANE = NewEvent()
+
 
 class NvizThread(Thread):
+
     def __init__(self, log, progressbar, window):
         Thread.__init__(self)
         Debug.msg(5, "NvizThread.__init__():")
         self.log = log
         self.progressbar = progressbar
         self.window = window
-        
+
         self._display = None
-        
+
         self.setDaemon(True)
 
     def run(self):
         self._display = wxnviz.Nviz(self.log, self.progressbar)
-        
+
     def GetDisplay(self):
         """Get display instance"""
         return self._display
 
+
 class GLWindow(MapWindowBase, glcanvas.GLCanvas):
     """OpenGL canvas for Map Display Window"""
+
     def __init__(self, parent, giface, frame, Map, tree, lmgr, id=wx.ID_ANY):
         """All parameters except for id are mandatory. The todo is to remove
         them completely."""
@@ -85,8 +89,17 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         # in wxpython 2.9, there is IsDisplaySupported
         if CheckWxVersion(version=[2, 8, 11]) and \
            sys.platform not in ('win32', 'darwin'):
-            depthBuffer = int(UserSettings.Get(group='display', key='nvizDepthBuffer', subkey='value'))
-            attribs = [WX_GL_RGBA, WX_GL_DOUBLEBUFFER, WX_GL_DEPTH_SIZE, depthBuffer, 0]
+            depthBuffer = int(
+                UserSettings.Get(
+                    group='display',
+                    key='nvizDepthBuffer',
+                    subkey='value'))
+            attribs = [
+                WX_GL_RGBA,
+                WX_GL_DOUBLEBUFFER,
+                WX_GL_DEPTH_SIZE,
+                depthBuffer,
+                0]
             glcanvas.GLCanvas.__init__(self, parent, id, attribList=attribs)
         else:
             glcanvas.GLCanvas.__init__(self, parent, id)
@@ -117,18 +130,18 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         if CheckWxVersion(version=[2, 9]):
             self.context = glcanvas.GLContext(self)
 
-        # render mode 
-        self.render = { 'quick' : False,
-                        # do not render vector lines in quick mode
-                        'vlines' : False,
-                        'vpoints' : False,
-                        'overlays': False }
+        # render mode
+        self.render = {'quick': False,
+                       # do not render vector lines in quick mode
+                       'vlines': False,
+                       'vpoints': False,
+                       'overlays': False}
         self.mouse = {
             'use': 'pointer'
-            }
+        }
 
         # list of loaded map layers (layer tree items)
-        self.layers  = list()
+        self.layers = list()
         # list of constant surfaces
         self.constants = list()
         # id of base surface (when vector is loaded and no surface exist)
@@ -138,7 +151,7 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         # list of query points
         self.qpoints = list()
         # list of past views
-        self.viewhistory  = []
+        self.viewhistory = []
         self.saveHistory = False
         # offset for dialog (e.g. DisplayAttributesDialog)
         self.dialogOffset = 5
@@ -147,217 +160,235 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         self.imagelist = []
         self.overlay = wx.Overlay()
         #self.pdc = wx.PseudoDC()
-        self.textdict = {}
         self.dragid = -1
         self.hitradius = 5
         # layer manager toolwindow
         self.toolWin = None
-        
+
         if self.lmgr:
             self.log = self.lmgr._gconsole
-            logerr = self.lmgr._gconsole.GetLog(err = True)
+            logerr = self.lmgr._gconsole.GetLog(err=True)
             logmsg = self.lmgr._gconsole.GetLog()
         else:
             self.log = logmsg = sys.stdout
             logerr = sys.stderr
-        
+
         # create nviz instance - use display region instead of computational
-        
-        os.environ['GRASS_REGION'] = self.Map.SetRegion(windres = True, windres3 = True)
+
+        os.environ['GRASS_REGION'] = self.Map.SetRegion(
+            windres=True, windres3=True)
         self.nvizThread = NvizThread(logerr,
                                      self.parent.GetProgressBar(),
                                      logmsg)
         self.nvizThread.start()
         time.sleep(.1)
         self._display = self.nvizThread.GetDisplay()
-        
+
         # GRASS_REGION needed only for initialization
         del os.environ['GRASS_REGION']
-        
+
         self.img = wx.Image(self.Map.mapfile, wx.BITMAP_TYPE_ANY)
-        
+
         # size of MapWindow, to avoid resizing if size is the same
         self.size = (0, 0)
-        
+
         # default values
         self.nvizDefault = NvizSettings()
-        self.view = copy.deepcopy(UserSettings.Get(group = 'nviz', key = 'view')) # copy
-        self.iview = UserSettings.Get(group='nviz', key='view', settings_type='internal')
-        self.light = copy.deepcopy(UserSettings.Get(group = 'nviz', key = 'light')) # copy
-        self.decoration = self.nvizDefault.SetDecorDefaultProp(type = 'arrow')
+        self.view = copy.deepcopy(
+            UserSettings.Get(
+                group='nviz',
+                key='view'))  # copy
+        self.iview = UserSettings.Get(
+            group='nviz', key='view', settings_type='internal')
+        self.light = copy.deepcopy(
+            UserSettings.Get(
+                group='nviz',
+                key='light'))  # copy
+        self.decoration = self.nvizDefault.SetDecorDefaultProp(type='arrow')
         self.decoration['scalebar'] = []
         self.decoration['arrow']['size'] = self._getDecorationSize()
         self.fly = self.InitFly()
-        
+
         # timer for flythrough
-        self.timerFly = wx.Timer(self, id = wx.NewId())
+        self.timerFly = wx.Timer(self, id=wx.NewId())
         # timer for animations
-        self.timerAnim = wx.Timer(self, id = wx.NewId())
-        self.animation = Animation(mapWindow = self, timer = self.timerAnim)        
-        
+        self.timerAnim = wx.Timer(self, id=wx.NewId())
+        self.animation = Animation(mapWindow=self, timer=self.timerAnim)
+
         self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnEraseBackground)
-        self.Bind(wx.EVT_SIZE,             self.OnSize)
-        self.Bind(wx.EVT_PAINT,            self.OnPaint)
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.Bind(wx.EVT_PAINT, self.OnPaint)
         self._bindMouseEvents()
-        
-        self.Bind(EVT_UPDATE_PROP,   self.UpdateMapObjProperties)
-        self.Bind(EVT_UPDATE_VIEW,   self.OnUpdateView)
-        self.Bind(EVT_UPDATE_LIGHT,  self.UpdateLight)
+
+        self.Bind(EVT_UPDATE_PROP, self.UpdateMapObjProperties)
+        self.Bind(EVT_UPDATE_VIEW, self.OnUpdateView)
+        self.Bind(EVT_UPDATE_LIGHT, self.UpdateLight)
         self.Bind(EVT_UPDATE_CPLANE, self.OnUpdateCPlane)
-        
+
         self.Bind(wx.EVT_TIMER, self.OnTimerAnim, self.timerAnim)
         self.Bind(wx.EVT_TIMER, self.OnTimerFly, self.timerFly)
         self.Bind(wx.EVT_KEY_DOWN, self.OnKeyDown)
         self.Bind(wx.EVT_KEY_UP, self.OnKeyUp)
-        
+
         self.Bind(wx.EVT_CLOSE, self.OnClose)
-        
+
         if CheckWxVersion(version=[2, 8, 11]) and \
            sys.platform not in ('win32', 'darwin'):
-               wx.CallLater(3000, self._warningDepthBuffer)
-        
+            wx.CallLater(3000, self._warningDepthBuffer)
+
         # cplanes cannot be initialized now
         wx.CallAfter(self.InitCPlanes)
 
     def _warningDepthBuffer(self):
         if not self.initView:
-            message=_("Opening 3D view was not successful. "
-                      "Please try to change the value of depth buffer "
-                      "in GUI Settings dialog > tab Map Display > Advanced "
-                      "and restart GUI.")
+            message = _("Opening 3D view was not successful. "
+                        "Please try to change the value of depth buffer "
+                        "in GUI Settings dialog > tab Map Display > Advanced "
+                        "and restart GUI.")
             GMessage(message)
 
     def InitFly(self):
         """Initialize fly through dictionary"""
-        fly = {'interval' : 10,             # interval for timerFly
+        fly = {'interval': 10,             # interval for timerFly
                'value': [0, 0, 0],          # calculated values for navigation
-               'mode' : 0,                  # fly through mode (0, 1)
-               'exag' : {                   # sensitivity
-                    'move' : UserSettings.Get(group = 'nviz', key = 'fly', subkey = ['exag', 'move']),
-                    'turn' : UserSettings.Get(group = 'nviz', key = 'fly', subkey = ['exag', 'turn'])},
-               'exagMultiplier' : 3,        # speed up by Shift
-               'flySpeed' : 4,              # speed of flying
-               'mouseControl' : None,       # if mouse or keys are used
-               'pos' : {'x' : 0, 'y' : 0},  # virtual mouse position when using arrows
-               'arrowStep' : 50,            # step in pixels (when using arrows)
-               'flySpeedStep' : 2,
-            }
-            
+               'mode': 0,                  # fly through mode (0, 1)
+               'exag': {                   # sensitivity
+                   'move': UserSettings.Get(group='nviz', key='fly', subkey=['exag', 'move']),
+                   'turn': UserSettings.Get(group='nviz', key='fly', subkey=['exag', 'turn'])},
+               'exagMultiplier': 3,        # speed up by Shift
+               'flySpeed': 4,              # speed of flying
+               'mouseControl': None,       # if mouse or keys are used
+               # virtual mouse position when using arrows
+               'pos': {'x': 0, 'y': 0},
+               'arrowStep': 50,            # step in pixels (when using arrows)
+               'flySpeedStep': 2,
+               }
+
         return fly
-        
+
     def OnTimerFly(self, event):
         """Fly event was emitted, move the scene"""
         if self.mouse['use'] != 'fly':
             return
-        
+
         if self.fly['mouseControl']:
             mx, my = self.ComputeMxMy(*self.mouse['tmp'])
         else:
-            mx, my = self.ComputeMxMy(self.fly['pos']['x'], self.fly['pos']['y'])
-            
-        self.ComputeFlyValues(mx = mx, my = my)
-        self._display.FlyThrough(flyInfo = self.fly['value'], mode = self.fly['mode'],
-                                 exagInfo = self.fly['exag'])
-        self.ChangeInnerView()                                 
+            mx, my = self.ComputeMxMy(
+                self.fly['pos']['x'],
+                self.fly['pos']['y'])
+
+        self.ComputeFlyValues(mx=mx, my=my)
+        self._display.FlyThrough(
+            flyInfo=self.fly['value'],
+            mode=self.fly['mode'],
+            exagInfo=self.fly['exag'])
+        self.ChangeInnerView()
         self.render['quick'] = True
         self.Refresh(False)
-        
+
     def ComputeMxMy(self, x, y):
-        """Compute values for flythrough navigation 
-        (ComputeFlyValues should follow). 
-        
+        """Compute values for flythrough navigation
+        (ComputeFlyValues should follow).
+
         Based on visualization/nviz/src/togl_flythrough.c.
         :param x,y: screen coordinates
         """
         sx, sy = self.GetClientSizeTuple()
         dx = dy = 0.01
-        
+
         mx = 2 * (float(x) / sx) - 1
         my = 2 * (float(y) / sy) - 1
-    
+
         if mx < - dx:
             mx += dx
         elif mx > dx:
             mx -= dx
         else:
-            mx = 0.0 # ?
+            mx = 0.0  # ?
         if my < - dy:
             my += dy
         elif my > dy:
             my -= dy
         else:
             my = 0.0
-    
+
         mx = mx / (1.0 - dx)
         my = my / (1.0 - dy)
-    
-        # Quadratic seems smoother 
+
+        # Quadratic seems smoother
         mx *= abs(mx)
         my *= abs(my)
-        
+
         return mx, my
-        
+
     def ComputeFlyValues(self, mx, my):
         """Compute parameters for fly-through navigation
-        
+
         :param mx,my: results from ComputeMxMy method
         """
         self.fly['value'] = [0, 0, 0]
-        
+
         if self.fly['mode'] == 0:
-            self.fly['value'][0] = self.fly['flySpeed'] * self.fly['interval'] / 1000. # forward */
-            self.fly['value'][1] = mx * 0.1 * self.fly['interval'] / 1000. # heading 
-            self.fly['value'][2] = my * 0.1 * self.fly['interval'] / 1000. # pitch 
+            self.fly['value'][0] = self.fly[
+                'flySpeed'] * self.fly['interval'] / 1000.  # forward */
+            self.fly['value'][
+                1] = mx * 0.1 * self.fly['interval'] / 1000.  # heading
+            self.fly['value'][
+                2] = my * 0.1 * self.fly['interval'] / 1000.  # pitch
         else:
-            self.fly['value'][0] = mx * 100.0 * self.fly['interval'] /1000.
-            self.fly['value'][2] = - my * 100.0 * self.fly['interval'] /1000.
-    
+            self.fly['value'][0] = mx * 100.0 * self.fly['interval'] / 1000.
+            self.fly['value'][2] = - my * 100.0 * self.fly['interval'] / 1000.
+
     def ChangeFlySpeed(self, increase):
         """Increase/decrease flight spped"""
         if increase:
             self.fly['flySpeed'] += self.fly['flySpeedStep']
         else:
             self.fly['flySpeed'] -= self.fly['flySpeedStep']
-        
+
     def __del__(self):
         """Stop timers if running, unload data"""
         self.StopTimer(self.timerAnim)
         self.StopTimer(self.timerFly)
-        self.UnloadDataLayers(force = True)
-    
+        self.UnloadDataLayers(force=True)
+
     def StopTimer(self, timer):
         """Stop timer if running"""
         if timer.IsRunning():
             timer.Stop()
-            
+
     def _bindMouseEvents(self):
-        self.Bind(wx.EVT_MOUSE_EVENTS,     self.OnMouseAction)
-        self.Bind(wx.EVT_MOTION,           self.OnMotion)
-        
+        self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouseAction)
+        self.Bind(wx.EVT_MOTION, self.OnMotion)
+
     def InitCPlanes(self):
         """Initialize cutting planes list"""
         for i in range(self._display.GetCPlanesCount()):
-            cplane = copy.deepcopy(UserSettings.Get(group = 'nviz', key = 'cplane'))
+            cplane = copy.deepcopy(
+                UserSettings.Get(
+                    group='nviz',
+                    key='cplane'))
             cplane['on'] = False
             self.cplanes.append(cplane)
-        
+
     def SetToolWin(self, toolWin):
         """Sets reference to nviz toolwindow in layer manager"""
         self.toolWin = toolWin
-        
+
     def GetToolWin(self):
         """Returns reference to nviz toolwindow in layer manager"""
         return self.toolWin
-            
+
     def OnClose(self, event):
         self.StopTimer(self.timerAnim)
         self.StopTimer(self.timerFly)
         # cleanup when window actually closes (on quit) and not just is hidden
-        self.UnloadDataLayers(force = True)
-        
+        self.UnloadDataLayers(force=True)
+
     def OnEraseBackground(self, event):
-        pass # do nothing, to avoid flashing on MSW
-    
+        pass  # do nothing, to avoid flashing on MSW
+
     def OnSize(self, event):
         size = self.GetClientSize()
         if CheckWxVersion(version=[2, 9]):
@@ -365,8 +396,8 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         else:
             context = self.GetContext()
         if self.size != size \
-            and context:
-            Debug.msg(3, "GLCanvas.OnSize(): w = %d, h = %d" % \
+                and context:
+            Debug.msg(3, "GLCanvas.OnSize(): w = %d, h = %d" %
                       (size.width, size.height))
             if CheckWxVersion(version=[2, 9]):
                 self.SetCurrent(self.context)
@@ -374,256 +405,179 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 self.SetCurrent()
             self._display.ResizeWindow(size.width,
                                        size.height)
-        
+
             # reposition checkbox in statusbar
             self.parent.StatusbarReposition()
-            
+
             # update statusbar
             self.parent.StatusbarUpdate()
-            
+
         self.size = size
-        
+
         event.Skip()
-       
+
     def OnPaint(self, event):
         Debug.msg(1, "GLCanvas.OnPaint()")
-        
+
         self.render['overlays'] = True
         dc = wx.PaintDC(self)
         self.DoPaint()
-        
 
     def DoPaint(self):
         if CheckWxVersion(version=[2, 9]):
             self.SetCurrent(self.context)
         else:
             self.SetCurrent()
-        
+
         if not self.initView:
             self._display.InitView()
             self.initView = True
-        
+
         self.LoadDataLayers()
         self.UnloadDataLayers()
-        
+
         if not self.init:
             self.ResetView()
-            
+
             if hasattr(self.lmgr, "nviz"):
                 self.lmgr.nviz.UpdatePage('view')
                 self.lmgr.nviz.UpdatePage('light')
                 self.lmgr.nviz.UpdatePage('cplane')
                 self.lmgr.nviz.UpdatePage('decoration')
                 self.lmgr.nviz.UpdatePage('animation')
-                layer = self.tree.GetSelectedLayer(multi = False, checkedOnly = True)
+                layer = self.tree.GetSelectedLayer(
+                    multi=False, checkedOnly=True)
                 if layer:
-                    layer = self.tree.GetLayerInfo(layer, key = 'maplayer')
-                    if layer.type ==  'raster':
+                    layer = self.tree.GetLayerInfo(layer, key='maplayer')
+                    if layer.type == 'raster':
                         self.lmgr.nviz.UpdatePage('surface')
                         self.lmgr.nviz.UpdatePage('fringe')
-                    elif layer.type ==  'vector':
+                    elif layer.type == 'vector':
                         self.lmgr.nviz.UpdatePage('vector')
-                
+
                 self.lmgr.nviz.UpdateSettings()
-                
+
                 # update widgets
-                win = self.lmgr.nviz.FindWindowById( \
+                win = self.lmgr.nviz.FindWindowById(
                     self.lmgr.nviz.win['vector']['lines']['surface'])
                 win.SetItems(self.GetLayerNames('raster'))
-            
+
             self.init = True
-        
+
         self.UpdateMap()
-        
+
     def DrawImages(self):
         """Draw overlay image"""
         for texture in self.imagelist:
             if texture.IsActive():
                 texture.Draw()
-            
-    def GetLegendRect(self):
-        """Estimates legend size for dragging"""
-        size = None
-        if 0 in self.overlays:
-            for param in self.overlays[0].cmd[1:]:
-                if param.startswith("at="):
-                    size = map(float, param.split("=")[-1].split(','))
-                    break
-        if size:
-            wSize = self.GetClientSizeTuple()
-            x, y = size[2]/100. * wSize[0], wSize[1] - (size[1]/100. * wSize[1])
-            x += self.overlays[1].coords[0]
-            y += self.overlays[1].coords[1]
-            w = (size[3] - size[2])/100. * wSize[0]
-            h = (size[1] - size[0])/100. * wSize[1]
-            
-            rect = wx.Rect(x, y, w, h)
-            return rect
-        
-        return wx.Rect()        
-        
-    def DrawTextImage(self, textDict, relCoords):
-        """Draw overlay text"""
-        bmp = wx.EmptyBitmap(textDict['bbox'][2], textDict['bbox'][3])
-        memDC = wx.MemoryDC()
-        memDC.SelectObject(bmp)
-        
-        mask = self.view['background']['color']
-        if mask == textDict['color']:
-            mask = wx.WHITE
-        memDC.SetBackground(wx.Brush(mask))
-        memDC.Clear()
-        memDC.SetFont(textDict['font'])
-        memDC.SetTextForeground(textDict['color'])
-        if textDict['rotation'] == 0:
-            memDC.DrawText(textDict['text'], 0, 0)
-        else:
-            memDC.DrawRotatedText(textDict['text'], relCoords[0], relCoords[1],
-                                  textDict['rotation'])
-        bmp.SetMaskColour(mask)
-        memDC.DrawBitmap(bmp, 0, 0, 1)
-        
-        filename = grass.tempfile(create = False) + '.png'
-        bmp.SaveFile(filename, wx.BITMAP_TYPE_PNG)
-        memDC.SelectObject(wx.NullBitmap)
-        
-        return filename
-        
+
     def UpdateOverlays(self):
+        """Renders overlays (legend, text).
+        Once this is done _onUpdateOverlays is called"""
+        self.Map.ChangeMapSize(self.GetClientSize())
+        self.Map.RenderOverlays(force=True)
+
+    def _onUpdateOverlays(self):
         """Converts rendered overlay files and text labels to wx.Image
             and then to textures so that they can be rendered by OpenGL.
             Updates self.imagelist"""
-        self.Map.ChangeMapSize(self.GetClientSize())
-        self.Map.RenderOverlays(force = True)
-
-        # delete textures
-        for texture in self.imagelist:
-            # inactive overlays, remove text labels
-            if texture.GetId() < 100:
-                if not self.overlays[texture.GetId()].IsShown():
-                    texture.SetActive(False)
-                else:
-                    texture.SetActive(True)
-            else: # text label
-                if texture.GetId() not in self.textdict:
-                    self.imagelist.remove(texture)
-                    
-        # update images (only legend so far)
+        # update images (legend and text)
         for oid, overlay in self.overlays.iteritems():
-            if not overlay.IsShown() or oid in (1, 2): # 0 for barscale
+            if not overlay.IsShown() or overlay.name in ('barscale', 'northarrow'):
                 continue
-            if oid not in [t.GetId() for t in self.imagelist]: # new
-                self.CreateTexture(overlay = overlay.layer)
+            if oid not in [t.GetId() for t in self.imagelist]:  # new
+                self.CreateTexture(overlay=overlay)
             else:
                 for t in self.imagelist:
-                    if t.GetId() == oid: # check if it is the same
+                    if t.GetId() == oid:  # check if it is the same
                         if not t.Corresponds(overlay):
                             self.imagelist.remove(t)
-                            t = self.CreateTexture(overlay = overlay.layer)
+                            t = self.CreateTexture(overlay=overlay)
 
-        # update text labels
-        for textId in self.textdict.keys():
-            if textId not in [t.GetId() for t in self.imagelist]:# new
-                self.CreateTexture(textId = textId)
-            else:
-                for t in self.imagelist:
-                    if t.GetId() == textId: # check if it is the same
-                        self.textdict[textId]['bbox'] = t.textDict['bbox']
-                        if not t.Corresponds(self.textdict[textId]):
-                            self.imagelist.remove(t)
-                            t = self.CreateTexture(textId = textId)
-                        # always set coordinates, needed for synchr. 2D and 3D modes
-                        t.SetCoords(self.textdict[textId]['coords'])
         self.Refresh()
-            
-    def CreateTexture(self, overlay = None, textId = None):
-        """Create texture from overlay image or from textdict"""
-        if overlay: # legend  
-            texture = wxnviz.ImageTexture(filepath = overlay.mapfile, overlayId = overlay.id,
-                                          coords = list(self.overlays[overlay.id].coords),
-                                          cmd = overlay.GetCmd())
-            if overlay.id == 0: # legend
-                texture.SetBounds(self.GetLegendRect())
-        else: # text
-            coords, bbox, relCoords = self.TextBounds(self.textdict[textId])
-            self.textdict[textId]['coords'] = coords
-            self.textdict[textId]['bbox'] = bbox
-            file = self.DrawTextImage(self.textdict[textId], relCoords)
-            texture = wxnviz.TextTexture(filepath = file, overlayId = textId,
-                                         coords = coords, textDict = self.textdict[textId])
-            bbox.OffsetXY(*relCoords)
-            texture.SetBounds(bbox)
-            
-        if not texture.textureId: # texture too big
-            GMessage(parent = self, message = 
-                     _("Image is too large, your OpenGL implementation "
-                       "supports maximum texture size %d px.") % texture.maxSize)
+
+    def CreateTexture(self, overlay):
+        """Create texture from overlay image"""
+        texture = wxnviz.ImageTexture(
+                filepath=overlay.layer.mapfile, overlayId=overlay.id,
+                coords=list(overlay.coords), cmd=overlay.GetCmd())
+
+        if not texture.textureId:  # texture too big
+            GMessage(
+                parent=self, message=_(
+                    "Image is too large, your OpenGL implementation "
+                    "supports maximum texture size %d px.") %
+                texture.maxSize)
             return texture
-            
+
         self.imagelist.append(texture)
-        
+
         return texture
-        
+
+    def ClearTextures(self):
+        self.imagelist = []
+
     def FindObjects(self, mouseX, mouseY, radius):
         """Find object which was clicked on"""
         for texture in self.imagelist:
             if texture.HitTest(mouseX, mouseY, radius):
                 return texture.id
         return -1
-        
+
     def OnTimerAnim(self, event):
-         self.animation.Update()
-         
+        self.animation.Update()
+
     def GetAnimation(self):
-         return self.animation
-         
+        return self.animation
+
     def OnKeyDown(self, event):
         """Key was pressed.
-        
+
         Used for fly-through mode.
         """
         if not self.mouse['use'] == 'fly':
             return
-            
+
         key = event.GetKeyCode()
-        if key == wx.WXK_CONTROL: # Mac ?
+        if key == wx.WXK_CONTROL:  # Mac ?
             self.fly['mode'] = 1
-            
-        elif key == wx.WXK_SHIFT: 
+
+        elif key == wx.WXK_SHIFT:
             self.fly['exag']['move'] *= self.fly['exagMultiplier']
             self.fly['exag']['turn'] *= self.fly['exagMultiplier']
-            
+
         elif key == wx.WXK_ESCAPE and self.timerFly.IsRunning() and not self.fly['mouseControl']:
             self.StopTimer(self.timerFly)
             self.fly['mouseControl'] = None
             self.render['quick'] = False
             self.Refresh(False)
-            
+
         elif key in (wx.WXK_UP, wx.WXK_DOWN, wx.WXK_LEFT, wx.WXK_RIGHT):
             if not self.fly['mouseControl']:
                 if not self.timerFly.IsRunning():
                     sx, sy = self.GetClientSizeTuple()
                     self.fly['pos']['x'] = sx / 2
                     self.fly['pos']['y'] = sy / 2
-                    self.fly['mouseControl'] = False # controlled by keyboard
+                    self.fly['mouseControl'] = False  # controlled by keyboard
                     self.timerFly.Start(self.fly['interval'])
-    
-                self.ProcessFlyByArrows(keyCode = key)
-                
+
+                self.ProcessFlyByArrows(keyCode=key)
+
             # change speed of flight when using mouse
             else:
                 if key == wx.WXK_UP:
-                    self.ChangeFlySpeed(increase = True)
+                    self.ChangeFlySpeed(increase=True)
                 elif key == wx.WXK_DOWN:
-                    self.ChangeFlySpeed(increase = False)
-        
+                    self.ChangeFlySpeed(increase=False)
+
         elif key in (wx.WXK_HOME, wx.WXK_PAGEUP) and self.timerFly.IsRunning():
-            self.ChangeFlySpeed(increase = True)
+            self.ChangeFlySpeed(increase=True)
         elif key in (wx.WXK_END, wx.WXK_PAGEDOWN) and self.timerFly.IsRunning():
-            self.ChangeFlySpeed(increase = False)
-            
+            self.ChangeFlySpeed(increase=False)
+
         event.Skip()
-        
+
     def ProcessFlyByArrows(self, keyCode):
         """Process arrow key during fly-through"""
         step = self.fly['arrowStep']
@@ -635,43 +589,45 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             self.fly['pos']['x'] -= step
         elif keyCode == wx.WXK_RIGHT:
             self.fly['pos']['x'] += step
-            
+
     def OnKeyUp(self, event):
         """Key was released.
-        
+
         Used for fly-through mode.
         """
         if not self.mouse['use'] == 'fly':
             return
-            
+
         key = event.GetKeyCode()
-        if key == wx.WXK_CONTROL: # Mac ?
+        if key == wx.WXK_CONTROL:  # Mac ?
             self.fly['mode'] = 0
-        elif key == wx.WXK_SHIFT: 
-            self.fly['exag']['move'] = math.floor(self.fly['exag']['move'] / self.fly['exagMultiplier'])
-            self.fly['exag']['turn'] = math.floor(self.fly['exag']['turn'] / self.fly['exagMultiplier'])
-        
+        elif key == wx.WXK_SHIFT:
+            self.fly['exag']['move'] = math.floor(
+                self.fly['exag']['move'] / self.fly['exagMultiplier'])
+            self.fly['exag']['turn'] = math.floor(
+                self.fly['exag']['turn'] / self.fly['exagMultiplier'])
+
         event.Skip()
-        
+
     def OnMouseAction(self, event):
         """Handle mouse events"""
         # zoom with mouse wheel
         if event.GetWheelRotation() != 0:
             self.OnMouseWheel(event)
-            
+
         # left mouse button pressed
         elif event.LeftDown():
             self.OnLeftDown(event)
-        
+
         # left mouse button released
         elif event.LeftUp():
             self.OnLeftUp(event)
-        
+
         # dragging
         elif event.Dragging():
             self.OnDragging(event)
-            
-        # double click    
+
+        # double click
         elif event.ButtonDClick():
             self.OnDClick(event)
 
@@ -687,36 +643,38 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
 
     def OnMouseWheel(self, event):
         """Change perspective"""
-        if UserSettings.Get(group = 'display',
-                            key = 'mouseWheelZoom',
-                            subkey = 'selection') == 2:
+        if UserSettings.Get(group='display',
+                            key='mouseWheelZoom',
+                            subkey='selection') == 2:
             event.Skip()
             return
-            
+
         wheel = event.GetWheelRotation()
-        Debug.msg (5, "GLWindow.OnMouseWheel(): wheel = %d" % wheel)
+        Debug.msg(5, "GLWindow.OnMouseWheel(): wheel = %d" % wheel)
         if self.timerFly.IsRunning() and self.fly['mouseControl']:
             if wheel > 0:
-                self.ChangeFlySpeed(increase = True)
+                self.ChangeFlySpeed(increase=True)
             else:
-                self.ChangeFlySpeed(increase = False)
+                self.ChangeFlySpeed(increase=False)
         else:
-            if UserSettings.Get(group = 'display',
-                                key = 'scrollDirection',
-                                subkey = 'selection'):
+            if UserSettings.Get(group='display',
+                                key='scrollDirection',
+                                subkey='selection'):
                 wheel *= -1
-            self.DoZoom(zoomtype = wheel, pos = event.GetPositionTuple())
-            
+            self.DoZoom(zoomtype=wheel, pos=event.GetPositionTuple())
+
         # update statusbar
-        ### self.parent.StatusbarUpdate()
-            
+        # self.parent.StatusbarUpdate()
+
     def OnLeftDown(self, event):
         """On left mouse down"""
         self.mouse['begin'] = event.GetPositionTuple()
         self.mouse['tmp'] = event.GetPositionTuple()
         if self.mouse['use'] == "lookHere":
             size = self.GetClientSize()
-            self._display.LookHere(self.mouse['begin'][0], size[1] - self.mouse['begin'][1])
+            self._display.LookHere(
+                self.mouse['begin'][0],
+                size[1] - self.mouse['begin'][1])
             focus = self._display.GetFocus()
             for i, coord in enumerate(('x', 'y', 'z')):
                 self.iview['focus'][coord] = focus[i]
@@ -726,55 +684,59 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             toggle.SetValue(False)
             self.mouse['use'] = 'pointer'
             self.SetNamedCursor('default')
-                
+
         if self.mouse['use'] == 'arrow':
             pos = event.GetPosition()
             size = self.GetClientSize()
             self.SetDrawArrow((pos[0], size[1] - pos[1]))
-                
+
         if self.mouse['use'] == 'scalebar':
             pos = event.GetPosition()
             size = self.GetClientSize()
             self.SetDrawScalebar((pos[0], size[1] - pos[1]))
-        
+
         if self.mouse['use'] == 'pointer':
-            # get decoration or text id
-            self.dragid = self.FindObjects(self.mouse['tmp'][0], self.mouse['tmp'][1],
-                                           self.hitradius)
+            # get decoration id
+            self.dragid = self.FindObjects(
+                self.mouse['tmp'][0],
+                self.mouse['tmp'][1],
+                self.hitradius)
+
         if self.mouse['use'] == 'fly':
             if not self.timerFly.IsRunning():
                 self.timerFly.Start(self.fly['interval'])
                 self.fly['mouseControl'] = True
-            
-        event.Skip()    
-        
+
+        event.Skip()
+
     def OnDragging(self, event):
-                
+
         if self.mouse['use'] == 'pointer':
             if self.dragid >= 0:
                 self.DragItem(self.dragid, event.GetPositionTuple())
-            
-        if self.mouse['use'] == 'rotate':    
-            dx, dy = event.GetX() - self.mouse['tmp'][0], event.GetY() - self.mouse['tmp'][1]
-            
+
+        if self.mouse['use'] == 'rotate':
+            dx, dy = event.GetX(
+            ) - self.mouse['tmp'][0], event.GetY() - self.mouse['tmp'][1]
+
             angle, x, y, z = self._display.GetRotationParameters(dx, dy)
             self._display.Rotate(angle, x, y, z)
-            
+
             self.render['quick'] = True
             self.Refresh(False)
-            
+
         if self.mouse['use'] == 'pan':
             self.FocusPanning(event)
-            
+
         self.mouse['tmp'] = event.GetPositionTuple()
-                
+
         event.Skip()
-            
+
     def Pixel2Cell(self, xyCoords):
         """Convert image coordinates to real word coordinates
 
         :param xyCoords: image coordinates
-        
+
         :return: easting, northing
         :return: None on error
         """
@@ -782,27 +744,27 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         # UL -> LL
         x, y = xyCoords
         sid, x, y, z = self._display.GetPointOnSurface(x, size[1] - y)
-        
+
         if not sid:
             return None
-        
+
         return (x, y)
-    
+
     def DoZoom(self, zoomtype, pos):
         """Change perspective and focus"""
-        
+
         prev_value = self.view['persp']['value']
         if zoomtype > 0:
             value = -1 * self.view['persp']['step']
         else:
             value = self.view['persp']['step']
-        self.view['persp']['value'] +=  value
+        self.view['persp']['value'] += value
         if self.view['persp']['value'] < 1:
             self.view['persp']['value'] = 1
         elif self.view['persp']['value'] > 180:
             self.view['persp']['value'] = 180
-        
-        if prev_value !=  self.view['persp']['value']:
+
+        if prev_value != self.view['persp']['value']:
             if hasattr(self.lmgr, "nviz"):
                 self.lmgr.nviz.UpdateSettings()
                 x, y = pos[0], self.GetClientSize()[1] - pos[1]
@@ -812,14 +774,16 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                     focus = self._display.GetFocus()
                     for i, coord in enumerate(('x', 'y', 'z')):
                         self.iview['focus'][coord] = focus[i]
-                self._display.SetView(self.view['position']['x'], self.view['position']['y'],
-                                      self.iview['height']['value'],
-                                      self.view['persp']['value'],
-                                      self.view['twist']['value'])
+                self._display.SetView(
+                    self.view['position']['x'],
+                    self.view['position']['y'],
+                    self.iview['height']['value'],
+                    self.view['persp']['value'],
+                    self.view['twist']['value'])
                 self.saveHistory = True
             # redraw map
             self.DoPaint()
-            
+
     def OnLeftUp(self, event):
         self.mouse['end'] = event.GetPositionTuple()
         if self.mouse["use"] == "query":
@@ -831,7 +795,8 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
 
         elif self.mouse["use"] in ('arrow', 'scalebar'):
             self.lmgr.nviz.FindWindowById(
-                    self.lmgr.nviz.win['decoration'][self.mouse["use"]]['place']).SetValue(False)
+                self.lmgr.nviz.win['decoration'][
+                    self.mouse["use"]]['place']).SetValue(False)
             if self.mouse["use"] == 'scalebar':
                 scalebarNum = len(self.decoration['scalebar'])
                 self.lmgr.nviz.AddScalebar(scalebarNum - 1)
@@ -839,65 +804,64 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 self.lmgr.nviz.AddArrow()
             self.mouse['use'] = 'pointer'
             self.SetNamedCursor('default')
-            
 
         elif self.mouse['use'] == 'pointer':
             if self.dragid >= 0:
                 dx = self.mouse['end'][0] - self.mouse['begin'][0]
                 dy = self.mouse['end'][1] - self.mouse['begin'][1]
-                if self.dragid < 99:
+                if self.dragid in self.overlays:
                     coords = self.overlays[self.dragid].coords
-                    self.overlays[self.dragid].coords = [coords[0] + dx, coords[1] + dy]
-                else: # text
-                    coords = self.textdict[self.dragid]['coords']
-                    self.textdict[self.dragid]['coords'] = [coords[0] + dx, coords[1] + dy]
+                    self.overlays[
+                        self.dragid].coords = [
+                        coords[0] + dx, coords[1] + dy]
                 self.dragid = -1
                 self.render['quick'] = False
                 self.Refresh(False)
-            
+
         elif self.mouse['use'] == 'rotate':
             self._display.UnsetRotation()
             self.iview['rotation'] = self._display.GetRotationMatrix()
             self.saveHistory = True
             self.render['quick'] = False
             self.Refresh(False)
-            
+
         elif self.mouse['use'] == 'pan':
             self.saveHistory = True
             self.render['quick'] = False
             self.Refresh(False)
-            
+
         elif self.mouse['use'] == 'fly':
             if self.fly['mouseControl']:
                 self.StopTimer(self.timerFly)
                 self.fly['mouseControl'] = None
-                #for key in self.iview['dir'].keys():
-                    #self.iview[''][key] = -1
+                # for key in self.iview['dir'].keys():
+                #self.iview[''][key] = -1
                 # this causes sudden change, but it should be there
-                #if hasattr(self.lmgr, "nviz"):
-                    #self.lmgr.nviz.UpdateSettings()
-                    
+                # if hasattr(self.lmgr, "nviz"):
+                # self.lmgr.nviz.UpdateSettings()
+
                 self.render['quick'] = False
                 self.Refresh(False)
-            
+
         elif self.mouse['use'] == 'zoom':
-            self.DoZoom(zoomtype = self.zoomtype, pos = self.mouse['end'])
+            self.DoZoom(zoomtype=self.zoomtype, pos=self.mouse['end'])
         event.Skip()
-            
+
     def OnDClick(self, event):
         """On mouse double click"""
-        if self.mouse['use'] != 'pointer': return
+        if self.mouse['use'] != 'pointer':
+            return
         pos = event.GetPositionTuple()
         self.dragid = self.FindObjects(pos[0], pos[1], self.hitradius)
         self.overlayActivated.emit(overlayId=self.dragid)
-    
+
     def FocusPanning(self, event):
         """Simulation of panning using focus"""
         size = self.GetClientSizeTuple()
         id1, x1, y1, z1 = self._display.GetPointOnSurface(
-                      self.mouse['tmp'][0], size[1] - self.mouse['tmp'][1])
+            self.mouse['tmp'][0], size[1] - self.mouse['tmp'][1])
         id2, x2, y2, z2 = self._display.GetPointOnSurface(
-                      event.GetX(), size[1] - event.GetY())
+            event.GetX(), size[1] - event.GetY())
         if id1 and id1 == id2:
             dx, dy, dz = x2 - x1, y2 - y1, z2 - z1
             focus = self.iview['focus']
@@ -905,44 +869,45 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             focus['x'] -= dx
             focus['y'] -= dy
             focus['z'] -= dz
-            
-            #update properties
+
+            # update properties
             self.PostViewEvent()
-            
+
             self.mouse['tmp'] = event.GetPositionTuple()
             self.render['quick'] = True
             self.Refresh(False)
-            
+
     def HorizontalPanning(self, event):
         """Move all layers in horizontal (x, y) direction.
         Currently not used.
         """
         size = self.GetClientSizeTuple()
         id1, x1, y1, z1 = self._display.GetPointOnSurface(
-                      self.mouse['tmp'][0], size[1] - self.mouse['tmp'][1])
+            self.mouse['tmp'][0], size[1] - self.mouse['tmp'][1])
         id2, x2, y2, z2 = self._display.GetPointOnSurface(
-                      event.GetX(), size[1] - event.GetY())
-        
+            event.GetX(), size[1] - event.GetY())
+
         if id1 and id1 == id2:
             dx, dy = x2 - x1, y2 - y1
             # find raster and volume
             for item in self.layers:
-                mapLayer = self.tree.GetLayerInfo(item, key = 'maplayer')
-                  
-                data = self.tree.GetLayerInfo(item, key = 'nviz')
+                mapLayer = self.tree.GetLayerInfo(item, key='maplayer')
+
+                data = self.tree.GetLayerInfo(item, key='nviz')
                 if mapLayer.GetType() == 'raster':
                     data['surface']['position']['x'] += dx
                     data['surface']['position']['y'] += dy
                     data['surface']['position']['update'] = None
-                    
-                    #update properties
-                    evt = wxUpdateProperties(data = data)
+
+                    # update properties
+                    evt = wxUpdateProperties(data=data)
                     wx.PostEvent(self, evt)
-                    
-                    if event.CmdDown() and id1 == data['surface']['object']['id']:
+
+                    if event.CmdDown() and id1 == data[
+                            'surface']['object']['id']:
                         break
-                    
-                elif mapLayer.GetType() == '3d-raster':
+
+                elif mapLayer.GetType() == 'raster_3d':
                     if 'x' not in data['volume']['position']:
                         data['volume']['position']['x'] = 0
                         data['volume']['position']['y'] = 0
@@ -950,21 +915,21 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                     data['volume']['position']['x'] += dx
                     data['volume']['position']['y'] += dy
                     data['volume']['position']['update'] = None
-                    
-                    #update properties
-                    evt = wxUpdateProperties(data = data)
+
+                    # update properties
+                    evt = wxUpdateProperties(data=data)
                     wx.PostEvent(self, evt)
-                
+
             self.mouse['tmp'] = event.GetPositionTuple()
             self.render['quick'] = True
             self.Refresh(False)
-            
+
     def DragItem(self, id, coords):
         """Drag an overlay decoration item
         """
         if id is None:
             return
-        Debug.msg (5, "GLWindow.DragItem(): id=%d" % id)
+        Debug.msg(5, "GLWindow.DragItem(): id=%d" % id)
         x, y = self.mouse['tmp']
         dx = coords[0] - x
         dy = coords[1] - y
@@ -972,12 +937,11 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             if texture.id == id:
                 texture.MoveTexture(dx, dy)
 
-
         self.render['quick'] = True
         self.Refresh(False)
-        
+
         self.mouse['tmp'] = coords
-        
+
     def ZoomBack(self):
         """Set previous view in history list
         """
@@ -985,54 +949,54 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         if len(self.viewhistory) > 1:
             self.viewhistory.pop()
             view = copy.deepcopy(self.viewhistory[-1])
-        
+
         # disable tool if stack is empty
-        if len(self.viewhistory) < 2: # disable tool
+        if len(self.viewhistory) < 2:  # disable tool
             self.zoomHistoryUnavailable.emit()
-            
+
         # set view and update nviz view page
-        self.lmgr.nviz.UpdateState(view = view[0], iview = view[1])
+        self.lmgr.nviz.UpdateState(view=view[0], iview=view[1])
         self.lmgr.nviz.UpdatePage('view')
         # update map
         self.Refresh(False)
 
     def ViewHistory(self, view, iview):
         """Manages a list of last 10 views
-        
+
         :param view: view dictionary
         :param iview: view dictionary (internal)
-        
+
         :return: removed history item if exists (or None)
         """
         removed = None
         hview = copy.deepcopy(view)
         hiview = copy.deepcopy(iview)
-        
-        if not (self.viewhistory and self.viewhistory[-1] == (hview, hiview)):  
+
+        if not (self.viewhistory and self.viewhistory[-1] == (hview, hiview)):
             self.viewhistory.append((hview, hiview))
-            
+
         if len(self.viewhistory) > 10:
             removed = self.viewhistory.pop(0)
-        
+
         if removed:
             Debug.msg(4, "GLWindow.ViewHistory(): hist=%s, removed=%s" %
                       (self.viewhistory, removed))
         else:
             Debug.msg(4, "GLWindow.ViewHistory(): hist=%s" %
                       (self.viewhistory))
-        
+
         # update toolbar
         if len(self.viewhistory) > 1:
             self.zoomHistoryAvailable.emit()
         else:
             self.zoomHistoryUnavailable.emit()
 
-        return removed     
-    
+        return removed
+
     def ResetViewHistory(self):
         """Reset view history"""
         self.viewhistory = list()
-    
+
     def GoTo(self, e, n):
         """Focus on given point"""
         w = self.Map.region['w']
@@ -1042,59 +1006,64 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         focus = self.iview['focus']
         focus['x'], focus['y'] = e, n
         self.saveHistory = True
-        #update properties
+        # update properties
         self.PostViewEvent()
-        
+
         self.render['quick'] = False
         self.Refresh(False)
-        
+
     def QuerySurface(self, x, y):
         """Query surface on given position"""
         size = self.GetClientSizeTuple()
         result = self._display.QueryMap(x, size[1] - y)
         if result:
             self.qpoints.append((result['x'], result['y'], result['z']))
-            self.log.WriteLog("%-30s: %.3f" % (_("Easting"),   result['x']))
-            self.log.WriteLog("%-30s: %.3f" % (_("Northing"),  result['y']))
+            self.log.WriteLog("%-30s: %.3f" % (_("Easting"), result['x']))
+            self.log.WriteLog("%-30s: %.3f" % (_("Northing"), result['y']))
             self.log.WriteLog("%-30s: %.3f" % (_("Elevation"), result['z']))
             name = ''
             for item in self.layers:
-                if self.tree.GetLayerInfo(item, key = 'maplayer').type == 'raster' and\
-                    self.tree.GetLayerInfo(item, key = 'nviz')['surface']['object']['id'] == result['id']:
-                    name = self.tree.GetLayerInfo(item, key = 'maplayer').name
+                if self.tree.GetLayerInfo(item, key='maplayer').type == 'raster' and self.tree.GetLayerInfo(
+                        item, key='nviz')['surface']['object']['id'] == result['id']:
+                    name = self.tree.GetLayerInfo(item, key='maplayer').name
             self.log.WriteLog("%-30s: %s" % (_("Surface map name"), name))
-            self.log.WriteLog("%-30s: %s" % (_("Surface map elevation"), result['elevation']))
-            self.log.WriteLog("%-30s: %s" % (_("Surface map color"), result['color']))
+            self.log.WriteLog(
+                "%-30s: %s" %
+                (_("Surface map elevation"), result['elevation']))
+            self.log.WriteLog("%-30s: %s" %
+                              (_("Surface map color"), result['color']))
             if len(self.qpoints) > 1:
                 prev = self.qpoints[-2]
                 curr = self.qpoints[-1]
-                dxy = math.sqrt(pow(prev[0]-curr[0], 2) +
-                                pow(prev[1]-curr[1], 2))
-                dxyz = math.sqrt(pow(prev[0]-curr[0], 2) +
-                                 pow(prev[1]-curr[1], 2) +
-                                 pow(prev[2]-curr[2], 2))
-                self.log.WriteLog("%-30s: %.3f" % (_("XY distance from previous"), dxy))
-                self.log.WriteLog("%-30s: %.3f" % (_("XYZ distance from previous"), dxyz))
-                self.log.WriteLog("%-30s: %.3f" % (_("Distance along surface"),
-                                              self._display.GetDistanceAlongSurface(result['id'],
-                                                                                    (curr[0], curr[1]),
-                                                                                    (prev[0], prev[1]),
-                                                                                    useExag = False)))
-                self.log.WriteLog("%-30s: %.3f" % (_("Distance along exag. surface"),
-                                              self._display.GetDistanceAlongSurface(result['id'],
-                                                                                    (curr[0], curr[1]),
-                                                                                    (prev[0], prev[1]),
-                                                                                      useExag = True)))
+                dxy = math.sqrt(pow(prev[0] - curr[0], 2) +
+                                pow(prev[1] - curr[1], 2))
+                dxyz = math.sqrt(pow(prev[0] - curr[0], 2) +
+                                 pow(prev[1] - curr[1], 2) +
+                                 pow(prev[2] - curr[2], 2))
+                self.log.WriteLog(
+                    "%-30s: %.3f" %
+                    (_("XY distance from previous"), dxy))
+                self.log.WriteLog(
+                    "%-30s: %.3f" %
+                    (_("XYZ distance from previous"), dxyz))
+                self.log.WriteLog(
+                    "%-30s: %.3f" %
+                    (_("Distance along surface"), self._display.GetDistanceAlongSurface(
+                        result['id'], (curr[0], curr[1]), (prev[0], prev[1]), useExag=False)))
+                self.log.WriteLog(
+                    "%-30s: %.3f" %
+                    (_("Distance along exag. surface"), self._display.GetDistanceAlongSurface(
+                        result['id'], (curr[0], curr[1]), (prev[0], prev[1]), useExag=True)))
             self.log.WriteCmdLog('-' * 80)
         else:
             self.log.WriteLog(_("No point on surface"))
             self.log.WriteCmdLog('-' * 80)
-    
-    def PostViewEvent(self, zExag = False):
+
+    def PostViewEvent(self, zExag=False):
         """Change view settings"""
-        event = wxUpdateView(zExag = zExag)
+        event = wxUpdateView(zExag=zExag)
         wx.PostEvent(self, event)
-        
+
     def OnQueryVector(self, event):
         """Query vector on given position"""
         self.parent.QueryVector(*event.GetPosition())
@@ -1104,69 +1073,78 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         view = self.view
         iview = self.iview
         (view['position']['x'], view['position']['y'],
-        iview['height']['value']) = self._display.GetViewpointPosition()
+         iview['height']['value']) = self._display.GetViewpointPosition()
         for key, val in zip(('x', 'y', 'z'), self._display.GetViewdir()):
             iview['dir'][key] = val
-        
+
         iview['dir']['use'] = True
-        
+
     def OnUpdateView(self, event):
         """Change view settings"""
         if event:
-                self.UpdateView(zexag = event.zExag)
-                
+            self.UpdateView(zexag=event.zExag)
+
         self.saveHistory = True
         if event:
             event.Skip()
-            
-            
-    def UpdateView(self, zexag = False):
+
+    def UpdateView(self, zexag=False):
         """Change view settings"""
         view = self.view
         iview = self.iview
         if zexag and 'value' in view['z-exag']:
-            self._display.SetZExag(view['z-exag']['value'] / iview['z-exag']['llRatio'])
-        
+            self._display.SetZExag(
+                view['z-exag']['value'] /
+                iview['z-exag']['llRatio'])
+
         self._display.SetView(view['position']['x'], view['position']['y'],
                               iview['height']['value'],
                               view['persp']['value'],
                               view['twist']['value'])
-        
+
         if iview['dir']['use']:
-            self._display.SetViewdir(iview['dir']['x'], iview['dir']['y'], iview['dir']['z'])
-        
+            self._display.SetViewdir(
+                iview['dir']['x'],
+                iview['dir']['y'],
+                iview['dir']['z'])
+
         elif iview['focus']['x'] != -1:
-            self._display.SetFocus(self.iview['focus']['x'], self.iview['focus']['y'],
-                                   self.iview['focus']['z'])
-                                       
+            self._display.SetFocus(
+                self.iview['focus']['x'],
+                self.iview['focus']['y'],
+                self.iview['focus']['z'])
+
         if 'rotation' in iview:
             if iview['rotation']:
                 self._display.SetRotationMatrix(iview['rotation'])
             else:
                 self._display.ResetRotation()
-        
+
     def UpdateLight(self, event):
         """Change light settings"""
         data = self.light
-        self._display.SetLight(x = data['position']['x'], y = data['position']['y'],
-                               z = data['position']['z'] / 100., color = data['color'],
-                               bright = data['bright'] / 100.,
-                               ambient = data['ambient'] / 100.)
+        self._display.SetLight(
+            x=data['position']['x'],
+            y=data['position']['y'],
+            z=data['position']['z'] / 100.,
+            color=data['color'],
+            bright=data['bright'] / 100.,
+            ambient=data['ambient'] / 100.)
         self._display.DrawLightingModel()
         if event.refresh:
             self.Refresh(False)
-        
-    def UpdateMap(self, render = True):
+
+    def UpdateMap(self, render=True):
         """Updates the canvas anytime there is a change to the
         underlaying images or to the geometry of the canvas.
-        
+
         :param render: re-render map composition
         :type render: bool
         """
         start = time.clock()
-        
+
         self.resize = False
-        
+
         if self.render['quick'] is False:
             if sys.platform != 'darwin':  # causes recursion for some reason on Mac
                 self.parent.GetProgressBar().Show()
@@ -1178,19 +1156,19 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 self.parent.GetProgressBar().SetValue(1)
             self._display.Draw(False, -1)
             if self.saveHistory:
-                self.ViewHistory(view = self.view, iview = self.iview)
+                self.ViewHistory(view=self.view, iview=self.iview)
                 self.saveHistory = False
         elif self.render['quick'] is True:
             # quick
             mode = wxnviz.DRAW_QUICK_SURFACE | wxnviz.DRAW_QUICK_VOLUME
             if self.render['vlines']:
-                mode |=  wxnviz.DRAW_QUICK_VLINES
+                mode |= wxnviz.DRAW_QUICK_VLINES
             if self.render['vpoints']:
-                mode |=  wxnviz.DRAW_QUICK_VPOINTS
+                mode |= wxnviz.DRAW_QUICK_VPOINTS
             self._display.Draw(True, mode)
-        else: # None -> reuse last rendered image
-            pass # TODO
-            
+        else:  # None -> reuse last rendered image
+            pass  # TODO
+
         self.SwapBuffers()
         # draw fringe after SwapBuffers, otherwise it don't have to be visible
         # on some computers
@@ -1201,46 +1179,44 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             if self.decoration['scalebar']:
                 self._display.DrawScalebar()
         if self.imagelist:
-            if ((self.render['quick'] and self.dragid > -1) or # during dragging
-                (not self.render['quick'] and self.dragid < 0)): # redraw
+            if ((self.render['quick'] and self.dragid > -1) or  # during dragging
+                    (not self.render['quick'] and self.dragid < 0)):  # redraw
                 self._display.Start2D()
                 self.DrawImages()
-                
-            
-            
+
         stop = time.clock()
-        
+
         if self.render['quick'] is False:
             if sys.platform != 'darwin':
                 self.parent.GetProgressBar().SetValue(2)
                 # hide process bar
                 self.parent.GetProgressBar().Hide()
 
-        Debug.msg(3, "GLWindow.UpdateMap(): quick = %d, -> time = %g" % \
-                      (self.render['quick'], (stop-start)))
-        
+        Debug.msg(3, "GLWindow.UpdateMap(): quick = %d, -> time = %g" %
+                  (self.render['quick'], (stop - start)))
+
     def EraseMap(self):
         """Erase the canvas
         """
         self._display.EraseMap()
         self.SwapBuffers()
-    
+
     def _getDecorationSize(self):
         """Get initial size of north arrow/scalebar"""
         size = self._display.GetLongDim() / 8.
         coef = 0.01
         if size < 1:
             coef = 100.
-        return int(size * coef)/coef
-    
+        return int(size * coef) / coef
+
     def SetDrawArrow(self, pos):
         """North arrow drawing.
 
         Also, opens Appearance page of nviz notebook (needs refactoring).
         """
-        if self._display.SetArrow(pos[0], pos[1], 
-                                 self.decoration['arrow']['size'],
-                                 self.decoration['arrow']['color']):
+        if self._display.SetArrow(pos[0], pos[1],
+                                  self.decoration['arrow']['size'],
+                                  self.decoration['arrow']['color']):
             self._display.DrawArrow()
             # update
             self.decoration['arrow']['show'] = True
@@ -1256,15 +1232,20 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         """Add scale bar, sets properties and draw"""
         if len(self.decoration['scalebar']) == 0:
             self.decoration['scalebar'].append(
-                    self.nvizDefault.SetDecorDefaultProp(type = 'scalebar')['scalebar'])
+                self.nvizDefault.SetDecorDefaultProp(
+                    type='scalebar')['scalebar'])
             self.decoration['scalebar'][0]['size'] = self._getDecorationSize()
         else:
-            self.decoration['scalebar'].append(copy.deepcopy(self.decoration['scalebar'][-1]))
+            self.decoration['scalebar'].append(
+                copy.deepcopy(self.decoration['scalebar'][-1]))
             self.decoration['scalebar'][-1]['id'] += 1
-        
-        ret = self._display.SetScalebar(self.decoration['scalebar'][-1]['id'], pos[0], pos[1], 
-                                 self.decoration['scalebar'][-1]['size'],
-                                 self.decoration['scalebar'][-1]['color'])
+
+        ret = self._display.SetScalebar(
+            self.decoration['scalebar'][-1]['id'],
+            pos[0],
+            pos[1],
+            self.decoration['scalebar'][-1]['size'],
+            self.decoration['scalebar'][-1]['color'])
         if ret:
             self._display.DrawScalebar()
             # update
@@ -1272,143 +1253,146 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             self.decoration['scalebar'][-1]['position']['y'] = pos[1]
             self.Refresh(False)
         self.lmgr.nviz.SetPage('decoration')
-        
+
     def IsLoaded(self, item):
         """Check if layer (item) is already loaded
-        
+
         :param item: layer item
         """
-        layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-        data = self.tree.GetLayerInfo(item, key = 'nviz')
-        
+        layer = self.tree.GetLayerInfo(item, key='maplayer')
+        data = self.tree.GetLayerInfo(item, key='nviz')
+
         if not data:
             return 0
-        
-        if layer.type ==  'raster':
+
+        if layer.type == 'raster':
             if 'object' not in data['surface']:
                 return 0
-        elif layer.type ==  'vector':
+        elif layer.type == 'vector':
             if 'object' not in data['vector']['lines'] and \
                     'object' not in data['vector']['points']:
                 return 0
-        
+
         return 1
 
     def _GetDataLayers(self, item, litems):
         """Return get list of enabled map layers"""
         # load raster & vector maps
         while item and item.IsOk():
-            type = self.tree.GetLayerInfo(item, key = 'type')
-            if type ==  'group':
+            type = self.tree.GetLayerInfo(item, key='type')
+            if type == 'group':
                 item = self.tree.GetNextItem(item)
                 continue
-                
+
             if not item.IsChecked() or \
-                    type not in ('raster', 'vector', '3d-raster'):
+                    type not in ('raster', 'vector', 'raster_3d'):
                 item = self.tree.GetNextItem(item)
                 continue
-            
+
             litems.append(item)
-            
+
             item = self.tree.GetNextItem(item)
-        
+
     def LoadDataLayers(self):
         """Load raster/vector from current layer tree
-        
+
         .. todo::
             volumes
         """
         if not self.tree:
             return
-        
+
         listOfItems = []
         item = self.tree.GetFirstChild(self.tree.root)[0]
         self._GetDataLayers(item, listOfItems)
-        
+
         start = time.time()
-        
+
         while(len(listOfItems) > 0):
             item = listOfItems.pop()
-            type = self.tree.GetLayerInfo(item, key = 'type')
+            type = self.tree.GetLayerInfo(item, key='type')
             if item in self.layers:
                 continue
-            # "raster (double click to set properties)" - tries to load this 
+            # "raster (double click to set properties)" - tries to load this
             # layer - no idea how to fix it
-            if ' ' in self.tree.GetLayerInfo(item, key = 'maplayer').name:
+            if ' ' in self.tree.GetLayerInfo(item, key='maplayer').name:
                 return
             try:
-                if type ==  'raster':
+                if type == 'raster':
                     self.LoadRaster(item)
-                elif type ==  '3d-raster':
+                elif type == 'raster_3d':
                     self.LoadRaster3d(item)
-                elif type ==  'vector':
-                    layer = self.tree.GetLayerInfo(item, key = 'maplayer')
+                elif type == 'vector':
+                    layer = self.tree.GetLayerInfo(item, key='maplayer')
                     vInfo = grass.vector_info_topo(layer.GetName())
                     if (vInfo['points']) > 0:
-                        # include vInfo['centroids'] to initially load centroids 
-                        self.LoadVector(item, points = True)
+                        # include vInfo['centroids'] to initially load
+                        # centroids
+                        self.LoadVector(item, points=True)
                     if (vInfo['lines'] + vInfo['boundaries']) > 0:
-                        self.LoadVector(item, points = False)
-                    if vInfo['map3d'] and (vInfo['kernels'] + vInfo['faces']) > 0:
+                        self.LoadVector(item, points=False)
+                    if vInfo['map3d'] and(
+                            vInfo['kernels'] + vInfo['faces']) > 0:
                         self.LoadVector(item, points=None)
-                    
+
             except GException as e:
-                GError(parent = self,
-                       message = e.value)
-        
+                GError(parent=self,
+                       message=e.value)
+
         stop = time.time()
-        
-        Debug.msg(1, "GLWindow.LoadDataLayers(): time = %f" % (stop-start))
-                
-    def UnloadDataLayers(self, force = False):
+
+        Debug.msg(1, "GLWindow.LoadDataLayers(): time = %f" % (stop - start))
+
+    def UnloadDataLayers(self, force=False):
         """Unload any layers that have been deleted from layer tree
 
         :param bool force: True to unload all data layers
         """
         if not self.tree:
             return
-        
+
         listOfItems = []
         if not force:
             item = self.tree.GetFirstChild(self.tree.root)[0]
             self._GetDataLayers(item, listOfItems)
-        
+
         start = time.time()
-        
+
         update = False
         layersTmp = self.layers[:]
         for layer in layersTmp:
             if layer in listOfItems:
                 continue
-            ltype = self.tree.GetLayerInfo(layer, key = 'type')
+            ltype = self.tree.GetLayerInfo(layer, key='type')
             try:
-                if ltype ==  'raster':
+                if ltype == 'raster':
                     self.UnloadRaster(layer)
-                elif ltype ==  '3d-raster':
-                    self.UnloadRaster3d(layer) 
-                elif ltype ==  'vector':
-                    maplayer = self.tree.GetLayerInfo(layer, key = 'maplayer')
+                elif ltype == 'raster_3d':
+                    self.UnloadRaster3d(layer)
+                elif ltype == 'vector':
+                    maplayer = self.tree.GetLayerInfo(layer, key='maplayer')
                     vInfo = grass.vector_info_topo(maplayer.GetName())
                     if (vInfo['points'] + vInfo['centroids']) > 0:
-                        self.UnloadVector(layer, points = True)
-                    if (vInfo['lines'] + vInfo['boundaries']) > 0 or vInfo['map3d']:
-                        self.UnloadVector(layer, points = False)
-                        
+                        self.UnloadVector(layer, points=True)
+                    if (vInfo['lines'] + vInfo['boundaries']
+                        ) > 0 or vInfo['map3d']:
+                        self.UnloadVector(layer, points=False)
+
             except GException as e:
-                GError(parent = self,
-                       message = e.value)
-        
-        if force and self.baseId > 0: # unload base surface when quitting
+                GError(parent=self,
+                       message=e.value)
+
+        if force and self.baseId > 0:  # unload base surface when quitting
             ret = self._display.UnloadSurface(self.baseId)
             self.baseId = -1
         if update:
-            self.lmgr.nviz.UpdateSettings()        
+            self.lmgr.nviz.UpdateSettings()
             self.UpdateView(None)
-        
+
         stop = time.time()
-        
-        Debug.msg(1, "GLWindow.UnloadDataLayers(): time = %f" % (stop-start))        
-        
+
+        Debug.msg(1, "GLWindow.UnloadDataLayers(): time = %f" % (stop - start))
+
     def SetVectorSurface(self, data):
         """Set reference surfaces of vector"""
         data['mode']['surface'] = {}
@@ -1417,14 +1401,14 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         for name in self.GetLayerNames('raster'):
             data['mode']['surface']['value'].append(name)
             data['mode']['surface']['show'].append(True)
-        
+
     def SetVectorFromCmd(self, item, data):
         """Set 3D view properties from cmd (d.vect)
 
         :param item: Layer Tree item
         :param nviz: data
         """
-        cmd = self.tree.GetLayerInfo(item, key = 'cmd')
+        cmd = self.tree.GetLayerInfo(item, key='cmd')
         if cmd[0] != 'd.vect':
             return
         for opt in cmd[1:]:
@@ -1440,151 +1424,162 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
 
     def SetMapObjProperties(self, item, id, nvizType):
         """Set map object properties
-        
+
         Properties must be afterwards updated by
         UpdateMapObjProperties().
-        
+
         :param item: layer item
         :param id: nviz layer id (or -1)
         :param nvizType: nviz data type (surface, points, vector)
         """
         if nvizType != 'constant':
-            mapType = self.tree.GetLayerInfo(item, key = 'maplayer').type
+            mapType = self.tree.GetLayerInfo(item, key='maplayer').type
             # reference to original layer properties (can be None)
-            data = self.tree.GetLayerInfo(item, key = 'nviz')
+            data = self.tree.GetLayerInfo(item, key='nviz')
         else:
             mapType = nvizType
             data = self.constants[item]
-        
+
         if not data:
             # init data structure
             if nvizType != 'constant':
-                self.tree.SetLayerInfo(item, key = 'nviz', value = {})
-                data = self.tree.GetLayerInfo(item, key = 'nviz')
-            
-            if mapType ==  'raster':
+                self.tree.SetLayerInfo(item, key='nviz', value={})
+                data = self.tree.GetLayerInfo(item, key='nviz')
+
+            if mapType == 'raster':
                 # reset to default properties
                 data[nvizType] = self.nvizDefault.SetSurfaceDefaultProp()
-                        
-            elif mapType ==  'vector':
+
+            elif mapType == 'vector':
                 # reset to default properties (lines/points)
                 data['vector'] = self.nvizDefault.SetVectorDefaultProp()
                 self.SetVectorFromCmd(item, data['vector'])
                 self.SetVectorSurface(data['vector']['points'])
                 self.SetVectorSurface(data['vector']['lines'])
-                
-            elif mapType ==  '3d-raster':
-                # reset to default properties 
+
+            elif mapType == 'raster_3d':
+                # reset to default properties
                 data[nvizType] = self.nvizDefault.SetVolumeDefaultProp()
-                
+
             elif mapType == 'constant':
                 data['constant'] = self.nvizDefault.SetConstantDefaultProp()
-        
+
         else:
             # complete data (use default values), not sure if this is necessary
-            if mapType ==  'raster':
+            if mapType == 'raster':
                 if not data['surface']:
                     data['surface'] = self.nvizDefault.SetSurfaceDefaultProp()
-            if mapType ==  'vector':
+            if mapType == 'vector':
                 if not data['vector']['lines']:
-                    self.nvizDefault.SetVectorLinesDefaultProp(data['vector']['lines'])
+                    self.nvizDefault.SetVectorLinesDefaultProp(
+                        data
+                        ['vector']
+                        ['lines'])
                 if not data['vector']['points']:
-                    self.nvizDefault.SetVectorPointsDefaultProp(data['vector']['points'])     
+                    self.nvizDefault.SetVectorPointsDefaultProp(
+                        data
+                        ['vector']
+                        ['points'])
             # set updates
             for sec in data.keys():
                 for sec1 in data[sec].keys():
                     if sec1 == 'position':
                         data[sec][sec1]['update'] = None
                         continue
-                    if type(data[sec][sec1]) == types.DictType:
+                    if isinstance(data[sec][sec1], types.DictType):
                         for sec2 in data[sec][sec1].keys():
                             if sec2 not in ('all', 'init', 'id'):
                                 data[sec][sec1][sec2]['update'] = None
-                    elif type(data[sec][sec1]) == types.ListType:
+                    elif isinstance(data[sec][sec1], types.ListType):
                         for i in range(len(data[sec][sec1])):
                             for sec2 in data[sec][sec1][i].keys():
                                 data[sec][sec1][i][sec2]['update'] = None
-            event = wxUpdateProperties(data = data)
+            event = wxUpdateProperties(data=data)
             wx.PostEvent(self, event)
-        
+
         # set id
         if id > 0:
-            if mapType in ('raster', '3d-raster'):
-                data[nvizType]['object'] = { 'id' : id,
-                                            'init' : False }
-            elif mapType ==  'vector':
-                data['vector'][nvizType]['object'] = { 'id' : id,
-                                                       'init' : False }
-            elif mapType ==  'constant':
-                data[nvizType]['object'] = { 'id' : id,
-                                             'init' : False }
-        
+            if mapType in ('raster', 'raster_3d'):
+                data[nvizType]['object'] = {'id': id,
+                                            'init': False}
+            elif mapType == 'vector':
+                data['vector'][nvizType]['object'] = {'id': id,
+                                                      'init': False}
+            elif mapType == 'constant':
+                data[nvizType]['object'] = {'id': id,
+                                            'init': False}
+
         return data
 
     def LoadRaster(self, item):
         """Load 2d raster map and set surface attributes
-        
+
         :param layer: item
         """
         return self._loadRaster(item)
-    
+
     def LoadRaster3d(self, item):
         """Load 3d raster map and set surface attributes
-        
+
         :param layer: item
         """
         return self._loadRaster(item)
-        
+
     def _loadRaster(self, item):
         """Load 2d/3d raster map and set its attributes
-        
+
         :param layer: item
         """
-        layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-        
-        if layer.type not in ('raster', '3d-raster'):
+        layer = self.tree.GetLayerInfo(item, key='maplayer')
+
+        if layer.type not in ('raster', 'raster_3d'):
             return
-        
-        if layer.type ==  'raster':
+
+        if layer.type == 'raster':
             id = self._display.LoadSurface(str(layer.name), None, None)
             nvizType = 'surface'
             errorMsg = _("Loading raster map")
-        elif layer.type ==  '3d-raster':
+        elif layer.type == 'raster_3d':
             id = self._display.LoadVolume(str(layer.name), None, None)
             nvizType = 'volume'
             errorMsg = _("Loading 3d raster map")
         else:
             id = -1
-        
+
         if id < 0:
-            if layer.type in ('raster', '3d-raster'):
-                self.log.WriteError("%s <%s> %s" % (errorMsg, layer.name, _("failed")))
+            if layer.type in ('raster', 'raster_3d'):
+                self.log.WriteError(
+                    "%s <%s> %s" %
+                    (errorMsg, layer.name, _("failed")))
             else:
-                self.log.WriteError(_("Unsupported layer type '%s'") % layer.type)
-        
+                self.log.WriteError(
+                    _("Unsupported layer type '%s'") %
+                    layer.type)
+
         self.layers.append(item)
-        
+
         # set default/workspace layer properties
         data = self.SetMapObjProperties(item, id, nvizType)
-        
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self, event)
-        
+
         # update tools window
-        if hasattr(self.lmgr, "nviz") and \
-                item == self.tree.GetSelectedLayer(multi = False, checkedOnly = True):
+        if hasattr(
+                self.lmgr, "nviz") and item == self.tree.GetSelectedLayer(
+                multi=False, checkedOnly=True):
             toolWin = self.lmgr.nviz
-            if layer.type ==  'raster':
-                win = toolWin.FindWindowById( \
+            if layer.type == 'raster':
+                win = toolWin.FindWindowById(
                     toolWin.win['vector']['lines']['surface'])
                 win.SetItems(self.GetLayerNames(layer.type))
-            
-            #toolWin.UpdatePage(nvizType)
-            #toolWin.SetPage(nvizType)
-        
+
+            # toolWin.UpdatePage(nvizType)
+            # toolWin.SetPage(nvizType)
+
         return id
-    
+
     def NewConstant(self):
         """Create new constant"""
         index = len(self.constants)
@@ -1594,27 +1589,31 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             name = 1
         data = dict()
         self.constants.append(data)
-        data = self.SetMapObjProperties(item = index, id = -1, nvizType = 'constant')
+        data = self.SetMapObjProperties(item=index, id=-1, nvizType='constant')
         self.AddConstant(data, name)
         return name
-        
+
     def AddConstant(self, data, name):
         """Add new constant"""
-        id = self._display.AddConstant(value = data['constant']['value'], color = data['constant']['color'])
-        self._display.SetSurfaceRes(id, data['constant']['resolution'], data['constant']['resolution'])
-        data['constant']['object'] = { 'id' : id,
-                                       'name': name,
-                                       'init' : False }
-    
+        id = self._display.AddConstant(
+            value=data['constant']['value'],
+            color=data['constant']['color'])
+        self._display.SetSurfaceRes(
+            id, data['constant']['resolution'],
+            data['constant']['resolution'])
+        data['constant']['object'] = {'id': id,
+                                      'name': name,
+                                      'init': False}
+
     def DeleteConstant(self, index):
         """Delete constant layer"""
         id = self.constants[index]['constant']['object']['id']
         self._display.UnloadSurface(id)
         del self.constants[index]
-    
+
     def SelectCPlane(self, index):
         """Select cutting plane"""
-        for plane in range (self._display.GetCPlanesCount()):
+        for plane in range(self._display.GetCPlanesCount()):
             if plane == index:
                 self._display.SelectCPlane(plane)
                 self.cplanes[plane]['on'] = True
@@ -1625,7 +1624,7 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                     self.cplanes[plane]['on'] = False
                 except IndexError:
                     pass
-                    
+
     def OnUpdateCPlane(self, event):
         """Change cutting plane settings"""
         self.UpdateCPlane(event.current, event.update)
@@ -1634,42 +1633,44 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         """Change cutting plane settings"""
         for each in changes:
             if each == 'rotation':
-                self._display.SetCPlaneRotation(0, self.cplanes[index]['rotation']['tilt'],
-                                                   self.cplanes[index]['rotation']['rot'])
+                self._display.SetCPlaneRotation(
+                    0, self.cplanes[index]['rotation']['tilt'],
+                    self.cplanes[index]['rotation']['rot'])
             if each == 'position':
-                self._display.SetCPlaneTranslation(self.cplanes[index]['position']['x'],
-                                                   self.cplanes[index]['position']['y'],
-                                                   self.cplanes[index]['position']['z'])
+                self._display.SetCPlaneTranslation(
+                    self.cplanes[index]['position']['x'],
+                    self.cplanes[index]['position']['y'],
+                    self.cplanes[index]['position']['z'])
             if each == 'shading':
                 self._display.SetFenceColor(self.cplanes[index]['shading'])
-            
+
     def UnloadRaster(self, item):
         """Unload 2d raster map
-        
+
         :param layer: item
         """
         return self._unloadRaster(item)
-    
+
     def UnloadRaster3d(self, item):
         """Unload 3d raster map
-        
+
         :param layer: item
         """
         return self._unloadRaster(item)
-    
+
     def _unloadRaster(self, item):
         """Unload 2d/3d raster map
-        
+
         :param item: layer item
         """
-        layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-        
-        if layer.type not in ('raster', '3d-raster'):
+        layer = self.tree.GetLayerInfo(item, key='maplayer')
+
+        if layer.type not in ('raster', 'raster_3d'):
             return
-        
-        data = self.tree.GetLayerInfo(item, key = 'nviz')
-        
-        if layer.type ==  'raster':
+
+        data = self.tree.GetLayerInfo(item, key='nviz')
+
+        if layer.type == 'raster':
             nvizType = 'surface'
             unloadFn = self._display.UnloadSurface
             errorMsg = _("Unable to unload raster map")
@@ -1679,48 +1680,51 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             unloadFn = self._display.UnloadVolume
             errorMsg = _("Unable to unload 3d raster map")
             successMsg = _("3d raster map")
-        
+
         try:
             id = data[nvizType]['object']['id']
         except KeyError:
             return
-        
-        if unloadFn(id) ==  0:
+
+        if unloadFn(id) == 0:
             self.log.WriteError("%s <%s>" % (errorMsg, layer.name))
         else:
-            self.log.WriteLog("%s <%s> %s" % (successMsg, layer.name, _("unloaded successfully")))
-        
+            self.log.WriteLog(
+                "%s <%s> %s" %
+                (successMsg, layer.name, _("unloaded successfully")))
+
         data[nvizType].pop('object')
-        
+
         self.layers.remove(item)
-        
+
         # update tools window
         if hasattr(self.lmgr, "nviz"):
             toolWin = self.lmgr.nviz
-            if layer.type ==  'raster':
-                win = toolWin.FindWindowById(toolWin.win['vector']['lines']['surface'])
+            if layer.type == 'raster':
+                win = toolWin.FindWindowById(
+                    toolWin.win['vector']['lines']['surface'])
                 win.SetItems(self.GetLayerNames(layer.type))
                 win = toolWin.FindWindowById(toolWin.win['surface']['map'])
                 win.SetValue('')
-            if layer.type ==  '3d-raster':
+            if layer.type == 'raster_3d':
                 win = toolWin.FindWindowById(toolWin.win['volume']['map'])
                 win.SetValue('')
-            if layer.type ==  'vector':
+            if layer.type == 'vector':
                 win = toolWin.FindWindowById(toolWin.win['vector']['map'])
                 win.SetValue('')
-        
-    def LoadVector(self, item, points = None, append = True):
+
+    def LoadVector(self, item, points=None, append=True):
         """Load 2D or 3D vector map overlay
-        
+
         :param item: layer item
         :param points: True to load points, False to load lines, None
                        to load both
         :param bool append: append vector to layer list
         """
-        layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-        if layer.type !=  'vector':
+        layer = self.tree.GetLayerInfo(item, key='maplayer')
+        if layer.type != 'vector':
             return
-        
+
         # set default properties
         if points is None:
             self.SetMapObjProperties(item, -1, 'lines')
@@ -1732,82 +1736,90 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         else:
             self.SetMapObjProperties(item, -1, 'lines')
             vecTypes = ('lines', )
-        
+
         id = -1
         for vecType in vecTypes:
             if vecType == 'lines':
-                id, baseId = self._display.LoadVector(str(layer.GetName()), False)
+                id, baseId = self._display.LoadVector(
+                    str(layer.GetName()), False)
             else:
-                id, baseId = self._display.LoadVector(str(layer.GetName()), True)
+                id, baseId = self._display.LoadVector(
+                    str(layer.GetName()), True)
             if id < 0:
-                self.log.WriteError(_("Loading vector map <%(name)s> (%(type)s) failed") % \
-                    { 'name' : layer.name, 'type' : vecType })
+                self.log.WriteError(
+                    _("Loading vector map <%(name)s> (%(type)s) failed") %
+                    {'name': layer.name, 'type': vecType})
             # update layer properties
             self.SetMapObjProperties(item, id, vecType)
         if baseId > 0:
-            self.baseId = baseId # id of base surface (when no surface is loaded)
+            # id of base surface (when no surface is loaded)
+            self.baseId = baseId
         if append:
             self.layers.append(item)
-        
+
         # update properties
-        data = self.tree.GetLayerInfo(item, key = 'nviz')
-        event = wxUpdateProperties(data = data)
+        data = self.tree.GetLayerInfo(item, key='nviz')
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self, event)
-        
+
         # update tools window
-        if hasattr(self.lmgr, "nviz") and \
-                item ==  self.tree.GetSelectedLayer(multi = False, checkedOnly = True):
+        if hasattr(
+                self.lmgr, "nviz") and item == self.tree.GetSelectedLayer(
+                multi=False, checkedOnly=True):
             toolWin = self.lmgr.nviz
-            
+
             toolWin.UpdatePage('vector')
-            ### toolWin.SetPage('vector')
-        
+            # toolWin.SetPage('vector')
+
         return id
 
-    def UnloadVector(self, item, points = None, remove = True):
+    def UnloadVector(self, item, points=None, remove=True):
         """Unload vector map overlay
-        
+
         :param item: layer item
         :param points, lines: True to unload given feature type
         :param remove: remove layer from list
         :type remove: bool
         """
-        layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-        data = self.tree.GetLayerInfo(item, key = 'nviz')['vector']
-        
+        layer = self.tree.GetLayerInfo(item, key='maplayer')
+        data = self.tree.GetLayerInfo(item, key='nviz')['vector']
+
         # if vecType is None:
         #     vecType = []
         #     for v in ('lines', 'points'):
         #         if UserSettings.Get(group = 'nviz', key = 'vector',
         #                             subkey = [v, 'show']):
         #             vecType.append(v)
-        
+
         if points is None:
             vecTypes = ('points', 'lines')
         elif points:
             vecTypes = ('points', )
         else:
             vecTypes = ('lines', )
-        
+
         for vecType in vecTypes:
             if 'object' not in data[vecType]:
                 continue
 
             id = data[vecType]['object']['id']
-            
-            if vecType ==  'lines':
+
+            if vecType == 'lines':
                 ret = self._display.UnloadVector(id, False)
             else:
                 ret = self._display.UnloadVector(id, True)
-            if ret ==  0:
-                self.log.WriteError(_("Unable to unload vector map <%(name)s> (%(type)s)") % \
-                    { 'name': layer.name, 'type' : vecType })
+            if ret == 0:
+                self.log.WriteError(
+                    _("Unable to unload vector map <%(name)s> (%(type)s)") %
+                    {'name': layer.name, 'type': vecType})
             else:
-                self.log.WriteLog(_("Vector map <%(name)s> (%(type)s) unloaded successfully") % \
-                    { 'name' : layer.name, 'type' : vecType })
-            
+                self.log.WriteLog(
+                    _("Vector map <%(name)s> (%(type)s) unloaded successfully") % {
+                        'name': layer.name,
+                        'type': vecType})
+
             data[vecType].pop('object')
-            
+
         if remove and item in self.layers:
             self.layers.remove(item)
 
@@ -1817,49 +1829,50 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             self.iview['height']['value'], \
             self.iview['height']['min'], \
             self.iview['height']['max'] = self._display.SetViewDefault()
-        
-        ## hack for latlon projection
-        ## TODO find more precise way or better rewrite it in OGSF
+
+        # hack for latlon projection
+        # TODO find more precise way or better rewrite it in OGSF
         self.iview['z-exag']['llRatio'] = 1
         if grass.locn_is_latlong():
-            self.iview['z-exag']['llRatio'] = \
-                math.pi / 180 * 6371000 * math.cos((grass.region()['n'] + grass.region()['s']) / 2)
-
-        self.view['z-exag']['value'] = round(zexagOriginal * self.iview['z-exag']['llRatio'])
-        self.view['z-exag']['min'] = UserSettings.Get(group = 'nviz', key = 'view',
-                                                      subkey = ('z-exag', 'min'))
-        zexagMax = UserSettings.Get(group = 'nviz', key = 'view',
-                                    subkey = ('z-exag', 'max'))
+            self.iview['z-exag']['llRatio'] = math.pi / 180 * 6371000 * math.cos(
+                (grass.region()['n'] + grass.region()['s']) / 2)
+
+        self.view[
+            'z-exag']['value'] = round(zexagOriginal * self.iview['z-exag']['llRatio'])
+        self.view['z-exag']['min'] = UserSettings.Get(group='nviz', key='view',
+                                                      subkey=('z-exag', 'min'))
+        zexagMax = UserSettings.Get(group='nviz', key='view',
+                                    subkey=('z-exag', 'max'))
         if zexagMax <= self.view['z-exag']['value']:
             self.view['z-exag']['max'] = self.view['z-exag']['value'] * 2
         elif self.view['z-exag']['value'] < 1:
             if self.view['z-exag']['value'] == 0:
                 self.view['z-exag']['value'] = 1
-            self.view['z-exag']['max'] = 10 * self.view['z-exag']['value'] 
-        else: 
+            self.view['z-exag']['max'] = 10 * self.view['z-exag']['value']
+        else:
             self.view['z-exag']['max'] = zexagMax
-        
-        self.view['position']['x'] = UserSettings.Get(group = 'nviz', key = 'view',
-                                                 subkey = ('position', 'x'))
-        self.view['position']['y'] = UserSettings.Get(group = 'nviz', key = 'view',
-                                                 subkey = ('position', 'y'))
-        self.view['persp']['value'] = UserSettings.Get(group = 'nviz', key = 'view',
-                                                       subkey = ('persp', 'value'))
-        
-        self.view['twist']['value'] = UserSettings.Get(group = 'nviz', key = 'view',
-                                                       subkey = ('twist', 'value'))
+
+        self.view['position']['x'] = UserSettings.Get(group='nviz', key='view',
+                                                      subkey=('position', 'x'))
+        self.view['position']['y'] = UserSettings.Get(group='nviz', key='view',
+                                                      subkey=('position', 'y'))
+        self.view['persp']['value'] = UserSettings.Get(
+            group='nviz', key='view', subkey=('persp', 'value'))
+
+        self.view['twist']['value'] = UserSettings.Get(
+            group='nviz', key='view', subkey=('twist', 'value'))
         self._display.ResetRotation()
         self.iview['rotation'] = None
         self._display.LookAtCenter()
         focus = self.iview['focus']
         focus['x'], focus['y'], focus['z'] = self._display.GetFocus()
-        
+
         self.PostViewEvent()
-        
+
     def UpdateMapObjProperties(self, event):
         """Generic method to update data layer properties"""
         data = event.data
-        
+
         if 'surface' in data:
             try:
                 id = data['surface']['object']['id']
@@ -1868,19 +1881,19 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             self.UpdateSurfaceProperties(id, data['surface'])
             # -> initialized
             data['surface']['object']['init'] = True
-            
+
         elif 'constant' in data:
             id = data['constant']['object']['id']
             self.UpdateConstantProperties(id, data['constant'])
             # -> initialized
-            data['constant']['object']['init'] = True  
-              
+            data['constant']['object']['init'] = True
+
         elif 'volume' in data:
             id = data['volume']['object']['id']
             self.UpdateVolumeProperties(id, data['volume'])
             # -> initialized
             data['volume']['object']['init'] = True
-            
+
         elif 'vector' in data:
             for type in ('lines', 'points'):
                 if 'object' in data['vector'][type]:
@@ -1888,81 +1901,82 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                     self.UpdateVectorProperties(id, data['vector'], type)
                     # -> initialized
                     data['vector'][type]['object']['init'] = True
-    
+
     def UpdateConstantProperties(self, id, data):
         """Update surface map object properties"""
-        self._display.SetSurfaceColor(id = id, map = False, value = data['color'])
-        self._display.SetSurfaceTopo(id = id, map = False, value = data['value'])
+        self._display.SetSurfaceColor(id=id, map=False, value=data['color'])
+        self._display.SetSurfaceTopo(id=id, map=False, value=data['value'])
         self._display.SetSurfaceRes(id, data['resolution'], data['resolution'])
         if data['transp'] == 0:
             self._display.UnsetSurfaceTransp(id)
         else:
-            self._display.SetSurfaceTransp(id, map = False, value = data['transp'])
-            
+            self._display.SetSurfaceTransp(id, map=False, value=data['transp'])
+
     def UpdateSurfaceProperties(self, id, data):
         """Update surface map object properties"""
         # surface attributes
         for attrb in ('color', 'mask',
-                     'transp', 'shine'):
+                      'transp', 'shine'):
             if attrb not in data['attribute'] or \
                     'update' not in data['attribute'][attrb]:
                 continue
-            
+
             map = data['attribute'][attrb]['map']
             value = data['attribute'][attrb]['value']
-            
-            if map is None: # unset
+
+            if map is None:  # unset
                 # only optional attributes
-                if attrb ==  'mask':
+                if attrb == 'mask':
                     # TODO: invert mask
                     # TODO: broken in NVIZ
                     self._display.UnsetSurfaceMask(id)
-                elif attrb ==  'transp':
-                    self._display.UnsetSurfaceTransp(id) 
+                elif attrb == 'transp':
+                    self._display.UnsetSurfaceTransp(id)
             else:
-                if type(value) == types.StringType:
+                if isinstance(value, types.StringType):
                     if len(value) == 0:  # ignore empty values (TODO: warning)
                         continue
-                    if map and not grass.find_file(value, element='cell')['fullname']:
+                    if map and not grass.find_file(value, element='cell')[
+                            'fullname']:
                         continue
-                if attrb ==  'color':
+                if attrb == 'color':
                     self._display.SetSurfaceColor(id, map, str(value))
-                elif attrb ==  'mask':
+                elif attrb == 'mask':
                     # TODO: invert mask
                     # TODO: broken in NVIZ
                     self._display.SetSurfaceMask(id, False, str(value))
-                elif attrb ==  'transp':
-                    self._display.SetSurfaceTransp(id, map, str(value)) 
-                elif attrb ==  'shine':
-                    self._display.SetSurfaceShine(id, map, str(value)) 
+                elif attrb == 'transp':
+                    self._display.SetSurfaceTransp(id, map, str(value))
+                elif attrb == 'shine':
+                    self._display.SetSurfaceShine(id, map, str(value))
             data['attribute'][attrb].pop('update')
-        
+
         # draw res
         if 'update' in data['draw']['resolution']:
             coarse = data['draw']['resolution']['coarse']
-            fine   = data['draw']['resolution']['fine']
-            
+            fine = data['draw']['resolution']['fine']
+
             if data['draw']['all']:
                 self._display.SetSurfaceRes(-1, fine, coarse)
             else:
                 self._display.SetSurfaceRes(id, fine, coarse)
             data['draw']['resolution'].pop('update')
-        
+
         # draw style
         if 'update' in data['draw']['mode']:
-            if data['draw']['mode']['value'] < 0: # need to calculate
-                data['draw']['mode']['value'] = \
-                    self.nvizDefault.GetDrawMode(mode = data['draw']['mode']['desc']['mode'],
-                                                 style = data['draw']['mode']['desc']['style'],
-                                                 shade = data['draw']['mode']['desc']['shading'],
-                                                 string = True)
+            if data['draw']['mode']['value'] < 0:  # need to calculate
+                data['draw']['mode']['value'] = self.nvizDefault.GetDrawMode(
+                    mode=data['draw']['mode']['desc']['mode'],
+                    style=data['draw']['mode']['desc']['style'],
+                    shade=data['draw']['mode']['desc']['shading'],
+                    string=True)
             style = data['draw']['mode']['value']
             if data['draw']['all']:
                 self._display.SetSurfaceStyle(-1, style)
             else:
                 self._display.SetSurfaceStyle(id, style)
             data['draw']['mode'].pop('update')
-        
+
         # wire color
         if 'update' in data['draw']['wire-color']:
             color = data['draw']['wire-color']['value']
@@ -1971,7 +1985,7 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             else:
                 self._display.SetWireColor(id, str(color))
             data['draw']['wire-color'].pop('update')
-        
+
         # position
         if 'update' in data['position']:
             x = data['position']['x']
@@ -1980,37 +1994,41 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             self._display.SetSurfacePosition(id, x, y, z)
             data['position'].pop('update')
         data['draw']['all'] = False
-        
-    def UpdateVolumeProperties(self, id, data, isosurfId = None):
+
+    def UpdateVolumeProperties(self, id, data, isosurfId=None):
         """Update volume (isosurface/slice) map object properties"""
         if 'update' in data['draw']['resolution']:
             if data['draw']['mode']['value'] == 0:
-                self._display.SetIsosurfaceRes(id, data['draw']['resolution']['isosurface']['value'])
+                self._display.SetIsosurfaceRes(
+                    id, data['draw']['resolution']['isosurface']['value'])
             else:
-                self._display.SetSliceRes(id, data['draw']['resolution']['slice']['value'])                
+                self._display.SetSliceRes(
+                    id, data['draw']['resolution']['slice']['value'])
             data['draw']['resolution'].pop('update')
-        
+
         if 'update' in data['draw']['shading']:
             if data['draw']['mode']['value'] == 0:
-                if data['draw']['shading']['isosurface']['value'] < 0: # need to calculate
+                if data['draw']['shading']['isosurface'][
+                        'value'] < 0:  # need to calculate
                     mode = data['draw']['shading']['isosurface']['value'] = \
-                        self.nvizDefault.GetDrawMode(shade = data['draw']['shading']['isosurface'],
-                                                     string = False)
+                        self.nvizDefault.GetDrawMode(shade=data['draw']['shading']['isosurface'],
+                                                     string=False)
                     self._display.SetIsosurfaceMode(id, mode)
             else:
-                if data['draw']['shading']['slice']['value'] < 0: # need to calculate
+                if data['draw']['shading']['slice'][
+                        'value'] < 0:  # need to calculate
                     mode = data['draw']['shading']['slice']['value'] = \
-                        self.nvizDefault.GetDrawMode(shade = data['draw']['shading']['slice'],
-                                                     string = False)
+                        self.nvizDefault.GetDrawMode(shade=data['draw']['shading']['slice'],
+                                                     string=False)
                     self._display.SetSliceMode(id, mode)
             data['draw']['shading'].pop('update')
-        
+
         #
         # isosurface attributes
         #
         isosurfId = 0
         for isosurf in data['isosurface']:
-            self._display.AddIsosurface(id, 0, isosurf_id = isosurfId)
+            self._display.AddIsosurface(id, 0, isosurf_id=isosurfId)
             for attrb in ('topo', 'color', 'mask',
                           'transp', 'shine'):
                 if attrb not in isosurf or \
@@ -2018,52 +2036,64 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                     continue
                 map = isosurf[attrb]['map']
                 value = isosurf[attrb]['value']
-                
-                if map is None: # unset
+
+                if map is None:  # unset
                     # only optional attributes
-                    if attrb == 'topo' :
-                        self._display.SetIsosurfaceTopo(id, isosurfId, map, str(value))
-                    elif attrb ==  'mask':
+                    if attrb == 'topo':
+                        self._display.SetIsosurfaceTopo(
+                            id, isosurfId, map, str(value))
+                    elif attrb == 'mask':
                         # TODO: invert mask
                         # TODO: broken in NVIZ
                         self._display.UnsetIsosurfaceMask(id, isosurfId)
-                    elif attrb ==  'transp':
-                        self._display.UnsetIsosurfaceTransp(id, isosurfId) 
+                    elif attrb == 'transp':
+                        self._display.UnsetIsosurfaceTransp(id, isosurfId)
                 else:
-                    if type(value) == types.StringType:
+                    if isinstance(value, types.StringType):
                         if len(value) == 0:  # ignore empty values (TODO: warning)
                             continue
-                        if map and not grass.find_file(value, element='grid3')['fullname']:
+                        if map and not grass.find_file(value, element='grid3')[
+                                'fullname']:
                             continue
-                    if attrb ==  'color':
-                        self._display.SetIsosurfaceColor(id, isosurfId, map, str(value))
-                    elif attrb ==  'mask':
+                    if attrb == 'color':
+                        self._display.SetIsosurfaceColor(
+                            id, isosurfId, map, str(value))
+                    elif attrb == 'mask':
                         # TODO: invert mask
                         # TODO: broken in NVIZ
-                        self._display.SetIsosurfaceMask(id, isosurfId, False, str(value))
-                    elif attrb ==  'transp':
-                        self._display.SetIsosurfaceTransp(id, isosurfId, map, str(value)) 
-                    elif attrb ==  'shine':
-                        self._display.SetIsosurfaceShine(id, isosurfId, map, str(value))  
+                        self._display.SetIsosurfaceMask(
+                            id, isosurfId, False, str(value))
+                    elif attrb == 'transp':
+                        self._display.SetIsosurfaceTransp(
+                            id, isosurfId, map, str(value))
+                    elif attrb == 'shine':
+                        self._display.SetIsosurfaceShine(
+                            id, isosurfId, map, str(value))
                 isosurf[attrb].pop('update')
-            isosurfId +=  1
+            isosurfId += 1
         #
         # slice attributes
         #
         sliceId = 0
         for slice in data['slice']:
-            ret = self._display.AddSlice(id, slice_id = sliceId)
+            ret = self._display.AddSlice(id, slice_id=sliceId)
             if 'update' in slice['position']:
                 pos = slice['position']
-                ret = self._display.SetSlicePosition(id, sliceId, pos['x1'], pos['x2'],
-                                               pos['y1'], pos['y2'], pos['z1'], pos['z2'], pos['axis'])
-                
+                ret = self._display.SetSlicePosition(
+                    id, sliceId, pos['x1'],
+                    pos['x2'],
+                    pos['y1'],
+                    pos['y2'],
+                    pos['z1'],
+                    pos['z2'],
+                    pos['axis'])
+
                 slice['position'].pop('update')
             if 'update' in slice['transp']:
                 tr = slice['transp']['value']
                 self._display.SetSliceTransp(id, sliceId, tr)
             sliceId += 1
-                
+
         # position
         if 'update' in data['position'] and 'x' in data['position']:
             x = data['position']['x']
@@ -2071,19 +2101,19 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             z = data['position']['z']
             self._display.SetVolumePosition(id, x, y, z)
             data['position'].pop('update')
-            
+
     def UpdateVectorProperties(self, id, data, type):
         """Update vector layer properties
-        
+
         :param id: layer id
         :param data: properties
         :param type: lines/points
         """
-        if type ==  'points':
+        if type == 'points':
             self.UpdateVectorPointsProperties(id, data[type])
         else:
             self.UpdateVectorLinesProperties(id, data[type])
-        
+
     def UpdateVectorLinesProperties(self, id, data):
         """Update vector line map object properties"""
         # mode
@@ -2092,27 +2122,27 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 'update' in data['mode']:
             width = data['width']['value']
             color = data['color']['value']
-            if data['mode']['type'] ==  '3d':
+            if data['mode']['type'] == '3d':
                 use_3D = True
                 if 'surface' in data['mode']:
                     data['mode'].pop('surface')
             else:
                 use_3D = False
-            
+
             self._display.SetVectorLineMode(id, color,
                                             width, use_3D)
-            
+
             if 'update' in data['color']:
                 data['color'].pop('update')
             if 'update' in data['width']:
                 data['width'].pop('update')
-        
+
         # height
         if 'update' in data['height']:
             self._display.SetVectorLineHeight(id,
                                               data['height']['value'])
             data['height'].pop('update')
-            
+
         # thematic
         if 'update' in data['thematic']:
             color = width = None
@@ -2120,63 +2150,66 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             if data['thematic']['usecolor'] or data['thematic']['usewidth']:
                 if data['thematic']['usecolor']:
                     color = data['thematic']['rgbcolumn']
-                    if self._display.CheckColorTable(id = id, type = 'lines'):
+                    if self._display.CheckColorTable(id=id, type='lines'):
                         colorTable = True
                 if data['thematic']['usewidth']:
                     width = data['thematic']['sizecolumn']
-                self._display.SetLinesStyleThematic(id = id, layer = data['thematic']['layer'],
-                                                     color = color,
-                                                     colorTable = colorTable, 
-                                                     width = width)
+                self._display.SetLinesStyleThematic(
+                    id=id, layer=data['thematic']['layer'],
+                    color=color, colorTable=colorTable, width=width)
             else:
-                self._display.UnsetLinesStyleThematic(id = id)
+                self._display.UnsetLinesStyleThematic(id=id)
             data['thematic'].pop('update')
         # surface
         if 'surface' in data['mode'] and 'update' in data['mode']:
             for item in range(len(data['mode']['surface']['value'])):
                 for type in ('raster', 'constant'):
-                    sid = self.GetLayerId(type = type,
-                                          name = data['mode']['surface']['value'][item])
+                    sid = self.GetLayerId(
+                        type=type, name=data['mode']['surface']['value'][item])
                     if sid > -1:
                         if data['mode']['surface']['show'][item]:
                             self._display.SetVectorLineSurface(id, sid)
                         else:
                             self._display.UnsetVectorLineSurface(id, sid)
                         break
-                
+
         if 'update' in data['mode']:
-                data['mode'].pop('update')
-        
+            data['mode'].pop('update')
+
     def UpdateVectorPointsProperties(self, id, data):
         """Update vector point map object properties"""
         if 'update' in data['size'] or \
                 'update' in data['width'] or \
                 'update' in data['marker'] or \
                 'update' in data['color']:
-                
-            ret = self._display.SetVectorPointMode(id, data['color']['value'],
-                                                   data['width']['value'], float(data['size']['value']),
-                                                   data['marker']['value'] + 1)
-            
+
+            ret = self._display.SetVectorPointMode(
+                id, data['color']['value'],
+                data['width']['value'],
+                float(data['size']['value']),
+                data['marker']['value'] + 1)
+
             error = None
-            if ret ==  -1:
+            if ret == -1:
                 error = _("Vector point layer not found (id = %d)") % id
-            elif ret ==  -2:
+            elif ret == -2:
                 error = _("Unable to set data layer properties (id = %d)") % id
 
             if error:
-                raise GException(_("Setting data layer properties failed.\n\n%s") % error)
-            
+                raise GException(
+                    _("Setting data layer properties failed.\n\n%s") %
+                    error)
+
             for prop in ('size', 'width', 'marker', 'color'):
                 if 'update' in data[prop]:
                     data[prop].pop('update')
-        
+
         # height
         if 'update' in data['height']:
             self._display.SetVectorPointHeight(id,
                                                data['height']['value'])
             data['height'].pop('update')
-        
+
         # thematic
         if 'update' in data['thematic']:
             color = size = None
@@ -2184,18 +2217,17 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             if data['thematic']['usecolor'] or data['thematic']['usesize']:
                 if data['thematic']['usecolor']:
                     color = data['thematic']['rgbcolumn']
-                    if self._display.CheckColorTable(id = id, type = 'points'):
+                    if self._display.CheckColorTable(id=id, type='points'):
                         colorTable = True
                 if data['thematic']['usesize']:
                     size = data['thematic']['sizecolumn']
-                self._display.SetPointsStyleThematic(id = id, layer = data['thematic']['layer'],
-                                                     color = color,
-                                                     colorTable = colorTable, 
-                                                     size = size)
+                self._display.SetPointsStyleThematic(
+                    id=id, layer=data['thematic']['layer'],
+                    color=color, colorTable=colorTable, size=size)
             else:
-                self._display.UnsetPointsStyleThematic(id = id)
+                self._display.UnsetPointsStyleThematic(id=id)
             data['thematic'].pop('update')
-            
+
         # surface
         if 'update' in data['mode']:
             if data['mode'].get('3d', False):
@@ -2204,98 +2236,105 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 self._display.SetVectorPointZMode(id, False)
                 for item in range(len(data['mode']['surface']['value'])):
                     for type in ('raster', 'constant'):
-                        sid = self.GetLayerId(type=type,
-                                              name=data['mode']['surface']['value'][item])
+                        sid = self.GetLayerId(
+                            type=type, name=data['mode']['surface']['value'][item])
                         if sid > -1:
                             if data['mode']['surface']['show'][item]:
                                 self._display.SetVectorPointSurface(id, sid)
                             else:
-                                self._display.UnsetVectorPointSurface(id, sid)   
+                                self._display.UnsetVectorPointSurface(id, sid)
                             break
             data['mode'].pop('update')
-            
+
     def GetLayerNames(self, type):
         """Return list of map layer names of given type"""
         layerName = []
-        
+
         if type == 'constant':
             for item in self.constants:
-                layerName.append(_("constant#") + str(item['constant']['object']['name']))
-        else:    
+                layerName.append(_("constant#") +
+                                 str(item['constant']['object']['name']))
+        else:
             for item in self.layers:
-                mapLayer = self.tree.GetLayerInfo(item, key = 'maplayer')
-                if type !=  mapLayer.GetType():
+                mapLayer = self.tree.GetLayerInfo(item, key='maplayer')
+                if type != mapLayer.GetType():
                     continue
-                
+
                 layerName.append(mapLayer.GetName())
-        
+
         return layerName
-    
-    def GetLayerId(self, type, name, vsubtyp = None):
+
+    def GetLayerId(self, type, name, vsubtyp=None):
         """Get layer object id or -1"""
         if len(name) < 1:
             return -1
-        
+
         if type == 'constant':
             for item in self.constants:
-                if _("constant#") + str(item['constant']['object']['name']) == name:
+                if _("constant#") + str(item['constant']
+                                        ['object']['name']) == name:
                     return item['constant']['object']['id']
-                
-        
+
         for item in self.layers:
-            mapLayer = self.tree.GetLayerInfo(item, key = 'maplayer')
+            mapLayer = self.tree.GetLayerInfo(item, key='maplayer')
             if type !=  mapLayer.GetType() or \
-                    name !=  mapLayer.GetName():
+                    name != mapLayer.GetName():
                 continue
-            
-            data = self.tree.GetLayerInfo(item, key = 'nviz')
-            
+
+            data = self.tree.GetLayerInfo(item, key='nviz')
+
             try:
-                if type ==  'raster':
+                if type == 'raster':
                     return data['surface']['object']['id']
-                elif type ==  'vector':
+                elif type == 'vector':
                     if vsubtyp == 'vpoint':
                         return data['vector']['points']['object']['id']
-                    elif vsubtyp ==  'vline':
+                    elif vsubtyp == 'vline':
                         return data['vector']['lines']['object']['id']
-                elif type ==  '3d-raster':
+                elif type == 'raster_3d':
                     return data['volume']['object']['id']
             except KeyError:
                 return -1
         return -1
-    
+
     def ReloadLayersData(self):
         """Delete nviz data of all loaded layers and reload them from current settings"""
         for item in self.layers:
-            type = self.tree.GetLayerInfo(item, key = 'type')
-            layer = self.tree.GetLayerInfo(item, key = 'maplayer')
-            data = self.tree.GetLayerInfo(item, key = 'nviz')
-            
+            type = self.tree.GetLayerInfo(item, key='type')
+            layer = self.tree.GetLayerInfo(item, key='maplayer')
+            data = self.tree.GetLayerInfo(item, key='nviz')
+
             if type == 'raster':
                 self.nvizDefault.SetSurfaceDefaultProp(data['surface'])
             if type == 'vector':
                 vInfo = grass.vector_info_topo(layer.GetName())
                 if (vInfo['points'] + vInfo['centroids']) > 0:
-                    self.nvizDefault.SetVectorPointsDefaultProp(data['vector']['points'])
+                    self.nvizDefault.SetVectorPointsDefaultProp(
+                        data
+                        ['vector']
+                        ['points'])
                 if (vInfo['lines'] + vInfo['boundaries']) > 0:
-                    self.nvizDefault.SetVectorLinesDefaultProp(data['vector']['lines'])
-            
+                    self.nvizDefault.SetVectorLinesDefaultProp(
+                        data
+                        ['vector']
+                        ['lines'])
+
     def NvizCmdCommand(self):
         """Generate command for m.nviz.image according to current state"""
         cmd = 'm.nviz.image '
-        
+
         rasters = []
         vectors = []
         volumes = []
         for item in self.layers:
-            if self.tree.GetLayerInfo(item, key = 'type') == 'raster':
+            if self.tree.GetLayerInfo(item, key='type') == 'raster':
                 rasters.append(item)
-            elif self.tree.GetLayerInfo(item, key = 'type') == '3d-raster':
+            elif self.tree.GetLayerInfo(item, key='type') == 'raster_3d':
                 volumes.append(item)
-            elif self.tree.GetLayerInfo(item, key = 'type') == 'vector':
+            elif self.tree.GetLayerInfo(item, key='type') == 'vector':
                 vectors.append(item)
-        ### if not rasters and not self.constants:
-        ###     return _("At least one raster map required")
+        # if not rasters and not self.constants:
+        # return _("At least one raster map required")
         # elevation_map/elevation_value
         if self.constants:
             subcmd = "elevation_value="
@@ -2306,7 +2345,8 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         if rasters:
             subcmd = "elevation_map="
             for item in rasters:
-                subcmd += "%s," % self.tree.GetLayerInfo(item, key = 'maplayer').GetName()
+                subcmd += "%s," % self.tree.GetLayerInfo(
+                    item, key='maplayer').GetName()
             subcmd = subcmd.strip(', ') + ' '
             cmd += subcmd
             #
@@ -2320,15 +2360,18 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             cmdWire = "wire_color="
             # test -a flag
             flag_a = "-a "
-            nvizDataFirst = self.tree.GetLayerInfo(rasters[0], key = 'nviz')['surface']['draw']
+            nvizDataFirst = self.tree.GetLayerInfo(
+                rasters[0], key='nviz')['surface']['draw']
             for item in rasters:
-                nvizData = self.tree.GetLayerInfo(item, key = 'nviz')['surface']['draw']
+                nvizData = self.tree.GetLayerInfo(item, key='nviz')[
+                    'surface']['draw']
                 if nvizDataFirst != nvizData:
                     flag_a = ""
             cmd += flag_a
             for item in rasters:
-                nvizData = self.tree.GetLayerInfo(item, key = 'nviz')['surface']['draw']
-                
+                nvizData = self.tree.GetLayerInfo(item, key='nviz')[
+                    'surface']['draw']
+
                 cmdMode += "%s," % nvizData['mode']['desc']['mode']
                 cmdFine += "%s," % nvizData['resolution']['fine']
                 cmdCoarse += "%s," % nvizData['resolution']['coarse']
@@ -2343,18 +2386,19 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 cmdStyle += "surface,"
                 cmdWire += "0:0:0,"
             mode = []
-            for subcmd in (cmdMode, cmdFine, cmdCoarse, cmdShading, cmdStyle, cmdWire):
+            for subcmd in (cmdMode, cmdFine, cmdCoarse,
+                           cmdShading, cmdStyle, cmdWire):
                 if flag_a:
                     mode.append(subcmd.split(',')[0] + ' ')
                 else:
                     subcmd = subcmd.strip(', ') + ' '
                     cmd += subcmd
-            if flag_a:# write only meaningful possibilities
+            if flag_a:  # write only meaningful possibilities
                 cmd += mode[0]
                 if 'fine' in mode[0]:
                     cmd += mode[1]
                 elif 'coarse' in mode[0]:
-                    cmd += mode[2]            
+                    cmd += mode[2]
                 elif 'both' in mode[0]:
                     cmd += mode[2]
                     cmd += mode[1]
@@ -2362,7 +2406,8 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                     cmd += mode[3]
                 if 'wire' in mode[4]:
                     cmd += mode[4]
-                if 'coarse' in mode[0] or 'both' in mode[0] and 'wire' in mode[3]:
+                if 'coarse' in mode[0] or 'both' in mode[
+                        0] and 'wire' in mode[3]:
                     cmd += mode[5]
             #
             # attributes
@@ -2370,15 +2415,17 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             cmdColorMap = "color_map="
             cmdColorVal = "color="
             for item in rasters:
-                nvizData = self.tree.GetLayerInfo(item, key = 'nviz')['surface']['attribute']
+                nvizData = self.tree.GetLayerInfo(
+                    item, key='nviz')['surface']['attribute']
                 if 'color' not in nvizData:
-                    cmdColorMap += "%s," % self.tree.GetLayerInfo(item, key = 'maplayer').GetName()
+                    cmdColorMap += "%s," % self.tree.GetLayerInfo(
+                        item, key='maplayer').GetName()
                 else:
                     if nvizData['color']['map']:
                         cmdColorMap += "%s," % nvizData['color']['value']
                     else:
                         cmdColorVal += "%s," % nvizData['color']['value']
-                        #TODO
+                        # TODO
                         # transparency, shine, mask
             for item in self.constants:
                 cmdColorVal += "%s," % item['constant']['color']
@@ -2392,27 +2439,32 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         #
         if vectors:
             cmdLines = cmdLWidth = cmdLHeight = cmdLColor = cmdLMode = cmdLPos = \
-            cmdPoints = cmdPWidth = cmdPSize = cmdPColor = cmdPMarker = cmdPPos = cmdPLayer = ""
+                cmdPoints = cmdPWidth = cmdPSize = cmdPColor = cmdPMarker = cmdPPos = cmdPLayer = ""
             markers = ['x', 'box', 'sphere', 'cube', 'diamond',
                        'dec_tree', 'con_tree', 'aster', 'gyro', 'histogram']
             for vector in vectors:
-                layerName = self.tree.GetLayerInfo(vector, key = 'maplayer').GetName()
+                layerName = self.tree.GetLayerInfo(
+                    vector, key='maplayer').GetName()
                 vInfo = grass.vector_info_topo(layerName)
-                nvizData = self.tree.GetLayerInfo(vector, key = 'nviz')['vector']
+                nvizData = self.tree.GetLayerInfo(vector, key='nviz')['vector']
                 if (vInfo['lines'] + vInfo['boundaries']) > 0:
-                    cmdLines += "%s," % self.tree.GetLayerInfo(vector, key = 'maplayer').GetName()
+                    cmdLines += "%s," % self.tree.GetLayerInfo(
+                        vector, key='maplayer').GetName()
                     cmdLWidth += "%d," % nvizData['lines']['width']['value']
                     cmdLHeight += "%d," % nvizData['lines']['height']['value']
                     cmdLColor += "%s," % nvizData['lines']['color']['value']
                     cmdLMode += "%s," % nvizData['lines']['mode']['type']
                     cmdLPos += "0,0,%d," % nvizData['lines']['height']['value']
-                if (vInfo['points'] + vInfo['centroids']) > 0:    
-                    cmdPoints += "%s," % self.tree.GetLayerInfo(vector, key = 'maplayer').GetName()
+                if (vInfo['points'] + vInfo['centroids']) > 0:
+                    cmdPoints += "%s," % self.tree.GetLayerInfo(
+                        vector, key='maplayer').GetName()
                     cmdPWidth += "%d," % nvizData['points']['width']['value']
                     cmdPSize += "%d," % nvizData['points']['size']['value']
                     cmdPColor += "%s," % nvizData['points']['color']['value']
-                    cmdPMarker += "%s," % markers[nvizData['points']['marker']['value']]
-                    cmdPPos += "0,0,%d," % nvizData['points']['height']['value']
+                    cmdPMarker += "%s," % markers[
+                        nvizData['points']['marker']['value']]
+                    cmdPPos += "0,0,%d," % nvizData[
+                        'points']['height']['value']
                     cmdPLayer += "1,1,"
             if cmdLines:
                 cmd += "vline=" + cmdLines.strip(',') + ' '
@@ -2430,7 +2482,7 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                 cmd += "vpoint_position=" + cmdPPos.strip(',') + ' '
                 cmd += "vpoint_layer=" + cmdPLayer.strip(',') + ' '
             cmd += "\\\n"
-            
+
         #
         # volumes
         #
@@ -2439,13 +2491,18 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             cmdIsoColorMap = cmdIsoColorVal = cmdIsoTrMap = cmdIsoTrVal = ""
             cmdSlice = cmdSliceTransp = cmdSlicePos = ""
             for i, volume in enumerate(volumes):
-                nvizData = self.tree.GetLayerInfo(volume, key = 'nviz')['volume']
-                cmdName += "%s," % self.tree.GetLayerInfo(volume, key = 'maplayer').GetName()
-                cmdShade += "%s," % nvizData['draw']['shading']['isosurface']['desc']
-                cmdRes += "%d," % nvizData['draw']['resolution']['isosurface']['value']
+                nvizData = self.tree.GetLayerInfo(volume, key='nviz')['volume']
+                cmdName += "%s," % self.tree.GetLayerInfo(
+                    volume, key='maplayer').GetName()
+                cmdShade += "%s," % nvizData['draw'][
+                    'shading']['isosurface']['desc']
+                cmdRes += "%d," % nvizData['draw'][
+                    'resolution']['isosurface']['value']
                 if nvizData['position']:
-                    cmdPos += "%d,%d,%d," % (nvizData['position']['x'], nvizData['position']['y'],
-                                            nvizData['position']['z'])
+                    cmdPos += "%d,%d,%d," % (
+                        nvizData['position']['x'],
+                        nvizData['position']['y'],
+                        nvizData['position']['z'])
                 for iso in nvizData['isosurface']:
                     level = iso['topo']['value']
                     cmdIso += "%d:%s," % (i + 1, level)
@@ -2457,15 +2514,15 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
                         if iso['transp']['map']:
                             cmdIsoTrMap += "%s," % iso['transp']['value']
                         else:
-                            cmdIsoTrVal += "%s," % iso['transp']['value']     
-                            
+                            cmdIsoTrVal += "%s," % iso['transp']['value']
+
                 for slice in nvizData['slice']:
-                    axis = ('x','y','z')[slice['position']['axis']]
+                    axis = ('x', 'y', 'z')[slice['position']['axis']]
                     cmdSlice += "%d:%s," % (i + 1, axis)
                     for coord in ('x1', 'x2', 'y1', 'y2', 'z1', 'z2'):
                         cmdSlicePos += "%f," % slice['position'][coord]
                     cmdSliceTransp += "%s," % slice['transp']['value']
-                        
+
             cmd += "volume=" + cmdName.strip(',') + ' '
             cmd += "volume_shading=" + cmdShade.strip(',') + ' '
             cmd += "volume_resolution=" + cmdRes.strip(',') + ' '
@@ -2474,22 +2531,26 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
             if cmdIso:
                 cmd += "isosurf_level=" + cmdIso.strip(',') + ' '
                 if cmdIsoColorMap:
-                    cmd += "isosurf_color_map=" + cmdIsoColorMap.strip(',') + ' '
+                    cmd += "isosurf_color_map=" + \
+                        cmdIsoColorMap.strip(',') + ' '
                 if cmdIsoColorVal:
-                    cmd += "isosurf_color_value=" + cmdIsoColorVal.strip(',') + ' ' 
+                    cmd += "isosurf_color_value=" + \
+                        cmdIsoColorVal.strip(',') + ' '
                 if cmdIsoTrMap:
                     cmd += "isosurf_transp_map=" + cmdIsoTrMap.strip(',') + ' '
                 if cmdIsoTrVal:
-                    cmd += "isosurf_transp_value=" + cmdIsoTrVal.strip(',') + ' '
+                    cmd += "isosurf_transp_value=" + \
+                        cmdIsoTrVal.strip(',') + ' '
             if cmdSlice:
                 cmd += "slice=" + cmdSlice.strip(',') + ' '
                 cmd += "slice_position=" + cmdSlicePos.strip(',') + ' '
                 cmd += "slice_transparency=" + cmdSliceTransp.strip(',') + ' '
-                
+
         #
         # cutting planes
         #
-        cplane = self.lmgr.nviz.FindWindowById(self.lmgr.nviz.win['cplane']['planes']).GetStringSelection()
+        cplane = self.lmgr.nviz.FindWindowById(
+            self.lmgr.nviz.win['cplane']['planes']).GetStringSelection()
         try:
             planeIndex = int(cplane.split()[-1]) - 1
         except (IndexError, ValueError):
@@ -2497,33 +2558,44 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         if planeIndex is not None:
             shading = ['clear', 'top', 'bottom', 'blend', 'shaded']
             cmd += "cplane=%d " % planeIndex
-            cmd += "cplane_rotation=%d " % self.cplanes[planeIndex]['rotation']['rot']
-            cmd += "cplane_tilt=%d " % self.cplanes[planeIndex]['rotation']['tilt']
-            cmd += "cplane_position=%d,%d,%d " % (self.cplanes[planeIndex]['position']['x'],
-                                           self.cplanes[planeIndex]['position']['y'],
-                                           self.cplanes[planeIndex]['position']['z'])
-            cmd += "cplane_shading=%s " % shading[self.cplanes[planeIndex]['shading']]
-            cmd += "\\\n"                                        
-        # 
+            cmd += "cplane_rotation=%d " % self.cplanes[
+                planeIndex]['rotation']['rot']
+            cmd += "cplane_tilt=%d " % self.cplanes[
+                planeIndex]['rotation']['tilt']
+            cmd += "cplane_position=%d,%d,%d " % (
+                self.cplanes[planeIndex]['position']['x'],
+                self.cplanes[planeIndex]['position']['y'],
+                self.cplanes[planeIndex]['position']['z'])
+            cmd += "cplane_shading=%s " % shading[
+                self.cplanes[planeIndex]['shading']]
+            cmd += "\\\n"
+        #
         # viewpoint
         #
-        subcmd  = "position=%.2f,%.2f " % (self.view['position']['x'], self.view['position']['y'])
+        subcmd = "position=%.2f,%.2f " % (
+            self.view['position']['x'],
+            self.view['position']['y'])
         subcmd += "height=%d " % (self.iview['height']['value'])
         subcmd += "perspective=%d " % (self.view['persp']['value'])
         subcmd += "twist=%d " % (self.view['twist']['value'])
-        subcmd += "zexag=%f " % (self.view['z-exag']['value'] / self.iview['z-exag']['llRatio'])
-        subcmd += "focus=%d,%d,%d " % (self.iview['focus']['x'],self.iview['focus']['y'],self.iview['focus']['z'])
+        subcmd += "zexag=%f " % (self.view['z-exag']
+                                 ['value'] / self.iview['z-exag']['llRatio'])
+        subcmd += "focus=%d,%d,%d " % (
+            self.iview['focus']['x'],
+            self.iview['focus']['y'],
+            self.iview['focus']['z'])
         cmd += subcmd
-        
+
         # background
-        subcmd  = "bgcolor=%d:%d:%d " % (self.view['background']['color'][:3])
+        subcmd = "bgcolor=%d:%d:%d " % (self.view['background']['color'][:3])
         if self.view['background']['color'] != (255, 255, 255):
             cmd += subcmd
         cmd += "\\\n"
         # light
-        subcmd  = "light_position=%.2f,%.2f,%.2f " % (self.light['position']['x'],
-                                                      self.light['position']['y'],
-                                                      self.light['position']['z']/100.)
+        subcmd = "light_position=%.2f,%.2f,%.2f " % (
+            self.light['position']['x'],
+            self.light['position']['y'],
+            self.light['position']['z'] / 100.)
         subcmd += "light_brightness=%d " % (self.light['bright'])
         subcmd += "light_ambient=%d " % (self.light['ambient'])
         subcmd += "light_color=%d:%d:%d " % (self.light['color'][:3])
@@ -2533,48 +2605,54 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         toolWindow = self.lmgr.nviz
         direction = ''
         for dir in ('nw', 'ne', 'sw', 'se'):
-            if toolWindow.FindWindowById(toolWindow.win['fringe'][dir]).IsChecked():
+            if toolWindow.FindWindowById(
+                    toolWindow.win['fringe'][dir]).IsChecked():
                 direction += "%s," % dir
         if direction:
             subcmd = "fringe=%s " % (direction.strip(','))
-            color = toolWindow.FindWindowById(toolWindow.win['fringe']['color']).GetValue()
+            color = toolWindow.FindWindowById(
+                toolWindow.win['fringe']['color']).GetValue()
             subcmd += "fringe_color=%d:%d:%d " % (color[0], color[1], color[2])
-            subcmd += "fringe_elevation=%d " % (toolWindow.FindWindowById(toolWindow.win['fringe']['elev']).GetValue())
+            subcmd += "fringe_elevation=%d " % (toolWindow.FindWindowById(
+                toolWindow.win['fringe']['elev']).GetValue())
             cmd += subcmd
             cmd += "\\\n"
         # north arrow
         if self.decoration['arrow']['show']:
-            subcmd = "arrow_position=%d,%d " % (self.decoration['arrow']['position']['x'],
-                                                self.decoration['arrow']['position']['y'])
+            subcmd = "arrow_position=%d,%d " % (
+                self.decoration['arrow']['position']['x'],
+                self.decoration['arrow']['position']['y'])
             subcmd += "arrow_color=%s " % self.decoration['arrow']['color']
             subcmd += "arrow_size=%d " % self.decoration['arrow']['size']
             cmd += subcmd
-            
+
         # output
         subcmd = 'output=nviz_output '
         subcmd += 'format=ppm '
         subcmd += 'size=%d,%d ' % self.GetClientSizeTuple()
         cmd += subcmd
-        
+
         return cmd
-    
+
     def OnNvizCmd(self):
         """Generate and write command to command output"""
-        self.log.WriteLog(self.NvizCmdCommand(), notification=Notification.RAISE_WINDOW)
-        
+        self.log.WriteLog(
+            self.NvizCmdCommand(),
+            notification=Notification.RAISE_WINDOW)
+
     def SaveToFile(self, FileName, FileType, width, height):
         """This draws the DC to a buffer that can be saved to a file.
-        
+
         .. todo::
             fix BufferedPaintDC
-        
+
         :param filename: file name
         :param FileType: type of bitmap
         :param width: image width
         :param height: image height
         """
         self._display.SaveToFile(FileName, width, height, FileType)
-                
+
         # pbuffer = wx.EmptyBitmap(max(1, self.Map.width), max(1, self.Map.height))
         # dc = wx.BufferedPaintDC(self, pbuffer)
         # dc.Clear()
@@ -2582,24 +2660,17 @@ class GLWindow(MapWindowBase, glcanvas.GLCanvas):
         # self._display.Draw(False, -1)
         # pbuffer.SaveFile(FileName, FileType)
         # self.SwapBuffers()
-        
+
     def GetDisplay(self):
         """Get display instance"""
         return self._display
-        
+
     def ZoomToMap(self, layers):
         """Reset view
-        
+
         :param layers: so far unused
         """
         self.lmgr.nviz.OnResetView(None)
-        
-    def TextBounds(self, textinfo):
-        """Return text boundary data
-        
-        :param textinfo: text metadata (text, font, color, rotation)
-        """
-        return self.parent.MapWindow2D.TextBounds(textinfo, relcoords = True)
 
     def DisactivateWin(self):
         """Use when the class instance is hidden in MapFrame."""
diff --git a/gui/wxpython/nviz/preferences.py b/gui/wxpython/nviz/preferences.py
index 56ca31d..5b2d9b9 100644
--- a/gui/wxpython/nviz/preferences.py
+++ b/gui/wxpython/nviz/preferences.py
@@ -22,551 +22,636 @@ import copy
 import wx
 import wx.lib.colourselect as csel
 
-from core                 import globalvar
-from core.settings        import UserSettings
+from core import globalvar
+from core.settings import UserSettings
 from core.utils import _
 from gui_core.preferences import PreferencesBaseDialog
 
+
 class NvizPreferencesDialog(PreferencesBaseDialog):
     """Nviz preferences dialog"""
-    def __init__(self, parent, giface, title = _("3D view default settings"),
-                 settings = UserSettings):
-        PreferencesBaseDialog.__init__(self, parent = parent, title = title, giface = giface,
-                                       settings = settings)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass_nviz.ico'), wx.BITMAP_TYPE_ICO))
+
+    def __init__(self, parent, giface, title=_("3D view default settings"),
+                 settings=UserSettings):
+        PreferencesBaseDialog.__init__(
+            self,
+            parent=parent,
+            title=title,
+            giface=giface,
+            settings=settings)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass_nviz.ico'),
+                wx.BITMAP_TYPE_ICO))
 
         self.toolWin = self.parent.nviz
-        
+
         # create notebook pages
         self._createViewPage(self.notebook)
         self._createFlyPage(self.notebook)
         self._createLightPage(self.notebook)
         self._createSurfacePage(self.notebook)
         self._createVectorPage(self.notebook)
-        
+
         self.SetMinSize(self.GetBestSize())
         self.SetSize(self.size)
-        self.btnDefault.SetToolTipString(_("Revert settings to default, changes are not applied"))
-        
+        self.btnDefault.SetToolTipString(
+            _("Revert settings to default, changes are not applied"))
+
     def _createViewPage(self, notebook):
         """Create notebook page for view settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        
-        notebook.AddPage(page = panel,
-                         text = " %s " % _("View"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+
+        notebook.AddPage(page=panel,
+                         text=" %s " % _("View"))
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("View")))
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("View")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
         row = 0
         # perspective
-        pvals = UserSettings.Get(group = 'nviz', key = 'view', subkey = 'persp')
-        ipvals = UserSettings.Get(group='nviz', key='view', subkey='persp', settings_type='internal')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Perspective:")),
-                      pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("value:")),
-                      pos = (row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        pval = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = pvals['value'],
-                           min = ipvals['min'],
-                           max = ipvals['max'])
+        pvals = UserSettings.Get(group='nviz', key='view', subkey='persp')
+        ipvals = UserSettings.Get(
+            group='nviz',
+            key='view',
+            subkey='persp',
+            settings_type='internal')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Perspective:")),
+                      pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("value:")), pos=(
+                row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        pval = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=pvals['value'],
+                           min=ipvals['min'],
+                           max=ipvals['max'])
         self.winId['nviz:view:persp:value'] = pval.GetId()
-        gridSizer.Add(item = pval, pos = (row, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("step:")),
-                      pos = (row, 3), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        pstep = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = pvals['step'],
-                           min = ipvals['min'],
-                           max = ipvals['max']-1)
+        gridSizer.Add(item=pval, pos=(row, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("step:")), pos=(
+                row, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        pstep = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                            initial=pvals['step'],
+                            min=ipvals['min'],
+                            max=ipvals['max'] - 1)
         self.winId['nviz:view:persp:step'] = pstep.GetId()
-        gridSizer.Add(item = pstep, pos = (row, 4),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=pstep, pos=(row, 4),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
         row += 1
-        
+
         # position
-        posvals = UserSettings.Get(group = 'nviz', key = 'view', subkey = 'position')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Position:")),
-                      pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("x:")),
-                      pos = (row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        px = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = posvals['x'] * 100,
-                           min = 0,
-                           max = 100)
+        posvals = UserSettings.Get(group='nviz', key='view', subkey='position')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Position:")),
+                      pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("x:")), pos=(
+                row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        px = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                         initial=posvals['x'] * 100,
+                         min=0,
+                         max=100)
         self.winId['nviz:view:position:x'] = px.GetId()
-        gridSizer.Add(item = px, pos = (row, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = "y:"),
-                      pos = (row, 3), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        py = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = posvals['y'] * 100,
-                           min = 0,
-                           max = 100)
+        gridSizer.Add(item=px, pos=(row, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label="y:"), pos=(
+                row, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        py = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                         initial=posvals['y'] * 100,
+                         min=0,
+                         max=100)
         self.winId['nviz:view:position:y'] = py.GetId()
-        gridSizer.Add(item = py, pos = (row, 4),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=py, pos=(row, 4),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
         row += 1
-        
+
         # height is computed dynamically
-        
+
         # twist
-        tvals = UserSettings.Get(group = 'nviz', key = 'view', subkey = 'twist')
-        itvals = UserSettings.Get(group='nviz', key='view', subkey='twist', settings_type='internal')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Twist:")),
-                      pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("value:")),
-                      pos = (row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        tval = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = tvals['value'],
-                           min = itvals['min'],
-                           max = itvals['max'])
+        tvals = UserSettings.Get(group='nviz', key='view', subkey='twist')
+        itvals = UserSettings.Get(
+            group='nviz',
+            key='view',
+            subkey='twist',
+            settings_type='internal')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Twist:")),
+                      pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("value:")), pos=(
+                row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        tval = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=tvals['value'],
+                           min=itvals['min'],
+                           max=itvals['max'])
         self.winId['nviz:view:twist:value'] = tval.GetId()
-        gridSizer.Add(item = tval, pos = (row, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=tval, pos=(row, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
         row += 1
-        
+
         # z-exag
-        zvals = UserSettings.Get(group = 'nviz', key = 'view', subkey = 'z-exag')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Z-exag:")),
-                      pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("value:")),
-                      pos = (row, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        zval = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = zvals['value'],
-                           min = -1e6,
-                           max = 1e6)
+        zvals = UserSettings.Get(group='nviz', key='view', subkey='z-exag')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Z-exag:")),
+                      pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("value:")), pos=(
+                row, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        zval = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=zvals['value'],
+                           min=-1e6,
+                           max=1e6)
         self.winId['nviz:view:z-exag:value'] = zval.GetId()
-        gridSizer.Add(item = zval, pos = (row, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-
-        box = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                           label = " %s " % (_("Image Appearance")))
+        gridSizer.Add(item=zval, pos=(row, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Image Appearance")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # background color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Background color:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = UserSettings.Get(group = 'nviz', key = 'view',
-                                                            subkey = ['background', 'color']),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Background color:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        color = csel.ColourSelect(
+            panel,
+            id=wx.ID_ANY,
+            colour=UserSettings.Get(
+                group='nviz',
+                key='view',
+                subkey=[
+                    'background',
+                    'color']),
+            size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
         self.winId['nviz:view:background:color'] = color.GetId()
-        gridSizer.Add(item = color, pos = (0, 1))
-        
+        gridSizer.Add(item=color, pos=(0, 1))
+
         gridSizer.AddGrowableCol(0)
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 5)
-        
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=5)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
-        
+
     def _createFlyPage(self, notebook):
         """Create notebook page for view settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        
-        notebook.AddPage(page = panel,
-                         text = " %s " % _("Fly-through"))
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+
+        notebook.AddPage(page=panel,
+                         text=" %s " % _("Fly-through"))
         pageSizer = wx.BoxSizer(wx.VERTICAL)
         # fly throuhg mode
-        box = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                           label = " %s " % (_("Fly-through mode")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Fly-through mode")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # move exag
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Move exag:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        moveExag = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 20, 
-                                  initial = UserSettings.Get(group = 'nviz', key = 'fly',
-                                                             subkey = ['exag', 'move']),
-                                  size = (65, -1))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Move exag:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        moveExag = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=20, initial=UserSettings.Get(
+                group='nviz', key='fly', subkey=[
+                    'exag', 'move']), size=(
+                65, -1))
         self.winId['nviz:fly:exag:move'] = moveExag.GetId()
-        gridSizer.Add(item = moveExag, pos = (0, 1))
-        
+        gridSizer.Add(item=moveExag, pos=(0, 1))
+
         # turn exag
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Turn exag:")),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        turnExag = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 20, 
-                                  initial = UserSettings.Get(group = 'nviz', key = 'fly',
-                                                             subkey = ['exag', 'turn']),
-                                  size = (65, -1))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Turn exag:")),
+                      pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        turnExag = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=20, initial=UserSettings.Get(
+                group='nviz', key='fly', subkey=[
+                    'exag', 'turn']), size=(
+                65, -1))
         self.winId['nviz:fly:exag:turn'] = turnExag.GetId()
-        gridSizer.Add(item = turnExag, pos = (1, 1))
-        
+        gridSizer.Add(item=turnExag, pos=(1, 1))
+
         gridSizer.AddGrowableCol(0)
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 5)
-        
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=5)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
-        
+
     def _createLightPage(self, notebook):
         """Create notebook page for light settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        
-        notebook.AddPage(page = panel,
-                         text = " %s " % _("Lighting"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+
+        notebook.AddPage(page=panel,
+                         text=" %s " % _("Lighting"))
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Light")))
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Light")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
 
-        
         # position
-        posvals = UserSettings.Get(group = 'nviz', key = 'light', subkey = 'position')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Position:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("x:")),
-                      pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        px = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = posvals['x'] * 100,
-                           min = -100,
-                           max = 100)
+        posvals = UserSettings.Get(
+            group='nviz', key='light', subkey='position')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Position:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("x:")), pos=(
+                0, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        px = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                         initial=posvals['x'] * 100,
+                         min=-100,
+                         max=100)
         self.winId['nviz:light:position:x'] = px.GetId()
-        gridSizer.Add(item = px, pos = (0, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = "y:"),
-                      pos = (0, 3), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        py = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = posvals['y'] * 100,
-                           min = -100,
-                           max = 100)
+        gridSizer.Add(item=px, pos=(0, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label="y:"), pos=(
+                0, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        py = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                         initial=posvals['y'] * 100,
+                         min=-100,
+                         max=100)
         self.winId['nviz:light:position:y'] = py.GetId()
-        gridSizer.Add(item = py, pos = (0, 4),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-                    
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("z:")),
-                      pos = (0, 5), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        
-        pz = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = posvals['z'],
-                           min = 0,
-                           max = 100)
+        gridSizer.Add(item=py, pos=(0, 4),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("z:")), pos=(
+                0, 5), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
+        pz = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                         initial=posvals['z'],
+                         min=0,
+                         max=100)
         self.winId['nviz:light:position:z'] = pz.GetId()
-        gridSizer.Add(item = pz, pos = (0, 6),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-                    
+        gridSizer.Add(item=pz, pos=(0, 6),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # brightness
-        brightval = UserSettings.Get(group = 'nviz', key = 'light', subkey = 'bright')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Brightness:")),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        bright = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = brightval,
-                           min = 0,
-                           max = 100)
+        brightval = UserSettings.Get(
+            group='nviz', key='light', subkey='bright')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Brightness:")),
+                      pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        bright = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                             initial=brightval,
+                             min=0,
+                             max=100)
         self.winId['nviz:light:bright'] = bright.GetId()
-        gridSizer.Add(item = bright, pos = (1, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-                    
+        gridSizer.Add(item=bright, pos=(1, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # ambient
-        ambval = UserSettings.Get(group = 'nviz', key = 'light', subkey = 'ambient')
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Ambient:")),
-                      pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        amb = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = ambval,
-                           min = 0,
-                           max = 100)
+        ambval = UserSettings.Get(group='nviz', key='light', subkey='ambient')
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Ambient:")),
+                      pos=(2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        amb = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                          initial=ambval,
+                          min=0,
+                          max=100)
         self.winId['nviz:light:ambient'] = amb.GetId()
-        gridSizer.Add(item = amb, pos = (2, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-                    
+        gridSizer.Add(item=amb, pos=(2, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # light color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Color:")),
-                      pos = (3, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = UserSettings.Get(group = 'nviz', key = 'light',
-                                                            subkey = 'color'),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Color:")),
+                      pos=(3, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        color = csel.ColourSelect(
+            panel, id=wx.ID_ANY, colour=UserSettings.Get(
+                group='nviz', key='light', subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
         self.winId['nviz:light:color'] = color.GetId()
-        gridSizer.Add(item = color, pos = (3, 2))
-        
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 5)
-        
+        gridSizer.Add(item=color, pos=(3, 2))
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=5)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
-    
+
     def _createSurfacePage(self, notebook):
         """Create notebook page for surface settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        
-        notebook.AddPage(page = panel,
-                         text = " %s " % _("Surface"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+
+        notebook.AddPage(page=panel,
+                         text=" %s " % _("Surface"))
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # draw
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Draw")))
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Draw")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # mode
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                        label = _("Mode:")), flag = wx.ALIGN_CENTER_VERTICAL,
-                        pos = (0, 0))
-        mode = wx.Choice(parent = panel, id = wx.ID_ANY, size = (-1, -1),
-                          choices = [_("coarse"),
-                                     _("fine"),
-                                     _("both")])
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Mode:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                0,
+                0))
+        mode = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1),
+                         choices=[_("coarse"),
+                                  _("fine"),
+                                  _("both")])
         self.winId['nviz:surface:draw:mode'] = mode.GetId()
         mode.SetName('GetSelection')
-        mode.SetSelection(UserSettings.Get(group = 'nviz', key = 'surface',
-                                            subkey = ['draw', 'mode']))
-        gridSizer.Add(item = mode, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 1))
-                    
+        mode.SetSelection(UserSettings.Get(group='nviz', key='surface',
+                                           subkey=['draw', 'mode']))
+        gridSizer.Add(item=mode, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 1))
+
         # fine
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                        label = _("Fine mode:")), flag = wx.ALIGN_CENTER_VERTICAL,
-                        pos = (1, 0))
-        res = UserSettings.Get(group = 'nviz', key = 'surface', subkey = ['draw','res-fine'])
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                        label = _("resolution:")), flag = wx.ALIGN_CENTER_VERTICAL,
-                        pos = (1, 1))
-        fine = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = res,
-                           min = 1,
-                           max = 100)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Fine mode:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                1,
+                0))
+        res = UserSettings.Get(
+            group='nviz', key='surface', subkey=[
+                'draw', 'res-fine'])
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("resolution:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                1,
+                1))
+        fine = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=res,
+                           min=1,
+                           max=100)
         self.winId['nviz:surface:draw:res-fine'] = fine.GetId()
-        
-        gridSizer.Add(item = fine, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1, 2))
-                    
+
+        gridSizer.Add(item=fine, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(1, 2))
+
         # coarse
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                        label = _("Coarse mode:")), flag = wx.ALIGN_CENTER_VERTICAL,
-                        pos = (2, 0))
-        res = UserSettings.Get(group = 'nviz', key = 'surface', subkey = ['draw','res-coarse'])
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                        label = _("resolution:")), flag = wx.ALIGN_CENTER_VERTICAL,
-                        pos = (2, 1))
-        coarse = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = res,
-                           min = 1,
-                           max = 100)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Coarse mode:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                2,
+                0))
+        res = UserSettings.Get(
+            group='nviz', key='surface', subkey=[
+                'draw', 'res-coarse'])
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("resolution:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                2,
+                1))
+        coarse = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                             initial=res,
+                             min=1,
+                             max=100)
         self.winId['nviz:surface:draw:res-coarse'] = coarse.GetId()
-        
-        gridSizer.Add(item = coarse, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 2))
-        #style
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-            label = _("style:")), flag = wx.ALIGN_CENTER_VERTICAL,
-            pos = (3, 1))
-        style = wx.Choice(parent = panel, id = wx.ID_ANY, size = (-1, -1),
-                          choices = [_("wire"),
-                                     _("surface")])
+
+        gridSizer.Add(item=coarse, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 2))
+        # style
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("style:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                3,
+                1))
+        style = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1),
+                          choices=[_("wire"),
+                                   _("surface")])
         self.winId['nviz:surface:draw:style'] = style.GetId()
         style.SetName('GetSelection')
-        style.SetSelection(UserSettings.Get(group = 'nviz', key = 'surface',
-                                            subkey = ['draw', 'style']))
+        style.SetSelection(UserSettings.Get(group='nviz', key='surface',
+                                            subkey=['draw', 'style']))
         self.winId['nviz:surface:draw:style'] = style.GetId()
-        
-        gridSizer.Add(item = style, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (3, 2))
-        #wire color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-            label = _("wire color:")), flag = wx.ALIGN_CENTER_VERTICAL,
-            pos = (4, 1))
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = UserSettings.Get(group = 'nviz', key = 'surface',
-                                                            subkey = ['draw', 'wire-color']),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+
+        gridSizer.Add(item=style, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(3, 2))
+        # wire color
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("wire color:")),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                4,
+                1))
+        color = csel.ColourSelect(
+            panel, id=wx.ID_ANY, colour=UserSettings.Get(
+                group='nviz', key='surface', subkey=[
+                    'draw', 'wire-color']), size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName('GetColour')
-        self.winId['nviz:surface:draw:wire-color'] = color.GetId() 
-        gridSizer.Add(item = color, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (4, 2))
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)            
-        pageSizer.Add(item = boxSizer, proportion = 0,
-              flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-              border = 5)
-        
+        self.winId['nviz:surface:draw:wire-color'] = color.GetId()
+        gridSizer.Add(item=color, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(4, 2))
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=5)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
-    
+
     def _createVectorPage(self, notebook):
         """Create notebook page for vector settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        
-        notebook.AddPage(page = panel,
-                         text = " %s " % _("Vector"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+
+        notebook.AddPage(page=panel,
+                         text=" %s " % _("Vector"))
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # vector lines
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Vector lines")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Vector lines")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         row = 0
         # icon size
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Width:")),
-                      pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        iwidth = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                            initial = 12,
-                            min = 1,
-                            max = 100)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Width:")),
+                      pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        iwidth = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                             initial=12,
+                             min=1,
+                             max=100)
         self.winId['nviz:vector:lines:width'] = iwidth.GetId()
-        iwidth.SetValue(UserSettings.Get(group = 'nviz', key = 'vector',
-                                        subkey = ['lines', 'width']))
-        gridSizer.Add(item = iwidth, pos = (row, 1),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
+        iwidth.SetValue(UserSettings.Get(group='nviz', key='vector',
+                                         subkey=['lines', 'width']))
+        gridSizer.Add(item=iwidth, pos=(row, 1),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # icon color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Color:")),
-                      pos = (row, 4), flag = wx.ALIGN_CENTER_VERTICAL)
-        icolor = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Color:")),
+                      pos=(row, 4), flag=wx.ALIGN_CENTER_VERTICAL)
+        icolor = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                   size=globalvar.DIALOG_COLOR_SIZE)
         icolor.SetName('GetColour')
         self.winId['nviz:vector:lines:color'] = icolor.GetId()
-        icolor.SetColour(UserSettings.Get(group = 'nviz', key = 'vector',
-                                          subkey = ['lines', 'color']))
-        gridSizer.Add(item = icolor, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 5))
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 5)
-        
+        icolor.SetColour(UserSettings.Get(group='nviz', key='vector',
+                                          subkey=['lines', 'color']))
+        gridSizer.Add(item=icolor, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 5))
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=5)
+
         # vector points
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Vector points")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Vector points")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 5)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=5)
+
         row = 0
         # icon size
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Size:")),
-                      pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        isize = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                            initial = 100,
-                            min = 1,
-                            max = 1e6)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Size:")),
+                      pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        isize = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                            initial=100,
+                            min=1,
+                            max=1e6)
         self.winId['nviz:vector:points:size'] = isize.GetId()
-        isize.SetValue(UserSettings.Get(group = 'nviz', key = 'vector',
-                                        subkey = ['points', 'size']))
-        gridSizer.Add(item = isize, pos = (row, 1),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        
+        isize.SetValue(UserSettings.Get(group='nviz', key='vector',
+                                        subkey=['points', 'size']))
+        gridSizer.Add(item=isize, pos=(row, 1),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
         # icon symbol
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Marker:")),
-                      pos = (row, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        isym = wx.Choice (parent = panel, id = wx.ID_ANY, size = (100, -1),
-                          choices = UserSettings.Get(group = 'nviz', key = 'vector',
-                                                   subkey=['points', 'marker'], settings_type='internal'))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Marker:")),
+                      pos=(row, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        isym = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(100, -1),
+            choices=UserSettings.Get(
+                group='nviz', key='vector', subkey=['points', 'marker'],
+                settings_type='internal'))
         isym.SetName("GetSelection")
         self.winId['nviz:vector:points:marker'] = isym.GetId()
-        isym.SetSelection(UserSettings.Get(group = 'nviz', key = 'vector',
-                                           subkey = ['points', 'marker']))
-        gridSizer.Add(item = isym, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 3))
-        
+        isym.SetSelection(UserSettings.Get(group='nviz', key='vector',
+                                           subkey=['points', 'marker']))
+        gridSizer.Add(item=isym, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 3))
+
         # icon color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Color:")),
-                      pos = (row, 4), flag = wx.ALIGN_CENTER_VERTICAL)
-        icolor = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Color:")),
+                      pos=(row, 4), flag=wx.ALIGN_CENTER_VERTICAL)
+        icolor = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                   size=globalvar.DIALOG_COLOR_SIZE)
         icolor.SetName('GetColour')
         self.winId['nviz:vector:points:color'] = icolor.GetId()
-        icolor.SetColour(UserSettings.Get(group = 'nviz', key = 'vector',
-                                          subkey = ['points', 'color']))
-        gridSizer.Add(item = icolor, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (row, 5))
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 5)
-        
+        icolor.SetColour(UserSettings.Get(group='nviz', key='vector',
+                                          subkey=['points', 'color']))
+        gridSizer.Add(item=icolor, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 5))
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=5)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
 
     def OnDefault(self, event):
         """Button 'Set to default' pressed"""
-        self.settings.userSettings = copy.deepcopy(self.settings.defaultSettings)
-        
+        self.settings.userSettings = copy.deepcopy(
+            self.settings.defaultSettings)
+
         # update widgets
         for gks in self.winId.keys():
             subkey1 = None
@@ -583,8 +668,8 @@ class NvizPreferencesDialog(PreferencesBaseDialog):
             if win.GetName() == 'GetSelection':
                 value = win.SetSelection(value)
             else:
-                value = win.SetValue(value)        
-        
+                value = win.SetValue(value)
+
     def OnApply(self, event):
         """Apply Nviz settings for current session"""
         for item in self.winId.keys():
@@ -593,7 +678,7 @@ class NvizPreferencesDialog(PreferencesBaseDialog):
                 subkey1 = None
             except ValueError:
                 group, key, subkey, subkey1 = item.split(':')
-            
+
             id = self.winId[item]
             win = self.FindWindowById(id)
             if win.GetName() == 'GetSelection':
@@ -602,7 +687,7 @@ class NvizPreferencesDialog(PreferencesBaseDialog):
                 value = tuple(win.GetValue())
             else:
                 value = win.GetValue()
-            
+
             if subkey == 'position':
                 if subkey1 in ('x', 'y'):
                     value = float(value) / 100
@@ -610,23 +695,21 @@ class NvizPreferencesDialog(PreferencesBaseDialog):
                 self.settings.Set(group, value, key, [subkey, subkey1])
             else:
                 self.settings.Set(group, value, key, subkey)
-                
+
         self.toolWin.LoadSettings()
-        
-        
+
     def OnSave(self, event):
         """Save button pressed
-        
+
         Apply changes and save settings to configuration file
         """
         self.OnApply(None)
         fileSettings = {}
-        UserSettings.ReadSettingsFile(settings = fileSettings)
-        fileSettings['nviz'] = UserSettings.Get(group = 'nviz')
-        
+        UserSettings.ReadSettingsFile(settings=fileSettings)
+        fileSettings['nviz'] = UserSettings.Get(group='nviz')
+
         UserSettings.SaveToFile(fileSettings)
         self.parent._gconsole.WriteLog(
-                _('3D view settings saved to file <%s>.') % UserSettings.filePath)
-        
+            _('3D view settings saved to file <%s>.') % UserSettings.filePath)
+
         self.Destroy()
-        
diff --git a/gui/wxpython/nviz/tools.py b/gui/wxpython/nviz/tools.py
index 7b5a031..9ae406e 100644
--- a/gui/wxpython/nviz/tools.py
+++ b/gui/wxpython/nviz/tools.py
@@ -25,7 +25,7 @@ import copy
 import types
 
 import wx
-import wx.lib.colourselect  as csel
+import wx.lib.colourselect as csel
 import wx.lib.scrolledpanel as SP
 import wx.lib.filebrowsebutton as filebrowse
 try:
@@ -34,38 +34,40 @@ except ImportError:
     import wx.lib.flatnotebook as FN
 try:
     from agw import foldpanelbar as fpb
-except ImportError: # if it's not there locally, try the wxPython lib.
+except ImportError:  # if it's not there locally, try the wxPython lib.
     try:
         import wx.lib.agw.foldpanelbar as fpb
     except ImportError:
-        import wx.lib.foldpanelbar as fpb # versions <=2.5.5.1
+        import wx.lib.foldpanelbar as fpb  # versions <=2.5.5.1
 try:
     import wx.lib.agw.floatspin as fs
 except ImportError:
     fs = None
 import grass.script as grass
 
-from core               import globalvar
+from core import globalvar
 from core.utils import _
-from gui_core.gselect   import VectorDBInfo
-from core.gcmd          import GMessage, RunCommand
+from gui_core.gselect import VectorDBInfo
+from core.gcmd import GMessage, RunCommand
 from modules.colorrules import ThematicVectorTable
-from core.settings      import UserSettings
-from gui_core.widgets   import ScrolledPanel, NumTextCtrl, FloatSlider, SymbolButton
-from gui_core.gselect   import Select
-from core.debug         import Debug
+from core.settings import UserSettings
+from gui_core.widgets import ScrolledPanel, NumTextCtrl, FloatSlider, SymbolButton
+from gui_core.gselect import Select
+from core.debug import Debug
 try:
     from nviz.mapwindow import wxUpdateProperties, wxUpdateView,\
-                               wxUpdateLight, wxUpdateCPlane
+        wxUpdateLight, wxUpdateCPlane
     import wxnviz
 except ImportError:
     pass
 
+
 class NvizToolWindow(FN.FlatNotebook):
     """Nviz (3D view) tools panel
     """
+
     def __init__(self, parent, tree, display, id=wx.ID_ANY,
-                 style=globalvar.FNPageStyle|FN.FNB_NO_X_BUTTON,
+                 style=globalvar.FNPageStyle | FN.FNB_NO_X_BUTTON,
                  **kwargs):
         Debug.msg(5, "NvizToolWindow.__init__()")
         self.parent = parent
@@ -73,68 +75,75 @@ class NvizToolWindow(FN.FlatNotebook):
         self.mapDisplay = display
         self.mapWindow = display.GetWindow()
         self._display = self.mapWindow.GetDisplay()
-         
+
         if globalvar.hasAgw:
             kwargs['agwStyle'] = style
         else:
             kwargs['style'] = style
         FN.FlatNotebook.__init__(self, parent, id, **kwargs)
         self.SetTabAreaColour(globalvar.FNPageColor)
-        
-        self.win  = {} # window ids
-        self.page = {} # page ids
+
+        self.win = {}  # window ids
+        self.page = {}  # page ids
 
         # view page
-        self.AddPage(page = self._createViewPage(),
-                     text = " %s " % _("View"))
+        self.AddPage(page=self._createViewPage(),
+                     text=" %s " % _("View"))
 
         # data page
-        self.AddPage(page = self._createDataPage(),
-                     text = " %s " % _("Data"))
-        
+        self.AddPage(page=self._createDataPage(),
+                     text=" %s " % _("Data"))
+
         # appearance page
-        self.AddPage(page = self._createAppearancePage(),
-                     text = " %s " % _("Appearance"))
-                    
+        self.AddPage(page=self._createAppearancePage(),
+                     text=" %s " % _("Appearance"))
+
         # analysis page
-        self.AddPage(page = self._createAnalysisPage(),
-                     text = " %s " % _("Analysis"))
+        self.AddPage(page=self._createAnalysisPage(),
+                     text=" %s " % _("Analysis"))
         # view page
-        self.AddPage(page = self._createAnimationPage(),
-                     text = " %s " % _("Animation"))
-        
+        self.AddPage(page=self._createAnimationPage(),
+                     text=" %s " % _("Animation"))
+
         self.UpdateSettings()
-        
+
         self.mapWindow.SetToolWin(self)
-        
+
         self.pageChanging = False
-        self.vetoGSelectEvt = False #when setting map, event is invoked
+        self.vetoGSelectEvt = False  # when setting map, event is invoked
         self.mapWindow.render['quick'] = False
         self.mapWindow.Refresh(False)
-        
+
         # bindings
         self.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         self.Bind(wx.EVT_SIZE, self.OnSize)
-        
+
         self.mapWindow.GetAnimation().animationFinished.connect(self.OnAnimationFinished)
-        self.mapWindow.GetAnimation().animationUpdateIndex.connect(self.OnAnimationUpdateIndex)
-        
+        self.mapWindow.GetAnimation().animationUpdateIndex.connect(
+            self.OnAnimationUpdateIndex)
+
         Debug.msg(3, "NvizToolWindow.__init__()")
-        
+
         self.Update()
         wx.CallAfter(self.SetPage, 'view')
-        wx.CallAfter(self.UpdateScrolling, (self.foldpanelData, self.foldpanelAppear,
-                                            self.foldpanelAnalysis))       
+        wx.CallAfter(
+            self.UpdateScrolling,
+            (self.foldpanelData,
+             self.foldpanelAppear,
+             self.foldpanelAnalysis))
         wx.CallAfter(self.SetInitialMaps)
-        
+
     def SetInitialMaps(self):
         """Set initial raster and vector map"""
-        for ltype in ('raster', 'vector', '3d-raster'):
-            selectedLayer = self.tree.GetSelectedLayer(multi = False, checkedOnly = True)
+        for ltype in ('raster', 'vector', 'raster_3d'):
+            selectedLayer = self.tree.GetSelectedLayer(
+                multi=False, checkedOnly=True)
             if selectedLayer is None:
                 continue
-            selectedLayer = self.tree.GetLayerInfo(selectedLayer, key = 'maplayer')
-            layers = self.mapWindow.Map.GetListOfLayers(ltype = ltype, active = True)
+            selectedLayer = self.tree.GetLayerInfo(
+                selectedLayer, key='maplayer')
+            layers = self.mapWindow.Map.GetListOfLayers(
+                ltype=ltype, active=True)
             if selectedLayer in layers:
                 selection = selectedLayer.GetName()
             else:
@@ -143,1898 +152,2277 @@ class NvizToolWindow(FN.FlatNotebook):
                 except:
                     continue
             if ltype == 'raster':
-                self.FindWindowById(self.win['surface']['map']).SetValue(selection)
-                self.FindWindowById(self.win['fringe']['map']).SetValue(selection)
+                self.FindWindowById(
+                    self.win['surface']['map']).SetValue(selection)
+                self.FindWindowById(
+                    self.win['fringe']['map']).SetValue(selection)
             elif ltype == 'vector':
-                self.FindWindowById(self.win['vector']['map']).SetValue(selection)
-            elif ltype == '3d-raster':
-                self.FindWindowById(self.win['volume']['map']).SetValue(selection)
-               
+                self.FindWindowById(
+                    self.win['vector']['map']).SetValue(selection)
+            elif ltype == 'raster_3d':
+                self.FindWindowById(
+                    self.win['volume']['map']).SetValue(selection)
+
     def UpdateState(self, **kwargs):
         if 'view' in kwargs:
             self.mapWindow.view = kwargs['view']
-            self.FindWindowById(self.win['view']['position']).data = kwargs['view']
+            self.FindWindowById(
+                self.win['view']['position']).data = kwargs['view']
             self.FindWindowById(self.win['view']['position']).PostDraw()
         if 'iview' in kwargs:
             self.mapWindow.iview = kwargs['iview']
         if 'light' in kwargs:
-            self.mapWindow.light = kwargs['light']  
-            self.FindWindowById(self.win['light']['position']).data = kwargs['light']  
+            self.mapWindow.light = kwargs['light']
+            self.FindWindowById(
+                self.win['light']['position']).data = kwargs['light']
             self.FindWindowById(self.win['light']['position']).PostDraw()
         if 'fly' in kwargs:
             self.mapWindow.fly['exag'] = kwargs['fly']['exag']
-    
+
     def LoadSettings(self):
         """Load Nviz settings and apply to current session"""
-        view = copy.deepcopy(UserSettings.Get(group = 'nviz', key = 'view')) # copy
-        light = copy.deepcopy(UserSettings.Get(group = 'nviz', key = 'light')) # copy
-        fly = copy.deepcopy(UserSettings.Get(group = 'nviz', key = 'fly')) # copy
-        self.UpdateState(view = view, light = light, fly = fly)
-        self.PostViewEvent(zExag = True)
+        view = copy.deepcopy(
+            UserSettings.Get(
+                group='nviz',
+                key='view'))  # copy
+        light = copy.deepcopy(
+            UserSettings.Get(
+                group='nviz',
+                key='light'))  # copy
+        fly = copy.deepcopy(UserSettings.Get(group='nviz', key='fly'))  # copy
+        self.UpdateState(view=view, light=light, fly=fly)
+        self.PostViewEvent(zExag=True)
         self.PostLightEvent()
         self.UpdatePage('view')
         self.UpdatePage('light')
-        
+
         self.mapWindow.ReloadLayersData()
         self.UpdatePage('surface')
         self.UpdatePage('vector')
         self.UpdateSettings()
-               
+
     def OnPageChanged(self, event):
         new = event.GetSelection()
         # self.ChangeSelection(new)
-        
-    def PostViewEvent(self, zExag = False):
+
+    def PostViewEvent(self, zExag=False):
         """Change view settings"""
-        event = wxUpdateView(zExag = zExag)
+        event = wxUpdateView(zExag=zExag)
         wx.PostEvent(self.mapWindow, event)
-        
-    def PostLightEvent(self, refresh = False): 
-        """Change light settings""" 
-        event = wxUpdateLight(refresh = refresh)
+
+    def PostLightEvent(self, refresh=False):
+        """Change light settings"""
+        event = wxUpdateLight(refresh=refresh)
         wx.PostEvent(self.mapWindow, event)
-        
+
     def OnSize(self, event):
         """After window is resized, update scrolling"""
         # workaround to resize captionbars of foldpanelbar
-        wx.CallAfter(self.UpdateScrolling, (self.foldpanelData, self.foldpanelAppear,
-                                            self.foldpanelAnalysis)) 
+        wx.CallAfter(
+            self.UpdateScrolling,
+            (self.foldpanelData,
+             self.foldpanelAppear,
+             self.foldpanelAnalysis))
         event.Skip()
-           
+
     def OnPressCaption(self, event):
         """When foldpanel item collapsed/expanded, update scrollbars"""
         foldpanel = event.GetBar().GetGrandParent().GetParent()
         wx.CallAfter(self.UpdateScrolling, (foldpanel,))
         event.Skip()
-        
+
     def UpdateScrolling(self, foldpanels):
         """Update scrollbars in foldpanel"""
         for foldpanel in foldpanels:
-            length = foldpanel.GetPanelsLength(collapsed = 0, expanded = 0)
+            length = foldpanel.GetPanelsLength(collapsed=0, expanded=0)
             # virtual width is set to fixed value to suppress GTK warning
             foldpanel.GetParent().SetVirtualSize((100, length[2]))
             foldpanel.GetParent().Layout()
-        
+
     def _createViewPage(self):
         """Create view settings page"""
-        panel = SP.ScrolledPanel(parent = self, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False)
-        self.page['view'] = { 'id' : 0,
-                              'notebook' : self.GetId()}
-        
+        panel = SP.ScrolledPanel(parent=self, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False)
+        self.page['view'] = {'id': 0,
+                             'notebook': self.GetId()}
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Control View")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Control View")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 10)
-        
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=10)
+
         self.win['view'] = {}
-        
+
         # position
-        posSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
-        self._createCompass(panel = panel, sizer = posSizer, type = 'view')
-        
-        view = ViewPositionWindow(panel, size = (175, 175),
-                                  mapwindow = self.mapWindow)
+        posSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
+        self._createCompass(panel=panel, sizer=posSizer, type='view')
+
+        view = ViewPositionWindow(panel, size=(175, 175),
+                                  mapwindow=self.mapWindow)
         self.win['view']['position'] = view.GetId()
-        posSizer.Add(item = view,
-                     pos = (1, 1), flag = wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = posSizer, pos = (0, 0))
-                  
+        posSizer.Add(
+            item=view, pos=(1, 1),
+            flag=wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=posSizer, pos=(0, 0))
+
         # perspective
         # set initial defaults here (or perhaps in a default values file), not in user settings
-        #todo: consider setting an absolute max at 360 instead of undefined. (leave the default max value at pi)
-        tooltip = _("Adjusts the distance and angular perspective of the image viewpoint")
-        self._createControl(panel, data = self.win['view'], name = 'persp',
-                            tooltip = tooltip, range = (1, 120),
-                            bind = (self.OnViewChange, self.OnViewChanged, self.OnViewChangedText))
-        
-        gridSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Perspective:")),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER)
-        gridSizer.Add(item = self.FindWindowById(self.win['view']['persp']['slider']), pos = (2, 0),
-                      flag = wx.ALIGN_CENTER)
-        gridSizer.Add(item = self.FindWindowById(self.win['view']['persp']['text']), pos = (3, 0),
-                      flag = wx.ALIGN_CENTER)        
-        
+        # todo: consider setting an absolute max at 360 instead of undefined.
+        # (leave the default max value at pi)
+        tooltip = _(
+            "Adjusts the distance and angular perspective of the image viewpoint")
+        self._createControl(
+            panel,
+            data=self.win['view'],
+            name='persp',
+            tooltip=tooltip,
+            range=(
+                1,
+                120),
+            bind=(
+                self.OnViewChange,
+                self.OnViewChanged,
+                self.OnViewChangedText))
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Perspective:")), pos=(
+                1, 0), flag=wx.ALIGN_CENTER)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['persp']['slider']), pos=(
+                2, 0), flag=wx.ALIGN_CENTER)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['persp']['text']), pos=(
+                3, 0), flag=wx.ALIGN_CENTER)
+
         # twist
         tooltip = _("Tilts the plane of the surface from the horizontal")
-        self._createControl(panel, data = self.win['view'], name = 'twist',
-                            tooltip = tooltip, range = (-180,180),
-                            bind = (self.OnViewChange, self.OnViewChanged, self.OnViewChangedText))
-        gridSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Tilt:")),
-                      pos = (1, 1), flag = wx.ALIGN_CENTER)
-        gridSizer.Add(item = self.FindWindowById(self.win['view']['twist']['slider']), pos = (2, 1))
-        gridSizer.Add(item = self.FindWindowById(self.win['view']['twist']['text']), pos = (3, 1),
-                      flag = wx.ALIGN_CENTER)        
-        
+        self._createControl(panel,
+                            data=self.win['view'],
+                            name='twist',
+                            tooltip=tooltip,
+                            range=(-180,
+                                   180),
+                            bind=(self.OnViewChange,
+                                  self.OnViewChanged,
+                                  self.OnViewChangedText))
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Tilt:")), pos=(
+                1, 1), flag=wx.ALIGN_CENTER)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['twist']['slider']), pos=(
+                2, 1))
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['twist']['text']), pos=(
+                3, 1), flag=wx.ALIGN_CENTER)
+
         # height + z-exag
-        tooltip = _("Adjusts the viewing height above the surface"
-                    " (angle of view automatically adjusts to maintain the same center of view)")
-        self._createControl(panel, data = self.win['view'], name = 'height', sliderHor = False,
-                            tooltip = tooltip, range = (0, 1),
-                            bind = (self.OnViewChange, self.OnViewChanged, self.OnViewChangedText))
-        tooltip = _("Adjusts the relative height of features above the plane of the surface")
-        self._createControl(panel, data = self.win['view'], name = 'z-exag', sliderHor = False,
-                            tooltip = tooltip, range = (0, 10), floatSlider = True,
-                            bind = (self.OnViewChange, self.OnViewChanged, self.OnViewChangedText))
+        tooltip = _(
+            "Adjusts the viewing height above the surface"
+            " (angle of view automatically adjusts to maintain the same center of view)")
+        self._createControl(
+            panel,
+            data=self.win['view'],
+            name='height',
+            sliderHor=False,
+            tooltip=tooltip,
+            range=(
+                0,
+                1),
+            bind=(
+                self.OnViewChange,
+                self.OnViewChanged,
+                self.OnViewChangedText))
+        tooltip = _(
+            "Adjusts the relative height of features above the plane of the surface")
+        self._createControl(
+            panel,
+            data=self.win['view'],
+            name='z-exag',
+            sliderHor=False,
+            tooltip=tooltip,
+            range=(
+                0,
+                10),
+            floatSlider=True,
+            bind=(
+                self.OnViewChange,
+                self.OnViewChanged,
+                self.OnViewChangedText))
         self.FindWindowById(self.win['view']['z-exag']['slider']).SetValue(1)
         self.FindWindowById(self.win['view']['z-exag']['text']).SetValue(1)
-        
-        heightSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        heightSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Height:")),
-                      pos = (0, 0), flag = wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL, span = (1, 2))
-        heightSizer.Add(item = self.FindWindowById(self.win['view']['height']['slider']),
-                        flag = wx.ALIGN_RIGHT, pos = (1, 0))
-        heightSizer.Add(item = self.FindWindowById(self.win['view']['height']['text']),
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT, pos = (1, 1))
-        heightSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Z-exag:")),
-                      pos = (0, 2), flag = wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL, span = (1, 2))
-        heightSizer.Add(item = self.FindWindowById(self.win['view']['z-exag']['slider']),
-                        flag = wx.ALIGN_RIGHT, pos = (1, 2))
-        heightSizer.Add(item = self.FindWindowById(self.win['view']['z-exag']['text']),
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.TOP |
-                        wx.BOTTOM | wx.RIGHT, pos = (1, 3))
-        
-        gridSizer.Add(item = heightSizer, pos = (0, 1), flag = wx.ALIGN_CENTER)
-        
+
+        heightSizer = wx.GridBagSizer(vgap=3, hgap=3)
+        heightSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Height:")), pos=(
+                0, 0), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL, span=(
+                1, 2))
+        heightSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['height']['slider']),
+            flag=wx.ALIGN_RIGHT,
+            pos=(
+                1,
+                0))
+        heightSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['height']['text']),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+            pos=(
+                1,
+                1))
+        heightSizer.Add(
+            item=wx.StaticText(
+                panel,
+                id=wx.ID_ANY,
+                label=_("Z-exag:")),
+            pos=(
+                0,
+                2),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL,
+            span=(
+                1,
+                2))
+        heightSizer.Add(
+            item=self.FindWindowById(
+                self.win['view']['z-exag']['slider']),
+            flag=wx.ALIGN_RIGHT,
+            pos=(
+                1,
+                2))
+        heightSizer.Add(item=self.FindWindowById(
+            self.win['view']['z-exag']['text']),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.TOP |
+            wx.BOTTOM | wx.RIGHT, pos=(1, 3))
+
+        gridSizer.Add(item=heightSizer, pos=(0, 1), flag=wx.ALIGN_CENTER)
+
         # view setup + reset
         viewSizer = wx.BoxSizer(wx.HORIZONTAL)
-        viewSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY,
-                                           label = _("Look:")),
-                      flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL,
-                      border = 5)
-        here = wx.ToggleButton(panel, id = wx.ID_ANY, label = _("here"))
+        viewSizer.Add(item=wx.StaticText(panel, id=wx.ID_ANY,
+                                         label=_("Look:")),
+                      flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL,
+                      border=5)
+        here = wx.ToggleButton(panel, id=wx.ID_ANY, label=_("here"))
         here.Bind(wx.EVT_TOGGLEBUTTON, self.OnLookAt)
         here.SetName('here')
         here.SetToolTipString(_("Allows you to select a point on the surface "
                                 "that becomes the new center of view. "
                                 "Click on the button and then on the surface."))
-        viewSizer.Add(item = here, flag = wx.TOP|wx.BOTTOM|wx.LEFT|wx.ALIGN_CENTER_VERTICAL,
-                      border = 5)
-                    
-        center = wx.Button(panel, id = wx.ID_ANY, label = _("center"))
+        viewSizer.Add(item=here, flag=wx.TOP | wx.BOTTOM |
+                      wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border=5)
+
+        center = wx.Button(panel, id=wx.ID_ANY, label=_("center"))
         center.Bind(wx.EVT_BUTTON, self.OnLookAt)
         center.SetName('center')
-        center.SetToolTipString(_("Resets the view to the original default center of view"))
-        viewSizer.Add(item = center, flag = wx.TOP|wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL,
-                      border = 5)
-                    
-        top = wx.Button(panel, id = wx.ID_ANY, label = _("top"))
+        center.SetToolTipString(
+            _("Resets the view to the original default center of view"))
+        viewSizer.Add(item=center, flag=wx.TOP | wx.BOTTOM |
+                      wx.ALIGN_CENTER_VERTICAL, border=5)
+
+        top = wx.Button(panel, id=wx.ID_ANY, label=_("top"))
         top.Bind(wx.EVT_BUTTON, self.OnLookAt)
         top.SetName('top')
-        top.SetToolTipString(_("Sets the viewer directly over the scene's center position. This top view orients approximately north south."))
-        viewSizer.Add(item = top, flag = wx.TOP|wx.BOTTOM | wx.ALIGN_CENTER_VERTICAL,
-                      border = 5)
-                    
-        reset = wx.Button(panel, id = wx.ID_ANY, label = _("reset"))
+        top.SetToolTipString(
+            _("Sets the viewer directly over the scene's center position. This top view orients approximately north south."))
+        viewSizer.Add(item=top, flag=wx.TOP | wx.BOTTOM |
+                      wx.ALIGN_CENTER_VERTICAL, border=5)
+
+        reset = wx.Button(panel, id=wx.ID_ANY, label=_("reset"))
         reset.SetToolTipString(_("Reset to default view"))
         reset.Bind(wx.EVT_BUTTON, self.OnResetView)
-        viewSizer.Add(item = reset, proportion = 0,
-                      flag = wx.TOP|wx.BOTTOM|wx.RIGHT| wx.ALIGN_RIGHT,
-                      border = 5)
-        
-        gridSizer.Add(item = viewSizer, pos = (4, 0), span = (1, 3),
-                      flag = wx.EXPAND)
-        
+        viewSizer.Add(item=reset, proportion=0,
+                      flag=wx.TOP | wx.BOTTOM | wx.RIGHT | wx.ALIGN_RIGHT,
+                      border=5)
+
+        gridSizer.Add(item=viewSizer, pos=(4, 0), span=(1, 3),
+                      flag=wx.EXPAND)
+
         # body
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 2)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 3)
-        
-        box = wx.StaticBox(parent = panel, id = wx.ID_ANY,
-                           label = " %s " % (_("Image Appearance")))
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=2)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=3)
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Image Appearance")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # background color
         self.win['view']['background'] = {}
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Background color:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = UserSettings.Get(group = 'nviz', key = 'view',
-                                                            subkey = ['background', 'color']),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Background color:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        color = csel.ColourSelect(
+            panel,
+            id=wx.ID_ANY,
+            colour=UserSettings.Get(
+                group='nviz',
+                key='view',
+                subkey=[
+                    'background',
+                    'color']),
+            size=globalvar.DIALOG_COLOR_SIZE)
         self.win['view']['background']['color'] = color.GetId()
         color.Bind(csel.EVT_COLOURSELECT, self.OnBgColor)
-        gridSizer.Add(item = color, pos = (0, 1))
+        gridSizer.Add(item=color, pos=(0, 1))
         gridSizer.AddGrowableCol(0)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT,
-                      border = 3)
-        
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
+                      border=3)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
-        
+
     def _createAnimationPage(self):
         """Create view settings page"""
-        panel = SP.ScrolledPanel(parent = self, id = wx.ID_ANY)
-        panel.SetupScrolling(scroll_x = False)
-        self.page['animation'] = { 'id' : 0,
-                                   'notebook' : self.GetId()}
-        
+        panel = SP.ScrolledPanel(parent=self, id=wx.ID_ANY)
+        panel.SetupScrolling(scroll_x=False)
+        self.page['animation'] = {'id': 0,
+                                  'notebook': self.GetId()}
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Animation")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Animation")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
+
         self.win['anim'] = {}
         # animation help text
-        help = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                             label = _("Press 'Record' button and start changing the view. "
-                                       "It is recommended to use fly-through mode "
-                                       "(Map Display toolbar) to achieve smooth motion."))
+        help = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, label=_(
+                "Press 'Record' button and start changing the view. "
+                "It is recommended to use fly-through mode "
+                "(Map Display toolbar) to achieve smooth motion."))
         self.win['anim']['help'] = help.GetId()
-        hSizer.Add(item = help, proportion = 0)
-        boxSizer.Add(item = hSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 5)
-                     
+        hSizer.Add(item=help, proportion=0)
+        boxSizer.Add(item=hSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+
         # animation controls
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        record = SymbolButton(parent = panel, id = wx.ID_ANY,
-                              usage = "record", label = _("Record"))
-        play = SymbolButton(parent = panel, id = wx.ID_ANY,
-                            usage = "play", label = _("Play"))
-        pause = SymbolButton(parent = panel, id = wx.ID_ANY,
-                             usage = "pause", label = _("Pause"))
-        stop = SymbolButton(parent = panel, id = wx.ID_ANY,
-                            usage = "stop", label = _("Stop"))
-        
+        record = SymbolButton(parent=panel, id=wx.ID_ANY,
+                              usage="record", label=_("Record"))
+        play = SymbolButton(parent=panel, id=wx.ID_ANY,
+                            usage="play", label=_("Play"))
+        pause = SymbolButton(parent=panel, id=wx.ID_ANY,
+                             usage="pause", label=_("Pause"))
+        stop = SymbolButton(parent=panel, id=wx.ID_ANY,
+                            usage="stop", label=_("Stop"))
+
         self.win['anim']['record'] = record.GetId()
         self.win['anim']['play'] = play.GetId()
         self.win['anim']['pause'] = pause.GetId()
         self.win['anim']['stop'] = stop.GetId()
-                            
-        self._createControl(panel, data = self.win['anim'], name = 'frameIndex',
-                            range = (0, 1), floatSlider = False,
-                            bind = (self.OnFrameIndex, None, self.OnFrameIndexText))
-        frameSlider = self.FindWindowById(self.win['anim']['frameIndex']['slider'])
+
+        self._createControl(
+            panel, data=self.win['anim'], name='frameIndex', range=(
+                0, 1), floatSlider=False, bind=(
+                self.OnFrameIndex, None, self.OnFrameIndexText))
+        frameSlider = self.FindWindowById(
+            self.win['anim']['frameIndex']['slider'])
         frameText = self.FindWindowById(self.win['anim']['frameIndex']['text'])
-        infoLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Total number of frames :"))
-        info = wx.StaticText(parent = panel, id = wx.ID_ANY)
+        infoLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Total number of frames :"))
+        info = wx.StaticText(parent=panel, id=wx.ID_ANY)
         self.win['anim']['info'] = info.GetId()
-        
-        fpsLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Frame rate (FPS):"))
-        fps = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = UserSettings.Get(group = 'nviz', key = 'animation', subkey = 'fps'),
-                           min = 1,
-                           max = 50)
+
+        fpsLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Frame rate (FPS):"))
+        fps = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(65, -1),
+            initial=UserSettings.Get(
+                group='nviz', key='animation', subkey='fps'),
+            min=1, max=50)
         self.win['anim']['fps'] = fps.GetId()
-        fps.SetToolTipString(_("Frames are recorded with given frequency (FPS). "))
-                            
+        fps.SetToolTipString(
+            _("Frames are recorded with given frequency (FPS). "))
+
         record.Bind(wx.EVT_BUTTON, self.OnRecord)
         play.Bind(wx.EVT_BUTTON, self.OnPlay)
         stop.Bind(wx.EVT_BUTTON, self.OnStop)
         pause.Bind(wx.EVT_BUTTON, self.OnPause)
         fps.Bind(wx.EVT_SPINCTRL, self.OnFPS)
-        
-        hSizer.Add(item = record, proportion = 0)
-        hSizer.Add(item = play, proportion = 0)
-        hSizer.Add(item = pause, proportion = 0)
-        hSizer.Add(item = stop, proportion = 0)
-        boxSizer.Add(item = hSizer, proportion = 0,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        
+
+        hSizer.Add(item=record, proportion=0)
+        hSizer.Add(item=play, proportion=0)
+        hSizer.Add(item=pause, proportion=0)
+        hSizer.Add(item=stop, proportion=0)
+        boxSizer.Add(item=hSizer, proportion=0,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+
         sliderBox = wx.BoxSizer(wx.HORIZONTAL)
-        sliderBox.Add(item = frameSlider, proportion = 1, border = 5, flag = wx.EXPAND | wx.RIGHT)
-        sliderBox.Add(item = frameText, proportion = 0, border = 5, flag = wx.EXPAND| wx.RIGHT | wx.LEFT)
-        boxSizer.Add(item = sliderBox, proportion = 0, flag = wx.EXPAND)
-        
+        sliderBox.Add(
+            item=frameSlider,
+            proportion=1,
+            border=5,
+            flag=wx.EXPAND | wx.RIGHT)
+        sliderBox.Add(
+            item=frameText,
+            proportion=0,
+            border=5,
+            flag=wx.EXPAND | wx.RIGHT | wx.LEFT)
+        boxSizer.Add(item=sliderBox, proportion=0, flag=wx.EXPAND)
+
         # total number of frames
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        hSizer.Add(item = infoLabel, proportion = 0, flag = wx.RIGHT, border = 5)
-        hSizer.Add(item = info, proportion = 0, flag = wx.LEFT, border = 5)
-        
-        boxSizer.Add(item = hSizer, proportion = 0,
-                     flag = wx.ALL | wx.EXPAND, border = 5)
-                     
+        hSizer.Add(item=infoLabel, proportion=0, flag=wx.RIGHT, border=5)
+        hSizer.Add(item=info, proportion=0, flag=wx.LEFT, border=5)
+
+        boxSizer.Add(item=hSizer, proportion=0,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+
         # frames per second
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        hSizer.Add(item = fpsLabel, proportion = 0, flag = wx.RIGHT | wx.ALIGN_CENTER_VERTICAL, border = 5)
-        hSizer.Add(item = fps, proportion = 0, flag = wx.LEFT | wx.ALIGN_CENTER_VERTICAL, border = 5)
-        
-        boxSizer.Add(item = hSizer, proportion = 0,
-                     flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-                      
+        hSizer.Add(
+            item=fpsLabel,
+            proportion=0,
+            flag=wx.RIGHT | wx.ALIGN_CENTER_VERTICAL,
+            border=5)
+        hSizer.Add(item=fps, proportion=0, flag=wx.LEFT |
+                   wx.ALIGN_CENTER_VERTICAL, border=5)
+
+        boxSizer.Add(item=hSizer, proportion=0,
+                     flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         # save animation
         self.win['anim']['save'] = {}
         self.win['anim']['save']['image'] = {}
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Save image sequence")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Save image sequence")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         vSizer = wx.BoxSizer(wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 10)
-        
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=10)
+
         pwd = os.getcwd()
-        dir = filebrowse.DirBrowseButton(parent = panel, id = wx.ID_ANY,
-                                         labelText = _("Choose a directory:"),
-                                         dialogTitle = _("Choose a directory for images"),
-                                         buttonText = _('Browse'),
-                                         startDirectory = pwd)
+        dir = filebrowse.DirBrowseButton(
+            parent=panel,
+            id=wx.ID_ANY,
+            labelText=_("Choose a directory:"),
+            dialogTitle=_("Choose a directory for images"),
+            buttonText=_('Browse'),
+            startDirectory=pwd)
         dir.SetValue(pwd)
-        prefixLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("File prefix:"))
-        prefixCtrl = wx.TextCtrl(parent = panel, id = wx.ID_ANY, size = (100, -1),
-                                 value = UserSettings.Get(group = 'nviz',
-                                                          key = 'animation', subkey = 'prefix'))
-        prefixCtrl.SetToolTipString(_("Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."))
-        fileTypeLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("File format:"))
-        fileTypeCtrl = wx.Choice(parent = panel, id = wx.ID_ANY, choices = ["TIF", "PPM"])
-        
-        save = wx.Button(parent = panel, id = wx.ID_ANY,
-                         label = "Save")
-                         
+        prefixLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("File prefix:"))
+        prefixCtrl = wx.TextCtrl(
+            parent=panel, id=wx.ID_ANY, size=(100, -1),
+            value=UserSettings.Get(
+                group='nviz', key='animation', subkey='prefix'))
+        prefixCtrl.SetToolTipString(
+            _("Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."))
+        fileTypeLabel = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, label=_("File format:"))
+        fileTypeCtrl = wx.Choice(
+            parent=panel, id=wx.ID_ANY, choices=[
+                "TIF", "PPM"])
+
+        save = wx.Button(parent=panel, id=wx.ID_ANY,
+                         label="Save")
+
         self.win['anim']['save']['image']['dir'] = dir.GetId()
         self.win['anim']['save']['image']['prefix'] = prefixCtrl.GetId()
         self.win['anim']['save']['image']['format'] = fileTypeCtrl.GetId()
         self.win['anim']['save']['image']['confirm'] = save.GetId()
-        
-        boxSizer.Add(item = dir, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 3)
-        
-        gridSizer.Add(item = prefixLabel, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        gridSizer.Add(item = prefixCtrl, pos = (0, 1), flag = wx.EXPAND )
-        gridSizer.Add(item = fileTypeLabel, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        gridSizer.Add(item = fileTypeCtrl, pos = (1, 1), flag = wx.EXPAND )
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 5)
-        boxSizer.Add(item = save, proportion = 0, flag = wx.ALL | wx.ALIGN_RIGHT, border = 5)
-        
+
+        boxSizer.Add(item=dir, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
+        gridSizer.Add(
+            item=prefixLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(item=prefixCtrl, pos=(0, 1), flag=wx.EXPAND)
+        gridSizer.Add(
+            item=fileTypeLabel, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer.Add(item=fileTypeCtrl, pos=(1, 1), flag=wx.EXPAND)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=5)
+        boxSizer.Add(
+            item=save,
+            proportion=0,
+            flag=wx.ALL | wx.ALIGN_RIGHT,
+            border=5)
+
         save.Bind(wx.EVT_BUTTON, self.OnSaveAnimation)
-        
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 
-                      border = 3)
-        
+
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         panel.SetSizer(pageSizer)
-        
+
         return panel
-        
+
     def _createDataPage(self):
         """Create data (surface, vector, volume) settings page"""
 
-        self.mainPanelData = ScrolledPanel(parent = self)
-        self.mainPanelData.SetupScrolling(scroll_x = False)
-        try:# wxpython <= 2.8.10
-            self.foldpanelData = fpb.FoldPanelBar(parent = self.mainPanelData, id = wx.ID_ANY,
-                                                  style = fpb.FPB_DEFAULT_STYLE,
-                                                  extraStyle = fpb.FPB_SINGLE_FOLD)
+        self.mainPanelData = ScrolledPanel(parent=self)
+        self.mainPanelData.SetupScrolling(scroll_x=False)
+        try:  # wxpython <= 2.8.10
+            self.foldpanelData = fpb.FoldPanelBar(
+                parent=self.mainPanelData, id=wx.ID_ANY,
+                style=fpb.FPB_DEFAULT_STYLE, extraStyle=fpb.FPB_SINGLE_FOLD)
         except:
-            try:# wxpython >= 2.8.11
-                self.foldpanelData = fpb.FoldPanelBar(parent = self.mainPanelData, id = wx.ID_ANY,                               
-                                                      agwStyle = fpb.FPB_SINGLE_FOLD)
-            except: # to be sure
-                self.foldpanelData = fpb.FoldPanelBar(parent = self.mainPanelData, id = wx.ID_ANY,                               
-                                                      style = fpb.FPB_SINGLE_FOLD)
-            
-                     
-        self.foldpanelData.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)
+            try:  # wxpython >= 2.8.11
+                self.foldpanelData = fpb.FoldPanelBar(
+                    parent=self.mainPanelData, id=wx.ID_ANY,
+                    agwStyle=fpb.FPB_SINGLE_FOLD)
+            except:  # to be sure
+                self.foldpanelData = fpb.FoldPanelBar(
+                    parent=self.mainPanelData, id=wx.ID_ANY,
+                    style=fpb.FPB_SINGLE_FOLD)
 
+        self.foldpanelData.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)
 
-        
         # # surface page
-        surfacePanel = self.foldpanelData.AddFoldPanel(_("Surface"), collapsed = False)
-        self.foldpanelData.AddFoldPanelWindow(surfacePanel, 
-            window = self._createSurfacePage(parent = surfacePanel), flags = fpb.FPB_ALIGN_WIDTH)
-        self.EnablePage("surface", enabled = False)
-        
+        surfacePanel = self.foldpanelData.AddFoldPanel(
+            _("Surface"), collapsed=False)
+        self.foldpanelData.AddFoldPanelWindow(
+            surfacePanel, window=self._createSurfacePage(
+                parent=surfacePanel), flags=fpb.FPB_ALIGN_WIDTH)
+        self.EnablePage("surface", enabled=False)
+
         # constant page
-        constantPanel = self.foldpanelData.AddFoldPanel(_("Constant surface"), collapsed = True)
-        self.foldpanelData.AddFoldPanelWindow(constantPanel,
-            window = self._createConstantPage(parent = constantPanel), flags = fpb.FPB_ALIGN_WIDTH)
-        self.EnablePage("constant", enabled = False)
+        constantPanel = self.foldpanelData.AddFoldPanel(
+            _("Constant surface"), collapsed=True)
+        self.foldpanelData.AddFoldPanelWindow(
+            constantPanel, window=self._createConstantPage(
+                parent=constantPanel), flags=fpb.FPB_ALIGN_WIDTH)
+        self.EnablePage("constant", enabled=False)
         # vector page
-        vectorPanel = self.foldpanelData.AddFoldPanel(_("Vector"), collapsed = True)
-        self.foldpanelData.AddFoldPanelWindow(vectorPanel, 
-            window = self._createVectorPage(parent = vectorPanel), flags = fpb.FPB_ALIGN_WIDTH)
-        self.EnablePage("vector", enabled = False)
-        
+        vectorPanel = self.foldpanelData.AddFoldPanel(
+            _("Vector"), collapsed=True)
+        self.foldpanelData.AddFoldPanelWindow(
+            vectorPanel, window=self._createVectorPage(
+                parent=vectorPanel), flags=fpb.FPB_ALIGN_WIDTH)
+        self.EnablePage("vector", enabled=False)
+
         # volume page
-        volumePanel = self.foldpanelData.AddFoldPanel(_("3D raster"), collapsed=True)
-        self.foldpanelData.AddFoldPanelWindow(volumePanel,
-            window = self._createVolumePage(parent = volumePanel), flags = fpb.FPB_ALIGN_WIDTH)
-        self.EnablePage("volume", enabled = False)
-        
-##        self.foldpanelData.ApplyCaptionStyleAll(style)
-        
+        volumePanel = self.foldpanelData.AddFoldPanel(
+            _("3D raster"), collapsed=True)
+        self.foldpanelData.AddFoldPanelWindow(
+            volumePanel, window=self._createVolumePage(
+                parent=volumePanel), flags=fpb.FPB_ALIGN_WIDTH)
+        self.EnablePage("volume", enabled=False)
+
+# self.foldpanelData.ApplyCaptionStyleAll(style)
+
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.foldpanelData, proportion = 1, flag = wx.EXPAND)
+        sizer.Add(self.foldpanelData, proportion=1, flag=wx.EXPAND)
         self.mainPanelData.SetSizer(sizer)
         self.mainPanelData.Layout()
         self.mainPanelData.Fit()
-        
+
         return self.mainPanelData
-        
-        
+
     def _createAppearancePage(self):
         """Create data (surface, vector, volume) settings page"""
-        self.mainPanelAppear = ScrolledPanel(parent = self)
-        self.mainPanelAppear.SetupScrolling(scroll_x = False)
-        
-        try:# wxpython <= 2.8.10
-            self.foldpanelAppear = fpb.FoldPanelBar(parent = self.mainPanelAppear, id = wx.ID_ANY,
-                                                  style = fpb.FPB_DEFAULT_STYLE,
-                                                  extraStyle = fpb.FPB_SINGLE_FOLD)
+        self.mainPanelAppear = ScrolledPanel(parent=self)
+        self.mainPanelAppear.SetupScrolling(scroll_x=False)
+
+        try:  # wxpython <= 2.8.10
+            self.foldpanelAppear = fpb.FoldPanelBar(
+                parent=self.mainPanelAppear, id=wx.ID_ANY,
+                style=fpb.FPB_DEFAULT_STYLE, extraStyle=fpb.FPB_SINGLE_FOLD)
         except:
-            try:# wxpython >= 2.8.11
-                self.foldpanelAppear = fpb.FoldPanelBar(parent = self.mainPanelAppear, id = wx.ID_ANY,                               
-                                                      agwStyle = fpb.FPB_SINGLE_FOLD)
-            except: # to be sure
-                self.foldpanelAppear = fpb.FoldPanelBar(parent = self.mainPanelAppear, id = wx.ID_ANY,                               
-                                                      style = fpb.FPB_SINGLE_FOLD)
-            
+            try:  # wxpython >= 2.8.11
+                self.foldpanelAppear = fpb.FoldPanelBar(
+                    parent=self.mainPanelAppear, id=wx.ID_ANY,
+                    agwStyle=fpb.FPB_SINGLE_FOLD)
+            except:  # to be sure
+                self.foldpanelAppear = fpb.FoldPanelBar(
+                    parent=self.mainPanelAppear, id=wx.ID_ANY,
+                    style=fpb.FPB_SINGLE_FOLD)
+
         self.foldpanelAppear.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)
         # light page
-        lightPanel = self.foldpanelAppear.AddFoldPanel(_("Lighting"), collapsed = False)
-        self.foldpanelAppear.AddFoldPanelWindow(lightPanel, 
-            window = self._createLightPage(parent = lightPanel), flags = fpb.FPB_ALIGN_WIDTH)
-    
+        lightPanel = self.foldpanelAppear.AddFoldPanel(
+            _("Lighting"), collapsed=False)
+        self.foldpanelAppear.AddFoldPanelWindow(
+            lightPanel, window=self._createLightPage(
+                parent=lightPanel), flags=fpb.FPB_ALIGN_WIDTH)
+
         # fringe page
-        fringePanel = self.foldpanelAppear.AddFoldPanel(_("Fringe"), collapsed = True)
-        self.foldpanelAppear.AddFoldPanelWindow(fringePanel, 
-            window = self._createFringePage(parent = fringePanel), flags = fpb.FPB_ALIGN_WIDTH)
-        
+        fringePanel = self.foldpanelAppear.AddFoldPanel(
+            _("Fringe"), collapsed=True)
+        self.foldpanelAppear.AddFoldPanelWindow(
+            fringePanel, window=self._createFringePage(
+                parent=fringePanel), flags=fpb.FPB_ALIGN_WIDTH)
+
         self.EnablePage('fringe', False)
-        
+
         # decoration page
-        decorationPanel = self.foldpanelAppear.AddFoldPanel(_("Decorations"), collapsed = True)
-        self.foldpanelAppear.AddFoldPanelWindow(decorationPanel, 
-            window = self._createDecorationPage(parent = decorationPanel), flags = fpb.FPB_ALIGN_WIDTH)
-        
-        
+        decorationPanel = self.foldpanelAppear.AddFoldPanel(
+            _("Decorations"), collapsed=True)
+        self.foldpanelAppear.AddFoldPanelWindow(
+            decorationPanel, window=self._createDecorationPage(
+                parent=decorationPanel), flags=fpb.FPB_ALIGN_WIDTH)
+
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.foldpanelAppear, proportion = 1, flag = wx.EXPAND)
+        sizer.Add(self.foldpanelAppear, proportion=1, flag=wx.EXPAND)
         self.mainPanelAppear.SetSizer(sizer)
         self.mainPanelAppear.Layout()
         self.mainPanelAppear.Fit()
         return self.mainPanelAppear
-    
+
     def _createAnalysisPage(self):
         """Create data analysis (cutting planes, ...) page"""
-        self.mainPanelAnalysis = ScrolledPanel(parent = self)
-        self.mainPanelAnalysis.SetupScrolling(scroll_x = False)
-        self.foldpanelAnalysis = fpb.FoldPanelBar(parent = self.mainPanelAnalysis, id = wx.ID_ANY,
-                                                  style = fpb.FPB_SINGLE_FOLD)
+        self.mainPanelAnalysis = ScrolledPanel(parent=self)
+        self.mainPanelAnalysis.SetupScrolling(scroll_x=False)
+        self.foldpanelAnalysis = fpb.FoldPanelBar(
+            parent=self.mainPanelAnalysis, id=wx.ID_ANY,
+            style=fpb.FPB_SINGLE_FOLD)
         self.foldpanelAnalysis.Bind(fpb.EVT_CAPTIONBAR, self.OnPressCaption)
         # cutting planes page
-        cplanePanel = self.foldpanelAnalysis.AddFoldPanel(_("Cutting planes"), collapsed = False)
-        self.foldpanelAnalysis.AddFoldPanelWindow(cplanePanel, 
-            window = self._createCPlanePage(parent = cplanePanel), flags = fpb.FPB_ALIGN_WIDTH)
-        
+        cplanePanel = self.foldpanelAnalysis.AddFoldPanel(
+            _("Cutting planes"), collapsed=False)
+        self.foldpanelAnalysis.AddFoldPanelWindow(
+            cplanePanel, window=self._createCPlanePage(
+                parent=cplanePanel), flags=fpb.FPB_ALIGN_WIDTH)
+
         sizer = wx.BoxSizer(wx.VERTICAL)
-        sizer.Add(self.foldpanelAnalysis, proportion = 1, flag = wx.EXPAND)
+        sizer.Add(self.foldpanelAnalysis, proportion=1, flag=wx.EXPAND)
         self.mainPanelAnalysis.SetSizer(sizer)
         self.mainPanelAnalysis.Layout()
         self.mainPanelAnalysis.Fit()
         return self.mainPanelAnalysis
-        
+
     def _createSurfacePage(self, parent):
         """Create view settings page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        self.page['surface'] = { 'id' : 0,
-                                 'notebook' : self.foldpanelData.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+        self.page['surface'] = {'id': 0,
+                                'notebook': self.foldpanelData.GetId()}
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         self.win['surface'] = {}
-        
+
         # selection
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Raster map")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Raster map")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        rmaps = Select(parent = panel, type = 'raster',
-                       onPopup = self.GselectOnPopup)
+        rmaps = Select(parent=panel, type='raster',
+                       onPopup=self.GselectOnPopup)
         rmaps.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnSetRaster)
         self.win['surface']['map'] = rmaps.GetId()
-        desc = wx.StaticText(parent = panel, id = wx.ID_ANY)
+        desc = wx.StaticText(parent=panel, id=wx.ID_ANY)
         self.win['surface']['desc'] = desc.GetId()
-        boxSizer.Add(item = rmaps, proportion = 0,
-                     flag = wx.ALL,
-                     border = 3)
-        boxSizer.Add(item = desc, proportion = 0,
-                     flag = wx.ALL,
-                     border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+        boxSizer.Add(item=rmaps, proportion=0,
+                     flag=wx.ALL,
+                     border=3)
+        boxSizer.Add(item=desc, proportion=0,
+                     flag=wx.ALL,
+                     border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         #
         # draw
         #
         self.win['surface']['draw'] = {}
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Draw")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Draw")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # mode
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Mode:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        mode = wx.Choice (parent = panel, id = wx.ID_ANY, size = (-1, -1),
-                          choices = [_("coarse"),
-                                     _("fine"),
-                                     _("both")])
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Mode:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        mode = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1),
+                         choices=[_("coarse"),
+                                  _("fine"),
+                                  _("both")])
         mode.SetName("selection")
         mode.Bind(wx.EVT_CHOICE, self.OnSurfaceMode)
         self.win['surface']['draw']['mode'] = mode.GetId()
-        gridSizer.Add(item = mode, flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
-                      pos = (0, 1),span = (1, 2))
-        
+        gridSizer.Add(item=mode, flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+                      pos=(0, 1), span=(1, 2))
+
         # shading
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Shading:")),
-                      pos = (0, 3), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
-        shade = wx.Choice (parent = panel, id = wx.ID_ANY, size = (-1, -1),
-                           choices = [_("flat"),
-                                      _("gouraud")])
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("Shading:")), pos=(
+                0, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+        shade = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1),
+                          choices=[_("flat"),
+                                   _("gouraud")])
         shade.SetName("selection")
         self.win['surface']['draw']['shading'] = shade.GetId()
         shade.Bind(wx.EVT_CHOICE, self.OnSurfaceMode)
-        gridSizer.Add(item = shade, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 4))
-        
+        gridSizer.Add(item=shade, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 4))
+
         # set to all
-        all = wx.Button(panel, id = wx.ID_ANY, label = _("Set to all"))
+        all = wx.Button(panel, id=wx.ID_ANY, label=_("Set to all"))
         all.SetToolTipString(_("Use draw settings for all loaded surfaces"))
         all.Bind(wx.EVT_BUTTON, self.OnSurfaceModeAll)
-        gridSizer.Add(item = all, flag = wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos = (3, 4))
+        gridSizer.Add(
+            item=all,
+            flag=wx.ALL | wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            pos=(
+                3,
+                4))
         self.win['surface']['all'] = all.GetId()
-        
+
         # resolution coarse
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Coarse mode:")),
-                      pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                        label = _("resolution:")),
-                     pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        resC = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = 6,
-                           min = 1,
-                           max = 100)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Coarse mode:")),
+                      pos=(2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("resolution:")),
+                      pos=(2, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        resC = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=6,
+                           min=1,
+                           max=100)
         resC.SetName("value")
         self.win['surface']['draw']['res-coarse'] = resC.GetId()
         resC.Bind(wx.EVT_SPINCTRL, self.OnSurfaceResolution)
-        gridSizer.Add(item = resC, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
-        
+        gridSizer.Add(
+            item=resC, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+
         # Coarse style
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("style:")),
-                      pos = (3, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        style = wx.Choice (parent = panel, id = wx.ID_ANY, size = (100, -1),
-                          choices = [_("wire"),
-                                     _("surface")])
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("style:")),
+                      pos=(3, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        style = wx.Choice(parent=panel, id=wx.ID_ANY, size=(100, -1),
+                          choices=[_("wire"),
+                                   _("surface")])
         style.SetName("selection")
         self.win['surface']['draw']['style'] = style.GetId()
         style.Bind(wx.EVT_CHOICE, self.OnSurfaceMode)
-        gridSizer.Add(item = style, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (3, 2))
-        
+        gridSizer.Add(item=style, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(3, 2))
+
         # color
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+        color = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                  size=globalvar.DIALOG_COLOR_SIZE)
         color.SetName("colour")
         color.Bind(csel.EVT_COLOURSELECT, self.OnSurfaceWireColor)
         color.SetToolTipString(_("Change wire color"))
         self.win['surface']['draw']['wire-color'] = color.GetId()
-        gridSizer.Add(item = color, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
-                      pos = (3, 3))
-        
+        gridSizer.Add(
+            item=color,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+            pos=(
+                3,
+                3))
+
         # resolution fine
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Fine mode:")),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                        label = _("resolution:")),
-                     pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        resF = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = 3,
-                           min = 1,
-                           max = 100)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Fine mode:")),
+                      pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("resolution:")),
+                      pos=(1, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        resF = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=3,
+                           min=1,
+                           max=100)
         resF.SetName("value")
         self.win['surface']['draw']['res-fine'] = resF.GetId()
         resF.Bind(wx.EVT_SPINCTRL, self.OnSurfaceResolution)
-        gridSizer.Add(item = resF, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=resF, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
         gridSizer.AddGrowableCol(3)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         #
         # surface attributes
         #
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Surface attributes")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Surface attributes")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
-        # type 
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
+        # type
         self.win['surface']['attr'] = {}
         row = 0
         for code, attrb in (('color', _("Color")),
-                           ('mask', _("Mask")),
-                           ('transp', _("Transparency")),
-                           ('shine', _("Shininess"))):
-            self.win['surface'][code] = {} 
-            gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                             label = attrb + ':'),
-                          pos = (row, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-            use = wx.Choice (parent = panel, id = wx.ID_ANY, size = (100, -1),
-                             choices = [_("map")])
-            
+                            ('mask', _("Mask")),
+                            ('transp', _("Transparency")),
+                            ('shine', _("Shininess"))):
+            self.win['surface'][code] = {}
+            gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                             label=attrb + ':'),
+                          pos=(row, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+            use = wx.Choice(parent=panel, id=wx.ID_ANY, size=(100, -1),
+                            choices=[_("map")])
+
             if code not in ('color', 'shine'):
-                use.Insert(item = _("unset"), pos = 0)
+                use.Insert(item=_("unset"), pos=0)
                 self.win['surface'][code]['required'] = False
             else:
                 self.win['surface'][code]['required'] = True
             if code != 'mask':
-                use.Append(item = _('constant'))
+                use.Append(item=_('constant'))
             self.win['surface'][code]['use'] = use.GetId()
             use.Bind(wx.EVT_CHOICE, self.OnMapObjUse)
-            gridSizer.Add(item = use, flag = wx.ALIGN_CENTER_VERTICAL,
-                          pos = (row, 1))
-            
-            map = Select(parent = panel, id = wx.ID_ANY,
+            gridSizer.Add(item=use, flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(row, 1))
+
+            map = Select(parent=panel, id=wx.ID_ANY,
                          # size = globalvar.DIALOG_GSELECT_SIZE,
-                         size = (-1, -1),
-                         type = "raster")
+                         size=(-1, -1),
+                         type="raster")
             if globalvar.CheckWxVersion([3]):
                 self.win['surface'][code]['map'] = map.GetId()
             else:
                 self.win['surface'][code]['map'] = map.GetTextCtrl().GetId()
             map.Bind(wx.EVT_TEXT, self.OnSurfaceMap)
-            gridSizer.Add(item = map, flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
-                          pos = (row, 2))
-            
+            gridSizer.Add(item=map, flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+                          pos=(row, 2))
+
             if code == 'color':
-                color = UserSettings.Get(group = 'nviz', key = 'surface', subkey = ['color', 'value'])
-                value = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                          colour = color,
-                                          size = globalvar.DIALOG_COLOR_SIZE)
+                color = UserSettings.Get(
+                    group='nviz', key='surface', subkey=[
+                        'color', 'value'])
+                value = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                          colour=color,
+                                          size=globalvar.DIALOG_COLOR_SIZE)
                 value.Bind(csel.EVT_COLOURSELECT, self.OnSurfaceMap)
             elif code == 'mask':
                 value = None
             else:
-                value = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                                    initial = 0)
-                value.SetRange(minVal = 0, maxVal = 100)
+                value = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                                    initial=0)
+                value.SetRange(minVal=0, maxVal=100)
                 value.Bind(wx.EVT_TEXT, self.OnSurfaceMap)
-            
+
             if value:
                 self.win['surface'][code]['const'] = value.GetId()
                 value.Enable(False)
-                gridSizer.Add(item = value, flag = wx.ALIGN_CENTER_VERTICAL,
-                              pos = (row, 3))
+                gridSizer.Add(item=value, flag=wx.ALIGN_CENTER_VERTICAL,
+                              pos=(row, 3))
             else:
                 self.win['surface'][code]['const'] = None
-            
-            self.SetMapObjUseMap(nvizType = 'surface',
-                                 attrb = code) # -> enable map / disable constant
-                
+
+            # -> enable map / disable constant
+            self.SetMapObjUseMap(nvizType='surface', attrb=code)
+
             row += 1
         gridSizer.AddGrowableCol(2)
-        boxSizer.Add(item = gridSizer, proportion = 0,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 3)
+        boxSizer.Add(item=gridSizer, proportion=0,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=3)
         #
         # position
         #
         self.win['surface']['position'] = {}
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Position")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Position")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # position
         tooltip = _("Changes the x, y, and z position of the current surface")
-        self._createControl(panel, data = self.win['surface'], name = 'position',
-                            tooltip = tooltip, range = (-10000, 10000), floatSlider = True,
-                            bind = (self.OnSurfacePosition, self.OnSurfacePositionChanged, self.OnSurfacePositionText))
-        
-        axis = wx.Choice (parent = panel, id = wx.ID_ANY, size = (75, -1),
-                          choices = ["X",
-                                     "Y",
-                                     "Z"])
-                                    
-        reset = wx.Button(panel, id = wx.ID_ANY, label = _("Reset"))
+        self._createControl(panel,
+                            data=self.win['surface'],
+                            name='position',
+                            tooltip=tooltip,
+                            range=(-10000,
+                                   10000),
+                            floatSlider=True,
+                            bind=(self.OnSurfacePosition,
+                                  self.OnSurfacePositionChanged,
+                                  self.OnSurfacePositionText))
+
+        axis = wx.Choice(parent=panel, id=wx.ID_ANY, size=(75, -1),
+                         choices=["X",
+                                  "Y",
+                                  "Z"])
+
+        reset = wx.Button(panel, id=wx.ID_ANY, label=_("Reset"))
         reset.SetToolTipString(_("Reset to default position"))
         reset.Bind(wx.EVT_BUTTON, self.OnResetSurfacePosition)
         self.win['surface']['position']['reset'] = reset.GetId()
-        
+
         self.win['surface']['position']['axis'] = axis.GetId()
         axis.SetSelection(2)
         axis.Bind(wx.EVT_CHOICE, self.OnSurfaceAxis)
-        
+
         pslide = self.FindWindowById(self.win['surface']['position']['slider'])
         ptext = self.FindWindowById(self.win['surface']['position']['text'])
         ptext.SetValue('0')
-        
-        gridSizer.Add(item = axis, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        gridSizer.Add(item = pslide, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 1))
-        gridSizer.Add(item = ptext, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 2))
-        gridSizer.Add(item = reset, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, pos = (0, 3))
+
+        gridSizer.Add(item=axis, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        gridSizer.Add(item=pslide, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 1))
+        gridSizer.Add(item=ptext, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 2))
+        gridSizer.Add(
+            item=reset,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            pos=(
+                0,
+                3))
         gridSizer.AddGrowableCol(3)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        
-        pageSizer.Add(item = boxSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+
+        pageSizer.Add(item=boxSizer, proportion=1,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
         #
         # mask
         #
-##        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-##                            label = " %s " % (_("Mask")))
+# box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
+# label = " %s " % (_("Mask")))
 ##        boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 ##        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-##        
-##        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-##                                         label = _("Mask zeros:")),
-##                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-##        
-##        elev = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-##                           label = _("by elevation"))
-##        elev.Enable(False) # TODO: not implemented yet
+##
+# gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
+# label = _("Mask zeros:")),
+# pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+##
+# elev = wx.CheckBox(parent = panel, id = wx.ID_ANY,
+# label = _("by elevation"))
+# elev.Enable(False) # TODO: not implemented yet
 ##        gridSizer.Add(item = elev, pos = (0, 1))
-##        
-##        color = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-##                           label = _("by color"))
-##        color.Enable(False) # TODO: not implemented yet
+##
+# color = wx.CheckBox(parent = panel, id = wx.ID_ANY,
+# label = _("by color"))
+# color.Enable(False) # TODO: not implemented yet
 ##        gridSizer.Add(item = color, pos = (0, 2))
-##        
-##        boxSizer.Add(item = gridSizer, proportion = 1,
-##                  flag = wx.ALL | wx.EXPAND, border = 3)
-##        pageSizer.Add(item = boxSizer, proportion = 0,
+##
+# boxSizer.Add(item = gridSizer, proportion = 1,
+# flag = wx.ALL | wx.EXPAND, border = 3)
+# pageSizer.Add(item = boxSizer, proportion = 0,
 ##                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-##                      border = 3)
-        
-        
+# border = 3)
+
         panel.SetSizer(pageSizer)
 
         panel.Layout()
         panel.Fit()
-        
+
         return panel
+
     def _createCPlanePage(self, parent):
         """Create cutting planes page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        self.page['cplane'] = { 'id' : 4, 
-                                'notebook' : self.foldpanelData.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+        self.page['cplane'] = {'id': 4,
+                               'notebook': self.foldpanelData.GetId()}
         self.win['cplane'] = {}
-        
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Cutting planes")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Cutting planes")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         horSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
+
         # planes
-        horSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Active cutting plane:")),
-                     flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 5)
-        choice = wx.Choice(parent = panel, id = wx.ID_ANY, choices = [])
+        horSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                        label=_("Active cutting plane:")),
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
+        choice = wx.Choice(parent=panel, id=wx.ID_ANY, choices=[])
         self.win['cplane']['planes'] = choice.GetId()
         choice.Bind(wx.EVT_CHOICE, self.OnCPlaneSelection)
-        horSizer.Add(item = choice, flag = wx.ALL, border = 5)
-        
+        horSizer.Add(item=choice, flag=wx.ALL, border=5)
+
         # shading
-        horSizer.Add(item = wx.Size(-1, -1), proportion = 1)
-        horSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Shading:")),
-                     flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 5)
+        horSizer.Add(item=wx.Size(-1, -1), proportion=1)
+        horSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                        label=_("Shading:")),
+                     flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
         choices = [_("clear"),
                    _("top color"),
                    _("bottom color"),
                    _("blend"),
                    _("shaded")]
-        choice = wx.Choice(parent = panel, id = wx.ID_ANY, choices = choices)
+        choice = wx.Choice(parent=panel, id=wx.ID_ANY, choices=choices)
         self.win['cplane']['shading'] = choice.GetId()
         choice.Bind(wx.EVT_CHOICE, self.OnCPlaneShading)
-        horSizer.Add(item = choice, flag = wx.ALL, border = 5)
-        boxSizer.Add(item = horSizer, flag = wx.EXPAND)
-        
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
+        horSizer.Add(item=choice, flag=wx.ALL, border=5)
+        boxSizer.Add(item=horSizer, flag=wx.EXPAND)
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
         # cutting plane horizontal x position
         self.win['cplane']['position'] = {}
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Horizontal X:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Horizontal X:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
         tooltip = _("Sets the X coordinate of the current cutting plane")
-        self._createControl(panel, data = self.win['cplane']['position'], name = 'x', size = 250,
-                            range = (-1000, 1000), sliderHor = True, floatSlider = True, tooltip = tooltip,
-                            bind = (self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
-        self.FindWindowById(self.win['cplane']['position']['x']['slider']).SetValue(0)
-        self.FindWindowById(self.win['cplane']['position']['x']['text']).SetValue(0)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['position']['x']['slider']),
-                      pos = (0, 1),  flag = wx.EXPAND|wx.ALIGN_RIGHT)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['position']['x']['text']),
-                      pos = (0, 2),
-                      flag = wx.ALIGN_CENTER)   
-        
+        self._createControl(panel,
+                            data=self.win['cplane']['position'],
+                            name='x',
+                            size=250,
+                            range=(-1000,
+                                   1000),
+                            sliderHor=True,
+                            floatSlider=True,
+                            tooltip=tooltip,
+                            bind=(self.OnCPlaneChanging,
+                                  self.OnCPlaneChangeDone,
+                                  self.OnCPlaneChangeText))
+        self.FindWindowById(self.win['cplane']['position'][
+                            'x']['slider']).SetValue(0)
+        self.FindWindowById(self.win['cplane']['position'][
+                            'x']['text']).SetValue(0)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['position']['x']['slider']), pos=(
+                0, 1), flag=wx.EXPAND | wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['position']['x']['text']), pos=(
+                0, 2), flag=wx.ALIGN_CENTER)
+
         # cutting plane horizontal y position
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Horizontal Y:")),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Horizontal Y:")),
+                      pos=(1, 0), flag=wx.ALIGN_CENTER_VERTICAL)
         tooltip = _("Sets the Y coordinate of the current cutting plane")
-        self._createControl(panel, data = self.win['cplane']['position'], name = 'y', size = 250,
-                            range = (-1000, 1000), sliderHor = True, floatSlider = True, tooltip = tooltip,
-                            bind = (self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
-        self.FindWindowById(self.win['cplane']['position']['y']['slider']).SetValue(0)
-        self.FindWindowById(self.win['cplane']['position']['y']['text']).SetValue(0)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['position']['y']['slider']),
-                      pos = (1, 1),  flag = wx.EXPAND|wx.ALIGN_RIGHT)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['position']['y']['text']),
-                      pos = (1, 2),
-                      flag = wx.ALIGN_CENTER)                         
-        
+        self._createControl(panel,
+                            data=self.win['cplane']['position'],
+                            name='y',
+                            size=250,
+                            range=(-1000,
+                                   1000),
+                            sliderHor=True,
+                            floatSlider=True,
+                            tooltip=tooltip,
+                            bind=(self.OnCPlaneChanging,
+                                  self.OnCPlaneChangeDone,
+                                  self.OnCPlaneChangeText))
+        self.FindWindowById(self.win['cplane']['position'][
+                            'y']['slider']).SetValue(0)
+        self.FindWindowById(self.win['cplane']['position'][
+                            'y']['text']).SetValue(0)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['position']['y']['slider']), pos=(
+                1, 1), flag=wx.EXPAND | wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['position']['y']['text']), pos=(
+                1, 2), flag=wx.ALIGN_CENTER)
+
         # cutting plane rotation
         self.win['cplane']['rotation'] = {}
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Rotation:")),
-                      pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Rotation:")),
+                      pos=(2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
         tooltip = _("Rotates the current cutting plane about vertical axis")
-        self._createControl(panel, data = self.win['cplane']['rotation'], name = 'rot', size = 250,
-                            range = (0, 360), sliderHor = True, tooltip = tooltip,
-                            bind = (self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
-        self.FindWindowById(self.win['cplane']['rotation']['rot']['slider']).SetValue(180)
-        self.FindWindowById(self.win['cplane']['rotation']['rot']['text']).SetValue(180)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['rotation']['rot']['slider']),
-                      pos = (2, 1),  flag = wx.EXPAND|wx.ALIGN_RIGHT)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['rotation']['rot']['text']),
-                      pos = (2, 2),
-                      flag = wx.ALIGN_CENTER)
-
-        # cutting plane tilt        
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Tilt:")),
-                      pos = (3, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+        self._createControl(
+            panel, data=self.win['cplane']['rotation'], name='rot', size=250, range=(
+                0, 360), sliderHor=True, tooltip=tooltip, bind=(
+                self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
+        self.FindWindowById(self.win['cplane']['rotation'][
+                            'rot']['slider']).SetValue(180)
+        self.FindWindowById(self.win['cplane']['rotation'][
+                            'rot']['text']).SetValue(180)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['rotation']['rot']['slider']), pos=(
+                2, 1), flag=wx.EXPAND | wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['rotation']['rot']['text']), pos=(
+                2, 2), flag=wx.ALIGN_CENTER)
+
+        # cutting plane tilt
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Tilt:")),
+                      pos=(3, 0), flag=wx.ALIGN_CENTER_VERTICAL)
         tooltip = _("Rotates the current cutting plane about horizontal axis")
-        self._createControl(panel, data = self.win['cplane']['rotation'], name = 'tilt', size = 250,
-                            range = (0, 360), sliderHor = True, tooltip = tooltip,
-                            bind = (self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
-        self.FindWindowById(self.win['cplane']['rotation']['tilt']['slider']).SetValue(0)
-        self.FindWindowById(self.win['cplane']['rotation']['tilt']['text']).SetValue(0)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['rotation']['tilt']['slider']),
-                      pos = (3, 1),  flag = wx.EXPAND|wx.ALIGN_RIGHT)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['rotation']['tilt']['text']),
-                      pos = (3, 2),
-                      flag = wx.ALIGN_CENTER)          
-        
+        self._createControl(
+            panel, data=self.win['cplane']['rotation'], name='tilt', size=250, range=(
+                0, 360), sliderHor=True, tooltip=tooltip, bind=(
+                self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
+        self.FindWindowById(self.win['cplane']['rotation'][
+                            'tilt']['slider']).SetValue(0)
+        self.FindWindowById(self.win['cplane']['rotation'][
+                            'tilt']['text']).SetValue(0)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['rotation']['tilt']['slider']), pos=(
+                3, 1), flag=wx.EXPAND | wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['rotation']['tilt']['text']), pos=(
+                3, 2), flag=wx.ALIGN_CENTER)
+
         # cutting pland height
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Height:")),
-                      pos = (4, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        tooltip = _("Sets the Z coordinate of the current cutting plane (only meaningful when tilt is not 0)")
-        self._createControl(panel, data = self.win['cplane']['position'], name = 'z', size = 250,
-                            range = (-1000, 1000), sliderHor = True, tooltip = tooltip,
-                            bind = (self.OnCPlaneChanging, self.OnCPlaneChangeDone, self.OnCPlaneChangeText))
-        self.FindWindowById(self.win['cplane']['position']['z']['slider']).SetValue(0)
-        self.FindWindowById(self.win['cplane']['position']['z']['text']).SetValue(0)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['position']['z']['slider']),
-                      pos = (4, 1),  flag = wx.EXPAND|wx.ALIGN_RIGHT)
-        gridSizer.Add(item = self.FindWindowById(self.win['cplane']['position']['z']['text']),
-                      pos = (4, 2),
-                      flag = wx.ALIGN_CENTER)
-        
-        boxSizer.Add(gridSizer, proportion = 0, flag = wx.EXPAND|wx.ALL, border = 5)
-                    
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Height:")),
+                      pos=(4, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        tooltip = _(
+            "Sets the Z coordinate of the current cutting plane (only meaningful when tilt is not 0)")
+        self._createControl(panel,
+                            data=self.win['cplane']['position'],
+                            name='z',
+                            size=250,
+                            range=(-1000,
+                                   1000),
+                            sliderHor=True,
+                            tooltip=tooltip,
+                            bind=(self.OnCPlaneChanging,
+                                  self.OnCPlaneChangeDone,
+                                  self.OnCPlaneChangeText))
+        self.FindWindowById(self.win['cplane']['position'][
+                            'z']['slider']).SetValue(0)
+        self.FindWindowById(self.win['cplane']['position'][
+                            'z']['text']).SetValue(0)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['position']['z']['slider']), pos=(
+                4, 1), flag=wx.EXPAND | wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['cplane']['position']['z']['text']), pos=(
+                4, 2), flag=wx.ALIGN_CENTER)
+
+        boxSizer.Add(
+            gridSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+
         horSizer = wx.BoxSizer(wx.HORIZONTAL)
-        horSizer.Add(item = wx.Size(-1, -1), proportion = 1, flag = wx.ALL, border = 5)  
+        horSizer.Add(item=wx.Size(-1, -1), proportion=1, flag=wx.ALL, border=5)
         # reset
-        reset = wx.Button(parent = panel, id = wx.ID_ANY, label = _("Reset"))
+        reset = wx.Button(parent=panel, id=wx.ID_ANY, label=_("Reset"))
         self.win['cplane']['reset'] = reset.GetId()
         reset.Bind(wx.EVT_BUTTON, self.OnCPlaneReset)
-        horSizer.Add(item = reset, flag = wx.ALL, border = 5)
-        boxSizer.Add(horSizer, proportion = 0, flag = wx.EXPAND)            
-        
-        
-        pageSizer.Add(boxSizer, proportion = 0, flag = wx.EXPAND)
-        
+        horSizer.Add(item=reset, flag=wx.ALL, border=5)
+        boxSizer.Add(horSizer, proportion=0, flag=wx.EXPAND)
+
+        pageSizer.Add(boxSizer, proportion=0, flag=wx.EXPAND)
+
         panel.SetSizer(pageSizer)
-        panel.Fit()    
-        
+        panel.Fit()
+
         return panel
-        
+
     def _createConstantPage(self, parent):
         """Create constant page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        self.page['constant'] = { 'id' : 1, 
-                                'notebook' : self.foldpanelData.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+        self.page['constant'] = {'id': 1,
+                                 'notebook': self.foldpanelData.GetId()}
         self.win['constant'] = {}
-        
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Constant surface")))
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Constant surface")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         horsizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        surface = wx.ComboBox(parent = panel, id = wx.ID_ANY, 
-                              style = wx.CB_SIMPLE | wx.CB_READONLY,
-                              choices = [])
+
+        surface = wx.ComboBox(parent=panel, id=wx.ID_ANY,
+                              style=wx.CB_SIMPLE | wx.CB_READONLY,
+                              choices=[])
         self.win['constant']['surface'] = surface.GetId()
         surface.Bind(wx.EVT_COMBOBOX, self.OnConstantSelection)
-        horsizer.Add(surface, proportion = 1, flag = wx.EXPAND|wx.RIGHT, border = 20)
+        horsizer.Add(
+            surface,
+            proportion=1,
+            flag=wx.EXPAND | wx.RIGHT,
+            border=20)
 
-        addNew = wx.Button(panel, id = wx.ID_ANY, label = _("New"))
+        addNew = wx.Button(panel, id=wx.ID_ANY, label=_("New"))
         addNew.Bind(wx.EVT_BUTTON, self.OnNewConstant)
         self.win['constant']['new'] = addNew.GetId()
 
-        delete = wx.Button(panel, id = wx.ID_ANY, label = _("Delete"))
+        delete = wx.Button(panel, id=wx.ID_ANY, label=_("Delete"))
         delete.Bind(wx.EVT_BUTTON, self.OnDeleteConstant)
         self.win['constant']['delete'] = delete.GetId()
-        
-        horsizer.Add(item = addNew, proportion = 0, flag = wx.RIGHT|wx.LEFT, border = 3)
-        horsizer.Add(item = delete, proportion = 0, flag = wx.RIGHT|wx.LEFT, border = 3)
-    
-        boxSizer.Add(item = horsizer, proportion = 0, flag = wx.ALL|wx.EXPAND,
-                      border = 5)
-        
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+
+        horsizer.Add(
+            item=addNew,
+            proportion=0,
+            flag=wx.RIGHT | wx.LEFT,
+            border=3)
+        horsizer.Add(
+            item=delete,
+            proportion=0,
+            flag=wx.RIGHT | wx.LEFT,
+            border=3)
+
+        boxSizer.Add(item=horsizer, proportion=0, flag=wx.ALL | wx.EXPAND,
+                     border=5)
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
         # fine resolution
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Fine resolution:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        resF = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           initial = 3,
-                           min = 1,
-                           max = 100)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Fine resolution:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        resF = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           initial=3,
+                           min=1,
+                           max=100)
         resF.SetName("value")
         self.win['constant']['resolution'] = resF.GetId()
         resF.Bind(wx.EVT_SPINCTRL, self.OnSetConstantProp)
-        gridSizer.Add(item = resF, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT)
-        # value 
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Value:")), pos = (1, 0),
-                                         flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        value = wx.SpinCtrl(panel, id = wx.ID_ANY,
-                                  min = -1e9, max = 1e9,
-                                  size = (65, -1))
+        gridSizer.Add(
+            item=resF, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+        # value
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Value:")), pos=(1, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        value = wx.SpinCtrl(panel, id=wx.ID_ANY,
+                            min=-1e9, max=1e9,
+                            size=(65, -1))
         self.win['constant']['value'] = value.GetId()
         value.Bind(wx.EVT_SPINCTRL, self.OnSetConstantProp)
-        gridSizer.Add(item = value, pos = (1, 1))
-        
-        # transparency 
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Transparency:")), pos = (2, 0),
-                                         flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        transp = wx.SpinCtrl(panel, id = wx.ID_ANY,
-                                  min = 0, max = 100,
-                                  size = (65, -1))
+        gridSizer.Add(item=value, pos=(1, 1))
+
+        # transparency
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Transparency:")), pos=(2, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+
+        transp = wx.SpinCtrl(panel, id=wx.ID_ANY,
+                             min=0, max=100,
+                             size=(65, -1))
         self.win['constant']['transp'] = transp.GetId()
         transp.Bind(wx.EVT_SPINCTRL, self.OnSetConstantProp)
-        gridSizer.Add(item = transp, pos = (2, 1))
-        
+        gridSizer.Add(item=transp, pos=(2, 1))
+
         # color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Color:")), pos = (3, 0),
-                                         flag = wx.ALIGN_CENTER_VERTICAL)
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = (0,0,0),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Color:")), pos=(3, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        color = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                  colour=(0, 0, 0),
+                                  size=globalvar.DIALOG_COLOR_SIZE)
         self.win['constant']['color'] = color.GetId()
         color.Bind(csel.EVT_COLOURSELECT, self.OnSetConstantProp)
-        gridSizer.Add(item = color, pos = (3, 1))
-        boxSizer.Add(item = gridSizer, proportion = 0, flag = wx.ALL,
-                      border = 5)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 3)
-        
+        gridSizer.Add(item=color, pos=(3, 1))
+        boxSizer.Add(item=gridSizer, proportion=0, flag=wx.ALL,
+                     border=5)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=3)
+
         panel.SetSizer(pageSizer)
-        panel.Fit()    
-        
+        panel.Fit()
+
         return panel
-        
+
     def _createVectorPage(self, parent):
         """Create view settings page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        self.page['vector'] = { 'id' : 2,
-                                'notebook' : self.foldpanelData.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+        self.page['vector'] = {'id': 2,
+                               'notebook': self.foldpanelData.GetId()}
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         self.win['vector'] = {}
-        
+
         # selection
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Vector map")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Vector map")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        vmaps = Select(parent = panel, type = 'vector',
-                       onPopup = self.GselectOnPopup)
+        vmaps = Select(parent=panel, type='vector',
+                       onPopup=self.GselectOnPopup)
         vmaps.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnSetVector)
         self.win['vector']['map'] = vmaps.GetId()
-        desc = wx.StaticText(parent = panel, id = wx.ID_ANY)
+        desc = wx.StaticText(parent=panel, id=wx.ID_ANY)
         self.win['vector']['desc'] = desc.GetId()
-        boxSizer.Add(item = vmaps, proportion = 0,
-                     flag = wx.ALL,
-                     border = 3)
-        boxSizer.Add(item = desc, proportion = 0,
-                     flag = wx.ALL,
-                     border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+        boxSizer.Add(item=vmaps, proportion=0,
+                     flag=wx.ALL,
+                     border=3)
+        boxSizer.Add(item=desc, proportion=0,
+                     flag=wx.ALL,
+                     border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         #
         # vector lines
         #
         self.win['vector']['lines'] = {}
-        
-        showLines = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                label = _("Show vector lines"))
+
+        showLines = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                label=_("Show vector lines"))
         showLines.SetValue(True)
-        
+
         self.win['vector']['lines']['show'] = showLines.GetId()
         showLines.Bind(wx.EVT_CHECKBOX, self.OnVectorShow)
-        
-        pageSizer.Add(item = showLines, proportion = 0,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Vector lines")))
+
+        pageSizer.Add(item=showLines, proportion=0, flag=wx.LEFT |
+                      wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Vector lines")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-        
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+
         # width
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Line:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("width:")),
-                      pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL | 
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Line:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("width:")),
+                      pos=(0, 1), flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_RIGHT)
-        
-        width = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                            initial = 1,
-                            min = 1,
-                            max = 100)
+
+        width = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                            initial=1,
+                            min=1,
+                            max=100)
         width.SetValue(1)
         self.win['vector']['lines']['width'] = width.GetId()
         width.Bind(wx.EVT_SPINCTRL, self.OnVectorLines)
-        gridSizer.Add(item = width, pos = (0, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        
+        gridSizer.Add(item=width, pos=(0, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+
         # color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("color:")),
-                      pos = (0, 3), flag = wx.ALIGN_CENTER_VERTICAL |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("color:")),
+                      pos=(0, 3), flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_RIGHT)
-        
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = (0,0,0),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+
+        color = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                  colour=(0, 0, 0),
+                                  size=globalvar.DIALOG_COLOR_SIZE)
         self.win['vector']['lines']['color'] = color.GetId()
         color.Bind(csel.EVT_COLOURSELECT, self.OnVectorLines)
 
-        gridSizer.Add(item = color, pos = (0, 4), flag = wx.ALIGN_CENTER_VERTICAL |
+        gridSizer.Add(item=color, pos=(0, 4), flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_LEFT)
-        
+
         # thematic mapping
         self.win['vector']['lines']['thematic'] = {}
-        checkThematicColor = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                         label = _("use color for thematic mapping"))
-        checkThematicWidth = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                         label = _("use width for thematic mapping"))
-        self.win['vector']['lines']['thematic']['checkcolor'] = checkThematicColor.GetId()
-        self.win['vector']['lines']['thematic']['checkwidth'] = checkThematicWidth.GetId()
+        checkThematicColor = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_("use color for thematic mapping"))
+        checkThematicWidth = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_("use width for thematic mapping"))
+        self.win['vector']['lines']['thematic'][
+            'checkcolor'] = checkThematicColor.GetId()
+        self.win['vector']['lines']['thematic'][
+            'checkwidth'] = checkThematicWidth.GetId()
         checkThematicColor.Bind(wx.EVT_CHECKBOX, self.OnCheckThematic)
         checkThematicWidth.Bind(wx.EVT_CHECKBOX, self.OnCheckThematic)
         checkThematicColor.SetValue(False)
         checkThematicWidth.SetValue(False)
-        
+
         vSizer = wx.BoxSizer(wx.VERTICAL)
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        hSizer.Add(item = checkThematicColor, flag = wx.ALIGN_CENTER_VERTICAL,
-                    border = 5)
-        setThematic = wx.Button(parent = panel, id = wx.ID_ANY,
-                                         label = _("Set options..."))
-        self.win['vector']['lines']['thematic']['buttoncolor'] = setThematic.GetId()
+        hSizer.Add(item=checkThematicColor, flag=wx.ALIGN_CENTER_VERTICAL,
+                   border=5)
+        setThematic = wx.Button(parent=panel, id=wx.ID_ANY,
+                                label=_("Set options..."))
+        self.win['vector']['lines']['thematic'][
+            'buttoncolor'] = setThematic.GetId()
         setThematic.Bind(wx.EVT_BUTTON, self.OnSetThematic)
-        hSizer.Add(item = wx.Size(-1, -1), proportion = 1)
-        hSizer.Add(item = setThematic, flag = wx.ALIGN_CENTER_VERTICAL|wx.LEFT,
-                    border = 5, proportion = 0)
-        vSizer.Add(hSizer, flag = wx.EXPAND)
-                    
+        hSizer.Add(item=wx.Size(-1, -1), proportion=1)
+        hSizer.Add(item=setThematic, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+                   border=5, proportion=0)
+        vSizer.Add(hSizer, flag=wx.EXPAND)
+
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        hSizer.Add(item = checkThematicWidth, flag = wx.ALIGN_CENTER_VERTICAL,
-                    border = 5)
-        setThematic = wx.Button(parent = panel, id = wx.ID_ANY,
-                                         label = _("Set options..."))
-        self.win['vector']['lines']['thematic']['buttonwidth'] = setThematic.GetId()
+        hSizer.Add(item=checkThematicWidth, flag=wx.ALIGN_CENTER_VERTICAL,
+                   border=5)
+        setThematic = wx.Button(parent=panel, id=wx.ID_ANY,
+                                label=_("Set options..."))
+        self.win['vector']['lines']['thematic'][
+            'buttonwidth'] = setThematic.GetId()
         setThematic.Bind(wx.EVT_BUTTON, self.OnSetThematic)
-        hSizer.Add(item = wx.Size(-1, -1), proportion = 1)
-        hSizer.Add(item = setThematic, flag = wx.ALIGN_CENTER_VERTICAL|wx.LEFT,
-                    border = 5, proportion = 0)
-        
-        vSizer.Add(hSizer, flag = wx.EXPAND)
-        gridSizer.Add(item = vSizer, flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                      pos = (1, 1), span = (1, 5))
-        
+        hSizer.Add(item=wx.Size(-1, -1), proportion=1)
+        hSizer.Add(item=setThematic, flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+                   border=5, proportion=0)
+
+        vSizer.Add(hSizer, flag=wx.EXPAND)
+        gridSizer.Add(item=vSizer, flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+                      pos=(1, 1), span=(1, 5))
+
         # display
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Display")),
-                      pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Display")),
+                      pos=(2, 0), flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_LEFT)
-        
-        display = wx.Choice (parent = panel, id = wx.ID_ANY, size = (-1, -1),
-                             choices = [_("on surface(s):"),
-                                        _("as 3D")])
+
+        display = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1),
+                            choices=[_("on surface(s):"),
+                                     _("as 3D")])
         self.win['vector']['lines']['3d'] = display.GetId()
         display.Bind(wx.EVT_CHOICE, self.OnVectorLinesMode)
-        
-        gridSizer.Add(item = display, flag = wx.ALIGN_CENTER_VERTICAL | 
-                      wx.ALIGN_LEFT|wx.EXPAND, pos = (2, 1), span = (1,4))
-        
+
+        gridSizer.Add(item=display, flag=wx.ALIGN_CENTER_VERTICAL |
+                      wx.ALIGN_LEFT | wx.EXPAND, pos=(2, 1), span=(1, 4))
+
         # height
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Height above surface:")),
-                      pos = (3, 5), flag = wx.ALIGN_BOTTOM|wx.EXPAND)
-        
-        surface = wx.CheckListBox(parent = panel, id = wx.ID_ANY, size = (-1, 60),
-                                  choices = [], style = wx.LB_NEEDED_SB)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Height above surface:")),
+                      pos=(3, 5), flag=wx.ALIGN_BOTTOM | wx.EXPAND)
+
+        surface = wx.CheckListBox(parent=panel, id=wx.ID_ANY, size=(-1, 60),
+                                  choices=[], style=wx.LB_NEEDED_SB)
         surface.Bind(wx.EVT_CHECKLISTBOX, self.OnVectorSurface)
-        
+
         self.win['vector']['lines']['surface'] = surface.GetId()
-        gridSizer.Add(item = surface, 
-                      pos = (3, 0), span = (3, 5),
-                      flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
-        
-        self._createControl(panel, data = self.win['vector']['lines'], name = 'height', size = -1,
-                            range = (0, 500), sliderHor = True,
-                            bind = (self.OnVectorHeight, self.OnVectorHeightFull, self.OnVectorHeightText))
-        self.FindWindowById(self.win['vector']['lines']['height']['slider']).SetValue(0)
-        self.FindWindowById(self.win['vector']['lines']['height']['text']).SetValue(0)
-        gridSizer.Add(item = self.FindWindowById(self.win['vector']['lines']['height']['slider']),
-                      pos = (4, 5),  flag = wx.EXPAND|wx.ALIGN_RIGHT)
-        gridSizer.Add(item = self.FindWindowById(self.win['vector']['lines']['height']['text']),
-                      pos = (5, 5),
-                      flag = wx.ALIGN_CENTER)
+        gridSizer.Add(item=surface,
+                      pos=(3, 0), span=(3, 5),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+
+        self._createControl(
+            panel,
+            data=self.win['vector']['lines'],
+            name='height',
+            size=-1,
+            range=(
+                0,
+                500),
+            sliderHor=True,
+            bind=(
+                self.OnVectorHeight,
+                self.OnVectorHeightFull,
+                self.OnVectorHeightText))
+        self.FindWindowById(self.win['vector']['lines'][
+                            'height']['slider']).SetValue(0)
+        self.FindWindowById(self.win['vector']['lines'][
+                            'height']['text']).SetValue(0)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['vector']['lines']['height']['slider']), pos=(
+                4, 5), flag=wx.EXPAND | wx.ALIGN_RIGHT)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['vector']['lines']['height']['text']), pos=(
+                5, 5), flag=wx.ALIGN_CENTER)
         gridSizer.AddGrowableCol(5)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         #
         # vector points
         #
         self.win['vector']['points'] = {}
-        
-        showPoints = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                 label = _("Show vector points"))
+
+        showPoints = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                 label=_("Show vector points"))
         showPoints.SetValue(True)
         self.win['vector']['points']['show'] = showPoints.GetId()
         showPoints.Bind(wx.EVT_CHECKBOX, self.OnVectorShow)
-        
-        pageSizer.Add(item = showPoints, proportion = 0,
-                      flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Vector points")))
+
+        pageSizer.Add(item=showPoints, proportion=0, flag=wx.LEFT |
+                      wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Vector points")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         vertSizer = wx.BoxSizer(wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-        
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+
         # icon size
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Icon:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("size:")),
-                      pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Icon:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("size:")),
+                      pos=(0, 1), flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_RIGHT)
-        
+
         if fs:
-            isize = fs.FloatSpin(parent = panel, id = wx.ID_ANY,
-                                 min_val = 0, max_val = 1e6,
-                                 increment = 1, value = 1, style = fs.FS_RIGHT)
+            isize = fs.FloatSpin(parent=panel, id=wx.ID_ANY,
+                                 min_val=0, max_val=1e6,
+                                 increment=1, value=1, style=fs.FS_RIGHT)
             isize.SetFormat("%f")
             isize.SetDigits(1)
             isize.Bind(fs.EVT_FLOATSPIN, self.OnVectorPoints)
         else:
-            isize = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                                initial = 1,
-                                min = 1,
-                                max = 1e6)
+            isize = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                                initial=1,
+                                min=1,
+                                max=1e6)
             isize.Bind(wx.EVT_SPINCTRL, self.OnVectorPoints)
         isize.SetName('value')
         isize.SetValue(100)
         self.win['vector']['points']['size'] = isize.GetId()
-        gridSizer.Add(item = isize, pos = (0, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
-        
+        gridSizer.Add(item=isize, pos=(0, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+
         # icon color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("color:")),
-                      pos = (0, 3), flag = wx.ALIGN_CENTER_VERTICAL |
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("color:")),
+                      pos=(0, 3), flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_RIGHT)
-        icolor = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                   size = globalvar.DIALOG_COLOR_SIZE)
+        icolor = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                   size=globalvar.DIALOG_COLOR_SIZE)
         icolor.SetName("color")
-        icolor.SetColour((0,0,255))
+        icolor.SetColour((0, 0, 255))
         self.win['vector']['points']['color'] = icolor.GetId()
         icolor.Bind(csel.EVT_COLOURSELECT, self.OnVectorPoints)
-        gridSizer.Add(item = icolor, flag = wx.ALIGN_CENTER_VERTICAL | 
+        gridSizer.Add(item=icolor, flag=wx.ALIGN_CENTER_VERTICAL |
                       wx.ALIGN_LEFT,
-                      pos = (0, 4))
+                      pos=(0, 4))
 
         # icon width - seems to do nothing
-##        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-##                                           label = _("width")),
-##                      pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL |
-##                      wx.ALIGN_RIGHT)
-##        
-##        iwidth = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
+# gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
+# label = _("width")),
+# pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL |
+# wx.ALIGN_RIGHT)
+##
+# iwidth = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
 ##                             initial = 1,
 ##                             min = 1,
-##                             max = 1e6)
-##        iwidth.SetName('value')
-##        iwidth.SetValue(100)
+# max = 1e6)
+# iwidth.SetName('value')
+# iwidth.SetValue(100)
 ##        self.win['vector']['points']['width'] = iwidth.GetId()
 ##        iwidth.Bind(wx.EVT_SPINCTRL, self.OnVectorPoints)
 ##        iwidth.Bind(wx.EVT_TEXT, self.OnVectorPoints)
-##        gridSizer.Add(item = iwidth, pos = (1, 2),
-##                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+# gridSizer.Add(item = iwidth, pos = (1, 2),
+# flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
         # icon symbol
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("symbol:")),
-                      pos = (0, 5), flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
-        isym = wx.Choice (parent = panel, id = wx.ID_ANY, size = (100, -1),
-                          choices = UserSettings.Get(group = 'nviz', key = 'vector',
-                                                   subkey=['points', 'marker'], settings_type='internal'))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("symbol:")), pos=(
+                0, 5), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT)
+        isym = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(100, -1),
+            choices=UserSettings.Get(
+                group='nviz', key='vector', subkey=['points', 'marker'],
+                settings_type='internal'))
         isym.SetName("selection")
         self.win['vector']['points']['marker'] = isym.GetId()
         isym.Bind(wx.EVT_CHOICE, self.OnVectorPoints)
-        gridSizer.Add(item = isym, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
-                      pos = (0, 6))
+        gridSizer.Add(item=isym, flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+                      pos=(0, 6))
         # thematic mapping
         self.win['vector']['points']['thematic'] = {}
-        checkThematicColor = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                         label = _("use color for thematic mapping"))
-        checkThematicSize = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                         label = _("use size for thematic mapping"))
-        self.win['vector']['points']['thematic']['checkcolor'] = checkThematicColor.GetId()
-        self.win['vector']['points']['thematic']['checksize'] = checkThematicSize.GetId()
+        checkThematicColor = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_("use color for thematic mapping"))
+        checkThematicSize = wx.CheckBox(
+            parent=panel, id=wx.ID_ANY,
+            label=_("use size for thematic mapping"))
+        self.win['vector']['points']['thematic'][
+            'checkcolor'] = checkThematicColor.GetId()
+        self.win['vector']['points']['thematic'][
+            'checksize'] = checkThematicSize.GetId()
         checkThematicColor.Bind(wx.EVT_CHECKBOX, self.OnCheckThematic)
         checkThematicSize.Bind(wx.EVT_CHECKBOX, self.OnCheckThematic)
         checkThematicColor.SetValue(False)
         checkThematicSize.SetValue(False)
-        
-        gridSizer.Add(item = checkThematicColor, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
-                      pos = (1, 1), span = (1, 5))
-        setThematic = wx.Button(parent = panel, id = wx.ID_ANY,
-                                         label = _("Set options..."))
-        self.win['vector']['points']['thematic']['buttoncolor'] = setThematic.GetId()
+
+        gridSizer.Add(
+            item=checkThematicColor,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+            pos=(
+                1,
+                1),
+            span=(
+                1,
+                5))
+        setThematic = wx.Button(parent=panel, id=wx.ID_ANY,
+                                label=_("Set options..."))
+        self.win['vector']['points']['thematic'][
+            'buttoncolor'] = setThematic.GetId()
         setThematic.Bind(wx.EVT_BUTTON, self.OnSetThematic)
-        gridSizer.Add(item = setThematic, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (1, 6))
-                    
-        gridSizer.Add(item = checkThematicSize, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
-                      pos = (2, 1), span = (1, 5))
-        setThematic = wx.Button(parent = panel, id = wx.ID_ANY,
-                                         label = _("Set options..."))
-        self.win['vector']['points']['thematic']['buttonsize'] = setThematic.GetId()
+        gridSizer.Add(item=setThematic, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(1, 6))
+
+        gridSizer.Add(
+            item=checkThematicSize,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+            pos=(
+                2,
+                1),
+            span=(
+                1,
+                5))
+        setThematic = wx.Button(parent=panel, id=wx.ID_ANY,
+                                label=_("Set options..."))
+        self.win['vector']['points']['thematic'][
+            'buttonsize'] = setThematic.GetId()
         setThematic.Bind(wx.EVT_BUTTON, self.OnSetThematic)
-        gridSizer.Add(item = setThematic, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (2, 6))                   
+        gridSizer.Add(item=setThematic, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(2, 6))
         gridSizer.AddGrowableCol(0)
         gridSizer.AddGrowableCol(2)
         gridSizer.AddGrowableCol(4)
         gridSizer.AddGrowableCol(6)
-        vertSizer.Add(gridSizer, proportion = 0, flag = wx.EXPAND, border = 0)
+        vertSizer.Add(gridSizer, proportion=0, flag=wx.EXPAND, border=0)
         # high
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-        gridSizer.Add(item=wx.StaticText(parent=panel, label=_("Display")),
-                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, label=_("Display")), pos=(
+                0, 0), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT)
         display = wx.Choice(parent=panel)
         self.win['vector']['points']['3d'] = display.GetId()
         display.Bind(wx.EVT_CHOICE, self.OnVectorPointsMode)
         gridSizer.Add(item=display,
                       pos=(0, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Height above surface:")),
-                      pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        surface = wx.CheckListBox(parent = panel, id = wx.ID_ANY, size = (-1, 60),
-                                  choices = [], style = wx.LB_NEEDED_SB)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Height above surface:")),
+                      pos=(1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        surface = wx.CheckListBox(parent=panel, id=wx.ID_ANY, size=(-1, 60),
+                                  choices=[], style=wx.LB_NEEDED_SB)
         surface.Bind(wx.EVT_CHECKLISTBOX, self.OnVectorSurface)
         self.win['vector']['points']['surface'] = surface.GetId()
-        gridSizer.Add(item = surface, 
-                      pos = (1, 0), span = (3, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND)
-        
-        self._createControl(panel, data = self.win['vector']['points'], name = 'height', size = -1,
-                            range = (0, 500),
-                            bind = (self.OnVectorHeight, self.OnVectorHeightFull, self.OnVectorHeightText))
-        
-        self.FindWindowById(self.win['vector']['points']['height']['slider']).SetValue(0)
-        self.FindWindowById(self.win['vector']['points']['height']['text']).SetValue(0)
-        
-        gridSizer.Add(item = self.FindWindowById(self.win['vector']['points']['height']['slider']),
-                      pos = (2, 2),flag = wx.EXPAND|wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.FindWindowById(self.win['vector']['points']['height']['text']),
-                      pos = (3, 2),
-                      flag = wx.ALIGN_CENTER)
+        gridSizer.Add(item=surface,
+                      pos=(1, 0), span=(3, 2),
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+
+        self._createControl(
+            panel,
+            data=self.win['vector']['points'],
+            name='height',
+            size=-1,
+            range=(
+                0,
+                500),
+            bind=(
+                self.OnVectorHeight,
+                self.OnVectorHeightFull,
+                self.OnVectorHeightText))
+
+        self.FindWindowById(self.win['vector']['points'][
+                            'height']['slider']).SetValue(0)
+        self.FindWindowById(self.win['vector']['points'][
+                            'height']['text']).SetValue(0)
+
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['vector']['points']['height']['slider']), pos=(
+                2, 2), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['vector']['points']['height']['text']), pos=(
+                3, 2), flag=wx.ALIGN_CENTER)
         gridSizer.AddGrowableCol(2)
-                    
-        vertSizer.Add(gridSizer, proportion = 0, flag = wx.EXPAND, border = 0)
-        boxSizer.Add(item = vertSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+
+        vertSizer.Add(gridSizer, proportion=0, flag=wx.EXPAND, border=0)
+        boxSizer.Add(item=vertSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         panel.SetSizer(pageSizer)
         panel.Fit()
 
         return panel
 
-    def GselectOnPopup(self, ltype, exclude = False):
+    def GselectOnPopup(self, ltype, exclude=False):
         """Update gselect.Select() items"""
         maps = list()
-        # TODO: sync the element names
-        ltype = '3d-raster' if ltype == 'raster_3d' else ltype
-        for layer in self.mapWindow.Map.GetListOfLayers(ltype = ltype, active = True):
+        for layer in self.mapWindow.Map.GetListOfLayers(
+                ltype=ltype, active=True):
             maps.append(layer.GetName())
         return maps, exclude
-    
+
     def _createVolumePage(self, parent):
         """Create view settings page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        self.page['volume'] = { 'id' : 3,
-                                'notebook' : self.foldpanelData.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+        self.page['volume'] = {'id': 3,
+                               'notebook': self.foldpanelData.GetId()}
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         self.win['volume'] = {}
-        
+
         # selection
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("3D raster map")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("3D raster map")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        rmaps = Select(parent = panel, type = 'raster_3d',
-                       onPopup = self.GselectOnPopup)
+        rmaps = Select(parent=panel, type='raster_3d',
+                       onPopup=self.GselectOnPopup)
         rmaps.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnSetRaster3D)
         self.win['volume']['map'] = rmaps.GetId()
-        desc = wx.StaticText(parent = panel, id = wx.ID_ANY)
+        desc = wx.StaticText(parent=panel, id=wx.ID_ANY)
         self.win['volume']['desc'] = desc.GetId()
-        boxSizer.Add(item = rmaps, proportion = 0,
-                     flag = wx.ALL,
-                     border = 3)
-        boxSizer.Add(item = desc, proportion = 0,
-                     flag = wx.ALL,
-                     border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-                
+        boxSizer.Add(item=rmaps, proportion=0,
+                     flag=wx.ALL,
+                     border=3)
+        boxSizer.Add(item=desc, proportion=0,
+                     flag=wx.ALL,
+                     border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         #
         # draw
         #
         self.win['volume']['draw'] = {}
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Draw")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Draw")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-##        gridSizer.AddGrowableCol(4)
-        
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+# gridSizer.AddGrowableCol(4)
+
         # mode
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Mode:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        mode = wx.Choice (parent = panel, id = wx.ID_ANY, size = (-1, -1),
-                          choices = [_("isosurfaces"),
-                                     _("slices")])
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Mode:")),
+                      pos=(0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        mode = wx.Choice(parent=panel, id=wx.ID_ANY, size=(-1, -1),
+                         choices=[_("isosurfaces"),
+                                  _("slices")])
         mode.SetSelection(0)
         mode.SetName("selection")
         mode.Bind(wx.EVT_CHOICE, self.OnVolumeMode)
         self.win['volume']['draw']['mode'] = mode.GetId()
-        gridSizer.Add(item = mode, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 1))
-        
+        gridSizer.Add(item=mode, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 1))
+
         # shading
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Shading:")),
-                      pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        shade = wx.Choice (parent = panel, id = wx.ID_ANY, size = (100, -1),
-                           choices = [_("flat"),
-                                      _("gouraud")])
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Shading:")),
+                      pos=(0, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        shade = wx.Choice(parent=panel, id=wx.ID_ANY, size=(100, -1),
+                          choices=[_("flat"),
+                                   _("gouraud")])
         shade.SetName("selection")
         self.win['volume']['draw']['shading'] = shade.GetId()
         shade.Bind(wx.EVT_CHOICE, self.OnVolumeDrawMode)
-        gridSizer.Add(item = shade, flag = wx.ALIGN_CENTER_VERTICAL,
-                      pos = (0, 3))
-        
+        gridSizer.Add(item=shade, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(0, 3))
+
         # resolution (mode)
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                         label = _("Resolution:")),
-                      pos = (0, 4), flag = wx.ALIGN_CENTER_VERTICAL)
-        resol = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                            initial = 1,
-                            min = 1,
-                            max = 100)
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Resolution:")),
+                      pos=(0, 4), flag=wx.ALIGN_CENTER_VERTICAL)
+        resol = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                            initial=1,
+                            min=1,
+                            max=100)
         resol.SetName("value")
         self.win['volume']['draw']['resolution'] = resol.GetId()
         resol.Bind(wx.EVT_SPINCTRL, self.OnVolumeResolution)
         resol.Bind(wx.EVT_TEXT, self.OnVolumeResolution)
-        gridSizer.Add(item = resol, pos = (0, 5))
-        
+        gridSizer.Add(item=resol, pos=(0, 5))
+
         # draw wire box
-        box = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                            label = _("Draw wire box"))
+        box = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                          label=_("Draw wire box"))
         box.SetName("value")
         self.win['volume']['draw']['box'] = box.GetId()
         box.Bind(wx.EVT_CHECKBOX, self.OnVolumeDrawBox)
-        gridSizer.Add(item = box, pos = (1, 0), span = (1, 6))
-
-        boxSizer.Add(item = gridSizer, proportion = 0,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 3)
-        
+        gridSizer.Add(item=box, pos=(1, 0), span=(1, 6))
+
+        boxSizer.Add(item=gridSizer, proportion=0,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=3)
+
         #
         # manage isosurfaces
         #
-        box = wx.StaticBox(parent = panel, id = wx.ID_ANY, 
-                           label = " %s " % (_("List of isosurfaces")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("List of isosurfaces")))
         box.SetName('listStaticBox')
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # list
-        isolevel = wx.CheckListBox(parent = panel, id = wx.ID_ANY,
-                                   size = (300, 150))
+        isolevel = wx.CheckListBox(parent=panel, id=wx.ID_ANY,
+                                   size=(300, 150))
         self.Bind(wx.EVT_CHECKLISTBOX, self.OnVolumeCheck, isolevel)
         self.Bind(wx.EVT_LISTBOX, self.OnVolumeSelect, isolevel)
-        
+
         self.win['volume']['isosurfs'] = isolevel.GetId()
         self.win['volume']['slices'] = isolevel.GetId()
-        gridSizer.Add(item = isolevel, pos = (0, 0), span = (4, 1))
-        
+        gridSizer.Add(item=isolevel, pos=(0, 0), span=(4, 1))
+
         # buttons (add, delete, move up, move down)
-        btnAdd = wx.Button(parent = panel, id = wx.ID_ADD)
+        btnAdd = wx.Button(parent=panel, id=wx.ID_ADD)
         self.win['volume']['btnAdd'] = btnAdd.GetId()
         btnAdd.Bind(wx.EVT_BUTTON, self.OnVolumeAdd)
-        gridSizer.Add(item = btnAdd,
-                      pos = (0, 1))
-        btnDelete = wx.Button(parent = panel, id = wx.ID_DELETE)
+        gridSizer.Add(item=btnAdd,
+                      pos=(0, 1))
+        btnDelete = wx.Button(parent=panel, id=wx.ID_DELETE)
         self.win['volume']['btnDelete'] = btnDelete.GetId()
         btnDelete.Bind(wx.EVT_BUTTON, self.OnVolumeDelete)
         btnDelete.Enable(False)
-        gridSizer.Add(item = btnDelete,
-                      pos = (1, 1))
-        btnMoveUp = wx.Button(parent = panel, id = wx.ID_UP)
+        gridSizer.Add(item=btnDelete,
+                      pos=(1, 1))
+        btnMoveUp = wx.Button(parent=panel, id=wx.ID_UP)
         self.win['volume']['btnMoveUp'] = btnMoveUp.GetId()
         btnMoveUp.Bind(wx.EVT_BUTTON, self.OnVolumeMoveUp)
         btnMoveUp.Enable(False)
-        gridSizer.Add(item = btnMoveUp,
-                      pos = (2, 1))
-        btnMoveDown = wx.Button(parent = panel, id = wx.ID_DOWN)
+        gridSizer.Add(item=btnMoveUp,
+                      pos=(2, 1))
+        btnMoveDown = wx.Button(parent=panel, id=wx.ID_DOWN)
         self.win['volume']['btnMoveDown'] = btnMoveDown.GetId()
         btnMoveDown.Bind(wx.EVT_BUTTON, self.OnVolumeMoveDown)
         btnMoveDown.Enable(False)
-        gridSizer.Add(item = btnMoveDown,
-                      pos = (3, 1))
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        # isosurface/slice 
+        gridSizer.Add(item=btnMoveDown,
+                      pos=(3, 1))
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+        # isosurface/slice
         sizer = wx.BoxSizer()
         self.isoPanel = self._createIsosurfacePanel(panel)
         self.slicePanel = self._createSlicePanel(panel)
-        sizer.Add(self.isoPanel, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 0)
-        sizer.Add(self.slicePanel, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 0)
+        sizer.Add(
+            self.isoPanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=0)
+        sizer.Add(
+            self.slicePanel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=0)
         sizer.Hide(self.slicePanel)
-        pageSizer.Add(item = sizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL,
-                      border = 3)
+        pageSizer.Add(item=sizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL,
+                      border=3)
         #
         # position
         #
         self.win['volume']['position'] = {}
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Position")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Position")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # position
-        self._createControl(panel, data = self.win['volume'], name = 'position',
-                            range = (-10000, 10000), floatSlider = True,
-                            bind = (self.OnVolumePosition, self.OnVolumePositionChanged, self.OnVolumePositionText))
-        
-        axis = wx.Choice (parent = panel, id = wx.ID_ANY, size = (75, -1),
-                          choices = ["X",
-                                     "Y",
-                                     "Z"])
-                                    
-        reset = wx.Button(panel, id = wx.ID_ANY, label = _("Reset"))
+        self._createControl(panel,
+                            data=self.win['volume'],
+                            name='position',
+                            range=(-10000,
+                                   10000),
+                            floatSlider=True,
+                            bind=(self.OnVolumePosition,
+                                  self.OnVolumePositionChanged,
+                                  self.OnVolumePositionText))
+
+        axis = wx.Choice(parent=panel, id=wx.ID_ANY, size=(75, -1),
+                         choices=["X",
+                                  "Y",
+                                  "Z"])
+
+        reset = wx.Button(panel, id=wx.ID_ANY, label=_("Reset"))
         reset.SetToolTipString(_("Reset to default position"))
         reset.Bind(wx.EVT_BUTTON, self.OnResetVolumePosition)
         self.win['volume']['position']['reset'] = reset.GetId()
-        
+
         self.win['volume']['position']['axis'] = axis.GetId()
-        axis.SetSelection(2) # Z
+        axis.SetSelection(2)  # Z
         axis.Bind(wx.EVT_CHOICE, self.OnVolumeAxis)
-        
+
         pslide = self.FindWindowById(self.win['volume']['position']['slider'])
         ptext = self.FindWindowById(self.win['volume']['position']['text'])
         ptext.SetValue('0')
-        
-        gridSizer.Add(item = axis, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        gridSizer.Add(item = pslide, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 1))
-        gridSizer.Add(item = ptext, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 2))
-        gridSizer.Add(item = reset, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, pos = (0, 3))
+
+        gridSizer.Add(item=axis, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        gridSizer.Add(item=pslide, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 1))
+        gridSizer.Add(item=ptext, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 2))
+        gridSizer.Add(
+            item=reset,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            pos=(
+                0,
+                3))
         gridSizer.AddGrowableCol(3)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 3)
-        
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
         panel.SetSizer(pageSizer)
         panel.Fit()
-        
+
         return panel
-       
-        
+
     def _createLightPage(self, parent):
         """Create light page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        
-        self.page['light'] = { 'id' : 0, 
-                               'notebook' : self.foldpanelAppear.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+
+        self.page['light'] = {'id': 0,
+                              'notebook': self.foldpanelAppear.GetId()}
         self.win['light'] = {}
-        
+
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
-        show = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                           label = _("Show light model"))
+
+        show = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                           label=_("Show light model"))
         show.Bind(wx.EVT_CHECKBOX, self.OnShowLightModel)
         show.SetValue(True)
         self._display.showLight = True
-        pageSizer.Add(item = show, proportion = 0,
-                      flag = wx.ALL, border = 3)
-##        surface = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-##                              label = _("Follow source viewpoint"))
-##        pageSizer.Add(item = surface, proportion = 0,
-##                      flag = wx.ALL, border = 3)
-        
+        pageSizer.Add(item=show, proportion=0,
+                      flag=wx.ALL, border=3)
+# surface = wx.CheckBox(parent = panel, id = wx.ID_ANY,
+# label = _("Follow source viewpoint"))
+# pageSizer.Add(item = surface, proportion = 0,
+# flag = wx.ALL, border = 3)
+
         # position
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Light source position")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Light source position")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        posSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
-        self._createCompass(panel = panel, sizer = posSizer, type = 'light')
-        
-        pos = LightPositionWindow(panel, id = wx.ID_ANY, size = (175, 175),
-                                  mapwindow = self.mapWindow)
+
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+        posSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
+        self._createCompass(panel=panel, sizer=posSizer, type='light')
+
+        pos = LightPositionWindow(panel, id=wx.ID_ANY, size=(175, 175),
+                                  mapwindow=self.mapWindow)
         self.win['light']['position'] = pos.GetId()
-        posSizer.Add(item = pos,
-                     pos = (1, 1), flag = wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = posSizer, pos = (0, 0))
-        
+        posSizer.Add(
+            item=pos, pos=(1, 1),
+            flag=wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=posSizer, pos=(0, 0))
+
         # height
         tooltip = _("Adjusts the light height")
-        self._createControl(panel, data = self.win['light'], name = 'z', sliderHor = False,
-                            range = (0, 100), tooltip = tooltip,
-                            bind = (self.OnLightChange, self.OnLightChanged, self.OnLightChange))
-        
-        heightSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        heightSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Height:")),
-                      pos = (0, 0), flag = wx.ALIGN_LEFT, span = (1, 2))
-        heightSizer.Add(item = self.FindWindowById(self.win['light']['z']['slider']),
-                        flag = wx.ALIGN_RIGHT, pos = (1, 0))
-        heightSizer.Add(item = self.FindWindowById(self.win['light']['z']['text']),
-                        flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.TOP |
-                        wx.BOTTOM | wx.RIGHT, pos = (1, 1))
-        
-        gridSizer.Add(item = heightSizer, pos = (0, 2), flag = wx.ALIGN_RIGHT)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 2)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+        self._createControl(
+            panel, data=self.win['light'], name='z', sliderHor=False, range=(
+                0, 100), tooltip=tooltip, bind=(
+                self.OnLightChange, self.OnLightChanged, self.OnLightChange))
+
+        heightSizer = wx.GridBagSizer(vgap=3, hgap=3)
+        heightSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Height:")), pos=(
+                0, 0), flag=wx.ALIGN_LEFT, span=(
+                1, 2))
+        heightSizer.Add(
+            item=self.FindWindowById(
+                self.win['light']['z']['slider']), flag=wx.ALIGN_RIGHT, pos=(
+                1, 0))
+        heightSizer.Add(item=self.FindWindowById(
+            self.win['light']['z']['text']),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.TOP |
+            wx.BOTTOM | wx.RIGHT, pos=(1, 1))
+
+        gridSizer.Add(item=heightSizer, pos=(0, 2), flag=wx.ALIGN_RIGHT)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=2)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         # position
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Light color and intensity")))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Light color and intensity")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-
-        gridSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Color:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                  colour = UserSettings.Get(group = 'nviz', key = 'light',
-                                                            subkey = 'color'),
-                                  size = globalvar.DIALOG_COLOR_SIZE)
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Color:")), pos=(
+                0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+        color = csel.ColourSelect(
+            panel, id=wx.ID_ANY, colour=UserSettings.Get(
+                group='nviz', key='light', subkey='color'),
+            size=globalvar.DIALOG_COLOR_SIZE)
         self.win['light']['color'] = color.GetId()
         color.Bind(csel.EVT_COLOURSELECT, self.OnLightColor)
-        gridSizer.Add(item = color, pos = (0, 2))
+        gridSizer.Add(item=color, pos=(0, 2))
 
-        gridSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Brightness:")),
-                      pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Brightness:")), pos=(
+                1, 0), flag=wx.ALIGN_CENTER_VERTICAL)
         tooltip = _("Adjusts the brightness of the light")
-        self._createControl(panel, data = self.win['light'], name = 'bright', size = 300,
-                            range = (0, 100), tooltip = tooltip, 
-                            bind = (self.OnLightValue, self.OnLightChanged, self.OnLightValue))
-        gridSizer.Add(item = self.FindWindowById(self.win['light']['bright']['slider']),
-                      pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.FindWindowById(self.win['light']['bright']['text']),
-                      pos = (1, 2),
-                      flag = wx.ALIGN_CENTER)
-        gridSizer.Add(item = wx.StaticText(panel, id = wx.ID_ANY, label = _("Ambient:")),
-                      pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL)
+        self._createControl(
+            panel, data=self.win['light'], name='bright', size=300, range=(
+                0, 100), tooltip=tooltip, bind=(
+                self.OnLightValue, self.OnLightChanged, self.OnLightValue))
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['light']['bright']['slider']), pos=(
+                1, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['light']['bright']['text']), pos=(
+                1, 2), flag=wx.ALIGN_CENTER)
+        gridSizer.Add(
+            item=wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Ambient:")), pos=(
+                2, 0), flag=wx.ALIGN_CENTER_VERTICAL)
         tooltip = _("Adjusts the ambient light")
-        self._createControl(panel, data = self.win['light'], name = 'ambient', size = 300,
-                            range = (0, 100), tooltip = tooltip,
-                            bind = (self.OnLightValue, self.OnLightChanged, self.OnLightValue))
-        gridSizer.Add(item = self.FindWindowById(self.win['light']['ambient']['slider']),
-                      pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.FindWindowById(self.win['light']['ambient']['text']),
-                      pos = (2, 2),
-                      flag = wx.ALIGN_CENTER)
-
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 2)
-        pageSizer.Add(item = boxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+        self._createControl(
+            panel, data=self.win['light'], name='ambient', size=300, range=(
+                0, 100), tooltip=tooltip, bind=(
+                self.OnLightValue, self.OnLightChanged, self.OnLightValue))
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['light']['ambient']['slider']), pos=(
+                2, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.FindWindowById(
+                self.win['light']['ambient']['text']), pos=(
+                2, 2), flag=wx.ALIGN_CENTER)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=2)
+        pageSizer.Add(item=boxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         # reset = wx.Button(panel, id = wx.ID_ANY, label = _("Reset"))
         # reset.SetToolTipString(_("Reset to default view"))
         # # self.win['reset'] = reset.GetId()
         # reset.Bind(wx.EVT_BUTTON, self.OnResetView)
-        
+
         # viewSizer.Add(item = reset, proportion = 1,
         #               flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT,
         #               border = 5)
-        
+
         # gridSizer.AddGrowableCol(3)
         # gridSizer.Add(item = viewSizer, pos = (4, 0), span = (1, 2),
         #               flag = wx.EXPAND)
-        
+
         panel.SetSizer(pageSizer)
         panel.Layout()
         panel.Fit()
-        
+
         return panel
 
     def _createFringePage(self, parent):
         """Create fringe page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        
-        self.page['fringe'] = { 'id' : 1,
-                                'notebook' : self.foldpanelAppear.GetId() }
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+
+        self.page['fringe'] = {'id': 1,
+                               'notebook': self.foldpanelAppear.GetId()}
         self.win['fringe'] = {}
 
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # selection
-        rbox = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                             label = " %s " % (_("Surface")))
+        rbox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                            label=" %s " % (_("Surface")))
         rboxSizer = wx.StaticBoxSizer(rbox, wx.VERTICAL)
-        rmaps = Select(parent = panel, type = 'raster',
-                       onPopup = self.GselectOnPopup)
+        rmaps = Select(parent=panel, type='raster',
+                       onPopup=self.GselectOnPopup)
         rmaps.GetChildren()[0].Bind(wx.EVT_TEXT, self.OnSetSurface)
         self.win['fringe']['map'] = rmaps.GetId()
-        rboxSizer.Add(item = rmaps, proportion = 0,
-                      flag = wx.ALL,
-                      border = 3)
-        pageSizer.Add(item = rboxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
-        ebox = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                             label = " %s " % (_("Edges with fringe")))
+        rboxSizer.Add(item=rmaps, proportion=0,
+                      flag=wx.ALL,
+                      border=3)
+        pageSizer.Add(item=rboxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
+        ebox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                            label=" %s " % (_("Edges with fringe")))
         eboxSizer = wx.StaticBoxSizer(ebox, wx.HORIZONTAL)
         for edge in [(_("N && W"), "nw"),
                      (_("N && E"), "ne"),
                      (_("S && W"), "sw"),
                      (_("S && E"), "se")]:
-            chkbox = wx.CheckBox(parent = panel,
-                                 label = edge[0],
-                                 name = edge[1])
+            chkbox = wx.CheckBox(parent=panel,
+                                 label=edge[0],
+                                 name=edge[1])
             self.win['fringe'][edge[1]] = chkbox.GetId()
-            eboxSizer.Add(item = chkbox, proportion = 0,
-                         flag = wx.ADJUST_MINSIZE | wx.LEFT | wx.RIGHT, border = 5)
+            eboxSizer.Add(
+                item=chkbox,
+                proportion=0,
+                flag=wx.ADJUST_MINSIZE | wx.LEFT | wx.RIGHT,
+                border=5)
             chkbox.Bind(wx.EVT_CHECKBOX, self.OnFringe)
-        
-        pageSizer.Add(item = eboxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
 
-        sbox = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                             label = " %s " % (_("Settings")))
+        pageSizer.Add(item=eboxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
+        sbox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                            label=" %s " % (_("Settings")))
         sboxSizer = wx.StaticBoxSizer(sbox, wx.HORIZONTAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-        
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+
         # elevation
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Elevation of fringe from bottom:")),
-                      pos = (0, 0),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        spin = wx.SpinCtrl(parent = panel, id = wx.ID_ANY,
-                           size = (65, -1), min = -1e6, max = 1e6)
-        spin.SetValue(UserSettings.Get(group = 'nviz', key = 'fringe', subkey = 'elev'))
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY,
+                label=_("Elevation of fringe from bottom:")),
+            pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        spin = wx.SpinCtrl(parent=panel, id=wx.ID_ANY,
+                           size=(65, -1), min=-1e6, max=1e6)
+        spin.SetValue(
+            UserSettings.Get(
+                group='nviz',
+                key='fringe',
+                subkey='elev'))
         spin.Bind(wx.EVT_SPINCTRL, self.OnFringe)
         self.win['fringe']['elev'] = spin.GetId()
-        gridSizer.Add(item = spin, pos = (0, 1))
-        
+        gridSizer.Add(item=spin, pos=(0, 1))
+
         # color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Color:")),
-                      pos = (1, 0),
-                      flag = wx.ALIGN_CENTER_VERTICAL)
-        color = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                  size = globalvar.DIALOG_COLOR_SIZE)
-        color.SetColour(UserSettings.Get(group = 'nviz', key = 'fringe',
-                                         subkey = 'color'))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Color:")),
+                      pos=(1, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
+        color = csel.ColourSelect(parent=panel, id=wx.ID_ANY,
+                                  size=globalvar.DIALOG_COLOR_SIZE)
+        color.SetColour(UserSettings.Get(group='nviz', key='fringe',
+                                         subkey='color'))
         color.Bind(csel.EVT_COLOURSELECT, self.OnFringe)
         self.win['fringe']['color'] = color.GetId()
-        gridSizer.Add(item = color, pos = (1, 1))
-        
-        sboxSizer.Add(item = gridSizer, proportion = 1,
-                      flag = wx.ALL | wx.EXPAND, border = 3)
-        pageSizer.Add(item = sboxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
+        gridSizer.Add(item=color, pos=(1, 1))
+
+        sboxSizer.Add(item=gridSizer, proportion=1,
+                      flag=wx.ALL | wx.EXPAND, border=3)
+        pageSizer.Add(item=sboxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         panel.SetSizer(pageSizer)
         panel.Layout()
         panel.Fit()
 
         return panel
-    
+
     def _createDecorationPage(self, parent):
         """Create decoration (north arrow, scalebar, legend) page"""
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        
-        self.page['decoration'] = { 'id' : 2,
-                                    'notebook' : self.foldpanelAppear.GetId()}
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+
+        self.page['decoration'] = {'id': 2,
+                                   'notebook': self.foldpanelAppear.GetId()}
         self.win['decoration'] = {}
 
         pageSizer = wx.BoxSizer(wx.VERTICAL)
-        
+
         # north arrow
         self.win['decoration']['arrow'] = {}
-        nabox = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                             label = " %s " % (_("North Arrow")))
+        nabox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                             label=" %s " % (_("North Arrow")))
         naboxSizer = wx.StaticBoxSizer(nabox, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
         # size
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Arrow length (in map units):")),
-                      pos = (0,0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        sizeCtrl = NumTextCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1), style = wx.TE_PROCESS_ENTER)
-        gridSizer.Add(sizeCtrl, pos = (0, 2))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Arrow length (in map units):")),
+                      pos=(0, 0), span=(1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        sizeCtrl = NumTextCtrl(
+            parent=panel, id=wx.ID_ANY, size=(
+                65, -1), style=wx.TE_PROCESS_ENTER)
+        gridSizer.Add(sizeCtrl, pos=(0, 2))
         self.win['decoration']['arrow']['size'] = sizeCtrl.GetId()
         sizeCtrl.Bind(wx.EVT_TEXT_ENTER, self.OnDecorationProp)
         sizeCtrl.Bind(wx.EVT_KILL_FOCUS, self.OnDecorationProp)
-        
+
         # color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Arrow color:")),
-                      pos = (1,0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        color = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                  size = globalvar.DIALOG_COLOR_SIZE)
-        gridSizer.Add(color, pos = (1, 2))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Arrow color:")),
+                      pos=(1, 0), span=(1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        color = csel.ColourSelect(parent=panel, id=wx.ID_ANY,
+                                  size=globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(color, pos=(1, 2))
         self.win['decoration']['arrow']['color'] = color.GetId()
         color.Bind(csel.EVT_COLOURSELECT, self.OnDecorationProp)
-        
+
         # control
-        toggle = wx.ToggleButton(parent = panel, id = wx.ID_ANY, label = _("Place arrow"))
-        gridSizer.Add(item = toggle, pos = (2, 0))
+        toggle = wx.ToggleButton(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Place arrow"))
+        gridSizer.Add(item=toggle, pos=(2, 0))
         toggle.Bind(wx.EVT_TOGGLEBUTTON, self.OnDecorationPlacement)
         self.win['decoration']['arrow']['place'] = toggle.GetId()
         toggle.SetName('placeArrow')
 
-        delete = wx.Button(parent = panel, id = wx.ID_ANY, label = _("Delete"))
+        delete = wx.Button(parent=panel, id=wx.ID_ANY, label=_("Delete"))
         self.win['decoration']['arrow']['delete'] = delete.GetId()
-        gridSizer.Add(item = delete, pos = (2, 1))
+        gridSizer.Add(item=delete, pos=(2, 1))
         delete.Bind(wx.EVT_BUTTON, self.OnArrowDelete)
         shown = self.mapWindow.decoration['arrow']['show']
         delete.Enable(shown)
-        naboxSizer.Add(item = gridSizer, proportion = 0, flag = wx.EXPAND, border = 3)
-        pageSizer.Add(item = naboxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)
-        
-        
+        naboxSizer.Add(item=gridSizer, proportion=0, flag=wx.EXPAND, border=3)
+        pageSizer.Add(item=naboxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
+
         # scale bars
         self.win['decoration']['scalebar'] = {}
-        nabox = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                             label = " %s " % (_("Scale bar")))
+        nabox = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                             label=" %s " % (_("Scale bar")))
         naboxSizer = wx.StaticBoxSizer(nabox, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
         # size
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Scale bar length (in map units):")),
-                      pos = (0,0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        sizeCtrl = NumTextCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1), style = wx.TE_PROCESS_ENTER)
-        gridSizer.Add(sizeCtrl, pos = (0, 2))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Scale bar length (in map units):")),
+                      pos=(0, 0), span=(1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        sizeCtrl = NumTextCtrl(
+            parent=panel, id=wx.ID_ANY, size=(
+                65, -1), style=wx.TE_PROCESS_ENTER)
+        gridSizer.Add(sizeCtrl, pos=(0, 2))
         self.win['decoration']['scalebar']['size'] = sizeCtrl.GetId()
         sizeCtrl.Bind(wx.EVT_TEXT_ENTER, self.OnDecorationProp)
         sizeCtrl.Bind(wx.EVT_KILL_FOCUS, self.OnDecorationProp)
-        
+
         # color
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = _("Scale bar color:")),
-                      pos = (1,0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        color = csel.ColourSelect(parent = panel, id = wx.ID_ANY,
-                                  size = globalvar.DIALOG_COLOR_SIZE)
-        gridSizer.Add(color, pos = (1, 2))
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=_("Scale bar color:")),
+                      pos=(1, 0), span=(1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        color = csel.ColourSelect(parent=panel, id=wx.ID_ANY,
+                                  size=globalvar.DIALOG_COLOR_SIZE)
+        gridSizer.Add(color, pos=(1, 2))
         self.win['decoration']['scalebar']['color'] = color.GetId()
         color.Bind(csel.EVT_COLOURSELECT, self.OnDecorationProp)
-        
+
         # control
-        toggle = wx.ToggleButton(parent = panel, id = wx.ID_ANY, label = _("Place new scale bar"))
-        gridSizer.Add(item = toggle, pos = (2, 0))
+        toggle = wx.ToggleButton(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Place new scale bar"))
+        gridSizer.Add(item=toggle, pos=(2, 0))
         toggle.Bind(wx.EVT_TOGGLEBUTTON, self.OnDecorationPlacement)
         self.win['decoration']['scalebar']['place'] = toggle.GetId()
         toggle.SetName('placeScalebar')
 
-        scalebarChoice = wx.Choice(parent = panel, id = wx.ID_ANY, choices = [])
+        scalebarChoice = wx.Choice(parent=panel, id=wx.ID_ANY, choices=[])
         self.win['decoration']['scalebar']['choice'] = scalebarChoice.GetId()
-        gridSizer.Add(item = scalebarChoice, pos = (3, 0), flag = wx.EXPAND)
-        delete = wx.Button(parent = panel, id = wx.ID_ANY, label = _("Delete"))
+        gridSizer.Add(item=scalebarChoice, pos=(3, 0), flag=wx.EXPAND)
+        delete = wx.Button(parent=panel, id=wx.ID_ANY, label=_("Delete"))
         self.win['decoration']['scalebar']['delete'] = delete.GetId()
-        gridSizer.Add(item = delete, pos = (3, 1))
+        gridSizer.Add(item=delete, pos=(3, 1))
         delete.Bind(wx.EVT_BUTTON, self.OnScalebarDelete)
-        naboxSizer.Add(item = gridSizer, proportion = 0, flag = wx.EXPAND, border = 3)
-        pageSizer.Add(item = naboxSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
-                      border = 3)      
+        naboxSizer.Add(item=gridSizer, proportion=0, flag=wx.EXPAND, border=3)
+        pageSizer.Add(item=naboxSizer, proportion=0,
+                      flag=wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                      border=3)
 
         self.DisableScalebarControls()
 
@@ -2043,29 +2431,29 @@ class NvizToolWindow(FN.FlatNotebook):
         panel.Fit()
 
         return panel
-    
-    def GetLayerData(self, nvizType, nameOnly = False):
+
+    def GetLayerData(self, nvizType, nameOnly=False):
         """Get nviz data"""
         name = self.FindWindowById(self.win[nvizType]['map']).GetValue()
         if nameOnly:
             return name
-        
+
         if nvizType == 'surface' or nvizType == 'fringe':
-            return self._getLayerPropertiesByName(name, mapType = 'raster')
+            return self._getLayerPropertiesByName(name, mapType='raster')
         elif nvizType == 'vector':
-            return self._getLayerPropertiesByName(name, mapType = 'vector')
+            return self._getLayerPropertiesByName(name, mapType='vector')
         elif nvizType == 'volume':
-            return self._getLayerPropertiesByName(name, mapType = '3d-raster')
-        
+            return self._getLayerPropertiesByName(name, mapType='raster_3d')
+
         return None
 
     def _getMapLayerByName(self, name, mapType):
         """Get layer (render.Layer) by name and type.
 
         :param name: layer name
-        :param mapType: map type (raster, vector, 3d-raster)
+        :param mapType: map type (raster, vector, raster_3d)
         """
-        layers = self.mapWindow.Map.GetListOfLayers(ltype = mapType, name = name)
+        layers = self.mapWindow.Map.GetListOfLayers(ltype=mapType, name=name)
         if layers:
             return layers[0]
         return None
@@ -2074,14 +2462,14 @@ class NvizToolWindow(FN.FlatNotebook):
         """Get nviz properties stored in layertree items by name and type.
 
         :param name: layer name
-        :param mapType: map type (raster, vector, 3d-raster)
+        :param mapType: map type (raster, vector, raster_3d)
         """
-        items = self.tree.FindItemByData(key = 'name', value = name)
+        items = self.tree.FindItemByData(key='name', value=name)
         if not items:
             return None
         for item in items:
-            if self.tree.GetLayerInfo(item, key = 'type') == mapType:
-                return self.tree.GetLayerInfo(item, key = 'nviz')
+            if self.tree.GetLayerInfo(item, key='type') == mapType:
+                return self.tree.GetLayerInfo(item, key='nviz')
         return None
 
     def OnRecord(self, event):
@@ -2089,45 +2477,45 @@ class NvizToolWindow(FN.FlatNotebook):
         anim = self.mapWindow.GetAnimation()
         if not anim.IsPaused():
             if anim.Exists() and not anim.IsSaved():
-                msg = _("Do you want to record new animation without saving the previous one?")
-                dlg = wx.MessageDialog(parent = self,
-                                       message = msg,
-                                       caption =_("Animation already axists"),
-                                       style = wx.YES_NO | wx.CENTRE)
+                msg = _(
+                    "Do you want to record new animation without saving the previous one?")
+                dlg = wx.MessageDialog(parent=self,
+                                       message=msg,
+                                       caption=_("Animation already axists"),
+                                       style=wx.YES_NO | wx.CENTRE)
                 if dlg.ShowModal() == wx.ID_NO:
                     dlg.Destroy()
                     return
-                
-        
+
             anim.Clear()
             self.UpdateFrameIndex(0)
             self.UpdateFrameCount()
-            
+
         anim.SetPause(False)
-        anim.SetMode(mode = 'record')
+        anim.SetMode(mode='record')
         anim.Start()
-        
+
         self.FindWindowById(self.win['anim']['play']).Disable()
         self.FindWindowById(self.win['anim']['record']).Disable()
         self.FindWindowById(self.win['anim']['pause']).Enable()
         self.FindWindowById(self.win['anim']['stop']).Enable()
         self.FindWindowById(self.win['anim']['frameIndex']['slider']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['text']).Disable()
-        
+
     def OnPlay(self, event):
         """Animation: replay"""
         anim = self.mapWindow.GetAnimation()
         anim.SetPause(False)
-        anim.SetMode(mode = 'play')
+        anim.SetMode(mode='play')
         anim.Start()
-        
+
         self.FindWindowById(self.win['anim']['play']).Disable()
         self.FindWindowById(self.win['anim']['record']).Disable()
         self.FindWindowById(self.win['anim']['pause']).Enable()
         self.FindWindowById(self.win['anim']['stop']).Enable()
         self.FindWindowById(self.win['anim']['frameIndex']['slider']).Enable()
         self.FindWindowById(self.win['anim']['frameIndex']['text']).Enable()
-        
+
     def OnStop(self, event):
         """Animation: stop recording/replaying"""
         anim = self.mapWindow.GetAnimation()
@@ -2136,190 +2524,204 @@ class NvizToolWindow(FN.FlatNotebook):
             anim.StopSaving()
         if anim.IsRunning():
             anim.Stop()
-        
+
         self.UpdateFrameIndex(0)
-        
+
         self.FindWindowById(self.win['anim']['play']).Enable()
         self.FindWindowById(self.win['anim']['record']).Enable()
         self.FindWindowById(self.win['anim']['pause']).Disable()
         self.FindWindowById(self.win['anim']['stop']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['slider']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['text']).Disable()
-        
+
     def OnPause(self, event):
         """Pause animation"""
         anim = self.mapWindow.GetAnimation()
-        
+
         anim.SetPause(True)
         mode = anim.GetMode()
         if anim.IsRunning():
             anim.Pause()
-            
+
         if mode == "record":
             self.FindWindowById(self.win['anim']['play']).Disable()
             self.FindWindowById(self.win['anim']['record']).Enable()
-            self.FindWindowById(self.win['anim']['frameIndex']['slider']).Disable()
-            self.FindWindowById(self.win['anim']['frameIndex']['text']).Disable()
+            self.FindWindowById(
+                self.win['anim']['frameIndex']['slider']).Disable()
+            self.FindWindowById(
+                self.win['anim']['frameIndex']['text']).Disable()
         elif mode == 'play':
             self.FindWindowById(self.win['anim']['record']).Disable()
             self.FindWindowById(self.win['anim']['play']).Enable()
-            self.FindWindowById(self.win['anim']['frameIndex']['slider']).Enable()
-            self.FindWindowById(self.win['anim']['frameIndex']['text']).Enable()
-        
+            self.FindWindowById(
+                self.win['anim']['frameIndex']['slider']).Enable()
+            self.FindWindowById(
+                self.win['anim']['frameIndex']['text']).Enable()
+
         self.FindWindowById(self.win['anim']['pause']).Disable()
         self.FindWindowById(self.win['anim']['stop']).Enable()
 
-        
     def OnFrameIndex(self, event):
         """Frame index changed (by slider)"""
         index = event.GetInt()
-        self.UpdateFrameIndex(index = index, sliderWidget = False)
-        
+        self.UpdateFrameIndex(index=index, sliderWidget=False)
+
     def OnFrameIndexText(self, event):
         """Frame index changed by (textCtrl)"""
         index = event.GetValue()
-        self.UpdateFrameIndex(index = index, textWidget = False)
-        
+        self.UpdateFrameIndex(index=index, textWidget=False)
+
     def OnFPS(self, event):
         """Frames per second changed"""
         anim = self.mapWindow.GetAnimation()
         anim.SetFPS(event.GetInt())
-        
-    def UpdateFrameIndex(self, index, sliderWidget = True, textWidget = True, goToFrame = True):
+
+    def UpdateFrameIndex(self, index, sliderWidget=True,
+                         textWidget=True, goToFrame=True):
         """Update frame index"""
         anim = self.mapWindow.GetAnimation()
-        
+
         # check index
         frameCount = anim.GetFrameCount()
         if index >= frameCount:
             index = frameCount - 1
         if index < 0:
             index = 0
-            
+
         if sliderWidget:
-            slider = self.FindWindowById(self.win['anim']['frameIndex']['slider'])
+            slider = self.FindWindowById(
+                self.win['anim']['frameIndex']['slider'])
             slider.SetValue(index)
         if textWidget:
             text = self.FindWindowById(self.win['anim']['frameIndex']['text'])
             text.SetValue(int(index))
-        
+
         # if called from tool window, update frame
         if goToFrame:
             anim.GoToFrame(int(index))
-            
+
     def UpdateFrameCount(self):
         """Update frame count label"""
         anim = self.mapWindow.GetAnimation()
         count = anim.GetFrameCount()
         self.FindWindowById(self.win['anim']['info']).SetLabel(str(count))
-        
+
     def OnAnimationFinished(self, mode):
         """Animation finished"""
         anim = self.mapWindow.GetAnimation()
-        self.UpdateFrameIndex(index = 0)
-        
+        self.UpdateFrameIndex(index=0)
+
         slider = self.FindWindowById(self.win['anim']['frameIndex']['slider'])
         text = self.FindWindowById(self.win['anim']['frameIndex']['text'])
-        
+
         if mode == 'record':
             count = anim.GetFrameCount()
             slider.SetMax(count)
             self.UpdateFrameCount()
-            
+
         self.FindWindowById(self.win['anim']['pause']).Disable()
         self.FindWindowById(self.win['anim']['stop']).Disable()
         self.FindWindowById(self.win['anim']['record']).Enable()
         self.FindWindowById(self.win['anim']['play']).Enable()
         self.FindWindowById(self.win['anim']['frameIndex']['slider']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['text']).Disable()
-        self.FindWindowById(self.win['anim']['save']['image']['confirm']).Enable()
-        
+        self.FindWindowById(self.win['anim']['save'][
+                            'image']['confirm']).Enable()
+
         self.mapWindow.render['quick'] = False
         self.mapWindow.Refresh(False)
-        
+
     def OnAnimationUpdateIndex(self, index, mode):
         """Animation: frame index changed"""
         if mode == 'record':
             self.UpdateFrameCount()
         elif mode == 'play':
-            self.UpdateFrameIndex(index = index, goToFrame = False)
-        
+            self.UpdateFrameIndex(index=index, goToFrame=False)
+
     def OnSaveAnimation(self, event):
         """Save animation as a sequence of images"""
         anim = self.mapWindow.GetAnimation()
-        
-        prefix = self.FindWindowById(self.win['anim']['save']['image']['prefix']).GetValue()
-        format = self.FindWindowById(self.win['anim']['save']['image']['format']).GetSelection()
-        dir = self.FindWindowById(self.win['anim']['save']['image']['dir']).GetValue()
-        
+
+        prefix = self.FindWindowById(
+            self.win['anim']['save']['image']['prefix']).GetValue()
+        format = self.FindWindowById(
+            self.win['anim']['save']['image']['format']).GetSelection()
+        dir = self.FindWindowById(
+            self.win['anim']['save']['image']['dir']).GetValue()
+
         if not prefix:
-            GMessage(parent = self,
-                          message = _("No file prefix given."))
+            GMessage(parent=self,
+                     message=_("No file prefix given."))
             return
         elif not os.path.exists(dir):
-            GMessage(parent = self,
-                          message = _("Directory %s does not exist.") % dir)
+            GMessage(parent=self,
+                     message=_("Directory %s does not exist.") % dir)
             return
-            
+
         self.FindWindowById(self.win['anim']['pause']).Disable()
         self.FindWindowById(self.win['anim']['stop']).Enable()
         self.FindWindowById(self.win['anim']['record']).Disable()
         self.FindWindowById(self.win['anim']['play']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['slider']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['text']).Disable()
-        
-        self.FindWindowById(self.win['anim']['save']['image']['confirm']).Disable()
-        
-        anim.SaveAnimationFile(path = dir, prefix = prefix, format = format)
-        
+
+        self.FindWindowById(self.win['anim']['save'][
+                            'image']['confirm']).Disable()
+
+        anim.SaveAnimationFile(path=dir, prefix=prefix, format=format)
+
     def OnNewConstant(self, event):
         """Create new surface with constant value"""
-        #TODO settings
+        # TODO settings
         name = self.mapWindow.NewConstant()
         win = self.FindWindowById(self.win['constant']['surface'])
         name = _("constant#") + str(name)
         win.Append(name)
         win.SetStringSelection(name)
         self.OnConstantSelection(None)
-        self.EnablePage(name = 'constant', enabled = True)
-        
-        self.mapWindow.Refresh(eraseBackground = False)
-        
+        self.EnablePage(name='constant', enabled=True)
+
+        self.mapWindow.Refresh(eraseBackground=False)
+
         # need to update list of surfaces in vector page
         for vtype in ('points', 'lines'):
-            checklist = self.FindWindowById(self.win['vector'][vtype]['surface'])
+            checklist = self.FindWindowById(
+                self.win['vector'][vtype]['surface'])
             checklist.Append(name)
         win = self.FindWindowById(self.win['vector']['map'])
         win.SetValue(win.GetValue())
-                
 
     def OnDeleteConstant(self, event):
         """Delete selected constant surface"""
-        layerIdx = self.FindWindowById(self.win['constant']['surface']).GetSelection()
+        layerIdx = self.FindWindowById(
+            self.win['constant']['surface']).GetSelection()
         if layerIdx == wx.NOT_FOUND:
             return
-        name = self.FindWindowById(self.win['constant']['surface']).GetStringSelection()
+        name = self.FindWindowById(
+            self.win['constant']['surface']).GetStringSelection()
         self.mapWindow.DeleteConstant(layerIdx)
         win = self.FindWindowById(self.win['constant']['surface'])
         win.Delete(layerIdx)
         if win.IsEmpty():
             win.SetValue("")
-            self.EnablePage(name = 'constant', enabled = False)
+            self.EnablePage(name='constant', enabled=False)
         else:
             win.SetSelection(0)
             self.OnConstantSelection(None)
-            
+
         # need to update list of surfaces in vector page
         for vtype in ('points', 'lines'):
-            checklist = self.FindWindowById(self.win['vector'][vtype]['surface'])
+            checklist = self.FindWindowById(
+                self.win['vector'][vtype]['surface'])
             checklist.Delete(checklist.FindString(name))
-            
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-    
+
     def OnConstantSelection(self, event):
         """Constant selected"""
-        layerIdx = self.FindWindowById(self.win['constant']['surface']).GetSelection()
+        layerIdx = self.FindWindowById(
+            self.win['constant']['surface']).GetSelection()
         if layerIdx == wx.NOT_FOUND:
             return
         name = _("constant#") + str(layerIdx + 1)
@@ -2329,43 +2731,49 @@ class NvizToolWindow(FN.FlatNotebook):
                 value = self._getColorFromString(value)
             if attr in ('color', 'value', 'resolution', 'transp'):
                 if attr == 'transp':
-                    self.FindWindowById(self.win['constant'][attr]).SetValue(self._getPercent(value))
+                    self.FindWindowById(
+                        self.win['constant'][attr]).SetValue(
+                        self._getPercent(value))
                 self.FindWindowById(self.win['constant'][attr]).SetValue(value)
-        
+
     def OnSetConstantProp(self, event):
         """Change properties (color, value, resolution)
             of currently selected constant surface"""
-        layerIdx = self.FindWindowById(self.win['constant']['surface']).GetSelection()
+        layerIdx = self.FindWindowById(
+            self.win['constant']['surface']).GetSelection()
         if layerIdx == wx.NOT_FOUND:
             return
         data = self.mapWindow.constants[layerIdx]
         for attr in ('resolution', 'value', 'transp'):
-            data['constant'][attr] = self.FindWindowById(self.win['constant'][attr]).GetValue()
+            data['constant'][attr] = self.FindWindowById(
+                self.win['constant'][attr]).GetValue()
         data['constant']['color'] = self._getColorString(
-                self.FindWindowById(self.win['constant']['color']).GetValue())
-        data['constant']['transp'] = self._getPercent(data['constant']['transp'], toPercent = False)
-        
+            self.FindWindowById(self.win['constant']['color']).GetValue())
+        data['constant']['transp'] = self._getPercent(
+            data['constant']['transp'], toPercent=False)
+
        # update properties
-        event = wxUpdateProperties(data = data)
-        wx.PostEvent(self.mapWindow, event) 
+        event = wxUpdateProperties(data=data)
+        wx.PostEvent(self.mapWindow, event)
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnFringe(self, event):
         """Show/hide fringe"""
         data = self.GetLayerData('fringe')['surface']
-        
+
         sid = data['object']['id']
         elev = self.FindWindowById(self.win['fringe']['elev']).GetValue()
         color = self.FindWindowById(self.win['fringe']['color']).GetValue()
-        
-        self._display.SetFringe(sid, color, elev,
-                                self.FindWindowById(self.win['fringe']['nw']).IsChecked(),
-                                self.FindWindowById(self.win['fringe']['ne']).IsChecked(),
-                                self.FindWindowById(self.win['fringe']['sw']).IsChecked(),
-                                self.FindWindowById(self.win['fringe']['se']).IsChecked())
+
+        self._display.SetFringe(
+            sid, color, elev, self.FindWindowById(
+                self.win['fringe']['nw']).IsChecked(), self.FindWindowById(
+                self.win['fringe']['ne']).IsChecked(), self.FindWindowById(
+                self.win['fringe']['sw']).IsChecked(), self.FindWindowById(
+                    self.win['fringe']['se']).IsChecked())
         self.mapWindow.Refresh(False)
-        
+
     def OnScroll(self, event, win, data):
         """Generic scrolling handler"""
         winName = self.__GetWindowName(win, event.GetId())
@@ -2374,233 +2782,275 @@ class NvizToolWindow(FN.FlatNotebook):
         data[winName] = self.FindWindowById(event.GetId()).GetValue()
         for w in win[winName].itervalues():
             self.FindWindowById(w).SetValue(data[winName])
-        
+
         event.Skip()
-        
+
     def AdjustSliderRange(self, slider, value):
         minim, maxim = slider.GetRange()
         if not (minim <= value <= maxim):
             slider.SetRange(min(minim, value), max(maxim, value))
-    
+
     def _createIsosurfacePanel(self, parent):
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+
         vSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Isosurface attributes")))
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Isosurface attributes")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         self.win['volume']['attr'] = {}
-        inout = wx.CheckBox(parent = panel, id = wx.ID_ANY, 
-                            label = _("toggle normal direction"))
-        gridSizer.Add(item = inout, pos = (0,0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL)
+        inout = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                            label=_("toggle normal direction"))
+        gridSizer.Add(
+            item=inout, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
         inout.Bind(wx.EVT_CHECKBOX, self.OnInOutMode)
         self.win['volume']['inout'] = inout.GetId()
-        
+
         row = 1
         for code, attrb in (('topo', _("Isosurface value")),
                             ('color', _("Color")),
                             ('mask', _("Mask")),
                             ('transp', _("Transparency")),
                             ('shine', _("Shininess"))):
-            self.win['volume'][code] = {} 
+            self.win['volume'][code] = {}
             # label
             colspan = 1
             if code == 'topo':
                 colspan = 2
-            gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                             label = attrb + ':'),
-                          pos = (row, 0), span = (1, colspan),flag = wx.ALIGN_CENTER_VERTICAL)
+            gridSizer.Add(
+                item=wx.StaticText(
+                    parent=panel,
+                    id=wx.ID_ANY,
+                    label=attrb + ':'),
+                pos=(
+                    row,
+                    0),
+                span=(
+                    1,
+                    colspan),
+                flag=wx.ALIGN_CENTER_VERTICAL)
             if code != 'topo':
-                use = wx.Choice (parent = panel, id = wx.ID_ANY, size = (100, -1),
-                                 choices = [_("map")])
+                use = wx.Choice(parent=panel, id=wx.ID_ANY, size=(100, -1),
+                                choices=[_("map")])
             else:
                 use = None
             # check for required properties
             if code not in ('topo', 'color', 'shine'):
-                use.Insert(item = _("unset"), pos = 0)
+                use.Insert(item=_("unset"), pos=0)
                 self.win['volume'][code]['required'] = False
             else:
                 self.win['volume'][code]['required'] = True
             if use and code != 'mask':
-                use.Append(item = _('constant'))
+                use.Append(item=_('constant'))
             if use:
                 self.win['volume'][code]['use'] = use.GetId()
                 use.Bind(wx.EVT_CHOICE, self.OnMapObjUse)
-                gridSizer.Add(item = use, flag = wx.ALIGN_CENTER_VERTICAL,
-                              pos = (row, 1))
-                    
+                gridSizer.Add(item=use, flag=wx.ALIGN_CENTER_VERTICAL,
+                              pos=(row, 1))
+
             if code != 'topo':
-                map = Select(parent = panel, id = wx.ID_ANY,
+                map = Select(parent=panel, id=wx.ID_ANY,
                              # size = globalvar.DIALOG_GSELECT_SIZE,
-                             size = (200, -1),
-                             type = "grid3")
+                             size=(200, -1),
+                             type="grid3")
                 if globalvar.CheckWxVersion([3]):
                     self.win['volume'][code]['map'] = map.GetId()
                 else:
                     self.win['volume'][code]['map'] = map.GetTextCtrl().GetId()
                 map.Bind(wx.EVT_TEXT, self.OnVolumeIsosurfMap)
-                gridSizer.Add(item = map, flag = wx.ALIGN_CENTER_VERTICAL,
-                              pos = (row, 2))
+                gridSizer.Add(item=map, flag=wx.ALIGN_CENTER_VERTICAL,
+                              pos=(row, 2))
             else:
                 map = None
-            
+
             if code == 'color':
-                color = UserSettings.Get(group = 'nviz', key = 'volume', subkey = ['color', 'value'])
-                value = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                          colour = color,
-                                          size = globalvar.DIALOG_COLOR_SIZE)
+                color = UserSettings.Get(
+                    group='nviz', key='volume', subkey=[
+                        'color', 'value'])
+                value = csel.ColourSelect(panel, id=wx.ID_ANY,
+                                          colour=color,
+                                          size=globalvar.DIALOG_COLOR_SIZE)
                 value.Bind(csel.EVT_COLOURSELECT, self.OnVolumeIsosurfMap)
                 value.SetName('color')
             elif code == 'mask':
                 value = None
             elif code == 'topo':
-                value = NumTextCtrl(parent = panel, id = wx.ID_ANY, size = (200, -1),
-                            style = wx.TE_PROCESS_ENTER)
+                value = NumTextCtrl(parent=panel, id=wx.ID_ANY, size=(200, -1),
+                                    style=wx.TE_PROCESS_ENTER)
                 value.Bind(wx.EVT_TEXT_ENTER, self.OnVolumeIsosurfMap)
                 value.Bind(wx.EVT_KILL_FOCUS, self.OnVolumeIsosurfMap)
 ##                value.Bind(wx.EVT_TEXT, self.OnVolumeIsosurfMap)
             else:
                 size = (65, -1)
-                value = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = size,
-                                    initial = 0)
+                value = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=size,
+                                    initial=0)
                 if code == 'topo':
-                    value.SetRange(minVal = -1e9, maxVal = 1e9)
+                    value.SetRange(minVal=-1e9, maxVal=1e9)
                 elif code in ('shine', 'transp'):
-                    value.SetRange(minVal = 0, maxVal = 100)
-                
+                    value.SetRange(minVal=0, maxVal=100)
+
                 value.Bind(wx.EVT_SPINCTRL, self.OnVolumeIsosurfMap)
                 value.Bind(wx.EVT_TEXT, self.OnVolumeIsosurfMap)
-            
+
             if value:
                 self.win['volume'][code]['const'] = value.GetId()
                 if code == 'topo':
-                    gridSizer.Add(item = value, flag = wx.ALIGN_CENTER_VERTICAL,
-                                  pos = (row, 2))
+                    gridSizer.Add(item=value, flag=wx.ALIGN_CENTER_VERTICAL,
+                                  pos=(row, 2))
                 else:
                     value.Enable(False)
-                    gridSizer.Add(item = value, flag = wx.ALIGN_CENTER_VERTICAL,
-                                  pos = (row, 3))
+                    gridSizer.Add(item=value, flag=wx.ALIGN_CENTER_VERTICAL,
+                                  pos=(row, 3))
             else:
                 self.win['volume'][code]['const'] = None
-            
+
             if code != 'topo':
-                self.SetMapObjUseMap(nvizType = 'volume',
-                                     attrb = code) # -> enable map / disable constant
-            
+                # -> enable map / disable constant
+                self.SetMapObjUseMap(nvizType='volume', attrb=code)
+
             row += 1
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        vSizer.Add(item = boxSizer, proportion = 1,
-                     flag = wx.EXPAND, border = 0)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+        vSizer.Add(item=boxSizer, proportion=1,
+                   flag=wx.EXPAND, border=0)
         panel.SetSizer(vSizer)
-        
+
         return panel
-    
+
     def _createSlicePanel(self, parent):
-        panel = wx.Panel(parent = parent, id = wx.ID_ANY)
-        
+        panel = wx.Panel(parent=parent, id=wx.ID_ANY)
+
         vSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                            label = " %s " % (_("Slice attributes")))
+
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % (_("Slice attributes")))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         hSizer = wx.BoxSizer()
-        
+
         self.win['volume']['slice'] = {}
-        hSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                      label = _("Slice parallel to axis:")), proportion = 0,
-                      flag = wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, border = 3)
-        axes = wx.Choice(parent = panel, id = wx.ID_ANY, size = (65, -1), choices = ("X", "Y", "Z"))
-        hSizer.Add(axes, proportion = 0, flag = wx.ALIGN_LEFT|wx.LEFT, border = 3)
+        hSizer.Add(
+            item=wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_("Slice parallel to axis:")),
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
+            border=3)
+        axes = wx.Choice(
+            parent=panel, id=wx.ID_ANY, size=(65, -1),
+            choices=("X", "Y", "Z"))
+        hSizer.Add(axes, proportion=0, flag=wx.ALIGN_LEFT | wx.LEFT, border=3)
         self.win['volume']['slice']['axes'] = axes.GetId()
         axes.Bind(wx.EVT_CHOICE, self.OnVolumeSliceAxes)
-        boxSizer.Add(hSizer, proportion = 0, flag = wx.ALL|wx.EXPAND, border = 3)
-        
-        gridSizer = wx.GridBagSizer(vgap = 3, hgap = 3)
-        
+        boxSizer.Add(hSizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
+
+        gridSizer = wx.GridBagSizer(vgap=3, hgap=3)
+
         # text labels
         for i in range(2):
-            label = wx.StaticText(parent = panel, id = wx.ID_ANY)
+            label = wx.StaticText(parent=panel, id=wx.ID_ANY)
             label.SetName('label_edge_' + str(i))
-            gridSizer.Add(item = label, pos = (0, i + 1),
-                          flag = wx.ALIGN_CENTER)
-        for i in range(2,4):
-            label = wx.StaticText(parent = panel, id = wx.ID_ANY)
+            gridSizer.Add(item=label, pos=(0, i + 1),
+                          flag=wx.ALIGN_CENTER)
+        for i in range(2, 4):
+            label = wx.StaticText(parent=panel, id=wx.ID_ANY)
             label.SetName('label_edge_' + str(i))
-            gridSizer.Add(item = label, pos = (3, i -1),
-                          flag = wx.ALIGN_CENTER)
+            gridSizer.Add(item=label, pos=(3, i - 1),
+                          flag=wx.ALIGN_CENTER)
         for i in range(2):
-            label = wx.StaticText(parent = panel, id = wx.ID_ANY)
+            label = wx.StaticText(parent=panel, id=wx.ID_ANY)
             label.SetName('label_coord_' + str(i))
-            gridSizer.Add(item = label, pos = (i + 1, 0),
-                          flag = wx.ALIGN_CENTER_VERTICAL)
-        label = wx.StaticText(parent = panel, id = wx.ID_ANY)
+            gridSizer.Add(item=label, pos=(i + 1, 0),
+                          flag=wx.ALIGN_CENTER_VERTICAL)
+        label = wx.StaticText(parent=panel, id=wx.ID_ANY)
         label.SetName('label_coord_2')
-        gridSizer.Add(item = label, pos = (4, 0), 
-                          flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(item=label, pos=(4, 0),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
         # sliders
         for i, coord in enumerate(('x1', 'x2')):
-            slider = wx.Slider(parent = panel, id = wx.ID_ANY, minValue = 0, maxValue = 100, value = 0)
+            slider = wx.Slider(
+                parent=panel,
+                id=wx.ID_ANY,
+                minValue=0,
+                maxValue=100,
+                value=0)
             self.win['volume']['slice']['slider_' + coord] = slider.GetId()
             slider.Bind(wx.EVT_SPIN, self.OnSlicePositionChange)
-            slider.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.OnSlicePositionChanged)
-            gridSizer.Add(item = slider, pos = (1, i + 1), 
-                          flag = wx.ALIGN_CENTER|wx.EXPAND)
-                        
+            slider.Bind(
+                wx.EVT_SCROLL_THUMBRELEASE,
+                self.OnSlicePositionChanged)
+            gridSizer.Add(item=slider, pos=(1, i + 1),
+                          flag=wx.ALIGN_CENTER | wx.EXPAND)
+
         for i, coord in enumerate(('y1', 'y2')):
-            slider = wx.Slider(parent = panel, id = wx.ID_ANY, minValue = 0, maxValue = 100, value = 0)
+            slider = wx.Slider(
+                parent=panel,
+                id=wx.ID_ANY,
+                minValue=0,
+                maxValue=100,
+                value=0)
             self.win['volume']['slice']['slider_' + coord] = slider.GetId()
             slider.Bind(wx.EVT_SPIN, self.OnSlicePositionChange)
-            slider.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.OnSlicePositionChanged)
-            gridSizer.Add(item = slider, pos = (2, i + 1), 
-                          flag = wx.ALIGN_CENTER|wx.EXPAND)
-        
+            slider.Bind(
+                wx.EVT_SCROLL_THUMBRELEASE,
+                self.OnSlicePositionChanged)
+            gridSizer.Add(item=slider, pos=(2, i + 1),
+                          flag=wx.ALIGN_CENTER | wx.EXPAND)
+
         for i, coord in enumerate(('z1', 'z2')):
-            slider = wx.Slider(parent = panel, id = wx.ID_ANY, minValue = 0, maxValue = 100, value = 0)
+            slider = wx.Slider(
+                parent=panel,
+                id=wx.ID_ANY,
+                minValue=0,
+                maxValue=100,
+                value=0)
             self.win['volume']['slice']['slider_' + coord] = slider.GetId()
             slider.Bind(wx.EVT_SPIN, self.OnSlicePositionChange)
-            slider.Bind(wx.EVT_SCROLL_THUMBRELEASE, self.OnSlicePositionChanged)
-            gridSizer.Add(item = slider, pos = (4,i+1), 
-                          flag = wx.ALIGN_CENTER|wx.EXPAND)
-                        
-        gridSizer.AddGrowableCol(0,1)
-        gridSizer.AddGrowableCol(1,2)
-        gridSizer.AddGrowableCol(2,2)
-        
-        boxSizer.Add(item = gridSizer, proportion = 1,
-                     flag = wx.ALL | wx.EXPAND, border = 3)
-        
+            slider.Bind(
+                wx.EVT_SCROLL_THUMBRELEASE,
+                self.OnSlicePositionChanged)
+            gridSizer.Add(item=slider, pos=(4, i + 1),
+                          flag=wx.ALIGN_CENTER | wx.EXPAND)
+
+        gridSizer.AddGrowableCol(0, 1)
+        gridSizer.AddGrowableCol(1, 2)
+        gridSizer.AddGrowableCol(2, 2)
+
+        boxSizer.Add(item=gridSizer, proportion=1,
+                     flag=wx.ALL | wx.EXPAND, border=3)
+
         # transparency, reset
         hSizer = wx.BoxSizer()
-        hSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                      label = _("Transparency:")), proportion = 0,
-                      flag = wx.ALIGN_CENTER_VERTICAL|wx.RIGHT|wx.TOP, border = 7)
-        spin = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (65, -1),
-                           min = 0, max = 100, initial = 0)
+        hSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                      label=_("Transparency:")), proportion=0,
+                   flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP, border=7)
+        spin = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(65, -1),
+                           min=0, max=100, initial=0)
         spin.Bind(wx.EVT_SPINCTRL, self.OnSliceTransparency)
         self.win['volume']['slice']['transp'] = spin.GetId()
-        hSizer.Add(item = spin, proportion = 0,
-                      flag = wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.TOP, border = 7)
-                    
-        hSizer.Add(item = wx.Size(-1, -1), proportion = 1,
-                      flag = wx.EXPAND)
-        reset = wx.Button(parent = panel, id = wx.ID_ANY, label = _("Reset"))
+        hSizer.Add(item=spin, proportion=0,
+                   flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.TOP, border=7)
+
+        hSizer.Add(item=wx.Size(-1, -1), proportion=1,
+                   flag=wx.EXPAND)
+        reset = wx.Button(parent=panel, id=wx.ID_ANY, label=_("Reset"))
         reset.Bind(wx.EVT_BUTTON, self.OnSliceReset)
         self.win['volume']['slice']['reset'] = reset.GetId()
-        hSizer.Add(item = reset, proportion = 0,
-                      flag = wx.ALIGN_CENTER_VERTICAL|wx.TOP, border = 7)
-        
-        boxSizer.Add(hSizer, proportion = 0, flag = wx.ALL|wx.EXPAND, border = 3)
+        hSizer.Add(item=reset, proportion=0,
+                   flag=wx.ALIGN_CENTER_VERTICAL | wx.TOP, border=7)
+
+        boxSizer.Add(hSizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=3)
         panel.SetSizer(boxSizer)
-        
+
         return panel
-    
-    def _createControl(self, parent, data, name, range, tooltip = None, bind = (None, None, None),
-                       sliderHor = True, size = 200, floatSlider = False):
+
+    def _createControl(self, parent, data, name, range, tooltip=None, bind=(
+            None, None, None), sliderHor=True, size=200, floatSlider=False):
         """Add control (Slider + TextCtrl)"""
         data[name] = dict()
         if sliderHor:
@@ -2611,88 +3061,86 @@ class NvizToolWindow(FN.FlatNotebook):
             style = wx.SL_VERTICAL | wx.SL_AUTOTICKS | \
                 wx.SL_INVERSE
             sizeW = (-1, size)
-        
-        kwargs = dict(parent = parent, id = wx.ID_ANY,
-                           minValue = range[0],
-                           maxValue = range[1],
-                           style = style,
-                           size = sizeW)
+
+        kwargs = dict(parent=parent, id=wx.ID_ANY,
+                      minValue=range[0],
+                      maxValue=range[1],
+                      style=style,
+                      size=sizeW)
         if floatSlider:
             slider = FloatSlider(**kwargs)
         else:
             slider = wx.Slider(**kwargs)
-            
+
         slider.SetName('slider')
         if bind[0]:
-            #EVT_SCROLL emits event after slider is released, EVT_SPIN not
+            # EVT_SCROLL emits event after slider is released, EVT_SPIN not
             slider.Bind(wx.EVT_SPIN, bind[0])
-        
+
         if bind[1]:
-            slider.Bind(wx.EVT_SCROLL_THUMBRELEASE, bind[1]) 
+            slider.Bind(wx.EVT_SCROLL_THUMBRELEASE, bind[1])
         data[name]['slider'] = slider.GetId()
-        
-        text = NumTextCtrl(parent = parent, id = wx.ID_ANY, size = (65, -1),
-                            style = wx.TE_PROCESS_ENTER)
-        
+
+        text = NumTextCtrl(parent=parent, id=wx.ID_ANY, size=(65, -1),
+                           style=wx.TE_PROCESS_ENTER)
+
         text.SetName('text')
         if tooltip:
             text.SetToolTipString(tooltip)
         if bind[2]:
             text.Bind(wx.EVT_TEXT_ENTER, bind[2])
             text.Bind(wx.EVT_KILL_FOCUS, bind[2])
-        
+
         data[name]['text'] = text.GetId()
-        
+
     def _createCompass(self, panel, sizer, type):
         """Create 'compass' widget for light and view page"""
-        w = wx.Button(panel, id = wx.ID_ANY, label = _("W"))
-        n = wx.Button(panel, id = wx.ID_ANY, label = _("N"))
-        s = wx.Button(panel, id = wx.ID_ANY, label = _("S"))
-        e = wx.Button(panel, id = wx.ID_ANY, label = _("E"))
-        nw = wx.Button(panel, id = wx.ID_ANY, label = _("NW"))
-        ne = wx.Button(panel, id = wx.ID_ANY, label = _("NE"))
-        se = wx.Button(panel, id = wx.ID_ANY, label = _("SE"))
-        sw = wx.Button(panel, id = wx.ID_ANY, label = _("SW"))
+        w = wx.Button(panel, id=wx.ID_ANY, label=_("W"))
+        n = wx.Button(panel, id=wx.ID_ANY, label=_("N"))
+        s = wx.Button(panel, id=wx.ID_ANY, label=_("S"))
+        e = wx.Button(panel, id=wx.ID_ANY, label=_("E"))
+        nw = wx.Button(panel, id=wx.ID_ANY, label=_("NW"))
+        ne = wx.Button(panel, id=wx.ID_ANY, label=_("NE"))
+        se = wx.Button(panel, id=wx.ID_ANY, label=_("SE"))
+        sw = wx.Button(panel, id=wx.ID_ANY, label=_("SW"))
         padding = 15
         if sys.platform == 'darwin':
             padding = 20
         minWidth = sw.GetTextExtent(sw.GetLabel())[0] + padding
         for win, name in zip((w, n, s, e, nw, ne, se, sw),
-                        ('w', 'n', 's', 'e', 'nw', 'ne', 'se', 'sw')):
+                             ('w', 'n', 's', 'e', 'nw', 'ne', 'se', 'sw')):
             win.SetMinSize((minWidth, -1))
             win.Bind(wx.EVT_BUTTON, self.OnLookFrom)
             win.SetName(type + '_' + name)
-        sizer.Add(item = nw, pos = (0, 0), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = n, pos = (0, 1), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = ne, pos = (0, 2), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = e, pos = (1, 2), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = se, pos = (2, 2), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = s, pos = (2, 1), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = sw, pos = (2, 0), flag = wx.ALIGN_CENTER)
-        sizer.Add(item = w, pos = (1, 0), flag = wx.ALIGN_CENTER)
-        
-        
-        
+        sizer.Add(item=nw, pos=(0, 0), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=n, pos=(0, 1), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=ne, pos=(0, 2), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=e, pos=(1, 2), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=se, pos=(2, 2), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=s, pos=(2, 1), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=sw, pos=(2, 0), flag=wx.ALIGN_CENTER)
+        sizer.Add(item=w, pos=(1, 0), flag=wx.ALIGN_CENTER)
+
     def __GetWindowName(self, data, id):
         for name in data.iterkeys():
-            if type(data[name]) is type({}):
+            if isinstance(data[name], type({})):
                 for win in data[name].itervalues():
                     if win == id:
                         return name
             else:
                 if data[name] == id:
                     return name
-        
+
         return None
 
     def UpdateSettings(self):
-        """Update view from settings values 
+        """Update view from settings values
         stored in self.mapWindow.view dictionary"""
         for control in ('height',
                         'persp',
                         'twist',
                         'z-exag'):
-            for win in self.win['view'][control].itervalues():             
+            for win in self.win['view'][control].itervalues():
                 try:
                     if control == 'height':
                         value = int(self.mapWindow.iview[control]['value'])
@@ -2700,157 +3148,162 @@ class NvizToolWindow(FN.FlatNotebook):
                         value = self.mapWindow.view[control]['value']
                 except KeyError:
                     value = -1
-                        
+
                 self.FindWindowById(win).SetValue(value)
-        
+
         viewWin = self.FindWindowById(self.win['view']['position'])
         x, y = viewWin.UpdatePos(self.mapWindow.view['position']['x'],
                                  self.mapWindow.view['position']['y'])
-        viewWin.Draw(pos = (x, y), scale = True)
+        viewWin.Draw(pos=(x, y), scale=True)
         viewWin.Refresh(False)
-        
-        color = self._getColorString(self.mapWindow.view['background']['color'])
+
+        color = self._getColorString(
+            self.mapWindow.view['background']['color'])
         self._display.SetBgColor(str(color))
-        
+
         self.Update()
-        
-        self.mapWindow.Refresh(eraseBackground = False)
+
+        self.mapWindow.Refresh(eraseBackground=False)
         self.mapWindow.render['quick'] = False
         self.mapWindow.Refresh(True)
-        
+
     def OnShowLightModel(self, event):
         """Show light model"""
         self._display.showLight = event.IsChecked()
         self._display.DrawLightingModel()
-        
+
     def OnLightChange(self, event):
         """Position of the light changing"""
         winName = self.__GetWindowName(self.win['light'], event.GetId())
         if not winName:
             return
-        
+
         value = self.FindWindowById(event.GetId()).GetValue()
-        
+
         self.mapWindow.light['position']['z'] = value
         for win in self.win['light'][winName].itervalues():
             self.FindWindowById(win).SetValue(value)
-            
+
         self.PostLightEvent()
-        
+
         event.Skip()
-        
+
     def OnLightChanged(self, event):
         """Light changed"""
-        self.PostLightEvent(refresh = True)
-        
+        self.PostLightEvent(refresh=True)
+
     def OnLightColor(self, event):
         """Color of the light changed"""
         self.mapWindow.light['color'] = tuple(event.GetValue())
-        
-        self.PostLightEvent(refresh = True)
-        
+
+        self.PostLightEvent(refresh=True)
+
         event.Skip()
-        
+
     def OnLightValue(self, event):
         """Light brightness/ambient changing"""
         data = self.mapWindow.light
         self.OnScroll(event, self.win['light'], data)
-        
+
         self.PostLightEvent()
         event.Skip()
-        
+
     def OnBgColor(self, event):
         """Background color changed"""
         color = event.GetValue()
         self.mapWindow.view['background']['color'] = tuple(color)
         color = str(color[0]) + ':' + str(color[1]) + ':' + str(color[2])
         self._display.SetBgColor(str(color))
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnSetSurface(self, event):
         """Surface selected, currently used for fringes"""
         name = event.GetString()
         try:
-            data = self._getLayerPropertiesByName(name, mapType = 'raster')['surface']
+            data = self._getLayerPropertiesByName(
+                name, mapType='raster')['surface']
         except:
             self.EnablePage('fringe', False)
             return
-        
-        layer = self._getMapLayerByName(name, mapType = 'raster')
+
+        layer = self._getMapLayerByName(name, mapType='raster')
         self.EnablePage('fringe', True)
-        
+
     def OnSetRaster(self, event):
         """Raster map selected, update surface page"""
         name = event.GetString()
         try:
-            data = self._getLayerPropertiesByName(name, mapType = 'raster')['surface']
+            data = self._getLayerPropertiesByName(
+                name, mapType='raster')['surface']
         except TypeError as e:
             self.EnablePage('surface', False)
             return
 
-        layer = self._getMapLayerByName(name, mapType = 'raster')
+        layer = self._getMapLayerByName(name, mapType='raster')
         self.EnablePage('surface', True)
-        self.UpdateSurfacePage(layer, data, updateName = False)
-        
+        self.UpdateSurfacePage(layer, data, updateName=False)
+
     def OnSetVector(self, event):
         """Vector map selected, update properties page"""
         name = event.GetString()
         try:
-            data = self._getLayerPropertiesByName(name, mapType = 'vector')['vector']
+            data = self._getLayerPropertiesByName(
+                name, mapType='vector')['vector']
         except:
             self.EnablePage('vector', False)
             return
-        layer = self._getMapLayerByName(name, mapType = 'vector')
+        layer = self._getMapLayerByName(name, mapType='vector')
         self.EnablePage('vector', True)
-        self.UpdateVectorPage(layer, data, updateName = False)
+        self.UpdateVectorPage(layer, data, updateName=False)
 
     def OnSetRaster3D(self, event):
         """3D Raster map selected, update surface page"""
         name = event.GetString()
         try:
-            data = self._getLayerPropertiesByName(name, mapType = '3d-raster')['volume']
+            data = self._getLayerPropertiesByName(
+                name, mapType='raster_3d')['volume']
         except:
             self.EnablePage('volume', False)
             return
-        
-        layer = self._getMapLayerByName(name, mapType = '3d-raster')
+
+        layer = self._getMapLayerByName(name, mapType='raster_3d')
         self.EnablePage('volume', True)
-        self.UpdateVolumePage(layer, data, updateName = False)
-        
+        self.UpdateVolumePage(layer, data, updateName=False)
+
     def OnViewChange(self, event):
         """Change view, render in quick mode"""
         # find control
         winName = self.__GetWindowName(self.win['view'], event.GetId())
         if not winName:
             return
-        
+
         value = self.FindWindowById(event.GetId()).GetValue()
         slider = self.FindWindowById(self.win['view'][winName]['slider'])
 
         if winName == 'persp' and not (0 <= value <= 180):
             return
 
-        self.AdjustSliderRange(slider = slider, value = value)
-        
+        self.AdjustSliderRange(slider=slider, value=value)
+
         if winName == 'height':
-            view = self.mapWindow.iview # internal
+            view = self.mapWindow.iview  # internal
         else:
             view = self.mapWindow.view
-        
+
         if winName == 'z-exag' and value >= 0:
-            self.PostViewEvent(zExag = True)
+            self.PostViewEvent(zExag=True)
         else:
-            self.PostViewEvent(zExag = False)
-        
+            self.PostViewEvent(zExag=False)
+
         if winName in ('persp', 'twist'):
             convert = int
         else:
             convert = float
-        
+
         view[winName]['value'] = convert(value)
-            
+
         for win in self.win['view'][winName].itervalues():
             self.FindWindowById(win).SetValue(value)
 
@@ -2858,28 +3311,28 @@ class NvizToolWindow(FN.FlatNotebook):
         self.mapWindow.render['quick'] = True
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-        
+
     def OnViewChanged(self, event):
         """View changed, render in full resolution"""
         self.mapWindow.render['quick'] = False
         self.mapWindow.Refresh(False)
         self.UpdateSettings()
-        try:# when calling event = None
+        try:  # when calling event = None
             event.Skip()
         except AttributeError:
             pass
-            
+
     def OnViewChangedText(self, event):
         """View changed, render in full resolution"""
         self.mapWindow.render['quick'] = False
         self.OnViewChange(event)
         self.OnViewChanged(None)
         self.Update()
-        
+
         event.Skip()
-    
+
     def OnLookAt(self, event):
         """Look here/center"""
         name = self.FindWindowById(event.GetId()).GetName()
@@ -2892,10 +3345,10 @@ class NvizToolWindow(FN.FlatNotebook):
         elif name == 'top':
             self.mapWindow.view['position']['x'] = 0.5
             self.mapWindow.view['position']['y'] = 0.5
-            self.PostViewEvent(zExag = True)
+            self.PostViewEvent(zExag=True)
             self.UpdateSettings()
             self.mapWindow.Refresh(False)
-        else: # here
+        else:  # here
             if self.FindWindowById(event.GetId()).GetValue():
                 self.mapDisplay.Raise()
                 self.mapWindow.mouse['use'] = 'lookHere'
@@ -2903,36 +3356,36 @@ class NvizToolWindow(FN.FlatNotebook):
             else:
                 self.mapWindow.mouse['use'] = 'default'
                 self.mapWindow.SetNamedCursor('default')
-            
+
     def OnResetView(self, event):
         """Reset to default view (view page)"""
         self.mapWindow.ResetView()
         self.UpdateSettings()
         self.mapWindow.Refresh(False)
-        
+
     def OnResetSurfacePosition(self, event):
         """Reset position of surface"""
-        
+
         for win in self.win['surface']['position'].itervalues():
             if win == self.win['surface']['position']['axis']:
-                self.FindWindowById(win).SetSelection(2) # Z
+                self.FindWindowById(win).SetSelection(2)  # Z
             elif win == self.win['surface']['position']['reset']:
                 continue
             else:
                 self.FindWindowById(win).SetValue(0)
-                
+
         data = self.GetLayerData('surface')
         data['surface']['position']['x'] = 0
         data['surface']['position']['y'] = 0
         data['surface']['position']['z'] = 0
         data['surface']['position']['update'] = None
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-            
+
     def OnLookFrom(self, event):
         """Position of view/light changed by buttons"""
         name = self.FindWindowById(event.GetId()).GetName()
@@ -2943,40 +3396,40 @@ class NvizToolWindow(FN.FlatNotebook):
         else:
             type = 'light'
             data = self.mapWindow.light
-        if buttonName == 'n': # north
+        if buttonName == 'n':  # north
             data['position']['x'] = 0.5
             data['position']['y'] = 0.0
-        elif buttonName == 's': # south
+        elif buttonName == 's':  # south
             data['position']['x'] = 0.5
             data['position']['y'] = 1.0
-        elif buttonName == 'e': # east
+        elif buttonName == 'e':  # east
             data['position']['x'] = 1.0
             data['position']['y'] = 0.5
-        elif buttonName =='w': # west
+        elif buttonName == 'w':  # west
             data['position']['x'] = 0.0
             data['position']['y'] = 0.5
-        elif buttonName == 'nw': # north-west
+        elif buttonName == 'nw':  # north-west
             data['position']['x'] = 0.0
             data['position']['y'] = 0.0
-        elif buttonName == 'ne': # north-east
+        elif buttonName == 'ne':  # north-east
             data['position']['x'] = 1.0
             data['position']['y'] = 0.0
-        elif buttonName == 'se': # south-east
+        elif buttonName == 'se':  # south-east
             data['position']['x'] = 1.0
             data['position']['y'] = 1.0
-        elif buttonName == 'sw': # south-west
+        elif buttonName == 'sw':  # south-west
             data['position']['x'] = 0.0
             data['position']['y'] = 1.0
-        if type == 'view':    
-            self.PostViewEvent(zExag = True)
-            
+        if type == 'view':
+            self.PostViewEvent(zExag=True)
+
             self.UpdateSettings()
         else:
             self.PostLightEvent()
             lightWin = self.FindWindowById(self.win['light']['position'])
             x, y = lightWin.UpdatePos(self.mapWindow.light['position']['x'],
-                                     self.mapWindow.light['position']['y'])
-            lightWin.Draw(pos = (x, y), scale = True)
+                                      self.mapWindow.light['position']['y'])
+            lightWin.Draw(pos=(x, y), scale=True)
             lightWin.Refresh(False)
         self.mapWindow.render['quick'] = False
         self.mapWindow.Refresh(False)
@@ -2985,9 +3438,9 @@ class NvizToolWindow(FN.FlatNotebook):
         """Set surface attribute -- use -- map/constant"""
         if not self.mapWindow.init:
             return
-        
+
         wx.Yield()
-        
+
         # find attribute row
         attrb = self.__GetWindowName(self.win['surface'], event.GetId())
         if not attrb:
@@ -2995,256 +3448,292 @@ class NvizToolWindow(FN.FlatNotebook):
             nvizType = 'volume'
         else:
             nvizType = 'surface'
-        
+
         selection = event.GetSelection()
-        if self.win[nvizType][attrb]['required']: # no 'unset'
+        if self.win[nvizType][attrb]['required']:  # no 'unset'
             selection += 1
-        if selection == 0: # unset
+        if selection == 0:  # unset
             useMap = None
             value = ''
-        elif selection == 1: # map
+        elif selection == 1:  # map
             useMap = True
-            value = self.FindWindowById(self.win[nvizType][attrb]['map']).GetValue()
-        elif selection == 2: # constant
+            value = self.FindWindowById(
+                self.win[nvizType][attrb]['map']).GetValue()
+        elif selection == 2:  # constant
             useMap = False
             if attrb == 'color':
-                value = self.FindWindowById(self.win[nvizType][attrb]['const']).GetColour()
+                value = self.FindWindowById(
+                    self.win[nvizType][attrb]['const']).GetColour()
                 value = self._getColorString(value)
             else:
-                value = self._getPercent(self.FindWindowById(self.win[nvizType][attrb]['const']).GetValue(), toPercent = False)
-        
-        self.SetMapObjUseMap(nvizType = nvizType,
-                             attrb = attrb, map = useMap)
-        
+                value = self._getPercent(
+                    self.FindWindowById(
+                        self.win[nvizType][attrb]['const']).GetValue(),
+                    toPercent=False)
+
+        self.SetMapObjUseMap(nvizType=nvizType,
+                             attrb=attrb, map=useMap)
+
         name = self.FindWindowById(self.win[nvizType]['map']).GetValue()
         if nvizType == 'surface':
-            data = self._getLayerPropertiesByName(name, mapType = 'raster')
-            data[nvizType]['attribute'][attrb] = { 'map' : useMap,
-                                                   'value' : str(value),
-                                                   'update' : None }
-        else: # volume / isosurface
-            data = self._getLayerPropertiesByName(name, mapType = '3d-raster')
+            data = self._getLayerPropertiesByName(name, mapType='raster')
+            data[nvizType]['attribute'][attrb] = {'map': useMap,
+                                                  'value': str(value),
+                                                  'update': None}
+        else:  # volume / isosurface
+            data = self._getLayerPropertiesByName(name, mapType='raster_3d')
             list = self.FindWindowById(self.win['volume']['isosurfs'])
             id = list.GetSelection()
             if id != -1:
-                data[nvizType]['isosurface'][id][attrb] = { 'map' : useMap,
-                                                            'value' : str(value),
-                                                            'update' : None }
-        
+                data[nvizType]['isosurface'][id][attrb] = {'map': useMap,
+                                                           'value': str(value),
+                                                           'update': None}
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
- 
-    def EnablePage(self, name, enabled = True):
+
+    def EnablePage(self, name, enabled=True):
         """Enable/disable all widgets on page"""
         for key, item in self.win[name].iteritems():
-            if key in ('map', 'surface', 'new','planes'):
+            if key in ('map', 'surface', 'new', 'planes'):
                 continue
-            if type(item) == types.DictType:
+            if isinstance(item, types.DictType):
                 for skey, sitem in self.win[name][key].iteritems():
-                    if type(sitem) == types.DictType:
+                    if isinstance(sitem, types.DictType):
                         for ssitem in self.win[name][key][skey].itervalues():
-                            if type(ssitem) == types.IntType:
+                            if not isinstance(ssitem, types.BooleanType) and \
+                               isinstance(ssitem, types.IntType):
                                 self.FindWindowById(ssitem).Enable(enabled)
                     else:
-                        if type(sitem) == types.IntType:
+                        # type(bool) != types.IntType but
+                        # isinstance(bool) == types.IntType
+                        if not isinstance(sitem, types.BooleanType) and \
+                           isinstance(sitem, types.IntType):
                             self.FindWindowById(sitem).Enable(enabled)
             else:
-                if type(item) == types.IntType:
+                if not isinstance(item, types.BooleanType) and \
+                   isinstance(item, types.IntType):
                     self.FindWindowById(item).Enable(enabled)
-        
-    def SetMapObjUseMap(self, nvizType, attrb, map = None):
+
+    def SetMapObjUseMap(self, nvizType, attrb, map=None):
         """Update dialog widgets when attribute type changed"""
         if attrb in ('topo', 'color', 'shine'):
-            incSel = -1 # decrement selection (no 'unset')
+            incSel = -1  # decrement selection (no 'unset')
         else:
             incSel = 0
         if nvizType == 'volume' and attrb == 'topo':
             return
-        if map is True: # map
-            if attrb != 'topo': # changing map topography not allowed
-                # not sure why, but here must be disabled both ids, should be fixed!
-                self.FindWindowById(self.win[nvizType][attrb]['map']).Enable(True)
+        if map is True:  # map
+            if attrb != 'topo':  # changing map topography not allowed
+                # not sure why, but here must be disabled both ids, should be
+                # fixed!
+                self.FindWindowById(
+                    self.win[nvizType][attrb]['map']).Enable(True)
             if self.win[nvizType][attrb]['const']:
-                self.FindWindowById(self.win[nvizType][attrb]['const']).Enable(False)
-            self.FindWindowById(self.win[nvizType][attrb]['use']).SetSelection(1 + incSel)
-        elif map is False: # const
+                self.FindWindowById(
+                    self.win[nvizType][attrb]['const']).Enable(False)
+            self.FindWindowById(
+                self.win[nvizType][attrb]['use']).SetSelection(
+                1 + incSel)
+        elif map is False:  # const
             self.FindWindowById(self.win[nvizType][attrb]['map']).Enable(False)
             if self.win[nvizType][attrb]['const']:
-                self.FindWindowById(self.win[nvizType][attrb]['const']).Enable(True)
-            self.FindWindowById(self.win[nvizType][attrb]['use']).SetSelection(2 + incSel)
-        else: # unset
-            self.FindWindowById(self.win[nvizType][attrb]['use']).SetSelection(0)
+                self.FindWindowById(
+                    self.win[nvizType][attrb]['const']).Enable(True)
+            self.FindWindowById(
+                self.win[nvizType][attrb]['use']).SetSelection(
+                2 + incSel)
+        else:  # unset
+            self.FindWindowById(
+                self.win[nvizType][attrb]['use']).SetSelection(0)
             self.FindWindowById(self.win[nvizType][attrb]['map']).Enable(False)
             if self.win[nvizType][attrb]['const']:
-                self.FindWindowById(self.win[nvizType][attrb]['const']).Enable(False)
-            
-        
+                self.FindWindowById(
+                    self.win[nvizType][attrb]['const']).Enable(False)
+
     def OnSurfaceMap(self, event):
         """Set surface attribute"""
         if self.vetoGSelectEvt:
             self.vetoGSelectEvt = False
             return
-        self.SetMapObjAttrb(nvizType = 'surface', winId = event.GetId())
-        
+        self.SetMapObjAttrb(nvizType='surface', winId=event.GetId())
+
     def SetMapObjAttrb(self, nvizType, winId):
         """Set map object (surface/isosurface) attribute (map/constant)"""
         if not self.mapWindow.init:
             return
-        
+
         attrb = self.__GetWindowName(self.win[nvizType], winId)
         if not attrb:
             return
-        
+
         if not (nvizType == 'volume' and attrb == 'topo'):
-            selection = self.FindWindowById(self.win[nvizType][attrb]['use']).GetSelection()
+            selection = self.FindWindowById(
+                self.win[nvizType][attrb]['use']).GetSelection()
             if self.win[nvizType][attrb]['required']:
                 selection += 1
 
-            if selection == 0: # unset
+            if selection == 0:  # unset
                 useMap = None
                 value = ''
-            elif selection == 1: # map
-                value = self.FindWindowById(self.win[nvizType][attrb]['map']).GetValue()
+            elif selection == 1:  # map
+                value = self.FindWindowById(
+                    self.win[nvizType][attrb]['map']).GetValue()
                 useMap = True
-            else: # constant
+            else:  # constant
                 if attrb == 'color':
-                    value = self.FindWindowById(self.win[nvizType][attrb]['const']).GetColour()
+                    value = self.FindWindowById(
+                        self.win[nvizType][attrb]['const']).GetColour()
                     # tuple to string
                     value = self._getColorString(value)
                 else:
                     value = self._getPercent(
-                        self.FindWindowById(self.win[nvizType][attrb]['const']).GetValue(), toPercent = False)
-                    
+                        self.FindWindowById(
+                            self.win[nvizType][attrb]['const']).GetValue(),
+                        toPercent=False)
+
                 useMap = False
         else:
             useMap = None
-            value = self.FindWindowById(self.win[nvizType][attrb]['const']).GetValue()
+            value = self.FindWindowById(
+                self.win[nvizType][attrb]['const']).GetValue()
         if not self.pageChanging:
             name = self.FindWindowById(self.win[nvizType]['map']).GetValue()
             if nvizType == 'surface':
-                data = self._getLayerPropertiesByName(name, mapType = 'raster')
-                data[nvizType]['attribute'][attrb] = { 'map' : useMap,
-                                                       'value' : str(value),
-                                                       'update' : None }
+                data = self._getLayerPropertiesByName(name, mapType='raster')
+                data[nvizType]['attribute'][attrb] = {'map': useMap,
+                                                      'value': str(value),
+                                                      'update': None}
             else:
-                data = self._getLayerPropertiesByName(name, mapType = '3d-raster')
+                data = self._getLayerPropertiesByName(
+                    name, mapType='raster_3d')
                 list = self.FindWindowById(self.win['volume']['isosurfs'])
                 id = list.GetSelection()
                 if id > -1:
-                    data[nvizType]['isosurface'][id][attrb] = { 'map' : useMap,
-                                                                'value' : str(value),
-                                                                'update' : None }
+                    data[nvizType]['isosurface'][id][attrb] = {
+                        'map': useMap, 'value': str(value), 'update': None}
                     if attrb == 'topo':
-                        list = self.FindWindowById(self.win['volume']['isosurfs'])
+                        list = self.FindWindowById(
+                            self.win['volume']['isosurfs'])
                         sel = list.GetSelection()
                         list.SetString(sel, "%s %s" % (_("Level"), str(value)))
                         list.Check(sel)
-            
+
             # update properties
-            event = wxUpdateProperties(data = data)
+            event = wxUpdateProperties(data=data)
             wx.PostEvent(self.mapWindow, event)
-            
+
             if self.mapDisplay.IsAutoRendered():
                 self.mapWindow.Refresh(False)
-        
+
     def OnSurfaceResolution(self, event):
         """Draw resolution changed"""
         self.SetSurfaceResolution()
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-    
 
     def SetSurfaceResolution(self):
         """Set draw resolution"""
-        coarse = self.FindWindowById(self.win['surface']['draw']['res-coarse']).GetValue()
-        fine = self.FindWindowById(self.win['surface']['draw']['res-fine']).GetValue()
-        
+        coarse = self.FindWindowById(
+            self.win['surface']['draw']['res-coarse']).GetValue()
+        fine = self.FindWindowById(
+            self.win['surface']['draw']['res-fine']).GetValue()
+
         data = self.GetLayerData('surface')
-        data['surface']['draw']['resolution'] = { 'coarse' : coarse,
-                                                  'fine' : fine,
-                                                  'update' : None }
-        
+        data['surface']['draw']['resolution'] = {'coarse': coarse,
+                                                 'fine': fine,
+                                                 'update': None}
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
     def SetSurfaceMode(self):
         """Set draw mode"""
-        mode = self.FindWindowById(self.win['surface']['draw']['mode']).GetSelection()
-        style = self.FindWindowById(self.win['surface']['draw']['style']).GetSelection()
-        if style == 0: # wire
-            self.FindWindowById(self.win['surface']['draw']['wire-color']).Enable(True)
-        elif style == 1: # surface
-            self.FindWindowById(self.win['surface']['draw']['wire-color']).Enable(False)
-        
-        shade = self.FindWindowById(self.win['surface']['draw']['shading']).GetSelection()
-        
-        value, desc = self.mapWindow.nvizDefault.GetDrawMode(mode, style, shade)
-        
+        mode = self.FindWindowById(
+            self.win['surface']['draw']['mode']).GetSelection()
+        style = self.FindWindowById(
+            self.win['surface']['draw']['style']).GetSelection()
+        if style == 0:  # wire
+            self.FindWindowById(self.win['surface']['draw'][
+                                'wire-color']).Enable(True)
+        elif style == 1:  # surface
+            self.FindWindowById(self.win['surface']['draw'][
+                                'wire-color']).Enable(False)
+
+        shade = self.FindWindowById(
+            self.win['surface']['draw']['shading']).GetSelection()
+
+        value, desc = self.mapWindow.nvizDefault.GetDrawMode(
+            mode, style, shade)
+
         return value, desc
 
     def OnSurfaceMode(self, event):
         """Set draw mode"""
         value, desc = self.SetSurfaceMode()
-        
+
         data = self.GetLayerData('surface')
-        data['surface']['draw']['mode'] = { 'value' : value,
-                                            'desc' : desc,
-                                            'update' : None }
-        
+        data['surface']['draw']['mode'] = {'value': value,
+                                           'desc': desc,
+                                           'update': None}
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
 
     def OnSurfaceModeAll(self, event):
         """Set draw mode (including wire color) for all loaded surfaces"""
         value, desc = self.SetSurfaceMode()
-        coarse = self.FindWindowById(self.win['surface']['draw']['res-coarse']).GetValue()
-        fine = self.FindWindowById(self.win['surface']['draw']['res-fine']).GetValue()
-        color = self.FindWindowById(self.win['surface']['draw']['wire-color']).GetColour()
+        coarse = self.FindWindowById(
+            self.win['surface']['draw']['res-coarse']).GetValue()
+        fine = self.FindWindowById(
+            self.win['surface']['draw']['res-fine']).GetValue()
+        color = self.FindWindowById(
+            self.win['surface']['draw']['wire-color']).GetColour()
         cvalue = self._getColorString(color)
-        
-        for name in self.mapWindow.GetLayerNames(type = 'raster'):
-            
-            data = self._getLayerPropertiesByName(name, mapType = 'raster')
+
+        for name in self.mapWindow.GetLayerNames(type='raster'):
+
+            data = self._getLayerPropertiesByName(name, mapType='raster')
             if not data:
-                continue # shouldy no happen
-            
+                continue  # shouldy no happen
+
             data['surface']['draw']['all'] = True
-            data['surface']['draw']['mode'] = { 'value' : value,
-                                                'desc' : desc,
-                                                'update' : None }
-            data['surface']['draw']['resolution'] = { 'coarse' : coarse,
-                                                      'fine' : fine,
-                                                      'update' : None }
-            data['surface']['draw']['wire-color'] = { 'value' : cvalue,
-                                                      'update' : None }
-            
+            data['surface']['draw']['mode'] = {'value': value,
+                                               'desc': desc,
+                                               'update': None}
+            data['surface']['draw']['resolution'] = {'coarse': coarse,
+                                                     'fine': fine,
+                                                     'update': None}
+            data['surface']['draw']['wire-color'] = {'value': cvalue,
+                                                     'update': None}
+
             # update properties
-            event = wxUpdateProperties(data = data)
+            event = wxUpdateProperties(data=data)
             wx.PostEvent(self.mapWindow, event)
-            
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def _getColorString(self, color):
         """Convert color tuple to R:G:B format
 
         :param color: tuple
-        
+
         :return: string R:G:B
         """
         return str(color[0]) + ':' + str(color[1]) + ':' + str(color[2])
-    
-    def _getColorFromString(self, color, delim = ':'):
+
+    def _getColorFromString(self, color, delim=':'):
         """Convert color string (R:G:B) to wx.Colour
 
         :param color: string
@@ -3253,111 +3742,113 @@ class NvizToolWindow(FN.FlatNotebook):
         :return: wx.Colour instance
         """
         return wx.Colour(*map(int, color.split(delim)))
-    
+
     def _get3dRange(self, name):
         """Gelper func for getting range of 3d map"""
-        ret = RunCommand('r3.info', read = True, flags = 'r', map = name)
+        ret = RunCommand('r3.info', read=True, flags='r', map=name)
         if ret:
             range = []
             for value in ret.strip('\n').split('\n'):
                 range.append(float(value.split('=')[1]))
             return range
-        
+
         return -1e6, 1e6
-    
-    def _getPercent(self, value, toPercent = True):
+
+    def _getPercent(self, value, toPercent=True):
         """Convert values 0 - 255 to percents and vice versa"""
         value = int(value)
         if toPercent:
-            value = int(value/255. * 100)
+            value = int(value / 255. * 100)
         else:
-            value = int(value/100. * 255)
+            value = int(value / 100. * 255)
         return value
-    
+
     def OnSurfaceWireColor(self, event):
         """Set wire color"""
         data = self.GetLayerData('surface')
         value = self._getColorString(event.GetValue())
-        data['surface']['draw']['wire-color'] = { 'value' : value,
-                                                  'update' : None }
-        
+        data['surface']['draw']['wire-color'] = {'value': value,
+                                                 'update': None}
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnSurfaceAxis(self, event):
         """Surface position, axis changed"""
         data = self.GetLayerData('surface')
         id = data['surface']['object']['id']
-        
-        axis = self.FindWindowById(self.win['surface']['position']['axis']).GetSelection()
+
+        axis = self.FindWindowById(
+            self.win['surface']['position']['axis']).GetSelection()
         slider = self.FindWindowById(self.win['surface']['position']['slider'])
         text = self.FindWindowById(self.win['surface']['position']['text'])
         xydim = self._display.GetLongDim()
         zdim = self._display.GetZRange()
         zdim = zdim[1] - zdim[0]
-        
+
         x, y, z = self._display.GetSurfacePosition(id)
-        
-        if axis == 0: # x
+
+        if axis == 0:  # x
             slider.SetRange(-3 * xydim, 3 * xydim)
             slider.SetValue(x)
             text.SetValue(x)
-        elif axis == 1: # y
+        elif axis == 1:  # y
             slider.SetRange(-3 * xydim, 3 * xydim)
             slider.SetValue(y)
             text.SetValue(y)
-        else: # z
+        else:  # z
             slider.SetRange(-3 * zdim, 3 * zdim)
             slider.SetValue(z)
             text.SetValue(z)
-        
+
     def OnSurfacePosition(self, event):
         """Surface position"""
         winName = self.__GetWindowName(self.win['surface'], event.GetId())
         if not winName:
             return
-        axis = self.FindWindowById(self.win['surface']['position']['axis']).GetSelection()
-        
+        axis = self.FindWindowById(
+            self.win['surface']['position']['axis']).GetSelection()
+
         value = self.FindWindowById(event.GetId()).GetValue()
         slider = self.FindWindowById(self.win['surface'][winName]['slider'])
-        self.AdjustSliderRange(slider = slider, value = value)
-        
+        self.AdjustSliderRange(slider=slider, value=value)
+
         for win in self.win['surface']['position'].itervalues():
             if win in (self.win['surface']['position']['axis'],
                        self.win['surface']['position']['reset']):
                 continue
             else:
                 self.FindWindowById(win).SetValue(value)
-        
+
         data = self.GetLayerData('surface')
         id = data['surface']['object']['id']
         x, y, z = self._display.GetSurfacePosition(id)
-        
-        if axis == 0: # x
+
+        if axis == 0:  # x
             x = value
-        elif axis == 1: # y
+        elif axis == 1:  # y
             y = value
-        else: # z
+        else:  # z
             z = value
-        
+
         data['surface']['position']['x'] = x
         data['surface']['position']['y'] = y
         data['surface']['position']['z'] = z
         data['surface']['position']['update'] = None
         # update properties
-        
-        event = wxUpdateProperties(data = data)
+
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         self.mapWindow.render['quick'] = True
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
         #        self.UpdatePage('surface')
-        
+
     def OnSurfacePositionChanged(self, event):
         """Surface position changed"""
         self.mapWindow.render['quick'] = False
@@ -3367,158 +3858,176 @@ class NvizToolWindow(FN.FlatNotebook):
         """Surface position changed by textctrl"""
         self.OnSurfacePosition(event)
         self.OnSurfacePositionChanged(None)
-        
+
     def UpdateVectorShow(self, vecType, enabled):
         """Enable/disable lines/points widgets
-        
+
         :param vecType: vector type (lines, points)
         """
         if vecType != 'lines' and vecType != 'points':
             return False
-        
+
         for win in self.win['vector'][vecType].keys():
             if win == 'show':
                 continue
-            if type(self.win['vector'][vecType][win]) == type({}):
+            if isinstance(self.win['vector'][vecType][win], type({})):
                 for swin in self.win['vector'][vecType][win].keys():
                     if enabled:
-                        self.FindWindowById(self.win['vector'][vecType][win][swin]).Enable(True)
+                        self.FindWindowById(
+                            self.win['vector'][vecType][win][swin]).Enable(True)
                     else:
-                        self.FindWindowById(self.win['vector'][vecType][win][swin]).Enable(False)
+                        self.FindWindowById(
+                            self.win['vector'][vecType][win][swin]).Enable(False)
             else:
                 if enabled:
-                    self.FindWindowById(self.win['vector'][vecType][win]).Enable(True)
+                    self.FindWindowById(
+                        self.win['vector'][vecType][win]).Enable(True)
                 else:
-                    self.FindWindowById(self.win['vector'][vecType][win]).Enable(False)
-        
+                    self.FindWindowById(
+                        self.win['vector'][vecType][win]).Enable(False)
+
         return True
-    
+
     def OnVectorShow(self, event):
         """Show vector lines/points"""
         winId = event.GetId()
         if winId == self.win['vector']['lines']['show']:
             vecType = 'lines'
             points = False
-        else: # points
-            vecType = 'points' 
+        else:  # points
+            vecType = 'points'
             points = True
-       
+
         checked = event.IsChecked()
         name = self.FindWindowById(self.win['vector']['map']).GetValue()
-        items = self.tree.FindItemByData(key = 'name', value = name)
+        items = self.tree.FindItemByData(key='name', value=name)
         for item in items:
-            if self.tree.GetLayerInfo(item, key = 'type') == 'vector':
+            if self.tree.GetLayerInfo(item, key='type') == 'vector':
                 break
         data = self.GetLayerData('vector')['vector']
-        
+
         if checked:
-            self.mapWindow.LoadVector(item, points = points, append = False)
+            self.mapWindow.LoadVector(item, points=points, append=False)
         else:
-            self.mapWindow.UnloadVector(item, points = points, remove = False)
-        
+            self.mapWindow.UnloadVector(item, points=points, remove=False)
+
         self.UpdateVectorShow(vecType, checked)
-        
+
         if checked:
             try:
                 id = data[vecType]['object']['id']
             except KeyError:
                 id = -1
-            
+
             if id > 0:
                 self.mapWindow.SetMapObjProperties(item, id, vecType)
-                
+
                 # update properties
-                event = wxUpdateProperties(data = data)
+                event = wxUpdateProperties(data=data)
                 wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-    
+
     def OnVectorLinesMode(self, event):
         """Display vector lines on surface/3d"""
         rasters = self.mapWindow.GetLayerNames('raster')
-        if event.GetSelection() == 0: # surface
+        if event.GetSelection() == 0:  # surface
             if len(rasters) < 1:
-                self.FindWindowById(self.win['vector']['lines']['surface']).Enable(False)
-                self.FindWindowById(self.win['vector']['lines']['3d']).SetSelection(1)
+                self.FindWindowById(
+                    self.win['vector']['lines']['surface']).Enable(False)
+                self.FindWindowById(
+                    self.win['vector']['lines']['3d']).SetSelection(1)
                 return
-            
-            self.FindWindowById(self.win['vector']['lines']['surface']).Enable(True)
+
+            self.FindWindowById(
+                self.win['vector']['lines']['surface']).Enable(True)
             # set first found surface
             data = self.GetLayerData('vector')
             data['vector']['lines']['mode']['surface'] = rasters[0]
-            self.FindWindowById(self.win['vector']['lines']['surface']).SetStringSelection( \
+            self.FindWindowById(
+                self.win['vector']['lines']['surface']).SetStringSelection(
                 rasters[0])
-        else: # 3D
-            self.FindWindowById(self.win['vector']['lines']['surface']).Enable(False)
-        
+        else:  # 3D
+            self.FindWindowById(self.win['vector']['lines'][
+                                'surface']).Enable(False)
+
         self.OnVectorLines(event)
-        
+
         event.Skip()
 
     def OnVectorLines(self, event):
         """Set vector lines mode, apply changes if auto-rendering is enabled"""
         data = self.GetLayerData('vector')
-        width = self.FindWindowById(self.win['vector']['lines']['width']).GetValue()
-        
+        width = self.FindWindowById(
+            self.win['vector']['lines']['width']).GetValue()
+
         mode = {}
-        if self.FindWindowById(self.win['vector']['lines']['3d']).GetSelection() == 0:
+        if self.FindWindowById(self.win['vector']['lines'][
+                               '3d']).GetSelection() == 0:
             mode['type'] = 'surface'
             mode['surface'] = {}
-            checklist = self.FindWindowById(self.win['vector']['lines']['surface'])
+            checklist = self.FindWindowById(
+                self.win['vector']['lines']['surface'])
             value = list()
             checked = list()
             for surface in range(checklist.GetCount()):
                 value.append(checklist.GetString(surface))
                 checked.append(checklist.IsChecked(surface))
-                    
+
             mode['surface']['value'] = value
             mode['surface']['show'] = checked
         else:
             mode['type'] = '3d'
-        
+
         for attrb in ('width', 'mode'):
             data['vector']['lines'][attrb]['update'] = None
         data['vector']['lines']['width']['value'] = width
         data['vector']['lines']['mode'] = mode
-        
-        color = self.FindWindowById(self.win['vector']['lines']['color']).GetColour()
-        
+
+        color = self.FindWindowById(
+            self.win['vector']['lines']['color']).GetColour()
+
         if isinstance(color, csel.ColourSelect):
-            pass #color picker not yet instantiated
+            pass  # color picker not yet instantiated
         else:
             color = str(color[0]) + ':' + str(color[1]) + ':' + str(color[2])
             data['vector']['lines']['color']['update'] = None
             data['vector']['lines']['color']['value'] = color
-        
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-                        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
 
     def OnVectorPointsMode(self, event):
         rasters = self.mapWindow.GetLayerNames('raster')
-        if event.GetSelection() == 0: # surface
+        if event.GetSelection() == 0:  # surface
             if len(rasters) < 1:
-                self.FindWindowById(self.win['vector']['points']['surface']).Enable(False)
-                self.FindWindowById(self.win['vector']['points']['3d']).SetSelection(1)
+                self.FindWindowById(
+                    self.win['vector']['points']['surface']).Enable(False)
+                self.FindWindowById(
+                    self.win['vector']['points']['3d']).SetSelection(1)
                 return
 
-            self.FindWindowById(self.win['vector']['points']['surface']).Enable(True)
+            self.FindWindowById(
+                self.win['vector']['points']['surface']).Enable(True)
             # set first found surface
             data = self.GetLayerData('vector')
             data['vector']['points']['mode']['surface']['value'] = rasters
             data['vector']['points']['mode']['3d'] = False
-            self.FindWindowById(self.win['vector']['points']['surface']).SetStringSelection( \
+            self.FindWindowById(
+                self.win['vector']['points']['surface']).SetStringSelection(
                 rasters[0])
-        else: # use z coordinate if 3d
+        else:  # use z coordinate if 3d
             data = self.GetLayerData('vector')
             data['vector']['points']['mode']['3d'] = True
-            self.FindWindowById(self.win['vector']['points']['surface']).Enable(False)
+            self.FindWindowById(self.win['vector']['points'][
+                                'surface']).Enable(False)
         data['vector']['points']['mode']['update'] = None
 
         self.OnVectorPoints(event)
@@ -3531,51 +4040,52 @@ class NvizToolWindow(FN.FlatNotebook):
             vtype = 'lines'
         else:
             vtype = 'points'
-        
+
         value = self.FindWindowById(id).GetValue()
-        slider = self.FindWindowById(self.win['vector'][vtype]['height']['slider'])
-        self.AdjustSliderRange(slider = slider, value = value)
-        
+        slider = self.FindWindowById(
+            self.win['vector'][vtype]['height']['slider'])
+        self.AdjustSliderRange(slider=slider, value=value)
+
         for win in self.win['vector'][vtype]['height'].itervalues():
             self.FindWindowById(win).SetValue(value)
-        
+
         data = self.GetLayerData('vector')
-        data['vector'][vtype]['height'] = { 'value' : value,
-                                            'update' : None }
-        
+        data['vector'][vtype]['height'] = {'value': value,
+                                           'update': None}
+
         # update properties
-        
-        event = wxUpdateProperties(data = data)
+
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         self.mapWindow.render['quick'] = True
         self.mapWindow.render['v' + vtype] = True
         self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-    
+
     def OnVectorHeightFull(self, event):
         """Vector height changed, render in full resolution"""
         self.OnVectorHeight(event)
-##        self.OnVectorSurface(event)
+# self.OnVectorSurface(event)
         id = event.GetId()
         if id in self.win['vector']['lines']['height'].values():
             vtype = 'lines'
         else:
             vtype = 'points'
-        
+
         self.mapWindow.render['quick'] = False
         self.mapWindow.render['v' + vtype] = False
         self.mapWindow.Refresh(False)
 
     def OnVectorHeightText(self, event):
         """Vector height changed, render in full resolution"""
-        
+
         #        self.OnVectorHeight(event)
         self.OnVectorHeightFull(event)
-    
+
     def OnVectorSurface(self, event):
-        """Reference surface for vector map (lines/points)""" 
+        """Reference surface for vector map (lines/points)"""
         id = event.GetId()
         if id == self.win['vector']['lines']['surface']:
             vtype = 'lines'
@@ -3587,46 +4097,48 @@ class NvizToolWindow(FN.FlatNotebook):
         for items in range(checkList.GetCount()):
             checked.append(checkList.IsChecked(items))
             surfaces.append(checkList.GetString(items))
-        
+
         data = self.GetLayerData('vector')
-        data['vector'][vtype]['mode']['surface'] = { 'value' : surfaces,
-                                                     'show'  : checked}
-        data['vector'][vtype]['mode']['update'] = None 
-        
+        data['vector'][vtype]['mode']['surface'] = {'value': surfaces,
+                                                    'show': checked}
+        data['vector'][vtype]['mode']['update'] = None
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-            
-        
+
     def OnVectorPoints(self, event):
         """Set vector points mode, apply changes if auto-rendering is enabled"""
         data = self.GetLayerData('vector')
-        
-        size  = self.FindWindowById(self.win['vector']['points']['size']).GetValue()
-        marker = self.FindWindowById(self.win['vector']['points']['marker']).GetSelection()
+
+        size = self.FindWindowById(
+            self.win['vector']['points']['size']).GetValue()
+        marker = self.FindWindowById(
+            self.win['vector']['points']['marker']).GetSelection()
         #        width = self.FindWindowById(self.win['vector']['points']['width']).GetValue()
-        
+
         for attrb in ('size', 'marker'):
             data['vector']['points'][attrb]['update'] = None
         data['vector']['points']['size']['value'] = size
         #        data['vector']['points']['width']['value'] = width
         data['vector']['points']['marker']['value'] = marker
-        
-        color = self.FindWindowById(self.win['vector']['points']['color']).GetColour()
+
+        color = self.FindWindowById(
+            self.win['vector']['points']['color']).GetColour()
         if isinstance(color, csel.ColourSelect):
-            pass #color picker not yet instantiated
+            pass  # color picker not yet instantiated
         else:
             color = str(color[0]) + ':' + str(color[1]) + ':' + str(color[2])
             data['vector']['points']['color']['update'] = None
             data['vector']['points']['color']['value'] = color
-        
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
 
@@ -3635,9 +4147,9 @@ class NvizToolWindow(FN.FlatNotebook):
         # can be called with no event to enable/disable button
         if not event:
             ids = (self.win['vector']['points']['thematic']['checkcolor'],
-                  self.win['vector']['lines']['thematic']['checkcolor'],
-                  self.win['vector']['points']['thematic']['checksize'],
-                  self.win['vector']['lines']['thematic']['checkwidth'])
+                   self.win['vector']['lines']['thematic']['checkcolor'],
+                   self.win['vector']['points']['thematic']['checksize'],
+                   self.win['vector']['lines']['thematic']['checkwidth'])
         else:
             ids = (event.GetId(),)
         for id in ids:
@@ -3653,7 +4165,7 @@ class NvizToolWindow(FN.FlatNotebook):
                     attrType = 'color'
                 else:
                     attrType = 'width'
-                
+
             check = self.win['vector'][vtype]['thematic']['check' + attrType]
             button = self.win['vector'][vtype]['thematic']['button' + attrType]
             if self.FindWindowById(check).GetValue():
@@ -3661,61 +4173,64 @@ class NvizToolWindow(FN.FlatNotebook):
             else:
                 checked = False
             self.FindWindowById(button).Enable(checked)
-            
+
             data = self.GetLayerData('vector')
-            
+
             # decide if use GRASSRGB column
             if attrType == 'color':
-                name = self.FindWindowById(self.win['vector']['map']).GetValue()
+                name = self.FindWindowById(
+                    self.win['vector']['map']).GetValue()
                 if not data['vector'][vtype]['thematic']['rgbcolumn']:
                     try:
-                        id =  data['vector'][vtype]['object']['id']
-                    
+                        id = data['vector'][vtype]['object']['id']
+
                         # if GRASSRGB exists and color table doesn't, use GRGB
                         if self.HasGRASSRGB(name)  and \
-                            not self._display.CheckColorTable(id = id, type = vtype):
-                            data['vector'][vtype]['thematic']['rgbcolumn'] = 'GRASSRGB'
+                                not self._display.CheckColorTable(id=id, type=vtype):
+                            data['vector'][vtype]['thematic'][
+                                'rgbcolumn'] = 'GRASSRGB'
                     except KeyError:
                         pass
-                        
+
             data['vector'][vtype]['thematic']['use' + attrType] = checked
             data['vector'][vtype]['thematic']['update'] = None
-        
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-            
+
     def HasGRASSRGB(self, name):
         """Check if GRASSRGB column exist."""
         column = False
-        
+
         dbInfo = VectorDBInfo(name)
         if len(dbInfo.layers):
             table = dbInfo.layers[1]['table']
             if 'GRASSRGB' in dbInfo.GetTableDesc(table):
                 column = True
-                
+
         return column
-        
+
     def OnSetThematic(self, event):
         """Set options for thematic points"""
         if event.GetId() in self.win['vector']['points']['thematic'].values():
             vtype = 'points'
         else:
             vtype = 'lines'
-        if event.GetId() == self.win['vector'][vtype]['thematic']['buttoncolor']:
+        if event.GetId() == self.win['vector'][vtype][
+                'thematic']['buttoncolor']:
             attrType = 'color'
         elif vtype == 'points':
             attrType = 'size'
         else:
             attrType = 'width'
-        ctable = ThematicVectorTable(self, vtype, attributeType = attrType)
+        ctable = ThematicVectorTable(self, vtype, attributeType=attrType)
         ctable.CentreOnScreen()
         ctable.Show()
-        
+
     def UpdateIsosurfButtons(self, list):
         """Enable/disable buttons 'add', 'delete',
         'move up', 'move down'"""
@@ -3729,30 +4244,31 @@ class NvizToolWindow(FN.FlatNotebook):
             add.Enable(False)
         else:
             add.Enable(True)
-        
+
         if nitems < 1:
             # disable 'delete' if only one item in the lis
             delete.Enable(False)
         else:
             delete.Enable(True)
-        
+
         if list.GetSelection() >= nitems - 1:
             # disable 'move-down' if last
             moveDown.Enable(False)
         else:
             moveDown.Enable(True)
-        
+
         if list.GetSelection() < 1:
             # disable 'move-up' if first
             moveUp.Enable(False)
         else:
             moveUp.Enable(True)
-            
+
     def OnVolumeMode(self, event):
         """Change mode isosurfaces/slices"""
-        mode = self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection()
+        mode = self.FindWindowById(
+            self.win['volume']['draw']['mode']).GetSelection()
         data = self.GetLayerData('volume')['volume']
-        
+
         sizer = self.isoPanel.GetContainingSizer()
         sizer = self.slicePanel.GetContainingSizer()
         listBox = self.FindWindowByName('listStaticBox')
@@ -3768,24 +4284,25 @@ class NvizToolWindow(FN.FlatNotebook):
             listBox.SetLabel(" %s " % _("List of slices"))
             data['draw']['mode']['value'] = 1
             data['draw']['mode']['desc'] = 'slice'
-        
+
         if event:
             name = self.FindWindowById(self.win['volume']['map']).GetValue()
-            layer = self._getMapLayerByName(name, mapType = '3d-raster')
-            self.UpdateVolumePage(layer, data, updateName = False)
-            
+            layer = self._getMapLayerByName(name, mapType='raster_3d')
+            self.UpdateVolumePage(layer, data, updateName=False)
+
         sizer.Layout()
         listBox.GetParent().Fit()
-            
+
     def OnVolumeDrawMode(self, event):
         """Set isosurface/slice draw mode"""
         self.SetVolumeDrawMode(event.GetSelection())
-        
+
     def OnVolumeDrawBox(self, event):
         """Set wire box drawing"""
         data = self.GetLayerData('volume')['volume']
         vid = data['object']['id']
-        checked = self.FindWindowById(self.win['volume']['draw']['box']).GetValue()
+        checked = self.FindWindowById(
+            self.win['volume']['draw']['box']).GetValue()
         self._display.SetVolumeDrawBox(vid, checked)
         data['draw']['box']['enabled'] = checked
 
@@ -3796,14 +4313,15 @@ class NvizToolWindow(FN.FlatNotebook):
         """Set isosurface draw mode"""
         data = self.GetLayerData('volume')['volume']
         id = data['object']['id']
-        
+
         mode = 0
         if selection == 0:
             mode |= wxnviz.DM_FLAT
         else:
             mode |= wxnviz.DM_GOURAUD
-            
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             self._display.SetIsosurfaceMode(id, mode)
             data['draw']['shading']['isosurface']['desc'] = 'gouraud'
             data['draw']['shading']['isosurface']['value'] = mode
@@ -3811,68 +4329,70 @@ class NvizToolWindow(FN.FlatNotebook):
             self._display.SetSliceMode(id, mode)
             data['draw']['shading']['slice']['desc'] = 'flat'
             data['draw']['shading']['slice']['value'] = mode
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnVolumeResolution(self, event):
         """Set isosurface/slice draw resolution"""
         self.SetVolumeResolution(event.GetInt())
-        
+
     def SetVolumeResolution(self, res):
         """Set isosurface draw resolution"""
         data = self.GetLayerData('volume')['volume']
         id = data['object']['id']
-        
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             self._display.SetIsosurfaceRes(id, res)
             data['draw']['resolution']['isosurface']['value'] = res
         else:
             self._display.SetSliceRes(id, res)
             data['draw']['resolution']['slice']['value'] = res
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-    
+
     def OnInOutMode(self, event):
         """Change isosurfaces mode inout"""
         data = self.GetLayerData('volume')['volume']
         id = data['object']['id']
-        isosurfId = self.FindWindowById(self.win['volume']['isosurfs']).GetSelection()
-        
+        isosurfId = self.FindWindowById(
+            self.win['volume']['isosurfs']).GetSelection()
+
         ret = self._display.SetIsosurfaceInOut(id, isosurfId, event.GetInt())
         if ret == 1:
             data['isosurface'][isosurfId]['inout']['value'] = event.GetInt()
-            
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-    
-        
+
     def OnVolumeIsosurfMap(self, event):
         """Set surface attribute"""
         if self.vetoGSelectEvt:
             self.vetoGSelectEvt = False
             return
-        self.SetMapObjAttrb(nvizType = 'volume', winId = event.GetId())
-        
+        self.SetMapObjAttrb(nvizType='volume', winId=event.GetId())
+
     def OnVolumeCheck(self, event):
         """Isosurface/slice checked (->load) or unchecked (->unload)"""
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             mode = 'isosurf'
         else:
             mode = 'slice'
         index = event.GetSelection()
         list = self.FindWindowById(self.win['volume'][mode + 's'])
-        
+
         data = self.GetLayerData('volume')['volume']
         vid = data['object']['id']
-        
+
         id = event.GetSelection()
-        
+
         if mode == 'isosurf':
             if list.IsChecked(index):
                 if 'transp' in data['isosurface'][id] and\
-                    data['isosurface'][id]['transp']['map'] is not None:
+                        data['isosurface'][id]['transp']['map'] is not None:
                     if data['isosurface'][id]['transp']['map']:
                         map = True
                         value = data['isosurface'][id]['transp']['value']
@@ -3892,17 +4412,18 @@ class NvizToolWindow(FN.FlatNotebook):
             else:
                 # disable -> make transparent
                 self._display.SetSliceTransp(vid, id, 255)
-                
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnVolumeSelect(self, event):
         """Isosurface/Slice item selected"""
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             mode = 'isosurf'
         else:
             mode = 'slice'
-            
+
         winUp = self.FindWindowById(self.win['volume']['btnMoveUp'])
         winDown = self.FindWindowById(self.win['volume']['btnMoveDown'])
         selection = event.GetSelection()
@@ -3921,109 +4442,118 @@ class NvizToolWindow(FN.FlatNotebook):
                 winDown.Enable()
             if not winUp.IsEnabled():
                 winUp.Enable()
-        
+
         # update dialog
         name = self.FindWindowById(self.win['volume']['map']).GetValue()
-        layer = self._getMapLayerByName(name, mapType = '3d-raster')
-        
+        layer = self._getMapLayerByName(name, mapType='raster_3d')
+
         if mode == 'isosurf':
-            data = self.GetLayerData('volume')['volume']['isosurface'][selection]
+            data = self.GetLayerData('volume')['volume'][
+                'isosurface'][selection]
             self.UpdateVolumeIsosurfPage(data)
         else:
             data = self.GetLayerData('volume')['volume']['slice'][selection]
             self.UpdateVolumeSlicePage(data)
-        
-        
-        
+
     def OnVolumeAdd(self, event):
         """Add new isosurface/slice to the list"""
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             mode = 'isosurf'
         else:
             mode = 'slice'
         list = self.FindWindowById(self.win['volume'][mode + 's'])
-        
+
         name = self.FindWindowById(self.win['volume']['map']).GetValue()
-        layer = self._getMapLayerByName(name, mapType = '3d-raster')
+        layer = self._getMapLayerByName(name, mapType='raster_3d')
         data = self.GetLayerData('volume')['volume']
         id = data['object']['id']
-        
+
         sel = list.GetSelection()
         if mode == 'isosurf':
             isosurfData = self.mapWindow.nvizDefault.SetIsosurfaceDefaultProp()
             if isosurfData['color']['map']:
                 isosurfData['color']['value'] = layer.name
 
-            level = isosurfData['topo']['value'] = round(self._get3dRange(name = layer.name)[0], 2)
-        
+            level = isosurfData['topo']['value'] = round(
+                self._get3dRange(name=layer.name)[0], 2)
+
             if sel < 0 or sel >= list.GetCount() - 1:
                 item = list.Append(item=_("Level {level}").format(level=level))
             else:
                 list.Insert(item=_("Level {level}").format(level=level),
-                            pos=sel+1) # append
+                            pos=sel + 1)  # append
                 item = sel + 1
         else:
             sliceData = self.mapWindow.nvizDefault.SetSliceDefaultProp()
             axis = ("X", "Y", "Z")[sliceData['position']['axis']]
             if sel < 0 or sel >= list.GetCount() - 1:
-                item = list.Append(item=_("Slice parallel to {axis}").format(axis=axis))
+                item = list.Append(
+                    item=_("Slice parallel to {axis}").format(
+                        axis=axis))
             else:
-                list.Insert(item=_("Slice parallel to {axis}").format(axis=axis),
-                            pos=sel+1) # append
+                list.Insert(
+                    item=_("Slice parallel to {axis}").format(
+                        axis=axis), pos=sel + 1)  # append
                 item = sel + 1
-        
+
         list.Check(item)
         list.SetSelection(item)
-        
+
         if mode == 'isosurf':
             data['isosurface'].insert(item, isosurfData)
-            # add isosurface        
+            # add isosurface
             self._display.AddIsosurface(id, float(level))
         else:
             data['slice'].insert(item, sliceData)
-            # add isosurface        
+            # add isosurface
             nslice = self._display.AddSlice(id)
-            self._display.SetSlicePosition(id, nslice -1, sliceData['position']['x1'], sliceData['position']['x2'],
-                                               sliceData['position']['y1'], sliceData['position']['y2'],
-                                               sliceData['position']['z1'], sliceData['position']['z2'],
-                                               sliceData['position']['axis'])
+            self._display.SetSlicePosition(
+                id, nslice - 1, sliceData['position']['x1'],
+                sliceData['position']['x2'],
+                sliceData['position']['y1'],
+                sliceData['position']['y2'],
+                sliceData['position']['z1'],
+                sliceData['position']['z2'],
+                sliceData['position']['axis'])
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         # update buttons
         self.UpdateIsosurfButtons(list)
         if mode == 'isosurf':
             self.UpdateVolumeIsosurfPage(isosurfData)
         else:
             self.UpdateVolumeSlicePage(sliceData)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-        
+
     def OnVolumeDelete(self, event):
         """Remove isosurface/slice from list"""
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             mode = 'isosurf'
         else:
             mode = 'slice'
         list = self.FindWindowById(self.win['volume'][mode + 's'])
-        
+
         # remove item from list
         id = list.GetSelection()
         list.Delete(id)
         # select last item
         if list.GetCount() > 0:
-            list.SetSelection(list.GetCount()-1)
-        
+            list.SetSelection(list.GetCount() - 1)
+
         name = self.FindWindowById(self.win['volume']['map']).GetValue()
-        layer = self._getMapLayerByName(name, mapType = '3d-raster')
+        layer = self._getMapLayerByName(name, mapType='raster_3d')
         data = self.GetLayerData('volume')['volume']
 
         vid = data['object']['id']
-        
+
         # delete isosurface
         if mode == 'isosurf':
             del data['isosurface'][id]
@@ -4031,11 +4561,12 @@ class NvizToolWindow(FN.FlatNotebook):
         else:
             del data['slice'][id]
             self._display.DeleteSlice(vid, id)
-        
+
         # update buttons
         if list.GetCount() > 0:
             if mode == 'isosurf':
-                self.UpdateVolumeIsosurfPage(data['isosurface'][list.GetSelection()])
+                self.UpdateVolumeIsosurfPage(
+                    data['isosurface'][list.GetSelection()])
             else:
                 self.UpdateVolumeSlicePage(data['slice'][list.GetSelection()])
         else:
@@ -4044,194 +4575,198 @@ class NvizToolWindow(FN.FlatNotebook):
             else:
                 self.UpdateVolumeSlicePage(None)
         self.UpdateIsosurfButtons(list)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-        
+
     def OnVolumeMoveUp(self, event):
         """Move isosurface/slice up in the list"""
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             mode = 'isosurf'
         else:
             mode = 'slice'
         list = self.FindWindowById(self.win['volume'][mode + 's'])
         sel = list.GetSelection()
-        
+
         if sel < 1:
-            return # this should not happen
-        
+            return  # this should not happen
+
         name = self.FindWindowById(self.win['volume']['map']).GetValue()
-        layer = self._getMapLayerByName(name, mapType = '3d-raster')
+        layer = self._getMapLayerByName(name, mapType='raster_3d')
         data = self.GetLayerData('volume')['volume']
-        
+
         id = data['object']['id']
-        
+
         # move item up
         text = list.GetStringSelection()
-        list.Insert(item = text, pos = sel-1)
-        list.Check(sel-1)
-        list.SetSelection(sel-1)
-        list.Delete(sel+1)
+        list.Insert(item=text, pos=sel - 1)
+        list.Check(sel - 1)
+        list.SetSelection(sel - 1)
+        list.Delete(sel + 1)
         if mode == 'isosurf':
-            data['isosurface'].insert(sel-1, data['isosurface'][sel])
-            del data['isosurface'][sel+1]
+            data['isosurface'].insert(sel - 1, data['isosurface'][sel])
+            del data['isosurface'][sel + 1]
             self._display.MoveIsosurface(id, sel, True)
         else:
-            data['slice'].insert(sel-1, data['slice'][sel])
-            del data['slice'][sel+1]
+            data['slice'].insert(sel - 1, data['slice'][sel])
+            del data['slice'][sel + 1]
             self._display.MoveSlice(id, sel, True)
-        
+
         # update buttons
         self.UpdateIsosurfButtons(list)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-        
+
     def OnVolumeMoveDown(self, event):
         """Move isosurface/slice down in the list"""
-        if self.FindWindowById(self.win['volume']['draw']['mode']).GetSelection() == 0:
+        if self.FindWindowById(self.win['volume']['draw'][
+                               'mode']).GetSelection() == 0:
             mode = 'isosurf'
         else:
             mode = 'slice'
         list = self.FindWindowById(self.win['volume'][mode + 's'])
         sel = list.GetSelection()
-        
+
         if sel >= list.GetCount() - 1:
-            return # this should not happen
-        
+            return  # this should not happen
+
         name = self.FindWindowById(self.win['volume']['map']).GetValue()
-        layer = self._getMapLayerByName(name, mapType = '3d-raster')
+        layer = self._getMapLayerByName(name, mapType='raster_3d')
         data = self.GetLayerData('volume')['volume']
-        
+
         id = data['object']['id']
-        
+
         # move item up
         text = list.GetStringSelection()
-        list.Insert(item = text, pos = sel+2)
-        list.Check(sel+2)
-        list.SetSelection(sel+2)
+        list.Insert(item=text, pos=sel + 2)
+        list.Check(sel + 2)
+        list.SetSelection(sel + 2)
         list.Delete(sel)
         if mode == 'isosurf':
-            data['isosurface'].insert(sel+2, data['isosurface'][sel])
+            data['isosurface'].insert(sel + 2, data['isosurface'][sel])
             del data['isosurface'][sel]
             self._display.MoveIsosurface(id, sel, False)
         else:
-            data['slice'].insert(sel+2, data['slice'][sel])
+            data['slice'].insert(sel + 2, data['slice'][sel])
             del data['slice'][sel]
             self._display.MoveSlice(id, sel, False)
-        
+
         # update buttons
         self.UpdateIsosurfButtons(list)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
         event.Skip()
-    
+
     def OnVolumePositionChanged(self, event):
         """Volume position changed"""
         self.mapWindow.render['quick'] = False
         self.mapWindow.Refresh(False)
-        
+
     def OnVolumePosition(self, event):
         """Volume position"""
         winName = self.__GetWindowName(self.win['volume'], event.GetId())
         if not winName:
             return
-        axis = self.FindWindowById(self.win['volume']['position']['axis']).GetSelection()
-        
+        axis = self.FindWindowById(
+            self.win['volume']['position']['axis']).GetSelection()
+
         value = self.FindWindowById(event.GetId()).GetValue()
         slider = self.FindWindowById(self.win['volume'][winName]['slider'])
-        self.AdjustSliderRange(slider = slider, value = value)
-        
+        self.AdjustSliderRange(slider=slider, value=value)
+
         for win in self.win['volume']['position'].itervalues():
             if win in (self.win['volume']['position']['axis'],
                        self.win['volume']['position']['reset']):
                 continue
             else:
                 self.FindWindowById(win).SetValue(value)
-        
+
         data = self.GetLayerData('volume')
         id = data['volume']['object']['id']
         x, y, z = self._display.GetVolumePosition(id)
-        
-        if axis == 0: # x
+
+        if axis == 0:  # x
             x = value
-        elif axis == 1: # y
+        elif axis == 1:  # y
             y = value
-        else: # z
+        else:  # z
             z = value
-        
+
         data['volume']['position']['x'] = x
         data['volume']['position']['y'] = y
         data['volume']['position']['z'] = z
         data['volume']['position']['update'] = None
         # update properties
-        
-        event = wxUpdateProperties(data = data)
+
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         self.mapWindow.render['quick'] = True
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnVolumeAxis(self, event):
         """Volume position, axis changed"""
         data = self.GetLayerData('volume')
         id = data['volume']['object']['id']
-        
-        axis = self.FindWindowById(self.win['volume']['position']['axis']).GetSelection()
+
+        axis = self.FindWindowById(
+            self.win['volume']['position']['axis']).GetSelection()
         slider = self.FindWindowById(self.win['volume']['position']['slider'])
         text = self.FindWindowById(self.win['volume']['position']['text'])
         xydim = self._display.GetLongDim()
         zdim = self._display.GetZRange()
         zdim = zdim[1] - zdim[0]
         x, y, z = self._display.GetVolumePosition(id)
-        
-        if axis == 0: # x
+
+        if axis == 0:  # x
             slider.SetRange(-3 * xydim, 3 * xydim)
             slider.SetValue(x)
             text.SetValue(x)
-        elif axis == 1: # y
+        elif axis == 1:  # y
             slider.SetRange(-3 * xydim, 3 * xydim)
             slider.SetValue(y)
             text.SetValue(y)
-        else: # z
+        else:  # z
             slider.SetRange(-3 * zdim, 3 * zdim)
             slider.SetValue(z)
             text.SetValue(z)
-            
+
     def OnVolumePositionText(self, event):
         """Volume position changed by textctrl"""
         self.OnVolumePosition(event)
         self.OnVolumePositionChanged(None)
-        
+
     def OnResetVolumePosition(self, event):
         """Reset position of volume"""
         for win in self.win['volume']['position'].itervalues():
             if win == self.win['volume']['position']['axis']:
-                self.FindWindowById(win).SetSelection(2) # Z
+                self.FindWindowById(win).SetSelection(2)  # Z
             elif win == self.win['volume']['position']['reset']:
                 continue
             else:
                 self.FindWindowById(win).SetValue(0)
-                
+
         data = self.GetLayerData('volume')
         data['volume']['position']['x'] = 0
         data['volume']['position']['y'] = 0
         data['volume']['position']['z'] = 0
         data['volume']['position']['update'] = None
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnVolumeSliceAxes(self, event):
         """Slice axis changed"""
         self.UpdateSliceLabels()
@@ -4240,62 +4775,67 @@ class NvizToolWindow(FN.FlatNotebook):
         sel = list.GetSelection()
         if sel < 0:
             return
-        axis = self.FindWindowById(self.win['volume']['slice']['axes']).GetSelection()
+        axis = self.FindWindowById(
+            self.win['volume']['slice']['axes']).GetSelection()
         data['volume']['slice'][sel]['position']['axis'] = axis
         data['volume']['slice'][sel]['position']['update'] = None
-        
+
         axis = ("X", "Y", "Z")[axis]
         list.SetString(sel, "%s %s" % (_("Slice parallel to"), axis))
         list.Check(sel)
-        
+
         # update properties
-        event = wxUpdateProperties(data = data)
-        wx.PostEvent(self.mapWindow, event) 
-        
+        event = wxUpdateProperties(data=data)
+        wx.PostEvent(self.mapWindow, event)
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-    
+
     def OnSliceTransparency(self, event):
         """Slice transparency changed"""
         data = self.GetLayerData('volume')
-        
+
         list = self.FindWindowById(self.win['volume']['slices'])
         sel = list.GetSelection()
         if sel < 0:
             return
-        
-        val = self.FindWindowById(self.win['volume']['slice']['transp']).GetValue()
-        data['volume']['slice'][sel]['transp']['value'] = self._getPercent(val, toPercent = False)
+
+        val = self.FindWindowById(
+            self.win['volume']['slice']['transp']).GetValue()
+        data['volume']['slice'][sel]['transp'][
+            'value'] = self._getPercent(val, toPercent=False)
         data['volume']['slice'][sel]['transp']['update'] = None
-        
+
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnSliceReset(self, event):
         """Slice position reset"""
         data = self.GetLayerData('volume')
-        
+
         list = self.FindWindowById(self.win['volume']['slices'])
         sel = list.GetSelection()
         if sel < 0:
             return
-        
-        for coord, val in zip(('x1', 'x2', 'y1', 'y2', 'z1', 'z2'),(0, 1, 0, 1, 0, 1, 0)):
+
+        for coord, val in zip(
+                ('x1', 'x2', 'y1', 'y2', 'z1', 'z2'),
+                (0, 1, 0, 1, 0, 1, 0)):
             data['volume']['slice'][sel]['position'][coord] = val
         data['volume']['slice'][sel]['position']['update'] = None
-        
+
         self.UpdateVolumeSlicePage(data['volume']['slice'][sel])
         # update properties
-        event = wxUpdateProperties(data = data)
+        event = wxUpdateProperties(data=data)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-        
+
     def OnSlicePositionChange(self, event):
         """Slice position is changing"""
         data = self.GetLayerData('volume')
@@ -4305,8 +4845,8 @@ class NvizToolWindow(FN.FlatNotebook):
             return
         win = self.win['volume']['slice']
         winId = event.GetId()
-        value = event.GetInt()/100.
-        
+        value = event.GetInt() / 100.
+
         for coord in ('x1', 'x2', 'y1', 'y2', 'z1', 'z2'):
             if win['slider_' + coord] == winId:
                 data['volume']['slice'][sel]['position'][coord] = value
@@ -4314,55 +4854,59 @@ class NvizToolWindow(FN.FlatNotebook):
                 break
         self.mapWindow.render['quick'] = True
         # update properties
-        event = wxUpdateProperties(data = data)
-        wx.PostEvent(self.mapWindow, event) 
-        
+        event = wxUpdateProperties(data=data)
+        wx.PostEvent(self.mapWindow, event)
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-               
+
     def OnSlicePositionChanged(self, event):
         """Slice position is changed"""
         self.mapWindow.render['quick'] = False
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-                
+
     def OnCPlaneSelection(self, event):
         """Cutting plane selected"""
-        plane = self.FindWindowById(self.win['cplane']['planes']).GetStringSelection()
+        plane = self.FindWindowById(
+            self.win['cplane']['planes']).GetStringSelection()
         try:
             planeIndex = int(plane.split()[-1]) - 1
-            self.EnablePage("cplane", enabled = True)
+            self.EnablePage("cplane", enabled=True)
         except:
             planeIndex = -1
-            self.EnablePage("cplane", enabled = False)
+            self.EnablePage("cplane", enabled=False)
         self.mapWindow.SelectCPlane(planeIndex)
         if planeIndex >= 0:
-            self.mapWindow.UpdateCPlane(planeIndex, changes = ['rotation', 'position', 'shading'])
+            self.mapWindow.UpdateCPlane(
+                planeIndex, changes=[
+                    'rotation', 'position', 'shading'])
 
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
         self.UpdateCPlanePage(planeIndex)
-        
+
     def OnCPlaneChanging(self, event):
         """Cutting plane is changing"""
-        plane = self.FindWindowById(self.win['cplane']['planes']).GetStringSelection()
+        plane = self.FindWindowById(
+            self.win['cplane']['planes']).GetStringSelection()
         try:
             planeIndex = int(plane.split()[-1]) - 1
-        except:#TODO disabled page
+        except:  # TODO disabled page
             planeIndex = -1
-    
+
         if event.GetId() in (self.win['cplane']['rotation']['rot'].values() +
-                            self.win['cplane']['rotation']['tilt'].values()):
+                             self.win['cplane']['rotation']['tilt'].values()):
             action = 'rotation'
         else:
             action = 'position'
         data = self.mapWindow.cplanes[planeIndex][action]
         self.OnScroll(event, self.win['cplane'][action], data)
-        
+
         self.mapWindow.render['quick'] = True
-        event = wxUpdateCPlane(update = (action,), current = planeIndex)
+        event = wxUpdateCPlane(update=(action,), current=planeIndex)
         wx.PostEvent(self.mapWindow, event)
-        
+
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
 
@@ -4371,57 +4915,67 @@ class NvizToolWindow(FN.FlatNotebook):
         self.mapWindow.render['quick'] = False
         if self.mapDisplay.IsAutoRendered():
             self.mapWindow.Refresh(False)
-            
+
     def OnCPlaneChangeText(self, event):
         """Cutting plane changed by textctrl"""
         for axis in ('x', 'y', 'z'):
             if event.GetId() == self.win['cplane']['position'][axis]['text']:
                 value = self.FindWindowById(event.GetId()).GetValue()
-                slider = self.FindWindowById(self.win['cplane']['position'][axis]['slider'])
-                self.AdjustSliderRange(slider = slider, value = value)
-        self.OnCPlaneChanging(event = event)
-        self.OnCPlaneChangeDone(None)   
-        
+                slider = self.FindWindowById(
+                    self.win['cplane']['position'][axis]['slider'])
+                self.AdjustSliderRange(slider=slider, value=value)
+        self.OnCPlaneChanging(event=event)
+        self.OnCPlaneChangeDone(None)
+
     def OnCPlaneShading(self, event):
         """Cutting plane shading changed"""
-        shading = self.FindWindowById(self.win['cplane']['shading']).GetSelection()
-        plane = self.FindWindowById(self.win['cplane']['planes']).GetStringSelection()
+        shading = self.FindWindowById(
+            self.win['cplane']['shading']).GetSelection()
+        plane = self.FindWindowById(
+            self.win['cplane']['planes']).GetStringSelection()
         try:
             planeIndex = int(plane.split()[-1]) - 1
-        except:#TODO disabled page
+        except:  # TODO disabled page
             planeIndex = -1
-            
+
         self.mapWindow.cplanes[planeIndex]['shading'] = shading
-        
-        event = wxUpdateCPlane(update = ('shading',), current = planeIndex)
+
+        event = wxUpdateCPlane(update=('shading',), current=planeIndex)
         wx.PostEvent(self.mapWindow, event)
-        
+
         self.OnCPlaneChangeDone(None)
-        
+
     def OnCPlaneReset(self, event):
         """Reset current cutting plane"""
-        plane = self.FindWindowById(self.win['cplane']['planes']).GetStringSelection()
+        plane = self.FindWindowById(
+            self.win['cplane']['planes']).GetStringSelection()
         try:
             planeIndex = int(plane.split()[-1]) - 1
-        except:#TODO disabled page
+        except:  # TODO disabled page
             planeIndex = -1
 
-        self.mapWindow.cplanes[planeIndex] = copy.deepcopy(UserSettings.Get(group = 'nviz',
-                                                                            key = 'cplane'))
+        self.mapWindow.cplanes[planeIndex] = copy.deepcopy(
+            UserSettings.Get(group='nviz', key='cplane'))
         self.mapWindow.cplanes[planeIndex]['on'] = True
-        event = wxUpdateCPlane(update = ('position','rotation','shading'), current = planeIndex)
+        event = wxUpdateCPlane(
+            update=(
+                'position',
+                'rotation',
+                'shading'),
+            current=planeIndex)
         wx.PostEvent(self.mapWindow, event)
         self.OnCPlaneChangeDone(None)
         self.UpdateCPlanePage(planeIndex)
-    
+
     def OnDecorationPlacement(self, event):
         """Place an arrow/scalebar by clicking on display"""
         if event.GetId() == self.win['decoration']['arrow']['place']:
             type = 'arrow'
         elif event.GetId() == self.win['decoration']['scalebar']['place']:
             type = 'scalebar'
-        else: return
-        
+        else:
+            return
+
         if event.GetInt():
             self.mapDisplay.Raise()
             self.mapWindow.mouse['use'] = type
@@ -4429,43 +4983,52 @@ class NvizToolWindow(FN.FlatNotebook):
         else:
             self.mapWindow.mouse['use'] = 'default'
             self.mapWindow.SetNamedCursor('default')
-    
+
     def OnArrowDelete(self, event):
         """Delete arrow"""
         self._display.DeleteArrow()
         self.mapWindow.decoration['arrow']['show'] = False
-        self.FindWindowById( self.win['decoration']['arrow']['delete']).Disable()
+        self.FindWindowById(self.win['decoration'][
+                            'arrow']['delete']).Disable()
         self.mapWindow.Refresh(False)
-    
+
     def OnScalebarDelete(self, event):
         """Delete scalebar"""
-        choice = self.FindWindowById(self.win['decoration']['scalebar']['choice'])
+        choice = self.FindWindowById(
+            self.win['decoration']['scalebar']['choice'])
         choiceIndex = choice.GetSelection()
         index = choice.GetClientData(choiceIndex)
         if index == wx.NOT_FOUND:
             return
-        self._display.DeleteScalebar(id = index)
-        
-        self.FindWindowById(self.win['decoration']['scalebar']['choice']).Delete(choiceIndex)
+        self._display.DeleteScalebar(id=index)
+
+        self.FindWindowById(self.win['decoration']['scalebar'][
+                            'choice']).Delete(choiceIndex)
         if not choice.IsEmpty():
             choice.SetSelection(choice.GetCount() - 1)
         self.DisableScalebarControls()
 
         self.mapWindow.Refresh(False)
-         
+
     def AddScalebar(self, scalebarNum):
-        choice = self.FindWindowById(self.win['decoration']['scalebar']['choice'])
+        choice = self.FindWindowById(
+            self.win['decoration']['scalebar']['choice'])
         choice.Append(_("Scalebar %d") % (scalebarNum + 1), scalebarNum)
         choice.SetSelection(choice.GetCount() - 1)
         self.DisableScalebarControls()
 
     def AddArrow(self):
-        self.FindWindowById( self.win['decoration']['arrow']['delete']).Enable()
+        self.FindWindowById(self.win['decoration']['arrow']['delete']).Enable()
 
     def DisableScalebarControls(self):
-        choice = self.FindWindowById(self.win['decoration']['scalebar']['choice'])
-        self.FindWindowById(self.win['decoration']['scalebar']['delete']).Enable(not choice.IsEmpty())
-        self.FindWindowById(self.win['decoration']['scalebar']['choice']).Enable(not choice.IsEmpty())
+        choice = self.FindWindowById(
+            self.win['decoration']['scalebar']['choice'])
+        self.FindWindowById(
+            self.win['decoration']['scalebar']['delete']).Enable(
+            not choice.IsEmpty())
+        self.FindWindowById(
+            self.win['decoration']['scalebar']['choice']).Enable(
+            not choice.IsEmpty())
 
     def OnDecorationProp(self, event):
         """Set arrow/scalebar properties"""
@@ -4473,27 +5036,33 @@ class NvizToolWindow(FN.FlatNotebook):
             type = 'arrow'
         elif event.GetId() in self.win['decoration']['scalebar'].values():
             type = 'scalebar'
-        else: return
-        
-        color = self.FindWindowById(self.win['decoration'][type]['color']).GetValue()
-        size = self.FindWindowById(self.win['decoration'][type]['size']).GetValue()
+        else:
+            return
+
+        color = self.FindWindowById(
+            self.win['decoration'][type]['color']).GetValue()
+        size = self.FindWindowById(
+            self.win['decoration'][type]['size']).GetValue()
         if type == 'arrow':
-            self.mapWindow.decoration[type]['color'] = self._getColorString(color)
+            self.mapWindow.decoration[type][
+                'color'] = self._getColorString(color)
             self.mapWindow.decoration[type]['size'] = size
         elif type == 'scalebar'and self.mapWindow.decoration['scalebar']:
             for scalebar in self.mapWindow.decoration[type]:
                 scalebar['color'] = self._getColorString(color)
                 scalebar['size'] = size
-        
+
         if type == 'arrow' and self.mapWindow.decoration['arrow']['show']:
-            self._display.SetArrow(self.mapWindow.decoration['arrow']['position']['x'],
-                                   self.mapWindow.decoration['arrow']['position']['y'],
-                                   self.mapWindow.decoration['arrow']['size'],
-                                   self.mapWindow.decoration['arrow']['color'])
+            self._display.SetArrow(
+                self.mapWindow.decoration['arrow']['position']['x'],
+                self.mapWindow.decoration['arrow']['position']['y'],
+                self.mapWindow.decoration['arrow']['size'],
+                self.mapWindow.decoration['arrow']['color'])
             self._display.DrawArrow()
         elif type == 'scalebar' and self.mapWindow.decoration['scalebar']:
             ids = []
-            choice = self.FindWindowById(self.win['decoration']['scalebar']['choice'])
+            choice = self.FindWindowById(
+                self.win['decoration']['scalebar']['choice'])
             for index in range(choice.GetCount()):
                 ids.append(choice.GetClientData(index))
             for scalebar in self.mapWindow.decoration[type]:
@@ -4505,12 +5074,12 @@ class NvizToolWindow(FN.FlatNotebook):
                                               scalebar['color'])
             self._display.DrawScalebar()
             self.mapWindow.Refresh(False)
-        
+
     def UpdatePage(self, pageId):
         """Update dialog (selected page)"""
         self.pageChanging = True
         Debug.msg(1, "NvizToolWindow.UpdatePage(): %s", pageId)
-        
+
         if pageId == 'view':
             self.SetPage('view')
             hmin = self.mapWindow.iview['height']['min']
@@ -4520,104 +5089,127 @@ class NvizToolWindow(FN.FlatNotebook):
             zmax = self.mapWindow.view['z-exag']['max']
             zval = self.mapWindow.view['z-exag']['value']
 
-            for control in ('slider','text'):
+            for control in ('slider', 'text'):
                 try:
-                    self.FindWindowById(self.win['view']['height'][control]).SetRange(
-                                                                             hmin, hmax)
+                    self.FindWindowById(
+                        self.win['view']['height'][control]).SetRange(
+                        hmin, hmax)
                 except OverflowError:
                     hmin = self.mapWindow.iview['height']['min'] = 0
                     hmax = self.mapWindow.iview['height']['max'] = 10000
                     hval = self.mapWindow.iview['height']['value'] = 5000
-                    self.FindWindowById(self.win['view']['height'][control]).SetRange(hmin, hmax)
-                self.FindWindowById(self.win['view']['z-exag'][control]).SetRange(
-                                                                        zmin, zmax) 
-                self.FindWindowById(self.win['view']['height'][control]).SetValue(hval)                                      
-                
-                self.FindWindowById(self.win['view']['z-exag'][control]).SetValue(zval)                                      
-        
-            self.FindWindowById(self.win['view']['background']['color']).SetColour(\
-                            self.mapWindow.view['background']['color'])
-                            
+                    self.FindWindowById(
+                        self.win['view']['height'][control]).SetRange(
+                        hmin, hmax)
+                self.FindWindowById(
+                    self.win['view']['z-exag'][control]).SetRange(zmin, zmax)
+                self.FindWindowById(
+                    self.win['view']['height'][control]).SetValue(hval)
+
+                self.FindWindowById(
+                    self.win['view']['z-exag'][control]).SetValue(zval)
+
+            self.FindWindowById(
+                self.win['view']['background']['color']).SetColour(
+                self.mapWindow.view['background']['color'])
+
             tval = self.mapWindow.view['twist']['value']
             pval = self.mapWindow.view['persp']['value']
-            for control in ('slider','text'):
-                self.FindWindowById(self.win['view']['twist'][control]).SetValue(tval)                                      
-                
-                self.FindWindowById(self.win['view']['persp'][control]).SetValue(pval)
-            
-            
+            for control in ('slider', 'text'):
+                self.FindWindowById(
+                    self.win['view']['twist'][control]).SetValue(tval)
+
+                self.FindWindowById(
+                    self.win['view']['persp'][control]).SetValue(pval)
+
         elif pageId in ('surface', 'vector', 'volume'):
             name = self.FindWindowById(self.win[pageId]['map']).GetValue()
             data = self.GetLayerData(pageId)
             if data:
                 if pageId == 'surface':
-                    layer = self._getMapLayerByName(name, mapType = 'raster')
+                    layer = self._getMapLayerByName(name, mapType='raster')
                     if layer:
                         self.UpdateSurfacePage(layer, data['surface'])
                 elif pageId == 'vector':
-                    layer = self._getMapLayerByName(name, mapType = 'vector')
+                    layer = self._getMapLayerByName(name, mapType='vector')
                     if layer:
                         self.UpdateVectorPage(layer, data['vector'])
                 elif pageId == 'volume':
-                    layer = self._getMapLayerByName(name, mapType = '3d-raster')
+                    layer = self._getMapLayerByName(name, mapType='raster_3d')
                     if layer:
                         self.UpdateVolumePage(layer, data['volume'])
         elif pageId == 'light':
             zval = self.mapWindow.light['position']['z']
             bval = self.mapWindow.light['bright']
             aval = self.mapWindow.light['ambient']
-            for control in ('slider','text'):
-                self.FindWindowById(self.win['light']['z'][control]).SetValue(zval)
-                self.FindWindowById(self.win['light']['bright'][control]).SetValue(bval)
-                self.FindWindowById(self.win['light']['ambient'][control]).SetValue(aval)
-            self.FindWindowById(self.win['light']['color']).SetColour(self.mapWindow.light['color'])
+            for control in ('slider', 'text'):
+                self.FindWindowById(
+                    self.win['light']['z'][control]).SetValue(zval)
+                self.FindWindowById(
+                    self.win['light']['bright'][control]).SetValue(bval)
+                self.FindWindowById(
+                    self.win['light']['ambient'][control]).SetValue(aval)
+            self.FindWindowById(
+                self.win['light']['color']).SetColour(
+                self.mapWindow.light['color'])
             self.FindWindowById(self.win['light']['position']).PostDraw()
         elif pageId == 'fringe':
             win = self.FindWindowById(self.win['fringe']['map'])
-            win.SetValue(self.FindWindowById(self.win['surface']['map']).GetValue())
+            win.SetValue(
+                self.FindWindowById(
+                    self.win['surface']['map']).GetValue())
         elif pageId == 'decoration':
             win = self.FindWindowById(self.win['decoration']['arrow']['size'])
             win.SetValue(self.mapWindow.decoration['arrow']['size'])
-            win = self.FindWindowById(self.win['decoration']['scalebar']['size'])
+            win = self.FindWindowById(
+                self.win['decoration']['scalebar']['size'])
             win.SetValue(self.mapWindow._getDecorationSize())
         elif pageId == 'constant':
             if self.mapWindow.constants:
                 surface = self.FindWindowById(self.win['constant']['surface'])
                 for item in self.mapWindow.constants:
-                    surface.Append(_("constant#") + str(item['constant']['object']['name']))
+                    surface.Append(_("constant#") +
+                                   str(item['constant']['object']['name']))
                 surface.SetSelection(0)
                 self.OnConstantSelection(None)
                 self.EnablePage('constant', True)
         elif pageId == 'cplane':
             count = self._display.GetCPlanesCount()
-            choices = [_("None"),]
+            choices = [_("None"), ]
             for plane in range(count):
-                choices.append("%s %i" % (_("Plane"), plane+1))
+                choices.append("%s %i" % (_("Plane"), plane + 1))
             self.FindWindowById(self.win['cplane']['planes']).SetItems(choices)
             current = 0
             for i, cplane in enumerate(self.mapWindow.cplanes):
                 if cplane['on']:
                     current = i + 1
-            self.FindWindowById(self.win['cplane']['planes']).SetSelection(current)
-            
+            self.FindWindowById(
+                self.win['cplane']['planes']).SetSelection(current)
+
             xyRange, zRange = self._display.GetXYRange(), self._display.GetZRange()
-            if xyRange > 0: # GTK warning
-                self.FindWindowById(self.win['cplane']['position']['x']['slider']).SetRange(
-                                                                    -xyRange/2., xyRange/2.)
-                self.FindWindowById(self.win['cplane']['position']['y']['slider']).SetRange(
-                                                                    -xyRange/2., xyRange/2.)
+            if xyRange > 0:  # GTK warning
+                self.FindWindowById(self.win['cplane']['position']['x'][
+                                    'slider']).SetRange(-xyRange / 2., xyRange / 2.)
+                self.FindWindowById(self.win['cplane']['position']['y'][
+                                    'slider']).SetRange(-xyRange / 2., xyRange / 2.)
             if zRange[1] - zRange[0] > 1:
-                self.FindWindowById(self.win['cplane']['position']['z']['slider']).SetRange(zRange[0], zRange[1])
-            self.FindWindowById(self.win['cplane']['position']['z']['slider']).SetValue(zRange[0])
-            self.FindWindowById(self.win['cplane']['position']['z']['text']).SetValue(zRange[0])
+                self.FindWindowById(
+                    self.win['cplane']['position']['z']['slider']).SetRange(
+                    zRange[0], zRange[1])
+            self.FindWindowById(
+                self.win['cplane']['position']['z']['slider']).SetValue(
+                zRange[0])
+            self.FindWindowById(
+                self.win['cplane']['position']['z']['text']).SetValue(
+                zRange[0])
             self.OnCPlaneSelection(None)
-            
+
         elif pageId == 'animation':
             self.UpdateAnimationPage()
-            
+
         self.Update()
         self.pageChanging = False
-        
+
     def UpdateAnimationPage(self):
         """Update animation page"""
         # wrap help text according to tool window
@@ -4628,109 +5220,142 @@ class NvizToolWindow(FN.FlatNotebook):
         if anim.Exists():
             self.FindWindowById(self.win['anim']['play']).Enable()
         else:
-            self.UpdateFrameIndex(index = 0)
-            
+            self.UpdateFrameIndex(index=0)
+
         self.UpdateFrameCount()
-        
+
         self.FindWindowById(self.win['anim']['play']).Disable()
         self.FindWindowById(self.win['anim']['record']).Enable()
         self.FindWindowById(self.win['anim']['pause']).Disable()
         self.FindWindowById(self.win['anim']['stop']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['slider']).Disable()
         self.FindWindowById(self.win['anim']['frameIndex']['text']).Disable()
-        
+
     def UpdateCPlanePage(self, index):
         """Update widgets according to selected clip plane"""
-        if index == -1:   
+        if index == -1:
             return
         data = self.mapWindow.cplanes[index]
         for widget in ('text', 'slider'):
             for axes in ('x', 'y', 'z'):
-                self.FindWindowById(self.win['cplane']['position'][axes][widget]).SetValue(data['position'][axes])
+                self.FindWindowById(
+                    self.win['cplane']['position'][axes][widget]).SetValue(
+                    data['position'][axes])
             for each in ('tilt', 'rot'):
-                self.FindWindowById(self.win['cplane']['rotation'][each][widget]).SetValue(data['rotation'][each])
-        self.FindWindowById(self.win['cplane']['shading']).SetSelection(data['shading'])
-                
-    def UpdateSurfacePage(self, layer, data, updateName = True):
+                self.FindWindowById(
+                    self.win['cplane']['rotation'][each][widget]).SetValue(
+                    data['rotation'][each])
+        self.FindWindowById(
+            self.win['cplane']['shading']).SetSelection(
+            data['shading'])
+
+    def UpdateSurfacePage(self, layer, data, updateName=True):
         """Update surface page"""
         desc = grass.raster_info(layer.name)['title']
         if updateName:
-            self.FindWindowById(self.win['surface']['map']).SetValue(layer.name)
+            self.FindWindowById(
+                self.win['surface']['map']).SetValue(
+                layer.name)
         self.FindWindowById(self.win['surface']['desc']).SetLabel(desc)
-        
+
         # attributes
         if layer and layer.type == 'raster':
             self.vetoGSelectEvt = True
-            self.FindWindowById(self.win['surface']['color']['map']).SetValue(layer.name)
+            self.FindWindowById(
+                self.win['surface']['color']['map']).SetValue(
+                layer.name)
         else:
-            self.FindWindowById(self.win['surface']['color']['map']).SetValue('')
+            self.FindWindowById(
+                self.win['surface']['color']['map']).SetValue('')
+
+        self.SetMapObjUseMap(nvizType='surface',
+                             attrb='color', map=True)  # -> map
 
-        self.SetMapObjUseMap(nvizType = 'surface',
-                             attrb = 'color', map = True) # -> map
-                                
         if 'color' in data['attribute']:
             value = data['attribute']['color']['value']
 
             if data['attribute']['color']['map']:
-                self.FindWindowById(self.win['surface']['color']['map']).SetValue(value)
-            else: # constant
+                self.FindWindowById(
+                    self.win['surface']['color']['map']).SetValue(value)
+            else:  # constant
                 color = map(int, value.split(':'))
-                self.FindWindowById(self.win['surface']['color']['const']).SetColour(color)
-            self.SetMapObjUseMap(nvizType = 'surface',
-                                 attrb = 'color', map = data['attribute']['color']['map'])
+                self.FindWindowById(
+                    self.win['surface']['color']['const']).SetColour(color)
+            self.SetMapObjUseMap(
+                nvizType='surface', attrb='color',
+                map=data['attribute']['color']['map'])
 
-        self.SetMapObjUseMap(nvizType = 'surface',
-                             attrb = 'shine', map = data['attribute']['shine']['map'])
+        self.SetMapObjUseMap(
+            nvizType='surface', attrb='shine',
+            map=data['attribute']['shine']['map'])
         value = data['attribute']['shine']['value']
         if data['attribute']['shine']['map']:
-            self.FindWindowById(self.win['surface']['shine']['map']).SetValue(value)
+            self.FindWindowById(
+                self.win['surface']['shine']['map']).SetValue(value)
         else:
-            self.FindWindowById(self.win['surface']['shine']['const']).SetValue(self._getPercent(value))
-        if 'transp' in data['attribute']:  
-            value = data['attribute']['transp']['value']  
+            self.FindWindowById(
+                self.win['surface']['shine']['const']).SetValue(
+                self._getPercent(value))
+        if 'transp' in data['attribute']:
+            value = data['attribute']['transp']['value']
             if data['attribute']['transp']['map']:
-                self.FindWindowById(self.win['surface']['color']['map']).SetValue(value)
+                self.FindWindowById(
+                    self.win['surface']['color']['map']).SetValue(value)
             else:
-                self.FindWindowById(self.win['surface']['transp']['const']).SetValue(self._getPercent(value))
-            self.SetMapObjUseMap(nvizType = 'surface', attrb = 'transp', map = data['attribute']['transp']['map'])
+                self.FindWindowById(
+                    self.win['surface']['transp']['const']).SetValue(
+                    self._getPercent(value))
+            self.SetMapObjUseMap(
+                nvizType='surface',
+                attrb='transp',
+                map=data['attribute']['transp']['map'])
         else:
-            self.SetMapObjUseMap(nvizType = 'surface', attrb = 'transp', map = None)
+            self.SetMapObjUseMap(nvizType='surface', attrb='transp', map=None)
         #
         # draw
         #
         for control, drawData in data['draw'].iteritems():
-            if control == 'all': # skip 'all' property
+            if control == 'all':  # skip 'all' property
                 continue
             if control == 'resolution':
-                self.FindWindowById(self.win['surface']['draw']['res-coarse']).SetValue(drawData['coarse'])
-                self.FindWindowById(self.win['surface']['draw']['res-fine']).SetValue(drawData['fine'])
+                self.FindWindowById(self.win['surface']['draw'][
+                                    'res-coarse']).SetValue(drawData['coarse'])
+                self.FindWindowById(self.win['surface']['draw'][
+                                    'res-fine']).SetValue(drawData['fine'])
                 continue
-            
+
             if control == 'mode':
                 if drawData['desc']['mode'] == 'coarse':
-                    self.FindWindowById(self.win['surface']['draw']['mode']).SetSelection(0)
+                    self.FindWindowById(
+                        self.win['surface']['draw']['mode']).SetSelection(0)
                 elif drawData['desc']['mode'] == 'fine':
-                    self.FindWindowById(self.win['surface']['draw']['mode']).SetSelection(1)
-                else: # both
-                    self.FindWindowById(self.win['surface']['draw']['mode']).SetSelection(2)
-                
+                    self.FindWindowById(
+                        self.win['surface']['draw']['mode']).SetSelection(1)
+                else:  # both
+                    self.FindWindowById(
+                        self.win['surface']['draw']['mode']).SetSelection(2)
+
                 if drawData['desc']['style'] == 'wire':
-                    self.FindWindowById(self.win['surface']['draw']['style']).SetSelection(0)
-                else: # surface
-                    self.FindWindowById(self.win['surface']['draw']['style']).SetSelection(1)
-                
+                    self.FindWindowById(
+                        self.win['surface']['draw']['style']).SetSelection(0)
+                else:  # surface
+                    self.FindWindowById(
+                        self.win['surface']['draw']['style']).SetSelection(1)
+
                 if drawData['desc']['shading'] == 'flat':
-                    self.FindWindowById(self.win['surface']['draw']['shading']).SetSelection(0)
-                else: # gouraud
-                    self.FindWindowById(self.win['surface']['draw']['shading']).SetSelection(1)
-                
+                    self.FindWindowById(
+                        self.win['surface']['draw']['shading']).SetSelection(0)
+                else:  # gouraud
+                    self.FindWindowById(
+                        self.win['surface']['draw']['shading']).SetSelection(1)
+
                 continue
-            
+
             value = drawData['value']
             win = self.FindWindowById(self.win['surface']['draw'][control])
-            
+
             name = win.GetName()
-            
+
             if name == "selection":
                 win.SetSelection(value)
             elif name == "colour":
@@ -4744,9 +5369,9 @@ class NvizToolWindow(FN.FlatNotebook):
         self.OnSurfaceAxis(None)
 
         # enable/disable res widget + set draw mode
-        self.OnSurfaceMode(event = None)
-        
-    def UpdateVectorPage(self, layer, data, updateName = True):
+        self.OnSurfaceMode(event=None)
+
+    def UpdateVectorPage(self, layer, data, updateName=True):
         """Update vector page"""
         vInfo = grass.vector_info_topo(layer.GetName())
         if not vInfo:
@@ -4758,26 +5383,33 @@ class NvizToolWindow(FN.FlatNotebook):
             desc = _("Vector map is 2D")
             enable = True
         desc += " - " + _("%(features)d features (%(points)d points)") % \
-            { 'features' : vInfo['primitives'], 'points' : vInfo['points']}
-        
+            {'features': vInfo['primitives'], 'points': vInfo['points']}
+
         if updateName:
             self.FindWindowById(self.win['vector']['map']).SetValue(layer.name)
         self.FindWindowById(self.win['vector']['desc']).SetLabel(desc)
-        
+
         self.FindWindowById(self.win['vector']['lines']['3d']).Enable(enable)
         for v in ('lines', 'points'):
-            self.FindWindowById(self.win['vector'][v]['surface']).Enable(enable)
-            self.FindWindowById(self.win['vector'][v]['height']['slider']).Enable(enable)
-            self.FindWindowById(self.win['vector'][v]['height']['text']).Enable(enable)
-            
+            self.FindWindowById(
+                self.win['vector'][v]['surface']).Enable(enable)
+            self.FindWindowById(self.win['vector'][v]['height'][
+                                'slider']).Enable(enable)
+            self.FindWindowById(
+                self.win['vector'][v]['height']['text']).Enable(enable)
+
             if data[v]['thematic']['usecolor']:
-                check = self.FindWindowById(self.win['vector'][v]['thematic']['checkcolor'])
+                check = self.FindWindowById(
+                    self.win['vector'][v]['thematic']['checkcolor'])
                 check.SetValue(data[v]['thematic']['usecolor'])
-            if 'usesize' in data[v]['thematic'] and data[v]['thematic']['usesize']:
-                check = self.FindWindowById(self.win['vector'][v]['thematic']['checksize'])
+            if 'usesize' in data[v]['thematic'] and data[
+                    v]['thematic']['usesize']:
+                check = self.FindWindowById(
+                    self.win['vector'][v]['thematic']['checksize'])
                 check.SetValue(data[v]['thematic']['usesize'])
             elif 'usewidth' in data[v]['thematic'] and data[v]['thematic']['usewidth']:
-                check = self.FindWindowById(self.win['vector'][v]['thematic']['checkwidth'])
+                check = self.FindWindowById(
+                    self.win['vector'][v]['thematic']['checkwidth'])
                 check.SetValue(data[v]['thematic']['usewidth'])
             self.OnCheckThematic(None)
         #
@@ -4792,23 +5424,24 @@ class NvizToolWindow(FN.FlatNotebook):
             showLines.Enable(True)
         else:
             showLines.Enable(False)
-        
+
         self.UpdateVectorShow('lines', showLines.IsChecked())
-        
+
         width = self.FindWindowById(self.win['vector']['lines']['width'])
         width.SetValue(data['lines']['width']['value'])
-        
+
         color = self.FindWindowById(self.win['vector']['lines']['color'])
         color.SetValue(map(int, data['lines']['color']['value'].split(':')))
-        
+
         for vtype in ('lines', 'points'):
             if vtype == 'lines':
-                display = self.FindWindowById(self.win['vector']['lines']['3d'])
+                display = self.FindWindowById(
+                    self.win['vector']['lines']['3d'])
                 if vInfo['map3d']:
                     items = [_("on surface(s):"), _("as 3D")]
                 else:
                     items = [_("on surface")]
-                display.SetItems(items)               
+                display.SetItems(items)
                 if data[vtype]['mode']['type'] == '3d':
                     display.SetSelection(1)
                 else:
@@ -4817,24 +5450,26 @@ class NvizToolWindow(FN.FlatNotebook):
                 rasters = self.mapWindow.GetLayerNames('raster')
                 constants = self.mapWindow.GetLayerNames('constant')
                 surfaces = rasters + constants
-                surfaceWin = self.FindWindowById(self.win['vector'][vtype]['surface'])
+                surfaceWin = self.FindWindowById(
+                    self.win['vector'][vtype]['surface'])
                 surfaceWin.SetItems(surfaces)
                 for idx, surface in enumerate(surfaces):
-                    try:# TODO fix this mess
+                    try:  # TODO fix this mess
                         selected = data[vtype]['mode']['surface']['show'][idx]
                     except (TypeError, IndexError, KeyError):
                         selected = False
                     surfaceWin.Check(idx, selected)
 
         for type in ('slider', 'text'):
-            win = self.FindWindowById(self.win['vector']['lines']['height'][type])
+            win = self.FindWindowById(
+                self.win['vector']['lines']['height'][type])
             win.SetValue(data['lines']['height']['value'])
-        
+
         #
         # points
         #
         showPoints = self.FindWindowById(self.win['vector']['points']['show'])
-        
+
         if 'object' in data['points']:
             showPoints.SetValue(True)
         else:
@@ -4843,7 +5478,7 @@ class NvizToolWindow(FN.FlatNotebook):
             showPoints.Enable(True)
         else:
             showPoints.Enable(False)
-        
+
         self.UpdateVectorShow('points', showPoints.IsChecked())
         # size, width, marker, color
         for prop in ('size', 'marker', 'color'):
@@ -4867,27 +5502,29 @@ class NvizToolWindow(FN.FlatNotebook):
         else:
             win.SetSelection(0)
 
-##        self.OnCheckThematic(None)
+# self.OnCheckThematic(None)
         # height
         for type in ('slider', 'text'):
-            win = self.FindWindowById(self.win['vector']['points']['height'][type])
+            win = self.FindWindowById(
+                self.win['vector']['points']['height'][type])
             win.SetValue(data['points']['height']['value'])
-        
-    def UpdateVolumePage(self, layer, data, updateName = True):
+
+    def UpdateVolumePage(self, layer, data, updateName=True):
         """Update volume page"""
         if updateName:
             self.FindWindowById(self.win['volume']['map']).SetValue(layer.name)
-        
+
         # draw
         for control, idata in data['draw'].iteritems():
-            if control == 'all': # skip 'all' property
+            if control == 'all':  # skip 'all' property
                 continue
-                
+
             win = self.FindWindowById(self.win['volume']['draw'][control])
             if control == 'mode':
                 value = data['draw']['mode']['value']
             if control == 'shading':
-                if data['draw']['shading'][data['draw']['mode']['desc']]['desc'] == 'flat':
+                if data['draw']['shading'][data['draw']
+                                           ['mode']['desc']]['desc'] == 'flat':
                     value = 0
                 else:
                     value = 1
@@ -4895,22 +5532,26 @@ class NvizToolWindow(FN.FlatNotebook):
                 value = idata[data['draw']['mode']['desc']]['value']
             if control == 'box':
                 value = idata['enabled']
-            
+
             if win.GetName() == "selection":
                 win.SetSelection(value)
             else:
                 win.SetValue(value)
-                
+
         self.OnVolumeMode(None)
         id = data['object']['id']
         if data['draw']['mode']['desc'] == 'isosurface':
-            self._display.SetIsosurfaceMode(id, data['draw']['shading']['isosurface']['value'])
-            self._display.SetIsosurfaceRes(id, data['draw']['resolution']['isosurface']['value'])
+            self._display.SetIsosurfaceMode(
+                id, data['draw']['shading']['isosurface']['value'])
+            self._display.SetIsosurfaceRes(
+                id, data['draw']['resolution']['isosurface']['value'])
         else:
-            self._display.SetSliceMode(id, data['draw']['shading']['slice']['value'])
-            self._display.SetSliceRes(id, data['draw']['resolution']['slice']['value'])
+            self._display.SetSliceMode(
+                id, data['draw']['shading']['slice']['value'])
+            self._display.SetSliceRes(
+                id, data['draw']['resolution']['slice']['value'])
         box = self.FindWindowById(self.win['volume']['isosurfs'])
-        
+
         if data['draw']['mode']['desc'] == 'isosurface':
             isosurfaces = []
             for iso in data['isosurface']:
@@ -4942,33 +5583,39 @@ class NvizToolWindow(FN.FlatNotebook):
         #
         if 'z' in data['position']:
             zval = data['position']['z']
-            self.FindWindowById(self.win['volume']['position']['axis']).SetSelection(2)
-            for control in ('slider','text'):
-                    self.FindWindowById(self.win['volume']['position'][control]).SetValue(zval)
+            self.FindWindowById(
+                self.win['volume']['position']['axis']).SetSelection(2)
+            for control in ('slider', 'text'):
+                self.FindWindowById(
+                    self.win['volume']['position'][control]).SetValue(zval)
         # set topo range
-        mapRange = self._get3dRange(name = layer.name)
+        mapRange = self._get3dRange(name=layer.name)
         desc = self.FindWindowById(self.win['volume']['desc'])
-        desc.SetLabel("%s %.2f - %.2f" % (_("range:"), mapRange[0], mapRange[1]))
-        
+        desc.SetLabel(
+            "%s %.2f - %.2f" %
+            (_("range:"), mapRange[0], mapRange[1]))
+
     def UpdateVolumeIsosurfPage(self, data):
         """Update dialog -- isosurface attributes"""
         #
         # isosurface attributes
         #
         for attrb in ('topo', 'color', 'mask',
-                     'transp', 'shine'):
+                      'transp', 'shine'):
             # skip empty attributes
             if attrb not in data:
-                self.SetMapObjUseMap(nvizType = 'volume', attrb = attrb, map = None)
-                continue     
-            
+                self.SetMapObjUseMap(nvizType='volume', attrb=attrb, map=None)
+                continue
+
             value = data[attrb]['value']
             if attrb == 'color':
                 if data[attrb]['map']:
-                    self.FindWindowById(self.win['volume'][attrb]['map']).SetValue(value)
-                else: # constant
+                    self.FindWindowById(
+                        self.win['volume'][attrb]['map']).SetValue(value)
+                else:  # constant
                     color = map(int, value.split(':'))
-                    self.FindWindowById(self.win['volume'][attrb]['const']).SetColour(color)
+                    self.FindWindowById(
+                        self.win['volume'][attrb]['const']).SetColour(color)
             else:
                 if data[attrb]['map']:
                     self.vetoGSelectEvt = True
@@ -4976,51 +5623,60 @@ class NvizToolWindow(FN.FlatNotebook):
                     win.SetValue(value)
                 else:
                     if value:
-                        win = self.FindWindowById(self.win['volume'][attrb]['const'])
+                        win = self.FindWindowById(
+                            self.win['volume'][attrb]['const'])
                         if attrb == 'topo':
                             win.SetValue(float(value))
                         else:
                             win.SetValue(self._getPercent(value))
-                    
-            self.SetMapObjUseMap(nvizType = 'volume',
-                                 attrb = attrb, map = data[attrb]['map'])
+
+            self.SetMapObjUseMap(nvizType='volume',
+                                 attrb=attrb, map=data[attrb]['map'])
         # set inout
         if 'inout' in data:
-            self.FindWindowById(self.win['volume']['inout']).SetValue(data['inout']['value'])
-            
+            self.FindWindowById(
+                self.win['volume']['inout']).SetValue(
+                data['inout']['value'])
+
     def UpdateVolumeSlicePage(self, data):
         """Update dialog -- slice attributes"""
         if data:
             for coord in ('x1', 'x2', 'y1', 'y2', 'z1', 'z2'):
-                win = self.FindWindowById(self.win['volume']['slice']['slider_' + coord])
+                win = self.FindWindowById(
+                    self.win['volume']['slice'][
+                        'slider_' + coord])
                 win.Enable()
                 win.SetValue(data['position'][coord] * 100)
             win = self.FindWindowById(self.win['volume']['slice']['axes'])
             win.SetSelection(data['position']['axis'])
             win.Enable()
-            
+
             win = self.FindWindowById(self.win['volume']['slice']['transp'])
             win.SetValue(self._getPercent(data['transp']['value']))
             win.Enable()
             self.FindWindowById(self.win['volume']['slice']['reset']).Enable()
         else:
             for coord in ('x1', 'x2', 'y1', 'y2', 'z1', 'z2'):
-                self.FindWindowById(self.win['volume']['slice']['slider_' + coord]).Disable()
+                self.FindWindowById(
+                    self.win['volume']['slice'][
+                        'slider_' + coord]).Disable()
             self.FindWindowById(self.win['volume']['slice']['axes']).Disable()
-            self.FindWindowById(self.win['volume']['slice']['transp']).Disable()
+            self.FindWindowById(
+                self.win['volume']['slice']['transp']).Disable()
             self.FindWindowById(self.win['volume']['slice']['reset']).Disable()
-        
+
         self.UpdateSliceLabels()
-        
+
     def UpdateSliceLabels(self):
         """Update text labels of slice controls according to axis"""
-        sel = self.FindWindowById(self.win['volume']['slice']['axes']).GetSelection()
+        sel = self.FindWindowById(
+            self.win['volume']['slice']['axes']).GetSelection()
         if sel == 0:
             self.FindWindowByName('label_edge_0').SetLabel(_("North edge:"))
             self.FindWindowByName('label_edge_1').SetLabel(_("South edge:"))
             self.FindWindowByName('label_edge_2').SetLabel(_("West edge:"))
             self.FindWindowByName('label_edge_3').SetLabel(_("East edge:"))
-            
+
             self.FindWindowByName('label_coord_0').SetLabel(_("Northing (Y):"))
             self.FindWindowByName('label_coord_1').SetLabel(_("Height (Z):"))
             self.FindWindowByName('label_coord_2').SetLabel(_("Easting (X):"))
@@ -5029,7 +5685,7 @@ class NvizToolWindow(FN.FlatNotebook):
             self.FindWindowByName('label_edge_1').SetLabel(_("East edge:"))
             self.FindWindowByName('label_edge_2').SetLabel(_("North edge:"))
             self.FindWindowByName('label_edge_3').SetLabel(_("South edge:"))
-            
+
             self.FindWindowByName('label_coord_0').SetLabel(_("Easting (X):"))
             self.FindWindowByName('label_coord_1').SetLabel(_("Height (Z):"))
             self.FindWindowByName('label_coord_2').SetLabel(_("Northing (Y):"))
@@ -5037,12 +5693,12 @@ class NvizToolWindow(FN.FlatNotebook):
             self.FindWindowByName('label_edge_0').SetLabel(_("West edge:"))
             self.FindWindowByName('label_edge_1').SetLabel(_("East edge:"))
             self.FindWindowByName('label_edge_2').SetLabel(_("Bottom edge:"))
-            self.FindWindowByName('label_edge_3').SetLabel(_("Top edge:"))  
-            
+            self.FindWindowByName('label_edge_3').SetLabel(_("Top edge:"))
+
             self.FindWindowByName('label_coord_0').SetLabel(_("Easting (X):"))
             self.FindWindowByName('label_coord_1').SetLabel(_("Northing (Y):"))
-            self.FindWindowByName('label_coord_2').SetLabel(_("Height (Z):")) 
-        
+            self.FindWindowByName('label_coord_2').SetLabel(_("Height (Z):"))
+
     def SetPage(self, name):
         """Get named page"""
         if name == 'view':
@@ -5055,33 +5711,36 @@ class NvizToolWindow(FN.FlatNotebook):
         win = self.FindWindowById(self.page[name]['notebook'])
         try:
             win.Expand(win.GetFoldPanel(self.page[name]['id']))
-            self.UpdateScrolling((win.GetFoldPanel(self.page[name]['id']).GetGrandParent(),))
+            self.UpdateScrolling(
+                (win.GetFoldPanel(self.page[name]['id']).GetGrandParent(),))
         except AttributeError:
             win.SetSelection(self.page[name]['id'])
 
+
 class PositionWindow(wx.Window):
     """Abstract position control window, see subclasses
     ViewPostionWindow and LightPositionWindow"""
-    def __init__(self, parent, mapwindow, id = wx.ID_ANY,
+
+    def __init__(self, parent, mapwindow, id=wx.ID_ANY,
                  **kwargs):
         self.mapWindow = mapwindow
         self.quick = True
-        
+
         wx.Window.__init__(self, parent, id, **kwargs)
-        
+
         self.SetBackgroundColour("WHITE")
-        
+
         self.pdc = wx.PseudoDC()
-        
-        self.pdc.SetBrush(wx.Brush(colour = 'dark green', style = wx.SOLID))
-        self.pdc.SetPen(wx.Pen(colour = 'dark green', width = 2, style = wx.SOLID))
+
+        self.pdc.SetBrush(wx.Brush(colour='dark green', style=wx.SOLID))
+        self.pdc.SetPen(wx.Pen(colour='dark green', width=2, style=wx.SOLID))
 
         self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
         self.Bind(wx.EVT_PAINT, self.OnPaint)
         # self.Bind(wx.EVT_MOTION,       self.OnMouse)
         self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)
-        
-    def Draw(self, pos, scale = False):
+
+    def Draw(self, pos, scale=False):
         w, h = self.GetClientSize()
         x, y = pos
         if scale:
@@ -5092,16 +5751,16 @@ class PositionWindow(wx.Window):
         self.pdc.DrawLine(w / 2, h / 2, x, y)
         self.pdc.DrawCircle(x, y, 5)
         self.pdc.EndDrawing()
-        
+
     def OnPaint(self, event):
         dc = wx.BufferedPaintDC(self)
         dc.SetBackground(wx.Brush("White"))
         dc.Clear()
-        
+
         # probably does nothing, removed from wxPython 2.9
         # self.PrepareDC(dc)
         self.pdc.DrawToDC(dc)
-        
+
     def UpdatePos(self, xcoord, ycoord):
         """Update position coordinates (origin: UL)"""
         if xcoord < 0.0:
@@ -5112,102 +5771,108 @@ class PositionWindow(wx.Window):
             ycoord = 0.0
         elif ycoord > 1.0:
             ycoord = 1.0
-        
+
         x, y = self.TransformCoordinates(xcoord, ycoord)
-        self.data['position']['x'] = x        
+        self.data['position']['x'] = x
         self.data['position']['y'] = y
-        
+
         return xcoord, ycoord
-    
+
     def OnMouse(self, event):
         if event.LeftIsDown():
             x, y = event.GetPosition()
-            self.Draw(pos = (x, y))
+            self.Draw(pos=(x, y))
             w, h = self.GetClientSize()
             x = float(x) / w
             y = float(y) / h
             self.UpdatePos(x, y)
             self.Refresh(False)
-        
+
         event.Skip()
-        
+
     def PostDraw(self):
         x, y = self.UpdatePos(self.data['position']['x'],
                               self.data['position']['y'])
-        
-        self.Draw(pos = (x,y), scale = True)
+
+        self.Draw(pos=(x, y), scale=True)
+
 
 class ViewPositionWindow(PositionWindow):
     """View position control widget"""
-    def __init__(self, parent, mapwindow, id = wx.ID_ANY,
+
+    def __init__(self, parent, mapwindow, id=wx.ID_ANY,
                  **kwargs):
         PositionWindow.__init__(self, parent, mapwindow, id, **kwargs)
-        self.SetToolTipString(_("Adjusts the distance and direction of the image viewpoint"))
+        self.SetToolTipString(
+            _("Adjusts the distance and direction of the image viewpoint"))
         self.data = self.mapWindow.view
         self.PostDraw()
-        
+
     def UpdatePos(self, xcoord, ycoord):
         x, y = PositionWindow.UpdatePos(self, xcoord, ycoord)
-        
-        event = wxUpdateView(zExag = True)
+
+        event = wxUpdateView(zExag=True)
         wx.PostEvent(self.mapWindow, event)
 
         return x, y
-    
-    def TransformCoordinates(self, x, y, toLight = True):
+
+    def TransformCoordinates(self, x, y, toLight=True):
         return x, y
-        
+
     def OnMouse(self, event):
-        self.mapWindow.iview['dir']['use'] = False # use focus instead of viewdir
+        # use focus instead of viewdir
+        self.mapWindow.iview['dir']['use'] = False
         PositionWindow.OnMouse(self, event)
         if event.LeftIsDown():
             self.mapWindow.render['quick'] = self.quick
-            self.mapWindow.Refresh(eraseBackground = False)
+            self.mapWindow.Refresh(eraseBackground=False)
         elif event.LeftUp():
             self.mapWindow.render['quick'] = False
-            self.mapWindow.Refresh(eraseBackground = False)
-        
+            self.mapWindow.Refresh(eraseBackground=False)
+
         event.Skip()
-    
+
+
 class LightPositionWindow(PositionWindow):
     """Light position control widget"""
-    def __init__(self, parent, mapwindow, id = wx.ID_ANY,
+
+    def __init__(self, parent, mapwindow, id=wx.ID_ANY,
                  **kwargs):
         PositionWindow.__init__(self, parent, mapwindow, id, **kwargs)
         self.SetToolTipString(_("Adjusts the light direction. "
                                 "Click and drag the puck to change the light direction."))
-        
+
         self.data = self.mapWindow.light
         self.quick = False
         self.PostDraw()
 
     def UpdatePos(self, xcoord, ycoord):
         x, y = PositionWindow.UpdatePos(self, xcoord, ycoord)
-        
-        event = wxUpdateLight(refresh = False)
+
+        event = wxUpdateLight(refresh=False)
         wx.PostEvent(self.mapWindow, event)
-        
+
         return x, y
-    
-    def TransformCoordinates(self, x, y, toLight = True):
+
+    def TransformCoordinates(self, x, y, toLight=True):
         if toLight:
             x = 2 * x - 1
             y = -2 * y + 1
         else:
-            x = (x + 1)/2
-            y = (1 - y)/2
+            x = (x + 1) / 2
+            y = (1 - y) / 2
         return x, y
-    
+
     def PostDraw(self):
-        event = wxUpdateLight(refresh = True)
+        event = wxUpdateLight(refresh=True)
         wx.PostEvent(self.mapWindow, event)
         x, y = self.data['position']['x'], self.data['position']['y']
-        x, y = self.TransformCoordinates(x, y, toLight = False)
-        
-        self.Draw(pos = (x,y), scale = True)
-        
+        x, y = self.TransformCoordinates(x, y, toLight=False)
+
+        self.Draw(pos=(x, y), scale=True)
+
     def OnMouse(self, event):
         PositionWindow.OnMouse(self, event)
         if event.LeftUp():
             self.mapWindow.render['quick'] = False
-            self.mapWindow.Refresh(eraseBackground = False)
+            self.mapWindow.Refresh(eraseBackground=False)
diff --git a/gui/wxpython/nviz/workspace.py b/gui/wxpython/nviz/workspace.py
index f48d117..fc98345 100644
--- a/gui/wxpython/nviz/workspace.py
+++ b/gui/wxpython/nviz/workspace.py
@@ -26,15 +26,18 @@ except ImportError:
 
 
 class NvizSettings(object):
+
     def __init__(self):
         pass
 
     def SetConstantDefaultProp(self):
         """Set default constant data properties"""
         data = dict()
-        for key, value in UserSettings.Get(group='nviz', key='constant').iteritems():
+        for key, value in UserSettings.Get(
+                group='nviz', key='constant').iteritems():
             data[key] = value
-        color = str(data['color'][0]) + ':' + str(data['color'][1]) + ':' + str(data['color'][2])
+        color = str(data['color'][0]) + ':' + str(data['color']
+                                                  [1]) + ':' + str(data['color'][2])
         data['color'] = color
 
         return data
@@ -59,7 +62,7 @@ class NvizSettings(object):
         #
         # draw
         #
-        data['draw']['all'] = False # apply only for current surface
+        data['draw']['all'] = False  # apply only for current surface
         for control, value in UserSettings.Get(group='nviz', key='surface',
                                                subkey='draw').iteritems():
             if control[:3] == 'res':
@@ -71,25 +74,32 @@ class NvizSettings(object):
                 continue
 
             if control == 'wire-color':
-                value = str(value[0]) + ':' + str(value[1]) + ':' + str(value[2])
+                value = str(value[0]) + ':' + str(value[1]
+                                                  ) + ':' + str(value[2])
             elif control in ('mode', 'style', 'shading'):
                 if 'mode' not in data['draw']:
                     data['draw']['mode'] = {}
                 continue
 
-            data['draw'][control] = { 'value' : value }
+            data['draw'][control] = {'value': value}
             data['draw'][control]['update'] = None
 
-        value, desc = self.GetDrawMode(UserSettings.Get(group='nviz', key='surface', subkey=['draw', 'mode']),
-                                       UserSettings.Get(group='nviz', key='surface', subkey=['draw', 'style']),
-                                       UserSettings.Get(group='nviz', key='surface', subkey=['draw', 'shading']))
-
-        data['draw']['mode'] = { 'value' : value,
-                                 'desc' : desc,
-                                 'update': None }
+        value, desc = self.GetDrawMode(
+            UserSettings.Get(
+                group='nviz', key='surface', subkey=[
+                    'draw', 'mode']), UserSettings.Get(
+                group='nviz', key='surface', subkey=[
+                    'draw', 'style']), UserSettings.Get(
+                        group='nviz', key='surface', subkey=[
+                            'draw', 'shading']))
+
+        data['draw']['mode'] = {'value': value,
+                                'desc': desc,
+                                'update': None}
         # position
         for coord in ('x', 'y', 'z'):
-            data['position'][coord] = UserSettings.Get(group='nviz', key='surface', subkey=['position', coord])
+            data['position'][coord] = UserSettings.Get(
+                group='nviz', key='surface', subkey=['position', coord])
         data['position']['update'] = None
 
         return data
@@ -100,37 +110,44 @@ class NvizSettings(object):
         for sec in ('attribute', 'draw', 'position'):
             data[sec] = dict()
             for sec in ('isosurface', 'slice'):
-                    data[sec] = list()
+                data[sec] = list()
 
         #
         # draw
         #
-        for control, value in UserSettings.Get(group='nviz', key='volume', subkey='draw').iteritems():
+        for control, value in UserSettings.Get(
+                group='nviz', key='volume', subkey='draw').iteritems():
             if control == 'shading':
-                sel = UserSettings.Get(group='nviz', key='volume', subkey=['draw', 'shading'])
+                sel = UserSettings.Get(
+                    group='nviz', key='volume', subkey=[
+                        'draw', 'shading'])
                 value, desc = self.GetDrawMode(shade=sel, string=False)
 
                 data['draw']['shading'] = {}
-                data['draw']['shading']['isosurface'] = { 'value' : value,
-                                                          'desc' : desc['shading'] }
-                data['draw']['shading']['slice'] = { 'value' : value,
-                                                     'desc' : desc['shading'] }
+                data['draw']['shading']['isosurface'] = {
+                    'value': value, 'desc': desc['shading']}
+                data['draw']['shading']['slice'] = {'value': value,
+                                                    'desc': desc['shading']}
             elif control == 'mode':
-                sel = UserSettings.Get(group='nviz', key='volume', subkey=['draw', 'mode'])
+                sel = UserSettings.Get(
+                    group='nviz', key='volume', subkey=[
+                        'draw', 'mode'])
                 if sel == 0:
                     desc = 'isosurface'
                 else:
                     desc = 'slice'
-                data['draw']['mode'] = { 'value' : sel,
-                                         'desc' : desc, }
+                data['draw']['mode'] = {'value': sel,
+                                        'desc': desc, }
             elif control == 'box':
-                box = UserSettings.Get(group = 'nviz', key = 'volume', subkey = ['draw', 'box'])
+                box = UserSettings.Get(
+                    group='nviz', key='volume', subkey=[
+                        'draw', 'box'])
                 data['draw']['box'] = {'enabled': box}
 
             else:
                 data['draw'][control] = {}
-                data['draw'][control]['isosurface'] = { 'value' : value }
-                data['draw'][control]['slice'] = { 'value' : value }
+                data['draw'][control]['isosurface'] = {'value': value}
+                data['draw'][control]['slice'] = {'value': value}
 
             if 'update' not in data['draw'][control]:
                 data['draw'][control]['update'] = None
@@ -155,20 +172,26 @@ class NvizSettings(object):
             if attr == 'inout':
                 data[attr]['value'] = 0
                 continue
-            for key, value in UserSettings.Get(group = 'nviz', key = 'volume',
-                                               subkey = attr).iteritems():
+            for key, value in UserSettings.Get(group='nviz', key='volume',
+                                               subkey=attr).iteritems():
                 data[attr][key] = value
         return data
 
     def SetSliceDefaultProp(self):
         """Set default slice properties"""
         data = dict()
-        data['position'] = copy.deepcopy(UserSettings.Get(group='nviz', key='volume',
-                                               subkey = 'slice_position'))
+        data['position'] = copy.deepcopy(
+            UserSettings.Get(
+                group='nviz',
+                key='volume',
+                subkey='slice_position'))
         data['position']['update'] = None
 
-        data['transp'] = copy.deepcopy(UserSettings.Get(group='nviz', key='volume',
-                                                        subkey='transp'))
+        data['transp'] = copy.deepcopy(
+            UserSettings.Get(
+                group='nviz',
+                key='volume',
+                subkey='transp'))
         return data
 
     def SetVectorDefaultProp(self, data=None):
@@ -208,16 +231,21 @@ class NvizSettings(object):
         data['mode']['update'] = None
 
         # height
-        data['height'] = { 'value' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['lines', 'height']) }
+        data['height'] = {
+            'value': UserSettings.Get(
+                group='nviz',
+                key='vector',
+                subkey=[
+                    'lines',
+                    'height'])}
         # thematic
-        data['thematic'] = {'rgbcolumn' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['lines', 'rgbcolumn']),
-                            'sizecolumn' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['lines', 'sizecolumn']),
+        data['thematic'] = {'rgbcolumn': UserSettings.Get(group='nviz', key='vector',
+                                                          subkey=['lines', 'rgbcolumn']),
+                            'sizecolumn': UserSettings.Get(group='nviz', key='vector',
+                                                           subkey=['lines', 'sizecolumn']),
                             'layer': 1,
-                            'usecolor' : False,
-                            'usewidth' : False}
+                            'usecolor': False,
+                            'usewidth': False}
         if 'object' in data:
             for attrb in ('color', 'width', 'mode', 'height', 'thematic'):
                 data[attrb]['update'] = None
@@ -225,38 +253,57 @@ class NvizSettings(object):
     def SetVectorPointsDefaultProp(self, data):
         """Set default vector properties -- points"""
         # size
-        data['size'] = { 'value' : UserSettings.Get(group='nviz', key='vector',
-                                                    subkey=['points', 'size']) }
+        data['size'] = {'value': UserSettings.Get(group='nviz', key='vector',
+                                                  subkey=['points', 'size'])}
 
         # width
-        data['width'] = { 'value' : UserSettings.Get(group='nviz', key='vector',
-                                                     subkey=['points', 'width']) }
+        data['width'] = {'value': UserSettings.Get(group='nviz', key='vector',
+                                                   subkey=['points', 'width'])}
 
         # marker
-        data['marker'] = { 'value' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['points', 'marker']) }
+        data['marker'] = {
+            'value': UserSettings.Get(
+                group='nviz',
+                key='vector',
+                subkey=[
+                    'points',
+                    'marker'])}
 
         # color
         value = UserSettings.Get(group='nviz', key='vector',
                                  subkey=['points', 'color'])
         color = str(value[0]) + ':' + str(value[1]) + ':' + str(value[2])
-        data['color'] = { 'value' : color }
+        data['color'] = {'value': color}
 
         # mode
-        data['mode'] = { 'type' : 'surface'}
-##                         'surface' : '', }
+        data['mode'] = {'type': 'surface'}
+# 'surface' : '', }
 
         # height
-        data['height'] = { 'value' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['points', 'height']) }
-
-        data['thematic'] = {'rgbcolumn' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['points', 'rgbcolumn']),
-                            'sizecolumn' : UserSettings.Get(group='nviz', key='vector',
-                                                      subkey=['points', 'sizecolumn']),
-                            'layer': 1,
-                            'usecolor' : False,
-                            'usesize' : False}
+        data['height'] = {
+            'value': UserSettings.Get(
+                group='nviz',
+                key='vector',
+                subkey=[
+                    'points',
+                    'height'])}
+
+        data['thematic'] = {
+            'rgbcolumn': UserSettings.Get(
+                group='nviz',
+                key='vector',
+                subkey=[
+                    'points',
+                    'rgbcolumn']),
+            'sizecolumn': UserSettings.Get(
+                group='nviz',
+                key='vector',
+                subkey=[
+                    'points',
+                    'sizecolumn']),
+            'layer': 1,
+            'usecolor': False,
+            'usesize': False}
         if 'object' in data:
             for attrb in ('size', 'width', 'marker',
                           'color', 'height', 'thematic'):
@@ -283,40 +330,40 @@ class NvizSettings(object):
                     value |= wxnviz.DM_WIRE
                 elif mode == 'fine':
                     value |= wxnviz.DM_POLY
-                else: # both
+                else:  # both
                     value |= wxnviz.DM_WIRE_POLY
 
             if style is not None:
                 if style == 'wire':
                     value |= wxnviz.DM_GRID_WIRE
-                else: # surface
+                else:  # surface
                     value |= wxnviz.DM_GRID_SURF
 
             if shade is not None:
                 if shade == 'flat':
                     value |= wxnviz.DM_FLAT
-                else: # surface
+                else:  # surface
                     value |= wxnviz.DM_GOURAUD
 
             return value
 
         # -> string is False
         if mode is not None:
-            if mode == 0: # coarse
+            if mode == 0:  # coarse
                 value |= wxnviz.DM_WIRE
                 desc['mode'] = 'coarse'
-            elif mode == 1: # fine
+            elif mode == 1:  # fine
                 value |= wxnviz.DM_POLY
                 desc['mode'] = 'fine'
-            else: # both
+            else:  # both
                 value |= wxnviz.DM_WIRE_POLY
                 desc['mode'] = 'both'
 
         if style is not None:
-            if style == 0: # wire
+            if style == 0:  # wire
                 value |= wxnviz.DM_GRID_WIRE
                 desc['style'] = 'wire'
-            else: # surface
+            else:  # surface
                 value |= wxnviz.DM_GRID_SURF
                 desc['style'] = 'surface'
 
@@ -324,7 +371,7 @@ class NvizSettings(object):
             if shade == 0:
                 value |= wxnviz.DM_FLAT
                 desc['shading'] = 'flat'
-            else: # surface
+            else:  # surface
                 value |= wxnviz.DM_GOURAUD
                 desc['shading'] = 'gouraud'
 
@@ -342,9 +389,12 @@ class NvizSettings(object):
             data['arrow']['color'] = "%d:%d:%d" % (
                 UserSettings.Get(group='nviz', key='arrow',
                                  subkey='color')[:3])
-            data['arrow'].update(copy.deepcopy(UserSettings.Get(group='nviz',
-                                                                key='arrow',
-                                                                settings_type='internal')))
+            data['arrow'].update(
+                copy.deepcopy(
+                    UserSettings.Get(
+                        group='nviz',
+                        key='arrow',
+                        settings_type='internal')))
             data['arrow']['show'] = False
 
         # arrow
@@ -354,8 +404,11 @@ class NvizSettings(object):
             data['scalebar']['color'] = "%d:%d:%d" % (
                 UserSettings.Get(group='nviz', key='scalebar',
                                  subkey='color')[:3])
-            data['scalebar'].update(copy.deepcopy(UserSettings.Get(group='nviz',
-                                                                   key='scalebar',
-                                                                   settings_type='internal')))
+            data['scalebar'].update(
+                copy.deepcopy(
+                    UserSettings.Get(
+                        group='nviz',
+                        key='scalebar',
+                        settings_type='internal')))
             data['scalebar']['id'] = 0
         return data
diff --git a/gui/wxpython/nviz/wxnviz.py b/gui/wxpython/nviz/wxnviz.py
index 4963a38..94f777a 100644
--- a/gui/wxpython/nviz/wxnviz.py
+++ b/gui/wxpython/nviz/wxnviz.py
@@ -25,35 +25,37 @@ This program is free software under the GNU General Public License
 import sys
 import locale
 import struct
-from math  import sqrt
+from math import sqrt
 try:
     from numpy import matrix
 except ImportError:
-    msg = _("This module requires the NumPy module, which could not be "
-            "imported. It probably is not installed (it's not part of the "
-            "standard Python distribution). See the Numeric Python site "
-            "(http://numpy.scipy.org) for information on downloading source or "
-            "binaries.")
+    msg = _(
+        "This module requires the NumPy module, which could not be "
+        "imported. It probably is not installed (it's not part of the "
+        "standard Python distribution). See the Numeric Python site "
+        "(http://numpy.scipy.org) for information on downloading source or "
+        "binaries.")
     print >> sys.stderr, "wxnviz.py: " + msg
 
 import wx
 
 from ctypes import *
 
-from grass.lib.gis      import *
+from grass.lib.gis import *
 from grass.lib.raster3d import *
-from grass.lib.vector   import *
-from grass.lib.ogsf     import *
-from grass.lib.nviz     import *
-from grass.lib.raster   import *
+from grass.lib.vector import *
+from grass.lib.ogsf import *
+from grass.lib.nviz import *
+from grass.lib.raster import *
 
 from core.debug import Debug
-from core.utils import _
+from core.utils import _, autoCropImageFromFile
 import grass.script as grass
 
-log      = None
+log = None
 progress = None
 
+
 def print_error(msg, type):
     """Redirect stderr"""
     global log
@@ -61,9 +63,10 @@ def print_error(msg, type):
         log.write(msg)
     else:
         print msg
-    
+
     return 0
 
+
 def print_progress(value):
     """Redirect progress info"""
     global progress
@@ -73,7 +76,7 @@ def print_progress(value):
         progress.SetValue(value)
     else:
         print value
-    
+
     return 0
 
 try:
@@ -84,34 +87,36 @@ try:
 except NameError:
     pass
 
+
 class Nviz(object):
+
     def __init__(self, glog, gprogress):
         """Initialize Nviz class instance
-        
+
         :param glog: logging area
         :param gprogress: progressbar
         """
         global errfunc, perfunc, log, progress
         log = glog
         progress = gprogress
-        
+
         G_gisinit("wxnviz")
         # gislib is already initialized (where?)
-        G_set_error_routine(errfunc) 
+        G_set_error_routine(errfunc)
         G_set_percent_routine(perfunc)
-        
+
         self.Init()
-        
+
         self.data_obj = nv_data()
         self.data = pointer(self.data_obj)
         self.color_obj = Colors()
         self.color = pointer(self.color_obj)
-        
+
         self.width = self.height = -1
         self.showLight = False
-        
+
         Debug.msg(1, "Nviz::Nviz()")
-        
+
     def __del__(self):
         """Destroy Nviz class instance"""
         G_unset_error_routine()
@@ -129,46 +134,46 @@ class Nviz(object):
         GS_libinit()
         GVL_libinit()
         GVL_init_region()
-    
+
     def ResizeWindow(self, width, height):
         """GL canvas resized
-        
+
         :param width: window width
         :param height: window height
-        
+
         :return: 1 on success
         :return: 0 on failure (window resized by default to 20x20 px)
         """
-        self.width  = width
+        self.width = width
         self.height = height
         Debug.msg(3, "Nviz::ResizeWindow(): width=%d height=%d",
                   width, height)
         return Nviz_resize_window(width, height)
-    
+
     def GetLongDim(self):
         """Get longest dimension, used for initial size of north arrow"""
         return Nviz_get_longdim(self.data)
-    
+
     def SetViewDefault(self):
         """Set default view (based on loaded data)
-        
+
         :return: z-exag value, default, min and max height
         """
         # determine z-exag
         z_exag = Nviz_get_exag()
         Nviz_change_exag(self.data, z_exag)
-        
+
         # determine height
         hdef = c_double()
         hmin = c_double()
         hmax = c_double()
         Nviz_get_exag_height(byref(hdef), byref(hmin), byref(hmax))
-        
+
         Debug.msg(1, "Nviz::SetViewDefault(): hdef=%f, hmin=%f, hmax=%f",
                   hdef.value, hmin.value, hmax.value)
-        
+
         return (z_exag, hdef.value, hmin.value, hmax.value)
-    
+
     def SetView(self, x, y, height, persp, twist):
         """Change view settings
         :param x,y: position
@@ -180,32 +185,38 @@ class Nviz(object):
         Nviz_set_viewpoint_position(x, y)
         Nviz_set_viewpoint_twist(twist)
         Nviz_set_viewpoint_persp(persp)
-        
-        Debug.msg(3, "Nviz::SetView(): x=%f, y=%f, height=%f, persp=%f, twist=%f",
-                  x, y, height, persp, twist)
-                
+
+        Debug.msg(
+            3,
+            "Nviz::SetView(): x=%f, y=%f, height=%f, persp=%f, twist=%f",
+            x,
+            y,
+            height,
+            persp,
+            twist)
+
     def GetViewpointPosition(self):
         x = c_double()
         y = c_double()
         h = c_double()
         Nviz_get_viewpoint_height(byref(h))
         Nviz_get_viewpoint_position(byref(x), byref(y))
-        
+
         return (x.value, y.value, h.value)
-        
+
     def LookHere(self, x, y):
-        """Look here feature 
+        """Look here feature
         :param x,y: screen coordinates
         """
-        
+
         Nviz_look_here(x, y)
         Debug.msg(3, "Nviz::LookHere(): x=%f, y=%f", x, y)
-    
+
     def LookAtCenter(self):
         """Center view at center of displayed surface"""
         Nviz_set_focus_map(MAP_OBJ_UNDEFINED, -1)
         Debug.msg(3, "Nviz::LookAtCenter()")
-    
+
     def GetFocus(self):
         """Get focus"""
         Debug.msg(3, "Nviz::GetFocus()")
@@ -217,20 +228,20 @@ class Nviz(object):
             return x.value, y.value, z.value
         else:
             return -1, -1, -1
-        
+
     def SetFocus(self, x, y, z):
         """Set focus"""
         Debug.msg(3, "Nviz::SetFocus()")
         Nviz_set_focus(self.data, x, y, z)
-        
+
     def GetViewdir(self):
         """Get viewdir"""
         Debug.msg(3, "Nviz::GetViewdir()")
         dir = (c_float * 3)()
         GS_get_viewdir(byref(dir))
-        
+
         return dir[0], dir[1], dir[2]
-        
+
     def SetViewdir(self, x, y, z):
         """Set viewdir"""
         Debug.msg(3, "Nviz::SetViewdir(): x=%f, y=%f, z=%f" % (x, y, z))
@@ -238,70 +249,70 @@ class Nviz(object):
         for i, coord in enumerate((x, y, z)):
             dir[i] = coord
         GS_set_viewdir(byref(dir))
-                
+
     def SetZExag(self, z_exag):
         """Set z-exag value
-        
+
         :param z_exag: value
-        
+
         :return: 1
         """
         Debug.msg(3, "Nviz::SetZExag(): z_exag=%f", z_exag)
         return Nviz_change_exag(self.data, z_exag)
-    
+
     def Draw(self, quick, quick_mode):
         """Draw canvas
-        
+
         Draw quick mode:
          - DRAW_QUICK_SURFACE
          - DRAW_QUICK_VLINES
          - DRAW_QUICK_VPOINTS
          - DRAW_QUICK_VOLUME
-        
+
         :param quick: if true draw in wiremode
         :param quick_mode: quick mode
         """
         Debug.msg(3, "Nviz::Draw(): quick=%d", quick)
-        
-        Nviz_draw_cplane(self.data, -1, -1) # ?
-        
+
+        Nviz_draw_cplane(self.data, -1, -1)  # ?
+
         if quick:
             Nviz_draw_quick(self.data, quick_mode)
         else:
             Nviz_draw_all(self.data)
-        
+
     def EraseMap(self):
         """Erase map display (with background color)
         """
         Debug.msg(1, "Nviz::EraseMap()")
         GS_clear(Nviz_get_bgcolor(self.data))
-        
+
     def InitView(self):
         """Initialize view"""
         # initialize nviz data
         Nviz_init_data(self.data)
-        
+
         # define default attributes for map objects
         Nviz_set_surface_attr_default()
         # set background color
         Nviz_set_bgcolor(self.data, Nviz_color_from_str("white"))
-        
-        GS_clear(Nviz_get_bgcolor(self.data))        
+
+        GS_clear(Nviz_get_bgcolor(self.data))
         # initialize view, lights
         Nviz_init_view(self.data)
-        
+
         Debug.msg(1, "Nviz::InitView()")
-        
+
     def SetBgColor(self, color_str):
         """Set background color
-        
+
         :param str color_str: color string
         """
         Nviz_set_bgcolor(self.data, Nviz_color_from_str(color_str))
-        
-    def SetLight(self, x, y, z, color, bright, ambient, w = 0, lid = 1):
+
+    def SetLight(self, x, y, z, color, bright, ambient, w=0, lid=1):
         """Change lighting settings
-        
+
         :param x,y,z: position
         :param color: light color (as string)
         :param bright: light brightness
@@ -311,16 +322,20 @@ class Nviz(object):
         """
         Nviz_set_light_position(self.data, lid, x, y, z, w)
         Nviz_set_light_bright(self.data, lid, bright)
-        Nviz_set_light_color(self.data, lid, int(color[0]), int(color[1]), int(color[2]))
+        Nviz_set_light_color(
+            self.data, lid, int(
+                color[0]), int(
+                color[1]), int(
+                color[2]))
         Nviz_set_light_ambient(self.data, lid, ambient)
-                             
+
     def LoadSurface(self, name, color_name, color_value):
         """Load raster map (surface)
-        
+
         :param name: raster map name
         :param color_name: raster map for color (None for color_value)
         :param color_value: color string (named color or RGB triptet)
-        
+
         :return: object id
         :return: -1 on failure
         """
@@ -328,95 +343,95 @@ class Nviz(object):
         if mapset is None:
             G_warning(_("Raster map <%s> not found"), name)
             return -1
-        
+
         # topography
         id = Nviz_new_map_obj(MAP_OBJ_SURF,
                               G_fully_qualified_name(name, mapset), 0.0,
                               self.data)
-        
+
         if color_name:      # check for color map
             mapset = G_find_raster2(color_name, "")
             if mapset is None:
                 G_warning(_("Raster map <%s> not found"), color_name)
                 GS_delete_surface(id)
                 return -1
-            
+
             Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, MAP_ATT,
                           G_fully_qualified_name(color_name, mapset), -1.0,
                           self.data)
-        
+
         elif color_value:   # check for color value
             Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, CONST_ATT,
                           None, Nviz_color_from_str(color_value),
                           self.data)
-        
+
         else:               # use by default elevation map for coloring
             Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, MAP_ATT,
                           G_fully_qualified_name(name, mapset), -1.0,
                           self.data)
-        
+
         # if (i > 1)
         #     set_default_wirecolors(self.data, i)
-        
+
         # focus on loaded self.data
         Nviz_set_focus_map(MAP_OBJ_UNDEFINED, -1)
-        
+
         Debug.msg(1, "Nviz::LoadRaster(): name=%s -> id=%d", name, id)
-        
+
         return id
-    
+
     def AddConstant(self, value, color):
         """Add new constant surface"""
         id = Nviz_new_map_obj(MAP_OBJ_SURF, None, value, self.data)
-        
+
         Nviz_set_attr(id, MAP_OBJ_SURF, ATT_COLOR, CONST_ATT,
-                        None, Nviz_color_from_str(color),
-                        self.data)
+                      None, Nviz_color_from_str(color),
+                      self.data)
         Nviz_set_focus_map(MAP_OBJ_UNDEFINED, -1)
-        
+
         Debug.msg(1, "Nviz::AddConstant(): id=%d", id)
         return id
-        
+
     def UnloadSurface(self, id):
         """Unload surface
-        
+
         :param id: surface id
-        
+
         :return: 1 on success
         :return: 0 on failure
         """
         if not GS_surf_exists(id):
             return 0
-        
+
         Debug.msg(1, "Nviz::UnloadSurface(): id=%d", id)
-        
+
         if GS_delete_surface(id) < 0:
             return 0
-        
+
         return 1
-    
+
     def LoadVector(self, name, points):
         """Load vector map overlay
-        
+
         :param name: vector map name
         :param points: if true load 2d points rather then 2d lines
-        
+
         :return: object id, id of base surface (or -1 if it is not loaded)
         :return: -1 on failure
         """
         baseId = -1
         if GS_num_surfs() == 0:     # load base surface if no loaded
             baseId = Nviz_new_map_obj(MAP_OBJ_SURF, None, 0.0, self.data)
-            
+
             nsurf = c_int()
             surf_list = GS_get_surf_list(byref(nsurf))
             GS_set_att_const(surf_list[0], ATT_TRANSP, 255)
-            
-        mapset = G_find_vector2 (name, "")
+
+        mapset = G_find_vector2(name, "")
         if mapset is None:
             G_warning(_("Vector map <%s> not found"),
                       name)
-        
+
         if points:
             id = Nviz_new_map_obj(MAP_OBJ_SITE,
                                   G_fully_qualified_name(name, mapset), 0.0,
@@ -425,22 +440,22 @@ class Nviz(object):
             id = Nviz_new_map_obj(MAP_OBJ_VECT,
                                   G_fully_qualified_name(name, mapset), 0.0,
                                   self.data)
-        
+
         Debug.msg(1, "Nviz::LoadVector(): name=%s -> id=%d", name, id)
-        
+
         return id, baseId
-    
+
     def UnloadVector(self, id, points):
         """Unload vector set
-        
+
         :param id: vector set id
         :param points: vector points or lines set
-        
+
         :return: 1 on success
         :return: 0 on failure
         """
         Debug.msg(1, "Nviz::UnloadVector(): id=%d", id)
-        
+
         if points:
             if not GP_site_exists(id):
                 return 0
@@ -451,29 +466,34 @@ class Nviz(object):
                 return 0
             if GV_delete_vector(id) < 0:
                 return 0
-        
+
         return 1
 
     def VectorSurfaceSelected(self, vid, sid):
         """Check if surface is selected (currently unused)
-        
+
         :param vid: vector id
         :param sid: surface id
-        
+
         :return: True if selected
         :return: False if not selected
         """
         selected = GV_surf_is_selected(vid, sid)
-        Debug.msg(1, "Nviz::VectorSurfaceSelected(): vid=%s, sid=%d -> selected=%d", vid, sid, selected)
+        Debug.msg(
+            1,
+            "Nviz::VectorSurfaceSelected(): vid=%s, sid=%d -> selected=%d",
+            vid,
+            sid,
+            selected)
         return selected
-    
+
     def LoadVolume(self, name, color_name, color_value):
         """Load 3d raster map (volume)
-        
+
         :param name: 3d raster map name
         :param color_name: 3d raster map for color (None for color_value)
         :param color_value: color string (named color or RGB triptet)
-        
+
         :return: object id
         :return: -1 on failure
         """
@@ -482,12 +502,12 @@ class Nviz(object):
             G_warning(_("3d raster map <%s> not found"),
                       name)
             return -1
-        
+
         # topography
         id = Nviz_new_map_obj(MAP_OBJ_VOL,
                               G_fully_qualified_name(name, mapset), 0.0,
                               self.data)
-        
+
         if color_name:      # check for color map
             mapset = G_find_raster3d(color_name, "")
             if mapset is None:
@@ -495,7 +515,7 @@ class Nviz(object):
                           color_name)
                 GVL_delete_vol(id)
                 return -1
-            
+
             Nviz_set_attr(id, MAP_OBJ_VOL, ATT_COLOR, MAP_ATT,
                           G_fully_qualified_name(color_name, mapset), -1.0,
                           self.data)
@@ -507,128 +527,128 @@ class Nviz(object):
             Nviz_set_attr(id, MAP_OBJ_VOL, ATT_COLOR, MAP_ATT,
                           G_fully_qualified_name(name, mapset), -1.0,
                           self.data)
-        
+
         Debug.msg(1, "Nviz::LoadVolume(): name=%s -> id=%d", name, id)
-        
+
         return id
 
     def UnloadVolume(self, id):
         """Unload volume
-        
+
         :param id: volume id
-        
+
         :return: 1 on success
         :return: 0 on failure
         """
         if not GVL_vol_exists(id):
             return 0
-        
+
         Debug.msg(1, "Nviz::UnloadVolume(): id=%d", id)
-        
+
         if GVL_delete_vol(id) < 0:
-          return 0
-        
+            return 0
+
         return 1
-    
+
     def SetSurfaceTopo(self, id, map, value):
         """Set surface topography
-        
+
         :param id: surface id
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.SetSurfaceAttr(id, ATT_TOPO, map, value)
-    
+
     def SetSurfaceColor(self, id, map, value):
         """Set surface color
-        
+
         :param id: surface id
         :param map: if true use map otherwise constant
         :param value: map name or value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.SetSurfaceAttr(id, ATT_COLOR, map, value)
-    
+
     def SetSurfaceMask(self, id, invert, value):
         """Set surface mask
-        
+
         .. todo::
             invert
-        
+
         :param id: surface id
-        :param invert: if true invert mask 
+        :param invert: if true invert mask
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.SetSurfaceAttr(id, ATT_MASK, True, value)
-    
+
     def SetSurfaceTransp(self, id, map, value):
         """Set surface mask
-        
+
         ..todo::
             invert
-        
+
         :param id: surface id
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.SetSurfaceAttr(id, ATT_TRANSP, map, value)
-    
+
     def SetSurfaceShine(self, id, map, value):
         """Set surface shininess
-        
+
         :param id: surface id
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.SetSurfaceAttr(id, ATT_SHINE, map, value)
-    
+
     def SetSurfaceEmit(self, id, map, value):
         """Set surface emission (currently unused)
-        
+
         :param id: surface id
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.SetSurfaceAttr(id, ATT_EMIT, map, value)
-    
+
     def SetSurfaceAttr(self, id, attr, map, value):
         """Set surface attribute
-        
+
         :param id: surface id
         :param attr: attribute desc
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         if not GS_surf_exists(id):
             return -1
-        
+
         if map:
             ret = Nviz_set_attr(id, MAP_OBJ_SURF, attr, MAP_ATT,
                                 value, -1.0, self.data)
@@ -637,103 +657,108 @@ class Nviz(object):
                 val = Nviz_color_from_str(value)
             else:
                 val = float(value)
-            
+
             ret = Nviz_set_attr(id, MAP_OBJ_SURF, attr, CONST_ATT,
                                 None, val, self.data)
-        
-        Debug.msg(3, "Nviz::SetSurfaceAttr(): id=%d, attr=%d, map=%d, value=%s",
-                  id, attr, map, value)
-        
+
+        Debug.msg(
+            3,
+            "Nviz::SetSurfaceAttr(): id=%d, attr=%d, map=%d, value=%s",
+            id,
+            attr,
+            map,
+            value)
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def UnsetSurfaceMask(self, id):
         """Unset surface mask
-        
+
         :param id: surface id
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         :return: -1 on failure
         """
         return self.UnsetSurfaceAttr(id, ATT_MASK)
-    
+
     def UnsetSurfaceTransp(self, id):
         """Unset surface transparency
-        
+
         :param id: surface id
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.UnsetSurfaceAttr(id, ATT_TRANSP)
-    
+
     def UnsetSurfaceEmit(self, id):
         """Unset surface emission (currently unused)
-        
+
         :param id: surface id
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         return self.UnsetSurfaceAttr(id, ATT_EMIT)
-    
+
     def UnsetSurfaceAttr(self, id, attr):
         """Unset surface attribute
-        
+
         :param id: surface id
         :param attr: attribute descriptor
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         if not GS_surf_exists(id):
             return -1
-        
+
         Debug.msg(3, "Nviz::UnsetSurfaceAttr(): id=%d, attr=%d",
                   id, attr)
-        
+
         ret = Nviz_unset_attr(id, MAP_OBJ_SURF, attr)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
 
     def SetSurfaceRes(self, id, fine, coarse):
         """Set surface resolution
-        
+
         :param id: surface id
         :param fine: x/y fine resolution
         :param coarse: x/y coarse resolution
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         Debug.msg(3, "Nviz::SetSurfaceRes(): id=%d, fine=%d, coarse=%d",
                   id, fine, coarse)
-        
+
         if id > 0:
             if not GS_surf_exists(id):
                 return -1
-            
+
             if GS_set_drawres(id, fine, fine, coarse, coarse) < 0:
                 return -2
         else:
             GS_setall_drawres(fine, fine, coarse, coarse)
-        
+
         return 1
 
     def SetSurfaceStyle(self, id, style):
         """Set draw style
-        
+
         Draw styles:
          - DM_GOURAUD
          - DM_FLAT
@@ -744,40 +769,40 @@ class Nviz(object):
          - DM_WIRE_POLY
          - DM_GRID_WIRE
          - DM_GRID_SURF
-         
+
         :param id: surface id (<= 0 for all)
         :param style: draw style
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
         """
         Debug.msg(3, "Nviz::SetSurfaceStyle(): id=%d, style=%d",
                   id, style)
-        
+
         if id > 0:
             if not GS_surf_exists(id):
                 return -1
-            
+
             if GS_set_drawmode(id, style) < 0:
                 return -2
-            
+
             return 1
-        
+
         if GS_setall_drawmode(style) < 0:
             return -2
-        
+
         return 1
-    
+
     def SetWireColor(self, id, color_str):
         """Set color of wire
-        
+
         .. todo::
             all
-         
+
         :param id: surface id (< 0 for all)
         :param color_str: color string (R:G:B)
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting attributes failed
@@ -786,13 +811,13 @@ class Nviz(object):
         """
         Debug.msg(3, "Nviz::SetWireColor(): id=%d, color=%s",
                   id, color_str)
-        
+
         color = Nviz_color_from_str(color_str)
-        
+
         if id > 0:
             if not GS_surf_exists(id):
                 return -1
-            
+
             GS_set_wire_color(id, color)
         else:
             nsurfs = c_int()
@@ -800,102 +825,107 @@ class Nviz(object):
             for i in xrange(nsurfs.value):
                 id = surf_list[i]
                 GS_set_wire_color(id, color)
-            
+
             G_free(surf_list)
             surf_list = None
-        
+
         return 1
-    
+
     def GetSurfacePosition(self, id):
         """Get surface position
-        
+
         :param id: surface id
-        
+
         :return: x,y,z
         :return: zero-length vector on error
         """
         if not GS_surf_exists(id):
             return []
-        
+
         x, y, z = c_float(), c_float(), c_float()
         GS_get_trans(id, byref(x), byref(y), byref(z))
-        
+
         Debug.msg(3, "Nviz::GetSurfacePosition(): id=%d, x=%f, y=%f, z=%f",
                   id, x.value, y.value, z.value)
-        
+
         return [x.value, y.value, z.value]
 
     def SetSurfacePosition(self, id, x, y, z):
         """Set surface position
-        
+
         :param id: surface id
         :param x,y,z: translation values
-        
+
         :return: 1 on success
         :return: -1 surface not found
         :return: -2 setting position failed
         """
         if not GS_surf_exists(id):
             return -1
-        
+
         Debug.msg(3, "Nviz::SetSurfacePosition(): id=%d, x=%f, y=%f, z=%f",
                   id, x, y, z)
-        
+
         GS_set_trans(id, x, y, z)
-        
+
         return 1
 
     def SetVectorLineMode(self, id, color_str, width, use_z):
         """Set mode of vector line overlay
-        
+
         :param id: vector id
         :param color_str: color string
         :param width: line width
         :param use_z: display 3d or on surface
-        
+
         :return: -1 vector set not found
         :return: -2 on failure
         :return: 1 on success
         """
         if not GV_vect_exists(id):
             return -1
-        
-        Debug.msg(3, "Nviz::SetVectorMode(): id=%d, color=%s, width=%d, use_z=%d",
-                  id, color_str, width, use_z)
-        
+
+        Debug.msg(
+            3,
+            "Nviz::SetVectorMode(): id=%d, color=%s, width=%d, use_z=%d",
+            id,
+            color_str,
+            width,
+            use_z)
+
         color = Nviz_color_from_str(color_str)
-        
+
         # use memory by default
         if GV_set_style(id, 1, color, width, use_z) < 0:
             return -2
-        
+
         return 1
 
     def SetVectorLineHeight(self, id, height):
         """Set vector height above surface (lines)
-        
+
         :param id: vector set id
         :param height:
-        
+
         :return: -1 vector set not found
         :return: 1 on success
         """
         if not GV_vect_exists(id):
             return -1
-        
+
         Debug.msg(3, "Nviz::SetVectorLineHeight(): id=%d, height=%f",
                   id, height)
-        
+
         GV_set_trans(id, 0.0, 0.0, height)
-        
+
         return 1
 
     def SetVectorLineSurface(self, id, surf_id):
         """Set reference surface of vector set (lines)
-        
+
         :param id: vector set id
         :param surf_id: surface id
-        
+
         :return: 1 on success
         :return: -1 vector set not found
         :return: -2 surface not found
@@ -903,21 +933,21 @@ class Nviz(object):
         """
         if not GV_vect_exists(id):
             return -1
-        
+
         if not GS_surf_exists(surf_id):
             return -2
-        
+
         if GV_select_surf(id, surf_id) < 0:
             return -3
-        
+
         return 1
 
     def UnsetVectorLineSurface(self, id, surf_id):
         """Unset reference surface of vector set (lines)
-        
+
         :param id: vector set id
         :param surf_id: surface id
-        
+
         :return: 1 on success
         :return: -1 vector set not found
         :return: -2 surface not found
@@ -925,69 +955,69 @@ class Nviz(object):
         """
         if not GV_vect_exists(id):
             return -1
-        
+
         if not GS_surf_exists(surf_id):
             return -2
-        
+
         if GV_unselect_surf(id, surf_id) < 0:
             return -3
-        
+
         return 1
-        
+
     def SetVectorPointMode(self, id, color_str, width, size, marker):
         """Set mode of vector point overlay
-        
+
         :param id: vector id
         :param color_str: color string
         :param width: line width
         :param size: size of the symbol
         :param marker: type of the symbol
-        
+
         :return: -1 vector set not found
         """
         if not GP_site_exists(id):
             return -1
-        
+
         # dtree and ctree defined but not used
         if marker > 5:
             marker += 2
-        
+
         Debug.msg(3, "Nviz::SetVectorPointMode(): id=%d, color=%s, "
                   "width=%d, size=%f, marker=%d",
                   id, color_str, width, size, marker)
-        
+
         color = Nviz_color_from_str(color_str)
-        
+
         if GP_set_style(id, color, width, size, marker) < 0:
             return -2
-        
+
         return 1
 
     def SetVectorPointHeight(self, id, height):
         """Set vector height above surface (points)
-        
+
         :param id: vector set id
         :param height:
-        
+
         :return: -1 vector set not found
         :return: 1 on success
         """
         if not GP_site_exists(id):
             return -1
-        
+
         Debug.msg(3, "Nviz::SetVectorPointHeight(): id=%d, height=%f",
                   id, height)
-        
+
         GP_set_trans(id, 0.0, 0.0, height)
-        
+
         return 1
 
     def SetVectorPointSurface(self, id, surf_id):
         """Set reference surface of vector set (points)
-        
+
         :param id: vector set id
         :param surf_id: surface id
-        
+
         :return: 1 on success
         :return: -1 vector set not found
         :return: -2 surface not found
@@ -995,113 +1025,115 @@ class Nviz(object):
         """
         if not GP_site_exists(id):
             return -1
-        
+
         if not GS_surf_exists(surf_id):
             return -2
-        
+
         if GP_select_surf(id, surf_id) < 0:
             return -3
-        
+
         return 1
 
     def ReadVectorColors(self, name, mapset):
         """Read vector colors
-        
+
         :param name: vector map name
         :param mapset: mapset name (empty string (\c "") for search path)
-        
-        :return: -1 on error 
-        :return: 0 if color table missing 
-        :return: 1 on success (color table found) 
+
+        :return: -1 on error
+        :return: 0 if color table missing
+        :return: 1 on success (color table found)
         """
         return Vect_read_colors(name, mapset, self.color)
-        
+
     def CheckColorTable(self, id, type):
         """Check if color table exists.
-        
+
         :param id: vector set id
         :param type: vector set type (lines/points)
-        
+
         :return: 1 color table exists
         :return: 0 no color table found
         :return: -1 on error
         :return: -2 vector set not found
         """
         file = c_char_p()
-        
+
         if type == 'points':
             ret = GP_get_sitename(id, byref(file))
         elif type == 'lines':
             ret = GV_get_vectname(id, byref(file))
-            
+
         if ret < 0:
             return -2
-        
+
         return self.ReadVectorColors(file, "")
-        
-    def SetPointsStyleThematic(self, id, layer, color = None, colorTable = False, 
-                               width = None, size = None, symbol = None):
+
+    def SetPointsStyleThematic(self, id, layer, color=None, colorTable=False,
+                               width=None, size=None, symbol=None):
         """Set thematic style for vector points
-        
+
         :param id: vector set id
         :param layer: layer number for thematic mapping
-        :param colorTable: use color table 
-        :param color: color column name 
-        :param width: width column name 
-        :param size: size column name 
-        :param symbol: symbol column name 
+        :param colorTable: use color table
+        :param color: color column name
+        :param width: width column name
+        :param size: size column name
+        :param symbol: symbol column name
         """
         file = c_char_p()
         ret = GP_get_sitename(id, byref(file))
         if ret < 0:
             return -1
-        
+
         ret = self.ReadVectorColors(file, "")
         if ret < 0:
             return -1
-        
+
         if colorTable:
-            GP_set_style_thematic(id, layer, color, width, size, symbol, self.color)
+            GP_set_style_thematic(
+                id, layer, color, width, size, symbol, self.color)
         else:
             GP_set_style_thematic(id, layer, color, width, size, symbol, None)
 
-    def SetLinesStyleThematic(self, id, layer, color = None, colorTable = False, width = None):
+    def SetLinesStyleThematic(
+            self, id, layer, color=None, colorTable=False, width=None):
         """Set thematic style for vector lines
-        
+
         :param id: vector set id
         :param layer: layer number for thematic mapping
-        :param color: color column name 
-        :param colorTable: use color table 
-        :param width: width column name 
+        :param color: color column name
+        :param colorTable: use color table
+        :param width: width column name
         """
         file = c_char_p()
         ret = GV_get_vectname(id, byref(file))
         if ret < 0:
             return -1
-        
+
         ret = self.ReadVectorColors(file, "")
         if ret < 0:
             return -1
-        
+
         if colorTable:
             GV_set_style_thematic(id, layer, color, width, self.color)
         else:
             GV_set_style_thematic(id, layer, color, width, None)
-        
+
     def UnsetLinesStyleThematic(self, id):
         """Unset thematic style for vector points"""
-        GV_unset_style_thematic(id)      
-         
+        GV_unset_style_thematic(id)
+
     def UnsetPointsStyleThematic(self, id):
         """Unset thematic style for vector lines"""
         GP_unset_style_thematic(id)
-        
+
     def UnsetVectorPointSurface(self, id, surf_id):
         """Unset reference surface of vector set (points)
-        
+
         :param id: vector set id
         :param surf_id: surface id
-        
+
         :return: 1 on success
         :return: -1 vector set not found
         :return: -2 surface not found
@@ -1109,18 +1141,18 @@ class Nviz(object):
         """
         if not GP_site_exists(id):
             return -1
-        
+
         if not GS_surf_exists(surf_id):
             return -2
-        
+
         if GP_unselect_surf(id, surf_id) < 0:
             return -3
-        
+
         return 1
-        
+
     def SetVectorPointZMode(self, id, zMode):
         """Set z mode (use z coordinate or not)
-        
+
         :param id: volume id
         :param zMode: bool
 
@@ -1130,63 +1162,63 @@ class Nviz(object):
         """
         if not GP_site_exists(id):
             return -1
-            
+
         return GP_set_zmode(id, int(zMode))
 
-    def AddIsosurface(self, id, level, isosurf_id = None):
+    def AddIsosurface(self, id, level, isosurf_id=None):
         """Add new isosurface
-        
+
         :param id: volume id
         :param level: isosurface level (topography)
         :param isosurf_id: isosurface id
-        
+
         :return: -1 on failure
         :return: 1 on success
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if isosurf_id is not None:
             num = GVL_isosurf_num_isosurfs(id)
             if num < 0 or isosurf_id != num:
                 return -1
-                
+
         if GVL_isosurf_add(id) < 0:
             return -1
-        
+
         # set topography level
         nisosurfs = GVL_isosurf_num_isosurfs(id)
-        
+
         return GVL_isosurf_set_att_const(id, nisosurfs - 1, ATT_TOPO, level)
-    
-    def AddSlice(self, id, slice_id = None):
+
+    def AddSlice(self, id, slice_id=None):
         """Add new slice
-        
+
         :param id: volume id
         :param slice_id: slice id
-        
+
         :return: -1 on failure
         :return: number of slices
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if slice_id is not None:
             num = GVL_slice_num_slices(id)
             if num < 0 or slice_id != num:
                 return -1
-                
+
         if GVL_slice_add(id) < 0:
             return -1
-        
+
         return GVL_slice_num_slices(id)
-    
+
     def DeleteIsosurface(self, id, isosurf_id):
         """Delete isosurface
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
@@ -1194,23 +1226,23 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if isosurf_id > GVL_isosurf_num_isosurfs(id):
             return -2
-        
+
         ret = GVL_isosurf_del(id, isosurf_id)
-        
+
         if ret < 0:
             return -3
 
         return 1
-    
+
     def DeleteSlice(self, id, slice_id):
         """Delete slice
-        
+
         :param id: volume id
         :param slice_id: slice id
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 slice not found
@@ -1218,24 +1250,24 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if slice_id > GVL_slice_num_slices(id):
             return -2
-        
+
         ret = GVL_slice_del(id, slice_id)
-        
+
         if ret < 0:
             return -3
 
         return 1
-    
+
     def MoveIsosurface(self, id, isosurf_id, up):
         """Move isosurface up/down in the list
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id
         :param up: if true move up otherwise down
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
@@ -1243,15 +1275,15 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if isosurf_id > GVL_isosurf_num_isosurfs(id):
             return -2
-        
+
         if up:
             ret = GVL_isosurf_move_up(id, isosurf_id)
         else:
             ret = GVL_isosurf_move_down(id, isosurf_id)
-        
+
         if ret < 0:
             return -3
 
@@ -1259,11 +1291,11 @@ class Nviz(object):
 
     def MoveSlice(self, id, slice_id, up):
         """Move slice up/down in the list
-        
+
         :param id: volume id
         :param slice_id: slice id
         :param up: if true move up otherwise down
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 slice not found
@@ -1271,122 +1303,122 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if slice_id > GVL_slice_num_slices(id):
             return -2
-        
+
         if up:
             ret = GVL_slice_move_up(id, slice_id)
         else:
             ret = GVL_slice_move_down(id, slice_id)
-        
+
         if ret < 0:
             return -3
 
         return 1
-    
+
     def SetIsosurfaceTopo(self, id, isosurf_id, map, value):
         """Set isosurface level
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 on failure
         """
         return self.SetIsosurfaceAttr(id, isosurf_id, ATT_TOPO, map, value)
-    
+
     def SetIsosurfaceColor(self, id, isosurf_id, map, value):
         """Set isosurface color
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 on failure
         """
         return self.SetIsosurfaceAttr(id, isosurf_id, ATT_COLOR, map, value)
-    
+
     def SetIsosurfaceMask(self, id, isosurf_id, invert, value):
         """Set isosurface mask
-        
+
         .. todo::
             invert
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param invert: true for invert mask
         :param value: map name to be used for mask
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 on failure
         """
         return self.SetIsosurfaceAttr(id, isosurf_id, ATT_MASK, True, value)
-    
+
     def SetIsosurfaceTransp(self, id, isosurf_id, map, value):
         """Set isosurface transparency
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 on failure
         """
         return self.SetIsosurfaceAttr(id, isosurf_id, ATT_TRANSP, map, value)
-    
+
     def SetIsosurfaceShine(self, id, isosurf_id, map, value):
         """Set isosurface shininess
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 on failure
         """
         return self.SetIsosurfaceAttr(id, isosurf_id, ATT_SHINE, map, value)
-    
+
     def SetIsosurfaceEmit(self, id, isosurf_id, map, value):
         """Set isosurface emission (currently unused)
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 on failure
         """
         return self.SetIsosurfaceAttr(id, isosurf_id, ATT_EMIT, map, value)
-    
+
     def SetIsosurfaceAttr(self, id, isosurf_id, attr, map, value):
         """Set isosurface attribute
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param attr: attribute desc
         :param map: if true use map otherwise constant
         :param value: map name of value
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
@@ -1394,10 +1426,10 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if isosurf_id > GVL_isosurf_num_isosurfs(id) - 1:
             return -2
-        
+
         if map:
             ret = GVL_isosurf_set_att_map(id, isosurf_id, attr, value)
         else:
@@ -1405,64 +1437,64 @@ class Nviz(object):
                 val = Nviz_color_from_str(value)
             else:
                 val = float(value)
-            
+
             ret = GVL_isosurf_set_att_const(id, isosurf_id, attr, val)
-        
+
         Debug.msg(3, "Nviz::SetIsosurfaceAttr(): id=%d, isosurf=%d, "
                   "attr=%d, map=%s, value=%s",
                   id, isosurf_id, attr, map, value)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def UnsetIsosurfaceMask(self, id, isosurf_id):
         """Unset isosurface mask
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 setting attributes failed
         """
         return self.UnsetIsosurfaceAttr(id, isosurf_id, ATT_MASK)
-    
+
     def UnsetIsosurfaceTransp(self, id, isosurf_id):
         """Unset isosurface transparency
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 setting attributes failed
         """
         return self.UnsetIsosurfaceAttr(id, isosurf_id, ATT_TRANSP)
-    
+
     def UnsetIsosurfaceEmit(self, id, isosurf_id):
         """Unset isosurface emission (currently unused)
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
         :return: -3 setting attributes failed
         """
         return self.UnsetIsosurfaceAttr(id, isosurf_id, ATT_EMIT)
-    
+
     def UnsetIsosurfaceAttr(self, id, isosurf_id, attr):
         """Unset surface attribute
-        
+
         :param id: surface id
         :param isosurf_id: isosurface id (0 - MAX_ISOSURFS)
         :param attr: attribute descriptor
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 isosurface not found
@@ -1470,108 +1502,108 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if isosurf_id > GVL_isosurf_num_isosurfs(id) - 1:
             return -2
-        
+
         Debug.msg(3, "Nviz::UnsetSurfaceAttr(): id=%d, isosurf_id=%d, attr=%d",
                   id, isosurf_id, attr)
-        
+
         ret = GVL_isosurf_unset_att(id, isosurf_id, attr)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
 
     def SetIsosurfaceMode(self, id, mode):
         """Set draw mode for isosurfaces
-        
+
         :param id: isosurface id
         :param mode: isosurface draw mode
-        
+
         :return: 1 on success
         :return: -1 volume set not found
         :return: -2 on failure
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         ret = GVL_isosurf_set_drawmode(id, mode)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def SetSliceMode(self, id, mode):
         """Set draw mode for slices
-        
+
         :param id: slice id
         :param mode: slice draw mode
-        
+
         :return: 1 on success
         :return: -1 volume set not found
         :return: -2 on failure
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         ret = GVL_slice_set_drawmode(id, mode)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def SetIsosurfaceRes(self, id, res):
         """Set draw resolution for isosurfaces
-        
+
         :param id: isosurface id
         :param res: resolution value
-        
+
         :return: 1 on success
         :return: -1 volume set not found
         :return: -2 on failure
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         ret = GVL_isosurf_set_drawres(id, res, res, res)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def SetSliceRes(self, id, res):
         """Set draw resolution for slices
-        
+
         :param id: slice id
         :param res: resolution value
-        
+
         :return: 1 on success
         :return: -1 volume set not found
         :return: -2 on failure
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         ret = GVL_slice_set_drawres(id, res, res, res)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def SetSlicePosition(self, id, slice_id, x1, x2, y1, y2, z1, z2, dir):
         """Set slice position
-        
+
         :param id: volume id
         :param slice_id: slice id
         :param x1,x2,y1,y2,z1,z2: slice coordinates
         :param dir: axis
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 slice not found
@@ -1579,50 +1611,50 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if slice_id > GVL_slice_num_slices(id):
             return -2
-        
+
         ret = GVL_slice_set_pos(id, slice_id, x1, x2, y1, y2, z1, z2, dir)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def SetSliceTransp(self, id, slice_id, value):
         """Set slice transparency
-        
+
         :param id: volume id
         :param slice_id: slice id
         :param value: transparency value (0 - 255)
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 slice not found
         :return: -3 on failure
         """
-        
+
         if not GVL_vol_exists(id):
             return -1
-        
+
         if slice_id > GVL_slice_num_slices(id):
             return -2
-        
+
         ret = GVL_slice_set_transp(id, slice_id, value)
-        
+
         if ret < 0:
             return -2
-        
+
         return 1
-    
+
     def SetIsosurfaceInOut(self, id, isosurf_id, inout):
         """Set inout mode
-        
+
         :param id: volume id
         :param isosurf_id: isosurface id
         :param inout: mode true/false
-        
+
         :return: 1 on success
         :return: -1 volume set not found
         :return: -2 isosurface not found
@@ -1630,59 +1662,59 @@ class Nviz(object):
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         if isosurf_id > GVL_isosurf_num_isosurfs(id) - 1:
             return -2
-        
+
         ret = GVL_isosurf_set_flags(id, isosurf_id, inout)
-        
+
         if ret < 0:
             return -3
-        
+
         return 1
-    
+
     def GetVolumePosition(self, id):
         """Get volume position
-        
+
         :param id: volume id
-        
+
         :return: x,y,z
         :return: zero-length vector on error
         """
         if not GVL_vol_exists(id):
             return []
-        
+
         x, y, z = c_float(), c_float(), c_float()
         GVL_get_trans(id, byref(x), byref(y), byref(z))
-        
+
         Debug.msg(3, "Nviz::GetVolumePosition(): id=%d, x=%f, y=%f, z=%f",
                   id, x.value, y.value, z.value)
-        
+
         return [x.value, y.value, z.value]
-    
+
     def SetVolumePosition(self, id, x, y, z):
         """Set volume position
-        
+
         :param id: volume id
         :param x,y,z: translation values
-        
+
         :return: 1 on success
         :return: -1 volume not found
         :return: -2 setting position failed
         """
         if not GVL_vol_exists(id):
             return -1
-        
+
         Debug.msg(3, "Nviz::SetVolumePosition(): id=%d, x=%f, y=%f, z=%f",
                   id, x, y, z)
-        
+
         GVL_set_trans(id, x, y, z)
-        
+
         return 1
 
     def SetVolumeDrawBox(self, id, ifBox):
         """Display volume wire box
-        
+
         :param id: volume id
         :param ifBox: True to draw wire box, False otherwise
         :type ifBox: bool
@@ -1693,56 +1725,62 @@ class Nviz(object):
             return -1
 
         Debug.msg(3, "Nviz::SetVolumeDrawBox(): id=%d, ifBox=%d", id, ifBox)
-        
+
         GVL_set_draw_wire(id, int(ifBox))
 
         return 1
 
     def GetCPlaneCurrent(self):
         return Nviz_get_current_cplane(self.data)
-    
+
     def GetCPlanesCount(self):
         """Returns number of cutting planes"""
-        return Nviz_num_cplanes(self.data) 
-    
+        return Nviz_num_cplanes(self.data)
+
     def GetCPlaneRotation(self):
         """Returns rotation parameters of current cutting plane"""
         x, y, z = c_float(), c_float(), c_float()
-        
+
         current = Nviz_get_current_cplane(self.data)
-        Nviz_get_cplane_rotation(self.data, current, byref(x), byref(y), byref(z))
-        
+        Nviz_get_cplane_rotation(
+            self.data,
+            current,
+            byref(x),
+            byref(y),
+            byref(z))
+
         return x.value, y.value, z.value
-    
+
     def GetCPlaneTranslation(self):
         """Returns translation parameters of current cutting plane"""
         x, y, z = c_float(), c_float(), c_float()
-        
+
         current = Nviz_get_current_cplane(self.data)
-        Nviz_get_cplane_translation(self.data, current, byref(x), byref(y), byref(z))
-        
+        Nviz_get_cplane_translation(
+            self.data, current, byref(x), byref(y), byref(z))
+
         return x.value, y.value, z.value
-    
+
     def SetCPlaneRotation(self, x, y, z):
         """Set current clip plane rotation
-        
+
         :param x,y,z: rotation parameters
         """
         current = Nviz_get_current_cplane(self.data)
         Nviz_set_cplane_rotation(self.data, current, x, y, z)
         Nviz_draw_cplane(self.data, -1, -1)
-    
+
     def SetCPlaneTranslation(self, x, y, z):
         """Set current clip plane translation
-        
+
         :param x,y,z: translation parameters
         """
         current = Nviz_get_current_cplane(self.data)
         Nviz_set_cplane_translation(self.data, current, x, y, z)
-        Nviz_draw_cplane(self.data, -1, -1) 
+        Nviz_draw_cplane(self.data, -1, -1)
         Debug.msg(3, "Nviz::SetCPlaneTranslation(): id=%d, x=%f, y=%f, z=%f",
                   current, x, y, z)
-                
+
     def SetCPlaneInteractively(self, x, y):
         current = Nviz_get_current_cplane(self.data)
         ret = Nviz_set_cplane_here(self.data, current, x, y)
@@ -1752,40 +1790,39 @@ class Nviz(object):
             return x, y, z
         else:
             return None, None, None
-        
-        
+
     def SelectCPlane(self, index):
         """Select cutting plane
-        
+
         :param index: index of cutting plane
         """
         Nviz_on_cplane(self.data, index)
-    
+
     def UnselectCPlane(self, index):
         """Unselect cutting plane
-        
+
         :param index: index of cutting plane
         """
         Nviz_off_cplane(self.data, index)
-        
+
     def SetFenceColor(self, index):
         """Select current cutting plane
-        
+
         :param index: type of fence - from 0 (off) to 4
-        """  
+        """
         Nviz_set_fence_color(self.data, index)
-            
+
     def GetXYRange(self):
         """Get xy range"""
         return Nviz_get_xyrange(self.data)
-    
+
     def GetZRange(self):
         """Get z range"""
         min, max = c_float(), c_float()
         Nviz_get_zrange(self.data, byref(min), byref(max))
         return min.value, max.value
-    
-    def SaveToFile(self, filename, width = 20, height = 20, itype = 'ppm'):
+
+    def SaveToFile(self, filename, width=20, height=20, itype='ppm'):
         """Save current GL screen to ppm/tif file
 
         :param filename: file name
@@ -1793,9 +1830,9 @@ class Nviz(object):
         :param height: image height
         :param itype: image type ('ppm' or 'tif')
         """
-        widthOrig  = self.width
+        widthOrig = self.width
         heightOrig = self.height
-        
+
         self.ResizeWindow(width, height)
         GS_clear(Nviz_get_bgcolor(self.data))
         self.Draw(False, -1)
@@ -1803,7 +1840,7 @@ class Nviz(object):
             GS_write_ppm(filename)
         else:
             GS_write_tif(filename)
-        
+
         self.ResizeWindow(widthOrig, heightOrig)
 
     def DrawLightingModel(self):
@@ -1814,8 +1851,9 @@ class Nviz(object):
     def DrawFringe(self):
         """Draw fringe"""
         Nviz_draw_fringe(self.data)
-        
-    def SetFringe(self, sid, color, elev, nw = False, ne = False, sw = False, se = False):
+
+    def SetFringe(self, sid, color, elev, nw=False,
+                  ne=False, sw=False, se=False):
         """Set fringe
 
         :param sid: surface id
@@ -1827,60 +1865,63 @@ class Nviz(object):
         Nviz_set_fringe(self.data,
                         sid, Nviz_color_from_str(scolor),
                         elev, int(nw), int(ne), int(sw), int(se))
-    
+
     def DrawArrow(self):
         """Draw north arrow
         """
         return Nviz_draw_arrow(self.data)
-        
+
     def SetArrow(self, sx, sy, size, color):
         """Set north arrow from canvas coordinates
-        
+
         :param sx,sy: canvas coordinates
         :param size: arrow length
         :param color: arrow color
         """
-        return Nviz_set_arrow(self.data, sx, sy, size, Nviz_color_from_str(color))       
-        
+        return Nviz_set_arrow(self.data, sx, sy, size,
+                              Nviz_color_from_str(color))
+
     def DeleteArrow(self):
         """Delete north arrow
         """
         Nviz_delete_arrow(self.data)
-    
+
     def SetScalebar(self, id, sx, sy, size, color):
         """Set scale bar from canvas coordinates
-        
+
         :param sx,sy: canvas coordinates
         :param id: scale bar id
         :param size: scale bar length
         :param color: scale bar color
         """
-        return Nviz_set_scalebar(self.data, id, sx, sy, size, Nviz_color_from_str(color))
-    
+        return Nviz_set_scalebar(
+            self.data, id, sx, sy, size, Nviz_color_from_str(color))
+
     def DrawScalebar(self):
         """Draw scale bar
         """
         return Nviz_draw_scalebar(self.data)
-    
+
     def DeleteScalebar(self, id):
         """Delete scalebar
         """
         Nviz_delete_scalebar(self.data, id)
-        
+
     def GetPointOnSurface(self, sx, sy):
         """Get point on surface
 
         :param sx,sy: canvas coordinates (LL)
         """
         sid = c_int()
-        x   = c_float()
-        y   = c_float()
-        z   = c_float()
+        x = c_float()
+        y = c_float()
+        z = c_float()
         Debug.msg(5, "Nviz::GetPointOnSurface(): sx=%d sy=%d" % (sx, sy))
-        num = GS_get_selected_point_on_surface(sx, sy, byref(sid), byref(x), byref(y), byref(z))
+        num = GS_get_selected_point_on_surface(
+            sx, sy, byref(sid), byref(x), byref(y), byref(z))
         if num == 0:
             return (None, None, None, None)
-        
+
         return (sid.value, x.value, y.value, z.value)
 
     def QueryMap(self, sx, sy):
@@ -1891,52 +1932,52 @@ class Nviz(object):
         sid, x, y, z = self.GetPointOnSurface(sx, sy)
         if not sid:
             return None
-        
+
         catstr = create_string_buffer(256)
         valstr = create_string_buffer(256)
         GS_get_cat_at_xy(sid, ATT_TOPO, catstr, x, y)
         GS_get_val_at_xy(sid, ATT_COLOR, valstr, x, y)
-        
-        return { 'id' : sid,
-                 'x'  : x,
-                 'y'  : y,
-                 'z'  : z,
-                 'elevation' : catstr.value.replace('(', '').replace(')', ''),
-                 'color'     : valstr.value }
-    
-    def GetDistanceAlongSurface(self, sid, p1, p2, useExag = True):
+
+        return {'id': sid,
+                'x': x,
+                'y': y,
+                'z': z,
+                'elevation': catstr.value.replace('(', '').replace(')', ''),
+                'color': valstr.value}
+
+    def GetDistanceAlongSurface(self, sid, p1, p2, useExag=True):
         """Get distance measured along surface"""
         d = c_float()
-        
+
         GS_get_distance_alongsurf(sid, p1[0], p1[1], p2[0], p2[1],
                                   byref(d), int(useExag))
-        
+
         return d.value
 
     def GetRotationParameters(self, dx, dy):
         """Get rotation parameters (angle, x, y, z axes)
-        
+
         :param dx,dy: difference from previous mouse drag event
         """
         modelview = (c_double * 16)()
         Nviz_get_modelview(byref(modelview))
-        
-        angle = sqrt(dx*dx+dy*dy)/float(self.width+1)*180.0
+
+        angle = sqrt(dx * dx + dy * dy) / float(self.width + 1) * 180.0
         m = []
         row = []
         for i, item in enumerate(modelview):
             row.append(item)
-            if (i+1) % 4 == 0:
+            if (i + 1) % 4 == 0:
                 m.append(row)
                 row = []
         inv = matrix(m).I
         ax, ay, az = dy, dx, 0.
-        x = inv[0,0]*ax + inv[1,0]*ay + inv[2,0]*az
-        y = inv[0,1]*ax + inv[1,1]*ay + inv[2,1]*az
-        z = inv[0,2]*ax + inv[1,2]*ay + inv[2,2]*az
-        
-        return angle, x, y, z 
-       
+        x = inv[0, 0] * ax + inv[1, 0] * ay + inv[2, 0] * az
+        y = inv[0, 1] * ax + inv[1, 1] * ay + inv[2, 1] * az
+        z = inv[0, 2] * ax + inv[1, 2] * ay + inv[2, 2] * az
+
+        return angle, x, y, z
+
     def Rotate(self, angle, x, y, z):
         """Set rotation parameters
         Rotate scene (difference from current state).
@@ -1945,15 +1986,15 @@ class Nviz(object):
         :param x,y,z: axis coordinate
         """
         Nviz_set_rotation(angle, x, y, z)
-        
+
     def UnsetRotation(self):
         """Stop rotating the scene"""
         Nviz_unset_rotation()
-        
+
     def ResetRotation(self):
         """Reset scene rotation"""
         Nviz_init_rotation()
-        
+
     def GetRotationMatrix(self):
         """Get rotation matrix"""
         matrix = (c_double * 16)()
@@ -1962,20 +2003,20 @@ class Nviz(object):
         for item in matrix:
             returnMatrix.append(item)
         return returnMatrix
-        
+
     def SetRotationMatrix(self, matrix):
         """Set rotation matrix"""
         mtrx = (c_double * 16)()
         for i in range(len(matrix)):
             mtrx[i] = matrix[i]
         GS_set_rotation_matrix(byref(mtrx))
-    
+
     def Start2D(self):
         Nviz_set_2D(self.width, self.height)
-        
+
     def FlyThrough(self, flyInfo, mode, exagInfo):
         """Fly through the scene
-        
+
         :param flyInfo: fly parameters
         :param mode: 0 or 1 for different fly behaviour
         :param exagInfo: parameters changing fly speed
@@ -1987,9 +2028,11 @@ class Nviz(object):
         exag[0] = int(exagInfo['move'])
         exag[1] = int(exagInfo['turn'])
         Nviz_flythrough(self.data, fly, exag, mode)
-        
+
+
 class Texture(object):
     """Class representing OpenGL texture"""
+
     def __init__(self, filepath, overlayId, coords):
         """Load image to texture
 
@@ -1998,48 +2041,47 @@ class Texture(object):
         :param coords: image coordinates
         """
         self.path = filepath
-        self.image = wx.Image(filepath, wx.BITMAP_TYPE_ANY)
-        self.width = self.image.GetWidth()
-        self.height = self.image.GetHeight()
+        self.image = autoCropImageFromFile(filepath)
+        self.width = self.orig_width = self.image.GetWidth()
+        self.height = self.orig_height = self.image.GetHeight()
         self.id = overlayId
-        self.coords = [0, 0]
-        self.bounds = wx.Rect()
+        self.coords = coords
         self.active = True
-        
+
         # alpha needs to be initialized
         if not self.image.HasAlpha():
             self.image.InitAlpha()
-    
+
         # resize image to match 2^n
         self.Resize()
-        
+
         # check max texture size
         maxSize = c_int()
         Nviz_get_max_texture(byref(maxSize))
         self.maxSize = maxSize.value
         if self.maxSize < self.width or self.maxSize < self.height:
-            # TODO: split up image 
+            # TODO: split up image
             self.textureId = None
         else:
             self.textureId = self.Load()
-            
+
     def __del__(self):
         """Delete texture"""
         if self.textureId:
             Nviz_del_texture(self.textureId)
         grass.try_remove(self.path)
-            
-    def Resize(self):    
+
+    def Resize(self):
         """Resize image to match 2^n"""
         n = m = 1
-        while self.width > pow(2,n):
+        while self.width > pow(2, n):
             n += 1
-        while self.height > pow(2,m):
+        while self.height > pow(2, m):
             m += 1
-        self.image.Resize(size = (pow(2,n), pow(2,m)), pos = (0, 0))
+        self.image.Resize(size=(pow(2, n), pow(2, m)), pos=(0, 0))
         self.width = self.image.GetWidth()
         self.height = self.image.GetHeight()
-        
+
     def Load(self):
         """Load image to texture"""
         if self.image.HasAlpha():
@@ -2053,105 +2095,90 @@ class Texture(object):
         bytes1 = self.width * self.height
         imageData = struct.unpack(str(bytes3) + 'B', self.image.GetData())
         if self.image.HasAlpha():
-            alphaData = struct.unpack(str(bytes1) + 'B', self.image.GetAlphaData())
-        
+            alphaData = struct.unpack(
+                str(bytes1) + 'B', self.image.GetAlphaData())
+
         # this takes too much time
         wx.BeginBusyCursor()
         for i in range(self.height):
             for j in range(self.width):
-                im[(j + i * self.width) * bytesPerPixel + 0] = imageData[( j + (rev_val - i) * self.width) * 3 + 0]
-                im[(j + i * self.width) * bytesPerPixel + 1] = imageData[( j + (rev_val - i) * self.width) * 3 + 1]
-                im[(j + i * self.width) * bytesPerPixel + 2] = imageData[( j + (rev_val - i) * self.width) * 3 + 2]
+                im[(j + i * self.width) * bytesPerPixel + 0] = imageData[(j +
+                                                                          (rev_val - i) * self.width) * 3 + 0]
+                im[(j + i * self.width) * bytesPerPixel + 1] = imageData[(j +
+                                                                          (rev_val - i) * self.width) * 3 + 1]
+                im[(j + i * self.width) * bytesPerPixel + 2] = imageData[(j +
+                                                                          (rev_val - i) * self.width) * 3 + 2]
                 if self.image.HasAlpha():
-                    im[(j + i * self.width) * bytesPerPixel + 3] = alphaData[( j + (rev_val - i) * self.width)]
+                    im[(j + i * self.width) * bytesPerPixel + 3] = alphaData[(j +
+                                                                              (rev_val - i) * self.width)]
         wx.EndBusyCursor()
-        
-        id = Nviz_load_image(im, self.width, self.height, self.image.HasAlpha())
-        
+
+        id = Nviz_load_image(
+            im,
+            self.width,
+            self.height,
+            self.image.HasAlpha())
+
         return id
-        
+
     def Draw(self):
         """Draw texture as an image"""
-        Nviz_draw_image(self.coords[0], self.coords[1], self.width, self.height, self.textureId)
-    
-        
-    def SetBounds(self, rect):
-        """Set Bounding Rectangle"""
-        self.bounds = rect
-        
+        Nviz_draw_image(
+            self.coords[0],
+            self.coords[1],
+            self.width,
+            self.height,
+            self.textureId)
+
     def HitTest(self, x, y, radius):
-        copy = wx.Rect(*self.bounds)
+        copy = wx.Rect(self.coords[0], self.coords[1], self.orig_width, self.orig_height)
         copy.Inflate(radius, radius)
         return copy.ContainsXY(x, y)
-    
+
     def MoveTexture(self, dx, dy):
         """Move texture on the screen"""
         self.coords[0] += dx
         self.coords[1] += dy
-        self.bounds.OffsetXY(dx, dy)
-    
+
     def SetCoords(self, coords):
         """Set coordinates"""
         dx = coords[0] - self.coords[0]
         dy = coords[1] - self.coords[1]
         self.MoveTexture(dx, dy)
-        
+
     def GetId(self):
         """Returns image id."""
         return self.id
-    
-    def SetActive(self, active = True):
+
+    def SetActive(self, active=True):
         self.active = active
-        
+
     def IsActive(self):
         return self.active
-        
+
+
 class ImageTexture(Texture):
     """Class representing OpenGL texture as an overlay image"""
+
     def __init__(self, filepath, overlayId, coords, cmd):
         """Load image to texture
 
         :param filepath: path to image file
         :param overlayId: id of overlay (1 for legend)
         :param coords: image coordinates
-        :param cmd: d.legend command      
+        :param cmd: d.legend command
         """
-        Texture.__init__(self, filepath = filepath, overlayId = overlayId, coords = coords)
-        
+        Texture.__init__(
+            self,
+            filepath=filepath,
+            overlayId=overlayId,
+            coords=coords)
+
         self.cmd = cmd
-        
+
     def GetCmd(self):
         """Returns overlay command."""
         return self.cmd
-        
-    def Corresponds(self, item):
-        return sorted(self.GetCmd()) == sorted(item.GetCmd())
-        
-class TextTexture(Texture):
-    """Class representing OpenGL texture as a text label"""
-    def __init__(self, filepath, overlayId, coords, textDict):
-        """Load image to texture
 
-        :param filepath: path to image file
-        :param overlayId: id of overlay (101 and more for text)
-        :param coords: text coordinates
-        :param textDict: text properties      
-        """
-        Texture.__init__(self, filepath = filepath, overlayId = overlayId, coords = coords)
-        
-        self.textDict = textDict
-        
-    def GetTextDict(self):
-        """Returns text properties."""
-        return self.textDict
-        
-        
     def Corresponds(self, item):
-        t = self.GetTextDict()
-        for prop in t.keys():
-            if prop in ('coords','bbox'): continue
-            if t[prop] != item[prop]:
-                return False
-                
-        return True
-    
+        return sorted(self.GetCmd()) == sorted(item.GetCmd())
diff --git a/gui/wxpython/psmap/__init__.py b/gui/wxpython/psmap/__init__.py
index e731ee8..24e91cc 100644
--- a/gui/wxpython/psmap/__init__.py
+++ b/gui/wxpython/psmap/__init__.py
@@ -6,4 +6,4 @@ all = [
     'toolbars',
     'utils',
     'frame',
-    ]
+]
diff --git a/gui/wxpython/psmap/dialogs.py b/gui/wxpython/psmap/dialogs.py
index ef1a91b..56f1200 100644
--- a/gui/wxpython/psmap/dialogs.py
+++ b/gui/wxpython/psmap/dialogs.py
@@ -40,10 +40,10 @@ import string
 from copy import deepcopy
 
 import wx
-import wx.lib.scrolledpanel    as scrolled
+import wx.lib.scrolledpanel as scrolled
 import wx.lib.filebrowsebutton as filebrowse
 from wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin
-from wx.lib.expando         import ExpandoTextCtrl, EVT_ETC_LAYOUT_NEEDED
+from wx.lib.expando import ExpandoTextCtrl, EVT_ETC_LAYOUT_NEEDED
 try:
     import wx.lib.agw.floatspin as fs
 except ImportError:
@@ -51,24 +51,40 @@ except ImportError:
 
 import grass.script as grass
 
-from core               import globalvar
+from core import globalvar
 from core.utils import _, PilImageToWxImage
-from dbmgr.vinfo        import VectorDBInfo
-from gui_core.gselect   import Select
-from core.gcmd          import RunCommand, GError, GMessage
-from gui_core.dialogs   import SymbolDialog
-from psmap.utils        import *
+from dbmgr.vinfo import VectorDBInfo
+from gui_core.gselect import Select
+from core.gcmd import RunCommand, GError, GMessage
+from gui_core.dialogs import SymbolDialog
+from psmap.utils import *
 from psmap.instructions import *
 
 # grass.set_raise_on_error(True)
 
-PSMAP_COLORS = ['aqua', 'black', 'blue', 'brown', 'cyan', 'gray', 'grey', 'green', 'indigo',
-                'magenta','orange', 'purple', 'red', 'violet', 'white', 'yellow']
+PSMAP_COLORS = [
+    'aqua',
+    'black',
+    'blue',
+    'brown',
+    'cyan',
+    'gray',
+    'grey',
+    'green',
+    'indigo',
+    'magenta',
+    'orange',
+    'purple',
+    'red',
+    'violet',
+    'white',
+    'yellow']
+
 
-    
 class TCValidator(wx.PyValidator):
     """validates input in textctrls, combobox, taken from wxpython demo"""
-    def __init__(self, flag = None):
+
+    def __init__(self, flag=None):
         wx.PyValidator.__init__(self)
         self.flag = flag
         self.Bind(wx.EVT_CHAR, self.OnChar)
@@ -77,7 +93,7 @@ class TCValidator(wx.PyValidator):
         return TCValidator(self.flag)
 
     def Validate(self, win):
-        
+
         tc = self.GetWindow()
         val = tc.GetValue()
 
@@ -95,9 +111,9 @@ class TCValidator(wx.PyValidator):
         if self.flag == 'DIGIT_ONLY' and chr(key) in string.digits + '.-':
             event.Skip()
             return
-##        if self.flag == 'SCALE' and chr(key) in string.digits + ':':
-##            event.Skip()
-##            return
+# if self.flag == 'SCALE' and chr(key) in string.digits + ':':
+# event.Skip()
+# return
         if self.flag == 'ZERO_AND_ONE_ONLY' and chr(key) in '01':
             event.Skip()
             return
@@ -105,7 +121,7 @@ class TCValidator(wx.PyValidator):
             wx.Bell()
         # Returning without calling even.Skip eats the event before it
         # gets to the text control
-        return  
+        return
 
 
 class PenStyleComboBox(wx.combo.OwnerDrawnComboBox):
@@ -133,13 +149,13 @@ class PenStyleComboBox(wx.combo.OwnerDrawnComboBox):
         dc.SetPen(pen)
 
         # for painting the items in the popup
-        dc.DrawText(self.GetString(item ),
+        dc.DrawText(self.GetString(item),
                     r.x + 3,
-                    (r.y + 0) + ((r.height/2) - dc.GetCharHeight() )/2
+                    (r.y + 0) + ((r.height / 2) - dc.GetCharHeight()) / 2
                     )
-        dc.DrawLine(r.x+5, r.y+((r.height/4)*3)+1, r.x+r.width - 5, r.y+((r.height/4)*3)+1 )
+        dc.DrawLine(r.x + 5, r.y + ((r.height / 4) * 3) + 1,
+                    r.x + r.width - 5, r.y + ((r.height / 4) * 3) + 1)
 
-        
     def OnDrawBackground(self, dc, rect, item, flags):
         """Overridden from OwnerDrawnComboBox, called for drawing the
         background area of each item."""
@@ -147,14 +163,15 @@ class PenStyleComboBox(wx.combo.OwnerDrawnComboBox):
         # combo control itself, then use the default rendering.
         if (item & 1 == 0 or flags & (wx.combo.ODCB_PAINTING_CONTROL |
                                       wx.combo.ODCB_PAINTING_SELECTED)):
-            wx.combo.OwnerDrawnComboBox.OnDrawBackground(self, dc, rect, item, flags)
+            wx.combo.OwnerDrawnComboBox.OnDrawBackground(
+                self, dc, rect, item, flags)
             return
 
         # Otherwise, draw every other background with different colour.
-        bgCol = wx.Colour(240,240,250)
+        bgCol = wx.Colour(240, 240, 250)
         dc.SetBrush(wx.Brush(bgCol))
         dc.SetPen(wx.Pen(bgCol))
-        dc.DrawRectangleRect(rect);
+        dc.DrawRectangleRect(rect)
 
     def OnMeasureItem(self, item):
         """Overridden from OwnerDrawnComboBox, should return the height
@@ -164,23 +181,26 @@ class PenStyleComboBox(wx.combo.OwnerDrawnComboBox):
     def OnMeasureItemWidth(self, item):
         """Overridden from OwnerDrawnComboBox.  Callback for item width, or
         -1 for default/undetermined"""
-        return -1; # default - will be measured from text width  
-    
-    
+        return -1  # default - will be measured from text width
+
+
 class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin):
     """List control for managing order and labels of vector maps in legend"""
+
     def __init__(self, parent):
-        wx.ListCtrl.__init__(self, parent, id = wx.ID_ANY, 
-                             style = wx.LC_REPORT|wx.LC_SINGLE_SEL|wx.BORDER_SUNKEN|wx.LC_VRULES|wx.LC_HRULES)
-        CheckListCtrlMixin.__init__(self) 
+        wx.ListCtrl.__init__(
+            self, parent, id=wx.ID_ANY, style=wx.LC_REPORT | wx.LC_SINGLE_SEL |
+            wx.BORDER_SUNKEN | wx.LC_VRULES | wx.LC_HRULES)
+        CheckListCtrlMixin.__init__(self)
         ListCtrlAutoWidthMixin.__init__(self)
-        
+
 
 class PsmapDialog(wx.Dialog):
-    def __init__(self, parent, id,  title, settings, apply = True):
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, 
-                            title = title, size = wx.DefaultSize,
-                            style = wx.CAPTION|wx.MINIMIZE_BOX|wx.CLOSE_BOX)
+
+    def __init__(self, parent, id, title, settings, apply=True):
+        wx.Dialog.__init__(self, parent=parent, id=wx.ID_ANY,
+                           title=title, size=wx.DefaultSize,
+                           style=wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
         self.apply = apply
         self.id = id
         self.parent = parent
@@ -188,144 +208,231 @@ class PsmapDialog(wx.Dialog):
         self.objectType = None
         self.unitConv = UnitConversion(self)
         self.spinCtrlSize = (65, -1)
-        
+
         self.Bind(wx.EVT_CLOSE, self.OnClose)
-        
-    
-        
+
     def AddUnits(self, parent, dialogDict):
         parent.units = dict()
-        parent.units['unitsLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Units:"))
+        parent.units['unitsLabel'] = wx.StaticText(
+            parent, id=wx.ID_ANY, label=_("Units:"))
         choices = self.unitConv.getPageUnitsNames()
-        parent.units['unitsCtrl'] = wx.Choice(parent, id = wx.ID_ANY, choices = choices)  
-        parent.units['unitsCtrl'].SetStringSelection(self.unitConv.findName(dialogDict['unit']))
-          
+        parent.units['unitsCtrl'] = wx.Choice(
+            parent, id=wx.ID_ANY, choices=choices)
+        parent.units['unitsCtrl'].SetStringSelection(
+            self.unitConv.findName(dialogDict['unit']))
+
     def AddPosition(self, parent, dialogDict):
         if not hasattr(parent, "position"):
             parent.position = dict()
-        parent.position['comment'] = wx.StaticText(parent, id = wx.ID_ANY,\
-                    label = _("Position of the top left corner\nfrom the top left edge of the paper"))
-        parent.position['xLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("X:"))
-        parent.position['yLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Y:"))
-        parent.position['xCtrl'] = wx.TextCtrl(parent, id = wx.ID_ANY, value = str(dialogDict['where'][0]), validator = TCValidator(flag = 'DIGIT_ONLY'))
-        parent.position['yCtrl'] = wx.TextCtrl(parent, id = wx.ID_ANY, value = str(dialogDict['where'][1]), validator = TCValidator(flag = 'DIGIT_ONLY'))
-        if dialogDict.has_key('unit'):
-            x = self.unitConv.convert(value = dialogDict['where'][0], fromUnit = 'inch', toUnit = dialogDict['unit'])
-            y = self.unitConv.convert(value = dialogDict['where'][1], fromUnit = 'inch', toUnit = dialogDict['unit'])
+        parent.position['comment'] = wx.StaticText(parent, id=wx.ID_ANY, label=_(
+            "Position of the top left corner\nfrom the top left edge of the paper"))
+        parent.position['xLabel'] = wx.StaticText(
+            parent, id=wx.ID_ANY, label=_("X:"))
+        parent.position['yLabel'] = wx.StaticText(
+            parent, id=wx.ID_ANY, label=_("Y:"))
+        parent.position['xCtrl'] = wx.TextCtrl(
+            parent, id=wx.ID_ANY, value=str(
+                dialogDict['where'][0]), validator=TCValidator(
+                flag='DIGIT_ONLY'))
+        parent.position['yCtrl'] = wx.TextCtrl(
+            parent, id=wx.ID_ANY, value=str(
+                dialogDict['where'][1]), validator=TCValidator(
+                flag='DIGIT_ONLY'))
+        if 'unit' in dialogDict:
+            x = self.unitConv.convert(
+                value=dialogDict['where'][0],
+                fromUnit='inch',
+                toUnit=dialogDict['unit'])
+            y = self.unitConv.convert(
+                value=dialogDict['where'][1],
+                fromUnit='inch',
+                toUnit=dialogDict['unit'])
             parent.position['xCtrl'].SetValue("%5.3f" % x)
             parent.position['yCtrl'].SetValue("%5.3f" % y)
-        
+
     def AddExtendedPosition(self, panel, gridBagSizer, dialogDict):
         """Add widgets for setting position relative to paper and to map"""
         panel.position = dict()
-        positionLabel = wx.StaticText(panel, id = wx.ID_ANY, label = _("Position is given:"))
-        panel.position['toPaper'] = wx.RadioButton(panel, id = wx.ID_ANY, label = _("relative to paper"), style = wx.RB_GROUP)
-        panel.position['toMap'] = wx.RadioButton(panel, id = wx.ID_ANY, label = _("by map coordinates"))
+        positionLabel = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Position is given:"))
+        panel.position['toPaper'] = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("relative to paper"), style=wx.RB_GROUP)
+        panel.position['toMap'] = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("by map coordinates"))
         panel.position['toPaper'].SetValue(dialogDict['XY'])
         panel.position['toMap'].SetValue(not dialogDict['XY'])
-        
-        gridBagSizer.Add(positionLabel, pos = (0,0), span = (1,3), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT, border = 0)
-        gridBagSizer.Add(panel.position['toPaper'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT, border = 0)
-        gridBagSizer.Add(panel.position['toMap'], pos = (1,1),flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT, border = 0)
-        
+
+        gridBagSizer.Add(
+            positionLabel, pos=(
+                0, 0), span=(
+                1, 3), flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT, border=0)
+        gridBagSizer.Add(
+            panel.position['toPaper'],
+            pos=(
+                1,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+            border=0)
+        gridBagSizer.Add(
+            panel.position['toMap'],
+            pos=(
+                1,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT,
+            border=0)
+
         # first box - paper coordinates
-        box1   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = "")
+        box1 = wx.StaticBox(parent=panel, id=wx.ID_ANY, label="")
         sizerP = wx.StaticBoxSizer(box1, wx.VERTICAL)
-        self.gridBagSizerP = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        self.AddPosition(parent = panel, dialogDict = dialogDict)
-        panel.position['comment'].SetLabel(_("Position from the top left\nedge of the paper"))
-        self.AddUnits(parent = panel, dialogDict = dialogDict)
-        self.gridBagSizerP.Add(panel.units['unitsLabel'], pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerP.Add(panel.units['unitsCtrl'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerP.Add(panel.position['xLabel'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerP.Add(panel.position['xCtrl'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerP.Add(panel.position['yLabel'], pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerP.Add(panel.position['yCtrl'], pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerP.Add(panel.position['comment'], pos = (3,0), span = (1,2), flag = wx.ALIGN_BOTTOM, border = 0)
-        
+        self.gridBagSizerP = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.AddPosition(parent=panel, dialogDict=dialogDict)
+        panel.position['comment'].SetLabel(
+            _("Position from the top left\nedge of the paper"))
+        self.AddUnits(parent=panel, dialogDict=dialogDict)
+        self.gridBagSizerP.Add(
+            panel.units['unitsLabel'], pos=(
+                0, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerP.Add(
+            panel.units['unitsCtrl'], pos=(
+                0, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerP.Add(
+            panel.position['xLabel'], pos=(
+                1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerP.Add(panel.position['xCtrl'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerP.Add(
+            panel.position['yLabel'], pos=(
+                2, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerP.Add(panel.position['yCtrl'], pos=(
+            2, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerP.Add(
+            panel.position['comment'], pos=(
+                3, 0), span=(
+                1, 2), flag=wx.ALIGN_BOTTOM, border=0)
+
         self.gridBagSizerP.AddGrowableCol(1)
         self.gridBagSizerP.AddGrowableRow(3)
-        sizerP.Add(self.gridBagSizerP, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        gridBagSizer.Add(sizerP, pos = (2,0),span = (1,1), flag = wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND, border = 0)
-        
+        sizerP.Add(
+            self.gridBagSizerP,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        gridBagSizer.Add(
+            sizerP, pos=(
+                2, 0), span=(
+                1, 1), flag=wx.ALIGN_CENTER_HORIZONTAL | wx.EXPAND, border=0)
+
         # second box - map coordinates
-        box2   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = "")
+        box2 = wx.StaticBox(parent=panel, id=wx.ID_ANY, label="")
         sizerM = wx.StaticBoxSizer(box2, wx.VERTICAL)
-        self.gridBagSizerM = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        eastingLabel  = wx.StaticText(panel, id = wx.ID_ANY, label = "E:")
-        northingLabel  = wx.StaticText(panel, id = wx.ID_ANY, label = "N:")
-        panel.position['eCtrl'] = wx.TextCtrl(panel, id = wx.ID_ANY, value = "")
-        panel.position['nCtrl'] = wx.TextCtrl(panel, id = wx.ID_ANY, value = "")
-        east, north = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = dialogDict['where'][0], y = dialogDict['where'][1], paperToMap = True)
+        self.gridBagSizerM = wx.GridBagSizer(hgap=5, vgap=5)
+
+        eastingLabel = wx.StaticText(panel, id=wx.ID_ANY, label="E:")
+        northingLabel = wx.StaticText(panel, id=wx.ID_ANY, label="N:")
+        panel.position['eCtrl'] = wx.TextCtrl(panel, id=wx.ID_ANY, value="")
+        panel.position['nCtrl'] = wx.TextCtrl(panel, id=wx.ID_ANY, value="")
+        east, north = PaperMapCoordinates(
+            mapInstr=self.instruction[self.mapId],
+            x=dialogDict['where'][0],
+            y=dialogDict['where'][1],
+            paperToMap=True)
         panel.position['eCtrl'].SetValue(str(east))
         panel.position['nCtrl'].SetValue(str(north))
-        
-        self.gridBagSizerM.Add(eastingLabel, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerM.Add(northingLabel, pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerM.Add(panel.position['eCtrl'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerM.Add(panel.position['nCtrl'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
+
+        self.gridBagSizerM.Add(
+            eastingLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerM.Add(
+            northingLabel, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerM.Add(panel.position['eCtrl'], pos=(
+            0, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerM.Add(panel.position['nCtrl'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
         self.gridBagSizerM.AddGrowableCol(0)
         self.gridBagSizerM.AddGrowableCol(1)
-        sizerM.Add(self.gridBagSizerM, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        gridBagSizer.Add(sizerM, pos = (2,1), flag = wx.ALIGN_LEFT|wx.EXPAND, border = 0)
-        
-    def AddFont(self, parent, dialogDict, color = True):
+        sizerM.Add(
+            self.gridBagSizerM,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        gridBagSizer.Add(
+            sizerM, pos=(2, 1),
+            flag=wx.ALIGN_LEFT | wx.EXPAND, border=0)
+
+    def AddFont(self, parent, dialogDict, color=True):
         parent.font = dict()
 ##        parent.font['fontLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Choose font:"))
 ##        parent.font['fontCtrl'] = wx.FontPickerCtrl(parent, id = wx.ID_ANY)
-##        
-##        parent.font['fontCtrl'].SetSelectedFont(
-##                        wx.FontFromNativeInfoString(dialogDict['font'] + " " + str(dialogDict['fontsize'])))
-##        parent.font['fontCtrl'].SetMaxPointSize(50)
-##        
-##        if color:
+##
+# parent.font['fontCtrl'].SetSelectedFont(
+# wx.FontFromNativeInfoString(dialogDict['font'] + " " + str(dialogDict['fontsize'])))
+# parent.font['fontCtrl'].SetMaxPointSize(50)
+##
+# if color:
 ##            parent.font['colorLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Choose color:"))
 ##            parent.font['colorCtrl'] = wx.ColourPickerCtrl(parent, id = wx.ID_ANY, style=wx.FNTP_FONTDESC_AS_LABEL)
-##            parent.font['colorCtrl'].SetColour(dialogDict['color'])
-           
-##        parent.font['colorCtrl'].SetColour(convertRGB(dialogDict['color'])) 
-           
-        parent.font['fontLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Font:"))
-        parent.font['fontSizeLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Font size:"))
-        fontChoices = [ 'Times-Roman', 'Times-Italic', 'Times-Bold', 'Times-BoldItalic', 'Helvetica',\
-                        'Helvetica-Oblique', 'Helvetica-Bold', 'Helvetica-BoldOblique', 'Courier',\
-                        'Courier-Oblique', 'Courier-Bold', 'Courier-BoldOblique'] 
-        parent.font['fontCtrl'] = wx.Choice(parent, id = wx.ID_ANY, choices = fontChoices)
+# parent.font['colorCtrl'].SetColour(dialogDict['color'])
+
+# parent.font['colorCtrl'].SetColour(convertRGB(dialogDict['color']))
+
+        parent.font['fontLabel'] = wx.StaticText(
+            parent, id=wx.ID_ANY, label=_("Font:"))
+        parent.font['fontSizeLabel'] = wx.StaticText(
+            parent, id=wx.ID_ANY, label=_("Font size:"))
+        fontChoices = [
+            'Times-Roman',
+            'Times-Italic',
+            'Times-Bold',
+            'Times-BoldItalic',
+            'Helvetica',
+            'Helvetica-Oblique',
+            'Helvetica-Bold',
+            'Helvetica-BoldOblique',
+            'Courier',
+            'Courier-Oblique',
+            'Courier-Bold',
+            'Courier-BoldOblique']
+        parent.font['fontCtrl'] = wx.Choice(
+            parent, id=wx.ID_ANY, choices=fontChoices)
         if dialogDict['font'] in fontChoices:
             parent.font['fontCtrl'].SetStringSelection(dialogDict['font'])
         else:
             parent.font['fontCtrl'].SetStringSelection('Helvetica')
-        parent.font['fontSizeCtrl'] = wx.SpinCtrl(parent, id = wx.ID_ANY, min = 4, max = 50, initial = 10)
+        parent.font['fontSizeCtrl'] = wx.SpinCtrl(
+            parent, id=wx.ID_ANY, min=4, max=50, initial=10)
         parent.font['fontSizeCtrl'].SetValue(dialogDict['fontsize'])
-         
+
         if color:
-            parent.font['colorLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Choose color:"))
-            parent.font['colorCtrl'] = wx.ColourPickerCtrl(parent, id = wx.ID_ANY)
+            parent.font['colorLabel'] = wx.StaticText(
+                parent, id=wx.ID_ANY, label=_("Choose color:"))
+            parent.font['colorCtrl'] = wx.ColourPickerCtrl(
+                parent, id=wx.ID_ANY)
             parent.font['colorCtrl'].SetColour(convertRGB(dialogDict['color']))
 ##            parent.font['colorLabel'] = wx.StaticText(parent, id = wx.ID_ANY, label = _("Color:"))
-##            colorChoices = [  'aqua', 'black', 'blue', 'brown', 'cyan', 'gray', 'green', 'indigo', 'magenta',\
-##                                'orange', 'purple', 'red', 'violet', 'white', 'yellow']
+# colorChoices = [  'aqua', 'black', 'blue', 'brown', 'cyan', 'gray', 'green', 'indigo', 'magenta',\
+# 'orange', 'purple', 'red', 'violet', 'white', 'yellow']
 ##            parent.colorCtrl = wx.Choice(parent, id = wx.ID_ANY, choices = colorChoices)
-##            parent.colorCtrl.SetStringSelection(parent.rLegendDict['color'])
+# parent.colorCtrl.SetStringSelection(parent.rLegendDict['color'])
 ##            parent.font['colorCtrl'] = wx.ColourPickerCtrl(parent, id = wx.ID_ANY)
-##            parent.font['colorCtrl'].SetColour(dialogDict['color'])   
+# parent.font['colorCtrl'].SetColour(dialogDict['color'])
+
     def OnApply(self, event):
         ok = self.update()
         if ok:
-            self.parent.DialogDataChanged(id = self.id)
-            return True 
+            self.parent.DialogDataChanged(id=self.id)
+            return True
         else:
             return False
-        
+
     def OnOK(self, event):
         """Apply changes, close dialog"""
         ok = self.OnApply(event)
         if ok:
             self.Close()
-    
+
     def OnCancel(self, event):
         """Close dialog"""
         self.Close()
@@ -333,20 +440,19 @@ class PsmapDialog(wx.Dialog):
     def OnClose(self, event):
         """Destroy dialog and delete it from open dialogs"""
         if self.objectType:
-            for each in  self.objectType:
+            for each in self.objectType:
                 if each in self.parent.openDialogs:
                     del self.parent.openDialogs[each]
         event.Skip()
         self.Destroy()
-        
+
     def _layout(self, panel):
-        #buttons
+        # buttons
         btnCancel = wx.Button(self, wx.ID_CANCEL)
         btnOK = wx.Button(self, wx.ID_OK)
         btnOK.SetDefault()
         if self.apply:
             btnApply = wx.Button(self, wx.ID_APPLY)
-        
 
         # bindigs
         btnOK.Bind(wx.EVT_BUTTON, self.OnOK)
@@ -357,7 +463,7 @@ class PsmapDialog(wx.Dialog):
         if self.apply:
             btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
             btnApply.SetToolTipString(_("Apply changes"))
-        
+
         # sizers
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(btnCancel)
@@ -365,50 +471,82 @@ class PsmapDialog(wx.Dialog):
             btnSizer.AddButton(btnApply)
         btnSizer.AddButton(btnOK)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = panel, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
-        
+        mainSizer.Add(
+            item=panel,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.SetSizer(mainSizer)
         mainSizer.Layout()
-        mainSizer.Fit(self) 
-            
+        mainSizer.Fit(self)
+
+
 class PageSetupDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "Page setup",  settings = settings)
-        
-        self.cat = ['Units', 'Format', 'Orientation', 'Width', 'Height', 'Left', 'Right', 'Top', 'Bottom']
-        labels = [_('Units'), _('Format'), _('Orientation'), _('Width'), _('Height'),
-                  _('Left'), _('Right'), _('Top'), _('Bottom')]
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="Page setup",
+            settings=settings)
+
+        self.cat = [
+            'Units',
+            'Format',
+            'Orientation',
+            'Width',
+            'Height',
+            'Left',
+            'Right',
+            'Top',
+            'Bottom']
+        labels = [
+            _('Units'),
+            _('Format'),
+            _('Orientation'),
+            _('Width'),
+            _('Height'),
+            _('Left'),
+            _('Right'),
+            _('Top'),
+            _('Bottom')]
         self.catsLabels = dict(zip(self.cat, labels))
-        paperString = RunCommand('ps.map', flags = 'p', read = True, quiet = True)
-        self.paperTable = self._toList(paperString) 
+        paperString = RunCommand('ps.map', flags='p', read=True, quiet=True)
+        self.paperTable = self._toList(paperString)
         self.unitsList = self.unitConv.getPageUnitsNames()
         self.pageSetupDict = settings[id].GetInstruction()
 
         self._layout()
-        
+
         if self.pageSetupDict:
-            self.getCtrl('Units').SetStringSelection(self.unitConv.findName(self.pageSetupDict['Units']))
+            self.getCtrl('Units').SetStringSelection(
+                self.unitConv.findName(self.pageSetupDict['Units']))
             if self.pageSetupDict['Format'] == 'custom':
-                self.getCtrl('Format').SetSelection(self.getCtrl('Format').GetCount() - 1)
+                self.getCtrl('Format').SetSelection(
+                    self.getCtrl('Format').GetCount() - 1)
             else:
-                self.getCtrl('Format').SetStringSelection(self.pageSetupDict['Format'])
+                self.getCtrl('Format').SetStringSelection(
+                    self.pageSetupDict['Format'])
             if self.pageSetupDict['Orientation'] == 'Portrait':
                 self.getCtrl('Orientation').SetSelection(0)
             else:
                 self.getCtrl('Orientation').SetSelection(1)
-                
+
             for item in self.cat[3:]:
-                val = self.unitConv.convert(value = self.pageSetupDict[item],
-                                            fromUnit = 'inch', toUnit = self.pageSetupDict['Units'])
+                val = self.unitConv.convert(
+                    value=self.pageSetupDict[item],
+                    fromUnit='inch',
+                    toUnit=self.pageSetupDict['Units'])
                 self.getCtrl(item).SetValue("%4.3f" % val)
 
-       
-        if self.getCtrl('Format').GetSelection() != self.getCtrl('Format').GetCount() - 1: # custom
+        if self.getCtrl('Format').GetSelection() != self.getCtrl(
+                'Format').GetCount() - 1:  # custom
             self.getCtrl('Width').Disable()
             self.getCtrl('Height').Disable()
         else:
@@ -419,65 +557,97 @@ class PageSetupDialog(PsmapDialog):
         self.getCtrl('Orientation').Bind(wx.EVT_CHOICE, self.OnChoice)
         self.btnOk.Bind(wx.EVT_BUTTON, self.OnOK)
 
-    
     def update(self):
-        self.pageSetupDict['Units'] = self.unitConv.findUnit(self.getCtrl('Units').GetStringSelection())
-        self.pageSetupDict['Format'] = self.paperTable[self.getCtrl('Format').GetSelection()]['Format']
+        self.pageSetupDict['Units'] = self.unitConv.findUnit(
+            self.getCtrl('Units').GetStringSelection())
+        self.pageSetupDict['Format'] = self.paperTable[
+            self.getCtrl('Format').GetSelection()]['Format']
         if self.getCtrl('Orientation').GetSelection() == 0:
             self.pageSetupDict['Orientation'] = 'Portrait'
         else:
             self.pageSetupDict['Orientation'] = 'Landscape'
         for item in self.cat[3:]:
-            self.pageSetupDict[item] = self.unitConv.convert(value = float(self.getCtrl(item).GetValue()),
-                                        fromUnit = self.pageSetupDict['Units'], toUnit = 'inch')
-            
+            self.pageSetupDict[item] = self.unitConv.convert(
+                value=float(self.getCtrl(item).GetValue()),
+                fromUnit=self.pageSetupDict['Units'],
+                toUnit='inch')
 
-            
     def OnOK(self, event):
         try:
             self.update()
         except ValueError:
-                wx.MessageBox(message = _("Literal is not allowed!"), caption = _('Invalid input'),
-                                    style = wx.OK|wx.ICON_ERROR)
+            wx.MessageBox(
+                message=_("Literal is not allowed!"),
+                caption=_('Invalid input'),
+                style=wx.OK | wx.ICON_ERROR)
         else:
             event.Skip()
-        
+
     def _layout(self):
-        size = (110,-1)
-        #sizers
+        size = (110, -1)
+        # sizers
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        pageBox = wx.StaticBox(self, id = wx.ID_ANY, label = " %s " % _("Page size"))
+        pageBox = wx.StaticBox(
+            self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Page size"))
         pageSizer = wx.StaticBoxSizer(pageBox, wx.VERTICAL)
-        marginBox = wx.StaticBox(self, id = wx.ID_ANY, label = " %s " % _("Margins"))
+        marginBox = wx.StaticBox(
+            self, id=wx.ID_ANY, label=" %s " %
+            _("Margins"))
         marginSizer = wx.StaticBoxSizer(marginBox, wx.VERTICAL)
-        horSizer = wx.BoxSizer(wx.HORIZONTAL) 
+        horSizer = wx.BoxSizer(wx.HORIZONTAL)
         #staticText + choice
-        choices = [self.unitsList, [item['Format'] for item in self.paperTable], [_('Portrait'), _('Landscape')]]
-        propor = [0,1,1]
-        border = [5,3,3]
-        self.hBoxDict={}
+        choices = [
+            self.unitsList, [
+                item['Format'] for item in self.paperTable], [
+                _('Portrait'), _('Landscape')]]
+        propor = [0, 1, 1]
+        border = [5, 3, 3]
+        self.hBoxDict = {}
         for i, item in enumerate(self.cat[:3]):
             hBox = wx.BoxSizer(wx.HORIZONTAL)
-            stText = wx.StaticText(self, id = wx.ID_ANY, label = self.catsLabels[item] + ':')
-            choice = wx.Choice(self, id = wx.ID_ANY, choices = choices[i], size = size)
-            hBox.Add(stText, proportion = propor[i], flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = border[i])
-            hBox.Add(choice, proportion = 0, flag = wx.ALL, border = border[i])
+            stText = wx.StaticText(
+                self, id=wx.ID_ANY, label=self.catsLabels[item] + ':')
+            choice = wx.Choice(
+                self,
+                id=wx.ID_ANY,
+                choices=choices[i],
+                size=size)
+            hBox.Add(
+                stText,
+                proportion=propor[i],
+                flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                border=border[i])
+            hBox.Add(choice, proportion=0, flag=wx.ALL, border=border[i])
             if item == 'Units':
-                hBox.Add(size,1) 
-            self.hBoxDict[item] = hBox    
+                hBox.Add(size, 1)
+            self.hBoxDict[item] = hBox
 
         #staticText + TextCtrl
         for item in self.cat[3:]:
             hBox = wx.BoxSizer(wx.HORIZONTAL)
-            label = wx.StaticText(self, id = wx.ID_ANY, label = self.catsLabels[item] + ':')
-            textctrl = wx.TextCtrl(self, id = wx.ID_ANY, size = size, value = '')
-            hBox.Add(label, proportion = 1, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 3)
-            hBox.Add(textctrl, proportion = 0, flag = wx.ALIGN_CENTRE|wx.ALL, border = 3)
+            label = wx.StaticText(
+                self, id=wx.ID_ANY, label=self.catsLabels[item] + ':')
+            textctrl = wx.TextCtrl(self, id=wx.ID_ANY, size=size, value='')
+            hBox.Add(
+                label,
+                proportion=1,
+                flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                border=3)
+            hBox.Add(
+                textctrl,
+                proportion=0,
+                flag=wx.ALIGN_CENTRE | wx.ALL,
+                border=3)
             self.hBoxDict[item] = hBox
-         
-        sizer = list([mainSizer] + [pageSizer]*4 + [marginSizer]*4)
+
+        sizer = list([mainSizer] + [pageSizer] * 4 + [marginSizer] * 4)
         for i, item in enumerate(self.cat):
-                sizer[i].Add(self.hBoxDict[item], 0, wx.GROW|wx.RIGHT|wx.LEFT,5)
+            sizer[i].Add(
+                self.hBoxDict[item],
+                0, wx.GROW | wx.RIGHT | wx.LEFT, 5)
         # OK button
         btnSizer = wx.StdDialogButtonSizer()
         self.btnOk = wx.Button(self, wx.ID_OK)
@@ -486,27 +656,39 @@ class PageSetupDialog(PsmapDialog):
         btn = wx.Button(self, wx.ID_CANCEL)
         btnSizer.AddButton(btn)
         btnSizer.Realize()
-    
-    
-        horSizer.Add(pageSizer, proportion = 0, flag = wx.LEFT|wx.RIGHT|wx.BOTTOM, border = 10)
-        horSizer.Add(marginSizer, proportion = 0, flag = wx.LEFT|wx.RIGHT|wx.BOTTOM|wx.EXPAND, border = 10)
-        mainSizer.Add(horSizer, proportion = 0, border = 10)  
-        mainSizer.Add(btnSizer, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT|wx.ALL,  border = 10)      
+
+        horSizer.Add(
+            pageSizer,
+            proportion=0,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM,
+            border=10)
+        horSizer.Add(marginSizer, proportion=0, flag=wx.LEFT |
+                     wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=10)
+        mainSizer.Add(horSizer, proportion=0, border=10)
+        mainSizer.Add(
+            btnSizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.ALL,
+            border=10)
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
-    
+
     def OnChoice(self, event):
         currPaper = self.paperTable[self.getCtrl('Format').GetSelection()]
-        currUnit = self.unitConv.findUnit(self.getCtrl('Units').GetStringSelection())
+        currUnit = self.unitConv.findUnit(
+            self.getCtrl('Units').GetStringSelection())
         currOrientIdx = self.getCtrl('Orientation').GetSelection()
         newSize = dict()
         for item in self.cat[3:]:
-            newSize[item] = self.unitConv.convert(float(currPaper[item]), fromUnit = 'inch', toUnit = currUnit)
+            newSize[item] = self.unitConv.convert(
+                float(currPaper[item]),
+                fromUnit='inch', toUnit=currUnit)
 
         enable = True
         if currPaper['Format'] != _('custom'):
-            if currOrientIdx == 1: # portrait
-                newSize['Width'], newSize['Height'] = newSize['Height'], newSize['Width']
+            if currOrientIdx == 1:  # portrait
+                newSize['Width'], newSize['Height'] = newSize[
+                    'Height'], newSize['Width']
             for item in self.cat[3:]:
                 self.getCtrl(item).ChangeValue("%4.3f" % newSize[item])
             enable = False
@@ -514,80 +696,95 @@ class PageSetupDialog(PsmapDialog):
         self.getCtrl('Height').Enable(enable)
         self.getCtrl('Orientation').Enable(not enable)
 
-
     def getCtrl(self, item):
-         return self.hBoxDict[item].GetItem(1).GetWindow()
-        
+        return self.hBoxDict[item].GetItem(1).GetWindow()
+
     def _toList(self, paperStr):
-        
+
         sizeList = list()
         for line in paperStr.strip().split('\n'):
-            d = dict(zip([self.cat[1]]+ self.cat[3:],line.split()))
+            d = dict(zip([self.cat[1]] + self.cat[3:], line.split()))
             sizeList.append(d)
-        d = {}.fromkeys([self.cat[1]]+ self.cat[3:], 100)
-        d.update(Format = _('custom'))
+        d = {}.fromkeys([self.cat[1]] + self.cat[3:], 100)
+        d.update(Format=_('custom'))
         sizeList.append(d)
         return sizeList
-    
+
+
 class MapDialog(PsmapDialog):
     """Dialog for map frame settings and optionally  raster and vector map selection"""
-    def __init__(self, parent, id, settings,  rect = None, notebook = False):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "", settings = settings)
- 
+
+    def __init__(self, parent, id, settings, rect=None, notebook=False):
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="",
+            settings=settings)
+
         self.isNotebook = notebook
         if self.isNotebook:
-            self.objectType = ('mapNotebook',) 
+            self.objectType = ('mapNotebook',)
         else:
             self.objectType = ('map',)
 
-        
-        #notebook
+        # notebook
         if self.isNotebook:
-            self.notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
-            self.mPanel = MapFramePanel(parent = self.notebook, id = self.id[0], settings = self.instruction, 
-                                        rect = rect, notebook = True)
+            self.notebook = wx.Notebook(
+                parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
+            self.mPanel = MapFramePanel(
+                parent=self.notebook,
+                id=self.id[0],
+                settings=self.instruction,
+                rect=rect,
+                notebook=True)
             self.id[0] = self.mPanel.getId()
-            self.rPanel = RasterPanel(parent = self.notebook, id = self.id[1], settings = self.instruction, 
-                                        notebook = True)
+            self.rPanel = RasterPanel(
+                parent=self.notebook, id=self.id[1],
+                settings=self.instruction, notebook=True)
             self.id[1] = self.rPanel.getId()
-            self.vPanel = VectorPanel(parent = self.notebook, id = self.id[2], settings = self.instruction,
-                                        notebook = True)
+            self.vPanel = VectorPanel(
+                parent=self.notebook, id=self.id[2],
+                settings=self.instruction, notebook=True)
             self.id[2] = self.vPanel.getId()
             self._layout(self.notebook)
             self.SetTitle(_("Map settings"))
         else:
-            self.mPanel = MapFramePanel(parent = self, id = self.id[0], settings = self.instruction, 
-                                        rect = rect, notebook = False)
+            self.mPanel = MapFramePanel(
+                parent=self,
+                id=self.id[0],
+                settings=self.instruction,
+                rect=rect,
+                notebook=False)
             self.id[0] = self.mPanel.getId()
             self._layout(self.mPanel)
             self.SetTitle(_("Map frame settings"))
-        
-        
+
     def OnApply(self, event):
         """Apply changes"""
         if self.isNotebook:
             okV = self.vPanel.update()
             okR = self.rPanel.update()
             if okV and self.id[2] in self.instruction:
-                self.parent.DialogDataChanged(id = self.id[2])
+                self.parent.DialogDataChanged(id=self.id[2])
             if okR and self.id[1] in self.instruction:
-                self.parent.DialogDataChanged(id = self.id[1])
+                self.parent.DialogDataChanged(id=self.id[1])
             if not okR or not okV:
                 return False
 
         ok = self.mPanel.update()
         if ok:
-            self.parent.DialogDataChanged(id = self.id[0])
-            return True 
-        
+            self.parent.DialogDataChanged(id=self.id[0])
+            return True
+
         return False
-    
+
     def OnCancel(self, event):
         """Close dialog and remove tmp red box"""
         self.parent.canvas.pdcTmp.RemoveId(self.parent.canvas.idZoomBoxTmp)
-        self.parent.canvas.Refresh() 
+        self.parent.canvas.Refresh()
         self.Close()
-        
+
     def updateDialog(self):
         """Update raster and vector information"""
         if self.mPanel.scaleChoice.GetSelection() == 0:
@@ -595,48 +792,48 @@ class MapDialog(PsmapDialog):
                 if 'raster' in self.parent.openDialogs:
                     if self.parent.openDialogs['raster'].rPanel.rasterYesRadio.GetValue() and \
                             self.parent.openDialogs['raster'].rPanel.rasterSelect.GetValue() == self.mPanel.select.GetValue():
-                            self.mPanel.drawMap.SetValue(True)
+                        self.mPanel.drawMap.SetValue(True)
                     else:
                         self.mPanel.drawMap.SetValue(False)
             else:
                 if 'vector' in self.parent.openDialogs:
                     found = False
-                    for each in self.parent.openDialogs['vector'].vPanel.vectorList:
+                    for each in self.parent.openDialogs[
+                            'vector'].vPanel.vectorList:
                         if each[0] == self.mPanel.select.GetValue():
                             found = True
-                    self.mPanel.drawMap.SetValue(found)    
-                        
+                    self.mPanel.drawMap.SetValue(found)
+
+
 class MapFramePanel(wx.Panel):
     """wx.Panel with map (scale, region, border) settings"""
-    def __init__(self, parent, id, settings, rect, notebook = True):
-        wx.Panel.__init__(self, parent, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
+
+    def __init__(self, parent, id, settings, rect, notebook=True):
+        wx.Panel.__init__(self, parent, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
 
         self.id = id
         self.instruction = settings
-        
+
         if notebook:
             self.book = parent
-            self.book.AddPage(page = self, text = _("Map frame"))
+            self.book.AddPage(page=self, text=_("Map frame"))
             self.mapDialog = self.book.GetParent()
         else:
             self.mapDialog = parent
-            
+
         if self.id is not None:
-            self.mapFrameDict = self.instruction[self.id].GetInstruction() 
+            self.mapFrameDict = self.instruction[self.id].GetInstruction()
         else:
             self.id = wx.NewId()
             mapFrame = MapFrame(self.id)
             self.mapFrameDict = mapFrame.GetInstruction()
             self.mapFrameDict['rect'] = rect
 
-            
         self._layout()
 
-        self.scale = [None]*4
-        self.center = [None]*4
-        
-        
-        
+        self.scale = [None] * 4
+        self.center = [None] * 4
+
         self.selectedMap = self.mapFrameDict['map']
         self.selectedRegion = self.mapFrameDict['region']
         self.scaleType = self.mapFrameDict['scaleType']
@@ -656,203 +853,355 @@ class MapFramePanel(wx.Panel):
                 self.vectorTypeRadio.SetValue(True)
         elif self.mapFrameDict['scaleType'] == 1 and self.mapFrameDict['region']:
             self.select.SetValue(self.mapFrameDict['region'])
-        
-        
+
         self.OnMap(None)
         self.scale[self.mapFrameDict['scaleType']] = self.mapFrameDict['scale']
-        self.center[self.mapFrameDict['scaleType']] = self.mapFrameDict['center']
+        self.center[self.mapFrameDict['scaleType']
+                    ] = self.mapFrameDict['center']
         self.OnScaleChoice(None)
         self.OnElementType(None)
         self.OnBorder(None)
-        
-        
-        
+
     def _layout(self):
         """Do layout"""
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        box   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Map frame"))
-        sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
 
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Map frame"))
+        sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
-        #scale options
-        frameText = wx.StaticText(self, id = wx.ID_ANY, label = _("Map frame options:"))
+        # scale options
+        frameText = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("Map frame options:"))
         scaleChoices = [_("fit frame to match selected map"),
                         _("fit frame to match saved region"),
                         _("fit frame to match current computational region"),
                         _("fixed scale and map center")]
-        self.scaleChoice = wx.Choice(self, id = wx.ID_ANY, choices = scaleChoices)
-        
-        
-        gridBagSizer.Add(frameText, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.scaleChoice, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        #map and region selection
-        self.staticBox = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Map selection"))
+        self.scaleChoice = wx.Choice(self, id=wx.ID_ANY, choices=scaleChoices)
+
+        gridBagSizer.Add(
+            frameText, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.scaleChoice,
+            pos=(
+                1,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        # map and region selection
+        self.staticBox = wx.StaticBox(
+            parent=self, id=wx.ID_ANY, label=" %s " %
+            _("Map selection"))
         sizerM = wx.StaticBoxSizer(self.staticBox, wx.HORIZONTAL)
-        self.mapSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-
-        self.rasterTypeRadio = wx.RadioButton(self, id = wx.ID_ANY, label = " %s " % _("raster"), style = wx.RB_GROUP)
-        self.vectorTypeRadio = wx.RadioButton(self, id = wx.ID_ANY, label = " %s " % _("vector"))
-        self.drawMap = wx.CheckBox(self, id = wx.ID_ANY, label = "add selected map")
-        
-        self.mapOrRegionText = [_("Map:"), _("Region:")] 
-        dc = wx.ClientDC(self)# determine size of labels
-        width = max(dc.GetTextExtent(self.mapOrRegionText[0])[0], dc.GetTextExtent(self.mapOrRegionText[1])[0])
-        self.mapText = wx.StaticText(self, id = wx.ID_ANY, label = self.mapOrRegionText[0], size = (width, -1))
-        self.select = Select(self, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                             type = 'raster', multiple = False,
-                             updateOnPopup = True, onPopup = None)
-                            
-        self.mapSizer.Add(self.rasterTypeRadio, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.mapSizer.Add(self.vectorTypeRadio, pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.mapSizer.Add(self.drawMap, pos = (0, 3), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        self.mapSizer.Add(self.mapText, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.mapSizer.Add(self.select, pos = (1, 1), span = (1, 3), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-                 
-        sizerM.Add(self.mapSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        gridBagSizer.Add(sizerM, pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-
-        #map scale and center
-        boxC   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Map scale and center"))
+        self.mapSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.rasterTypeRadio = wx.RadioButton(
+            self, id=wx.ID_ANY, label=" %s " %
+            _("raster"), style=wx.RB_GROUP)
+        self.vectorTypeRadio = wx.RadioButton(
+            self, id=wx.ID_ANY, label=" %s " %
+            _("vector"))
+        self.drawMap = wx.CheckBox(
+            self, id=wx.ID_ANY, label="add selected map")
+
+        self.mapOrRegionText = [_("Map:"), _("Region:")]
+        dc = wx.ClientDC(self)  # determine size of labels
+        width = max(
+            dc.GetTextExtent(
+                self.mapOrRegionText[0])[0], dc.GetTextExtent(
+                self.mapOrRegionText[1])[0])
+        self.mapText = wx.StaticText(
+            self, id=wx.ID_ANY, label=self.mapOrRegionText[0],
+            size=(width, -1))
+        self.select = Select(
+            self,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            type='raster',
+            multiple=False,
+            updateOnPopup=True,
+            onPopup=None)
+
+        self.mapSizer.Add(
+            self.rasterTypeRadio, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.mapSizer.Add(
+            self.vectorTypeRadio, pos=(0, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.mapSizer.Add(
+            self.drawMap,
+            pos=(
+                0,
+                3),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        self.mapSizer.Add(
+            self.mapText, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.mapSizer.Add(
+            self.select, pos=(
+                1, 1), span=(
+                1, 3), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizerM.Add(
+            self.mapSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        gridBagSizer.Add(
+            sizerM,
+            pos=(
+                2,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        # map scale and center
+        boxC = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Map scale and center"))
         sizerC = wx.StaticBoxSizer(boxC, wx.HORIZONTAL)
-        self.centerSizer = wx.FlexGridSizer(rows = 2, cols = 5, hgap = 5, vgap = 5)        
-                
-                           
-        centerText = wx.StaticText(self, id = wx.ID_ANY, label = _("Center:"))
-        self.eastingText = wx.StaticText(self, id = wx.ID_ANY, label = _("E:"))
-        self.northingText = wx.StaticText(self, id = wx.ID_ANY, label = _("N:"))
-        self.eastingTextCtrl = wx.TextCtrl(self, id = wx.ID_ANY, style = wx.TE_RIGHT, validator = TCValidator(flag = 'DIGIT_ONLY'))
-        self.northingTextCtrl = wx.TextCtrl(self, id = wx.ID_ANY, style = wx.TE_RIGHT, validator = TCValidator(flag = 'DIGIT_ONLY'))
-        scaleText = wx.StaticText(self, id = wx.ID_ANY, label = _("Scale:"))
-        scalePrefixText = wx.StaticText(self, id = wx.ID_ANY, label = _("1 :"))
-        self.scaleTextCtrl = wx.TextCtrl(self, id = wx.ID_ANY, value = "", style = wx.TE_RIGHT, validator = TCValidator('DIGIT_ONLY'))
-        
-        self.centerSizer.Add(centerText, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, border = 10)
-        self.centerSizer.Add(self.eastingText, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        self.centerSizer.Add(self.eastingTextCtrl, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.centerSizer.Add(self.northingText, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        self.centerSizer.Add(self.northingTextCtrl, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        self.centerSizer.Add(scaleText, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.RIGHT, border = 10)
-        self.centerSizer.Add(scalePrefixText, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        self.centerSizer.Add(self.scaleTextCtrl, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        sizerC.Add(self.centerSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        gridBagSizer.Add(sizerC, pos = (3, 0), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        
-        #resolution
-        flexSizer = wx.FlexGridSizer(rows = 1, cols = 2, hgap = 5, vgap = 5)
-        
-        resolutionText = wx.StaticText(self, id = wx.ID_ANY, label = _("Map max resolution (dpi):"))
-        self.resolutionSpin = wx.SpinCtrl(self, id = wx.ID_ANY, min = 1, max = 1000, initial = 300)
-        
-        flexSizer.Add(resolutionText, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(self.resolutionSpin, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+        self.centerSizer = wx.FlexGridSizer(rows=2, cols=5, hgap=5, vgap=5)
+
+        centerText = wx.StaticText(self, id=wx.ID_ANY, label=_("Center:"))
+        self.eastingText = wx.StaticText(self, id=wx.ID_ANY, label=_("E:"))
+        self.northingText = wx.StaticText(self, id=wx.ID_ANY, label=_("N:"))
+        self.eastingTextCtrl = wx.TextCtrl(
+            self, id=wx.ID_ANY, style=wx.TE_RIGHT,
+            validator=TCValidator(flag='DIGIT_ONLY'))
+        self.northingTextCtrl = wx.TextCtrl(
+            self, id=wx.ID_ANY, style=wx.TE_RIGHT,
+            validator=TCValidator(flag='DIGIT_ONLY'))
+        scaleText = wx.StaticText(self, id=wx.ID_ANY, label=_("Scale:"))
+        scalePrefixText = wx.StaticText(self, id=wx.ID_ANY, label=_("1 :"))
+        self.scaleTextCtrl = wx.TextCtrl(
+            self, id=wx.ID_ANY, value="", style=wx.TE_RIGHT,
+            validator=TCValidator('DIGIT_ONLY'))
+
+        self.centerSizer.Add(
+            centerText,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
+            border=10)
+        self.centerSizer.Add(
+            self.eastingText,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        self.centerSizer.Add(
+            self.eastingTextCtrl,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        self.centerSizer.Add(
+            self.northingText,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        self.centerSizer.Add(
+            self.northingTextCtrl,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+
+        self.centerSizer.Add(
+            scaleText,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT,
+            border=10)
+        self.centerSizer.Add(
+            scalePrefixText,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        self.centerSizer.Add(
+            self.scaleTextCtrl,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+
+        sizerC.Add(
+            self.centerSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        gridBagSizer.Add(
+            sizerC,
+            pos=(
+                3,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        # resolution
+        flexSizer = wx.FlexGridSizer(rows=1, cols=2, hgap=5, vgap=5)
+
+        resolutionText = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("Map max resolution (dpi):"))
+        self.resolutionSpin = wx.SpinCtrl(
+            self, id=wx.ID_ANY, min=1, max=1000, initial=300)
+
+        flexSizer.Add(
+            resolutionText,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            self.resolutionSpin,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
         self.resolutionSpin.SetValue(self.mapFrameDict['resolution'])
-        
-        gridBagSizer.Add(flexSizer, pos = (4, 0), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        gridBagSizer.Add(
+            flexSizer,
+            pos=(
+                4,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # border
         # GTC Line around legend or map frame
-        box   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Border"))        
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Border"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        self.borderCheck = wx.CheckBox(self, id = wx.ID_ANY, label = (_("draw border around map frame")))
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.borderCheck = wx.CheckBox(
+            self, id=wx.ID_ANY, label=(
+                _("draw border around map frame")))
         if self.mapFrameDict['border'] == 'y':
             self.borderCheck.SetValue(True)
-        else: 
+        else:
             self.borderCheck.SetValue(False)
-        
-        self.borderColorText = wx.StaticText(self, id = wx.ID_ANY, label = _("border color:"))
-        self.borderWidthText = wx.StaticText(self, id = wx.ID_ANY, label = _("border width (pts):"))
-        self.borderColourPicker = wx.ColourPickerCtrl(self, id = wx.ID_ANY)
-        self.borderWidthCtrl = wx.SpinCtrl(self, id = wx.ID_ANY, min = 1, max = 100, initial = 1)
-        
+
+        self.borderColorText = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("border color:"))
+        self.borderWidthText = wx.StaticText(
+            self, id=wx.ID_ANY, label=_("border width (pts):"))
+        self.borderColourPicker = wx.ColourPickerCtrl(self, id=wx.ID_ANY)
+        self.borderWidthCtrl = wx.SpinCtrl(
+            self, id=wx.ID_ANY, min=1, max=100, initial=1)
+
         if self.mapFrameDict['border'] == 'y':
             self.borderWidthCtrl.SetValue(int(self.mapFrameDict['width']))
-            self.borderColourPicker.SetColour(convertRGB(self.mapFrameDict['color']))
-        
-        
-        gridBagSizer.Add(self.borderCheck, pos = (0, 0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.borderColorText, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.borderWidthText, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.borderColourPicker, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.borderWidthCtrl, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+            self.borderColourPicker.SetColour(
+                convertRGB(self.mapFrameDict['color']))
+
+        gridBagSizer.Add(
+            self.borderCheck, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            self.borderColorText, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.borderWidthText, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.borderColourPicker,
+            pos=(
+                1,
+                2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            self.borderWidthCtrl,
+            pos=(
+                2,
+                2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.SetSizer(border)
         self.Fit()
-        
-        
+
         if projInfo()['proj'] == 'll':
             self.scaleChoice.SetItems(self.scaleChoice.GetItems()[0:3])
             boxC.Hide()
             for each in self.centerSizer.GetChildren():
                 each.GetWindow().Hide()
 
-            
         # bindings
         self.scaleChoice.Bind(wx.EVT_CHOICE, self.OnScaleChoice)
         self.select.GetTextCtrl().Bind(wx.EVT_TEXT, self.OnMap)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnElementType, self.vectorTypeRadio)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnElementType, self.rasterTypeRadio)
         self.Bind(wx.EVT_CHECKBOX, self.OnBorder, self.borderCheck)
-        
-        
-     
+
     def OnMap(self, event):
         """Selected map or region changing"""
-        
+
         if self.select.GetValue():
-            self.selected = self.select.GetValue() 
+            self.selected = self.select.GetValue()
         else:
             self.selected = None
 
         if self.scaleChoice.GetSelection() == 0:
             self.selectedMap = self.selected
             if self.rasterTypeRadio.GetValue():
-                mapType = 'raster' 
+                mapType = 'raster'
             else:
                 mapType = 'vector'
 
-            self.scale[0], self.center[0], foo = AutoAdjust(self, scaleType = 0, map = self.selected,
-                                                mapType = mapType, rect = self.mapFrameDict['rect'])
+            self.scale[0], self.center[0], foo = AutoAdjust(
+                self, scaleType=0, map=self.selected, mapType=mapType,
+                rect=self.mapFrameDict['rect'])
             #self.center[0] = self.RegionCenter(self.RegionDict(scaleType = 0))
 
         elif self.scaleChoice.GetSelection() == 1:
             self.selectedRegion = self.selected
-            self.scale[1], self.center[1],  foo = AutoAdjust(self, scaleType = 1, region = self.selected, rect = self.mapFrameDict['rect'])
+            self.scale[1], self.center[1], foo = AutoAdjust(
+                self, scaleType=1, region=self.selected,
+                rect=self.mapFrameDict['rect'])
             #self.center[1] = self.RegionCenter(self.RegionDict(scaleType = 1))
         elif self.scaleChoice.GetSelection() == 2:
-            self.scale[2], self.center[2], foo = AutoAdjust(self, scaleType = 2, rect = self.mapFrameDict['rect'])
+            self.scale[2], self.center[2], foo = AutoAdjust(
+                self, scaleType=2, rect=self.mapFrameDict['rect'])
             #self.center[2] = self.RegionCenter(self.RegionDict(scaleType = 2))
-            
+
         else:
-            self.scale[3] = None        
+            self.scale[3] = None
             self.center[3] = None
-            
+
         self.OnScaleChoice(None)
-        
-            
+
     def OnScaleChoice(self, event):
         """Selected scale type changing"""
-        
+
         scaleType = self.scaleChoice.GetSelection()
         if self.scaleType != scaleType:
             self.scaleType = scaleType
             self.select.SetValue("")
-        
-        if scaleType in (0, 1): # automatic - region from raster map, saved region
+
+        if scaleType in (
+                0, 1):  # automatic - region from raster map, saved region
             if scaleType == 0:
                 # set map selection
                 self.rasterTypeRadio.Show()
@@ -860,14 +1209,15 @@ class MapFramePanel(wx.Panel):
                 self.drawMap.Show()
                 self.staticBox.SetLabel(" %s " % _("Map selection"))
                 if self.rasterTypeRadio.GetValue():
-                    stype = 'raster' 
+                    stype = 'raster'
                 else:
                     stype = 'vector'
 
-                self.select.SetElementList(type = stype)
+                self.select.SetElementList(type=stype)
                 self.mapText.SetLabel(self.mapOrRegionText[0])
-                self.select.SetToolTipString(_("Region is set to match this map,\nraster or vector map must be added later"))
-                    
+                self.select.SetToolTipString(
+                    _("Region is set to match this map,\nraster or vector map must be added later"))
+
             if scaleType == 1:
                 # set region selection
                 self.rasterTypeRadio.Hide()
@@ -875,7 +1225,7 @@ class MapFramePanel(wx.Panel):
                 self.drawMap.Hide()
                 self.staticBox.SetLabel(" %s " % _("Region selection"))
                 stype = 'region'
-                self.select.SetElementList(type = stype)
+                self.select.SetElementList(type=stype)
                 self.mapText.SetLabel(self.mapOrRegionText[1])
                 self.select.SetToolTipString("")
 
@@ -883,10 +1233,11 @@ class MapFramePanel(wx.Panel):
                 each.GetWindow().Enable()
             for each in self.centerSizer.GetChildren():
                 each.GetWindow().Disable()
-                    
+
             if self.scale[scaleType]:
-                
-                self.scaleTextCtrl.SetValue("%.0f" % (1/self.scale[scaleType]))
+
+                self.scaleTextCtrl.SetValue(
+                    "%.0f" % (1 / self.scale[scaleType]))
             if self.center[scaleType]:
                 self.eastingTextCtrl.SetValue(str(self.center[scaleType][0]))
                 self.northingTextCtrl.SetValue(str(self.center[scaleType][1]))
@@ -895,69 +1246,77 @@ class MapFramePanel(wx.Panel):
                 each.GetWindow().Disable()
             for each in self.centerSizer.GetChildren():
                 each.GetWindow().Disable()
-                
+
             if self.scale[scaleType]:
-                self.scaleTextCtrl.SetValue("%.0f" % (1/self.scale[scaleType]))
+                self.scaleTextCtrl.SetValue(
+                    "%.0f" % (1 / self.scale[scaleType]))
             if self.center[scaleType]:
                 self.eastingTextCtrl.SetValue(str(self.center[scaleType][0]))
                 self.northingTextCtrl.SetValue(str(self.center[scaleType][1]))
-        else: # fixed
+        else:  # fixed
             for each in self.mapSizer.GetChildren():
                 each.GetWindow().Disable()
             for each in self.centerSizer.GetChildren():
                 each.GetWindow().Enable()
-                    
+
             if self.scale[scaleType]:
-                self.scaleTextCtrl.SetValue("%.0f" % (1/self.scale[scaleType]))
+                self.scaleTextCtrl.SetValue(
+                    "%.0f" % (1 / self.scale[scaleType]))
             if self.center[scaleType]:
                 self.eastingTextCtrl.SetValue(str(self.center[scaleType][0]))
                 self.northingTextCtrl.SetValue(str(self.center[scaleType][1]))
-                
+
     def OnElementType(self, event):
         """Changes data in map selection tree ctrl popup"""
         if self.rasterTypeRadio.GetValue():
             mapType = 'raster'
         else:
             mapType = 'vector'
-        self.select.SetElementList(type  = mapType)
+        self.select.SetElementList(type=mapType)
         if self.mapType != mapType and event is not None:
             self.mapType = mapType
             self.select.SetValue('')
-        self.mapType = mapType    
-        
+        self.mapType = mapType
+
     def OnBorder(self, event):
         """Enables/disable the part relating to border of map frame"""
-        for each in (self.borderColorText, self.borderWidthText, self.borderColourPicker, self.borderWidthCtrl):
+        for each in (self.borderColorText, self.borderWidthText,
+                     self.borderColourPicker, self.borderWidthCtrl):
             each.Enable(self.borderCheck.GetValue())
-            
+
     def getId(self):
         """Returns id of raster map"""
         return self.id
-            
+
     def update(self):
         """Save changes"""
         mapFrameDict = dict(self.mapFrameDict)
         # resolution
         mapFrameDict['resolution'] = self.resolutionSpin.GetValue()
-        #scale
+        # scale
         scaleType = self.scaleType
         mapFrameDict['scaleType'] = scaleType
-        
+
         if mapFrameDict['scaleType'] == 0:
             if self.select.GetValue():
                 mapFrameDict['drawMap'] = self.drawMap.GetValue()
                 mapFrameDict['map'] = self.select.GetValue()
                 mapFrameDict['mapType'] = self.mapType
                 mapFrameDict['region'] = None
-                
+
                 if mapFrameDict['drawMap']:
 
                     if mapFrameDict['mapType'] == 'raster':
-                        mapFile = grass.find_file(mapFrameDict['map'], element = 'cell')
+                        mapFile = grass.find_file(
+                            mapFrameDict['map'],
+                            element='cell')
                         if mapFile['file'] == '':
-                            GMessage("Raster %s not found" % mapFrameDict['map'])
+                            GMessage(
+                                "Raster %s not found" %
+                                mapFrameDict['map'])
                             return False
-                        raster = self.instruction.FindInstructionByType('raster')
+                        raster = self.instruction.FindInstructionByType(
+                            'raster')
                         if raster:
                             raster['raster'] = mapFrameDict['map']
                         else:
@@ -967,20 +1326,26 @@ class MapFramePanel(wx.Panel):
                             self.instruction.AddInstruction(raster)
 
                     elif mapFrameDict['mapType'] == 'vector':
-                        
-                        mapFile = grass.find_file(mapFrameDict['map'], element = 'vector')
+
+                        mapFile = grass.find_file(
+                            mapFrameDict['map'],
+                            element='vector')
                         if mapFile['file'] == '':
-                            GMessage("Vector %s not found" % mapFrameDict['map'])
+                            GMessage(
+                                "Vector %s not found" %
+                                mapFrameDict['map'])
                             return False
-                        
-                        vector = self.instruction.FindInstructionByType('vector')
+
+                        vector = self.instruction.FindInstructionByType(
+                            'vector')
                         isAdded = False
                         if vector:
                             for each in vector['list']:
                                 if each[0] == mapFrameDict['map']:
                                     isAdded = True
                         if not isAdded:
-                            topoInfo = grass.vector_info_topo(map = mapFrameDict['map'])
+                            topoInfo = grass.vector_info_topo(
+                                map=mapFrameDict['map'])
                             if topoInfo:
                                 if bool(topoInfo['areas']):
                                     topoType = 'areas'
@@ -988,104 +1353,119 @@ class MapFramePanel(wx.Panel):
                                     topoType = 'lines'
                                 else:
                                     topoType = 'points'
-                                label = '('.join(mapFrameDict['map'].split('@')) + ')'
-                           
+                                label = '('.join(
+                                    mapFrameDict['map'].split('@')) + ')'
+
                                 if not vector:
                                     vector = Vector(wx.NewId())
                                     vector['list'] = []
                                     self.instruction.AddInstruction(vector)
                                 id = wx.NewId()
-                                vector['list'].insert(0, [mapFrameDict['map'], topoType, id, 1, label])
+                                vector['list'].insert(
+                                    0, [mapFrameDict['map'], topoType, id, 1, label])
                                 vProp = VProperties(id, topoType)
-                                vProp['name'], vProp['label'], vProp['lpos'] = mapFrameDict['map'], label, 1
+                                vProp['name'], vProp['label'], vProp[
+                                    'lpos'] = mapFrameDict['map'], label, 1
                                 self.instruction.AddInstruction(vProp)
                             else:
                                 return False
-                            
-                self.scale[0], self.center[0], self.rectAdjusted = AutoAdjust(self, scaleType = 0, map = mapFrameDict['map'],
-                                                                   mapType = self.mapType, rect = self.mapFrameDict['rect'])
-                                               
+
+                self.scale[0], self.center[0], self.rectAdjusted = AutoAdjust(
+                    self, scaleType=0, map=mapFrameDict['map'],
+                    mapType=self.mapType, rect=self.mapFrameDict['rect'])
+
                 if self.rectAdjusted:
-                    mapFrameDict['rect'] = self.rectAdjusted 
+                    mapFrameDict['rect'] = self.rectAdjusted
                 else:
                     mapFrameDict['rect'] = self.mapFrameDict['rect']
 
                 mapFrameDict['scale'] = self.scale[0]
-                
+
                 mapFrameDict['center'] = self.center[0]
                 # set region
                 if self.mapType == 'raster':
-                    RunCommand('g.region', raster = mapFrameDict['map'])
+                    RunCommand('g.region', raster=mapFrameDict['map'])
                 if self.mapType == 'vector':
                     raster = self.instruction.FindInstructionByType('raster')
                     if raster:
-                        rasterId = raster.id 
+                        rasterId = raster.id
                     else:
                         rasterId = None
 
                     if rasterId:
-                        
-                        RunCommand('g.region', vector = mapFrameDict['map'], raster = self.instruction[rasterId]['raster'])
+
+                        RunCommand(
+                            'g.region',
+                            vector=mapFrameDict['map'],
+                            raster=self.instruction[rasterId]['raster'])
                     else:
-                        RunCommand('g.region', vector = mapFrameDict['map'])
-                
-                    
-                
+                        RunCommand('g.region', vector=mapFrameDict['map'])
+
             else:
-                wx.MessageBox(message = _("No map selected!"),
-                                    caption = _('Invalid input'), style = wx.OK|wx.ICON_ERROR)
-                return False    
-            
+                wx.MessageBox(
+                    message=_("No map selected!"),
+                    caption=_('Invalid input'),
+                    style=wx.OK | wx.ICON_ERROR)
+                return False
+
         elif mapFrameDict['scaleType'] == 1:
             if self.select.GetValue():
                 mapFrameDict['drawMap'] = False
                 mapFrameDict['map'] = None
                 mapFrameDict['mapType'] = None
                 mapFrameDict['region'] = self.select.GetValue()
-                self.scale[1], self.center[1], self.rectAdjusted = AutoAdjust(self, scaleType = 1, region = mapFrameDict['region'],
-                                                                                rect = self.mapFrameDict['rect'])
+                self.scale[1], self.center[1], self.rectAdjusted = AutoAdjust(
+                    self, scaleType=1, region=mapFrameDict['region'], rect=self.mapFrameDict['rect'])
                 if self.rectAdjusted:
-                    mapFrameDict['rect'] = self.rectAdjusted 
+                    mapFrameDict['rect'] = self.rectAdjusted
                 else:
                     mapFrameDict['rect'] = self.mapFrameDict['rect']
 
                 mapFrameDict['scale'] = self.scale[1]
                 mapFrameDict['center'] = self.center[1]
                 # set region
-                RunCommand('g.region', region = mapFrameDict['region'])
+                RunCommand('g.region', region=mapFrameDict['region'])
             else:
-                wx.MessageBox(message = _("No region selected!"),
-                                    caption = _('Invalid input'), style = wx.OK|wx.ICON_ERROR)
-                return False 
-                               
+                wx.MessageBox(
+                    message=_("No region selected!"),
+                    caption=_('Invalid input'),
+                    style=wx.OK | wx.ICON_ERROR)
+                return False
+
         elif scaleType == 2:
             mapFrameDict['drawMap'] = False
             mapFrameDict['map'] = None
             mapFrameDict['mapType'] = None
             mapFrameDict['region'] = None
-            self.scale[2], self.center[2], self.rectAdjusted = AutoAdjust(self, scaleType = 2, rect = self.mapFrameDict['rect'])
+            self.scale[2], self.center[2], self.rectAdjusted = AutoAdjust(
+                self, scaleType=2, rect=self.mapFrameDict['rect'])
             if self.rectAdjusted:
-                mapFrameDict['rect'] = self.rectAdjusted 
+                mapFrameDict['rect'] = self.rectAdjusted
             else:
                 mapFrameDict['rect'] = self.mapFrameDict['rect']
 
             mapFrameDict['scale'] = self.scale[2]
             mapFrameDict['center'] = self.center[2]
             region = grass.region()
-            
+
             raster = self.instruction.FindInstructionByType('raster')
             if raster:
-                rasterId = raster.id 
+                rasterId = raster.id
             else:
                 rasterId = None
 
-            if rasterId: # because of resolution
-                RunCommand('g.region', n=region['n'], s=region['s'],
-                            e=region['e'], w=region['w'], rast=self.instruction[rasterId]['raster'])
+            if rasterId:  # because of resolution
+                RunCommand(
+                    'g.region',
+                    n=region['n'],
+                    s=region['s'],
+                    e=region['e'],
+                    w=region['w'],
+                    rast=self.instruction[rasterId]['raster'])
             else:
                 RunCommand('g.region', n=region['n'], s=region['s'],
                            e=region['e'], w=region['w'])
-            
+
         elif scaleType == 3:
             mapFrameDict['drawMap'] = False
             mapFrameDict['map'] = None
@@ -1094,48 +1474,56 @@ class MapFramePanel(wx.Panel):
             mapFrameDict['rect'] = self.mapFrameDict['rect']
             try:
                 scaleNumber = float(self.scaleTextCtrl.GetValue())
-                centerE = float(self.eastingTextCtrl.GetValue()) 
+                centerE = float(self.eastingTextCtrl.GetValue())
                 centerN = float(self.northingTextCtrl.GetValue())
             except (ValueError, SyntaxError):
-                wx.MessageBox(message = _("Invalid scale or map center!"),
-                                    caption = _('Invalid input'), style = wx.OK|wx.ICON_ERROR)
-                return False  
-            mapFrameDict['scale'] = 1/scaleNumber
+                wx.MessageBox(
+                    message=_("Invalid scale or map center!"),
+                    caption=_('Invalid input'),
+                    style=wx.OK | wx.ICON_ERROR)
+                return False
+            mapFrameDict['scale'] = 1 / scaleNumber
             mapFrameDict['center'] = centerE, centerN
-        
-            ComputeSetRegion(self, mapDict = mapFrameDict)
-        
+
+            ComputeSetRegion(self, mapDict=mapFrameDict)
+
         # check resolution
-        SetResolution(dpi = mapFrameDict['resolution'], width = mapFrameDict['rect'].width,
-                                                        height = mapFrameDict['rect'].height)
+        SetResolution(
+            dpi=mapFrameDict['resolution'],
+            width=mapFrameDict['rect'].width,
+            height=mapFrameDict['rect'].height)
         # border
         if self.borderCheck.GetValue():
-            mapFrameDict['border'] = 'y' 
+            mapFrameDict['border'] = 'y'
         else:
             mapFrameDict['border'] = 'n'
 
         if mapFrameDict['border'] == 'y':
             mapFrameDict['width'] = self.borderWidthCtrl.GetValue()
-            mapFrameDict['color'] = convertRGB(self.borderColourPicker.GetColour())
-            
+            mapFrameDict['color'] = convertRGB(
+                self.borderColourPicker.GetColour())
+
         if self.id not in self.instruction:
             mapFrame = MapFrame(self.id)
             self.instruction.AddInstruction(mapFrame)
         self.instruction[self.id].SetInstruction(mapFrameDict)
 
         if self.id not in self.mapDialog.parent.objectId:
-            self.mapDialog.parent.objectId.insert(0, self.id)# map frame is drawn first
+            self.mapDialog.parent.objectId.insert(
+                0, self.id)  # map frame is drawn first
         return True
-        
+
+
 class RasterPanel(wx.Panel):
     """Panel for raster map settings"""
-    def __init__(self, parent, id, settings,  notebook = True):
-        wx.Panel.__init__(self, parent, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
+
+    def __init__(self, parent, id, settings, notebook=True):
+        wx.Panel.__init__(self, parent, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
         self.instruction = settings
-        
+
         if notebook:
             self.book = parent
-            self.book.AddPage(page = self, text = _("Raster map"))
+            self.book.AddPage(page=self, text=_("Raster map"))
             self.mainDialog = self.book.GetParent()
         else:
             self.mainDialog = parent
@@ -1146,27 +1534,38 @@ class RasterPanel(wx.Panel):
             self.id = wx.NewId()
             raster = Raster(self.id)
             self.rasterDict = raster.GetInstruction()
-            
-            
+
         self._layout()
         self.OnRaster(None)
-            
+
     def _layout(self):
         """Do layout"""
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         # choose raster map
-        
-        box   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Choose raster map"))
+
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Choose raster map"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        self.rasterNoRadio = wx.RadioButton(self, id = wx.ID_ANY, label = _("no raster map"), style = wx.RB_GROUP)
-        self.rasterYesRadio = wx.RadioButton(self, id = wx.ID_ANY, label = _("raster:"))
-        
-        self.rasterSelect = Select(self, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                             type = 'raster', multiple = False,
-                             updateOnPopup = True, onPopup = None)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.rasterNoRadio = wx.RadioButton(
+            self, id=wx.ID_ANY, label=_("no raster map"),
+            style=wx.RB_GROUP)
+        self.rasterYesRadio = wx.RadioButton(
+            self, id=wx.ID_ANY, label=_("raster:"))
+
+        self.rasterSelect = Select(
+            self,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            type='raster',
+            multiple=False,
+            updateOnPopup=True,
+            onPopup=None)
         if self.rasterDict['isRaster']:
             self.rasterYesRadio.SetValue(True)
             self.rasterNoRadio.SetValue(False)
@@ -1176,35 +1575,52 @@ class RasterPanel(wx.Panel):
             self.rasterNoRadio.SetValue(True)
             mapId = self.instruction.FindInstructionByType('map').id
 
-            if self.instruction[mapId]['map'] and self.instruction[mapId]['mapType'] == 'raster':
-                self.rasterSelect.SetValue(self.instruction[mapId]['map'])# raster map from map frame dialog if possible
+            if self.instruction[mapId]['map'] and self.instruction[
+                    mapId]['mapType'] == 'raster':
+                # raster map from map frame dialog if possible
+                self.rasterSelect.SetValue(self.instruction[mapId]['map'])
             else:
-                self.rasterSelect.SetValue('')                
-        gridBagSizer.Add(self.rasterNoRadio, pos = (0, 0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)            
-        gridBagSizer.Add(self.rasterYesRadio, pos = (1, 0),  flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.rasterSelect, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+                self.rasterSelect.SetValue('')
+        gridBagSizer.Add(
+            self.rasterNoRadio, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.rasterYesRadio, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.rasterSelect,
+            pos=(
+                1,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         #self.rasterSelect.GetTextCtrl().Bind(wx.EVT_TEXT, self.OnRaster)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnRaster, self.rasterNoRadio)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnRaster, self.rasterYesRadio)
-        
+
         self.SetSizer(border)
         self.Fit()
-        
+
     def OnRaster(self, event):
         """Enable/disable raster selection"""
         self.rasterSelect.Enable(self.rasterYesRadio.GetValue())
-        
+
     def update(self):
-        #draw raster
+        # draw raster
         mapInstr = self.instruction.FindInstructionByType('map')
-        if not mapInstr: # no map frame
-            GMessage(message = _("Please, create map frame first."))
+        if not mapInstr:  # no map frame
+            GMessage(message=_("Please, create map frame first."))
             return
-            
+
         if self.rasterNoRadio.GetValue() or not self.rasterSelect.GetValue():
             self.rasterDict['isRaster'] = False
             self.rasterDict['raster'] = None
@@ -1225,26 +1641,30 @@ class RasterPanel(wx.Panel):
                 self.instruction[self.id].SetInstruction(self.rasterDict)
             else:
                 self.instruction[raster.id].SetInstruction(self.rasterDict)
-            
+
         if 'map' in self.mainDialog.parent.openDialogs:
             self.mainDialog.parent.openDialogs['map'].updateDialog()
         return True
-        
+
     def getId(self):
         return self.id
-  
+
+
 class VectorPanel(wx.Panel):
     """Panel for vector maps settings"""
-    def __init__(self, parent, id, settings, notebook = True):
-        wx.Panel.__init__(self, parent, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
-        
+
+    def __init__(self, parent, id, settings, notebook=True):
+        wx.Panel.__init__(self, parent, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
+
         self.parent = parent
         self.instruction = settings
         self.tmpDialogDict = {}
-        vectors = self.instruction.FindInstructionByType('vProperties', list = True)
+        vectors = self.instruction.FindInstructionByType(
+            'vProperties', list=True)
         for vector in vectors:
-            self.tmpDialogDict[vector.id] = dict(self.instruction[vector.id].GetInstruction())
-        
+            self.tmpDialogDict[vector.id] = dict(
+                self.instruction[vector.id].GetInstruction())
+
         if id:
             self.id = id
             self.vectorList = deepcopy(self.instruction[id]['list'])
@@ -1254,107 +1674,168 @@ class VectorPanel(wx.Panel):
 
         vLegend = self.instruction.FindInstructionByType('vectorLegend')
         if vLegend:
-            self.vLegendId = vLegend.id 
+            self.vLegendId = vLegend.id
         else:
             self.vLegendId = None
 
-         
         self._layout()
-        
+
         if notebook:
-            self.parent.AddPage(page = self, text = _("Vector maps"))
+            self.parent.AddPage(page=self, text=_("Vector maps"))
             self.parent = self.parent.GetParent()
-            
+
     def _layout(self):
         """Do layout"""
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         # choose vector map
-        
-        box   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Add map"))
+
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Add map"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        text = wx.StaticText(self, id = wx.ID_ANY, label = _("Map:"))
-        self.select = Select(self, id = wx.ID_ANY,# size = globalvar.DIALOG_GSELECT_SIZE,
-                             type = 'vector', multiple = False,
-                             updateOnPopup = True, onPopup = None)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        text = wx.StaticText(self, id=wx.ID_ANY, label=_("Map:"))
+        self.select = Select(self, id=wx.ID_ANY,  # size = globalvar.DIALOG_GSELECT_SIZE,
+                             type='vector', multiple=False,
+                             updateOnPopup=True, onPopup=None)
         topologyTypeTr = [_("points"), _("lines"), _("areas")]
         self.topologyTypeList = ["points", "lines", "areas"]
-        self.vectorType = wx.RadioBox(self, id = wx.ID_ANY, label = " %s " % _("Data Type"), choices = topologyTypeTr,
-                                      majorDimension = 3, style = wx.RA_SPECIFY_COLS)
-            
-        self.AddVector = wx.Button(self, id = wx.ID_ANY, label = _("Add"))
-        
-        gridBagSizer.Add(text, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.select, pos = (0,1), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.vectorType, pos = (1,1), flag = wx.ALIGN_CENTER, border = 0)
-        gridBagSizer.Add(self.AddVector, pos = (1,2), flag = wx.ALIGN_BOTTOM|wx.ALIGN_RIGHT, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        self.vectorType = wx.RadioBox(
+            self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Data Type"),
+            choices=topologyTypeTr,
+            majorDimension=3,
+            style=wx.RA_SPECIFY_COLS)
+
+        self.AddVector = wx.Button(self, id=wx.ID_ANY, label=_("Add"))
+
+        gridBagSizer.Add(
+            text, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.select, pos=(
+                0, 1), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.vectorType, pos=(1, 1),
+            flag=wx.ALIGN_CENTER, border=0)
+        gridBagSizer.Add(
+            self.AddVector, pos=(1, 2),
+            flag=wx.ALIGN_BOTTOM | wx.ALIGN_RIGHT, border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # manage vector layers
-        
-        box   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Manage vector maps"))
+
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Manage vector maps"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-
-        
-        
-        text = wx.StaticText(self, id = wx.ID_ANY, label = _("The topmost vector map overlaps the others"))
-        self.listbox = wx.ListBox(self, id = wx.ID_ANY, choices = [], style = wx.LB_SINGLE|wx.LB_NEEDED_SB)
-        self.btnUp = wx.Button(self, id = wx.ID_ANY, label = _("Up"))
-        self.btnDown = wx.Button(self, id = wx.ID_ANY, label = _("Down"))
-        self.btnDel = wx.Button(self, id = wx.ID_ANY, label = _("Delete"))
-        self.btnProp = wx.Button(self, id = wx.ID_ANY, label = _("Properties..."))
-        
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        text = wx.StaticText(self, id=wx.ID_ANY, label=_(
+            "The topmost vector map overlaps the others"))
+        self.listbox = wx.ListBox(
+            self, id=wx.ID_ANY, choices=[],
+            style=wx.LB_SINGLE | wx.LB_NEEDED_SB)
+        self.btnUp = wx.Button(self, id=wx.ID_ANY, label=_("Up"))
+        self.btnDown = wx.Button(self, id=wx.ID_ANY, label=_("Down"))
+        self.btnDel = wx.Button(self, id=wx.ID_ANY, label=_("Delete"))
+        self.btnProp = wx.Button(self, id=wx.ID_ANY, label=_("Properties..."))
+
         self.updateListBox(selected=0)
-        
-        
-        gridBagSizer.Add(text, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.listbox, pos = (1,0), span = (4, 1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.btnUp, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.btnDown, pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.btnDel, pos = (3,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.btnProp, pos = (4,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        gridBagSizer.AddGrowableCol(0,2)
-        gridBagSizer.AddGrowableCol(1,1)
-        sizer.Add(gridBagSizer, proportion = 0, flag = wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        gridBagSizer.Add(
+            text, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.listbox, pos=(
+                1, 0), span=(
+                4, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            self.btnUp,
+            pos=(
+                1,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            self.btnDown,
+            pos=(
+                2,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            self.btnDel,
+            pos=(
+                3,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            self.btnProp,
+            pos=(
+                4,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        gridBagSizer.AddGrowableCol(0, 2)
+        gridBagSizer.AddGrowableCol(1, 1)
+        sizer.Add(gridBagSizer, proportion=0, flag=wx.ALL, border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_BUTTON, self.OnAddVector, self.AddVector)
         self.Bind(wx.EVT_BUTTON, self.OnDelete, self.btnDel)
         self.Bind(wx.EVT_BUTTON, self.OnUp, self.btnUp)
         self.Bind(wx.EVT_BUTTON, self.OnDown, self.btnDown)
         self.Bind(wx.EVT_BUTTON, self.OnProperties, self.btnProp)
         self.select.GetTextCtrl().Bind(wx.EVT_TEXT, self.OnVector)
-        
+
         self.SetSizer(border)
         self.Fit()
-        
+
         self.Bind(wx.EVT_LISTBOX_DCLICK, self.OnProperties, self.listbox)
 
     def OnVector(self, event):
         """Gets info about toplogy and enables/disables choices point/line/area"""
-        vmap = self.select.GetValue()   
-        try:     
-            topoInfo = grass.vector_info_topo(map = vmap)
+        vmap = self.select.GetValue()
+        try:
+            topoInfo = grass.vector_info_topo(map=vmap)
         except grass.ScriptError:
             return
-        
+
         if topoInfo:
             self.vectorType.EnableItem(2, bool(topoInfo['areas']))
-            self.vectorType.EnableItem(1, bool(topoInfo['boundaries']) or bool(topoInfo['lines']))
-            self.vectorType.EnableItem(0, bool(topoInfo['centroids'] or bool(topoInfo['points']) ))
-            for item in range(2,-1,-1):
+            self.vectorType.EnableItem(
+                1, bool(
+                    topoInfo['boundaries']) or bool(
+                    topoInfo['lines']))
+            self.vectorType.EnableItem(
+                0, bool(
+                    topoInfo['centroids'] or bool(
+                        topoInfo['points'])))
+            for item in range(2, -1, -1):
                 if self.vectorType.IsItemEnabled(item):
                     self.vectorType.SetSelection(item)
                     break
-            
-            self.AddVector.SetFocus()        
-            
+
+            self.AddVector.SetFocus()
+
     def OnAddVector(self, event):
         """Adds vector map to list"""
         vmap = self.select.GetValue()
@@ -1369,21 +1850,20 @@ class VectorPanel(wx.Panel):
             record = "%s - %s" % (vmap, ttype)
             id = wx.NewId()
             lpos = 1
-            label = mapname + mapset 
+            label = mapname + mapset
             self.vectorList.insert(0, [vmap, ttype, id, lpos, label])
             self.reposition()
             self.listbox.InsertItems([record], 0)
-            
+
             vector = VProperties(id, ttype)
             self.tmpDialogDict[id] = vector.GetInstruction()
             self.tmpDialogDict[id]['name'] = vmap
 
-            
-            self.listbox.SetSelection(0)  
+            self.listbox.SetSelection(0)
             self.listbox.EnsureVisible(0)
             self.btnProp.SetFocus()
             self.enableButtons()
-            
+
     def OnDelete(self, event):
         """Deletes vector map from the list"""
         if self.listbox.GetSelections():
@@ -1391,20 +1871,19 @@ class VectorPanel(wx.Panel):
             id = self.vectorList[pos][2]
             del self.vectorList[pos]
             del self.tmpDialogDict[id]
-            
+
             for i in range(pos, len(self.vectorList)):
-                if self.vectorList[i][3]:# can be 0
+                if self.vectorList[i][3]:  # can be 0
                     self.vectorList[i][3] -= 1
-            
-            if pos < len(self.vectorList) -1:
+
+            if pos < len(self.vectorList) - 1:
                 selected = pos
             else:
-                selected = len(self.vectorList) -1
-            self.updateListBox(selected = selected)
+                selected = len(self.vectorList) - 1
+            self.updateListBox(selected=selected)
             if self.listbox.IsEmpty():
                 self.enableButtons(False)
-            
-            
+
     def OnUp(self, event):
         """Moves selected map to top"""
         if self.listbox.GetSelections():
@@ -1413,13 +1892,12 @@ class VectorPanel(wx.Panel):
                 self.vectorList.insert(pos - 1, self.vectorList.pop(pos))
             if not self.vLegendId:
                 self.reposition()
-                
+
             if pos > 0:
-                self.updateListBox(selected = (pos - 1)) 
+                self.updateListBox(selected=(pos - 1))
             else:
-                self.updateListBox(selected = 0)
+                self.updateListBox(selected=0)
 
-            
     def OnDown(self, event):
         """Moves selected map to bottom"""
         if self.listbox.GetSelections():
@@ -1428,32 +1906,35 @@ class VectorPanel(wx.Panel):
                 self.vectorList.insert(pos + 1, self.vectorList.pop(pos))
                 if not self.vLegendId:
                     self.reposition()
-            if pos < len(self.vectorList) -1:
-                self.updateListBox(selected = (pos + 1)) 
+            if pos < len(self.vectorList) - 1:
+                self.updateListBox(selected=(pos + 1))
             else:
-                self.updateListBox(selected = len(self.vectorList) -1)
+                self.updateListBox(selected=len(self.vectorList) - 1)
 
-    
     def OnProperties(self, event):
         """Opens vector map properties dialog"""
         if self.listbox.GetSelections():
             pos = self.listbox.GetSelection()
             id = self.vectorList[pos][2]
 
-            dlg = VPropertiesDialog(self, id = id, settings = self.instruction, 
-                                    vectors = self.vectorList, tmpSettings = self.tmpDialogDict[id])
+            dlg = VPropertiesDialog(
+                self,
+                id=id,
+                settings=self.instruction,
+                vectors=self.vectorList,
+                tmpSettings=self.tmpDialogDict[id])
             dlg.ShowModal()
-            
+
             self.parent.FindWindowById(wx.ID_OK).SetFocus()
-           
-    def enableButtons(self, enable = True):
+
+    def enableButtons(self, enable=True):
         """Enable/disable up, down, properties, delete buttons"""
         self.btnUp.Enable(enable)
         self.btnDown.Enable(enable)
         self.btnProp.Enable(enable)
         self.btnDel.Enable(enable)
-    
-    def updateListBox(self, selected = None):
+
+    def updateListBox(self, selected=None):
         mapList = ["%s - %s" % (item[0], item[1]) for item in self.vectorList]
         self.listbox.Set(mapList)
         if self.listbox.IsEmpty():
@@ -1461,32 +1942,33 @@ class VectorPanel(wx.Panel):
         else:
             self.enableButtons(True)
             if selected is not None:
-                self.listbox.SetSelection(selected)  
-                self.listbox.EnsureVisible(selected)  
-              
+                self.listbox.SetSelection(selected)
+                self.listbox.EnsureVisible(selected)
+
     def reposition(self):
         """Update position in legend, used only if there is no vlegend yet"""
         for i in range(len(self.vectorList)):
             if self.vectorList[i][3]:
                 self.vectorList[i][3] = i + 1
-                
+
     def getId(self):
         return self.id
-        
+
     def update(self):
-        vectors = self.instruction.FindInstructionByType('vProperties', list = True)
-        
+        vectors = self.instruction.FindInstructionByType(
+            'vProperties', list=True)
+
         for vector in vectors:
             del self.instruction[vector.id]
         if self.id in self.instruction:
-            del self.instruction[self.id] 
+            del self.instruction[self.id]
 
         if len(self.vectorList) > 0:
             vector = Vector(self.id)
             self.instruction.AddInstruction(vector)
 
             vector.SetInstruction({'list': deepcopy(self.vectorList)})
-            
+
             # save new vectors
             for item in self.vectorList:
                 id = item[2]
@@ -1497,93 +1979,123 @@ class VectorPanel(wx.Panel):
                 vLayer['name'] = item[0]
                 vLayer['label'] = item[4]
                 vLayer['lpos'] = item[3]
-            
+
         else:
             if self.id in self.instruction:
                 del self.instruction[self.id]
-                
+
         if 'map' in self.parent.parent.openDialogs:
             self.parent.parent.openDialogs['map'].updateDialog()
 
         return True
-    
+
+
 class RasterDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = _("Raster map settings"), settings = settings)
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=_("Raster map settings"),
+            settings=settings)
         self.objectType = ('raster',)
-        
-        self.rPanel = RasterPanel(parent = self, id = self.id, settings = self.instruction, notebook = False)
+
+        self.rPanel = RasterPanel(
+            parent=self,
+            id=self.id,
+            settings=self.instruction,
+            notebook=False)
 
         self.id = self.rPanel.getId()
         self._layout(self.rPanel)
-    
+
     def update(self):
         ok = self.rPanel.update()
         if ok:
             return True
         return False
-    
+
     def OnApply(self, event):
         ok = self.update()
         if not ok:
             return False
 
         if self.id in self.instruction:
-            self.parent.DialogDataChanged(id = self.id)
+            self.parent.DialogDataChanged(id=self.id)
         else:
             mapId = self.instruction.FindInstructionByType('map').id
-            self.parent.DialogDataChanged(id = mapId)
+            self.parent.DialogDataChanged(id=mapId)
         return True
-    
+
     def updateDialog(self):
         """Update information (not used)"""
         pass
-##        if 'map' in self.parent.openDialogs:
-##            if self.parent.openDialogs['map'].mPanel.rasterTypeRadio.GetValue()\
-##                    and self.parent.openDialogs['map'].mPanel.select.GetValue():
-##                if self.parent.openDialogs['map'].mPanel.drawMap.IsChecked():
-##                    self.rPanel.rasterSelect.SetValue(self.parent.openDialogs['map'].mPanel.select.GetValue())   
-                
+# if 'map' in self.parent.openDialogs:
+# if self.parent.openDialogs['map'].mPanel.rasterTypeRadio.GetValue()\
+# and self.parent.openDialogs['map'].mPanel.select.GetValue():
+# if self.parent.openDialogs['map'].mPanel.drawMap.IsChecked():
+# self.rPanel.rasterSelect.SetValue(self.parent.openDialogs['map'].mPanel.select.GetValue())
+
+
 class MainVectorDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = _("Vector maps settings"), settings = settings)
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=_("Vector maps settings"),
+            settings=settings)
         self.objectType = ('vector',)
-        self.vPanel = VectorPanel(parent = self, id = self.id, settings = self.instruction, notebook = False)
+        self.vPanel = VectorPanel(
+            parent=self,
+            id=self.id,
+            settings=self.instruction,
+            notebook=False)
 
         self.id = self.vPanel.getId()
         self._layout(self.vPanel)
-    
+
     def update(self):
         self.vPanel.update()
-        
+
     def OnApply(self, event):
         self.update()
         if self.id in self.instruction:
-            self.parent.DialogDataChanged(id = self.id)
+            self.parent.DialogDataChanged(id=self.id)
         else:
             mapId = self.instruction.FindInstructionByType('map').id
-            self.parent.DialogDataChanged(id = mapId)
+            self.parent.DialogDataChanged(id=mapId)
         return True
-        
+
     def updateDialog(self):
         """Update information (not used)"""
         pass
-        
+
+
 class VPropertiesDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings, vectors, tmpSettings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "", settings = settings, apply = False)
-        
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="",
+            settings=settings,
+            apply=False)
+
         vectorList = vectors
         self.vPropertiesDict = tmpSettings
-        
+
         # determine map and its type
         for item in vectorList:
             if id == item[2]:
                 self.vectorName = item[0]
                 self.type = item[1]
         self.SetTitle(_("%s properties") % self.vectorName)
-        
-        #vector map info
+
+        # vector map info
         self.connection = True
         try:
             self.mapDBInfo = VectorDBInfo(self.vectorName)
@@ -1594,10 +2106,10 @@ class VPropertiesDialog(PsmapDialog):
         if not self.layers:
             self.connection = False
             self.layers = []
-            
+
         self.currLayer = self.vPropertiesDict['layer']
-        
-        #path to symbols, patterns
+
+        # path to symbols, patterns
         gisbase = os.getenv("GISBASE")
         self.symbolPath = os.path.join(gisbase, 'etc', 'symbol')
         self.symbols = []
@@ -1606,20 +2118,22 @@ class VPropertiesDialog(PsmapDialog):
                 self.symbols.append(os.path.join(dir, symbol))
         self.patternPath = os.path.join(gisbase, 'etc', 'paint', 'patterns')
 
-        #notebook
-        notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+        # notebook
+        notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         self.DSpanel = self._DataSelectionPanel(notebook)
-        self.EnableLayerSelection(enable = self.connection)
-        selectPanel = { 'points': [self._ColorsPointAreaPanel, self._StylePointPanel], 
-                        'lines': [self._ColorsLinePanel, self._StyleLinePanel], 
-                        'areas': [self._ColorsPointAreaPanel, self._StyleAreaPanel]}
+        self.EnableLayerSelection(enable=self.connection)
+        selectPanel = {
+            'points': [
+                self._ColorsPointAreaPanel, self._StylePointPanel], 'lines': [
+                self._ColorsLinePanel, self._StyleLinePanel], 'areas': [
+                self._ColorsPointAreaPanel, self._StyleAreaPanel]}
         self.ColorsPanel = selectPanel[self.type][0](notebook)
-        
+
         self.OnOutline(None)
         if self.type in ('points', 'areas'):
             self.OnFill(None)
         self.OnColor(None)
-        
+
         self.StylePanel = selectPanel[self.type][1](notebook)
         if self.type == 'points':
             self.OnSize(None)
@@ -1627,309 +2141,483 @@ class VPropertiesDialog(PsmapDialog):
             self.OnSymbology(None)
         if self.type == 'areas':
             self.OnPattern(None)
-        
+
         self._layout(notebook)
-        
+
     def _DataSelectionPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Data selection"))
-        
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Data selection"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         # data type
         self.checkType1 = self.checkType2 = None
         if self.type in ('lines', 'points'):
-            box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Feature type"))
+            box = wx.StaticBox(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=" %s " %
+                _("Feature type"))
             sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-            gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+            gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
             if self.type == 'points':
                 label = (_("points"), _("centroids"))
-            else: 
+            else:
                 label = (_("lines"), _("boundaries"))
             if self.type == 'points':
                 name = ("point", "centroid")
             else:
                 name = ("line", "boundary")
-            self.checkType1 = wx.CheckBox(panel, id = wx.ID_ANY, label = label[0], name = name[0])
-            self.checkType2 = wx.CheckBox(panel, id = wx.ID_ANY, label = label[1], name = name[1])
-            self.checkType1.SetValue(self.vPropertiesDict['type'].find(name[0]) >= 0)
-            self.checkType2.SetValue(self.vPropertiesDict['type'].find(name[1]) >= 0)
-            
-            gridBagSizer.Add(self.checkType1, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            gridBagSizer.Add(self.checkType2, pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-            border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+            self.checkType1 = wx.CheckBox(
+                panel, id=wx.ID_ANY, label=label[0], name=name[0])
+            self.checkType2 = wx.CheckBox(
+                panel, id=wx.ID_ANY, label=label[1], name=name[1])
+            self.checkType1.SetValue(
+                self.vPropertiesDict['type'].find(
+                    name[0]) >= 0)
+            self.checkType2.SetValue(
+                self.vPropertiesDict['type'].find(
+                    name[1]) >= 0)
+
+            gridBagSizer.Add(
+                self.checkType1, pos=(0, 0),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            gridBagSizer.Add(
+                self.checkType2, pos=(0, 1),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            sizer.Add(
+                gridBagSizer,
+                proportion=1,
+                flag=wx.EXPAND | wx.ALL,
+                border=5)
+            border.Add(
+                item=sizer,
+                proportion=0,
+                flag=wx.ALL | wx.EXPAND,
+                border=5)
+
         # layer selection
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Layer selection"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Layer selection"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        self.gridBagSizerL = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        self.warning =  wx.StaticText(panel, id = wx.ID_ANY, label = "")
+        self.gridBagSizerL = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.warning = wx.StaticText(panel, id=wx.ID_ANY, label="")
         if not self.connection:
-            self.warning = wx.StaticText(panel, id = wx.ID_ANY, label = _("Database connection is not defined in DB file."))
-        text = wx.StaticText(panel, id = wx.ID_ANY, label = _("Select layer:"))
-        self.layerChoice = wx.Choice(panel, id = wx.ID_ANY, choices = map(str, self.layers), size = self.spinCtrlSize)
-        
+            self.warning = wx.StaticText(panel, id=wx.ID_ANY, label=_(
+                "Database connection is not defined in DB file."))
+        text = wx.StaticText(panel, id=wx.ID_ANY, label=_("Select layer:"))
+        self.layerChoice = wx.Choice(
+            panel, id=wx.ID_ANY, choices=map(
+                str, self.layers), size=self.spinCtrlSize)
+
         self.layerChoice.SetStringSelection(self.currLayer)
-                
+
         if self.connection:
-            table = self.mapDBInfo.layers[int(self.currLayer)]['table'] 
+            table = self.mapDBInfo.layers[int(self.currLayer)]['table']
         else:
             table = ""
 
-        self.radioWhere = wx.RadioButton(panel, id = wx.ID_ANY, label = "SELECT * FROM %s WHERE" % table, style = wx.RB_GROUP)
-        self.textCtrlWhere = wx.TextCtrl(panel, id = wx.ID_ANY, value = "")
-        
-        
+        self.radioWhere = wx.RadioButton(
+            panel, id=wx.ID_ANY, label="SELECT * FROM %s WHERE" %
+            table, style=wx.RB_GROUP)
+        self.textCtrlWhere = wx.TextCtrl(panel, id=wx.ID_ANY, value="")
+
         if self.connection:
-            cols = self.mapDBInfo.GetColumns(self.mapDBInfo.layers[int(self.currLayer)]['table']) 
+            cols = self.mapDBInfo.GetColumns(
+                self.mapDBInfo.layers[int(self.currLayer)]['table'])
         else:
             cols = []
 
-        self.choiceColumns = wx.Choice(panel, id = wx.ID_ANY, choices = cols)
-        
-        self.radioCats = wx.RadioButton(panel, id = wx.ID_ANY, label = "Choose categories ")
-        self.textCtrlCats = wx.TextCtrl(panel, id = wx.ID_ANY, value = "")
-        self.textCtrlCats.SetToolTipString(_("list of categories (e.g. 1,3,5-7)"))
-        
-        if self.vPropertiesDict.has_key('cats'):
+        self.choiceColumns = wx.Choice(panel, id=wx.ID_ANY, choices=cols)
+
+        self.radioCats = wx.RadioButton(
+            panel, id=wx.ID_ANY, label="Choose categories ")
+        self.textCtrlCats = wx.TextCtrl(panel, id=wx.ID_ANY, value="")
+        self.textCtrlCats.SetToolTipString(
+            _("list of categories (e.g. 1,3,5-7)"))
+
+        if 'cats' in self.vPropertiesDict:
             self.radioCats.SetValue(True)
             self.textCtrlCats.SetValue(self.vPropertiesDict['cats'])
-        if self.vPropertiesDict.has_key('where'):
+        if 'where' in self.vPropertiesDict:
             self.radioWhere.SetValue(True)
-            where = self.vPropertiesDict['where'].strip().split(" ",1)
+            where = self.vPropertiesDict['where'].strip().split(" ", 1)
             self.choiceColumns.SetStringSelection(where[0])
             self.textCtrlWhere.SetValue(where[1])
-            
+
         row = 0
         if not self.connection:
-            self.gridBagSizerL.Add(self.warning, pos = (0,0), span = (1,3), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+            self.gridBagSizerL.Add(
+                self.warning, pos=(
+                    0, 0), span=(
+                    1, 3), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
             row = 1
-        self.gridBagSizerL.Add(text, pos = (0 + row,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerL.Add(self.layerChoice, pos = (0 + row,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        self.gridBagSizerL.Add(self.radioWhere, pos = (1 + row,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerL.Add(self.choiceColumns, pos = (1 + row,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerL.Add(self.textCtrlWhere, pos = (1 + row,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerL.Add(self.radioCats, pos = (2 + row,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerL.Add(self.textCtrlCats, pos = (2 + row,1), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        sizer.Add(self.gridBagSizerL, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        #mask
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Mask"))
+        self.gridBagSizerL.Add(
+            text, pos=(0 + row, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerL.Add(
+            self.layerChoice, pos=(0 + row, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        self.gridBagSizerL.Add(
+            self.radioWhere, pos=(1 + row, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerL.Add(
+            self.choiceColumns, pos=(1 + row, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerL.Add(
+            self.textCtrlWhere, pos=(1 + row, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerL.Add(
+            self.radioCats, pos=(2 + row, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerL.Add(
+            self.textCtrlCats, pos=(2 + row, 1),
+            span=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+
+        sizer.Add(
+            self.gridBagSizerL,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        # mask
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Mask"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        
-        self.mask = wx.CheckBox(panel, id = wx.ID_ANY, label = _("Use current mask"))
+
+        self.mask = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("Use current mask"))
         if self.vPropertiesDict['masked'] == 'y':
-            self.mask.SetValue(True) 
+            self.mask.SetValue(True)
         else:
             self.mask.SetValue(False)
-        
-        sizer.Add(self.mask, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+
+        sizer.Add(self.mask, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         self.Bind(wx.EVT_CHOICE, self.OnLayer, self.layerChoice)
-        
+
         panel.SetSizer(border)
         panel.Fit()
         return panel
-    
+
     def _ColorsPointAreaPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Colors"))
-        
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Colors"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         #colors - outline
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Outline"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Outline"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        self.gridBagSizerO = wx.GridBagSizer(hgap = 5, vgap = 2)
-        
-        self.outlineCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("draw outline"))
+        self.gridBagSizerO = wx.GridBagSizer(hgap=5, vgap=2)
+
+        self.outlineCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("draw outline"))
         self.outlineCheck.SetValue(self.vPropertiesDict['color'] != 'none')
-        
-        widthText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Width (pts):"))
+
+        widthText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Width (pts):"))
         if fs:
-            self.widthSpin = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = 0, max_val = 30,
-                                          increment = 0.5, value = 1, style = fs.FS_RIGHT)
+            self.widthSpin = fs.FloatSpin(
+                panel,
+                id=wx.ID_ANY,
+                min_val=0,
+                max_val=30,
+                increment=0.5,
+                value=1,
+                style=fs.FS_RIGHT)
             self.widthSpin.SetFormat("%f")
             self.widthSpin.SetDigits(2)
         else:
-            self.widthSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 25, initial = 1,
-                                         size = self.spinCtrlSize)
-                                        
-        if self.vPropertiesDict['color'] == None:
+            self.widthSpin = wx.SpinCtrl(
+                panel, id=wx.ID_ANY, min=1, max=25, initial=1,
+                size=self.spinCtrlSize)
+
+        if self.vPropertiesDict['color'] is None:
             self.vPropertiesDict['color'] = 'none'
- 
+
         if self.vPropertiesDict['color'] != 'none':
-            self.widthSpin.SetValue(self.vPropertiesDict['width'] )
+            self.widthSpin.SetValue(self.vPropertiesDict['width'])
         else:
             self.widthSpin.SetValue(1)
 
-        colorText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Color:"))
-        self.colorPicker = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
+        colorText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Color:"))
+        self.colorPicker = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
         if self.vPropertiesDict['color'] != 'none':
-            self.colorPicker.SetColour(convertRGB(self.vPropertiesDict['color'])) 
+            self.colorPicker.SetColour(
+                convertRGB(self.vPropertiesDict['color']))
         else:
             self.colorPicker.SetColour(convertRGB('black'))
 
-        self.gridBagSizerO.Add(self.outlineCheck, pos = (0, 0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerO.Add(widthText, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerO.Add(self.widthSpin, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)        
-        self.gridBagSizerO.Add(colorText, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)                
-        self.gridBagSizerO.Add(self.colorPicker, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        
-        sizer.Add(self.gridBagSizerO, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        self.gridBagSizerO.Add(
+            self.outlineCheck, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerO.Add(
+            widthText, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerO.Add(
+            self.widthSpin, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        self.gridBagSizerO.Add(
+            colorText, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerO.Add(
+            self.colorPicker, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizer.Add(
+            self.gridBagSizerO,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_CHECKBOX, self.OnOutline, self.outlineCheck)
-        
+
         #colors - fill
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Fill")) 
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Fill"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        self.gridBagSizerF = wx.GridBagSizer(hgap = 5, vgap = 2)
-       
-        self.fillCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("fill color"))
-        self.fillCheck.SetValue(self.vPropertiesDict['fcolor'] != 'none' or self.vPropertiesDict['rgbcolumn'] is not None)
+        self.gridBagSizerF = wx.GridBagSizer(hgap=5, vgap=2)
+
+        self.fillCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("fill color"))
+        self.fillCheck.SetValue(
+            self.vPropertiesDict['fcolor'] !=
+            'none' or self.vPropertiesDict['rgbcolumn'] is not None)
 
-        self.colorPickerRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("choose color:"), style = wx.RB_GROUP)
-        #set choose color option if there is no db connection
+        self.colorPickerRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("choose color:"), style=wx.RB_GROUP)
+        # set choose color option if there is no db connection
         if self.connection:
-            self.colorPickerRadio.SetValue(not self.vPropertiesDict['rgbcolumn'])
+            self.colorPickerRadio.SetValue(
+                not self.vPropertiesDict['rgbcolumn'])
         else:
-            self.colorPickerRadio.SetValue(False)            
-        self.fillColorPicker = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
+            self.colorPickerRadio.SetValue(False)
+        self.fillColorPicker = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
         if self.vPropertiesDict['fcolor'] != 'none':
-            self.fillColorPicker.SetColour(convertRGB(self.vPropertiesDict['fcolor'])) 
+            self.fillColorPicker.SetColour(
+                convertRGB(self.vPropertiesDict['fcolor']))
         else:
-            self.fillColorPicker.SetColour(convertRGB('red'))        
-        
-        self.colorColRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("color from map table column:"))
-        self.colorColChoice = self.getColsChoice(parent = panel)
+            self.fillColorPicker.SetColour(convertRGB('red'))
+
+        self.colorColRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("color from map table column:"))
+        self.colorColChoice = self.getColsChoice(parent=panel)
         if self.connection:
             if self.vPropertiesDict['rgbcolumn']:
                 self.colorColRadio.SetValue(True)
-                self.colorColChoice.SetStringSelection(self.vPropertiesDict['rgbcolumn'])
+                self.colorColChoice.SetStringSelection(
+                    self.vPropertiesDict['rgbcolumn'])
             else:
                 self.colorColRadio.SetValue(False)
                 self.colorColChoice.SetSelection(0)
         self.colorColChoice.Enable(self.connection)
         self.colorColRadio.Enable(self.connection)
-        
-        self.gridBagSizerF.Add(self.fillCheck, pos = (0, 0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerF.Add(self.colorPickerRadio, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerF.Add(self.fillColorPicker, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerF.Add(self.colorColRadio, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerF.Add(self.colorColChoice, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)        
-        
-        sizer.Add(self.gridBagSizerF, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+
+        self.gridBagSizerF.Add(
+            self.fillCheck, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.colorPickerRadio, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.fillColorPicker, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.colorColRadio, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.colorColChoice, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+
+        sizer.Add(
+            self.gridBagSizerF,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         self.Bind(wx.EVT_CHECKBOX, self.OnFill, self.fillCheck)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnColor, self.colorColRadio)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnColor, self.colorPickerRadio)
-        
+
         panel.SetSizer(border)
         panel.Fit()
         return panel
-    
+
     def _ColorsLinePanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Colors"))
-        
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Colors"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         #colors - outline
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Outline"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Outline"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        self.gridBagSizerO = wx.GridBagSizer(hgap = 5, vgap = 2)
-        
-        if self.vPropertiesDict['hcolor'] == None:
+        self.gridBagSizerO = wx.GridBagSizer(hgap=5, vgap=2)
+
+        if self.vPropertiesDict['hcolor'] is None:
             self.vPropertiesDict['hcolor'] = 'none'
-        if self.vPropertiesDict['color'] == None:
+        if self.vPropertiesDict['color'] is None:
             self.vPropertiesDict['color'] = 'none'
-        
-        self.outlineCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("draw outline"))
+
+        self.outlineCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("draw outline"))
         self.outlineCheck.SetValue(self.vPropertiesDict['hcolor'] != 'none')
-        self.outlineCheck.SetToolTipString(_("No effect for fill color from table column"))
-        
-        widthText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Width (pts):"))
-        
+        self.outlineCheck.SetToolTipString(
+            _("No effect for fill color from table column"))
+
+        widthText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Width (pts):"))
+
         if fs:
-            self.outWidthSpin = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = 0, max_val = 30,
-                                             increment = 0.5, value = 1, style = fs.FS_RIGHT)
+            self.outWidthSpin = fs.FloatSpin(
+                panel,
+                id=wx.ID_ANY,
+                min_val=0,
+                max_val=30,
+                increment=0.5,
+                value=1,
+                style=fs.FS_RIGHT)
             self.outWidthSpin.SetFormat("%f")
             self.outWidthSpin.SetDigits(1)
         else:
-            self.outWidthSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 30, initial = 1,
-                                         size = self.spinCtrlSize)
-        
+            self.outWidthSpin = wx.SpinCtrl(
+                panel, id=wx.ID_ANY, min=1, max=30, initial=1,
+                size=self.spinCtrlSize)
+
         if self.vPropertiesDict['hcolor'] != 'none':
-            self.outWidthSpin.SetValue(self.vPropertiesDict['hwidth'] )
+            self.outWidthSpin.SetValue(self.vPropertiesDict['hwidth'])
         else:
             self.outWidthSpin.SetValue(1)
 
-        colorText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Color:"))
-        self.colorPicker = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
+        colorText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Color:"))
+        self.colorPicker = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
         if self.vPropertiesDict['hcolor'] != 'none':
-            self.colorPicker.SetColour(convertRGB(self.vPropertiesDict['hcolor']) )
+            self.colorPicker.SetColour(
+                convertRGB(self.vPropertiesDict['hcolor']))
         else:
             self.colorPicker.SetColour(convertRGB('black'))
 
-        
-        self.gridBagSizerO.Add(self.outlineCheck, pos = (0, 0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerO.Add(widthText, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerO.Add(self.outWidthSpin, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)        
-        self.gridBagSizerO.Add(colorText, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)                
-        self.gridBagSizerO.Add(self.colorPicker, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        
-        sizer.Add(self.gridBagSizerO, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        self.gridBagSizerO.Add(
+            self.outlineCheck, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerO.Add(
+            widthText, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerO.Add(
+            self.outWidthSpin, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        self.gridBagSizerO.Add(
+            colorText, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerO.Add(
+            self.colorPicker, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizer.Add(
+            self.gridBagSizerO,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_CHECKBOX, self.OnOutline, self.outlineCheck)
-        
+
         #colors - fill
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Fill"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Fill"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        self.gridBagSizerF = wx.GridBagSizer(hgap = 5, vgap = 2)
-       
-        fillText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Color of lines:"))
+        self.gridBagSizerF = wx.GridBagSizer(hgap=5, vgap=2)
+
+        fillText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Color of lines:"))
 
-        self.colorPickerRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("choose color:"), style = wx.RB_GROUP)
+        self.colorPickerRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("choose color:"), style=wx.RB_GROUP)
 
-        #set choose color option if there is no db connection
+        # set choose color option if there is no db connection
         if self.connection:
-            self.colorPickerRadio.SetValue(not self.vPropertiesDict['rgbcolumn'])
+            self.colorPickerRadio.SetValue(
+                not self.vPropertiesDict['rgbcolumn'])
         else:
-            self.colorPickerRadio.SetValue(False)            
-        self.fillColorPicker = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
+            self.colorPickerRadio.SetValue(False)
+        self.fillColorPicker = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
         if self.vPropertiesDict['color'] != 'none':
-            self.fillColorPicker.SetColour(convertRGB(self.vPropertiesDict['color']) )
+            self.fillColorPicker.SetColour(
+                convertRGB(self.vPropertiesDict['color']))
         else:
             self.fillColorPicker.SetColour(convertRGB('black'))
-        
-        self.colorColRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("color from map table column:"))
-        self.colorColChoice = self.getColsChoice(parent = panel)
+
+        self.colorColRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("color from map table column:"))
+        self.colorColChoice = self.getColsChoice(parent=panel)
         if self.connection:
             if self.vPropertiesDict['rgbcolumn']:
                 self.colorColRadio.SetValue(True)
-                self.colorColChoice.SetStringSelection(self.vPropertiesDict['rgbcolumn'])
+                self.colorColChoice.SetStringSelection(
+                    self.vPropertiesDict['rgbcolumn'])
             else:
                 self.colorColRadio.SetValue(False)
                 self.colorColChoice.SetSelection(0)
         self.colorColChoice.Enable(self.connection)
         self.colorColRadio.Enable(self.connection)
-        
-        self.gridBagSizerF.Add(fillText, pos = (0, 0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        self.gridBagSizerF.Add(self.colorPickerRadio, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerF.Add(self.fillColorPicker, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerF.Add(self.colorColRadio, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        self.gridBagSizerF.Add(self.colorColChoice, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)        
-        
-        sizer.Add(self.gridBagSizerF, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+
+        self.gridBagSizerF.Add(
+            fillText, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.colorPickerRadio, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.fillColorPicker, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.colorColRadio, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        self.gridBagSizerF.Add(
+            self.colorColChoice, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+
+        sizer.Add(
+            self.gridBagSizerF,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         self.Bind(wx.EVT_RADIOBUTTON, self.OnColor, self.colorColRadio)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnColor, self.colorPickerRadio)
@@ -1937,248 +2625,436 @@ class VPropertiesDialog(PsmapDialog):
         panel.SetSizer(border)
         panel.Fit()
         return panel
-    
+
     def _StylePointPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Size and style"))
-        
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Size and style"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        #symbology
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Symbology"))        
+
+        # symbology
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Symbology"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-    
-        self.symbolRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("symbol:"), style = wx.RB_GROUP)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.symbolRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("symbol:"),
+            style=wx.RB_GROUP)
         self.symbolRadio.SetValue(bool(self.vPropertiesDict['symbol']))
-            
-        self.symbolName = wx.StaticText(panel, id = wx.ID_ANY)
+
+        self.symbolName = wx.StaticText(panel, id=wx.ID_ANY)
         self.symbolName.SetLabel(self.vPropertiesDict['symbol'])
-        bitmap = wx.Bitmap(os.path.join(globalvar.SYMBDIR,
-                                        self.vPropertiesDict['symbol']) + '.png')
-        self.symbolButton = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bitmap)
-            
-        self.epsRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("eps file:"))
+        bitmap = wx.Bitmap(
+            os.path.join(
+                globalvar.SYMBDIR,
+                self.vPropertiesDict['symbol']) +
+            '.png')
+        self.symbolButton = wx.BitmapButton(panel, id=wx.ID_ANY, bitmap=bitmap)
+
+        self.epsRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("eps file:"))
         self.epsRadio.SetValue(bool(self.vPropertiesDict['eps']))
-        
-        self.epsFileCtrl = filebrowse.FileBrowseButton(panel, id = wx.ID_ANY, labelText = '',
-                                buttonText =  _("Browse"), toolTip = _("Type filename or click browse to choose file"), 
-                                dialogTitle = _("Choose a file"), startDirectory = '', initialValue = '',
-                                fileMask = "Encapsulated PostScript (*.eps)|*.eps|All files (*.*)|*.*", fileMode = wx.FD_OPEN)
+
+        self.epsFileCtrl = filebrowse.FileBrowseButton(
+            panel, id=wx.ID_ANY, labelText='', buttonText=_("Browse"),
+            toolTip=_("Type filename or click browse to choose file"),
+            dialogTitle=_("Choose a file"),
+            startDirectory='', initialValue='',
+            fileMask="Encapsulated PostScript (*.eps)|*.eps|All files (*.*)|*.*",
+            fileMode=wx.FD_OPEN)
         if not self.vPropertiesDict['eps']:
             self.epsFileCtrl.SetValue('')
-        else: #eps chosen
+        else:  # eps chosen
             self.epsFileCtrl.SetValue(self.vPropertiesDict['eps'])
-            
-        gridBagSizer.Add(self.symbolRadio, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.symbolName, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL | wx.LEFT, border = 10)
-        gridBagSizer.Add(self.symbolButton, pos = (0, 2), flag = wx.ALIGN_RIGHT , border = 0)
-        gridBagSizer.Add(self.epsRadio, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.epsFileCtrl, pos = (1, 1), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
+
+        gridBagSizer.Add(
+            self.symbolRadio, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.symbolName,
+            pos=(
+                0,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=10)
+        gridBagSizer.Add(
+            self.symbolButton, pos=(0, 2),
+            flag=wx.ALIGN_RIGHT, border=0)
+        gridBagSizer.Add(
+            self.epsRadio, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.epsFileCtrl, pos=(
+                1, 1), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+
         gridBagSizer.AddGrowableCol(1)
         gridBagSizer.AddGrowableCol(2)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_BUTTON, self.OnSymbolSelection, self.symbolButton)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnSymbology, self.symbolRadio)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnSymbology, self.epsRadio)
-        
-        #size
-        
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Size"))
+
+        # size
+
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Size"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        self.sizeRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("size:"), style = wx.RB_GROUP)
-        self.sizeSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 50, initial = 1)
-        self.sizecolumnRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("size from map table column:"))
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.sizeRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("size:"),
+            style=wx.RB_GROUP)
+        self.sizeSpin = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=50, initial=1)
+        self.sizecolumnRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("size from map table column:"))
         self.sizeColChoice = self.getColsChoice(panel)
-        self.scaleText = wx.StaticText(panel, id = wx.ID_ANY, label = _("scale:"))
-        self.scaleSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 25, initial = 1)
-        
+        self.scaleText = wx.StaticText(panel, id=wx.ID_ANY, label=_("scale:"))
+        self.scaleSpin = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=25, initial=1)
+
         self.sizeRadio.SetValue(self.vPropertiesDict['size'] is not None)
         self.sizecolumnRadio.SetValue(bool(self.vPropertiesDict['sizecolumn']))
         if self.vPropertiesDict['size']:
             self.sizeSpin.SetValue(self.vPropertiesDict['size'])
-        else: self.sizeSpin.SetValue(5)
+        else:
+            self.sizeSpin.SetValue(5)
         if self.vPropertiesDict['sizecolumn']:
             self.scaleSpin.SetValue(self.vPropertiesDict['scale'])
-            self.sizeColChoice.SetStringSelection(self.vPropertiesDict['sizecolumn'])
+            self.sizeColChoice.SetStringSelection(
+                self.vPropertiesDict['sizecolumn'])
         else:
             self.scaleSpin.SetValue(1)
             self.sizeColChoice.SetSelection(0)
-        if not self.connection:   
-            for each in (self.sizecolumnRadio, self.sizeColChoice, self.scaleSpin, self.scaleText):
+        if not self.connection:
+            for each in (self.sizecolumnRadio, self.sizeColChoice,
+                         self.scaleSpin, self.scaleText):
                 each.Disable()
-            
-        gridBagSizer.Add(self.sizeRadio, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.sizeSpin, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.sizecolumnRadio, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.sizeColChoice, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.scaleText, pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        gridBagSizer.Add(self.scaleSpin, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
+
+        gridBagSizer.Add(
+            self.sizeRadio, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.sizeSpin, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.sizecolumnRadio, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.sizeColChoice,
+            pos=(
+                1,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            self.scaleText,
+            pos=(
+                2,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        gridBagSizer.Add(
+            self.scaleSpin, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
         gridBagSizer.AddGrowableCol(0)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_RADIOBUTTON, self.OnSize, self.sizeRadio)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnSize, self.sizecolumnRadio)
-        
-        #rotation
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Rotation"))
-        sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
 
-        
-        self.rotateCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("rotate symbols:"))
-        self.rotateRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("counterclockwise in degrees:"), style = wx.RB_GROUP)
-        self.rotateSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 0, max = 360, initial = 0)
-        self.rotatecolumnRadio = wx.RadioButton(panel, id = wx.ID_ANY, label = _("from map table column:"))
+        # rotation
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Rotation"))
+        sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.rotateCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("rotate symbols:"))
+        self.rotateRadio = wx.RadioButton(panel, id=wx.ID_ANY, label=_(
+            "counterclockwise in degrees:"), style=wx.RB_GROUP)
+        self.rotateSpin = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=0, max=360, initial=0)
+        self.rotatecolumnRadio = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("from map table column:"))
         self.rotateColChoice = self.getColsChoice(panel)
-        
+
         self.rotateCheck.SetValue(self.vPropertiesDict['rotation'])
         self.rotateRadio.SetValue(self.vPropertiesDict['rotate'] is not None)
-        self.rotatecolumnRadio.SetValue(bool(self.vPropertiesDict['rotatecolumn']))
+        self.rotatecolumnRadio.SetValue(
+            bool(self.vPropertiesDict['rotatecolumn']))
         if self.vPropertiesDict['rotate']:
             self.rotateSpin.SetValue(self.vPropertiesDict['rotate'])
         else:
             self.rotateSpin.SetValue(0)
         if self.vPropertiesDict['rotatecolumn']:
-            self.rotateColChoice.SetStringSelection(self.vPropertiesDict['rotatecolumn'])
+            self.rotateColChoice.SetStringSelection(
+                self.vPropertiesDict['rotatecolumn'])
         else:
             self.rotateColChoice.SetSelection(0)
-            
-        gridBagSizer.Add(self.rotateCheck, pos = (0, 0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.rotateRadio, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.rotateSpin, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.rotatecolumnRadio, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.rotateColChoice, pos = (2, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
+
+        gridBagSizer.Add(
+            self.rotateCheck, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.rotateRadio, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.rotateSpin, pos=(1, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.rotatecolumnRadio, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.rotateColChoice,
+            pos=(
+                2,
+                2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_CHECKBOX, self.OnRotation, self.rotateCheck)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnRotationType, self.rotateRadio)
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnRotationType, self.rotatecolumnRadio)
-        
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnRotationType,
+            self.rotatecolumnRadio)
+
         panel.SetSizer(border)
         panel.Fit()
         return panel
-    
+
     def _StyleLinePanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Size and style"))
-        
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Size and style"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        #width
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Width"))       
+
+        # width
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Width"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        widthText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Set width (pts):"))
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        widthText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Set width (pts):"))
         if fs:
-            self.widthSpin = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = 0, max_val = 30,
-                                        increment = 0.5, value = 1, style = fs.FS_RIGHT)
+            self.widthSpin = fs.FloatSpin(
+                panel,
+                id=wx.ID_ANY,
+                min_val=0,
+                max_val=30,
+                increment=0.5,
+                value=1,
+                style=fs.FS_RIGHT)
             self.widthSpin.SetFormat("%f")
             self.widthSpin.SetDigits(1)
         else:
-            self.widthSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 30, initial = 1)
-            
-        self.cwidthCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("multiply width by category value"))
-        
+            self.widthSpin = wx.SpinCtrl(
+                panel, id=wx.ID_ANY, min=1, max=30, initial=1)
+
+        self.cwidthCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("multiply width by category value"))
+
         if self.vPropertiesDict['width']:
             self.widthSpin.SetValue(self.vPropertiesDict['width'])
             self.cwidthCheck.SetValue(False)
         else:
             self.widthSpin.SetValue(self.vPropertiesDict['cwidth'])
             self.cwidthCheck.SetValue(True)
-        
-        gridBagSizer.Add(widthText, pos = (0, 0),  flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.widthSpin, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.cwidthCheck, pos = (1, 0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        #style
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Line style"))
+
+        gridBagSizer.Add(
+            widthText, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.widthSpin, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.cwidthCheck, pos=(
+                1, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        # style
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Line style"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        styleText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Choose line style:"))
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        styleText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Choose line style:"))
         penStyles = ["solid", "dashed", "dotted", "dashdotted"]
-        self.styleCombo = PenStyleComboBox(panel, choices = penStyles, validator = TCValidator(flag = 'ZERO_AND_ONE_ONLY'))
-##        self.styleCombo = wx.ComboBox(panel, id = wx.ID_ANY,
+        self.styleCombo = PenStyleComboBox(
+            panel, choices=penStyles, validator=TCValidator(
+                flag='ZERO_AND_ONE_ONLY'))
+# self.styleCombo = wx.ComboBox(panel, id = wx.ID_ANY,
 ##                            choices = ["solid", "dashed", "dotted", "dashdotted"],
-##                            validator = TCValidator(flag = 'ZERO_AND_ONE_ONLY'))
-##        self.styleCombo.SetToolTipString(_("It's possible to enter a series of 0's and 1's too. "\
+# validator = TCValidator(flag = 'ZERO_AND_ONE_ONLY'))
+# self.styleCombo.SetToolTipString(_("It's possible to enter a series of 0's and 1's too. "\
 ##                                    "The first block of repeated zeros or ones represents 'draw', "\
 ##                                    "the second block represents 'blank'. An even number of blocks "\
-##                                    "will repeat the pattern, an odd number of blocks will alternate the pattern."))
-        linecapText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Choose linecap:"))
-        self.linecapChoice = wx.Choice(panel, id = wx.ID_ANY, choices = ["butt", "round", "extended_butt"])
-        
+# "will repeat the pattern, an odd number of blocks will alternate the pattern."))
+        linecapText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Choose linecap:"))
+        self.linecapChoice = wx.Choice(
+            panel, id=wx.ID_ANY, choices=[
+                "butt", "round", "extended_butt"])
+
         self.styleCombo.SetValue(self.vPropertiesDict['style'])
         self.linecapChoice.SetStringSelection(self.vPropertiesDict['linecap'])
-        
-        gridBagSizer.Add(styleText, pos = (0, 0),  flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.styleCombo, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(linecapText, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.linecapChoice, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        gridBagSizer.Add(
+            styleText, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.styleCombo,
+            pos=(
+                0,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            linecapText, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.linecapChoice,
+            pos=(
+                1,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
         return panel
-        
+
     def _StyleAreaPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Size and style"))
-        
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Size and style"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        #pattern
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Pattern"))
+
+        # pattern
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Pattern"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        self.patternCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("use pattern:"))
-        self.patFileCtrl = filebrowse.FileBrowseButton(panel, id = wx.ID_ANY, labelText = _("Choose pattern file:"),
-                                buttonText =  _("Browse"), toolTip = _("Type filename or click browse to choose file"), 
-                                dialogTitle = _("Choose a file"), startDirectory = self.patternPath, initialValue = '',
-                                fileMask = "Encapsulated PostScript (*.eps)|*.eps|All files (*.*)|*.*", fileMode = wx.FD_OPEN)
-        self.patWidthText = wx.StaticText(panel, id = wx.ID_ANY, label = _("pattern line width (pts):"))
-        self.patWidthSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 25, initial = 1)
-        self.patScaleText = wx.StaticText(panel, id = wx.ID_ANY, label = _("pattern scale factor:"))
-        self.patScaleSpin = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 25, initial = 1)
-        
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.patternCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("use pattern:"))
+        self.patFileCtrl = filebrowse.FileBrowseButton(
+            panel, id=wx.ID_ANY, labelText=_("Choose pattern file:"),
+            buttonText=_("Browse"),
+            toolTip=_("Type filename or click browse to choose file"),
+            dialogTitle=_("Choose a file"),
+            startDirectory=self.patternPath, initialValue='',
+            fileMask="Encapsulated PostScript (*.eps)|*.eps|All files (*.*)|*.*",
+            fileMode=wx.FD_OPEN)
+        self.patWidthText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("pattern line width (pts):"))
+        self.patWidthSpin = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=25, initial=1)
+        self.patScaleText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("pattern scale factor:"))
+        self.patScaleSpin = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=25, initial=1)
+
         self.patternCheck.SetValue(bool(self.vPropertiesDict['pat']))
         if self.patternCheck.GetValue():
             self.patFileCtrl.SetValue(self.vPropertiesDict['pat'])
             self.patWidthSpin.SetValue(self.vPropertiesDict['pwidth'])
             self.patScaleSpin.SetValue(self.vPropertiesDict['scale'])
-        
-        gridBagSizer.Add(self.patternCheck, pos = (0, 0),  flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.patFileCtrl, pos = (1, 0), span = (1, 2),flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.patWidthText, pos = (2, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.patWidthSpin, pos = (2, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.patScaleText, pos = (3, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.patScaleSpin, pos = (3, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        
+
+        gridBagSizer.Add(
+            self.patternCheck, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.patFileCtrl, pos=(
+                1, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            self.patWidthText, pos=(2, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.patWidthSpin, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.patScaleText, pos=(3, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.patScaleSpin, pos=(3, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_CHECKBOX, self.OnPattern, self.patternCheck)
-        
+
         panel.SetSizer(border)
         panel.Fit()
         return panel
@@ -2189,7 +3065,8 @@ class VPropertiesDialog(PsmapDialog):
             return
         self.currLayer = self.layerChoice.GetStringSelection()
         if self.connection:
-            cols = self.mapDBInfo.GetColumns(self.mapDBInfo.layers[int(self.currLayer)]['table']) 
+            cols = self.mapDBInfo.GetColumns(
+                self.mapDBInfo.layers[int(self.currLayer)]['table'])
         else:
             cols = []
 
@@ -2199,15 +3076,15 @@ class VPropertiesDialog(PsmapDialog):
         if self.type in ('points', 'lines'):
             self.colorColChoice.SetItems(cols)
             self.colorColChoice.SetSelection(0)
-            
+
     def OnOutline(self, event):
         for widget in self.gridBagSizerO.GetChildren():
             if widget.GetWindow() != self.outlineCheck:
                 widget.GetWindow().Enable(self.outlineCheck.GetValue())
-                
+
     def OnFill(self, event):
         enable = self.fillCheck.GetValue()
-        
+
         self.colorColChoice.Enable(enable)
         self.colorColRadio.Enable(enable)
         self.fillColorPicker.Enable(enable)
@@ -2217,68 +3094,71 @@ class VPropertiesDialog(PsmapDialog):
         if not self.connection:
             self.colorColChoice.Disable()
             self.colorColRadio.Disable()
-            
+
     def OnColor(self, event):
         self.colorColChoice.Enable(self.colorColRadio.GetValue())
         self.fillColorPicker.Enable(self.colorPickerRadio.GetValue())
-            
+
     def OnSize(self, event):
         self.sizeSpin.Enable(self.sizeRadio.GetValue())
         self.sizeColChoice.Enable(self.sizecolumnRadio.GetValue())
         self.scaleText.Enable(self.sizecolumnRadio.GetValue())
         self.scaleSpin.Enable(self.sizecolumnRadio.GetValue())
-        
+
     def OnRotation(self, event):
-        for each in (self.rotateRadio, self.rotatecolumnRadio, self.rotateColChoice, self.rotateSpin):
+        for each in (self.rotateRadio, self.rotatecolumnRadio,
+                     self.rotateColChoice, self.rotateSpin):
             if self.rotateCheck.GetValue():
                 each.Enable()
-                self.OnRotationType(event = None)     
+                self.OnRotationType(event=None)
             else:
                 each.Disable()
-           
+
     def OnRotationType(self, event):
         self.rotateSpin.Enable(self.rotateRadio.GetValue())
         self.rotateColChoice.Enable(self.rotatecolumnRadio.GetValue())
-        
+
     def OnPattern(self, event):
-        for each in (self.patFileCtrl, self.patWidthText, self.patWidthSpin, self.patScaleText, self.patScaleSpin):
+        for each in (self.patFileCtrl, self.patWidthText,
+                     self.patWidthSpin, self.patScaleText, self.patScaleSpin):
             each.Enable(self.patternCheck.GetValue())
-            
+
     def OnSymbology(self, event):
         useSymbol = self.symbolRadio.GetValue()
-        
+
         self.symbolButton.Enable(useSymbol)
         self.symbolName.Enable(useSymbol)
         self.epsFileCtrl.Enable(not useSymbol)
-            
+
     def OnSymbolSelection(self, event):
-        dlg = SymbolDialog(self, symbolPath = globalvar.SYMBDIR,
-                           currentSymbol = self.symbolName.GetLabel())
+        dlg = SymbolDialog(self, symbolPath=globalvar.SYMBDIR,
+                           currentSymbol=self.symbolName.GetLabel())
         if dlg.ShowModal() == wx.ID_OK:
             img = dlg.GetSelectedSymbolPath()
             name = dlg.GetSelectedSymbolName()
             self.symbolButton.SetBitmapLabel(wx.Bitmap(img + '.png'))
             self.symbolName.SetLabel(name)
-            
+
         dlg.Destroy()
-                
-    def EnableLayerSelection(self, enable = True):
+
+    def EnableLayerSelection(self, enable=True):
         for widget in self.gridBagSizerL.GetChildren():
             if widget.GetWindow() != self.warning:
                 widget.GetWindow().Enable(enable)
-                
+
     def getColsChoice(self, parent):
         """Returns a wx.Choice with table columns"""
         if self.connection:
-            cols = self.mapDBInfo.GetColumns(self.mapDBInfo.layers[int(self.currLayer)]['table']) 
+            cols = self.mapDBInfo.GetColumns(
+                self.mapDBInfo.layers[int(self.currLayer)]['table'])
         else:
             cols = []
 
-        choice = wx.Choice(parent = parent, id = wx.ID_ANY, choices = cols)
+        choice = wx.Choice(parent=parent, id=wx.ID_ANY, choices=cols)
         return choice
-        
+
     def update(self):
-        #feature type
+        # feature type
         if self.type in ('lines', 'points'):
             featureType = None
             if self.checkType1.GetValue():
@@ -2289,77 +3169,88 @@ class VPropertiesDialog(PsmapDialog):
                 featureType = self.checkType2.GetName()
             if featureType:
                 self.vPropertiesDict['type'] = featureType
-            
+
         # is connection
         self.vPropertiesDict['connection'] = self.connection
         if self.connection:
-            self.vPropertiesDict['layer'] = self.layerChoice.GetStringSelection()
+            self.vPropertiesDict[
+                'layer'] = self.layerChoice.GetStringSelection()
             if self.radioCats.GetValue() and not self.textCtrlCats.IsEmpty():
                 self.vPropertiesDict['cats'] = self.textCtrlCats.GetValue()
             elif self.radioWhere.GetValue() and not self.textCtrlWhere.IsEmpty():
-                self.vPropertiesDict['where'] = self.choiceColumns.GetStringSelection() + " " \
-                                                                + self.textCtrlWhere.GetValue()
-        #mask
+                self.vPropertiesDict['where'] = self.choiceColumns.GetStringSelection(
+                ) + " " + self.textCtrlWhere.GetValue()
+        # mask
         if self.mask.GetValue():
-            self.vPropertiesDict['masked'] = 'y' 
+            self.vPropertiesDict['masked'] = 'y'
         else:
             self.vPropertiesDict['masked'] = 'n'
 
-        #colors
+        # colors
         if self.type in ('points', 'areas'):
             if self.outlineCheck.GetValue():
-                self.vPropertiesDict['color'] = convertRGB(self.colorPicker.GetColour())
+                self.vPropertiesDict['color'] = convertRGB(
+                    self.colorPicker.GetColour())
                 self.vPropertiesDict['width'] = self.widthSpin.GetValue()
             else:
                 self.vPropertiesDict['color'] = 'none'
-                
+
             if self.fillCheck.GetValue():
                 if self.colorPickerRadio.GetValue():
-                    self.vPropertiesDict['fcolor'] = convertRGB(self.fillColorPicker.GetColour())
+                    self.vPropertiesDict['fcolor'] = convertRGB(
+                        self.fillColorPicker.GetColour())
                     self.vPropertiesDict['rgbcolumn'] = None
                 if self.colorColRadio.GetValue():
-                    self.vPropertiesDict['fcolor'] = 'none'# this color is taken in case of no record in rgb column
-                    self.vPropertiesDict['rgbcolumn'] = self.colorColChoice.GetStringSelection()
+                    # this color is taken in case of no record in rgb column
+                    self.vPropertiesDict['fcolor'] = 'none'
+                    self.vPropertiesDict[
+                        'rgbcolumn'] = self.colorColChoice.GetStringSelection()
             else:
-                self.vPropertiesDict['fcolor'] = 'none'    
-                
+                self.vPropertiesDict['fcolor'] = 'none'
+
         if self.type == 'lines':
-                #hcolor only when no rgbcolumn
-            if self.outlineCheck.GetValue():# and self.fillCheck.GetValue() and self.colorColRadio.GetValue():
-                self.vPropertiesDict['hcolor'] = convertRGB(self.colorPicker.GetColour())
+                # hcolor only when no rgbcolumn
+            # and self.fillCheck.GetValue() and self.colorColRadio.GetValue():
+            if self.outlineCheck.GetValue():
+                self.vPropertiesDict['hcolor'] = convertRGB(
+                    self.colorPicker.GetColour())
                 self.vPropertiesDict['hwidth'] = self.outWidthSpin.GetValue()
-                
+
             else:
                 self.vPropertiesDict['hcolor'] = 'none'
-                
+
             if self.colorPickerRadio.GetValue():
-                self.vPropertiesDict['color'] = convertRGB(self.fillColorPicker.GetColour())
+                self.vPropertiesDict['color'] = convertRGB(
+                    self.fillColorPicker.GetColour())
                 self.vPropertiesDict['rgbcolumn'] = None
             if self.colorColRadio.GetValue():
-                self.vPropertiesDict['color'] = 'none'# this color is taken in case of no record in rgb column
-                self.vPropertiesDict['rgbcolumn'] = self.colorColChoice.GetStringSelection()
+                # this color is taken in case of no record in rgb column
+                self.vPropertiesDict['color'] = 'none'
+                self.vPropertiesDict[
+                    'rgbcolumn'] = self.colorColChoice.GetStringSelection()
         #
         #size and style
         #
-        
+
         if self.type == 'points':
-            #symbols
+            # symbols
             if self.symbolRadio.GetValue():
                 self.vPropertiesDict['symbol'] = self.symbolName.GetLabel()
                 self.vPropertiesDict['eps'] = None
             else:
                 self.vPropertiesDict['eps'] = self.epsFileCtrl.GetValue()
-            #size
+            # size
             if self.sizeRadio.GetValue():
                 self.vPropertiesDict['size'] = self.sizeSpin.GetValue()
                 self.vPropertiesDict['sizecolumn'] = None
                 self.vPropertiesDict['scale'] = None
             else:
-                self.vPropertiesDict['sizecolumn'] = self.sizeColChoice.GetStringSelection()
+                self.vPropertiesDict[
+                    'sizecolumn'] = self.sizeColChoice.GetStringSelection()
                 self.vPropertiesDict['scale'] = self.scaleSpin.GetValue()
                 self.vPropertiesDict['size'] = None
-            
-            #rotation
+
+            # rotation
             self.vPropertiesDict['rotate'] = None
             self.vPropertiesDict['rotatecolumn'] = None
             self.vPropertiesDict['rotation'] = False
@@ -2368,62 +3259,71 @@ class VPropertiesDialog(PsmapDialog):
             if self.rotateRadio.GetValue():
                 self.vPropertiesDict['rotate'] = self.rotateSpin.GetValue()
             else:
-                self.vPropertiesDict['rotatecolumn'] = self.rotateColChoice.GetStringSelection()
-                
+                self.vPropertiesDict[
+                    'rotatecolumn'] = self.rotateColChoice.GetStringSelection()
+
         if self.type == 'areas':
-            #pattern
-            self.vPropertiesDict['pat'] = None 
+            # pattern
+            self.vPropertiesDict['pat'] = None
             if self.patternCheck.GetValue() and bool(self.patFileCtrl.GetValue()):
                 self.vPropertiesDict['pat'] = self.patFileCtrl.GetValue()
                 self.vPropertiesDict['pwidth'] = self.patWidthSpin.GetValue()
                 self.vPropertiesDict['scale'] = self.patScaleSpin.GetValue()
-                
+
         if self.type == 'lines':
-            #width
+            # width
             if self.cwidthCheck.GetValue():
                 self.vPropertiesDict['cwidth'] = self.widthSpin.GetValue()
                 self.vPropertiesDict['width'] = None
             else:
                 self.vPropertiesDict['width'] = self.widthSpin.GetValue()
                 self.vPropertiesDict['cwidth'] = None
-            #line style
+            # line style
             if self.styleCombo.GetValue():
-                self.vPropertiesDict['style'] = self.styleCombo.GetValue() 
+                self.vPropertiesDict['style'] = self.styleCombo.GetValue()
             else:
                 self.vPropertiesDict['style'] = 'solid'
 
-            self.vPropertiesDict['linecap'] = self.linecapChoice.GetStringSelection()
-            
+            self.vPropertiesDict[
+                'linecap'] = self.linecapChoice.GetStringSelection()
+
     def OnOK(self, event):
         self.update()
         event.Skip()
-        
+
+
 class LegendDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings, page):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "Legend settings", settings = settings)
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="Legend settings",
+            settings=settings)
         self.objectType = ('rasterLegend', 'vectorLegend')
         self.instruction = settings
         map = self.instruction.FindInstructionByType('map')
         if map:
-            self.mapId = map.id 
+            self.mapId = map.id
         else:
             self.mapId = None
 
         vector = self.instruction.FindInstructionByType('vector')
         if vector:
-            self.vectorId = vector.id 
+            self.vectorId = vector.id
         else:
             self.vectorId = None
 
         raster = self.instruction.FindInstructionByType('raster')
         if raster:
-            self.rasterId = raster.id 
+            self.rasterId = raster.id
         else:
             self.rasterId = None
 
         self.pageId = self.instruction.FindInstructionByType('page').id
         currPage = self.instruction[self.pageId].GetInstruction()
-        #raster legend
+        # raster legend
         if self.id[0] is not None:
             self.rasterLegend = self.instruction[self.id[0]]
             self.rLegendDict = self.rasterLegend.GetInstruction()
@@ -2432,9 +3332,8 @@ class LegendDialog(PsmapDialog):
             self.rasterLegend = RasterLegend(self.id[0])
             self.rLegendDict = self.rasterLegend.GetInstruction()
             self.rLegendDict['where'] = currPage['Left'], currPage['Top']
-            
-            
-        #vector legend    
+
+        # vector legend
         if self.id[1] is not None:
             self.vLegendDict = self.instruction[self.id[1]].GetInstruction()
         else:
@@ -2442,138 +3341,246 @@ class LegendDialog(PsmapDialog):
             vectorLegend = VectorLegend(self.id[1])
             self.vLegendDict = vectorLegend.GetInstruction()
             self.vLegendDict['where'] = currPage['Left'], currPage['Top']
-            
+
         if self.rasterId:
-            self.currRaster = self.instruction[self.rasterId]['raster'] 
+            self.currRaster = self.instruction[self.rasterId]['raster']
         else:
             self.currRaster = None
 
-        #notebook
-        self.notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+        # notebook
+        self.notebook = wx.Notebook(
+            parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         self.panelRaster = self._rasterLegend(self.notebook)
-        self.panelVector = self._vectorLegend(self.notebook)  
+        self.panelVector = self._vectorLegend(self.notebook)
         self.OnRaster(None)
         self.OnRange(None)
         self.OnIsLegend(None)
         self.OnSpan(None)
         self.OnBorder(None)
-                
+
         self._layout(self.notebook)
         self.notebook.ChangeSelection(page)
         self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGING, self.OnPageChanging)
-        
+
     def OnPageChanging(self, event):
         """Workaround to scroll up to see the checkbox"""
         wx.CallAfter(self.FindWindowByName('rasterPanel').ScrollChildIntoView,
-                                            self.FindWindowByName('showRLegend'))
+                     self.FindWindowByName('showRLegend'))
         wx.CallAfter(self.FindWindowByName('vectorPanel').ScrollChildIntoView,
-                                            self.FindWindowByName('showVLegend'))
-                                            
+                     self.FindWindowByName('showVLegend'))
+
     def _rasterLegend(self, notebook):
-        panel = scrolled.ScrolledPanel(parent = notebook, id = wx.ID_ANY, size = (-1, 500), style = wx.TAB_TRAVERSAL)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
+        panel = scrolled.ScrolledPanel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, 500),
+            style=wx.TAB_TRAVERSAL)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
         panel.SetName('rasterPanel')
-        notebook.AddPage(page = panel, text = _("Raster legend"))
+        notebook.AddPage(page=panel, text=_("Raster legend"))
 
         border = wx.BoxSizer(wx.VERTICAL)
         # is legend
-        self.isRLegend = wx.CheckBox(panel, id = wx.ID_ANY, label = _("Show raster legend"))
+        self.isRLegend = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("Show raster legend"))
         self.isRLegend.SetValue(self.rLegendDict['rLegend'])
         self.isRLegend.SetName("showRLegend")
-        border.Add(item = self.isRLegend, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        border.Add(
+            item=self.isRLegend,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
 
         # choose raster
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Source raster"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Source raster"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
-        
-        self.rasterDefault = wx.RadioButton(panel, id = wx.ID_ANY, label = _("current raster"), style = wx.RB_GROUP)
-        self.rasterOther = wx.RadioButton(panel, id = wx.ID_ANY, label = _("select raster"))
-        self.rasterDefault.SetValue(self.rLegendDict['rasterDefault'])#
-        self.rasterOther.SetValue(not self.rLegendDict['rasterDefault'])#
-
-        rasterType = getRasterType(map = self.currRaster)
-
-        self.rasterCurrent = wx.StaticText(panel, id = wx.ID_ANY,
-                                label = _("%(rast)s: type %(type)s") % { 'rast' : self.currRaster,
-                                                                         'type' : rasterType })
-        self.rasterSelect = Select(panel, id = wx.ID_ANY, size = globalvar.DIALOG_GSELECT_SIZE,
-                                    type = 'raster', multiple = False,
-                                    updateOnPopup = True, onPopup = None)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+
+        self.rasterDefault = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("current raster"),
+            style=wx.RB_GROUP)
+        self.rasterOther = wx.RadioButton(
+            panel, id=wx.ID_ANY, label=_("select raster"))
+        self.rasterDefault.SetValue(self.rLegendDict['rasterDefault'])
+        self.rasterOther.SetValue(not self.rLegendDict['rasterDefault'])
+
+        rasterType = getRasterType(map=self.currRaster)
+
+        self.rasterCurrent = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("%(rast)s: type %(type)s") %
+            {'rast': self.currRaster, 'type': rasterType})
+        self.rasterSelect = Select(
+            panel,
+            id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE,
+            type='raster',
+            multiple=False,
+            updateOnPopup=True,
+            onPopup=None)
         if not self.rLegendDict['rasterDefault']:
             self.rasterSelect.SetValue(self.rLegendDict['raster'])
         else:
             self.rasterSelect.SetValue('')
-        flexSizer.Add(self.rasterDefault, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(self.rasterCurrent, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border = 10)
-        flexSizer.Add(self.rasterOther, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(self.rasterSelect, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
+        flexSizer.Add(
+            self.rasterDefault,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            self.rasterCurrent,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=10)
+        flexSizer.Add(
+            self.rasterOther,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            self.rasterSelect,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
         flexSizer.AddGrowableCol(1)
-        
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        sizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # type of legend
-        
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Type of legend"))        
+
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Type of legend"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         vbox = wx.BoxSizer(wx.VERTICAL)
-        self.discrete = wx.RadioButton(parent = panel, id = wx.ID_ANY, 
-                        label = " %s " % _("discrete legend (categorical maps)"), style = wx.RB_GROUP)
-        self.continuous = wx.RadioButton(parent = panel, id = wx.ID_ANY, 
-                        label = " %s " % _("continuous color gradient legend (floating point map)"))
-        
-        vbox.Add(self.discrete, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 0)
-        vbox.Add(self.continuous, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 0)
-        sizer.Add(item = vbox, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        self.discrete = wx.RadioButton(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("discrete legend (categorical maps)"),
+            style=wx.RB_GROUP)
+        self.continuous = wx.RadioButton(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("continuous color gradient legend (floating point map)"))
+
+        vbox.Add(
+            self.discrete,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=0)
+        vbox.Add(
+            self.continuous,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=0)
+        sizer.Add(item=vbox, proportion=1, flag=wx.ALL | wx.EXPAND, border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # size, position and font
-        self.sizePositionFont(legendType = 'raster', parent = panel, mainSizer = border)
-        
+        self.sizePositionFont(
+            legendType='raster',
+            parent=panel,
+            mainSizer=border)
+
         # advanced settings
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Advanced legend settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Advanced legend settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
         # no data
-        self.nodata = wx.CheckBox(panel, id = wx.ID_ANY, label = _('draw "no data" box'))
+        self.nodata = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_('draw "no data" box'))
         if self.rLegendDict['nodata'] == 'y':
             self.nodata.SetValue(True)
-        else: 
+        else:
             self.nodata.SetValue(False)
-        #tickbar
-        self.ticks = wx.CheckBox(panel, id = wx.ID_ANY, label = _("draw ticks across color table"))
+        # tickbar
+        self.ticks = wx.CheckBox(
+            panel,
+            id=wx.ID_ANY,
+            label=_("draw ticks across color table"))
         if self.rLegendDict['tickbar'] == 'y':
             self.ticks.SetValue(True)
         else:
             self.ticks.SetValue(False)
         # range
         if self.rasterId and self.instruction[self.rasterId]['raster']:
-            rinfo = grass.raster_info(self.instruction[self.rasterId]['raster'])
+            rinfo = grass.raster_info(
+                self.instruction[
+                    self.rasterId]['raster'])
             self.minim, self.maxim = rinfo['min'], rinfo['max']
         else:
-            self.minim, self.maxim = 0,0
-        self.range = wx.CheckBox(panel, id = wx.ID_ANY, label = _("range"))
+            self.minim, self.maxim = 0, 0
+        self.range = wx.CheckBox(panel, id=wx.ID_ANY, label=_("range"))
         self.range.SetValue(self.rLegendDict['range'])
-        self.minText =  wx.StaticText(panel, id = wx.ID_ANY, label = "min (%s)" % self.minim)
-        self.maxText =  wx.StaticText(panel, id = wx.ID_ANY, label = "max (%s)" % self.maxim)       
-        self.min = wx.TextCtrl(panel, id = wx.ID_ANY, value = str(self.rLegendDict['min']))
-        self.max = wx.TextCtrl(panel, id = wx.ID_ANY, value = str(self.rLegendDict['max']))
-        
-        gridBagSizer.Add(self.nodata, pos = (0,0), span = (1,5), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.ticks, pos = (1,0), span = (1,5), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.range, pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.minText, pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        gridBagSizer.Add(self.min, pos = (2,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.maxText, pos = (2,3), flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_RIGHT, border = 0)
-        gridBagSizer.Add(self.max, pos = (2,4), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-   
+        self.minText = wx.StaticText(
+            panel,
+            id=wx.ID_ANY,
+            label="min (%s)" %
+            self.minim)
+        self.maxText = wx.StaticText(
+            panel,
+            id=wx.ID_ANY,
+            label="max (%s)" %
+            self.maxim)
+        self.min = wx.TextCtrl(
+            panel, id=wx.ID_ANY, value=str(
+                self.rLegendDict['min']))
+        self.max = wx.TextCtrl(
+            panel, id=wx.ID_ANY, value=str(
+                self.rLegendDict['max']))
+
+        gridBagSizer.Add(
+            self.nodata, pos=(
+                0, 0), span=(
+                1, 5), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.ticks, pos=(
+                1, 0), span=(
+                1, 5), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.range, pos=(2, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.minText,
+            pos=(
+                2,
+                1),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        gridBagSizer.Add(
+            self.min, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.maxText,
+            pos=(
+                2,
+                3),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT,
+            border=0)
+        gridBagSizer.Add(
+            self.max, pos=(2, 4),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
-        
+
         # bindings
         self.Bind(wx.EVT_RADIOBUTTON, self.OnRaster, self.rasterDefault)
         self.Bind(wx.EVT_RADIOBUTTON, self.OnRaster, self.rasterOther)
@@ -2583,38 +3590,54 @@ class LegendDialog(PsmapDialog):
 ##        self.Bind(wx.EVT_CHECKBOX, self.OnDefaultSize, panel.defaultSize)
         self.Bind(wx.EVT_CHECKBOX, self.OnRange, self.range)
         self.rasterSelect.GetTextCtrl().Bind(wx.EVT_TEXT, self.OnRaster)
-        
+
         return panel
-    
+
     def _vectorLegend(self, notebook):
-        panel = scrolled.ScrolledPanel(parent = notebook, id = wx.ID_ANY, size = (-1, 500), style = wx.TAB_TRAVERSAL)
-        panel.SetupScrolling(scroll_x = False, scroll_y = True)
+        panel = scrolled.ScrolledPanel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, 500),
+            style=wx.TAB_TRAVERSAL)
+        panel.SetupScrolling(scroll_x=False, scroll_y=True)
         panel.SetName('vectorPanel')
-        notebook.AddPage(page = panel, text = _("Vector legend"))
+        notebook.AddPage(page=panel, text=_("Vector legend"))
 
         border = wx.BoxSizer(wx.VERTICAL)
         # is legend
-        self.isVLegend = wx.CheckBox(panel, id = wx.ID_ANY, label = _("Show vector legend"))
+        self.isVLegend = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("Show vector legend"))
         self.isVLegend.SetValue(self.vLegendDict['vLegend'])
         self.isVLegend.SetName("showVLegend")
-        border.Add(item = self.isVLegend, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        #vector maps, their order, labels
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Source vector maps"))
+        border.Add(
+            item=self.isVLegend,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+
+        # vector maps, their order, labels
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Source vector maps"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        vectorText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Choose vector maps and their order in legend"))
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        vectorText = wx.StaticText(panel, id=wx.ID_ANY, label=_(
+            "Choose vector maps and their order in legend"))
 
         self.vectorListCtrl = CheckListCtrl(panel)
-        
+
         self.vectorListCtrl.InsertColumn(0, _("Vector map"))
         self.vectorListCtrl.InsertColumn(1, _("Label"))
         if self.vectorId:
-            vectors = sorted(self.instruction[self.vectorId]['list'], key = lambda x: x[3])
-            
+            vectors = sorted(
+                self.instruction[
+                    self.vectorId]['list'],
+                key=lambda x: x[3])
+
             for vector in vectors:
-                index = self.vectorListCtrl.InsertStringItem(sys.maxint, vector[0].split('@')[0])
+                index = self.vectorListCtrl.InsertStringItem(
+                    self.vectorListCtrl.GetItemCount(), vector[0].split('@')[0])
                 self.vectorListCtrl.SetStringItem(index, 1, vector[4])
                 self.vectorListCtrl.SetItemData(index, index)
                 self.vectorListCtrl.CheckItem(index, True)
@@ -2625,191 +3648,350 @@ class LegendDialog(PsmapDialog):
         else:
             self.vectorListCtrl.SetColumnWidth(0, wx.LIST_AUTOSIZE)
         self.vectorListCtrl.SetColumnWidth(1, wx.LIST_AUTOSIZE)
-        
-        self.btnUp = wx.Button(panel, id = wx.ID_ANY, label = _("Up"))
-        self.btnDown = wx.Button(panel, id = wx.ID_ANY, label = _("Down"))
-        self.btnLabel = wx.Button(panel, id = wx.ID_ANY, label = _("Edit label"))
-      
-        gridBagSizer.Add(vectorText, pos = (0,0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.vectorListCtrl, pos = (1,0), span = (3,1), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(self.btnUp, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.btnDown, pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.btnLabel, pos = (3,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        gridBagSizer.AddGrowableCol(0,3)
-        gridBagSizer.AddGrowableCol(1,1)
-        sizer.Add(gridBagSizer, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        self.btnUp = wx.Button(panel, id=wx.ID_ANY, label=_("Up"))
+        self.btnDown = wx.Button(panel, id=wx.ID_ANY, label=_("Down"))
+        self.btnLabel = wx.Button(panel, id=wx.ID_ANY, label=_("Edit label"))
+
+        gridBagSizer.Add(
+            vectorText, pos=(
+                0, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.vectorListCtrl, pos=(
+                1, 0), span=(
+                3, 1), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            self.btnUp, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.btnDown, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.btnLabel, pos=(3, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        gridBagSizer.AddGrowableCol(0, 3)
+        gridBagSizer.AddGrowableCol(1, 1)
+        sizer.Add(
+            gridBagSizer,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # size, position and font
-        self.sizePositionFont(legendType = 'vector', parent = panel, mainSizer = border)
-         
+        self.sizePositionFont(
+            legendType='vector',
+            parent=panel,
+            mainSizer=border)
+
         # border
         # GTC  Line around legend or map frame
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Border"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Border"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexGridSizer = wx.FlexGridSizer(cols = 2, hgap = 5, vgap = 5)
-        
-        self.borderCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("draw border around legend"))
-        self.borderColorCtrl = wx.ColourPickerCtrl(panel, id = wx.ID_ANY, style = wx.FNTP_FONTDESC_AS_LABEL)
+        flexGridSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+
+        self.borderCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("draw border around legend"))
+        self.borderColorCtrl = wx.ColourPickerCtrl(
+            panel, id=wx.ID_ANY, style=wx.FNTP_FONTDESC_AS_LABEL)
         if self.vLegendDict['border'] == 'none':
             self.borderColorCtrl.SetColour(wx.BLACK)
             self.borderCheck.SetValue(False)
         else:
-            self.borderColorCtrl.SetColour(convertRGB(self.vLegendDict['border']))
+            self.borderColorCtrl.SetColour(
+                convertRGB(self.vLegendDict['border']))
             self.borderCheck.SetValue(True)
-            
-        flexGridSizer.Add(self.borderCheck, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)    
-        flexGridSizer.Add(self.borderColorCtrl, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        sizer.Add(item = flexGridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        flexGridSizer.Add(
+            self.borderCheck,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexGridSizer.Add(
+            self.borderColorCtrl,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        sizer.Add(
+            item=flexGridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(wx.EVT_BUTTON, self.OnUp, self.btnUp)
-        self.Bind(wx.EVT_BUTTON, self.OnDown, self.btnDown)  
+        self.Bind(wx.EVT_BUTTON, self.OnDown, self.btnDown)
         self.Bind(wx.EVT_BUTTON, self.OnEditLabel, self.btnLabel)
-        self.Bind(wx.EVT_CHECKBOX, self.OnIsLegend, self.isVLegend)    
-        self.Bind(wx.EVT_CHECKBOX, self.OnSpan, panel.spanRadio)  
+        self.Bind(wx.EVT_CHECKBOX, self.OnIsLegend, self.isVLegend)
+        self.Bind(wx.EVT_CHECKBOX, self.OnSpan, panel.spanRadio)
         self.Bind(wx.EVT_CHECKBOX, self.OnBorder, self.borderCheck)
-        self.Bind(wx.EVT_FONTPICKER_CHANGED, self.OnFont, panel.font['fontCtrl']) 
-        
+        self.Bind(
+            wx.EVT_FONTPICKER_CHANGED,
+            self.OnFont,
+            panel.font['fontCtrl'])
+
         panel.SetSizer(border)
-        
+
         panel.Fit()
         return panel
-    
+
     def sizePositionFont(self, legendType, parent, mainSizer):
         """Insert widgets for size, position and font control"""
         if legendType == 'raster':
-            legendDict = self.rLegendDict  
+            legendDict = self.rLegendDict
         else:
             legendDict = self.vLegendDict
         panel = parent
         border = mainSizer
-        
-        # size and position        
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Size and position"))
+
+        # size and position
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Size and position"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        #unit
-        self.AddUnits(parent = panel, dialogDict = legendDict)
+        # unit
+        self.AddUnits(parent=panel, dialogDict=legendDict)
         unitBox = wx.BoxSizer(wx.HORIZONTAL)
-        unitBox.Add(panel.units['unitsLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border = 10)
-        unitBox.Add(panel.units['unitsCtrl'], proportion = 1, flag = wx.ALL, border = 5)
-        sizer.Add(unitBox, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
+        unitBox.Add(
+            panel.units['unitsLabel'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=10)
+        unitBox.Add(
+            panel.units['unitsCtrl'],
+            proportion=1,
+            flag=wx.ALL,
+            border=5)
+        sizer.Add(
+            unitBox,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+
         hBox = wx.BoxSizer(wx.HORIZONTAL)
-        posBox = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " %_("Position"))
-        posSizer = wx.StaticBoxSizer(posBox, wx.VERTICAL)       
-        sizeBox = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Size"))
-        sizeSizer = wx.StaticBoxSizer(sizeBox, wx.VERTICAL) 
-        posGridBagSizer = wx.GridBagSizer(hgap = 10, vgap = 5)
-        
-        #position
-        self.AddPosition(parent = panel, dialogDict = legendDict)
-        
-        posGridBagSizer.Add(panel.position['xLabel'], pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        posGridBagSizer.Add(panel.position['xCtrl'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        posGridBagSizer.Add(panel.position['yLabel'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        posGridBagSizer.Add(panel.position['yCtrl'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        posGridBagSizer.Add(panel.position['comment'], pos = (2,0), span = (1,2), flag =wx.ALIGN_BOTTOM, border = 0)
+        posBox = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Position"))
+        posSizer = wx.StaticBoxSizer(posBox, wx.VERTICAL)
+        sizeBox = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Size"))
+        sizeSizer = wx.StaticBoxSizer(sizeBox, wx.VERTICAL)
+        posGridBagSizer = wx.GridBagSizer(hgap=10, vgap=5)
+
+        # position
+        self.AddPosition(parent=panel, dialogDict=legendDict)
+
+        posGridBagSizer.Add(panel.position['xLabel'], pos=(
+            0, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        posGridBagSizer.Add(panel.position['xCtrl'], pos=(
+            0, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        posGridBagSizer.Add(panel.position['yLabel'], pos=(
+            1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        posGridBagSizer.Add(panel.position['yCtrl'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        posGridBagSizer.Add(
+            panel.position['comment'], pos=(
+                2, 0), span=(
+                1, 2), flag=wx.ALIGN_BOTTOM, border=0)
         posGridBagSizer.AddGrowableRow(2)
-        posSizer.Add(posGridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        
-        #size
-        width = wx.StaticText(panel, id = wx.ID_ANY, label = _("Width:"))
+        posSizer.Add(
+            posGridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+
+        # size
+        width = wx.StaticText(panel, id=wx.ID_ANY, label=_("Width:"))
         if legendDict['width']:
-            w = self.unitConv.convert(value = float(legendDict['width']), fromUnit = 'inch', toUnit = legendDict['unit'])
-        else: 
+            w = self.unitConv.convert(
+                value=float(legendDict['width']),
+                fromUnit='inch', toUnit=legendDict['unit'])
+        else:
             w = ''
-        panel.widthCtrl = wx.TextCtrl(panel, id = wx.ID_ANY, value = str(w), validator = TCValidator("DIGIT_ONLY"))
-        panel.widthCtrl.SetToolTipString(_("Leave the edit field empty, to use default values."))
-        
+        panel.widthCtrl = wx.TextCtrl(
+            panel, id=wx.ID_ANY, value=str(w),
+            validator=TCValidator("DIGIT_ONLY"))
+        panel.widthCtrl.SetToolTipString(
+            _("Leave the edit field empty, to use default values."))
+
         if legendType == 'raster':
-##            panel.defaultSize = wx.CheckBox(panel, id = wx.ID_ANY, label = _("Use default size"))
-##            panel.defaultSize.SetValue(legendDict['defaultSize'])
-            
-            panel.heightOrColumnsLabel = wx.StaticText(panel, id = wx.ID_ANY, label = _("Height:"))
+            ##            panel.defaultSize = wx.CheckBox(panel, id = wx.ID_ANY, label = _("Use default size"))
+            # panel.defaultSize.SetValue(legendDict['defaultSize'])
+
+            panel.heightOrColumnsLabel = wx.StaticText(
+                panel, id=wx.ID_ANY, label=_("Height:"))
             if legendDict['height']:
-                h = self.unitConv.convert(value = float(legendDict['height']), fromUnit = 'inch', toUnit = legendDict['unit'])
+                h = self.unitConv.convert(
+                    value=float(legendDict['height']),
+                    fromUnit='inch', toUnit=legendDict['unit'])
             else:
                 h = ''
-            panel.heightOrColumnsCtrl = wx.TextCtrl(panel, id = wx.ID_ANY, value = str(h), validator = TCValidator("DIGIT_ONLY"))
-            
-            self.rSizeGBSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
+            panel.heightOrColumnsCtrl = wx.TextCtrl(
+                panel, id=wx.ID_ANY, value=str(h),
+                validator=TCValidator("DIGIT_ONLY"))
+
+            self.rSizeGBSizer = wx.GridBagSizer(hgap=5, vgap=5)
 ##            self.rSizeGBSizer.Add(panel.defaultSize, pos = (0,0), span = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.rSizeGBSizer.Add(width, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.rSizeGBSizer.Add(panel.widthCtrl, pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.rSizeGBSizer.Add(panel.heightOrColumnsLabel, pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.rSizeGBSizer.Add(panel.heightOrColumnsCtrl, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            sizeSizer.Add(self.rSizeGBSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-            
+            self.rSizeGBSizer.Add(
+                width, pos=(0, 0),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.rSizeGBSizer.Add(
+                panel.widthCtrl, pos=(0, 1),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.rSizeGBSizer.Add(
+                panel.heightOrColumnsLabel, pos=(
+                    1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.rSizeGBSizer.Add(
+                panel.heightOrColumnsCtrl, pos=(
+                    1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            sizeSizer.Add(
+                self.rSizeGBSizer,
+                proportion=1,
+                flag=wx.EXPAND | wx.ALL,
+                border=5)
+
         if legendType == 'vector':
-            panel.widthCtrl.SetToolTipString(_("Width of the color symbol (for lines)\nin front of the legend text")) 
-            #columns
+            panel.widthCtrl.SetToolTipString(
+                _("Width of the color symbol (for lines)\nin front of the legend text"))
+            # columns
             minVect, maxVect = 0, 0
             if self.vectorId:
                 minVect = 1
                 maxVect = min(10, len(self.instruction[self.vectorId]['list']))
-            cols = wx.StaticText(panel, id = wx.ID_ANY, label = _("Columns:"))
-            panel.colsCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, value = "",
-                                        min = minVect, max = maxVect, initial = legendDict['cols'])
-            #span
-            panel.spanRadio = wx.CheckBox(panel, id = wx.ID_ANY, label = _("column span:"))
-            panel.spanTextCtrl = wx.TextCtrl(panel, id = wx.ID_ANY, value = '')
-            panel.spanTextCtrl.SetToolTipString(_("Column separation distance between the left edges\n"\
-                                                "of two columns in a multicolumn legend"))
+            cols = wx.StaticText(panel, id=wx.ID_ANY, label=_("Columns:"))
+            panel.colsCtrl = wx.SpinCtrl(
+                panel,
+                id=wx.ID_ANY,
+                value="",
+                min=minVect,
+                max=maxVect,
+                initial=legendDict['cols'])
+            # span
+            panel.spanRadio = wx.CheckBox(
+                panel, id=wx.ID_ANY, label=_("column span:"))
+            panel.spanTextCtrl = wx.TextCtrl(panel, id=wx.ID_ANY, value='')
+            panel.spanTextCtrl.SetToolTipString(_("Column separation distance between the left edges\n"
+                                                  "of two columns in a multicolumn legend"))
             if legendDict['span']:
                 panel.spanRadio.SetValue(True)
-                s = self.unitConv.convert(value = float(legendDict['span']), fromUnit = 'inch', toUnit = legendDict['unit'])    
+                s = self.unitConv.convert(
+                    value=float(legendDict['span']),
+                    fromUnit='inch', toUnit=legendDict['unit'])
                 panel.spanTextCtrl.SetValue(str(s))
             else:
                 panel.spanRadio.SetValue(False)
-                
-            self.vSizeGBSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-            self.vSizeGBSizer.Add(width, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.vSizeGBSizer.Add(panel.widthCtrl, pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.vSizeGBSizer.Add(cols, pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.vSizeGBSizer.Add(panel.colsCtrl, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.vSizeGBSizer.Add(panel.spanRadio, pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-            self.vSizeGBSizer.Add(panel.spanTextCtrl, pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+
+            self.vSizeGBSizer = wx.GridBagSizer(hgap=5, vgap=5)
+            self.vSizeGBSizer.Add(
+                width, pos=(0, 0),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.vSizeGBSizer.Add(
+                panel.widthCtrl, pos=(0, 1),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.vSizeGBSizer.Add(
+                cols, pos=(1, 0),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.vSizeGBSizer.Add(
+                panel.colsCtrl, pos=(1, 1),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.vSizeGBSizer.Add(
+                panel.spanRadio, pos=(2, 0),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+            self.vSizeGBSizer.Add(
+                panel.spanTextCtrl, pos=(2, 1),
+                flag=wx.ALIGN_CENTER_VERTICAL, border=0)
             self.vSizeGBSizer.AddGrowableCol(1)
-            sizeSizer.Add(self.vSizeGBSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)        
-        
-        hBox.Add(posSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 3)
-        hBox.Add(sizeSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 3)
-        sizer.Add(hBox, proportion = 0, flag = wx.EXPAND, border = 0)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-              
-        # font        
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Font settings"))
+            sizeSizer.Add(
+                self.vSizeGBSizer,
+                proportion=1,
+                flag=wx.EXPAND | wx.ALL,
+                border=5)
+
+        hBox.Add(posSizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=3)
+        hBox.Add(sizeSizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=3)
+        sizer.Add(hBox, proportion=0, flag=wx.EXPAND, border=0)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        # font
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Font settings"))
         fontSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
-        
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+
         if legendType == 'raster':
-            self.AddFont(parent = panel, dialogDict = legendDict, color = True)
+            self.AddFont(parent=panel, dialogDict=legendDict, color=True)
         else:
-            self.AddFont(parent = panel, dialogDict = legendDict, color = False)            
-        flexSizer.Add(panel.font['fontLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(panel.font['fontCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(panel.font['fontSizeLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(panel.font['fontSizeCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+            self.AddFont(parent=panel, dialogDict=legendDict, color=False)
+        flexSizer.Add(
+            panel.font['fontLabel'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            panel.font['fontCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            panel.font['fontSizeLabel'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            panel.font['fontSizeCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
         if legendType == 'raster':
-            flexSizer.Add(panel.font['colorLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-            flexSizer.Add(panel.font['colorCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+            flexSizer.Add(
+                panel.font['colorLabel'],
+                proportion=0,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                border=0)
+            flexSizer.Add(
+                panel.font['colorCtrl'],
+                proportion=0,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                border=0)
         flexSizer.AddGrowableCol(1)
-        
-        fontSizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = fontSizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)    
 
-    #   some enable/disable methods  
-        
+        fontSizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(
+            item=fontSizer,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
+
+    #   some enable/disable methods
+
     def OnIsLegend(self, event):
         """Enables and disables controls, it depends if raster or vector legend is checked"""
         page = self.notebook.GetSelection()
         if page == 0 or event is None:
             children = self.panelRaster.GetChildren()
             if self.isRLegend.GetValue():
-                for i,widget in enumerate(children):
-                        widget.Enable()
+                for i, widget in enumerate(children):
+                    widget.Enable()
                 self.OnRaster(None)
                 self.OnRange(None)
                 self.OnDiscrete(None)
@@ -2821,23 +4003,23 @@ class LegendDialog(PsmapDialog):
             children = self.panelVector.GetChildren()
             if self.isVLegend.GetValue():
                 for i, widget in enumerate(children):
-                        widget.Enable()
+                    widget.Enable()
                 self.OnSpan(None)
                 self.OnBorder(None)
             else:
                 for widget in children:
                     if widget.GetName() != 'showVLegend':
                         widget.Disable()
-                    
+
     def OnRaster(self, event):
-        if self.rasterDefault.GetValue():#default
+        if self.rasterDefault.GetValue():  # default
             self.rasterSelect.Disable()
             type = getRasterType(self.currRaster)
-        else:#select raster
+        else:  # select raster
             self.rasterSelect.Enable()
             map = self.rasterSelect.GetValue()
             type = getRasterType(map)
-  
+
         if type == 'CELL':
             self.discrete.SetValue(True)
         elif type in ('FCELL', 'DCELL'):
@@ -2848,14 +4030,16 @@ class LegendDialog(PsmapDialog):
             elif self.rLegendDict['discrete'] == 'n':
                 self.continuous.SetValue(True)
         self.OnDiscrete(None)
-        
+
     def OnDiscrete(self, event):
         """Change control according to the type of legend"""
         enabledSize = self.panelRaster.heightOrColumnsCtrl.IsEnabled()
         self.panelRaster.heightOrColumnsCtrl.Destroy()
         if self.discrete.GetValue():
             self.panelRaster.heightOrColumnsLabel.SetLabel(_("Columns:"))
-            self.panelRaster.heightOrColumnsCtrl = wx.SpinCtrl(self.panelRaster, id = wx.ID_ANY, value = "", min = 1, max = 10, initial = self.rLegendDict['cols'])
+            self.panelRaster.heightOrColumnsCtrl = wx.SpinCtrl(
+                self.panelRaster, id=wx.ID_ANY, value="", min=1, max=10,
+                initial=self.rLegendDict['cols'])
             self.panelRaster.heightOrColumnsCtrl.Enable(enabledSize)
             self.nodata.Enable()
             self.range.Disable()
@@ -2867,11 +4051,16 @@ class LegendDialog(PsmapDialog):
         else:
             self.panelRaster.heightOrColumnsLabel.SetLabel(_("Height:"))
             if self.rLegendDict['height']:
-                h = self.unitConv.convert(value = float(self.rLegendDict['height']), fromUnit = 'inch', toUnit = self.rLegendDict['unit'])
+                h = self.unitConv.convert(
+                    value=float(
+                        self.rLegendDict['height']),
+                    fromUnit='inch',
+                    toUnit=self.rLegendDict['unit'])
             else:
                 h = ''
-            self.panelRaster.heightOrColumnsCtrl = wx.TextCtrl(self.panelRaster, id = wx.ID_ANY,
-                                                    value = str(h), validator = TCValidator("DIGIT_ONLY"))
+            self.panelRaster.heightOrColumnsCtrl = wx.TextCtrl(
+                self.panelRaster, id=wx.ID_ANY, value=str(h),
+                validator=TCValidator("DIGIT_ONLY"))
             self.panelRaster.heightOrColumnsCtrl.Enable(enabledSize)
             self.nodata.Disable()
             self.range.Enable()
@@ -2881,23 +4070,25 @@ class LegendDialog(PsmapDialog):
                 self.min.Enable()
                 self.max.Enable()
             self.ticks.Enable()
-        
-        self.rSizeGBSizer.Add(self.panelRaster.heightOrColumnsCtrl, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+
+        self.rSizeGBSizer.Add(
+            self.panelRaster.heightOrColumnsCtrl, pos=(
+                1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
         self.panelRaster.Layout()
-        self.panelRaster.Fit()   
-        
+        self.panelRaster.Fit()
+
     def OnRange(self, event):
         if not self.range.GetValue():
-            self.min.Disable()        
+            self.min.Disable()
             self.max.Disable()
             self.minText.Disable()
             self.maxText.Disable()
         else:
-            self.min.Enable()        
-            self.max.Enable() 
+            self.min.Enable()
+            self.max.Enable()
             self.minText.Enable()
-            self.maxText.Enable()           
-     
+            self.maxText.Enable()
+
     def OnUp(self, event):
         """Moves selected map up, changes order in vector legend"""
         if self.vectorListCtrl.GetFirstSelected() != -1:
@@ -2905,16 +4096,16 @@ class LegendDialog(PsmapDialog):
             if pos:
                 idx1 = self.vectorListCtrl.GetItemData(pos) - 1
                 idx2 = self.vectorListCtrl.GetItemData(pos - 1) + 1
-                self.vectorListCtrl.SetItemData(pos, idx1) 
-                self.vectorListCtrl.SetItemData(pos - 1, idx2) 
+                self.vectorListCtrl.SetItemData(pos, idx1)
+                self.vectorListCtrl.SetItemData(pos - 1, idx2)
                 self.vectorListCtrl.SortItems(cmp)
                 if pos > 0:
-                    selected = (pos - 1) 
+                    selected = (pos - 1)
                 else:
                     selected = 0
 
                 self.vectorListCtrl.Select(selected)
-       
+
     def OnDown(self, event):
         """Moves selected map down, changes order in vector legend"""
         if self.vectorListCtrl.GetFirstSelected() != -1:
@@ -2922,53 +4113,61 @@ class LegendDialog(PsmapDialog):
             if pos != self.vectorListCtrl.GetItemCount() - 1:
                 idx1 = self.vectorListCtrl.GetItemData(pos) + 1
                 idx2 = self.vectorListCtrl.GetItemData(pos + 1) - 1
-                self.vectorListCtrl.SetItemData(pos, idx1) 
-                self.vectorListCtrl.SetItemData(pos + 1, idx2) 
+                self.vectorListCtrl.SetItemData(pos, idx1)
+                self.vectorListCtrl.SetItemData(pos + 1, idx2)
                 self.vectorListCtrl.SortItems(cmp)
-                if pos < self.vectorListCtrl.GetItemCount() -1:
-                    selected = (pos + 1) 
+                if pos < self.vectorListCtrl.GetItemCount() - 1:
+                    selected = (pos + 1)
                 else:
-                    selected = self.vectorListCtrl.GetItemCount() -1
+                    selected = self.vectorListCtrl.GetItemCount() - 1
 
                 self.vectorListCtrl.Select(selected)
-                
+
     def OnEditLabel(self, event):
         """Change legend label of vector map"""
         if self.vectorListCtrl.GetFirstSelected() != -1:
             idx = self.vectorListCtrl.GetFirstSelected()
             default = self.vectorListCtrl.GetItem(idx, 1).GetText()
-            dlg = wx.TextEntryDialog(self, message = _("Edit legend label:"), caption = _("Edit label"),
-                                    defaultValue = default, style = wx.OK|wx.CANCEL|wx.CENTRE)
+            dlg = wx.TextEntryDialog(
+                self,
+                message=_("Edit legend label:"),
+                caption=_("Edit label"),
+                defaultValue=default,
+                style=wx.OK | wx.CANCEL | wx.CENTRE)
             if dlg.ShowModal() == wx.ID_OK:
                 new = dlg.GetValue()
                 self.vectorListCtrl.SetStringItem(idx, 1, new)
             dlg.Destroy()
-        
+
     def OnSpan(self, event):
-        self.panelVector.spanTextCtrl.Enable(self.panelVector.spanRadio.GetValue())
+        self.panelVector.spanTextCtrl.Enable(
+            self.panelVector.spanRadio.GetValue())
+
     def OnFont(self, event):
-        """Changes default width according to fontsize, width [inch] = fontsize[pt]/24""" 
-##        fontsize = self.panelVector.font['fontCtrl'].GetSelectedFont().GetPointSize() 
+        """Changes default width according to fontsize, width [inch] = fontsize[pt]/24"""
+##        fontsize = self.panelVector.font['fontCtrl'].GetSelectedFont().GetPointSize()
         fontsize = self.panelVector.font['fontSizeCtrl'].GetValue()
-        unit = self.unitConv.findUnit(self.panelVector.units['unitsCtrl'].GetStringSelection())
-        w = fontsize/24.
-        width = self.unitConv.convert(value = w, fromUnit = 'inch', toUnit = unit)
+        unit = self.unitConv.findUnit(
+            self.panelVector.units['unitsCtrl'].GetStringSelection())
+        w = fontsize / 24.
+        width = self.unitConv.convert(value=w, fromUnit='inch', toUnit=unit)
         self.panelVector.widthCtrl.SetValue("%3.2f" % width)
-        
+
     def OnBorder(self, event):
-        """Enables/disables colorPickerCtrl for border"""  
+        """Enables/disables colorPickerCtrl for border"""
         self.borderColorCtrl.Enable(self.borderCheck.GetValue())
-    
+
     def updateRasterLegend(self):
         """Save information from raster legend dialog to dictionary"""
 
-        #is raster legend
+        # is raster legend
         if not self.isRLegend.GetValue():
             self.rLegendDict['rLegend'] = False
         else:
             self.rLegendDict['rLegend'] = True
-        #units
-        currUnit = self.unitConv.findUnit(self.panelRaster.units['unitsCtrl'].GetStringSelection())
+        # units
+        currUnit = self.unitConv.findUnit(
+            self.panelRaster.units['unitsCtrl'].GetStringSelection())
         self.rLegendDict['unit'] = currUnit
         # raster
         if self.rasterDefault.GetValue():
@@ -2978,61 +4177,80 @@ class LegendDialog(PsmapDialog):
             self.rLegendDict['rasterDefault'] = False
             self.rLegendDict['raster'] = self.rasterSelect.GetValue()
         if self.rLegendDict['rLegend'] and not self.rLegendDict['raster']:
-            wx.MessageBox(message = _("No raster map selected!"),
-                                    caption = _('No raster'), style = wx.OK|wx.ICON_ERROR)
+            wx.MessageBox(message=_("No raster map selected!"),
+                          caption=_('No raster'), style=wx.OK | wx.ICON_ERROR)
             return False
-            
+
         if self.rLegendDict['raster']:
             # type and range of map
             rasterType = getRasterType(self.rLegendDict['raster'])
             if rasterType is None:
                 return False
             self.rLegendDict['type'] = rasterType
-            
-            
-            #discrete
+
+            # discrete
             if self.discrete.GetValue():
                 self.rLegendDict['discrete'] = 'y'
             else:
-                self.rLegendDict['discrete'] = 'n'   
-                    
-            # font 
-            self.rLegendDict['font'] = self.panelRaster.font['fontCtrl'].GetStringSelection()
-            self.rLegendDict['fontsize'] = self.panelRaster.font['fontSizeCtrl'].GetValue()
+                self.rLegendDict['discrete'] = 'n'
+
+            # font
+            self.rLegendDict['font'] = self.panelRaster.font[
+                'fontCtrl'].GetStringSelection()
+            self.rLegendDict['fontsize'] = self.panelRaster.font[
+                'fontSizeCtrl'].GetValue()
             color = self.panelRaster.font['colorCtrl'].GetColour()
             self.rLegendDict['color'] = convertRGB(color)
 
             # position
-            x = self.unitConv.convert(value = float(self.panelRaster.position['xCtrl'].GetValue()), fromUnit = currUnit, toUnit = 'inch')
-            y = self.unitConv.convert(value = float(self.panelRaster.position['yCtrl'].GetValue()), fromUnit = currUnit, toUnit = 'inch')
+            x = self.unitConv.convert(
+                value=float(
+                    self.panelRaster.position
+                    ['xCtrl'].GetValue()),
+                fromUnit=currUnit, toUnit='inch')
+            y = self.unitConv.convert(
+                value=float(
+                    self.panelRaster.position
+                    ['yCtrl'].GetValue()),
+                fromUnit=currUnit, toUnit='inch')
             self.rLegendDict['where'] = (x, y)
             # estimated size
             width = self.panelRaster.widthCtrl.GetValue()
             try:
                 width = float(width)
-                width = self.unitConv.convert(value = width, fromUnit = currUnit, toUnit = 'inch')
+                width = self.unitConv.convert(
+                    value=width, fromUnit=currUnit, toUnit='inch')
             except ValueError:
                 width = None
             self.rLegendDict['width'] = width
             if self.rLegendDict['discrete'] == 'n':
-                height = self.panelRaster.heightOrColumnsCtrl.GetValue()    
+                height = self.panelRaster.heightOrColumnsCtrl.GetValue()
                 try:
                     height = float(height)
-                    height = self.unitConv.convert(value = height, fromUnit = currUnit, toUnit = 'inch')
+                    height = self.unitConv.convert(
+                        value=height, fromUnit=currUnit, toUnit='inch')
                 except ValueError:
                     height = None
                 self.rLegendDict['height'] = height
             else:
                 cols = self.panelRaster.heightOrColumnsCtrl.GetValue()
                 self.rLegendDict['cols'] = cols
-            drawHeight = self.rasterLegend.EstimateHeight(raster = self.rLegendDict['raster'], discrete = self.rLegendDict['discrete'],
-                                            fontsize = self.rLegendDict['fontsize'], cols = self.rLegendDict['cols'],
-                                            height = self.rLegendDict['height'])
-            drawWidth = self.rasterLegend.EstimateWidth(raster = self.rLegendDict['raster'], discrete = self.rLegendDict['discrete'],
-                                            fontsize = self.rLegendDict['fontsize'], cols = self.rLegendDict['cols'],
-                                            width = self.rLegendDict['width'], paperInstr = self.instruction[self.pageId])
-            self.rLegendDict['rect'] = Rect2D(x = x, y = y, width = drawWidth, height = drawHeight)
-                        
+            drawHeight = self.rasterLegend.EstimateHeight(
+                raster=self.rLegendDict['raster'],
+                discrete=self.rLegendDict['discrete'],
+                fontsize=self.rLegendDict['fontsize'],
+                cols=self.rLegendDict['cols'],
+                height=self.rLegendDict['height'])
+            drawWidth = self.rasterLegend.EstimateWidth(
+                raster=self.rLegendDict['raster'],
+                discrete=self.rLegendDict['discrete'],
+                fontsize=self.rLegendDict['fontsize'],
+                cols=self.rLegendDict['cols'],
+                width=self.rLegendDict['width'],
+                paperInstr=self.instruction[self.pageId])
+            self.rLegendDict['rect'] = Rect2D(
+                x=x, y=y, width=drawWidth, height=drawHeight)
+
             # no data
             if self.rLegendDict['discrete'] == 'y':
                 if self.nodata.GetValue():
@@ -3052,7 +4270,7 @@ class LegendDialog(PsmapDialog):
                     self.rLegendDict['max'] = self.max.GetValue()
                 else:
                     self.rLegendDict['range'] = False
-         
+
         if not self.id[0] in self.instruction:
             rasterLegend = RasterLegend(self.id[0])
             self.instruction.AddInstruction(rasterLegend)
@@ -3061,24 +4279,24 @@ class LegendDialog(PsmapDialog):
         if self.id[0] not in self.parent.objectId:
             self.parent.objectId.append(self.id[0])
         return True
-    
+
     def updateVectorLegend(self):
         """Save information from vector legend dialog to dictionary"""
 
         vector = self.instruction.FindInstructionByType('vector')
         if vector:
-            self.vectorId = vector.id 
+            self.vectorId = vector.id
         else:
             self.vectorId = None
 
-        #is vector legend
+        # is vector legend
         if not self.isVLegend.GetValue():
             self.vLegendDict['vLegend'] = False
         else:
-            self.vLegendDict['vLegend'] = True   
+            self.vLegendDict['vLegend'] = True
         if self.vLegendDict['vLegend'] == True and self.vectorId is not None:
             # labels
-            #reindex order
+            # reindex order
             idx = 1
             for item in range(self.vectorListCtrl.GetItemCount()):
                 if self.vectorListCtrl.IsChecked(item):
@@ -3086,63 +4304,83 @@ class LegendDialog(PsmapDialog):
                     idx += 1
                 else:
                     self.vectorListCtrl.SetItemData(item, 0)
-            if idx == 1: 
-                self.vLegendDict['vLegend'] = False     
+            if idx == 1:
+                self.vLegendDict['vLegend'] = False
             else:
                 vList = self.instruction[self.vectorId]['list']
                 for i, vector in enumerate(vList):
-                    item = self.vectorListCtrl.FindItem(start = -1, str = vector[0].split('@')[0])
+                    item = self.vectorListCtrl.FindItem(
+                        start=-1, str=vector[0].split('@')[0])
                     vList[i][3] = self.vectorListCtrl.GetItemData(item)
-                    vList[i][4] = self.vectorListCtrl.GetItem(item, 1).GetText()
-                vmaps = self.instruction.FindInstructionByType('vProperties', list = True)
+                    vList[i][4] = self.vectorListCtrl.GetItem(
+                        item, 1).GetText()
+                vmaps = self.instruction.FindInstructionByType(
+                    'vProperties', list=True)
                 for vmap, vector in zip(vmaps, vList):
                     self.instruction[vmap.id]['lpos'] = vector[3]
                     self.instruction[vmap.id]['label'] = vector[4]
-                #units
-                currUnit = self.unitConv.findUnit(self.panelVector.units['unitsCtrl'].GetStringSelection())
+                # units
+                currUnit = self.unitConv.findUnit(
+                    self.panelVector.units['unitsCtrl'].GetStringSelection())
                 self.vLegendDict['unit'] = currUnit
                 # position
-                x = self.unitConv.convert(value = float(self.panelVector.position['xCtrl'].GetValue()),
-                                                                fromUnit = currUnit, toUnit = 'inch')
-                y = self.unitConv.convert(value = float(self.panelVector.position['yCtrl'].GetValue()),
-                                                                fromUnit = currUnit, toUnit = 'inch')
+                x = self.unitConv.convert(
+                    value=float(
+                        self.panelVector.position['xCtrl'].GetValue()),
+                    fromUnit=currUnit,
+                    toUnit='inch')
+                y = self.unitConv.convert(
+                    value=float(
+                        self.panelVector.position['yCtrl'].GetValue()),
+                    fromUnit=currUnit,
+                    toUnit='inch')
                 self.vLegendDict['where'] = (x, y)
-                
-                # font 
-                self.vLegendDict['font'] = self.panelVector.font['fontCtrl'].GetStringSelection()
-                self.vLegendDict['fontsize'] = self.panelVector.font['fontSizeCtrl'].GetValue()
+
+                # font
+                self.vLegendDict['font'] = self.panelVector.font[
+                    'fontCtrl'].GetStringSelection()
+                self.vLegendDict['fontsize'] = self.panelVector.font[
+                    'fontSizeCtrl'].GetValue()
                 dc = wx.ClientDC(self)
-                dc.SetFont(wx.Font(pointSize = self.vLegendDict['fontsize'], family = wx.FONTFAMILY_DEFAULT,
-                                   style = wx.FONTSTYLE_NORMAL, weight = wx.FONTWEIGHT_NORMAL))
-                #size
-                width = self.unitConv.convert(value = float(self.panelVector.widthCtrl.GetValue()),
-                                              fromUnit = currUnit, toUnit = 'inch')
+                dc.SetFont(
+                    wx.Font(
+                        pointSize=self.vLegendDict['fontsize'],
+                        family=wx.FONTFAMILY_DEFAULT,
+                        style=wx.FONTSTYLE_NORMAL,
+                        weight=wx.FONTWEIGHT_NORMAL))
+                # size
+                width = self.unitConv.convert(
+                    value=float(self.panelVector.widthCtrl.GetValue()),
+                    fromUnit=currUnit, toUnit='inch')
                 self.vLegendDict['width'] = width
                 self.vLegendDict['cols'] = self.panelVector.colsCtrl.GetValue()
                 if self.panelVector.spanRadio.GetValue() and self.panelVector.spanTextCtrl.GetValue():
-                    self.vLegendDict['span'] = self.panelVector.spanTextCtrl.GetValue()
+                    self.vLegendDict[
+                        'span'] = self.panelVector.spanTextCtrl.GetValue()
                 else:
                     self.vLegendDict['span'] = None
-                    
+
                 # size estimation
                 vectors = self.instruction[self.vectorId]['list']
                 labels = [vector[4] for vector in vectors if vector[3] != 0]
-                extent = dc.GetTextExtent(max(labels, key = len))
-                wExtent = self.unitConv.convert(value = extent[0], fromUnit = 'pixel', toUnit = 'inch')
-                hExtent = self.unitConv.convert(value = extent[1], fromUnit = 'pixel', toUnit = 'inch')
+                extent = dc.GetTextExtent(max(labels, key=len))
+                wExtent = self.unitConv.convert(
+                    value=extent[0], fromUnit='pixel', toUnit='inch')
+                hExtent = self.unitConv.convert(
+                    value=extent[1], fromUnit='pixel', toUnit='inch')
                 w = (width + wExtent) * self.vLegendDict['cols']
                 h = len(labels) * hExtent / self.vLegendDict['cols']
                 h *= 1.1
                 self.vLegendDict['rect'] = Rect2D(x, y, w, h)
-                
-                #border
+
+                # border
                 if self.borderCheck.GetValue():
                     color = self.borderColorCtrl.GetColour()
                     self.vLegendDict['border'] = convertRGB(color)
-                    
+
                 else:
                     self.vLegendDict['border'] = 'none'
-                                 
+
         if not self.id[1] in self.instruction:
             vectorLegend = VectorLegend(self.id[1])
             self.instruction.AddInstruction(vectorLegend)
@@ -3150,71 +4388,89 @@ class LegendDialog(PsmapDialog):
         if self.id[1] not in self.parent.objectId:
             self.parent.objectId.append(self.id[1])
         return True
-    
+
     def update(self):
         okR = self.updateRasterLegend()
         okV = self.updateVectorLegend()
         if okR and okV:
             return True
         return False
-        
+
     def updateDialog(self):
         """Update legend coordinates after moving"""
-        
-        # raster legend    
+
+        # raster legend
         if 'rect' in self.rLegendDict:
             x, y = self.rLegendDict['rect'][:2]
-            currUnit = self.unitConv.findUnit(self.panelRaster.units['unitsCtrl'].GetStringSelection())
-            x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-            y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+            currUnit = self.unitConv.findUnit(
+                self.panelRaster.units['unitsCtrl'].GetStringSelection())
+            x = self.unitConv.convert(
+                value=x, fromUnit='inch', toUnit=currUnit)
+            y = self.unitConv.convert(
+                value=y, fromUnit='inch', toUnit=currUnit)
             self.panelRaster.position['xCtrl'].SetValue("%5.3f" % x)
             self.panelRaster.position['yCtrl'].SetValue("%5.3f" % y)
-        #update name and type of raster
+        # update name and type of raster
         raster = self.instruction.FindInstructionByType('raster')
         if raster:
-            self.rasterId = raster.id 
+            self.rasterId = raster.id
         else:
-            self.rasterId = None 
+            self.rasterId = None
 
         if raster:
-            currRaster = raster['raster'] 
+            currRaster = raster['raster']
         else:
             currRaster = None
-            
-        rasterType = getRasterType(map = currRaster)
-        self.rasterCurrent.SetLabel(_("%(rast)s: type %(type)s") % \
-                                        { 'rast' : currRaster, 'type' : str(rasterType) })
-        
-        # vector legend       
+
+        rasterType = getRasterType(map=currRaster)
+        self.rasterCurrent.SetLabel(
+            _("%(rast)s: type %(type)s") %
+            {'rast': currRaster, 'type': str(rasterType)})
+
+        # vector legend
         if 'rect' in self.vLegendDict:
             x, y = self.vLegendDict['rect'][:2]
-            currUnit = self.unitConv.findUnit(self.panelVector.units['unitsCtrl'].GetStringSelection())
-            x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-            y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+            currUnit = self.unitConv.findUnit(
+                self.panelVector.units['unitsCtrl'].GetStringSelection())
+            x = self.unitConv.convert(
+                value=x, fromUnit='inch', toUnit=currUnit)
+            y = self.unitConv.convert(
+                value=y, fromUnit='inch', toUnit=currUnit)
             self.panelVector.position['xCtrl'].SetValue("%5.3f" % x)
             self.panelVector.position['yCtrl'].SetValue("%5.3f" % y)
         # update vector maps
         if self.instruction.FindInstructionByType('vector'):
-            vectors = sorted(self.instruction.FindInstructionByType('vector')['list'], key = lambda x: x[3])
+            vectors = sorted(
+                self.instruction.FindInstructionByType('vector')['list'],
+                key=lambda x: x[3])
             self.vectorListCtrl.DeleteAllItems()
             for vector in vectors:
-                index = self.vectorListCtrl.InsertStringItem(sys.maxint, vector[0].split('@')[0])
+                index = self.vectorListCtrl.InsertStringItem(
+                    self.vectorListCtrl.GetItemCount(), vector[0].split('@')[0])
                 self.vectorListCtrl.SetStringItem(index, 1, vector[4])
                 self.vectorListCtrl.SetItemData(index, index)
                 self.vectorListCtrl.CheckItem(index, True)
                 if vector[3] == 0:
                     self.vectorListCtrl.CheckItem(index, False)
-            self.panelVector.colsCtrl.SetRange(1, min(10, len(self.instruction.FindInstructionByType('vector')['list'])))
+            self.panelVector.colsCtrl.SetRange(
+                1, min(10, len(self.instruction.FindInstructionByType('vector')['list'])))
             self.panelVector.colsCtrl.SetValue(1)
         else:
             self.vectorListCtrl.DeleteAllItems()
-            self.panelVector.colsCtrl.SetRange(0,0)
+            self.panelVector.colsCtrl.SetRange(0, 0)
             self.panelVector.colsCtrl.SetValue(0)
-             
+
+
 class MapinfoDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = _("Mapinfo settings"), settings = settings)
-        
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=_("Mapinfo settings"),
+            settings=settings)
+
         self.objectType = ('mapinfo',)
         if self.id is not None:
             self.mapinfo = self.instruction[self.id]
@@ -3223,186 +4479,274 @@ class MapinfoDialog(PsmapDialog):
             self.id = wx.NewId()
             self.mapinfo = Mapinfo(self.id)
             self.mapinfoDict = self.mapinfo.GetInstruction()
-            page = self.instruction.FindInstructionByType('page').GetInstruction()
+            page = self.instruction.FindInstructionByType(
+                'page').GetInstruction()
             self.mapinfoDict['where'] = page['Left'], page['Top']
 
         self.panel = self._mapinfoPanel()
-        
+
         self._layout(self.panel)
         self.OnIsBackground(None)
         self.OnIsBorder(None)
 
     def _mapinfoPanel(self):
-        panel = wx.Panel(parent = self, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
+        panel = wx.Panel(
+            parent=self, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
         #panel.SetupScrolling(scroll_x = False, scroll_y = True)
         border = wx.BoxSizer(wx.VERTICAL)
-                
-        # position     
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Position"))
+
+        # position
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Position"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        self.AddPosition(parent = panel, dialogDict = self.mapinfoDict)
-        self.AddUnits(parent = panel, dialogDict = self.mapinfoDict)
-        gridBagSizer.Add(panel.units['unitsLabel'], pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.units['unitsCtrl'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['xLabel'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['xCtrl'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['yLabel'], pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['yCtrl'], pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['comment'], pos = (3,0), span = (1,2), flag =wx.ALIGN_BOTTOM, border = 0)
-        
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.AddPosition(parent=panel, dialogDict=self.mapinfoDict)
+        self.AddUnits(parent=panel, dialogDict=self.mapinfoDict)
+        gridBagSizer.Add(panel.units['unitsLabel'], pos=(
+            0, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.units['unitsCtrl'], pos=(
+            0, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['xLabel'], pos=(
+            1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['xCtrl'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['yLabel'], pos=(
+            2, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['yCtrl'], pos=(
+            2, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            panel.position['comment'], pos=(
+                3, 0), span=(
+                1, 2), flag=wx.ALIGN_BOTTOM, border=0)
+
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # font
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Font settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Font settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        self.AddFont(parent = panel, dialogDict = self.mapinfoDict)#creates font color too, used below
-        
-        gridBagSizer.Add(panel.font['fontLabel'], pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.font['fontCtrl'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.font['fontSizeLabel'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.font['fontSizeCtrl'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.font['colorLabel'], pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        gridBagSizer.Add(panel.font['colorCtrl'], pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        # creates font color too, used below
+        self.AddFont(parent=panel, dialogDict=self.mapinfoDict)
+
+        gridBagSizer.Add(panel.font['fontLabel'], pos=(
+            0, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            panel.font['fontCtrl'],
+            pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.font['fontSizeLabel'], pos=(
+            1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.font['fontSizeCtrl'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.font['colorLabel'], pos=(
+            2, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.font['colorCtrl'], pos=(
+            2, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(item = gridBagSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            item=gridBagSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         # colors
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " %_("Color settings"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Color settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
-        
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
+
         self.colors = {}
-        self.colors['borderCtrl'] = wx.CheckBox(panel, id = wx.ID_ANY, label = _("use border color:"))
-        self.colors['backgroundCtrl'] = wx.CheckBox(panel, id = wx.ID_ANY, label = _("use background color:"))
-        self.colors['borderColor'] = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        self.colors['backgroundColor'] = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        
-        if self.mapinfoDict['border'] == None:
+        self.colors['borderCtrl'] = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("use border color:"))
+        self.colors['backgroundCtrl'] = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("use background color:"))
+        self.colors['borderColor'] = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
+        self.colors['backgroundColor'] = wx.ColourPickerCtrl(
+            panel, id=wx.ID_ANY)
+
+        if self.mapinfoDict['border'] is None:
             self.mapinfoDict['border'] = 'none'
         if self.mapinfoDict['border'] != 'none':
-            self.colors['borderCtrl'].SetValue(True) 
-            self.colors['borderColor'].SetColour(convertRGB(self.mapinfoDict['border']))
+            self.colors['borderCtrl'].SetValue(True)
+            self.colors['borderColor'].SetColour(
+                convertRGB(self.mapinfoDict['border']))
         else:
             self.colors['borderCtrl'].SetValue(False)
             self.colors['borderColor'].SetColour(convertRGB('black'))
-            
-        if self.mapinfoDict['background'] == None:
+
+        if self.mapinfoDict['background'] is None:
             self.mapinfoDict['background'] == 'none'
         if self.mapinfoDict['background'] != 'none':
-            self.colors['backgroundCtrl'].SetValue(True) 
-            self.colors['backgroundColor'].SetColour(convertRGB(self.mapinfoDict['background']))
+            self.colors['backgroundCtrl'].SetValue(True)
+            self.colors['backgroundColor'].SetColour(
+                convertRGB(self.mapinfoDict['background']))
         else:
             self.colors['backgroundCtrl'].SetValue(False)
             self.colors['backgroundColor'].SetColour(convertRGB('white'))
-                    
-        flexSizer.Add(self.colors['borderCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(self.colors['borderColor'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(self.colors['backgroundCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexSizer.Add(self.colors['backgroundColor'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+
+        flexSizer.Add(
+            self.colors['borderCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            self.colors['borderColor'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            self.colors['backgroundCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexSizer.Add(
+            self.colors['backgroundColor'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
         flexSizer.AddGrowableCol(1)
-        
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        sizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
-        
+
         self.Bind(wx.EVT_CHECKBOX, self.OnIsBorder, self.colors['borderCtrl'])
-        self.Bind(wx.EVT_CHECKBOX, self.OnIsBackground, self.colors['backgroundCtrl'])
-        
+        self.Bind(
+            wx.EVT_CHECKBOX,
+            self.OnIsBackground,
+            self.colors['backgroundCtrl'])
+
         return panel
-    
+
     def OnIsBackground(self, event):
         if self.colors['backgroundCtrl'].GetValue():
             self.colors['backgroundColor'].Enable()
             self.update()
         else:
             self.colors['backgroundColor'].Disable()
-                        
+
     def OnIsBorder(self, event):
         if self.colors['borderCtrl'].GetValue():
             self.colors['borderColor'].Enable()
             self.update()
         else:
-            self.colors['borderColor'].Disable() 
-                                           
+            self.colors['borderColor'].Disable()
+
     def update(self):
 
-        #units
-        currUnit = self.unitConv.findUnit(self.panel.units['unitsCtrl'].GetStringSelection())
+        # units
+        currUnit = self.unitConv.findUnit(
+            self.panel.units['unitsCtrl'].GetStringSelection())
         self.mapinfoDict['unit'] = currUnit
-        
+
         # position
         if self.panel.position['xCtrl'].GetValue():
-            x = self.panel.position['xCtrl'].GetValue() 
+            x = self.panel.position['xCtrl'].GetValue()
         else:
             x = self.mapinfoDict['where'][0]
 
         if self.panel.position['yCtrl'].GetValue():
-            y = self.panel.position['yCtrl'].GetValue() 
+            y = self.panel.position['yCtrl'].GetValue()
         else:
             y = self.mapinfoDict['where'][1]
 
-        x = self.unitConv.convert(value = float(self.panel.position['xCtrl'].GetValue()), fromUnit = currUnit, toUnit = 'inch')
-        y = self.unitConv.convert(value = float(self.panel.position['yCtrl'].GetValue()), fromUnit = currUnit, toUnit = 'inch')
+        x = self.unitConv.convert(
+            value=float(
+                self.panel.position['xCtrl'].GetValue()),
+            fromUnit=currUnit,
+            toUnit='inch')
+        y = self.unitConv.convert(
+            value=float(
+                self.panel.position['yCtrl'].GetValue()),
+            fromUnit=currUnit,
+            toUnit='inch')
         self.mapinfoDict['where'] = (x, y)
-        
+
         # font
-        self.mapinfoDict['font'] =  self.panel.font['fontCtrl'].GetStringSelection()
-        self.mapinfoDict['fontsize'] = self.panel.font['fontSizeCtrl'].GetValue()
+        self.mapinfoDict['font'] = self.panel.font[
+            'fontCtrl'].GetStringSelection()
+        self.mapinfoDict['fontsize'] = self.panel.font[
+            'fontSizeCtrl'].GetValue()
 
-        #colors
+        # colors
         color = self.panel.font['colorCtrl'].GetColour()
         self.mapinfoDict['color'] = convertRGB(color)
-        
-        if self.colors['backgroundCtrl'].GetValue():    
+
+        if self.colors['backgroundCtrl'].GetValue():
             background = self.colors['backgroundColor'].GetColour()
             self.mapinfoDict['background'] = convertRGB(background)
         else:
             self.mapinfoDict['background'] = 'none'
 
-        if self.colors['borderCtrl'].GetValue():    
+        if self.colors['borderCtrl'].GetValue():
             border = self.colors['borderColor'].GetColour()
             self.mapinfoDict['border'] = convertRGB(border)
         else:
             self.mapinfoDict['border'] = 'none'
-        
+
         # estimation of size
         self.mapinfoDict['rect'] = self.mapinfo.EstimateRect(self.mapinfoDict)
 
         if self.id not in self.instruction:
             mapinfo = Mapinfo(self.id)
             self.instruction.AddInstruction(mapinfo)
-            
+
         self.instruction[self.id].SetInstruction(self.mapinfoDict)
 
         if self.id not in self.parent.objectId:
             self.parent.objectId.append(self.id)
-            
+
         self.updateDialog()
 
         return True
-    
+
     def updateDialog(self):
         """Update mapinfo coordinates, after moving"""
         x, y = self.mapinfoDict['where']
-        currUnit = self.unitConv.findUnit(self.panel.units['unitsCtrl'].GetStringSelection())
-        x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-        y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+        currUnit = self.unitConv.findUnit(
+            self.panel.units['unitsCtrl'].GetStringSelection())
+        x = self.unitConv.convert(value=x, fromUnit='inch', toUnit=currUnit)
+        y = self.unitConv.convert(value=y, fromUnit='inch', toUnit=currUnit)
         self.panel.position['xCtrl'].SetValue("%5.3f" % x)
         self.panel.position['yCtrl'].SetValue("%5.3f" % y)
-             
+
+
 class ScalebarDialog(PsmapDialog):
     """Dialog for scale bar"""
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "Scale bar settings", settings = settings)
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="Scale bar settings",
+            settings=settings)
         self.objectType = ('scalebar',)
         if self.id is not None:
             self.scalebar = self.instruction[id]
@@ -3411,238 +4755,355 @@ class ScalebarDialog(PsmapDialog):
             self.id = wx.NewId()
             self.scalebar = Scalebar(self.id)
             self.scalebarDict = self.scalebar.GetInstruction()
-            page = self.instruction.FindInstructionByType('page').GetInstruction()
+            page = self.instruction.FindInstructionByType(
+                'page').GetInstruction()
             self.scalebarDict['where'] = page['Left'], page['Top']
 
         self.panel = self._scalebarPanel()
-        
+
         self._layout(self.panel)
-        
+
         self.mapUnit = projInfo()['units'].lower()
         if projInfo()['proj'] == 'xy':
             self.mapUnit = 'meters'
         if self.mapUnit not in self.unitConv.getAllUnits():
-            wx.MessageBox(message = _("Units of current projection are not supported,\n meters will be used!"),
-                            caption = _('Unsupported units'),
-                                    style = wx.OK|wx.ICON_ERROR)
             self.mapUnit = 'meters'
-            
+
     def _scalebarPanel(self):
-        panel = wx.Panel(parent = self, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
+        panel = wx.Panel(parent=self, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
         border = wx.BoxSizer(wx.VERTICAL)
-        #        
+        #
         # position
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Position"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Position"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        self.AddUnits(parent = panel, dialogDict = self.scalebarDict)
-        self.AddPosition(parent = panel, dialogDict = self.scalebarDict)
-        
-        if self.scalebarDict['rect']: # set position, ref point is center and not left top corner
-            
-            x = self.unitConv.convert(value = self.scalebarDict['where'][0] - self.scalebarDict['rect'].Get()[2]/2,
-                                                    fromUnit = 'inch', toUnit = self.scalebarDict['unit'])
-            y = self.unitConv.convert(value = self.scalebarDict['where'][1] - self.scalebarDict['rect'].Get()[3]/2,
-                                                    fromUnit = 'inch', toUnit = self.scalebarDict['unit'])
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        self.AddUnits(parent=panel, dialogDict=self.scalebarDict)
+        self.AddPosition(parent=panel, dialogDict=self.scalebarDict)
+
+        if self.scalebarDict[
+                'rect']:  # set position, ref point is center and not left top corner
+
+            x = self.unitConv.convert(
+                value=self.scalebarDict['where'][0] -
+                self.scalebarDict['rect'].Get()[2] /
+                2,
+                fromUnit='inch',
+                toUnit=self.scalebarDict['unit'])
+            y = self.unitConv.convert(
+                value=self.scalebarDict['where'][1] -
+                self.scalebarDict['rect'].Get()[3] /
+                2,
+                fromUnit='inch',
+                toUnit=self.scalebarDict['unit'])
             panel.position['xCtrl'].SetValue("%5.3f" % x)
             panel.position['yCtrl'].SetValue("%5.3f" % y)
-        
-        gridBagSizer.Add(panel.units['unitsLabel'], pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.units['unitsCtrl'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['xLabel'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['xCtrl'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['yLabel'], pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['yCtrl'], pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(panel.position['comment'], pos = (3,0), span = (1,2), flag =wx.ALIGN_BOTTOM, border = 0)
-        
+
+        gridBagSizer.Add(panel.units['unitsLabel'], pos=(
+            0, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.units['unitsCtrl'], pos=(
+            0, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['xLabel'], pos=(
+            1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['xCtrl'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['yLabel'], pos=(
+            2, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(panel.position['yCtrl'], pos=(
+            2, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            panel.position['comment'], pos=(
+                3, 0), span=(
+                1, 2), flag=wx.ALIGN_BOTTOM, border=0)
+
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
         #
         # size
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Size"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Size"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        lengthText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Length:"))
-        heightText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Height:"))
-        
-        self.lengthTextCtrl = wx.TextCtrl(panel, id = wx.ID_ANY, validator = TCValidator('DIGIT_ONLY'))
-        self.lengthTextCtrl.SetToolTipString(_("Scalebar length is given in map units"))
-        
-        self.heightTextCtrl = wx.TextCtrl(panel, id = wx.ID_ANY, validator = TCValidator('DIGIT_ONLY'))
-        self.heightTextCtrl.SetToolTipString(_("Scalebar height is real height on paper"))
-        
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        lengthText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Length:"))
+        heightText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Height:"))
+
+        self.lengthTextCtrl = wx.TextCtrl(
+            panel, id=wx.ID_ANY, validator=TCValidator('DIGIT_ONLY'))
+        self.lengthTextCtrl.SetToolTipString(
+            _("Scalebar length is given in map units"))
+
+        self.heightTextCtrl = wx.TextCtrl(
+            panel, id=wx.ID_ANY, validator=TCValidator('DIGIT_ONLY'))
+        self.heightTextCtrl.SetToolTipString(
+            _("Scalebar height is real height on paper"))
+
         choices = [_('default')] + self.unitConv.getMapUnitsNames()
-        self.unitsLength = wx.Choice(panel, id = wx.ID_ANY, choices = choices)
+        self.unitsLength = wx.Choice(panel, id=wx.ID_ANY, choices=choices)
         choices = self.unitConv.getPageUnitsNames()
-        self.unitsHeight = wx.Choice(panel, id = wx.ID_ANY, choices = choices)
-        
+        self.unitsHeight = wx.Choice(panel, id=wx.ID_ANY, choices=choices)
+
         # set values
         unitName = self.unitConv.findName(self.scalebarDict['unitsLength'])
         if unitName:
             self.unitsLength.SetStringSelection(unitName)
         else:
             if self.scalebarDict['unitsLength'] == 'auto':
-                 self.unitsLength.SetSelection(0)
+                self.unitsLength.SetSelection(0)
             elif self.scalebarDict['unitsLength'] == 'nautmiles':
-                 self.unitsLength.SetStringSelection(self.unitConv.findName("nautical miles"))
-        self.unitsHeight.SetStringSelection(self.unitConv.findName(self.scalebarDict['unitsHeight']))
+                self.unitsLength.SetStringSelection(
+                    self.unitConv.findName("nautical miles"))
+        self.unitsHeight.SetStringSelection(
+            self.unitConv.findName(
+                self.scalebarDict['unitsHeight']))
         if self.scalebarDict['length']:
             self.lengthTextCtrl.SetValue(str(self.scalebarDict['length']))
-        else: #estimate default
+        else:  # estimate default
             reg = grass.region()
-            w = int((reg['e'] - reg['w'])/3)
-            w = round(w, -len(str(w)) + 2) #12345 -> 12000
+            w = int((reg['e'] - reg['w']) / 3)
+            w = round(w, -len(str(w)) + 2)  # 12345 -> 12000
             self.lengthTextCtrl.SetValue(str(w))
-            
-        h = self.unitConv.convert(value = self.scalebarDict['height'], fromUnit = 'inch',
-                                                toUnit =  self.scalebarDict['unitsHeight']) 
+
+        h = self.unitConv.convert(
+            value=self.scalebarDict['height'],
+            fromUnit='inch',
+            toUnit=self.scalebarDict['unitsHeight'])
         self.heightTextCtrl.SetValue(str(h))
-        
-        gridBagSizer.Add(lengthText, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.lengthTextCtrl, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.unitsLength, pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(heightText, pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.heightTextCtrl, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.unitsHeight, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-      
+
+        gridBagSizer.Add(
+            lengthText, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.lengthTextCtrl, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.unitsLength,
+            pos=(
+                0,
+                2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+        gridBagSizer.Add(
+            heightText, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.heightTextCtrl, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.unitsHeight,
+            pos=(
+                1,
+                2),
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+            border=0)
+
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
         #
-        #style
+        # style
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Style"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Style"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        
-        sbTypeText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Type:"))
-        self.sbCombo = wx.combo.BitmapComboBox(panel, style = wx.CB_READONLY)
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        sbTypeText = wx.StaticText(panel, id=wx.ID_ANY, label=_("Type:"))
+        self.sbCombo = wx.combo.BitmapComboBox(panel, style=wx.CB_READONLY)
         # only temporary, images must be moved away
-        imagePath = os.path.join(globalvar.IMGDIR, "scalebar-fancy.png"), os.path.join(globalvar.IMGDIR, "scalebar-simple.png") 
+        imagePath = os.path.join(
+            globalvar.IMGDIR, "scalebar-fancy.png"), os.path.join(
+            globalvar.IMGDIR, "scalebar-simple.png")
         for item, path in zip(['fancy', 'simple'], imagePath):
             if not os.path.exists(path):
-                bitmap = wx.EmptyBitmap(0,0)
+                bitmap = wx.EmptyBitmap(0, 0)
             else:
                 bitmap = wx.Bitmap(path)
-            self.sbCombo.Append(item = '', bitmap = bitmap, clientData = item[0])
+            self.sbCombo.Append(item='', bitmap=bitmap, clientData=item[0])
         #self.sbCombo.Append(item = 'simple', bitmap = wx.Bitmap("./images/scalebar-simple.png"), clientData = 's')
         if self.scalebarDict['scalebar'] == 'f':
             self.sbCombo.SetSelection(0)
         elif self.scalebarDict['scalebar'] == 's':
             self.sbCombo.SetSelection(1)
-            
-        sbSegmentsText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Number of segments:"))
-        self.sbSegmentsCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 30, initial = 4)
+
+        sbSegmentsText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Number of segments:"))
+        self.sbSegmentsCtrl = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=30, initial=4)
         self.sbSegmentsCtrl.SetValue(self.scalebarDict['segment'])
-        
-        sbLabelsText1 = wx.StaticText(panel, id = wx.ID_ANY, label = _("Label every "))
-        sbLabelsText2 = wx.StaticText(panel, id = wx.ID_ANY, label = _("segments"))
-        self.sbLabelsCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 1, max = 30, initial = 1)
+
+        sbLabelsText1 = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Label every "))
+        sbLabelsText2 = wx.StaticText(panel, id=wx.ID_ANY, label=_("segments"))
+        self.sbLabelsCtrl = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=1, max=30, initial=1)
         self.sbLabelsCtrl.SetValue(self.scalebarDict['numbers'])
-        
-        #font
-        fontsizeText = wx.StaticText(panel, id = wx.ID_ANY, label = _("Font size:"))
-        self.fontsizeCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, min = 4, max = 30, initial = 10)
+
+        # font
+        fontsizeText = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Font size:"))
+        self.fontsizeCtrl = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, min=4, max=30, initial=10)
         self.fontsizeCtrl.SetValue(self.scalebarDict['fontsize'])
-        
-        self.backgroundCheck = wx.CheckBox(panel, id = wx.ID_ANY, label = _("transparent text background"))
+
+        self.backgroundCheck = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("transparent text background"))
         if self.scalebarDict['background'] == 'y':
             self.backgroundCheck.SetValue(False)
         else:
             self.backgroundCheck.SetValue(True)
 
-        gridBagSizer.Add(sbTypeText, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.sbCombo, pos = (0,1), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND, border = 0)
-        gridBagSizer.Add(sbSegmentsText, pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.sbSegmentsCtrl, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(sbLabelsText1, pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.sbLabelsCtrl, pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(sbLabelsText2, pos = (2,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(fontsizeText, pos = (3,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.fontsizeCtrl, pos = (3,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.backgroundCheck, pos = (4, 0), span = (1,3), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.ALIGN_CENTER_VERTICAL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        gridBagSizer.Add(
+            sbTypeText, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.sbCombo, pos=(
+                0, 1), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            sbSegmentsText, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.sbSegmentsCtrl, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            sbLabelsText1, pos=(2, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.sbLabelsCtrl, pos=(2, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            sbLabelsText2, pos=(2, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            fontsizeText, pos=(3, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.fontsizeCtrl, pos=(3, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.backgroundCheck, pos=(
+                4, 0), span=(
+                1, 3), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
-        
+
         return panel
-                           
+
     def update(self):
         """Save information from dialog"""
 
-        #units
-        currUnit = self.unitConv.findUnit(self.panel.units['unitsCtrl'].GetStringSelection())
+        # units
+        currUnit = self.unitConv.findUnit(
+            self.panel.units['unitsCtrl'].GetStringSelection())
         self.scalebarDict['unit'] = currUnit
         # position
         if self.panel.position['xCtrl'].GetValue():
-            x = self.panel.position['xCtrl'].GetValue() 
+            x = self.panel.position['xCtrl'].GetValue()
         else:
             x = self.scalebarDict['where'][0]
 
         if self.panel.position['yCtrl'].GetValue():
-            y = self.panel.position['yCtrl'].GetValue() 
+            y = self.panel.position['yCtrl'].GetValue()
         else:
             y = self.scalebarDict['where'][1]
 
-        x = self.unitConv.convert(value = float(self.panel.position['xCtrl'].GetValue()), fromUnit = currUnit, toUnit = 'inch')
-        y = self.unitConv.convert(value = float(self.panel.position['yCtrl'].GetValue()), fromUnit = currUnit, toUnit = 'inch')
-        
-        #style
-        self.scalebarDict['scalebar'] = self.sbCombo.GetClientData(self.sbCombo.GetSelection())
+        x = self.unitConv.convert(
+            value=float(
+                self.panel.position['xCtrl'].GetValue()),
+            fromUnit=currUnit,
+            toUnit='inch')
+        y = self.unitConv.convert(
+            value=float(
+                self.panel.position['yCtrl'].GetValue()),
+            fromUnit=currUnit,
+            toUnit='inch')
+
+        # style
+        self.scalebarDict['scalebar'] = self.sbCombo.GetClientData(
+            self.sbCombo.GetSelection())
         self.scalebarDict['segment'] = self.sbSegmentsCtrl.GetValue()
         self.scalebarDict['numbers'] = self.sbLabelsCtrl.GetValue()
         self.scalebarDict['fontsize'] = self.fontsizeCtrl.GetValue()
         if self.backgroundCheck.GetValue():
-            self.scalebarDict['background'] = 'n' 
+            self.scalebarDict['background'] = 'n'
         else:
             self.scalebarDict['background'] = 'y'
 
-        
         # size
-        
+
         # height
-        self.scalebarDict['unitsHeight'] = self.unitConv.findUnit(self.unitsHeight.GetStringSelection())
+        self.scalebarDict['unitsHeight'] = self.unitConv.findUnit(
+            self.unitsHeight.GetStringSelection())
         try:
-            height = float(self.heightTextCtrl.GetValue())  
-            height = self.unitConv.convert(value = height, fromUnit = self.scalebarDict['unitsHeight'], toUnit = 'inch') 
+            height = float(self.heightTextCtrl.GetValue())
+            height = self.unitConv.convert(
+                value=height,
+                fromUnit=self.scalebarDict['unitsHeight'],
+                toUnit='inch')
         except (ValueError, SyntaxError):
-            height = 0.1 #default in inch
-        self.scalebarDict['height'] = height    
-        
-        #length
+            height = 0.1  # default in inch
+        self.scalebarDict['height'] = height
+
+        # length
         if self.unitsLength.GetSelection() == 0:
             selected = 'auto'
         else:
-            selected = self.unitConv.findUnit(self.unitsLength.GetStringSelection())
+            selected = self.unitConv.findUnit(
+                self.unitsLength.GetStringSelection())
             if selected == 'nautical miles':
                 selected = 'nautmiles'
         self.scalebarDict['unitsLength'] = selected
         try:
             length = float(self.lengthTextCtrl.GetValue())
         except (ValueError, SyntaxError):
-            wx.MessageBox(message = _("Length of scale bar is not defined"),
-                                    caption = _('Invalid input'), style = wx.OK|wx.ICON_ERROR)
+            wx.MessageBox(
+                message=_("Length of scale bar is not defined"),
+                caption=_('Invalid input'),
+                style=wx.OK | wx.ICON_ERROR)
             return False
         self.scalebarDict['length'] = length
-            
+
         # estimation of size
         map = self.instruction.FindInstructionByType('map')
         if not map:
             map = self.instruction.FindInstructionByType('initMap')
         mapId = map.id
-         
-        rectSize = self.scalebar.EstimateSize(scalebarDict = self.scalebarDict,
-                                                                scale = self.instruction[mapId]['scale'])
-        self.scalebarDict['rect'] = Rect2D(x = x, y = y, width = rectSize[0], height = rectSize[1])
-        self.scalebarDict['where'] = self.scalebarDict['rect'].GetCentre() 
+
+        rectSize = self.scalebar.EstimateSize(
+            scalebarDict=self.scalebarDict,
+            scale=self.instruction[mapId]['scale'])
+        self.scalebarDict['rect'] = Rect2D(
+            x=x, y=y, width=rectSize[0], height=rectSize[1])
+        self.scalebarDict['where'] = self.scalebarDict['rect'].GetCentre()
 
         if self.id not in self.instruction:
             scalebar = Scalebar(self.id)
@@ -3650,41 +5111,51 @@ class ScalebarDialog(PsmapDialog):
         self.instruction[self.id].SetInstruction(self.scalebarDict)
         if self.id not in self.parent.objectId:
             self.parent.objectId.append(self.id)
-            
+
         return True
-    
+
     def updateDialog(self):
         """Update scalebar coordinates, after moving"""
         x, y = self.scalebarDict['rect'][:2]
-        currUnit = self.unitConv.findUnit(self.panel.units['unitsCtrl'].GetStringSelection())
-        x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-        y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+        currUnit = self.unitConv.findUnit(
+            self.panel.units['unitsCtrl'].GetStringSelection())
+        x = self.unitConv.convert(value=x, fromUnit='inch', toUnit=currUnit)
+        y = self.unitConv.convert(value=y, fromUnit='inch', toUnit=currUnit)
         self.panel.position['xCtrl'].SetValue("%5.3f" % x)
         self.panel.position['yCtrl'].SetValue("%5.3f" % y)
-        
- 
-        
+
+
 class TextDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "Text settings", settings = settings)
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="Text settings",
+            settings=settings)
         self.objectType = ('text',)
         if self.id is not None:
             self.textDict = self.instruction[id].GetInstruction()
         else:
-            self.id = wx.NewId()  
+            self.id = wx.NewId()
             text = Text(self.id)
             self.textDict = text.GetInstruction()
-            page = self.instruction.FindInstructionByType('page').GetInstruction()
-            self.textDict['where'] = page['Left'], page['Top'] 
-                
+            page = self.instruction.FindInstructionByType(
+                'page').GetInstruction()
+            self.textDict['where'] = page['Left'], page['Top']
+
         map = self.instruction.FindInstructionByType('map')
         if not map:
             map = self.instruction.FindInstructionByType('initMap')
         self.mapId = map.id
 
-        self.textDict['east'], self.textDict['north'] = PaperMapCoordinates(mapInstr = map, x = self.textDict['where'][0], y = self.textDict['where'][1], paperToMap = True)
-        
-        notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)     
+        self.textDict['east'], self.textDict['north'] = PaperMapCoordinates(
+            mapInstr=map, x=self.textDict['where'][0],
+            y=self.textDict['where'][1],
+            paperToMap=True)
+
+        notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         self.textPanel = self._textPanel(notebook)
         self.positionPanel = self._positionPanel(notebook)
         self.OnBackground(None)
@@ -3692,212 +5163,375 @@ class TextDialog(PsmapDialog):
         self.OnBorder(None)
         self.OnPositionType(None)
         self.OnRotation(None)
-     
+
         self._layout(notebook)
 
     def _textPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Text"))
-        
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Text"))
+
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        # text entry    
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Text"))
+
+        # text entry
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Text"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        
-        textLabel = wx.StaticText(panel, id = wx.ID_ANY, label = _("Enter text:"))
-        self.textCtrl = ExpandoTextCtrl(panel, id = wx.ID_ANY, value = self.textDict['text'])
-        
-        sizer.Add(textLabel, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 5)
-        sizer.Add(self.textCtrl, proportion = 1, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)        
-        
-        #font       
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Font settings"))
+
+        textLabel = wx.StaticText(panel, id=wx.ID_ANY, label=_("Enter text:"))
+        self.textCtrl = ExpandoTextCtrl(
+            panel, id=wx.ID_ANY, value=self.textDict['text'])
+
+        sizer.Add(
+            textLabel,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        sizer.Add(
+            self.textCtrl,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        # font
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Font settings"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexGridSizer = wx.FlexGridSizer (rows = 3, cols = 2, hgap = 5, vgap = 5)
-        
-        self.AddFont(parent = panel, dialogDict = self.textDict)
-        
-        flexGridSizer.Add(panel.font['fontLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexGridSizer.Add(panel.font['fontCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexGridSizer.Add(panel.font['fontSizeLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexGridSizer.Add(panel.font['fontSizeCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        flexGridSizer.Add(panel.font['colorLabel'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)        
-        flexGridSizer.Add(panel.font['colorCtrl'], proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
+        flexGridSizer = wx.FlexGridSizer(rows=3, cols=2, hgap=5, vgap=5)
+
+        self.AddFont(parent=panel, dialogDict=self.textDict)
+
+        flexGridSizer.Add(
+            panel.font['fontLabel'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexGridSizer.Add(
+            panel.font['fontCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexGridSizer.Add(
+            panel.font['fontSizeLabel'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexGridSizer.Add(
+            panel.font['fontSizeCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexGridSizer.Add(
+            panel.font['colorLabel'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        flexGridSizer.Add(
+            panel.font['colorCtrl'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
         flexGridSizer.AddGrowableCol(1)
-        
-        sizer.Add(item = flexGridSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
-        #text effects        
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Text effects"))
+
+        sizer.Add(
+            item=flexGridSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        # text effects
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Text effects"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridBagSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
         self.effect = {}
-        self.effect['backgroundCtrl'] = wx.CheckBox(panel, id = wx.ID_ANY, label = _("text background"))
-        self.effect['backgroundColor'] = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        
-        self.effect['highlightCtrl'] = wx.CheckBox(panel, id = wx.ID_ANY, label = _("highlight"))
-        self.effect['highlightColor'] = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        self.effect['highlightWidth'] = wx.SpinCtrl(panel, id = wx.ID_ANY, size = self.spinCtrlSize, min = 0, max = 5, initial = 1)
-        self.effect['highlightWidthLabel'] = wx.StaticText(panel, id = wx.ID_ANY, label = _("Width (pts):"))
-        
-        self.effect['borderCtrl'] = wx.CheckBox(panel, id = wx.ID_ANY, label = _("text border"))
-        self.effect['borderColor'] = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        self.effect['borderWidth'] = wx.SpinCtrl(panel, id = wx.ID_ANY, size = self.spinCtrlSize, min = 1, max = 25, initial = 1)
-        self.effect['borderWidthLabel'] = wx.StaticText(panel, id = wx.ID_ANY, label = _("Width (pts):"))
-
-        #set values
-        if self.textDict['background'] == None:
+        self.effect['backgroundCtrl'] = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("text background"))
+        self.effect['backgroundColor'] = wx.ColourPickerCtrl(
+            panel, id=wx.ID_ANY)
+
+        self.effect['highlightCtrl'] = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("highlight"))
+        self.effect['highlightColor'] = wx.ColourPickerCtrl(
+            panel, id=wx.ID_ANY)
+        self.effect['highlightWidth'] = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, size=self.spinCtrlSize, min=0, max=5, initial=1)
+        self.effect['highlightWidthLabel'] = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Width (pts):"))
+
+        self.effect['borderCtrl'] = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("text border"))
+        self.effect['borderColor'] = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
+        self.effect['borderWidth'] = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, size=self.spinCtrlSize, min=1, max=25, initial=1)
+        self.effect['borderWidthLabel'] = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("Width (pts):"))
+
+        # set values
+        if self.textDict['background'] is None:
             self.textDict['background'] = 'none'
         if self.textDict['background'] != 'none':
-            self.effect['backgroundCtrl'].SetValue(True) 
-            self.effect['backgroundColor'].SetColour(convertRGB(self.textDict['background']))
+            self.effect['backgroundCtrl'].SetValue(True)
+            self.effect['backgroundColor'].SetColour(
+                convertRGB(self.textDict['background']))
         else:
             self.effect['backgroundCtrl'].SetValue(False)
             self.effect['backgroundColor'].SetColour(convertRGB('white'))
 
-        if self.textDict['hcolor'] == None:
-             self.textDict['hcolor'] = 'none'
+        if self.textDict['hcolor'] is None:
+            self.textDict['hcolor'] = 'none'
         if self.textDict['hcolor'] != 'none':
-            self.effect['highlightCtrl'].SetValue(True) 
-            self.effect['highlightColor'].SetColour(convertRGB(self.textDict['hcolor']))
+            self.effect['highlightCtrl'].SetValue(True)
+            self.effect['highlightColor'].SetColour(
+                convertRGB(self.textDict['hcolor']))
         else:
             self.effect['highlightCtrl'].SetValue(False)
             self.effect['highlightColor'].SetColour(convertRGB('grey'))
 
         self.effect['highlightWidth'].SetValue(float(self.textDict['hwidth']))
-        
-        if self.textDict['border'] == None:
+
+        if self.textDict['border'] is None:
             self.textDict['border'] = 'none'
         if self.textDict['border'] != 'none':
-            self.effect['borderCtrl'].SetValue(True) 
-            self.effect['borderColor'].SetColour(convertRGB(self.textDict['border'])) 
+            self.effect['borderCtrl'].SetValue(True)
+            self.effect['borderColor'].SetColour(
+                convertRGB(self.textDict['border']))
         else:
             self.effect['borderCtrl'].SetValue(False)
             self.effect['borderColor'].SetColour(convertRGB('black'))
 
         self.effect['borderWidth'].SetValue(float(self.textDict['width']))
-        
-        gridBagSizer.Add(self.effect['backgroundCtrl'], pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['backgroundColor'], pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['highlightCtrl'], pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['highlightColor'], pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['highlightWidthLabel'], pos = (1,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['highlightWidth'], pos = (1,3), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['borderCtrl'], pos = (2,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['borderColor'], pos = (2,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['borderWidthLabel'], pos = (2,2), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizer.Add(self.effect['borderWidth'], pos = (2,3), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        sizer.Add(item = gridBagSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        gridBagSizer.Add(self.effect['backgroundCtrl'], pos=(
+            0, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['backgroundColor'], pos=(
+            0, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['highlightCtrl'], pos=(
+            1, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['highlightColor'], pos=(
+            1, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(
+            self.effect['highlightWidthLabel'], pos=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['highlightWidth'], pos=(
+            1, 3), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['borderCtrl'], pos=(
+            2, 0), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['borderColor'], pos=(
+            2, 1), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['borderWidthLabel'], pos=(
+            2, 2), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizer.Add(self.effect['borderWidth'], pos=(
+            2, 3), flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizer.Add(
+            item=gridBagSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         self.Bind(EVT_ETC_LAYOUT_NEEDED, self.OnRefit, self.textCtrl)
-        self.Bind(wx.EVT_CHECKBOX, self.OnBackground, self.effect['backgroundCtrl'])
-        self.Bind(wx.EVT_CHECKBOX, self.OnHighlight, self.effect['highlightCtrl'])
+        self.Bind(
+            wx.EVT_CHECKBOX,
+            self.OnBackground,
+            self.effect['backgroundCtrl'])
+        self.Bind(
+            wx.EVT_CHECKBOX,
+            self.OnHighlight,
+            self.effect['highlightCtrl'])
         self.Bind(wx.EVT_CHECKBOX, self.OnBorder, self.effect['borderCtrl'])
-        
+
         panel.SetSizer(border)
         panel.Fit()
-        
-        return panel 
-        
+
+        return panel
+
     def _positionPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Position"))
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Position"))
 
-        border = wx.BoxSizer(wx.VERTICAL) 
+        border = wx.BoxSizer(wx.VERTICAL)
 
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Position"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Position"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        #Position
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        # Position
         self.AddExtendedPosition(panel, gridBagSizer, self.textDict)
-        
-        #offset
-        box3   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " %_("Offset"))
+
+        # offset
+        box3 = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Offset"))
         sizerO = wx.StaticBoxSizer(box3, wx.VERTICAL)
-        gridBagSizerO = wx.GridBagSizer (hgap = 5, vgap = 5)
-        self.xoffLabel = wx.StaticText(panel, id = wx.ID_ANY, label = _("horizontal (pts):"))
-        self.yoffLabel = wx.StaticText(panel, id = wx.ID_ANY, label = _("vertical (pts):"))
-        self.xoffCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, size = (50, -1), min = -50, max = 50, initial = 0)
-        self.yoffCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, size = (50, -1), min = -50, max = 50, initial = 0) 
-        self.xoffCtrl.SetValue(self.textDict['xoffset'])       
+        gridBagSizerO = wx.GridBagSizer(hgap=5, vgap=5)
+        self.xoffLabel = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("horizontal (pts):"))
+        self.yoffLabel = wx.StaticText(
+            panel, id=wx.ID_ANY, label=_("vertical (pts):"))
+        self.xoffCtrl = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, size=(50, -1),
+            min=-50, max=50, initial=0)
+        self.yoffCtrl = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, size=(50, -1),
+            min=-50, max=50, initial=0)
+        self.xoffCtrl.SetValue(self.textDict['xoffset'])
         self.yoffCtrl.SetValue(self.textDict['yoffset'])
-        gridBagSizerO.Add(self.xoffLabel, pos = (0,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizerO.Add(self.yoffLabel, pos = (1,0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizerO.Add(self.xoffCtrl, pos = (0,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridBagSizerO.Add(self.yoffCtrl, pos = (1,1), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        
-        sizerO.Add(gridBagSizerO, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        gridBagSizer.Add(sizerO, pos = (3,0), flag = wx.ALIGN_CENTER_HORIZONTAL|wx.EXPAND, border = 0)
+        gridBagSizerO.Add(
+            self.xoffLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizerO.Add(
+            self.yoffLabel, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizerO.Add(
+            self.xoffCtrl, pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+        gridBagSizerO.Add(
+            self.yoffCtrl, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL, border=0)
+
+        sizerO.Add(
+            gridBagSizerO,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        gridBagSizer.Add(
+            sizerO,
+            pos=(
+                3,
+                0),
+            flag=wx.ALIGN_CENTER_HORIZONTAL | wx.EXPAND,
+            border=0)
         # reference point
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " %_(" Reference point"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _(" Reference point"))
         sizerR = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer(rows = 3, cols = 3, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(rows=3, cols=3, hgap=5, vgap=5)
         ref = []
         for row in ["upper", "center", "lower"]:
             for col in ["left", "center", "right"]:
                 ref.append(row + " " + col)
-        self.radio = [wx.RadioButton(panel, id = wx.ID_ANY, label = '', style = wx.RB_GROUP, name = ref[0])]
+        self.radio = [
+            wx.RadioButton(
+                panel,
+                id=wx.ID_ANY,
+                label='',
+                style=wx.RB_GROUP,
+                name=ref[0])]
         self.radio[0].SetValue(False)
-        flexSizer.Add(self.radio[0], proportion = 0, flag = wx.ALIGN_CENTER, border = 0)
-        for i in range(1,9):
-            self.radio.append(wx.RadioButton(panel, id = wx.ID_ANY, label = '', name = ref[i]))
+        flexSizer.Add(
+            self.radio[0],
+            proportion=0,
+            flag=wx.ALIGN_CENTER,
+            border=0)
+        for i in range(1, 9):
+            self.radio.append(
+                wx.RadioButton(
+                    panel,
+                    id=wx.ID_ANY,
+                    label='',
+                    name=ref[i]))
             self.radio[-1].SetValue(False)
-            flexSizer.Add(self.radio[-1], proportion = 0, flag = wx.ALIGN_CENTER, border = 0)
+            flexSizer.Add(self.radio[-1], proportion=0,
+                          flag=wx.ALIGN_CENTER, border=0)
         self.FindWindowByName(self.textDict['ref']).SetValue(True)
         flexSizer.AddGrowableCol(0)
         flexSizer.AddGrowableCol(1)
         flexSizer.AddGrowableCol(2)
-                
-        sizerR.Add(flexSizer, proportion = 1, flag = wx.EXPAND, border = 0)
-        gridBagSizer.Add(sizerR, pos = (3,1), flag = wx.ALIGN_LEFT|wx.EXPAND, border = 0)
+
+        sizerR.Add(flexSizer, proportion=1, flag=wx.EXPAND, border=0)
+        gridBagSizer.Add(
+            sizerR, pos=(3, 1),
+            flag=wx.ALIGN_LEFT | wx.EXPAND, border=0)
         gridBagSizer.AddGrowableCol(0)
         gridBagSizer.AddGrowableCol(1)
-        
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-                
-        #rotation
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Text rotation"))
+
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        # rotation
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Text rotation"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
 
-        self.rotCtrl = wx.CheckBox(panel, id = wx.ID_ANY, label = _("rotate text (counterclockwise)"))
-        self.rotValue = wx.SpinCtrl(panel, wx.ID_ANY, size = (50, -1), min = 0, max = 360, initial = 0)
+        self.rotCtrl = wx.CheckBox(
+            panel,
+            id=wx.ID_ANY,
+            label=_("rotate text (counterclockwise)"))
+        self.rotValue = wx.SpinCtrl(
+            panel, wx.ID_ANY, size=(50, -1),
+            min=0, max=360, initial=0)
         if self.textDict['rotate']:
             self.rotValue.SetValue(int(self.textDict['rotate']))
             self.rotCtrl.SetValue(True)
         else:
             self.rotValue.SetValue(0)
             self.rotCtrl.SetValue(False)
-        sizer.Add(self.rotCtrl, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, border = 5)
-        sizer.Add(self.rotValue, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL|wx.ALIGN_LEFT|wx.ALL, border = 5)
-        
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            self.rotCtrl,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.ALL,
+            border=5)
+        sizer.Add(
+            self.rotValue,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_LEFT | wx.ALL,
+            border=5)
+
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
-          
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnPositionType, panel.position['toPaper']) 
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnPositionType, panel.position['toMap'])
+
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnPositionType,
+            panel.position['toPaper'])
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnPositionType,
+            panel.position['toMap'])
         self.Bind(wx.EVT_CHECKBOX, self.OnRotation, self.rotCtrl)
-        
+
         return panel
-     
+
     def OnRefit(self, event):
         self.Fit()
-        
+
     def OnRotation(self, event):
         if self.rotCtrl.GetValue():
             self.rotValue.Enable()
-        else: 
+        else:
             self.rotValue.Disable()
-            
+
     def OnPositionType(self, event):
         if self.positionPanel.position['toPaper'].GetValue():
             for widget in self.gridBagSizerP.GetChildren():
@@ -3909,14 +5543,14 @@ class TextDialog(PsmapDialog):
                 widget.GetWindow().Enable()
             for widget in self.gridBagSizerP.GetChildren():
                 widget.GetWindow().Disable()
-                
+
     def OnBackground(self, event):
         if self.effect['backgroundCtrl'].GetValue():
             self.effect['backgroundColor'].Enable()
             self.update()
         else:
             self.effect['backgroundColor'].Disable()
-    
+
     def OnHighlight(self, event):
         if self.effect['highlightCtrl'].GetValue():
             self.effect['highlightColor'].Enable()
@@ -3927,7 +5561,7 @@ class TextDialog(PsmapDialog):
             self.effect['highlightColor'].Disable()
             self.effect['highlightWidth'].Disable()
             self.effect['highlightWidthLabel'].Disable()
-            
+
     def OnBorder(self, event):
         if self.effect['borderCtrl'].GetValue():
             self.effect['borderColor'].Enable()
@@ -3938,35 +5572,37 @@ class TextDialog(PsmapDialog):
             self.effect['borderColor'].Disable()
             self.effect['borderWidth'].Disable()
             self.effect['borderWidthLabel'].Disable()
-            
-    def update(self): 
-        #text
+
+    def update(self):
+        # text
         self.textDict['text'] = self.textCtrl.GetValue()
         if not self.textDict['text']:
             wx.MessageBox(_("No text entered!"), _("Error"))
             return False
-            
-        #font
-        self.textDict['font'] = self.textPanel.font['fontCtrl'].GetStringSelection()
-        self.textDict['fontsize'] = self.textPanel.font['fontSizeCtrl'].GetValue()
+
+        # font
+        self.textDict['font'] = self.textPanel.font[
+            'fontCtrl'].GetStringSelection()
+        self.textDict['fontsize'] = self.textPanel.font[
+            'fontSizeCtrl'].GetValue()
         color = self.textPanel.font['colorCtrl'].GetColour()
         self.textDict['color'] = convertRGB(color)
 
-        #effects
+        # effects
         if self.effect['backgroundCtrl'].GetValue():
             background = self.effect['backgroundColor'].GetColour()
             self.textDict['background'] = convertRGB(background)
         else:
-            self.textDict['background'] = 'none'        
-                
+            self.textDict['background'] = 'none'
+
         if self.effect['borderCtrl'].GetValue():
             border = self.effect['borderColor'].GetColour()
             self.textDict['border'] = convertRGB(border)
         else:
-            self.textDict['border'] = 'none' 
-                     
+            self.textDict['border'] = 'none'
+
         self.textDict['width'] = self.effect['borderWidth'].GetValue()
-        
+
         if self.effect['highlightCtrl'].GetValue():
             highlight = self.effect['highlightColor'].GetColour()
             self.textDict['hcolor'] = convertRGB(highlight)
@@ -3974,89 +5610,107 @@ class TextDialog(PsmapDialog):
             self.textDict['hcolor'] = 'none'
 
         self.textDict['hwidth'] = self.effect['highlightWidth'].GetValue()
-        
-        #offset
+
+        # offset
         self.textDict['xoffset'] = self.xoffCtrl.GetValue()
         self.textDict['yoffset'] = self.yoffCtrl.GetValue()
 
-        #position
+        # position
         if self.positionPanel.position['toPaper'].GetValue():
             self.textDict['XY'] = True
-            currUnit = self.unitConv.findUnit(self.positionPanel.units['unitsCtrl'].GetStringSelection())
+            currUnit = self.unitConv.findUnit(
+                self.positionPanel.units['unitsCtrl'].GetStringSelection())
             self.textDict['unit'] = currUnit
             if self.positionPanel.position['xCtrl'].GetValue():
-                x = self.positionPanel.position['xCtrl'].GetValue() 
+                x = self.positionPanel.position['xCtrl'].GetValue()
             else:
                 x = self.textDict['where'][0]
 
             if self.positionPanel.position['yCtrl'].GetValue():
-                y = self.positionPanel.position['yCtrl'].GetValue() 
+                y = self.positionPanel.position['yCtrl'].GetValue()
             else:
                 y = self.textDict['where'][1]
 
-            x = self.unitConv.convert(value = float(x), fromUnit = currUnit, toUnit = 'inch')
-            y = self.unitConv.convert(value = float(y), fromUnit = currUnit, toUnit = 'inch')
+            x = self.unitConv.convert(
+                value=float(x), fromUnit=currUnit, toUnit='inch')
+            y = self.unitConv.convert(
+                value=float(y), fromUnit=currUnit, toUnit='inch')
             self.textDict['where'] = x, y
-            self.textDict['east'], self.textDict['north'] = PaperMapCoordinates(self.instruction[self.mapId], x, y, paperToMap = True)
+            self.textDict['east'], self.textDict['north'] = PaperMapCoordinates(
+                self.instruction[self.mapId], x, y, paperToMap=True)
         else:
             self.textDict['XY'] = False
             if self.positionPanel.position['eCtrl'].GetValue():
-                self.textDict['east'] = self.positionPanel.position['eCtrl'].GetValue() 
+                self.textDict['east'] = self.positionPanel.position[
+                    'eCtrl'].GetValue()
             else:
                 self.textDict['east'] = self.textDict['east']
 
             if self.positionPanel.position['nCtrl'].GetValue():
-                self.textDict['north'] = self.positionPanel.position['nCtrl'].GetValue() 
+                self.textDict['north'] = self.positionPanel.position[
+                    'nCtrl'].GetValue()
             else:
                 self.textDict['north'] = self.textDict['north']
 
-            self.textDict['where'] = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = float(self.textDict['east']),
-                                                            y = float(self.textDict['north']), paperToMap = False)
-        #rotation
+            self.textDict['where'] = PaperMapCoordinates(
+                mapInstr=self.instruction[
+                    self.mapId], x=float(
+                    self.textDict['east']), y=float(
+                    self.textDict['north']), paperToMap=False)
+        # rotation
         if self.rotCtrl.GetValue():
             self.textDict['rotate'] = self.rotValue.GetValue()
         else:
             self.textDict['rotate'] = None
-        #reference point
+        # reference point
         for radio in self.radio:
             if radio.GetValue() == True:
                 self.textDict['ref'] = radio.GetName()
-                
+
         if self.id not in self.instruction:
             text = Text(self.id)
             self.instruction.AddInstruction(text)
         self.instruction[self.id].SetInstruction(self.textDict)
-        
+
         if self.id not in self.parent.objectId:
             self.parent.objectId.append(self.id)
 
 #        self.updateDialog()
 
         return True
-    
+
     def updateDialog(self):
         """Update text coordinates, after moving"""
         # XY coordinates
         x, y = self.textDict['where'][:2]
-        currUnit = self.unitConv.findUnit(self.positionPanel.units['unitsCtrl'].GetStringSelection())
-        x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-        y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+        currUnit = self.unitConv.findUnit(
+            self.positionPanel.units['unitsCtrl'].GetStringSelection())
+        x = self.unitConv.convert(value=x, fromUnit='inch', toUnit=currUnit)
+        y = self.unitConv.convert(value=y, fromUnit='inch', toUnit=currUnit)
         self.positionPanel.position['xCtrl'].SetValue("%5.3f" % x)
         self.positionPanel.position['yCtrl'].SetValue("%5.3f" % y)
         # EN coordinates
         e, n = self.textDict['east'], self.textDict['north']
-        self.positionPanel.position['eCtrl'].SetValue(str(self.textDict['east']))
-        self.positionPanel.position['nCtrl'].SetValue(str(self.textDict['north']))
-        
+        self.positionPanel.position['eCtrl'].SetValue(
+            str(self.textDict['east']))
+        self.positionPanel.position['nCtrl'].SetValue(
+            str(self.textDict['north']))
+
+
 class ImageDialog(PsmapDialog):
     """Dialog for setting image properties.
-    
+
     It's base dialog for North Arrow dialog.
     """
-    def __init__(self, parent, id, settings, imagePanelName = _("Image")):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "Image settings",
-                             settings = settings)
-        
+
+    def __init__(self, parent, id, settings, imagePanelName=_("Image")):
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="Image settings",
+            settings=settings)
+
         self.objectType = ('image',)
         if self.id is not None:
             self.imageObj = self.instruction[self.id]
@@ -4065,109 +5719,142 @@ class ImageDialog(PsmapDialog):
             self.id = wx.NewId()
             self.imageObj = self._newObject()
             self.imageDict = self.imageObj.GetInstruction()
-            page = self.instruction.FindInstructionByType('page').GetInstruction()
-            self.imageDict['where'] = page['Left'], page['Top'] 
-                
+            page = self.instruction.FindInstructionByType(
+                'page').GetInstruction()
+            self.imageDict['where'] = page['Left'], page['Top']
+
         map = self.instruction.FindInstructionByType('map')
         if not map:
             map = self.instruction.FindInstructionByType('initMap')
         self.mapId = map.id
 
-        self.imageDict['east'], self.imageDict['north'] = PaperMapCoordinates(mapInstr = map, x = self.imageDict['where'][0], y = self.imageDict['where'][1], paperToMap = True)
-        
-        notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+        self.imageDict['east'], self.imageDict['north'] = PaperMapCoordinates(
+            mapInstr=map, x=self.imageDict['where'][0],
+            y=self.imageDict['where'][1],
+            paperToMap=True)
+
+        notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         self.imagePanelName = imagePanelName
         self.imagePanel = self._imagePanel(notebook)
         self.positionPanel = self._positionPanel(notebook)
         self.OnPositionType(None)
-        
+
         if self.imageDict['epsfile']:
-            self.imagePanel.image['dir'].SetValue(os.path.dirname(self.imageDict['epsfile']))
+            self.imagePanel.image['dir'].SetValue(
+                os.path.dirname(self.imageDict['epsfile']))
         else:
             self.imagePanel.image['dir'].SetValue(self._getImageDirectory())
         self.OnDirChanged(None)
-     
+
         self._layout(notebook)
-        
-        
+
     def _newObject(self):
         """Create corresponding instruction object"""
         return Image(self.id, self.instruction)
-        
+
     def _imagePanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = self.imagePanelName)
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=self.imagePanelName)
         border = wx.BoxSizer(wx.VERTICAL)
         #
         # choose image
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Image"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Image"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
+
         # choose directory
         panel.image = {}
         if self.imageDict['epsfile']:
             startDir = os.path.dirname(self.imageDict['epsfile'])
         else:
             startDir = self._getImageDirectory()
-        dir = filebrowse.DirBrowseButton(parent = panel, id = wx.ID_ANY,
-                                         labelText = _("Choose a directory:"),
-                                         dialogTitle = _("Choose a directory with images"),
-                                         buttonText = _('Browse'),
-                                         startDirectory = startDir,
-                                         changeCallback = self.OnDirChanged)
+        dir = filebrowse.DirBrowseButton(
+            parent=panel,
+            id=wx.ID_ANY,
+            labelText=_("Choose a directory:"),
+            dialogTitle=_("Choose a directory with images"),
+            buttonText=_('Browse'),
+            startDirectory=startDir,
+            changeCallback=self.OnDirChanged)
         panel.image['dir'] = dir
-       
-        
-        sizer.Add(item = dir, proportion = 0, flag = wx.EXPAND, border = 0)
-        
+
+        sizer.Add(item=dir, proportion=0, flag=wx.EXPAND, border=0)
+
         # image list
         hSizer = wx.BoxSizer(wx.HORIZONTAL)
-        
-        imageList = wx.ListBox(parent = panel, id = wx.ID_ANY)
+
+        imageList = wx.ListBox(parent=panel, id=wx.ID_ANY)
         panel.image['list'] = imageList
         imageList.Bind(wx.EVT_LISTBOX, self.OnImageSelectionChanged)
-        
-        hSizer.Add(item = imageList, proportion = 1, flag = wx.EXPAND | wx.RIGHT, border = 10)
-        
+
+        hSizer.Add(
+            item=imageList,
+            proportion=1,
+            flag=wx.EXPAND | wx.RIGHT,
+            border=10)
+
         # image preview
         vSizer = wx.BoxSizer(wx.VERTICAL)
         self.previewSize = (150, 150)
         img = wx.EmptyImage(*self.previewSize)
-        panel.image['preview'] = wx.StaticBitmap(parent = panel, id = wx.ID_ANY,
-                                                bitmap = wx.BitmapFromImage(img))
-        vSizer.Add(item = panel.image['preview'], proportion = 0, flag = wx.EXPAND | wx.BOTTOM, border = 5)
-        panel.image['sizeInfo'] = wx.StaticText(parent = panel, id = wx.ID_ANY)
-        vSizer.Add(item = panel.image['sizeInfo'], proportion = 0, flag = wx.ALIGN_CENTER, border = 0)
-        
-        hSizer.Add(item = vSizer, proportion = 0, flag = wx.EXPAND, border = 0)
-        sizer.Add(item = hSizer, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 3)
-        
-        epsInfo = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                label = _("Note: only EPS format supported"))
-        sizer.Add(item = epsInfo, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 3)
-        
-        
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        panel.image['preview'] = wx.StaticBitmap(
+            parent=panel, id=wx.ID_ANY, bitmap=wx.BitmapFromImage(img))
+        vSizer.Add(
+            item=panel.image['preview'],
+            proportion=0,
+            flag=wx.EXPAND | wx.BOTTOM,
+            border=5)
+        panel.image['sizeInfo'] = wx.StaticText(parent=panel, id=wx.ID_ANY)
+        vSizer.Add(
+            item=panel.image['sizeInfo'],
+            proportion=0,
+            flag=wx.ALIGN_CENTER,
+            border=0)
+
+        hSizer.Add(item=vSizer, proportion=0, flag=wx.EXPAND, border=0)
+        sizer.Add(item=hSizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=3)
+
+        epsInfo = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                label=_("Note: only EPS format supported"))
+        sizer.Add(
+            item=epsInfo,
+            proportion=0,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=3)
+
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         #
         # rotation
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Scale And Rotation"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Scale And Rotation"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        scaleLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Scale:"))
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        scaleLabel = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, label=_("Scale:"))
         if fs:
-            panel.image['scale'] = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = 0, max_val = 50,
-                                          increment = 0.5, value = 1, style = fs.FS_RIGHT, size = self.spinCtrlSize)
+            panel.image['scale'] = fs.FloatSpin(
+                panel, id=wx.ID_ANY, min_val=0, max_val=50, increment=0.5,
+                value=1, style=fs.FS_RIGHT, size=self.spinCtrlSize)
             panel.image['scale'].SetFormat("%f")
             panel.image['scale'].SetDigits(1)
         else:
-            panel.image['scale'] = wx.TextCtrl(panel, id = wx.ID_ANY, size = self.spinCtrlSize,
-                                                  validator = TCValidator(flag = 'DIGIT_ONLY'))
-        
+            panel.image['scale'] = wx.TextCtrl(
+                panel, id=wx.ID_ANY, size=self.spinCtrlSize,
+                validator=TCValidator(flag='DIGIT_ONLY'))
+
         if self.imageDict['scale']:
             if fs:
                 value = float(self.imageDict['scale'])
@@ -4179,84 +5866,125 @@ class ImageDialog(PsmapDialog):
             else:
                 value = '0'
         panel.image['scale'].SetValue(value)
-            
-        gridSizer.Add(item = scaleLabel, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = panel.image['scale'], pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        
-        rotLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Rotation angle (deg):"))
+
+        gridSizer.Add(
+            item=scaleLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=panel.image['scale'],
+            pos=(0, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+
+        rotLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Rotation angle (deg):"))
         if fs:
-            panel.image['rotate'] = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = 0, max_val = 360,
-                                          increment = 0.5, value = 0, style = fs.FS_RIGHT, size = self.spinCtrlSize)
+            panel.image['rotate'] = fs.FloatSpin(
+                panel, id=wx.ID_ANY, min_val=0, max_val=360, increment=0.5,
+                value=0, style=fs.FS_RIGHT, size=self.spinCtrlSize)
             panel.image['rotate'].SetFormat("%f")
             panel.image['rotate'].SetDigits(1)
         else:
-            panel.image['rotate'] = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = self.spinCtrlSize,
-                                                min = 0, max = 359, initial = 0)
-        panel.image['rotate'].SetToolTipString(_("Counterclockwise rotation in degrees"))
+            panel.image['rotate'] = wx.SpinCtrl(
+                parent=panel,
+                id=wx.ID_ANY,
+                size=self.spinCtrlSize,
+                min=0,
+                max=359,
+                initial=0)
+        panel.image['rotate'].SetToolTipString(
+            _("Counterclockwise rotation in degrees"))
         if self.imageDict['rotate']:
             panel.image['rotate'].SetValue(int(self.imageDict['rotate']))
         else:
             panel.image['rotate'].SetValue(0)
-            
-        gridSizer.Add(item = rotLabel, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridSizer.Add(item = panel.image['rotate'], pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        self._addConvergence(panel = panel, gridBagSizer = gridSizer)
-        sizer.Add(item = gridSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        gridSizer.Add(
+            item=rotLabel,
+            pos=(
+                1,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        gridSizer.Add(
+            item=panel.image['rotate'], pos=(
+                1, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        self._addConvergence(panel=panel, gridBagSizer=gridSizer)
+        sizer.Add(
+            item=gridSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
-        
+
         return panel
-        
+
     def _positionPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Position"))
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Position"))
         border = wx.BoxSizer(wx.VERTICAL)
         #
         # set position
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Position"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Position"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
+
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
         self.AddExtendedPosition(panel, gridBagSizer, self.imageDict)
-        
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnPositionType, panel.position['toPaper']) 
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnPositionType, panel.position['toMap'])
-        
-        
+
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnPositionType,
+            panel.position['toPaper'])
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnPositionType,
+            panel.position['toMap'])
+
         gridBagSizer.AddGrowableCol(0)
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.ALIGN_CENTER_VERTICAL| wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
-        
+
         return panel
-        
+
     def OnDirChanged(self, event):
         """Image directory changed"""
         path = self.imagePanel.image['dir'].GetValue()
         try:
             files = os.listdir(path)
-        except OSError: # no such directory
+        except OSError:  # no such directory
             files = []
         imageList = []
-        
+
         # no setter for startDirectory?
         try:
             self.imagePanel.image['dir'].startDirectory = path
-        except AttributeError: # for sure
+        except AttributeError:  # for sure
             pass
         for file in files:
             if os.path.splitext(file)[1].lower() == '.eps':
                 imageList.append(file)
-        
+
         imageList.sort()
         self.imagePanel.image['list'].SetItems(imageList)
         if self.imageDict['epsfile']:
@@ -4265,7 +5993,7 @@ class ImageDialog(PsmapDialog):
         elif imageList:
             self.imagePanel.image['list'].SetSelection(0)
         self.OnImageSelectionChanged(None)
-        
+
     def OnPositionType(self, event):
         if self.positionPanel.position['toPaper'].GetValue():
             for widget in self.gridBagSizerP.GetChildren():
@@ -4277,23 +6005,24 @@ class ImageDialog(PsmapDialog):
                 widget.GetWindow().Enable()
             for widget in self.gridBagSizerP.GetChildren():
                 widget.GetWindow().Disable()
-                
+
     def _getImageDirectory(self):
         """Default image directory"""
         return os.getcwd()
-        
+
     def _addConvergence(self, panel, gridBagSizer):
         pass
-        
+
     def OnImageSelectionChanged(self, event):
         """Image selected, show preview and size"""
-        if not self.imagePanel.image['dir']: # event is emitted when closing dialog an it causes error
+        if not self.imagePanel.image[
+                'dir']:  # event is emitted when closing dialog an it causes error
             return
-            
+
         if not havePILImage:
             self.DrawWarningText(_("PIL\nmissing"))
             return
-        
+
         imageName = self.imagePanel.image['list'].GetStringSelection()
         if not imageName:
             self.ClearPreview()
@@ -4302,7 +6031,7 @@ class ImageDialog(PsmapDialog):
         file = os.path.join(basePath, imageName)
         if not os.path.exists(file):
             return
-            
+
         if os.path.splitext(file)[1].lower() == '.eps':
             try:
                 pImg = PILImage.open(file)
@@ -4311,18 +6040,18 @@ class ImageDialog(PsmapDialog):
                     pImg.load = types.MethodType(loadPSForWindows, pImg)
                 img = PilImageToWxImage(pImg)
             except IOError as e:
-                GError(message = _("Unable to read file %s") % file)
+                GError(message=_("Unable to read file %s") % file)
                 self.ClearPreview()
                 return
             self.SetSizeInfoLabel(img)
             img = self.ScaleToPreview(img)
             bitmap = img.ConvertToBitmap()
             self.DrawBitmap(bitmap)
-            
+
         else:
             # TODO: read other formats and convert by PIL to eps
             pass
-    
+
     def ScaleToPreview(self, img):
         """Scale image to preview size"""
         w = img.GetWidth()
@@ -4336,7 +6065,7 @@ class ImageDialog(PsmapDialog):
             newH = self.previewSize[0]
             newW = self.previewSize[0] * w / h
         return img.Scale(newW, newH, wx.IMAGE_QUALITY_HIGH)
-        
+
     def DrawWarningText(self, warning):
         """Draw text on preview window"""
         buffer = wx.EmptyBitmap(*self.previewSize)
@@ -4350,10 +6079,11 @@ class ImageDialog(PsmapDialog):
         dc.DrawText(warning, posX, posY)
         self.imagePanel.image['preview'].SetBitmap(buffer)
         dc.SelectObject(wx.NullBitmap)
-        
+
     def DrawBitmap(self, bitmap):
         """Draw bitmap, center it if smaller than preview size"""
-        if bitmap.GetWidth() <= self.previewSize[0] and bitmap.GetHeight() <= self.previewSize[1]:
+        if bitmap.GetWidth() <= self.previewSize[
+                0] and bitmap.GetHeight() <= self.previewSize[1]:
             buffer = wx.EmptyBitmap(*self.previewSize)
             dc = wx.MemoryDC()
             dc.SelectObject(buffer)
@@ -4367,14 +6097,15 @@ class ImageDialog(PsmapDialog):
         else:
             self.imagePanel.image['preview'].SetBitmap(bitmap)
         self.imagePanel.Refresh()
-            
+
     def SetSizeInfoLabel(self, image):
         """Update image size label"""
-        self.imagePanel.image['sizeInfo'].SetLabel(_("size: %(width)s x %(height)s pts") % \
-                                                       { 'width'  : image.GetWidth(),
-                                                         'height' : image.GetHeight() })
+        self.imagePanel.image['sizeInfo'].SetLabel(
+            _("size: %(width)s x %(height)s pts") %
+            {'width': image.GetWidth(),
+             'height': image.GetHeight()})
         self.imagePanel.image['sizeInfo'].GetContainingSizer().Layout()
-        
+
     def ClearPreview(self):
         """Clear preview window"""
         buffer = wx.EmptyBitmap(*self.previewSize)
@@ -4386,142 +6117,159 @@ class ImageDialog(PsmapDialog):
         mask = wx.Mask(buffer, wx.WHITE)
         buffer.SetMask(mask)
         self.imagePanel.image['preview'].SetBitmap(buffer)
-        
-    def update(self): 
+
+    def update(self):
         # epsfile
         selected = self.imagePanel.image['list'].GetStringSelection()
         basePath = self.imagePanel.image['dir'].GetValue()
         if not selected:
-            GMessage(parent = self, message = _("No image selected."))
+            GMessage(parent=self, message=_("No image selected."))
             return False
-            
+
         self.imageDict['epsfile'] = os.path.join(basePath, selected)
-        
-        #position
+
+        # position
         if self.positionPanel.position['toPaper'].GetValue():
             self.imageDict['XY'] = True
-            currUnit = self.unitConv.findUnit(self.positionPanel.units['unitsCtrl'].GetStringSelection())
+            currUnit = self.unitConv.findUnit(
+                self.positionPanel.units['unitsCtrl'].GetStringSelection())
             self.imageDict['unit'] = currUnit
             if self.positionPanel.position['xCtrl'].GetValue():
-                x = self.positionPanel.position['xCtrl'].GetValue() 
+                x = self.positionPanel.position['xCtrl'].GetValue()
             else:
                 x = self.imageDict['where'][0]
 
             if self.positionPanel.position['yCtrl'].GetValue():
-                y = self.positionPanel.position['yCtrl'].GetValue() 
+                y = self.positionPanel.position['yCtrl'].GetValue()
             else:
                 y = self.imageDict['where'][1]
 
-            x = self.unitConv.convert(value = float(x), fromUnit = currUnit, toUnit = 'inch')
-            y = self.unitConv.convert(value = float(y), fromUnit = currUnit, toUnit = 'inch')
+            x = self.unitConv.convert(
+                value=float(x), fromUnit=currUnit, toUnit='inch')
+            y = self.unitConv.convert(
+                value=float(y), fromUnit=currUnit, toUnit='inch')
             self.imageDict['where'] = x, y
-            
+
         else:
             self.imageDict['XY'] = False
             if self.positionPanel.position['eCtrl'].GetValue():
-                e = self.positionPanel.position['eCtrl'].GetValue() 
+                e = self.positionPanel.position['eCtrl'].GetValue()
             else:
                 self.imageDict['east'] = self.imageDict['east']
 
             if self.positionPanel.position['nCtrl'].GetValue():
-                n = self.positionPanel.position['nCtrl'].GetValue() 
+                n = self.positionPanel.position['nCtrl'].GetValue()
             else:
                 self.imageDict['north'] = self.imageDict['north']
 
-            x, y = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = float(self.imageDict['east']),
-                                       y = float(self.imageDict['north']), paperToMap = False)
+            x, y = PaperMapCoordinates(
+                mapInstr=self.instruction[
+                    self.mapId], x=float(
+                    self.imageDict['east']), y=float(
+                    self.imageDict['north']), paperToMap=False)
 
-        #rotation
+        # rotation
         rot = self.imagePanel.image['rotate'].GetValue()
         if rot == 0:
             self.imageDict['rotate'] = None
         else:
             self.imageDict['rotate'] = rot
-        
-        #scale
+
+        # scale
         self.imageDict['scale'] = self.imagePanel.image['scale'].GetValue()
-                
+
         # scale
         w, h = self.imageObj.GetImageOrigSize(self.imageDict['epsfile'])
         if self.imageDict['rotate']:
-            self.imageDict['size'] = BBoxAfterRotation(w, h, self.imageDict['rotate'])
+            self.imageDict['size'] = BBoxAfterRotation(
+                w, h, self.imageDict['rotate'])
         else:
             self.imageDict['size'] = w, h
-            
-        w = self.unitConv.convert(value = self.imageDict['size'][0],
-                                  fromUnit = 'point', toUnit = 'inch')
-        h = self.unitConv.convert(value = self.imageDict['size'][1],
-                                  fromUnit = 'point', toUnit = 'inch')
-                                  
-    
-        self.imageDict['rect'] = Rect2D(x = x, y = y,
-                                        width = w * self.imageDict['scale'],
-                                        height = h * self.imageDict['scale'])
-        
+
+        w = self.unitConv.convert(value=self.imageDict['size'][0],
+                                  fromUnit='point', toUnit='inch')
+        h = self.unitConv.convert(value=self.imageDict['size'][1],
+                                  fromUnit='point', toUnit='inch')
+
+        self.imageDict['rect'] = Rect2D(x=x, y=y,
+                                        width=w * self.imageDict['scale'],
+                                        height=h * self.imageDict['scale'])
+
         if self.id not in self.instruction:
             image = self._newObject()
             self.instruction.AddInstruction(image)
         self.instruction[self.id].SetInstruction(self.imageDict)
-        
+
         if self.id not in self.parent.objectId:
             self.parent.objectId.append(self.id)
 
         return True
-        
+
     def updateDialog(self):
         """Update text coordinates, after moving"""
         # XY coordinates
         x, y = self.imageDict['where'][:2]
-        currUnit = self.unitConv.findUnit(self.positionPanel.units['unitsCtrl'].GetStringSelection())
-        x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-        y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+        currUnit = self.unitConv.findUnit(
+            self.positionPanel.units['unitsCtrl'].GetStringSelection())
+        x = self.unitConv.convert(value=x, fromUnit='inch', toUnit=currUnit)
+        y = self.unitConv.convert(value=y, fromUnit='inch', toUnit=currUnit)
         self.positionPanel.position['xCtrl'].SetValue("%5.3f" % x)
         self.positionPanel.position['yCtrl'].SetValue("%5.3f" % y)
         # EN coordinates
         e, n = self.imageDict['east'], self.imageDict['north']
-        self.positionPanel.position['eCtrl'].SetValue(str(self.imageDict['east']))
-        self.positionPanel.position['nCtrl'].SetValue(str(self.imageDict['north']))
-        
-        
+        self.positionPanel.position['eCtrl'].SetValue(
+            str(self.imageDict['east']))
+        self.positionPanel.position['nCtrl'].SetValue(
+            str(self.imageDict['north']))
+
+
 class NorthArrowDialog(ImageDialog):
+
     def __init__(self, parent, id, settings):
-        ImageDialog.__init__(self, parent = parent, id = id, settings = settings,
-                             imagePanelName = _("North Arrow"))
-        
+        ImageDialog.__init__(self, parent=parent, id=id, settings=settings,
+                             imagePanelName=_("North Arrow"))
+
         self.objectType = ('northArrow',)
         self.SetTitle(_("North Arrow settings"))
-    
+
     def _newObject(self):
         return NorthArrow(self.id, self.instruction)
-        
+
     def _getImageDirectory(self):
         gisbase = os.getenv("GISBASE")
         return os.path.join(gisbase, 'etc', 'paint', 'decorations')
-    
+
     def _addConvergence(self, panel, gridBagSizer):
-        convergence = wx.Button(parent = panel, id = wx.ID_ANY,
-                                               label = _("Compute convergence"))
-        gridBagSizer.Add(item = convergence, pos = (1, 2),
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+        convergence = wx.Button(parent=panel, id=wx.ID_ANY,
+                                label=_("Compute convergence"))
+        gridBagSizer.Add(item=convergence, pos=(1, 2),
+                         flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
         convergence.Bind(wx.EVT_BUTTON, self.OnConvergence)
         panel.image['convergence'] = convergence
-        
+
     def OnConvergence(self, event):
-        ret = RunCommand('g.region', read = True, flags = 'ng')
+        ret = RunCommand('g.region', read=True, flags='ng')
         if ret:
             convergence = float(ret.strip().split('=')[1])
             if convergence < 0:
                 self.imagePanel.image['rotate'].SetValue(abs(convergence))
             else:
                 self.imagePanel.image['rotate'].SetValue(360 - convergence)
-            
-        
+
+
 class PointDialog(PsmapDialog):
     """Dialog for setting point properties."""
-    def __init__(self, parent, id, settings, coordinates = None, pointPanelName = _("Point")):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = "Point settings",
-                             settings = settings)
-        
+
+    def __init__(
+            self, parent, id, settings, coordinates=None,
+            pointPanelName=_("Point")):
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title="Point settings",
+            settings=settings)
+
         self.objectType = ('point',)
         if self.id is not None:
             self.pointObj = self.instruction[self.id]
@@ -4530,173 +6278,279 @@ class PointDialog(PsmapDialog):
             self.id = wx.NewId()
             self.pointObj = Point(self.id)
             self.pointDict = self.pointObj.GetInstruction()
-            self.pointDict['where'] = coordinates 
+            self.pointDict['where'] = coordinates
         self.defaultDict = self.pointObj.defaultInstruction
-                
+
         mapObj = self.instruction.FindInstructionByType('map')
         if not mapObj:
             mapObj = self.instruction.FindInstructionByType('initMap')
         self.mapId = mapObj.id
-        
-        self.pointDict['east'], self.pointDict['north'] = PaperMapCoordinates(mapInstr = mapObj, x = self.pointDict['where'][0], y = self.pointDict['where'][1], paperToMap = True)
-        
-        notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+
+        self.pointDict['east'], self.pointDict['north'] = PaperMapCoordinates(
+            mapInstr=mapObj, x=self.pointDict['where'][0],
+            y=self.pointDict['where'][1],
+            paperToMap=True)
+
+        notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         self.pointPanelName = pointPanelName
         self.pointPanel = self._pointPanel(notebook)
         self.positionPanel = self._positionPanel(notebook)
         self.OnPositionType(None)
-        
-     
+
         self._layout(notebook)
-        
+
     def _pointPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = self.pointPanelName)
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=self.pointPanelName)
         border = wx.BoxSizer(wx.VERTICAL)
         #
         # choose image
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Symbol"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Symbol"))
         sizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Select symbol:")),
-                      pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        self.symbolLabel = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                          label = self.pointDict['symbol'])
-        gridSizer.Add(item = self.symbolLabel, pos = (0, 1),
-                      flag = wx.ALIGN_CENTER_VERTICAL )
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        gridSizer.Add(
+            item=wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("Select symbol:")), pos=(
+                0, 0), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        self.symbolLabel = wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=self.pointDict['symbol'])
+        gridSizer.Add(item=self.symbolLabel, pos=(0, 1),
+                      flag=wx.ALIGN_CENTER_VERTICAL)
         bitmap = wx.Bitmap(os.path.join(globalvar.SYMBDIR,
                                         self.pointDict['symbol']) + '.png')
-        self.symbolButton = wx.BitmapButton(panel, id = wx.ID_ANY, bitmap = bitmap)
+        self.symbolButton = wx.BitmapButton(panel, id=wx.ID_ANY, bitmap=bitmap)
         self.symbolButton.Bind(wx.EVT_BUTTON, self.OnSymbolSelection)
 
-        gridSizer.Add(self.symbolButton, pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        self.noteLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, 
-                                       label = _("Note: Selected symbol is not displayed\n"
-                                                 "in draft mode (only in preview mode)"))
-        gridSizer.Add(self.noteLabel, pos = (1, 0), span = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            self.symbolButton, pos=(0, 2),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        self.noteLabel = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, label=_(
+                "Note: Selected symbol is not displayed\n"
+                "in draft mode (only in preview mode)"))
+        gridSizer.Add(
+            self.noteLabel, pos=(
+                1, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
 
         gridSizer.AddGrowableCol(1)
-        sizer.Add(item = gridSizer, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            item=gridSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         #
         # outline/fill color
         #
 
         # outline
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Color"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Color"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        outlineLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Outline color:"))
-        self.outlineColorCtrl = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        self.outlineTranspCtrl = wx.CheckBox(panel, id = wx.ID_ANY, label = _("transparent"))
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        outlineLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Outline color:"))
+        self.outlineColorCtrl = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
+        self.outlineTranspCtrl = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("transparent"))
 
         if self.pointDict['color'] != 'none':
             self.outlineTranspCtrl.SetValue(False)
-            self.outlineColorCtrl.SetColour(convertRGB(self.pointDict['color']))
+            self.outlineColorCtrl.SetColour(
+                convertRGB(self.pointDict['color']))
         else:
             self.outlineTranspCtrl.SetValue(True)
-            self.outlineColorCtrl.SetColour(convertRGB(self.defaultDict['color']))
-
-        gridSizer.Add(item = outlineLabel, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.outlineColorCtrl, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.outlineTranspCtrl, pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-
-        fillLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Fill color:"))
-        self.fillColorCtrl = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        self.fillTranspCtrl = wx.CheckBox(panel, id = wx.ID_ANY, label = _("transparent"))
+            self.outlineColorCtrl.SetColour(
+                convertRGB(self.defaultDict['color']))
+
+        gridSizer.Add(
+            item=outlineLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.outlineColorCtrl, pos=(
+                0, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.outlineTranspCtrl, pos=(
+                0, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        fillLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Fill color:"))
+        self.fillColorCtrl = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
+        self.fillTranspCtrl = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("transparent"))
 
         if self.pointDict['fcolor'] != 'none':
             self.fillTranspCtrl.SetValue(False)
             self.fillColorCtrl.SetColour(convertRGB(self.pointDict['fcolor']))
         else:
             self.fillTranspCtrl.SetValue(True)
-            self.fillColorCtrl.SetColour(convertRGB(self.defaultDict['fcolor']))
-
-        gridSizer.Add(item = fillLabel, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.fillColorCtrl, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.fillTranspCtrl, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        sizer.Add(item = gridSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+            self.fillColorCtrl.SetColour(
+                convertRGB(self.defaultDict['fcolor']))
+
+        gridSizer.Add(
+            item=fillLabel, pos=(1, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.fillColorCtrl, pos=(
+                1, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.fillTranspCtrl, pos=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+
+        sizer.Add(
+            item=gridSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         #
         # size and rotation
         #
 
         # size
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Size and Rotation"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Size and Rotation"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
-        sizeLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Size (pt):"))
-        self.sizeCtrl = wx.SpinCtrl(panel, id = wx.ID_ANY, size = self.spinCtrlSize)
+
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        sizeLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Size (pt):"))
+        self.sizeCtrl = wx.SpinCtrl(
+            panel, id=wx.ID_ANY, size=self.spinCtrlSize)
         self.sizeCtrl.SetToolTipString(_("Symbol size in points"))
         self.sizeCtrl.SetValue(self.pointDict['size'])
-        
-        gridSizer.Add(item = sizeLabel, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.sizeCtrl, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        
+
+        gridSizer.Add(
+            item=sizeLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.sizeCtrl, pos=(
+                0, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+
         # rotation
-        rotLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Rotation angle (deg):"))
+        rotLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Rotation angle (deg):"))
         if fs:
-            self.rotCtrl = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = -360, max_val = 360,
-                                          increment = 1, value = 0, style = fs.FS_RIGHT, size = self.spinCtrlSize)
+            self.rotCtrl = fs.FloatSpin(
+                panel,
+                id=wx.ID_ANY,
+                min_val=-360,
+                max_val=360,
+                increment=1,
+                value=0,
+                style=fs.FS_RIGHT,
+                size=self.spinCtrlSize)
             self.rotCtrl.SetFormat("%f")
             self.rotCtrl.SetDigits(1)
         else:
-            self.rotCtrl = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = self.spinCtrlSize,
-                                                min = -360, max = 360, initial = 0)
-        self.rotCtrl.SetToolTipString(_("Counterclockwise rotation in degrees"))
+            self.rotCtrl = wx.SpinCtrl(
+                parent=panel,
+                id=wx.ID_ANY,
+                size=self.spinCtrlSize,
+                min=-360,
+                max=360,
+                initial=0)
+        self.rotCtrl.SetToolTipString(
+            _("Counterclockwise rotation in degrees"))
         self.rotCtrl.SetValue(float(self.pointDict['rotate']))
-            
-        gridSizer.Add(item = rotLabel, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL, border = 0)
-        gridSizer.Add(item = self.rotCtrl, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        
-        sizer.Add(item = gridSizer, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+
+        gridSizer.Add(
+            item=rotLabel,
+            pos=(
+                1,
+                0),
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            border=0)
+        gridSizer.Add(
+            item=self.rotCtrl, pos=(1, 1),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+
+        sizer.Add(
+            item=gridSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
-        
+
         return panel
-        
+
     def _positionPanel(self, notebook):
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY, size = (-1, -1), style = wx.TAB_TRAVERSAL)
-        notebook.AddPage(page = panel, text = _("Position"))
+        panel = wx.Panel(
+            parent=notebook, id=wx.ID_ANY, size=(-1, -1),
+            style=wx.TAB_TRAVERSAL)
+        notebook.AddPage(page=panel, text=_("Position"))
         border = wx.BoxSizer(wx.VERTICAL)
         #
         # set position
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Position"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Position"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridBagSizer = wx.GridBagSizer(hgap = 5, vgap = 5)
-        
+
+        gridBagSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
         self.AddExtendedPosition(panel, gridBagSizer, self.pointDict)
-        
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnPositionType, panel.position['toPaper']) 
-        self.Bind(wx.EVT_RADIOBUTTON, self.OnPositionType, panel.position['toMap'])
-        
-        
+
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnPositionType,
+            panel.position['toPaper'])
+        self.Bind(
+            wx.EVT_RADIOBUTTON,
+            self.OnPositionType,
+            panel.position['toMap'])
+
         gridBagSizer.AddGrowableCol(0)
         gridBagSizer.AddGrowableCol(1)
-        sizer.Add(gridBagSizer, proportion = 1, flag = wx.ALIGN_CENTER_VERTICAL| wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        
+        sizer.Add(
+            gridBagSizer,
+            proportion=1,
+            flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+            border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
         panel.SetSizer(border)
         panel.Fit()
-        
+
         return panel
-        
+
     def OnPositionType(self, event):
         if self.positionPanel.position['toPaper'].GetValue():
             for widget in self.gridBagSizerP.GetChildren():
@@ -4708,106 +6562,120 @@ class PointDialog(PsmapDialog):
                 widget.GetWindow().Enable()
             for widget in self.gridBagSizerP.GetChildren():
                 widget.GetWindow().Disable()
-                
+
     def OnSymbolSelection(self, event):
-        dlg = SymbolDialog(self, symbolPath = globalvar.SYMBDIR,
-                           currentSymbol = self.symbolLabel.GetLabel())
+        dlg = SymbolDialog(self, symbolPath=globalvar.SYMBDIR,
+                           currentSymbol=self.symbolLabel.GetLabel())
         if dlg.ShowModal() == wx.ID_OK:
             img = dlg.GetSelectedSymbolPath()
             name = dlg.GetSelectedSymbolName()
             self.symbolButton.SetBitmapLabel(wx.Bitmap(img + '.png'))
             self.symbolLabel.SetLabel(name)
-            
+
         dlg.Destroy()
-        
-    def update(self): 
+
+    def update(self):
         # symbol
         self.pointDict['symbol'] = self.symbolLabel.GetLabel()
 
-        
-        #position
+        # position
         if self.positionPanel.position['toPaper'].GetValue():
             self.pointDict['XY'] = True
-            currUnit = self.unitConv.findUnit(self.positionPanel.units['unitsCtrl'].GetStringSelection())
+            currUnit = self.unitConv.findUnit(
+                self.positionPanel.units['unitsCtrl'].GetStringSelection())
             self.pointDict['unit'] = currUnit
             if self.positionPanel.position['xCtrl'].GetValue():
-                x = self.positionPanel.position['xCtrl'].GetValue() 
+                x = self.positionPanel.position['xCtrl'].GetValue()
             else:
                 x = self.pointDict['where'][0]
 
             if self.positionPanel.position['yCtrl'].GetValue():
-                y = self.positionPanel.position['yCtrl'].GetValue() 
+                y = self.positionPanel.position['yCtrl'].GetValue()
             else:
                 y = self.pointDict['where'][1]
 
-            x = self.unitConv.convert(value = float(x), fromUnit = currUnit, toUnit = 'inch')
-            y = self.unitConv.convert(value = float(y), fromUnit = currUnit, toUnit = 'inch')
+            x = self.unitConv.convert(
+                value=float(x), fromUnit=currUnit, toUnit='inch')
+            y = self.unitConv.convert(
+                value=float(y), fromUnit=currUnit, toUnit='inch')
             self.pointDict['where'] = x, y
-            
+
         else:
             self.pointDict['XY'] = False
             if self.positionPanel.position['eCtrl'].GetValue():
-                e = self.positionPanel.position['eCtrl'].GetValue() 
+                e = self.positionPanel.position['eCtrl'].GetValue()
             else:
                 self.pointDict['east'] = self.pointDict['east']
 
             if self.positionPanel.position['nCtrl'].GetValue():
-                n = self.positionPanel.position['nCtrl'].GetValue() 
+                n = self.positionPanel.position['nCtrl'].GetValue()
             else:
                 self.pointDict['north'] = self.pointDict['north']
 
-            x, y = PaperMapCoordinates(mapInstr = self.instruction[self.mapId], x = float(self.pointDict['east']),
-                                       y = float(self.pointDict['north']), paperToMap = False)
+            x, y = PaperMapCoordinates(
+                mapInstr=self.instruction[
+                    self.mapId], x=float(
+                    self.pointDict['east']), y=float(
+                    self.pointDict['north']), paperToMap=False)
 
-        #rotation
+        # rotation
         self.pointDict['rotate'] = self.rotCtrl.GetValue()
-        
+
         # size
         self.pointDict['size'] = self.sizeCtrl.GetValue()
-            
-        w = h = self.unitConv.convert(value = self.pointDict['size'],
-                                  fromUnit = 'point', toUnit = 'inch')
-                                  
+
+        w = h = self.unitConv.convert(value=self.pointDict['size'],
+                                      fromUnit='point', toUnit='inch')
+
         # outline color
         if self.outlineTranspCtrl.GetValue():
             self.pointDict['color'] = 'none'
         else:
-            self.pointDict['color'] = convertRGB(self.outlineColorCtrl.GetColour())
+            self.pointDict['color'] = convertRGB(
+                self.outlineColorCtrl.GetColour())
 
         # fill color
         if self.fillTranspCtrl.GetValue():
             self.pointDict['fcolor'] = 'none'
         else:
-            self.pointDict['fcolor'] = convertRGB(self.fillColorCtrl.GetColour())
+            self.pointDict['fcolor'] = convertRGB(
+                self.fillColorCtrl.GetColour())
+
+        self.pointDict['rect'] = Rect2D(
+            x=x - w / 2, y=y - h / 2, width=w, height=h)
 
-        self.pointDict['rect'] = Rect2D(x = x - w / 2, y = y - h / 2, width = w, height = h)
-        
         if self.id not in self.instruction:
             point = Point(self.id)
             self.instruction.AddInstruction(point)
         self.instruction[self.id].SetInstruction(self.pointDict)
-        
+
         if self.id not in self.parent.objectId:
             self.parent.objectId.append(self.id)
 
         return True
-        
+
     def updateDialog(self):
         """Update text coordinates, after moving"""
         # XY coordinates
         x, y = self.pointDict['where'][:2]
-        currUnit = self.unitConv.findUnit(self.positionPanel.units['unitsCtrl'].GetStringSelection())
-        x = self.unitConv.convert(value = x, fromUnit = 'inch', toUnit = currUnit)
-        y = self.unitConv.convert(value = y, fromUnit = 'inch', toUnit = currUnit)
+        currUnit = self.unitConv.findUnit(
+            self.positionPanel.units['unitsCtrl'].GetStringSelection())
+        x = self.unitConv.convert(value=x, fromUnit='inch', toUnit=currUnit)
+        y = self.unitConv.convert(value=y, fromUnit='inch', toUnit=currUnit)
         self.positionPanel.position['xCtrl'].SetValue("%5.3f" % x)
         self.positionPanel.position['yCtrl'].SetValue("%5.3f" % y)
         # EN coordinates
         e, n = self.pointDict['east'], self.pointDict['north']
-        self.positionPanel.position['eCtrl'].SetValue(str(self.pointDict['east']))
-        self.positionPanel.position['nCtrl'].SetValue(str(self.pointDict['north']))
-        
+        self.positionPanel.position['eCtrl'].SetValue(
+            str(self.pointDict['east']))
+        self.positionPanel.position['nCtrl'].SetValue(
+            str(self.pointDict['north']))
+
+
 class RectangleDialog(PsmapDialog):
-    def __init__(self, parent, id, settings, type = 'rectangle', coordinates = None):
+
+    def __init__(self, parent, id, settings,
+                 type='rectangle', coordinates=None):
         """
 
         :param coordinates: begin and end point coordinate (wx.Point, wx.Point)
@@ -4816,8 +6684,13 @@ class RectangleDialog(PsmapDialog):
             title = _("Rectangle settings")
         else:
             title = _("Line settings")
-        PsmapDialog.__init__(self, parent = parent, id = id, title = title, settings = settings)
-        
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=title,
+            settings=settings)
+
         self.objectType = (type,)
 
         if self.id is not None:
@@ -4836,84 +6709,130 @@ class RectangleDialog(PsmapDialog):
 
         self.defaultDict = self.rectObj.defaultInstruction
         self.panel = self._rectPanel()
-        
+
         self._layout(self.panel)
 
     def _rectPanel(self):
-        panel = wx.Panel(parent = self, id = wx.ID_ANY, style = wx.TAB_TRAVERSAL)
+        panel = wx.Panel(parent=self, id=wx.ID_ANY, style=wx.TAB_TRAVERSAL)
         border = wx.BoxSizer(wx.VERTICAL)
-                
+
         # color
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Color"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Color"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
-        
-        outlineLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Outline color:"))
-        self.outlineColorCtrl = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-        self.outlineTranspCtrl = wx.CheckBox(panel, id = wx.ID_ANY, label = _("transparent"))
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
+
+        outlineLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Outline color:"))
+        self.outlineColorCtrl = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
+        self.outlineTranspCtrl = wx.CheckBox(
+            panel, id=wx.ID_ANY, label=_("transparent"))
 
         if self.rectDict['color'] != 'none':
             self.outlineTranspCtrl.SetValue(False)
             self.outlineColorCtrl.SetColour(convertRGB(self.rectDict['color']))
         else:
             self.outlineTranspCtrl.SetValue(True)
-            self.outlineColorCtrl.SetColour(convertRGB(self.defaultDict['color']))
+            self.outlineColorCtrl.SetColour(
+                convertRGB(self.defaultDict['color']))
 
         # transparent outline makes sense only for rectangle
         if self.objectType == ('line',):
             self.outlineTranspCtrl.Hide()
 
-        gridSizer.Add(item = outlineLabel, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.outlineColorCtrl, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.outlineTranspCtrl, pos = (0, 2), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=outlineLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.outlineColorCtrl, pos=(
+                0, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.outlineTranspCtrl, pos=(
+                0, 2), flag=wx.ALIGN_CENTER_VERTICAL)
 
         # fill color only in rectangle
         if self.objectType == ('rectangle',):
-            fillLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Fill color:"))
-            self.fillColorCtrl = wx.ColourPickerCtrl(panel, id = wx.ID_ANY)
-            self.fillTranspCtrl = wx.CheckBox(panel, id = wx.ID_ANY, label = _("transparent"))
+            fillLabel = wx.StaticText(
+                parent=panel, id=wx.ID_ANY, label=_("Fill color:"))
+            self.fillColorCtrl = wx.ColourPickerCtrl(panel, id=wx.ID_ANY)
+            self.fillTranspCtrl = wx.CheckBox(
+                panel, id=wx.ID_ANY, label=_("transparent"))
 
             if self.rectDict['fcolor'] != 'none':
                 self.fillTranspCtrl.SetValue(False)
-                self.fillColorCtrl.SetColour(convertRGB(self.rectDict['fcolor']))
+                self.fillColorCtrl.SetColour(
+                    convertRGB(self.rectDict['fcolor']))
             else:
                 self.fillTranspCtrl.SetValue(True)
                 self.fillColorCtrl.SetColour(wx.WHITE)
 
-            gridSizer.Add(item = fillLabel, pos = (1, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-            gridSizer.Add(item = self.fillColorCtrl, pos = (1, 1), flag = wx.ALIGN_CENTER_VERTICAL)
-            gridSizer.Add(item = self.fillTranspCtrl, pos = (1, 2), flag = wx.ALIGN_CENTER_VERTICAL)
+            gridSizer.Add(
+                item=fillLabel, pos=(1, 0),
+                flag=wx.ALIGN_CENTER_VERTICAL)
+            gridSizer.Add(
+                item=self.fillColorCtrl, pos=(
+                    1, 1), flag=wx.ALIGN_CENTER_VERTICAL)
+            gridSizer.Add(
+                item=self.fillTranspCtrl, pos=(
+                    1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
 
-        sizer.Add(gridSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
-        gridSizer = wx.GridBagSizer (hgap = 5, vgap = 5)
+        sizer.Add(gridSizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+        gridSizer = wx.GridBagSizer(hgap=5, vgap=5)
 
         # width
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Line style"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Line style"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        widthLabel = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Line width:"))
+
+        widthLabel = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Line width:"))
         if fs:
-            self.widthCtrl = fs.FloatSpin(panel, id = wx.ID_ANY, min_val = 0, max_val = 50,
-                                          increment = 1, value = 0, style = fs.FS_RIGHT, size = self.spinCtrlSize)
+            self.widthCtrl = fs.FloatSpin(
+                panel,
+                id=wx.ID_ANY,
+                min_val=0,
+                max_val=50,
+                increment=1,
+                value=0,
+                style=fs.FS_RIGHT,
+                size=self.spinCtrlSize)
             self.widthCtrl.SetFormat("%f")
             self.widthCtrl.SetDigits(1)
         else:
-            self.widthCtrl = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = self.spinCtrlSize,
-                                                min = -360, max = 360, initial = 0)
+            self.widthCtrl = wx.SpinCtrl(
+                parent=panel,
+                id=wx.ID_ANY,
+                size=self.spinCtrlSize,
+                min=-360,
+                max=360,
+                initial=0)
         self.widthCtrl.SetToolTipString(_("Line width in points"))
         self.widthCtrl.SetValue(float(self.rectDict['width']))
 
-        gridSizer.Add(item = widthLabel, pos = (0, 0), flag = wx.ALIGN_CENTER_VERTICAL)
-        gridSizer.Add(item = self.widthCtrl, pos = (0, 1), flag = wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=widthLabel, pos=(0, 0),
+            flag=wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            item=self.widthCtrl, pos=(
+                0, 1), flag=wx.ALIGN_CENTER_VERTICAL)
 
-        sizer.Add(gridSizer, proportion = 1, flag = wx.EXPAND|wx.ALL, border = 5)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        sizer.Add(gridSizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         panel.SetSizer(border)
-        
+
         return panel
-        
 
     def update(self):
         mapInstr = self.instruction.FindInstructionByType('map')
@@ -4922,29 +6841,27 @@ class RectangleDialog(PsmapDialog):
         self.mapId = mapInstr.id
         point1 = self.rectDict['where'][0]
         point2 = self.rectDict['where'][1]
-        self.rectDict['east1'], self.rectDict['north1'] = PaperMapCoordinates(mapInstr = mapInstr,
-                                                                                x = point1[0],
-                                                                                y = point1[1],
-                                                                                paperToMap = True)
-        self.rectDict['east2'], self.rectDict['north2'] = PaperMapCoordinates(mapInstr = mapInstr,
-                                                                                x = point2[0],
-                                                                                y = point2[1],
-                                                                                paperToMap = True)
+        self.rectDict['east1'], self.rectDict['north1'] = PaperMapCoordinates(
+            mapInstr=mapInstr, x=point1[0], y=point1[1], paperToMap=True)
+        self.rectDict['east2'], self.rectDict['north2'] = PaperMapCoordinates(
+            mapInstr=mapInstr, x=point2[0], y=point2[1], paperToMap=True)
         # width
         self.rectDict['width'] = self.widthCtrl.GetValue()
-        
+
         # outline color
         if self.outlineTranspCtrl.GetValue():
             self.rectDict['color'] = 'none'
         else:
-            self.rectDict['color'] = convertRGB(self.outlineColorCtrl.GetColour())
+            self.rectDict['color'] = convertRGB(
+                self.outlineColorCtrl.GetColour())
 
         # fill color
         if self.objectType == ('rectangle',):
             if self.fillTranspCtrl.GetValue():
                 self.rectDict['fcolor'] = 'none'
             else:
-                self.rectDict['fcolor'] = convertRGB(self.fillColorCtrl.GetColour())
+                self.rectDict['fcolor'] = convertRGB(
+                    self.fillColorCtrl.GetColour())
 
         if self.id not in self.instruction:
             if self.objectType == ('rectangle',):
@@ -4952,12 +6869,12 @@ class RectangleDialog(PsmapDialog):
             else:
                 rect = Line(self.id)
             self.instruction.AddInstruction(rect)
-            
+
         self.instruction[self.id].SetInstruction(self.rectDict)
 
         if self.id not in self.parent.objectId:
             self.parent.objectId.append(self.id)
-            
+
         self.updateDialog()
 
         return True
@@ -4968,9 +6885,14 @@ class RectangleDialog(PsmapDialog):
 
 
 class LabelsDialog(PsmapDialog):
+
     def __init__(self, parent, id, settings):
-        PsmapDialog.__init__(self, parent = parent, id = id, title = _("Vector labels"),
-                             settings=settings)
+        PsmapDialog.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=_("Vector labels"),
+            settings=settings)
         self.objectType = ('labels',)
         if self.id is not None:
             self.labels = self.instruction[self.id]
@@ -4987,18 +6909,34 @@ class LabelsDialog(PsmapDialog):
 
         border = wx.BoxSizer(wx.VERTICAL)
 
-        box   = wx.StaticBox(parent=panel, id=wx.ID_ANY,
-                             label=" %s " % _("Vector label files created beforehand by v.label module"))
+        box = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Vector label files created beforehand by v.label module"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-
-        self.select = Select(parent=panel, multiple=True, type='labels', fullyQualified=False)
+        self.select = Select(
+            parent=panel,
+            multiple=True,
+            type='labels',
+            fullyQualified=False)
         self.select.SetValue(','.join(self.labelsDict['labels']))
         self.select.SetFocus()
-        sizer.Add(item=self.select, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
-        helpText = wx.StaticText(panel, id=wx.ID_ANY, label=_("You can select multiple label files."))
-        helpText.SetForegroundColour(wx.SystemSettings_GetColour(wx.SYS_COLOUR_GRAYTEXT))
-        sizer.Add(item=helpText, proportion=0, flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
+        sizer.Add(
+            item=self.select,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        helpText = wx.StaticText(
+            panel, id=wx.ID_ANY,
+            label=_("You can select multiple label files."))
+        helpText.SetForegroundColour(
+            wx.SystemSettings_GetColour(
+                wx.SYS_COLOUR_GRAYTEXT))
+        sizer.Add(
+            item=helpText,
+            proportion=0,
+            flag=wx.EXPAND | wx.LEFT | wx.RIGHT,
+            border=5)
 
         border.Add(sizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)
         panel.SetSizer(border)
diff --git a/gui/wxpython/psmap/frame.py b/gui/wxpython/psmap/frame.py
index 081bd9f..3ba0a3f 100644
--- a/gui/wxpython/psmap/frame.py
+++ b/gui/wxpython/psmap/frame.py
@@ -29,84 +29,101 @@ except ImportError:
 
 import grass.script as grass
 
-from core               import globalvar
-from gui_core.menu      import Menu
-from core.gconsole      import CmdThread, EVT_CMD_DONE
-from psmap.toolbars     import PsMapToolbar
-from core.gcmd          import RunCommand, GError, GMessage
-from core.settings      import UserSettings
+from core import globalvar
+from gui_core.menu import Menu
+from core.gconsole import CmdThread, EVT_CMD_DONE
+from psmap.toolbars import PsMapToolbar
+from core.gcmd import RunCommand, GError, GMessage
+from core.settings import UserSettings
 from core.utils import _, PilImageToWxImage
-from gui_core.forms     import GUI
-from gui_core.dialogs   import HyperlinkDialog
-from gui_core.ghelp     import ShowAboutDialog
-from psmap.menudata     import PsMapMenuData
+from gui_core.forms import GUI
+from gui_core.dialogs import HyperlinkDialog
+from gui_core.ghelp import ShowAboutDialog
+from psmap.menudata import PsMapMenuData
 from gui_core.toolbars import ToolSwitcher
 
-from psmap.dialogs      import *
+from psmap.dialogs import *
 from psmap.instructions import *
-from psmap.utils        import *
+from psmap.utils import *
+
 
 class PsMapFrame(wx.Frame):
-    def __init__(self, parent = None, id = wx.ID_ANY,
-                 title = _("GRASS GIS Cartographic Composer"), **kwargs):
+
+    def __init__(self, parent=None, id=wx.ID_ANY,
+                 title=_("GRASS GIS Cartographic Composer"), **kwargs):
         """Main window of ps.map GUI
-        
+
         :param parent: parent window
         :param id: window id
         :param title: window title
-        
+
         :param kwargs: wx.Frames' arguments
         """
         self.parent = parent
 
-        wx.Frame.__init__(self, parent = parent, id = id, title = title, name = "PsMap", **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-        #menubar
-        self.menubar = Menu(parent = self, model = PsMapMenuData().GetModel(separators=True))
+        wx.Frame.__init__(
+            self,
+            parent=parent,
+            id=id,
+            title=title,
+            name="PsMap",
+            **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+        # menubar
+        self.menubar = Menu(
+            parent=self,
+            model=PsMapMenuData().GetModel(
+                separators=True))
         self.SetMenuBar(self.menubar)
-        #toolbar
+        # toolbar
 
         self._toolSwitcher = ToolSwitcher()
-        self.toolbar = PsMapToolbar(parent=self, toolSwitcher=self._toolSwitcher)
+        self.toolbar = PsMapToolbar(
+            parent=self, toolSwitcher=self._toolSwitcher)
         # workaround for http://trac.wxwidgets.org/ticket/13888
         if sys.platform != 'darwin':
             self.SetToolBar(self.toolbar)
-        
+
         self.iconsize = (16, 16)
-        #satusbar
-        self.statusbar = self.CreateStatusBar(number = 1)
-        
+        # satusbar
+        self.statusbar = self.CreateStatusBar(number=1)
+
         # mouse attributes -- position on the screen, begin and end of
         # dragging, and type of drawing
         self.mouse = {
-            'begin': [0, 0], # screen coordinates
-            'end'  : [0, 0],
-            'use'  : "pointer",
-            }
+            'begin': [0, 0],  # screen coordinates
+            'end': [0, 0],
+            'use': "pointer",
+        }
         # available cursors
         self.cursors = {
-            "default" : wx.StockCursor(wx.CURSOR_ARROW),
-            "cross"   : wx.StockCursor(wx.CURSOR_CROSS),
-            "hand"    : wx.StockCursor(wx.CURSOR_HAND),
+            "default": wx.StockCursor(wx.CURSOR_ARROW),
+            "cross": wx.StockCursor(wx.CURSOR_CROSS),
+            "hand": wx.StockCursor(wx.CURSOR_HAND),
             "sizenwse": wx.StockCursor(wx.CURSOR_SIZENWSE)
-            }
+        }
         # pen and brush
         self.pen = {
-            'paper': wx.Pen(colour = "BLACK", width = 1),
-            'margins': wx.Pen(colour = "GREY", width = 1),
-            'map': wx.Pen(colour = wx.Colour(86, 122, 17), width = 2),
-            'rasterLegend': wx.Pen(colour = wx.Colour(219, 216, 4), width = 2),
-            'vectorLegend': wx.Pen(colour = wx.Colour(219, 216, 4), width = 2),
-            'mapinfo': wx.Pen(colour = wx.Colour(5, 184, 249), width = 2),
-            'scalebar': wx.Pen(colour = wx.Colour(150, 150, 150), width = 2),
-            'image': wx.Pen(colour = wx.Colour(255, 150, 50), width = 2),
-            'northArrow': wx.Pen(colour = wx.Colour(200, 200, 200), width = 2),
-            'point': wx.Pen(colour = wx.Colour(100, 100, 100), width = 2),
-            'line': wx.Pen(colour = wx.Colour(0, 0, 0), width = 2),
-            'box': wx.Pen(colour = 'RED', width = 2, style = wx.SHORT_DASH),
-            'select': wx.Pen(colour = 'BLACK', width = 1, style = wx.SHORT_DASH),
-            'resize': wx.Pen(colour = 'BLACK', width = 1)
-            }
+            'paper': wx.Pen(colour="BLACK", width=1),
+            'margins': wx.Pen(colour="GREY", width=1),
+            'map': wx.Pen(colour=wx.Colour(86, 122, 17), width=2),
+            'rasterLegend': wx.Pen(colour=wx.Colour(219, 216, 4), width=2),
+            'vectorLegend': wx.Pen(colour=wx.Colour(219, 216, 4), width=2),
+            'mapinfo': wx.Pen(colour=wx.Colour(5, 184, 249), width=2),
+            'scalebar': wx.Pen(colour=wx.Colour(150, 150, 150), width=2),
+            'image': wx.Pen(colour=wx.Colour(255, 150, 50), width=2),
+            'northArrow': wx.Pen(colour=wx.Colour(200, 200, 200), width=2),
+            'point': wx.Pen(colour=wx.Colour(100, 100, 100), width=2),
+            'line': wx.Pen(colour=wx.Colour(0, 0, 0), width=2),
+            'box': wx.Pen(colour='RED', width=2, style=wx.SHORT_DASH),
+            'select': wx.Pen(colour='BLACK', width=1, style=wx.SHORT_DASH),
+            'resize': wx.Pen(colour='BLACK', width=1)
+        }
         self.brush = {
             'paper': wx.WHITE_BRUSH,
             'margins': wx.TRANSPARENT_BRUSH,
@@ -120,41 +137,51 @@ class PsMapFrame(wx.Frame):
             'point': wx.Brush(wx.Colour(200, 200, 200)),
             'line': wx.TRANSPARENT_BRUSH,
             'box': wx.TRANSPARENT_BRUSH,
-            'select':wx.TRANSPARENT_BRUSH,
+            'select': wx.TRANSPARENT_BRUSH,
             'resize': wx.BLACK_BRUSH
-            } 
-        
+        }
 
         # list of objects to draw
         self.objectId = []
-        
+
         # instructions
-        self.instruction = Instruction(parent = self, objectsToDraw = self.objectId)
+        self.instruction = Instruction(
+            parent=self, objectsToDraw=self.objectId)
         # open dialogs
         self.openDialogs = dict()
-        
+
         self.pageId = wx.NewId()
-        #current page of flatnotebook
+        # current page of flatnotebook
         self.currentPage = 0
-        #canvas for draft mode
-        self.canvas = PsMapBufferedWindow(parent = self, mouse = self.mouse, pen = self.pen,
-                                          brush = self.brush, cursors = self.cursors, 
-                                          instruction = self.instruction, openDialogs = self.openDialogs,
-                                          pageId = self.pageId, objectId = self.objectId,
-                                          preview = False)
-        
+        # canvas for draft mode
+        self.canvas = PsMapBufferedWindow(
+            parent=self,
+            mouse=self.mouse,
+            pen=self.pen,
+            brush=self.brush,
+            cursors=self.cursors,
+            instruction=self.instruction,
+            openDialogs=self.openDialogs,
+            pageId=self.pageId,
+            objectId=self.objectId,
+            preview=False)
+
         self.canvas.SetCursor(self.cursors["default"])
         self.getInitMap()
-        
-        
+
         # image path
         env = grass.gisenv()
         self.imgName = grass.tempfile()
-        
-        #canvas for preview
-        self.previewCanvas = PsMapBufferedWindow(parent = self, mouse = self.mouse, cursors = self.cursors,
-                                                 pen = self.pen, brush = self.brush, preview = True)
-        
+
+        # canvas for preview
+        self.previewCanvas = PsMapBufferedWindow(
+            parent=self,
+            mouse=self.mouse,
+            cursors=self.cursors,
+            pen=self.pen,
+            brush=self.brush,
+            preview=True)
+
         # set WIND_OVERRIDE
         grass.use_temp_region()
 
@@ -165,7 +192,7 @@ class PsMapFrame(wx.Frame):
         self.resultQ = Queue.Queue()
         # thread
         self.cmdThread = CmdThread(self, self.requestQ, self.resultQ)
-        
+
         self._layout()
         self.SetMinSize(wx.Size(775, 600))
         # workaround for http://trac.wxwidgets.org/ticket/13628
@@ -175,88 +202,90 @@ class PsMapFrame(wx.Frame):
         self.Bind(fnb.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
         self.Bind(EVT_CMD_DONE, self.OnCmdDone)
-        
+
         if not havePILImage:
             wx.CallAfter(self._showErrMsg)
-        
+
     def _showErrMsg(self):
         """Show error message (missing preview)
         """
-        GError(parent = self,
-               message = _("Python Imaging Library is not available.\n"
-                           "'Preview' functionality won't work."),
-               showTraceback = False)
-        
+        GError(parent=self,
+               message=_("Python Imaging Library is not available.\n"
+                         "'Preview' functionality won't work."),
+               showTraceback=False)
+
     def _layout(self):
         """Do layout
         """
         mainSizer = wx.BoxSizer(wx.VERTICAL)
         if globalvar.hasAgw:
-            self.book = fnb.FlatNotebook(parent = self, id = wx.ID_ANY,
-                                         agwStyle = fnb.FNB_FANCY_TABS | fnb.FNB_BOTTOM |
+            self.book = fnb.FlatNotebook(parent=self, id=wx.ID_ANY,
+                                         agwStyle=fnb.FNB_FANCY_TABS | fnb.FNB_BOTTOM |
                                          fnb.FNB_NO_NAV_BUTTONS | fnb.FNB_NO_X_BUTTON)
         else:
-            self.book = fnb.FlatNotebook(parent = self, id = wx.ID_ANY,
-                                         style = fnb.FNB_FANCY_TABS | fnb.FNB_BOTTOM |
+            self.book = fnb.FlatNotebook(parent=self, id=wx.ID_ANY,
+                                         style=fnb.FNB_FANCY_TABS | fnb.FNB_BOTTOM |
                                          fnb.FNB_NO_NAV_BUTTONS | fnb.FNB_NO_X_BUTTON)
         #self.book = fnb.FlatNotebook(self, wx.ID_ANY, style = fnb.FNB_BOTTOM)
         self.book.AddPage(self.canvas, "Draft mode")
         self.book.AddPage(self.previewCanvas, "Preview")
         self.book.SetSelection(0)
-        
-        mainSizer.Add(self.book,1, wx.EXPAND)
-        
+
+        mainSizer.Add(self.book, 1, wx.EXPAND)
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
 
-        
     def InstructionFile(self):
         """Creates mapping instructions"""
-        
+
         return str(self.instruction)
 
     def OnPSFile(self, event):
         """Generate PostScript"""
-        filename = self.getFile(wildcard = "PostScript (*.ps)|*.ps|Encapsulated PostScript (*.eps)|*.eps")
+        filename = self.getFile(
+            wildcard="PostScript (*.ps)|*.ps|Encapsulated PostScript (*.eps)|*.eps")
         if filename:
             self.PSFile(filename)
-    
+
     def OnPsMapDialog(self, event):
         """Launch ps.map dialog
         """
-        GUI(parent = self).ParseCommand(cmd = ['ps.map'])
+        GUI(parent=self).ParseCommand(cmd=['ps.map'])
 
     def OnPDFFile(self, event):
         """Generate PDF from PS with ps2pdf if available"""
         if not sys.platform == 'win32':
             try:
-                p = grass.Popen(["ps2pdf"], stderr = grass.PIPE)
+                p = grass.Popen(["ps2pdf"], stderr=grass.PIPE)
                 p.stderr.close()
-            
+
             except OSError:
-                GMessage(parent = self,
-                         message = _("Program ps2pdf is not available. Please install it first to create PDF."))
+                GMessage(
+                    parent=self,
+                    message=_(
+                        "Program ps2pdf is not available. Please install it first to create PDF."))
                 return
-        
-        filename = self.getFile(wildcard = "PDF (*.pdf)|*.pdf")
-        if filename:  
-            self.PSFile(filename, pdf = True)   
-            
+
+        filename = self.getFile(wildcard="PDF (*.pdf)|*.pdf")
+        if filename:
+            self.PSFile(filename, pdf=True)
+
     def OnPreview(self, event):
         """Run ps.map and show result"""
         self.PSFile()
-        
-    def PSFile(self, filename = None, pdf = False):
+
+    def PSFile(self, filename=None, pdf=False):
         """Create temporary instructions file and run ps.map with output = filename"""
         instrFile = grass.tempfile()
-        instrFileFd = open(instrFile, mode = 'w')
+        instrFileFd = open(instrFile, mode='w')
         instrFileFd.write(self.InstructionFile())
         instrFileFd.flush()
         instrFileFd.close()
-        
+
         temp = False
         regOld = grass.region()
-        
+
         if pdf:
             pdfname = filename
         else:
@@ -265,12 +294,12 @@ class PsMapFrame(wx.Frame):
         if not filename or (filename and pdf):
             temp = True
             filename = grass.tempfile()
-            if not pdf: # lower resolution for preview
+            if not pdf:  # lower resolution for preview
                 if self.instruction.FindInstructionByType('map'):
                     mapId = self.instruction.FindInstructionByType('map').id
-                    SetResolution(dpi = 100, width = self.instruction[mapId]['rect'][2],
-                                  height = self.instruction[mapId]['rect'][3])
-        
+                    SetResolution(dpi=100, width=self.instruction[mapId]['rect'][
+                                  2], height=self.instruction[mapId]['rect'][3])
+
         cmd = ['ps.map', '--overwrite']
         if os.path.splitext(filename)[1] == '.eps':
             cmd.append('-e')
@@ -284,22 +313,30 @@ class PsMapFrame(wx.Frame):
             self.SetStatusText(_('Generating PostScript...'), 0)
         else:
             self.SetStatusText(_('Generating preview...'), 0)
-            
-        self.cmdThread.RunCmd(cmd, userData = {'instrFile' : instrFile, 'filename' : filename,
-                                               'pdfname' : pdfname, 'temp' : temp, 'regionOld' : regOld})
-        
+
+        self.cmdThread.RunCmd(
+            cmd,
+            userData={
+                'instrFile': instrFile,
+                'filename': filename,
+                'pdfname': pdfname,
+                'temp': temp,
+                'regionOld': regOld})
+
     def OnCmdDone(self, event):
         """ps.map process finished"""
-        
+
         if event.returncode != 0:
-            GMessage(parent = self,
-                     message = _("Ps.map exited with return code %s") % event.returncode)
-            
+            GMessage(
+                parent=self,
+                message=_("Ps.map exited with return code %s") %
+                event.returncode)
+
             grass.try_remove(event.userData['instrFile'])
             if event.userData['temp']:
-                grass.try_remove(event.userData['filename']) 
+                grass.try_remove(event.userData['filename'])
             return
-        
+
         if event.userData['pdfname']:
             if sys.platform == 'win32':
                 command = ['gswin32c',
@@ -314,31 +351,41 @@ class PsMapFrame(wx.Frame):
                            '-P-', '-dSAFER',
                            '-dCompatibilityLevel=1.4',
                            '-c', '.setpdfwrite', '-f',
-                            event.userData['filename']]
+                           event.userData['filename']]
             else:
-                command = ['ps2pdf', '-dPDFSETTINGS=/prepress', '-r1200', 
-                           event.userData['filename'], event.userData['pdfname']]
+                command = [
+                    'ps2pdf',
+                    '-dPDFSETTINGS=/prepress',
+                    '-r1200',
+                    event.userData['filename'],
+                    event.userData['pdfname']]
             try:
                 proc = grass.Popen(command)
-                ret = proc.wait()                        
+                ret = proc.wait()
                 if ret > 0:
-                    GMessage(parent = self,
-                             message = _("%(prg)s exited with return code %(code)s") % {'prg': command[0],
-                                                                                        'code': ret})
+                    GMessage(
+                        parent=self,
+                        message=_("%(prg)s exited with return code %(code)s") % {
+                            'prg': command[0],
+                            'code': ret})
                 else:
                     self.SetStatusText(_('PDF generated'), 0)
             except OSError as e:
-                GError(parent = self,
-                       message = _("Program ps2pdf is not available. Please install it to create PDF.\n\n %s") % e)
+                GError(parent=self, message=_(
+                    "Program ps2pdf is not available. Please install it to create PDF.\n\n %s") % e)
 
         elif not event.userData['temp']:
             self.SetStatusText(_('PostScript file generated'), 0)
 
-        # show preview only when user doesn't want to create ps or pdf 
-        if havePILImage and event.userData['temp'] and not event.userData['pdfname']:
-            RunCommand('g.region', cols = event.userData['regionOld']['cols'], rows = event.userData['regionOld']['rows'])
+        # show preview only when user doesn't want to create ps or pdf
+        if havePILImage and event.userData[
+                'temp'] and not event.userData['pdfname']:
+            RunCommand('g.region', cols=event.userData['regionOld'][
+                       'cols'], rows=event.userData['regionOld']['rows'])
             # wx.BusyInfo does not display the message
-            busy = wx.BusyInfo(message = _("Generating preview, wait please"), parent = self)
+            busy = wx.BusyInfo(
+                message=_("Generating preview, wait please"),
+                parent=self)
             wx.Yield()
             try:
                 im = PILImage.open(event.userData['filename'])
@@ -349,32 +396,36 @@ class PsMapFrame(wx.Frame):
                 if sys.platform == 'win32':
                     import types
                     im.load = types.MethodType(loadPSForWindows, im)
-                im.save(self.imgName, format = 'PNG')
+                im.save(self.imgName, format='PNG')
             except (IOError, OSError) as e:
                 del busy
-                dlg = HyperlinkDialog(self, title=_("Preview not available"),
-                                      message=_("Preview is not available probably because Ghostscript is not installed or not on PATH."),
-                                      hyperlink='http://trac.osgeo.org/grass/wiki/CompileOnWindows#Ghostscript',
-                                      hyperlinkLabel=_("Please follow instructions on GRASS Trac Wiki."))
+                dlg = HyperlinkDialog(
+                    self, title=_("Preview not available"),
+                    message=_(
+                        "Preview is not available probably because Ghostscript is not installed or not on PATH."),
+                    hyperlink='http://trac.osgeo.org/grass/wiki/CompileOnWindows#Ghostscript',
+                    hyperlinkLabel=_(
+                        "Please follow instructions on GRASS Trac Wiki."))
                 dlg.ShowModal()
                 dlg.Destroy()
                 return
-            
-                
+
             rect = self.previewCanvas.ImageRect()
-            self.previewCanvas.image = wx.Image(self.imgName, wx.BITMAP_TYPE_PNG)
-            self.previewCanvas.DrawImage(rect = rect)
-            
+            self.previewCanvas.image = wx.Image(
+                self.imgName, wx.BITMAP_TYPE_PNG)
+            self.previewCanvas.DrawImage(rect=rect)
+
             del busy
             self.SetStatusText(_('Preview generated'), 0)
             self.book.SetSelection(1)
             self.currentPage = 1
-        
+
         grass.try_remove(event.userData['instrFile'])
         if event.userData['temp']:
             grass.try_remove(event.userData['filename'])
-            
-        self.delayedCall = wx.CallLater(4000, lambda: self.SetStatusText("", 0))
+
+        self.delayedCall = wx.CallLater(
+            4000, lambda: self.SetStatusText("", 0))
 
     def getFile(self, wildcard):
         suffix = []
@@ -385,20 +436,21 @@ class PsMapFrame(wx.Frame):
             suffix.append(s)
         raster = self.instruction.FindInstructionByType('raster')
         if raster:
-            rasterId = raster.id 
+            rasterId = raster.id
         else:
             rasterId = None
 
-
         if rasterId and self.instruction[rasterId]['raster']:
-            mapName = self.instruction[rasterId]['raster'].split('@')[0] + suffix[0]
+            mapName = self.instruction[rasterId][
+                'raster'].split('@')[0] + suffix[0]
         else:
             mapName = ''
-            
+
         filename = ''
-        dlg = wx.FileDialog(self, message = _("Save file as"), defaultDir = "", 
-                            defaultFile = mapName, wildcard = wildcard,
-                            style = wx.FD_CHANGE_DIR | wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
+        dlg = wx.FileDialog(
+            self, message=_("Save file as"),
+            defaultDir="", defaultFile=mapName, wildcard=wildcard,
+            style=wx.FD_CHANGE_DIR | wx.FD_SAVE | wx.FD_OVERWRITE_PROMPT)
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
             suffix = suffix[dlg.GetFilterIndex()]
@@ -406,24 +458,29 @@ class PsMapFrame(wx.Frame):
                 filename = filename + suffix
             elif os.path.splitext(filename)[1] != suffix and suffix != '':
                 filename = os.path.splitext(filename)[0] + suffix
-            
+
         dlg.Destroy()
         return filename
-    
+
     def OnInstructionFile(self, event):
-        filename = self.getFile(wildcard = "*.psmap|*.psmap|Text file(*.txt)|*.txt|All files(*.*)|*.*")        
-        if filename:    
+        filename = self.getFile(
+            wildcard="*.psmap|*.psmap|Text file(*.txt)|*.txt|All files(*.*)|*.*")
+        if filename:
             instrFile = open(filename, "w")
             instrFile.write(self.InstructionFile())
-            instrFile.close()   
-            
+            instrFile.close()
+
     def OnLoadFile(self, event):
         """Launch file dialog and load selected file"""
-        #find file
+        # find file
         filename = ''
-        dlg = wx.FileDialog(self, message = "Find instructions file", defaultDir = "", 
-                            defaultFile = '', wildcard = "All files (*.*)|*.*",
-                            style = wx.FD_CHANGE_DIR|wx.FD_OPEN)
+        dlg = wx.FileDialog(
+            self,
+            message="Find instructions file",
+            defaultDir="",
+            defaultFile='',
+            wildcard="All files (*.*)|*.*",
+            style=wx.FD_CHANGE_DIR | wx.FD_OPEN)
         if dlg.ShowModal() == wx.ID_OK:
             filename = dlg.GetPath()
         dlg.Destroy()
@@ -435,58 +492,59 @@ class PsMapFrame(wx.Frame):
     def LoadFile(self, filename):
         """Load file and read instructions"""
         readObjectId = []
-        readInstruction = Instruction(parent = self, objectsToDraw = readObjectId)
+        readInstruction = Instruction(parent=self, objectsToDraw=readObjectId)
         ok = readInstruction.Read(filename)
         if not ok:
             GMessage(_("Failed to read file %s.") % filename)
         else:
             self.instruction = self.canvas.instruction = readInstruction
             self.objectId = self.canvas.objectId = readObjectId
-            self.pageId = self.canvas.pageId = self.instruction.FindInstructionByType('page').id
+            self.pageId = self.canvas.pageId = self.instruction.FindInstructionByType(
+                'page').id
             self.canvas.UpdateMapLabel()
             self.canvas.dragId = -1
             self.canvas.Clear()
             self.canvas.SetPage()
-            #self.canvas.ZoomAll()
-            
+            # self.canvas.ZoomAll()
+
             self.DialogDataChanged(self.objectId)
 
-    def OnPageSetup(self, event = None):
+    def OnPageSetup(self, event=None):
         """Specify paper size, margins and orientation"""
         id = self.instruction.FindInstructionByType('page').id
-        dlg = PageSetupDialog(self, id = id, settings = self.instruction) 
+        dlg = PageSetupDialog(self, id=id, settings=self.instruction)
         dlg.CenterOnScreen()
         val = dlg.ShowModal()
         if val == wx.ID_OK:
             self.canvas.SetPage()
             self.getInitMap()
-            self.canvas.RecalculatePosition(ids = self.objectId)
+            self.canvas.RecalculatePosition(ids=self.objectId)
         dlg.Destroy()
-        
+
     def OnPointer(self, event):
         self.mouse["use"] = "pointer"
         self.canvas.SetCursor(self.cursors["default"])
         self.previewCanvas.SetCursor(self.cursors["default"])
-        
+
     def OnPan(self, event):
         self.mouse["use"] = "pan"
         self.canvas.SetCursor(self.cursors["hand"])
         self.previewCanvas.SetCursor(self.cursors["hand"])
-        
+
     def OnZoomIn(self, event):
         self.mouse["use"] = "zoomin"
         self.canvas.SetCursor(self.cursors["cross"])
         self.previewCanvas.SetCursor(self.cursors["cross"])
-        
+
     def OnZoomOut(self, event):
         self.mouse["use"] = "zoomout"
         self.canvas.SetCursor(self.cursors["cross"])
         self.previewCanvas.SetCursor(self.cursors["cross"])
-        
+
     def OnZoomAll(self, event):
         self.mouseOld = self.mouse['use']
         if self.currentPage == 0:
-            self.cursorOld = self.canvas.GetCursor() 
+            self.cursorOld = self.canvas.GetCursor()
         else:
             self.cursorOld = self.previewCanvas.GetCursor()
             self.previewCanvas.GetCursor()
@@ -495,46 +553,50 @@ class PsMapFrame(wx.Frame):
             self.canvas.ZoomAll()
         else:
             self.previewCanvas.ZoomAll()
-        self.mouse["use"] = self.mouseOld 
+        self.mouse["use"] = self.mouseOld
         if self.currentPage == 0:
             self.canvas.SetCursor(self.cursorOld)
         else:
             self.previewCanvas.SetCursor(self.cursorOld)
-        
-        
-    def OnAddMap(self, event, notebook = False):
-        """Add or edit map frame"""      
+
+    def OnAddMap(self, event, notebook=False):
+        """Add or edit map frame"""
         if self.instruction.FindInstructionByType('map'):
             mapId = self.instruction.FindInstructionByType('map').id
-        else: mapId = None
+        else:
+            mapId = None
         id = [mapId, None, None]
-        
+
         if notebook:
             if self.instruction.FindInstructionByType('vector'):
                 vectorId = self.instruction.FindInstructionByType('vector').id
-            else: vectorId = None
+            else:
+                vectorId = None
             if self.instruction.FindInstructionByType('raster'):
                 rasterId = self.instruction.FindInstructionByType('raster').id
-            else: rasterId = None
+            else:
+                rasterId = None
             id[1] = rasterId
             id[2] = vectorId
-        
-        
-        if mapId: # map exists        
+
+        if mapId:  # map exists
             self.toolbar.SelectDefault()
 
             if notebook:
-                #check map, raster, vector and save, destroy them
+                # check map, raster, vector and save, destroy them
                 if 'map' in self.openDialogs:
-                    self.openDialogs['map'].OnOK(event = None)
+                    self.openDialogs['map'].OnOK(event=None)
                 if 'raster' in self.openDialogs:
-                    self.openDialogs['raster'].OnOK(event = None)
+                    self.openDialogs['raster'].OnOK(event=None)
                 if 'vector' in self.openDialogs:
-                    self.openDialogs['vector'].OnOK(event = None)
-                    
+                    self.openDialogs['vector'].OnOK(event=None)
+
                 if 'mapNotebook' not in self.openDialogs:
-                    dlg = MapDialog(parent = self, id  = id, settings = self.instruction,
-                                    notebook = notebook)
+                    dlg = MapDialog(
+                        parent=self,
+                        id=id,
+                        settings=self.instruction,
+                        notebook=notebook)
                     self.openDialogs['mapNotebook'] = dlg
                 self.openDialogs['mapNotebook'].Show()
             else:
@@ -542,11 +604,13 @@ class PsMapFrame(wx.Frame):
                     self.openDialogs['mapNotebook'].notebook.ChangeSelection(0)
                 else:
                     if 'map' not in self.openDialogs:
-                        dlg = MapDialog(parent = self, id  = id, settings = self.instruction,
-                                        notebook = notebook)
+                        dlg = MapDialog(
+                            parent=self,
+                            id=id,
+                            settings=self.instruction,
+                            notebook=notebook)
                         self.openDialogs['map'] = dlg
                     self.openDialogs['map'].Show()
-                    
 
         else:    # sofar no map
             self.mouse["use"] = "addMap"
@@ -554,79 +618,89 @@ class PsMapFrame(wx.Frame):
             if self.currentPage == 1:
                 self.book.SetSelection(0)
                 self.currentPage = 0
-                
+
     def OnAddRaster(self, event):
         """Add raster map"""
         if self.instruction.FindInstructionByType('raster'):
             id = self.instruction.FindInstructionByType('raster').id
-        else: id = None
+        else:
+            id = None
         if self.instruction.FindInstructionByType('map'):
             mapId = self.instruction.FindInstructionByType('map').id
-        else: mapId = None
+        else:
+            mapId = None
 
         if not id:
             if not mapId:
-                GMessage(message = _("Please, create map frame first."))
+                GMessage(message=_("Please, create map frame first."))
                 return
-            
+
 ##        dlg = RasterDialog(self, id = id, settings = self.instruction)
-##        dlg.ShowModal()
+# dlg.ShowModal()
         if 'mapNotebook' in self.openDialogs:
             self.openDialogs['mapNotebook'].notebook.ChangeSelection(1)
         else:
             if 'raster' not in self.openDialogs:
-                dlg = RasterDialog(self, id = id, settings = self.instruction)
+                dlg = RasterDialog(self, id=id, settings=self.instruction)
                 self.openDialogs['raster'] = dlg
             self.openDialogs['raster'].Show()
-            
+
     def OnAddVect(self, event):
         """Add vector map"""
         if self.instruction.FindInstructionByType('vector'):
             id = self.instruction.FindInstructionByType('vector').id
-        else: id = None
+        else:
+            id = None
         if self.instruction.FindInstructionByType('map'):
             mapId = self.instruction.FindInstructionByType('map').id
-        else: mapId = None
+        else:
+            mapId = None
         if not id:
             if not mapId:
-                GMessage(message = _("Please, create map frame first."))
+                GMessage(message=_("Please, create map frame first."))
                 return
-            
+
 ##        dlg = MainVectorDialog(self, id = id, settings = self.instruction)
-##        dlg.ShowModal()
+# dlg.ShowModal()
         if 'mapNotebook' in self.openDialogs:
             self.openDialogs['mapNotebook'].notebook.ChangeSelection(2)
         else:
             if 'vector' not in self.openDialogs:
-                dlg =  MainVectorDialog(self, id = id, settings = self.instruction)
+                dlg = MainVectorDialog(self, id=id, settings=self.instruction)
                 self.openDialogs['vector'] = dlg
             self.openDialogs['vector'].Show()
-       
+
     def OnAddScalebar(self, event):
         """Add scalebar"""
         if projInfo()['proj'] == 'll':
-            GMessage(message = _("Scalebar is not appropriate for this projection"))
+            GMessage(
+                message=_("Scalebar is not appropriate for this projection"))
             return
         if self.instruction.FindInstructionByType('scalebar'):
             id = self.instruction.FindInstructionByType('scalebar').id
-        else: id = None
-        
+        else:
+            id = None
+
         if 'scalebar' not in self.openDialogs:
-            dlg = ScalebarDialog(self, id = id, settings = self.instruction)
+            dlg = ScalebarDialog(self, id=id, settings=self.instruction)
             self.openDialogs['scalebar'] = dlg
         self.openDialogs['scalebar'].Show()
-        
-    def OnAddLegend(self, event, page = 0):
+
+    def OnAddLegend(self, event, page=0):
         """Add raster or vector legend"""
         if self.instruction.FindInstructionByType('rasterLegend'):
             idR = self.instruction.FindInstructionByType('rasterLegend').id
-        else: idR = None
+        else:
+            idR = None
         if self.instruction.FindInstructionByType('vectorLegend'):
             idV = self.instruction.FindInstructionByType('vectorLegend').id
-        else: idV = None
+        else:
+            idV = None
 
-        if 'rasterLegend' not in self.openDialogs:    
-            dlg = LegendDialog(self, id = [idR, idV], settings = self.instruction, page = page)
+        if 'rasterLegend' not in self.openDialogs:
+            dlg = LegendDialog(
+                self, id=[idR, idV],
+                settings=self.instruction, page=page)
             self.openDialogs['rasterLegend'] = dlg
             self.openDialogs['vectorLegend'] = dlg
         self.openDialogs['rasterLegend'].notebook.ChangeSelection(page)
@@ -635,56 +709,58 @@ class PsMapFrame(wx.Frame):
     def OnAddMapinfo(self, event):
         if self.instruction.FindInstructionByType('mapinfo'):
             id = self.instruction.FindInstructionByType('mapinfo').id
-        else: id = None
-        
+        else:
+            id = None
+
         if 'mapinfo' not in self.openDialogs:
-            dlg = MapinfoDialog(self, id = id, settings = self.instruction)
+            dlg = MapinfoDialog(self, id=id, settings=self.instruction)
             self.openDialogs['mapinfo'] = dlg
         self.openDialogs['mapinfo'].Show()
-        
-    def OnAddImage(self, event, id = None):
+
+    def OnAddImage(self, event, id=None):
         """Show dialog for image adding and editing"""
         position = None
         if 'image' in self.openDialogs:
             position = self.openDialogs['image'].GetPosition()
-            self.openDialogs['image'].OnApply(event = None)
+            self.openDialogs['image'].OnApply(event=None)
             self.openDialogs['image'].Destroy()
-        dlg = ImageDialog(self, id = id, settings = self.instruction)
-        self.openDialogs['image'] = dlg 
-        if position: 
+        dlg = ImageDialog(self, id=id, settings=self.instruction)
+        self.openDialogs['image'] = dlg
+        if position:
             dlg.SetPosition(position)
         dlg.Show()
-        
-    def OnAddNorthArrow(self, event, id = None):
+
+    def OnAddNorthArrow(self, event, id=None):
         """Show dialog for north arrow adding and editing"""
         if self.instruction.FindInstructionByType('northArrow'):
             id = self.instruction.FindInstructionByType('northArrow').id
-        else: id = None
-        
+        else:
+            id = None
+
         if 'northArrow' not in self.openDialogs:
-            dlg = NorthArrowDialog(self, id = id, settings = self.instruction)
+            dlg = NorthArrowDialog(self, id=id, settings=self.instruction)
             self.openDialogs['northArrow'] = dlg
         self.openDialogs['northArrow'].Show()
-        
-    def OnAddText(self, event, id = None):
+
+    def OnAddText(self, event, id=None):
         """Show dialog for text adding and editing"""
         position = None
         if 'text' in self.openDialogs:
             position = self.openDialogs['text'].GetPosition()
-            self.openDialogs['text'].OnApply(event = None)
+            self.openDialogs['text'].OnApply(event=None)
             self.openDialogs['text'].Destroy()
-        dlg = TextDialog(self, id = id, settings = self.instruction)
-        self.openDialogs['text'] = dlg 
-        if position: 
+        dlg = TextDialog(self, id=id, settings=self.instruction)
+        self.openDialogs['text'] = dlg
+        if position:
             dlg.SetPosition(position)
         dlg.Show()
-        
+
     def OnAddPoint(self, event):
         """Add point action selected"""
         self.mouse["use"] = "addPoint"
         self.canvas.SetCursor(self.cursors["cross"])
-        
-    def AddPoint(self, id = None, coordinates = None):
+
+    def AddPoint(self, id=None, coordinates=None):
         """Add point and open property dialog.
 
         :param id: id point id (None if creating new point)
@@ -693,40 +769,40 @@ class PsMapFrame(wx.Frame):
         position = None
         if 'point' in self.openDialogs:
             position = self.openDialogs['point'].GetPosition()
-            self.openDialogs['point'].OnApply(event = None)
+            self.openDialogs['point'].OnApply(event=None)
             self.openDialogs['point'].Destroy()
-        dlg = PointDialog(self, id = id, settings = self.instruction,
-                          coordinates = coordinates)
+        dlg = PointDialog(self, id=id, settings=self.instruction,
+                          coordinates=coordinates)
         self.openDialogs['point'] = dlg
-        if position: 
+        if position:
             dlg.SetPosition(position)
         if coordinates:
-            dlg.OnApply(event = None)
+            dlg.OnApply(event=None)
         dlg.Show()
-        
+
     def OnAddLine(self, event):
         """Add line action selected"""
         self.mouse["use"] = "addLine"
         self.canvas.SetCursor(self.cursors["cross"])
 
-    def AddLine(self, id = None, coordinates = None):
+    def AddLine(self, id=None, coordinates=None):
         """Add line and open property dialog.
-        
+
         :param id: id line id (None if creating new line)
         :param coordinates: coordinates of new line
         """
         position = None
         if 'line' in self.openDialogs:
             position = self.openDialogs['line'].GetPosition()
-            self.openDialogs['line'].OnApply(event = None)
+            self.openDialogs['line'].OnApply(event=None)
             self.openDialogs['line'].Destroy()
-        dlg = RectangleDialog(self, id = id, settings = self.instruction,
-                              type = 'line', coordinates = coordinates)
+        dlg = RectangleDialog(self, id=id, settings=self.instruction,
+                              type='line', coordinates=coordinates)
         self.openDialogs['line'] = dlg
-        if position: 
+        if position:
             dlg.SetPosition(position)
         if coordinates:
-            dlg.OnApply(event = None)
+            dlg.OnApply(event=None)
         dlg.Show()
 
     def OnAddRectangle(self, event):
@@ -734,64 +810,65 @@ class PsMapFrame(wx.Frame):
         self.mouse["use"] = "addRectangle"
         self.canvas.SetCursor(self.cursors["cross"])
 
-    def AddRectangle(self, id = None, coordinates = None):
+    def AddRectangle(self, id=None, coordinates=None):
         """Add rectangle and open property dialog.
-        
+
         :param id: id rectangle id (None if creating new rectangle)
         :param coordinates: coordinates of new rectangle
         """
         position = None
         if 'rectangle' in self.openDialogs:
             position = self.openDialogs['rectangle'].GetPosition()
-            self.openDialogs['rectangle'].OnApply(event = None)
+            self.openDialogs['rectangle'].OnApply(event=None)
             self.openDialogs['rectangle'].Destroy()
-        dlg = RectangleDialog(self, id = id, settings = self.instruction,
-                              type = 'rectangle', coordinates = coordinates)
+        dlg = RectangleDialog(self, id=id, settings=self.instruction,
+                              type='rectangle', coordinates=coordinates)
         self.openDialogs['rectangle'] = dlg
-        if position: 
+        if position:
             dlg.SetPosition(position)
         if coordinates:
-            dlg.OnApply(event = None)
+            dlg.OnApply(event=None)
         dlg.Show()
 
-    def OnAddLabels(self, event, id = None):
+    def OnAddLabels(self, event, id=None):
         """Show dialog for labels"""
         if self.instruction.FindInstructionByType('labels'):
             id = self.instruction.FindInstructionByType('labels').id
-        else: id = None
-        
+        else:
+            id = None
+
         if 'labels' not in self.openDialogs:
-            dlg = LabelsDialog(self, id = id, settings = self.instruction)
+            dlg = LabelsDialog(self, id=id, settings=self.instruction)
             self.openDialogs['labels'] = dlg
         self.openDialogs['labels'].Show()
 
     def getModifiedTextBounds(self, x, y, textExtent, rotation):
         """computes bounding box of rotated text, not very precisely"""
         w, h = textExtent
-        rotation = float(rotation)/180*pi
+        rotation = float(rotation) / 180 * pi
         H = float(w) * sin(rotation)
         W = float(w) * cos(rotation)
         X, Y = x, y
-        if pi/2 < rotation <= 3*pi/2:
-            X = x + W 
+        if pi / 2 < rotation <= 3 * pi / 2:
+            X = x + W
         if 0 < rotation < pi:
             Y = y - H
         if rotation == 0:
-            return wx.Rect(x,y, *textExtent)
+            return wx.Rect(x, y, *textExtent)
         else:
-            return wx.Rect(X, Y, abs(W), abs(H)).Inflate(h,h) 
+            return wx.Rect(X, Y, abs(W), abs(H)).Inflate(h, h)
 
     def makePSFont(self, textDict):
         """creates a wx.Font object from selected postscript font. To be
         used for estimating bounding rectangle of text"""
-        
+
         fontsize = textDict['fontsize'] * self.canvas.currScale
         fontface = textDict['font'].split('-')[0]
         try:
             fontstyle = textDict['font'].split('-')[1]
         except IndexError:
             fontstyle = ''
-        
+
         if fontface == "Times":
             family = wx.FONTFAMILY_ROMAN
             face = "times"
@@ -804,72 +881,79 @@ class PsMapFrame(wx.Frame):
         else:
             family = wx.FONTFAMILY_DEFAULT
             face = ''
-            
+
         style = wx.FONTSTYLE_NORMAL
         weight = wx.FONTWEIGHT_NORMAL
-            
+
         if 'Oblique' in fontstyle:
-            style =  wx.FONTSTYLE_SLANT
-            
+            style = wx.FONTSTYLE_SLANT
+
         if 'Italic' in fontstyle:
-            style =  wx.FONTSTYLE_ITALIC
-            
+            style = wx.FONTSTYLE_ITALIC
+
         if 'Bold' in fontstyle:
             weight = wx.FONTWEIGHT_BOLD
-        
+
         try:
-            fn = wx.Font(pointSize = fontsize, family = family, style = style,
-                         weight = weight, face = face)
+            fn = wx.Font(pointSize=fontsize, family=family, style=style,
+                         weight=weight, face=face)
         except:
-            fn = wx.Font(pointSize = fontsize, family = wx.FONTFAMILY_DEFAULT, 
-                         style = wx.FONTSTYLE_NORMAL, weight = wx.FONTWEIGHT_NORMAL)
+            fn = wx.Font(
+                pointSize=fontsize,
+                family=wx.FONTFAMILY_DEFAULT,
+                style=wx.FONTSTYLE_NORMAL,
+                weight=wx.FONTWEIGHT_NORMAL)
 
         return fn
-       
-       
+
     def getTextExtent(self, textDict):
         """Estimates bounding rectangle of text"""
         #fontsize = str(fontsize if fontsize >= 4 else 4)
-        dc = wx.ClientDC(self) # dc created because of method GetTextExtent, which pseudoDC lacks
-       
+        # dc created because of method GetTextExtent, which pseudoDC lacks
+        dc = wx.ClientDC(self)
+
         fn = self.makePSFont(textDict)
 
         try:
             dc.SetFont(fn)
-            w,h,lh = dc.GetMultiLineTextExtent(textDict['text'])
-            return (w,h)
+            w, h, lh = dc.GetMultiLineTextExtent(textDict['text'])
+            return (w, h)
         except:
-            return (0,0)
-    
+            return (0, 0)
+
     def getInitMap(self):
         """Create default map frame when no map is selected, needed for coordinates in map units"""
         instrFile = grass.tempfile()
-        instrFileFd = open(instrFile, mode = 'w')
+        instrFileFd = open(instrFile, mode='w')
         instrFileFd.write(self.InstructionFile())
         instrFileFd.flush()
         instrFileFd.close()
-        
+
         page = self.instruction.FindInstructionByType('page')
-        mapInitRect = GetMapBounds(instrFile, portrait = (page['Orientation'] == 'Portrait'))
+        mapInitRect = GetMapBounds(
+            instrFile, portrait=(
+                page['Orientation'] == 'Portrait'))
         grass.try_remove(instrFile)
-        
+
         region = grass.region()
         units = UnitConversion(self)
-        realWidth = units.convert(value = abs(region['w'] - region['e']), fromUnit = 'meter', toUnit = 'inch')
-        scale = mapInitRect.Get()[2]/realWidth  
-        
+        realWidth = units.convert(
+            value=abs(region['w'] - region['e']),
+            fromUnit='meter', toUnit='inch')
+        scale = mapInitRect.Get()[2] / realWidth
+
         initMap = self.instruction.FindInstructionByType('initMap')
         if initMap:
-            id = initMap.id 
+            id = initMap.id
         else:
             id = None
 
-        
         if not id:
             id = wx.NewId()
             initMap = InitMap(id)
             self.instruction.AddInstruction(initMap)
-        self.instruction[id].SetInstruction(dict(rect = mapInitRect, scale = scale))
+        self.instruction[id].SetInstruction(
+            dict(rect=mapInitRect, scale=scale))
 
     def OnDelete(self, event):
         if self.canvas.dragId != -1 and self.currentPage == 0:
@@ -878,49 +962,64 @@ class PsMapFrame(wx.Frame):
                 self.getInitMap()
                 self.canvas.RecalculateEN()
             else:
-                self.deleteObject(self.canvas.dragId)   
-    
+                self.deleteObject(self.canvas.dragId)
+
     def deleteObject(self, id):
         """Deletes object, his id and redraws"""
-        #delete from canvas
+        # delete from canvas
         self.canvas.pdcObj.RemoveId(id)
         if id == self.canvas.dragId:
             self.canvas.pdcTmp.RemoveAll()
             self.canvas.dragId = -1
         self.canvas.Refresh()
-        
+
         # delete from instructions
         del self.instruction[id]
 
     def DialogDataChanged(self, id):
         ids = id
-        if type(id) == int:
+        if isinstance(id, int):
             ids = [id]
         for id in ids:
             itype = self.instruction[id].type
-            
+
             if itype in ('scalebar', 'mapinfo', 'image'):
-                drawRectangle = self.canvas.CanvasPaperCoordinates(rect = self.instruction[id]['rect'], canvasToPaper = False)
-                self.canvas.UpdateLabel(itype = itype, id = id)
-                self.canvas.Draw(pen = self.pen[itype], brush = self.brush[itype],
-                                 pdc = self.canvas.pdcObj, drawid = id, pdctype = 'rectText', bb = drawRectangle)
+                drawRectangle = self.canvas.CanvasPaperCoordinates(
+                    rect=self.instruction[id]['rect'], canvasToPaper=False)
+                self.canvas.UpdateLabel(itype=itype, id=id)
+                self.canvas.Draw(
+                    pen=self.pen[itype],
+                    brush=self.brush[itype],
+                    pdc=self.canvas.pdcObj,
+                    drawid=id,
+                    pdctype='rectText',
+                    bb=drawRectangle)
                 self.canvas.RedrawSelectBox(id)
             if itype == 'northArrow':
-                self.canvas.UpdateLabel(itype = itype, id = id)
-                drawRectangle = self.canvas.CanvasPaperCoordinates(rect = self.instruction[id]['rect'], canvasToPaper = False)
-                self.canvas.Draw(pen = self.pen[itype], brush = self.brush[itype],
-                                 pdc = self.canvas.pdcObj, drawid = id, pdctype = 'bitmap', bb = drawRectangle)
+                self.canvas.UpdateLabel(itype=itype, id=id)
+                drawRectangle = self.canvas.CanvasPaperCoordinates(
+                    rect=self.instruction[id]['rect'], canvasToPaper=False)
+                self.canvas.Draw(
+                    pen=self.pen[itype],
+                    brush=self.brush[itype],
+                    pdc=self.canvas.pdcObj,
+                    drawid=id,
+                    pdctype='bitmap',
+                    bb=drawRectangle)
                 self.canvas.RedrawSelectBox(id)
 
             if itype in ('point', 'line', 'rectangle'):
-                drawRectangle = self.canvas.CanvasPaperCoordinates(rect = self.instruction[id]['rect'], canvasToPaper = False)
+                drawRectangle = self.canvas.CanvasPaperCoordinates(
+                    rect=self.instruction[id]['rect'], canvasToPaper=False)
                 # coords only for line
                 coords = None
                 if itype == 'line':
                     point1 = self.instruction[id]['where'][0]
                     point2 = self.instruction[id]['where'][1]
-                    point1Coords = self.canvas.CanvasPaperCoordinates(rect = Rect2DPS(point1, (0, 0)), canvasToPaper = False)[:2]
-                    point2Coords = self.canvas.CanvasPaperCoordinates(rect = Rect2DPS(point2, (0, 0)), canvasToPaper = False)[:2]
+                    point1Coords = self.canvas.CanvasPaperCoordinates(
+                        rect=Rect2DPS(point1, (0, 0)), canvasToPaper=False)[:2]
+                    point2Coords = self.canvas.CanvasPaperCoordinates(
+                        rect=Rect2DPS(point2, (0, 0)), canvasToPaper=False)[:2]
                     coords = (point1Coords, point2Coords)
 
                 # fill color is not in line
@@ -932,105 +1031,142 @@ class PsMapFrame(wx.Frame):
                 if 'width' in self.instruction[id].GetInstruction():
                     width = self.instruction[id]['width']
 
-                self.canvas.DrawGraphics(drawid = id, color = self.instruction[id]['color'], shape = itype,
-                                       fcolor = fcolor, width = width, bb = drawRectangle, lineCoords = coords)
+                self.canvas.DrawGraphics(
+                    drawid=id,
+                    color=self.instruction[id]['color'],
+                    shape=itype,
+                    fcolor=fcolor,
+                    width=width,
+                    bb=drawRectangle,
+                    lineCoords=coords)
 
                 self.canvas.RedrawSelectBox(id)
 
             if itype == 'text':
-                
+
                 if self.instruction[id]['rotate']:
-                    rot = float(self.instruction[id]['rotate']) 
+                    rot = float(self.instruction[id]['rotate'])
                 else:
                     rot = 0
 
-                extent = self.getTextExtent(textDict = self.instruction[id].GetInstruction())
+                extent = self.getTextExtent(
+                    textDict=self.instruction[id].GetInstruction())
                 rect = Rect2DPS(self.instruction[id]['where'], (0, 0))
-                self.instruction[id]['coords'] = list(self.canvas.CanvasPaperCoordinates(rect = rect, canvasToPaper = False)[:2])
-                
-                #computes text coordinates according to reference point, not precisely
+                self.instruction[id]['coords'] = list(
+                    self.canvas.CanvasPaperCoordinates(
+                        rect=rect, canvasToPaper=False)[: 2])
+
+                # computes text coordinates according to reference point, not
+                # precisely
                 if self.instruction[id]['ref'].split()[0] == 'lower':
                     self.instruction[id]['coords'][1] -= extent[1]
                 elif self.instruction[id]['ref'].split()[0] == 'center':
-                    self.instruction[id]['coords'][1] -= extent[1]/2
+                    self.instruction[id]['coords'][1] -= extent[1] / 2
                 if self.instruction[id]['ref'].split()[1] == 'right':
-                    self.instruction[id]['coords'][0] -= extent[0] * cos(rot/180*pi)
-                    self.instruction[id]['coords'][1] += extent[0] * sin(rot/180*pi)
+                    self.instruction[id]['coords'][
+                        0] -= extent[0] * cos(rot / 180 * pi)
+                    self.instruction[id]['coords'][
+                        1] += extent[0] * sin(rot / 180 * pi)
                 elif self.instruction[id]['ref'].split()[1] == 'center':
-                    self.instruction[id]['coords'][0] -= extent[0]/2 * cos(rot/180*pi)
-                    self.instruction[id]['coords'][1] += extent[0]/2 * sin(rot/180*pi)
-                    
-                self.instruction[id]['coords'][0] += self.instruction[id]['xoffset']
-                self.instruction[id]['coords'][1] -= self.instruction[id]['yoffset']
+                    self.instruction[id]['coords'][
+                        0] -= extent[0] / 2 * cos(rot / 180 * pi)
+                    self.instruction[id]['coords'][
+                        1] += extent[0] / 2 * sin(rot / 180 * pi)
+
+                self.instruction[id]['coords'][
+                    0] += self.instruction[id]['xoffset']
+                self.instruction[id]['coords'][
+                    1] -= self.instruction[id]['yoffset']
                 coords = self.instruction[id]['coords']
-                self.instruction[id]['rect'] = bounds = self.getModifiedTextBounds(coords[0], coords[1], extent, rot)
-                self.canvas.DrawRotText(pdc = self.canvas.pdcObj, drawId = id,
-                                        textDict = self.instruction[id].GetInstruction(),
-                                        coords = coords, bounds = bounds)
+                self.instruction[id]['rect'] = bounds = self.getModifiedTextBounds(
+                    coords[0], coords[1], extent, rot)
+                self.canvas.DrawRotText(
+                    pdc=self.canvas.pdcObj, drawId=id,
+                    textDict=self.instruction[id].GetInstruction(),
+                    coords=coords, bounds=bounds)
                 self.canvas.RedrawSelectBox(id)
-                
+
             if itype in ('map', 'vector', 'raster', 'labels'):
-                
-                if itype == 'raster':#set resolution
+
+                if itype == 'raster':  # set resolution
                     info = grass.raster_info(self.instruction[id]['raster'])
-                    RunCommand('g.region', nsres = info['nsres'], ewres = info['ewres'])
+                    RunCommand(
+                        'g.region',
+                        nsres=info['nsres'],
+                        ewres=info['ewres'])
                     # change current raster in raster legend
-                    
+
                 if 'rasterLegend' in self.openDialogs:
                     self.openDialogs['rasterLegend'].updateDialog()
                 id = self.instruction.FindInstructionByType('map').id
-                
-                #check resolution
+
+                # check resolution
                 if itype == 'raster':
-                    SetResolution(dpi = self.instruction[id]['resolution'], 
-                                  width = self.instruction[id]['rect'].width,
-                                  height = self.instruction[id]['rect'].height)   
-                rectCanvas = self.canvas.CanvasPaperCoordinates(rect = self.instruction[id]['rect'],
-                                                                canvasToPaper = False)
+                    SetResolution(dpi=self.instruction[id]['resolution'],
+                                  width=self.instruction[id]['rect'].width,
+                                  height=self.instruction[id]['rect'].height)
+                rectCanvas = self.canvas.CanvasPaperCoordinates(
+                    rect=self.instruction[id]['rect'], canvasToPaper=False)
                 self.canvas.RecalculateEN()
                 self.canvas.UpdateMapLabel()
-                
-                self.canvas.Draw(pen = self.pen['map'], brush = self.brush['map'],
-                                 pdc = self.canvas.pdcObj, drawid = id, pdctype = 'rectText', bb = rectCanvas)
-                # redraw select box  
+
+                self.canvas.Draw(
+                    pen=self.pen['map'],
+                    brush=self.brush['map'],
+                    pdc=self.canvas.pdcObj,
+                    drawid=id,
+                    pdctype='rectText',
+                    bb=rectCanvas)
+                # redraw select box
                 self.canvas.RedrawSelectBox(id)
                 self.canvas.pdcTmp.RemoveId(self.canvas.idZoomBoxTmp)
                 # redraw to get map to the bottom layer
                 #self.canvas.Zoom(zoomFactor = 1, view = (0, 0))
-                
+
             if itype == 'rasterLegend':
                 if self.instruction[id]['rLegend']:
-                    self.canvas.UpdateLabel(itype = itype, id = id)
-                    drawRectangle = self.canvas.CanvasPaperCoordinates(rect = self.instruction[id]['rect'], canvasToPaper = False)
-                    self.canvas.Draw(pen = self.pen[itype], brush = self.brush[itype],
-                                     pdc = self.canvas.pdcObj, drawid = id, pdctype = 'rectText', bb = drawRectangle)
+                    self.canvas.UpdateLabel(itype=itype, id=id)
+                    drawRectangle = self.canvas.CanvasPaperCoordinates(
+                        rect=self.instruction[id]['rect'], canvasToPaper=False)
+                    self.canvas.Draw(
+                        pen=self.pen[itype],
+                        brush=self.brush[itype],
+                        pdc=self.canvas.pdcObj,
+                        drawid=id,
+                        pdctype='rectText',
+                        bb=drawRectangle)
                     self.canvas.RedrawSelectBox(id)
                 else:
                     self.deleteObject(id)
-                    
+
             if itype == 'vectorLegend':
                 if not self.instruction.FindInstructionByType('vector'):
                     self.deleteObject(id)
                 elif self.instruction[id]['vLegend']:
-                    self.canvas.UpdateLabel(itype = itype, id = id)
-                    drawRectangle = self.canvas.CanvasPaperCoordinates(rect = self.instruction[id]['rect'], canvasToPaper = False)
-                    self.canvas.Draw(pen = self.pen[itype], brush = self.brush[itype],
-                                     pdc = self.canvas.pdcObj, drawid = id, pdctype = 'rectText', bb = drawRectangle)
+                    self.canvas.UpdateLabel(itype=itype, id=id)
+                    drawRectangle = self.canvas.CanvasPaperCoordinates(
+                        rect=self.instruction[id]['rect'], canvasToPaper=False)
+                    self.canvas.Draw(
+                        pen=self.pen[itype],
+                        brush=self.brush[itype],
+                        pdc=self.canvas.pdcObj,
+                        drawid=id,
+                        pdctype='rectText',
+                        bb=drawRectangle)
                     self.canvas.RedrawSelectBox(id)
 
                 else:
                     self.deleteObject(id)
-                
+
     def OnPageChanged(self, event):
         """Flatnotebook page has changed"""
         self.currentPage = self.book.GetPageIndex(self.book.GetCurrentPage())
         if self.currentPage == 1:
-            self.SetStatusText(_("Press button with green triangle icon to generate preview."))
+            self.SetStatusText(
+                _("Press button with green triangle icon to generate preview."))
         else:
             self.SetStatusText('')
 
-        
-        
     def OnPageChanging(self, event):
         """Flatnotebook page is changing"""
         if self.currentPage == 0 and self.mouse['use'] == 'addMap':
@@ -1044,12 +1180,14 @@ class PsMapFrame(wx.Frame):
                         'entry=wxGUI.psmap'])
         else:
             RunCommand('g.manual',
-                       quiet = True,
-                       entry = 'wxGUI.psmap')
-        
+                       quiet=True,
+                       entry='wxGUI.psmap')
+
     def OnAbout(self, event):
         """Display About window"""
-        ShowAboutDialog(prgName=_('wxGUI Cartographic Composer'), startYear='2011')
+        ShowAboutDialog(
+            prgName=_('wxGUI Cartographic Composer'),
+            startYear='2011')
 
     def OnCloseWindow(self, event):
         """Close window"""
@@ -1063,90 +1201,89 @@ class PsMapFrame(wx.Frame):
         self.Destroy()
 
 
-
 class PsMapBufferedWindow(wx.Window):
     """A buffered window class."""
-    def __init__(self, parent, id =  wx.ID_ANY,
-                 style = wx.NO_FULL_REPAINT_ON_RESIZE,
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 style=wx.NO_FULL_REPAINT_ON_RESIZE,
                  **kwargs):
         """
         :param parent: parent window
         :param kwargs: other wx.Window parameters
         """
-        wx.Window.__init__(self, parent, id = id, style = style)
+        wx.Window.__init__(self, parent, id=id, style=style)
         self.parent = parent
-    
+
         self.FitInside()
-        
+
         # store an off screen empty bitmap for saving to file
         self._buffer = None
         # indicates whether or not a resize event has taken place
-        self.resize = False 
-        
+        self.resize = False
+
         self.mouse = kwargs['mouse']
         self.cursors = kwargs['cursors']
         self.preview = kwargs['preview']
         self.pen = kwargs['pen']
         self.brush = kwargs['brush']
-        
-        if kwargs.has_key('instruction'):
+
+        if 'instruction' in kwargs:
             self.instruction = kwargs['instruction']
-        if kwargs.has_key('openDialogs'):
+        if 'openDialogs' in kwargs:
             self.openDialogs = kwargs['openDialogs']
-        if kwargs.has_key('pageId'):
+        if 'pageId' in kwargs:
             self.pageId = kwargs['pageId']
-        if kwargs.has_key('objectId'):
+        if 'objectId' in kwargs:
             self.objectId = kwargs['objectId']
-        
-        
-        #labels
-        self.itemLabelsDict = { 'map': _("MAP FRAME"),
-                                'rasterLegend': _("RASTER LEGEND"),
-                                'vectorLegend': _("VECTOR LEGEND"),
-                                'mapinfo': _("MAP INFO"),
-                                'scalebar': _("SCALE BAR"),
-                                'image': _("IMAGE"),
-                                'northArrow': _("NORTH ARROW")}
+
+        # labels
+        self.itemLabelsDict = {'map': _("MAP FRAME"),
+                               'rasterLegend': _("RASTER LEGEND"),
+                               'vectorLegend': _("VECTOR LEGEND"),
+                               'mapinfo': _("MAP INFO"),
+                               'scalebar': _("SCALE BAR"),
+                               'image': _("IMAGE"),
+                               'northArrow': _("NORTH ARROW")}
         self.itemLabels = {}
-        
+
         # define PseudoDC
         self.pdc = wx.PseudoDC()
         self.pdcObj = wx.PseudoDC()
         self.pdcPaper = wx.PseudoDC()
         self.pdcTmp = wx.PseudoDC()
         self.pdcImage = wx.PseudoDC()
-        
-        self.SetClientSize((700,510))#?
+
+        self.SetClientSize((700, 510))  # ?
         self._buffer = wx.EmptyBitmap(*self.GetClientSize())
-        
+
         self.idBoxTmp = wx.NewId()
         self.idZoomBoxTmp = wx.NewId()
         self.idResizeBoxTmp = wx.NewId()
-        self.idLinePointsTmp = (wx.NewId(), wx.NewId()) # ids of marks for moving line vertices
+        # ids of marks for moving line vertices
+        self.idLinePointsTmp = (wx.NewId(), wx.NewId())
 
         self.resizeBoxSize = wx.Size(8, 8)
-        self.showResizeHelp = False # helper for correctly working statusbar
-        
+        self.showResizeHelp = False  # helper for correctly working statusbar
+
         self.dragId = -1
-        
+
         if self.preview:
             self.image = None
             self.imageId = 2000
             self.imgName = self.parent.imgName
-            
+
         self.currScale = None
-        
+
         self.Clear()
-        
+
         self.Bind(wx.EVT_ERASE_BACKGROUND, lambda x: None)
-        
+
         self.Bind(wx.EVT_PAINT, self.OnPaint)
-        self.Bind(wx.EVT_SIZE,  self.OnSize)
-        self.Bind(wx.EVT_IDLE,  self.OnIdle)
+        self.Bind(wx.EVT_SIZE, self.OnSize)
+        self.Bind(wx.EVT_IDLE, self.OnIdle)
         # self.Bind(wx.EVT_MOUSE_EVENTS, self.OnMouse)
         self.Bind(wx.EVT_MOUSE_EVENTS, self.MouseActions)
 
-
     def Clear(self):
         """Clear canvas and set paper
         """
@@ -1155,60 +1292,76 @@ class PsMapBufferedWindow(wx.Window):
         self.pdcPaper.SetBackground(bg)
         self.pdcPaper.Clear()
         self.pdcPaper.EndDrawing()
-        
+
         self.pdcObj.RemoveAll()
         self.pdcTmp.RemoveAll()
-        
+
         if not self.preview:
             self.SetPage()
 
-    
-    def CanvasPaperCoordinates(self, rect, canvasToPaper = True):
+    def CanvasPaperCoordinates(self, rect, canvasToPaper=True):
         """Converts canvas (pixel) -> paper (inch) coordinates and size and vice versa"""
-        
+
         units = UnitConversion(self)
-        
+
         fromU = 'pixel'
         toU = 'inch'
         pRect = self.pdcPaper.GetIdBounds(self.pageId)
-        pRectx, pRecty = pRect.x, pRect.y 
-        scale = 1/self.currScale
-        if not canvasToPaper: # paper -> canvas
+        pRectx, pRecty = pRect.x, pRect.y
+        scale = 1 / self.currScale
+        if not canvasToPaper:  # paper -> canvas
             fromU = 'inch'
             toU = 'pixel'
             scale = self.currScale
-            pRectx = units.convert(value =  - pRect.x, fromUnit = 'pixel', toUnit = 'inch' ) /scale #inch, real, negative
-            pRecty = units.convert(value =  - pRect.y, fromUnit = 'pixel', toUnit = 'inch' ) /scale 
-        Width = units.convert(value = rect.GetWidth(), fromUnit = fromU, toUnit = toU) * scale
-        Height = units.convert(value = rect.GetHeight(), fromUnit = fromU, toUnit = toU) * scale
-        X = units.convert(value = (rect.GetX() - pRectx), fromUnit = fromU, toUnit = toU) * scale
-        Y = units.convert(value = (rect.GetY() - pRecty), fromUnit = fromU, toUnit = toU) * scale
+            pRectx = units.convert(
+                value=- pRect.x,
+                fromUnit='pixel',
+                toUnit='inch') / scale  # inch, real, negative
+            pRecty = units.convert(
+                value=- pRect.y,
+                fromUnit='pixel',
+                toUnit='inch') / scale
+        Width = units.convert(
+            value=rect.GetWidth(),
+            fromUnit=fromU,
+            toUnit=toU) * scale
+        Height = units.convert(
+            value=rect.GetHeight(),
+            fromUnit=fromU,
+            toUnit=toU) * scale
+        X = units.convert(
+            value=(
+                rect.GetX() - pRectx),
+            fromUnit=fromU,
+            toUnit=toU) * scale
+        Y = units.convert(
+            value=(
+                rect.GetY() - pRecty),
+            fromUnit=fromU,
+            toUnit=toU) * scale
 
         return Rect2D(X, Y, Width, Height)
 
-    
-    
     def SetPage(self):
         """Sets and changes page, redraws paper"""
-        
+
         page = self.instruction[self.pageId]
         if not page:
-            page = PageSetup(id = self.pageId)
+            page = PageSetup(id=self.pageId)
             self.instruction.AddInstruction(page)
-        
+
         ppi = wx.ClientDC(self).GetPPI()
         cW, cH = self.GetClientSize()
-        pW, pH = page['Width']*ppi[0], page['Height']*ppi[1]
+        pW, pH = page['Width'] * ppi[0], page['Height'] * ppi[1]
 
         if self.currScale is None:
-            self.currScale = min(cW/pW, cH/pH)
+            self.currScale = min(cW / pW, cH / pH)
         pW = pW * self.currScale
         pH = pH * self.currScale
-        
-        x = cW/2 - pW/2
-        y = cH/2 - pH/2
-        self.DrawPaper(wx.Rect(x, y, pW, pH))
 
+        x = cW / 2 - pW / 2
+        y = cH / 2 - pH / 2
+        self.DrawPaper(wx.Rect(x, y, pW, pH))
 
     def modifyRectangle(self, r):
         """Recalculates rectangle not to have negative size"""
@@ -1218,39 +1371,55 @@ class PsMapBufferedWindow(wx.Window):
             r.SetY(r.GetY() + r.GetHeight())
         r.SetWidth(abs(r.GetWidth()))
         r.SetHeight(abs(r.GetHeight()))
-        return r 
-    
+        return r
+
     def RecalculateEN(self):
         """Recalculate east and north for texts (eps, points) after their or map's movement"""
         try:
             mapId = self.instruction.FindInstructionByType('map').id
         except AttributeError:
             mapId = self.instruction.FindInstructionByType('initMap').id
-        
-        for itemType in ('text', 'image', 'northArrow', 'point', 'line', 'rectangle'):
-            items = self.instruction.FindInstructionByType(itemType, list = True)
+
+        for itemType in ('text', 'image', 'northArrow',
+                         'point', 'line', 'rectangle'):
+            items = self.instruction.FindInstructionByType(itemType, list=True)
             for item in items:
                 instr = self.instruction[item.id]
                 if itemType in ('line', 'rectangle'):
                     if itemType == 'line':
-                        e1, n1 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['where'][0][0],
-                                                     y = instr['where'][0][1], paperToMap = True)
-                        e2, n2 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['where'][1][0],
-                                                     y = instr['where'][1][1], paperToMap = True)
-                    else: 
-                        e1, n1 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['rect'].GetLeft(),
-                                                     y = instr['rect'].GetTop(), paperToMap = True)
-                        e2, n2 = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['rect'].GetRight(),
-                                                     y = instr['rect'].GetBottom(), paperToMap = True)
+                        e1, n1 = PaperMapCoordinates(
+                            mapInstr=self.instruction[mapId],
+                            x=instr['where'][0][0],
+                            y=instr['where'][0][1],
+                            paperToMap=True)
+                        e2, n2 = PaperMapCoordinates(
+                            mapInstr=self.instruction[mapId],
+                            x=instr['where'][1][0],
+                            y=instr['where'][1][1],
+                            paperToMap=True)
+                    else:
+                        e1, n1 = PaperMapCoordinates(
+                            mapInstr=self.instruction[mapId],
+                            x=instr['rect'].GetLeft(),
+                            y=instr['rect'].GetTop(),
+                            paperToMap=True)
+                        e2, n2 = PaperMapCoordinates(
+                            mapInstr=self.instruction[mapId],
+                            x=instr['rect'].GetRight(),
+                            y=instr['rect'].GetBottom(),
+                            paperToMap=True)
                     instr['east1'] = e1
                     instr['north1'] = n1
                     instr['east2'] = e2
                     instr['north2'] = n2
                 else:
-                    e, n = PaperMapCoordinates(mapInstr = self.instruction[mapId], x = instr['where'][0],
-                                               y = instr['where'][1], paperToMap = True)
+                    e, n = PaperMapCoordinates(
+                        mapInstr=self.instruction[mapId],
+                        x=instr['where'][0],
+                        y=instr['where'][1],
+                        paperToMap=True)
                     instr['east'], instr['north'] = e, n
-                
+
     def OnPaint(self, event):
         """Draw pseudo DC to buffer
         """
@@ -1260,77 +1429,77 @@ class PsMapBufferedWindow(wx.Window):
         # use PrepareDC to set position correctly
         # probably does nothing, removed from wxPython 2.9
         # self.PrepareDC(dc)
-        
+
         dc.SetBackground(wx.LIGHT_GREY_BRUSH)
         dc.Clear()
-        
+
         # draw paper
         if not self.preview:
             self.pdcPaper.DrawToDC(dc)
         # draw to the DC using the calculated clipping rect
 
         rgn = self.GetUpdateRegion()
-        
+
         if not self.preview:
             self.pdcObj.DrawToDCClipped(dc, rgn.GetBox())
-        else: 
+        else:
             self.pdcImage.DrawToDCClipped(dc, rgn.GetBox())
         self.pdcTmp.DrawToDCClipped(dc, rgn.GetBox())
-        
+
     def MouseActions(self, event):
         """Mouse motion and button click notifier
         """
         # zoom with mouse wheel
         if event.GetWheelRotation() != 0:
             self.OnMouseWheel(event)
-            
+
         # left mouse button pressed
         elif event.LeftDown():
             self.OnLeftDown(event)
-        
+
         # left mouse button released
         elif event.LeftUp():
             self.OnLeftUp(event)
-        
+
         # dragging
         elif event.Dragging():
             self.OnDragging(event)
-        
+
         # double click
         elif event.ButtonDClick():
             self.OnButtonDClick(event)
-        
+
         # middle mouse button pressed
         elif event.MiddleDown():
             self.OnMiddleDown(event)
-        
+
         elif event.Moving():
             self.OnMouseMoving(event)
-                
+
     def OnMouseWheel(self, event):
         """Mouse wheel scrolled.
 
         Changes zoom."""
-        if UserSettings.Get(group = 'display',
-                            key = 'mouseWheelZoom',
-                            subkey = 'selection') == 2:
+        if UserSettings.Get(group='display',
+                            key='mouseWheelZoom',
+                            subkey='selection') == 2:
             event.Skip()
             return
 
         zoom = event.GetWheelRotation()
         oldUse = self.mouse['use']
         self.mouse['begin'] = event.GetPosition()
-        
-        if UserSettings.Get(group = 'display',
-                            key = 'scrollDirection',
-                            subkey = 'selection'):
+
+        if UserSettings.Get(group='display',
+                            key='scrollDirection',
+                            subkey='selection'):
             zoom *= -1
-            
+
         if zoom > 0:
             self.mouse['use'] = 'zoomin'
         else:
             self.mouse['use'] = 'zoomout'
-            
+
         zoomFactor, view = self.ComputeZoom(wx.Rect(0, 0, 0, 0))
         self.Zoom(zoomFactor, view)
         self.mouse['use'] = oldUse
@@ -1346,16 +1515,18 @@ class PsMapBufferedWindow(wx.Window):
         if self.mouse['use'] in ('pointer', 'resize'):
             pos = event.GetPosition()
             foundResize = self.pdcTmp.FindObjects(pos[0], pos[1])
-            if foundResize and foundResize[0] in (self.idResizeBoxTmp,) + self.idLinePointsTmp:
+            if foundResize and foundResize[0] in (
+                    self.idResizeBoxTmp,) + self.idLinePointsTmp:
                 self.SetCursor(self.cursors["sizenwse"])
-                self.parent.SetStatusText(_('Click and drag to resize object'), 0)
+                self.parent.SetStatusText(
+                    _('Click and drag to resize object'), 0)
                 self.showResizeHelp = True
             else:
                 if self.showResizeHelp:
                     self.parent.SetStatusText('', 0)
                     self.SetCursor(self.cursors["default"])
                     self.showResizeHelp = False
-                
+
     def OnLeftDown(self, event):
         """Left mouse button pressed.
 
@@ -1363,15 +1534,19 @@ class PsMapBufferedWindow(wx.Window):
         """
         self.mouse['begin'] = event.GetPosition()
         self.begin = self.mouse['begin']
-        
+
         # select
         if self.mouse['use'] == 'pointer':
-            found = self.pdcObj.FindObjects(self.mouse['begin'][0], self.mouse['begin'][1])
-            foundResize = self.pdcTmp.FindObjects(self.mouse['begin'][0], self.mouse['begin'][1])
-
-            if foundResize and foundResize[0] in (self.idResizeBoxTmp,) + self.idLinePointsTmp:
+            found = self.pdcObj.FindObjects(
+                self.mouse['begin'][0],
+                self.mouse['begin'][1])
+            foundResize = self.pdcTmp.FindObjects(
+                self.mouse['begin'][0], self.mouse['begin'][1])
+
+            if foundResize and foundResize[0] in (
+                    self.idResizeBoxTmp,) + self.idLinePointsTmp:
                 self.mouse['use'] = 'resize'
-                
+
                 # when resizing, proportions match region
                 if self.instruction[self.dragId].type == 'map':
                     self.constraint = False
@@ -1381,19 +1556,23 @@ class PsMapBufferedWindow(wx.Window):
                         self.mapBounds = self.pdcObj.GetIdBounds(self.dragId)
 
                 if self.instruction[self.dragId].type == 'line':
-                    self.currentLinePoint = self.idLinePointsTmp.index(foundResize[0])
-                
+                    self.currentLinePoint = self.idLinePointsTmp.index(
+                        foundResize
+                        [0])
+
             elif found:
                 self.dragId = found[0]
                 self.RedrawSelectBox(self.dragId)
-                if self.instruction[self.dragId].type not in ('map', 'rectangle'):
+                if self.instruction[
+                        self.dragId].type not in (
+                        'map', 'rectangle'):
                     self.pdcTmp.RemoveId(self.idResizeBoxTmp)
                     self.Refresh()
                 if self.instruction[self.dragId].type != 'line':
                     for id in self.idLinePointsTmp:
                         self.pdcTmp.RemoveId(id)
                     self.Refresh()
-                    
+
             else:
                 self.dragId = -1
                 self.pdcTmp.RemoveId(self.idBoxTmp)
@@ -1408,7 +1587,7 @@ class PsMapBufferedWindow(wx.Window):
         Recalculate zooming/resizing/moving and redraw.
         """
         # zoom in, zoom out
-        if self.mouse['use'] in ('zoomin','zoomout'):
+        if self.mouse['use'] in ('zoomin', 'zoomout'):
             zoomR = self.pdcTmp.GetIdBounds(self.idZoomBoxTmp)
             self.pdcTmp.RemoveId(self.idZoomBoxTmp)
             self.Refresh()
@@ -1423,13 +1602,15 @@ class PsMapBufferedWindow(wx.Window):
                 self.pdcTmp.RemoveId(self.idZoomBoxTmp)
                 self.Refresh()
                 return
-            rectPaper = self.CanvasPaperCoordinates(rect = rectTmp, canvasToPaper = True)
+            rectPaper = self.CanvasPaperCoordinates(
+                rect=rectTmp, canvasToPaper=True)
 
-            dlg = MapDialog(parent = self.parent, id = [None, None, None], settings = self.instruction, 
-                            rect = rectPaper)
+            dlg = MapDialog(
+                parent=self.parent, id=[None, None, None],
+                settings=self.instruction, rect=rectPaper)
             self.openDialogs['map'] = dlg
             self.openDialogs['map'].Show()
-            
+
             self.parent.toolbar.SelectDefault()
             return
 
@@ -1439,72 +1620,87 @@ class PsMapBufferedWindow(wx.Window):
             if not mapObj:
                 mapObj = self.instruction.FindInstructionByType('initMap')
             mapId = mapObj.id
-            
+
             if self.dragId == mapId:
-                # necessary to change either map frame (scaleType 0,1,2) or region (scaletype 3)
+                # necessary to change either map frame (scaleType 0,1,2) or
+                # region (scaletype 3)
                 newRectCanvas = self.pdcObj.GetIdBounds(mapId)
-                newRectPaper = self.CanvasPaperCoordinates(rect = newRectCanvas, canvasToPaper = True)
+                newRectPaper = self.CanvasPaperCoordinates(
+                    rect=newRectCanvas, canvasToPaper=True)
                 self.instruction[mapId]['rect'] = newRectPaper
-                
+
                 if self.instruction[mapId]['scaleType'] in (0, 1, 2):
                     if self.instruction[mapId]['scaleType'] == 0:
-                        
-                        scale, foo, rect = AutoAdjust(self, scaleType = 0,
-                                                      map = self.instruction[mapId]['map'],
-                                                      mapType = self.instruction[mapId]['mapType'], 
-                                                      rect = self.instruction[mapId]['rect'])
-                        
+
+                        scale, foo, rect = AutoAdjust(
+                            self, scaleType=0, map=self.instruction[mapId]
+                            ['map'],
+                            mapType=self.instruction[mapId]['mapType'],
+                            rect=self.instruction[mapId]['rect'])
+
                     elif self.instruction[mapId]['scaleType'] == 1:
-                        scale, foo, rect = AutoAdjust(self, scaleType = 1,
-                                                      region = self.instruction[mapId]['region'],
-                                                      rect = self.instruction[mapId]['rect'])
+                        scale, foo, rect = AutoAdjust(
+                            self, scaleType=1,
+                            region=self.instruction[mapId]['region'],
+                            rect=self.instruction[mapId]['rect'])
                     else:
-                        scale, foo, rect = AutoAdjust(self, scaleType = 2,
-                                                      rect = self.instruction[mapId]['rect'])
+                        scale, foo, rect = AutoAdjust(
+                            self, scaleType=2, rect=self.instruction[mapId]['rect'])
                     self.instruction[mapId]['rect'] = rect
                     self.instruction[mapId]['scale'] = scale
-                    
-                    rectCanvas = self.CanvasPaperCoordinates(rect = rect, canvasToPaper = False)
-                    self.Draw(pen = self.pen['map'], brush = self.brush['map'],
-                              pdc = self.pdcObj, drawid = mapId, pdctype = 'rectText', bb = rectCanvas)
-                    
+
+                    rectCanvas = self.CanvasPaperCoordinates(
+                        rect=rect, canvasToPaper=False)
+                    self.Draw(
+                        pen=self.pen['map'],
+                        brush=self.brush['map'],
+                        pdc=self.pdcObj,
+                        drawid=mapId,
+                        pdctype='rectText',
+                        bb=rectCanvas)
+
                 elif self.instruction[mapId]['scaleType'] == 3:
-                    ComputeSetRegion(self, mapDict = self.instruction[mapId].GetInstruction())
-                #check resolution
-                SetResolution(dpi = self.instruction[mapId]['resolution'],
-                              width = self.instruction[mapId]['rect'].width,
-                              height = self.instruction[mapId]['rect'].height)
-                
+                    ComputeSetRegion(
+                        self, mapDict=self.instruction[mapId].GetInstruction())
+                # check resolution
+                SetResolution(dpi=self.instruction[mapId]['resolution'],
+                              width=self.instruction[mapId]['rect'].width,
+                              height=self.instruction[mapId]['rect'].height)
+
                 self.RedrawSelectBox(mapId)
-                self.Zoom(zoomFactor = 1, view = (0, 0))
+                self.Zoom(zoomFactor=1, view=(0, 0))
 
             elif self.instruction[self.dragId].type == 'line':
                 points = self.instruction[self.dragId]['where']
-                self.instruction[self.dragId]['rect'] = Rect2DPP(points[0], points[1])
-                self.RecalculatePosition(ids = [self.dragId])
+                self.instruction[
+                    self.dragId]['rect'] = Rect2DPP(
+                    points[0], points[1])
+                self.RecalculatePosition(ids=[self.dragId])
 
             elif self.instruction[self.dragId].type == 'rectangle':
-                self.RecalculatePosition(ids = [self.dragId])
+                self.RecalculatePosition(ids=[self.dragId])
 
             self.mouse['use'] = 'pointer'
-            
+
         # recalculate the position of objects after dragging
         if self.mouse['use'] in ('pointer', 'resize') and self.dragId != -1:
-            if self.mouse['begin'] != event.GetPosition(): #for double click
-                
-                self.RecalculatePosition(ids = [self.dragId])
+            if self.mouse['begin'] != event.GetPosition():  # for double click
+
+                self.RecalculatePosition(ids=[self.dragId])
                 if self.instruction[self.dragId].type in self.openDialogs:
-                    self.openDialogs[self.instruction[self.dragId].type].updateDialog()
-        
+                    self.openDialogs[
+                        self.instruction[
+                            self.dragId].type].updateDialog()
+
         elif self.mouse['use'] in ('addPoint', 'addLine', 'addRectangle'):
-            endCoordinates = self.CanvasPaperCoordinates(rect = wx.Rect(event.GetX(), event.GetY(), 0, 0),
-                                                         canvasToPaper = True)[:2]
+            endCoordinates = self.CanvasPaperCoordinates(rect=wx.Rect(
+                event.GetX(), event.GetY(), 0, 0), canvasToPaper=True)[:2]
 
             diffX = event.GetX() - self.mouse['begin'][0]
             diffY = event.GetY() - self.mouse['begin'][1]
 
             if self.mouse['use'] == 'addPoint':
-                self.parent.AddPoint(coordinates = endCoordinates)
+                self.parent.AddPoint(coordinates=endCoordinates)
             elif self.mouse['use'] in ('addLine', 'addRectangle'):
                 # not too small lines/rectangles
                 if sqrt(diffX * diffX + diffY * diffY) < 5:
@@ -1512,24 +1708,34 @@ class PsMapBufferedWindow(wx.Window):
                     self.Refresh()
                     return
 
-                beginCoordinates = self.CanvasPaperCoordinates(rect = wx.Rect(self.mouse['begin'][0],
-                                                                              self.mouse['begin'][1], 0, 0),
-                                                               canvasToPaper = True)[:2]
+                beginCoordinates = self.CanvasPaperCoordinates(
+                    rect=wx.Rect(
+                        self.mouse['begin'][0],
+                        self.mouse['begin'][1],
+                        0, 0),
+                    canvasToPaper=True)[
+                    : 2]
                 if self.mouse['use'] == 'addLine':
-                    self.parent.AddLine(coordinates = [beginCoordinates, endCoordinates])
+                    self.parent.AddLine(
+                        coordinates=[
+                            beginCoordinates,
+                            endCoordinates])
                 else:
-                    self.parent.AddRectangle(coordinates = [beginCoordinates, endCoordinates])
+                    self.parent.AddRectangle(
+                        coordinates=[
+                            beginCoordinates,
+                            endCoordinates])
                 self.pdcTmp.RemoveId(self.idZoomBoxTmp)
                 self.Refresh()
 
     def OnButtonDClick(self, event):
         """Open object dialog for editing."""
         if self.mouse['use'] == 'pointer' and self.dragId != -1:
-            itemCall = {'text':self.parent.OnAddText,
+            itemCall = {'text': self.parent.OnAddText,
                         'mapinfo': self.parent.OnAddMapinfo,
                         'scalebar': self.parent.OnAddScalebar,
                         'image': self.parent.OnAddImage,
-                        'northArrow' : self.parent.OnAddNorthArrow,
+                        'northArrow': self.parent.OnAddNorthArrow,
                         'point': self.parent.AddPoint,
                         'line': self.parent.AddLine,
                         'rectangle': self.parent.AddRectangle,
@@ -1537,17 +1743,17 @@ class PsMapBufferedWindow(wx.Window):
                         'vectorLegend': self.parent.OnAddLegend,
                         'map': self.parent.OnAddMap}
 
-            itemArg = { 'text': dict(event = None, id = self.dragId),
-                        'mapinfo': dict(event = None),
-                        'scalebar': dict(event = None),
-                        'image': dict(event = None, id = self.dragId),
-                        'northArrow': dict(event = None, id = self.dragId),
-                        'point': dict(id = self.dragId),
-                        'line': dict(id = self.dragId),
-                        'rectangle': dict(id = self.dragId),
-                        'rasterLegend': dict(event = None),
-                        'vectorLegend': dict(event = None, page = 1),
-                        'map': dict(event = None, notebook = True)}
+            itemArg = {'text': dict(event=None, id=self.dragId),
+                       'mapinfo': dict(event=None),
+                       'scalebar': dict(event=None),
+                       'image': dict(event=None, id=self.dragId),
+                       'northArrow': dict(event=None, id=self.dragId),
+                       'point': dict(id=self.dragId),
+                       'line': dict(id=self.dragId),
+                       'rectangle': dict(id=self.dragId),
+                       'rasterLegend': dict(event=None),
+                       'vectorLegend': dict(event=None, page=1),
+                       'map': dict(event=None, notebook=True)}
 
             type = self.instruction[self.dragId].type
             itemCall[type](**itemArg[type])
@@ -1557,15 +1763,21 @@ class PsMapBufferedWindow(wx.Window):
         if event.MiddleIsDown():
             # panning
             self.mouse['end'] = event.GetPosition()
-            self.Pan(begin = self.mouse['begin'], end = self.mouse['end'])
+            self.Pan(begin=self.mouse['begin'], end=self.mouse['end'])
             self.mouse['begin'] = event.GetPosition()
 
         elif event.LeftIsDown():
-            # draw box when zooming, creating map 
-            if self.mouse['use'] in ('zoomin', 'zoomout', 'addMap', 'addLine', 'addRectangle'):
+            # draw box when zooming, creating map
+            if self.mouse['use'] in (
+                    'zoomin', 'zoomout', 'addMap', 'addLine', 'addRectangle'):
                 self.mouse['end'] = event.GetPosition()
-                r = wx.Rect(self.mouse['begin'][0], self.mouse['begin'][1],
-                            self.mouse['end'][0]-self.mouse['begin'][0], self.mouse['end'][1]-self.mouse['begin'][1])
+                r = wx.Rect(
+                    self.mouse['begin'][0],
+                    self.mouse['begin'][1],
+                    self.mouse['end'][0] -
+                    self.mouse['begin'][0],
+                    self.mouse['end'][1] -
+                    self.mouse['begin'][1])
                 r = self.modifyRectangle(r)
 
                 if self.mouse['use'] in ('addLine', 'addRectangle'):
@@ -1579,33 +1791,34 @@ class PsMapBufferedWindow(wx.Window):
                             # to avoid strange behavoiur
                             return
 
-                    self.Draw(pen = self.pen['line'], brush = self.brush['line'],
-                              pdc = self.pdcTmp, drawid = self.idZoomBoxTmp,
-                              pdctype = pdcType, bb = r, lineCoords = lineCoords)
+                    self.Draw(pen=self.pen['line'], brush=self.brush['line'],
+                              pdc=self.pdcTmp, drawid=self.idZoomBoxTmp,
+                              pdctype=pdcType, bb=r, lineCoords=lineCoords)
 
                 else:
-                    self.Draw(pen = self.pen['box'], brush = self.brush['box'],
-                              pdc = self.pdcTmp, drawid = self.idZoomBoxTmp,
-                              pdctype = 'rect', bb = r)
+                    self.Draw(pen=self.pen['box'], brush=self.brush['box'],
+                              pdc=self.pdcTmp, drawid=self.idZoomBoxTmp,
+                              pdctype='rect', bb=r)
 
             # panning
             if self.mouse["use"] == 'pan':
                 self.mouse['end'] = event.GetPosition()
-                self.Pan(begin = self.mouse['begin'], end = self.mouse['end'])
+                self.Pan(begin=self.mouse['begin'], end=self.mouse['end'])
                 self.mouse['begin'] = event.GetPosition()
 
             # move object
             if self.mouse['use'] == 'pointer' and self.dragId != -1:
                 self.mouse['end'] = event.GetPosition()
-                dx, dy = self.mouse['end'][0] - self.begin[0], self.mouse['end'][1] - self.begin[1]
+                dx, dy = self.mouse['end'][
+                    0] - self.begin[0], self.mouse['end'][1] - self.begin[1]
                 self.pdcObj.TranslateId(self.dragId, dx, dy)
                 self.pdcTmp.TranslateId(self.idBoxTmp, dx, dy)
                 self.pdcTmp.TranslateId(self.idResizeBoxTmp, dx, dy)
                 for id in self.idLinePointsTmp:
                     self.pdcTmp.TranslateId(id, dx, dy)
-                if self.instruction[self.dragId].type == 'text': 
-                    self.instruction[self.dragId]['coords'] = self.instruction[self.dragId]['coords'][0] + dx,\
-                        self.instruction[self.dragId]['coords'][1] + dy
+                if self.instruction[self.dragId].type == 'text':
+                    self.instruction[self.dragId]['coords'] = self.instruction[self.dragId][
+                        'coords'][0] + dx, self.instruction[self.dragId]['coords'][1] + dy
                 self.begin = event.GetPosition()
                 self.Refresh()
 
@@ -1621,32 +1834,44 @@ class PsMapBufferedWindow(wx.Window):
                     if self.constraint:
                         if width > height:
                             newWidth = width + diffX
-                            newHeight = height + diffX * (float(height) / width)
+                            newHeight = height + diffX * \
+                                (float(height) / width)
                         else:
                             newWidth = width + diffY * (float(width) / height)
                             newHeight = height + diffY
                     else:
                         newWidth = width + diffX
                         newHeight = height + diffY
-                        
+
                     if newWidth < 10 or newHeight < 10:
                         return
 
                     bounds = wx.Rect(x, y, newWidth, newHeight)
-                    self.Draw(pen = self.pen['map'], brush = self.brush['map'], pdc = self.pdcObj, drawid = self.dragId,
-                              pdctype = 'rectText', bb = bounds)
+                    self.Draw(
+                        pen=self.pen['map'],
+                        brush=self.brush['map'],
+                        pdc=self.pdcObj,
+                        drawid=self.dragId,
+                        pdctype='rectText',
+                        bb=bounds)
 
                 elif self.instruction[self.dragId].type == 'rectangle':
                     instr = self.instruction[self.dragId]
-                    rect = self.CanvasPaperCoordinates(rect = instr['rect'], canvasToPaper = False)
+                    rect = self.CanvasPaperCoordinates(
+                        rect=instr['rect'], canvasToPaper=False)
                     rect.SetWidth(rect.GetWidth() + diffX)
                     rect.SetHeight(rect.GetHeight() + diffY)
 
                     if rect.GetWidth() < 5 or rect.GetHeight() < 5:
                         return
 
-                    self.DrawGraphics(drawid = self.dragId, shape = 'rectangle', color = instr['color'],
-                                      fcolor = instr['fcolor'], width = instr['width'], bb = rect)
+                    self.DrawGraphics(
+                        drawid=self.dragId,
+                        shape='rectangle',
+                        color=instr['color'],
+                        fcolor=instr['fcolor'],
+                        width=instr['width'],
+                        bb=rect)
 
                 elif self.instruction[self.dragId].type == 'line':
                     instr = self.instruction[self.dragId]
@@ -1656,15 +1881,22 @@ class PsMapBufferedWindow(wx.Window):
                         pPaper = points[1]
                     else:
                         pPaper = points[0]
-                    pCanvas = self.CanvasPaperCoordinates(rect = Rect2DPS(pPaper, (0, 0)),
-                                                          canvasToPaper = False)[:2]
+                    pCanvas = self.CanvasPaperCoordinates(
+                        rect=Rect2DPS(pPaper, (0, 0)), canvasToPaper=False)[:2]
                     bounds = wx.RectPP(pCanvas, pos)
-                    self.DrawGraphics(drawid = self.dragId, shape = 'line', color = instr['color'],
-                                      width = instr['width'], bb = bounds, lineCoords = (pos, pCanvas))
+                    self.DrawGraphics(
+                        drawid=self.dragId,
+                        shape='line',
+                        color=instr['color'],
+                        width=instr['width'],
+                        bb=bounds,
+                        lineCoords=(
+                            pos,
+                            pCanvas))
 
                     # update paper coordinates
-                    points[self.currentLinePoint] = self.CanvasPaperCoordinates(rect = wx.RectPS(pos, (0, 0)),
-                                                                                canvasToPaper = True)[:2]
+                    points[self.currentLinePoint] = self.CanvasPaperCoordinates(
+                        rect=wx.RectPS(pos, (0, 0)), canvasToPaper=True)[:2]
 
                 self.RedrawSelectBox(self.dragId)
 
@@ -1674,173 +1906,188 @@ class PsMapBufferedWindow(wx.Window):
 
     def Pan(self, begin, end):
         """Move canvas while dragging.
-        
+
         :param begin: x,y coordinates of first point
         :param end: x,y coordinates of second point
         """
         view = begin[0] - end[0], begin[1] - end[1]
         zoomFactor = 1
         self.Zoom(zoomFactor, view)
-                
+
     def RecalculatePosition(self, ids):
         for id in ids:
             itype = self.instruction[id].type
             if itype in ('map', 'rectangle'):
-                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(rect = self.pdcObj.GetIdBounds(id),
-                                                                           canvasToPaper = True)
+                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(
+                    rect=self.pdcObj.GetIdBounds(id), canvasToPaper=True)
                 self.RecalculateEN()
-                
-            elif itype in ('mapinfo' ,'rasterLegend', 'vectorLegend', 'image', 'northArrow'):
-                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(rect = self.pdcObj.GetIdBounds(id),
-                                                                           canvasToPaper = True)
-                self.instruction[id]['where'] = self.CanvasPaperCoordinates(rect = self.pdcObj.GetIdBounds(id),
-                                                                            canvasToPaper = True)[:2] 
+
+            elif itype in ('mapinfo', 'rasterLegend', 'vectorLegend', 'image', 'northArrow'):
+                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(
+                    rect=self.pdcObj.GetIdBounds(id), canvasToPaper=True)
+                self.instruction[id]['where'] = self.CanvasPaperCoordinates(
+                    rect=self.pdcObj.GetIdBounds(id), canvasToPaper=True)[:2]
                 if itype in ('image', 'northArrow'):
                     self.RecalculateEN()
 
             elif itype == 'point':
                 rect = self.pdcObj.GetIdBounds(id)
-                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(rect = rect,
-                                                                           canvasToPaper = True)
-                rect.OffsetXY(rect.GetWidth()/2, rect.GetHeight()/2)
-                self.instruction[id]['where'] = self.CanvasPaperCoordinates(rect = rect,
-                                                                            canvasToPaper = True)[:2]
+                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(
+                    rect=rect, canvasToPaper=True)
+                rect.OffsetXY(rect.GetWidth() / 2, rect.GetHeight() / 2)
+                self.instruction[id]['where'] = self.CanvasPaperCoordinates(
+                    rect=rect, canvasToPaper=True)[: 2]
                 self.RecalculateEN()
 
             elif itype == 'line':
                 rect = self.pdcObj.GetIdBounds(id)
                 oldRect = self.instruction[id]['rect']
-                newRect = self.CanvasPaperCoordinates(rect = rect, canvasToPaper = True)
+                newRect = self.CanvasPaperCoordinates(
+                    rect=rect, canvasToPaper=True)
                 xDiff = newRect[0] - oldRect[0]
                 yDiff = newRect[1] - oldRect[1]
                 self.instruction[id]['rect'] = newRect
 
-                point1 = wx.Point2D(xDiff, yDiff) + self.instruction[id]['where'][0]
-                point2 = wx.Point2D(xDiff, yDiff) + self.instruction[id]['where'][1]
+                point1 = wx.Point2D(
+                    xDiff, yDiff) + self.instruction[id]['where'][0]
+                point2 = wx.Point2D(
+                    xDiff, yDiff) + self.instruction[id]['where'][1]
                 self.instruction[id]['where'] = [point1, point2]
-                
+
                 self.RecalculateEN()
 
-            elif  itype == 'scalebar':
-                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(rect = self.pdcObj.GetIdBounds(id),
-                                                                           canvasToPaper = True)
+            elif itype == 'scalebar':
+                self.instruction[id]['rect'] = self.CanvasPaperCoordinates(
+                    rect=self.pdcObj.GetIdBounds(id), canvasToPaper=True)
+
+                self.instruction[id]['where'] = self.instruction[
+                    id]['rect'].GetCentre()
 
-                
-                self.instruction[id]['where'] = self.instruction[id]['rect'].GetCentre()
-                
-            elif  itype == 'text':
+            elif itype == 'text':
                 x, y = self.instruction[id]['coords'][0] - self.instruction[id]['xoffset'],\
                     self.instruction[id]['coords'][1] + self.instruction[id]['yoffset']
-                extent = self.parent.getTextExtent(textDict = self.instruction[id])
+                extent = self.parent.getTextExtent(
+                    textDict=self.instruction[id])
                 if self.instruction[id]['rotate'] is not None:
-                    rot = float(self.instruction[id]['rotate'])/180*pi 
+                    rot = float(self.instruction[id]['rotate']) / 180 * pi
                 else:
                     rot = 0
 
                 if self.instruction[id]['ref'].split()[0] == 'lower':
                     y += extent[1]
                 elif self.instruction[id]['ref'].split()[0] == 'center':
-                    y += extent[1]/2
+                    y += extent[1] / 2
                 if self.instruction[id]['ref'].split()[1] == 'right':
                     x += extent[0] * cos(rot)
                     y -= extent[0] * sin(rot)
                 elif self.instruction[id]['ref'].split()[1] == 'center':
-                    x += extent[0]/2 * cos(rot)
-                    y -= extent[0]/2 * sin(rot)
-                
-                self.instruction[id]['where'] = self.CanvasPaperCoordinates(rect = Rect2D(x, y, 0, 0),
-                                                                            canvasToPaper = True)[:2]
+                    x += extent[0] / 2 * cos(rot)
+                    y -= extent[0] / 2 * sin(rot)
+
+                self.instruction[id]['where'] = self.CanvasPaperCoordinates(
+                    rect=Rect2D(x, y, 0, 0), canvasToPaper=True)[:2]
                 self.RecalculateEN()
-        
+
     def ComputeZoom(self, rect):
         """Computes zoom factor and scroll view"""
         zoomFactor = 1
         cW, cH = self.GetClientSize()
         cW = float(cW)
-        if rect.IsEmpty(): # clicked on canvas
+        if rect.IsEmpty():  # clicked on canvas
             zoomFactor = 1.5
             if self.mouse['use'] == 'zoomout':
-                zoomFactor = 1./zoomFactor
-            x,y = self.mouse['begin']
-            xView = x - x/zoomFactor#x - cW/(zoomFactor * 2)
-            yView = y - y/zoomFactor#y - cH/(zoomFactor * 2)
+                zoomFactor = 1. / zoomFactor
+            x, y = self.mouse['begin']
+            xView = x - x / zoomFactor  # x - cW/(zoomFactor * 2)
+            yView = y - y / zoomFactor  # y - cH/(zoomFactor * 2)
 
-        else:   #dragging    
+        else:  # dragging
             rW, rH = float(rect.GetWidth()), float(rect.GetHeight())
             try:
-                zoomFactor = 1/max(rW/cW, rH/cH)
+                zoomFactor = 1 / max(rW / cW, rH / cH)
             except ZeroDivisionError:
                 zoomFactor = 1
-            # when zooming to full extent, in some cases, there was zoom 1.01..., which causes problem
+            # when zooming to full extent, in some cases, there was zoom
+            # 1.01..., which causes problem
             if abs(zoomFactor - 1) > 0.01:
-                zoomFactor = zoomFactor 
+                zoomFactor = zoomFactor
             else:
                 zoomFactor = 1.
 
-
             if self.mouse['use'] == 'zoomout':
-                zoomFactor = min(rW/cW, rH/cH)
+                zoomFactor = min(rW / cW, rH / cH)
             try:
-                if rW/rH > cW/cH:
-                    yView = rect.GetY() - (rW*(cH/cW) - rH)/2
+                if rW / rH > cW / cH:
+                    yView = rect.GetY() - (rW * (cH / cW) - rH) / 2
                     xView = rect.GetX()
-                    
+
                     if self.mouse['use'] == 'zoomout':
-                        x,y = rect.GetX() + (rW-(cW/cH)*rH)/2, rect.GetY()
+                        x, y = rect.GetX() + (rW - (cW / cH) * rH) / 2, rect.GetY()
                         xView, yView = -x, -y
                 else:
-                    xView = rect.GetX() - (rH*(cW/cH) - rW)/2
+                    xView = rect.GetX() - (rH * (cW / cH) - rW) / 2
                     yView = rect.GetY()
                     if self.mouse['use'] == 'zoomout':
-                        x,y = rect.GetX(), rect.GetY() + (rH-(cH/cW)*rW)/2
+                        x, y = rect.GetX(), rect.GetY() + (rH - (cH / cW) * rW) / 2
                         xView, yView = -x, -y
             except ZeroDivisionError:
                 xView, yView = rect.GetX(), rect.GetY()
         return zoomFactor, (int(xView), int(yView))
-    
-    
+
     def Zoom(self, zoomFactor, view):
         """Zoom to specified region, scroll view, redraw"""
         if not self.currScale:
             return
-        self.currScale = self.currScale*zoomFactor
-        
+        self.currScale = self.currScale * zoomFactor
+
         if self.currScale > 10 or self.currScale < 0.1:
-            self.currScale = self.currScale/zoomFactor
-            return 
+            self.currScale = self.currScale / zoomFactor
+            return
         if not self.preview:
             # redraw paper
             pRect = self.pdcPaper.GetIdBounds(self.pageId)
             pRect.OffsetXY(-view[0], -view[1])
-            pRect = self.ScaleRect(rect = pRect, scale = zoomFactor)
+            pRect = self.ScaleRect(rect=pRect, scale=zoomFactor)
             self.DrawPaper(pRect)
-            
-            #redraw objects
+
+            # redraw objects
             for id in self.objectId:
                 type = self.instruction[id].type
                 if type == 'labels':  # why it's here? it should not
                     continue
                 oRect = self.CanvasPaperCoordinates(
-                    rect = self.instruction[id]['rect'], canvasToPaper = False)
-                
+                    rect=self.instruction[id]['rect'], canvasToPaper=False)
+
                 if type == 'text':
-                    coords = self.instruction[id]['coords']# recalculate coordinates, they are not equal to BB
-                    self.instruction[id]['coords'] = coords = [(int(coord) - view[i]) * zoomFactor
-                                                               for i, coord in enumerate(coords)]
-                    extent = self.parent.getTextExtent(textDict = self.instruction[id])
+                    # recalculate coordinates, they are not equal to BB
+                    coords = self.instruction[id]['coords']
+                    self.instruction[id]['coords'] = coords = [
+                        (int(coord) - view[i]) * zoomFactor for i, coord in enumerate(coords)]
+                    extent = self.parent.getTextExtent(
+                        textDict=self.instruction[id])
                     if self.instruction[id]['rotate']:
-                        rot = float(self.instruction[id]['rotate']) 
+                        rot = float(self.instruction[id]['rotate'])
                     else:
                         rot = 0
-                    self.instruction[id]['rect'] = bounds = self.parent.getModifiedTextBounds(coords[0], coords[1], extent, rot)
-                    self.DrawRotText(pdc = self.pdcObj, drawId = id, textDict = self.instruction[id],
-                                     coords = coords, bounds = bounds )
+                    self.instruction[id]['rect'] = bounds = self.parent.getModifiedTextBounds(
+                        coords[0], coords[1], extent, rot)
+                    self.DrawRotText(
+                        pdc=self.pdcObj,
+                        drawId=id,
+                        textDict=self.instruction[id],
+                        coords=coords,
+                        bounds=bounds)
 
                     self.pdcObj.SetIdBounds(id, bounds)
 
                 elif type == 'northArrow':
-                    self.Draw(pen = self.pen[type], brush = self.brush[type], pdc = self.pdcObj,
-                              drawid = id, pdctype = 'bitmap', bb = oRect)
+                    self.Draw(
+                        pen=self.pen[type],
+                        brush=self.brush[type],
+                        pdc=self.pdcObj,
+                        drawid=id,
+                        pdctype='bitmap',
+                        bb=oRect)
 
                 elif type in ('point', 'line', 'rectangle'):
                     instr = self.instruction[id]
@@ -1853,47 +2100,59 @@ class PsMapBufferedWindow(wx.Window):
                         width = self.instruction[id]['width']
                     if type in ('line'):
                         point1, point2 = instr['where'][0], instr['where'][1]
-                        point1 = self.CanvasPaperCoordinates(rect = Rect2DPS(point1, (0, 0)),
-                                                             canvasToPaper = False)[:2]
-                        point2 = self.CanvasPaperCoordinates(rect = Rect2DPS(point2, (0, 0)),
-                                                             canvasToPaper = False)[:2]
+                        point1 = self.CanvasPaperCoordinates(
+                            rect=Rect2DPS(point1, (0, 0)), canvasToPaper=False)[:2]
+                        point2 = self.CanvasPaperCoordinates(
+                            rect=Rect2DPS(point2, (0, 0)), canvasToPaper=False)[:2]
                         coords = (point1, point2)
 
-                    self.DrawGraphics(drawid = id, shape = type, bb = oRect, lineCoords = coords,
-                                    color = color, fcolor = fcolor, width = width)
+                    self.DrawGraphics(
+                        drawid=id,
+                        shape=type,
+                        bb=oRect,
+                        lineCoords=coords,
+                        color=color,
+                        fcolor=fcolor,
+                        width=width)
 
                 else:
-                    self.Draw(pen = self.pen[type], brush = self.brush[type], pdc = self.pdcObj,
-                              drawid = id, pdctype = 'rectText', bb = oRect)
-            #redraw tmp objects
+                    self.Draw(
+                        pen=self.pen[type],
+                        brush=self.brush[type],
+                        pdc=self.pdcObj,
+                        drawid=id,
+                        pdctype='rectText',
+                        bb=oRect)
+            # redraw tmp objects
             if self.dragId != -1:
                 self.RedrawSelectBox(self.dragId)
-                
-        #redraw preview
-        else: # preview mode    
+
+        # redraw preview
+        else:  # preview mode
             imageRect = self.pdcImage.GetIdBounds(self.imageId)
             imageRect.OffsetXY(-view[0], -view[1])
-            imageRect = self.ScaleRect(rect = imageRect, scale = zoomFactor)
+            imageRect = self.ScaleRect(rect=imageRect, scale=zoomFactor)
             self.DrawImage(imageRect)
-        
+
     def ZoomAll(self):
         """Zoom to full extent"""
         if not self.preview:
             bounds = self.pdcPaper.GetIdBounds(self.pageId)
         else:
             bounds = self.pdcImage.GetIdBounds(self.imageId)
-        zoomP = bounds.Inflate(bounds.width/20, bounds.height/20)
+        zoomP = bounds.Inflate(bounds.width / 20, bounds.height / 20)
         zoomFactor, view = self.ComputeZoom(zoomP)
         self.Zoom(zoomFactor, view)
-        
-    def Draw(self, pen, brush, pdc, drawid = None, pdctype = 'rect', bb = wx.Rect(0,0,0,0), lineCoords = None): 
+
+    def Draw(self, pen, brush, pdc, drawid=None, pdctype='rect',
+             bb=wx.Rect(0, 0, 0, 0), lineCoords=None):
         """Draw object with given pen and brush.
 
         :param pdc: PseudoDC
         :param pdctype: 'bitmap'/'rectText'/'rect'/'point'/'line'
         :param bb: bounding box
         :param lineCoords: coordinates of line start, end points (wx.Point, wx.Point)
-        """  
+        """
         if drawid is None:
             drawid = wx.NewId()
         bb = bb.Get()
@@ -1902,20 +2161,25 @@ class PsMapBufferedWindow(wx.Window):
         pdc.SetId(drawid)
         pdc.SetPen(pen)
         pdc.SetBrush(brush)
-        
+
         if pdctype == 'bitmap':
             if havePILImage:
                 file = self.instruction[drawid]['epsfile']
                 rotation = self.instruction[drawid]['rotate']
-                self.DrawBitmap(pdc = pdc, filePath = file, rotation = rotation, bbox = bb)
-            else: # draw only rectangle with label
+                self.DrawBitmap(
+                    pdc=pdc,
+                    filePath=file,
+                    rotation=rotation,
+                    bbox=bb)
+            else:  # draw only rectangle with label
                 pdctype = 'rectText'
-                
+
         if pdctype in ('rect', 'rectText'):
             pdc.DrawRectangle(*bb)
-            
+
         if pdctype == 'rectText':
-            dc = wx.ClientDC(self) # dc created because of method GetTextExtent, which pseudoDC lacks
+            # dc created because of method GetTextExtent, which pseudoDC lacks
+            dc = wx.ClientDC(self)
             font = dc.GetFont()
             size = 10
             font.SetPointSize(size)
@@ -1923,8 +2187,8 @@ class PsMapBufferedWindow(wx.Window):
             dc.SetFont(font)
             pdc.SetFont(font)
             text = '\n'.join(self.itemLabels[drawid])
-            w,h,lh = dc.GetMultiLineTextExtent(text)
-            textExtent = (w,h)
+            w, h, lh = dc.GetMultiLineTextExtent(text)
+            textExtent = (w, h)
             textRect = wx.Rect(0, 0, *textExtent).CenterIn(bb)
             r = map(int, bb)
             while not wx.Rect(*r).ContainsRect(textRect) and size >= 8:
@@ -1934,15 +2198,15 @@ class PsMapBufferedWindow(wx.Window):
                 pdc.SetFont(font)
                 textExtent = dc.GetTextExtent(text)
                 textRect = wx.Rect(0, 0, *textExtent).CenterIn(bb)
-            pdc.SetTextForeground(wx.Colour(100,100,100,200)) 
+            pdc.SetTextForeground(wx.Colour(100, 100, 100, 200))
             pdc.SetBackgroundMode(wx.TRANSPARENT)
-            pdc.DrawLabel(text = text, rect = textRect)
+            pdc.DrawLabel(text=text, rect=textRect)
 
         elif pdctype == 'point':
-            pdc.DrawCircle(x = bb[0] + bb[2] / 2,
-                           y = bb[1] + bb[3] / 2,
-                           radius = bb[2] / 2)
-                           
+            pdc.DrawCircle(x=bb[0] + bb[2] / 2,
+                           y=bb[1] + bb[3] / 2,
+                           radius=bb[2] / 2)
+
         elif pdctype == 'line':
             pdc.DrawLinePoint(lineCoords[0], lineCoords[1])
 
@@ -1951,8 +2215,9 @@ class PsMapBufferedWindow(wx.Window):
         self.Refresh()
 
         return drawid
-    
-    def DrawGraphics(self, drawid, shape, color, bb, width = None, fcolor = None, lineCoords = None):
+
+    def DrawGraphics(self, drawid, shape, color, bb,
+                     width=None, fcolor=None, lineCoords=None):
         """Draw point/line/rectangle with given color and width
 
         :param drawid: id of drawn object
@@ -1963,78 +2228,92 @@ class PsMapBufferedWindow(wx.Window):
         :param bb: bounding box
         :param lineCoords: line coordinates (for line only)
         """
-        pdctype = {'point'     : 'point',
-                   'line'      : 'line',
-                   'rectangle' : 'rect'}
+        pdctype = {'point': 'point',
+                   'line': 'line',
+                   'rectangle': 'rect'}
 
         if color == 'none':
             pen = wx.TRANSPARENT_PEN
         else:
             if width is not None:
                 units = UnitConversion(self)
-                width = int(units.convert(value = width, fromUnit = 'point', toUnit = 'pixel') * self.currScale)
+                width = int(
+                    units.convert(
+                        value=width,
+                        fromUnit='point',
+                        toUnit='pixel') *
+                    self.currScale)
             else:
                 width = 2
-            pen = wx.Pen(colour = convertRGB(color), width = width)
-            pen.SetCap(wx.CAP_BUTT) # this is how ps.map draws
+            pen = wx.Pen(colour=convertRGB(color), width=width)
+            pen.SetCap(wx.CAP_BUTT)  # this is how ps.map draws
 
         brush = wx.TRANSPARENT_BRUSH
         if fcolor and fcolor != 'none':
-            brush = wx.Brush(colour = convertRGB(fcolor))
-        
-        self.Draw(pen = pen, brush = brush, pdc = self.pdcObj, pdctype = pdctype[shape],
-                  drawid = drawid, bb = bb, lineCoords = lineCoords)
+            brush = wx.Brush(colour=convertRGB(fcolor))
+
+        self.Draw(
+            pen=pen,
+            brush=brush,
+            pdc=self.pdcObj,
+            pdctype=pdctype[shape],
+            drawid=drawid,
+            bb=bb,
+            lineCoords=lineCoords)
 
     def DrawBitmap(self, pdc, filePath, rotation, bbox):
         """Draw bitmap using PIL"""
         pImg = PILImage.open(filePath)
         if sys.platform == 'win32' and \
            'eps' in os.path.splitext(filePath)[1].lower():
-               import types
-               pImg.load = types.MethodType(loadPSForWindows, pImg)
-        
+            import types
+            pImg.load = types.MethodType(loadPSForWindows, pImg)
+
         if rotation:
             # get rid of black background
             pImg = pImg.convert("RGBA")
-            rot = pImg.rotate(rotation, expand = 1)
+            rot = pImg.rotate(rotation, expand=1)
             new = PILImage.new('RGBA', rot.size, (255,) * 4)
             pImg = PILImage.composite(rot, new, rot)
-        pImg = pImg.resize((int(bbox[2]), int(bbox[3])), resample = PILImage.BICUBIC)
+        pImg = pImg.resize(
+            (int(
+                bbox[2]), int(
+                bbox[3])), resample=PILImage.BICUBIC)
         img = PilImageToWxImage(pImg)
         bitmap = img.ConvertToBitmap()
         mask = wx.Mask(bitmap, wx.WHITE)
         bitmap.SetMask(mask)
-        pdc.DrawBitmap(bitmap, bbox[0], bbox[1], useMask = True)
-        
+        pdc.DrawBitmap(bitmap, bbox[0], bbox[1], useMask=True)
+
     def DrawRotText(self, pdc, drawId, textDict, coords, bounds):
         if textDict['rotate']:
-            rot = float(textDict['rotate']) 
+            rot = float(textDict['rotate'])
         else:
             rot = 0
 
         if textDict['background'] != 'none':
-            background = textDict['background'] 
+            background = textDict['background']
         else:
             background = None
 
         pdc.RemoveId(drawId)
         pdc.SetId(drawId)
         pdc.BeginDrawing()
-        
+
         # border is not redrawn when zoom changes, why?
-##        if textDict['border'] != 'none' and not rot:
+# if textDict['border'] != 'none' and not rot:
 ##            units = UnitConversion(self)
-##            borderWidth = units.convert(value = textDict['width'],
-##                                        fromUnit = 'point', toUnit = 'pixel' ) * self.currScale
+# borderWidth = units.convert(value = textDict['width'],
+# fromUnit = 'point', toUnit = 'pixel' ) * self.currScale
 ##            pdc.SetPen(wx.Pen(colour = convertRGB(textDict['border']), width = borderWidth))
-##            pdc.DrawRectangle(*bounds)
-            
+# pdc.DrawRectangle(*bounds)
+
         if background:
             pdc.SetTextBackground(convertRGB(background))
             pdc.SetBackgroundMode(wx.SOLID)
         else:
             pdc.SetBackgroundMode(wx.TRANSPARENT)
-        
+
         fn = self.parent.makePSFont(textDict)
 
         pdc.SetFont(fn)
@@ -2043,28 +2322,27 @@ class PsMapBufferedWindow(wx.Window):
             pdc.DrawLabel(text=textDict['text'], rect=bounds)
         else:
             pdc.DrawRotatedText(textDict['text'], coords[0], coords[1], rot)
-        
+
         pdc.SetIdBounds(drawId, wx.Rect(*bounds))
         self.Refresh()
         pdc.EndDrawing()
-        
+
     def DrawImage(self, rect):
         """Draw preview image to pseudoDC"""
         self.pdcImage.ClearId(self.imageId)
         self.pdcImage.SetId(self.imageId)
         img = self.image
-        
 
         if img.GetWidth() != rect.width or img.GetHeight() != rect.height:
             img = img.Scale(rect.width, rect.height)
         bitmap = img.ConvertToBitmap()
-        
+
         self.pdcImage.BeginDrawing()
         self.pdcImage.DrawBitmap(bitmap, rect.x, rect.y)
         self.pdcImage.SetIdBounds(self.imageId, rect)
         self.pdcImage.EndDrawing()
         self.Refresh()
-        
+
     def DrawPaper(self, rect):
         """Draw paper and margins"""
         page = self.instruction[self.pageId]
@@ -2073,110 +2351,128 @@ class PsMapBufferedWindow(wx.Window):
         h = (page['Height'] - page['Top'] - page['Bottom']) / scale
         x = page['Left'] / scale + rect.GetX()
         y = page['Top'] / scale + rect.GetY()
-        
+
         self.pdcPaper.BeginDrawing()
         self.pdcPaper.RemoveId(self.pageId)
         self.pdcPaper.SetId(self.pageId)
         self.pdcPaper.SetPen(self.pen['paper'])
         self.pdcPaper.SetBrush(self.brush['paper'])
         self.pdcPaper.DrawRectangleRect(rect)
-        
+
         self.pdcPaper.SetPen(self.pen['margins'])
         self.pdcPaper.SetBrush(self.brush['margins'])
         self.pdcPaper.DrawRectangle(x, y, w, h)
-        
+
         self.pdcPaper.SetIdBounds(self.pageId, rect)
         self.pdcPaper.EndDrawing()
         self.Refresh()
 
-        
     def ImageRect(self):
         """Returns image centered in canvas, computes scale"""
         img = wx.Image(self.imgName, wx.BITMAP_TYPE_PNG)
         cW, cH = self.GetClientSize()
         iW, iH = img.GetWidth(), img.GetHeight()
 
-        self.currScale = min(float(cW)/iW, float(cH)/iH)
+        self.currScale = min(float(cW) / iW, float(cH) / iH)
         iW = iW * self.currScale
         iH = iH * self.currScale
-        x = cW/2 - iW/2
-        y = cH/2 - iH/2
+        x = cW / 2 - iW / 2
+        y = cH / 2 - iH / 2
         imageRect = wx.Rect(x, y, iW, iH)
 
-        return imageRect 
-    
+        return imageRect
+
     def RedrawSelectBox(self, id):
         """Redraws select box when selected object changes its size"""
         if self.dragId == id:
             rect = self.pdcObj.GetIdBounds(id)
             if self.instruction[id].type != 'line':
-                rect = rect.Inflate(3,3)
+                rect = rect.Inflate(3, 3)
             # draw select box around object
-            self.Draw(pen = self.pen['select'], brush = self.brush['select'], pdc = self.pdcTmp,
-                      drawid = self.idBoxTmp, pdctype = 'rect', bb = rect)
-            
+            self.Draw(
+                pen=self.pen['select'],
+                brush=self.brush['select'],
+                pdc=self.pdcTmp,
+                drawid=self.idBoxTmp,
+                pdctype='rect',
+                bb=rect)
+
             # draw small marks signalizing resizing
             if self.instruction[id].type in ('map', 'rectangle'):
                 controlP = self.pdcObj.GetIdBounds(id).GetBottomRight()
-                rect  = wx.RectPS(controlP, self.resizeBoxSize)
-                self.Draw(pen = self.pen['resize'], brush = self.brush['resize'], pdc = self.pdcTmp,
-                          drawid = self.idResizeBoxTmp, pdctype = 'rect', bb = rect)
+                rect = wx.RectPS(controlP, self.resizeBoxSize)
+                self.Draw(
+                    pen=self.pen['resize'],
+                    brush=self.brush['resize'],
+                    pdc=self.pdcTmp,
+                    drawid=self.idResizeBoxTmp,
+                    pdctype='rect',
+                    bb=rect)
 
             elif self.instruction[id].type == 'line':
                 p1Paper = self.instruction[id]['where'][0]
                 p2Paper = self.instruction[id]['where'][1]
-                p1Canvas = self.CanvasPaperCoordinates(rect = Rect2DPS(p1Paper, (0, 0)), canvasToPaper = False)[:2]
-                p2Canvas = self.CanvasPaperCoordinates(rect = Rect2DPS(p2Paper, (0, 0)), canvasToPaper = False)[:2]
+                p1Canvas = self.CanvasPaperCoordinates(
+                    rect=Rect2DPS(p1Paper, (0, 0)), canvasToPaper=False)[:2]
+                p2Canvas = self.CanvasPaperCoordinates(
+                    rect=Rect2DPS(p2Paper, (0, 0)), canvasToPaper=False)[:2]
                 rect = []
                 box = wx.RectS(self.resizeBoxSize)
                 rect.append(box.CenterIn(wx.RectPS(p1Canvas, wx.Size())))
                 rect.append(box.CenterIn(wx.RectPS(p2Canvas, wx.Size())))
                 for i, point in enumerate((p1Canvas, p2Canvas)):
-                    self.Draw(pen = self.pen['resize'], brush = self.brush['resize'], pdc = self.pdcTmp,
-                              drawid = self.idLinePointsTmp[i], pdctype = 'rect', bb = rect[i])
-        
+                    self.Draw(
+                        pen=self.pen['resize'],
+                        brush=self.brush['resize'],
+                        pdc=self.pdcTmp,
+                        drawid=self.idLinePointsTmp[i],
+                        pdctype='rect',
+                        bb=rect[i])
+
     def UpdateMapLabel(self):
         """Updates map frame label"""
 
         vector = self.instruction.FindInstructionByType('vector')
         if vector:
-            vectorId = vector.id 
+            vectorId = vector.id
         else:
             vectorId = None
 
         raster = self.instruction.FindInstructionByType('raster')
         if raster:
-            rasterId = raster.id 
+            rasterId = raster.id
         else:
             rasterId = None
 
         rasterName = 'None'
         if rasterId:
             rasterName = self.instruction[rasterId]['raster'].split('@')[0]
-            
+
         mapId = self.instruction.FindInstructionByType('map').id
         self.itemLabels[mapId] = []
         self.itemLabels[mapId].append(self.itemLabelsDict['map'])
         self.itemLabels[mapId].append("raster: " + rasterName)
-        if vectorId: 
+        if vectorId:
             for map in self.instruction[vectorId]['list']:
-                self.itemLabels[mapId].append('vector: ' + map[0].split('@')[0])
-                
+                self.itemLabels[mapId].append(
+                    'vector: ' + map[0].split('@')[0])
+
         labels = self.instruction.FindInstructionByType('labels')
         if labels:
             labelFiles = self.instruction[labels.id]['labels']
             if not labelFiles:
                 return
             labelFiles = [lFile.split('@')[0] for lFile in labelFiles]
-            self.itemLabels[mapId].append(_("labels: ") + ', '.join(labelFiles))
-            
+            self.itemLabels[mapId].append(
+                _("labels: ") + ', '.join(labelFiles))
+
     def UpdateLabel(self, itype, id):
         self.itemLabels[id] = []
         self.itemLabels[id].append(self.itemLabelsDict[itype])
         if itype == 'image':
             file = os.path.basename(self.instruction[id]['epsfile'])
             self.itemLabels[id].append(file)
-        
+
     def OnSize(self, event):
         """Init image size to match window size
         """
@@ -2185,12 +2481,12 @@ class PsMapBufferedWindow(wx.Window):
             self.ZoomAll()
         self.OnIdle(None)
         event.Skip()
-        
+
     def OnIdle(self, event):
         """Only re-render a image during idle time instead of
         multiple times during resizing.
         """
-        
+
         width, height = self.GetClientSize()
         # Make new off screen bitmap: this bitmap will always have the
         # current drawing in it, so it can be used to save the image
@@ -2198,9 +2494,8 @@ class PsMapBufferedWindow(wx.Window):
         self._buffer = wx.EmptyBitmap(width, height)
         # re-render image on idle
         self.resize = True
-        
+
     def ScaleRect(self, rect, scale):
         """Scale rectangle"""
-        return wx.Rect(rect.GetLeft()*scale, rect.GetTop()*scale,
-                       rect.GetSize()[0]*scale, rect.GetSize()[1]*scale)   
-
+        return wx.Rect(rect.GetLeft() * scale, rect.GetTop() * scale,
+                       rect.GetSize()[0] * scale, rect.GetSize()[1] * scale)
diff --git a/gui/wxpython/psmap/g.gui.psmap.html b/gui/wxpython/psmap/g.gui.psmap.html
index 6494be3..b9f6c01 100644
--- a/gui/wxpython/psmap/g.gui.psmap.html
+++ b/gui/wxpython/psmap/g.gui.psmap.html
@@ -217,4 +217,4 @@ Anna Kratochvilova, Czech Technical Univesity in Prague, Czech
 Republic (bachelor's final project 2011, mentor: Martin Landa)
 
 <p>
-<i>$Date: 2014-04-20 19:57:39 +0200 (Sun, 20 Apr 2014) $</i>
+<i>$Date: 2014-04-20 15:20:39 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/gui/wxpython/psmap/g.gui.psmap.py b/gui/wxpython/psmap/g.gui.psmap.py
index 27651d7..0b4987b 100755
--- a/gui/wxpython/psmap/g.gui.psmap.py
+++ b/gui/wxpython/psmap/g.gui.psmap.py
@@ -39,6 +39,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.globalvar import CheckWxVersion
     from psmap.frame import PsMapFrame
 
diff --git a/gui/wxpython/psmap/instructions.py b/gui/wxpython/psmap/instructions.py
index 7e75504..5b6eb1e 100644
--- a/gui/wxpython/psmap/instructions.py
+++ b/gui/wxpython/psmap/instructions.py
@@ -39,34 +39,39 @@ from time import strftime, localtime
 
 import wx
 import grass.script as grass
+from grass.script.task import cmdlist_to_tuple
+
+from core.gcmd import RunCommand, GError, GMessage, GWarning
+from core.utils import GetCmdString, _
+from dbmgr.vinfo import VectorDBInfo
+from psmap.utils import *
 
-from core.gcmd          import RunCommand, GError, GMessage, GWarning
-from core.utils         import CmdToTuple, GetCmdString, _
-from dbmgr.vinfo        import VectorDBInfo
-from psmap.utils        import *
 
 class Instruction:
     """Class which represents instruction file"""
+
     def __init__(self, parent, objectsToDraw):
-        
+
         self.parent = parent
         self.objectsToDraw = objectsToDraw
-        #here are kept objects like mapinfo, rasterlegend, etc.
+        # here are kept objects like mapinfo, rasterlegend, etc.
         self.instruction = list()
-        
+
     def __str__(self):
         """Returns text for instruction file"""
-        comment = "# timestamp: " + strftime("%Y-%m-%d %H:%M", localtime()) + '\n'
+        comment = "# timestamp: " + strftime("%Y-%m-%d %H:%M",
+                                             localtime()) + '\n'
         env = grass.gisenv()
         comment += "# location: %s\n" % env['LOCATION_NAME']
         comment += "# mapset: %s\n" % env['MAPSET']
-        comment += "# page orientation: %s\n" % self.FindInstructionByType('page')['Orientation']
+        comment += "# page orientation: %s\n" % self.FindInstructionByType('page')[
+            'Orientation']
         border = ''
         if not self.FindInstructionByType('map'):
             border = 'border n\n'
         text = [str(each) for each in self.instruction]
         return comment + border + '\n'.join(text) + '\nend'
-    
+
     def __getitem__(self, id):
         for each in self.instruction:
             if each.id == id:
@@ -79,25 +84,26 @@ class Instruction:
             if each.id == id:
                 return True
         return False
-    
+
     def __delitem__(self, id):
         """Delete instruction"""
         for each in self.instruction:
             if each.id == id:
                 if each.type == 'map':
-                    #must remove raster, vector layers too
-                    vektor = self.FindInstructionByType('vector', list = True)
-                    vProperties = self.FindInstructionByType('vProperties', list = True)
-                    raster = self.FindInstructionByType('raster', list = True)
+                    # must remove raster, vector layers too
+                    vektor = self.FindInstructionByType('vector', list=True)
+                    vProperties = self.FindInstructionByType(
+                        'vProperties', list=True)
+                    raster = self.FindInstructionByType('raster', list=True)
                     for item in vektor + vProperties + raster:
                         if item in self.instruction:
                             self.instruction.remove(item)
-                            
+
                 self.instruction.remove(each)
                 if id in self.objectsToDraw:
                     self.objectsToDraw.remove(id)
                 return
-            
+
     def AddInstruction(self, instruction):
         """Add instruction"""
         # add to instructions
@@ -106,14 +112,14 @@ class Instruction:
         else:
             self.instruction.append(instruction)
         # add to drawable objects
-        if instruction.type not in ('page', 'raster', 'vector', 'vProperties', 'initMap'):
+        if instruction.type not in (
+                'page', 'raster', 'vector', 'vProperties', 'initMap'):
             if instruction.type == 'map':
-                self.objectsToDraw.insert(0, instruction.id) 
+                self.objectsToDraw.insert(0, instruction.id)
             else:
-                self.objectsToDraw.append(instruction.id) 
-                
-            
-    def FindInstructionByType(self, type, list = False):
+                self.objectsToDraw.append(instruction.id)
+
+    def FindInstructionByType(self, type, list=False):
         """Find instruction(s) with the given type"""
         inst = []
         for each in self.instruction:
@@ -122,7 +128,7 @@ class Instruction:
         if len(inst) == 1 and not list:
             return inst[0]
         return inst
-    
+
     def Read(self, filename):
         """Reads instruction file and creates instruction objects"""
         self.filename = filename
@@ -130,38 +136,47 @@ class Instruction:
         try:
             file = open(filename, 'r')
         except IOError:
-            GError(message = _("Unable to open file\n%s") % filename)
+            GError(message=_("Unable to open file\n%s") % filename)
             return
         # first read file to get information about region and scaletype
         isRegionComment = False
         orientation = 'Portrait'
         for line in file:
             if '# g.region' in line:
-                self.SetRegion(regionInstruction = line)
+                self.SetRegion(regionInstruction=line)
                 isRegionComment = True
                 break
             if '# page orientation' in line:
                 orientation = line.split(':')[-1].strip()
-                
+
         if not isRegionComment:
-            self.SetRegion(regionInstruction = None)
+            self.SetRegion(regionInstruction=None)
         # then run ps.map -b to get information for maploc
-        # compute scale and center 
+        # compute scale and center
         map = self.FindInstructionByType('map')
         region = grass.region()
-        map['center'] = (region['n'] + region['s']) / 2, (region['w'] + region['e']) / 2
-        mapRect = GetMapBounds(self.filename, portrait = (orientation == 'Portrait'))
+        map['center'] = (region['n'] + region['s']
+                         ) / 2, (region['w'] + region['e']) / 2
+        mapRect = GetMapBounds(
+            self.filename, portrait=(
+                orientation == 'Portrait'))
         map['rect'] = mapRect
         proj = projInfo()
         toM = 1.0
         if proj['units']:
             toM = float(proj['meters'])
         units = UnitConversion(self.parent)
-        w = units.convert(value = mapRect.Get()[2], fromUnit = 'inch', toUnit = 'meter') / toM
+        w = units.convert(
+            value=mapRect.Get()[2],
+            fromUnit='inch',
+            toUnit='meter') / toM
         map['scale'] = w / abs((region['w'] - region['e']))
-        
-        SetResolution(dpi = 300, width = map['rect'].width, height = map['rect'].height)
-        
+
+        SetResolution(
+            dpi=300,
+            width=map['rect'].width,
+            height=map['rect'].height)
+
         # read file again, now with information about map bounds
         isBuffer = False
         buffer = []
@@ -169,7 +184,7 @@ class Instruction:
         vectorMapNumber = 1
         file.seek(0)
         for line in file:
-            if not line.strip(): 
+            if not line.strip():
                 continue
             line = line.strip()
             if isBuffer:
@@ -187,40 +202,46 @@ class Instruction:
                         vectorMapNumber += 1
                     elif instruction == 'paper':
                         kwargs['Orientation'] = orientation
-                        
+
                     ok = self.SendToRead(instruction, buffer, **kwargs)
-                    if not ok: return False
+                    if not ok:
+                        return False
                     buffer = []
-                continue 
-            
+                continue
+
             elif line.startswith('paper'):
                 instruction = 'paper'
                 isBuffer = True
                 buffer.append(line)
-            
+
             elif line.startswith('border'):
                 if line.split()[1].lower() in ('n', 'no', 'none'):
                     ok = self.SendToRead('border', [line])
-                    if not ok: return False
+                    if not ok:
+                        return False
                 elif line.split()[1].lower() in ('y', 'yes'):
                     instruction = 'border'
                     isBuffer = True
                     buffer.append(line)
-            
+
             elif line.startswith('scale '):
                 if isBuffer:
                     continue
-                ok = self.SendToRead('scale', line, isRegionComment = isRegionComment)
-                if not ok: return False
-            
+                ok = self.SendToRead(
+                    'scale', line, isRegionComment=isRegionComment)
+                if not ok:
+                    return False
+
             elif line.startswith('maploc'):
-                ok = self.SendToRead(instruction = 'maploc', text = line)
-                if not ok: return False
-                
+                ok = self.SendToRead(instruction='maploc', text=line)
+                if not ok:
+                    return False
+
             elif line.startswith('raster'):
-                ok = self.SendToRead(instruction = 'raster', text = line)
-                if not ok: return False
-            
+                ok = self.SendToRead(instruction='raster', text=line)
+                if not ok:
+                    return False
+
             elif line.startswith('mapinfo'):
                 instruction = 'mapinfo'
                 isBuffer = True
@@ -229,13 +250,13 @@ class Instruction:
             elif line.startswith('scalebar'):
                 instruction = 'scalebar'
                 isBuffer = True
-                buffer.append(line) 
-            
+                buffer.append(line)
+
             elif line.startswith('text'):
                 instruction = 'text'
                 isBuffer = True
                 buffer.append(line)
-                
+
             elif line.startswith('eps'):
                 instruction = 'eps'
                 isBuffer = True
@@ -254,30 +275,31 @@ class Instruction:
             elif line.startswith('rectangle'):
                 instruction = 'rectangle'
                 isBuffer = True
-                buffer.append(line) 
-            
+                buffer.append(line)
+
             elif line.startswith('colortable'):
-                if len(line.split()) == 2 and line.split()[1].lower() in ('n', 'no', 'none'):
+                if len(line.split()) == 2 and line.split()[
+                        1].lower() in ('n', 'no', 'none'):
                     break
                 instruction = 'colortable'
                 isBuffer = True
-                buffer.append(line) 
-        
+                buffer.append(line)
+
             elif line.startswith('vlegend'):
                 instruction = 'vlegend'
                 isBuffer = True
-                buffer.append(line) 
-                
+                buffer.append(line)
+
             elif line.startswith('vpoints'):
                 instruction = 'vpoints'
                 isBuffer = True
-                buffer.append(line) 
-                
+                buffer.append(line)
+
             elif line.startswith('vlines'):
                 instruction = 'vlines'
                 isBuffer = True
                 buffer.append(line)
-                
+
             elif line.startswith('vareas'):
                 instruction = 'vareas'
                 isBuffer = True
@@ -287,16 +309,13 @@ class Instruction:
                 instruction = 'labels'
                 isBuffer = True
                 buffer.append(line)
-            
-
 
-        
         rasterLegend = self.FindInstructionByType('rasterLegend')
         raster = self.FindInstructionByType('raster')
         page = self.FindInstructionByType('page')
         vector = self.FindInstructionByType('vector')
         vectorLegend = self.FindInstructionByType('vectorLegend')
-        vectorMaps = self.FindInstructionByType('vProperties', list = True)
+        vectorMaps = self.FindInstructionByType('vProperties', list=True)
 
         # check (in case of scaletype 0) if map is drawn also
         map['drawMap'] = False
@@ -315,41 +334,52 @@ class Instruction:
             if rasterLegend['rasterDefault'] and raster:
                 rasterLegend['raster'] = raster['raster']
                 if not rasterLegend['discrete']:
-                    rasterType = getRasterType(map = rasterLegend['raster'])
+                    rasterType = getRasterType(map=rasterLegend['raster'])
                     if rasterType == 'CELL':
                         rasterLegend['discrete'] = 'y'
                     else:
                         rasterLegend['discrete'] = 'n'
-            
-            #estimate size
-            height = rasterLegend.EstimateHeight(raster = rasterLegend['raster'], discrete = rasterLegend['discrete'], 
-                                                 fontsize = rasterLegend['fontsize'],
-                                                 cols = rasterLegend['cols'], 
-                                                 height = rasterLegend['height'])
-            width = rasterLegend.EstimateWidth(raster = rasterLegend['raster'], discrete = rasterLegend['discrete'], 
-                                               fontsize = rasterLegend['fontsize'],
-                                               cols = rasterLegend['cols'] , 
-                                               width = rasterLegend['width'],
-                                               paperInstr = page)
-            rasterLegend['rect'] = Rect2D(x = float(rasterLegend['where'][0]), y = float(rasterLegend['where'][1]),
-                                          width = width, height = height)
-            
-        # vectors, vlegend        
-        
+
+            # estimate size
+            height = rasterLegend.EstimateHeight(
+                raster=rasterLegend['raster'],
+                discrete=rasterLegend['discrete'],
+                fontsize=rasterLegend['fontsize'],
+                cols=rasterLegend['cols'],
+                height=rasterLegend['height'])
+            width = rasterLegend.EstimateWidth(
+                raster=rasterLegend['raster'],
+                discrete=rasterLegend['discrete'],
+                fontsize=rasterLegend['fontsize'],
+                cols=rasterLegend['cols'],
+                width=rasterLegend['width'],
+                paperInstr=page)
+            rasterLegend['rect'] = Rect2D(
+                x=float(rasterLegend['where'][0]),
+                y=float(rasterLegend['where'][1]),
+                width=width, height=height)
+
+        # vectors, vlegend
+
         if vector:
             for vmap in vectorMaps:
                 for i, each in enumerate(vector['list']):
                     if each[2] == vmap.id:
-                        
+
                         vector['list'][i][4] = vmap['label']
                         vector['list'][i][3] = vmap['lpos']
             if vectorLegend:
-                size = vectorLegend.EstimateSize(vectorInstr = vector, fontsize = vectorLegend['fontsize'],
-                                                 width = vectorLegend['width'], cols = vectorLegend['cols'])                            
-                vectorLegend['rect'] = Rect2D(x = float(vectorLegend['where'][0]), y = float(vectorLegend['where'][1]),
-                                              width = size[0], height = size[1])
-        
-        
+                size = vectorLegend.EstimateSize(
+                    vectorInstr=vector,
+                    fontsize=vectorLegend['fontsize'],
+                    width=vectorLegend['width'],
+                    cols=vectorLegend['cols'])
+                vectorLegend['rect'] = Rect2D(
+                    x=float(vectorLegend['where'][0]),
+                    y=float(vectorLegend['where'][1]),
+                    width=size[0],
+                    height=size[1])
+
         page = self.FindInstructionByType('page')
         if not page:
             page = PageSetup(wx.NewId())
@@ -357,59 +387,59 @@ class Instruction:
         else:
             page['Orientation'] = orientation
 
-
         #
         return True
-    
+
     def SendToRead(self, instruction, text, **kwargs):
-        psmapInstrDict = dict(paper = ['page'],
-                              maploc = ['map'],
-                              scale = ['map'],
-                              border = ['map'],
-                              raster = ['raster'],
-                              mapinfo = ['mapinfo'],
-                              scalebar = ['scalebar'],
-                              text = ['text'],
-                              eps = ['image', 'northArrow'],
-                              point = ['point'],
-                              line = ['line'],
-                              rectangle = ['rectangle'],
-                              vpoints = ['vector', 'vProperties'],
-                              vlines = ['vector', 'vProperties'],
-                              vareas = ['vector', 'vProperties'],
-                              colortable = ['rasterLegend'],
-                              vlegend = ['vectorLegend'],
-                              labels = ['labels']
+        psmapInstrDict = dict(paper=['page'],
+                              maploc=['map'],
+                              scale=['map'],
+                              border=['map'],
+                              raster=['raster'],
+                              mapinfo=['mapinfo'],
+                              scalebar=['scalebar'],
+                              text=['text'],
+                              eps=['image', 'northArrow'],
+                              point=['point'],
+                              line=['line'],
+                              rectangle=['rectangle'],
+                              vpoints=['vector', 'vProperties'],
+                              vlines=['vector', 'vProperties'],
+                              vareas=['vector', 'vProperties'],
+                              colortable=['rasterLegend'],
+                              vlegend=['vectorLegend'],
+                              labels=['labels']
                               )
-        
-        myInstrDict = dict(page = PageSetup,
-                           map = MapFrame,
-                           raster = Raster,
-                           mapinfo = Mapinfo,
-                           scalebar = Scalebar,
-                           text = Text,
-                           image = Image,
-                           northArrow = NorthArrow,
-                           point = Point,
-                           line = Line,
-                           rectangle = Rectangle,
-                           rasterLegend = RasterLegend,
-                           vectorLegend = VectorLegend,
-                           vector = Vector,
-                           vProperties = VProperties,
-                           labels = Labels
+
+        myInstrDict = dict(page=PageSetup,
+                           map=MapFrame,
+                           raster=Raster,
+                           mapinfo=Mapinfo,
+                           scalebar=Scalebar,
+                           text=Text,
+                           image=Image,
+                           northArrow=NorthArrow,
+                           point=Point,
+                           line=Line,
+                           rectangle=Rectangle,
+                           rasterLegend=RasterLegend,
+                           vectorLegend=VectorLegend,
+                           vector=Vector,
+                           vProperties=VProperties,
+                           labels=Labels
                            )
-        
+
         myInstruction = psmapInstrDict[instruction]
-        
+
         for i in myInstruction:
             instr = self.FindInstructionByType(i)
-            if i in ('text', 'vProperties', 'image', 'northArrow', 'point', 'line', 'rectangle') or not instr:
-                
-                id = wx.NewId() #!vProperties expect subtype
+            if i in ('text', 'vProperties', 'image', 'northArrow',
+                     'point', 'line', 'rectangle') or not instr:
+
+                id = wx.NewId()  # !vProperties expect subtype
                 if i == 'vProperties':
                     id = kwargs['id']
-                    newInstr = myInstrDict[i](id, subType = instruction[1:])
+                    newInstr = myInstrDict[i](id, subType=instruction[1:])
                 elif i in ('image', 'northArrow'):
                     commentFound = False
                     for line in text:
@@ -418,7 +448,7 @@ class Instruction:
                     if i == 'image' and commentFound or \
                        i == 'northArrow' and not commentFound:
                         continue
-                    newInstr = myInstrDict[i](id, settings = self)
+                    newInstr = myInstrDict[i](id, settings=self)
                 else:
                     newInstr = myInstrDict[i](id)
                 ok = newInstr.Read(instruction, text, **kwargs)
@@ -433,83 +463,86 @@ class Instruction:
                 if not ok:
                     return False
         return True
-    
+
     def SetRegion(self, regionInstruction):
         """Sets region from file comment or sets current region in case of no comment"""
         map = MapFrame(wx.NewId())
         self.AddInstruction(map)
         if regionInstruction:
-            cmd = CmdToTuple(regionInstruction.strip('# ').split())
-            
+            cmd = cmdlist_to_tuple(regionInstruction.strip('# ').split())
+
             # define scaleType
             if len(cmd[1]) <= 3:
                 if 'raster' in cmd[1]:
                     map['scaleType'] = 0
-                    map['mapType'] = 'raster'   
-                    map['map'] = cmd[1]['raster']  
+                    map['mapType'] = 'raster'
+                    map['map'] = cmd[1]['raster']
                 elif 'vector' in cmd[1]:
                     map['scaleType'] = 0
-                    map['mapType'] = 'vector' 
-                    map['map'] = cmd[1]['vector']  
+                    map['mapType'] = 'vector'
+                    map['map'] = cmd[1]['vector']
                 elif 'region' in cmd[1]:
-                    map['scaleType'] = 1  
+                    map['scaleType'] = 1
                     map['region'] = cmd[1]['region']
-                    
+
             else:
-                map['scaleType'] = 2  
+                map['scaleType'] = 2
         else:
             map['scaleType'] = 2
             grass.del_temp_region()
             region = grass.region()
-            grass.use_temp_region()    
+            grass.use_temp_region()
             cmd = ['g.region', region]
         cmdString = GetCmdString(cmd).replace('g.region', '')
-        GMessage(_("Instruction file will be loaded with following region: %s\n") % cmdString)
+        GMessage(
+            _("Instruction file will be loaded with following region: %s\n") %
+            cmdString)
         try:
             RunCommand(cmd[0], **cmd[1])
-            
+
         except grass.ScriptError as e:
             GError(_("Region cannot be set\n%s") % e)
             return False
-        
+
 
 class InstructionObject:
     """Abtract class representing single instruction"""
-    def __init__(self, id): 
+
+    def __init__(self, id):
         self.id = id
-        
+
         # default values
         self.defaultInstruction = dict()
         # current values
-        self.instruction = self.defaultInstruction   
+        self.instruction = self.defaultInstruction
         # converting units
-        self.unitConv = UnitConversion() 
-    
+        self.unitConv = UnitConversion()
+
     def __str__(self):
         """Returns particular part of text instruction"""
         return ''
-    
+
     def __getitem__(self, key):
         for each in self.instruction.keys():
             if each == key:
                 return self.instruction[key]
         return None
-    
+
     def __setitem__(self, key, value):
         self.instruction[key] = value
-    
+
     def GetInstruction(self):
         """Get current values"""
         return self.instruction
-    
+
     def SetInstruction(self, instruction):
         """Set default values"""
         self.instruction = instruction
-        
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save them"""
         pass
-        
+
     def PercentToReal(self, e, n):
         """Converts text coordinates from percent of region to map coordinates"""
         e, n = float(e.strip('%')), float(n.strip('%'))
@@ -518,60 +551,78 @@ class InstructionObject:
         E = region['w'] + (region['e'] - region['w']) / 100 * e
         return E, N
 
+
 class InitMap(InstructionObject):
     """Class representing virtual map"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'initMap'
-        
+
         # default values
-        self.defaultInstruction = dict(rect = None, scale =  None)
+        self.defaultInstruction = dict(rect=None, scale=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
-    
+
+
 class MapFrame(InstructionObject):
     """Class representing map (instructions maploc, scale, border)"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'map'
         # default values
-        self.defaultInstruction = dict(map = None, mapType = None, drawMap = True, region = None,
-                                       rect = Rect2D(), scaleType = 0, scale = None, center = None,
-                                       resolution = 300, border = 'y', width = 1, color = '0:0:0') 
+        self.defaultInstruction = dict(
+            map=None,
+            mapType=None,
+            drawMap=True,
+            region=None,
+            rect=Rect2D(),
+            scaleType=0,
+            scale=None,
+            center=None,
+            resolution=300,
+            border='y',
+            width=1,
+            color='0:0:0')
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         instr = ''
         comment = ''
-        
-        #region settings
+
+        # region settings
         region = grass.region()
-        if self.instruction['scaleType'] == 0: #match map
+        if self.instruction['scaleType'] == 0:  # match map
             map = self.instruction['map']
             if self.instruction['mapType'] == 'raster':
-                comment = "# g.region raster=%s nsres=%s ewres=%s\n" % (map, region['nsres'], region['ewres'])
+                comment = "# g.region raster=%s nsres=%s ewres=%s\n" % (
+                    map, region['nsres'], region['ewres'])
             else:
                 comment = "# g.region vector=%s\n" % (map)
-        elif self.instruction['scaleType'] == 1:# saved region
+        elif self.instruction['scaleType'] == 1:  # saved region
             region = self.instruction['region']
             comment = "# g.region region=%s\n" % region
-        elif self.instruction['scaleType'] in (2, 3): #current region, fixed scale
-            comment = string.Template("# g.region n=$n s=$s e=$e w=$w rows=$rows cols=$cols \n").substitute(**region)
-        
+        # current region, fixed scale
+        elif self.instruction['scaleType'] in (2, 3):
+            comment = string.Template(
+                "# g.region n=$n s=$s e=$e w=$w rows=$rows cols=$cols \n").substitute(**region)
+
         instr += comment
         instr += '\n'
         # maploc
-        maplocInstruction = "maploc %.3f %.3f" % (self.instruction['rect'].x, self.instruction['rect'].y)
+        maplocInstruction = "maploc %.3f %.3f" % (
+            self.instruction['rect'].x, self.instruction['rect'].y)
         if self.instruction['scaleType'] != 3:
-            maplocInstruction += "  %.3f %.3f"% (self.instruction['rect'].width, self.instruction['rect'].height)
+            maplocInstruction += "  %.3f %.3f" % (
+                self.instruction['rect'].width, self.instruction['rect'].height)
         instr += maplocInstruction
         instr += '\n'
-        
+
         # scale
-        if self.instruction['scaleType'] == 3: #fixed scale
-            scaleInstruction = "scale 1:%.0f" % (1/self.instruction['scale'])
+        if self.instruction['scaleType'] == 3:  # fixed scale
+            scaleInstruction = "scale 1:%.0f" % (1 / self.instruction['scale'])
             instr += scaleInstruction
             instr += '\n'
         # border
@@ -580,19 +631,21 @@ class MapFrame(InstructionObject):
             borderInstruction = "border n"
         else:
             borderInstruction = "border y\n"
-            borderInstruction += string.Template("    width $width\n    color $color\n").substitute(self.instruction)
+            borderInstruction += string.Template(
+                "    width $width\n    color $color\n").substitute(
+                self.instruction)
             borderInstruction += "    end"
         instr += borderInstruction
         instr += '\n'
 
-        return instr  
-    
+        return instr
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         if 'isRegionComment' in kwargs:
             isRegionComment = kwargs['isRegionComment']
         instr = {}
-        
+
         if instruction == 'border':
             for line in text:
                 if line.startswith('end'):
@@ -610,86 +663,114 @@ class MapFrame(InstructionObject):
                 except IndexError:
                     GError(_("Failed to read instruction %s") % instruction)
                     return False
-                
+
         elif instruction == 'scale':
             try:
                 scaleText = text.strip('scale ').split(':')[1]
-                # when scale instruction given and region comment also, then scaletype is fixed scale
+                # when scale instruction given and region comment also, then
+                # scaletype is fixed scale
                 if not isRegionComment:
-                    instr['scaleType'] = 2 
+                    instr['scaleType'] = 2
                 else:
                     instr['scaleType'] = 3
 
-                scale = 1/float(scaleText)
+                scale = 1 / float(scaleText)
                 if abs(scale - self.instruction['scale']) > (0.01 * scale):
-                    GWarning(_("Scale has changed, old value: %(old)s\nnew value: %(new)s") % \
-                                 { 'old' : scale, 'new' : self.instruction['scale'] })
+                    GWarning(_("Scale has changed, old value: %(old)s\nnew value: %(new)s") %
+                             {'old': scale, 'new': self.instruction['scale']})
             except (ValueError, IndexError):
-                GError(_("Failed to read instruction %s.\nUse 1:25000 notation.") % instruction)
+                GError(
+                    _("Failed to read instruction %s.\nUse 1:25000 notation.") %
+                    instruction)
                 return False
-        
+
         elif instruction == 'maploc':
             maploc = text.strip('maploc ').split()
             if len(maploc) >= 2:
                 if  abs(self.instruction['rect'].Get()[0] - float(maploc[0])) > 0.5 or \
                         abs(self.instruction['rect'].Get()[1] - float(maploc[1])) > 0.5:
-                    GWarning(_("Map frame position changed, old value: %(old1)s %(old2)s\nnew value: %(new1)s %(new2)s") % \
-                                 { 'old1' : maploc[0], 'old2' : maploc[1],
-                                   'new1' : self.instruction['rect'].Get()[0], 'new2' : self.instruction['rect'].Get()[1] })
-                    
+                    GWarning(
+                        _("Map frame position changed, old value: %(old1)s %(old2)s\nnew value: %(new1)s %(new2)s") % {
+                            'old1': maploc[0],
+                            'old2': maploc[1],
+                            'new1': self.instruction['rect'].Get()[0],
+                            'new2': self.instruction['rect'].Get()[1]})
+
                 #instr['rect'] = wx.Rect2D(float(maploc[0]), float(maploc[1]), self.instruction['rect'][2], self.instruction['rect'][3])
             if len(maploc) == 4:
                 if  abs(self.instruction['rect'].Get()[2] - float(maploc[2])) > 0.5 or \
                         abs(self.instruction['rect'].Get()[3] - float(maploc[3])) > 0.5:
-                    GWarning(_("Map frame size changed, old value: %(old1)s %(old2)s\nnew value: %(new1)s %(new2)s") % \
-                                 { 'old1' : maploc[2], 'old2' : maploc[3],
-                                   'new1' : self.instruction['rect'].Get()[2], 'new2' : self.instruction['rect'].Get()[3] })
+                    GWarning(
+                        _("Map frame size changed, old value: %(old1)s %(old2)s\nnew value: %(new1)s %(new2)s") % {
+                            'old1': maploc[2],
+                            'old2': maploc[3],
+                            'new1': self.instruction['rect'].Get()[2],
+                            'new2': self.instruction['rect'].Get()[3]})
                 #instr['rect'] = wx.Rect2D(*map(float, maploc))
-        self.instruction.update(instr)   
-        return True 
-    
+        self.instruction.update(instr)
+        return True
+
+
 class PageSetup(InstructionObject):
     """Class representing page instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'page'
         # default values
-        self.defaultInstruction = dict(Units = 'inch', Format = 'a4', Orientation = 'Portrait',
-                                       Width = 8.268, Height = 11.693, Left = 0.5, Right = 0.5, Top = 1, Bottom = 1)
+        self.defaultInstruction = dict(
+            Units='inch',
+            Format='a4',
+            Orientation='Portrait',
+            Width=8.268,
+            Height=11.693,
+            Left=0.5,
+            Right=0.5,
+            Top=1,
+            Bottom=1)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         if self.instruction['Format'] == 'custom':
-            instr = string.Template("paper\n    width $Width\n    height $Height\n").substitute(self.instruction)
+            instr = string.Template(
+                "paper\n    width $Width\n    height $Height\n").substitute(
+                self.instruction)
         else:
-            instr = string.Template("paper $Format\n").substitute(self.instruction)
-        instr += string.Template("    left $Left\n    right $Right\n    bottom $Bottom\n    top $Top\n    end").substitute(self.instruction)
+            instr = string.Template(
+                "paper $Format\n").substitute(self.instruction)
+        instr += string.Template(
+            "    left $Left\n    right $Right\n    bottom $Bottom\n    top $Top\n    end").substitute(self.instruction)
 
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         instr = {}
         self.cats = ['Width', 'Height', 'Left', 'Right', 'Top', 'Bottom']
-        self.subInstr = dict(zip(['width', 'height', 'left', 'right', 'top', 'bottom'], self.cats))
-        
-        if instruction == 'paper': # just for sure
+        self.subInstr = dict(
+            zip(['width', 'height', 'left', 'right', 'top', 'bottom'], self.cats))
+
+        if instruction == 'paper':  # just for sure
             for line in text:
-                if line.startswith('paper'): 
+                if line.startswith('paper'):
                     if len(line.split()) > 1:
                         pformat = line.split()[1]
-                        availableFormats = self._toDict(grass.read_command('ps.map', flags = 'p',
-                                                                           quiet = True))
-                        # e.g. paper a3 
+                        availableFormats = self._toDict(
+                            grass.read_command(
+                                'ps.map', flags='p', quiet=True))
+                        # e.g. paper a3
                         try:
                             instr['Format'] = pformat
-                            for key, value in availableFormats[pformat].iteritems():
+                            for key, value in availableFormats[
+                                    pformat].iteritems():
                                 instr[key] = float(value)
                             break
                         except KeyError:
-                            GError(_("Failed to read instruction %(file)s.\nUnknown format %(for)s") % \
-                                       { 'file' : instruction, 'for' : format })
+                            GError(
+                                _("Failed to read instruction %(file)s.\nUnknown format %(for)s") % {
+                                    'file': instruction,
+                                    'for': format})
                             return False
                     else:
                         # paper
@@ -700,51 +781,70 @@ class PageSetup(InstructionObject):
                     text = line.split()
                     try:
                         instr[self.subInstr[text[0]]] = float(text[1])
-                    except  (IndexError, KeyError):
-                        GError(_("Failed to read instruction %s.") % instruction)
+                    except (IndexError, KeyError):
+                        GError(
+                            _("Failed to read instruction %s.") %
+                            instruction)
                         return False
-                    
-            if 'Orientation' in kwargs and kwargs['Orientation'] == 'Landscape':
-                instr['Width'], instr['Height'] = instr['Height'], instr['Width']
-                
+
+            if 'Orientation' in kwargs and kwargs[
+                    'Orientation'] == 'Landscape':
+                instr['Width'], instr['Height'] = instr[
+                    'Height'], instr['Width']
+
             self.instruction.update(instr)
-        return True  
-    
-    def _toDict(self, paperStr):    
+        return True
+
+    def _toDict(self, paperStr):
         sizeDict = dict()
 #     cats = self.subInstr[ 'Width', 'Height', 'Left', 'Right', 'Top', 'Bottom']
         for line in paperStr.strip().split('\n'):
             d = dict(zip(self.cats, line.split()[1:]))
             sizeDict[line.split()[0]] = d
-            
-        return sizeDict    
-    
+
+        return sizeDict
+
+
 class Mapinfo(InstructionObject):
     """Class representing mapinfo instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'mapinfo'
         # default values
-        self.defaultInstruction = dict(unit = 'inch', where = (0, 0),
-                                       font = 'Helvetica', fontsize = 10, color = '0:0:0', background = 'none', 
-                                       border = 'none', rect = None)
+        self.defaultInstruction = dict(
+            unit='inch',
+            where=(
+                0,
+                0),
+            font='Helvetica',
+            fontsize=10,
+            color='0:0:0',
+            background='none',
+            border='none',
+            rect=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         instr = "mapinfo\n"
-        instr += "    where %.3f %.3f\n" % (self.instruction['where'][0], self.instruction['where'][1])
-        instr += string.Template("    font $font\n    fontsize $fontsize\n    color $color\n").substitute(self.instruction)            
-        instr += string.Template("    background $background\n    border $border\n").substitute(self.instruction)  
+        instr += "    where %.3f %.3f\n" % (
+            self.instruction['where'][0],
+            self.instruction['where'][1])
+        instr += string.Template(
+            "    font $font\n    fontsize $fontsize\n    color $color\n").substitute(self.instruction)
+        instr += string.Template(
+            "    background $background\n    border $border\n").substitute(
+            self.instruction)
         instr += "    end"
         return instr
-    
+
     def Read(self, instruction, text):
         """Read instruction and save information"""
         instr = {}
         try:
             for line in text:
-                sub = line.split(None,1)
+                sub = line.split(None, 1)
                 if sub[0] == 'font':
                     instr['font'] = sub[1]
                 elif sub[0] == 'fontsize':
@@ -756,56 +856,74 @@ class Mapinfo(InstructionObject):
                 elif sub[0] == 'border':
                     instr['border'] = sub[1]
                 elif sub[0] == 'where':
-                    instr['where'] = float(sub[1].split()[0]), float(sub[1].split()[1])
+                    instr['where'] = float(
+                        sub[1].split()[0]), float(
+                        sub[1].split()[1])
         except (ValueError, IndexError):
             GError(_("Failed to read instruction %s") % instruction)
             return False
         self.instruction.update(instr)
-        self.instruction['rect'] = self.EstimateRect(mapinfoDict = self.instruction)
+        self.instruction['rect'] = self.EstimateRect(
+            mapinfoDict=self.instruction)
         return True
-    
+
     def EstimateRect(self, mapinfoDict):
         """Estimate size to draw mapinfo"""
-        w = mapinfoDict['fontsize'] * 20 # any better estimation? 
+        w = mapinfoDict['fontsize'] * 20  # any better estimation?
         h = mapinfoDict['fontsize'] * 7
-        width = self.unitConv.convert(value = w, fromUnit = 'point', toUnit = 'inch')
-        height = self.unitConv.convert(value = h, fromUnit = 'point', toUnit = 'inch')
-        return Rect2D(x = float(mapinfoDict['where'][0]), y = float(mapinfoDict['where'][1]),
-                      width = width, height = height)
-    
+        width = self.unitConv.convert(value=w, fromUnit='point', toUnit='inch')
+        height = self.unitConv.convert(
+            value=h, fromUnit='point', toUnit='inch')
+        return Rect2D(x=float(mapinfoDict['where'][0]), y=float(
+            mapinfoDict['where'][1]), width=width, height=height)
+
+
 class Text(InstructionObject):
     """Class representing text instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'text'
         # default values
-        self.defaultInstruction = dict(text = "", font = "Helvetica", fontsize = 10, color = 'black', background = 'none',
-                                       hcolor = 'none', hwidth = 1, border = 'none', width = '1', XY = True,
-                                       where = (0,0), unit = 'inch', rotate = None, 
-                                       ref = "center center", xoffset = 0, yoffset = 0, east = None, north = None)
+        self.defaultInstruction = dict(
+            text="", font="Helvetica", fontsize=10, color='black',
+            background='none', hcolor='none', hwidth=1, border='none',
+            width='1', XY=True, where=(0, 0),
+            unit='inch', rotate=None, ref="center center", xoffset=0,
+            yoffset=0, east=None, north=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
-        text = self.instruction['text'].replace('\n','\\n')
-        instr = u"text %s %s" % (self.instruction['east'], self.instruction['north'])
+        text = self.instruction['text'].replace('\n', '\\n')
+        instr = u"text %s %s" % (
+            self.instruction['east'],
+            self.instruction['north'])
         instr += " %s\n" % text
-        instr += (string.Template("    font $font\n    fontsize $fontsize\n    color $color\n").
-                                                                   substitute(self.instruction))
+        instr += (
+            string.Template("    font $font\n    fontsize $fontsize\n    color $color\n"). substitute(
+                self.instruction))
         instr += string.Template("    hcolor $hcolor\n").substitute(self.instruction)
         if self.instruction['hcolor'] != 'none':
-            instr += string.Template("    hwidth $hwidth\n").substitute(self.instruction)
+            instr += string.Template(
+                "    hwidth $hwidth\n").substitute(self.instruction)
         instr += string.Template("    border $border\n").substitute(self.instruction)
         if self.instruction['border'] != 'none':
-            instr += string.Template("    width $width\n").substitute(self.instruction)
-        instr += string.Template("    background $background\n").substitute(self.instruction)
+            instr += string.Template(
+                "    width $width\n").substitute(self.instruction)
+        instr += string.Template(
+            "    background $background\n").substitute(self.instruction)
         if self.instruction["ref"] != '0':
             instr += string.Template("    ref $ref\n").substitute(self.instruction)
         if self.instruction["rotate"]:
-            instr += string.Template("    rotate $rotate\n").substitute(self.instruction)
-        if float(self.instruction["xoffset"]) or float(self.instruction["yoffset"]):
-            instr += (string.Template("    xoffset $xoffset\n    yoffset $yoffset\n").
-                                                            substitute(self.instruction))
+            instr += string.Template(
+                "    rotate $rotate\n").substitute(self.instruction)
+        if float(
+                self.instruction["xoffset"]) or float(
+                self.instruction["yoffset"]):
+            instr += (
+                string.Template("    xoffset $xoffset\n    yoffset $yoffset\n"). substitute(
+                    self.instruction))
         instr += "    end"
         try:
             instr = instr.encode('latin1')
@@ -822,11 +940,11 @@ class Text(InstructionObject):
                 message = _("Not all characters are supported "
                             "by ISO-8859-1 (Latin 1) encoding "
                             "which is required by module ps.map.")
-            GMessage(message = message)
+            GMessage(message=message)
             return ''
-        
+
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         map = kwargs['mapInstruction']
@@ -838,13 +956,14 @@ class Text(InstructionObject):
                     e, n = line.split(None, 3)[1:3]
                     if '%' in e and '%' in n:
                         instr['XY'] = True
-                        instr['east'], instr['north'] = self.PercentToReal(e, n)
+                        instr['east'], instr[
+                            'north'] = self.PercentToReal(e, n)
                     else:
                         instr['XY'] = False
                         instr['east'], instr['north'] = float(e), float(n)
-                        
+
                     instr['text'] = line.split(None, 3)[3].decode('latin_1')
-                
+
                 elif sub == 'font':
                     instr['font'] = line.split(None, 1)[1]
                 elif sub == 'fontsize':
@@ -872,41 +991,59 @@ class Text(InstructionObject):
                 elif sub == 'opaque':
                     if line.split(None, 1)[1].lower() in ('n', 'none'):
                         instr['background'] = 'none'
-                        
+
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-        instr['where'] = PaperMapCoordinates(mapInstr = map, x = instr['east'], y = instr['north'], paperToMap = False)       
+        instr['where'] = PaperMapCoordinates(
+            mapInstr=map, x=instr['east'],
+            y=instr['north'],
+            paperToMap=False)
         self.instruction.update(instr)
 
-        return True 
-        
+        return True
+
+
 class Image(InstructionObject):
     """Class representing eps instruction - image"""
+
     def __init__(self, id, settings):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.settings = settings
         self.type = 'image'
         # default values
-        self.defaultInstruction = dict(epsfile = "", XY = True, where = (0,0), unit = 'inch',
-                                       east = None, north = None,
-                                       rotate = None, scale = 1)
+        self.defaultInstruction = dict(
+            epsfile="",
+            XY=True,
+            where=(
+                0,
+                0),
+            unit='inch',
+            east=None,
+            north=None,
+            rotate=None,
+            scale=1)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
-        self.ChangeRefPoint(toCenter = True)
-        epsfile = self.instruction['epsfile'].replace(os.getenv('GISBASE'), "$GISBASE")
-        
-        instr = "eps %s %s\n" % (self.instruction['east'], self.instruction['north'])
+        self.ChangeRefPoint(toCenter=True)
+        epsfile = self.instruction['epsfile'].replace(
+            os.getenv('GISBASE'), "$GISBASE")
+
+        instr = "eps %s %s\n" % (
+            self.instruction['east'],
+            self.instruction['north'])
         instr += "    epsfile %s\n" % epsfile
         if self.instruction["rotate"]:
-            instr += string.Template("    rotate $rotate\n").substitute(self.instruction)
+            instr += string.Template(
+                "    rotate $rotate\n").substitute(self.instruction)
         if self.instruction["scale"]:
-            instr += string.Template("    scale $scale\n").substitute(self.instruction)
+            instr += string.Template(
+                "    scale $scale\n").substitute(self.instruction)
         instr += "    end"
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         mapInstr = kwargs['mapInstruction']
@@ -918,44 +1055,57 @@ class Image(InstructionObject):
                     e, n = line.split(None, 3)[1:3]
                     if '%' in e and '%' in n:
                         instr['XY'] = True
-                        instr['east'], instr['north'] = self.PercentToReal(e, n)
+                        instr['east'], instr[
+                            'north'] = self.PercentToReal(e, n)
                     else:
                         instr['XY'] = False
                         instr['east'], instr['north'] = float(e), float(n)
-                
+
                 elif sub == 'epsfile':
                     epsfile = line.split(None, 1)[1]
-                    instr['epsfile'] = epsfile.replace("$GISBASE", os.getenv("GISBASE"))
+                    instr['epsfile'] = epsfile.replace(
+                        "$GISBASE", os.getenv("GISBASE"))
                 elif sub == 'rotate':
                     instr['rotate'] = float(line.split(None, 1)[1])
                 elif sub == 'scale':
                     instr['scale'] = float(line.split(None, 1)[1])
-                        
+
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
         if not os.path.exists(instr['epsfile']):
             GError(_("Failed to read instruction %(inst)s: "
-                     "file %(file)s not found.") % { 'inst' : instruction,
-                                                     'file' : instr['epsfile'] })
+                     "file %(file)s not found.") % {'inst': instruction,
+                                                    'file': instr['epsfile']})
             return False
-        
+
         instr['epsfile'] = os.path.abspath(instr['epsfile'])
         instr['size'] = self.GetImageOrigSize(instr['epsfile'])
         if 'rotate' in instr:
-            instr['size'] = BBoxAfterRotation(instr['size'][0], instr['size'][1], instr['rotate'])
+            instr['size'] = BBoxAfterRotation(
+                instr['size'][0], instr['size'][1], instr['rotate'])
         self.instruction.update(instr)
-        self.ChangeRefPoint(toCenter = False)
-        instr['where'] = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east'],
-                                             y = self.instruction['north'], paperToMap = False)       
-        w = self.unitConv.convert(value = instr['size'][0], fromUnit = 'point', toUnit = 'inch')
-        h = self.unitConv.convert(value = instr['size'][1], fromUnit = 'point', toUnit = 'inch')
-        instr['rect'] = Rect2D(x = float(instr['where'][0]), y = float(instr['where'][1]),
-                               width = w * self.instruction['scale'], height = h * self.instruction['scale'])
+        self.ChangeRefPoint(toCenter=False)
+        instr['where'] = PaperMapCoordinates(
+            mapInstr=mapInstr,
+            x=self.instruction['east'],
+            y=self.instruction['north'],
+            paperToMap=False)
+        w = self.unitConv.convert(
+            value=instr['size'][0],
+            fromUnit='point', toUnit='inch')
+        h = self.unitConv.convert(
+            value=instr['size'][1],
+            fromUnit='point', toUnit='inch')
+        instr['rect'] = Rect2D(
+            x=float(instr['where'][0]),
+            y=float(instr['where'][1]),
+            width=w * self.instruction['scale'],
+            height=h * self.instruction['scale'])
         self.instruction.update(instr)
 
-        return True 
-        
+        return True
+
     def ChangeRefPoint(self, toCenter):
         """Change reference point (left top x center)"""
         mapInstr = self.settings.FindInstructionByType('map')
@@ -964,30 +1114,42 @@ class Image(InstructionObject):
         mapId = mapInstr.id
         if toCenter:
             center = self.instruction['rect'].GetCentre()
-            ENCenter = PaperMapCoordinates(mapInstr = self.settings[mapId],
-                                           x = center[0], y = center[1], paperToMap = True)
-                                           
+            ENCenter = PaperMapCoordinates(
+                mapInstr=self.settings[mapId],
+                x=center[0],
+                y=center[1],
+                paperToMap=True)
+
             self.instruction['east'], self.instruction['north'] = ENCenter
         else:
-            x, y = PaperMapCoordinates(mapInstr = self.settings[mapId], x = self.instruction['east'],
-                                       y = self.instruction['north'], paperToMap = False)
-            w = self.unitConv.convert(value = self.instruction['size'][0], fromUnit = 'point', toUnit = 'inch')
-            h = self.unitConv.convert(value = self.instruction['size'][1], fromUnit = 'point', toUnit = 'inch')
+            x, y = PaperMapCoordinates(
+                mapInstr=self.settings[mapId],
+                x=self.instruction['east'],
+                y=self.instruction['north'],
+                paperToMap=False)
+            w = self.unitConv.convert(
+                value=self.instruction['size'][0],
+                fromUnit='point', toUnit='inch')
+            h = self.unitConv.convert(
+                value=self.instruction['size'][1],
+                fromUnit='point', toUnit='inch')
             x -= w * self.instruction['scale'] / 2
             y -= h * self.instruction['scale'] / 2
-            e, n = PaperMapCoordinates(mapInstr = self.settings[mapId], x = x, y = y, paperToMap = True)
+            e, n = PaperMapCoordinates(
+                mapInstr=self.settings[mapId],
+                x=x, y=y, paperToMap=True)
             self.instruction['east'], self.instruction['north'] = e, n
 
     def GetImageOrigSize(self, imagePath):
         """Get image size.
-        
+
         If eps, size is read from image header.
         """
         fileName = os.path.split(imagePath)[1]
         # if eps, read info from header
         if os.path.splitext(fileName)[1].lower() == '.eps':
             bbInfo = "%%BoundingBox"
-            file = open(imagePath,"r")
+            file = open(imagePath, "r")
             w = h = 0
             while file:
                 line = file.readline()
@@ -996,46 +1158,56 @@ class Image(InstructionObject):
                     break
             file.close()
             return float(w), float(h)
-        else: # we can use wx.Image
+        else:  # we can use wx.Image
             img = wx.Image(fileName, type=wx.BITMAP_TYPE_ANY)
             return img.GetWidth(), img.GetHeight()
-            
+
+
 class NorthArrow(Image):
     """Class representing eps instruction -- North Arrow"""
+
     def __init__(self, id, settings):
-        Image.__init__(self, id = id, settings = settings)
+        Image.__init__(self, id=id, settings=settings)
         self.type = 'northArrow'
-        
+
     def __str__(self):
-        self.ChangeRefPoint(toCenter = True)
-        epsfile = self.instruction['epsfile'].replace(os.getenv('GISBASE'), "$GISBASE")
+        self.ChangeRefPoint(toCenter=True)
+        epsfile = self.instruction['epsfile'].replace(
+            os.getenv('GISBASE'), "$GISBASE")
 
-        instr = "eps %s %s\n" % (self.instruction['east'], self.instruction['north'])
+        instr = "eps %s %s\n" % (
+            self.instruction['east'],
+            self.instruction['north'])
         instr += "# north arrow\n"
         instr += "    epsfile %s\n" % epsfile
         if self.instruction["rotate"]:
-            instr += string.Template("    rotate $rotate\n").substitute(self.instruction)
+            instr += string.Template(
+                "    rotate $rotate\n").substitute(self.instruction)
         if self.instruction["scale"]:
-            instr += string.Template("    scale $scale\n").substitute(self.instruction)
+            instr += string.Template(
+                "    scale $scale\n").substitute(self.instruction)
         instr += "    end"
         return instr
-        
+
+
 class Point(InstructionObject):
     """Class representing point instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'point'
         # default values
-        self.defaultInstruction = dict(symbol = os.path.join('basic', 'x'),
-                                       color = '0:0:0', fcolor = '200:200:200',
-                                       rotate = 0, size = 10,
-                                       XY = True, where = (0,0), unit = 'inch',
-                                       east = None, north = None)
+        self.defaultInstruction = dict(symbol=os.path.join('basic', 'x'),
+                                       color='0:0:0', fcolor='200:200:200',
+                                       rotate=0, size=10,
+                                       XY=True, where=(0, 0), unit='inch',
+                                       east=None, north=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
-        instr = string.Template("point $east $north\n").substitute(self.instruction)
+        instr = string.Template(
+            "point $east $north\n").substitute(self.instruction)
         instr += string.Template("    symbol $symbol\n").substitute(self.instruction)
         instr += string.Template("    color $color\n").substitute(self.instruction)
         instr += string.Template("    fcolor $fcolor\n").substitute(self.instruction)
@@ -1043,7 +1215,7 @@ class Point(InstructionObject):
         instr += string.Template("    size $size\n").substitute(self.instruction)
         instr += "    end"
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         mapInstr = kwargs['mapInstruction']
@@ -1055,11 +1227,12 @@ class Point(InstructionObject):
                     e, n = line.split(None, 3)[1:3]
                     if '%' in e and '%' in n:
                         instr['XY'] = True
-                        instr['east'], instr['north'] = self.PercentToReal(e, n)
+                        instr['east'], instr[
+                            'north'] = self.PercentToReal(e, n)
                     else:
                         instr['XY'] = False
                         instr['east'], instr['north'] = float(e), float(n)
-                
+
                 elif sub == 'symbol':
                     instr['symbol'] = line.split(None, 1)[1]
                 elif sub == 'rotate':
@@ -1071,41 +1244,50 @@ class Point(InstructionObject):
                 elif sub == 'fcolor':
                     instr['fcolor'] = line.split(None, 1)[1]
 
-                        
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-        
+
         self.instruction.update(instr)
-        instr['where'] = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east'],
-                                             y = self.instruction['north'], paperToMap = False)
-        w = h = self.unitConv.convert(value = instr['size'], fromUnit = 'point', toUnit = 'inch')
-        instr['rect'] = Rect2D(x = float(instr['where'][0]) - w / 2, y = float(instr['where'][1] - h / 2),
-                               width = w, height = h)
+        instr['where'] = PaperMapCoordinates(
+            mapInstr=mapInstr,
+            x=self.instruction['east'],
+            y=self.instruction['north'],
+            paperToMap=False)
+        w = h = self.unitConv.convert(
+            value=instr['size'],
+            fromUnit='point', toUnit='inch')
+        instr['rect'] = Rect2D(
+            x=float(instr['where'][0]) - w / 2,
+            y=float(instr['where'][1] - h / 2),
+            width=w, height=h)
         self.instruction.update(instr)
 
         return True
 
+
 class Line(InstructionObject):
     """Class representing line instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'line'
         # default values
-        self.defaultInstruction = dict(color = '0:0:0', width = 2,
-                                       where = [wx.Point2D(), wx.Point2D()],
-                                       east1 = None, north1 = None,
-                                       east2 = None, north2 = None)
+        self.defaultInstruction = dict(color='0:0:0', width=2,
+                                       where=[wx.Point2D(), wx.Point2D()],
+                                       east1=None, north1=None,
+                                       east2=None, north2=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
-        instr = string.Template("line $east1 $north1 $east2 $north2\n").substitute(self.instruction)
+        instr = string.Template(
+            "line $east1 $north1 $east2 $north2\n").substitute(self.instruction)
         instr += string.Template("    color $color\n").substitute(self.instruction)
         instr += string.Template("    width $width\n").substitute(self.instruction)
         instr += "    end\n"
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         mapInstr = kwargs['mapInstruction']
@@ -1116,52 +1298,61 @@ class Line(InstructionObject):
                 if sub == 'line':
                     e1, n1, e2, n2 = line.split(None, 5)[1:5]
                     if '%' in e1 and '%' in n1 and '%' in e2 and '%' in n2:
-                        instr['east1'], instr['north1'] = self.PercentToReal(e1, n1)
-                        instr['east2'], instr['north2'] = self.PercentToReal(e2, n2)
+                        instr['east1'], instr[
+                            'north1'] = self.PercentToReal(e1, n1)
+                        instr['east2'], instr[
+                            'north2'] = self.PercentToReal(e2, n2)
                     else:
                         instr['east1'], instr['north1'] = float(e1), float(n1)
                         instr['east2'], instr['north2'] = float(e2), float(n2)
-                
+
                 elif sub == 'width':
                     instr['width'] = float(line.split(None, 1)[1])
                 elif sub == 'color':
                     instr['color'] = line.split(None, 1)[1]
-                        
+
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-        
+
         self.instruction.update(instr)
-        e1, n1 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east1'],
-                                     y = self.instruction['north1'], paperToMap = False)
-        e2, n2 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east2'],
-                                     y = self.instruction['north2'], paperToMap = False)
+        e1, n1 = PaperMapCoordinates(
+            mapInstr=mapInstr, x=self.instruction['east1'],
+            y=self.instruction['north1'],
+            paperToMap=False)
+        e2, n2 = PaperMapCoordinates(
+            mapInstr=mapInstr, x=self.instruction['east2'],
+            y=self.instruction['north2'],
+            paperToMap=False)
         instr['where'] = [wx.Point2D(e1, n1), wx.Point2D(e2, n2)]
         instr['rect'] = Rect2DPP(instr['where'][0], instr['where'][1])
         self.instruction.update(instr)
 
         return True
 
+
 class Rectangle(InstructionObject):
     """Class representing rectangle instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'rectangle'
         # default values
-        self.defaultInstruction = dict(color = '0:0:0', fcolor = 'none', width = 2,
-                                       east1 = None, north1 = None,
-                                       east2 = None, north2 = None)
+        self.defaultInstruction = dict(color='0:0:0', fcolor='none', width=2,
+                                       east1=None, north1=None,
+                                       east2=None, north2=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
-        instr = string.Template("rectangle $east1 $north1 $east2 $north2\n").substitute(self.instruction)
+        instr = string.Template(
+            "rectangle $east1 $north1 $east2 $north2\n").substitute(self.instruction)
         instr += string.Template("    color $color\n").substitute(self.instruction)
         instr += string.Template("    fcolor $fcolor\n").substitute(self.instruction)
         instr += string.Template("    width $width\n").substitute(self.instruction)
         instr += "    end\n"
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         mapInstr = kwargs['mapInstruction']
@@ -1172,12 +1363,14 @@ class Rectangle(InstructionObject):
                 if sub == 'rectangle':
                     e1, n1, e2, n2 = line.split(None, 5)[1:5]
                     if '%' in e1 and '%' in n1 and '%' in e2 and '%' in n2:
-                        instr['east1'], instr['north1'] = self.PercentToReal(e1, n1)
-                        instr['east2'], instr['north2'] = self.PercentToReal(e2, n2)
+                        instr['east1'], instr[
+                            'north1'] = self.PercentToReal(e1, n1)
+                        instr['east2'], instr[
+                            'north2'] = self.PercentToReal(e2, n2)
                     else:
                         instr['east1'], instr['north1'] = float(e1), float(n1)
                         instr['east2'], instr['north2'] = float(e2), float(n2)
-                
+
                 elif sub == 'width':
                     instr['width'] = float(line.split(None, 1)[1])
                 elif sub == 'color':
@@ -1185,45 +1378,57 @@ class Rectangle(InstructionObject):
                 elif sub == 'fcolor':
                     instr['fcolor'] = line.split(None, 1)[1]
 
-                        
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-        
+
         self.instruction.update(instr)
-        e1, n1 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east1'],
-                                       y = self.instruction['north1'], paperToMap = False)
-        e2, n2 = PaperMapCoordinates(mapInstr = mapInstr, x = self.instruction['east2'],
-                                       y = self.instruction['north2'], paperToMap = False)
+        e1, n1 = PaperMapCoordinates(
+            mapInstr=mapInstr, x=self.instruction['east1'],
+            y=self.instruction['north1'],
+            paperToMap=False)
+        e2, n2 = PaperMapCoordinates(
+            mapInstr=mapInstr, x=self.instruction['east2'],
+            y=self.instruction['north2'],
+            paperToMap=False)
         instr['rect'] = Rect2DPP(wx.Point2D(e1, n1), wx.Point2D(e2, n2))
         self.instruction.update(instr)
 
         return True
-        
+
+
 class Scalebar(InstructionObject):
     """Class representing scalebar instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'scalebar'
         # default values
-        self.defaultInstruction = dict(unit = 'inch', where = (1,1),
-                                       unitsLength = 'auto', unitsHeight = 'inch',
-                                       length = None, height = 0.1, rect = None,
-                                       fontsize = 10, background = 'y',
-                                       scalebar = 'f', segment = 4, numbers = 1)
+        self.defaultInstruction = dict(unit='inch', where=(1, 1),
+                                       unitsLength='auto', unitsHeight='inch',
+                                       length=None, height=0.1, rect=None,
+                                       fontsize=10, background='y',
+                                       scalebar='f', segment=4, numbers=1)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
-        instr = string.Template("scalebar $scalebar\n").substitute(self.instruction)
-        instr += "    where %.3f %.3f\n" % (self.instruction['where'][0], self.instruction['where'][1])
-        instr += string.Template("    length $length\n    units $unitsLength\n").substitute(self.instruction)
+        instr = string.Template(
+            "scalebar $scalebar\n").substitute(self.instruction)
+        instr += "    where %.3f %.3f\n" % (
+            self.instruction['where'][0],
+            self.instruction['where'][1])
+        instr += string.Template(
+            "    length $length\n    units $unitsLength\n").substitute(self.instruction)
         instr += string.Template("    height $height\n").substitute(self.instruction)
-        instr += string.Template("    segment $segment\n    numbers $numbers\n").substitute(self.instruction)
-        instr += string.Template("    fontsize $fontsize\n    background $background\n").substitute(self.instruction)
+        instr += string.Template(
+            "    segment $segment\n    numbers $numbers\n").substitute(self.instruction)
+        instr += string.Template(
+            "    fontsize $fontsize\n    background $background\n").substitute(
+            self.instruction)
         instr += "    end"
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         scale = kwargs['scale']
@@ -1240,7 +1445,9 @@ class Scalebar(InstructionObject):
                 elif line.startswith('length'):
                     instr['length'] = float(line.split()[1])
                 elif line.startswith('units'):
-                    if line.split()[1] in ['auto', 'meters', 'kilometers', 'feet', 'miles', 'nautmiles']:
+                    if line.split()[1] in[
+                            'auto', 'meters', 'kilometers', 'feet', 'miles',
+                            'nautmiles']:
                         instr['unitsLength'] = line.split()[1]
                 elif line.startswith('height'):
                     instr['height'] = float(line.split()[1])
@@ -1251,74 +1458,90 @@ class Scalebar(InstructionObject):
                 elif line.startswith('segment'):
                     instr['segment'] = int(line.split()[1])
                 elif line.startswith('background'):
-                    if line.split()[1].strip().lower() in ('y','yes'):
+                    if line.split()[1].strip().lower() in ('y', 'yes'):
                         instr['background'] = 'y'
-                    elif line.split()[1].strip().lower() in ('n','no', 'none'):
+                    elif line.split()[1].strip().lower() in ('n', 'no', 'none'):
                         instr['background'] = 'n'
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-            
+
         self.instruction.update(instr)
-        w, h = self.EstimateSize(scalebarDict = self.instruction, scale = scale)
-        x = self.instruction['where'][0] - w / 2 
+        w, h = self.EstimateSize(scalebarDict=self.instruction, scale=scale)
+        x = self.instruction['where'][0] - w / 2
         y = self.instruction['where'][1] - h / 2
         self.instruction['rect'] = Rect2D(x, y, w, h)
-        return True 
-    
+        return True
+
     def EstimateSize(self, scalebarDict, scale):
         """Estimate size to draw scalebar"""
         units = projInfo()['units']
         if not units or units not in self.unitConv.getAllUnits():
             units = 'meters'
         if scalebarDict['unitsLength'] != 'auto':
-            length = self.unitConv.convert(value = scalebarDict['length'], fromUnit = scalebarDict['unitsLength'], toUnit = 'inch')
+            length = self.unitConv.convert(
+                value=scalebarDict['length'],
+                fromUnit=scalebarDict['unitsLength'],
+                toUnit='inch')
         else:
-            length = self.unitConv.convert(value = scalebarDict['length'], fromUnit = units, toUnit = 'inch')
-            
+            length = self.unitConv.convert(
+                value=scalebarDict['length'],
+                fromUnit=units, toUnit='inch')
+
         length *= scale
-        length *= 1.1 #for numbers on the edge
-        height = scalebarDict['height'] + 2 * self.unitConv.convert(value = scalebarDict['fontsize'], fromUnit = 'point', toUnit = 'inch')     
+        length *= 1.1  # for numbers on the edge
+        height = scalebarDict['height'] + 2 * self.unitConv.convert(
+            value=scalebarDict['fontsize'], fromUnit='point', toUnit='inch')
         return (length, height)
-    
+
+
 class RasterLegend(InstructionObject):
     """Class representing colortable instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'rasterLegend'
         # default values
-        self.defaultInstruction = dict(rLegend = False, unit = 'inch', rasterDefault = True, raster = None,
-                                       discrete = None, type = None,
-                                       where = (0, 0),
-                                       width = None, height = None, cols = 1, font = "Helvetica", fontsize = 10,
-                                       #color = '0:0:0', tickbar = False, range = False, min = 0, max = 0,
-                                       color = 'black', tickbar = 'n', range = False, min = 0, max = 0,
-                                       nodata = 'n')
+        self.defaultInstruction = dict(rLegend=False, unit='inch', rasterDefault=True, raster=None,
+                                       discrete=None, type=None,
+                                       where=(0, 0),
+                                       width=None, height=None, cols=1, font="Helvetica", fontsize=10,
+                                       # color = '0:0:0', tickbar = False,
+                                       # range = False, min = 0, max = 0,
+                                       color='black', tickbar='n', range=False, min=0, max=0,
+                                       nodata='n')
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         instr = "colortable y\n"
         instr += string.Template("    raster $raster\n").substitute(self.instruction)
-        instr += "    where %.3f %.3f\n" % (self.instruction['where'][0], self.instruction['where'][1])
+        instr += "    where %.3f %.3f\n" % (
+            self.instruction['where'][0],
+            self.instruction['where'][1])
         if self.instruction['width']:
-            instr += string.Template("    width $width\n").substitute(self.instruction)
-        instr += string.Template("    discrete $discrete\n").substitute(self.instruction)
+            instr += string.Template(
+                "    width $width\n").substitute(self.instruction)
+        instr += string.Template(
+            "    discrete $discrete\n").substitute(self.instruction)
         if self.instruction['discrete'] == 'n':
             if self.instruction['height']:
-                instr += string.Template("    height $height\n").substitute(self.instruction)
-            instr += string.Template("    tickbar $tickbar\n").substitute(self.instruction)
+                instr += string.Template(
+                    "    height $height\n").substitute(self.instruction)
+            instr += string.Template(
+                "    tickbar $tickbar\n").substitute(self.instruction)
             if self.instruction['range']:
-                instr += string.Template("    range $min $max\n").substitute(self.instruction)
+                instr += string.Template(
+                    "    range $min $max\n").substitute(self.instruction)
         else:
             instr += string.Template("    cols $cols\n").substitute(self.instruction)
-            instr += string.Template("    nodata $nodata\n").substitute(self.instruction)
+            instr += string.Template(
+                "    nodata $nodata\n").substitute(self.instruction)
         instr += string.Template("    font $font\n    fontsize $fontsize\n    color $color\n")\
             .substitute(self.instruction)
         instr += "    end"
-        return instr    
-    
-    
+        return instr
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         instr = {}
@@ -1340,129 +1563,149 @@ class RasterLegend(InstructionObject):
                 elif line.startswith('height'):
                     instr['height'] = float(line.split()[1])
                 elif line.startswith('cols'):
-                    instr['cols'] = int(line.split()[1])                    
+                    instr['cols'] = int(line.split()[1])
                 elif line.startswith('range'):
                     instr['range'] = True
                     instr['min'] = float(line.split()[1])
                     instr['max'] = float(line.split()[2])
                 elif line.startswith('nodata'):
-                    if line.split()[1].strip().lower() in ('y','yes'):
+                    if line.split()[1].strip().lower() in ('y', 'yes'):
                         instr['nodata'] = 'y'
-                    elif line.split()[1].strip().lower() in ('n','no', 'none'):
+                    elif line.split()[1].strip().lower() in ('n', 'no', 'none'):
                         instr['nodata'] = 'n'
                 elif line.startswith('tickbar'):
-                    if line.split()[1].strip().lower() in ('y','yes'):
+                    if line.split()[1].strip().lower() in ('y', 'yes'):
                         instr['tickbar'] = 'y'
-                    elif line.split()[1].strip().lower() in ('n','no', 'none'):
+                    elif line.split()[1].strip().lower() in ('n', 'no', 'none'):
                         instr['tickbar'] = 'n'
                 elif line.startswith('discrete'):
-                    if line.split()[1].strip().lower() in ('y','yes'):
+                    if line.split()[1].strip().lower() in ('y', 'yes'):
                         instr['discrete'] = 'y'
-                    elif line.split()[1].strip().lower() in ('n','no', 'none'):
-                        instr['discrete'] = 'n'            
+                    elif line.split()[1].strip().lower() in ('n', 'no', 'none'):
+                        instr['discrete'] = 'n'
 
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-            
+
         if 'raster' in instr:
             instr['rasterDefault'] = False
             if 'discrete' not in instr:
-                rasterType = getRasterType(map = instr['raster'])
+                rasterType = getRasterType(map=instr['raster'])
                 instr['type'] = rasterType
                 if rasterType == 'CELL':
                     instr['discrete'] = 'y'
                 else:
                     instr['discrete'] = 'n'
-            
+
         else:
             instr['rasterDefault'] = True
         self.instruction.update(instr)
         # add 'rect' in the end
-            
-        return True 
-    
-    def EstimateHeight(self, raster, discrete, fontsize, cols = None,  height = None):
+
+        return True
+
+    def EstimateHeight(self, raster, discrete, fontsize,
+                       cols=None, height=None):
         """Estimate height to draw raster legend"""
         if discrete == 'n':
             if height:
                 height = height
             else:
-                height = self.unitConv.convert(value = fontsize * 10,
-                                                    fromUnit = 'point', toUnit = 'inch')
-                                                    
+                height = self.unitConv.convert(value=fontsize * 10,
+                                               fromUnit='point', toUnit='inch')
+
         if discrete == 'y':
             if cols:
-                cols = cols 
+                cols = cols
             else:
-                cols = 1 
+                cols = 1
 
             rinfo = grass.raster_info(raster)
             if rinfo['datatype'] in ('DCELL', 'FCELL'):
                 minim, maxim = rinfo['min'], rinfo['max']
-                rows = ceil(maxim / cols )
+                rows = ceil(maxim / cols)
             else:
-                cat = grass.read_command('r.category', map = raster,
-                                    sep = ':').strip().split('\n')
-                rows = ceil(float(len(cat)) / cols )
-                            
-                
-            height = self.unitConv.convert(value =  1.5 * rows * fontsize, fromUnit = 'point', toUnit = 'inch')
-            
+                cat = grass.read_command('r.category', map=raster,
+                                         sep=':').strip().split('\n')
+                rows = ceil(float(len(cat)) / cols)
+
+            height = self.unitConv.convert(
+                value=1.5 * rows * fontsize,
+                fromUnit='point',
+                toUnit='inch')
+
         return height
-        
-    def EstimateWidth(self, raster, discrete, fontsize, cols = None, width = None, paperInstr = None):
+
+    def EstimateWidth(self, raster, discrete, fontsize,
+                      cols=None, width=None, paperInstr=None):
         """Estimate size to draw raster legend"""
-        
+
         if discrete == 'n':
             rinfo = grass.raster_info(raster)
             minim, maxim = rinfo['min'], rinfo['max']
             if width:
                 width = width
             else:
-                width = self.unitConv.convert(value = fontsize * 2,
-                                                    fromUnit = 'point', toUnit = 'inch')
-            text = len(max(str(minim), str(maxim), key = len))
-            textPart = self.unitConv.convert(value = text * fontsize / 2,
-                                                    fromUnit = 'point', toUnit = 'inch')
+                width = self.unitConv.convert(value=fontsize * 2,
+                                              fromUnit='point', toUnit='inch')
+            text = len(max(str(minim), str(maxim), key=len))
+            textPart = self.unitConv.convert(value=text * fontsize / 2,
+                                             fromUnit='point', toUnit='inch')
             width += textPart
-                                                    
+
         elif discrete == 'y':
             if cols:
-                cols = cols 
+                cols = cols
             else:
-                cols = 1    
+                cols = 1
 
             if width:
                 width = width
             else:
-                paperWidth = paperInstr['Width'] - paperInstr['Right'] - paperInstr['Left']
+                paperWidth = paperInstr[
+                    'Width'] - paperInstr['Right'] - paperInstr['Left']
                 width = (paperWidth / cols) * (cols - 1) + 1
-                
-        return width    
-             
+
+        return width
+
+
 class VectorLegend(InstructionObject):
     """Class representing colortable instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'vectorLegend'
         # default values
-        self.defaultInstruction = dict(vLegend = False, unit = 'inch', where = (0, 0),
-                                                defaultSize = True, width = 0.4, cols = 1, span = None,
-                                                font = "Helvetica", fontsize = 10,
-                                                border = 'none')
+        self.defaultInstruction = dict(
+            vLegend=False,
+            unit='inch',
+            where=(
+                0,
+                0),
+            defaultSize=True,
+            width=0.4,
+            cols=1,
+            span=None,
+            font="Helvetica",
+            fontsize=10,
+            border='none')
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         instr = "vlegend\n"
-        instr += "    where %.3f %.3f\n" % (self.instruction['where'][0], self.instruction['where'][1])
-        instr += string.Template("    font $font\n    fontsize $fontsize\n").substitute(self.instruction)
-        instr += string.Template("    width $width\n    cols $cols\n").substitute(self.instruction)
+        instr += "    where %.3f %.3f\n" % (
+            self.instruction['where'][0],
+            self.instruction['where'][1])
+        instr += string.Template(
+            "    font $font\n    fontsize $fontsize\n").substitute(self.instruction)
+        instr += string.Template(
+            "    width $width\n    cols $cols\n").substitute(self.instruction)
         if self.instruction['span']:
             instr += string.Template("    span $span\n").substitute(self.instruction)
-        instr += string.Template("    border $border\n").substitute(self.instruction)  
-        instr += "    end"  
+        instr += string.Template("    border $border\n").substitute(self.instruction)
+        instr += "    end"
         return instr
 
     def Read(self, instruction, text, **kwargs):
@@ -1480,57 +1723,60 @@ class VectorLegend(InstructionObject):
                 elif line.startswith('width'):
                     instr['width'] = float(line.split()[1])
                 elif line.startswith('cols'):
-                    instr['cols'] = int(line.split()[1]) 
+                    instr['cols'] = int(line.split()[1])
                 elif line.startswith('span'):
                     instr['span'] = float(line.split()[1])
                 elif line.startswith('border'):
                     instr['border'] = line.split()[1]
-                    
+
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-            
+
         self.instruction.update(instr)
-            
-        return True 
-    
-    def EstimateSize(self, vectorInstr, fontsize, width = None, cols = None):
+
+        return True
+
+    def EstimateSize(self, vectorInstr, fontsize, width=None, cols=None):
         """Estimate size to draw vector legend"""
         if width:
-            width = width 
+            width = width
         else:
-            width = fontsize/24.0
+            width = fontsize / 24.0
 
         if cols:
-            cols = cols 
+            cols = cols
         else:
             cols = 1
 
         vectors = vectorInstr['list']
         labels = [vector[4] for vector in vectors if vector[3] != 0]
-        extent = (len(max(labels, key = len)) * fontsize / 2, fontsize)
-        wExtent = self.unitConv.convert(value = extent[0], fromUnit = 'point', toUnit = 'inch')
-        hExtent = self.unitConv.convert(value = extent[1], fromUnit = 'point', toUnit = 'inch')
+        extent = (len(max(labels, key=len)) * fontsize / 2, fontsize)
+        wExtent = self.unitConv.convert(
+            value=extent[0], fromUnit='point', toUnit='inch')
+        hExtent = self.unitConv.convert(
+            value=extent[1], fromUnit='point', toUnit='inch')
         w = (width + wExtent) * cols
         h = len(labels) * hExtent / cols
         h *= 1.1
         return (w, h)
-            
-   
+
+
 class Raster(InstructionObject):
     """Class representing raster instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'raster'
         # default values
-        self.defaultInstruction = dict(isRaster = False, raster = None)
+        self.defaultInstruction = dict(isRaster=False, raster=None)
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         instr = string.Template("raster $raster").substitute(self.instruction)
         return instr
-    
+
     def Read(self, instruction, text):
         """Read instruction and save information"""
         instr = {}
@@ -1541,34 +1787,38 @@ class Raster(InstructionObject):
             GError(_("Failed to read instruction %s") % instruction)
             return False
         try:
-            info = grass.find_file(map, element = 'cell')
+            info = grass.find_file(map, element='cell')
         except grass.ScriptError as e:
-            GError(message = e.value)
+            GError(message=e.value)
             return False
         instr['raster'] = info['fullname']
 
-        
         self.instruction.update(instr)
         return True
-    
+
+
 class Vector(InstructionObject):
     """Class keeps vector layers"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'vector'
         # default values
-        self.defaultInstruction = dict(list = None)# [vmap, type, id, lpos, label] 
+        self.defaultInstruction = dict(
+            list=None)  # [vmap, type, id, lpos, label]
         # current values
         self.instruction = dict(self.defaultInstruction)
+
     def __str__(self):
         return ''
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         instr = {}
-        
+
         for line in text:
-            if line.startswith('vpoints') or line.startswith('vlines') or line.startswith('vareas'):
+            if line.startswith('vpoints') or line.startswith(
+                    'vlines') or line.startswith('vareas'):
                 # subtype
                 if line.startswith('vpoints'):
                     subType = 'points'
@@ -1579,115 +1829,171 @@ class Vector(InstructionObject):
                 # name of vector map
                 vmap = line.split()[1]
                 try:
-                    info = grass.find_file(vmap, element = 'vector')
+                    info = grass.find_file(vmap, element='vector')
                 except grass.ScriptError as e:
-                    GError(message = e.value)
+                    GError(message=e.value)
                     return False
                 vmap = info['fullname']
                 # id
                 id = kwargs['id']
                 # lpos
                 lpos = kwargs['vectorMapNumber']
-                #label
+                # label
                 label = '('.join(vmap.split('@')) + ')'
                 break
-        instr = [vmap, subType, id, lpos, label] 
+        instr = [vmap, subType, id, lpos, label]
         if not self.instruction['list']:
             self.instruction['list'] = []
         self.instruction['list'].append(instr)
-        
-        return True    
-    
+
+        return True
+
+
 class VProperties(InstructionObject):
     """Class represents instructions vareas, vlines, vpoints"""
+
     def __init__(self, id, subType):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'vProperties'
         self.subType = subType
         # default values
         if self.subType == 'points':
-            dd = dict(subType  = 'points', name = None, type = 'point or centroid', connection = False, layer = '1',
-                        masked = 'n', color = '0:0:0', width = 1,
-                        fcolor = '255:0:0', rgbcolumn = None, symbol = os.path.join('basic', 'x'), eps = None,
-                        size = 5, sizecolumn = None, scale = None,
-                        rotation = False, rotate = 0, rotatecolumn = None, label = None, lpos = None)
+            dd = dict(
+                subType='points',
+                name=None,
+                type='point or centroid',
+                connection=False,
+                layer='1',
+                masked='n',
+                color='0:0:0',
+                width=1,
+                fcolor='255:0:0',
+                rgbcolumn=None,
+                symbol=os.path.join(
+                    'basic',
+                    'x'),
+                eps=None,
+                size=5,
+                sizecolumn=None,
+                scale=None,
+                rotation=False,
+                rotate=0,
+                rotatecolumn=None,
+                label=None,
+                lpos=None)
         elif self.subType == 'lines':
-            dd = dict(subType = 'lines', name = None, type = 'line or boundary', connection = False, layer = '1',
-                        masked = 'n', color = '0:0:0', hwidth = 1,
-                        hcolor = 'none', rgbcolumn = None,
-                        width = 1, cwidth = None,
-                        style = 'solid', linecap = 'butt', label = None, lpos = None)
-        else: # areas
-            dd = dict(subType = 'areas', name = None, connection = False, layer = '1',    
-                        masked = 'n', color = '0:0:0', width = 1,
-                        fcolor = 'none', rgbcolumn = None,
-                        pat = None, pwidth = 1, scale = 1, label = None, lpos = None)
+            dd = dict(
+                subType='lines',
+                name=None,
+                type='line or boundary',
+                connection=False,
+                layer='1',
+                masked='n',
+                color='0:0:0',
+                hwidth=1,
+                hcolor='none',
+                rgbcolumn=None,
+                width=1,
+                cwidth=None,
+                style='solid',
+                linecap='butt',
+                label=None,
+                lpos=None)
+        else:  # areas
+            dd = dict(subType='areas', name=None, connection=False, layer='1',
+                      masked='n', color='0:0:0', width=1,
+                      fcolor='none', rgbcolumn=None,
+                      pat=None, pwidth=1, scale=1, label=None, lpos=None)
         self.defaultInstruction = dd
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         dic = self.instruction
         vInstruction = string.Template("v$subType $name\n").substitute(dic)
-        #data selection
+        # data selection
         if self.subType in ('points', 'lines'):
-           vInstruction += string.Template("    type $type\n").substitute(dic) 
+            vInstruction += string.Template("    type $type\n").substitute(dic)
         if dic['connection']:
-            vInstruction += string.Template("    layer $layer\n").substitute(dic)
-            if dic.has_key('cats'):
-                vInstruction += string.Template("    cats $cats\n").substitute(dic)
-            elif dic.has_key('where'):
-                    vInstruction += string.Template("    where $where\n").substitute(dic)
+            vInstruction += string.Template(
+                "    layer $layer\n").substitute(dic)
+            if 'cats' in dic:
+                vInstruction += string.Template(
+                    "    cats $cats\n").substitute(dic)
+            elif 'where' in dic:
+                vInstruction += string.Template(
+                    "    where $where\n").substitute(dic)
         vInstruction += string.Template("    masked $masked\n").substitute(dic)
-        #colors
+        # colors
         vInstruction += string.Template("    color $color\n").substitute(dic)
         if self.subType in ('points', 'areas'):
             if dic['color'] != 'none':
-                vInstruction += string.Template("    width $width\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    width $width\n").substitute(dic)
             if dic['rgbcolumn']:
-                vInstruction += string.Template("    rgbcolumn $rgbcolumn\n").substitute(dic)
-            vInstruction += string.Template("    fcolor $fcolor\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    rgbcolumn $rgbcolumn\n").substitute(dic)
+            vInstruction += string.Template(
+                "    fcolor $fcolor\n").substitute(dic)
         else:
             if dic['rgbcolumn']:
-                vInstruction += string.Template("    rgbcolumn $rgbcolumn\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    rgbcolumn $rgbcolumn\n").substitute(dic)
             elif dic['hcolor'] != 'none':
-                vInstruction += string.Template("    hwidth $hwidth\n").substitute(dic)
-                vInstruction += string.Template("    hcolor $hcolor\n").substitute(dic)
-        
+                vInstruction += string.Template(
+                    "    hwidth $hwidth\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    hcolor $hcolor\n").substitute(dic)
+
         # size and style
         if self.subType == 'points':
             if not dic['eps']:
-                vInstruction += string.Template("    symbol $symbol\n").substitute(dic)
-            else: #eps
-                vInstruction += string.Template("    eps $eps\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    symbol $symbol\n").substitute(dic)
+            else:  # eps
+                vInstruction += string.Template(
+                    "    eps $eps\n").substitute(dic)
             if dic['size']:
-                vInstruction += string.Template("    size $size\n").substitute(dic)            
-            else: # sizecolumn
-                vInstruction += string.Template("    sizecolumn $sizecolumn\n").substitute(dic)
-                vInstruction += string.Template("    scale $scale\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    size $size\n").substitute(dic)
+            else:  # sizecolumn
+                vInstruction += string.Template(
+                    "    sizecolumn $sizecolumn\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    scale $scale\n").substitute(dic)
             if dic['rotation']:
                 if dic['rotate'] is not None:
-                    vInstruction += string.Template("    rotate $rotate\n").substitute(dic)
+                    vInstruction += string.Template(
+                        "    rotate $rotate\n").substitute(dic)
                 else:
-                    vInstruction += string.Template("    rotatecolumn $rotatecolumn\n").substitute(dic)
-                    
+                    vInstruction += string.Template(
+                        "    rotatecolumn $rotatecolumn\n").substitute(dic)
+
         if self.subType == 'areas':
             if dic['pat'] is not None:
-                patternFile = dic['pat'].replace(os.getenv("GISBASE"), "$GISBASE")
+                patternFile = dic['pat'].replace(
+                    os.getenv("GISBASE"), "$GISBASE")
                 vInstruction += "    pat %s\n" % patternFile
-                vInstruction += string.Template("    pwidth $pwidth\n").substitute(dic)
-                vInstruction += string.Template("    scale $scale\n").substitute(dic)
-                
+                vInstruction += string.Template(
+                    "    pwidth $pwidth\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    scale $scale\n").substitute(dic)
+
         if self.subType == 'lines':
             if dic['width'] is not None:
-                vInstruction += string.Template("    width $width\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    width $width\n").substitute(dic)
             else:
-                vInstruction += string.Template("    cwidth $cwidth\n").substitute(dic)
-            vInstruction += string.Template("    style $style\n").substitute(dic)
-            vInstruction += string.Template("    linecap $linecap\n").substitute(dic)
+                vInstruction += string.Template(
+                    "    cwidth $cwidth\n").substitute(dic)
+            vInstruction += string.Template(
+                "    style $style\n").substitute(dic)
+            vInstruction += string.Template(
+                "    linecap $linecap\n").substitute(dic)
         #position and label in vlegend
-        vInstruction += string.Template("    label $label\n    lpos $lpos\n").substitute(dic)
-        
+        vInstruction += string.Template(
+            "    label $label\n    lpos $lpos\n").substitute(dic)
+
         vInstruction += "    end"
         try:
             vInstruction = vInstruction.encode('Latin_1')
@@ -1704,26 +2010,26 @@ class VProperties(InstructionObject):
                 message = _("Not all characters are supported "
                             "by ISO-8859-1 (Latin 1) encoding "
                             "which is required by module ps.map.")
-            GMessage(message = message)
+            GMessage(message=message)
             return ''
         return vInstruction
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         instr = {}
         try:
-            info = grass.find_file(name = text[0].split()[1], element = 'vector')
+            info = grass.find_file(name=text[0].split()[1], element='vector')
         except grass.ScriptError as e:
-            GError(message = e.value)
+            GError(message=e.value)
             return False
         instr['name'] = info['fullname']
-        #connection
+        # connection
         instr['connection'] = True
         self.mapDBInfo = VectorDBInfo(instr['name'])
         self.layers = self.mapDBInfo.layers.keys()
         if not self.layers:
             instr['connection'] = False
-            
+
         # points
         if text[0].startswith('vpoints'):
             for line in text[1:]:
@@ -1756,8 +2062,8 @@ class VProperties(InstructionObject):
                     instr['rotatecolumn'] = line.split()[1]
                     instr['rotation'] = True
                     instr['rotate'] = None
-                    
-        # lines            
+
+        # lines
         elif text[0].startswith('vlines'):
             for line in text[1:]:
                 if line.startswith('type'):
@@ -1772,29 +2078,29 @@ class VProperties(InstructionObject):
                 elif line.startswith('hcolor'):
                     instr['hcolor'] = line.split()[1]
                 elif line.startswith('rgbcolumn'):
-                    instr['rgbcolumn'] = line.split()[1]                    
+                    instr['rgbcolumn'] = line.split()[1]
                 elif line.startswith('cwidth'):
                     instr['cwidth'] = float(line.split()[1])
                     instr['width'] = None
                 elif line.startswith('style'):
-                    instr['style'] = line.split()[1]       
+                    instr['style'] = line.split()[1]
                 elif line.startswith('linecap'):
                     instr['linecap'] = line.split()[1]
-         
+
         elif text[0].startswith('vareas'):
             for line in text[1:]:
                 if line.startswith('fcolor'):
-                    instr['fcolor'] = line.split()[1]    
+                    instr['fcolor'] = line.split()[1]
                 elif line.startswith('pat'):
                     patternFile = line.split()[1]
-                    instr['pat'] = patternFile.replace("$GISBASE", os.getenv("GISBASE"))
+                    instr['pat'] = patternFile.replace(
+                        "$GISBASE", os.getenv("GISBASE"))
                 elif line.startswith('pwidth'):
                     instr['pwidth'] = float(line.split()[1])
                 elif line.startswith('scale'):
                     instr['scale'] = float(line.split()[1])
-            
-            
-        # same properties for all    
+
+        # same properties for all
         for line in text[1:]:
             if line.startswith('lpos'):
                 instr['lpos'] = int(line.split()[1])
@@ -1810,35 +2116,37 @@ class VProperties(InstructionObject):
             elif line.startswith('color'):
                 instr['color'] = line.split()[1]
             elif line.startswith('rgbcolumn'):
-                instr['rgbcolumn'] = line.split()[1] 
+                instr['rgbcolumn'] = line.split()[1]
             elif line.startswith('width'):
                 instr['width'] = float(line.split()[1])
-                
+
         if 'label' not in instr:
             instr['label'] = '('.join(instr['name'].split('@')) + ')'
         if 'lpos' not in instr:
             instr['lpos'] = kwargs['vectorMapNumber']
         self.instruction.update(instr)
-        
+
         return True
 
+
 class Labels(InstructionObject):
     """Class representing labels instruction"""
+
     def __init__(self, id):
-        InstructionObject.__init__(self, id = id)
+        InstructionObject.__init__(self, id=id)
         self.type = 'labels'
         # default values
         self.defaultInstruction = dict(labels=[])
         # current values
         self.instruction = dict(self.defaultInstruction)
-        
+
     def __str__(self):
         instr = ''
         for label in self.instruction['labels']:
             instr += "labels %s\n" % label
             instr += "end\n"
         return instr
-    
+
     def Read(self, instruction, text, **kwargs):
         """Read instruction and save information"""
         for line in text:
@@ -1849,6 +2157,5 @@ class Labels(InstructionObject):
             except(IndexError, ValueError):
                 GError(_("Failed to read instruction %s") % instruction)
                 return False
-        
 
         return True
diff --git a/gui/wxpython/psmap/menudata.py b/gui/wxpython/psmap/menudata.py
index a798efd..c3f7df9 100644
--- a/gui/wxpython/psmap/menudata.py
+++ b/gui/wxpython/psmap/menudata.py
@@ -19,13 +19,18 @@ import os
 from core import globalvar
 from core.menutree import MenuTreeModelBuilder
 
+
 class PsMapMenuData(MenuTreeModelBuilder):
-    def __init__(self, path = None):
+
+    def __init__(self, path=None):
         """Menu for Cartographic Composer (psmap.py)
-        
+
         :param path: path to XML to be read (None for menudata_psmap.xml)
         """
         if not path:
-            path = os.path.join(globalvar.WXGUIDIR, 'xml', 'menudata_psmap.xml')
-        
+            path = os.path.join(
+                globalvar.WXGUIDIR,
+                'xml',
+                'menudata_psmap.xml')
+
         MenuTreeModelBuilder.__init__(self, path)
diff --git a/gui/wxpython/psmap/toolbars.py b/gui/wxpython/psmap/toolbars.py
index 3168583..41cf97d 100644
--- a/gui/wxpython/psmap/toolbars.py
+++ b/gui/wxpython/psmap/toolbars.py
@@ -18,15 +18,17 @@ import sys
 
 import wx
 
-from core              import globalvar
+from core import globalvar
 from core.utils import _
 from gui_core.toolbars import BaseToolbar, BaseIcons
-from icons.icon        import MetaIcon
+from icons.icon import MetaIcon
+
 
 class PsMapToolbar(BaseToolbar):
+
     def __init__(self, parent, toolSwitcher):
         """Toolbar Cartographic Composer (psmap.py)
-        
+
         :param parent: parent window
         """
         BaseToolbar.__init__(self, parent, toolSwitcher)
@@ -37,10 +39,11 @@ class PsMapToolbar(BaseToolbar):
 
         self.InitToolbar(self._toolbarData())
         self._default = self.pointer
-        
+
         for tool in (self.pointer, self.pan, self.zoomin, self.zoomout,
                      self.drawGraphics, self.addMap):
-            self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
+            self.toolSwitcher.AddToolToGroup(
+                group='mouseUse', toolbar=self, tool=tool)
 
         # custom button for graphics mode selection
         # TODO: could this be somehow generalized?
@@ -49,68 +52,68 @@ class PsMapToolbar(BaseToolbar):
         self.arrowButton.Bind(wx.EVT_BUTTON, self.OnDrawGraphicsMenu)
 
         self.drawGraphicsAction = None
-        self.OnAddPoint(event = None)
+        self.OnAddPoint(event=None)
 
         self.Realize()
 
         from psmap.frame import havePILImage
         if not havePILImage:
             self.EnableTool(self.preview, False)
-        
+
     def _toolbarData(self):
         """Toolbar data
         """
         icons = {
-            'scriptSave' : MetaIcon(img = 'script-save',
-                                    label = _('Generate text file with mapping instructions')),
-            'scriptLoad' : MetaIcon(img = 'script-load',
-                                    label = _('Load text file with mapping instructions')),                           
-            'psExport'   : MetaIcon(img = 'ps-export',
-                                    label = _('Generate PostScript output')),
-            'pdfExport'  : MetaIcon(img = 'pdf-export',
-                                    label = _('Generate PDF output')),
-            'pageSetup'  : MetaIcon(img = 'page-settings',
-                                    label = _('Page setup'),
-                                    desc = _('Specify paper size, margins and orientation')),
-            'fullExtent' : MetaIcon(img = 'zoom-extent',
-                                    label = _("Full extent"),
-                                    desc = _("Zoom to full extent")),
-            'addMap'     : MetaIcon(img = 'layer-add',
-                                    label = _("Map frame"),
-                                    desc = _("Click and drag to place map frame")),
-            'deleteObj'  : MetaIcon(img = 'layer-remove',
-                                    label = _("Delete selected object")),
-            'preview'    : MetaIcon(img = 'execute',
-                                    label = _("Show preview")),
-            'quit'       : MetaIcon(img = 'quit',
-                                    label = _('Quit Cartographic Composer')),
-            'addText'    : MetaIcon(img = 'text-add',
-                                    label = _('Text')),
-            'addMapinfo' : MetaIcon(img = 'map-info',
-                                    label = _('Map info')),
-            'addLegend'  : MetaIcon(img = 'legend-add',
-                                    label = _('Legend')),
-            'addScalebar' : MetaIcon(img = 'scalebar-add',
-                                     label = _('Scale bar')),
-            'addImage'   : MetaIcon(img = 'image-add',
-                                    label = _('Image')),
-            'addNorthArrow': MetaIcon(img = 'north-arrow-add',
-                                      label = _('North Arrow')),
-            'pointAdd'    : MetaIcon(img = 'point-add',
-                                     label = _('Point')),
-            'lineAdd'     : MetaIcon(img = 'line-add',
-                                     label = _('Line')),
-            'rectangleAdd': MetaIcon(img = 'rectangle-add',
-                                     label = _('Rectangle')),
-            'overlaysAdd': MetaIcon(img = 'layer-more',
-                                    label = _("Add overlays")),
-            'labelsAdd': MetaIcon(img = 'layer-label-add',
-                                    label = _("Add labels"))
-            }
+            'scriptSave': MetaIcon(img='script-save',
+                                   label=_('Generate text file with mapping instructions')),
+            'scriptLoad': MetaIcon(img='script-load',
+                                   label=_('Load text file with mapping instructions')),
+            'psExport': MetaIcon(img='ps-export',
+                                 label=_('Generate PostScript output')),
+            'pdfExport': MetaIcon(img='pdf-export',
+                                  label=_('Generate PDF output')),
+            'pageSetup': MetaIcon(img='page-settings',
+                                  label=_('Page setup'),
+                                  desc=_('Specify paper size, margins and orientation')),
+            'fullExtent': MetaIcon(img='zoom-extent',
+                                   label=_("Full extent"),
+                                   desc=_("Zoom to full extent")),
+            'addMap': MetaIcon(img='layer-add',
+                               label=_("Map frame"),
+                               desc=_("Click and drag to place map frame")),
+            'deleteObj': MetaIcon(img='layer-remove',
+                                  label=_("Delete selected object")),
+            'preview': MetaIcon(img='execute',
+                                label=_("Show preview")),
+            'quit': MetaIcon(img='quit',
+                             label=_('Quit Cartographic Composer')),
+            'addText': MetaIcon(img='text-add',
+                                label=_('Text')),
+            'addMapinfo': MetaIcon(img='map-info',
+                                   label=_('Map info')),
+            'addLegend': MetaIcon(img='legend-add',
+                                  label=_('Legend')),
+            'addScalebar': MetaIcon(img='scalebar-add',
+                                    label=_('Scale bar')),
+            'addImage': MetaIcon(img='image-add',
+                                 label=_('Image')),
+            'addNorthArrow': MetaIcon(img='north-arrow-add',
+                                      label=_('North Arrow')),
+            'pointAdd': MetaIcon(img='point-add',
+                                 label=_('Point')),
+            'lineAdd': MetaIcon(img='line-add',
+                                label=_('Line')),
+            'rectangleAdd': MetaIcon(img='rectangle-add',
+                                     label=_('Rectangle')),
+            'overlaysAdd': MetaIcon(img='layer-more',
+                                    label=_("Add overlays")),
+            'labelsAdd': MetaIcon(img='layer-label-add',
+                                  label=_("Add labels"))
+        }
         self.icons = icons
-        
+
         return self._getToolbarData((('loadFile', icons['scriptLoad'],
-                                      self.parent.OnLoadFile),                                    
+                                      self.parent.OnLoadFile),
                                      ('instructionFile', icons['scriptSave'],
                                       self.parent.OnInstructionFile),
                                      (None, ),
@@ -135,7 +138,7 @@ class PsMapToolbar(BaseToolbar):
                                      ('addVector', BaseIcons['addVect'],
                                       self.parent.OnAddVect),
                                      ('overlaysAdd', icons['overlaysAdd'],
-                                      self.OnAddOverlays), 
+                                      self.OnAddOverlays),
                                      ("delete", icons["deleteObj"],
                                       self.parent.OnDelete),
                                      ("dec", BaseIcons["overlay"],
@@ -159,11 +162,11 @@ class PsMapToolbar(BaseToolbar):
     def OnDecoration(self, event):
         """Decorations overlay menu
         """
-        self._onMenu(((self.icons["addLegend"],     self.parent.OnAddLegend),
-                      (self.icons["addMapinfo"],    self.parent.OnAddMapinfo),
-                      (self.icons["addScalebar"],   self.parent.OnAddScalebar),
-                      (self.icons["addText"],       self.parent.OnAddText),
-                      (self.icons["addImage"],      self.parent.OnAddImage),
+        self._onMenu(((self.icons["addLegend"], self.parent.OnAddLegend),
+                      (self.icons["addMapinfo"], self.parent.OnAddMapinfo),
+                      (self.icons["addScalebar"], self.parent.OnAddScalebar),
+                      (self.icons["addText"], self.parent.OnAddText),
+                      (self.icons["addImage"], self.parent.OnAddImage),
                       (self.icons["addNorthArrow"], self.parent.OnAddNorthArrow)))
 
     def OnAddOverlays(self, event):
@@ -182,18 +185,22 @@ class PsMapToolbar(BaseToolbar):
     def OnDrawGraphicsMenu(self, event):
         """Simple geometry features (point, line, rectangle) overlay menu
         """
-        self._onMenu(((self.icons["pointAdd"],      self.OnAddPoint),
-                      (self.icons["lineAdd"],       self.OnAddLine),
-                      (self.icons["rectangleAdd"],  self.OnAddRectangle),
-                    ))
+        self._onMenu(((self.icons["pointAdd"], self.OnAddPoint),
+                      (self.icons["lineAdd"], self.OnAddLine),
+                      (self.icons["rectangleAdd"], self.OnAddRectangle),
+                      ))
 
     def OnAddPoint(self, event):
         """Point mode selected.
 
         Graphics drawing tool is activated. Tooltip changed.
         """
-        self.SetToolNormalBitmap(self.drawGraphics, self.icons["pointAdd"].GetBitmap())
-        self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: points"))
+        self.SetToolNormalBitmap(
+            self.drawGraphics,
+            self.icons["pointAdd"].GetBitmap())
+        self.SetToolShortHelp(
+            self.drawGraphics,
+            _("Add simple graphics: points"))
         self.drawGraphicsAction = 'pointAdd'
         if event:
             self.ToggleTool(self.drawGraphics, True)
@@ -204,8 +211,12 @@ class PsMapToolbar(BaseToolbar):
 
         Graphics drawing tool is activated. Tooltip changed.
         """
-        self.SetToolNormalBitmap(self.drawGraphics, self.icons["lineAdd"].GetBitmap())
-        self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: lines"))
+        self.SetToolNormalBitmap(
+            self.drawGraphics,
+            self.icons["lineAdd"].GetBitmap())
+        self.SetToolShortHelp(
+            self.drawGraphics,
+            _("Add simple graphics: lines"))
         self.ToggleTool(self.drawGraphics, True)
         if event:
             self.drawGraphicsAction = 'lineAdd'
@@ -216,8 +227,12 @@ class PsMapToolbar(BaseToolbar):
 
         Graphics drawing tool is activated. Tooltip changed.
         """
-        self.SetToolNormalBitmap(self.drawGraphics, self.icons["rectangleAdd"].GetBitmap())
-        self.SetToolShortHelp(self.drawGraphics, _("Add simple graphics: rectangles"))
+        self.SetToolNormalBitmap(
+            self.drawGraphics,
+            self.icons["rectangleAdd"].GetBitmap())
+        self.SetToolShortHelp(
+            self.drawGraphics,
+            _("Add simple graphics: rectangles"))
         self.ToggleTool(self.drawGraphics, True)
         if event:
             self.drawGraphicsAction = 'rectangleAdd'
diff --git a/gui/wxpython/psmap/utils.py b/gui/wxpython/psmap/utils.py
index 51ca62b..591ba6f 100644
--- a/gui/wxpython/psmap/utils.py
+++ b/gui/wxpython/psmap/utils.py
@@ -27,9 +27,10 @@ except ImportError:
     havePILImage = False
 
 import grass.script as grass
-from core.gcmd          import RunCommand
+from core.gcmd import RunCommand
 from core.utils import _
 
+
 class Rect2D(wx.Rect2D):
     """Class representing rectangle with floating point values.
 
@@ -37,12 +38,13 @@ class Rect2D(wx.Rect2D):
     different (e.g. wx.Rect.GetTopLeft() x wx.Rect2D.GetLeftTop()).
     More methods can be added depending on needs.
     """
-    def __init__(self, x = 0, y = 0, width = 0, height = 0):
-        wx.Rect2D.__init__(self, x = x, y = y, w = width, h = height)
+
+    def __init__(self, x=0, y=0, width=0, height=0):
+        wx.Rect2D.__init__(self, x=x, y=y, w=width, h=height)
 
     def GetX(self):
         return self.x
-        
+
     def GetY(self):
         return self.y
 
@@ -51,20 +53,22 @@ class Rect2D(wx.Rect2D):
 
     def SetWidth(self, width):
         self.width = width
-        
+
     def GetHeight(self):
         return self.height
 
     def SetHeight(self, height):
         self.height = height
 
+
 class Rect2DPP(Rect2D):
     """Rectangle specified by 2 points (with floating point values).
 
     :class:`Rect2D`, :class:`Rect2DPS`
     """
-    def __init__(self, topLeft = wx.Point2D(), bottomRight = wx.Point2D()):
-        Rect2D.__init__(self, x = 0, y = 0, width = 0, height = 0)
+
+    def __init__(self, topLeft=wx.Point2D(), bottomRight=wx.Point2D()):
+        Rect2D.__init__(self, x=0, y=0, width=0, height=0)
 
         x1, y1 = topLeft[0], topLeft[1]
         x2, y2 = bottomRight[0], bottomRight[1]
@@ -74,90 +78,114 @@ class Rect2DPP(Rect2D):
         self.SetRight(max(x1, x2))
         self.SetBottom(max(y1, y2))
 
+
 class Rect2DPS(Rect2D):
     """Rectangle specified by point and size (with floating point values).
 
     :class:`Rect2D`, :class:`Rect2DPP`
     """
-    def __init__(self, pos = wx.Point2D(), size = (0, 0)):
-        Rect2D.__init__(self, x = pos[0], y = pos[1], width = size[0], height = size[1])
+
+    def __init__(self, pos=wx.Point2D(), size=(0, 0)):
+        Rect2D.__init__(
+            self, x=pos[0],
+            y=pos[1],
+            width=size[0],
+            height=size[1])
+
 
 class UnitConversion:
     """ Class for converting units"""
-    def __init__(self, parent = None):
+
+    def __init__(self, parent=None):
         self.parent = parent
         if self.parent:
             ppi = wx.ClientDC(self.parent).GetPPI()
-        else: 
+        else:
             ppi = (72, 72)
-        self._unitsPage = { 'inch'          : {'val': 1.0, 'tr' : _("inch")},
-                            'point'         : {'val': 72.0, 'tr' : _("point")},
-                            'centimeter'    : {'val': 2.54, 'tr' : _("centimeter")},
-                            'millimeter'    : {'val': 25.4, 'tr' : _("millimeter")}}
-        self._unitsMap = {  'meters'        : {'val': 0.0254, 'tr' : _("meters")},
-                            'kilometers'    : {'val': 2.54e-5, 'tr' : _("kilometers")},
-                            'feet'          : {'val': 1./12, 'tr' : _("feet")},
-                            'miles'         : {'val': 1./63360, 'tr' : _("miles")},
-                            'nautical miles': {'val': 1/72913.386, 'tr' : _("nautical miles")}}
-
-        self._units = { 'pixel'     : {'val': ppi[0], 'tr' : _("pixel")},
-                        'meter'     : {'val': 0.0254, 'tr' : _("meter")},
-                        'nautmiles' : {'val': 1/72913.386, 'tr' :_("nautical miles")},
-                        'degrees'   : {'val': 0.0254 , 'tr' : _("degree")} #like 1 meter, incorrect
-                        }
+        self._unitsPage = {'inch': {'val': 1.0, 'tr': _("inch")},
+                           'point': {'val': 72.0, 'tr': _("point")},
+                           'centimeter': {'val': 2.54, 'tr': _("centimeter")},
+                           'millimeter': {'val': 25.4, 'tr': _("millimeter")}}
+        self._unitsMap = {
+            'meters': {
+                'val': 0.0254,
+                'tr': _("meters")},
+            'kilometers': {
+                'val': 2.54e-5,
+                'tr': _("kilometers")},
+            'feet': {
+                'val': 1. / 12,
+                'tr': _("feet")},
+            'miles': {
+                'val': 1. / 63360,
+                'tr': _("miles")},
+            'nautical miles': {
+                'val': 1 / 72913.386,
+                'tr': _("nautical miles")}}
+
+        self._units = {'pixel': {'val': ppi[0], 'tr': _("pixel")},
+                       'meter': {'val': 0.0254, 'tr': _("meter")},
+                       'nautmiles': {'val': 1 / 72913.386, 'tr': _("nautical miles")},
+                       # like 1 meter, incorrect
+                       'degrees': {'val': 0.0254, 'tr': _("degree")}
+                       }
         self._units.update(self._unitsPage)
         self._units.update(self._unitsMap)
 
     def getPageUnitsNames(self):
-        return sorted(self._unitsPage[unit]['tr'] for unit in self._unitsPage.keys())
-    
+        return sorted(self._unitsPage[unit]['tr']
+                      for unit in self._unitsPage.keys())
+
     def getMapUnitsNames(self):
-        return sorted(self._unitsMap[unit]['tr'] for unit in self._unitsMap.keys())
-    
+        return sorted(self._unitsMap[unit]['tr']
+                      for unit in self._unitsMap.keys())
+
     def getAllUnits(self):
         return sorted(self._units.keys())
-    
+
     def findUnit(self, name):
         """Returns unit by its tr. string"""
         for unit in self._units.keys():
             if self._units[unit]['tr'] == name:
                 return unit
         return None
-    
+
     def findName(self, unit):
         """Returns tr. string of a unit"""
         try:
             return self._units[unit]['tr']
         except KeyError:
             return None
-    
-    def convert(self, value, fromUnit = None, toUnit = None):
-        return float(value) / self._units[fromUnit]['val'] * self._units[toUnit]['val']
+
+    def convert(self, value, fromUnit=None, toUnit=None):
+        return float(
+            value) / self._units[fromUnit]['val'] * self._units[toUnit]['val']
+
 
 def convertRGB(rgb):
     """Converts wx.Colour(r,g,b,a) to string 'r:g:b' or named color,
             or named color/r:g:b string to wx.Colour, depending on input"""
-    # transform a wx.Colour tuple into an r:g:b string    
-    if type(rgb) == wx.Colour:
-        for name, color in grass.named_colors.items(): 
+    # transform a wx.Colour tuple into an r:g:b string
+    if isinstance(rgb, wx.Colour):
+        for name, color in grass.named_colors.items():
             if  rgb.Red() == int(color[0] * 255) and\
-                rgb.Green() == int(color[1] * 255) and\
-                rgb.Blue() == int(color[2] * 255):
+                    rgb.Green() == int(color[1] * 255) and\
+                    rgb.Blue() == int(color[2] * 255):
                 return name
         return str(rgb.Red()) + ':' + str(rgb.Green()) + ':' + str(rgb.Blue())
     # transform a GRASS named color or an r:g:b string into a wx.Colour tuple
     else:
-        color = (grass.parse_color(rgb)[0]*255,
-                 grass.parse_color(rgb)[1]*255,
-                 grass.parse_color(rgb)[2]*255)
+        color = (grass.parse_color(rgb)[0] * 255,
+                 grass.parse_color(rgb)[1] * 255,
+                 grass.parse_color(rgb)[2] * 255)
         color = wx.Colour(*color)
         if color.IsOk():
             return color
-        else:  
+        else:
             return None
-        
-        
-def PaperMapCoordinates(mapInstr, x, y, paperToMap = True):
+
+
+def PaperMapCoordinates(mapInstr, x, y, paperToMap=True):
     """Converts paper (inch) coordinates <-> map coordinates.
 
     :param mapInstr: map frame instruction
@@ -199,25 +227,25 @@ def AutoAdjust(self, scaleType, rect, map=None, mapType=None, region=None):
     (scale is not fixed)
     """
     currRegionDict = {}
-    if scaleType == 0 and map:# automatic, region from raster or vector
+    if scaleType == 0 and map:  # automatic, region from raster or vector
         res = ''
-        if mapType == 'raster': 
+        if mapType == 'raster':
             try:
-                res = grass.read_command("g.region", flags = 'gu', raster = map)
+                res = grass.read_command("g.region", flags='gu', raster=map)
             except grass.ScriptError:
                 pass
         elif mapType == 'vector':
-            res = grass.read_command("g.region", flags = 'gu', vector = map)
-        currRegionDict = grass.parse_key_val(res, val_type = float)
-    elif scaleType == 1 and region: # saved region
-        res = grass.read_command("g.region", flags = 'gu', region = region)
-        currRegionDict = grass.parse_key_val(res, val_type = float)
-    elif scaleType == 2: # current region
+            res = grass.read_command("g.region", flags='gu', vector=map)
+        currRegionDict = grass.parse_key_val(res, val_type=float)
+    elif scaleType == 1 and region:  # saved region
+        res = grass.read_command("g.region", flags='gu', region=region)
+        currRegionDict = grass.parse_key_val(res, val_type=float)
+    elif scaleType == 2:  # current region
         currRegionDict = grass.region()
-                                                                
+
     else:
         return None, None, None
-    
+
     if not currRegionDict:
         return None, None, None
     rX = rect.x
@@ -230,29 +258,42 @@ def AutoAdjust(self, scaleType, rect, map=None, mapType=None, region=None):
     if projInfo()['proj'] != 'xy':
         toM = float(projInfo()['meters'])
 
-    mW = self.unitConv.convert(value = (currRegionDict['e'] - currRegionDict['w']) * toM, fromUnit = 'meter', toUnit = 'inch')
-    mH = self.unitConv.convert(value = (currRegionDict['n'] - currRegionDict['s']) * toM, fromUnit = 'meter', toUnit = 'inch')
-    scale = min(rW/mW, rH/mH)
-    
-    if rW/rH > mW/mH:
-        x = rX - (rH*(mW/mH) - rW)/2
+    mW = self.unitConv.convert(
+        value=(
+            currRegionDict['e'] -
+            currRegionDict['w']) *
+        toM,
+        fromUnit='meter',
+        toUnit='inch')
+    mH = self.unitConv.convert(
+        value=(
+            currRegionDict['n'] -
+            currRegionDict['s']) *
+        toM,
+        fromUnit='meter',
+        toUnit='inch')
+    scale = min(rW / mW, rH / mH)
+
+    if rW / rH > mW / mH:
+        x = rX - (rH * (mW / mH) - rW) / 2
         y = rY
-        rWNew = rH*(mW/mH)
+        rWNew = rH * (mW / mH)
         rHNew = rH
     else:
         x = rX
-        y = rY - (rW*(mH/mW) - rH)/2
-        rHNew = rW*(mH/mW)
+        y = rY - (rW * (mH / mW) - rH) / 2
+        rHNew = rW * (mH / mW)
         rWNew = rW
 
     # center
-    cE = (currRegionDict['w'] + currRegionDict['e'])/2
-    cN = (currRegionDict['n'] + currRegionDict['s'])/2
-    return scale, (cE, cN), Rect2D(x, y, rWNew, rHNew) #inch
+    cE = (currRegionDict['w'] + currRegionDict['e']) / 2
+    cN = (currRegionDict['n'] + currRegionDict['s']) / 2
+    return scale, (cE, cN), Rect2D(x, y, rWNew, rHNew)  # inch
+
 
 def SetResolution(dpi, width, height):
     """If resolution is too high, lower it
-    
+
     :param dpi: max DPI
     :param width: map frame width
     :param height: map frame height
@@ -261,59 +302,68 @@ def SetResolution(dpi, width, height):
     if region['cols'] > width * dpi or region['rows'] > height * dpi:
         rows = height * dpi
         cols = width * dpi
-        RunCommand('g.region', rows = rows, cols = cols)
-               
+        RunCommand('g.region', rows=rows, cols=cols)
+
+
 def ComputeSetRegion(self, mapDict):
     """Computes and sets region from current scale, map center
     coordinates and map rectangle
     """
 
-    if mapDict['scaleType'] == 3: # fixed scale
+    if mapDict['scaleType'] == 3:  # fixed scale
         scale = mapDict['scale']
-            
+
         if not hasattr(self, 'unitConv'):
             self.unitConv = UnitConversion(self)
-        
+
         fromM = 1
         if projInfo()['proj'] != 'xy':
             fromM = float(projInfo()['meters'])
-        rectHalfInch = (mapDict['rect'].width/2, mapDict['rect'].height/2)
-        rectHalfMeter = (self.unitConv.convert(value = rectHalfInch[0], fromUnit = 'inch', toUnit = 'meter')/ fromM /scale,
-                         self.unitConv.convert(value = rectHalfInch[1], fromUnit = 'inch', toUnit = 'meter')/ fromM /scale) 
-        
+        rectHalfInch = (mapDict['rect'].width / 2, mapDict['rect'].height / 2)
+        rectHalfMeter = (
+            self.unitConv.convert(
+                value=rectHalfInch[0],
+                fromUnit='inch',
+                toUnit='meter') / fromM / scale,
+            self.unitConv.convert(
+                value=rectHalfInch[1],
+                fromUnit='inch',
+                toUnit='meter') / fromM / scale)
+
         centerE = mapDict['center'][0]
         centerN = mapDict['center'][1]
-        
+
         raster = self.instruction.FindInstructionByType('raster')
         if raster:
-            rasterId = raster.id 
+            rasterId = raster.id
         else:
             rasterId = None
 
         if rasterId:
-            RunCommand('g.region', n = ceil(centerN + rectHalfMeter[1]),
-                       s = floor(centerN - rectHalfMeter[1]),
-                       e = ceil(centerE + rectHalfMeter[0]),
-                       w = floor(centerE - rectHalfMeter[0]),
-                       rast = self.instruction[rasterId]['raster'])
+            RunCommand('g.region', n=ceil(centerN + rectHalfMeter[1]),
+                       s=floor(centerN - rectHalfMeter[1]),
+                       e=ceil(centerE + rectHalfMeter[0]),
+                       w=floor(centerE - rectHalfMeter[0]),
+                       rast=self.instruction[rasterId]['raster'])
         else:
-            RunCommand('g.region', n = ceil(centerN + rectHalfMeter[1]),
-                       s = floor(centerN - rectHalfMeter[1]),
-                       e = ceil(centerE + rectHalfMeter[0]),
-                       w = floor(centerE - rectHalfMeter[0]))
-                    
+            RunCommand('g.region', n=ceil(centerN + rectHalfMeter[1]),
+                       s=floor(centerN - rectHalfMeter[1]),
+                       e=ceil(centerE + rectHalfMeter[0]),
+                       w=floor(centerE - rectHalfMeter[0]))
+
+
 def projInfo():
     """Return region projection and map units information,
     taken from render.py
     """
-    
+
     projinfo = dict()
-    
-    ret = RunCommand('g.proj', read = True, flags = 'p')
-    
+
+    ret = RunCommand('g.proj', read=True, flags='p')
+
     if not ret:
         return projinfo
-    
+
     for line in ret.splitlines():
         if ':' in line:
             key, val = line.split(':')
@@ -322,32 +372,38 @@ def projInfo():
             projinfo['proj'] = 'xy'
             projinfo['units'] = ''
             break
-    
+
     return projinfo
 
-def GetMapBounds(filename, portrait = True):
+
+def GetMapBounds(filename, portrait=True):
     """Run ps.map -b to get information about map bounding box
-    
+
     :param filename: psmap input file
     :param portrait: page orientation"""
     orient = ''
     if not portrait:
         orient = 'r'
     try:
-        bb = map(float, grass.read_command('ps.map',
-                                           flags = 'b' + orient,
-                                           quiet = True,
-                                           input = filename).strip().split('=')[1].split(','))
+        bb = map(
+            float,
+            grass.read_command(
+                'ps.map',
+                flags='b' +
+                orient,
+                quiet=True,
+                input=filename).strip().split('=')[1].split(','))
     except (grass.ScriptError, IndexError):
-        GError(message = _("Unable to run `ps.map -b`"))
+        GError(message=_("Unable to run `ps.map -b`"))
         return None
     return Rect2D(bb[0], bb[3], bb[2] - bb[0], bb[1] - bb[3])
 
+
 def getRasterType(map):
     """Returns type of raster map (CELL, FCELL, DCELL)"""
     if map is None:
         map = ''
-    file = grass.find_file(name = map, element = 'cell')
+    file = grass.find_file(name=map, element='cell')
     if file['file']:
         rasterType = grass.raster_info(map)['datatype']
         return rasterType
@@ -357,7 +413,7 @@ def getRasterType(map):
 
 def BBoxAfterRotation(w, h, angle):
     """Compute bounding box or rotated rectangle
-    
+
     :param w: rectangle width
     :param h: rectangle height
     :param angle: angle (0, 360) in degrees
@@ -365,13 +421,13 @@ def BBoxAfterRotation(w, h, angle):
     angleRad = angle / 180. * pi
     ct = cos(angleRad)
     st = sin(angleRad)
-    
+
     hct = h * ct
     wct = w * ct
     hst = h * st
     wst = w * st
     y = x = 0
-    
+
     if 0 < angle <= 90:
         y_min = y
         y_max = y + hct + wst
@@ -392,13 +448,15 @@ def BBoxAfterRotation(w, h, angle):
         y_max = y + hct
         x_min = x
         x_max = x + wct - hst
-        
+
     width = int(ceil(abs(x_max) + abs(x_min)))
     height = int(ceil(abs(y_max) + abs(y_min)))
     return width, height
 
 # hack for Windows, loading EPS works only on Unix
 # these functions are taken from EpsImagePlugin.py
+
+
 def loadPSForWindows(self):
     # Load EPS via Ghostscript
     if not self.tile:
@@ -408,13 +466,15 @@ def loadPSForWindows(self):
     self.size = self.im.size
     self.tile = []
 
+
 def GhostscriptForWindows(tile, size, fp):
     """Render an image using Ghostscript (Windows only)"""
     # Unpack decoder tile
     decoder, tile, offset, data = tile[0]
     length, bbox = data
 
-    import tempfile, os
+    import tempfile
+    import os
 
     file = tempfile.mkstemp()[1]
 
@@ -424,8 +484,8 @@ def GhostscriptForWindows(tile, size, fp):
                "-g%dx%d" % size,        # set output geometry (pixels)
                "-dNOPAUSE -dSAFER",     # don't pause between pages, safe mode
                "-sDEVICE=ppmraw",       # ppm driver
-               "-sOutputFile=%s" % file # output file
-              ]
+               "-sOutputFile=%s" % file  # output file
+               ]
 
     command = string.join(command)
 
@@ -448,7 +508,9 @@ def GhostscriptForWindows(tile, size, fp):
         im = PILImage.core.open_ppm(file)
 
     finally:
-        try: os.unlink(file)
-        except: pass
+        try:
+            os.unlink(file)
+        except:
+            pass
 
     return im
diff --git a/gui/wxpython/rdigit/__init__.py b/gui/wxpython/rdigit/__init__.py
new file mode 100644
index 0000000..658a05f
--- /dev/null
+++ b/gui/wxpython/rdigit/__init__.py
@@ -0,0 +1,4 @@
+all = [
+    'controller',
+    'toolbars'
+]
diff --git a/gui/wxpython/rdigit/controller.py b/gui/wxpython/rdigit/controller.py
new file mode 100644
index 0000000..a09dca5
--- /dev/null
+++ b/gui/wxpython/rdigit/controller.py
@@ -0,0 +1,611 @@
+# -*- coding: utf-8 -*-
+"""
+ at package rdigit.controller
+
+ at brief rdigit controller for drawing and rasterizing
+
+Classes:
+ - controller::RDigitController
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Anna Petrasova <kratochanna gmail.com>
+"""
+import os
+import tempfile
+import wx
+import uuid
+from wx.lib.newevent import NewEvent
+
+from grass.script import core as gcore
+from grass.script import raster as grast
+from grass.exceptions import CalledModuleError, ScriptError
+from grass.pydispatch.signal import Signal
+
+from core.gcmd import GError, GMessage
+from core.settings import UserSettings
+from core.gthread import gThread
+from rdigit.dialogs import NewRasterDialog
+
+updateProgress, EVT_UPDATE_PROGRESS = NewEvent()
+
+
+class RDigitController(wx.EvtHandler):
+    """Controller object for raster digitizer.
+    Inherits from EvtHandler to be able to send wx events from thraed.
+    """
+
+    def __init__(self, giface, mapWindow):
+        """Constructs controller
+
+        :param giface: grass interface object
+        :param mapWindow: instance of BufferedMapWindow
+        """
+        wx.EvtHandler.__init__(self)
+        self._giface = giface
+        self._mapWindow = mapWindow
+
+        # thread for running rasterization process
+        self._thread = gThread()
+        # name of raster map which is edited (also new one)
+        self._editedRaster = None
+        # name of optional background raster
+        self._backgroundRaster = None
+        # name of temporary raster used to backup original state
+        self._backupRasterName = None
+        # if we edit an old raster or a new one (important for setting color
+        # table)
+        self._editOldRaster = False
+        # type of output raster map (CELL, FCELL, DCELL)
+        self._mapType = None
+        # GraphicsSet for drawing areas, lines, points
+        self._areas = None
+        self._lines = None
+        self._points = None
+        # list of all GraphicsItems in the order of drawing
+        self._all = []
+        # if in state of drawing lin or area
+        self._drawing = False
+        # if running digitizing process in thread (to block drawing)
+        self._running = False
+        # color used to draw (should be moved to settings)
+        self._drawColor = wx.GREEN
+        # transparency used to draw (should be moved to settings)
+        self._drawTransparency = 100
+        # current selected drawing method
+        self._graphicsType = 'area'
+        # last edited cell value
+        self._currentCellValue = None
+        # last edited buffer value
+        self._currentWidthValue = None
+
+        self._oldMouseUse = None
+        self._oldCursor = None
+
+        # signal to add new raster to toolbar items
+        self.newRasterCreated = Signal('RDigitController:newRasterCreated')
+        # signal to add just used cell value in toolbar combo
+        self.newFeatureCreated = Signal('RDigitController:newFeatureCreated')
+        # signal to upload unique categories of background map into toolbar
+        # combo
+        self.uploadMapCategories = Signal(
+            'RDigitController:uploadMapCategories')
+        self.quitDigitizer = Signal('RDigitController:quitDigitizer')
+        self.showNotification = Signal('RDigitController:showNotification')
+
+    def _connectAll(self):
+        self._mapWindow.mouseLeftDown.connect(self._start)
+        self._mapWindow.mouseLeftUp.connect(self._addPoint)
+        self._mapWindow.mouseRightUp.connect(self._finish)
+        self._mapWindow.Unbind(wx.EVT_CONTEXT_MENU)
+
+    def _disconnectAll(self):
+        self._mapWindow.mouseLeftDown.disconnect(self._start)
+        self._mapWindow.mouseLeftUp.disconnect(self._addPoint)
+        self._mapWindow.mouseRightUp.disconnect(self._finish)
+        self._mapWindow.Bind(
+            wx.EVT_CONTEXT_MENU,
+            self._mapWindow.OnContextMenu)
+
+    def _start(self, x, y):
+        """Start digitizing a new object.
+        :param x: x coordinate in map units
+        :param y: y coordinate in map units
+        """
+        if self._running:
+            return
+
+        if not self._editedRaster:
+            GMessage(parent=self._mapWindow, message=_(
+                "Please select first the raster map"))
+            return
+        if not self._drawing:
+            if self._graphicsType == 'area':
+                item = self._areas.AddItem(coords=[])
+                item.SetPropertyVal('penName', 'pen1')
+                self._all.append(item)
+            elif self._graphicsType == 'line':
+                item = self._lines.AddItem(coords=[])
+                item.SetPropertyVal('penName', 'pen1')
+                self._all.append(item)
+            elif self._graphicsType == 'point':
+                item = self._points.AddItem(coords=[])
+                item.SetPropertyVal('penName', 'pen1')
+                self._all.append(item)
+            self._drawing = True
+
+    def _addPoint(self, x, y):
+        """Add point to an object.
+        :param x: x coordinate in map units
+        :param y: y coordinate in map units
+        """
+        if self._running:
+            return
+
+        if not self._drawing:
+            return
+
+        if self._graphicsType == 'area':
+            area = self._areas.GetItem(-1)
+            coords = area.GetCoords() + [[x, y]]
+            area.SetCoords(coords)
+            self.showNotification.emit(text=_("Right click to finish area"))
+        elif self._graphicsType == 'line':
+            line = self._lines.GetItem(-1)
+            coords = line.GetCoords() + [[x, y]]
+            line.SetCoords(coords)
+            self.showNotification.emit(text=_("Right click to finish line"))
+        elif self._graphicsType == 'point':
+            point = self._points.GetItem(-1)
+            point.SetCoords([x, y])
+            self._finish()
+        # draw
+        self._mapWindow.ClearLines()
+        self._lines.Draw()
+        self._areas.Draw()
+        self._points.Draw()
+        self._mapWindow.Refresh()
+
+    def _finish(self):
+        """Finish digitizing a new object and redraws.
+        Saves current cell value and buffer width for that object.
+
+        :param x: x coordinate in map units
+        :param y: y coordinate in map units
+        """
+        if self._running:
+            return
+
+        if self._graphicsType == 'point':
+            item = self._points.GetItem(-1)
+        elif self._graphicsType == 'area':
+            item = self._areas.GetItem(-1)
+        elif self._graphicsType == 'line':
+            item = self._lines.GetItem(-1)
+        else:
+            return
+
+        self._drawing = False
+        item.SetPropertyVal('brushName', 'done')
+        item.AddProperty('cellValue')
+        item.AddProperty('widthValue')
+        item.SetPropertyVal('cellValue', self._currentCellValue)
+        item.SetPropertyVal('widthValue', self._currentWidthValue)
+        self.newFeatureCreated.emit()
+
+        self._mapWindow.ClearLines()
+        self._points.Draw()
+        self._areas.Draw()
+        self._lines.Draw()
+
+        self._mapWindow.Refresh()
+
+    def SelectType(self, drawingType):
+        """Selects method (area/line/point) for drawing.
+        Connects and disconnects signal to allow other tools
+        in map toolbar to work.
+        """
+        if self._graphicsType and drawingType and self._graphicsType != drawingType \
+                and self._drawing:
+            # if we select different drawing tool, finish the feature
+            self._finish()
+
+        if self._graphicsType and not drawingType:
+            self._mapWindow.ClearLines(pdc=self._mapWindow.pdcTmp)
+            self._mapWindow.mouse['end'] = self._mapWindow.mouse['begin']
+            # disconnect mouse events
+            self._disconnectAll()
+            self._mapWindow.SetNamedCursor(self._oldCursor)
+            self._mapWindow.mouse['use'] = self._oldMouseUse
+        elif self._graphicsType is None and drawingType:
+            self._connectAll()
+            # change mouse['box'] and pen to draw line during dragging
+            # TODO: better solution for drawing this line
+            self._mapWindow.mouse['use'] = None
+            self._mapWindow.mouse['box'] = "line"
+            self._mapWindow.pen = wx.Pen(
+                colour='red', width=2, style=wx.SHORT_DASH)
+            # change the cursor
+            self._mapWindow.SetNamedCursor('pencil')
+
+        self._graphicsType = drawingType
+
+    def SetCellValue(self, value):
+        self._currentCellValue = value
+
+    def SetWidthValue(self, value):
+        self._currentWidthValue = value
+
+    def ChangeDrawColor(self, color):
+        self._drawColor = color[:3] + (self._drawTransparency,)
+        for each in (self._areas, self._lines, self._points):
+            each.GetPen('pen1').SetColour(self._drawColor)
+            each.GetBrush('done').SetColour(self._drawColor)
+        self._mapWindow.UpdateMap(render=False)
+
+    def Start(self):
+        """Registers graphics to map window,
+        connect required mouse signals.
+        """
+        self._oldMouseUse = self._mapWindow.mouse['use']
+        self._oldCursor = self._mapWindow.GetNamedCursor()
+
+        self._connectAll()
+
+        # change mouse['box'] and pen to draw line during dragging
+        # TODO: better solution for drawing this line
+        self._mapWindow.mouse['use'] = None
+        self._mapWindow.mouse['box'] = "line"
+        self._mapWindow.pen = wx.Pen(
+            colour='red', width=2, style=wx.SHORT_DASH)
+
+        color = self._drawColor[:3] + (self._drawTransparency,)
+        self._areas = self._mapWindow.RegisterGraphicsToDraw(
+            graphicsType='polygon', pdc=self._mapWindow.pdcTransparent, mapCoords=True)
+        self._areas.AddPen(
+            'pen1',
+            wx.Pen(
+                colour=color,
+                width=2,
+                style=wx.SOLID))
+        self._areas.AddBrush('done', wx.Brush(colour=color, style=wx.SOLID))
+
+        self._lines = self._mapWindow.RegisterGraphicsToDraw(
+            graphicsType='line', pdc=self._mapWindow.pdcTransparent, mapCoords=True)
+        self._lines.AddPen(
+            'pen1',
+            wx.Pen(
+                colour=color,
+                width=2,
+                style=wx.SOLID))
+        self._lines.AddBrush('done', wx.Brush(colour=color, style=wx.SOLID))
+
+        self._points = self._mapWindow.RegisterGraphicsToDraw(
+            graphicsType='point', pdc=self._mapWindow.pdcTransparent, mapCoords=True)
+        self._points.AddPen(
+            'pen1',
+            wx.Pen(
+                colour=color,
+                width=2,
+                style=wx.SOLID))
+        self._points.AddBrush('done', wx.Brush(colour=color, style=wx.SOLID))
+
+        # change the cursor
+        self._mapWindow.SetNamedCursor('pencil')
+
+    def Stop(self):
+        """Before stopping digitizer, asks to save edits"""
+        dlg = wx.MessageDialog(
+            self._mapWindow,
+            _("Do you want to save changes?"),
+            _("Save raster map changes"),
+            wx.YES_NO)
+        if dlg.ShowModal() == wx.ID_YES:
+            self._thread.Run(callable=self._exportRaster,
+                             ondone=lambda event: self._updateAndQuit())
+        else:
+            self.quitDigitizer.emit()
+
+    def Save(self):
+        """Saves current edits to a raster map"""
+        self._thread.Run(callable=self._exportRaster,
+                         ondone=lambda event: self._update())
+
+    def Undo(self):
+        """Undo a change, goes object back (finished or not finished)"""
+        if len(self._all):
+            removed = self._all.pop(-1)
+            # try to remove from each, it fails quietly when theitem is not
+            # there
+            self._areas.DeleteItem(removed)
+            self._lines.DeleteItem(removed)
+            self._points.DeleteItem(removed)
+            self._drawing = False
+            self._mapWindow.UpdateMap(render=False)
+
+    def CleanUp(self, restore=True):
+        """Cleans up drawing, temporary maps.
+        :param restore: if restore previous cursor, mouse['use']
+        """
+        try:
+            gcore.run_command(
+                'g.remove',
+                type='raster',
+                flags='f',
+                name=self._backupRasterName,
+                quiet=True)
+        except CalledModuleError:
+            pass
+
+        self._mapWindow.ClearLines(pdc=self._mapWindow.pdcTmp)
+        self._mapWindow.mouse['end'] = self._mapWindow.mouse['begin']
+        # disconnect mouse events
+        if self._graphicsType:
+            self._disconnectAll()
+        # unregister
+        self._mapWindow.UnregisterGraphicsToDraw(self._areas)
+        self._mapWindow.UnregisterGraphicsToDraw(self._lines)
+        self._mapWindow.UnregisterGraphicsToDraw(self._points)
+        #self._registeredGraphics = None
+        self._mapWindow.UpdateMap(render=False)
+
+        if restore:
+            # restore mouse['use'] and cursor to the state before measuring
+            # starts
+            self._mapWindow.SetNamedCursor(self._oldCursor)
+            self._mapWindow.mouse['use'] = self._oldMouseUse
+
+    def _updateAndQuit(self):
+        """Called when thread is done. Updates map and calls to quits digitizer."""
+        self._running = False
+        self._mapWindow.UpdateMap(render=True)
+        self.quitDigitizer.emit()
+
+    def _update(self):
+        """Called when thread is done. Updates map."""
+        self._running = False
+        self._mapWindow.UpdateMap(render=True)
+
+    def SelectOldMap(self, name):
+        """After selecting old raster, creates a backup copy for editing."""
+        try:
+            self._backupRaster(name)
+        except ScriptError:
+            GError(parent=self._mapWindow, message=_(
+                "Failed to create backup copy of edited raster map."))
+            return False
+        self._editedRaster = name
+        self._mapType = grast.raster_info(map=name)['datatype']
+        self._editOldRaster = True
+        return True
+
+    def SelectNewMap(self):
+        """After selecting new raster, shows dialog to choose name,
+        background map and type of the new map."""
+        dlg = NewRasterDialog(parent=self._mapWindow)
+        dlg.CenterOnParent()
+        if dlg.ShowModal() == wx.ID_OK:
+            try:
+                self._createNewMap(mapName=dlg.GetMapName(),
+                                   backgroundMap=dlg.GetBackgroundMapName(),
+                                   mapType=dlg.GetMapType())
+            except ScriptError:
+                GError(parent=self._mapWindow, message=_(
+                    "Failed to create new raster map."))
+                return False
+            finally:
+                dlg.Destroy()
+            return True
+        else:
+            dlg.Destroy()
+            return False
+
+    def _createNewMap(self, mapName, backgroundMap, mapType):
+        """Creates a new raster map based on specified background and type."""
+        name = mapName.split('@')[0]
+        background = backgroundMap.split('@')[0]
+        types = {'CELL': 'int', 'FCELL': 'float', 'DCELL': 'double'}
+        if background:
+            back = background
+        else:
+            back = 'null()'
+        try:
+            grast.mapcalc(
+                exp="{name} = {mtype}({back})".format(
+                    name=name,
+                    mtype=types[mapType],
+                    back=back),
+                overwrite=True,
+                quiet=True)
+            if background:
+                self._backgroundRaster = backgroundMap
+                gcore.run_command(
+                    'r.colors',
+                    map=name,
+                    raster=self._backgroundRaster,
+                    quiet=True)
+                if mapType == 'CELL':
+                    values = gcore.read_command('r.describe', flags='1n',
+                                                map=name, quiet=True).strip()
+                    if values:
+                        self.uploadMapCategories.emit(
+                            values=values.split('\n'))
+        except CalledModuleError:
+            raise ScriptError
+        self._backupRaster(name)
+
+        name = name + '@' + gcore.gisenv()['MAPSET']
+        self._editedRaster = name
+        self._mapType = mapType
+        self.newRasterCreated.emit(name=name)
+
+    def _backupRaster(self, name):
+        """Creates a temporary backup raster necessary for undo behavior.
+
+        :param str name: name of raster map for which we create backup
+        """
+        name = name.split('@')[0]
+        backup = name + '_backupcopy_' + str(os.getpid())
+        try:
+            gcore.run_command('g.copy', raster=[name, backup], quiet=True)
+        except CalledModuleError:
+            raise ScriptError
+
+        self._backupRasterName = backup
+
+    def _exportRaster(self):
+        """Rasterizes digitized features.
+
+        Uses r.in.poly and r.grow for buffering features. Creates separate raster
+        maps depending on common cell values and buffering width necessary to
+        keep the order of editing. These rasters are then patched together.
+        Sets default color table for the newly digitized raster.
+        """
+        if not self._editedRaster or self._running:
+            return
+        self._running = True
+
+        if self._drawing:
+            self._finish()
+
+        if len(self._all) < 1:
+            new = self._editedRaster
+            if '@' in self._editedRaster:
+                new = self._editedRaster.split('@')[0]
+            gcore.run_command('g.copy', raster=[self._backupRasterName, new],
+                              overwrite=True, quiet=True)
+        else:
+            tempRaster = 'tmp_rdigit_rast_' + str(os.getpid())
+            text = []
+            rastersToPatch = []
+            i = 0
+            lastCellValue = lastWidthValue = None
+            evt = updateProgress(
+                range=len(self._all),
+                value=0, text=_("Rasterizing..."))
+            wx.PostEvent(self, evt)
+            lastCellValue = self._all[0].GetPropertyVal('cellValue')
+            lastWidthValue = self._all[0].GetPropertyVal('widthValue')
+            for item in self._all:
+                if item.GetPropertyVal('widthValue') and \
+                    (lastCellValue != item.GetPropertyVal('cellValue') or
+                     lastWidthValue != item.GetPropertyVal('widthValue')):
+                    if text:
+                        out = self._rasterize(
+                            text, lastWidthValue, self._mapType, tempRaster)
+                        rastersToPatch.append(out)
+                        text = []
+                    self._writeItem(item, text)
+                    out = self._rasterize(
+                        text, item.GetPropertyVal('widthValue'),
+                        self._mapType, tempRaster)
+                    rastersToPatch.append(out)
+                    text = []
+                else:
+                    self._writeItem(item, text)
+
+                lastCellValue = item.GetPropertyVal('cellValue')
+                lastWidthValue = item.GetPropertyVal('widthValue')
+
+                i += 1
+                evt = updateProgress(
+                    range=len(self._all),
+                    value=i, text=_("Rasterizing..."))
+                wx.PostEvent(self, evt)
+            if text:
+                out = self._rasterize(text, item.GetPropertyVal('widthValue'),
+                                      self._mapType, tempRaster)
+                rastersToPatch.append(out)
+
+            gcore.run_command(
+                'r.patch', input=rastersToPatch[:: -1] +
+                [self._backupRasterName],
+                output=self._editedRaster, overwrite=True, quiet=True)
+            gcore.run_command(
+                'g.remove',
+                type='raster',
+                flags='f',
+                name=rastersToPatch +
+                [tempRaster],
+                quiet=True)
+        try:
+            # setting the right color table
+            if self._editOldRaster:
+                return
+            if not self._backgroundRaster:
+                table = UserSettings.Get(
+                    group='rasterLayer',
+                    key='colorTable',
+                    subkey='selection')
+                if not table:
+                    table = 'rainbow'
+                gcore.run_command(
+                    'r.colors',
+                    color=table,
+                    map=self._editedRaster,
+                    quiet=True)
+            else:
+                gcore.run_command('r.colors', map=self._editedRaster,
+                                  raster=self._backgroundRaster, quiet=True)
+        except CalledModuleError:
+            self._running = False
+            GError(parent=self._mapWindow, message=_(
+                "Failed to set default color table for edited raster map"))
+
+    def _writeFeature(self, item, vtype, text):
+        """Writes digitized features in r.in.poly format."""
+        coords = item.GetCoords()
+        if vtype == 'P':
+            coords = [coords]
+        cellValue = item.GetPropertyVal('cellValue')
+        record = '{vtype}\n'.format(vtype=vtype)
+        for coord in coords:
+            record += ' '.join([str(c) for c in coord])
+            record += '\n'
+        record += '= {cellValue}\n'.format(cellValue=cellValue)
+
+        text.append(record)
+
+    def _writeItem(self, item, text):
+        if item in self._areas.GetAllItems():
+            self._writeFeature(item, vtype='A', text=text)
+        elif item in self._lines.GetAllItems():
+            self._writeFeature(item, vtype='L', text=text)
+        elif item in self._points.GetAllItems():
+            self._writeFeature(item, vtype='P', text=text)
+
+    def _rasterize(self, text, bufferDist, mapType, tempRaster):
+        """Performs the actual rasterization using r.in.poly
+        and buffering with r.grow if required.
+
+        :param str text: string in r.in.poly format
+        :param float bufferDist: buffer distance in map units
+        :param str mapType: CELL, FCELL, DCELL
+        :param str tempRaster: name of temporary raster used in computation
+
+        :return: output raster map name as a result of digitization
+        """
+        output = 'x' + str(uuid.uuid4())[:8]
+        asciiFile = tempfile.NamedTemporaryFile(delete=False)
+        asciiFile.write('\n'.join(text))
+        asciiFile.close()
+
+        if bufferDist:
+            bufferDist /= 2.
+            gcore.run_command(
+                'r.in.poly',
+                input=asciiFile.name,
+                output=tempRaster,
+                type_=mapType,
+                overwrite=True,
+                quiet=True)
+            gcore.run_command('r.grow', input=tempRaster, output=output,
+                              flags='m', radius=bufferDist, quiet=True)
+        else:
+            gcore.run_command('r.in.poly', input=asciiFile.name, output=output,
+                              type_=mapType, quiet=True)
+        os.unlink(asciiFile.name)
+        return output
diff --git a/gui/wxpython/rdigit/dialogs.py b/gui/wxpython/rdigit/dialogs.py
new file mode 100644
index 0000000..8b72556
--- /dev/null
+++ b/gui/wxpython/rdigit/dialogs.py
@@ -0,0 +1,129 @@
+"""
+ at package rdigit.dialogs
+
+ at brief rdigit dialog for craeting new map.
+
+Classes:
+ - rdigit:NewRasterDialog
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Anna Petrasova <kratochanna gmail.com>
+"""
+
+import wx
+
+from core.utils import _
+from gui_core.gselect import Select
+from core.gcmd import GWarning
+
+import grass.script.core as gcore
+import grass.script.raster as grast
+from grass.exceptions import CalledModuleError
+
+
+class NewRasterDialog(wx.Dialog):
+    """Dialog for new raster map name and type selection
+    and selection of optional background map."""
+
+    def __init__(self, parent):
+        wx.Dialog.__init__(self, parent)
+        self.SetTitle(_("Create new raster map"))
+        self._name = None
+        self._type = None
+
+        # create widgets
+        self._mapSelect = Select(parent=self, type='raster')
+        self._backgroundSelect = Select(parent=self, type='raster')
+        self._typeChoice = wx.Choice(self, choices=['CELL', 'FCELL', 'DCELL'])
+        self._typeChoice.SetSelection(0)
+        self._mapSelect.SetFocus()
+
+        btnCancel = wx.Button(parent=self, id=wx.ID_CANCEL)
+        btnOK = wx.Button(parent=self, id=wx.ID_OK)
+        btnOK.SetDefault()
+        btnOK.Bind(wx.EVT_BUTTON, self.OnOK)
+
+        # do layout
+        mainSizer = wx.BoxSizer(wx.VERTICAL)
+        sizer = wx.GridBagSizer(hgap=10, vgap=10)
+        sizer.Add(wx.StaticText(self, label=_("Name for new raster map:")),
+                  pos=(0, 0), span=(1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        sizer.Add(self._mapSelect, pos=(1, 0), span=(1, 2))
+        sizer.Add(
+            wx.StaticText(
+                self, label=_("Optionally select background raster map:")), pos=(
+                2, 0), span=(
+                1, 2), flag=wx.ALIGN_CENTER_VERTICAL)
+        sizer.Add(self._backgroundSelect, pos=(3, 0), span=(1, 2))
+        sizer.Add(wx.StaticText(self, label=_("New raster map type:")),
+                  pos=(4, 0), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+        sizer.Add(self._typeChoice, pos=(4, 1), flag=wx.EXPAND)
+
+        mainSizer.Add(sizer, proportion=1, flag=wx.EXPAND | wx.ALL, border=10)
+
+        btnSizer = wx.StdDialogButtonSizer()
+        btnSizer.AddButton(btnCancel)
+        btnSizer.AddButton(btnOK)
+        btnSizer.Realize()
+
+        mainSizer.Add(btnSizer, flag=wx.EXPAND | wx.ALL, border=10)
+
+        self._backgroundSelect.Bind(wx.EVT_TEXT, self.OnBackgroundMap)
+
+        self.SetSizer(mainSizer)
+        mainSizer.Fit(self)
+
+    def OnBackgroundMap(self, event):
+        value = self._backgroundSelect.GetValue()
+        try:
+            ret = grast.raster_info(value)
+            self._typeChoice.SetStringSelection(ret['datatype'])
+        except CalledModuleError:
+            return
+
+    def OnOK(self, event):
+        mapName = self.GetMapName()
+        if not mapName:
+            GWarning(parent=self.GetParent(), message=_(
+                "Please specify name for a new raster map"))
+        else:
+            found = gcore.find_file(
+                name=mapName, mapset=gcore.gisenv()['MAPSET'])
+            if found and found['mapset'] == gcore.gisenv()['MAPSET']:
+                dlgOverwrite = wx.MessageDialog(
+                    self.GetParent(),
+                    message=_(
+                        "Raster map <%s> already exists "
+                        "in the current mapset. "
+                        "Do you want to overwrite it?") %
+                    mapName,
+                    caption=_("Overwrite?"),
+                    style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+                if not dlgOverwrite.ShowModal() == wx.ID_YES:
+                    dlgOverwrite.Destroy()
+                    return
+                else:
+                    dlgOverwrite.Destroy()
+                    self.EndModal(wx.ID_OK)
+            else:
+                self.EndModal(wx.ID_OK)
+
+    def GetMapName(self):
+        return self._mapSelect.GetValue()
+
+    def GetBackgroundMapName(self):
+        return self._backgroundSelect.GetValue()
+
+    def GetMapType(self):
+        return self._typeChoice.GetStringSelection()
+
+
+if __name__ == '__main__':
+    app = wx.App()
+    dlg = NewRasterDialog(None)
+    dlg.Show()
+    app.MainLoop()
diff --git a/gui/wxpython/rdigit/toolbars.py b/gui/wxpython/rdigit/toolbars.py
new file mode 100644
index 0000000..3424a09
--- /dev/null
+++ b/gui/wxpython/rdigit/toolbars.py
@@ -0,0 +1,194 @@
+"""
+ at package rdigit.toolbars
+
+ at brief rdigit toolbars and icons.
+
+Classes:
+ - toolbars::RDigitToolbar
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Anna Petrasova <kratochanna gmail.com>
+"""
+
+import wx
+
+from core.utils import _
+from gui_core.toolbars import BaseToolbar
+from icons.icon import MetaIcon
+from gui_core.widgets import FloatValidator
+import wx.lib.colourselect as csel
+
+
+rdigitIcons = {'area': MetaIcon(img='polygon-create',
+                                label=_('Digitize area')),
+               'line': MetaIcon(img='line-create',
+                                label=_('Digitize line')),
+               'point': MetaIcon(img='point-create',
+                                 label=_('Digitize point')),
+               'save': MetaIcon(img='save', label=_("Save raster map")),
+               'undo': MetaIcon(img='undo', label=_("Undo")),
+               'quit': MetaIcon(img='quit', label=_("Quit raster digitizer"))}
+
+
+class RDigitToolbar(BaseToolbar):
+    """RDigit toolbar
+    """
+
+    def __init__(self, parent, controller, toolSwitcher):
+        """RDigit toolbar constructor
+        """
+        BaseToolbar.__init__(self, parent, toolSwitcher)
+        self._controller = controller
+        self.InitToolbar(self._toolbarData())
+
+        self._mapSelectionComboId = wx.NewId()
+        self._mapSelectionCombo = wx.ComboBox(
+            self, id=self._mapSelectionComboId, value=_("Select raster map"),
+            choices=[],
+            size=(120, -1))
+        self._mapSelectionCombo.Bind(wx.EVT_COMBOBOX, self.OnMapSelection)
+        self._mapSelectionCombo.SetEditable(False)
+        self.InsertControl(0, self._mapSelectionCombo)
+        self._previousMap = self._mapSelectionCombo.GetValue()
+
+        self._colorId = wx.NewId()
+        self._color = csel.ColourSelect(parent=self, colour=wx.GREEN,
+                                        size=(30, 30))
+        self._color.Bind(
+            csel.EVT_COLOURSELECT,
+            lambda evt: self._changeDrawColor())
+        self._color.SetToolTipString(
+            _("Set drawing color (not raster cell color)"))
+        self.InsertControl(4, self._color)
+
+        self._cellValues = set(['1'])
+        self._valueComboId = wx.NewId()
+        # validator does not work with combobox, SetBackgroundColor is not
+        # working
+        self._valueCombo = wx.ComboBox(
+            self, id=self._valueComboId, choices=list(
+                self._cellValues), size=(
+                80, -1), validator=FloatValidator())
+        self._valueCombo.Bind(
+            wx.EVT_COMBOBOX,
+            lambda evt: self._cellValueChanged())
+        self._valueCombo.Bind(wx.EVT_TEXT,
+                              lambda evt: self._cellValueChanged())
+        self._valueCombo.SetSelection(0)
+        self._cellValueChanged()
+        self.InsertControl(
+            6, wx.StaticText(
+                self, label=" %s" %
+                _("Cell value:")))
+        self.InsertControl(7, self._valueCombo)
+
+        self._widthValueId = wx.NewId()
+        # validator does not work with combobox, SetBackgroundColor is not
+        # working
+        self._widthValue = wx.TextCtrl(
+            self, id=self._widthValueId, value='0', size=(
+                80, -1), validator=FloatValidator())
+        self._widthValue.Bind(wx.EVT_TEXT,
+                              lambda evt: self._widthValueChanged())
+        self._widthValueChanged()
+        self._widthValue.SetToolTipString(
+            _("Width of currently digitized line or diameter of a digitized point in map units."))
+        self.InsertControl(8, wx.StaticText(self, label=" %s" % _("Width:")))
+        self.InsertControl(9, self._widthValue)
+
+        for tool in (self.area, self.line, self.point):
+            self.toolSwitcher.AddToolToGroup(
+                group='mouseUse', toolbar=self, tool=tool)
+        self.toolSwitcher.toggleToolChanged.connect(self.CheckSelectedTool)
+        self._default = self.area
+        # realize the toolbar
+        self.Realize()
+
+    def _toolbarData(self):
+        """Toolbar data"""
+        return self._getToolbarData(
+            (('area', rdigitIcons['area'],
+              lambda event: self._controller.SelectType('area'),
+              wx.ITEM_CHECK),
+             ('line', rdigitIcons['line'],
+              lambda event: self._controller.SelectType('line'),
+              wx.ITEM_CHECK),
+             ('point', rdigitIcons['point'],
+              lambda event: self._controller.SelectType('point'),
+              wx.ITEM_CHECK),
+             (None,),
+             (None,),
+             ('undo', rdigitIcons['undo'],
+              lambda event: self._controller.Undo()),
+             ('save', rdigitIcons['save'],
+              lambda event: self._controller.Save()),
+             ('quit', rdigitIcons['quit'],
+              lambda event: self._controller.Stop())))
+
+    def CheckSelectedTool(self, id):
+        if self.toolSwitcher.IsToolInGroup(tool=id, group='mouseUse') \
+                and id not in (self.area, self.line, self.point):
+            self._controller.SelectType(None)
+
+    def UpdateRasterLayers(self, rasters):
+        new = _("New raster map")
+        items = [raster.name for raster in rasters if raster.name is not None]
+        items.insert(0, new)
+        self._mapSelectionCombo.SetItems(items)
+
+    def OnMapSelection(self, event):
+        """!Either map to edit or create new map selected."""
+        idx = self._mapSelectionCombo.GetSelection()
+        if idx == 0:
+            ret = self._controller.SelectNewMap()
+        else:
+            ret = self._controller.SelectOldMap(
+                self._mapSelectionCombo.GetString(idx))
+        if not ret:
+            # in wxpython 3 we can't set value which is not in the items
+            # when not editable
+            self._mapSelectionCombo.SetEditable(True)
+            self._mapSelectionCombo.SetValue(self._previousMap)
+            self._mapSelectionCombo.SetEditable(False)
+        # we need to get back to previous
+        self._previousMap = self._mapSelectionCombo.GetValue()
+
+    def NewRasterAdded(self, name):
+        idx = self._mapSelectionCombo.Append(name)
+        self._mapSelectionCombo.SetSelection(idx)
+
+    def UpdateCellValues(self, values=None):
+        orig = self._valueCombo.GetValue()
+        if not values:
+            values = [orig]
+        for value in values:
+            self._cellValues.add(str(value))
+
+        valList = sorted(list(self._cellValues), key=float)
+        self._valueCombo.SetItems(valList)
+        self._valueCombo.SetStringSelection(orig)
+
+    def _cellValueChanged(self):
+        value = self._valueCombo.GetValue()
+        try:
+            value = float(value)
+            self._controller.SetCellValue(value)
+        except ValueError:
+            return
+
+    def _widthValueChanged(self):
+        value = self._widthValue.GetValue()
+        try:
+            value = float(value)
+            self._controller.SetWidthValue(value)
+        except ValueError:
+            self._controller.SetWidthValue(0)
+            return
+
+    def _changeDrawColor(self):
+        color = self._color.GetColour()
+        self._controller.ChangeDrawColor(color=color)
diff --git a/gui/wxpython/rlisetup/__init__.py b/gui/wxpython/rlisetup/__init__.py
index e231199..6427a7a 100644
--- a/gui/wxpython/rlisetup/__init__.py
+++ b/gui/wxpython/rlisetup/__init__.py
@@ -4,4 +4,4 @@ all = [
     'functions',
     'frame',
     'sampling_frame'
-    ]
+]
diff --git a/gui/wxpython/rlisetup/frame.py b/gui/wxpython/rlisetup/frame.py
index c2cd377..3232d8e 100644
--- a/gui/wxpython/rlisetup/frame.py
+++ b/gui/wxpython/rlisetup/frame.py
@@ -18,10 +18,11 @@ import codecs
 
 
 class ViewFrame(wx.Frame):
+
     def __init__(self, parent, conf, giface=None, id=wx.ID_ANY,
                  title=_("Modify the configuration file"),
                  style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER, **kwargs):
-        ###VARIABLES
+        # VARIABLES
         self.parent = parent
         self.rlipath = retRLiPath()
         self.confile = conf
@@ -31,16 +32,18 @@ class ViewFrame(wx.Frame):
         self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'),
                              wx.BITMAP_TYPE_ICO))
         self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.confilesBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
-                                        label=_("View and modify the " \
-                                        "configuration file '{name}'".format(name=self.confile)))
+        self.confilesBox = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY, label=_(
+                "View and modify the "
+                "configuration file '{name}'".format(
+                    name=self.confile)))
         self.textCtrl = wx.TextCtrl(parent=self.panel, id=wx.ID_ANY,
                                     style=wx.TE_MULTILINE, size=(-1, 75))
         self.textCtrl.Bind(wx.EVT_TEXT, self.OnFileText)
         f = open(self.pathfile)
         self.textCtrl.SetValue(''.join(f.readlines()))
         f.close()
-        ###BUTTONS      #definition
+        # BUTTONS      #definition
         self.btn_close = wx.Button(parent=self, id=wx.ID_EXIT)
         self.btn_ok = wx.Button(parent=self, id=wx.ID_SAVE)
         self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
@@ -52,19 +55,19 @@ class ViewFrame(wx.Frame):
         """Set the layout"""
         panelsizer = wx.GridBagSizer(1, 1)
         mainsizer = wx.BoxSizer(wx.VERTICAL)
-        ###CONFILES
+        # CONFILES
         confilesSizer = wx.StaticBoxSizer(self.confilesBox, wx.HORIZONTAL)
         confilesSizer.Add(item=self.textCtrl, proportion=1, flag=wx.EXPAND)
-        ###END CONFILES
-        ###BUTTONS
+        # END CONFILES
+        # BUTTONS
         buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
         buttonSizer.Add(item=self.btn_ok, flag=wx.ALL, border=5)
         buttonSizer.Add(item=self.btn_close, flag=wx.ALL, border=5)
-        ###END BUTTONS
-        #add listbox to staticbox
+        # END BUTTONS
+        # add listbox to staticbox
         panelsizer.Add(item=confilesSizer, pos=(0, 0), flag=wx.EXPAND,
                        border=3)
-        #add panel and buttons
+        # add panel and buttons
         mainsizer.Add(item=self.panel, proportion=1, flag=wx.EXPAND, border=3)
         mainsizer.Add(item=buttonSizer, proportion=0, flag=wx.EXPAND, border=3)
         panelsizer.AddGrowableRow(0)
@@ -80,13 +83,16 @@ class ViewFrame(wx.Frame):
 
     def OnOk(self, event):
         """Launches help"""
-        dlg = wx.MessageDialog(parent=self.parent,
-                                message=_("Are you sure that you want modify" \
-                                          " r.li configuration file {name}?" \
-                                          "\nYou could broke the configuration" \
-                                          " file...").format(name=self.confile),
-                                caption=_("WARNING"),
-                                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_WARNING)
+        dlg = wx.MessageDialog(
+            parent=self.parent,
+            message=_(
+                "Are you sure that you want modify"
+                " r.li configuration file {name}?"
+                "\nYou could broke the configuration"
+                " file...").format(
+                name=self.confile),
+            caption=_("WARNING"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_WARNING)
 
         if dlg.ShowModal() == wx.ID_YES:
             f = codecs.open(self.pathfile, encoding=self.enc, mode='w',
@@ -102,28 +108,32 @@ class ViewFrame(wx.Frame):
 
 
 class RLiSetupFrame(wx.Frame):
-    def __init__(self, parent, giface=None, id=wx.ID_ANY, title=_("GRASS" \
-                 " GIS Setup for r.li modules"),
-                 style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER, **kwargs):
-        ###VARIABLES
+
+    def __init__(
+            self, parent, giface=None, id=wx.ID_ANY,
+            title=_("GRASS"
+                    " GIS Setup for r.li modules"),
+            style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER, **kwargs):
+        # VARIABLES
         self.parent = parent
 #        self.cmd = "r.li.setup"
         self.rlipath = retRLiPath()
         self.listfiles = self.ListFiles()
-        ###END VARIABLES
-        #init of frame
+        # END VARIABLES
+        # init of frame
         wx.Frame.__init__(self, parent=parent, id=id, title=title,
                           **kwargs)
         self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'),
                              wx.BITMAP_TYPE_ICO))
         self.panel = wx.Panel(parent=self, id=wx.ID_ANY)
-        #box for select configuration file
-        self.confilesBox = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
-                                        label=_('Available sampling area configuration files'))
-        self.listfileBox = wx.ListBox(parent=self.panel,  id=wx.ID_ANY,
-                    choices=self.listfiles)
+        # box for select configuration file
+        self.confilesBox = wx.StaticBox(
+            parent=self.panel, id=wx.ID_ANY,
+            label=_('Available sampling area configuration files'))
+        self.listfileBox = wx.ListBox(parent=self.panel, id=wx.ID_ANY,
+                                      choices=self.listfiles)
 
-        ###BUTTONS      #definition
+        # BUTTONS      #definition
         self.btn_close = wx.Button(parent=self, id=wx.ID_CLOSE)
         self.btn_help = wx.Button(parent=self, id=wx.ID_HELP)
         self.btn_remove = wx.Button(parent=self, id=wx.ID_ANY,
@@ -136,9 +146,9 @@ class RLiSetupFrame(wx.Frame):
                                     label=_("Rename"))
         self.btn_rename.SetToolTipString(_('Rename a configuration file'))
         self.btn_view = wx.Button(parent=self, id=wx.ID_ANY,
-                                    label=_("View/Edit"))
+                                  label=_("View/Edit"))
         self.btn_view.SetToolTipString(_('View and edit a configuration file'))
-        #set action for button
+        # set action for button
         self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btn_help.Bind(wx.EVT_BUTTON, self.OnHelp)
         self.btn_remove.Bind(wx.EVT_BUTTON, self.OnRemove)
@@ -146,23 +156,23 @@ class RLiSetupFrame(wx.Frame):
         self.btn_rename.Bind(wx.EVT_BUTTON, self.OnRename)
         self.btn_view.Bind(wx.EVT_BUTTON, self.OnView)
         self._layout()
-        ###END BUTTONS
-        ###SIZE FRAME
+        # END BUTTONS
+        # SIZE FRAME
         self.SetMinSize(self.GetBestSize())
-        ##Please check this because without this the size it is not the min
+        # Please check this because without this the size it is not the min
         self.SetClientSize(self.GetBestSize())
-        ###END SIZE
+        # END SIZE
 
     def _layout(self):
         """Set the layout"""
         panelsizer = wx.GridBagSizer(1, 1)
         mainsizer = wx.BoxSizer(wx.VERTICAL)
-        ###CONFILES
+        # CONFILES
         confilesSizer = wx.StaticBoxSizer(self.confilesBox, wx.HORIZONTAL)
         confilesSizer.Add(item=self.listfileBox, proportion=1,
-                         flag=wx.EXPAND)
-        ###END CONFILES
-        ###BUTTONS
+                          flag=wx.EXPAND)
+        # END CONFILES
+        # BUTTONS
         buttonSizer = wx.BoxSizer(wx.HORIZONTAL)
         buttonSizer.Add(item=self.btn_new, flag=wx.ALL, border=5)
         buttonSizer.Add(item=self.btn_rename, flag=wx.ALL, border=5)
@@ -170,12 +180,12 @@ class RLiSetupFrame(wx.Frame):
         buttonSizer.Add(item=self.btn_remove, flag=wx.ALL, border=5)
         buttonSizer.Add(item=self.btn_help, flag=wx.ALL, border=5)
         buttonSizer.Add(item=self.btn_close, flag=wx.ALL, border=5)
-        ###END BUTTONS
-        #add listbox to staticbox
+        # END BUTTONS
+        # add listbox to staticbox
         panelsizer.Add(item=confilesSizer, pos=(0, 0), flag=wx.EXPAND,
                        border=3)
 
-        #add panel and buttons
+        # add panel and buttons
         mainsizer.Add(item=self.panel, proportion=1, flag=wx.EXPAND, border=3)
         mainsizer.Add(item=buttonSizer, proportion=0, flag=wx.EXPAND, border=3)
 
@@ -191,8 +201,8 @@ class RLiSetupFrame(wx.Frame):
         """Check the configuration files inside the path"""
         # list of configuration file
         listfiles = []
-        #return all the configuration files in self.rlipath, check if there are
-        #link or directory and doesn't add them
+        # return all the configuration files in self.rlipath, check if there are
+        # link or directory and doesn't add them
         for l in os.listdir(self.rlipath):
             if os.path.isfile(os.path.join(self.rlipath, l)):
                 listfiles.append(l)
@@ -209,11 +219,14 @@ class RLiSetupFrame(wx.Frame):
     def OnRemove(self, event):
         """Remove configuration file from path and update the list"""
         confile = self.listfiles[self.listfileBox.GetSelections()[0]]
-        dlg = wx.MessageDialog(parent=self.parent,
-                                message=_("Do you want remove r.li " \
-                                          "configuration file <%s>?") % confile,
-                                caption=_("Remove new r.li configuration file?"),
-                                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+        dlg = wx.MessageDialog(
+            parent=self.parent,
+            message=_(
+                "Do you want remove r.li "
+                "configuration file <%s>?") %
+            confile,
+            caption=_("Remove new r.li configuration file?"),
+            style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
 
         if dlg.ShowModal() == wx.ID_YES:
             self.listfileBox.Delete(self.listfileBox.GetSelections()[0])
diff --git a/gui/wxpython/rlisetup/functions.py b/gui/wxpython/rlisetup/functions.py
index a28f241..15fb773 100644
--- a/gui/wxpython/rlisetup/functions.py
+++ b/gui/wxpython/rlisetup/functions.py
@@ -122,7 +122,7 @@ def sampleAreaVector(vect, rast, vect_cats, layer='1', overwrite=False,
     """Create the strings to add to the configuration file using vector"""
     areanum = len(vect_cats)
     output = []
-    #TODO if areanum == 0 exit from the program
+    # TODO if areanum == 0 exit from the program
     if areanum == 0:
         GError(message=_("The polygon seems to have 0 areas"))
         return None
@@ -133,8 +133,8 @@ def sampleAreaVector(vect, rast, vect_cats, layer='1', overwrite=False,
         rast_name = "{pref}{cat}".format(pref=outpref, cat=cat)
         # check if raster already axist
 
-        if len(grass.list_strings('raster', pattern=rast_name, mapset='.')) == 1 \
-           and not overwrite:
+        if len(grass.list_strings('raster', pattern=rast_name,
+                                  mapset='.')) == 1 and not overwrite:
             GError(message=_("The raster map <%s> already exists."
                              " Please remove or rename the maps "
                              "with the prefix '%s' or select the "
diff --git a/gui/wxpython/rlisetup/g.gui.rlisetup.html b/gui/wxpython/rlisetup/g.gui.rlisetup.html
index 2b4a5ee..38d16d9 100644
--- a/gui/wxpython/rlisetup/g.gui.rlisetup.html
+++ b/gui/wxpython/rlisetup/g.gui.rlisetup.html
@@ -351,4 +351,4 @@ Luca Delucchi<br>
 Rewritten from <em>r.li.setup</em> by Claudio Porta and Lucio Davide Spano
 
 <p>
-<i>$Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<i>$Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/gui/wxpython/rlisetup/g.gui.rlisetup.py b/gui/wxpython/rlisetup/g.gui.rlisetup.py
index 3a13a59..56dd9a2 100644
--- a/gui/wxpython/rlisetup/g.gui.rlisetup.py
+++ b/gui/wxpython/rlisetup/g.gui.rlisetup.py
@@ -33,6 +33,10 @@ def main():
     gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.giface import StandaloneGrassInterface
     from core.globalvar import CheckWxVersion
     from rlisetup.frame import RLiSetupFrame
diff --git a/gui/wxpython/rlisetup/sampling_frame.py b/gui/wxpython/rlisetup/sampling_frame.py
index 808c27a..0e5cbec 100644
--- a/gui/wxpython/rlisetup/sampling_frame.py
+++ b/gui/wxpython/rlisetup/sampling_frame.py
@@ -23,14 +23,14 @@ import wx
 import wx.aui
 
 
-#start new import
+# start new import
 import tempfile
 from core.gcmd import RunCommand
 import grass.script.core as grass
 from core import gcmd
 
 try:
-    from grass.lib.gis    import *
+    from grass.lib.gis import *
     from grass.lib.vector import *
     from grass.lib.raster import *
 except ImportError:
@@ -51,12 +51,14 @@ from functions import SamplingType, checkMapExists
 
 
 class Circle:
+
     def __init__(self, pt, r):
         self.point = pt
         self.radius = r
 
 
 class MaskedArea(object):
+
     def __init__(self, region, raster, radius):
         self.region = region
         self.raster = raster
@@ -65,6 +67,7 @@ class MaskedArea(object):
 
 class RLiSetupMapPanel(wx.Panel):
     """Panel with mapwindow used in r.li.setup"""
+
     def __init__(self, parent, samplingType, icon=None, map_=None):
         wx.Panel.__init__(self, parent=parent)
 
@@ -104,16 +107,22 @@ class RLiSetupMapPanel(wx.Panel):
 
         if self.samplingtype == SamplingType.REGIONS:
             self.afterRegionDrawn = Signal('RLiSetupMapPanel.afterRegionDrawn')
-            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(graphicsType='line')
+            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(
+                graphicsType='line')
         elif self.samplingtype in [SamplingType.MUNITSR, SamplingType.MMVWINR]:
-            self.sampleFrameChanged = Signal('RLiSetupMapPanel.sampleFrameChanged')
-            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(graphicsType='rectangle')
+            self.sampleFrameChanged = Signal(
+                'RLiSetupMapPanel.sampleFrameChanged')
+            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(
+                graphicsType='rectangle')
         elif self.samplingtype in [SamplingType.MUNITSC, SamplingType.MMVWINC]:
             self.afterCircleDrawn = Signal('RLiSetupMapPanel.afterCircleDrawn')
-            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(graphicsType='line')
+            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(
+                graphicsType='line')
         else:
-            self.sampleFrameChanged = Signal('RLiSetupMapPanel.sampleFrameChanged')
-            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(graphicsType='rectangle')
+            self.sampleFrameChanged = Signal(
+                'RLiSetupMapPanel.sampleFrameChanged')
+            self._registeredGraphics = self.mapWindow.RegisterGraphicsToDraw(
+                graphicsType='rectangle')
 
         self._registeredGraphics.AddPen('rlisetup', wx.Pen(wx.GREEN, width=2,
                                                            style=wx.SOLID))
@@ -176,13 +185,14 @@ class RLiSetupMapPanel(wx.Panel):
         item = self._registeredGraphics.GetItem(0)
         coords = item.GetCoords()
         if len(coords) == 0:
-            coords.extend([self.mapWindow.Pixel2Cell(self.mapWindow.mouse['begin'])])
+            coords.extend([self.mapWindow.Pixel2Cell(
+                self.mapWindow.mouse['begin'])])
         coords.extend([[x, y]])
 
         item.SetCoords(coords)
         item.SetPropertyVal('hide', False)
         self.mapWindow.ClearLines()
-        self._registeredGraphics.Draw(self.mapWindow.pdcTmp)
+        self._registeredGraphics.Draw()
 
     def _mouseDbClick(self, x, y):
         item = self._registeredGraphics.GetItem(0)
@@ -191,7 +201,7 @@ class RLiSetupMapPanel(wx.Panel):
         item.SetCoords(coords)
         item.SetPropertyVal('hide', False)
         self.mapWindow.ClearLines()
-        self._registeredGraphics.Draw(self.mapWindow.pdc)
+        self._registeredGraphics.Draw()
         self.createRegion()
 
     def createRegion(self):
@@ -202,12 +212,16 @@ class RLiSetupMapPanel(wx.Panel):
             if ret == wx.ID_OK:
                 raster = dlg.GetValue()
                 if checkMapExists(raster):
-                    GMessage(parent=self, message=_("The raster file %s already"
-                             " exists, please change name") % raster)
+                    GMessage(
+                        parent=self, message=_(
+                            "The raster file %s already"
+                            " exists, please change name") %
+                        raster)
                     ret = dlg.ShowModal()
                 else:
                     dlg.Destroy()
-                    marea = self.writeArea(self._registeredGraphics.GetItem(0).GetCoords(), raster)
+                    marea = self.writeArea(
+                        self._registeredGraphics.GetItem(0).GetCoords(), raster)
                     self.nextRegion(next=True, area=marea)
                     break
             else:
@@ -225,8 +239,8 @@ class RLiSetupMapPanel(wx.Panel):
         if next is True:
             self.afterRegionDrawn.emit(marea=area)
         else:
-            gcmd.GMessage(parent=self.parent,
-                          message=_("Raster map not created. Please redraw region."))
+            gcmd.GMessage(parent=self.parent, message=_(
+                "Raster map not created. Please redraw region."))
 
     def writeArea(self, coords, rasterName):
         polyfile = tempfile.NamedTemporaryFile(delete=False)
@@ -294,19 +308,24 @@ class RLiSetupMapPanel(wx.Panel):
         self.mapWindow.pdcTmp.SetPen(pen)
         self.mapWindow.pdcTmp.DrawCircle(circle.point[0], circle.point[1],
                                          circle.radius)
-        self._registeredGraphics.Draw(self.mapWindow.pdcTmp)
+        self._registeredGraphics.Draw()
         self.createCricle(circle)
 
     def createCricle(self, c):
-        dlg = wx.TextEntryDialog(None, 'Name of sample circle region',
-                                 'Create circle region', 'circle' + str(self.catId))
+        dlg = wx.TextEntryDialog(None,
+                                 'Name of sample circle region',
+                                 'Create circle region',
+                                 'circle' + str(self.catId))
         ret = dlg.ShowModal()
-        while True:        
+        while True:
             if ret == wx.ID_OK:
                 raster = dlg.GetValue()
                 if checkMapExists(raster):
-                    GMessage(parent=self, message=_("The raster file %s already"
-                             " exists, please change name") % raster)
+                    GMessage(
+                        parent=self, message=_(
+                            "The raster file %s already"
+                            " exists, please change name") %
+                        raster)
                     ret = dlg.ShowModal()
                 else:
                     dlg.Destroy()
@@ -326,8 +345,8 @@ class RLiSetupMapPanel(wx.Panel):
         if next is True:
             self.afterCircleDrawn.emit(region=circle)
         else:
-            gcmd.GMessage(parent=self.parent,
-                          message=_("Raster map not created. redraw region again."))
+            gcmd.GMessage(parent=self.parent, message=_(
+                "Raster map not created. redraw region again."))
 
     def writeCircle(self, circle, rasterName):
         coords = self.mapWindow.Pixel2Cell(circle.point)
@@ -352,7 +371,7 @@ class RLiSetupMapPanel(wx.Panel):
                   'e': max(p1[0], p2[0])}
         item.SetPropertyVal('hide', False)
         self.mapWindow.ClearLines()
-        self._registeredGraphics.Draw(self.mapWindow.pdcTmp)
+        self._registeredGraphics.Draw()
         if self.samplingtype in [SamplingType.MUNITSR, SamplingType.MMVWINR]:
             dlg = wx.MessageDialog(self, "Is this area ok?",
                                    "select sampling unit",
@@ -378,23 +397,29 @@ class RLiSetupMapPanel(wx.Panel):
             """When drawing finished, get region values"""
             self.sampleFrameChanged.emit(region=region)
 
-icons = {'draw': MetaIcon(img='edit',
-                          label=_('Draw sampling frame'),
-                          desc=_('Draw sampling frame by clicking and dragging')),
-         'digitizeunit': MetaIcon(img='edit',
-                          label=_('Draw sampling rectangle'),
-                          desc=_('Draw sampling rectangle by clicking and dragging')),
-         'digitizeunitc': MetaIcon(img='line-create',
-                          label=_('Draw sampling circle'),
-                          desc=_('Draw sampling circle radius by clicking and dragging')),
-         'digitizeregion': MetaIcon(img='polygon-create',
-                          label=_('Draw sampling region'),
-                          desc=_('Draw sampling region by polygon. Right Double click to end drawing'))}
+icons = {
+    'draw': MetaIcon(
+        img='edit',
+        label=_('Draw sampling frame'),
+        desc=_('Draw sampling frame by clicking and dragging')),
+    'digitizeunit': MetaIcon(
+        img='edit',
+        label=_('Draw sampling rectangle'),
+        desc=_('Draw sampling rectangle by clicking and dragging')),
+    'digitizeunitc': MetaIcon(
+        img='line-create',
+        label=_('Draw sampling circle'),
+        desc=_('Draw sampling circle radius by clicking and dragging')),
+    'digitizeregion': MetaIcon(
+        img='polygon-create',
+        label=_('Draw sampling region'),
+        desc=_('Draw sampling region by polygon. Right Double click to end drawing'))}
 
 
 class RLiSetupToolbar(BaseToolbar):
     """IClass toolbar
     """
+
     def __init__(self, parent, toolSwitcher):
         """RLiSetup toolbar constructor
         """
@@ -443,21 +468,22 @@ class RLiSetupToolbar(BaseToolbar):
                         wx.ITEM_CHECK)
         if self.parent.samplingtype == SamplingType.VECT:
             return self._getToolbarData((
-                       ('pan', BaseIcons['pan'], self.parent.OnPan,
-                        wx.ITEM_CHECK),
-                       ('zoomIn', BaseIcons['zoomIn'], self.parent.OnZoomIn,
-                        wx.ITEM_CHECK),
-                       ('zoomOut', BaseIcons['zoomOut'], self.parent.OnZoomOut,
-                        wx.ITEM_CHECK),
-                       ('zoomExtent', BaseIcons['zoomExtent'],
-                        self.parent.OnZoomToMap),))
+                ('pan', BaseIcons['pan'], self.parent.OnPan,
+                 wx.ITEM_CHECK),
+                ('zoomIn', BaseIcons['zoomIn'], self.parent.OnZoomIn,
+                 wx.ITEM_CHECK),
+                ('zoomOut', BaseIcons['zoomOut'], self.parent.OnZoomOut,
+                 wx.ITEM_CHECK),
+                ('zoomExtent', BaseIcons['zoomExtent'],
+                 self.parent.OnZoomToMap),))
         else:
-            return self._getToolbarData((drawTool, (None, ),
-                       ('pan', BaseIcons['pan'], self.parent.OnPan,
-                        wx.ITEM_CHECK),
-                       ('zoomIn', BaseIcons['zoomIn'], self.parent.OnZoomIn,
-                        wx.ITEM_CHECK),
-                       ('zoomOut', BaseIcons['zoomOut'], self.parent.OnZoomOut,
-                        wx.ITEM_CHECK),
-                       ('zoomExtent', BaseIcons['zoomExtent'],
-                        self.parent.OnZoomToMap),))
+            return self._getToolbarData(
+                (drawTool, (None,),
+                 ('pan', BaseIcons['pan'],
+                  self.parent.OnPan, wx.ITEM_CHECK),
+                 ('zoomIn', BaseIcons['zoomIn'],
+                  self.parent.OnZoomIn, wx.ITEM_CHECK),
+                 ('zoomOut', BaseIcons['zoomOut'],
+                  self.parent.OnZoomOut, wx.ITEM_CHECK),
+                 ('zoomExtent', BaseIcons['zoomExtent'],
+                  self.parent.OnZoomToMap),))
diff --git a/gui/wxpython/rlisetup/wizard.py b/gui/wxpython/rlisetup/wizard.py
index 697361d..84919d4 100644
--- a/gui/wxpython/rlisetup/wizard.py
+++ b/gui/wxpython/rlisetup/wizard.py
@@ -112,11 +112,14 @@ class RLIWizard(object):
         self.wizard.FitToPage(self.startpage)
         # run_wizard
         if self.wizard.RunWizard(self.startpage):
-            dlg = wx.MessageDialog(parent=self.parent,
-                                message=_("Do you want to create r.li "
-                                          "configuration file <%s>?") % self.startpage.conf_name,
-                                caption=_("Create new r.li configuration file?"),
-                                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+            dlg = wx.MessageDialog(
+                parent=self.parent,
+                message=_(
+                    "Do you want to create r.li "
+                    "configuration file <%s>?") %
+                self.startpage.conf_name,
+                caption=_("Create new r.li configuration file?"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
 
             if dlg.ShowModal() == wx.ID_NO:
                 self._cleanup()
@@ -175,9 +178,11 @@ class RLIWizard(object):
             self.SF_RL = float(self.keyboardpage.row_len)
             self.SF_CL = float(self.keyboardpage.col_len)
             self.SF_N = self.gregion['n'] - (self.SF_NSRES * self.SF_Y)
-            self.SF_S = self.gregion['n'] - (self.SF_NSRES * self.SF_Y + self.SF_RL)
+            self.SF_S = self.gregion[
+                'n'] - (self.SF_NSRES * self.SF_Y + self.SF_RL)
             self.SF_W = self.gregion['w'] + (self.SF_EWRES * self.SF_X)
-            self.SF_E = self.gregion['w'] + (self.SF_EWRES * self.SF_X + self.SF_CL)
+            self.SF_E = self.gregion[
+                'w'] + (self.SF_EWRES * self.SF_X + self.SF_CL)
             self.per_x = float(self.SF_X) / float(self.rasterinfo['cols'])
             self.per_y = float(self.SF_Y) / float(self.rasterinfo['rows'])
             self.per_rl = float(self.SF_RL) / float(self.rasterinfo['rows'])
@@ -197,13 +202,29 @@ class RLIWizard(object):
             self.SF_E = newreg['e']  # set env(SF_E) $e
             self.SF_W = newreg['w']  # set env(SF_W) $w
 
-            self.SF_Y = abs(round(self.gregion['n'] - newreg['n']) / newreg['nsres'])
+            self.SF_Y = abs(
+                round(
+                    self.gregion['n'] -
+                    newreg['n']) /
+                newreg['nsres'])
 #         set env(SF_Y) [expr abs(round(($s_n - $n) / $nres)) ]
-            self.SF_X = abs(round(self.gregion['w'] - newreg['w']) / newreg['ewres'])
+            self.SF_X = abs(
+                round(
+                    self.gregion['w'] -
+                    newreg['w']) /
+                newreg['ewres'])
 #         set env(SF_X) [expr abs(round(($s_w - $w) / $sres)) ]
-            self.SF_RL = abs(round(newreg['n'] - newreg['s']) / newreg['nsres'])
+            self.SF_RL = abs(
+                round(
+                    newreg['n'] -
+                    newreg['s']) /
+                newreg['nsres'])
 #         set env(SF_RL) [expr abs(round(($n - $s) / $nres)) ]
-            self.SF_CL = abs(round(newreg['e'] - newreg['w']) / newreg['ewres'])
+            self.SF_CL = abs(
+                round(
+                    newreg['e'] -
+                    newreg['w']) /
+                newreg['ewres'])
 #         set env(SF_CL) [expr abs(round(($e - $w) / $sres)) ]
             self.per_x = float(self.SF_X) / float(self.rasterinfo['cols'])
 #         double($env(SF_X)) / double($cols)
@@ -213,12 +234,14 @@ class RLIWizard(object):
 #         double($env(SF_RL)) / double($rows)
             self.per_cl = float(self.SF_CL) / float(self.rasterinfo['cols'])
 #         double($env(SF_CL)) / double($cols)
-            fil.write("SAMPLINGFRAME %r|%r|%r|%r\n" % (self.per_x, self.per_y,
-                                                       self.per_rl, self.per_cl))
+            fil.write("SAMPLINGFRAME %r|%r|%r|%r\n" %
+                      (self.per_x, self.per_y, self.per_rl, self.per_cl))
 
     def _value_for_circle(self, radius):
-        self.CIR_RL = round((2 * float(radius)) / float(self.rasterinfo['ewres']))
-        self.CIR_CL = round((2 * float(radius)) / float(self.rasterinfo['nsres']))
+        self.CIR_RL = round((2 * float(radius)) /
+                            float(self.rasterinfo['ewres']))
+        self.CIR_CL = round((2 * float(radius)) /
+                            float(self.rasterinfo['nsres']))
         if not self.CIR_RL % 2:
             self.CIR_RL += 1
         if not self.CIR_CL % 2:
@@ -284,11 +307,11 @@ class RLIWizard(object):
         """Write the area according the type"""
         samtype = self.getSamplingType()
 
-        #sampling type is whole
+        # sampling type is whole
         if samtype == SamplingType.WHOLE:
             cl = float(self.SF_CL) / float(self.rasterinfo['cols'])
             rl = float(self.SF_RL) / float(self.rasterinfo['rows'])
-            #this two variable are unused, problably to remove
+            # this two variable are unused, problably to remove
             x = float(self.SF_X) / float(self.rasterinfo['cols'])
             y = float(self.SF_Y) / float(self.rasterinfo['rows'])
             fil.write("SAMPLEAREA %r|%r|%r|%r\n" % (self.per_x, self.per_y,
@@ -301,19 +324,21 @@ class RLIWizard(object):
             fil.write("MASKEDSAMPLEAREA -1|-1|%r|%r" % (rl, cl))
             fil.write("|%s" % self.moving.height)
             fil.write("\nMOVINGWINDOW\n")
-        ##KMWINR = samplingtype moving, regionbox=keyboard, shape=rectangle
+        # KMWINR = samplingtype moving, regionbox=keyboard, shape=rectangle
         elif samtype == SamplingType.KMVWINR:
             cl = float(self.moving.width) / float(self.rasterinfo['cols'])
             rl = float(self.moving.height) / float(self.rasterinfo['rows'])
             fil.write("SAMPLEAREA -1|-1|%r|%r" % (rl, cl))
             fil.write("\nMOVINGWINDOW\n")
-        ##MMVWINR = samplingtype moving, regionbox=mouse, shape=rectangle
+        # MMVWINR = samplingtype moving, regionbox=mouse, shape=rectangle
         elif samtype == SamplingType.MMVWINR:
-            cl = float(self.msAreaList[0]['cols']) / float(self.rasterinfo['cols'])
-            rl = float(self.msAreaList[0]['rows']) / float(self.rasterinfo['rows'])
+            cl = float(self.msAreaList[0]['cols']
+                       ) / float(self.rasterinfo['cols'])
+            rl = float(self.msAreaList[0]['rows']
+                       ) / float(self.rasterinfo['rows'])
             fil.write("SAMPLEAREA -1|-1|%r|%r" % (rl, cl))
             fil.write("\nMOVINGWINDOW\n")
-        ##MMVWINR = samplingtype moving, regionbox=mouse, shape=circle
+        # MMVWINR = samplingtype moving, regionbox=mouse, shape=circle
         elif samtype == SamplingType.MMVWINC:
             self._value_for_circle(self.msAreaList[0].radius)
             cl = float(self.CIR_CL) / float(self.rasterinfo['cols'])
@@ -345,7 +370,8 @@ class RLIWizard(object):
             elif self.units.distrtype == 'centered_oversites':
                 fil.write("")
 
-        #elif self.samplingareapage.samplingtype == SamplingType.UNITS and self.samplingareapage.regionbox=='mouse':
+        # elif self.samplingareapage.samplingtype == SamplingType.UNITS and
+        # self.samplingareapage.regionbox=='mouse':
 
         ##MUNITSC = samplingtype=units, regionbox=mouse, shape=cirlce
         ##MUNITSR = samplingtype=units, regionbox=mouse, shape=rectangle
@@ -362,10 +388,22 @@ class RLIWizard(object):
             for tregion in self.msAreaList:
                 if self.samplingareapage.samplingtype == SamplingType.MUNITSC:
                     tregion = tregion.region
-                abs_y = abs(round((float(s_n) - tregion['n']) / tregion['nsres']))
-                abs_x = abs(round((float(s_w) - tregion['w']) / tregion['ewres']))
-                abs_rl = abs(round((tregion['n'] - tregion['s']) / tregion['nsres']))
-                abs_cl = abs(round((tregion['e'] - tregion['w']) / tregion['ewres']))
+                abs_y = abs(
+                    round(
+                        (float(s_n) - tregion['n']) / tregion
+                        ['nsres']))
+                abs_x = abs(
+                    round(
+                        (float(s_w) - tregion['w']) / tregion
+                        ['ewres']))
+                abs_rl = abs(
+                    round(
+                        (tregion['n'] - tregion['s']) /
+                        tregion['nsres']))
+                abs_cl = abs(
+                    round(
+                        (tregion['e'] - tregion['w']) /
+                        tregion['ewres']))
 
                 x = float(abs_x) / float(cols)
                 y = float(abs_y) / float(rows)
@@ -383,17 +421,28 @@ class RLIWizard(object):
             cols = float(self.rasterinfo['cols'])
             for marea in self.msAreaList:
                 gregion = marea.region
-                abs_y = self.SF_Y + abs(round((self.SF_N - gregion['n']) / self.SF_NSRES))
-                abs_x = self.SF_X + abs(round((self.SF_W - gregion['w']) / self.SF_EWRES))
-                abs_rl = abs(round(gregion['n'] - gregion['s']) / self.SF_NSRES)
-                abs_cl = abs(round(gregion['e'] - gregion['w']) / self.SF_EWRES)
+                abs_y = self.SF_Y + abs(
+                    round((self.SF_N - gregion['n']) / self.SF_NSRES))
+                abs_x = self.SF_X + abs(
+                    round((self.SF_W - gregion['w']) / self.SF_EWRES))
+                abs_rl = abs(
+                    round(
+                        gregion['n'] -
+                        gregion['s']) /
+                    self.SF_NSRES)
+                abs_cl = abs(
+                    round(
+                        gregion['e'] -
+                        gregion['w']) /
+                    self.SF_EWRES)
 
                 x = float(abs_x) / float(cols)
                 y = float(abs_y) / float(rows)
                 rl = float(abs_rl) / float(rows)
                 cl = float(abs_cl) / float(cols)
 
-                maskArea = str(x) + "|" + str(y) + "|" + str(rl) + "|" + str(cl) + "|" + marea.raster
+                maskArea = str(
+                    x) + "|" + str(y) + "|" + str(rl) + "|" + str(cl) + "|" + marea.raster
                 fil.write("SQUAREAREA %s\n" % maskArea)
         elif self.samplingareapage.samplingtype == SamplingType.VECT:
             for marea in self.msAreaList:
@@ -425,6 +474,7 @@ class FirstPage(TitledPage):
     """
     !Set name of configuration file, choose raster and optionally vector/sites
     """
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Select maps and define name"))
 
@@ -436,9 +486,10 @@ class FirstPage(TitledPage):
 
         self.parent = parent
 
-        #name of output configuration file
-        self.newconflabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                          label=_('Name for new configuration file to create'))
+        # name of output configuration file
+        self.newconflabel = wx.StaticText(
+            parent=self, id=wx.ID_ANY,
+            label=_('Name for new configuration file to create'))
 
         self.newconftxt = wx.TextCtrl(parent=self, id=wx.ID_ANY,
                                       size=(250, -1))
@@ -448,9 +499,10 @@ class FirstPage(TitledPage):
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.newconftxt, border=5, pos=(0, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #raster
-        self.mapsellabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                         label=_('Raster map to use to select areas'))
+        # raster
+        self.mapsellabel = wx.StaticText(
+            parent=self, id=wx.ID_ANY,
+            label=_('Raster map to use to select areas'))
         self.mapselect = gselect.Select(parent=self, id=wx.ID_ANY,
                                         size=(250, -1), type='cell',
                                         multiple=False)
@@ -458,9 +510,10 @@ class FirstPage(TitledPage):
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.mapselect, border=5, pos=(1, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #vector
-        self.vectsellabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                          label=_('Vector map to use to select areas'))
+        # vector
+        self.vectsellabel = wx.StaticText(
+            parent=self, id=wx.ID_ANY,
+            label=_('Vector map to use to select areas'))
         self.vectselect = gselect.Select(parent=self, id=wx.ID_ANY,
                                          size=(250, -1), type='vector',
                                          multiple=False)
@@ -468,24 +521,29 @@ class FirstPage(TitledPage):
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.vectselect, border=5, pos=(2, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #vector layer
-        self.vectlaylabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                          label=_('Vector map layer to use to select areas'))
-        self.vectlayer = wx.ComboBox(parent = self, id = wx.ID_ANY,
+        # vector layer
+        self.vectlaylabel = wx.StaticText(
+            parent=self, id=wx.ID_ANY,
+            label=_('Vector map layer to use to select areas'))
+        self.vectlayer = wx.ComboBox(parent=self, id=wx.ID_ANY,
                                      size=(250, -1))
         self.sizer.Add(item=self.vectlaylabel, border=5, pos=(3, 0),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.vectlayer, border=5, pos=(3, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #define sampling region
-        self.sampling_reg = wx.RadioBox(parent=self, id=wx.ID_ANY,
-                                        label=" %s " % _("Define sampling "
-                                                         "region (region for analysis)"),
-                                        choices=[_('Whole map layer'),
-                                                 _('Keyboard setting'),
-                                                 _('Draw the sampling frame')],
-                                        majorDimension=1,
-                                        style=wx.RA_SPECIFY_ROWS)
+        # define sampling region
+        self.sampling_reg = wx.RadioBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " % _(
+                "Define sampling "
+                "region (region for analysis)"),
+            choices=[
+                _('Whole map layer'),
+                _('Keyboard setting'),
+                _('Draw the sampling frame')],
+            majorDimension=1,
+            style=wx.RA_SPECIFY_ROWS)
 
         self.sizer.Add(item=self.sampling_reg,
                        flag=wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, border=5,
@@ -496,7 +554,7 @@ class FirstPage(TitledPage):
                        flag=wx.ALIGN_CENTER | wx.ALL | wx.EXPAND, border=5,
                        pos=(6, 0), span=(1, 2))
 
-        #bindings
+        # bindings
         self.sampling_reg.Bind(wx.EVT_RADIOBOX, self.OnSampling)
         self.newconftxt.Bind(wx.EVT_KILL_FOCUS, self.OnName)
         self.newconftxt.Bind(wx.EVT_TEXT, self.OnNameChanged)
@@ -523,8 +581,11 @@ class FirstPage(TitledPage):
     def OnName(self, event):
         """Sets the name of configuration file"""
         if self.conf_name in self.parent.parent.listfiles:
-            GMessage(parent=self, message=_("The configuration file %s "
-                     "already exists, please change name") % self.conf_name)
+            GMessage(
+                parent=self, message=_(
+                    "The configuration file %s "
+                    "already exists, please change name") %
+                self.conf_name)
             self.newconftxt.SetValue('')
             self.conf_name = ''
 
@@ -562,7 +623,6 @@ class FirstPage(TitledPage):
         next = wx.FindWindowById(wx.ID_FORWARD)
         next.Enable(self.CheckInput())
 
-
     def OnLayer(self, event):
         try:
             self.vectorlayer = self.vectlayer.GetValue()
@@ -586,16 +646,16 @@ class FirstPage(TitledPage):
             areas = gvect.vector_info_topo(vector)['areas']
         except CalledModuleError:
             self.infoError.SetLabel(_("Vector %s was not found, please "
-                                    "select another vector") % vector)
+                                      "select another vector") % vector)
             return False, []
         if areas == 0:
             self.infoError.SetLabel(_("Vector %s has no areas, please "
-                                    "select another vector") % vector)
+                                      "select another vector") % vector)
             return False, []
         links = gvect.vector_info(vector)['num_dblinks']
         if links == 0:
             self.infoError.SetLabel(_("Vector %s has no table connected, "
-                                    "please select another vector") % vector)
+                                      "please select another vector") % vector)
             return False, []
         elif links > 0:
             layers = []
@@ -612,7 +672,7 @@ class FirstPage(TitledPage):
                  False otherwise
         """
         return bool(self.conf_name and bool(self.rast and
-                    bool(self.VectorEnabled)))
+                                            bool(self.VectorEnabled)))
 
     def OnExitPage(self, event=None):
         """Function during exiting"""
@@ -627,7 +687,8 @@ class FirstPage(TitledPage):
                 self.parent.samplingareapage.SetPrev(self)
             elif self.region == 'draw':
                 self.SetNext(self.parent.drawsampleframepage)
-                self.parent.samplingareapage.SetPrev(self.parent.drawsampleframepage)
+                self.parent.samplingareapage.SetPrev(
+                    self.parent.drawsampleframepage)
                 return
 
 
@@ -635,6 +696,7 @@ class KeyboardPage(TitledPage):
     """
     !Choose the region setting the values of border using the keyboard
     """
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Insert sampling frame parameter"))
 
@@ -644,7 +706,7 @@ class KeyboardPage(TitledPage):
         self.col_up = '0'
         self.row_up = '0'
 
-        #column up/left
+        # column up/left
         self.ColUpLeftlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                             label=_("Column of upper left "
                                                     "corner"))
@@ -658,9 +720,9 @@ class KeyboardPage(TitledPage):
         self.sizer.Add(item=self.ColUpLefttxt, border=5, pos=(1, 2),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.AddGrowableCol(2)
-        #row up/left
-        self.RowUpLeftlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                            label=_('Row of upper left corner'))
+        # row up/left
+        self.RowUpLeftlabel = wx.StaticText(
+            parent=self, id=wx.ID_ANY, label=_('Row of upper left corner'))
 
         self.RowUpLefttxt = wx.TextCtrl(parent=self, id=wx.ID_ANY,
                                         size=(250, -1))
@@ -671,9 +733,11 @@ class KeyboardPage(TitledPage):
         self.sizer.Add(item=self.RowUpLefttxt, border=5, pos=(2, 2),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
-        #row length
-        self.RowLenlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                         label=_('Row length of sampling frame'))
+        # row length
+        self.RowLenlabel = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_('Row length of sampling frame'))
 
         self.RowLentxt = wx.TextCtrl(parent=self, id=wx.ID_ANY, size=(250, -1))
         wx.CallAfter(self.RowLenlabel.SetFocus)
@@ -683,9 +747,11 @@ class KeyboardPage(TitledPage):
         self.sizer.Add(item=self.RowLentxt, border=5, pos=(3, 2),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
-        #column length
-        self.ColLenlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                         label=_('Row length of sampling frame'))
+        # column length
+        self.ColLenlabel = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_('Row length of sampling frame'))
 
         self.ColLentxt = wx.TextCtrl(parent=self, id=wx.ID_ANY, size=(250, -1))
         wx.CallAfter(self.ColLenlabel.SetFocus)
@@ -728,7 +794,7 @@ class KeyboardPage(TitledPage):
     def OnEnterPage(self, event):
         """Sets the default values, for the entire map
         """
-        #R# check if raster exists before anything
+        # R# check if raster exists before anything
         if self.col_len == '' and self.row_len == '':
             rastinfo = grast.raster_info(self.parent.startpage.rast)
             self.col_len = rastinfo['cols']
@@ -747,6 +813,7 @@ class KeyboardPage(TitledPage):
 
 class DrawSampleFramePage(TitledPage):
     """Choose the region setting the values drawing a box"""
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Draw sampling frame"))
         self.parent = parent
@@ -798,6 +865,7 @@ class SamplingAreasPage(TitledPage):
     Set name of configuration file, choose raster and optionally vector/sites.
     This is coming after choose the region
     """
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Insert sampling areas"))
         self.samplingtype = 'whole'
@@ -818,12 +886,15 @@ class SamplingAreasPage(TitledPage):
         self.sizer.SetVGap(10)
         self.sizer.Add(item=self.radioBox, flag=wx.ALIGN_LEFT, pos=(0, 0))
 
-        self.regionBox = wx.RadioBox(parent=self, id=wx.ID_ANY,
-                                     label=_("Choose a method"),
-                                     choices=[_('Use keyboard to enter sampling area'),
-                                              _('Use mouse to draw sampling area')],
-                                     majorDimension=1,
-                                     style=wx.RA_SPECIFY_ROWS)
+        self.regionBox = wx.RadioBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Choose a method"),
+            choices=[
+                _('Use keyboard to enter sampling area'),
+                _('Use mouse to draw sampling area')],
+            majorDimension=1,
+            style=wx.RA_SPECIFY_ROWS)
         #self.regionBox.EnableItem(1, False)
         self.regionBox.SetItemToolTip(1, _("This option is not supported yet"))
         self.sizer.Add(self.regionBox, flag=wx.ALIGN_CENTER, pos=(1, 0))
@@ -835,9 +906,9 @@ class SamplingAreasPage(TitledPage):
 
         self.regionPanelSizer = wx.GridBagSizer(1, 2)
         self.regionNumPanel = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.regionNumLabel = wx.StaticText(parent=self.regionNumPanel,
-                                            id=wx.ID_ANY,
-                                            label=_('Number of regions to draw:'))
+        self.regionNumLabel = wx.StaticText(
+            parent=self.regionNumPanel, id=wx.ID_ANY,
+            label=_('Number of regions to draw:'))
         self.regionNumTxt = wx.TextCtrl(parent=self.regionNumPanel,
                                         id=wx.ID_ANY, size=(50, -1))
         self.regionPanelSizer.Add(self.regionNumLabel, flag=wx.ALIGN_CENTER,
@@ -850,12 +921,14 @@ class SamplingAreasPage(TitledPage):
 
         self.areaPanelSizer = wx.GridBagSizer(2, 3)
         self.areaPanel = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.overwriteText = wx.StaticText(parent=self.areaPanel, id=wx.ID_ANY,
-                                      label=_('Do you want to overwrite existing'
-                                              ' temporal maps if they exist?'))
+        self.overwriteText = wx.StaticText(
+            parent=self.areaPanel, id=wx.ID_ANY, label=_(
+                'Do you want to overwrite existing'
+                ' temporal maps if they exist?'))
         self.overwriteCheck = wx.CheckBox(parent=self.areaPanel, id=wx.ID_ANY)
-        self.areaText = wx.StaticText(parent=self.areaPanel, id=wx.ID_ANY,
-                                      label=_('Do you want to check vector areas?'))
+        self.areaText = wx.StaticText(
+            parent=self.areaPanel, id=wx.ID_ANY,
+            label=_('Do you want to check vector areas?'))
         self.areaOK = wx.Button(self.areaPanel, wx.ID_ANY, 'Yes', (50, 80))
         self.areaOK.SetToolTip(wx.ToolTip(_("Select if use area by area")))
         self.areaNO = wx.Button(self.areaPanel, wx.ID_ANY, 'No', (50, 80))
@@ -874,8 +947,9 @@ class SamplingAreasPage(TitledPage):
         self.areaPanel.SetSizer(self.areaPanelSizer)
         self.sizer.Add(self.areaPanel, flag=wx.ALIGN_CENTER, pos=(3, 0))
 
-        self.calculatingAreas = wx.StaticText(parent=self, id=wx.ID_ANY,
-                                     label=_('Analysing all vector features...'))
+        self.calculatingAreas = wx.StaticText(
+            parent=self, id=wx.ID_ANY,
+            label=_('Analysing all vector features...'))
         self.sizer.Add(self.calculatingAreas, flag=wx.ALIGN_CENTER, pos=(4, 0))
         self.numregions = ''
         self.regionNumTxt.Bind(wx.EVT_TEXT, self.OnNumRegions)
@@ -972,20 +1046,21 @@ class SamplingAreasPage(TitledPage):
         vect_cats = obtainCategories(self.parent.startpage.vect,
                                      self.parent.startpage.vectorlayer)
 
-        self._progressDlg = wx.ProgressDialog(title=_("Analysing vector"),
-                                              message="Analysing vector",
-                                              maximum=len(vect_cats),
-                                              parent=self,
-                                              style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL |
-                                              wx.PD_AUTO_HIDE | wx.PD_SMOOTH)
+        self._progressDlg = wx.ProgressDialog(
+            title=_("Analysing vector"),
+            message="Analysing vector",
+            maximum=len(vect_cats),
+            parent=self,
+            style=wx.PD_CAN_ABORT | wx.PD_APP_MODAL | wx.PD_AUTO_HIDE | wx.PD_SMOOTH)
         self._progressDlgMax = len(vect_cats)
         grass.use_temp_region()
-        self.parent.msAreaList = sampleAreaVector(self.parent.startpage.vect,
-                                                  self.parent.startpage.rast,
-                                                  vect_cats,
-                                                  self.parent.startpage.vectorlayer,
-                                                  self.overwriteTemp,
-                                                  self._progressDlg)
+        self.parent.msAreaList = sampleAreaVector(
+            self.parent.startpage.vect,
+            self.parent.startpage.rast,
+            vect_cats,
+            self.parent.startpage.vectorlayer,
+            self.overwriteTemp,
+            self._progressDlg)
         grass.del_temp_region()
         if self.parent.msAreaList:
             self.calculatingAreas.SetLabel(_("All feature are been analyzed."))
@@ -1021,6 +1096,7 @@ class SamplingAreasPage(TitledPage):
 
 
 class DrawRegionsPage(TitledPage):
+
     def __init__(self, wizard, parent):
         self.parent = parent
         TitledPage.__init__(self, wizard, _("Draw sampling regions"))
@@ -1052,9 +1128,8 @@ class DrawRegionsPage(TitledPage):
         elif self.parent.samplingareapage.samplingtype == SamplingType.UNITS:
             self.title.SetLabel(_("Draw sampling region"))
         if self.mapPanel is None:
-            self.mapPanel = RLiSetupMapPanel(self,
-                                             samplingType=self.parent.samplingareapage.samplingtype,
-                                             )
+            self.mapPanel = RLiSetupMapPanel(
+                self, samplingType=self.parent.samplingareapage.samplingtype, )
             self.mapPanel.afterRegionDrawn.connect(self.afterRegionDrawn)
 
             self.sizer.Add(item=self.mapPanel, flag=wx.EXPAND, pos=(1, 0))
@@ -1072,10 +1147,10 @@ class DrawRegionsPage(TitledPage):
             map_.AddLayer(ltype='raster', command=cmdlist, active=True,
                           name=rast, hidden=False, opacity=1.0, render=True)
 
-    #def OnExitPage(self, event=None):
+    # def OnExitPage(self, event=None):
         #!Function during exiting
-        #print event.GetDirection()
-        #if event.GetDirection():
+        # print event.GetDirection()
+        # if event.GetDirection():
         #    self.SetNext(self.parent.samplingareapage)
         #    self.parent.samplingareapage.SetPrev(self)
 
@@ -1087,7 +1162,8 @@ class SampleUnitsKeyPage(TitledPage):
     """
 
     def __init__(self, wizard, parent):
-        TitledPage.__init__(self, wizard, _("Select sample units from keyboard"))
+        TitledPage.__init__(self, wizard, _(
+            "Select sample units from keyboard"))
 
         self.parent = parent
         self.scrollPanel = scrolled.ScrolledPanel(parent=self, id=wx.ID_ANY)
@@ -1111,55 +1187,65 @@ class SampleUnitsKeyPage(TitledPage):
         self.widthTxt = wx.TextCtrl(parent=self.scrollPanel, id=wx.ID_ANY,
                                     size=(250, -1))
 
-        self.panelSizer.Add(item=self.widthLabel, pos=(1, 0),
-                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        self.panelSizer.Add(item=self.widthTxt, pos=(1, 1),
-                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.widthLabel, pos=(1, 0),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.widthTxt, pos=(1, 1),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
         self.heightLabel = wx.StaticText(parent=self.scrollPanel, id=wx.ID_ANY)
         self.heightTxt = wx.TextCtrl(parent=self.scrollPanel, id=wx.ID_ANY,
                                      size=(250, -1))
 
-        self.panelSizer.Add(item=self.heightLabel, pos=(2, 0),
-                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        self.panelSizer.Add(item=self.heightTxt, pos=(2, 1),
-                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.heightLabel, pos=(2, 0),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.heightTxt, pos=(2, 1),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.widthLabels = [_('Width size (in cells)?'),
                             _('What radius size (in meters)?')]
         self.heightLabels = [_('Height size (in cells)?'),
                              _('Name of the circle mask')]
 
-        self.distributionBox = wx.RadioBox(parent=self.scrollPanel,
-                                           id=wx.ID_ANY,
-                                           majorDimension=1,
-                                           style=wx.RA_SPECIFY_COLS,
-                                           label= " %s " % _("Select method of sampling unit distribution"),
-                                           choices=[_('Random non overlapping'),
-                                                    _('Systematic contiguos'),
-                                                    _('Stratified random'),
-                                                    _('Systematic non contiguos'),
-                                                    _('Centered over sites')]
-                                          )
-        self.panelSizer.Add(item=self.distributionBox, pos=(3, 0), span=(1, 2),
-                    flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.distributionBox = wx.RadioBox(
+            parent=self.scrollPanel,
+            id=wx.ID_ANY,
+            majorDimension=1,
+            style=wx.RA_SPECIFY_COLS,
+            label=" %s " %
+            _("Select method of sampling unit distribution"),
+            choices=[
+                _('Random non overlapping'),
+                _('Systematic contiguos'),
+                _('Stratified random'),
+                _('Systematic non contiguos'),
+                _('Centered over sites')])
+        self.panelSizer.Add(item=self.distributionBox, pos=(3, 0), span=(
+            1, 2), flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
         self.distr1Label = wx.StaticText(parent=self.scrollPanel, id=wx.ID_ANY,
                                          label=_("What number of Sampling "
                                                  "Units to use?"))
         self.distr1Txt = wx.TextCtrl(parent=self.scrollPanel, id=wx.ID_ANY,
                                      size=(250, -1))
-        self.panelSizer.Add(item=self.distr1Label, pos=(4, 0),
-                    flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        self.panelSizer.Add(item=self.distr1Txt, pos=(4, 1),
-                    flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.distr1Label, pos=(4, 0),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.distr1Txt, pos=(4, 1),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.distr2Label = wx.StaticText(parent=self.scrollPanel, id=wx.ID_ANY,
                                          label="")
         self.distr2Txt = wx.TextCtrl(parent=self.scrollPanel, id=wx.ID_ANY,
                                      size=(250, -1))
-        self.panelSizer.Add(item=self.distr2Label, pos=(5, 0),
-                    flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        self.panelSizer.Add(item=self.distr2Txt, pos=(5, 1),
-                    flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.distr2Label, pos=(5, 0),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
+        self.panelSizer.Add(
+            item=self.distr2Txt, pos=(5, 1),
+            flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.panelSizer.Hide(self.distr2Txt)
 
         self.typeBox.Bind(wx.EVT_RADIOBOX, self.OnType)
@@ -1204,7 +1290,8 @@ class SampleUnitsKeyPage(TitledPage):
         chosen = self.distributionBox.GetSelection()
         if chosen == 0:
             self.distrtype = 'non_overlapping'
-            self.distr1Label.SetLabel(_("What number of Sampling Units to use?"))
+            self.distr1Label.SetLabel(
+                _("What number of Sampling Units to use?"))
             self.panelSizer.Show(self.distr1Txt)
             self.distr2Label.SetLabel("")
             self.panelSizer.Hide(self.distr2Txt)
@@ -1265,7 +1352,7 @@ class MovingKeyPage(TitledPage):
         self.typeBox = wx.RadioBox(parent=self, id=wx.ID_ANY,
                                    label=" %s " % _("Select type of shape"),
                                    choices=[_('Rectangle'), _('Circle')],
-#                                               ('None')],
+                                   #                                               ('None')],
                                    majorDimension=1,
                                    style=wx.RA_SPECIFY_COLS)
 
@@ -1301,8 +1388,8 @@ class MovingKeyPage(TitledPage):
 
     def OnEnterPage(self, event):
         # This is an hack to force the user to choose Rectangle or Circle
-#        self.typeBox.SetSelection(2),
-#        self.typeBox.ShowItem(2, False)
+        #        self.typeBox.SetSelection(2),
+        #        self.typeBox.ShowItem(2, False)
         if self.parent.samplingareapage.samplingtype == SamplingType.MVWIN:
             self.title.SetLabel(_("Set moving windows"))
         self.OnType(None)
@@ -1343,6 +1430,7 @@ class UnitsMousePage(TitledPage):
        areas with rectangle or circle. It is used both from 'Moving windows'
        and 'Sample units'.
     """
+
     def __init__(self, wizard, parent):
         self.parent = parent
         self.wizard = wizard
@@ -1362,9 +1450,9 @@ class UnitsMousePage(TitledPage):
 
         self.regionPanelSizer = wx.GridBagSizer(1, 2)
         self.regionNumPanel = wx.Panel(parent=self, id=wx.ID_ANY)
-        self.regionNumLabel = wx.StaticText(parent=self.regionNumPanel,
-                                            id=wx.ID_ANY,
-                                            label=_('Number of sampling area to draw:'))
+        self.regionNumLabel = wx.StaticText(
+            parent=self.regionNumPanel, id=wx.ID_ANY,
+            label=_('Number of sampling area to draw:'))
         self.regionNumTxt = wx.TextCtrl(parent=self.regionNumPanel,
                                         id=wx.ID_ANY, size=(50, -1))
         self.regionPanelSizer.Add(self.regionNumLabel, flag=wx.ALIGN_CENTER,
@@ -1408,18 +1496,16 @@ class UnitsMousePage(TitledPage):
     def OnType(self, event):
         chosen = self.typeBox.GetSelection()
         if chosen == 0:
-            if self.parent.samplingareapage.samplingtype in [SamplingType.MVWIN,
-                                                             SamplingType.MMVWINR,
-                                                             SamplingType.MMVWINC]:
+            if self.parent.samplingareapage.samplingtype in [
+                    SamplingType.MVWIN, SamplingType.MMVWINR, SamplingType.MMVWINC]:
                 self.parent.samplingareapage.samplingtype = SamplingType.MMVWINR
                 wx.FindWindowById(wx.ID_FORWARD).Enable(True)
             else:
                 self.parent.samplingareapage.samplingtype = SamplingType.MUNITSR
             self.drawtype = 'rectangle'
         else:
-            if self.parent.samplingareapage.samplingtype in [SamplingType.MVWIN,
-                                                             SamplingType.MMVWINR,
-                                                             SamplingType.MMVWINC]:
+            if self.parent.samplingareapage.samplingtype in [
+                    SamplingType.MVWIN, SamplingType.MMVWINR, SamplingType.MMVWINC]:
                 self.parent.samplingareapage.samplingtype = SamplingType.MMVWINC
                 wx.FindWindowById(wx.ID_FORWARD).Enable(True)
             else:
@@ -1444,6 +1530,7 @@ class UnitsMousePage(TitledPage):
 
 class DrawSampleUnitsPage(TitledPage):
     """Choose the sampling area drawing them"""
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Draw sampling units"))
         self.parent = parent
@@ -1462,8 +1549,8 @@ class DrawSampleUnitsPage(TitledPage):
             wx.FindWindowById(wx.ID_FORWARD).Enable(True)
             self.parent.wizard.ShowPage(self.parent.summarypage)
         else:
-            self.title.SetLabel(_('Draw Sampling ' + drawtype + ' ' \
-                                  + str(self.regioncount) + ' of ' \
+            self.title.SetLabel(_('Draw Sampling ' + drawtype + ' '
+                                  + str(self.regioncount) + ' of '
                                   + str(self.numregions)))
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
 
@@ -1481,9 +1568,8 @@ class DrawSampleUnitsPage(TitledPage):
             self.sizer.Remove(self.mapPanel)
 
         gtype = self.parent.drawunits.drawtype
-        self.mapPanel = RLiSetupMapPanel(self,
-                                         samplingType=self.parent.samplingareapage.samplingtype,
-                                         )
+        self.mapPanel = RLiSetupMapPanel(
+            self, samplingType=self.parent.samplingareapage.samplingtype, )
         if gtype == 'circle':
             self.mapPanel.afterCircleDrawn.connect(self.SampleFrameChanged)
         else:
@@ -1508,13 +1594,14 @@ class DrawSampleUnitsPage(TitledPage):
         #!Function during exiting
         print event.GetDirection()
 
-        #if event.GetDirection():
+        # if event.GetDirection():
         #    self.SetNext(self.parent.samplingareapage)
         #    self.parent.samplingareapage.SetPrev(self)
 
 
 class VectorAreasPage(TitledPage):
     """Choose the sampling area using the vector features"""
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Select sampling areas"))
         self.parent = parent
@@ -1548,7 +1635,7 @@ class VectorAreasPage(TitledPage):
             self.areaNO.Enable(False)
             return True
         else:
-            self.title.SetLabel(_('Select sample area ' + str(self.areascount + 1) \
+            self.title.SetLabel(_('Select sample area ' + str(self.areascount + 1)
                                   + ' of ' + str(self.areanum)))
             wx.FindWindowById(wx.ID_FORWARD).Enable(False)
             return False
@@ -1573,8 +1660,8 @@ class VectorAreasPage(TitledPage):
         self.outname = "{pref}{cat}".format(pref=self.outpref, cat=cat)
         # check if raster already axist
 
-        if len(grass.list_strings('raster', pattern=self.outname, mapset='.')) == 1 \
-           and not self.parent.samplingareapage.overwriteTemp:
+        if len(grass.list_strings('raster', pattern=self.outname, mapset='.')
+               ) == 1 and not self.parent.samplingareapage.overwriteTemp:
             GError(parent=self, message=_("The raster map <%s> already exists."
                                           " Please remove or rename the maps "
                                           "with the prefix '%s' or select the "
@@ -1602,7 +1689,8 @@ class VectorAreasPage(TitledPage):
         feature"""
         print self.parent.samplingareapage.overwriteTemp
         if self.mapPanel is None:
-            self.mapPanel = RLiSetupMapPanel(self, samplingType=self.parent.samplingareapage.samplingtype)
+            self.mapPanel = RLiSetupMapPanel(
+                self, samplingType=self.parent.samplingareapage.samplingtype)
             self.sizer.Add(item=self.mapPanel, flag=wx.EXPAND, pos=(1, 0))
             self.sizer.AddGrowableCol(0)
             self.sizer.AddGrowableRow(1)
@@ -1610,8 +1698,8 @@ class VectorAreasPage(TitledPage):
 
         self.rast = self.parent.startpage.rast
         self.vect = self.parent.startpage.vect
-        self.vect_cats = obtainCategories(self.vect,
-                                          layer=self.parent.startpage.vectorlayer)
+        self.vect_cats = obtainCategories(
+            self.vect, layer=self.parent.startpage.vectorlayer)
 
         self.areanum = len(self.vect_cats)
         if self.areanum == 0:
@@ -1639,13 +1727,14 @@ class VectorAreasPage(TitledPage):
 
 class SummaryPage(TitledPage):
     """Shows summary result of choosing data"""
+
     def __init__(self, wizard, parent):
         TitledPage.__init__(self, wizard, _("Summary"))
         global rlisettings
 
         self.parent = parent
 
-        #configuration file name
+        # configuration file name
         self.conflabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                        label=_('Configuration file name:'))
         self.conftxt = wx.StaticText(parent=self, id=wx.ID_ANY,
@@ -1654,7 +1743,7 @@ class SummaryPage(TitledPage):
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.conftxt, border=5, pos=(0, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #raster name
+        # raster name
         self.rastlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                        label=_('Raster name:'))
         self.rasttxt = wx.StaticText(parent=self, id=wx.ID_ANY,
@@ -1664,7 +1753,7 @@ class SummaryPage(TitledPage):
         self.sizer.Add(item=self.rasttxt, border=5, pos=(1, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
-        #vector name
+        # vector name
         self.vectlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                        label=_('Vector name:'))
         self.vecttxt = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
@@ -1673,7 +1762,7 @@ class SummaryPage(TitledPage):
         self.sizer.Add(item=self.vecttxt, border=5, pos=(2, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
-        #region type name
+        # region type name
         self.regionlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                          label=_('Region type:'))
         self.regiontxt = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
@@ -1682,7 +1771,7 @@ class SummaryPage(TitledPage):
         self.sizer.Add(item=self.regiontxt, border=5, pos=(3, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
-        #region keyboard
+        # region keyboard
         self.regionkeylabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                             label="")
         self.regionkeytxt = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
@@ -1691,7 +1780,7 @@ class SummaryPage(TitledPage):
         self.sizer.Add(item=self.regionkeytxt, border=5, pos=(4, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.Bind(wiz.EVT_WIZARD_PAGE_CHANGED, self.OnEnterPage)
-        #sampling area
+        # sampling area
         self.samplinglabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                            label=_('Sampling area type:'))
         self.samplingtxt = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
@@ -1699,14 +1788,14 @@ class SummaryPage(TitledPage):
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.samplingtxt, border=5, pos=(5, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #shapetype
+        # shapetype
         self.shapelabel = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
         self.shapetxt = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
         self.sizer.Add(item=self.shapelabel, border=5, pos=(6, 0),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.shapetxt, border=5, pos=(6, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #shapedim
+        # shapedim
         self.shapewidthlabel = wx.StaticText(parent=self, id=wx.ID_ANY,
                                              label="")
         self.shapewidthtxt = wx.StaticText(parent=self, id=wx.ID_ANY,
@@ -1723,7 +1812,7 @@ class SummaryPage(TitledPage):
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
         self.sizer.Add(item=self.shapeheighttxt, border=5, pos=(8, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
-        #units type
+        # units type
         self.unitslabel = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
         self.unitstxt = wx.StaticText(parent=self, id=wx.ID_ANY, label="")
         self.sizer.Add(item=self.unitslabel, border=5, pos=(9, 0),
@@ -1745,7 +1834,6 @@ class SummaryPage(TitledPage):
         self.sizer.Add(item=self.unitsmoretxt2, border=5, pos=(11, 1),
                        flag=wx.ALIGN_LEFT | wx.ALIGN_CENTER_VERTICAL | wx.ALL)
 
-
     def OnEnterPage(self, event):
         """Insert values into text controls for summary of location
         creation options
@@ -1756,21 +1844,21 @@ class SummaryPage(TitledPage):
         self.regiontxt.SetLabel(self.parent.startpage.region)
         self.vecttxt.SetLabel(self.parent.startpage.vect)
         if self.parent.startpage.region == 'key':
-            #region keyboard values
+            # region keyboard values
             self.regionkeylabel.SetLabel(_('Region keyboard values:'))
             regKeyVals = "Column left up: %s - Row left up: %s\n" \
                          "Column length: %s - Row length: %s\n" % (
-                         self.parent.keyboardpage.col_up,
-                         self.parent.keyboardpage.row_up,
-                         self.parent.keyboardpage.col_len,
-                         self.parent.keyboardpage.row_len)
+                             self.parent.keyboardpage.col_up,
+                             self.parent.keyboardpage.row_up,
+                             self.parent.keyboardpage.col_len,
+                             self.parent.keyboardpage.row_len)
             self.regionkeytxt.SetLabel(regKeyVals)
         else:
             self.regionkeylabel.SetLabel("")
             self.regionkeytxt.SetLabel("")
 
         if self.parent.samplingareapage.samplingtype == SamplingType.UNITS \
-        and self.parent.samplingareapage.regionbox == 'keyboard':
+                and self.parent.samplingareapage.regionbox == 'keyboard':
             self.shapelabel.SetLabel(_('Type of shape:'))
             self.shapetxt.SetLabel(self.parent.units.boxtype)
             if self.parent.units.boxtype == 'circle':
@@ -1795,7 +1883,7 @@ class SummaryPage(TitledPage):
                 self.unitsmorelabel2.SetLabel(_("Number column strates:"))
                 self.unitsmoretxt2.SetLabel(self.parent.units.distr2)
         elif self.parent.samplingareapage.samplingtype == SamplingType.UNITS \
-        and self.parent.samplingareapage.regionbox == 'mouse':
+                and self.parent.samplingareapage.regionbox == 'mouse':
             self.shapelabel.SetLabel(_('Type of shape:'))
             self.shapetxt.SetLabel(self.parent.units.boxtype)
             self.unitstxt.SetLabel('by mouse')
diff --git a/gui/wxpython/timeline/__init__.py b/gui/wxpython/timeline/__init__.py
index 5de9698..c11526e 100644
--- a/gui/wxpython/timeline/__init__.py
+++ b/gui/wxpython/timeline/__init__.py
@@ -1,4 +1,4 @@
 all = [
     'g.gui.timeline',
     'frame',
-    ]
+]
diff --git a/gui/wxpython/timeline/frame.py b/gui/wxpython/timeline/frame.py
index 7639efb..cb367b3 100644
--- a/gui/wxpython/timeline/frame.py
+++ b/gui/wxpython/timeline/frame.py
@@ -22,6 +22,7 @@ from itertools import cycle
 import numpy as np
 
 import wx
+from functools import reduce
 
 try:
     import matplotlib
@@ -67,8 +68,13 @@ def check_version(*version):
 
 class TimelineFrame(wx.Frame):
     """The main frame of the application"""
+
     def __init__(self, parent):
-        wx.Frame.__init__(self, parent, id=wx.ID_ANY, title=_("GRASS GIS Timeline Tool"))
+        wx.Frame.__init__(
+            self,
+            parent,
+            id=wx.ID_ANY,
+            title=_("GRASS GIS Timeline Tool"))
 
         tgis.init(True)
         self.datasets = []
@@ -128,8 +134,9 @@ class TimelineFrame(wx.Frame):
         self.drawButton.Bind(wx.EVT_BUTTON, self.OnRedraw)
         self.helpButton = wx.Button(self.panel, id=wx.ID_ANY, label=_("Help"))
         self.helpButton.Bind(wx.EVT_BUTTON, self.OnHelp)
-        self.view3dCheck = wx.CheckBox(self.panel, id=wx.ID_ANY,
-                                       label=_("3D plot of spatio-temporal extents"))
+        self.view3dCheck = wx.CheckBox(
+            self.panel, id=wx.ID_ANY,
+            label=_("3D plot of spatio-temporal extents"))
         self.view3dCheck.Bind(wx.EVT_CHECKBOX, self.OnRedraw)
         if not check_version(1, 0, 0):
             self.view3dCheck.SetLabel(_("3D plot of spatio-temporal extents "
@@ -142,9 +149,15 @@ class TimelineFrame(wx.Frame):
         gridSizer.Add(self.datasetSelect, pos=(1, 0), flag=wx.EXPAND)
         gridSizer.Add(self.drawButton, pos=(1, 1), flag=wx.EXPAND)
         gridSizer.Add(self.helpButton, pos=(1, 2), flag=wx.EXPAND)
-        gridSizer.Add(self.view3dCheck, pos=(2, 0), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+        gridSizer.Add(
+            self.view3dCheck, pos=(2, 0),
+            flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
 
-        self.vbox.Add(gridSizer, proportion=0, flag=wx.EXPAND | wx.ALL, border=10)
+        self.vbox.Add(
+            gridSizer,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=10)
 
         self.panel.SetSizer(self.vbox)
         self.vbox.Fit(self)
@@ -160,34 +173,44 @@ class TimelineFrame(wx.Frame):
             etype = series[2]
             sp = tgis.dataset_factory(etype, name)
             if not sp.is_in_db(dbif=self.dbif):
-                GError(self, message=_("Dataset <%s> not found in temporal database") % (name))
+                GError(
+                    self,
+                    message=_("Dataset <%s> not found in temporal database") %
+                    (name))
                 return
 
             sp.select(dbif=self.dbif)
 
             self.timeData[name] = {}
             self.timeData[name]['elementType'] = series[2]
-            self.timeData[name]['temporalType'] = sp.get_temporal_type()  # abs/rel
+            self.timeData[name][
+                'temporalType'] = sp.get_temporal_type()  # abs/rel
 
             if mode is None:
                 mode = self.timeData[name]['temporalType']
             elif self.timeData[name]['temporalType'] != mode:
-                GError(parent=self, message=_("Datasets have different temporal type "
-                                              "(absolute x relative), which is not allowed."))
+                GError(
+                    parent=self, message=_(
+                        "Datasets have different temporal type "
+                        "(absolute x relative), which is not allowed."))
                 return
 
             # check topology
             maps = sp.get_registered_maps_as_objects(dbif=self.dbif)
-            self.timeData[name]['validTopology'] = sp.check_temporal_topology(maps=maps, dbif=self.dbif)
+            self.timeData[name]['validTopology'] = sp.check_temporal_topology(
+                maps=maps, dbif=self.dbif)
 
-            self.timeData[name]['temporalMapType'] = sp.get_map_time()  # point/interval
+            self.timeData[name][
+                'temporalMapType'] = sp.get_map_time()  # point/interval
             self.timeData[name]['unit'] = None  # only with relative
             if self.timeData[name]['temporalType'] == 'relative':
-                start, end, self.timeData[name]['unit'] = sp.get_relative_time()
+                start, end, self.timeData[name][
+                    'unit'] = sp.get_relative_time()
                 if unit is None:
                     unit = self.timeData[name]['unit']
                 elif self.timeData[name]['unit'] != unit:
-                    GError(self, _("Datasets have different time unit which is not allowed."))
+                    GError(
+                        self, _("Datasets have different time unit which is not allowed."))
                     return
 
             self.timeData[name]['start_datetime'] = []
@@ -206,7 +229,12 @@ class TimelineFrame(wx.Frame):
             rows = sp.get_registered_maps(columns=columns, where=None,
                                           order='start_time', dbif=self.dbif)
             if not rows:
-                GError(parent=self, message=_("Dataset <{name}> is empty").format(name=series[0] + '@' + series[1]))
+                GError(
+                    parent=self,
+                    message=_("Dataset <{name}> is empty").format(
+                        name=series[0] +
+                        '@' +
+                        series[1]))
                 return
             for row in rows:
                 mapName, start, end, north, south, west, east = row
@@ -290,7 +318,8 @@ class TimelineFrame(wx.Frame):
         plots = []
         lookUp = LookUp(self.timeData)
         for i, name in enumerate(self.datasets):
-            yticksNames.append(name[0])  # just name; with mapset it would be long
+            # just name; with mapset it would be long
+            yticksNames.append(name[0])
             name = name[0] + '@' + name[1]
             yticksPos.append(i)
             barData = []
@@ -310,14 +339,29 @@ class TimelineFrame(wx.Frame):
             else:
                 # self.timeData[name]['end_plot'] = None
                 pointData = start
-                lookUp.AddDataset(type_='point', yrange=i, xranges=pointData, datasetName=name)
+                lookUp.AddDataset(
+                    type_='point',
+                    yrange=i,
+                    xranges=pointData,
+                    datasetName=name)
             color = colors.next()
             if mapType == 'interval':
-                plots.append(self.axes2d.broken_barh(xranges=barData, yrange=(i - 0.1, 0.2),
-                                                     facecolors=color, alpha=ALPHA))
+                plots.append(
+                    self.axes2d.broken_barh(
+                        xranges=barData,
+                        yrange=(
+                            i - 0.1,
+                            0.2),
+                        facecolors=color,
+                        alpha=ALPHA))
             else:
-                plots.append(self.axes2d.plot(pointData, [i] * len(pointData),
-                                              marker='o', linestyle='None', color=color)[0])
+                plots.append(
+                    self.axes2d.plot(
+                        pointData,
+                        [i] * len(pointData),
+                        marker='o',
+                        linestyle='None',
+                        color=color)[0])
 
         if self.temporalType == 'absolute':
             self.axes2d.xaxis_date()
@@ -346,7 +390,9 @@ class TimelineFrame(wx.Frame):
         datasets = datasets.split(',')
         try:
             datasets = self._checkDatasets(datasets)
-        except GException, e:
+            if not datasets:
+                return
+        except GException as e:
             GError(parent=self, message=unicode(e), showTraceback=False)
             return
 
@@ -368,9 +414,11 @@ class TimelineFrame(wx.Frame):
             if self.view3dCheck.IsChecked():
                 self.axes2d.change_geometry(2, 1, 1)
                 if not self.axes3d:
-                    # do not remove this import - unused but it is required for 3D
+                    # do not remove this import - unused but it is required for
+                    # 3D
                     from mpl_toolkits.mplot3d import Axes3D  # pylint: disable=W0611
-                    self.axes3d = self.fig.add_subplot(2, 1, 2, projection='3d')
+                    self.axes3d = self.fig.add_subplot(
+                        2, 1, 2, projection='3d')
 
                 self.axes3d.set_visible(True)
                 self._draw3dFigure()
@@ -392,36 +440,52 @@ class TimelineFrame(wx.Frame):
         tDict = tgis.tlist_grouped('stds', group_type=True, dbif=self.dbif)
         # nested list with '(map, mapset, etype)' items
         allDatasets = [[[(map, mapset, etype) for map in maps]
-                     for etype, maps in etypesDict.iteritems()]
-                    for mapset, etypesDict in tDict.iteritems()]
+                        for etype, maps in etypesDict.iteritems()]
+                       for mapset, etypesDict in tDict.iteritems()]
         # flatten this list
         if allDatasets:
-            allDatasets = reduce(lambda x, y: x + y, reduce(lambda x, y: x + y, allDatasets))
+            allDatasets = reduce(
+                lambda x,
+                y: x + y,
+                reduce(
+                    lambda x,
+                    y: x + y,
+                    allDatasets))
+            mapsets = tgis.get_tgis_c_library_interface().available_mapsets()
+            allDatasets = [
+                i
+                for i in sorted(
+                    allDatasets, key=lambda l: mapsets.index(l[1]))]
 
         for dataset in datasets:
             errorMsg = _("Space time dataset <%s> not found.") % dataset
             if dataset.find("@") >= 0:
                 nameShort, mapset = dataset.split('@', 1)
-                indices = [n for n, (mapName, mapsetName, etype) in enumerate(allDatasets)
-                           if nameShort == mapName and mapsetName == mapset]
+                indices = [n for n, (mapName, mapsetName, etype) in enumerate(
+                    allDatasets) if nameShort == mapName and mapsetName == mapset]
             else:
-                indices = [n for n, (mapName, mapset, etype) in enumerate(allDatasets)
-                           if dataset == mapName]
+                indices = [n for n, (mapName, mapset, etype) in enumerate(
+                    allDatasets) if dataset == mapName]
 
             if len(indices) == 0:
                 raise GException(errorMsg)
             elif len(indices) >= 2:
-                dlg = wx.SingleChoiceDialog(self,
-                         message=_("Please specify the space time dataset <%s>." % dataset),
-                         caption=_("Ambiguous dataset name"),
-                         choices=[("%(map)s@%(mapset)s: %(etype)s" % {'map': allDatasets[i][0],
-                                                                      'mapset': allDatasets[i][1],
-                                                                      'etype': allDatasets[i][2]})
-                                                                               for i in indices],
-                         style=wx.CHOICEDLG_STYLE | wx.OK)
+                dlg = wx.SingleChoiceDialog(
+                    self,
+                    message=_(
+                        "Please specify the space time dataset <%s>." %
+                        dataset),
+                    caption=_("Ambiguous dataset name"),
+                    choices=[("%(map)s@%(mapset)s: %(etype)s" %
+                              {'map': allDatasets[i][0],
+                               'mapset': allDatasets[i][1],
+                               'etype': allDatasets[i][2]}) for i in indices],
+                    style=wx.CHOICEDLG_STYLE | wx.OK)
                 if dlg.ShowModal() == wx.ID_OK:
                     index = dlg.GetSelection()
                     validated.append(allDatasets[indices[index]])
+                else:
+                    continue
             else:
                 validated.append(allDatasets[indices[0]])
 
@@ -438,11 +502,14 @@ class TimelineFrame(wx.Frame):
             return
         try:
             datasets = self._checkDatasets(datasets)
-        except GException, e:
+            if not datasets:
+                return
+        except GException as e:
             GError(parent=self, message=unicode(e), showTraceback=False)
             return
         self.datasets = datasets
-        self.datasetSelect.SetValue(','.join(map(lambda x: x[0] + '@' + x[1], datasets)))
+        self.datasetSelect.SetValue(
+            ','.join(map(lambda x: x[0] + '@' + x[1], datasets)))
         self._redraw()
 
     def Show3D(self, show):
@@ -453,6 +520,7 @@ class TimelineFrame(wx.Frame):
 
 class LookUp:
     """Helper class for searching info by coordinates"""
+
     def __init__(self, timeData):
         self.data = {}
         self.timeData = timeData
@@ -472,7 +540,7 @@ class LookUp:
         for keyY in self.data.keys():
             if keyY[0] <= y <= keyY[1]:
                 for keyX in self.data[keyY].keys():
-                    if keyX != 'name' and  keyX[0] <= x <= keyX[1]:
+                    if keyX != 'name' and keyX[0] <= x <= keyX[1]:
                         keys = keyY, keyX
                         break
                 if keys:
@@ -482,7 +550,7 @@ class LookUp:
 
         datasetName = self.data[keys[0]]['name']
         mapIndex = self.data[keys[0]][keys[1]]
-        return  self.timeData, datasetName, mapIndex
+        return self.timeData, datasetName, mapIndex
 
 
 def InfoFormat(timeData, datasetName, mapIndex):
@@ -499,8 +567,12 @@ def InfoFormat(timeData, datasetName, mapIndex):
 
     text.append(_("Mapset: %s") % mapset)
     text.append(_("Map name: %s") % timeData[datasetName]['names'][mapIndex])
-    text.append(_("Start time: %s") % timeData[datasetName]['start_datetime'][mapIndex])
-    text.append(_("End time: %s") % timeData[datasetName]['end_datetime'][mapIndex])
+    text.append(
+        _("Start time: %s") %
+        timeData[datasetName]['start_datetime'][mapIndex])
+    text.append(
+        _("End time: %s") %
+        timeData[datasetName]['end_datetime'][mapIndex])
 
     if not timeData[datasetName]['validTopology']:
         text.append(_("WARNING: invalid topology"))
@@ -518,8 +590,11 @@ class DataCursor(object):
     Source: http://stackoverflow.com/questions/4652439/
             is-there-a-matplotlib-equivalent-of-matlabs-datacursormode/4674445
     """
-    def __init__(self, artists, lookUp, formatFunction, tolerance=5, offsets=(-30, 30),
-                 display_all=False):
+
+    def __init__(
+            self, artists, lookUp, formatFunction, tolerance=5,
+            offsets=(-30, 30),
+            display_all=False):
         """Create the data cursor and connect it to the relevant figure.
         "artists" is the matplotlib artist or sequence of artists that will be
             selected.
@@ -561,11 +636,15 @@ class DataCursor(object):
 
     def annotate(self, ax):
         """Draws and hides the annotation box for the given axis "ax"."""
-        annotation = ax.annotate(self.formatFunction, xy=(0, 0), ha='center',
-                xytext=self.offsets, textcoords='offset points', va='bottom',
-                bbox=dict(boxstyle='round,pad=0.5', fc='yellow', alpha=0.7),
-                arrowprops=dict(arrowstyle='->', connectionstyle='arc3,rad=0'),
-                annotation_clip=False, multialignment='left')
+        annotation = ax.annotate(
+            self.formatFunction, xy=(0, 0),
+            ha='center', xytext=self.offsets, textcoords='offset points',
+            va='bottom',
+            bbox=dict(
+                boxstyle='round,pad=0.5', fc='yellow', alpha=0.7),
+            arrowprops=dict(
+                arrowstyle='->', connectionstyle='arc3,rad=0'),
+            annotation_clip=False, multialignment='left')
         annotation.set_visible(False)
 
         return annotation
diff --git a/gui/wxpython/timeline/g.gui.timeline.html b/gui/wxpython/timeline/g.gui.timeline.html
index e35eaf8..cee530c 100644
--- a/gui/wxpython/timeline/g.gui.timeline.html
+++ b/gui/wxpython/timeline/g.gui.timeline.html
@@ -37,4 +37,4 @@ Anna Kratochvilova,
 <a href="http://www.cvut.cz">Czech Technical University in Prague</a>, Czech Republic
 
 <p>
-<i>$Date: 2014-05-02 14:47:32 +0200 (Fri, 02 May 2014) $</i>
+<i>$Date: 2014-05-02 14:46:55 +0200 (Fri, 02 May 2014) $</i>
diff --git a/gui/wxpython/timeline/g.gui.timeline.py b/gui/wxpython/timeline/g.gui.timeline.py
index 293d6df..ffab2da 100755
--- a/gui/wxpython/timeline/g.gui.timeline.py
+++ b/gui/wxpython/timeline/g.gui.timeline.py
@@ -40,6 +40,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     try:
         from timeline.frame import TimelineFrame
     except ImportError as e:
diff --git a/gui/wxpython/tools/build_modules_xml.py b/gui/wxpython/tools/build_modules_xml.py
index b6cc822..e03e78f 100644
--- a/gui/wxpython/tools/build_modules_xml.py
+++ b/gui/wxpython/tools/build_modules_xml.py
@@ -48,7 +48,7 @@ def do_doctest_gettext_workaround():
 
 def parse_modules(fd):
     """Writes metadata to xml file."""
-    # TODO: what about ms windows? does gtask handle this? 
+    # TODO: what about ms windows? does gtask handle this?
     mlist = list(gcore.get_commands()[0])
     indent = 4
     for m in sorted(mlist):
@@ -59,8 +59,11 @@ def parse_modules(fd):
         fd.write('%s<module-item name="%s">\n' % (' ' * indent, m))
         indent += 4
         fd.write('%s<module>%s</module>\n' % (' ' * indent, m))
-        fd.write('%s<description>%s</description>\n' % (' ' * indent, escapeXML(desc)))
-        fd.write('%s<keywords>%s</keywords>\n' % (' ' * indent, escapeXML(','.join(keyw))))
+        fd.write(
+            '%s<description>%s</description>\n' %
+            (' ' * indent, escapeXML(desc)))
+        fd.write('%s<keywords>%s</keywords>\n' %
+                 (' ' * indent, escapeXML(','.join(keyw))))
         indent -= 4
         fd.write('%s</module-item>\n' % (' ' * indent))
 
@@ -88,7 +91,9 @@ def get_module_metadata(name):
 def header(fd):
     fd.write('<?xml version="1.0" encoding="UTF-8"?>\n')
     fd.write('<!DOCTYPE module-items SYSTEM "module_items.dtd">\n')
-    fd.write('<!--This file is automatically generated using %s-->\n' % sys.argv[0])
+    fd.write(
+        '<!--This file is automatically generated using %s-->\n' %
+        sys.argv[0])
     # g.version -r is crashing, commenting this block for now
 #    vInfo = gcore.version()
 #    fd.write('<!--version="%s" revision="%s" date="%s"-->\n' % \
diff --git a/gui/wxpython/tools/update_menudata.py b/gui/wxpython/tools/update_menudata.py
index 93fbbd4..359eb11 100644
--- a/gui/wxpython/tools/update_menudata.py
+++ b/gui/wxpython/tools/update_menudata.py
@@ -25,24 +25,25 @@ import tempfile
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
 
 from grass.script import core as grass
 from grass.script import task as gtask
 
-from lmgr.menudata  import LayerManagerMenuData
+from lmgr.menudata import LayerManagerMenuData
 from core.globalvar import grassCmd
 
+
 def parseModules():
     """Parse modules' interface"""
     modules = dict()
-    
+
     # list of modules to be ignored
-    ignore =  [ 'g.mapsets_picker.py',
-                'v.type_wrapper.py',
-                'g.parser',
-                'vcolors' ]
-    
+    ignore = ['g.mapsets_picker.py',
+              'v.type_wrapper.py',
+              'g.parser',
+              'vcolors']
+
     count = len(grassCmd)
     i = 0
     for module in grassCmd:
@@ -56,18 +57,19 @@ def parseModules():
         except Exception as e:
             grass.error(module + ': ' + str(e))
             continue
-        modules[interface.name] = { 'label'   : interface.label,
-                                    'desc'    : interface.description,
-                                    'keywords': interface.keywords }
-        
+        modules[interface.name] = {'label': interface.label,
+                                   'desc': interface.description,
+                                   'keywords': interface.keywords}
+
     return modules
 
+
 def updateData(data, modules):
     """Update menu data tree"""
     # list of modules to be ignored
     ignore = ['v.type_wrapper.py',
               'vcolors']
-    
+
     menu_modules = list()
     for node in data.tree.getiterator():
         if node.tag != 'menuitem':
@@ -76,25 +78,25 @@ def updateData(data, modules):
         item = dict()
         for child in node.getchildren():
             item[child.tag] = child.text
-        
+
         if 'command' not in item:
             continue
-        
+
         if item['command'] in ignore:
             continue
-        
+
         module = item['command'].split(' ')[0]
         if module not in modules:
             grass.warning("'%s' not found in modules" % item['command'])
             continue
-        
+
         if modules[module]['label']:
             desc = modules[module]['label']
         else:
             desc = modules[module]['desc']
         if node.find('handler').text == 'OnMenuCmd':
             node.find('help').text = desc
-        
+
         if 'keywords' not in modules[module]:
             grass.warning('%s: keywords missing' % module)
         else:
@@ -102,24 +104,25 @@ def updateData(data, modules):
                 node.insert(2, etree.Element('keywords'))
                 grass.warning("Adding tag 'keywords' to '%s'" % module)
             node.find('keywords').text = ','.join(modules[module]['keywords'])
-        
+
         menu_modules.append(item['command'])
 
     for module in modules.keys():
         if module not in menu_modules:
             grass.warning("'%s' not available from the menu" % module)
-    
-def writeData(data, file = None):
+
+
+def writeData(data, file=None):
     """Write updated menudata.xml"""
     if file is None:
         file = os.path.join('xml', 'menudata.xml')
-    
+
     try:
         data.tree.write(file)
     except IOError:
         print >> sys.stderr, "'%s' not found. Please run the script from 'gui/wxpython'." % file
         return
-    
+
     try:
         f = open(file, 'a')
         try:
@@ -128,8 +131,9 @@ def writeData(data, file = None):
             f.close()
     except IOError:
         print >> sys.stderr, "ERROR: Unable to write to menudata file."
-    
-def main(argv = None):
+
+
+def main(argv=None):
     if argv is None:
         argv = sys.argv
 
@@ -141,10 +145,10 @@ def main(argv = None):
     if len(argv) > 1 and argv[1] == '-h':
         print >> sys.stderr, __doc__
         return 1
-    
+
     nuldev = file(os.devnull, 'w+')
     grass.info("Step 1: running make...")
-    grass.call(['make'], stderr = nuldev)
+    grass.call(['make'], stderr=nuldev)
     grass.info("Step 2: parsing modules...")
     modules = dict()
     modules = parseModules()
@@ -152,23 +156,23 @@ def main(argv = None):
     data = LayerManagerMenuData()
     grass.info("Step 4: updating menu data...")
     updateData(data, modules)
-    
+
     if printDiff:
         tempFile = tempfile.NamedTemporaryFile()
         grass.info("Step 5: diff menu data...")
         writeData(data, tempFile.name)
-        
+
         grass.call(['diff', '-u',
                     os.path.join('xml', 'menudata.xml'),
-                    tempFile.name], stderr = nuldev)
+                    tempFile.name], stderr=nuldev)
     else:
         grass.info("Step 5: writing menu data (menudata.xml)...")
         writeData(data)
-        
+
     return 0
 
 if __name__ == '__main__':
     if os.getenv("GISBASE") is None:
         sys.exit("You must be in GRASS GIS to run this program.")
-    
+
     sys.exit(main())
diff --git a/gui/wxpython/tplot/__init__.py b/gui/wxpython/tplot/__init__.py
index 4985b84..d3178da 100644
--- a/gui/wxpython/tplot/__init__.py
+++ b/gui/wxpython/tplot/__init__.py
@@ -1,4 +1,4 @@
 all = [
     'g.gui.tplot',
     'frame',
-    ]
+]
diff --git a/gui/wxpython/tplot/frame.py b/gui/wxpython/tplot/frame.py
index 96dd9e2..423d329 100644
--- a/gui/wxpython/tplot/frame.py
+++ b/gui/wxpython/tplot/frame.py
@@ -26,6 +26,7 @@ from grass.pygrass.modules import Module
 
 import grass.script as grass
 from core.utils import _
+from functools import reduce
 
 try:
     import matplotlib
@@ -51,6 +52,7 @@ from gui_core import gselect
 from core import globalvar
 from grass.pygrass.vector.geometry import Point
 from grass.pygrass.raster import RasterRow
+from grass.pygrass.gis.region import Region
 from collections import OrderedDict
 from subprocess import PIPE
 try:
@@ -107,6 +109,7 @@ class TplotFrame(wx.Frame):
         self.dbif = tgis.SQLDatabaseInterfaceConnection()
         self.dbif.connect()
         self.Bind(wx.EVT_CLOSE, self.onClose)
+        self.region = Region()
 
     def init(self):
         self.timeDataR = OrderedDict()
@@ -126,9 +129,10 @@ class TplotFrame(wx.Frame):
             self.dbif.close()
         tgis.stop_subprocesses()
 
-    def onClose(self,evt):
-        self.coorval.OnClose()
-        self.cats.OnClose()
+    def onClose(self, evt):
+        # this two lines return errors during exit
+        # self.coorval.OnClose()
+        # self.cats.OnClose()
         self.Destroy()
 
     def _layout(self):
@@ -168,22 +172,23 @@ class TplotFrame(wx.Frame):
         # ------------ITEMS IN NOTEBOOK PAGE (RASTER)------------------------
 
         self.controlPanelRaster = wx.Panel(parent=self.ntb, id=wx.ID_ANY)
-        self.datasetSelectLabelR = wx.StaticText(parent=self.controlPanelRaster,
-                                                 id=wx.ID_ANY,
-                                                 label=_('Raster temporal '
-                                                         'dataset (strds)'))
-
-        self.datasetSelectR = gselect.Select(parent=self.controlPanelRaster,
-                                             id=wx.ID_ANY,
-                                             size=globalvar.DIALOG_GSELECT_SIZE,
-                                             type='strds', multiple=True)
+        self.datasetSelectLabelR = wx.StaticText(
+            parent=self.controlPanelRaster,
+            id=wx.ID_ANY,
+            label=_(
+                'Raster temporal '
+                'dataset (strds)'))
+
+        self.datasetSelectR = gselect.Select(
+            parent=self.controlPanelRaster, id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE, type='strds', multiple=True)
         self.coor = wx.StaticText(parent=self.controlPanelRaster, id=wx.ID_ANY,
                                   label=_('X and Y coordinates separated by '
                                           'comma:'))
         try:
             self._giface.GetMapWindow()
-            self.coorval = gselect.CoordinatesSelect(parent=self.controlPanelRaster,
-                                                     giface=self._giface)
+            self.coorval = gselect.CoordinatesSelect(
+                parent=self.controlPanelRaster, giface=self._giface)
         except:
             self.coorval = wx.TextCtrl(parent=self.controlPanelRaster,
                                        id=wx.ID_ANY,
@@ -210,15 +215,20 @@ class TplotFrame(wx.Frame):
 
         # ------------ITEMS IN NOTEBOOK PAGE (VECTOR)------------------------
         self.controlPanelVector = wx.Panel(parent=self.ntb, id=wx.ID_ANY)
-        self.datasetSelectLabelV = wx.StaticText(parent=self.controlPanelVector,
-                                                 id=wx.ID_ANY,
-                                                 label=_('Vector temporal '
-                                                         'dataset (strds)'))
-        self.datasetSelectV = gselect.Select(parent=self.controlPanelVector,
-                                             id=wx.ID_ANY,
-                                             size=globalvar.DIALOG_GSELECT_SIZE,
-                                             type='stvds', multiple=True)
-        self.datasetSelectV.Bind(wx.EVT_TEXT, self.OnVectorSelected)
+        self.datasetSelectLabelV = wx.StaticText(
+            parent=self.controlPanelVector, id=wx.ID_ANY,
+            label=_(
+                'Vector temporal '
+                'dataset (strds)\n'
+                'Please press enter if'
+                ' you digit the name'
+                ' instead select with'
+                ' combobox'))
+        self.datasetSelectV = gselect.Select(
+            parent=self.controlPanelVector, id=wx.ID_ANY,
+            size=globalvar.DIALOG_GSELECT_SIZE, type='stvds', multiple=True)
+        self.datasetSelectV.Bind(wx.EVT_COMBOBOX_CLOSEUP,
+                                 self.OnVectorSelected)
 
         self.attribute = gselect.ColumnSelect(parent=self.controlPanelVector)
         self.attributeLabel = wx.StaticText(parent=self.controlPanelVector,
@@ -227,19 +237,21 @@ class TplotFrame(wx.Frame):
         # TODO fix the category selection as done for coordinates
         try:
             self._giface.GetMapWindow()
-            self.cats = gselect.VectorCategorySelect(parent=self.controlPanelVector,
-                                                     giface=self._giface)
+            self.cats = gselect.VectorCategorySelect(
+                parent=self.controlPanelVector, giface=self._giface)
         except:
-            self.cats = wx.TextCtrl(parent=self.controlPanelVector, id=wx.ID_ANY,
-                                    size=globalvar.DIALOG_TEXTCTRL_SIZE)
+            self.cats = wx.TextCtrl(
+                parent=self.controlPanelVector,
+                id=wx.ID_ANY,
+                size=globalvar.DIALOG_TEXTCTRL_SIZE)
         self.catsLabel = wx.StaticText(parent=self.controlPanelVector,
                                        id=wx.ID_ANY,
                                        label=_('Select category of vector(s)'))
 
         self.controlPanelSizerVector = wx.BoxSizer(wx.VERTICAL)
-        #self.controlPanelSizer.Add(wx.StaticText(self.panel, id=wx.ID_ANY,
-        #label=_("Select space time raster dataset(s):")),
-        #pos=(0, 0), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
+        # self.controlPanelSizer.Add(wx.StaticText(self.panel, id=wx.ID_ANY,
+        # label=_("Select space time raster dataset(s):")),
+        # pos=(0, 0), flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL)
         self.controlPanelSizerVector.Add(self.datasetSelectLabelV,
                                          flag=wx.EXPAND)
         self.controlPanelSizerVector.Add(self.datasetSelectV, flag=wx.EXPAND)
@@ -255,7 +267,6 @@ class TplotFrame(wx.Frame):
         self.ntb.AddPage(page=self.controlPanelVector, text=_('STVDS'),
                          name='STVDS')
 
-
         # ------------Buttons on the bottom(draw,help)------------
         self.vButtPanel = wx.Panel(self.mainPanel, id=wx.ID_ANY)
         self.vButtSizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -280,6 +291,10 @@ class TplotFrame(wx.Frame):
         """Load data and read properties
         :param list timeseries: a list of timeseries
         """
+        if not self.poi:
+            GError(parent=self, message=_("Invalid input coordinates"),
+                   showTraceback=False)
+            return
         mode = None
         unit = None
         columns = ','.join(['name', 'start_time', 'end_time'])
@@ -298,7 +313,6 @@ class TplotFrame(wx.Frame):
             self.plotNameListR.append(name)
             self.timeDataR[name] = OrderedDict()
 
-
             self.timeDataR[name]['temporalDataType'] = etype
             self.timeDataR[name]['temporalType'] = sp.get_temporal_type()
             self.timeDataR[name]['granularity'] = sp.get_granularity()
@@ -306,18 +320,22 @@ class TplotFrame(wx.Frame):
             if mode is None:
                 mode = self.timeDataR[name]['temporalType']
             elif self.timeDataR[name]['temporalType'] != mode:
-                GError(parent=self, message=_("Datasets have different temporal"
-                                              " type (absolute x relative), "
-                                              "which is not allowed."))
+                GError(
+                    parent=self, message=_(
+                        "Datasets have different temporal"
+                        " type (absolute x relative), "
+                        "which is not allowed."))
                 return
 
             # check topology
             maps = sp.get_registered_maps_as_objects(dbif=self.dbif)
-            self.timeDataR[name]['validTopology'] = sp.check_temporal_topology(maps=maps, dbif=self.dbif)
+            self.timeDataR[name]['validTopology'] = sp.check_temporal_topology(
+                maps=maps, dbif=self.dbif)
 
             self.timeDataR[name]['unit'] = None  # only with relative
             if self.timeDataR[name]['temporalType'] == 'relative':
-                start, end, self.timeDataR[name]['unit'] = sp.get_relative_time()
+                start, end, self.timeDataR[name][
+                    'unit'] = sp.get_relative_time()
                 if unit is None:
                     unit = self.timeDataR[name]['unit']
                 elif self.timeDataR[name]['unit'] != unit:
@@ -399,7 +417,7 @@ class TplotFrame(wx.Frame):
             if not sp.is_in_db(dbif=self.dbif):
                 GError(message=_("Dataset <%s> not found in temporal "
                                  "database") % (fullname), parent=self,
-                                 showTraceback=False)
+                       showTraceback=False)
                 return
             sp.select(dbif=self.dbif)
 
@@ -414,13 +432,15 @@ class TplotFrame(wx.Frame):
             if mode is None:
                 mode = self.timeDataV[name]['temporalType']
             elif self.timeDataV[name]['temporalType'] != mode:
-                GError(parent=self, showTraceback=False,
-                       message=_("Datasets have different temporal type ("
-                                 "absolute x relative), which is not allowed."))
+                GError(
+                    parent=self, showTraceback=False, message=_(
+                        "Datasets have different temporal type ("
+                        "absolute x relative), which is not allowed."))
                 return
             self.timeDataV[name]['unit'] = None  # only with relative
             if self.timeDataV[name]['temporalType'] == 'relative':
-                start, end, self.timeDataV[name]['unit'] = sp.get_relative_time()
+                start, end, self.timeDataV[name][
+                    'unit'] = sp.get_relative_time()
                 if unit is None:
                     unit = self.timeDataV[name]['unit']
                 elif self.timeDataV[name]['unit'] != unit:
@@ -447,9 +467,12 @@ class TplotFrame(wx.Frame):
                         lay = "{map}_{layer}".format(map=row['name'],
                                                      layer=values['Layer'])
                         self.timeDataV[name][lay] = {}
-                        self.timeDataV[name][lay]['start_datetime'] = row['start_time']
-                        self.timeDataV[name][lay]['end_datetime'] = row['start_time']
-                        self.timeDataV[name][lay]['value'] = values['Attributes'][attribute]
+                        self.timeDataV[name][lay][
+                            'start_datetime'] = row['start_time']
+                        self.timeDataV[name][lay][
+                            'end_datetime'] = row['start_time']
+                        self.timeDataV[name][lay]['value'] = values[
+                            'Attributes'][attribute]
             else:
                 wherequery = ''
                 cats = self._getExistingCategories(rows[0]['name'], cats)
@@ -474,22 +497,26 @@ class TplotFrame(wx.Frame):
                     lay = int(row['layer'])
                     catkey = self._parseVDbConn(row['name'], lay)
                     if not catkey:
-                        GError(parent=self, showTraceback=False,
-                           message=_("No connection between vector map {vmap} "
-                                     "and layer {la}".format(vmap=row['name'],
-                                                              la=lay)))
+                        GError(
+                            parent=self, showTraceback=False, message=_(
+                                "No connection between vector map {vmap} "
+                                "and layer {la}".format(
+                                    vmap=row['name'], la=lay)))
                         return
-                    vals = grass.vector_db_select(map=row['name'], layer=lay,
-                                                  where=wherequery.format(key=catkey),
-                                                  columns=attribute)
+                    vals = grass.vector_db_select(
+                        map=row['name'], layer=lay, where=wherequery.format(
+                            key=catkey), columns=attribute)
                     layn = "lay{num}".format(num=lay)
                     for cat in cats:
                         catn = "cat{num}".format(num=cat)
                         if layn not in self.timeDataV[name][catn].keys():
                             self.timeDataV[name][catn][layn] = {}
-                        self.timeDataV[name][catn][layn]['start_datetime'] = row['start_time']
-                        self.timeDataV[name][catn][layn]['end_datetime'] = row['end_time']
-                        self.timeDataV[name][catn][layn]['value'] = vals['values'][int(cat)][0]
+                        self.timeDataV[name][catn][layn][
+                            'start_datetime'] = row['start_time']
+                        self.timeDataV[name][catn][layn][
+                            'end_datetime'] = row['end_time']
+                        self.timeDataV[name][catn][layn]['value'] = vals['values'][int(cat)][
+                            0]
         self.unit = unit
         self.temporalType = mode
         return
@@ -557,7 +584,8 @@ class TplotFrame(wx.Frame):
                                                label=self.plotNameListR[i])[0])
 
         if self.temporalType == 'absolute':
-            self.axes2d.set_xlabel(_("Temporal resolution: %s" % self.timeDataR[name]['granularity']))
+            self.axes2d.set_xlabel(
+                _("Temporal resolution: %s" % self.timeDataR[name]['granularity']))
         else:
             self.axes2d.set_xlabel(_("Time [%s]") % self.unit)
         self.axes2d.set_ylabel(', '.join(self.yticksNames))
@@ -576,7 +604,9 @@ class TplotFrame(wx.Frame):
             self.yticksPos.append(1)  # TODO
             xdata = []
             ydata = []
-            for keys, values in self.timeDataV[name_cat[0]][name_cat[1]].iteritems():
+            for keys, values in self.timeDataV[
+                    name_cat[0]][
+                    name_cat[1]].iteritems():
                 if keys in ['temporalType', 'granularity', 'validTopology',
                             'unit', 'temporalDataType']:
                     continue
@@ -592,11 +622,17 @@ class TplotFrame(wx.Frame):
                                    datasetName=name)
             color = self.colors.next()
 
-            self.plots.append(self.axes2d.plot(xdata, ydata, marker='o',
-                                               color=color, label=labelname)[0])
+            self.plots.append(
+                self.axes2d.plot(
+                    xdata,
+                    ydata,
+                    marker='o',
+                    color=color,
+                    label=labelname)[0])
         # ============================
         if self.temporalType == 'absolute':
-            self.axes2d.set_xlabel(_("Temporal resolution: %s" % self.timeDataV[name]['granularity']))
+            self.axes2d.set_xlabel(
+                _("Temporal resolution: %s" % self.timeDataV[name]['granularity']))
         else:
             self.axes2d.set_xlabel(_("Time [%s]") % self.unit)
         self.axes2d.set_ylabel(', '.join(self.yticksNames))
@@ -633,7 +669,8 @@ class TplotFrame(wx.Frame):
                                                color=color, label=name)[0])
         # ============================
         if self.temporalType == 'absolute':
-            self.axes2d.set_xlabel(_("Temporal resolution: %s" % self.timeDataV[name]['granularity']))
+            self.axes2d.set_xlabel(
+                _("Temporal resolution: %s" % self.timeDataV[name]['granularity']))
         else:
             self.axes2d.set_xlabel(_("Time [%s]") % self.unit)
         self.axes2d.set_ylabel(', '.join(self.yticksNames))
@@ -682,6 +719,12 @@ class TplotFrame(wx.Frame):
                     GError(parent=self, message=_("Invalid input coordinates"),
                            showTraceback=False)
                     return
+                bbox = self.region.get_bbox()
+                if not bbox.contains(self.poi):
+                    GError(parent=self, message=_("Seed point outside the "
+                                                  "current region"),
+                           showTraceback=False)
+                    return
         # check raster dataset
         if datasetsR:
             datasetsR = datasetsR.split(',')
@@ -748,33 +791,38 @@ class TplotFrame(wx.Frame):
             allDatasets = reduce(lambda x, y: x + y, reduce(lambda x, y: x + y,
                                                             allDatasets))
             mapsets = tgis.get_tgis_c_library_interface().available_mapsets()
-            allDatasets = [i for i in sorted(allDatasets,
-                                             key=lambda l: mapsets.index(l[1]))]
+            allDatasets = [
+                i
+                for i in sorted(
+                    allDatasets, key=lambda l: mapsets.index(l[1]))]
 
         for dataset in datasets:
             errorMsg = _("Space time dataset <%s> not found.") % dataset
             if dataset.find("@") >= 0:
                 nameShort, mapset = dataset.split('@', 1)
-                indices = [n for n, (mapName, mapsetName, etype) in enumerate(allDatasets)
-                           if nameShort == mapName and mapsetName == mapset]
+                indices = [n for n, (mapName, mapsetName, etype) in enumerate(
+                    allDatasets) if nameShort == mapName and mapsetName == mapset]
             else:
-                indices = [n for n, (mapName, mapset, etype) in enumerate(allDatasets)
-                           if dataset == mapName]
+                indices = [n for n, (mapName, mapset, etype) in enumerate(
+                    allDatasets) if dataset == mapName]
 
             if len(indices) == 0:
                 raise GException(errorMsg)
             elif len(indices) >= 2:
-                dlg = wx.SingleChoiceDialog(self,
-                                            message=_("Please specify the "
-                                                      "space time dataset "
-                                                      "<%s>." % dataset),
-                                            caption=_("Ambiguous dataset name"),
-                                            choices=[("%(map)s@%(mapset)s:"
-                                                      " %(etype)s" % {'map': allDatasets[i][0],
-                                                                      'mapset': allDatasets[i][1],
-                                                                      'etype': allDatasets[i][2]})
-                                                     for i in indices],
-                                            style=wx.CHOICEDLG_STYLE | wx.OK)
+                dlg = wx.SingleChoiceDialog(
+                    self,
+                    message=_(
+                        "Please specify the "
+                        "space time dataset "
+                        "<%s>." % dataset),
+                    caption=_("Ambiguous dataset name"),
+                    choices=[
+                        ("%(map)s@%(mapset)s:"
+                         " %(etype)s" % {
+                             'map': allDatasets[i][0],
+                             'mapset': allDatasets[i][1],
+                             'etype': allDatasets[i][2]}) for i in indices],
+                    style=wx.CHOICEDLG_STYLE | wx.OK)
                 if dlg.ShowModal() == wx.ID_OK:
                     index = dlg.GetSelection()
                     validated.append(allDatasets[indices[index]])
@@ -830,18 +878,29 @@ class TplotFrame(wx.Frame):
             if cats:
                 self.cats.SetValue(cats)
         if self.datasetsR:
-            self.datasetSelectR.SetValue(','.join(map(lambda x: x[0] + '@' + x[1],
-                                                      self.datasetsR)))
+            self.datasetSelectR.SetValue(
+                ','.join(map(lambda x: x[0] + '@' + x[1], self.datasetsR)))
         self._redraw()
 
     def OnVectorSelected(self, event):
         """Update the controlbox related to stvds"""
         dataset = self.datasetSelectV.GetValue().strip()
-        vect_list = grass.read_command('t.vect.list', flags='s', input=dataset,
-                                       col='name')
-        vect_list = list(set(sorted(vect_list.split())))
-        for vec in vect_list:
-            self.attribute.InsertColumns(vec, 1)
+        if dataset:
+            try:
+                vect_list = grass.read_command('t.vect.list', flags='s',
+                                               input=dataset, column='name')
+            except Exception:
+                self.attribute.Clear()
+                GError(
+                    parent=self,
+                    message=_("Invalid input temporal dataset"),
+                    showTraceback=False)
+                return
+            vect_list = list(set(sorted(vect_list.split())))
+            for vec in vect_list:
+                self.attribute.InsertColumns(vec, 1)
+        else:
+            return
 
 
 class LookUp:
@@ -886,7 +945,7 @@ def InfoFormat(timeData, values):
             text.append(_("Space time 3D raster dataset: %s") % key)
 
         text.append(_("Value for {date} is {val}".format(date=val[0],
-                      val=val[1])))
+                                                         val=val[1])))
         text.append('\n')
     text.append(_("Press Del to dismiss."))
 
diff --git a/gui/wxpython/tplot/g.gui.tplot.py b/gui/wxpython/tplot/g.gui.tplot.py
index 75c1d1f..06cbc60 100755
--- a/gui/wxpython/tplot/g.gui.tplot.py
+++ b/gui/wxpython/tplot/g.gui.tplot.py
@@ -41,7 +41,7 @@
 #% required: no
 #%end
 
-#TODO use option G_OPT_V_CATS
+# TODO use option G_OPT_V_CATS
 #%option
 #% key: cats
 #% label: Categories of vectores features
@@ -78,6 +78,10 @@ def main():
     options, flags = gscript.parser()
 
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.utils import _
     from core.giface import StandaloneGrassInterface
     try:
@@ -117,12 +121,7 @@ def main():
             sizes = options['size'].strip().split(',')
             sizes = [int(s) for s in sizes]
             frame.canvas.SetSize(sizes)
-        if output.split('.')[-1].lower() == 'png':
-            frame.canvas.print_png(output)
-        if output.split('.')[-1].lower() in ['jpg', 'jpeg']:
-            frame.canvas.print_jpg(output)
-        if output.split('.')[-1].lower() in ['tif', 'tiff']:
-            frame.canvas.print_tif(output)
+        frame.canvas.figure.savefig(output)
     else:
         frame.Show()
         app.MainLoop()
diff --git a/gui/wxpython/vdigit/__init__.py b/gui/wxpython/vdigit/__init__.py
index fab4b39..a8e8acd 100644
--- a/gui/wxpython/vdigit/__init__.py
+++ b/gui/wxpython/vdigit/__init__.py
@@ -7,4 +7,4 @@ all = [
     'wxdisplay',
     'g.gui.vdigit',
     'toolbars',
-    ]
+]
diff --git a/gui/wxpython/vdigit/dialogs.py b/gui/wxpython/vdigit/dialogs.py
index 02b9220..0ed8c1d 100644
--- a/gui/wxpython/vdigit/dialogs.py
+++ b/gui/wxpython/vdigit/dialogs.py
@@ -24,18 +24,19 @@ import copy
 import wx
 import wx.lib.mixins.listctrl as listmix
 
-from core.gcmd        import RunCommand, GError
-from core.debug       import Debug
-from core.settings    import UserSettings
+from core.gcmd import RunCommand, GError
+from core.debug import Debug
+from core.settings import UserSettings
 from core.utils import _
 
 
 class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
+
     def __init__(self, parent, title,
-                 vectorName, query = None, cats = None,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+                 vectorName, query=None, cats=None,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         """Dialog used to display/modify categories of vector objects
-        
+
         :param parent:
         :param title: dialog title
         :param query: {coordinates, qdist} - used by v.edit/v.what
@@ -44,13 +45,13 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """
         self.parent = parent  # map window class instance
         self.digit = parent.digit
-        
+
         # map name
         self.vectorName = vectorName
-        
+
         # line : {layer: [categories]}
         self.cats = {}
-        
+
         # do not display dialog if no line is found (-> self.cats)
         if cats is None:
             if self._getCategories(query[0], query[1]) == 0 or not self.line:
@@ -60,23 +61,24 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
             for line in cats.keys():
                 for layer in cats[line].keys():
                     self.cats[line][layer] = list(cats[line][layer])
-            
+
             layers = []
             for layer in self.digit.GetLayers():
                 layers.append(str(layer))
-        
+
         # make copy of cats (used for 'reload')
         self.cats_orig = copy.deepcopy(self.cats)
-        
-        wx.Dialog.__init__(self, parent = self.parent, id = wx.ID_ANY, title = title,
-                           style = style, **kwargs)
-        
+
+        wx.Dialog.__init__(self, parent=self.parent, id=wx.ID_ANY, title=title,
+                           style=style, **kwargs)
+
         # list of categories
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("List of categories - right-click to delete"))
+        box = wx.StaticBox(
+            parent=self, id=wx.ID_ANY, label=" %s " %
+            _("List of categories - right-click to delete"))
         listSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        self.list = CategoryListCtrl(parent = self, id = wx.ID_ANY,
-                                     style = wx.LC_REPORT |
+        self.list = CategoryListCtrl(parent=self, id=wx.ID_ANY,
+                                     style=wx.LC_REPORT |
                                      wx.BORDER_NONE |
                                      wx.LC_SORT_ASCENDING |
                                      wx.LC_HRULES |
@@ -85,10 +87,10 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         self.fid = self.cats.keys()[0]
         self.itemDataMap = self.list.Populate(self.cats[self.fid])
         listmix.ColumnSorterMixin.__init__(self, 2)
-        self.fidMulti = wx.Choice(parent = self, id = wx.ID_ANY,
-                                  size = (150, -1))
+        self.fidMulti = wx.Choice(parent=self, id=wx.ID_ANY,
+                                  size=(150, -1))
         self.fidMulti.Bind(wx.EVT_CHOICE, self.OnFeature)
-        self.fidText = wx.StaticText(parent = self, id = wx.ID_ANY)
+        self.fidText = wx.StaticText(parent=self, id=wx.ID_ANY)
         if len(self.cats.keys()) == 1:
             self.fidMulti.Show(False)
             self.fidText.SetLabel(str(self.fid))
@@ -99,45 +101,49 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
                 choices.append(str(fid))
             self.fidMulti.SetItems(choices)
             self.fidMulti.SetSelection(0)
-        
-        listSizer.Add(item = self.list, proportion = 1, flag = wx.EXPAND)
+
+        listSizer.Add(item=self.list, proportion=1, flag=wx.EXPAND)
 
         # add new category
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("Add new category"))
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=" %s " % _("Add new category"))
         addSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer (cols = 5, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=5, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(3)
 
-        layerNewTxt = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                 label = "%s:" % _("Layer"))
-        self.layerNew = wx.Choice(parent = self, id = wx.ID_ANY, size = (75, -1),
-                                  choices = layers)
+        layerNewTxt = wx.StaticText(parent=self, id=wx.ID_ANY,
+                                    label="%s:" % _("Layer"))
+        self.layerNew = wx.Choice(parent=self, id=wx.ID_ANY, size=(75, -1),
+                                  choices=layers)
         if len(layers) > 0:
             self.layerNew.SetSelection(0)
-        
-        catNewTxt = wx.StaticText(parent = self, id = wx.ID_ANY,
-                               label = "%s:" % _("Category"))
+
+        catNewTxt = wx.StaticText(parent=self, id=wx.ID_ANY,
+                                  label="%s:" % _("Category"))
 
         try:
             newCat = max(self.cats[self.fid][1]) + 1
         except KeyError:
             newCat = 1
-        self.catNew = wx.SpinCtrl(parent = self, id = wx.ID_ANY, size = (75, -1),
-                                  initial = newCat, min = 0, max = 1e9)
+        self.catNew = wx.SpinCtrl(parent=self, id=wx.ID_ANY, size=(75, -1),
+                                  initial=newCat, min=0, max=1e9)
         btnAddCat = wx.Button(self, wx.ID_ADD)
-        flexSizer.Add(item = layerNewTxt, proportion = 0,
-                      flag = wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = self.layerNew, proportion = 0,
-                      flag = wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = catNewTxt, proportion = 0,
-                      flag = wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
-                      border = 10)
-        flexSizer.Add(item = self.catNew, proportion = 0,
-                      flag = wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = btnAddCat, proportion = 0,
-                      flag = wx.EXPAND | wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
-        addSizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 5)
+        flexSizer.Add(item=layerNewTxt, proportion=0,
+                      flag=wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=self.layerNew, proportion=0,
+                      flag=wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=catNewTxt, proportion=0,
+                      flag=wx.ALIGN_CENTER_VERTICAL | wx.ALIGN_RIGHT | wx.LEFT,
+                      border=10)
+        flexSizer.Add(item=self.catNew, proportion=0,
+                      flag=wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=btnAddCat, proportion=0,
+                      flag=wx.EXPAND | wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+        addSizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=5)
 
         # buttons
         btnApply = wx.Button(self, wx.ID_APPLY)
@@ -151,32 +157,32 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         # sizers
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(btnCancel)
-        #btnSizer.AddButton(btnReload)
-        #btnSizer.SetNegativeButton(btnReload)
+        # btnSizer.AddButton(btnReload)
+        # btnSizer.SetNegativeButton(btnReload)
         btnSizer.AddButton(btnApply)
         btnSizer.AddButton(btnOk)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = listSizer, proportion = 1,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        mainSizer.Add(item = addSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALIGN_CENTER |
-                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+        mainSizer.Add(item=listSizer, proportion=1,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+        mainSizer.Add(item=addSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALIGN_CENTER |
+                      wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
         fidSizer = wx.BoxSizer(wx.HORIZONTAL)
-        fidSizer.Add(item = wx.StaticText(parent = self, id = wx.ID_ANY,
-                                        label = _("Feature id:")),
-                     proportion = 0, border = 5,
-                     flag = wx.ALIGN_CENTER_VERTICAL)
-        fidSizer.Add(item = self.fidMulti, proportion = 0,
-                     flag = wx.EXPAND | wx.ALL,  border = 5)
-        fidSizer.Add(item = self.fidText, proportion = 0,
-                     flag = wx.EXPAND | wx.ALL,  border = 5)
-        mainSizer.Add(item = fidSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
-        
+        fidSizer.Add(item=wx.StaticText(parent=self, id=wx.ID_ANY,
+                                        label=_("Feature id:")),
+                     proportion=0, border=5,
+                     flag=wx.ALIGN_CENTER_VERTICAL)
+        fidSizer.Add(item=self.fidMulti, proportion=0,
+                     flag=wx.EXPAND | wx.ALL, border=5)
+        fidSizer.Add(item=self.fidText, proportion=0,
+                     flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(item=fidSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL, border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
         self.SetAutoLayout(True)
@@ -190,10 +196,10 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         btnAddCat.Bind(wx.EVT_BUTTON, self.OnAddCat)
         btnCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
         self.Bind(wx.EVT_CLOSE, lambda evt: self.Hide())
-                                     
+
         # list
-        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightUp) #wxMSW
-        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightUp) #wxGTK
+        self.list.Bind(wx.EVT_COMMAND_RIGHT_CLICK, self.OnRightUp)  # wxMSW
+        self.list.Bind(wx.EVT_RIGHT_UP, self.OnRightUp)  # wxGTK
         self.Bind(wx.EVT_LIST_BEGIN_LABEL_EDIT, self.OnBeginEdit, self.list)
         self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEndEdit, self.list)
         self.Bind(wx.EVT_LIST_COL_CLICK, self.OnColClick, self.list)
@@ -207,7 +213,7 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """Click on column header (order by)
         """
         event.Skip()
-        
+
     def OnBeginEdit(self, event):
         """Editing of item started
         """
@@ -217,8 +223,8 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """Finish editing of item
         """
         itemIndex = event.GetIndex()
-        layerOld = int (self.list.GetItem(itemIndex, 0).GetText())
-        catOld = int (self.list.GetItem(itemIndex, 1).GetText())
+        layerOld = int(self.list.GetItem(itemIndex, 0).GetText())
+        catOld = int(self.list.GetItem(itemIndex, 1).GetText())
 
         if event.GetColumn() == 0:
             layerNew = int(event.GetLabel())
@@ -226,7 +232,7 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         else:
             layerNew = layerOld
             catNew = int(event.GetLabel())
-        
+
         try:
             if layerNew not in self.cats[self.fid].keys():
                 self.cats[self.fid][layerNew] = []
@@ -236,12 +242,14 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
             event.Veto()
             self.list.SetStringItem(itemIndex, 0, str(layerNew))
             self.list.SetStringItem(itemIndex, 1, str(catNew))
-            dlg = wx.MessageDialog(self, _("Unable to add new layer/category <%(layer)s/%(category)s>.\n"
-                                           "Layer and category number must be integer.\n"
-                                           "Layer number must be greater than zero.") %
-                                   { 'layer': self.layerNew.GetStringSelection(),
-                                     'category' : str(self.catNew.GetValue()) },
-                                   _("Error"), wx.OK | wx.ICON_ERROR)
+            dlg = wx.MessageDialog(
+                self, _(
+                    "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
+                    "Layer and category number must be integer.\n"
+                    "Layer number must be greater than zero.") %
+                {
+                    'layer': self.layerNew.GetStringSelection(), 'category': str(
+                        self.catNew.GetValue())}, _("Error"), wx.OK | wx.ICON_ERROR)
             dlg.ShowModal()
             dlg.Destroy()
             return False
@@ -266,9 +274,9 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
             self.popupID1 = wx.NewId()
             self.popupID2 = wx.NewId()
             self.popupID3 = wx.NewId()
-            self.Bind(wx.EVT_MENU, self.OnItemDelete,    id = self.popupID1)
-            self.Bind(wx.EVT_MENU, self.OnItemDeleteAll, id = self.popupID2)
-            self.Bind(wx.EVT_MENU, self.OnReload, id = self.popupID3)
+            self.Bind(wx.EVT_MENU, self.OnItemDelete, id=self.popupID1)
+            self.Bind(wx.EVT_MENU, self.OnItemDeleteAll, id=self.popupID2)
+            self.Bind(wx.EVT_MENU, self.OnReload, id=self.popupID3)
 
         # generate popup-menu
         menu = wx.Menu()
@@ -293,15 +301,15 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """
         item = self.list.GetFirstSelected()
         while item != -1:
-            layer = int (self.list.GetItem(item, 0).GetText())
-            cat = int (self.list.GetItem(item, 1).GetText())
+            layer = int(self.list.GetItem(item, 0).GetText())
+            cat = int(self.list.GetItem(item, 1).GetText())
             self.list.DeleteItem(item)
             self.cats[self.fid][layer].remove(cat)
 
             item = self.list.GetFirstSelected()
-            
+
         event.Skip()
-        
+
     def OnItemDeleteAll(self, event):
         """Delete all items from the list
         """
@@ -314,19 +322,19 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """Feature id changed (on duplicates)
         """
         self.fid = int(event.GetString())
-        
+
         self.itemDataMap = self.list.Populate(self.cats[self.fid],
-                                              update = True)
+                                              update=True)
 
         try:
             newCat = max(self.cats[self.fid][1]) + 1
         except KeyError:
             newCat = 1
-            
+
         self.catNew.SetValue(newCat)
-        
+
         event.Skip()
-        
+
     def _getCategories(self, coords, qdist):
         """Get layer/category pairs for all available
         layers
@@ -334,25 +342,25 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         :return: True line found or False if not found
         """
         ret = RunCommand('v.what',
-                         parent = self,
-                         quiet = True,
-                         map = self.vectorName,
-                         east_north = '%f,%f' % \
-                             (float(coords[0]), float(coords[1])),
-                         distance = qdist)
+                         parent=self,
+                         quiet=True,
+                         map=self.vectorName,
+                         east_north='%f,%f' %
+                         (float(coords[0]), float(coords[1])),
+                         distance=qdist)
 
         if not ret:
             return False
 
         for item in ret.splitlines():
             litem = item.lower()
-            if "id:" in litem: # get line id
+            if "id:" in litem:  # get line id
                 self.line = int(item.split(':')[1].strip())
-            elif "layer:" in litem: # add layer
+            elif "layer:" in litem:  # add layer
                 layer = int(item.split(':')[1].strip())
                 if layer not in self.cats.keys():
                     self.cats[layer] = []
-            elif "category:" in litem: # add category
+            elif "category:" in litem:  # add category
                 self.cats[layer].append(int(item.split(':')[1].strip()))
 
         return True
@@ -365,7 +373,7 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
 
         # polulate list
         self.itemDataMap = self.list.Populate(self.cats[self.fid],
-                                              update = True)
+                                              update=True)
 
         event.Skip()
 
@@ -375,10 +383,10 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         self.parent.parent.dialogs['category'] = None
         if self.digit:
             self.digit.GetDisplay().SetSelected([])
-            self.parent.UpdateMap(render = False)
+            self.parent.UpdateMap(render=False)
         else:
             self.parent.parent.OnRender(None)
-            
+
         self.Close()
 
     def OnApply(self, event):
@@ -388,9 +396,9 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
             newfid = self.ApplyChanges(fid)
             if fid == self.fid and newfid > 0:
                 self.fid = newfid
-            
+
     def ApplyChanges(self, fid):
-        """Apply changes 
+        """Apply changes
 
         :param fid: feature id
         """
@@ -398,11 +406,11 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         cats_orig = self.cats_orig[fid]
 
         # action : (catsFrom, catsTo)
-        check = {'catadd': (cats,      cats_orig),
+        check = {'catadd': (cats, cats_orig),
                  'catdel': (cats_orig, cats)}
 
         newfid = -1
-        
+
         # add/delete new category
         for action, catsCurr in check.iteritems():
             for layer in catsCurr[0].keys():
@@ -416,7 +424,7 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
                         add = True
                     else:
                         add = False
-                        
+
                     newfid = self.digit.SetLineCats(fid, layer,
                                                     catList, add)
                     if len(self.cats.keys()) == 1:
@@ -426,17 +434,20 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
                         choices[choices.index(str(fid))] = str(newfid)
                         self.fidMulti.SetItems(choices)
                         self.fidMulti.SetStringSelection(str(newfid))
-                    
+
                     self.cats[newfid] = self.cats[fid]
                     del self.cats[fid]
-                    
+
                     fid = newfid
                     if self.fid < 0:
-                        wx.MessageBox(parent = self, message = _("Unable to update vector map."),
-                                      caption = _("Error"), style = wx.OK | wx.ICON_ERROR)
-        
+                        wx.MessageBox(
+                            parent=self,
+                            message=_("Unable to update vector map."),
+                            caption=_("Error"),
+                            style=wx.OK | wx.ICON_ERROR)
+
         self.cats_orig[fid] = copy.deepcopy(cats)
-        
+
         return newfid
 
     def OnOK(self, event):
@@ -450,30 +461,34 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """
         try:
             layer = int(self.layerNew.GetStringSelection())
-            cat   = int(self.catNew.GetValue())
+            cat = int(self.catNew.GetValue())
             if layer <= 0:
                 raise ValueError
         except ValueError:
-            GError(parent = self,
-                   message = _("Unable to add new layer/category <%(layer)s/%(category)s>.\n"
-                               "Layer and category number must be integer.\n"
-                               "Layer number must be greater than zero.") %
-                   {'layer' : str(self.layerNew.GetValue()),
-                    'category' : str(self.catNew.GetValue())})
+            GError(
+                parent=self,
+                message=_(
+                    "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
+                    "Layer and category number must be integer.\n"
+                    "Layer number must be greater than zero.") % {
+                    'layer': str(
+                        self.layerNew.GetValue()),
+                    'category': str(
+                        self.catNew.GetValue())})
             return False
-        
+
         if layer not in self.cats[self.fid].keys():
             self.cats[self.fid][layer] = []
-        
+
         self.cats[self.fid][layer].append(cat)
-        
+
         # reload list
         self.itemDataMap = self.list.Populate(self.cats[self.fid],
-                                              update = True)
-        
+                                              update=True)
+
         # update category number for add
         self.catNew.SetValue(cat + 1)
-        
+
         event.Skip()
 
         return True
@@ -483,9 +498,9 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         """
         return self.cats.keys()
 
-    def UpdateDialog(self, query = None, cats = None):
+    def UpdateDialog(self, query=None, cats=None):
         """Update dialog
-        
+
         :param query: {coordinates, distance} - v.what
         :param cats:  directory layer/cats    - vdigit
         :return: True if updated otherwise False
@@ -504,21 +519,21 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
         if ret == 0 or len(self.cats.keys()) < 1:
             Debug.msg(3, "VDigitCategoryDialog(): nothing found!")
             return False
-        
+
         # make copy of cats (used for 'reload')
         self.cats_orig = copy.deepcopy(self.cats)
 
         # polulate list
         self.fid = self.cats.keys()[0]
         self.itemDataMap = self.list.Populate(self.cats[self.fid],
-                                              update = True)
+                                              update=True)
 
         try:
             newCat = max(self.cats[self.fid][1]) + 1
         except KeyError:
             newCat = 1
         self.catNew.SetValue(newCat)
-        
+
         if len(self.cats.keys()) == 1:
             self.fidText.Show(True)
             self.fidMulti.Show(False)
@@ -533,26 +548,28 @@ class VDigitCategoryDialog(wx.Dialog, listmix.ColumnSorterMixin):
             self.fidMulti.SetSelection(0)
 
         self.Layout()
-        
+
         return True
 
+
 class CategoryListCtrl(wx.ListCtrl,
                        listmix.ListCtrlAutoWidthMixin,
                        listmix.TextEditMixin):
-    def __init__(self, parent, id, pos = wx.DefaultPosition,
-                 size = wx.DefaultSize, style = 0):
+
+    def __init__(self, parent, id, pos=wx.DefaultPosition,
+                 size=wx.DefaultSize, style=0):
         """List of layers/categories"""
         self.parent = parent
-        
+
         wx.ListCtrl.__init__(self, parent, id, pos, size, style)
 
         listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.TextEditMixin.__init__(self)
 
-    def Populate(self, cats, update = False):
+    def Populate(self, cats, update=False):
         """Populate the list
         """
-        itemData = {} # requested by sorter
+        itemData = {}  # requested by sorter
 
         if not update:
             self.InsertColumn(0, _("Layer"))
@@ -564,7 +581,7 @@ class CategoryListCtrl(wx.ListCtrl,
         for layer in cats.keys():
             catsList = cats[layer]
             for cat in catsList:
-                index = self.InsertStringItem(sys.maxint, str(catsList[0]))
+                index = self.InsertStringItem(self.GetItemCount(), str(catsList[0]))
                 self.SetStringItem(index, 0, str(layer))
                 self.SetStringItem(index, 1, str(cat))
                 self.SetItemData(index, i)
@@ -579,47 +596,71 @@ class CategoryListCtrl(wx.ListCtrl,
 
         return itemData
 
+
 class VDigitZBulkDialog(wx.Dialog):
-    def __init__(self, parent, title, nselected, style = wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(self, parent, title, nselected,
+                 style=wx.DEFAULT_DIALOG_STYLE):
         """Dialog used for Z bulk-labeling tool
         """
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title, style = style)
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=title,
+            style=style)
 
         self.parent = parent  # map window class instance
 
         # panel  = wx.Panel(parent=self, id=wx.ID_ANY)
 
         border = wx.BoxSizer(wx.VERTICAL)
-        
-        txt = wx.StaticText(parent = self,
-                            label = _("%d lines selected for z bulk-labeling") % nselected);
-        border.Add(item = txt, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
 
-        box   = wx.StaticBox (parent = self, id = wx.ID_ANY, label = " %s " % _("Set value"))
+        txt = wx.StaticText(
+            parent=self,
+            label=_("%d lines selected for z bulk-labeling") %
+            nselected)
+        border.Add(item=txt, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
+
+        box = wx.StaticBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Set value"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer (cols = 2, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
 
         # starting value
-        txt = wx.StaticText(parent = self,
-                            label = _("Starting value"));
-        self.value = wx.SpinCtrl(parent = self, id = wx.ID_ANY, size = (150, -1),
-                                 initial = 0,
-                                 min = -1e6, max = 1e6)
-        flexSizer.Add(txt, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.value, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        txt = wx.StaticText(parent=self,
+                            label=_("Starting value"))
+        self.value = wx.SpinCtrl(parent=self, id=wx.ID_ANY, size=(150, -1),
+                                 initial=0,
+                                 min=-1e6, max=1e6)
+        flexSizer.Add(txt, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            self.value,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
 
         # step
-        txt = wx.StaticText(parent = self,
-                            label = _("Step"))
-        self.step  = wx.SpinCtrl(parent = self, id = wx.ID_ANY, size = (150, -1),
-                                 initial = 0,
-                                 min = 0, max = 1e6)
-        flexSizer.Add(txt, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.step, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 0)
+        txt = wx.StaticText(parent=self,
+                            label=_("Step"))
+        self.step = wx.SpinCtrl(parent=self, id=wx.ID_ANY, size=(150, -1),
+                                initial=0,
+                                min=0, max=1e6)
+        flexSizer.Add(txt, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            self.step,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+
+        sizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=1, flag=wx.ALL | wx.EXPAND, border=0)
 
         # buttons
         btnCancel = wx.Button(self, wx.ID_CANCEL)
@@ -631,24 +672,35 @@ class VDigitZBulkDialog(wx.Dialog):
         btnSizer.AddButton(btnCancel)
         btnSizer.AddButton(btnOk)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = border, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
+        mainSizer.Add(
+            item=border,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
 
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
 
+
 class VDigitDuplicatesDialog(wx.Dialog):
-    def __init__(self, parent, data, title = _("List of duplicates"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
-                 pos = wx.DefaultPosition):
+
+    def __init__(self, parent, data, title=_("List of duplicates"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+                 pos=wx.DefaultPosition):
         """Show duplicated feature ids
         """
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title, style = style,
-                           pos = pos)
-        
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=title,
+            style=style,
+            pos=pos)
+
         self.parent = parent  # map window instance
         self.data = data
         self.winList = []
@@ -656,21 +708,22 @@ class VDigitDuplicatesDialog(wx.Dialog):
         # panel  = wx.Panel(parent=self, id=wx.ID_ANY)
 
         # notebook
-        self.notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+        self.notebook = wx.Notebook(
+            parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
 
         id = 1
         for key in self.data.keys():
-            panel = wx.Panel(parent = self.notebook, id = wx.ID_ANY)
-            self.notebook.AddPage(page = panel, text = " %d " % (id))
-            
+            panel = wx.Panel(parent=self.notebook, id=wx.ID_ANY)
+            self.notebook.AddPage(page=panel, text=" %d " % (id))
+
             # notebook body
             border = wx.BoxSizer(wx.VERTICAL)
 
-            win = CheckListFeature(parent = panel, data = list(self.data[key]))
+            win = CheckListFeature(parent=panel, data=list(self.data[key]))
             self.winList.append(win.GetId())
 
-            border.Add(item = win, proportion = 1,
-                       flag = wx.ALL | wx.EXPAND, border = 5)
+            border.Add(item=win, proportion=1,
+                       flag=wx.ALL | wx.EXPAND, border=5)
 
             panel.SetSizer(border)
 
@@ -686,11 +739,15 @@ class VDigitDuplicatesDialog(wx.Dialog):
         btnSizer.AddButton(btnCancel)
         btnSizer.AddButton(btnOk)
         btnSizer.Realize()
-        
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = self.notebook, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border = 5)
+        mainSizer.Add(
+            item=self.notebook,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER, border=5)
 
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
@@ -711,19 +768,22 @@ class VDigitDuplicatesDialog(wx.Dialog):
             for item in range(wlist.GetItemCount()):
                 if not wlist.IsChecked(item):
                     ids.append(int(wlist.GetItem(item, 0).GetText()))
-                    
+
         return ids
 
-class CheckListFeature(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
+
+class CheckListFeature(
+        wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.CheckListCtrlMixin):
+
     def __init__(self, parent, data,
-                 pos = wx.DefaultPosition, log = None):
+                 pos=wx.DefaultPosition, log=None):
         """List of mapset/owner/group
         """
         self.parent = parent
         self.data = data
 
         wx.ListCtrl.__init__(self, parent, wx.ID_ANY,
-                             style = wx.LC_REPORT)
+                             style=wx.LC_REPORT)
 
         listmix.CheckListCtrlMixin.__init__(self)
 
@@ -741,16 +801,16 @@ class CheckListFeature(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.Chec
         self.InsertColumn(1, _('Layer (Categories)'))
 
         for item in data:
-            index = self.InsertStringItem(sys.maxint, str(item[0]))
+            index = self.InsertStringItem(self.GetItemCount(), str(item[0]))
             self.SetStringItem(index, 1, str(item[1]))
 
         # enable all items by default
         for item in range(self.GetItemCount()):
             self.CheckItem(item, True)
 
-        self.SetColumnWidth(col = 0, width = wx.LIST_AUTOSIZE_USEHEADER)
-        self.SetColumnWidth(col = 1, width = wx.LIST_AUTOSIZE_USEHEADER)
-                
+        self.SetColumnWidth(col=0, width=wx.LIST_AUTOSIZE_USEHEADER)
+        self.SetColumnWidth(col=1, width=wx.LIST_AUTOSIZE_USEHEADER)
+
     def OnCheckItem(self, index, flag):
         """Mapset checked/unchecked
         """
diff --git a/gui/wxpython/vdigit/g.gui.vdigit.html b/gui/wxpython/vdigit/g.gui.vdigit.html
index ed53b6b..19b3d4f 100644
--- a/gui/wxpython/vdigit/g.gui.vdigit.html
+++ b/gui/wxpython/vdigit/g.gui.vdigit.html
@@ -306,4 +306,4 @@ Martin Landa, FBK-irst (2007-2008), Trento, Italy, and Czech Technical
 University in Prague, Czech Republic
 
 <p>
-<i>$Date: 2015-08-03 14:54:05 +0200 (Mon, 03 Aug 2015) $</i>
+<i>$Date: 2015-08-03 14:53:38 +0200 (Mon, 03 Aug 2015) $</i>
diff --git a/gui/wxpython/vdigit/g.gui.vdigit.py b/gui/wxpython/vdigit/g.gui.vdigit.py
index 6e03242..4dd6397 100644
--- a/gui/wxpython/vdigit/g.gui.vdigit.py
+++ b/gui/wxpython/vdigit/g.gui.vdigit.py
@@ -21,7 +21,6 @@
 #%module
 #% description: Interactive editing and digitization of vector maps.
 #% keyword: general
-#% keyword: user interface
 #% keyword: GUI
 #% keyword: vector
 #% keyword: editing
@@ -47,8 +46,13 @@ def main():
     # import wx only after running parser
     # to avoid issues with complex imports when only interface is needed
     import wx
+
+    from grass.script.setup import set_gui_path
+    set_gui_path()
+
     from core.globalvar import CheckWxVersion
     from core.utils import _
+    from core.render import Map
     from mapdisp.frame import MapFrame
     from mapdisp.main import DMonGrassInterface
     from core.settings import UserSettings
@@ -58,9 +62,10 @@ def main():
     # define classes which needs imports as local
     # for longer definitions, a separate file would be a better option
     class VDigitMapFrame(MapFrame):
+
         def __init__(self, vectorMap):
             MapFrame.__init__(
-                self, parent=None, giface=DMonGrassInterface(None),
+                self, parent=None, Map=Map(), giface=DMonGrassInterface(None),
                 title=_("GRASS GIS Vector Digitizer"), size=(850, 600))
             # this giface issue not solved yet, we must set mapframe aferwards
             self._giface._mapframe = self
@@ -83,13 +88,18 @@ def main():
                            mapset=grass.gisenv()['MAPSET'])['fullname']:
         if not flags['c']:
             grass.fatal(_("Vector map <%s> not found in current mapset. "
-                          "New vector map can be created by providing '-c' flag.") % options['map'])
+                          "New vector map can be created by providing '-c' flag.") %
+                        options['map'])
         else:
-            grass.message(_("New vector map <%s> created") % options['map'])
+            grass.verbose(_("New vector map <%s> created") % options['map'])
             try:
-                grass.run_command('v.edit', map=options['map'], tool='create')
+                grass.run_command(
+                    'v.edit', map=options['map'],
+                    tool='create', quiet=True)
             except CalledModuleError:
-                grass.fatal(_("Unable to create new vector map <%s>") % options['map'])
+                grass.fatal(
+                    _("Unable to create new vector map <%s>") %
+                    options['map'])
 
     # allow immediate rendering
     driver = UserSettings.Get(group='display', key='driver', subkey='type')
diff --git a/gui/wxpython/vdigit/main.py b/gui/wxpython/vdigit/main.py
index a4319df..3e44df8 100644
--- a/gui/wxpython/vdigit/main.py
+++ b/gui/wxpython/vdigit/main.py
@@ -17,16 +17,20 @@ This program is free software under the GNU General Public License
 try:
     from vdigit.wxdigit import IVDigit, GV_LINES, CFUNCTYPE
     haveVDigit = True
-    errorMsg   = ''
+    errorMsg = ''
 except (ImportError, NameError) as err:
     haveVDigit = False
-    errorMsg   = err
-    GV_LINES   = -1
+    errorMsg = err
+    GV_LINES = -1
+
     class IVDigit:
+
         def __init__(self):
             pass
 
+
 class VDigit(IVDigit):
+
     def __init__(self, mapwindow):
         """Base class of vector digitizer
 
diff --git a/gui/wxpython/vdigit/mapwindow.py b/gui/wxpython/vdigit/mapwindow.py
index fe23b29..2328815 100644
--- a/gui/wxpython/vdigit/mapwindow.py
+++ b/gui/wxpython/vdigit/mapwindow.py
@@ -19,30 +19,32 @@ import tempfile
 
 from grass.pydispatch.signal import Signal
 
-from dbmgr.dialogs  import DisplayAttributesDialog
-from core.gcmd      import RunCommand, GMessage, GError
-from core.debug     import Debug
+from dbmgr.dialogs import DisplayAttributesDialog
+from core.gcmd import RunCommand, GMessage, GError
+from core.debug import Debug
 from mapwin.buffered import BufferedMapWindow
-from core.settings  import UserSettings
-from core.utils     import ListOfCatsToRange, _
+from core.settings import UserSettings
+from core.utils import ListOfCatsToRange, _
 from core.globalvar import QUERYLAYER
 from vdigit.dialogs import VDigitCategoryDialog, VDigitZBulkDialog, VDigitDuplicatesDialog
-from gui_core       import gselect
+from gui_core import gselect
+
 
 class VDigitWindow(BufferedMapWindow):
     """A Buffered window extended for vector digitizer.
     """
+
     def __init__(self, parent, giface, Map, properties, tree=None,
                  id=wx.ID_ANY, lmgr=None,
-                 style = wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs):
+                 style=wx.NO_FULL_REPAINT_ON_RESIZE, **kwargs):
         BufferedMapWindow.__init__(self, parent=parent, giface=giface, Map=Map,
                                    properties=properties,
                                    style=style, **kwargs)
         self.lmgr = lmgr
         self.tree = tree
         self.pdcVector = wx.PseudoDC()
-        self.toolbar   = self.parent.GetToolbar('vdigit')
-        self.digit     = None # wxvdigit.IVDigit
+        self.toolbar = self.parent.GetToolbar('vdigit')
+        self.digit = None  # wxvdigit.IVDigit
         self._digitizingInfo = False  # digitizing with info
 
         # Emitted when info about digitizing updated
@@ -68,7 +70,7 @@ class VDigitWindow(BufferedMapWindow):
     def GetDigit(self):
         """Get digit class"""
         return self.digit
-    
+
     def SetToolbar(self, toolbar):
         """Set up related toolbar
         """
@@ -96,7 +98,7 @@ class VDigitWindow(BufferedMapWindow):
                                      (e, n), screen=False)[0]
         distance_tot = distance_seg
         for idx in range(1, len(self.polycoords)):
-            distance_tot += self.Distance(self.polycoords[idx-1],
+            distance_tot += self.Distance(self.polycoords[idx - 1],
                                           self.polycoords[idx],
                                           screen=False)[0]
         text = "seg: %.*f; tot: %.*f" % (precision, distance_seg,
@@ -107,24 +109,24 @@ class VDigitWindow(BufferedMapWindow):
         """Key pressed"""
         shift = event.ShiftDown()
         kc = event.GetKeyCode()
-        
+
         event = None
         if not shift:
             if kc == ord('P'):
-                event = wx.CommandEvent(winid = self.toolbar.addPoint)
+                event = wx.CommandEvent(winid=self.toolbar.addPoint)
                 tool = self.toolbar.OnAddPoint
             elif kc == ord('L'):
-                event = wx.CommandEvent(winid = self.toolbar.addLine)
+                event = wx.CommandEvent(winid=self.toolbar.addLine)
                 tool = self.toolbar.OnAddLine
         if event:
             self.toolbar.OnTool(event)
             tool(event)
-        
+
     def _updateMap(self):
         if not self.toolbar or \
                 not self.toolbar.GetLayer():
             return
-        
+
         # set region
         self.digit.GetDisplay().UpdateRegion()
         # re-calculate threshold for digitization tool
@@ -132,20 +134,21 @@ class VDigitWindow(BufferedMapWindow):
         # draw map
         # self.pdcVector.Clear()
         self.pdcVector.RemoveAll()
-        
+
         item = None
         if self.tree:
             try:
-                item = self.tree.FindItemByData('maplayer', self.toolbar.GetLayer())
+                item = self.tree.FindItemByData(
+                    'maplayer', self.toolbar.GetLayer())
             except TypeError:
                 pass
-        
+
         if not self.tree or \
-                (self.tree and item and \
-                     self.tree.IsItemChecked(item)):
+                (self.tree and item and
+                 self.tree.IsItemChecked(item)):
             self.redrawAll = True
             self.digit.GetDisplay().DrawMap()
-        
+
         # translate tmp objects (pointer position)
         if self.toolbar.GetAction() == 'moveLine' and \
                 hasattr(self, "moveInfo"):
@@ -156,7 +159,7 @@ class VDigitWindow(BufferedMapWindow):
                                             self.moveInfo['beginDiff'][0],
                                             self.moveInfo['beginDiff'][1])
                 del self.moveInfo['beginDiff']
-        
+
     def OnLeftDownAddLine(self, event):
         """Left mouse button pressed - add new feature
         """
@@ -164,32 +167,42 @@ class VDigitWindow(BufferedMapWindow):
             mapLayer = self.toolbar.GetLayer().GetName()
         except:
             return
-        
+
         if self.toolbar.GetAction('type') in ['point', 'centroid']:
             # add new point / centroiud
             east, north = self.Pixel2Cell(self.mouse['begin'])
-            nfeat, fids = self.digit.AddFeature(self.toolbar.GetAction('type'), [(east, north)])
+            nfeat, fids = self.digit.AddFeature(
+                self.toolbar.GetAction('type'),
+                [(east, north)])
             if nfeat < 1:
                 return
-            
-            self.UpdateMap(render = False) # redraw map
-            
+
+            self.UpdateMap(render=False)  # redraw map
+
             # add new record into atribute table
-            if UserSettings.Get(group = 'vdigit', key = "addRecord", subkey = 'enabled'):
+            if UserSettings.Get(
+                    group='vdigit', key="addRecord", subkey='enabled'):
                 # select attributes based on layer and category
-                cats = { fids[0] : {
-                        UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value') :
-                            (UserSettings.Get(group = 'vdigit', key = "category", subkey = 'value'), )
-                        }}
-                
-                posWindow = self.ClientToScreen((self.mouse['end'][0] + self.dialogOffset,
-                                                 self.mouse['end'][1] + self.dialogOffset))
-                
-                addRecordDlg = DisplayAttributesDialog(parent = self, map = mapLayer,
-                                                       cats = cats,
-                                                       pos = posWindow,
-                                                       action = "add", ignoreError = True)
-                
+                cats = {
+                    fids[0]: {
+                        UserSettings.Get(
+                            group='vdigit',
+                            key="layer",
+                            subkey='value'): (
+                            UserSettings.Get(
+                                group='vdigit',
+                                key="category",
+                                subkey='value'),
+                        )}}
+
+                posWindow = self.ClientToScreen(
+                    (self.mouse['end'][0] + self.dialogOffset,
+                     self.mouse['end'][1] + self.dialogOffset))
+
+                addRecordDlg = DisplayAttributesDialog(
+                    parent=self, map=mapLayer, cats=cats, pos=posWindow,
+                    action="add", ignoreError=True)
+
                 if self.toolbar.GetAction('type') == 'centroid':
                     for fid in fids:
                         self._geomAttrb(fid, addRecordDlg, 'area')
@@ -201,24 +214,26 @@ class VDigitWindow(BufferedMapWindow):
 
         elif self.toolbar.GetAction('type') in ["line", "boundary", "area"]:
             # add new point to the line
-            self.polycoords.append(self.Pixel2Cell(event.GetPositionTuple()[:]))
-            self.DrawLines(pdc = self.pdcTmp)
-        
+            self.polycoords.append(
+                self.Pixel2Cell(
+                    event.GetPositionTuple()[:]))
+            self.DrawLines(pdc=self.pdcTmp)
+
     def _geomAttrb(self, fid, dialog, attrb):
         """Define geometry attributes
         """
         mapLayer = self.toolbar.GetLayer()
         if self.tree:
             item = self.tree.FindItemByData('maplayer', mapLayer)
-            vdigit = self.tree.GetLayerInfo(item, key = 'vdigit')
+            vdigit = self.tree.GetLayerInfo(item, key='vdigit')
         else:
             item = vdigit = None
-        
+
         if not vdigit or \
                 'geomAttr' not in vdigit or \
                 attrb not in vdigit['geomAttr']:
             return
-        
+
         val = -1
         if attrb == 'length':
             val = self.digit.GetLineLength(fid)
@@ -229,32 +244,37 @@ class VDigitWindow(BufferedMapWindow):
         elif attrb == 'perimeter':
             val = self.digit.GetAreaPerimeter(fid)
             type = 'length'
-        
+
         if val > 0:
-            layer = int(UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value'))
+            layer = int(
+                UserSettings.Get(
+                    group='vdigit',
+                    key="layer",
+                    subkey='value'))
             column = vdigit['geomAttr'][attrb]['column']
-            val = UnitsConvertValue(val, type, vdigit['geomAttr'][attrb]['units'])
+            val = UnitsConvertValue(
+                val, type, vdigit['geomAttr'][attrb]['units'])
             dialog.SetColumnValue(layer, column, val)
             dialog.OnReset()
-        
+
     def _geomAttrbUpdate(self, fids):
         """Update geometry atrributes of currently selected features
-        
+
         :param fid: list feature id
         """
         mapLayer = self.parent.toolbars['vdigit'].GetLayer()
-        vectorName =  mapLayer.GetName()
+        vectorName = mapLayer.GetName()
         if self.tree:
             item = self.tree.FindItemByData('maplayer', mapLayer)
-            vdigit = self.tree.GetLayerInfo(item, key = 'vdigit')
+            vdigit = self.tree.GetLayerInfo(item, key='vdigit')
         else:
             item = vdigit = None
-        
+
         if not vdigit or 'geomAttr' not in vdigit:
             return
-        
+
         dbInfo = gselect.VectorDBInfo(vectorName)
-        sqlfile = tempfile.NamedTemporaryFile(mode = "w")
+        sqlfile = tempfile.NamedTemporaryFile(mode="w")
         for fid in fids:
             for layer, cats in self.digit.GetLineCats(fid).iteritems():
                 table = dbInfo.GetTable(layer)
@@ -269,49 +289,50 @@ class VDigitWindow(BufferedMapWindow):
                     elif attrb == 'perimeter':
                         val = self.digit.GetAreaPerimeter(fid)
                         type = 'length'
-                    
+
                     if val < 0:
                         continue
                     val = UnitsConvertValue(val, type, item['units'])
-                    
+
                     for cat in cats:
-                        sqlfile.write('UPDATE %s SET %s = %f WHERE %s = %d;\n' % \
-                                          (table, item['column'], val,
-                                           dbInfo.GetKeyColumn(layer), cat))
-            
+                        sqlfile.write(
+                            'UPDATE %s SET %s = %f WHERE %s = %d;\n' %
+                            (table, item['column'], val, dbInfo.GetKeyColumn(layer), cat))
+
             sqlfile.file.flush()
             RunCommand('db.execute',
-                       parent = True,
-                       quiet = True,
-                       input = sqlfile.name)
-            
+                       parent=True,
+                       quiet=True,
+                       input=sqlfile.name)
+
     def _updateATM(self):
         """Update open Attribute Table Manager
-        
+
         .. todo::
             use AddDataRow() instead
         """
         if not self.lmgr:
             return
-        
+
         # update ATM
         digitVector = self.toolbar.GetLayer().GetName()
-                            
+
         for atm in self.lmgr.dialogs['atm']:
             atmVector = atm.GetVectorName()
             if atmVector == digitVector:
-                layer = UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value')
+                layer = UserSettings.Get(
+                    group='vdigit', key="layer", subkey='value')
                 # TODO: use AddDataRow instead
                 atm.LoadData(layer)
-        
+
     def OnLeftDownEditLine(self, event):
         """Left mouse button pressed - edit linear feature - add new
         vertex.
         """
         self.polycoords.append(self.Pixel2Cell(self.mouse['begin']))
         self.moveInfo['id'].append(wx.NewId())
-        self.DrawLines(pdc = self.pdcTmp)
-        
+        self.DrawLines(pdc=self.pdcTmp)
+
     def OnLeftDownMoveLine(self, event):
         """Left mouse button pressed - vector digitizer move
         feature/vertex, edit linear feature
@@ -319,17 +340,17 @@ class VDigitWindow(BufferedMapWindow):
         self.moveInfo = dict()
         # geographic coordinates of initial position (left-down)
         self.moveInfo['begin'] = None
-        # list of ids to modify    
+        # list of ids to modify
         self.moveInfo['id'] = list()
-        
+
         # set pen
         if self.toolbar.GetAction() in ["moveVertex", "editLine"]:
-            pcolor = UserSettings.Get(group = 'vdigit', key = "symbol",
-                                      subkey = ["highlight", "color"])
-            self.pen = self.polypen = wx.Pen(colour = pcolor,
-                                             width = 2, style = wx.SHORT_DASH)
+            pcolor = UserSettings.Get(group='vdigit', key="symbol",
+                                      subkey=["highlight", "color"])
+            self.pen = self.polypen = wx.Pen(colour=pcolor,
+                                             width=2, style=wx.SHORT_DASH)
             self.pdcTmp.SetPen(self.polypen)
-        
+
     def OnLeftDownDisplayCA(self, event):
         """Left mouse button pressed - vector digitizer display categories
         or attributes action
@@ -338,47 +359,50 @@ class VDigitWindow(BufferedMapWindow):
             mapLayer = self.toolbar.GetLayer().GetName()
         except:
             return
-        
+
         coords = self.Pixel2Cell(self.mouse['begin'])
-        
+
         # unselect
         self.digit.GetDisplay().SetSelected([])
-        
+
         # select feature by point
         cats = {}
-        self.digit.GetDisplay().SelectLineByPoint(coords) 
-        
+        self.digit.GetDisplay().SelectLineByPoint(coords)
+
         if not self.digit.GetDisplay().GetSelected():
             for key in ('attributes', 'category'):
                 if self.parent.dialogs[key] and \
                         self.parent.dialogs[key].IsShown():
                     self.parent.dialogs[key].Hide()
-            self.UpdateMap(render = False, renderVector = True)
+            self.UpdateMap(render=False, renderVector=True)
             return
-        
-        if UserSettings.Get(group = 'vdigit', key = 'checkForDupl',
-                            subkey = 'enabled'):
+
+        if UserSettings.Get(group='vdigit', key='checkForDupl',
+                            subkey='enabled'):
             lines = self.digit.GetDisplay().GetSelected()
         else:
-            lines = (self.digit.GetDisplay().GetSelected()[0],) # only first found
-                        
+            lines = (
+                self.digit.GetDisplay().GetSelected()[0],
+            )  # only first found
+
         for line in lines:
             cats[line] = self.digit.GetLineCats(line)
-        
-        posWindow = self.ClientToScreen((self.mouse['end'][0] + self.dialogOffset,
-                                         self.mouse['end'][1] + self.dialogOffset))
-        
+
+        posWindow = self.ClientToScreen(
+            (self.mouse['end'][0] + self.dialogOffset,
+             self.mouse['end'][1] + self.dialogOffset))
+
         if self.toolbar.GetAction() == "displayAttrs":
             # select attributes based on coordinates (all layers)
             if self.parent.dialogs['attributes'] is None:
                 self.parent.dialogs['attributes'] = \
-                    DisplayAttributesDialog(parent = self, map = mapLayer,
-                                            cats = cats,
-                                            action = "update")
+                    DisplayAttributesDialog(parent=self, map=mapLayer,
+                                            cats=cats,
+                                            action="update")
             else:
                 # upgrade dialog
-                self.parent.dialogs['attributes'].UpdateDialog(cats = cats)
-           
+                self.parent.dialogs['attributes'].UpdateDialog(cats=cats)
+
             if self.parent.dialogs['attributes'] and \
                     self.parent.dialogs['attributes'].mapDBInfo:
                 if len(cats.keys()) > 0:
@@ -389,20 +413,20 @@ class VDigitWindow(BufferedMapWindow):
                     if self.parent.dialogs['attributes'] and \
                             self.parent.dialogs['attributes'].IsShown():
                         self.parent.dialogs['attributes'].Hide()
-        
-        else: # displayCats
+
+        else:  # displayCats
             if self.parent.dialogs['category'] is None:
                 # open new dialog
-                dlg = VDigitCategoryDialog(parent = self,
-                                           vectorName = mapLayer,
-                                           cats = cats,
-                                           pos = posWindow,
-                                           title = _("Update categories"))
+                dlg = VDigitCategoryDialog(parent=self,
+                                           vectorName=mapLayer,
+                                           cats=cats,
+                                           pos=posWindow,
+                                           title=_("Update categories"))
                 self.parent.dialogs['category'] = dlg
             else:
                 # update currently open dialog
-                self.parent.dialogs['category'].UpdateDialog(cats = cats)
-                
+                self.parent.dialogs['category'].UpdateDialog(cats=cats)
+
             if self.parent.dialogs['category']:
                 if len(cats.keys()) > 0:
                     # highlight feature & re-draw map
@@ -411,9 +435,9 @@ class VDigitWindow(BufferedMapWindow):
                 else:
                     if self.parent.dialogs['category'].IsShown():
                         self.parent.dialogs['category'].Hide()
-        
-        self.UpdateMap(render = False, renderVector = True)
-        
+
+        self.UpdateMap(render=False, renderVector=True)
+
     def OnLeftDownCopyCA(self, event):
         """Left mouse button pressed - vector digitizer copy
         categories or attributes action
@@ -423,7 +447,7 @@ class VDigitWindow(BufferedMapWindow):
         else:
             self.copyCatsIds = []
             self.mouse['box'] = 'box'
-        
+
     def OnLeftDownCopyLine(self, event):
         """Left mouse button pressed - vector digitizer copy lines
         action
@@ -431,51 +455,51 @@ class VDigitWindow(BufferedMapWindow):
         if not hasattr(self, "copyIds"):
             self.copyIds = []
             self.layerTmp = None
-        
+
     def OnLeftDownBulkLine(self, event):
         """Left mouse button pressed - vector digitizer label 3D
         vector lines
         """
-        if len(self.polycoords) > 1: # start new line
+        if len(self.polycoords) > 1:  # start new line
             self.polycoords = []
-            self.ClearLines(pdc = self.pdcTmp)
+            self.ClearLines(pdc=self.pdcTmp)
         self.polycoords.append(self.Pixel2Cell(event.GetPositionTuple()[:]))
         if len(self.polycoords) == 1:
             begin = self.Pixel2Cell(self.polycoords[-1])
-            end   = self.Pixel2Cell(self.mouse['end'])
+            end = self.Pixel2Cell(self.mouse['end'])
         else:
-            end   = self.Pixel2Cell(self.polycoords[-1])
+            end = self.Pixel2Cell(self.polycoords[-1])
             begin = self.Pixel2Cell(self.mouse['begin'])
-            
-            self.DrawLines(self.pdcTmp, polycoords = (begin, end))
-        
+
+            self.DrawLines(self.pdcTmp, polycoords=(begin, end))
+
     def OnLeftDownUndo(self, event):
         """Left mouse button pressed with control key - vector
         digitizer undo functionality
         """
         if self.mouse["use"] != "pointer" or not self.toolbar:
             return
-        
+
         action = self.toolbar.GetAction()
-        if (action == "addLine" and \
-                self.toolbar.GetAction('type') in ["line", "boundary", "area"]) or \
-                action == "editLine":
+        if (action == "addLine" and self.toolbar.GetAction('type')
+                in ["line", "boundary", "area"]) or action == "editLine":
             # add line or boundary -> remove last point from the line
             try:
                 removed = self.polycoords.pop()
-                Debug.msg(4, "VDigitWindow.OnMiddleDown(): polycoords_poped=%s" %
-                          [removed, ])
+                Debug.msg(
+                    4, "VDigitWindow.OnMiddleDown(): polycoords_poped=%s" %
+                    [removed, ])
                 # self.mouse['begin'] = self.Cell2Pixel(self.polycoords[-1])
             except:
                 pass
-            
+
         if action == "editLine":
             # remove last vertex & line
             if len(self.moveInfo['id']) > 1:
                 self.moveInfo['id'].pop()
-                
-            self.UpdateMap(render = False, renderVector = False)
-            
+
+            self.UpdateMap(render=False, renderVector=False)
+
         elif action in ["deleteLine", "deleteArea", "moveLine", "splitLine",
                         "addVertex", "removeVertex", "moveVertex",
                         "copyCats", "flipLine", "mergeLine",
@@ -483,36 +507,36 @@ class VDigitWindow(BufferedMapWindow):
                         "queryLine", "breakLine", "typeConv"]:
             # various tools -> unselected selected features
             self.digit.GetDisplay().SetSelected([])
-            
+
             if action in ["moveLine", "moveVertex", "editLine"] and \
                     hasattr(self, "moveInfo"):
                 del self.moveInfo
-                
+
             elif action == "copyCats":
                 try:
                     del self.copyCatsList
                     del self.copyCatsIds
                 except AttributeError:
                     pass
-                
+
             elif action == "copyLine":
                 del self.copyIds
                 if self.layerTmp:
                     self.Map.DeleteLayer(self.layerTmp)
-                    self.UpdateMap(render = True, renderVector = False)
+                    self.UpdateMap(render=True, renderVector=False)
                 del self.layerTmp
 
             self.polycoords = []
-            self.UpdateMap(render = False) # render vector
-        
+            self.UpdateMap(render=False)  # render vector
+
         elif action == "zbulkLine":
             # reset polyline
             self.polycoords = []
             self.digit.GetDisplay().SetSelected([])
-            self.UpdateMap(render = False)
-        
+            self.UpdateMap(render=False)
+
         self.redrawAll = True
-        self.UpdateMap(render = False, renderVector = False)
+        self.UpdateMap(render=False, renderVector=False)
 
     def _onLeftDown(self, event):
         """Left mouse button donw - vector digitizer various actions
@@ -520,41 +544,54 @@ class VDigitWindow(BufferedMapWindow):
         try:
             mapLayer = self.toolbar.GetLayer().GetName()
         except:
-            GMessage(parent = self,
-                     message = _("No vector map selected for editing."))
+            GMessage(parent=self,
+                     message=_("No vector map selected for editing."))
             event.Skip()
             return
-        
+
         action = self.toolbar.GetAction()
-        
+
         if not action:
-            GMessage(parent = self,
-                     message = _("Nothing to do. "
-                                 "Choose appropriate tool from digitizer toolbar."))
+            GMessage(
+                parent=self, message=_(
+                    "Nothing to do. "
+                    "Choose appropriate tool from digitizer toolbar."))
             event.Skip()
             return
-        
+
         if action not in ("moveVertex",
                           "addVertex",
                           "removeVertex",
                           "editLine"):
             # set pen
-            self.pen = wx.Pen(colour = UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                                        subkey = ['newSegment', 'color']),
-                              width = 2, style = wx.SHORT_DASH)
-            self.polypen = wx.Pen(colour = UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                                            subkey = ['newLine', 'color']),
-                                  width = 2, style = wx.SOLID)
-        
+            self.pen = wx.Pen(
+                colour=UserSettings.Get(
+                    group='vdigit',
+                    key='symbol',
+                    subkey=[
+                        'newSegment',
+                        'color']),
+                width=2,
+                style=wx.SHORT_DASH)
+            self.polypen = wx.Pen(
+                colour=UserSettings.Get(
+                    group='vdigit',
+                    key='symbol',
+                    subkey=[
+                        'newLine',
+                        'color']),
+                width=2,
+                style=wx.SOLID)
+
         if action in ("addVertex",
                       "removeVertex",
                       "splitLines"):
             # unselect
             self.digit.GetDisplay().SetSelected([])
-        
+
         if action == "addLine":
             self.OnLeftDownAddLine(event)
-        
+
         elif action == "editLine" and \
                 hasattr(self, "moveInfo"):
             self.OnLeftDownEditLine(event)
@@ -562,53 +599,56 @@ class VDigitWindow(BufferedMapWindow):
         elif action in ("moveLine", "moveVertex", "editLine") and \
                 not hasattr(self, "moveInfo"):
             self.OnLeftDownMoveLine(event)
-        
+
         elif action in ("displayAttrs"
                         "displayCats"):
             self.OnLeftDownDisplayCA(event)
-            
+
         elif action in ("copyCats",
                         "copyAttrs"):
             self.OnLeftDownCopyCA(event)
-            
+
         elif action == "copyLine":
             self.OnLeftDownCopyLine(event)
-            
+
         elif action == "zbulkLine":
             self.OnLeftDownBulkLine(event)
-        
+
     def OnLeftUpVarious(self, event):
         """Left mouse button released - vector digitizer various
         actions
         """
         pos1 = self.Pixel2Cell(self.mouse['begin'])
         pos2 = self.Pixel2Cell(self.mouse['end'])
-        
+
         nselected = 0
         action = self.toolbar.GetAction()
         # -> delete line || move line || move vertex
         if action in ("moveVertex",
                       "editLine"):
             if len(self.digit.GetDisplay().GetSelected()) == 0:
-                nselected = int(self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
-                
+                nselected = int(
+                    self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
+
                 if action == "editLine":
                     try:
-                        selVertex = self.digit.GetDisplay().GetSelectedVertex(pos1)[0]
+                        selVertex = self.digit.GetDisplay(
+                        ).GetSelectedVertex(pos1)[0]
                     except IndexError:
                         selVertex = None
-                        
+
                     if selVertex:
                         # self.UpdateMap(render=False)
-                        ids = self.digit.GetDisplay().GetSelected(grassId = False)
+                        ids = self.digit.GetDisplay().GetSelected(grassId=False)
                         # move this line to tmp layer
                         self.polycoords = []
                         for id in ids:
-                            if id % 2: # register only vertices
-                                e, n = self.Pixel2Cell(self.pdcVector.GetIdBounds(id)[0:2])
+                            if id % 2:  # register only vertices
+                                e, n = self.Pixel2Cell(
+                                    self.pdcVector.GetIdBounds(id)[0:2])
                                 self.polycoords.append((e, n))
-                        self.digit.GetDisplay().DrawSelected(False) 
-                                
+                        self.digit.GetDisplay().DrawSelected(False)
+
                         if selVertex < ids[-1] / 2:
                             # choose first or last node of line
                             self.moveInfo['id'].reverse()
@@ -617,14 +657,15 @@ class VDigitWindow(BufferedMapWindow):
                         # unselect
                         self.digit.GetDisplay().SetSelected([])
                         del self.moveInfo
-                
-                    self.UpdateMap(render = False)
-            
+
+                    self.UpdateMap(render=False)
+
         elif action in ("copyCats",
                         "copyAttrs"):
             if not hasattr(self, "copyCatsIds"):
                 # 'from' -> select by point
-                nselected = int(self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
+                nselected = int(
+                    self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
                 if nselected:
                     self.copyCatsList = self.digit.GetDisplay().GetSelected()
             else:
@@ -633,17 +674,18 @@ class VDigitWindow(BufferedMapWindow):
                 # return number of selected features (by box/point)
                 nselected = self.digit.GetDisplay().SelectLinesByBox((pos1, pos2))
                 if nselected == 0:
-                    nselected = int(self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
-                        
+                    nselected = int(
+                        self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
+
                 if nselected > 0:
                     self.copyCatsIds = self.digit.GetDisplay().GetSelected()
-        
+
         elif action == "queryLine":
-            selected = self.digit.SelectLinesByQuery(bbox = (pos1, pos2))
+            selected = self.digit.SelectLinesByQuery(bbox=(pos1, pos2))
             nselected = len(selected)
             if nselected > 0:
                 self.digit.GetDisplay().SetSelected(selected)
-        
+
         else:
             # -> moveLine || deleteLine, etc. (select by point/box)
             if action == 'moveLine' and \
@@ -651,17 +693,19 @@ class VDigitWindow(BufferedMapWindow):
                 nselected = 0
             else:
                 if action == 'deleteArea':
-                    nselected = int(self.digit.GetDisplay().SelectAreaByPoint(pos1)['area'] != -1)
+                    nselected = int(
+                        self.digit.GetDisplay().SelectAreaByPoint(pos1)['area'] != -1)
                 else:
                     if action == 'moveLine':
                         drawSeg = True
                     else:
                         drawSeg = False
-                        
-                    nselected = self.digit.GetDisplay().SelectLinesByBox(bbox = (pos1, pos2),
-                                                                         drawSeg = drawSeg)
+
+                    nselected = self.digit.GetDisplay().SelectLinesByBox(
+                        bbox=(pos1, pos2), drawSeg=drawSeg)
                     if nselected == 0:
-                        nselected = int(self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
+                        nselected = int(
+                            self.digit.GetDisplay().SelectLineByPoint(pos1)['line'] != -1)
 
         if nselected > 0:
             if action in ("moveLine", "moveVertex") and \
@@ -669,121 +713,139 @@ class VDigitWindow(BufferedMapWindow):
                 # get pseudoDC id of objects which should be redrawn
                 if action == "moveLine":
                     # -> move line
-                    self.moveInfo['id'] = self.digit.GetDisplay().GetSelected(grassId = False)
-                else: # moveVertex
-                    self.moveInfo['id'] = self.digit.GetDisplay().GetSelectedVertex(pos1)
-                    if len(self.moveInfo['id']) == 0: # no vertex found
+                    self.moveInfo['id'] = self.digit.GetDisplay(
+                    ).GetSelected(grassId=False)
+                else:  # moveVertex
+                    self.moveInfo['id'] = self.digit.GetDisplay(
+                    ).GetSelectedVertex(pos1)
+                    if len(self.moveInfo['id']) == 0:  # no vertex found
                         self.digit.GetDisplay().SetSelected([])
-            
+
             #
             # check for duplicates
             #
-            if UserSettings.Get(group = 'vdigit', key = 'checkForDupl', subkey = 'enabled'):
+            if UserSettings.Get(
+                    group='vdigit', key='checkForDupl', subkey='enabled'):
                 dupl = self.digit.GetDisplay().GetDuplicates()
-                self.UpdateMap(render = False)
-                    
+                self.UpdateMap(render=False)
+
                 if dupl:
-                    posWindow = self.ClientToScreen((self.mouse['end'][0] + self.dialogOffset,
-                                                     self.mouse['end'][1] + self.dialogOffset))
-                    
-                    dlg = VDigitDuplicatesDialog(parent = self, data = dupl, pos = posWindow)
-                    
+                    posWindow = self.ClientToScreen(
+                        (self.mouse['end'][0] + self.dialogOffset,
+                         self.mouse['end'][1] + self.dialogOffset))
+
+                    dlg = VDigitDuplicatesDialog(
+                        parent=self, data=dupl, pos=posWindow)
+
                     if dlg.ShowModal() == wx.ID_OK:
                         self.digit.GetDisplay().UnSelect(dlg.GetUnSelected())
                         # update selected
-                        self.UpdateMap(render = False)
-                
+                        self.UpdateMap(render=False)
+
             if action != "editLine":
                 # -> move line || move vertex
-                self.UpdateMap(render = False)
-        
-        else: # no vector object found
+                self.UpdateMap(render=False)
+
+        else:  # no vector object found
             if not (action in ("moveLine",
-                               "moveVertex") and \
-                        hasattr(self, "moveInfo") and \
-                        len(self.moveInfo['id']) > 0):
+                               "moveVertex") and
+                    hasattr(self, "moveInfo") and
+                    len(self.moveInfo['id']) > 0):
                 # avoid left-click when features are already selected
-                self.UpdateMap(render = False, renderVector = False)
-        
+                self.UpdateMap(render=False, renderVector=False)
+
     def OnLeftUpModifyLine(self, event):
         """Left mouse button released - vector digitizer split line,
         add/remove vertex action
         """
         pos1 = self.Pixel2Cell(self.mouse['begin'])
-        
+
         pointOnLine = self.digit.GetDisplay().SelectLineByPoint(pos1)['point']
         if not pointOnLine:
             return
-        
+
         if self.toolbar.GetAction() in ["splitLine", "addVertex"]:
-            self.UpdateMap(render = False) # highlight object
-            self.DrawCross(pdc = self.pdcTmp, coords = self.Cell2Pixel((pointOnLine[0], pointOnLine[1])),
-                           size = 5)
-        else: # removeVertex
+            self.UpdateMap(render=False)  # highlight object
+            self.DrawCross(
+                pdc=self.pdcTmp, coords=self.Cell2Pixel(
+                    (pointOnLine[0], pointOnLine[1])), size=5)
+        else:  # removeVertex
             # get only id of vertex
             try:
                 id = self.digit.GetDisplay().GetSelectedVertex(pos1)[0]
             except IndexError:
                 id = None
-            
+
             if id:
                 x, y = self.pdcVector.GetIdBounds(id)[0:2]
                 self.pdcVector.RemoveId(id)
-                self.UpdateMap(render = False) # highlight object
-                self.DrawCross(pdc = self.pdcTmp, coords = (x, y),
-                               size = 5)
+                self.UpdateMap(render=False)  # highlight object
+                self.DrawCross(pdc=self.pdcTmp, coords=(x, y),
+                               size=5)
             else:
                 # unselect
                 self.digit.GetDisplay().SetSelected([])
-                self.UpdateMap(render = False)
-        
+                self.UpdateMap(render=False)
+
     def OnLeftUpCopyLine(self, event):
         """Left mouse button released - vector digitizer copy feature
         action
         """
         pos1 = self.Pixel2Cell(self.mouse['begin'])
         pos2 = self.Pixel2Cell(self.mouse['end'])
-        
-        if UserSettings.Get(group = 'vdigit', key = 'bgmap',
+
+        if UserSettings.Get(group='vdigit', key='bgmap',
                             subkey='value', settings_type='internal') == '':
             # no background map -> copy from current vector map layer
             nselected = self.digit.GetDisplay().SelectLinesByBox((pos1, pos2))
-            
+
             if nselected > 0:
                 # highlight selected features
-                self.UpdateMap(render = False)
+                self.UpdateMap(render=False)
             else:
-                self.UpdateMap(render = False, renderVector = False)
+                self.UpdateMap(render=False, renderVector=False)
         else:
             # copy features from background map
-            self.copyIds = self.digit.SelectLinesFromBackgroundMap(bbox = (pos1, pos2))
+            self.copyIds = self.digit.SelectLinesFromBackgroundMap(
+                bbox=(pos1,
+                      pos2))
             if len(self.copyIds) > 0:
-                color = UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                         subkey = ['highlight', 'color'])
-                colorStr = str(color[0]) + ":" + str(color[1]) + ":" + str(color[2])
-                dVectTmp = ['d.vect',
-                            'map=%s' % UserSettings.Get(group = 'vdigit', key = 'bgmap',
-                                                        subkey='value', settings_type='internal'),
-                            'cats=%s' % ListOfCatsToRange(self.copyIds),
-                            '-i',
-                            'color=%s' % colorStr,
-                            'fill_color=%s' % colorStr,
-                            'type=point,line,boundary,centroid',
-                            'width=2']
-                
+                color = UserSettings.Get(group='vdigit', key='symbol',
+                                         subkey=['highlight', 'color'])
+                colorStr = str(color[0]) + ":" + str(color[1]
+                                                     ) + ":" + str(color[2])
+                dVectTmp = [
+                    'd.vect',
+                    'map=%s' %
+                    UserSettings.Get(
+                        group='vdigit',
+                        key='bgmap',
+                        subkey='value',
+                        settings_type='internal'),
+                    'cats=%s' %
+                    ListOfCatsToRange(
+                        self.copyIds),
+                    '-i',
+                    'color=%s' %
+                    colorStr,
+                    'fill_color=%s' %
+                    colorStr,
+                    'type=point,line,boundary,centroid',
+                    'width=2']
+
                 if not self.layerTmp:
-                    self.layerTmp = self.Map.AddLayer(ltype = 'vector',
-                                                      name = QUERYLAYER,
-                                                      command = dVectTmp)
+                    self.layerTmp = self.Map.AddLayer(ltype='vector',
+                                                      name=QUERYLAYER,
+                                                      command=dVectTmp)
                 else:
                     self.layerTmp.SetCmd(dVectTmp)
             else:
                 if self.layerTmp:
                     self.Map.DeleteLayer(self.layerTmp)
                     self.layerTmp = None
-            
-            self.UpdateMap(render = True, renderVector = True)
-            
+
+            self.UpdateMap(render=True, renderVector=True)
+
     def OnLeftUpBulkLine(self, event):
         """Left mouse button released - vector digitizer z-bulk line
         action
@@ -792,33 +854,34 @@ class VDigitWindow(BufferedMapWindow):
         pos1 = self.polycoords[0]
         pos2 = self.polycoords[1]
         nselected = self.digit.GetDisplay().SelectLinesByBox((pos1, pos2))
-        
+
         if nselected > 0:
             # highlight selected features
-            self.UpdateMap(render = False)
-            self.DrawLines(pdc = self.pdcTmp) # redraw temp line
+            self.UpdateMap(render=False)
+            self.DrawLines(pdc=self.pdcTmp)  # redraw temp line
         else:
-            self.UpdateMap(render = False, renderVector = False)
-            
+            self.UpdateMap(render=False, renderVector=False)
+
     def OnLeftUpConnectLine(self, event):
         """Left mouse button released - vector digitizer connect line
         action
         """
         if len(self.digit.GetDisplay().GetSelected()) > 0:
-            self.UpdateMap(render = False)
-        
+            self.UpdateMap(render=False)
+
     def _onLeftUp(self, event):
         """Left mouse button released"""
         if event.ControlDown():
             return
-        
+
         if hasattr(self, "moveInfo"):
             if len(self.digit.GetDisplay().GetSelected()) == 0:
-                self.moveInfo['begin'] = self.Pixel2Cell(self.mouse['begin']) # left down
-            
+                self.moveInfo['begin'] = self.Pixel2Cell(
+                    self.mouse['begin'])  # left down
+
             # eliminate initial mouse moving efect
-            self.mouse['begin'] = self.mouse['end'] 
-        
+            self.mouse['begin'] = self.mouse['end']
+
         action = self.toolbar.GetAction()
         if action in ("deleteLine",
                       "deleteArea",
@@ -835,25 +898,25 @@ class VDigitWindow(BufferedMapWindow):
                       "typeConv",
                       "connectLine"):
             self.OnLeftUpVarious(event)
-        
+
         elif action in ("splitLine",
                         "addVertex",
                         "removeVertex"):
             self.OnLeftUpModifyLine(event)
-        
+
         elif action == "copyLine":
             self.OnLeftUpCopyLine(event)
-            
+
         elif action == "zbulkLine" and \
                 len(self.polycoords) == 2:
             self.OnLeftUpBulkLine(event)
-        
+
         elif action == "connectLine":
             self.OnLeftUpConnectLine(event)
-        
+
         if len(self.digit.GetDisplay().GetSelected()) > 0:
             self.redrawAll = None
-        
+
     def _onRightDown(self, event):
         # digitization tool (confirm action)
         action = self.toolbar.GetAction()
@@ -861,10 +924,10 @@ class VDigitWindow(BufferedMapWindow):
                 hasattr(self, "moveInfo"):
             pFrom = self.moveInfo['begin']
             pTo = self.Pixel2Cell(event.GetPositionTuple())
-            
+
             move = (pTo[0] - pFrom[0],
                     pTo[1] - pFrom[1])
-            
+
             if action == "moveLine":
                 # move line
                 if self.digit.MoveSelectedLines(move) < 0:
@@ -874,11 +937,11 @@ class VDigitWindow(BufferedMapWindow):
                 fid = self.digit.MoveSelectedVertex(pFrom, move)
                 if fid < 0:
                     return
-                
-                self._geomAttrbUpdate([fid,])
-            
+
+                self._geomAttrbUpdate([fid, ])
+
             del self.moveInfo
-        
+
     def _onRightUp(self, event):
         """Right mouse button released (confirm action)
         """
@@ -890,44 +953,51 @@ class VDigitWindow(BufferedMapWindow):
                 mapName = self.toolbar.GetLayer().GetName()
             except:
                 mapName = None
-                GError(parent = self,
-                       message = _("No vector map selected for editing."))
-                    
+                GError(parent=self,
+                       message=_("No vector map selected for editing."))
+
             if mapName:
                 if self.toolbar.GetAction('type') == 'line':
                     line = True
                 else:
                     line = False
-                    
-                if len(self.polycoords) < 2: # ignore 'one-point' lines
+
+                if len(self.polycoords) < 2:  # ignore 'one-point' lines
                     return
-                    
-                nfeat, fids = self.digit.AddFeature(self.toolbar.GetAction('type'), self.polycoords)
+
+                nfeat, fids = self.digit.AddFeature(
+                    self.toolbar.GetAction('type'), self.polycoords)
                 if nfeat < 0:
                     return
-                    
+
                 position = self.Cell2Pixel(self.polycoords[-1])
                 self.polycoords = []
-                self.UpdateMap(render = False)
+                self.UpdateMap(render=False)
                 self.redrawAll = True
                 self.Refresh()
-                
+
                 # add new record into atribute table
                 if self._addRecord() and (line is True or (not line and nfeat > 0)):
-                    posWindow = self.ClientToScreen((position[0] + self.dialogOffset,
-                                                     position[1] + self.dialogOffset))
-                        
+                    posWindow = self.ClientToScreen(
+                        (position[0] + self.dialogOffset, position[1] + self.dialogOffset))
+
                     # select attributes based on layer and category
-                    cats = { fids[0] : {
-                            UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value') :
-                                (UserSettings.Get(group = 'vdigit', key = "category", subkey = 'value'), )
-                            }}
-                    
-                    addRecordDlg = DisplayAttributesDialog(parent = self, map = mapName,
-                                                           cats = cats,
-                                                           pos = posWindow,
-                                                           action = "add", ignoreError = True)
-                    
+                    cats = {
+                        fids[0]: {
+                            UserSettings.Get(
+                                group='vdigit',
+                                key="layer",
+                                subkey='value'): (
+                                UserSettings.Get(
+                                    group='vdigit',
+                                    key="category",
+                                    subkey='value'),
+                            )}}
+
+                    addRecordDlg = DisplayAttributesDialog(
+                        parent=self, map=mapName, cats=cats, pos=posWindow,
+                        action="add", ignoreError=True)
+
                     for fid in fids:
                         self._geomAttrb(fid, addRecordDlg, 'length')
                         # auto-placing centroid
@@ -962,30 +1032,30 @@ class VDigitWindow(BufferedMapWindow):
             fid = self.digit.RemoveVertex(self.Pixel2Cell(self.mouse['begin']))
             if fid < 0:
                 return
-            self._geomAttrbUpdate([fid,])
+            self._geomAttrbUpdate([fid, ])
         elif action in ("copyCats", "copyAttrs"):
             if action == 'copyCats':
                 if self.digit.CopyCats(self.copyCatsList,
-                                       self.copyCatsIds, copyAttrb = False) < 0:
+                                       self.copyCatsIds, copyAttrb=False) < 0:
                     return
             else:
                 if self.digit.CopyCats(self.copyCatsList,
-                                       self.copyCatsIds, copyAttrb = True) < 0:
+                                       self.copyCatsIds, copyAttrb=True) < 0:
                     return
-                
+
             del self.copyCatsList
             del self.copyCatsIds
-            
+
             self._updateATM()
-                
+
         elif action == "editLine" and \
                 hasattr(self, "moveInfo"):
             line = self.digit.GetDisplay().GetSelected()[0]
             if self.digit.EditLine(line, self.polycoords) < 0:
                 return
-                
+
             del self.moveInfo
-                
+
         elif action == "flipLine":
             if self.digit.FlipLine() < 0:
                 return
@@ -1008,21 +1078,23 @@ class VDigitWindow(BufferedMapWindow):
             del self.copyIds
             if self.layerTmp:
                 self.Map.DeleteLayer(self.layerTmp)
-                self.UpdateMap(render = True, renderVector = False)
+                self.UpdateMap(render=True, renderVector=False)
             del self.layerTmp
-        
+
         elif action == "zbulkLine" and len(self.polycoords) == 2:
             pos1 = self.polycoords[0]
             pos2 = self.polycoords[1]
-            
+
             selected = self.digit.GetDisplay().GetSelected()
-            dlg = VDigitZBulkDialog(parent = self, title = _("Z bulk-labeling dialog"),
-                                    nselected = len(selected))
+            dlg = VDigitZBulkDialog(
+                parent=self,
+                title=_("Z bulk-labeling dialog"),
+                nselected=len(selected))
             if dlg.ShowModal() == wx.ID_OK:
                 if self.digit.ZBulkLines(pos1, pos2, dlg.value.GetValue(),
                                          dlg.step.GetValue()) < 0:
                     return
-            self.UpdateMap(render = False)
+            self.UpdateMap(render=False)
         elif action == "typeConv":
             # -> feature type conversion
             # - point <-> centroid
@@ -1034,8 +1106,8 @@ class VDigitWindow(BufferedMapWindow):
             # unselect and re-render
             self.digit.GetDisplay().SetSelected([])
             self.polycoords = []
-            self.UpdateMap(render = False)
-        
+            self.UpdateMap(render=False)
+
     def _onMouseMoving(self, event):
         self.mouse['end'] = event.GetPositionTuple()[:]
 
@@ -1046,13 +1118,14 @@ class VDigitWindow(BufferedMapWindow):
         if action == "addLine" and \
                 self.toolbar.GetAction('type') in ["line", "boundary", "area"]:
             if len(self.polycoords) > 0:
-                self.MouseDraw(pdc = self.pdcTmp, begin = self.Cell2Pixel(self.polycoords[-1]))
-        
+                self.MouseDraw(pdc=self.pdcTmp,
+                               begin=self.Cell2Pixel(self.polycoords[-1]))
+
         elif action in ["moveLine", "moveVertex", "editLine"] \
                 and hasattr(self, "moveInfo"):
             dx = self.mouse['end'][0] - self.mouse['begin'][0]
             dy = self.mouse['end'][1] - self.mouse['begin'][1]
-        
+
             # draw lines on new position
             if action == "moveLine" and \
                     len(self.moveInfo['id']) > 0:
@@ -1063,38 +1136,44 @@ class VDigitWindow(BufferedMapWindow):
                 # move vertex ->
                 # (vertex, left vertex, left line,
                 # right vertex, right line)
-                
+
                 # do not draw static lines
                 if action == "moveVertex" and \
                         len(self.moveInfo['id']) > 0:
                     self.polycoords = []
                     self.pdcTmp.RemoveId(self.moveInfo['id'][0])
-                    if self.moveInfo['id'][1] > 0: # previous vertex
-                        x, y = self.Pixel2Cell(self.pdcTmp.GetIdBounds(self.moveInfo['id'][1])[0:2])
+                    if self.moveInfo['id'][1] > 0:  # previous vertex
+                        x, y = self.Pixel2Cell(
+                            self.pdcTmp.GetIdBounds(
+                                self.moveInfo['id'][1])[
+                                0:2])
                         self.pdcTmp.RemoveId(self.moveInfo['id'][1] + 1)
                         self.polycoords.append((x, y))
                     self.polycoords.append(self.Pixel2Cell(self.mouse['end']))
 
-                    if self.moveInfo['id'][2] > 0: # next vertex
-                        x, y = self.Pixel2Cell(self.pdcTmp.GetIdBounds(self.moveInfo['id'][2])[0:2])
-                        self.pdcTmp.RemoveId(self.moveInfo['id'][2]-1)
+                    if self.moveInfo['id'][2] > 0:  # next vertex
+                        x, y = self.Pixel2Cell(
+                            self.pdcTmp.GetIdBounds(
+                                self.moveInfo['id'][2])[
+                                0:2])
+                        self.pdcTmp.RemoveId(self.moveInfo['id'][2] - 1)
                         self.polycoords.append((x, y))
-                    
-                    self.ClearLines(pdc = self.pdcTmp)
-                    self.DrawLines(pdc = self.pdcTmp)
-                        
+
+                    self.ClearLines(pdc=self.pdcTmp)
+                    self.DrawLines(pdc=self.pdcTmp)
+
                 if action == "editLine":
-                    self.MouseDraw(pdc = self.pdcTmp,
-                                   begin = self.Cell2Pixel(self.polycoords[-1]))
-                
-            self.Refresh() # TODO: use RefreshRect()
+                    self.MouseDraw(pdc=self.pdcTmp,
+                                   begin=self.Cell2Pixel(self.polycoords[-1]))
+
+            self.Refresh()  # TODO: use RefreshRect()
             self.mouse['begin'] = self.mouse['end']
-            
+
         elif action == "zbulkLine":
             if len(self.polycoords) == 1:
                 # draw mouse moving
                 self.MouseDraw(self.pdcTmp)
-                
+
     def _zoom(self, event):
         tmp1 = self.mouse['end']
         tmp2 = self.Cell2Pixel(self.moveInfo['begin'])
@@ -1103,6 +1182,7 @@ class VDigitWindow(BufferedMapWindow):
         self.moveInfo['beginDiff'] = (dx, dy)
         for id in self.moveInfo['id']:
             self.pdcTmp.RemoveId(id)
-        
+
     def _addRecord(self):
-        return UserSettings.Get(group = 'vdigit', key = "addRecord", subkey = 'enabled')
+        return UserSettings.Get(
+            group='vdigit', key="addRecord", subkey='enabled')
diff --git a/gui/wxpython/vdigit/preferences.py b/gui/wxpython/vdigit/preferences.py
index d248c78..2e4a0e7 100644
--- a/gui/wxpython/vdigit/preferences.py
+++ b/gui/wxpython/vdigit/preferences.py
@@ -19,27 +19,33 @@ import textwrap
 import wx
 import wx.lib.colourselect as csel
 
-from core             import globalvar
-from core.debug       import Debug
+from core import globalvar
+from core.debug import Debug
 from gui_core.gselect import ColumnSelect
-from core.units       import Units
-from core.settings    import UserSettings
+from core.units import Units
+from core.settings import UserSettings
 from core.utils import _
 
 
 class VDigitSettingsDialog(wx.Dialog):
-    def __init__(self, parent, giface, title = _("Digitization settings"),
-                 style = wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(self, parent, giface, title=_("Digitization settings"),
+                 style=wx.DEFAULT_DIALOG_STYLE):
         """Standard settings dialog for digitization purposes
         """
-        wx.Dialog.__init__(self, parent = parent, id = wx.ID_ANY, title = title, style = style)
+        wx.Dialog.__init__(
+            self,
+            parent=parent,
+            id=wx.ID_ANY,
+            title=title,
+            style=style)
 
         self._giface = giface
         self.parent = parent                     # MapFrame
         self.digit = self.parent.MapWindow.digit
-        
+
         # notebook
-        notebook = wx.Notebook(parent = self, id = wx.ID_ANY, style = wx.BK_DEFAULT)
+        notebook = wx.Notebook(parent=self, id=wx.ID_ANY, style=wx.BK_DEFAULT)
         self._createGeneralPage(notebook)
         self._createSymbologyPage(notebook)
         self.digit.SetCategory()
@@ -57,110 +63,156 @@ class VDigitSettingsDialog(wx.Dialog):
         btnApply.SetToolTipString(_("Apply changes for this session"))
         btnApply.SetDefault()
         btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
-        btnSave.SetToolTipString(_("Close dialog and save changes to user settings file"))
+        btnSave.SetToolTipString(
+            _("Close dialog and save changes to user settings file"))
         btnCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
         btnCancel.SetToolTipString(_("Close dialog and ignore changes"))
-        
+
         # sizers
         btnSizer = wx.wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(btnCancel, proportion = 0,
-                     flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        btnSizer.Add(btnApply, proportion = 0,
-                     flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        btnSizer.Add(btnSave, proportion = 0,
-                     flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        
+        btnSizer.Add(btnCancel, proportion=0,
+                     flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+        btnSizer.Add(btnApply, proportion=0,
+                     flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+        btnSizer.Add(btnSave, proportion=0,
+                     flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
+
         mainSizer = wx.BoxSizer(wx.VERTICAL)
-        mainSizer.Add(item = notebook, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.ALIGN_RIGHT, border = 5)
-        
+        mainSizer.Add(
+            item=notebook,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.ALIGN_RIGHT, border=5)
+
         self.Bind(wx.EVT_CLOSE, self.OnCancel)
-        
+
         self.SetSizer(mainSizer)
         mainSizer.Fit(self)
 
     def _createSymbologyPage(self, notebook):
         """Create notebook page concerning symbology settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Symbology"))
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Symbology"))
 
         sizer = wx.BoxSizer(wx.VERTICAL)
-        
-        flexSizer = wx.FlexGridSizer (cols = 3, hgap = 5, vgap = 5)
+
+        flexSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
 
         self.symbology = {}
         for label, key in self._symbologyData():
             textLabel = wx.StaticText(panel, wx.ID_ANY, label)
-            color = csel.ColourSelect(panel, id = wx.ID_ANY,
-                                      colour = UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                                                subkey = [key, 'color']),
-                                      size = (40, 25))
-            isEnabled = UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                         subkey = [key, 'enabled'])
+            color = csel.ColourSelect(
+                panel, id=wx.ID_ANY, colour=UserSettings.Get(
+                    group='vdigit', key='symbol', subkey=[
+                        key, 'color']), size=(
+                    40, 25))
+            isEnabled = UserSettings.Get(group='vdigit', key='symbol',
+                                         subkey=[key, 'enabled'])
             if isEnabled is not None:
-                enabled = wx.CheckBox(panel, id = wx.ID_ANY, label = "")
+                enabled = wx.CheckBox(panel, id=wx.ID_ANY, label="")
                 enabled.SetValue(isEnabled)
                 self.symbology[key] = (enabled, color)
             else:
                 enabled = (1, 1)
                 self.symbology[key] = (None, color)
-            
-            flexSizer.Add(textLabel, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-            flexSizer.Add(enabled, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-            flexSizer.Add(color, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+
+            flexSizer.Add(
+                textLabel,
+                proportion=0,
+                flag=wx.ALIGN_CENTER_VERTICAL)
+            flexSizer.Add(
+                enabled,
+                proportion=0,
+                flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+            flexSizer.Add(
+                color,
+                proportion=0,
+                flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
             color.SetName("GetColour")
-        
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 10)
-        
+
+        sizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=10)
+
         panel.SetSizer(sizer)
-        
+
         return panel
 
     def _createGeneralPage(self, notebook):
         """Create notebook page concerning general settings"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("General"))
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("General"))
 
         border = wx.BoxSizer(wx.VERTICAL)
-        
+
         #
         # display section
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Display"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Display"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer (cols = 3, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
         # line width
-        text = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Line width"))
-        self.lineWidthValue = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (75, -1),
-                                          initial = UserSettings.Get(group = 'vdigit', key = "lineWidth", subkey = 'value'),
-                                          min = 1, max = 1e6)
-        units = wx.StaticText(parent = panel, id = wx.ID_ANY, size = (115, -1),
-                              label = UserSettings.Get(group = 'vdigit', key = "lineWidth", subkey = 'units'),
-                              style = wx.ALIGN_LEFT)
-        flexSizer.Add(text, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.lineWidthValue, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(units, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
-                      border = 10)
-
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        text = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Line width"))
+        self.lineWidthValue = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(75, -1),
+            initial=UserSettings.Get(
+                group='vdigit', key="lineWidth", subkey='value'),
+            min=1, max=1e6)
+        units = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, size=(115, -1),
+            label=UserSettings.Get(
+                group='vdigit', key="lineWidth", subkey='units'),
+            style=wx.ALIGN_LEFT)
+        flexSizer.Add(text, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            self.lineWidthValue,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(
+            units,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=10)
+
+        sizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         #
         # snapping section
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Snapping"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Snapping"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        flexSizer = wx.FlexGridSizer(cols = 3, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
 
         # snapping
-        text = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Snapping threshold"))
-        self.snappingValue = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (75, -1),
-                                         initial = UserSettings.Get(group = 'vdigit', key = "snapping", subkey = 'value'),
-                                         min = -1, max = 1e6)
+        text = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Snapping threshold"))
+        self.snappingValue = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(75, -1),
+            initial=UserSettings.Get(
+                group='vdigit', key="snapping", subkey='value'),
+            min=-1, max=1e6)
         self.snappingValue.Bind(wx.EVT_SPINCTRL, self.OnChangeSnappingValue)
         self.snappingValue.Bind(wx.EVT_TEXT, self.OnChangeSnappingValue)
         self.snappingUnit = wx.Choice(parent=panel, id=wx.ID_ANY, size=(
@@ -172,183 +224,344 @@ class VDigitSettingsDialog(wx.Dialog):
         except:
             self.snappingUnit.SetSelection(0)
         self.snappingUnit.Bind(wx.EVT_CHOICE, self.OnChangeSnappingUnits)
-        flexSizer.Add(text, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.snappingValue, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(self.snappingUnit, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
+        flexSizer.Add(text, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            self.snappingValue,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(
+            self.snappingUnit,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE)
 
         vertexSizer = wx.BoxSizer(wx.VERTICAL)
-        self.snapVertex = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                      label = _("Snap also to vertex"))
-        self.snapVertex.SetValue(UserSettings.Get(group = 'vdigit', key = "snapToVertex", subkey = 'enabled'))
-        vertexSizer.Add(item = self.snapVertex, proportion = 0, flag = wx.EXPAND)
+        self.snapVertex = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                      label=_("Snap also to vertex"))
+        self.snapVertex.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="snapToVertex",
+                subkey='enabled'))
+        vertexSizer.Add(item=self.snapVertex, proportion=0, flag=wx.EXPAND)
         self.mapUnits = self.parent.MapWindow.Map.GetProjInfo()['units']
-        self.snappingInfo = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                          label = _("Snapping threshold is %(value).1f %(units)s") % \
-                                              {'value' : self.digit.GetDisplay().GetThreshold(),
-                                               'units' : self.mapUnits})
-        vertexSizer.Add(item = self.snappingInfo, proportion = 0,
-                        flag = wx.ALL | wx.EXPAND, border = 1)
-
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.EXPAND)
-        sizer.Add(item = vertexSizer, proportion = 1, flag = wx.EXPAND)
-        border.Add(item = sizer, proportion = 0, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+        self.snappingInfo = wx.StaticText(
+            parent=panel, id=wx.ID_ANY,
+            label=_("Snapping threshold is %(value).1f %(units)s") %
+            {'value': self.digit.GetDisplay().GetThreshold(),
+             'units': self.mapUnits})
+        vertexSizer.Add(item=self.snappingInfo, proportion=0,
+                        flag=wx.ALL | wx.EXPAND, border=1)
+
+        sizer.Add(item=flexSizer, proportion=1, flag=wx.EXPAND)
+        sizer.Add(item=vertexSizer, proportion=1, flag=wx.EXPAND)
+        border.Add(item=sizer, proportion=0, flag=wx.LEFT |
+                   wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
 
         #
         # select box
         #
-        box = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Select vector features"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Select vector features"))
         # feature type
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         inSizer = wx.BoxSizer(wx.HORIZONTAL)
         self.selectFeature = {}
         for feature in ('point', 'line',
                         'centroid', 'boundary'):
-            chkbox = wx.CheckBox(parent = panel, label = feature)
+            chkbox = wx.CheckBox(parent=panel, label=feature)
             self.selectFeature[feature] = chkbox.GetId()
-            chkbox.SetValue(UserSettings.Get(group = 'vdigit', key = 'selectType',
-                                             subkey = [feature, 'enabled']))
-            inSizer.Add(item = chkbox, proportion = 0,
-                        flag = wx.EXPAND | wx.ALL, border = 5)
-        sizer.Add(item = inSizer, proportion = 0, flag = wx.EXPAND)
+            chkbox.SetValue(UserSettings.Get(group='vdigit', key='selectType',
+                                             subkey=[feature, 'enabled']))
+            inSizer.Add(item=chkbox, proportion=0,
+                        flag=wx.EXPAND | wx.ALL, border=5)
+        sizer.Add(item=inSizer, proportion=0, flag=wx.EXPAND)
         # threshold
-        flexSizer = wx.FlexGridSizer (cols = 3, hgap = 5, vgap = 5)
+        flexSizer = wx.FlexGridSizer(cols=3, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
-        text = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Select threshold"))
-        self.selectThreshValue = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (75, -1),
-                                             initial = UserSettings.Get(group = 'vdigit', key = "selectThresh", subkey = 'value'),
-                                             min = 1, max = 1e6)
-        units = wx.StaticText(parent = panel, id = wx.ID_ANY, size = (115, -1),
-                              label = UserSettings.Get(group = 'vdigit', key = "lineWidth", subkey = 'units'),
-                              style = wx.ALIGN_LEFT)
-        flexSizer.Add(text, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.selectThreshValue, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(units, proportion = 0, flag = wx.ALIGN_RIGHT | wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
-                      border = 10)
-
-        self.selectIn = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                    label = _("Select only features inside of selection bounding box"))
-        self.selectIn.SetValue(UserSettings.Get(group = 'vdigit', key = "selectInside", subkey = 'enabled'))
-        self.selectIn.SetToolTipString(_("By default are selected all features overlapping selection bounding box "))
-        
-        self.checkForDupl = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                        label = _("Check for duplicates"))
-        self.checkForDupl.SetValue(UserSettings.Get(group = 'vdigit', key = "checkForDupl", subkey = 'enabled'))
-
-
-        sizer.Add(item = flexSizer, proportion = 0, flag = wx.EXPAND)
-        sizer.Add(item = self.selectIn, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 1)
-        sizer.Add(item = self.checkForDupl, proportion = 0, flag = wx.EXPAND | wx.ALL, border = 1)        
-        border.Add(item = sizer, proportion = 0, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+        text = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Select threshold"))
+        self.selectThreshValue = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(75, -1),
+            initial=UserSettings.Get(
+                group='vdigit', key="selectThresh", subkey='value'),
+            min=1, max=1e6)
+        units = wx.StaticText(
+            parent=panel, id=wx.ID_ANY, size=(115, -1),
+            label=UserSettings.Get(
+                group='vdigit', key="lineWidth", subkey='units'),
+            style=wx.ALIGN_LEFT)
+        flexSizer.Add(text, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(self.selectThreshValue, proportion=0,
+                      flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(
+            units,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL | wx.LEFT,
+            border=10)
+
+        self.selectIn = wx.CheckBox(parent=panel, id=wx.ID_ANY, label=_(
+            "Select only features inside of selection bounding box"))
+        self.selectIn.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="selectInside",
+                subkey='enabled'))
+        self.selectIn.SetToolTipString(
+            _("By default are selected all features overlapping selection bounding box "))
+
+        self.checkForDupl = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                        label=_("Check for duplicates"))
+        self.checkForDupl.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="checkForDupl",
+                subkey='enabled'))
+
+        sizer.Add(item=flexSizer, proportion=0, flag=wx.EXPAND)
+        sizer.Add(
+            item=self.selectIn,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=1)
+        sizer.Add(
+            item=self.checkForDupl,
+            proportion=0,
+            flag=wx.EXPAND | wx.ALL,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.EXPAND |
+                   wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
 
         #
         # digitize lines box
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Digitize lines/boundaries"))
+        box = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Digitize lines/boundaries"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        self.intersect = wx.CheckBox(parent = panel, label = _("Break lines at intersection"))
-        self.intersect.SetValue(UserSettings.Get(group = 'vdigit', key = 'breakLines', subkey = 'enabled'))
-        
-        sizer.Add(item = self.intersect, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
+        self.intersect = wx.CheckBox(
+            parent=panel, label=_("Break lines at intersection"))
+        self.intersect.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key='breakLines',
+                subkey='enabled'))
+
+        sizer.Add(
+            item=self.intersect,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
 
-        border.Add(item = sizer, proportion = 0, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+        border.Add(item=sizer, proportion=0, flag=wx.EXPAND |
+                   wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
 
         #
         # digitize areas box
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Digitize areas"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Digitize areas"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
-        self.closeBoundary = wx.CheckBox(parent = panel, label = _("Close boundary (snap to the start node)"))
-        self.closeBoundary.SetValue(UserSettings.Get(group = 'vdigit', key = 'closeBoundary', subkey = 'enabled'))
-        
-        sizer.Add(item = self.closeBoundary, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
+        self.closeBoundary = wx.CheckBox(
+            parent=panel, label=_("Close boundary (snap to the start node)"))
+        self.closeBoundary.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key='closeBoundary',
+                subkey='enabled'))
 
-        border.Add(item = sizer, proportion = 0, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+        sizer.Add(
+            item=self.closeBoundary,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+
+        border.Add(item=sizer, proportion=0, flag=wx.EXPAND |
+                   wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
 
         #
         # save-on-exit box
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Save changes"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Save changes"))
         # save changes on exit?
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        self.save = wx.CheckBox(parent = panel, label = _("Save changes on exit"))
-        self.save.SetValue(UserSettings.Get(group = 'vdigit', key = 'saveOnExit', subkey = 'enabled'))
-        sizer.Add(item = self.save, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0, flag = wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+        self.save = wx.CheckBox(parent=panel, label=_("Save changes on exit"))
+        self.save.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key='saveOnExit',
+                subkey='enabled'))
+        sizer.Add(
+            item=self.save,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0, flag=wx.EXPAND |
+                   wx.LEFT | wx.RIGHT | wx.BOTTOM, border=5)
 
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createQueryPage(self, notebook):
         """Create notebook page for query tool"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Query tool"))
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Query tool"))
 
         border = wx.BoxSizer(wx.VERTICAL)
 
         #
         # query tool box
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Choose query tool"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Choose query tool"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
         LocUnits = self.parent.MapWindow.Map.GetProjInfo()['units']
 
-        self.queryBox = wx.CheckBox(parent = panel, id = wx.ID_ANY, label = _("Select by box"))
-        self.queryBox.SetValue(UserSettings.Get(group = 'vdigit', key = "query", subkey = 'box'))
-
-        sizer.Add(item = self.queryBox, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
+        self.queryBox = wx.CheckBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Select by box"))
+        self.queryBox.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="query",
+                subkey='box'))
+
+        sizer.Add(
+            item=self.queryBox,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
         sizer.Add((0, 5))
 
         #
         # length
         #
-        self.queryLength = wx.RadioButton(parent = panel, id = wx.ID_ANY, label = _("length"))
+        self.queryLength = wx.RadioButton(
+            parent=panel, id=wx.ID_ANY, label=_("length"))
         self.queryLength.Bind(wx.EVT_RADIOBUTTON, self.OnChangeQuery)
-        sizer.Add(item = self.queryLength, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
-        flexSizer = wx.FlexGridSizer (cols = 4, hgap = 5, vgap = 5)
+        sizer.Add(
+            item=self.queryLength,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        flexSizer = wx.FlexGridSizer(cols=4, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
-        txt = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Select lines"))
-        self.queryLengthSL = wx.Choice (parent = panel, id = wx.ID_ANY, 
-                                        choices  =  [_("shorter than"), _("longer than")])
-        self.queryLengthSL.SetSelection(UserSettings.Get(group = 'vdigit', key = "queryLength", subkey = 'than-selection'))
-        self.queryLengthValue = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (100, -1),
-                                            initial = 1,
-                                            min = 0, max = 1e6)
-        self.queryLengthValue.SetValue(UserSettings.Get(group = 'vdigit', key = "queryLength", subkey = 'thresh'))
-        units = wx.StaticText(parent = panel, id = wx.ID_ANY, label = "%s" % LocUnits)
-        flexSizer.Add(txt, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.queryLengthSL, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(self.queryLengthValue, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(units, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        sizer.Add(item = flexSizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
+        txt = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Select lines"))
+        self.queryLengthSL = wx.Choice(
+            parent=panel, id=wx.ID_ANY, choices=[
+                _("shorter than"), _("longer than")])
+        self.queryLengthSL.SetSelection(
+            UserSettings.Get(
+                group='vdigit',
+                key="queryLength",
+                subkey='than-selection'))
+        self.queryLengthValue = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(
+                100, -1), initial=1, min=0, max=1e6)
+        self.queryLengthValue.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="queryLength",
+                subkey='thresh'))
+        units = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label="%s" %
+            LocUnits)
+        flexSizer.Add(txt, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            self.queryLengthSL,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(
+            self.queryLengthValue,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(units, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        sizer.Add(
+            item=flexSizer,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
 
         #
         # dangle
         #
-        self.queryDangle = wx.RadioButton(parent = panel, id = wx.ID_ANY, label = _("dangle"))
+        self.queryDangle = wx.RadioButton(
+            parent=panel, id=wx.ID_ANY, label=_("dangle"))
         self.queryDangle.Bind(wx.EVT_RADIOBUTTON, self.OnChangeQuery)
-        sizer.Add(item = self.queryDangle, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
-        flexSizer = wx.FlexGridSizer (cols = 4, hgap = 5, vgap = 5)
+        sizer.Add(
+            item=self.queryDangle,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        flexSizer = wx.FlexGridSizer(cols=4, hgap=5, vgap=5)
         flexSizer.AddGrowableCol(0)
-        txt = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Select dangles"))
-        self.queryDangleSL = wx.Choice (parent = panel, id = wx.ID_ANY, 
-                                        choices = [_("shorter than"), _("longer than")])
-        self.queryDangleSL.SetSelection(UserSettings.Get(group = 'vdigit', key = "queryDangle", subkey = 'than-selection'))
-        self.queryDangleValue = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (100, -1),
-                                       initial = 1,
-                                       min = 0, max = 1e6)
-        self.queryDangleValue.SetValue(UserSettings.Get(group = 'vdigit', key = "queryDangle", subkey = 'thresh'))
-        units = wx.StaticText(parent = panel, id = wx.ID_ANY, label = "%s" % LocUnits)
-        flexSizer.Add(txt, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(self.queryDangleSL, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(self.queryDangleValue, proportion = 0, flag = wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
-        flexSizer.Add(units, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        sizer.Add(item = flexSizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
-
-        if UserSettings.Get(group = 'vdigit', key = "query", subkey = 'selection') == 0:
+        txt = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Select dangles"))
+        self.queryDangleSL = wx.Choice(
+            parent=panel, id=wx.ID_ANY, choices=[
+                _("shorter than"), _("longer than")])
+        self.queryDangleSL.SetSelection(
+            UserSettings.Get(
+                group='vdigit',
+                key="queryDangle",
+                subkey='than-selection'))
+        self.queryDangleValue = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(
+                100, -1), initial=1, min=0, max=1e6)
+        self.queryDangleValue.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="queryDangle",
+                subkey='thresh'))
+        units = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label="%s" %
+            LocUnits)
+        flexSizer.Add(txt, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(
+            self.queryDangleSL,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(
+            self.queryDangleValue,
+            proportion=0,
+            flag=wx.ALIGN_CENTER | wx.FIXED_MINSIZE)
+        flexSizer.Add(units, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        sizer.Add(
+            item=flexSizer,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+
+        if UserSettings.Get(group='vdigit', key="query",
+                            subkey='selection') == 0:
             self.queryLength.SetValue(True)
         else:
             self.queryDangle.SetValue(True)
@@ -356,96 +569,137 @@ class VDigitSettingsDialog(wx.Dialog):
         # enable & disable items
         self.OnChangeQuery(None)
 
-        border.Add(item = sizer, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 5)
+        border.Add(item=sizer, proportion=0, flag=wx.ALL | wx.EXPAND, border=5)
 
         panel.SetSizer(border)
-        
+
         return panel
 
     def _createAttributesPage(self, notebook):
         """Create notebook page for attributes"""
-        panel = wx.Panel(parent = notebook, id = wx.ID_ANY)
-        notebook.AddPage(page = panel, text = _("Attributes"))
+        panel = wx.Panel(parent=notebook, id=wx.ID_ANY)
+        notebook.AddPage(page=panel, text=_("Attributes"))
 
         border = wx.BoxSizer(wx.VERTICAL)
 
         #
         # add new record
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Digitize new feature"))
+        box = wx.StaticBox(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=" %s " %
+            _("Digitize new feature"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
         # checkbox
-        self.addRecord = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                     label = _("Add new record into table"))
-        self.addRecord.SetValue(UserSettings.Get(group = 'vdigit', key = "addRecord", subkey = 'enabled'))
-        sizer.Add(item = self.addRecord, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
+        self.addRecord = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                     label=_("Add new record into table"))
+        self.addRecord.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="addRecord",
+                subkey='enabled'))
+        sizer.Add(
+            item=self.addRecord,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
         # settings
-        flexSizer = wx.FlexGridSizer(cols = 2, hgap = 3, vgap = 3)
+        flexSizer = wx.FlexGridSizer(cols=2, hgap=3, vgap=3)
         flexSizer.AddGrowableCol(0)
-        settings = ((_("Layer"), 1), (_("Category"), 1), (_("Mode"), _("Next to use")))
+        settings = ((_("Layer"), 1), (_("Category"), 1),
+                    (_("Mode"), _("Next to use")))
         # layer
-        text = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Layer"))
-        self.layer = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (125, -1),
-                                 min = 1, max = 1e3)
-        self.layer.SetValue(int(UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value')))
-        flexSizer.Add(item = text, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = self.layer, proportion = 0,
-                      flag = wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
+        text = wx.StaticText(parent=panel, id=wx.ID_ANY, label=_("Layer"))
+        self.layer = wx.SpinCtrl(parent=panel, id=wx.ID_ANY, size=(125, -1),
+                                 min=1, max=1e3)
+        self.layer.SetValue(int(UserSettings.Get(
+            group='vdigit', key="layer", subkey='value')))
+        flexSizer.Add(item=text, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=self.layer, proportion=0,
+                      flag=wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
         # category number
-        text = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Category number"))
-        self.category = wx.SpinCtrl(parent = panel, id = wx.ID_ANY, size = (125, -1),
-                                    initial = UserSettings.Get(group = 'vdigit', key = "category", subkey = 'value'),
-                                    min = -1e9, max = 1e9) 
-        if UserSettings.Get(group = 'vdigit', key = "categoryMode", subkey = 'selection') != 1:
+        text = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Category number"))
+        self.category = wx.SpinCtrl(
+            parent=panel, id=wx.ID_ANY, size=(125, -1),
+            initial=UserSettings.Get(
+                group='vdigit', key="category", subkey='value'),
+            min=-1e9, max=1e9)
+        if UserSettings.Get(group='vdigit', key="categoryMode",
+                            subkey='selection') != 1:
             self.category.Enable(False)
-        flexSizer.Add(item = text, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = self.category, proportion = 0,
-                      flag = wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=text, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=self.category, proportion=0,
+                      flag=wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
         # category mode
-        text = wx.StaticText(parent = panel, id = wx.ID_ANY, label = _("Category mode"))
-        self.categoryMode = wx.Choice(parent = panel, id = wx.ID_ANY, size = (125, -1),
-                                      choices = [_("Next to use"), _("Manual entry"), _("No category")])
-        self.categoryMode.SetSelection(UserSettings.Get(group = 'vdigit', key = "categoryMode", subkey = 'selection'))
-        flexSizer.Add(item = text, proportion = 0, flag = wx.ALIGN_CENTER_VERTICAL)
-        flexSizer.Add(item = self.categoryMode, proportion = 0,
-                      flag = wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
-
-        sizer.Add(item = flexSizer, proportion = 1, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0,
-                   flag = wx.ALL | wx.EXPAND, border = 5)
+        text = wx.StaticText(
+            parent=panel,
+            id=wx.ID_ANY,
+            label=_("Category mode"))
+        self.categoryMode = wx.Choice(parent=panel, id=wx.ID_ANY, size=(
+            125, -1), choices=[_("Next to use"), _("Manual entry"), _("No category")])
+        self.categoryMode.SetSelection(
+            UserSettings.Get(
+                group='vdigit',
+                key="categoryMode",
+                subkey='selection'))
+        flexSizer.Add(item=text, proportion=0, flag=wx.ALIGN_CENTER_VERTICAL)
+        flexSizer.Add(item=self.categoryMode, proportion=0,
+                      flag=wx.FIXED_MINSIZE | wx.ALIGN_CENTER_VERTICAL)
+
+        sizer.Add(
+            item=flexSizer,
+            proportion=1,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0,
+                   flag=wx.ALL | wx.EXPAND, border=5)
 
         #
         # delete existing record
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY, label = " %s " % _("Delete existing feature(s)"))
+        box = wx.StaticBox(
+            parent=panel, id=wx.ID_ANY, label=" %s " %
+            _("Delete existing feature(s)"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
+
         # checkbox
-        self.deleteRecord = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                        label = _("Delete record from table"))
-        self.deleteRecord.SetValue(UserSettings.Get(group = 'vdigit', key = "delRecord", subkey = 'enabled'))
-        sizer.Add(item = self.deleteRecord, proportion = 0, flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0,
-                   flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+        self.deleteRecord = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                        label=_("Delete record from table"))
+        self.deleteRecord.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key="delRecord",
+                subkey='enabled'))
+        sizer.Add(
+            item=self.deleteRecord,
+            proportion=0,
+            flag=wx.ALL | wx.EXPAND,
+            border=1)
+        border.Add(item=sizer, proportion=0,
+                   flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
 
         #
         # geometry attributes (currently only length and area are supported)
         #
-        box   = wx.StaticBox (parent = panel, id = wx.ID_ANY,
-                              label = " %s " % _("Geometry attributes"))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s " % _("Geometry attributes"))
         sizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(hgap = 3, vgap = 3)
-        self.geomAttrb = { 'length' : { 'label' : _('length') },
-                           'area' : { 'label' : _('area') },
-                           'perimeter' : { 'label' : _('perimeter') } }
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+        self.geomAttrb = {'length': {'label': _('length')},
+                          'area': {'label': _('area')},
+                          'perimeter': {'label': _('perimeter')}}
 
         digitToolbar = self.parent.toolbars['vdigit']
         try:
             vectorName = digitToolbar.GetLayer().GetName()
         except AttributeError:
-            vectorName = None # no vector selected for editing
-        layer = UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value')
+            vectorName = None  # no vector selected for editing
+        layer = UserSettings.Get(group='vdigit', key="layer", subkey='value')
         mapLayer = self.parent.toolbars['vdigit'].GetLayer()
         tree = self.parent.tree
         if tree:
@@ -455,70 +709,72 @@ class VDigitSettingsDialog(wx.Dialog):
         row = 0
         for attrb in ['length', 'area', 'perimeter']:
             # checkbox
-            check = wx.CheckBox(parent = panel, id = wx.ID_ANY,
-                                label = self.geomAttrb[attrb]['label'])
+            check = wx.CheckBox(parent=panel, id=wx.ID_ANY,
+                                label=self.geomAttrb[attrb]['label'])
             ### self.deleteRecord.SetValue(UserSettings.Get(group='vdigit', key="delRecord", subkey='enabled'))
             check.Bind(wx.EVT_CHECKBOX, self.OnGeomAttrb)
             # column (only numeric)
-            column = ColumnSelect(parent = panel, size = (200, -1))
-            column.InsertColumns(vector = vectorName,
-                                 layer = layer, excludeKey = True,
-                                 type = ['integer', 'double precision'])
-            # units 
+            column = ColumnSelect(parent=panel, size=(200, -1))
+            column.InsertColumns(vector=vectorName,
+                                 layer=layer, excludeKey=True,
+                                 type=['integer', 'double precision'])
+            # units
             if attrb == 'area':
                 choices = Units.GetUnitsList('area')
             else:
                 choices = Units.GetUnitsList('length')
-            win_units = wx.Choice(parent = panel, id = wx.ID_ANY,
-                                  choices = choices, size = (120, -1))
-            
+            win_units = wx.Choice(parent=panel, id=wx.ID_ANY,
+                                  choices=choices, size=(120, -1))
+
             # default values
             check.SetValue(False)
-            if item and tree.GetLayerInfo(item, key = 'vdigit') and \
-                    'geomAttr' in tree.GetLayerInfo(item, key = 'vdigit') and \
-                    attrb in tree.GetLayerInfo(item, key = 'vdigit')['geomAttr']:
+            if item and tree.GetLayerInfo(item, key='vdigit') and \
+                    'geomAttr' in tree.GetLayerInfo(item, key='vdigit') and \
+                    attrb in tree.GetLayerInfo(item, key='vdigit')['geomAttr']:
                 check.SetValue(True)
-                column.SetStringSelection(tree.GetLayerInfo(item, key = 'vdigit')['geomAttr'][attrb]['column'])
+                column.SetStringSelection(
+                    tree.GetLayerInfo(item, key='vdigit')['geomAttr']
+                    [attrb]['column'])
                 if attrb == 'area':
                     type = 'area'
                 else:
                     type = 'length'
-                unitsIdx = Units.GetUnitsIndex(type, 
-                                                tree.GetLayerInfo(item, key = 'vdigit')['geomAttr'][attrb]['units'])
+                unitsIdx = Units.GetUnitsIndex(type, tree.GetLayerInfo(
+                    item, key='vdigit')['geomAttr'][attrb]['units'])
                 win_units.SetSelection(unitsIdx)
 
             if not vectorName:
                 check.Enable(False)
                 column.Enable(False)
-            
+
             if not check.IsChecked():
                 column.Enable(False)
-            
-            self.geomAttrb[attrb]['check']  = check.GetId()
+
+            self.geomAttrb[attrb]['check'] = check.GetId()
             self.geomAttrb[attrb]['column'] = column.GetId()
-            self.geomAttrb[attrb]['units']  = win_units.GetId()
-
-            gridSizer.Add(item = check,
-                          flag = wx.ALIGN_CENTER_VERTICAL,
-                          pos = (row, 0))
-            gridSizer.Add(item = column,
-                          pos = (row, 1))
-            gridSizer.Add(item = win_units,
-                          pos = (row, 2))
+            self.geomAttrb[attrb]['units'] = win_units.GetId()
+
+            gridSizer.Add(item=check,
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          pos=(row, 0))
+            gridSizer.Add(item=column,
+                          pos=(row, 1))
+            gridSizer.Add(item=win_units,
+                          pos=(row, 2))
             row += 1
-        
+
         note = '\n'.join(textwrap.wrap(_("Note: These settings are stored "
                                          "in the workspace not in the vector digitizer "
                                          "preferences."), 55))
-        gridSizer.Add(item = wx.StaticText(parent = panel, id = wx.ID_ANY,
-                                           label = note),
-                      pos = (3, 0), span = (1, 3))
-                      
+        gridSizer.Add(item=wx.StaticText(parent=panel, id=wx.ID_ANY,
+                                         label=note),
+                      pos=(3, 0), span=(1, 3))
+
         gridSizer.AddGrowableCol(0)
-        sizer.Add(item = gridSizer, proportion = 1,
-                  flag = wx.ALL | wx.EXPAND, border = 1)
-        border.Add(item = sizer, proportion = 0,
-                   flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+        sizer.Add(item=gridSizer, proportion=1,
+                  flag=wx.ALL | wx.EXPAND, border=1)
+        border.Add(item=sizer, proportion=0,
+                   flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=5)
 
         # bindings
         self.Bind(wx.EVT_CHECKBOX, self.OnChangeAddRecord, self.addRecord)
@@ -526,7 +782,7 @@ class VDigitSettingsDialog(wx.Dialog):
         self.Bind(wx.EVT_SPINCTRL, self.OnChangeLayer, self.layer)
 
         panel.SetSizer(border)
-        
+
         return panel
 
     def _symbologyData(self):
@@ -564,38 +820,54 @@ class VDigitSettingsDialog(wx.Dialog):
             if val['check'] == id:
                 key = attrb
                 break
-        
+
         column = self.FindWindowById(self.geomAttrb[key]['column'])
         if checked:
             column.Enable()
         else:
             column.Enable(False)
-        
+
     def OnChangeCategoryMode(self, event):
         """Change category mode
         """
         mode = event.GetSelection()
-        UserSettings.Set(group = 'vdigit', key = "categoryMode", subkey = 'selection', value = mode)
-        if mode == 1: # manual entry
+        UserSettings.Set(
+            group='vdigit',
+            key="categoryMode",
+            subkey='selection',
+            value=mode)
+        if mode == 1:  # manual entry
             self.category.Enable(True)
-        elif self.category.IsEnabled(): # disable
+        elif self.category.IsEnabled():  # disable
             self.category.Enable(False)
-        
-        if mode == 2 and self.addRecord.IsChecked(): # no category
+
+        if mode == 2 and self.addRecord.IsChecked():  # no category
             self.addRecord.SetValue(False)
-        
+
         self.digit.SetCategory()
-        self.category.SetValue(UserSettings.Get(group = 'vdigit', key = 'category', subkey = 'value'))
+        self.category.SetValue(
+            UserSettings.Get(
+                group='vdigit',
+                key='category',
+                subkey='value'))
 
     def OnChangeLayer(self, event):
         """Layer changed
         """
         layer = event.GetInt()
         if layer > 0:
-            UserSettings.Set(group = 'vdigit', key = 'layer', subkey = 'value', value = layer)
+            UserSettings.Set(
+                group='vdigit',
+                key='layer',
+                subkey='value',
+                value=layer)
             self.digit.SetCategory()
-            self.category.SetValue(UserSettings.Get(group = 'vdigit', key = 'category', subkey = 'value'))
-            
+            self.category.SetValue(
+                UserSettings.Get(
+                    group='vdigit',
+                    key='category',
+                    subkey='value'))
+
         event.Skip()
 
     def OnChangeAddRecord(self, event):
@@ -603,34 +875,35 @@ class VDigitSettingsDialog(wx.Dialog):
         """
         pass
         # self.category.SetValue(self.digit.SetCategory())
-            
+
     def OnChangeSnappingValue(self, event):
         """Change snapping value - update static text
         """
         value = self.snappingValue.GetValue()
-        
+
         if value < 0:
             region = self.parent.MapWindow.Map.GetRegion()
             res = (region['nsres'] + region['ewres']) / 2.
-            threshold = self.digit.GetDisplay().GetThreshold(value = res)
+            threshold = self.digit.GetDisplay().GetThreshold(value=res)
         else:
             if self.snappingUnit.GetSelection() == 1:  # map units
                 threshold = value
             else:
-                threshold = self.digit.GetDisplay().GetThreshold(value = value)
-            
+                threshold = self.digit.GetDisplay().GetThreshold(value=value)
+
         if value == 0:
             self.snappingInfo.SetLabel(_("Snapping disabled"))
         elif value < 0:
-            self.snappingInfo.SetLabel(_("Snapping threshold is %(value).1f %(units)s "
-                                         "(based on comp. resolution)") % 
-                                       {'value' : threshold,
-                                        'units' : self.mapUnits.lower()})
+            self.snappingInfo.SetLabel(
+                _(
+                    "Snapping threshold is %(value).1f %(units)s "
+                    "(based on comp. resolution)") %
+                {'value': threshold, 'units': self.mapUnits.lower()})
         else:
-            self.snappingInfo.SetLabel(_("Snapping threshold is %(value).1f %(units)s") % 
-                                       {'value' : threshold,
-                                        'units' : self.mapUnits.lower()})
-        
+            self.snappingInfo.SetLabel(
+                _("Snapping threshold is %(value).1f %(units)s") %
+                {'value': threshold, 'units': self.mapUnits.lower()})
+
         event.Skip()
 
     def OnChangeSnappingUnits(self, event):
@@ -638,17 +911,17 @@ class VDigitSettingsDialog(wx.Dialog):
         """
         value = self.snappingValue.GetValue()
         units = self.snappingUnit.GetSelection()
-        threshold = self.digit.GetDisplay().GetThreshold(value = value, units = units)
+        threshold = self.digit.GetDisplay().GetThreshold(value=value, units=units)
 
         if units == 1:  # map units
-            self.snappingInfo.SetLabel(_("Snapping threshold is %(value).1f %(units)s") % 
-                                       {'value' : value,
-                                        'units' : self.mapUnits})
+            self.snappingInfo.SetLabel(
+                _("Snapping threshold is %(value).1f %(units)s") %
+                {'value': value, 'units': self.mapUnits})
         else:
-            self.snappingInfo.SetLabel(_("Snapping threshold is %(value).1f %(units)s") % 
-                                       {'value' : threshold,
-                                        'units' : self.mapUnits})
-            
+            self.snappingInfo.SetLabel(
+                _("Snapping threshold is %(value).1f %(units)s") %
+                {'value': threshold, 'units': self.mapUnits})
+
         event.Skip()
 
     def OnChangeQuery(self, event):
@@ -674,16 +947,18 @@ class VDigitSettingsDialog(wx.Dialog):
         self.parent.toolbars['vdigit'].settingsDialog = None
 
         fileSettings = {}
-        UserSettings.ReadSettingsFile(settings = fileSettings)
-        fileSettings['vdigit'] = UserSettings.Get(group = 'vdigit')
-        
+        UserSettings.ReadSettingsFile(settings=fileSettings)
+        fileSettings['vdigit'] = UserSettings.Get(group='vdigit')
+
         sfile = UserSettings.SaveToFile(fileSettings)
-        self._giface.WriteLog(_('Vector digitizer settings saved to file <%s>.') % sfile)
-        
+        self._giface.WriteLog(
+            _('Vector digitizer settings saved to file <%s>.') %
+            sfile)
+
         self.Destroy()
 
         event.Skip()
-        
+
     def OnApply(self, event):
         """Button 'Apply' pressed
         """
@@ -697,33 +972,33 @@ class VDigitSettingsDialog(wx.Dialog):
 
         if event:
             event.Skip()
-        
+
     def UpdateSettings(self):
         """Update digitizer settings
 
         .. todo::
-            Needs refactoring 
+            Needs refactoring
         """
         # TODO: it seems that it needs to be replaced by signal
-        # but if it makes sense generally for wxGUI it can be added to giface 
+        # but if it makes sense generally for wxGUI it can be added to giface
         if self.parent.GetLayerManager():
-            self.parent.GetLayerManager().WorkspaceChanged() # geometry attributes
+            self.parent.GetLayerManager().WorkspaceChanged()  # geometry attributes
         # symbology
         for key, (enabled, color) in self.symbology.iteritems():
             if enabled:
-                UserSettings.Set(group = 'vdigit', key = 'symbol',
-                                 subkey = [key, 'enabled'],
-                                 value = enabled.IsChecked())
-                UserSettings.Set(group = 'vdigit', key = 'symbol',
-                                 subkey = [key, 'color'],
-                                 value = tuple(color.GetColour()))
+                UserSettings.Set(group='vdigit', key='symbol',
+                                 subkey=[key, 'enabled'],
+                                 value=enabled.IsChecked())
+                UserSettings.Set(group='vdigit', key='symbol',
+                                 subkey=[key, 'color'],
+                                 value=tuple(color.GetColour()))
             else:
-                UserSettings.Set(group = 'vdigit', key = 'symbol',
-                                 subkey = [key, 'color'],
-                                 value = tuple(color.GetColour()))
+                UserSettings.Set(group='vdigit', key='symbol',
+                                 subkey=[key, 'color'],
+                                 value=tuple(color.GetColour()))
         # display
-        UserSettings.Set(group = 'vdigit', key = "lineWidth", subkey = 'value',
-                         value = int(self.lineWidthValue.GetValue()))
+        UserSettings.Set(group='vdigit', key="lineWidth", subkey='value',
+                         value=int(self.lineWidthValue.GetValue()))
 
         # snapping
         UserSettings.Set(group='vdigit', key="snapping", subkey='value',
@@ -734,18 +1009,21 @@ class VDigitSettingsDialog(wx.Dialog):
                          value=self.snapVertex.IsChecked())
 
         # digitize new feature
-        UserSettings.Set(group = 'vdigit', key = "addRecord", subkey = 'enabled',
-                         value = self.addRecord.IsChecked())
-        UserSettings.Set(group = 'vdigit', key = "layer", subkey = 'value',
-                         value = int(self.layer.GetValue()))
-        UserSettings.Set(group = 'vdigit', key = "category", subkey = 'value',
-                         value = int(self.category.GetValue()))
-        UserSettings.Set(group = 'vdigit', key = "categoryMode", subkey = 'selection',
-                         value = self.categoryMode.GetSelection())
+        UserSettings.Set(group='vdigit', key="addRecord", subkey='enabled',
+                         value=self.addRecord.IsChecked())
+        UserSettings.Set(group='vdigit', key="layer", subkey='value',
+                         value=int(self.layer.GetValue()))
+        UserSettings.Set(group='vdigit', key="category", subkey='value',
+                         value=int(self.category.GetValue()))
+        UserSettings.Set(
+            group='vdigit',
+            key="categoryMode",
+            subkey='selection',
+            value=self.categoryMode.GetSelection())
 
         # delete existing feature
-        UserSettings.Set(group = 'vdigit', key = "delRecord", subkey = 'enabled',
-                         value = self.deleteRecord.IsChecked())
+        UserSettings.Set(group='vdigit', key="delRecord", subkey='enabled',
+                         value=self.deleteRecord.IsChecked())
 
         # geometry attributes (workspace)
         mapLayer = self.parent.toolbars['vdigit'].GetLayer()
@@ -756,69 +1034,79 @@ class VDigitSettingsDialog(wx.Dialog):
             item = None
         for key, val in self.geomAttrb.iteritems():
             checked = self.FindWindowById(val['check']).IsChecked()
-            column  = self.FindWindowById(val['column']).GetValue()
+            column = self.FindWindowById(val['column']).GetValue()
             unitsIdx = self.FindWindowById(val['units']).GetSelection()
-            if item and not tree.GetLayerInfo(item, key = 'vdigit'): 
-                tree.SetLayerInfo(item, key = 'vdigit', value = { 'geomAttr' : dict() })
-            
-            if checked: # enable
+            if item and not tree.GetLayerInfo(item, key='vdigit'):
+                tree.SetLayerInfo(
+                    item, key='vdigit', value={
+                        'geomAttr': dict()})
+
+            if checked:  # enable
                 if key == 'area':
                     type = key
                 else:
                     type = 'length'
                 unitsKey = Units.GetUnitsKey(type, unitsIdx)
-                tree.GetLayerInfo(item, key = 'vdigit')['geomAttr'][key] = { 'column' : column,
-                                                                       'units' : unitsKey }
+                tree.GetLayerInfo(item, key='vdigit')['geomAttr'][key] = {
+                    'column': column, 'units': unitsKey}
             else:
-                if item and tree.GetLayerInfo(item, key = 'vdigit') and \
-                        key in tree.GetLayerInfo(item, key = 'vdigit')['geomAttr']:
-                    del tree.GetLayerInfo(item, key = 'vdigit')['geomAttr'][key]
-        
+                if item and tree.GetLayerInfo(
+                        item, key='vdigit') and key in tree.GetLayerInfo(
+                        item, key='vdigit')['geomAttr']:
+                    del tree.GetLayerInfo(item, key='vdigit')['geomAttr'][key]
+
         # query tool
         if self.queryLength.GetValue():
-            UserSettings.Set(group = 'vdigit', key = "query", subkey = 'selection',
-                             value = 0)
+            UserSettings.Set(group='vdigit', key="query", subkey='selection',
+                             value=0)
         else:
-            UserSettings.Set(group = 'vdigit', key = "query", subkey = 'type',
-                             value = 1)
-        UserSettings.Set(group = 'vdigit', key = "query", subkey = 'box',
-                         value = self.queryBox.IsChecked())
-        UserSettings.Set(group = 'vdigit', key = "queryLength", subkey = 'than-selection',
-                         value = self.queryLengthSL.GetSelection())
-        UserSettings.Set(group = 'vdigit', key = "queryLength", subkey = 'thresh',
-                         value = int(self.queryLengthValue.GetValue()))
-        UserSettings.Set(group = 'vdigit', key = "queryDangle", subkey = 'than-selection',
-                         value = self.queryDangleSL.GetSelection())
-        UserSettings.Set(group = 'vdigit', key = "queryDangle", subkey = 'thresh',
-                         value = int(self.queryDangleValue.GetValue()))
+            UserSettings.Set(group='vdigit', key="query", subkey='type',
+                             value=1)
+        UserSettings.Set(group='vdigit', key="query", subkey='box',
+                         value=self.queryBox.IsChecked())
+        UserSettings.Set(
+            group='vdigit',
+            key="queryLength",
+            subkey='than-selection',
+            value=self.queryLengthSL.GetSelection())
+        UserSettings.Set(group='vdigit', key="queryLength", subkey='thresh',
+                         value=int(self.queryLengthValue.GetValue()))
+        UserSettings.Set(
+            group='vdigit',
+            key="queryDangle",
+            subkey='than-selection',
+            value=self.queryDangleSL.GetSelection())
+        UserSettings.Set(group='vdigit', key="queryDangle", subkey='thresh',
+                         value=int(self.queryDangleValue.GetValue()))
 
         # select features
         for feature in ('point', 'line',
                         'centroid', 'boundary'):
-            UserSettings.Set(group = 'vdigit', key = 'selectType',
-                             subkey = [feature, 'enabled'],
-                             value = self.FindWindowById(self.selectFeature[feature]).IsChecked())
-        UserSettings.Set(group = 'vdigit', key = "selectThresh", subkey = 'value',
-                         value = int(self.selectThreshValue.GetValue()))
-        UserSettings.Set(group = 'vdigit', key = "checkForDupl", subkey = 'enabled',
-                         value = self.checkForDupl.IsChecked())
-        UserSettings.Set(group = 'vdigit', key = "selectInside", subkey = 'enabled',
-                         value = self.selectIn.IsChecked())
+            UserSettings.Set(
+                group='vdigit', key='selectType', subkey=[
+                    feature, 'enabled'], value=self.FindWindowById(
+                    self.selectFeature[feature]).IsChecked())
+        UserSettings.Set(group='vdigit', key="selectThresh", subkey='value',
+                         value=int(self.selectThreshValue.GetValue()))
+        UserSettings.Set(group='vdigit', key="checkForDupl", subkey='enabled',
+                         value=self.checkForDupl.IsChecked())
+        UserSettings.Set(group='vdigit', key="selectInside", subkey='enabled',
+                         value=self.selectIn.IsChecked())
 
         # on-exit
-        UserSettings.Set(group = 'vdigit', key = "saveOnExit", subkey = 'enabled',
-                         value = self.save.IsChecked())
+        UserSettings.Set(group='vdigit', key="saveOnExit", subkey='enabled',
+                         value=self.save.IsChecked())
 
         # break lines
-        UserSettings.Set(group = 'vdigit', key = "breakLines", subkey = 'enabled',
-                         value = self.intersect.IsChecked())
+        UserSettings.Set(group='vdigit', key="breakLines", subkey='enabled',
+                         value=self.intersect.IsChecked())
 
         # close boundary
-        UserSettings.Set(group = 'vdigit', key = "closeBoundary", subkey = 'enabled',
-                         value = self.closeBoundary.IsChecked())
-        
+        UserSettings.Set(group='vdigit', key="closeBoundary", subkey='enabled',
+                         value=self.closeBoundary.IsChecked())
+
         self.digit.UpdateSettings()
-        
+
         # redraw map if auto-rendering is enabled
-        if self.parent.IsAutoRendered(): 
+        if self.parent.IsAutoRendered():
             self.parent.OnRender(None)
diff --git a/gui/wxpython/vdigit/toolbars.py b/gui/wxpython/vdigit/toolbars.py
index 7dd19fe..a2ec340 100644
--- a/gui/wxpython/vdigit/toolbars.py
+++ b/gui/wxpython/vdigit/toolbars.py
@@ -6,7 +6,7 @@
 List of classes:
  - toolbars::VDigitToolbar
 
-(C) 2007-2014 by the GRASS Development Team
+(C) 2007-2015 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -19,30 +19,32 @@ import wx
 from grass import script as grass
 from grass.pydispatch.signal import Signal
 
-from gui_core.toolbars  import BaseToolbar, BaseIcons
-from gui_core.dialogs   import CreateNewVector, VectorDialog
+from gui_core.toolbars import BaseToolbar, BaseIcons
+from gui_core.dialogs import CreateNewVector, VectorDialog
 from vdigit.preferences import VDigitSettingsDialog
-from core.debug         import Debug
-from core.settings      import UserSettings
-from core.gcmd          import GError, RunCommand
+from core.debug import Debug
+from core.settings import UserSettings
+from core.gcmd import GError, RunCommand
 from core.utils import _
-from icons.icon         import MetaIcon
-from iclass.digit       import IClassVDigit
-from core.giface        import Notification
+from icons.icon import MetaIcon
+from iclass.digit import IClassVDigit
+from core.giface import Notification
+
 
 class VDigitToolbar(BaseToolbar):
     """Toolbar for digitization
     """
+
     def __init__(self, parent, toolSwitcher, MapWindow, digitClass, giface,
                  tools=[]):
-        self.MapWindow     = MapWindow
-        self.Map           = MapWindow.GetMap() # Map class instance
-        self.tools         = tools
-        self.digitClass    = digitClass
+        self.MapWindow = MapWindow
+        self.Map = MapWindow.GetMap()  # Map class instance
+        self.tools = tools
+        self.digitClass = digitClass
         BaseToolbar.__init__(self, parent, toolSwitcher)
-        self.digit         = None
-        self._giface       = giface
-        self.fType         = None     # feature type for simple features editing
+        self.digit = None
+        self._giface = giface
+        self.fType = None     # feature type for simple features editing
 
         self.editingStarted = Signal("VDigitToolbar.editingStarted")
         self.editingStopped = Signal("VDigitToolbar.editingStopped")
@@ -52,132 +54,140 @@ class VDigitToolbar(BaseToolbar):
             self.editingStarted.connect(layerTree.StartEditing)
             self.editingStopped.connect(layerTree.StopEditing)
             self.editingBgMap.connect(layerTree.SetBgMapForEditing)
-            
-        # currently selected map layer for editing (reference to MapLayer instance)
+
+        # currently selected map layer for editing (reference to MapLayer
+        # instance)
         self.mapLayer = None
         # list of vector layers from Layer Manager (only in the current mapset)
-        self.layers   = [] 
-        
-        self.comboid  = self.combo = None
-        self.undo     = -1
-        self.redo     = -1
-        
+        self.layers = []
+
+        self.comboid = self.combo = None
+        self.undo = -1
+        self.redo = -1
+
         # only one dialog can be open
-        self.settingsDialog   = None
+        self.settingsDialog = None
 
         # create toolbars (two rows optionally)
         self.InitToolbar(self._toolbarData())
-        
+
         self._default = -1
         # default action (digitize new point, line, etc.)
-        self.action = { 'desc' : '',
-                        'type' : '',
-                        'id'   : -1 }
+        self.action = {'desc': '',
+                       'type': '',
+                       'id': -1}
         self._currentAreaActionType = None
-        
+
         # list of available vector maps
-        self.UpdateListOfLayers(updateTool = True)
-        
-        for tool in ('addPoint', 'addLine', 'addBoundary', 'addCentroid', 'addArea',
-                     'addVertex', 'deleteLine', 'deleteArea', 'displayAttr', 'displayCats',
-                     'editLine', 'moveLine', 'moveVertex', 'removeVertex', 'additionalTools'):
+        self.UpdateListOfLayers(updateTool=True)
+
+        for tool in (
+                'addPoint', 'addLine', 'addBoundary', 'addCentroid', 'addArea',
+                'addVertex', 'deleteLine', 'deleteArea', 'displayAttr',
+                'displayCats', 'editLine', 'moveLine', 'moveVertex',
+                'removeVertex', 'additionalTools'):
             if hasattr(self, tool):
                 tool = getattr(self, tool)
-                self.toolSwitcher.AddToolToGroup(group='mouseUse', toolbar=self, tool=tool)
+                self.toolSwitcher.AddToolToGroup(
+                    group='mouseUse', toolbar=self, tool=tool)
             else:
                 Debug.msg(1, '%s skipped' % tool)
-        
+
         # custom button for digitization of area/boundary/centroid
         # TODO: could this be somehow generalized?
         nAreaTools = 0
-        if self.tools and 'addBoundary' in self.tools: nAreaTools += 1
-        if self.tools and 'addCentroid' in self.tools: nAreaTools += 1
-        if self.tools and 'addArea' in self.tools: nAreaTools += 1
+        if self.tools and 'addBoundary' in self.tools:
+            nAreaTools += 1
+        if self.tools and 'addCentroid' in self.tools:
+            nAreaTools += 1
+        if self.tools and 'addArea' in self.tools:
+            nAreaTools += 1
         if nAreaTools != 1:
-            self.areaButton = self.CreateSelectionButton(_("Select area/boundary/centroid tool"))
+            self.areaButton = self.CreateSelectionButton(
+                _("Select area/boundary/centroid tool"))
             self.areaButtonId = self.InsertControl(5, self.areaButton)
             self.areaButton.Bind(wx.EVT_BUTTON, self.OnAddAreaMenu)
-        
+
         # realize toolbar
         self.Realize()
         # workaround for Mac bug. May be fixed by 2.8.8, but not before then.
         if self.combo:
             self.combo.Hide()
             self.combo.Show()
-        
+
         # disable undo/redo
         if self.undo > 0:
             self.EnableTool(self.undo, False)
         if self.redo > 0:
             self.EnableTool(self.redo, False)
 
-        self.FixSize(width = 105)
+        self.FixSize(width=105)
 
     def _toolbarData(self):
         """Toolbar data
         """
         data = []
-        
+
         self.icons = {
-            'addPoint'        : MetaIcon(img = 'point-create',
-                                         label = _('Digitize new point'),
-                                         desc = _('Left: new point')),
-            'addLine'         : MetaIcon(img = 'line-create',
-                                         label = _('Digitize new line'),
-                                         desc = _('Left: new point; Ctrl+Left: undo last point; Right: close line')),
-            'addBoundary'     : MetaIcon(img = 'boundary-create',
-                                         label = _('Digitize new boundary'),
-                                         desc = _('Left: new point; Ctrl+Left: undo last point; Right: close line')),
-            'addCentroid'     : MetaIcon(img = 'centroid-create',
-                                         label = _('Digitize new centroid'),
-                                         desc = _('Left: new point')),
-            'addArea'         : MetaIcon(img = 'polygon-create',
-                                         label = _('Digitize new area (boundary without category)'),
-                                         desc = _('Left: new point')),
-            'addVertex'       : MetaIcon(img = 'vertex-create',
-                                         label = _('Add new vertex to line or boundary'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'deleteLine'      : MetaIcon(img = 'line-delete',
-                                         label = _('Delete selected point(s), line(s), boundary(ies) or centroid(s)'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'deleteArea'      : MetaIcon(img = 'polygon-delete',
-                                         label = _('Delete selected area(s)'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'displayAttr'     : MetaIcon(img = 'attributes-display',
-                                         label = _('Display/update attributes'),
-                                         desc = _('Left: Select')),
-            'displayCats'     : MetaIcon(img = 'cats-display',
-                                         label = _('Display/update categories'),
-                                         desc = _('Left: Select')),
-            'editLine'        : MetaIcon(img = 'line-edit',
-                                         label = _('Edit selected line/boundary'),
-                                         desc = _('Left: new point; Ctrl+Left: undo last point; Right: close line')),
-            'moveLine'        : MetaIcon(img = 'line-move',
-                                         label = _('Move selected point(s), line(s), boundary(ies) or centroid(s)'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'moveVertex'      : MetaIcon(img = 'vertex-move',
-                                         label = _('Move selected vertex'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'removeVertex'    : MetaIcon(img = 'vertex-delete',
-                                         label = _('Remove selected vertex'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'settings'        : BaseIcons['settings'].SetLabel(_('Digitization settings')),
-            'quit'            : BaseIcons['quit'].SetLabel(label = _('Quit digitizer'),
-                                                           desc = _('Quit digitizer and save changes')),
-            'help'            : BaseIcons['help'].SetLabel(label = _('Vector Digitizer manual'),
-                                                           desc = _('Show Vector Digitizer manual')),
-            'additionalTools' : MetaIcon(img = 'tools',
-                                         label = _('Additional tools '
-                                                   '(copy, flip, connect, etc.)'),
-                                         desc = _('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
-            'undo'            : MetaIcon(img = 'undo',
-                                         label = _('Undo'),
-                                         desc = _('Undo previous changes')),
-            'redo'            : MetaIcon(img = 'redo',
-                                         label = _('Redo'),
-                                         desc = _('Redo previous changes')),
-            }
-        
+            'addPoint': MetaIcon(img='point-create',
+                                 label=_('Digitize new point'),
+                                 desc=_('Left: new point')),
+            'addLine': MetaIcon(img='line-create',
+                                label=_('Digitize new line'),
+                                desc=_('Left: new point; Ctrl+Left: undo last point; Right: close line')),
+            'addBoundary': MetaIcon(img='boundary-create',
+                                    label=_('Digitize new boundary'),
+                                    desc=_('Left: new point; Ctrl+Left: undo last point; Right: close line')),
+            'addCentroid': MetaIcon(img='centroid-create',
+                                    label=_('Digitize new centroid'),
+                                    desc=_('Left: new point')),
+            'addArea': MetaIcon(img='polygon-create',
+                                label=_('Digitize new area (boundary without category)'),
+                                desc=_('Left: new point')),
+            'addVertex': MetaIcon(img='vertex-create',
+                                  label=_('Add new vertex to line or boundary'),
+                                  desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'deleteLine': MetaIcon(img='line-delete',
+                                   label=_('Delete selected point(s), line(s), boundary(ies) or centroid(s)'),
+                                   desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'deleteArea': MetaIcon(img='polygon-delete',
+                                   label=_('Delete selected area(s)'),
+                                   desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'displayAttr': MetaIcon(img='attributes-display',
+                                    label=_('Display/update attributes'),
+                                    desc=_('Left: Select')),
+            'displayCats': MetaIcon(img='cats-display',
+                                    label=_('Display/update categories'),
+                                    desc=_('Left: Select')),
+            'editLine': MetaIcon(img='line-edit',
+                                 label=_('Edit selected line/boundary'),
+                                 desc=_('Left: new point; Ctrl+Left: undo last point; Right: close line')),
+            'moveLine': MetaIcon(img='line-move',
+                                 label=_('Move selected point(s), line(s), boundary(ies) or centroid(s)'),
+                                 desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'moveVertex': MetaIcon(img='vertex-move',
+                                   label=_('Move selected vertex'),
+                                   desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'removeVertex': MetaIcon(img='vertex-delete',
+                                     label=_('Remove selected vertex'),
+                                     desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'settings': BaseIcons['settings'].SetLabel(_('Digitization settings')),
+            'quit': BaseIcons['quit'].SetLabel(label=_('Quit digitizer'),
+                                               desc=_('Quit digitizer and save changes')),
+            'help': BaseIcons['help'].SetLabel(label=_('Vector Digitizer manual'),
+                                               desc=_('Show Vector Digitizer manual')),
+            'additionalTools': MetaIcon(img='tools',
+                                        label=_('Additional tools '
+                                                '(copy, flip, connect, etc.)'),
+                                        desc=_('Left: Select; Ctrl+Left: Unselect; Right: Confirm')),
+            'undo': MetaIcon(img='undo',
+                             label=_('Undo'),
+                             desc=_('Undo previous changes')),
+            'redo': MetaIcon(img='redo',
+                             label=_('Redo'),
+                             desc=_('Redo previous changes')),
+        }
+
         if not self.tools or 'selector' in self.tools:
             data.append((None, ))
         if not self.tools or 'addPoint' in self.tools:
@@ -186,12 +196,12 @@ class VDigitToolbar(BaseToolbar):
                          wx.ITEM_CHECK))
         if not self.tools or 'addLine' in self.tools:
             data.append(("addLine", self.icons["addLine"],
-                        self.OnAddLine,
-                        wx.ITEM_CHECK))
+                         self.OnAddLine,
+                         wx.ITEM_CHECK))
         if not self.tools or 'addArea' in self.tools:
             data.append(("addArea", self.icons["addArea"],
-                        self.OnAddAreaTool,
-                        wx.ITEM_CHECK))
+                         self.OnAddAreaTool,
+                         wx.ITEM_CHECK))
         if not self.tools or 'deleteLine' in self.tools:
             data.append(("deleteLine", self.icons["deleteLine"],
                          self.OnDeleteLine,
@@ -200,7 +210,7 @@ class VDigitToolbar(BaseToolbar):
             data.append(("deleteArea", self.icons["deleteArea"],
                          self.OnDeleteArea,
                          wx.ITEM_CHECK))
-        if not self.tools or 'moveVertex' in self.tools:            
+        if not self.tools or 'moveVertex' in self.tools:
             data.append(("moveVertex", self.icons["moveVertex"],
                          self.OnMoveVertex,
                          wx.ITEM_CHECK))
@@ -212,7 +222,7 @@ class VDigitToolbar(BaseToolbar):
             data.append(("removeVertex", self.icons["removeVertex"],
                          self.OnRemoveVertex,
                          wx.ITEM_CHECK))
-        if not self.tools or 'editLine' in self.tools:            
+        if not self.tools or 'editLine' in self.tools:
             data.append(("editLine", self.icons["editLine"],
                          self.OnEditLine,
                          wx.ITEM_CHECK))
@@ -254,7 +264,7 @@ class VDigitToolbar(BaseToolbar):
         if not self.tools or 'quit' in self.tools:
             data.append(("quit", self.icons["quit"],
                          self.OnExit))
-        
+
         return self._getToolbarData(data)
 
     def OnTool(self, event):
@@ -263,101 +273,106 @@ class VDigitToolbar(BaseToolbar):
         Debug.msg(3, "VDigitToolbar.OnTool(): id = %s" % event.GetId())
         # set cursor
         self.MapWindow.SetNamedCursor('cross')
-        self.MapWindow.mouse['box'] = 'point' 
+        self.MapWindow.mouse['box'] = 'point'
         self.MapWindow.mouse['use'] = 'pointer'
-         
-        aId = self.action.get('id', -1)       
+
+        aId = self.action.get('id', -1)
         BaseToolbar.OnTool(self, event)
 
         # clear tmp canvas
         if self.action['id'] != aId or aId == -1:
             self.MapWindow.polycoords = []
-            self.MapWindow.ClearLines(pdc = self.MapWindow.pdcTmp)
+            self.MapWindow.ClearLines(pdc=self.MapWindow.pdcTmp)
             if self.digit and \
                     len(self.MapWindow.digit.GetDisplay().GetSelected()) > 0:
                 # cancel action
                 self.MapWindow.OnMiddleDown(None)
-        
+
         # set no action
         if self.action['id'] == -1:
-            self.action = { 'desc' : '',
-                            'type' : '',
-                            'id'   : -1 }
-        
+            self.action = {'desc': '',
+                           'type': '',
+                           'id': -1}
+
         # set focus
         self.MapWindow.SetFocus()
-        
+
     def OnAddPoint(self, event):
         """Add point to the vector map Laier"""
-        Debug.msg (2, "VDigitToolbar.OnAddPoint()")
-        self.action = { 'desc' : "addLine",
-                        'type' : "point",
-                        'id'   : self.addPoint }
+        Debug.msg(2, "VDigitToolbar.OnAddPoint()")
+        self.action = {'desc': "addLine",
+                       'type': "point",
+                       'id': self.addPoint}
         self.MapWindow.mouse['box'] = 'point'
-        
+
     def OnAddLine(self, event):
         """Add line to the vector map layer"""
-        Debug.msg (2, "VDigitToolbar.OnAddLine()")
-        self.action = { 'desc' : "addLine",
-                        'type' : "line",
-                        'id'   : self.addLine }
+        Debug.msg(2, "VDigitToolbar.OnAddLine()")
+        self.action = {'desc': "addLine",
+                       'type': "line",
+                       'id': self.addLine}
         self.MapWindow.mouse['box'] = 'line'
-        ### self.MapWindow.polycoords = [] # reset temp line
+        # self.MapWindow.polycoords = [] # reset temp line
 
     def OnAddBoundary(self, event):
         """Add boundary to the vector map layer"""
-        Debug.msg (2, "VDigitToolbar.OnAddBoundary()")
+        Debug.msg(2, "VDigitToolbar.OnAddBoundary()")
 
         self._toggleAreaIfNeeded()
 
-         # reset temp line
+        # reset temp line
         if self.action['desc'] != 'addLine' or \
                 self.action['type'] != 'boundary':
             self.MapWindow.polycoords = []
 
         # update icon and tooltip
-        self.SetToolNormalBitmap(self.addArea, self.icons['addBoundary'].GetBitmap())
-        self.SetToolShortHelp(self.addArea, self.icons['addBoundary'].GetLabel())
+        self.SetToolNormalBitmap(self.addArea, self.icons[
+                                 'addBoundary'].GetBitmap())
+        self.SetToolShortHelp(self.addArea,
+                              self.icons['addBoundary'].GetLabel())
 
         # set action
-        self.action = { 'desc' : "addLine",
-                        'type' : "boundary",
-                        'id'   : self.addArea }
+        self.action = {'desc': "addLine",
+                       'type': "boundary",
+                       'id': self.addArea}
         self.MapWindow.mouse['box'] = 'line'
         self._currentAreaActionType = 'boundary'
-        
+
     def OnAddCentroid(self, event):
         """Add centroid to the vector map layer"""
-        Debug.msg (2, "VDigitToolbar.OnAddCentroid()")
+        Debug.msg(2, "VDigitToolbar.OnAddCentroid()")
 
         self._toggleAreaIfNeeded()
 
         # update icon and tooltip
-        self.SetToolNormalBitmap(self.addArea, self.icons['addCentroid'].GetBitmap())
-        self.SetToolShortHelp(self.addArea, self.icons['addCentroid'].GetLabel())
-        
+        self.SetToolNormalBitmap(self.addArea, self.icons[
+                                 'addCentroid'].GetBitmap())
+        self.SetToolShortHelp(self.addArea,
+                              self.icons['addCentroid'].GetLabel())
+
         # set action
-        self.action = { 'desc' : "addLine",
-                        'type' : "centroid",
-                        'id'   : self.addArea }
+        self.action = {'desc': "addLine",
+                       'type': "centroid",
+                       'id': self.addArea}
         self.MapWindow.mouse['box'] = 'point'
         self._currentAreaActionType = 'centroid'
 
     def OnAddArea(self, event):
         """Add area to the vector map layer"""
 
-        Debug.msg (2, "VDigitToolbar.OnAddArea()")
+        Debug.msg(2, "VDigitToolbar.OnAddArea()")
 
         self._toggleAreaIfNeeded()
 
         # update icon and tooltip
-        self.SetToolNormalBitmap(self.addArea, self.icons['addArea'].GetBitmap())
+        self.SetToolNormalBitmap(
+            self.addArea, self.icons['addArea'].GetBitmap())
         self.SetToolShortHelp(self.addArea, self.icons['addArea'].GetLabel())
-        
+
         # set action
-        self.action = { 'desc' : "addLine",
-                        'type' : "area",
-                        'id'   : self.addArea }
+        self.action = {'desc': "addLine",
+                       'type': "area",
+                       'id': self.addArea}
         self.MapWindow.mouse['box'] = 'line'
         self._currentAreaActionType = 'area'
 
@@ -369,10 +384,10 @@ class VDigitToolbar(BaseToolbar):
 
     def OnAddAreaTool(self, event):
         """Area tool activated."""
-        Debug.msg (2, "VDigitToolbar.OnAddAreaTool()")
+        Debug.msg(2, "VDigitToolbar.OnAddAreaTool()")
 
         # we need the previous id
-        if not self._currentAreaActionType or self._currentAreaActionType == 'area': # default action
+        if not self._currentAreaActionType or self._currentAreaActionType == 'area':  # default action
             self.OnAddArea(event)
         elif self._currentAreaActionType == 'boundary':
             self.OnAddBoundary(event)
@@ -387,20 +402,20 @@ class VDigitToolbar(BaseToolbar):
         if not self.fType and not self.tools or 'addBoundary' in self.tools:
             menuItems.append((self.icons["addBoundary"], self.OnAddBoundary))
         if not self.fType and not self.tools or 'addCentroid' in self.tools:
-            menuItems.append((self.icons["addCentroid"],  self.OnAddCentroid))
-        
+            menuItems.append((self.icons["addCentroid"], self.OnAddCentroid))
+
         self._onMenu(menuItems)
 
-    def OnExit (self, event = None):
+    def OnExit(self, event=None):
         """Quit digitization tool"""
         # stop editing of the currently selected map layer
         if self.mapLayer:
             self.StopEditing()
-        
+
         # close dialogs if still open
         if self.settingsDialog:
             self.settingsDialog.OnCancel(None)
-        
+
         # set default mouse settings
         self.parent.GetMapToolbar().SelectDefault()
         self.MapWindow.polycoords = []
@@ -411,100 +426,100 @@ class VDigitToolbar(BaseToolbar):
             self.parent.RemoveToolbar("vdigit")
         else:
             self.parent.Close()
-                
+
     def OnMoveVertex(self, event):
         """Move line vertex"""
         Debug.msg(2, "Digittoolbar.OnMoveVertex():")
-        self.action = { 'desc' : "moveVertex",
-                        'id'   : self.moveVertex }
+        self.action = {'desc': "moveVertex",
+                       'id': self.moveVertex}
         self.MapWindow.mouse['box'] = 'point'
 
     def OnAddVertex(self, event):
         """Add line vertex"""
         Debug.msg(2, "Digittoolbar.OnAddVertex():")
-        self.action = { 'desc' : "addVertex",
-                        'id'   : self.addVertex }
+        self.action = {'desc': "addVertex",
+                       'id': self.addVertex}
         self.MapWindow.mouse['box'] = 'point'
-        
+
     def OnRemoveVertex(self, event):
         """Remove line vertex"""
         Debug.msg(2, "Digittoolbar.OnRemoveVertex():")
-        self.action = { 'desc' : "removeVertex",
-                        'id'   : self.removeVertex }
+        self.action = {'desc': "removeVertex",
+                       'id': self.removeVertex}
         self.MapWindow.mouse['box'] = 'point'
 
     def OnEditLine(self, event):
         """Edit line"""
         Debug.msg(2, "Digittoolbar.OnEditLine():")
-        self.action = { 'desc' : "editLine",
-                        'id'   : self.editLine }
+        self.action = {'desc': "editLine",
+                       'id': self.editLine}
         self.MapWindow.mouse['box'] = 'line'
 
     def OnMoveLine(self, event):
         """Move line"""
         Debug.msg(2, "Digittoolbar.OnMoveLine():")
-        self.action = { 'desc' : "moveLine",
-                        'id'   : self.moveLine }
+        self.action = {'desc': "moveLine",
+                       'id': self.moveLine}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnDeleteLine(self, event):
         """Delete line"""
         Debug.msg(2, "Digittoolbar.OnDeleteLine():")
-        self.action = { 'desc' : "deleteLine",
-                        'id'   : self.deleteLine }
+        self.action = {'desc': "deleteLine",
+                       'id': self.deleteLine}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnDeleteArea(self, event):
         """Delete Area"""
         Debug.msg(2, "Digittoolbar.OnDeleteArea():")
-        self.action = { 'desc' : "deleteArea",
-                        'id'   : self.deleteArea }
+        self.action = {'desc': "deleteArea",
+                       'id': self.deleteArea}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnDisplayCats(self, event):
         """Display/update categories"""
         Debug.msg(2, "Digittoolbar.OnDisplayCats():")
-        self.action = { 'desc' : "displayCats",
-                        'id'   : self.displayCats }
+        self.action = {'desc': "displayCats",
+                       'id': self.displayCats}
         self.MapWindow.mouse['box'] = 'point'
 
     def OnDisplayAttr(self, event):
         """Display/update attributes"""
         Debug.msg(2, "Digittoolbar.OnDisplayAttr():")
-        self.action = { 'desc' : "displayAttrs",
-                        'id'   : self.displayAttr }
+        self.action = {'desc': "displayAttrs",
+                       'id': self.displayAttr}
         self.MapWindow.mouse['box'] = 'point'
-        
+
     def OnUndo(self, event):
         """Undo previous changes"""
         self.digit.Undo()
-        
+
         event.Skip()
 
     def OnRedo(self, event):
         """Undo previous changes"""
-        self.digit.Undo(level = 1)
-        
+        self.digit.Undo(level=1)
+
         event.Skip()
-        
-    def EnableUndo(self, enable = True):
+
+    def EnableUndo(self, enable=True):
         """Enable 'Undo' in toolbar
-        
+
         :param enable: False for disable
         """
         self._enableTool(self.undo, enable)
 
-    def EnableRedo(self, enable = True):
+    def EnableRedo(self, enable=True):
         """Enable 'Redo' in toolbar
-        
+
         :param enable: False for disable
         """
         self._enableTool(self.redo, enable)
-        
+
     def _enableTool(self, tool, enable):
         if not self.FindById(tool):
             return
-        
+
         if enable:
             if self.GetToolEnabled(tool) is False:
                 self.EnableTool(tool, True)
@@ -512,7 +527,7 @@ class VDigitToolbar(BaseToolbar):
             if self.GetToolEnabled(tool) is True:
                 self.EnableTool(tool, False)
 
-    def GetAction(self, type = 'desc'):
+    def GetAction(self, type='desc'):
         """Get current action info"""
         return self.action.get(type, '')
 
@@ -520,23 +535,25 @@ class VDigitToolbar(BaseToolbar):
         """Show settings dialog"""
         if self.digit is None:
             try:
-                self.digit = self.MapWindow.digit = self.digitClass(mapwindow = self.MapWindow)
+                self.digit = self.MapWindow.digit = self.digitClass(
+                    mapwindow=self.MapWindow)
             except SystemExit:
                 self.digit = self.MapWindow.digit = None
-        
+
         if not self.settingsDialog:
-            self.settingsDialog = VDigitSettingsDialog(parent = self.parent, giface = self._giface)
+            self.settingsDialog = VDigitSettingsDialog(
+                parent=self.parent, giface=self._giface)
             self.settingsDialog.Show()
 
     def OnHelp(self, event):
         """Show digitizer help page in web browser"""
         self._giface.Help('wxGUI.vdigit')
-        
+
     def OnAdditionalToolMenu(self, event):
         """Menu for additional tools"""
         point = wx.GetMousePosition()
         toolMenu = wx.Menu()
-        
+
         for label, itype, handler, desc in (
             (_('Break selected lines/boundaries at intersection'),
              wx.ITEM_CHECK, self.OnBreak, "breakLine"),
@@ -563,198 +580,202 @@ class VDigitToolbar(BaseToolbar):
             (_('Z bulk-labeling of 3D lines'),
              wx.ITEM_CHECK, self.OnZBulk, "zbulkLine")):
             # Add items to the menu
-            item = wx.MenuItem(parentMenu = toolMenu, id = wx.ID_ANY,
-                               text = label,
-                               kind = itype)
+            item = wx.MenuItem(parentMenu=toolMenu, id=wx.ID_ANY,
+                               text=label,
+                               kind=itype)
             toolMenu.AppendItem(item)
             self.MapWindow.Bind(wx.EVT_MENU, handler, item)
             if self.action['desc'] == desc:
                 item.Check(True)
-        
+
         # Popup the menu.  If an item is selected then its handler
         # will be called before PopupMenu returns.
         self.MapWindow.PopupMenu(toolMenu)
         toolMenu.Destroy()
-        
+
         if self.action['desc'] == 'addPoint':
             self.ToggleTool(self.additionalTools, False)
-        
+
     def OnCopy(self, event):
         """Copy selected features from (background) vector map"""
         if not self.digit:
             GError(_("No vector map open for editing."), self.parent)
             return
-        
+
         # select background map
-        dlg = VectorDialog(self.parent, title = _("Select background vector map"),
-                           layerTree = self._giface.GetLayerTree())
+        dlg = VectorDialog(self.parent,
+                           title=_("Select background vector map"),
+                           layerTree=self._giface.GetLayerTree())
         if dlg.ShowModal() != wx.ID_OK:
             dlg.Destroy()
             return
-        
+
         mapName = dlg.GetName(full=True)
         dlg.Destroy()
-        
+
         # close open background map if any
-        bgMap = UserSettings.Get(group = 'vdigit', key = 'bgmap', subkey = 'value',
+        bgMap = UserSettings.Get(group='vdigit', key='bgmap', subkey='value',
                                  settings_type='internal')
         if bgMap:
             self.digit.CloseBackgroundMap()
-            self.editingBgMap.emit(mapName = bgMap, unset=True)
+            self.editingBgMap.emit(mapName=bgMap, unset=True)
 
         # open background map for reading
-        UserSettings.Set(group = 'vdigit', key = 'bgmap', subkey = 'value',
+        UserSettings.Set(group='vdigit', key='bgmap', subkey='value',
                          value=str(mapName), settings_type='internal')
         self.digit.OpenBackgroundMap(mapName)
-        self.editingBgMap.emit(mapName = mapName)
+        self.editingBgMap.emit(mapName=mapName)
 
-        if self.action['desc'] == 'copyLine': # select previous action
+        if self.action['desc'] == 'copyLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnCopy():")
-        self.action = { 'desc' : "copyLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "copyLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnSplitLine(self, event):
         """Split line"""
-        if self.action['desc'] == 'splitLine': # select previous action
+        if self.action['desc'] == 'splitLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnSplitLine():")
-        self.action = { 'desc' : "splitLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "splitLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'point'
 
-
     def OnCopyCats(self, event):
         """Copy categories"""
-        if self.action['desc'] == 'copyCats': # select previous action
+        if self.action['desc'] == 'copyCats':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.copyCats, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnCopyCats():")
-        self.action = { 'desc' : "copyCats",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "copyCats",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'point'
 
     def OnCopyAttrb(self, event):
         """Copy attributes"""
-        if self.action['desc'] == 'copyAttrs': # select previous action
+        if self.action['desc'] == 'copyAttrs':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.copyCats, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnCopyAttrb():")
-        self.action = { 'desc' : "copyAttrs",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "copyAttrs",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'point'
-        
 
     def OnFlip(self, event):
         """Flip selected lines/boundaries"""
-        if self.action['desc'] == 'flipLine': # select previous action
+        if self.action['desc'] == 'flipLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnFlip():")
-        self.action = { 'desc' : "flipLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "flipLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnMerge(self, event):
         """Merge selected lines/boundaries"""
-        if self.action['desc'] == 'mergeLine': # select previous action
+        if self.action['desc'] == 'mergeLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnMerge():")
-        self.action = { 'desc' : "mergeLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "mergeLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnBreak(self, event):
         """Break selected lines/boundaries"""
-        if self.action['desc'] == 'breakLine': # select previous action
+        if self.action['desc'] == 'breakLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnBreak():")
-        self.action = { 'desc' : "breakLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "breakLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnSnap(self, event):
         """Snap selected features"""
-        if self.action['desc'] == 'snapLine': # select previous action
+        if self.action['desc'] == 'snapLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnSnap():")
-        self.action = { 'desc' : "snapLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "snapLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnConnect(self, event):
         """Connect selected lines/boundaries"""
-        if self.action['desc'] == 'connectLine': # select previous action
+        if self.action['desc'] == 'connectLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnConnect():")
-        self.action = { 'desc' : "connectLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "connectLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnQuery(self, event):
         """Query selected lines/boundaries"""
-        if self.action['desc'] == 'queryLine': # select previous action
+        if self.action['desc'] == 'queryLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
-        Debug.msg(2, "Digittoolbar.OnQuery(): %s" % \
-                      UserSettings.Get(group = 'vdigit', key = 'query', subkey = 'selection'))
-        self.action = { 'desc' : "queryLine",
-                        'id'   : self.additionalTools }
+
+        Debug.msg(
+            2,
+            "Digittoolbar.OnQuery(): %s" %
+            UserSettings.Get(
+                group='vdigit',
+                key='query',
+                subkey='selection'))
+        self.action = {'desc': "queryLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
     def OnZBulk(self, event):
         """Z bulk-labeling selected lines/boundaries"""
         if not self.digit.IsVector3D():
-            GError(parent = self.parent,
-                   message = _("Vector map is not 3D. Operation canceled."))
+            GError(parent=self.parent,
+                   message=_("Vector map is not 3D. Operation canceled."))
             return
-        
-        if self.action['desc'] == 'zbulkLine': # select previous action
+
+        if self.action['desc'] == 'zbulkLine':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnZBulk():")
-        self.action = { 'desc' : "zbulkLine",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "zbulkLine",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'line'
 
     def OnTypeConversion(self, event):
@@ -764,27 +785,28 @@ class VDigitToolbar(BaseToolbar):
          - point <-> centroid
          - line <-> boundary
         """
-        if self.action['desc'] == 'typeConv': # select previous action
+        if self.action['desc'] == 'typeConv':  # select previous action
             self.ToggleTool(self.addPoint, True)
             self.ToggleTool(self.additionalTools, False)
             self.OnAddPoint(event)
             return
-        
+
         Debug.msg(2, "Digittoolbar.OnTypeConversion():")
-        self.action = { 'desc' : "typeConv",
-                        'id'   : self.additionalTools }
+        self.action = {'desc': "typeConv",
+                       'id': self.additionalTools}
         self.MapWindow.mouse['box'] = 'box'
 
-    def OnSelectMap (self, event):
+    def OnSelectMap(self, event):
         """Select vector map layer for editing
 
         If there is a vector map layer already edited, this action is
         firstly terminated. The map layer is closed. After this the
         selected map layer activated for editing.
         """
-        if event.GetSelection() == 0: # create new vector map layer
+        if event.GetSelection() == 0:  # create new vector map layer
             if self.mapLayer:
-                openVectorMap = self.mapLayer.GetName(fullyQualified = False)['name']
+                openVectorMap = self.mapLayer.GetName(
+                    fullyQualified=False)['name']
             else:
                 openVectorMap = None
             dlg = CreateNewVector(self.parent,
@@ -792,19 +814,19 @@ class VDigitToolbar(BaseToolbar):
                                   cmd=(('v.edit',
                                         {'tool': 'create'},
                                         'map')),
-                                  disableAdd = True)
-            
+                                  disableAdd=True)
+
             if dlg and dlg.GetName():
                 # add layer to map layer tree
                 if self._giface.GetLayerTree():
                     mapName = dlg.GetName() + '@' + grass.gisenv()['MAPSET']
-                    self._giface.GetLayerList().AddLayer(ltype='vector',
-                                                         name=mapName,
-                                                         cmd=['d.vect', 'map=%s' % mapName])
-                    
-                    vectLayers = self.UpdateListOfLayers(updateTool = True)
+                    self._giface.GetLayerList().AddLayer(
+                        ltype='vector', name=mapName, checked=True,
+                        cmd=['d.vect', 'map=%s' % mapName])
+
+                    vectLayers = self.UpdateListOfLayers(updateTool=True)
                     selection = vectLayers.index(mapName)
-                
+
                 # create table ?
                 if dlg.IsChecked('table'):
                     # TODO: replace this by signal
@@ -813,7 +835,7 @@ class VDigitToolbar(BaseToolbar):
                     # than starting randomly from mapdisp and lmgr
                     lmgr = self.parent.GetLayerManager()
                     if lmgr:
-                        lmgr.OnShowAttributeTable(None, selection = 'table')
+                        lmgr.OnShowAttributeTable(None, selection='table')
                 dlg.Destroy()
             else:
                 self.combo.SetValue(_('Select vector map'))
@@ -821,21 +843,21 @@ class VDigitToolbar(BaseToolbar):
                     dlg.Destroy()
                 return
         else:
-            selection = event.GetSelection() - 1 # first option is 'New vector map'
-        
+            selection = event.GetSelection() - 1  # first option is 'New vector map'
+
         # skip currently selected map
         if self.layers[selection] == self.mapLayer:
             return
-        
+
         if self.mapLayer:
             # deactive map layer for editing
             self.StopEditing()
-        
+
         # select the given map layer for editing
         self.StartEditing(self.layers[selection])
-        
+
         event.Skip()
-        
+
     def StartEditing(self, mapLayer):
         """Start editing selected vector map layer.
 
@@ -843,55 +865,68 @@ class VDigitToolbar(BaseToolbar):
         """
         # check if topology is available (skip for hidden - temporary
         # maps, see iclass for details)
-        if not mapLayer.IsHidden() and grass.vector_info(mapLayer.GetName())['level'] != 2:
-            dlg = wx.MessageDialog(parent = self.MapWindow,
-                                   message = _("Topology for vector map <%s> is not available. "
-                                               "Topology is required by digitizer.\nDo you want to "
-                                               "rebuild topology (takes some time) and open the vector map "
-                                               "for editing?") % mapLayer.GetName(),
-                                   caption=_("Digitizer error"),
-                                   style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+        if not mapLayer.IsHidden() and grass.vector_info(
+                mapLayer.GetName())['level'] != 2:
+            dlg = wx.MessageDialog(
+                parent=self.MapWindow,
+                message=_(
+                    "Topology for vector map <%s> is not available. "
+                    "Topology is required by digitizer.\nDo you want to "
+                    "rebuild topology (takes some time) and open the vector map "
+                    "for editing?") %
+                mapLayer.GetName(),
+                caption=_("Digitizer error"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             if dlg.ShowModal() == wx.ID_YES:
                 RunCommand('v.build', map=mapLayer.GetName())
             else:
                 return
-        
+
         # deactive layer
         self.Map.ChangeLayerActive(mapLayer, False)
-        
+
         # clean map canvas
         self.MapWindow.EraseMap()
-        
+
         # unset background map if needed
         if mapLayer:
-            if UserSettings.Get(group = 'vdigit', key = 'bgmap',
-                                subkey = 'value', settings_type='internal') == mapLayer.GetName():
-                UserSettings.Set(group = 'vdigit', key = 'bgmap',
-                                 subkey='value', value='', settings_type='internal')
-            
+            if UserSettings.Get(
+                    group='vdigit', key='bgmap', subkey='value',
+                    settings_type='internal') == mapLayer.GetName():
+                UserSettings.Set(
+                    group='vdigit',
+                    key='bgmap',
+                    subkey='value',
+                    value='',
+                    settings_type='internal')
+
             self.parent.SetStatusText(_("Please wait, "
-                                        "opening vector map <%s> for editing...") % mapLayer.GetName(),
-                                        0)
-        
+                                        "opening vector map <%s> for editing...") %
+                                      mapLayer.GetName(), 0)
+
         self.MapWindow.pdcVector = wx.PseudoDC()
-        self.digit = self.MapWindow.digit = self.digitClass(mapwindow = self.MapWindow)
-        
+        self.digit = self.MapWindow.digit = self.digitClass(
+            mapwindow=self.MapWindow)
+
         self.mapLayer = mapLayer
-        # open vector map (assume that 'hidden' map layer is temporary vector map)
-        if self.digit.OpenMap(mapLayer.GetName(), tmp = mapLayer.IsHidden()) is None:
+        # open vector map (assume that 'hidden' map layer is temporary vector
+        # map)
+        if self.digit.OpenMap(
+                mapLayer.GetName(),
+                tmp=mapLayer.IsHidden()) is None:
             self.mapLayer = None
             self.StopEditing()
             return False
-        
+
         # check feature type (only for OGR layers)
         self.fType = self.digit.GetFeatureType()
         self.EnableAll()
         self.EnableUndo(False)
         self.EnableRedo(False)
-        
+
         if self.fType == 'point':
-            for tool in (self.addLine, self.addArea, self.moveVertex, self.addVertex,
-                         self.removeVertex, self.editLine):
+            for tool in (self.addLine, self.addArea, self.moveVertex,
+                         self.addVertex, self.removeVertex, self.editLine):
                 self.EnableTool(tool, False)
         elif self.fType == 'linestring':
             for tool in (self.addPoint, self.addArea):
@@ -900,40 +935,44 @@ class VDigitToolbar(BaseToolbar):
             for tool in (self.addPoint, self.addLine):
                 self.EnableTool(tool, False)
         elif self.fType:
-            GError(parent = self,
-                   message = _("Unsupported feature type '%(type)s'. Unable to edit "
-                               "OGR layer <%(layer)s>.") % { 'type' : self.fType,
-                                                             'layer' : mapLayer.GetName() })
+            GError(
+                parent=self,
+                message=_(
+                    "Unsupported feature type '%(type)s'. Unable to edit "
+                    "OGR layer <%(layer)s>.") %
+                {'type': self.fType, 'layer': mapLayer.GetName()})
             self.digit.CloseMap()
             self.mapLayer = None
             self.StopEditing()
             return False
-        
+
         # update toolbar
         if self.combo:
             self.combo.SetValue(mapLayer.GetName())
         if 'map' in self.parent.toolbars:
-            self.parent.toolbars['map'].combo.SetValue (_('Vector digitizer'))
-        
+            self.parent.toolbars['map'].combo.SetValue(_('Vector digitizer'))
+
         # here was dead code to enable vdigit button in toolbar
         # with if to ignore iclass
         # some signal (DigitizerStarted) can be emitted here
-        
-        Debug.msg (4, "VDigitToolbar.StartEditing(): layer=%s" % mapLayer.GetName())
-        
+
+        Debug.msg(
+            4, "VDigitToolbar.StartEditing(): layer=%s" %
+            mapLayer.GetName())
+
         # change cursor
         if self.MapWindow.mouse['use'] == 'pointer':
             self.MapWindow.SetNamedCursor('cross')
-        
+
         if not self.MapWindow.resize:
-            self.MapWindow.UpdateMap(render = True)
-        
+            self.MapWindow.UpdateMap(render=True)
+
         # respect opacity
         opacity = mapLayer.GetOpacity()
-        
+
         if opacity < 1.0:
             alpha = int(opacity * 255)
-            self.digit.GetDisplay().UpdateSettings(alpha = alpha)
+            self.digit.GetDisplay().UpdateSettings(alpha=alpha)
 
         # emit signal
         layerTree = self._giface.GetLayerTree()
@@ -941,7 +980,9 @@ class VDigitToolbar(BaseToolbar):
             item = layerTree.FindItemByData('maplayer', self.mapLayer)
         else:
             item = None
-        self.editingStarted.emit(vectMap = mapLayer.GetName(), digit = self.digit, layerItem = item)
+        self.editingStarted.emit(
+            vectMap=mapLayer.GetName(),
+            digit=self.digit, layerItem=item)
 
         return True
 
@@ -952,115 +993,127 @@ class VDigitToolbar(BaseToolbar):
         :return: False on failure
         """
         item = None
-        
+
         if self.combo:
-            self.combo.SetValue (_('Select vector map'))
-        
+            self.combo.SetValue(_('Select vector map'))
+
         # save changes
         if self.mapLayer:
-            Debug.msg (4, "VDigitToolbar.StopEditing(): layer=%s" % self.mapLayer.GetName())
-            if UserSettings.Get(group = 'vdigit', key = 'saveOnExit', subkey = 'enabled') is False:
+            Debug.msg(
+                4, "VDigitToolbar.StopEditing(): layer=%s" %
+                self.mapLayer.GetName())
+            if UserSettings.Get(group='vdigit', key='saveOnExit',
+                                subkey='enabled') is False:
                 if self.digit.GetUndoLevel() > -1:
-                    dlg = wx.MessageDialog(parent = self.parent,
-                                           message = _("Do you want to save changes "
-                                                     "in vector map <%s>?") % self.mapLayer.GetName(),
-                                           caption = _("Save changes?"),
-                                           style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+                    dlg = wx.MessageDialog(
+                        parent=self.parent,
+                        message=_(
+                            "Do you want to save changes "
+                            "in vector map <%s>?") %
+                        self.mapLayer.GetName(),
+                        caption=_("Save changes?"),
+                        style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
                     if dlg.ShowModal() == wx.ID_NO:
                         # revert changes
                         self.digit.Undo(0)
                     dlg.Destroy()
-            
+
             self.parent.SetStatusText(_("Please wait, "
                                         "closing and rebuilding topology of "
-                                        "vector map <%s>...") % self.mapLayer.GetName(),
-                                      0)
+                                        "vector map <%s>...") %
+                                      self.mapLayer.GetName(), 0)
             self.digit.CloseMap()
 
             # close open background map if any
-            bgMap = UserSettings.Get(group = 'vdigit', key = 'bgmap', subkey = 'value',
-                                     settings_type='internal')
+            bgMap = UserSettings.Get(
+                group='vdigit',
+                key='bgmap',
+                subkey='value',
+                settings_type='internal')
             if bgMap:
                 self.digit.CloseBackgroundMap()
-                self.editingBgMap.emit(mapName = bgMap, unset=True)
-            
+                self.editingBgMap.emit(mapName=bgMap, unset=True)
+
             self._giface.GetProgress().SetValue(0)
-            self._giface.WriteCmdLog(_("Editing of vector map <%s> successfully finished") % \
-                                         self.mapLayer.GetName(),
-                                     notification=Notification.HIGHLIGHT)
+            self._giface.WriteCmdLog(
+                _("Editing of vector map <%s> successfully finished") %
+                self.mapLayer.GetName(),
+                notification=Notification.HIGHLIGHT)
             # re-active layer
             layerTree = self._giface.GetLayerTree()
             if layerTree:
                 item = layerTree.FindItemByData('maplayer', self.mapLayer)
                 if item and layerTree.IsItemChecked(item):
                     self.Map.ChangeLayerActive(self.mapLayer, True)
-        
+
         # change cursor
         self.MapWindow.SetNamedCursor('default')
         self.MapWindow.pdcVector = None
-        
+
         # close dialogs
         for dialog in ('attributes', 'category'):
             if self.parent.dialogs[dialog]:
                 self.parent.dialogs[dialog].Close()
                 self.parent.dialogs[dialog] = None
-        
-        del self.digit
-        del self.MapWindow.digit
 
-        self.editingStopped.emit(layerItem = item)
-        
+        self.digit = None
+        self.MapWindow.digit = None
+
+        self.editingStopped.emit(layerItem=item)
+
         self.mapLayer = None
-        
+
         self.MapWindow.redrawAll = True
 
         return True
-    
-    def UpdateListOfLayers (self, updateTool = False):
+
+    def UpdateListOfLayers(self, updateTool=False):
         """Update list of available vector map layers.
         This list consists only editable layers (in the current mapset)
 
         :param updateTool: True to update also toolbar
         :type updateTool: bool
         """
-        Debug.msg (4, "VDigitToolbar.UpdateListOfLayers(): updateTool=%d" % \
-                   updateTool)
-        
+        Debug.msg(4, "VDigitToolbar.UpdateListOfLayers(): updateTool=%d" %
+                  updateTool)
+
         layerNameSelected = None
-         # name of currently selected layer
+        # name of currently selected layer
         if self.mapLayer:
             layerNameSelected = self.mapLayer.GetName()
-        
+
         # select vector map layer in the current mapset
         layerNameList = []
-        self.layers = self.Map.GetListOfLayers(ltype = "vector",
-                                               mapset = grass.gisenv()['MAPSET'])
-        
+        self.layers = self.Map.GetListOfLayers(ltype="vector",
+                                               mapset=grass.gisenv()['MAPSET'])
+
         for layer in self.layers:
-            if not layer.name in layerNameList: # do not duplicate layer
-                layerNameList.append (layer.GetName())
-        
-        if updateTool: # update toolbar
+            if not layer.name in layerNameList:  # do not duplicate layer
+                layerNameList.append(layer.GetName())
+
+        if updateTool:  # update toolbar
             if not self.mapLayer:
                 value = _('Select vector map')
             else:
                 value = layerNameSelected
-            
+
             if not self.comboid:
                 if not self.tools or 'selector' in self.tools:
-                    self.combo = wx.ComboBox(self, id = wx.ID_ANY, value = value,
-                                             choices = [_('New vector map'), ] + layerNameList, size = (80, -1),
-                                             style = wx.CB_READONLY)
+                    self.combo = wx.ComboBox(
+                        self, id=wx.ID_ANY, value=value,
+                        choices=[_('New vector map'), ] + layerNameList,
+                        size=(80, -1),
+                        style=wx.CB_READONLY)
                     self.comboid = self.InsertControl(0, self.combo)
-                    self.parent.Bind(wx.EVT_COMBOBOX, self.OnSelectMap, self.comboid)
+                    self.parent.Bind(
+                        wx.EVT_COMBOBOX, self.OnSelectMap, self.comboid)
             else:
                 self.combo.SetItems([_('New vector map'), ] + layerNameList)
-            
+
             self.Realize()
-        
+
         return layerNameList
 
     def GetLayer(self):
         """Get selected layer for editing -- MapLayer instance"""
         return self.mapLayer
-
diff --git a/gui/wxpython/vdigit/wxdigit.py b/gui/wxpython/vdigit/wxdigit.py
index 12f2dfc..f2285af 100644
--- a/gui/wxpython/vdigit/wxdigit.py
+++ b/gui/wxpython/vdigit/wxdigit.py
@@ -18,7 +18,7 @@ List of classes:
     (and NumPy would be an excellent candidate for acceleration via
     e.g. OpenCL or CUDA; I'm surprised it hasn't happened already).
 
-(C) 2007-2014 by the GRASS Development Team
+(C) 2007-2016 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -44,149 +44,156 @@ try:
 except ImportError:
     pass
 
+
 class VDigitError:
+
     def __init__(self, parent):
         """Class for managing error messages of vector digitizer
 
         :param parent: parent window for dialogs
         """
-        self.parent  = parent
+        self.parent = parent
         self.caption = _('Digitization Error')
-    
-    def NoMap(self, name = None):
+
+    def NoMap(self, name=None):
         """No map for editing"""
         if name:
             message = _('Unable to open vector map <%s>.') % name
         else:
-            message =  _('No vector map open for editing.')
+            message = _('No vector map open for editing.')
         GError(message + ' ' + _('Operation canceled.'),
-               parent  = self.parent,
-               caption = self.caption)
+               parent=self.parent,
+               caption=self.caption)
 
     def WriteLine(self):
         """Writing line failed
         """
-        GError(message = _('Writing new feature failed. '
-                           'Operation canceled.\n\n'
-                           'Reason: %s') % GetLastError(),
-               parent  = self.parent,
-               caption = self.caption)
+        GError(message=_('Writing new feature failed. '
+                         'Operation canceled.\n\n'
+                         'Reason: %s') % GetLastError(),
+               parent=self.parent,
+               caption=self.caption)
 
     def ReadLine(self, line):
         """Reading line failed
         """
-        GError(message = _('Reading feature id %d failed. '
-                           'Operation canceled.') % line,
-               parent  = self.parent,
-               caption = self.caption)
+        GError(message=_('Reading feature id %d failed. '
+                         'Operation canceled.') % line,
+               parent=self.parent,
+               caption=self.caption)
 
     def DbLink(self, dblink):
         """No dblink available
         """
-        GError(message = _('Database link %d not available. '
-                           'Operation canceled.') % dblink,
-               parent  = self.parent,
-               caption = self.caption)
+        GError(message=_('Database link %d not available. '
+                         'Operation canceled.') % dblink,
+               parent=self.parent,
+               caption=self.caption)
 
     def Driver(self, driver):
         """Staring driver failed
         """
-        GError(message = _('Unable to start database driver <%s>. '
-                           'Operation canceled.') % driver,
-               parent  = self.parent,
-               caption = self.caption)
+        GError(message=_('Unable to start database driver <%s>. '
+                         'Operation canceled.') % driver,
+               parent=self.parent,
+               caption=self.caption)
 
     def Database(self, driver, database):
         """Opening database failed
         """
-        GError(message = _('Unable to open database <%(db)s> by driver <%(driver)s>. '
-                           'Operation canceled.') % { 'db' : database, 'driver' : driver},
-               parent  = self.parent,
-               caption = self.caption)
+        GError(
+            message=_(
+                'Unable to open database <%(db)s> by driver <%(driver)s>. '
+                'Operation canceled.') %
+            {'db': database, 'driver': driver},
+            parent=self.parent, caption=self.caption)
 
     def DbExecute(self, sql):
         """Sql query failed
         """
-        GError(message = _("Unable to execute SQL query '%s'. "
-                           "Operation canceled.") % sql,
-               parent  = self.parent,
-               caption = self.caption)
+        GError(message=_("Unable to execute SQL query '%s'. "
+                         "Operation canceled.") % sql,
+               parent=self.parent,
+               caption=self.caption)
 
     def DeadLine(self, line):
         """Dead line
         """
-        GError(message = _("Feature id %d is marked as dead. "
-                           "Operation canceled.") % line,
-               parent  = self.parent,
-               caption = self.caption)
+        GError(message=_("Feature id %d is marked as dead. "
+                         "Operation canceled.") % line,
+               parent=self.parent,
+               caption=self.caption)
 
     def FeatureType(self, ftype):
         """Unknown feature type
         """
-        GError(message = _("Unsupported feature type %d. "
-                           "Operation canceled.") % ftype,
-               parent  = self.parent,
-               caption = self.caption)
-        
+        GError(message=_("Unsupported feature type %d. "
+                         "Operation canceled.") % ftype,
+               parent=self.parent,
+               caption=self.caption)
+
+
 class IVDigit:
-    def __init__(self, mapwindow, driver = DisplayDriver):
+
+    def __init__(self, mapwindow, driver=DisplayDriver):
         """Base class for vector digitizer (ctypes interface)
-        
+
         :param mapwindow: reference to a map window
         """
-        self.poMapInfo   = None      # pointer to Map_info
+        self.poMapInfo = None      # pointer to Map_info
         self.mapWindow = mapwindow
 
         # background map
-        self.bgMapInfo   = Map_info()
+        self.bgMapInfo = Map_info()
         self.poBgMapInfo = self.popoBgMapInfo = None
-        
+
         # TODO: replace this by using giface
         if not mapwindow.parent.IsStandalone():
             goutput = mapwindow.parent.GetLayerManager().GetLogWindow()
-            log = goutput.GetLog(err = True)
+            log = goutput.GetLog(err=True)
             progress = mapwindow.parent._giface.GetProgress()
         else:
             log = sys.stderr
             progress = None
-        
+
         self.toolbar = mapwindow.parent.toolbars['vdigit']
-        
-        self._error   = VDigitError(parent = self.mapWindow)
-        
-        self._display = driver(device    = mapwindow.pdcVector,
-                               deviceTmp = mapwindow.pdcTmp,
-                               mapObj    = mapwindow.Map,
-                               window    = mapwindow,
-                               glog      = log,
-                               gprogress = progress)
-        
+
+        self._error = VDigitError(parent=self.mapWindow)
+
+        self._display = driver(device=mapwindow.pdcVector,
+                               deviceTmp=mapwindow.pdcTmp,
+                               mapObj=mapwindow.Map,
+                               window=mapwindow,
+                               glog=log,
+                               gprogress=progress)
+
         # GRASS lib
         self.poPoints = Vect_new_line_struct()
-        self.poCats   = Vect_new_cats_struct()
-        
+        self.poCats = Vect_new_cats_struct()
+
         # self.SetCategory()
-        
+
         # layer / max category
         self.cats = dict()
-        
+
         self._settings = dict()
-        self.UpdateSettings() # -> self._settings
-        
+        self.UpdateSettings()  # -> self._settings
+
         # undo/redo
         self.changesets = list()
-        self.changesetCurrent = -1 # first changeset to apply
-        
+        self.changesetCurrent = -1  # first changeset to apply
+
         if self.poMapInfo:
             self.InitCats()
 
         self.emit_signals = False
 
-        # signals which describes features changes during digitization, 
-        # activate them using EmitSignals method 
+        # signals which describes features changes during digitization,
+        # activate them using EmitSignals method
+
+        # currently implemented for functionality used by wx.iclass (for
+        # scatter plot)
 
-        # currently implemented for functionality used by wx.iclass (for scatter plot)
-        
         # signals parameter description:
         # old_bboxs - list of bboxes of boundary features, which covers changed areas
         # it is bbox of old state (before edit)
@@ -197,13 +204,14 @@ class IVDigit:
         # new_areas_cats list of areas cats of created features / after edit
         # same position in both lists corresponds to same features
 
-        # for description of items in bbox and area_cats lists see return value of _getaAreaBboxCats
+        # for description of items in bbox and area_cats lists see return value
+        # of _getaAreaBboxCats
 
         # TODO currently it is not possible to identify corresponded features
         # in old and new lists (requires changed to vector updated format)
         # TODO return feature type
-        
-        #TODO handle errors?
+
+        # TODO handle errors?
         self.featureAdded = Signal('IVDigit.featureAdded')
         self.areasDeleted = Signal('IVDigit.areasDeleted')
         self.vertexMoved = Signal('IVDigit.vertexMoved')
@@ -219,12 +227,12 @@ class IVDigit:
         self.poPoints = None
         Vect_destroy_cats_struct(self.poCats)
         self.poCats = None
-        
+
         if self.poBgMapInfo:
             Vect_close(self.poBgMapInfo)
             self.poBgMapInfo = self.popoBgMapInfo = None
             del self.bgMapInfo
-     
+
     def EmitSignals(self, emit):
         """Activate/deactivate signals which describes features changes during digitization.
         """
@@ -234,94 +242,98 @@ class IVDigit:
         """Close background vector map"""
         if not self.poBgMapInfo:
             return
-        
+
         Vect_close(self.poBgMapInfo)
         self.poBgMapInfo = self.popoBgMapInfo = None
-        
+
     def OpenBackgroundMap(self, bgmap):
         """Open background vector map
 
         .. todo::
             support more background maps then only one
-        
+
         :param bgmap: name of vector map to be opened
         :type bgmap: str
 
         :return: pointer to map_info
         :return: None on error
         """
-        name   = create_string_buffer(GNAME_MAX)
+        name = create_string_buffer(GNAME_MAX)
         mapset = create_string_buffer(GMAPSET_MAX)
         if not G_name_is_fully_qualified(bgmap, name, mapset):
-            name   = str(bgmap)
+            name = str(bgmap)
             mapset = str(G_find_vector2(bgmap, ''))
         else:
-            name   = str(name.value)
+            name = str(name.value)
             mapset = str(mapset.value)
-        
-        if (name == Vect_get_name(self.poMapInfo) and \
+
+        if (name == Vect_get_name(self.poMapInfo) and
                 mapset == Vect_get_mapset(self.poMapInfo)):
             self.poBgMapInfo = self.popoBgMapInfo = None
             self._error.NoMap(bgmap)
             return
-        
+
         self.poBgMapInfo = pointer(self.bgMapInfo)
         self.popoBgMapInfo = pointer(self.poBgMapInfo)
         if Vect_open_old(self.poBgMapInfo, name, mapset) == -1:
             self.poBgMapInfo = self.popoBgMapInfo = None
             self._error.NoMap(bgmap)
             return
-        
+
     def _getSnapMode(self):
         """Get snapping mode
 
          - snap to vertex
          - snap to nodes
          - no snapping
-        
+
         :return: snap mode
         """
         threshold = self._display.GetThreshold()
         if threshold > 0.0:
-            if UserSettings.Get(group = 'vdigit', key = 'snapToVertex', subkey = 'enabled'):
+            if UserSettings.Get(
+                    group='vdigit', key='snapToVertex', subkey='enabled'):
                 return SNAPVERTEX
             else:
                 return SNAP
         else:
             return NO_SNAP
-    
+
     def _getNewFeaturesLayer(self):
         """Returns layer of new feature (from settings)"""
-        if UserSettings.Get(group = 'vdigit', key = "categoryMode", subkey = 'selection') == 2:
-            layer = -1 # -> no category
+        if UserSettings.Get(group='vdigit', key="categoryMode",
+                            subkey='selection') == 2:
+            layer = -1  # -> no category
         else:
-            layer = UserSettings.Get(group = 'vdigit', key = "layer", subkey = 'value')
-        
+            layer = UserSettings.Get(
+                group='vdigit', key="layer", subkey='value')
+
         return layer
-        
+
     def _getNewFeaturesCat(self):
         """Returns category of new feature (from settings)"""
-        if UserSettings.Get(group = 'vdigit', key = "categoryMode", subkey = 'selection') == 2:
-            cat   = -1
+        if UserSettings.Get(group='vdigit', key="categoryMode",
+                            subkey='selection') == 2:
+            cat = -1
         else:
-            cat   = self.SetCategory()
-        
+            cat = self.SetCategory()
+
         return cat
-        
+
     def _breakLineAtIntersection(self, line, pointsLine):
         """Break given line at intersection
 
         :param line: line id
         :param pointsLine: line geometry
-        
+
         :return: number of modified lines
         """
         if not self._checkMap():
             return -1
-        
+
         if not Vect_line_alive(self.poMapInfo, line):
             return 0
-        
+
         if not pointsLine:
             if Vect_read_line(self.poMapInfo, self.poPoints, None, line) < 0:
                 self._error.ReadLine(line)
@@ -329,19 +341,19 @@ class IVDigit:
             points = self.poPoints
         else:
             points = pointsLine
-        
-        listLine  = Vect_new_boxlist(0)
-        listRef   = Vect_new_list()
+
+        listLine = Vect_new_boxlist(0)
+        listRef = Vect_new_list()
         listBreak = Vect_new_list()
-    
+
         pointsCheck = Vect_new_line_struct()
-    
+
         lineBox = bound_box()
         # find all relevant lines
         Vect_get_line_box(self.poMapInfo, line, byref(lineBox))
         Vect_select_lines_by_box(self.poMapInfo, byref(lineBox),
                                  GV_LINES, listLine)
-    
+
         # check for intersection
         Vect_list_append(listBreak, line)
         Vect_list_append(listRef, line)
@@ -349,26 +361,27 @@ class IVDigit:
             lineBreak = listLine.contents.id[i]
             if lineBreak == line:
                 continue
-            
-            ltype = Vect_read_line(self.poMapInfo, pointsCheck, None, lineBreak)
+
+            ltype = Vect_read_line(
+                self.poMapInfo, pointsCheck, None, lineBreak)
             if not (ltype & GV_LINES):
                 continue
-            
+
             if Vect_line_check_intersection(self.poPoints, pointsCheck,
                                             WITHOUT_Z):
                 Vect_list_append(listBreak, lineBreak)
-        
+
         ret = Vect_break_lines_list(self.poMapInfo, listBreak, listRef,
                                     GV_LINES, None)
-        
+
         Vect_destroy_line_struct(pointsCheck)
 
         Vect_destroy_boxlist(listLine)
         Vect_destroy_list(listBreak)
         Vect_destroy_list(listRef)
-        
+
         return ret
-    
+
     def _addChangeset(self):
 
         # disable redo
@@ -381,17 +394,17 @@ class IVDigit:
         for i in range(Vect_get_num_updated_lines(self.poMapInfo) - 1, -1, -1):
             line = Vect_get_updated_line(self.poMapInfo, i)
             offset = Vect_get_updated_line_offset(self.poMapInfo, i)
-            data.append({ 'line'   : line,
-                          'offset' : offset })
-        
+            data.append({'line': line,
+                         'offset': offset})
+
         self.changesetCurrent += 1
         self.changesets.insert(self.changesetCurrent, data)
-        
+
         Vect_reset_updated(self.poMapInfo)
-                
+
     def _applyChangeset(self, changeset, undo):
         """Apply changeset (undo/redo changeset)
-        
+
         :param changeset: changeset id
         :param undo: True for undo otherwise redo
         :type undo: bool
@@ -402,10 +415,10 @@ class IVDigit:
         """
         if changeset < 0 or changeset >= len(self.changesets):
             return -1
-        
+
         ret = 0
         actions = self.changesets[changeset]
-        
+
         if undo:
             firstaction = 0
             lastaction = len(actions)
@@ -421,45 +434,57 @@ class IVDigit:
             if action['offset'] > 0:
                 # feature previously added -> to be deleted
                 if Vect_line_alive(self.poMapInfo, line):
-                    Debug.msg(3, "IVDigit._applyChangeset(): changeset=%d, action=add, line=%d -> deleted",
-                              changeset, line)
-                    
+                    Debug.msg(
+                        3,
+                        "IVDigit._applyChangeset(): changeset=%d, action=add, line=%d -> deleted",
+                        changeset,
+                        line)
+
                     Vect_delete_line(self.poMapInfo, line)
                     ret = 1
                 else:
-                    Debug.msg(3, "Digit.ApplyChangeset(): changeset=%d, action=add, line=%d dead",
-                              changeset, line)
+                    Debug.msg(
+                        3,
+                        "Digit.ApplyChangeset(): changeset=%d, action=add, line=%d dead",
+                        changeset,
+                        line)
             else:
                 # feature previously deleted -> to be added
                 offset = abs(action['offset'])
-                
+
                 if not Vect_line_alive(self.poMapInfo, line):
-                    Debug.msg(3, "Digit.ApplyChangeset(): changeset=%d, action=delete, line=%d -> added",
-                              changeset, line)
-                    
+                    Debug.msg(
+                        3,
+                        "Digit.ApplyChangeset(): changeset=%d, action=delete, line=%d -> added",
+                        changeset,
+                        line)
+
                     if Vect_restore_line(self.poMapInfo, offset, line) < 0:
                         return -1
                     ret = 1
                 else:
-                    Debug.msg(3, "Digit.ApplyChangeset(): changeset=%d, action=delete, line=%d alive",
-                              changeset, line)
+                    Debug.msg(
+                        3,
+                        "Digit.ApplyChangeset(): changeset=%d, action=delete, line=%d alive",
+                        changeset,
+                        line)
 
             action['offset'] *= -1
         Vect_reset_updated(self.poMapInfo)
-        
+
         return ret
-    
+
     def AddFeature(self, ftype, points):
         """Add new feature
-        
+
         :param ftype: feature type (point, line, centroid, boundary)
         :param points: tuple of points ((x, y), (x, y), ...)
-        
+
         :return: tuple (number of added features, feature ids)
         """
         layer = self._getNewFeaturesLayer()
         cat = self._getNewFeaturesCat()
-        
+
         if ftype == 'point':
             vtype = GV_POINT
         elif ftype == 'line':
@@ -471,22 +496,23 @@ class IVDigit:
         elif ftype == 'area':
             vtype = GV_AREA
         else:
-            GError(parent = self.mapWindow,
-                   message = _("Unknown feature type '%s'") % ftype)
+            GError(parent=self.mapWindow,
+                   message=_("Unknown feature type '%s'") % ftype)
             return (-1, None)
-        
+
         if vtype & GV_LINES and len(points) < 2:
-            GError(parent = self.mapWindow,
-                   message = _("Not enough points for line"))
+            GError(parent=self.mapWindow,
+                   message=_("Not enough points for line"))
             return (-1, None)
-        
+
         self.toolbar.EnableUndo()
 
-        ret = self._addFeature(vtype, points, layer, cat,
-                               self._getSnapMode(), self._display.GetThreshold())
+        ret = self._addFeature(
+            vtype, points, layer, cat, self._getSnapMode(),
+            self._display.GetThreshold())
         if ret[0] > -1 and self.emit_signals:
-            self.featureAdded.emit(new_bboxs=[self._createBbox(points)], 
-                                   new_areas_cats=[[{layer : [cat]}, None]])
+            self.featureAdded.emit(new_bboxs=[self._createBbox(points)],
+                                   new_areas_cats=[[{layer: [cat]}, None]])
 
         return ret
 
@@ -497,38 +523,41 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         # collect categories for deleting if requested
-        deleteRec = UserSettings.Get(group = 'vdigit', key = 'delRecord', subkey = 'enabled')
+        deleteRec = UserSettings.Get(
+            group='vdigit',
+            key='delRecord',
+            subkey='enabled')
         catDict = dict()
 
         old_bboxs = []
         old_areas_cats = []
         if deleteRec:
             for i in self._display.selected['ids']:
-                
+
                 if Vect_read_line(self.poMapInfo, None, self.poCats, i) < 0:
                     self._error.ReadLine(i)
-                
+
                 if self.emit_signals:
                     ret = self._getLineAreaBboxCats(i)
                     if ret:
                         old_bboxs += ret[0]
                         old_areas_cats += ret[1]
-                
+
                 # catDict was not used -> put into comment
                 #cats = self.poCats.contents
-                #for j in range(cats.n_cats):
+                # for j in range(cats.n_cats):
                 #    if cats.field[j] not in catDict.keys():
                 #        catDict[cats.field[j]] = list()
                 #    catDict[cats.field[j]].append(cats.cat[j])
-        
+
         poList = self._display.GetSelectedIList()
         nlines = Vedit_delete_lines(self.poMapInfo, poList)
-        
+
         Vect_destroy_list(poList)
         self._display.selected['ids'] = list()
-        
+
         if nlines > 0:
             if deleteRec:
                 self._deleteRecords(catDict)
@@ -536,97 +565,99 @@ class IVDigit:
             self.toolbar.EnableUndo()
 
             if self.emit_signals:
-                self.featuresDeleted.emit(old_bboxs=old_bboxs, 
+                self.featuresDeleted.emit(old_bboxs=old_bboxs,
                                           old_areas_cats=old_areas_cats)
 
         return nlines
-            
+
     def _deleteRecords(self, cats):
         """Delete records from attribute table
-        
+
         :param cats: directory field/list of cats
         """
-        handle   = dbHandle()
+        handle = dbHandle()
         poHandle = pointer(handle)
-        stmt     = dbString()
-        poStmt   = pointer(stmt)
-        
+        stmt = dbString()
+        poStmt = pointer(stmt)
+
         for dblink in range(Vect_get_num_dblinks(self.poMapInfo)):
             poFi = Vect_get_dblink(self.poMapInfo, dblink)
             if poFi is None:
                 self._error.DbLink(dblink)
                 return -1
-            
+
             Fi = poFi.contents
             if Fi.number not in cats.keys():
                 continue
-            
+
             poDriver = db_start_driver(Fi.driver)
             if poDriver is None:
                 self._error.Driver(Fi.driver)
                 return -1
-            
+
             db_init_handle(poHandle)
             db_set_handle(poHandle, Fi.database, None)
             if db_open_database(poDriver, poHandle) != DB_OK:
                 self._error.Database(Fi.driver, Fi.database)
                 return -1
-            
+
             db_init_string(poStmt)
             db_set_string(poStmt, "DELETE FROM %s WHERE" % Fi.table)
             n_cats = 0
             for cat in cats[Fi.number]:
                 if n_cats > 0:
                     db_append_string(poStmt, " or")
-                    
+
                 db_append_string(poStmt, " %s = %d" % (Fi.key, cat))
                 n_cats += 1
-            
+
             if n_cats > 0 and \
                     db_execute_immediate(poDriver, poStmt) != DB_OK:
                 self._error.DbExecute(db_get_string(poStmt))
                 return -1
-            
+
             db_close_database_shutdown_driver(poDriver)
-        
+
     def DeleteSelectedAreas(self):
         """Delete selected areas (centroid+boundaries)
 
-        :return: number of deleted 
+        :return: number of deleted
         """
         if len(self._display.selected['ids']) < 1:
             return 0
-        
+
         poList = self._display.GetSelectedIList()
-        cList  = poList.contents
-        
+        cList = poList.contents
+
         nareas = 0
         old_bboxs = []
         old_areas_cats = []
 
         for i in range(cList.n_values):
 
-            if Vect_get_line_type(self.poMapInfo, cList.value[i]) != GV_CENTROID:
+            if Vect_get_line_type(self.poMapInfo, cList.value[
+                                  i]) != GV_CENTROID:
                 continue
 
             if self.emit_signals:
-                area = Vect_get_centroid_area(self.poMapInfo, cList.value[i]);
-                if area > 0: 
+                area = Vect_get_centroid_area(self.poMapInfo, cList.value[i])
+                if area > 0:
                     bbox, cats = self._getaAreaBboxCats(area)
                     old_bboxs += bbox
                     old_areas_cats += cats
 
-            nareas += Vedit_delete_area_centroid(self.poMapInfo, cList.value[i])
-        
+            nareas += Vedit_delete_area_centroid(
+                self.poMapInfo, cList.value[i])
+
         if nareas > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
             if self.emit_signals:
-                self.areasDeleted.emit(old_bboxs=old_bboxs, 
-                                       old_areas_cats=old_areas_cats)        
+                self.areasDeleted.emit(old_bboxs=old_bboxs,
+                                       old_areas_cats=old_areas_cats)
 
         return nareas
-   
+
     def _getLineAreaBboxCats(self, ln_id):
         """Helper function
 
@@ -637,23 +668,24 @@ class IVDigit:
         ltype = Vect_read_line(self.poMapInfo, None, None, ln_id)
 
         if ltype == GV_CENTROID:
-            #TODO centroid opttimization, can be edited also its area -> it will appear two times in new_ lists
+            # TODO centroid opttimization, can be edited also its area -> it
+            # will appear two times in new_ lists
             return self._getCentroidAreaBboxCats(ln_id)
-        else: 
-            return [self._getBbox(ln_id)], [self._getLineAreasCategories(ln_id)]
-
+        else:
+            return [self._getBbox(ln_id)], [
+                self._getLineAreasCategories(ln_id)]
 
     def _getCentroidAreaBboxCats(self, centroid):
         """Helper function
 
-        :param centroid: id of an centroid 
+        :param centroid: id of an centroid
         :return: None if area does not exists
         :return: see return of :func:`_getaAreaBboxCats`
         """
         if not Vect_line_alive(self.poMapInfo, centroid):
             return None
 
-        area = Vect_get_centroid_area(self.poMapInfo, centroid)  
+        area = Vect_get_centroid_area(self.poMapInfo, centroid)
         if area > 0:
             return self._getaAreaBboxCats(area)
         else:
@@ -663,12 +695,12 @@ class IVDigit:
         """Helper function
 
         :param area: area id
-        :return: list of categories :func:`_getLineAreasCategories` and 
+        :return: list of categories :func:`_getLineAreasCategories` and
                  list of bboxes :func:`_getBbox` of area boundary
                  features
         """
         po_b_list = Vect_new_list()
-        Vect_get_area_boundaries(self.poMapInfo, area, po_b_list);
+        Vect_get_area_boundaries(self.poMapInfo, area, po_b_list)
         b_list = po_b_list.contents
 
         geoms = []
@@ -677,26 +709,26 @@ class IVDigit:
         if b_list.n_values > 0:
             for i_line in range(b_list.n_values):
 
-                line = b_list.value[i_line];
+                line = b_list.value[i_line]
 
                 geoms.append(self._getBbox(abs(line)))
                 areas_cats.append(self._getLineAreasCategories(abs(line)))
-        
-        Vect_destroy_list(po_b_list);
+
+        Vect_destroy_list(po_b_list)
 
         return geoms, areas_cats
 
     def _getLineAreasCategories(self, ln_id):
         """Helper function
 
-        :param line_id: id of boundary feature 
+        :param line_id: id of boundary feature
         :return: categories of areas on the left, right side of the feature
         :return: format: [[{layer : [cat]}, None]] means:
-                area to the left (list of layers which has cats list as values), 
-                area to the right (no area there in this case (None)) 
+                area to the left (list of layers which has cats list as values),
+                area to the right (no area there in this case (None))
         :return: [] the feature is not boundary or does not exists
         """
-        if not Vect_line_alive (self.poMapInfo, ln_id):
+        if not Vect_line_alive(self.poMapInfo, ln_id):
             return []
 
         ltype = Vect_read_line(self.poMapInfo, None, None, ln_id)
@@ -708,11 +740,13 @@ class IVDigit:
         left = c_int()
         right = c_int()
 
-        if Vect_get_line_areas(self.poMapInfo, ln_id, pointer(left), pointer(right)) == 1:
+        if Vect_get_line_areas(
+                self.poMapInfo, ln_id, pointer(left),
+                pointer(right)) == 1:
             areas = [left.value, right.value]
 
             for i, a in enumerate(areas):
-                if a > 0: 
+                if a > 0:
                     centroid = Vect_get_area_centroid(self.poMapInfo, a)
                     if centroid <= 0:
                         continue
@@ -729,7 +763,7 @@ class IVDigit:
         :return: list of the feature categories [{layer : cats}, next layer...]
         :return: None feature does not exist
         """
-        if not Vect_line_alive (self.poMapInfo, ln_id):
+        if not Vect_line_alive(self.poMapInfo, ln_id):
             return none
 
         poCats = Vect_new_cats_struct()
@@ -741,11 +775,11 @@ class IVDigit:
 
         cats = {}
         for j in range(cCats.n_cats):
-            if cats.has_key(cCats.field[j]):
+            if cCats.field[j] in cats:
                 cats[cCats.field[j]].append(cCats.cat[j])
             else:
                 cats[cCats.field[j]] = [cCats.cat[j]]
-    
+
         Vect_destroy_cats_struct(poCats)
         return cats
 
@@ -756,7 +790,7 @@ class IVDigit:
         :return: bbox bounding box of the feature
         :return: None feature does not exist
         """
-        if not Vect_line_alive (self.poMapInfo, ln_id):
+        if not Vect_line_alive(self.poMapInfo, ln_id):
             return None
 
         poPoints = Vect_new_line_struct()
@@ -777,19 +811,19 @@ class IVDigit:
         """
         bbox = {}
         for pt in points:
-            if not bbox.has_key('maxy'):
+            if 'maxy' not in bbox:
                 bbox['maxy'] = pt[1]
                 bbox['miny'] = pt[1]
                 bbox['maxx'] = pt[0]
                 bbox['minx'] = pt[0]
                 continue
-                
-            if   bbox['maxy'] < pt[1]:
+
+            if bbox['maxy'] < pt[1]:
                 bbox['maxy'] = pt[1]
             elif bbox['miny'] > pt[1]:
                 bbox['miny'] = pt[1]
-                
-            if   bbox['maxx'] < pt[0]:
+
+            if bbox['maxx'] < pt[0]:
                 bbox['maxx'] = pt[0]
             elif bbox['minx'] > pt[0]:
                 bbox['minx'] = pt[0]
@@ -799,7 +833,7 @@ class IVDigit:
         """Helper function convert geom from ctypes line_pts to python
         list
 
-        :return: coords in python list [(x, y),...] 
+        :return: coords in python list [(x, y),...]
         """
         Points = poPoints.contents
 
@@ -816,14 +850,14 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         nsel = len(self._display.selected['ids'])
         if nsel < 1:
-            return -1   
-        
+            return -1
+
         thresh = self._display.GetThreshold()
-        snap   = self._getSnapMode()
-        
+        snap = self._getSnapMode()
+
         poList = self._display.GetSelectedIList()
 
         if self.emit_signals:
@@ -834,14 +868,16 @@ class IVDigit:
                 if ret:
                     old_bboxs += ret[0]
                     old_areas_cats += ret[1]
-        
+
             Vect_set_updated(self.poMapInfo, 1)
             n_up_lines_old = Vect_get_num_updated_lines(self.poMapInfo)
-        
-        nlines = Vedit_move_lines(self.poMapInfo, self.popoBgMapInfo, int(self.poBgMapInfo is not None),
-                                  poList,
-                                  move[0], move[1], 0,
-                                  snap, thresh)
+
+        nlines = Vedit_move_lines(
+            self.poMapInfo, self.popoBgMapInfo,
+            int(self.poBgMapInfo is not None),
+            poList, move[0],
+            move[1],
+            0, snap, thresh)
 
         Vect_destroy_list(poList)
 
@@ -859,15 +895,15 @@ class IVDigit:
         if nlines > 0 and self._settings['breakLines']:
             for i in range(1, nlines):
                 self._breakLineAtIntersection(nlines + i, None, changeset)
-        
+
         if nlines > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-            
+
             if self.emit_signals:
                 self.featuresMoved.emit(new_bboxs=new_bboxs,
-                                        old_bboxs=old_bboxs, 
-                                        old_areas_cats=old_areas_cats, 
+                                        old_bboxs=old_bboxs,
+                                        old_areas_cats=old_areas_cats,
                                         new_areas_cats=new_areas_cats)
 
         return nlines
@@ -877,18 +913,18 @@ class IVDigit:
 
         :param point: location point
         :param move:  x,y direction
-        
+
         :return: id of new feature
         :return: 0 vertex not moved (not found, line is not selected)
         :return: -1 on error
         """
         if not self._checkMap():
             return -1
-        
+
         if len(self._display.selected['ids']) != 1:
             return -1
 
-        # move only first found vertex in bbox 
+        # move only first found vertex in bbox
         poList = self._display.GetSelectedIList()
 
         if self.emit_signals:
@@ -902,12 +938,15 @@ class IVDigit:
         Vect_reset_line(self.poPoints)
         Vect_append_point(self.poPoints, point[0], point[1], 0.0)
 
-        moved = Vedit_move_vertex(self.poMapInfo, self.popoBgMapInfo, int(self.poBgMapInfo is not None),
-                                  poList, self.poPoints,
-                                  self._display.GetThreshold(type = 'selectThresh'),
-                                  self._display.GetThreshold(),
-                                  move[0], move[1], 0.0,
-                                  1, self._getSnapMode())
+        moved = Vedit_move_vertex(
+            self.poMapInfo, self.popoBgMapInfo,
+            int(self.poBgMapInfo is not None),
+            poList, self.poPoints, self._display.GetThreshold(
+                type='selectThresh'),
+            self._display.GetThreshold(),
+            move[0],
+            move[1],
+            0.0, 1, self._getSnapMode())
         Vect_destroy_list(poList)
 
         if moved > 0 and self.emit_signals:
@@ -923,15 +962,15 @@ class IVDigit:
         if moved > 0 and self._settings['breakLines']:
             self._breakLineAtIntersection(Vect_get_num_lines(self.poMapInfo),
                                           None)
-        
+
         if moved > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
 
             if self.emit_signals:
-                self.vertexMoved.emit(new_bboxs=new_bboxs,  
-                                      new_areas_cats=new_areas_cats, 
-                                      old_areas_cats=old_areas_cats, 
+                self.vertexMoved.emit(new_bboxs=new_bboxs,
+                                      new_areas_cats=new_areas_cats,
+                                      old_areas_cats=old_areas_cats,
                                       old_bboxs=old_bboxs)
 
         return moved
@@ -945,8 +984,8 @@ class IVDigit:
         :return: 0 nothing changed
         :return: -1 on failure
         """
-        added = self._ModifyLineVertex(coords, add = True)
-        
+        added = self._ModifyLineVertex(coords, add=True)
+
         if added > 0:
             self.toolbar.EnableUndo()
 
@@ -961,19 +1000,18 @@ class IVDigit:
         :return: 0 nothing changed
         :return: -1 on failure
         """
-        deleted = self._ModifyLineVertex(coords, add = False)
-        
+        deleted = self._ModifyLineVertex(coords, add=False)
+
         if deleted > 0:
             self.toolbar.EnableUndo()
 
         return deleted
 
-
     def SplitLine(self, point):
         """Split/break selected line/boundary on given position
 
         :param point: point where to split line
-        
+
         :return: 1 line modified
         :return: 0 nothing changed
         :return: -1 error
@@ -981,19 +1019,19 @@ class IVDigit:
         thresh = self._display.GetThreshold('selectThresh')
         if not self._checkMap():
             return -1
-        
-        poList  = self._display.GetSelectedIList()
+
+        poList = self._display.GetSelectedIList()
         Vect_reset_line(self.poPoints)
         Vect_append_point(self.poPoints, point[0], point[1], 0.0)
-        
+
         ret = Vedit_split_lines(self.poMapInfo, poList,
                                 self.poPoints, thresh, None)
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
 
     def EditLine(self, line, coords):
@@ -1007,21 +1045,21 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         if len(coords) < 2:
             self.DeleteSelectedLines()
             return 0
-        
+
         if not Vect_line_alive(self.poMapInfo, line):
             self._error.DeadLine(line)
             return -1
-        
+
         # read original feature
         ltype = Vect_read_line(self.poMapInfo, None, self.poCats, line)
         if ltype < 0:
             self._error.ReadLine(line)
             return -1
-        
+
         if self.emit_signals:
             old_bboxs = [self._getBbox(line)]
             old_areas_cats = [self._getLineAreasCategories(line)]
@@ -1037,25 +1075,25 @@ class IVDigit:
             modeSnap = not (snap == SNAP)
             Vedit_snap_line(self.poMapInfo, self.popoBgMapInfo,
                             int(self.poBgMapInfo is not None),
-                           -1, self.poPoints, self._display.GetThreshold(), modeSnap)
-        
+                            -1, self.poPoints, self._display.GetThreshold(), modeSnap)
+
         newline = Vect_rewrite_line(self.poMapInfo, line, ltype,
                                     self.poPoints, self.poCats)
         if newline > 0 and self.emit_signals:
             new_geom = [self._getBbox(newline)]
             new_areas_cats = [self._getLineAreasCategories(newline)]
-        
+
         if newline > 0 and self._settings['breakLines']:
             self._breakLineAtIntersection(newline, None)
-        
+
         if newline > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-    
+
             if self.emit_signals:
-                self.lineEdited.emit(old_bboxs=old_bboxs, 
-                                     old_areas_cats=old_areas_cats, 
-                                     new_bboxs=new_bboxs, 
+                self.lineEdited.emit(old_bboxs=old_bboxs,
+                                     old_areas_cats=old_areas_cats,
+                                     new_bboxs=new_bboxs,
                                      new_areas_cats=new_areas_cats)
 
         return newline
@@ -1068,17 +1106,17 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         nlines = Vect_get_num_lines(self.poMapInfo)
-        
+
         poList = self._display.GetSelectedIList()
         ret = Vedit_flip_lines(self.poMapInfo, poList)
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
 
     def MergeLine(self):
@@ -1089,15 +1127,15 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         poList = self._display.GetSelectedIList()
         ret = Vedit_merge_lines(self.poMapInfo, poList)
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
 
     def BreakLine(self):
@@ -1108,16 +1146,16 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         poList = self._display.GetSelectedIList()
         ret = Vect_break_lines_list(self.poMapInfo, poList, None,
                                     GV_LINES, None)
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
 
     def SnapLine(self):
@@ -1128,17 +1166,17 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         nlines = Vect_get_num_lines(self.poMapInfo)
         poList = self._display.GetSelectedIList()
         Vect_snap_lines_list(self.poMapInfo, poList,
                              self._display.GetThreshold(), None)
         Vect_destroy_list(poList)
-        
+
         if nlines < Vect_get_num_lines(self.poMapInfo):
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
     def ConnectLine(self):
         """Connect selected lines/boundaries
 
@@ -1148,19 +1186,19 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         poList = self._display.GetSelectedIList()
         ret = Vedit_connect_lines(self.poMapInfo, poList,
                                   self._display.GetThreshold())
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
-        
-    def CopyLine(self, ids = []):
+
+    def CopyLine(self, ids=[]):
         """Copy features from (background) vector map
 
         :param ids: list of line ids to be copied
@@ -1170,25 +1208,25 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         nlines = Vect_get_num_lines(self.poMapInfo)
-        
+
         poList = self._display.GetSelectedIList(ids)
         ret = Vedit_copy_lines(self.poMapInfo, self.poBgMapInfo,
                                poList)
         Vect_destroy_list(poList)
-        
+
         if ret > 0 and self.poBgMapInfo and self._settings['breakLines']:
             for i in range(1, ret):
                 self._breakLineAtIntersection(nlines + i, None)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
 
-    def CopyCats(self, fromId, toId, copyAttrb = False):
+    def CopyCats(self, fromId, toId, copyAttrb=False):
         """Copy given categories to objects with id listed in ids
 
         :param cats: ids of 'from' feature
@@ -1199,29 +1237,30 @@ class IVDigit:
         """
         if len(fromId) < 1 or len(toId) < 1:
             return 0
-        
+
         poCatsFrom = self.poCats
-        poCatsTo = Vect_new_cats_struct();
-        
+        poCatsTo = Vect_new_cats_struct()
+
         nlines = 0
-        
+
         for fline in fromId:
             if not Vect_line_alive(self.poMapInfo, fline):
                 continue
-            
+
             if Vect_read_line(self.poMapInfo, None, poCatsFrom, fline) < 0:
                 self._error.ReadLine(fline)
                 return -1
-            
+
             for tline in toId:
                 if not Vect_line_alive(self.poMapInfo, tline):
                     continue
-                
-                ltype = Vect_read_line(self.poMapInfo, self.poPoints, poCatsTo, tline)
+
+                ltype = Vect_read_line(
+                    self.poMapInfo, self.poPoints, poCatsTo, tline)
                 if ltype < 0:
                     self._error.ReadLine(fline)
                     return -1
-                
+
                 catsFrom = poCatsFrom.contents
                 for i in range(catsFrom.n_cats):
                     if not copyAttrb:
@@ -1231,17 +1270,18 @@ class IVDigit:
                         # duplicate attributes
                         cat = self.cats[catsFrom.field[i]] + 1
                         self.cats[catsFrom.field[i]] = cat
-                        poFi = Vect_get_field(self.poMapInfo, catsFrom.field[i])
+                        poFi = Vect_get_field(
+                            self.poMapInfo, catsFrom.field[i])
                         if not poFi:
                             self._error.DbLink(i)
                             return -1
-                        
+
                         fi = poFi.contents
                         driver = db_start_driver(fi.driver)
                         if not driver:
                             self._error.Driver(fi.driver)
                             return -1
-                        
+
                         handle = dbHandle()
                         db_init_handle(byref(handle))
                         db_set_handle(byref(handle), fi.database, None)
@@ -1249,146 +1289,159 @@ class IVDigit:
                             db_shutdown_driver(driver)
                             self._error.Database(fi.driver, fi.database)
                             return -1
-                        
+
                         stmt = dbString()
                         db_init_string(byref(stmt))
-                        db_set_string(byref(stmt),
-                                      "SELECT * FROM %s WHERE %s=%d" % (fi.table, fi.key,
-                                                                        catsFrom.cat[i]))
-                        
+                        db_set_string(
+                            byref(stmt), "SELECT * FROM %s WHERE %s=%d" %
+                            (fi.table, fi.key, catsFrom.cat[i]))
+
                         cursor = dbCursor()
-                        if db_open_select_cursor(driver, byref(stmt), byref(cursor),
-                                                 DB_SEQUENTIAL) != DB_OK:
-                                db_close_database_shutdown_driver(driver)
-                                return -1
-                        
+                        if db_open_select_cursor(
+                                driver, byref(stmt),
+                                byref(cursor),
+                                DB_SEQUENTIAL) != DB_OK:
+                            db_close_database_shutdown_driver(driver)
+                            return -1
+
                         table = db_get_cursor_table(byref(cursor))
                         ncols = db_get_table_number_of_columns(table)
-                        
+
                         sql = "INSERT INTO %s VALUES (" % fi.table
                         # fetch the data
                         more = c_int()
                         while True:
-                            if db_fetch(byref(cursor), DB_NEXT, byref(more)) != DB_OK:
+                            if db_fetch(byref(cursor), DB_NEXT,
+                                        byref(more)) != DB_OK:
                                 db_close_database_shutdown_driver(driver)
                                 return -1
                             if not more.value:
                                 break
-                            
+
                             value_string = dbString()
                             for col in range(ncols):
                                 if col > 0:
                                     sql += ","
-                                    
+
                                 column = db_get_table_column(table, col)
                                 if db_get_column_name(column) == fi.key:
                                     sql += "%d" % cat
                                     continue
-                                
+
                                 value = db_get_column_value(column)
-                                db_convert_column_value_to_string(column, byref(value_string))
+                                db_convert_column_value_to_string(
+                                    column, byref(value_string))
                                 if db_test_value_isnull(value):
                                     sql += "NULL"
                                 else:
-                                    ctype = db_sqltype_to_Ctype(db_get_column_sqltype(column))
+                                    ctype = db_sqltype_to_Ctype(
+                                        db_get_column_sqltype(column))
                                     if ctype != DB_C_TYPE_STRING:
                                         sql += db_get_string(byref(value_string))
                                     else:
-                                        sql += "'%s'" % db_get_string(byref(value_string))
-                        
+                                        sql += "'%s'" % db_get_string(
+                                            byref(value_string))
+
                         sql += ")"
                         db_set_string(byref(stmt), sql)
                         if db_execute_immediate(driver, byref(stmt)) != DB_OK:
                             db_close_database_shutdown_driver(driver)
                             return -1
-                        
+
                         db_close_database_shutdown_driver(driver)
                         G_free(poFi)
-                
+
                 if Vect_cat_set(poCatsTo, catsFrom.field[i], cat) < 1:
                     continue
-                
-                if Vect_rewrite_line(self.poMapInfo, tline, ltype, self.poPoints, poCatsTo) < 0:
+
+                if Vect_rewrite_line(self.poMapInfo, tline,
+                                     ltype, self.poPoints, poCatsTo) < 0:
                     self._error.WriteLine()
                     return -1
-                
-                nlines +=1
-        
+
+                nlines += 1
+
         Vect_destroy_cats_struct(poCatsTo)
-        
+
         if nlines > 0:
             self.toolbar.EnableUndo()
-        
+
         return nlines
 
     def _selectLinesByQueryThresh(self):
         """Generic method used for SelectLinesByQuery() -- to get
         threshold value"""
         thresh = 0.0
-        if UserSettings.Get(group = 'vdigit', key = 'query', subkey = 'selection') == 0:
-            thresh = UserSettings.Get(group = 'vdigit', key = 'queryLength', subkey = 'thresh')
-            if UserSettings.Get(group = 'vdigit', key = "queryLength", subkey = 'than-selection') == 0:
+        if UserSettings.Get(group='vdigit', key='query',
+                            subkey='selection') == 0:
+            thresh = UserSettings.Get(
+                group='vdigit', key='queryLength', subkey='thresh')
+            if UserSettings.Get(group='vdigit', key="queryLength",
+                                subkey='than-selection') == 0:
                 thresh = -1 * thresh
         else:
-            thresh = UserSettings.Get(group = 'vdigit', key = 'queryDangle', subkey = 'thresh')
-            if UserSettings.Get(group = 'vdigit', key = "queryDangle", subkey = 'than-selection') == 0:
+            thresh = UserSettings.Get(
+                group='vdigit', key='queryDangle', subkey='thresh')
+            if UserSettings.Get(group='vdigit', key="queryDangle",
+                                subkey='than-selection') == 0:
                 thresh = -1 * thresh
-        
+
         return thresh
 
     def SelectLinesByQuery(self, bbox):
         """Select features by query
-        
+
         .. todo::
             layer / 3D
-        
+
         :param bbox: bounding box definition
         """
         if not self._checkMap():
             return -1
-        
+
         thresh = self._selectLinesByQueryThresh()
-        
+
         query = QUERY_UNKNOWN
-        if UserSettings.Get(group = 'vdigit', key = 'query', subkey = 'selection') == 0:
+        if UserSettings.Get(group='vdigit', key='query',
+                            subkey='selection') == 0:
             query = QUERY_LENGTH
         else:
             query = QUERY_DANGLE
-        
-        ftype = GV_POINTS | GV_LINES # TODO: 3D
-        layer = 1 # TODO
-        
+
+        ftype = GV_POINTS | GV_LINES  # TODO: 3D
+        layer = 1  # TODO
+
         ids = list()
         poList = Vect_new_list()
         coList = poList.contents
-        if UserSettings.Get(group = 'vdigit', key = 'query', subkey = 'box'):
+        if UserSettings.Get(group='vdigit', key='query', subkey='box'):
             Vect_reset_line(self.poPoints)
             x1, y1 = bbox[0]
             x2, y2 = bbox[1]
             z1 = z2 = 0.0
-            
+
             Vect_append_point(self.poPoints, x1, y1, z1)
             Vect_append_point(self.poPoints, x2, y1, z2)
             Vect_append_point(self.poPoints, x2, y2, z1)
             Vect_append_point(self.poPoints, x1, y2, z2)
             Vect_append_point(self.poPoints, x1, y1, z1)
 
-            Vect_select_lines_by_polygon(self.poMapInfo, self.poPoints, 0, None,
-                                         ftype, poList)
-            
+            Vect_select_lines_by_polygon(
+                self.poMapInfo, self.poPoints, 0, None, ftype, poList)
+
             if coList.n_values == 0:
                 return ids
-        
+
         Vedit_select_by_query(self.poMapInfo,
                               ftype, layer, thresh, query,
                               poList)
-        
+
         for i in range(coList.n_values):
             ids.append(int(coList.value[i]))
-            
-        Debug.msg(3, "IVDigit.SelectLinesByQuery(): lines=%d", coList.n_values)    
+
+        Debug.msg(3, "IVDigit.SelectLinesByQuery(): lines=%d", coList.n_values)
         Vect_destroy_list(poList)
-        
+
         return ids
 
     def IsVector3D(self):
@@ -1396,9 +1449,9 @@ class IVDigit:
         """
         if not self._checkMap():
             return False
-        
+
         return Vect_is_3d(self.poMapInfo)
-    
+
     def GetLineLength(self, line):
         """Get line length
 
@@ -1409,19 +1462,19 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         if not Vect_line_alive(self.poMapInfo, line):
             return -1
-    
+
         ltype = Vect_read_line(self.poMapInfo, self.poPoints, None, line)
         if ltype < 0:
             self._error.ReadLine(line)
             return ret
-        
+
         length = -1
-        if ltype & GV_LINES: # lines & boundaries
+        if ltype & GV_LINES:  # lines & boundaries
             length = Vect_line_length(self.poPoints)
-        
+
         return length
 
     def GetAreaSize(self, centroid):
@@ -1434,56 +1487,56 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         ltype = Vect_read_line(self.poMapInfo, None, None, centroid)
         if ltype < 0:
             self._error.ReadLine(line)
             return ret
-        
+
         if ltype != GV_CENTROID:
             return -1
-        
+
         area = Vect_get_centroid_area(self.poMapInfo, centroid)
         size = -1
         if area > 0:
             if not Vect_area_alive(self.poMapInfo, area):
                 return size
-            
+
             size = Vect_get_area_area(self.poMapInfo, area)
-        
+
         return size
-        
+
     def GetAreaPerimeter(self, centroid):
         """Get area perimeter
-        
+
         :param centroid: centroid id
-        
+
         :return: area size
         :return: -1 on error
         """
         if not self._checkMap():
             return -1
-        
+
         ltype = Vect_read_line(self.poMapInfo, None, None, centroid)
         if ltype < 0:
             self._error.ReadLine(line)
             return ret
-        
+
         if ltype != GV_CENTROID:
             return -1
-        
+
         area = Vect_get_centroid_area(self.poMapInfo, centroid)
         perimeter = -1
         if area > 0:
             if not Vect_area_alive(self.poMapInfo, area):
                 return -1
-            
+
             Vect_get_area_points(self.poMapInfo, area, self.poPoints)
             perimeter = Vect_area_perimeter(self.poPoints)
-        
+
         return perimeter
-    
-    def SetLineCats(self, line, layer, cats, add = True):
+
+    def SetLineCats(self, line, layer, cats, add=True):
         """Set categories for given line and layer
 
         :param line: feature id
@@ -1496,10 +1549,10 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         if line < 1 and len(self._display.selected['ids']) < 1:
             return -1
-        
+
         update = False
         if line == -1:
             update = True
@@ -1507,29 +1560,33 @@ class IVDigit:
 
         if not Vect_line_alive(self.poMapInfo, line):
             return -1
-        
-        ltype = Vect_read_line(self.poMapInfo, self.poPoints, self.poCats, line)
+
+        ltype = Vect_read_line(
+            self.poMapInfo,
+            self.poPoints,
+            self.poCats,
+            line)
         if ltype < 0:
             self._error.ReadLine(line)
             return -1
-        
+
         for c in cats:
             if add:
                 Vect_cat_set(self.poCats, layer, c)
             else:
                 Vect_field_cat_del(self.poCats, layer, c)
-        
+
         newline = Vect_rewrite_line(self.poMapInfo, line, ltype,
                                     self.poPoints, self.poCats)
-        
+
         if newline > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         if update:
             # update line id since the line was rewritten
-            self._display.selected['ids'][0] =  newline
-        
+            self._display.selected['ids'][0] = newline
+
         return newline
 
     def TypeConvForSelectedLines(self):
@@ -1544,18 +1601,18 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         poList = self._display.GetSelectedIList()
         ret = Vedit_chtype_lines(self.poMapInfo, poList)
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
 
-    def Undo(self, level = -1):
+    def Undo(self, level=-1):
         """Undo action
 
         :param level: levels to undo (0 to revert all)
@@ -1563,47 +1620,53 @@ class IVDigit:
         :return: id of current changeset
         """
         changesetLast = len(self.changesets) - 1
-        
+
         if changesetLast < 0:
             return changesetLast
-        
+
         if level < 0 and self.changesetCurrent > changesetLast:
             self.changesetCurrent = changesetLast
         elif level == 0:
             # 0 -> undo all
             level = -1 * self.changesetCurrent - 1
-        
-        Debug.msg(2, "Digit.Undo(): changeset_last=%d, changeset_current=%d, level=%d",
-                  changesetLast, self.changesetCurrent, level)
-        
-        if level < 0: # undo
+
+        Debug.msg(
+            2,
+            "Digit.Undo(): changeset_last=%d, changeset_current=%d, level=%d",
+            changesetLast,
+            self.changesetCurrent,
+            level)
+
+        if level < 0:  # undo
             if self.changesetCurrent + level < -1:
                 return self.changesetCurrent
-            for changeset in range(self.changesetCurrent, self.changesetCurrent + level, -1):
-                self._applyChangeset(changeset, undo = True)
-        elif level > 0: # redo 
+            for changeset in range(self.changesetCurrent,
+                                   self.changesetCurrent + level, -1):
+                self._applyChangeset(changeset, undo=True)
+        elif level > 0:  # redo
             if self.changesetCurrent + 1 > changesetLast:
                 return self.changesetCurrent
-            for changeset in range(self.changesetCurrent + 1, self.changesetCurrent + 1 + level):
-                self._applyChangeset(changeset, undo = False)
-        
+            for changeset in range(self.changesetCurrent + 1,
+                                   self.changesetCurrent + 1 + level):
+                self._applyChangeset(changeset, undo=False)
+
         self.changesetCurrent += level
-        
+
         Debug.msg(2, "Digit.Undo(): changeset_current=%d, changeset_last=%d",
                   self.changesetCurrent, changesetLast)
-        
-        self.mapWindow.UpdateMap(render = False)
-        
-        if self.changesetCurrent < 0: # disable undo tool
+
+        self.mapWindow.UpdateMap(render=False)
+
+        if self.changesetCurrent < 0:  # disable undo tool
             self.toolbar.EnableUndo(False)
         else:
             self.toolbar.EnableUndo(True)
-        
+
         if self.changesetCurrent < changesetLast:
             self.toolbar.EnableRedo(True)
         else:
             self.toolbar.EnableRedo(False)
-        
+
     def ZBulkLines(self, pos1, pos2, start, step):
         """Z-bulk labeling
 
@@ -1617,50 +1680,51 @@ class IVDigit:
         """
         if not self._checkMap():
             return -1
-        
+
         poList = self._display.GetSelectedIList()
         ret = Vedit_bulk_labeling(self.poMapInfo, poList,
                                   pos1[0], pos1[1], pos2[0], pos2[1],
                                   start, step)
         Vect_destroy_list(poList)
-        
+
         if ret > 0:
             self._addChangeset()
             self.toolbar.EnableUndo()
-        
+
         return ret
-    
+
     def GetDisplay(self):
         """Get display driver instance"""
         return self._display
-    
-    def OpenMap(self, name, update=True, tmp = False):
+
+    def OpenMap(self, name, update=True, tmp=False):
         """Open vector map for editing
-        
+
         :param map: name of vector map to be set up
         :type map: str
         :param tmp: True to open temporary vector map
         """
-        Debug.msg (3, "AbstractDigit.SetMapName map=%s" % name)
+        Debug.msg(3, "AbstractDigit.SetMapName map=%s" % name)
 
         if '@' in name:
             name, mapset = name.split('@')
         else:
             mapset = grass.gisenv()['MAPSET']
-        
-        self.poMapInfo = self._display.OpenMap(str(name), str(mapset), update, tmp)
-        
+
+        self.poMapInfo = self._display.OpenMap(
+            str(name), str(mapset), update, tmp)
+
         if self.poMapInfo:
             self.InitCats()
-        
+
         return self.poMapInfo
-    
+
     def CloseMap(self):
         """Close currently open vector map
         """
         if not self._checkMap():
             return
-        
+
         # print extra line before building message
         sys.stdout.write(os.linesep)
         # build topology, close map
@@ -1668,24 +1732,24 @@ class IVDigit:
 
     def InitCats(self):
         """Initialize categories information
-        
+
         :return: 0 on success
         :return: -1 on error
         """
         self.cats.clear()
         if not self._checkMap():
             return -1
-        
+
         ndblinks = Vect_get_num_dblinks(self.poMapInfo)
         for i in range(ndblinks):
             fi = Vect_get_dblink(self.poMapInfo, i).contents
             if fi:
                 self.cats[fi.number] = None
-        
+
         # find max category
         nfields = Vect_cidx_get_num_fields(self.poMapInfo)
         Debug.msg(2, "wxDigit.InitCats(): nfields=%d", nfields)
-        
+
         for i in range(nfields):
             field = Vect_cidx_get_field_number(self.poMapInfo, i)
             ncats = Vect_cidx_get_num_cats_by_index(self.poMapInfo, i)
@@ -1702,21 +1766,29 @@ class IVDigit:
                         self.cats[field] = cat.value
                 else:
                     self.cats[field] = cat.value
-            Debug.msg(3, "wxDigit.InitCats(): layer=%d, cat=%d", field, self.cats[field])
-            
+            Debug.msg(
+                3,
+                "wxDigit.InitCats(): layer=%d, cat=%d",
+                field,
+                self.cats[field])
+
         # set default values
         for field, cat in self.cats.iteritems():
-            if cat == None:
-                self.cats[field] = 0 # first category 1
-            Debug.msg(3, "wxDigit.InitCats(): layer=%d, cat=%d", field, self.cats[field])
-        
+            if cat is None:
+                self.cats[field] = 0  # first category 1
+            Debug.msg(
+                3,
+                "wxDigit.InitCats(): layer=%d, cat=%d",
+                field,
+                self.cats[field])
+
     def _checkMap(self):
         """Check if map is open
         """
         if not self.poMapInfo:
             self._error.NoMap()
             return False
-        
+
         return True
 
     def _addFeature(self, ftype, coords, layer, cat, snap, threshold):
@@ -1728,116 +1800,132 @@ class IVDigit:
         :param cat: category number
         :param snap: snap to node/vertex
         :param threshold: threshold for snapping
-        
+
         :return: tuple (number of added features, list of fids)
         :return: number of features -1 on error
         """
         fids = list()
         if not self._checkMap():
             return (-1, None)
-        
+
         is3D = bool(Vect_is_3d(self.poMapInfo))
-        
-        Debug.msg(2, "IVDigit._addFeature(): npoints=%d, layer=%d, cat=%d, snap=%d",
-                  len(coords), layer, cat, snap)
-        
-        if not (ftype & (GV_POINTS | GV_LINES | GV_AREA)): # TODO: 3D
+
+        Debug.msg(
+            2,
+            "IVDigit._addFeature(): npoints=%d, layer=%d, cat=%d, snap=%d",
+            len(coords),
+            layer,
+            cat,
+            snap)
+
+        if not (ftype & (GV_POINTS | GV_LINES | GV_AREA)):  # TODO: 3D
             self._error.FeatureType(ftype)
             return (-1, None)
-        
+
         # set category
         Vect_reset_cats(self.poCats)
         if layer > 0 and ftype != GV_AREA:
             Vect_cat_set(self.poCats, layer, cat)
             self.cats[layer] = max(cat, self.cats.get(layer, 1))
-        
+
         # append points
         Vect_reset_line(self.poPoints)
         for c in coords:
             Vect_append_point(self.poPoints, c[0], c[1], 0.0)
-        
+
         if ftype & (GV_BOUNDARY | GV_AREA):
             # close boundary
             points = self.poPoints.contents
             last = points.n_points - 1
             if self._settings['closeBoundary']:
-                Vect_append_point(self.poPoints, points.x[0], points.y[0], points.z[0])
+                Vect_append_point(
+                    self.poPoints, points.x[0],
+                    points.y[0],
+                    points.z[0])
             elif Vect_points_distance(points.x[0], points.y[0], points.z[0],
                                       points.x[last], points.y[last], points.z[last],
                                       is3D) <= threshold:
                 points.x[last] = points.x[0]
                 points.y[last] = points.y[0]
                 points.z[last] = points.z[0]
-        
+
         if snap != NO_SNAP:
             # apply snapping (node or vertex)
             modeSnap = not (snap == SNAP)
-            Vedit_snap_line(self.poMapInfo, self.popoBgMapInfo, int(self.poBgMapInfo is not None),
-                            -1, self.poPoints, threshold, modeSnap)
-        
+            Vedit_snap_line(self.poMapInfo, self.popoBgMapInfo, int(
+                self.poBgMapInfo is not None), -1, self.poPoints, threshold, modeSnap)
+
         if ftype == GV_AREA:
             ltype = GV_BOUNDARY
         else:
             ltype = ftype
-        newline = Vect_write_line(self.poMapInfo, ltype, self.poPoints, self.poCats)
+        newline = Vect_write_line(
+            self.poMapInfo,
+            ltype,
+            self.poPoints,
+            self.poCats)
         if newline < 0:
             self._error.WriteLine()
             return (-1, None)
 
         fids.append(newline)
-        
+
         # add centroids for left/right area
         if ftype & GV_AREA:
             left = right = -1
             bpoints = Vect_new_line_struct()
             cleft = c_int()
             cright = c_int()
-            
+
             Vect_get_line_areas(self.poMapInfo, newline,
                                 byref(cleft), byref(cright))
             left = cleft.value
             right = cright.value
-            
+
             Debug.msg(3, "IVDigit._addFeature(): area - left=%d right=%d",
                       left, right)
-            
+
             # check if area exists and has no centroid inside
             if layer > 0 and (left > 0 or right > 0):
                 Vect_cat_set(self.poCats, layer, cat)
                 self.cats[layer] = max(cat, self.cats.get(layer, 0))
-            
+
             x = c_double()
             y = c_double()
             if left > 0 and \
                     Vect_get_area_centroid(self.poMapInfo, left) == 0:
                 # if Vect_get_area_points(self.poMapInfo, left, bpoints) > 0 and
                 # Vect_find_poly_centroid(bpoints, byref(x), byref(y)) == 0:
-                if Vect_get_point_in_area(self.poMapInfo, left, byref(x), byref(y)) == 0:
+                if Vect_get_point_in_area(
+                        self.poMapInfo, left, byref(x),
+                        byref(y)) == 0:
                     Vect_reset_line(bpoints)
                     Vect_append_point(bpoints, x.value, y.value, 0.0)
                     newc = Vect_write_line(self.poMapInfo, GV_CENTROID,
-                                              bpoints, self.poCats)
+                                           bpoints, self.poCats)
                     if newc < 0:
                         self._error.WriteLine()
                         return (len(fids), fids)
                     else:
                         fids.append(newc)
-                    
+
             if right > 0 and \
                     Vect_get_area_centroid(self.poMapInfo, right) == 0:
-                # if Vect_get_area_points(byref(self.poMapInfo), right, bpoints) > 0 and 
+                # if Vect_get_area_points(byref(self.poMapInfo), right, bpoints) > 0 and
                 # Vect_find_poly_centroid(bpoints, byref(x), byref(y)) == 0:
-                if Vect_get_point_in_area(self.poMapInfo, right, byref(x), byref(y)) == 0:
+                if Vect_get_point_in_area(
+                        self.poMapInfo, right, byref(x),
+                        byref(y)) == 0:
                     Vect_reset_line(bpoints)
                     Vect_append_point(bpoints, x.value, y.value, 0.0)
-                    newc =  Vect_write_line(self.poMapInfo, GV_CENTROID,
-                                               bpoints, self.poCats)
+                    newc = Vect_write_line(self.poMapInfo, GV_CENTROID,
+                                           bpoints, self.poCats)
                     if newc < 0:
                         self._error.WriteLine()
                         return (len(fids, fids))
                     else:
                         fids.append(newc)
-                    
+
             Vect_destroy_line_struct(bpoints)
 
         # break line or boundary at intersection
@@ -1845,38 +1933,38 @@ class IVDigit:
             self._breakLineAtIntersection(newline, self.poPoints)
 
         self._addChangeset()
-        
+
         if ftype & GV_AREA:
             # len(fids) == 1 -> no new area
-            return (len(fids)-1, fids)
-        
+            return (len(fids) - 1, fids)
+
         return (len(fids), fids)
-    
-    def _ModifyLineVertex(self, coords, add = True):
+
+    def _ModifyLineVertex(self, coords, add=True):
         """Add or remove vertex
-        
+
         Shape of line/boundary is not changed when adding new vertex.
-        
+
         :param coords: coordinates of point
         :param add: True to add, False to remove
         :type add: bool
-        
+
         :return: 1 on success
         :return: 0 nothing changed
         :return: -1 error
         """
         if not self._checkMap():
             return -1
-        
+
         selected = self._display.selected
         if len(selected['ids']) != 1:
             return 0
-        
-        poList  = self._display.GetSelectedIList()
+
+        poList = self._display.GetSelectedIList()
 
         if self.emit_signals:
             cList = poList.contents
-            
+
             old_bboxs = [self._getBbox(cList.value[0])]
             old_areas_cats = [self._getLineAreasCategories(cList.value[0])]
 
@@ -1885,9 +1973,9 @@ class IVDigit:
 
         Vect_reset_line(self.poPoints)
         Vect_append_point(self.poPoints, coords[0], coords[1], 0.0)
-        
-        thresh = self._display.GetThreshold(type = 'selectThresh')
-        
+
+        thresh = self._display.GetThreshold(type='selectThresh')
+
         if add:
             ret = Vedit_add_vertex(self.poMapInfo, poList,
                                    self.poPoints, thresh)
@@ -1906,7 +1994,7 @@ class IVDigit:
                 new_id = Vect_get_updated_line(self.poMapInfo, i)
                 new_areas_cats.append(self._getLineAreasCategories(new_id))
                 new_bboxs.append(self._getBbox(new_id))
-        
+
         if not add and ret > 0 and self._settings['breakLines']:
             self._breakLineAtIntersection(Vect_get_num_lines(self.poMapInfo),
                                           None)
@@ -1918,13 +2006,13 @@ class IVDigit:
             if add:
                 self.vertexAdded.emit(old_bboxs=old_bboxs, new_bboxs=new_bboxs)
             else:
-                self.vertexRemoved.emit(old_bboxs=old_bboxs, 
+                self.vertexRemoved.emit(old_bboxs=old_bboxs,
                                         new_bboxs=new_bboxs,
                                         old_areas_cats=old_areas_cats,
                                         new_areas_cats=new_areas_cats)
 
         return 1
-    
+
     def GetLineCats(self, line):
         """Get list of layer/category(ies) for selected feature.
 
@@ -1935,64 +2023,77 @@ class IVDigit:
         ret = dict()
         if not self._checkMap():
             return ret
-        
+
         if line == -1 and len(self._display.selected['ids']) < 1:
             return ret
-        
+
         if line == -1:
             line = self._display.selected['ids'][0]
-            
+
         if not Vect_line_alive(self.poMapInfo, line):
             self._error.DeadLine(line)
             return ret
-        
+
         if Vect_read_line(self.poMapInfo, None, self.poCats, line) < 0:
             self._error.ReadLine(line)
             return ret
-        
+
         cats = self.poCats.contents
         for i in range(cats.n_cats):
             field = cats.field[i]
             if field not in ret:
                 ret[field] = list()
             ret[field].append(cats.cat[i])
-        
+
         return ret
 
     def GetLayers(self):
         """Get list of layers
-        
+
         Requires self.InitCats() to be called.
 
         :return: list of layers
         """
         return self.cats.keys()
-    
+
     def UpdateSettings(self):
         """Update digit (and display) settings
         """
         self._display.UpdateSettings()
-        
-        self._settings['breakLines']   = bool(UserSettings.Get(group = 'vdigit', key = "breakLines",
-                                                              subkey = 'enabled'))
-        self._settings['closeBoundary'] = bool(UserSettings.Get(group = 'vdigit', key = "closeBoundary",
-                                                                subkey = 'enabled'))
-        
+
+        self._settings['breakLines'] = bool(
+            UserSettings.Get(
+                group='vdigit',
+                key="breakLines",
+                subkey='enabled'))
+        self._settings['closeBoundary'] = bool(
+            UserSettings.Get(
+                group='vdigit',
+                key="closeBoundary",
+                subkey='enabled'))
+
     def SetCategory(self):
         """Update self.cats based on settings"""
-        sel = UserSettings.Get(group = 'vdigit', key = 'categoryMode', subkey = 'selection')
+        sel = UserSettings.Get(
+            group='vdigit',
+            key='categoryMode',
+            subkey='selection')
         cat = None
-        if sel == 0: # next to usep
+        if sel == 0:  # next to usep
             cat = self._setCategoryNextToUse()
         elif sel == 1:
-            cat = UserSettings.Get(group = 'vdigit', key = 'category', subkey = 'value')
-        
+            cat = UserSettings.Get(
+                group='vdigit',
+                key='category',
+                subkey='value')
+
         if cat:
-            layer = UserSettings.Get(group = 'vdigit', key = 'layer', subkey = 'value')
+            layer = UserSettings.Get(
+                group='vdigit', key='layer', subkey='value')
             self.cats[layer] = cat
-        
+
         return cat
-    
+
     def _setCategoryNextToUse(self):
         """Find maximum category number for the given layer and
         update the settings
@@ -2000,43 +2101,45 @@ class IVDigit:
         :return: category to be used
         """
         # get max category number for given layer and update the settings
-        layer = UserSettings.Get(group = 'vdigit', key = 'layer', subkey = 'value')
+        layer = UserSettings.Get(group='vdigit', key='layer', subkey='value')
         cat = self.cats.get(layer, 0) + 1
-        UserSettings.Set(group = 'vdigit', key = 'category', subkey = 'value',
-                         value = cat)
+        UserSettings.Set(group='vdigit', key='category', subkey='value',
+                         value=cat)
         Debug.msg(1, "IVDigit._setCategoryNextToUse(): cat=%d", cat)
-        
+
         return cat
 
     def SelectLinesFromBackgroundMap(self, bbox):
         """Select features from background map
 
         :param bbox: bounding box definition
-        
+
         :return: list of selected feature ids
         """
         # try select features by box first
-        if self._display.SelectLinesByBox(bbox, poMapInfo = self.poBgMapInfo) < 1:
-            self._display.SelectLineByPoint(bbox[0], poMapInfo = self.poBgMapInfo)['line']
-            
+        if self._display.SelectLinesByBox(
+                bbox, poMapInfo=self.poBgMapInfo) < 1:
+            self._display.SelectLineByPoint(
+                bbox[0], poMapInfo=self.poBgMapInfo)['line']
+
         return self._display.selected['ids']
-        
+
     def GetUndoLevel(self):
         """Get undo level (number of active changesets)
-        
+
         Note: Changesets starts wiht 0
         """
         return self.changesetCurrent
-    
+
     def GetFeatureType(self):
         """Get feature type for OGR layers
 
         :return: feature type as string (point, linestring, polygon)
         :return: None for native format
         """
-        topoFormat = Vect_get_finfo_topology_info(self.poMapInfo, None, None, None)
+        topoFormat = Vect_get_finfo_topology_info(
+            self.poMapInfo, None, None, None)
         if topoFormat == GV_TOPO_PSEUDO:
             return Vect_get_finfo_geometry_type(self.poMapInfo)
-        
+
         return ''
-        
diff --git a/gui/wxpython/vdigit/wxdisplay.py b/gui/wxpython/vdigit/wxdisplay.py
index 6ac40c2..209e1fb 100644
--- a/gui/wxpython/vdigit/wxdisplay.py
+++ b/gui/wxpython/vdigit/wxdisplay.py
@@ -9,7 +9,7 @@ Code based on wxVdigit C++ component from GRASS 6.4.0
 List of classes:
  - wxdisplay::DisplayDriver
 
-(C) 2007-2011 by the GRASS Development Team
+(C) 2007-2016 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -21,21 +21,22 @@ import locale
 
 import wx
 
-from core.debug    import Debug
+from core.debug import Debug
 from core.settings import UserSettings
 from core.utils import _
 
 try:
-    from grass.lib.gis    import *
+    from grass.lib.gis import *
     from grass.lib.vector import *
-    from grass.lib.vedit  import *
+    from grass.lib.vedit import *
 except ImportError:
     pass
 
-log       = None
-progress  = None
+log = None
+progress = None
 last_error = ''
 
+
 def print_error(msg, type):
     """Redirect stderr"""
     global log
@@ -48,24 +49,26 @@ def print_error(msg, type):
 
     return 0
 
+
 def print_progress(value):
     """Redirect progress info"""
     global progress
     if progress:
         progress.SetValue(value)
     else:
-        pass # discard progress info
-    
+        pass  # discard progress info
+
     return 0
 
+
 def GetLastError():
     global last_error
     ret = last_error
     if ret[-1] != '.':
         ret += '.'
-    
-    last_error = '' # reset
-    
+
+    last_error = ''  # reset
+
     return ret
 
 try:
@@ -75,11 +78,13 @@ try:
     perfunc = pertype(print_progress)
 except NameError:
     pass
-    
+
+
 class DisplayDriver:
+
     def __init__(self, device, deviceTmp, mapObj, window, glog, gprogress):
         """Display driver used by vector digitizer
-        
+
         :param device: wx.PseudoDC device where to draw vector objects
         :param deviceTmp: wx.PseudoDC device where to draw temporary vector objects
         :param mapOng: Map Object (render.Map)
@@ -90,89 +95,89 @@ class DisplayDriver:
         global errfunc, perfunc, log, progress
         log = glog
         progress = gprogress
-        
+
         G_gisinit('wxvdigit')
         locale.setlocale(locale.LC_NUMERIC, 'C')
-        G_set_error_routine(errfunc) 
+        G_set_error_routine(errfunc)
         G_set_percent_routine(perfunc)
         # G_set_fatal_error(FATAL_RETURN)
-        
-        self.mapInfo   = None     # open vector map (Map_Info structure)
+
+        self.mapInfo = None     # open vector map (Map_Info structure)
         self.poMapInfo = None     # pointer to self.mapInfo
-        self.is3D      = False    # is open vector map 3D
-        
-        self.dc      = device     # PseudoDC devices
-        self.dcTmp   = deviceTmp
-        self.mapObj  = mapObj
-        self.region  = mapObj.GetCurrentRegion()
-        self.window  = window
-        self.log     = log        # log device
+        self.is3D = False    # is open vector map 3D
+
+        self.dc = device     # PseudoDC devices
+        self.dcTmp = deviceTmp
+        self.mapObj = mapObj
+        self.region = mapObj.GetCurrentRegion()
+        self.window = window
+        self.log = log        # log device
 
         self.firstNode = True     # track PseudoDC Id of selected features
         self.lastNodeId = -1
-        
+
         # GRASS lib
         self.poPoints = Vect_new_line_struct()
-        self.poCats   = Vect_new_cats_struct()
-        
+        self.poCats = Vect_new_cats_struct()
+
         # selected objects
         self.selected = {
-            'field'   : -1,      # field number
-            'cats'    : list(),  # list of cats
-            'ids'     : list(),  # list of ids
-            'idsDupl' : list(),  # list of duplicated features
-            }
-        
+            'field': -1,      # field number
+            'cats': list(),  # list of cats
+            'ids': list(),  # list of ids
+            'idsDupl': list(),  # list of duplicated features
+        }
+
         # digitizer settings
         self.settings = {
-            'highlight'     : None,
-            'highlightDupl' : { 'enabled' : False,
-                                'color'   : None },
-            'point'         : { 'enabled' : False,
-                                'color'   : None },
-            'line'          : { 'enabled' : False,
-                                'color'   : None },
-            'boundaryNo'    : { 'enabled' : False,
-                                'color'   : None },
-            'boundaryOne'   : { 'enabled' : False,
-                                'color'   : None },
-            'boundaryTwo'   : { 'enabled' : False,
-                                'color'   : None },
-            'centroidIn'    : { 'enabled' : False,
-                                'color'   : None },
-            'centroidOut'   : { 'enabled' : False,
-                                'color'   : None },
-            'centroidDup'   : { 'enabled' : False,
-                                'color'   : None },
-            'nodeOne'       : { 'enabled' : False,
-                                'color'   : None },
-            'nodeTwo'       : { 'enabled' : False,
-                                'color'   : None },
-            'vertex'        : { 'enabled' : False,
-                                'color'   : None },
-            'area'          : { 'enabled' : False,
-                                'color'   : None },
-            'direction'     : { 'enabled' : False,
-                                'color'   : None },
-            'lineWidth'     : -1,    # screen units 
-            }
-        
+            'highlight': None,
+            'highlightDupl': {'enabled': False,
+                              'color': None},
+            'point': {'enabled': False,
+                      'color': None},
+            'line': {'enabled': False,
+                     'color': None},
+            'boundaryNo': {'enabled': False,
+                           'color': None},
+            'boundaryOne': {'enabled': False,
+                            'color': None},
+            'boundaryTwo': {'enabled': False,
+                            'color': None},
+            'centroidIn': {'enabled': False,
+                           'color': None},
+            'centroidOut': {'enabled': False,
+                            'color': None},
+            'centroidDup': {'enabled': False,
+                            'color': None},
+            'nodeOne': {'enabled': False,
+                        'color': None},
+            'nodeTwo': {'enabled': False,
+                        'color': None},
+            'vertex': {'enabled': False,
+                       'color': None},
+            'area': {'enabled': False,
+                     'color': None},
+            'direction': {'enabled': False,
+                          'color': None},
+            'lineWidth': -1,    # screen units
+        }
+
         # topology
         self._resetTopology()
-        
+
         self._drawSelected = False
         self._drawSegments = False
-        
+
         self.UpdateSettings()
-        
+
     def __del__(self):
         """Close currently open vector map"""
         G_unset_error_routine()
         G_unset_percent_routine()
-        
+
         if self.poMapInfo:
             self.CloseMap()
-        
+
         Vect_destroy_line_struct(self.poPoints)
         Vect_destroy_cats_struct(self.poCats)
 
@@ -180,24 +185,24 @@ class DisplayDriver:
         """Reset topology dict
         """
         self.topology = {
-            'highlight'   : 0,
-            'point'       : 0,
-            'line'        : 0,
-            'boundaryNo'  : 0,
-            'boundaryOne' : 0,
-            'boundaryTwo' : 0,
-            'centroidIn'  : 0,
-            'centroidOut' : 0,
-            'centroidDup' : 0,
-            'nodeOne'     : 0,
-            'nodeTwo'     : 0,
-            'vertex'      : 0,
-            }
-        
+            'highlight': 0,
+            'point': 0,
+            'line': 0,
+            'boundaryNo': 0,
+            'boundaryOne': 0,
+            'boundaryTwo': 0,
+            'centroidIn': 0,
+            'centroidOut': 0,
+            'centroidDup': 0,
+            'nodeOne': 0,
+            'nodeTwo': 0,
+            'vertex': 0,
+        }
+
     def _cell2Pixel(self, east, north, elev):
         """Conversion from geographic coordinates (east, north)
         to screen (x, y)
-  
+
         .. todo::
             3D stuff...
 
@@ -208,64 +213,76 @@ class DisplayDriver:
         :return: x, y screen coordinates (integer)
         """
         map_res = max(self.region['ewres'], self.region['nsres'])
-        w = self.region['center_easting']  - (self.mapObj.width  / 2) * map_res
+        w = self.region['center_easting'] - (self.mapObj.width / 2) * map_res
         n = self.region['center_northing'] + (self.mapObj.height / 2) * map_res
-        
+
         return int((east - w) / map_res), int((n - north) / map_res)
-    
-    def _drawCross(self, pdc, point, size = 5):
+
+    def _drawCross(self, pdc, point, size=5):
         """Draw cross symbol of given size to device content
-   
+
         Used for points, nodes, vertices
 
         :param pdc: PseudoDC where to draw
         :param point: coordinates of center
         :param size: size of the cross symbol
-   
+
         :return: 0 on success
         :return: -1 on failure
         """
         if not pdc or not point:
             return -1
-        
+
         pdc.DrawLine(point.x - size, point.y, point.x + size, point.y)
         pdc.DrawLine(point.x, point.y - size, point.x, point.y + size)
-        
+
         return 0
-    
+
     def _drawObject(self, robj):
         """Draw given object to the device
-        
+
         The object is defined as robject() from vedit.h.
-        
+
         :param robj: object to be rendered
-        
+
         :return:  1 on success
         :return: -1 on failure (vector feature marked as dead, etc.)
         """
         if not self.dc or not self.dcTmp:
             return -1
-        
-        Debug.msg(3, "_drawObject(): line=%d type=%d npoints=%d", robj.fid, robj.type, robj.npoints)
+
+        Debug.msg(
+            4,
+            "_drawObject(): line=%d type=%d npoints=%d",
+            robj.fid,
+            robj.type,
+            robj.npoints)
         brush = None
-        if robj.type == TYPE_AREA and \
-                self._isSelected(Vect_get_area_centroid(self.poMapInfo, robj.fid)):
+        if robj.type == TYPE_AREA and self._isSelected(
+                Vect_get_area_centroid(self.poMapInfo, robj.fid)):
             pdc = self.dcTmp
 
             pen = wx.TRANSPARENT_PEN
             brush = wx.TRANSPARENT_BRUSH
-            
+
             dcId = 1
             self.topology['highlight'] += 1
             if not self._drawSelected:
                 return
         elif robj.type != TYPE_AREA and self._isSelected(robj.fid):
             pdc = self.dcTmp
-            if self.settings['highlightDupl']['enabled'] and self._isDuplicated(robj.fid):
-                pen = wx.Pen(self.settings['highlightDupl']['color'], self.settings['lineWidth'], wx.SOLID)
-            else:            
-                pen = wx.Pen(self.settings['highlight'], self.settings['lineWidth'], wx.SOLID)
-                    
+            if self.settings['highlightDupl'][
+                    'enabled'] and self._isDuplicated(robj.fid):
+                pen = wx.Pen(
+                    self.settings['highlightDupl']['color'],
+                    self.settings['lineWidth'],
+                    wx.SOLID)
+            else:
+                pen = wx.Pen(
+                    self.settings['highlight'],
+                    self.settings['lineWidth'],
+                    wx.SOLID)
+
             dcId = 1
             self.topology['highlight'] += 1
             if not self._drawSelected:
@@ -275,23 +292,24 @@ class DisplayDriver:
             pen, brush = self._definePen(robj.type)
 
             dcId = 0
-        
-        pdc.SetPen(pen)        
+
+        pdc.SetPen(pen)
         if brush:
             pdc.SetBrush(brush)
-        
-        if robj.type & (TYPE_POINT | TYPE_CENTROIDIN | TYPE_CENTROIDOUT | TYPE_CENTROIDDUP |
-                        TYPE_NODEONE | TYPE_NODETWO | TYPE_VERTEX): # -> point
+
+        if robj.type & (
+                TYPE_POINT | TYPE_CENTROIDIN | TYPE_CENTROIDOUT | TYPE_CENTROIDDUP |
+                TYPE_NODEONE | TYPE_NODETWO | TYPE_VERTEX):  # -> point
             if dcId > 0:
                 if robj.type == TYPE_VERTEX:
-                    dcId = 3 # first vertex
+                    dcId = 3  # first vertex
                 elif robj.type & (TYPE_NODEONE | TYPE_NODETWO):
                     if self.firstNode:
                         dcId = 1
                         self.firstNode = False
                     else:
                         dcId = self.lastNodeId
-            
+
             for i in range(robj.npoints):
                 p = robj.point[i]
                 if dcId > 0:
@@ -302,36 +320,53 @@ class DisplayDriver:
             if dcId > 0 and self._drawSegments:
                 self.fisrtNode = True
                 self.lastNodeId = robj.npoints * 2 - 1
-                dcId = 2 # first segment
+                dcId = 2  # first segment
                 i = 0
                 while i < robj.npoints - 1:
                     point_beg = wx.Point(robj.point[i].x, robj.point[i].y)
-                    point_end = wx.Point(robj.point[i+1].x, robj.point[i+1].y)
-                    pdc.SetId(dcId) # set unique id & set bbox for each segment
+                    point_end = wx.Point(
+                        robj.point[
+                            i + 1].x,
+                        robj.point[
+                            i + 1].y)
+                    # set unique id & set bbox for each segment
+                    pdc.SetId(dcId)
                     pdc.SetPen(pen)
-                    pdc.SetIdBounds(dcId - 1, wx.Rect(point_beg.x, point_beg.y, 0, 0))
+                    pdc.SetIdBounds(
+                        dcId - 1,
+                        wx.Rect(
+                            point_beg.x,
+                            point_beg.y,
+                            0,
+                            0))
                     pdc.SetIdBounds(dcId, wx.RectPP(point_beg, point_end))
                     pdc.DrawLine(point_beg.x, point_beg.y,
                                  point_end.x, point_end.y)
-                    i    += 1
+                    i += 1
                     dcId += 2
-                pdc.SetIdBounds(dcId - 1, wx.Rect(robj.point[robj.npoints - 1].x,
-                                                  robj.point[robj.npoints - 1].y,
-                                                  0, 0))
+                pdc.SetIdBounds(
+                    dcId - 1,
+                    wx.Rect(
+                        robj.point[
+                            robj.npoints - 1].x,
+                        robj.point[
+                            robj.npoints - 1].y,
+                        0,
+                        0))
             else:
                 points = list()
                 for i in range(robj.npoints):
                     p = robj.point[i]
                     points.append(wx.Point(p.x, p.y))
-                    
+
                 if robj.type == TYPE_AREA:
                     pdc.DrawPolygon(points)
                 else:
                     pdc.DrawLines(points)
-        
+
     def _definePen(self, rtype):
         """Define pen/brush based on rendered object)
-        
+
         Updates also self.topology dict
 
         :return: pen, brush
@@ -359,15 +394,15 @@ class DisplayDriver:
         elif rtype == TYPE_VERTEX:
             key = 'vertex'
         elif rtype == TYPE_AREA:
-            key = 'area' 
+            key = 'area'
         elif rtype == TYPE_ISLE:
             key = 'isle'
         elif rtype == TYPE_DIRECTION:
             key = 'direction'
-        
+
         if key not in ('direction', 'area', 'isle'):
             self.topology[key] += 1
-        
+
         if key in ('area', 'isle'):
             pen = wx.TRANSPARENT_PEN
             if key == 'area':
@@ -375,16 +410,19 @@ class DisplayDriver:
             else:
                 brush = wx.TRANSPARENT_BRUSH
         else:
-            pen = wx.Pen(self.settings[key]['color'], self.settings['lineWidth'], wx.SOLID)
+            pen = wx.Pen(
+                self.settings[key]['color'],
+                self.settings['lineWidth'],
+                wx.SOLID)
             brush = None
-        
+
         return pen, brush
-        
+
     def _getDrawFlag(self):
         """Get draw flag from the settings
-        
+
         See vedit.h for list of draw flags.
-        
+
         :return: draw flag (int)
         """
         ret = 0
@@ -414,12 +452,12 @@ class DisplayDriver:
             ret |= DRAW_AREA
         if self.settings['direction']['enabled']:
             ret |= DRAW_DIRECTION
-        
+
         return ret
-        
-    def _isSelected(self, line, force = False):
+
+    def _isSelected(self, line, force=False):
         """Check if vector object selected?
-   
+
         :param line: feature id
 
         :return: True if vector object is selected
@@ -427,85 +465,89 @@ class DisplayDriver:
         """
         if line in self.selected['ids']:
             return True
-        
+
         return False
 
     def _isDuplicated(self, line):
         """Check for already marked duplicates
-        
+
         :param line: feature id
 
         :return: True line already marked as duplicated
         :return: False not duplicated
         """
         return line in self.selected['idsDupl']
-    
+
     def _getRegionBox(self):
         """Get bound_box() from current region
 
         :return: bound_box
         """
         box = bound_box()
-        
+
         box.N = self.region['n']
         box.S = self.region['s']
         box.E = self.region['e']
         box.W = self.region['w']
         box.T = PORT_DOUBLE_MAX
         box.B = -PORT_DOUBLE_MAX
-        
+
         return box
 
-    def DrawMap(self, force = False):
+    def DrawMap(self, force=False):
         """Draw content of the vector map to the device
-        
+
         :param force: force drawing
         :type force: bool
         :return: number of drawn features
         :return: -1 on error
         """
         Debug.msg(1, "DisplayDriver.DrawMap(): force=%d", force)
-        
+
         if not self.poMapInfo or not self.dc or not self.dcTmp:
             return -1
-        
-        rlist = Vedit_render_map(self.poMapInfo, byref(self._getRegionBox()), self._getDrawFlag(),
-                                 self.region['center_easting'], self.region['center_northing'],
-                                 self.mapObj.width, self.mapObj.height,
-                                 max(self.region['nsres'], self.region['ewres'])).contents
-        
+
+        rlist = Vedit_render_map(
+            self.poMapInfo, byref(self._getRegionBox()),
+            self._getDrawFlag(),
+            self.region['center_easting'],
+            self.region['center_northing'],
+            self.mapObj.width, self.mapObj.height,
+            max(self.region['nsres'],
+                self.region['ewres'])).contents
+
         self._resetTopology()
-        
+
         self.dc.BeginDrawing()
         self.dcTmp.BeginDrawing()
-        
+
         # draw objects
         for i in range(rlist.nitems):
             robj = rlist.item[i].contents
             self._drawObject(robj)
-        
+
         self.dc.EndDrawing()
         self.dcTmp.EndDrawing()
-        
-        # reset list of selected features by cat 
+
+        # reset list of selected features by cat
         # list of ids - see IsSelected()
         self.selected['field'] = -1
         self.selected['cats'] = list()
-        
+
     def _getSelectType(self):
         """Get type(s) to be selected
 
         Used by SelectLinesByBox() and SelectLineByPoint()
         """
         ftype = 0
-        for feature in (('point',    GV_POINT),
-                        ('line',     GV_LINE),
+        for feature in (('point', GV_POINT),
+                        ('line', GV_LINE),
                         ('centroid', GV_CENTROID),
                         ('boundary', GV_BOUNDARY)):
-            if UserSettings.Get(group = 'vdigit', key = 'selectType',
-                                subkey = [feature[0], 'enabled']):
+            if UserSettings.Get(group='vdigit', key='selectType',
+                                subkey=[feature[0], 'enabled']):
                 ftype |= feature[1]
-        
+
         return ftype
 
     def _validLine(self, line):
@@ -518,15 +560,16 @@ class DisplayDriver:
         """
         if line > 0 and line <= Vect_get_num_lines(self.poMapInfo):
             return True
-        
+
         return False
-    
-    def SelectLinesByBox(self, bbox, ltype = None, drawSeg = False, poMapInfo = None):
+
+    def SelectLinesByBox(self, bbox, ltype=None,
+                         drawSeg=False, poMapInfo=None):
         """Select vector objects by given bounding box
-        
+
         If line id is already in the list of selected lines, then it will
         be excluded from this list.
-        
+
         :param bbox: bounding box definition
         :param ltype: feature type or None for default
         :param drawSeg: True to draw segments of line
@@ -538,17 +581,17 @@ class DisplayDriver:
         thisMapInfo = poMapInfo is None
         if not poMapInfo:
             poMapInfo = self.poMapInfo
-        
+
         if not poMapInfo:
             return None
-        
+
         if thisMapInfo:
             self._drawSegments = drawSeg
             self._drawSelected = True
-        
+
             # select by ids
             self.selected['cats'] = list()
-        
+
         poList = Vect_new_list()
         x1, y1 = bbox[0]
         x2, y2 = bbox[1]
@@ -558,20 +601,20 @@ class DisplayDriver:
         Vect_append_point(poBbox, x2, y2, 0.0)
         Vect_append_point(poBbox, x1, y2, 0.0)
         Vect_append_point(poBbox, x1, y1, 0.0)
-        
+
         if not ltype:
             ltype = self._getSelectType()
         Vect_select_lines_by_polygon(poMapInfo, poBbox,
-                                     0, None, # isles
+                                     0, None,  # isles
                                      ltype, poList)
-        
+
         flist = poList.contents
         nlines = flist.n_values
         Debug.msg(1, "DisplayDriver.SelectLinesByBox() num = %d", nlines)
         for i in range(nlines):
             line = flist.value[i]
-            if UserSettings.Get(group = 'vdigit', key = 'selectInside',
-                                subkey = 'enabled'):
+            if UserSettings.Get(group='vdigit', key='selectInside',
+                                subkey='enabled'):
                 inside = True
                 if not self._validLine(line):
                     return None
@@ -582,52 +625,55 @@ class DisplayDriver:
                                               poBbox):
                         inside = False
                         break
-                    
+
                 if not inside:
-                    continue # skip lines just overlapping bbox
-            
+                    continue  # skip lines just overlapping bbox
+
             if not self._isSelected(line):
                 self.selected['ids'].append(line)
             else:
                 self.selected['ids'].remove(line)
-        
+
         Vect_destroy_line_struct(poBbox)
         Vect_destroy_list(poList)
-        
+
         return nlines
 
-    def SelectAreaByPoint(self, point, poMapInfo = None):
+    def SelectAreaByPoint(self, point, poMapInfo=None):
         thisMapInfo = poMapInfo is None
         if not poMapInfo:
             poMapInfo = self.poMapInfo
-        
+
         if not poMapInfo:
-            return { 'area' : -1, 'centroid': -1 }
-        
+            return {'area': -1, 'centroid': -1}
+
         if thisMapInfo:
             self._drawSelected = True
 
         box = bound_box()
-        for area in range(1, Vect_get_num_areas(poMapInfo)+1):
+        for area in range(1, Vect_get_num_areas(poMapInfo) + 1):
             Vect_get_area_box(poMapInfo, area, byref(box))
-            if Vect_point_in_area(point[0], point[1], poMapInfo, area, byref(box)) == 1:
+            if Vect_point_in_area(
+                    point[0],
+                    point[1],
+                    poMapInfo, area, byref(box)) == 1:
                 centroid = Vect_get_area_centroid(poMapInfo, area)
                 if not self._isSelected(centroid):
                     self.selected['ids'].append(centroid)
                 else:
                     self.selected['ids'].remove(centroid)
-                
-                return { 'area' : area, 'centroid' : centroid}
-        
-        return { 'area' : -1, 'centroid': -1 }
-            
-    def SelectLineByPoint(self, point, ltype = None, poMapInfo = None):
+
+                return {'area': area, 'centroid': centroid}
+
+        return {'area': -1, 'centroid': -1}
+
+    def SelectLineByPoint(self, point, ltype=None, poMapInfo=None):
         """Select vector feature by given point in given
         threshold
-   
+
         Only one vector object can be selected. Bounding boxes of
         all segments are stores.
-        
+
         :param point: points coordinates (x, y)
         :param ltype: feature type or None for default
         :param poMapInfo: use external Map_info, None for self.poMapInfo
@@ -637,36 +683,45 @@ class DisplayDriver:
         thisMapInfo = poMapInfo is None
         if not poMapInfo:
             poMapInfo = self.poMapInfo
-        
+
         if not poMapInfo:
-            return { 'line' : -1, 'point': None }
-        
+            return {'line': -1, 'point': None}
+
         if thisMapInfo:
             self._drawSelected = True
-            # select by ids 
+            # select by ids
             self.selected['cats'] = list()
-        
+
         poFound = Vect_new_list()
-        
+
         if ltype is None:
-            ltype  = self._getSelectType()
-        lineNearest = Vect_find_line_list(poMapInfo, point[0], point[1], 0,
-                                          ltype, self.GetThreshold(), self.is3D,
-                                          None, poFound)
-        Debug.msg(1, "DisplayDriver.SelectLineByPoint() found = %d", lineNearest)
-        
+            ltype = self._getSelectType()
+        lineNearest = Vect_find_line_list(
+            poMapInfo, point[0],
+            point[1],
+            0, ltype, self.GetThreshold(),
+            self.is3D, None, poFound)
+        Debug.msg(
+            1,
+            "DisplayDriver.SelectLineByPoint() found = %d",
+            lineNearest)
+
         if lineNearest > 0:
             if not self._isSelected(lineNearest):
                 self.selected['ids'].append(lineNearest)
             else:
                 self.selected['ids'].remove(lineNearest)
-        
+
         px = c_double()
         py = c_double()
         pz = c_double()
         if not self._validLine(lineNearest):
-            return { 'line' : -1, 'point': None }
-        ftype = Vect_read_line(poMapInfo, self.poPoints, self.poCats, lineNearest)
+            return {'line': -1, 'point': None}
+        ftype = Vect_read_line(
+            poMapInfo,
+            self.poPoints,
+            self.poCats,
+            lineNearest)
         Vect_line_distance(self.poPoints, point[0], point[1], 0.0, self.is3D,
                            byref(px), byref(py), byref(pz),
                            None, None, None)
@@ -685,50 +740,50 @@ class DisplayDriver:
                 line = found.value[i]
                 if line != lineNearest and not self._isDuplicated(line):
                     self.selected['ids'].remove(line)
-        
+
         Vect_destroy_list(poFound)
-        
+
         if thisMapInfo:
             # drawing segments can be very expensive
             # only one features selected
             self._drawSegments = True
-        
-        return { 'line'  : lineNearest,
-                 'point' : (px.value, py.value, pz.value) }
-    
+
+        return {'line': lineNearest,
+                'point': (px.value, py.value, pz.value)}
+
     def _listToIList(self, plist):
         """Generate from list struct_ilist
         """
         ilist = Vect_new_list()
         for val in plist:
             Vect_list_append(ilist, val)
-        
+
         return ilist
-        
-    def GetSelectedIList(self, ilist = None):
+
+    def GetSelectedIList(self, ilist=None):
         """Get list of selected objects as struct_ilist
 
         Returned IList must be freed by Vect_destroy_list().
-        
+
         :return: struct_ilist
         """
         if ilist:
             return self._listToIList(ilist)
-        
+
         return self._listToIList(self.selected['ids'])
-        
-    def GetSelected(self, grassId = True):
+
+    def GetSelected(self, grassId=True):
         """Get ids of selected objects
-        
+
         :param grassId: True for feature id, False for PseudoDC id
-        
+
         :return: list of ids of selected vector objects
         """
         if grassId:
             return self.selected['ids']
-        
+
         dc_ids = list()
-        
+
         if not self._drawSegments:
             dc_ids.append(1)
         elif len(self.selected['ids']) > 0:
@@ -739,10 +794,10 @@ class DisplayDriver:
             # node - segment - vertex - segment - node
             for i in range(1, 2 * points.n_points):
                 dc_ids.append(i)
-        
+
         return dc_ids
-        
-    def SetSelected(self, ids, layer = -1):
+
+    def SetSelected(self, ids, layer=-1):
         """Set selected vector objects
 
         :param list: of ids (None to unselect features)
@@ -753,21 +808,21 @@ class DisplayDriver:
         else:
             self._drawSelected = False
 
-        self.selected['field'] = layer        
+        self.selected['field'] = layer
         if layer > 0:
-            self.selected['cats']  = ids
-            self.selected['ids']   = list()
+            self.selected['cats'] = ids
+            self.selected['ids'] = list()
             ### cidx is not up-to-date
             # Vect_cidx_find_all(self.poMapInfo, layer, GV_POINTS | GV_LINES, lid, ilist)
             nlines = Vect_get_num_lines(self.poMapInfo)
             for line in range(1, nlines + 1):
                 if not Vect_line_alive(self.poMapInfo, line):
                     continue
-                
-                ltype = Vect_read_line (self.poMapInfo, None, self.poCats, line)
+
+                ltype = Vect_read_line(self.poMapInfo, None, self.poCats, line)
                 if not (ltype & (GV_POINTS | GV_LINES)):
                     continue
-                
+
                 found = False
                 cats = self.poCats.contents
                 for i in range(0, cats.n_cats):
@@ -778,16 +833,16 @@ class DisplayDriver:
                 if found:
                     self.selected['ids'].append(line)
         else:
-            self.selected['ids']   = ids
-            self.selected['cats']  = []
-        
+            self.selected['ids'] = ids
+            self.selected['cats'] = []
+
     def GetSelectedVertex(self, pos):
         """Get PseudoDC vertex id of selected line
 
         Set bounding box for vertices of line.
-        
+
         :param pos: position
-        
+
         :return: id of center, left and right vertex
         :return: 0 no line found
         :return: -1 on error
@@ -796,42 +851,54 @@ class DisplayDriver:
         # only one object can be selected
         if len(self.selected['ids']) != 1 or not self._drawSegments:
             return returnId
-        
+
         startId = 1
         line = self.selected['ids'][0]
-        
+
         if not self._validLine(line):
             return -1
-        ftype = Vect_read_line(self.poMapInfo, self.poPoints, self.poCats, line)
-        
+        ftype = Vect_read_line(
+            self.poMapInfo,
+            self.poPoints,
+            self.poCats,
+            line)
+
         minDist = 0.0
         Gid = -1
         # find the closest vertex (x, y)
         DCid = 1
         points = self.poPoints.contents
         for idx in range(points.n_points):
-            dist = Vect_points_distance(pos[0], pos[1], 0.0,
-                                        points.x[idx], points.y[idx], points.z[idx], 0)
-            
+            dist = Vect_points_distance(
+                pos[0],
+                pos[1],
+                0.0, points.x[idx],
+                points.y[idx],
+                points.z[idx],
+                0)
+
             if idx == 0:
                 minDist = dist
-                Gid     = idx
+                Gid = idx
             else:
                 if minDist > dist:
                     minDist = dist
                     Gid = idx
-            
-            vx, vy = self._cell2Pixel(points.x[idx], points.y[idx], points.z[idx])
+
+            vx, vy = self._cell2Pixel(
+                points.x[idx],
+                points.y[idx],
+                points.z[idx])
             rect = wx.Rect(vx, vy, 0, 0)
             self.dc.SetIdBounds(DCid, rect)
             DCid += 2
-        
+
         if minDist > self.GetThreshold():
             return returnId
-        
+
         # translate id
         DCid = Gid * 2 + 1
-        
+
         # add selected vertex
         returnId.append(DCid)
         # left vertex
@@ -844,7 +911,7 @@ class DisplayDriver:
             returnId.append(-1)
         else:
             returnId.append(DCid + 2)
-        
+
         return returnId
 
     def GetRegionSelected(self):
@@ -855,37 +922,37 @@ class DisplayDriver:
         regionBox = bound_box()
         lineBox = bound_box()
         setRegion = True
-        
+
         nareas = Vect_get_num_areas(self.poMapInfo)
         for line in self.selected['ids']:
             area = Vect_get_centroid_area(self.poMapInfo, line)
-            
+
             if area > 0 and area <= nareas:
                 if not Vect_get_area_box(self.poMapInfo, area, byref(lineBox)):
                     continue
             else:
                 if not Vect_get_line_box(self.poMapInfo, line, byref(lineBox)):
                     continue
-                
+
             if setRegion:
                 Vect_box_copy(byref(regionBox), byref(lineBox))
                 setRegion = False
             else:
                 Vect_box_extend(byref(regionBox), byref(lineBox))
-        
+
         return regionBox.N, regionBox.S, regionBox.W, regionBox.E
 
     def DrawSelected(self, flag):
         """Draw selected features
-        
+
         :param flag: True to draw selected features
         :type flag: bool
         """
         self._drawSelected = bool(flag)
-        
+
     def CloseMap(self):
         """Close vector map
-        
+
         :return: 0 on success
         :return: non-zero on error
         """
@@ -901,12 +968,12 @@ class DisplayDriver:
         ret = Vect_close(self.poMapInfo)
         del self.mapInfo
         self.poMapInfo = self.mapInfo = None
-        
+
         return ret
-    
-    def OpenMap(self, name, mapset, update = True, tmp = False):
+
+    def OpenMap(self, name, mapset, update=True, tmp=False):
         """Open vector map by the driver
-        
+
         :param name: name of vector map to be open
         :type name: str
         :param mapset: name of mapset where the vector map lives
@@ -923,7 +990,7 @@ class DisplayDriver:
         if not self.mapInfo:
             self.mapInfo = Map_info()
             self.poMapInfo = pointer(self.mapInfo)
-        
+
         # open existing map
         if update:
             if tmp:
@@ -935,34 +1002,38 @@ class DisplayDriver:
                 open_fn = Vect_open_tmp_old
             else:
                 open_fn = Vect_open_old
-        
+
         ret = open_fn(self.poMapInfo, name, mapset)
-        
+
         if ret == -1:
              # fatal error detected
             del self.mapInfo
             self.poMapInfo = self.mapInfo = None
         elif ret < 2:
             # map open at level 1, try to build topology
-            dlg = wx.MessageDialog(parent = self.window,
-                                   message = _("Topology for vector map <%s> is not available. "
-                                               "Topology is required by digitizer. Do you want to "
-                                               "rebuild topology (takes some time) and open the vector map "
-                                               "for editing?") % name,
-                                   caption=_("Topology missing"),
-                                   style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+            dlg = wx.MessageDialog(
+                parent=self.window,
+                message=_(
+                    "Topology for vector map <%s> is not available. "
+                    "Topology is required by digitizer. Do you want to "
+                    "rebuild topology (takes some time) and open the vector map "
+                    "for editing?") %
+                name,
+                caption=_("Topology missing"),
+                style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
             ret = dlg.ShowModal()
             if ret != wx.ID_YES:
                 del self.mapInfo
                 self.poMapInfo = self.mapInfo = None
             else:
                 Vect_build(self.poMapInfo)
-        
+
         if update:
-            Vect_set_updated(self.poMapInfo, True) # track updated lines at update mode
-        
+            # track updated lines at update mode
+            Vect_set_updated(self.poMapInfo, True)
+
         self.is3D = Vect_is_3d(self.poMapInfo)
-        
+
         return self.poMapInfo
 
     def GetMapBoundingBox(self):
@@ -972,57 +1043,60 @@ class DisplayDriver:
         """
         if not self.poMapInfo:
             return None
-        
+
         bbox = bound_box()
         Vect_get_map_box(self.poMapInfo, byref(bbox))
 
         return bbox.W, bbox.S, bbox.B, \
             bbox.E, bbox.N, bbox.T
-    
-    def UpdateSettings(self, alpha = 255):
+
+    def UpdateSettings(self, alpha=255):
         """Update display driver settings
 
         .. todo::
             map units
-        
+
         :param alpha: color value for aplha channel
         """
         color = dict()
         for key in self.settings.keys():
             if key == 'lineWidth':
-                self.settings[key] = int(UserSettings.Get(group = 'vdigit', key = 'lineWidth',
-                                                          subkey = 'value'))
+                self.settings[key] = int(
+                    UserSettings.Get(
+                        group='vdigit',
+                        key='lineWidth',
+                        subkey='value'))
                 continue
-            
-            color = wx.Colour(UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                              subkey = [key, 'color'])[0],
-                             UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                              subkey = [key, 'color'])[1],
-                             UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                              subkey = [key, 'color'])[2],
-                             alpha)
-            
+
+            color = wx.Colour(UserSettings.Get(group='vdigit', key='symbol',
+                                               subkey=[key, 'color'])[0],
+                              UserSettings.Get(group='vdigit', key='symbol',
+                                               subkey=[key, 'color'])[1],
+                              UserSettings.Get(group='vdigit', key='symbol',
+                                               subkey=[key, 'color'])[2],
+                              alpha)
+
             if key == 'highlight':
                 self.settings[key] = color
                 continue
-            
+
             if key == 'highlightDupl':
-                self.settings[key]['enabled'] = bool(UserSettings.Get(group = 'vdigit', key = 'checkForDupl',
-                                                                      subkey = 'enabled'))
+                self.settings[key]['enabled'] = bool(UserSettings.Get(
+                    group='vdigit', key='checkForDupl', subkey='enabled'))
             else:
-                self.settings[key]['enabled'] = bool(UserSettings.Get(group = 'vdigit', key = 'symbol',
-                                                                      subkey = [key, 'enabled']))
-            
+                self.settings[key]['enabled'] = bool(UserSettings.Get(
+                    group='vdigit', key='symbol', subkey=[key, 'enabled']))
+
             self.settings[key]['color'] = color
-        
+
     def UpdateRegion(self):
         """Update geographical region used by display driver
         """
         self.region = self.mapObj.GetCurrentRegion()
-        
-    def GetThreshold(self, type = 'snapping', value = None, units = None):
+
+    def GetThreshold(self, type='snapping', value=None, units=None):
         """Return threshold value in map units
-        
+
         :param type: snapping mode (node, vertex)
         :param value: threshold to be set up
         :param units: units (0 for screen pixels, 1 for map units)
@@ -1030,44 +1104,44 @@ class DisplayDriver:
         :return: threshold value
         """
         if value is None:
-            value = UserSettings.Get(group = 'vdigit', key = type, subkey = 'value')
-        
+            value = UserSettings.Get(group='vdigit', key=type, subkey='value')
+
         if units is None:
             units = UserSettings.Get(group='vdigit', key=type, subkey='unit')
 
         if value < 0:
             value = (self.region['nsres'] + self.region['ewres']) / 2.0
-        
+
         if units == 0:
             # pixel -> cell
             res = max(self.region['nsres'], self.region['ewres'])
             return value * res
-        
+
         return value
-    
+
     def GetDuplicates(self):
         """Return ids of (selected) duplicated vector features
         """
         if not self.poMapInfo:
             return
-        
+
         ids = dict()
         APoints = Vect_new_line_struct()
         BPoints = Vect_new_line_struct()
-        
+
         self.selected['idsDupl'] = list()
-        
+
         for i in range(len(self.selected['ids'])):
             line1 = self.selected['ids'][i]
             if self._isDuplicated(line1):
                 continue
-            
+
             Vect_read_line(self.poMapInfo, APoints, None, line1)
-            
+
             for line2 in self.selected['ids']:
                 if line1 == line2 or self._isDuplicated(line2):
                     continue
-                
+
                 Vect_read_line(self.poMapInfo, BPoints, None, line2)
 
                 if Vect_line_check_duplicate(APoints, BPoints, WITHOUT_Z):
@@ -1075,18 +1149,18 @@ class DisplayDriver:
                         ids[i] = list()
                         ids[i].append((line1, self._getCatString(line1)))
                         self.selected['idsDupl'].append(line1)
-                    
+
                     ids[i].append((line2, self._getCatString(line2)))
                     self.selected['idsDupl'].append(line2)
-        
+
         Vect_destroy_line_struct(APoints)
         Vect_destroy_line_struct(BPoints)
 
         return ids
-    
+
     def _getCatString(self, line):
         Vect_read_line(self.poMapInfo, None, self.poCats, line)
-        
+
         cats = self.poCats.contents
         catsDict = dict()
         for i in range(cats.n_cats):
@@ -1094,11 +1168,11 @@ class DisplayDriver:
             if layer not in catsDict:
                 catsDict[layer] = list()
             catsDict[layer].append(cats.cat[i])
-        
+
         catsStr = ''
         for l, c in catsDict.iteritems():
             catsStr = '%d: (%s)' % (l, ','.join(map(str, c)))
-        
+
         return catsStr
 
     def UnSelect(self, lines):
@@ -1111,12 +1185,11 @@ class DisplayDriver:
         for line in lines:
             if self._isSelected(line):
                 self.selected['ids'].remove(line)
-            if self.settings['highlightDupl']['enabled'] and self._isDuplicated(line):
+            if self.settings['highlightDupl'][
+                    'enabled'] and self._isDuplicated(line):
                 checkForDupl = True
 
         if checkForDupl:
             self.GetDuplicates()
-        
-        return len(self.selected['ids'])
-    
 
+        return len(self.selected['ids'])
diff --git a/gui/wxpython/vnet/__init__.py b/gui/wxpython/vnet/__init__.py
index 7b677fd..d5bdf87 100644
--- a/gui/wxpython/vnet/__init__.py
+++ b/gui/wxpython/vnet/__init__.py
@@ -5,4 +5,4 @@ all = [
     'vnet_core',
     'vnet_data',
     'vnet_utils'
-    ]
+]
diff --git a/gui/wxpython/vnet/dialogs.py b/gui/wxpython/vnet/dialogs.py
index 67824f2..1144283 100644
--- a/gui/wxpython/vnet/dialogs.py
+++ b/gui/wxpython/vnet/dialogs.py
@@ -29,61 +29,75 @@ import sys
 import types
 
 from copy import copy
-from grass.script     import core as grass
+from grass.script import core as grass
 
 import wx
 import wx.aui
-import wx.lib.flatnotebook  as FN
+import wx.lib.flatnotebook as FN
 import wx.lib.colourselect as csel
-import wx.lib.mixins.listctrl  as  listmix
-import wx.lib.scrolledpanel    as scrolled
+import wx.lib.mixins.listctrl as listmix
+import wx.lib.scrolledpanel as scrolled
 
-from core             import globalvar, utils
-from core.gcmd        import RunCommand, GMessage
-from core.settings    import UserSettings
+from core import globalvar, utils
+from core.gcmd import RunCommand, GMessage
+from core.settings import UserSettings
 from core.utils import _
 
-from dbmgr.base       import DbMgrBase 
-from dbmgr.vinfo      import VectorDBInfo
+from dbmgr.base import DbMgrBase
+from dbmgr.vinfo import VectorDBInfo
 
 from gui_core.widgets import GNotebook
 from gui_core.goutput import GConsoleWindow
 from gui_core.gselect import Select, LayerSelect, ColumnSelect
 
-from vnet.widgets     import PointsList
-from vnet.toolbars    import MainToolbar, PointListToolbar, AnalysisToolbar
-from vnet.vnet_core   import VNETManager
-from vnet.vnet_utils  import DegreesToRadians, RadiansToDegrees, GetNearestNodeCat, ParseMapStr
+from vnet.widgets import PointsList
+from vnet.toolbars import MainToolbar, PointListToolbar, AnalysisToolbar
+from vnet.vnet_core import VNETManager
+from vnet.vnet_utils import DegreesToRadians, RadiansToDegrees, GetNearestNodeCat, ParseMapStr
 
-#Main TODOs
-# - when layer tree of is changed, tmp result map is removed from render list 
-# - optimization of map drawing 
+# Main TODOs
+# - when layer tree of is changed, tmp result map is removed from render list
+# - optimization of map drawing
 # - tmp maps - add number of process
 # - destructor problem - when GRASS GIS is closed with open VNETDialog,
 #   it's destructor is not called
 
+
 class VNETDialog(wx.Dialog):
-    def __init__(self, parent, giface,
-                 id = wx.ID_ANY, title = _("GRASS GIS Vector Network Analysis Tool"),
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, giface, id=wx.ID_ANY,
+                 title=_("GRASS GIS Vector Network Analysis Tool"),
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         """Dialog for vector network analysis"""
 
-        wx.Dialog.__init__(self, parent, id, style=style, title = title, **kwargs)
-        self.SetIcon(wx.Icon(os.path.join(globalvar.ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+        wx.Dialog.__init__(
+            self,
+            parent,
+            id,
+            style=style,
+            title=title,
+            **kwargs)
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    globalvar.ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
 
-        self.parent  = parent
+        self.parent = parent
         self.mapWin = giface.GetMapWindow()
         self.giface = giface
 
-        # contains current analysis result (do not have to be last one, when history is browsed), 
+        # contains current analysis result (do not have to be last one, when history is browsed),
         # it is instance of VectMap class
-        self.tmp_result = None 
+        self.tmp_result = None
 
         self.defIsecTurnsHndlrReg = False
-        
-        # get attribute table columns only with numbers (for cost columns in vnet analysis)
-        self.columnTypes = ['integer', 'double precision'] 
-        
+
+        # get attribute table columns only with numbers (for cost columns in
+        # vnet analysis)
+        self.columnTypes = ['integer', 'double precision']
+
         self.vnet_mgr = VNETManager(self, giface)
 
         self.vnet_mgr.analysisDone.connect(self.AnalysisDone)
@@ -95,33 +109,36 @@ class VNETDialog(wx.Dialog):
 
         # toobars
         self.toolbars = {}
-        self.toolbars['mainToolbar'] = MainToolbar(parent = self, vnet_mgr = self.vnet_mgr)
-        self.toolbars['analysisToolbar'] = AnalysisToolbar(parent = self, vnet_mgr = self.vnet_mgr)
+        self.toolbars['mainToolbar'] = MainToolbar(
+            parent=self, vnet_mgr=self.vnet_mgr)
+        self.toolbars['analysisToolbar'] = AnalysisToolbar(
+            parent=self, vnet_mgr=self.vnet_mgr)
         #
         # Fancy gui
         #
         self._mgr = wx.aui.AuiManager(self)
 
         self.mainPanel = wx.Panel(parent=self)
-        self.notebook = GNotebook(parent = self.mainPanel,
-                                  style = FN.FNB_FANCY_TABS | FN.FNB_BOTTOM |
-                                          FN.FNB_NO_X_BUTTON)
+        self.notebook = GNotebook(parent=self.mainPanel,
+                                  style=FN.FNB_FANCY_TABS | FN.FNB_BOTTOM |
+                                  FN.FNB_NO_X_BUTTON)
 
         # statusbar
-        self.stPriorities = {'important' : 5, 'iformation' : 1}
-        self.stBar = VnetStatusbar(parent = self.mainPanel, style = 0)
-        self.stBar.SetFieldsCount(number = 1)
-    
+        self.stPriorities = {'important': 5, 'iformation': 1}
+        self.stBar = VnetStatusbar(parent=self.mainPanel, style=0)
+        self.stBar.SetFieldsCount(number=1)
+
         self.def_isec_turns = None
 
         # Create tabs
-        
-        # Stores widgets which sets some of analysis parameters (e. g. v.ne.iso -> iso lines)
-        self.anSettings = {} 
+
+        # Stores widgets which sets some of analysis parameters (e. g. v.ne.iso
+        # -> iso lines)
+        self.anSettings = {}
 
         self._createPointsPage()
 
-        # stores widgets which are shown on parameters page 
+        # stores widgets which are shown on parameters page
         # they set data, on which analysis will be done
         self.inputData = {}
         self._createParametersPage()
@@ -129,15 +146,19 @@ class VNETDialog(wx.Dialog):
         # Output console for analysis
         self._createOutputPage()
 
-        # Stores data which are needed for attribute table browser of analysis input map layers
+        # Stores data which are needed for attribute table browser of analysis
+        # input map layers
         self.inpDbMgrData = {}
         self._createInputDbMgrPage()
 
-        # Stores data which are need for attribute table browser of analysis result map layers
+        # Stores data which are need for attribute table browser of analysis
+        # result map layers
         self.resultDbMgrData = {}
         self._createResultDbMgrPage()
 
-        self.notebook.Bind(FN.EVT_FLATNOTEBOOK_PAGE_CHANGED, self.OnPageChanged)
+        self.notebook.Bind(
+            FN.EVT_FLATNOTEBOOK_PAGE_CHANGED,
+            self.OnPageChanged)
         self.Bind(wx.EVT_CLOSE, self.OnCloseDialog)
 
         self._addPanes()
@@ -147,137 +168,160 @@ class VNETDialog(wx.Dialog):
         self.SetSize((370, 550))
         self.SetMinSize((370, 420))
 
-        #fix goutput's pane size (required for Mac OSX)
-        if self.gwindow:         
+        # fix goutput's pane size (required for Mac OSX)
+        if self.gwindow:
             self.gwindow.SetSashPosition(int(self.GetSize()[1] * .75))
 
         self.OnAnalysisChanged(None)
         self.notebook.SetSelectionByName("parameters")
-        self.toolbars['analysisToolbar'].SetMinSize((-1, self.toolbars['mainToolbar'].GetSize()[1]))
+        self.toolbars['analysisToolbar'].SetMinSize(
+            (-1, self.toolbars['mainToolbar'].GetSize()[1]))
 
         self.toolbars['mainToolbar'].UpdateUndoRedo(0, 0)
 
-
     def _addPanes(self):
         """Adds toolbar pane and pane with tabs"""
         self._mgr.AddPane(self.toolbars['mainToolbar'],
-                              wx.aui.AuiPaneInfo().
-                              Name("pointlisttools").Caption(_("Point list toolbar")).
-                              ToolbarPane().Top().Row(0).
-                              Dockable(False).
-                              CloseButton(False).Layer(0))
- 
+                          wx.aui.AuiPaneInfo().
+                          Name("pointlisttools").Caption(_("Point list toolbar")).
+                          ToolbarPane().Top().Row(0).
+                          Dockable(False).
+                          CloseButton(False).Layer(0))
+
         self._mgr.AddPane(self.toolbars['analysisToolbar'],
-                              wx.aui.AuiPaneInfo().
-                              Name("analysisTools").Caption(_("Analysis toolbar")).
-                              ToolbarPane().Top().Row(1).
-                              Dockable(False).
-                              CloseButton(False).Layer(0))
+                          wx.aui.AuiPaneInfo().
+                          Name("analysisTools").Caption(_("Analysis toolbar")).
+                          ToolbarPane().Top().Row(1).
+                          Dockable(False).
+                          CloseButton(False).Layer(0))
 
         self._mgr.AddPane(self.mainPanel,
-                              wx.aui.AuiPaneInfo().
-                              Name("tabs").CaptionVisible(visible = False).
-                              Center().
-                              Dockable(False).
-                              CloseButton(False).Layer(0))
+                          wx.aui.AuiPaneInfo().
+                          Name("tabs").CaptionVisible(visible=False).
+                          Center().
+                          Dockable(False).
+                          CloseButton(False).Layer(0))
+
     def _doVnetDialogLayout(self):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        sizer.Add(item = self.notebook, proportion = 1,
-                  flag = wx.EXPAND)
+        sizer.Add(item=self.notebook, proportion=1,
+                  flag=wx.EXPAND)
 
-        sizer.Add(item = self.stBar, proportion = 0, flag = wx.EXPAND)
+        sizer.Add(item=self.stBar, proportion=0, flag=wx.EXPAND)
 
         self.mainPanel.SetSizer(sizer)
 
         sizer.Fit(self)
-        self.Layout() 
+        self.Layout()
 
     def _createPointsPage(self):
         """Tab with points list and analysis settings"""
-        pointsPanel = wx.Panel(parent = self)
-        anSettingsPanel = wx.Panel(parent = pointsPanel)
-        maxDistPanel =  wx.Panel(parent = anSettingsPanel)
+        pointsPanel = wx.Panel(parent=self)
+        anSettingsPanel = wx.Panel(parent=pointsPanel)
+        maxDistPanel = wx.Panel(parent=anSettingsPanel)
         maxValue = 1e8
 
-        listBox = wx.StaticBox(parent = pointsPanel, id = wx.ID_ANY,
-                                label =" %s " % _("Points for analysis:"))
+        listBox = wx.StaticBox(parent=pointsPanel, id=wx.ID_ANY,
+                               label=" %s " % _("Points for analysis:"))
         listSizer = wx.StaticBoxSizer(listBox, wx.VERTICAL)
-        anSettingsBox = wx.StaticBox(parent = anSettingsPanel, id = wx.ID_ANY,
-                                label =" %s " % _("Analysis settings:"))
+        anSettingsBox = wx.StaticBox(parent=anSettingsPanel, id=wx.ID_ANY,
+                                     label=" %s " % _("Analysis settings:"))
         anSettingsSizer = wx.StaticBoxSizer(anSettingsBox, wx.VERTICAL)
 
-        self.notebook.AddPage(page = pointsPanel, 
-                              text=_('Points'), 
-                              name = 'points')
-
-        self.list = PtsList(parent = pointsPanel, vnet_mgr = self.vnet_mgr)
-        toolSwitcher=self.giface.GetMapDisplay().GetToolSwitcher()
-        self.toolbars['pointsList'] = PointListToolbar(parent=pointsPanel,
-                                                       toolSwitcher=toolSwitcher,
-                                                       dialog=self, 
-                                                       vnet_mgr=self.vnet_mgr)
-
-        maxDistLabel = wx.StaticText(parent = maxDistPanel, id = wx.ID_ANY, label = _("Maximum distance of point to the network:"))
-        self.anSettings["max_dist"] = wx.SpinCtrl(parent = maxDistPanel, id = wx.ID_ANY, min = 0, max = maxValue)
-        self.anSettings["max_dist"].Bind(wx.EVT_SPINCTRL, lambda event : self.MaxDist())
-        self.anSettings["max_dist"].SetValue(100000) #TODO init val
+        self.notebook.AddPage(page=pointsPanel,
+                              text=_('Points'),
+                              name='points')
+
+        self.list = PtsList(parent=pointsPanel, vnet_mgr=self.vnet_mgr)
+        toolSwitcher = self.giface.GetMapDisplay().GetToolSwitcher()
+        self.toolbars['pointsList'] = PointListToolbar(
+            parent=pointsPanel,
+            toolSwitcher=toolSwitcher,
+            dialog=self,
+            vnet_mgr=self.vnet_mgr)
+
+        maxDistLabel = wx.StaticText(
+            parent=maxDistPanel, id=wx.ID_ANY,
+            label=_("Maximum distance of point to the network:"))
+        self.anSettings["max_dist"] = wx.SpinCtrl(
+            parent=maxDistPanel, id=wx.ID_ANY, min=0, max=maxValue)
+        self.anSettings["max_dist"].Bind(
+            wx.EVT_SPINCTRL, lambda event: self.MaxDist())
+        self.anSettings["max_dist"].SetValue(100000)  # TODO init val
         self.MaxDist()
 
         #showCutPanel =  wx.Panel(parent = anSettingsPanel)
-        #self.anSettings["show_cut"] = wx.CheckBox(parent = showCutPanel, id=wx.ID_ANY,
+        # self.anSettings["show_cut"] = wx.CheckBox(parent = showCutPanel, id=wx.ID_ANY,
         #                                          label = _("Show minimal cut"))
         #self.anSettings["show_cut"].Bind(wx.EVT_CHECKBOX, self.OnShowCut)
 
-        isoLinesPanel =  wx.Panel(parent = anSettingsPanel)
-        isoLineslabel = wx.StaticText(parent = isoLinesPanel, id = wx.ID_ANY, label = _("Iso lines:"))
-        self.anSettings["iso_lines"] = wx.TextCtrl(parent = isoLinesPanel, id = wx.ID_ANY) 
-        self.anSettings["iso_lines"].Bind(wx.EVT_TEXT, lambda event : self.IsoLines())
+        isoLinesPanel = wx.Panel(parent=anSettingsPanel)
+        isoLineslabel = wx.StaticText(
+            parent=isoLinesPanel,
+            id=wx.ID_ANY,
+            label=_("Iso lines:"))
+        self.anSettings["iso_lines"] = wx.TextCtrl(
+            parent=isoLinesPanel, id=wx.ID_ANY)
+        self.anSettings["iso_lines"].Bind(
+            wx.EVT_TEXT, lambda event: self.IsoLines())
         self.anSettings["iso_lines"].SetValue("1000,2000,3000")
         self.IsoLines()
 
         # Layout
         AnalysisSizer = wx.BoxSizer(wx.VERTICAL)
 
-
-        listSizer.Add(item = self.toolbars['pointsList'], proportion = 0)
-        listSizer.Add(item = self.list, proportion = 1, flag = wx.EXPAND)
-
+        listSizer.Add(item=self.toolbars['pointsList'], proportion=0)
+        listSizer.Add(item=self.list, proportion=1, flag=wx.EXPAND)
 
         maxDistSizer = wx.BoxSizer(wx.HORIZONTAL)
-        maxDistSizer.Add(item = maxDistLabel, flag = wx.ALIGN_CENTER_VERTICAL, proportion = 1)
-        maxDistSizer.Add(item = self.anSettings["max_dist"],
-                         flag = wx.EXPAND | wx.ALL, border = 5, proportion = 0)
+        maxDistSizer.Add(
+            item=maxDistLabel,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            proportion=1)
+        maxDistSizer.Add(item=self.anSettings["max_dist"],
+                         flag=wx.EXPAND | wx.ALL, border=5, proportion=0)
         maxDistPanel.SetSizer(maxDistSizer)
-        anSettingsSizer.Add(item = maxDistPanel, proportion = 1, flag = wx.EXPAND)
+        anSettingsSizer.Add(item=maxDistPanel, proportion=1, flag=wx.EXPAND)
 
         #showCutSizer = wx.BoxSizer(wx.HORIZONTAL)
-        #showCutPanel.SetSizer(showCutSizer)
-        #showCutSizer.Add(item = self.anSettings["show_cut"],
+        # showCutPanel.SetSizer(showCutSizer)
+        # showCutSizer.Add(item = self.anSettings["show_cut"],
         #                 flag = wx.EXPAND | wx.ALL, border = 5, proportion = 0)
         #anSettingsSizer.Add(item = showCutPanel, proportion = 1, flag = wx.EXPAND)
 
         isoLinesSizer = wx.BoxSizer(wx.HORIZONTAL)
-        isoLinesSizer.Add(item = isoLineslabel, flag = wx.ALIGN_CENTER_VERTICAL, proportion = 1)
-        isoLinesSizer.Add(item = self.anSettings["iso_lines"],
-                        flag = wx.EXPAND | wx.ALL, border = 5, proportion = 1)
+        isoLinesSizer.Add(
+            item=isoLineslabel,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            proportion=1)
+        isoLinesSizer.Add(item=self.anSettings["iso_lines"],
+                          flag=wx.EXPAND | wx.ALL, border=5, proportion=1)
         isoLinesPanel.SetSizer(isoLinesSizer)
-        anSettingsSizer.Add(item = isoLinesPanel, proportion = 1, flag = wx.EXPAND)
-
-        AnalysisSizer.Add(item = listSizer, proportion = 1, flag = wx.EXPAND | wx.ALL, border = 5)
-        AnalysisSizer.Add(item = anSettingsPanel, proportion = 0, flag = wx.EXPAND | wx.RIGHT | wx.LEFT | wx.BOTTOM, border = 5)
+        anSettingsSizer.Add(item=isoLinesPanel, proportion=1, flag=wx.EXPAND)
+
+        AnalysisSizer.Add(
+            item=listSizer,
+            proportion=1,
+            flag=wx.EXPAND | wx.ALL,
+            border=5)
+        AnalysisSizer.Add(
+            item=anSettingsPanel,
+            proportion=0,
+            flag=wx.EXPAND | wx.RIGHT | wx.LEFT | wx.BOTTOM,
+            border=5)
 
         anSettingsPanel.SetSizer(anSettingsSizer)
         pointsPanel.SetSizer(AnalysisSizer)
 
     def MaxDist(self):
         val = self.anSettings["max_dist"].GetValue()
-        self.vnet_mgr.SetParams({"max_dist" : val}, {})
+        self.vnet_mgr.SetParams({"max_dist": val}, {})
 
     def IsoLines(self):
         val = self.anSettings["iso_lines"].GetValue()
-        self.vnet_mgr.SetParams({"iso_lines" : val}, {})
+        self.vnet_mgr.SetParams({"iso_lines": val}, {})
 
     def OnShowCut(self, event):
         """Shows vector map with minimal cut (v.net.flow) - not yet implemented"""
@@ -295,150 +339,162 @@ class VNETDialog(wx.Dialog):
 
     def _createOutputPage(self):
         """Tab with output console"""
-        outputPanel = wx.Panel(parent = self)
-        self.notebook.AddPage(page = outputPanel, 
-                              text = _("Output"), 
-                              name = 'output')
+        outputPanel = wx.Panel(parent=self)
+        self.notebook.AddPage(page=outputPanel,
+                              text=_("Output"),
+                              name='output')
 
-        goutput = self.vnet_mgr.goutput #TODO make interface
-        self.gwindow = GConsoleWindow(parent = outputPanel, gconsole = goutput)
+        goutput = self.vnet_mgr.goutput  # TODO make interface
+        self.gwindow = GConsoleWindow(parent=outputPanel, gconsole=goutput)
 
-        #Layout
+        # Layout
         outputSizer = wx.BoxSizer(wx.VERTICAL)
-        outputSizer.Add(item = self.gwindow, proportion = 1, flag = wx.EXPAND)
-        self.gwindow.SetMinSize((-1,-1))
+        outputSizer.Add(item=self.gwindow, proportion=1, flag=wx.EXPAND)
+        self.gwindow.SetMinSize((-1, -1))
 
         outputPanel.SetSizer(outputSizer)
 
     def _createParametersPage(self):
         """Tab for selection of data for analysis"""
         dataPanel = scrolled.ScrolledPanel(parent=self)
-        self.notebook.AddPage(page = dataPanel,
-                              text=_('Parameters'), 
-                              name = 'parameters')
+        self.notebook.AddPage(page=dataPanel,
+                              text=_('Parameters'),
+                              name='parameters')
         label = {}
         dataSelects = [
-                        ['input', "Choose vector map for analysis:", Select],
-                        ['arc_layer', "Arc layer number or name:", LayerSelect],
-                        ['node_layer', "Node layer number or name:", LayerSelect],
-                        #['turn_layer', "Layer with turntable:", LayerSelect],
-                        #['turn_cat_layer', "Layer with unique categories for turntable:", LayerSelect],
-                        ['arc_column', "", ColumnSelect],
-                        ['arc_backward_column', "", ColumnSelect],
-                        ['node_column',  "", ColumnSelect],
-                      ]
-
-        #self.useTurns = wx.CheckBox(parent = dataPanel, id=wx.ID_ANY,
+            ['input', "Choose vector map for analysis:", Select],
+            ['arc_layer', "Arc layer number or name:", LayerSelect],
+            ['node_layer', "Node layer number or name:", LayerSelect],
+            #['turn_layer', "Layer with turntable:", LayerSelect],
+            #['turn_cat_layer', "Layer with unique categories for turntable:", LayerSelect],
+            ['arc_column', "", ColumnSelect],
+            ['arc_backward_column', "", ColumnSelect],
+            ['node_column', "", ColumnSelect],
+        ]
+
+        # self.useTurns = wx.CheckBox(parent = dataPanel, id=wx.ID_ANY,
         #                            label = _('Use turns'))
-        
+
         box = wx.StaticBox(dataPanel, -1, "Vector map and layers for analysis")
         bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        box2 = wx.StaticBox(dataPanel, -1, "Costs")    
+        box2 = wx.StaticBox(dataPanel, -1, "Costs")
         bsizer2 = wx.StaticBoxSizer(box2, wx.VERTICAL)
         selPanels = {}
 
         for dataSel in dataSelects:
-            selPanels[dataSel[0]] = wx.Panel(parent = dataPanel)
+            selPanels[dataSel[0]] = wx.Panel(parent=dataPanel)
             if dataSel[0] == 'input':
-                self.inputData[dataSel[0]] = dataSel[2](parent = selPanels[dataSel[0]],
-                                                        size = (-1, -1), 
-                                                        type = 'vector')
-                icon = wx.Image(os.path.join(globalvar.ICONDIR, "grass", "layer-vector-add.png"))
+                self.inputData[
+                    dataSel[0]] = dataSel[2](
+                    parent=selPanels[dataSel[0]],
+                    size=(-1, -1),
+                    type='vector')
+                icon = wx.Image(
+                    os.path.join(
+                        globalvar.ICONDIR,
+                        "grass",
+                        "layer-vector-add.png"))
                 icon.Rescale(18, 18)
-                icon = wx.BitmapFromImage(icon) 
-                self.addToTreeBtn = wx.BitmapButton(parent = selPanels[dataSel[0]], 
-                                                    bitmap = icon, 
-                                                    size = globalvar.DIALOG_COLOR_SIZE) 
-                self.addToTreeBtn.SetToolTipString(_("Add vector map into layer tree"))
+                icon = wx.BitmapFromImage(icon)
+                self.addToTreeBtn = wx.BitmapButton(
+                    parent=selPanels[dataSel[0]],
+                    bitmap=icon, size=globalvar.DIALOG_COLOR_SIZE)
+                self.addToTreeBtn.SetToolTipString(
+                    _("Add vector map into layer tree"))
                 self.addToTreeBtn.Disable()
                 self.addToTreeBtn.Bind(wx.EVT_BUTTON, self.OnToTreeBtn)
             elif dataSel[0] != 'input':
-                #if dataSel[0] == "turn_layer":
-                #    self.createTtbBtn = wx.Button(parent = selPanels[dataSel[0]], 
-                #                                 label = _("Create turntable")) 
+                # if dataSel[0] == "turn_layer":
+                #    self.createTtbBtn = wx.Button(parent = selPanels[dataSel[0]],
+                #                                 label = _("Create turntable"))
                 #    self.createTtbBtn.Bind(wx.EVT_BUTTON, self.OnCreateTtbBtn)
 
-                self.inputData[dataSel[0]] = dataSel[2](parent = selPanels[dataSel[0]],  
-                                                        size = (-1, -1))
-            label[dataSel[0]] =  wx.StaticText(parent =  selPanels[dataSel[0]], 
-                                               name = dataSel[0])
+                self.inputData[dataSel[0]] = dataSel[2](
+                    parent=selPanels[dataSel[0]], size=(-1, -1))
+            label[dataSel[0]] = wx.StaticText(parent=selPanels[dataSel[0]],
+                                              name=dataSel[0])
             label[dataSel[0]].SetLabel(dataSel[1])
 
-        self.inputData['input'].Bind(wx.EVT_TEXT, self.OnVectSel) 
+        self.inputData['input'].Bind(wx.EVT_TEXT, self.OnVectSel)
         self.inputData['arc_layer'].Bind(wx.EVT_TEXT, self.OnALayerSel)
         self.inputData['node_layer'].Bind(wx.EVT_TEXT, self.OnNLayerSel)
 
-        for params in ["arc_column", "arc_backward_column", "node_column"]:#, "turn_layer", "turn_cat_layer"]:
-            self.inputData[params].Bind(wx.EVT_TEXT, lambda event : self._setInputData())
+        # , "turn_layer", "turn_cat_layer"]:
+        for params in ["arc_column", "arc_backward_column", "node_column"]:
+            self.inputData[params].Bind(
+                wx.EVT_TEXT, lambda event: self._setInputData())
 
-        #self.useTurns.Bind(wx.EVT_CHECKBOX,
+        # self.useTurns.Bind(wx.EVT_CHECKBOX,
         #                    lambda event: self.UseTurns())
-        #self.UseTurns()
+        # self.UseTurns()
 
         # Layout
         mainSizer = wx.BoxSizer(wx.VERTICAL)
 
-        mainSizer.Add(item = bsizer, proportion = 0,
-                      flag = wx.EXPAND  | wx.TOP | wx.LEFT | wx.RIGHT, border = 5) 
+        mainSizer.Add(item=bsizer, proportion=0,
+                      flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border=5)
 
-        for sel in ['input', 'arc_layer', 'node_layer']:#, 'turn_layer', 'turn_cat_layer']:
+        # , 'turn_layer', 'turn_cat_layer']:
+        for sel in ['input', 'arc_layer', 'node_layer']:
             if sel == 'input':
                 btn = self.addToTreeBtn
-            #elif sel == "turn_layer":
+            # elif sel == "turn_layer":
             #    btn = self.createTtbBtn
             else:
                 btn = None
-            #if sel == 'turn_layer':
+            # if sel == 'turn_layer':
             #    bsizer.Add(item = self.useTurns, proportion = 0,
-            #                flag = wx.TOP | wx.LEFT | wx.RIGHT, border = 5)                       
-
-            selPanels[sel].SetSizer(self._doSelLayout(title = label[sel], 
-                                                      sel = self.inputData[sel], 
-                                                      btn = btn))
-            bsizer.Add(item = selPanels[sel], proportion = 0,
-                       flag = wx.EXPAND)
+            #                flag = wx.TOP | wx.LEFT | wx.RIGHT, border = 5)
 
+            selPanels[sel].SetSizer(self._doSelLayout(title=label[sel],
+                                                      sel=self.inputData[sel],
+                                                      btn=btn))
+            bsizer.Add(item=selPanels[sel], proportion=0,
+                       flag=wx.EXPAND)
 
-        mainSizer.Add(item = bsizer2, proportion = 0,
-                                 flag = wx.EXPAND  | wx.TOP | wx.LEFT | wx.RIGHT, border = 5)       
+        mainSizer.Add(item=bsizer2, proportion=0,
+                      flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border=5)
 
         for sel in ['arc_column', 'arc_backward_column', 'node_column']:
-            selPanels[sel].SetSizer(self._doSelLayout(title = label[sel], sel = self.inputData[sel]))
-            bsizer2.Add(item = selPanels[sel], proportion = 0,
-                       flag = wx.EXPAND)
-
+            selPanels[sel].SetSizer(
+                self._doSelLayout(
+                    title=label[sel],
+                    sel=self.inputData[sel]))
+            bsizer2.Add(item=selPanels[sel], proportion=0,
+                        flag=wx.EXPAND)
 
         dataPanel.SetSizer(mainSizer)
         dataPanel.SetupScrolling()
 
         dataPanel.SetAutoLayout(1)
 
-    def _doSelLayout(self, title, sel, btn = None): 
-        # helper function for layout of self.inputData widgets initialized in _createParametersPage
-        selSizer = wx.BoxSizer(orient = wx.VERTICAL)
+    def _doSelLayout(self, title, sel, btn=None):
+        # helper function for layout of self.inputData widgets initialized in
+        # _createParametersPage
+        selSizer = wx.BoxSizer(orient=wx.VERTICAL)
 
         selTitleSizer = wx.BoxSizer(wx.HORIZONTAL)
-        selTitleSizer.Add(item = title, proportion = 1,
-                          flag = wx.LEFT | wx.TOP | wx.EXPAND, border = 5)
+        selTitleSizer.Add(item=title, proportion=1,
+                          flag=wx.LEFT | wx.TOP | wx.EXPAND, border=5)
 
-        selSizer.Add(item = selTitleSizer, proportion = 0,
-                                 flag = wx.EXPAND)
+        selSizer.Add(item=selTitleSizer, proportion=0,
+                     flag=wx.EXPAND)
 
         if btn:
-                selFiledSizer = wx.BoxSizer(orient = wx.HORIZONTAL)
-                selFiledSizer.Add(item = sel, proportion = 1,
-                             flag = wx.EXPAND | wx.ALL)
+            selFiledSizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+            selFiledSizer.Add(item=sel, proportion=1,
+                              flag=wx.EXPAND | wx.ALL)
 
-                selFiledSizer.Add(item = btn, proportion = 0,
-                             flag = wx.EXPAND | wx.ALL)
+            selFiledSizer.Add(item=btn, proportion=0,
+                              flag=wx.EXPAND | wx.ALL)
 
-                selSizer.Add(item = selFiledSizer, proportion = 0,
-                             flag = wx.EXPAND | wx.ALL| wx.ALIGN_CENTER_VERTICAL,
-                             border = 5)
+            selSizer.Add(item=selFiledSizer, proportion=0,
+                         flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_VERTICAL,
+                         border=5)
         else:
-                selSizer.Add(item = sel, proportion = 1,
-                             flag = wx.EXPAND | wx.ALL| wx.ALIGN_CENTER_VERTICAL,
-                             border = 5)
+            selSizer.Add(item=sel, proportion=1,
+                         flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_VERTICAL,
+                         border=5)
         return selSizer
 
     def _createInputDbMgrPage(self):
@@ -451,8 +507,8 @@ class VNETDialog(wx.Dialog):
         if layer is not None and layer.type == 'vector':
             selMapName = layer.maplayer.name
 
-        self.inpDbMgrData['browse'] = self.inpDbMgrData['dbMgr'].CreateDbMgrPage(parent = self.notebook,
-                                                                                 pageName = 'browse')
+        self.inpDbMgrData['browse'] = self.inpDbMgrData[
+            'dbMgr'].CreateDbMgrPage(parent=self.notebook, pageName='browse')
         self.inpDbMgrData['browse'].SetTabAreaColour(globalvar.FNPageColor)
 
         self.inpDbMgrData['input'] = None
@@ -463,20 +519,20 @@ class VNETDialog(wx.Dialog):
     def _updateInputDbMgrPage(self, show):
         """Show or hide input tables tab"""
         if show and self.notebook.GetPageIndexByName('inputDbMgr') == -1:
-            self.notebook.AddPage(page = self.inpDbMgrData['browse'],
-                                  text=_('Input tables'), 
-                                  name = 'inputDbMgr')
+            self.notebook.AddPage(page=self.inpDbMgrData['browse'],
+                                  text=_('Input tables'),
+                                  name='inputDbMgr')
         elif not show:
-            self.notebook.RemovePage(page = 'inputDbMgr')
+            self.notebook.RemovePage(page='inputDbMgr')
 
     def _createResultDbMgrPage(self):
         """Tab with attribute tables of analysis result layers"""
-        self.resultDbMgrData['dbMgr'] = DbMgrBase() 
-        self.resultDbMgrData['browse'] = self.resultDbMgrData['dbMgr'].CreateDbMgrPage(parent = self.notebook,
-                                                                                       pageName = 'browse')
+        self.resultDbMgrData['dbMgr'] = DbMgrBase()
+        self.resultDbMgrData['browse'] = self.resultDbMgrData[
+            'dbMgr'].CreateDbMgrPage(parent=self.notebook, pageName='browse')
         self.resultDbMgrData['browse'].SetTabAreaColour(globalvar.FNPageColor)
 
-        if  self.tmp_result:
+        if self.tmp_result:
             self.resultDbMgrData['input'] = self.tmp_result.GetVectMapName()
         else:
             self.resultDbMgrData['input'] = None
@@ -485,15 +541,17 @@ class VNETDialog(wx.Dialog):
         """Show or Hide Result tables tab"""
         # analysis, which created result
         analysis = self.resultDbMgrData['analysis']
-        #TODO maybe no need to store this information, just check it has attribute table, if so show it
-        haveDbMgr = self.vnet_mgr.GetAnalysisProperties(analysis)["resultProps"]["dbMgr"]
+        # TODO maybe no need to store this information, just check it has
+        # attribute table, if so show it
+        haveDbMgr = self.vnet_mgr.GetAnalysisProperties(
+            analysis)["resultProps"]["dbMgr"]
 
         if haveDbMgr and self.notebook.GetPageIndexByName('resultDbMgr') == -1:
-            self.notebook.AddPage(page = self.resultDbMgrData['browse'],
-                                  text=_('Result tables'), 
-                                  name = 'resultDbMgr')
+            self.notebook.AddPage(page=self.resultDbMgrData['browse'],
+                                  text=_('Result tables'),
+                                  name='resultDbMgr')
         elif not haveDbMgr:
-            self.notebook.RemovePage(page = 'resultDbMgr')
+            self.notebook.RemovePage(page='resultDbMgr')
 
     def OnPageChanged(self, event):
         """Tab switched"""
@@ -502,27 +560,28 @@ class VNETDialog(wx.Dialog):
             dbMgrIndxs.append(self.notebook.GetPageIndexByName('inputDbMgr'))
             dbMgrIndxs.append(self.notebook.GetPageIndexByName('resultDbMgr'))
             if self.notebook.GetSelection() in dbMgrIndxs:
-                self.stBar.AddStatusItem(text = _('Loading tables...'), 
-                                         key = 'dbMgr',
-                                         priority = self.stPriorities['important'])
+                self.stBar.AddStatusItem(
+                    text=_('Loading tables...'),
+                    key='dbMgr',
+                    priority=self.stPriorities['important'])
                 self._updateDbMgrData()
-                self.stBar.RemoveStatusItem(key = 'dbMgr')
-            # update columns (when some is added in input tables browser), TODO needs optimization  
-            elif  self.notebook.GetSelection() == self.notebook.GetPageIndexByName('parameters'):
-                self.OnALayerSel(None) 
+                self.stBar.RemoveStatusItem(key='dbMgr')
+            # update columns (when some is added in input tables browser), TODO
+            # needs optimization
+            elif self.notebook.GetSelection() == self.notebook.GetPageIndexByName('parameters'):
+                self.OnALayerSel(None)
                 self.OnNLayerSel(None)
- 
+
         self.Layout()
 
-       
     def _updateDbMgrData(self):
-            """Updates input/result tables page """
-            if self.notebook.GetSelection() == self.notebook.GetPageIndexByName('inputDbMgr'):
-                self._updateInputDbMgrData()
-            elif self.notebook.GetSelection() == self.notebook.GetPageIndexByName('resultDbMgr'):
-                self._updateResultDbMgrData()
-            else:
-                self.stBar.RemoveStatusItem('manager')   
+        """Updates input/result tables page """
+        if self.notebook.GetSelection() == self.notebook.GetPageIndexByName('inputDbMgr'):
+            self._updateInputDbMgrData()
+        elif self.notebook.GetSelection() == self.notebook.GetPageIndexByName('resultDbMgr'):
+            self._updateResultDbMgrData()
+        else:
+            self.stBar.RemoveStatusItem('manager')
 
     def _updateInputDbMgrData(self):
         """Loads data according to selected layers in Parameters tab"""
@@ -530,7 +589,7 @@ class VNETDialog(wx.Dialog):
         # changed vector map
         if self.inpDbMgrData['input'] != inpSel:
             wx.BeginBusyCursor()
-            self.inpDbMgrData['dbMgr'].ChangeVectorMap(vectorName = inpSel)
+            self.inpDbMgrData['dbMgr'].ChangeVectorMap(vectorName=inpSel)
             self.inpDbMgrData['input'] = inpSel
             for layerName in ['arc_layer', 'node_layer']:
                 try:
@@ -544,7 +603,7 @@ class VNETDialog(wx.Dialog):
             needLayers = []
             browseLayers = self.inpDbMgrData['browse'].GetAddedLayers()
             for layerName in ['arc_layer', 'node_layer']:
-                try:                
+                try:
                     inpLayer = int(self.inputData[layerName].GetValue())
                 except ValueError:
                     continue
@@ -571,7 +630,7 @@ class VNETDialog(wx.Dialog):
         if self.resultDbMgrData['input'] != vectName:
             wx.BeginBusyCursor()
             dbMgr = self.resultDbMgrData['dbMgr']
-            dbMgr.ChangeVectorMap(vectorName = vectName)
+            dbMgr.ChangeVectorMap(vectorName=vectName)
 
             for layer in dbMgr.GetVectorLayers():
                 self.resultDbMgrData['browse'].AddLayer(layer)
@@ -584,13 +643,13 @@ class VNETDialog(wx.Dialog):
         vectorMap = self.inputData['input'].GetValue()
         vectMapName, mapSet = ParseMapStr(vectorMap)
         vectorMap = vectMapName + '@' + mapSet
-        existsMap = grass.find_file(name = vectMapName, 
-                                    element = 'vector', 
-                                    mapset = mapSet)
+        existsMap = grass.find_file(name=vectMapName,
+                                    element='vector',
+                                    mapset=mapSet)
         if not existsMap["name"]:
             return
 
-        cmd = ['d.vect', 
+        cmd = ['d.vect',
                'map=' + vectorMap]
 
         if True:
@@ -605,12 +664,12 @@ class VNETDialog(wx.Dialog):
             self.inputData["turn_layer"].GetParent().Show()
             self.inputData["turn_cat_layer"].GetParent().Show()
 
-            self.vnet_mgr.SetParams(params = {}, flags = {"t" : True})
+            self.vnet_mgr.SetParams(params={}, flags={"t": True})
         else:
             self.inputData["turn_layer"].GetParent().Hide()
             self.inputData["turn_cat_layer"].GetParent().Hide()
 
-            self.vnet_mgr.SetParams(params = {}, flags = {"t" : False})
+            self.vnet_mgr.SetParams(params={}, flags={"t": False})
 
         self.Layout()
 
@@ -619,59 +678,61 @@ class VNETDialog(wx.Dialog):
         if method == "EditMode" and not kwargs["activated"]:
             ptListToolbar = self.toolbars['pointsList']
             if ptListToolbar:
-                ptListToolbar.ToggleTool(id = ptListToolbar.GetToolId("insertPoint"),
-                                         toggle = False)
+                ptListToolbar.ToggleTool(
+                    id=ptListToolbar.GetToolId("insertPoint"), toggle=False)
 
         if method == "EditMode" and kwargs["activated"]:
             ptListToolbar = self.toolbars['pointsList']
             if ptListToolbar:
-                ptListToolbar.ToggleTool(id = ptListToolbar.GetToolId("insertPoint"),
-                                         toggle = True)
-
-        if method == "SetPointData" and ("e" in kwargs.keys() or "n" in kwargs.keys()):
-          self.notebook.SetSelectionByName("points")
+                ptListToolbar.ToggleTool(
+                    id=ptListToolbar.GetToolId("insertPoint"), toggle=True)
 
+        if method == "SetPointData" and (
+                "e" in kwargs.keys() or "n" in kwargs.keys()):
+            self.notebook.SetSelectionByName("points")
 
     def OnCreateTtbBtn(self, event):
 
         params, err_params, flags = self.vnet_mgr.GetParams()
-        dlg = CreateTtbDialog(parent = self, init_data = params)
+        dlg = CreateTtbDialog(parent=self, init_data=params)
 
         if dlg.ShowModal() == wx.ID_OK:
-            self.stBar.AddStatusItem(text = _('Creating turntable...'),
-                                     key = 'ttb',
-                                     priority =  self.stPriorities['important'])
+            self.stBar.AddStatusItem(text=_('Creating turntable...'),
+                                     key='ttb',
+                                     priority=self.stPriorities['important'])
 
             params = dlg.GetData()
             if not self.vnet_mgr.CreateTttb(params):
-                self.stBar.RemoveStatusItem('ttb')    
-        dlg.Destroy()              
+                self.stBar.RemoveStatusItem('ttb')
+        dlg.Destroy()
 
     def TtbCreated(self):
 
         params, err_params, flags = self.vnet_mgr.GetParams()
         self._updateParamsTab(params, flags)
-        
-        self.stBar.RemoveStatusItem('ttb')  
+
+        self.stBar.RemoveStatusItem('ttb')
 
     def OnVectSel(self, event):
         """When vector map is selected it populates other comboboxes in Parameters tab (layer selects, columns selects)"""
-        if self.vnet_mgr.IsSnappingActive(): #TODO should be in vnet_mgr
-            self.vnet_mgr.Snapping(activate = True)
+        if self.vnet_mgr.IsSnappingActive():  # TODO should be in vnet_mgr
+            self.vnet_mgr.Snapping(activate=True)
 
-        vectMapName, mapSet = self._parseMapStr(self.inputData['input'].GetValue())
+        vectMapName, mapSet = self._parseMapStr(
+            self.inputData['input'].GetValue())
         vectorMap = vectMapName + '@' + mapSet
 
-        for sel in ['arc_layer', 'node_layer']:#, 'turn_layer', 'turn_cat_layer']:
+        # , 'turn_layer', 'turn_cat_layer']:
+        for sel in ['arc_layer', 'node_layer']:
             self.inputData[sel].Clear()
-            self.inputData[sel].InsertLayers(vector = vectorMap)
+            self.inputData[sel].InsertLayers(vector=vectorMap)
 
         items = self.inputData['arc_layer'].GetItems()
         itemsLen = len(items)
         if itemsLen < 1:
             self.addToTreeBtn.Disable()
             if hasattr(self, 'inpDbMgrData'):
-                self._updateInputDbMgrPage(show = False)
+                self._updateInputDbMgrPage(show=False)
             self.inputData['arc_layer'].SetValue("")
             self.inputData['node_layer'].SetValue("")
             for sel in ['arc_column', 'arc_backward_column', 'node_column']:
@@ -682,48 +743,52 @@ class VNETDialog(wx.Dialog):
             self.inputData['node_layer'].SetSelection(0)
         elif itemsLen >= 1:
             if unicode("1") in items:
-                iItem = items.index(unicode("1")) 
+                iItem = items.index(unicode("1"))
                 self.inputData['arc_layer'].SetSelection(iItem)
             if unicode("2") in items:
-                iItem = items.index(unicode("2")) 
+                iItem = items.index(unicode("2"))
                 self.inputData['node_layer'].SetSelection(iItem)
 
         self.addToTreeBtn.Enable()
         if hasattr(self, 'inpDbMgrData'):
-            self._updateInputDbMgrPage(show = True)
+            self._updateInputDbMgrPage(show=True)
 
-        self.OnALayerSel(event) 
+        self.OnALayerSel(event)
         self.OnNLayerSel(event)
 
         self._setInputData()
 
     def _updateParamsTab(self, params, flags):
-        #TODO flag
+        # TODO flag
 
-                #'turn_layer', 'turn_cat_layer', 
-        for k in ['input', 'arc_layer', 'node_layer', 'arc_column', 'arc_backward_column', 'node_column']:
+                #'turn_layer', 'turn_cat_layer',
+        for k in ['input', 'arc_layer', 'node_layer',
+                  'arc_column', 'arc_backward_column', 'node_column']:
             self.inputData[k].SetValue(params[k])
 
     def OnALayerSel(self, event):
         """When arc layer from vector map is selected, populates corespondent columns selects"""
-        self.inputData['arc_column'].InsertColumns(vector = self.inputData['input'].GetValue(), 
-                                                 layer = self.inputData['arc_layer'].GetValue(), 
-                                                 type = self.columnTypes)
-        self.inputData['arc_backward_column'].InsertColumns(vector = self.inputData['input'].GetValue(), 
-                                                 layer = self.inputData['arc_layer'].GetValue(), 
-                                                 type = self.columnTypes)
+        self.inputData['arc_column'].InsertColumns(
+            vector=self.inputData['input'].GetValue(),
+            layer=self.inputData['arc_layer'].GetValue(),
+            type=self.columnTypes)
+        self.inputData['arc_backward_column'].InsertColumns(
+            vector=self.inputData['input'].GetValue(),
+            layer=self.inputData['arc_layer'].GetValue(),
+            type=self.columnTypes)
 
         self._setInputData()
 
     def OnNLayerSel(self, event):
         """When node layer from vector map is selected, populates corespondent column select"""
         if self.vnet_mgr.IsSnappingActive():
-            self.vnet_mgr.Snapping(activate = True)
+            self.vnet_mgr.Snapping(activate=True)
+
+        self.inputData['node_column'].InsertColumns(
+            vector=self.inputData['input'].GetValue(),
+            layer=self.inputData['node_layer'].GetValue(),
+            type=self.columnTypes)
 
-        self.inputData['node_column'].InsertColumns(vector = self.inputData['input'].GetValue(), 
-                                                layer = self.inputData['node_layer'].GetValue(), 
-                                                type = self.columnTypes)
- 
         self._setInputData()
 
     def _setInputData(self):
@@ -740,68 +805,77 @@ class VNETDialog(wx.Dialog):
             mapSet = mapValSpl[1]
         else:
             mapSet = grass.gisenv()['MAPSET']
-        mapName = mapValSpl[0] 
-        
-        return mapName, mapSet      
+        mapName = mapValSpl[0]
+
+        return mapName, mapSet
 
     def OnCloseDialog(self, event):
         """Cancel dialog"""
         self.vnet_mgr.CleanUp()
         toolSwitcher = self.giface.GetMapDisplay().GetToolSwitcher()
-        toolSwitcher.RemoveToolbarFromGroup('mouseUse', self.toolbars['pointsList'])
+        toolSwitcher.RemoveToolbarFromGroup(
+            'mouseUse', self.toolbars['pointsList'])
         self.parent.dialogs['vnet'] = None
         self.Destroy()
 
     def OnDefIsecTurnCosts(self, event):
         """Registers/unregisters mouse handler into map window"""
         if self.defIsecTurnsHndlrReg == False:
-            self.mapWin.RegisterMouseEventHandler(wx.EVT_LEFT_DOWN, 
+            self.mapWin.RegisterMouseEventHandler(wx.EVT_LEFT_DOWN,
                                                   self.OnDefIsecTurnCost,
                                                   'cross')
             self.defIsecTurnsHndlrReg = True
         else:
-            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN, 
+            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN,
                                                     self.OnDefIsecTurnCost)
 
             self.defIsecTurnsHndlrReg = False
 
     def OnDefGlobalTurnCosts(self, event):
 
-        dialog = DefGlobalTurnsDialog(self, data = self.vnet_mgr.GetGlobalTurnsData())
+        dialog = DefGlobalTurnsDialog(
+            self, data=self.vnet_mgr.GetGlobalTurnsData())
         dialog.Show()
 
-    def OnDefIsecTurnCost(self, event): #TODO move to vnet mgr?
+    def OnDefIsecTurnCost(self, event):  # TODO move to vnet mgr?
         """Take coordinates from map window"""
         if event == 'unregistered':
             ptListToolbar = self.toolbars['pointsList']
             if ptListToolbar:
-                ptListToolbar.ToggleTool( id = ptListToolbar.GetToolId("isec_turn_edit"),
-                                          toggle = False)  
+                ptListToolbar.ToggleTool(
+                    id=ptListToolbar.GetToolId("isec_turn_edit"), toggle=False)
             self.handlerRegistered = False
             return
 
         e, n = self.mapWin.GetLastEN()
 
         # compute threshold
-        snapTreshPix = int(UserSettings.Get(group ='vnet', 
-                                            key = 'other', 
-                                            subkey = 'snap_tresh'))
-        res = max(self.mapWin.Map.region['nsres'], self.mapWin.Map.region['ewres'])
+        snapTreshPix = int(UserSettings.Get(group='vnet',
+                                            key='other',
+                                            subkey='snap_tresh'))
+        res = max(
+            self.mapWin.Map.region['nsres'],
+            self.mapWin.Map.region['ewres'])
         snapTreshDist = snapTreshPix * res
 
         params, err_params, flags = self.vnet_mgr.GetParams()
 
         if "input" in err_params:
-            GMessage(parent = self,
-                     message = _("Input vector map does not exist."))
+            GMessage(parent=self,
+                     message=_("Input vector map does not exist."))
 
         if ["turn_layer", "turn_cat_layer"] in err_params:
-            GMessage(parent = self, message = "Please choose existing turntable layer and unique categories layer in Parameters tab.")
+            GMessage(
+                parent=self,
+                message="Please choose existing turntable layer and unique categories layer in Parameters tab.")
 
-        cat = GetNearestNodeCat(e, n, int(params['turn_cat_layer']), snapTreshDist, params["input"])
+        cat = GetNearestNodeCat(
+            e, n, int(params['turn_cat_layer']),
+            snapTreshDist, params["input"])
 
         if not self.def_isec_turns:
-            self.def_isec_turns = DefIntesectionTurnCostDialog(self, self.parent)
+            self.def_isec_turns = DefIntesectionTurnCostDialog(
+                self, self.parent)
             self.def_isec_turns.SetSize((500, 400))
 
         self.def_isec_turns.SetData(params["input"], params["turn_layer"])
@@ -811,17 +885,17 @@ class VNETDialog(wx.Dialog):
     def OnAnalyze(self, event):
         """Called when network analysis is started"""
 
-        self.stBar.AddStatusItem(text = _('Analysing...'),
-                                 key = 'analyze',
-                                 priority =  self.stPriorities['important'])
+        self.stBar.AddStatusItem(text=_('Analysing...'),
+                                 key='analyze',
+                                 priority=self.stPriorities['important'])
 
         ret = self.vnet_mgr.RunAnalysis()
 
-        #TODO
+        # TODO
         self.resultDbMgrData['analysis'] = self.currAnModule
 
         if ret < 0:
-            self.stBar.RemoveStatusItem(key = 'analyze')
+            self.stBar.RemoveStatusItem(key='analyze')
             if ret == -2:
                 self.notebook.SetSelectionByName("parameters")
 
@@ -830,14 +904,14 @@ class VNETDialog(wx.Dialog):
         curr_step, steps_num = self.vnet_mgr.GetHistStep()
         self.toolbars['mainToolbar'].UpdateUndoRedo(curr_step, steps_num)
 
-        self.tmp_result = self.vnet_mgr.GetResults() 
+        self.tmp_result = self.vnet_mgr.GetResults()
 
         mainToolbar = self.toolbars['mainToolbar']
         id = vars(mainToolbar)['showResult']
-        mainToolbar.ToggleTool(id =id,
-                               toggle = True)
+        mainToolbar.ToggleTool(id=id,
+                               toggle=True)
 
-        self.stBar.RemoveStatusItem(key = 'analyze')
+        self.stBar.RemoveStatusItem(key='analyze')
 
         self._updateResultDbMgrPage()
         self._updateDbMgrData()
@@ -851,33 +925,33 @@ class VNETDialog(wx.Dialog):
         toggleState = mainToolbar.GetToolState(id)
 
         if not self.tmp_result:
-            mainToolbar.ToggleTool(id =id,
-                                   toggle = False)
+            mainToolbar.ToggleTool(id=id,
+                                   toggle=False)
         elif toggleState:
             self.vnet_mgr.ShowResult(True)
         else:
             self.vnet_mgr.ShowResult(False)
 
     def OnSaveTmpLayer(self, event):
-        dlg = OutputVectorDialog(parent = self)
+        dlg = OutputVectorDialog(parent=self)
         dlg.ShowModal()
         self.vnet_mgr.SaveTmpLayer(dlg.vectSel.GetValue())
         dlg.Destroy()
 
     def OnSettings(self, event):
         """Displays vnet settings dialog"""
-        dlg = SettingsDialog(parent=self, id=wx.ID_ANY, 
-                             title=_('Settings'), vnet_mgr = self.vnet_mgr)
-        
+        dlg = SettingsDialog(parent=self, id=wx.ID_ANY,
+                             title=_('Settings'), vnet_mgr=self.vnet_mgr)
+
         dlg.ShowModal()
         dlg.Destroy()
 
     def OnAnalysisChanged(self, event):
         """Updates dialog when analysis is changed"""
         # set chosen analysis
-        iAn = self.toolbars['analysisToolbar'].anChoice.GetSelection() 
+        iAn = self.toolbars['analysisToolbar'].anChoice.GetSelection()
         self.currAnModule = self.vnet_mgr.GetAnalyses()[iAn]
-        self.vnet_mgr.SetParams({"analysis" : self.currAnModule}, {})
+        self.vnet_mgr.SetParams({"analysis": self.currAnModule}, {})
 
         # update dialog for particular analysis
         if self.currAnModule == "v.net.iso":
@@ -885,9 +959,9 @@ class VNETDialog(wx.Dialog):
         else:
             self.anSettings['iso_lines'].GetParent().Hide()
 
-        #if self.currAnModule == "v.net.flow": TODO not implemented
+        # if self.currAnModule == "v.net.flow": TODO not implemented
         #    self.anSettings['show_cut'].GetParent().Show()
-        #else:
+        # else:
         #    self.anSettings['show_cut'].GetParent().Hide()
 
         # show only corresponding selects for chosen v.net module
@@ -898,7 +972,6 @@ class VNETDialog(wx.Dialog):
         used_cols = []
         attrCols = an_props["cmdParams"]["cols"]
 
-
         for col in attrCols.iterkeys():
 
             if "inputField" in attrCols[col]:
@@ -911,10 +984,11 @@ class VNETDialog(wx.Dialog):
 
             inputPanel = self.inputData[colInptF].GetParent()
             inputPanel.Show()
-            inputPanel.FindWindowByName(colInptF).SetLabel(attrCols[col]["label"])
+            inputPanel.FindWindowByName(
+                colInptF).SetLabel(attrCols[col]["label"])
 
             if col != colInptF:
-               skip.append(colInptF)
+                skip.append(colInptF)
             used_cols.append(colInptF)
 
         for col in ["arc_backward_column", "arc_column", "node_column"]:
@@ -928,22 +1002,22 @@ class VNETDialog(wx.Dialog):
         """Start/stop snapping mode"""
 
         if evt == "deactivated":
-            self.stBar.RemoveStatusItem(key = 'snap')
+            self.stBar.RemoveStatusItem(key='snap')
             ptListToolbar = self.toolbars['pointsList']
-            ptListToolbar.ToggleTool(id = ptListToolbar.GetToolId("snapping"),
-                                     toggle = False)
+            ptListToolbar.ToggleTool(id=ptListToolbar.GetToolId("snapping"),
+                                     toggle=False)
 
         elif evt == "computing_points":
-            self.stBar.AddStatusItem(text = _('Computing nodes...'),
-                                     key = 'snap',
-                                     priority = self.stPriorities['important'])
+            self.stBar.AddStatusItem(text=_('Computing nodes...'),
+                                     key='snap',
+                                     priority=self.stPriorities['important'])
 
         elif evt == "computing_points_done":
-            self.stBar.RemoveStatusItem(key = 'snap')
+            self.stBar.RemoveStatusItem(key='snap')
 
     def SnapPointsDone(self):
         """Update map window, when map with nodes to snap is created"""
-        self.stBar.RemoveStatusItem(key = 'snap')
+        self.stBar.RemoveStatusItem(key='snap')
 
     def OnUndo(self, event):
         """Step back in history"""
@@ -964,36 +1038,42 @@ class VNETDialog(wx.Dialog):
         self._updateParamsTab(params, flags)
 
         anChoice = self.toolbars['analysisToolbar'].anChoice
-        anChoice.SetSelection(self.vnet_mgr.GetAnalyses().index(params["analysis"]))
-        self.currAnModule = params["analysis"] 
+        anChoice.SetSelection(
+            self.vnet_mgr.GetAnalyses().index(
+                params["analysis"]))
+        self.currAnModule = params["analysis"]
         self.resultDbMgrData['analysis'] = params["analysis"]
 
         # set analysis combobox
         anChoice = self.toolbars['analysisToolbar'].anChoice
-        anChoice.SetSelection(self.vnet_mgr.GetAnalyses().index(params["analysis"]))
+        anChoice.SetSelection(
+            self.vnet_mgr.GetAnalyses().index(
+                params["analysis"]))
 
         self._updateResultDbMgrPage()
         self._updateDbMgrData()
 
         self.OnAnalysisChanged(None)
 
+
 class PtsList(PointsList):
+
     def __init__(self, parent, vnet_mgr, id=wx.ID_ANY):
         """ List with points for analysis"""
         self.updateMap = True
         self.vnet_mgr = vnet_mgr
         self.pts_data = self.vnet_mgr.GetPointsManager()
 
-        pts_data_cols = self.pts_data.GetColumns(only_relevant = False)
+        pts_data_cols = self.pts_data.GetColumns(only_relevant=False)
 
         cols = []
-        for i_col, name in enumerate(pts_data_cols["name"]): 
+        for i_col, name in enumerate(pts_data_cols["name"]):
             if i_col == 0:
                 continue
-            cols.append([name, pts_data_cols["label"][i_col], 
-                              pts_data_cols["type"][i_col], pts_data_cols["def_vals"][i_col]])
+            cols.append([name, pts_data_cols["label"][i_col], pts_data_cols[
+                        "type"][i_col], pts_data_cols["def_vals"][i_col]])
 
-        PointsList.__init__(self, parent = parent, cols = cols, id =  id)      
+        PointsList.__init__(self, parent=parent, cols=cols, id=id)
 
         self.vnet_mgr.pointsChanged.connect(self.PointsChanged)
         self.vnet_mgr.parametersChanged.connect(self.ParametersChanged)
@@ -1020,10 +1100,10 @@ class PtsList(PointsList):
             self.ChangeColEditable('type', type_labels)
             colNum = self._getColumnNum('type')
 
-            for iItem, item in enumerate(self.itemDataMap): 
+            for iItem, item in enumerate(self.itemDataMap):
                 self.EditCellKey(iItem, 'type', self.selIdxs[iItem][colNum])
 
-                if not item[1]:               
+                if not item[1]:
                     self.CheckItem(iItem, False)
 
         else:
@@ -1031,12 +1111,12 @@ class PtsList(PointsList):
                 self.HideColumn('type')
 
     def ParametersChanged(self, method, kwargs):
-            if "analysis" in kwargs["changed_params"].keys():
-                self.AnalysisChanged(analysis = kwargs["changed_params"]["analysis"])
+        if "analysis" in kwargs["changed_params"].keys():
+            self.AnalysisChanged(analysis=kwargs["changed_params"]["analysis"])
 
     def OnItemActivated(self, event):
         changed, key = PointsList.OnItemActivated(self, event)
-        
+
         if not changed:
             return
 
@@ -1075,21 +1155,20 @@ class PtsList(PointsList):
         idx = self._findIndex(key)
         for k, v in data.iteritems():
             if k == "use":
-                
+
                 if v and not self.IsChecked(idx):
                     self.CheckItem(idx, True)
                 elif not v and self.IsChecked(idx):
-                    self.CheckItem(idx, False) 
+                    self.CheckItem(idx, False)
             else:
                 found = 0
                 for col in self.colsData:
                     if k == col[0]:
-                      found = 1
-                      break
+                        found = 1
+                        break
 
                 if found:
-                    self.EditCellKey(key, k, v)    
-
+                    self.EditCellKey(key, k, v)
 
     def OnItemSelected(self, event):
         """Item selected"""
@@ -1097,7 +1176,7 @@ class PtsList(PointsList):
         self.selectedkey = self.GetItemData(self.selected)
 
         if self.selectedkey == self.pts_data.GetSelected():
-          return
+            return
 
         if self.selectedkey == wx.NOT_FOUND:
             self.pts_data.SetSelected(None)
@@ -1106,13 +1185,16 @@ class PtsList(PointsList):
 
     def OnCheckItem(self, index, flag):
         "flag is True if the item was checked, False if unchecked"
-        key =  self.GetItemData(index)
-        if self.pts_data.GetPointData(key)["use"]!= flag:
-            self.pts_data.SetPointData(key, {"use" : flag})
+        key = self.GetItemData(index)
+        if self.pts_data.GetPointData(key)["use"] != flag:
+            self.pts_data.SetPointData(key, {"use": flag})
+
 
 class SettingsDialog(wx.Dialog):
-    def __init__(self, parent, id, title, vnet_mgr, pos=wx.DefaultPosition, size=wx.DefaultSize,
-                 style=wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(
+            self, parent, id, title, vnet_mgr, pos=wx.DefaultPosition,
+            size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE):
         """Settings dialog"""
         wx.Dialog.__init__(self, parent, id, title, pos, size, style)
 
@@ -1123,70 +1205,95 @@ class SettingsDialog(wx.Dialog):
         self.settings = {}
 
         # create all staticboxes before creating widgets, needed for Mac
-        otherBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                label =" %s " % _("Other settings"))
+        otherBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                label=" %s " % _("Other settings"))
         otherBoxSizer = wx.StaticBoxSizer(otherBox, wx.VERTICAL)
-        ptsStyleBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                   label =" %s " % _("Point style:"))
+        ptsStyleBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                   label=" %s " % _("Point style:"))
         ptsStyleBoxSizer = wx.StaticBoxSizer(ptsStyleBox, wx.VERTICAL)
-        styleBox = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                label =" %s " % _("Analysis result style:"))
+        styleBox = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                label=" %s " % _("Analysis result style:"))
         styleBoxSizer = wx.StaticBoxSizer(styleBox, wx.VERTICAL)
 
-        rules = RunCommand('v.colors', 
-                           read = True,
-                           flags = 'l')
-
-        settsLabels = {} 
-
-        settsLabels['color_table'] = wx.StaticText(parent = self, id = wx.ID_ANY, 
-                                                   label = _('Color table style %s:') % '(v.net.flow)')
-        self.settings['color_table'] = wx.ComboBox(parent = self, id = wx.ID_ANY,
-                                                   choices = rules.split(),
-                                                   style = wx.CB_READONLY, size = (180, -1))
-
-        setStyle = UserSettings.Get(group ='vnet', key = "res_style", subkey = "color_table")
+        rules = RunCommand('v.colors',
+                           read=True,
+                           flags='l')
+
+        settsLabels = {}
+
+        settsLabels['color_table'] = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_('Color table style %s:') %
+            '(v.net.flow)')
+        self.settings['color_table'] = wx.ComboBox(
+            parent=self, id=wx.ID_ANY, choices=rules.split(),
+            style=wx.CB_READONLY, size=(180, -1))
+
+        setStyle = UserSettings.Get(
+            group='vnet',
+            key="res_style",
+            subkey="color_table")
         i = self.settings['color_table'].FindString(setStyle)
-        if i != wx.NOT_FOUND: 
+        if i != wx.NOT_FOUND:
             self.settings['color_table'].Select(i)
 
-        self.settings["invert_colors"] = wx.CheckBox(parent = self, id=wx.ID_ANY,
-                                                       label = _('Invert colors %s:') % '(v.net.flow)')
-        setInvert = UserSettings.Get(group ='vnet', key = "res_style", subkey = "invert_colors")
+        self.settings["invert_colors"] = wx.CheckBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_('Invert colors %s:') %
+            '(v.net.flow)')
+        setInvert = UserSettings.Get(
+            group='vnet',
+            key="res_style",
+            subkey="invert_colors")
         self.settings["invert_colors"].SetValue(setInvert)
 
         self.colorsSetts = {
-                            "line_color" : ["res_style", _("Line color:")],
-                            "unused" : ["point_colors", _("Color for unused point:")], 
-                            "used1cat" : ["point_colors", _("Color for Start/From/Source/Used point:")],
-                            "used2cat" : ["point_colors", _("Color for End/To/Sink point:")],
-                            "selected" : ["point_colors", _("Color for selected point:")]
-                           }
+            "line_color": [
+                "res_style",
+                _("Line color:")],
+            "unused": [
+                "point_colors",
+                _("Color for unused point:")],
+            "used1cat": [
+                "point_colors",
+                _("Color for Start/From/Source/Used point:")],
+            "used2cat": [
+                "point_colors",
+                _("Color for End/To/Sink point:")],
+            "selected": [
+                "point_colors",
+                _("Color for selected point:")]}
 
         for settKey, sett in self.colorsSetts.iteritems():
-            settsLabels[settKey] = wx.StaticText(parent = self, id = wx.ID_ANY, label = sett[1])
-            col = UserSettings.Get(group ='vnet', key = sett[0], subkey = settKey)        
-            self.settings[settKey] = csel.ColourSelect(parent = self, id = wx.ID_ANY,
-                                            colour = wx.Colour(col[0],
-                                                               col[1],
-                                                               col[2], 
-                                                               255))
+            settsLabels[settKey] = wx.StaticText(
+                parent=self, id=wx.ID_ANY, label=sett[1])
+            col = UserSettings.Get(group='vnet', key=sett[0], subkey=settKey)
+            self.settings[settKey] = csel.ColourSelect(
+                parent=self, id=wx.ID_ANY, colour=wx.Colour(
+                    col[0], col[1], col[2], 255))
 
         self.sizeSetts = {
-                          "line_width" : ["res_style", _("Line width:")],
-                          "point_size" : ["point_symbol", _("Point size:")], 
-                          "point_width" : ["point_symbol", _("Point width:")],
-                          "snap_tresh" : ["other", _("Snapping treshold in pixels:")],
-                          "max_hist_steps" : ["other", _("Maximum number of results in history:")]
-                         }
+            "line_width": ["res_style", _("Line width:")],
+            "point_size": ["point_symbol", _("Point size:")],
+            "point_width": ["point_symbol", _("Point width:")],
+            "snap_tresh": ["other", _("Snapping treshold in pixels:")],
+            "max_hist_steps": ["other", _("Maximum number of results in history:")]
+        }
 
         for settKey, sett in self.sizeSetts.iteritems():
-            settsLabels[settKey] = wx.StaticText(parent = self, id = wx.ID_ANY, label = sett[1])
-            self.settings[settKey] = wx.SpinCtrl(parent = self, id = wx.ID_ANY, min = 1, max = 50)
-            size = int(UserSettings.Get(group = 'vnet', key = sett[0], subkey = settKey))
+            settsLabels[settKey] = wx.StaticText(
+                parent=self, id=wx.ID_ANY, label=sett[1])
+            self.settings[settKey] = wx.SpinCtrl(
+                parent=self, id=wx.ID_ANY, min=1, max=50)
+            size = int(
+                UserSettings.Get(
+                    group='vnet',
+                    key=sett[0],
+                    subkey=settKey))
             self.settings[settKey].SetValue(size)
 
-
         # buttons
         self.btnSave = wx.Button(self, wx.ID_SAVE)
         self.btnApply = wx.Button(self, wx.ID_APPLY)
@@ -1195,90 +1302,131 @@ class SettingsDialog(wx.Dialog):
 
         # bindings
         self.btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
-        self.btnApply.SetToolTipString(_("Apply changes for the current session"))
+        self.btnApply.SetToolTipString(
+            _("Apply changes for the current session"))
         self.btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
-        self.btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
+        self.btnSave.SetToolTipString(
+            _("Apply and save changes to user settings file (default for next sessions)"))
         self.btnClose.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btnClose.SetToolTipString(_("Close dialog"))
 
-        #Layout
+        # Layout
 
         # Analysis result style layout
         self.SetMinSize(self.GetBestSize())
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-
-        gridSizer = wx.GridBagSizer(vgap = 1, hgap = 1)
+        gridSizer = wx.GridBagSizer(vgap=1, hgap=1)
 
         row = 0
-        gridSizer.Add(item =  settsLabels["line_color"], flag = wx.ALIGN_CENTER_VERTICAL, pos =(row, 0))
-        gridSizer.Add(item = self.settings["line_color"],
-                      flag = wx.ALIGN_RIGHT | wx.ALL, border = 5,
-                      pos =(row, 1))
- 
+        gridSizer.Add(
+            item=settsLabels["line_color"],
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        gridSizer.Add(item=self.settings["line_color"],
+                      flag=wx.ALIGN_RIGHT | wx.ALL, border=5,
+                      pos=(row, 1))
+
         row += 1
-        gridSizer.Add(item =  settsLabels["line_width"], flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        gridSizer.Add(item = self.settings["line_width"],
-                      flag = wx.ALIGN_RIGHT | wx.ALL, border = 5,
-                      pos = (row, 1))
+        gridSizer.Add(
+            item=settsLabels["line_width"],
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        gridSizer.Add(item=self.settings["line_width"],
+                      flag=wx.ALIGN_RIGHT | wx.ALL, border=5,
+                      pos=(row, 1))
         row += 1
-        gridSizer.Add(item = settsLabels['color_table'], flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-        gridSizer.Add(item = self.settings['color_table'],
-                      flag = wx.ALIGN_RIGHT | wx.ALL, border = 5,
-                      pos = (row, 1))
+        gridSizer.Add(
+            item=settsLabels['color_table'],
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
+        gridSizer.Add(item=self.settings['color_table'],
+                      flag=wx.ALIGN_RIGHT | wx.ALL, border=5,
+                      pos=(row, 1))
 
         row += 1
-        gridSizer.Add(item = self.settings["invert_colors"], flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        gridSizer.Add(
+            item=self.settings["invert_colors"],
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                row,
+                0))
 
         gridSizer.AddGrowableCol(1)
-        styleBoxSizer.Add(item = gridSizer, flag = wx.EXPAND)
+        styleBoxSizer.Add(item=gridSizer, flag=wx.EXPAND)
 
         # Point style layout
-        gridSizer = wx.GridBagSizer(vgap = 1, hgap = 1)
+        gridSizer = wx.GridBagSizer(vgap=1, hgap=1)
 
         row = 0
         setts = dict(self.colorsSetts.items() + self.sizeSetts.items())
 
-        settsOrder = ["selected", "used1cat", "used2cat", "unused", "point_size", "point_width"]
+        settsOrder = [
+            "selected",
+            "used1cat",
+            "used2cat",
+            "unused",
+            "point_size",
+            "point_width"]
         for settKey in settsOrder:
             sett = setts[settKey]
-            gridSizer.Add(item = settsLabels[settKey], flag = wx.ALIGN_CENTER_VERTICAL, pos =(row, 0))
-            gridSizer.Add(item = self.settings[settKey],
-                          flag = wx.ALIGN_RIGHT | wx.ALL, border = 5,
-                          pos =(row, 1))  
+            gridSizer.Add(
+                item=settsLabels[settKey],
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            gridSizer.Add(item=self.settings[settKey],
+                          flag=wx.ALIGN_RIGHT | wx.ALL, border=5,
+                          pos=(row, 1))
             row += 1
 
         gridSizer.AddGrowableCol(1)
-        ptsStyleBoxSizer.Add(item = gridSizer, flag = wx.EXPAND)
+        ptsStyleBoxSizer.Add(item=gridSizer, flag=wx.EXPAND)
 
         # Other settings layout
-        gridSizer = wx.GridBagSizer(vgap = 1, hgap = 1)
+        gridSizer = wx.GridBagSizer(vgap=1, hgap=1)
 
-        row = 0 
+        row = 0
         for otherSettName in ["snap_tresh", "max_hist_steps"]:
-            gridSizer.Add(item = settsLabels[otherSettName], flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
-            gridSizer.Add(item = self.settings[otherSettName],
-                          flag = wx.ALIGN_RIGHT | wx.ALL, border = 5,
-                          pos = (row, 1))
+            gridSizer.Add(
+                item=settsLabels[otherSettName],
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            gridSizer.Add(item=self.settings[otherSettName],
+                          flag=wx.ALIGN_RIGHT | wx.ALL, border=5,
+                          pos=(row, 1))
             row += 1
 
         gridSizer.AddGrowableCol(1)
-        otherBoxSizer.Add(item = gridSizer, flag = wx.EXPAND)
+        otherBoxSizer.Add(item=gridSizer, flag=wx.EXPAND)
 
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(self.btnApply, flag = wx.LEFT | wx.RIGHT, border = 5)
+        btnSizer.Add(self.btnApply, flag=wx.LEFT | wx.RIGHT, border=5)
         btnSizer.Add(self.btnSave, flag=wx.LEFT | wx.RIGHT, border=5)
-        btnSizer.Add(self.btnClose, flag = wx.LEFT | wx.RIGHT, border = 5)
+        btnSizer.Add(self.btnClose, flag=wx.LEFT | wx.RIGHT, border=5)
 
-        sizer.Add(item = styleBoxSizer, flag = wx.EXPAND | wx.ALL, border = 5)
-        sizer.Add(item = ptsStyleBoxSizer, flag = wx.EXPAND | wx.ALL, border = 5)
-        sizer.Add(item = otherBoxSizer, flag = wx.EXPAND | wx.ALL, border = 5)
-        sizer.Add(item = btnSizer, flag = wx.EXPAND | wx.ALL, border = 5, proportion = 0)    
+        sizer.Add(item=styleBoxSizer, flag=wx.EXPAND | wx.ALL, border=5)
+        sizer.Add(item=ptsStyleBoxSizer, flag=wx.EXPAND | wx.ALL, border=5)
+        sizer.Add(item=otherBoxSizer, flag=wx.EXPAND | wx.ALL, border=5)
+        sizer.Add(
+            item=btnSizer,
+            flag=wx.EXPAND | wx.ALL,
+            border=5,
+            proportion=0)
 
         self.SetSizer(sizer)
         sizer.Fit(self)
-     
+
     def OnSave(self, event):
         """Button 'Save' pressed"""
         self.UpdateSettings()
@@ -1291,74 +1439,81 @@ class SettingsDialog(wx.Dialog):
         self.Close()
 
     def UpdateSettings(self):
-        UserSettings.Set(group ='vnet', key = "res_style", subkey ='line_width',
-                         value = self.settings["line_width"].GetValue())
+        UserSettings.Set(group='vnet', key="res_style", subkey='line_width',
+                         value=self.settings["line_width"].GetValue())
 
         for settKey, sett in self.colorsSetts.iteritems():
             col = tuple(self.settings[settKey].GetColour())
-            UserSettings.Set(group = 'vnet', 
-                             key = sett[0], 
-                             subkey = settKey,
-                             value = col)
+            UserSettings.Set(group='vnet',
+                             key=sett[0],
+                             subkey=settKey,
+                             value=col)
 
         for settKey, sett in self.sizeSetts.iteritems():
-            UserSettings.Set(group = 'vnet', key = sett[0], subkey = settKey, 
-                             value = self.settings[settKey].GetValue())
+            UserSettings.Set(group='vnet', key=sett[0], subkey=settKey,
+                             value=self.settings[settKey].GetValue())
 
-        UserSettings.Set(group = 'vnet', key = 'res_style', subkey = 'color_table', 
-                        value = self.settings['color_table'].GetStringSelection())
+        UserSettings.Set(
+            group='vnet',
+            key='res_style',
+            subkey='color_table',
+            value=self.settings['color_table'].GetStringSelection())
 
-        UserSettings.Set(group = 'vnet', key = 'res_style', subkey = 'invert_colors', 
-                        value = self.settings['invert_colors'].IsChecked())
+        UserSettings.Set(group='vnet', key='res_style', subkey='invert_colors',
+                         value=self.settings['invert_colors'].IsChecked())
 
         self.vnet_mgr.SettingsUpdated()
 
     def OnApply(self, event):
         """Button 'Apply' pressed"""
         self.UpdateSettings()
-        #self.Close()
+        # self.Close()
 
     def OnClose(self, event):
         """Button 'Cancel' pressed"""
         self.Close()
 
+
 class CreateTtbDialog(wx.Dialog):
 
     def __init__(self, parent, init_data, id=wx.ID_ANY,
-                 title = _("New vector map with turntable"), style=wx.DEFAULT_DIALOG_STYLE):
+                 title=_("New vector map with turntable"),
+                 style=wx.DEFAULT_DIALOG_STYLE):
         """Create turntable dialog."""
-        wx.Dialog.__init__(self, parent, id, title = _(title), style = style)
+        wx.Dialog.__init__(self, parent, id, title=_(title), style=style)
 
         box = wx.StaticBox(self, -1, "Vector map and layers for analysis")
         bsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
         label = {}
         dataSelects = [
-                        ['input', "Choose vector map for analysis:", Select],
-                        ['output', "Name of vector map with turntable:", Select],
-                        ['arc_layer', "Arc layer which will be expanded by turntable:", LayerSelect],
-                        ['turn_layer', "Layer with turntable:", LayerSelect],
-                        ['turn_cat_layer', "Layer with unique categories for turntable:", LayerSelect],
-                      ]
+            ['input', "Choose vector map for analysis:", Select],
+            ['output', "Name of vector map with turntable:", Select],
+            ['arc_layer', "Arc layer which will be expanded by turntable:", LayerSelect],
+            ['turn_layer', "Layer with turntable:", LayerSelect],
+            ['turn_cat_layer', "Layer with unique categories for turntable:", LayerSelect],
+        ]
 
         self.inputData = {}
 
         selPanels = {}
 
         for dataSel in dataSelects:
-            selPanels[dataSel[0]] = wx.Panel(parent = self)
-            if dataSel[0] in  ['input', 'output']:
-                self.inputData[dataSel[0]] = dataSel[2](parent = selPanels[dataSel[0]],
-                                                        size = (-1, -1), 
-                                                        type = 'vector')
+            selPanels[dataSel[0]] = wx.Panel(parent=self)
+            if dataSel[0] in ['input', 'output']:
+                self.inputData[
+                    dataSel[0]] = dataSel[2](
+                    parent=selPanels[dataSel[0]],
+                    size=(-1, -1),
+                    type='vector')
             elif dataSel[0] != 'input':
-                self.inputData[dataSel[0]] = dataSel[2](parent = selPanels[dataSel[0]],  
-                                                        size = (-1, -1))
+                self.inputData[dataSel[0]] = dataSel[2](
+                    parent=selPanels[dataSel[0]], size=(-1, -1))
 
-            label[dataSel[0]] =  wx.StaticText(parent =  selPanels[dataSel[0]], 
-                                               name = dataSel[0])
+            label[dataSel[0]] = wx.StaticText(parent=selPanels[dataSel[0]],
+                                              name=dataSel[0])
             label[dataSel[0]].SetLabel(dataSel[1])
 
-        self.inputData['input'].Bind(wx.EVT_TEXT, lambda event : self.InputSel) 
+        self.inputData['input'].Bind(wx.EVT_TEXT, lambda event: self.InputSel)
 
         # buttons
         self.btnCancel = wx.Button(self, wx.ID_CANCEL)
@@ -1368,20 +1523,21 @@ class CreateTtbDialog(wx.Dialog):
         # Layout
         mainSizer = wx.BoxSizer(wx.VERTICAL)
 
-        mainSizer.Add(item = bsizer, proportion = 0,
-                      flag = wx.EXPAND  | wx.TOP | wx.LEFT | wx.RIGHT, border = 5) 
+        mainSizer.Add(item=bsizer, proportion=0,
+                      flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border=5)
 
         btn = None
-        for sel in ['input', 'output', 'arc_layer', 'turn_layer', 'turn_cat_layer']:                      
-
-            selPanels[sel].SetSizer(self._doSelLayout(title = label[sel], 
-                                                      sel = self.inputData[sel], 
-                                                      btn = btn))
-            bsizer.Add(item = selPanels[sel], proportion = 0,
-                       flag = wx.EXPAND)
-  
+        for sel in ['input', 'output', 'arc_layer',
+                    'turn_layer', 'turn_cat_layer']:
+
+            selPanels[sel].SetSizer(self._doSelLayout(title=label[sel],
+                                                      sel=self.inputData[sel],
+                                                      btn=btn))
+            bsizer.Add(item=selPanels[sel], proportion=0,
+                       flag=wx.EXPAND)
+
         for k, v in init_data.iteritems():
-            if self.inputData.has_key(k):
+            if k in self.inputData:
                 self.inputData[k].SetValue(v)
 
         inp_vect_map = self.inputData["input"].GetValue().split("@")[0]
@@ -1392,67 +1548,68 @@ class CreateTtbDialog(wx.Dialog):
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
 
-        mainSizer.Add(item = btnSizer, proportion = 0,
-                      flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-
+        mainSizer.Add(item=btnSizer, proportion=0,
+                      flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
 
         self.SetSizer(mainSizer)
         self.Fit()
 
-    def _doSelLayout(self, title, sel, btn = None): 
-        # helper function for layout of self.inputData widgets initialized in _createParametersPage
-        selSizer = wx.BoxSizer(orient = wx.VERTICAL)
+    def _doSelLayout(self, title, sel, btn=None):
+        # helper function for layout of self.inputData widgets initialized in
+        # _createParametersPage
+        selSizer = wx.BoxSizer(orient=wx.VERTICAL)
 
         selTitleSizer = wx.BoxSizer(wx.HORIZONTAL)
-        selTitleSizer.Add(item = title, proportion = 1,
-                          flag = wx.LEFT | wx.TOP | wx.EXPAND, border = 5)
+        selTitleSizer.Add(item=title, proportion=1,
+                          flag=wx.LEFT | wx.TOP | wx.EXPAND, border=5)
 
-        selSizer.Add(item = selTitleSizer, proportion = 0,
-                                 flag = wx.EXPAND)
+        selSizer.Add(item=selTitleSizer, proportion=0,
+                     flag=wx.EXPAND)
 
         if btn:
-                selFiledSizer = wx.BoxSizer(orient = wx.HORIZONTAL)
-                selFiledSizer.Add(item = sel, proportion = 1,
-                             flag = wx.EXPAND | wx.ALL)
+            selFiledSizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+            selFiledSizer.Add(item=sel, proportion=1,
+                              flag=wx.EXPAND | wx.ALL)
 
-                selFiledSizer.Add(item = btn, proportion = 0,
-                             flag = wx.EXPAND | wx.ALL)
+            selFiledSizer.Add(item=btn, proportion=0,
+                              flag=wx.EXPAND | wx.ALL)
 
-                selSizer.Add(item = selFiledSizer, proportion = 0,
-                             flag = wx.EXPAND | wx.ALL| wx.ALIGN_CENTER_VERTICAL,
-                             border = 5)
+            selSizer.Add(item=selFiledSizer, proportion=0,
+                         flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_VERTICAL,
+                         border=5)
         else:
-                selSizer.Add(item = sel, proportion = 1,
-                             flag = wx.EXPAND | wx.ALL| wx.ALIGN_CENTER_VERTICAL,
-                             border = 5)
+            selSizer.Add(item=sel, proportion=1,
+                         flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_VERTICAL,
+                         border=5)
         return selSizer
 
     def InputSel(self):
         """When vector map is selected it populates other comboboxes in Parameters tab (layer selects, columns selects)"""
-        vectMapName, mapSet = self._parseMapStr(self.inputData['input'].GetValue())
+        vectMapName, mapSet = self._parseMapStr(
+            self.inputData['input'].GetValue())
         vectorMap = vectMapName + '@' + mapSet
 
         for sel in ['arc_layer', 'turn_layer', 'turn_cat_layer']:
             self.inputData[sel].Clear()
-            self.inputData[sel].InsertLayers(vector = vectorMap)
+            self.inputData[sel].InsertLayers(vector=vectorMap)
 
         items = self.inputData['arc_layer'].GetItems()
         itemsLen = len(items)
         if itemsLen < 1:
             self.addToTreeBtn.Disable()
             if hasattr(self, 'inpDbMgrData'):
-                self._updateInputDbMgrPage(show = False)
+                self._updateInputDbMgrPage(show=False)
             self.inputData['arc_layer'].SetValue("")
             return
         elif itemsLen == 1:
             self.inputData['arc_layer'].SetSelection(0)
         elif itemsLen >= 1:
             if unicode("1") in items:
-                iItem = items.index(unicode("1")) 
+                iItem = items.index(unicode("1"))
                 self.inputData['arc_layer'].SetSelection(iItem)
         self.addToTreeBtn.Enable()
         if hasattr(self, 'inpDbMgrData'):
-            self._updateInputDbMgrPage(show = True)
+            self._updateInputDbMgrPage(show=True)
 
     def GetData(self):
 
@@ -1462,23 +1619,27 @@ class CreateTtbDialog(wx.Dialog):
 
         return params
 
+
 class OutputVectorDialog(wx.Dialog):
-    def __init__(self, parent,id=wx.ID_ANY,
-                 title =_("Save analysis result"), style=wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(self, parent, id=wx.ID_ANY, title=_(
+            "Save analysis result"), style=wx.DEFAULT_DIALOG_STYLE):
         """Save analysis result"""
-        wx.Dialog.__init__(self, parent, id, title = _(title), style = style)
+        wx.Dialog.__init__(self, parent, id, title=_(title), style=style)
 
-        self.panel = wx.Panel(parent = self)
-        box = wx.StaticBox (parent = self.panel, id = wx.ID_ANY,
-                            label = "Vector map")
+        self.panel = wx.Panel(parent=self)
+        box = wx.StaticBox(parent=self.panel, id=wx.ID_ANY,
+                           label="Vector map")
 
         self.boxSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-       
+
         # text fields and it's captions
-        self.vectSel = Select(parent = self.panel, type = 'vector', 
-                              mapsets = [grass.gisenv()['MAPSET']],size = (-1, -1))
-        self.vectSellabel = wx.StaticText(parent = self.panel, id = wx.ID_ANY,
-                                          label = _("Name:")) 
+        self.vectSel = Select(
+            parent=self.panel, type='vector',
+            mapsets=[grass.gisenv()['MAPSET']],
+            size=(-1, -1))
+        self.vectSellabel = wx.StaticText(parent=self.panel, id=wx.ID_ANY,
+                                          label=_("Name:"))
 
         # buttons
         self.btnCancel = wx.Button(self.panel, wx.ID_CANCEL)
@@ -1492,31 +1653,32 @@ class OutputVectorDialog(wx.Dialog):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
+        self.boxSizer.Add(item=self.vectSellabel,
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          proportion=0)
 
-        self.boxSizer.Add(item = self.vectSellabel, 
-                     flag = wx.ALIGN_CENTER_VERTICAL,
-                     proportion = 0)
-
-        self.boxSizer.Add(item = self.vectSel, proportion = 1,
-                     flag = wx.EXPAND | wx.ALL, border = 5)
+        self.boxSizer.Add(item=self.vectSel, proportion=1,
+                          flag=wx.EXPAND | wx.ALL, border=5)
 
-        sizer.Add(item = self.boxSizer, proportion = 1,
-                  flag = wx.EXPAND | wx.ALL, border = 5)
+        sizer.Add(item=self.boxSizer, proportion=1,
+                  flag=wx.EXPAND | wx.ALL, border=5)
 
         btnSizer = wx.StdDialogButtonSizer()
         btnSizer.AddButton(self.btnCancel)
         btnSizer.AddButton(self.btnOk)
         btnSizer.Realize()
 
-        sizer.Add(item = btnSizer, proportion = 0,
-                  flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        sizer.Add(item=btnSizer, proportion=0,
+                  flag=wx.ALIGN_RIGHT | wx.ALL, border=5)
 
         self.panel.SetSizer(sizer)
         sizer.Fit(self)
 
+
 class VnetStatusbar(wx.StatusBar):
-    """Extends wx.StatusBar class with functionality to show multiple messages with the highest priority"""       
-    def __init__(self, parent, style, id = wx.ID_ANY, **kwargs):
+    """Extends wx.StatusBar class with functionality to show multiple messages with the highest priority"""
+
+    def __init__(self, parent, style, id=wx.ID_ANY, **kwargs):
 
         wx.StatusBar.__init__(self, parent, id, style, **kwargs)
 
@@ -1527,22 +1689,22 @@ class VnetStatusbar(wx.StatusBar):
         """Add new item to show
 
         :param text: string to show
-        :param key: item identifier, if already contains 
+        :param key: item identifier, if already contains
                     item with same identifier, overwrites this item
-        :param priority: only items with highest priority are showed 
-        """       
+        :param priority: only items with highest priority are showed
+        """
         statusTextItem = {
-                            'text' : text, 
-                            'key' : key,
-                            'priority' : priority
-                         }
+            'text': text,
+            'key': key,
+            'priority': priority
+        }
 
         for item in self.statusItems:
             if item['key'] == statusTextItem['key']:
                 self.statusItems.remove(item)
         self.statusItems.append(statusTextItem)
         if self.maxPriority < statusTextItem['priority']:
-            self.maxPriority =  statusTextItem['priority']
+            self.maxPriority = statusTextItem['priority']
         self._updateStatus()
 
     def _updateStatus(self):
@@ -1556,7 +1718,7 @@ class VnetStatusbar(wx.StatusBar):
         wx.StatusBar.SetStatusText(self, currStatusText)
 
     def RemoveStatusItem(self, key):
-        """Remove item 
+        """Remove item
 
         :param key: item identifier
         """
@@ -1570,97 +1732,133 @@ class VnetStatusbar(wx.StatusBar):
             for item in self.statusItems:
                 self.maxPriority = 0
                 if self.maxPriority < item['priority']:
-                    self.maxPriority =  item['priority']
+                    self.maxPriority = item['priority']
             self._updateStatus()
 
+
 class DefIntesectionTurnCostDialog(wx.Dialog):
 
-    def __init__(self, parent, mapWin, style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, id = wx.ID_ANY, title = _("Edit intersection turns costs"), **kwargs):
-        wx.Dialog.__init__(self, parent, id, style=style, title = title, **kwargs)
+    def __init__(self, parent, mapWin, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+                 id=wx.ID_ANY, title=_("Edit intersection turns costs"), **kwargs):
+        wx.Dialog.__init__(
+            self,
+            parent,
+            id,
+            style=style,
+            title=title,
+            **kwargs)
 
-        self.dbMgr = DbMgrBase(mapdisplay = mapWin)
-        self.browsePage = self.dbMgr.CreateDbMgrPage(parent = self, pageName = 'browse')
+        self.dbMgr = DbMgrBase(mapdisplay=mapWin)
+        self.browsePage = self.dbMgr.CreateDbMgrPage(
+            parent=self, pageName='browse')
 
     def layout(self):
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        sizer.Add(item = self.browsePage, proportion = 1,
-                  flag = wx.EXPAND)
-        
+        sizer.Add(item=self.browsePage, proportion=1,
+                  flag=wx.EXPAND)
+
         self.SetSizer(sizer)
 
     def SetData(self, vectMapName, layer):
         if vectMapName != self.dbMgr.GetVectorName():
-            self.dbMgr.ChangeVectorMap(vectorName = vectMapName)
+            self.dbMgr.ChangeVectorMap(vectorName=vectMapName)
         else:
-            self.browsePage.DeleteAllPages() 
-        
+            self.browsePage.DeleteAllPages()
+
         self.browsePage.AddLayer(int(layer))
         self.layer = int(layer)
 
         # TODO HACK!!!
-        self.browsePage.FindWindowById(self.browsePage.layerPage[int(layer)]['sqlNtb']).GetParent().Hide()
+        self.browsePage.FindWindowById(
+            self.browsePage.layerPage[int(layer)]
+            ['sqlNtb']).GetParent().Hide()
 
     def SetIntersection(self, isec):
 
-        self.browsePage.LoadData(self.layer, where = "isec = %d" % (isec))
+        self.browsePage.LoadData(self.layer, where="isec = %d" % (isec))
+
 
 class DefGlobalTurnsDialog(wx.Dialog):
-    def __init__(self, parent, data, style= wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, 
-                 id= wx.ID_ANY, title= _("Define Global Turn Costs"), **kwargs): # v Gassu dopln preklad
 
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+    def __init__(self, parent, data, style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+                 id=wx.ID_ANY, title=_("Define Global Turn Costs"), **kwargs):  # v Gassu dopln preklad
+
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
 
         self.data = data
 
-        self.angle_list = TurnAnglesList(parent= self, data= self.data) 
+        self.angle_list = TurnAnglesList(parent=self, data=self.data)
 
-        self.btnAdd = wx.Button(parent=self, id=wx.ID_ANY, label = "Add" )
-        self.btnRemove = wx.Button(parent=self, id=wx.ID_ANY, label = "Remove" )
-        self.btnClose = wx.Button(parent = self, id = wx.ID_CLOSE)
-        self.useUTurns = wx.CheckBox(parent = self, id = wx.ID_ANY, label = "Use U-turns")
+        self.btnAdd = wx.Button(parent=self, id=wx.ID_ANY, label="Add")
+        self.btnRemove = wx.Button(parent=self, id=wx.ID_ANY, label="Remove")
+        self.btnClose = wx.Button(parent=self, id=wx.ID_CLOSE)
+        self.useUTurns = wx.CheckBox(
+            parent=self, id=wx.ID_ANY, label="Use U-turns")
 
         self.btnAdd.Bind(wx.EVT_BUTTON, self.OnAddButtonClick)
         self.btnRemove.Bind(wx.EVT_BUTTON, self.OnRemoveButtonClick)
         self.Bind(wx.EVT_CLOSE, self.OnCloseDialog)
         self.useUTurns.Bind(wx.EVT_CHECKBOX, self.OnCheckedUTurns)
-                
+
         self.btnClose.SetDefault()
         self.useUTurns.SetValue(True)
         self.OnCheckedUTurns(None)
         self.layout()
         self.SetInitialSize((500, 200))
 
-
-
     def layout(self):
         sizer = wx.BoxSizer(wx.VERTICAL)
         labelSizer = wx.BoxSizer(wx.HORIZONTAL)
         addRemoveSizer = wx.BoxSizer(wx.VERTICAL)
-        closeSizer = wx.BoxSizer(wx.HORIZONTAL)  
-
-        addRemoveSizer.Add(item= self.btnAdd, proportion= 0, flag= wx.ALIGN_RIGHT, border = 10)
-        addRemoveSizer.Add(item= self.btnRemove, proportion= 0, flag= wx.ALIGN_RIGHT, border = 10)
-
-        labelSizer.Add(item= self.angle_list, proportion= 1, flag= wx.EXPAND, border = 10)
-        labelSizer.Add(item=addRemoveSizer, proportion = 0, flag = wx.ALIGN_RIGHT, border = 10)       
-
-        closeSizer.Add(item=self.useUTurns, proportion = 1, flag = wx.ALIGN_LEFT, border = 10 )
-        closeSizer.Add(item=self.btnClose, proportion = 0, flag = wx.ALIGN_RIGHT, border = 10)        
-
-        sizer.Add(item=labelSizer, proportion = 1, flag = wx.EXPAND)
-        sizer.Add(item=closeSizer, proportion = 0, flag = wx.EXPAND)
+        closeSizer = wx.BoxSizer(wx.HORIZONTAL)
+
+        addRemoveSizer.Add(
+            item=self.btnAdd,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT,
+            border=10)
+        addRemoveSizer.Add(
+            item=self.btnRemove,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT,
+            border=10)
+
+        labelSizer.Add(
+            item=self.angle_list,
+            proportion=1,
+            flag=wx.EXPAND,
+            border=10)
+        labelSizer.Add(
+            item=addRemoveSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT,
+            border=10)
+
+        closeSizer.Add(
+            item=self.useUTurns,
+            proportion=1,
+            flag=wx.ALIGN_LEFT,
+            border=10)
+        closeSizer.Add(
+            item=self.btnClose,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT,
+            border=10)
+
+        sizer.Add(item=labelSizer, proportion=1, flag=wx.EXPAND)
+        sizer.Add(item=closeSizer, proportion=0, flag=wx.EXPAND)
 
         self.SetSizer(sizer)
-     
 
     def OnAddButtonClick(self, event):
         """Add new direction over selected row"""
         selected_indices = self.angle_list.GetSelectedIndices()
- 
+
         if not selected_indices:
-            from_value = self.turn_data.GetValue(self.turn_data.GetLinesCount()-1,2)
-            to_value = self.turn_data.GetValue(0,1)
+            from_value = self.turn_data.GetValue(
+                self.turn_data.GetLinesCount() - 1, 2)
+            to_value = self.turn_data.GetValue(0, 1)
             default_row = ["new", from_value, to_value, 0.0]
             self.angle_list.AppendRow(default_row)
 
@@ -1668,17 +1866,16 @@ class DefGlobalTurnsDialog(wx.Dialog):
         i_addition = 0
         for i in selected_indices:
             i += i_addition
-            from_value = self.turn_data.GetValue(i-1,2)
-            to_value = self.turn_data.GetValue(i,1)
+            from_value = self.turn_data.GetValue(i - 1, 2)
+            to_value = self.turn_data.GetValue(i, 1)
             default_row = ["new", from_value, to_value, 0.0]
-            self.angle_list.InsertRow(i,default_row)
+            self.angle_list.InsertRow(i, default_row)
             i_addition += 1
 
-
     def OnRemoveButtonClick(self, event):
         """Delete one or more selected directions"""
         selected_indices = self.angle_list.GetSelectedIndices()
-  
+
         i_reduction = 0
         for i in selected_indices:
             i -= i_reduction
@@ -1692,48 +1889,58 @@ class DefGlobalTurnsDialog(wx.Dialog):
     def OnCheckedUTurns(self, event):
         """Use U-turns in analyse"""
         self.data.SetUTurns(self.useUTurns.GetValue())
-       
+
     def SetData(self, data):
         self.angle_list.SetData(data)
         self.data = data
 
 
-
-class TurnAnglesList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.TextEditMixin):
+class TurnAnglesList(
+        wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.TextEditMixin):
     """Virtual editable table with global turns"""
-    def __init__(self, parent, data, id= wx.ID_ANY, style= wx.LC_REPORT | wx.LC_VIRTUAL, **kwargs):
-        wx.ListCtrl.__init__(self, parent, id,style= style, **kwargs)
+
+    def __init__(self, parent, data, id=wx.ID_ANY,
+                 style=wx.LC_REPORT | wx.LC_VIRTUAL, **kwargs):
+        wx.ListCtrl.__init__(self, parent, id, style=style, **kwargs)
         listmix.ListCtrlAutoWidthMixin.__init__(self)
         listmix.TextEditMixin.__init__(self)
-        
+
         self.Populate()
         self.data = data
         self.SetItemCount(self.data.GetLinesCount())
-        
 
     def Populate(self):
         """Columns definition"""
-        self.InsertColumn(col= 0, heading= "Direction", format= wx.LIST_FORMAT_LEFT) # v Gassu dopln preklad 
-        self.InsertColumn(col= 1, heading= "From Angle", format= wx.LIST_FORMAT_RIGHT)
-        self.InsertColumn(col= 2, heading= "To Angle", format= wx.LIST_FORMAT_RIGHT)
-        self.InsertColumn(col= 3, heading= "Cost", format= wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(
+            col=0,
+            heading="Direction",
+            format=wx.LIST_FORMAT_LEFT)  # v Gassu dopln preklad
+        self.InsertColumn(
+            col=1,
+            heading="From Angle",
+            format=wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(
+            col=2,
+            heading="To Angle",
+            format=wx.LIST_FORMAT_RIGHT)
+        self.InsertColumn(col=3, heading="Cost", format=wx.LIST_FORMAT_RIGHT)
 
     def OnGetItemText(self, item, col):
         val = self.data.GetValue(item, col)
-        if col in [1,2]:
-            val = RadiansToDegrees(val)            
+        if col in [1, 2]:
+            val = RadiansToDegrees(val)
         return str(val)
 
     def SetVirtualData(self, row, column, text):
         """Set data to table"""
-        if column in [1,2,3]:
+        if column in [1, 2, 3]:
             try:
                 text = float(text)
             except:
                 return
-        if column in [1,2]:
+        if column in [1, 2]:
             text = DegreesToRadians(text)
-            
+
             # Tested allowed range of values
             if text > math.pi:
                 text = 0.0
@@ -1743,15 +1950,14 @@ class TurnAnglesList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.TextEd
         self.data.SetValue(text, row, column)
 
         self.edited_row = row
-        self.RefreshItems(0,self.data.GetLinesCount()-1)
-
+        self.RefreshItems(0, self.data.GetLinesCount() - 1)
 
     def AppendRow(self, values):
         self.data.AppendRow(values)
         self.SetItemCount(self.data.GetLinesCount())
 
     def InsertRow(self, line, values):
-        self.data.InsertRow(line,values)
+        self.data.InsertRow(line, values)
         self.SetItemCount(self.data.GetLinesCount())
 
     def DeleteRow(self, row):
@@ -1761,10 +1967,9 @@ class TurnAnglesList(wx.ListCtrl, listmix.ListCtrlAutoWidthMixin, listmix.TextEd
     def SetData(self, data):
         self.data = data
         self.SetItemCount(self.data.GetLinesCount())
-        self.RefreshItems(0, self.data.GetLinesCount()-1)
-
+        self.RefreshItems(0, self.data.GetLinesCount() - 1)
 
-    def GetSelectedIndices(self, state =  wx.LIST_STATE_SELECTED):
+    def GetSelectedIndices(self, state=wx.LIST_STATE_SELECTED):
         """Get numbers of selected rows"""
         indices = []
         lastFound = -1
diff --git a/gui/wxpython/vnet/toolbars.py b/gui/wxpython/vnet/toolbars.py
index 893e8db..89b8183 100644
--- a/gui/wxpython/vnet/toolbars.py
+++ b/gui/wxpython/vnet/toolbars.py
@@ -19,16 +19,18 @@ This program is free software under the GNU General Public License
 
 import wx
 
-from icons.icon        import MetaIcon
+from icons.icon import MetaIcon
 from gui_core.toolbars import BaseToolbar, BaseIcons
-from core.gcmd         import RunCommand
+from core.gcmd import RunCommand
 from core.utils import _
 
+
 class PointListToolbar(BaseToolbar):
     """Toolbar for managing list of points
 
     :param parent: reference to VNETDialog
     """
+
     def __init__(self, parent, toolSwitcher, dialog, vnet_mgr):
         BaseToolbar.__init__(self, parent, toolSwitcher)
         self.vnet_mgr = vnet_mgr
@@ -38,52 +40,58 @@ class PointListToolbar(BaseToolbar):
 
         self.InitToolbar(self._toolbarData())
         self.toolSwitcher.AddToolToGroup('mouseUse', self, self.insertPoint)
-        
+
         # realize the toolbar
         self.Realize()
 
-
     def _toolbarData(self):
 
         icons = {
-            'insertPoint'  : MetaIcon(img = 'pointer',
-                                    label = _('Insert points from Map Display')),
-            'snapping'  : MetaIcon(img = 'move',
-                                    label = _('Activate snapping to nodes')),
-            'isec_turn_edit'  : MetaIcon(img = 'line-edit',
-                                    label = _('Activate mode for turns editing')),
-            'global_turn_edit'  : MetaIcon(img = 'vector-tools',
-                                          label = _('Activate mode for global turns editing')),
-            'pointAdd'     : MetaIcon(img = 'point-create',
-                                    label = _('Add new point')),
-            'pointDelete'  : MetaIcon(img = 'gcp-delete',
-                                    label = _('Delete selected point'))
-            }
-
-        return  self._getToolbarData((('insertPoint', icons['insertPoint'],
-                                      self.OnEditPointMode,#TODO self.list.dialog
+            'insertPoint': MetaIcon(
+                img='pointer',
+                label=_('Insert points from Map Display')),
+            'snapping': MetaIcon(
+                img='move',
+                label=_('Activate snapping to nodes')),
+            'isec_turn_edit': MetaIcon(
+                img='line-edit',
+                label=_('Activate mode for turns editing')),
+            'global_turn_edit': MetaIcon(
+                img='vector-tools',
+                label=_('Activate mode for global turns editing')),
+            'pointAdd': MetaIcon(
+                img='point-create',
+                label=_('Add new point')),
+            'pointDelete': MetaIcon(
+                img='gcp-delete',
+                label=_('Delete selected point'))}
+
+        return self._getToolbarData((('insertPoint', icons['insertPoint'],
+                                      self.OnEditPointMode,  # TODO self.list.dialog
                                       wx.ITEM_CHECK),
-                                      ('snapping', icons['snapping'],
-                                      lambda event : self.vnet_mgr.Snapping(event.IsChecked()),
+                                     ('snapping', icons['snapping'],
+                                      lambda event: self.vnet_mgr.Snapping(
+                                          event.IsChecked()),
                                       wx.ITEM_CHECK),
-                                      (None, ),
+                                     (None, ),
                                      ('pointAdd', icons["pointAdd"],
-                                        lambda event : self.vnet_pts_mgr.AddPoint()),
+                                      lambda event: self.vnet_pts_mgr.AddPoint()),
                                      ('pointDelete', icons["pointDelete"],
-                                       self.OnDeletePoint),
-                                      (None, )#,
-                                      #('isec_turn_edit', icons['isec_turn_edit'],
-                                      #self.dialog.OnDefIsecTurnCosts,
-                                      #wx.ITEM_CHECK),
-                                      #('global_turn_edit', icons['global_turn_edit'],
-                                      #self.dialog.OnDefGlobalTurnCosts)
-                                      ))
-                                    
-    def GetToolId(self, toolName): #TODO can be useful in base
+                                      self.OnDeletePoint),
+                                     (None, )  # ,
+                                     #('isec_turn_edit', icons['isec_turn_edit'],
+                                     # self.dialog.OnDefIsecTurnCosts,
+                                     # wx.ITEM_CHECK),
+                                     #('global_turn_edit', icons['global_turn_edit'],
+                                     # self.dialog.OnDefGlobalTurnCosts)
+                                     ))
+
+    def GetToolId(self, toolName):  # TODO can be useful in base
         return vars(self)[toolName]
 
     def OnEditPointMode(self, event):
-        self.vnet_pts_mgr.EditPointMode(not self.vnet_pts_mgr.IsEditPointModeActive())
+        self.vnet_pts_mgr.EditPointMode(
+            not self.vnet_pts_mgr.IsEditPointModeActive())
 
     def OnDeletePoint(self, event):
         pt_id = self.vnet_pts_mgr.GetSelected()
@@ -93,9 +101,10 @@ class PointListToolbar(BaseToolbar):
 class MainToolbar(BaseToolbar):
     """Main toolbar
     """
+
     def __init__(self, parent, vnet_mgr):
         BaseToolbar.__init__(self, parent)
-        
+
         self.InitToolbar(self._toolbarData())
 
         self.vnet_mgr = vnet_mgr
@@ -106,87 +115,103 @@ class MainToolbar(BaseToolbar):
     def _toolbarData(self):
 
         icons = {
-                 'run' : MetaIcon(img = 'execute',
-                                  label = _('Execute analysis')),
-                 'undo' : MetaIcon(img = 'undo',
-                                  label = _('Go to previous analysis result')),
-                 'redo' : MetaIcon(img = 'redo',
-                                  label = _('Go to next analysis result')),
-                 'showResult'   : MetaIcon(img = 'layer-add',
-                                    label = _("Show analysis result")),
-                 'saveTempLayer' : MetaIcon(img = 'map-export',
-                                             label = _('Save temporary result')),
-                 'settings' : BaseIcons['settings'].SetLabel( _('Vector network analysis settings')),
-                 'help'       : MetaIcon(img = 'help',
-                                         label = _('Show manual'))
-                }
+            'run': MetaIcon(
+                img='execute',
+                label=_('Execute analysis')),
+            'undo': MetaIcon(
+                img='undo',
+                label=_('Go to previous analysis result')),
+            'redo': MetaIcon(
+                img='redo',
+                label=_('Go to next analysis result')),
+            'showResult': MetaIcon(
+                img='layer-add',
+                label=_("Show analysis result")),
+            'saveTempLayer': MetaIcon(
+                img='map-export',
+                label=_('Save temporary result')),
+            'settings': BaseIcons['settings'].SetLabel(
+                _('Vector network analysis settings')),
+            'help': MetaIcon(
+                img='help',
+                label=_('Show manual'))}
 
         return self._getToolbarData((
-                                     ("run", icons['run'],
-                                      self.parent.OnAnalyze),
-                                     (None, ),     
-                                     ("undo", icons['undo'], 
-                                      self.parent.OnUndo), 
-                                     ("redo", icons['redo'], 
-                                      self.parent.OnRedo),
-                                     (None, ),
-                                     ("showResult", icons['showResult'], 
-                                      self.parent.OnShowResult, wx.ITEM_CHECK), 
-                                     ("saveTempLayer", icons['saveTempLayer'],
-                                      self.parent.OnSaveTmpLayer),
-                                     (None, ),
-                                     ('settings', icons["settings"],
-                                      self.parent.OnSettings),  
-                                     ('help', icons["help"],
-                                      self.OnHelp),                                     
-                                     ("quit", BaseIcons['quit'],
-                                      self.parent.OnCloseDialog)
-                                    ))
-
+            ("run", icons['run'],
+             self.parent.OnAnalyze),
+            (None, ),
+            ("undo", icons['undo'],
+             self.parent.OnUndo),
+            ("redo", icons['redo'],
+             self.parent.OnRedo),
+            (None, ),
+            ("showResult", icons['showResult'],
+             self.parent.OnShowResult, wx.ITEM_CHECK),
+            ("saveTempLayer", icons['saveTempLayer'],
+             self.parent.OnSaveTmpLayer),
+            (None, ),
+            ('settings', icons["settings"],
+             self.parent.OnSettings),
+            ('help', icons["help"],
+             self.OnHelp),
+            ("quit", BaseIcons['quit'],
+             self.parent.OnCloseDialog)
+        ))
 
     def UpdateUndoRedo(self, curr_step, steps_num):
 
         id = vars(self)['showResult']
-        self.ToggleTool(id =id,
-                        toggle = True)
+        self.ToggleTool(id=id,
+                        toggle=True)
 
         if curr_step >= steps_num:
-           self.Enable("undo", False)
+            self.Enable("undo", False)
         else:
-           self.Enable("undo", True)
+            self.Enable("undo", True)
 
         if curr_step <= 0:
-           self.Enable("redo", False)
+            self.Enable("redo", False)
         else:
-           self.Enable("redo", True)  
+            self.Enable("redo", True)
+
+    def OnHelp(self, event):
+        RunCommand('g.manual',
+                   entry='wxGUI.vnet')
 
-    def OnHelp(self, event) :
-            RunCommand('g.manual',
-                       entry = 'wxGUI.vnet')
 
 class AnalysisToolbar(BaseToolbar):
     """Main toolbar
     """
+
     def __init__(self, parent, vnet_mgr):
         BaseToolbar.__init__(self, parent)
-        
+
         self.vnet_mgr = vnet_mgr
         self.InitToolbar(self._toolbarData())
 
         choices = []
 
         for moduleName in self.vnet_mgr.GetAnalyses():
-            choices.append(self.vnet_mgr.GetAnalysisProperties(moduleName)['label'])
-
-        self.anChoice = wx.ComboBox(parent = self, id = wx.ID_ANY,
-                                    choices = choices,
-                                    style = wx.CB_READONLY, size = (350, 30))#FIXME
+            choices.append(
+                self.vnet_mgr.GetAnalysisProperties(moduleName)['label'])
+
+        self.anChoice = wx.ComboBox(
+            parent=self,
+            id=wx.ID_ANY,
+            choices=choices,
+            style=wx.CB_READONLY,
+            size=(
+                350,
+                30))  # FIXME
         self.anChoice.SetToolTipString(_('Availiable analyses'))
         self.anChoice.SetSelection(0)
-               
+
         self.anChoiceId = self.AddControl(self.anChoice)
-        self.parent.Bind(wx.EVT_COMBOBOX, self.parent.OnAnalysisChanged, self.anChoiceId)
-                
+        self.parent.Bind(
+            wx.EVT_COMBOBOX,
+            self.parent.OnAnalysisChanged,
+            self.anChoiceId)
+
         # workaround for Mac bug. May be fixed by 2.8.8, but not before then.
         self.anChoice.Hide()
         self.anChoice.Show()
diff --git a/gui/wxpython/vnet/vnet_core.py b/gui/wxpython/vnet/vnet_core.py
index 83104aa..196dee8 100644
--- a/gui/wxpython/vnet/vnet_core.py
+++ b/gui/wxpython/vnet/vnet_core.py
@@ -21,23 +21,26 @@ This program is free software under the GNU General Public License
 
 import os
 from grass.script.utils import try_remove
-from grass.script     import core as grass
+from grass.script import core as grass
+from grass.script.task import cmdlist_to_tuple
 
 import wx
 
-from core             import utils
-from core.gcmd        import RunCommand, GMessage
-from core.gconsole    import CmdThread, EVT_CMD_DONE, GConsole
+from core import utils
+from core.gcmd import RunCommand, GMessage
+from core.gconsole import CmdThread, EVT_CMD_DONE, GConsole
 from core.utils import _
 
 from gui_core.gselect import VectorDBInfo
 
-from vnet.vnet_data   import VNETData, VNETTmpVectMaps, VectMap, History
-from vnet.vnet_utils  import ParseMapStr, haveCtypes, GetNearestNodeCat
+from vnet.vnet_data import VNETData, VNETTmpVectMaps, VectMap, History
+from vnet.vnet_utils import ParseMapStr, haveCtypes, GetNearestNodeCat
 
 from grass.pydispatch.signal import Signal
- 
+
+
 class VNETManager:
+
     def __init__(self, guiparent, giface):
 
         self.data = {}
@@ -46,22 +49,29 @@ class VNETManager:
         self.giface = giface
         self.mapWin = giface.GetMapWindow()
 
-        self.goutput = GConsole(guiparent = guiparent) 
+        self.goutput = GConsole(guiparent=guiparent)
 
-        self.vnet_data = VNETData(guiparent = guiparent, mapWin = self.mapWin)
+        self.vnet_data = VNETData(guiparent=guiparent, mapWin=self.mapWin)
 
-        self.results = {"analysis" : None,
-                        "vect_map" : None} #TODO more results
+        self.results = {"analysis": None,
+                        "vect_map": None}  # TODO more results
 
-        # this class instance manages all temporary vector maps created during life of VNETDialog  
-        self.tmp_maps = VNETTmpVectMaps(parent = guiparent, mapWin = self.mapWin)
+        # this class instance manages all temporary vector maps created during
+        # life of VNETDialog
+        self.tmp_maps = VNETTmpVectMaps(parent=guiparent, mapWin=self.mapWin)
 
         # initialization of History class used for saving and reading data from file
         # it is used for browsing analysis results
-        self.history = VNETHistory(self.guiparent, self.vnet_data, self.tmp_maps)
-        self.analyses = VNETAnalyses(self.vnet_data, self.RunAnDone, self.goutput, self.tmp_maps)
+        self.history = VNETHistory(
+            self.guiparent, self.vnet_data, self.tmp_maps)
+        self.analyses = VNETAnalyses(
+            self.vnet_data,
+            self.RunAnDone,
+            self.goutput,
+            self.tmp_maps)
 
-        self.snap_nodes = SnappingNodes(self.giface, self.vnet_data, self.tmp_maps, self.mapWin)
+        self.snap_nodes = SnappingNodes(
+            self.giface, self.vnet_data, self.tmp_maps, self.mapWin)
 
         self.ttbCreated = Signal('VNETManager.ttbCreated')
         self.analysisDone = Signal('VNETManager.analysisDone')
@@ -71,8 +81,7 @@ class VNETManager:
         self.snapping = self.snap_nodes.snapping
         self.pointsChanged.connect(self.PointsChanged)
 
-
-    def  __del__(self):
+    def __del__(self):
         self.CleanUp()
 
     def CleanUp(self):
@@ -81,7 +90,7 @@ class VNETManager:
         update = self.tmp_maps.DeleteAllTmpMaps()
 
         self.vnet_data.CleanUp()
-        
+
         if update:
             self.giface.updateMap.emit(render=True, renderVector=True)
         else:
@@ -94,40 +103,43 @@ class VNETManager:
         return self.vnet_data.GetGlobalTurnsData()
 
     def RunAnalysis(self):
-        
+
         analysis, valid = self.vnet_data.GetParam("analysis")
 
         params, err_params, flags = self.vnet_data.GetParams()
         relevant_params = self.vnet_data.GetRelevantParams(analysis)
-        
+
         if not relevant_params:
             return -1
 
-        if not self.vnet_data.InputsErrorMsgs(_("Unable to perform analysis."), 
-                                              analysis, params, flags, err_params, relevant_params):
+        if not self.vnet_data.InputsErrorMsgs(
+                _("Unable to perform analysis."),
+                analysis, params, flags, err_params, relevant_params):
             return -2
 
         if self.results["vect_map"]:
             self.results["vect_map"].DeleteRenderLayer()
 
-        # history - delete data in buffer for hist step  
+        # history - delete data in buffer for hist step
         self.history.DeleteNewHistStepData()
 
         # create new map (included to history) for result of analysis
-        self.results["vect_map"] = self.history.NewTmpVectMapToHist('vnet_tmp_result')
+        self.results["vect_map"] = self.history.NewTmpVectMapToHist(
+            'vnet_tmp_result')
 
         if not self.results["vect_map"]:
-                return False         
+            return False
 
-        # for case there is some map with same name 
-        # (when analysis does not produce any map, this map would have been shown as result) 
-        RunCommand('g.remove', flags = 'f', type = 'vector',
-                    name = self.results["vect_map"].GetVectMapName())
+        # for case there is some map with same name
+        # (when analysis does not produce any map, this map would have been shown as result)
+        RunCommand('g.remove', flags='f', type='vector',
+                   name=self.results["vect_map"].GetVectMapName())
 
-        # save data from 
+        # save data from
         self.history._saveAnInputToHist(analysis, params, flags)
 
-        ret = self.analyses.RunAnalysis(self.results["vect_map"].GetVectMapName(), params, flags)
+        ret = self.analyses.RunAnalysis(
+            self.results["vect_map"].GetVectMapName(), params, flags)
         if not ret:
             return -3
         else:
@@ -136,10 +148,10 @@ class VNETManager:
     def RunAnDone(self, cmd, returncode, results):
 
         self.results["analysis"] = cmd[0]
-       
+
         self.results["vect_map"].SaveVectMapState()
 
-        cmd, cmd_colors =  self.vnet_data.GetLayerStyle()
+        cmd, cmd_colors = self.vnet_data.GetLayerStyle()
         self.results["vect_map"].AddRenderLayer(cmd, cmd_colors)
 
         self.history.SaveHistStep()
@@ -147,7 +159,7 @@ class VNETManager:
         self.analysisDone.emit()
 
     def ShowResult(self, show):
-        #TODO can be more results e. g. smallest cut
+        # TODO can be more results e. g. smallest cut
 
         if show:
             self._checkResultMapChanged(self.results["vect_map"])
@@ -158,19 +170,20 @@ class VNETManager:
 
         self.giface.updateMap.emit(render=True, renderVector=True)
 
-    def GetAnalysisProperties(self, analysis = None):
-        return self.vnet_data.GetAnalysisProperties(analysis = analysis)
+    def GetAnalysisProperties(self, analysis=None):
+        return self.vnet_data.GetAnalysisProperties(analysis=analysis)
 
     def GetResults(self):
         return self.results["vect_map"]
 
     def Undo(self):
         self._updateDataForHistStep(self.history.Undo())
-        #SetUpdateMap TODO
+        # SetUpdateMap TODO
         return self.history.GetHistStep()
+
     def Redo(self):
         self._updateDataForHistStep(self.history.Redo())
-        #SetUpdateMap
+        # SetUpdateMap
         return self.history.GetHistStep()
 
     def _updateDataForHistStep(self, data):
@@ -183,7 +196,7 @@ class VNETManager:
         self.vnet_data.SetParams(params, flags)
 
         self.results["vect_map"].DeleteRenderLayer()
-        self.results["vect_map"]  = self.tmp_maps.GetTmpVectMap(resultMapName)
+        self.results["vect_map"] = self.tmp_maps.GetTmpVectMap(resultMapName)
         self._checkResultMapChanged(self.results["vect_map"])
 
         cmd, cmd_colors = self.vnet_data.GetLayerStyle()
@@ -207,14 +220,16 @@ class VNETManager:
     def _checkResultMapChanged(self, resultVectMap):
         """Check if map was modified outside"""
         if resultVectMap.VectMapState() == 0:
-            dlg = wx.MessageDialog(parent = self,
-                                   message = _("Temporary map '%s' with result " + 
-                                               "was changed outside vector network analysis tool.\n" +
-                                               "Showed result may not correspond " +
-                                               "original analysis result.") %\
-                                               resultVectMap.GetVectMapName(),
-                                   caption = _("Result changed outside"),
-                                   style =  wx.ICON_INFORMATION| wx.CENTRE)
+            dlg = wx.MessageDialog(
+                parent=self,
+                message=_(
+                    "Temporary map '%s' with result " +
+                    "was changed outside vector network analysis tool.\n" +
+                    "Showed result may not correspond " +
+                    "original analysis result.") %
+                resultVectMap.GetVectMapName(),
+                caption=_("Result changed outside"),
+                style=wx.ICON_INFORMATION | wx.CENTRE)
             dlg.ShowModal()
             dlg.Destroy()
 
@@ -229,15 +244,15 @@ class VNETManager:
 
     def SettingsUpdated(self):
         self.vnet_data.GetPointsData().SetPointDrawSettings()
-        if not self.results["vect_map"]  or \
-           not self.tmp_maps.HasTmpVectMap(self.results["vect_map"].GetVectMapName()):
+        if not self.results["vect_map"] or not self.tmp_maps.HasTmpVectMap(
+                self.results["vect_map"].GetVectMapName()):
             self.giface.updateMap.emit(render=False, renderVector=False)
         elif self.results["vect_map"].GetRenderLayer():
             cmd, cmd_colors = self.vnet_data.GetLayerStyle()
             self.results["vect_map"].AddRenderLayer(cmd, cmd_colors)
-            
+
             self.giface.updateMap.emit(render=True, renderVector=True)
-            #TODO optimization
+            # TODO optimization
         else:
             self.giface.updateMap.emit(render=False, renderVector=False)
 
@@ -248,45 +263,45 @@ class VNETManager:
 
         outputMap = params["output"]
         mapName, mapSet = ParseMapStr(outputMap)
-        if mapSet !=  grass.gisenv()['MAPSET']:
-            GMessage(parent = self,
-                     message = _("Map can be created only in current mapset"))
+        if mapSet != grass.gisenv()['MAPSET']:
+            GMessage(parent=self,
+                     message=_("Map can be created only in current mapset"))
             return False
-        existsMap = grass.find_file(name = mapName, 
-                                    element = 'vector', 
-                                    mapset = grass.gisenv()['MAPSET'])
+        existsMap = grass.find_file(name=mapName,
+                                    element='vector',
+                                    mapset=grass.gisenv()['MAPSET'])
         if existsMap["name"]:
-            dlg = wx.MessageDialog(parent = self.guiparent,
-                                   message = _("Vector map %s already exists. " +
-                                                "Do you want to overwrite it?") % 
-                                                (existsMap["fullname"]),
-                                   caption = _("Overwrite vector map"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
-                                               wx.ICON_QUESTION | wx.CENTRE) 
+            dlg = wx.MessageDialog(parent=self.guiparent,
+                                   message=_("Vector map %s already exists. " +
+                                             "Do you want to overwrite it?") %
+                                   (existsMap["fullname"]),
+                                   caption=_("Overwrite vector map"),
+                                   style=wx.YES_NO | wx.NO_DEFAULT |
+                                   wx.ICON_QUESTION | wx.CENTRE)
             ret = dlg.ShowModal()
             dlg.Destroy()
             if ret == wx.ID_NO:
                 return False
 
-            cmdTtb = [ 
-                        "v.net.turntable",
-                        "input=" + params["input"], 
-                        "output=" + params["output"],
-                        "arc_layer=" + params["arc_layer"],
-                        "turn_layer=" + params["turn_layer"],
-                        "turn_cat_layer=" + params["turn_cat_layer"],
-                        "--overwrite", 
-                       ]
+            cmdTtb = [
+                "v.net.turntable",
+                "input=" + params["input"],
+                "output=" + params["output"],
+                "arc_layer=" + params["arc_layer"],
+                "turn_layer=" + params["turn_layer"],
+                "turn_cat_layer=" + params["turn_cat_layer"],
+                "--overwrite",
+            ]
 
-            self.goutput.RunCmd(command = cmdTtb, onDone = self._createTtbDone)
+            self.goutput.RunCmd(command=cmdTtb, onDone=self._createTtbDone)
 
         return True
 
     def _createTtbDone(self, event):
 
         if event.returncode != 0:
-            GMessage(parent = self.guiparent,
-                     message = _("Creation of turntable failed."))
+            GMessage(parent=self.guiparent,
+                     message=_("Creation of turntable failed."))
             return
         else:
             params = {}
@@ -302,44 +317,44 @@ class VNETManager:
 
             self.vnet_data.SetParams(params, {})
 
-        self.ttbCreated.emit(returncode = event.returncode)
+        self.ttbCreated.emit(returncode=event.returncode)
 
     def SaveTmpLayer(self, layer_name):
         """Permanently saves temporary map of analysis result"""
         msg = _("Vector map with analysis result does not exist.")
 
         if not hasattr(self.results["vect_map"], "GetVectMapName"):
-            GMessage(parent = self.guiparent,
-                     message = msg)
+            GMessage(parent=self.guiparent,
+                     message=msg)
             return
 
         mapToAdd = self.results["vect_map"].GetVectMapName()
-        mapToAddEx = grass.find_file(name = mapToAdd, 
-                                        element = 'vector', 
-                                        mapset = grass.gisenv()['MAPSET'])
+        mapToAddEx = grass.find_file(name=mapToAdd,
+                                     element='vector',
+                                     mapset=grass.gisenv()['MAPSET'])
 
-        if not mapToAddEx["name"]: 
-            GMessage(parent = self.guiparent,
-                    message = msg)
+        if not mapToAddEx["name"]:
+            GMessage(parent=self.guiparent,
+                     message=msg)
             return
 
         addedMap = layer_name
         mapName, mapSet = ParseMapStr(addedMap)
-        if mapSet !=  grass.gisenv()['MAPSET']:
-            GMessage(parent = self.guiparent,
-                     message = _("Map can be saved only to currently set mapset"))
+        if mapSet != grass.gisenv()['MAPSET']:
+            GMessage(parent=self.guiparent, message=_(
+                "Map can be saved only to currently set mapset"))
             return
-        existsMap = grass.find_file(name = mapName, 
-                                    element = 'vector', 
-                                    mapset = grass.gisenv()['MAPSET'])
+        existsMap = grass.find_file(name=mapName,
+                                    element='vector',
+                                    mapset=grass.gisenv()['MAPSET'])
         if existsMap["name"]:
-            dlg = wx.MessageDialog(parent = self.guiparent,
-                                    message = _("Vector map %s already exists. " +
-                                            "Do you want to overwrite it?") % 
-                                            (existsMap["fullname"]),
-                                   caption = _("Overwrite vector map"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
-                                           wx.ICON_QUESTION | wx.CENTRE)            
+            dlg = wx.MessageDialog(parent=self.guiparent,
+                                   message=_("Vector map %s already exists. " +
+                                             "Do you want to overwrite it?") %
+                                   (existsMap["fullname"]),
+                                   caption=_("Overwrite vector map"),
+                                   style=wx.YES_NO | wx.NO_DEFAULT |
+                                   wx.ICON_QUESTION | wx.CENTRE)
             ret = dlg.ShowModal()
             if ret == wx.ID_NO:
                 dlg.Destroy()
@@ -347,8 +362,8 @@ class VNETManager:
             dlg.Destroy()
 
         RunCommand("g.copy",
-                    overwrite = True,
-                    vector = [self.results["vect_map"].GetVectMapName(), mapName])
+                   overwrite=True,
+                   vector=[self.results["vect_map"].GetVectMapName(), mapName])
 
         if len(self.giface.GetLayerList().GetLayersByName(mapName)) == 0:
             # TODO: get rid of insert
@@ -361,14 +376,16 @@ class VNETManager:
                                                 cmd=cmd,
                                                 checked=True)
             if cmd_colors:
-                layerStyleVnetColors = utils.CmdToTuple(cmd_colors)
+                layerStyleVnetColors = cmdlist_to_tuple(cmd_colors)
 
                 RunCommand(layerStyleVnetColors[0],
-                        **layerStyleVnetColors[1])
+                           **layerStyleVnetColors[1])
         else:
             self.giface.updateMap.emit(render=True, renderVector=True)
 
+
 class VNETAnalyses:
+
     def __init__(self, data, onAnDone, goutput, tmp_maps):
         self.data = data
 
@@ -405,14 +422,16 @@ class VNETAnalyses:
 
         cmdPts = []
         for cat in cats:
-            if  len(catPts[cat[0]]) < 1:#TODO
-                GMessage(message=_("Please choose '%s' and '%s' point.") % (cats[0][1], cats[1][1]))
+            if len(catPts[cat[0]]) < 1:  # TODO
+                GMessage(
+                    message=_("Please choose '%s' and '%s' point.") %
+                    (cats[0][1], cats[1][1]))
                 return False
             cmdPts.append(catPts[cat[0]][0])
 
         resId = 1
-        inpPoints = str(resId) + " " + str(cmdPts[0][0]) + " " + str(cmdPts[0][1]) + \
-                                 " " + str(cmdPts[1][0]) + " " + str(cmdPts[1][1])
+        inpPoints = str(resId) + " " + str(cmdPts[0][0]) + " " + str(
+            cmdPts[0][1]) + " " + str(cmdPts[1][0]) + " " + str(cmdPts[1][1])
 
         self.coordsTmpFile = grass.tempfile()
         coordsTmpFileOpened = open(self.coordsTmpFile, 'w')
@@ -422,28 +441,27 @@ class VNETAnalyses:
         if flags["t"]:
             cmdParams.append("-t")
 
-            self.tmpTurnAn = AddTmpMapAnalysisMsg("vnet_tunr_an_tmp", self.tmp_maps)
+            self.tmpTurnAn = AddTmpMapAnalysisMsg(
+                "vnet_tunr_an_tmp", self.tmp_maps)
             if not self.tmpTurnAn:
                 return False
 
             mapName, mapSet = ParseMapStr(self.tmpTurnAn.GetVectMapName())
-            cmdCopy = [ 
-                        "g.copy",
-                        "vector=%s,%s" % (params["input"], mapName), 
-                        "--overwrite",                             
-                       ]
+            cmdCopy = [
+                "g.copy",
+                "vector=%s,%s" % (params["input"], mapName),
+                "--overwrite",
+            ]
             cmdParams.append("input=" + self.tmpTurnAn.GetVectMapName())
 
-            ret, msg, err = RunCommand('g.copy',
-                                        getErrorMsg = True,
-                                        vector = "%s,%s" % (params['input'], mapName),
-                                        read = True,
-                                        overwrite = True)
+            ret, msg, err = RunCommand(
+                'g.copy', getErrorMsg=True, vector="%s,%s" %
+                (params['input'], mapName), read=True, overwrite=True)
 
-            self._updateTtbByGlobalCosts(self.tmpTurnAn.GetVectMapName(), 
+            self._updateTtbByGlobalCosts(self.tmpTurnAn.GetVectMapName(),
                                          int(params["turn_layer"]))
-            
-            #self._prepareCmd(cmdCopy)
+
+            # self._prepareCmd(cmdCopy)
             #self.goutput.RunCmd(command = cmdCopy)
         else:
             cmdParams.append("input=" + params["input"])
@@ -453,16 +471,20 @@ class VNETAnalyses:
         cmdParams.append("dmax=" + str(params["max_dist"]))
 
         cmdParams.append("--overwrite")
-        self._prepareCmd(cmd = cmdParams)
-        
+        self._prepareCmd(cmd=cmdParams)
+
         if flags["t"]:
-            self.goutput.RunCmd(command = cmdParams, onDone = self._vnetPathRunTurnsAnDone)
+            self.goutput.RunCmd(
+                command=cmdParams,
+                onDone=self._vnetPathRunTurnsAnDone)
         else:
-            self.goutput.RunCmd(command = cmdParams, onDone = self._vnetPathRunAnDone)
+            self.goutput.RunCmd(
+                command=cmdParams,
+                onDone=self._vnetPathRunAnDone)
 
     def _vnetPathRunTurnsAnDone(self, event):
-        #TODO
-        #self.tmp_maps.DeleteTmpMap(self.tmpTurnAn)
+        # TODO
+        # self.tmp_maps.DeleteTmpMap(self.tmpTurnAn)
         self._vnetPathRunAnDone(event)
 
     def _vnetPathRunAnDone(self, event):
@@ -475,7 +497,7 @@ class VNETAnalyses:
         for c in event.cmd:
             if "output=" in c:
                 output = c.split("=")[1]
-                break  
+                break
 
         self.onAnDone(event.cmd, event.returncode, output)
 
@@ -490,14 +512,17 @@ class VNETAnalyses:
         for cat_name, pts_coor in catPts.iteritems():
 
             for coor in pts_coor:
-                cat_num = str(GetNearestNodeCat(e = coor[0], 
-                                                n = coor[1], 
-                                                field = int(params["turn_cat_layer"],
-                                                tresh = params["max_dist"]), 
-                                                vectMap = params["input"]))
+                cat_num = str(
+                    GetNearestNodeCat(
+                        e=coor[0],
+                        n=coor[1],
+                        field=int(
+                            params["turn_cat_layer"],
+                            tresh=params["max_dist"]),
+                        vectMap=params["input"]))
                 if cat_num < 0:
                     continue
-                if cats.has_key(cat_name):
+                if cat_name in cats:
                     cats[cat_name].append(cat_num)
                 else:
                     cats[cat_name] = [cat_num]
@@ -505,52 +530,51 @@ class VNETAnalyses:
         for cat_name, cat_nums in cats.iteritems():
             cmdParams.append(cat_name + "=" + ",".join(cat_nums))
 
-        self.tmpTurnAn = AddTmpMapAnalysisMsg("vnet_tunr_an_tmp", self.tmp_maps)
+        self.tmpTurnAn = AddTmpMapAnalysisMsg(
+            "vnet_tunr_an_tmp", self.tmp_maps)
         if not self.tmpTurnAn:
             return False
 
         # create and run commands which goes to analysis thread
 
         mapName, mapSet = ParseMapStr(self.tmpTurnAn.GetVectMapName())
-        cmdCopy = [ 
-                    "g.copy",
-                    "vector=%s,%s" % (params['input'], mapName), 
-                    "--overwrite",                             
-                   ]
+        cmdCopy = [
+            "g.copy",
+            "vector=%s,%s" % (params['input'], mapName),
+            "--overwrite",
+        ]
         cmdParams.append("input=" + self.tmpTurnAn.GetVectMapName())
 
         ret, msg, err = RunCommand('g.copy',
-                                    getErrorMsg = True,
-                                    vector = "%s,%s" % (params['input'], mapName),
-                                    read = True,
-                                    overwrite = True)
+                                   getErrorMsg=True,
+                                   vector="%s,%s" % (params['input'], mapName),
+                                   read=True,
+                                   overwrite=True)
 
-        self._updateTtbByGlobalCosts(self.tmpTurnAn.GetVectMapName(), 
+        self._updateTtbByGlobalCosts(self.tmpTurnAn.GetVectMapName(),
                                      int(params["turn_layer"]))
 
-
         self._setCmdForSpecificAn(cmdParams)
 
         cmdParams.append("-t")
 
         self._prepareCmd(cmdParams)
-        self.goutput.RunCmd(command = cmdParams, onDone = self._runTurnsAnDone)
+        self.goutput.RunCmd(command=cmdParams, onDone=self._runTurnsAnDone)
 
     def _updateTtbByGlobalCosts(self, vectMapName, tlayer):
-        #TODO get layer number do not use it directly
+        # TODO get layer number do not use it directly
         intervals = self.turnsData["global"].GetData()
 
-        cmdUpdGlob = [ 
-                      "v.db.update",
-                      "map=", self.inputData["input"].GetValue(), 
-                      "layer=%d" % tlayer,
-                      "column=cost",
-                    ]
+        cmdUpdGlob = [
+            "v.db.update",
+            "map=", self.inputData["input"].GetValue(),
+            "layer=%d" % tlayer,
+            "column=cost",
+        ]
 
         dbInfo = VectorDBInfo(vectMapName)
         table = dbInfo.GetTable(tlayer)
-        driver,  database = dbInfo.GetDbSettings(tlayer)
-
+        driver, database = dbInfo.GetDbSettings(tlayer)
 
         sqlFile = grass.tempfile()
         sqlFile_f = open(sqlFile, 'w')
@@ -561,36 +585,35 @@ class VNETAnalyses:
             cost = ival[2]
 
             if to_angle < from_angle:
-                to_angle = math.pi * 2  + to_angle
-            #if angle < from_angle:
+                to_angle = math.pi * 2 + to_angle
+            # if angle < from_angle:
             #    angle = math.pi * 2  + angle
 
             where = " WHERE (((angle < {0}) AND ({2} + angle >= {0} AND {2} + angle < {1})) OR \
                             ((angle >= {0}) AND (angle >= {0} AND angle < {1}))) AND cost==0.0 ".format(str(from_angle), str(to_angle), str(math.pi * 2))
 
-            stm = ("UPDATE %s SET cost=%f " % (table, cost)) + where + ";\n";
+            stm = ("UPDATE %s SET cost=%f " % (table, cost)) + where + ";\n"
             sqlFile_f.write(stm)
 
         sqlFile_f.close()
 
-            #TODO imporve parser and run in thread
+        # TODO imporve parser and run in thread
 
-   
         ret, msg, err = RunCommand('db.execute',
-                               getErrorMsg = True,
-                               input = sqlFile,
-                               read = True,
-                               driver = driver,
-                               database = database)
+                                   getErrorMsg=True,
+                                   input=sqlFile,
+                                   read=True,
+                                   driver=driver,
+                                   database=database)
 
         try_remove(sqlFile)
 
     def _runTurnsAnDone(self, event):
         """Called when analysis is done"""
-        #self.tmp_maps.DeleteTmpMap(self.tmpTurnAn) #TODO remove earlier (OnDone lambda?)
- 
-        self._onDone(event)
+        # self.tmp_maps.DeleteTmpMap(self.tmpTurnAn) #TODO remove earlier
+        # (OnDone lambda?)
 
+        self._onDone(event)
 
     def _runAn(self, analysis, output, params, flags, catPts):
         """Called for all v.net.* analysis (except v.net.path)"""
@@ -604,27 +627,27 @@ class VNETAnalyses:
 
         if len(cats) > 1:
             for cat in cats:
-                if  len(catPts[cat[0]]) < 1:
-                    GMessage(parent = self, 
-                            message = _("Please choose '%s' and '%s' point.") \
-                                        % (cats[0][1], cats[1][1]))
+                if len(catPts[cat[0]]) < 1:
+                    GMessage(parent=self,
+                             message=_("Please choose '%s' and '%s' point.")
+                             % (cats[0][1], cats[1][1]))
                     return False
         else:
             for cat in cats:
-                if  len(catPts[cat[0]]) < 2:
-                    GMessage(parent = self, 
-                             message = _("Please choose at least two points."))
-                    return False      
+                if len(catPts[cat[0]]) < 2:
+                    GMessage(parent=self,
+                             message=_("Please choose at least two points."))
+                    return False
 
         # TODO add also to thread for analysis?
         vcatResult = RunCommand("v.category",
-                           input = params['input'],
-                           option = "report",
-                           flags = "g",
-                           read = True)     
+                                input=params['input'],
+                                option="report",
+                                flags="g",
+                                read=True)
 
         vcatResult = vcatResult.splitlines()
-        for cat in vcatResult:#TODO
+        for cat in vcatResult:  # TODO
             cat = cat.split()
             if "all" in cat:
                 maxCat = int(cat[4])
@@ -632,11 +655,12 @@ class VNETAnalyses:
 
         layerNum = params["node_layer"]
 
-        pt_ascii, catsNums = self._getAsciiPts (catPts = catPts, 
-                                                maxCat = maxCat, 
-                                                layerNum = layerNum)
+        pt_ascii, catsNums = self._getAsciiPts(catPts=catPts,
+                                               maxCat=maxCat,
+                                               layerNum=layerNum)
 
-        self.tmpPtsAsciiFile = grass.tempfile()#TODO better tmp files cleanup (make class for managing tmp files)
+        # TODO better tmp files cleanup (make class for managing tmp files)
+        self.tmpPtsAsciiFile = grass.tempfile()
         tmpPtsAsciiFileOpened = open(self.tmpPtsAsciiFile, 'w')
         tmpPtsAsciiFileOpened.write(pt_ascii)
         tmpPtsAsciiFileOpened.close()
@@ -645,55 +669,58 @@ class VNETAnalyses:
         if not self.tmpInPts:
             return False
 
-        self.tmpInPtsConnected = AddTmpMapAnalysisMsg("vnet_tmp_in_pts_connected", self.tmp_maps)
+        self.tmpInPtsConnected = AddTmpMapAnalysisMsg(
+            "vnet_tmp_in_pts_connected", self.tmp_maps)
         if not self.tmpInPtsConnected:
             return False
 
         cmdParams.append("input=" + self.tmpInPtsConnected.GetVectMapName())
-        cmdParams.append("--overwrite")  
-        
+        cmdParams.append("--overwrite")
+
         self._setCmdForSpecificAn(cmdParams)
-        
+
         for catName, catNum in catsNums.iteritems():
             if catNum[0] == catNum[1]:
                 cmdParams.append(catName + "=" + str(catNum[0]))
             else:
-                cmdParams.append(catName + "=" + str(catNum[0]) + "-" + str(catNum[1]))
+                cmdParams.append(
+                    catName + "=" + str(catNum[0]) + "-" + str(catNum[1]))
 
         # create and run commands which goes to analysis thread
-        cmdVEdit = [ 
-                    "v.edit",
-                    "map=" + self.tmpInPts.GetVectMapName(), 
-                    "input=" + self.tmpPtsAsciiFile,
-                    "tool=create",
-                    "--overwrite", 
-                    "-n"                              
-                   ]
+        cmdVEdit = [
+            "v.edit",
+            "map=" + self.tmpInPts.GetVectMapName(),
+            "input=" + self.tmpPtsAsciiFile,
+            "tool=create",
+            "--overwrite",
+            "-n"
+        ]
 
         self._prepareCmd(cmdVEdit)
-        self.goutput.RunCmd(command = cmdVEdit)
+        self.goutput.RunCmd(command=cmdVEdit)
 
         cmdVNet = [
-                    "v.net",
-                    "points=" + self.tmpInPts.GetVectMapName(), 
-                    "input=" + params['input'],
-                    "output=" + self.tmpInPtsConnected.GetVectMapName(),
-                    "arc_layer=" +  params["arc_layer"],
-                    "node_layer=" +  params["node_layer"], 
-                    "operation=connect",
-                    "thresh=" + str(params["max_dist"]),             
-                    "--overwrite"                         
-                  ] #TODO snapping to nodes optimization
+            "v.net",
+            "points=" + self.tmpInPts.GetVectMapName(),
+            "input=" + params['input'],
+            "output=" + self.tmpInPtsConnected.GetVectMapName(),
+            "arc_layer=" + params["arc_layer"],
+            "node_layer=" + params["node_layer"],
+            "operation=connect",
+            "thresh=" + str(params["max_dist"]),
+            "--overwrite"
+        ]  # TODO snapping to nodes optimization
 
         self._prepareCmd(cmdVNet)
-        self.goutput.RunCmd(command = cmdVNet)
+        self.goutput.RunCmd(command=cmdVNet)
 
         self._prepareCmd(cmdParams)
-        self.goutput.RunCmd(command = cmdParams, onDone = self._runAnDone)
+        self.goutput.RunCmd(command=cmdParams, onDone=self._runAnDone)
 
     def _runAnDone(self, event):
         """Called when analysis is done"""
-        self.tmp_maps.DeleteTmpMap(self.tmpInPts) #TODO remove earlier (OnDone lambda?)
+        self.tmp_maps.DeleteTmpMap(
+            self.tmpInPts)  # TODO remove earlier (OnDone lambda?)
         self.tmp_maps.DeleteTmpMap(self.tmpInPtsConnected)
         try_remove(self.tmpPtsAsciiFile)
 
@@ -703,13 +730,14 @@ class VNETAnalyses:
         self._onDone(event)
 
     def _setInputParams(self, analysis, params, flags):
-        """Return list of chosen values (vector map, layers). 
+        """Return list of chosen values (vector map, layers).
 
-        The list items are in form to be used in command for analysis e.g. 'arc_layer=1'.    
+        The list items are in form to be used in command for analysis e.g. 'arc_layer=1'.
         """
 
         inParams = []
-        for col, v in self.data.GetAnalysisProperties()["cmdParams"]["cols"].iteritems():
+        for col, v in self.data.GetAnalysisProperties()["cmdParams"][
+                "cols"].iteritems():
 
             if "inputField" in v:
                 colInptF = v["inputField"]
@@ -718,7 +746,8 @@ class VNETAnalyses:
 
             inParams.append(col + '=' + params[colInptF])
 
-        for layer in ['arc_layer', 'node_layer', 'turn_layer', 'turn_cat_layer']:
+        for layer in ['arc_layer', 'node_layer',
+                      'turn_layer', 'turn_cat_layer']:
             if not flags["t"] and layer in ['turn_layer', 'turn_cat_layer']:
                 continue
             # TODO
@@ -738,19 +767,20 @@ class VNETAnalyses:
         ptByCats = {}
         for cat in anProps["cmdParams"]["cats"]:
             ptByCats[cat[0]] = []
- 
+
         for i in range(self.pts_data.GetPointsCount()):
             pt_data = self.pts_data.GetPointData(i)
             if pt_data["use"]:
                 for i_cat, cat in enumerate(cats):
-                    #i_cat + 1 - we ave to increment it because pt_data["type"] includes "" in first place
-                    if (i_cat + 1) == pt_data["type"] or len(ptByCats) == 1: 
+                    # i_cat + 1 - we ave to increment it because
+                    # pt_data["type"] includes "" in first place
+                    if (i_cat + 1) == pt_data["type"] or len(ptByCats) == 1:
                         coords = (pt_data['e'], pt_data['n'])
                         ptByCats[cat[0]].append(coords)
 
         return ptByCats
 
-    def _getAsciiPts (self, catPts, maxCat, layerNum):
+    def _getAsciiPts(self, catPts, maxCat, layerNum):
         """Return points separated by categories in GRASS ASCII vector representation"""
         catsNums = {}
         pt_ascii = ""
@@ -762,7 +792,7 @@ class VNETAnalyses:
             for pt in pts:
                 catNum += 1
                 pt_ascii += "P 1 1\n"
-                pt_ascii += str(pt[0]) + " " + str(pt[1]) +  "\n"
+                pt_ascii += str(pt[0]) + " " + str(pt[1]) + "\n"
                 pt_ascii += str(layerNum) + " " + str(catNum) + "\n"
 
             catsNums[catName].append(catNum)
@@ -786,27 +816,32 @@ class VNETAnalyses:
             cmdParams.append("from_layer=1")
             cmdParams.append("to_layer=1")
         elif cmdParams[0] == "v.net.flow":
-            #self.vnetFlowTmpCut = self.NewTmpVectMapToHist('vnet_tmp_flow_cut') TODO
-            self.vnetFlowTmpCut = AddTmpMapAnalysisMsg('vnet_tmp_flow_cut', self.tmp_maps)
+            # self.vnetFlowTmpCut =
+            # self.NewTmpVectMapToHist('vnet_tmp_flow_cut') TODO
+            self.vnetFlowTmpCut = AddTmpMapAnalysisMsg(
+                'vnet_tmp_flow_cut', self.tmp_maps)
             if not self.vnetFlowTmpCut:
-                return          
-            cmdParams.append("cut=" +  self.vnetFlowTmpCut.GetVectMapName())         
+                return
+            cmdParams.append("cut=" + self.vnetFlowTmpCut.GetVectMapName())
         elif cmdParams[0] == "v.net.iso":
-            costs, valid = self.data.GetParam("iso_lines") #TODO valid
+            costs, valid = self.data.GetParam("iso_lines")  # TODO valid
             cmdParams.append("costs=" + costs)
 
+
 class VNETHistory():
+
     def __init__(self, guiparent, data, tmp_maps):
         self.history = History()
         self.guiparent = guiparent
 
         self.tmp_maps = tmp_maps
 
-        # variable, which appends  unique number to every name of map, which is saved into history
+        # variable, which appends  unique number to every name of map, which is
+        # saved into history
         self.histTmpVectMapNum = 0
-        
+
         self.data = data
-    
+
     def Undo(self):
         """Step back in history"""
         histStepData = self.history.GetPrev()
@@ -835,7 +870,7 @@ class VNETHistory():
         if not removedHistData:
             return
 
-        # delete temporary maps in history steps which were deleted 
+        # delete temporary maps in history steps which were deleted
         for removedStep in removedHistData.itervalues():
             mapsNames = removedStep["tmp_data"]["maps"]
             for vectMapName in mapsNames:
@@ -843,24 +878,24 @@ class VNETHistory():
                 self.tmp_maps.DeleteTmpMap(tmpMap)
 
     def DeleteNewHistStepData(self):
-        # history - delete data in buffer for hist step  
+        # history - delete data in buffer for hist step
         self.history.DeleteNewHistStepData()
         # empty list for maps to be saved to history
-        self.tmpVectMapsToHist= []
+        self.tmpVectMapsToHist = []
 
     def _updateHistStepData(self, histStepData):
         """Updates dialog according to chosen history step"""
         # set analysis module
         analysis = histStepData["vnet_modules"]["curr_module"]
-        self.data.SetParams({"analysis" : analysis}, {})
+        self.data.SetParams({"analysis": analysis}, {})
 
         pts = []
         # add points to list
         for iPt in range(len(histStepData["points"])):
             ptDataHist = histStepData["points"]["pt" + str(iPt)]
-            
+
             e, n = ptDataHist["coords"]
-            pt_data = {"e" : e, "n" : n}
+            pt_data = {"e": e, "n": n}
 
             pt_data['type'] = int(ptDataHist["catIdx"])
 
@@ -872,7 +907,7 @@ class VNETHistory():
 
         self.data.GetPointsData().SetPoints(pts)
 
-        # update analysis result maps 
+        # update analysis result maps
         mapsNames = histStepData["tmp_data"]["maps"]
         for m in mapsNames:
             if "vnet_tmp_result" in m:
@@ -883,28 +918,30 @@ class VNETHistory():
         params = {}
         histInputData = histStepData["an_params"]
         for inpName, inp in histInputData.iteritems():
-            params[inpName] = str(inp) 
+            params[inpName] = str(inp)
             if inpName == "input":
                 inpMap = inp
 
         prevInpModTime = str(histStepData["other"]["input_modified"])
         currInpModTime = VectMap(None, inpMap).GetLastModified()
 
-        if currInpModTime.strip()!= prevInpModTime.strip():
-            dlg = wx.MessageDialog(parent = self.guiparent,
-                                   message = _("Input map '%s' for analysis was changed outside " + 
-                                               "vector network analysis tool.\n" +
-                                               "Topology column may not " +
-                                               "correspond to changed situation.") %\
-                                                inpMap,
-                                   caption = _("Input changed outside"),
-                                   style =  wx.ICON_INFORMATION| wx.CENTRE)
+        if currInpModTime.strip() != prevInpModTime.strip():
+            dlg = wx.MessageDialog(
+                parent=self.guiparent,
+                message=_(
+                    "Input map '%s' for analysis was changed outside " +
+                    "vector network analysis tool.\n" +
+                    "Topology column may not " +
+                    "correspond to changed situation.") %
+                inpMap,
+                caption=_("Input changed outside"),
+                style=wx.ICON_INFORMATION | wx.CENTRE)
             dlg.ShowModal()
             dlg.Destroy()
-    
-        #TODO 
+
+        # TODO
         flags = {}
-        return analysis, resultMapName, params, flags 
+        return analysis, resultMapName, params, flags
 
     def _saveAnInputToHist(self, analysis, params, flags):
         """Save all data needed for analysis into history buffer"""
@@ -916,42 +953,40 @@ class VNETHistory():
             ptName = "pt" + str(pt_id)
 
             coords = [data["e"], data["n"]]
-            self.history.Add(key = "points", 
-                             subkey = [ptName, "coords"], 
-                             value = coords)
+            self.history.Add(key="points",
+                             subkey=[ptName, "coords"],
+                             value=coords)
 
-            self.history.Add(key = "points", 
-                             subkey = [ptName, "catIdx"], 
-                             value = data['type'])
+            self.history.Add(key="points",
+                             subkey=[ptName, "catIdx"],
+                             value=data['type'])
 
-            self.history.Add(key = "points", 
-                             subkey = [ptName, "topology"], 
-                             value = data['topology'])
+            self.history.Add(key="points",
+                             subkey=[ptName, "topology"],
+                             value=data['topology'])
 
-
-            self.history.Add(key = "points", 
-                             subkey = [ptName, "checked"], 
-                             value = data["use"])
+            self.history.Add(key="points",
+                             subkey=[ptName, "checked"],
+                             value=data["use"])
 
             for param, value in params.iteritems():
 
                 if param == "input":
                     inpMap = VectMap(self, value)
-                    self.history.Add(key = "other", 
-                                     subkey = "input_modified", 
-                                     value = inpMap.GetLastModified())  
-                    param_val =  value
+                    self.history.Add(key="other",
+                                     subkey="input_modified",
+                                     value=inpMap.GetLastModified())
+                    param_val = value
                 else:
-                    param_val =  value
-                 
-                self.history.Add(key = "an_params", 
-                                 subkey = param, 
-                                 value = param_val)
-            
-        self.history.Add(key = "vnet_modules", 
-                         subkey = "curr_module", 
-                         value =  analysis)
+                    param_val = value
+
+                self.history.Add(key="an_params",
+                                 subkey=param,
+                                 value=param_val)
 
+        self.history.Add(key="vnet_modules",
+                         subkey="curr_module",
+                         value=analysis)
 
     def NewTmpVectMapToHist(self, prefMapName):
         """Add new vector map, which will be saved into history step"""
@@ -962,33 +997,35 @@ class VNETHistory():
         tmpMap = AddTmpMapAnalysisMsg(mapName, self.tmp_maps)
         if not tmpMap:
             return tmpMap
-           
+
         self.tmpVectMapsToHist.append(tmpMap.GetVectMapName())
-        self.history.Add(key = "tmp_data", 
-                         subkey = "maps",
-                         value = self.tmpVectMapsToHist)
+        self.history.Add(key="tmp_data",
+                         subkey="maps",
+                         value=self.tmpVectMapsToHist)
 
         return tmpMap
 
-def AddTmpMapAnalysisMsg(mapName, tmp_maps): #TODO 
-        """Wraped AddTmpVectMap"""
-        msg = _("Temporary map %s  already exists.\n"  + 
-                "Do you want to continue in analysis and overwrite it?") \
-                 % (mapName +'@' + grass.gisenv()['MAPSET'])
-        tmpMap = tmp_maps.AddTmpVectMap(mapName, msg)
-        return tmpMap
+
+def AddTmpMapAnalysisMsg(mapName, tmp_maps):  # TODO
+    """Wraped AddTmpVectMap"""
+    msg = _("Temporary map %s  already exists.\n" +
+            "Do you want to continue in analysis and overwrite it?") \
+        % (mapName + '@' + grass.gisenv()['MAPSET'])
+    tmpMap = tmp_maps.AddTmpVectMap(mapName, msg)
+    return tmpMap
 
 
 class SnappingNodes(wx.EvtHandler):
+
     def __init__(self, giface, data, tmp_maps, mapWin):
 
-        self.giface = giface        
+        self.giface = giface
         self.data = data
         self.tmp_maps = tmp_maps
         self.mapWin = mapWin
 
         wx.EvtHandler.__init__(self)
-        self.snapping= Signal('VNETManager.snapping')
+        self.snapping = Signal('VNETManager.snapping')
 
         # Stores all data related to snapping
         self.snapData = {}
@@ -997,61 +1034,62 @@ class SnappingNodes(wx.EvtHandler):
         """Start/stop snapping mode"""
 
         if not haveCtypes:
-            GMessage(parent = self,
-                     message = _("Unable to use ctypes. \n") + \
-                               _("Snapping mode can not be activated."))
+            GMessage(parent=self,
+                     message=_("Unable to use ctypes. \n") +
+                     _("Snapping mode can not be activated."))
             return -1
 
         if not activate:
 
             if self.tmp_maps.HasTmpVectMap("vnet_snap_points"):
-                self.snapPts.DeleteRenderLayer() 
-                
+                self.snapPts.DeleteRenderLayer()
+
                 self.giface.updateMap.emit(render=False, renderVector=False)
 
-            if self.snapData.has_key('cmdThread'):
+            if 'cmdThread' in self.snapData:
                 self.snapData['cmdThread'].abort()
 
             self.data.SetSnapping(False)
-            
-            self.snapping.emit(evt = "deactivated")
 
-            return  -1
+            self.snapping.emit(evt="deactivated")
+
+            return -1
 
         self.data.SetSnapping(activate)
 
         params, inv_params, flags = self.data.GetParams()
-        if not self.data.InputsErrorMsgs(msg = _("Snapping mode can not be activated."),
-                                     analysis = None,
-                                     params = params,
-                                     inv_params = inv_params,
-                                     flags = flags,
-                                     relevant_params = ["input", "node_layer"]):
+        if not self.data.InputsErrorMsgs(
+                msg=_("Snapping mode can not be activated."),
+                analysis=None, params=params, inv_params=inv_params, flags=flags,
+                relevant_params=["input", "node_layer"]):
             return -1
 
         if not self.tmp_maps.HasTmpVectMap("vnet_snap_points"):
-            endStr = _("Do you really want to activate snapping and overwrite it?")
-            self.snapPts = self.tmp_maps.AddTmpVectMap("vnet_snap_points", endStr)
+            endStr = _(
+                "Do you really want to activate snapping and overwrite it?")
+            self.snapPts = self.tmp_maps.AddTmpVectMap(
+                "vnet_snap_points", endStr)
 
             if not self.snapPts:
-                return -1 
+                return -1
 
         elif self.snapPts.VectMapState() == 0:
-                dlg = wx.MessageDialog(message = _("Temporary map '%s' was changed outside " +
-                                                    "vector analysis tool.\n" 
-                                                    "Do you really want to activate " + 
-                                                    "snapping and overwrite it? ") % \
-                                                    self.snapPts.GetVectMapName(),
-                                        caption = _("Overwrite map"),
-                                        style = wx.YES_NO | wx.NO_DEFAULT |
-                                                wx.ICON_QUESTION | wx.CENTRE)
-
-                ret = dlg.ShowModal()
-                dlg.Destroy()
-                
-                if ret == wx.ID_NO:
-                    self.tmp_maps.DeleteTmpMap(self.snapPts)
-                    return -1
+            dlg = wx.MessageDialog(
+                message=_(
+                    "Temporary map '%s' was changed outside " +
+                    "vector analysis tool.\n"
+                    "Do you really want to activate " +
+                    "snapping and overwrite it? ") %
+                self.snapPts.GetVectMapName(),
+                caption=_("Overwrite map"),
+                style=wx.YES_NO | wx.NO_DEFAULT | wx.ICON_QUESTION | wx.CENTRE)
+
+            ret = dlg.ShowModal()
+            dlg.Destroy()
+
+            if ret == wx.ID_NO:
+                self.tmp_maps.DeleteTmpMap(self.snapPts)
+                return -1
 
         self.data.SetSnapping(True)
 
@@ -1059,21 +1097,21 @@ class SnappingNodes(wx.EvtHandler):
         inpName, mapSet = inpFullName.split("@")
         computeNodes = True
 
-        if not self.snapData.has_key("inputMap"):
+        if "inputMap" not in self.snapData:
             pass
         elif inpFullName != self.snapData["inputMap"].GetVectMapName():
             self.snapData["inputMap"] = VectMap(None, inpFullName)
         elif self.snapData["inputMap"].VectMapState() == 1:
-                computeNodes = False
-    
+            computeNodes = False
+
         # new map needed
         if computeNodes:
-            if not self.snapData.has_key('cmdThread'):
+            if 'cmdThread' not in self.snapData:
                 self.snapData['cmdThread'] = CmdThread(self)
             else:
                 self.snapData['cmdThread'].abort()
 
-            cmd = ["v.to.points", "input=" + params['input'], 
+            cmd = ["v.to.points", "input=" + params['input'],
                                   "output=" + self.snapPts.GetVectMapName(),
                                   "use=node", "--overwrite"]
             # process GRASS command with argument
@@ -1083,16 +1121,16 @@ class SnappingNodes(wx.EvtHandler):
             self.Bind(EVT_CMD_DONE, self._onNodesDone)
             self.snapData['cmdThread'].RunCmd(cmd)
 
-            self.snapping.emit(evt = "computing_points")
+            self.snapping.emit(evt="computing_points")
 
             return 0
         # map is already created and up to date for input data
         else:
             self.snapPts.AddRenderLayer()
-            
+
             self.giface.updateMap.emit(render=True, renderVector=True)
 
-            self.snapping.emit(evt = "computing_points_done")
+            self.snapping.emit(evt="computing_points_done")
 
             return 1
 
@@ -1100,8 +1138,8 @@ class SnappingNodes(wx.EvtHandler):
         """Update map window, when map with nodes to snap is created"""
         if not event.aborted:
             self.snapPts.SaveVectMapState()
-            self.snapPts.AddRenderLayer() 
+            self.snapPts.AddRenderLayer()
 
             self.giface.updateMap.emit(render=True, renderVector=True)
 
-            self.snapping.emit(evt = "computing_points_done")
+            self.snapping.emit(evt="computing_points_done")
diff --git a/gui/wxpython/vnet/vnet_data.py b/gui/wxpython/vnet/vnet_data.py
index 0c23ef8..1ae6081 100644
--- a/gui/wxpython/vnet/vnet_data.py
+++ b/gui/wxpython/vnet/vnet_data.py
@@ -27,24 +27,27 @@ import types
 from copy import deepcopy
 
 from grass.script.utils import try_remove
-from grass.script     import core as grass
+from grass.script import core as grass
+from grass.script.task import cmdlist_to_tuple
 
 import wx
 
 
-from core             import utils
-from core.gcmd        import RunCommand, GMessage
-from core.settings    import UserSettings
+from core import utils
+from core.gcmd import RunCommand, GMessage
+from core.settings import UserSettings
 from core.utils import _
 
-from vnet.vnet_utils  import ParseMapStr, SnapToNode
+from vnet.vnet_utils import ParseMapStr, SnapToNode
 
-from gui_core.gselect        import VectorDBInfo
+from gui_core.gselect import VectorDBInfo
 from grass.pydispatch.signal import Signal
 
-from vnet.vnet_utils  import DegreesToRadians, RadiansToDegrees
+from vnet.vnet_utils import DegreesToRadians, RadiansToDegrees
+
 
 class VNETData:
+
     def __init__(self, guiparent, mapWin):
 
         # setting initialization
@@ -74,14 +77,14 @@ class VNETData:
     def GetGlobalTurnsData(self):
         return self.global_turns
 
-    def GetRelevantParams(self, analysis = None):
+    def GetRelevantParams(self, analysis=None):
         if analysis:
             return self.an_props.GetRelevantParams(analysis)
         else:
             analysis, valid = self.an_params.GetParam("analysis")
             return self.an_props.GetRelevantParams(analysis)
 
-    def GetAnalysisProperties(self, analysis = None):
+    def GetAnalysisProperties(self, analysis=None):
         if analysis:
             return self.an_props[analysis]
         else:
@@ -96,97 +99,113 @@ class VNETData:
 
     def SetParams(self, params, flags):
         return self.an_params.SetParams(params, flags)
-    
+
     def SetSnapping(self, activate):
         self.an_points.SetSnapping(activate)
 
     def GetSnapping(self):
         return self.an_points.GetSnapping()
-    
+
     def GetLayerStyle(self):
         """Returns cmd for d.vect, with set style for analysis result"""
         analysis, valid = self.an_params.GetParam("analysis")
 
         resProps = self.an_props[analysis]["resultProps"]
 
-        width = UserSettings.Get(group='vnet', key='res_style', subkey= "line_width")
-        layerStyleCmd = ["layer=1",'width=' + str(width)]
+        width = UserSettings.Get(
+            group='vnet',
+            key='res_style',
+            subkey="line_width")
+        layerStyleCmd = ["layer=1", 'width=' + str(width)]
 
         if "catColor" in resProps:
             layerStyleCmd.append('flags=c')
         elif "singleColor" in resProps:
-            col = UserSettings.Get(group='vnet', key='res_style', subkey= "line_color")
-            layerStyleCmd.append('color=' + str(col[0]) + ':' + str(col[1]) + ':' + str(col[2]))        
+            col = UserSettings.Get(
+                group='vnet',
+                key='res_style',
+                subkey="line_color")
+            layerStyleCmd.append(
+                'color=' + str(col[0]) + ':' + str(col[1]) + ':' + str(col[2]))
 
         layerStyleVnetColors = []
         if "attrColColor" in resProps:
-            colorStyle = UserSettings.Get(group='vnet', key='res_style', subkey= "color_table")
-            invert = UserSettings.Get(group='vnet', key='res_style', subkey= "invert_colors")
+            colorStyle = UserSettings.Get(
+                group='vnet', key='res_style', subkey="color_table")
+            invert = UserSettings.Get(
+                group='vnet',
+                key='res_style',
+                subkey="invert_colors")
 
             layerStyleVnetColors = [
-                                    "v.colors",
-                                    "color=" + colorStyle,
-                                    "column=" + resProps["attrColColor"],
-                                   ]
+                "v.colors",
+                "color=" + colorStyle,
+                "column=" + resProps["attrColColor"],
+            ]
             if invert:
                 layerStyleVnetColors.append("-n")
 
         return layerStyleCmd, layerStyleVnetColors
 
-    def InputsErrorMsgs(self, msg, analysis, params, flags, inv_params, relevant_params):
+    def InputsErrorMsgs(self, msg, analysis, params, flags,
+                        inv_params, relevant_params):
         """Checks input data in Parameters tab and shows messages if some value is not valid
 
-            :param str msg: message added to start of message string 
+            :param str msg: message added to start of message string
             :return: True if checked inputs are OK
             :return: False if some of checked inputs is not ok
         """
 
-        if flags["t"] and  "turn_layer" not in relevant_params:
-            GMessage(parent = self.guiparent, message = _("Module <%s> does not support turns costs." % analysis))
+        if flags["t"] and "turn_layer" not in relevant_params:
+            GMessage(
+                parent=self.guiparent, message=_(
+                    "Module <%s> does not support turns costs." %
+                    analysis))
             return False
 
         errMapStr = ""
         if 'input' in inv_params:
             if params['input']:
-                errMapStr = _("Vector map '%s' does not exist.") %  (params['input'])
+                errMapStr = _("Vector map '%s' does not exist.") % (
+                    params['input'])
             else:
                 errMapStr = _("Vector map was not chosen.")
 
-
         if errMapStr:
-            GMessage(parent = self.guiparent,
-                     message = msg + "\n" + errMapStr)
+            GMessage(parent=self.guiparent,
+                     message=msg + "\n" + errMapStr)
             return False
 
         errLayerStr = ""
-        for layer, layerLabel in {'arc_layer' : _("arc layer"), 
-                                  'node_layer' : _("node layer"),
-                                  'turn_layer' : _("turntable layer"),
-                                  'turn_cat_layer' : _("unique categories layer")}.iteritems():
+        for layer, layerLabel in {
+                'arc_layer': _("arc layer"),
+                'node_layer': _("node layer"),
+                'turn_layer': _("turntable layer"),
+                'turn_cat_layer': _("unique categories layer")}.iteritems():
 
             if layer in ["turn_layer", "turn_cat_layer"] and not flags["t"]:
                 continue
             if layer in inv_params:
                 if params[layer]:
-                    errLayerStr += _("Chosen %s '%s' does not exist in vector map '%s'.\n") % \
-                                   (layerLabel, params[layer], params['input'])
+                    errLayerStr += _("Chosen %s '%s' does not exist in vector map '%s'.\n") % (
+                        layerLabel, params[layer], params['input'])
                 else:
                     errLayerStr += _("Choose existing %s.\n") % \
-                                   (layerLabel)
+                        (layerLabel)
         if errLayerStr:
-            GMessage(parent = self.guiparent,
-                     message = msg + "\n" + errLayerStr)
+            GMessage(parent=self.guiparent,
+                     message=msg + "\n" + errLayerStr)
             return False
 
         errColStr = ""
         for col in ["arc_column", "arc_backward_column", "node_column"]:
             if params[col] and col in inv_params and col in relevant_params:
-                errColStr += _("Chosen column '%s' does not exist in attribute table of layer '%s' of vector map '%s'.\n") % \
-                             (params[col], params[layer], params['input'])
+                errColStr += _("Chosen column '%s' does not exist in attribute table of layer '%s' of vector map '%s'.\n") % (
+                    params[col], params[layer], params['input'])
 
         if errColStr:
-            GMessage(parent = self.guiparent,
-                     message = msg + "\n" + errColStr)
+            GMessage(parent=self.guiparent,
+                     message=msg + "\n" + errColStr)
             return False
 
         return True
@@ -195,30 +214,32 @@ class VNETData:
         """Initialization of settings (if not already defined)"""
         # initializes default settings
         initSettings = [
-                        ['res_style', 'line_width', 5],
-                        ['res_style', 'line_color', (192,0,0)],
-                        ['res_style', 'color_table', 'byr'],
-                        ['res_style', 'invert_colors', False],
-                        ['point_symbol', 'point_size', 10],             
-                        ['point_symbol', 'point_width', 2],
-                        ['point_colors', "unused", (131,139,139)],
-                        ['point_colors', "used1cat", (192,0,0)],
-                        ['point_colors', "used2cat", (0,0,255)],
-                        ['point_colors', "selected", (9,249,17)],
-                        ['other', "snap_tresh", 10],
-                        ['other', "max_hist_steps", 5]
-                       ]
-
-        for init in initSettings: 
+            ['res_style', 'line_width', 5],
+            ['res_style', 'line_color', (192, 0, 0)],
+            ['res_style', 'color_table', 'byr'],
+            ['res_style', 'invert_colors', False],
+            ['point_symbol', 'point_size', 10],
+            ['point_symbol', 'point_width', 2],
+            ['point_colors', "unused", (131, 139, 139)],
+            ['point_colors', "used1cat", (192, 0, 0)],
+            ['point_colors', "used2cat", (0, 0, 255)],
+            ['point_colors', "selected", (9, 249, 17)],
+            ['other', "snap_tresh", 10],
+            ['other', "max_hist_steps", 5]
+        ]
+
+        for init in initSettings:
             UserSettings.ReadSettingsFile()
-            UserSettings.Append(dict = UserSettings.userSettings, 
-                                    group ='vnet',
-                                    key = init[0],
-                                    subkey =init[1],
-                                    value = init[2],
-                                    overwrite = False)
+            UserSettings.Append(dict=UserSettings.userSettings,
+                                group='vnet',
+                                key=init[0],
+                                subkey=init[1],
+                                value=init[2],
+                                overwrite=False)
+
 
 class VNETPointsData:
+
     def __init__(self, mapWin, an_data, an_params):
 
         self.mapWin = mapWin
@@ -234,36 +255,36 @@ class VNETPointsData:
         self.snapping = False
 
         self.data = []
-        self.cols = { "name" : ['use', 'type', 'topology', 'e', 'n'],
-                      "label" : [_('use'), _('type'), _('topology'), 'e', 'n'],
-                      "type" :  [None, ["", _("Start point"), _("End Point")], None, float, float],#TDO
-                      "def_vals" : [False, 0, "new point", 0, 0]  
-                    }
-
+        self.cols = {"name": ['use', 'type', 'topology', 'e', 'n'],
+                     "label": [_('use'), _('type'), _('topology'), 'e', 'n'],
+                     # TDO
+                     "type": [None, ["", _("Start point"), _("End Point")], None, float, float],
+                     "def_vals": [False, 0, "new point", 0, 0]
+                     }
 
         # registration graphics for drawing
-        self.pointsToDraw = self.mapWin.RegisterGraphicsToDraw(graphicsType = "point", 
-                                                               setStatusFunc = self.SetPointStatus)
+        self.pointsToDraw = self.mapWin.RegisterGraphicsToDraw(
+            graphicsType="point", setStatusFunc=self.SetPointStatus)
 
         self.SetPointDrawSettings()
 
         self.AddPoint()
         self.AddPoint()
 
-        self.SetPointData(0, {'use' : True, 'type' : 1})
-        self.SetPointData(1, {'use' : True, 'type' : 2})
+        self.SetPointData(0, {'use': True, 'type': 1})
+        self.SetPointData(1, {'use': True, 'type': 2})
 
         self.selected = 0
 
-    def  __del__(self):
+    def __del__(self):
         self.CleanUp()
 
     def CleanUp(self):
         self.mapWin.UnregisterGraphicsToDraw(self.pointsToDraw)
 
         if self.handlerRegistered:
-            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN, 
-                                                  self.OnMapClickHandler)
+            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN,
+                                                    self.OnMapClickHandler)
 
     def SetSnapping(self, activate):
         self.snapping = activate
@@ -273,10 +294,13 @@ class VNETPointsData:
 
     def AddPoint(self):
 
-        self.pointsToDraw.AddItem(coords = (self.cols["def_vals"][3], self.cols["def_vals"][4]))
+        self.pointsToDraw.AddItem(
+            coords=(
+                self.cols["def_vals"][3],
+                self.cols["def_vals"][4]))
         self.data.append(self.cols["def_vals"][:])
-        
-        self.pointsChanged.emit(method = "AddPoint", kwargs = {})
+
+        self.pointsChanged.emit(method="AddPoint", kwargs={})
 
     def DeletePoint(self, pt_id):
         item = self.pointsToDraw.GetItem(pt_id)
@@ -284,7 +308,7 @@ class VNETPointsData:
             self.pointsToDraw.DeleteItem(item)
             self.data.pop(pt_id)
 
-        self.pointsChanged.emit(method = "DeletePoint", kwargs = {"pt_id" : pt_id})
+        self.pointsChanged.emit(method="DeletePoint", kwargs={"pt_id": pt_id})
 
     def SetPoints(self, pts_data):
 
@@ -295,9 +319,12 @@ class VNETPointsData:
         for pt_data in pts_data:
             pt_data_list = self._ptDataToList(pt_data)
             self.data.append(pt_data_list)
-            self.pointsToDraw.AddItem(coords = (pt_data_list[3], pt_data_list[4]))
+            self.pointsToDraw.AddItem(
+                coords=(pt_data_list[3], pt_data_list[4]))
 
-        self.pointsChanged.emit(method = "SetPoints", kwargs = {"pts_data" : pts_data})
+        self.pointsChanged.emit(
+            method="SetPoints", kwargs={
+                "pts_data": pts_data})
 
     def SetPointData(self, pt_id, data):
         for col, v in data.iteritems():
@@ -307,18 +334,19 @@ class VNETPointsData:
             idx = self.cols["name"].index(col)
             self.data[pt_id][idx] = v
 
-
         # if type is changed checked columns must be recalculated by _usePoint
-        if data.has_key('type') and not data.has_key('use'):
+        if 'type' in data and 'use' not in data:
             data["use"] = self.GetPointData(pt_id)['use']
 
-        if data.has_key('use'):
+        if 'use' in data:
             if self._usePoint(pt_id, data["use"]) == -1:
-                data["use"] =  False
+                data["use"] = False
             idx = self.cols["name"].index("use")
             self.data[pt_id][idx] = data["use"]
 
-        self.pointsChanged.emit(method = "SetPointData", kwargs = {"pt_id" : pt_id, "data" : data})
+        self.pointsChanged.emit(
+            method="SetPointData", kwargs={
+                "pt_id": pt_id, "data": data})
 
     def GetPointData(self, pt_id):
         return self._ptListDataToPtData(self.data[pt_id])
@@ -334,45 +362,61 @@ class VNETPointsData:
         if itemIndex == self.selected:
             wxPen = "selected"
         elif not self.data[itemIndex][0]:
-                wxPen = "unused"
-                item.hide = False
+            wxPen = "unused"
+            item.hide = False
         elif len(cats) > 1:
-            idx = self.data[itemIndex][1] 
-            if idx == 2: #End/To/Sink point
+            idx = self.data[itemIndex][1]
+            if idx == 2:  # End/To/Sink point
                 wxPen = "used2cat"
             else:
-                wxPen = "used1cat"              
+                wxPen = "used1cat"
         else:
-            wxPen = "used1cat"       
+            wxPen = "used1cat"
 
         item.SetPropertyVal('label', str(itemIndex + 1))
-        item.SetPropertyVal('penName', wxPen)  
+        item.SetPropertyVal('penName', wxPen)
 
     def SetSelected(self, pt_id):
         self.selected = pt_id
-        self.pointsChanged.emit(method = "SetSelected", kwargs = {"pt_id" : pt_id})
+        self.pointsChanged.emit(method="SetSelected", kwargs={"pt_id": pt_id})
 
     def GetSelected(self):
         return self.selected
 
     def SetPointDrawSettings(self):
         """Set settings for drawing of points"""
-        ptSize = int(UserSettings.Get(group='vnet', key='point_symbol', subkey = 'point_size'))
+        ptSize = int(
+            UserSettings.Get(
+                group='vnet',
+                key='point_symbol',
+                subkey='point_size'))
         self.pointsToDraw.SetPropertyVal("size", ptSize)
 
         colors = UserSettings.Get(group='vnet', key='point_colors')
-        ptWidth = int(UserSettings.Get(group='vnet', key='point_symbol', subkey = 'point_width'))
+        ptWidth = int(
+            UserSettings.Get(
+                group='vnet',
+                key='point_symbol',
+                subkey='point_width'))
 
         textProp = self.pointsToDraw.GetPropertyVal("text")
         textProp["font"].SetPointSize(ptSize + 2)
-    
+
         for colKey, col in colors.iteritems():
             pen = self.pointsToDraw.GetPen(colKey)
             if pen:
                 pen.SetColour(wx.Colour(col[0], col[1], col[2], 255))
                 pen.SetWidth(ptWidth)
             else:
-                self.pointsToDraw.AddPen(colKey, wx.Pen(colour = wx.Colour(col[0], col[1], col[2], 255), width = ptWidth))
+                self.pointsToDraw.AddPen(
+                    colKey,
+                    wx.Pen(
+                        colour=wx.Colour(
+                            col[0],
+                            col[1],
+                            col[2],
+                            255),
+                        width=ptWidth))
 
     def ParametersChanged(self, method, kwargs):
         if "analysis" in kwargs["changed_params"].keys():
@@ -400,7 +444,7 @@ class VNETPointsData:
         for k, val in pt_data.iteritems():
             pt_list_data[self.cols["name"].index(k)] = val
 
-        return pt_list_data 
+        return pt_list_data
 
     def _ptListDataToPtData(self, pt_list_data):
 
@@ -414,8 +458,8 @@ class VNETPointsData:
         """Item is checked/unchecked"""
         analysis, valid = self.an_params.GetParam("analysis")
         cats = self.an_data[analysis]["cmdParams"]["cats"]
-        ##TODO move
-        #if self.updateMap:
+        # TODO move
+        # if self.updateMap:
         #    up_map_evt = gUpdateMap(render = False, renderVector = False)
         #    wx.PostEvent(self.dialog.mapWin, up_map_evt)
 
@@ -428,7 +472,10 @@ class VNETPointsData:
         # point without given type cannot be selected
         if checkedVal == 0:
             self.data[pt_id][use_idx] = False
-            self.pointsChanged.emit(method = "SetPointData", kwargs = {"pt_id" : pt_id, "data" : {"use" : False}})
+            self.pointsChanged.emit(
+                method="SetPointData", kwargs={
+                    "pt_id": pt_id, "data": {
+                        "use": False}})
             return -1
 
         if analysis == "v.net.path" and use:
@@ -436,28 +483,29 @@ class VNETPointsData:
 
     def _vnetPathUpdateUsePoints(self, checked_pt_id):
 
-            alreadyChecked = []
+        alreadyChecked = []
 
+        type_idx = self.cols["name"].index("type")
+        use_idx = self.cols["name"].index("use")
 
-            type_idx = self.cols["name"].index("type")
-            use_idx = self.cols["name"].index("use")
-
-            if checked_pt_id is not None:
-                checkedKey = checked_pt_id
-                alreadyChecked.append(self.data[checked_pt_id][type_idx])
-            else:
-                checkedKey = -1
-
-            for iKey, dt in enumerate(self.data):
-                pt_type = dt[type_idx]
+        if checked_pt_id is not None:
+            checkedKey = checked_pt_id
+            alreadyChecked.append(self.data[checked_pt_id][type_idx])
+        else:
+            checkedKey = -1
 
-                if ((pt_type in alreadyChecked and checkedKey != iKey) \
-                   or pt_type == 0) and self.data[iKey][use_idx]:
-                    self.data[iKey][use_idx] = False
-                    self.pointsChanged.emit(method = "SetPointData", kwargs = {"pt_id" : iKey, "data": {"use" : False}})
-                elif self.data[iKey][use_idx]:
-                    alreadyChecked.append(pt_type)
+        for iKey, dt in enumerate(self.data):
+            pt_type = dt[type_idx]
 
+            if ((pt_type in alreadyChecked and checkedKey != iKey)
+                    or pt_type == 0) and self.data[iKey][use_idx]:
+                self.data[iKey][use_idx] = False
+                self.pointsChanged.emit(
+                    method="SetPointData", kwargs={
+                        "pt_id": iKey, "data": {
+                            "use": False}})
+            elif self.data[iKey][use_idx]:
+                alreadyChecked.append(pt_type)
 
     def EditPointMode(self, activate):
         """Registers/unregisters mouse handler into map window"""
@@ -466,23 +514,25 @@ class VNETPointsData:
             return
 
         if activate:
-            self.mapWin.RegisterMouseEventHandler(wx.EVT_LEFT_DOWN, 
+            self.mapWin.RegisterMouseEventHandler(wx.EVT_LEFT_DOWN,
                                                   self.OnMapClickHandler,
                                                   'cross')
             self.handlerRegistered = True
         else:
-            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN, 
-                                                  self.OnMapClickHandler)
+            self.mapWin.UnregisterMouseEventHandler(wx.EVT_LEFT_DOWN,
+                                                    self.OnMapClickHandler)
             self.handlerRegistered = False
 
-        self.pointsChanged.emit(method = "EditMode", kwargs = {"activated" : activate})
+        self.pointsChanged.emit(
+            method="EditMode", kwargs={
+                "activated": activate})
 
     def IsEditPointModeActive(self):
         return self.handlerRegistered
 
     def OnMapClickHandler(self, event):
         """Take coordinates from map window"""
-        #TODO update snapping after input change
+        # TODO update snapping after input change
         if event == 'unregistered':
             self.handlerRegistered = False
             return
@@ -491,14 +541,16 @@ class VNETPointsData:
             self.AddPoint()
 
         e, n = self.mapWin.GetLastEN()
-        
+
         if self.snapping:
 
             # compute threshold
-            snapTreshPix = int(UserSettings.Get(group ='vnet', 
-                                                key = 'other', 
-                                                subkey = 'snap_tresh'))
-            res = max(self.mapWin.Map.region['nsres'], self.mapWin.Map.region['ewres'])
+            snapTreshPix = int(UserSettings.Get(group='vnet',
+                                                key='other',
+                                                subkey='snap_tresh'))
+            res = max(
+                self.mapWin.Map.region['nsres'],
+                self.mapWin.Map.region['ewres'])
             snapTreshDist = snapTreshPix * res
 
             params, err_params, flags = self.an_params.GetParams()
@@ -507,7 +559,7 @@ class VNETPointsData:
             if "input" in err_params:
                 msg = _("new point")
 
-            coords = SnapToNode(e, n, snapTreshDist, vectMap)     
+            coords = SnapToNode(e, n, snapTreshDist, vectMap)
             if coords:
                 e = coords[0]
                 n = coords[1]
@@ -519,10 +571,10 @@ class VNETPointsData:
         else:
             msg = _("new point")
 
-        self.SetPointData(self.selected, 
-                         {'topology' : msg,
-                          'e' : e,
-                          'n' : n})
+        self.SetPointData(self.selected,
+                          {'topology': msg,
+                           'e': e,
+                           'n': n})
 
         self.pointsToDraw.GetItem(self.selected).SetCoords([e, n])
 
@@ -531,8 +583,8 @@ class VNETPointsData:
         else:
             self.SetSelected(self.GetSelected() + 1)
 
-    def GetColumns(self, only_relevant  = True):
-        
+    def GetColumns(self, only_relevant=True):
+
         cols_data = deepcopy(self.cols)
 
         hidden_cols = []
@@ -540,7 +592,8 @@ class VNETPointsData:
         hidden_cols.append(self.cols["name"].index("n"))
 
         analysis, valid = self.an_params.GetParam("analysis")
-        if only_relevant and len(self.an_data[analysis]["cmdParams"]["cats"]) <= 1:
+        if only_relevant and len(self.an_data[analysis][
+                                 "cmdParams"]["cats"]) <= 1:
             hidden_cols.append(self.cols["name"].index("type"))
 
         i_red = 0
@@ -548,86 +601,95 @@ class VNETPointsData:
         for idx in hidden_cols:
             for dt in cols_data.itervalues():
                 dt.pop(idx - i_red)
-            i_red +=1
+            i_red += 1
 
         return cols_data
 
+
 class VNETAnalysisParameters:
+
     def __init__(self, an_props):
 
         self.an_props = an_props
 
-        self.params = {"analysis"   : self.an_props.used_an[0],
-                       "input"      : "",
-                       "arc_layer"     : "",
-                       "node_layer"     : "",
-                       "arc_column"   : "",
-                       "arc_backward_column"   : "",
-                       "node_column"    : "",
-                       "turn_layer"     : "",
-                       "turn_cat_layer"   : "",
-                       "iso_lines"  : "", #TODO check validity
-                       "max_dist"   : 0} #TODO check validity
+        self.params = {"analysis": self.an_props.used_an[0],
+                       "input": "",
+                       "arc_layer": "",
+                       "node_layer": "",
+                       "arc_column": "",
+                       "arc_backward_column": "",
+                       "node_column": "",
+                       "turn_layer": "",
+                       "turn_cat_layer": "",
+                       "iso_lines": "",  # TODO check validity
+                       "max_dist": 0}  # TODO check validity
 
-        self.flags = {"t" : False}
+        self.flags = {"t": False}
 
-        self.parametersChanged = Signal('VNETAnalysisParameters.parametersChanged')
+        self.parametersChanged = Signal(
+            'VNETAnalysisParameters.parametersChanged')
 
     def SetParams(self, params, flags):
-        
-        changed_params = {} 
+
+        changed_params = {}
         for p, v in params.iteritems():
-            if p == "analysis" and  v not in self.an_props.used_an:
+            if p == "analysis" and v not in self.an_props.used_an:
                 continue
 
             if p == "input":
                 mapName, mapSet = ParseMapStr(v)
                 v = mapName + "@" + mapSet
 
-            if self.params.has_key(p):
+            if p in self.params:
                 if isinstance(v, str):
                     v = v.strip()
-            
+
                 self.params[p] = v
                 changed_params[p] = v
 
         changed_flags = {}
         for p, v in flags.iteritems():
-            if self.flags.has_key(p):
+            if p in self.flags:
                 self.flags[p] = v
                 changed_flags[p] = v
 
-        self.parametersChanged.emit(method = "SetParams", 
-                                    kwargs = {"changed_params" : changed_params , "changed_flags" : changed_flags})
+        self.parametersChanged.emit(
+            method="SetParams",
+            kwargs={
+                "changed_params": changed_params,
+                "changed_flags": changed_flags})
 
         return changed_params, changed_flags
 
     def GetParam(self, param):
 
         invParams = []
-        if param in ["input", "arc_layer", "node_layer", "arc_column", 
-                     "arc_backward_column", "node_column", "turn_layer", "turn_cat_layer"]:
+        if param in [
+                "input", "arc_layer", "node_layer", "arc_column",
+                "arc_backward_column", "node_column", "turn_layer",
+                "turn_cat_layer"]:
             invParams = self._getInvalidParams(self.params)
 
-        if invParams: 
+        if invParams:
             return self.params[param], False
 
         return self.params[param], True
 
     def GetParams(self):
-        
+
         invParams = self._getInvalidParams(self.params)
-        return self.params, invParams, self.flags 
+        return self.params, invParams, self.flags
 
     def _getInvalidParams(self, params):
         """Check of analysis input data for invalid values (Parameters tab)"""
-        # dict of invalid values {key from self.itemData (comboboxes from Parameters tab) : invalid value}
+        # dict of invalid values {key from self.itemData (comboboxes from
+        # Parameters tab) : invalid value}
         invParams = []
 
         # check vector map
         if params["input"]:
             mapName, mapSet = params["input"].split("@")
-            if grass.list_grouped('vector').has_key(mapSet):
+            if mapSet in grass.list_grouped('vector'):
                 vectMaps = grass.list_grouped('vector')[mapSet]
 
         if not params["input"] or mapName not in vectMaps:
@@ -635,8 +697,8 @@ class VNETAnalysisParameters:
             return invParams
 
         # check arc/node layer
-        layers = utils.GetVectorNumberOfLayers(params["input"])    
-        
+        layers = utils.GetVectorNumberOfLayers(params["input"])
+
         for l in ['arc_layer', 'node_layer', 'turn_layer', 'turn_cat_layer']:
             if not layers or params[l] not in layers:
                 invParams.append(l)
@@ -651,7 +713,7 @@ class VNETAnalysisParameters:
 
         # check costs columns
         for col in ["arc_column", "arc_backward_column", "node_column"]:
-        
+
             if col == "node_column":
                 try:
                     table = dbInfo.GetTable(int(params["node_layer"]))
@@ -659,192 +721,198 @@ class VNETAnalysisParameters:
                 except (KeyError, ValueError):
                     table = None
 
-            if not table or  not params[col]  in columnchoices.keys():
+            if not table or not params[col] in columnchoices.keys():
                 invParams.append(col)
                 continue
-            
-            if columnchoices[params[col]]['type'] not in ['integer', 'double precision']:
+
+            if columnchoices[
+                    params[col]]['type'] not in [
+                    'integer', 'double precision']:
                 invParams.append(col)
                 continue
-     
-        return invParams  
+
+        return invParams
+
 
 class VNETAnalysesProperties:
+
     def __init__(self):
         """Initializes parameters for different v.net.* modules """
-        # initialization of v.net.* analysis parameters (data which characterizes particular analysis)
+        # initialization of v.net.* analysis parameters (data which
+        # characterizes particular analysis)
 
         self.attrCols = {
-                          'arc_column' : {
-                                        "label" : _("Arc forward/both direction(s) cost column:"),
-                                        "name" : _("arc forward/both")
-                                       },
-                          'arc_backward_column' : {
-                                        "label" : _("Arc backward direction cost column:"),
-                                        "name" : _("arc backward")
-                                       },
-                          'acolumn' : {
-                                       "label" : _("Arcs' cost column (for both directions):"),
-                                       "name" : _("arc"),
-                                       "inputField" : 'arc_column',
-                                      },
-                          'node_column' : {
-                                       "label" : _("Node cost column:"),
-                                        "name" : _("node")                                      
-                                      }
-                        }
+            'arc_column': {
+                "label": _("Arc forward/both direction(s) cost column:"),
+                "name": _("arc forward/both")
+            },
+            'arc_backward_column': {
+                "label": _("Arc backward direction cost column:"),
+                "name": _("arc backward")
+            },
+            'acolumn': {
+                "label": _("Arcs' cost column (for both directions):"),
+                "name": _("arc"),
+                "inputField": 'arc_column',
+            },
+            'node_column': {
+                "label": _("Node cost column:"),
+                "name": _("node")
+            }
+        }
 
         self.vnetProperties = {
-                                   "v.net.path" : {
-                                                     "label" : _("Shortest path %s") % "(v.net.path)",  
-                                                     "cmdParams" : {
-                                                                      "cats" :  [
-                                                                                    ["st_pt", _("Start point")], 
-                                                                                    ["end_pt", _("End point")] 
-                                                                                ],
-                                                                      "cols" :  [
-                                                                                 'arc_column',
-                                                                                 'arc_backward_column',
-                                                                                 'node_column'
-                                                                                ],
-                                                                   },
-                                                     "resultProps" : {
-                                                                      "singleColor" : None,
-                                                                      "dbMgr" : True  #TODO delete this property, this information can be get from result
-                                                                     },
-                                                     "turns_support" : True
-                                                  },
-
-                                    "v.net.salesman" : {
-                                                        "label" : _("Traveling salesman %s") % "(v.net.salesman)",  
-                                                        "cmdParams" : {
-                                                                        "cats" : [["center_cats", None]],
-                                                                        "cols" : [
-                                                                                  'arc_column',
-                                                                                  'arc_backward_column'
-                                                                                 ],
-                                                                      },
-                                                        "resultProps" : {
-                                                                         "singleColor" : None,
-                                                                         "dbMgr" : False
-                                                                        },
-                                                     "turns_support" : True
-
-                                                       },
-                                    "v.net.flow" : {
-                                                     "label" : _("Maximum flow %s") % "(v.net.flow)",  
-                                                     "cmdParams" : {
-                                                                      "cats" : [
-                                                                                ["source_cats", _("Source point")], 
-                                                                                ["sink_cats", _("Sink point")]
-                                                                               ],                                                   
-                                                                      "cols" : [
-                                                                                'arc_column',
-                                                                                'arc_backward_column',
-                                                                                'node_column'
-                                                                               ]
-                                                                  },
-                                                     "resultProps" : {
-                                                                      "attrColColor": "flow",
-                                                                      "dbMgr" : True
-                                                                     },
-                                                     "turns_support" : False
-                                                   },
-                                    "v.net.alloc" : {
-                                                     "label" : _("Subnets for nearest centers %s") % "(v.net.alloc)",  
-                                                     "cmdParams" : {
-                                                                      "cats" : [["center_cats", None]],                           
-                                                                      "cols" : [
-                                                                                 'arc_column',
-                                                                                 'arc_backward_column',
-                                                                                 'node_column'
-                                                                               ]
-                                                                  },
-                                                     "resultProps" :  {
-                                                                       "catColor" : None, 
-                                                                       "dbMgr" : False
-                                                                      },
-                                                     "turns_support" : True
-                                                   },
-                                    "v.net.steiner" : {
-                                                     "label" : _("Steiner tree for the network and given terminals %s") % "(v.net.steiner)",  
-                                                     "cmdParams" : {
-                                                                      "cats" : [["terminal_cats", None]],                           
-                                                                      "cols" : [
-                                                                                 'acolumn',
-                                                                               ]
-                                                                  },
-                                                     "resultProps" : {
-                                                                      "singleColor" : None,
-                                                                      "dbMgr" : False 
-                                                                     },
-                                                     "turns_support" : True
-                                                   },
-                                   "v.net.distance" : {
-                                                       "label" : _("Shortest distance via the network %s") % "(v.net.distance)",  
-                                                       "cmdParams" : {
-                                                                        "cats" : [
-                                                                                  ["from_cats", "From point"],
-                                                                                  ["to_cats", "To point"]
-                                                                                 ],
-                                                                        "cols" : [
-                                                                                  'arc_column',
-                                                                                  'arc_backward_column',
-                                                                                  'node_column'
-                                                                                 ],
-                                                                  },
-                                                      "resultProps" : {
-                                                                        "catColor" : None,
-                                                                        "dbMgr" : True
-                                                                      },
-                                                     "turns_support" : False
-                                                     },
-                                    "v.net.iso" :  {
-                                                     "label" : _("Cost isolines %s") % "(v.net.iso)",  
-                                                     "cmdParams" : {
-                                                                      "cats" : [["center_cats", None]],                           
-                                                                      "cols" : [
-                                                                                 'arc_column',
-                                                                                 'arc_backward_column',
-                                                                                 'node_column'
-                                                                               ]
-                                                                  },
-                                                     "resultProps" : {
-                                                                      "catColor" : None,
-                                                                      "dbMgr" : False
-                                                                     },
-                                                     "turns_support" : True
-                                                   }
-                                }
-
-        self.used_an = ["v.net.path", 
-                         "v.net.salesman",
-                         "v.net.flow",
-                         "v.net.alloc",
-                         "v.net.distance",
-                         "v.net.iso",
-                         #"v.net.steiner"
-                        ] 
+            "v.net.path": {
+                "label": _("Shortest path %s") % "(v.net.path)",
+                "cmdParams": {
+                    "cats": [
+                        ["st_pt", _("Start point")],
+                        ["end_pt", _("End point")]
+                    ],
+                    "cols": [
+                        'arc_column',
+                        'arc_backward_column',
+                        'node_column'
+                    ],
+                },
+                "resultProps": {
+                    "singleColor": None,
+                    "dbMgr": True  # TODO delete this property, this information can be get from result
+                },
+                "turns_support": True
+            },
+
+            "v.net.salesman": {
+                "label": _("Traveling salesman %s") % "(v.net.salesman)",
+                "cmdParams": {
+                    "cats": [["center_cats", None]],
+                    "cols": [
+                        'arc_column',
+                        'arc_backward_column'
+                    ],
+                },
+                "resultProps": {
+                    "singleColor": None,
+                    "dbMgr": False
+                },
+                "turns_support": True
+
+            },
+            "v.net.flow": {
+                "label": _("Maximum flow %s") % "(v.net.flow)",
+                "cmdParams": {
+                    "cats": [
+                        ["source_cats", _("Source point")],
+                        ["sink_cats", _("Sink point")]
+                    ],
+                    "cols": [
+                        'arc_column',
+                        'arc_backward_column',
+                        'node_column'
+                    ]
+                },
+                "resultProps": {
+                    "attrColColor": "flow",
+                    "dbMgr": True
+                },
+                "turns_support": False
+            },
+            "v.net.alloc": {
+                "label": _("Subnets for nearest centers %s") % "(v.net.alloc)",
+                "cmdParams": {
+                    "cats": [["center_cats", None]],
+                    "cols": [
+                        'arc_column',
+                        'arc_backward_column',
+                        'node_column'
+                    ]
+                },
+                "resultProps": {
+                    "catColor": None,
+                    "dbMgr": False
+                },
+                "turns_support": True
+            },
+            "v.net.steiner": {
+                "label": _("Steiner tree for the network and given terminals %s") % "(v.net.steiner)",
+                "cmdParams": {
+                    "cats": [["terminal_cats", None]],
+                    "cols": [
+                        'acolumn',
+                    ]
+                },
+                "resultProps": {
+                    "singleColor": None,
+                    "dbMgr": False
+                },
+                "turns_support": True
+            },
+            "v.net.distance": {
+                "label": _("Shortest distance via the network %s") % "(v.net.distance)",
+                "cmdParams": {
+                    "cats": [
+                        ["from_cats", "From point"],
+                        ["to_cats", "To point"]
+                    ],
+                    "cols": [
+                        'arc_column',
+                        'arc_backward_column',
+                        'node_column'
+                    ],
+                },
+                "resultProps": {
+                    "catColor": None,
+                    "dbMgr": True
+                },
+                "turns_support": False
+            },
+            "v.net.iso": {
+                "label": _("Cost isolines %s") % "(v.net.iso)",
+                "cmdParams": {
+                    "cats": [["center_cats", None]],
+                    "cols": [
+                        'arc_column',
+                        'arc_backward_column',
+                        'node_column'
+                    ]
+                },
+                "resultProps": {
+                    "catColor": None,
+                    "dbMgr": False
+                },
+                "turns_support": True
+            }
+        }
+
+        self.used_an = ["v.net.path",
+                        "v.net.salesman",
+                        "v.net.flow",
+                        "v.net.alloc",
+                        "v.net.distance",
+                        "v.net.iso",
+                        #"v.net.steiner"
+                        ]
 
         for an in self.vnetProperties.keys():
             if an not in self.used_an:
                 del self.vnetProperties[an]
                 continue
 
-            cols = self.vnetProperties[an]["cmdParams"]["cols"] 
+            cols = self.vnetProperties[an]["cmdParams"]["cols"]
             self.vnetProperties[an]["cmdParams"]["cols"] = {}
-            for c in  cols:
-                self.vnetProperties[an]["cmdParams"]["cols"][c] = self.attrCols[c]
+            for c in cols:
+                self.vnetProperties[an]["cmdParams"][
+                    "cols"][c] = self.attrCols[c]
 
     def has_key(self, key):
-        return self.vnetProperties.has_key(key)
+        return key in self.vnetProperties
 
     def __getitem__(self, key):
         return self.vnetProperties[key]
 
     def GetRelevantParams(self, analysis):
 
-        if not self.vnetProperties.has_key(analysis):
+        if analysis not in self.vnetProperties:
             return None
 
         relevant_params = ["input", "arc_layer", "node_layer"]
@@ -863,36 +931,39 @@ class VNETAnalysesProperties:
 
         return relevant_params
 
+
 class VNETTmpVectMaps:
     """Class which creates, stores and destroys all tmp maps created during analysis"""
+
     def __init__(self, parent, mapWin):
-        self.tmpMaps = [] # temporary maps 
+        self.tmpMaps = []  # temporary maps
         self.parent = parent
         self.mapWin = mapWin
 
     def AddTmpVectMap(self, mapName, msg):
         """New temporary map
 
-        :return: instance of VectMap representing temporary map 
+        :return: instance of VectMap representing temporary map
         """
         currMapSet = grass.gisenv()['MAPSET']
-        tmpMap = grass.find_file(name = mapName, 
-                                 element = 'vector', 
-                                 mapset = currMapSet)
+        tmpMap = grass.find_file(name=mapName,
+                                 element='vector',
+                                 mapset=currMapSet)
 
         fullName = tmpMap["fullname"]
         # map already exists
         if fullName:
-            #TODO move dialog out of class, AddTmpVectMap(self, mapName, overvrite = False)
-            dlg = wx.MessageDialog(parent = self.parent, 
-                                   message = msg,
-                                   caption = _("Overwrite map layer"),
-                                   style = wx.YES_NO | wx.NO_DEFAULT |
+            # TODO move dialog out of class, AddTmpVectMap(self, mapName,
+            # overvrite = False)
+            dlg = wx.MessageDialog(parent=self.parent,
+                                   message=msg,
+                                   caption=_("Overwrite map layer"),
+                                   style=wx.YES_NO | wx.NO_DEFAULT |
                                    wx.ICON_QUESTION | wx.CENTRE)
-                
+
             ret = dlg.ShowModal()
             dlg.Destroy()
-                
+
             if ret == wx.ID_NO:
                 return None
         else:
@@ -908,7 +979,7 @@ class VNETTmpVectMaps:
         :param: vectMapName name of vector map
 
         :return: True if it contains the map
-        :return: False if not 
+        :return: False if not
         """
 
         mapValSpl = vectMapName.strip().split("@")
@@ -916,7 +987,7 @@ class VNETTmpVectMaps:
             mapSet = mapValSpl[1]
         else:
             mapSet = grass.gisenv()['MAPSET']
-        mapName = mapValSpl[0] 
+        mapName = mapValSpl[0]
         fullName = mapName + "@" + mapSet
 
         for vectTmpMap in self.tmpMaps:
@@ -934,7 +1005,7 @@ class VNETTmpVectMaps:
     def RemoveFromTmpMaps(self, vectMap):
         """Temporary map is removed from the class instance however it is not deleted
 
-        :param vectMap: instance of VectMap class to be removed 
+        :param vectMap: instance of VectMap class to be removed
 
         :return: True if was removed
         :return: False if does not contain the map
@@ -947,16 +1018,16 @@ class VNETTmpVectMaps:
 
     def DeleteTmpMap(self, vectMap):
         """Temporary map is removed from the class and it is deleted
-        
-        :param vectMap: instance of VectMap class to be deleted 
+
+        :param vectMap: instance of VectMap class to be deleted
 
         :return: True if was removed
         :return: False if does not contain the map
         """
         if vectMap:
             vectMap.DeleteRenderLayer()
-            RunCommand('g.remove', flags = 'f', type = 'vector',
-                        name = vectMap.GetVectMapName())
+            RunCommand('g.remove', flags='f', type='vector',
+                       name=vectMap.GetVectMapName())
             self.RemoveFromTmpMaps(vectMap)
             return True
         return False
@@ -965,60 +1036,60 @@ class VNETTmpVectMaps:
         """Delete all temporary maps in the class"""
         update = False
         for tmpMap in self.tmpMaps:
-            RunCommand('g.remove', flags = 'f', type = 'vector',
-                        name = tmpMap.GetVectMapName())
+            RunCommand('g.remove', flags='f', type='vector',
+                       name=tmpMap.GetVectMapName())
             if tmpMap.DeleteRenderLayer():
                 update = True
         return update
 
+
 class VectMap:
-    """Represents map 
+    """Represents map
         It can check if it was modified or render it
     """
+
     def __init__(self, mapWin, fullName):
         self.fullName = fullName
         self.mapWin = mapWin
         self.renderLayer = None
-        self.modifTime = None # time, for modification check
+        self.modifTime = None  # time, for modification check
 
     def __del__(self):
 
         self.DeleteRenderLayer()
-   
-    def AddRenderLayer(self, cmd = None, colorsCmd = None):
+
+    def AddRenderLayer(self, cmd=None, colorsCmd=None):
         """Add map from map window layers to render """
 
         if not self.mapWin:
             return False
 
-        existsMap = grass.find_file(name = self.fullName, 
-                                    element = 'vector', 
-                                    mapset = grass.gisenv()['MAPSET'])
+        existsMap = grass.find_file(name=self.fullName,
+                                    element='vector',
+                                    mapset=grass.gisenv()['MAPSET'])
 
         if not existsMap["name"]:
             self.DeleteRenderLayer()
             return False
 
         if not cmd:
-            cmd = []    
+            cmd = []
         cmd.insert(0, 'd.vect')
         cmd.append('map=%s' % self.fullName)
 
-        if self.renderLayer:       
-             self.DeleteRenderLayer()
+        if self.renderLayer:
+            self.DeleteRenderLayer()
 
         if colorsCmd:
             colorsCmd.append('map=%s' % self.fullName)
-            layerStyleVnetColors = utils.CmdToTuple(colorsCmd)
+            layerStyleVnetColors = cmdlist_to_tuple(colorsCmd)
 
             RunCommand(layerStyleVnetColors[0],
-                        **layerStyleVnetColors[1])
+                       **layerStyleVnetColors[1])
 
-
-        self.renderLayer = self.mapWin.Map.AddLayer(ltype = "vector",     command = cmd,
-                                                    name = self.fullName, active = True,
-                                                    opacity = 1.0,        render = False,       
-                                                    pos = -1)
+        self.renderLayer = self.mapWin.Map.AddLayer(
+            ltype="vector", command=cmd, name=self.fullName, active=True,
+            opacity=1.0, render=False, pos=-1)
         return True
 
     def DeleteRenderLayer(self):
@@ -1026,10 +1097,10 @@ class VectMap:
         if not self.mapWin:
             return False
 
-        if self.renderLayer: 
-             self.mapWin.Map.DeleteLayer(self.renderLayer)
-             self.renderLayer = None
-             return True
+        if self.renderLayer:
+            self.mapWin.Map.DeleteLayer(self.renderLayer)
+            self.renderLayer = None
+            return True
         return False
 
     def GetRenderLayer(self):
@@ -1050,27 +1121,27 @@ class VectMap:
         :return:  1 - if map was not modified
         """
         if self.modifTime is None:
-            return -1       
+            return -1
         if self.modifTime != self.GetLastModified():
-            return 0  
+            return 0
         return 1
 
     def GetLastModified(self):
-        """Get modification time 
+        """Get modification time
 
-        :return: MAP DATE time string from vector map head file 
+        :return: MAP DATE time string from vector map head file
         """
 
         mapValSpl = self.fullName.split("@")
         mapSet = mapValSpl[1]
-        mapName = mapValSpl[0] 
-
-        headPath =  os.path.join(grass.gisenv()['GISDBASE'],
-                                 grass.gisenv()['LOCATION_NAME'],
-                                 mapSet,
-                                 "vector",
-                                 mapName,
-                                 "head")
+        mapName = mapValSpl[0]
+
+        headPath = os.path.join(grass.gisenv()['GISDBASE'],
+                                grass.gisenv()['LOCATION_NAME'],
+                                mapSet,
+                                "vector",
+                                mapName,
+                                "head")
         try:
             head = open(headPath, 'r')
             for line in head.readlines():
@@ -1084,26 +1155,28 @@ class VectMap:
         except IOError:
             return ""
 
-class History: 
+
+class History:
     """Class which reads and saves history data (based on gui.core.settings Settings class file save/load)
 
     .. todo::
         Maybe it could be useful for other GRASS wxGUI tools.
-    """  
+    """
+
     def __init__(self):
 
         # max number of steps in history (zero based)
-        self.maxHistSteps = 3 
-        # current history step 
+        self.maxHistSteps = 3
+        # current history step
         self.currHistStep = 0
         # number of steps saved in history
         self.histStepsNum = 0
 
-        # dict contains data saved in history for current history step 
-        self.currHistStepData = {} 
+        # dict contains data saved in history for current history step
+        self.currHistStepData = {}
 
-        # buffer for data to be saved into history 
-        self.newHistStepData = {} 
+        # buffer for data to be saved into history
+        self.newHistStepData = {}
 
         self.histFile = grass.tempfile()
 
@@ -1123,7 +1196,7 @@ class History:
 
     def GetPrev(self):
         """Go one step back in history"""
-        self.currHistStep += 1 
+        self.currHistStep += 1
         self.currHistStepData.clear()
         self.currHistStepData = self._getHistStepData(self.currHistStep)
 
@@ -1142,7 +1215,7 @@ class History:
         if key not in self.newHistStepData:
             self.newHistStepData[key] = {}
 
-        if type(subkey) == types.ListType:
+        if isinstance(subkey, types.ListType):
             if subkey[0] not in self.newHistStepData[key]:
                 self.newHistStepData[key][subkey[0]] = {}
             self.newHistStepData[key][subkey[0]][subkey[1]] = value
@@ -1151,10 +1224,10 @@ class History:
 
     def SaveHistStep(self):
         """Create new history step with data in buffer"""
-        self.maxHistSteps = UserSettings.Get(group ='vnet',
-                                             key = 'other',
-                                             subkey = 'max_hist_steps')
-        self.currHistStep = 0 
+        self.maxHistSteps = UserSettings.Get(group='vnet',
+                                             key='other',
+                                             subkey='max_hist_steps')
+        self.currHistStep = 0
 
         newHistFile = grass.tempfile()
         newHist = open(newHistFile, "w")
@@ -1169,11 +1242,11 @@ class History:
         try_remove(self.histFile)
         self.histFile = newHistFile
 
-        self.newHistStepData.clear() 
+        self.newHistStepData.clear()
 
         return removedHistData
 
-    def _savePreviousHist(self, newHist, oldHist):          
+    def _savePreviousHist(self, newHist, oldHist):
         """Save previous history into new file"""
         newHistStep = False
         removedHistData = {}
@@ -1202,47 +1275,56 @@ class History:
                 if newHistStepsNum >= self.maxHistSteps:
                     self._parseLine(line, removedHistStep)
                 else:
-                    newHist.write('%s' % line)                
+                    newHist.write('%s' % line)
 
         return removedHistData
-            
+
     def _saveNewHistStep(self, newHist):
         """Save buffer (new step) data into file"""
-        newHist.write('%s%s%s' % (os.linesep, "history step=0", os.linesep))  
+        newHist.write('%s%s%s' % (os.linesep, "history step=0", os.linesep))
         for key in self.newHistStepData.keys():
-            subkeys =  self.newHistStepData[key].keys()
+            subkeys = self.newHistStepData[key].keys()
             newHist.write('%s%s' % (key, self.sep))
             for idx in range(len(subkeys)):
-                value =  self.newHistStepData[key][subkeys[idx]]
-                if type(value) == types.DictType:
+                value = self.newHistStepData[key][subkeys[idx]]
+                if isinstance(value, types.DictType):
                     if idx > 0:
                         newHist.write('%s%s%s' % (os.linesep, key, self.sep))
                     newHist.write('%s%s' % (subkeys[idx], self.sep))
-                    kvalues =  self.newHistStepData[key][subkeys[idx]].keys()
+                    kvalues = self.newHistStepData[key][subkeys[idx]].keys()
                     srange = range(len(kvalues))
                     for sidx in srange:
-                        svalue = self._parseValue(self.newHistStepData[key][subkeys[idx]][kvalues[sidx]])
-                        newHist.write('%s%s%s' % (kvalues[sidx], self.sep, svalue))
+                        svalue = self._parseValue(
+                            self.newHistStepData[key][
+                                subkeys[idx]][
+                                kvalues[sidx]])
+                        newHist.write(
+                            '%s%s%s' %
+                            (kvalues[sidx], self.sep, svalue))
                         if sidx < len(kvalues) - 1:
                             newHist.write('%s' % self.sep)
                 else:
-                    if idx > 0 and \
-                            type( self.newHistStepData[key][subkeys[idx - 1]]) == types.DictType:
+                    if idx > 0 and isinstance(
+                            self.newHistStepData[key][subkeys[idx - 1]],
+                            types.DictType):
                         newHist.write('%s%s%s' % (os.linesep, key, self.sep))
-                    value = self._parseValue(self.newHistStepData[key][subkeys[idx]])
+                    value = self._parseValue(
+                        self.newHistStepData[key][subkeys[idx]])
                     newHist.write('%s%s%s' % (subkeys[idx], self.sep, value))
-                    if idx < len(subkeys) - 1 and \
-                            type(self.newHistStepData[key][subkeys[idx + 1]]) != types.DictType:
+                    if idx < len(subkeys) - 1 and not isinstance(
+                            self.newHistStepData[key][subkeys[idx + 1]],
+                            types.DictType):
                         newHist.write('%s' % self.sep)
             newHist.write(os.linesep)
         self.histStepsNum = 0
 
-    def _parseValue(self, value, read = False):
+    def _parseValue(self, value, read=False):
         """Parse value"""
-        if read: # -> read data (cast values)
+        if read:  # -> read data (cast values)
 
             if value:
-                if value[0] == '[' and value[-1] == ']':# TODO, possible wrong interpretation
+                if value[
+                        0] == '[' and value[-1] == ']':  # TODO, possible wrong interpretation
                     value = value[1:-1].split(',')
                     value = map(self._castValue, value)
                     return value
@@ -1253,10 +1335,10 @@ class History:
                 value = False
             elif value == 'None':
                 value = None
-            elif ':' in value: # -> color
+            elif ':' in value:  # -> color
                 try:
                     value = tuple(map(int, value.split(':')))
-                except ValueError: # -> string
+                except ValueError:  # -> string
                     pass
             else:
                 try:
@@ -1266,12 +1348,12 @@ class History:
                         value = float(value)
                     except ValueError:
                         pass
-        else: # -> write data
-            if type(value) == type(()): # -> color
+        else:  # -> write data
+            if isinstance(value, type(())):  # -> color
                 value = str(value[0]) + ':' +\
                     str(value[1]) + ':' + \
                     str(value[2])
-                
+
         return value
 
     def _castValue(self, value):
@@ -1286,8 +1368,8 @@ class History:
 
         return value
 
-    def _getHistStepData(self, histStep):          
-        """Load data saved in history step"""       
+    def _getHistStepData(self, histStep):
+        """Load data saved in history step"""
         hist = open(self.histFile)
         histStepData = {}
 
@@ -1295,8 +1377,8 @@ class History:
         isSearchedHistStep = False
         for line in hist.readlines():
 
-            if  not line.strip() and isSearchedHistStep:
-                 break
+            if not line.strip() and isSearchedHistStep:
+                break
             elif not line.strip():
                 newHistStep = True
                 continue
@@ -1313,13 +1395,13 @@ class History:
         return histStepData
 
     def _parseLine(self, line, histStepData):
-        """Parse line in file with history"""       
+        """Parse line in file with history"""
         line = line.rstrip('%s' % os.linesep).split(self.sep)
         key = line[0]
         kv = line[1:]
         idx = 0
         subkeyMaster = None
-        if len(kv) % 2 != 0: # multiple (e.g. nviz)
+        if len(kv) % 2 != 0:  # multiple (e.g. nviz)
             subkeyMaster = kv[0]
             del kv[0]
         idx = 0
@@ -1328,12 +1410,12 @@ class History:
                 subkey = [subkeyMaster, kv[idx]]
             else:
                 subkey = kv[idx]
-            value = kv[idx+1]
-            value = self._parseValue(value, read = True)
+            value = kv[idx + 1]
+            value = self._parseValue(value, read=True)
             if key not in histStepData:
                 histStepData[key] = {}
 
-            if type(subkey) == types.ListType:
+            if isinstance(subkey, types.ListType):
                 if subkey[0] not in histStepData[key]:
                     histStepData[key][subkey[0]] = {}
                 histStepData[key][subkey[0]][subkey[1]] = value
@@ -1342,19 +1424,22 @@ class History:
             idx += 2
 
     def DeleteNewHistStepData(self):
-        """Delete buffer data for new history step"""       
-        self.newHistStepData.clear() 
+        """Delete buffer data for new history step"""
+        self.newHistStepData.clear()
+
 
 class VNETGlobalTurnsData:
     """Turn Data"""
+
     def __init__(self):
         # Definition of four basic directions
         self.turn_data = [
-                            ["Straight", DegreesToRadians(-30), DegreesToRadians(+30), 0.0],
-                            ["Right Turn", DegreesToRadians(+30), DegreesToRadians(+150), 0.0],
-                            ["Reverse",  DegreesToRadians(+150), DegreesToRadians(-150), 0.0],
-                            ["Left Turn",  DegreesToRadians(-150), DegreesToRadians(-30), 0.0]  
-                            ]   
+            ["Straight", DegreesToRadians(-30), DegreesToRadians(+30), 0.0],
+            ["Right Turn", DegreesToRadians(+30), DegreesToRadians(+150), 0.0],
+            ["Reverse", DegreesToRadians(+150), DegreesToRadians(-150), 0.0],
+            ["Left Turn", DegreesToRadians(-150), DegreesToRadians(-30), 0.0]
+        ]
+
     def GetData(self):
         data = []
         for ival in self.turn_data:
@@ -1379,32 +1464,32 @@ class VNETGlobalTurnsData:
     def AppendRow(self, values):
         self.turn_data.append(values)
 
-    def InsertRow(self,line,values):
-        self.turn_data.insert(line,values)
+    def InsertRow(self, line, values):
+        self.turn_data.insert(line, values)
 
     def PopRow(self, values):
         self.RemoveDataValidator(values)
         self.turn_data.pop(values)
-             
+
     def DataValidator(self, row, col, value):
         """Angle recalculation due to value changing"""
 
-        if col not in [1,2]:
+        if col not in [1, 2]:
             return
 
         if col == 1:
             new_from_angle = value
             old_from_angle = self.turn_data[row][1]
-            new_to_angle  = self.turn_data[row][2]
+            new_to_angle = self.turn_data[row][2]
             if self.IsInInterval(old_from_angle, new_to_angle, new_from_angle):
 
                 prev_row = row - 1
-                if  prev_row == -1:
+                if prev_row == -1:
                     prev_row = len(self.turn_data) - 1
                 self.turn_data[prev_row][2] = new_from_angle
                 return
-        
-        if col ==2:
+
+        if col == 2:
             new_to_angle = value
             old_to_angle = self.turn_data[row][2]
             new_from_angle = self.turn_data[row][1]
@@ -1413,9 +1498,8 @@ class VNETGlobalTurnsData:
                 next_row = row + 1
                 if len(self.turn_data) == next_row:
                     next_row = 0
-                self.turn_data[next_row][1] = new_to_angle 
-                return     
-                   
+                self.turn_data[next_row][1] = new_to_angle
+                return
 
         inside_new = []
         overlap_new_from = []
@@ -1425,11 +1509,12 @@ class VNETGlobalTurnsData:
             if i == row:
                 continue
             from_angle = self.turn_data[i][1]
-            is_in_from = self.IsInInterval(new_from_angle, new_to_angle, from_angle)
+            is_in_from = self.IsInInterval(
+                new_from_angle, new_to_angle, from_angle)
 
             to_angle = self.turn_data[i][2]
-            is_in_to = self.IsInInterval(new_from_angle, new_to_angle, to_angle)
-
+            is_in_to = self.IsInInterval(
+                new_from_angle, new_to_angle, to_angle)
 
             if is_in_from and is_in_to:
                 inside_new.append(i)
@@ -1446,7 +1531,7 @@ class VNETGlobalTurnsData:
 
         for i_row in inside_new:
             if col == 1:
-                angle = new_from_angle            
+                angle = new_from_angle
             else:
                 angle = new_to_angle
 
@@ -1460,17 +1545,16 @@ class VNETGlobalTurnsData:
         else:
             prev_row = row - 1
 
-        remove_to_angle = self.turn_data[row][2]        
+        remove_to_angle = self.turn_data[row][2]
         self.turn_data[prev_row][2] = remove_to_angle
 
-
     def IsInInterval(self, from_angle, to_angle, angle):
-        """Test if a direction includes or not includes a value""" 
+        """Test if a direction includes or not includes a value"""
         if to_angle < from_angle:
-            to_angle = math.pi * 2  + to_angle
+            to_angle = math.pi * 2 + to_angle
         if angle < from_angle:
-                angle = math.pi * 2  + angle
-            
+            angle = math.pi * 2 + angle
+
         if angle > from_angle and angle < to_angle:
             return True
         return False
diff --git a/gui/wxpython/vnet/vnet_utils.py b/gui/wxpython/vnet/vnet_utils.py
index 9ca0db5..5fd2e3b 100644
--- a/gui/wxpython/vnet/vnet_utils.py
+++ b/gui/wxpython/vnet/vnet_utils.py
@@ -18,8 +18,8 @@ This program is free software under the GNU General Public License
 @author Eliska Kyzlikova <eliska.kyzlikova gmail.com> (turn costs support)
 """
 
-import  math
-from grass.script     import core as grass
+import math
+from grass.script import core as grass
 from core.utils import _
 
 try:
@@ -29,6 +29,7 @@ try:
 except ImportError:
     haveCtypes = False
 
+
 def ParseMapStr(mapStr):
     """Create full map name (add current mapset if it is not present in name)"""
     mapValSpl = mapStr.strip().split("@")
@@ -36,15 +37,18 @@ def ParseMapStr(mapStr):
         mapSet = mapValSpl[1]
     else:
         mapSet = grass.gisenv()['MAPSET']
-    mapName = mapValSpl[0] 
-        
+    mapName = mapValSpl[0]
+
     return mapName, mapSet
 
+
 def DegreesToRadians(degrees):
     return degrees * math.pi / 180
 
+
 def RadiansToDegrees(radians):
-    return radians * 180 / math.pi   
+    return radians * 180 / math.pi
+
 
 def SnapToNode(e, n, tresh, vectMap):
     """Find nearest node to click coordinates (within given threshold)"""
@@ -54,29 +58,29 @@ def SnapToNode(e, n, tresh, vectMap):
     vectMap, mapSet = ParseMapStr(vectMap)
 
     openedMap = pointer(vectlib.Map_info())
-    ret = vectlib.Vect_open_old(openedMap, 
-                                     c_char_p(vectMap),
-                                     c_char_p(mapSet))
+    ret = vectlib.Vect_open_old(openedMap,
+                                c_char_p(vectMap),
+                                c_char_p(mapSet))
     if ret == 1:
         vectlib.Vect_close(openedMap)
-    if ret != 2: 
+    if ret != 2:
         return None
 
-    nodeNum =  vectlib.Vect_find_node(openedMap,     
-                                      c_double(e), 
-                                      c_double(n), 
-                                      c_double(0), 
-                                      c_double(tresh),
-                                      vectlib.WITHOUT_Z)
+    nodeNum = vectlib.Vect_find_node(openedMap,
+                                     c_double(e),
+                                     c_double(n),
+                                     c_double(0),
+                                     c_double(tresh),
+                                     vectlib.WITHOUT_Z)
 
     if nodeNum > 0:
         e = c_double(0)
         n = c_double(0)
-        vectlib.Vect_get_node_coor(openedMap, 
-                                   nodeNum, 
-                                   byref(e), 
-                                   byref(n), 
-                                   None); # z
+        vectlib.Vect_get_node_coor(openedMap,
+                                   nodeNum,
+                                   byref(e),
+                                   byref(n),
+                                   None)  # z
         e = e.value
         n = n.value
     else:
@@ -85,67 +89,70 @@ def SnapToNode(e, n, tresh, vectMap):
 
     return e, n
 
+
 def GetNearestNodeCat(e, n, layer, tresh, vectMap):
 
-    if  not haveCtypes:
+    if not haveCtypes:
         return -2
 
     vectMapName, mapSet = ParseMapStr(vectMap)
 
     openedMap = pointer(vectlib.Map_info())
-    ret = vectlib.Vect_open_old(openedMap, 
-                                     c_char_p(vectMapName),
-                                     c_char_p(mapSet))
+    ret = vectlib.Vect_open_old(openedMap,
+                                c_char_p(vectMapName),
+                                c_char_p(mapSet))
     if ret == 1:
         vectlib.Vect_close(openedMap)
-    if ret != 2: 
+    if ret != 2:
         return -1
 
-    nodeNum = vectlib.Vect_find_node(openedMap,     
-                                     c_double(e), 
-                                     c_double(n), 
-                                     c_double(0), 
+    nodeNum = vectlib.Vect_find_node(openedMap,
+                                     c_double(e),
+                                     c_double(n),
+                                     c_double(0),
                                      c_double(tresh),
                                      vectlib.WITHOUT_Z)
 
     if nodeNum > 0:
         e = c_double(0)
         n = c_double(0)
-        vectlib.Vect_get_node_coor(openedMap, 
-                                   nodeNum, 
-                                   byref(e), 
-                                   byref(n), 
-                                   None); # z
+        vectlib.Vect_get_node_coor(openedMap,
+                                   nodeNum,
+                                   byref(e),
+                                   byref(n),
+                                   None)  # z
         e = e.value
         n = n.value
     else:
         vectlib.Vect_close(openedMap)
         return -1
 
-    box = vectlib.bound_box();
-    List = POINTER(vectlib.boxlist);
-    List = vectlib.Vect_new_boxlist(c_int(0));
+    box = vectlib.bound_box()
+    List = POINTER(vectlib.boxlist)
+    List = vectlib.Vect_new_boxlist(c_int(0))
 
-    box.E = box.W = e;
-    box.N = box.S = n;
-    box.T = box.B = 0;
-    vectlib.Vect_select_lines_by_box(openedMap, byref(box), vectlib.GV_POINT, List);
+    box.E = box.W = e
+    box.N = box.S = n
+    box.T = box.B = 0
+    vectlib.Vect_select_lines_by_box(
+        openedMap, byref(box),
+        vectlib.GV_POINT, List)
 
-    found = 0;
-    dcost = 0;
+    found = 0
+    dcost = 0
 
     Cats = POINTER(vectlib.line_cats)
     Cats = vectlib.Vect_new_cats_struct()
- 
+
     cat = c_int(0)
 
-    for j in range(List.contents.n_values): 
+    for j in range(List.contents.n_values):
         line = List.contents.id[j]
         type = vectlib.Vect_read_line(openedMap, None, Cats, line)
         if type != vectlib.GV_POINT:
             continue
 
-        if vectlib.Vect_cat_get(Cats, c_int(layer), byref(cat)): 
+        if vectlib.Vect_cat_get(Cats, c_int(layer), byref(cat)):
             found = 1
             break
     if found:
diff --git a/gui/wxpython/vnet/widgets.py b/gui/wxpython/vnet/widgets.py
index bccd544..e691bff 100644
--- a/gui/wxpython/vnet/widgets.py
+++ b/gui/wxpython/vnet/widgets.py
@@ -1,7 +1,7 @@
 """
 @package vnet.widgets
 
- at brief Base class for list of points. 
+ at brief Base class for list of points.
 
 Classes:
  - widgets::PointsList
@@ -38,26 +38,26 @@ class PointsList(wx.ListCtrl,
                  pos=wx.DefaultPosition, size=wx.DefaultSize,
                  style=wx.LC_REPORT | wx.SUNKEN_BORDER | wx.LC_HRULES |
                  wx.LC_SINGLE_SEL):
-        """Creates list for points. 
+        """Creates list for points.
 
-        PointsList class was created from GCPList class in GCP manager. It is possible 
+        PointsList class was created from GCPList class in GCP manager. It is possible
         to be shared by GCP and VNET front end.
 
         Important parameters:
         :param cols: is list containing list items. which represents columns.
-                This columns will be added in order as they are in list. 
+                This columns will be added in order as they are in list.
                 Class will add as first column "use" with number of point and checkbox.
                 Structure of list item must be this:
-               -1. item: column name 
-               -2. item: column label                
+               -1. item: column name
+               -2. item: column label
                -3. item: If column is editable by user, it must contain convert function to convert
-                         inserted string to it's type for sorting. Use None for not editable 
+                         inserted string to it's type for sorting. Use None for not editable
                          columns. Values for insertion can be in list. This allows insert
-                         just values in the list. 
-               -4. item: Default value for column cell. Value should be given in it's  type 
+                         just values in the list.
+               -4. item: Default value for column cell. Value should be given in it's  type
                          in order to sorting would work properly. If 3. item is list, it must be index
                          of some item in the list.
-  
+
         Example of cols parameter:
                  column name, column label, convert function, default val
         @code
@@ -68,10 +68,10 @@ class PointsList(wx.ListCtrl,
                    ['N', _('target N'), float, 0.0],
                    ['F_Err', _('Forward error'), None, 0],
                    ['B_Err', _(Backward error'), None, 0]
-                   ['type', _('type'), [_(""), _("Start point"), _("End point")], 0] # Select from 3 choices ("Start point", "End point"), 
+                   ['type', _('type'), [_(""), _("Start point"), _("End point")], 0] # Select from 3 choices ("Start point", "End point"),
                                                                                      # Choice with index 0 ("") is default.
                   ]
-        @endcode 
+        @endcode
         """
 
         wx.ListCtrl.__init__(self, parent, id, pos, size, style)
@@ -85,13 +85,14 @@ class PointsList(wx.ListCtrl,
         cols.insert(0, ['use', _('use'), False, 0])
 
         self.colsData = cols
-        self.dataTypes = {"colName" : 0,
-                          "colLabel" : 1,
-                          "colEditable" : 2,
-                          "itemDefaultValue" : 3} # just for better understanding
+        self.dataTypes = {
+            "colName": 0,
+            "colLabel": 1,
+            "colEditable": 2,
+            "itemDefaultValue": 3}  # just for better understanding
 
         # information whether list items are checked or not
-        self.CheckList = [] 
+        self.CheckList = []
 
         self._createCols()
         self.hiddenCols = {}
@@ -103,18 +104,17 @@ class PointsList(wx.ListCtrl,
         self.selected = wx.NOT_FOUND
         self.selectedkey = -1
 
-
         # CheckListCtrlMixin must set an ImageList first
         self.il = self.GetImageList(wx.IMAGE_LIST_SMALL)
 
         # images for column sorting
-        SmallUpArrow = wx.BitmapFromImage(self.getSmallUpArrowImage())            
-        SmallDnArrow = wx.BitmapFromImage(self.getSmallDnArrowImage())            
+        SmallUpArrow = wx.BitmapFromImage(self.getSmallUpArrowImage())
+        SmallDnArrow = wx.BitmapFromImage(self.getSmallDnArrowImage())
         self.sm_dn = self.il.Add(SmallDnArrow)
         self.sm_up = self.il.Add(SmallUpArrow)
 
         # initialize column sorter
-        self.itemDataMap = [] 
+        self.itemDataMap = []
         ncols = self.GetColumnCount()
         ColumnSorterMixin.__init__(self, ncols)
 
@@ -122,7 +122,7 @@ class PointsList(wx.ListCtrl,
         self._colSortFlag = [1] * ncols
 
         # same structure as itemDataMap, information about choice index selected
-        # if cell is in column without values to choose then is -1 
+        # if cell is in column without values to choose then is -1
         self.selIdxs = []
 
         self.ResizeColumns()
@@ -138,13 +138,14 @@ class PointsList(wx.ListCtrl,
         else:
             # the hard way: we want images on the column header
             info = wx.ListItem()
-            info.SetMask(wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT)
+            info.SetMask(
+                wx.LIST_MASK_TEXT | wx.LIST_MASK_IMAGE | wx.LIST_MASK_FORMAT)
             info.SetImage(-1)
             info.m_format = wx.LIST_FORMAT_LEFT
 
             for col in enumerate(self.colsData):
                 iLabel = self.dataTypes["colLabel"]
-                info.SetText(col[1][iLabel]) 
+                info.SetText(col[1][iLabel])
                 self.InsertColumnInfo(col[0], info)
 
     def AddItem(self):
@@ -159,10 +160,9 @@ class PointsList(wx.ListCtrl,
                 itemIndexes.append(col[iDefVal])
             else:
                 itemData.append(col[iDefVal])
-                itemIndexes.append(-1)# not a choise column 
+                itemIndexes.append(-1)  # not a choise column
 
-                
-        self.selIdxs.append(itemIndexes) 
+        self.selIdxs.append(itemIndexes)
 
         for hCol in self.hiddenCols.itervalues():
             defVal = hCol['colsData'][iDefVal]
@@ -178,7 +178,7 @@ class PointsList(wx.ListCtrl,
         itemData[0] = self.selectedkey + 1
         self.itemDataMap.append(copy(itemData))
 
-        self.Append(map(str, itemData))             
+        self.Append(map(str, itemData))
 
         self.selected = self.GetItemCount() - 1
         self.SetItemData(self.selected, self.selectedkey)
@@ -215,7 +215,7 @@ class PointsList(wx.ListCtrl,
 
     def EditCellIndex(self, index, colName, cellData):
         """Changes value in list using key (same regardless of sorting)"""
-        colNum = self._getColumnNum(colName) 
+        colNum = self._getColumnNum(colName)
         key = self.GetItemData(index)
 
         iColEd = self.dataTypes["colEditable"]
@@ -223,7 +223,7 @@ class PointsList(wx.ListCtrl,
             cellVal = self.colsData[colNum][iColEd][cellData]
             self.selIdxs[key][colNum] = cellData
         else:
-            cellVal = cellData  
+            cellVal = cellData
             self.selIdxs[key][colNum] = -1
 
         self.itemDataMap[key][colNum] = cellVal
@@ -233,14 +233,14 @@ class PointsList(wx.ListCtrl,
 
     def EditCellKey(self, key, colName, cellData):
         """Changes value in list using index (changes during sorting)"""
-        colNum = self._getColumnNum(colName)   
+        colNum = self._getColumnNum(colName)
 
         iColEd = self.dataTypes["colEditable"]
         if type(self.colsData[colNum][iColEd]).__name__ == "list":
             cellVal = self.colsData[colNum][iColEd][cellData]
             self.selIdxs[key][colNum] = cellData
         else:
-            cellVal = cellData  
+            cellVal = cellData
             self.selIdxs[key][colNum] = -1
 
         self.itemDataMap[key][colNum] = cellVal
@@ -264,7 +264,7 @@ class PointsList(wx.ListCtrl,
         return -1
 
     def ChangeColEditable(self, colName, colType):
-        """Change 3. item in constructor parameter cols (see the class constructor hint)"""    
+        """Change 3. item in constructor parameter cols (see the class constructor hint)"""
         colNum = self._getColumnNum(colName)
         iColEd = self.dataTypes["colEditable"]
         self.colsData[colNum][iColEd] = colType
@@ -281,8 +281,8 @@ class PointsList(wx.ListCtrl,
         self.selIdxs.pop(key)
 
         # update hidden columns
-        for hCol in self.hiddenCols.itervalues():    
-            hCol['itemDataMap'].pop(key) 
+        for hCol in self.hiddenCols.itervalues():
+            hCol['itemDataMap'].pop(key)
             hCol['selIdxs'].pop(key)
 
         # update key and point number
@@ -299,7 +299,7 @@ class PointsList(wx.ListCtrl,
             else:
                 self.selected = self.GetItemCount() - 1
                 self.selectedkey = self.GetItemData(self.selected)
-                
+
             self.SetItemState(self.selected,
                               wx.LIST_STATE_SELECTED,
                               wx.LIST_STATE_SELECTED)
@@ -319,16 +319,16 @@ class PointsList(wx.ListCtrl,
         i = 0
         for col in self.colsData:
             if i == 0:
-                i  += 1
+                i += 1
                 continue
             if type(col[iColEd]).__name__ == "list":
                 self.EditCell(index, i, col[iColEd][col[iDefVal]])
             else:
                 self.EditCell(index, i, col[iDefVal])
-            i  += 1
+            i += 1
         self.CheckItem(index, False)
 
-    def ResizeColumns(self, minWidth = [90, 120]):
+    def ResizeColumns(self, minWidth=[90, 120]):
         """Resize columns"""
         for i in range(self.GetColumnCount()):
             self.SetColumnWidth(i, wx.LIST_AUTOSIZE)
@@ -355,26 +355,27 @@ class PointsList(wx.ListCtrl,
         data = []
 
         index = event.GetIndex()
-        key = self.GetItemData(index)       
+        key = self.GetItemData(index)
         changed = False
         iColEd = self.dataTypes["colEditable"]
 
-        for col in  enumerate(self.colsData):
+        for col in enumerate(self.colsData):
             if col[1][iColEd]:
-                data.append([col[0], #culumn number
-                             self.GetItem(index, col[0]).GetText(), #cell value 
-                             col[1][iColEd]]) #convert function for type check
+                data.append([col[0],  # culumn number
+                             self.GetItem(
+                    index, col[0]).GetText(),  # cell value
+                    col[1][iColEd]])  # convert function for type check
 
         if not data:
             return
-        dlg = self.CreateEditDialog(data = data, pointNo = key)
+        dlg = self.CreateEditDialog(data=data, pointNo=key)
 
         if dlg.ShowModal() == wx.ID_OK:
-            editedData = dlg.GetValues() # string
-            
+            editedData = dlg.GetValues()  # string
+
             if len(editedData) == 0:
-                GError(parent = self,
-                       message=_("Invalid value inserted. Operation canceled."))
+                GError(parent=self, message=_(
+                    "Invalid value inserted. Operation canceled."))
             else:
                 i = 0
                 for editedCell in editedData:
@@ -385,19 +386,19 @@ class PointsList(wx.ListCtrl,
                         self.SetStringItem(index, editedCell[0], value)
                         self.itemDataMap[key][editedCell[0]] = editedCell[1]
                         changed = True
-                    i += 1 
+                    i += 1
 
                 self.selIdxs[key] = dlg.GetSelectionIndexes()
         dlg.Destroy()
         return changed, key
-        
+
     def CreateEditDialog(self, data, pointNo):
         """Helper function
         It is possible to define in child derived class
-        and adapt created dialog (e. g. it's title...) 
+        and adapt created dialog (e. g. it's title...)
         """
 
-        return  EditItem(parent=self, id=wx.ID_ANY, data = data, pointNo=pointNo)
+        return EditItem(parent=self, id=wx.ID_ANY, data=data, pointNo=pointNo)
 
     def OnColClick(self, event):
         """ListCtrl forgets selected item..."""
@@ -417,7 +418,11 @@ class PointsList(wx.ListCtrl,
 
     def getSmallUpArrowImage(self):
         """Get arrow up symbol for indication of sorting"""
-        stream = open(os.path.join(globalvar.IMGDIR, 'small_up_arrow.png'), 'rb')
+        stream = open(
+            os.path.join(
+                globalvar.IMGDIR,
+                'small_up_arrow.png'),
+            'rb')
         try:
             img = wx.ImageFromStream(stream)
         finally:
@@ -426,7 +431,11 @@ class PointsList(wx.ListCtrl,
 
     def getSmallDnArrowImage(self):
         """Get arrow down symbol for indication of sorting"""
-        stream = open(os.path.join(globalvar.IMGDIR, 'small_down_arrow.png'), 'rb')
+        stream = open(
+            os.path.join(
+                globalvar.IMGDIR,
+                'small_down_arrow.png'),
+            'rb')
         try:
             img = wx.ImageFromStream(stream)
         finally:
@@ -434,7 +443,7 @@ class PointsList(wx.ListCtrl,
         return img
 
     def _getColumnNum(self, colName):
-        """Get position of column among showed columns 
+        """Get position of column among showed columns
 
         :param colName: name of column
         :type colName: str
@@ -442,9 +451,9 @@ class PointsList(wx.ListCtrl,
         """
 
         for iCol, col in enumerate(self.colsData):
-             if colName == col[0]:
-                 return iCol
- 
+            if colName == col[0]:
+                return iCol
+
         return -1
 
     def HideColumn(self, colName):
@@ -460,7 +469,7 @@ class PointsList(wx.ListCtrl,
             return False
 
         hiddenCol = self.GetColumn(colNum)
-        self.DeleteColumn(colNum) 
+        self.DeleteColumn(colNum)
 
         self.hiddenCols[colName] = {}
         self.hiddenCols[colName]['wxCol'] = hiddenCol
@@ -490,7 +499,7 @@ class PointsList(wx.ListCtrl,
         """
         if pos < 0 and pos >= self.self.GetColumnCount():
             return False
-        if self.hiddenCols.has_key(colName):
+        if colName in self.hiddenCols:
             col = self.hiddenCols[colName]
 
             for item in enumerate(self.itemDataMap):
@@ -502,7 +511,7 @@ class PointsList(wx.ListCtrl,
 
             self.InsertColumnItem(pos, col['wxCol'])
             self.ResizeColumns()
-            del self.hiddenCols[colName]  
+            del self.hiddenCols[colName]
             return True
 
         return False
@@ -522,10 +531,13 @@ class PointsList(wx.ListCtrl,
         else:
             return True
 
+
 class EditItem(wx.Dialog):
-    
-    def __init__(self, parent, data, pointNo, itemCap = "Point No." ,id=wx.ID_ANY,
-                 title =_("Edit point"), style=wx.DEFAULT_DIALOG_STYLE):
+
+    def __init__(
+            self, parent, data, pointNo, itemCap="Point No.", id=wx.ID_ANY,
+            title=_("Edit point"),
+            style=wx.DEFAULT_DIALOG_STYLE):
         """Dialog for editing item cells in list"""
 
         wx.Dialog.__init__(self, parent, id, title=_(title), style=style)
@@ -534,16 +546,15 @@ class EditItem(wx.Dialog):
         panel = wx.Panel(parent=self)
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.StaticBox (parent=panel, id=wx.ID_ANY,
-                            label=" %s %s " % (_(itemCap), str(pointNo + 1)))
+        box = wx.StaticBox(parent=panel, id=wx.ID_ANY,
+                           label=" %s %s " % (_(itemCap), str(pointNo + 1)))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
 
         # source coordinates
         gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
-       
-        self.fields = [] 
-        self.data = deepcopy(data)
 
+        self.fields = []
+        self.data = deepcopy(data)
 
         col = 0
         row = 0
@@ -552,10 +563,10 @@ class EditItem(wx.Dialog):
 
             # Select
             if type(cell[2]).__name__ == "list":
-                self.fields.append(wx.ComboBox(parent = panel, id = wx.ID_ANY,
-                                               choices = cell[2],
-                                               style = wx.CB_READONLY, 
-                                               size = (110, -1)))
+                self.fields.append(wx.ComboBox(parent=panel, id=wx.ID_ANY,
+                                               choices=cell[2],
+                                               style=wx.CB_READONLY,
+                                               size=(110, -1)))
             # Text field
             else:
                 if cell[2] == float:
@@ -566,18 +577,25 @@ class EditItem(wx.Dialog):
                     validator = None
 
                 if validator:
-                    self.fields.append(wx.TextCtrl(parent=panel, id=wx.ID_ANY, 
-                                                   validator = validator, size=(150, -1)))
+                    self.fields.append(
+                        wx.TextCtrl(
+                            parent=panel, id=wx.ID_ANY, validator=validator,
+                            size=(150, -1)))
                 else:
-                    self.fields.append(wx.TextCtrl(parent=panel, id=wx.ID_ANY, 
+                    self.fields.append(wx.TextCtrl(parent=panel, id=wx.ID_ANY,
                                                    size=(150, -1)))
                     value = cell[1]
                     if not isinstance(cell[1], basestring):
                         value = str(cell[1])
                     self.fields[iField].SetValue(value)
 
-            label = wx.StaticText(parent = panel, id=wx.ID_ANY,
-                                  label = _(parent.GetColumn(cell[0]).GetText()) + ":") # name of column)
+            label = wx.StaticText(
+                parent=panel,
+                id=wx.ID_ANY,
+                label=_(
+                    parent.GetColumn(
+                        cell[0]).GetText()) +
+                ":")  # name of column)
 
             gridSizer.Add(item=label,
                           flag=wx.ALIGN_CENTER_VERTICAL,
@@ -588,8 +606,7 @@ class EditItem(wx.Dialog):
             gridSizer.Add(item=self.fields[iField],
                           pos=(row, col))
 
-
-            if col%3 == 0:
+            if col % 3 == 0:
                 col = 0
                 row += 1
             else:
@@ -598,7 +615,7 @@ class EditItem(wx.Dialog):
             iField += 1
 
         boxSizer.Add(item=gridSizer, proportion=1,
-                  flag=wx.EXPAND | wx.ALL, border=5)
+                     flag=wx.EXPAND | wx.ALL, border=5)
 
         sizer.Add(item=boxSizer, proportion=1,
                   flag=wx.EXPAND | wx.ALL, border=5)
@@ -628,9 +645,9 @@ class EditItem(wx.Dialog):
         iField = 0
         for cell in self.data:
             value = self.fields[iField].GetValue()
-            
+
             if type(cell[2]).__name__ == "list":
-                    cell[1] = value
+                cell[1] = value
             else:
                 try:
                     cell[1] = cell[2](value)
@@ -646,15 +663,12 @@ class EditItem(wx.Dialog):
         """
         iField = 0
         itemIndexes = []
-        for cell in self.parent.colsData:            
+        for cell in self.parent.colsData:
             if type(cell[2]).__name__ == "list":
                 itemIndexes.append(self.fields[iField].GetSelection())
             else:
-                itemIndexes.append(-1) # not a choise column 
-            if cell[2]:   
+                itemIndexes.append(-1)  # not a choise column
+            if cell[2]:
                 iField += 1
 
         return itemIndexes
-
-
-
diff --git a/gui/wxpython/web_services/__init__.py b/gui/wxpython/web_services/__init__.py
index fc7d90b..3c25173 100644
--- a/gui/wxpython/web_services/__init__.py
+++ b/gui/wxpython/web_services/__init__.py
@@ -2,4 +2,4 @@ all = [
     'widgets',
     'cap_interface',
     'dialogs',
-    ]
+]
diff --git a/gui/wxpython/web_services/cap_interface.py b/gui/wxpython/web_services/cap_interface.py
index 394a7dd..e2fb9bb 100644
--- a/gui/wxpython/web_services/cap_interface.py
+++ b/gui/wxpython/web_services/cap_interface.py
@@ -29,10 +29,12 @@ if WMSLibPath not in sys.path:
     sys.path.append(WMSLibPath)
 
 from wms_cap_parsers import WMSCapabilitiesTree, \
-                            WMTSCapabilitiesTree, \
-                            OnEarthCapabilitiesTree
+    WMTSCapabilitiesTree, \
+    OnEarthCapabilitiesTree
+
 
 class CapabilitiesBase:
+
     def GetLayerByName(self, name):
         """Find layer by name
         """
@@ -49,7 +51,9 @@ class CapabilitiesBase:
         else:
             return None
 
+
 class LayerBase:
+
     def GetId(self):
         """Get layer id
         """
@@ -70,8 +74,10 @@ class LayerBase:
         """
         self.child_layers.append(layer)
 
+
 class WMSCapabilities(CapabilitiesBase, WMSCapabilitiesTree):
-    def __init__(self, cap_file, force_version = None):
+
+    def __init__(self, cap_file, force_version=None):
         """Create common interface for web_services.widgets to WMS
         capabilities data
         """
@@ -85,39 +91,41 @@ class WMSCapabilities(CapabilitiesBase, WMSCapabilitiesTree):
         self.layers_by_id = {}
         self._initializeLayerTree(self.root_layer)
 
-    def _initializeLayerTree(self, parent_layer, id = 0):
+    def _initializeLayerTree(self, parent_layer, id=0):
         """Build tree, which represents layers
         """
         if id == 0:
             parent_layer = WMSLayer(parent_layer, id, self)
             self.layers_by_id[id] = parent_layer
             id += 1
-        
+
         layer_nodes = parent_layer.GetLayerNode().findall((self.xml_ns.Ns("Layer")))
-        
+
         for l in layer_nodes:
             layer = WMSLayer(l, id, self)
             parent_layer.AddChildLayer(layer)
             self.layers_by_id[id] = layer
             id += 1
             id = self._initializeLayerTree(layer, id)
-        
+
         return id
 
     def GetFormats(self):
         """Get supported formats
-        """      
+        """
         request_node = self.cap_node.find(self.xml_ns.Ns("Request"))
         get_map_node = request_node.find(self.xml_ns.Ns("GetMap"))
         format_nodes = get_map_node.findall(self.xml_ns.Ns("Format"))
- 
+
         formats = []
         for node in format_nodes:
             formats.append(node.text)
 
         return formats
 
+
 class WMSLayer(LayerBase):
+
     def __init__(self, layer_node, id, cap):
         """Common interface for web_services.widgets to WMS
         capabilities <Layer> element
@@ -136,14 +144,14 @@ class WMSLayer(LayerBase):
         if param == 'title':
             title_node = self.layer_node.find(title)
             if title_node is not None:
-                return title_node.text 
+                return title_node.text
             else:
                 return None
 
         if param == 'name':
             name_node = self.layer_node.find(name)
             if name_node is not None:
-                return name_node.text 
+                return name_node.text
             else:
                 return None
 
@@ -154,7 +162,7 @@ class WMSLayer(LayerBase):
             styles = []
             style = self.xml_ns.Ns("Style")
             for style_node in self.layer_node.findall(style):
-                style_name = '' 
+                style_name = ''
                 style_title = ''
 
                 if style_node.find(title) is not None:
@@ -162,13 +170,14 @@ class WMSLayer(LayerBase):
                 if style_node.find(name) is not None:
                     style_name = style_node.find(name).text
 
-                styles.append({'title' : style_title, 
-                               'name' : style_name,
-                               'isDefault' : False})
+                styles.append({'title': style_title,
+                               'name': style_name,
+                               'isDefault': False})
             return styles
 
         if param == 'srs':
-            projs_nodes = self.layer_node.findall(self.xml_ns.Ns(self.cap.getprojtag()))
+            projs_nodes = self.layer_node.findall(
+                self.xml_ns.Ns(self.cap.getprojtag()))
 
             projs = []
             if projs_nodes is None:
@@ -188,7 +197,9 @@ class WMSLayer(LayerBase):
         else:
             return False
 
+
 class WMTSCapabilities(CapabilitiesBase, WMTSCapabilitiesTree):
+
     def __init__(self, cap_file):
         """Create common interface for web_services.widgets to WMTS
         capabilities data
@@ -201,7 +212,7 @@ class WMTSCapabilities(CapabilitiesBase, WMTSCapabilitiesTree):
         layers = self._findall(contents, 'Layer', self.xml_ns.NsWmts)
 
         self.layers_by_id = {}
-        
+
         id = 0
         root_layer = WMTSLayer(None, id, self)
         self.layers_by_id[id] = root_layer
@@ -210,8 +221,10 @@ class WMTSCapabilities(CapabilitiesBase, WMTSCapabilitiesTree):
             id += 1
             self.layers_by_id[id] = WMTSLayer(layer_node, id, self)
             root_layer.child_layers.append(self.layers_by_id[id])
-    
+
+
 class WMTSLayer(LayerBase):
+
     def __init__(self, layer_node, id, cap):
         """Common interface for web_services.widgets to WMTS
         capabilities <Layer> element
@@ -237,22 +250,23 @@ class WMTSLayer(LayerBase):
         if param == 'title':
             title_node = self.layer_node.find(title)
             if title_node is not None:
-                return title_node.text 
+                return title_node.text
             else:
                 return None
 
         if param == 'name':
             name_node = self.layer_node.find(name)
             if name_node is not None:
-                return name_node.text 
+                return name_node.text
             else:
                 return None
 
         if param == 'styles':
             styles = []
-            for style_node in self.layer_node.findall(self.xml_ns.NsWmts("Style")):
+            for style_node in self.layer_node.findall(
+                    self.xml_ns.NsWmts("Style")):
 
-                style_name = '' 
+                style_name = ''
                 style_title = ''
 
                 if style_node.find(title) is not None:
@@ -262,13 +276,13 @@ class WMTSLayer(LayerBase):
 
                 is_def = False
                 if 'isDefault' in style_node.attrib and\
-                    style_node.attrib['isDefault'] == 'true':
+                        style_node.attrib['isDefault'] == 'true':
                     is_def = True
 
-                styles.append({'title' : style_title, 
-                               'name' : style_name,
-                               'isDefault' : is_def})
-            
+                styles.append({'title': style_title,
+                               'name': style_name,
+                               'isDefault': is_def})
+
             return styles
 
         if param == 'format':
@@ -287,21 +301,24 @@ class WMTSLayer(LayerBase):
         if self.layer_node is None:
             return layer_projs
 
-        mat_set_links = self.layer_node.findall(self.xml_ns.NsWmts('TileMatrixSetLink'))
+        mat_set_links = self.layer_node.findall(
+            self.xml_ns.NsWmts('TileMatrixSetLink'))
 
         contents = self.cap.getroot().find(self.xml_ns.NsWmts('Contents'))
         tileMatrixSets = contents.findall(self.xml_ns.NsWmts('TileMatrixSet'))
 
-        for link in  mat_set_links:
-            mat_set_link_id = link.find(self.xml_ns.NsWmts('TileMatrixSet')).text
+        for link in mat_set_links:
+            mat_set_link_id = link.find(
+                self.xml_ns.NsWmts('TileMatrixSet')).text
             if not mat_set_link_id:
                 continue
 
             for mat_set in tileMatrixSets:
-                mat_set_id = mat_set.find(self.xml_ns.NsOws('Identifier')).text 
+                mat_set_id = mat_set.find(self.xml_ns.NsOws('Identifier')).text
                 if mat_set_id and mat_set_id != mat_set_link_id:
                     continue
-                mat_set_srs = mat_set.find(self.xml_ns.NsOws('SupportedCRS')).text.strip()
+                mat_set_srs = mat_set.find(
+                    self.xml_ns.NsOws('SupportedCRS')).text.strip()
                 layer_projs.append(mat_set_srs)
         return layer_projs
 
@@ -313,7 +330,9 @@ class WMTSLayer(LayerBase):
         else:
             return True
 
+
 class OnEarthCapabilities(CapabilitiesBase, OnEarthCapabilitiesTree):
+
     def __init__(self, cap_file):
         """Create Common interface for web_services.widgets to
         NASA OnEarth tile service data (equivalent to  WMS, WMTS
@@ -325,8 +344,8 @@ class OnEarthCapabilities(CapabilitiesBase, OnEarthCapabilitiesTree):
 
         self.layers_by_id = {}
         self._initializeLayerTree(self.getroot())
-        
-    def _initializeLayerTree(self, parent_layer, id = 0):
+
+    def _initializeLayerTree(self, parent_layer, id=0):
         """Build tree, which represents layers
         """
         if id == 0:
@@ -346,14 +365,16 @@ class OnEarthCapabilities(CapabilitiesBase, OnEarthCapabilitiesTree):
             id += 1
             parent_layer.child_layers.append(layer)
             if layer_node.tag == 'TiledGroups':
-               id = self._initializeLayerTree(layer, id)
+                id = self._initializeLayerTree(layer, id)
 
         return id
 
+
 class OnEarthLayer(LayerBase):
+
     def __init__(self, layer_node, parent_layer, id, cap):
         """Common interface for web_services.widgets to NASA Earth
-            capabilities <TiledGroup>\<TiledGroups> element 
+            capabilities <TiledGroup>\<TiledGroups> element
             (equivalent to  WMS, WMTS <Layer> element)
         """
         self.id = id
@@ -367,7 +388,7 @@ class OnEarthLayer(LayerBase):
         """
         if self.layer_node is None or \
            self.layer_node.tag == 'TiledGroups':
-           return False
+            return False
         else:
             return True
 
@@ -382,14 +403,14 @@ class OnEarthLayer(LayerBase):
         if param == 'title':
             title_node = self.layer_node.find("Title")
             if title_node is not None:
-                return title_node.text 
+                return title_node.text
             else:
                 return None
 
         if param == 'name':
             name_node = self.layer_node.find("Name")
             if name_node is not None:
-                return name_node.text 
+                return name_node.text
             else:
                 return None
 
diff --git a/gui/wxpython/web_services/dialogs.py b/gui/wxpython/web_services/dialogs.py
index a35d0ac..11f6dc4 100644
--- a/gui/wxpython/web_services/dialogs.py
+++ b/gui/wxpython/web_services/dialogs.py
@@ -24,46 +24,50 @@ import os
 import sys
 import shutil
 
-from copy      import deepcopy
+from copy import deepcopy
 
 import grass.script as grass
+from grass.script.task import cmdlist_to_tuple, cmdtuple_to_list
 
-from core             import globalvar
-from core.debug       import Debug
-from core.gcmd        import GMessage, GWarning, GError, RunCommand
-from core.utils       import GetSettingsPath, CmdToTuple, CmdTupleToList, _
-from core.gconsole    import CmdThread, GStderr, EVT_CMD_DONE, EVT_CMD_OUTPUT
+from core import globalvar
+from core.debug import Debug
+from core.gcmd import GMessage, GWarning, GError, RunCommand
+from core.utils import GetSettingsPath, _
+from core.gconsole import CmdThread, GStderr, EVT_CMD_DONE, EVT_CMD_OUTPUT
 
 from gui_core.gselect import Select
 
 from web_services.widgets import WSPanel, WSManageSettingsWidget
 
+
 class WSDialogBase(wx.Dialog):
-    """Base class for web service dialogs. 
+    """Base class for web service dialogs.
     """
-    def __init__(self, parent, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
 
-        wx.Dialog.__init__(self, parent, id, style = style, **kwargs)
+    def __init__(self, parent, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+        wx.Dialog.__init__(self, parent, id, style=style, **kwargs)
 
-        self.parent = parent 
+        self.parent = parent
 
         # contains panel for every web service on server
-        self.ws_panels =  {'WMS_1.1.1'  : {'panel' : None,
-                                           'label' : 'WMS 1.1.1'},
-                           'WMS_1.3.0' : {'panel' : None,
-                                          'label' : 'WMS 1.3.0'},
-                           'WMTS' : {'panel' : None,
-                                     'label' : 'WMTS'},
-                           'OnEarth' : {'panel' : None,
-                                        'label' : 'OnEarth'},
+        self.ws_panels = {'WMS_1.1.1': {'panel': None,
+                                        'label': 'WMS 1.1.1'},
+                          'WMS_1.3.0': {'panel': None,
+                                        'label': 'WMS 1.3.0'},
+                          'WMTS': {'panel': None,
+                                   'label': 'WMTS'},
+                          'OnEarth': {'panel': None,
+                                      'label': 'OnEarth'},
                           }
 
-        #TODO: should be in file
-        self.default_servers = { 'OSM-WMS-EUROPE' : ['http://watzmann-geog.urz.uni-heidelberg.de/cached/osm', '', ''],
-                                 'irs.gis-lab.info (OSM)' : ['http://irs.gis-lab.info', '', ''],
-                                 'NASA GIBS WMTS' : ['http://gibs.earthdata.nasa.gov/wmts/epsg4326/best/wmts.cgi', '', '']
-                               }
+        # TODO: should be in file
+        self.default_servers = {
+            'OSM-WMS-EUROPE':
+            ['http://watzmann-geog.urz.uni-heidelberg.de/cached/osm', '', ''],
+            'irs.gis-lab.info (OSM)': ['http://irs.gis-lab.info', '', ''],
+            'NASA GIBS WMTS': ['http://gibs.earthdata.nasa.gov/wmts/epsg4326/best/wmts.cgi', '', '']}
 
         # holds reference to web service panel which is showed
         self.active_ws_panel = None
@@ -71,7 +75,8 @@ class WSDialogBase(wx.Dialog):
         # buttons which are disabled when the dialog is not connected
         self.run_btns = []
 
-        # stores error messages for GError dialog showed when all web service connections were unsuccessful
+        # stores error messages for GError dialog showed when all web service
+        # connections were unsuccessful
         self.error_msgs = ''
 
         self._createWidgets()
@@ -81,20 +86,20 @@ class WSDialogBase(wx.Dialog):
 
         settingsFile = os.path.join(GetSettingsPath(), 'wxWS')
 
-        self.settsManager = WSManageSettingsWidget(parent=self,
-                                                 settingsFile=settingsFile,
-                                                 default_servers=self.default_servers)
+        self.settsManager = WSManageSettingsWidget(
+            parent=self, settingsFile=settingsFile,
+            default_servers=self.default_servers)
+
+        self.settingsBox = wx.StaticBox(parent=self,
+                                        id=wx.ID_ANY,
+                                        label=_(" Server settings "))
 
-        self.settingsBox = wx.StaticBox(parent = self, 
-                                        id = wx.ID_ANY,
-                                        label = _(" Server settings "))
-        
-        self.serverText = wx.StaticText(parent = self, 
-                                        id = wx.ID_ANY, label = _("Server:"))
-        self.server  = wx.TextCtrl(parent = self, id = wx.ID_ANY)
+        self.serverText = wx.StaticText(parent=self,
+                                        id=wx.ID_ANY, label=_("Server:"))
+        self.server = wx.TextCtrl(parent=self, id=wx.ID_ANY)
 
-        self.btn_connect = wx.Button(parent = self, 
-                                     id = wx.ID_ANY, label = _("&Connect"))
+        self.btn_connect = wx.Button(parent=self,
+                                     id=wx.ID_ANY, label=_("&Connect"))
         self.btn_connect.SetToolTipString(_("Connect to the server"))
         if not self.server.GetValue():
             self.btn_connect.Enable(False)
@@ -102,38 +107,44 @@ class WSDialogBase(wx.Dialog):
         self.infoCollapseLabelExp = _('Show advanced connection settings')
         self.infoCollapseLabelCol = _('Hide advanced connection settings')
 
-        self.adv_conn = wx.CollapsiblePane(parent = self,
-                                           label = self.infoCollapseLabelExp,
-                                           style = wx.CP_DEFAULT_STYLE |
-                                                   wx.CP_NO_TLW_RESIZE | wx.EXPAND)
+        self.adv_conn = wx.CollapsiblePane(parent=self,
+                                           label=self.infoCollapseLabelExp,
+                                           style=wx.CP_DEFAULT_STYLE |
+                                           wx.CP_NO_TLW_RESIZE | wx.EXPAND)
 
-        self.MakeAdvConnPane(pane = self.adv_conn.GetPane())
+        self.MakeAdvConnPane(pane=self.adv_conn.GetPane())
         self.adv_conn.Collapse(True)
-        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnAdvConnPaneChanged, self.adv_conn) 
+        self.Bind(
+            wx.EVT_COLLAPSIBLEPANE_CHANGED,
+            self.OnAdvConnPaneChanged,
+            self.adv_conn)
 
-        self.reqDataPanel = wx.Panel(parent = self, id = wx.ID_ANY)
+        self.reqDataPanel = wx.Panel(parent=self, id=wx.ID_ANY)
 
-        self.layerNameBox = wx.StaticBox(parent = self.reqDataPanel, 
-                                         id = wx.ID_ANY,
-                                         label = _(" Layer Manager Settings "))
+        self.layerNameBox = wx.StaticBox(parent=self.reqDataPanel,
+                                         id=wx.ID_ANY,
+                                         label=_(" Layer Manager Settings "))
 
-        self.layerNameText = wx.StaticText(parent = self.reqDataPanel, id = wx.ID_ANY, 
-                                           label = _("Output layer name:"))
-        self.layerName = wx.TextCtrl(parent = self.reqDataPanel, id = wx.ID_ANY)
+        self.layerNameText = wx.StaticText(
+            parent=self.reqDataPanel, id=wx.ID_ANY,
+            label=_("Output layer name:"))
+        self.layerName = wx.TextCtrl(parent=self.reqDataPanel, id=wx.ID_ANY)
 
         for ws in self.ws_panels.iterkeys():
             # set class WSPanel argument layerNameTxtCtrl
-            self.ws_panels[ws]['panel'] =  WSPanel(parent = self.reqDataPanel,
-                                                   web_service = ws)
-            self.ws_panels[ws]['panel'].capParsed.connect(self.OnPanelCapParsed)
-            self.ws_panels[ws]['panel'].layerSelected.connect(self.OnLayerSelected)
+            self.ws_panels[ws]['panel'] = WSPanel(parent=self.reqDataPanel,
+                                                  web_service=ws)
+            self.ws_panels[ws]['panel'].capParsed.connect(
+                self.OnPanelCapParsed)
+            self.ws_panels[ws]['panel'].layerSelected.connect(
+                self.OnLayerSelected)
 
         # buttons
-        self.btn_close = wx.Button(parent = self, id = wx.ID_CLOSE)
+        self.btn_close = wx.Button(parent=self, id=wx.ID_CLOSE)
         self.btn_close.SetToolTipString(_("Close dialog"))
-        
+
         # statusbar
-        self.statusbar = wx.StatusBar(parent = self, id = wx.ID_ANY)
+        self.statusbar = wx.StatusBar(parent=self, id=wx.ID_ANY)
 
         # bindings
         self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
@@ -155,30 +166,30 @@ class WSDialogBase(wx.Dialog):
 
         dialogSizer = wx.BoxSizer(wx.VERTICAL)
 
-        dialogSizer.Add(item = self.settsManager, proportion = 0,
-                        flag = wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border = 5)
-        
+        dialogSizer.Add(item=self.settsManager, proportion=0,
+                        flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border=5)
+
         # connectin settings
         settingsSizer = wx.StaticBoxSizer(self.settingsBox, wx.VERTICAL)
-        
-        serverSizer = wx.FlexGridSizer(cols = 3, vgap = 5, hgap = 5)
 
-        serverSizer.Add(item = self.serverText,
-                      flag = wx.ALIGN_CENTER_VERTICAL)
+        serverSizer = wx.FlexGridSizer(cols=3, vgap=5, hgap=5)
+
+        serverSizer.Add(item=self.serverText,
+                        flag=wx.ALIGN_CENTER_VERTICAL)
         serverSizer.AddGrowableCol(1)
-        serverSizer.Add(item = self.server,
-                      flag = wx.EXPAND | wx.ALL)
+        serverSizer.Add(item=self.server,
+                        flag=wx.EXPAND | wx.ALL)
+
+        serverSizer.Add(item=self.btn_connect)
 
-        serverSizer.Add(item = self.btn_connect)
+        settingsSizer.Add(item=serverSizer, proportion=0,
+                          flag=wx.EXPAND | wx.LEFT | wx.RIGHT, border=5)
 
-        settingsSizer.Add(item = serverSizer, proportion = 0,
-                          flag = wx.EXPAND | wx.LEFT | wx.RIGHT, border = 5)
-        
-        settingsSizer.Add(item = self.adv_conn,
-                          flag = wx.ALL | wx.EXPAND, border = 5)
+        settingsSizer.Add(item=self.adv_conn,
+                          flag=wx.ALL | wx.EXPAND, border=5)
 
-        dialogSizer.Add(item = settingsSizer, proportion = 0,
-                        flag = wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border = 5)
+        dialogSizer.Add(item=settingsSizer, proportion=0,
+                        flag=wx.EXPAND | wx.TOP | wx.LEFT | wx.RIGHT, border=5)
 
         # layer name, parsed capabilites
 
@@ -186,40 +197,43 @@ class WSDialogBase(wx.Dialog):
 
         layerNameSizer = wx.StaticBoxSizer(self.layerNameBox, wx.HORIZONTAL)
 
-        layerNameSizer.Add(item = self.layerNameText,
-                           flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 5)
+        layerNameSizer.Add(item=self.layerNameText,
+                           flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=5)
 
-        layerNameSizer.Add(item = self.layerName, 
-                           flag = wx.EXPAND, proportion = 1)
- 
-        reqDataSizer.Add(item = layerNameSizer,
-                         flag = wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND, border = 5)
+        layerNameSizer.Add(item=self.layerName,
+                           flag=wx.EXPAND, proportion=1)
+
+        reqDataSizer.Add(item=layerNameSizer, flag=wx.TOP |
+                         wx.LEFT | wx.RIGHT | wx.EXPAND, border=5)
 
         self.ch_ws_sizer = wx.BoxSizer(wx.VERTICAL)
 
-        reqDataSizer.Add(item = self.ch_ws_sizer, proportion = 0,
-                         flag = wx.TOP | wx.EXPAND, border = 5)
+        reqDataSizer.Add(item=self.ch_ws_sizer, proportion=0,
+                         flag=wx.TOP | wx.EXPAND, border=5)
 
         for ws in self.ws_panels.iterkeys():
-            reqDataSizer.Add(item = self.ws_panels[ws]['panel'], proportion = 1,
-                             flag = wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND, border = 5)
+            reqDataSizer.Add(
+                item=self.ws_panels[ws]['panel'],
+                proportion=1,
+                flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND,
+                border=5)
             self.ws_panels[ws]['panel'].Hide()
 
-        dialogSizer.Add(item = self.reqDataPanel, proportion = 1,
-                        flag = wx.EXPAND)
+        dialogSizer.Add(item=self.reqDataPanel, proportion=1,
+                        flag=wx.EXPAND)
 
         self.reqDataPanel.SetSizer(reqDataSizer)
         self.reqDataPanel.Hide()
 
         # buttons
-        self.btnsizer = wx.BoxSizer(orient = wx.HORIZONTAL)
+        self.btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
 
-        self.btnsizer.Add(item = self.btn_close, proportion = 0,
-                          flag = wx.ALL | wx.ALIGN_CENTER,
-                          border = 10)
-        
-        dialogSizer.Add(item = self.btnsizer, proportion = 0,
-                        flag = wx.ALIGN_CENTER)
+        self.btnsizer.Add(item=self.btn_close, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER,
+                          border=10)
+
+        dialogSizer.Add(item=self.btnsizer, proportion=0,
+                        flag=wx.ALIGN_CENTER)
 
         # expand wxWidget wx.StatusBar
         statusbarSizer = wx.BoxSizer(wx.HORIZONTAL)
@@ -238,40 +252,40 @@ class WSDialogBase(wx.Dialog):
     def MakeAdvConnPane(self, pane):
         """Create advanced connection settings pane
         """
-        self.usernameText = wx.StaticText(parent = pane,
-                                          id = wx.ID_ANY, label = _("Username:"))
-        self.username  = wx.TextCtrl(parent = pane, id = wx.ID_ANY)
+        self.usernameText = wx.StaticText(parent=pane,
+                                          id=wx.ID_ANY, label=_("Username:"))
+        self.username = wx.TextCtrl(parent=pane, id=wx.ID_ANY)
 
-        self.passwText = wx.StaticText(parent = pane, 
-                                        id = wx.ID_ANY, label = _("Password:"))
-        self.password  = wx.TextCtrl(parent = pane, id = wx.ID_ANY,
-                                     style = wx.TE_PASSWORD)
+        self.passwText = wx.StaticText(parent=pane,
+                                       id=wx.ID_ANY, label=_("Password:"))
+        self.password = wx.TextCtrl(parent=pane, id=wx.ID_ANY,
+                                    style=wx.TE_PASSWORD)
 
         # pane layout
         adv_conn_sizer = wx.BoxSizer(wx.VERTICAL)
 
         usernameSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        usernameSizer.Add(item = self.usernameText,
-                          flag = wx.ALIGN_CENTER_VERTICAL, border = 5)
+        usernameSizer.Add(item=self.usernameText,
+                          flag=wx.ALIGN_CENTER_VERTICAL, border=5)
 
-        usernameSizer.Add(item = self.username, proportion = 1, 
-                          flag = wx.EXPAND, border = 5)
+        usernameSizer.Add(item=self.username, proportion=1,
+                          flag=wx.EXPAND, border=5)
 
-        adv_conn_sizer.Add(item = usernameSizer,
-                           flag = wx.ALL | wx.EXPAND, border = 5)
+        adv_conn_sizer.Add(item=usernameSizer,
+                           flag=wx.ALL | wx.EXPAND, border=5)
 
         passwSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        passwSizer.Add(item = self.passwText,
-                       flag = wx.ALIGN_CENTER_VERTICAL, border = 5)
+        passwSizer.Add(item=self.passwText,
+                       flag=wx.ALIGN_CENTER_VERTICAL, border=5)
+
+        passwSizer.Add(item=self.password, proportion=1,
+                       flag=wx.EXPAND, border=5)
 
-        passwSizer.Add(item = self.password, proportion = 1, 
-                       flag = wx.EXPAND, border = 5)
+        adv_conn_sizer.Add(item=passwSizer,
+                           flag=wx.ALL | wx.EXPAND, border=5)
 
-        adv_conn_sizer.Add(item = passwSizer,
-                           flag = wx.ALL | wx.EXPAND, border = 5)
-        
         pane.SetSizer(adv_conn_sizer)
         adv_conn_sizer.Fit(pane)
 
@@ -283,8 +297,8 @@ class WSDialogBase(wx.Dialog):
         """
         server = self.server.GetValue().strip()
         if not server:
-            GMessage(parent = self,
-                     message = _("No data source defined, settings are not saved."))
+            GMessage(parent=self, message=_(
+                "No data source defined, settings are not saved."))
             return
 
         self.settsManager.SetDataToSave((server,
@@ -337,7 +351,7 @@ class WSDialogBase(wx.Dialog):
             self.btn_connect.Enable(True)
         else:
             self.btn_connect.Enable(False)
-        
+
         # clear content of the wxWidget wx.TextCtrl (Output Layer
         # name:), based on changing content of the wxWidget
         # wx.TextCtrl (Server:)
@@ -357,7 +371,7 @@ class WSDialogBase(wx.Dialog):
         """
         server = self.server.GetValue().strip()
 
-        self.ch_ws_sizer.Clear(deleteWindows = True)
+        self.ch_ws_sizer.Clear(deleteWindows=True)
 
         if self.active_ws_panel is not None:
             self.reqDataPanel.Hide()
@@ -368,21 +382,22 @@ class WSDialogBase(wx.Dialog):
             self.Layout()
             self.Fit()
 
-        self.statusbar.SetStatusText(_("Connecting to <%s>..." % self.server.GetValue().strip()))
+        self.statusbar.SetStatusText(
+            _("Connecting to <%s>..." % self.server.GetValue().strip()))
 
         # number of panels already connected
         self.finished_panels_num = 0
         for ws in self.ws_panels.iterkeys():
-            self.ws_panels[ws]['panel'].ConnectToServer(url = server,
-                                                        username = self.username.GetValue(),
-                                                        password = self.password.GetValue())
+            self.ws_panels[ws]['panel'].ConnectToServer(
+                url=server, username=self.username.GetValue(),
+                password=self.password.GetValue())
             self.ws_panels[ws]['panel'].Hide()
-        
+
     def OnPanelCapParsed(self, error_msg):
         """Called when panel has downloaded and parsed capabilities file.
         """
         # how many web service panels are finished
-        self.finished_panels_num +=  1
+        self.finished_panels_num += 1
 
         if error_msg:
             self.error_msgs += '\n' + error_msg
@@ -391,9 +406,10 @@ class WSDialogBase(wx.Dialog):
         if self.finished_panels_num == len(self.ws_panels):
             self.UpdateDialogAfterConnection()
 
-            # show error dialog only if connections to all web services were unsuccessful
+            # show error dialog only if connections to all web services were
+            # unsuccessful
             if not self._getConnectedWS() and self.error_msgs:
-                GError(self.error_msgs, parent = self)
+                GError(self.error_msgs, parent=self)
             self.error_msgs = ''
 
             self.Layout()
@@ -401,7 +417,7 @@ class WSDialogBase(wx.Dialog):
 
     def _getConnectedWS(self):
         """
-        :return: list of found web services on server (identified as keys in self.ws_panels) 
+        :return: list of found web services on server (identified as keys in self.ws_panels)
         """
         conn_ws = []
         for ws, data in self.ws_panels.iteritems():
@@ -413,7 +429,7 @@ class WSDialogBase(wx.Dialog):
     def UpdateDialogAfterConnection(self):
         """Update dialog after all web service panels downloaded and parsed capabilities data.
         """
-        avail_ws = {}        
+        avail_ws = {}
         conn_ws = self._getConnectedWS()
 
         for ws in conn_ws:
@@ -433,21 +449,28 @@ class WSDialogBase(wx.Dialog):
                     self.web_service_sel.append(ws)
                     self.rb_choices.append(avail_ws[ws]['label'])
 
-            self.choose_ws_rb = wx.RadioBox(parent = self.reqDataPanel, id = wx.ID_ANY, 
-                                            label = _("Available web services"), 
-                                            pos = wx.DefaultPosition, choices = self.rb_choices, 
-                                            majorDimension = 1, style = wx.RA_SPECIFY_ROWS)
-        
+            self.choose_ws_rb = wx.RadioBox(
+                parent=self.reqDataPanel, id=wx.ID_ANY,
+                label=_("Available web services"),
+                pos=wx.DefaultPosition, choices=self.rb_choices,
+                majorDimension=1, style=wx.RA_SPECIFY_ROWS)
+
             self.Bind(wx.EVT_RADIOBOX, self.OnChooseWs, self.choose_ws_rb)
-            self.ch_ws_sizer.Add(item = self.choose_ws_rb,
-                                 flag = wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND, border = 5)
-            self._showWsPanel(self.web_service_sel[self.choose_ws_rb.GetSelection()])
-            self.statusbar.SetStatusText(_("Connected to <%s>" % self.server.GetValue().strip()))
+            self.ch_ws_sizer.Add(
+                item=self.choose_ws_rb,
+                flag=wx.TOP | wx.LEFT | wx.RIGHT | wx.EXPAND,
+                border=5)
+            self._showWsPanel(
+                self.web_service_sel[
+                    self.choose_ws_rb.GetSelection()])
+            self.statusbar.SetStatusText(
+                _("Connected to <%s>" % self.server.GetValue().strip()))
             for btn in self.run_btns:
                 btn.Enable(True)
         # no web service found on server
         else:
-            self.statusbar.SetStatusText(_("Unable to connect to <%s>" % self.server.GetValue().strip()))
+            self.statusbar.SetStatusText(
+                _("Unable to connect to <%s>" % self.server.GetValue().strip()))
             for btn in self.run_btns:
                 btn.Enable(False)
             self.reqDataPanel.Hide()
@@ -456,7 +479,7 @@ class WSDialogBase(wx.Dialog):
     def OnChooseWs(self, event):
         """Show panel corresponding to selected web service.
         """
-        choosen_r = event.GetInt() 
+        choosen_r = event.GetInt()
         self._showWsPanel(self.web_service_sel[choosen_r])
 
     def _showWsPanel(self, ws):
@@ -483,13 +506,19 @@ class WSDialogBase(wx.Dialog):
         self.SendSizeEvent()
         self.Fit()
 
+
 class AddWSDialog(WSDialogBase):
     """Dialog for adding web service layer."""
-    def __init__(self, parent, giface, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
 
-        WSDialogBase.__init__(self, parent, id = wx.ID_ANY,
-                              style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs)
+    def __init__(self, parent, giface, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+        WSDialogBase.__init__(
+            self,
+            parent,
+            id=wx.ID_ANY,
+            style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+            **kwargs)
 
         self.SetTitle(_("Add web service layer"))
 
@@ -501,19 +530,23 @@ class AddWSDialog(WSDialogBase):
 
         WSDialogBase._createWidgets(self)
 
-        self.btn_add = wx.Button(parent = self, id = wx.ID_ANY, label = _("&Add layer"))
-        self.btn_add.SetToolTipString(_("Add selected web service layers as map layer into layer tree"))        
+        self.btn_add = wx.Button(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("&Add layer"))
+        self.btn_add.SetToolTipString(
+            _("Add selected web service layers as map layer into layer tree"))
         self.btn_add.Enable(False)
-        
+
         self.run_btns.append(self.btn_add)
 
     def _doLayout(self):
 
         WSDialogBase._doLayout(self)
 
-        self.btnsizer.Add(item = self.btn_add, proportion = 0,
-                          flag = wx.ALL | wx.ALIGN_CENTER,
-                          border = 10)
+        self.btnsizer.Add(item=self.btn_add, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER,
+                          border=10)
 
         # bindings
         self.btn_add.Bind(wx.EVT_BUTTON, self.OnAddLayer)
@@ -533,7 +566,7 @@ class AddWSDialog(WSDialogBase):
         """
         # add layer
         if self.active_ws_panel is None:
-            return 
+            return
 
         lcmd = self.active_ws_panel.CreateCmd()
         if not lcmd:
@@ -553,36 +586,37 @@ class AddWSDialog(WSDialogBase):
 
         active_ws = self.active_ws_panel.GetWebService()
         if 'WMS' not in active_ws:
-            cap_file =  self.active_ws_panel.GetCapFile()
+            cap_file = self.active_ws_panel.GetCapFile()
             cmd_cap_file = grass.tempfile()
             shutil.copyfile(cap_file, cmd_cap_file)
             lcmd.append('capfile=' + cmd_cap_file)
 
-        layer = ltree.AddLayer(ltype = 'wms',
-                               lname = self.active_ws_panel.GetOutputLayerName(), 
-                               lchecked = True, lcmd = lcmd)
-
+        layer = ltree.AddLayer(ltype='wms',
+                               lname=self.active_ws_panel.GetOutputLayerName(),
+                               lchecked=True, lcmd=lcmd)
 
         ws_cap_files = self._getCapFiles()
         # create properties dialog
-        cmd_list = ltree.GetLayerInfo(layer,'cmd')
-        cmd = CmdToTuple(cmd_list)
+        cmd_list = ltree.GetLayerInfo(layer, 'cmd')
+        cmd = cmdlist_to_tuple(cmd_list)
 
-        prop_win = WSPropertiesDialog(parent = self.parent,
-                                      giface = self.giface,
-                                      id = wx.ID_ANY,
-                                      layer = layer,
-                                      ws_cap_files = ws_cap_files,
-                                      cmd = cmd)
+        prop_win = WSPropertiesDialog(parent=self.parent,
+                                      giface=self.giface,
+                                      id=wx.ID_ANY,
+                                      layer=layer,
+                                      ws_cap_files=ws_cap_files,
+                                      cmd=cmd)
 
         prop_win.Hide()
-        ltree.GetOptData(dcmd = None, layer = layer, 
-                         params = None, propwin = prop_win)
+        ltree.GetOptData(dcmd=None, layer=layer,
+                         params=None, propwin=prop_win)
+
 
 class WSPropertiesDialog(WSDialogBase):
     """Dialog for editing web service properties."""
-    def __init__(self, parent, giface, layer, ws_cap_files, cmd, id = wx.ID_ANY,
-                 style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
+
+    def __init__(self, parent, giface, layer, ws_cap_files, cmd, id=wx.ID_ANY,
+                 style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs):
         """
         :param giface: grass interface
         :param layer: layer tree item
@@ -592,8 +626,12 @@ class WSPropertiesDialog(WSDialogBase):
         it is possible (cmp parameters exists in parsed web service cap_file)
         """
 
-        WSDialogBase.__init__(self, parent, id = wx.ID_ANY,
-                               style = wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER, **kwargs)
+        WSDialogBase.__init__(
+            self,
+            parent,
+            id=wx.ID_ANY,
+            style=wx.DEFAULT_DIALOG_STYLE | wx.RESIZE_BORDER,
+            **kwargs)
 
         self.SetTitle(_("Web service layer properties"))
 
@@ -601,7 +639,7 @@ class WSPropertiesDialog(WSDialogBase):
         self.giface = giface
 
         # after web service panels are connected, set dialog widgets
-        # according to cmd in this variable (if it is not None) 
+        # according to cmd in this variable (if it is not None)
         self.cmd_to_set = None
 
         # store data needed for reverting
@@ -610,8 +648,9 @@ class WSPropertiesDialog(WSDialogBase):
 
         ws_cap = self._getWSfromCmd(cmd)
         for ws in self.ws_panels.iterkeys():
-            # cap file used in cmd will be deleted, thnaks to the dialogs destructor
-            if ws == ws_cap and cmd[1].has_key('capfile'):
+            # cap file used in cmd will be deleted, thnaks to the dialogs
+            # destructor
+            if ws == ws_cap and 'capfile' in cmd[1]:
                 self.revert_ws_cap_files[ws] = cmd[1]['capfile']
                 del ws_cap_files[ws]
             else:
@@ -619,7 +658,7 @@ class WSPropertiesDialog(WSDialogBase):
 
         self._setRevertCapFiles(ws_cap_files)
 
-        self.LoadCapFiles(ws_cap_files = self.revert_ws_cap_files, cmd = cmd)
+        self.LoadCapFiles(ws_cap_files=self.revert_ws_cap_files, cmd=cmd)
         self.btn_ok.SetDefault()
 
     def __del__(self):
@@ -640,12 +679,13 @@ class WSPropertiesDialog(WSDialogBase):
 
         WSDialogBase._createWidgets(self)
 
-        self.btn_apply = wx.Button(parent = self, id = wx.ID_ANY, label = _("&Apply"))
-        self.btn_apply.SetToolTipString(_("Apply changes"))        
+        self.btn_apply = wx.Button(
+            parent=self, id=wx.ID_ANY, label=_("&Apply"))
+        self.btn_apply.SetToolTipString(_("Apply changes"))
         self.btn_apply.Enable(False)
         self.run_btns.append(self.btn_apply)
 
-        self.btn_ok = wx.Button(parent = self, id = wx.ID_ANY, label = _("&OK"))
+        self.btn_ok = wx.Button(parent=self, id=wx.ID_ANY, label=_("&OK"))
         self.btn_ok.SetToolTipString(_("Apply changes and close dialog"))
         self.btn_ok.Enable(False)
         self.run_btns.append(self.btn_ok)
@@ -654,13 +694,13 @@ class WSPropertiesDialog(WSDialogBase):
 
         WSDialogBase._doLayout(self)
 
-        self.btnsizer.Add(item = self.btn_apply, proportion = 0,
-                          flag = wx.ALL | wx.ALIGN_CENTER,
-                          border = 10)
+        self.btnsizer.Add(item=self.btn_apply, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER,
+                          border=10)
 
-        self.btnsizer.Add(item = self.btn_ok, proportion = 0,
-                          flag = wx.ALL | wx.ALIGN_CENTER,
-                          border = 10)
+        self.btnsizer.Add(item=self.btn_ok, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER,
+                          border=10)
 
         # bindings
         self.btn_apply.Bind(wx.EVT_BUTTON, self.OnApply)
@@ -671,7 +711,7 @@ class WSPropertiesDialog(WSDialogBase):
 
         For parameters description, see the constructor.
         """
-        self.ch_ws_sizer.Clear(deleteWindows = True)
+        self.ch_ws_sizer.Clear(deleteWindows=True)
 
         self.cmd_to_set = cmd
 
@@ -688,21 +728,21 @@ class WSPropertiesDialog(WSDialogBase):
         for ws, data in self.ws_panels.iteritems():
             cap_file = None
 
-            if ws_cap_files.has_key(ws):
+            if ws in ws_cap_files:
                 cap_file = ws_cap_files[ws]
 
-            data['panel'].ParseCapFile(url = conn['url'], 
-                                       username = conn['password'], 
-                                       password = conn['username'], 
-                                       cap_file = cap_file)
+            data['panel'].ParseCapFile(url=conn['url'],
+                                       username=conn['password'],
+                                       password=conn['username'],
+                                       cap_file=cap_file)
 
     def _getServerConnFromCmd(self, cmd):
-        """Get url/server/passwod from cmd tuple 
+        """Get url/server/passwod from cmd tuple
         """
-        conn = { 'url' : '', 'username' : '', 'password' : ''}
-        
+        conn = {'url': '', 'username': '', 'password': ''}
+
         for k in conn.iterkeys():
-            if cmd[1].has_key(k):
+            if k in cmd[1]:
                 conn[k] = cmd[1][k]
         return conn
 
@@ -716,13 +756,13 @@ class WSPropertiesDialog(WSDialogBase):
         if 'WMS' not in active_ws:
             lcmd.append('capfile=' + self.revert_ws_cap_files[active_ws])
 
-        self.giface.GetLayerTree().GetOptData(dcmd = lcmd, 
-                                              layer = self.layer, 
-                                              params = None,
-                                              propwin = self)
+        self.giface.GetLayerTree().GetOptData(dcmd=lcmd,
+                                              layer=self.layer,
+                                              params=None,
+                                              propwin=self)
 
-        #TODO use just list or tuple
-        cmd = CmdToTuple(lcmd)
+        # TODO use just list or tuple
+        cmd = cmdlist_to_tuple(lcmd)
         self.revert_cmd = cmd
         self._setRevertCapFiles(self._getCapFiles())
 
@@ -737,7 +777,7 @@ class WSPropertiesDialog(WSDialogBase):
         else:
             self.btn_connect.SetDefault()
 
-    def OnApply(self, event):   
+    def OnApply(self, event):
         self._apply()
 
     def OnSave(self, event):
@@ -751,8 +791,8 @@ class WSPropertiesDialog(WSDialogBase):
     def _close(self):
         """Hide dialog"""
         self.Hide()
-        self.LoadCapFiles(cmd = self.revert_cmd,
-                          ws_cap_files = self.revert_ws_cap_files)
+        self.LoadCapFiles(cmd=self.revert_cmd,
+                          ws_cap_files=self.revert_ws_cap_files)
 
     def OnPanelCapParsed(self, error_msg):
         """Called when panel has downloaded and parsed capabilities file.
@@ -777,20 +817,25 @@ class WSPropertiesDialog(WSDialogBase):
     def _getWSfromCmd(self, cmd):
         driver = cmd[1]['driver']
         ws = driver.split('_')[0]
-        
+
         if ws == 'WMS':
             ws += '_' + cmd[1]['wms_version']
         return ws
 
+
 class SaveWMSLayerDialog(wx.Dialog):
     """Dialog for saving web service layer into GRASS vector/raster layer.
 
     .. todo::
         Implement saving data in region of map display.
     """
+
     def __init__(self, parent, layer, giface):
-        
-        wx.Dialog.__init__(self, parent = parent, title = ("Save web service layer as raster map"), id = wx.ID_ANY)
+
+        wx.Dialog.__init__(
+            self, parent=parent,
+            title=("Save web service layer as raster map"),
+            id=wx.ID_ANY)
 
         self.layer = layer
         self._giface = giface
@@ -807,47 +852,60 @@ class SaveWMSLayerDialog(wx.Dialog):
         self.labels = {}
         self.params = {}
 
-        self.labels['output'] = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Name for output raster map:"))
+        self.labels['output'] = wx.StaticText(
+            parent=self, id=wx.ID_ANY, label=_("Name for output raster map:"))
 
-        self.params['output'] = Select(parent = self, type = 'raster', mapsets = [grass.gisenv()['MAPSET']],
-                                       size = globalvar.DIALOG_GSELECT_SIZE)
+        self.params['output'] = Select(
+            parent=self,
+            type='raster',
+            mapsets=[
+                grass.gisenv()['MAPSET']],
+            size=globalvar.DIALOG_GSELECT_SIZE)
 
-        self.regionStBoxLabel = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                                             label = " %s " % _("Export region"))
+        self.regionStBoxLabel = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                                             label=" %s " % _("Export region"))
 
         self.region_types_order = ['display', 'comp', 'named']
-        self.region_types =  {}
-        self.region_types['display'] = wx.RadioButton(parent=self, label=_("Map display"),
-                                                      style=wx.RB_GROUP)
-        self.region_types['comp'] = wx.RadioButton(parent=self, label=_("Computational region"))
-        self.region_types['named'] = wx.RadioButton(parent=self, label=_("Named region"))
-        self.region_types['display'].SetToolTipString(_("Extent and resolution"
-                                                        " are based on Map Display geometry."))
-        self.region_types['comp'].SetToolTipString(_("Extent and resolution"
-                                                     " are based on computational region."))
-        self.region_types['named'].SetToolTipString(_("Extent and resolution"
-                                                      " are based on named region."))
-        self.region_types['display'].SetValue(True)  # set default as map display
-
-        self.overwrite  = wx.CheckBox(parent = self, id = wx.ID_ANY,
-                                      label = _("Overwrite existing raster map"))
-
-        self.named_reg_panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        self.labels['region'] = wx.StaticText(parent = self.named_reg_panel, id = wx.ID_ANY, 
-                                             label = _("Choose named region:"))
-
-        self.params['region'] = Select(parent = self.named_reg_panel, type = 'region',
-                                       size = globalvar.DIALOG_GSELECT_SIZE)
+        self.region_types = {}
+        self.region_types['display'] = wx.RadioButton(
+            parent=self, label=_("Map display"), style=wx.RB_GROUP)
+        self.region_types['comp'] = wx.RadioButton(
+            parent=self, label=_("Computational region"))
+        self.region_types['named'] = wx.RadioButton(
+            parent=self, label=_("Named region"))
+        self.region_types['display'].SetToolTipString(
+            _("Extent and resolution" " are based on Map Display geometry."))
+        self.region_types['comp'].SetToolTipString(
+            _("Extent and resolution" " are based on computational region."))
+        self.region_types['named'].SetToolTipString(
+            _("Extent and resolution" " are based on named region."))
+        self.region_types['display'].SetValue(
+            True)  # set default as map display
+
+        self.overwrite = wx.CheckBox(parent=self, id=wx.ID_ANY,
+                                     label=_("Overwrite existing raster map"))
+
+        self.named_reg_panel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.labels['region'] = wx.StaticText(
+            parent=self.named_reg_panel, id=wx.ID_ANY,
+            label=_("Choose named region:"))
+
+        self.params['region'] = Select(
+            parent=self.named_reg_panel, type='region',
+            size=globalvar.DIALOG_GSELECT_SIZE)
 
         # buttons
-        self.btn_close = wx.Button(parent = self, id = wx.ID_CLOSE)
+        self.btn_close = wx.Button(parent=self, id=wx.ID_CLOSE)
         self.btn_close.SetToolTipString(_("Close dialog"))
 
-        self.btn_ok = wx.Button(parent=self, id=wx.ID_OK, label=_("&Save layer"))
+        self.btn_ok = wx.Button(
+            parent=self,
+            id=wx.ID_OK,
+            label=_("&Save layer"))
         self.btn_ok.SetToolTipString(_("Save web service layer as raster map"))
 
         # statusbar
-        self.statusbar = wx.StatusBar(parent = self, id = wx.ID_ANY)
+        self.statusbar = wx.StatusBar(parent=self, id=wx.ID_ANY)
 
         self._layout()
 
@@ -858,39 +916,43 @@ class SaveWMSLayerDialog(wx.Dialog):
 
         regionSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        dialogSizer.Add(item = self._addSelectSizer(title = self.labels['output'], 
-                                                    sel = self.params['output']))
+        dialogSizer.Add(item=self._addSelectSizer(title=self.labels['output'],
+                                                  sel=self.params['output']))
 
         regionSizer = wx.StaticBoxSizer(self.regionStBoxLabel, wx.VERTICAL)
 
         regionTypeSizer = wx.BoxSizer(wx.HORIZONTAL)
         for r_type in self.region_types_order:
-            regionTypeSizer.Add(item=self.region_types[r_type], flag=wx.RIGHT, border=8)
+            regionTypeSizer.Add(
+                item=self.region_types[r_type],
+                flag=wx.RIGHT, border=8)
 
-        regionSizer.Add(item = regionTypeSizer)
+        regionSizer.Add(item=regionTypeSizer)
 
-        self.named_reg_panel.SetSizer(self._addSelectSizer(title = self.labels['region'],
-                                                            sel = self.params['region']))
-        regionSizer.Add(item = self.named_reg_panel)
+        self.named_reg_panel.SetSizer(
+            self._addSelectSizer(
+                title=self.labels['region'],
+                sel=self.params['region']))
+        regionSizer.Add(item=self.named_reg_panel)
         self.named_reg_panel.Hide()
 
-        dialogSizer.Add(item = regionSizer, flag = wx.EXPAND)
+        dialogSizer.Add(item=regionSizer, flag=wx.EXPAND)
 
         dialogSizer.Add(item=self.overwrite, flag=wx.TOP, border=10)
 
         # buttons
-        self.btnsizer = wx.BoxSizer(orient = wx.HORIZONTAL)
+        self.btnsizer = wx.BoxSizer(orient=wx.HORIZONTAL)
+
+        self.btnsizer.Add(item=self.btn_close, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER,
+                          border=10)
 
-        self.btnsizer.Add(item = self.btn_close, proportion = 0,
-                          flag = wx.ALL | wx.ALIGN_CENTER,
-                          border = 10)
-        
-        self.btnsizer.Add(item = self.btn_ok, proportion = 0,
-                          flag = wx.ALL | wx.ALIGN_CENTER,
-                          border = 10)
+        self.btnsizer.Add(item=self.btn_ok, proportion=0,
+                          flag=wx.ALL | wx.ALIGN_CENTER,
+                          border=10)
 
-        dialogSizer.Add(item = self.btnsizer, proportion = 0,
-                        flag = wx.ALIGN_CENTER)
+        dialogSizer.Add(item=self.btnsizer, proportion=0,
+                        flag=wx.ALIGN_CENTER)
 
         self._border.Add(item=dialogSizer, proportion=0,
                          flag=wx.ALL, border=5)
@@ -905,27 +967,30 @@ class SaveWMSLayerDialog(wx.Dialog):
         self.btn_close.Bind(wx.EVT_BUTTON, self.OnClose)
         self.btn_ok.Bind(wx.EVT_BUTTON, self.OnSave)
 
-        self.Bind(EVT_CMD_DONE,   self.OnCmdDone)
+        self.Bind(EVT_CMD_DONE, self.OnCmdDone)
         self.Bind(EVT_CMD_OUTPUT, self.OnCmdOutput)
 
         for r_type in self.region_types_order:
-            self.Bind(wx.EVT_RADIOBUTTON, self.OnRegionType, self.region_types[r_type])
+            self.Bind(
+                wx.EVT_RADIOBUTTON,
+                self.OnRegionType,
+                self.region_types[r_type])
 
-    def _addSelectSizer(self, title, sel): 
+    def _addSelectSizer(self, title, sel):
         """Helper layout function.
         """
-        selSizer = wx.BoxSizer(orient = wx.VERTICAL)
+        selSizer = wx.BoxSizer(orient=wx.VERTICAL)
 
         selTitleSizer = wx.BoxSizer(wx.HORIZONTAL)
-        selTitleSizer.Add(item = title, proportion = 1,
-                          flag = wx.LEFT | wx.TOP | wx.EXPAND, border = 5)
+        selTitleSizer.Add(item=title, proportion=1,
+                          flag=wx.LEFT | wx.TOP | wx.EXPAND, border=5)
 
-        selSizer.Add(item = selTitleSizer, proportion = 0,
-                     flag = wx.EXPAND)
+        selSizer.Add(item=selTitleSizer, proportion=0,
+                     flag=wx.EXPAND)
 
-        selSizer.Add(item = sel, proportion = 1,
-                     flag = wx.EXPAND | wx.ALL| wx.ALIGN_CENTER_VERTICAL,
-                     border = 5)
+        selSizer.Add(item=sel, proportion=1,
+                     flag=wx.EXPAND | wx.ALL | wx.ALIGN_CENTER_VERTICAL,
+                     border=5)
 
         return selSizer
 
@@ -949,9 +1014,9 @@ class SaveWMSLayerDialog(wx.Dialog):
     def OnSave(self, event):
         """Import WMS raster data into GRASS as raster layer.
         """
-        self.thread.abort(abortall = True)
+        self.thread.abort(abortall=True)
         currmapset = grass.gisenv()['MAPSET']
-        
+
         self.output = self.params['output'].GetValue().strip()
         l_spl = self.output.strip().split("@")
 
@@ -961,21 +1026,20 @@ class SaveWMSLayerDialog(wx.Dialog):
             msg = _('Missing output raster.')
 
         elif len(l_spl) > 1 and \
-             l_spl[1] != currmapset:
-                msg = _('Output map can be added only to current mapset.')
+                l_spl[1] != currmapset:
+            msg = _('Output map can be added only to current mapset.')
 
         elif not self.overwrite.IsChecked() and\
-            grass.find_file(self.output, 'cell', '.')['fullname']:
+                grass.find_file(self.output, 'cell', '.')['fullname']:
             msg = _('Output map <%s> already exists' % self.output)
 
         if msg:
-            GMessage(parent = self,
-                     message = msg)
+            GMessage(parent=self,
+                     message=msg)
             return
 
         self.output = l_spl[0]
 
-
         # check region
         region = self.params['region'].GetValue().strip()
         reg_spl = region.strip().split("@")
@@ -985,8 +1049,11 @@ class SaveWMSLayerDialog(wx.Dialog):
             reg_mapset = reg_spl[1]
 
         if self.region_types['named'].GetValue():
-            if not grass.find_file(reg_spl[0], 'windows', reg_mapset)['fullname']:
-                msg = _('Region <%s> does not exist.' % self.params['region'].GetValue())
+            if not grass.find_file(reg_spl[0], 'windows', reg_mapset)[
+                    'fullname']:
+                msg = _(
+                    'Region <%s> does not exist.' %
+                    self.params['region'].GetValue())
                 GWarning(parent=self,
                          message=msg)
                 return
@@ -994,7 +1061,7 @@ class SaveWMSLayerDialog(wx.Dialog):
         # create r.in.wms command
         cmd = ('r.in.wms', deepcopy(self.cmd[1]))
 
-        if cmd[1].has_key('map'):
+        if 'map' in cmd[1]:
             del cmd[1]['map']
 
         cmd[1]['output'] = self.output
@@ -1009,7 +1076,7 @@ class SaveWMSLayerDialog(wx.Dialog):
             region = self._giface.GetMapWindow().GetMap().SetRegion()
             env['GRASS_REGION'] = region
 
-        cmdList = CmdTupleToList(cmd)
+        cmdList = cmdtuple_to_list(cmd)
         self.currentPid = self.thread.GetId()
 
         self.thread.RunCmd(cmdList, env=env, stderr=self.cmdStdErr)
@@ -1043,7 +1110,7 @@ class SaveWMSLayerDialog(wx.Dialog):
             if event.type == 'error':
                 msg = _('Unable to fetch data.\n')
                 msg += event.text
-                GWarning(parent = self,
-                         message = msg)
+                GWarning(parent=self,
+                         message=msg)
         else:
             Debug.msg(1, event.text)
diff --git a/gui/wxpython/web_services/widgets.py b/gui/wxpython/web_services/widgets.py
index c9affc5..f77adf8 100644
--- a/gui/wxpython/web_services/widgets.py
+++ b/gui/wxpython/web_services/widgets.py
@@ -23,25 +23,25 @@ import shutil
 from copy import deepcopy
 try:
     from xml.etree.ElementTree import ParseError
-except ImportError: # < Python 2.7
+except ImportError:  # < Python 2.7
     from xml.parsers.expat import ExpatError as ParseError
 
 import wx
-import wx.lib.flatnotebook    as FN
-import wx.lib.colourselect    as csel
+import wx.lib.flatnotebook as FN
+import wx.lib.colourselect as csel
 import wx.lib.mixins.listctrl as listmix
-from   wx.lib.newevent        import NewEvent
-from   wx.gizmos              import TreeListCtrl
+from wx.lib.newevent import NewEvent
+from wx.gizmos import TreeListCtrl
 
-from core              import globalvar
-from core.debug        import Debug
-from core.gcmd         import GWarning, GMessage
-from core.gconsole     import CmdThread, GStderr, EVT_CMD_DONE, EVT_CMD_OUTPUT
+from core import globalvar
+from core.debug import Debug
+from core.gcmd import GWarning, GMessage
+from core.gconsole import CmdThread, GStderr, EVT_CMD_DONE, EVT_CMD_OUTPUT
 from core.utils import _
 
 from web_services.cap_interface import WMSCapabilities, WMTSCapabilities, OnEarthCapabilities
 
-from gui_core.widgets  import GNotebook
+from gui_core.widgets import GNotebook
 from gui_core.widgets import ManageSettingsWidget
 
 import grass.script as grass
@@ -51,11 +51,13 @@ if rinwms_path not in sys.path:
     sys.path.append(rinwms_path)
 
 from wms_base import WMSDriversInfo
-from srs import Srs 
+from srs import Srs
 
 from grass.pydispatch.signal import Signal
 
+
 class WSPanel(wx.Panel):
+
     def __init__(self, parent, web_service, **kwargs):
         """Show data from capabilities file.
 
@@ -65,7 +67,7 @@ class WSPanel(wx.Panel):
         :param parent:  parent widget
         :param web_service:  web service to be panel generated for
         """
-        wx.Panel.__init__(self, parent = parent, id = wx.ID_ANY)
+        wx.Panel.__init__(self, parent=parent, id=wx.ID_ANY)
 
         self.parent = parent
         self.ws = web_service
@@ -95,34 +97,40 @@ class WSPanel(wx.Panel):
         self.drv_props = self.drv_info.GetDrvProperties(self.ws)
 
         self.ws_drvs = {
-                        'WMS_1.1.1' : {
-                                        'cmd' : ['wms_version=1.1.1',
-                                                 'driver=WMS_GRASS'],
-                                        'cap_parser' : lambda temp_file : WMSCapabilities(temp_file, '1.1.1'),
-                                      },
-                        'WMS_1.3.0' : {
-                                        'cmd' : ['wms_version=1.3.0',
-                                                 'driver=WMS_GRASS'],
-                                        'cap_parser' : lambda temp_file : WMSCapabilities(temp_file, '1.3.0'),
-                                      },
-                        'WMTS' :      {
-                                        'cmd' : ['driver=WMTS_GRASS'],
-                                        'cap_parser' : WMTSCapabilities,
-                                      },
-                        'OnEarth' : {
-                                        'cmd' : ['driver=OnEarth_GRASS'],
-                                        'cap_parser' : OnEarthCapabilities,
-                                      }
-                      }
+            'WMS_1.1.1': {
+                'cmd': [
+                    'wms_version=1.1.1',
+                    'driver=WMS_GRASS'],
+                'cap_parser': lambda temp_file: WMSCapabilities(
+                    temp_file,
+                    '1.1.1'),
+            },
+            'WMS_1.3.0': {
+                'cmd': [
+                    'wms_version=1.3.0',
+                    'driver=WMS_GRASS'],
+                'cap_parser': lambda temp_file: WMSCapabilities(
+                    temp_file,
+                    '1.3.0'),
+            },
+            'WMTS': {
+                'cmd': ['driver=WMTS_GRASS'],
+                'cap_parser': WMTSCapabilities,
+            },
+            'OnEarth': {
+                'cmd': ['driver=OnEarth_GRASS'],
+                'cap_parser': OnEarthCapabilities,
+            }}
 
         self.cmdStdErr = GStderr(self)
         self.cmd_thread = CmdThread(self)
         self.cap_file = grass.tempfile()
 
-        reqDataBox = wx.StaticBox(parent=self, label=_(" Requested data settings "))
+        reqDataBox = wx.StaticBox(
+            parent=self, label=_(" Requested data settings "))
         self._nb_sizer = wx.StaticBoxSizer(reqDataBox, wx.VERTICAL)
-        self.notebook = GNotebook(parent = self,
-                                  style = FN.FNB_FANCY_TABS | FN.FNB_NO_X_BUTTON)
+        self.notebook = GNotebook(parent=self,
+                                  style=FN.FNB_FANCY_TABS | FN.FNB_NO_X_BUTTON)
 
         self._requestPage()
         self._advancedSettsPage()
@@ -135,7 +143,7 @@ class WSPanel(wx.Panel):
         self.Bind(EVT_CMD_OUTPUT, self.OnCmdOutput)
 
     def __del__(self):
-        self.cmd_thread.abort(abortall =True)
+        self.cmd_thread.abort(abortall=True)
         grass.try_remove(self.cap_file)
 
     def _layout(self):
@@ -144,13 +152,13 @@ class WSPanel(wx.Panel):
 
     def _requestPage(self):
         """Create request page"""
-        self.req_page_panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        self.notebook.AddPage(page = self.req_page_panel,
+        self.req_page_panel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.notebook.AddPage(page=self.req_page_panel,
                               text=_('Request'),
-                              name = 'request')
+                              name='request')
 
         # list of layers
-        self.layersBox = wx.StaticBox(parent = self.req_page_panel, id = wx.ID_ANY,
+        self.layersBox = wx.StaticBox(parent=self.req_page_panel, id=wx.ID_ANY,
                                       label=_("List of layers "))
 
         style = wx.TR_DEFAULT_STYLE | wx.TR_HAS_BUTTONS | wx.TR_FULL_ROW_HIGHLIGHT
@@ -159,16 +167,19 @@ class WSPanel(wx.Panel):
         if 'WMS' not in self.ws:
             style = style | wx.TR_HIDE_ROOT
 
-        self.list = LayersList(parent = self.req_page_panel,
-                               web_service = self.ws,
-                               style = style)
+        self.list = LayersList(parent=self.req_page_panel,
+                               web_service=self.ws,
+                               style=style)
 
         self.params['format'] = None
 
         self.params['srs'] = None
-        if 'srs' not in  self.drv_props['ignored_params']:
-            projText = wx.StaticText(parent = self.req_page_panel, id = wx.ID_ANY, label = _("Source projection:"))
-            self.params['srs'] =  wx.Choice(parent = self.req_page_panel, id = wx.ID_ANY)
+        if 'srs' not in self.drv_props['ignored_params']:
+            projText = wx.StaticText(
+                parent=self.req_page_panel, id=wx.ID_ANY,
+                label=_("Source projection:"))
+            self.params['srs'] = wx.Choice(
+                parent=self.req_page_panel, id=wx.ID_ANY)
 
         self.list.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnListSelChanged)
 
@@ -177,29 +188,44 @@ class WSPanel(wx.Panel):
 
         layersSizer = wx.StaticBoxSizer(self.layersBox, wx.HORIZONTAL)
 
-        layersSizer.Add(item = self.list, proportion = 1,
-                        flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+        layersSizer.Add(
+            item=self.list,
+            proportion=1,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
 
-        self.req_page_sizer.Add(item = layersSizer, proportion = 1,
-                            flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+        self.req_page_sizer.Add(
+            item=layersSizer,
+            proportion=1,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
 
         self.source_sizer = wx.BoxSizer(wx.HORIZONTAL)
 
         if self.params['format'] is not None:
-            self.source_sizer.Add(item = self.params['format'],
-                                  flag = wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 5)
+            self.source_sizer.Add(
+                item=self.params['format'],
+                flag=wx.LEFT | wx.RIGHT | wx.BOTTOM,
+                border=5)
 
         if self.params['srs'] is not None:
-            self.source_sizer.Add(item = projText, flag = wx.ALIGN_CENTER_VERTICAL | wx.ALL, border = 5)
-            self.source_sizer.Add(item = self.params['srs'],
-                                  flag = wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP | wx.BOTTOM, border = 5)
-
-        self.req_page_sizer.Add(item = self.source_sizer,
-                                flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 5)
+            self.source_sizer.Add(
+                item=projText,
+                flag=wx.ALIGN_CENTER_VERTICAL | wx.ALL,
+                border=5)
+            self.source_sizer.Add(
+                item=self.params['srs'],
+                flag=wx.ALIGN_CENTER_VERTICAL | wx.RIGHT | wx.TOP | wx.BOTTOM,
+                border=5)
+
+        self.req_page_sizer.Add(
+            item=self.source_sizer,
+            flag=wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND,
+            border=5)
 
         self.req_page_panel.SetSizer(self.req_page_sizer)
 
-    def enableButtons(self, enable = True):
+    def enableButtons(self, enable=True):
         """Enable/disable up, down, buttons
         """
         self.btnUp.Enable(enable)
@@ -208,46 +234,59 @@ class WSPanel(wx.Panel):
     def _advancedSettsPage(self):
         """Create advanced settings page
         """
-        #TODO parse maxcol, maxrow, settings from d.wms module?
-        #TODO OnEarth driver - add selection of time
-        adv_setts_panel = wx.Panel(parent = self, id = wx.ID_ANY)
-        self.notebook.AddPage(page = adv_setts_panel,
+        # TODO parse maxcol, maxrow, settings from d.wms module?
+        # TODO OnEarth driver - add selection of time
+        adv_setts_panel = wx.Panel(parent=self, id=wx.ID_ANY)
+        self.notebook.AddPage(page=adv_setts_panel,
                               text=_('Advanced request settings'),
-                              name = 'adv_req_setts')
+                              name='adv_req_setts')
 
         labels = {}
         self.l_odrder_list = None
         if 'WMS' in self.ws:
-            labels['l_order'] = wx.StaticBox(parent = adv_setts_panel, id = wx.ID_ANY,
-                                             label = _("Order of layers in raster"))
-            self.l_odrder_list = wx.ListBox(adv_setts_panel, id = wx.ID_ANY, choices = [],
-                                                                style = wx.LB_SINGLE|wx.LB_NEEDED_SB)
-            self.btnUp = wx.Button(adv_setts_panel, id = wx.ID_ANY, label = _("Up"))
-            self.btnDown = wx.Button(adv_setts_panel, id = wx.ID_ANY, label = _("Down"))
+            labels['l_order'] = wx.StaticBox(
+                parent=adv_setts_panel, id=wx.ID_ANY,
+                label=_("Order of layers in raster"))
+            self.l_odrder_list = wx.ListBox(
+                adv_setts_panel, id=wx.ID_ANY, choices=[],
+                style=wx.LB_SINGLE | wx.LB_NEEDED_SB)
+            self.btnUp = wx.Button(
+                adv_setts_panel, id=wx.ID_ANY, label=_("Up"))
+            self.btnDown = wx.Button(
+                adv_setts_panel, id=wx.ID_ANY, label=_("Down"))
 
             self.btnUp.Bind(wx.EVT_BUTTON, self.OnUp)
             self.btnDown.Bind(wx.EVT_BUTTON, self.OnDown)
 
-        labels['method'] = wx.StaticText(parent = adv_setts_panel, id = wx.ID_ANY,
-                                         label = _("Reprojection method:"))
+        labels['method'] = wx.StaticText(parent=adv_setts_panel, id=wx.ID_ANY,
+                                         label=_("Reprojection method:"))
 
         self.reproj_methods = ['nearest', 'linear', 'cubic', 'cubicspline']
-        self.params['method'] = wx.Choice(parent = adv_setts_panel, id = wx.ID_ANY,
-                                          choices = [_('Nearest neighbor'), _('Linear interpolation'),
-                                                     _('Cubic interpolation'), _('Cubic spline interpolation')])
-
-        labels['maxcols'] = wx.StaticText(parent = adv_setts_panel, id = wx.ID_ANY,
-                                          label = _("Maximum columns to request from server at time:"))
-        self.params['maxcols'] = wx.SpinCtrl(parent = adv_setts_panel, id = wx.ID_ANY, size = (100, -1))
-
-        labels['maxrows'] = wx.StaticText(parent = adv_setts_panel, id = wx.ID_ANY,
-                                          label = _("Maximum rows to request from server at time:"))
-        self.params['maxrows'] = wx.SpinCtrl(parent = adv_setts_panel, id = wx.ID_ANY, size = (100, -1))
+        self.params['method'] = wx.Choice(
+            parent=adv_setts_panel,
+            id=wx.ID_ANY,
+            choices=[
+                _('Nearest neighbor'),
+                _('Linear interpolation'),
+                _('Cubic interpolation'),
+                _('Cubic spline interpolation')])
+
+        labels['maxcols'] = wx.StaticText(
+            parent=adv_setts_panel, id=wx.ID_ANY,
+            label=_("Maximum columns to request from server at time:"))
+        self.params['maxcols'] = wx.SpinCtrl(
+            parent=adv_setts_panel, id=wx.ID_ANY, size=(100, -1))
+
+        labels['maxrows'] = wx.StaticText(
+            parent=adv_setts_panel, id=wx.ID_ANY,
+            label=_("Maximum rows to request from server at time:"))
+        self.params['maxrows'] = wx.SpinCtrl(
+            parent=adv_setts_panel, id=wx.ID_ANY, size=(100, -1))
 
         min = 100
         max = 10000
-        self.params['maxcols'].SetRange(min,max)
-        self.params['maxrows'].SetRange(min,max)
+        self.params['maxcols'].SetRange(min, max)
+        self.params['maxrows'].SetRange(min, max)
 
         val = 500
         self.params['maxcols'].SetValue(val)
@@ -255,22 +294,26 @@ class WSPanel(wx.Panel):
 
         self.flags['o'] = self.params['bgcolor'] = None
         if not 'o' in self.drv_props['ignored_flags']:
-            self.flags['o']  = wx.CheckBox(parent = adv_setts_panel, id = wx.ID_ANY,
-                                           label = _("Do not request transparent data"))
+            self.flags['o'] = wx.CheckBox(
+                parent=adv_setts_panel, id=wx.ID_ANY,
+                label=_("Do not request transparent data"))
 
             self.flags['o'].Bind(wx.EVT_CHECKBOX, self.OnTransparent)
-            labels['bgcolor'] = wx.StaticText(parent = adv_setts_panel, id = wx.ID_ANY,
-                                              label = _("Background color:"))
-            self.params['bgcolor'] = csel.ColourSelect(parent = adv_setts_panel, id = wx.ID_ANY,
-                                                       colour = (255, 255, 255),
-                                                       size = globalvar.DIALOG_COLOR_SIZE)
+            labels['bgcolor'] = wx.StaticText(
+                parent=adv_setts_panel, id=wx.ID_ANY,
+                label=_("Background color:"))
+            self.params['bgcolor'] = csel.ColourSelect(
+                parent=adv_setts_panel, id=wx.ID_ANY, colour=(
+                    255, 255, 255), size=globalvar.DIALOG_COLOR_SIZE)
             self.params['bgcolor'].Enable(False)
 
         self.params['urlparams'] = None
         if self.params['urlparams'] not in self.drv_props['ignored_params']:
-            labels['urlparams'] = wx.StaticText(parent = adv_setts_panel, id = wx.ID_ANY,
-                                                label = _("Additional query parameters for server:"))
-            self.params['urlparams'] = wx.TextCtrl(parent = adv_setts_panel, id = wx.ID_ANY)
+            labels['urlparams'] = wx.StaticText(
+                parent=adv_setts_panel, id=wx.ID_ANY,
+                label=_("Additional query parameters for server:"))
+            self.params['urlparams'] = wx.TextCtrl(
+                parent=adv_setts_panel, id=wx.ID_ANY)
 
         # layout
 
@@ -279,88 +322,88 @@ class WSPanel(wx.Panel):
         if 'WMS' in self.ws:
 
             boxSizer = wx.StaticBoxSizer(labels['l_order'], wx.VERTICAL)
-            gridSizer  =  wx.GridBagSizer (hgap = 3, vgap = 3)
+            gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
             gridSizer.Add(self.l_odrder_list,
-                          pos = (0,0),
-                          span = (4, 1),
-                          flag = wx.ALIGN_CENTER_VERTICAL|wx.EXPAND,
-                          border = 0)
+                          pos=(0, 0),
+                          span=(4, 1),
+                          flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
+                          border=0)
 
             gridSizer.Add(self.btnUp,
-                          pos = (0,1),
-                          flag = wx.ALIGN_CENTER_VERTICAL,
-                          border = 0)
+                          pos=(0, 1),
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          border=0)
 
             gridSizer.Add(self.btnDown,
-                          pos = (1,1),
-                          flag = wx.ALIGN_CENTER_VERTICAL,
-                          border = 0)
+                          pos=(1, 1),
+                          flag=wx.ALIGN_CENTER_VERTICAL,
+                          border=0)
 
             gridSizer.AddGrowableCol(0)
             boxSizer.Add(gridSizer,
-                         flag = wx.EXPAND | wx.ALL,
-                         border = 5)
+                         flag=wx.EXPAND | wx.ALL,
+                         border=5)
 
-            border.Add(item = boxSizer,
-                       flag = wx.LEFT | wx.RIGHT | wx.UP | wx.EXPAND,
-                       border = 5)
+            border.Add(item=boxSizer,
+                       flag=wx.LEFT | wx.RIGHT | wx.UP | wx.EXPAND,
+                       border=5)
 
-        gridSizer  =  wx.GridBagSizer (hgap = 3, vgap = 3)
+        gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
 
         row = 0
         for k in ['method', 'maxcols', 'maxrows', 'o', 'bgcolor']:
 
-            if self.params.has_key(k):
+            if k in self.params:
                 param = self.params[k]
-            elif self.flags.has_key(k):
+            elif k in self.flags:
                 param = self.flags[k]
 
             if param is None:
                 continue
 
-            if labels.has_key(k) or k == 'o':
+            if k in labels or k == 'o':
                 if k != 'o':
                     label = labels[k]
                 else:
                     label = param
 
                 gridSizer.Add(label,
-                              flag = wx.ALIGN_LEFT |
+                              flag=wx.ALIGN_LEFT |
                               wx.ALIGN_CENTER_VERTICAL,
-                              pos = (row, 0))
+                              pos=(row, 0))
 
             if k != 'o':
-                gridSizer.Add(item = param,
-                              flag = wx.ALIGN_RIGHT |
+                gridSizer.Add(item=param,
+                              flag=wx.ALIGN_RIGHT |
                               wx.ALIGN_CENTER_VERTICAL,
-                              pos = (row, 1))
+                              pos=(row, 1))
             row += 1
 
         gridSizer.AddGrowableCol(0)
-        border.Add(item = gridSizer,
-                   flag = wx.LEFT | wx.RIGHT | wx.TOP | wx.EXPAND,
-                   border = 5)
+        border.Add(item=gridSizer,
+                   flag=wx.LEFT | wx.RIGHT | wx.TOP | wx.EXPAND,
+                   border=5)
 
         if self.params['urlparams']:
-            gridSizer  =  wx.GridBagSizer (hgap = 3, vgap = 3)
-            
+            gridSizer = wx.GridBagSizer(hgap=3, vgap=3)
+
             row = 0
             gridSizer.Add(labels['urlparams'],
-                          flag = wx.ALIGN_LEFT |
+                          flag=wx.ALIGN_LEFT |
                           wx.ALIGN_CENTER_VERTICAL,
-                          pos = (row, 0))
-            
-            gridSizer.Add(item = self.params['urlparams'],
-                          flag = wx.ALIGN_RIGHT |
+                          pos=(row, 0))
+
+            gridSizer.Add(item=self.params['urlparams'],
+                          flag=wx.ALIGN_RIGHT |
                           wx.ALIGN_CENTER_VERTICAL | wx.EXPAND,
-                          pos = (row, 1))
-            
+                          pos=(row, 1))
+
             gridSizer.AddGrowableCol(1)
-            
-            border.Add(item = gridSizer,
-                       flag = wx.LEFT | wx.RIGHT | wx.TOP | wx.EXPAND,
-                       border = 5)
+
+            border.Add(item=gridSizer,
+                       flag=wx.LEFT | wx.RIGHT | wx.TOP | wx.EXPAND,
+                       border=5)
 
         adv_setts_panel.SetSizer(border)
 
@@ -372,9 +415,9 @@ class WSPanel(wx.Panel):
             if pos:
                 self.sel_layers.insert(pos - 1, self.sel_layers.pop(pos))
             if pos > 0:
-                self._updateLayerOrderList(selected = (pos - 1))
+                self._updateLayerOrderList(selected=(pos - 1))
             else:
-                self._updateLayerOrderList(selected = 0)
+                self._updateLayerOrderList(selected=0)
 
     def OnDown(self, event):
         """Move selected to down
@@ -383,12 +426,12 @@ class WSPanel(wx.Panel):
             pos = self.l_odrder_list.GetSelection()
             if pos != len(self.sel_layers) - 1:
                 self.sel_layers.insert(pos + 1, self.sel_layers.pop(pos))
-            if pos < len(self.sel_layers) -1:
-                self._updateLayerOrderList(selected = (pos + 1))
+            if pos < len(self.sel_layers) - 1:
+                self._updateLayerOrderList(selected=(pos + 1))
             else:
-                self._updateLayerOrderList(selected = len(self.sel_layers) -1)
+                self._updateLayerOrderList(selected=len(self.sel_layers) - 1)
 
-    def _updateLayerOrderList(self, selected = None):
+    def _updateLayerOrderList(self, selected=None):
         """Update order in list.
         """
         def getlayercaption(layer):
@@ -432,10 +475,14 @@ class WSPanel(wx.Panel):
         :type password: str
         """
         self._prepareForNewConn(url, username, password)
-        cap_cmd = ['r.in.wms', '-c', ('capfile_output=%s' % self.cap_file), '--overwrite'] + self.ws_cmdl
+        cap_cmd = [
+            'r.in.wms',
+            '-c',
+            ('capfile_output=%s' % self.cap_file),
+            '--overwrite'] + self.ws_cmdl
 
         self.currentPid = self.cmd_thread.GetId()
-        self.cmd_thread.RunCmd(cap_cmd, stderr = self.cmdStdErr)
+        self.cmd_thread.RunCmd(cap_cmd, stderr=self.cmdStdErr)
 
     def OnCmdOutput(self, event):
         """Manage cmd output.
@@ -455,15 +502,15 @@ class WSPanel(wx.Panel):
         self.projs_list = []
 
         self.conn = {
-                        'url' : url,
-                        'password' : password,
-                        'username' : username
-                    }
+            'url': url,
+            'password': password,
+            'username': username
+        }
 
         conn_cmd = []
         for k, v in self.conn.iteritems():
             if v:
-                conn_cmd.append("%s=%s" % (k,v))
+                conn_cmd.append("%s=%s" % (k, v))
 
         self.ws_cmdl = self.ws_drvs[self.ws]['cmd'] + conn_cmd
 
@@ -476,9 +523,11 @@ class WSPanel(wx.Panel):
 
         if event.returncode != 0:
             if self.cmd_err_str:
-                self.cmd_err_str = _("Unable to download %s capabilities file\nfrom <%s>:\n" %  \
-                                         (self.ws.replace('_', ' '), self.conn['url'])) + self.cmd_err_str
-            self._postCapParsedEvt(error_msg = self.cmd_err_str)
+                self.cmd_err_str = _(
+                    "Unable to download %s capabilities file\nfrom <%s>:\n" %
+                    (self.ws.replace('_', ' '),
+                     self.conn['url'])) + self.cmd_err_str
+            self._postCapParsedEvt(error_msg=self.cmd_err_str)
             self.cmd_err_str = ''
             return
 
@@ -491,13 +540,14 @@ class WSPanel(wx.Panel):
         try:
             self.cap = self.ws_drvs[self.ws]['cap_parser'](cap_file)
         except (IOError, ParseError) as error:
-            error_msg = _("%s web service was not found in fetched capabilities file from <%s>:\n%s\n" % \
-                        (self.ws, self.conn['url'], str(error)))
+            error_msg = _(
+                "%s web service was not found in fetched capabilities file from <%s>:\n%s\n" %
+                (self.ws, self.conn['url'], str(error)))
             if Debug.GetLevel() != 0:
-              Debug.msg(1, error_msg)
-              self._postCapParsedEvt(None)
+                Debug.msg(1, error_msg)
+                self._postCapParsedEvt(None)
             else:
-              self._postCapParsedEvt(error_msg = error_msg)
+                self._postCapParsedEvt(error_msg=error_msg)
             return
 
         self.is_connected = True
@@ -509,11 +559,11 @@ class WSPanel(wx.Panel):
             self._setDefaultFormatVal()
 
         self.list.LoadData(self.cap)
-        self.OnListSelChanged(event = None)
+        self.OnListSelChanged(event=None)
 
         self._postCapParsedEvt(None)
 
-    def ParseCapFile(self, url, username, password, cap_file = None,):
+    def ParseCapFile(self, url, username, password, cap_file=None,):
         """Parse capabilities data and emits capParsed signal
         (see class constructor).
         """
@@ -537,11 +587,11 @@ class WSPanel(wx.Panel):
 
         layers = []
 
-        if dcmd.has_key('layers'):
+        if 'layers' in dcmd:
             layers = dcmd['layers']
 
         styles = []
-        if dcmd.has_key('styles'):
+        if 'styles' in dcmd:
             styles = dcmd['styles']
 
         if 'WMS' in self.ws:
@@ -556,8 +606,8 @@ class WSPanel(wx.Panel):
 
         l_st_list = []
         for i in range(len(layers)):
-            l_st_list.append({'style' : styles[i],
-                              'layer' : layers[i]})
+            l_st_list.append({'style': styles[i],
+                              'layer': layers[i]})
 
         # WMS standard - first layer in params is most bottom...
         # therefore layers order need to be reversed
@@ -565,30 +615,33 @@ class WSPanel(wx.Panel):
         self.list.SelectLayers(l_st_list)
 
         params = {}
-        if  dcmd.has_key('format'):
+        if 'format' in dcmd:
             params['format'] = dcmd['format']
-        if  dcmd.has_key('srs'):
+        if 'srs' in dcmd:
             params['srs'] = 'EPSG:' + dcmd['srs']
-        if  dcmd.has_key('method'):
+        if 'method' in dcmd:
             params['method'] = dcmd['method']
 
         for p, v in params.iteritems():
             if self.params[p]:
                 self.params[p].SetStringSelection(v)
 
-        for p, conv_f in [('urlparams', None), ('maxcols', int), ('maxrows', int)]:
-            if dcmd.has_key(p):
+        for p, conv_f in [
+                ('urlparams', None),
+                ('maxcols', int),
+                ('maxrows', int)]:
+            if p in dcmd:
                 v = dcmd[p]
                 if conv_f:
                     v = conv_f(v)
                 self.params[p].SetValue(v)
 
-        if dcmd.has_key('flags') and \
+        if 'flags' in dcmd and \
            'o' in dcmd['flags']:
-           self.flags['o'].SetValue(1)
-           self.params['bgcolor'].Enable(True)
+            self.flags['o'].SetValue(1)
+            self.params['bgcolor'].Enable(True)
 
-        if dcmd.has_key('bgcolor') and \
+        if 'bgcolor' in dcmd and \
            self.params['bgcolor']:
             bgcolor = dcmd['bgcolor'].strip().lower()
             if len(bgcolor) == 8 and \
@@ -656,11 +709,15 @@ class WSPanel(wx.Panel):
         lcmd.append('method=' + self.reproj_methods[i_method])
 
         if not 'o' in self.drv_props['ignored_flags'] and \
-            self.flags['o'].IsChecked():
+                self.flags['o'].IsChecked():
             lcmd.append('-o')
 
             c = self.params['bgcolor'].GetColour()
-            hex_color = wx.Colour(c[0], c[1], c[2]).GetAsString(wx.C2S_HTML_SYNTAX)
+            hex_color = wx.Colour(
+                c[0],
+                c[1],
+                c[2]).GetAsString(
+                wx.C2S_HTML_SYNTAX)
             lcmd.append("bgcolor=" + '0x' + hex_color[1:])
 
         lcmd.append("map=" + self.o_layer_name)
@@ -710,7 +767,7 @@ class WSPanel(wx.Panel):
                     try:
                         int(proj_spl[1])
                         self.projs_list.append(proj_code)
-                    except ValueError, IndexError:
+                    except ValueError as IndexError:
                         continue
 
             cur_sel = self.params['srs'].GetStringSelection()
@@ -739,7 +796,9 @@ class WSPanel(wx.Panel):
                 cur_sel = self.params['format'].GetStringSelection()
 
             if len(curr_sel_ls) > 0:
-                self.formats_list  = sorted(self._getFormats(curr_sel_ls[0]['cap_intf_l']))
+                self.formats_list = sorted(
+                    self._getFormats(
+                        curr_sel_ls[0]['cap_intf_l']))
                 self._updateFormatRadioBox(self.formats_list)
 
                 if cur_sel:
@@ -765,10 +824,14 @@ class WSPanel(wx.Panel):
             self.req_page_sizer.Detach(self.params['format'])
             self.params['format'].Destroy()
         if len(self.formats_list) > 0:
-            self.params['format'] =  wx.RadioBox(parent = self.req_page_panel, id = wx.ID_ANY,
-                                                 label = _("Source image format"), pos = wx.DefaultPosition,
-                                                 choices = formats_list,  majorDimension = 4,
-                                                 style = wx.RA_SPECIFY_COLS)
+            self.params['format'] = wx.RadioBox(
+                parent=self.req_page_panel,
+                id=wx.ID_ANY,
+                label=_("Source image format"),
+                pos=wx.DefaultPosition,
+                choices=formats_list,
+                majorDimension=4,
+                style=wx.RA_SPECIFY_COLS)
             self.source_sizer.Insert(item=self.params['format'], before=2,
                                      flag=wx.LEFT | wx.RIGHT | wx.BOTTOM,
                                      border=5)
@@ -843,13 +906,14 @@ class WSPanel(wx.Panel):
 
 
 class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
+
     def __init__(self, parent, web_service, style, pos=wx.DefaultPosition):
         """List of layers and styles available in capabilities file
         """
         self.parent = parent
         self.ws = web_service
 
-        TreeListCtrl.__init__(self, parent = parent, id = wx.ID_ANY, style = style)
+        TreeListCtrl.__init__(self, parent=parent, id=wx.ID_ANY, style=style)
 
         # setup mixins
         listmix.ListCtrlAutoWidthMixin.__init__(self)
@@ -859,7 +923,7 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
         else:
             self.AddColumn(_('Layer name'))
 
-        self.SetMainColumn(0) # column with the tree
+        self.SetMainColumn(0)  # column with the tree
         self.setResizeColumn(0)
 
         self.root = None
@@ -867,7 +931,7 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
 
         self.layerSelected = Signal('LayersList.layerSelected')
 
-    def LoadData(self, cap = None):
+    def LoadData(self, cap=None):
         """Load data into list
         """
         # detete first all items
@@ -916,13 +980,13 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
                     if self.ws != 'OnEarth':
                         self.SetItemText(style_item, _('style'), 1)
 
-                    self.SetPyData(style_item, {'type' : 'style',
-                                                'layer' : layer, # it is parent layer of style
-                                                'style' : st})
+                    self.SetPyData(style_item, {'type': 'style',
+                                                'layer': layer,  # it is parent layer of style
+                                                'style': st})
 
-                self.SetPyData(item, {'type' : 'layer', # is it layer or style?
-                                      'layer' : layer,  # Layer instance from web_services.cap_interface
-                                      'style' : def_st}) # layer can have assigned default style
+                self.SetPyData(item, {'type': 'layer',  # is it layer or style?
+                                      'layer': layer,  # Layer instance from web_services.cap_interface
+                                      'style': def_st})  # layer can have assigned default style
 
             if parent_layer is None:
                 parent_layer = cap.GetRootLayer()
@@ -936,7 +1000,7 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
                 AddLayerChildrenToTree(layer, item)
 
         AddLayerChildrenToTree(None, None)
-        #self.ExpandAll(self.GetRootItem())
+        # self.ExpandAll(self.GetRootItem())
 
     def GetSelectedLayers(self):
         """Get selected layers/styles in LayersList
@@ -956,11 +1020,11 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
             except ValueError:
                 continue
             sel_layers_dict.append({
-                                    'name' : layer.GetLayerData('name'),
-                                    'title' : layer.GetLayerData('title'),
-                                    'style' : self.GetPyData(s)['style'],
-                                    'cap_intf_l' : layer
-                                    })
+                'name': layer.GetLayerData('name'),
+                'title': layer.GetLayerData('title'),
+                'style': self.GetPyData(s)['style'],
+                'cap_intf_l': layer
+            })
         return sel_layers_dict
 
     def OnListSelChanging(self, event):
@@ -968,7 +1032,7 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
         """
         def _emitSelected(layer):
             title = layer.GetLayerData('title')
-            self.layerSelected.emit(title = title)
+            self.layerSelected.emit(title=title)
 
         def _selectRequestableChildren(item, list_to_check, items_to_sel):
 
@@ -976,7 +1040,7 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
             child_item, cookie = self.GetFirstChild(item)
             while child_item.IsOk():
                 if  self.GetPyData(child_item)['layer'].IsRequestable() \
-                    and not self.IsSelected(child_item):
+                        and not self.IsSelected(child_item):
                     items_to_sel.append(child_item)
                 elif not self.GetPyData(child_item)['layer'].IsRequestable():
                     list_to_check.append(child_item)
@@ -997,7 +1061,8 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
             chck_item = cur_item
 
             while True:
-                _selectRequestableChildren(chck_item, items_to_chck, items_to_sel)
+                _selectRequestableChildren(
+                    chck_item, items_to_chck, items_to_sel)
                 if items_to_chck:
                     chck_item = items_to_chck.pop()
                 else:
@@ -1027,12 +1092,11 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
         def checknext(item, l_st_list, items_to_sel):
             def compare(item, l_name, st_name):
                 it_l_name = self.GetPyData(item)['layer'].GetLayerData('name')
-                it_st  = self.GetPyData(item)['style']
+                it_st = self.GetPyData(item)['style']
                 it_type = self.GetPyData(item)['type']
 
-                if it_l_name == l_name and \
-                 (   (not it_st and not st_name) or \
-                     (it_st and it_st['name'] == st_name and it_type == 'style')):
+                if it_l_name == l_name and ((not it_st and not st_name) or (
+                        it_st and it_st['name'] == st_name and it_type == 'style')):
 
                     return True
 
@@ -1076,7 +1140,9 @@ class LayersList(TreeListCtrl, listmix.ListCtrlAutoWidthMixin):
 
         return l_st_list
 
+
 class WSManageSettingsWidget(ManageSettingsWidget):
+
     def __init__(self, parent, settingsFile, default_servers):
 
         ManageSettingsWidget.__init__(self, parent, settingsFile)
@@ -1085,7 +1151,7 @@ class WSManageSettingsWidget(ManageSettingsWidget):
     def _layout(self):
 
         self.btnAddDefaultServers = wx.Button(parent=self, id=wx.ID_ANY,
-                                             label=_("Add default servers"))
+                                              label=_("Add default"))
         self.btnAddDefaultServers.Bind(wx.EVT_BUTTON, self.OnAddDefaultServers)
 
         ManageSettingsWidget._layout(self)
diff --git a/gui/wxpython/wxgui.py b/gui/wxpython/wxgui.py
index 99762cf..c0eb05b 100644
--- a/gui/wxpython/wxgui.py
+++ b/gui/wxpython/wxgui.py
@@ -5,9 +5,8 @@
 
 Classes:
  - wxgui::GMApp
- - wxgui::Usage
 
-(C) 2006-2011 by the GRASS Development Team
+(C) 2006-2015 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -35,21 +34,20 @@ try:
 except ImportError:
     SC = None
 
-from lmgr.frame import GMFrame
-
 
 class GMApp(wx.App):
+
     def __init__(self, workspace=None):
         """ Main GUI class.
 
         :param workspace: path to the workspace file
         """
         self.workspaceFile = workspace
-        
+
         # call parent class initializer
         wx.App.__init__(self, False)
 
-        self.locale = wx.Locale(language = wx.LANGUAGE_DEFAULT)
+        self.locale = wx.Locale(language=wx.LANGUAGE_DEFAULT)
 
     def OnInit(self):
         """ Initialize all available image handlers
@@ -61,25 +59,35 @@ class GMApp(wx.App):
 
         # create splash screen
         introImagePath = os.path.join(globalvar.IMGDIR, "splash_screen.png")
-        introImage     = wx.Image(introImagePath, wx.BITMAP_TYPE_PNG)
-        introBmp       = introImage.ConvertToBitmap()
+        introImage = wx.Image(introImagePath, wx.BITMAP_TYPE_PNG)
+        introBmp = introImage.ConvertToBitmap()
         if SC and sys.platform != 'darwin':
             # AdvancedSplash is buggy on the Mac as of 2.8.12.1
-            # and raises annoying (though seemingly harmless) errors everytime the GUI is started
-            splash = SC.AdvancedSplash(bitmap = introBmp,
-                                       timeout = 2000, parent = None, id = wx.ID_ANY)
+            # and raises annoying (though seemingly harmless) errors everytime
+            # the GUI is started
+            splash = SC.AdvancedSplash(bitmap=introBmp,
+                                       timeout=2000, parent=None, id=wx.ID_ANY)
             splash.SetText(_('Starting GRASS GUI...'))
             splash.SetTextColour(wx.Colour(45, 52, 27))
-            splash.SetTextFont(wx.Font(pointSize = 15, family = wx.DEFAULT, style = wx.NORMAL,
-                                       weight = wx.BOLD))
+            splash.SetTextFont(
+                wx.Font(
+                    pointSize=15,
+                    family=wx.DEFAULT,
+                    style=wx.NORMAL,
+                    weight=wx.BOLD))
             splash.SetTextPosition((150, 430))
         else:
-            wx.SplashScreen (bitmap = introBmp, splashStyle = wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
-                             milliseconds = 2000, parent = None, id = wx.ID_ANY)
+            wx.SplashScreen(
+                bitmap=introBmp,
+                splashStyle=wx.SPLASH_CENTRE_ON_SCREEN | wx.SPLASH_TIMEOUT,
+                milliseconds=2000,
+                parent=None,
+                id=wx.ID_ANY)
 
         wx.Yield()
 
         # create and show main frame
+        from lmgr.frame import GMFrame
         mainframe = GMFrame(parent=None, id=wx.ID_ANY,
                             workspace=self.workspaceFile)
 
@@ -113,10 +121,12 @@ def process_opt(opts, args):
 
     return workspaceFile
 
+
 def cleanup():
     unregisterPid(os.getpid())
-        
-def main(argv = None):
+
+
+def main(argv=None):
 
     if argv is None:
         argv = sys.argv
@@ -130,17 +140,17 @@ def main(argv = None):
         print >> sys.stderr, err.msg
         print >> sys.stderr, "for help use --help"
         printHelp()
-    
+
     workspaceFile = process_opt(opts, args)
     app = GMApp(workspaceFile)
-    
+
     # suppress wxPython logs
     q = wx.LogNull()
     set_raise_on_error(True)
 
     # register GUI PID
     registerPid(os.getpid())
-    
+
     app.MainLoop()
 
 if __name__ == "__main__":
diff --git a/gui/wxpython/wxplot/__init__.py b/gui/wxpython/wxplot/__init__.py
index c5ed79d..b3a3f78 100644
--- a/gui/wxpython/wxplot/__init__.py
+++ b/gui/wxpython/wxplot/__init__.py
@@ -4,4 +4,4 @@ all = [
     'dialogs',
     'profile',
     'histogram',
-    ]
+]
diff --git a/gui/wxpython/wxplot/base.py b/gui/wxpython/wxplot/base.py
index 31c35cc..b077302 100755
--- a/gui/wxpython/wxplot/base.py
+++ b/gui/wxpython/wxplot/base.py
@@ -28,70 +28,89 @@ try:
 except ImportError as e:
     print >> sys.stderr, e
 
-from core.globalvar    import ICONDIR
-from core.settings     import UserSettings
-from wxplot.dialogs    import TextDialog, OptDialog
-from core.render       import Map
-from icons.icon        import MetaIcon
+from core.globalvar import ICONDIR
+from core.settings import UserSettings
+from wxplot.dialogs import TextDialog, OptDialog
+from core.render import Map
+from icons.icon import MetaIcon
 from gui_core.toolbars import BaseIcons
 from core.utils import _
 
 import grass.script as grass
 
 PlotIcons = {
-    'draw'         : MetaIcon(img = 'show',
-                              label = _('Draw/re-draw plot')),
-    'transect'     : MetaIcon(img = 'layer-raster-profile',
-                              label = _('Draw transect in map display window to profile')),
-    'options'      : MetaIcon(img = 'settings',
-                              label = _('Plot options')),
-    'statistics'   : MetaIcon(img = 'stats',
-                              label = _('Plot statistics')),
-    'save'         : MetaIcon(img = 'save',
-                              label = _('Save profile data to CSV file')),
-    'quit'         : BaseIcons['quit'].SetLabel(_('Quit plot tool')),
-    }
+    'draw': MetaIcon(
+        img='show',
+        label=_('Draw/re-draw plot')),
+    'transect': MetaIcon(
+        img='layer-raster-profile',
+        label=_('Draw transect in map display window to profile')),
+    'options': MetaIcon(
+        img='settings',
+        label=_('Plot options')),
+    'statistics': MetaIcon(
+        img='stats',
+        label=_('Plot statistics')),
+    'save': MetaIcon(
+        img='save',
+        label=_('Save profile data to CSV file')),
+    'quit': BaseIcons['quit'].SetLabel(
+        _('Quit plot tool')),
+}
+
 
 class BasePlotFrame(wx.Frame):
     """Abstract PyPlot display frame class"""
-    def __init__(self, parent=None, size=wx.Size(700, 400),
-                 style=wx.DEFAULT_FRAME_STYLE, rasterList=[],  **kwargs):
 
-        wx.Frame.__init__(self, parent, id=wx.ID_ANY, size = size, style = style, **kwargs)
-        
-        self.parent = parent # MapFrame for a plot type
-        self.Map    = Map()             # instance of render.Map to be associated with display
-        self.rasterList = rasterList    #list of rasters to plot
+    def __init__(self, parent=None, size=wx.Size(700, 400),
+                 style=wx.DEFAULT_FRAME_STYLE, rasterList=[], **kwargs):
+
+        wx.Frame.__init__(
+            self,
+            parent,
+            id=wx.ID_ANY,
+            size=size,
+            style=style,
+            **kwargs)
+
+        self.parent = parent  # MapFrame for a plot type
+        self.Map = Map()             # instance of render.Map to be associated with display
+        self.rasterList = rasterList  # list of rasters to plot
         self.raster = {}    # dictionary of raster maps and their plotting parameters
         self.plottype = ''
-        
-        self.linestyledict = { 'solid' : wx.SOLID,
-                            'dot' : wx.DOT,
-                            'long-dash' : wx.LONG_DASH,
-                            'short-dash' : wx.SHORT_DASH,
-                            'dot-dash' : wx.DOT_DASH }
 
-        self.ptfilldict = { 'transparent' : wx.TRANSPARENT,
-                            'solid' : wx.SOLID }
+        self.linestyledict = {'solid': wx.SOLID,
+                              'dot': wx.DOT,
+                              'long-dash': wx.LONG_DASH,
+                              'short-dash': wx.SHORT_DASH,
+                              'dot-dash': wx.DOT_DASH}
+
+        self.ptfilldict = {'transparent': wx.TRANSPARENT,
+                           'solid': wx.SOLID}
 
         #
         # Icon
         #
-        self.SetIcon(wx.Icon(os.path.join(ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
-                
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
+
         #
         # Add statusbar
         #
-        self.statusbar = self.CreateStatusBar(number = 2, style = 0)
+        self.statusbar = self.CreateStatusBar(number=2, style=0)
         self.statusbar.SetStatusWidths([-2, -1])
 
         #
         # Define canvas and settings
         #
-        # 
+        #
         self.client = plot.PlotCanvas(self)
 
-        #define the function for drawing pointLabels
+        # define the function for drawing pointLabels
         self.client.SetPointLabelFunc(self.DrawPointLabel)
 
         # Create mouse event for showing cursor coords in status bar
@@ -107,62 +126,74 @@ class BasePlotFrame(wx.Frame):
         self.ylabel = ""        # default Y-axis label
 
         self.CentreOnScreen()
-        
+
         self._createColorDict()
 
     def _createColorDict(self):
         """Create color dictionary to return wx.Colour tuples
         for assigning colors to images in imagery groups"""
-                
+
         self.colorDict = {}
         for clr in grass.named_colors.iterkeys():
-            if clr == 'white': continue
+            if clr == 'white':
+                continue
             r = grass.named_colors[clr][0] * 255
             g = grass.named_colors[clr][1] * 255
             b = grass.named_colors[clr][2] * 255
-            self.colorDict[clr] = (r,g,b,255)
+            self.colorDict[clr] = (r, g, b, 255)
 
     def InitPlotOpts(self, plottype):
         """Initialize options for entire plot
-        """       
+        """
         self.plottype = plottype                # histogram, profile, or scatter
 
         self.properties = {}                    # plot properties
         self.properties['font'] = {}
-        self.properties['font']['prop'] = UserSettings.Get(group = self.plottype, key = 'font')
+        self.properties['font']['prop'] = UserSettings.Get(
+            group=self.plottype, key='font')
         self.properties['font']['wxfont'] = wx.Font(11, wx.FONTFAMILY_SWISS,
                                                     wx.FONTSTYLE_NORMAL,
                                                     wx.FONTWEIGHT_NORMAL)
-        
+
         self.properties['raster'] = {}
-        self.properties['raster'] = UserSettings.Get(group = self.plottype, key = 'raster')
+        self.properties['raster'] = UserSettings.Get(
+            group=self.plottype, key='raster')
         colstr = str(self.properties['raster']['pcolor'])
-        self.properties['raster']['pcolor'] = tuple(int(colval) for colval in colstr.strip('()').split(','))
+        self.properties['raster']['pcolor'] = tuple(
+            int(colval) for colval in colstr.strip('()').split(','))
 
         if self.plottype == 'profile':
-            self.properties['marker'] = UserSettings.Get(group = self.plottype, key = 'marker')
+            self.properties['marker'] = UserSettings.Get(
+                group=self.plottype, key='marker')
             # changing color string to tuple for markers/points
             colstr = str(self.properties['marker']['color'])
-            self.properties['marker']['color'] = tuple(int(colval) for colval in colstr.strip('()').split(','))
- 
+            self.properties['marker']['color'] = tuple(
+                int(colval) for colval in colstr.strip('()').split(','))
+
+        self.properties['grid'] = UserSettings.Get(
+            group=self.plottype, key='grid')
+        # changing color string to tuple
+        colstr = str(self.properties['grid']['color'])
+        self.properties['grid']['color'] = tuple(
+            int(colval) for colval in colstr.strip('()').split(','))
 
-        self.properties['grid'] = UserSettings.Get(group = self.plottype, key = 'grid')        
-        colstr = str(self.properties['grid']['color']) # changing color string to tuple        
-        self.properties['grid']['color'] = tuple(int(colval) for colval in colstr.strip('()').split(','))
-                
         self.properties['x-axis'] = {}
-        self.properties['x-axis']['prop'] = UserSettings.Get(group = self.plottype, key = 'x-axis')
+        self.properties[
+            'x-axis']['prop'] = UserSettings.Get(group=self.plottype, key='x-axis')
         self.properties['x-axis']['axis'] = None
 
         self.properties['y-axis'] = {}
-        self.properties['y-axis']['prop'] = UserSettings.Get(group = self.plottype, key = 'y-axis')
+        self.properties[
+            'y-axis']['prop'] = UserSettings.Get(group=self.plottype, key='y-axis')
         self.properties['y-axis']['axis'] = None
-        
-        self.properties['legend'] = UserSettings.Get(group = self.plottype, key = 'legend')
+
+        self.properties['legend'] = UserSettings.Get(
+            group=self.plottype, key='legend')
 
         self.zoom = False  # zooming disabled
         self.drag = False  # draging disabled
-        self.client.SetShowScrollbars(True) # vertical and horizontal scrollbars
+        # vertical and horizontal scrollbars
+        self.client.SetShowScrollbars(True)
 
         # x and y axis set to normal (non-log)
         self.client.setLogScale((False, False))
@@ -170,82 +201,87 @@ class BasePlotFrame(wx.Frame):
             self.client.SetXSpec(self.properties['x-axis']['prop']['type'])
         else:
             self.client.SetXSpec('auto')
-        
+
         if self.properties['y-axis']['prop']['type']:
             self.client.SetYSpec(self.properties['y-axis']['prop']['type'])
         else:
             self.client.SetYSpec('auto')
-        
+
     def InitRasterOpts(self, rasterList, plottype):
         """Initialize or update raster dictionary for plotting
         """
 
-        rdict = {} # initialize a dictionary
-        self.properties['raster'] = UserSettings.Get(group = self.plottype, key = 'raster')
+        rdict = {}  # initialize a dictionary
+        self.properties['raster'] = UserSettings.Get(
+            group=self.plottype, key='raster')
 
         for r in rasterList:
             idx = rasterList.index(r)
-            
+
             try:
                 ret = grass.raster_info(r)
             except:
                 continue
                 # if r.info cannot parse map, skip it
-               
-            self.raster[r] = self.properties['raster'] # some default settings
-            rdict[r] = {} # initialize sub-dictionaries for each raster in the list
-            
+
+            self.raster[r] = self.properties['raster']  # some default settings
+            rdict[r] = {}  # initialize sub-dictionaries for each raster in the list
+
             rdict[r]['units'] = ''
             if ret['units'] not in ('(none)', '"none"', '', None):
                 rdict[r]['units'] = ret['units']
-            
+
             rdict[r]['plegend'] = r   # use fully-qualified names
-            rdict[r]['datalist'] = [] # list of cell value,frequency pairs for plotting histogram
+            # list of cell value,frequency pairs for plotting histogram
+            rdict[r]['datalist'] = []
             rdict[r]['pline'] = None
             rdict[r]['datatype'] = ret['datatype']
 
-            #    
-            #initialize with saved values
             #
-            if self.properties['raster']['pwidth'] != None:
+            # initialize with saved values
+            #
+            if self.properties['raster']['pwidth'] is not None:
                 rdict[r]['pwidth'] = self.properties['raster']['pwidth']
             else:
                 rdict[r]['pwidth'] = 1
-                
-            if self.properties['raster']['pstyle'] != None and \
-                self.properties['raster']['pstyle'] != '':
+
+            if self.properties['raster']['pstyle'] is not None and \
+                    self.properties['raster']['pstyle'] != '':
                 rdict[r]['pstyle'] = self.properties['raster']['pstyle']
             else:
                 rdict[r]['pstyle'] = 'solid'
-                        
+
             if idx < len(self.colorList):
                 if idx == 0:
                     # use saved color for first plot
-                    if self.properties['raster']['pcolor'] != None:
-                        rdict[r]['pcolor'] = self.properties['raster']['pcolor'] 
+                    if self.properties['raster']['pcolor'] is not None:
+                        rdict[r]['pcolor'] = self.properties[
+                            'raster']['pcolor']
                     else:
-                        rdict[r]['pcolor'] = self.colorDict[self.colorList[idx]]
+                        rdict[r]['pcolor'] = self.colorDict[
+                            self.colorList[idx]]
                 else:
                     rdict[r]['pcolor'] = self.colorDict[self.colorList[idx]]
             else:
                 r = randint(0, 255)
                 b = randint(0, 255)
                 g = randint(0, 255)
-                rdict[r]['pcolor'] = ((r,g,b,255))
-        
+                rdict[r]['pcolor'] = ((r, g, b, 255))
+
         return rdict
-            
+
     def InitRasterPairs(self, rasterList, plottype):
         """Initialize or update raster dictionary with raster pairs for
             bivariate scatterplots
         """
-        
-        if len(rasterList) == 0: return
-        
-        rdict = {} # initialize a dictionary
+
+        if len(rasterList) == 0:
+            return
+
+        rdict = {}  # initialize a dictionary
         for rpair in rasterList:
             idx = rasterList.index(rpair)
-            
+
             try:
                 ret0 = grass.raster_info(rpair[0])
                 ret1 = grass.raster_info(rpair[1])
@@ -254,8 +290,10 @@ class BasePlotFrame(wx.Frame):
                 continue
                 # if r.info cannot parse map, skip it
 
-            self.raster[rpair] = UserSettings.Get(group = plottype, key = 'rasters') # some default settings
-            rdict[rpair] = {} # initialize sub-dictionaries for each raster in the list
+            self.raster[rpair] = UserSettings.Get(
+                group=plottype, key='rasters')  # some default settings
+            # initialize sub-dictionaries for each raster in the list
+            rdict[rpair] = {}
             rdict[rpair][0] = {}
             rdict[rpair][1] = {}
             rdict[rpair][0]['units'] = ''
@@ -265,50 +303,54 @@ class BasePlotFrame(wx.Frame):
                 rdict[rpair][0]['units'] = ret0['units']
             if ret1['units'] not in ('(none)', '"none"', '', None):
                 rdict[rpair][1]['units'] = ret1['units']
-                
-            rdict[rpair]['plegend'] = rpair[0].split('@')[0] + ' vs ' + rpair[1].split('@')[0]
-            rdict[rpair]['datalist'] = [] # list of cell value,frequency pairs for plotting histogram
+
+            rdict[rpair]['plegend'] = rpair[0].split(
+                '@')[0] + ' vs ' + rpair[1].split('@')[0]
+            # list of cell value,frequency pairs for plotting histogram
+            rdict[rpair]['datalist'] = []
             rdict[rpair][0]['datatype'] = ret0['datatype']
             rdict[rpair][1]['datatype'] = ret1['datatype']
-                 
-            #    
-            #initialize with saved values
+
+            #
+            # initialize with saved values
             #
-            if self.properties['raster']['ptype'] != None and \
-                self.properties['raster']['ptype'] != '':
+            if self.properties['raster']['ptype'] is not None and \
+                    self.properties['raster']['ptype'] != '':
                 rdict[rpair]['ptype'] = self.properties['raster']['ptype']
             else:
                 rdict[rpair]['ptype'] = 'dot'
-            if self.properties['raster']['psize'] != None:
+            if self.properties['raster']['psize'] is not None:
                 rdict[rpair]['psize'] = self.properties['raster']['psize']
             else:
-                 rdict[rpair]['psize'] = 1
-            if self.properties['raster']['pfill'] != None and \
-                self.properties['raster']['pfill'] != '':
+                rdict[rpair]['psize'] = 1
+            if self.properties['raster']['pfill'] is not None and \
+                    self.properties['raster']['pfill'] != '':
                 rdict[rpair]['pfill'] = self.properties['raster']['pfill']
             else:
-                 rdict[rpair]['pfill'] = 'solid'
-            
+                rdict[rpair]['pfill'] = 'solid'
+
             if idx <= len(self.colorList):
                 rdict[rpair]['pcolor'] = self.colorDict[self.colorList[idx]]
             else:
                 r = randint(0, 255)
                 b = randint(0, 255)
                 g = randint(0, 255)
-                rdict[rpair]['pcolor'] = ((r,g,b,255))
-            
+                rdict[rpair]['pcolor'] = ((r, g, b, 255))
+
         return rdict
 
     def SetGraphStyle(self):
         """Set plot and text options
         """
         self.client.SetFont(self.properties['font']['wxfont'])
-        self.client.SetFontSizeTitle(self.properties['font']['prop']['titleSize'])
-        self.client.SetFontSizeAxis(self.properties['font']['prop']['axisSize'])
+        self.client.SetFontSizeTitle(
+            self.properties['font']['prop']['titleSize'])
+        self.client.SetFontSizeAxis(
+            self.properties['font']['prop']['axisSize'])
 
         self.client.SetEnableZoom(self.zoom)
         self.client.SetEnableDrag(self.drag)
-        
+
         #
         # axis settings
         #
@@ -322,44 +364,49 @@ class BasePlotFrame(wx.Frame):
         else:
             self.client.SetYSpec(self.properties['y-axis']['prop'])
 
-        if self.properties['x-axis']['prop']['type'] == 'custom' and \
-               self.properties['x-axis']['prop']['min'] < self.properties['x-axis']['prop']['max']:
-            self.properties['x-axis']['axis'] = (self.properties['x-axis']['prop']['min'],
-                                                 self.properties['x-axis']['prop']['max'])
+        if self.properties['x-axis']['prop']['type'] == 'custom' and self.properties[
+                'x-axis']['prop']['min'] < self.properties['x-axis']['prop']['max']:
+            self.properties['x-axis']['axis'] = (
+                self.properties['x-axis']['prop']['min'],
+                self.properties['x-axis']['prop']['max'])
         else:
             self.properties['x-axis']['axis'] = None
 
-        if self.properties['y-axis']['prop']['type'] == 'custom' and \
-                self.properties['y-axis']['prop']['min'] < self.properties['y-axis']['prop']['max']:
-            self.properties['y-axis']['axis'] = (self.properties['y-axis']['prop']['min'],
-                                                 self.properties['y-axis']['prop']['max'])
+        if self.properties['y-axis']['prop']['type'] == 'custom' and self.properties[
+                'y-axis']['prop']['min'] < self.properties['y-axis']['prop']['max']:
+            self.properties['y-axis']['axis'] = (
+                self.properties['y-axis']['prop']['min'],
+                self.properties['y-axis']['prop']['max'])
         else:
             self.properties['y-axis']['axis'] = None
-            
+
         if self.properties['x-axis']['prop']['log'] == True:
             self.properties['x-axis']['axis'] = None
             self.client.SetXSpec('min')
         if self.properties['y-axis']['prop']['log'] == True:
             self.properties['y-axis']['axis'] = None
             self.client.SetYSpec('min')
-                        
+
         self.client.setLogScale((self.properties['x-axis']['prop']['log'],
                                  self.properties['y-axis']['prop']['log']))
-        
+
         #
         # grid settings
         #
         self.client.SetEnableGrid(self.properties['grid']['enabled'])
-                
-        self.client.SetGridColour(wx.Colour(self.properties['grid']['color'][0],
-                                           self.properties['grid']['color'][1],
-                                           self.properties['grid']['color'][2],
-                                           255))
-        
+
+        self.client.SetGridColour(
+            wx.Colour(
+                self.properties['grid']['color'][0],
+                self.properties['grid']['color'][1],
+                self.properties['grid']['color'][2],
+                255))
+
         #
         # legend settings
         #
-        self.client.SetFontSizeLegend(self.properties['font']['prop']['legendSize'])
+        self.client.SetFontSizeLegend(
+            self.properties['font']['prop']['legendSize'])
         self.client.SetEnableLegend(self.properties['legend']['enabled'])
 
     def DrawPlot(self, plotlist):
@@ -383,7 +430,7 @@ class BasePlotFrame(wx.Frame):
 
         self.client.Draw(self.plot, self.properties['x-axis']['axis'],
                          self.properties['y-axis']['axis'])
-                
+
     def DrawPointLabel(self, dc, mDataDict):
         """This is the fuction that defines how the pointLabels are
             plotted dc - DC that will be passed mDataDict - Dictionary
@@ -394,17 +441,19 @@ class BasePlotFrame(wx.Frame):
             below.  Any wxDC method can be used.
         """
         dc.SetPen(wx.Pen(wx.BLACK))
-        dc.SetBrush(wx.Brush( wx.BLACK, wx.SOLID ) )
+        dc.SetBrush(wx.Brush(wx.BLACK, wx.SOLID))
 
-        sx, sy = mDataDict["scaledXY"] #scaled x,y of closest point
-        dc.DrawRectangle( sx-5,sy-5, 10, 10)  #10by10 square centered on point
-        px,py = mDataDict["pointXY"]
+        sx, sy = mDataDict["scaledXY"]  # scaled x,y of closest point
+        # 10by10 square centered on point
+        dc.DrawRectangle(sx - 5, sy - 5, 10, 10)
+        px, py = mDataDict["pointXY"]
         cNum = mDataDict["curveNum"]
         pntIn = mDataDict["pIndex"]
         legend = mDataDict["legend"]
-        #make a string to display
-        s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" %(cNum, legend, px, py, pntIn)
-        dc.DrawText(s, sx , sy + 1)
+        # make a string to display
+        s = "Crv# %i, '%s', Pt. (%.2f,%.2f), PtInd %i" % (
+            cNum, legend, px, py, pntIn)
+        dc.DrawText(s, sx, sy + 1)
 
     def OnZoom(self, event):
         """Enable zooming and disable dragging
@@ -428,7 +477,7 @@ class BasePlotFrame(wx.Frame):
         self.UpdateLabels()
         self.client.Reset()
         self.client.Redraw()
-       
+
     def OnErase(self, event):
         """Erase the plot window
         """
@@ -439,28 +488,33 @@ class BasePlotFrame(wx.Frame):
         """
         self.client.SaveFile()
 
-    def OnMouseLeftDown(self,event):
-        self.SetStatusText(_("Left Mouse Down at Point:") + \
-                               " (%.4f, %.4f)" % self.client._getXY(event))
-        event.Skip() # allows plotCanvas OnMouseLeftDown to be called
+    def OnMouseLeftDown(self, event):
+        self.SetStatusText(_("Left Mouse Down at Point:") +
+                           " (%.4f, %.4f)" % self.client._getXY(event))
+        event.Skip()  # allows plotCanvas OnMouseLeftDown to be called
 
     def OnMotion(self, event):
         """Indicate when mouse is outside the plot area
         """
         if self.client.GetEnablePointLabel() is True:
-            #make up dict with info for the pointLabel
-            #I've decided to mark the closest point on the closest curve
-            dlst = self.client.GetClosestPoint(self.client._getXY(event), pointScaled=True)
-            if dlst != []:      #returns [] if none
+            # make up dict with info for the pointLabel
+            # I've decided to mark the closest point on the closest curve
+            dlst = self.client.GetClosestPoint(
+                self.client._getXY(event), pointScaled=True)
+            if dlst != []:  # returns [] if none
                 curveNum, legend, pIndex, pointXY, scaledXY, distance = dlst
-                #make up dictionary to pass to my user function (see DrawPointLabel)
-                mDataDict =  {"curveNum":curveNum, "legend":legend, "pIndex":pIndex,\
-                    "pointXY":pointXY, "scaledXY":scaledXY}
-                #pass dict to update the pointLabel
+                # make up dictionary to pass to my user function (see
+                # DrawPointLabel)
+                mDataDict = {
+                    "curveNum": curveNum,
+                    "legend": legend,
+                    "pIndex": pIndex,
+                    "pointXY": pointXY,
+                    "scaledXY": scaledXY}
+                # pass dict to update the pointLabel
                 self.client.UpdatePointLabel(mDataDict)
-        event.Skip()           #go to next handler        
- 
- 
+        event.Skip()  # go to next handler
+
     def PlotOptionsMenu(self, event):
         """Popup menu for plot and text options
         """
@@ -483,17 +537,16 @@ class BasePlotFrame(wx.Frame):
     def NotFunctional(self):
         """Creates a 'not functional' message dialog
         """
-        dlg = wx.MessageDialog(parent = self,
-                               message = _('This feature is not yet functional'),
-                               caption = _('Under Construction'),
-                               style = wx.OK | wx.ICON_INFORMATION)
+        dlg = wx.MessageDialog(parent=self,
+                               message=_('This feature is not yet functional'),
+                               caption=_('Under Construction'),
+                               style=wx.OK | wx.ICON_INFORMATION)
         dlg.ShowModal()
         dlg.Destroy()
 
-
     def _getPlotLabels(self):
         def log(txt):
-            return "log( " + txt  + " )" 
+            return "log( " + txt + " )"
 
         x = self.xlabel
         if self.properties['x-axis']['prop']['log']:
@@ -514,15 +567,17 @@ class BasePlotFrame(wx.Frame):
 
         if self.plot:
             self.plot.setTitle(dlg.ptitle)
-            
-        self.OnRedraw(event = None)
-    
+
+        self.OnRedraw(event=None)
+
     def UpdateLabels(self):
         x, y = self._getPlotLabels()
 
         self.client.SetFont(self.properties['font']['wxfont'])
-        self.client.SetFontSizeTitle(self.properties['font']['prop']['titleSize'])
-        self.client.SetFontSizeAxis(self.properties['font']['prop']['axisSize'])
+        self.client.SetFontSizeTitle(
+            self.properties['font']['prop']['titleSize'])
+        self.client.SetFontSizeAxis(
+            self.properties['font']['prop']['axisSize'])
 
         if self.plot:
             self.plot.setXLabel(x)
@@ -531,27 +586,27 @@ class BasePlotFrame(wx.Frame):
     def PlotText(self, event):
         """Set custom text values for profile title and axis labels.
         """
-        dlg = TextDialog(parent = self, id = wx.ID_ANY, 
-                         plottype = self.plottype, 
-                         title = _('Text settings'))
-        
+        dlg = TextDialog(parent=self, id=wx.ID_ANY,
+                         plottype=self.plottype,
+                         title=_('Text settings'))
+
         btnval = dlg.ShowModal()
         if btnval == wx.ID_SAVE or btnval == wx.ID_OK or btnval == wx.ID_CANCEL:
-            dlg.Destroy()            
-        
+            dlg.Destroy()
+
     def PlotOptions(self, event):
         """Set various profile options, including: line width, color,
         style; marker size, color, fill, and style; grid and legend
         options.  Calls OptDialog class.
         """
-       
-        dlg = OptDialog(parent = self, id = wx.ID_ANY, 
-                        plottype = self.plottype, 
-                        title = _('Plot settings'))
+
+        dlg = OptDialog(parent=self, id=wx.ID_ANY,
+                        plottype=self.plottype,
+                        title=_('Plot settings'))
         btnval = dlg.ShowModal()
 
         if btnval == wx.ID_SAVE or btnval == wx.ID_OK or btnval == wx.ID_CANCEL:
-            dlg.Destroy() 
+            dlg.Destroy()
         self.Update()
 
     def PrintMenu(self, event):
@@ -565,7 +620,7 @@ class BasePlotFrame(wx.Frame):
             item = wx.MenuItem(printmenu, wx.ID_ANY, title)
             printmenu.AppendItem(item)
             self.Bind(wx.EVT_MENU, handler, item)
-        
+
         # Popup the menu.  If an item is selected then its handler
         # will be called before PopupMenu returns.
         self.PopupMenu(printmenu)
@@ -581,4 +636,4 @@ class BasePlotFrame(wx.Frame):
         self.client.Printout()
 
     def OnQuit(self, event):
-        self.Close(True)        
+        self.Close(True)
diff --git a/gui/wxpython/wxplot/dialogs.py b/gui/wxpython/wxplot/dialogs.py
index 1db8bc1..160b5e1 100755
--- a/gui/wxpython/wxplot/dialogs.py
+++ b/gui/wxpython/wxplot/dialogs.py
@@ -22,67 +22,82 @@ This program is free software under the GNU General Public License
 import os
 
 import wx
-import wx.lib.colourselect  as csel
+import wx.lib.colourselect as csel
 import wx.lib.scrolledpanel as scrolled
 
-from core             import globalvar
-from core.settings    import UserSettings
-from core.globalvar   import ICONDIR
+from core import globalvar
+from core.settings import UserSettings
+from core.globalvar import ICONDIR
 from core.utils import _
 from gui_core.gselect import Select
 
-from grass.script import core  as grass
+from grass.script import core as grass
+
 
 class ProfileRasterDialog(wx.Dialog):
-    def __init__(self, parent, id = wx.ID_ANY, 
-                 title = _("Select raster maps to profile"),
-                 style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_("Select raster maps to profile"),
+                 style=wx.DEFAULT_DIALOG_STYLE, **kwargs):
         """Dialog to select raster maps to profile.
         """
 
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
-
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
 
         self.parent = parent
-        self.colorList = ["blue", "red", "green", "yellow", "magenta", "cyan", \
-                    "aqua", "black", "grey", "orange", "brown", "purple", "violet", \
-                    "indigo"]
+        self.colorList = [
+            "blue",
+            "red",
+            "green",
+            "yellow",
+            "magenta",
+            "cyan",
+            "aqua",
+            "black",
+            "grey",
+            "orange",
+            "brown",
+            "purple",
+            "violet",
+            "indigo"]
 
         self.rasterList = self.parent.rasterList
-        
+
         self._do_layout()
-        
+
     def _do_layout(self):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+        box = wx.GridBagSizer(hgap=3, vgap=3)
+
         rastText = ''
         for r in self.rasterList:
             rastText += '%s,' % r
-            
+
         rastText = rastText.rstrip(',')
-        
+
         txt = _("Select raster map(s) to profile:")
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = txt)
-        box.Add(item = label,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        
-        selection = Select(self, id = wx.ID_ANY,
-                           size = globalvar.DIALOG_GSELECT_SIZE,
-                           type = 'cell', multiple=True)
+        label = wx.StaticText(parent=self, id=wx.ID_ANY, label=txt)
+        box.Add(item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+
+        selection = Select(self, id=wx.ID_ANY,
+                           size=globalvar.DIALOG_GSELECT_SIZE,
+                           type='cell', multiple=True)
         selection.SetValue(rastText)
         selection.Bind(wx.EVT_TEXT, self.OnSelection)
-        
-        box.Add(item = selection, pos = (0, 1))
-            
-        sizer.Add(item = box, proportion = 0,
-                  flag = wx.ALL, border = 10)
 
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 5)
+        box.Add(item=selection, pos=(0, 1))
+
+        sizer.Add(item=box, proportion=0,
+                  flag=wx.ALL, border=10)
+
+        line = wx.StaticLine(
+            parent=self, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=5)
 
         btnsizer = wx.StdDialogButtonSizer()
 
@@ -94,7 +109,11 @@ class ProfileRasterDialog(wx.Dialog):
         btnsizer.AddButton(btn)
         btnsizer.Realize()
 
-        sizer.Add(item = btnsizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        sizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         self.SetSizer(sizer)
         sizer.Fit(self)
@@ -102,36 +121,51 @@ class ProfileRasterDialog(wx.Dialog):
     def OnSelection(self, event):
         """Choose maps to profile. Convert these into a list
         """
-        self.rasterList = self.FindWindowById(event.GetId()).GetValue().split(',')
+        self.rasterList = self.FindWindowById(
+            event.GetId()).GetValue().split(',')
+
 
 class ScatterRasterDialog(wx.Dialog):
-    def __init__(self, parent, id = wx.ID_ANY, 
-                 title = _("Select pairs of raster maps for scatterplots"),
-                 style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_("Select pairs of raster maps for scatterplots"),
+                 style=wx.DEFAULT_DIALOG_STYLE, **kwargs):
         """Dialog to select raster maps to profile.
         """
 
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
 
-        self.parent = parent 
+        self.parent = parent
         self.rasterList = self.parent.rasterList
         self.bins = self.parent.bins
         self.scattertype = self.parent.scattertype
         self.maptype = self.parent.maptype
-        self.spinbins = ''        
-        self.colorList = ["blue", "red", "green", "yellow", "magenta", "cyan", \
-                    "aqua", "black", "grey", "orange", "brown", "purple", "violet", \
-                    "indigo"]
-        
+        self.spinbins = ''
+        self.colorList = [
+            "blue",
+            "red",
+            "green",
+            "yellow",
+            "magenta",
+            "cyan",
+            "aqua",
+            "black",
+            "grey",
+            "orange",
+            "brown",
+            "purple",
+            "violet",
+            "indigo"]
+
         self._do_layout()
-        
+
     def _do_layout(self):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
-        # parse raster pair tuples 
+        box = wx.GridBagSizer(hgap=3, vgap=3)
+
+        # parse raster pair tuples
         rastText = ''
         if len(self.rasterList) > 0:
             for r in self.rasterList:
@@ -140,36 +174,38 @@ class ScatterRasterDialog(wx.Dialog):
                 else:
                     rastText += '%s,' % r
             rastText = rastText.rstrip(',')
-        
+
         # select rasters
         txt = _("Select pairs of raster maps for bivariate scatterplots:")
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = txt)
-        box.Add(item = label,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        
-        selection = Select(self, id = wx.ID_ANY,
-                           size = globalvar.DIALOG_GSELECT_SIZE,
-                           type = 'cell', multiple=True)
+        label = wx.StaticText(parent=self, id=wx.ID_ANY, label=txt)
+        box.Add(item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+
+        selection = Select(self, id=wx.ID_ANY,
+                           size=globalvar.DIALOG_GSELECT_SIZE,
+                           type='cell', multiple=True)
         selection.SetValue(rastText)
         selection.Bind(wx.EVT_TEXT, self.OnSelection)
-        
-        box.Add(item = selection, pos = (0, 1))
-            
-        # Nsteps for FP maps 
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, 
-                              label = _("Number of bins (for FP maps)"))
-        box.Add(item = label,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-        self.spinbins = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "", pos = (30, 50),
-                                      size = (100,-1), style = wx.SP_ARROW_KEYS)
-        self.spinbins.SetRange(1,1000)
+
+        box.Add(item=selection, pos=(0, 1))
+
+        # Nsteps for FP maps
+        label = wx.StaticText(parent=self, id=wx.ID_ANY,
+                              label=_("Number of bins (for FP maps)"))
+        box.Add(item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0))
+        self.spinbins = wx.SpinCtrl(
+            parent=self, id=wx.ID_ANY, value="", pos=(
+                30, 50), size=(
+                100, -1), style=wx.SP_ARROW_KEYS)
+        self.spinbins.SetRange(1, 1000)
         self.spinbins.SetValue(self.bins)
-        box.Add(item = self.spinbins,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 1))
+        box.Add(item=self.spinbins,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 1))
 
-#### TODO possibly make bubble plots with marker size proportional to cell counts
-#        # scatterplot type 
-#        label = wx.StaticText(parent = self, id = wx.ID_ANY, 
+# TODO possibly make bubble plots with marker size proportional to cell counts
+#        # scatterplot type
+#        label = wx.StaticText(parent = self, id = wx.ID_ANY,
 #                              label = _("Scatterplot type"))
 #        box.Add(item = label,
 #                flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
@@ -179,13 +215,15 @@ class ScatterRasterDialog(wx.Dialog):
 #        scattertype.SetStringSelection(self.scattertype)
 #        box.Add(item = scattertype,
 #                flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 1))
-          
-        sizer.Add(item = box, proportion = 0,
-                  flag = wx.ALL, border = 10)
 
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 5)
+        sizer.Add(item=box, proportion=0,
+                  flag=wx.ALL, border=10)
+
+        line = wx.StaticLine(
+            parent=self, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=5)
 
         btnsizer = wx.StdDialogButtonSizer()
 
@@ -197,7 +235,11 @@ class ScatterRasterDialog(wx.Dialog):
         btnsizer.AddButton(btn)
         btnsizer.Realize()
 
-        sizer.Add(item = btnsizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        sizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         self.spinbins.Bind(wx.EVT_TEXT, self.OnSetBins)
         self.spinbins.Bind(wx.EVT_SPINCTRL, self.OnSetBins)
@@ -209,16 +251,17 @@ class ScatterRasterDialog(wx.Dialog):
     def OnSelection(self, event):
         """Select raster maps for scatterplot. Must select maps in pairs.
         """
-        self.rasterList = self.FindWindowById(event.GetId()).GetValue().split(',', 1)
-        
+        self.rasterList = self.FindWindowById(
+            event.GetId()).GetValue().split(',', 1)
+
     def OnSetBins(self, event):
         """Bins for histogramming FP maps (=nsteps in r.stats)
         """
         self.bins = self.spinbins.GetValue()
-        
+
     def OnSetScattertypes(self, event):
         self.scattertype = event.GetString()
-        
+
     def GetRasterPairs(self):
         """Get raster pairs"""
         pairsList = list()
@@ -228,86 +271,118 @@ class ScatterRasterDialog(wx.Dialog):
             if len(pair) == 2:
                 pairsList.append(tuple(pair))
                 pair = list()
-        
+
         return list(pairsList)
-    
+
     def GetSettings(self):
         """Get type and bins"""
         return self.scattertype, self.bins
-    
+
+
 class PlotStatsFrame(wx.Frame):
-    def __init__(self, parent, id, message = '', title = '',
-                 style = wx.DEFAULT_FRAME_STYLE, **kwargs):
+
+    def __init__(self, parent, id, message='', title='',
+                 style=wx.DEFAULT_FRAME_STYLE, **kwargs):
         """Dialog to display and save statistics for plots
         """
-        wx.Frame.__init__(self, parent, id, style = style, **kwargs)
+        wx.Frame.__init__(self, parent, id, style=style, **kwargs)
         self.SetLabel(_("Statistics"))
-        self.SetIcon(wx.Icon(os.path.join(ICONDIR, 'grass.ico'), wx.BITMAP_TYPE_ICO))
+        self.SetIcon(
+            wx.Icon(
+                os.path.join(
+                    ICONDIR,
+                    'grass.ico'),
+                wx.BITMAP_TYPE_ICO))
         self.panel = wx.Panel(self)
-        
-        sp = scrolled.ScrolledPanel(self.panel, -1, size=(400, 400),
-                                    style = wx.TAB_TRAVERSAL|wx.SUNKEN_BORDER, name="Statistics" )
-                
+
+        sp = scrolled.ScrolledPanel(
+            self.panel, -1, size=(400, 400),
+            style=wx.TAB_TRAVERSAL | wx.SUNKEN_BORDER, name="Statistics")
 
         #
         # initialize variables
         #
         self.parent = parent
-        self.message = message 
-        self.title = title   
-        self.CenterOnParent()  
-        
+        self.message = message
+        self.title = title
+        self.CenterOnParent()
+
         #
         # Display statistics
         #
         sizer = wx.BoxSizer(wx.VERTICAL)
         txtSizer = wx.BoxSizer(wx.VERTICAL)
 
-        statstitle = wx.StaticText(parent = self.panel, id = wx.ID_ANY, label = self.title)
-        sizer.Add(item = statstitle, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 3)
-        line = wx.StaticLine(parent = self.panel, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 3)
+        statstitle = wx.StaticText(
+            parent=self.panel,
+            id=wx.ID_ANY,
+            label=self.title)
+        sizer.Add(item=statstitle, proportion=0,
+                  flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=3)
+        line = wx.StaticLine(
+            parent=self.panel, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0,
+                  flag=wx.GROW | wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=3)
         for stats in self.message:
-            statstxt = wx.StaticText(parent = sp, id = wx.ID_ANY, label = stats)
+            statstxt = wx.StaticText(parent=sp, id=wx.ID_ANY, label=stats)
             statstxt.SetBackgroundColour("WHITE")
-            txtSizer.Add(item = statstxt, proportion = 1, 
-                         flag = wx.EXPAND|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 3)
-            line = wx.StaticLine(parent = sp, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL) 
-            txtSizer.Add(item = line, proportion = 0,
-                         flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.ALL, border = 3)      
+            txtSizer.Add(
+                item=statstxt,
+                proportion=1,
+                flag=wx.EXPAND | wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT,
+                border=3)
+            line = wx.StaticLine(
+                parent=sp, id=wx.ID_ANY, size=(
+                    20, -1), style=wx.LI_HORIZONTAL)
+            txtSizer.Add(item=line, proportion=0, flag=wx.GROW |
+                         wx.ALIGN_CENTER_VERTICAL | wx.ALL, border=3)
 
         sp.SetSizer(txtSizer)
         sp.SetAutoLayout(1)
-        sp.SetupScrolling() 
+        sp.SetupScrolling()
 
-        sizer.Add(item = sp, proportion = 1, 
-                  flag = wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM, border = 3)
+        sizer.Add(item=sp, proportion=1,
+                  flag=wx.GROW | wx.LEFT | wx.RIGHT | wx.BOTTOM, border=3)
 
-        line = wx.StaticLine(parent = self.panel, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW |wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 3)
+        line = wx.StaticLine(
+            parent=self.panel, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=3)
 
         #
         # buttons
         #
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
 
-        btn_clipboard = wx.Button(self.panel, id = wx.ID_COPY, label = _('C&opy'))
-        btn_clipboard.SetToolTipString(_("Copy regression statistics the clipboard (Ctrl+C)"))
-        btnSizer.Add(item = btn_clipboard, proportion = 0, flag = wx.ALIGN_LEFT | wx.ALL, border = 5)
-        
+        btn_clipboard = wx.Button(self.panel, id=wx.ID_COPY, label=_('C&opy'))
+        btn_clipboard.SetToolTipString(
+            _("Copy regression statistics the clipboard (Ctrl+C)"))
+        btnSizer.Add(
+            item=btn_clipboard,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALL,
+            border=5)
+
         btnCancel = wx.Button(self.panel, wx.ID_CLOSE)
         btnCancel.SetDefault()
-        btnSizer.Add(item = btnCancel, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)        
-
-        sizer.Add(item = btnSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        btnSizer.Add(
+            item=btnCancel,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
+
+        sizer.Add(
+            item=btnSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         # bindings
         btnCancel.Bind(wx.EVT_BUTTON, self.OnClose)
         btn_clipboard.Bind(wx.EVT_BUTTON, self.OnCopy)
-        
+
         self.panel.SetSizer(sizer)
         sizer.Fit(self)
 
@@ -317,28 +392,30 @@ class PlotStatsFrame(wx.Frame):
         str = self.title + '\n'
         for item in self.message:
             str += item
-            
+
         rdata = wx.TextDataObject()
         rdata.SetText(str)
-        
+
         if wx.TheClipboard.Open():
             wx.TheClipboard.SetData(rdata)
             wx.TheClipboard.Close()
             wx.MessageBox(_("Regression statistics copied to clipboard"))
-        
+
     def OnClose(self, event):
         """Button 'Close' pressed
         """
         self.Close(True)
 
+
 class HistRasterDialog(wx.Dialog):
-    def __init__(self, parent, id = wx.ID_ANY, 
-                 title = _("Select raster map or imagery group to histogram"),
-                 style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
+
+    def __init__(self, parent, id=wx.ID_ANY,
+                 title=_("Select raster map or imagery group to histogram"),
+                 style=wx.DEFAULT_DIALOG_STYLE, **kwargs):
         """Dialog to select raster maps to histogram.
         """
 
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
 
         self.parent = parent
         self.rasterList = self.parent.rasterList
@@ -347,37 +424,51 @@ class HistRasterDialog(wx.Dialog):
         self.histtype = self.parent.histtype
         self.maptype = self.parent.maptype
         self.spinbins = ''
-        
+
         self._do_layout()
-        
+
     def _do_layout(self):
 
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.GridBagSizer (hgap = 3, vgap = 3)
-        
+        box = wx.GridBagSizer(hgap=3, vgap=3)
+
         #
         # select single raster or image group to histogram radio buttons
         #
-        self.rasterRadio = wx.RadioButton(self, id = wx.ID_ANY, label = " %s " % _("Histogram single raster"), style = wx.RB_GROUP)
-        self.groupRadio = wx.RadioButton(self, id = wx.ID_ANY, label = " %s " % _("Histogram imagery group"))
-        if self.maptype == 'raster': 
+        self.rasterRadio = wx.RadioButton(
+            self, id=wx.ID_ANY, label=" %s " %
+            _("Histogram single raster"), style=wx.RB_GROUP)
+        self.groupRadio = wx.RadioButton(
+            self, id=wx.ID_ANY, label=" %s " %
+            _("Histogram imagery group"))
+        if self.maptype == 'raster':
             self.rasterRadio.SetValue(True)
-        elif self.maptype == 'group': 
+        elif self.maptype == 'group':
             self.groupRadio.SetValue(True)
-        box.Add(item = self.rasterRadio, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        box.Add(item = self.groupRadio, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 1))
-        
+        box.Add(
+            item=self.rasterRadio,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                0,
+                0))
+        box.Add(
+            item=self.groupRadio,
+            flag=wx.ALIGN_CENTER_VERTICAL,
+            pos=(
+                0,
+                1))
+
         #
         # Select a raster to histogram
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, 
-                              label = _("Select raster map:"))
-        box.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-        self.rselection = Select(self, id = wx.ID_ANY,
-                                 size = globalvar.DIALOG_GSELECT_SIZE,
-                                 type = 'cell')
-        if self.groupRadio.GetValue() == True: 
+        label = wx.StaticText(parent=self, id=wx.ID_ANY,
+                              label=_("Select raster map:"))
+        box.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0))
+        self.rselection = Select(self, id=wx.ID_ANY,
+                                 size=globalvar.DIALOG_GSELECT_SIZE,
+                                 type='cell')
+        if self.groupRadio.GetValue() == True:
             self.rselection.Disable()
         else:
             rastText = ''
@@ -385,54 +476,59 @@ class HistRasterDialog(wx.Dialog):
                 rastText += '%s,' % r
             rastText = rastText.rstrip(',')
             self.rselection.SetValue(rastText)
-        box.Add(item = self.rselection, pos = (1, 1))       
+        box.Add(item=self.rselection, pos=(1, 1))
 
         #
         # Select an image group to histogram
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, 
-                              label = _("Select image group:"))
-        box.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
-        self.gselection = Select(self, id = wx.ID_ANY,
-                                 size = globalvar.DIALOG_GSELECT_SIZE,
-                                 type = 'group')
-        if self.rasterRadio.GetValue() == True: 
+        label = wx.StaticText(parent=self, id=wx.ID_ANY,
+                              label=_("Select image group:"))
+        box.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(2, 0))
+        self.gselection = Select(self, id=wx.ID_ANY,
+                                 size=globalvar.DIALOG_GSELECT_SIZE,
+                                 type='group')
+        if self.rasterRadio.GetValue() == True:
             self.gselection.Disable()
         else:
-            if self.group != None: self.gselection.SetValue(self.group)
-        box.Add(item = self.gselection, pos = (2, 1))
-            
+            if self.group is not None:
+                self.gselection.SetValue(self.group)
+        box.Add(item=self.gselection, pos=(2, 1))
+
         #
         # Nsteps for FP maps and histogram type selection
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, 
-                              label = _("Number of bins (for FP maps)"))
-        box.Add(item = label,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (3, 0))
-        self.spinbins = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "", pos = (30, 50),
-                                      size = (100,-1), style = wx.SP_ARROW_KEYS)
-        self.spinbins.SetRange(1,1000)
+        label = wx.StaticText(parent=self, id=wx.ID_ANY,
+                              label=_("Number of bins (for FP maps)"))
+        box.Add(item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(3, 0))
+        self.spinbins = wx.SpinCtrl(
+            parent=self, id=wx.ID_ANY, value="", pos=(
+                30, 50), size=(
+                100, -1), style=wx.SP_ARROW_KEYS)
+        self.spinbins.SetRange(1, 1000)
         self.spinbins.SetValue(self.bins)
-        box.Add(item = self.spinbins,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (3, 1))
+        box.Add(item=self.spinbins,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(3, 1))
 
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, 
-                              label = _("Histogram type"))
-        box.Add(item = label,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (4, 0))
+        label = wx.StaticText(parent=self, id=wx.ID_ANY,
+                              label=_("Histogram type"))
+        box.Add(item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(4, 0))
         types = ['count', 'percent', 'area']
-        histtype = wx.ComboBox(parent = self, id = wx.ID_ANY, size = (250, -1),
-                                choices = types, style = wx.CB_DROPDOWN)
+        histtype = wx.ComboBox(parent=self, id=wx.ID_ANY, size=(250, -1),
+                               choices=types, style=wx.CB_DROPDOWN)
         histtype.SetStringSelection(self.histtype)
-        box.Add(item = histtype,
-                flag = wx.ALIGN_CENTER_VERTICAL, pos = (4, 1))
-          
-        sizer.Add(item = box, proportion = 0,
-                  flag = wx.ALL, border = 10)
+        box.Add(item=histtype,
+                flag=wx.ALIGN_CENTER_VERTICAL, pos=(4, 1))
+
+        sizer.Add(item=box, proportion=0,
+                  flag=wx.ALL, border=10)
 
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 5)
+        line = wx.StaticLine(
+            parent=self, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=5)
 
         btnsizer = wx.StdDialogButtonSizer()
 
@@ -444,7 +540,11 @@ class HistRasterDialog(wx.Dialog):
         btnsizer.AddButton(btn)
         btnsizer.Realize()
 
-        sizer.Add(item = btnsizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        sizer.Add(
+            item=btnsizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         #
         # bindings
@@ -476,7 +576,7 @@ class HistRasterDialog(wx.Dialog):
             self.rselection.SetValue('')
         else:
             pass
-        
+
     def OnRasterSelection(self, event):
         """Handler for selecting a single raster map
         """
@@ -488,53 +588,55 @@ class HistRasterDialog(wx.Dialog):
         """
         self.rasterList = []
         self.group = event.GetString()
-        ret = grass.read_command('i.group', 
-                                  group = '%s' % self.group, 
-                                  quiet = True,
-                                  flags = 'g').strip().splitlines()
+        ret = grass.read_command('i.group',
+                                 group='%s' % self.group,
+                                 quiet=True,
+                                 flags='g').strip().splitlines()
 
         if ret not in [None, '', ['']]:
             self.rasterList = ret
         else:
-            wx.MessageBox(message = _("Selected group must be in current mapset"), 
-                          caption = _('Invalid input'), 
-                          style = wx.OK | wx.ICON_ERROR)
-                                                                                            
+            wx.MessageBox(
+                message=_("Selected group must be in current mapset"),
+                caption=_('Invalid input'),
+                style=wx.OK | wx.ICON_ERROR)
+
     def OnSetBins(self, event):
         """Bins for histogramming FP maps (=nsteps in r.stats)
         """
         self.bins = self.spinbins.GetValue()
-        
+
     def OnSetHisttypes(self, event):
         self.histtype = event.GetString()
-        
+
 
 class TextDialog(wx.Dialog):
-    def __init__(self, parent, id, title, plottype = '', 
-                 style = wx.DEFAULT_DIALOG_STYLE, **kwargs):
+
+    def __init__(self, parent, id, title, plottype='',
+                 style=wx.DEFAULT_DIALOG_STYLE, **kwargs):
         """Dialog to set histogram text options: font, title
         and font size, axis labels and font size
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
         #
         # initialize variables
         #
         # combo box entry lists
-        self.ffamilydict = { 'default' : wx.FONTFAMILY_DEFAULT,
-                             'decorative' : wx.FONTFAMILY_DECORATIVE,
-                             'roman' : wx.FONTFAMILY_ROMAN,
-                             'script' : wx.FONTFAMILY_SCRIPT,
-                             'swiss' : wx.FONTFAMILY_SWISS,
-                             'modern' : wx.FONTFAMILY_MODERN,
-                             'teletype' : wx.FONTFAMILY_TELETYPE }
-
-        self.fstyledict = { 'normal' : wx.FONTSTYLE_NORMAL,
-                            'slant' : wx.FONTSTYLE_SLANT,
-                            'italic' : wx.FONTSTYLE_ITALIC }
-
-        self.fwtdict = { 'normal' : wx.FONTWEIGHT_NORMAL,
-                         'light' : wx.FONTWEIGHT_LIGHT,
-                         'bold' : wx.FONTWEIGHT_BOLD }
+        self.ffamilydict = {'default': wx.FONTFAMILY_DEFAULT,
+                            'decorative': wx.FONTFAMILY_DECORATIVE,
+                            'roman': wx.FONTFAMILY_ROMAN,
+                            'script': wx.FONTFAMILY_SCRIPT,
+                            'swiss': wx.FONTFAMILY_SWISS,
+                            'modern': wx.FONTFAMILY_MODERN,
+                            'teletype': wx.FONTFAMILY_TELETYPE}
+
+        self.fstyledict = {'normal': wx.FONTSTYLE_NORMAL,
+                           'slant': wx.FONTSTYLE_SLANT,
+                           'italic': wx.FONTSTYLE_ITALIC}
+
+        self.fwtdict = {'normal': wx.FONTWEIGHT_NORMAL,
+                        'light': wx.FONTWEIGHT_LIGHT,
+                        'bold': wx.FONTWEIGHT_BOLD}
 
         self.parent = parent
         self.plottype = plottype
@@ -543,138 +645,174 @@ class TextDialog(wx.Dialog):
         self.xlabel = self.parent.xlabel
         self.ylabel = self.parent.ylabel
 
-        self.properties = self.parent.properties # read-only
-        
+        self.properties = self.parent.properties  # read-only
+
         # font size
         self.fontfamily = self.properties['font']['wxfont'].GetFamily()
         self.fontstyle = self.properties['font']['wxfont'].GetStyle()
         self.fontweight = self.properties['font']['wxfont'].GetWeight()
 
         self._do_layout()
-                
+
     def _do_layout(self):
         """Do layout"""
         # dialog layout
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("Text settings"))
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=" %s " % _("Text settings"))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
 
         #
         # profile title
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Profile title:"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        self.ptitleentry = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (250,-1))
+        label = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Profile title:"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        self.ptitleentry = wx.TextCtrl(
+            parent=self, id=wx.ID_ANY, value="", size=(250, -1))
         # self.ptitleentry.SetFont(self.font)
         self.ptitleentry.SetValue(self.ptitle)
-        gridSizer.Add(item = self.ptitleentry, pos = (0, 1))
+        gridSizer.Add(item=self.ptitleentry, pos=(0, 1))
 
         #
         # title font
         #
-        tlabel = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Title font size (pts):"))
-        gridSizer.Add(item = tlabel, flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-        self.ptitlesize = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "", pos = (30, 50),
-                                      size = (50,-1), style = wx.SP_ARROW_KEYS)
-        self.ptitlesize.SetRange(5,100)
-        self.ptitlesize.SetValue(int(self.properties['font']['prop']['titleSize']))
-        gridSizer.Add(item = self.ptitlesize, pos = (1, 1))
+        tlabel = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Title font size (pts):"))
+        gridSizer.Add(item=tlabel, flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0))
+        self.ptitlesize = wx.SpinCtrl(
+            parent=self, id=wx.ID_ANY, value="", pos=(
+                30, 50), size=(
+                50, -1), style=wx.SP_ARROW_KEYS)
+        self.ptitlesize.SetRange(5, 100)
+        self.ptitlesize.SetValue(
+            int(self.properties['font']['prop']['titleSize']))
+        gridSizer.Add(item=self.ptitlesize, pos=(1, 1))
 
         #
         # x-axis label
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("X-axis label:"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
-        self.xlabelentry = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (250,-1))
+        label = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("X-axis label:"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(2, 0))
+        self.xlabelentry = wx.TextCtrl(
+            parent=self, id=wx.ID_ANY, value="", size=(250, -1))
         # self.xlabelentry.SetFont(self.font)
         self.xlabelentry.SetValue(self.xlabel)
-        gridSizer.Add(item = self.xlabelentry, pos = (2, 1))
+        gridSizer.Add(item=self.xlabelentry, pos=(2, 1))
 
         #
         # y-axis label
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Y-axis label:"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (3, 0))
-        self.ylabelentry = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (250,-1))
+        label = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Y-axis label:"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(3, 0))
+        self.ylabelentry = wx.TextCtrl(
+            parent=self, id=wx.ID_ANY, value="", size=(250, -1))
         # self.ylabelentry.SetFont(self.font)
         self.ylabelentry.SetValue(self.ylabel)
-        gridSizer.Add(item = self.ylabelentry, pos = (3, 1))
+        gridSizer.Add(item=self.ylabelentry, pos=(3, 1))
 
         #
         # font size
         #
-        llabel = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Label font size (pts):"))
-        gridSizer.Add(item = llabel, flag = wx.ALIGN_CENTER_VERTICAL, pos = (4, 0))
-        self.axislabelsize = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "", pos = (30, 50),
-                                         size = (50, -1), style = wx.SP_ARROW_KEYS)
-        self.axislabelsize.SetRange(5, 100) 
-        self.axislabelsize.SetValue(int(self.properties['font']['prop']['axisSize']))
-        gridSizer.Add(item = self.axislabelsize, pos = (4,1))
-
-        boxSizer.Add(item = gridSizer)
-        sizer.Add(item = boxSizer, flag = wx.ALL | wx.EXPAND, border = 3)
+        llabel = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Label font size (pts):"))
+        gridSizer.Add(item=llabel, flag=wx.ALIGN_CENTER_VERTICAL, pos=(4, 0))
+        self.axislabelsize = wx.SpinCtrl(
+            parent=self, id=wx.ID_ANY, value="", pos=(
+                30, 50), size=(
+                50, -1), style=wx.SP_ARROW_KEYS)
+        self.axislabelsize.SetRange(5, 100)
+        self.axislabelsize.SetValue(
+            int(self.properties['font']['prop']['axisSize']))
+        gridSizer.Add(item=self.axislabelsize, pos=(4, 1))
+
+        boxSizer.Add(item=gridSizer)
+        sizer.Add(item=boxSizer, flag=wx.ALL | wx.EXPAND, border=3)
 
         #
         # font settings
         #
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("Font settings"))
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=" %s " % _("Font settings"))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
 
         #
         # font family
         #
-        label1 = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Font family:"))
-        gridSizer.Add(item = label1, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-        self.ffamilycb = wx.ComboBox(parent = self, id = wx.ID_ANY, size = (250, -1),
-                                choices = self.ffamilydict.keys(), style = wx.CB_DROPDOWN)
+        label1 = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Font family:"))
+        gridSizer.Add(item=label1, flag=wx.ALIGN_CENTER_VERTICAL, pos=(0, 0))
+        self.ffamilycb = wx.ComboBox(
+            parent=self, id=wx.ID_ANY, size=(250, -1),
+            choices=self.ffamilydict.keys(),
+            style=wx.CB_DROPDOWN)
         self.ffamilycb.SetStringSelection('swiss')
         for item in self.ffamilydict.items():
             if self.fontfamily == item[1]:
                 self.ffamilycb.SetStringSelection(item[0])
                 break
-        gridSizer.Add(item = self.ffamilycb, pos = (0, 1), flag = wx.ALIGN_RIGHT)
+        gridSizer.Add(item=self.ffamilycb, pos=(0, 1), flag=wx.ALIGN_RIGHT)
 
         #
         # font style
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Style:"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-        self.fstylecb = wx.ComboBox(parent = self, id = wx.ID_ANY, size = (250, -1),
-                                    choices = self.fstyledict.keys(), style = wx.CB_DROPDOWN)
+        label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Style:"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(1, 0))
+        self.fstylecb = wx.ComboBox(
+            parent=self, id=wx.ID_ANY, size=(250, -1),
+            choices=self.fstyledict.keys(),
+            style=wx.CB_DROPDOWN)
         self.fstylecb.SetStringSelection('normal')
         for item in self.fstyledict.items():
             if self.fontstyle == item[1]:
                 self.fstylecb.SetStringSelection(item[0])
                 break
-        gridSizer.Add(item = self.fstylecb, pos = (1, 1), flag = wx.ALIGN_RIGHT)
+        gridSizer.Add(item=self.fstylecb, pos=(1, 1), flag=wx.ALIGN_RIGHT)
 
         #
         # font weight
         #
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Weight:"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
-        self.fwtcb = wx.ComboBox(parent = self, size = (250, -1),
-                                 choices = self.fwtdict.keys(), style = wx.CB_DROPDOWN)
+        label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Weight:"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(2, 0))
+        self.fwtcb = wx.ComboBox(
+            parent=self, size=(250, -1),
+            choices=self.fwtdict.keys(),
+            style=wx.CB_DROPDOWN)
         self.fwtcb.SetStringSelection('normal')
         for item in self.fwtdict.items():
             if self.fontweight == item[1]:
                 self.fwtcb.SetStringSelection(item[0])
                 break
 
-        gridSizer.Add(item = self.fwtcb, pos = (2, 1), flag = wx.ALIGN_RIGHT)
-                      
+        gridSizer.Add(item=self.fwtcb, pos=(2, 1), flag=wx.ALIGN_RIGHT)
+
         gridSizer.AddGrowableCol(1)
-        boxSizer.Add(item = gridSizer, flag = wx.EXPAND)
-        sizer.Add(item = boxSizer, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
+        boxSizer.Add(item=gridSizer, flag=wx.EXPAND)
+        sizer.Add(item=boxSizer, flag=wx.LEFT | wx.RIGHT |
+                  wx.BOTTOM | wx.EXPAND, border=3)
 
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 3)
+        line = wx.StaticLine(
+            parent=self, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=3)
 
         #
         # buttons
@@ -689,10 +827,12 @@ class TextDialog(wx.Dialog):
         btnApply.Bind(wx.EVT_BUTTON, self.OnApply)
         btnApply.SetToolTipString(_("Apply changes for the current session"))
         btnOk.Bind(wx.EVT_BUTTON, self.OnOk)
-        btnOk.SetToolTipString(_("Apply changes for the current session and close dialog"))
+        btnOk.SetToolTipString(
+            _("Apply changes for the current session and close dialog"))
         btnOk.SetDefault()
         btnSave.Bind(wx.EVT_BUTTON, self.OnSave)
-        btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
+        btnSave.SetToolTipString(
+            _("Apply and save changes to user settings file (default for next sessions)"))
         btnCancel.Bind(wx.EVT_BUTTON, self.OnCancel)
         btnCancel.SetToolTipString(_("Close dialog and ignore changes"))
 
@@ -702,11 +842,23 @@ class TextDialog(wx.Dialog):
         btnStdSizer.AddButton(btnApply)
         btnStdSizer.AddButton(btnCancel)
         btnStdSizer.Realize()
-        
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = btnSave, proportion = 0, flag = wx.ALIGN_LEFT | wx.ALL, border = 5)
-        btnSizer.Add(item = btnStdSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        sizer.Add(item = btnSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        btnSizer.Add(
+            item=btnSave,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALL,
+            border=5)
+        btnSizer.Add(
+            item=btnStdSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
+        sizer.Add(
+            item=btnSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         #
         # bindings
@@ -728,8 +880,10 @@ class TextDialog(wx.Dialog):
         self.ylabel = event.GetString()
 
     def UpdateSettings(self):
-        self.properties['font']['prop']['titleSize'] = self.ptitlesize.GetValue()
-        self.properties['font']['prop']['axisSize'] = self.axislabelsize.GetValue()
+        self.properties['font']['prop'][
+            'titleSize'] = self.ptitlesize.GetValue()
+        self.properties['font']['prop'][
+            'axisSize'] = self.axislabelsize.GetValue()
 
         family = self.ffamilydict[self.ffamilycb.GetStringSelection()]
         self.properties['font']['wxfont'].SetFamily(family)
@@ -742,17 +896,18 @@ class TextDialog(wx.Dialog):
         """Button 'Save' pressed"""
         self.OnApply(None)
         fileSettings = {}
-        UserSettings.ReadSettingsFile(settings = fileSettings)
-        fileSettings[self.plottype] = UserSettings.Get(group = self.plottype)
+        UserSettings.ReadSettingsFile(settings=fileSettings)
+        fileSettings[self.plottype] = UserSettings.Get(group=self.plottype)
         UserSettings.SaveToFile(fileSettings)
-        self.parent.parent.GetLayerManager().GetLogWindow().WriteLog(_('Plot text sizes saved to file \'%s\'.') % UserSettings.filePath)
+        self.parent.parent.GetLayerManager().GetLogWindow().WriteLog(
+            _('Plot text sizes saved to file \'%s\'.') % UserSettings.filePath)
         self.EndModal(wx.ID_OK)
 
     def OnApply(self, event):
         """Button 'Apply' pressed"""
         self.UpdateSettings()
         self.parent.OnPlotText(self)
-        
+
     def OnOk(self, event):
         """Button 'OK' pressed"""
         self.OnApply(None)
@@ -761,15 +916,17 @@ class TextDialog(wx.Dialog):
     def OnCancel(self, event):
         """Button 'Cancel' pressed"""
         self.EndModal(wx.ID_CANCEL)
-        
+
+
 class OptDialog(wx.Dialog):
-    def __init__(self, parent, id, title, plottype = '', 
-                 style = wx.DEFAULT_DIALOG_STYLE, **kwargs): 
+
+    def __init__(self, parent, id, title, plottype='',
+                 style=wx.DEFAULT_DIALOG_STYLE, **kwargs):
         """Dialog to set various options for data plotted, including: line
         width, color, style; marker size, color, fill, and style; grid
         and legend options.
         """
-        wx.Dialog.__init__(self, parent, id, title, style = style, **kwargs)
+        wx.Dialog.__init__(self, parent, id, title, style=style, **kwargs)
 
         # init variables
         self.parent = parent
@@ -777,7 +934,7 @@ class OptDialog(wx.Dialog):
         self.ptfilldict = parent.ptfilldict
         self.parent = parent
         self.plottype = plottype
-        
+
         self.pttypelist = ['circle',
                            'dot',
                            'square',
@@ -785,14 +942,14 @@ class OptDialog(wx.Dialog):
                            'triangle_down',
                            'cross',
                            'plus']
-        
+
         self.axislist = ['min',
                          'auto',
                          'custom']
 
         # widgets ids
         self.wxId = {}
-        
+
         self.parent = parent
 
         # read-only
@@ -800,14 +957,14 @@ class OptDialog(wx.Dialog):
         self.rasterList = self.parent.rasterList
         self.properties = self.parent.properties
         self.map = ''
-        
+
         if len(self.rasterList) == 0:
-            wx.MessageBox(parent = self,
-                              message = _("No map or image group selected to plot."),
-                              caption = _("Warning"), style = wx.OK | wx.ICON_ERROR)
-            
+            wx.MessageBox(parent=self,
+                          message=_("No map or image group selected to plot."),
+                          caption=_("Warning"), style=wx.OK | wx.ICON_ERROR)
+
         self._do_layout()
-        
+
     def ConvertTuples(self, tlist):
         """Converts tuples to strings when rasterList contains raster
         pairs for scatterplot
@@ -816,7 +973,7 @@ class OptDialog(wx.Dialog):
         for i in tlist:
             i = str(i).strip('()')
             list.append(i)
-            
+
         return list
 
     def _do_layout(self):
@@ -824,13 +981,13 @@ class OptDialog(wx.Dialog):
         """
         sizer = wx.BoxSizer(wx.VERTICAL)
 
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("Plot settings")) 
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=" %s " % _("Plot settings"))
         boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
 
-        self.wxId['pcolor']  = 0
-        self.wxId['pwidth']  = 0
-        self.wxId['pstyle']  = 0
+        self.wxId['pcolor'] = 0
+        self.wxId['pwidth'] = 0
+        self.wxId['pstyle'] = 0
         self.wxId['psize'] = 0
         self.wxId['ptype'] = 0
         self.wxId['pfill'] = 0
@@ -838,240 +995,358 @@ class OptDialog(wx.Dialog):
         self.wxId['marker'] = {}
         self.wxId['x-axis'] = {}
         self.wxId['y-axis'] = {}
-        
+
         #
         # plot line settings and point settings
         #
-        if len(self.rasterList) == 0: return
-        
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = _("Map/image plotted"))
+        if len(self.rasterList) == 0:
+            return
+
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=_("Map/image plotted"))
         boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-        
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-        
+
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+
         row = 0
         choicelist = []
         for i in self.rasterList:
             choicelist.append(str(i))
 
-        self.mapchoice = wx.Choice(parent = self, id = wx.ID_ANY, size = (300, -1),
-                                   choices = choicelist)        
+        self.mapchoice = wx.Choice(parent=self, id=wx.ID_ANY, size=(300, -1),
+                                   choices=choicelist)
         self.mapchoice.SetToolTipString(_("Settings for selected map"))
 
         if not self.map:
             self.map = self.rasterList[self.mapchoice.GetCurrentSelection()]
         else:
             self.mapchoice.SetStringSelection(str(self.map))
-            
-                
-        gridSizer.Add(item = self.mapchoice, flag = wx.ALIGN_CENTER_VERTICAL, 
-                      pos = (row, 0), span = (1, 2))
-        
+
+        gridSizer.Add(item=self.mapchoice, flag=wx.ALIGN_CENTER_VERTICAL,
+                      pos=(row, 0), span=(1, 2))
+
         #
         # options for line plots (profiles and histograms)
         #
         if self.plottype != 'scatter':
-            row +=1            
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line color"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-            color = csel.ColourSelect(parent = self, id = wx.ID_ANY, colour = self.raster[self.map]['pcolor'])
+            row += 1
+            label = wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Line color"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            color = csel.ColourSelect(
+                parent=self, id=wx.ID_ANY, colour=self.raster[
+                    self.map]['pcolor'])
             self.wxId['pcolor'] = color.GetId()
-            gridSizer.Add(item = color, pos = (row, 1))
+            gridSizer.Add(item=color, pos=(row, 1))
 
             row += 1
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line width"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-            width = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "",
-                                 size = (50,-1), style = wx.SP_ARROW_KEYS)
+            label = wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Line width"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            width = wx.SpinCtrl(parent=self, id=wx.ID_ANY, value="",
+                                size=(50, -1), style=wx.SP_ARROW_KEYS)
             width.SetRange(1, 10)
             width.SetValue(self.raster[self.map]['pwidth'])
             self.wxId['pwidth'] = width.GetId()
-            gridSizer.Add(item = width, pos = (row, 1))
+            gridSizer.Add(item=width, pos=(row, 1))
 
-            row +=1
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Line style"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-            style = wx.Choice(parent = self, id = wx.ID_ANY, 
-                                 size = (120, -1), choices = self.linestyledict.keys())
+            row += 1
+            label = wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Line style"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            style = wx.Choice(
+                parent=self, id=wx.ID_ANY, size=(
+                    120, -1), choices=self.linestyledict.keys())
             style.SetStringSelection(self.raster[self.map]['pstyle'])
             self.wxId['pstyle'] = style.GetId()
-            gridSizer.Add(item = style, pos = (row, 1))
+            gridSizer.Add(item=style, pos=(row, 1))
 
         row += 1
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Legend"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-        legend = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (200,-1))
+        label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Legend"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        legend = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                             value="", size=(200, -1))
         legend.SetValue(self.raster[self.map]['plegend'])
-        gridSizer.Add(item = legend, pos = (row, 1))
+        gridSizer.Add(item=legend, pos=(row, 1))
         self.wxId['plegend'] = legend.GetId()
-        
-        boxSizer.Add(item = gridSizer)
-        boxMainSizer.Add(item = boxSizer, flag = wx.ALL, border = 3)
+
+        boxSizer.Add(item=gridSizer)
+        boxMainSizer.Add(item=boxSizer, flag=wx.ALL, border=3)
 
         #
         # segment marker settings for profiles only
-        #       
+        #
         if self.plottype == 'profile':
-            box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                               label = " %s " % _("Transect segment marker settings"))
-            
+            box = wx.StaticBox(
+                parent=self, id=wx.ID_ANY, label=" %s " %
+                _("Transect segment marker settings"))
+
             boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-            
-            gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Color"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-            ptcolor = csel.ColourSelect(parent = self, id = wx.ID_ANY, colour = self.properties['marker']['color'])
-            self.wxId['marker']['color'] = ptcolor.GetId()
-            gridSizer.Add(item = ptcolor, pos = (0, 1))
 
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Size"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-            ptsize = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "",
-                                 size = (50, -1), style = wx.SP_ARROW_KEYS)
+            gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Color"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    0,
+                    0))
+            ptcolor = csel.ColourSelect(
+                parent=self,
+                id=wx.ID_ANY,
+                colour=self.properties['marker']['color'])
+            self.wxId['marker']['color'] = ptcolor.GetId()
+            gridSizer.Add(item=ptcolor, pos=(0, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Size"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    1,
+                    0))
+            ptsize = wx.SpinCtrl(parent=self, id=wx.ID_ANY, value="",
+                                 size=(50, -1), style=wx.SP_ARROW_KEYS)
             ptsize.SetRange(1, 10)
             ptsize.SetValue(self.properties['marker']['size'])
             self.wxId['marker']['size'] = ptsize.GetId()
-            gridSizer.Add(item = ptsize, pos = (1, 1))
-            
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Fill"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
-            ptfill = wx.Choice(parent = self, id = wx.ID_ANY,
-                                 size = (120, -1), choices = self.ptfilldict.keys())
+            gridSizer.Add(item=ptsize, pos=(1, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Fill"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    2,
+                    0))
+            ptfill = wx.Choice(parent=self, id=wx.ID_ANY,
+                               size=(120, -1), choices=self.ptfilldict.keys())
             ptfill.SetStringSelection(self.properties['marker']['fill'])
             self.wxId['marker']['fill'] = ptfill.GetId()
-            gridSizer.Add(item = ptfill, pos = (2, 1))
-            
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Legend"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (3, 0))
-            ptlegend = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (200,-1))
+            gridSizer.Add(item=ptfill, pos=(2, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Legend"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    3,
+                    0))
+            ptlegend = wx.TextCtrl(
+                parent=self, id=wx.ID_ANY, value="", size=(
+                    200, -1))
             ptlegend.SetValue(self.properties['marker']['legend'])
             self.wxId['marker']['legend'] = ptlegend.GetId()
-            gridSizer.Add(item = ptlegend, pos = (3, 1))
-                    
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Style"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (4, 0))
-            pttype = wx.Choice(parent = self, size = (200, -1), choices = self.pttypelist)
+            gridSizer.Add(item=ptlegend, pos=(3, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Style"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    4,
+                    0))
+            pttype = wx.Choice(
+                parent=self, size=(200, -1),
+                choices=self.pttypelist)
             pttype.SetStringSelection(self.properties['marker']['type'])
             self.wxId['marker']['type'] = pttype.GetId()
-            gridSizer.Add(item = pttype, pos = (4, 1))
+            gridSizer.Add(item=pttype, pos=(4, 1))
+
+            boxSizer.Add(item=gridSizer)
+            boxMainSizer.Add(item=boxSizer, flag=wx.ALL, border=3)
 
-            boxSizer.Add(item = gridSizer)
-            boxMainSizer.Add(item = boxSizer, flag = wx.ALL, border = 3)
-            
         #
         # point options for scatterplots
         #
         elif self.plottype == 'scatter':
-            box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                               label = " %s " % _("Scatterplot points"))
-            
+            box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                               label=" %s " % _("Scatterplot points"))
+
             boxSizer = wx.StaticBoxSizer(box, wx.VERTICAL)
-            
-            gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Color"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (0, 0))
-            ptcolor = csel.ColourSelect(parent = self, id = wx.ID_ANY, colour = self.raster[self.map]['pcolor'])
-            self.wxId['pcolor'] = ptcolor.GetId()
-            gridSizer.Add(item = ptcolor, pos = (0, 1))
 
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Size"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (1, 0))
-            ptsize = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "",
-                                 size = (50, -1), style = wx.SP_ARROW_KEYS)
+            gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Color"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    0,
+                    0))
+            ptcolor = csel.ColourSelect(
+                parent=self, id=wx.ID_ANY, colour=self.raster[
+                    self.map]['pcolor'])
+            self.wxId['pcolor'] = ptcolor.GetId()
+            gridSizer.Add(item=ptcolor, pos=(0, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Size"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    1,
+                    0))
+            ptsize = wx.SpinCtrl(parent=self, id=wx.ID_ANY, value="",
+                                 size=(50, -1), style=wx.SP_ARROW_KEYS)
             ptsize.SetRange(1, 10)
             ptsize.SetValue(self.raster[self.map]['psize'])
             self.wxId['psize'] = ptsize.GetId()
-            gridSizer.Add(item = ptsize, pos = (1, 1))
-            
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Fill"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (2, 0))
-            ptfill = wx.Choice(parent = self, id = wx.ID_ANY,
-                               size = (120, -1), choices = self.ptfilldict.keys())
+            gridSizer.Add(item=ptsize, pos=(1, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Fill"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    2,
+                    0))
+            ptfill = wx.Choice(parent=self, id=wx.ID_ANY,
+                               size=(120, -1), choices=self.ptfilldict.keys())
             ptfill.SetStringSelection(self.raster[self.map]['pfill'])
             self.wxId['pfill'] = ptfill.GetId()
-            gridSizer.Add(item = ptfill, pos = (2, 1))
-            
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Legend"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (3, 0))
-            ptlegend = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (200,-1))
+            gridSizer.Add(item=ptfill, pos=(2, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Legend"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    3,
+                    0))
+            ptlegend = wx.TextCtrl(
+                parent=self, id=wx.ID_ANY, value="", size=(
+                    200, -1))
             ptlegend.SetValue(self.raster[self.map]['plegend'])
             self.wxId['plegend'] = ptlegend.GetId()
-            gridSizer.Add(item = ptlegend, pos = (3, 1))
-                    
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Style"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (4, 0))
-            pttype = wx.Choice(parent = self, size = (200, -1), choices = self.pttypelist)
+            gridSizer.Add(item=ptlegend, pos=(3, 1))
+
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Style"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    4,
+                    0))
+            pttype = wx.Choice(
+                parent=self, size=(200, -1),
+                choices=self.pttypelist)
             pttype.SetStringSelection(self.raster[self.map]['ptype'])
             self.wxId['ptype'] = pttype.GetId()
-            gridSizer.Add(item = pttype, pos = (4, 1))
+            gridSizer.Add(item=pttype, pos=(4, 1))
 
-            boxSizer.Add(item = gridSizer)
-            boxMainSizer.Add(item = boxSizer, flag = wx.ALL, border = 3)
-            
-        sizer.Add(item = boxMainSizer, flag = wx.ALL | wx.EXPAND, border = 3)
+            boxSizer.Add(item=gridSizer)
+            boxMainSizer.Add(item=boxSizer, flag=wx.ALL, border=3)
+
+        sizer.Add(item=boxMainSizer, flag=wx.ALL | wx.EXPAND, border=3)
 
         #
         # axis options for all plots
         #
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("Axis settings"))
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=" %s " % _("Axis settings"))
         boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
 
         middleSizer = wx.BoxSizer(wx.HORIZONTAL)
 
         idx = 0
         for axis, atype in [(_("X-Axis"), 'x-axis'),
-                     (_("Y-Axis"), 'y-axis')]:
-            box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                               label = " %s " % axis)
+                            (_("Y-Axis"), 'y-axis')]:
+            box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                               label=" %s " % axis)
             boxSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-            gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+            gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
 
             prop = self.properties[atype]['prop']
-            
+
             row = 0
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Scale"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-            type = wx.Choice(parent = self, id = wx.ID_ANY, size = (100, -1), choices = self.axislist)
-            type.SetStringSelection(prop['type']) 
-            type.SetToolTipString(_("Automatic axis scaling, custom max and min, or scale matches data range (min)" ))
+            label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Scale"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            type = wx.Choice(
+                parent=self, id=wx.ID_ANY, size=(
+                    100, -1), choices=self.axislist)
+            type.SetStringSelection(prop['type'])
+            type.SetToolTipString(
+                _("Automatic axis scaling, custom max and min, or scale matches data range (min)"))
             self.wxId[atype]['type'] = type.GetId()
-            gridSizer.Add(item = type, pos = (row, 1))
-                        
+            gridSizer.Add(item=type, pos=(row, 1))
+
             row += 1
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Custom min"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-            min = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (70, -1))
+            label = wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Custom min"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            min = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                              value="", size=(70, -1))
             min.SetValue(str(prop['min']))
             self.wxId[atype]['min'] = min.GetId()
-            gridSizer.Add(item = min, pos = (row, 1))
+            gridSizer.Add(item=min, pos=(row, 1))
 
             row += 1
-            label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Custom max"))
-            gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-            max = wx.TextCtrl(parent = self, id = wx.ID_ANY, value = "", size = (70, -1))
+            label = wx.StaticText(
+                parent=self,
+                id=wx.ID_ANY,
+                label=_("Custom max"))
+            gridSizer.Add(
+                item=label,
+                flag=wx.ALIGN_CENTER_VERTICAL,
+                pos=(
+                    row,
+                    0))
+            max = wx.TextCtrl(parent=self, id=wx.ID_ANY,
+                              value="", size=(70, -1))
             max.SetValue(str(prop['max']))
             self.wxId[atype]['max'] = max.GetId()
-            gridSizer.Add(item = max, pos = (row, 1))
-            
+            gridSizer.Add(item=max, pos=(row, 1))
+
             row += 1
-            log = wx.CheckBox(parent = self, id = wx.ID_ANY, label = _("Log scale"))
+            log = wx.CheckBox(parent=self, id=wx.ID_ANY, label=_("Log scale"))
             log.SetValue(prop['log'])
             self.wxId[atype]['log'] = log.GetId()
-            gridSizer.Add(item = log, pos = (row, 0), span = (1, 2))
+            gridSizer.Add(item=log, pos=(row, 0), span=(1, 2))
 
             if idx == 0:
                 flag = wx.ALL | wx.EXPAND
             else:
                 flag = wx.TOP | wx.BOTTOM | wx.RIGHT | wx.EXPAND
 
-            boxSizer.Add(item = gridSizer, flag = wx.ALL, border = 3)
-            boxMainSizer.Add(item = boxSizer, flag = flag, border = 3)
+            boxSizer.Add(item=gridSizer, flag=wx.ALL, border=3)
+            boxMainSizer.Add(item=boxSizer, flag=flag, border=3)
 
             idx += 1
-            
-        middleSizer.Add(item = boxMainSizer, flag = wx.ALL | wx.EXPAND, border = 3)
+
+        middleSizer.Add(item=boxMainSizer, flag=wx.ALL | wx.EXPAND, border=3)
 
         #
         # grid & legend options for all plots
@@ -1079,52 +1354,65 @@ class OptDialog(wx.Dialog):
         self.wxId['grid'] = {}
         self.wxId['legend'] = {}
         self.wxId['font'] = {}
-        box = wx.StaticBox(parent = self, id = wx.ID_ANY,
-                           label = " %s " % _("Grid and Legend settings"))
+        box = wx.StaticBox(parent=self, id=wx.ID_ANY,
+                           label=" %s " % _("Grid and Legend settings"))
         boxMainSizer = wx.StaticBoxSizer(box, wx.HORIZONTAL)
-        gridSizer = wx.GridBagSizer(vgap = 5, hgap = 5)
+        gridSizer = wx.GridBagSizer(vgap=5, hgap=5)
 
         row = 0
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Grid color"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-        gridcolor = csel.ColourSelect(parent = self, id = wx.ID_ANY, colour = self.properties['grid']['color'])
+        label = wx.StaticText(parent=self, id=wx.ID_ANY, label=_("Grid color"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        gridcolor = csel.ColourSelect(
+            parent=self,
+            id=wx.ID_ANY,
+            colour=self.properties['grid']['color'])
         self.wxId['grid']['color'] = gridcolor.GetId()
-        gridSizer.Add(item = gridcolor, pos = (row, 1))
+        gridSizer.Add(item=gridcolor, pos=(row, 1))
 
-        row +=1
-        gridshow = wx.CheckBox(parent = self, id = wx.ID_ANY, label = _("Show grid"))
+        row += 1
+        gridshow = wx.CheckBox(parent=self, id=wx.ID_ANY, label=_("Show grid"))
         gridshow.SetValue(self.properties['grid']['enabled'])
         self.wxId['grid']['enabled'] = gridshow.GetId()
-        gridSizer.Add(item = gridshow, pos = (row, 0), span = (1, 2))
-
-        row +=1
-        label = wx.StaticText(parent = self, id = wx.ID_ANY, label = _("Legend font size"))
-        gridSizer.Add(item = label, flag = wx.ALIGN_CENTER_VERTICAL, pos = (row, 0))
-        legendfontsize = wx.SpinCtrl(parent = self, id = wx.ID_ANY, value = "", 
-                                     size = (50, -1), style = wx.SP_ARROW_KEYS)
-        legendfontsize.SetRange(5,100)
-        legendfontsize.SetValue(int(self.properties['font']['prop']['legendSize']))
+        gridSizer.Add(item=gridshow, pos=(row, 0), span=(1, 2))
+
+        row += 1
+        label = wx.StaticText(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Legend font size"))
+        gridSizer.Add(item=label, flag=wx.ALIGN_CENTER_VERTICAL, pos=(row, 0))
+        legendfontsize = wx.SpinCtrl(parent=self, id=wx.ID_ANY, value="",
+                                     size=(50, -1), style=wx.SP_ARROW_KEYS)
+        legendfontsize.SetRange(5, 100)
+        legendfontsize.SetValue(
+            int(self.properties['font']['prop']['legendSize']))
         self.wxId['font']['legendSize'] = legendfontsize.GetId()
-        gridSizer.Add(item = legendfontsize, pos = (row, 1))
+        gridSizer.Add(item=legendfontsize, pos=(row, 1))
 
         row += 1
-        legendshow = wx.CheckBox(parent = self, id = wx.ID_ANY, label = _("Show legend"))
+        legendshow = wx.CheckBox(
+            parent=self,
+            id=wx.ID_ANY,
+            label=_("Show legend"))
         legendshow.SetValue(self.properties['legend']['enabled'])
         self.wxId['legend']['enabled'] = legendshow.GetId()
-        gridSizer.Add(item = legendshow, pos = (row, 0), span = (1, 2))
+        gridSizer.Add(item=legendshow, pos=(row, 0), span=(1, 2))
+
+        boxMainSizer.Add(item=gridSizer, flag=flag, border=3)
 
-        boxMainSizer.Add(item = gridSizer, flag = flag, border = 3)
+        middleSizer.Add(item=boxMainSizer, flag=wx.LEFT |
+                        wx.RIGHT | wx.BOTTOM | wx.EXPAND, border=3)
 
-        middleSizer.Add(item = boxMainSizer, flag = wx.LEFT | wx.RIGHT | wx.BOTTOM | wx.EXPAND, border = 3)
+        sizer.Add(item=middleSizer, flag=wx.ALL, border=0)
 
-        sizer.Add(item = middleSizer, flag = wx.ALL, border = 0)
-        
         #
         # line & buttons
         #
-        line = wx.StaticLine(parent = self, id = wx.ID_ANY, size = (20, -1), style = wx.LI_HORIZONTAL)
-        sizer.Add(item = line, proportion = 0,
-                  flag = wx.GROW|wx.ALIGN_CENTER_VERTICAL|wx.LEFT|wx.RIGHT, border = 3)
+        line = wx.StaticLine(
+            parent=self, id=wx.ID_ANY, size=(
+                20, -1), style=wx.LI_HORIZONTAL)
+        sizer.Add(item=line, proportion=0, flag=wx.GROW |
+                  wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, border=3)
 
         #
         # buttons
@@ -1137,8 +1425,10 @@ class OptDialog(wx.Dialog):
 
         # tooltips for buttons
         btnApply.SetToolTipString(_("Apply changes for the current session"))
-        btnOk.SetToolTipString(_("Apply changes for the current session and close dialog"))
-        btnSave.SetToolTipString(_("Apply and save changes to user settings file (default for next sessions)"))
+        btnOk.SetToolTipString(
+            _("Apply changes for the current session and close dialog"))
+        btnSave.SetToolTipString(
+            _("Apply and save changes to user settings file (default for next sessions)"))
         btnCancel.SetToolTipString(_("Close dialog and ignore changes"))
 
         # sizers
@@ -1147,11 +1437,23 @@ class OptDialog(wx.Dialog):
         btnStdSizer.AddButton(btnApply)
         btnStdSizer.AddButton(btnCancel)
         btnStdSizer.Realize()
-        
+
         btnSizer = wx.BoxSizer(wx.HORIZONTAL)
-        btnSizer.Add(item = btnSave, proportion = 0, flag = wx.ALIGN_LEFT | wx.ALL, border = 5)
-        btnSizer.Add(item = btnStdSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
-        sizer.Add(item = btnSizer, proportion = 0, flag = wx.ALIGN_RIGHT | wx.ALL, border = 5)
+        btnSizer.Add(
+            item=btnSave,
+            proportion=0,
+            flag=wx.ALIGN_LEFT | wx.ALL,
+            border=5)
+        btnSizer.Add(
+            item=btnStdSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
+        sizer.Add(
+            item=btnSizer,
+            proportion=0,
+            flag=wx.ALIGN_RIGHT | wx.ALL,
+            border=5)
 
         #
         # bindings for buttons and map plot settings controls
@@ -1170,24 +1472,41 @@ class OptDialog(wx.Dialog):
         """Handler for changing map selection"""
         idx = event.GetSelection()
         self.map = self.rasterList[idx]
-        
+
         # update settings controls for all plots
-        self.FindWindowById(self.wxId['pcolor']).SetColour(self.raster[self.map]['pcolor'])
-        self.FindWindowById(self.wxId['plegend']).SetValue(self.raster[self.map]['plegend'])
+        self.FindWindowById(
+            self.wxId['pcolor']).SetColour(
+            self.raster[self.map]['pcolor'])
+        self.FindWindowById(
+            self.wxId['plegend']).SetValue(
+            self.raster[self.map]['plegend'])
 
         # update settings controls for histograms and profiles
         if self.plottype != 'scatter':
-            self.FindWindowById(self.wxId['pwidth']).SetValue(self.raster[self.map]['pwidth'])
-            self.FindWindowById(self.wxId['pstyle']).SetStringSelection(self.raster[self.map]['pstyle'])
+            self.FindWindowById(
+                self.wxId['pwidth']).SetValue(
+                self.raster[self.map]['pwidth'])
+            self.FindWindowById(
+                self.wxId['pstyle']).SetStringSelection(
+                self.raster[
+                    self.map]['pstyle'])
 
         # update settings controls for scatterplots
         elif self.plottype == 'scatter':
-            self.FindWindowById(self.wxId['psize']).SetValue(self.raster[self.map]['psize'])
-            self.FindWindowById(self.wxId['ptype']).SetStringSelection(self.raster[self.map]['ptype'])
-            self.FindWindowById(self.wxId['pfill']).SetStringSelection(self.raster[self.map]['pfill'])
-            
+            self.FindWindowById(
+                self.wxId['psize']).SetValue(
+                self.raster[self.map]['psize'])
+            self.FindWindowById(
+                self.wxId['ptype']).SetStringSelection(
+                self.raster[
+                    self.map]['ptype'])
+            self.FindWindowById(
+                self.wxId['pfill']).SetStringSelection(
+                self.raster[
+                    self.map]['pfill'])
+
         self.Refresh()
-        
+
     def OnSetOpt(self, event):
         """Handler for changing any other option"""
         self.map = self.rasterList[self.mapchoice.GetCurrentSelection()]
@@ -1198,46 +1517,71 @@ class OptDialog(wx.Dialog):
 
     def UpdateSettings(self):
         """Apply settings to each map and to entire plot"""
-        self.raster[self.map]['pcolor'] = self.FindWindowById(self.wxId['pcolor']).GetColour()
+        self.raster[self.map]['pcolor'] = self.FindWindowById(
+            self.wxId['pcolor']).GetColour()
         self.properties['raster']['pcolor'] = self.raster[self.map]['pcolor']
-        
-        self.raster[self.map]['plegend'] = self.FindWindowById(self.wxId['plegend']).GetValue()
-        
+
+        self.raster[self.map]['plegend'] = self.FindWindowById(
+            self.wxId['plegend']).GetValue()
+
         if self.plottype != 'scatter':
-            self.raster[self.map]['pwidth'] = int(self.FindWindowById(self.wxId['pwidth']).GetValue())
-            self.properties['raster']['pwidth'] = self.raster[self.map]['pwidth']
-            self.raster[self.map]['pstyle'] = self.FindWindowById(self.wxId['pstyle']).GetStringSelection()
-            self.properties['raster']['pstyle'] = self.raster[self.map]['pstyle']
-            
+            self.raster[
+                self.map]['pwidth'] = int(
+                self.FindWindowById(
+                    self.wxId['pwidth']).GetValue())
+            self.properties['raster'][
+                'pwidth'] = self.raster[self.map]['pwidth']
+            self.raster[self.map]['pstyle'] = self.FindWindowById(
+                self.wxId['pstyle']).GetStringSelection()
+            self.properties['raster'][
+                'pstyle'] = self.raster[self.map]['pstyle']
+
         elif self.plottype == 'scatter':
-            self.raster[self.map]['psize'] = self.FindWindowById(self.wxId['psize']).GetValue()
+            self.raster[
+                self.map]['psize'] = self.FindWindowById(
+                self.wxId['psize']).GetValue()
             self.properties['raster']['psize'] = self.raster[self.map]['psize']
-            self.raster[self.map]['ptype'] = self.FindWindowById(self.wxId['ptype']).GetStringSelection()
+            self.raster[self.map]['ptype'] = self.FindWindowById(
+                self.wxId['ptype']).GetStringSelection()
             self.properties['raster']['ptype'] = self.raster[self.map]['ptype']
-            self.raster[self.map]['pfill'] = self.FindWindowById(self.wxId['pfill']).GetStringSelection()
+            self.raster[self.map]['pfill'] = self.FindWindowById(
+                self.wxId['pfill']).GetStringSelection()
             self.properties['raster']['pfill'] = self.raster[self.map]['pfill']
 
         # update settings for entire plot
         for axis in ('x-axis', 'y-axis'):
-            self.properties[axis]['prop']['type'] = self.FindWindowById(self.wxId[axis]['type']).GetStringSelection()
-            self.properties[axis]['prop']['min'] = float(self.FindWindowById(self.wxId[axis]['min']).GetValue())
-            self.properties[axis]['prop']['max'] = float(self.FindWindowById(self.wxId[axis]['max']).GetValue())
-            self.properties[axis]['prop']['log'] = self.FindWindowById(self.wxId[axis]['log']).IsChecked()
+            self.properties[axis]['prop']['type'] = self.FindWindowById(
+                self.wxId[axis]['type']).GetStringSelection()
+            self.properties[axis]['prop']['min'] = float(
+                self.FindWindowById(self.wxId[axis]['min']).GetValue())
+            self.properties[axis]['prop']['max'] = float(
+                self.FindWindowById(self.wxId[axis]['max']).GetValue())
+            self.properties[axis]['prop']['log'] = self.FindWindowById(
+                self.wxId[axis]['log']).IsChecked()
 
         if self.plottype == 'profile':
-            self.properties['marker']['color'] = self.FindWindowById(self.wxId['marker']['color']).GetColour()
-            self.properties['marker']['fill'] = self.FindWindowById(self.wxId['marker']['fill']).GetStringSelection()
-            self.properties['marker']['size'] = self.FindWindowById(self.wxId['marker']['size']).GetValue()
-            self.properties['marker']['type'] = self.FindWindowById(self.wxId['marker']['type']).GetStringSelection()
-            self.properties['marker']['legend'] = self.FindWindowById(self.wxId['marker']['legend']).GetValue()
-
-        self.properties['grid']['color'] = self.FindWindowById(self.wxId['grid']['color']).GetColour()
-        self.properties['grid']['enabled'] = self.FindWindowById(self.wxId['grid']['enabled']).IsChecked()
+            self.properties['marker']['color'] = self.FindWindowById(
+                self.wxId['marker']['color']).GetColour()
+            self.properties['marker']['fill'] = self.FindWindowById(
+                self.wxId['marker']['fill']).GetStringSelection()
+            self.properties['marker']['size'] = self.FindWindowById(
+                self.wxId['marker']['size']).GetValue()
+            self.properties['marker']['type'] = self.FindWindowById(
+                self.wxId['marker']['type']).GetStringSelection()
+            self.properties['marker']['legend'] = self.FindWindowById(
+                self.wxId['marker']['legend']).GetValue()
+
+        self.properties['grid']['color'] = self.FindWindowById(
+            self.wxId['grid']['color']).GetColour()
+        self.properties['grid']['enabled'] = self.FindWindowById(
+            self.wxId['grid']['enabled']).IsChecked()
 
         # this makes more sense in the text properties, including for settings update. But will need to change
         # layout for controls to text dialog too.
-        self.properties['font']['prop']['legendSize'] = self.FindWindowById(self.wxId['font']['legendSize']).GetValue()
-        self.properties['legend']['enabled'] = self.FindWindowById(self.wxId['legend']['enabled']).IsChecked()
+        self.properties['font']['prop']['legendSize'] = self.FindWindowById(
+            self.wxId['font']['legendSize']).GetValue()
+        self.properties['legend']['enabled'] = self.FindWindowById(
+            self.wxId['legend']['enabled']).IsChecked()
 
         self.parent.UpdateLabels()
 
@@ -1245,10 +1589,11 @@ class OptDialog(wx.Dialog):
         """Button 'Save' pressed"""
         self.OnApply(None)
         fileSettings = {}
-        UserSettings.ReadSettingsFile(settings = fileSettings)
-        fileSettings[self.plottype] = UserSettings.Get(group = self.plottype)
+        UserSettings.ReadSettingsFile(settings=fileSettings)
+        fileSettings[self.plottype] = UserSettings.Get(group=self.plottype)
         UserSettings.SaveToFile(fileSettings)
-        self.parent.parent.GetLayerManager().GetLogWindow().WriteLog(_('Plot settings saved to file \'%s\'.') % UserSettings.filePath)
+        self.parent.parent.GetLayerManager().GetLogWindow().WriteLog(
+            _('Plot settings saved to file \'%s\'.') % UserSettings.filePath)
         self.Close()
 
     def OnApply(self, event):
@@ -1262,7 +1607,7 @@ class OptDialog(wx.Dialog):
         """Button 'OK' pressed"""
         self.OnApply(None)
         self.EndModal(wx.ID_OK)
-        
+
     def OnCancel(self, event):
         """Button 'Cancel' pressed"""
         self.Close()
diff --git a/gui/wxpython/wxplot/histogram.py b/gui/wxpython/wxplot/histogram.py
index 29d5965..cdc9824 100644
--- a/gui/wxpython/wxplot/histogram.py
+++ b/gui/wxpython/wxplot/histogram.py
@@ -30,43 +30,58 @@ except ImportError as e:
 import grass.script as grass
 
 from gui_core.toolbars import BaseToolbar, BaseIcons
-from wxplot.base       import BasePlotFrame, PlotIcons
-from wxplot.dialogs    import HistRasterDialog, PlotStatsFrame
-from core.gcmd         import RunCommand, GException, GError
+from wxplot.base import BasePlotFrame, PlotIcons
+from wxplot.dialogs import HistRasterDialog, PlotStatsFrame
+from core.gcmd import RunCommand, GException, GError
 from core.utils import _
 
+
 class HistogramPlotFrame(BasePlotFrame):
     """Mainframe for displaying histogram of raster map. Uses wx.lib.plot.
     """
-    def __init__(self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE, 
-                 size = wx.Size(700, 400), rasterList = [], **kwargs):
-        BasePlotFrame.__init__(self, parent, size = size, **kwargs)
-        
-        self.toolbar = HistogramPlotToolbar(parent = self)
+
+    def __init__(self, parent, id=wx.ID_ANY, style=wx.DEFAULT_FRAME_STYLE,
+                 size=wx.Size(700, 400), rasterList=[], **kwargs):
+        BasePlotFrame.__init__(self, parent, size=size, **kwargs)
+
+        self.toolbar = HistogramPlotToolbar(parent=self)
         # workaround for http://trac.wxwidgets.org/ticket/13888
         if sys.platform != 'darwin':
             self.SetToolBar(self.toolbar)
         self.SetTitle(_("GRASS GIS Histogramming Tool"))
-        
+
         #
         # Init variables
         #
         self.rasterList = rasterList
         self.plottype = 'histogram'
-        self.group = '' 
+        self.group = ''
         self.ptitle = _('Histogram of')         # title of window
         self.xlabel = _("Raster cell values")   # default X-axis label
         self.ylabel = _("Cell counts")          # default Y-axis label
         self.maptype = 'raster'                 # default type of histogram to plot
-        self.histtype = 'count' 
+        self.histtype = 'count'
         self.bins = 255
-        self.colorList = ["blue", "green", "red", "yellow", "magenta", "cyan", 
-                          "aqua", "black", "grey", "orange", "brown", "purple", "violet",
-                          "indigo"]
-        
+        self.colorList = [
+            "blue",
+            "green",
+            "red",
+            "yellow",
+            "magenta",
+            "cyan",
+            "aqua",
+            "black",
+            "grey",
+            "orange",
+            "brown",
+            "purple",
+            "violet",
+            "indigo"]
+
         self._initOpts()
-        
-        if len(self.rasterList) > 0: # set raster name(s) from layer manager if a map is selected
+
+        if len(
+                self.rasterList) > 0:  # set raster name(s) from layer manager if a map is selected
             self.raster = self.InitRasterOpts(self.rasterList, self.plottype)
             wx.CallAfter(self.OnCreateHist, None)
         else:
@@ -75,7 +90,7 @@ class HistogramPlotFrame(BasePlotFrame):
     def _initOpts(self):
         """Initialize plot options
         """
-        self.InitPlotOpts('histogram')            
+        self.InitPlotOpts('histogram')
 
     def OnCreateHist(self, event):
         """Main routine for creating a histogram. Uses r.stats to
@@ -86,7 +101,7 @@ class HistogramPlotFrame(BasePlotFrame):
             self.SetCursor(wx.StockCursor(wx.CURSOR_ARROW))
         except:
             pass
-        
+
         self.SetGraphStyle()
         wx.BeginBusyCursor()
         wx.SafeYield()
@@ -98,8 +113,8 @@ class HistogramPlotFrame(BasePlotFrame):
     def OnSelectRaster(self, event):
         """Select raster map(s) to profile
         """
-        dlg = HistRasterDialog(parent = self)
-        
+        dlg = HistRasterDialog(parent=self)
+
         if dlg.ShowModal() == wx.ID_OK:
             self.rasterList = dlg.rasterList
             self.group = dlg.group
@@ -110,8 +125,8 @@ class HistogramPlotFrame(BasePlotFrame):
 
             # plot histogram
             if len(self.rasterList) > 0:
-                self.OnCreateHist(event = None)
-        
+                self.OnCreateHist(event=None)
+
         dlg.Destroy()
 
     def SetupHistogram(self):
@@ -121,61 +136,69 @@ class HistogramPlotFrame(BasePlotFrame):
         #
         # populate raster dictionary
         #
-        if len(self.rasterList) == 0: return  # nothing selected
-        
+        if len(self.rasterList) == 0:
+            return  # nothing selected
+
         for r in self.rasterList:
             self.raster[r]['datalist'] = self.CreateDatalist(r)
-            
+
         #
         # update title
         #
         if self.maptype == 'group':
             self.ptitle = _('Histogram of image group <%s>') % self.group
-        else: 
+        else:
             if len(self.rasterList) == 1:
-                self.ptitle = _('Histogram of raster map <%s>') % self.rasterList[0]
+                self.ptitle = _(
+                    'Histogram of raster map <%s>') % self.rasterList[0]
             else:
                 self.ptitle = _('Histogram of selected raster maps')
-        
+
         #
         # set xlabel based on first raster map in list to be histogrammed
         #
         units = self.raster[self.rasterList[0]]['units']
-        if units != '' and units != '(none)' and units != None:
+        if units != '' and units != '(none)' and units is not None:
             self.xlabel = _('Raster cell values %s') % units
         else:
-            self.xlabel = _('Raster cell values') 
+            self.xlabel = _('Raster cell values')
 
         #
         # set ylabel from self.histtype
         #
-        if self.histtype == 'count': self.ylabel = _('Cell counts')
-        if self.histtype == 'percent': self.ylabel = _('Percent of total cells')
-        if self.histtype == 'area': self.ylabel = _('Area')
+        if self.histtype == 'count':
+            self.ylabel = _('Cell counts')
+        if self.histtype == 'percent':
+            self.ylabel = _('Percent of total cells')
+        if self.histtype == 'area':
+            self.ylabel = _('Area')
 
     def CreateDatalist(self, raster):
         """Build a list of cell value, frequency pairs for histogram
             frequency can be in cell counts, percents, or area
         """
         datalist = []
-        
-        if self.histtype == 'count': freqflag = 'cn'
-        if self.histtype == 'percent': freqflag = 'pn'
-        if self.histtype == 'area': freqflag = 'an'
-                
+
+        if self.histtype == 'count':
+            freqflag = 'cn'
+        if self.histtype == 'percent':
+            freqflag = 'pn'
+        if self.histtype == 'area':
+            freqflag = 'an'
+
         try:
             ret = RunCommand("r.stats",
-                             parent = self,
-                             input = raster,
-                             flags = freqflag,
-                             nsteps = self.bins,
-                             sep = ',',
-                             quiet = True,
-                             read = True)
-            
+                             parent=self,
+                             input=raster,
+                             flags=freqflag,
+                             nsteps=self.bins,
+                             sep=',',
+                             quiet=True,
+                             read=True)
+
             if not ret:
                 return datalist
-            
+
             for line in ret.splitlines():
                 cellval, histval = line.strip().split(',')
                 histval = histval.strip()
@@ -184,41 +207,41 @@ class HistogramPlotFrame(BasePlotFrame):
                         cellval = '-' + cellval.split('-')[1]
                     else:
                         cellval = cellval.split('-')[0]
-                    
+
                 if self.histtype == 'percent':
                     histval = histval.rstrip('%')
-                    
-                datalist.append((cellval,histval))
+
+                datalist.append((cellval, histval))
 
             return datalist
         except GException as e:
-            GError(parent = self,
-                   message = e.value)
+            GError(parent=self,
+                   message=e.value)
             return None
-        
+
     def CreatePlotList(self):
         """Make list of elements to plot
         """
-        
+
         # graph the cell value, frequency pairs for the histogram
         self.plotlist = []
 
         for r in self.rasterList:
             if len(self.raster[r]['datalist']) > 0:
                 col = wx.Colour(self.raster[r]['pcolor'][0],
-                               self.raster[r]['pcolor'][1],
-                               self.raster[r]['pcolor'][2],
-                               255)
-                
-                self.raster[r]['pline'] = plot.PolyLine(self.raster[r]['datalist'],
-                                                        colour = col,
-                                                        width = self.raster[r]['pwidth'],
-                                                        style = self.linestyledict[self.raster[r]['pstyle']],
-                                                        legend = self.raster[r]['plegend'])
+                                self.raster[r]['pcolor'][1],
+                                self.raster[r]['pcolor'][2],
+                                255)
+
+                self.raster[r]['pline'] = plot.PolyLine(
+                    self.raster[r]['datalist'],
+                    colour=col, width=self.raster[r]['pwidth'],
+                    style=self.linestyledict[self.raster[r]['pstyle']],
+                    legend=self.raster[r]['plegend'])
 
                 self.plotlist.append(self.raster[r]['pline'])
-          
-        if len(self.plotlist) > 0:        
+
+        if len(self.plotlist) > 0:
             return self.plotlist
         else:
             return None
@@ -229,7 +252,7 @@ class HistogramPlotFrame(BasePlotFrame):
         self.SetGraphStyle()
         p = self.CreatePlotList()
         self.DrawPlot(p)
- 
+
     def OnStats(self, event):
         """Displays regression information in messagebox
         """
@@ -237,19 +260,22 @@ class HistogramPlotFrame(BasePlotFrame):
         title = _('Statistics for Map(s) Histogrammed')
 
         for rast in self.rasterList:
-            ret = grass.read_command('r.univar', map = rast, flags = 'e', quiet = True)
+            ret = grass.read_command(
+                'r.univar', map=rast, flags='e', quiet=True)
             stats = _('Statistics for raster map <%s>') % rast + ':\n%s\n' % ret
             message.append(stats)
-        
-        stats = PlotStatsFrame(self, id = wx.ID_ANY, message = message, 
-                               title = title)
+
+        stats = PlotStatsFrame(self, id=wx.ID_ANY, message=message,
+                               title=title)
 
         if stats.Show() == wx.ID_CLOSE:
-            stats.Destroy()       
+            stats.Destroy()
+
 
 class HistogramPlotToolbar(BaseToolbar):
     """Toolbar for histogramming raster map
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
 
@@ -258,10 +284,10 @@ class HistogramPlotToolbar(BaseToolbar):
             parent.SetToolBar(self)
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         return self._getToolbarData((('addraster', BaseIcons["addRast"],
@@ -290,4 +316,4 @@ class HistogramPlotToolbar(BaseToolbar):
                                      ('quit', PlotIcons["quit"],
                                       self.parent.OnQuit),
                                      )
-)
+                                    )
diff --git a/gui/wxpython/wxplot/profile.py b/gui/wxpython/wxplot/profile.py
index 1c137af..425b4c5 100644
--- a/gui/wxpython/wxplot/profile.py
+++ b/gui/wxpython/wxplot/profile.py
@@ -35,30 +35,32 @@ from core.utils import _
 try:
     import numpy
 except ImportError:
-    msg = _("This module requires the NumPy module, which could not be "
-            "imported. It probably is not installed (it's not part of the "
-            "standard Python distribution). See the Numeric Python site "
-            "(http://numpy.scipy.org) for information on downloading source or "
-            "binaries.")
+    msg = _(
+        "This module requires the NumPy module, which could not be "
+        "imported. It probably is not installed (it's not part of the "
+        "standard Python distribution). See the Numeric Python site "
+        "(http://numpy.scipy.org) for information on downloading source or "
+        "binaries.")
     print >> sys.stderr, "wxplot.py: " + msg
 
-from wxplot.base       import BasePlotFrame, PlotIcons
+from wxplot.base import BasePlotFrame, PlotIcons
 from gui_core.toolbars import BaseToolbar, BaseIcons
-from wxplot.dialogs    import ProfileRasterDialog, PlotStatsFrame
-from core.gcmd         import RunCommand, GWarning, GError, GMessage
+from wxplot.dialogs import ProfileRasterDialog, PlotStatsFrame
+from core.gcmd import RunCommand, GWarning, GError, GMessage
 
 
 class ProfileFrame(BasePlotFrame):
     """Mainframe for displaying profile of one or more raster maps. Uses wx.lib.plot.
     """
+
     def __init__(self, parent, controller, units, size=wx.Size(700, 400),
-                 rasterList = None, **kwargs):
+                 rasterList=None, **kwargs):
         BasePlotFrame.__init__(self, parent=parent, size=size, **kwargs)
 
         self.controller = controller
         self.controller.transectChanged.connect(self.SetTransect)
         self.transect = []
-        self.toolbar = ProfileToolbar(parent = self)
+        self.toolbar = ProfileToolbar(parent=self)
         # workaround for http://trac.wxwidgets.org/ticket/13888
         if sys.platform != 'darwin':
             self.SetToolBar(self.toolbar)
@@ -76,20 +78,33 @@ class ProfileFrame(BasePlotFrame):
         self.plottype = 'profile'
         self.coordstr = ''              # string of coordinates for r.profile
         self.seglist = []               # segment endpoint list
-        self.ppoints = ''               # segment endpoints data         
-        self.transect_length = 0.0      # total transect length        
+        self.ppoints = ''               # segment endpoints data
+        self.transect_length = 0.0      # total transect length
         self.ptitle = _('Profile of')   # title of window
-        self.colorList =  ["blue", "red", "green", "yellow", "magenta", "cyan",
-                           "aqua", "black", "grey", "orange", "brown", "purple", "violet",
-                           "indigo"]
-        
+        self.colorList = [
+            "blue",
+            "red",
+            "green",
+            "yellow",
+            "magenta",
+            "cyan",
+            "aqua",
+            "black",
+            "grey",
+            "orange",
+            "brown",
+            "purple",
+            "violet",
+            "indigo"]
+
         self._initOpts()
 
-        if len(self.rasterList) > 0: # set raster name(s) from layer manager if a map is selected
+        if len(
+                self.rasterList) > 0:  # set raster name(s) from layer manager if a map is selected
             self.raster = self.InitRasterOpts(self.rasterList, self.plottype)
         else:
             self.raster = {}
-                
+
         # determine units (axis labels)
         # maybe, we should not accept these invalid units
         # but ok, trying to handle it here
@@ -101,7 +116,7 @@ class ProfileFrame(BasePlotFrame):
 
         # Bind events
         self.Bind(wx.EVT_CLOSE, self.OnCloseWindow)
-        
+
     def _initOpts(self):
         """Initialize plot options
         """
@@ -127,15 +142,15 @@ class ProfileFrame(BasePlotFrame):
     def OnSelectRaster(self, event):
         """Select raster map(s) to profile
         """
-        dlg = ProfileRasterDialog(parent = self)
+        dlg = ProfileRasterDialog(parent=self)
         dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             self.rasterList = dlg.rasterList
             self.raster = self.InitRasterOpts(self.rasterList, self.plottype)
-            
+
             # plot profile
             if len(self.transect) > 0 and len(self.rasterList) > 0:
-                self.OnCreateProfile(event = None)
+                self.OnCreateProfile(event=None)
 
         dlg.Destroy()
 
@@ -148,58 +163,66 @@ class ProfileFrame(BasePlotFrame):
         cumdist = 0
         self.coordstr = ''
         lasteast = lastnorth = None
-        
+
         region = grass.region()
         insideRegion = True
         if len(self.transect) > 0:
             for point in self.transect:
-                if not (region['w'] <= point[0] <= region['e'] and region['s'] <= point[1] <= region['n']):
+                if not (region['w'] <= point[0] <= region['e']
+                        and region['s'] <= point[1] <= region['n']):
                     insideRegion = False
                 # build string of coordinate points for r.profile
                 if self.coordstr == '':
                     self.coordstr = '%f,%f' % (point[0], point[1])
                 else:
-                    self.coordstr = '%s,%f,%f' % (self.coordstr, point[0], point[1])
-        
+                    self.coordstr = '%s,%f,%f' % (
+                        self.coordstr, point[0], point[1])
+
         if not insideRegion:
-            GWarning(message = _("Not all points of profile lie inside computational region."),
-                     parent = self)
-        
+            GWarning(
+                message=_(
+                    "Not all points of profile lie inside computational region."),
+                parent=self)
+
         if len(self.rasterList) == 0:
             return
-        
+
         # title of window
         self.ptitle = _('Profile of')
-        
+
         # create list of coordinates for transect segment markers
         if len(self.transect) > 0:
             self.seglist = []
             for point in self.transect:
                 # get value of raster cell at coordinate point
                 ret = RunCommand('r.what',
-                                 parent = self,
-                                 read = True,
-                                 map = self.rasterList[0],
-                                 coordinates = '%f,%f' % (point[0], point[1]))
-                
+                                 parent=self,
+                                 read=True,
+                                 map=self.rasterList[0],
+                                 coordinates='%f,%f' % (point[0], point[1]))
+
                 val = ret.splitlines()[0].split('|')[3]
-                if val == None or val == '*':
+                if val is None or val == '*':
                     continue
                 val = float(val)
-                
+
                 # calculate distance between coordinate points
                 if lasteast and lastnorth:
-                    dist = math.sqrt(math.pow((lasteast-point[0]),2) + math.pow((lastnorth-point[1]),2))
+                    dist = math.sqrt(
+                        math.pow((lasteast - point[0]),
+                                 2) + math.pow((lastnorth - point[1]),
+                                               2))
                 cumdist += dist
-                
+
                 # store total transect length
                 self.transect_length = cumdist
-                
-                # build a list of distance,value pairs for each segment of transect
-                self.seglist.append((cumdist,val))
+
+                # build a list of distance,value pairs for each segment of
+                # transect
+                self.seglist.append((cumdist, val))
                 lasteast = point[0]
                 lastnorth = point[1]
-            
+
             # delete extra first segment point
             try:
                 self.seglist.pop(0)
@@ -208,17 +231,17 @@ class ProfileFrame(BasePlotFrame):
 
         #
         # create datalist of dist/value pairs and y labels for each raster map
-        #    
+        #
         self.ylabel = ''
         i = 0
-        
+
         for r in self.raster.iterkeys():
             self.raster[r]['datalist'] = []
             datalist = self.CreateDatalist(r, self.coordstr)
-            if len(datalist) > 0:   
+            if len(datalist) > 0:
                 self.raster[r]['datalist'] = datalist
 
-                # update ylabel to match units if they exist           
+                # update ylabel to match units if they exist
                 if self.raster[r]['units'] != '':
                     self.ylabel += '%s (%d),' % (self.raster[r]['units'], i)
                 i += 1
@@ -227,7 +250,7 @@ class ProfileFrame(BasePlotFrame):
                 self.ptitle += ' %s ,' % r.split('@')[0]
 
         self.ptitle = self.ptitle.rstrip(',')
-            
+
         if self.ylabel == '':
             self.ylabel = _('Raster values')
         else:
@@ -237,36 +260,37 @@ class ProfileFrame(BasePlotFrame):
         """Build a list of distance, value pairs for points along transect using r.profile
         """
         datalist = []
-        
-        # keep total number of transect points to 500 or less to avoid 
+
+        # keep total number of transect points to 500 or less to avoid
         # freezing with large, high resolution maps
         region = grass.region()
-        curr_res = min(float(region['nsres']),float(region['ewres']))
+        curr_res = min(float(region['nsres']), float(region['ewres']))
         transect_rec = 0
         if self.transect_length / curr_res > 500:
             transect_res = self.transect_length / 500
-        else: transect_res = curr_res
-        
+        else:
+            transect_res = curr_res
+
         ret = RunCommand("r.profile",
-                         parent = self,
-                         input = raster,
-                         coordinates = coords,
-                         resolution = transect_res,
-                         null = "nan",
-                         quiet = True,
-                         read = True)
-        
+                         parent=self,
+                         input=raster,
+                         coordinates=coords,
+                         resolution=transect_res,
+                         null="nan",
+                         quiet=True,
+                         read=True)
+
         if not ret:
             return []
-            
+
         for line in ret.splitlines():
             dist, elev = line.strip().split(' ')
-            if dist == None or dist == '' or dist == 'nan' or \
-                elev == None or elev == '' or elev == 'nan':
+            if dist is None or dist == '' or dist == 'nan' or \
+                    elev is None or elev == '' or elev == 'nan':
                 continue
             dist = float(dist)
             elev = float(elev)
-            datalist.append((dist,elev))
+            datalist.append((dist, elev))
 
         return datalist
 
@@ -277,12 +301,13 @@ class ProfileFrame(BasePlotFrame):
         transect is in multiple segments, these are drawn as
         points. Profile transect is drawn, using methods in mapdisp.py
         """
-            
+
         if len(self.transect) == 0 or len(self.rasterList) == 0:
-            dlg = wx.MessageDialog(parent = self,
-                                   message = _('You must draw a transect to profile in the map display window.'),
-                                   caption = _('Nothing to profile'),
-                                   style = wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
+            dlg = wx.MessageDialog(
+                parent=self,
+                message=_('You must draw a transect to profile in the map display window.'),
+                caption=_('Nothing to profile'),
+                style=wx.OK | wx.ICON_INFORMATION | wx.CENTRE)
             dlg.ShowModal()
             dlg.Destroy()
             return
@@ -301,33 +326,37 @@ class ProfileFrame(BasePlotFrame):
         self.plotlist = []
 
         # Add segment marker points to plot data list
-        if len(self.seglist) > 0 :
-            self.ppoints = plot.PolyMarker(self.seglist,
-                                           legend = ' ' + self.properties['marker']['legend'],
-                                           colour = wx.Colour(self.properties['marker']['color'][0],
-                                                           self.properties['marker']['color'][1],
-                                                           self.properties['marker']['color'][2],
-                                                           255),
-                                           size = self.properties['marker']['size'],
-                                           fillstyle = self.ptfilldict[self.properties['marker']['fill']],
-                                           marker = self.properties['marker']['type'])
+        if len(self.seglist) > 0:
+            self.ppoints = plot.PolyMarker(
+                self.seglist,
+                legend=' ' + self.properties['marker']['legend'],
+                colour=wx.Colour(
+                    self.properties['marker']['color'][0],
+                    self.properties['marker']['color'][1],
+                    self.properties['marker']['color'][2],
+                    255),
+                size=self.properties['marker']['size'],
+                fillstyle=self.ptfilldict[
+                    self.properties['marker']['fill']],
+                marker=self.properties['marker']['type'])
             self.plotlist.append(self.ppoints)
 
-        # Add profile distance/elevation pairs to plot data list for each raster profiled
+        # Add profile distance/elevation pairs to plot data list for each
+        # raster profiled
         for r in self.rasterList:
             col = wx.Colour(self.raster[r]['pcolor'][0],
-                           self.raster[r]['pcolor'][1],
-                           self.raster[r]['pcolor'][2],
-                           255)
-            self.raster[r]['pline'] = plot.PolyLine(self.raster[r]['datalist'],
-                                                    colour = col,
-                                                    width = self.raster[r]['pwidth'],
-                                                    style = self.linestyledict[self.raster[r]['pstyle']],
-                                                    legend = self.raster[r]['plegend'])
+                            self.raster[r]['pcolor'][1],
+                            self.raster[r]['pcolor'][2],
+                            255)
+            self.raster[r]['pline'] = plot.PolyLine(
+                self.raster[r]['datalist'],
+                colour=col, width=self.raster[r]['pwidth'],
+                style=self.linestyledict[self.raster[r]['pstyle']],
+                legend=self.raster[r]['plegend'])
 
             self.plotlist.append(self.raster[r]['pline'])
 
-        if len(self.plotlist) > 0:        
+        if len(self.plotlist) > 0:
             return self.plotlist
         else:
             return None
@@ -341,49 +370,60 @@ class ProfileFrame(BasePlotFrame):
 
     def SaveProfileToFile(self, event):
         """Save r.profile data to a csv file
-        """   
-        dlg = wx.FileDialog(parent = self,
-                            message = _("Choose prefix for file(s) where to save profile values..."),
-                            defaultDir = os.getcwd(), 
-                            wildcard = _("Comma separated value (*.csv)|*.csv"), style = wx.FD_SAVE)
+        """
+        dlg = wx.FileDialog(
+            parent=self,
+            message=_(
+                "Choose prefix for file(s) where to save profile values..."),
+            defaultDir=os.getcwd(),
+            wildcard=_("Comma separated value (*.csv)|*.csv"),
+            style=wx.FD_SAVE)
         pfile = []
         if dlg.ShowModal() == wx.ID_OK:
             path = dlg.GetPath()
             for r in self.rasterList:
                 pfile.append(path + '_' + str(r.replace('@', '_')) + '.csv')
                 if os.path.exists(pfile[-1]):
-                    dlgOv = wx.MessageDialog(self,
-                                             message = _("File <%s> already exists. "
-                                                         "Do you want to overwrite this file?") % pfile[-1],
-                                             caption = _("Overwrite file?"),
-                                             style = wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
+                    dlgOv = wx.MessageDialog(
+                        self,
+                        message=_(
+                            "File <%s> already exists. "
+                            "Do you want to overwrite this file?") % pfile
+                        [-1],
+                        caption=_("Overwrite file?"),
+                        style=wx.YES_NO | wx.YES_DEFAULT | wx.ICON_QUESTION)
                     if dlgOv.ShowModal() != wx.ID_YES:
                         pfile.pop()
                         dlgOv.Destroy()
                         continue
-                
+
                 try:
                     fd = open(pfile[-1], "w")
                 except IOError as e:
-                    GError(parent = self,
-                           message = _("Unable to open file <%s> for writing.\n"
-                                       "Reason: %s") % (pfile[-1], e))
+                    GError(parent=self,
+                           message=_("Unable to open file <%s> for writing.\n"
+                                     "Reason: %s") % (pfile[-1], e))
                     dlg.Destroy()
                     return
-                
+
                 for datapair in self.raster[r]['datalist']:
-                    fd.write('%.6f,%.6f\n' % (float(datapair[0]),float(datapair[1])))
-                
+                    fd.write(
+                        '%.6f,%.6f\n' %
+                        (float(
+                            datapair[0]), float(
+                            datapair[1])))
+
                 fd.close()
-        
+
         dlg.Destroy()
         if pfile:
-            message = _("%d files created:\n%s") % (len(pfile), '\n'.join(pfile))
+            message = _("%d files created:\n%s") % (
+                len(pfile), '\n'.join(pfile))
         else:
             message = _("No files generated.")
-        
-        GMessage(parent = self, message = message)
-                        
+
+        GMessage(parent=self, message=message)
+
     def OnStats(self, event):
         """Displays regression information in messagebox
         """
@@ -392,12 +432,12 @@ class ProfileFrame(BasePlotFrame):
 
         for r in self.raster.iterkeys():
             try:
-                rast = r.split('@')[0] 
+                rast = r.split('@')[0]
                 statstr = 'Profile of %s\n\n' % rast
 
-                iterable = (i[1] for i in self.raster[r]['datalist'])            
+                iterable = (i[1] for i in self.raster[r]['datalist'])
                 a = numpy.fromiter(iterable, numpy.float)
-                
+
                 statstr += 'n: %f\n' % a.size
                 statstr += 'minimum: %f\n' % numpy.amin(a)
                 statstr += 'maximum: %f\n' % numpy.amax(a)
@@ -405,29 +445,31 @@ class ProfileFrame(BasePlotFrame):
                 statstr += 'mean: %f\n' % numpy.mean(a)
                 statstr += 'standard deviation: %f\n' % numpy.std(a)
                 statstr += 'variance: %f\n' % numpy.var(a)
-                cv = numpy.std(a)/numpy.mean(a)
+                cv = numpy.std(a) / numpy.mean(a)
                 statstr += 'coefficient of variation: %f\n' % cv
                 statstr += 'sum: %f\n' % numpy.sum(a)
                 statstr += 'median: %f\n' % numpy.median(a)
-                statstr += 'distance along transect: %f\n\n' % self.transect_length       
+                statstr += 'distance along transect: %f\n\n' % self.transect_length
                 message.append(statstr)
             except:
                 pass
-            
-        stats = PlotStatsFrame(self, id = wx.ID_ANY, message = message, 
-                               title = title)
+
+        stats = PlotStatsFrame(self, id=wx.ID_ANY, message=message,
+                               title=title)
 
         if stats.Show() == wx.ID_CLOSE:
-            stats.Destroy()       
+            stats.Destroy()
 
     def OnCloseWindow(self, event):
         if self.controller.IsActive():
             self.controller.Stop()
         self.Destroy()
-    
+
+
 class ProfileToolbar(BaseToolbar):
     """Toolbar for profiling raster map
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
 
@@ -436,10 +478,10 @@ class ProfileToolbar(BaseToolbar):
             parent.SetToolBar(self)
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         return self._getToolbarData((('addraster', BaseIcons["addRast"],
diff --git a/gui/wxpython/wxplot/scatter.py b/gui/wxpython/wxplot/scatter.py
index 7c333a8..5453e00 100644
--- a/gui/wxpython/wxplot/scatter.py
+++ b/gui/wxpython/wxplot/scatter.py
@@ -29,21 +29,23 @@ except ImportError as e:
 
 import grass.script as grass
 
-from wxplot.base       import BasePlotFrame, PlotIcons
+from wxplot.base import BasePlotFrame, PlotIcons
 from gui_core.toolbars import BaseToolbar, BaseIcons
-from wxplot.dialogs    import ScatterRasterDialog, PlotStatsFrame
-from core.gcmd         import RunCommand, GException, GError, GMessage
+from wxplot.dialogs import ScatterRasterDialog, PlotStatsFrame
+from core.gcmd import RunCommand, GException, GError, GMessage
 from core.utils import _
 
+
 class ScatterFrame(BasePlotFrame):
     """Mainframe for displaying bivariate scatter plot of two raster maps. Uses wx.lib.plot.
     """
-    def __init__(self, parent, id = wx.ID_ANY, style = wx.DEFAULT_FRAME_STYLE, 
-                 size = wx.Size(700, 400),
-                 rasterList = [], **kwargs):
-        BasePlotFrame.__init__(self, parent, size = size, **kwargs)
-        
-        self.toolbar = ScatterToolbar(parent = self)
+
+    def __init__(self, parent, id=wx.ID_ANY, style=wx.DEFAULT_FRAME_STYLE,
+                 size=wx.Size(700, 400),
+                 rasterList=[], **kwargs):
+        BasePlotFrame.__init__(self, parent, size=size, **kwargs)
+
+        self.toolbar = ScatterToolbar(parent=self)
         # workaround for http://trac.wxwidgets.org/ticket/13888
         if sys.platform != 'darwin':
             self.SetToolBar(self.toolbar)
@@ -58,15 +60,28 @@ class ScatterFrame(BasePlotFrame):
         self.xlabel = _("Raster cell values")           # default X-axis label
         self.ylabel = _("Raster cell values")           # default Y-axis label
         self.maptype = 'raster'                         # default type of scatterplot
-        self.scattertype = 'normal' 
+        self.scattertype = 'normal'
         self.bins = 255
-        self.colorList = ["blue", "red", "black", "green", "yellow", "magenta", "cyan", \
-                    "aqua", "grey", "orange", "brown", "purple", "violet", \
-                    "indigo"]
-        
+        self.colorList = [
+            "blue",
+            "red",
+            "black",
+            "green",
+            "yellow",
+            "magenta",
+            "cyan",
+            "aqua",
+            "grey",
+            "orange",
+            "brown",
+            "purple",
+            "violet",
+            "indigo"]
+
         self._initOpts()
 
-        if len(self.rasterList) > 1: # set raster name(s) from layer manager if a map is selected
+        if len(
+                self.rasterList) > 1:  # set raster name(s) from layer manager if a map is selected
             self.InitRasterOpts(self.rasterList, 'scatter')
         else:
             self.raster = {}
@@ -74,7 +89,7 @@ class ScatterFrame(BasePlotFrame):
     def _initOpts(self):
         """Initialize plot options
         """
-        self.InitPlotOpts('scatter')            
+        self.InitPlotOpts('scatter')
 
     def OnCreateScatter(self, event):
         """Main routine for creating a scatterplot. Uses r.stats to
@@ -92,30 +107,33 @@ class ScatterFrame(BasePlotFrame):
             wx.EndBusyCursor()
         else:
             wx.EndBusyCursor()
-            GMessage(_("Nothing to plot."), parent = self)
+            GMessage(_("Nothing to plot."), parent=self)
 
     def OnSelectRaster(self, event):
         """Select raster map(s) to profile
         """
-        dlg = ScatterRasterDialog(parent = self)
+        dlg = ScatterRasterDialog(parent=self)
         dlg.CenterOnParent()
         if dlg.ShowModal() == wx.ID_OK:
             self.rasterList = dlg.GetRasterPairs()
             if not self.rasterList:
-                GMessage(_("At least 2 raster maps must be specified"), parent = dlg)
+                GMessage(
+                    _("At least 2 raster maps must be specified"),
+                    parent=dlg)
                 return
-            
+
             # scatterplot or bubbleplot
             # bins for r.stats with float and dcell maps
             self.scattertype, self.bins = dlg.GetSettings()
-            self.raster = self.InitRasterPairs(self.rasterList, 'scatter') # dictionary of raster pairs
-            
+            self.raster = self.InitRasterPairs(
+                self.rasterList, 'scatter')  # dictionary of raster pairs
+
             # plot histogram
             if self.rasterList:
-                self.OnCreateScatter(event = None)
-        
+                self.OnCreateScatter(event=None)
+
         dlg.Destroy()
-        
+
     def SetupScatterplot(self):
         """Build data list for ploting each raster
         """
@@ -123,27 +141,30 @@ class ScatterFrame(BasePlotFrame):
         #
         # initialize title string
         #
-        self.ptitle = _('Bivariate Scatterplot of ')        
+        self.ptitle = _('Bivariate Scatterplot of ')
 
         #
         # create a datalist for plotting for each raster pair
         #
-        if len(self.rasterList) == 0: return  # at least 1 pair of maps needed to plot        
-        
+        if len(self.rasterList) == 0:
+            return  # at least 1 pair of maps needed to plot
+
         for rpair in self.rasterList:
             self.raster[rpair]['datalist'] = self.CreateDatalist(rpair)
-            
+
             # update title
-            self.ptitle += '%s vs %s, ' % (rpair[0].split('@')[0], rpair[1].split('@')[0])
+            self.ptitle += '%s vs %s, ' % (
+                rpair[0].split('@')[0],
+                rpair[1].split('@')[0])
 
         self.ptitle = self.ptitle.strip(', ')
-        
+
         #
         # set xlabel & ylabel based on raster maps of first pair to be plotted
         #
         self.xlabel = _('Raster <%s> cell values') % rpair[0].split('@')[0]
         self.ylabel = _('Raster <%s> cell values') % rpair[1].split('@')[0]
-        
+
         units = self.raster[self.rasterList[0]][0]['units']
         if units != '':
             self.xlabel += _(': %s') % units
@@ -151,31 +172,31 @@ class ScatterFrame(BasePlotFrame):
         units = self.raster[self.rasterList[0]][1]['units']
         if units != '':
             self.ylabel += _(': %s') % units
-            
+
     def CreateDatalist(self, rpair):
         """Build a list of cell value, frequency pairs for histogram
             frequency can be in cell counts, percents, or area
         """
         datalist = []
-        
-        if self.scattertype == 'bubble': 
+
+        if self.scattertype == 'bubble':
             freqflag = 'cn'
         else:
             freqflag = 'n'
-                
+
         try:
             ret = RunCommand("r.stats",
-                             parent = self,
-                             input = '%s,%s' % rpair,
-                             flags = freqflag,
-                             nsteps = self.bins,
-                             sep = ',',
-                             quiet = True,
-                             read = True)
-            
+                             parent=self,
+                             input='%s,%s' % rpair,
+                             flags=freqflag,
+                             nsteps=self.bins,
+                             sep=',',
+                             quiet=True,
+                             read=True)
+
             if not ret:
                 return datalist
-            
+
             for line in ret.splitlines():
                 rast1, rast2 = line.strip().split(',')
                 rast1 = rast1.strip()
@@ -191,44 +212,45 @@ class ScatterFrame(BasePlotFrame):
                         rast2 = '-' + rast2.split('-')[1]
                     else:
                         rast2 = rast2.split('-')[0]
-                
+
                 rast1 = rast1.encode('ascii', 'ignore')
                 rast2 = rast2.encode('ascii', 'ignore')
-                    
-                datalist.append((rast1,rast2))
+
+                datalist.append((rast1, rast2))
 
             return datalist
         except GException as e:
-            GError(parent = self,
-                   message = e.value)
+            GError(parent=self,
+                   message=e.value)
             return None
-        
+
     def CreatePlotList(self):
         """Make list of elements to plot
         """
         # graph the cell value, frequency pairs for the histogram
         self.plotlist = []
-        
+
         for rpair in self.rasterList:
             if 'datalist' not in self.raster[rpair] or \
-                self.raster[rpair]['datalist'] is None:
+                    self.raster[rpair]['datalist'] is None:
                 continue
-            
+
             if len(self.raster[rpair]['datalist']) > 0:
                 col = wx.Colour(self.raster[rpair]['pcolor'][0],
                                 self.raster[rpair]['pcolor'][1],
                                 self.raster[rpair]['pcolor'][2],
                                 255)
-                scatterpoints = plot.PolyMarker(self.raster[rpair]['datalist'],
-                                                legend = ' ' + self.raster[rpair]['plegend'],
-                                                colour = col,size = self.raster[rpair]['psize'],
-                                                fillstyle = self.ptfilldict[self.raster[rpair]['pfill']],
-                                                marker = self.raster[rpair]['ptype'])
+                scatterpoints = plot.PolyMarker(
+                    self.raster[rpair]['datalist'],
+                    legend=' ' + self.raster[rpair]['plegend'],
+                    colour=col, size=self.raster[rpair]['psize'],
+                    fillstyle=self.ptfilldict[self.raster[rpair]['pfill']],
+                    marker=self.raster[rpair]['ptype'])
 
                 self.plotlist.append(scatterpoints)
-        
+
         return self.plotlist
-    
+
     def Update(self):
         """Update histogram after changing options
         """
@@ -237,8 +259,8 @@ class ScatterFrame(BasePlotFrame):
         if p:
             self.DrawPlot(p)
         else:
-            GMessage(_("Nothing to plot."), parent = self)
-    
+            GMessage(_("Nothing to plot."), parent=self)
+
     def OnRegression(self, event):
         """Displays regression information in messagebox
         """
@@ -246,18 +268,16 @@ class ScatterFrame(BasePlotFrame):
         title = _('Regression Statistics for Scatterplot(s)')
 
         for rpair in self.rasterList:
-            if isinstance(rpair, tuple) == False: continue
+            if isinstance(rpair, tuple) == False:
+                continue
             rast1, rast2 = rpair
-            rast1 = rast1.split('@')[0] 
-            rast2 = rast2.split('@')[0] 
-            ret = grass.parse_command('r.regression.line', 
-                                      mapx = rast1, 
-                                      mapy = rast2, 
-                                      flags = 'g', quiet = True,
-                                      parse = (grass.parse_key_val, { 'sep' : '=' }))
-            eqtitle = _('Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n\n') % \
-                { 'rast1' : rast1,
-                  'rast2' : rast2 }
+            rast1 = rast1.split('@')[0]
+            rast2 = rast2.split('@')[0]
+            ret = grass.parse_command(
+                'r.regression.line', mapx=rast1, mapy=rast2, flags='g',
+                quiet=True, parse=(grass.parse_key_val, {'sep': '='}))
+            eqtitle = _('Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n\n') % {
+                'rast1': rast1, 'rast2': rast2}
             eq = '   %s = %s + %s(%s)\n\n' % (rast2, ret['a'], ret['b'], rast1)
             num = 'N = %s\n' % ret['N']
             rval = 'R = %s\n' % ret['R']
@@ -265,16 +285,18 @@ class ScatterFrame(BasePlotFrame):
             ftest = 'F = %s\n' % ret['F']
             str = eqtitle + eq + num + rval + rsq + ftest
             message.append(str)
-            
-        stats = PlotStatsFrame(self, id = wx.ID_ANY, message = message, 
-                                      title = title)
+
+        stats = PlotStatsFrame(self, id=wx.ID_ANY, message=message,
+                               title=title)
 
         if stats.Show() == wx.ID_CLOSE:
-            stats.Destroy()       
+            stats.Destroy()
+
 
 class ScatterToolbar(BaseToolbar):
     """Toolbar for bivariate scatterplots of raster map pairs
     """
+
     def __init__(self, parent):
         BaseToolbar.__init__(self, parent)
 
@@ -283,10 +305,10 @@ class ScatterToolbar(BaseToolbar):
             parent.SetToolBar(self)
 
         self.InitToolbar(self._toolbarData())
-        
+
         # realize the toolbar
         self.Realize()
-        
+
     def _toolbarData(self):
         """Toolbar data"""
         return self._getToolbarData((('addraster', BaseIcons["addRast"],
diff --git a/gui/wxpython/xml/menudata.README b/gui/wxpython/xml/menudata.README
index a83c61d..bb28501 100644
--- a/gui/wxpython/xml/menudata.README
+++ b/gui/wxpython/xml/menudata.README
@@ -2,7 +2,7 @@ MENU
 - the entries in menudata.xml and module_tree_menudata.xml are autogenerated 
   via tools/build_modules_xml.py (see ../Makefile)
 - Find more info at
-  https://grass.osgeo.org/grass70/manuals/wxGUI.toolboxes.html
+  https://grass.osgeo.org/grass72/manuals/wxGUI.toolboxes.html
   (../docs/wxgui_sphinx/src/)
 - additionally
   https://trac.osgeo.org/grass/wiki/wxGUIDevelopment/Toolboxes
diff --git a/gui/wxpython/xml/menudata_modeler.xml b/gui/wxpython/xml/menudata_modeler.xml
index be225df..bf2bd61 100644
--- a/gui/wxpython/xml/menudata_modeler.xml
+++ b/gui/wxpython/xml/menudata_modeler.xml
@@ -89,6 +89,12 @@
 	  <shortcut>Ctrl+L</shortcut>
 	</menuitem>
 	<menuitem>
+	  <label>Add condition</label>
+	  <help>Adds condition (if/else) to model</help>
+	  <handler>OnDefineCondition</handler>
+	  <shortcut>Ctrl+I</shortcut>
+	</menuitem>
+	<menuitem>
 	  <label>Add comment</label>
 	  <help>Adds comment to model</help>
 	  <handler>OnAddComment</handler>
diff --git a/gui/wxpython/xml/menudata_pyedit.xml b/gui/wxpython/xml/menudata_pyedit.xml
new file mode 100644
index 0000000..5449f17
--- /dev/null
+++ b/gui/wxpython/xml/menudata_pyedit.xml
@@ -0,0 +1,113 @@
+<menudata>
+  <menubar>
+    <menu>
+      <label>&File</label>
+      <items>
+        <menuitem>
+          <label>Open</label>
+          <help>Load model from file</help>
+          <handler>OnOpen</handler>
+          <shortcut>Ctrl+O</shortcut>
+        </menuitem>
+        <menuitem>
+          <label>Save</label>
+          <help>Save model</help>
+          <handler>OnSave</handler>
+          <shortcut>Ctrl+S</shortcut>
+        </menuitem>
+        <menuitem>
+          <label>Quit editor</label>
+          <help>Close editor window</help>
+          <handler>OnClose</handler>
+          <shortcut>Ctrl+W</shortcut>
+        </menuitem>
+      </items>
+    </menu>
+    <menu>
+      <label>&Run</label>
+      <items>
+        <menuitem>
+          <label>Run</label>
+          <help>Run Python script</help>
+          <handler>OnRun</handler>
+          <shortcut>Ctrl+R</shortcut>
+        </menuitem>
+        <menuitem>
+          <label>Set parameters</label>
+          <help>Set command line parameters for the script</help>
+          <handler>OnSetParameters</handler>
+        </menuitem>
+      </items>
+    </menu>
+    <menu>
+      <label>&Templates</label>
+      <items>
+        <menuitem>
+          <label>Load script &template</label>
+          <help>Load simple script template</help>
+          <handler>OnSimpleScriptTemplate</handler>
+        </menuitem>
+        <menuitem>
+          <label>Load GRASS &module template</label>
+          <help>Load full GRASS module template</help>
+          <handler>OnGrassModuleTemplate</handler>
+        </menuitem>
+      </items>
+    </menu>
+    <menu>
+      <label>&Examples</label>
+      <items>
+        <menuitem>
+          <label>Load script &example</label>
+          <help>Load simple script example</help>
+          <handler>OnSimpleScriptExample</handler>
+        </menuitem>
+        <menuitem>
+          <label>Load GRASS &module example</label>
+          <help>Load full GRASS module example</help>
+          <handler>OnGrassModuleExample</handler>
+        </menuitem>
+        <menuitem>
+          <label>Load GRASS module error &handling example</label>
+          <help>Load full GRASS module with error handling example</help>
+          <handler>OnGrassModuleErrorHandlingExample</handler>
+        </menuitem>
+      </items>
+    </menu>
+    <menu>
+      <label>&Help</label>
+      <items>
+        <menuitem>
+          <label>GRASS Python Help</label>
+          <help>Display documentation for writing Python code in GRASS GIS</help>
+          <handler>OnHelp</handler>
+        </menuitem>
+        <menuitem>
+          <label>Python help</label>
+          <help>Display documentation for writing Python code in general</help>
+          <handler>OnPythonHelp</handler>
+        </menuitem>
+        <menuitem>
+          <label>GRASS Modules help</label>
+          <help>Display the HTML man page index for all GRASS modules</help>
+          <handler>OnModulesHelp</handler>
+        </menuitem>
+        <menuitem>
+          <label>GRASS Python code guidelines</label>
+          <help>Display guidelines for submitting Python code to GRASS GIS</help>
+          <handler>OnSubmittingHelp</handler>
+        </menuitem>
+        <menuitem>
+          <label>Getting your code to GRASS Addons</label>
+          <help>Display instructions for submitting you code to GRASS GIS Addons repository</help>
+          <handler>OnAddonsHelp</handler>
+        </menuitem>
+        <menuitem>
+          <label>Get support</label>
+          <help>Display information about getting support for writing Python code in GRASS GIS</help>
+          <handler>OnSupport</handler>
+        </menuitem>
+      </items>
+    </menu>
+  </menubar>
+</menudata>
diff --git a/gui/wxpython/xml/toolboxes.xml b/gui/wxpython/xml/toolboxes.xml
index d67284e..26e654e 100644
--- a/gui/wxpython/xml/toolboxes.xml
+++ b/gui/wxpython/xml/toolboxes.xml
@@ -174,9 +174,15 @@
       <module-item name="r3.cross.rast">
         <label>Cross section</label>
       </module-item>
+      <module-item name="r3.flow">
+        <label>Compute 3D flow lines</label>
+      </module-item>
       <module-item name="r3.gwflow">
         <label>Groundwater modeling</label>
       </module-item>
+      <module-item name="r3.gradient">
+        <label>Compute gradient</label>
+      </module-item>
       <module-item name="v.vol.rst">
         <label>Interpolate 3D raster from points</label>
       </module-item>
@@ -223,6 +229,7 @@
       <wxgui-item name="AddRaster"/>
       <wxgui-item name="AddVector"/>
       <wxgui-item name="AddMultipleRastersOrVectors"/>
+      <wxgui-item name="AddRGB"/>
       <wxgui-item name="AddWebServiceLayer"/>
       <separator/>
       <wxgui-item name="NewMapDisplayWindow"/>
@@ -347,6 +354,9 @@
       <module-item name="r3.in.ascii">
         <label>ASCII 3D import</label>
       </module-item>
+      <module-item name="r3.in.lidar">
+        <label>LAS LiDAR points import</label>
+      </module-item>
       <module-item name="r3.in.bin">
         <label>Raw binary array 3D import</label>
       </module-item>
@@ -428,6 +438,9 @@
       <module-item name="v.out.dxf">
         <label>DXF export</label>
       </module-item>
+      <module-item name="v.out.lidar">
+        <label>LAS LiDAR points export</label>
+      </module-item>
       <module-item name="v.out.postgis">
         <label>PostGIS export</label>
       </module-item>
@@ -847,34 +860,9 @@
         <label>Watershed basin creation</label>
       </module-item>
       <separator/>
-      <!--
-      <module-item name="r.stream.channel">
-        <label>Stream channel characteristics</label>
-      </module-item>
-      <module-item name="r.stream.distance">
-        <label>Stream distance and elevation characteristics</label>
-      </module-item>
-      -->
       <module-item name="r.stream.extract">
         <label>Extraction of stream networks</label>
       </module-item>
-      <!--
-      <module-item name="r.stream.order">
-        <label>Stream ordering and hierarchy</label>
-      </module-item>
-      <module-item name="r.stream.segment">
-        <label>Stream segment characteristics</label>
-      </module-item>
-      <module-item name="r.stream.slope">
-        <label>Stream elevation change</label>
-      </module-item>
-      <module-item name="r.stream.snap">
-        <label>Position correction of water outlet point</label>
-      </module-item>
-      <module-item name="r.stream.stats">
-        <label>Horton's statistics</label>
-      </module-item>
-      -->
       <separator/>
       <module-item name="r.sim.water">
         <label>SIMWE Overland flow modeling</label>
@@ -1063,8 +1051,6 @@
         <label>Raster series interpolation</label> 
       </module-item> 
       <separator/>
-      <wxgui-item name="OrdinaryOrBlockKriging"/>
-      <separator/>
       <module-item name="r.fillnulls">
         <label>Fill NULL cells</label>
       </module-item>
@@ -1249,6 +1235,9 @@
   <toolbox name="LidarAnalysis">
     <label>Lidar analysis</label>
     <items>
+      <module-item name="v.decimate">
+        <label>Decimates a point cloud</label>
+      </module-item>
       <module-item name="v.outlier">
         <label>Identify and remove outliers</label>
       </module-item>
@@ -1776,6 +1765,9 @@
       <module-item name="t.rast.to.rast3">
         <label>Convert raster dataset to 3D raster</label>
       </module-item>
+      <module-item name="t.rast.to.vect">
+        <label>Convert raster dataset to vector dataset </label>
+      </module-item>
       <separator/>
       <subtoolbox name="TemporalExtraction"/>
       <module-item name="t.vect.db.select">
@@ -1796,8 +1788,12 @@
       <module-item name="t.rast.gapfill">
         <label>Interpolate gaps in raster datasets</label>
       </module-item>
+      <module-item name="t.rast.contour">
+        <label>Contours from a space time raster dataset</label>
+      </module-item>
       <subtoolbox name="TemporalAggregation"/>
       <subtoolbox name="TemporalSampling"/>
+      <subtoolbox name="TemporalMapAlgebra"/>
       <subtoolbox name="TemporalReportsAndStatistics"/>
       <subtoolbox name="TemporalGuiTools"/>
     </items>
@@ -1805,6 +1801,9 @@
   <toolbox name="TemporalManageDatasets">
     <label>Manage datasets</label>
     <items>
+      <module-item name="t.connect">
+        <label>Connect temporal database</label>
+      </module-item>
       <module-item name="t.create">
         <label>Create</label>
       </module-item>
@@ -1934,11 +1933,25 @@
       </module-item>
     </items>
   </toolbox>
+  <toolbox name="TemporalMapAlgebra">
+    <label>Temporal algebra</label>
+    <items>
+      <module-item name="t.rast.algebra">
+        <label>Temporal raster algebra</label>
+      </module-item>
+      <module-item name="t.rast3d.algebra">
+        <label>Temporal 3D raster algebra</label>
+      </module-item>
+      <module-item name="t.vect.algebra">
+        <label>Temporal vector algebra</label>
+      </module-item>
+    </items>
+  </toolbox>
   <toolbox name="TemporalSampling">
     <label>Sampling</label>
     <items>
-      <module-item name="t.sample">
-        <label>Temporal sampling</label>
+      <module-item name="t.rast.what">
+        <label>Sample a space time raster dataset at point coordinates</label>
       </module-item>
       <module-item name="t.vect.what.strds">
         <label>Query raster dataset by vector points dataset</label>
@@ -1946,6 +1959,9 @@
       <module-item name="t.vect.observe.strds">
         <label>Observe specific locations in raster dataset</label>
       </module-item>
+      <module-item name="t.sample">
+        <label>Temporal sampling</label>
+      </module-item>
     </items>
   </toolbox>
   <toolbox name="TemporalGuiTools">
@@ -1963,11 +1979,13 @@
       <module-item name="g.gui.dbmgr">
         <label>Attribute table manager</label>
       </module-item>
+      <wxgui-item name="CartographicComposer"/>
       <wxgui-item name="Georectify"/>
       <wxgui-item name="GraphicalModeler"/>
       <wxgui-item name="InteractiveInputForSupervisedClassification"/>
       <wxgui-item name="MapSwipe"/>
-      <wxgui-item name="CartographicComposer"/>
+      <wxgui-item name="TplotTool"/>
+      <wxgui-item name="TimelineTool"/>
     </items>
   </toolbox>
 </toolboxes>
diff --git a/gui/wxpython/xml/wxgui_items.xml b/gui/wxpython/xml/wxgui_items.xml
index d6c3e17..1513ebd 100644
--- a/gui/wxpython/xml/wxgui_items.xml
+++ b/gui/wxpython/xml/wxgui_items.xml
@@ -180,6 +180,11 @@
     <description>Add multiple raster or vector map layers to current display</description>
     <shortcut>Ctrl+Shift+L</shortcut>
   </wxgui-item>
+  <wxgui-item name="AddRGB">
+    <label>Add RGB raster layer</label>
+    <handler>OnAddRasterRGB</handler>
+    <description>Add RGB raster map layer to current display</description>
+  </wxgui-item>
   <wxgui-item name="AddWebServiceLayer">
     <label>Add web service layer</label>
     <handler>OnAddWS</handler>
@@ -329,12 +334,6 @@
     <description>Configuration editor for r.li.'index'</description>
     <keywords>raster,landscape structure analysis</keywords>
   </wxgui-item>
-  <wxgui-item name="OrdinaryOrBlockKriging">
-    <label>Ordinary or block kriging</label>
-    <command>v.krige</command>
-    <description>Performs ordinary or block kriging.</description>
-    <keywords>vector,raster,interpolation,kriging</keywords>
-  </wxgui-item>
   <wxgui-item name="CreateNewVectorMap">
     <label>Create new vector map</label>
     <handler>OnNewVector</handler>
diff --git a/imagery/i.albedo/bb_alb_aster2bands.c b/imagery/i.albedo/bb_alb_aster2bands.c
new file mode 100644
index 0000000..077e4c2
--- /dev/null
+++ b/imagery/i.albedo/bb_alb_aster2bands.c
@@ -0,0 +1,14 @@
+/* Broadband albedo Aster
+ * Salleh and Chan, 2014. 
+ * Land Surface Albedo Determination: 
+ * Remote Sensing and Statistical Validation. 
+ * in proceedings of FIG 2014.
+ * https://www.fig.net/resources/proceedings/fig_proceedings/fig2014/papers/ts05g/TS05G_salleh_chan_6910.pdf
+ * Input: Ref1, Ref3
+ */
+double bb_alb_aster2bands(double greenchan, double nirchan)
+{
+    double result =
+	(0.697 * greenchan + 0.298 * nirchan - 0.008);
+    return result;
+}
diff --git a/imagery/i.albedo/bb_alb_landsat8.c b/imagery/i.albedo/bb_alb_landsat8.c
new file mode 100644
index 0000000..f05fe31
--- /dev/null
+++ b/imagery/i.albedo/bb_alb_landsat8.c
@@ -0,0 +1,26 @@
+/* Broadband albedo Landsat OLI 8
+ * Simple weighted average from band 2 - 7
+ * Temporary until a publication creates an algorithm
+-* chan5 is OLI Band 6 (1.57-1.65) 
+ * chan7 is OLI band 7 (2.11-2.29)
+ * 
+ * Temporary better fix than weighted average
+ * ------------------------------------------
+ * r.regression.multi
+ * mapx=LC81270512014115LGN00.toar.1,LC81270512014115LGN00.toar.2,
+ * LC81270512014115LGN00.toar.3,LC81270512014115LGN00.toar.4,
+ * LC81270512014115LGN00.toar.5,LC81270512014115LGN00.toar.6,
+ * LC81270512014115LGN00.toar.7
+ * mapy=MCD43_2014113 
+ * 
+ */
+double bb_alb_landsat8(double shortbluechan, double bluechan, double greenchan, double redchan,
+              double nirchan, double chan5, double chan7)
+{
+    double result;
+
+    result = 0.058674+shortbluechan*2.153642+bluechan*(-2.242688)+
+    greenchan*(-0.520669)+redchan*0.622670+nirchan*0.129979+
+    chan5*(-0.047970)+chan7*0.152228;
+    return result;
+}
diff --git a/imagery/i.albedo/functions.h b/imagery/i.albedo/functions.h
index 2b4f492..49bd9f6 100644
--- a/imagery/i.albedo/functions.h
+++ b/imagery/i.albedo/functions.h
@@ -2,6 +2,7 @@
 /* 2004 */
 
 /* BB_albedo functions */
+double bb_alb_aster2bands(double greenchan, double nirchan);
 double bb_alb_aster(double greenchan, double redchan, double nirchan,
 		    double swirchan1, double swirchan2, double swirchan3,
 		    double swirchan4, double swirchan5, double swirchan6);
diff --git a/imagery/i.albedo/i.albedo.html b/imagery/i.albedo/i.albedo.html
index a6f410c..abf9211 100644
--- a/imagery/i.albedo/i.albedo.html
+++ b/imagery/i.albedo/i.albedo.html
@@ -8,6 +8,8 @@ a precursor to <em>r.sun</em> and any energy-balance processing.
 
 <h2>NOTES</h2>
 
+It uses for Landsat 8 the weighted average reflectance (temporary until algorithm is found).
+<p>
 It assumes MODIS product surface reflectance in [0;10000].
 
 <h2>TODO</h2>
@@ -21,8 +23,15 @@ Maybe change input requirement of MODIS to [0.0-1.0]?
 <a href="i.vi.html">i.vi</a>
 </em>
 
+<h2>References</h2>
+For a 2 band determination of the Aster BB Albedo see the following:
+
+Salleh and Chan, 2014. Land Surface Albedo Determination: Remote Sensing and Statistical Validation. in proceedings of FIG 2014.
+
+https://www.fig.net/resources/proceedings/fig_proceedings/fig2014/papers/ts05g/TS05G_salleh_chan_6910.pdf
+
 <h2>AUTHOR</h2>
 
-Yann Chemin, International Rice Research Institute, The Philippines
+Yann Chemin
 
-<p><i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2015-12-30 18:02:16 +0100 (Wed, 30 Dec 2015) $</i>
diff --git a/imagery/i.albedo/main.c b/imagery/i.albedo/main.c
index d352c5e..c91e459 100644
--- a/imagery/i.albedo/main.c
+++ b/imagery/i.albedo/main.c
@@ -9,7 +9,7 @@
  * COPYRIGHT:    (C) 2004-2014 by the GRASS Development Team
  *
  *               This program is free software under the GNU Lesser General Public
- *   	    	 License. Read the file COPYING that comes with GRASS for details.
+ *                License. Read the file COPYING that comes with GRASS for details.
  *
  *****************************************************************************/
 
@@ -24,30 +24,36 @@
 #define MAXFILES 8
 
 double bb_alb_aster(double greenchan, double nirchan, double swirchan2,
-		    double swirchan3, double swirchan5, double swirchan6);
+    double swirchan3, double swirchan5, double swirchan6);
+
 double bb_alb_landsat(double bluechan, double greenchan, double redchan,
-		      double nirchan, double chan5, double chan7);
+    double nirchan, double chan5, double chan7);
+
+double bb_alb_landsat8(double shortbluechan, double bluechan, 
+    double greenchan, double redchan,
+    double nirchan, double chan5, double chan7);
+
 double bb_alb_noaa(double redchan, double nirchan);
 
 double bb_alb_modis(double redchan, double nirchan, double chan3,
-		    double chan4, double chan5, double chan6, double chan7);
+    double chan4, double chan5, double chan6, double chan7);
 
 int main(int argc, char *argv[])
 {
-    struct Cell_head cellhd;	/*region+header info */
+    struct Cell_head cellhd;    /*region+header info */
     int nrows, ncols;
     int row, col;
     struct GModule *module;
     struct Option *input, *output;
     struct Flag *flag1, *flag2, *flag3;
     struct Flag *flag4, *flag5, *flag6;
-    struct History history;	/*metadata */
-    struct Colors colors;	/*Color rules */
+    struct Flag *flag7;
+    struct History history;    /*metadata */
+    struct Colors colors;    /*Color rules */
 
     /************************************/
-    /* FMEO Declarations**************** */
-    char *name;			/*input raster name */
-    char *result;		/*output raster name */
+    char *name;            /*input raster name */
+    char *result;        /*output raster name */
     /*File Descriptors */
     int nfiles;
     int infd[MAXFILES];
@@ -55,11 +61,12 @@ int main(int argc, char *argv[])
     char **names;
     char **ptr;
     int i = 0;
-    int modis = 0, aster = 0, avhrr = 0, landsat = 0;
+    int modis = 0, aster = 0, avhrr = 0;
+    int landsat = 0, landsat8 = 0;
     void *inrast[MAXFILES];
     unsigned char *outrast;
 
-    RASTER_MAP_TYPE in_data_type[MAXFILES];	/* 0=numbers  1=text */
+    RASTER_MAP_TYPE in_data_type[MAXFILES];    /* 0=numbers  1=text */
     RASTER_MAP_TYPE out_data_type = DCELL_TYPE;
     CELL val1, val2;
     
@@ -117,28 +124,32 @@ int main(int argc, char *argv[])
     flag3->description = _("Landsat 5+7 (6 input bands:1,2,3,4,5,7)");
 
     flag4 = G_define_flag();
-    flag4->key = 'a';
-    flag4->description = _("ASTER (6 input bands:1,3,5,6,8,9)");
+    flag4->key = '8';
+    flag4->description = _("Landsat 8 (7 input bands:1,2,3,4,5,6,7)");
 
     flag5 = G_define_flag();
-    flag5->key = 'c';
-    flag5->label = _("Aggressive mode (Landsat)");
-    flag5->description =
-	_("Albedo dry run to calculate some water to beach/sand/desert stretching, "
-	  "a kind of simple atmospheric correction");
+    flag5->key = 'a';
+    flag5->description = _("ASTER (6 input bands:1,3,5,6,8,9)");
 
     flag6 = G_define_flag();
-    flag6->key = 'd';
-    flag6->label = _("Soft mode (MODIS)");
+    flag6->key = 'c';
+    flag6->label = _("Aggressive mode (Landsat)");
     flag6->description =
-	_("Albedo dry run to calculate some water to beach/sand/desert stretching, "
-	  "a kind of simple atmospheric correction");
+    _("Albedo dry run to calculate some water to beach/sand/desert stretching, "
+      "a kind of simple atmospheric correction");
+
+    flag7 = G_define_flag();
+    flag7->key = 'd';
+    flag7->label = _("Soft mode (MODIS)");
+    flag7->description =
+    _("Albedo dry run to calculate some water to beach/sand/desert stretching, "
+      "a kind of simple atmospheric correction");
 
     /* FMEO init nfiles */
     nfiles = 1;
 
     if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
+    exit(EXIT_FAILURE);
 
     names = input->answers;
     ptr = input->answers;
@@ -148,25 +159,26 @@ int main(int argc, char *argv[])
     modis = (flag1->answer);
     avhrr = (flag2->answer);
     landsat = (flag3->answer);
-    aster = (flag4->answer);
+    landsat8 = (flag4->answer);
+    aster = (flag5->answer);
 
     for (; *ptr != NULL; ptr++) {
-	if (nfiles >= MAXFILES)
-	    G_fatal_error(_("Too many input maps. Only %d allowed."), MAXFILES);
-	name = *ptr;
-	
-	/* Allocate input buffer */
-	in_data_type[nfiles] = Rast_map_type(name, "");
-	infd[nfiles] = Rast_open_old(name, "");
-
-	Rast_get_cellhd(name, "", &cellhd);
-
-	inrast[nfiles] = Rast_allocate_buf(in_data_type[nfiles]);
-	nfiles++;
+    if (nfiles >= MAXFILES)
+        G_fatal_error(_("Too many input maps. Only %d allowed."), MAXFILES);
+    name = *ptr;
+
+    /* Allocate input buffer */
+    in_data_type[nfiles] = Rast_map_type(name, "");
+    infd[nfiles] = Rast_open_old(name, "");
+
+    Rast_get_cellhd(name, "", &cellhd);
+
+    inrast[nfiles] = Rast_allocate_buf(in_data_type[nfiles]);
+    nfiles++;
     }
     nfiles--;
     if (nfiles <= 1)
-	G_fatal_error(_("At least two raster maps are required"));
+    G_fatal_error(_("At least two raster maps are required"));
 
     /* Allocate output buffer, use input map data_type */
     nrows = Rast_window_rows();
@@ -180,212 +192,217 @@ int main(int argc, char *argv[])
     /*This is correcting contrast for water/sand */
     /*A poor man's atmospheric correction... */
     for (i = 0; i < 100; i++)
-	histogram[i] = 0;
-
-    if (flag5->answer || flag6->answer) {
-	DCELL de;
-	DCELL d[MAXFILES];
-
-	/* Process pixels histogram */
-	for (row = 0; row < nrows; row++) {
-	    G_percent(row, nrows, 2);
-	    /* read input map */
-	    for (i = 1; i <= nfiles; i++)
-		Rast_get_row(infd[i], inrast[i], row, in_data_type[i]);
-
-	    /*process the data */
-	    for (col = 0; col < ncols; col++) {
-		for (i = 1; i <= nfiles; i++) {
-		    switch (in_data_type[i]) {
-		    case CELL_TYPE:
-			d[i] = (double)((CELL *) inrast[i])[col];
-			break;
-		    case FCELL_TYPE:
-			d[i] = (double)((FCELL *) inrast[i])[col];
-			break;
-		    case DCELL_TYPE:
-			d[i] = (double)((DCELL *) inrast[i])[col];
-			break;
-		    }
-		}
-		if (modis) {
-		    de = bb_alb_modis(d[1], d[2], d[3], d[4], d[5], d[6],
-				      d[7]);
-		}
-		else if (avhrr) {
-		    de = bb_alb_noaa(d[1], d[2]);
-		}
-		else if (landsat) {
-		    de = bb_alb_landsat(d[1], d[2], d[3], d[4], d[5], d[6]);
-		}
-		else if (aster) {
-		    de = bb_alb_aster(d[1], d[2], d[3], d[4], d[5], d[6]);
-		}
-		if (Rast_is_d_null_value(&de)) {
-		    /*Do nothing */
-		}
-		else {
-		    int temp;
-
-		    temp = (int)(de * 100);
-		    if (temp > 0) {
-			histogram[temp] = histogram[temp] + 1.0;
-		    }
-		}
-	    }
-	}
-
-	G_message("Calculating histogram of albedo");
-
-	peak1 = 0;
-	peak2 = 0;
-	peak3 = 0;
-	i_peak1 = 0;
-	i_peak2 = 0;
-	i_peak3 = 0;
-	for (i = 0; i < 100; i++) {
-	    /*Search for peaks of datasets (1) */
-	    if (i <= 10) {
-		if (histogram[i] > peak1) {
-		    peak1 = histogram[i];
-		    i_peak1 = i;
-		}
-	    }
-	    /*Search for peaks of datasets (2) */
-	    if (i >= 10 && i <= 30) {
-		if (histogram[i] > peak2) {
-		    peak2 = histogram[i];
-		    i_peak2 = i;
-		}
-	    }
-	    /*Search for peaks of datasets (3) */
-	    if (i >= 30) {
-		if (histogram[i] > peak3) {
-		    peak3 = histogram[i];
-		    i_peak3 = i;
-		}
-	    }
-	}
-
-	bottom1a = 100000;
-	bottom1b = 100000;
-	bottom2a = 100000;
-	bottom2b = 100000;
-	bottom3a = 100000;
-	bottom3b = 100000;
-	i_bottom1a = 100;
-	i_bottom1b = 100;
-	i_bottom2a = 100;
-	i_bottom2b = 100;
-	i_bottom3a = 100;
-	i_bottom3b = 100;
-	/* Water histogram lower bound */
-	for (i = 0; i < i_peak1; i++) {
-	    if (histogram[i] <= bottom1a) {
-		bottom1a = histogram[i];
-		i_bottom1a = i;
-	    }
-	}
-	/* Water histogram higher bound */
-	for (i = i_peak2; i > i_peak1; i--) {
-	    if (histogram[i] <= bottom1b) {
-		bottom1b = histogram[i];
-		i_bottom1b = i;
-	    }
-	}
-	/* Land histogram lower bound */
-	for (i = i_peak1; i < i_peak2; i++) {
-	    if (histogram[i] <= bottom2a) {
-		bottom2a = histogram[i];
-		i_bottom2a = i;
-	    }
-	}
-	/* Land histogram higher bound */
-	for (i = i_peak3; i > i_peak2; i--) {
-	    if (histogram[i] < bottom2b) {
-		bottom2b = histogram[i];
-		i_bottom2b = i;
-	    }
-	}
-	/* Cloud/Snow histogram lower bound */
-	for (i = i_peak2; i < i_peak3; i++) {
-	    if (histogram[i] < bottom3a) {
-		bottom3a = histogram[i];
-		i_bottom3a = i;
-	    }
-	}
-	/* Cloud/Snow histogram higher bound */
-	for (i = 100; i > i_peak3; i--) {
-	    if (histogram[i] < bottom3b) {
-		bottom3b = histogram[i];
-		i_bottom3b = i;
-	    }
-	}
-	if (flag5->answer) {
-	    G_message("peak1 %d %d", peak1, i_peak1);
-	    G_message("bottom2b= %d %d", bottom2b, i_bottom2b);
-	    a = (0.36 - 0.05) / (i_bottom2b / 100.0 - i_peak1 / 100.0);
-	    b = 0.05 - a * (i_peak1 / 100.0);
-	    G_message("a= %f\tb= %f", a, b);
-	}
-	if (flag6->answer) {
-	    G_message("bottom1a %d %d", bottom1a, i_bottom1a);
-	    G_message("bottom2b= %d %d", bottom2b, i_bottom2b);
-	    a = (0.36 - 0.05) / (i_bottom2b / 100.0 - i_bottom1a / 100.0);
-	    b = 0.05 - a * (i_bottom1a / 100.0);
-	    G_message("a= %f\tb= %f", a, b);
-	}
-    }				/*END OF FLAG1 */
+    histogram[i] = 0;
+
+    if (flag6->answer || flag7->answer) {
+    DCELL de;
+    DCELL d[MAXFILES];
+
+    /* Process pixels histogram */
+    for (row = 0; row < nrows; row++) {
+        G_percent(row, nrows, 2);
+        /* read input map */
+        for (i = 1; i <= nfiles; i++)
+        Rast_get_row(infd[i], inrast[i], row, in_data_type[i]);
+
+        /*process the data */
+        for (col = 0; col < ncols; col++) {
+        for (i = 1; i <= nfiles; i++) {
+            switch (in_data_type[i]) {
+            case CELL_TYPE:
+            d[i] = (double)((CELL *) inrast[i])[col];
+            break;
+            case FCELL_TYPE:
+            d[i] = (double)((FCELL *) inrast[i])[col];
+            break;
+            case DCELL_TYPE:
+            d[i] = (double)((DCELL *) inrast[i])[col];
+            break;
+            }
+        }
+        if (modis) {
+            de = bb_alb_modis(d[1],d[2],d[3],d[4],d[5],d[6],d[7]);
+        }
+        else if (avhrr) {
+            de = bb_alb_noaa(d[1],d[2]);
+        }
+        else if (landsat) {
+            de = bb_alb_landsat(d[1],d[2],d[3],d[4],d[5],d[6]);
+        }
+        else if (landsat8) {
+            de = bb_alb_landsat8(d[1],d[2],d[3],d[4],d[5],d[6],d[7]);
+        }
+        else if (aster) {
+            de = bb_alb_aster(d[1],d[2],d[3],d[4],d[5],d[6]);
+        }
+        if (Rast_is_d_null_value(&de)) {
+            /*Do nothing */
+        }
+        else {
+            int temp;
+
+            temp = (int)(de * 100);
+            if (temp > 0) {
+            histogram[temp] = histogram[temp] + 1.0;
+            }
+        }
+        }
+    }
+
+    G_message("Calculating histogram of albedo");
+
+    peak1 = 0;
+    peak2 = 0;
+    peak3 = 0;
+    i_peak1 = 0;
+    i_peak2 = 0;
+    i_peak3 = 0;
+    for (i = 0; i < 100; i++) {
+        /*Search for peaks of datasets (1) */
+        if (i <= 10) {
+        if (histogram[i] > peak1) {
+            peak1 = histogram[i];
+            i_peak1 = i;
+        }
+        }
+        /*Search for peaks of datasets (2) */
+        if (i >= 10 && i <= 30) {
+        if (histogram[i] > peak2) {
+            peak2 = histogram[i];
+            i_peak2 = i;
+        }
+        }
+        /*Search for peaks of datasets (3) */
+        if (i >= 30) {
+        if (histogram[i] > peak3) {
+            peak3 = histogram[i];
+            i_peak3 = i;
+        }
+        }
+    }
+
+    bottom1a = 100000;
+    bottom1b = 100000;
+    bottom2a = 100000;
+    bottom2b = 100000;
+    bottom3a = 100000;
+    bottom3b = 100000;
+    i_bottom1a = 100;
+    i_bottom1b = 100;
+    i_bottom2a = 100;
+    i_bottom2b = 100;
+    i_bottom3a = 100;
+    i_bottom3b = 100;
+    /* Water histogram lower bound */
+    for (i = 0; i < i_peak1; i++) {
+        if (histogram[i] <= bottom1a) {
+        bottom1a = histogram[i];
+        i_bottom1a = i;
+        }
+    }
+    /* Water histogram higher bound */
+    for (i = i_peak2; i > i_peak1; i--) {
+        if (histogram[i] <= bottom1b) {
+        bottom1b = histogram[i];
+        i_bottom1b = i;
+        }
+    }
+    /* Land histogram lower bound */
+    for (i = i_peak1; i < i_peak2; i++) {
+        if (histogram[i] <= bottom2a) {
+        bottom2a = histogram[i];
+        i_bottom2a = i;
+        }
+    }
+    /* Land histogram higher bound */
+    for (i = i_peak3; i > i_peak2; i--) {
+        if (histogram[i] < bottom2b) {
+        bottom2b = histogram[i];
+        i_bottom2b = i;
+        }
+    }
+    /* Cloud/Snow histogram lower bound */
+    for (i = i_peak2; i < i_peak3; i++) {
+        if (histogram[i] < bottom3a) {
+        bottom3a = histogram[i];
+        i_bottom3a = i;
+        }
+    }
+    /* Cloud/Snow histogram higher bound */
+    for (i = 100; i > i_peak3; i--) {
+        if (histogram[i] < bottom3b) {
+        bottom3b = histogram[i];
+        i_bottom3b = i;
+        }
+    }
+    if (flag5->answer) {
+        G_message("peak1 %d %d", peak1, i_peak1);
+        G_message("bottom2b= %d %d", bottom2b, i_bottom2b);
+        a = (0.36 - 0.05) / (i_bottom2b / 100.0 - i_peak1 / 100.0);
+        b = 0.05 - a * (i_peak1 / 100.0);
+        G_message("a= %f\tb= %f", a, b);
+    }
+    if (flag6->answer) {
+        G_message("bottom1a %d %d", bottom1a, i_bottom1a);
+        G_message("bottom2b= %d %d", bottom2b, i_bottom2b);
+        a = (0.36 - 0.05) / (i_bottom2b / 100.0 - i_bottom1a / 100.0);
+        b = 0.05 - a * (i_bottom1a / 100.0);
+        G_message("a= %f\tb= %f", a, b);
+    }
+    }                /*END OF FLAG1 */
     /* End of processing histogram */
 
     /* Process pixels */
     for (row = 0; row < nrows; row++) {
-	DCELL de;
-	DCELL d[MAXFILES];
-
-	G_percent(row, nrows, 2);
-	/* read input map */
-	for (i = 1; i <= nfiles; i++)
-	    Rast_get_row(infd[i], inrast[i], row, in_data_type[i]);
-
-	/*process the data */
-	for (col = 0; col < ncols; col++) {
-	    for (i = 1; i <= nfiles; i++) {
-		switch (in_data_type[i]) {
-		case CELL_TYPE:
-		    d[i] = (double)((CELL *) inrast[i])[col];
-		    break;
-		case FCELL_TYPE:
-		    d[i] = (double)((FCELL *) inrast[i])[col];
-		    break;
-		case DCELL_TYPE:
-		    d[i] = (double)((DCELL *) inrast[i])[col];
-		    break;
-		}
-	    }
-	    if (modis) {
-		de = bb_alb_modis(d[1], d[2], d[3], d[4], d[5], d[6], d[7]);
-	    }
-	    else if (avhrr) {
-		de = bb_alb_noaa(d[1], d[2]);
-	    }
-	    else if (landsat) {
-		de = bb_alb_landsat(d[1], d[2], d[3], d[4], d[5], d[6]);
-	    }
-	    else if (aster) {
-		de = bb_alb_aster(d[1], d[2], d[3], d[4], d[5], d[6]);
-	    }
-	    if (flag5->answer || flag6->answer) {
-		/* Post-Process Albedo */
-		de = a * de + b;
-	    }
-	    ((DCELL *) outrast)[col] = de;
-	}
-	Rast_put_row(outfd, outrast, out_data_type);
+    DCELL de;
+    DCELL d[MAXFILES];
+
+    G_percent(row, nrows, 2);
+    /* read input map */
+    for (i = 1; i <= nfiles; i++)
+        Rast_get_row(infd[i], inrast[i], row, in_data_type[i]);
+
+    /*process the data */
+    for (col = 0; col < ncols; col++) {
+        for (i = 1; i <= nfiles; i++) {
+        switch (in_data_type[i]) {
+        case CELL_TYPE:
+            d[i] = (double)((CELL *) inrast[i])[col];
+            break;
+        case FCELL_TYPE:
+            d[i] = (double)((FCELL *) inrast[i])[col];
+            break;
+        case DCELL_TYPE:
+            d[i] = (double)((DCELL *) inrast[i])[col];
+            break;
+        }
+        }
+        if (modis) {
+        de = bb_alb_modis(d[1],d[2],d[3],d[4],d[5],d[6],d[7]);
+        }
+        else if (avhrr) {
+        de = bb_alb_noaa(d[1],d[2]);
+        }
+        else if (landsat) {
+        de = bb_alb_landsat(d[1],d[2],d[3],d[4],d[5],d[6]);
+        }
+        else if (landsat8) {
+        de = bb_alb_landsat8(d[1],d[2],d[3],d[4],d[5],d[6],d[7]);
+        }
+        else if (aster) {
+        de = bb_alb_aster(d[1],d[2],d[3],d[4],d[5],d[6]);
+        }
+        if (flag6->answer || flag7->answer) {
+        /* Post-Process Albedo */
+        de = a * de + b;
+        }
+        ((DCELL *) outrast)[col] = de;
+    }
+    Rast_put_row(outfd, outrast, out_data_type);
     }
     for (i = 1; i <= nfiles; i++) {
-	G_free(inrast[i]);
-	Rast_close(infd[i]);
+    G_free(inrast[i]);
+    Rast_close(infd[i]);
     }
     G_free(outrast);
     Rast_close(outfd);
diff --git a/imagery/i.aster.toar/i.aster.toar.html b/imagery/i.aster.toar/i.aster.toar.html
index 2a397be..39e4156 100644
--- a/imagery/i.aster.toar/i.aster.toar.html
+++ b/imagery/i.aster.toar/i.aster.toar.html
@@ -43,4 +43,4 @@ ASTER sensor data download:
 
 Yann Chemin, CSU, Australia
 
-<p><i>Last changed: $Date: 2016-05-18 09:11:09 +0200 (Wed, 18 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-18 09:07:29 +0200 (Wed, 18 May 2016) $</i>
diff --git a/imagery/i.atcorr/common.h b/imagery/i.atcorr/common.h
index 0d60fbc..cb023df 100644
--- a/imagery/i.atcorr/common.h
+++ b/imagery/i.atcorr/common.h
@@ -29,7 +29,7 @@ using std::numeric_limits;
 
 #include "output.h"
 
-
+/* or better #include <grass/gis.h> ? */
 #ifndef M_PI
 #define M_PI 3.1415926535897932384626433832795
 #endif /* M_PI */
diff --git a/imagery/i.atcorr/geomcond.cpp b/imagery/i.atcorr/geomcond.cpp
index e5b5f17..b953fbb 100644
--- a/imagery/i.atcorr/geomcond.cpp
+++ b/imagery/i.atcorr/geomcond.cpp
@@ -369,9 +369,10 @@ void GeomCond::parse()
     case 13: /* rapideye         * enter month,day,hh.ddd,long.,lat. */
     case 14: /* vgt1_spot4       * enter month,day,hh.ddd,long.,lat. */
     case 15: /* vgt2_spot5       * enter month,day,hh.ddd,long.,lat. */
-	case 16: /* worldview2       * enter month,day,hh.ddd,long.,lat. */
-	case 17: /* quickbird2       * enter month,day,hh.ddd,long.,lat. */
+    case 16: /* worldview2       * enter month,day,hh.ddd,long.,lat. */
+    case 17: /* quickbird2       * enter month,day,hh.ddd,long.,lat. */
     case 18: /* Landsat 8        * enter month,day,hh.ddd,long.,lat. */
+    case 19: /* geoeye1          * enter month,day,hh.ddd,long.,lat. */
     {
 	cin >> month;
 	cin >> jday;
@@ -436,7 +437,8 @@ void GeomCond::print()
 	string(" VGT2-SPOT5 observation      "),
 	string(" Worldview2 observation      "),
 	string(" Quickbird2 observation      "),
-    string(" Landsat 8 observation       ")
+	string(" Landsat 8 observation       "),
+	string(" geoeye1  observation        ")
 	};
 
     static const string head(" geometrical conditions identity  ");
diff --git a/imagery/i.atcorr/geomcond.h b/imagery/i.atcorr/geomcond.h
index 9618949..318ecef 100644
--- a/imagery/i.atcorr/geomcond.h
+++ b/imagery/i.atcorr/geomcond.h
@@ -62,9 +62,11 @@
 /*         16      worldview2        * enter month,day,hh.ddd,long.,lat.c */
 /*                                                                      c */
 /*         17      quickbird        * enter month,day,hh.ddd,long.,lat. c */
-/*																		c */
+/*                                                                      c */
 /*         18      Landsat 8        * enter month,day,hh.ddd,long.,lat. c */
 /*                                                                      c */
+/*         19      geoeye1          * enter month,day,hh.ddd,long.,lat. c */
+/*                                                                      c */
 /*     note:       for hrv and tm experiments long. and lat. are the    c */
 /*                 coordinates of the scene center.                     c */
 /*                 lat. must be > 0 for north lat., < 0 for south lat.  c */
diff --git a/imagery/i.atcorr/i.atcorr.html b/imagery/i.atcorr/i.atcorr.html
index 79a34c4..190ddf1 100644
--- a/imagery/i.atcorr/i.atcorr.html
+++ b/imagery/i.atcorr/i.atcorr.html
@@ -177,6 +177,13 @@ the ascendant node at equator</td>
 <td>enter month,day,hh.ddd,long.,lat. *</td>
 </tr>
 
+
+<tr>
+<td>19</td>
+<td><b>Geoeye 1</b></td>
+<td>enter month,day,hh.ddd,long.,lat. *</td>
+</tr>
+
 </table>
 
 <blockquote>
@@ -601,7 +608,11 @@ micrometer.</td>
 <tr><td>123</td><td>Landsat 8 SWIR2 Band (2037nm - 2355nm)</td></tr>
 
 
-
+<tr><td>115</td><td><b>GeoEye 1</b> Panchromatic band (0.450-0.800)</td></tr>
+<tr><td>116</td><td>GeoEye 1 Blue Band  (0.450-0.510)</td></tr>
+<tr><td>117</td><td>GeoEye 1 Green Band (0.510-0.580)</td></tr>
+<tr><td>118</td><td>GeoEye 1 Red Band (0.655-0.690)</td></tr>
+<tr><td>120</td><td>GeoEye 1 NIR Band (0.780-0.920)</td></tr>
 
 </table>
 
@@ -796,7 +807,9 @@ overview., IEEE Trans. Geosc. and Remote Sens. 35(3):675-686.
 <p><em>Added Landsat 8 from <a href="http://landsat.gsfc.nasa.gov/?p=5779">NASA sources</a>, addition 05/2014:</em>
 <br>Nikolaos Ves
 
+<p><em>Geoeye1 addition 7/2015:</em>
+<br>Marco Vizzari
 
 <p>
-<i>Last changed: $Date: 2016-05-18 09:11:09 +0200 (Wed, 18 May 2016) $</i>
+<i>Last changed: $Date: 2016-05-18 09:07:29 +0200 (Wed, 18 May 2016) $</i>
 
diff --git a/imagery/i.atcorr/iwave.cpp b/imagery/i.atcorr/iwave.cpp
index 5250fee..ef661be 100644
--- a/imagery/i.atcorr/iwave.cpp
+++ b/imagery/i.atcorr/iwave.cpp
@@ -3093,7 +3093,217 @@ void IWave::landsat_8(int iwa)
     }
 }
 
+void IWave::geoeye1(int iwa)
+{
 
+    /* Pan of geoeye1 */
+    static const float sr1[261] = {
+		.0001, .0001, .0001, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0001, .0001, .0004, .0007, .0027, .0046, .0863,
+		.1679, .4137, .6595, .6918, .7240, .7334, .7428, .7525,
+		.7622, .7650, .7679, .7528, .7378, .7411, .7443, .7345,
+		.7247, .7443, .7638, .7579, .7520, .7812, .8105, .8202,
+		.8299, .8051, .7802, .7983, .8164, .8400, .8636, .8480,
+		.8325, .8532, .8739, .8670, .8601, .8408, .8216, .8401,
+		.8586, .8624, .8661, .8594, .8527, .8830, .9134, .9046,
+		.8959, .8935, .8912, .9079, .9246, .9236, .9226, .9300,
+		.9375, .9355, .9335, .9372, .9409, .9505, .9601, .9559,
+		.9516, .9537, .9557, .9621, .9684, .9765, .9847, .9869,
+		.9890, .9792, .9693, .9744, .9796, .9898, 1.0000, .9886,
+		.9772, .9706, .9641, .9722, .9804, .9813, .9823, .9745,
+		.9666, .9669, .9672, .9730, .9787, .9610, .9434, .9406,
+		.9378, .9368, .9358, .9411, .9463, .9588, .9714, .9646,
+		.9577, .9439, .9301, .9266, .9232, .9256, .9279, .9167,
+		.9055, .8945, .8834, .8836, .8839, .8859, .8878, .8823,
+		.8767, .8675, .8583, .8486, .8389, .8350, .8310, .8382,
+		.8454, .8521, .8588, .8479, .8370, .8163, .7957, .7838,
+		.7719, .7910, .8100, .6449, .4797, .2768, .0738, .0443,
+		.0148, .0102, .0057, .0037, .0018, .0013, .0008, .0006,
+		.0004, .0004, .0004, .0004, .0003, .0003, .0003, .0003,
+		.0004, .0003, .0003, .0003, .0002, .0002, .0002, .0002,
+		.0002, .0002, .0002, .0002, .0002, .0002, .0002, .0002,
+		.0002, .0002, .0002, .0002, .0002, .0002, .0002, .0002,
+		.0002, .0002, .0002, .0002, .0002, .0002, .0002, .0002,
+		.0002, .0002, .0002, .0002, .0002, .0002, .0002, .0002,
+		.0001, .0001, .0001, .0001, .0001, .0001, .0001, .0001,
+		.0001, .0001, .0001, .0001, .0001, .0001, .0001, .0001,
+		.0001, .0001, .0001, .0001, .0001
+    };
+	
+    /* Blue of geoeye1 */
+    static const float sr2[261] = {
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0002, .0003, .0003,
+		.0003, .0004, .0004, .0004, .0004, .0005, .0006, .0006,
+		.0007, .0010, .0013, .0036, .0060, .0222, .0384, .1251,
+		.2119, .4473, .6828, .7713, .8597, .8677, .8756, .8771,
+		.8786, .8878, .8971, .9065, .9160, .9209, .9259, .9328,
+		.9397, .9416, .9435, .9595, .9754, .9877, 1.0000, .9868,
+		.9736, .7085, .4435, .2623, .0812, .0470, .0129, .0082,
+		.0035, .0024, .0013, .0011, .0008, .0007, .0006, .0003,
+		.0001, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0001,
+		.0001, .0001, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0001, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000
+    };
+	
+    /* Green of geoeye1 */
+    static const float sr3[261] = {
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0001, .0003, .0003, .0003, .0003, .0003, .0003,
+		.0003, .0003, .0003, .0003, .0003, .0003, .0003, .0004,
+		.0004, .0005, .0005, .0011, .0016, .0117, .0219, .1132,
+		.2045, .4832, .7619, .8086, .8554, .8617, .8680, .8817,
+		.8955, .8955, .8955, .8957, .8960, .9002, .9044, .9032,
+		.9020, .9193, .9366, .9503, .9641, .9762, .9883, .9942,
+		1.0000, .9882, .9763, .8664, .7564, .4210, .0857, .0462,
+		.0067, .0040, .0014, .0010, .0006, .0005, .0004, .0004,
+		.0003, .0003, .0003, .0003, .0003, .0003, .0003, .0003,
+		.0003, .0003, .0003, .0003, .0003, .0003, .0003, .0002,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000
+    };
+	
+    /* Red of geoeye1 */
+    static const float sr4[261] = {
+		.0000, .0000, .0001, .0001, .0002, .0001, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0001, .0002, .0003, .0017,
+		.0032, .0247, .0463, .2688, .4913, .7407, .9901, .9918,
+		.9936, .9968, 1.0000, .9856, .9713, .9688, .9663, .8722,
+		.7781, .4300, .0819, .0431, .0044, .0025, .0007, .0004,
+		.0002, .0001, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000
+    };
+	
+    /* "Near IR" of geoeye1 */
+    static const float sr5[261] = {
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0001, .0001, .0001,
+		.0002, .0003, .0004, .0006, .0009, .0021, .0033, .0080,
+		.0128, .0459, .0791, .2192, .3593, .6220, .8847, .9423,
+		1.0000, .9865, .9731, .9620, .9510, .9322, .9135, .8973,
+		.8811, .8735, .8660, .8582, .8503, .8385, .8268, .8155,
+		.8042, .7969, .7895, .7832, .7769, .7689, .7608, .7526,
+		.7444, .7341, .7237, .7111, .6985, .6851, .6717, .6579,
+		.6440, .6250, .6061, .5877, .5693, .5586, .5479, .5373,
+		.5267, .5096, .4925, .4802, .4679, .4608, .4536, .4466,
+		.4396, .4300, .4205, .3784, .3364, .2346, .1329, .0784,
+		.0240, .0139, .0038, .0024, .0010, .0007, .0004, .0004,
+		.0004, .0003, .0001, .0001, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000, .0000, .0000, .0000,
+		.0000, .0000, .0000, .0000, .0000
+    };
+	
+    static const float wli[5] = {0.350, 0.350, 0.350, 0.350, 0.350};
+    static const float wls[5] = {1.000, 1.000, 1.000, 1.000, 1.000};
+
+    ffu.wlinf = (float)wli[iwa-1];
+    ffu.wlsup = (float)wls[iwa-1];
+
+    int i;
+    for(i = 0; i < 1501; i++) ffu.s[i] = 0;
+
+    switch(iwa)
+    {
+    case 1: for(i = 0; i < 261; i++)  ffu.s[40+i] = sr1[i];
+        break;
+    case 2: for(i = 0; i < 261; i++)  ffu.s[40+i] = sr2[i];
+        break;
+    case 3: for(i = 0; i < 261; i++)  ffu.s[40+i] = sr3[i];
+        break;
+    case 4: for(i = 0; i < 261; i++)  ffu.s[40+i] = sr4[i];
+        break;
+    case 5: for(i = 0; i < 261; i++)  ffu.s[40+i] = sr5[i];
+        break;
+    }
+}
 
 float IWave::equivwl() const
 {
@@ -3170,6 +3380,7 @@ void IWave::parse()
 	else if(iwave <= 109)   worldview2(iwave - 100);
 	else if(iwave <= 114)   quickbird2(iwave - 109);
 	else if(iwave <= 123)	landsat_8(iwave - 114);
+	else if(iwave <= 128)	geoeye1(iwave - 123);
 	else G_warning(_("Unsupported iwave value: %d"), iwave);
     }
 
@@ -3238,7 +3449,9 @@ void IWave::print()
 	string(" quickbird 2 nir"), string(" Landsat 8 Coastal Aerosol"), string(" Landsat 8 Blue"),
 	string(" Landsat 8 Green"),string(" Landsat 8 Red"), string(" Landsat 8 Panchromatic"),
 	string(" Landsat 8 NIR"),string(" Landsat 8 Cirrus"),string(" Landsat 8 SWIR1"),
-	string(" Landsat 8 SWIR2")
+	string(" Landsat 8 SWIR2"), string(" geoeye 1 pan"),
+	string(" geoeye 1 blue"), string(" geoeye 1 green"), string(" geoeye 1 red"),
+	string(" geoeye 1 nir")
     };
 
 
diff --git a/imagery/i.atcorr/iwave.h b/imagery/i.atcorr/iwave.h
index 1e82724..9194e53 100644
--- a/imagery/i.atcorr/iwave.h
+++ b/imagery/i.atcorr/iwave.h
@@ -144,7 +144,12 @@ c        119 Pan      "               ( 0.488-0.692 )                  c
 c        120 NIR      "               ( 0.829-0.900 )                  c 
 c        121 Cirrus   "               ( 1.340-1.409 )                  c  
 c        122 SWIR1    "               ( 1.515-1.697 )                  c 
-c        123 SWIR2    "               ( 2.037-2.037 )                  c 
+c        123 SWIR2    "               ( 2.037-2.037 )                  c
+c        124 Pan band of GeoEye 1     ( 0.450-0.800 )                  c
+c        125 Blue     "               ( 0.450-0.510 )                  c
+c        126 Green    "               ( 0.510-0.580 )                  c
+c        127 Red      "               ( 0.655-0.690 )                  c
+c        128 NIR      "               ( 0.780-0.920 )                  c
 c                                                                      c
 c  note: wl has to be in micrometer                                    c
 c**********************************************************************/
@@ -190,6 +195,7 @@ private:
 	void worldview2(int iwa);
 	void quickbird2(int iwa);
 	void landsat_8(int iwa);
+	void geoeye1(int iwa);
 
 public:
 	/* To compute the equivalent wavelength needed for the calculation of the
diff --git a/imagery/i.atcorr/sensors_csv/geoeye1.csv b/imagery/i.atcorr/sensors_csv/geoeye1.csv
new file mode 100644
index 0000000..88a86af
--- /dev/null
+++ b/imagery/i.atcorr/sensors_csv/geoeye1.csv
@@ -0,0 +1,652 @@
+"Wavelength","Panchromatic","Blue","Green","Red","Near IR"
+350,0.000055240937968200100,0.000002772902338376890,0.000004558598484384760,0.000001446557573799250,0.000000995030808984297
+351,0.000057588181321935900,0.000002608940852819810,0.000003692934882411270,0.000012223324947492300,0.000000863049095607235
+352,0.000059936586102368100,0.000002445116918844570,0.000002827271280437790,0.000022999515313776600,0.000000731067382230173
+353,0.000062284990882800400,0.000002281292984869330,0.000001961607678464310,0.000033776859694878500,0.000000599100958671621
+354,0.000064633395663232700,0.000002117469050894090,0.000001095907349142420,0.000044553050061162800,0.000000467119245294558
+355,0.000066980639016968400,0.000001953507565337000,0.000000230231504719464,0.000055330394442264600,0.000000335137531917496
+356,0.000057602118442294500,0.000001828473177441540,0.000000416586070540994,0.000075193297481939700,0.000000293426907022614
+357,0.000048223597867620600,0.000001703438789546080,0.000000602940636362524,0.000095056200521614700,0.000000251700992309221
+358,0.000038845077292946700,0.000001578266850068780,0.000000789282959734584,0.000114919103561290000,0.000000209990367414339
+359,0.000029466556718272700,0.000001453232462173310,0.000000975637525556113,0.000134777390541695000,0.000000168279742519456
+360,0.000020088036143598800,0.000001328156808803300,0.000001161992091377640,0.000154649525699910000,0.000000126555356787915
+361,0.000019606044064528900,0.000001340137551581840,0.000000959550946953466,0.000128372608304291000,0.000000238551748390747
+362,0.000019125213412155500,0.000001352104539202200,0.000000757109802529290,0.000102091074849401000,0.000000350534379156919
+363,0.000018643221333085600,0.000001364071526822560,0.000000554668658105114,0.000075814157453781700,0.000000462532299741602
+364,0.000018161229254015600,0.000001376066024759280,0.000000352227513680937,0.000049537240058162400,0.000000574514930507775
+365,0.000017680398601642300,0.000001388033012379640,0.000000149786369256761,0.000023259168647725400,0.000000686512851092458
+366,0.000017608390146455900,0.000001420082530949110,0.000000195817979261291,0.000021148475546426000,0.000000549225570692476
+367,0.000017537543117966100,0.000001451994497936730,0.000000241849589265820,0.000019037782445126600,0.000000411938290292494
+368,0.000017466696089476300,0.000001484044016506190,0.000000287881199270350,0.000016927089343827200,0.000000274651009892513
+369,0.000017395849060986500,0.000001516093535075650,0.000000333912809274880,0.000014816396242527800,0.000000137363729492531
+370,0.000017323840605800200,0.000001548143053645120,0.000000379944419279409,0.000012705703141228300,0.000000000076242679999
+371,0.000015688551817052100,0.000001513342503438790,0.000000413758064713588,0.000010560735799847700,0.000000000076499548950
+372,0.000014052101601607400,0.000001478679504814310,0.000000447571710147766,0.000008415537655503500,0.000000000076756417901
+373,0.000012416812812859300,0.000001443878954607980,0.000000481385355581945,0.000006270339511159320,0.000000000077011757870
+374,0.000010781175596102300,0.000001409215955983490,0.000000515199001016123,0.000004125141366815150,0.000000000077268626821
+375,0.000009145422236675530,0.000001374415405777170,0.000000549000404000833,0.000001979827820989220,0.000000000077525495772
+376,0.000009817423723301700,0.000001342475928473180,0.000000492036286620227,0.000001846539109562170,0.000000000077137134382
+377,0.000010489425209927900,0.000001310550206327370,0.000000435059926790152,0.000001713134996653360,0.000000000076750301974
+378,0.000011161310553884400,0.000001278610729023380,0.000000378083566960077,0.000001579730883744550,0.000000000076361940584
+379,0.000011833776611189200,0.000001246671251719390,0.000000321119449579472,0.000001446442172317490,0.000000000075973579194
+380,0.000012505081241797400,0.000001214745529573590,0.000000264143089749397,0.000001313038059408680,0.000000000075586746785
+381,0.000011527508391307900,0.000001284277854195320,0.000000231761810903126,0.000001631892353497820,0.000000000076536244515
+382,0.000010549819398148700,0.000001353810178817060,0.000000199380532056854,0.000001950631246105200,0.000000000077485742244
+383,0.000009572014262319830,0.000001423383768913340,0.000000166987010761113,0.000002269485540194340,0.000000000078435239974
+384,0.000008594209126490980,0.000001492847317744150,0.000000134605731914842,0.000002588339834283470,0.000000000079384737703
+385,0.000007616403990662130,0.000001562448418156810,0.000000102218331843835,0.000002907194128372610,0.000000000080334235433
+386,0.000007788875855100410,0.000001433012379642370,0.000000083173977449408,0.000011107969626330000,0.000000000080832683516
+387,0.000007961231576869020,0.000001303700137551580,0.000000064129623054981,0.000019308975927250900,0.000000000081329602618
+388,0.000008133587298637650,0.000001174346629986240,0.000000045085268660554,0.000027509405220763000,0.000000000081826521719
+389,0.000008306059163075920,0.000001044993122420910,0.000000026040914266126,0.000035709834514275200,0.000000000082323440821
+390,0.000008478414884844540,0.000000915653370013755,0.000000006995825324731,0.000043911417822604800,0.000000000082820359922
+391,0.000009200590004761850,0.000000893796423658872,0.000000036063807646634,0.000041287188127495600,0.000000000082699570356
+392,0.000009922648982009500,0.000000871939477303989,0.000000065131055421569,0.000038664112447203800,0.000000000082577251808
+393,0.000010644824101926800,0.000000850082530949106,0.000000094199527441451,0.000036039882752094500,0.000000000082456462242
+394,0.000011366999221844100,0.000000828225584594223,0.000000123269223706279,0.000033416807071802800,0.000000000082334143694
+395,0.000012089290484431100,0.000000806368638239340,0.000000152332798746373,0.000030792577376693500,0.000000000082213354127
+396,0.000011174086247546500,0.000000943067400275103,0.000000121883378426356,0.000030791423361876000,0.000000000082823417886
+397,0.000010259114296001200,0.000001079766162310870,0.000000091430285371497,0.000030789115332240900,0.000000000083435010626
+398,0.000009344142344455930,0.000001216451169188450,0.000000060978416561586,0.000030787961317423300,0.000000000084045074385
+399,0.000008429170392910650,0.000001353149931224210,0.000000030525323506727,0.000030786807302605800,0.000000000084656667125
+400,0.000007514198441365370,0.000001489821182943600,0.000000000073288199503,0.000030784499272970700,0.000000000085266730884
+401,0.000007222564197860650,0.000068042640990371400,0.000000000073541618207,0.000029748193966810500,0.000000000085655092274
+402,0.000006930929954355930,0.000134594222833563000,0.000000000073795036911,0.000028710734645832900,0.000000000086043453664
+403,0.000006639295710851210,0.000201141678129298000,0.000000000074049679860,0.000027673275324855200,0.000000000086430286073
+404,0.000006347661467346490,0.000267702888583219000,0.000000000074303098564,0.000026636970018695000,0.000000000086818647463
+405,0.000006056027223841770,0.000334250343878955000,0.000000000074556517268,0.000025599510697717400,0.000000000087205479871
+406,0.000006338370053774050,0.000333810178817056000,0.000000031750792698603,0.000023082604380640200,0.000000000087592312279
+407,0.000006620712883706340,0.000333356258596974000,0.000000063426906455444,0.000020566852078380700,0.000000000087977615706
+408,0.000006902939570968980,0.000332916093535076000,0.000000095104244457231,0.000018049945761303600,0.000000000088362919132
+409,0.000007185282400901270,0.000332462173314993000,0.000000126782806703965,0.000015533039444226500,0.000000000088748222559
+410,0.000007467625230833550,0.000332022008253095000,0.000000158454023481018,0.000013016133127149400,0.000000000089133525985
+411,0.000008161113111345980,0.000340701513067400000,0.000000126782806703965,0.000017953008516629400,0.000000000089546351085
+412,0.000008854600991858400,0.000349394773039890000,0.000000095105468702178,0.000022889883906109400,0.000000000089957647203
+413,0.000009548088872370820,0.000358088033012380000,0.000000063429354945338,0.000027826759295589400,0.000000000090370472302
+414,0.000010241576752883200,0.000366781292984869000,0.000000031754465433444,0.000032763634685069400,0.000000000090783297402
+415,0.000010935064633395700,0.000375474552957359000,0.000000000078296585581,0.000037699356059731800,0.000000000091196122502
+416,0.000009904066154864630,0.000389174690508941000,0.000000010794045272578,0.000031438825674521700,0.000000000091789367460
+417,0.000008872951533663950,0.000402861072902338000,0.000000021509983717542,0.000025177141274494000,0.000000000092382612418
+418,0.000007841836912463270,0.000416547455295736000,0.000000032225799738012,0.000018915456874466300,0.000000000092975857377
+419,0.000006810838433932240,0.000430247592847318000,0.000000042941615758481,0.000012654926489256100,0.000000000093570631317
+420,0.000005779723812731560,0.000443933975240715000,0.000000053657431778950,0.000006393126687746670,0.000000000094163876275
+421,0.000007570063065469620,0.000469064649243466000,0.000000060688270509164,0.000005427216285457110,0.000000000094666911304
+422,0.000009360402318207680,0.000494181568088033000,0.000000067719109239377,0.000004461305883167540,0.000000000095171475315
+423,0.000011150857713615400,0.000519312242090784000,0.000000074749947969590,0.000003495510882359730,0.000000000095674510344
+424,0.000012940616253005200,0.000544429160935351000,0.000000081782010944750,0.000002529600480070160,0.000000000096179074354
+425,0.000014731536219091500,0.000569546079779917000,0.000000088812849674963,0.000001563690077780600,0.000000000096683638365
+426,0.000015766367405721200,0.000601114167812930000,0.000000136613493627805,0.000007860802732707090,0.000000000097006253536
+427,0.000016801198592350800,0.000632668500687758000,0.000000184420258805382,0.000014157453781706600,0.000000000097330397688
+428,0.000017836029778980500,0.000664222833562586000,0.000000232227023982959,0.000020454912641078300,0.000000000097654541841
+429,0.000018870860965610200,0.000695777166437414000,0.000000280033789160535,0.000026752371500450100,0.000000000097978685993
+430,0.000019905692152239800,0.000727331499312242000,0.000000327840554338112,0.000033049830359821800,0.000000000098302830145
+431,0.000044222482897991900,0.000839436038514443000,0.000000277095601287906,0.000027098575945715100,0.000000000098584162806
+432,0.000068539273643744000,0.000951526822558459000,0.000000226350648237699,0.000021147321531608500,0.000000000098865495467
+433,0.000092856064389496100,0.001063631361760660000,0.000000175605695187493,0.000015196067117501800,0.000000000099146828127
+434,0.000117176339415338000,0.001175722145804680000,0.000000124848499687818,0.000009244581900431600,0.000000000099428160788
+435,0.000141485000174214000,0.001287826685006880000,0.000000074105995127505,0.000003293327486324920,0.000000000099707964466
+436,0.000258823939327069000,0.002230398899587350000,0.000000094102812090643,0.000002833567983012900,0.000000000100102441784
+437,0.000376151264212959000,0.003173039889958730000,0.000000114100853298728,0.000002373808479700880,0.000000000100496919102
+438,0.000493490203365814000,0.004115680880330120000,0.000000134103791486601,0.000001913933574907100,0.000000000100891396419
+439,0.000610817528251704000,0.005058321870701510000,0.000000154095711469951,0.000001454174071595080,0.000000000101284344755
+440,0.000728144853137594000,0.006000962861072900000,0.000000174087631453301,0.000000994426108431232,0.000000000101678822072
+441,0.001501608575974730000,0.012479367262723500000,0.000000161943121579766,0.000009456920626860850,0.000000648578811369509
+442,0.002275118755879720000,0.018957359009628600000,0.000000149798611706230,0.000017919542086920400,0.000001297065883827960
+443,0.003048628935784720000,0.025436038514442900000,0.000000137654101832695,0.000026381932744016400,0.000001945476507193860
+444,0.003822139115689710000,0.031914718019257200000,0.000000125509591959159,0.000034844323401112500,0.000002594070608381880
+445,0.004595649295594710000,0.038393397524071500000,0.000000113361409350783,0.000043306714058208500,0.000003242511811384800
+446,0.037262052705543500000,0.073086657496561200000,0.000000090706756607862,0.000034645832852493800,0.000002594070608381880
+447,0.069928339972822600000,0.107779917469051000000,0.000000068052103864941,0.000025983797631961600,0.000001945476507193860
+448,0.102595788666798000000,0.142475928473177000000,0.000000045397451122021,0.000017322916426246900,0.000001297065883827960
+449,0.135259753080684000000,0.177166437414030000000,0.000000022744022624047,0.000008661458213123460,0.000000648578811369509
+450,0.167930686054750000000,0.211856946354883000000,0.000000000089369881126,0.000000000081539224964,0.000000000105126676146
+451,0.266245455918050000000,0.306052269601100000000,0.000056719268391219700,0.000000000081457289912,0.000000332140727489565
+452,0.364571840048315000000,0.400247592847318000000,0.000113437312537493000,0.000000000081374200845,0.000000664174426249560
+453,0.462886609911615000000,0.494442916093535000000,0.000170157805173659000,0.000000000081291111778,0.000000996223414828066
+454,0.561201379774915000000,0.588638239339752000000,0.000226877073564879000,0.000000000081209176726,0.000001328257113588060
+455,0.659527763905181000000,0.682833562585970000000,0.000283596341956099000,0.000000000081126087659,0.000001660321391985080
+456,0.672419600236931000000,0.718211829436039000000,0.000284796102004089000,0.000000029296974173148,0.000001513707322294080
+457,0.685311436568681000000,0.753590096286107000000,0.000285995862052079000,0.000000058512013294251,0.000001367108542421600
+458,0.698203272900431000000,0.788954607977992000000,0.000287207864549539000,0.000000087728206430171,0.000001220525052367630
+459,0.711095109232181000000,0.824332874828061000000,0.000288407624597529000,0.000000116947861610543,0.000001073926272495150
+460,0.723986945563931000000,0.859711141678129000000,0.000289607384645520000,0.000000146155976642740,0.000000927342782441172
+461,0.727749968060766000000,0.862902338376891000000,0.000289582899746581000,0.000000116947861610543,0.000000752121462318242
+462,0.731512990557601000000,0.866079779917469000000,0.000289558414847643000,0.000000087728206430171,0.000000576884852376802
+463,0.735276013054436000000,0.869257221458047000000,0.000289521687499235000,0.000000058513167309068,0.000000401663532253872
+464,0.739039035551271000000,0.872448418156809000000,0.000289497202600296000,0.000000029298128187966,0.000000226442212130942
+465,0.742802058048106000000,0.875625859697387000000,0.000289472717701358000,0.000000000083198698271,0.000000051214776080608
+466,0.746681223214597000000,0.876217331499312000000,0.000289962415680129000,0.000000002692085766381,0.000002260140972126660
+467,0.750548774114122000000,0.876808803301238000000,0.000290439871209432000,0.000000005300967064417,0.000004469213950430410
+468,0.754416325013647000000,0.877386519944979000000,0.000290929569188203000,0.000000007909732960971,0.000006678134030549060
+469,0.758295490180137000000,0.877977991746905000000,0.000291407024717505000,0.000000010518614259007,0.000008887054110667710
+470,0.762163041079662000000,0.878569463548831000000,0.000291896722696277000,0.000000013128072564452,0.000011096127088971500
+471,0.763324467776216000000,0.882269601100413000000,0.000295704124481226000,0.000000010518383456044,0.000009010442946042230
+472,0.764474280205805000000,0.885969738651995000000,0.000299511526266175000,0.000000007909271355044,0.000006924758803113010
+473,0.765624092635393000000,0.889683631361761000000,0.000303318928051125000,0.000000005300159254045,0.000004839074660183780
+474,0.766785519331947000000,0.893383768913343000000,0.000307126329836074000,0.000000002691047153045,0.000002753390517254560
+475,0.767935331761536000000,0.897083906464924000000,0.000310921489171553000,0.000000000081924665913,0.000000667675794688317
+476,0.761907527206420000000,0.900866574965612000000,0.000316773380017874000,0.000000007591917280218,0.000001541060807608210
+477,0.755868108384339000000,0.904635488308116000000,0.000322637513313664000,0.000000015101437902463,0.000002414415240891090
+478,0.749828689562258000000,0.908404401650619000000,0.000328489404159984000,0.000000022611766335080,0.000003287616775988870
+479,0.743800885007143000000,0.912187070151307000000,0.000334341295006305000,0.000000030122094767697,0.000004160971209271750
+480,0.737761466185062000000,0.915955983493810000000,0.000340193185852625000,0.000000037631269185496,0.000005034325642554620
+481,0.739085492619133000000,0.917936726272352000000,0.000341686764687879000,0.000000076267685277079,0.000004737397367093250
+482,0.740397904786239000000,0.919917469050894000000,0.000343192585972601000,0.000000114902947353844,0.000004440316193446780
+483,0.741721931220311000000,0.921898211829436000000,0.000344686164807855000,0.000000153541671475062,0.000004143235019800310
+484,0.743034343387417000000,0.923878954607978000000,0.000346191986092577000,0.000000192178087566644,0.000003846306744338950
+485,0.744346755554523000000,0.925859697386520000000,0.000347697807377300000,0.000000230802963510051,0.000003549225570692480
+486,0.740432747587136000000,0.928638239339753000000,0.000360221833184383000,0.000000500046160592702,0.000009414094154702380
+487,0.736507125352783000000,0.931416781292985000000,0.000372745858991467000,0.000000769277817527177,0.000015278962738712300
+488,0.732581503118431000000,0.934195323246217000000,0.000385282127248020000,0.000001038509474461650,0.000021144290017277500
+489,0.728655880884078000000,0.936960110041266000000,0.000397806153055103000,0.000001307729591247950,0.000027009464397657600
+490,0.724741872916691000000,0.939738651994498000000,0.000410342421311656000,0.000001576961248182430,0.000032873109796186700
+491,0.732558274584500000000,0.940481430536451000000,0.000430775069475901000,0.000001995868626953170,0.000026361176092839800
+492,0.740386290519274000000,0.941237964236589000000,0.000451219960089615000,0.000002414776005723910,0.000019847713407641900
+493,0.748202692187082000000,0.941980742778542000000,0.000471652608253859000,0.000002833567983012900,0.000013334097824258800
+494,0.756030708121857000000,0.942723521320495000000,0.000492097498867573000,0.000003252475361783650,0.000006820788037246000
+495,0.763847109789666000000,0.943466299862448000000,0.000512530147031818000,0.000003671382740554390,0.000000307600568781249
+496,0.761477799328695000000,0.949862448418157000000,0.000732833025231688000,0.000003058254667989940,0.000000282127731143831
+497,0.759120103134691000000,0.956258596973865000000,0.000953148145881028000,0.000002445126595425490,0.000000256639603687904
+498,0.756750792673720000000,0.962654745529574000000,0.001173451024080900000,0.000001832113924342790,0.000000231151476231977
+499,0.754381482212750000000,0.969050894085282000000,0.001393802872078650000,0.000001218985851778340,0.000000205663348776050
+500,0.752023786018745000000,0.975447042640990000000,0.001614044538031170000,0.000000605892399658412,0.000000180175221320123
+501,0.763707738586079000000,0.980357634112792000000,0.005666907434839560000,0.000000626814688300598,0.000000162851856948458
+502,0.775403305420378000000,0.985268225584594000000,0.009719647907153260000,0.000000647748517090959,0.000000145522376649389
+503,0.787087257987712000000,0.990178817056396000000,0.013772755652951000000,0.000000668670805733146,0.000000128195954314022
+504,0.798782824822011000000,0.995089408528198000000,0.017825006427286000000,0.000000689604634523507,0.000000110869531978655
+505,0.810466777389345000000,1.000000000000000000000,0.021878481446567800000,0.000000710526923165693,0.000000093543109643289
+506,0.814369171089767000000,0.994718019257221000000,0.058396483968512400000,0.000000609723728852678,0.000000103762824335275
+507,0.818259950523223000000,0.989422283356259000000,0.094915710735403900000,0.000000508932074687839,0.000000113982539027262
+508,0.822150729956679000000,0.984140302613480000000,0.131434937502295000000,0.000000408128880374824,0.000000124200724737397
+509,0.826053123657100000000,0.978844566712517000000,0.167954164269187000000,0.000000307337226209985,0.000000134420439429384
+510,0.829943903090556000000,0.973562585969739000000,0.204473391036079000000,0.000000206534031896970,0.000000144638625139520
+511,0.820002090568054000000,0.867551581843191000000,0.315953135903432000000,0.000000226902393426732,0.000000152789627387123
+512,0.810060278045551000000,0.761554332874828000000,0.427432880770785000000,0.000000247270754956494,0.000000160940629634726
+513,0.800118465523048000000,0.655543328748281000000,0.538912625638138000000,0.000000267627576338080,0.000000169090102900479
+514,0.790176653000546000000,0.549546079779917000000,0.650392370505491000000,0.000000287995937867842,0.000000177239576166231
+515,0.780246454745009000000,0.443535075653370000000,0.761872115372844000000,0.000000308364299397604,0.000000185389049431983
+516,0.787482143064540000000,0.371059147180193000000,0.780578578161919000000,0.000000316453943268632,0.000000185480788343042
+517,0.794717831384072000000,0.298583218707015000000,0.799272798501524000000,0.000000324543587139659,0.000000185587817072611
+518,0.801965133970569000000,0.226107290233838000000,0.817967018841130000000,0.000000332633231010686,0.000000185679555983670
+519,0.809200822290101000000,0.153631361760660000000,0.836661239180735000000,0.000000340722874881713,0.000000185786584713239
+520,0.816436510609633000000,0.081159559834938100000,0.855355459520341000000,0.000000348812518752741,0.000000185878323624299
+521,0.825867295385652000000,0.067504814305364500000,0.857877404111015000000,0.000000414118217277910,0.000000266837912633977
+522,0.835286465894705000000,0.053848693259972500000,0.860399348701688000000,0.000000479435455951254,0.000000347812791462165
+523,0.844705636403758000000,0.040193947730398900000,0.862921293292362000000,0.000000544741154476423,0.000000428772380471844
+524,0.854124806912812000000,0.026539202200825300000,0.865430995433566000000,0.000000610046853001593,0.000000509731969481522
+525,0.863555591688831000000,0.012883631361760700000,0.867952940024240000000,0.000000675364091674937,0.000000590691558491201
+526,0.857330344595301000000,0.011001375515818400000,0.873449799835951000000,0.000000708484316938630,0.000000610965857835268
+527,0.851116711768737000000,0.009119257221458050000,0.878958902097132000000,0.000000741616082350497,0.000000631240157179334
+528,0.844891464675207000000,0.007237138927097660000,0.884455761908843000000,0.000000774747847762365,0.000000651514456523401
+529,0.838666217581677000000,0.005355020632737280000,0.889952621720554000000,0.000000807868073026058,0.000000671773466048958
+530,0.832452584755113000000,0.003472902338376890000,0.895461723981734000000,0.000000840999838437925,0.000000692047765393025
+531,0.840733557101543000000,0.003045667125171940000,0.895473966431204000000,0.000000861702864264777,0.000000732596364081158
+532,0.849014529447974000000,0.002618431911966990000,0.895486208880673000000,0.000000882417430239804,0.000000773160252587802
+533,0.857295501794404000000,0.002191196698762040000,0.895498451330142000000,0.000000903120456066656,0.000000813708851275935
+534,0.865576474140834000000,0.001763961485557080000,0.895510693779611000000,0.000000923835022041683,0.000000854257449964069
+535,0.873857446487265000000,0.001336726272352130000,0.895522936229081000000,0.000000944538047868535,0.000000894806048652202
+536,0.871104865216432000000,0.001223878954607980000,0.895608633375366000000,0.000000920338357144506,0.000000795666865434307
+537,0.868352283945599000000,0.001111017881705640000,0.895706572971120000000,0.000000896127126272301,0.000000696512392397902
+538,0.865599702674766000000,0.000998170563961486000,0.895792270117405000000,0.000000871927435548272,0.000000597357919361497
+539,0.862847121403933000000,0.000885323246217331000,0.895890209713160000000,0.000000847727744824244,0.000000498203446325092
+540,0.860094540133099000000,0.000772462173314993000,0.895975906859444000000,0.000000823516513952039,0.000000399064263107197
+541,0.852394281134946000000,0.000739834938101788000,0.897653122436737000000,0.000000828905763149999,0.000000411143219729982
+542,0.844694022136793000000,0.000707193947730399000,0.899330338014030000000,0.000000834295012347959,0.000000423237466171277
+543,0.836993763138639000000,0.000674566712517194000,0.901007553591323000000,0.000000839672721397743,0.000000435316422794061
+544,0.829305118407452000000,0.000641939477303989000,0.902684769168615000000,0.000000845061970595703,0.000000447410669235356
+545,0.821604859409298000000,0.000609298486932600000,0.904361984745908000000,0.000000850439679645487,0.000000459504915676651
+546,0.829003147466348000000,0.000499009628610729000,0.903884529216606000000,0.000000908175040967526,0.000000630475666253842
+547,0.836413049790362000000,0.000388720770288858000,0.903407073687303000000,0.000000965910402289565,0.000000801461706649542
+548,0.843822952114377000000,0.000278431911966988000,0.902941860607471000000,0.000001023645763611600,0.000000972447747045243
+549,0.851232854438392000000,0.000168143053645117000,0.902464405078168000000,0.000001081381124933640,0.000001143418497622430
+550,0.858642756762407000000,0.000057851444291609400,0.901986949548866000000,0.000001139116486255680,0.000001314404538018130
+551,0.860140997200962000000,0.000053188445667125200,0.908903933499015000000,0.000001036270685715600,0.000001125086005229120
+552,0.861639237639516000000,0.000048526822558459400,0.915833159898633000000,0.000000933424885175526,0.000000935767472440102
+553,0.863137478078071000000,0.000043865199449793700,0.922750143848781000000,0.000000830579084635447,0.000000746448939651086
+554,0.864635718516626000000,0.000039203576341127900,0.929667127798930000000,0.000000727733284095368,0.000000557130406862071
+555,0.866133958955181000000,0.000034540577716643700,0.936596354198548000000,0.000000624887483555289,0.000000367811874073055
+556,0.863439449019175000000,0.000032174690508940900,0.942093214010259000000,0.000000753987121194636,0.000000465651422717612
+557,0.860744939083170000000,0.000029807427785419500,0.947590073821970000000,0.000000883075218685808,0.000000563490971362170
+558,0.858050429147164000000,0.000027441540577716600,0.953086933633682000000,0.000001012174856325160,0.000000661330520006728
+559,0.855355919211159000000,0.000025074277854195300,0.958583793445393000000,0.000001141262953816330,0.000000759170068651285
+560,0.852661409275154000000,0.000022708390646492400,0.964080653257104000000,0.000001270339511159320,0.000000856994327477333
+561,0.864798318254143000000,0.000021028885832187100,0.968928663246942000000,0.000001208253513975120,0.000000787196305979848
+562,0.876935227233133000000,0.000019348005502063300,0.973764430787312000000,0.000001146225217531790,0.000000717382994663853
+563,0.889072136212123000000,0.000017668500687757900,0.978612440777151000000,0.000001084150760495760,0.000000647569683347859
+564,0.901209045191113000000,0.000015987620357634100,0.983460450766990000000,0.000001022087843607910,0.000000577756372031864
+565,0.913357568437068000000,0.000014308115543328700,0.988308460756828000000,0.000000960024926720059,0.000000507943060715869
+566,0.909861674080440000000,0.000012996148555708400,0.990646768605463000000,0.000000991679553165463,0.000000599972478326682
+567,0.906365779723813000000,0.000011684456671251700,0.992985076454097000000,0.000001023345719759040,0.000000692017185756005
+568,0.902869885367185000000,0.000010372902338376900,0.995323384302731000000,0.000001055000346204450,0.000000784046603366818
+569,0.899373991010557000000,0.000009061348005502060,0.997661692151366000000,0.000001086666512798020,0.000000876076020977631
+570,0.895878096653930000000,0.000007749793672627240,1.000000000000000000000,0.000001118332679391600,0.000000968120728406954
+571,0.894937341029721000000,0.000007148280605226960,0.995262172055385000000,0.000000991079465460336,0.000000967983120040365
+572,0.893984971138547000000,0.000006546629986244840,0.990536586560239000000,0.000000863826251529070,0.000000967845511673776
+573,0.893044215514338000000,0.000005945116918844570,0.985798758615624000000,0.000000736573037597803,0.000000967707903307188
+574,0.892103459890129000000,0.000005343603851444290,0.981060930671009000000,0.000000609319823666536,0.000000967570294940599
+575,0.891162704265920000000,0.000004742090784044020,0.976335345175863000000,0.000000482078149883445,0.000000967432686574010
+576,0.897852522038071000000,0.000004561623108665750,0.932335981783235000000,0.000000385683292173472,0.000000980597220310995
+577,0.904542339810223000000,0.000004381017881705640,0.888348860840077000000,0.000000289288434463499,0.000000993761754047979
+578,0.911232157582374000000,0.000004200412654745530,0.844361739896919000000,0.000000192882036605350,0.000001006926287784960
+579,0.917921975354525000000,0.000004019944979367260,0.800374618953760000000,0.000000096491794954647,0.000001020090821521950
+580,0.924611793126677000000,0.000003839339752407150,0.756387498010602000000,0.000000000095350474300,0.000001033255355258930
+581,0.924205293782883000000,0.000003617881705639610,0.622234736726124000000,0.000000046220601472523,0.000001064156078467350
+582,0.923810408706054000000,0.000003396423658872080,0.488094217891116000000,0.000000092346573730007,0.000001095041511857250
+583,0.923403909362261000000,0.000003174965612104540,0.353941456606638000000,0.000000138470237957855,0.000001125942235065670
+584,0.922997410018467000000,0.000002953507565337000,0.219800937771629000000,0.000000184596210215339,0.000001156827668455580
+585,0.922602524941638000000,0.000002732049518569460,0.085654297711886200000,0.000000230722182472823,0.000001187728391663990
+586,0.925575777284817000000,0.000002558596973865200,0.069852968181873800000,0.000000299513005746994,0.000001169946332737030
+587,0.928549029627995000000,0.000002385006877579090,0.054052862896808400000,0.000000368315369169340,0.000001152179563628580
+588,0.931522281971173000000,0.000002211554332874830,0.038252757611743000000,0.000000437106192443511,0.000001134412794520130
+589,0.934507148581317000000,0.000002038101788170560,0.022451428081730600000,0.000000505897015717682,0.000001116630735593170
+590,0.937480400924496000000,0.000001864649243466300,0.006650955523181080000,0.000000574699379140028,0.000001098863966484720
+591,0.936679016503873000000,0.000001877303988995870,0.005604226093556800000,0.000000459771043460198,0.000000915905998195801
+592,0.935877632083251000000,0.000001890096286107290,0.004557496663932520000,0.000000344854247928543,0.000000732948029906885
+593,0.935076247662629000000,0.000001902888583218710,0.003510889658802930000,0.000000229937452396889,0.000000549990061617969
+594,0.934263248975041000000,0.000001915543328748280,0.002464160229178650000,0.000000115018348835599,0.000000367016803510542
+595,0.933461864554419000000,0.000001928335625859700,0.001417430799554380000,0.000000000099987305837,0.000000184058835221626
+596,0.934948490726008000000,0.000001874140302613480,0.001256197740043830000,0.000000054388718351144,0.000000316116997691237
+597,0.936423502630631000000,0.000001819944979367260,0.001094903468285930000,0.000000108678191427978,0.000000448175160160849
+598,0.937898514535255000000,0.000001765749656121050,0.000933645923876449000,0.000000162969972534447,0.000000580218032811950
+599,0.939373526439879000000,0.000001711554332874830,0.000772400621916433000,0.000000217254829552011,0.000000712276195281562
+600,0.940860152611468000000,0.000001657359009628610,0.000611143077506948000,0.000000271551226717751,0.000000844334357751174
+601,0.944704474977062000000,0.000001769463548830810,0.000569078021130468000,0.000000217254829552011,0.000000704279620200908
+602,0.948548797342656000000,0.000001881430536451170,0.000527000722304519000,0.000000162969972534447,0.000000564224882650643
+603,0.952404733975215000000,0.000001993535075653370,0.000484923423478570000,0.000000108681653472431,0.000000424185434918888
+604,0.956249056340809000000,0.000002105502063273730,0.000442858367102090000,0.000000054394488425231,0.000000284130697368622
+605,0.960104992973368000000,0.000002217606602475930,0.000400781068276141000,0.000000000106479793201,0.000000144083604727612
+606,0.958409309996400000000,0.000002246079779917470,0.000389322135572885000,0.000000000106259376370,0.000000131208048560464
+607,0.956713627019431000000,0.000002274552957359010,0.000377850960420161000,0.000000000106037805525,0.000000118330963411464
+608,0.955017944042462000000,0.000002303026134800550,0.000366392027716906000,0.000000000105817388695,0.000000105453878262465
+609,0.953322261065493000000,0.000002331499312242090,0.000354933095013650000,0.000000000105596971865,0.000000092576793113466
+610,0.951626578088524000000,0.000002359972489683630,0.000343474162310395000,0.000000000105375401020,0.000000079701236946318
+611,0.952451191043077000000,0.000002177579092159560,0.000339532093581284000,0.000000007243174002354,0.000000119694815222543
+612,0.953275803997631000000,0.000001995185694635490,0.000335602267301642000,0.000000014381332656311,0.000000159686864516918
+613,0.954100416952184000000,0.000001812792297111420,0.000331672441022000000,0.000000021518914302860,0.000000199685029738697
+614,0.954925029906737000000,0.000001630398899587350,0.000327742614742358000,0.000000028656495949408,0.000000239667905141966
+615,0.955749642861291000000,0.000001448143053645120,0.000323812788462716000,0.000000035794077595956,0.000000279666070363745
+616,0.958269938792813000000,0.000001495185694635490,0.000322147815334892000,0.000000028655341934590,0.000000277112670672599
+617,0.960790234724335000000,0.000001542365887207700,0.000320495084656538000,0.000000021516606273225,0.000000274543981162944
+618,0.963310530655858000000,0.000001589408528198070,0.000318842353978184000,0.000000014377870611859,0.000000271990581471798
+619,0.965830826587380000000,0.000001636588720770290,0.000317177380850361000,0.000000007239596556420,0.000000269421891962142
+620,0.968351122518902000000,0.000001683631361760660,0.000315524650172006000,0.000000000100955524269,0.000000266868492270997
+621,0.971614731536219000000,0.000001651169188445670,0.000317397744940808000,0.000000046371777413622,0.000000213522315490115
+622,0.974889954820501000000,0.000001618707015130670,0.000319270839709609000,0.000000092642001523300,0.000000160176138709234
+623,0.978153563837818000000,0.000001586107290233840,0.000321156176927880000,0.000000138908763588525,0.000000106823846000948
+624,0.981428787122101000000,0.000001553645116918840,0.000323029271696681000,0.000000185184757772290,0.000000053477669220066
+625,0.984692396139418000000,0.000001521045392022010,0.000324902366465482000,0.000000231449211807880,0.000000000130795223461
+626,0.985563466161833000000,0.000001371719394773040,0.000327718129843419000,0.000001809956839845820,0.000000006753359937618
+627,0.986422921917283000000,0.000001222352132049520,0.000330521650771886000,0.000003388418307291070,0.000000013375839028791
+628,0.987282377672733000000,0.000001072984869326000,0.000333325171700354000,0.000004966879774736310,0.000000019997553629038
+629,0.988153447695149000000,0.000000923617606602476,0.000336140935078291000,0.000006545341242181550,0.000000026621103007507
+630,0.989012903450599000000,0.000000774250343878955,0.000338944456006758000,0.000008123802709626790,0.000000033243123404125
+631,0.985064052682315000000,0.000000772104539202201,0.000337671241261952000,0.000012974588593717500,0.000000079022369004480
+632,0.981126816180997000000,0.000000769972489683631,0.000336385784067676000,0.000017826066886698800,0.000000124803143586686
+633,0.977177965412713000000,0.000000767840440165062,0.000335100326873401000,0.000022677545179680100,0.000000170588505114444
+634,0.973229114644429000000,0.000000765694635488308,0.000333827112128595000,0.000027529023472661400,0.000000216366221732948
+635,0.969280263876145000000,0.000000763562585969739,0.000332541654934319000,0.000032379347750825100,0.000000262143938351452
+636,0.971347603396012000000,0.000000861526822558459,0.000325685883231517000,0.000037225055969718700,0.000000209745730318181
+637,0.973403328648912000000,0.000000959491059147180,0.000318817869079245000,0.000042070764188612200,0.000000157347522284910
+638,0.975470668168778000000,0.000001057455295735900,0.000311962097376443000,0.000046915318392688200,0.000000104941669342385
+639,0.977526393421679000000,0.000001155419532324620,0.000305106325673641000,0.000051761026611581700,0.000000052541932327263
+640,0.979593732941545000000,0.000001253383768913340,0.000298238311521369000,0.000056606734830475200,0.000000000142300811889
+641,0.983670340646450000000,0.000001253878954607980,0.000299058555635812000,0.000104348327832529000,0.000000000142646361788
+642,0.987758562618320000000,0.000001254374140302610,0.000299891042199723000,0.000152087612804948000,0.000000000142990382704
+643,0.991835170323225000000,0.000001254883081155430,0.000300711286314166000,0.000199829205807003000,0.000000000143335932602
+644,0.995923392295095000000,0.000001255378266850070,0.000301531530428608000,0.000247582338957232000,0.000000000143679953519
+645,1.000000000000000000000,0.000001255873452544700,0.000302351774543051000,0.000295323931959286000,0.000000000144025503417
+646,0.995435593082542000000,0.000001327977991746910,0.000241996498659452000,0.000868546172132850000,0.000000000143837438650
+647,0.990871186165085000000,0.000001400137551581840,0.000181653465225322000,0.001441710711565540000,0.000000000143649373882
+648,0.986306779247628000000,0.000001472214580467680,0.000121300637831617000,0.002015025272924500000,0.000000000143462838096
+649,0.981753986597136000000,0.000001544291609353510,0.000060950258927806300,0.002588224432801720000,0.000000000143274773328
+650,0.977189579679678000000,0.000001616368638239340,0.000000599818811747855,0.003161423592678930000,0.000000000143086708561
+651,0.974553141078501000000,0.000001564374140302610,0.000000549624768923766,0.011787107346458300000,0.000000000142479702766
+652,0.971928316744289000000,0.000001512379642365890,0.000000499430726099678,0.020413368107646500000,0.000000000141874225953
+653,0.969303492410077000000,0.000001460385144429160,0.000000449236683275590,0.029039628868834700000,0.000000000141267220158
+654,0.966678668075864000000,0.000001408390646492430,0.000000399042640451502,0.037665889630022900000,0.000000000140661743345
+655,0.964053843741652000000,0.000001356368638239340,0.000000348848597627413,0.046290996376393500000,0.000000000140054737550
+656,0.967317452758969000000,0.000001396836313617610,0.000000353023272896441,0.135296697209592000000,0.000000000139449260737
+657,0.970581061776286000000,0.000001437414030261350,0.000000357197948165469,0.224305860087244000000,0.000000000138843783924
+658,0.973844670793603000000,0.000001477854195323250,0.000000361384865883966,0.313315022964895000000,0.000000000138238307111
+659,0.977096665543954000000,0.000001518431911966990,0.000000365559541152994,0.402324185842546000000,0.000000000137632830298
+660,0.980360274561271000000,0.000001558872077028890,0.000000369746458871491,0.491333348720198000000,0.000000000137027353485
+661,0.980755159638099000000,0.000001524346629986240,0.000000325220670151684,0.591074849401066000000,0.000000000136721557115
+662,0.981138430447962000000,0.000001489683631361760,0.000000280707123881346,0.690827890230111000000,0.000000000136415760745
+663,0.981533315524791000000,0.000001455020632737280,0.000000236181335161539,0.790569390910979000000,0.000000000136109964375
+664,0.981928200601619000000,0.000001420357634112790,0.000000191667788891201,0.890322431740024000000,0.000000000135804168005
+665,0.982311471411482000000,0.000001385832187070150,0.000000147142000171394,0.990063932420892000000,0.000000000135498371634
+666,0.979175619330786000000,0.000002001100412654750,0.000000223559369758701,0.990767881459598000000,0.000000000135666559638
+667,0.976039767250090000000,0.000002616368638239340,0.000000299964496896539,0.991471830498304000000,0.000000000135836276623
+668,0.972903915169394000000,0.000003231636863823930,0.000000376369624034377,0.992164239388834000000,0.000000000136004464627
+669,0.969768063088698000000,0.000003846905089408530,0.000000452774751172215,0.992868188427539000000,0.000000000136172652631
+670,0.966643825274968000000,0.000004462310866574970,0.000000529192120759522,0.993560597318070000000,0.000000000136340840634
+671,0.966748353677658000000,0.000004565887207702890,0.000000517329187223780,0.994853093913726000000,0.000000031157592159381
+672,0.966852882080347000000,0.000004669325997248970,0.000000505454011238569,0.996145590509382000000,0.000000062177575952173
+673,0.966969024750003000000,0.000004772902338376890,0.000000493591077702827,0.997426546956863000000,0.000000093197559744966
+674,0.967073553152693000000,0.000004876478679504810,0.000000481728144167085,0.998719043552519000000,0.000000124219072519609
+675,0.967189695822348000000,0.000004980055020632740,0.000000469865210631343,1.000000000000000000000,0.000000155237527330551
+676,0.969489320681525000000,0.000006945529573590100,0.000000458418520377557,0.994253006208600000000,0.000000154962310597373
+677,0.971800559807668000000,0.000008911141678129300,0.000000446971830123771,0.988506012417199000000,0.000000154687093864196
+678,0.974100184666845000000,0.000010876616231086700,0.000000435525139869985,0.982759018625799000000,0.000000154411877131018
+679,0.976411423792987000000,0.000012842228335625900,0.000000424078449616199,0.977012024834399000000,0.000000154136660397841
+680,0.978711048652164000000,0.000014807427785419500,0.000000412631759362413,0.971276571191174000000,0.000000153876733483174
+681,0.971649574337116000000,0.000013734525447042600,0.000000435170108835376,0.970272578299905000000,0.000000203461614910631
+682,0.964576485755101000000,0.000012661348005502100,0.000000457696215858869,0.969280125556812000000,0.000000253031206519579
+683,0.957515011440053000000,0.000011588308115543300,0.000000480234565331832,0.968287672813719000000,0.000000302616087947036
+684,0.950453537125004000000,0.000010515130674002700,0.000000502772914804794,0.967283679922450000000,0.000000352200969374494
+685,0.943380448542990000000,0.000009441953232462170,0.000000525311264277757,0.966291227179357000000,0.000000401785850801951
+686,0.942277093181264000000,0.000009628885832187070,0.000000553101624573045,0.928658803979043000000,0.000000345182942678470
+687,0.941162123552572000000,0.000009815818431911970,0.000000580891984868332,0.891026380778729000000,0.000000288580034554990
+688,0.940047153923880000000,0.000010002888583218700,0.000000608670102714151,0.853393957578415000000,0.000000231961836612999
+689,0.938932184295188000000,0.000010189821182943600,0.000000636460463009439,0.815761534378102000000,0.000000175358928489519
+690,0.937817214666496000000,0.000010376753782668500,0.000000664250823304727,0.778129111177787000000,0.000000118754491384187
+691,0.937422329589668000000,0.000009553920220082530,0.000000643622295948974,0.638874143143998000000,0.000000095030808984297
+692,0.937027444512839000000,0.000008731086657496560,0.000000623006011042690,0.499630715258384000000,0.000000071307126584407
+693,0.936632559436011000000,0.000007908115543328750,0.000000602377483686936,0.360375747224594000000,0.000000047584973166369
+694,0.936237674359183000000,0.000007085281980742780,0.000000581748956331183,0.221132319338980000000,0.000000023861290766479
+695,0.935842789282354000000,0.000006262310866574970,0.000000561120428975429,0.081879659334825900000,0.000000000137539562405
+696,0.937921743069186000000,0.000006220632737276480,0.000000507106741916923,0.066376624275855700000,0.000000043218200999954
+697,0.940012311122983000000,0.000006178954607977990,0.000000453105297307885,0.050874743231703100000,0.000000086300322615171
+698,0.942091264909815000000,0.000006137276478679510,0.000000399091610249379,0.035371708172732900000,0.000000129380915248536
+699,0.944170218696647000000,0.000006095598349381020,0.000000345077923190872,0.019869827128580300000,0.000000172469152791156
+700,0.946260786750444000000,0.000006053920220082530,0.000000291064236132365,0.004366907471091930000,0.000000215540571533416
+701,0.951289764346523000000,0.000005935625859697390,0.000000266273275957054,0.003633992660465760000,0.000000221564760026298
+702,0.956307127675637000000,0.000005817331499312240,0.000000241482315781742,0.002901077849839590000,0.000000227573658700671
+703,0.961336105271716000000,0.000005698899587345250,0.000000216703598055899,0.002168163039213420000,0.000000233597847193554
+704,0.966365082867795000000,0.000005580605226960110,0.000000191912637880587,0.001435248228587260000,0.000000239606745867927
+705,0.971394060463874000000,0.000005462310866574970,0.000000167121677705275,0.000702356498257438000,0.000000245630934360809
+706,0.968664707726972000000,0.000005308115543328750,0.000000179131520634649,0.000595183142151545000,0.000000285827867223216
+707,0.965923740723104000000,0.000005154057771664370,0.000000191141363564022,0.000487998245897477000,0.000000326009510267113
+708,0.963194387986202000000,0.000004999862448418160,0.000000203151206493395,0.000380813349643409000,0.000000366206443129520
+709,0.960465035249300000000,0.000004845804676753780,0.000000215161049422769,0.000273628453389342000,0.000000406403375991927
+710,0.957735682512398000000,0.000004691746905089410,0.000000227170892352142,0.000166443557135274000,0.000000446600308854334
+711,0.952207291436801000000,0.000005470701513067400,0.000000213863349779024,0.000138366376624276000,0.000000523844471966118
+712,0.946678900361204000000,0.000006249793672627240,0.000000200568049655375,0.000110284580054008000,0.000000601088635077902
+713,0.941150509285606000000,0.000007028885832187070,0.000000187272749531726,0.000082202783483739900,0.000000678332798189685
+714,0.935622118210009000000,0.000007807840440165060,0.000000173977449408078,0.000054120986913472000,0.000000755592251119979
+715,0.930093727134412000000,0.000008586932599724900,0.000000160682149284429,0.000026039190343204000,0.000000832836414231763
+716,0.928711629365512000000,0.000008274002751031640,0.000000167293071997845,0.000023092990513998200,0.000001017155176368060
+717,0.927329531596613000000,0.000007961072902338380,0.000000173903994711262,0.000020146790684792400,0.000001201489228322860
+718,0.925947433827714000000,0.000007648143053645120,0.000000180527159874148,0.000017199436840769000,0.000001385807990459150
+719,0.924565336058815000000,0.000007335213204951860,0.000000187138082587564,0.000014253237011563200,0.000001570111462776940
+720,0.923183238289915000000,0.000007022283356258600,0.000000193749005300981,0.000011306690977912200,0.000001754506674005780
+721,0.924135608181090000000,0.000008538239339752410,0.000000202673750964093,0.000009045283541440670,0.000002449428925278660
+722,0.925087978072264000000,0.000010054057771664400,0.000000211598496627205,0.000006783991506450940,0.000003144351176551530
+723,0.926040347963438000000,0.000011570013755158200,0.000000220523242290317,0.000004522699471461210,0.000003839426326009510
+724,0.926992717854613000000,0.000013085832187070200,0.000000229435745503960,0.000002261292034989730,0.000004534348577282390
+725,0.927945087745787000000,0.000014601100412654700,0.000000238360491167073,0.000000000000000000000,0.000005229270828555270
+726,0.923461980697088000000,0.000015940852819807400,0.000000216532203763329,0.000002269947146121360,0.000005869608427747960
+727,0.918978873648390000000,0.000017280605226960100,0.000000194703916359585,0.000004540009693724470,0.000006509793128755560
+728,0.914495766599691000000,0.000018618982118294400,0.000000172875628955841,0.000006809956839845820,0.000007149977829763160
+729,0.910012659550992000000,0.000019958734525447000,0.000000151035099102628,0.000009079903985967180,0.000007790162530770760
+730,0.905541166769259000000,0.000021297111416781300,0.000000129206811698885,0.000011349966533570300,0.000008430347231778360
+731,0.901116131055388000000,0.000021566712517193900,0.000000141632897910214,0.000009132873266092740,0.000009331529134749170
+732,0.896691095341517000000,0.000021834938101788200,0.000000154058984121543,0.000006915895400096940,0.000010232558139534900
+733,0.892266059627646000000,0.000022103163686382400,0.000000166485070332872,0.000004698917534101140,0.000011133740042505700
+734,0.887852638180741000000,0.000022372764786795000,0.000000178911156544201,0.000002481824266623580,0.000012034769047291400
+735,0.883427602466870000000,0.000022640990371389300,0.000000191325000306061,0.000000264834860479609,0.000012935950950262200
+736,0.883508902335629000000,0.000026819807427785400,0.000000177760366294088,0.000000211888660650403,0.000015713346482577300
+737,0.883601816471353000000,0.000031000000000000000,0.000000164183489832646,0.000000158942460821197,0.000018491506505817800
+738,0.883694730607078000000,0.000035178817056396200,0.000000150606613371203,0.000000105991644932721,0.000021268137547207300
+739,0.883776030475836000000,0.000039357634112792300,0.000000137041979359230,0.000000053044291088698,0.000024046297570447800
+740,0.883868944611561000000,0.000043536451169188400,0.000000123465102897788,0.000000000097364230157,0.000026822928611837400
+741,0.884670329032183000000,0.000042017881705639600,0.000000189721239425584,0.000000000096626814688,0.000036444811400088700
+742,0.885460099185840000000,0.000040499312242090800,0.000000255989618402850,0.000000000095890553235,0.000046066694188340000
+743,0.886249869339497000000,0.000038979367262723500,0.000000322245754930647,0.000000000095154291781,0.000055688576976591300
+744,0.887051253760119000000,0.000037460797799174700,0.000000388514133907912,0.000000000094416876313,0.000065308930782991600
+745,0.887841023913776000000,0.000035942228335625900,0.000000454770270435709,0.000000000093680614859,0.000074930813571242900
+746,0.885622698923357000000,0.000034174690508940900,0.000000404845561499945,0.000000000092990513998,0.000092919285048086500
+747,0.883404373932939000000,0.000032407152682255800,0.000000354920852564181,0.000000000092300413137,0.000110907756524930000
+748,0.881186048942521000000,0.000030639614855570800,0.000000304983901178948,0.000000000091609158262,0.000128894699019923000
+749,0.878967723952103000000,0.000028872077028885800,0.000000255059192243184,0.000000000090919057401,0.000146883170496766000
+750,0.876749398961684000000,0.000027104539202200800,0.000000205134483307420,0.000000000090228956540,0.000164870112991759000
+751,0.873056062066643000000,0.000030147180192572200,0.000000202759448110378,0.000000000089711957902,0.000202009082152195000
+752,0.869351110904635000000,0.000033191196698762000,0.000000200396655362805,0.000000000089193805248,0.000239132761494121000
+753,0.865657774009593000000,0.000036233837689133400,0.000000198033862615232,0.000000000088676806610,0.000276271730654557000
+754,0.861952822847586000000,0.000039276478679504800,0.000000195658827418190,0.000000000088159807972,0.000313410699814993000
+755,0.858259485952544000000,0.000042320495185694600,0.000000193296034670617,0.000000000087641655319,0.000350534379156919000
+756,0.854391935053019000000,0.000039957359009628600,0.000000297503764553212,0.000000000087358921689,0.000468954023515741000
+757,0.850524384153494000000,0.000037595598349381000,0.000000401723736885276,0.000000000087076188058,0.000587373667874562000
+758,0.846656833253969000000,0.000035233837689133400,0.000000505931466767871,0.000000000086792300413,0.000705778022414874000
+759,0.842800896621410000000,0.000032870701513067400,0.000000610139196650466,0.000000000086509566783,0.000824197666773695000
+760,0.838933345721885000000,0.000030508940852819800,0.000000714359168982530,0.000000000086226833153,0.000942617311132517000
+761,0.837353805414571000000,0.000028006877579092200,0.000000840640035258255,0.000000000086177210515,0.001409216702597740000
+762,0.835774265107258000000,0.000025504814305364500,0.000000966933143983448,0.000000000086128741893,0.001875754934788920000
+763,0.834206339066910000000,0.000023002751031636900,0.000001093226252708640,0.000000000086079119256,0.002342400195709680000
+764,0.832626798759596000000,0.000020500687757909200,0.000001219519361433840,0.000000000086029496619,0.002809045456630430000
+765,0.831047258452283000000,0.000017998624484181600,0.000001345812470159030,0.000000000085981027996,0.003275690717551180000
+766,0.833927596659737000000,0.000019459422283356300,0.000002052691502515820,0.000000000086067579108,0.005178967325657840000
+767,0.836807934867191000000,0.000020920220082530900,0.000002759692959367310,0.000000000086152976204,0.007082396831949610000
+768,0.839688273074645000000,0.000022379642365887200,0.000003466571991724100,0.000000000086239527316,0.008985826338241370000
+769,0.842556997015133000000,0.000023840440165061900,0.000004173451024080900,0.000000000086326078427,0.010889102946348000000
+770,0.845437335222587000000,0.000025301237964236600,0.000004880330056437690,0.000000000086412629538,0.012792532452639800000
+771,0.848120230891627000000,0.000025275103163686400,0.000004122522434288650,0.000000000086521106931,0.026053850740791700000
+772,0.850791512293702000000,0.000025250343878954600,0.000003364714812139610,0.000000000086629584324,0.039316239316239300000
+773,0.853462793695776000000,0.000025224209078404400,0.000002606907189990570,0.000000000086738061717,0.052577098909835900000
+774,0.856145689364816000000,0.000025199449793672600,0.000001848977143346840,0.000000000086847693124,0.065839487485283600000
+775,0.858816970766890000000,0.000025173314993122400,0.000001091181763647270,0.000000000086956170517,0.079100347078880200000
+776,0.854450006387847000000,0.000022977991746905100,0.000001074532032369040,0.000000000086975788769,0.135149763772304000000
+777,0.850071427741838000000,0.000020781292984869300,0.000001057882301090800,0.000000000086995407021,0.191199180465728000000
+778,0.845704463362795000000,0.000018585969738652000,0.000001041232569812570,0.000000000087015025273,0.247251655122854000000
+779,0.841325884716786000000,0.000016390646492434700,0.000001024582838534330,0.000000000087034643525,0.303304129779980000000
+780,0.836958920337743000000,0.000014193947730398900,0.000001007933107256100,0.000000000087054261777,0.359341314618595000000
+781,0.828712790792209000000,0.000014972489683631400,0.000000926447363588507,0.000000000086830382902,0.464412947418314000000
+782,0.820466661246675000000,0.000015751031636863800,0.000000844961619920914,0.000000000086605350013,0.569484580218033000000
+783,0.812220531701142000000,0.000016529573590096300,0.000000763463633803852,0.000000000086381471138,0.674540923199242000000
+784,0.803974402155608000000,0.000017308115543328700,0.000000681977890136259,0.000000000086157592263,0.779612555998960000000
+785,0.795728272610074000000,0.000018086657496561200,0.000000600492146468665,0.000000000085933713389,0.884684188798679000000
+786,0.790966423154203000000,0.000021513067400275100,0.000000690535362315292,0.000000000085517114040,0.907741235111539000000
+787,0.786204573698331000000,0.000024939477303989000,0.000000780590820611388,0.000000000085100514691,0.930813571242909000000
+788,0.781442724242459000000,0.000028367262723521300,0.000000870634036458015,0.000000000084685069356,0.953870617555770000000
+789,0.776680874786588000000,0.000031793672627235200,0.000000960677252304641,0.000000000084268470007,0.976942953687140000000
+790,0.771919025330716000000,0.000035220082530949100,0.000001050732710600740,0.000000000083851870658,1.000000000000000000000
+791,0.779549598727076000000,0.000033734525447042600,0.000001069414688490870,0.000000059851824497427,0.994617983884531000000
+792,0.787168557856471000000,0.000032248968363136200,0.000001088108908830480,0.000000119625175987260,0.989235967769063000000
+793,0.794799131252831000000,0.000030763411279229700,0.000001106803129170080,0.000000179391603388188,0.983853951653594000000
+794,0.802418090382225000000,0.000029279229711141700,0.000001125485107060220,0.000000239158030789115,0.978471935538125000000
+795,0.810048663778586000000,0.000027793672627235200,0.000001144179327399830,0.000000298924458190043,0.973089919422657000000
+796,0.743975099011626000000,0.000026690508940852800,0.000001262196540283780,0.000000297008793592910,0.968655872054799000000
+797,0.677889919977701000000,0.000025588720770288900,0.000001380091328673040,0.000000295104669143952,0.964237114505451000000
+798,0.611816355210741000000,0.000024486932599724900,0.000001498108541556990,0.000000293189004546818,0.959803067137593000000
+799,0.545742790443781000000,0.000023385144429160900,0.000001616003329946260,0.000000291273339949685,0.955369019769735000000
+800,0.479669225676821000000,0.000022283356258597000,0.000001734020542830210,0.000000289357675352551,0.950950262220387000000
+801,0.398508728121625000000,0.000025705639614855600,0.000001417185950564990,0.000000231506912548757,0.943458251150559000000
+802,0.317336616299462000000,0.000029126547455295700,0.000001100363600749240,0.000000173644609596787,0.935966240080730000000
+803,0.236176118744265000000,0.000032548830811554300,0.000000783553493382956,0.000000115793846792993,0.928474229010902000000
+804,0.155004006922103000000,0.000035971114167812900,0.000000466743386016674,0.000000057931543841023,0.920997507759583000000
+805,0.073843509366906300000,0.000039392022008253100,0.000000149933278650392,0.000000000072979897062,0.913505496689754000000
+806,0.062039929849827500000,0.000045977991746905100,0.000000172104354639276,0.000000000072251713712,0.907022613641576000000
+807,0.050236350332748700000,0.000052562585969738700,0.000000194275430628160,0.000000000071524684377,0.900539730593398000000
+808,0.038431609388973400000,0.000059148555708390600,0.000000216446506617044,0.000000000070796501027,0.894041557726710000000
+809,0.026628029871894600000,0.000065734525447042600,0.000000238629825055397,0.000000000070069471692,0.887558674678531000000
+810,0.014824450354815900000,0.000072319119669876200,0.000000260800901044281,0.000000000069341288342,0.881075791630353000000
+811,0.012990557600957000000,0.000066016506189821200,0.000000313651555403205,0.000000000068752740785,0.878063697383912000000
+812,0.011157477845785800000,0.000059713892709766200,0.000000366502209762129,0.000000000068164193228,0.875051603137471000000
+813,0.009324165805275200000,0.000053411279229711100,0.000000419340621671584,0.000000000067574491656,0.872039508891029000000
+814,0.007490737622094980000,0.000047108665749656100,0.000000472191276030508,0.000000000066985944100,0.869012124826078000000
+815,0.005657425581584420000,0.000040806052269601100,0.000000525041930389432,0.000000000066397396543,0.866000030579637000000
+816,0.004885425256384940000,0.000036762035763411300,0.000000488167672587931,0.000000000065995799386,0.862865617785117000000
+817,0.004113424931185470000,0.000032718019257221500,0.000000451293414786431,0.000000000065595356244,0.859746494809107000000
+818,0.003341424605985990000,0.000028674002751031600,0.000000414419156984930,0.000000000065194913103,0.856612082014586000000
+819,0.002569540423456170000,0.000024629986244841800,0.000000377544899183429,0.000000000064794469961,0.853477669220066000000
+820,0.001797540098256700000,0.000020585969738652000,0.000000340658398932458,0.000000000064394026819,0.850343256425546000000
+821,0.001593709713011460000,0.000020741403026134800,0.000000775865235116242,0.000000083481431901586,0.845633992324511000000
+822,0.001389995470435880000,0.000020898211829436000,0.000001211072071300030,0.000000166893622914118,0.840909438404966000000
+823,0.001186165085190650000,0.000021053645116918800,0.000001646242180135400,0.000000250317354074826,0.836184884485421000000
+824,0.000982404385547206000,0.000021209078404401700,0.000002081461258768650,0.000000333729545087359,0.831475620384386000000
+825,0.000778620457369833000,0.000021364511691884500,0.000002516680337401910,0.000000417141736099892,0.826751066464841000000
+826,0.000710537624417835000,0.000023683631361760700,0.000002148794730849750,0.000000361252798485933,0.822255859822944000000
+827,0.000642443177198871000,0.000026002751031636900,0.000001781031548792280,0.000000305352320723798,0.817745363362537000000
+828,0.000574348729979907000,0.000028320495185694600,0.000001413268366734820,0.000000249463383109839,0.813234866902130000000
+829,0.000506265897027909000,0.000030639614855570800,0.000001045395002632130,0.000000193562905347705,0.808739660260233000000
+830,0.000438171449808945000,0.000032957359009628600,0.000000677570608327314,0.000000137662427585570,0.804229163799826000000
+831,0.000425546741617403000,0.000032627235213204900,0.000000614277144571086,0.000000110144944261084,0.801278228827424000000
+832,0.000412910419158895000,0.000032295735900962900,0.000000550983680814857,0.000000082623998892146,0.798327293855022000000
+833,0.000400285710967352000,0.000031964236588720800,0.000000487702459508098,0.000000055104207538025,0.795376358882620000000
+834,0.000387661002775810000,0.000031632737276478700,0.000000424408995751870,0.000000027583262169086,0.792425423910218000000
+835,0.000375036294584267000,0.000031302613480055000,0.000000361115531995642,0.000000000063049599557,0.789489778756326000000
+836,0.000368114191472805000,0.000032176066024759300,0.000000543381119694428,0.000000056961017379463,0.786966958702200000000
+837,0.000361180474094377000,0.000033049518569463500,0.000000725646707393215,0.000000113858563943961,0.784459428466584000000
+838,0.000354258370982915000,0.000033922971114167800,0.000000907912295092002,0.000000170759572552912,0.781951898230968000000
+839,0.000347336267871453000,0.000034796423658872100,0.000001090177882790790,0.000000227652503058139,0.779444367995352000000
+840,0.000340414164759991000,0.000035669876203576300,0.000001272480197837980,0.000000284545433563367,0.776921547941226000000
+841,0.000337510598018606000,0.000039581843191196700,0.000001090165640341320,0.000000297770443372493,0.773710686054156000000
+842,0.000334618645544186000,0.000043492434662998600,0.000000907900052642533,0.000000310995453181619,0.770499824167087000000
+843,0.000331715078802801000,0.000047404401650619000,0.000000725622222494277,0.000000324220462990745,0.767273672461508000000
+844,0.000328811512061416000,0.000051314993122420900,0.000000543344392346021,0.000000337445472799871,0.764062810574438000000
+845,0.000325919559586997000,0.000055226960110041300,0.000000361078804647234,0.000000350670482608997,0.760836658868859000000
+846,0.000333898560992323000,0.000051740027510316400,0.000001551118347759020,0.000000337306991021765,0.757549347889241000000
+847,0.000341877562397649000,0.000048253094910591500,0.000002741084436173990,0.000000323931959286357,0.754262036909622000000
+848,0.000349868178069941000,0.000044766162310866600,0.000003931050524588960,0.000000310568467699125,0.750974725930003000000
+849,0.000357847179475267000,0.000041279229711141700,0.000005121016613003930,0.000000297193435963718,0.747687414950384000000
+850,0.000365837795147559000,0.000037792297111416800,0.000006310982701418900,0.000000283829944376486,0.744400103970766000000
+851,0.000352191031463049000,0.000034243466299862400,0.000005264375696289310,0.000000281868119186650,0.740271852973105000000
+852,0.000338555882045505000,0.000030696011004126600,0.000004217768691159730,0.000000279894753848639,0.736128312156935000000
+853,0.000324909118360995000,0.000027147180192572200,0.000003171284110524830,0.000000277932928658804,0.732000061159274000000
+854,0.000311262354676485000,0.000023598349381017900,0.000002124677105395250,0.000000275971103468969,0.727856520343104000000
+855,0.000297627205258940000,0.000020050894085282000,0.000001078045615366720,0.000000274009278279133,0.723712979526933000000
+856,0.000285896795623744000,0.000018163686382393400,0.000000911254483797118,0.000000294943107069495,0.718667339418681000000
+857,0.000274166385988548000,0.000016276478679504800,0.000000744475594676983,0.000000315888476008032,0.713606409491919000000
+858,0.000262447590620318000,0.000014390646492434700,0.000000577684463107379,0.000000336833844946569,0.708560769383667000000
+859,0.000250717180985122000,0.000012503163686382400,0.000000410893331537774,0.000000357779213885106,0.703499839456906000000
+860,0.000238986771349926000,0.000010616368638239300,0.000000244114442417639,0.000000378724582823643,0.698454199348654000000
+861,0.000241007653801930000,0.000010185419532324600,0.000000330093165040461,0.000000400108477392850,0.693102762870205000000
+862,0.000243016921986969000,0.000009754332874828060,0.000000416084130112753,0.000000421492371962056,0.687766616210266000000
+863,0.000245037804438973000,0.000009323383768913340,0.000000502075095185045,0.000000442876266531262,0.682415179731817000000
+864,0.000247058686890977000,0.000008892297111416780,0.000000588053817807867,0.000000464260161100469,0.677063743253368000000
+865,0.000249079569342981000,0.000008461348005502060,0.000000674044782880159,0.000000485644055669675,0.671727596593428000000
+866,0.000241460610213586000,0.000008989270976616230,0.000000539243171773809,0.000000460082627460937,0.666177392474351000000
+867,0.000233853265351157000,0.000009517331499312240,0.000000404453803116928,0.000000434509659104023,0.660627188355274000000
+868,0.000226245920488728000,0.000010045254470426400,0.000000269652192010577,0.000000408948230895285,0.655092274054707000000
+869,0.000218626961359334000,0.000010573314993122400,0.000000134850580904227,0.000000383386802686547,0.649542069935630000000
+870,0.000211019616496905000,0.000011101237964236600,0.000000000054527869936,0.000000357813834329633,0.643991865816553000000
+871,0.000207546950674208000,0.000013641678129298500,0.000000000053768838069,0.000000373462275255614,0.636408115835665000000
+872,0.000204085899118477000,0.000016181568088033000,0.000000000053008581957,0.000000389110716181596,0.628824365854777000000
+873,0.000200613233295781000,0.000018722145804676800,0.000000000052248325845,0.000000404770697255753,0.621240615873890000000
+874,0.000197140567473084000,0.000021262723521320500,0.000000000051489293978,0.000000420419138181734,0.613656865893002000000
+875,0.000193667901650387000,0.000023803301237964200,0.000000000050729037866,0.000000436067579107716,0.606073115912114000000
+876,0.000203656171240752000,0.000025220082530949100,0.000002604213851107330,0.000002626999330671410,0.598718713208874000000
+877,0.000213632826564151000,0.000026636863823934000,0.000005208305277719970,0.000004818011863272320,0.591364310505634000000
+878,0.000223621096154516000,0.000028053645116918800,0.000007812396704332600,0.000007008908994391490,0.584009907802394000000
+879,0.000233609365744881000,0.000029470426409903700,0.000010416610555439900,0.000009199921526992410,0.576655505099154000000
+880,0.000243586021068280000,0.000030887207702888600,0.000013021069255536600,0.000011390818658111600,0.569301102395915000000
+881,0.000239741698702686000,0.000028396148555708400,0.000012784789980779400,0.000011060770420292200,0.565019953213155000000
+882,0.000235885762070127000,0.000025903713892709800,0.000012549734950969000,0.000010730722182472800,0.560754093848906000000
+883,0.000232041439704533000,0.000023412654745529600,0.000012313455676211700,0.000010400558543171700,0.556488234484657000000
+884,0.000228197117338939000,0.000020920220082530900,0.000012078278221906600,0.000010070510305352300,0.552207085301897000000
+885,0.000224341180706380000,0.000018429160935350800,0.000011842611069622800,0.000009740462067532950,0.547941225937648000000
+886,0.000217186792255607000,0.000017920220082530900,0.000010971928063366900,0.000009050707411083160,0.543675366573399000000
+887,0.000210044018071799000,0.000017411279229711100,0.000010101245057111000,0.000008360952754633370,0.539424797027659000000
+888,0.000202889629621026000,0.000016903713892709800,0.000009230562050855140,0.000007671313499665340,0.535174227481920000000
+889,0.000195735241170254000,0.000016394773039890000,0.000008359879044599240,0.000006981558843215550,0.530908368117670000000
+890,0.000188580852719481000,0.000015885832187070200,0.000007489196038343350,0.000006291919588247510,0.526657798571931000000
+891,0.000191542490795693000,0.000015341127922971100,0.000007468506298740250,0.000006676668128418770,0.519823249698026000000
+892,0.000194504128871906000,0.000014795048143053600,0.000007447816559137150,0.000007061532070071780,0.512988700824121000000
+893,0.000197465766948119000,0.000014250343878954600,0.000007427249244028750,0.000007446280610243040,0.506154151950216000000
+894,0.000200427405024332000,0.000013704676753782700,0.000007406559504425650,0.000007831144551896050,0.499319603076312000000
+895,0.000203389043100545000,0.000013159422283356300,0.000007385992189317240,0.000008215893092067300,0.492485054202407000000
+896,0.000206559737982137000,0.000013014442916093500,0.000007268709523401440,0.000007769404759157110,0.487577022460743000000
+897,0.000209730432863730000,0.000012869463548830800,0.000007151549281980340,0.000007322916426246910,0.482668990719080000000
+898,0.000212912742012288000,0.000012724621733149900,0.000007034389040559240,0.000006876428093336720,0.477760958977417000000
+899,0.000216083436893880000,0.000012579642365887200,0.000006917228799138130,0.000006430055161908280,0.472852927235754000000
+900,0.000219254131775473000,0.000012434662998624500,0.000006800068557717030,0.000005983566828998080,0.467944895494090000000
+901,0.000212808213609598000,0.000012552132049518600,0.000006974401038159720,0.000006541994599210650,0.465085699432748000000
+902,0.000206350681176758000,0.000012669601100412700,0.000007148733518602400,0.000007100422369423220,0.462226503371405000000
+903,0.000199893148743917000,0.000012787070151306700,0.000007323065999045090,0.000007658965541117550,0.459367307310062000000
+904,0.000193435616311077000,0.000012904539202200800,0.000007497398479487780,0.000008217393311330120,0.456508111248719000000
+905,0.000186978083878236000,0.000013022008253094900,0.000007671730959930460,0.000008775821081542690,0.453648915187377000000
+906,0.000189324165805275000,0.000013035213204951900,0.000007368240637586770,0.000008689154568744660,0.450835588581564000000
+907,0.000191681861999280000,0.000013048418156808800,0.000007064750315243070,0.000008602488055946640,0.448022261975750000000
+908,0.000194027943926319000,0.000013061760660247600,0.000006761259992899380,0.000008515706141666860,0.445208935369937000000
+909,0.000196374025853358000,0.000013074965612104500,0.000006457769670555690,0.000008429039628868830,0.442395608764124000000
+910,0.000198731722047363000,0.000013088170563961500,0.000006154279348211990,0.000008342373116070810,0.439582282158311000000
+911,0.000203052229358544000,0.000013140577716643700,0.000006172030899942460,0.000008186004108292750,0.435759827530847000000
+912,0.000207372736669725000,0.000013192984869326000,0.000006189782451672930,0.000008029750501996450,0.431937372903384000000
+913,0.000211704858247872000,0.000013245254470426400,0.000006207656427898090,0.000007873496895700140,0.428130208094430000000
+914,0.000216025365559053000,0.000013297661623108700,0.000006225407979628560,0.000007717243289403840,0.424307753466966000000
+915,0.000220357487137199000,0.000013350068775790900,0.000006243159531359030,0.000007560989683107530,0.420485298839503000000
+916,0.000218534047223609000,0.000012963273727647900,0.000006114246538447410,0.000007170932674775540,0.403666498478663000000
+917,0.000216710607310020000,0.000012576341127923000,0.000005985333545535790,0.000006780991067925310,0.386832408299313000000
+918,0.000214898781663395000,0.000012189546079779900,0.000005856420552624170,0.000006391049461075080,0.370013607938474000000
+919,0.000213075341749805000,0.000011802751031636900,0.000005727507559712550,0.000006001107854224850,0.353194807577634000000
+920,0.000211263516103181000,0.000011415818431912000,0.000005598594566800930,0.000005611050845892860,0.336360717398284000000
+921,0.000210450517415593000,0.000011033700137551600,0.000005596268501401760,0.000005208761280494840,0.295674510343562000000
+922,0.000209637518728005000,0.000010651581843191200,0.000005593942436002600,0.000004806356313615070,0.254988303288840000000
+923,0.000208824520040418000,0.000010269463548830800,0.000005591738795098120,0.000004404066748217050,0.214302096234118000000
+924,0.000208011521352830000,0.000009887207702888580,0.000005589412729698960,0.000004001777182819030,0.173615889179395000000
+925,0.000207210136932208000,0.000009505089408528200,0.000005587086664299790,0.000003599372215939250,0.132926624160971000000
+926,0.000202192773603094000,0.000009245116918844570,0.000005377740778374940,0.000003480970295658600,0.111132516857025000000
+927,0.000197175410273981000,0.000008985281980742780,0.000005168394892450080,0.000003362452973896180,0.089338409553078600000
+928,0.000192169661211833000,0.000008725309491059150,0.000004959049006525230,0.000003243935652133770,0.067544302249132300000
+929,0.000187152297882719000,0.000008465474552957360,0.000004749703120600370,0.000003125533731853120,0.045750194945186000000
+930,0.000182146548820571000,0.000008205502063273730,0.000004540357234675510,0.000003007016410090710,0.023956087641239700000
+931,0.000181089650526707000,0.000007917469050894080,0.000004466902537859780,0.000002780252498442080,0.019921104536489200000
+932,0.000180021137965877000,0.000007629298486932600,0.000004393447841044040,0.000002553373185311700,0.015884592449887600000
+933,0.000178964239672013000,0.000007341265474552960,0.000004319870719733600,0.000002326493872181320,0.011849609345137100000
+934,0.000177907341378149000,0.000007053232462173320,0.000004246416022917870,0.000002099614559050940,0.007814167545831230000
+935,0.000176850443084285000,0.000006765061898211830,0.000004172838901607430,0.000001872735245920560,0.003778725746525390000
+936,0.000173215177524071000,0.000006780880330123800,0.000004030581638774290,0.000001871350428139500,0.003214531443511770000
+937,0.000169591526230822000,0.000006796698762035760,0.000003888201951446450,0.000001869965610358440,0.002650337140498140000
+938,0.000165956260670608000,0.000006812517193947730,0.000003745944688613300,0.000001868580792577380,0.002086142837484520000
+939,0.000162332609377359000,0.000006828335625859700,0.000003603565001285460,0.000001867195974796320,0.001522009693744940000
+940,0.000158697343817145000,0.000006844154057771660,0.000003461307738452310,0.000001865811157015260,0.000957830680549822000
+941,0.000159440656902940000,0.000006722833562585970,0.000003302033470856850,0.000001760218801209410,0.000838417197987860000
+942,0.000160172355721769000,0.000006601375515818430,0.000003142759203261390,0.000001654626445403560,0.000719003715425898000
+943,0.000160915668807563000,0.000006480055020632740,0.000002983607360160620,0.000001549149491079470,0.000599590232863936000
+944,0.000161647367626392000,0.000006358596973865200,0.000002824333092565160,0.000001443557135273620,0.000480176750301974000
+945,0.000162390680712187000,0.000006237276478679510,0.000002665058824969700,0.000001337964779467770,0.000360747977921502000
+946,0.000158174701803696000,0.000005931636863823930,0.000002654530318426110,0.000001368430770651100,0.000376664678990260000
+947,0.000153970337162170000,0.000005625997248968360,0.000002643879387387830,0.000001398896761834420,0.000392596669877529000
+948,0.000149754358253679000,0.000005320357634112790,0.000002633350880844240,0.000001429362753017750,0.000408513370946287000
+949,0.000145549993612153000,0.000005014855570839060,0.000002622822374300650,0.000001459944145682830,0.000424430072015045000
+950,0.000141345628970628000,0.000004709215955983490,0.000002612293867757060,0.000001490410136866160,0.000440346773083804000
+951,0.000138023948618483000,0.000004833425034387900,0.000002493786956894340,0.000001469176264223230,0.000375089827683745000
+952,0.000134702268266338000,0.000004957634112792300,0.000002375402470526300,0.000001447826990098550,0.000309817592465177000
+953,0.000131380587914194000,0.000005081843191196700,0.000002257017984158270,0.000001426593117455630,0.000244560647065119000
+954,0.000128070521829015000,0.000005206052269601100,0.000002138633497790240,0.000001405359244812700,0.000179303701665061000
+955,0.000124748841476870000,0.000005330261348005500,0.000002020126586927510,0.000001384125372169780,0.000114039111355748000
+956,0.000126734881127978000,0.000005718294360385140,0.000001966627082746720,0.000001302536524568980,0.000098842560738804000
+957,0.000128732535046051000,0.000006106464924346630,0.000001913127578565920,0.000001220947676968170,0.000083647539103710800
+958,0.000130718574697158000,0.000006494497936726270,0.000001859628074385120,0.000001139324208922840,0.000068450988486766700
+959,0.000132704614348265000,0.000006882530949105910,0.000001806006145709630,0.000001057712281025690,0.000053255966851673500
+960,0.000134702268266338000,0.000007270563961485560,0.000001752506641528840,0.000000976100353128534,0.000038060945216580300
+961,0.000129801047606880000,0.000007735488308115540,0.000001748589057698660,0.000000935698294366100,0.000033470941699922000
+962,0.000124888212680457000,0.000008200412654745530,0.000001744671473868490,0.000000895296235603665,0.000028880938183263800
+963,0.000119986992020999000,0.000008665199449793670,0.000001740753890038320,0.000000854894176841231,0.000024290934666605500
+964,0.000115083448508147000,0.000009130123796423660,0.000001736713881713450,0.000000814503658226972,0.000019700931149947200
+965,0.000110178743568600000,0.000009595048143053640,0.000001732796297883280,0.000000774101599464537,0.000015111233429659200
+966,0.000106418043925158000,0.000009896836313617610,0.000001743936926900330,0.000000835264384794701,0.000013568796538385100
+967,0.000102657344281716000,0.000010198762035763400,0.000001755077555917390,0.000000896415629976689,0.000012026359647111000
+968,0.000098896644638273700,0.000010500687757909200,0.000001766340609429130,0.000000957578415306853,0.000010484075654022000
+969,0.000095135944994831600,0.000010802475928473200,0.000001777481238446190,0.000001018729660488840,0.000008941638762747890
+970,0.000091376406778086200,0.000011104401650619000,0.000001788621867463240,0.000001079892445819000,0.000007399354769658880
+971,0.000092371749457033000,0.000010952682255845900,0.000001750303000624370,0.000001047741593002050,0.000006675534761402380
+972,0.000093368253562676400,0.000010800962861072900,0.000001712106558280180,0.000001015579200036930,0.000005951714753145880
+973,0.000094364757668319700,0.000010649243466299900,0.000001673787691441300,0.000000983428347219978,0.000005227894744889380
+974,0.000095361261773963100,0.000010497524071526800,0.000001635468824602430,0.000000951265954254853,0.000004504074736632880
+975,0.000096356604452909900,0.000010345804676753800,0.000001597272382258240,0.000000919115101437903,0.000003780254728376370
+976,0.000093159196757296600,0.000009735900962861070,0.000001511330386983830,0.000000888175964179380,0.000003442808433863890
+977,0.000089960627634986800,0.000009126134800550210,0.000001425388391709410,0.000000857236826920858,0.000003105209241166310
+978,0.000086762058512677000,0.000008516231086657500,0.000001339446396435000,0.000000826297689662335,0.000002767762946653820
+979,0.000083563489390367100,0.000007906327372764790,0.000001253504401160580,0.000000795358552403813,0.000002430316652141340
+980,0.000080364920268057300,0.000007296561210453920,0.000001167623618133520,0.000000764419415145290,0.000002092870357628850
+981,0.000077748225920721000,0.000006765612104539200,0.000001165787250713120,0.000000718766588963002,0.000001939819274345210
+982,0.000075132693000081300,0.000006234525447042640,0.000001163963125742200,0.000000673113762780714,0.000001786768191061570
+983,0.000072515998652745000,0.000005703576341127920,0.000001162126758321810,0.000000627472476746601,0.000001633870005963030
+984,0.000069899304305408800,0.000005172627235213210,0.000001160290390901410,0.000000581819650564313,0.000001480788343042370
+985,0.000067283771384769000,0.000004641678129298490,0.000001158454023481020,0.000000536166824382025,0.000001327767839395750
+986,0.000070208243806692100,0.000004243603851444290,0.000001146407453203240,0.000000531873889260738,0.000001234897481766890
+987,0.000073133877655311800,0.000003845392022008250,0.000001134373125374930,0.000000527592494287627,0.000001142011834319530
+988,0.000076058350077234900,0.000003447317744154060,0.000001122326555097140,0.000000523299559166340,0.000001049141476690670
+989,0.000078983983925854500,0.000003049243466299860,0.000001110279984819360,0.000000519006624045053,0.000000956271119061817
+990,0.000081908456347777600,0.000002651169188445670,0.000001098233414541580,0.000000514713688923766,0.000000863385471614452
+991,0.000077402120765147900,0.000002633149931224210,0.000001099065901105490,0.000000545329702033374,0.000000822928611837378
+992,0.000072895785182518200,0.000002615130674002750,0.000001099898387669410,0.000000575945715142982,0.000000782456462241793
+993,0.000068389449599888500,0.000002597111416781290,0.000001100730874233320,0.000000606561728252591,0.000000741984312646209
+994,0.000063883114017258800,0.000002579092159559840,0.000001101575603246700,0.000000637177741362199,0.000000701527452869134
+995,0.000059376778434629100,0.000002561072902338380,0.000001102408089810610,0.000000667793754471807,0.000000661055303273550
+996,0.000059530086758574200,0.000002523246217331500,0.000001104036335590030,0.000000602753479354675,0.000000629894653150467
+997,0.000059683395082519400,0.000002485557083906460,0.000001105664581369440,0.000000537701664089367,0.000000598734003027384
+998,0.000059836703406464500,0.000002447730398899590,0.000001107292827148860,0.000000472661388972234,0.000000567588642722811
+999,0.000059991173157106200,0.000002410041265474550,0.000001108921072928270,0.000000407609573706926,0.000000536427992599728
+1000,0.000060144481481051300,0.000002372214580467680,0.000001110561561157160,0.000000342557758441618,0.000000505267342476645
diff --git a/imagery/i.biomass/i.biomass.html b/imagery/i.biomass/i.biomass.html
index 3c4b9b3..eec3313 100644
--- a/imagery/i.biomass/i.biomass.html
+++ b/imagery/i.biomass/i.biomass.html
@@ -46,4 +46,4 @@ sensing in transition economies. Water International. 30(4):513-521.
 
 Yann Chemin, Bec de Mortagne, France
 
-<p><i>Last changed: $Date: 2016-05-18 09:11:09 +0200 (Wed, 18 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-18 09:07:29 +0200 (Wed, 18 May 2016) $</i>
diff --git a/imagery/i.biomass/solar_day.c b/imagery/i.biomass/solar_day.c
index e495125..b341f2a 100644
--- a/imagery/i.biomass/solar_day.c
+++ b/imagery/i.biomass/solar_day.c
@@ -1,12 +1,14 @@
-#include<stdio.h>
-#include<math.h>
-#include<stdlib.h>
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <grass/gis.h>
 
     /*
      * Average Solar Diurnal Radiation after Bastiaanssen (1995) 
      */
     
-#define PI 3.1415927
+#define PI M_PI
+
 double solar_day(double lat, double doy, double tsw) 
 {
     double ws, cosun, n10_temp, delta, ds, result;
diff --git a/imagery/i.cca/i.cca.html b/imagery/i.cca/i.cca.html
index 944a50e..d93e0b6 100644
--- a/imagery/i.cca/i.cca.html
+++ b/imagery/i.cca/i.cca.html
@@ -79,4 +79,4 @@ Central Washington University
 
 Ali R. Vali, 
 University of Texas
-<p><i>Last changed: $Date: 2014-12-03 09:40:27 +0100 (Wed, 03 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-03 09:31:27 +0100 (Wed, 03 Dec 2014) $</i>
diff --git a/imagery/i.cluster/i.cluster.html b/imagery/i.cluster/i.cluster.html
index 5ddfed2..0bf76b5 100644
--- a/imagery/i.cluster/i.cluster.html
+++ b/imagery/i.cluster/i.cluster.html
@@ -305,4 +305,4 @@ U.S. Army Construction Engineering Research Laboratory
 Tao Wen, 
 University of Illinois at Urbana-Champaign, Illinois
 
-<p><i>Last changed: $Date: 2015-09-22 14:05:02 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 14:04:47 +0200 (Tue, 22 Sep 2015) $</i>
diff --git a/imagery/i.cluster/main.c b/imagery/i.cluster/main.c
index 897f3e5..07d89a6 100644
--- a/imagery/i.cluster/main.c
+++ b/imagery/i.cluster/main.c
@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
     parm.out_sig->type = TYPE_STRING;
     parm.out_sig->key_desc = "name";
     parm.out_sig->required = YES;
-    parm.out_sig->gisprompt = "old,sig,sigfile";
+    parm.out_sig->gisprompt = "new,sig,sigfile";
     parm.out_sig->description = _("Name for output file containing result signatures");
 
     parm.class = G_define_option();
@@ -160,6 +160,25 @@ int main(int argc, char *argv[])
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
+    group = parm.group_name->answer;	/* a required parameter */
+    subgroup = parm.subgroup_name->answer;	/* required */
+    outsigfile = parm.out_sig->answer;
+    
+    /* check all the inputs */
+    if (!I_find_group(group)) {
+        G_fatal_error(_("Group <%s> not found in current mapset"), group);
+    }
+    if (!I_find_subgroup(group, subgroup)) {
+        G_fatal_error(_("Subgroup <%s> in group <%s> not found"), subgroup, group);
+    }
+    
+    /* GRASS parser fails to detect existing signature files as
+     * detection needs answers from other parameters as group and subgroup.
+     * Thus check is performed only now. */
+    if (!G_get_overwrite() && I_find_signature_file(group, subgroup, "sig", outsigfile)) {
+        G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"),
+                        parm.out_sig->key, parm.out_sig->answer);
+    }
 
     G_get_window(&window);
     nrows = Rast_window_rows();
@@ -167,10 +186,6 @@ int main(int argc, char *argv[])
 
     I_cluster_clear(&C);
 
-    group = parm.group_name->answer;	/* a required parameter */
-    subgroup = parm.subgroup_name->answer;	/* required */
-
-    outsigfile = parm.out_sig->answer;
 
     if (sscanf(parm.class->answer, "%d", &maxclass) != 1 || maxclass < 1
 	|| maxclass > 255) {
diff --git a/imagery/i.cluster/open_files.c b/imagery/i.cluster/open_files.c
index 5c86239..354fcb5 100644
--- a/imagery/i.cluster/open_files.c
+++ b/imagery/i.cluster/open_files.c
@@ -12,16 +12,6 @@ int open_files(void)
     int n, missing;
 
     I_init_group_ref(&ref);
-
-    G_strip(group);
-    if (!I_find_group(group))
-	G_fatal_error(_("Group <%s> not found in current mapset"), group);
-
-    G_strip(subgroup);
-    if (!I_find_subgroup(group, subgroup))
-	G_fatal_error(_("Subgroup <%s> in group <%s> not found"),
-		      subgroup, group);
-
     I_free_group_ref(&ref);
     I_get_subgroup_ref(group, subgroup, &ref);
 
diff --git a/imagery/i.eb.eta/i.eb.eta.html b/imagery/i.eb.eta/i.eb.eta.html
index 8a49f61..b8b5d09 100644
--- a/imagery/i.eb.eta/i.eb.eta.html
+++ b/imagery/i.eb.eta/i.eb.eta.html
@@ -51,4 +51,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, Asian Institute of Technology, Thailand
 
-<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
diff --git a/imagery/i.eb.evapfr/i.eb.evapfr.html b/imagery/i.eb.evapfr/i.eb.evapfr.html
index 6d133ac..3f20435 100644
--- a/imagery/i.eb.evapfr/i.eb.evapfr.html
+++ b/imagery/i.eb.evapfr/i.eb.evapfr.html
@@ -51,4 +51,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, Asian Institute of Technology, Thailand
 
-<p><i>Last changed: $Date: 2016-06-02 21:26:48 +0200 (Thu, 02 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-02 21:20:37 +0200 (Thu, 02 Jun 2016) $</i>
diff --git a/imagery/i.eb.hsebal01/i.eb.hsebal01.html b/imagery/i.eb.hsebal01/i.eb.hsebal01.html
index aa08f50..6015e3b 100644
--- a/imagery/i.eb.hsebal01/i.eb.hsebal01.html
+++ b/imagery/i.eb.hsebal01/i.eb.hsebal01.html
@@ -69,4 +69,4 @@ Philippines.
 <p>Contact: <a href="mailto:yann.chemin at gmail.com">Yann Chemin</a>
 
 
-<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
diff --git a/imagery/i.eb.netrad/i.eb.netrad.html b/imagery/i.eb.netrad/i.eb.netrad.html
index 9d6a8ad..63eb620 100644
--- a/imagery/i.eb.netrad/i.eb.netrad.html
+++ b/imagery/i.eb.netrad/i.eb.netrad.html
@@ -47,4 +47,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, International Rice Research Institute, The Philippines
 
-<p><i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 18:23:56 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/imagery/i.eb.netrad/r_net.c b/imagery/i.eb.netrad/r_net.c
index 6b7bab6..99b4ac2 100644
--- a/imagery/i.eb.netrad/r_net.c
+++ b/imagery/i.eb.netrad/r_net.c
@@ -1,8 +1,10 @@
-#include<stdio.h>
-#include<math.h>
-#include<stdlib.h>
- 
-#define PI 3.1415927
+#include <stdio.h>
+#include <math.h>
+#include <stdlib.h>
+#include <grass/gis.h>
+
+#define PI M_PI
+
 double r_net(double bbalb, double ndvi, double tempk, double dtair,
 	      double e0, double tsw, double doy, double utc,
 	      double sunzangle) 
diff --git a/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html b/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html
index 1a1e33e..0e2771b 100644
--- a/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html
+++ b/imagery/i.eb.soilheatflux/i.eb.soilheatflux.html
@@ -71,4 +71,4 @@ in: Irmak, A. (Ed.), Evapotranspiration - Remote Sensing and Modeling. InTech.
 
 Yann Chemin, Asian Institute of Technology, Thailand<br>
 
-<p><i>Last changed: $Date: 2015-02-27 12:04:43 +0100 (Fri, 27 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-02-27 12:03:54 +0100 (Fri, 27 Feb 2015) $</i>
diff --git a/imagery/i.emissivity/i.emissivity.html b/imagery/i.emissivity/i.emissivity.html
index f8e1315..b636b5b 100644
--- a/imagery/i.emissivity/i.emissivity.html
+++ b/imagery/i.emissivity/i.emissivity.html
@@ -42,4 +42,4 @@ grey body radiation is equal to the black body radiation times the emissivity.
 
 Yann Chemin, GRASS Development Team<br>
 
-<p><i>Last changed: $Date: 2016-06-06 23:52:35 +0200 (Mon, 06 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-06 23:51:47 +0200 (Mon, 06 Jun 2016) $</i>
diff --git a/imagery/i.evapo.mh/i.evapo.mh.html b/imagery/i.evapo.mh/i.evapo.mh.html
index b76929f..a04362d 100644
--- a/imagery/i.evapo.mh/i.evapo.mh.html
+++ b/imagery/i.evapo.mh/i.evapo.mh.html
@@ -31,4 +31,4 @@ under inaccurate data conditions. Irrigation and Drainage Systems 16: 33-45.</li
 
 Yann Chemin, GRASS Development team, 2007-2016<br>
 
-<p><i>Last changed: $Date: 2016-01-27 23:53:28 +0100 (Wed, 27 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-27 23:51:14 +0100 (Wed, 27 Jan 2016) $</i>
diff --git a/imagery/i.evapo.pm/i.evapo.pm.html b/imagery/i.evapo.pm/i.evapo.pm.html
index 66fcf19..b1317c8 100644
--- a/imagery/i.evapo.pm/i.evapo.pm.html
+++ b/imagery/i.evapo.pm/i.evapo.pm.html
@@ -83,4 +83,4 @@ applied science for the Southern Switzerland)
   bare soil and grass. Proc. Roy. Soc. London, A193, pp. 120-146. 
 
 <p>
-<i>Last changed: $Date: 2015-08-01 21:15:31 +0200 (Sat, 01 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-01 21:15:13 +0200 (Sat, 01 Aug 2015) $</i>
diff --git a/imagery/i.evapo.pt/i.evapo.pt.html b/imagery/i.evapo.pt/i.evapo.pt.html
index 3ec47e2..20afdd1 100644
--- a/imagery/i.evapo.pt/i.evapo.pt.html
+++ b/imagery/i.evapo.pt/i.evapo.pt.html
@@ -37,4 +37,4 @@ Alpha values extracted from:
 
 Yann Chemin, GRASS Development team, 2007-08
 
-<p><i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 18:23:56 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/imagery/i.evapo.time/i.evapo.time.html b/imagery/i.evapo.time/i.evapo.time.html
index a922232..81a7f8a 100644
--- a/imagery/i.evapo.time/i.evapo.time.html
+++ b/imagery/i.evapo.time/i.evapo.time.html
@@ -64,4 +64,4 @@ For multi-year calculations, just continue incrementing DOY values above
 <h2>AUTHOR</h2>
 Yann Chemin, International Rice Research Institute, The Philippines
 
-<p><i>Last changed: $Date: 2014-12-27 23:51:00 +0100 (Sat, 27 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-27 23:28:56 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/imagery/i.fft/i.fft.html b/imagery/i.fft/i.fft.html
index 06bc20b..00851ab 100644
--- a/imagery/i.fft/i.fft.html
+++ b/imagery/i.fft/i.fft.html
@@ -64,4 +64,4 @@ Central Washington University
 <br>
 Glynn Clements (FFTW support)
 
-<p><i>Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/imagery/i.gensig/i.gensig.html b/imagery/i.gensig/i.gensig.html
index 7ef9d06..a45b798 100644
--- a/imagery/i.gensig/i.gensig.html
+++ b/imagery/i.gensig/i.gensig.html
@@ -127,4 +127,4 @@ Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2014-11-01 11:11:04 +0100 (Sat, 01 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-01 11:07:51 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/imagery/i.gensig/parse.c b/imagery/i.gensig/parse.c
index 77306b6..731dd06 100644
--- a/imagery/i.gensig/parse.c
+++ b/imagery/i.gensig/parse.c
@@ -22,7 +22,7 @@ int parse(int argc, char *argv[], struct parms *parms)
     sigfile->type = TYPE_STRING;
     sigfile->key_desc = "name";
     sigfile->required = YES;
-    sigfile->gisprompt = "old,sig,sigfile";
+    sigfile->gisprompt = "new,sig,sigfile";
     sigfile->description = _("Name for output file containing result signatures");
 
     if (G_parser(argc, argv))
@@ -42,6 +42,14 @@ int parse(int argc, char *argv[], struct parms *parms)
 
     if (!I_find_subgroup(parms->group, parms->subgroup))
 	G_fatal_error(_("Subgroup <%s> in group <%s> not found"), parms->subgroup, parms->group);
-
+    
+    /* GRASS parser fails to detect existing signature files as
+     * detection needs answers from other parameters as group and subgroup.
+     * Thus check is performed only now. */
+    if (!G_get_overwrite() && I_find_signature_file(parms->group, parms->subgroup, "sig", parms->sigfile)) {
+        G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"), 
+                        sigfile->key, sigfile->answer);
+    }
+    
     return 0;
 }
diff --git a/imagery/i.gensigset/i.gensigset.html b/imagery/i.gensigset/i.gensigset.html
index 9c8b74a..ec74f16 100644
--- a/imagery/i.gensigset/i.gensigset.html
+++ b/imagery/i.gensigset/i.gensigset.html
@@ -231,4 +231,4 @@ School of Electrical Engineering, Purdue University
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2015-02-14 22:08:31 +0100 (Sat, 14 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-02-14 22:07:18 +0100 (Sat, 14 Feb 2015) $</i>
diff --git a/imagery/i.gensigset/parse.c b/imagery/i.gensigset/parse.c
index 61fbd4a..223f44c 100644
--- a/imagery/i.gensigset/parse.c
+++ b/imagery/i.gensigset/parse.c
@@ -21,7 +21,7 @@ int parse(int argc, char *argv[], struct parms *parms)
     sigfile->type = TYPE_STRING;
     sigfile->key_desc = "name";
     sigfile->required = YES;
-    sigfile->gisprompt = "old,sig,sigfile";
+    sigfile->gisprompt = "new,sig,sigfile";
     sigfile->description = _("Name for output file containing result signatures");
 
     maxsig = G_define_option();
@@ -49,6 +49,15 @@ int parse(int argc, char *argv[], struct parms *parms)
     if (!I_find_subgroup(parms->group, parms->subgroup)) {
 	G_fatal_error(_("Subgroup <%s> in group <%s> not found"), parms->subgroup, parms->group);
     }
+    
+    /* GRASS parser fails to detect existing signature files as
+     * detection needs answers from other parameters as group and subgroup.
+     * Thus check is performed only now. */
+    if (!G_get_overwrite() && I_find_signature_file(parms->group, parms->subgroup, "sigset", parms->sigfile)) {
+        G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"),
+                        sigfile->key, sigfile->answer);
+    }
+    
     if (sscanf(maxsig->answer, "%d", &parms->maxsubclasses) != 1 ||
 	parms->maxsubclasses <= 0) {
 	G_fatal_error(_("Illegal number of sub-signatures (%s)"),
diff --git a/imagery/i.group/i.group.html b/imagery/i.group/i.group.html
index 1aaabec..ac59995 100644
--- a/imagery/i.group/i.group.html
+++ b/imagery/i.group/i.group.html
@@ -46,4 +46,4 @@ Research Laboratory
 <br>
 Parser support: Bob Covill (Tekmap, Canada)
 
-<p><i>Last changed: $Date: 2014-11-02 21:55:12 +0100 (Sun, 02 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-02 21:52:19 +0100 (Sun, 02 Nov 2014) $</i>
diff --git a/imagery/i.his.rgb/i.his.rgb.html b/imagery/i.his.rgb/i.his.rgb.html
index d0b6fea..a8fbdab 100644
--- a/imagery/i.his.rgb/i.his.rgb.html
+++ b/imagery/i.his.rgb/i.his.rgb.html
@@ -39,4 +39,4 @@ Central Washington University
 with acknowledgements to Ali Vali, Univ. of Texas Space Research
 Center, for the core routine.
 
-<p><i>Last changed: $Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/imagery/i.ifft/i.ifft.html b/imagery/i.ifft/i.ifft.html
index 5018816..1a0ab44 100644
--- a/imagery/i.ifft/i.ifft.html
+++ b/imagery/i.ifft/i.ifft.html
@@ -52,4 +52,4 @@ Central Washington University
 <br>
 Glynn Clements (FFTW support)
 
-<p><i>Last changed: $Date: 2014-11-01 11:11:04 +0100 (Sat, 01 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-01 11:07:51 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/imagery/i.landsat.acca/i.landsat.acca.html b/imagery/i.landsat.acca/i.landsat.acca.html
index 036849a..0172736 100644
--- a/imagery/i.landsat.acca/i.landsat.acca.html
+++ b/imagery/i.landsat.acca/i.landsat.acca.html
@@ -59,4 +59,4 @@ i.landsat.acca -f band_prefix=226_62.toar output=226_62.acca
 
 E. Jorge Tizado  (ej.tizado unileon es), Dept. Biodiversity and Environmental Management, University of Le�n, Spain
 
-<p><i>Last changed: $Date: 2016-05-18 09:11:09 +0200 (Wed, 18 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-18 09:07:29 +0200 (Wed, 18 May 2016) $</i>
diff --git a/imagery/i.landsat.toar/i.landsat.toar.html b/imagery/i.landsat.toar/i.landsat.toar.html
index 03cc081..051717e 100644
--- a/imagery/i.landsat.toar/i.landsat.toar.html
+++ b/imagery/i.landsat.toar/i.landsat.toar.html
@@ -284,4 +284,4 @@ E. Jorge Tizado  (ej.tizado unileon es), Dept. Biodiversity and Environmental Ma
 University of León, Spain
 
 <p>
-<i>Last changed: $Date: 2015-12-30 14:01:52 +0100 (Wed, 30 Dec 2015) $</i>
+<i>Last changed: $Date: 2015-12-30 14:00:44 +0100 (Wed, 30 Dec 2015) $</i>
diff --git a/imagery/i.maxlik/i.maxlik.html b/imagery/i.maxlik/i.maxlik.html
index 0e936a4..22c8cf2 100644
--- a/imagery/i.maxlik/i.maxlik.html
+++ b/imagery/i.maxlik/i.maxlik.html
@@ -153,4 +153,4 @@ University of Illinois at Urbana-Champaign,
 Illinois
 
 <p>
-<i>Last changed: $Date: 2015-09-14 18:36:24 +0200 (Mon, 14 Sep 2015) $</i>
+<i>Last changed: $Date: 2015-09-14 18:35:33 +0200 (Mon, 14 Sep 2015) $</i>
diff --git a/imagery/i.modis.qc/i.modis.qc.html b/imagery/i.modis.qc/i.modis.qc.html
index 168294e..20981c2 100644
--- a/imagery/i.modis.qc/i.modis.qc.html
+++ b/imagery/i.modis.qc/i.modis.qc.html
@@ -420,4 +420,4 @@ Add more daily products.
 Yann Chemin
 
 <p>
-<i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/imagery/i.modis.qc/main.c b/imagery/i.modis.qc/main.c
index c411507..9a41df7 100644
--- a/imagery/i.modis.qc/main.c
+++ b/imagery/i.modis.qc/main.c
@@ -96,6 +96,17 @@ CELL mod13A2g (CELL pixel);
 CELL mod13A2h (CELL pixel);
 CELL mod13A2i (CELL pixel);
 
+    /* MOD13Q1 Products (250m, 16-Days) */
+CELL mod13Q1a (CELL pixel);
+CELL mod13Q1b (CELL pixel);
+CELL mod13Q1c (CELL pixel);
+CELL mod13Q1d (CELL pixel);
+CELL mod13Q1e (CELL pixel);
+CELL mod13Q1f (CELL pixel);
+CELL mod13Q1g (CELL pixel);
+CELL mod13Q1h (CELL pixel);
+CELL mod13Q1i (CELL pixel);
+
     /* MCD43B2 Products (1km, 8-Days)*/
 
 /* SDS: BRDF_Albedo_Ancilliary */
@@ -140,6 +151,7 @@ int main(int argc, char *argv[])
     G_add_keyword(_("reflectance"));
     G_add_keyword(_("land surface temperature"));
     G_add_keyword(_("vegetation"));
+    G_add_keyword(_("satellite"));
     G_add_keyword(_("MODIS"));
     module->description =
 	_("Extracts quality control parameters from MODIS QC layers.");
@@ -171,7 +183,8 @@ int main(int argc, char *argv[])
 	       "mod11A2;%s;"
 	       "mod13A2;%s;"
 	       "mcd43B2;%s;"
-	       "mcd43B2q;%s",
+	       "mcd43B2q;%s;"
+	       "mod13Q1;%s;",
 	       _("surf. refl. 250m 8-days"),
 	       _("surf. refl. 500m 8-days"),
 	       _("surf. refl. 500m 8-days, State QA"),
@@ -182,9 +195,10 @@ int main(int argc, char *argv[])
 	       _("LST 1km 8-days (Day/Night)"),
 	       _("VI 1km 16-days"),
 	       _("Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"),
-	       _("Brdf-Albedo Quality (BRDF SDS) 1km 8-days"));
+	       _("Brdf-Albedo Quality (BRDF SDS) 1km 8-days"),
+	       _("VI 250m 16-days"));
     productname->descriptions = desc_productname;
-    productname->options = "mod09Q1,mod09A1,mod09A1s,mod09CMG,mod09CMGs,mod09CMGi,mod11A1,mod11A2,mod13A2,mcd43B2,mcd43B2q";
+    productname->options = "mod09Q1,mod09A1,mod09A1s,mod09CMG,mod09CMGs,mod09CMGi,mod11A1,mod11A2,mod13A2,mcd43B2,mcd43B2q,mod13Q1";
     productname->answer = "mod13A2";
     
     qcname = G_define_option();
@@ -245,7 +259,16 @@ int main(int argc, char *argv[])
 	       "platform;%s;"
 	       "land_water;%s;"
 	       "sun_z_angle_at_local_noon;%s;"
-	       "brdf_correction_performed;%s",
+	       "brdf_correction_performed;%s;"
+	       "modland_qa;%s;"
+	       "vi_usefulness;%s;"
+	       "aerosol_quantity;%s;"
+	       "pixel_adjacent_to_cloud;%s;"
+	       "brdf_correction_performed;%s;"
+	       "mixed_clouds;%s;"
+	       "land_water;%s;"
+	       "possible_snow_ice;%s;"
+	       "possible_shadow;%s;",
 	       _("mod09: Adjacency Correction"),
 	       _("mod09: Atmospheric Correction"),
 	       _("mod09: Cloud State"),
@@ -297,9 +320,18 @@ int main(int argc, char *argv[])
 	       _("mcd43B2: Quality of BRDF correction performed"),
 	       _("mcd43B2: Quality of BRDF correction performed"),
 	       _("mcd43B2: Quality of BRDF correction performed"),
-	       _("mcd43B2q: Quality of BRDF correction performed"));
+	       _("mcd43B2q: Quality of BRDF correction performed"),
+	       _("mod13Q1: MODIS Land General Quality Assessment"),
+	       _("mod13Q1: Quality estimation of the pixel"),
+	       _("mod13Q1: Quantity range of Aerosol"),
+	       _("mod13Q1: if pixel is a cloud neighbour"),
+	       _("mod13Q1: if BRDF correction performed"),
+	       _("mod13Q1: if pixel mixed with clouds"),
+	       _("mod13Q1: separate land from various water objects"),
+	       _("mod13Q1: if snow/ice present in pixel"),
+	       _("mod13Q1: if shadow is present in pixel"));
     qcname->descriptions = desc_qcname;
-    qcname->options = "adjcorr,atcorr,cloud,data_quality,diff_orbit_from_500m,modland_qa,mandatory_qa_11A1,data_quality_flag_11A1,emis_error_11A1,lst_error_11A1,data_quality_flag_11A2,emis_error_11A2,mandatory_qa_11A2,lst_error_11A2,aerosol_quantity,brdf_correction_performed,cirrus_detected,cloud_shadow,cloud_state,internal_cloud_algorithm,internal_fire_algorithm,internal_snow_mask,land_water,mod35_snow_ice,pixel_adjacent_to_cloud,icm_cloudy,icm_clear,icm_high_clouds,icm_low_clouds,icm_s [...]
+    qcname->options = "adjcorr,atcorr,cloud,data_quality,diff_orbit_from_500m,modland_qa,mandatory_qa_11A1,data_quality_flag_11A1,emis_error_11A1,lst_error_11A1,data_quality_flag_11A2,emis_error_11A2,mandatory_qa_11A2,lst_error_11A2,aerosol_quantity,brdf_correction_performed,cirrus_detected,cloud_shadow,cloud_state,internal_cloud_algorithm,internal_fire_algorithm,internal_snow_mask,land_water,mod35_snow_ice,pixel_adjacent_to_cloud,icm_cloudy,icm_clear,icm_high_clouds,icm_low_clouds,icm_s [...]
     qcname->answer = "modland_qa";
 
     input_band = G_define_option();
@@ -409,6 +441,13 @@ int main(int argc, char *argv[])
     if (!strcmp(product, "mcd43B2q") && (bandno < 1 || bandno > 7))
 	    G_fatal_error(_("Band number out of allowed range [1-7]"));
 
+    /*mod13Q1*/
+    if ((!strcmp(qcflag, "vi_usefulness") && strcmp(product, "mod13Q1")) ||
+        (!strcmp(qcflag, "mixed_clouds") && strcmp(product, "mod13Q1")) ||
+        (!strcmp(qcflag, "possible_snow_ice") && strcmp(product, "mod13Q1")) ||
+        (!strcmp(qcflag, "possible_shadow") && strcmp(product, "mod13Q1")))
+        G_fatal_error(_("This bit flag is only available for MOD13Q1 @ 250m products"));
+
     infd = Rast_open_old(qcchan, "");
 
     Rast_get_cellhd(qcchan, "", &cellhd);
@@ -690,6 +729,36 @@ int main(int argc, char *argv[])
 		/* BRDF correction performed Quality flag  */ 
                     c = mcd43B2qa(c, bandno);
             }
+            else if (!strcmp(product, "mod13Q1"))
+            {
+                if (!strcmp(qcflag, "modland_qa")) 
+		/*calculate mod11A2 MODIS Land Quality flags  */ 
+                    c = mod13Q1a(c);
+	        if (!strcmp(qcflag, "vi_usefulness"))
+		/*calculate mod13A2 estimate of vi usefulness flag  */ 
+                    c = mod13Q1b(c);
+                if (!strcmp(qcflag, "aerosol_quantity")) 
+		/*calculate mod13A2 aerosol quantity range flag  */ 
+                    c = mod13Q1c(c);
+	        if (!strcmp(qcflag, "pixel_adjacent_to_cloud")) 
+		/*calculate mod13A2 adjacent cloud detected flag  */ 
+                    c = mod13Q1d(c);
+	        if (!strcmp(qcflag, "brdf_correction_performed")) 
+		/*calculate mod13A2 BRDF correction performed flag  */ 
+                    c = mod13Q1e(c);
+	        if (!strcmp(qcflag, "mixed_clouds")) 
+		/*calculate mod13A2 pixel has clouds flag  */ 
+                    c = mod13Q1f(c);
+	        if (!strcmp(qcflag, "land_water")) 
+		/*calculate mod13A2 land and water types screening flag  */ 
+                    c = mod13Q1g(c);
+	        if (!strcmp(qcflag, "possible_snow_ice")) 
+		/*calculate mod13A2 possible presence of snow or ice flag  */ 
+                    c = mod13Q1h(c);
+	        if (!strcmp(qcflag, "possible_shadow")) 
+		/*calculate mod13A2 possible presence of shadow flag  */ 
+                    c = mod13Q1i(c);
+            }
 	    else
                 G_fatal_error(_("Unknown names and/or combination, please check spelling"));
 
diff --git a/imagery/i.modis.qc/mod13Q1a.c b/imagery/i.modis.qc/mod13Q1a.c
new file mode 100644
index 0000000..a0e9b37
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1a.c
@@ -0,0 +1,18 @@
+/* mod13Q1 Mandatory QA Flags 250m bits[0-1]
+ * 00 -> class 0: VI produced, good quality
+ * 01 -> class 1: VI produced, but check other QA
+ * 10 -> class 2: Pixel produced, but most probably cloud
+ * 11 -> class 3: Pixel not produced due to other reasons than clouds
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1a (CELL pixel) 
+{
+    CELL qctemp;
+    qctemp = pixel & 0x03;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1b.c b/imagery/i.modis.qc/mod13Q1b.c
new file mode 100644
index 0000000..88fc927
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1b.c
@@ -0,0 +1,27 @@
+/* mod13Q1 VI Usefulness Flag bits[2-5]
+ * 0000 -> class 0: Highest quality
+ * 0001 -> class 1: Lower quality
+ * 0010 -> class 2: Decreasing quality
+ * 0100 -> class 3: Decreasing quality
+ * 1000 -> class 4: Decreasing quality
+ * 1001 -> class 5: Decreasing quality
+ * 1010 -> class 6: Decreasing quality
+ * 1100 -> class 7: Lowest quality
+ * 1101 -> class 8: Quality so low that it is not useful
+ * 1110 -> class 9: L1B data faulty
+ * 1111 -> class 10: Not useful for any other reason/not processed
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1b(CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 2;		/*bits [2-5] become [0-4] */
+    qctemp = pixel & 0x0F;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1c.c b/imagery/i.modis.qc/mod13Q1c.c
new file mode 100644
index 0000000..03a52d5
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1c.c
@@ -0,0 +1,20 @@
+/* mod13Q1 Aerosol quantity Flags 250m bits[6-7]
+ * 00 -> class 0: Climatology
+ * 01 -> class 1: Low
+ * 10 -> class 2: Average
+ * 11 -> class 3: High
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1c (CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 6;		/*bits [6-7] become [0-1] */
+    qctemp = pixel & 0x03;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1d.c b/imagery/i.modis.qc/mod13Q1d.c
new file mode 100644
index 0000000..f15fbe4
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1d.c
@@ -0,0 +1,18 @@
+/* mod13Q1 Adjacent cloud detected 250m bit[8]
+ * 00 -> class 0: No
+ * 01 -> class 1: Yes
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1d (CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 8;		/*bit [8] becomes [0] */
+    qctemp = pixel & 0x01;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1e.c b/imagery/i.modis.qc/mod13Q1e.c
new file mode 100644
index 0000000..4040eeb
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1e.c
@@ -0,0 +1,18 @@
+/* mod13Q1 Atmosphere BRDF correction performed 250m bit[9]
+ * 00 -> class 0: No
+ * 01 -> class 1: Yes
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1e (CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 9;		/*bit [9] becomes [0] */
+    qctemp = pixel & 0x01;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1f.c b/imagery/i.modis.qc/mod13Q1f.c
new file mode 100644
index 0000000..b57794f
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1f.c
@@ -0,0 +1,18 @@
+/* mod13Q1 Mixed clouds 250m bit[10]
+ * 00 -> class 0: No
+ * 01 -> class 1: Yes
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1f (CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 10;		/*bit [10] becomes [0] */
+    qctemp = pixel & 0x01;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1g.c b/imagery/i.modis.qc/mod13Q1g.c
new file mode 100644
index 0000000..f61b076
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1g.c
@@ -0,0 +1,24 @@
+/* mod13Q1 Land/Water Flags 250m bits[11-13]
+ * 000 -> class 0: Shallow Ocean
+ * 001 -> class 1: Land (Nothing else but land)
+ * 010 -> class 2: Ocean Coastlines and lake shorelines
+ * 011 -> class 3: Shallow inland water
+ * 100 -> class 4: Ephemeral water
+ * 101 -> class 5: Deep inland water
+ * 110 -> class 6: Moderate or continental ocean
+ * 111 -> class 7: Deep ocean
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1g (CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 11;		/*bits [11-13] become [0-2] */
+    qctemp = pixel & 0x07;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1h.c b/imagery/i.modis.qc/mod13Q1h.c
new file mode 100644
index 0000000..456ddb4
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1h.c
@@ -0,0 +1,18 @@
+/* mod13Q1 Possible Snow/Ice 250m bits[14]
+ * 0 -> class 0: No
+ * 1 -> class 1: Yes
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1h(CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 14;		/*bit [14] becomes [0] */
+    qctemp = pixel & 0x01;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.modis.qc/mod13Q1i.c b/imagery/i.modis.qc/mod13Q1i.c
new file mode 100644
index 0000000..4a3cebc
--- /dev/null
+++ b/imagery/i.modis.qc/mod13Q1i.c
@@ -0,0 +1,18 @@
+/* mod13Q1 Possible Shadow 250m bits[15]
+ * 0 -> class 0: No
+ * 1 -> class 1: Yes
+ */  
+
+#include <grass/raster.h>
+
+CELL mod13Q1i (CELL pixel) 
+{
+    CELL qctemp;
+
+    pixel >>= 15;		/*bit [15] becomes [0] */
+    qctemp = pixel & 0x01;
+    
+    return qctemp;
+}
+
+
diff --git a/imagery/i.ortho.photo/README b/imagery/i.ortho.photo/README
index 7fa9938..2a73c57 100644
--- a/imagery/i.ortho.photo/README
+++ b/imagery/i.ortho.photo/README
@@ -35,14 +35,23 @@ frontend:
 
 internal:
  libes/         -> lib/
- menu/          -> TODO (wxGUI)
+ menu/          -> TODO (wxGUI, use g.gui.gcp classes)
  photo.elev/    -> i.ortho.elev/
- photo.2target/ -> ? i.ortho.transform/
+ photo.2target/ -> ? i.ortho.transform/ 
  photo.camera/  -> i.ortho.camera/
- photo.2image/  -> ?
+ photo.2image/  -> ? (wxGUI, use g.gui.gcp classes: fiducial marks)
  photo.init/    -> i.ortho.init/
  photo.rectify/ -> ? i.ortho.rectify/
 
+
+Workflow description:
+
+Open Source GIS: A GRASS GIS Approach, Second Edition, 2004
+by Markus Neteler and Helena Mitasova, 
+Chapter 10 – PROCESSING OF AERIAL PHOTOS
+http://grassbook.org/extra/sample-chapter/
+--> PDF
+
 ######################################################################
 GRASS GIS 4 to 6
 
diff --git a/imagery/i.pca/i.pca.html b/imagery/i.pca/i.pca.html
index db67c00..49b9cc1 100644
--- a/imagery/i.pca/i.pca.html
+++ b/imagery/i.pca/i.pca.html
@@ -119,4 +119,4 @@ Research Laboratory
 <p>Rewritten for GRASS 6.x and major modifications by <br>
 Brad Douglas
 
-<p><i>Last changed: $Date: 2015-09-14 19:06:52 +0200 (Mon, 14 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-14 19:06:11 +0200 (Mon, 14 Sep 2015) $</i>
diff --git a/imagery/i.rectify/target.c b/imagery/i.rectify/target.c
index 043628c..fcc87e7 100644
--- a/imagery/i.rectify/target.c
+++ b/imagery/i.rectify/target.c
@@ -32,7 +32,8 @@ int get_target(char *group)
     sprintf(buf, _("Mapset <%s> in target location <%s> - "), mapset, location);
     strcat(buf, stat == 0 ? _("permission denied") : _("not found"));
   error:
-    strcat(buf, _("Please run i.target for group."));
+    strcat(buf, "\n");
+    strcat(buf, _("Please run i.target for group "));
     strcat(buf, group);
     G_fatal_error("%s", buf);
     return 1;			/* never reached */
diff --git a/imagery/i.rgb.his/i.rgb.his.html b/imagery/i.rgb.his/i.rgb.his.html
index 44cf7f9..aee49cc 100644
--- a/imagery/i.rgb.his/i.rgb.his.html
+++ b/imagery/i.rgb.his/i.rgb.his.html
@@ -23,4 +23,4 @@ Central Washington University,
 with acknowledgements to Ali Vali, Space Research
 Center, for the core routine. 
 
-<p><i>Last changed: $Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/imagery/i.segment/README b/imagery/i.segment/README
new file mode 100644
index 0000000..96831d5
--- /dev/null
+++ b/imagery/i.segment/README
@@ -0,0 +1,19 @@
+i.segment basically works in three steps:
+
+[Note: the word "segment" has two meanings here - data segments which are like data tiles (SEGMENT library) and image objects that are the result of the segmentation algorithm. In following, an attemps is made to systematically use 'segment' for the former and 'object' for the latter.]
+
+1) open input files and put the data in data segments: open_files(), implemented in open_files.c
+   Pre-defined boundaries can be supplied with the "bounds" option. The meaning of these boundaries is that objects will not cross these boundaries.
+   Seed objects can be supplied with the "seeds" option. All pixels belonging to the same seed are combined to one initial object.
+
+2) run algorithm that identifies for each pixel the id of the object this pixel is part of: create_isegs(), implemented in create_isegs.c, which currently contains only one algorithm, region-growing, implemented in region_growing() and related functions
+
+3) write output raster files: write_output() implemented in write_output.c
+
+Variables and structures used in all functions are passed around using a structure called globals, defined in iseg.h.
+
+All module parameters and flags are defined in parse_args.c 
+
+There are two generic balanced binary search tree (Red Black Tree) implementations used in the region-growing algorithm, one for keeping track of the object pixels belong to (regtree.c/h) and the other for keeping track of the neighbors (ngbrtree.c/h). There is a also a small library of routines allowing to "flag" pixels in raster maps (flag.c/h), used to flag null cells in the input maps.
+
+A new algorithm can be added by adding new methods to the method option and creating the required functions to be called by create_isegs(). Additionally, the read_seed() function in open_files.c will also need to be updated to calculate the metrics per object required by the selected method.
diff --git a/imagery/i.segment/create_isegs.c b/imagery/i.segment/create_isegs.c
index bfad126..176b894 100644
--- a/imagery/i.segment/create_isegs.c
+++ b/imagery/i.segment/create_isegs.c
@@ -14,105 +14,6 @@
 #include <grass/rbtree.h>	/* Red Black Tree library functions */
 #include "iseg.h"
 
-#define EPSILON 1.0e-8
-
-#ifdef MAX
-#undef MAX
-#endif
-#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
-#ifdef MIN
-#undef MIN
-#endif
-#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
-
-
-/* internal functions */
-static int merge_regions(struct ngbr_stats *, struct reg_stats *, /* Ri */
-                         struct ngbr_stats *, struct reg_stats *, /* Rk */
-			 int,
-			 struct globals *);
-static int search_neighbors(struct ngbr_stats *,    /* Ri */
-			    struct reg_stats *,
-                            struct NB_TREE *,       /* Ri's neighbors */ 
-			    double *,               /* highest similarity */ 
-			    struct ngbr_stats *,    /* Ri's best neighbor */
-			    struct reg_stats *,
-		            struct globals *);
-static int set_candidate_flag(struct ngbr_stats *, int , struct globals *);
-static int find_best_neighbor(struct ngbr_stats *, struct reg_stats *,
-			      struct NB_TREE *, struct ngbr_stats *,
-			      struct reg_stats *, double *, int,
-			      struct globals *);
-static int calculate_reg_stats(int, int, struct reg_stats *, 
-                         struct globals *);
-
-/* function used by binary tree to compare items */
-static int compare_rc(const void *first, const void *second)
-{
-    struct rc *a = (struct rc *)first, *b = (struct rc *)second;
-
-    if (a->row < b->row)
-	return -1;
-    if (a->row > b->row)
-	return 1;
-
-    /* same row */
-    if (a->col < b->col)
-	return -1;
-    if (a->col > b->col)
-	return 1;
-    /* same row and col */
-    return 0;
-}
-
-static int compare_ints(const void *first, const void *second)
-{
-    int a = *(int *)first, b = *(int *)second;
-
-    return (a < b ? -1 : (a > b));
-}
-
-static int compare_double(double first, double second)
-{
-
-    /* standard comparison, gives good results */
-    if (first < second)
-	return -1;
-    return (first > second);
-
-    /* fuzzy comparison, 
-     * can give weird results if EPSILON is too large or 
-     * if the formula is changed because this is operating at the 
-     * limit of double fp precision */
-    if (first < second && first + first * EPSILON < second)
-	    return -1;
-    if (first > second && first > second + second * EPSILON)
-	    return 1;
-    return 0;
-}
-
-static int dump_Ri(struct ngbr_stats *Ri, struct reg_stats *Ri_rs, double *Ri_sim,
-                   double *Rk_sim, int *Ri_nn, int *Rk_nn, struct globals *globals)
-{
-    int i;
-
-    G_debug(0, "Ri, Ri_rs ID: %d, %d", Ri->id, Ri_rs->id);
-    G_debug(0, "Ri, Ri_rs count: %d, %d", Ri->count, Ri_rs->count);
-
-    for (i = 0; i < globals->nbands; i++) {
-	G_debug(0, "Ri, Ri_rs mean %d: %g, %g", i, Ri->mean[i], Ri_rs->mean[i]);
-	G_debug(0, "Ri_rs sum %d: %g", i, Ri_rs->sum[i]);
-    }
-    G_debug(0, "Ri nn: %d", *Ri_nn);
-    if (Rk_nn)
-	G_debug(0, "Rk nn: %d", *Rk_nn);
-    G_debug(0, "Ri similarity: %g", *Ri_sim);
-    if (Rk_sim)
-	G_debug(0, "Rk similarity: %g", *Rk_sim);
-
-    return 1;
-}
-
 int create_isegs(struct globals *globals)
 {
     int row, col;
@@ -120,11 +21,9 @@ int create_isegs(struct globals *globals)
     int have_bound, rid;
     CELL current_bound, bounds_val;
 
-    G_debug(1, "segmentation method: %d", globals->method);
-
     if (globals->bounds_map == NULL) {
 	/* just one time through loop */
-	successflag = region_growing(globals);
+	successflag = globals->method_fn(globals);
     }
     else {
 	/* outer processing loop for polygon constraints */
@@ -171,7 +70,7 @@ int create_isegs(struct globals *globals)
 	    globals->col_max++;
 
 	    if (have_bound)
-		successflag = region_growing(globals);
+		successflag = globals->method_fn(globals);
 	}    /* end outer loop for processing polygons */
 
 	/* restore NULL flag */
@@ -183,641 +82,11 @@ int create_isegs(struct globals *globals)
 		    FLAG_SET(globals->null_flag, row, col);
 	    }
 	}
-
     }
 
     return successflag;
 }
 
-
-int region_growing(struct globals *globals)
-{
-    int row, col, t;
-    double threshold, adjthresh, Ri_similarity, Rk_similarity;
-    double alpha2, divisor;		/* threshold parameters */
-    int n_merges, do_merge;		/* number of merges on that iteration */
-    int pathflag;		/* =1 if we didn't find mutually best neighbors, continue with Rk */
-    int candidates_only;
-    struct ngbr_stats Ri,
-                      Rk,
-	              Rk_bestn,         /* Rk's best neighbor */
-		      *next;
-    int Ri_nn, Rk_nn; /* number of neighbors for Ri/Rk */
-    struct NB_TREE *Ri_ngbrs, *Rk_ngbrs;
-    struct NB_TRAV travngbr;
-    /* not all regions are in the tree, but we always need reg_stats for Ri and Rk */
-    struct reg_stats Ri_rs, Rk_rs, Rk_bestn_rs;
-    double *dp;
-    struct NB_TREE *tmpnbtree;
-
-    G_verbose_message("Running region growing algorithm");
-
-    /* init neighbor stats */
-    Ri.mean = G_malloc(globals->datasize);
-    Rk.mean = G_malloc(globals->datasize);
-    Rk_bestn.mean = G_malloc(globals->datasize);
-
-    Ri_ngbrs = nbtree_create(globals->nbands, globals->datasize);
-    Rk_ngbrs = nbtree_create(globals->nbands, globals->datasize);
-
-    /* init region stats */
-    Ri_rs.mean = G_malloc(globals->datasize);
-    Ri_rs.sum = G_malloc(globals->datasize);
-    Rk_rs.mean = G_malloc(globals->datasize);
-    Rk_rs.sum = G_malloc(globals->datasize);
-    Rk_bestn_rs.mean = G_malloc(globals->datasize);
-    Rk_bestn_rs.sum = G_malloc(globals->datasize);
-    
-    t = 0;
-    n_merges = 2;
-
-    /* threshold calculation */
-    alpha2 = globals->alpha * globals->alpha;
-    threshold = alpha2;
-    G_debug(1, "Squared threshold: %g", threshold);
-
-    /* make the divisor a constant ? */
-    divisor = globals->nrows + globals->ncols;
-
-    while (t < globals->end_t && n_merges > 1) {
-
-	G_message(_("Processing pass %d..."), ++t);
-
-	n_merges = 0;
-	globals->candidate_count = 0;
-	flag_clear_all(globals->candidate_flag);
-
-	/* Set candidate flag to true/1 for all non-NULL cells */
-	for (row = globals->row_min; row < globals->row_max; row++) {
-	    for (col = globals->col_min; col < globals->col_max; col++) {
-		if (!(FLAG_GET(globals->null_flag, row, col))) {
-		    
-		    FLAG_SET(globals->candidate_flag, row, col);
-		    globals->candidate_count++;
-		}
-	    }
-	}
-
-	G_debug(4, "Starting to process %ld candidate cells",
-		globals->candidate_count);
-
-	/*process candidate cells */
-	G_percent_reset();
-	for (row = globals->row_min; row < globals->row_max; row++) {
-	    G_percent(row - globals->row_min,
-	              globals->row_max - globals->row_min, 4);
-	    for (col = globals->col_min; col < globals->col_max; col++) {
-		if (!(FLAG_GET(globals->candidate_flag, row, col)))
-		    continue;
-
-		pathflag = TRUE;
-		candidates_only = TRUE;
-
-		nbtree_clear(Ri_ngbrs);
-		nbtree_clear(Rk_ngbrs);
-
-		G_debug(4, "Next starting cell: row, %d, col, %d",
-			row, col);
-
-		/* First cell in Ri is current row/col */
-		Ri.row = row;
-		Ri.col = col;
-
-		/* get Ri's segment ID */
-		Segment_get(&globals->rid_seg, (void *)&Ri.id, Ri.row, Ri.col);
-		
-		if (Ri.id < 0)
-		    continue;
-		if (Ri.id == 0)
-		    G_fatal_error("Zero segment id at row %d, col %d", Ri.row, Ri.col);
-
-		/* find segment neighbors */
-		/* find Ri's best neighbor, clear candidate flag */
-		Ri_similarity = 2;
-
-		Ri_rs.id = Ri.id;
-		fetch_reg_stats(Ri.row, Ri.col, &Ri_rs, globals);
-		memcpy(Ri.mean, Ri_rs.mean, globals->datasize);
-		Ri.count = Ri_rs.count;
-
-		/* Ri is now complete */
-		G_debug(4, "Ri is now complete");
-
-		/* find best neighbor, get region stats for Rk */
-		Ri_nn = find_best_neighbor(&Ri, &Ri_rs, Ri_ngbrs,
-					   &Rk, &Rk_rs, &Ri_similarity,
-					   1, globals);
-		/* Rk is now complete */
-		G_debug(4, "Rk is now complete");
-
-		if (Rk.id == 0) {
-		    /* this can only happen if the segment is surrounded by NULL data */
-		    G_debug(4, "Segment had no valid neighbors");
-		    continue;
-		}
-
-		if (/* !(t & 1) && */ Ri_nn == 1 &&
-		    !(FLAG_GET(globals->candidate_flag, Rk.row, Rk.col)) &&
-		    compare_double(Ri_similarity, threshold) == -1) {
-		    /* this is slow ??? */
-		    int smaller = Rk.count;
-
-		    if (Ri.count < Rk.count)
-			smaller = Ri.count;
-
-		    /* TODO: better */
-		    adjthresh = pow(alpha2, 1. + (double) smaller / divisor);
-
-		    if (compare_double(Ri_similarity, adjthresh) == -1) {
-			G_debug(4, "Ri nn == 1");
-			if (Rk.count < 2)
-			    G_fatal_error("Rk count too low");
-			if (Rk.count < Ri.count)
-			    G_debug(4, "Rk count lower than Ri count");
-
-			merge_regions(&Ri, &Ri_rs, &Rk, &Rk_rs, 1, globals);
-			n_merges++;
-		    }
-
-		    pathflag = FALSE;
-		}
-		/* this is slow ??? */
-		if (/* t & */ 1) {
-		    if ((globals->nn < 8 && Rk.count <= 8) || 
-		        (globals->nn >= 8 && Rk.count <= globals->nn))
-		    candidates_only = FALSE;
-		}
-
-		while (pathflag) {
-		    pathflag = FALSE;
-		    
-		    /* optional check if Rk is candidate
-		     * to prevent backwards merging */
-		    if (candidates_only && 
-		        !(FLAG_GET(globals->candidate_flag, Rk.row, Rk.col))) {
-
-			Ri_similarity = 2;
-		    }
-
-		    candidates_only = TRUE;
-
-		    if (compare_double(Ri_similarity, threshold) == -1) {
-			do_merge = 1;
-
-			/* we'll have the neighbor pixel to start with. */
-			G_debug(4, "Working with Rk");
-
-			/* find Rk's best neighbor, do not clear candidate flag */
-			Rk_similarity = Ri_similarity;
-			Rk_bestn_rs.count = 0;
-			/* Rk_rs is already complete */
-			Rk_nn = find_best_neighbor(&Rk, &Rk_rs, Rk_ngbrs,
-						   &Rk_bestn,
-						   &Rk_bestn_rs,
-						   &Rk_similarity, 0,
-						   globals);
-
-			/* not mutually best neighbors */
-			if (Rk_similarity != Ri_similarity) {
-				do_merge = 0;
-			}
-			/* Ri has only one neighbor, merge */
-			if (Ri_nn == 1 && Rk_nn > 1)
-			    do_merge = 1;
-
-			/* adjust threshold */
-			if (do_merge) {
-			    int smaller = Rk.count;
-
-			    if (Ri.count < Rk.count)
-				smaller = Ri.count;
-
-			    /* TODO: better */
-			    adjthresh = pow(alpha2, 1. + (double) smaller / divisor);
-
-			    do_merge = 0;
-			    if (compare_double(Ri_similarity, adjthresh) == -1) {
-				do_merge = 1;
-			    }
-			}
-
-			if (do_merge) {
-			    
-			    G_debug(4, "merge neighbor trees");
-
-			    Ri_nn -= Ri_ngbrs->count;
-			    Ri_nn += (Rk_nn - Rk_ngbrs->count);
-			    globals->ns.id = Rk.id;
-			    nbtree_remove(Ri_ngbrs, &(globals->ns));
-
-			    nbtree_init_trav(&travngbr, Rk_ngbrs);
-			    while ((next = nbtree_traverse(&travngbr))) {
-				if (!nbtree_find(Ri_ngbrs, next) && next->id != Ri.id)
-				    nbtree_insert(Ri_ngbrs, next);
-			    }
-			    nbtree_clear(Rk_ngbrs);
-			    Ri_nn += Ri_ngbrs->count;
-
-			    merge_regions(&Ri, &Ri_rs, &Rk, &Rk_rs, 1, globals);
-			    /* Ri is now updated, Rk no longer usable */
-
-			    /* made a merge, need another iteration */
-			    n_merges++;
-
-			    Ri_similarity = 2;
-			    Rk_similarity = 2;
-
-			    /* we have checked the neighbors of Ri, Rk already
-			     * use faster version of finding the best neighbor
-			     */
-			    
-			    /* use neighbor tree to find Ri's new best neighbor */
-			    search_neighbors(&Ri, &Ri_rs, Ri_ngbrs, &Ri_similarity,
-					     &Rk, &Rk_rs, globals);
-
-			    if (Rk.id != 0 && Ri_nn > 0 && 
-			        compare_double(Ri_similarity, threshold) == -1) {
-
-				pathflag = TRUE;
-				/* candidates_only:
-				 * FALSE: less passes, takes a bit longer, but less memory
-				 * TRUE: more passes, is a bit faster */
-				candidates_only = FALSE;
-			    }
-			    /* else end of Ri -> Rk chain since we merged Ri and Rk
-			     * go to next row, col */
-			}
-			else {
-			    if (compare_double(Rk_similarity, threshold) == -1) {
-				pathflag = TRUE;
-			    }
-			    /* test this: can it cause an infinite loop ? */
-			    if (!(FLAG_GET(globals->candidate_flag, Rk.row, Rk.col)))
-				pathflag = FALSE;
-
-			    if (Rk_nn < 2)
-				pathflag = FALSE;
-
-			    if (Rk.id < 1)
-				pathflag = FALSE;
-
-			    if (Rk_bestn.id == 0) {
-				G_debug(4, "Rk's best neighour is zero");
-				pathflag = FALSE;
-			    }
-
-			    if (pathflag) {
-				
-				/* clear candidate flag for Rk */
-				if (FLAG_GET(globals->candidate_flag, Rk.row, Rk.col)) {
-				    set_candidate_flag(&Rk, FALSE, globals);
-				}
-
-				/* Use Rk as next Ri:  
-				 * this is the eCognition technique. */
-				G_debug(4, "do ecog");
-				Ri_nn = Rk_nn;
-				Ri_similarity = Rk_similarity;
-
-				dp = Ri.mean;
-				Ri = Rk;
-				Rk = Rk_bestn;
-				Rk_bestn.mean = dp;
-
-				Ri_rs.id = Rk_rs.id;
-				Rk_rs.id = Rk_bestn_rs.id;
-				Rk_bestn_rs.id = 0;
-				Ri_rs.count = Rk_rs.count;
-				Rk_rs.count = Rk_bestn_rs.count;
-				Rk_bestn_rs.count = 0;
-				dp = Ri_rs.mean;
-				Ri_rs.mean = Rk_rs.mean;
-				Rk_rs.mean = Rk_bestn_rs.mean;
-				Rk_bestn_rs.mean = dp;
-				dp = Ri_rs.sum;
-				Ri_rs.sum = Rk_rs.sum;
-				Rk_rs.sum = Rk_bestn_rs.sum;
-				Rk_bestn_rs.sum = dp;
-
-				tmpnbtree = Ri_ngbrs;
-				Ri_ngbrs = Rk_ngbrs;
-				Rk_ngbrs = tmpnbtree;
-				nbtree_clear(Rk_ngbrs);
-			    }
-			}
-		    }    /* end if < threshold */
-		}    /* end pathflag */
-	    }    /* next col */
-	}    /* next row */
-        G_percent(1, 1, 1);
-
-	/* finished one pass for processing candidate pixels */
-	G_verbose_message("%d merges", n_merges);
-
-	G_debug(4, "Finished pass %d", t);
-    }
-
-    /*end t loop *//*TODO, should there be a max t that it can iterate for?  Include t in G_message? */
-    if (n_merges > 1)
-	G_message(_("Segmentation processes stopped at %d due to reaching max iteration limit, more merges may be possible"), t);
-    else
-	G_message(_("Segmentation converged after %d iterations"), t);
-
-
-    /* ****************************************************************************************** */
-    /* final pass, ignore threshold and force a merge for small segments with their best neighbor */
-    /* ****************************************************************************************** */
-    
-    if (globals->min_segment_size > 1) {
-	G_message(_("Merging segments smaller than %d cells..."), globals->min_segment_size);
-
-	threshold = globals->alpha * globals->alpha;
-
-	flag_clear_all(globals->candidate_flag);
-	
-	n_merges = 0;
-	globals->candidate_count = 0;
-
-	/* Set candidate flag to true/1 for all non-NULL cells */
-	for (row = globals->row_min; row < globals->row_max; row++) {
-	    for (col = globals->col_min; col < globals->col_max; col++) {
-		if (!(FLAG_GET(globals->null_flag, row, col))) {
-		    FLAG_SET(globals->candidate_flag, row, col);
-
-		    globals->candidate_count++;
-		}
-	    }
-	}
-
-	G_debug(4, "Starting to process %ld candidate cells",
-		globals->candidate_count);
-
-	/* process candidate cells */
-	G_percent_reset();
-	for (row = globals->row_min; row < globals->row_max; row++) {
-	    G_percent(row - globals->row_min,
-	              globals->row_max - globals->row_min, 4);
-	    for (col = globals->col_min; col < globals->col_max; col++) {
-		int do_merge = 1;
-		
-		if (!(FLAG_GET(globals->candidate_flag, row, col)))
-		    continue;
-
-		Ri.row = row;
-		Ri.col = col;
-
-		/* get segment id */
-		Segment_get(&globals->rid_seg, (void *) &Ri.id, row, col);
-		
-		if (Ri.id < 0)
-		    continue;
-
-		Ri_rs.id = Ri.id;
-
-		/* get segment size */
-
-		fetch_reg_stats(Ri.row, Ri.col, &Ri_rs, globals);
-		memcpy(Ri.mean, Ri_rs.mean, globals->datasize);
-		Ri.count = Ri_rs.count;
-
-		if (Ri.count >= globals->min_segment_size) {
-		    set_candidate_flag(&Ri, FALSE, globals);
-		    do_merge = 0;
-		}
-
-		while (do_merge) {
-		    do_merge = 0;
-
-		    /* merge all smaller than min size */
-		    if (Ri.count < globals->min_segment_size)
-			do_merge = 1;
-
-		    Ri_nn = 0;
-		    Ri_similarity = 2;
-		    
-		    Rk.id = 0;
-
-		    if (do_merge) {
-
-			/* find Ri's best neighbor, clear candidate flag */
-			Ri_nn = find_best_neighbor(&Ri, &Ri_rs, Ri_ngbrs,
-						   &Rk, &Rk_rs,
-						   &Ri_similarity, 1,
-						   globals);
-		    }
-		    do_merge = 0;
-
-		    if (Rk.id != 0) {
-			/* merge Ri with Rk */
-			/* do not clear candidate flag for Rk */
-			merge_regions(&Ri, &Ri_rs, &Rk, &Rk_rs, 0, globals);
-			n_merges++;
-
-			if (Ri.count < globals->min_segment_size)
-			    do_merge = 1;
-		    }
-		}
-	    }
-	}
-	G_percent(1, 1, 1);
-
-	/* finished one pass for processing candidate pixels */
-	G_verbose_message("%d merges", n_merges);
-    }
-    
-    /* free neighbor stats */
-    G_free(Ri.mean);
-    G_free(Rk.mean);
-    G_free(Rk_bestn.mean);
-    
-    nbtree_clear(Ri_ngbrs);
-    nbtree_clear(Rk_ngbrs);
-    free(Ri_ngbrs);
-    free(Rk_ngbrs);
-
-    /* free region stats */
-    G_free(Ri_rs.mean);
-    G_free(Ri_rs.sum);
-    G_free(Rk_rs.mean);
-    G_free(Rk_rs.sum);
-    G_free(Rk_bestn_rs.mean);
-    G_free(Rk_bestn_rs.sum);
-
-    return TRUE;
-}
-
-static int find_best_neighbor(struct ngbr_stats *Ri,
-			      struct reg_stats *Ri_rs,
-			      struct NB_TREE *Ri_ngbrs, 
-			      struct ngbr_stats *Rk, 
-			      struct reg_stats *Rk_rs,
-			      double *sim, int clear_cand,
-			      struct globals *globals)
-{
-    int n, n_ngbrs, no_check, cmp;
-    struct rc ngbr_rc, next;
-    struct rclist rilist;
-    double tempsim;
-    int neighbors[8][2];
-    struct RB_TREE *no_check_tree;	/* cells already checked */
-    struct reg_stats *rs_found;
-
-    G_debug(4, "find_best_neighbor()");
-
-    if (Ri->id != Ri_rs->id)
-	G_fatal_error("Ri = %d but Ri_rs = %d", Ri->id, Ri_rs->id);
-    if (Ri->id <= 0)
-	G_fatal_error("Ri is %d", Ri->id);
-    if (Ri_rs->id <= 0)
-	G_fatal_error("Ri_rs is %d", Ri_rs->id);
-
-    /* dynamics of the region growing algorithm
-     * some regions are growing fast, often surrounded by many small regions
-     * not all regions are equally growing, some will only grow at a later stage ? */
-
-    /* *** initialize data *** */
-
-    no_check_tree = rbtree_create(compare_rc, sizeof(struct rc));
-    ngbr_rc.row = Ri->row;
-    ngbr_rc.col = Ri->col;
-    rbtree_insert(no_check_tree, &ngbr_rc);
-
-    nbtree_clear(Ri_ngbrs);
-    n_ngbrs = 0;
-    /* TODO: add size of largest region to reg_tree, use this as min */
-    Rk->count = globals->ncells + 1;
-    Rk->id = Rk_rs->id = 0;
-
-    /* go through segment, spreading outwards from head */
-    rclist_init(&rilist);
-
-    /* check neighbors of start cell */
-    next.row = Ri->row;
-    next.col = Ri->col;
-    do {
-	/* remove from candidates */
-	if (clear_cand)
-	    FLAG_UNSET(globals->candidate_flag, next.row, next.col);
-
-	G_debug(5, "find_pixel_neighbors for row: %d , col %d",
-		next.row, next.col);
-
-	globals->find_neighbors(next.row, next.col, neighbors);
-	
-	n = globals->nn - 1;
-	do {
-
-	    globals->ns.row = ngbr_rc.row = neighbors[n][0];
-	    globals->ns.col = ngbr_rc.col = neighbors[n][1];
-
-	    no_check = (ngbr_rc.row < globals->row_min ||
-	                ngbr_rc.row >= globals->row_max ||
-		        ngbr_rc.col < globals->col_min ||
-			ngbr_rc.col >= globals->col_max);
-
-	    n_ngbrs += no_check;
-
-	    if (!no_check) {
-
-		no_check = ((FLAG_GET(globals->null_flag, ngbr_rc.row,
-							  ngbr_rc.col)) != 0);
-		n_ngbrs += no_check;
-
-		if (!no_check) {
-
-		    if (!rbtree_find(no_check_tree, &ngbr_rc)) {
-
-			/* not yet checked, don't check it again */
-			rbtree_insert(no_check_tree, &ngbr_rc);
-
-			/* get neighbor ID */
-			Segment_get(&globals->rid_seg,
-				    (void *) &(globals->ns.id),
-				    ngbr_rc.row, ngbr_rc.col);
-
-			if (globals->ns.id == Ri->id) {
-
-			    /* want to check this neighbor's neighbors */
-			    rclist_add(&rilist, ngbr_rc.row, ngbr_rc.col);
-			}
-			else {
-
-			    /* new neighbor ? */
-			    if (nbtree_find(Ri_ngbrs, &globals->ns) == NULL) {
-
-				/* get values for Rk */
-				globals->rs.id = globals->ns.id;
-				rs_found = rgtree_find(globals->reg_tree,
-						       &(globals->rs));
-				if (!rs_found) {
-				    /* region stats are not in search tree */
-				    rs_found = &(globals->rs);
-				    calculate_reg_stats(ngbr_rc.row, ngbr_rc.col,
-							rs_found, globals);
-				}
-				globals->ns.mean = rs_found->mean;
-				globals->ns.count = rs_found->count;
-				/* globals->ns is now complete */
-
-				tempsim = (globals->calculate_similarity)(Ri, &globals->ns, globals);
-
-				cmp = compare_double(tempsim, *sim);
-				if (cmp == -1) {
-				    *sim = tempsim;
-				    /* copy temp Rk to Rk */
-				    Rk->row = ngbr_rc.row;
-				    Rk->col = ngbr_rc.col;
-
-				    Rk->id = rs_found->id;
-				    Rk->count = rs_found->count;
-				    memcpy(Rk->mean, rs_found->mean,
-				           globals->datasize);
-
-				    Rk_rs->id = Rk->id;
-				    Rk_rs->count = Rk->count;
-				    memcpy(Rk_rs->mean, rs_found->mean,
-				           globals->datasize);
-				    memcpy(Rk_rs->sum, rs_found->sum,
-				           globals->datasize);
-				}
-				else if (cmp == 0) {
-				    /* resolve ties: prefer smaller regions */
-
-				    if (Rk->count > globals->ns.count) {
-					/* copy temp Rk to Rk */
-					Rk->row = ngbr_rc.row;
-					Rk->col = ngbr_rc.col;
-
-					Rk->id = rs_found->id;
-					Rk->count = rs_found->count;
-					memcpy(Rk->mean, rs_found->mean,
-					       globals->datasize);
-
-					Rk_rs->id = Rk->id;
-					Rk_rs->count = Rk->count;
-					memcpy(Rk_rs->mean, rs_found->mean,
-					       globals->datasize);
-					memcpy(Rk_rs->sum, rs_found->sum,
-					       globals->datasize);
-				    }
-				}
-
-				n_ngbrs++;
-				nbtree_insert(Ri_ngbrs, &globals->ns);
-			    }
-			}
-		    }
-		}
-	    }
-	} while (n--);    /* end do loop - next neighbor */
-    } while (rclist_drop(&rilist, &next));   /* while there are cells to check */
-
-    /* clean up */
-    rbtree_destroy(no_check_tree);
-
-    return n_ngbrs;
-}
-
 void find_four_neighbors(int p_row, int p_col,
 			        int neighbors[8][2])
 {
@@ -924,721 +193,3 @@ double calculate_manhattan_similarity(struct ngbr_stats *Ri,
 
     return val;
 }
-
-double calculate_shape(struct reg_stats *rsi, struct reg_stats *rsk,
-                       int nshared, struct globals *globals)
-{
-     /* 
-     In the eCognition literature, we find that the key factor in the
-     multi-scale segmentation algorithm used by Definiens is the scale
-     factor f:
-
-     f = W.Hcolor + (1 - W).Hshape
-     Hcolor = sum(b = 1:nbands)(Wb.SigmaB)
-     Hshape = Ws.Hcompact + (1 - Ws).Hsmooth
-     Hcompact = PL/sqrt(Npx)
-     Hsmooth = PL/Pbbox
-
-     Where 
-     W is a user-defined weight of importance of object radiometry vs
-     shape (usually .9 vs .1)
-     Wb is the weigh given to band B
-     SigmaB is the std dev of the object for band b
-     Ws is a user-defined weight giving the importance of compactedness vs smoothness
-     PL is the perimeter length of the object
-     Npx the number of pixels within the object
-     Pbbox the perimeter of the bounding box of the object.
-     */
-     
-     /* here we calculate a shape index for the new object to be created
-      * the radiometric index ranges from 0 to 1, 0 = identical
-      * with the shape index we want to favour compact and smooth opjects
-      * thus the shape index should range from 0 to 1,
-      * 0 = maximum compactness and smoothness */
-
-    double smooth, compact;
-    int pl, pbbox, count;
-    double bboxdiag;
-    int pl1, pl2, count1, count2;
-    int e1, n1, s1, w1, e2, n2, s2, w2, ns_extent, ew_extent;
-
-    pl = pl1 + pl2 - nshared;
-    
-    ns_extent = MAX(n1, n2) - MIN(s1, s2);
-    ew_extent = MAX(e1, e2) - MIN(w1, w2);
-
-    pbbox = 2 * (ns_extent + ew_extent);
-
-    
-    /* Smoothness Hsmooth = PL / Pbbox
-     * the smallest possible value would be 
-     * the diagonal divided by the bbox perimeter
-     * invert such that the largest possible value would be
-     * the bbox perimeter divided by the diagonal
-     */
-
-    bboxdiag = sqrt(ns_extent * ns_extent + ew_extent * ew_extent);
-    smooth = 1. - (double)bboxdiag / pl; /* smaller -> smoother */
-    
-    count = count1 + count2;
-    
-    /* compactness Hcompact = PL / sqrt(Npx)
-     * a circle is the most compact form
-     * Npx = M_PI * r * r;
-     * r = sqrt(Npx / M_pi) 
-     * pl_circle = 2 * sqrt(count * M_PI);
-     * compact = 1 - pl_circle / (pl * sqrt(count);
-     */
-    /* compact = 1 - 2 * sqrt(M_PI) / pl; */
-
-    /* PL max = Npx */
-    /* Hcompact max = Npx / sqrt(Npx) = sqrt(Npx)
-     * Hcompact / Hcompact max = (PL / sqrt(Npx)) / sqrt(Npx)
-     *                         = PL / Npx
-     */
-    compact = (double)pl / count; /* smaller -> more compact */
-
-    return globals->smooth_weight * smooth + (1 - globals->smooth_weight) * compact;
-}
-
-
-static int search_neighbors(struct ngbr_stats *Ri,
-			    struct reg_stats *Ri_rs,
-                            struct NB_TREE *Ri_ngbrs, 
-			    double *sim,
-			    struct ngbr_stats *Rk,
-			    struct reg_stats *Rk_rs,
-		            struct globals *globals)
-{
-    double tempsim, *dp;
-    struct NB_TRAV travngbr;
-    struct ngbr_stats *next;
-    int cmp;
-
-    G_debug(4, "search_neighbors");
-
-    if (Ri->id != Ri_rs->id)
-	G_fatal_error("Ri = %d but Ri_rs = %d", Ri->id, Ri_rs->id);
-    if (Ri->id <= 0)
-	G_fatal_error("Ri is %d", Ri->id);
-    if (Ri_rs->id <= 0)
-	G_fatal_error("Ri_rs is %d", Ri_rs->id);
-
-    nbtree_init_trav(&travngbr, Ri_ngbrs);
-    Rk->count = globals->ncells + 1;
-    Rk->id = Rk_rs->id = 0;
-
-    while ((next = nbtree_traverse(&travngbr))) {
-	tempsim = (globals->calculate_similarity)(Ri, next, globals);
-
-	cmp = compare_double(tempsim, *sim);
-	if (cmp == -1) {
-	    *sim = tempsim;
-
-	    dp = Rk->mean;
-	    *Rk = *next;
-	    Rk->mean = dp;
-	    memcpy(Rk->mean, next->mean, globals->datasize);
-	}
-	else if (cmp == 0) {
-	    /* resolve ties, prefer smaller regions */
-	    G_debug(4, "resolve ties");
-
-	    if (Rk->count > next->count) {
-		dp = Rk->mean;
-		*Rk = *next;
-		Rk->mean = dp;
-		memcpy(Rk->mean, next->mean, globals->datasize);
-	    }
-	}
-    }
-    Rk_rs->id = Rk->id;
-
-    if (Rk->id != 0) {
-	fetch_reg_stats(Rk->row, Rk->col, Rk_rs, globals);
-    }
-
-    return 1;
-}
-
-int update_band_vals(int row, int col, struct reg_stats *rs,
-                     struct globals *globals) {
-    struct rc next, ngbr_rc;
-    int neighbors[8][2];
-    int rid, count, n;
-    
-    /* update band values with sum */
-    /* rs->id must be set */
-    G_debug(4, "update_band_vals()");
-
-    if (rs->count >= globals->min_reg_size) {
-	G_fatal_error(_("Region stats should go in tree, %d >= %d"),
-	              rs->count, globals->min_reg_size);
-    }
-
-    Segment_get(&globals->rid_seg, (void *) &rid, row, col);
-    
-    if (rid != rs->id) {
-	G_fatal_error(_("Region ids are different"));
-    }
-
-    if (rs->count == 1) {
-	G_warning(_("Region consists of only one cell, nothing to update"));
-	return rs->count;
-    }
-
-    /* update region stats */
-    Segment_put(&globals->bands_seg, (void *)rs->sum, row, col);
-    count = 1;
-
-    /* fast version for rs->count == 2 */
-    if (rs->count == 2) {
-	globals->find_neighbors(row, col, neighbors);
-
-	n = globals->nn - 1;
-	do {
-
-	    ngbr_rc.row = neighbors[n][0];
-	    ngbr_rc.col = neighbors[n][1];
-
-	    if (ngbr_rc.row < globals->row_min || ngbr_rc.row >= globals->row_max ||
-		ngbr_rc.col < globals->col_min || ngbr_rc.col >= globals->col_max) {
-		continue;
-	    }
-
-	    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
-
-		Segment_get(&globals->rid_seg, (void *) &rid,
-			    ngbr_rc.row, ngbr_rc.col);
-		
-		if (rid == rs->id) {
-
-		    /* update region stats */
-		    Segment_put(&globals->bands_seg,
-				(void *)rs->sum,
-				ngbr_rc.row, ngbr_rc.col);
-
-		    count++;
-
-		    /* only one other neighbor can have the same ID
-		     * deactivate for debugging */
-		    break;
-		}
-	    }
-	} while (n--);
-	if (count > 2)
-	    G_fatal_error(_("Region size is larger than 2: %d"), count);
-    }
-    else if (rs->count > 2) {
-	struct RB_TREE *rc_check_tree;	/* cells already checked */
-	struct rclist rlist;
-	int no_check;
-
-	/* go through region, spreading outwards from head */
-	rclist_init(&rlist);
-
-	rc_check_tree = rbtree_create(compare_rc, sizeof(struct rc));
-	ngbr_rc.row = row;
-	ngbr_rc.col = col;
-	rbtree_insert(rc_check_tree, &ngbr_rc);
-
-	next.row = row;
-	next.col = col;
-	do {
-	    G_debug(5, "find_pixel_neighbors for row: %d , col %d",
-		    next.row, next.col);
-
-	    globals->find_neighbors(next.row, next.col, neighbors);
-
-	    n = globals->nn - 1;
-	    do {
-
-		ngbr_rc.row = neighbors[n][0];
-		ngbr_rc.col = neighbors[n][1];
-
-		no_check = (ngbr_rc.row < 0 || ngbr_rc.row >= globals->nrows ||
-		    ngbr_rc.col < 0 || ngbr_rc.col >= globals->ncols);
-
-		if (!no_check) {
-		    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
-		    
-			/* already checked ? */
-			if (!rbtree_find(rc_check_tree, &ngbr_rc)) {
-
-			    /* not yet checked, don't check it again */
-			    rbtree_insert(rc_check_tree, &ngbr_rc);
-
-			    Segment_get(&globals->rid_seg, (void *) &rid,
-					ngbr_rc.row, ngbr_rc.col);
-			    
-			    if (rid == rs->id) {
-
-				/* want to check this neighbor's neighbors */
-				rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
-
-				/* update region stats */
-				Segment_put(&globals->bands_seg,
-					    (void *)rs->sum,
-					    ngbr_rc.row, ngbr_rc.col);
-				count++;
-			    }
-			}
-		    }
-		}
-	    } while (n--);
-	} while (rclist_drop(&rlist, &next));
-
-	/* clean up */
-	rbtree_destroy(rc_check_tree);
-	rclist_destroy(&rlist);
-    }
-    
-    if (count != rs->count) {
-	G_fatal_error(_("Region size is %d, should be %d"),
-	              count, rs->count);
-    }
-
-    return count;
-}
-
-
-static int merge_regions(struct ngbr_stats *Ri, struct reg_stats *Ri_rs,
-		         struct ngbr_stats *Rk, struct reg_stats *Rk_rs,
-		         int do_cand, struct globals *globals)
-{
-    int n;
-    int R_id;
-    struct rc next, ngbr_rc;
-    struct rclist rlist;
-    int neighbors[8][2];
-    struct reg_stats *new_rs;
-
-    G_debug(4, "merge_regions");
-
-    /* Ri ID must always be positive */
-    if (Ri_rs->id < 1)
-	G_fatal_error("Ri id is not positive: %d", Ri_rs->id);
-    /* if Rk ID is negative (no seed), Rk count must be 1  */
-    if (Rk_rs->id < 1 && Rk_rs->count > 1)
-	G_fatal_error("Rk id is not positive: %d, but count is > 1: %d",
-	              Rk_rs->id, Rk_rs->count);
-
-    /* update segment id and clear candidate flag */
-    
-    /* cases
-     * Ri, Rk are not in the tree
-     * Ri, Rk are both in the tree
-     * Ri is in the tree, Rk is not
-     * Rk is in the tree, Ri is not
-     */
-
-    /* Ri_rs, Rk_rs must always be set */
-    /* add Rk */
-    Ri_rs->count += Rk_rs->count;
-    n = globals->nbands - 1;
-    do {
-	Ri_rs->sum[n] += Rk_rs->sum[n];
-	Ri_rs->mean[n] = Ri_rs->sum[n] / Ri_rs->count;
-    } while (n--);
-
-    if (Ri->count >= Rk->count) {
-
-	if (Rk->count >= globals->min_reg_size) {
-	    if (rgtree_find(globals->reg_tree, Rk_rs) == NULL)
-		G_fatal_error("merge regions: Rk should be in tree");
-	    /* remove from tree */
-	    rgtree_remove(globals->reg_tree, Rk_rs);
-	}
-    }
-    else {
-
-	if (Ri->count >= globals->min_reg_size) {
-	    if (rgtree_find(globals->reg_tree, Ri_rs) == NULL)
-		G_fatal_error("merge regions: Ri should be in tree");
-	    /* remove from tree */
-	    rgtree_remove(globals->reg_tree, Ri_rs);
-	}
-
-	/* magic switch */
-	Ri_rs->id = Rk->id;
-    }
-
-    if ((new_rs = rgtree_find(globals->reg_tree, Ri_rs)) != NULL) {
-	/* update stats for tree item */
-	new_rs->count = Ri_rs->count;
-	memcpy(new_rs->mean, Ri_rs->mean, globals->datasize);
-	memcpy(new_rs->sum, Ri_rs->sum, globals->datasize);
-    }
-    else if (Ri_rs->count >= globals->min_reg_size) {
-	/* add to tree */
-	rgtree_insert(globals->reg_tree, Ri_rs);
-    }
-
-    Ri->count = Ri_rs->count;
-    memcpy(Ri->mean, Ri_rs->mean, globals->datasize);
-
-    if (Ri->id == Ri_rs->id) {
-	/* Ri is already updated, including candidate flags
-	 * need to clear candidate flag for Rk and set new id */
-	 
-	/* the actual merge: change region id */
-	Segment_put(&globals->rid_seg, (void *) &Ri->id, Rk->row, Rk->col);
-
-	if (do_cand) {
-	    do_cand = 0;
-	    if (FLAG_GET(globals->candidate_flag, Rk->row, Rk->col)) {
-		/* clear candidate flag */
-		FLAG_UNSET(globals->candidate_flag, Rk->row, Rk->col);
-		globals->candidate_count--;
-		do_cand = 1;
-	    }
-	}
-
-	rclist_init(&rlist);
-	rclist_add(&rlist, Rk->row, Rk->col);
-
-	while (rclist_drop(&rlist, &next)) {
-
-	    if (do_cand) {
-		/* clear candidate flag */
-		FLAG_UNSET(globals->candidate_flag, next.row, next.col);
-		globals->candidate_count--;
-	    }
-
-	    globals->find_neighbors(next.row, next.col, neighbors);
-	    
-	    n = globals->nn - 1;
-	    do {
-
-		ngbr_rc.row = neighbors[n][0];
-		ngbr_rc.col = neighbors[n][1];
-
-		if (ngbr_rc.row >= globals->row_min &&
-		    ngbr_rc.row < globals->row_max &&
-		    ngbr_rc.col >= globals->col_min &&
-		    ngbr_rc.col < globals->col_max) {
-
-		    if (!(FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col))) {
-
-			Segment_get(&globals->rid_seg, (void *) &R_id,
-			            ngbr_rc.row, ngbr_rc.col);
-
-			if (R_id == Rk->id) {
-			    /* the actual merge: change region id */
-			    Segment_put(&globals->rid_seg, (void *) &Ri->id, ngbr_rc.row, ngbr_rc.col);
-
-			    /* want to check this neighbor's neighbors */
-			    rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
-			}
-		    }
-		}
-	    } while (n--);
-	}
-	rclist_destroy(&rlist);
-    }
-    else {
-	/* Rk was larger than Ri */
-
-	/* clear candidate flag for Rk */
-	if (do_cand && FLAG_GET(globals->candidate_flag, Rk->row, Rk->col)) {
-	    set_candidate_flag(Rk, FALSE, globals);
-	}
-
-	/* update region id for Ri */
-
-	/* the actual merge: change region id */
-	Segment_put(&globals->rid_seg, (void *) &Rk->id, Ri->row, Ri->col);
-
-	rclist_init(&rlist);
-	rclist_add(&rlist, Ri->row, Ri->col);
-
-	while (rclist_drop(&rlist, &next)) {
-
-	    globals->find_neighbors(next.row, next.col, neighbors);
-	    
-	    n = globals->nn - 1;
-	    do {
-
-		ngbr_rc.row = neighbors[n][0];
-		ngbr_rc.col = neighbors[n][1];
-
-		if (ngbr_rc.row >= globals->row_min &&
-		    ngbr_rc.row < globals->row_max &&
-		    ngbr_rc.col >= globals->col_min &&
-		    ngbr_rc.col < globals->col_max) {
-
-
-		    if (!(FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col))) {
-
-			Segment_get(&globals->rid_seg, (void *) &R_id, ngbr_rc.row, ngbr_rc.col);
-
-			if (R_id == Ri->id) {
-			    /* the actual merge: change region id */
-			    Segment_put(&globals->rid_seg, (void *) &Rk->id, ngbr_rc.row, ngbr_rc.col);
-
-			    /* want to check this neighbor's neighbors */
-			    rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
-			}
-		    }
-		}
-	    } while (n--);
-	}
-	rclist_destroy(&rlist);
-
-	Ri->id = Ri_rs->id;   /* == Rk->id */
-	if (Ri->id != Rk->id)
-	    G_fatal_error("Ri ID should be set to Rk ID");
-    }
-    
-    if (Rk->id > 0)
-	globals->n_regions--;
-
-    /* disable Rk */
-    Rk->id = Rk_rs->id = 0;
-    Rk->count = Rk_rs->count = 0;
-    
-    /* update Ri */
-    Ri->id = Ri_rs->id;
-
-    if (Ri_rs->count < globals->min_reg_size) {
-	update_band_vals(Ri->row, Ri->col, Ri_rs, globals);
-    }
-
-    return TRUE;
-}
-
-static int set_candidate_flag(struct ngbr_stats *head, int value, struct globals *globals)
-{
-    int n, R_id;
-    struct rc next, ngbr_rc;
-    struct rclist rlist;
-    int neighbors[8][2];
-
-    G_debug(4, "set_candidate_flag");
-
-    if (!(FLAG_GET(globals->candidate_flag, head->row, head->col)) != value) {
-	G_warning(_("Candidate flag is already %s"), value ? _("set") : _("unset"));
-	return FALSE;
-    }
-
-    rclist_init(&rlist);
-    rclist_add(&rlist, head->row, head->col);
-
-    /* (un)set candidate flag */
-    if (value == TRUE) {
-	FLAG_SET(globals->candidate_flag, head->row, head->col);
-	globals->candidate_count++;
-    }
-    else {
-	FLAG_UNSET(globals->candidate_flag, head->row, head->col);
-	globals->candidate_count--;
-    }
-
-    while (rclist_drop(&rlist, &next)) {
-
-	globals->find_neighbors(next.row, next.col, neighbors);
-	
-	n = globals->nn - 1;
-	do {
-
-	    ngbr_rc.row = neighbors[n][0];
-	    ngbr_rc.col = neighbors[n][1];
-
-	    if (ngbr_rc.row >= globals->row_min &&
-	        ngbr_rc.row < globals->row_max &&
-		ngbr_rc.col >= globals->col_min &&
-		ngbr_rc.col < globals->col_max) {
-
-		if (!(FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col))) {
-
-		    if (!(FLAG_GET(globals->candidate_flag, ngbr_rc.row, ngbr_rc.col)) == value) {
-
-			Segment_get(&globals->rid_seg, (void *) &R_id, ngbr_rc.row, ngbr_rc.col);
-
-			if (R_id == head->id) {
-			    /* want to check this neighbor's neighbors */
-			    rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
-
-			    /* (un)set candidate flag */
-			    if (value == TRUE) {
-				FLAG_SET(globals->candidate_flag, ngbr_rc.row, ngbr_rc.col);
-				globals->candidate_count++;
-			    }
-			    else {
-				FLAG_UNSET(globals->candidate_flag, ngbr_rc.row, ngbr_rc.col);
-				globals->candidate_count--;
-			    }
-			}
-		    }
-		}
-	    }
-	} while (n--);
-    }
-
-    return TRUE;
-}
-
-int fetch_reg_stats(int row, int col, struct reg_stats *rs, 
-                           struct globals *globals)
-{
-    struct reg_stats *rs_found;
-    
-    if (rs->id <= 0)
-	G_fatal_error("fetch_reg_stats(): invalid region id %d", rs->id);
-
-    if ((rs_found = rgtree_find(globals->reg_tree, rs)) != NULL) {
-
-	memcpy(rs->mean, rs_found->mean, globals->datasize);
-	memcpy(rs->sum, rs_found->sum, globals->datasize);
-	rs->count = rs_found->count;
-
-	return 1;
-    }
-
-    calculate_reg_stats(row, col, rs, globals);
-
-    return 2;
-}
-
-static int calculate_reg_stats(int row, int col, struct reg_stats *rs, 
-                         struct globals *globals)
-{
-    int ret = 0;
-
-    G_debug(4, "calculate_reg_stats()");
-
-    if (rs->id <= 0)
-	G_fatal_error("Invalid region id %d", rs->id);
-
-    Segment_get(&globals->bands_seg, (void *)globals->bands_val,
-		row, col);
-    rs->count = 1;
-    memcpy(rs->sum, globals->bands_val, globals->datasize);
-
-    if (globals->min_reg_size < 3)
-	ret = 1;
-    else if (globals->min_reg_size == 3) {
-	int n, rid;
-	struct rc ngbr_rc;
-	int neighbors[8][2];
-
-	globals->find_neighbors(row, col, neighbors);
-
-	n = globals->nn - 1;
-	do {
-
-	    ngbr_rc.row = neighbors[n][0];
-	    ngbr_rc.col = neighbors[n][1];
-
-	    if (ngbr_rc.row < globals->row_min || ngbr_rc.row >= globals->row_max ||
-		ngbr_rc.col < globals->col_min || ngbr_rc.col >= globals->col_max) {
-		continue;
-	    }
-
-	    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
-
-		Segment_get(&globals->rid_seg, (void *) &rid,
-			    ngbr_rc.row, ngbr_rc.col);
-		
-		if (rid == rs->id) {
-
-		    /* update region stats */
-		    rs->count++;
-
-		    /* only one other neighbor can have the same ID
-		     * deactivate for debugging */
-		    break;
-		}
-	    }
-	} while (n--);
-	if (rs->count > 2)
-	    G_fatal_error(_("Region size is larger than 2: %d"), rs->count);
-
-	ret = 2;
-    }
-    else if (globals->min_reg_size > 3) {
-	/* rs->id must be set */
-	struct RB_TREE *rc_check_tree;	/* cells already checked */
-	int n, rid;
-	struct rc ngbr_rc, next;
-	struct rclist rilist;
-	int neighbors[8][2];
-	int no_check;
-	
-	/* go through region, spreading outwards from head */
-	rclist_init(&rilist);
-
-	rc_check_tree = rbtree_create(compare_rc, sizeof(struct rc));
-	ngbr_rc.row = row;
-	ngbr_rc.col = col;
-	rbtree_insert(rc_check_tree, &ngbr_rc);
-
-	next.row = row;
-	next.col = col;
-	do {
-	    G_debug(5, "find_pixel_neighbors for row: %d , col %d",
-		    next.row, next.col);
-
-	    globals->find_neighbors(next.row, next.col, neighbors);
-
-	    n = globals->nn - 1;
-	    do {
-
-		ngbr_rc.row = neighbors[n][0];
-		ngbr_rc.col = neighbors[n][1];
-
-		no_check = (ngbr_rc.row < globals->row_min ||
-			    ngbr_rc.row >= globals->row_max ||
-			    ngbr_rc.col < globals->col_min ||
-			    ngbr_rc.col >= globals->col_max);
-
-		if (!no_check) {
-		    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
-		    
-			/* already checked ? */
-			if (!rbtree_find(rc_check_tree, &ngbr_rc)) {
-
-			    /* not yet checked, don't check it again */
-			    rbtree_insert(rc_check_tree, &ngbr_rc);
-
-			    Segment_get(&globals->rid_seg, (void *) &rid,
-					ngbr_rc.row, ngbr_rc.col);
-			    
-			    if (rid == rs->id) {
-
-				/* want to check this neighbor's neighbors */
-				rclist_add(&rilist, ngbr_rc.row, ngbr_rc.col);
-
-				/* update region stats */
-				rs->count++;
-			    }
-			}
-		    }
-		}
-	    } while (n--);
-	} while (rclist_drop(&rilist, &next));
-
-	/* clean up */
-	rbtree_destroy(rc_check_tree);
-	rclist_destroy(&rilist);
-
-	ret = 3;
-    }
-
-    /* band mean */
-    if (rs->count == 1)
-	memcpy(rs->mean, rs->sum, globals->datasize);
-    else {
-	int i = globals->nbands - 1;
-
-	do {
-	    rs->mean[i] = rs->sum[i] / rs->count;
-	} while (i--);
-    }
-    
-    if (rs->count >= globals->min_reg_size)
-	G_fatal_error(_("Region of size %d should be in search tree"),
-		      rs->count);
-    
-    return ret;
-}
diff --git a/imagery/i.segment/i.segment.html b/imagery/i.segment/i.segment.html
index 5e20373..d15043e 100644
--- a/imagery/i.segment/i.segment.html
+++ b/imagery/i.segment/i.segment.html
@@ -267,5 +267,5 @@ Eric Momsen - North Dakota State University<br>
 Markus Metz (GSoC Mentor)
 
 <p>
-<i>Last changed: $Date: 2016-07-01 00:19:03 +0200 (Fri, 01 Jul 2016) $</i>
+<i>Last changed: $Date: 2016-07-01 00:17:58 +0200 (Fri, 01 Jul 2016) $</i>
 
diff --git a/imagery/i.segment/iseg.h b/imagery/i.segment/iseg.h
index f2716ee..c08eb1d 100644
--- a/imagery/i.segment/iseg.h
+++ b/imagery/i.segment/iseg.h
@@ -19,6 +19,10 @@
 
 /* #def _OR_SHAPE_ */
 
+/* methods */
+#define ORM_RG 1	/* region growing */
+#define ORM_MS 2	/* mean shift */
+#define ORM_WS 3	/* watershed */
 
 /* row/col list */
 struct rc
@@ -33,6 +37,7 @@ struct rclist
     struct rc *tail, *head;
 };
 
+
 /* input and output files, as well as some other processing info */
 struct globals
 {
@@ -40,7 +45,8 @@ struct globals
     char *image_group;
     int weighted;		/* 0 if false/not selected, so we should scale input.
 				 * 1 if the scaling should be skipped */
-    int method;			/* Segmentation method */
+    int method;			/* Segmentation method code */
+    int (*method_fn)();		/* Segmentation method function */
     int nn;			/* number of neighbors, 4 or 8 */
     double max_diff;		/* max possible difference */
     double alpha;		/* similarity threshold */
@@ -104,7 +110,6 @@ int open_files(struct globals *);
 
 /* create_isegs.c */
 int create_isegs(struct globals *);
-int region_growing(struct globals *);
 void find_four_neighbors(int, int, int[][2]);
 void find_eight_neighbors(int, int, int[8][2]);
 double calculate_euclidean_similarity(struct ngbr_stats *, 
@@ -122,6 +127,14 @@ int update_band_vals(int, int, struct reg_stats *, struct globals *);
 /* void calculate_reg_stats(int, int, struct reg_stats *, 
                          struct globals *); */
 
+/* region_growing.c */
+int region_growing(struct globals *);
+
+/* mean_shift.c */
+int mean_shift(struct globals *);
+
+/* watershed.c */
+int watershed(struct globals *);
 
 /* rclist.c */
 void rclist_init(struct rclist *);
diff --git a/imagery/i.segment/mean_shift.c b/imagery/i.segment/mean_shift.c
new file mode 100644
index 0000000..e1f75e2
--- /dev/null
+++ b/imagery/i.segment/mean_shift.c
@@ -0,0 +1,114 @@
+/* PURPOSE:      Develop the image segments */
+
+
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/raster.h>
+#include <grass/segment.h>	/* segmentation library */
+#include <grass/rbtree.h>	/* Red Black Tree library functions */
+#include "iseg.h"
+
+/* standard gauss funtion:
+ * a * exp(-(x - m)^2 / (2 * stddev^2)
+ * a is not needed because the sum of weights is calculated for each 
+ * sampling window
+ * (x - m)^2 is the squared difference = diff2
+ * stddev^2 is the variance
+ * this code can be further simplified, e.g. by supplying 2 * var instead 
+ * of var
+ * 
+ * the standard deviation is the bandwidth
+ * */
+ 
+static double gauss_kernel(double diff2, double var)
+{
+    return exp(-diff2 / (2 * var));
+}
+
+
+int mean_shift(struct globals *globals)
+{
+    int row, col, t;
+    int n_changes;
+    double alpha2;
+    struct ngbr_stats Rin, Rout;
+    double diff2;
+
+    G_fatal_error(_("Mean shift is not yet implemented"));
+    return FALSE;
+
+
+    Rin.mean = G_malloc(globals->datasize);
+    Rout.mean = G_malloc(globals->datasize);
+
+    /* TODO: need another segment structure holding output
+     * for mean shift, output of the previous iteration becomes input of the next iteration
+     * initially, input and output are original band values */
+
+    alpha2 = globals->alpha * globals->alpha;
+    
+    t = 0;
+    n_changes = 1;
+    while (t < globals->end_t && n_changes > 0) {
+
+	G_message(_("Processing pass %d..."), ++t);
+
+	n_changes = 0;
+	globals->candidate_count = 0;
+	flag_clear_all(globals->candidate_flag);
+
+	/* Set candidate flag to true/1 for all non-NULL cells */
+	for (row = globals->row_min; row < globals->row_max; row++) {
+	    for (col = globals->col_min; col < globals->col_max; col++) {
+		if (!(FLAG_GET(globals->null_flag, row, col))) {
+		    
+		    FLAG_SET(globals->candidate_flag, row, col);
+		    globals->candidate_count++;
+		}
+	    }
+	}
+
+	G_debug(4, "Starting to process %ld candidate cells",
+		globals->candidate_count);
+
+	/*process candidate cells */
+	G_percent_reset();
+	for (row = globals->row_min; row < globals->row_max; row++) {
+	    G_percent(row - globals->row_min,
+	              globals->row_max - globals->row_min, 4);
+	    for (col = globals->col_min; col < globals->col_max; col++) {
+		if (!(FLAG_GET(globals->candidate_flag, row, col)))
+		    continue;
+
+		/* get current band values */
+		Segment_get(&globals->bands_seg, (void *)Rin.mean,
+			    row, col);
+
+		/* adapt initial spatial and range bandwiths */
+
+		/* calculate new band values */
+		
+		/* if the squared difference between old and new band values 
+		 * is larger than alpha2, then increase n_changes */
+		
+		diff2 = (globals->calculate_similarity)(&Rin, &Rout, globals);
+		if (diff2 > alpha2)
+		    n_changes++;
+	    }
+	}
+    }
+    if (n_changes > 1)
+	G_message(_("Mean shift stopped at %d due to reaching max iteration limit, more changes may be possible"), t);
+    else
+	G_message(_("Mean shift converged after %d iterations"), t);
+    
+    /* identify connected components */
+    
+    return TRUE;
+}
+
diff --git a/imagery/i.segment/parse_args.c b/imagery/i.segment/parse_args.c
index 14a5876..bc0baec 100644
--- a/imagery/i.segment/parse_args.c
+++ b/imagery/i.segment/parse_args.c
@@ -38,6 +38,11 @@ int parse_args(int argc, char *argv[], struct globals *globals)
     method->required = NO;
     method->answer = "region_growing";
     method->options = "region_growing";
+    /*
+      Watershed and Mean Shift methods disabled, it's not implemented yet, see 
+      https://trac.osgeo.org/grass/ticket/3181
+    method->options = "region_growing,mean_shift,watershed";
+    */
     method->description = _("Segmentation method");
     method->guisection = _("Settings");
 
@@ -152,13 +157,23 @@ int parse_args(int argc, char *argv[], struct globals *globals)
     if (globals->alpha <= 0 || globals->alpha >= 1)
 	G_fatal_error(_("Threshold should be > 0 and < 1"));
 
-    /* segmentation methods:  1 = region growing */
-    if (strcmp(method->answer, "region_growing") == 0)
-	globals->method = 1;
+    /* segmentation methods */
+    if (strcmp(method->answer, "region_growing") == 0) {
+	globals->method = ORM_RG;
+	globals->method_fn = region_growing;
+    }
+    else if (strcmp(method->answer, "mean_shift") == 0) {
+	globals->method = ORM_MS;
+	globals->method_fn = mean_shift;
+    }
+    else if (strcmp(method->answer, "watershed") == 0) {
+	globals->method = ORM_WS;
+	globals->method_fn = watershed;
+    }
     else
 	G_fatal_error(_("Unable to assign segmentation method"));
 
-    G_debug(1, "segmentation method: %d", globals->method);
+    G_debug(1, "segmentation method: %s", method->answer);
 
     /* distance methods for similarity measurement */
     if (strcmp(similarity->answer, "euclidean") == 0)
diff --git a/imagery/i.segment/region_growing.c b/imagery/i.segment/region_growing.c
new file mode 100644
index 0000000..b99b50e
--- /dev/null
+++ b/imagery/i.segment/region_growing.c
@@ -0,0 +1,1460 @@
+/* PURPOSE:      Develop the image segments */
+
+/* Currently only region growing is implemented */
+
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/raster.h>
+#include <grass/segment.h>	/* segmentation library */
+#include <grass/rbtree.h>	/* Red Black Tree library functions */
+#include "iseg.h"
+
+#define EPSILON 1.0e-8
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a,b) ( ((a) > (b)) ? (a) : (b) )
+#ifdef MIN
+#undef MIN
+#endif
+#define MIN(a,b) ( ((a) < (b)) ? (a) : (b) )
+
+/* internal functions */
+static int merge_regions(struct ngbr_stats *, struct reg_stats *, /* Ri */
+                         struct ngbr_stats *, struct reg_stats *, /* Rk */
+			 int,
+			 struct globals *);
+static int search_neighbors(struct ngbr_stats *,    /* Ri */
+			    struct reg_stats *,
+                            struct NB_TREE *,       /* Ri's neighbors */ 
+			    double *,               /* highest similarity */ 
+			    struct ngbr_stats *,    /* Ri's best neighbor */
+			    struct reg_stats *,
+		            struct globals *);
+static int set_candidate_flag(struct ngbr_stats *, int , struct globals *);
+static int find_best_neighbor(struct ngbr_stats *, struct reg_stats *,
+			      struct NB_TREE *, struct ngbr_stats *,
+			      struct reg_stats *, double *, int,
+			      struct globals *);
+static int calculate_reg_stats(int, int, struct reg_stats *, 
+                         struct globals *);
+
+/* function used by binary tree to compare items */
+static int compare_rc(const void *first, const void *second)
+{
+    struct rc *a = (struct rc *)first, *b = (struct rc *)second;
+
+    if (a->row < b->row)
+	return -1;
+    if (a->row > b->row)
+	return 1;
+
+    /* same row */
+    if (a->col < b->col)
+	return -1;
+    if (a->col > b->col)
+	return 1;
+    /* same row and col */
+    return 0;
+}
+
+static int compare_ints(const void *first, const void *second)
+{
+    int a = *(int *)first, b = *(int *)second;
+
+    return (a < b ? -1 : (a > b));
+}
+
+static int compare_double(double first, double second)
+{
+
+    /* standard comparison, gives good results */
+    if (first < second)
+	return -1;
+    return (first > second);
+
+    /* fuzzy comparison, 
+     * can give weird results if EPSILON is too large or 
+     * if the formula is changed because this is operating at the 
+     * limit of double fp precision */
+    if (first < second && first + first * EPSILON < second)
+	    return -1;
+    if (first > second && first > second + second * EPSILON)
+	    return 1;
+    return 0;
+}
+
+static int dump_Ri(struct ngbr_stats *Ri, struct reg_stats *Ri_rs, double *Ri_sim,
+                   double *Rk_sim, int *Ri_nn, int *Rk_nn, struct globals *globals)
+{
+    int i;
+
+    G_debug(0, "Ri, Ri_rs ID: %d, %d", Ri->id, Ri_rs->id);
+    G_debug(0, "Ri, Ri_rs count: %d, %d", Ri->count, Ri_rs->count);
+
+    for (i = 0; i < globals->nbands; i++) {
+	G_debug(0, "Ri, Ri_rs mean %d: %g, %g", i, Ri->mean[i], Ri_rs->mean[i]);
+	G_debug(0, "Ri_rs sum %d: %g", i, Ri_rs->sum[i]);
+    }
+    G_debug(0, "Ri nn: %d", *Ri_nn);
+    if (Rk_nn)
+	G_debug(0, "Rk nn: %d", *Rk_nn);
+    G_debug(0, "Ri similarity: %g", *Ri_sim);
+    if (Rk_sim)
+	G_debug(0, "Rk similarity: %g", *Rk_sim);
+
+    return 1;
+}
+
+
+int region_growing(struct globals *globals)
+{
+    int row, col, t;
+    double threshold, adjthresh, Ri_similarity, Rk_similarity;
+    double alpha2, divisor;		/* threshold parameters */
+    int n_merges, do_merge;		/* number of merges on that iteration */
+    int pathflag;		/* =1 if we didn't find mutually best neighbors, continue with Rk */
+    int candidates_only;
+    struct ngbr_stats Ri,
+                      Rk,
+	              Rk_bestn,         /* Rk's best neighbor */
+		      *next;
+    int Ri_nn, Rk_nn; /* number of neighbors for Ri/Rk */
+    struct NB_TREE *Ri_ngbrs, *Rk_ngbrs;
+    struct NB_TRAV travngbr;
+    /* not all regions are in the tree, but we always need reg_stats for Ri and Rk */
+    struct reg_stats Ri_rs, Rk_rs, Rk_bestn_rs;
+    double *dp;
+    struct NB_TREE *tmpnbtree;
+
+    G_verbose_message("Running region growing algorithm");
+
+    /* init neighbor stats */
+    Ri.mean = G_malloc(globals->datasize);
+    Rk.mean = G_malloc(globals->datasize);
+    Rk_bestn.mean = G_malloc(globals->datasize);
+
+    Ri_ngbrs = nbtree_create(globals->nbands, globals->datasize);
+    Rk_ngbrs = nbtree_create(globals->nbands, globals->datasize);
+
+    /* init region stats */
+    Ri_rs.mean = G_malloc(globals->datasize);
+    Ri_rs.sum = G_malloc(globals->datasize);
+    Rk_rs.mean = G_malloc(globals->datasize);
+    Rk_rs.sum = G_malloc(globals->datasize);
+    Rk_bestn_rs.mean = G_malloc(globals->datasize);
+    Rk_bestn_rs.sum = G_malloc(globals->datasize);
+    
+    t = 0;
+    n_merges = 2;
+
+    /* threshold calculation */
+    alpha2 = globals->alpha * globals->alpha;
+    threshold = alpha2;
+    G_debug(1, "Squared threshold: %g", threshold);
+
+    /* make the divisor a constant ? */
+    divisor = globals->nrows + globals->ncols;
+
+    while (t < globals->end_t && n_merges > 1) {
+
+	G_message(_("Processing pass %d..."), ++t);
+
+	n_merges = 0;
+	globals->candidate_count = 0;
+	flag_clear_all(globals->candidate_flag);
+
+	/* Set candidate flag to true/1 for all non-NULL cells */
+	for (row = globals->row_min; row < globals->row_max; row++) {
+	    for (col = globals->col_min; col < globals->col_max; col++) {
+		if (!(FLAG_GET(globals->null_flag, row, col))) {
+		    
+		    FLAG_SET(globals->candidate_flag, row, col);
+		    globals->candidate_count++;
+		}
+	    }
+	}
+
+	G_debug(4, "Starting to process %ld candidate cells",
+		globals->candidate_count);
+
+	/*process candidate cells */
+	G_percent_reset();
+	for (row = globals->row_min; row < globals->row_max; row++) {
+	    G_percent(row - globals->row_min,
+	              globals->row_max - globals->row_min, 4);
+	    for (col = globals->col_min; col < globals->col_max; col++) {
+		if (!(FLAG_GET(globals->candidate_flag, row, col)))
+		    continue;
+
+		pathflag = TRUE;
+		candidates_only = TRUE;
+
+		nbtree_clear(Ri_ngbrs);
+		nbtree_clear(Rk_ngbrs);
+
+		G_debug(4, "Next starting cell: row, %d, col, %d",
+			row, col);
+
+		/* First cell in Ri is current row/col */
+		Ri.row = row;
+		Ri.col = col;
+
+		/* get Ri's segment ID */
+		Segment_get(&globals->rid_seg, (void *)&Ri.id, Ri.row, Ri.col);
+		
+		if (Ri.id < 0)
+		    continue;
+		if (Ri.id == 0)
+		    G_fatal_error("Zero segment id at row %d, col %d", Ri.row, Ri.col);
+
+		/* find segment neighbors */
+		/* find Ri's best neighbor, clear candidate flag */
+		Ri_similarity = 2;
+
+		Ri_rs.id = Ri.id;
+		fetch_reg_stats(Ri.row, Ri.col, &Ri_rs, globals);
+		memcpy(Ri.mean, Ri_rs.mean, globals->datasize);
+		Ri.count = Ri_rs.count;
+
+		/* Ri is now complete */
+		G_debug(4, "Ri is now complete");
+
+		/* find best neighbor, get region stats for Rk */
+		Ri_nn = find_best_neighbor(&Ri, &Ri_rs, Ri_ngbrs,
+					   &Rk, &Rk_rs, &Ri_similarity,
+					   1, globals);
+		/* Rk is now complete */
+		G_debug(4, "Rk is now complete");
+
+		if (Rk.id == 0) {
+		    /* this can only happen if the segment is surrounded by NULL data */
+		    G_debug(4, "Segment had no valid neighbors");
+		    continue;
+		}
+
+		if (/* !(t & 1) && */ Ri_nn == 1 &&
+		    !(FLAG_GET(globals->candidate_flag, Rk.row, Rk.col)) &&
+		    compare_double(Ri_similarity, threshold) == -1) {
+		    /* this is slow ??? */
+		    int smaller = Rk.count;
+
+		    if (Ri.count < Rk.count)
+			smaller = Ri.count;
+
+		    /* TODO: better */
+		    adjthresh = pow(alpha2, 1. + (double) smaller / divisor);
+
+		    if (compare_double(Ri_similarity, adjthresh) == -1) {
+			G_debug(4, "Ri nn == 1");
+			if (Rk.count < 2)
+			    G_fatal_error("Rk count too low");
+			if (Rk.count < Ri.count)
+			    G_debug(4, "Rk count lower than Ri count");
+
+			merge_regions(&Ri, &Ri_rs, &Rk, &Rk_rs, 1, globals);
+			n_merges++;
+		    }
+
+		    pathflag = FALSE;
+		}
+		/* this is slow ??? */
+		if (/* t & */ 1) {
+		    if ((globals->nn < 8 && Rk.count <= 8) || 
+		        (globals->nn >= 8 && Rk.count <= globals->nn))
+		    candidates_only = FALSE;
+		}
+
+		while (pathflag) {
+		    pathflag = FALSE;
+		    
+		    /* optional check if Rk is candidate
+		     * to prevent backwards merging */
+		    if (candidates_only && 
+		        !(FLAG_GET(globals->candidate_flag, Rk.row, Rk.col))) {
+
+			Ri_similarity = 2;
+		    }
+
+		    candidates_only = TRUE;
+
+		    if (compare_double(Ri_similarity, threshold) == -1) {
+			do_merge = 1;
+
+			/* we'll have the neighbor pixel to start with. */
+			G_debug(4, "Working with Rk");
+
+			/* find Rk's best neighbor, do not clear candidate flag */
+			Rk_similarity = Ri_similarity;
+			Rk_bestn_rs.count = 0;
+			/* Rk_rs is already complete */
+			Rk_nn = find_best_neighbor(&Rk, &Rk_rs, Rk_ngbrs,
+						   &Rk_bestn,
+						   &Rk_bestn_rs,
+						   &Rk_similarity, 0,
+						   globals);
+
+			/* not mutually best neighbors */
+			if (Rk_similarity != Ri_similarity) {
+				do_merge = 0;
+			}
+			/* Ri has only one neighbor, merge */
+			if (Ri_nn == 1 && Rk_nn > 1)
+			    do_merge = 1;
+
+			/* adjust threshold */
+			if (do_merge) {
+			    int smaller = Rk.count;
+
+			    if (Ri.count < Rk.count)
+				smaller = Ri.count;
+
+			    /* TODO: better */
+			    adjthresh = pow(alpha2, 1. + (double) smaller / divisor);
+
+			    do_merge = 0;
+			    if (compare_double(Ri_similarity, adjthresh) == -1) {
+				do_merge = 1;
+			    }
+			}
+
+			if (do_merge) {
+			    
+			    G_debug(4, "merge neighbor trees");
+
+			    Ri_nn -= Ri_ngbrs->count;
+			    Ri_nn += (Rk_nn - Rk_ngbrs->count);
+			    globals->ns.id = Rk.id;
+			    nbtree_remove(Ri_ngbrs, &(globals->ns));
+
+			    nbtree_init_trav(&travngbr, Rk_ngbrs);
+			    while ((next = nbtree_traverse(&travngbr))) {
+				if (!nbtree_find(Ri_ngbrs, next) && next->id != Ri.id)
+				    nbtree_insert(Ri_ngbrs, next);
+			    }
+			    nbtree_clear(Rk_ngbrs);
+			    Ri_nn += Ri_ngbrs->count;
+
+			    merge_regions(&Ri, &Ri_rs, &Rk, &Rk_rs, 1, globals);
+			    /* Ri is now updated, Rk no longer usable */
+
+			    /* made a merge, need another iteration */
+			    n_merges++;
+
+			    Ri_similarity = 2;
+			    Rk_similarity = 2;
+
+			    /* we have checked the neighbors of Ri, Rk already
+			     * use faster version of finding the best neighbor
+			     */
+			    
+			    /* use neighbor tree to find Ri's new best neighbor */
+			    search_neighbors(&Ri, &Ri_rs, Ri_ngbrs, &Ri_similarity,
+					     &Rk, &Rk_rs, globals);
+
+			    if (Rk.id != 0 && Ri_nn > 0 && 
+			        compare_double(Ri_similarity, threshold) == -1) {
+
+				pathflag = TRUE;
+				/* candidates_only:
+				 * FALSE: less passes, takes a bit longer, but less memory
+				 * TRUE: more passes, is a bit faster */
+				candidates_only = FALSE;
+			    }
+			    /* else end of Ri -> Rk chain since we merged Ri and Rk
+			     * go to next row, col */
+			}
+			else {
+			    if (compare_double(Rk_similarity, threshold) == -1) {
+				pathflag = TRUE;
+			    }
+			    /* test this: can it cause an infinite loop ? */
+			    if (!(FLAG_GET(globals->candidate_flag, Rk.row, Rk.col)))
+				pathflag = FALSE;
+
+			    if (Rk_nn < 2)
+				pathflag = FALSE;
+
+			    if (Rk.id < 1)
+				pathflag = FALSE;
+
+			    if (Rk_bestn.id == 0) {
+				G_debug(4, "Rk's best neighour is zero");
+				pathflag = FALSE;
+			    }
+
+			    if (pathflag) {
+				
+				/* clear candidate flag for Rk */
+				if (FLAG_GET(globals->candidate_flag, Rk.row, Rk.col)) {
+				    set_candidate_flag(&Rk, FALSE, globals);
+				}
+
+				/* Use Rk as next Ri:  
+				 * this is the eCognition technique. */
+				G_debug(4, "do ecog");
+				Ri_nn = Rk_nn;
+				Ri_similarity = Rk_similarity;
+
+				dp = Ri.mean;
+				Ri = Rk;
+				Rk = Rk_bestn;
+				Rk_bestn.mean = dp;
+
+				Ri_rs.id = Rk_rs.id;
+				Rk_rs.id = Rk_bestn_rs.id;
+				Rk_bestn_rs.id = 0;
+				Ri_rs.count = Rk_rs.count;
+				Rk_rs.count = Rk_bestn_rs.count;
+				Rk_bestn_rs.count = 0;
+				dp = Ri_rs.mean;
+				Ri_rs.mean = Rk_rs.mean;
+				Rk_rs.mean = Rk_bestn_rs.mean;
+				Rk_bestn_rs.mean = dp;
+				dp = Ri_rs.sum;
+				Ri_rs.sum = Rk_rs.sum;
+				Rk_rs.sum = Rk_bestn_rs.sum;
+				Rk_bestn_rs.sum = dp;
+
+				tmpnbtree = Ri_ngbrs;
+				Ri_ngbrs = Rk_ngbrs;
+				Rk_ngbrs = tmpnbtree;
+				nbtree_clear(Rk_ngbrs);
+			    }
+			}
+		    }    /* end if < threshold */
+		}    /* end pathflag */
+	    }    /* next col */
+	}    /* next row */
+        G_percent(1, 1, 1);
+
+	/* finished one pass for processing candidate pixels */
+	G_verbose_message("%d merges", n_merges);
+
+	G_debug(4, "Finished pass %d", t);
+    }
+
+    /*end t loop *//*TODO, should there be a max t that it can iterate for?  Include t in G_message? */
+    if (n_merges > 1)
+	G_message(_("Segmentation processes stopped at %d due to reaching max iteration limit, more merges may be possible"), t);
+    else
+	G_message(_("Segmentation converged after %d iterations"), t);
+
+
+    /* ****************************************************************************************** */
+    /* final pass, ignore threshold and force a merge for small segments with their best neighbor */
+    /* ****************************************************************************************** */
+    
+    if (globals->min_segment_size > 1) {
+	G_message(_("Merging segments smaller than %d cells..."), globals->min_segment_size);
+
+	threshold = globals->alpha * globals->alpha;
+
+	flag_clear_all(globals->candidate_flag);
+	
+	n_merges = 0;
+	globals->candidate_count = 0;
+
+	/* Set candidate flag to true/1 for all non-NULL cells */
+	for (row = globals->row_min; row < globals->row_max; row++) {
+	    for (col = globals->col_min; col < globals->col_max; col++) {
+		if (!(FLAG_GET(globals->null_flag, row, col))) {
+		    FLAG_SET(globals->candidate_flag, row, col);
+
+		    globals->candidate_count++;
+		}
+	    }
+	}
+
+	G_debug(4, "Starting to process %ld candidate cells",
+		globals->candidate_count);
+
+	/* process candidate cells */
+	G_percent_reset();
+	for (row = globals->row_min; row < globals->row_max; row++) {
+	    G_percent(row - globals->row_min,
+	              globals->row_max - globals->row_min, 4);
+	    for (col = globals->col_min; col < globals->col_max; col++) {
+		int do_merge = 1;
+		
+		if (!(FLAG_GET(globals->candidate_flag, row, col)))
+		    continue;
+
+		Ri.row = row;
+		Ri.col = col;
+
+		/* get segment id */
+		Segment_get(&globals->rid_seg, (void *) &Ri.id, row, col);
+		
+		if (Ri.id < 0)
+		    continue;
+
+		Ri_rs.id = Ri.id;
+
+		/* get segment size */
+
+		fetch_reg_stats(Ri.row, Ri.col, &Ri_rs, globals);
+		memcpy(Ri.mean, Ri_rs.mean, globals->datasize);
+		Ri.count = Ri_rs.count;
+
+		if (Ri.count >= globals->min_segment_size) {
+		    set_candidate_flag(&Ri, FALSE, globals);
+		    do_merge = 0;
+		}
+
+		while (do_merge) {
+		    do_merge = 0;
+
+		    /* merge all smaller than min size */
+		    if (Ri.count < globals->min_segment_size)
+			do_merge = 1;
+
+		    Ri_nn = 0;
+		    Ri_similarity = 2;
+		    
+		    Rk.id = 0;
+
+		    if (do_merge) {
+
+			/* find Ri's best neighbor, clear candidate flag */
+			Ri_nn = find_best_neighbor(&Ri, &Ri_rs, Ri_ngbrs,
+						   &Rk, &Rk_rs,
+						   &Ri_similarity, 1,
+						   globals);
+		    }
+		    do_merge = 0;
+
+		    if (Rk.id != 0) {
+			/* merge Ri with Rk */
+			/* do not clear candidate flag for Rk */
+			merge_regions(&Ri, &Ri_rs, &Rk, &Rk_rs, 0, globals);
+			n_merges++;
+
+			if (Ri.count < globals->min_segment_size)
+			    do_merge = 1;
+		    }
+		}
+	    }
+	}
+	G_percent(1, 1, 1);
+
+	/* finished one pass for processing candidate pixels */
+	G_verbose_message("%d merges", n_merges);
+    }
+    
+    /* free neighbor stats */
+    G_free(Ri.mean);
+    G_free(Rk.mean);
+    G_free(Rk_bestn.mean);
+    
+    nbtree_clear(Ri_ngbrs);
+    nbtree_clear(Rk_ngbrs);
+    free(Ri_ngbrs);
+    free(Rk_ngbrs);
+
+    /* free region stats */
+    G_free(Ri_rs.mean);
+    G_free(Ri_rs.sum);
+    G_free(Rk_rs.mean);
+    G_free(Rk_rs.sum);
+    G_free(Rk_bestn_rs.mean);
+    G_free(Rk_bestn_rs.sum);
+
+    return TRUE;
+}
+
+
+static int find_best_neighbor(struct ngbr_stats *Ri,
+			      struct reg_stats *Ri_rs,
+			      struct NB_TREE *Ri_ngbrs, 
+			      struct ngbr_stats *Rk, 
+			      struct reg_stats *Rk_rs,
+			      double *sim, int clear_cand,
+			      struct globals *globals)
+{
+    int n, n_ngbrs, no_check, cmp;
+    struct rc ngbr_rc, next;
+    struct rclist rilist;
+    double tempsim;
+    int neighbors[8][2];
+    struct RB_TREE *no_check_tree;	/* cells already checked */
+    struct reg_stats *rs_found;
+
+    G_debug(4, "find_best_neighbor()");
+
+    if (Ri->id != Ri_rs->id)
+	G_fatal_error("Ri = %d but Ri_rs = %d", Ri->id, Ri_rs->id);
+    if (Ri->id <= 0)
+	G_fatal_error("Ri is %d", Ri->id);
+    if (Ri_rs->id <= 0)
+	G_fatal_error("Ri_rs is %d", Ri_rs->id);
+
+    /* dynamics of the region growing algorithm
+     * some regions are growing fast, often surrounded by many small regions
+     * not all regions are equally growing, some will only grow at a later stage ? */
+
+    /* *** initialize data *** */
+
+    no_check_tree = rbtree_create(compare_rc, sizeof(struct rc));
+    ngbr_rc.row = Ri->row;
+    ngbr_rc.col = Ri->col;
+    rbtree_insert(no_check_tree, &ngbr_rc);
+
+    nbtree_clear(Ri_ngbrs);
+    n_ngbrs = 0;
+    /* TODO: add size of largest region to reg_tree, use this as min */
+    Rk->count = globals->ncells + 1;
+    Rk->id = Rk_rs->id = 0;
+
+    /* go through segment, spreading outwards from head */
+    rclist_init(&rilist);
+
+    /* check neighbors of start cell */
+    next.row = Ri->row;
+    next.col = Ri->col;
+    do {
+	/* remove from candidates */
+	if (clear_cand)
+	    FLAG_UNSET(globals->candidate_flag, next.row, next.col);
+
+	G_debug(5, "find_pixel_neighbors for row: %d , col %d",
+		next.row, next.col);
+
+	globals->find_neighbors(next.row, next.col, neighbors);
+	
+	n = globals->nn - 1;
+	do {
+
+	    globals->ns.row = ngbr_rc.row = neighbors[n][0];
+	    globals->ns.col = ngbr_rc.col = neighbors[n][1];
+
+	    no_check = (ngbr_rc.row < globals->row_min ||
+	                ngbr_rc.row >= globals->row_max ||
+		        ngbr_rc.col < globals->col_min ||
+			ngbr_rc.col >= globals->col_max);
+
+	    n_ngbrs += no_check;
+
+	    if (!no_check) {
+
+		no_check = ((FLAG_GET(globals->null_flag, ngbr_rc.row,
+							  ngbr_rc.col)) != 0);
+		n_ngbrs += no_check;
+
+		if (!no_check) {
+
+		    if (!rbtree_find(no_check_tree, &ngbr_rc)) {
+
+			/* not yet checked, don't check it again */
+			rbtree_insert(no_check_tree, &ngbr_rc);
+
+			/* get neighbor ID */
+			Segment_get(&globals->rid_seg,
+				    (void *) &(globals->ns.id),
+				    ngbr_rc.row, ngbr_rc.col);
+
+			if (globals->ns.id == Ri->id) {
+
+			    /* want to check this neighbor's neighbors */
+			    rclist_add(&rilist, ngbr_rc.row, ngbr_rc.col);
+			}
+			else {
+
+			    /* new neighbor ? */
+			    if (nbtree_find(Ri_ngbrs, &globals->ns) == NULL) {
+
+				/* get values for Rk */
+				globals->rs.id = globals->ns.id;
+				rs_found = rgtree_find(globals->reg_tree,
+						       &(globals->rs));
+				if (!rs_found) {
+				    /* region stats are not in search tree */
+				    rs_found = &(globals->rs);
+				    calculate_reg_stats(ngbr_rc.row, ngbr_rc.col,
+							rs_found, globals);
+				}
+				globals->ns.mean = rs_found->mean;
+				globals->ns.count = rs_found->count;
+				/* globals->ns is now complete */
+
+				tempsim = (globals->calculate_similarity)(Ri, &globals->ns, globals);
+
+				cmp = compare_double(tempsim, *sim);
+				if (cmp == -1) {
+				    *sim = tempsim;
+				    /* copy temp Rk to Rk */
+				    Rk->row = ngbr_rc.row;
+				    Rk->col = ngbr_rc.col;
+
+				    Rk->id = rs_found->id;
+				    Rk->count = rs_found->count;
+				    memcpy(Rk->mean, rs_found->mean,
+				           globals->datasize);
+
+				    Rk_rs->id = Rk->id;
+				    Rk_rs->count = Rk->count;
+				    memcpy(Rk_rs->mean, rs_found->mean,
+				           globals->datasize);
+				    memcpy(Rk_rs->sum, rs_found->sum,
+				           globals->datasize);
+				}
+				else if (cmp == 0) {
+				    /* resolve ties: prefer smaller regions */
+
+				    if (Rk->count > globals->ns.count) {
+					/* copy temp Rk to Rk */
+					Rk->row = ngbr_rc.row;
+					Rk->col = ngbr_rc.col;
+
+					Rk->id = rs_found->id;
+					Rk->count = rs_found->count;
+					memcpy(Rk->mean, rs_found->mean,
+					       globals->datasize);
+
+					Rk_rs->id = Rk->id;
+					Rk_rs->count = Rk->count;
+					memcpy(Rk_rs->mean, rs_found->mean,
+					       globals->datasize);
+					memcpy(Rk_rs->sum, rs_found->sum,
+					       globals->datasize);
+				    }
+				}
+
+				n_ngbrs++;
+				nbtree_insert(Ri_ngbrs, &globals->ns);
+			    }
+			}
+		    }
+		}
+	    }
+	} while (n--);    /* end do loop - next neighbor */
+    } while (rclist_drop(&rilist, &next));   /* while there are cells to check */
+
+    /* clean up */
+    rbtree_destroy(no_check_tree);
+
+    return n_ngbrs;
+}
+
+double calculate_shape(struct reg_stats *rsi, struct reg_stats *rsk,
+                       int nshared, struct globals *globals)
+{
+     /* 
+     In the eCognition literature, we find that the key factor in the
+     multi-scale segmentation algorithm used by Definiens is the scale
+     factor f:
+
+     f = W.Hcolor + (1 - W).Hshape
+     Hcolor = sum(b = 1:nbands)(Wb.SigmaB)
+     Hshape = Ws.Hcompact + (1 - Ws).Hsmooth
+     Hcompact = PL/sqrt(Npx)
+     Hsmooth = PL/Pbbox
+
+     Where 
+     W is a user-defined weight of importance of object radiometry vs
+     shape (usually .9 vs .1)
+     Wb is the weigh given to band B
+     SigmaB is the std dev of the object for band b
+     Ws is a user-defined weight giving the importance of compactedness vs smoothness
+     PL is the perimeter length of the object
+     Npx the number of pixels within the object
+     Pbbox the perimeter of the bounding box of the object.
+     */
+     
+     /* here we calculate a shape index for the new object to be created
+      * the radiometric index ranges from 0 to 1, 0 = identical
+      * with the shape index we want to favour compact and smooth opjects
+      * thus the shape index should range from 0 to 1,
+      * 0 = maximum compactness and smoothness */
+
+    double smooth, compact;
+    int pl, pbbox, count;
+    double bboxdiag;
+    int pl1, pl2, count1, count2;
+    int e1, n1, s1, w1, e2, n2, s2, w2, ns_extent, ew_extent;
+
+    pl = pl1 + pl2 - nshared;
+    
+    ns_extent = MAX(n1, n2) - MIN(s1, s2);
+    ew_extent = MAX(e1, e2) - MIN(w1, w2);
+
+    pbbox = 2 * (ns_extent + ew_extent);
+
+    
+    /* Smoothness Hsmooth = PL / Pbbox
+     * the smallest possible value would be 
+     * the diagonal divided by the bbox perimeter
+     * invert such that the largest possible value would be
+     * the bbox perimeter divided by the diagonal
+     */
+
+    bboxdiag = sqrt(ns_extent * ns_extent + ew_extent * ew_extent);
+    smooth = 1. - (double)bboxdiag / pl; /* smaller -> smoother */
+    
+    count = count1 + count2;
+    
+    /* compactness Hcompact = PL / sqrt(Npx)
+     * a circle is the most compact form
+     * Npx = M_PI * r * r;
+     * r = sqrt(Npx / M_pi) 
+     * pl_circle = 2 * sqrt(count * M_PI);
+     * compact = 1 - pl_circle / (pl * sqrt(count);
+     */
+    /* compact = 1 - 2 * sqrt(M_PI) / pl; */
+
+    /* PL max = Npx */
+    /* Hcompact max = Npx / sqrt(Npx) = sqrt(Npx)
+     * Hcompact / Hcompact max = (PL / sqrt(Npx)) / sqrt(Npx)
+     *                         = PL / Npx
+     */
+    compact = (double)pl / count; /* smaller -> more compact */
+
+    return globals->smooth_weight * smooth + (1 - globals->smooth_weight) * compact;
+}
+
+
+static int search_neighbors(struct ngbr_stats *Ri,
+			    struct reg_stats *Ri_rs,
+                            struct NB_TREE *Ri_ngbrs, 
+			    double *sim,
+			    struct ngbr_stats *Rk,
+			    struct reg_stats *Rk_rs,
+		            struct globals *globals)
+{
+    double tempsim, *dp;
+    struct NB_TRAV travngbr;
+    struct ngbr_stats *next;
+    int cmp;
+
+    G_debug(4, "search_neighbors");
+
+    if (Ri->id != Ri_rs->id)
+	G_fatal_error("Ri = %d but Ri_rs = %d", Ri->id, Ri_rs->id);
+    if (Ri->id <= 0)
+	G_fatal_error("Ri is %d", Ri->id);
+    if (Ri_rs->id <= 0)
+	G_fatal_error("Ri_rs is %d", Ri_rs->id);
+
+    nbtree_init_trav(&travngbr, Ri_ngbrs);
+    Rk->count = globals->ncells + 1;
+    Rk->id = Rk_rs->id = 0;
+
+    while ((next = nbtree_traverse(&travngbr))) {
+	tempsim = (globals->calculate_similarity)(Ri, next, globals);
+
+	cmp = compare_double(tempsim, *sim);
+	if (cmp == -1) {
+	    *sim = tempsim;
+
+	    dp = Rk->mean;
+	    *Rk = *next;
+	    Rk->mean = dp;
+	    memcpy(Rk->mean, next->mean, globals->datasize);
+	}
+	else if (cmp == 0) {
+	    /* resolve ties, prefer smaller regions */
+	    G_debug(4, "resolve ties");
+
+	    if (Rk->count > next->count) {
+		dp = Rk->mean;
+		*Rk = *next;
+		Rk->mean = dp;
+		memcpy(Rk->mean, next->mean, globals->datasize);
+	    }
+	}
+    }
+    Rk_rs->id = Rk->id;
+
+    if (Rk->id != 0) {
+	fetch_reg_stats(Rk->row, Rk->col, Rk_rs, globals);
+    }
+
+    return 1;
+}
+
+int update_band_vals(int row, int col, struct reg_stats *rs,
+                     struct globals *globals) {
+    struct rc next, ngbr_rc;
+    int neighbors[8][2];
+    int rid, count, n;
+    
+    /* update band values with sum */
+    /* rs->id must be set */
+    G_debug(4, "update_band_vals()");
+
+    if (rs->count >= globals->min_reg_size) {
+	G_fatal_error(_("Region stats should go in tree, %d >= %d"),
+	              rs->count, globals->min_reg_size);
+    }
+
+    Segment_get(&globals->rid_seg, (void *) &rid, row, col);
+    
+    if (rid != rs->id) {
+	G_fatal_error(_("Region ids are different"));
+    }
+
+    if (rs->count == 1) {
+	G_warning(_("Region consists of only one cell, nothing to update"));
+	return rs->count;
+    }
+
+    /* update region stats */
+    Segment_put(&globals->bands_seg, (void *)rs->sum, row, col);
+    count = 1;
+
+    /* fast version for rs->count == 2 */
+    if (rs->count == 2) {
+	globals->find_neighbors(row, col, neighbors);
+
+	n = globals->nn - 1;
+	do {
+
+	    ngbr_rc.row = neighbors[n][0];
+	    ngbr_rc.col = neighbors[n][1];
+
+	    if (ngbr_rc.row < globals->row_min || ngbr_rc.row >= globals->row_max ||
+		ngbr_rc.col < globals->col_min || ngbr_rc.col >= globals->col_max) {
+		continue;
+	    }
+
+	    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
+
+		Segment_get(&globals->rid_seg, (void *) &rid,
+			    ngbr_rc.row, ngbr_rc.col);
+		
+		if (rid == rs->id) {
+
+		    /* update region stats */
+		    Segment_put(&globals->bands_seg,
+				(void *)rs->sum,
+				ngbr_rc.row, ngbr_rc.col);
+
+		    count++;
+
+		    /* only one other neighbor can have the same ID
+		     * deactivate for debugging */
+		    break;
+		}
+	    }
+	} while (n--);
+	if (count > 2)
+	    G_fatal_error(_("Region size is larger than 2: %d"), count);
+    }
+    else if (rs->count > 2) {
+	struct RB_TREE *rc_check_tree;	/* cells already checked */
+	struct rclist rlist;
+	int no_check;
+
+	/* go through region, spreading outwards from head */
+	rclist_init(&rlist);
+
+	rc_check_tree = rbtree_create(compare_rc, sizeof(struct rc));
+	ngbr_rc.row = row;
+	ngbr_rc.col = col;
+	rbtree_insert(rc_check_tree, &ngbr_rc);
+
+	next.row = row;
+	next.col = col;
+	do {
+	    G_debug(5, "find_pixel_neighbors for row: %d , col %d",
+		    next.row, next.col);
+
+	    globals->find_neighbors(next.row, next.col, neighbors);
+
+	    n = globals->nn - 1;
+	    do {
+
+		ngbr_rc.row = neighbors[n][0];
+		ngbr_rc.col = neighbors[n][1];
+
+		no_check = (ngbr_rc.row < 0 || ngbr_rc.row >= globals->nrows ||
+		    ngbr_rc.col < 0 || ngbr_rc.col >= globals->ncols);
+
+		if (!no_check) {
+		    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
+		    
+			/* already checked ? */
+			if (!rbtree_find(rc_check_tree, &ngbr_rc)) {
+
+			    /* not yet checked, don't check it again */
+			    rbtree_insert(rc_check_tree, &ngbr_rc);
+
+			    Segment_get(&globals->rid_seg, (void *) &rid,
+					ngbr_rc.row, ngbr_rc.col);
+			    
+			    if (rid == rs->id) {
+
+				/* want to check this neighbor's neighbors */
+				rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
+
+				/* update region stats */
+				Segment_put(&globals->bands_seg,
+					    (void *)rs->sum,
+					    ngbr_rc.row, ngbr_rc.col);
+				count++;
+			    }
+			}
+		    }
+		}
+	    } while (n--);
+	} while (rclist_drop(&rlist, &next));
+
+	/* clean up */
+	rbtree_destroy(rc_check_tree);
+	rclist_destroy(&rlist);
+    }
+    
+    if (count != rs->count) {
+	G_fatal_error(_("Region size is %d, should be %d"),
+	              count, rs->count);
+    }
+
+    return count;
+}
+
+static int merge_regions(struct ngbr_stats *Ri, struct reg_stats *Ri_rs,
+		         struct ngbr_stats *Rk, struct reg_stats *Rk_rs,
+		         int do_cand, struct globals *globals)
+{
+    int n;
+    int R_id;
+    struct rc next, ngbr_rc;
+    struct rclist rlist;
+    int neighbors[8][2];
+    struct reg_stats *new_rs;
+
+    G_debug(4, "merge_regions");
+
+    /* Ri ID must always be positive */
+    if (Ri_rs->id < 1)
+	G_fatal_error("Ri id is not positive: %d", Ri_rs->id);
+    /* if Rk ID is negative (no seed), Rk count must be 1  */
+    if (Rk_rs->id < 1 && Rk_rs->count > 1)
+	G_fatal_error("Rk id is not positive: %d, but count is > 1: %d",
+	              Rk_rs->id, Rk_rs->count);
+
+    /* update segment id and clear candidate flag */
+    
+    /* cases
+     * Ri, Rk are not in the tree
+     * Ri, Rk are both in the tree
+     * Ri is in the tree, Rk is not
+     * Rk is in the tree, Ri is not
+     */
+
+    /* Ri_rs, Rk_rs must always be set */
+    /* add Rk */
+    Ri_rs->count += Rk_rs->count;
+    n = globals->nbands - 1;
+    do {
+	Ri_rs->sum[n] += Rk_rs->sum[n];
+	Ri_rs->mean[n] = Ri_rs->sum[n] / Ri_rs->count;
+    } while (n--);
+
+    if (Ri->count >= Rk->count) {
+
+	if (Rk->count >= globals->min_reg_size) {
+	    if (rgtree_find(globals->reg_tree, Rk_rs) == NULL)
+		G_fatal_error("merge regions: Rk should be in tree");
+	    /* remove from tree */
+	    rgtree_remove(globals->reg_tree, Rk_rs);
+	}
+    }
+    else {
+
+	if (Ri->count >= globals->min_reg_size) {
+	    if (rgtree_find(globals->reg_tree, Ri_rs) == NULL)
+		G_fatal_error("merge regions: Ri should be in tree");
+	    /* remove from tree */
+	    rgtree_remove(globals->reg_tree, Ri_rs);
+	}
+
+	/* magic switch */
+	Ri_rs->id = Rk->id;
+    }
+
+    if ((new_rs = rgtree_find(globals->reg_tree, Ri_rs)) != NULL) {
+	/* update stats for tree item */
+	new_rs->count = Ri_rs->count;
+	memcpy(new_rs->mean, Ri_rs->mean, globals->datasize);
+	memcpy(new_rs->sum, Ri_rs->sum, globals->datasize);
+    }
+    else if (Ri_rs->count >= globals->min_reg_size) {
+	/* add to tree */
+	rgtree_insert(globals->reg_tree, Ri_rs);
+    }
+
+    Ri->count = Ri_rs->count;
+    memcpy(Ri->mean, Ri_rs->mean, globals->datasize);
+
+    if (Ri->id == Ri_rs->id) {
+	/* Ri is already updated, including candidate flags
+	 * need to clear candidate flag for Rk and set new id */
+	 
+	/* the actual merge: change region id */
+	Segment_put(&globals->rid_seg, (void *) &Ri->id, Rk->row, Rk->col);
+
+	if (do_cand) {
+	    do_cand = 0;
+	    if (FLAG_GET(globals->candidate_flag, Rk->row, Rk->col)) {
+		/* clear candidate flag */
+		FLAG_UNSET(globals->candidate_flag, Rk->row, Rk->col);
+		globals->candidate_count--;
+		do_cand = 1;
+	    }
+	}
+
+	rclist_init(&rlist);
+	rclist_add(&rlist, Rk->row, Rk->col);
+
+	while (rclist_drop(&rlist, &next)) {
+
+	    if (do_cand) {
+		/* clear candidate flag */
+		FLAG_UNSET(globals->candidate_flag, next.row, next.col);
+		globals->candidate_count--;
+	    }
+
+	    globals->find_neighbors(next.row, next.col, neighbors);
+	    
+	    n = globals->nn - 1;
+	    do {
+
+		ngbr_rc.row = neighbors[n][0];
+		ngbr_rc.col = neighbors[n][1];
+
+		if (ngbr_rc.row >= globals->row_min &&
+		    ngbr_rc.row < globals->row_max &&
+		    ngbr_rc.col >= globals->col_min &&
+		    ngbr_rc.col < globals->col_max) {
+
+		    if (!(FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col))) {
+
+			Segment_get(&globals->rid_seg, (void *) &R_id,
+			            ngbr_rc.row, ngbr_rc.col);
+
+			if (R_id == Rk->id) {
+			    /* the actual merge: change region id */
+			    Segment_put(&globals->rid_seg, (void *) &Ri->id, ngbr_rc.row, ngbr_rc.col);
+
+			    /* want to check this neighbor's neighbors */
+			    rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
+			}
+		    }
+		}
+	    } while (n--);
+	}
+	rclist_destroy(&rlist);
+    }
+    else {
+	/* Rk was larger than Ri */
+
+	/* clear candidate flag for Rk */
+	if (do_cand && FLAG_GET(globals->candidate_flag, Rk->row, Rk->col)) {
+	    set_candidate_flag(Rk, FALSE, globals);
+	}
+
+	/* update region id for Ri */
+
+	/* the actual merge: change region id */
+	Segment_put(&globals->rid_seg, (void *) &Rk->id, Ri->row, Ri->col);
+
+	rclist_init(&rlist);
+	rclist_add(&rlist, Ri->row, Ri->col);
+
+	while (rclist_drop(&rlist, &next)) {
+
+	    globals->find_neighbors(next.row, next.col, neighbors);
+	    
+	    n = globals->nn - 1;
+	    do {
+
+		ngbr_rc.row = neighbors[n][0];
+		ngbr_rc.col = neighbors[n][1];
+
+		if (ngbr_rc.row >= globals->row_min &&
+		    ngbr_rc.row < globals->row_max &&
+		    ngbr_rc.col >= globals->col_min &&
+		    ngbr_rc.col < globals->col_max) {
+
+
+		    if (!(FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col))) {
+
+			Segment_get(&globals->rid_seg, (void *) &R_id, ngbr_rc.row, ngbr_rc.col);
+
+			if (R_id == Ri->id) {
+			    /* the actual merge: change region id */
+			    Segment_put(&globals->rid_seg, (void *) &Rk->id, ngbr_rc.row, ngbr_rc.col);
+
+			    /* want to check this neighbor's neighbors */
+			    rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
+			}
+		    }
+		}
+	    } while (n--);
+	}
+	rclist_destroy(&rlist);
+
+	Ri->id = Ri_rs->id;   /* == Rk->id */
+	if (Ri->id != Rk->id)
+	    G_fatal_error("Ri ID should be set to Rk ID");
+    }
+    
+    if (Rk->id > 0)
+	globals->n_regions--;
+
+    /* disable Rk */
+    Rk->id = Rk_rs->id = 0;
+    Rk->count = Rk_rs->count = 0;
+    
+    /* update Ri */
+    Ri->id = Ri_rs->id;
+
+    if (Ri_rs->count < globals->min_reg_size) {
+	update_band_vals(Ri->row, Ri->col, Ri_rs, globals);
+    }
+
+    return TRUE;
+}
+
+static int set_candidate_flag(struct ngbr_stats *head, int value, struct globals *globals)
+{
+    int n, R_id;
+    struct rc next, ngbr_rc;
+    struct rclist rlist;
+    int neighbors[8][2];
+
+    G_debug(4, "set_candidate_flag");
+
+    if (!(FLAG_GET(globals->candidate_flag, head->row, head->col)) != value) {
+	G_warning(_("Candidate flag is already %s"), value ? _("set") : _("unset"));
+	return FALSE;
+    }
+
+    rclist_init(&rlist);
+    rclist_add(&rlist, head->row, head->col);
+
+    /* (un)set candidate flag */
+    if (value == TRUE) {
+	FLAG_SET(globals->candidate_flag, head->row, head->col);
+	globals->candidate_count++;
+    }
+    else {
+	FLAG_UNSET(globals->candidate_flag, head->row, head->col);
+	globals->candidate_count--;
+    }
+
+    while (rclist_drop(&rlist, &next)) {
+
+	globals->find_neighbors(next.row, next.col, neighbors);
+	
+	n = globals->nn - 1;
+	do {
+
+	    ngbr_rc.row = neighbors[n][0];
+	    ngbr_rc.col = neighbors[n][1];
+
+	    if (ngbr_rc.row >= globals->row_min &&
+	        ngbr_rc.row < globals->row_max &&
+		ngbr_rc.col >= globals->col_min &&
+		ngbr_rc.col < globals->col_max) {
+
+		if (!(FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col))) {
+
+		    if (!(FLAG_GET(globals->candidate_flag, ngbr_rc.row, ngbr_rc.col)) == value) {
+
+			Segment_get(&globals->rid_seg, (void *) &R_id, ngbr_rc.row, ngbr_rc.col);
+
+			if (R_id == head->id) {
+			    /* want to check this neighbor's neighbors */
+			    rclist_add(&rlist, ngbr_rc.row, ngbr_rc.col);
+
+			    /* (un)set candidate flag */
+			    if (value == TRUE) {
+				FLAG_SET(globals->candidate_flag, ngbr_rc.row, ngbr_rc.col);
+				globals->candidate_count++;
+			    }
+			    else {
+				FLAG_UNSET(globals->candidate_flag, ngbr_rc.row, ngbr_rc.col);
+				globals->candidate_count--;
+			    }
+			}
+		    }
+		}
+	    }
+	} while (n--);
+    }
+
+    return TRUE;
+}
+
+int fetch_reg_stats(int row, int col, struct reg_stats *rs, 
+                           struct globals *globals)
+{
+    struct reg_stats *rs_found;
+    
+    if (rs->id <= 0)
+	G_fatal_error("fetch_reg_stats(): invalid region id %d", rs->id);
+
+    if ((rs_found = rgtree_find(globals->reg_tree, rs)) != NULL) {
+
+	memcpy(rs->mean, rs_found->mean, globals->datasize);
+	memcpy(rs->sum, rs_found->sum, globals->datasize);
+	rs->count = rs_found->count;
+
+	return 1;
+    }
+
+    calculate_reg_stats(row, col, rs, globals);
+
+    return 2;
+}
+
+static int calculate_reg_stats(int row, int col, struct reg_stats *rs, 
+                         struct globals *globals)
+{
+    int ret = 0;
+
+    G_debug(4, "calculate_reg_stats()");
+
+    if (rs->id <= 0)
+	G_fatal_error("Invalid region id %d", rs->id);
+
+    Segment_get(&globals->bands_seg, (void *)globals->bands_val,
+		row, col);
+    rs->count = 1;
+    memcpy(rs->sum, globals->bands_val, globals->datasize);
+
+    if (globals->min_reg_size < 3)
+	ret = 1;
+    else if (globals->min_reg_size == 3) {
+	int n, rid;
+	struct rc ngbr_rc;
+	int neighbors[8][2];
+
+	globals->find_neighbors(row, col, neighbors);
+
+	n = globals->nn - 1;
+	do {
+
+	    ngbr_rc.row = neighbors[n][0];
+	    ngbr_rc.col = neighbors[n][1];
+
+	    if (ngbr_rc.row < globals->row_min || ngbr_rc.row >= globals->row_max ||
+		ngbr_rc.col < globals->col_min || ngbr_rc.col >= globals->col_max) {
+		continue;
+	    }
+
+	    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
+
+		Segment_get(&globals->rid_seg, (void *) &rid,
+			    ngbr_rc.row, ngbr_rc.col);
+		
+		if (rid == rs->id) {
+
+		    /* update region stats */
+		    rs->count++;
+
+		    /* only one other neighbor can have the same ID
+		     * deactivate for debugging */
+		    break;
+		}
+	    }
+	} while (n--);
+	if (rs->count > 2)
+	    G_fatal_error(_("Region size is larger than 2: %d"), rs->count);
+
+	ret = 2;
+    }
+    else if (globals->min_reg_size > 3) {
+	/* rs->id must be set */
+	struct RB_TREE *rc_check_tree;	/* cells already checked */
+	int n, rid;
+	struct rc ngbr_rc, next;
+	struct rclist rilist;
+	int neighbors[8][2];
+	int no_check;
+	
+	/* go through region, spreading outwards from head */
+	rclist_init(&rilist);
+
+	rc_check_tree = rbtree_create(compare_rc, sizeof(struct rc));
+	ngbr_rc.row = row;
+	ngbr_rc.col = col;
+	rbtree_insert(rc_check_tree, &ngbr_rc);
+
+	next.row = row;
+	next.col = col;
+	do {
+	    G_debug(5, "find_pixel_neighbors for row: %d , col %d",
+		    next.row, next.col);
+
+	    globals->find_neighbors(next.row, next.col, neighbors);
+
+	    n = globals->nn - 1;
+	    do {
+
+		ngbr_rc.row = neighbors[n][0];
+		ngbr_rc.col = neighbors[n][1];
+
+		no_check = (ngbr_rc.row < globals->row_min ||
+			    ngbr_rc.row >= globals->row_max ||
+			    ngbr_rc.col < globals->col_min ||
+			    ngbr_rc.col >= globals->col_max);
+
+		if (!no_check) {
+		    if ((FLAG_GET(globals->null_flag, ngbr_rc.row, ngbr_rc.col)) == 0) {
+		    
+			/* already checked ? */
+			if (!rbtree_find(rc_check_tree, &ngbr_rc)) {
+
+			    /* not yet checked, don't check it again */
+			    rbtree_insert(rc_check_tree, &ngbr_rc);
+
+			    Segment_get(&globals->rid_seg, (void *) &rid,
+					ngbr_rc.row, ngbr_rc.col);
+			    
+			    if (rid == rs->id) {
+
+				/* want to check this neighbor's neighbors */
+				rclist_add(&rilist, ngbr_rc.row, ngbr_rc.col);
+
+				/* update region stats */
+				rs->count++;
+			    }
+			}
+		    }
+		}
+	    } while (n--);
+	} while (rclist_drop(&rilist, &next));
+
+	/* clean up */
+	rbtree_destroy(rc_check_tree);
+	rclist_destroy(&rilist);
+
+	ret = 3;
+    }
+
+    /* band mean */
+    if (rs->count == 1)
+	memcpy(rs->mean, rs->sum, globals->datasize);
+    else {
+	int i = globals->nbands - 1;
+
+	do {
+	    rs->mean[i] = rs->sum[i] / rs->count;
+	} while (i--);
+    }
+    
+    if (rs->count >= globals->min_reg_size)
+	G_fatal_error(_("Region of size %d should be in search tree"),
+		      rs->count);
+    
+    return ret;
+}
diff --git a/imagery/i.segment/watershed.c b/imagery/i.segment/watershed.c
new file mode 100644
index 0000000..a64435d
--- /dev/null
+++ b/imagery/i.segment/watershed.c
@@ -0,0 +1,23 @@
+/* PURPOSE:      Develop the image segments */
+
+/* Currently only region growing is implemented */
+
+#include <stdlib.h>
+#include <string.h>
+#include <float.h>
+#include <math.h>
+#include <time.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/raster.h>
+#include <grass/segment.h>	/* segmentation library */
+#include <grass/rbtree.h>	/* Red Black Tree library functions */
+#include "iseg.h"
+
+int watershed(struct globals *globals)
+{
+    G_fatal_error(_("Watershed is not yet implemented"));
+    
+    return FALSE;
+}
+
diff --git a/imagery/i.smap/i.smap.html b/imagery/i.smap/i.smap.html
index 3d89083..94f0c0b 100644
--- a/imagery/i.smap/i.smap.html
+++ b/imagery/i.smap/i.smap.html
@@ -222,4 +222,4 @@ U.S.Army Construction Engineering
 Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/imagery/i.target/i.target.html b/imagery/i.target/i.target.html
index b161dc4..38109eb 100644
--- a/imagery/i.target/i.target.html
+++ b/imagery/i.target/i.target.html
@@ -47,4 +47,4 @@ The GRASS 4 <em>
 Michael Shapiro,
 U.S. Army Construction Engineering Research Laboratory<p>Parser support: Bob Covill
 
-<p><i>Last changed: $Date: 2014-11-02 21:55:12 +0100 (Sun, 02 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-02 21:52:19 +0100 (Sun, 02 Nov 2014) $</i>
diff --git a/imagery/i.topo.corr/i.topo.corr.html b/imagery/i.topo.corr/i.topo.corr.html
index 3a40eae..ddafd46 100644
--- a/imagery/i.topo.corr/i.topo.corr.html
+++ b/imagery/i.topo.corr/i.topo.corr.html
@@ -135,4 +135,4 @@ Dept. Biodiversity and Environmental Management, University of León, Spai
 Figure derived from Neteler & Mitasova, 2008.
 
 <p>
-<i>Last changed: $Date: 2014-12-09 19:46:50 +0100 (Tue, 09 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-09 19:39:37 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/imagery/i.topo.corr/local_proto.h b/imagery/i.topo.corr/local_proto.h
index 2c2d2a7..24f1e11 100644
--- a/imagery/i.topo.corr/local_proto.h
+++ b/imagery/i.topo.corr/local_proto.h
@@ -1,11 +1,12 @@
+#include <grass/gis.h>
 #include <grass/raster.h>
 
 #ifndef _LOCAL_PROTO_H
 #define _LOCAL_PROTO_H
 
-#define PI   3.1415926535897932384626433832795
-#define R2D 57.295779513082320877
-#define D2R  0.017453292519943295769
+#define PI   M_PI
+#define R2D  M_R2D
+#define D2R  M_D2R
 
 typedef struct
 {
diff --git a/imagery/i.topo.corr/test_i.topo.corr_synthetic_DEM_NC.sh b/imagery/i.topo.corr/test_i.topo.corr_synthetic_DEM_NC.sh
index d45e7b0..1711921 100755
--- a/imagery/i.topo.corr/test_i.topo.corr_synthetic_DEM_NC.sh
+++ b/imagery/i.topo.corr/test_i.topo.corr_synthetic_DEM_NC.sh
@@ -3,7 +3,7 @@
 # Script to test i.topo.corr with a synthetic map
 #
 # Use North Carolina location to test:
-#   grass71 ~/grassdata/nc_spm_08_grass7/user1
+#   grass72 ~/grassdata/nc_spm_08_grass7/user1
 
 if test "$GISBASE" = ""; then
  echo "You must be in GRASS to run this program."
diff --git a/imagery/i.vi/i.vi.html b/imagery/i.vi/i.vi.html
index 7ac15c7..9563186 100644
--- a/imagery/i.vi/i.vi.html
+++ b/imagery/i.vi/i.vi.html
@@ -203,13 +203,14 @@ original papers).
 ndvi( redchan, nirchan )
 
 
-Data Type Band Numbers ([NIR, Red])
-  MSS Bands     = [ 7,  5]
-  TM1-5,7 Bands = [ 4,  3]
-  TM8 Bands     = [ 5,  4]
-  AVHRR Bands   = [ 2,  1]
-  SPOT XS Bands = [ 3,  2]
-  AVIRIS Bands  = [51, 29]
+Satellite specific band numbers ([NIR, Red]):
+  MSS Bands        = [ 7,  5]
+  TM1-5,7 Bands    = [ 4,  3]
+  TM8 Bands        = [ 5,  4]
+  Sentinel-2 Bands = [ 5,  4]
+  AVHRR Bands      = [ 2,  1]
+  SPOT XS Bands    = [ 3,  2]
+  AVIRIS Bands     = [51, 29]
 
 NDVI = (NIR - Red) / (NIR + Red)
 </pre></div>
@@ -271,10 +272,177 @@ if(soil_weight_line == None):
 
 <h2>EXAMPLES</h2>
 
-This example is based on a LANDSAT TM7 scene included in the North Carolina
+<h3>Calculation of DVI</h3>
+
+The calculation of DVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.1 -p
+i.vi blue=band.1 red=band.3 nir=band.4 viname=dvi output=dvi
+r.univar -e dvi
+</pre></div>
+
+<h3>Calculation of EVI</h3>
+
+The calculation of EVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.1 -p
+i.vi blue=band.1 red=band.3 nir=band.4 viname=evi output=evi
+r.univar -e evi
+</pre></div>
+
+
+<h3>Calculation of EVI2</h3>
+
+The calculation of EVI2 from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=evi2 output=evi2
+r.univar -e evi2
+</pre></div>
+
+
+<h3>Calculation of GARI</h3>
+
+The calculation of GARI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.1 -p
+i.vi blue=band.1 green=band.2 red=band.3 nir=band.4 viname=gari output=gari
+r.univar -e gari
+</pre></div>
+
+
+<h3>Calculation of GEMI</h3>
+
+The calculation of GEMI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=gemi output=gemi
+r.univar -e gemi
+</pre></div>
+
+
+<h3>Calculation of GVI</h3>
+
+The calculation of GVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi blue=band.1 green=band.2 red=band.3 nir=band.4 band5=band.5 band7=band.7 viname=gvi output=gvi
+r.univar -e gvi
+</pre></div>
+
+
+<h3>Calculation of IPVI</h3>
+
+The calculation of IPVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=ipvi output=ipvi
+r.univar -e ipvi
+</pre></div>
+
+<h3>Calculation of MSAVI</h3>
+
+The calculation of MSAVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=msavi output=msavi
+r.univar -e msavi
+</pre></div>
+
+<!-- quite unclear how to calculate the 3 parameters, example needed:
+<h3>Calculation of MSAVI2</h3>
+
+The calculation of MSAVI2 from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=msavi2 output=msavi2 \
+     soil_line_slope=0.698364 soil_line_intercept=10 soil_noise_reduction=10
+r.univar -e msavi2
+</pre></div>
+-->
+
+<h3>Calculation of NDVI</h3>
+
+The calculation of NDVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=ndvi output=ndvi
+r.univar -e ndvi
+</pre></div>
+
+
+<h3>Calculation of PVI</h3>
+
+The calculation of PVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=pvi output=pvi
+r.univar -e pvi
+</pre></div>
+
+
+<h3>Calculation of SAVI</h3>
+
+The calculation of SAVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=savi output=savi
+r.univar -e savi
+</pre></div>
+
+
+<h3>Calculation of SR</h3>
+
+The calculation of SR from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=sr output=sr
+r.univar -e sr
+</pre></div>
+
+
+<h3>Calculation of VARI</h3>
+
+The calculation of VARI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi blue=band.2 green=band.3 red=band.4 viname=vari output=vari
+r.univar -e vari
+</pre></div>
+
+
+<!-- quite unclear how to calculate the 1 parameter, example needed:
+<h3>Calculation of WDVI</h3>
+
+The calculation of WDVI from the reflectance values is done as follows:
+
+<div class="code"><pre>
+g.region raster=band.3 -p
+i.vi red=band.3 nir=band.4 viname=wdvi output=wdvi
+r.univar -e wdvi
+</pre></div>
+-->
+
+<h3>Landsat TM7 example</h3>
+
+The following examples are based on a LANDSAT TM7 scene included in the North Carolina
 sample dataset. 
 
-<h3>Preparation: DN to reflectance</h3>
+<h4>Preparation: DN to reflectance</h4>
 
 As a first step, the original DN (digital number) pixel values must be
 converted to reflectance using <em>i.landsat.toar</em>. To do so, we 
@@ -307,7 +475,7 @@ i.landsat.toar input=lsat7_2002. output=lsat7_2002_toar. sensor=tm7 \
 
 The resulting Landsat channels are names <tt>lsat7_2002_toar.1 .. lsat7_2002_toar.8</tt>.
 
-<h3>Calculation of NDVI</h3>
+<h4>Calculation of NDVI</h4>
 
 The calculation of NDVI from the reflectance values is done as follows:
 
@@ -327,7 +495,7 @@ North Carolina dataset: NDVI
 </center>
 
 
-<h3>Calculation of ARVI</h3>
+<h4>Calculation of ARVI</h4>
 
 The calculation of ARVI from the reflectance values is done as follows:
 
@@ -346,7 +514,7 @@ North Carolina dataset: ARVI
 </center>
 
 
-<h3>Calculation of GARI</h3>
+<h4>Calculation of GARI</h4>
 
 The calculation of GARI from the reflectance values is done as follows:
 
@@ -402,4 +570,4 @@ thesis, Wageningen Agricultural Univ., The Netherland, 271 pp.
 Baburao Kamble, Asian Institute of Technology, Thailand<br>
 Yann Chemin, Asian Institute of Technology, Thailand
 
-<p><i>Last changed: $Date: 2015-12-30 14:01:52 +0100 (Wed, 30 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2016-07-28 00:29:31 +0200 (Thu, 28 Jul 2016) $</i>
diff --git a/imagery/i.vi/main.c b/imagery/i.vi/main.c
index 8873881..64569e9 100644
--- a/imagery/i.vi/main.c
+++ b/imagery/i.vi/main.c
@@ -177,22 +177,22 @@ int main(int argc, char *argv[])
     opt.sl_slope->key = "soil_line_slope";
     opt.sl_slope->type = TYPE_DOUBLE;
     opt.sl_slope->required = NO;
-    opt.sl_slope->description = _("Value of the slope of the soil line (MSAVI2 only)");
-    opt.sl_slope->guisection = _("MSAVI2 settings");
+    opt.sl_slope->description = _("Value of the slope of the soil line (MSAVI only)");
+    opt.sl_slope->guisection = _("MSAVI settings");
 
     opt.sl_int = G_define_option();
     opt.sl_int->key = "soil_line_intercept";
     opt.sl_int->type = TYPE_DOUBLE;
     opt.sl_int->required = NO;
-    opt.sl_int->description = _("Value of the intercept of the soil line (MSAVI2 only)");
-    opt.sl_int->guisection = _("MSAVI2 settings");
+    opt.sl_int->description = _("Value of the intercept of the soil line (MSAVI only)");
+    opt.sl_int->guisection = _("MSAVI settings");
 
     opt.sl_red = G_define_option();
     opt.sl_red->key = "soil_noise_reduction";
     opt.sl_red->type = TYPE_DOUBLE;
     opt.sl_red->required = NO;
-    opt.sl_red->description = _("Value of the factor of reduction of soil noise (MSAVI2 only)");
-    opt.sl_red->guisection = _("MSAVI2 settings");
+    opt.sl_red->description = _("Value of the factor of reduction of soil noise (MSAVI only)");
+    opt.sl_red->guisection = _("MSAVI settings");
 
     opt.bits = G_define_option();
     opt.bits->key = "storage_bit";
@@ -245,13 +245,13 @@ int main(int argc, char *argv[])
     if (!strcasecmp(viflag, "savi") && (!(opt.red->answer) || !(opt.nir->answer)) )
 	G_fatal_error(_("savi index requires red and nir maps"));
 
-    if (!strcasecmp(viflag, "msavi") && (!(opt.red->answer) || !(opt.nir->answer)) )
-	G_fatal_error(_("msavi index requires red and nir maps"));
-
-    if (!strcasecmp(viflag, "msavi2") && (!(opt.red->answer) || !(opt.nir->answer) || 
+    if (!strcasecmp(viflag, "msavi") && (!(opt.red->answer) || !(opt.nir->answer) || 
                                           !(opt.sl_slope->answer) || !(opt.sl_int->answer) || 
                                           !(opt.sl_red->answer)) )
-	G_fatal_error(_("msavi2 index requires red and nir maps, and 3 parameters related to soil line"));
+	G_fatal_error(_("msavi index requires red and nir maps, and 3 parameters related to soil line"));
+
+    if (!strcasecmp(viflag, "msavi2") && (!(opt.red->answer) || !(opt.nir->answer)) )
+	G_fatal_error(_("msavi2 index requires red and nir maps"));
 
     if (!strcasecmp(viflag, "gemi") && (!(opt.red->answer) || !(opt.nir->answer)) )
 	G_fatal_error(_("gemi index requires red and nir maps"));
diff --git a/include/Make/Doxyfile_arch_html.in b/include/Make/Doxyfile_arch_html.in
index 38bb834..0b4d8fb 100644
--- a/include/Make/Doxyfile_arch_html.in
+++ b/include/Make/Doxyfile_arch_html.in
@@ -32,7 +32,7 @@ PROJECT_NAME           = "GRASS GIS @GRASS_VERSION_MAJOR@ Programmer's Manual"
 # This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = @GRASS_VERSION_MAJOR at .@GRASS_VERSION_MINOR at .@GRASS_VERSION_RELEASE@(@GRASS_VERSION_DATE@)-r at GRASS_VERSION_SVN@
+PROJECT_NUMBER         = @GRASS_VERSION_MAJOR at .@GRASS_VERSION_MINOR at .@GRASS_VERSION_RELEASE@(@GRASS_VERSION_DATE@)- at GRASS_VERSION_SVN@
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer
@@ -826,7 +826,7 @@ INLINE_SOURCES         = NO
 # doxygen to hide any special comment blocks from generated source code
 # fragments. Normal C and C++ comments will always remain visible.
 
-STRIP_CODE_COMMENTS    = YES
+STRIP_CODE_COMMENTS    = NO
 
 # If the REFERENCED_BY_RELATION tag is set to YES
 # then for each documented function all documented
@@ -1532,7 +1532,9 @@ INCLUDE_FILE_PATTERNS  =
 
 PREDEFINED             = HAVE_OGR \
                          HAVE_TIFFIO_H \
-                         HAVE_GEOS
+                         HAVE_GEOS \
+                         HAVE_LIBLAPACK \
+                         HAVE_LIBBLAS
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
diff --git a/include/Make/Doxyfile_arch_latex.in b/include/Make/Doxyfile_arch_latex.in
index 44b7000..7c9cfc7 100644
--- a/include/Make/Doxyfile_arch_latex.in
+++ b/include/Make/Doxyfile_arch_latex.in
@@ -32,7 +32,7 @@ PROJECT_NAME           = "GRASS GIS @GRASS_VERSION_MAJOR@ Programmer's Manual"
 # This could be handy for archiving the generated documentation or
 # if some version control system is used.
 
-PROJECT_NUMBER         = @GRASS_VERSION_MAJOR at .@GRASS_VERSION_MINOR at .@GRASS_VERSION_RELEASE@(@GRASS_VERSION_DATE@)-r at GRASS_VERSION_SVN@
+PROJECT_NUMBER         = @GRASS_VERSION_MAJOR at .@GRASS_VERSION_MINOR at .@GRASS_VERSION_RELEASE@(@GRASS_VERSION_DATE@)- at GRASS_VERSION_SVN@
 
 # Using the PROJECT_BRIEF tag one can provide an optional one line description
 # for a project that appears at the top of each page and should give viewer
@@ -1532,7 +1532,9 @@ INCLUDE_FILE_PATTERNS  =
 
 PREDEFINED             = HAVE_OGR \
                          HAVE_TIFFIO_H \
-                         HAVE_GEOS
+                         HAVE_GEOS \
+                         HAVE_LIBLAPACK \
+                         HAVE_LIBBLAS
 
 # If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
 # this tag can be used to specify a list of macro names that should be expanded.
diff --git a/include/Make/Grass.make b/include/Make/Grass.make
index b9e447b..f3a61d6 100644
--- a/include/Make/Grass.make
+++ b/include/Make/Grass.make
@@ -114,6 +114,7 @@ libs = \
 	BTREE:btree \
 	BTREE2:btree2 \
 	CAIRODRIVER:cairodriver \
+	CALC:calc \
 	CDHC:cdhc \
 	CCMATH:ccmath \
 	CLUSTER:cluster \
@@ -183,6 +184,7 @@ ARRAYSTATSDEPS   = $(GISLIB) $(MATHLIB)
 BITMAPDEPS       = $(LINKMLIB)
 BTREE2DEPS       = $(GISLIB)
 CAIRODRIVERDEPS  = $(DRIVERLIB) $(GISLIB) $(CAIROLIB) $(FCLIB) $(ICONVLIB)
+CALCDEPS         = $(RASTERLIB) $(GISLIB) $(MATHLIB)
 CDHCDEPS         = $(MATHLIB)
 CLUSTERDEPS      = $(IMAGERYLIB) $(RASTERLIB) $(GISLIB) $(MATHLIB)
 DBMIBASEDEPS     = $(GISLIB)
@@ -195,7 +197,7 @@ DRIVERDEPS       = $(GISLIB) $(FTLIB) $(ICONVLIB) $(MATHLIB)
 DSPFDEPS         = $(GISLIB)
 FORMDEPS         = $(DBMILIB) $(GISLIB)
 RASTER3DDEPS     = $(RASTERLIB) $(GISLIB)
-GISDEPS          = $(DATETIMELIB) $(ZLIBLIBPATH) $(ZLIB) $(INTLLIB) $(REGEXLIBPATH) $(REGEXLIB) $(ICONVLIB) $(PTHREADLIBPATH) $(PTHREADLIB) $(MATHLIB)
+GISDEPS          = $(DATETIMELIB) $(ZLIBLIBPATH) $(ZLIB) $(BZLIB) $(INTLLIB) $(REGEXLIBPATH) $(REGEXLIB) $(ICONVLIB) $(PTHREADLIBPATH) $(PTHREADLIB) $(MATHLIB)
 GMATHDEPS        = $(GISLIB) $(FFTWLIB) $(LAPACKLIB) $(BLASLIB) $(CCMATHLIB) $(OMPLIBPATH) $(OMPLIB)
 GPDEDEPS         = $(RASTER3DLIB) $(RASTERLIB) $(GISLIB) $(GMATHLIB) $(OMPLIBPATH) $(OMPLIB) $(MATHLIB)
 GPROJDEPS        = $(GISLIB) $(GDALLIBS) $(PROJLIB) $(MATHLIB)
diff --git a/include/Make/GuiScript.make b/include/Make/GuiScript.make
index 1fa379a..94203f7 100644
--- a/include/Make/GuiScript.make
+++ b/include/Make/GuiScript.make
@@ -14,7 +14,7 @@ ifdef MINGW
 SCRIPTEXT = .py
 BATFILES  := $(patsubst %,$(BIN)/g.gui.%.bat,$(MODULES))
 else
-SCRIPTEXT = 
+SCRIPTEXT =
 BATFILES =
 endif
 PYFILES  := $(patsubst %,$(SCRIPTDIR)/g.gui.%$(SCRIPTEXT),$(MODULES))
@@ -25,12 +25,12 @@ guiscript: $(IMGDST) $(PYFILES) $(BATFILES)
 	$(MAKE) $(GUIHTML)
 
 $(HTMLDIR)/g.gui.%.html: g.gui.%.html g.gui.%.tmp.html | $(HTMLDIR)
-	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) MODULE_TOPDIR=$(MODULE_TOPDIR) \
         $(PYTHON) $(GISBASE)/tools/mkhtml.py g.gui.$* $(GRASS_VERSION_DATE) > $@
 
 $(HTMLDIR)/wxGUI.%.html: g.gui.%.html | $(HTMLDIR)
 	-rm -f g.gui.$*.tmp.html
-	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) MODULE_TOPDIR=$(MODULE_TOPDIR) \
         $(PYTHON) $(GISBASE)/tools/mkhtml.py g.gui.$* $(GRASS_VERSION_DATE) > $@
 
 g.gui.%.tmp.html: $(SCRIPTDIR)/g.gui.%
diff --git a/include/Make/Html.make b/include/Make/Html.make
index 8ba038d..b7b4c1b 100644
--- a/include/Make/Html.make
+++ b/include/Make/Html.make
@@ -4,7 +4,7 @@
 include $(MODULE_TOPDIR)/include/Make/HtmlRules.make
 
 $(HTMLDIR)/%.html: %.html %.tmp.html $(HTMLSRC) $(IMGDST) | $(HTMLDIR)
-	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) MODULE_TOPDIR=$(MODULE_TOPDIR) \
         $(PYTHON) $(GISBASE)/tools/mkhtml.py $* > $@
 
 $(MANDIR)/%.$(MANSECT): $(HTMLDIR)/%.html
diff --git a/include/Make/Module.make b/include/Make/Module.make
index f7b5f9a..6ba1593 100644
--- a/include/Make/Module.make
+++ b/include/Make/Module.make
@@ -10,11 +10,19 @@ include $(MODULE_TOPDIR)/include/Make/Rules.make
 include $(MODULE_TOPDIR)/include/Make/Html.make
 include $(MODULE_TOPDIR)/include/Make/Compile.make
 
-cmd: $(BIN)/$(PGM)$(EXE) html
+ETCFILES_DST := $(patsubst %,$(ETC)/$(PGM)/%,$(ETCFILES))
+
+cmd: $(BIN)/$(PGM)$(EXE) $(ETCFILES_DST) html
 
 $(BIN)/$(PGM)$(EXE): $(ARCH_OBJS) $(DEPENDENCIES)
 	$(call linker)
 
+$(ETC)/$(PGM)/%: % | $(ETC)/$(PGM)
+	$(INSTALL_DATA) $< $@
+
+$(ETC)/$(PGM):
+	$(MKDIR) $@
+
 install:
 	$(INSTALL) $(ARCH_DISTDIR)/bin/$(PGM)$(EXE) $(INST_DIR)/bin/
 	$(INSTALL_DATA) $(HTMLDIR)/$(PGM).html $(INST_DIR)/docs/html/
diff --git a/include/Make/Platform.make.in b/include/Make/Platform.make.in
index 54b8fc3..44e6d26 100644
--- a/include/Make/Platform.make.in
+++ b/include/Make/Platform.make.in
@@ -94,6 +94,11 @@ ZLIB                = @ZLIB@
 ZLIBINCPATH         = @ZLIBINCPATH@
 ZLIBLIBPATH         = @ZLIBLIBPATH@
 
+#BZIP2:
+BZLIB                = @BZLIB@
+BZLIBINCPATH         = @BZLIBINCPATH@
+BZLIBLIBPATH         = @BZLIBLIBPATH@
+
 DBMIEXTRALIB        = @DBMIEXTRALIB@
 
 #readline
@@ -168,6 +173,12 @@ LASCFLAGS           = @LIBLAS_CFLAGS@
 LASINC              = @LIBLAS_INC@
 USE_LIBLAS          = @USE_LIBLAS@
 
+#LAS LiDAR through PDAL
+PDALLIBS             = @PDAL_LIBS@
+PDALCPPFLAGS         = @PDAL_CPPFLAGS@
+PDALINC              = @PDAL_INC@
+USE_PDAL             = @USE_PDAL@
+
 #GEOS
 GEOSLIBS            = @GEOS_LIBS@
 GEOSCFLAGS          = @GEOS_CFLAGS@
@@ -199,14 +210,6 @@ CAIRO_HAS_XRENDER_SURFACE = @CAIRO_HAS_XRENDER_SURFACE@
 #Python
 PYTHON              = python
 
-#wxWidgets
-WXVERSION           = @WXVERSION@
-WXWIDGETSCXXFLAGS   = @WXWIDGETSCXXFLAGS@
-WXWIDGETSCPPFLAGS   = @WXWIDGETSCPPFLAGS@
-WXWIDGETSLIB        = @WXWIDGETSLIB@
-USE_WXWIDGETS       = @USE_WXWIDGETS@
-MACOSX_ARCHS_WXPYTHON = @MACOSX_ARCHS_WXPYTHON@
-
 #regex
 REGEXINCPATH        = @REGEXINCPATH@
 REGEXLIBPATH        = @REGEXLIBPATH@
diff --git a/include/VERSION b/include/VERSION
index 8470dc6..ba55e3d 100644
--- a/include/VERSION
+++ b/include/VERSION
@@ -1,4 +1,4 @@
 7
-0
-5
+2
+0RC1
 2016
diff --git a/include/calc.h b/include/calc.h
new file mode 100644
index 0000000..e0ba60c
--- /dev/null
+++ b/include/calc.h
@@ -0,0 +1,45 @@
+
+#ifndef GRASS_CALC_H
+#define GRASS_CALC_H
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+
+typedef int func_t(int argc, const int *argt, void **args);
+typedef int args_t(int argc, int *argt);
+
+enum {
+    E_ARG_LO	= 1,
+    E_ARG_HI	= 2,
+    E_ARG_TYPE	= 3,
+    E_RES_TYPE	= 4,
+    E_INV_TYPE	= 5,
+    E_ARG_NUM	= 6,
+    E_WTF	= 99
+};
+
+typedef struct func_desc
+{
+    const char *name;
+    args_t *check_args;
+    func_t *func;
+} func_desc;
+
+#define IS_NULL_C(x) (Rast_is_c_null_value((x)))
+#define IS_NULL_F(x) (Rast_is_f_null_value((x)))
+#define IS_NULL_D(x) (Rast_is_d_null_value((x)))
+
+#define SET_NULL_C(x) (Rast_set_c_null_value((x),1))
+#define SET_NULL_F(x) (Rast_set_f_null_value((x),1))
+#define SET_NULL_D(x) (Rast_set_d_null_value((x),1))
+
+extern volatile int floating_point_exception;
+extern volatile int floating_point_exception_occurred;
+
+extern int columns;
+
+extern func_desc calc_func_descs[];
+
+#include <grass/defs/calc.h>
+
+#endif
diff --git a/include/config.h.in b/include/config.h.in
index 280dcd9..3b6a95f 100644
--- a/include/config.h.in
+++ b/include/config.h.in
@@ -38,6 +38,9 @@
 /* define if zlib.h exists */
 #undef HAVE_ZLIB_H
 
+/* define if bzlib.h exists */
+#undef HAVE_BZLIB_H
+
 /* define if sys/ioctl.h exists */
 #undef HAVE_SYS_IOCTL_H
 
diff --git a/include/defs/calc.h b/include/defs/calc.h
new file mode 100644
index 0000000..fafa0e6
--- /dev/null
+++ b/include/defs/calc.h
@@ -0,0 +1,107 @@
+
+#ifndef GRASS_CALCDEFS_H
+#define GRASS_CALCDEFS_H
+
+extern void calc_init(int);
+extern void pre_exec(void);
+extern void post_exec(void);
+
+extern func_t f_add;
+extern func_t f_sub;
+extern func_t f_mul;
+extern func_t f_div;
+extern func_t f_mod;
+extern func_t f_pow;
+extern args_t c_binop;
+
+extern func_t f_neg;
+extern func_t f_abs;
+extern args_t c_unop;
+
+extern func_t f_gt;
+extern func_t f_ge;
+extern func_t f_lt;
+extern func_t f_le;
+extern func_t f_eq;
+extern func_t f_ne;
+extern args_t c_cmpop;
+
+extern func_t f_and;
+extern func_t f_or;
+extern func_t f_and2;
+extern func_t f_or2;
+extern func_t f_bitand;
+extern func_t f_bitor;
+extern func_t f_bitxor;
+extern args_t c_logop;
+
+extern func_t f_shiftl;
+extern func_t f_shiftr;
+extern func_t f_shiftru;
+extern args_t c_shiftop;
+
+extern func_t f_not;
+extern func_t f_bitnot;
+extern args_t c_not;
+
+extern func_t f_sqrt;
+extern func_t f_sin;
+extern func_t f_cos;
+extern func_t f_tan;
+extern func_t f_acos;
+extern func_t f_asin;
+extern args_t c_double1;
+
+extern func_t f_exp;
+extern func_t f_log;
+extern func_t f_atan;
+extern args_t c_double12;
+
+extern func_t f_int;
+extern args_t c_int;
+
+extern func_t f_float;
+extern args_t c_float;
+
+extern func_t f_double;
+extern args_t c_double;
+
+extern func_t f_round;
+extern args_t c_round;
+
+extern func_t f_eval;
+extern args_t c_eval;
+
+extern func_t f_if;
+extern args_t c_if;
+
+extern func_t f_isnull;
+extern args_t c_isnull;
+
+extern func_t f_graph;
+extern func_t f_graph2;
+extern args_t c_graph;
+
+extern func_t f_min;
+extern func_t f_max;
+extern func_t f_nmin;
+extern func_t f_nmax;
+extern args_t c_varop;
+
+extern func_t f_median;
+extern func_t f_nmedian;
+extern args_t c_median;
+
+extern func_t f_mode;
+extern func_t f_nmode;
+extern args_t c_mode;
+
+extern func_t f_rand;
+extern args_t c_binop;
+
+extern func_t f_null;
+extern args_t c_int0;
+
+extern args_t c_double0;
+
+#endif
diff --git a/include/defs/gis.h b/include/defs/gis.h
index dc6515f..4aafa6d 100644
--- a/include/defs/gis.h
+++ b/include/defs/gis.h
@@ -60,7 +60,11 @@
 
 #include <stdarg.h>
 #include <stdio.h>
+
+#ifndef CTYPESGEN
 #include <setjmp.h>
+#endif
+
 #include <sys/types.h>
 #include <sys/stat.h>
 
@@ -164,6 +168,58 @@ int G_num_standard_colors(void);
 int G_insert_commas(char *);
 void G_remove_commas(char *);
 
+/* compress.c */
+int G_compressor_number(char *);
+char *G_compressor_name(int);
+int G_check_compressor(int);
+int G_write_compressed(int, unsigned char *, int, int);
+int G_write_unompressed(int, unsigned char *, int);
+int G_read_compressed(int, int, unsigned char *, int, int);
+int G_compress(unsigned char *, int, unsigned char *, int, int);
+int G_expand(unsigned char *, int, unsigned char *, int, int);
+
+/* compress.c : no compression */
+int
+G_no_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz);
+int
+G_no_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz);
+
+/* cmprrle.c : Run Length Encoding (RLE) */
+int
+G_rle_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz);
+int
+G_rle_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz);
+
+/* cmprzlib.c : ZLIB's DEFLATE */
+int
+G_zlib_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz);
+int
+G_zlib_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz);
+
+/* cmprlz4.c : LZ4, extremely fast */
+int
+G_lz4_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz);
+int
+G_lz4_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz);
+
+/* cmprbzip.c : BZIP2, high compression, faster than ZLIB's DEFLATE with level 9 */
+int
+G_bz2_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz);
+int
+G_bz2_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz);
+
+/* add more compression methods here */
+
 /* copy_dir.c */
 int G_recursive_copy(const char *, const char *);
 
@@ -227,7 +283,10 @@ void G__read_mapset_env(void);
 void G__read_gisrc_env(void);
 
 /* error.c */
+#ifndef CTYPESGEN
 jmp_buf *G_fatal_longjmp(int);
+#endif
+
 int G_info_format(void);
 void G_message(const char *, ...) __attribute__ ((format(printf, 1, 2)));
 void G_verbose_message(const char *, ...)
@@ -247,6 +306,7 @@ void G_init_logging(void);
 char *G_file_name(char *, const char *, const char *, const char *);
 char *G_file_name_misc(char *, const char *, const char *, const char *,
 		       const char *);
+char *G_file_name_tmp(char *, const char *, const char *, const char *);
 
 /* find_file.c */
 const char *G_find_file(const char *, char *, const char *);
@@ -269,13 +329,6 @@ const char *G_find_raster3d(const char *, const char *);
 const char *G_find_vector(char *, const char *);
 const char *G_find_vector2(const char *, const char *);
 
-/* flate.c */
-int G_zlib_compress(const unsigned char *, int, unsigned char *, int);
-int G_zlib_expand(const unsigned char *, int, unsigned char *, int);
-int G_zlib_write(int, const unsigned char *, int);
-int G_zlib_read(int, int, unsigned char *, int);
-int G_zlib_write_noCompress(int, const unsigned char *, int);
-
 /* geodesic.c */
 int G_begin_geodesic_equation(double, double, double, double);
 double G_geodesic_lat_from_lon(double);
@@ -437,6 +490,7 @@ char *G_mapset_path(void);
 
 /* mapset_msc.c */
 int G_make_mapset_element(const char *);
+int G_make_mapset_element_tmp(const char *);
 int G__make_mapset_element_misc(const char *, const char *);
 int G_mapset_permissions(const char *);
 int G_mapset_permissions2(const char *, const char *, const char *);
@@ -560,6 +614,7 @@ int G_pole_in_polygon(const double *, const double *, int);
 
 /* progrm_nme.c */
 const char *G_program_name(void);
+const char *G_original_program_name(void);
 void G_set_program_name(const char *);
 
 /* proj1.c */
@@ -571,6 +626,7 @@ const char *G_projection_name(int);
 
 /* proj3.c */
 const char *G_database_unit_name(int);
+int G_database_unit();
 const char *G_database_projection_name(void);
 const char *G_database_datum_name(void);
 const char *G_database_ellipse_name(void);
@@ -596,6 +652,7 @@ void G__read_Cell_head_array(char **, struct Cell_head *, int);
 /* remove.c */
 int G_remove(const char *, const char *);
 int G_remove_misc(const char *, const char *, const char *);
+int G_recursive_remove(const char *);
 
 /* rename.c */
 int G_rename_file(const char *, const char *);
@@ -649,6 +706,7 @@ void G_init_tempfile(void);
 char *G_tempfile(void);
 char *G_tempfile_pid(int);
 void G_temp_element(char *);
+void G__temp_element(char *, int);
 
 /* mkstemp.c */
 char *G_mktemp(char *);
diff --git a/include/defs/imagery.h b/include/defs/imagery.h
index 92b2645..18f4c87 100644
--- a/include/defs/imagery.h
+++ b/include/defs/imagery.h
@@ -21,6 +21,7 @@ int I_find_group(const char *);
 int I_find_group_file(const char *, const char *);
 int I_find_subgroup(const char *, const char *);
 int I_find_subgroup_file(const char *, const char *, const char *);
+int I_find_signature_file(const char *, const char *, const char *, const char *);
 
 /* fopen.c */
 FILE *I_fopen_group_file_new(const char *, const char *);
diff --git a/include/defs/neta.h b/include/defs/neta.h
index 2fedec5..926eae8 100644
--- a/include/defs/neta.h
+++ b/include/defs/neta.h
@@ -40,8 +40,8 @@ int NetA_betweenness_closeness(dglGraph_s * graph, double *betweenness,
 /*path.c */
 int NetA_distance_from_points(dglGraph_s * graph, struct ilist *from, int *dst,
 			      dglInt32_t ** prev);
-int NetA_distance_to_points(dglGraph_s * graph, struct ilist *from, int *dst,
-			      dglInt32_t ** prev);
+int NetA_distance_to_points(dglGraph_s * graph, struct ilist *to, int *dst,
+			      dglInt32_t ** nxt);
 int NetA_find_path(dglGraph_s * graph, int from, int to, int *edges,
 		   struct ilist *list);
 
diff --git a/include/defs/raster.h b/include/defs/raster.h
index 7a6cd51..85da0c6 100644
--- a/include/defs/raster.h
+++ b/include/defs/raster.h
@@ -100,6 +100,7 @@ int Rast_cell_stats_histo_eq(struct Cell_stats *, CELL, CELL, CELL, CELL, int,
 void Rast_close(int);
 void Rast_unopen(int);
 void Rast__unopen_all(void);
+void Rast__close_null(int);
 
 /* color_compat.c */
 void Rast_make_ryg_colors(struct Colors *, CELL, CELL);
@@ -266,7 +267,9 @@ void Rast_abs_log_colors(struct Colors *, struct Colors *, int);
 /* format.c */
 int Rast__check_format(int);
 int Rast__read_row_ptrs(int);
+int Rast__read_null_row_ptrs(int, int);
 int Rast__write_row_ptrs(int);
+int Rast__write_null_row_ptrs(int, int);
 
 /* fpreclass.c */
 void Rast_fpreclass_clear(struct FPReclass *);
@@ -326,6 +329,7 @@ void Rast_get_c_row(int, CELL *, int);
 void Rast_get_f_row(int, FCELL *, int);
 void Rast_get_d_row(int, DCELL *, int);
 void Rast_get_null_value_row(int, char *, int);
+int Rast__read_null_bits(int, int, unsigned char *);
 
 /* get_row_colr.c */
 void Rast_get_row_colors(int, int, struct Colors *,
@@ -452,6 +456,7 @@ RASTER_MAP_TYPE Rast_get_map_type(int);
 int Rast_open_new(const char *, RASTER_MAP_TYPE);
 int Rast_open_new_uncompressed(const char *, RASTER_MAP_TYPE);
 void Rast_set_quant_rules(int, struct Quant *);
+int Rast__open_null_write(const char *);
 
 /* put_cellhd.c */
 void Rast_put_cellhd(const char *, struct Cell_head *);
@@ -461,8 +466,7 @@ void Rast_put_row(int, const void *, RASTER_MAP_TYPE);
 void Rast_put_c_row(int, const CELL *);
 void Rast_put_f_row(int, const FCELL *);
 void Rast_put_d_row(int, const DCELL *);
-int Rast__open_null_write(int);
-void Rast__write_null_bits(int, const unsigned char *, int, int, int);
+void Rast__write_null_bits(int, const unsigned char *);
 
 /* put_title.c */
 int Rast_put_cell_title(const char *, const char *);
@@ -540,6 +544,9 @@ char *Rast_read_vdatum(const char *, const char *);
 void Rast_write_units(const char *, const char *);
 void Rast_write_vdatum(const char *, const char *);
 
+/* rast_to_img_string.c */
+int Rast_map_to_img_str(char *, int, unsigned char*);
+
 /* reclass.c */
 int Rast_is_reclass(const char *, const char *, char *, char *);
 int Rast_is_reclassed_to(const char *, const char *, int *, char ***);
diff --git a/include/defs/raster3d.h b/include/defs/raster3d.h
index ed8b471..d7636f2 100644
--- a/include/defs/raster3d.h
+++ b/include/defs/raster3d.h
@@ -112,6 +112,11 @@ int Rast3d_copy_to_xdr(const void *, int);
 int Rast3d_init_copy_from_xdr(RASTER3D_Map *, int);
 int Rast3d_copy_from_xdr(int, void *);
 
+/* gradient.c */
+void Rast3d_gradient_double(RASTER3D_Array_double *, double *,
+			    RASTER3D_Array_double *, RASTER3D_Array_double *,
+			    RASTER3D_Array_double *);
+
 /* history.c */
 int Rast3d_write_history(const char *, struct History *);
 int Rast3d_read_history(const char *, const char *, struct History *);
diff --git a/include/defs/vector.h b/include/defs/vector.h
index 84796ce..b90e76c 100644
--- a/include/defs/vector.h
+++ b/include/defs/vector.h
@@ -160,6 +160,9 @@ int Vect_cidx_dump(const struct Map_info *, FILE *);
 int Vect_cidx_save(struct Map_info *);
 int Vect_cidx_open(struct Map_info *, int);
 
+/* Create/destroy Map_info */
+struct Map_info *Vect_new_map_struct(void);
+void Vect_destroy_map_struct(struct Map_info *);
 
 /* Set/get map header info */
 int Vect_read_header(struct Map_info *);
@@ -314,7 +317,7 @@ int Vect_select_lines_by_box(struct Map_info *, const struct bound_box *,
 int Vect_select_areas_by_box(struct Map_info *, const struct bound_box *,
                              struct boxlist *);
 int Vect_select_isles_by_box(struct Map_info *, const struct bound_box *,
-			     struct boxlist *);
+                 struct boxlist *);
 int Vect_select_nodes_by_box(struct Map_info *, const struct bound_box *,
                              struct ilist *);
 int Vect_find_node(struct Map_info *, double, double, double, double, int);
@@ -392,8 +395,12 @@ int Vect_graph_shortest_path(dglGraph_s *, int, int, struct ilist *, double *);
 /* Network (graph) */
 int Vect_net_build_graph(struct Map_info *, int, int, int, const char *,
                          const char *, const char *, int, int);
+int Vect_net_ttb_build_graph(struct Map_info *, int, int, int, int, int ,
+                            const char *, const char *, const char *, int, int);
 int Vect_net_shortest_path(struct Map_info *, int, int, struct ilist *,
                            double *);
+int Vect_net_ttb_shortest_path(struct Map_info *, int, int, int, int, int,
+                             struct ilist *, double *);
 dglGraph_s *Vect_net_get_graph(struct Map_info *);
 int Vect_net_get_line_cost(const struct Map_info *, int, int, double *);
 int Vect_net_get_node_cost(const struct Map_info *, int, double *);
@@ -402,12 +409,12 @@ int Vect_net_nearest_nodes(struct Map_info *, double, double, double, int,
                            struct line_pnts *, struct line_pnts *, double *);
 int Vect_net_shortest_path_coor(struct Map_info *, double, double, double,
                                 double, double, double, double, double,
-                                double *, struct line_pnts *, struct ilist *,
+                                double *, struct line_pnts *, struct ilist *,  struct ilist *,
                                 struct line_pnts *, struct line_pnts *,
                                 double *, double *);
-int Vect_net_shortest_path_coor2(struct Map_info *, double, double, double,
-                                double, double, double, double, double,
-                                double *, struct line_pnts *, struct ilist *, struct ilist *,
+int Vect_net_ttb_shortest_path_coor(struct Map_info *, double, double, double,
+                                double, double, double, double, double, int,
+                                double *, struct line_pnts *, struct ilist *,  struct ilist *,
                                 struct line_pnts *, struct line_pnts *,
                                 double *, double *);
 
@@ -592,10 +599,19 @@ int Vect_attach_centroids(struct Map_info *, const struct bound_box *);
     /* GEOS support */
 #ifdef HAVE_GEOS
 GEOSGeometry *Vect_read_line_geos(struct Map_info *, int, int*);
-GEOSGeometry *Vect_line_to_geos(struct Map_info *, const struct line_pnts*, int);
+GEOSGeometry *Vect_line_to_geos(const struct line_pnts*, int, int);
 GEOSGeometry *Vect_read_area_geos(struct Map_info *, int);
 GEOSCoordSequence *Vect_get_area_points_geos(struct Map_info *, int);
 GEOSCoordSequence *Vect_get_isle_points_geos(struct Map_info *, int);
+char *Vect_line_to_wkt(const struct line_pnts *, int, int);
+unsigned char *Vect_line_to_wkb(const struct line_pnts *,
+                                int, int, size_t *);
+char *Vect_read_area_to_wkt(struct Map_info *, int);
+unsigned char *Vect_read_area_to_wkb(struct Map_info *, int, size_t *);
+unsigned char *Vect_read_line_to_wkb(const struct Map_info *, 
+                                     struct line_pnts *, 
+                                     struct line_cats *, 
+                                     int, size_t *, int *);
 #endif
 
     /* Raster color tables */
diff --git a/include/gis.h b/include/gis.h
index f10e669..66a8c75 100644
--- a/include/gis.h
+++ b/include/gis.h
@@ -38,8 +38,8 @@
 static const char *GRASS_copyright __attribute__ ((unused))
     = "GRASS GNU GPL licensed Software";
 
-#define GIS_H_VERSION "$Revision: 67364 $"
-#define GIS_H_DATE    "$Date: 2015-12-24 16:07:44 +0100 (Thu, 24 Dec 2015) $"
+#define GIS_H_VERSION "$Revision: 68908 $"
+#define GIS_H_DATE    "$Date: 2016-07-09 20:12:57 +0200 (Sat, 09 Jul 2016) $"
 
 #define G_gisinit(pgm) G__gisinit(GIS_H_VERSION, (pgm))
 #define G_no_gisinit() G__no_gisinit(GIS_H_VERSION)
@@ -120,6 +120,12 @@ static const char *GRASS_copyright __attribute__ ((unused))
 #undef M_PI_4
 #define M_PI_4  0.78539816339744830962	/* pi/4 */
 
+#undef M_R2D
+#define M_R2D  57.295779513082320877    /* 180/pi */
+
+#undef M_D2R
+#define M_D2R   0.017453292519943295769 /* pi/180 */
+
 /* epsilon (IEEE: 2.220446e-16) */
 #define GRASS_EPSILON 1.0e-15
 
@@ -340,6 +346,7 @@ enum rule_type {
 /* default colors */
 #define DEFAULT_FG_COLOR "black"
 #define DEFAULT_BG_COLOR "white"
+#define DEFAULT_COLOR_TABLE "viridis"
 
 /* error codes */
 #define G_FATAL_EXIT    0
diff --git a/include/gmath.h b/include/gmath.h
index f6afb46..f453368 100644
--- a/include/gmath.h
+++ b/include/gmath.h
@@ -4,7 +4,7 @@
 
  * @Copyright David D.Gray <ddgray at armadce.demon.co.uk>
  * 27th. Sep. 2000
- * Last updated: $Id: gmath.h 49183 2011-11-11 17:44:36Z martinl $
+ * Last updated: $Id: gmath.h 66485 2015-10-13 02:25:44Z wenzeslaus $
  *
 
  * This file is part of GRASS GIS. It is free software. You can 
@@ -24,10 +24,6 @@
 #define GRASS_GMATH_H
 
 #include <grass/config.h>
-#if defined(HAVE_LIBLAPACK) && defined(HAVE_LIBBLAS) && defined(HAVE_G2C_H)
- /* only include if available */
-#include <grass/la.h>
-#endif
 #include <stddef.h>
 
 /*solver names */
diff --git a/include/la.h b/include/la.h
index 7457b47..c01a712 100644
--- a/include/la.h
+++ b/include/la.h
@@ -13,6 +13,14 @@
  * \date 2000-2007
  */
 
+#ifndef HAVE_LIBBLAS
+#error GRASS GIS is not configured with BLAS (la.h cannot be included)
+#endif
+
+#ifndef HAVE_LIBLAPACK
+#error GRASS GIS is not configured with LAPACK (la.h cannot be included)
+#endif
+
 #ifndef GRASS_LA_H
 #define GRASS_LA_H
 
diff --git a/include/raster3d.h b/include/raster3d.h
index 736797b..0bc84a8 100644
--- a/include/raster3d.h
+++ b/include/raster3d.h
@@ -255,6 +255,18 @@ typedef int write_fn(int, const void *, void *);
 typedef int read_fn(int, void *, void *);
 
 /*---------------------------------------------------------------------------*/
+/* for storing values of 3D raster block in a flat array */
+typedef struct
+{
+    DCELL *array;
+    int sx;
+    int sy;
+    int sz;
+
+} RASTER3D_Array_double;
+
+#define RASTER3D_ARRAY_ACCESS(arr, x, y, z) \
+    ((arr)->array[(arr)->sx * (arr)->sy * (z) + (arr)->sx * (y) + (x)])
 
 /*============================== Prototypes ================================*/
 
diff --git a/include/symbol.h b/include/symbol.h
index 5dbee7b..a0015de 100644
--- a/include/symbol.h
+++ b/include/symbol.h
@@ -67,6 +67,8 @@ typedef struct
 typedef struct
 {
     double scale;		/* to get symbol of size 1, each vertex must be multiplied by this scale */
+    double yscale;		/* scale in x dimension */
+    double xscale;		/* scale in y dimension */
     int count, alloc;		/* numer of parts */
     SYMBPART **part;		/* objects ( parts ) */
 } SYMBOL;
diff --git a/lib/Makefile b/lib/Makefile
index 569f6bf..d6f2a27 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -30,6 +30,7 @@ SUBDIRS = \
 	rst \
 	lidar \
 	raster3d \
+	raster3d/test \
 	gpde \
 	dspf \
 	symbol \
@@ -42,7 +43,8 @@ SUBDIRS = \
 	temporal \
 	python \
 	iostream \
-	manage
+	manage \
+	calc
 
 include $(MODULE_TOPDIR)/include/Make/Dir.make
 include $(MODULE_TOPDIR)/include/Make/Doxygen.make
diff --git a/lib/btree2/Makefile b/lib/btree2/Makefile
index a3ecefb..84dda64 100644
--- a/lib/btree2/Makefile
+++ b/lib/btree2/Makefile
@@ -8,4 +8,12 @@ LIB = BTREE2
 
 include $(MODULE_TOPDIR)/include/Make/Lib.make
 
-default: lib
+HEADERS := $(ARCH_INCDIR)/kdtree.h
+
+default: headers
+	$(MAKE) lib
+
+headers: $(HEADERS)
+
+$(ARCH_INCDIR)/kdtree.h: kdtree.h
+	$(INSTALL_DATA) $< $@
diff --git a/lib/btree2/README b/lib/btree2/README
deleted file mode 100644
index 1164bab..0000000
--- a/lib/btree2/README
+++ /dev/null
@@ -1,75 +0,0 @@
-
-#include <grass/rbtree.h>
-
-and link to BTREE2LIB
-
-to make use of this binary balanced (Red-Black) search tree
-
-NOTE: duplicates are not supported
-
-
-USAGE
-=====
-
-see also grass/rbtree.h for instructions on how to use it
-  
-/* custom compare function */
-extern int my_compare_fn(const void *, const void *);
-int my_compare_fn(const void *a, const void *b)
-{
-    if ((mydatastruct *) a < (mydatastruct *) b)
-        return -1;
-    else if ((mydatastruct *) a > (mydatastruct *) b)
-        return 1;
-    else if ((mydatastruct *) a == (mydatastruct *) b)
-        return 0;
-}
-
-/* create and initialize tree: */
-struct RB_TREE *mytree = rbtree_create(my_compare_fn, item_size);
-
-/* insert items to tree: */
-    struct mydatastruct data = <some data>;
-    
-    if (rbtree_insert(mytree, &data) == 0)
-        G_warning("could not insert data");
-
-/* find item in tree: */
-    struct mydatastruct data = <some data>;
-    
-    if (rbtree_find(mytree, &data) == 0)
-        G_message("data not found");
-
-/* delete item from tree: */
-    struct mydatastruct data = <some data>;
-    
-    if (rbtree_remove(mytree, &data) == 0)
-        G_warning("could not find data in tree");
-
-/* traverse tree (get all items in tree in ascending order): */
-    struct RB_TRAV trav;
-    
-    rbtree_init_trav(&trav, tree);
-    while ((data = rbtree_traverse(&trav)) != NULL) {
-        if (my_compare_fn(data, threshold_data) == 0) break;
-  	    /* do something with data */
-    }
-
-/* get a selection of items: all data > data1 and < data2
- * start in tree where data is last smaller or first larger compared to data1 */
-    struct RB_TRAV trav;
-    
-    rbtree_init_trav(&trav, tree);
-    data = rbtree_traverse_start(&trav, &data1);
-  	    /* do something with data */
-    while ((data = rbtree_traverse(&trav)) != NULL) {
-       if (data > data2) break;
-  	    /* do something with data */
-    }
- 
-/* destroy tree: */
-    rbtree_destroy(mytree);
- 
-/* debug the whole tree with */
-    rbtree_debug(mytree, mytree->root);
-    
diff --git a/lib/btree2/btree2.dox b/lib/btree2/btree2.dox
new file mode 100644
index 0000000..688cfef
--- /dev/null
+++ b/lib/btree2/btree2.dox
@@ -0,0 +1,175 @@
+/*! \page btree2 btree2 library
+
+\tableofcontents
+
+Red-Black tree
+==============
+
+Include and linking
+-------------------
+
+To make use of the binary balanced (Red-Black) search tree include:
+
+    #include <grass/rbtree.h>
+
+and link to `BTREE2LIB` in a Makefile.
+
+\note
+    Duplicates are not supported.
+
+Example
+-------
+
+Define custom compare function:
+
+    int my_compare_fn(const void *a, const void *b)
+    {
+        if ((mydatastruct *) a < (mydatastruct *) b)
+            return -1;
+        else if ((mydatastruct *) a > (mydatastruct *) b)
+            return 1;
+        else if ((mydatastruct *) a == (mydatastruct *) b)
+            return 0;
+    }
+
+Create and initialize tree:
+
+    struct RB_TREE *mytree = rbtree_create(my_compare_fn, item_size);
+
+Insert items to tree:
+
+    struct mydatastruct data = <some data>;
+    
+    if (rbtree_insert(mytree, &data) == 0)
+        G_warning("could not insert data");
+
+Find item in tree:
+
+    struct mydatastruct data = <some data>;
+    
+    if (rbtree_find(mytree, &data) == 0)
+        G_message("data not found");
+
+Delete item from tree:
+
+    struct mydatastruct data = <some data>;
+    
+    if (rbtree_remove(mytree, &data) == 0)
+        G_warning("could not find data in tree");
+
+Traverse tree (get all items in tree in ascending order):
+
+    struct RB_TRAV trav;
+    
+    rbtree_init_trav(&trav, tree);
+    while ((data = rbtree_traverse(&trav)) != NULL) {
+        if (my_compare_fn(data, threshold_data) == 0) break;
+            // do something with data (using C++ comments because of Doxygen)
+    }
+
+Get a selection of items: all data > data1 and < data2.
+Start in tree where data is last smaller or first larger compared to data1:
+
+    struct RB_TRAV trav;
+    
+    rbtree_init_trav(&trav, tree);
+    data = rbtree_traverse_start(&trav, &data1);
+    // do something with data
+    while ((data = rbtree_traverse(&trav)) != NULL) {
+        if (data > data2) break;
+            // do something with data
+    }
+ 
+Destroy tree:
+
+    rbtree_destroy(mytree);
+ 
+Debug the whole tree with:
+
+    rbtree_debug(mytree, mytree->root);
+
+See also \ref rbtree.h for more instructions on how to use it.
+
+
+k-d tree
+========
+
+Description
+-----------
+
+k-d tree is a multidimensional (k-dimensional) binary search tree for
+nearest neighbor search.
+
+This k-d tree finds the exact nearest neighbor(s), not some
+approximation. It supports up to 255 dimensions. It is dynamic, i.e.
+points can be inserted and removed at any time. It is balanced to
+improve search performance. It provides k nearest neighbor search
+(find k neighbors to a given coordinate) as well as radius or distance
+search (find all neighbors within radius, i.e. not farther away than
+radius to a given coordinate).
+
+
+Include and linking
+-------------------
+
+Include: 
+
+    #include <grass/kdtree.h>
+
+and link to `BTREE2LIB` in a Makefile.
+
+
+Example
+-------
+
+Create a new k-d tree (here 3D):
+
+    struct kdtree *t = kdtree_create(3, NULL);
+
+Insert items:
+
+    for (i = 0; i < npoints; i++)
+        kdtree_insert(t, c, i, 1);
+
+Find nearest neighbor for each point:
+
+    for (i = 0; i < npoints; i++)
+        int found = kdtree_knn(t, c, &uid, &dist, 1, i);
+
+Destroy the tree:
+
+    kdtree_destroy(t);
+
+
+Example usages
+--------------
+
+- Nearest neighbor statistics: test if points are randomly
+  distributed. For example, an older version of GRASS addon `v.nnstat`
+  used an external k-d tree from PCL (which in turn uses flann)
+  which finds the approximate, not the exact nearest neighbor.
+  The GRASS-native k-d tree always finds the real nearest neighbor.
+
+- Spatial cluster analysis: a point cloud can be partitioned into
+  separate clusters where points within each cluster are closer to each
+  other than to points of another cluster. For example, as used in
+  \gmod{v.cluster}.
+
+- %Point cloud thinning: a sample can be generated from a large point
+  cloud by specifying a minimum distance between sample points.
+
+- This k-d tree is used by \gmod{v.clean} `tool=snap` (Vect_snap_lines()),
+  reducing both memory consumption and processing time.
+
+
+See also
+========
+
+- \ref rbtree.h
+- \ref kdtree.h
+- \ref rtree.h
+- \ref btree.h
+- [Wikipedia article on Red-black_tree](https://en.wikipedia.org/wiki/Red-black_tree)
+- [Wikipedia article on k-d tree](https://en.wikipedia.org/wiki/K-d_tree)
+
+*/
diff --git a/lib/btree2/kdtree.c b/lib/btree2/kdtree.c
new file mode 100644
index 0000000..cc568a3
--- /dev/null
+++ b/lib/btree2/kdtree.c
@@ -0,0 +1,1351 @@
+/*!
+ * \file kdtree.c
+ *
+ * \brief binary search tree 
+ *
+ * Dynamic balanced k-d tree implementation
+ *
+ * (C) 2014 by the GRASS Development Team
+ *
+ * This program is free software under the GNU General Public License
+ * (>=v2).  Read the file COPYING that comes with GRASS for details.
+ *
+ * \author Markus Metz
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include "kdtree.h"
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#define KD_BTOL 7
+
+#ifdef KD_DEBUG
+#undef KD_DEBUG
+#endif
+
+static int rcalls = 0;
+static int rcallsmax = 0;
+
+static struct kdnode *kdtree_insert2(struct kdtree *, struct kdnode *,
+                                     struct kdnode *, int, int);
+static int kdtree_replace(struct kdtree *, struct kdnode *, int);
+static int kdtree_balance(struct kdtree *, struct kdnode *, int);
+static int kdtree_first(struct kdtrav *, double *, int *);
+static int kdtree_next(struct kdtrav *, double *, int *);
+
+static int cmp(struct kdnode *a, struct kdnode *b, int p)
+{
+    if (a->c[p] < b->c[p])
+	return -1;
+    if (a->c[p] > b->c[p])
+	return 1;
+
+    return (a->uid < b->uid ? -1 : a->uid > b->uid);
+}
+
+static int cmpc(struct kdnode *a, struct kdnode *b, struct kdtree *t)
+{
+    int i;
+    for (i = 0; i < t->ndims; i++) {
+	if (a->c[i] != b->c[i]) {
+	    return 1;
+	}
+    }
+
+    return 0;
+}
+
+static struct kdnode *kdtree_newnode(struct kdtree *t)
+{
+    struct kdnode *n = G_malloc(sizeof(struct kdnode));
+    
+    n->c = G_malloc(t->ndims * sizeof(double));
+    n->dim = 0;
+    n->depth = 0;
+    n->uid = 0;
+    n->child[0] = NULL;
+    n->child[1] = NULL;
+    
+    return n;
+}
+
+static void kdtree_free_node(struct kdnode *n)
+{
+    G_free(n->c);
+    G_free(n);
+}
+
+/* create a new k-d tree with ndims dimensions,
+ * optionally set balancing tolerance */
+struct kdtree *kdtree_create(char ndims, int *btol)
+{
+    int i;
+    struct kdtree *t;
+    
+    t = G_malloc(sizeof(struct kdtree));
+    
+    t->ndims = ndims;
+    t->csize = ndims * sizeof(double);
+    t->btol = KD_BTOL;
+    if (btol) {
+	t->btol = *btol;
+	if (t->btol < 2)
+	    t->btol = 2;
+    }
+    t->btol = 7;
+
+    t->nextdim = G_malloc(ndims * sizeof(char));
+    for (i = 0; i < ndims - 1; i++)
+	t->nextdim[i] = i + 1;
+    t->nextdim[ndims - 1] = 0;
+
+    t->count = 0;
+    t->root = NULL;
+
+    return t;
+}
+
+/* clear the tree, removing all entries */
+void kdtree_clear(struct kdtree *t)
+{
+    struct kdnode *it;
+    struct kdnode *save = t->root;
+
+    /*
+    Rotate away the left links so that
+    we can treat this like the destruction
+    of a linked list
+    */
+    while((it = save) != NULL) {
+	if (it->child[0] == NULL) {
+	    /* No left links, just kill the node and move on */
+	    save = it->child[1];
+	    kdtree_free_node(it);
+	    it = NULL;
+	}
+	else {
+	    /* Rotate away the left link and check again */
+	    save = it->child[0];
+	    it->child[0] = save->child[1];
+	    save->child[1] = it;
+	}
+    }
+    t->root = NULL;
+}
+
+/* destroy the tree */
+void kdtree_destroy(struct kdtree *t)
+{
+    /* remove all entries */
+    kdtree_clear(t);
+    G_free(t->nextdim);
+
+    G_free(t);
+    t = NULL;
+}
+
+/* insert an item (coordinates c and uid) into the k-d tree
+ * dc == 1: allow duplicate coordinates */
+int kdtree_insert(struct kdtree *t, double *c, int uid, int dc)
+{
+    struct kdnode *nnew;
+    size_t count = t->count;
+
+    nnew = kdtree_newnode(t);
+    memcpy(nnew->c, c, t->csize);
+    nnew->uid = uid;
+
+    t->root = kdtree_insert2(t, t->root, nnew, 1, dc);
+
+    /* print depth of recursion
+     * recursively called fns are insert2, balance, and replace */
+    /*
+    if (rcallsmax > 1)
+	fprintf(stdout, "%d\n", rcallsmax);
+    */
+
+    return count < t->count;
+}
+
+/* remove an item from the k-d tree
+ * coordinates c and uid must match */
+int kdtree_remove(struct kdtree *t, double *c, int uid)
+{
+    struct kdnode sn, *n;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+    } s[256];
+    int top;
+    int dir, found;
+    int ld, rd;
+
+    sn.c = c;
+    sn.uid = uid;
+
+    /* find sn node */
+    top = 0;
+    s[top].n = t->root;
+    dir = 1;
+    found = 0;
+    while (!found) {
+	n = s[top].n;
+	found = (!cmpc(&sn, n, t) && sn.uid == n->uid);
+	if (!found) {
+	    dir = cmp(&sn, n, n->dim) > 0;
+	    s[top].dir = dir;
+	    top++;
+	    s[top].n = n->child[dir];
+
+	    if (!s[top].n) {
+		G_warning("Node does not exist");
+		
+		return 0;
+	    }
+	}
+    }
+
+    if (s[top].n->depth == 0) {
+	kdtree_free_node(s[top].n);
+	s[top].n = NULL;
+	if (top) {
+	    top--;
+	    n = s[top].n;
+	    dir = s[top].dir;
+	    n->child[dir] = NULL;
+
+	    /* update node depth */
+	    n->depth = (!n->child[!dir] ? 0 : n->child[!dir]->depth + 1);
+	}
+	else {
+	    t->root = NULL;
+
+	    return 1;
+	}
+    }
+    else
+	kdtree_replace(t, s[top].n, 1);
+
+    if (top) {
+	top--;
+	dir = s[top].dir;
+	n = s[top].n;
+
+	while (kdtree_balance(t, n->child[dir], 0));
+
+	/* update node depth */
+	ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	n->depth = MAX(ld, rd) + 1;
+    }
+    while (top) {
+	top--;
+	n = s[top].n;
+
+	/* update node depth */
+	ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	n->depth = MAX(ld, rd) + 1;
+    }
+
+    while (kdtree_balance(t, t->root, 0));
+
+    return 1;
+}
+
+/* k-d tree optimization, only useful if the tree will be used heavily
+ * (more searches than items in the tree)
+ * level 0 = a bit, 1 = more, 2 = a lot */
+void kdtree_optimize(struct kdtree *t, int level)
+{
+    struct kdnode *n, *n2;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+	char v;
+    } s[256];
+    int dir;
+    int top;
+    int ld, rd;
+    int diffl, diffr;
+    int nbal;
+
+    if (!t->root)
+	return;
+
+    G_debug(1, "k-d tree optimization for %zd items, tree depth %d",
+            t->count, t->root->depth);
+
+    nbal = 0;
+    top = 0;
+    s[top].n = t->root;
+    while (s[top].n) {
+	n = s[top].n;
+
+	/* balance node */
+	while (kdtree_balance(t, n, level)) {
+	    while (kdtree_balance(t, n->child[0], level));
+	    while (kdtree_balance(t, n->child[1], level));
+
+	    ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	    rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	    n->depth = MAX(ld, rd) + 1;
+	    nbal++;
+	}
+
+	ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	rd = (!n->child[1] ? -1 : n->child[1]->depth);
+
+	dir = (rd > ld);
+
+	top++;
+	s[top].n = n->child[dir];
+    }
+    
+    while (top) {
+	top--;
+	n = s[top].n;
+
+	/* update node depth */
+	ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	n->depth = MAX(ld, rd) + 1;
+    }
+
+    if (level) {
+	top = 0;
+	s[top].n = t->root;
+	while (s[top].n) {
+	    n = s[top].n;
+
+	    /* balance node */
+	    while (kdtree_balance(t, n, level)) {
+		while (kdtree_balance(t, n->child[0], level));
+		while (kdtree_balance(t, n->child[1], level));
+
+		ld = (!n->child[0] ? -1 : n->child[0]->depth);
+		rd = (!n->child[1] ? -1 : n->child[1]->depth);
+		n->depth = MAX(ld, rd) + 1;
+		nbal++;
+	    }
+
+	    diffl = diffr = -1;
+	    if (n->child[0]) {
+		n2 = n->child[0];
+		ld = (!n2->child[0] ? -1 : n2->child[0]->depth);
+		rd = (!n2->child[1] ? -1 : n2->child[1]->depth);
+		
+		diffl = ld - rd;
+		if (diffl < 0)
+		    diffl = -diffl;
+	    }
+	    if (n->child[1]) {
+		n2 = n->child[1];
+		ld = (!n2->child[0] ? -1 : n2->child[0]->depth);
+		rd = (!n2->child[1] ? -1 : n2->child[1]->depth);
+		
+		diffr = ld - rd;
+		if (diffr < 0)
+		    diffr = -diffr;
+	    }
+	    
+	    dir = (diffr > diffl);
+
+	    top++;
+	    s[top].n = n->child[dir];
+	}
+	
+	while (top) {
+	    top--;
+	    n = s[top].n;
+
+	    /* update node depth */
+	    ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	    rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	    n->depth = MAX(ld, rd) + 1;
+	}
+    }
+
+    G_debug(1, "k-d tree optimization: %d times balanced, new depth %d",
+            nbal, t->root->depth);
+
+    return;
+}
+
+/* find k nearest neighbors 
+ * results are stored in uid (uids) and d (squared distances)
+ * optionally an uid to be skipped can be given
+ * useful when searching for the nearest neighbors of an item 
+ * that is also in the tree */
+int kdtree_knn(struct kdtree *t, double *c, int *uid, double *d, int k, int *skip)
+{
+    int i, found;
+    double diff, dist, maxdist;
+    struct kdnode sn, *n;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+	char v;
+    } s[256];
+    int dir;
+    int top;
+
+    if (!t->root)
+	return 0;
+
+    sn.c = c;
+    sn.uid = (int)0x80000000;
+    if (skip)
+	sn.uid = *skip;
+
+    maxdist = 1.0 / 0.0;
+    found = 0;
+
+    /* go down */
+    top = 0;
+    s[top].n = t->root;
+    while (s[top].n) {
+	n = s[top].n;
+	dir = cmp(&sn, n, n->dim) > 0;
+	s[top].dir = dir;
+	s[top].v = 0;
+	top++;
+	s[top].n = n->child[dir];
+    }
+    
+    /* go back up */
+    while (top) {
+	top--;
+	
+	if (!s[top].v) {
+	    s[top].v = 1;
+	    n = s[top].n;
+
+	    if (n->uid != sn.uid) {
+		if (found < k) {
+		    dist = 0.0;
+		    i = t->ndims - 1;
+		    do {
+			diff = sn.c[i] - n->c[i];
+			dist += diff * diff;
+			
+		    } while (i--);
+
+		    i = found;
+		    while (i > 0 && d[i - 1] > dist) {
+			d[i] = d[i - 1];
+			uid[i] = uid[i - 1];
+			i--;
+		    }
+		    if (i < found && d[i] == dist && uid[i] == n->uid)
+			G_fatal_error("knn: inserting duplicate");
+		    d[i] = dist;
+		    uid[i] = n->uid;
+		    maxdist = d[found];
+		    found++;
+		}
+		else {
+		    dist = 0.0;
+		    i = t->ndims - 1;
+		    do {
+			diff = sn.c[i] - n->c[i];
+			dist += diff * diff;
+			
+		    } while (i-- && dist <= maxdist);
+
+		    if (dist < maxdist) {
+			i = k - 1;
+			while (i > 0 && d[i - 1] > dist) {
+			    d[i] = d[i - 1];
+			    uid[i] = uid[i - 1];
+			    i--;
+			}
+			if (d[i] == dist && uid[i] == n->uid)
+			    G_fatal_error("knn: inserting duplicate");
+			d[i] = dist;
+			uid[i] = n->uid;
+
+			maxdist = d[k - 1];
+		    }
+		}
+		if (found == k && maxdist == 0.0)
+		    break;
+	    }
+
+	    /* look on the other side ? */
+	    dir = s[top].dir;
+	    diff = sn.c[(int)n->dim] - n->c[(int)n->dim];
+	    dist = diff * diff;
+
+	    if (dist <= maxdist) {
+		/* go down the other side */
+		top++;
+		s[top].n = n->child[!dir];
+		while (s[top].n) {
+		    n = s[top].n;
+		    dir = cmp(&sn, n, n->dim) > 0;
+		    s[top].dir = dir;
+		    s[top].v = 0;
+		    top++;
+		    s[top].n = n->child[dir];
+		}
+	    }
+	}
+    }
+
+    return found;
+}
+
+/* find all nearest neighbors within distance aka radius search
+ * results are stored in puid (uids) and pd (squared distances)
+ * memory is allocated as needed, the calling fn must free the memory
+ * optionally an uid to be skipped can be given */
+int kdtree_dnn(struct kdtree *t, double *c, int **puid, double **pd,
+               double maxdist, int *skip)
+{
+    int i, k, found;
+    double diff, dist;
+    struct kdnode sn, *n;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+	char v;
+    } s[256];
+    int dir;
+    int top;
+    int *uid;
+    double *d, maxdistsq;
+
+    if (!t->root)
+	return 0;
+
+    sn.c = c;
+    sn.uid = (int)0x80000000;
+    if (skip)
+	sn.uid = *skip;
+
+    *pd = NULL;
+    *puid = NULL;
+
+    k = 0;
+    uid = NULL;
+    d = NULL;
+
+    found = 0;
+    maxdistsq = maxdist * maxdist;
+
+    /* go down */
+    top = 0;
+    s[top].n = t->root;
+    while (s[top].n) {
+	n = s[top].n;
+	dir = cmp(&sn, n, n->dim) > 0;
+	s[top].dir = dir;
+	s[top].v = 0;
+	top++;
+	s[top].n = n->child[dir];
+    }
+    
+    /* go back up */
+    while (top) {
+	top--;
+	
+	if (!s[top].v) {
+	    s[top].v = 1;
+	    n = s[top].n;
+
+	    if (n->uid != sn.uid) {
+		dist = 0;
+		i = t->ndims - 1;
+		do {
+		    diff = sn.c[i] - n->c[i];
+		    dist += diff * diff;
+		    
+		} while (i-- && dist <= maxdistsq);
+
+		if (dist <= maxdistsq) {
+		    if (found + 1 >= k) {
+			k = found + 10;
+			uid = G_realloc(uid, k * sizeof(int));
+			d = G_realloc(d, k * sizeof(double));
+		    }
+		    i = found;
+		    while (i > 0 && d[i - 1] > dist) {
+			d[i] = d[i - 1];
+			uid[i] = uid[i - 1];
+			i--;
+		    }
+		    if (i < found && d[i] == dist && uid[i] == n->uid)
+			G_fatal_error("dnn: inserting duplicate");
+		    d[i] = dist;
+		    uid[i] = n->uid;
+		    found++;
+		}
+	    }
+
+	    /* look on the other side ? */
+	    dir = s[top].dir;
+
+	    diff = fabs(sn.c[(int)n->dim] - n->c[(int)n->dim]);
+	    if (diff <= maxdist) {
+		/* go down the other side */
+		top++;
+		s[top].n = n->child[!dir];
+		while (s[top].n) {
+		    n = s[top].n;
+		    dir = cmp(&sn, n, n->dim) > 0;
+		    s[top].dir = dir;
+		    s[top].v = 0;
+		    top++;
+		    s[top].n = n->child[dir];
+		}
+	    }
+	}
+    }
+
+    *pd = d;
+    *puid = uid;
+
+    return found;
+}
+
+/* find all nearest neighbors within range aka box search
+ * the range is specified with min and max for each dimension as
+ * (min1, min2, ..., minn, max1, max2, ..., maxn)
+ * results are stored in puid (uids)
+ * memory is allocated as needed, the calling fn must free the memory
+ * optionally an uid to be skipped can be given */
+int kdtree_rnn(struct kdtree *t, double *c, int **puid, int *skip)
+{
+    int i, k, found, inside;
+    struct kdnode sn, *n;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+	char v;
+    } s[256];
+    int dir;
+    int top;
+    int *uid;
+
+    if (!t->root)
+	return 0;
+
+    sn.c = c;
+    sn.uid = (int)0x80000000;
+    if (skip)
+	sn.uid = *skip;
+
+    *puid = NULL;
+
+    k = 0;
+    uid = NULL;
+
+    found = 0;
+
+    /* go down */
+    top = 0;
+    s[top].n = t->root;
+    while (s[top].n) {
+	n = s[top].n;
+	dir = cmp(&sn, n, n->dim) > 0;
+	s[top].dir = dir;
+	s[top].v = 0;
+	top++;
+	s[top].n = n->child[dir];
+    }
+    
+    /* go back up */
+    while (top) {
+	top--;
+	
+	if (!s[top].v) {
+	    s[top].v = 1;
+	    n = s[top].n;
+
+	    if (n->uid != sn.uid) {
+		inside = 1;
+		for (i = 0; i < t->ndims; i++) {
+		    if (n->c[i] < sn.c[i] || n->c[i] > sn.c[i + t->ndims]) {
+			inside = 0;
+			break;
+		    }
+		}
+
+		if (inside) {
+		    if (found + 1 >= k) {
+			k = found + 10;
+			uid = G_realloc(uid, k * sizeof(int));
+		    }
+		    i = found;
+		    uid[i] = n->uid;
+		    found++;
+		}
+	    }
+
+	    /* look on the other side ? */
+	    dir = s[top].dir;
+	    if (n->c[(int)n->dim] >= sn.c[(int)n->dim] && 
+	        n->c[(int)n->dim] <= sn.c[(int)n->dim + t->ndims]) {
+		/* go down the other side */
+		top++;
+		s[top].n = n->child[!dir];
+		while (s[top].n) {
+		    n = s[top].n;
+		    dir = cmp(&sn, n, n->dim) > 0;
+		    s[top].dir = dir;
+		    s[top].v = 0;
+		    top++;
+		    s[top].n = n->child[dir];
+		}
+	    }
+	}
+    }
+
+    *puid = uid;
+
+    return found;
+}
+
+/* initialize tree traversal
+ * (re-)sets trav structure
+ * returns 0
+ */
+int kdtree_init_trav(struct kdtrav *trav, struct kdtree *tree)
+{
+    trav->tree = tree;
+    trav->curr_node = tree->root;
+    trav->first = 1;
+    trav->top = 0;
+
+    return 0;
+}
+
+/* traverse the tree
+ * useful to get all items in the tree non-recursively
+ * struct kdtrav *trav needs to be initialized first
+ * returns 1, 0 when finished
+ */
+int kdtree_traverse(struct kdtrav *trav, double *c, int *uid)
+{
+    if (trav->curr_node == NULL) {
+	if (trav->first)
+	    G_debug(1, "k-d tree: empty tree");
+	else
+	    G_debug(1, "k-d tree: finished traversing");
+
+	return 0;
+    }
+
+    if (trav->first) {
+	trav->first = 0;
+	return kdtree_first(trav, c, uid);
+    }
+
+    return kdtree_next(trav, c, uid);
+}
+
+
+/**********************************************/
+/*            internal functions              */
+/**********************************************/
+
+static int kdtree_replace(struct kdtree *t, struct kdnode *r, int bmode)
+{
+    double mindist;
+    int rdir, ordir, dir;
+    int ld, rd, old_depth;
+    struct kdnode *n, *rn, *or;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+	char v;
+    } s[256];
+    int top, top2;
+    int is_leaf;
+    int nr;
+
+    if (!r)
+	return 0;
+    if (!r->child[0] && !r->child[1])
+	return 0;
+
+    /* do not call kdtree_balance in this fn, this can cause 
+     * stack overflow due to too many recursive calls */
+
+    /* find replacement for r
+     * overwrite r, delete replacement */
+    nr = 0;
+
+    /* pick a subtree */
+    rdir = 1;
+
+    or = r;
+    ld = (!or->child[0] ? -1 : or->child[0]->depth);
+    rd = (!or->child[1] ? -1 : or->child[1]->depth);
+
+    if (ld > rd) {
+	rdir = 0;
+    }
+
+    /* replace old root, make replacement the new root
+     * repeat until replacement is leaf */
+    ordir = rdir;
+    is_leaf = 0;
+    s[0].n = or;
+    s[0].dir = ordir;
+    top2 = 1;
+    mindist = -1;
+    while (!is_leaf) {
+	rn = NULL;
+
+	/* find replacement for old root */
+	top = top2;
+	s[top].n = or->child[ordir];
+
+	n = s[top].n;
+	rn = n;
+	mindist = or->c[(int)or->dim] - n->c[(int)or->dim];
+	if (ordir)
+	    mindist = -mindist;
+
+	/* go down */
+	while (s[top].n) {
+	    n = s[top].n;
+	    dir = !ordir;
+	    if (n->dim != or->dim)
+		dir = cmp(or, n, n->dim) > 0;
+	    s[top].dir = dir;
+	    s[top].v = 0;
+	    top++;
+	    s[top].n = n->child[dir];
+	}
+
+	/* go back up */
+	while (top > top2) {
+	    top--;
+
+	    if (!s[top].v) {
+		s[top].v = 1;
+		n = s[top].n;
+		if ((cmp(rn, n, or->dim) > 0) == ordir) {
+		    rn = n;
+		    mindist = or->c[(int)or->dim] - n->c[(int)or->dim];
+		    if (ordir)
+			mindist = -mindist;
+		}
+
+		/* look on the other side ? */
+		dir = s[top].dir;
+		if (n->dim != or->dim &&
+		    mindist >= fabs(n->c[(int)n->dim] - n->c[(int)n->dim])) {
+		    /* go down the other side */
+		    top++;
+		    s[top].n = n->child[!dir];
+		    while (s[top].n) {
+			n = s[top].n;
+			dir = !ordir;
+			if (n->dim != or->dim)
+			    dir = cmp(or, n, n->dim) > 0;
+			s[top].dir = dir;
+			s[top].v = 0;
+			top++;
+			s[top].n = n->child[dir];
+		    }
+		}
+	    }
+	}
+
+#ifdef KD_DEBUG
+	if (!rn)
+	    G_fatal_error("No replacement");
+	if (ordir && or->c[(int)or->dim] > rn->c[(int)or->dim])
+	    G_fatal_error("rn is smaller");
+
+	if (!ordir && or->c[(int)or->dim] < rn->c[(int)or->dim])
+	    G_fatal_error("rn is larger");
+
+	if (or->child[1]) {
+	    dir = cmp(or->child[1], rn, or->dim);
+	    if (dir < 0) {
+		int i;
+
+		for (i = 0; i < t->ndims; i++)
+		    G_message("rn c %g, or child c %g",
+			    rn->c[i], or->child[1]->c[i]);
+		G_fatal_error("Right child of old root is smaller than rn, dir is %d", ordir);
+	    }
+	}
+	if (or->child[0]) {
+	    dir = cmp(or->child[0], rn, or->dim);
+	    if (dir > 0) {
+		int i;
+
+		for (i = 0; i < t->ndims; i++)
+		    G_message("rn c %g, or child c %g",
+			    rn->c[i], or->child[0]->c[i]);
+		G_fatal_error("Left child of old root is larger than rn, dir is %d", ordir);
+	    }
+	}
+#endif
+
+	is_leaf = (rn->child[0] == NULL && rn->child[1] == NULL);
+
+#ifdef KD_DEBUG
+	if (is_leaf && rn->depth != 0)
+	    G_fatal_error("rn is leaf but depth is %d", (int)rn->depth);
+	if (!is_leaf && rn->depth <= 0)
+	    G_fatal_error("rn is not leaf but depth is %d", (int)rn->depth);
+#endif
+
+	nr++;
+
+	/* go to replacement from or->child[ordir] */
+	top = top2;
+	dir = 1;
+	while (dir) {
+	    n = s[top].n;
+	    dir = cmp(rn, n, n->dim);
+	    if (dir) {
+		s[top].dir = dir > 0;
+		top++;
+		s[top].n = n->child[dir > 0];
+
+		if (!s[top].n) {
+		    G_fatal_error("(Last) replacement disappeared %d", nr);
+		}
+	    }
+	}
+
+#ifdef KD_DEBUG
+	if (s[top].n != rn)
+	    G_fatal_error("rn is unreachable from or");
+#endif
+
+	top2 = top;
+	s[top2 + 1].n = NULL;
+
+	/* copy replacement to old root */
+	memcpy(or->c, rn->c, t->csize);
+	or->uid = rn->uid;
+	
+	if (!is_leaf) {
+	    /* make replacement the old root */
+	    or = rn;
+
+	    /* pick a subtree */
+	    ordir = 1;
+	    ld = (!or->child[0] ? -1 : or->child[0]->depth);
+	    rd = (!or->child[1] ? -1 : or->child[1]->depth);
+	    if (ld > rd) {
+		ordir = 0;
+	    }
+	    s[top2].dir = ordir;
+	    top2++;
+	}
+    }
+
+    if (!rn)
+	G_fatal_error("No replacement at all");
+
+    /* delete last replacement */
+    if (s[top2].n != rn) {
+	G_fatal_error("Wrong top2 for last replacement");
+    }
+    top = top2 - 1;
+    n = s[top].n;
+    dir = s[top].dir;
+    if (n->child[dir] != rn) {
+	G_fatal_error("Last replacement disappeared");
+    }
+    kdtree_free_node(rn);
+    n->child[dir] = NULL;
+    t->count--;
+
+    old_depth = n->depth;
+
+    ld = (!n->child[0] ? -1 : n->child[0]->depth);
+    rd = (!n->child[1] ? -1 : n->child[1]->depth);
+    n->depth = MAX(ld, rd) + 1;
+
+    if (bmode > 1)
+	while (kdtree_balance(t, n, bmode));
+
+    if (n->depth == old_depth)
+	top = 0;
+
+#ifdef KD_DEBUG
+    top = top2 - 1;
+#endif
+
+    /* go back up */
+    while (top) {
+	top--;
+	n = s[top].n;
+
+#ifdef KD_DEBUG
+	/* debug directions */
+	if (n->child[0]) {
+	    if (cmp(n->child[0], n, n->dim) > 0)
+		G_warning("Left child is larger");
+	}
+	if (n->child[1]) {
+	    if (cmp(n->child[1], n, n->dim) < 1)
+		G_warning("Right child is not larger");
+	}
+#endif
+
+	/* update depth */
+	ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	n->depth = MAX(ld, rd) + 1;
+    }
+
+    return nr;
+}
+
+static int kdtree_balance(struct kdtree *t, struct kdnode *r, int bmode)
+{
+    struct kdnode *or;
+    int dir;
+    int rd, ld;
+    int old_depth;
+    int btol;
+
+    if (!r) {
+	return 0;
+    }
+
+    ld = (!r->child[0] ? -1 : r->child[0]->depth);
+    rd = (!r->child[1] ? -1 : r->child[1]->depth);
+    old_depth = MAX(ld, rd) + 1;
+    
+    if (old_depth != r->depth) {
+	G_warning("balancing: depth is wrong: %d != %d", r->depth, old_depth);
+	r->depth = old_depth;
+    }
+
+    /* subtree difference */
+    btol = t->btol;
+    if (!r->child[0] || !r->child[1])
+	btol = 2;
+    dir = -1;
+    ld = (!r->child[0] ? -1 : r->child[0]->depth);
+    rd = (!r->child[1] ? -1 : r->child[1]->depth);
+    if (ld > rd + btol) {
+	dir = 0;
+    }
+    else if (rd > ld + btol) {
+	dir = 1;
+    }
+    else {
+	return 0;
+    }
+
+    or = kdtree_newnode(t);
+    memcpy(or->c, r->c, t->csize);
+    or->uid = r->uid;
+    or->dim = t->nextdim[r->dim];
+
+    if (!kdtree_replace(t, r, bmode))
+	G_fatal_error("kdtree_balance: nothing replaced");
+
+#ifdef KD_DEBUG
+    if (!cmp(r, or, r->dim)) {
+	G_warning("kdtree_balance: replacement failed");
+	kdtree_free_node(or);
+	
+	return 0;
+    }
+#endif
+
+    r->child[!dir] = kdtree_insert2(t, r->child[!dir], or, bmode, 1);
+
+    /* update node depth */
+    ld = (!r->child[0] ? -1 : r->child[0]->depth);
+    rd = (!r->child[1] ? -1 : r->child[1]->depth);
+    r->depth = MAX(ld, rd) + 1;
+
+    if (r->depth == old_depth) {
+	G_debug(4, "balancing had no effect");
+	return 1;
+    }
+
+    if (r->depth > old_depth)
+	G_fatal_error("balancing failed");
+
+    return 1;
+}
+
+static struct kdnode *kdtree_insert2(struct kdtree *t, struct kdnode *r,
+                                     struct kdnode *nnew,
+				     int balance, int dc)
+{
+    struct kdnode *n, *n2;
+    struct kdstack {
+	struct kdnode *n;
+	int dir;
+    } s[256];
+    int top;
+    int dir;
+    int ld, rd;
+    int old_depth;
+    int go_back;
+    int bmode;
+
+    if (!r) {
+	r = nnew;
+	t->count++;
+
+	return r;
+    }
+
+    /* level of recursion */
+    rcalls++;
+    if (rcallsmax < rcalls)
+	rcallsmax = rcalls;
+
+    /* most optimal tree: bmode = 2, only bottom-up balancing
+     * fastest tree building: bmode = 0 with a priori, top-down and 
+     * bottom-up balancing */
+    bmode = 0;
+
+    if (balance && bmode == 0) {
+	int diffl, diffr;
+
+	top = 0;
+	s[top].n = r;
+	while (s[top].n) {
+	    n = s[top].n;
+
+	    /* balance node */
+	    while (kdtree_balance(t, n, bmode)) {
+		while (kdtree_balance(t, n->child[0], bmode));
+		while (kdtree_balance(t, n->child[1], bmode));
+
+		ld = (!n->child[0] ? -1 : n->child[0]->depth);
+		rd = (!n->child[1] ? -1 : n->child[1]->depth);
+		n->depth = MAX(ld, rd) + 1;
+	    }
+
+	    diffl = diffr = -1;
+	    if (n->child[0]) {
+		n2 = n->child[0];
+		ld = (!n2->child[0] ? -1 : n2->child[0]->depth);
+		rd = (!n2->child[1] ? -1 : n2->child[1]->depth);
+		
+		diffl = ld - rd;
+		if (diffl < 0)
+		    diffl = -diffl;
+	    }
+	    if (n->child[1]) {
+		n2 = n->child[1];
+		ld = (!n2->child[0] ? -1 : n2->child[0]->depth);
+		rd = (!n2->child[1] ? -1 : n2->child[1]->depth);
+		
+		diffr = ld - rd;
+		if (diffr < 0)
+		    diffr = -diffr;
+	    }
+	    
+	    dir = (diffr > diffl);
+
+	    top++;
+	    s[top].n = n->child[dir];
+	}
+	
+	while (top) {
+	    top--;
+	    n = s[top].n;
+
+	    /* update node depth */
+	    ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	    rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	    n->depth = MAX(ld, rd) + 1;
+	}
+    }
+
+    /* find node with free child */
+    top = 0;
+    go_back = 0;
+    s[top].n = r;
+    while (s[top].n) {
+
+	n = s[top].n;
+
+	if (balance && bmode < 2) {
+	    old_depth = n->depth;
+
+	    /* balance node */
+	    while (kdtree_balance(t, n, bmode)) {
+		while (kdtree_balance(t, n->child[0], bmode));
+		while (kdtree_balance(t, n->child[1], bmode));
+
+		ld = (!n->child[0] ? -1 : n->child[0]->depth);
+		rd = (!n->child[1] ? -1 : n->child[1]->depth);
+		n->depth = MAX(ld, rd) + 1;
+	    }
+
+	    if (old_depth != n->depth)
+		go_back = top;
+	}
+
+	if (!cmpc(nnew, n, t) && (!dc || nnew->uid == n->uid)) {
+
+	    G_debug(1, "KD node exists already, nothing to do");
+	    kdtree_free_node(nnew);
+
+	    if (!balance) {
+		rcalls--;
+		return r;
+	    }
+
+	    break;
+	}
+	dir = cmp(nnew, n, n->dim) > 0;
+	s[top].dir = dir;
+
+	top++;
+	if (top > 255)
+	    G_fatal_error("depth too large: %d", top);
+	s[top].n = n->child[dir];
+    }
+
+    if (!s[top].n) {
+	/* insert to child pointer of parent */
+	top--;
+	n = s[top].n;
+	dir = s[top].dir;
+	n->child[dir] = nnew;
+	nnew->dim = t->nextdim[n->dim];
+
+	t->count++;
+
+	old_depth = n->depth;
+	n->depth = (!n->child[!dir] ? 1 : n->child[!dir]->depth + 1);
+
+	if (balance) {
+	    /* balance parent */
+	    while (kdtree_balance(t, n, bmode)) {
+		while (kdtree_balance(t, n->child[0], bmode));
+		while (kdtree_balance(t, n->child[1], bmode));
+
+		ld = (!n->child[0] ? -1 : n->child[0]->depth);
+		rd = (!n->child[1] ? -1 : n->child[1]->depth);
+		n->depth = MAX(ld, rd) + 1;
+	    }
+	}
+
+	if (old_depth != n->depth)
+	    go_back = top;
+    }
+
+    /* go back up */
+#ifdef KD_DEBUG
+    go_back = top;
+#endif
+    top = go_back;
+
+    while (top) {
+	top--;
+	n = s[top].n;
+
+	/* update node depth */
+	ld = (!n->child[0] ? -1 : n->child[0]->depth);
+	rd = (!n->child[1] ? -1 : n->child[1]->depth);
+	n->depth = MAX(ld, rd) + 1;
+
+	if (balance) {
+	    /* balance node */
+	    while (kdtree_balance(t, n, bmode)) {
+		while (kdtree_balance(t, n->child[0], bmode));
+		while (kdtree_balance(t, n->child[1], bmode));
+
+		ld = (!n->child[0] ? -1 : n->child[0]->depth);
+		rd = (!n->child[1] ? -1 : n->child[1]->depth);
+		n->depth = MAX(ld, rd) + 1;
+	    }
+	}
+
+#ifdef KD_DEBUG
+	/* debug directions */
+	if (n->child[0]) {
+	    if (cmp(n->child[0], n, n->dim) > 0)
+		G_warning("Insert2: Left child is larger");
+	}
+	if (n->child[1]) {
+	    if (cmp(n->child[1], n, n->dim) < 1)
+		G_warning("Insert2: Right child is not larger");
+	}
+#endif
+    }
+
+    rcalls--;
+
+    return r;
+}
+
+/* start traversing the tree
+ * returns pointer to first item
+ */
+static int kdtree_first(struct kdtrav *trav, double *c, int *uid)
+{
+    /* get smallest item */
+    while (trav->curr_node->child[0] != NULL) {
+	trav->up[trav->top++] = trav->curr_node;
+	trav->curr_node = trav->curr_node->child[0];
+    }
+
+    memcpy(c, trav->curr_node->c, trav->tree->csize);
+    *uid = trav->curr_node->uid;
+
+    return 1;
+}
+
+/* continue traversing the tree in ascending order
+ * returns pointer to data item, NULL when finished
+ */
+static int kdtree_next(struct kdtrav *trav, double *c, int *uid)
+{
+    if (trav->curr_node->child[1] != NULL) {
+	/* something on the right side: larger item */
+	trav->up[trav->top++] = trav->curr_node;
+	trav->curr_node = trav->curr_node->child[1];
+
+	/* go down, find smallest item in this branch */
+	while (trav->curr_node->child[0] != NULL) {
+	    trav->up[trav->top++] = trav->curr_node;
+	    trav->curr_node = trav->curr_node->child[0];
+	}
+    }
+    else {
+	/* at smallest item in this branch, go back up */
+	struct kdnode *last;
+
+	do {
+	    if (trav->top == 0) {
+		trav->curr_node = NULL;
+		break;
+	    }
+	    last = trav->curr_node;
+	    trav->curr_node = trav->up[--trav->top];
+	} while (last == trav->curr_node->child[1]);
+    }
+
+    if (trav->curr_node != NULL) {
+	memcpy(c, trav->curr_node->c, trav->tree->csize);
+	*uid = trav->curr_node->uid;
+
+	return 1;
+    }
+
+    return 0;		/* finished traversing */
+}
diff --git a/lib/btree2/kdtree.h b/lib/btree2/kdtree.h
new file mode 100644
index 0000000..c7596ec
--- /dev/null
+++ b/lib/btree2/kdtree.h
@@ -0,0 +1,181 @@
+/*!
+ * \file kdtree.h
+ *
+ * \brief Dynamic balanced k-d tree implementation
+ *
+ * k-d tree is a multidimensional (k-dimensional) binary search tree for
+ * nearest neighbor search and is part of \ref btree2.
+ *
+ * Copyright and license:
+ *
+ * (C) 2014 by the GRASS Development Team
+ *
+ * This program is free software under the GNU General Public License
+ * (>=v2).  Read the file COPYING that comes with GRASS for details.
+ *
+ * \author Markus Metz
+ *
+ * \par References
+ * Bentley, J. L. (1975). "Multidimensional binary search trees used for 
+ * associative searching". Communications of the ACM 18 (9): 509.
+ * doi:10.1145/361002.361007
+ *
+ * \par Features
+ * - This k-d tree is a dynamic tree:
+ *   elements can be inserted and removed any time.
+ * - This k-d tree is balanced:
+ *   subtrees have a similar depth (the difference in subtrees' depths is 
+ *   not allowed to be larger than the balancing tolerance).
+ *
+ * Here is a structure of basic usage:
+ *
+ * Create a new k-d tree:
+ *
+ *     kdtree_create(...);
+ *
+ * Insert points into the tree:
+ *
+ *     kdtree_insert(...);
+ *
+ * Optionally optimize the tree:
+ * 
+ *     kdtree_optimize(...);
+ *
+ * Search k nearest neighbors:
+ *
+ *     kdtree_knn(...);
+ *
+ * Search all neighbors in radius:
+ *
+ *     kdtree_dnn(...);
+ *
+ * Destroy the tree:
+ *
+ *     kdtree_destroy(...);
+ *
+ * \todo
+ * Doxygen ignores comment for last parameter after `);`.
+ * The parameter description now goes to the end of function description.
+ *
+ * \todo
+ * Include formatting to function descriptions.
+ */
+
+/*!
+ * \brief Node for k-d tree
+ */
+struct kdnode
+{
+    unsigned char dim;          /*!< split dimension of this node */
+    unsigned char depth;        /*!< depth at this node */
+    double *c;                  /*!< coordinates */
+    int uid;                    /*!< unique id of this node */
+    struct kdnode *child[2];    /*!< link to children: `[0]` for smaller, `[1]` for larger */
+};
+
+/*!
+ * \brief k-d tree
+ */
+struct kdtree
+{
+    unsigned char ndims;        /*!< number of dimensions */
+    unsigned char *nextdim;     /*!< split dimension of child nodes */
+    int csize;                  /*!< size of coordinates in bytes */
+    int btol;                   /*!< balancing tolerance */
+    size_t count;               /*!< number of items in the tree */
+    struct kdnode *root;        /*!< tree root */
+};
+
+/*!
+ * \brief k-d tree traversal
+ */
+struct kdtrav
+{
+    struct kdtree *tree;        /*!< tree being traversed */
+    struct kdnode *curr_node;   /*!< current node */
+    struct kdnode *up[256];     /*!< stack of parent nodes */
+    int top;                    /*!< index for stack */
+    int first;                  /*!< little helper flag */
+};
+
+/*! creae a new k-d tree */
+struct kdtree *kdtree_create(char ndims,        /*!< number of dimensions */
+                             int *btol  /*!< optional balancing tolerance */
+    );
+
+/*! destroy a tree */
+void kdtree_destroy(struct kdtree *t);
+
+/*! clear a tree, removing all entries */
+void kdtree_clear(struct kdtree *t);
+
+/*! insert an item (coordinates c and uid) into the k-d tree */
+int kdtree_insert(struct kdtree *t,     /*!< k-d tree */
+                  double *c,    /*!< coordinates */
+                  int uid,      /*!< the point's unique id */
+                  int dc        /*!< allow duplicate coordinates */
+    );
+
+/*! remove an item from the k-d tree
+ * coordinates c and uid must match */
+int kdtree_remove(struct kdtree *t,     /*!< k-d tree */
+                  double *c,    /*!< coordinates */
+                  int uid       /*!< the point's unique id */
+    );
+
+/*! find k nearest neighbors 
+ * results are stored in uid (uids) and d (squared distances)
+ * optionally an uid to be skipped can be given
+ * useful when searching for the nearest neighbors of an item 
+ * that is also in the tree */
+int kdtree_knn(struct kdtree *t,        /*!< k-d tree */
+               double *c,       /*!< coordinates */
+               int *uid,        /*!< unique ids of the neighbors */
+               double *d,       /*!< squared distances to the neighbors */
+               int k,           /*!< number of neighbors to find */
+               int *skip        /*!< unique id to skip */
+    );
+
+/*! find all nearest neighbors within distance aka radius search
+ * results are stored in puid (uids) and pd (squared distances)
+ * memory is allocated as needed, the calling fn must free the memory
+ * optionally an uid to be skipped can be given */
+int kdtree_dnn(struct kdtree *t,        /*!< k-d tree */
+               double *c,       /*!< coordinates */
+               int **puid,      /*!< unique ids of the neighbors */
+               double **pd,     /*!< squared distances to the neighbors */
+               double maxdist,  /*!< radius to search around the given coordinates */
+               int *skip        /*!< unique id to skip */
+    );
+
+/*! find all nearest neighbors within range aka box search
+ * the range is specified with min and max for each dimension as
+ * (min1, min2, ..., minn, max1, max2, ..., maxn)
+ * results are stored in puid (uids) and pd (squared distances)
+ * memory is allocated as needed, the calling fn must free the memory
+ * optionally an uid to be skipped can be given */
+int kdtree_rnn(struct kdtree *t,        /*!< k-d tree */
+               double *c,       /*!< coordinates for range */
+               int **puid,      /*!< unique ids of the neighbors */
+               int *skip        /*!< unique id to skip */
+    );
+
+/*! k-d tree optimization, only useful if the tree will be heavily used
+ * (more searches than items in the tree)
+ * level 0 = a bit, 1 = more, 2 = a lot */
+void kdtree_optimize(struct kdtree *t,  /*!< k-d tree */
+                     int level  /*!< optimization level */
+    );
+
+/*! initialize tree traversal
+ * (re-)sets trav structure
+ * returns 0
+ */
+int kdtree_init_trav(struct kdtrav *trav, struct kdtree *tree);
+
+/*! traverse the tree
+ * useful to get all items in the tree non-recursively
+ * struct kdtrav *trav needs to be initialized first
+ * returns 1, 0 when finished
+ */
+int kdtree_traverse(struct kdtrav *trav, double *c, int *uid);
diff --git a/lib/cairodriver/cairodriver.html b/lib/cairodriver/cairodriver.html
index 2817a62..4cb9dcd 100644
--- a/lib/cairodriver/cairodriver.html
+++ b/lib/cairodriver/cairodriver.html
@@ -191,4 +191,4 @@ Lars Ahlzen <<i>lars (at) ahlzen.com</i>><br>
 and the GRASS Development Team.
 
 <p>
-<i>Last changed: $Date: 2015-05-18 11:16:55 +0200 (Mon, 18 May 2015) $</i>
+<i>Last changed: $Date: 2015-05-18 11:16:49 +0200 (Mon, 18 May 2015) $</i>
diff --git a/lib/calc/Makefile b/lib/calc/Makefile
new file mode 100644
index 0000000..ef7e512
--- /dev/null
+++ b/lib/calc/Makefile
@@ -0,0 +1,8 @@
+MODULE_TOPDIR = ../..
+
+
+LIB = CALC
+
+include $(MODULE_TOPDIR)/include/Make/Lib.make
+
+default: lib
diff --git a/lib/calc/calc.c b/lib/calc/calc.c
new file mode 100644
index 0000000..8de4035
--- /dev/null
+++ b/lib/calc/calc.c
@@ -0,0 +1,62 @@
+
+#include <unistd.h>
+#include <signal.h>
+
+#include <grass/calc.h>
+
+/****************************************************************************/
+
+volatile int floating_point_exception;
+volatile int floating_point_exception_occurred;
+
+int columns;
+
+/****************************************************************************/
+
+static RETSIGTYPE handle_fpe(int n)
+{
+    floating_point_exception = 1;
+    floating_point_exception_occurred = 1;
+}
+
+void pre_exec(void)
+{
+#ifndef __MINGW32__
+#ifdef SIGFPE
+    struct sigaction act;
+
+    act.sa_handler = &handle_fpe;
+    act.sa_flags = 0;
+    sigemptyset(&act.sa_mask);
+
+    sigaction(SIGFPE, &act, NULL);
+#endif
+#endif
+
+    floating_point_exception_occurred = 0;
+}
+
+void post_exec(void)
+{
+#ifndef __MINGW32__
+#ifdef SIGFPE
+    struct sigaction act;
+
+    act.sa_handler = SIG_DFL;
+    act.sa_flags = 0;
+    sigemptyset(&act.sa_mask);
+
+    sigaction(SIGFPE, &act, NULL);
+#endif
+#endif
+}
+
+/****************************************************************************/
+
+void calc_init(int cols)
+{
+    columns = cols;
+}
+
+/****************************************************************************/
+
diff --git a/lib/calc/check.c b/lib/calc/check.c
new file mode 100644
index 0000000..ad2288b
--- /dev/null
+++ b/lib/calc/check.c
@@ -0,0 +1,159 @@
+
+#include <grass/calc.h>
+
+int c_int0(int argc, int *argt)
+{
+    if (argc > 0)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+
+    return 0;
+}
+
+int c_double0(int argc, int *argt)
+{
+    if (argc > 0)
+	return E_ARG_HI;
+
+    argt[0] = DCELL_TYPE;
+
+    return 0;
+}
+
+int c_double1(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    argt[0] = DCELL_TYPE;
+    argt[1] = DCELL_TYPE;
+
+    return 0;
+}
+
+int c_double12(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argc > 2)
+	return E_ARG_HI;
+
+    argt[0] = DCELL_TYPE;
+    argt[1] = DCELL_TYPE;
+    if (argc == 2)
+	argt[2] = DCELL_TYPE;
+
+    return 0;
+}
+
+int c_unop(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    argt[0] = argt[1];
+
+    return 0;
+}
+
+int c_binop(int argc, int *argt)
+{
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+    if (argt[1] == FCELL_TYPE || argt[2] == FCELL_TYPE)
+	argt[0] = FCELL_TYPE;
+    if (argt[1] == DCELL_TYPE || argt[2] == DCELL_TYPE)
+	argt[0] = DCELL_TYPE;
+
+    argt[1] = argt[0];
+    argt[2] = argt[0];
+
+    return 0;
+}
+
+int c_varop(int argc, int *argt)
+{
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    argt[0] = CELL_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] == FCELL_TYPE)
+	    argt[0] = FCELL_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] == DCELL_TYPE)
+	    argt[0] = DCELL_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	argt[i] = argt[0];
+
+    return 0;
+}
+
+int c_cmpop(int argc, int *argt)
+{
+    int arg_type;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+
+    arg_type = CELL_TYPE;
+    if (argt[1] == FCELL_TYPE || argt[2] == FCELL_TYPE)
+	arg_type = FCELL_TYPE;
+    if (argt[1] == DCELL_TYPE || argt[2] == DCELL_TYPE)
+	arg_type = DCELL_TYPE;
+
+    argt[1] = arg_type;
+    argt[2] = arg_type;
+
+    return 0;
+}
+
+int c_logop(int argc, int *argt)
+{
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != CELL_TYPE)
+	    return E_ARG_TYPE;
+
+    argt[0] = CELL_TYPE;
+
+    return 0;
+}
+
+int c_shiftop(int argc, int *argt)
+{
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    argt[0] = CELL_TYPE;
+
+    return 0;
+}
diff --git a/lib/calc/function.c b/lib/calc/function.c
new file mode 100644
index 0000000..0d6df02
--- /dev/null
+++ b/lib/calc/function.c
@@ -0,0 +1,79 @@
+
+#include <grass/calc.h>
+
+func_desc calc_func_descs[] = {
+    {"add", c_varop, f_add},
+    {"sub", c_binop, f_sub},
+    {"mul", c_varop, f_mul},
+    {"div", c_binop, f_div},
+    {"mod", c_binop, f_mod},
+    {"pow", c_binop, f_pow},
+
+    {"neg", c_unop, f_neg},
+    {"abs", c_unop, f_abs},
+
+    {"gt", c_cmpop, f_gt},
+    {"ge", c_cmpop, f_ge},
+    {"lt", c_cmpop, f_lt},
+    {"le", c_cmpop, f_le},
+    {"eq", c_cmpop, f_eq},
+    {"ne", c_cmpop, f_ne},
+
+    {"and", c_logop, f_and},
+    {"or", c_logop, f_or},
+
+    {"and2", c_logop, f_and2},
+    {"or2", c_logop, f_or2},
+
+    {"not", c_not, f_not},
+
+    {"bitand", c_logop, f_bitand},
+    {"bitor", c_logop, f_bitor},
+    {"xor", c_logop, f_bitxor},
+
+    {"shiftl", c_shiftop, f_shiftl},
+    {"shiftr", c_shiftop, f_shiftr},
+    {"shiftru", c_shiftop, f_shiftru},
+
+    {"bitnot", c_not, f_bitnot},
+
+    {"sqrt", c_double1, f_sqrt},
+    {"sin", c_double1, f_sin},
+    {"cos", c_double1, f_cos},
+    {"tan", c_double1, f_tan},
+    {"acos", c_double1, f_acos},
+    {"asin", c_double1, f_asin},
+
+    {"exp", c_double12, f_exp},
+    {"log", c_double12, f_log},
+    {"atan", c_double12, f_atan},
+
+    {"int", c_int, f_int},
+    {"float", c_float, f_float},
+    {"double", c_double, f_double},
+    {"round", c_round, f_round},
+
+    {"eval", c_eval, f_eval},
+    {"if", c_if, f_if},
+    {"isnull", c_isnull, f_isnull},
+
+    {"max", c_varop, f_max},
+    {"min", c_varop, f_min},
+    {"median", c_varop, f_median},
+    {"mode", c_varop, f_mode},
+
+    {"nmax", c_varop, f_nmax},
+    {"nmin", c_varop, f_nmin},
+    {"nmedian", c_varop, f_nmedian},
+    {"nmode", c_varop, f_nmode},
+
+    {"graph", c_graph, f_graph},
+    {"graph2", c_graph, f_graph2},
+
+    {"rand", c_binop, f_rand},
+
+    {"null", c_int0, f_null},
+
+    {NULL, NULL, NULL}
+};
+
diff --git a/lib/calc/xabs.c b/lib/calc/xabs.c
new file mode 100644
index 0000000..c0bd90f
--- /dev/null
+++ b/lib/calc/xabs.c
@@ -0,0 +1,67 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+abs(x)
+
+   absolute value. if x is negative returns -x
+**********************************************************************/
+
+int f_abs(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != argt[1])
+	return E_RES_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_C(&arg1[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] < 0 ? -arg1[i]
+			: arg1[i];
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_F(&arg1[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = (FCELL) fabs(arg1[i]);
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_D(&arg1[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = fabs(arg1[i]);
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xacos.c b/lib/calc/xacos.c
new file mode 100644
index 0000000..1d9908d
--- /dev/null
+++ b/lib/calc/xacos.c
@@ -0,0 +1,48 @@
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+acos(x)  [0 and PI]
+
+  if floating point exception occurs during the evaluation of acos(x)
+  the result is NULL
+
+  note: result is in degrees
+**********************************************************************/
+
+#define RADIANS_TO_DEGREES (180.0 / M_PI)
+
+int f_acos(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = RADIANS_TO_DEGREES * acos(arg1[i]);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xadd.c b/lib/calc/xadd.c
new file mode 100644
index 0000000..551884e
--- /dev/null
+++ b/lib/calc/xadd.c
@@ -0,0 +1,76 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+add(a,b,c,...) = a + b + c + ...
+****************************************************************/
+
+int f_add(int argc, const int *argt, void **args)
+{
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argz = (CELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		res[i] = 0;
+		for (j = 1; j <= argc; j++) {
+		    if (IS_NULL_C(&argz[j][i])) {
+			SET_NULL_C(&res[i]);
+			break;
+		    }
+		    res[i] += argz[j][i];
+		}
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argz = (FCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		res[i] = 0;
+		for (j = 1; j <= argc; j++) {
+		    if (IS_NULL_F(&argz[j][i])) {
+			SET_NULL_F(&res[i]);
+			break;
+		    }
+		    res[i] += argz[j][i];
+		}
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argz = (DCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		res[i] = 0;
+		for (j = 1; j <= argc; j++) {
+		    if (IS_NULL_D(&argz[j][i])) {
+			SET_NULL_D(&res[i]);
+			break;
+		    }
+		    res[i] += argz[j][i];
+		}
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xand.c b/lib/calc/xand.c
new file mode 100644
index 0000000..c7cb53d
--- /dev/null
+++ b/lib/calc/xand.c
@@ -0,0 +1,39 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+and(a,b,c,...) = a && b && c && ...
+****************************************************************/
+
+int f_and(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL **argz = (CELL **) args;
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != CELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = 1;
+	for (j = 1; j <= argc; j++) {
+	    if (IS_NULL_C(&argz[j][i])) {
+		SET_NULL_C(&res[i]);
+		break;
+	    }
+	    if (!argz[j][i])
+		res[i] = 0;
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xand2.c b/lib/calc/xand2.c
new file mode 100644
index 0000000..761a533
--- /dev/null
+++ b/lib/calc/xand2.c
@@ -0,0 +1,46 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+and2(a,b,c,...) = a && b && c && ...
+
+Differs from and() in that the boolean axioms:
+
+	false && x == false
+	x && false == false
+
+hold even when x is null.
+****************************************************************/
+
+int f_and2(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL **argz = (CELL **) args;
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != CELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = 1;
+	for (j = 1; j <= argc; j++) {
+	    if (!IS_NULL_C(&argz[j][i]) && !argz[j][i]) {
+		res[i] = 0;
+		break;
+	    }
+	    if (IS_NULL_C(&argz[j][i]))
+		SET_NULL_C(&res[i]);
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xasin.c b/lib/calc/xasin.c
new file mode 100644
index 0000000..c226f33
--- /dev/null
+++ b/lib/calc/xasin.c
@@ -0,0 +1,48 @@
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+asin(x)  range [-90,90]
+
+  if floating point exception occurs during the evaluation of asin(x)
+  the result is NULL
+
+  note: result is in degrees
+**********************************************************************/
+
+#define RADIANS_TO_DEGREES (180.0 / M_PI)
+
+int f_asin(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = RADIANS_TO_DEGREES * asin(arg1[i]);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xatan.c b/lib/calc/xatan.c
new file mode 100644
index 0000000..e801fb0
--- /dev/null
+++ b/lib/calc/xatan.c
@@ -0,0 +1,64 @@
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+atan(x)     range [-90,90]
+atan(x,y) = atan(y/x) range[0,360]
+
+  if floating point exception occurs during the evaluation of atan(x)
+  the result is NULL
+
+  note: result is in degrees
+**********************************************************************/
+
+#define RADIANS_TO_DEGREES (180.0 / M_PI)
+
+int f_atan(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    DCELL *arg2;
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argc > 1 && argt[2] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    arg2 = (argc > 1) ? args[2] : NULL;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else if (argc > 1 && IS_NULL_D(&arg2[i]))
+	    SET_NULL_D(&res[i]);
+
+	else {
+	    floating_point_exception = 0;
+	    if (argc == 1)
+		res[i] = RADIANS_TO_DEGREES * atan(arg1[i]);
+	    else {
+		res[i] = RADIANS_TO_DEGREES * atan2(arg2[i], arg1[i]);
+		if (res[i] < 0)
+		    res[i] += 360.0;
+	    }
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xbitand.c b/lib/calc/xbitand.c
new file mode 100644
index 0000000..2880eea
--- /dev/null
+++ b/lib/calc/xbitand.c
@@ -0,0 +1,38 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+bitand(a,b,c,...) = a & b & c & ...
+****************************************************************/
+
+int f_bitand(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL **argz = (CELL **) args;
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != CELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = ~0;
+	for (j = 1; j <= argc; j++) {
+	    if (IS_NULL_C(&argz[j][i])) {
+		SET_NULL_C(&res[i]);
+		break;
+	    }
+	    res[i] &= argz[j][i];
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xbitnot.c b/lib/calc/xbitnot.c
new file mode 100644
index 0000000..0639ea1
--- /dev/null
+++ b/lib/calc/xbitnot.c
@@ -0,0 +1,35 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+bitnot(a) = ~a
+****************************************************************/
+
+int f_bitnot(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	if (IS_NULL_C(&arg1[i]))
+	    SET_NULL_C(&res[i]);
+	else
+	    res[i] = ~arg1[i];
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xbitor.c b/lib/calc/xbitor.c
new file mode 100644
index 0000000..e65e516
--- /dev/null
+++ b/lib/calc/xbitor.c
@@ -0,0 +1,38 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+bitor(a,b,c,...) = a | b | c | ...
+****************************************************************/
+
+int f_bitor(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL **argz = (CELL **) args;
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != CELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = 0;
+	for (j = 1; j <= argc; j++) {
+	    if (IS_NULL_C(&argz[j][i])) {
+		SET_NULL_C(&res[i]);
+		break;
+	    }
+	    res[i] |= argz[j][i];
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xbitxor.c b/lib/calc/xbitxor.c
new file mode 100644
index 0000000..0b19b61
--- /dev/null
+++ b/lib/calc/xbitxor.c
@@ -0,0 +1,38 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+bitxor(a,b,c,...) = a ^ b ^ c ^ ...
+****************************************************************/
+
+int f_bitxor(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL **argz = (CELL **) args;
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != CELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = 0;
+	for (j = 1; j <= argc; j++) {
+	    if (IS_NULL_C(&argz[j][i])) {
+		SET_NULL_C(&res[i]);
+		break;
+	    }
+	    res[i] ^= argz[j][i];
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xcos.c b/lib/calc/xcos.c
new file mode 100644
index 0000000..8878a24
--- /dev/null
+++ b/lib/calc/xcos.c
@@ -0,0 +1,47 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+cos(x) 
+
+  if floating point exception occurs during the evaluation of cos(x)
+  the result is NULL
+
+  note: x is in degrees.
+**********************************************************************/
+
+#define DEGREES_TO_RADIANS (M_PI / 180.0)
+
+int f_cos(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = cos(arg1[i] * DEGREES_TO_RADIANS);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xdiv.c b/lib/calc/xdiv.c
new file mode 100644
index 0000000..ab44816
--- /dev/null
+++ b/lib/calc/xdiv.c
@@ -0,0 +1,79 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+div(a,b) = a / b
+****************************************************************/
+
+int f_div(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != argt[0] || argt[2] != argt[0])
+	return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]) ||
+		    arg2[i] == 0)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] / arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]) ||
+		    arg2[i] == 0.0f)
+		    SET_NULL_F(&res[i]);
+		else {
+		    floating_point_exception = 0;
+		    res[i] = arg1[i] / arg2[i];
+		    if (floating_point_exception)
+			SET_NULL_F(&res[i]);
+		}
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]) ||
+		    arg2[i] == 0.0)
+		    SET_NULL_D(&res[i]);
+		else {
+		    floating_point_exception = 0;
+		    res[i] = arg1[i] / arg2[i];
+		    if (floating_point_exception)
+			SET_NULL_D(&res[i]);
+		}
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xdouble.c b/lib/calc/xdouble.c
new file mode 100644
index 0000000..ff41ff5
--- /dev/null
+++ b/lib/calc/xdouble.c
@@ -0,0 +1,76 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+double(x)
+  converts x to double
+**********************************************************************/
+
+int f_double(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_C(&arg1[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = (DCELL) arg1[i];
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_F(&arg1[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = (DCELL) arg1[i];
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_D(&arg1[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = (DCELL) arg1[i];
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
+
+int c_double(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    argt[0] = DCELL_TYPE;
+    /*      argt[1] = argt[1];      */
+
+    return 0;
+}
diff --git a/lib/calc/xeq.c b/lib/calc/xeq.c
new file mode 100644
index 0000000..96887fe
--- /dev/null
+++ b/lib/calc/xeq.c
@@ -0,0 +1,70 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+eq(a,b) = a == b
+****************************************************************/
+
+int f_eq(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 2; i <= argc; i++)
+	if (argt[i] != argt[1])
+	    return E_ARG_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] == arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] == arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] == arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xeval.c b/lib/calc/xeval.c
new file mode 100644
index 0000000..518887a
--- /dev/null
+++ b/lib/calc/xeval.c
@@ -0,0 +1,73 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+eval(..,..,..,x) = x
+
+   return last argument
+**********************************************************************/
+
+int f_eval(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != argt[argc])
+	return E_RES_TYPE;
+
+    switch (argt[argc]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[argc];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_C(&arg1[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i];
+
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[argc];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_F(&arg1[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg1[i];
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[argc];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_D(&arg1[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg1[i];
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
+
+int c_eval(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+
+    argt[0] = argt[argc];
+
+    return 0;
+}
diff --git a/lib/calc/xexp.c b/lib/calc/xexp.c
new file mode 100644
index 0000000..0901c46
--- /dev/null
+++ b/lib/calc/xexp.c
@@ -0,0 +1,53 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+exp(x)   computes e raised to power x
+exp(x,y) computes x raised to power y
+
+  if floating point exception occurs during the evaluation of exp(x)
+  or exp(x,y) the result is NULL
+**********************************************************************/
+
+int f_exp(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    DCELL *arg2;
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    arg2 = (argc > 1) ? args[2] : NULL;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else if (argc > 1 && IS_NULL_D(&arg2[i]))
+	    SET_NULL_D(&res[i]);
+	else if (argc > 1 && arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = (argc > 1)
+		? pow(arg1[i], arg2[i])
+		: exp(arg1[i]);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xfloat.c b/lib/calc/xfloat.c
new file mode 100644
index 0000000..3895adb
--- /dev/null
+++ b/lib/calc/xfloat.c
@@ -0,0 +1,76 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+float(x)
+  converts x to float
+**********************************************************************/
+
+int f_float(int argc, const int *argt, void **args)
+{
+    FCELL *res = args[0];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != FCELL_TYPE)
+	return E_RES_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_C(&arg1[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = (FCELL) arg1[i];
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_F(&arg1[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = (FCELL) arg1[i];
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_D(&arg1[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = (FCELL) arg1[i];
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
+
+int c_float(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    argt[0] = FCELL_TYPE;
+    /*      argt[1] = argt[1];      */
+
+    return 0;
+}
diff --git a/lib/calc/xge.c b/lib/calc/xge.c
new file mode 100644
index 0000000..3cb07aa
--- /dev/null
+++ b/lib/calc/xge.c
@@ -0,0 +1,63 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+ge(a,b) = a >= b
+****************************************************************/
+
+int f_ge(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] >= arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] >= arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] >= arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xgraph.c b/lib/calc/xgraph.c
new file mode 100644
index 0000000..8d9520b
--- /dev/null
+++ b/lib/calc/xgraph.c
@@ -0,0 +1,178 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+graph(x, x1,y1, x2,y2, ... xn,yn)  returns y value based on graph
+described by the x,y pairs.
+****************************************************************/
+
+int c_graph(int argc, int *argt)
+{
+    int i;
+
+    if (argc < 3)
+	return E_ARG_LO;
+
+    if (argc % 2 == 0)
+	return E_ARG_NUM;
+
+    for (i = 0; i <= argc; i++)
+	argt[i] = DCELL_TYPE;
+
+    return 0;
+}
+
+int f_graph(int argc, const int *argt, void **args)
+{
+    DCELL **argz = (DCELL **) args;
+    DCELL *res = argz[0];
+    int n = (argc - 1) / 2;
+    int i, j;
+
+    if (argc < 3)
+	return E_ARG_LO;
+
+    if (argc % 2 == 0)
+	return E_ARG_NUM;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != DCELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+#define X(j) (argz[2 + 2 * (j) + 0][i])
+#define Y(j) (argz[2 + 2 * (j) + 1][i])
+#define x (argz[1][i])
+
+	if (IS_NULL_D(&x))
+	    goto null;
+
+	for (j = 0; j < n; j++)
+	    if (IS_NULL_D(&X(j)))
+		goto null;
+
+	for (j = 0; j < n - 1; j++)
+	    if (X(j + 1) <= X(j))
+		goto null;
+
+	if (x <= X(0)) {
+	    if (IS_NULL_D(&Y(0)))
+		goto null;
+	    res[i] = Y(0);
+	    continue;
+	}
+
+	if (x >= X(n - 1)) {
+	    if (IS_NULL_D(&Y(n - 1)))
+		goto null;
+	    res[i] = Y(n - 1);
+	    continue;
+	}
+
+	for (j = 0; j < n - 1; j++) {
+	    if (x > X(j + 1))
+		continue;
+
+	    if (IS_NULL_D(&Y(j)) || IS_NULL_D(&Y(j + 1)))
+		goto null;
+
+	    res[i] =
+		Y(j) + (x - X(j)) * (Y(j + 1) - Y(j)) / (X(j + 1) - X(j));
+
+	    break;
+	}
+#undef X
+#undef Y
+#undef x
+
+	continue;
+
+      null:
+	SET_NULL_D(&res[i]);
+    }
+
+    return 0;
+}
+
+int f_graph2(int argc, const int *argt, void **args)
+{
+    DCELL **argz = (DCELL **) args;
+    DCELL *res = argz[0];
+    int n = (argc - 1) / 2;
+    int i, j;
+
+    if (argc < 3)
+	return E_ARG_LO;
+
+    if (argc % 2 == 0)
+	return E_ARG_NUM;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != DCELL_TYPE)
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+#define X(j) (argz[2 + (j) + 0][i])
+#define Y(j) (argz[2 + (j) + n][i])
+#define x (argz[1][i])
+
+	if (IS_NULL_D(&x))
+	    goto null;
+
+	for (j = 0; j < n; j++)
+	    if (IS_NULL_D(&X(j)))
+		goto null;
+
+	for (j = 0; j < n - 1; j++)
+	    if (X(j + 1) <= X(j))
+		goto null;
+
+	if (x <= X(0)) {
+	    if (IS_NULL_D(&Y(0)))
+		goto null;
+	    res[i] = Y(0);
+	    continue;
+	}
+
+	if (x >= X(n - 1)) {
+	    if (IS_NULL_D(&Y(n - 1)))
+		goto null;
+	    res[i] = Y(n - 1);
+	    continue;
+	}
+
+	for (j = 0; j < n - 1; j++) {
+	    if (x > X(j + 1))
+		continue;
+
+	    if (IS_NULL_D(&Y(j)) || IS_NULL_D(&Y(j + 1)))
+		goto null;
+
+	    res[i] =
+		Y(j) + (x - X(j)) * (Y(j + 1) - Y(j)) / (X(j + 1) - X(j));
+
+	    break;
+	}
+#undef X
+#undef Y
+#undef x
+
+	continue;
+
+      null:
+	SET_NULL_D(&res[i]);
+    }
+
+    return 0;
+}
+
diff --git a/lib/calc/xgt.c b/lib/calc/xgt.c
new file mode 100644
index 0000000..59b2c1a
--- /dev/null
+++ b/lib/calc/xgt.c
@@ -0,0 +1,63 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+gt(a,b) = a > b
+****************************************************************/
+
+int f_gt(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] > arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] > arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] > arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xif.c b/lib/calc/xif.c
new file mode 100644
index 0000000..4db1182
--- /dev/null
+++ b/lib/calc/xif.c
@@ -0,0 +1,303 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/********************************************************************
+ if(a)        1,0,1  1 if a is non zero, 0 otherwise
+ if(a,b)      b,0,b  b if a is non zero, 0 otherwise
+ if(a,b,c)    b,c,b  b if a is non zero, c otherwise
+ if(a,b,c,d)  d,c,b  b if a is positive, c if a is zero, d if a is negative
+********************************************************************/
+
+static int f_if_i(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    DCELL *arg1 = args[1];
+    CELL *arg2 = (argc >= 2) ? args[2] : NULL;
+    CELL *arg3 = (argc >= 3) ? args[3] : NULL;
+    CELL *arg4 = (argc >= 4) ? args[4] : NULL;
+    int i;
+
+    switch (argc) {
+    case 0:
+	return E_ARG_LO;
+    case 1:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_C(&res[i]);
+	    else
+		res[i] = arg1[i] != 0.0 ? 1 : 0;
+	break;
+    case 2:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_C(&res[i]);
+	    else if (arg1[i] == 0.0)
+		res[i] = 0;
+	    else {
+		if (IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	break;
+    case 3:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_C(&res[i]);
+	    else if (arg1[i] == 0.0) {
+		if (IS_NULL_C(&arg3[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg3[i];
+	    }
+	    else {
+		if (IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	break;
+    case 4:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_C(&res[i]);
+	    else if (arg1[i] == 0.0) {
+		if (IS_NULL_C(&arg3[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg3[i];
+	    }
+	    else if (arg1[i] > 0.0) {
+		if (IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	    else {		/* (arg1[i] < 0.0) */
+
+		if (IS_NULL_C(&arg4[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg4[i];
+	    }
+	break;
+    default:
+	return E_ARG_HI;
+    }
+
+    return 0;
+}
+
+static int f_if_f(int argc, const int *argt, void **args)
+{
+    FCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    FCELL *arg2 = (argc >= 2) ? args[2] : NULL;
+    FCELL *arg3 = (argc >= 3) ? args[3] : NULL;
+    FCELL *arg4 = (argc >= 4) ? args[4] : NULL;
+    int i;
+
+    switch (argc) {
+    case 0:
+	return E_ARG_LO;
+    case 1:
+	return E_ARG_TYPE;
+    case 2:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_F(&res[i]);
+	    else if (arg1[i] == 0.0)
+		res[i] = 0.0;
+	    else {
+		if (IS_NULL_F(&arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	break;
+    case 3:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_F(&res[i]);
+	    else if (arg1[i] == 0.0) {
+		if (IS_NULL_F(&arg3[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg3[i];
+	    }
+	    else {
+		if (IS_NULL_F(&arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	break;
+    case 4:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_F(&res[i]);
+	    else if (arg1[i] == 0.0) {
+		if (IS_NULL_F(&arg3[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg3[i];
+	    }
+	    else if (arg1[i] > 0.0) {
+		if (IS_NULL_F(&arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	    else {		/* (arg1[i] < 0.0) */
+
+		if (IS_NULL_F(&arg4[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg4[i];
+	    }
+	break;
+    default:
+	return E_ARG_HI;
+    }
+
+    return 0;
+}
+
+static int f_if_d(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    DCELL *arg2 = (argc >= 2) ? args[2] : NULL;
+    DCELL *arg3 = (argc >= 3) ? args[3] : NULL;
+    DCELL *arg4 = (argc >= 4) ? args[4] : NULL;
+    int i;
+
+    switch (argc) {
+    case 0:
+	return E_ARG_LO;
+    case 1:
+	return E_ARG_TYPE;
+    case 2:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_D(&res[i]);
+	    else if (arg1[i] == 0.0)
+		res[i] = 0.0;
+	    else {
+		if (IS_NULL_D(&arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	break;
+    case 3:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_D(&res[i]);
+	    else if (arg1[i] == 0.0) {
+		if (IS_NULL_D(&arg3[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg3[i];
+	    }
+	    else {
+		if (IS_NULL_D(&arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	break;
+    case 4:
+	for (i = 0; i < columns; i++)
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_D(&res[i]);
+	    else if (arg1[i] == 0.0) {
+		if (IS_NULL_D(&arg3[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg3[i];
+	    }
+	    else if (arg1[i] > 0.0) {
+		if (IS_NULL_D(&arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg2[i];
+	    }
+	    else {		/* (arg1[i] < 0.0) */
+
+		if (IS_NULL_D(&arg4[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg4[i];
+	    }
+	break;
+    default:
+	return E_ARG_HI;
+    }
+
+    return 0;
+}
+
+int f_if(int argc, const int *argt, void **args)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 4)
+	return E_ARG_HI;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+    if (argc >= 2 && argt[2] != argt[0])
+	return E_ARG_TYPE;
+    if (argc >= 3 && argt[3] != argt[0])
+	return E_ARG_TYPE;
+    if (argc >= 4 && argt[4] != argt[0])
+	return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	return f_if_i(argc, argt, args);
+    case FCELL_TYPE:
+	return f_if_f(argc, argt, args);
+    case DCELL_TYPE:
+	return f_if_d(argc, argt, args);
+    default:
+	return E_INV_TYPE;
+    }
+}
+
+int c_if(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 4)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+
+    if (argc >= 2 && argt[2] == FCELL_TYPE)
+	argt[0] = FCELL_TYPE;
+    if (argc >= 3 && argt[3] == FCELL_TYPE)
+	argt[0] = FCELL_TYPE;
+    if (argc >= 4 && argt[4] == FCELL_TYPE)
+	argt[0] = FCELL_TYPE;
+
+    if (argc >= 2 && argt[2] == DCELL_TYPE)
+	argt[0] = DCELL_TYPE;
+    if (argc >= 3 && argt[3] == DCELL_TYPE)
+	argt[0] = DCELL_TYPE;
+    if (argc >= 4 && argt[4] == DCELL_TYPE)
+	argt[0] = DCELL_TYPE;
+
+    argt[1] = DCELL_TYPE;
+    if (argc >= 2)
+	argt[2] = argt[0];
+    if (argc >= 3)
+	argt[3] = argt[0];
+    if (argc >= 4)
+	argt[4] = argt[0];
+
+    return 0;
+}
diff --git a/lib/calc/xint.c b/lib/calc/xint.c
new file mode 100644
index 0000000..169b51e
--- /dev/null
+++ b/lib/calc/xint.c
@@ -0,0 +1,76 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+int(x)
+  converts x to int
+**********************************************************************/
+
+int f_int(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_C(&arg1[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = (CELL) arg1[i];
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_F(&arg1[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = (CELL) arg1[i];
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_D(&arg1[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = (CELL) arg1[i];
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
+
+int c_int(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+    /*      argt[1] = argt[1];      */
+
+    return 0;
+}
diff --git a/lib/calc/xisnull.c b/lib/calc/xisnull.c
new file mode 100644
index 0000000..28d4759
--- /dev/null
+++ b/lib/calc/xisnull.c
@@ -0,0 +1,64 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+isnull(x)
+  return 1 if x is null, 0 otherwise
+**********************************************************************/
+
+int f_isnull(int argc, const int *argt, void **args)
+{
+    int *res = args[0];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		res[i] = IS_NULL_C(&arg1[i]) ? 1 : 0;
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		res[i] = IS_NULL_F(&arg1[i]) ? 1 : 0;
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		res[i] = IS_NULL_D(&arg1[i]) ? 1 : 0;
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
+
+int c_isnull(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+
+    return 0;
+}
diff --git a/lib/calc/xle.c b/lib/calc/xle.c
new file mode 100644
index 0000000..51674e4
--- /dev/null
+++ b/lib/calc/xle.c
@@ -0,0 +1,63 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+le(a,b) = a <= b
+****************************************************************/
+
+int f_le(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] <= arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] <= arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] <= arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xlog.c b/lib/calc/xlog.c
new file mode 100644
index 0000000..7c7f2d2
--- /dev/null
+++ b/lib/calc/xlog.c
@@ -0,0 +1,59 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+log(x) 
+log(x,b)
+
+  first form computes the natural log of x = ln(x)
+  second form computes log of x base b = ln(x)/ln(b)
+
+  if x is non-positive, or floating point exception occurs while
+  computing ln(x), the result is NULL
+
+  if b is non-positive, or 1.0, or floating point exception occurs while
+  computing ln(b), the result is NULL
+**********************************************************************/
+
+int f_log(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    DCELL *arg2 = (argc >= 2) ? args[2] : (DCELL *) 0;
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argc > 1 && argt[2] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]) || (arg1[i] <= 0.0))
+	    SET_NULL_D(&res[i]);
+	else if (argc > 1 && (IS_NULL_D(&arg2[i]) || (arg2[i] <= 0.0)))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = (argc > 1)
+		? log(arg1[i]) / log(arg2[i])
+		: log(arg1[i]);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xlt.c b/lib/calc/xlt.c
new file mode 100644
index 0000000..f388a2b
--- /dev/null
+++ b/lib/calc/xlt.c
@@ -0,0 +1,63 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+lt(a,b) = a < b
+****************************************************************/
+
+int f_lt(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] < arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] < arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] < arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xmax.c b/lib/calc/xmax.c
new file mode 100644
index 0000000..646480e
--- /dev/null
+++ b/lib/calc/xmax.c
@@ -0,0 +1,98 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+max(x0,x1,...,xn) returns maximum value
+****************************************************************/
+
+int f_max(int argc, const int *argt, void **args)
+{
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argz = (CELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 0;
+		CELL max;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_C(&argz[j][i]))
+			nul = 1;
+		    else if (j == 1)
+			max = argz[j][i];
+		    else if (max < argz[j][i])
+			max = argz[j][i];
+		if (nul)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = max;
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argz = (FCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 0;
+		FCELL max;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_F(&argz[j][i]))
+			nul = 1;
+		    else if (j == 1)
+			max = argz[j][i];
+		    else if (max < argz[j][i])
+			max = argz[j][i];
+		if (nul)
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = max;
+	    }
+
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argz = (DCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 0;
+		DCELL max;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_D(&argz[j][i]))
+			nul = 1;
+		    else if (j == 1)
+			max = argz[j][i];
+		    else if (max < argz[j][i])
+			max = argz[j][i];
+		if (nul)
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = max;
+	    }
+
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xmedian.c b/lib/calc/xmedian.c
new file mode 100644
index 0000000..d1ebc53
--- /dev/null
+++ b/lib/calc/xmedian.c
@@ -0,0 +1,153 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+median(x1,x2,..,xn)
+   return median of arguments
+**********************************************************************/
+
+static int icmp(const void *aa, const void *bb)
+{
+    const CELL *a = aa;
+    const CELL *b = bb;
+
+    return *a - *b;
+}
+
+static int fcmp(const void *aa, const void *bb)
+{
+    const FCELL *a = aa;
+    const FCELL *b = bb;
+
+    if (*a < *b)
+	return -1;
+    if (*a > *b)
+	return 1;
+    return 0;
+}
+
+static int dcmp(const void *aa, const void *bb)
+{
+    const DCELL *a = aa;
+    const DCELL *b = bb;
+
+    if (*a < *b)
+	return -1;
+    if (*a > *b)
+	return 1;
+    return 0;
+}
+
+int f_median(int argc, const int *argt, void **args)
+{
+    static void *array;
+    static int alloc;
+    int size = argc * Rast_cell_size(argt[0]);
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    if (size > alloc) {
+	alloc = size;
+	array = G_realloc(array, size);
+    }
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argv = (CELL **) &args[1];
+	    CELL *a = array;
+	    CELL *a1 = &a[(argc - 1) / 2];
+	    CELL *a2 = &a[argc / 2];
+
+	    for (i = 0; i < columns; i++) {
+		int nv = 0;
+
+		for (j = 0; j < argc && !nv; j++) {
+		    if (IS_NULL_C(&argv[j][i]))
+			nv = 1;
+		    else
+			a[j] = argv[j][i];
+		}
+
+		if (nv)
+		    SET_NULL_C(&res[i]);
+		else {
+		    qsort(a, argc, sizeof(CELL), icmp);
+		    res[i] = (*a1 + *a2) / 2;
+		}
+	    }
+
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argv = (FCELL **) &args[1];
+	    FCELL *a = array;
+	    FCELL *a1 = &a[(argc - 1) / 2];
+	    FCELL *a2 = &a[argc / 2];
+
+	    for (i = 0; i < columns; i++) {
+		int nv = 0;
+
+		for (j = 0; j < argc && !nv; j++) {
+		    if (IS_NULL_F(&argv[j][i]))
+			nv = 1;
+		    else
+			a[j] = argv[j][i];
+		}
+
+		if (nv)
+		    SET_NULL_F(&res[i]);
+		else {
+		    qsort(a, argc, sizeof(FCELL), fcmp);
+		    res[i] = (*a1 + *a2) / 2;
+		}
+	    }
+
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argv = (DCELL **) &args[1];
+	    DCELL *a = array;
+	    DCELL *a1 = &a[(argc - 1) / 2];
+	    DCELL *a2 = &a[argc / 2];
+
+	    for (i = 0; i < columns; i++) {
+		int nv = 0;
+
+		for (j = 0; j < argc && !nv; j++) {
+		    if (IS_NULL_D(&argv[j][i]))
+			nv = 1;
+		    else
+			a[j] = argv[j][i];
+		}
+
+		if (nv)
+		    SET_NULL_D(&res[i]);
+		else {
+		    qsort(a, argc, sizeof(DCELL), dcmp);
+		    res[i] = (*a1 + *a2) / 2;
+		}
+	    }
+
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xmin.c b/lib/calc/xmin.c
new file mode 100644
index 0000000..1ca6b72
--- /dev/null
+++ b/lib/calc/xmin.c
@@ -0,0 +1,98 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+min(x0,x1,...,xn) returns minimum value
+****************************************************************/
+
+int f_min(int argc, const int *argt, void **args)
+{
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argz = (CELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 0;
+		CELL min;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_C(&argz[j][i]))
+			nul = 1;
+		    else if (j == 1)
+			min = argz[j][i];
+		    else if (min > argz[j][i])
+			min = argz[j][i];
+		if (nul)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = min;
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argz = (FCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 0;
+		FCELL min;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_F(&argz[j][i]))
+			nul = 1;
+		    else if (j == 1)
+			min = argz[j][i];
+		    else if (min > argz[j][i])
+			min = argz[j][i];
+		if (nul)
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = min;
+	    }
+
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argz = (DCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 0;
+		DCELL min;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_D(&argz[j][i]))
+			nul = 1;
+		    else if (j == 1)
+			min = argz[j][i];
+		    else if (min > argz[j][i])
+			min = argz[j][i];
+		if (nul)
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = min;
+	    }
+
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xmod.c b/lib/calc/xmod.c
new file mode 100644
index 0000000..75e9c72
--- /dev/null
+++ b/lib/calc/xmod.c
@@ -0,0 +1,78 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+mod(a,b) = a % b
+****************************************************************/
+
+int f_mod(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != argt[0] || argt[2] != argt[0])
+	return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] % arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else {
+		    floating_point_exception = 0;
+		    res[i] = (FCELL) fmod(arg1[i], arg2[i]);
+		    if (floating_point_exception)
+			SET_NULL_F(&res[i]);
+		}
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else {
+		    floating_point_exception = 0;
+		    res[i] = (DCELL) fmod(arg1[i], arg2[i]);
+		    if (floating_point_exception)
+			SET_NULL_D(&res[i]);
+		}
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xmode.c b/lib/calc/xmode.c
new file mode 100644
index 0000000..3726caf
--- /dev/null
+++ b/lib/calc/xmode.c
@@ -0,0 +1,142 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+mode(x1,x2,..,xn)
+   return mode of arguments
+**********************************************************************/
+
+static int dcmp(const void *aa, const void *bb)
+{
+    const double *a = aa;
+    const double *b = bb;
+
+    if (*a < *b)
+	return -1;
+    if (*a > *b)
+	return 1;
+    return 0;
+}
+
+static double mode(double *value, int argc)
+{
+    double mode_v;
+    int mode_n = 0;
+    int i;
+
+    qsort(value, argc, sizeof(double), dcmp);
+
+    for (i = 0; i < argc;) {
+	int n = 1;
+	double v = value[i];
+
+	for (i++; i < argc; i++) {
+	    if (value[i] != v)
+		break;
+	    n++;
+	}
+
+	if (n < mode_n)
+	    continue;
+
+	mode_v = v;
+	mode_n = n;
+    }
+
+    return mode_v;
+}
+
+int f_mode(int argc, const int *argt, void **args)
+{
+    static double *value;
+    static int value_size;
+    int size = argc * sizeof(double);
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    if (size > value_size) {
+	value_size = size;
+	value = G_realloc(value, value_size);
+    }
+
+    switch (argt[argc]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argv = (CELL **) & args[1];
+
+	    for (i = 0; i < columns; i++) {
+		int nv = 0;
+
+		for (j = 0; j < argc && !nv; j++) {
+		    if (IS_NULL_C(&argv[j][i]))
+			nv = 1;
+		    else
+			value[j] = (double)argv[j][i];
+		}
+
+		if (nv)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = (CELL) mode(value, argc);
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argv = (FCELL **) & args[1];
+
+	    for (i = 0; i < columns; i++) {
+		int nv = 0;
+
+		for (j = 0; j < argc && !nv; j++) {
+		    if (IS_NULL_F(&argv[j][i]))
+			nv = 1;
+		    else
+			value[j] = (double)argv[j][i];
+		}
+
+		if (nv)
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = (FCELL) mode(value, argc);
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argv = (DCELL **) & args[1];
+
+	    for (i = 0; i < columns; i++) {
+		int nv = 0;
+
+		for (j = 0; j < argc && !nv; j++) {
+		    if (IS_NULL_D(&argv[j][i]))
+			nv = 1;
+		    else
+			value[j] = (double)argv[j][i];
+		}
+
+		if (nv)
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = (DCELL) mode(value, argc);
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xmul.c b/lib/calc/xmul.c
new file mode 100644
index 0000000..88185c1
--- /dev/null
+++ b/lib/calc/xmul.c
@@ -0,0 +1,76 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+mul(a,b) = a * b
+****************************************************************/
+
+int f_mul(int argc, const int *argt, void **args)
+{
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argz = (CELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		res[i] = 1;
+		for (j = 1; j <= argc; j++) {
+		    if (IS_NULL_C(&argz[j][i])) {
+			SET_NULL_C(&res[i]);
+			break;
+		    }
+		    res[i] *= argz[j][i];
+		}
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argz = (FCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		res[i] = 1;
+		for (j = 1; j <= argc; j++) {
+		    if (IS_NULL_F(&argz[j][i])) {
+			SET_NULL_F(&res[i]);
+			break;
+		    }
+		    res[i] *= argz[j][i];
+		}
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argz = (DCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		res[i] = 1;
+		for (j = 1; j <= argc; j++) {
+		    if (IS_NULL_D(&argz[j][i])) {
+			SET_NULL_D(&res[i]);
+			break;
+		    }
+		    res[i] *= argz[j][i];
+		}
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xne.c b/lib/calc/xne.c
new file mode 100644
index 0000000..a97e339
--- /dev/null
+++ b/lib/calc/xne.c
@@ -0,0 +1,63 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+ne(a,b) = a != b
+****************************************************************/
+
+int f_ne(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] != arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] != arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] != arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xneg.c b/lib/calc/xneg.c
new file mode 100644
index 0000000..10c87a7
--- /dev/null
+++ b/lib/calc/xneg.c
@@ -0,0 +1,62 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+neg(x) = -x
+**********************************************************************/
+
+int f_neg(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != argt[1])
+	return E_RES_TYPE;
+
+    switch (argt[1]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_C(&arg1[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = -arg1[i];
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_F(&arg1[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = -arg1[i];
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+
+	    for (i = 0; i < columns; i++)
+		if (IS_NULL_D(&arg1[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = -arg1[i];
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xnmax.c b/lib/calc/xnmax.c
new file mode 100644
index 0000000..87c1537
--- /dev/null
+++ b/lib/calc/xnmax.c
@@ -0,0 +1,98 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+max(x0,x1,...,xn) returns maximum value
+****************************************************************/
+
+int f_nmax(int argc, const int *argt, void **args)
+{
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argz = (CELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 1;
+		CELL max;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_C(&argz[j][i]))
+			continue;
+		    else if (nul)
+			max = argz[j][i], nul = 0;
+		    else if (max < argz[j][i])
+			max = argz[j][i], nul = 0;
+		if (nul)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = max;
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argz = (FCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 1;
+		FCELL max;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_F(&argz[j][i]))
+			continue;
+		    else if (nul)
+			max = argz[j][i], nul = 0;
+		    else if (max < argz[j][i])
+			max = argz[j][i], nul = 0;
+		if (nul)
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = max;
+	    }
+
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argz = (DCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 1;
+		DCELL max;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_D(&argz[j][i]))
+			continue;
+		    else if (nul)
+			max = argz[j][i], nul = 0;
+		    else if (max < argz[j][i])
+			max = argz[j][i], nul = 0;
+		if (nul)
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = max;
+	    }
+
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xnmedian.c b/lib/calc/xnmedian.c
new file mode 100644
index 0000000..8fc239c
--- /dev/null
+++ b/lib/calc/xnmedian.c
@@ -0,0 +1,150 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+median(x1,x2,..,xn)
+   return median of arguments
+**********************************************************************/
+
+static int icmp(const void *aa, const void *bb)
+{
+    const CELL *a = aa;
+    const CELL *b = bb;
+
+    return *a - *b;
+}
+
+static int fcmp(const void *aa, const void *bb)
+{
+    const FCELL *a = aa;
+    const FCELL *b = bb;
+
+    if (*a < *b)
+	return -1;
+    if (*a > *b)
+	return 1;
+    return 0;
+}
+
+static int dcmp(const void *aa, const void *bb)
+{
+    const DCELL *a = aa;
+    const DCELL *b = bb;
+
+    if (*a < *b)
+	return -1;
+    if (*a > *b)
+	return 1;
+    return 0;
+}
+
+int f_nmedian(int argc, const int *argt, void **args)
+{
+    static void *array;
+    static int alloc;
+    int size = argc * Rast_cell_size(argt[0]);
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    if (size > alloc) {
+	alloc = size;
+	array = G_realloc(array, size);
+    }
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argv = (CELL **) &args[1];
+	    CELL *a = array;
+	    CELL *a1 = &a[(argc - 1) / 2];
+	    CELL *a2 = &a[argc / 2];
+
+	    for (i = 0; i < columns; i++) {
+		int n = 0;
+
+		for (j = 0; j < argc; j++) {
+		    if (IS_NULL_C(&argv[j][i]))
+			continue;
+		    a[n++] = argv[j][i];
+		}
+
+		if (!n)
+		    SET_NULL_C(&res[i]);
+		else {
+		    qsort(a, n, sizeof(CELL), icmp);
+		    res[i] = (*a1 + *a2) / 2;
+		}
+	    }
+
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argv = (FCELL **) &args[1];
+	    FCELL *a = array;
+	    FCELL *a1 = &a[(argc - 1) / 2];
+	    FCELL *a2 = &a[argc / 2];
+
+	    for (i = 0; i < columns; i++) {
+		int n = 0;
+
+		for (j = 0; j < argc; j++) {
+		    if (IS_NULL_F(&argv[j][i]))
+			continue;
+		    a[n++] = argv[j][i];
+		}
+
+		if (!n)
+		    SET_NULL_F(&res[i]);
+		else {
+		    qsort(a, n, sizeof(FCELL), fcmp);
+		    res[i] = (*a1 + *a2) / 2;
+		}
+	    }
+
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argv = (DCELL **) &args[1];
+	    DCELL *a = array;
+	    DCELL *a1 = &a[(argc - 1) / 2];
+	    DCELL *a2 = &a[argc / 2];
+
+	    for (i = 0; i < columns; i++) {
+		int n = 0;
+
+		for (j = 0; j < argc; j++) {
+		    if (IS_NULL_D(&argv[j][i]))
+			continue;
+		    a[n++] = argv[j][i];
+		}
+
+		if (!n)
+		    SET_NULL_D(&res[i]);
+		else {
+		    qsort(a, n, sizeof(DCELL), dcmp);
+		    res[i] = (*a1 + *a2) / 2;
+		}
+	    }
+
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xnmin.c b/lib/calc/xnmin.c
new file mode 100644
index 0000000..66793df
--- /dev/null
+++ b/lib/calc/xnmin.c
@@ -0,0 +1,98 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+min(x0,x1,...,xn) returns minimum value
+****************************************************************/
+
+int f_nmin(int argc, const int *argt, void **args)
+{
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argz = (CELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 1;
+		CELL min;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_C(&argz[j][i]))
+			continue;
+		    else if (nul)
+			min = argz[j][i], nul = 0;
+		    else if (min > argz[j][i])
+			min = argz[j][i], nul = 0;
+		if (nul)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = min;
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argz = (FCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 1;
+		FCELL min;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_F(&argz[j][i]))
+			continue;
+		    else if (nul)
+			min = argz[j][i], nul = 0;
+		    else if (min > argz[j][i])
+			min = argz[j][i], nul = 0;
+		if (nul)
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = min;
+	    }
+
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argz = (DCELL **) args;
+
+	    for (i = 0; i < columns; i++) {
+		int nul = 1;
+		DCELL min;
+
+		for (j = 1; j <= argc; j++)
+		    if (IS_NULL_D(&argz[j][i]))
+			continue;
+		    else if (nul)
+			min = argz[j][i], nul = 0;
+		    else if (min > argz[j][i])
+			min = argz[j][i], nul = 0;
+		if (nul)
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = min;
+	    }
+
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xnmode.c b/lib/calc/xnmode.c
new file mode 100644
index 0000000..0605f1e
--- /dev/null
+++ b/lib/calc/xnmode.c
@@ -0,0 +1,139 @@
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+mode(x1,x2,..,xn)
+   return mode of arguments
+**********************************************************************/
+
+static int dcmp(const void *aa, const void *bb)
+{
+    const double *a = aa;
+    const double *b = bb;
+
+    if (*a < *b)
+	return -1;
+    if (*a > *b)
+	return 1;
+    return 0;
+}
+
+static double mode(double *value, int argc)
+{
+    double mode_v;
+    int mode_n = 0;
+    int i;
+
+    qsort(value, argc, sizeof(double), dcmp);
+
+    for (i = 0; i < argc;) {
+	int n = 1;
+	double v = value[i];
+
+	for (i++; i < argc; i++) {
+	    if (value[i] != v)
+		break;
+	    n++;
+	}
+
+	if (n < mode_n)
+	    continue;
+
+	mode_v = v;
+	mode_n = n;
+    }
+
+    return mode_v;
+}
+
+int f_nmode(int argc, const int *argt, void **args)
+{
+    static double *value;
+    static int value_size;
+    int size = argc * sizeof(double);
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    if (size > value_size) {
+	value_size = size;
+	value = G_realloc(value, value_size);
+    }
+
+    switch (argt[argc]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL **argv = (CELL **) & args[1];
+
+	    for (i = 0; i < columns; i++) {
+		int n = 0;
+
+		for (j = 0; j < argc; j++) {
+		    if (IS_NULL_C(&argv[j][i]))
+			continue;
+		    value[n++] = (double)argv[j][i];
+		}
+
+		if (!n)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = (CELL) mode(value, n);
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL **argv = (FCELL **) & args[1];
+
+	    for (i = 0; i < columns; i++) {
+		int n = 0;
+
+		for (j = 0; j < argc; j++) {
+		    if (IS_NULL_F(&argv[j][i]))
+			continue;
+		    value[n++] = (double)argv[j][i];
+		}
+
+		if (!n)
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = (FCELL) mode(value, n);
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL **argv = (DCELL **) & args[1];
+
+	    for (i = 0; i < columns; i++) {
+		int n = 0;
+
+		for (j = 0; j < argc; j++) {
+		    if (IS_NULL_D(&argv[j][i]))
+			continue;
+		    value[n++] = (double)argv[j][i];
+		}
+
+		if (!n)
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = (DCELL) mode(value, n);
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xnot.c b/lib/calc/xnot.c
new file mode 100644
index 0000000..2f1bf2f
--- /dev/null
+++ b/lib/calc/xnot.c
@@ -0,0 +1,50 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+not(a) = !a
+****************************************************************/
+
+int f_not(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	if (IS_NULL_C(&arg1[i]))
+	    SET_NULL_C(&res[i]);
+	else
+	    res[i] = !arg1[i];
+    }
+
+    return 0;
+}
+
+int c_not(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    argt[0] = CELL_TYPE;
+
+    return 0;
+}
diff --git a/lib/calc/xnull.c b/lib/calc/xnull.c
new file mode 100644
index 0000000..ff7dd32
--- /dev/null
+++ b/lib/calc/xnull.c
@@ -0,0 +1,25 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+null() null values
+****************************************************************/
+
+int f_null(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc > 0)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++)
+	SET_NULL_C(&res[i]);
+
+    return 0;
+}
diff --git a/lib/calc/xor.c b/lib/calc/xor.c
new file mode 100644
index 0000000..428eca6
--- /dev/null
+++ b/lib/calc/xor.c
@@ -0,0 +1,39 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+or(a,b,c,...) = a || b || c || ...
+****************************************************************/
+
+int f_or(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = 0;
+	for (j = 1; j <= argc; j++) {
+	    CELL *arg = args[j];
+	    if (IS_NULL_C(&arg[i])) {
+		SET_NULL_C(&res[i]);
+		break;
+	    }
+	    if (arg[i])
+		res[i] = 1;
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xor2.c b/lib/calc/xor2.c
new file mode 100644
index 0000000..4ec37e3
--- /dev/null
+++ b/lib/calc/xor2.c
@@ -0,0 +1,46 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+or2(a,b,c,...) = a || b || c || ...
+
+Differs from or() in that the boolean axioms:
+
+	true || x == true
+	x || true == true
+
+hold even when x is null.
+****************************************************************/
+
+int f_or2(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i, j;
+
+    if (argc < 1)
+	return E_ARG_LO;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 1; i <= argc; i++)
+	if (argt[i] != argt[0])
+	    return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	res[i] = 0;
+	for (j = 1; j <= argc; j++) {
+	    CELL *arg = args[j];
+	    if (!IS_NULL_C(&arg[i]) && arg[i]) {
+		res[i] = 1;
+		break;
+	    }
+	    if (IS_NULL_C(&arg[i]))
+		SET_NULL_C(&res[i]);
+	}
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xpow.c b/lib/calc/xpow.c
new file mode 100644
index 0000000..a244c42
--- /dev/null
+++ b/lib/calc/xpow.c
@@ -0,0 +1,96 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+pow(a,b)
+   a raised to the power b
+****************************************************************/
+
+static int ipow(int x, int y)
+{
+    int res = 1;
+
+    while (y) {
+	if (y & 1)
+	    res *= x;
+	y >>= 1;
+	x *= x;
+    }
+    return res;
+}
+
+int f_pow(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != argt[0] || argt[2] != argt[0])
+	return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]) || arg2[i] < 0)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = ipow(arg1[i], arg2[i]);
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else if (arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else {
+		    floating_point_exception = 0;
+		    res[i] = pow(arg1[i], arg2[i]);
+		    if (floating_point_exception)
+			SET_NULL_F(&res[i]);
+		}
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else if (arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else {
+		    floating_point_exception = 0;
+		    res[i] = pow(arg1[i], arg2[i]);
+		    if (floating_point_exception)
+			SET_NULL_D(&res[i]);
+		}
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xrand.c b/lib/calc/xrand.c
new file mode 100644
index 0000000..a221478
--- /dev/null
+++ b/lib/calc/xrand.c
@@ -0,0 +1,89 @@
+
+#include <stdlib.h>
+
+#include <grass/config.h>
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+rand(lo,hi) random values between a and b
+****************************************************************/
+
+int f_rand(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		unsigned int x = (unsigned int)G_mrand48();
+		int lo = arg1[i];
+		int hi = arg2[i];
+
+		if (lo > hi) {
+		    int tmp = lo;
+
+		    lo = hi;
+		    hi = tmp;
+		}
+		res[i] = (lo == hi) ? lo : lo + x % (unsigned int)(hi - lo);
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		double x = G_drand48();
+		FCELL lo = arg1[i];
+		FCELL hi = arg2[i];
+
+		if (lo > hi) {
+		    FCELL tmp = lo;
+
+		    lo = hi;
+		    hi = tmp;
+		}
+		res[i] = (FCELL) (lo + x * (hi - lo));
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		double x = G_drand48();
+		DCELL lo = arg1[i];
+		DCELL hi = arg2[i];
+
+		if (lo > hi) {
+		    DCELL tmp = lo;
+
+		    lo = hi;
+		    hi = tmp;
+		}
+		res[i] = lo + x * (hi - lo);
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xround.c b/lib/calc/xround.c
new file mode 100644
index 0000000..0c4d621
--- /dev/null
+++ b/lib/calc/xround.c
@@ -0,0 +1,203 @@
+
+#include <limits.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+round(x, step, start)
+
+  rounds x to nearest value in the sequence
+    y[i] = i * step + start
+
+**********************************************************************/
+
+/* i_round(x) rounds x to nearest value, handles negative correctly */
+
+static double i_round(double x, double step, double start)
+{
+    x -= start;
+    x /= step;
+    x = floor(x + 0.5);
+    x *= step;
+    x += start;
+    return x;
+}
+
+/**********************************************************************/
+
+int f_round(int argc, const int *argt, void **args)
+{
+    const DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 3)
+	return E_ARG_HI;
+
+    if (argc == 1 && argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+    if (argc > 1 && argt[2] != DCELL_TYPE)
+	return E_ARG_TYPE;
+    if (argc > 2 && argt[3] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argc == 1) {
+	CELL *res = args[0];
+
+	for (i = 0; i < columns; i++) {
+	    if (IS_NULL_D(&arg1[i]))
+		SET_NULL_C(&res[i]);
+	    else {
+		DCELL x = i_round(arg1[i], 1.0, 0.0);
+		if (x > 2147483647.0 || x < -2147483647.0)
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = (CELL) x;
+	    }
+	}
+	return 0;
+    }
+    else if (argc == 2) {
+	const DCELL *arg2 = args[2];
+
+	switch (argt[0]) {
+        case CELL_TYPE:
+            {
+                CELL *res = args[0];
+    
+                for (i = 0; i < columns; i++) {
+                    if (IS_NULL_D(&arg1[i]))
+                        SET_NULL_C(&res[i]);
+                    else if (IS_NULL_D(&arg2[i]))
+                        SET_NULL_C(&res[i]);
+                    else {
+                        DCELL x = i_round(arg1[i], arg2[i], 0.0);
+                        if (x > 2147483647.0 || x < -2147483647.0)
+                            SET_NULL_C(&res[i]);
+                        else
+                            res[i] = (CELL) x;
+                    }
+                }
+                return 0;
+            }
+        case FCELL_TYPE:
+            {
+                FCELL *res = args[0];
+    
+                for (i = 0; i < columns; i++)
+                    if (IS_NULL_D(&arg1[i]))
+                        SET_NULL_F(&res[i]);
+                    else if (IS_NULL_D(&arg2[i]))
+                        SET_NULL_F(&res[i]);
+                    else
+                        res[i] = (FCELL) i_round(arg1[i], arg2[i], 0.0);
+                return 0;
+            }
+        case DCELL_TYPE:
+            {
+                DCELL *res = args[0];
+    
+                for (i = 0; i < columns; i++)
+                    if (IS_NULL_D(&arg1[i]))
+                        SET_NULL_D(&res[i]);
+                    else if (IS_NULL_D(&arg2[i]))
+                        SET_NULL_D(&res[i]);
+                    else
+                        res[i] = (DCELL) i_round(arg1[i], arg2[i], 0.0);
+                return 0;
+            }
+        default:
+            return E_INV_TYPE;
+        }
+    }
+    else if (argc == 3) {
+	const DCELL *arg2 = args[2];
+	const DCELL *arg3 = args[3];
+
+	switch (argt[0]) {
+        case CELL_TYPE:
+            {
+                CELL *res = args[0];
+    
+                for (i = 0; i < columns; i++) {
+                    if (IS_NULL_D(&arg1[i]))
+                        SET_NULL_C(&res[i]);
+                    else if (IS_NULL_D(&arg2[i]))
+                        SET_NULL_C(&res[i]);
+                    else if (IS_NULL_D(&arg3[i]))
+                        SET_NULL_C(&res[i]);
+                    else {
+                        DCELL x = i_round(arg1[i], arg2[i], arg3[i]);
+                        if (x > 2147483647.0 || x < -2147483647.0)
+                            SET_NULL_C(&res[i]);
+                        else
+                            res[i] = (CELL) x;
+                    }
+                }
+                return 0;
+            }
+        case FCELL_TYPE:
+            {
+                FCELL *res = args[0];
+    
+                for (i = 0; i < columns; i++)
+                    if (IS_NULL_D(&arg1[i]))
+                        SET_NULL_F(&res[i]);
+                    else if (IS_NULL_D(&arg2[i]))
+                        SET_NULL_F(&res[i]);
+                    else if (IS_NULL_D(&arg3[i]))
+                        SET_NULL_F(&res[i]);
+                    else
+                        res[i] = (FCELL) i_round(arg1[i], arg2[i], arg3[i]);
+                return 0;
+            }
+        case DCELL_TYPE:
+            {
+                DCELL *res = args[0];
+    
+                for (i = 0; i < columns; i++)
+                    if (IS_NULL_D(&arg1[i]))
+                        SET_NULL_D(&res[i]);
+                    else if (IS_NULL_D(&arg2[i]))
+                        SET_NULL_D(&res[i]);
+                    else if (IS_NULL_D(&arg3[i]))
+                        SET_NULL_D(&res[i]);
+                    else
+                        res[i] = (DCELL) i_round(arg1[i], arg2[i], arg3[i]);
+                return 0;
+            }
+        default:
+            return E_INV_TYPE;
+        }
+    }
+    else
+	return E_WTF;
+}
+
+int c_round(int argc, int *argt)
+{
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 3)
+	return E_ARG_HI;
+
+    argt[0] = CELL_TYPE;
+    if (argc > 1 && argt[0] < argt[2])
+	argt[0] = argt[2];
+    if (argc > 2 && argt[0] < argt[3])
+	argt[0] = argt[3];
+
+    argt[1] = DCELL_TYPE;
+    if (argc > 1)
+	argt[2] = DCELL_TYPE;
+    if (argc > 2)
+	argt[3] = DCELL_TYPE;
+
+    return 0;
+}
diff --git a/lib/calc/xshiftl.c b/lib/calc/xshiftl.c
new file mode 100644
index 0000000..5c94f99
--- /dev/null
+++ b/lib/calc/xshiftl.c
@@ -0,0 +1,36 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+shiftl(a,b) = a << b
+****************************************************************/
+
+int f_shiftl(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL *arg1 = args[1];
+    CELL *arg2 = args[2];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+	    SET_NULL_C(&res[i]);
+	else
+	    res[i] = arg1[i] << arg2[i];
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xshiftr.c b/lib/calc/xshiftr.c
new file mode 100644
index 0000000..0a89840
--- /dev/null
+++ b/lib/calc/xshiftr.c
@@ -0,0 +1,36 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+shiftr(a,b) = a >> b
+****************************************************************/
+
+int f_shiftr(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL *arg1 = args[1];
+    CELL *arg2 = args[2];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+	    SET_NULL_C(&res[i]);
+	else
+	    res[i] = arg1[i] >> arg2[i];
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xshiftru.c b/lib/calc/xshiftru.c
new file mode 100644
index 0000000..a9d63fe
--- /dev/null
+++ b/lib/calc/xshiftru.c
@@ -0,0 +1,36 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+shiftru(a,b) = (unsigned) a >> b
+****************************************************************/
+
+int f_shiftru(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    CELL *arg1 = args[1];
+    CELL *arg2 = args[2];
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
+	return E_ARG_TYPE;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++) {
+	if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+	    SET_NULL_C(&res[i]);
+	else
+	    res[i] = ((unsigned int)arg1[i]) >> arg2[i];
+    }
+
+    return 0;
+}
diff --git a/lib/calc/xsin.c b/lib/calc/xsin.c
new file mode 100644
index 0000000..e32a916
--- /dev/null
+++ b/lib/calc/xsin.c
@@ -0,0 +1,47 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+sin(x) 
+
+  if floating point exception occurs during the evaluation of sin(x)
+  the result is NULL
+
+  note: x is in degrees.
+**********************************************************************/
+
+#define DEGREES_TO_RADIANS (M_PI / 180.0)
+
+int f_sin(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = sin(arg1[i] * DEGREES_TO_RADIANS);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xsqrt.c b/lib/calc/xsqrt.c
new file mode 100644
index 0000000..1cdcf33
--- /dev/null
+++ b/lib/calc/xsqrt.c
@@ -0,0 +1,43 @@
+
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+sqrt(x) 
+
+  if floating point exception occurs during the evaluation of sqrt(x)
+  the result is NULL
+**********************************************************************/
+
+int f_sqrt(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]) || (arg1[i] < 0.0))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = sqrt(arg1[i]);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/calc/xsub.c b/lib/calc/xsub.c
new file mode 100644
index 0000000..f85ce87
--- /dev/null
+++ b/lib/calc/xsub.c
@@ -0,0 +1,68 @@
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/****************************************************************
+sub(a,b) = a - b
+****************************************************************/
+
+int f_sub(int argc, const int *argt, void **args)
+{
+    int i;
+
+    if (argc < 2)
+	return E_ARG_LO;
+    if (argc > 2)
+	return E_ARG_HI;
+
+    if (argt[1] != argt[0] || argt[2] != argt[0])
+	return E_ARG_TYPE;
+
+    switch (argt[0]) {
+    case CELL_TYPE:
+	{
+	    CELL *res = args[0];
+	    CELL *arg1 = args[1];
+	    CELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
+		    SET_NULL_C(&res[i]);
+		else
+		    res[i] = arg1[i] - arg2[i];
+	    }
+	    return 0;
+	}
+    case FCELL_TYPE:
+	{
+	    FCELL *res = args[0];
+	    FCELL *arg1 = args[1];
+	    FCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
+		    SET_NULL_F(&res[i]);
+		else
+		    res[i] = arg1[i] - arg2[i];
+	    }
+	    return 0;
+	}
+    case DCELL_TYPE:
+	{
+	    DCELL *res = args[0];
+	    DCELL *arg1 = args[1];
+	    DCELL *arg2 = args[2];
+
+	    for (i = 0; i < columns; i++) {
+		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
+		    SET_NULL_D(&res[i]);
+		else
+		    res[i] = arg1[i] - arg2[i];
+	    }
+	    return 0;
+	}
+    default:
+	return E_INV_TYPE;
+    }
+}
diff --git a/lib/calc/xtan.c b/lib/calc/xtan.c
new file mode 100644
index 0000000..a31375e
--- /dev/null
+++ b/lib/calc/xtan.c
@@ -0,0 +1,48 @@
+
+#include <stdlib.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/calc.h>
+
+/**********************************************************************
+tan(x) 
+
+  if floating point exception occurs during the evaluation of tan(x)
+  the result is NULL
+
+  note: x is in degrees.
+**********************************************************************/
+
+#define DEGREES_TO_RADIANS (M_PI / 180.0)
+
+int f_tan(int argc, const int *argt, void **args)
+{
+    DCELL *res = args[0];
+    DCELL *arg1 = args[1];
+    int i;
+
+    if (argc < 1)
+	return E_ARG_LO;
+    if (argc > 1)
+	return E_ARG_HI;
+
+    if (argt[0] != DCELL_TYPE)
+	return E_RES_TYPE;
+
+    if (argt[1] != DCELL_TYPE)
+	return E_ARG_TYPE;
+
+    for (i = 0; i < columns; i++)
+	if (IS_NULL_D(&arg1[i]))
+	    SET_NULL_D(&res[i]);
+	else {
+	    floating_point_exception = 0;
+	    res[i] = tan(arg1[i] * DEGREES_TO_RADIANS);
+	    if (floating_point_exception)
+		SET_NULL_D(&res[i]);
+	}
+
+    return 0;
+}
diff --git a/lib/db/dbmi_client/copy_tab.c b/lib/db/dbmi_client/copy_tab.c
index 08a6e52..8850fec 100644
--- a/lib/db/dbmi_client/copy_tab.c
+++ b/lib/db/dbmi_client/copy_tab.c
@@ -158,11 +158,33 @@ static int copy_table(const char *from_drvname, const char *from_dbname,
     }
 
     for (i = 0; i < count; i++) {
-	const char *tblname = db_get_string(&tblnames[i]);
 	int ret;
-	
+        char *tblname_i;
+
+        tblname_i = NULL;
+        if (strcmp(to_drvname, "pg") == 0) {
+            char *p, *tbl;
+            dbConnection connection;
+
+            tbl = db_get_string(&tblnames[i]);
+            db_get_connection(&connection);
+            p = strstr(tbl, ".");
+
+            if (p) {
+                char buf[GNAME_MAX];
+
+                sprintf(buf, "%s.%s", connection.schemaName ? connection.schemaName : "public",
+                        to_tblname);
+                if (strcmp(buf, tbl) == 0)
+                    tblname_i = G_store(p + 1); /* skip dot */
+            }
+        }
+        if (!tblname_i) {
+            tblname_i = G_store(db_get_string(&tblnames[i]));
+        }
+        
 	ret = DB_FAILED;
-	if (strcmp(to_tblname, tblname) == 0) {
+	if (strcmp(to_tblname, tblname_i) == 0) {
 	    if (G_get_overwrite()) {
 		G_warning(_("Table <%s> already exists in database and will be overwritten"),
 			  to_tblname);
@@ -181,6 +203,8 @@ static int copy_table(const char *from_drvname, const char *from_dbname,
 		return DB_FAILED;
 	    }
 	}
+
+        G_free(tblname_i);
     }
 
     /* Create new table */
diff --git a/lib/db/sqlp/sql.html b/lib/db/sqlp/sql.html
index 754a39f..ea704d4 100644
--- a/lib/db/sqlp/sql.html
+++ b/lib/db/sqlp/sql.html
@@ -237,4 +237,4 @@ v.db.update vectormap column=species qcolumn="CASE WHEN col1 >= 1 THEN cat WH
 <a href="database.html">Help pages for database modules</a>
 
 <p>
-<i>Last changed: $Date: 2016-09-11 13:25:46 +0200 (Sun, 11 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-11 09:33:35 +0200 (Sun, 11 Sep 2016) $</i>
diff --git a/lib/display/r_raster.c b/lib/display/r_raster.c
index bf6b024..1144bde 100644
--- a/lib/display/r_raster.c
+++ b/lib/display/r_raster.c
@@ -3,7 +3,7 @@
 
   \brief Display Library - Raster graphics subroutines
 
-  (C) 2001-2014 by the GRASS Development Team
+  (C) 2001-2015 by the GRASS Development Team
 
   This program is free software under the GNU General Public License
   (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -24,6 +24,7 @@
 #include <grass/gis.h>
 #include <grass/glocale.h>
 #include <grass/display.h>
+#include <grass/spawn.h>
 
 #include "driver.h"
 
@@ -34,8 +35,6 @@ extern const struct driver *HTML_Driver(void);
 extern const struct driver *Cairo_Driver(void);
 #endif
 
-static int read_env_file(const char *);
-
 static struct {
     double t, b, l, r;
 } screen, frame;
@@ -72,79 +71,65 @@ static void init(void)
 	frame = screen;
 }
 
-int read_env_file(const char *path)
-{
-    FILE *fd;
-    char buf[1024];
-    char **token;
-
-    G_debug(1, "read_env_file(): %s", path);
-    
-    fd = fopen(path, "r");
-    if (!fd)
-	return -1;
-
-    token = NULL;
-    while (G_getl2(buf, sizeof(buf) - 1, fd) != 0) {
-	token = G_tokenize(buf, "=");
-	if (G_number_of_tokens(token) != 2)
-	    continue;
-	G_debug(3, "\tread_env_file(): %s=%s", token[0], token[1]);
-	G_putenv(token[0], token[1]);
-	G_free_tokens(token);
-	token = NULL;
-    }
-
-    return 0;
-}
-
 /*!
   \brief Open display driver
 
   Default display driver is Cairo, if not available PNG is used.
 
   \return 0 on success
-  \return 1 no monitor defined
 */
 int D_open_driver(void)
 {
-    const char *p, *m;
+    const char *p, *c, *m;
     const struct driver *drv;
     
     G_debug(1, "D_open_driver():");
     p = getenv("GRASS_RENDER_IMMEDIATE");
+    c = getenv("GRASS_RENDER_COMMAND");
     m = G_getenv_nofatal("MONITOR");
     
-    if (m && G_strncasecmp(m, "wx", 2) == 0) {
-	/* wx monitors always use GRASS_RENDER_IMMEDIATE. */
-	p = NULL; /* use default display driver */
-    }
-    else if (m) {
-	char *env;
-	const char *v;
-	char *u_m;
-	
-	if (p)
-	    G_warning(_("%s variable defined, %s ignored"),
-		      "MONITOR", "GRASS_RENDER_IMMEDIATE");
-	/* GRASS variable names should be upper case. */
-	u_m = G_store_upper(m);
-
-	env = NULL;
-	G_asprintf(&env, "MONITOR_%s_MAPFILE", u_m);
-	v = G_getenv_nofatal(env);
-	p = m;
+    if (!p && (m || c)) {
+        char *cmd;
+        char progname[GPATH_MAX];
 
-	if (v)
-            G_putenv("GRASS_RENDER_FILE", v);
+        cmd = G_recreate_command();
         
-	G_asprintf(&env, "MONITOR_%s_ENVFILE", u_m);
-	v = G_getenv_nofatal(env);
-	if (v) 
-	    read_env_file(v);
+        if (c && m) {
+            G_warning(_("Both %s and %s are defined. "
+                        "%s will be ignored."),
+                      "GRASS_RENDER_COMMAND", "MONITOR",
+                      "MONITOR");
+            m = NULL;
+        }
+        
+        if (c) 
+            sprintf(progname, "%s", c);
+        else { /* monitors managed by d.mon -> call default renderer */
+            char element[GPATH_MAX];
+            
+            G_temp_element(element);
+            strcat(element, "/");
+            strcat(element, "MONITORS");
+            strcat(element, "/");
+            strcat(element, m);
+            G_file_name(progname, element, "render.py", G_mapset());
+        }
+
+        G_debug(1, "rendering redirected to %s", progname);
+        /* assuming Python script here (could be extended in the future) */
+        G_spawn_ex(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"), progname,
+                   cmd, NULL);
+        
+        G_free(cmd);
+        
+        /* force exiting GRASS command, leave rendering on
+         * GRASS_RENDER_COMMAND program */
+        exit(0);
     }
-    else if (!p)
-	G_fatal_error(_("Neither %s (managed by d.mon command) nor %s (used for direct rendering) defined"),
+
+    if (!p)
+	G_fatal_error(_("Neither %s (managed by d.mon command) nor %s "
+                        "(used for direct rendering) defined"),
 		      "MONITOR", "GRASS_RENDER_IMMEDIATE");
 
     if (p && G_strcasecmp(p, "default") == 0)
@@ -187,62 +172,13 @@ void D_close_driver(void)
 }
 
 /*!
-  \brief Append command to the cmd file
+  \brief Append command to the cmd file (unused)
 
-  Cmd file is created by d.mon by defining GRASS variable
-  \c MONITOR_<name>_CMDFILE, where \c \<name\> is the upper case name of
-  the monitor.
-
-  Command string is usually generated by G_recreate_command(), NULL is
-  used to clean up list of commands (see d.erase command).
-
-  \param cmd string buffer with command or NULL
-
-  \return 0 no monitor selected
-  \return -1 on error
-  \return 1 on success
+  \todo To be removed
 */
 int D_save_command(const char *cmd)
 {
-    const char *mon_name, *mon_cmd;
-    char *env, *flag, *u_mon_name;
-    FILE *fd;
-
-    G_debug(1, "D_save_command(): %s", cmd);
-
-    mon_name = G_getenv_nofatal("MONITOR");
-    if (!mon_name || /* if no monitor selected */
-	/* or wx monitor selected and display commands called by the monitor */
-	(G_strncasecmp(mon_name, "wx", 2) == 0 &&
-	 getenv("GRASS_RENDER_IMMEDIATE")))
-	return 0;
-
-    /* GRASS variable names should be upper case. */
-    u_mon_name = G_store_upper(mon_name);
-
-    env = NULL;
-    G_asprintf(&env, "MONITOR_%s_CMDFILE", u_mon_name);
-    mon_cmd = G_getenv_nofatal(env);
-    if (!mon_cmd)
-	return 0;
-
-    if (cmd)
-	flag = "a";
-    else
-	flag = "w";
-
-    fd = fopen(mon_cmd, flag);
-    if (!fd) {
-	G_warning(_("Unable to open file '%s'"), mon_cmd);
-	return -1;
-    }
-
-    if (cmd)
-	fprintf(fd, "%s\n", cmd);
-    
-    fclose(fd);
-
-    return 1;
+    return 0;
 }
 
 /*!
diff --git a/lib/driver/font.c b/lib/driver/font.c
index 086fab1..aeccd5d 100644
--- a/lib/driver/font.c
+++ b/lib/driver/font.c
@@ -48,11 +48,13 @@ static void font_list(char ***list, int *count, int verbose)
 	;
     num_fonts = i;
 
+    G_debug(2, "font_list: num_fonts=%d", num_fonts);
     fonts = G_malloc(num_fonts * sizeof(const char *));
 
     for (i = 0; i < num_fonts; i++) {
 	struct GFONT_CAP *p = &ftcap[i];
 
+	G_debug(4, "font: %d (%s)", i, p->name);
 	if (verbose) {
 	    char buf[GPATH_MAX];
 
diff --git a/lib/gis/cmprbzip.c b/lib/gis/cmprbzip.c
new file mode 100644
index 0000000..b6599c8
--- /dev/null
+++ b/lib/gis/cmprbzip.c
@@ -0,0 +1,175 @@
+/*
+ ****************************************************************************
+ *                     -- GRASS Development Team --
+ *
+ * MODULE:      GRASS gis library
+ * FILENAME:    cmprbzip.c
+ * AUTHOR(S):   Markus Metz
+ * PURPOSE:     To provide an interface to libbzip2 for compressing and 
+ *              decompressing data.  Its primary use is in
+ *              the storage and reading of GRASS rasters.
+ *
+ * ALGORITHM:   http://www.bzip.org
+ * DATE CREATED: Nov 19 2015
+ * COPYRIGHT:   (C) 2015 by the GRASS Development Team
+ *
+ *              This program is free software under the GNU General Public
+ *              License (version 2 or greater). Read the file COPYING that 
+ *              comes with GRASS for details.
+ *
+ *****************************************************************************/
+
+/********************************************************************
+ * int                                                              *
+ * G_bz2_compress (src, srz_sz, dst, dst_sz)                        *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function is a wrapper around the bzip2 compression          *
+ * function. It uses an all or nothing call.                        *
+ * If you need a continuous compression scheme, you'll have to code *
+ * your own.                                                        *
+ * In order to do a single pass compression, the input src must be  *
+ * copied to a buffer 1% + 600 bytes larger than the data.  This    *
+ * may cause performance degradation.                               *
+ *                                                                  *
+ * The function either returns the number of bytes of compressed    *
+ * data in dst, or an error code.                                   *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Compression failed.                                 *
+ *        -2 -- dst is too small.                                   *
+ *                                                                  *
+ * ================================================================ *
+ * int                                                              *
+ * G_bz2_expand (src, src_sz, dst, dst_sz)                          *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function is a wrapper around the bzip2 decompression        *
+ * function. It uses a single pass call to inflate().               *
+ * If you need a continuous expansion scheme, you'll have to code   *
+ * your own.                                                        *
+ *                                                                  *
+ * The function returns the number of bytes expanded into 'dst' or  *
+ * and error code.                                                  *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Expansion failed.                                   *
+ *                                                                  *
+ ********************************************************************
+ */
+
+#include <grass/config.h>
+
+#ifdef HAVE_BZLIB_H
+#include <bzlib.h>
+#endif
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+
+int
+G_bz2_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    int err;
+    unsigned int i, nbytes, buf_sz;
+    unsigned char *buf;
+
+#ifndef HAVE_BZLIB_H
+    G_fatal_error(_("GRASS needs to be compiled with BZIP2 for BZIP2 compression"));
+    return -1;
+#else
+
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if src is empty */
+    if (src_sz <= 0)
+	return 0;
+
+    /* Output buffer has to be 1% + 600 bytes bigger for single pass compression */
+    buf_sz = (unsigned int)((double)dst_sz * 1.01 + (double)600);
+
+    if (NULL == (buf = (unsigned char *)
+		 G_calloc(buf_sz, sizeof(unsigned char))))
+	return -1;
+
+    /* Do single pass compression */
+    nbytes = buf_sz;
+    err = BZ2_bzBuffToBuffCompress((char *)buf, &nbytes, /* destination */
+                                   (char *)src, src_sz,  /* source */
+				   9,			 /* blockSize100k */ 
+				   0,                    /* verbosity */
+				   0);                   /* workFactor */
+    if (err != BZ_OK) {
+	G_free(buf);
+	return -1;
+    }
+
+    /* updated buf_sz is bytes of compressed data */
+    if (nbytes >= (unsigned int)src_sz) {
+	/* compression not possible */
+	G_free(buf);
+	return -2;
+    }
+
+    /* dst too small */
+    if ((unsigned int)dst_sz < nbytes)
+	return -2;
+
+    /* Copy the data from buf to dst */
+    for (i = 0; i < nbytes; i++)
+	dst[i] = buf[i];
+
+    G_free(buf);
+
+    return nbytes;
+#endif
+}				/* G_bz2_compress() */
+
+int
+G_bz2_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz)
+{
+    int err;
+    unsigned int nbytes;
+
+#ifndef HAVE_BZLIB_H
+    G_fatal_error(_("GRASS needs to be compiled with BZIP2 for BZIP2 compression"));
+    return -2;
+#else
+
+    /* Catch error condition */
+    if (src == NULL || dst == NULL)
+	return -2;
+
+    /* Don't do anything if either of these are true */
+    if (src_sz <= 0 || dst_sz <= 0)
+	return 0;
+
+
+    /* Do single pass decompression */
+    nbytes = dst_sz;
+    err = BZ2_bzBuffToBuffDecompress((char *)dst, &nbytes,  /* destination */
+                                     (char *)src, src_sz,   /* source */
+				     0,                     /* small */
+				     0);                    /* verbosity */
+
+    /* Number of bytes inflated to output stream is
+     * updated buffer size
+     */
+
+    if (!(err == BZ_OK)) {
+	return -1;
+    }
+
+    return nbytes;
+#endif
+}
+
+
+/* vim: set softtabstop=4 shiftwidth=4 expandtab: */
diff --git a/lib/gis/cmprlz4.c b/lib/gis/cmprlz4.c
new file mode 100644
index 0000000..92993f1
--- /dev/null
+++ b/lib/gis/cmprlz4.c
@@ -0,0 +1,145 @@
+/*
+ ****************************************************************************
+ *                     -- GRASS Development Team --
+ *
+ * MODULE:      GRASS gis library
+ * FILENAME:    cmprlz4.c
+ * AUTHOR(S):   Eric G. Miller <egm2 at jps.net>
+ *              Markus Metz
+ * PURPOSE:     To provide an interface to lz4 for compressing and 
+ *              decompressing data using LZ$.  It's primary use is in
+ *              the storage and reading of GRASS floating point rasters.
+ *
+ * ALGORITHM:   https://code.google.com/p/lz4/
+ * DATE CREATED: Dec 18 2015
+ * COPYRIGHT:   (C) 2015 by the GRASS Development Team
+ *
+ *              This program is free software under the GNU General Public
+ *              License (version 2 or greater). Read the file COPYING that 
+ *              comes with GRASS for details.
+ *
+ *****************************************************************************/
+
+/********************************************************************
+ * int                                                              *
+ * G_lz4_compress (src, srz_sz, dst, dst_sz)                        *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function is a wrapper around the LZ4 cimpression function.  *
+ * It uses an all or nothing call.                                  *
+ * If you need a continuous compression scheme, you'll have to code *
+ * your own.                                                        *
+ * In order to do a single pass compression, the input src must be  *
+ * copied to a buffer larger than the data.  This may cause         *
+ * performance degradation.                                         *
+ *                                                                  *
+ * The function either returns the number of bytes of compressed    *
+ * data in dst, or an error code.                                   *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Compression failed.                                 *
+ *        -2 -- dst is too small.                                   *
+ *                                                                  *
+ * ================================================================ *
+ * int                                                              *
+ * G_lz4_expand (src, src_sz, dst, dst_sz)                          *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function is a wrapper around the lz4 decompression          *
+ * function.  It uses a single pass call.  If you need a continuous *
+ * expansion scheme, you'll have to code your own.                  *
+ *                                                                  *
+ * The function returns the number of bytes expanded into 'dst' or  *
+ * and error code.                                                  *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Expansion failed.                                   *
+ *                                                                  *
+ ********************************************************************
+ */
+
+#include <grass/config.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+#include "lz4.h"
+
+
+int
+G_lz4_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    int err, nbytes, buf_sz;
+    unsigned char *buf;
+
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if either of these are true */
+    if (src_sz <= 0 || dst_sz <= 0)
+	return 0;
+
+    /* Output buffer has to be larger for single pass compression */
+    buf_sz = LZ4_compressBound(src_sz);
+    if (NULL == (buf = (unsigned char *)
+		 G_calloc(buf_sz, sizeof(unsigned char))))
+	return -1;
+
+    /* Do single pass compression */
+    err = LZ4_compress_default((char *)src, (char *)buf, src_sz, buf_sz);
+    if (err <= 0) {
+	G_free(buf);
+	return -1;
+    }
+    if (err >= src_sz) {
+	/* compression not possible */
+	G_free(buf);
+	return -2;
+    }
+    
+    /* bytes of compressed data is return value */
+    nbytes = err;
+
+    /* Copy the data from buf to dst */
+    for (err = 0; err < nbytes; err++)
+	dst[err] = buf[err];
+
+    G_free(buf);
+
+    return nbytes;
+}
+
+int
+G_lz4_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz)
+{
+    int err, nbytes;
+
+    /* Catch error condition */
+    if (src == NULL || dst == NULL)
+	return -2;
+
+    /* Don't do anything if either of these are true */
+    if (src_sz <= 0 || dst_sz <= 0)
+	return 0;
+
+    /* Do single pass decompress */
+    err = LZ4_decompress_safe((char *)src, (char *)dst, src_sz, dst_sz);
+    /* err = LZ4_decompress_fast(src, dst, src_sz); */
+
+    /* Number of bytes inflated to output stream is return value */
+    nbytes = err;
+
+    if (nbytes != dst_sz) {
+	return -1;
+    }
+
+    return nbytes;
+}
+
+
+/* vim: set softtabstop=4 shiftwidth=4 expandtab: */
diff --git a/lib/gis/cmprrle.c b/lib/gis/cmprrle.c
new file mode 100644
index 0000000..8bc5c9f
--- /dev/null
+++ b/lib/gis/cmprrle.c
@@ -0,0 +1,192 @@
+/*
+ ****************************************************************************
+ *                     -- GRASS Development Team --
+ *
+ * MODULE:      GRASS gis library
+ * FILENAME:    cmprrle.c
+ * AUTHOR(S):   Markus Metz
+ * PURPOSE:     To provide generic RLE for compressing and 
+ *              decompressing data.  Its primary use is in
+ *              the storage and reading of GRASS rasters.
+ *
+ * ALGORITHM:   Run Length Encoding
+ * DATE CREATED: Dec 18 2015
+ * COPYRIGHT:   (C) 2015 by the GRASS Development Team
+ *
+ *              This program is free software under the GNU General Public
+ *              License (version 2 or greater). Read the file COPYING that 
+ *              comes with GRASS for details.
+ *
+ *****************************************************************************/
+
+/********************************************************************
+ * int                                                              *
+ * G_rle_compress (src, srz_sz, dst, dst_sz)                        *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function compresses data with RLE.                          *
+ * It uses an all or nothing call.                                  *
+ * If you need a continuous compression scheme, you'll have to code *
+ * your own.                                                        *
+ *                                                                  *
+ * The function either returns the number of bytes of compressed    *
+ * data in dst, or an error code.                                   *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Compression failed.                                 *
+ *        -2 -- dst is too small.                                   *
+ *                                                                  *
+ * ================================================================ *
+ * int                                                              *
+ * G_rle_expand (src, src_sz, dst, dst_sz)                          *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function decompresses data compresed with RLE.              *
+ * It is equivalent to a single pass call to an external expansion  * 
+ * function.                                                        *
+ * If you need a continuous expansion scheme, you'll have to code   *
+ * your own.                                                        *
+ *                                                                  *
+ * The function returns the number of bytes expanded into 'dst' or  *
+ * and error code.                                                  *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Expansion failed.                                   *
+ *                                                                  *
+ ********************************************************************
+ */
+
+#include <grass/config.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+
+int
+G_rle_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    int i, nbytes;
+    unsigned char prev_b; 
+    int cnt;
+
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if src is empty or smaller than 4 bytes */
+    if (src_sz <= 3)
+	return 0;
+
+    /* modified RLE:
+     * unit is 1 byte, only sequences longer than 1 are encoded
+     * single occurrences don't have a following count
+     * multiple occurrences are twice in dst, followed by the count
+     * example:
+     * ABBCCC
+     * is encoded as
+     * ABB2CC3 
+     */
+ 
+    prev_b = src[0];
+    cnt = 1;
+    nbytes = 0;
+    for (i = 1; i < src_sz; i++) {
+	if (prev_b != src[i] || cnt == 255) {
+	    /* write to dst */
+	    if (cnt == 1) {
+		if (nbytes >= dst_sz)
+		    return -2;
+		dst[nbytes++] = prev_b;
+	    }
+	    else {
+		/* cnt > 1 */
+		if (nbytes >= dst_sz - 2)
+		    return -2;
+		dst[nbytes++] = prev_b;
+		dst[nbytes++] = prev_b;
+		dst[nbytes++] = (unsigned char) cnt;
+	    }
+	    cnt = 0;
+	}
+	prev_b = src[i];
+	cnt++;
+    }
+    /* write out the last sequence */
+    if (cnt == 1) {
+	if (nbytes >= dst_sz)
+	    return -2;
+	dst[nbytes++] = prev_b;
+    }
+    else {
+	if (nbytes >= dst_sz - 2)
+	    return -2;
+	dst[nbytes++] = prev_b;
+	dst[nbytes++] = prev_b;
+	dst[nbytes++] = (unsigned char) cnt;
+    }
+
+    return nbytes;
+}
+
+int
+G_rle_expand(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    int i, j, nbytes, cnt;
+    unsigned char prev_b;
+
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if src is empty */
+    if (src_sz <= 0)
+	return 0;
+
+    /* RLE expand */
+    prev_b = src[0];
+    cnt = 1;
+    nbytes = 0;
+    i = 1;
+    while (i < src_sz) {
+	/* single occurrences don't have a following count
+	 * multiple occurrences are twice in src, followed by the count */
+	if (cnt == 2) {
+	    if (i >= src_sz)
+		return -1;
+	    cnt = src[i];
+	    if (nbytes + cnt > dst_sz)
+		return -1;
+	    for (j = 0; j < cnt; j++) {
+		dst[nbytes++] = prev_b;
+	    }
+	    cnt = 0;
+	    i++;
+	    if (i >= src_sz)
+		return nbytes;
+	}
+	if (cnt == 1) {
+	    if (prev_b != src[i]) {
+		if (nbytes + cnt > dst_sz)
+		    return -1;
+		dst[nbytes++] = prev_b;
+		cnt = 0;
+	    }
+	}
+	prev_b = src[i];
+	cnt++;
+	i++;
+    }
+    if (nbytes >= dst_sz)
+	return -1;
+    if (cnt == 1)
+	dst[nbytes++] = prev_b;
+
+    return nbytes;
+}
+
+
+/* vim: set softtabstop=4 shiftwidth=4 expandtab: */
diff --git a/lib/gis/cmprzlib.c b/lib/gis/cmprzlib.c
new file mode 100644
index 0000000..612fe21
--- /dev/null
+++ b/lib/gis/cmprzlib.c
@@ -0,0 +1,231 @@
+/*
+ ****************************************************************************
+ *                     -- GRASS Development Team --
+ *
+ * MODULE:      GRASS gis library
+ * FILENAME:    cmprzlib.c
+ * AUTHOR(S):   Eric G. Miller <egm2 at jps.net>
+ *              Markus Metz
+ * PURPOSE:     To provide an interface to libz for compressing and 
+ *              decompressing data using DEFLATE.  It's primary use is in
+ *              the storage and reading of GRASS floating point rasters.
+ *              It replaces the patented LZW compression interface.
+ *
+ * ALGORITHM:   http://www.gzip.org/zlib/feldspar.html
+ * DATE CREATED: Dec 17 2015
+ * COPYRIGHT:   (C) 2015 by the GRASS Development Team
+ *
+ *              This program is free software under the GNU General Public
+ *              License (version 2 or greater). Read the file COPYING that 
+ *              comes with GRASS for details.
+ *
+ *****************************************************************************/
+
+/********************************************************************
+ * int                                                              *
+ * G_zlib_compress (src, srz_sz, dst, dst_sz)                       *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function is a wrapper around the zlib deflate() function.   *
+ * It uses an all or nothing call to deflate().  If you need a      *
+ * continuous compression scheme, you'll have to code your own.     *
+ * In order to do a single pass compression, the input src must be  *
+ * copied to a buffer 1% + 12 bytes larger than the data.  This may *
+ * cause performance degradation.                                   *
+ *                                                                  *
+ * The function either returns the number of bytes of compressed    *
+ * data in dst, or an error code.                                   *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Compression failed.                                 *
+ *        -2 -- dst is too small.                                   *
+ *                                                                  *
+ * ================================================================ *
+ * int                                                              *
+ * G_zlib_expand (src, src_sz, dst, dst_sz)                         *
+ *     int src_sz, dst_sz;                                          *
+ *     unsigned char *src, *dst;                                    *
+ * ---------------------------------------------------------------- *
+ * This function is a wrapper around the zlib inflate() function.   *
+ * It uses a single pass call to inflate().  If you need a contin-  *
+ * uous expansion scheme, you'll have to code your own.             *
+ *                                                                  *
+ * The function returns the number of bytes expanded into 'dst' or  *
+ * and error code.                                                  *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Expansion failed.                                   *
+ *                                                                  *
+ ********************************************************************
+ */
+
+#include <grass/config.h>
+
+#ifndef HAVE_ZLIB_H
+
+#error "GRASS requires libz to compile"
+
+#else
+
+#include <zlib.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+#include "G.h"
+
+static void _init_zstruct(z_stream * z)
+{
+    /* The types are defined in zlib.h, we set to NULL so zlib uses
+     * its default functions.
+     */
+    z->zalloc = (alloc_func) 0;
+    z->zfree = (free_func) 0;
+    z->opaque = (voidpf) 0;
+}
+
+
+int
+G_zlib_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    int err, nbytes, buf_sz;
+    unsigned char *buf;
+    z_stream c_stream;
+
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if either of these are true */
+    if (src_sz <= 0 || dst_sz <= 0)
+	return 0;
+
+    /* Output buffer has to be 1% + 12 bytes bigger for single pass deflate */
+    /* buf_sz = (int)((double)dst_sz * 1.01 + (double)12); */
+    buf_sz = compressBound(src_sz);
+    if (NULL == (buf = (unsigned char *)
+		 G_calloc(buf_sz, sizeof(unsigned char))))
+	return -1;
+
+    /* Set-up for default zlib memory handling */
+    _init_zstruct(&c_stream);
+
+    /* Set-up the stream */
+    c_stream.avail_in = src_sz;
+    c_stream.next_in = (unsigned char *) src;
+    c_stream.avail_out = buf_sz;
+    c_stream.next_out = buf;
+
+    /* Initialize */
+    /* Valid zlib compression levels -1 - 9 */
+    /* zlib default: Z_DEFAULT_COMPRESSION = -1, equivalent to 6 
+     * as used here, 1 gives the best compromise between speed and compression */
+    err = deflateInit(&c_stream, G__.compression_level);
+
+    /* If there was an error initializing, return -1 */
+    if (err != Z_OK) {
+	G_free(buf);
+	return -1;
+    }
+
+    /* Do single pass compression */
+    err = deflate(&c_stream, Z_FINISH);
+    if (err != Z_STREAM_END) {
+	switch (err) {
+	case Z_OK:		/* Destination too small */
+	    G_free(buf);
+	    deflateEnd(&c_stream);
+	    return -2;
+	    break;
+	default:		/* Give other error */
+	    G_free(buf);
+	    deflateEnd(&c_stream);
+	    return -1;
+	    break;
+	}
+    }
+
+    /* avail_out is updated to bytes remaining in buf, so bytes of compressed
+     * data is the original size minus that
+     */
+    nbytes = buf_sz - c_stream.avail_out;
+    if (nbytes >= src_sz) {
+	/* compression not possible */
+	G_free(buf);
+	deflateEnd(&c_stream);
+	return -2;
+    }
+    /* Copy the data from buf to dst */
+    for (err = 0; err < nbytes; err++)
+	dst[err] = buf[err];
+
+    G_free(buf);
+    deflateEnd(&c_stream);
+
+    return nbytes;
+}				/* G_zlib_compress() */
+
+
+int
+G_zlib_expand(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz)
+{
+    int err, nbytes;
+    z_stream c_stream;
+
+    /* Catch error condition */
+    if (src == NULL || dst == NULL)
+	return -2;
+
+    /* Don't do anything if either of these are true */
+    if (src_sz <= 0 || dst_sz <= 0)
+	return 0;
+
+    /* Set-up default zlib memory handling */
+    _init_zstruct(&c_stream);
+
+    /* Set-up I/O streams */
+    c_stream.avail_in = src_sz;
+    c_stream.next_in = (unsigned char *)src;
+    c_stream.avail_out = dst_sz;
+    c_stream.next_out = dst;
+
+    /* Call zlib initilization function */
+    err = inflateInit(&c_stream);
+
+    /* If not Z_OK return error -1 */
+    if (err != Z_OK)
+	return -1;
+
+    /* Do single pass inflate */
+    err = inflate(&c_stream, Z_FINISH);
+
+    /* Number of bytes inflated to output stream is
+     * original bytes available minus what avail_out now says
+     */
+    nbytes = dst_sz - c_stream.avail_out;
+
+    /* Z_STREAM_END means all input was consumed, 
+     * Z_OK means only some was processed (not enough room in dst)
+     */
+    if (!(err == Z_STREAM_END || err == Z_OK)) {
+	if (!(err == Z_BUF_ERROR && nbytes == dst_sz)) {
+	    inflateEnd(&c_stream);
+	    return -1;
+	}
+	/* Else, there was extra input, but requested output size was
+	 * decompressed successfully.
+	 */
+    }
+
+    inflateEnd(&c_stream);
+
+    return nbytes;
+}				/* G_zlib_expand() */
+
+
+#endif /* HAVE_ZLIB_H */
+
+
+/* vim: set softtabstop=4 shiftwidth=4 expandtab: */
diff --git a/lib/gis/colors.desc b/lib/gis/colors.desc
index 7a103ab..04de4cf 100644
--- a/lib/gis/colors.desc
+++ b/lib/gis/colors.desc
@@ -14,6 +14,7 @@ etopo2: colors for ETOPO2 worldwide bathymetry/topography
 evi: enhanced vegetative index colors
 fahrenheit: blue to red for Fahrenheit temperature
 gdd: accumulated growing degree days
+grass: GRASS GIS green (perceptually uniform)
 greens: white to green
 grey: grey scale
 grey1.0: grey scale for raster values between 0.0-1.0
@@ -40,7 +41,10 @@ ryb: red through yellow to blue
 ryg: red through yellow to green
 sepia: yellowish-brown through to white
 slope: r.slope.aspect-type slope colors for raster values 0-90
+soilmoisture: soilmoisture color table (0.0-1.0)
 srtm: color palette for Shuttle Radar Topography Mission elevation
 srtm_plus: color palette for Shuttle Radar Topography Mission elevation (with seafloor colors)
 terrain: global elevation color table covering -11000 to +8850m
+viridis: perceptually uniform sequential color table viridis
+water: water depth
 wave: color wave
diff --git a/lib/gis/colors/grass b/lib/gis/colors/grass
new file mode 100644
index 0000000..7329f9b
--- /dev/null
+++ b/lib/gis/colors/grass
@@ -0,0 +1,108 @@
+# Generic green color rule for GRASS GIS
+# designed with the help of matplotlib/viscm utility;
+# interpolated to a 0-100% proportional rule file with the help of interpln()
+# function in SciLab; aimed at providing a basic color ramp complying with
+# (i) a constant delta between adjacent tones and
+# (ii) colorblind users.
+# author: Vincent Bain
+0% 4:49:0
+1% 4:51:0
+2% 5:53:1
+3% 6:55:1
+4% 7:57:1
+5% 8:59:1
+6% 9:61:1
+7% 10:63:2
+8% 11:65:2
+9% 12:67:2
+10% 13:69:2
+11% 14:71:2
+12% 14:73:3
+13% 15:75:3
+14% 16:77:3
+15% 17:79:3
+16% 17:81:3
+17% 18:84:3
+18% 19:86:3
+19% 19:88:3
+20% 20:90:3
+21% 20:92:3
+22% 21:94:3
+23% 21:96:3
+24% 22:98:3
+25% 22:100:3
+26% 23:102:3
+27% 23:104:3
+28% 23:107:3
+29% 23:109:3
+30% 23:111:3
+31% 23:113:2
+32% 23:115:2
+33% 23:117:2
+34% 23:120:1
+35% 23:122:1
+36% 22:124:1
+37% 21:126:1
+38% 20:128:0
+39% 19:131:0
+40% 17:133:0
+41% 14:135:1
+42% 11:138:6
+43% 14:140:13
+44% 19:142:19
+45% 24:143:25
+46% 29:145:29
+47% 33:147:33
+48% 37:149:37
+49% 41:151:41
+50% 45:153:45
+51% 49:155:49
+52% 52:157:52
+53% 56:158:56
+54% 59:160:59
+55% 62:162:62
+56% 66:164:66
+57% 69:166:69
+58% 72:168:72
+59% 75:170:75
+60% 79:172:79
+61% 82:173:82
+62% 85:175:85
+63% 88:177:88
+64% 91:179:91
+65% 94:181:95
+66% 97:183:98
+67% 100:185:101
+68% 103:187:104
+69% 106:189:107
+70% 109:191:110
+71% 112:193:114
+72% 115:195:117
+73% 118:197:120
+74% 121:199:123
+75% 124:200:126
+76% 127:202:129
+77% 130:204:133
+78% 133:206:136
+79% 136:208:139
+80% 139:211:142
+81% 142:213:146
+82% 145:215:149
+83% 148:217:152
+84% 151:219:155
+85% 154:221:159
+86% 157:223:162
+87% 161:225:165
+88% 164:227:168
+89% 167:229:172
+90% 170:231:175
+91% 173:233:178
+92% 176:236:182
+93% 179:238:185
+94% 182:240:188
+95% 185:242:192
+96% 189:244:195
+97% 192:247:199
+98% 195:249:202
+99% 198:251:205
+100% 201:254:209
diff --git a/lib/gis/colors/roygbiv b/lib/gis/colors/roygbiv
new file mode 100644
index 0000000..70fc239
--- /dev/null
+++ b/lib/gis/colors/roygbiv
@@ -0,0 +1,15 @@
+# VIBGYOR
+0%          154:0:156
+16.666667%  7:0:250
+20%         0:41:255
+33.333333%  0:255:255
+45%         0:196:69
+50%         13:179:0
+62.5%       213:242:0
+65%         243:255:0
+66.666667%  255:238:0
+80%         255:97:0
+83.333333%  255:70:0
+91.666667%  255:14:0
+95%         228:0:0
+100%        132:0:0
diff --git a/lib/gis/colors/soilmoisture b/lib/gis/colors/soilmoisture
new file mode 100644
index 0000000..cc523e8
--- /dev/null
+++ b/lib/gis/colors/soilmoisture
@@ -0,0 +1,16 @@
+0.00 0:0:0
+0.01 200:90:55
+0.05 211:107:39
+0.10 232:150:25
+0.15 243:189:7
+0.20 250:234:0
+0.25 184:245:0
+0.30 66:227:0
+0.35 7:207:36
+0.40 18:176:108
+0.45 31:151:146
+0.50 18:96:135
+0.55 7:39:123
+0.60 7:21:100
+0.80 30:30:200
+1.00 50:50:50
diff --git a/lib/gis/colors/viridis b/lib/gis/colors/viridis
new file mode 100644
index 0000000..e341917
--- /dev/null
+++ b/lib/gis/colors/viridis
@@ -0,0 +1,262 @@
+# perceptually uniform and sequential
+# contains blue, green and yellow
+# color table developed for Matplotlib (default in 2.0)
+# license of the original data: CC0
+# original authors: Nathaniel J. Smith, Stefan van der Walt, Eric Firing
+# created from cpt-city mpl viridis (r.cpt2grass -s)
+0.000% 68:1:84
+0.392% 68:2:86
+0.784% 69:4:87
+1.176% 69:5:89
+1.569% 70:7:90
+1.961% 70:8:92
+2.353% 70:10:93
+2.745% 70:11:94
+3.137% 71:13:96
+3.529% 71:14:97
+3.922% 71:16:99
+4.314% 71:17:100
+4.706% 71:19:101
+5.098% 72:20:103
+5.490% 72:22:104
+5.882% 72:23:105
+6.275% 72:24:106
+6.667% 72:26:108
+7.059% 72:27:109
+7.451% 72:28:110
+7.843% 72:29:111
+8.235% 72:31:112
+8.627% 72:32:113
+9.020% 72:33:115
+9.412% 72:35:116
+9.804% 72:36:117
+10.196% 72:37:118
+10.588% 72:38:119
+10.980% 72:40:120
+11.373% 72:41:121
+11.765% 71:42:122
+12.157% 71:44:122
+12.549% 71:45:123
+12.941% 71:46:124
+13.333% 71:47:125
+13.725% 70:48:126
+14.118% 70:50:126
+14.510% 70:51:127
+14.902% 70:52:128
+15.294% 69:53:129
+15.686% 69:55:129
+16.078% 69:56:130
+16.471% 68:57:131
+16.863% 68:58:131
+17.255% 68:59:132
+17.647% 67:61:132
+18.039% 67:62:133
+18.431% 66:63:133
+18.824% 66:64:134
+19.216% 66:65:134
+19.608% 65:66:135
+20.000% 65:68:135
+20.392% 64:69:136
+20.784% 64:70:136
+21.176% 63:71:136
+21.569% 63:72:137
+21.961% 62:73:137
+22.353% 62:74:137
+22.745% 62:76:138
+23.137% 61:77:138
+23.529% 61:78:138
+23.922% 60:79:138
+24.314% 60:80:139
+24.706% 59:81:139
+25.098% 59:82:139
+25.490% 58:83:139
+25.882% 58:84:140
+26.275% 57:85:140
+26.667% 57:86:140
+27.059% 56:88:140
+27.451% 56:89:140
+27.843% 55:90:140
+28.235% 55:91:141
+28.627% 54:92:141
+29.020% 54:93:141
+29.412% 53:94:141
+29.804% 53:95:141
+30.196% 52:96:141
+30.588% 52:97:141
+30.980% 51:98:141
+31.373% 51:99:141
+31.765% 50:100:142
+32.157% 50:101:142
+32.549% 49:102:142
+32.941% 49:103:142
+33.333% 49:104:142
+33.725% 48:105:142
+34.118% 48:106:142
+34.510% 47:107:142
+34.902% 47:108:142
+35.294% 46:109:142
+35.686% 46:110:142
+36.078% 46:111:142
+36.471% 45:112:142
+36.863% 45:113:142
+37.255% 44:113:142
+37.647% 44:114:142
+38.039% 44:115:142
+38.431% 43:116:142
+38.824% 43:117:142
+39.216% 42:118:142
+39.608% 42:119:142
+40.000% 42:120:142
+40.392% 41:121:142
+40.784% 41:122:142
+41.176% 41:123:142
+41.569% 40:124:142
+41.961% 40:125:142
+42.353% 39:126:142
+42.745% 39:127:142
+43.137% 39:128:142
+43.529% 38:129:142
+43.922% 38:130:142
+44.314% 38:130:142
+44.706% 37:131:142
+45.098% 37:132:142
+45.490% 37:133:142
+45.882% 36:134:142
+46.275% 36:135:142
+46.667% 35:136:142
+47.059% 35:137:142
+47.451% 35:138:141
+47.843% 34:139:141
+48.235% 34:140:141
+48.627% 34:141:141
+49.020% 33:142:141
+49.412% 33:143:141
+49.804% 33:144:141
+50.196% 33:145:140
+50.588% 32:146:140
+50.980% 32:146:140
+51.373% 32:147:140
+51.765% 31:148:140
+52.157% 31:149:139
+52.549% 31:150:139
+52.941% 31:151:139
+53.333% 31:152:139
+53.725% 31:153:138
+54.118% 31:154:138
+54.510% 30:155:138
+54.902% 30:156:137
+55.294% 30:157:137
+55.686% 31:158:137
+56.078% 31:159:136
+56.471% 31:160:136
+56.863% 31:161:136
+57.255% 31:161:135
+57.647% 31:162:135
+58.039% 32:163:134
+58.431% 32:164:134
+58.824% 33:165:133
+59.216% 33:166:133
+59.608% 34:167:133
+60.000% 34:168:132
+60.392% 35:169:131
+60.784% 36:170:131
+61.176% 37:171:130
+61.569% 37:172:130
+61.961% 38:173:129
+62.353% 39:173:129
+62.745% 40:174:128
+63.137% 41:175:127
+63.529% 42:176:127
+63.922% 44:177:126
+64.314% 45:178:125
+64.706% 46:179:124
+65.098% 47:180:124
+65.490% 49:181:123
+65.882% 50:182:122
+66.275% 52:182:121
+66.667% 53:183:121
+67.059% 55:184:120
+67.451% 56:185:119
+67.843% 58:186:118
+68.235% 59:187:117
+68.627% 61:188:116
+69.020% 63:188:115
+69.412% 64:189:114
+69.804% 66:190:113
+70.196% 68:191:112
+70.588% 70:192:111
+70.980% 72:193:110
+71.373% 74:193:109
+71.765% 76:194:108
+72.157% 78:195:107
+72.549% 80:196:106
+72.941% 82:197:105
+73.333% 84:197:104
+73.725% 86:198:103
+74.118% 88:199:101
+74.510% 90:200:100
+74.902% 92:200:99
+75.294% 94:201:98
+75.686% 96:202:96
+76.078% 99:203:95
+76.471% 101:203:94
+76.863% 103:204:92
+77.255% 105:205:91
+77.647% 108:205:90
+78.039% 110:206:88
+78.431% 112:207:87
+78.824% 115:208:86
+79.216% 117:208:84
+79.608% 119:209:83
+80.000% 122:209:81
+80.392% 124:210:80
+80.784% 127:211:78
+81.176% 129:211:77
+81.569% 132:212:75
+81.961% 134:213:73
+82.353% 137:213:72
+82.745% 139:214:70
+83.137% 142:214:69
+83.529% 144:215:67
+83.922% 147:215:65
+84.314% 149:216:64
+84.706% 152:216:62
+85.098% 155:217:60
+85.490% 157:217:59
+85.882% 160:218:57
+86.275% 162:218:55
+86.667% 165:219:54
+87.059% 168:219:52
+87.451% 170:220:50
+87.843% 173:220:48
+88.235% 176:221:47
+88.627% 178:221:45
+89.020% 181:222:43
+89.412% 184:222:41
+89.804% 186:222:40
+90.196% 189:223:38
+90.588% 192:223:37
+90.980% 194:223:35
+91.373% 197:224:33
+91.765% 200:224:32
+92.157% 202:225:31
+92.549% 205:225:29
+92.941% 208:225:28
+93.333% 210:226:27
+93.725% 213:226:26
+94.118% 216:226:25
+94.510% 218:227:25
+94.902% 221:227:24
+95.294% 223:227:24
+95.686% 226:228:24
+96.078% 229:228:25
+96.471% 231:228:25
+96.863% 234:229:26
+97.255% 236:229:27
+97.647% 239:229:28
+98.039% 241:229:29
+98.431% 244:230:30
+98.824% 246:230:32
+99.216% 248:230:33
+99.608% 251:231:35
+100.000% 253:231:37
diff --git a/lib/gis/colors/water b/lib/gis/colors/water
new file mode 100644
index 0000000..8564cf0
--- /dev/null
+++ b/lib/gis/colors/water
@@ -0,0 +1,2 @@
+0% 0:240:255
+100% 0:50:170
diff --git a/lib/gis/compress.c b/lib/gis/compress.c
new file mode 100644
index 0000000..4e74073
--- /dev/null
+++ b/lib/gis/compress.c
@@ -0,0 +1,375 @@
+/*
+ ****************************************************************************
+ *                     -- GRASS Development Team --
+ *
+ * MODULE:      GRASS gis library
+ * FILENAME:    compress.c
+ * AUTHOR(S):   Markus Metz
+ * PURPOSE:     To provide an interface for compressing and 
+ *              decompressing data using various methods.  Its primary 
+ *              use is in the storage and reading of GRASS rasters.
+ *
+ * DATE CREATED: Dec 17 2015
+ * COPYRIGHT:   (C) 2015 by the GRASS Development Team
+ *
+ *              This program is free software under the GNU General Public
+ *              License (version 2 or greater). Read the file COPYING that 
+ *              comes with GRASS for details.
+ *
+ *****************************************************************************/
+
+/********************************************************************
+ * Compression methods:                                             *
+ * 1 : RLE (generic Run-Length Encoding of single bytes)            *
+ * 2 : ZLIB's DEFLATE (good speed and compression)                  *
+ * 3 : LZ4 (fastest, low compression)                               *
+ * 4 : BZIP2 (slowest, high compression)                            *
+ *                                                                  *
+ * int                                                              *
+ * G_read_compressed (fd, rbytes, dst, nbytes, compression_type)    *
+ *     int fd, rbytes, nbytes;                                      *
+ *     unsigned char *dst;                                          *
+ * ---------------------------------------------------------------- *
+ * This is the basic function for reading a compressed chunk of a   *
+ * data file.  The file descriptor should be in the proper location *
+ * and the 'dst' array should have enough space for the data.       *
+ * 'nbytes' is the size of 'dst'.  The 'rbytes' parameter is the    *
+ * number of bytes to read (knowable from the offsets index). For   *
+ * best results, 'nbytes' should be the exact amount of space       *
+ * needed for the expansion.  Too large a value of nbytes may cause *
+ * more data to be expanded than is desired.                        *
+ * Returns: The number of bytes decompressed into dst, or an error. *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1  -- Error Reading or Decompressing data.               *
+ *        -2  -- Not enough space in dst.  You must make dst larger *
+ *               and then call the function again (remembering to   *
+ *               reset the file descriptor to it's proper location. *
+ *                                                                  *
+ * ================================================================ *
+ * int                                                              *
+ * G_write_compressed (fd, src, nbytes, compression_type)           *
+ *     int fd, nbytes;                                              *
+ *     unsigned char *src;                                          *
+ * ---------------------------------------------------------------- *
+ * This is the basic function for writing and compressing a data    *
+ * chunk to a file.  The file descriptor should be in the correct   *
+ * location prior to this call. The function will compress 'nbytes' *
+ * of 'src' and write it to the file 'fd'.  Returns the number of   *
+ * bytes written or an error code:                                  *
+ *                                                                  *
+ * Errors include:                                                  *
+ *        -1 -- Compression Failed.                                 *
+ *        -2 -- Unable to write to file.                            *
+ *                                                                  *
+ * ================================================================ *
+ * int                                                              *
+ * G_write_uncompressed (fd, src, nbytes)                           *
+ *     int fd, nbytes;                                              *
+ *     unsigned char *src;                                          *
+ * ---------------------------------------------------------------- *
+ * Works similar to G_write_compressed() except no attempt at       *
+ * compression is made.  This is quicker, but may result in larger  *
+ * files.                                                           *
+ * Returns the number of bytes written, or -1 for an error. It will *
+ * return an error if it fails to write nbytes. Otherwise, the      *
+ * return value will always be nbytes + 1 (for compression flag).   *
+ *                                                                  *
+ ********************************************************************
+ */
+
+#include <grass/config.h>
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+#include "compress.h"
+
+#define G_COMPRESSED_NO (unsigned char)'0'
+#define G_COMPRESSED_YES (unsigned char)'1'
+
+/* get compressor number
+ * return -1 on error
+ * return number >= 0 for known processor */
+int G_compressor_number(char *name)
+{
+    int i;
+    
+    if (!name)
+	return -1;
+
+    for (i = 0; compressor[i].name ; i++) {
+	if (G_strcasecmp(name, compressor[i].name) == 0)
+	    return i;
+    }
+
+    return -1;
+}
+
+/* get compressor name
+ * return NULL on error
+ * return string (name) of known processor */
+char *G_compressor_name(int number)
+{
+    if (number < 0 || number >= n_compressors)
+	return NULL;
+
+    return compressor[number].name;
+}
+
+/* check compressor number
+ * return -1 on error
+ * return 0 known but not available
+ * return 1 known and available */
+int G_check_compressor(int number)
+{
+    if (number < 0 || number >= n_compressors) {
+	G_warning(_("Request for unsupported compressor"));
+	return -1;
+    }
+
+    return compressor[number].available;
+}
+
+int
+G_no_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if src is empty */
+    if (src_sz <= 0)
+	return 0;
+
+    /* dst too small */
+    if (dst_sz < src_sz)
+	return -2;
+
+    /* Copy the data from src to dst */
+    memcpy(dst, src, src_sz);
+
+    return src_sz;
+}
+
+int
+G_no_expand(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz)
+{
+    /* Catch errors early */
+    if (src == NULL || dst == NULL)
+	return -1;
+
+    /* Don't do anything if src is empty */
+    if (src_sz <= 0)
+	return 0;
+
+    /* dst too small */
+    if (dst_sz < src_sz)
+	return -2;
+
+    /* Copy the data from src to dst */
+    memcpy(dst, src, src_sz);
+
+    return src_sz;
+}
+
+/* G_*_compress() returns
+ * > 0: number of bytes in dst
+ * 0: nothing done
+ * -1: error
+ * -2: dst too small
+ */
+int
+G_compress(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz, int number)
+{
+    if (number < 0 || number >= n_compressors) {
+	G_fatal_error(_("Request for unsupported compressor"));
+	return -1;
+    }
+
+    return compressor[number].compress(src, src_sz, dst, dst_sz);
+}
+
+/* G_*_expand() returns
+ * > 0: number of bytes in dst
+ * -1: error
+ */
+int
+G_expand(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz, int number)
+{
+    if (number < 0 || number >= n_compressors) {
+	G_fatal_error(_("Request for unsupported compressor"));
+	return -1;
+    }
+
+    return compressor[number].expand(src, src_sz, dst, dst_sz);
+}
+
+int G_read_compressed(int fd, int rbytes, unsigned char *dst, int nbytes,
+                      int compressor)
+{
+    int bsize, nread, err;
+    unsigned char *b;
+
+    if (dst == NULL || nbytes < 0)
+	return -2;
+
+    bsize = rbytes;
+
+    /* Our temporary input buffer for read */
+    if (NULL == (b = (unsigned char *)
+		 G_calloc(bsize, sizeof(unsigned char))))
+	return -1;
+
+    /* Read from the file until we get our bsize or an error */
+    nread = 0;
+    do {
+	err = read(fd, b + nread, bsize - nread);
+	if (err >= 0)
+	    nread += err;
+    } while (err > 0 && nread < bsize);
+
+    /* If the bsize if less than rbytes and we didn't get an error.. */
+    if (nread < rbytes && err > 0) {
+	G_free(b);
+	return -1;
+    }
+
+    /* Test if row is compressed */
+    if (b[0] == G_COMPRESSED_NO) {
+	/* Then just copy it to dst */
+	for (err = 0; err < nread - 1 && err < nbytes; err++)
+	    dst[err] = b[err + 1];
+
+	G_free(b);
+	return (nread - 1);
+    }
+    else if (b[0] != G_COMPRESSED_YES) {
+	/* We're not at the start of a row */
+	G_free(b);
+	return -1;
+    }
+    /* Okay it's a compressed row */
+
+    /* Just call G_expand() with the buffer we read,
+     * Account for first byte being a flag
+     */
+    err = G_expand(b + 1, bsize - 1, dst, nbytes, compressor);
+
+    /* We're done with b */
+    G_free(b);
+
+    /* Return whatever G_expand() returned */
+    return err;
+
+}				/* G_read_compressed() */
+
+int G_write_compressed(int fd, unsigned char *src, int nbytes,
+                       int compressor)
+{
+    int dst_sz, nwritten, err;
+    unsigned char *dst, compressed;
+
+    /* Catch errors */
+    if (src == NULL || nbytes < 0)
+	return -1;
+
+    dst_sz = nbytes;
+    if (NULL == (dst = (unsigned char *)
+		 G_calloc(dst_sz, sizeof(unsigned char))))
+	return -1;
+
+    /* Now just call G_compress() */
+    err = G_compress(src, nbytes, dst, dst_sz, compressor);
+
+    /* If compression succeeded write compressed row,
+     * otherwise write uncompressed row. Compression will fail
+     * if dst is too small (i.e. compressed data is larger)
+     */
+    if (err > 0 && err <= dst_sz) {
+	dst_sz = err;
+	/* Write the compression flag */
+	compressed = G_COMPRESSED_YES;
+	if (write(fd, &compressed, 1) != 1) {
+	    G_free(dst);
+	    return -1;
+	}
+	nwritten = 0;
+	do {
+	    err = write(fd, dst + nwritten, dst_sz - nwritten);
+	    if (err >= 0)
+		nwritten += err;
+	} while (err > 0 && nwritten < dst_sz);
+	/* Account for extra byte */
+	nwritten++;
+    }
+    else {
+	/* Write compression flag */
+	compressed = G_COMPRESSED_NO;
+	if (write(fd, &compressed, 1) != 1) {
+	    G_free(dst);
+	    return -1;
+	}
+	nwritten = 0;
+	do {
+	    err = write(fd, src + nwritten, nbytes - nwritten);
+	    if (err >= 0)
+		nwritten += err;
+	} while (err > 0 && nwritten < nbytes);
+	/* Account for extra byte */
+	nwritten++;
+    }				/* if (err > 0) */
+
+    /* Done with the dst buffer */
+    G_free(dst);
+
+    /* If we didn't write all the data return an error */
+    if (err < 0)
+	return -2;
+
+    return nwritten;
+}				/* G_write_compressed() */
+
+int G_write_uncompressed(int fd, const unsigned char *src, int nbytes)
+{
+    int err, nwritten;
+    unsigned char compressed;
+
+    /* Catch errors */
+    if (src == NULL || nbytes < 0)
+	return -1;
+
+    /* Write the compression flag */
+    compressed = G_COMPRESSED_NO;
+    if (write(fd, &compressed, 1) != 1)
+	return -1;
+
+    /* Now write the data */
+    nwritten = 0;
+    do {
+	err = write(fd, src + nwritten, nbytes - nwritten);
+	if (err > 0)
+	    nwritten += err;
+    } while (err > 0 && nwritten < nbytes);
+
+    if (err < 0 || nwritten != nbytes)
+	return -1;
+
+    /* Account for extra compressed flag */
+    nwritten++;
+
+    /* That's all */
+    return nwritten;
+
+}				/* G_write_uncompressed() */
+
+
+/* vim: set softtabstop=4 shiftwidth=4 expandtab: */
diff --git a/lib/gis/compress.h b/lib/gis/compress.h
new file mode 100644
index 0000000..d74bbf7
--- /dev/null
+++ b/lib/gis/compress.h
@@ -0,0 +1,53 @@
+#include <grass/config.h>
+#include <grass/gis.h>
+
+/* compressors:
+ * 0: no compression
+ * 1: RLE, unit is one byte
+ * 2: ZLIB's DEFLATE (default)
+ * 3: LZ4, fastest but lowest compression ratio
+ * 4: BZIP2: slowest but highest compression ratio
+ */
+
+/* adding a new compressor:
+ * add the corresponding functions G_*compress() and G_*_expand()
+ * if needed, add checks to configure.in and include/config.in
+ * modify compress.h
+ * modify G_compress(), G_expand()
+ */
+
+typedef int compress_fn(unsigned char *src, int src_sz, unsigned char *dst,
+		int dst_sz);
+typedef int expand_fn(unsigned char *src, int src_sz, unsigned char *dst,
+	      int dst_sz);
+
+struct compressor_list
+{
+    int available;
+    compress_fn *compress;
+    expand_fn *expand;
+    char *name;
+};
+
+/* DO NOT CHANGE the order
+ * 0: None
+ * 1: RLE
+ * 2: ZLIB
+ * 3: LZ4
+ * 4: BZIP2 */
+ 
+static int n_compressors = 5; 
+
+struct compressor_list compressor[] = {
+    {1, G_no_compress, G_no_expand, "NONE"},
+    {1, G_rle_compress, G_rle_expand, "RLE"},
+    {1, G_zlib_compress, G_zlib_expand, "ZLIB"},
+    {1, G_lz4_compress, G_lz4_expand, "LZ4"},
+#ifdef HAVE_BZLIB_H
+    {1, G_bz2_compress, G_bz2_expand, "BZIP2"},
+#else
+    {0, G_bz2_compress, G_bz2_expand, "BZIP2"},
+#endif
+    {0, NULL, NULL, NULL}
+};
+
diff --git a/lib/gis/ellipse.table.solar.system b/lib/gis/ellipse.table.solar.system
index d398116..5dcd2c3 100644
--- a/lib/gis/ellipse.table.solar.system
+++ b/lib/gis/ellipse.table.solar.system
@@ -142,3 +142,5 @@ neptune    "Planet Neptune"               a=24764000.0 b=24341000.0
 Charon     "Pluto's satellite Charon"     a=593000.0 b=593000.0
 # Planet Pluto, IAU2000 definition
 pluto      "Planet Pluto"                 a=1195000.0 b=1195000.0
+
+
diff --git a/lib/gis/error.c b/lib/gis/error.c
index 94e184a..6b8a6e7 100644
--- a/lib/gis/error.c
+++ b/lib/gis/error.c
@@ -22,7 +22,7 @@
 #include <grass/glocale.h>
 #include <grass/gis.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 /*!
  * \def MSG
diff --git a/lib/gis/file_name.c b/lib/gis/file_name.c
index 6adfbd7..06be2e0 100644
--- a/lib/gis/file_name.c
+++ b/lib/gis/file_name.c
@@ -3,28 +3,33 @@
 
    \brief GIS library - Determine GRASS data base file name
 
-   (C) 2001-2008, 2013 by the GRASS Development Team
+   (C) 2001-2015 by the GRASS Development Team
 
    This program is free software under the GNU General Public License
-   (>=v2).  Read the file COPYING that comes with GRASS for details.
+   (>=v2). Read the file COPYING that comes with GRASS for details.
 
    \author Original author CERL
  */
 
 #include <string.h>
+#include <stdlib.h>
 #include <grass/gis.h>
 
 #include "gis_local_proto.h"
 
+static char *file_name(char *, const char *, const char *,
+                       const char *, const char *, const char *);
+static void append_char(char*, char);
+
 /*!
   \brief Builds full path names to GIS data files
 
-  If name is of the form "nnn at ppp" then path is set as if name had
-  been nnn and mapset had been ppp (mapset parameter itself is ignored
-  in this case).
+  If <i>name</i> is of the form "nnn at ppp" then path is set as if name
+  had been "nnn" and mapset had been "ppp" (mapset parameter itself is
+  ignored in this case).
   
   \param[out] path buffer to hold resultant full path to file
-  \param element database element (eg, "cell", "cellhd", etc)
+  \param element database element (eg, "cell", "cellhd", "vector", etc)
   \param name name of file to build path to (fully qualified names allowed)
   \param mapset mapset name
 
@@ -33,85 +38,124 @@
 char *G_file_name(char *path,
 		   const char *element, const char *name, const char *mapset)
 {
-    char xname[GNAME_MAX];
-    char xmapset[GMAPSET_MAX];
-    const char *pname = name;
-    char *location = G__location_path();
-
-    /*
-     * if a name is given, build a file name
-     * must split the name into name, mapset if it is
-     * in the name at mapset format
-     */
-    if (name && *name && G_name_is_fully_qualified(name, xname, xmapset)) {
-	pname = xname;
-	sprintf(path, "%s/%s", location, xmapset);
-    }
-    else if (mapset && *mapset)
-	sprintf(path, "%s/%s", location, mapset);
-    else
-	sprintf(path, "%s/%s", location, G_mapset());
-
-    G_free(location);
-
-    if (!element && !pname)
-        return path;
-    
-    if (element && *element) {
-	strcat(path, "/");
-	strcat(path, element);
-    }
+    return file_name(path, NULL, element, name, mapset, NULL);
+}
 
-    if (pname && *pname) {
-	strcat(path, "/");
-	strcat(path, pname);
-    }
+/*!
+  \brief Builds full path names to GIS misc data files
 
-    G_debug(2, "G_file_name(): path = %s", path);
-    
-    return path;
-}
+  \param[out] path buffer to hold resultant full path to file
+  \param dir misc directory
+  \param element database element (eg, "cell", "cellhd", "vector", etc)
+  \param name name of file to build path to (fully qualified names allowed)
+  \param mapset mapset name
 
+  \return pointer to <i>path</i> buffer
+*/
 char *G_file_name_misc(char *path,
 			const char *dir,
 			const char *element,
 			const char *name, const char *mapset)
 {
-    char xname[GNAME_MAX];
-    char xmapset[GMAPSET_MAX];
-    const char *pname = name;
-    char *location = G__location_path();
-
-    /*
-     * if a name is given, build a file name
-     * must split the name into name, mapset if it is
-     * in the name at mapset format
-     */
-    if (name && *name && G_name_is_fully_qualified(name, xname, xmapset)) {
-	pname = xname;
-	sprintf(path, "%s/%s", location, xmapset);
-    }
-    else if (mapset && *mapset)
-	sprintf(path, "%s/%s", location, mapset);
-    else
-	sprintf(path, "%s/%s", location, G_mapset());
+    return file_name(path, dir, element, name, mapset, NULL);
+}
 
-    G_free(location);
+/*!
+  \brief Builds full path names to GIS data files in temporary directory (for internal use only)
 
-    if (dir && *dir) {
-	strcat(path, "/");
-	strcat(path, dir);
+  By default temporary directory is located
+  $LOCATION/$MAPSET/.tmp/$HOSTNAME. If GRASS_VECTOR_TMPDIR_MAPSET is
+  set to "0", the temporary directory is located in TMPDIR
+  (environmental variable defined by the user or GRASS initialization
+  script if not given). Note that GRASS_VECTOR_TMPDIR_MAPSET variable
+  is currently used only by vector library.
+
+  \param[out] path buffer to hold resultant full path to file
+  \param element database element (eg, "cell", "cellhd", "vector", etc)
+  \param name name of file to build path to (fully qualified names allowed)
+  \param mapset mapset name
+
+  \return pointer to <i>path</i> buffer
+*/
+char *G_file_name_tmp(char *path,
+                      const char *element,
+                      const char *name, const char *mapset)
+{
+    const char *env, *tmp_path;
+
+    tmp_path = NULL;
+    env = getenv("GRASS_VECTOR_TMPDIR_MAPSET");
+    if (env && strcmp(env, "0") == 0) {
+        tmp_path = getenv("TMPDIR");
     }
+    
+    return file_name(path, NULL, element, name, mapset, tmp_path);
+}
 
-    if (pname && *pname) {
-	strcat(path, "/");
-	strcat(path, pname);
+char *file_name(char *path,
+                const char *dir, const char *element, const char *name,
+                const char *mapset, const char *base)
+{
+    const char *pname = name;
+    
+    if (base && *base) {
+        sprintf(path, "%s", base);
+    }
+    else {
+        char xname[GNAME_MAX];
+        char xmapset[GMAPSET_MAX];
+        char *location = G__location_path();
+        
+        /*
+         * if a name is given, build a file name
+         * must split the name into name, mapset if it is
+         * in the name at mapset format
+         */
+        if (name && *name && G_name_is_fully_qualified(name, xname, xmapset)) {
+            pname = xname;
+            sprintf(path, "%s%c%s", location, HOST_DIRSEP, xmapset);
+        }
+        else if (mapset && *mapset)
+            sprintf(path, "%s%c%s", location, HOST_DIRSEP, mapset);
+        else
+            sprintf(path, "%s%c%s", location, HOST_DIRSEP, G_mapset());
+        G_free(location);
     }
 
-    if (element && *element) {
-	strcat(path, "/");
-	strcat(path, element);
+    if (dir && *dir) { /* misc element */
+	append_char(path, HOST_DIRSEP);
+	strcat(path, dir);
+
+        if (pname && *pname) {
+            append_char(path, HOST_DIRSEP);
+            strcat(path, pname);
+        }
+
+        if (element && *element) {
+            append_char(path, HOST_DIRSEP);
+            strcat(path, element);
+        }
+    }
+    else {
+        if (element && *element) {
+            append_char(path, HOST_DIRSEP);
+            strcat(path, element);
+        }
+        
+        if (pname && *pname) {
+            append_char(path, HOST_DIRSEP);
+            strcat(path, pname);
+        }
     }
 
+    G_debug(2, "G_file_name(): path = %s", path);
+    
     return path;
 }
+
+void append_char(char* s, char c)
+{
+        int len = strlen(s);
+        s[len] = c;
+        s[len+1] = '\0';
+}
diff --git a/lib/gis/flate.c b/lib/gis/flate.c
deleted file mode 100644
index 71c4859..0000000
--- a/lib/gis/flate.c
+++ /dev/null
@@ -1,441 +0,0 @@
-/*
- ****************************************************************************
- *                     -- GRASS Development Team --
- *
- * MODULE:      GRASS gis library
- * FILENAME:    flate.c
- * AUTHOR(S):   Eric G. Miller <egm2 at jps.net>
- * PURPOSE:     To provide an interface to libz for compressing and 
- *              decompressing data using DEFLATE.  It's primary use is in
- *              the storage and reading of GRASS floating point rasters.
- *              It replaces the patented LZW compression interface.
- *
- * ALGORITHM:   http://www.gzip.org/zlib/feldspar.html
- * DATE CREATED: Nov 19 2000
- * COPYRIGHT:   (C) 2000 by the GRASS Development Team
- *
- *              This program is free software under the GNU General Public
- *              License (version 2 or greater). Read the file COPYING that 
- *              comes with GRASS for details.
- *
- *****************************************************************************/
-
-/********************************************************************
- * int                                                              *
- * G_zlib_read (fd, rbytes, dst, nbytes)                            *
- *     int fd, rbytes, nbytes;                                      *
- *     unsigned char *dst;                                          *
- * ---------------------------------------------------------------- *
- * This is the basic function for reading a compressed chunk of a   *
- * data file.  The file descriptor should be in the proper location *
- * and the 'dst' array should have enough space for the data.       *
- * 'nbytes' is the size of 'dst'.  The 'rbytes' parameter is the    *
- * number of bytes to read (knowable from the offsets index). For   *
- * best results, 'nbytes' should be the exact amount of space       *
- * needed for the expansion.  Too large a value of nbytes may cause *
- * more data to be expanded than is desired.                        *
- * Returns: The number of bytes decompressed into dst, or an error. *
- *                                                                  *
- * Errors include:                                                  *
- *        -1  -- Error Reading or Decompressing data.               *
- *        -2  -- Not enough space in dst.  You must make dst larger *
- *               and then call the function again (remembering to   *
- *               reset the file descriptor to it's proper location. *
- *                                                                  *
- * ================================================================ *
- * int                                                              *
- * G_zlib_write (fd, src, nbytes)                                   *
- *     int fd, nbytes;                                              *
- *     unsigned char *src;                                          *
- * ---------------------------------------------------------------- *
- * This is the basic function for writing and compressing a data    *
- * chunk to a file.  The file descriptor should be in the correct   *
- * location prior to this call. The function will compress 'nbytes' *
- * of 'src' and write it to the file 'fd'.  Returns the number of   *
- * bytes written or an error code:                                  *
- *                                                                  *
- * Errors include:                                                  *
- *        -1 -- Compression Failed.                                 *
- *        -2 -- Unable to write to file.                            *
- *                                                                  *
- * ================================================================ *
- * int                                                              *
- * G_zlib_write_noCompress (fd, src, nbytes)                        *
- *     int fd, nbytes;                                              *
- *     unsigned char *src;                                          *
- * ---------------------------------------------------------------- *
- * Works similar to G_zlib_write() except no attempt at compression *
- * is made.  This is quicker, but may result in larger files.       *
- * Returns the number of bytes written, or -1 for an error. It will *
- * return an error if it fails to write nbytes. Otherwise, the      *
- * return value will always be nbytes + 1 (for compression flag).   *
- *                                                                  *
- * ================================================================ *
- * int                                                              *
- * G_zlib_compress (src, srz_sz, dst, dst_sz)                       *
- *     int src_sz, dst_sz;                                          *
- *     unsigned char *src, *dst;                                    *
- * ---------------------------------------------------------------- *
- * This function is a wrapper around the zlib deflate() function.   *
- * It uses an all or nothing call to deflate().  If you need a      *
- * continuous compression scheme, you'll have to code your own.     *
- * In order to do a single pass compression, the input src must be  *
- * copied to a buffer 1% + 12 bytes larger than the data.  This may *
- * cause performance degradation.                                   *
- *                                                                  *
- * The function either returns the number of bytes of compressed    *
- * data in dst, or an error code.                                   *
- *                                                                  *
- * Errors include:                                                  *
- *        -1 -- Compression failed.                                 *
- *        -2 -- dst is too small.                                   *
- *                                                                  *
- * ================================================================ *
- * int                                                              *
- * G_zlib_expand (src, src_sz, dst, dst_sz)                         *
- *     int src_sz, dst_sz;                                          *
- *     unsigned char *src, *dst;                                    *
- * ---------------------------------------------------------------- *
- * This function is a wrapper around the zlib inflate() function.   *
- * It uses a single pass call to inflate().  If you need a contin-  *
- * uous expansion scheme, you'll have to code your own.             *
- *                                                                  *
- * The function returns the number of bytes expanded into 'dst' or  *
- * and error code.                                                  *
- *                                                                  *
- * Errors include:                                                  *
- *        -1 -- Expansion failed.                                   *
- *                                                                  *
- ********************************************************************
- */
-
-#include <grass/config.h>
-
-#ifndef HAVE_ZLIB_H
-
-#error "GRASS requires libz to compile"
-
-#else
-
-#include <zlib.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <grass/gis.h>
-
-#include "G.h"
-
-#define G_ZLIB_COMPRESSED_NO (unsigned char)'0'
-#define G_ZLIB_COMPRESSED_YES (unsigned char)'1'
-
-static void _init_zstruct(z_stream * z)
-{
-    /* The types are defined in zlib.h, we set to NULL so zlib uses
-     * its default functions.
-     */
-    z->zalloc = (alloc_func) 0;
-    z->zfree = (free_func) 0;
-    z->opaque = (voidpf) 0;
-}
-
-int G_zlib_read(int fd, int rbytes, unsigned char *dst, int nbytes)
-{
-    int bsize, nread, err;
-    unsigned char *b;
-
-    if (dst == NULL || nbytes < 0)
-	return -2;
-
-    bsize = rbytes;
-
-    /* Our temporary input buffer for read */
-    if (NULL == (b = (unsigned char *)
-		 G_calloc(bsize, sizeof(unsigned char))))
-	return -1;
-
-    /* Read from the file until we get our bsize or an error */
-    nread = 0;
-    do {
-	err = read(fd, b + nread, bsize - nread);
-	if (err >= 0)
-	    nread += err;
-    } while (err > 0 && nread < bsize);
-
-    /* If the bsize if less than rbytes and we didn't get an error.. */
-    if (nread < rbytes && err > 0) {
-	G_free(b);
-	return -1;
-    }
-
-    /* Test if row is compressed */
-    if (b[0] == G_ZLIB_COMPRESSED_NO) {
-	/* Then just copy it to dst */
-	for (err = 0; err < nread - 1 && err < nbytes; err++)
-	    dst[err] = b[err + 1];
-
-	G_free(b);
-	return (nread - 1);
-    }
-    else if (b[0] != G_ZLIB_COMPRESSED_YES) {
-	/* We're not at the start of a row */
-	G_free(b);
-	return -1;
-    }
-    /* Okay it's a compressed row */
-
-    /* Just call G_zlib_expand() with the buffer we read,
-     * Account for first byte being a flag
-     */
-    err = G_zlib_expand(b + 1, bsize - 1, dst, nbytes);
-
-    /* We're done with b */
-    G_free(b);
-
-    /* Return whatever G_zlib_expand() returned */
-    return err;
-
-}				/* G_zlib_read() */
-
-
-int G_zlib_write(int fd, const unsigned char *src, int nbytes)
-{
-    int dst_sz, nwritten, err;
-    unsigned char *dst, compressed;
-
-    /* Catch errors */
-    if (src == NULL || nbytes < 0)
-	return -1;
-
-    dst_sz = nbytes;
-    if (NULL == (dst = (unsigned char *)
-		 G_calloc(dst_sz, sizeof(unsigned char))))
-	return -1;
-
-    /* Now just call G_zlib_compress() */
-    err = G_zlib_compress(src, nbytes, dst, dst_sz);
-
-    /* If compression succeeded write compressed row,
-     * otherwise write uncompressed row. Compression will fail
-     * if dst is too small (i.e. compressed data is larger)
-     */
-    if (err > 0 && err <= dst_sz) {
-	dst_sz = err;
-	/* Write the compression flag */
-	compressed = G_ZLIB_COMPRESSED_YES;
-	if (write(fd, &compressed, 1) != 1) {
-	    G_free(dst);
-	    return -1;
-	}
-	nwritten = 0;
-	do {
-	    err = write(fd, dst + nwritten, dst_sz - nwritten);
-	    if (err >= 0)
-		nwritten += err;
-	} while (err > 0 && nwritten < dst_sz);
-	/* Account for extra byte */
-	nwritten++;
-    }
-    else {
-	/* Write compression flag */
-	compressed = G_ZLIB_COMPRESSED_NO;
-	if (write(fd, &compressed, 1) != 1) {
-	    G_free(dst);
-	    return -1;
-	}
-	nwritten = 0;
-	do {
-	    err = write(fd, src + nwritten, nbytes - nwritten);
-	    if (err >= 0)
-		nwritten += err;
-	} while (err > 0 && nwritten < nbytes);
-	/* Account for extra byte */
-	nwritten++;
-    }				/* if (err > 0) */
-
-    /* Done with the dst buffer */
-    G_free(dst);
-
-    /* If we didn't write all the data return an error */
-    if (err < 0)
-	return -2;
-
-    return nwritten;
-}				/* G_zlib_write() */
-
-
-int G_zlib_write_noCompress(int fd, const unsigned char *src, int nbytes)
-{
-    int err, nwritten;
-    unsigned char compressed;
-
-    /* Catch errors */
-    if (src == NULL || nbytes < 0)
-	return -1;
-
-    /* Write the compression flag */
-    compressed = G_ZLIB_COMPRESSED_NO;
-    if (write(fd, &compressed, 1) != 1)
-	return -1;
-
-    /* Now write the data */
-    nwritten = 0;
-    do {
-	err = write(fd, src + nwritten, nbytes - nwritten);
-	if (err > 0)
-	    nwritten += err;
-    } while (err > 0 && nwritten < nbytes);
-
-    if (err < 0 || nwritten != nbytes)
-	return -1;
-
-    /* Account for extra compressed flag */
-    nwritten++;
-
-    /* That's all */
-    return nwritten;
-
-}				/* G_zlib_write_noCompress() */
-
-
-int
-G_zlib_compress(const unsigned char *src, int src_sz, unsigned char *dst,
-		int dst_sz)
-{
-    int err, nbytes, buf_sz;
-    unsigned char *buf;
-    z_stream c_stream;
-
-    /* Catch errors early */
-    if (src == NULL || dst == NULL)
-	return -1;
-
-    /* Don't do anything if either of these are true */
-    if (src_sz <= 0 || dst_sz <= 0)
-	return 0;
-
-    /* Output buffer has to be 1% + 12 bytes bigger for single pass deflate */
-    buf_sz = (int)((double)dst_sz * 1.01 + (double)12);
-    if (NULL == (buf = (unsigned char *)
-		 G_calloc(buf_sz, sizeof(unsigned char))))
-	return -1;
-
-    /* Set-up for default zlib memory handling */
-    _init_zstruct(&c_stream);
-
-    /* Set-up the stream */
-    c_stream.avail_in = src_sz;
-    c_stream.next_in = (unsigned char *) src;
-    c_stream.avail_out = buf_sz;
-    c_stream.next_out = buf;
-
-    /* Initialize */
-    /* Valid zlib compression levels -1 - 9 */
-    /* zlib default: Z_DEFAULT_COMPRESSION = -1, equivalent to 6 
-     * as used here, 1 gives the best compromise between speed and compression */
-    err = deflateInit(&c_stream,
-                      (G__.compression_level < -1 || G__.compression_level > 9) 
-		      ? 1 : G__.compression_level);
-
-    /* If there was an error initializing, return -1 */
-    if (err != Z_OK) {
-	G_free(buf);
-	return -1;
-    }
-
-    /* Do single pass compression */
-    err = deflate(&c_stream, Z_FINISH);
-    if (err != Z_STREAM_END) {
-	switch (err) {
-	case Z_OK:		/* Destination too small */
-	    G_free(buf);
-	    deflateEnd(&c_stream);
-	    return -2;
-	    break;
-	default:		/* Give other error */
-	    G_free(buf);
-	    deflateEnd(&c_stream);
-	    return -1;
-	    break;
-	}
-    }
-
-    /* avail_out is updated to bytes remaining in buf, so bytes of compressed
-     * data is the original size minus that
-     */
-    nbytes = buf_sz - c_stream.avail_out;
-    if (nbytes > dst_sz) {	/* Not enough room to copy output */
-	G_free(buf);
-	deflateEnd(&c_stream);
-	return -2;
-    }
-    /* Copy the data from buf to dst */
-    for (err = 0; err < nbytes; err++)
-	dst[err] = buf[err];
-
-    G_free(buf);
-    deflateEnd(&c_stream);
-
-    return nbytes;
-}				/* G_zlib_compress() */
-
-int
-G_zlib_expand(const unsigned char *src, int src_sz, unsigned char *dst,
-	      int dst_sz)
-{
-    int err, nbytes;
-    z_stream c_stream;
-
-    /* Catch error condition */
-    if (src == NULL || dst == NULL)
-	return -2;
-
-    /* Don't do anything if either of these are true */
-    if (src_sz <= 0 || dst_sz <= 0)
-	return 0;
-
-    /* Set-up default zlib memory handling */
-    _init_zstruct(&c_stream);
-
-    /* Set-up I/O streams */
-    c_stream.avail_in = src_sz;
-    c_stream.next_in = (unsigned char *)src;
-    c_stream.avail_out = dst_sz;
-    c_stream.next_out = dst;
-
-    /* Call zlib initilization function */
-    err = inflateInit(&c_stream);
-
-    /* If not Z_OK return error -1 */
-    if (err != Z_OK)
-	return -1;
-
-    /* Do single pass inflate */
-    err = inflate(&c_stream, Z_FINISH);
-
-    /* Number of bytes inflated to output stream is
-     * original bytes available minus what avail_out now says
-     */
-    nbytes = dst_sz - c_stream.avail_out;
-
-    /* Z_STREAM_END means all input was consumed, 
-     * Z_OK means only some was processed (not enough room in dst)
-     */
-    if (!(err == Z_STREAM_END || err == Z_OK)) {
-	if (!(err == Z_BUF_ERROR && nbytes == dst_sz)) {
-	    inflateEnd(&c_stream);
-	    return -1;
-	}
-	/* Else, there was extra input, but requested output size was
-	 * decompressed successfully.
-	 */
-    }
-
-    inflateEnd(&c_stream);
-
-    return nbytes;
-}				/* G_zlib_expand() */
-
-#endif /* HAVE_ZLIB_H */
-
-
-/* vim: set softtabstop=4 shiftwidth=4 expandtab: */
diff --git a/lib/gis/get_window.c b/lib/gis/get_window.c
index 92fe429..fa73941 100644
--- a/lib/gis/get_window.c
+++ b/lib/gis/get_window.c
@@ -17,7 +17,7 @@
 #include <grass/glocale.h>
 
 #include "G.h"
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 static struct state {
     int initialized;
diff --git a/lib/gis/gis_local_proto.h b/lib/gis/gis_local_proto.h
index 293185f..99eb58e 100644
--- a/lib/gis/gis_local_proto.h
+++ b/lib/gis/gis_local_proto.h
@@ -2,13 +2,34 @@
 #define __GIS_LOCAL_PROTO_H__
 
 /* subroutines used only by GIS Library */
-/* TODO: move other G__*() subroutines here */
+
+/* env.c */
+void G__read_env(void);
+void G__write_env(void);
+
+/* gisinit.c */
+void G__check_gisinit(void);
+
+/* handler.c */
+void G__call_error_handlers(void);
+
+/* home.c */
+const char *G__home(void);
 
 /* location.c */
 char *G__location_path(void);
 
+/* mach_name.c */
+const char *G__machine_name(void);
+
 /* mapset.c */
 const char *G__mapset(void);
 char *G__mapset_path(void);
 
+/* mapset_nme.c */
+void G__get_list_of_mapsets(void);
+
+/* timestamp.c */
+int G__read_timestamp(FILE *, struct TimeStamp *);
+
 #endif
diff --git a/lib/gis/gisinit.c b/lib/gis/gisinit.c
index ec41eac..a3340b8 100644
--- a/lib/gis/gisinit.c
+++ b/lib/gis/gisinit.c
@@ -24,7 +24,7 @@
 #include <grass/glocale.h>
 
 #include "G.h"
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 struct G__ G__;
 
@@ -119,7 +119,9 @@ static int gisinit(void)
     G__.little_endian = G_is_little_endian();
 
     zlib = getenv("GRASS_ZLIB_LEVEL");
-    G__.compression_level = (zlib && *zlib && isdigit(*zlib)) ? atoi(zlib) : -2;
+    G__.compression_level = (zlib && *zlib && isdigit(*zlib)) ? atoi(zlib) : 1;
+    if (G__.compression_level < -1 || G__.compression_level > 9)
+	G__.compression_level = 1;
 
     initialized = 1;
 
diff --git a/lib/gis/gislib.dox b/lib/gis/gislib.dox
index 31ce1b9..3f2220a 100644
--- a/lib/gis/gislib.dox
+++ b/lib/gis/gislib.dox
@@ -284,6 +284,48 @@ writes the new value to the user's GRASS environment file.
 
 \section dbaseaccess Fundamental Database Access Routines
 
+
+In general, a user can only access data in the current location. For most
+modules, it's meaningless to access data from a different location as
+the projection will be wrong. A handful of modules (e.g. r.proj,
+v.proj) support accessing data from a different location, and in such
+cases there's no need for the user to own the source mapset, or even
+to own any mapset in the source location.
+
+Since r54264, it is possible to bypass the ownership check by setting
+GRASS_SKIP_MAPSET_OWNER_CHECK to any non-empty string. This was added
+mostly for accessing VFAT/NTFS-format external drives or network
+shares where the ownership checks don't behave correctly. It should
+not be used on multi-user systems, nor set by programs.
+
+But other than that, a user cannot make a mapset the current mapset (i.e.
+the one a user can modify) unless the user owns it. The user can access data from
+any mapset for which they have the relevant filesystem permissions
+(i.e. read permission for files, execute permission for the ancestor
+directories, read permission for any directories which need to be
+enumerated).
+
+Originally this restriction was related to locking (the lock file was
+created in the user's home directory, so being able to set the current
+mapset to a directory which the user didn't own meant that they could have
+multiple sessions modifying a mapset concurrently).
+
+That's no longer an issue (the lock file is created in the mapset
+directory). However, the other issue is that allowing someone other
+than the owner to modify the directory can result in problems for its
+owner.
+
+Creating a new map typically creates a subdirectory of cell_misc for
+that map, and some files within it (e.g. a "null" file). Any new files
+and subdirectories will be owned by their creator (not the mapset's
+owner) and will have permissions determined by the current umask. The
+result is that there's no guarantee that tha mapset's owner will be
+able to delete (or even access) such files or directories.
+
+In short, it's a safety mechanism against people trying to share
+directories by making them group-writeable without fully understanding
+the implications.
+
 The routines described in this section provide the low-level interface
 to the GRASS database. They search the database for files, prompt the
 user for file names, open files for reading or writing, etc. The
diff --git a/lib/gis/home.c b/lib/gis/home.c
index 5ff23dd..7574451 100644
--- a/lib/gis/home.c
+++ b/lib/gis/home.c
@@ -16,7 +16,7 @@
 #include <grass/gis.h>
 #include <grass/glocale.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 /*!
  * \brief Get user's home directory
diff --git a/lib/gis/local_proto.h b/lib/gis/local_proto.h
deleted file mode 100644
index 705b65a..0000000
--- a/lib/gis/local_proto.h
+++ /dev/null
@@ -1,26 +0,0 @@
-#ifndef __LOCAL_PROTO_H__
-#define __LOCAL_PROTO_H__
-
-/* env.c */
-void G__read_env(void);
-void G__write_env(void);
-
-/* gisinit.c */
-void G__check_gisinit(void);
-
-/* handler.c */
-void G__call_error_handlers(void);
-
-/* home.c */
-const char *G__home(void);
-
-/* mach_name.c */
-const char *G__machine_name(void);
-
-/* mapset_nme.c */
-void G__get_list_of_mapsets(void);
-
-/* timestamp.c */
-int G__read_timestamp(FILE *, struct TimeStamp *);
-
-#endif /* LOCAL_PROTO_H__ */
diff --git a/lib/gis/location.c b/lib/gis/location.c
index 408a957..c5dcc5c 100644
--- a/lib/gis/location.c
+++ b/lib/gis/location.c
@@ -81,7 +81,7 @@ char *G__location_path(void)
     const char *base = G_gisdbase();
     char *location = G_malloc(strlen(base) + strlen(name) + 2);
 
-    sprintf(location, "%s/%s", base, name);
+    sprintf(location, "%s%c%s", base, HOST_DIRSEP, name);
 
     return location;
 }
diff --git a/lib/gis/lz4.c b/lib/gis/lz4.c
new file mode 100644
index 0000000..39a0f68
--- /dev/null
+++ b/lib/gis/lz4.c
@@ -0,0 +1,1516 @@
+/*
+   LZ4 - Fast LZ compression algorithm
+   Copyright (C) 2011-2015, Yann Collet.
+
+   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+       * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   You can contact the author at :
+   - LZ4 source repository : https://github.com/Cyan4973/lz4
+   - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
+*/
+
+
+/**************************************
+*  Tuning parameters
+**************************************/
+/*
+ * HEAPMODE :
+ * Select how default compression functions will allocate memory for their hash table,
+ * in memory stack (0:default, fastest), or in memory heap (1:requires malloc()).
+ */
+#define HEAPMODE 0
+
+/*
+ * ACCELERATION_DEFAULT :
+ * Select "acceleration" for LZ4_compress_fast() when parameter value <= 0
+ */
+#define ACCELERATION_DEFAULT 1
+
+
+/**************************************
+*  CPU Feature Detection
+**************************************/
+/*
+ * LZ4_FORCE_SW_BITCOUNT
+ * Define this parameter if your target system or compiler does not support hardware bit count
+ */
+#if defined(_MSC_VER) && defined(_WIN32_WCE)   /* Visual Studio for Windows CE does not support Hardware bit count */
+#  define LZ4_FORCE_SW_BITCOUNT
+#endif
+
+
+/**************************************
+*  Includes
+**************************************/
+#include "lz4.h"
+
+
+/**************************************
+*  Compiler Options
+**************************************/
+#ifdef _MSC_VER    /* Visual Studio */
+#  define FORCE_INLINE static __forceinline
+#  include <intrin.h>
+#  pragma warning(disable : 4127)        /* disable: C4127: conditional expression is constant */
+#  pragma warning(disable : 4293)        /* disable: C4293: too large shift (32-bits) */
+#else
+#  if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)   /* C99 */
+#    if defined(__GNUC__) || defined(__clang__)
+#      define FORCE_INLINE static inline __attribute__((always_inline))
+#    else
+#      define FORCE_INLINE static inline
+#    endif
+#  else
+#    define FORCE_INLINE static
+#  endif   /* __STDC_VERSION__ */
+#endif  /* _MSC_VER */
+
+/* LZ4_GCC_VERSION is defined into lz4.h */
+#if (LZ4_GCC_VERSION >= 302) || (__INTEL_COMPILER >= 800) || defined(__clang__)
+#  define expect(expr,value)    (__builtin_expect ((expr),(value)) )
+#else
+#  define expect(expr,value)    (expr)
+#endif
+
+#define likely(expr)     expect((expr) != 0, 1)
+#define unlikely(expr)   expect((expr) != 0, 0)
+
+
+/**************************************
+*  Memory routines
+**************************************/
+#include <stdlib.h>   /* malloc, calloc, free */
+#define ALLOCATOR(n,s) calloc(n,s)
+#define FREEMEM        free
+#include <string.h>   /* memset, memcpy */
+#define MEM_INIT       memset
+
+
+/**************************************
+*  Basic Types
+**************************************/
+#if defined (__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)   /* C99 */
+# include <stdint.h>
+  typedef  uint8_t BYTE;
+  typedef uint16_t U16;
+  typedef uint32_t U32;
+  typedef  int32_t S32;
+  typedef uint64_t U64;
+#else
+  typedef unsigned char       BYTE;
+  typedef unsigned short      U16;
+  typedef unsigned int        U32;
+  typedef   signed int        S32;
+  typedef unsigned long long  U64;
+#endif
+
+
+/**************************************
+*  Reading and writing into memory
+**************************************/
+#define STEPSIZE sizeof(size_t)
+
+static unsigned LZ4_64bits(void) { return sizeof(void*)==8; }
+
+static unsigned LZ4_isLittleEndian(void)
+{
+    const union { U32 i; BYTE c[4]; } one = { 1 };   /* don't use static : performance detrimental  */
+    return one.c[0];
+}
+
+
+static U16 LZ4_read16(const void* memPtr)
+{
+    U16 val16;
+    memcpy(&val16, memPtr, 2);
+    return val16;
+}
+
+static U16 LZ4_readLE16(const void* memPtr)
+{
+    if (LZ4_isLittleEndian())
+    {
+        return LZ4_read16(memPtr);
+    }
+    else
+    {
+        const BYTE* p = (const BYTE*)memPtr;
+        return (U16)((U16)p[0] + (p[1]<<8));
+    }
+}
+
+static void LZ4_writeLE16(void* memPtr, U16 value)
+{
+    if (LZ4_isLittleEndian())
+    {
+        memcpy(memPtr, &value, 2);
+    }
+    else
+    {
+        BYTE* p = (BYTE*)memPtr;
+        p[0] = (BYTE) value;
+        p[1] = (BYTE)(value>>8);
+    }
+}
+
+static U32 LZ4_read32(const void* memPtr)
+{
+    U32 val32;
+    memcpy(&val32, memPtr, 4);
+    return val32;
+}
+
+static U64 LZ4_read64(const void* memPtr)
+{
+    U64 val64;
+    memcpy(&val64, memPtr, 8);
+    return val64;
+}
+
+static size_t LZ4_read_ARCH(const void* p)
+{
+    if (LZ4_64bits())
+        return (size_t)LZ4_read64(p);
+    else
+        return (size_t)LZ4_read32(p);
+}
+
+
+static void LZ4_copy4(void* dstPtr, const void* srcPtr) { memcpy(dstPtr, srcPtr, 4); }
+
+static void LZ4_copy8(void* dstPtr, const void* srcPtr) { memcpy(dstPtr, srcPtr, 8); }
+
+/* customized version of memcpy, which may overwrite up to 7 bytes beyond dstEnd */
+static void LZ4_wildCopy(void* dstPtr, const void* srcPtr, void* dstEnd)
+{
+    BYTE* d = (BYTE*)dstPtr;
+    const BYTE* s = (const BYTE*)srcPtr;
+    BYTE* e = (BYTE*)dstEnd;
+    do { LZ4_copy8(d,s); d+=8; s+=8; } while (d<e);
+}
+
+
+/**************************************
+*  Common Constants
+**************************************/
+#define MINMATCH 4
+
+#define COPYLENGTH 8
+#define LASTLITERALS 5
+#define MFLIMIT (COPYLENGTH+MINMATCH)
+static const int LZ4_minLength = (MFLIMIT+1);
+
+#define KB *(1 <<10)
+#define MB *(1 <<20)
+#define GB *(1U<<30)
+
+#define MAXD_LOG 16
+#define MAX_DISTANCE ((1 << MAXD_LOG) - 1)
+
+#define ML_BITS  4
+#define ML_MASK  ((1U<<ML_BITS)-1)
+#define RUN_BITS (8-ML_BITS)
+#define RUN_MASK ((1U<<RUN_BITS)-1)
+
+
+/**************************************
+*  Common Utils
+**************************************/
+#define LZ4_STATIC_ASSERT(c)    { enum { LZ4_static_assert = 1/(int)(!!(c)) }; }   /* use only *after* variable declarations */
+
+
+/**************************************
+*  Common functions
+**************************************/
+static unsigned LZ4_NbCommonBytes (register size_t val)
+{
+    if (LZ4_isLittleEndian())
+    {
+        if (LZ4_64bits())
+        {
+#       if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            unsigned long r = 0;
+            _BitScanForward64( &r, (U64)val );
+            return (int)(r>>3);
+#       elif (defined(__clang__) || (LZ4_GCC_VERSION >= 304)) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            return (__builtin_ctzll((U64)val) >> 3);
+#       else
+            static const int DeBruijnBytePos[64] = { 0, 0, 0, 0, 0, 1, 1, 2, 0, 3, 1, 3, 1, 4, 2, 7, 0, 2, 3, 6, 1, 5, 3, 5, 1, 3, 4, 4, 2, 5, 6, 7, 7, 0, 1, 2, 3, 3, 4, 6, 2, 6, 5, 5, 3, 4, 5, 6, 7, 1, 2, 4, 6, 4, 4, 5, 7, 2, 6, 5, 7, 6, 7, 7 };
+            return DeBruijnBytePos[((U64)((val & -(long long)val) * 0x0218A392CDABBD3FULL)) >> 58];
+#       endif
+        }
+        else /* 32 bits */
+        {
+#       if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            unsigned long r;
+            _BitScanForward( &r, (U32)val );
+            return (int)(r>>3);
+#       elif (defined(__clang__) || (LZ4_GCC_VERSION >= 304)) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            return (__builtin_ctz((U32)val) >> 3);
+#       else
+            static const int DeBruijnBytePos[32] = { 0, 0, 3, 0, 3, 1, 3, 0, 3, 2, 2, 1, 3, 2, 0, 1, 3, 3, 1, 2, 2, 2, 2, 0, 3, 1, 2, 0, 1, 0, 1, 1 };
+            return DeBruijnBytePos[((U32)((val & -(S32)val) * 0x077CB531U)) >> 27];
+#       endif
+        }
+    }
+    else   /* Big Endian CPU */
+    {
+        if (LZ4_64bits())
+        {
+#       if defined(_MSC_VER) && defined(_WIN64) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            unsigned long r = 0;
+            _BitScanReverse64( &r, val );
+            return (unsigned)(r>>3);
+#       elif (defined(__clang__) || (LZ4_GCC_VERSION >= 304)) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            return (__builtin_clzll((U64)val) >> 3);
+#       else
+            unsigned r;
+            if (!(val>>32)) { r=4; } else { r=0; val>>=32; }
+            if (!(val>>16)) { r+=2; val>>=8; } else { val>>=24; }
+            r += (!val);
+            return r;
+#       endif
+        }
+        else /* 32 bits */
+        {
+#       if defined(_MSC_VER) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            unsigned long r = 0;
+            _BitScanReverse( &r, (unsigned long)val );
+            return (unsigned)(r>>3);
+#       elif (defined(__clang__) || (LZ4_GCC_VERSION >= 304)) && !defined(LZ4_FORCE_SW_BITCOUNT)
+            return (__builtin_clz((U32)val) >> 3);
+#       else
+            unsigned r;
+            if (!(val>>16)) { r=2; val>>=8; } else { r=0; val>>=24; }
+            r += (!val);
+            return r;
+#       endif
+        }
+    }
+}
+
+static unsigned LZ4_count(const BYTE* pIn, const BYTE* pMatch, const BYTE* pInLimit)
+{
+    const BYTE* const pStart = pIn;
+
+    while (likely(pIn<pInLimit-(STEPSIZE-1)))
+    {
+        size_t diff = LZ4_read_ARCH(pMatch) ^ LZ4_read_ARCH(pIn);
+        if (!diff) { pIn+=STEPSIZE; pMatch+=STEPSIZE; continue; }
+        pIn += LZ4_NbCommonBytes(diff);
+        return (unsigned)(pIn - pStart);
+    }
+
+    if (LZ4_64bits()) if ((pIn<(pInLimit-3)) && (LZ4_read32(pMatch) == LZ4_read32(pIn))) { pIn+=4; pMatch+=4; }
+    if ((pIn<(pInLimit-1)) && (LZ4_read16(pMatch) == LZ4_read16(pIn))) { pIn+=2; pMatch+=2; }
+    if ((pIn<pInLimit) && (*pMatch == *pIn)) pIn++;
+    return (unsigned)(pIn - pStart);
+}
+
+
+#ifndef LZ4_COMMONDEFS_ONLY
+/**************************************
+*  Local Constants
+**************************************/
+#define LZ4_HASHLOG   (LZ4_MEMORY_USAGE-2)
+#define HASHTABLESIZE (1 << LZ4_MEMORY_USAGE)
+#define HASH_SIZE_U32 (1 << LZ4_HASHLOG)       /* required as macro for static allocation */
+
+static const int LZ4_64Klimit = ((64 KB) + (MFLIMIT-1));
+static const U32 LZ4_skipTrigger = 6;  /* Increase this value ==> compression run slower on incompressible data */
+
+
+/**************************************
+*  Local Structures and types
+**************************************/
+typedef struct {
+    U32 hashTable[HASH_SIZE_U32];
+    U32 currentOffset;
+    U32 initCheck;
+    const BYTE* dictionary;
+    BYTE* bufferStart;   /* obsolete, used for slideInputBuffer */
+    U32 dictSize;
+} LZ4_stream_t_internal;
+
+typedef enum { notLimited = 0, limitedOutput = 1 } limitedOutput_directive;
+typedef enum { byPtr, byU32, byU16 } tableType_t;
+
+typedef enum { noDict = 0, withPrefix64k, usingExtDict } dict_directive;
+typedef enum { noDictIssue = 0, dictSmall } dictIssue_directive;
+
+typedef enum { endOnOutputSize = 0, endOnInputSize = 1 } endCondition_directive;
+typedef enum { full = 0, partial = 1 } earlyEnd_directive;
+
+
+/**************************************
+*  Local Utils
+**************************************/
+int LZ4_versionNumber (void) { return LZ4_VERSION_NUMBER; }
+int LZ4_compressBound(int isize)  { return LZ4_COMPRESSBOUND(isize); }
+int LZ4_sizeofState() { return LZ4_STREAMSIZE; }
+
+
+
+/********************************
+*  Compression functions
+********************************/
+
+static U32 LZ4_hashSequence(U32 sequence, tableType_t const tableType)
+{
+    if (tableType == byU16)
+        return (((sequence) * 2654435761U) >> ((MINMATCH*8)-(LZ4_HASHLOG+1)));
+    else
+        return (((sequence) * 2654435761U) >> ((MINMATCH*8)-LZ4_HASHLOG));
+}
+
+static const U64 prime5bytes = 889523592379ULL;
+static U32 LZ4_hashSequence64(size_t sequence, tableType_t const tableType)
+{
+    const U32 hashLog = (tableType == byU16) ? LZ4_HASHLOG+1 : LZ4_HASHLOG;
+    const U32 hashMask = (1<<hashLog) - 1;
+    return ((sequence * prime5bytes) >> (40 - hashLog)) & hashMask;
+}
+
+static U32 LZ4_hashSequenceT(size_t sequence, tableType_t const tableType)
+{
+    if (LZ4_64bits())
+        return LZ4_hashSequence64(sequence, tableType);
+    return LZ4_hashSequence((U32)sequence, tableType);
+}
+
+static U32 LZ4_hashPosition(const void* p, tableType_t tableType) { return LZ4_hashSequenceT(LZ4_read_ARCH(p), tableType); }
+
+static void LZ4_putPositionOnHash(const BYTE* p, U32 h, void* tableBase, tableType_t const tableType, const BYTE* srcBase)
+{
+    switch (tableType)
+    {
+    case byPtr: { const BYTE** hashTable = (const BYTE**)tableBase; hashTable[h] = p; return; }
+    case byU32: { U32* hashTable = (U32*) tableBase; hashTable[h] = (U32)(p-srcBase); return; }
+    case byU16: { U16* hashTable = (U16*) tableBase; hashTable[h] = (U16)(p-srcBase); return; }
+    }
+}
+
+static void LZ4_putPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+{
+    U32 h = LZ4_hashPosition(p, tableType);
+    LZ4_putPositionOnHash(p, h, tableBase, tableType, srcBase);
+}
+
+static const BYTE* LZ4_getPositionOnHash(U32 h, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+{
+    if (tableType == byPtr) { const BYTE** hashTable = (const BYTE**) tableBase; return hashTable[h]; }
+    if (tableType == byU32) { U32* hashTable = (U32*) tableBase; return hashTable[h] + srcBase; }
+    { U16* hashTable = (U16*) tableBase; return hashTable[h] + srcBase; }   /* default, to ensure a return */
+}
+
+static const BYTE* LZ4_getPosition(const BYTE* p, void* tableBase, tableType_t tableType, const BYTE* srcBase)
+{
+    U32 h = LZ4_hashPosition(p, tableType);
+    return LZ4_getPositionOnHash(h, tableBase, tableType, srcBase);
+}
+
+FORCE_INLINE int LZ4_compress_generic(
+                 void* const ctx,
+                 const char* const source,
+                 char* const dest,
+                 const int inputSize,
+                 const int maxOutputSize,
+                 const limitedOutput_directive outputLimited,
+                 const tableType_t tableType,
+                 const dict_directive dict,
+                 const dictIssue_directive dictIssue,
+                 const U32 acceleration)
+{
+    LZ4_stream_t_internal* const dictPtr = (LZ4_stream_t_internal*)ctx;
+
+    const BYTE* ip = (const BYTE*) source;
+    const BYTE* base;
+    const BYTE* lowLimit;
+    const BYTE* const lowRefLimit = ip - dictPtr->dictSize;
+    const BYTE* const dictionary = dictPtr->dictionary;
+    const BYTE* const dictEnd = dictionary + dictPtr->dictSize;
+    const size_t dictDelta = dictEnd - (const BYTE*)source;
+    const BYTE* anchor = (const BYTE*) source;
+    const BYTE* const iend = ip + inputSize;
+    const BYTE* const mflimit = iend - MFLIMIT;
+    const BYTE* const matchlimit = iend - LASTLITERALS;
+
+    BYTE* op = (BYTE*) dest;
+    BYTE* const olimit = op + maxOutputSize;
+
+    U32 forwardH;
+    size_t refDelta=0;
+
+    /* Init conditions */
+    if ((U32)inputSize > (U32)LZ4_MAX_INPUT_SIZE) return 0;   /* Unsupported input size, too large (or negative) */
+    switch(dict)
+    {
+    case noDict:
+    default:
+        base = (const BYTE*)source;
+        lowLimit = (const BYTE*)source;
+        break;
+    case withPrefix64k:
+        base = (const BYTE*)source - dictPtr->currentOffset;
+        lowLimit = (const BYTE*)source - dictPtr->dictSize;
+        break;
+    case usingExtDict:
+        base = (const BYTE*)source - dictPtr->currentOffset;
+        lowLimit = (const BYTE*)source;
+        break;
+    }
+    if ((tableType == byU16) && (inputSize>=LZ4_64Klimit)) return 0;   /* Size too large (not within 64K limit) */
+    if (inputSize<LZ4_minLength) goto _last_literals;                  /* Input too small, no compression (all literals) */
+
+    /* First Byte */
+    LZ4_putPosition(ip, ctx, tableType, base);
+    ip++; forwardH = LZ4_hashPosition(ip, tableType);
+
+    /* Main Loop */
+    for ( ; ; )
+    {
+        const BYTE* match;
+        BYTE* token;
+        {
+            const BYTE* forwardIp = ip;
+            unsigned step = 1;
+            unsigned searchMatchNb = acceleration << LZ4_skipTrigger;
+
+            /* Find a match */
+            do {
+                U32 h = forwardH;
+                ip = forwardIp;
+                forwardIp += step;
+                step = (searchMatchNb++ >> LZ4_skipTrigger);
+
+                if (unlikely(forwardIp > mflimit)) goto _last_literals;
+
+                match = LZ4_getPositionOnHash(h, ctx, tableType, base);
+                if (dict==usingExtDict)
+                {
+                    if (match<(const BYTE*)source)
+                    {
+                        refDelta = dictDelta;
+                        lowLimit = dictionary;
+                    }
+                    else
+                    {
+                        refDelta = 0;
+                        lowLimit = (const BYTE*)source;
+                    }
+                }
+                forwardH = LZ4_hashPosition(forwardIp, tableType);
+                LZ4_putPositionOnHash(ip, h, ctx, tableType, base);
+
+            } while ( ((dictIssue==dictSmall) ? (match < lowRefLimit) : 0)
+                || ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip))
+                || (LZ4_read32(match+refDelta) != LZ4_read32(ip)) );
+        }
+
+        /* Catch up */
+        while ((ip>anchor) && (match+refDelta > lowLimit) && (unlikely(ip[-1]==match[refDelta-1]))) { ip--; match--; }
+
+        {
+            /* Encode Literal length */
+            unsigned litLength = (unsigned)(ip - anchor);
+            token = op++;
+            if ((outputLimited) && (unlikely(op + litLength + (2 + 1 + LASTLITERALS) + (litLength/255) > olimit)))
+                return 0;   /* Check output limit */
+            if (litLength>=RUN_MASK)
+            {
+                int len = (int)litLength-RUN_MASK;
+                *token=(RUN_MASK<<ML_BITS);
+                for(; len >= 255 ; len-=255) *op++ = 255;
+                *op++ = (BYTE)len;
+            }
+            else *token = (BYTE)(litLength<<ML_BITS);
+
+            /* Copy Literals */
+            LZ4_wildCopy(op, anchor, op+litLength);
+            op+=litLength;
+        }
+
+_next_match:
+        /* Encode Offset */
+        LZ4_writeLE16(op, (U16)(ip-match)); op+=2;
+
+        /* Encode MatchLength */
+        {
+            unsigned matchLength;
+
+            if ((dict==usingExtDict) && (lowLimit==dictionary))
+            {
+                const BYTE* limit;
+                match += refDelta;
+                limit = ip + (dictEnd-match);
+                if (limit > matchlimit) limit = matchlimit;
+                matchLength = LZ4_count(ip+MINMATCH, match+MINMATCH, limit);
+                ip += MINMATCH + matchLength;
+                if (ip==limit)
+                {
+                    unsigned more = LZ4_count(ip, (const BYTE*)source, matchlimit);
+                    matchLength += more;
+                    ip += more;
+                }
+            }
+            else
+            {
+                matchLength = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit);
+                ip += MINMATCH + matchLength;
+            }
+
+            if ((outputLimited) && (unlikely(op + (1 + LASTLITERALS) + (matchLength>>8) > olimit)))
+                return 0;    /* Check output limit */
+            if (matchLength>=ML_MASK)
+            {
+                *token += ML_MASK;
+                matchLength -= ML_MASK;
+                for (; matchLength >= 510 ; matchLength-=510) { *op++ = 255; *op++ = 255; }
+                if (matchLength >= 255) { matchLength-=255; *op++ = 255; }
+                *op++ = (BYTE)matchLength;
+            }
+            else *token += (BYTE)(matchLength);
+        }
+
+        anchor = ip;
+
+        /* Test end of chunk */
+        if (ip > mflimit) break;
+
+        /* Fill table */
+        LZ4_putPosition(ip-2, ctx, tableType, base);
+
+        /* Test next position */
+        match = LZ4_getPosition(ip, ctx, tableType, base);
+        if (dict==usingExtDict)
+        {
+            if (match<(const BYTE*)source)
+            {
+                refDelta = dictDelta;
+                lowLimit = dictionary;
+            }
+            else
+            {
+                refDelta = 0;
+                lowLimit = (const BYTE*)source;
+            }
+        }
+        LZ4_putPosition(ip, ctx, tableType, base);
+        if ( ((dictIssue==dictSmall) ? (match>=lowRefLimit) : 1)
+            && (match+MAX_DISTANCE>=ip)
+            && (LZ4_read32(match+refDelta)==LZ4_read32(ip)) )
+        { token=op++; *token=0; goto _next_match; }
+
+        /* Prepare next loop */
+        forwardH = LZ4_hashPosition(++ip, tableType);
+    }
+
+_last_literals:
+    /* Encode Last Literals */
+    {
+        const size_t lastRun = (size_t)(iend - anchor);
+        if ((outputLimited) && ((op - (BYTE*)dest) + lastRun + 1 + ((lastRun+255-RUN_MASK)/255) > (U32)maxOutputSize))
+            return 0;   /* Check output limit */
+        if (lastRun >= RUN_MASK)
+        {
+            size_t accumulator = lastRun - RUN_MASK;
+            *op++ = RUN_MASK << ML_BITS;
+            for(; accumulator >= 255 ; accumulator-=255) *op++ = 255;
+            *op++ = (BYTE) accumulator;
+        }
+        else
+        {
+            *op++ = (BYTE)(lastRun<<ML_BITS);
+        }
+        memcpy(op, anchor, lastRun);
+        op += lastRun;
+    }
+
+    /* End */
+    return (int) (((char*)op)-dest);
+}
+
+
+int LZ4_compress_fast_extState(void* state, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration)
+{
+    LZ4_resetStream((LZ4_stream_t*)state);
+    if (acceleration < 1) acceleration = ACCELERATION_DEFAULT;
+
+    if (maxOutputSize >= LZ4_compressBound(inputSize))
+    {
+        if (inputSize < LZ4_64Klimit)
+            return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, byU16,                        noDict, noDictIssue, acceleration);
+        else
+            return LZ4_compress_generic(state, source, dest, inputSize, 0, notLimited, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue, acceleration);
+    }
+    else
+    {
+        if (inputSize < LZ4_64Klimit)
+            return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limitedOutput, byU16,                        noDict, noDictIssue, acceleration);
+        else
+            return LZ4_compress_generic(state, source, dest, inputSize, maxOutputSize, limitedOutput, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue, acceleration);
+    }
+}
+
+
+int LZ4_compress_fast(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration)
+{
+#if (HEAPMODE)
+    void* ctxPtr = ALLOCATOR(1, sizeof(LZ4_stream_t));   /* malloc-calloc always properly aligned */
+#else
+    LZ4_stream_t ctx;
+    void* ctxPtr = &ctx;
+#endif
+
+    int result = LZ4_compress_fast_extState(ctxPtr, source, dest, inputSize, maxOutputSize, acceleration);
+
+#if (HEAPMODE)
+    FREEMEM(ctxPtr);
+#endif
+    return result;
+}
+
+
+int LZ4_compress_default(const char* source, char* dest, int inputSize, int maxOutputSize)
+{
+    return LZ4_compress_fast(source, dest, inputSize, maxOutputSize, 1);
+}
+
+
+/* hidden debug function */
+/* strangely enough, gcc generates faster code when this function is uncommented, even if unused */
+int LZ4_compress_fast_force(const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration)
+{
+    LZ4_stream_t ctx;
+
+    LZ4_resetStream(&ctx);
+
+    if (inputSize < LZ4_64Klimit)
+        return LZ4_compress_generic(&ctx, source, dest, inputSize, maxOutputSize, limitedOutput, byU16,                        noDict, noDictIssue, acceleration);
+    else
+        return LZ4_compress_generic(&ctx, source, dest, inputSize, maxOutputSize, limitedOutput, LZ4_64bits() ? byU32 : byPtr, noDict, noDictIssue, acceleration);
+}
+
+
+/********************************
+*  destSize variant
+********************************/
+
+static int LZ4_compress_destSize_generic(
+                       void* const ctx,
+                 const char* const src,
+                       char* const dst,
+                       int*  const srcSizePtr,
+                 const int targetDstSize,
+                 const tableType_t tableType)
+{
+    const BYTE* ip = (const BYTE*) src;
+    const BYTE* base = (const BYTE*) src;
+    const BYTE* lowLimit = (const BYTE*) src;
+    const BYTE* anchor = ip;
+    const BYTE* const iend = ip + *srcSizePtr;
+    const BYTE* const mflimit = iend - MFLIMIT;
+    const BYTE* const matchlimit = iend - LASTLITERALS;
+
+    BYTE* op = (BYTE*) dst;
+    BYTE* const oend = op + targetDstSize;
+    BYTE* const oMaxLit = op + targetDstSize - 2 /* offset */ - 8 /* because 8+MINMATCH==MFLIMIT */ - 1 /* token */;
+    BYTE* const oMaxMatch = op + targetDstSize - (LASTLITERALS + 1 /* token */);
+    BYTE* const oMaxSeq = oMaxLit - 1 /* token */;
+
+    U32 forwardH;
+
+
+    /* Init conditions */
+    if (targetDstSize < 1) return 0;                                     /* Impossible to store anything */
+    if ((U32)*srcSizePtr > (U32)LZ4_MAX_INPUT_SIZE) return 0;            /* Unsupported input size, too large (or negative) */
+    if ((tableType == byU16) && (*srcSizePtr>=LZ4_64Klimit)) return 0;   /* Size too large (not within 64K limit) */
+    if (*srcSizePtr<LZ4_minLength) goto _last_literals;                  /* Input too small, no compression (all literals) */
+
+    /* First Byte */
+    *srcSizePtr = 0;
+    LZ4_putPosition(ip, ctx, tableType, base);
+    ip++; forwardH = LZ4_hashPosition(ip, tableType);
+
+    /* Main Loop */
+    for ( ; ; )
+    {
+        const BYTE* match;
+        BYTE* token;
+        {
+            const BYTE* forwardIp = ip;
+            unsigned step = 1;
+            unsigned searchMatchNb = 1 << LZ4_skipTrigger;
+
+            /* Find a match */
+            do {
+                U32 h = forwardH;
+                ip = forwardIp;
+                forwardIp += step;
+                step = (searchMatchNb++ >> LZ4_skipTrigger);
+
+                if (unlikely(forwardIp > mflimit))
+                    goto _last_literals;
+
+                match = LZ4_getPositionOnHash(h, ctx, tableType, base);
+                forwardH = LZ4_hashPosition(forwardIp, tableType);
+                LZ4_putPositionOnHash(ip, h, ctx, tableType, base);
+
+            } while ( ((tableType==byU16) ? 0 : (match + MAX_DISTANCE < ip))
+                || (LZ4_read32(match) != LZ4_read32(ip)) );
+        }
+
+        /* Catch up */
+        while ((ip>anchor) && (match > lowLimit) && (unlikely(ip[-1]==match[-1]))) { ip--; match--; }
+
+        {
+            /* Encode Literal length */
+            unsigned litLength = (unsigned)(ip - anchor);
+            token = op++;
+            if (op + ((litLength+240)/255) + litLength > oMaxLit)
+            {
+                /* Not enough space for a last match */
+                op--;
+                goto _last_literals;
+            }
+            if (litLength>=RUN_MASK)
+            {
+                unsigned len = litLength - RUN_MASK;
+                *token=(RUN_MASK<<ML_BITS);
+                for(; len >= 255 ; len-=255) *op++ = 255;
+                *op++ = (BYTE)len;
+            }
+            else *token = (BYTE)(litLength<<ML_BITS);
+
+            /* Copy Literals */
+            LZ4_wildCopy(op, anchor, op+litLength);
+            op += litLength;
+        }
+
+_next_match:
+        /* Encode Offset */
+        LZ4_writeLE16(op, (U16)(ip-match)); op+=2;
+
+        /* Encode MatchLength */
+        {
+            size_t matchLength;
+
+            matchLength = LZ4_count(ip+MINMATCH, match+MINMATCH, matchlimit);
+
+            if (op + ((matchLength+240)/255) > oMaxMatch)
+            {
+                /* Match description too long : reduce it */
+                matchLength = (15-1) + (oMaxMatch-op) * 255;
+            }
+            /* printf("offset %5i, matchLength%5i \n", (int)(ip-match), matchLength + MINMATCH); */
+            ip += MINMATCH + matchLength;
+
+            if (matchLength>=ML_MASK)
+            {
+                *token += ML_MASK;
+                matchLength -= ML_MASK;
+                while (matchLength >= 255) { matchLength-=255; *op++ = 255; }
+                *op++ = (BYTE)matchLength;
+            }
+            else *token += (BYTE)(matchLength);
+        }
+
+        anchor = ip;
+
+        /* Test end of block */
+        if (ip > mflimit) break;
+        if (op > oMaxSeq) break;
+
+        /* Fill table */
+        LZ4_putPosition(ip-2, ctx, tableType, base);
+
+        /* Test next position */
+        match = LZ4_getPosition(ip, ctx, tableType, base);
+        LZ4_putPosition(ip, ctx, tableType, base);
+        if ( (match+MAX_DISTANCE>=ip)
+            && (LZ4_read32(match)==LZ4_read32(ip)) )
+        { token=op++; *token=0; goto _next_match; }
+
+        /* Prepare next loop */
+        forwardH = LZ4_hashPosition(++ip, tableType);
+    }
+
+_last_literals:
+    /* Encode Last Literals */
+    {
+        size_t lastRunSize = (size_t)(iend - anchor);
+        if (op + 1 /* token */ + ((lastRunSize+240)/255) /* litLength */ + lastRunSize /* literals */ > oend)
+        {
+            /* adapt lastRunSize to fill 'dst' */
+            lastRunSize  = (oend-op) - 1;
+            lastRunSize -= (lastRunSize+240)/255;
+        }
+        ip = anchor + lastRunSize;
+
+        if (lastRunSize >= RUN_MASK)
+        {
+            size_t accumulator = lastRunSize - RUN_MASK;
+            *op++ = RUN_MASK << ML_BITS;
+            for(; accumulator >= 255 ; accumulator-=255) *op++ = 255;
+            *op++ = (BYTE) accumulator;
+        }
+        else
+        {
+            *op++ = (BYTE)(lastRunSize<<ML_BITS);
+        }
+        memcpy(op, anchor, lastRunSize);
+        op += lastRunSize;
+    }
+
+    /* End */
+    *srcSizePtr = (int) (((const char*)ip)-src);
+    return (int) (((char*)op)-dst);
+}
+
+
+static int LZ4_compress_destSize_extState (void* state, const char* src, char* dst, int* srcSizePtr, int targetDstSize)
+{
+    LZ4_resetStream((LZ4_stream_t*)state);
+
+    if (targetDstSize >= LZ4_compressBound(*srcSizePtr))   /* compression success is guaranteed */
+    {
+        return LZ4_compress_fast_extState(state, src, dst, *srcSizePtr, targetDstSize, 1);
+    }
+    else
+    {
+        if (*srcSizePtr < LZ4_64Klimit)
+            return LZ4_compress_destSize_generic(state, src, dst, srcSizePtr, targetDstSize, byU16);
+        else
+            return LZ4_compress_destSize_generic(state, src, dst, srcSizePtr, targetDstSize, LZ4_64bits() ? byU32 : byPtr);
+    }
+}
+
+
+int LZ4_compress_destSize(const char* src, char* dst, int* srcSizePtr, int targetDstSize)
+{
+#if (HEAPMODE)
+    void* ctx = ALLOCATOR(1, sizeof(LZ4_stream_t));   /* malloc-calloc always properly aligned */
+#else
+    LZ4_stream_t ctxBody;
+    void* ctx = &ctxBody;
+#endif
+
+    int result = LZ4_compress_destSize_extState(ctx, src, dst, srcSizePtr, targetDstSize);
+
+#if (HEAPMODE)
+    FREEMEM(ctx);
+#endif
+    return result;
+}
+
+
+
+/********************************
+*  Streaming functions
+********************************/
+
+LZ4_stream_t* LZ4_createStream(void)
+{
+    LZ4_stream_t* lz4s = (LZ4_stream_t*)ALLOCATOR(8, LZ4_STREAMSIZE_U64);
+    LZ4_STATIC_ASSERT(LZ4_STREAMSIZE >= sizeof(LZ4_stream_t_internal));    /* A compilation error here means LZ4_STREAMSIZE is not large enough */
+    LZ4_resetStream(lz4s);
+    return lz4s;
+}
+
+void LZ4_resetStream (LZ4_stream_t* LZ4_stream)
+{
+    MEM_INIT(LZ4_stream, 0, sizeof(LZ4_stream_t));
+}
+
+int LZ4_freeStream (LZ4_stream_t* LZ4_stream)
+{
+    FREEMEM(LZ4_stream);
+    return (0);
+}
+
+
+#define HASH_UNIT sizeof(size_t)
+int LZ4_loadDict (LZ4_stream_t* LZ4_dict, const char* dictionary, int dictSize)
+{
+    LZ4_stream_t_internal* dict = (LZ4_stream_t_internal*) LZ4_dict;
+    const BYTE* p = (const BYTE*)dictionary;
+    const BYTE* const dictEnd = p + dictSize;
+    const BYTE* base;
+
+    if ((dict->initCheck) || (dict->currentOffset > 1 GB))  /* Uninitialized structure, or reuse overflow */
+        LZ4_resetStream(LZ4_dict);
+
+    if (dictSize < (int)HASH_UNIT)
+    {
+        dict->dictionary = NULL;
+        dict->dictSize = 0;
+        return 0;
+    }
+
+    if ((dictEnd - p) > 64 KB) p = dictEnd - 64 KB;
+    dict->currentOffset += 64 KB;
+    base = p - dict->currentOffset;
+    dict->dictionary = p;
+    dict->dictSize = (U32)(dictEnd - p);
+    dict->currentOffset += dict->dictSize;
+
+    while (p <= dictEnd-HASH_UNIT)
+    {
+        LZ4_putPosition(p, dict->hashTable, byU32, base);
+        p+=3;
+    }
+
+    return dict->dictSize;
+}
+
+
+static void LZ4_renormDictT(LZ4_stream_t_internal* LZ4_dict, const BYTE* src)
+{
+    if ((LZ4_dict->currentOffset > 0x80000000) ||
+        ((size_t)LZ4_dict->currentOffset > (size_t)src))   /* address space overflow */
+    {
+        /* rescale hash table */
+        U32 delta = LZ4_dict->currentOffset - 64 KB;
+        const BYTE* dictEnd = LZ4_dict->dictionary + LZ4_dict->dictSize;
+        int i;
+        for (i=0; i<HASH_SIZE_U32; i++)
+        {
+            if (LZ4_dict->hashTable[i] < delta) LZ4_dict->hashTable[i]=0;
+            else LZ4_dict->hashTable[i] -= delta;
+        }
+        LZ4_dict->currentOffset = 64 KB;
+        if (LZ4_dict->dictSize > 64 KB) LZ4_dict->dictSize = 64 KB;
+        LZ4_dict->dictionary = dictEnd - LZ4_dict->dictSize;
+    }
+}
+
+
+int LZ4_compress_fast_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize, int maxOutputSize, int acceleration)
+{
+    LZ4_stream_t_internal* streamPtr = (LZ4_stream_t_internal*)LZ4_stream;
+    const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize;
+
+    const BYTE* smallest = (const BYTE*) source;
+    if (streamPtr->initCheck) return 0;   /* Uninitialized structure detected */
+    if ((streamPtr->dictSize>0) && (smallest>dictEnd)) smallest = dictEnd;
+    LZ4_renormDictT(streamPtr, smallest);
+    if (acceleration < 1) acceleration = ACCELERATION_DEFAULT;
+
+    /* Check overlapping input/dictionary space */
+    {
+        const BYTE* sourceEnd = (const BYTE*) source + inputSize;
+        if ((sourceEnd > streamPtr->dictionary) && (sourceEnd < dictEnd))
+        {
+            streamPtr->dictSize = (U32)(dictEnd - sourceEnd);
+            if (streamPtr->dictSize > 64 KB) streamPtr->dictSize = 64 KB;
+            if (streamPtr->dictSize < 4) streamPtr->dictSize = 0;
+            streamPtr->dictionary = dictEnd - streamPtr->dictSize;
+        }
+    }
+
+    /* prefix mode : source data follows dictionary */
+    if (dictEnd == (const BYTE*)source)
+    {
+        int result;
+        if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset))
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, dictSmall, acceleration);
+        else
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, withPrefix64k, noDictIssue, acceleration);
+        streamPtr->dictSize += (U32)inputSize;
+        streamPtr->currentOffset += (U32)inputSize;
+        return result;
+    }
+
+    /* external dictionary mode */
+    {
+        int result;
+        if ((streamPtr->dictSize < 64 KB) && (streamPtr->dictSize < streamPtr->currentOffset))
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, dictSmall, acceleration);
+        else
+            result = LZ4_compress_generic(LZ4_stream, source, dest, inputSize, maxOutputSize, limitedOutput, byU32, usingExtDict, noDictIssue, acceleration);
+        streamPtr->dictionary = (const BYTE*)source;
+        streamPtr->dictSize = (U32)inputSize;
+        streamPtr->currentOffset += (U32)inputSize;
+        return result;
+    }
+}
+
+
+/* Hidden debug function, to force external dictionary mode */
+int LZ4_compress_forceExtDict (LZ4_stream_t* LZ4_dict, const char* source, char* dest, int inputSize)
+{
+    LZ4_stream_t_internal* streamPtr = (LZ4_stream_t_internal*)LZ4_dict;
+    int result;
+    const BYTE* const dictEnd = streamPtr->dictionary + streamPtr->dictSize;
+
+    const BYTE* smallest = dictEnd;
+    if (smallest > (const BYTE*) source) smallest = (const BYTE*) source;
+    LZ4_renormDictT((LZ4_stream_t_internal*)LZ4_dict, smallest);
+
+    result = LZ4_compress_generic(LZ4_dict, source, dest, inputSize, 0, notLimited, byU32, usingExtDict, noDictIssue, 1);
+
+    streamPtr->dictionary = (const BYTE*)source;
+    streamPtr->dictSize = (U32)inputSize;
+    streamPtr->currentOffset += (U32)inputSize;
+
+    return result;
+}
+
+
+int LZ4_saveDict (LZ4_stream_t* LZ4_dict, char* safeBuffer, int dictSize)
+{
+    LZ4_stream_t_internal* dict = (LZ4_stream_t_internal*) LZ4_dict;
+    const BYTE* previousDictEnd = dict->dictionary + dict->dictSize;
+
+    if ((U32)dictSize > 64 KB) dictSize = 64 KB;   /* useless to define a dictionary > 64 KB */
+    if ((U32)dictSize > dict->dictSize) dictSize = dict->dictSize;
+
+    memmove(safeBuffer, previousDictEnd - dictSize, dictSize);
+
+    dict->dictionary = (const BYTE*)safeBuffer;
+    dict->dictSize = (U32)dictSize;
+
+    return dictSize;
+}
+
+
+
+/*******************************
+*  Decompression functions
+*******************************/
+/*
+ * This generic decompression function cover all use cases.
+ * It shall be instantiated several times, using different sets of directives
+ * Note that it is essential this generic function is really inlined,
+ * in order to remove useless branches during compilation optimization.
+ */
+FORCE_INLINE int LZ4_decompress_generic(
+                 const char* const source,
+                 char* const dest,
+                 int inputSize,
+                 int outputSize,         /* If endOnInput==endOnInputSize, this value is the max size of Output Buffer. */
+
+                 int endOnInput,         /* endOnOutputSize, endOnInputSize */
+                 int partialDecoding,    /* full, partial */
+                 int targetOutputSize,   /* only used if partialDecoding==partial */
+                 int dict,               /* noDict, withPrefix64k, usingExtDict */
+                 const BYTE* const lowPrefix,  /* == dest if dict == noDict */
+                 const BYTE* const dictStart,  /* only if dict==usingExtDict */
+                 const size_t dictSize         /* note : = 0 if noDict */
+                 )
+{
+    /* Local Variables */
+    const BYTE* ip = (const BYTE*) source;
+    const BYTE* const iend = ip + inputSize;
+
+    BYTE* op = (BYTE*) dest;
+    BYTE* const oend = op + outputSize;
+    BYTE* cpy;
+    BYTE* oexit = op + targetOutputSize;
+    const BYTE* const lowLimit = lowPrefix - dictSize;
+
+    const BYTE* const dictEnd = (const BYTE*)dictStart + dictSize;
+    const size_t dec32table[] = {4, 1, 2, 1, 4, 4, 4, 4};
+    const size_t dec64table[] = {0, 0, 0, (size_t)-1, 0, 1, 2, 3};
+
+    const int safeDecode = (endOnInput==endOnInputSize);
+    const int checkOffset = ((safeDecode) && (dictSize < (int)(64 KB)));
+
+
+    /* Special cases */
+    if ((partialDecoding) && (oexit> oend-MFLIMIT)) oexit = oend-MFLIMIT;                         /* targetOutputSize too high => decode everything */
+    if ((endOnInput) && (unlikely(outputSize==0))) return ((inputSize==1) && (*ip==0)) ? 0 : -1;  /* Empty output buffer */
+    if ((!endOnInput) && (unlikely(outputSize==0))) return (*ip==0?1:-1);
+
+
+    /* Main Loop */
+    while (1)
+    {
+        unsigned token;
+        size_t length;
+        const BYTE* match;
+
+        /* get literal length */
+        token = *ip++;
+        if ((length=(token>>ML_BITS)) == RUN_MASK)
+        {
+            unsigned s;
+            do
+            {
+                s = *ip++;
+                length += s;
+            }
+            while (likely((endOnInput)?ip<iend-RUN_MASK:1) && (s==255));
+            if ((safeDecode) && unlikely((size_t)(op+length)<(size_t)(op))) goto _output_error;   /* overflow detection */
+            if ((safeDecode) && unlikely((size_t)(ip+length)<(size_t)(ip))) goto _output_error;   /* overflow detection */
+        }
+
+        /* copy literals */
+        cpy = op+length;
+        if (((endOnInput) && ((cpy>(partialDecoding?oexit:oend-MFLIMIT)) || (ip+length>iend-(2+1+LASTLITERALS))) )
+            || ((!endOnInput) && (cpy>oend-COPYLENGTH)))
+        {
+            if (partialDecoding)
+            {
+                if (cpy > oend) goto _output_error;                           /* Error : write attempt beyond end of output buffer */
+                if ((endOnInput) && (ip+length > iend)) goto _output_error;   /* Error : read attempt beyond end of input buffer */
+            }
+            else
+            {
+                if ((!endOnInput) && (cpy != oend)) goto _output_error;       /* Error : block decoding must stop exactly there */
+                if ((endOnInput) && ((ip+length != iend) || (cpy > oend))) goto _output_error;   /* Error : input must be consumed */
+            }
+            memcpy(op, ip, length);
+            ip += length;
+            op += length;
+            break;     /* Necessarily EOF, due to parsing restrictions */
+        }
+        LZ4_wildCopy(op, ip, cpy);
+        ip += length; op = cpy;
+
+        /* get offset */
+        match = cpy - LZ4_readLE16(ip); ip+=2;
+        if ((checkOffset) && (unlikely(match < lowLimit))) goto _output_error;   /* Error : offset outside destination buffer */
+
+        /* get matchlength */
+        length = token & ML_MASK;
+        if (length == ML_MASK)
+        {
+            unsigned s;
+            do
+            {
+                if ((endOnInput) && (ip > iend-LASTLITERALS)) goto _output_error;
+                s = *ip++;
+                length += s;
+            } while (s==255);
+            if ((safeDecode) && unlikely((size_t)(op+length)<(size_t)op)) goto _output_error;   /* overflow detection */
+        }
+        length += MINMATCH;
+
+        /* check external dictionary */
+        if ((dict==usingExtDict) && (match < lowPrefix))
+        {
+            if (unlikely(op+length > oend-LASTLITERALS)) goto _output_error;   /* doesn't respect parsing restriction */
+
+            if (length <= (size_t)(lowPrefix-match))
+            {
+                /* match can be copied as a single segment from external dictionary */
+                match = dictEnd - (lowPrefix-match);
+                memmove(op, match, length); op += length;
+            }
+            else
+            {
+                /* match encompass external dictionary and current segment */
+                size_t copySize = (size_t)(lowPrefix-match);
+                memcpy(op, dictEnd - copySize, copySize);
+                op += copySize;
+                copySize = length - copySize;
+                if (copySize > (size_t)(op-lowPrefix))   /* overlap within current segment */
+                {
+                    BYTE* const endOfMatch = op + copySize;
+                    const BYTE* copyFrom = lowPrefix;
+                    while (op < endOfMatch) *op++ = *copyFrom++;
+                }
+                else
+                {
+                    memcpy(op, lowPrefix, copySize);
+                    op += copySize;
+                }
+            }
+            continue;
+        }
+
+        /* copy repeated sequence */
+        cpy = op + length;
+        if (unlikely((op-match)<8))
+        {
+            const size_t dec64 = dec64table[op-match];
+            op[0] = match[0];
+            op[1] = match[1];
+            op[2] = match[2];
+            op[3] = match[3];
+            match += dec32table[op-match];
+            LZ4_copy4(op+4, match);
+            op += 8; match -= dec64;
+        } else { LZ4_copy8(op, match); op+=8; match+=8; }
+
+        if (unlikely(cpy>oend-12))
+        {
+            if (cpy > oend-LASTLITERALS) goto _output_error;    /* Error : last LASTLITERALS bytes must be literals */
+            if (op < oend-8)
+            {
+                LZ4_wildCopy(op, match, oend-8);
+                match += (oend-8) - op;
+                op = oend-8;
+            }
+            while (op<cpy) *op++ = *match++;
+        }
+        else
+            LZ4_wildCopy(op, match, cpy);
+        op=cpy;   /* correction */
+    }
+
+    /* end of decoding */
+    if (endOnInput)
+       return (int) (((char*)op)-dest);     /* Nb of output bytes decoded */
+    else
+       return (int) (((const char*)ip)-source);   /* Nb of input bytes read */
+
+    /* Overflow error detected */
+_output_error:
+    return (int) (-(((const char*)ip)-source))-1;
+}
+
+
+int LZ4_decompress_safe(const char* source, char* dest, int compressedSize, int maxDecompressedSize)
+{
+    return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, full, 0, noDict, (BYTE*)dest, NULL, 0);
+}
+
+int LZ4_decompress_safe_partial(const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize)
+{
+    return LZ4_decompress_generic(source, dest, compressedSize, maxDecompressedSize, endOnInputSize, partial, targetOutputSize, noDict, (BYTE*)dest, NULL, 0);
+}
+
+int LZ4_decompress_fast(const char* source, char* dest, int originalSize)
+{
+    return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)(dest - 64 KB), NULL, 64 KB);
+}
+
+
+/* streaming decompression functions */
+
+typedef struct
+{
+    const BYTE* externalDict;
+    size_t extDictSize;
+    const BYTE* prefixEnd;
+    size_t prefixSize;
+} LZ4_streamDecode_t_internal;
+
+/*
+ * If you prefer dynamic allocation methods,
+ * LZ4_createStreamDecode()
+ * provides a pointer (void*) towards an initialized LZ4_streamDecode_t structure.
+ */
+LZ4_streamDecode_t* LZ4_createStreamDecode(void)
+{
+    LZ4_streamDecode_t* lz4s = (LZ4_streamDecode_t*) ALLOCATOR(1, sizeof(LZ4_streamDecode_t));
+    return lz4s;
+}
+
+int LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream)
+{
+    FREEMEM(LZ4_stream);
+    return 0;
+}
+
+/*
+ * LZ4_setStreamDecode
+ * Use this function to instruct where to find the dictionary
+ * This function is not necessary if previous data is still available where it was decoded.
+ * Loading a size of 0 is allowed (same effect as no dictionary).
+ * Return : 1 if OK, 0 if error
+ */
+int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize)
+{
+    LZ4_streamDecode_t_internal* lz4sd = (LZ4_streamDecode_t_internal*) LZ4_streamDecode;
+    lz4sd->prefixSize = (size_t) dictSize;
+    lz4sd->prefixEnd = (const BYTE*) dictionary + dictSize;
+    lz4sd->externalDict = NULL;
+    lz4sd->extDictSize  = 0;
+    return 1;
+}
+
+/*
+*_continue() :
+    These decoding functions allow decompression of multiple blocks in "streaming" mode.
+    Previously decoded blocks must still be available at the memory position where they were decoded.
+    If it's not possible, save the relevant part of decoded data into a safe buffer,
+    and indicate where it stands using LZ4_setStreamDecode()
+*/
+int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxOutputSize)
+{
+    LZ4_streamDecode_t_internal* lz4sd = (LZ4_streamDecode_t_internal*) LZ4_streamDecode;
+    int result;
+
+    if (lz4sd->prefixEnd == (BYTE*)dest)
+    {
+        result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize,
+                                        endOnInputSize, full, 0,
+                                        usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize);
+        if (result <= 0) return result;
+        lz4sd->prefixSize += result;
+        lz4sd->prefixEnd  += result;
+    }
+    else
+    {
+        lz4sd->extDictSize = lz4sd->prefixSize;
+        lz4sd->externalDict = lz4sd->prefixEnd - lz4sd->extDictSize;
+        result = LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize,
+                                        endOnInputSize, full, 0,
+                                        usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize);
+        if (result <= 0) return result;
+        lz4sd->prefixSize = result;
+        lz4sd->prefixEnd  = (BYTE*)dest + result;
+    }
+
+    return result;
+}
+
+int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize)
+{
+    LZ4_streamDecode_t_internal* lz4sd = (LZ4_streamDecode_t_internal*) LZ4_streamDecode;
+    int result;
+
+    if (lz4sd->prefixEnd == (BYTE*)dest)
+    {
+        result = LZ4_decompress_generic(source, dest, 0, originalSize,
+                                        endOnOutputSize, full, 0,
+                                        usingExtDict, lz4sd->prefixEnd - lz4sd->prefixSize, lz4sd->externalDict, lz4sd->extDictSize);
+        if (result <= 0) return result;
+        lz4sd->prefixSize += originalSize;
+        lz4sd->prefixEnd  += originalSize;
+    }
+    else
+    {
+        lz4sd->extDictSize = lz4sd->prefixSize;
+        lz4sd->externalDict = (BYTE*)dest - lz4sd->extDictSize;
+        result = LZ4_decompress_generic(source, dest, 0, originalSize,
+                                        endOnOutputSize, full, 0,
+                                        usingExtDict, (BYTE*)dest, lz4sd->externalDict, lz4sd->extDictSize);
+        if (result <= 0) return result;
+        lz4sd->prefixSize = originalSize;
+        lz4sd->prefixEnd  = (BYTE*)dest + originalSize;
+    }
+
+    return result;
+}
+
+
+/*
+Advanced decoding functions :
+*_usingDict() :
+    These decoding functions work the same as "_continue" ones,
+    the dictionary must be explicitly provided within parameters
+*/
+
+FORCE_INLINE int LZ4_decompress_usingDict_generic(const char* source, char* dest, int compressedSize, int maxOutputSize, int safe, const char* dictStart, int dictSize)
+{
+    if (dictSize==0)
+        return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest, NULL, 0);
+    if (dictStart+dictSize == dest)
+    {
+        if (dictSize >= (int)(64 KB - 1))
+            return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, withPrefix64k, (BYTE*)dest-64 KB, NULL, 0);
+        return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, noDict, (BYTE*)dest-dictSize, NULL, 0);
+    }
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, safe, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize);
+}
+
+int LZ4_decompress_safe_usingDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize)
+{
+    return LZ4_decompress_usingDict_generic(source, dest, compressedSize, maxOutputSize, 1, dictStart, dictSize);
+}
+
+int LZ4_decompress_fast_usingDict(const char* source, char* dest, int originalSize, const char* dictStart, int dictSize)
+{
+    return LZ4_decompress_usingDict_generic(source, dest, 0, originalSize, 0, dictStart, dictSize);
+}
+
+/* debug function */
+int LZ4_decompress_safe_forceExtDict(const char* source, char* dest, int compressedSize, int maxOutputSize, const char* dictStart, int dictSize)
+{
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, usingExtDict, (BYTE*)dest, (const BYTE*)dictStart, dictSize);
+}
+
+
+/***************************************************
+*  Obsolete Functions
+***************************************************/
+/* obsolete compression functions */
+int LZ4_compress_limitedOutput(const char* source, char* dest, int inputSize, int maxOutputSize) { return LZ4_compress_default(source, dest, inputSize, maxOutputSize); }
+int LZ4_compress(const char* source, char* dest, int inputSize) { return LZ4_compress_default(source, dest, inputSize, LZ4_compressBound(inputSize)); }
+int LZ4_compress_limitedOutput_withState (void* state, const char* src, char* dst, int srcSize, int dstSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, dstSize, 1); }
+int LZ4_compress_withState (void* state, const char* src, char* dst, int srcSize) { return LZ4_compress_fast_extState(state, src, dst, srcSize, LZ4_compressBound(srcSize), 1); }
+int LZ4_compress_limitedOutput_continue (LZ4_stream_t* LZ4_stream, const char* src, char* dst, int srcSize, int maxDstSize) { return LZ4_compress_fast_continue(LZ4_stream, src, dst, srcSize, maxDstSize, 1); }
+int LZ4_compress_continue (LZ4_stream_t* LZ4_stream, const char* source, char* dest, int inputSize) { return LZ4_compress_fast_continue(LZ4_stream, source, dest, inputSize, LZ4_compressBound(inputSize), 1); }
+
+/*
+These function names are deprecated and should no longer be used.
+They are only provided here for compatibility with older user programs.
+- LZ4_uncompress is totally equivalent to LZ4_decompress_fast
+- LZ4_uncompress_unknownOutputSize is totally equivalent to LZ4_decompress_safe
+*/
+int LZ4_uncompress (const char* source, char* dest, int outputSize) { return LZ4_decompress_fast(source, dest, outputSize); }
+int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize) { return LZ4_decompress_safe(source, dest, isize, maxOutputSize); }
+
+
+/* Obsolete Streaming functions */
+
+int LZ4_sizeofStreamState() { return LZ4_STREAMSIZE; }
+
+static void LZ4_init(LZ4_stream_t_internal* lz4ds, BYTE* base)
+{
+    MEM_INIT(lz4ds, 0, LZ4_STREAMSIZE);
+    lz4ds->bufferStart = base;
+}
+
+int LZ4_resetStreamState(void* state, char* inputBuffer)
+{
+    if ((((size_t)state) & 3) != 0) return 1;   /* Error : pointer is not aligned on 4-bytes boundary */
+    LZ4_init((LZ4_stream_t_internal*)state, (BYTE*)inputBuffer);
+    return 0;
+}
+
+void* LZ4_create (char* inputBuffer)
+{
+    void* lz4ds = ALLOCATOR(8, LZ4_STREAMSIZE_U64);
+    LZ4_init ((LZ4_stream_t_internal*)lz4ds, (BYTE*)inputBuffer);
+    return lz4ds;
+}
+
+char* LZ4_slideInputBuffer (void* LZ4_Data)
+{
+    LZ4_stream_t_internal* ctx = (LZ4_stream_t_internal*)LZ4_Data;
+    int dictSize = LZ4_saveDict((LZ4_stream_t*)LZ4_Data, (char*)ctx->bufferStart, 64 KB);
+    return (char*)(ctx->bufferStart + dictSize);
+}
+
+/* Obsolete streaming decompression functions */
+
+int LZ4_decompress_safe_withPrefix64k(const char* source, char* dest, int compressedSize, int maxOutputSize)
+{
+    return LZ4_decompress_generic(source, dest, compressedSize, maxOutputSize, endOnInputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB);
+}
+
+int LZ4_decompress_fast_withPrefix64k(const char* source, char* dest, int originalSize)
+{
+    return LZ4_decompress_generic(source, dest, 0, originalSize, endOnOutputSize, full, 0, withPrefix64k, (BYTE*)dest - 64 KB, NULL, 64 KB);
+}
+
+#endif   /* LZ4_COMMONDEFS_ONLY */
+
diff --git a/lib/gis/lz4.h b/lib/gis/lz4.h
new file mode 100644
index 0000000..0b8787f
--- /dev/null
+++ b/lib/gis/lz4.h
@@ -0,0 +1,360 @@
+/*
+   LZ4 - Fast LZ compression algorithm
+   Header File
+   Copyright (C) 2011-2015, Yann Collet.
+
+   BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions are
+   met:
+
+       * Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+       * Redistributions in binary form must reproduce the above
+   copyright notice, this list of conditions and the following disclaimer
+   in the documentation and/or other materials provided with the
+   distribution.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+   You can contact the author at :
+   - LZ4 source repository : https://github.com/Cyan4973/lz4
+   - LZ4 public forum : https://groups.google.com/forum/#!forum/lz4c
+*/
+#pragma once
+
+#if defined (__cplusplus)
+extern "C" {
+#endif
+
+/*
+ * lz4.h provides block compression functions, and gives full buffer control to programmer.
+ * If you need to generate inter-operable compressed data (respecting LZ4 frame specification),
+ * and can let the library handle its own memory, please use lz4frame.h instead.
+*/
+
+/**************************************
+*  Version
+**************************************/
+#define LZ4_VERSION_MAJOR    1    /* for breaking interface changes  */
+#define LZ4_VERSION_MINOR    7    /* for new (non-breaking) interface capabilities */
+#define LZ4_VERSION_RELEASE  1    /* for tweaks, bug-fixes, or development */
+#define LZ4_VERSION_NUMBER (LZ4_VERSION_MAJOR *100*100 + LZ4_VERSION_MINOR *100 + LZ4_VERSION_RELEASE)
+int LZ4_versionNumber (void);
+
+/**************************************
+*  Tuning parameter
+**************************************/
+/*
+ * LZ4_MEMORY_USAGE :
+ * Memory usage formula : N->2^N Bytes (examples : 10 -> 1KB; 12 -> 4KB ; 16 -> 64KB; 20 -> 1MB; etc.)
+ * Increasing memory usage improves compression ratio
+ * Reduced memory usage can improve speed, due to cache effect
+ * Default value is 14, for 16KB, which nicely fits into Intel x86 L1 cache
+ */
+#define LZ4_MEMORY_USAGE 14
+
+
+/**************************************
+*  Simple Functions
+**************************************/
+
+int LZ4_compress_default(const char* source, char* dest, int sourceSize, int maxDestSize);
+int LZ4_decompress_safe (const char* source, char* dest, int compressedSize, int maxDecompressedSize);
+
+/*
+LZ4_compress_default() :
+    Compresses 'sourceSize' bytes from buffer 'source'
+    into already allocated 'dest' buffer of size 'maxDestSize'.
+    Compression is guaranteed to succeed if 'maxDestSize' >= LZ4_compressBound(sourceSize).
+    It also runs faster, so it's a recommended setting.
+    If the function cannot compress 'source' into a more limited 'dest' budget,
+    compression stops *immediately*, and the function result is zero.
+    As a consequence, 'dest' content is not valid.
+    This function never writes outside 'dest' buffer, nor read outside 'source' buffer.
+        sourceSize  : Max supported value is LZ4_MAX_INPUT_VALUE
+        maxDestSize : full or partial size of buffer 'dest' (which must be already allocated)
+        return : the number of bytes written into buffer 'dest' (necessarily <= maxOutputSize)
+              or 0 if compression fails
+
+LZ4_decompress_safe() :
+    compressedSize : is the precise full size of the compressed block.
+    maxDecompressedSize : is the size of destination buffer, which must be already allocated.
+    return : the number of bytes decompressed into destination buffer (necessarily <= maxDecompressedSize)
+             If destination buffer is not large enough, decoding will stop and output an error code (<0).
+             If the source stream is detected malformed, the function will stop decoding and return a negative result.
+             This function is protected against buffer overflow exploits, including malicious data packets.
+             It never writes outside output buffer, nor reads outside input buffer.
+*/
+
+
+/**************************************
+*  Advanced Functions
+**************************************/
+#define LZ4_MAX_INPUT_SIZE        0x7E000000   /* 2 113 929 216 bytes */
+#define LZ4_COMPRESSBOUND(isize)  ((unsigned)(isize) > (unsigned)LZ4_MAX_INPUT_SIZE ? 0 : (isize) + ((isize)/255) + 16)
+
+/*
+LZ4_compressBound() :
+    Provides the maximum size that LZ4 compression may output in a "worst case" scenario (input data not compressible)
+    This function is primarily useful for memory allocation purposes (destination buffer size).
+    Macro LZ4_COMPRESSBOUND() is also provided for compilation-time evaluation (stack memory allocation for example).
+    Note that LZ4_compress_default() compress faster when dest buffer size is >= LZ4_compressBound(srcSize)
+        inputSize  : max supported value is LZ4_MAX_INPUT_SIZE
+        return : maximum output size in a "worst case" scenario
+              or 0, if input size is too large ( > LZ4_MAX_INPUT_SIZE)
+*/
+int LZ4_compressBound(int inputSize);
+
+/*
+LZ4_compress_fast() :
+    Same as LZ4_compress_default(), but allows selecting an "acceleration" factor.
+    The larger the acceleration value, the faster the algorithm, but also the lesser the compression.
+    It's a trade-off. It can be fine tuned, with each successive value providing roughly +~3% to speed.
+    An acceleration value of "1" is the same as regular LZ4_compress_default()
+    Values <= 0 will be replaced by ACCELERATION_DEFAULT (see lz4.c), which is 1.
+*/
+int LZ4_compress_fast (const char* source, char* dest, int sourceSize, int maxDestSize, int acceleration);
+
+
+/*
+LZ4_compress_fast_extState() :
+    Same compression function, just using an externally allocated memory space to store compression state.
+    Use LZ4_sizeofState() to know how much memory must be allocated,
+    and allocate it on 8-bytes boundaries (using malloc() typically).
+    Then, provide it as 'void* state' to compression function.
+*/
+int LZ4_sizeofState(void);
+int LZ4_compress_fast_extState (void* state, const char* source, char* dest, int inputSize, int maxDestSize, int acceleration);
+
+
+/*
+LZ4_compress_destSize() :
+    Reverse the logic, by compressing as much data as possible from 'source' buffer
+    into already allocated buffer 'dest' of size 'targetDestSize'.
+    This function either compresses the entire 'source' content into 'dest' if it's large enough,
+    or fill 'dest' buffer completely with as much data as possible from 'source'.
+        *sourceSizePtr : will be modified to indicate how many bytes where read from 'source' to fill 'dest'.
+                         New value is necessarily <= old value.
+        return : Nb bytes written into 'dest' (necessarily <= targetDestSize)
+              or 0 if compression fails
+*/
+int LZ4_compress_destSize (const char* source, char* dest, int* sourceSizePtr, int targetDestSize);
+
+
+/*
+LZ4_decompress_fast() :
+    originalSize : is the original and therefore uncompressed size
+    return : the number of bytes read from the source buffer (in other words, the compressed size)
+             If the source stream is detected malformed, the function will stop decoding and return a negative result.
+             Destination buffer must be already allocated. Its size must be a minimum of 'originalSize' bytes.
+    note : This function fully respect memory boundaries for properly formed compressed data.
+           It is a bit faster than LZ4_decompress_safe().
+           However, it does not provide any protection against intentionally modified data stream (malicious input).
+           Use this function in trusted environment only (data to decode comes from a trusted source).
+*/
+int LZ4_decompress_fast (const char* source, char* dest, int originalSize);
+
+/*
+LZ4_decompress_safe_partial() :
+    This function decompress a compressed block of size 'compressedSize' at position 'source'
+    into destination buffer 'dest' of size 'maxDecompressedSize'.
+    The function tries to stop decompressing operation as soon as 'targetOutputSize' has been reached,
+    reducing decompression time.
+    return : the number of bytes decoded in the destination buffer (necessarily <= maxDecompressedSize)
+       Note : this number can be < 'targetOutputSize' should the compressed block to decode be smaller.
+             Always control how many bytes were decoded.
+             If the source stream is detected malformed, the function will stop decoding and return a negative result.
+             This function never writes outside of output buffer, and never reads outside of input buffer. It is therefore protected against malicious data packets
+*/
+int LZ4_decompress_safe_partial (const char* source, char* dest, int compressedSize, int targetOutputSize, int maxDecompressedSize);
+
+
+/***********************************************
+*  Streaming Compression Functions
+***********************************************/
+#define LZ4_STREAMSIZE_U64 ((1 << (LZ4_MEMORY_USAGE-3)) + 4)
+#define LZ4_STREAMSIZE     (LZ4_STREAMSIZE_U64 * sizeof(long long))
+/*
+ * LZ4_stream_t
+ * information structure to track an LZ4 stream.
+ * important : init this structure content before first use !
+ * note : only allocated directly the structure if you are statically linking LZ4
+ *        If you are using liblz4 as a DLL, please use below construction methods instead.
+ */
+typedef struct { long long table[LZ4_STREAMSIZE_U64]; } LZ4_stream_t;
+
+/*
+ * LZ4_resetStream
+ * Use this function to init an allocated LZ4_stream_t structure
+ */
+void LZ4_resetStream (LZ4_stream_t* streamPtr);
+
+/*
+ * LZ4_createStream will allocate and initialize an LZ4_stream_t structure
+ * LZ4_freeStream releases its memory.
+ * In the context of a DLL (liblz4), please use these methods rather than the static struct.
+ * They are more future proof, in case of a change of LZ4_stream_t size.
+ */
+LZ4_stream_t* LZ4_createStream(void);
+int           LZ4_freeStream (LZ4_stream_t* streamPtr);
+
+/*
+ * LZ4_loadDict
+ * Use this function to load a static dictionary into LZ4_stream.
+ * Any previous data will be forgotten, only 'dictionary' will remain in memory.
+ * Loading a size of 0 is allowed.
+ * Return : dictionary size, in bytes (necessarily <= 64 KB)
+ */
+int LZ4_loadDict (LZ4_stream_t* streamPtr, const char* dictionary, int dictSize);
+
+/*
+ * LZ4_compress_fast_continue
+ * Compress buffer content 'src', using data from previously compressed blocks as dictionary to improve compression ratio.
+ * Important : Previous data blocks are assumed to still be present and unmodified !
+ * 'dst' buffer must be already allocated.
+ * If maxDstSize >= LZ4_compressBound(srcSize), compression is guaranteed to succeed, and runs faster.
+ * If not, and if compressed data cannot fit into 'dst' buffer size, compression stops, and function returns a zero.
+ */
+int LZ4_compress_fast_continue (LZ4_stream_t* streamPtr, const char* src, char* dst, int srcSize, int maxDstSize, int acceleration);
+
+/*
+ * LZ4_saveDict
+ * If previously compressed data block is not guaranteed to remain available at its memory location
+ * save it into a safer place (char* safeBuffer)
+ * Note : you don't need to call LZ4_loadDict() afterwards,
+ *        dictionary is immediately usable, you can therefore call LZ4_compress_fast_continue()
+ * Return : saved dictionary size in bytes (necessarily <= dictSize), or 0 if error
+ */
+int LZ4_saveDict (LZ4_stream_t* streamPtr, char* safeBuffer, int dictSize);
+
+
+/************************************************
+*  Streaming Decompression Functions
+************************************************/
+
+#define LZ4_STREAMDECODESIZE_U64  4
+#define LZ4_STREAMDECODESIZE     (LZ4_STREAMDECODESIZE_U64 * sizeof(unsigned long long))
+typedef struct { unsigned long long table[LZ4_STREAMDECODESIZE_U64]; } LZ4_streamDecode_t;
+/*
+ * LZ4_streamDecode_t
+ * information structure to track an LZ4 stream.
+ * init this structure content using LZ4_setStreamDecode or memset() before first use !
+ *
+ * In the context of a DLL (liblz4) please prefer usage of construction methods below.
+ * They are more future proof, in case of a change of LZ4_streamDecode_t size in the future.
+ * LZ4_createStreamDecode will allocate and initialize an LZ4_streamDecode_t structure
+ * LZ4_freeStreamDecode releases its memory.
+ */
+LZ4_streamDecode_t* LZ4_createStreamDecode(void);
+int                 LZ4_freeStreamDecode (LZ4_streamDecode_t* LZ4_stream);
+
+/*
+ * LZ4_setStreamDecode
+ * Use this function to instruct where to find the dictionary.
+ * Setting a size of 0 is allowed (same effect as reset).
+ * Return : 1 if OK, 0 if error
+ */
+int LZ4_setStreamDecode (LZ4_streamDecode_t* LZ4_streamDecode, const char* dictionary, int dictSize);
+
+/*
+*_continue() :
+    These decoding functions allow decompression of multiple blocks in "streaming" mode.
+    Previously decoded blocks *must* remain available at the memory position where they were decoded (up to 64 KB)
+    In the case of a ring buffers, decoding buffer must be either :
+    - Exactly same size as encoding buffer, with same update rule (block boundaries at same positions)
+      In which case, the decoding & encoding ring buffer can have any size, including very small ones ( < 64 KB).
+    - Larger than encoding buffer, by a minimum of maxBlockSize more bytes.
+      maxBlockSize is implementation dependent. It's the maximum size you intend to compress into a single block.
+      In which case, encoding and decoding buffers do not need to be synchronized,
+      and encoding ring buffer can have any size, including small ones ( < 64 KB).
+    - _At least_ 64 KB + 8 bytes + maxBlockSize.
+      In which case, encoding and decoding buffers do not need to be synchronized,
+      and encoding ring buffer can have any size, including larger than decoding buffer.
+    Whenever these conditions are not possible, save the last 64KB of decoded data into a safe buffer,
+    and indicate where it is saved using LZ4_setStreamDecode()
+*/
+int LZ4_decompress_safe_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int compressedSize, int maxDecompressedSize);
+int LZ4_decompress_fast_continue (LZ4_streamDecode_t* LZ4_streamDecode, const char* source, char* dest, int originalSize);
+
+
+/*
+Advanced decoding functions :
+*_usingDict() :
+    These decoding functions work the same as
+    a combination of LZ4_setStreamDecode() followed by LZ4_decompress_x_continue()
+    They are stand-alone. They don't need nor update an LZ4_streamDecode_t structure.
+*/
+int LZ4_decompress_safe_usingDict (const char* source, char* dest, int compressedSize, int maxDecompressedSize, const char* dictStart, int dictSize);
+int LZ4_decompress_fast_usingDict (const char* source, char* dest, int originalSize, const char* dictStart, int dictSize);
+
+
+
+/**************************************
+*  Obsolete Functions
+**************************************/
+/* Deprecate Warnings */
+/* Should these warnings messages be a problem,
+   it is generally possible to disable them,
+   with -Wno-deprecated-declarations for gcc
+   or _CRT_SECURE_NO_WARNINGS in Visual for example.
+   You can also define LZ4_DEPRECATE_WARNING_DEFBLOCK. */
+#ifndef LZ4_DEPRECATE_WARNING_DEFBLOCK
+#  define LZ4_DEPRECATE_WARNING_DEFBLOCK
+#  define LZ4_GCC_VERSION (__GNUC__ * 100 + __GNUC_MINOR__)
+#  if (LZ4_GCC_VERSION >= 405) || defined(__clang__)
+#    define LZ4_DEPRECATED(message) __attribute__((deprecated(message)))
+#  elif (LZ4_GCC_VERSION >= 301)
+#    define LZ4_DEPRECATED(message) __attribute__((deprecated))
+#  elif defined(_MSC_VER)
+#    define LZ4_DEPRECATED(message) __declspec(deprecated(message))
+#  else
+#    pragma message("WARNING: You need to implement LZ4_DEPRECATED for this compiler")
+#    define LZ4_DEPRECATED(message)
+#  endif
+#endif /* LZ4_DEPRECATE_WARNING_DEFBLOCK */
+
+/* Obsolete compression functions */
+/* These functions are planned to start generate warnings by r131 approximately */
+int LZ4_compress               (const char* source, char* dest, int sourceSize);
+int LZ4_compress_limitedOutput (const char* source, char* dest, int sourceSize, int maxOutputSize);
+int LZ4_compress_withState               (void* state, const char* source, char* dest, int inputSize);
+int LZ4_compress_limitedOutput_withState (void* state, const char* source, char* dest, int inputSize, int maxOutputSize);
+int LZ4_compress_continue                (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize);
+int LZ4_compress_limitedOutput_continue  (LZ4_stream_t* LZ4_streamPtr, const char* source, char* dest, int inputSize, int maxOutputSize);
+
+/* Obsolete decompression functions */
+/* These function names are completely deprecated and must no longer be used.
+   They are only provided here for compatibility with older programs.
+    - LZ4_uncompress is the same as LZ4_decompress_fast
+    - LZ4_uncompress_unknownOutputSize is the same as LZ4_decompress_safe
+   These function prototypes are now disabled; uncomment them only if you really need them.
+   It is highly recommended to stop using these prototypes and migrate to maintained ones */
+/* int LZ4_uncompress (const char* source, char* dest, int outputSize); */
+/* int LZ4_uncompress_unknownOutputSize (const char* source, char* dest, int isize, int maxOutputSize); */
+
+/* Obsolete streaming functions; use new streaming interface whenever possible */
+LZ4_DEPRECATED("use LZ4_createStream() instead") void* LZ4_create (char* inputBuffer);
+LZ4_DEPRECATED("use LZ4_createStream() instead") int   LZ4_sizeofStreamState(void);
+LZ4_DEPRECATED("use LZ4_resetStream() instead")  int   LZ4_resetStreamState(void* state, char* inputBuffer);
+LZ4_DEPRECATED("use LZ4_saveDict() instead")     char* LZ4_slideInputBuffer (void* state);
+
+/* Obsolete streaming decoding functions */
+LZ4_DEPRECATED("use LZ4_decompress_safe_usingDict() instead") int LZ4_decompress_safe_withPrefix64k (const char* src, char* dst, int compressedSize, int maxDstSize);
+LZ4_DEPRECATED("use LZ4_decompress_fast_usingDict() instead") int LZ4_decompress_fast_withPrefix64k (const char* src, char* dst, int originalSize);
+
+
+#if defined (__cplusplus)
+}
+#endif
diff --git a/lib/gis/mapset_msc.c b/lib/gis/mapset_msc.c
index 8ec879e..e5b4903 100644
--- a/lib/gis/mapset_msc.c
+++ b/lib/gis/mapset_msc.c
@@ -19,30 +19,59 @@
 #include <grass/gis.h>
 #include <grass/glocale.h>
 
+static int make_mapset_element(const char *, const char *);
+
 /*!
    \brief Create element in the current mapset.
 
-   Make the specified element in the current mapset
-   will check for the existence of the element and
-   do nothing if it is found so this routine
-   can be called even if the element already exists.
-
-   \param element element to be created in mapset
+   Make the specified element in the current mapset will check for the
+   existence of the element and do nothing if it is found so this
+   routine can be called even if the element already exists.
+   
+   Calls G_fatal_error() on failure.
+   
+   \param p_element element to be created in mapset
 
-   \return 0 ?
-   \return ?
+   \return 0 no element defined
+   \return 1 on success
  */
 int G_make_mapset_element(const char *p_element)
 {
     char path[GPATH_MAX];
-    char *p;
+    
+    G_file_name(path, NULL, NULL, G_mapset());
+    return make_mapset_element(path, p_element);
+}
+
+/*!
+   \brief Create element in the temporary directory.
+
+   See G_file_name_tmp() for details.
+
+   \param p_element element to be created in mapset
+
+   \return 0 no element defined
+   \return 1 on success
+ */
+int G_make_mapset_element_tmp(const char *p_element)
+{
+    char path[GPATH_MAX];
+    
+    G_file_name_tmp(path, NULL, NULL, G_mapset());
+    return make_mapset_element(path, p_element);
+}
+
+int make_mapset_element(const char *p_path, const char *p_element)
+{
+    char path[GPATH_MAX], *p;
     const char *element;
 
     element = p_element;
     if (*element == 0)
 	return 0;
 
-    G_file_name(p = path, NULL, NULL, G_mapset());
+    strncpy(path, p_path, GPATH_MAX);
+    p = path;
     while (*p)
 	p++;
     /* add trailing slash if missing */
@@ -75,10 +104,10 @@ int G_make_mapset_element(const char *p_element)
    \brief Create misc element in the current mapset.
 
    \param dir directory path
-   \param name element name
+   \param name element to be created in mapset
 
-   \return 0 ?
-   \return ?
+   \return 0 no element defined
+   \return 1 on success
  */
 int G__make_mapset_element_misc(const char *dir, const char *name)
 {
diff --git a/lib/gis/mapset_nme.c b/lib/gis/mapset_nme.c
index 7950a31..7685fd0 100644
--- a/lib/gis/mapset_nme.c
+++ b/lib/gis/mapset_nme.c
@@ -17,7 +17,7 @@
 #include <unistd.h>
 #include <grass/gis.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 static struct state {
     struct list {
diff --git a/lib/gis/open.c b/lib/gis/open.c
index 84d10b6..5445897 100644
--- a/lib/gis/open.c
+++ b/lib/gis/open.c
@@ -3,7 +3,7 @@
  * 
  * \brief GIS Library - Open file functions
  *
- * (C) 1999-2009 by the GRASS Development Team
+ * (C) 1999-2015 by the GRASS Development Team
  *
  * This program is free software under the GNU General Public
  * License (>=v2). Read the file COPYING that comes with GRASS
@@ -22,7 +22,7 @@
 #include <grass/gis.h>
 #include <grass/glocale.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 /*!
   \brief Lowest level open routine.
@@ -53,12 +53,14 @@ static int G__open(const char *element,
 		   const char *name, const char *mapset, int mode)
 {
     int fd;
+    int is_tmp;
     char path[GPATH_MAX];
     char xname[GNAME_MAX], xmapset[GMAPSET_MAX];
-
-
+    
     G__check_gisinit();
 
+    is_tmp = (element && strncmp(element, ".tmp", 3) == 0);
+
     /* READ */
     if (mode == 0) {
 	if (G_name_is_fully_qualified(name, xname, xmapset)) {
@@ -71,13 +73,18 @@ static int G__open(const char *element,
 	    mapset = xmapset;
 	}
 
-	mapset = G_find_file2(element, name, mapset);
-
-	if (!mapset)
-	    return -1;
-
-	G_file_name(path, element, name, mapset);
-
+        if (!is_tmp) {
+            mapset = G_find_file2(element, name, mapset);
+            
+            if (!mapset)
+                return -1;
+
+            G_file_name(path, element, name, mapset);
+        }
+        else {
+            G_file_name_tmp(path, element, name, mapset);
+        }
+        
 	if ((fd = open(path, 0)) < 0)
 	    G_warning(_("G__open(read): Unable to open '%s': %s"),
 	              path, strerror(errno));
@@ -98,10 +105,16 @@ static int G__open(const char *element,
 	if (*name && G_legal_filename(name) == -1)
 	    return -1;
 
-	G_file_name(path, element, name, mapset);
-
+        if (!is_tmp)
+            G_file_name(path, element, name, mapset);
+        else
+            G_file_name_tmp(path, element, name, mapset);
+        
 	if (mode == 1 || access(path, 0) != 0) {
-	    G_make_mapset_element(element);
+            if (is_tmp)
+                G_make_mapset_element_tmp(element);
+            else
+                G_make_mapset_element(element);
 	    close(open(path, O_WRONLY | O_CREAT | O_TRUNC, 0666));
 	}
 
diff --git a/lib/gis/open_misc.c b/lib/gis/open_misc.c
index 5da534d..76be18d 100644
--- a/lib/gis/open_misc.c
+++ b/lib/gis/open_misc.c
@@ -29,7 +29,7 @@
 #include <grass/gis.h>
 #include <grass/glocale.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 static int G__open_misc(const char *dir,
 			const char *element,
diff --git a/lib/gis/parser.c b/lib/gis/parser.c
index 27537cc..795b5f0 100644
--- a/lib/gis/parser.c
+++ b/lib/gis/parser.c
@@ -64,7 +64,9 @@
  *    that the "map" option is required and also that the number 12 is
  *    out of range.  The acceptable range (or list) will be printed.
  *
- * (C) 2001-2014 by the GRASS Development Team
+ * Overview table: <a href="parser_standard_options.html">Parser standard options</a>
+ * 
+ * (C) 2001-2015 by the GRASS Development Team
  *
  * This program is free software under the GNU General Public License
  * (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -319,6 +321,7 @@ int G_parser(int argc, char **argv)
 {
     int need_first_opt;
     int opt_checked = 0;
+    const char *gui_envvar;
     char *ptr, *tmp_name, *err;
     int i;
     struct Option *opt;
@@ -431,9 +434,10 @@ int G_parser(int argc, char **argv)
     }
 
     /* If there are NO arguments, go interactive */
-
+    gui_envvar = G_getenv_nofatal("GUI");
     if (argc < 2 && (st->has_required || G__has_required_rule())
-        && !st->no_interactive && isatty(0)) {
+        && !st->no_interactive && isatty(0) &&
+        (gui_envvar && G_strcasecmp(gui_envvar, "text") != 0)) {
 	if (module_gui_wx() == 0)
             return -1;
     }
@@ -537,6 +541,21 @@ int G_parser(int argc, char **argv)
 		st->quiet = 1;	/* for passing to gui init */
 	    }
 
+            /* Super quiet option */
+            else if (strcmp(ptr, "--qq") == 0 ) {
+                char buff[32];
+
+                /* print nothing, but errors  */
+                st->module_info.verbose = G_verbose_min();
+                sprintf(buff, "GRASS_VERBOSE=%d", G_verbose_min());
+                putenv(G_store(buff));
+                G_suppress_warnings(TRUE);
+                if (st->quiet == -1) {
+                    G_warning(_("Use either --qq or --verbose flag, not both. Assuming --qq."));
+                }
+                st->quiet = 1;  /* for passing to gui init */
+            }
+
 	    /* Force gui to come up */
 	    else if (strcmp(ptr, "--ui") == 0) {
 		force_gui = TRUE;
@@ -617,9 +636,11 @@ int G_parser(int argc, char **argv)
  * Creates a command-line that runs the current command completely
  * non-interactive.
  *
+ * \param original_path TRUE if original path should be used, FALSE for
+ *  stripped and clean name of the module
  * \return pointer to a char string
  */
-char *G_recreate_command(void)
+char *recreate_command(int original_path)
 {
     char *buff;
     char flg[4];
@@ -636,7 +657,10 @@ char *G_recreate_command(void)
 
     buff = G_calloc(1024, sizeof(char));
     nalloced += 1024;
-    tmp = G_program_name();
+    if (original_path)
+        tmp = G_original_program_name();
+    else
+        tmp = G_program_name();
     len = strlen(tmp);
     if (len >= nalloced) {
 	nalloced += (1024 > len) ? 1024 : len + 1;
@@ -699,7 +723,25 @@ char *G_recreate_command(void)
 
     opt = &st->first_option;
     while (st->n_opts && opt) {
-	if (opt->answer && opt->answers && opt->answers[0]) {
+	if (opt->answer && opt->answer[0] == '\0') {	/* answer = "" */
+	    slen = strlen(opt->key) + 4;	/* +4 for: ' ' = " " */
+	    if (len + slen >= nalloced) {
+		nalloced += (nalloced + 1024 > len + slen) ? 1024 : slen + 1;
+		buff = G_realloc(buff, nalloced);
+		cur = buff + len;
+	    }
+	    strcpy(cur, " ");
+	    cur++;
+	    strcpy(cur, opt->key);
+	    cur = strchr(cur, '\0');
+	    strcpy(cur, "=");
+	    cur++;
+	    if (opt->type == TYPE_STRING) {
+		strcpy(cur, "\"\"");
+		cur += 2;
+	    }
+	    len = cur - buff;
+	} else if (opt->answer && opt->answers && opt->answers[0]) {
 	    slen = strlen(opt->key) + strlen(opt->answers[0]) + 4;	/* +4 for: ' ' = " " */
 	    if (len + slen >= nalloced) {
 		nalloced += (nalloced + 1024 > len + slen) ? 1024 : slen + 1;
@@ -748,6 +790,37 @@ char *G_recreate_command(void)
 }
 
 /*!
+ * \brief Creates command to run non-interactive.
+ *
+ * Creates a command-line that runs the current command completely
+ * non-interactive.
+ *
+ * \return pointer to a char string
+ */
+char *G_recreate_command(void)
+{
+    return recreate_command(FALSE);
+}
+
+/* TODO: update to docs of these 3 functions to whatever general purpose
+ * they have now. */
+/*!
+ * \brief Creates command to run non-interactive.
+ *
+ * Creates a command-line that runs the current command completely
+ * non-interactive.
+ *
+ * This gives the same as G_recreate_command() but the original path
+ * from the command line is used instead of the module name only.
+ *
+ * \return pointer to a char string
+ */
+char *G_recreate_command_original_path(void)
+{
+    return recreate_command(TRUE);
+}
+
+/*!
   \brief Add keyword to the list
 
   \param keyword keyword string
@@ -861,6 +934,7 @@ int module_gui_wx(void)
 {
     char script[GPATH_MAX];
 
+    /* TODO: the 4 following lines seems useless */
     if (!st->pgm_path)
 	st->pgm_path = G_program_name();
     if (!st->pgm_path)
@@ -870,7 +944,7 @@ int module_gui_wx(void)
             getenv("GISBASE"));
     if (access(script, F_OK) != -1)
         G_spawn(getenv("GRASS_PYTHON"), getenv("GRASS_PYTHON"),
-                script, G_recreate_command(), NULL);
+                script, G_recreate_command_original_path(), NULL);
     else
         return -1;
 
@@ -1132,6 +1206,7 @@ void check_an_opt(const char *key, int type, const char *options,
 
     error = 0;
     err = NULL;
+    found = 0;
 
     switch (type) {
     case TYPE_INTEGER:
@@ -1645,7 +1720,7 @@ char* G_option_to_separator(const struct Option *option)
     else
         sep = G_store(option->answer);
     
-    G_debug(2, "G_option_to_separator(): key = %s -> sep = '%s'",
+    G_debug(3, "G_option_to_separator(): key = %s -> sep = '%s'",
 	    option->key, sep);
     
     return sep;
diff --git a/lib/gis/parser_help.c b/lib/gis/parser_help.c
index 40b0dc8..e90408f 100644
--- a/lib/gis/parser_help.c
+++ b/lib/gis/parser_help.c
@@ -202,6 +202,7 @@ static void usage(FILE *fp, int markers)
     fprintf(fp, " --h   %s\n", _("Print usage summary"));
     fprintf(fp, " --v   %s\n", _("Verbose module output"));
     fprintf(fp, " --q   %s\n", _("Quiet module output"));
+    fprintf(fp, " --qq  %s\n", _("Super quiet module output"));
     fprintf(fp, " --ui  %s\n", _("Force launching GUI dialog"));
     
     /* Print help info for options */
diff --git a/lib/gis/parser_html.c b/lib/gis/parser_html.c
index e85c0a3..3022fb6 100644
--- a/lib/gis/parser_html.c
+++ b/lib/gis/parser_html.c
@@ -256,10 +256,14 @@ void G__usage_html(void)
                             else if (strcmp(opt->gisprompt,
                                             "old,barscale,barscale") == 0)
                                 thumbnails = "barscales";
-                            
+                            else if (strcmp(opt->gisprompt,
+                                            "old,northarrow,northarrow") == 0)
+                                thumbnails = "northarrows";
+
                             if (thumbnails)
-                                fprintf(stdout, "<img width=\"80\" height=\"12\" "
-                                        "src=\"%s/%s.png\" alt=\"%s\">",
+                                fprintf(stdout, "<img height=\"12\" "
+                                        "style=\"max-width: 80;\""
+                                        "src=\"%s/%s.png\" alt=\"%s\"> ",
                                         thumbnails, opt->opts[i], opt->opts[i]);
                         }
 			print_escaped_for_html(stdout, opt->opts[i]);
diff --git a/lib/gis/parser_standard_options.c b/lib/gis/parser_standard_options.c
index a9ec227..b726df7 100644
--- a/lib/gis/parser_standard_options.c
+++ b/lib/gis/parser_standard_options.c
@@ -531,6 +531,7 @@ struct Option *G_define_standard_option(int opt)
 	Opt->type = TYPE_INTEGER;
 	Opt->required = NO;
 	Opt->description = _("Category value");
+        Opt->gisprompt = "old,cat,cats";
 	break;
     case G_OPT_V_CATS:
 	Opt->key = "cats";
@@ -539,6 +540,7 @@ struct Option *G_define_standard_option(int opt)
 	Opt->required = NO;
 	Opt->label = _("Category values");
 	Opt->description = _("Example: 1,3,7-9,13");
+        Opt->gisprompt = "old,cats,cats";
 	break;
     case G_OPT_V_ID:
 	Opt->key = "id";
@@ -657,26 +659,26 @@ struct Option *G_define_standard_option(int opt)
 	break;
 	
     case G_OPT_M_LOCATION:
-    Opt->key = "location";
-    Opt->type = TYPE_STRING;
-    Opt->required = NO;
-    Opt->multiple = NO;
-    Opt->label = _("Location name");
-    Opt->description = _("Location name (not location path)");
-    Opt->gisprompt = "old,location,location";
-    Opt->key_desc = "name";
-    break;
+	Opt->key = "location";
+	Opt->type = TYPE_STRING;
+	Opt->required = NO;
+	Opt->multiple = NO;
+	Opt->label = _("Location name");
+	Opt->description = _("Location name (not location path)");
+	Opt->gisprompt = "old,location,location";
+	Opt->key_desc = "name";
+	break;
 
     case G_OPT_M_DBASE:
-    Opt->key = "dbase";
-    Opt->type = TYPE_STRING;
-    Opt->required = NO;
-    Opt->multiple = NO;
-    Opt->label = _("GRASS GIS database directory");
-    Opt->description = _("Default: path to the current GRASS GIS database");
-    Opt->gisprompt = "old,dbase,dbase";
-    Opt->key_desc = "path";
-    break;
+	Opt->key = "dbase";
+	Opt->type = TYPE_STRING;
+	Opt->required = NO;
+	Opt->multiple = NO;
+	Opt->label = _("GRASS GIS database directory");
+	Opt->description = _("Default: path to the current GRASS GIS database");
+	Opt->gisprompt = "old,dbase,dbase";
+	Opt->key_desc = "path";
+	break;
 
     case G_OPT_M_COORDS:
 	Opt->key = "coordinates";
@@ -916,7 +918,8 @@ struct Flag *G_define_standard_flag(int flag)
 	break;
     case G_FLG_V_TOPO:
 	Flg->key = 'b';
-	Flg->description = _("Do not build topology");
+        Flg->label = _("Do not build topology");
+        Flg->description = _("Advantageous when handling a large number of points");
 	break;
     }
     
diff --git a/lib/gis/parser_wps.c b/lib/gis/parser_wps.c
index 13a7b83..0a25fa3 100644
--- a/lib/gis/parser_wps.c
+++ b/lib/gis/parser_wps.c
@@ -578,7 +578,7 @@ static void wps_print_process_description_begin(int store, int status, const cha
     if(abstract)
     {
         fprintf(stdout,"\t\t<ows:Abstract>");
-        fprintf(stdout, "http://grass.osgeo.org/grass70/manuals/%s.html", identifier);
+        fprintf(stdout, "http://grass.osgeo.org/grass72/manuals/%s.html", identifier);
         fprintf(stdout, "</ows:Abstract>\n");
     }
 
diff --git a/lib/gis/progrm_nme.c b/lib/gis/progrm_nme.c
index e66d429..cfb0946 100644
--- a/lib/gis/progrm_nme.c
+++ b/lib/gis/progrm_nme.c
@@ -15,6 +15,7 @@
 #include <grass/gis.h>
 
 static const char *name = "?";
+static const char *original_name = "?";
 
 /*!
  * \brief Return module name
@@ -30,6 +31,24 @@ const char *G_program_name(void)
 }
 
 /*!
+ * \brief Return original path of the executed program
+ *
+ * This function returns the name of the program as set by the call to
+ * G_gisinit().
+ *
+ * Unlike G_program_name() which returns name of the module
+ * this function return original path which was used to execute
+ * the program. For standard GRASS modules, it will be the same as
+ * the result from G_program_name() function.
+ *
+ * \return pointer to string with program name or full path
+ */
+const char *G_original_program_name(void)
+{
+    return original_name;
+}
+
+/*!
   \brief Set program name
 
   Program name set to name (name will be returned by
@@ -44,6 +63,8 @@ void G_set_program_name(const char *s)
     int i;
     char *temp;
 
+    original_name = G_store(s);
+
     i = strlen(s);
     while (--i >= 0) {
 	if (G_is_dirsep(s[i])) {
diff --git a/lib/gis/proj3.c b/lib/gis/proj3.c
index f353b10..eea1e74 100644
--- a/lib/gis/proj3.c
+++ b/lib/gis/proj3.c
@@ -50,14 +50,26 @@ static void init(void)
 const char *G_database_unit_name(int plural)
 {
     int units;
+    units = G_database_unit();
+    return G_get_units_name(units, plural, FALSE);
+}
+
+/*!
+  \brief Get units id for the current location
+  
+  \return units id
+*/
+int G_database_unit()
+{
+    int units;
     const char *name;
     
     units = G_projection_units(G_projection());
     
     if (units == U_UNDEFINED) {
-	name = lookup_units(plural ? "units" : "unit");
+	name = lookup_units("unit");
 	if (!name)
-	    return plural ? _("units") : _("unit");
+	    return U_UNKNOWN;
 	
 	if (strcasecmp(name, "meter") == 0 || strcasecmp(name, "metre") == 0 
             || strcasecmp(name, "meters") == 0 || strcasecmp(name, "metres") == 0)
@@ -80,8 +92,7 @@ const char *G_database_unit_name(int plural)
 	else
 	    units = U_UNKNOWN;
     }
-    
-    return G_get_units_name(units, plural, FALSE);
+    return units;
 }
 
 /*!
diff --git a/lib/gis/put_window.c b/lib/gis/put_window.c
index 5321237..0071d5f 100644
--- a/lib/gis/put_window.c
+++ b/lib/gis/put_window.c
@@ -14,7 +14,7 @@
 #include <stdlib.h>
 #include <grass/gis.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 /*!
  * \brief Writes the region (window)
diff --git a/lib/gis/rd_cellhd.c b/lib/gis/rd_cellhd.c
index bf35821..785c38d 100644
--- a/lib/gis/rd_cellhd.c
+++ b/lib/gis/rd_cellhd.c
@@ -16,7 +16,7 @@
 #include <grass/gis.h>
 #include <grass/glocale.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 static int scan_item(const char *, char *, char *);
 static int scan_int(const char *, int *);
diff --git a/lib/gis/remove.c b/lib/gis/remove.c
index f08ffeb..586607c 100644
--- a/lib/gis/remove.c
+++ b/lib/gis/remove.c
@@ -21,7 +21,6 @@
 #include <dirent.h>
 #include <grass/gis.h>
 
-static int recursive_remove(const char *path);
 static int G__remove(int misc, const char *dir, const char *element,
 		     const char *name);
 
@@ -95,14 +94,23 @@ static int G__remove(int misc, const char *dir, const char *element,
     if (access(path, 0) != 0)
 	return 0;
 
-    if (recursive_remove(path) == 0)
+    if (G_recursive_remove(path) == 0)
 	return 1;
 
     return -1;
 }
 
-/* equivalent to rm -rf path */
-static int recursive_remove(const char *path)
+/*!
+  \brief Recursively remove all files in given directory
+
+  Equivalent to rm -rf path.
+
+  \param path path to the directory which should be removed
+
+  \return 0 on success
+  \return -1 on error
+*/
+int G_recursive_remove(const char *path)
 {
     DIR *dirp;
     struct dirent *dp;
@@ -110,21 +118,21 @@ static int recursive_remove(const char *path)
     char path2[GPATH_MAX];
 
     if (G_lstat(path, &sb))
-	return 1;
+	return -1;
     if (!S_ISDIR(sb.st_mode))
-	return remove(path) == 0 ? 0 : 1;
+	return remove(path) == 0 ? 0 : -1;
 
     if ((dirp = opendir(path)) == NULL)
-	return 1;
+	return -1;
     while ((dp = readdir(dirp)) != NULL) {
 	if (dp->d_name[0] == '.')
 	    continue;
 	if (strlen(path) + strlen(dp->d_name) + 2 > sizeof(path2))
 	    continue;
 	sprintf(path2, "%s/%s", path, dp->d_name);
-	recursive_remove(path2);
+	G_recursive_remove(path2);
     }
     closedir(dirp);
 
-    return rmdir(path) == 0 ? 0 : 1;
+    return rmdir(path) == 0 ? 0 : -1;
 }
diff --git a/lib/gis/rename.c b/lib/gis/rename.c
index d2d3903..5ee0338 100644
--- a/lib/gis/rename.c
+++ b/lib/gis/rename.c
@@ -3,7 +3,7 @@
  *
  * \brief GIS Library - Rename file functions.
  *
- * (C) 2001-2009 by the GRASS Development Team
+ * (C) 2001-2015 by the GRASS Development Team
  *
  * This program is free software under the GNU General Public License
  * (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -19,7 +19,7 @@
 
 
 /*!
-  \brief Rename a file in the filesystem.
+  \brief Rename a file or a directory in the filesystem.
   
   The file or directory <i>oldname</i> is renamed to <i>newname</i>.
 
@@ -31,12 +31,23 @@
 */
 int G_rename_file(const char *oldname, const char *newname)
 {
+    int ret;
 
 #ifdef __MINGW32__
     remove(newname);
 #endif
+    
+    ret = rename(oldname, newname);
 
-    return rename(oldname, newname);
+    if (ret == -1) {
+	/* if fails, try to copy file and then remove */
+	if (1 == G_copy_file(oldname, newname)) {
+	    if (remove(oldname) != -1)
+		ret = 0;
+	}
+    }
+
+    return ret;
 }
 
 /*!
diff --git a/lib/gis/renamed_options b/lib/gis/renamed_options
index 962b34d..6e0e714 100644
--- a/lib/gis/renamed_options
+++ b/lib/gis/renamed_options
@@ -1,4 +1,4 @@
-### Renamed options between GRASS GIS 6.4 and 7.0
+### Renamed options between GRASS GIS 6.4 and 7.1
 #################################################
 # Entries in alphabetical order
 ################################
@@ -87,6 +87,8 @@ db.select|vs:vertical_separator
 #########################################
 ### General map management module changes
 #########################################
+# g.extension
+g.extension|svnurl:url
 # g.mapset
 g.mapset|gisdbase:dbase
 # g.mapsets
@@ -515,6 +517,9 @@ v.mkgrid|coor:coordinates
 v.net|thresh:threshold
 v.net|alayer:arc_layer
 v.net|nlayer:node_layer
+v.net|type:arc_type
+v.net|tlayer:turn_layer
+v.net|tuclayer:turn_cat_layer
 # v.net.alloc
 v.net.alloc|alayer:arc_layer
 v.net.alloc|nlayer:node_layer
@@ -523,6 +528,8 @@ v.net.alloc|ccats:center_cats
 v.net.alloc|ncolumn:node_column
 v.net.alloc|afcolumn:arc_column
 v.net.alloc|abcolumn:arc_backward_column
+v.net.alloc|tlayer:turn_layer
+v.net.alloc|tuclayer:turn_cat_layer
 # v.net.allpairs
 v.net.allpairs|alayer:arc_layer
 v.net.allpairs|nlayer:node_layer
@@ -573,12 +580,17 @@ v.net.iso|ccats:center_cats
 v.net.iso|ncolumn:node_column
 v.net.iso|afcolumn:arc_column
 v.net.iso|abcolumn:arc_backward_column
+v.net.iso|tlayer:turn_layer
+v.net.iso|tuclayer:turn_cat_layer
 # v.net.path
 v.net.path|alayer:arc_layer
 v.net.path|nlayer:node_layer
+v.net.path|type:arc_type
 v.net.path|ncolumn:node_column
 v.net.path|afcolumn:arc_column
 v.net.path|abcolumn:arc_backward_column
+v.net.path|tlayer:turn_layer
+v.net.path|tuclayer:turn_cat_layer
 # v.net.salesman
 v.net.salesman|alayer:arc_layer
 v.net.salesman|nlayer:node_layer
@@ -586,6 +598,8 @@ v.net.salesman|type:arc_type
 v.net.salesman|ccats:center_cats
 v.net.salesman|afcolumn:arc_column
 v.net.salesman|abcolumn:arc_backward_column
+v.net.salesman|tlayer:turn_layer
+v.net.salesman|tuclayer:turn_cat_layer
 # v.net.spanningtree
 v.net.spanningtree|alayer:arc_layer
 v.net.spanningtree|nlayer:node_layer
diff --git a/lib/gis/set_window.c b/lib/gis/set_window.c
index 73e4b94..dadeb0b 100644
--- a/lib/gis/set_window.c
+++ b/lib/gis/set_window.c
@@ -16,7 +16,7 @@
 
 #include "G.h"
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 /*!
   \brief Get the current working window (region)
diff --git a/lib/gis/tempfile.c b/lib/gis/tempfile.c
index d68ba9f..4d50e9e 100644
--- a/lib/gis/tempfile.c
+++ b/lib/gis/tempfile.c
@@ -3,7 +3,7 @@
  *
  * \brief GIS Library - Temporary file functions.
  *
- * (C) 2001-2009 by the GRASS Development Team
+ * (C) 2001-2015 by the GRASS Development Team
  *
  * This program is free software under the GNU General Public License
  * (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -14,9 +14,11 @@
 #include <string.h>
 #include <unistd.h>
 #include <sys/stat.h>
+#include <stdlib.h>
+
 #include <grass/gis.h>
 
-#include "local_proto.h"
+#include "gis_local_proto.h"
 
 static struct Counter unique;
 static int initialized;
@@ -87,6 +89,8 @@ char *G_tempfile_pid(int pid)
     }
     while (access(path, F_OK) == 0);
 
+    G_debug(2, "G_tempfile_pid(): %s", path);
+    
     return G_store(path);
 }
 
@@ -97,6 +101,17 @@ char *G_tempfile_pid(int pid)
  */
 void G_temp_element(char *element)
 {
+    G__temp_element(element, FALSE);
+}
+
+/*!
+ * \brief Populates element with a path string (internal use only!)
+ *
+ * \param[out] element element name
+ * \param tmp TRUE to use G_make_mapset_element_tmp() instead of G_make_mapset_element()
+ */
+void G__temp_element(char *element, int tmp)
+{
     const char *machine;
 
     strcpy(element, ".tmp");
@@ -105,5 +120,11 @@ void G_temp_element(char *element)
 	strcat(element, "/");
 	strcat(element, machine);
     }
-    G_make_mapset_element(element);
+    
+    if (!tmp)
+        G_make_mapset_element(element);
+    else
+        G_make_mapset_element_tmp(element);
+    
+    G_debug(2, "G__temp_element(): %s (tmp=%d)", element, tmp);
 }
diff --git a/lib/gis/testsuite/gis_lib_tokenize.py b/lib/gis/testsuite/gis_lib_tokenize.py
new file mode 100644
index 0000000..0e053b8
--- /dev/null
+++ b/lib/gis/testsuite/gis_lib_tokenize.py
@@ -0,0 +1,81 @@
+"""Test of gis library tokenizing of text
+
+ at author Vaclav Petras
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+import grass.lib.gis as libgis
+
+# TODO: add tests for content (now testing only number of items)
+
+
+class TokenizeTestCase(TestCase):
+    """Test C function G_tokenize() from gis library"""
+
+    def test_tokenize_comma(self):
+        """Test G_tokenize with comma as delim"""
+        tokens = libgis.G_tokenize("a,b,c,d", ",")
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 4, msg="Got wrong number of tokens")
+
+    def test_tokenize_alternative_delim(self):
+        """Test G_tokenize with semi colon as delim"""
+        tokens = libgis.G_tokenize("a;b;c", ";")
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 3, msg="Got wrong number of tokens")
+
+    def test_tokenize_with_text_delim(self):
+        """Test G_tokenize with comma as delim and single quote text delim
+
+        Expecting the 'wrong' number of tokens here.
+        """
+        tokens = libgis.G_tokenize("a,'b,c',d", ",")
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(
+            num_of_tokens, 4,
+            msg="Got wrong number of tokens (expecting that the text"
+                "delimiter is ignored)")
+        # alternatively this can be done using test with expected failure
+
+
+class Tokenize2TestCase(TestCase):
+    """Test C function G_tokenize2() from gis library"""
+
+    def test_tokenize2_comma(self):
+        """Test G_tokenize2 without any text delim"""
+        tokens = libgis.G_tokenize2("a,b,c,d", ",", "'")
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 4, msg="Got wrong number of tokens")
+
+    def test_tokenize2_with_text_delim(self):
+        """Test G_tokenize2 with , as delim and single quote text delim"""
+        tokens = libgis.G_tokenize2("a,'b,c',d", ",", "'")
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 3, msg="Got wrong number of tokens")
+
+    def test_tokenize2_with_alternative_text_delim(self):
+        """Test G_tokenize2 with ; as delim and double quote text delim"""
+        tokens = libgis.G_tokenize2('a;"b;c";d', ';', '"')
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 3, msg="Got wrong number of tokens")
+
+    def test_tokenize2_with_text_delim_more_text_tokens(self):
+        """Test G_tokenize2 with comma as delim and hash as text delim"""
+        tokens = libgis.G_tokenize2("a,#b,c#,#5,d#,#7,2#", ",", "#")
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 4, msg="Got wrong number of tokens")
+
+    def test_tokenize2_with_real_text(self):
+        """Test G_tokenize2 with real world text"""
+        tokens = libgis.G_tokenize2(
+            '440,617722.81,3464034.494,951.987,'
+            '"Low Erosion (1,5)","High Deposition (8,6)"',
+            ',', '"')
+        num_of_tokens = libgis.G_number_of_tokens(tokens)
+        self.assertEqual(num_of_tokens, 6, msg="Got wrong number of tokens")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/gpde/gpdelib.dox b/lib/gpde/gpdelib.dox
index 36c8396..d013a43 100644
--- a/lib/gpde/gpdelib.dox
+++ b/lib/gpde/gpdelib.dox
@@ -223,7 +223,7 @@ void #N_write_array_2d_to_rast (N_array_2d * array, char *name);
 
 <P>
 <b>Example implementation:</b><br>
-The GRASS module <a href="http://grass.osgeo.org/grass70/manuals/r.gwflow.html">r.gwflow</a>
+The GRASS module <a href="http://grass.osgeo.org/grass72/manuals/r.gwflow.html">r.gwflow</a>
 implements numerical calculation program for transient,
 confined and unconfined groundwater flow in two dimensions.
 
@@ -294,7 +294,7 @@ void #N_write_array_3d_to_rast3d (N_array_3d * array, char *name, int mask);
 
 <P>
 <b>Example implementation:</b><br>
-The GRASS module <a href="http://grass.itc.it/grass70/manuals/r3.gwflow.html">r3.gwflow</a>
+The GRASS module <a href="http://grass.osgeo.org/grass72/manuals/r3.gwflow.html">r3.gwflow</a>
 implements numerical calculation program for transient, confined
 groundwater flow in three dimensions.
 
diff --git a/lib/htmldriver/htmldriver.html b/lib/htmldriver/htmldriver.html
index 9e60eb2..5d5fb5d 100644
--- a/lib/htmldriver/htmldriver.html
+++ b/lib/htmldriver/htmldriver.html
@@ -193,4 +193,4 @@ sed -e 's/NAME="map"/NAME="foomap"/' < htmlmap > foomap.html
 </em>
 
 <p>
-<i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-09 18:23:56 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/lib/htmldriver/polygon.c b/lib/htmldriver/polygon.c
index 5cf0443..0c1ccd9 100644
--- a/lib/htmldriver/polygon.c
+++ b/lib/htmldriver/polygon.c
@@ -6,7 +6,7 @@
 #include "driverlib.h"
 #include "htmlmap.h"
 
-#define RAD_DEG 57.29578
+#define RAD_DEG M_R2D
 
 static void delete_point(int *x, int *y, int count)
 {
diff --git a/lib/imagery/find.c b/lib/imagery/find.c
index bf0bed8..324bba2 100644
--- a/lib/imagery/find.c
+++ b/lib/imagery/find.c
@@ -21,7 +21,7 @@
 int I_find_group(const char *group)
 {
     if (group == NULL || *group == 0)
-	return 0;
+        return 0;
 
     return G_find_file2("group", group, G_mapset()) != NULL;
 }
@@ -29,9 +29,9 @@ int I_find_group(const char *group)
 int I_find_group_file(const char *group, const char *file)
 {
     if (!I_find_group(group))
-	return 0;
+        return 0;
     if (file == NULL || *file == 0)
-	return 0;
+        return 0;
 
     return G_find_file2_misc("group", file, group, G_mapset()) != NULL;
 }
@@ -41,28 +41,65 @@ int I_find_subgroup(const char *group, const char *subgroup)
     char element[GNAME_MAX];
 
     if (!I_find_group(group))
-	return 0;
+        return 0;
     if (subgroup == NULL || *subgroup == 0)
-	return 0;
+        return 0;
 
-    sprintf(element, "subgroup/%s", subgroup);
+    sprintf(element, "subgroup%c%s", HOST_DIRSEP, subgroup);
+    G_debug(5, "I_find_subgroup() element: %s", element);
 
     return G_find_file2_misc("group", element, group, G_mapset()) != NULL;
 }
 
 int I_find_subgroup_file(const char *group, const char *subgroup,
-			 const char *file)
+                         const char *file)
 {
     char element[GNAME_MAX * 2];
 
     if (!I_find_group(group))
-	return 0;
+        return 0;
     if (subgroup == NULL || *subgroup == 0)
-	return 0;
+        return 0;
     if (file == NULL || *file == 0)
-	return 0;
+        return 0;
 
-    sprintf(element, "subgroup/%s/%s", subgroup, file);
+    sprintf(element, "subgroup%c%s%c%s", HOST_DIRSEP, subgroup, HOST_DIRSEP, file);
+    G_debug(5, "I_find_subgroup_file() element: %s", element);
 
     return G_find_file2_misc("group", element, group, G_mapset()) != NULL;
 }
+
+/*!
+ * \brief does signature file exists?
+ *
+ * Returns 1 if the
+ * specified <b>signature</b> exists in the specified subgroup; 0 otherwise.
+ * 
+ * Should be used to check if signature file exists after G_parser run
+ * when generating new signature file.
+ *
+ *  \param group - group where to search
+ *  \param subgroup - subgroup containing signatures
+ *  \param type - type of signature ("sig" or "sigset")
+ *  \param file - name of signature file
+ *  \return int
+ */
+int I_find_signature_file(const char *group, const char *subgroup,
+                     const char *type, const char *file)
+{
+    char element[GNAME_MAX * 2];
+    
+    if (!I_find_group(group))
+        return 0;
+    if (subgroup == NULL || *subgroup == 0)
+        return 0;
+    if (type == NULL || *type == 0)
+        return 0;
+    if (file == NULL || *file == 0)
+        return 0;
+        
+    sprintf(element, "subgroup%c%s%c%s%c%s", HOST_DIRSEP, subgroup, HOST_DIRSEP, type, HOST_DIRSEP, file);
+    G_debug(5, "I_find_signature_file() element: %s", element);
+    
+    return G_find_file2_misc("group", element, group, G_mapset()) != NULL;
+}
diff --git a/lib/init/Makefile b/lib/init/Makefile
index f10328e..7457ec1 100644
--- a/lib/init/Makefile
+++ b/lib/init/Makefile
@@ -96,7 +96,7 @@ $(ETC)/winlocale$(EXE): $(OBJDIR)/winlocale.o
 $(ETC)/VERSIONNUMBER:
 	rm -f $@
 	@if [ -n "$(GRASS_VERSION_SVN)" ] ; then \
-		echo "$(GRASS_VERSION_NUMBER) r$(GRASS_VERSION_SVN)" > $@ ; \
+		echo "$(GRASS_VERSION_NUMBER) $(GRASS_VERSION_SVN)" > $@ ; \
 	else \
 		echo "$(GRASS_VERSION_NUMBER)" > $@ ; \
 	fi
diff --git a/lib/init/README b/lib/init/README
index 7972584..0669c73 100644
--- a/lib/init/README
+++ b/lib/init/README
@@ -1,10 +1,10 @@
 o GRASS text mode startup
 
-  "grass70" starts up d.m by default (if not first time user).
-  "grass70 -text" will start up in text mode.
-  "grass70 -wxpython" or "grass70 -gui" will start up in wxpython mode.
+  "grass72" starts up d.m by default (if not first time user).
+  "grass72 -text" will start up in text mode.
+  "grass72 -wxpython" or "grass72 -gui" will start up in wxpython mode.
 
-  You can use alias "grass70" to "grass70 -text" to use text mode by default.
+  You can use alias "grass72" to "grass72 -text" to use text mode by default.
   Or set env var GRASS_GUI=text.
 
 
@@ -25,18 +25,18 @@ o GRASS non-interactive startup examples
 	export LOCATION_NAME=loc1
 	export MAPSET=map1
 
-	grass70 -	# non-interactive startup using LOCATION location
+	grass72 -	# non-interactive startup using LOCATION location
 
   ex2)
 	export GISDBASE=/usr/home/grass/usr/data1
 	export LOCATION_NAME=loc1
 	export MAPSET=map1
   	
-	grass70 -	# non-interactive startup using
+	grass72 -	# non-interactive startup using
 			# GISDBASE/LOCATION_NAME/MAPSET location
 
 
-  Also, the first argument of grass70 can override these env vars.
+  Also, the first argument of grass72 can override these env vars.
 
   ex3)
   	export LOCATION=/usr/home/grass/usr/data1/loc1/map1
@@ -44,7 +44,7 @@ o GRASS non-interactive startup examples
 	export LOCATION_NAME=loc1
 	export MAPSET=map1
 
-	grass70 /usr/home/grass/usr/data2/loc2-1/map1-1
+	grass72 /usr/home/grass/usr/data2/loc2-1/map1-1
 			# non-interactive startup using
 			# /usr/home/grass/usr/data2/loc2-1/map1-1 location
 
@@ -53,7 +53,7 @@ o GRASS non-interactive startup examples
 	export LOCATION_NAME=loc1
 	export MAPSET=map1
   	
-	grass70 /usr/home/grass/usr/data2/loc2-1/map1-1
+	grass72 /usr/home/grass/usr/data2/loc2-1/map1-1
 			# non-interactive startup using
 			# /usr/home/grass/usr/data2/loc2-1/map1-1 location
 
@@ -63,7 +63,7 @@ o GRASS non-interactive startup examples
 	export LOCATION_NAME=loc1
 	export MAPSET=map1
 
-	grass70 map1-1	# non-interactive startup using
+	grass72 map1-1	# non-interactive startup using
 			# GISDBASE/LOCATION_NAME/map1-1 location
 
   ex6)
@@ -72,7 +72,7 @@ o GRASS non-interactive startup examples
 	export LOCATION_NAME=loc1
 	export MAPSET=map1
 
-	grass70 loc2-1/map1-1
+	grass72 loc2-1/map1-1
 			# non-interactive startup using
 			# GISDBASE/loc2-1/map1-1 location
 
diff --git a/lib/init/grass.py b/lib/init/grass.py
index 1c43f35..74718d6 100644
--- a/lib/init/grass.py
+++ b/lib/init/grass.py
@@ -13,6 +13,7 @@
 #               script from GRASS 6) by Glynn Clements
 #               Martin Landa <landa.martin gmail.com>
 #               Luca Delucchi <lucadeluge gmail.com>
+#               Vaclav Petras <wenzeslaus gmail.com> (refactoring and exec)
 # PURPOSE:      Sets up environment variables, parses any remaining
 #               command line options for setting the GISDBASE, LOCATION,
 #               and/or MAPSET. Finally it starts GRASS with the appropriate
@@ -25,6 +26,18 @@
 #
 #############################################################################
 
+"""
+Script to run GRASS session.
+
+Some of the functions could be used separately but import from this module
+is not safe, i.e. it has side effects (this should be changed in the future).
+"""
+
+# we allow for long file because we want to avoid imports if possible
+# (this makes it more stable since we have to set up paths first)
+# pylint: disable=too-many-lines
+
+from __future__ import print_function
 import sys
 import os
 import atexit
@@ -33,9 +46,60 @@ import subprocess
 import re
 import platform
 import tempfile
+import locale
+
+
+# ----+- Python 3 compatibility start -+----
+PY2 = sys.version[0] == '2'
+ENCODING = locale.getdefaultlocale()[1]
+if ENCODING is None:
+    ENCODING = 'UTF-8'
+    print("Default locale not found, using UTF-8")  # intentionally not translatable
+
+
+def to_text_string(obj, encoding=ENCODING):
+    """Convert `obj` to (unicode) text string"""
+    if PY2:
+        # Python 2
+        if encoding is None:
+            return unicode(obj)
+        else:
+            return unicode(obj, encoding)
+    else:
+        # Python 3
+        if encoding is None:
+            return str(obj)
+        elif isinstance(obj, str):
+            # In case this function is not used properly, this could happen
+            return obj
+        else:
+            return str(obj, encoding)
+
+
+if PY2:
+    import types
+    string_types = basestring,
+    integer_types = (int, long)
+    class_types = (type, types.ClassType)
+    text_type = unicode
+    binary_type = str
+else:
+    string_types = str,
+    integer_types = int,
+    class_types = type,
+    text_type = str
+    binary_type = bytes
+    MAXSIZE = sys.maxsize
+
+# ----+- Python 3 compatibility end -+----
 
 # Variables substituted during build process
 if 'GISBASE' in os.environ:
+    # TODO: should this be something like GRASS_PATH?
+    # GISBASE marks complete runtime, so no need to get it here when
+    # setting it up, possible scenario: existing runtime and starting
+    # GRASS in that, we want to overwrite the settings, not to take it
+    # possibly same for GRASS_PROJSHARE and others but maybe not
     gisbase = os.environ['GISBASE']
 else:
     gisbase = "@GISBASE@"
@@ -47,28 +111,13 @@ if 'GRASS_PROJSHARE' in os.environ:
 else:
     config_projshare = "@CONFIG_PROJSHARE@"
 
-# configuration directory
-grass_env_file = None  # see check_shell()
-if sys.platform == 'win32':
-    grass_config_dirname = "GRASS7"
-    grass_config_dir = os.path.join(os.getenv('APPDATA'), grass_config_dirname)
-else:
-    grass_config_dirname = ".grass7"
-    grass_config_dir = os.path.join(os.getenv('HOME'), grass_config_dirname)
-
 gisbase = os.path.normpath(gisbase)
 
 # i18N
 import gettext
+# TODO: is this needed or even desirable when we have set_language()?
 gettext.install('grasslibs', os.path.join(gisbase, 'locale'))
 
-tmpdir = None
-lockfile = None
-remove_lockfile = True
-location = None
-create_new = None
-grass_gui = None
-exit_grass = None
 
 def warning(text):
     sys.stderr.write(_("WARNING") + ': ' + text + os.linesep)
@@ -88,15 +137,15 @@ def try_rmdir(path):
         pass
 
 
-def clean_env():
-    env_curr = read_gisrc()
+def clean_env(gisrc):
+    env_curr = read_gisrc(gisrc)
     env_new = {}
-    for k,v in env_curr.iteritems():
-        if 'MONITOR' in k or k.endswith('PID'):
+    for k,v in env_curr.items():
+        if k.endswith('PID') or k.startswith('MONITOR'):
             continue
         env_new[k] = v
 
-    write_gisrc(env_new)
+    write_gisrc(env_new, gisrc)
 
 
 def cleanup_dir(path):
@@ -110,20 +159,28 @@ def cleanup_dir(path):
             try_rmdir(os.path.join(root, name))
 
 
-def cleanup():
-    tmpdir, lockfile, remove_lockfile
-    # all exits after setting up tmp dirs (system/location) should
-    # also tidy it up
-    cleanup_dir(tmpdir)
-    try_rmdir(tmpdir)
-    if location:
-        tmpdir_loc = os.path.join(location, ".tmp")
-        cleanup_dir(tmpdir_loc)
-        try_rmdir(tmpdir_loc)
+class Cleaner(object):  # pylint: disable=R0903
+    """Holds directories and files which needs to be cleaned or deleted"""
+    def __init__(self):
+        self.mapset_path = None
+        self.lockfile = None
+        self.tmpdir = None
 
-    # remove lock-file if requested
-    if lockfile and remove_lockfile:
-        try_remove(lockfile)
+    def cleanup(self):
+        """This can be registered with atexit
+
+        Object can then still change and add or remove directories to clean"""
+        # all exits after setting up tmp dirs (system/location) should
+        # also tidy it up
+        cleanup_dir(self.tmpdir)
+        try_rmdir(self.tmpdir)
+        if self.mapset_path:
+            tmpdir_mapset = os.path.join(self.mapset_path, ".tmp")
+            cleanup_dir(tmpdir_mapset)
+            try_rmdir(tmpdir_mapset)
+        # remove lock-file if requested
+        if self.lockfile:
+            try_remove(self.lockfile)
 
 
 def fatal(msg):
@@ -136,6 +193,38 @@ def message(msg):
     sys.stderr.flush()
 
 
+# mechanism meant for debugging this script (only)
+# private global to store if we are debugging
+_DEBUG = None
+
+
+def is_debug():
+    """Returns True if we are in debug mode
+
+    For debug messages use ``debug()``.
+    """
+    global _DEBUG
+    if _DEBUG is not None:
+        return _DEBUG
+    _DEBUG = os.getenv('GRASS_DEBUG')
+    # translate to bool (no or empty variable means false)
+    if _DEBUG:
+        _DEBUG = True
+    else:
+        _DEBUG = False
+    return _DEBUG
+
+
+def debug(msg):
+    """Print a debug message if in debug mode
+
+    Do not use translatable strings for debug messages.
+    """
+    if is_debug():
+        sys.stderr.write("DEBUG: %s\n" % msg)
+        sys.stderr.flush()
+
+
 def readfile(path):
     f = open(path, 'r')
     s = f.read()
@@ -150,94 +239,175 @@ def writefile(path, s):
 
 
 def call(cmd, **kwargs):
+    """Wrapper for subprocess.call to deal with platform-specific issues"""
     if windows:
         kwargs['shell'] = True
     return subprocess.call(cmd, **kwargs)
 
 
-def Popen(cmd, **kwargs):
+def Popen(cmd, **kwargs):  # pylint: disable=C0103
+    """Wrapper for subprocess.Popen to deal with platform-specific issues"""
     if windows:
         kwargs['shell'] = True
     return subprocess.Popen(cmd, **kwargs)
 
 
-def gfile(*args):
+def gpath(*args):
+    """Costruct path to file or directory in GRASS GIS installation
+
+    Can be called only after gisbase was set.
+    """
     return os.path.join(gisbase, *args)
 
-help_text = r"""GRASS GIS %s
+
+# for wxpath
+_WXPYTHON_BASE = None
+
+
+def wxpath(*args):
+    """Costruct path to file or directory in GRASS wxGUI
+
+    Can be called only after gisbase was set.
+
+    This function does not check if the directories exist or if GUI works
+    this must be done by the caller if needed.
+    """
+    global _WXPYTHON_BASE
+    if not _WXPYTHON_BASE:
+        # this can be called only after gisbase was set
+        _WXPYTHON_BASE = gpath("gui", "wxpython")
+    return os.path.join(_WXPYTHON_BASE, *args)
+
+
+# using format for most but leaving usage of template for the dynamic ones
+# two different methods are easy way to implement two phase construction
+help_text = r"""GRASS GIS $VERSION_NUMBER
 Geographic Resources Analysis Support System (GRASS GIS).
 
-%s:
-  $CMD_NAME [-h | -help | --help] [-v | --version] [-c | -c geofile | -c EPSG:code[:datum_trans]]
-          [-e] [-text | -gui] [--config param]
-          [[[<GISDBASE>/]<LOCATION_NAME>/]<MAPSET>]
-
-%s:
-  -h or -help or --help          %s
-  -v or --version                %s
-  -c                             %s
-  -e                             %s
-  -text                          %s
-                                   %s
-  -gtext                         %s
-                                   %s
-  -gui                           %s
-                                   %s
-  --config                       %s
-                                   %s
-
-%s:
-  GISDBASE                       %s
-  LOCATION_NAME                  %s
-  MAPSET                         %s
-
-  GISDBASE/LOCATION_NAME/MAPSET  %s
-
-%s:
-  GRASS_GUI                      %s
-  GRASS_HTML_BROWSER             %s
-  GRASS_ADDON_PATH               %s
-  GRASS_ADDON_BASE               %s
-  GRASS_BATCH_JOB                %s
-  GRASS_PYTHON                   %s
-""" % (grass_version,
-       _("Usage"),
-       _("Flags"),
-       _("print this help message"),
-       _("show version information and exit"),
-       _("create given database, location or mapset if it doesn't exist"),
-       _("exit after creation of location or mapset. Only with -c flag"),
-       _("use text based interface (skip welcome screen)"),
-       _("and set as default"),
-       _("use text based interface (show welcome screen)"),
-       _("and set as default"),
-       _("use $DEFAULT_GUI graphical user interface"),
-       _("and set as default"),
-       _("print GRASS configuration parameters"),
-       _("options: arch,build,compiler,path,revision"),
-       _("Parameters"),
-       _("initial database (path to GIS data)"),
-       _("initial location"),
-       _("initial mapset"),
-       _("fully qualified initial mapset directory"),
-       _("Environment variables relevant for startup"),
-       _("select GUI (text, gui)"),
-       _("set html web browser for help pages"),
-       _("set additional path(s) to local GRASS modules or user scripts"),
-       _("set additional GISBASE for locally installed GRASS Addons"),
-       _("shell script to be processed as batch job"),
-       _("set python shell name to override 'python'"))
-
-
-def help_message():
+{usage}:
+  $CMD_NAME [-h | -help | --help | --h] [-v | --version]
+          [-c | -c geofile | -c EPSG:code[:datum_trans]]
+          [-e] [-f] [-text | -gtext | -gui] [--config param]
+          [[[GISDBASE/]LOCATION_NAME/]MAPSET]
+  $CMD_NAME [FLAG]... GISDBASE/LOCATION_NAME/MAPSET --exec EXECUTABLE [EPARAM]...
+
+{flags}:
+  -h or -help or --help or --h   {help_flag}
+  -v or --version                {version_flag}
+  -c                             {create}
+  -e                             {exit_after}
+  -f                             {force_removal}
+  -text                          {text}
+                                   {text_detail}
+  -gtext                         {gtext}
+                                   {gtext_detail}
+  -gui                           {gui}
+                                   {gui_detail}
+  --config                       {config}
+                                   {config_detail}
+  --exec EXECUTABLE              {exec_}
+                                   {exec_detail}
+
+{params}:
+  GISDBASE                       {gisdbase}
+                                   {gisdbase_detail}
+  LOCATION_NAME                  {location}
+                                   {location_detail}
+  MAPSET                         {mapset}
+
+  GISDBASE/LOCATION_NAME/MAPSET  {full_mapset}
+
+  EXECUTABLE                     {executable}
+  EPARAM                         {executable_params}
+  FLAG                           {standard_flags}
+
+{env_vars}:
+  GRASS_GUI                      {gui_var}
+  GRASS_HTML_BROWSER             {html_var}
+  GRASS_ADDON_PATH               {addon_path_var}
+  GRASS_ADDON_BASE               {addon_base_var}
+  GRASS_BATCH_JOB                {batch_var}
+  GRASS_PYTHON                   {python_var}
+""".format(
+    usage=_("Usage"),
+    flags=_("Flags"),
+    help_flag=_("print this help message"),
+    version_flag=_("show version information and exit"),
+    create=_("create given database, location or mapset if it doesn't exist"),
+    exit_after=_("exit after creation of location or mapset. Only with -c flag"),
+    force_removal=_("force removal of .gislock if exists (use with care!). Only with -text flag"),
+    text=_("use text based interface (skip welcome screen)"),
+    text_detail=_("and set as default"),
+    gtext=_("use text based interface (show welcome screen)"),
+    gtext_detail=_("and set as default"),
+    gui=_("use $DEFAULT_GUI graphical user interface"),
+    gui_detail=_("and set as default"),
+    config=_("print GRASS configuration parameters"),
+    config_detail=_("options: arch,build,compiler,path,revision"),
+    params=_("Parameters"),
+    gisdbase=_("initial GRASS GIS database directory"),
+    gisdbase_detail=_("directory containing Locations"),
+    location=_("initial GRASS Location"),
+    location_detail=_("directory containing Mapsets with one common coordinate system (projection)"),
+    mapset=_("initial GRASS Mapset"),
+    full_mapset=_("fully qualified initial Mapset directory"),
+    env_vars=_("Environment variables relevant for startup"),
+    gui_var=_("select GUI (text, gui, gtext)"),
+    html_var=_("set html web browser for help pages"),
+    addon_path_var=_("set additional path(s) to local GRASS modules or user scripts"),
+    addon_base_var=_("set additional GISBASE for locally installed GRASS Addons"),
+    batch_var=_("shell script to be processed as batch job"),
+    python_var=_("set Python interpreter name to override 'python'"),
+    exec_=_("execute GRASS module or script"),
+    exec_detail=_("provided executable will be executed in GRASS session"),
+    executable=_("GRASS module, script or any other executable"),
+    executable_params=_("parameters of the executable"),
+    standard_flags=_("standard flags"),
+    )
+
+
+def help_message(default_gui):
     t = string.Template(help_text)
-    s = t.substitute(CMD_NAME=cmd_name, DEFAULT_GUI=default_gui)
+    s = t.substitute(CMD_NAME=cmd_name, DEFAULT_GUI=default_gui,
+                     VERSION_NUMBER=grass_version)
     sys.stderr.write(s)
 
 
-def create_tmp():
-    global tmpdir
-    ## use $TMPDIR if it exists, then $TEMP, otherwise /tmp
+def get_grass_config_dir():
+    """Get configuration directory
+
+    Determines path of GRASS GIS user configuration directory and creates
+    it if it does not exist.
+
+    Configuration directory is for example used for grass env file
+    (the one which caries mapset settings from session to session).
+    """
+    if sys.platform == 'win32':
+        grass_config_dirname = "GRASS7"
+        win_conf_path = os.getenv('APPDATA')
+        # this can happen with some strange settings
+        if not win_conf_path:
+            fatal(_("The APPDATA variable is not set, ask your operating"
+                    " system support"))
+        if not os.path.exists(win_conf_path):
+            fatal(_("The APPDATA variable points to directory which does"
+                    " not exist, ask your operating system support"))
+        directory = os.path.join(win_conf_path, grass_config_dirname)
+    else:
+        grass_config_dirname = ".grass7"
+        directory = os.path.join(os.getenv('HOME'), grass_config_dirname)
+    if not os.path.exists(directory):
+        os.mkdir(directory)
+    return directory
+
+
+def create_tmp(user, gis_lock):
+    """Create temporary directory
+
+    :param user: user name to be used in the directory name
+    :param gis_lock: session lock filename to be used in the directory name
+    """
+    # use $TMPDIR if it exists, then $TEMP, otherwise /tmp
     tmp = os.getenv('TMPDIR')
     if not tmp:
         tmp = os.getenv('TEMP')
@@ -245,31 +415,51 @@ def create_tmp():
         tmp = os.getenv('TMP')
     if not tmp:
         tmp = tempfile.gettempdir()
+
     if tmp:
         tmpdir = os.path.join(tmp, "grass7-%(user)s-%(lock)s" % {'user': user,
                                                              'lock': gis_lock})
         try:
-            os.mkdir(tmpdir, 0700)
+            os.mkdir(tmpdir, 0o700)
         except:
             tmp = None
+
     if not tmp:
         for ttmp in ("/tmp", "/var/tmp", "/usr/tmp"):
             tmp = ttmp
             tmpdir = os.path.join(tmp, "grass7-%(user)s-%(lock)s" % {
                                               'user': user, 'lock': gis_lock})
             try:
-                os.mkdir(tmpdir, 0700)
+                os.mkdir(tmpdir, 0o700)
             except:
                 tmp = None
             if tmp:
                 break
+
     if not tmp:
-        fatal(_("Unable to create temporary directory <grass7-%(user)s-" \
+        fatal(_("Unable to create temporary directory <grass7-%(user)s-"
                 "%(lock)s>! Exiting.") % {'user': user, 'lock': gis_lock})
 
+    # promoting the variable even if it was not defined before
+    os.environ['TMPDIR'] = tmpdir
+
+    debug("Tmp directory '{tmpdir}' created for user '{user}'".format(
+        tmpdir=tmpdir, user=user))
+    return tmpdir
 
-def create_gisrc():
-    global gisrc, gisrcrc
+
+def get_gisrc_from_config_dir(grass_config_dir, batch_job):
+    """Set the global grassrc file (aka grassrcrc)"""
+    if batch_job:
+        # use individual GISRCRC files when in batch mode (r33174)
+        filename = os.path.join(grass_config_dir, "rc.%s" % platform.node())
+        if os.access(filename, os.R_OK):
+            return filename
+    # use standard file if in normal mode or the special file is not available
+    return os.path.join(grass_config_dir, "rc")
+
+
+def create_gisrc(tmpdir, gisrcrc):
     # Set the session grassrc file
     gisrc = os.path.join(tmpdir, "gisrc")
     os.environ['GISRC'] = gisrc
@@ -286,12 +476,13 @@ def create_gisrc():
     # Copy the global grassrc file to the session grassrc file
     if s:
         writefile(gisrc, s)
+    return gisrc
 
 
-def read_gisrc():
+def read_gisrc(filename):
     kv = {}
     try:
-        f = open(gisrc, 'r')
+        f = open(filename, 'r')
     except IOError:
         return kv
 
@@ -299,7 +490,9 @@ def read_gisrc():
         try:
             k, v = line.split(':', 1)
         except ValueError as e:
-            sys.stderr.write(_("ERROR: Invalid line in RC file: '%s' (%s)\n") % (line, e))
+            warning(_("Invalid line in RC file ({file}):"
+                      " '{line}' ({error})\n").format(
+                          line=line, error=e, file=filename))
             continue
         kv[k.strip()] = v.strip()
     f.close()
@@ -317,32 +510,31 @@ def read_env_file(path):
     return kv
 
 
-def write_gisrc(kv):
-    f = open(gisrc, 'w')
-    for k, v in kv.iteritems():
+def write_gisrc(kv, filename):
+    f = open(filename, 'w')
+    for k, v in kv.items():
         f.write("%s: %s\n" % (k, v))
     f.close()
 
 
-def read_gui():
-    global grass_gui
+def read_gui(gisrc, default_gui):
+    grass_gui = None
     # At this point the GRASS user interface variable has been set from the
-    # command line, been set from an external environment variable, or is 
-    # not set. So we check if it is not set
-    if not grass_gui:
-        # Check for a reference to the GRASS user interface in the grassrc file
-        if os.access(gisrc, os.R_OK):
-            kv = read_gisrc()
-            if 'GRASS_GUI' in os.environ:
-                grass_gui = os.environ['GRASS_GUI']
-            elif 'GUI' in kv:
-                grass_gui = kv['GUI']
-            elif 'GRASS_GUI' in kv:
-                # For backward compatibility (GRASS_GUI renamed to GUI)
-                grass_gui = kv['GRASS_GUI']
-            else:
-                # Set the GRASS user interface to the default if needed
-                grass_gui = default_gui
+    # command line, been set from an external environment variable,
+    # or is not set. So we check if it is not set
+    # Check for a reference to the GRASS user interface in the grassrc file
+    if os.access(gisrc, os.R_OK):
+        kv = read_gisrc(gisrc)
+        if 'GRASS_GUI' in os.environ:
+            grass_gui = os.environ['GRASS_GUI']
+        elif 'GUI' in kv:
+            grass_gui = kv['GUI']
+        elif 'GRASS_GUI' in kv:
+            # For backward compatibility (GRASS_GUI renamed to GUI)
+            grass_gui = kv['GRASS_GUI']
+        else:
+            # Set the GRASS user interface to the default if needed
+            grass_gui = default_gui
 
     if not grass_gui:
         grass_gui = default_gui
@@ -350,31 +542,33 @@ def read_gui():
     if grass_gui == 'gui':
         grass_gui = default_gui
 
-    # FIXME oldtcltk, gis.m, d.m no longer exist
+    # FIXME oldtcltk, gis.m, d.m no longer exist (remove this around 7.2)
     if grass_gui in ['d.m', 'gis.m', 'oldtcltk', 'tcltk']:
         warning(_("GUI <%s> not supported in this version") % grass_gui)
         grass_gui = default_gui
 
+    return grass_gui
+
 
-def path_prepend(dir, var):
+def path_prepend(directory, var):
     path = os.getenv(var)
     if path:
-        path = dir + os.pathsep + path
+        path = directory + os.pathsep + path
     else:
-        path = dir
+        path = directory
     os.environ[var] = path
 
 
-def path_append(dir, var):
+def path_append(directory, var):
     path = os.getenv(var)
     if path:
-        path = path + os.pathsep + dir
+        path = path + os.pathsep + directory
     else:
-        path = dir
+        path = directory
     os.environ[var] = path
 
 
-def set_paths():
+def set_paths(grass_config_dir):
     # addons (path)
     addon_path = os.getenv('GRASS_ADDON_PATH')
     if addon_path:
@@ -389,20 +583,18 @@ def set_paths():
     if not windows:
         path_prepend(os.path.join(addon_base, 'scripts'), 'PATH')
     path_prepend(os.path.join(addon_base, 'bin'), 'PATH')
-    
+
     # standard installation
     if not windows:
-        path_prepend(gfile('scripts'), 'PATH')
-    path_prepend(gfile('bin'), 'PATH')
+        path_prepend(gpath('scripts'), 'PATH')
+    path_prepend(gpath('bin'), 'PATH')
 
     # Set PYTHONPATH to find GRASS Python modules
-    if os.path.exists(gfile('gui', 'wxpython')):
-        path_prepend(gfile('gui', 'wxpython'), 'PYTHONPATH')
-    if os.path.exists(gfile('etc', 'python')):
-        path_prepend(gfile('etc', 'python'), 'PYTHONPATH')
+    if os.path.exists(gpath('etc', 'python')):
+        path_prepend(gpath('etc', 'python'), 'PYTHONPATH')
 
     # set path for the GRASS man pages
-    grass_man_path = os.path.join(gisbase, 'docs', 'man')
+    grass_man_path = gpath('docs', 'man')
     addons_man_path = os.path.join(addon_base, 'docs', 'man')
     man_path = os.getenv('MANPATH')
     sys_man_path = None
@@ -421,17 +613,21 @@ def set_paths():
             pass
 
         if sys_man_path:
-            os.environ['MANPATH'] = sys_man_path
+            os.environ['MANPATH'] = to_text_string(sys_man_path)
             path_prepend(addons_man_path, 'MANPATH')
             path_prepend(grass_man_path, 'MANPATH')
         else:
-            os.environ['MANPATH'] = addons_man_path
+            os.environ['MANPATH'] = to_text_string(addons_man_path)
             path_prepend(grass_man_path, 'MANPATH')
 
+    # Set LD_LIBRARY_PATH (etc) to find GRASS shared libraries
+    # this works for subprocesses but won't affect the current process
+    path_prepend(gpath("lib"), ld_library_path_var)
+
 
 def find_exe(pgm):
-    for dir in os.getenv('PATH').split(os.pathsep):
-        path = os.path.join(dir, pgm)
+    for directory in os.getenv('PATH').split(os.pathsep):
+        path = os.path.join(directory, pgm)
         if os.access(path, os.X_OK):
             return path
     return None
@@ -465,7 +661,15 @@ def set_defaults():
     if not os.getenv('GRASS_PROJSHARE'):
         os.environ['GRASS_PROJSHARE'] = config_projshare
 
-    
+
+def set_display_defaults():
+    """ Predefine monitor size for certain architectures"""
+    if os.getenv('HOSTTYPE') == 'arm':
+        # small monitor on ARM (iPAQ, zaurus... etc)
+        os.environ['GRASS_RENDER_HEIGHT'] = "320"
+        os.environ['GRASS_RENDER_WIDTH'] = "240"
+
+
 def set_browser():
     # GRASS_HTML_BROWSER
     browser = os.getenv('GRASS_HTML_BROWSER')
@@ -473,7 +677,7 @@ def set_browser():
         if macosx:
             # OSX doesn't execute browsers from the shell PATH - route thru a
             # script
-            browser = gfile('etc', "html_browser_mac.sh")
+            browser = gpath('etc', "html_browser_mac.sh")
             os.environ['GRASS_HTML_BROWSER_MACOSX'] = "-b com.apple.helpviewer"
 
         if windows:
@@ -494,42 +698,46 @@ def set_browser():
         # OSX doesn't execute browsers from the shell PATH - route thru a
         # script
         os.environ['GRASS_HTML_BROWSER_MACOSX'] = "-b %s" % browser
-        browser = gfile('etc', "html_browser_mac.sh")
+        browser = gpath('etc', "html_browser_mac.sh")
 
     if not browser:
         warning(_("Searched for a web browser, but none found"))
         # even so we set konqueror to make lib/gis/parser.c happy:
+        # TODO: perhaps something more probable would be better, e.g. xdg-open
         browser = "konqueror"
 
     os.environ['GRASS_HTML_BROWSER'] = browser
 
 
-def create_initial_gisrc():
+def ensure_home():
+    """Set HOME if not set on MS Windows"""
+    if windows and not os.getenv('HOME'):
+        os.environ['HOME'] = os.path.join(os.getenv('HOMEDRIVE'),
+                                          os.getenv('HOMEPATH'))
+
+def create_initial_gisrc(filename):
     # for convenience, define GISDBASE as pwd:
     s = r"""GISDBASE: %s
 LOCATION_NAME: <UNKNOWN>
 MAPSET: <UNKNOWN>
 """ % os.getcwd()
-    writefile(gisrc, s)
+    writefile(filename, s)
 
 
-def check_gui():
-    global grass_gui, wxpython_base
+def check_gui(expected_gui):
+    grass_gui = expected_gui
     # Check if we are running X windows by checking the DISPLAY variable
     if os.getenv('DISPLAY') or windows or macosx:
         # Check if python is working properly
-        if grass_gui in ('wxpython', 'gtext'):
+        if expected_gui in ('wxpython', 'gtext'):
             nul = open(os.devnull, 'w')
             p = Popen([os.environ['GRASS_PYTHON']], stdin=subprocess.PIPE,
                       stdout=nul, stderr=nul)
             nul.close()
-            p.stdin.write("variable=True")
+            p.stdin.write("variable=True".encode(ENCODING))
             p.stdin.close()
             p.wait()
-            if p.returncode == 0:
-                # Set the wxpython base directory
-                wxpython_base = gfile("gui", "wxpython")
-            else:
+            if p.returncode != 0:
                 # Python was not found - switch to text interface mode
                 warning(_("The python command does not work as expected!\n"
                           "Please check your GRASS_PYTHON environment variable.\n"
@@ -541,31 +749,127 @@ def check_gui():
 
     else:
         # Display a message if a graphical interface was expected
-        if grass_gui != 'text':
+        if expected_gui != 'text':
             # Set the interface mode to text
             warning(_("It appears that the X Windows system is not active.\n"
                       "A graphical based user interface is not supported.\n"
+                      "(DISPLAY variable is not set.)\n"
                       "Switching to text based interface mode.\n\n"
-                      "Hit RETURN to continue"""))
+                      "Hit RETURN to continue.\n"))
             sys.stdin.readline()
             grass_gui = 'text'
+    return grass_gui
+
 
-    # Save the user interface variable in the grassrc file - choose a temporary
-    # file name that should not match another file
+def save_gui(gisrc, grass_gui):
+    """Save the user interface variable in the grassrc file"""
     if os.access(gisrc, os.F_OK):
-        kv = read_gisrc()
+        kv = read_gisrc(gisrc)
         kv['GUI'] = grass_gui
-        write_gisrc(kv)
+        write_gisrc(kv, gisrc)
+
+
+def create_location(gisdbase, location, geostring):
+    """Create GRASS Location using georeferenced file or EPSG
 
+    EPSG code format is ``EPSG:code`` or ``EPSG:code:datum_trans``.
 
-def non_interactive(arg, geofile=None):
-    global gisdbase, location_name, mapset, location
-    # Try non-interactive startup
+    :param gisdbase: Path to GRASS GIS database directory
+    :param location: name of new Location
+    :param geostring: path to a georeferenced file or EPSG code
+    """
+    if gpath('etc', 'python') not in sys.path:
+        sys.path.append(gpath('etc', 'python'))
+    from grass.script import core as gcore  # pylint: disable=E0611
+
+    try:
+        if geostring and geostring.upper().find('EPSG:') > -1:
+            # create location using EPSG code
+            epsg = geostring.split(':', 1)[1]
+            if ':' in epsg:
+                epsg, datum_trans = epsg.split(':', 1)
+            else:
+                datum_trans = None
+            gcore.create_location(gisdbase, location,
+                                  epsg=epsg, datum_trans=datum_trans)
+        else:
+            # create location using georeferenced file
+            gcore.create_location(gisdbase, location,
+                                  filename=geostring)
+    except gcore.ScriptError as err:
+        fatal(err.value.strip('"').strip("'").replace('\\n', os.linesep))
+
+
+# interface created according to the current usage
+def is_mapset_valid(full_mapset):
+    """Return True if GRASS Mapset is valid"""
+    return os.access(os.path.join(full_mapset, "WIND"), os.R_OK)
+
+
+def is_location_valid(gisdbase, location):
+    """Return True if GRASS Location is valid
+
+    :param gisdbase: Path to GRASS GIS database directory
+    :param location: name of a Location
+    """
+    return os.access(os.path.join(gisdbase, location,
+                                  "PERMANENT", "DEFAULT_WIND"), os.F_OK)
+
+
+# basically checking location, possibly split into two functions
+# (mapset one can call location one)
+def get_mapset_invalid_reason(gisdbase, location, mapset):
+    """Returns a message describing what is wrong with the Mapset
+
+    :param gisdbase: Path to GRASS GIS database directory
+    :param location: name of a Location
+    :param mapset: name of a Mapset
+    :returns: translated message
+    """
+    full_location = os.path.join(gisdbase, location)
+    if not os.path.exists(full_location):
+        return _("Location <%s> doesn't exist") % full_location
+    elif 'PERMANENT' not in os.listdir(full_location):
+        return _("<%s> is not a valid GRASS Location"
+                 " because PERMANENT Mapset is missing") % full_location
+    elif not os.path.isdir(os.path.join(full_location, 'PERMANENT')):
+        return _("<%s> is not a valid GRASS Location"
+                 " because PERMANENT is not a directory") % full_location
+    elif not os.path.isfile((os.path.join(full_location,
+                                          'PERMANENT', 'DEFAULT_WIND'))):
+        return _("<%s> is not a valid GRASS Location"
+                 " because PERMANENT Mapset does not have a DEFAULT_WIND file"
+                 " (default computational region)") % full_location
+    else:
+        return _("Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. "
+                 "A new mapset can be created by '-c' switch.").format(
+                     mapset=mapset, loc=location)
+
+
+def set_mapset(gisrc, arg, geofile=None, create_new=False):
+    """Selected Location and Mapset are checked and created if requested
+
+    The gisrc (GRASS environment file) is written at the end
+    (nothing is returned).
+    """
     l = None
 
     if arg == '-':
-        if location:
-            l = location
+        # TODO: repair or remove behavior env vars + `grass72 -` (see doc)
+        # this is broken for some time (before refactoring, e.g. r65235)
+        # is some code is added, it should be a separate function, probably
+        # called here
+        # older comment for global vars:
+        # TODO: it does not seem that these would be ever set before calling this
+        # function, so we may just delete them here (the globals are set from
+        # the gisrc later on). But where is setting from environmental variables?
+        # the following probable means if env var defined, use it
+        # originates from r37863 (Convert grass70 script to Python) but even
+        # there it seems that it will never succeed
+        # it would have to be defined also for other vars
+        # if location:
+        #    l = location
+        pass
     else:
         l = arg
 
@@ -580,67 +884,29 @@ def non_interactive(arg, geofile=None):
             l, mapset = os.path.split(l)
         l, location_name = os.path.split(l)
         gisdbase = l
-    
+
     if gisdbase and location_name and mapset:
         location = os.path.join(gisdbase, location_name, mapset)
 
         # check if 'location' is a valid GRASS location/mapset
-        if not os.access(os.path.join(location, "WIND"), os.R_OK):
+        if not is_mapset_valid(location):
             if not create_new:
                 # 'location' is not valid, check if 'location_name' is
                 # a valid GRASS location
-                if not os.path.exists(os.path.join(gisdbase, location_name)):
-                    fatal(_("Location <%s> doesn't exist") % os.path.join(gisdbase, location_name))
-                elif 'PERMANENT' not in os.listdir(os.path.join(gisdbase, location_name)) or \
-                        not os.path.isdir(os.path.join(gisdbase, location_name, 'PERMANENT')) or \
-                        not os.path.isfile((os.path.join(gisdbase, location_name, 'PERMANENT',
-                                                         'DEFAULT_WIND'))):
-                        fatal(_("ERROR: <%s> is not a valid GRASS location") % \
-                                  os.path.join(gisdbase, location_name))
-                else:
-                    fatal(_("Mapset <%s> doesn't exist in GRASS location <%s>. "
-                            "A new mapset can be created by '-c' switch.") % (mapset, location_name))
-
+                fatal(get_mapset_invalid_reason(gisdbase, location_name, mapset))
             else:
                 # 'location' is not valid, the user wants to create
                 # mapset on the fly
-                if not os.access(os.path.join(gisdbase, location_name,
-                                              "PERMANENT",
-                                              "DEFAULT_WIND"), os.F_OK):
+                if not is_location_valid(gisdbase, location_name):
                     # 'location_name' is not a valid GRASS location,
                     # create new location and 'PERMANENT' mapset
                     gisdbase = os.path.join(gisdbase, location_name)
                     location_name = mapset
                     mapset = "PERMANENT"
-                    if os.access(os.path.join(os.path.join(gisdbase,
-                                                           location_name,
-                                                           "PERMANENT",
-                                                           "DEFAULT_WIND")),
-                                 os.F_OK):
+                    if is_location_valid(gisdbase, location_name):
                         fatal(_("Failed to create new location. "
                                 "The location <%s> already exists." % location_name))
-                        
-                    if gfile('etc', 'python') not in sys.path:
-                        sys.path.append(gfile('etc', 'python'))
-                    from grass.script import core as grass
-                    
-                    try:
-                        if geofile and geofile.upper().find('EPSG:') > -1:
-                            # create location using EPSG code
-                            epsg = geofile.split(':', 1)[1]
-                            if ':' in epsg:
-                                epsg, datum_trans = epsg.split(':', 1)
-                            else:
-                                datum_trans = None
-                            grass.create_location(gisdbase, location_name,
-                                                  epsg=epsg, datum_trans=datum_trans)
-                        else:
-                            # create location using georeferenced file
-                            grass.create_location(gisdbase, location_name,
-                                                  filename=geofile)
-                    except grass.ScriptError as e:
-                        fatal(e.value.strip('"').strip("'").replace('\\n',
-                                                                   os.linesep))
+                    create_location(gisdbase, location_name, geofile)
                 else:
                     # 'location_name' is a valid GRASS location,
                     # create new mapset
@@ -652,86 +918,134 @@ def non_interactive(arg, geofile=None):
                     message(_("Missing WIND file fixed"))
 
         if os.access(gisrc, os.R_OK):
-            kv = read_gisrc()
+            kv = read_gisrc(gisrc)
         else:
             kv = {}
 
         kv['GISDBASE'] = gisdbase
         kv['LOCATION_NAME'] = location_name
         kv['MAPSET'] = mapset
-        write_gisrc(kv)
+        write_gisrc(kv, gisrc)
     else:
         fatal(_("GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
                 "Interactive startup needed."))
 
 
-def set_data():
-    # User selects LOCATION and MAPSET if not set
-    if not location:
-        # Check for text interface
-        if grass_gui == 'text':
-            pass
-        # Check for GUI
-        elif grass_gui in ('gtext', 'wxpython'):
-            if not os.path.exists(gfile(wxpython_base, "gis_set.py")):
-                # No GUI available, update gisrc file
-                fatal(_("<{}> requested, but not available. Run GRASS in text "
-                        "mode (-text) or install missing package (usually "
-                        "'grass-gui').").format(grass_gui))
-            else:
-                gui_startup(grass_gui == 'gtext')
-        else:
-            # Shouldn't need this but you never know
-            fatal(_("Invalid user interface specified - <%s>. " 
-                    "Use the --help option to see valid interface names.") % grass_gui)
+def set_mapset_interactive(grass_gui):
+    """User selects Location and Mapset in an interative way
 
+    The gisrc (GRASS environment file) is written at the end.
+    """
+    if not os.path.exists(wxpath("gis_set.py")) and grass_gui != 'text':
+        debug("No GUI available, switching to text mode")
+        return False
+    
+    # Check for text interface
+    if grass_gui == 'text':
+        # TODO: maybe this should be removed and solved from outside
+        # this depends on what we expect from this function
+        # should gisrc be ok after running or is it allowed to be still not set
+        pass
+    # Check for GUI
+    elif grass_gui in ('gtext', 'wxpython'):
+        gui_startup(grass_gui)
+    else:
+        # Shouldn't need this but you never know
+        fatal(_("Invalid user interface specified - <%s>. "
+                "Use the --help option to see valid interface names.") % grass_gui)
 
-def gui_startup(wscreen_only = False):
+    return True
+
+def gui_startup(grass_gui):
+    """Start GUI for startup (setting gisrc file)"""
     if grass_gui in ('wxpython', 'gtext'):
-        ret = call([os.getenv('GRASS_PYTHON'), gfile(wxpython_base, "gis_set.py")])
+        ret = call([os.getenv('GRASS_PYTHON'), wxpath("gis_set.py")])
 
+    # this if could be simplified to three branches (0, 5, rest)
+    # if there is no need to handle unknown code separately
     if ret == 0:
         pass
-    elif ret == 1:
-        # The startup script printed an error message so wait
-        # for user to read it
-        message(_("Error in GUI startup. If necessary, please "
-                  "report this error to the GRASS developers.\n"
-                  "Switching to text mode now.\n\n"
-                  "Hit RETURN to continue..."))
-        sys.stdin.readline()
-
-        os.execlp(cmd_name, "-text")
-        sys.exit(1)
-    elif ret == 2:
+    elif ret in [1, 2]:
+        # 1 probably error comming from gis_set.py
+        # 2 probably file not found from python interpreter
+        # formerly we were starting in text mode instead, now we just fail
+        # which is more straightforward for everybody
+        fatal(_("Error in GUI startup. See messages above (if any)"
+                " and if necessary, please"
+                " report this error to the GRASS developers.\n"
+                "On systems with package manager, make sure you have the right"
+                " GUI package, probably named grass-gui, installed.\n"
+                "To run GRASS GIS in text mode use the -text flag.\n"
+                "Use '--help' for further options\n"
+                "     {cmd_name} --help\n"
+                "See also: https://grass.osgeo.org/{cmd_name}/manuals/helptext.html").format(
+                    cmd_name=cmd_name))
+    elif ret == 5:  # defined in gui/wxpython/gis_set.py
         # User wants to exit from GRASS
-        message(_("Received EXIT message from GUI.\nGRASS is not started. Bye."))
+        message(_("Exit was requested in GUI.\nGRASS GIS will not start. Bye."))
         sys.exit(0)
     else:
         fatal(_("Invalid return code from GUI startup script.\n"
                 "Please advise GRASS developers of this error."))
 
 
-def load_gisrc():
-    global gisdbase, location_name, mapset, location
-    kv = read_gisrc()
-    gisdbase = kv.get('GISDBASE')
-    location_name = kv.get('LOCATION_NAME')
-    mapset = kv.get('MAPSET')
-    if not gisdbase or not location_name or not mapset:
+# we don't follow the LOCATION_NAME legacy naming here but we have to still
+# translate to it, so always double check
+class MapsetSettings(object):
+    """Holds GRASS GIS database directory, Location and Mapset
+
+    Provides few convenient functions.
+    """
+    def __init__(self):
+        self.gisdbase = None
+        self.location = None
+        self.mapset = None
+        self._full_mapset = None
+
+    # TODO: perhaps full_mapset would be better as mapset_path
+    # TODO: works only when set for the first time
+    # this follows the current usage but we must invalidate when
+    # the others are changed (use properties for that)
+    @property
+    def full_mapset(self):
+        if self._full_mapset is None:
+            self._full_mapset = os.path.join(self.gisdbase, self.location,
+                                             self.mapset)
+        return self._full_mapset
+
+    # TODO: perhaps conversion to bool would be nicer
+    def is_valid(self):
+        return self.gisdbase and self.location and self.mapset
+
+
+# TODO: does it really makes sense to tell user about gisrcrc?
+# anything could have happened in between loading from gisrcrc and now
+# (we do e.g. GUI or creating loctation)
+def load_gisrc(gisrc, gisrcrc):
+    """Get the settings of Location and Mapset from the gisrc file
+
+    :returns: MapsetSettings object
+    """
+    mapset_settings = MapsetSettings()
+    kv = read_gisrc(gisrc)
+    mapset_settings.gisdbase = kv.get('GISDBASE')
+    mapset_settings.location = kv.get('LOCATION_NAME')
+    mapset_settings.mapset = kv.get('MAPSET')
+    if not mapset_settings.is_valid():
         fatal(_("Error reading data path information from g.gisenv.\n"
-                "GISDBASE=%(gisbase)s\n"
-                "LOCATION_NAME=%(location)s\n"
-                "MAPSET=%(mapset)s\n\n"
-                "Check the <%s(file)> file." % \
-                    {'gisbase': gisdbase, 'location': location_name,
-                     'mapset': mapset, 'file': gisrcrc}))
-
-    location = os.path.join(gisdbase, location_name, mapset)
+                "GISDBASE={gisbase}\n"
+                "LOCATION_NAME={location}\n"
+                "MAPSET={mapset}\n\n"
+                "Check the <{file}> file.").format(
+                    gisbase=mapset_settings.gisdbase,
+                    location=mapset_settings.location,
+                    mapset=mapset_settings.mapset,
+                    file=gisrcrc))
+    return mapset_settings
 
 
 # load environmental variables from grass_env_file
-def load_env():
+def load_env(grass_env_file):
     if not os.access(grass_env_file, os.R_OK):
         return
 
@@ -740,17 +1054,10 @@ def load_env():
             k, v = map(lambda x: x.strip(), line.strip().split(' ', 1)[1].split('=', 1))
         except:
             continue
-        
-        evalue = os.getenv(k)
-        if evalue:
-            if k == 'GRASS_ADDON_PATH':
-                os.environ[k] = evalue + os.pathsep + v
-            else:
-                warning(_("Environmental variable '%s' already set, ignoring value '%s'") % \
-                            (k, v))
-        else:
-            os.environ[k] = v
-    
+
+        debug("Environmental variable set {}={}".format(k, v))
+        os.environ[k] = v
+
     # Allow for mixed ISIS-GRASS Environment
     if os.getenv('ISISROOT'):
         isis = os.getenv('ISISROOT')
@@ -763,7 +1070,8 @@ def load_env():
         isis3rdparty = os.getenv('ISIS_3RDPARTY')
         os.environ['LD_LIBRARY_PATH'] = libpath + os.pathsep + isislibpath + os.pathsep + isis3rdparty
 
-def set_language():
+
+def set_language(grass_config_dir):
     # This function is used to override system default language and locale
     # Such override can be requested only from wxGUI
     # An override if user has provided correct environmental variables as
@@ -772,11 +1080,9 @@ def set_language():
     # thus it always on Vista and XP will print an error.
     # See discussion for Windows not following its own documentation and
     # not accepting ISO codes as valid locale identifiers http://bugs.python.org/issue10466
-    import locale
-    
     language = 'None' # Such string sometimes is present in wx file
     encoding = None
-    
+
     # Override value is stored in wxGUI preferences file.
     # As it's the only thing required, we'll just grep it out.
     try:
@@ -791,7 +1097,7 @@ def set_language():
                 language = ''.join(line.split(';')[-1:])
                 break
         fd.close()
-    
+
     if language == 'None' or language == '' or not language:
         # Language override is disabled (system language specified)
         # As by default program runs with C locale, but users expect to
@@ -813,11 +1119,10 @@ def set_language():
         if not language:
             warning(_("Default locale settings are missing. GRASS running with C locale."))
             return
-    
+
     else:
-        if grass_debug:
-            message(_("A language override has been requested. Trying to switch GRASS into '%s'...") % language)
-        
+        debug("A language override has been requested."
+              " Trying to switch GRASS into '%s'..." % language)
         try:
             locale.setlocale(locale.LC_ALL, language)
         except locale.Error as e:
@@ -846,7 +1151,7 @@ def set_language():
                     # language
                     os.environ['LANGUAGE'] = language
                     return
-    
+
     # Set up environment for subprocesses
     os.environ['LANGUAGE'] = language
     os.environ['LANG'] = language
@@ -865,57 +1170,91 @@ def set_language():
     os.environ['LC_NUMERIC'] = 'C'
     if os.getenv('LC_ALL'):
         del os.environ['LC_ALL']  # Remove LC_ALL to not override LC_NUMERIC
-    
+
     # From now on enforce the new language
-    if encoding: 
-        gettext.install('grasslibs', os.path.join(gisbase, 'locale'), codeset=encoding)
+    if encoding:
+        gettext.install('grasslibs', gpath('locale'), codeset=encoding)
     else:
-        gettext.install('grasslibs', os.path.join(gisbase, 'locale'))
-
-def check_lock():
-    global lockfile
-    if not os.path.exists(location):
-        fatal(_("Path '%s' doesn't exist") % location)
-    if not os.access(location, os.W_OK):
-        error = _("Path '%s' not accessible.") % location
-        stat_info = os.stat(location)
+        gettext.install('grasslibs', gpath('locale'))
+
+
+# TODO: grass_gui parameter is a hack and should be removed, see below
+def lock_mapset(mapset_path, force_gislock_removal, user, grass_gui):
+    """Lock the mapset and return name of the lock file
+
+    Behavior on error must be changed somehow; now it fatals but GUI case is
+    unresolved.
+    """
+    if not os.path.exists(mapset_path):
+        fatal(_("Path '%s' doesn't exist") % mapset_path)
+    if not os.access(mapset_path, os.W_OK):
+        error = _("Path '%s' not accessible.") % mapset_path
+        stat_info = os.stat(mapset_path)
         mapset_uid = stat_info.st_uid
         if mapset_uid != os.getuid():
             # GTC %s is mapset's folder path
-            error = "%s\n%s" % (error, _("You are not the owner of '%s'.") % location)
+            error = "%s\n%s" % (error, _("You are not the owner of '%s'.") % mapset_path)
         fatal(error)
-
     # Check for concurrent use
-    lockfile = os.path.join(location, ".gislock")
-    ret = call([gfile("etc", "lock"), lockfile, "%d" % os.getpid()])
-    if ret == 0:
-        msg = None
-    elif ret == 2:
-        msg = _("%(user)s is currently running GRASS in selected mapset (" \
-                "file %(file)s found). Concurrent use not allowed." % {
-                'user': user, 'file': lockfile})
-    else:
+    lockfile = os.path.join(mapset_path, ".gislock")
+    ret = call([gpath("etc", "lock"), lockfile, "%d" % os.getpid()])
+    msg = None
+    if ret == 2:
+        if not force_gislock_removal:
+            msg = _("%(user)s is currently running GRASS in selected mapset (" \
+                    "file %(file)s found). Concurrent use not allowed.\nYou can force launching GRASS using -f flag " \
+                    "(note that you need permission for this operation). Have another look in the processor " \
+                    "manager just to be sure..." % {
+                        'user': user, 'file': lockfile})
+        else:
+            try_remove(lockfile)
+            message(_("%(user)s is currently running GRASS in selected mapset (" \
+                      "file %(file)s found). Forcing to launch GRASS..." % {
+                          'user': user, 'file': lockfile}))
+    elif ret != 0:
         msg = _("Unable to properly access '%s'.\n"
                 "Please notify system personel.") % lockfile
 
+    # TODO: the gui decision should be done by the caller
+    # this needs some change to the function interafce, return tupple or
+    # use exceptions (better option)
     if msg:
         if grass_gui == "wxpython":
-            call([os.getenv('GRASS_PYTHON'), gfile(wxpython_base, "gis_set_error.py"), msg])
+            call([os.getenv('GRASS_PYTHON'), wxpath("gis_set_error.py"), msg])
+            # TODO: here we probably miss fatal or exit, needs to be added
         else:
-            global remove_lockfile
-            remove_lockfile = False
             fatal(msg)
+    debug("Mapset <{mapset}> locked using '{lockfile}'".format(
+        mapset=mapset_path, lockfile=lockfile))
+    return lockfile
 
 
 def make_fontcap():
+    # TODO: is GRASS_FONT_CAP ever defined? It seems it must be defined in system
     fc = os.getenv('GRASS_FONT_CAP')
     if fc and not os.access(fc, os.R_OK):
         message(_("Building user fontcap..."))
         call(["g.mkfontcap"])
 
 
-def check_shell():
-    global sh, shellname, grass_env_file
+def ensure_db_connected(mapset):
+    """Predefine default driver if DB connection not defined
+
+    :param mapset: full path to the mapset
+    """
+    if not os.access(os.path.join(mapset, "VAR"), os.F_OK):
+        call(['db.connect', '-c', '--quiet'])
+
+
+def get_shell():
+    # set SHELL on ms windowns
+    # this was at the very beginning of the script but it can be anywhere
+    if windows:
+        if os.getenv('GRASS_SH'):
+            os.environ['SHELL'] = os.getenv('GRASS_SH')
+        if not os.getenv('SHELL'):
+            os.environ['SHELL'] = os.getenv('COMSPEC', 'cmd.exe')
+
     # cygwin has many problems with the shell setup
     # below, so i hardcoded everything here.
     if sys.platform == 'cygwin':
@@ -931,10 +1270,10 @@ def check_shell():
         except:
             sh = 'sh'
             os.environ['SHELL'] = sh
-        
+
         if windows and sh:
             sh = os.path.splitext(sh)[0]
-        
+
         if sh == "ksh":
             shellname = "Korn Shell"
         elif sh == "csh":
@@ -951,7 +1290,14 @@ def check_shell():
             shellname = "Command Shell"
         else:
             shellname = "shell"
+    # check for SHELL
+    if not os.getenv('SHELL'):
+        fatal(_("The SHELL variable is not set"))
+    return sh, shellname
+
 
+def get_grass_env_file(sh, grass_config_dir):
+    """Get name of the shell-specific GRASS environment (rc) file"""
     if sh in ['csh', 'tcsh']:
         grass_env_file = os.path.join(grass_config_dir, 'cshrc')
     elif sh in ['bash', 'msh', 'cygwin', 'sh']:
@@ -962,96 +1308,127 @@ def check_shell():
         grass_env_file = os.path.join(grass_config_dir, 'env.bat')
     else:
         grass_env_file = os.path.join(grass_config_dir, 'bashrc')
-        warning(_("Unsupported shell <%(sh)s>: %(env)s") % {'sh': sh,
-                                                       'env': grass_env_file})
+        warning(_("Unsupported shell <{sh}>: {env_file}").format(
+            sh=sh, env_file=grass_env_file))
+    return grass_env_file
 
-    # check for SHELL
-    if not os.getenv('SHELL'):
-        fatal(_("The SHELL variable is not set"))
 
+def get_batch_job_from_env_variable():
+    """Get script to execute from batch job variable if available
 
-def check_batch_job():
-    global batch_job
+    Fails with fatal if variable is set but content unusable.
+    """
     # hack to process batch jobs:
     batch_job = os.getenv('GRASS_BATCH_JOB')
+    # variable defined, but user might not have been careful enough
     if batch_job:
-        # defined, but ...
         if not os.access(batch_job, os.F_OK):
-          # wrong file
-          fatal(_("Job file '%s' has been defined in "
-                  "the 'GRASS_BATCH_JOB' variable but not found. Exiting.\n\n"
-                  "Use 'unset GRASS_BATCH_JOB' to disable batch job processing.") % batch_job)
+            # wrong file
+            fatal(_("Job file <%s> has been defined in "
+                    "the 'GRASS_BATCH_JOB' variable but not found. Exiting."
+                    "\n\n"
+                    "Use 'unset GRASS_BATCH_JOB' to disable "
+                    "batch job processing.") % batch_job)
         elif not os.access(batch_job, os.X_OK):
             # right file, but ...
-            fatal(_("Change file permission to 'executable' for '%s'") % batch_job)
-        else:
-            message(_("Executing '%s' ...") % batch_job)
-            grass_gui = "text"
-            shell = batch_job
-            bj = Popen(shell, shell=True)
-            bj.wait()
-            message(_("Execution of '%s' finished.") % batch_job)
+            fatal(_("Change file permission to 'executable' for <%s>")
+                  % batch_job)
+    return batch_job
 
 
-def start_gui():
-    # Start the chosen GUI but ignore text
-    if grass_debug:
-        message(_("GRASS GUI should be <%s>") % grass_gui)
+def run_batch_job(batch_job):
+    """Runs script, module or any command
+
+    If *batch_job* is a string (insecure) shell=True is used for execution.
 
+    :param batch_job: executable and parameters in a list or a string
+    """
+    batch_job_string = batch_job
+    if not isinstance(batch_job, basestring):
+        batch_job_string = ' '.join(batch_job)
+    message(_("Executing <%s> ...") % batch_job_string)
+    if isinstance(batch_job, basestring):
+        proc = Popen(batch_job, shell=True)
+    else:
+        try:
+            proc = Popen(batch_job, shell=False)
+        except OSError as error:
+            fatal(_("Execution of <{cmd}> failed:\n"
+                    "{error}").format(cmd=batch_job_string, error=error))
+    returncode = proc.wait()
+    message(_("Execution of <%s> finished.") % batch_job_string)
+    return returncode
+
+
+def start_gui(grass_gui):
+    """Start specified GUI
+
+    :param grass_gui: GUI name (allowed values: 'wxpython')
+    """
+    # Start the chosen GUI but ignore text
+    debug("GRASS GUI should be <%s>" % grass_gui)
+    
     # Check for gui interface
     if grass_gui == "wxpython":
-        Popen([os.getenv('GRASS_PYTHON'), gfile(wxpython_base, "wxgui.py")])
+        Popen([os.getenv('GRASS_PYTHON'), wxpath("wxgui.py")])
 
 
 def close_gui():
     """Close GUI if running"""
-    if gfile('etc', 'python') not in sys.path:
-        sys.path.append(gfile('etc', 'python'))
+    if gpath('etc', 'python') not in sys.path:
+        sys.path.append(gpath('etc', 'python'))
     from grass.script import core as gcore  # pylint: disable=E0611
     env = gcore.gisenv()
     if 'GUI_PID' not in env:
         return
     import signal
     for pid in env['GUI_PID'].split(','):
-        if grass_debug:
-            message("Exiting GUI with pid={}".format(pid))
-        os.kill(int(pid), signal.SIGTERM)
+        debug("Exiting GUI with pid={}".format(pid))
+        try:
+            os.kill(int(pid), signal.SIGTERM)
+        except OSError as e:
+            message(_("Unable to close GUI. {}").format(e))
         
 def clear_screen():
+    """Clear terminal"""
     if windows:
         pass
     # TODO: uncomment when PDCurses works.
     #   cls
     else:
-        if not os.getenv('GRASS_BATCH_JOB') and not grass_debug and not exit_grass:
+        if not is_debug():
             call(["tput", "clear"])
 
 
 def show_banner():
+    """Write GRASS GIS ASCII name to stderr"""
     sys.stderr.write(r"""
           __________  ___   __________    _______________
          / ____/ __ \/   | / ___/ ___/   / ____/  _/ ___/
-        / / __/ /_/ / /| | \__ \\_  \   / / __ / / \__ \ 
-       / /_/ / _, _/ ___ |___/ /__/ /  / /_/ // / ___/ / 
-       \____/_/ |_/_/  |_/____/____/   \____/___//____/  
+        / / __/ /_/ / /| | \__ \\_  \   / / __ / / \__ \
+       / /_/ / _, _/ ___ |___/ /__/ /  / /_/ // / ___/ /
+       \____/_/ |_/_/  |_/____/____/   \____/___//____/
 
 """)
 
 
 def say_hello():
+    """Write welcome to stderr including Subversion revision if in svn copy"""
     sys.stderr.write(_("Welcome to GRASS GIS %s") % grass_version)
     if grass_version.endswith('svn'):
         try:
-            filerev = open(os.path.join(gisbase, 'etc', 'VERSIONNUMBER'))
+            filerev = open(gpath('etc', 'VERSIONNUMBER'))
             linerev = filerev.readline().rstrip('\n')
             filerev.close()
-            
+
             revision = linerev.split(' ')[1]
             sys.stderr.write(' (' + revision + ')')
         except:
             pass
-    
-def show_info():
+
+
+def show_info(shellname, grass_gui, default_gui):
+    """Write basic infor about GRASS GIS and GRASS session to stderr"""
     sys.stderr.write(
 r"""
 %-41shttp://grass.osgeo.org
@@ -1066,17 +1443,17 @@ r"""
        _("Help is available with the command:"),
        _("See the licence terms with:"),
        _("See citation options with:")))
-    
+
     if grass_gui == 'wxpython':
         message("%-41sg.gui wxpython" % _("If required, restart the GUI with:"))
     else:
         message("%-41sg.gui %s" % (_("Start the GUI with:"), default_gui))
-    
+
     message("%-41sexit" % _("When ready to quit enter:"))
     message("")
 
 
-def csh_startup():
+def csh_startup(location, location_name, mapset, grass_env_file):
     userhome = os.getenv('HOME')      # save original home
     home = location
     os.environ['HOME'] = home
@@ -1120,13 +1497,14 @@ def csh_startup():
     f.close()
     writefile(tcshrc, readfile(cshrc))
 
-    process = Popen([gfile("etc", "run"), os.getenv('SHELL')])
-
+    process = Popen([gpath("etc", "run"), os.getenv('SHELL')])
+    
     os.environ['HOME'] = userhome
-
+    
     return process
 
-def bash_startup():
+
+def bash_startup(location, location_name, grass_env_file):
     # save command history in mapset dir and remember more
     os.environ['HISTFILE'] = os.path.join(location, ".bash_history")
     if not os.getenv('HISTSIZE') and not os.getenv('HISTFILESIZE'):
@@ -1145,10 +1523,10 @@ def bash_startup():
     f = open(bashrc, 'w')
     f.write("test -r ~/.alias && . ~/.alias\n")
     if os.getenv('ISISROOT'):
-        f.write("PS1='ISIS-GRASS %s (%s):\w > '\n" % (grass_version, location_name))
+        f.write("PS1='ISIS-GRASS %s (%s):\\w > '\n" % (grass_version, location_name))
     else:
-        f.write("PS1='GRASS %s (%s):\w > '\n" % (grass_version, location_name))
-    
+        f.write("PS1='GRASS %s (%s):\\w > '\n" % (grass_version, location_name))
+
     f.write("""grass_prompt() {
 	LOCATION="`g.gisenv get=GISDBASE,LOCATION_NAME,MAPSET separator='/'`"
 	if test -d "$LOCATION/grid3/G3D_MASK" && test -f "$LOCATION/cell/MASK" ; then
@@ -1164,68 +1542,69 @@ PROMPT_COMMAND=grass_prompt\n""" % (_("2D and 3D raster MASKs present"),
                                     _("3D raster MASK present")))
 
     # read environmental variables
-    path = os.path.join(userhome, ".grass.bashrc") # left for backward compatibility
-    if os.access(path, os.R_OK):
-        f.write(readfile(path) + '\n')
-    for env in os.environ.keys():
-        if env.startswith('GRASS'):
-            val = os.environ[env]
-            if ' ' in val:
-                val = '"%s"' % val
-            f.write('export %s=%s\n' % (env, val))
-    ### Replaced by code above (do not override already set up environment variables)
-    ###    if os.access(grass_env_file, os.R_OK):
-    ###        f.write(readfile(grass_env_file) + '\n')
+    for env_file in [os.path.join(userhome, ".grass.bashrc"),
+                      grass_env_file]:
+        if not os.access(env_file, os.R_OK):
+            continue
+        for line in readfile(env_file).splitlines():
+            if not line.startswith('export'):
+                f.write(line + '\n')
 
     f.write("export PATH=\"%s\"\n" % os.getenv('PATH'))
     f.write("export HOME=\"%s\"\n" % userhome) # restore user home path
 
     f.close()
-
-    process = Popen([gfile("etc", "run"), os.getenv('SHELL')])
-
+    
+    process = Popen([gpath("etc", "run"), os.getenv('SHELL')])
+    
     os.environ['HOME'] = userhome
     
     return process
 
-def default_startup():
+
+def default_startup(location, location_name):
     if windows:
         os.environ['PS1'] = "GRASS %s> " % (grass_version)
         # "$ETC/run" doesn't work at all???
         process = subprocess.Popen([os.getenv('SHELL')])
+        # TODO: is there a difference between this and clean_temp?
+        # TODO: why this is missing in the other startups?
         cleanup_dir(os.path.join(location, ".tmp"))  # remove GUI session files from .tmp
     else:
-        os.environ['PS1'] = "GRASS %s (%s):\w > " % (grass_version, location_name)
-        process = Popen([gfile("etc", "run"), os.getenv('SHELL')])
-        
+        os.environ['PS1'] = "GRASS %s (%s):\\w > " % (grass_version, location_name)
+        process = Popen([gpath("etc", "run"), os.getenv('SHELL')])
+
     return process
 
+
 def done_message():
-    if batch_job and os.access(batch_job, os.X_OK):
-        message(_("Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed.") % batch_job)
-        message(_("Goodbye from GRASS GIS"))
-        sys.exit(0)
-    else:
-        message(_("Done."))
-        message("")
-        message(_("Goodbye from GRASS GIS"))
-        message("")
+    # here was something for batch job but it was never called
+    message(_("Done."))
+    message("")
+    message(_("Goodbye from GRASS GIS"))
+    message("")
 
 
 def clean_temp():
     message(_("Cleaning up temporary files..."))
     nul = open(os.devnull, 'w')
-    call([gfile("etc", "clean_temp")], stdout=nul, stderr=nul)
+    call([gpath("etc", "clean_temp")], stdout=nul)
     nul.close()
 
 
-def grep(string,list):
-    expr = re.compile(string)
-    return [elem for elem in list if expr.match(elem)]
+def grep(pattern, lines):
+    """Search lines (list of strings) and return them when beginning matches.
+
+    >>> grep("a", ['abc', 'cab', 'sdr', 'aaa', 'sss'])
+    ['abc', 'aaa']
+    """
+    expr = re.compile(pattern)
+    return [elem for elem in lines if expr.match(elem)]
 
 
 def print_params():
-    plat = gfile(gisbase, 'include', 'Make', 'Platform.make')
+    """Write compile flags and other configuration to stderr"""
+    plat = gpath('include', 'Make', 'Platform.make')
     if not os.path.exists(plat):
         fatal(_("Please install the GRASS GIS development package"))
     fileplat = open(plat)
@@ -1235,7 +1614,7 @@ def print_params():
     params = sys.argv[2:]
     if not params:
         params = ['arch', 'build', 'compiler', 'path', 'revision']
-    
+
     for arg in params:
         if arg == 'path':
             sys.stdout.write("%s\n" % gisbase)
@@ -1243,7 +1622,7 @@ def print_params():
             val = grep('ARCH',linesplat)
             sys.stdout.write("%s\n" % val[0].split('=')[1].strip())
         elif arg == 'build':
-            build = os.path.join(gisbase,'include','grass','confparms.h')
+            build = gpath('include', 'grass', 'confparms.h')
             filebuild = open(build)
             val = filebuild.readline()
             filebuild.close()
@@ -1252,7 +1631,7 @@ def print_params():
             val = grep('CC',linesplat)
             sys.stdout.write("%s\n" % val[0].split('=')[1].strip())
         elif arg == 'revision':
-            rev = os.path.join(gisbase,'include','grass','gis.h')
+            rev = gpath('include', 'grass', 'gis.h')
             filerev = open(rev)
             linesrev = filerev.readlines()
             val = grep('#define GIS_H_VERSION', linesrev)
@@ -1263,7 +1642,7 @@ def print_params():
 
 
 def get_username():
-    global user
+    """Get name of the current user"""
     if windows:
         user = os.getenv('USERNAME')
         if not user:
@@ -1282,43 +1661,69 @@ def get_username():
                 pass
         if not user:
             user = "user_%d" % os.getuid()
+    return user
+
 
+class Parameters(object):
+    """Structure to hold standard part of command line parameters"""
+    # we don't need to define any methods
+    # pylint: disable=R0903
+    def __init__(self):
+        self.grass_gui = None
+        self.create_new = None
+        self.exit_grass = None
+        self.force_gislock_removal = None
+        self.mapset = None
+        self.geofile = None
 
-def parse_cmdline():
-    global args, grass_gui, create_new, exit_grass
+
+def parse_cmdline(argv, default_gui):
+    """Parse the standard part of command line parameters"""
+    params = Parameters()
     args = []
-    for i in sys.argv[1:]:
+    for i in argv:
         # Check if the user asked for the version
         if i in ["-v", "--version"]:
             message("GRASS GIS %s" % grass_version)
-            message('\n' + readfile(gfile("etc", "license")))
+            message('\n' + readfile(gpath("etc", "license")))
             sys.exit()
         # Check if the user asked for help
-        elif i in ["help", "-h", "-help", "--help"]:
-            help_message()
+        elif i in ["help", "-h", "-help", "--help", "--h"]:
+            help_message(default_gui=default_gui)
             sys.exit()
         # Check if the -text flag was given
         elif i in ["-text", "--text"]:
-            grass_gui = 'text'
+            params.grass_gui = 'text'
         # Check if the -gtext flag was given
         elif i in ["-gtext", "--gtext"]:
-            grass_gui = 'gtext'
+            params.grass_gui = 'gtext'
         # Check if the -gui flag was given
         elif i in ["-gui", "--gui"]:
-            grass_gui = default_gui
+            params.grass_gui = default_gui
         # Check if the -wxpython flag was given
         elif i in ["-wxpython", "-wx", "--wxpython", "--wx"]:
-            grass_gui = 'wxpython'
+            params.grass_gui = 'wxpython'
         # Check if the user wants to create a new mapset
         elif i == "-c":
-            create_new = True
+            params.create_new = True
         elif i == "-e":
-            exit_grass = True
+            params.exit_grass = True
+        elif i == "-f":
+            params.force_gislock_removal = True
         elif i == "--config":
             print_params()
             sys.exit()
         else:
             args.append(i)
+    if len(args) > 1:
+        params.mapset = args[1]
+        params.geofile = args[0]
+    elif len(args) == 1:
+        params.mapset = args[0]
+    else:
+        params.mapset = None
+    return params
+
 
 ### MAIN script starts here
 
@@ -1327,209 +1732,240 @@ windows = sys.platform == 'win32'
 cygwin = "cygwin" in sys.platform
 macosx = "darwin" in sys.platform
 
-### commented-out: broken winGRASS 
+# TODO: it is OK to remove this?
+# at the beginning of this file were are happily getting GISBASE
+# from the environment and we don't care about inconsistencies it might cause
+### commented-out: broken winGRASS
 # if 'GISBASE' in os.environ:
 #     sys.exit(_("ERROR: GRASS GIS is already running "
 #                "(environmental variable GISBASE found)"))
+# this is not really an issue, we should be able to overpower another session
 
 # Set GISBASE
 os.environ['GISBASE'] = gisbase
 
-# set HOME
-if windows and not os.getenv('HOME'):
-    os.environ['HOME'] = os.path.join(os.getenv('HOMEDRIVE'),
-                                      os.getenv('HOMEPATH'))
 
-# set SHELL
-if windows:
-    if os.getenv('GRASS_SH'):
-        os.environ['SHELL'] = os.getenv('GRASS_SH')
-    if not os.getenv('SHELL'):
-        os.environ['SHELL'] = os.getenv('COMSPEC', 'cmd.exe')
-
-atexit.register(cleanup)
-
-# Set default GUI
-default_gui = "wxpython"
+def main():
+    """The main function which does the whole setup and run procedure
 
-# the following is only meant to be an internal variable for debugging this
-# script. use 'g.gisenv set="DEBUG=[0-5]"' to turn GRASS debug mode on properly
-grass_debug = os.getenv('GRASS_DEBUG')
+    Only few things are set on the module level.
+    """
+    # Set default GUI
+    default_gui = "wxpython"
 
-# Set GRASS version number for R interface etc (must be an env_var for MS-Windows)
-os.environ['GRASS_VERSION'] = grass_version
+    # explain what is happening in debug mode (visible only in debug mode)
+    debug("GRASS_DEBUG environmental variable is set. It is meant to be"
+          " an internal variable for debugging only this script.\n"
+          " Use 'g.gisenv set=\"DEBUG=[0-5]\"'"
+          " to turn GRASS GIS debug mode on if you wish to do so.")
 
-# Set the GIS_LOCK variable to current process id
-gis_lock = str(os.getpid())
-os.environ['GIS_LOCK'] = gis_lock
+    # Set GRASS version number for R interface etc
+    # (must be an env var for MS Windows)
+    os.environ['GRASS_VERSION'] = grass_version
 
-if not os.path.exists(grass_config_dir):
-    os.mkdir(grass_config_dir)
-
-# Set the global grassrc file
-batch_job = os.getenv('GRASS_BATCH_JOB')
-if batch_job:
-    gisrcrc = os.path.join(grass_config_dir, "rc.%s" % platform.node())
-    if not os.access(gisrcrc, os.R_OK):
-        gisrcrc = os.path.join(grass_config_dir, "rc")
-else:
-    gisrcrc = os.path.join(grass_config_dir, "rc")
-
-# Set the username and working directory
-get_username()
-
-# Parse the command-line options
-parse_cmdline()
-
-if exit_grass and not create_new:
-    fatal(_("Flag -e required also flag -c"))
-# Set language
-# This has to be called before any _() function call!
-# Subsequent functions are using _() calls and
-# thus must be called only after Language has been set.
-set_language()
-
-# Create the temporary directory and session grassrc file
-create_tmp()
-
-# Create the session grassrc file
-create_gisrc()
-
-# Set shell (needs to be called before load_env())
-check_shell()
-
-# Load environmental variables from the file
-load_env()
-
-# Ensure GUI is set
-read_gui()
-
-# Set PATH, PYTHONPATH
-set_paths()
-
-# Set LD_LIBRARY_PATH (etc) to find GRASS shared libraries
-path_prepend(gfile("lib"), ld_library_path_var)
-
-# Set GRASS_PAGER, GRASS_PYTHON, GRASS_GNUPLOT, GRASS_PROJSHARE
-set_defaults()
-
-# Set GRASS_HTML_BROWSER
-set_browser()
-
-#predefine monitor size for certain architectures
-if os.getenv('HOSTTYPE') == 'arm':
-    # small monitor on ARM (iPAQ, zaurus... etc)
-    os.environ['GRASS_RENDER_HEIGHT'] = "320"
-    os.environ['GRASS_RENDER_WIDTH'] = "240"
-
-# First time user - GISRC is defined in the GRASS script
-if not os.access(gisrc, os.F_OK):
-    if grass_gui == 'text' and len(args) == 0:
-        fatal(_("Unable to start GRASS. You can:\n"
-                " - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-                " - Create manually GISRC file (%s)\n"
-                " - Launch GRASS with path to "
-                "the location/mapset as an argument (`grass70 /path/to/location/mapset`)\n"
-                " - Use '--help' for further options (`grass70 --help`)\n"
-                " See also: https://grass.osgeo.org/grass70/manuals/helptext.html") % gisrcrc)
-    create_initial_gisrc()
-else:
-    clean_temp()
+    # Set the GIS_LOCK variable to current process id
+    gis_lock = str(os.getpid())
+    os.environ['GIS_LOCK'] = gis_lock
 
-if create_new:
-    message(_("Creating new GRASS GIS location/mapset..."))
-else:
-    message(_("Starting GRASS GIS..."))
+    grass_config_dir = get_grass_config_dir()
 
-# Check that the GUI works
-check_gui()
+    batch_job = get_batch_job_from_env_variable()
 
-# Parsing argument to get LOCATION
-if not args:
-    # Try interactive startup
-    location = None
-else:
-    if create_new:
-        if len(args) > 1:
-            non_interactive(args[1], args[0])
-        else:
-            non_interactive(args[0])
+    # Parse the command-line options and set several global variables
+    batch_exec_param = '--exec'
+    try:
+        # raises ValueError when not found
+        index = sys.argv.index(batch_exec_param)
+        batch_job = sys.argv[index + 1:]
+        clean_argv = sys.argv[1:index]
+        params = parse_cmdline(clean_argv, default_gui=default_gui)
+    except ValueError:
+        params = parse_cmdline(sys.argv[1:], default_gui=default_gui)
+    if params.exit_grass and not params.create_new:
+        fatal(_("Flag -e requires also flag -c"))
+
+    grass_gui = params.grass_gui  # put it to variable, it is used a lot
+
+    gisrcrc = get_gisrc_from_config_dir(grass_config_dir, batch_job)
+
+    # Set the username
+    user = get_username()
+
+    # TODO: this might need to be moved before processing of parameters and getting batch job
+    # Set language
+    # This has to be called before any _() function call!
+    # Subsequent functions are using _() calls and
+    # thus must be called only after Language has been set.
+    set_language(grass_config_dir)
+
+    # Set shell (needs to be called before load_env())
+    sh, shellname = get_shell()
+    grass_env_file = get_grass_env_file(sh, grass_config_dir)
+
+    # Load environmental variables from the file (needs to be called
+    # before create_tmp())
+    load_env(grass_env_file)
+
+    # Create the temporary directory and session grassrc file
+    tmpdir = create_tmp(user, gis_lock)
+
+    cleaner = Cleaner()
+    cleaner.tmpdir = tmpdir
+    # object is not destroyed when its method is registered
+    atexit.register(cleaner.cleanup)
+
+    # Create the session grassrc file
+    gisrc = create_gisrc(tmpdir, gisrcrc)
+
+    ensure_home()
+    # Set PATH, PYTHONPATH, ...
+    set_paths(grass_config_dir=grass_config_dir)
+    # Set GRASS_PAGER, GRASS_PYTHON, GRASS_GNUPLOT, GRASS_PROJSHARE
+    set_defaults()
+    set_display_defaults()
+    # Set GRASS_HTML_BROWSER
+    set_browser()
+
+    # First time user - GISRC is defined in the GRASS script
+    if not os.access(gisrc, os.F_OK):
+        if grass_gui == 'text' and not params.mapset:
+            fatal(_("Unable to start GRASS GIS. You have the choice to:\n"
+                    " - Launch the graphical user interface with"
+                    " the '-gui' switch\n"
+                    "     {cmd_name} -gui\n"
+                    " - Launch with path to "
+                    "the location/mapset as an argument\n"
+                    "     {cmd_name} /path/to/location/mapset`\n"
+                    " - Create a location with '-c' and launch in its"
+                    " PERMANENT mapset\n"
+                    "     {cmd_name} -c EPSG:number /path/to/location\n"
+                    "     {cmd_name} -c geofile /path/to/location\n"
+                    " - Create manually the GISRC file ({gisrcrc})\n"
+                    " - Use '--help' for further options\n"
+                    "     {cmd_name} --help\n"
+                    "See also: https://grass.osgeo.org/{cmd_name}/manuals/helptext.html").format(
+                        cmd_name=cmd_name, gisrcrc=gisrcrc))
+        create_initial_gisrc(gisrc)
     else:
-        non_interactive(args[0])
-
-# User selects LOCATION and MAPSET if not set
-set_data()
-
-# Set GISDBASE, LOCATION_NAME, MAPSET, LOCATION from $GISRC
-load_gisrc()
-
-# Check .gislock file
-check_lock()
+        # clean only for user who is no first time
+        # (measured by presence of rc file)
+        clean_temp()
 
-# build user fontcap if specified but not present
-make_fontcap()
-
-# predefine default driver if DB connection not defined
-#  is this really needed?? Modules should call this when/if required.
-if not os.access(os.path.join(location, "VAR"), os.F_OK):
-    call(['db.connect', '-c', '--quiet'])
-
-check_batch_job()
-
-if not batch_job and not exit_grass:       
-    start_gui()
-
-clear_screen()
-
-# Display the version and license info
-if batch_job:
-    grass_gui = 'text'
-    clear_screen()
-    clean_temp()
-    try_remove(lockfile)
-    sys.exit(0)
-elif exit_grass:
-    clean_temp()
-    try_remove(lockfile)
-    sys.exit(0)
-else:
-    show_banner()
-    say_hello()
-    show_info()
-    if grass_gui == "wxpython":
-        message(_("Launching <%s> GUI in the background, please wait...") % grass_gui)
+    if params.create_new:
+        message(_("Creating new GRASS GIS location/mapset..."))
+    else:
+        message(_("Starting GRASS GIS..."))
 
-if sh in ['csh', 'tcsh']:
-    shell_process = csh_startup()
-elif sh in ['bash', 'msh', 'cygwin']:
-    shell_process = bash_startup()
-else:
-    shell_process = default_startup()
-
-# start GUI and register shell PID in rc file
-kv = read_gisrc()
-kv['PID'] = str(shell_process.pid)
-write_gisrc(kv)
-exit_val = shell_process.wait()
-if exit_val != 0:
-    warning(_("Failed to start shell '%s'") % os.getenv('SHELL'))
-    
-# close GUI if running
-close_gui()
+    # Ensure GUI is set
+    if batch_job:
+        grass_gui = 'text'
+    else:
+        if not grass_gui:
+            # if GUI was not set previously (e.g. command line),
+            # get it from rc file or env variable
+            grass_gui = read_gui(gisrc, default_gui)
+        # check that the GUI works but only if not doing a batch job
+        grass_gui = check_gui(expected_gui=grass_gui)
+        # save GUI only if we are not doibg batch job
+        save_gui(gisrc, grass_gui)
+
+    # Parsing argument to get LOCATION
+    if not params.mapset:
+        # Try interactive startup
+        # User selects LOCATION and MAPSET if not set
+        if not set_mapset_interactive(grass_gui):
+            # No GUI available, update gisrc file
+            fatal(_("<{}> requested, but not available. Run GRASS in text "
+                    "mode (-text) or install missing package (usually "
+                    "'grass-gui').").format(grass_gui))
+    else:
+        # Try non-interactive start up
+        if params.create_new and params.geofile:
+            set_mapset(gisrc=gisrc, arg=params.mapset,
+                       geofile=params.geofile, create_new=True)
+        else:
+            set_mapset(gisrc=gisrc, arg=params.mapset,
+                       create_new=params.create_new)
 
-clear_screen()
+    # Set GISDBASE, LOCATION_NAME, MAPSET, LOCATION from $GISRC
+    # e.g. wxGUI startup screen writes to the gisrc file,
+    # so loading it is the only universal way to obtain the values
+    # this suppose that both programs share the right path to gisrc file
+    # TODO: perhaps gisrcrc should be removed from here
+    # alternatively, we can check validity here with all the info we have
+    # about what was used to create gisrc
+    mapset_settings = load_gisrc(gisrc, gisrcrc=gisrcrc)
 
-clean_env()
-clean_temp()
+    location = mapset_settings.full_mapset
 
-try_remove(lockfile)
+    # TODO: it seems that we are claiming mapset's tmp before locking
+    # (this is what the original code did but it is probably wrong)
+    cleaner.mapset_path = mapset_settings.full_mapset
 
-# Save GISRC
-s = readfile(gisrc)
-writefile(gisrcrc, s)
+    # check and create .gislock file
+    cleaner.lockfile = lock_mapset(mapset_settings.full_mapset, user=user,
+                                   force_gislock_removal=params.force_gislock_removal,
+                                   grass_gui=grass_gui)
 
-cleanup()
+    # build user fontcap if specified but not present
+    make_fontcap()
 
-# After this point no more grass modules may be called
+    # TODO: is this really needed? Modules should call this when/if required.
+    ensure_db_connected(location)
 
-done_message()
+    # Display the version and license info
+    # only non-error, interactive version continues from here
+    if batch_job:
+        returncode = run_batch_job(batch_job)
+        clean_temp()
+        sys.exit(returncode)
+    elif params.exit_grass:
+        clean_temp()
+        sys.exit(0)
+    else:
+        clear_screen()
+        show_banner()
+        say_hello()
+        show_info(shellname=shellname,
+                  grass_gui=grass_gui, default_gui=default_gui)
+        if grass_gui == "wxpython":
+            message(_("Launching <%s> GUI in the background, please wait...")
+                    % grass_gui)
+        if sh in ['csh', 'tcsh']:
+            shell_process = csh_startup(mapset_settings.full_mapset,
+                                        mapset_settings.location,
+                                        mapset_settings.mapset,
+                                        grass_env_file)
+        elif sh in ['bash', 'msh', 'cygwin']:
+            shell_process = bash_startup(mapset_settings.full_mapset,
+                                         mapset_settings.location,
+                                         grass_env_file)
+        else:
+            shell_process = default_startup(mapset_settings.full_mapset,
+                                            mapset_settings.location)
+
+        # start GUI and register shell PID in rc file
+        start_gui(grass_gui)
+        kv = read_gisrc(gisrc)
+        kv['PID'] = str(shell_process.pid)
+        write_gisrc(kv, gisrc)
+        exit_val = shell_process.wait()
+        if exit_val != 0:
+            warning(_("Failed to start shell '%s'") % os.getenv('SHELL'))
+
+        # close GUI if running
+        close_gui()
+        # here we are at the end of grass session
+        clear_screen()
+        # TODO: can we just register this atexit?
+        # TODO: and what is difference to deleting .tmp which we do?
+        clean_temp()
+        # save 'last used' GISRC after removing variables which shouldn't
+        # be saved, e.g. d.mon related
+        clean_env(gisrc)
+        writefile(gisrcrc, readfile(gisrc))
+        # After this point no more grass modules may be called
+        done_message()
+
+if __name__ == '__main__':
+    main()
diff --git a/lib/init/grass.sh b/lib/init/grass.sh
index 717b217..452ae41 100755
--- a/lib/init/grass.sh
+++ b/lib/init/grass.sh
@@ -28,4 +28,4 @@ if [ -z "$GRASS_PYTHON" ] ; then
 fi
 export GRASS_PYTHON
 
-exec "$GRASS_PYTHON" "@BINDIR@/grass70.py" "$@" &
+exec "$GRASS_PYTHON" "@BINDIR@/grass72.py" "$@" &
diff --git a/lib/init/grass7.html b/lib/init/grass7.html
index eaaeca3..6b9eda0 100644
--- a/lib/init/grass7.html
+++ b/lib/init/grass7.html
@@ -2,7 +2,7 @@
 
 <h2>SYNOPSIS</h2>
 
-<b>grass70</b> [<b>-h</b> | <b>-help</b> | <b>--help</b>] [<b>-v</b> | <b>--version</b>]
+<b>grass72</b> [<b>-h</b> | <b>-help</b> | <b>--help</b>] [<b>-v</b> | <b>--version</b>]
     [<b>-c</b> | <b>-c geofile</b> | <b>-c EPSG:code[:datum_trans]</b>]
     [<b>-text</b> | <b>-gtext</b> | <b>-gui</b>]
     [[[<b><GISDBASE>/</b>]<b><LOCATION_NAME>/</b>]
@@ -28,7 +28,13 @@
 <dd> Creates new GRASS projected location in specified GISDBASE with given EPSG code
 
 <dt><b>-c EPSG:code:datum_trans</b>
-  <dd> Creates new GRASS projected location in specified GISDBASE with given EPSG code and datum transform parameters
+<dd> Creates new GRASS projected location in specified GISDBASE with given EPSG code and datum transform parameters
+
+<dt><b>-e</b>
+<dd> Exit after creation of location or mapset. Only with <b>-c</b> flag
+
+<dt><b>-f</b>
+<dd> Forces removal of .gislock if exists (use with care!). Only with -text flag
 
 <dt><b>-text</b>
 <dd> Indicates that Text-based User Interface should be used (skip welcome screen)
@@ -39,6 +45,12 @@
 <dt><b>-gui</b>
 <dd> Indicates that Graphical User Interface
 (<em><a href="wxGUI.html">wxGUI</a></em>) should be used
+
+<dt><b>--config</b>
+<dd> Prints GRASS configuration parameters (options: arch, build, compiler, path, revision)
+
+<dt><b>--exec EXECUTABLE</b>
+<dd> Execute GRASS module or script. The provided executable will be executed in a GRASS GIS non-interactive session.
 </dl>
 
 <h3>Parameters:</h3>
@@ -75,13 +87,13 @@ user interface, as well as the desired mapset to work on.
 
 <p>The startup program will remember both the desired user interface
 and mapset. Thus, the next time the user runs GRASS, typing
-<em>grass70</em> (without any options) will start GRASS with the
+<em>grass72</em> (without any options) will start GRASS with the
 previous settings for the user interface and mapset selected.
 
 <p>If you specify a graphical user interface (<b>-gui</b>)
-the <em>grass70</em> program will try to verify that the system you
+the <em>grass72</em> program will try to verify that the system you
 specified exists and that you can access it successfully. If any of
-these checks fail then <em>grass70</em> will automatically switch back
+these checks fail then <em>grass72</em> will automatically switch back
 to the text user interface mode.
 
 <h2>SAMPLE DATA</h2>
@@ -117,14 +129,14 @@ propagate).
 
 <h3>User Interface Environment Variable</h3>
 
-<p>The <em>grass70</em> program will check for the existence of an
+<p>The <em>grass72</em> program will check for the existence of an
 environment variable called GRASS_GUI which indicates the type of user
 interface for GRASS to use. If this variable is not set
-when <em>grass70</em> is run, then it will be created and then saved
+when <em>grass72</em> is run, then it will be created and then saved
 in the <tt>$HOME/.grass7/rc</tt> file for the next time GRASS is
 run. It can be set to <tt>text</tt>, <tt>gtext</tt> or <tt>gui</tt>.
 
-<p>There is an order of precedence in the way <em>grass70</em>
+<p>There is an order of precedence in the way <em>grass72</em>
 determines the user interface to use. The following is the hierarchy
 from highest precedence to lowest.
 <ol>
@@ -140,13 +152,13 @@ from highest precedence to lowest.
 interface, then the GRASS_PYTHON environment variable can be used to
 override your system default <tt>python</tt> command.
 
-<p>Suppose for example your system has Python 2.5 installed and you
-install a personal version of the Python 2.6 binaries
+<p>Suppose for example your system has Python 2.6 installed and you
+install a personal version of the Python 2.7 binaries
 under <tt>$HOME/bin</tt>. You can use the above variables to have
-GRASS use the Python 2.6 binaries instead.
+GRASS use the Python 2.7 binaries instead.
 
 <div class="code"><pre>
-   GRASS_PYTHON=python2.6
+   GRASS_PYTHON=python2.7
 </pre></div>
 
 <h3>Addon Path to Extra User Scripts</h3>
@@ -223,47 +235,91 @@ script. The script file must have its executable bit set.
 <p>The following are some examples of how you could start GRASS
 
 <dl>
-<dt><b>grass70</b>
+<dt><b>grass72</b>
 <dd> Start GRASS using the default user interface. The user will be
     prompted to choose the appropriate location and mapset.
 
-<dt><b>grass70 -gui</b>
+<dt><b>grass72 -gui</b>
 <dd> Start GRASS using the graphical user interface. The user will be
     prompted to choose the appropriate location and mapset.
 
-<dt><b>grass70 -text</b>
+<dt><b>grass72 -text</b>
 <dd> Start GRASS using the text-based user interface. Appropriate
 location and mapset must be set by environmental variables (see
 examples below) otherwise taken from the last GRASS session.</dd>
 
-<dt><b>grass70 -gtext</b>
+<dt><b>grass72 -gtext</b>
 <dd> Start GRASS using the text-based user interface. The user will be
     prompted to choose the appropriate location and mapset.
 
-<dt><b>grass70 $HOME/grassdata/spearfish60/user1</b>
+<dt><b>grass72 $HOME/grassdata/spearfish70/user1</b>
 <dd> Start GRASS using the default user interface and automatically
     launch into the given mapset, bypassing the mapset selection menu.
 
-<dt><b>grass70 -gui -</b>
+<dt><b>grass72 -gui -</b>
 <dd> Start GRASS using the graphical user interface and try to
     obtain the location and mapset from environment variables.
 
-<dt><b>grass70 -c EPSG:4326 $HOME/grassdata/mylocation</b>
+<dt><b>grass72 -c EPSG:4326 $HOME/grassdata/mylocation</b>
 <dd> Creates new GRASS location with EPSG code 4326 (latitude-longitude, WGS84)
     in the specified GISDBASE
 
-<dt><b>grass70 -c EPSG:5514:3 $HOME/grassdata/mylocation</b>
+<dt><b>grass72 -c EPSG:5514:3 $HOME/grassdata/mylocation</b>
 <dd> Creates new GRASS location with EPSG code 5514 (S-JTSK / Krovak
     East North - SJTSK) with datum transformation parameters used in
     Czech Republic in the specified GISDBASE
 
-<dt><b>grass70 -c myvector.shp $HOME/grassdata/mylocation</b>
+<dt><b>grass72 -c myvector.shp $HOME/grassdata/mylocation</b>
 <dd> Creates new GRASS location based on georeferenced Shapefile
 
-<dt><b>grass70 -c myraster.tif $HOME/grassdata/mylocation</b>
+<dt><b>grass72 -c myraster.tif $HOME/grassdata/mylocation</b>
 <dd> Creates new GRASS location based on georeferenced GeoTIFF file
 </dl>
 
+<h3>Batch jobs with the exec interface</h3>
+
+<!--
+Data created with:
+r.out.gdal input=elevation output=elevation.tiff
+r.out.gdal input=basin_50K output=basins.tiff
+Region issues ignored.
+-->
+
+Create a new Location based on a geodata file's projection (<b>-c</b>)
+and exit (<b>-e</b>):
+
+<div class="code"><pre>
+grass72 -c elevation.tiff -e /path/to/grassdata/test1/
+</pre></div>
+
+Link external raster data to PERMANENT Mapset:
+
+<div class="code"><pre>
+grass72 /path/to/grassdata/test1/PERMANENT/ --exec r.external input=basins.tiff output=basins
+grass72 /path/to/grassdata/test1/PERMANENT/ --exec r.external input=elevation.tiff output=elevation
+</pre></div>
+
+Get statistics for one raster map:
+
+<div class="code"><pre>
+grass72 /path/to/grassdata/test1/PERMANENT/ --exec r.univar map=elevation
+</pre></div>
+
+Compare the rasters visually:
+
+<div class="code"><pre>
+grass72 /path/to/grassdata/test1/PERMANENT/ --exec g.gui.mapswipe first=elevation second=basins
+</pre></div>
+
+<p>
+Note: The exec interface is also able to execute entire scripts.
+
+<p><b>Troubleshooting</b>:
+Importantly, to avoid an <tt>"[Errno 8] Exec format error"</tt> there must be a 
+<a href="https://en.wikipedia.org/wiki/Shebang_%28Unix%29">shebang</a> line at the top of
+the script (like <tt>#!/bin/sh</tt>, <tt>#!/bin/bash</tt>, or <tt>#!/usr/bin/env python</tt>)
+indicating which interpreter to be used for the script.
+
 <h3>Other examples</h3>
 
 There are a variety of ways in which the <i>location environment
@@ -284,7 +340,7 @@ MAPSET = PERMANENT
 Start GRASS with the following command:
 
 <div class="code"><pre>
-grass70 -
+grass72 -
 </pre></div>
 
 GRASS will start with the mapset defined by LOCATION since the LOCATION
@@ -296,21 +352,21 @@ The environment variables are defined as follows:
     
 <div class="code"><pre>
 GISDBASE = /usr/local/share/grassdata
-LOCATION_NAME = spearfish60
+LOCATION_NAME = spearfish70
 MAPSET = PERMANENT
 </pre></div>
 
 Start GRASS with the following command:
 
 <div class="code"><pre>
-grass70 -
+grass72 -
 </pre></div>
     
 GRASS will start with the mapset defined by
 GISDBASE/LOCATION_NAME/MAPSET.
 
 <div class="code"><pre>
-grass70 /usr/home/grass/data/thailand/forests
+grass72 /usr/home/grass/data/thailand/forests
 </pre></div>
     
 GRASS will start with the
@@ -318,7 +374,7 @@ mapset <tt>/home/grass/data/thailand/forests</tt> which overrides the
 environment variables.
 
 <div class="code"><pre>
-grass70 swamps
+grass72 swamps
 </pre></div>
 
 GRASS will start with the mapset defined by
@@ -326,7 +382,7 @@ GISDBASE/LOCATION_NAME/swamps since the command line argument for the
 mapset overrides the environment variable MAPSET.
 
 <div class="code"><pre>
-grass70 thailand/forests
+grass72 thailand/forests
 </pre></div>
 
 GRASS will start with the mapset defined by GISDBASE/thailand/forests
@@ -366,4 +422,4 @@ Hamish Bowman<br>
 Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-10-02 21:17:18 +0200 (Sun, 02 Oct 2016) $</i>
+<i>Last changed: $Date: 2016-10-02 21:17:10 +0200 (Sun, 02 Oct 2016) $</i>
diff --git a/lib/init/helptext.html b/lib/init/helptext.html
index d894098..c9426f8 100644
--- a/lib/init/helptext.html
+++ b/lib/init/helptext.html
@@ -169,13 +169,13 @@ For a first time startup, the following steps have to be followed:
      without entering the new location:
 <ul>
     <li>Using an EPSG code:<br>
-         <tt>grass70 -e -c EPSG:32630 /home/user/grassdata/mylocation</tt></li>
+         <tt>grass72 -e -c EPSG:32630 /home/user/grassdata/mylocation</tt></li>
     <li>Using a georeferenced raster or vector file:<br>
-         <tt>grass70 -e -c MyGeoReferenceFile.tif /home/user/grassdata/mylocation</tt></li>
+         <tt>grass72 -e -c MyGeoReferenceFile.tif /home/user/grassdata/mylocation</tt></li>
 </ul></li>
 <li> Create new mapset within the new location and launch GRASS GIS within
      that mapset: <br>
-         <tt>grass70 -c /home/user/grassdata/mylocation/mymapset</tt>
+         <tt>grass72 -c /home/user/grassdata/mylocation/mymapset</tt>
 </ol>
 
 
@@ -196,4 +196,4 @@ Please have a look at the GRASS GIS web site for tutorials and books:
  <a href="http://epsg.io/">List of EPSG codes</a> (Database of worldwide coordinate systems)
 
 <p>
-<i>Last changed: $Date: 2016-10-02 15:12:29 +0200 (Sun, 02 Oct 2016) $</i>
+<i>Last changed: $Date: 2016-10-02 15:11:41 +0200 (Sun, 02 Oct 2016) $</i>
diff --git a/lib/init/variables.html b/lib/init/variables.html
index c5ea8bb..f1cfc18 100644
--- a/lib/init/variables.html
+++ b/lib/init/variables.html
@@ -107,6 +107,14 @@ PERMANENT
   <dd>defines the name (path) of a shell script to be processed as
   batch job.</dd>
 
+  <dt>GRASS_COMPRESSOR</dt>
+  <dd>[libraster]<br>
+    the compression method for new raster maps can be set with the
+    environment variable GRASS_COMPRESSOR. Supported methods are RLE, 
+    ZLIB, LZ4, and BZIP2 if GRASS has been compiled with BZIP2 support. 
+    The default is ZLIB which can be changed with e.g. 
+    <tt>GRASS_COMPRESSOR=LZ4</tt></dd>
+
   <dt>GRASS_DB_ENCODING</dt>
   <dd>[various modules, wxGUI]<br>
     encoding for vector attribute data (utf-8, ascii, iso8859-1, koi8-r)</dd>
@@ -280,23 +288,58 @@ PERMANENT
 
   <dt>GRASS_VECTOR_TEMPORARY</dt>
   <dd>[vectorlib]<br> If the environment variable
-    GRASS_VECTOR_TEMPORARY exists, vector library will operate with
-    temporary vector maps. New vector maps will be created
-    in <tt>$MAPSET/.tmp/$HOSTNAME/vector</tt>, existing vector maps
-    will be read also from this directory. Note that temporary vector
-    maps are not visible to the user
-    via <em><a href="g.list.html">g.list</a></em>. They are used
-    internally by the GRASS modules and deleted automatically when the
-    map is closed or GRASS session quited. Note that this variable is
-    dedicated for internal use only.</dd>
-  
+    GRASS_VECTOR_TEMPORARY exists, GRASS vector library will operate
+    on temporary vector maps. New vector maps will be created in
+    temporary directory (see GRASS_VECTOR_TMPDIR_MAPSET variable), existing
+    vector maps will be read (if found) also from this directory. It
+    may be set to either:
+    <ul>
+      <li><tt>keep</tt> - the temporary vector map is not deleted when
+      closing the map.
+      <li><tt>move</tt> - the temporary vector map is moved to the
+      current mapset when closing the map.</li>
+      <li><tt>delete</tt> - the temporary vector map is deleted when
+      closing the map.
+      </li>
+    </ul>    
+    Default value is <tt>keep</tt>.
+
+    Note that temporary vector maps are not visible to the user
+    via <em><a href="g.list.html">g.list</a></em>
+    or <em><a href="wxGUI.html">wxGUI</a></em>. They are used
+    internally by the GRASS modules and deleted automatically when
+    GRASS session is quited.</dd>
+
+  <dt>GRASS_VECTOR_TMPDIR_MAPSET</dt>
+  <dd>[vectorlib]<br> By default GRASS temporary directory is located in
+  <tt>$LOCATION/$MAPSET/.tmp/$HOSTNAME</tt>. If GRASS_VECTOR_TMPDIR_MAPSET is
+  set to '0', the temporary directory is located in TMPDIR
+  (environmental variable defined by the user or GRASS initialization
+  script if not given).<br>
+  Important note: This variable is currently used only in vector
+  library. In other words the variable is ignored by raster or
+  raster3d library.</dd>
+
+  <dt>GRASS_VECTOR_TOPO_DEBUG</dt>
+  <dd>[vectorlib, v.generalize]<br> If the environment variable
+  GRASS_VECTOR_TOPO_DEBUG
+  exists, <em><a href="v.generalize.html">v.generalize</a></em> runs
+  in extremely slow debug mode.</dd>
+
   <dt>GRASS_WXBUNDLED</dt>
   <dd>[wxGUI]<br>
     set to tell wxGUI that a bundled wxPython will be used.<br>
     When set, the wxGUI will not check the wxPython version, as this
     function is incompatible with a bundled wxPython.  It is up to the
     packager to make sure that a compatible wxPython version is bundled.</dd>
-  
+
+  <dt>GRASS_WXVERSION</dt>
+  <dd>[wxGUI]<br>
+    set to tell wxGUI which version of wxPython to use.<br>
+    When set, the wxGUI will select the given wxPython version. It's
+    useful when multiple versions of wxPython are installed and the
+    user wants to run wxGUI with non-default wxPython version.</dd>
+
   <dt>GRASS_XTERM</dt>
   <dd>[lib/init/grass-xterm-wrapper, lib/init/grass-xterm-mac]<br>
     set to any value (e.g. rxvt, aterm, gnome-terminal, konsole) to
@@ -325,7 +368,7 @@ PERMANENT
     If OpenMP support is enabled this limits the number of threads.
     The default is set to the number of CPUs on the system.
     Setting to '1' effectively disables parallel processing.</dd>
-    
+
   <dt>TMPDIR, TEMP, TMP</dt>
   <dd>[Various GRASS GIS commands and wxGUI]<br>
   <!-- what about Windows %TEMP% and http://trac.osgeo.org/grass/ticket/560#comment:21 ? -->
@@ -373,6 +416,12 @@ PERMANENT
   <dt>GRASS_RENDER_TEXT_SIZE</dt>
   <dd>defines default text size.</dd>
 
+  <dt>GRASS_RENDER_COMMAND</dt>
+  <dd>external command called by display library to render data (see
+    example in <em><a href="displaydrivers.html">display
+    drivers</a></em> page for details).<br>Currently only Python scripts
+    are supported.</dd>
+
 </dl>
 
 For specific driver-related variables see:
@@ -525,4 +574,4 @@ Note: On MS Windows the files are stored in <tt>%APPDATA%</tt>.
 </em>
 
 <p>
-<i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/lib/loc_struct.png b/lib/loc_struct.png
index 66f01c9..3c4e331 100644
Binary files a/lib/loc_struct.png and b/lib/loc_struct.png differ
diff --git a/lib/manage/do_copy.c b/lib/manage/do_copy.c
index 916c9c9..3691e89 100644
--- a/lib/manage/do_copy.c
+++ b/lib/manage/do_copy.c
@@ -64,6 +64,8 @@ int M_do_copy(int n, const char *old, const char *mapset, const char *new)
 	    }
 	    G_file_name(path2, list[n].element[i], new, G_mapset());
 	    if (G_recursive_copy(path, path2) == 1) {
+		G_warning(_("Unable to copy <%s> to current mapset as <%s>"),
+			  G_fully_qualified_name(old, mapset), new);
 		result = 1;
 	    }
 	    else {
diff --git a/lib/pngdriver/pngdriver.html b/lib/pngdriver/pngdriver.html
index e545c53..00712e7 100644
--- a/lib/pngdriver/pngdriver.html
+++ b/lib/pngdriver/pngdriver.html
@@ -113,4 +113,4 @@ norgit.no</i>> <!-- broken link <I><a href="http://www.norgit.no">NORGIT AS</
 <br>
 Rewritten by: Glynn Clements, 2003
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/lib/proj/README.txt b/lib/proj/README.txt
index bc9f063..a440219 100644
--- a/lib/proj/README.txt
+++ b/lib/proj/README.txt
@@ -4,5 +4,18 @@ The EPGS DB is transformed into suitable CSV data for GDAL/PROJ
 according to this procedure:
 http://svn.osgeo.org/metacrs/geotiff/trunk/libgeotiff/csv/README
 
-The CSV files are used via GDAL/OGR API from
+The EPSG CSV files are used via GDAL/OGR API from
 gdal-config --datadir
+
+The datum shift grids are partially included here.
+See https://github.com/OSGeo/proj.4/wiki
+    --> Datum shift grids
+
+
+TODO: It is recommended to rely on PROJ4's proj-nad package. For doing so, 
+      there would be some changes needed to lib/proj/get_proj.c - the call
+      to pj_set_finder() should be removed so that PROJ looks in its default
+      locations for the files. Also changes needed to lib/proj/Makefile so 
+      it no longer creates the /etc/proj and /etc/proj/nad directories within
+      a GRASS installation nor installs the files there.
+
diff --git a/lib/proj/projlib.dox b/lib/proj/projlib.dox
index 88b585d..3a9345f 100644
--- a/lib/proj/projlib.dox
+++ b/lib/proj/projlib.dox
@@ -7,9 +7,9 @@ by GRASS Development Team
 
 http://grass.osgeo.org
 
-\section projintro GRASS and the PROJ4 projection library
+\section projintro GRASS GIS and the PROJ4 projection library
 
-GRASS utilizes the PROJ4 library (<a
+GRASS GIS utilizes the PROJ4 library (<a
 href="http://proj.osgeo.org">http://proj.osgeo.org</a>) originally
 developed by Gerald Evenden/USGS (Cartographic Projection Procedures
 for the UNIX Environment -- A User's Manual, Evenden, 1990, Open-file
@@ -22,8 +22,7 @@ corrections to account for different datums.
 
 This is transparent for the user as input and output parameters are
 either read from PROJ_INFO and PROJ_UNITS files (<tt>g.proj</tt>,
-<tt>v.proj</tt>, <tt>r.proj</tt>) or read from user prompts (<tt>g.proj</tt>
-and <tt>g.setproj</tt>).
+<tt>v.proj</tt>, <tt>r.proj</tt>).
 
 In GRASS the wrapper functions in lib/proj/get_proj.c makes the
 preparations to set up the parameter strings and init the info-structures,
@@ -43,18 +42,24 @@ GIS. Heavy use is made of the OGR library, part of GDAL
 
 GRASS generally supports datum transformation (3 parameters, 7 parameters
 and grid).
-<P>
+<p>
 
 If a warning appears that a certain datum is not recognised by GRASS and
 no parameters found, the datum transformation parameters have to be
 added to $GISBASE/etc/proj/datum.table (and also $GISBASE/etc/proj/datumtransform.table
 if you have 7-parameter transformation parameters). No need to re-compile
 though. When adding to SVN, currently these files are still in lib/gis/. 
+<p>
 
+A list of datum equivalents is included in convert.c for geospatial files that
+use a non-standard name for a datum that is already supported in GRASS.
+<p>
+Hint: use GDAL's "testepsg" to identify the canonical name, e.g.
+      testepsg epsg:4674
 
 \subsection Makefile_Example Makefile Example
 
-<P>
+<p>
 The following code demonstrates the Makefile.
 
 \verbatim
diff --git a/lib/psdriver/psdriver.html b/lib/psdriver/psdriver.html
index fb7a0c7..a9f6803 100644
--- a/lib/psdriver/psdriver.html
+++ b/lib/psdriver/psdriver.html
@@ -97,4 +97,4 @@ require PostScript level 3.
 Glynn Clements, 2007
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/lib/python/Makefile b/lib/python/Makefile
index 92aa9e9..2b7fb63 100644
--- a/lib/python/Makefile
+++ b/lib/python/Makefile
@@ -5,7 +5,7 @@ include $(MODULE_TOPDIR)/include/Make/Python.make
 
 PYDIR = $(ETC)/python/grass
 
-SUBDIRS = exceptions script ctypes temporal pygrass pydispatch imaging
+SUBDIRS = exceptions script ctypes temporal pygrass pydispatch imaging gunittest
 
 default: $(PYDIR)/__init__.py
 	$(MAKE) subdirs
diff --git a/lib/python/ctypes/__init__.py b/lib/python/ctypes/__init__.py
index 9e611f8..1aadf61 100644
--- a/lib/python/ctypes/__init__.py
+++ b/lib/python/ctypes/__init__.py
@@ -16,4 +16,4 @@ __all__ = [
     'stats',
     'vector',
     'vedit'
-    ]
+]
diff --git a/lib/python/ctypes/ctypesgen.py b/lib/python/ctypes/ctypesgen.py
index 33ac1c0..0092f1b 100755
--- a/lib/python/ctypes/ctypesgen.py
+++ b/lib/python/ctypes/ctypesgen.py
@@ -1,5 +1,6 @@
 #!/usr/bin/env python
 
+
 def find_names_in_modules(modules):
     names = set()
     for module in modules:
@@ -11,7 +12,12 @@ def find_names_in_modules(modules):
             names.union(dir(module))
     return names
 
-import optparse, sys
+import optparse
+import sys
+
+import ctypesgencore
+from ctypesgencore import messages as msgs
+
 
 def option_callback_W(option, opt, value, parser):
     # Options preceded by a "-Wl," are simply treated as though the "-Wl,"
@@ -26,6 +32,7 @@ def option_callback_W(option, opt, value, parser):
     # Push the linker option onto the list for further parsing.
     parser.rargs.insert(0, value)
 
+
 def option_callback_libdir(option, opt, value, parser):
     # There are two sets of linker search paths: those for use at compile time
     # and those for use at runtime. Search paths specified with -L, -R, or
@@ -33,91 +40,89 @@ def option_callback_libdir(option, opt, value, parser):
     parser.values.compile_libdirs.append(value)
     parser.values.runtime_libdirs.append(value)
 
-import ctypesgencore
-import ctypesgencore.messages as msgs
 
-if __name__=="__main__":
+if __name__ == "__main__":
     usage = 'usage: %prog [options] /path/to/header.h ...'
     op = optparse.OptionParser(usage=usage)
-    
+
     # Parameters
     op.add_option('-o', '--output', dest='output', metavar='FILE',
-        help='write wrapper to FILE')
+                  help='write wrapper to FILE')
     op.add_option('-l', '--library', dest='libraries', action='append',
-        default=[], metavar='LIBRARY', help='link to LIBRARY')
+                  default=[], metavar='LIBRARY', help='link to LIBRARY')
     op.add_option('', '--include', dest='other_headers', action='append',
-        default=[], metavar='HEADER',
-        help='include system header HEADER (e.g. stdio.h or stdlib.h)')
+                  default=[], metavar='HEADER',
+                  help='include system header HEADER (e.g. stdio.h or stdlib.h)')
     op.add_option('-m', '--module', '--link-module', action='append',
-        dest='modules', metavar='MODULE', default=[],
-        help='use symbols from Python module MODULE')
+                  dest='modules', metavar='MODULE', default=[],
+                  help='use symbols from Python module MODULE')
     op.add_option('-I', '--includedir', dest='include_search_paths',
-        action='append', default=[], metavar='INCLUDEDIR',
-        help='add INCLUDEDIR as a directory to search for headers')
+                  action='append', default=[], metavar='INCLUDEDIR',
+                  help='add INCLUDEDIR as a directory to search for headers')
     op.add_option('-W', action="callback", callback=option_callback_W,
-        metavar="l,OPTION", type="str",
-        help="where OPTION is -L, -R, or --rpath")
+                  metavar="l,OPTION", type="str",
+                  help="where OPTION is -L, -R, or --rpath")
     op.add_option("-L", "-R", "--rpath", "--libdir", action="callback",
-        callback=option_callback_libdir, metavar="LIBDIR", type="str",
-        help="Add LIBDIR to the search path (both compile-time and run-time)")
+                  callback=option_callback_libdir, metavar="LIBDIR", type="str",
+                  help="Add LIBDIR to the search path (both compile-time and run-time)")
     op.add_option('', "--compile-libdir", action="append",
-        dest="compile_libdirs", metavar="LIBDIR", default=[],
-        help="Add LIBDIR to the compile-time library search path.")
+                  dest="compile_libdirs", metavar="LIBDIR", default=[],
+                  help="Add LIBDIR to the compile-time library search path.")
     op.add_option('', "--runtime-libdir", action="append",
-        dest="runtime_libdirs", metavar="LIBDIR", default=[],
-        help="Add LIBDIR to the run-time library search path.")
-    
+                  dest="runtime_libdirs", metavar="LIBDIR", default=[],
+                  help="Add LIBDIR to the run-time library search path.")
+
     # Parser options
     op.add_option('', '--cpp', dest='cpp', default='gcc -E',
-        help='The command to invoke the c preprocessor, including any ' \
-             'necessary options (default: gcc -E)')
+                  help='The command to invoke the c preprocessor, including any '
+                  'necessary options (default: gcc -E)')
     op.add_option('', '--save-preprocessed-headers', metavar='FILENAME',
-        dest='save_preprocessed_headers', default=None,
-        help='Save the preprocessed headers to the specified FILENAME')
-    
+                  dest='save_preprocessed_headers', default=None,
+                  help='Save the preprocessed headers to the specified FILENAME')
+
     # Processor options
     op.add_option('-a', '--all-headers', action='store_true',
-        dest='all_headers', default=False,
-        help='include symbols from all headers, including system headers')
+                  dest='all_headers', default=False,
+                  help='include symbols from all headers, including system headers')
     op.add_option('', '--builtin-symbols', action='store_true',
-        dest='builtin_symbols', default=False,
-        help='include symbols automatically generated by the preprocessor')
+                  dest='builtin_symbols', default=False,
+                  help='include symbols automatically generated by the preprocessor')
     op.add_option('', '--no-macros', action='store_false', dest='include_macros',
-        default=True, help="Don't output macros.")
+                  default=True, help="Don't output macros.")
     op.add_option('-i', '--include-symbols', dest='include_symbols',
-        default=None, help='regular expression for symbols to always include')
+                  default=None, help='regular expression for symbols to always include')
     op.add_option('-x', '--exclude-symbols', dest='exclude_symbols',
-        default=None, help='regular expression for symbols to exclude')
-    
+                  default=None, help='regular expression for symbols to exclude')
+
     # Printer options
     op.add_option('', '--header-template', dest='header_template', default=None,
-        metavar='TEMPLATE',
-        help='Use TEMPLATE as the header template in the output file.')
+                  metavar='TEMPLATE',
+                  help='Use TEMPLATE as the header template in the output file.')
     op.add_option('', '--strip-build-path', dest='strip_build_path',
-        default=None, metavar='BUILD_PATH',
-        help='Strip build path from header paths in the wrapper file.')
+                  default=None, metavar='BUILD_PATH',
+                  help='Strip build path from header paths in the wrapper file.')
     op.add_option('', '--insert-file', dest='inserted_files', default=[],
-        action='append', metavar='FILENAME',
-        help='Add the contents of FILENAME to the end of the wrapper file.')
-    
+                  action='append', metavar='FILENAME',
+                  help='Add the contents of FILENAME to the end of the wrapper file.')
+
     # Error options
     op.add_option('', "--all-errors", action="store_true", default=False,
-        dest="show_all_errors", help="Display all warnings and errors even " \
-             "if they would not affect output.")
+                  dest="show_all_errors", help="Display all warnings and errors even "
+                  "if they would not affect output.")
     op.add_option('', "--show-long-errors", action="store_true", default=False,
-        dest="show_long_errors", help="Display long error messages " \
-            "instead of abbreviating error messages.")
+                  dest="show_long_errors", help="Display long error messages "
+                  "instead of abbreviating error messages.")
     op.add_option('', "--no-macro-warnings", action="store_false", default=True,
-        dest="show_macro_warnings", help="Do not print macro warnings.")
+                  dest="show_macro_warnings", help="Do not print macro warnings.")
 
     op.set_defaults(**ctypesgencore.options.default_values)
-    
+
     (options, args) = op.parse_args(list(sys.argv[1:]))
     options.headers = args
 
     # Figure out what names will be defined by imported Python modules
     options.other_known_names = find_names_in_modules(options.modules)
-    
+
     # Required parameters
     if len(args) < 1:
         msgs.error_message('No header files specified', cls='usage')
@@ -129,22 +134,22 @@ if __name__=="__main__":
 
     if len(options.libraries) == 0:
         msgs.warning_message('No libraries specified', cls='usage')
-    
+
     # Step 1: Parse
-    descriptions=ctypesgencore.parser.parse(options.headers,options)
-    
+    descriptions = ctypesgencore.parser.parse(options.headers, options)
+
     # Step 2: Process
-    ctypesgencore.processor.process(descriptions,options)
-    
+    ctypesgencore.processor.process(descriptions, options)
+
     # Step 3: Print
-    ctypesgencore.printer.WrapperPrinter(options.output,options,descriptions)
-    
+    ctypesgencore.printer.WrapperPrinter(options.output, options, descriptions)
+
     msgs.status_message("Wrapping complete.")
-    
+
     # Correct what may be a common mistake
     if descriptions.all == []:
         if not options.all_headers:
-            msgs.warning_message("There wasn't anything of use in the " \
-                "specified header file(s). Perhaps you meant to run with " \
-                "--all-headers to include objects from included sub-headers? ",
-                cls = 'usage')
+            msgs.warning_message("There wasn't anything of use in the "
+                                 "specified header file(s). Perhaps you meant to run with "
+                                 "--all-headers to include objects from included sub-headers? ",
+                                 cls='usage')
diff --git a/lib/python/ctypes/ctypesgencore/__init__.py b/lib/python/ctypes/ctypesgencore/__init__.py
index bb8ca9a..899d738 100644
--- a/lib/python/ctypes/ctypesgencore/__init__.py
+++ b/lib/python/ctypes/ctypesgencore/__init__.py
@@ -43,20 +43,20 @@ format.
 """
 
 
-__all__ = ["parser","processor","printer",
-           "descriptions","ctypedescs","expressions",
-           "messages","options"]
+__all__ = ["parser", "processor", "printer",
+           "descriptions", "ctypedescs", "expressions",
+           "messages", "options"]
 
 # Workhorse modules
-import parser
-import processor
-import printer
+from . import parser
+from . import processor
+from . import printer
 
 # Modules describing internal format
-import descriptions
-import ctypedescs
-import expressions
+from . import descriptions
+from . import ctypedescs
+from . import expressions
 
 # Helper modules
-import messages
-import options
+from . import messages
+from . import options
diff --git a/lib/python/ctypes/ctypesgencore/ctypedescs.py b/lib/python/ctypes/ctypesgencore/ctypedescs.py
index 12a3e20..b47d5fc 100644
--- a/lib/python/ctypes/ctypesgencore/ctypedescs.py
+++ b/lib/python/ctypes/ctypesgencore/ctypedescs.py
@@ -24,68 +24,77 @@ import warnings
 __docformat__ = 'restructuredtext'
 
 ctypes_type_map = {
-   # typename   signed  longs
-    ('void',    True,   0): 'None',
-    ('int',     True,   0): 'c_int',
-    ('int',     False,  0): 'c_uint',
-    ('int',     True,   1): 'c_long',
-    ('int',     False,  1): 'c_ulong',
-    ('int',     True,   2): 'c_longlong',
-    ('int',     False,  2): 'c_ulonglong',
-    ('char',    True,   0): 'c_char',
-    ('char',    False,  0): 'c_ubyte',
-    ('short',   True,   0): 'c_short',
-    ('short',   False,  0): 'c_ushort',
-    ('float',   True,   0): 'c_float',
-    ('double',  True,   0): 'c_double',
-    ('size_t',  True,   0): 'c_size_t',
-    ('int8_t',  True,   0): 'c_int8',
-    ('int16_t', True,   0): 'c_int16',
-    ('int32_t', True,   0): 'c_int32',
-    ('int64_t', True,   0): 'c_int64',
-    ('apr_int64_t',True,0): 'c_int64',
-    ('off64_t', True,   0): 'c_int64',
-    ('uint8_t', True,   0): 'c_uint8',
-    ('uint16_t',True,   0): 'c_uint16',
-    ('uint32_t',True,   0): 'c_uint32',
-    ('uint64_t',True,   0): 'c_uint64',
-    ('apr_uint64_t',True,0): 'c_uint64',
-    ('wchar_t', True,   0): 'c_wchar',
-    ('ptrdiff_t',True,  0): 'c_ptrdiff_t',  # Requires definition in preamble
-    ('ssize_t', True,   0): 'c_ptrdiff_t',  # Requires definition in preamble
-    ('va_list', True,   0): 'c_void_p',
+    # typename   signed  longs
+    ('void', True, 0): 'None',
+    ('int', True, 0): 'c_int',
+    ('int', False, 0): 'c_uint',
+    ('int', True, 1): 'c_long',
+    ('int', False, 1): 'c_ulong',
+    ('int', True, 2): 'c_longlong',
+    ('int', False, 2): 'c_ulonglong',
+    ('char', True, 0): 'c_char',
+    ('char', False, 0): 'c_ubyte',
+    ('short', True, 0): 'c_short',
+    ('short', False, 0): 'c_ushort',
+    ('float', True, 0): 'c_float',
+    ('double', True, 0): 'c_double',
+    ('size_t', True, 0): 'c_size_t',
+    ('int8_t', True, 0): 'c_int8',
+    ('int16_t', True, 0): 'c_int16',
+    ('int32_t', True, 0): 'c_int32',
+    ('int64_t', True, 0): 'c_int64',
+    ('apr_int64_t', True, 0): 'c_int64',
+    ('off64_t', True, 0): 'c_int64',
+    ('uint8_t', True, 0): 'c_uint8',
+    ('uint16_t', True, 0): 'c_uint16',
+    ('uint32_t', True, 0): 'c_uint32',
+    ('uint64_t', True, 0): 'c_uint64',
+    ('apr_uint64_t', True, 0): 'c_uint64',
+    ('wchar_t', True, 0): 'c_wchar',
+    ('ptrdiff_t', True, 0): 'c_ptrdiff_t',  # Requires definition in preamble
+    ('ssize_t', True, 0): 'c_ptrdiff_t',  # Requires definition in preamble
+    ('va_list', True, 0): 'c_void_p',
 }
 
 # This protocol is used for walking type trees.
+
+
 class CtypesTypeVisitor(object):
+
     def visit_struct(self, struct):
         pass
 
     def visit_enum(self, enum):
         pass
-    
+
     def visit_typedef(self, name):
         pass
-    
+
     def visit_error(self, error, cls):
         pass
-    
+
     def visit_identifier(self, identifier):
         # This one comes from inside ExpressionNodes. There may be
         # ExpressionNode objects in array count expressions.
         pass
 
+
 def visit_type_and_collect_info(ctype):
     class Visitor(CtypesTypeVisitor):
-        def visit_struct(self,struct):
+
+        def visit_struct(self, struct):
             structs.append(struct)
-        def visit_enum(self,enum):
+
+        def visit_enum(self, enum):
             enums.append(enum)
-        def visit_typedef(self,typedef):
+
+        def visit_typedef(self, typedef):
             typedefs.append(typedef)
-        def visit_error(self,error,cls):
-            errors.append((error,cls))
-        def visit_identifier(self,identifier):
+
+        def visit_error(self, error, cls):
+            errors.append((error, cls))
+
+        def visit_identifier(self, identifier):
             identifiers.append(identifier)
     structs = []
     enums = []
@@ -94,35 +103,41 @@ def visit_type_and_collect_info(ctype):
     identifiers = []
     v = Visitor()
     ctype.visit(v)
-    return structs,enums,typedefs,errors,identifiers
+    return structs, enums, typedefs, errors, identifiers
 
 # Remove one level of indirection from funtion pointer; needed for typedefs
 # and function parameters.
+
+
 def remove_function_pointer(t):
-    if type(t) == CtypesPointer and type(t.destination) == CtypesFunction:
+    if isinstance(t, CtypesPointer) and isinstance(t.destination, CtypesFunction):
         return t.destination
-    elif type(t) == CtypesPointer:
+    elif isinstance(t, CtypesPointer):
         t.destination = remove_function_pointer(t.destination)
         return t
     else:
         return t
 
+
 class CtypesType(object):
+
     def __init__(self):
-        self.errors=[]
-    
+        self.errors = []
+
     def __repr__(self):
         return "<Ctype \"%s\">" % self.py_string()
-    
-    def error(self,message,cls=None):
-        self.errors.append((message,cls))
-    
-    def visit(self,visitor):
-        for error,cls in self.errors:
-            visitor.visit_error(error,cls)
+
+    def error(self, message, cls=None):
+        self.errors.append((message, cls))
+
+    def visit(self, visitor):
+        for error, cls in self.errors:
+            visitor.visit_error(error, cls)
+
 
 class CtypesSimple(CtypesType):
     """Represents a builtin type, like "char" or "int"."""
+
     def __init__(self, name, signed, longs):
         CtypesType.__init__(self)
         self.name = name
@@ -130,80 +145,92 @@ class CtypesSimple(CtypesType):
         self.longs = longs
 
     def py_string(self):
-        return ctypes_type_map[(self.name,self.signed,self.longs)]
+        return ctypes_type_map[(self.name, self.signed, self.longs)]
+
 
 class CtypesSpecial(CtypesType):
-    def __init__(self,name):
+
+    def __init__(self, name):
         CtypesType.__init__(self)
         self.name = name
-    
+
     def py_string(self):
         return self.name
 
+
 class CtypesTypedef(CtypesType):
     """Represents a type defined by a typedef."""
+
     def __init__(self, name):
         CtypesType.__init__(self)
         self.name = name
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         if not self.errors:
             visitor.visit_typedef(self.name)
-        CtypesType.visit(self,visitor)
-    
+        CtypesType.visit(self, visitor)
+
     def py_string(self):
         return self.name
 
+
 class CtypesBitfield(CtypesType):
+
     def __init__(self, base, bitfield):
         CtypesType.__init__(self)
         self.base = base
         self.bitfield = bitfield
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         self.base.visit(visitor)
-        CtypesType.visit(self,visitor)
-    
+        CtypesType.visit(self, visitor)
+
     def py_string(self):
         return self.base.py_string()
 
+
 class CtypesPointer(CtypesType):
+
     def __init__(self, destination, qualifiers):
         CtypesType.__init__(self)
         self.destination = destination
         self.qualifiers = qualifiers
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         if self.destination:
             self.destination.visit(visitor)
-        CtypesType.visit(self,visitor)
+        CtypesType.visit(self, visitor)
 
     def py_string(self):
         return 'POINTER(%s)' % self.destination.py_string()
 
+
 class CtypesArray(CtypesType):
+
     def __init__(self, base, count):
         CtypesType.__init__(self)
         self.base = base
         self.count = count
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         self.base.visit(visitor)
         if self.count:
             self.count.visit(visitor)
-        CtypesType.visit(self,visitor)
-    
+        CtypesType.visit(self, visitor)
+
     def py_string(self):
         if self.count is None:
             return 'POINTER(%s)' % self.base.py_string()
-        if type(self.base) == CtypesArray:
+        if isinstance(self.base, CtypesArray):
             return '(%s) * %s' % (self.base.py_string(),
                                   self.count.py_string(False))
         else:
             return '%s * %s' % (self.base.py_string(),
                                 self.count.py_string(False))
 
+
 class CtypesFunction(CtypesType):
+
     def __init__(self, restype, parameters, variadic=False):
         CtypesType.__init__(self)
         self.restype = restype
@@ -212,8 +239,8 @@ class CtypesFunction(CtypesType):
         # when ctypes automagically returns it as an int.
         # Instead, convert to POINTER(c_void).  c_void is not a ctypes type,
         # you can make it any arbitrary type.
-        if type(self.restype) == CtypesPointer and \
-           type(self.restype.destination) == CtypesSimple and \
+        if isinstance(self.restype, CtypesPointer) and \
+           isinstance(self.restype.destination, CtypesSimple) and \
            self.restype.destination.name == 'None':
             self.restype = CtypesPointer(CtypesSpecial('c_void'), ())
 
@@ -223,55 +250,59 @@ class CtypesFunction(CtypesType):
 
         self.argtypes = [remove_function_pointer(p) for p in parameters]
         self.variadic = variadic
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         self.restype.visit(visitor)
         for a in self.argtypes:
             a.visit(visitor)
-        CtypesType.visit(self,visitor)
+        CtypesType.visit(self, visitor)
 
     def py_string(self):
         return 'CFUNCTYPE(UNCHECKED(%s), %s)' % (self.restype.py_string(),
-            ', '.join([a.py_string() for a in self.argtypes]))
+                                                 ', '.join([a.py_string() for a in self.argtypes]))
 
 last_tagnum = 0
+
+
 def anonymous_struct_tag():
     global last_tagnum
     last_tagnum += 1
     return 'anon_%d' % last_tagnum
 
+
 class CtypesStruct(CtypesType):
+
     def __init__(self, tag, variety, members, src=None):
         CtypesType.__init__(self)
         self.tag = tag
-        self.variety = variety # "struct" or "union"
+        self.variety = variety  # "struct" or "union"
         self.members = members
-        
+
         if not self.tag:
             self.tag = anonymous_struct_tag()
             self.anonymous = True
         else:
             self.anonymous = False
-        
-        if self.members==None:
+
+        if self.members is None:
             self.opaque = True
         else:
             self.opaque = False
-        
-        self.src = src        
-    
+
+        self.src = src
+
     def get_required_types(self):
         types = CtypesType.get_required_types(self)
-        types.add((self.variety,self.tag))
+        types.add((self.variety, self.tag))
         return types
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         visitor.visit_struct(self)
         if not self.opaque:
-            for name,ctype in self.members:
+            for name, ctype in self.members:
                 ctype.visit(visitor)
-        CtypesType.visit(self,visitor)
-    
+        CtypesType.visit(self, visitor)
+
     def get_subtypes(self):
         if self.opaque:
             return set()
@@ -279,36 +310,40 @@ class CtypesStruct(CtypesType):
             return set([m[1] for m in self.members])
 
     def py_string(self):
-        return "%s_%s" % (self.variety,self.tag)
+        return "%s_%s" % (self.variety, self.tag)
 
 last_tagnum = 0
+
+
 def anonymous_enum_tag():
     global last_tagnum
     last_tagnum += 1
     return 'anon_%d' % last_tagnum
 
+
 class CtypesEnum(CtypesType):
+
     def __init__(self, tag, enumerators, src=None):
         CtypesType.__init__(self)
         self.tag = tag
         self.enumerators = enumerators
-        
+
         if not self.tag:
             self.tag = anonymous_enum_tag()
             self.anonymous = True
         else:
             self.anonymous = False
-        
-        if self.enumerators==None:
+
+        if self.enumerators is None:
             self.opaque = True
         else:
             self.opaque = False
-        
+
         self.src = src
-        
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         visitor.visit_enum(self)
-        CtypesType.visit(self,visitor)
+        CtypesType.visit(self, visitor)
 
     def py_string(self):
         return 'enum_%s' % self.tag
diff --git a/lib/python/ctypes/ctypesgencore/descriptions.py b/lib/python/ctypes/ctypesgencore/descriptions.py
index f4e79b4..0376b19 100644
--- a/lib/python/ctypes/ctypesgencore/descriptions.py
+++ b/lib/python/ctypes/ctypesgencore/descriptions.py
@@ -8,182 +8,224 @@ The descriptions module also contains a class, DescriptionCollection, to hold
 lists of Description objects.
 """
 
+
 class DescriptionCollection(object):
     """Represents a collection of Descriptions."""
-    def __init__(self,constants,typedefs,structs,enums,functions,variables,
-                 macros,all,output_order):
-        self.constants=constants
-        self.typedefs=typedefs
-        self.structs=structs
-        self.enums=enums
-        self.functions=functions
-        self.variables=variables
-        self.macros=macros
-        self.all=all
-        self.output_order=output_order
+
+    def __init__(self, constants, typedefs, structs, enums, functions, variables,
+                 macros, all, output_order):
+        self.constants = constants
+        self.typedefs = typedefs
+        self.structs = structs
+        self.enums = enums
+        self.functions = functions
+        self.variables = variables
+        self.macros = macros
+        self.all = all
+        self.output_order = output_order
+
 
 class Description(object):
     """Represents a constant, typedef, struct, function, variable, enum,
     or macro description. Description is an abstract base class."""
-    def __init__(self,src=None):
-        self.src=src # A tuple of (filename, lineno)
-        
+
+    def __init__(self, src=None):
+        self.src = src  # A tuple of (filename, lineno)
+
         # If object will be included in output file. Values are "yes", "never",
         # and "if_needed".
-        self.include_rule="yes" 
-        
+        self.include_rule = "yes"
+
         # A word about requirements, and dependents:
         # If X requires Y, Y is in X.requirements.
         # If X is in Y.requirements, then Y is in X.dependents.
-        self.requirements=set()
-        self.dependents=set()
-        
+        self.requirements = set()
+        self.dependents = set()
+
         # If the processor module finds a fatal error that prevents a
         # a description from being output, then it appends a string describing
         # the problem to 'errors'. If it finds a nonfatal error, it appends a
         # string to 'warnings'. If the description would have been output, then
         # the errors and warnings are printed.
-        
+
         # If there is anything in 'errors' after processing is complete, the
         # description is not output.
-        
-        self.errors=[] 
-        self.warnings=[]
-    
-    def add_requirements(self,reqs):
+
+        self.errors = []
+        self.warnings = []
+
+    def add_requirements(self, reqs):
         self.requirements = self.requirements.union(reqs)
         for req in reqs:
             req.dependents.add(self)
-    
-    def error(self,msg,cls = None):
-        self.errors.append((msg,cls))
-    def warning(self,msg,cls = None):
-        self.warnings.append((msg,cls))
-    
+
+    def error(self, msg, cls=None):
+        self.errors.append((msg, cls))
+
+    def warning(self, msg, cls=None):
+        self.warnings.append((msg, cls))
+
     def __repr__(self):
         return "<Description: %s>" % self.casual_name()
-    
+
     def casual_name(self):
         """Return a name to show the user."""
+
     def py_name(self):
         """Return the name associated with this description in Python code."""
+
     def c_name(self):
         """Return the name associated with this description in C code."""
 
+
 class ConstantDescription(Description):
     """Simple class to contain information about a constant."""
-    def __init__(self,name,value,src=None):
-        Description.__init__(self,src)
+
+    def __init__(self, name, value, src=None):
+        Description.__init__(self, src)
         # Name of constant, a string
-        self.name=name 
+        self.name = name
         # Value of constant, as an ExpressionNode object
-        self.value=value 
+        self.value = value
+
     def casual_name(self):
-        return "Constant \"%s\""%self.name
+        return "Constant \"%s\"" % self.name
+
     def py_name(self):
         return self.name
+
     def c_name(self):
         return self.name
 
+
 class TypedefDescription(Description):
     """Simple container class for a type definition."""
-    def __init__(self,name,ctype,src=None):
-        Description.__init__(self,src)
-        self.name=name # Name, a string
-        self.ctype=ctype # The base type as a ctypedescs.CtypeType object
+
+    def __init__(self, name, ctype, src=None):
+        Description.__init__(self, src)
+        self.name = name  # Name, a string
+        self.ctype = ctype  # The base type as a ctypedescs.CtypeType object
+
     def casual_name(self):
-        return "Typedef \"%s\""%self.name
+        return "Typedef \"%s\"" % self.name
+
     def py_name(self):
         return self.name
+
     def c_name(self):
         return self.name
 
+
 class StructDescription(Description):
     """Simple container class for a structure or union definition."""
-    def __init__(self,tag,variety,members,opaque,ctype,src=None):
-        Description.__init__(self,src)
+
+    def __init__(self, tag, variety, members, opaque, ctype, src=None):
+        Description.__init__(self, src)
         # The name of the structure minus the "struct" or "union"
-        self.tag=tag 
+        self.tag = tag
         # A string "struct" or "union"
-        self.variety=variety 
+        self.variety = variety
         # A list of pairs of (name,ctype)
-        self.members=members 
+        self.members = members
         # True if struct body was not specified in header file
-        self.opaque=opaque 
+        self.opaque = opaque
         # The original CtypeStruct that created the struct
-        self.ctype=ctype 
+        self.ctype = ctype
+
     def casual_name(self):
-        return "%s \"%s\""%(self.variety.capitalize(),self.tag)
+        return "%s \"%s\"" % (self.variety.capitalize(), self.tag)
+
     def py_name(self):
-        return "%s_%s"%(self.variety,self.tag)
+        return "%s_%s" % (self.variety, self.tag)
+
     def c_name(self):
-        return "%s %s"%(self.variety,self.tag)
+        return "%s %s" % (self.variety, self.tag)
+
 
 class EnumDescription(Description):
     """Simple container class for an enum definition."""
-    def __init__(self,tag,members,ctype,src=None):
-        Description.__init__(self,src)
+
+    def __init__(self, tag, members, ctype, src=None):
+        Description.__init__(self, src)
         # The name of the enum, minus the "enum"
-        self.tag=tag 
+        self.tag = tag
         # A list of (name,value) pairs where value is a number
-        self.members=members 
+        self.members = members
         # The original CtypeEnum that created the enum
-        self.ctype=ctype 
+        self.ctype = ctype
+
     def casual_name(self):
-        return "Enum \"%s\""%self.tag
+        return "Enum \"%s\"" % self.tag
+
     def py_name(self):
-        return "enum_%s"%self.tag
+        return "enum_%s" % self.tag
+
     def c_name(self):
-        return "enum %s"%self.tag
+        return "enum %s" % self.tag
+
 
 class FunctionDescription(Description):
     """Simple container class for a C function."""
-    def __init__(self,name,restype,argtypes,variadic=False,src=None):
-        Description.__init__(self,src)
+
+    def __init__(self, name, restype, argtypes, variadic=False, src=None):
+        Description.__init__(self, src)
         # Name, a string
-        self.name=name 
+        self.name = name
         # Name according to C - stored in case description is renamed
-        self.cname=name 
+        self.cname = name
         # A ctype representing return type
-        self.restype=restype 
+        self.restype = restype
         # A list of ctypes representing the argument types
-        self.argtypes=argtypes 
+        self.argtypes = argtypes
         # Does this function accept a variable number of arguments?
-        self.variadic=variadic 
+        self.variadic = variadic
+
     def casual_name(self):
-        return "Function \"%s\""%self.name
+        return "Function \"%s\"" % self.name
+
     def py_name(self):
         return self.name
+
     def c_name(self):
         return self.cname
 
+
 class VariableDescription(Description):
     """Simple container class for a C variable declaration."""
-    def __init__(self,name,ctype,src=None):
-        Description.__init__(self,src)
+
+    def __init__(self, name, ctype, src=None):
+        Description.__init__(self, src)
         # Name, a string
-        self.name=name 
+        self.name = name
         # Name according to C - stored in case description is renamed
-        self.cname=name 
+        self.cname = name
         # The type of the variable
-        self.ctype=ctype 
+        self.ctype = ctype
+
     def casual_name(self):
-        return "Variable \"%s\""%self.name
+        return "Variable \"%s\"" % self.name
+
     def py_name(self):
         return self.name
+
     def c_name(self):
         return self.cname
 
+
 class MacroDescription(Description):
     """Simple container class for a C macro."""
-    def __init__(self,name,params,expr,src=None):
-        Description.__init__(self,src)
+
+    def __init__(self, name, params, expr, src=None):
+        Description.__init__(self, src)
         self.name = name
         self.params = params
-        self.expr = expr # ExpressionNode for the macro's body
+        self.expr = expr  # ExpressionNode for the macro's body
+
     def casual_name(self):
-        return "Macro \"%s\""%self.name
+        return "Macro \"%s\"" % self.name
+
     def py_name(self):
         return self.name
+
     def c_name(self):
-        return self.name
\ No newline at end of file
+        return self.name
diff --git a/lib/python/ctypes/ctypesgencore/expressions.py b/lib/python/ctypes/ctypesgencore/expressions.py
index b997477..8f3e7cd 100644
--- a/lib/python/ctypes/ctypesgencore/expressions.py
+++ b/lib/python/ctypes/ctypesgencore/expressions.py
@@ -6,9 +6,11 @@ class is ExpressionNode. ExpressionNode's most useful method is py_string(),
 which returns a Python string representing that expression.
 '''
 
-from ctypedescs import *
 import keyword
 
+from .ctypedescs import *
+
+
 # Right now, the objects in this module are all oriented toward evaluation.
 # However, they don't have to be, since ctypes objects are mutable. For example,
 # shouldn't it be possible to translate the macro:
@@ -23,9 +25,11 @@ import keyword
 #
 # On the other hand, this would be a challenge to write.
 
+
 class EvaluationContext(object):
     '''Interface for evaluating expression nodes.
     '''
+
     def evaluate_identifier(self, name):
         warnings.warn('Attempt to evaluate identifier "%s" failed' % name)
         return 0
@@ -33,38 +37,42 @@ class EvaluationContext(object):
     def evaluate_sizeof(self, type):
         warnings.warn('Attempt to evaluate sizeof "%s" failed' % str(type))
         return 0
-    
+
     def evaluate_sizeof(self, object):
         warnings.warn('Attempt to evaluate sizeof object "%s" failed' % str(object))
         return 0
-    
+
     def evaluate_parameter(self, name):
         warnings.warn('Attempt to evaluate parameter "%s" failed' % name)
         return 0
 
+
 class ExpressionNode(object):
+
     def __init__(self):
         self.errors = []
-    
-    def error(self,message,cls = None):
-        self.errors.append((message,cls))
-    
+
+    def error(self, message, cls=None):
+        self.errors.append((message, cls))
+
     def __repr__(self):
         try:
             string = repr(self.py_string(True))
         except ValueError:
             string = "<error in expression node>"
         return "<ExpressionNode: %s>" % string
-    
-    def visit(self,visitor):
-        for error,cls in self.errors:
-            visitor.visit_error(error,cls)
+
+    def visit(self, visitor):
+        for error, cls in self.errors:
+            visitor.visit_error(error, cls)
+
 
 class ConstantExpressionNode(ExpressionNode):
+
     def __init__(self, value):
         ExpressionNode.__init__(self)
         self.value = value
-    
+
     def evaluate(self, context):
         return self.value
 
@@ -82,40 +90,46 @@ class ConstantExpressionNode(ExpressionNode):
             return "float('-inf')"
         return repr(self.value)
 
+
 class IdentifierExpressionNode(ExpressionNode):
+
     def __init__(self, name):
         ExpressionNode.__init__(self)
         self.name = name
 
     def evaluate(self, context):
         return context.evaluate_identifier(self.name)
-    
+
     def visit(self, visitor):
         visitor.visit_identifier(self.name)
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def py_string(self, can_be_ctype):
         # Errors will be thrown in generated code if identifier evaluates
         # to a ctypes object, and can_be_ctype is False.
         return self.name
 
+
 class ParameterExpressionNode(ExpressionNode):
+
     def __init__(self, name):
         ExpressionNode.__init__(self)
         self.name = name
-    
+
     def evaluate(self, context):
         return context.evaluate_parameter(self.name)
-    
+
     def visit(self, visitor):
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def py_string(self, can_be_ctype):
         # Errors will be thrown in generated code if parameter is
         # a ctypes object, and can_be_ctype is False.
         return self.name
 
+
 class UnaryExpressionNode(ExpressionNode):
+
     def __init__(self, name, op, format, child_can_be_ctype, child):
         ExpressionNode.__init__(self)
         self.name = name
@@ -123,31 +137,33 @@ class UnaryExpressionNode(ExpressionNode):
         self.format = format
         self.child_can_be_ctype = child_can_be_ctype
         self.child = child
-    
+
     def visit(self, visitor):
         self.child.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def evaluate(self, context):
         if self.op:
             return self.op(self.child.evaluate(context))
         else:
-            raise ValueError,"The C operator \"%s\" can't be evaluated right " \
-                "now" % self.name
+            raise ValueError("The C operator \"%s\" can't be evaluated right "
+                             "now" % self.name)
 
     def py_string(self, can_be_ctype):
         return self.format % \
             self.child.py_string(self.child_can_be_ctype and can_be_ctype)
 
+
 class SizeOfExpressionNode(ExpressionNode):
+
     def __init__(self, child):
         ExpressionNode.__init__(self)
         self.child = child
-    
+
     def visit(self, visitor):
         self.child.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def evaluate(self, context):
         if isinstance(self.child, CtypesType):
             return context.evaluate_sizeof(self.child)
@@ -160,7 +176,9 @@ class SizeOfExpressionNode(ExpressionNode):
         else:
             return 'sizeof(%s)' % self.child.py_string(True)
 
+
 class BinaryExpressionNode(ExpressionNode):
+
     def __init__(self, name, op, format, can_be_ctype, left, right):
         ExpressionNode.__init__(self)
         self.name = name
@@ -169,38 +187,40 @@ class BinaryExpressionNode(ExpressionNode):
         self.can_be_ctype = can_be_ctype
         self.left = left
         self.right = right
-    
+
     def visit(self, visitor):
         self.left.visit(visitor)
         self.right.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def evaluate(self, context):
         if self.op:
-           return self.op(self.left.evaluate(context), 
-                          self.right.evaluate(context))
+            return self.op(self.left.evaluate(context),
+                           self.right.evaluate(context))
         else:
-            raise ValueError,"The C operator \"%s\" can't be evaluated right " \
-                "now" % self.name
+            raise ValueError("The C operator \"%s\" can't be evaluated right "
+                             "now" % self.name)
 
     def py_string(self, can_be_ctype):
         return self.format % \
             (self.left.py_string(self.can_be_ctype[0] and can_be_ctype),
              self.right.py_string(self.can_be_ctype[0] and can_be_ctype))
 
+
 class ConditionalExpressionNode(ExpressionNode):
+
     def __init__(self, cond, yes, no):
         ExpressionNode.__init__(self)
         self.cond = cond
         self.yes = yes
         self.no = no
-    
+
     def visit(self, visitor):
         self.cond.visit(visitor)
         self.yes.visit(visitor)
         self.no.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def evaluate(self, context):
         if self.cond.evaluate(context):
             return self.yes.evaluate(context)
@@ -213,100 +233,109 @@ class ConditionalExpressionNode(ExpressionNode):
              self.cond.py_string(True),
              self.no.py_string(can_be_ctype))
 
+
 class AttributeExpressionNode(ExpressionNode):
+
     def __init__(self, op, format, base, attribute):
         ExpressionNode.__init__(self)
         self.op = op
         self.format = format
         self.base = base
         self.attribute = attribute
-        
-        # Attribute access will raise parse errors if you don't do this. 
-        # Fortunately, the processor module does the same thing to 
+
+        # Attribute access will raise parse errors if you don't do this.
+        # Fortunately, the processor module does the same thing to
         # the struct member name.
         if self.attribute in keyword.kwlist:
-            self.attribute = "_"+self.attribute
-    
-    def visit(self,visitor):
+            self.attribute = "_" + self.attribute
+
+    def visit(self, visitor):
         self.base.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
+        ExpressionNode.visit(self, visitor)
+
     def evaluate(self, context):
-        return self.op(self.base.evalute(context),self.attribute)
-    
+        return self.op(self.base.evalute(context), self.attribute)
+
     def py_string(self, can_be_ctype):
         if can_be_ctype:
             return self.format % (self.base.py_string(can_be_ctype),
                                   self.attribute)
         else:
-            return "(%s.value)" % (self.format % \
-                    (self.base.py_string(can_be_ctype), self.attribute))
+            return "(%s.value)" % (self.format %
+                                   (self.base.py_string(can_be_ctype), self.attribute))
+
 
 class CallExpressionNode(ExpressionNode):
-    def __init__(self,function,arguments):
+
+    def __init__(self, function, arguments):
         ExpressionNode.__init__(self)
         self.function = function
         self.arguments = arguments
-    
-    def visit(self,visitor):
+
+    def visit(self, visitor):
         self.function.visit(visitor)
         for arg in self.arguments:
             arg.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
-    def evaluate(self,context):
+        ExpressionNode.visit(self, visitor)
+
+    def evaluate(self, context):
         arguments = [arg.evaluate(context) for arg in self.arguments]
         return self.function.evaluate(context)(*arguments)
-    
+
     def py_string(self, can_be_ctype):
         function = self.function.py_string(can_be_ctype)
         arguments = [x.py_string(can_be_ctype) for x in self.arguments]
         if can_be_ctype:
-            return '(%s (%s))' % (function,", ".join(arguments))
+            return '(%s (%s))' % (function, ", ".join(arguments))
         else:
-            return '((%s (%s)).value)' % (function,", ".join(arguments))
+            return '((%s (%s)).value)' % (function, ", ".join(arguments))
 
 # There seems not to be any reasonable way to translate C typecasts
 # into Python. Ctypesgen doesn't try, except for the special case of NULL.
+
+
 class TypeCastExpressionNode(ExpressionNode):
+
     def __init__(self, base, ctype):
         ExpressionNode.__init__(self)
         self.base = base
         self.ctype = ctype
         self.isnull = isinstance(ctype, CtypesPointer) and \
-                      isinstance(base, ConstantExpressionNode) and \
-                      base.value == 0
-    
-    def visit(self,visitor):
+            isinstance(base, ConstantExpressionNode) and \
+            base.value == 0
+
+    def visit(self, visitor):
         # No need to visit ctype because it isn't actually used
         self.base.visit(visitor)
-        ExpressionNode.visit(self,visitor)
-    
-    def evaluate(self,context):
+        ExpressionNode.visit(self, visitor)
+
+    def evaluate(self, context):
         if self.isnull:
             return None
         else:
             return self.base.evaluate(context)
-    
+
     def py_string(self, can_be_ctype):
         if self.isnull:
             return "None"
         else:
             return self.base.py_string(can_be_ctype)
 
+
 class UnsupportedExpressionNode(ExpressionNode):
-    def __init__(self,message):
+
+    def __init__(self, message):
         ExpressionNode.__init__(self)
         self.message = message
-        self.error(message,'unsupported-type')
-    
-    def evaluate(self,context):
-        raise ValueError, "Tried to evaluate an unsupported expression " \
-            "node: %s" % self.message
-    
+        self.error(message, 'unsupported-type')
+
+    def evaluate(self, context):
+        raise ValueError("Tried to evaluate an unsupported expression "
+                         "node: %s" % self.message)
+
     def __repr__(self):
         return "<UnsupportedExpressionNode>"
-    
+
     def py_string(self, can_be_ctype):
-        raise ValueError, "Called py_string() an unsupported expression " \
-            "node: %s" % self.message
+        raise ValueError("Called py_string() an unsupported expression "
+                         "node: %s" % self.message)
diff --git a/lib/python/ctypes/ctypesgencore/libraryloader.py b/lib/python/ctypes/ctypesgencore/libraryloader.py
index d29f4f6..ab2fd5e 100644
--- a/lib/python/ctypes/ctypesgencore/libraryloader.py
+++ b/lib/python/ctypes/ctypesgencore/libraryloader.py
@@ -2,14 +2,14 @@
 # Copyright (c) 2008 David James
 # Copyright (c) 2006-2008 Alex Holkner
 # All rights reserved.
-# 
+#
 # Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions 
+# modification, are permitted provided that the following conditions
 # are met:
 #
 #  * Redistributions of source code must retain the above copyright
 #    notice, this list of conditions and the following disclaimer.
-#  * Redistributions in binary form must reproduce the above copyright 
+#  * Redistributions in binary form must reproduce the above copyright
 #    notice, this list of conditions and the following disclaimer in
 #    the documentation and/or other materials provided with the
 #    distribution.
@@ -32,31 +32,38 @@
 # POSSIBILITY OF SUCH DAMAGE.
 # ----------------------------------------------------------------------------
 
-import os.path, re, sys, glob
+import glob
+import os.path
+import re
+import sys
+
 import ctypes
 import ctypes.util
 
+
 def _environ_path(name):
     if name in os.environ:
         return os.environ[name].split(":")
     else:
         return []
 
+
 class LibraryLoader(object):
+
     def __init__(self):
-        self.other_dirs=[]
-    
-    def load_library(self,libname):
+        self.other_dirs = []
+
+    def load_library(self, libname):
         """Given the name of a library, load it."""
         paths = self.getpaths(libname)
-        
+
         for path in paths:
             if os.path.exists(path):
                 return self.load(path)
-        
-        raise ImportError,"%s not found." % libname
-    
-    def load(self,path):
+
+        raise ImportError("%s not found." % libname)
+
+    def load(self, path):
         """Given a path to a library, load it."""
         try:
             # Darwin requires dlopen to be called with mode RTLD_GLOBAL instead
@@ -68,42 +75,44 @@ class LibraryLoader(object):
             else:
                 return ctypes.cdll.LoadLibrary(path)
         except OSError as e:
-            raise ImportError,e
-    
-    def getpaths(self,libname):
+            raise ImportError(e)
+
+    def getpaths(self, libname):
         """Return a list of paths where the library might be found."""
         if os.path.isabs(libname):
             yield libname
-        
+
         else:
             for path in self.getplatformpaths(libname):
                 yield path
-            
+
             path = ctypes.util.find_library(libname)
-            if path: yield path
-    
+            if path:
+                yield path
+
     def getplatformpaths(self, libname):
         return []
 
 # Darwin (Mac OS X)
 
+
 class DarwinLibraryLoader(LibraryLoader):
     name_formats = ["lib%s.dylib", "lib%s.so", "lib%s.bundle", "%s.dylib",
-                "%s.so", "%s.bundle", "%s"]
-    
-    def getplatformpaths(self,libname):
+                    "%s.so", "%s.bundle", "%s"]
+
+    def getplatformpaths(self, libname):
         if os.path.pathsep in libname:
             names = [libname]
         else:
             names = [format % libname for format in self.name_formats]
-        
+
         for dir in self.getdirs(libname):
             for name in names:
-                yield os.path.join(dir,name)
-    
-    def getdirs(self,libname):
+                yield os.path.join(dir, name)
+
+    def getdirs(self, libname):
         '''Implements the dylib search as specified in Apple documentation:
-        
+
         http://developer.apple.com/documentation/DeveloperTools/Conceptual/
             DynamicLibraries/Articles/DynamicLibraryUsageGuidelines.html
 
@@ -116,9 +125,9 @@ class DarwinLibraryLoader(LibraryLoader):
         if not dyld_fallback_library_path:
             dyld_fallback_library_path = [os.path.expanduser('~/lib'),
                                           '/usr/local/lib', '/usr/lib']
-        
+
         dirs = []
-        
+
         if '/' in libname:
             dirs.extend(_environ_path("DYLD_LIBRARY_PATH"))
         else:
@@ -127,7 +136,7 @@ class DarwinLibraryLoader(LibraryLoader):
 
         dirs.extend(self.other_dirs)
         dirs.append(".")
-        
+
         if hasattr(sys, 'frozen') and sys.frozen == 'macosx_app':
             dirs.append(os.path.join(
                 os.environ['RESOURCEPATH'],
@@ -135,14 +144,15 @@ class DarwinLibraryLoader(LibraryLoader):
                 'Frameworks'))
 
         dirs.extend(dyld_fallback_library_path)
-        
+
         return dirs
 
 # Posix
 
+
 class PosixLibraryLoader(LibraryLoader):
     _ld_so_cache = None
-    
+
     def _create_ld_so_cache(self):
         # Recreate search path followed by ld.so.  This is going to be
         # slow to build, and incorrect (ld.so uses ld.so.cache, which may
@@ -153,17 +163,19 @@ class PosixLibraryLoader(LibraryLoader):
 
         directories = []
         for name in ("LD_LIBRARY_PATH",
-                     "SHLIB_PATH", # HPUX
-                     "LIBPATH", # OS/2, AIX
-                     "LIBRARY_PATH", # BE/OS
-                    ):
+                     "SHLIB_PATH",  # HPUX
+                     "LIBPATH",  # OS/2, AIX
+                     "LIBRARY_PATH",  # BE/OS
+                     ):
             if name in os.environ:
                 directories.extend(os.environ[name].split(os.pathsep))
         directories.extend(self.other_dirs)
         directories.append(".")
 
-        try: directories.extend([dir.strip() for dir in open('/etc/ld.so.conf')])
-        except IOError: pass
+        try:
+            directories.extend([dir.strip() for dir in open('/etc/ld.so.conf')])
+        except IOError:
+            pass
 
         directories.extend(['/lib', '/usr/lib', '/lib64', '/usr/lib64'])
 
@@ -178,7 +190,7 @@ class PosixLibraryLoader(LibraryLoader):
                     # Index by filename
                     if file not in cache:
                         cache[file] = path
-                    
+
                     # Index by library name
                     match = lib_re.match(file)
                     if match:
@@ -189,37 +201,44 @@ class PosixLibraryLoader(LibraryLoader):
                 pass
 
         self._ld_so_cache = cache
-    
+
     def getplatformpaths(self, libname):
         if self._ld_so_cache is None:
             self._create_ld_so_cache()
 
         result = self._ld_so_cache.get(libname)
-        if result: yield result
+        if result:
+            yield result
 
         path = ctypes.util.find_library(libname)
-        if path: yield os.path.join("/lib",path)
+        if path:
+            yield os.path.join("/lib", path)
 
 # Windows
 
+
 class _WindowsLibrary(object):
+
     def __init__(self, path):
         self.cdll = ctypes.cdll.LoadLibrary(path)
         self.windll = ctypes.windll.LoadLibrary(path)
 
     def __getattr__(self, name):
-        try: return getattr(self.cdll,name)
+        try:
+            return getattr(self.cdll, name)
         except AttributeError:
-            try: return getattr(self.windll,name)
+            try:
+                return getattr(self.windll, name)
             except AttributeError:
                 raise
 
+
 class WindowsLibraryLoader(LibraryLoader):
     name_formats = ["%s.dll", "lib%s.dll"]
-    
+
     def load(self, path):
         return _WindowsLibrary(path)
-    
+
     def getplatformpaths(self, libname):
         if os.path.sep not in libname:
             for name in self.name_formats:
@@ -233,13 +252,14 @@ class WindowsLibraryLoader(LibraryLoader):
 # the Ctypesgen maintainers.
 
 loaderclass = {
-    "darwin":   DarwinLibraryLoader,
-    "cygwin":   WindowsLibraryLoader,
-    "win32":    WindowsLibraryLoader
+    "darwin": DarwinLibraryLoader,
+    "cygwin": WindowsLibraryLoader,
+    "win32": WindowsLibraryLoader
 }
 
 loader = loaderclass.get(sys.platform, PosixLibraryLoader)()
 
+
 def add_library_search_dirs(other_dirs):
     loader.other_dirs = other_dirs
 
diff --git a/lib/python/ctypes/ctypesgencore/messages.py b/lib/python/ctypes/ctypesgencore/messages.py
index 2969b88..692ab2b 100644
--- a/lib/python/ctypes/ctypesgencore/messages.py
+++ b/lib/python/ctypes/ctypesgencore/messages.py
@@ -19,16 +19,20 @@ Warning classes are:
 'rename' - a description has been renamed to avoid a name conflict
 'other' - catchall.
 """
+from __future__ import print_function
 
 import sys
 
-__all__ = ["error_message","warning_message","status_message"]
+__all__ = ["error_message", "warning_message", "status_message"]
 
-def error_message(msg,cls=None):
-    print "Error: %s" % msg
 
-def warning_message(msg,cls=None):
-    print "Warning: %s" % msg
+def error_message(msg, cls=None):
+    print("Error: %s" % msg)
+
+
+def warning_message(msg, cls=None):
+    print("Warning: %s" % msg)
+
 
 def status_message(msg):
-    print "Status: %s" % msg
+    print("Status: %s" % msg)
diff --git a/lib/python/ctypes/ctypesgencore/options.py b/lib/python/ctypes/ctypesgencore/options.py
index 8091fd0..605237e 100644
--- a/lib/python/ctypes/ctypesgencore/options.py
+++ b/lib/python/ctypes/ctypesgencore/options.py
@@ -8,9 +8,11 @@ would be a pain. So this module exists to provide a "default" options object
 for convenience.
 """
 
-import optparse, copy
+import copy
+import optparse
 
-default_values={
+
+default_values = {
     "other_headers": [],
     "modules": [],
     "include_search_paths": [],
@@ -33,5 +35,6 @@ default_values={
     "strip_build_path": None
 }
 
+
 def get_default_options():
     return optparse.Values(copy.deepcopy(default_values))
diff --git a/lib/python/ctypes/ctypesgencore/parser/__init__.py b/lib/python/ctypes/ctypesgencore/parser/__init__.py
index 3da2f1d..88b4418 100644
--- a/lib/python/ctypes/ctypesgencore/parser/__init__.py
+++ b/lib/python/ctypes/ctypesgencore/parser/__init__.py
@@ -14,11 +14,12 @@ for more information.
 
 """
 
-from datacollectingparser import DataCollectingParser
+from .datacollectingparser import DataCollectingParser
+
 
 def parse(headers, options):
-    parser=DataCollectingParser(headers, options)
+    parser = DataCollectingParser(headers, options)
     parser.parse()
     return parser.data()
 
-__all__ = ["parse"]
\ No newline at end of file
+__all__ = ["parse"]
diff --git a/lib/python/ctypes/ctypesgencore/parser/cdeclarations.py b/lib/python/ctypes/ctypesgencore/parser/cdeclarations.py
index 81bc419..f4ea056 100644
--- a/lib/python/ctypes/ctypesgencore/parser/cdeclarations.py
+++ b/lib/python/ctypes/ctypesgencore/parser/cdeclarations.py
@@ -12,7 +12,9 @@ __docformat__ = 'restructuredtext'
 # C Object Model
 # --------------------------------------------------------------------------
 
+
 class Declaration(object):
+
     def __init__(self):
         self.declarator = None
         self.type = Type()
@@ -28,8 +30,10 @@ class Declaration(object):
         l = ['%s=%r' % (k, v) for k, v in d.items()]
         return 'Declaration(%s)' % ', '.join(l)
 
+
 class Declarator(object):
     pointer = None
+
     def __init__(self):
         self.identifier = None
         self.initializer = None
@@ -52,8 +56,10 @@ class Declarator(object):
             s += '(' + ', '.join([repr(p) for p in self.parameters]) + ')'
         return s
 
+
 class Pointer(Declarator):
     pointer = None
+
     def __init__(self):
         super(Pointer, self).__init__()
         self.qualifiers = []
@@ -65,14 +71,16 @@ class Pointer(Declarator):
         return 'POINTER%s(%r)' % (q, self.pointer) + \
             super(Pointer, self).__repr__()
 
+
 class Array(object):
+
     def __init__(self):
         self.size = None
         self.array = None
 
     def __repr__(self):
         if self.size:
-            a =  '[%r]' % self.size
+            a = '[%r]' % self.size
         else:
             a = '[]'
         if self.array:
@@ -80,7 +88,9 @@ class Array(object):
         else:
             return a
 
+
 class Parameter(object):
+
     def __init__(self):
         self.type = Type()
         self.storage = None
@@ -99,6 +109,7 @@ class Parameter(object):
 
 
 class Type(object):
+
     def __init__(self):
         self.qualifiers = []
         self.specifiers = []
@@ -108,13 +119,17 @@ class Type(object):
 
 # These are used only internally.
 
+
 class StorageClassSpecifier(str):
     pass
 
+
 class TypeSpecifier(str):
     pass
 
+
 class StructTypeSpecifier(object):
+
     def __init__(self, is_union, tag, declarations):
         self.is_union = is_union
         self.tag = tag
@@ -131,11 +146,13 @@ class StructTypeSpecifier(object):
             s += ' {%s}' % '; '.join([repr(d) for d in self.declarations])
         return s
 
+
 class EnumSpecifier(object):
+
     def __init__(self, tag, enumerators, src=None):
         self.tag = tag
         self.enumerators = enumerators
-        self.src=src
+        self.src = src
 
     def __repr__(self):
         s = 'enum'
@@ -145,7 +162,9 @@ class EnumSpecifier(object):
             s += ' {%s}' % ', '.join([repr(e) for e in self.enumerators])
         return s
 
+
 class Enumerator(object):
+
     def __init__(self, name, expression):
         self.name = name
         self.expression = expression
@@ -156,19 +175,21 @@ class Enumerator(object):
             s += ' = %r' % self.expression
         return s
 
+
 class TypeQualifier(str):
     pass
 
+
 def apply_specifiers(specifiers, declaration):
     '''Apply specifiers to the declaration (declaration may be
     a Parameter instead).'''
     for s in specifiers:
-        if type(s) == StorageClassSpecifier:
+        if isinstance(s, StorageClassSpecifier):
             if declaration.storage:
                 # Multiple storage classes, technically an error... ignore it
                 pass
             declaration.storage = s
         elif type(s) in (TypeSpecifier, StructTypeSpecifier, EnumSpecifier):
             declaration.type.specifiers.append(s)
-        elif type(s) == TypeQualifier:
+        elif isinstance(s, TypeQualifier):
             declaration.type.qualifiers.append(s)
diff --git a/lib/python/ctypes/ctypesgencore/parser/cgrammar.py b/lib/python/ctypes/ctypesgencore/parser/cgrammar.py
index a5582ae..02fe135 100644
--- a/lib/python/ctypes/ctypesgencore/parser/cgrammar.py
+++ b/lib/python/ctypes/ctypesgencore/parser/cgrammar.py
@@ -10,6 +10,11 @@ Reference is C99:
   * http://www.open-std.org/JTC1/SC22/WG14/www/docs/n1124.pdf
 
 '''
+try:
+    from builtins import long
+except ImportError:
+    # python3
+    long = int
 
 __docformat__ = 'restructuredtext'
 
@@ -20,11 +25,11 @@ import sys
 import time
 import warnings
 
-import preprocessor
-import yacc
-import ctypesparser
+from . import cdeclarations
 import ctypesgencore.expressions as expressions
-import cdeclarations
+from . import preprocessor
+from . import yacc
+
 
 tokens = (
     'PP_DEFINE', 'PP_DEFINE_NAME', 'PP_DEFINE_MACRO_NAME', 'PP_MACRO_PARAM',
@@ -34,9 +39,9 @@ tokens = (
     'PTR_OP', 'INC_OP', 'DEC_OP', 'LEFT_OP', 'RIGHT_OP', 'LE_OP', 'GE_OP',
     'EQ_OP', 'NE_OP', 'AND_OP', 'OR_OP', 'MUL_ASSIGN', 'DIV_ASSIGN',
     'MOD_ASSIGN', 'ADD_ASSIGN', 'SUB_ASSIGN', 'LEFT_ASSIGN', 'RIGHT_ASSIGN',
-    'AND_ASSIGN', 'XOR_ASSIGN', 'OR_ASSIGN',  'PERIOD', 'TYPE_NAME', 
-    
-    'TYPEDEF', 'EXTERN', 'STATIC', 'AUTO', 'REGISTER', 
+    'AND_ASSIGN', 'XOR_ASSIGN', 'OR_ASSIGN', 'PERIOD', 'TYPE_NAME',
+
+    'TYPEDEF', 'EXTERN', 'STATIC', 'AUTO', 'REGISTER',
     'CHAR', 'SHORT', 'INT', 'LONG', 'SIGNED', 'UNSIGNED', 'FLOAT', 'DOUBLE',
     'CONST', 'VOLATILE', 'VOID',
     'STRUCT', 'UNION', 'ENUM', 'ELLIPSIS',
@@ -53,8 +58,9 @@ keywords = [
     'while', '__asm__'
 ]
 
+
 def p_translation_unit(p):
-    '''translation_unit : 
+    '''translation_unit :
                         | translation_unit external_declaration
                         | translation_unit define
     '''
@@ -63,6 +69,7 @@ def p_translation_unit(p):
     #    valid.
     # Intentionally empty
 
+
 def p_identifier(p):
     '''identifier : IDENTIFIER
                   | IDENTIFIER PP_IDENTIFIER_PASTE identifier
@@ -70,7 +77,7 @@ def p_identifier(p):
                   | IDENTIFIER PP_IDENTIFIER_PASTE PP_MACRO_PARAM
                   | PP_MACRO_PARAM PP_IDENTIFIER_PASTE PP_MACRO_PARAM
     '''
-    if len(p)==2:
+    if len(p) == 2:
         p[0] = expressions.IdentifierExpressionNode(p[1])
     else:
         # Should it be supported? It wouldn't be very hard to add support.
@@ -80,16 +87,17 @@ def p_identifier(p):
         # "locals()['%s' + '%s' + ...]" where %s was substituted with the
         # elements of the list. I haven't supported it yet because I think
         # it's unnecessary and a little too powerful.
-        p[0] = expressions.UnsupportedExpressionNode("Identifier pasting is " \
-            "not supported by ctypesgen.")
+        p[0] = expressions.UnsupportedExpressionNode("Identifier pasting is "
+                                                     "not supported by ctypesgen.")
+
 
 def p_constant(p):
     '''constant : CONSTANT
                 | CHARACTER_CONSTANT
     '''
     constant = p[1]
-    
-    if constant[0]=="'":
+
+    if constant[0] == "'":
         # Character constant
         value = constant[1:-1]
     else:
@@ -98,40 +106,47 @@ def p_constant(p):
         # if it should be converted into an integer, long or float.
         prefix = constant[0]
         constant = constant[1:]
-        if prefix=="i":
+        if prefix == "i":
             value = int(constant)
-        elif prefix=="l":
+        elif prefix == "l":
             value = long(constant)
         else:
             value = float(constant)
-    
+
     p[0] = expressions.ConstantExpressionNode(value)
 
+
 def p_string_literal(p):
     '''string_literal : STRING_LITERAL'''
     p[0] = expressions.ConstantExpressionNode(p[1])
 
+
 def p_multi_string_literal(p):
     '''multi_string_literal : string_literal
                             | macro_param
                             | multi_string_literal string_literal
                             | multi_string_literal macro_param
     '''
-    if len(p)==2:
+    if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.BinaryExpressionNode("string concatenation",
-            (lambda x,y: x+y), "(%s + %s)", (False,False), p[1], p[2])
+        p[0] = expressions.BinaryExpressionNode(
+            "string concatenation", (lambda x, y: x + y),
+            "(%s + %s)", (False, False),
+            p[1],
+            p[2])
+
 
 def p_macro_param(p):
     '''macro_param : PP_MACRO_PARAM
                    | PP_STRINGIFY PP_MACRO_PARAM
     '''
-    if len(p)==2:
+    if len(p) == 2:
         p[0] = expressions.ParameterExpressionNode(p[1])
     else:
         p[0] = expressions.ParameterExpressionNode(p[2])
 
+
 def p_primary_expression(p):
     '''primary_expression : identifier
                           | constant
@@ -143,6 +158,7 @@ def p_primary_expression(p):
     else:
         p[0] = p[1]
 
+
 def p_postfix_expression(p):
     '''postfix_expression : primary_expression
                   | postfix_expression '[' expression ']'
@@ -153,35 +169,39 @@ def p_postfix_expression(p):
                   | postfix_expression INC_OP
                   | postfix_expression DEC_OP
     '''
-    
-    if len(p)==2:
+
+    if len(p) == 2:
         p[0] = p[1]
-    
-    elif p[2]=='[':
-        p[0] = expressions.BinaryExpressionNode("array access",
-            (lambda a,b: a[b]), "(%s [%s])", (True,False), p[1], p[3])
-    
-    elif p[2]=='(':
-        if p[3]==')':
-            p[0] = expressions.CallExpressionNode(p[1],[])
+
+    elif p[2] == '[':
+        p[0] = expressions.BinaryExpressionNode(
+            "array access", (lambda a, b: a[b]),
+            "(%s [%s])", (True, False),
+            p[1],
+            p[3])
+
+    elif p[2] == '(':
+        if p[3] == ')':
+            p[0] = expressions.CallExpressionNode(p[1], [])
         else:
-            p[0] = expressions.CallExpressionNode(p[1],p[3])
-    
-    elif p[2]=='.':
-        p[0] = expressions.AttributeExpressionNode( \
-            (lambda x,a: getattr(x,a)), "(%s.%s)", p[1],p[3])
-    
-    elif p[2]=='->':
-        p[0] = expressions.AttributeExpressionNode( \
-            (lambda x,a: getattr(x.contents,a)), "(%s.contents.%s)", p[1],p[3])
-    
-    elif p[2]=='++':
-        p[0] = expressions.UnaryExpressionNode("increment",(lambda x: x+1),
-                                               "(%s + 1)", False,p[1])
-    
-    elif p[2]=='--':
-        p[0] = expressions.UnaryExpressionNode("decrement",(lambda x: x-1),
-                                               "(%s - 1)", False,p[1])
+            p[0] = expressions.CallExpressionNode(p[1], p[3])
+
+    elif p[2] == '.':
+        p[0] = expressions.AttributeExpressionNode(
+            (lambda x, a: getattr(x, a)), "(%s.%s)", p[1], p[3])
+
+    elif p[2] == '->':
+        p[0] = expressions.AttributeExpressionNode(
+            (lambda x, a: getattr(x.contents, a)), "(%s.contents.%s)", p[1], p[3])
+
+    elif p[2] == '++':
+        p[0] = expressions.UnaryExpressionNode("increment", (lambda x: x + 1),
+                                               "(%s + 1)", False, p[1])
+
+    elif p[2] == '--':
+        p[0] = expressions.UnaryExpressionNode("decrement", (lambda x: x - 1),
+                                               "(%s - 1)", False, p[1])
+
 
 def p_argument_expression_list(p):
     '''argument_expression_list : assignment_expression
@@ -193,6 +213,7 @@ def p_argument_expression_list(p):
     else:
         p[0] = [p[1]]
 
+
 def p_asm_expression(p):
     '''asm_expression : __ASM__ volatile_opt '(' string_literal ')'
                       | __ASM__ volatile_opt '(' string_literal ':' str_opt_expr_pair_list ')'
@@ -208,33 +229,37 @@ def p_asm_expression(p):
 
     p[0] = expressions.UnsupportedExpressionNode("This node is ASM assembler.")
 
+
 def p_str_opt_expr_pair_list(p):
-    '''str_opt_expr_pair_list : 
+    '''str_opt_expr_pair_list :
                               | str_opt_expr_pair
                               | str_opt_expr_pair_list ',' str_opt_expr_pair
     '''
 
+
 def p_str_opt_expr_pair(p):
-   '''str_opt_expr_pair : string_literal
-                        | string_literal '(' expression ')'
-    '''
+    '''str_opt_expr_pair : string_literal
+                         | string_literal '(' expression ')'
+     '''
+
 
 def p_volatile_opt(p):
-    '''volatile_opt : 
+    '''volatile_opt :
                     | VOLATILE
     '''
 
 prefix_ops_dict = {
-    "++": ("increment",(lambda x: x+1),"(%s + 1)",False),
-    "--": ("decrement",(lambda x: x-1),"(%s - 1)",False),
-    '&': ("reference ('&')",None,"pointer(%s)",True),
-    '*': ("dereference ('*')",None,"(%s[0])",True),
-    '+': ("unary '+'",(lambda x: x),"%s",True),
-    '-': ("negation",(lambda x: -x),"(-%s)",False),
-    '~': ("inversion",(lambda x: ~x),"(~%s)",False),
-    '!': ("logical not",(lambda x: not x),"(not %s)",True)
+    "++": ("increment", (lambda x: x + 1), "(%s + 1)", False),
+    "--": ("decrement", (lambda x: x - 1), "(%s - 1)", False),
+    '&': ("reference ('&')", None, "pointer(%s)", True),
+    '*': ("dereference ('*')", None, "(%s[0])", True),
+    '+': ("unary '+'", (lambda x: x), "%s", True),
+    '-': ("negation", (lambda x: -x), "(-%s)", False),
+    '~': ("inversion", (lambda x: ~x), "(~%s)", False),
+    '!': ("logical not", (lambda x: not x), "(not %s)", True)
 }
 
+
 def p_unary_expression(p):
     '''unary_expression : postfix_expression
                         | INC_OP unary_expression
@@ -246,18 +271,19 @@ def p_unary_expression(p):
     '''
     if len(p) == 2:
         p[0] = p[1]
-    
+
     elif p[1] == 'sizeof':
-        if len(p)==5:
+        if len(p) == 5:
             p[0] = expressions.SizeOfExpressionNode(p[3])
         else:
             p[0] = expressions.SizeOfExpressionNode(p[2])
-    
+
     else:
-        name,op,format,can_be_ctype = prefix_ops_dict[p[1]]
+        name, op, format, can_be_ctype = prefix_ops_dict[p[1]]
         p[0] = expressions.UnaryExpressionNode(name, op, format, can_be_ctype,
                                                p[2])
 
+
 def p_unary_operator(p):
     '''unary_operator : '&'
                       | '*'
@@ -268,6 +294,7 @@ def p_unary_operator(p):
     '''
     p[0] = p[1]
 
+
 def p_cast_expression(p):
     '''cast_expression : unary_expression
                        | '(' type_name ')' cast_expression
@@ -275,14 +302,15 @@ def p_cast_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.TypeCastExpressionNode(p[4],p[2])
+        p[0] = expressions.TypeCastExpressionNode(p[4], p[2])
 
 mult_ops_dict = {
-    '*': ("multiplication", (lambda x,y: x*y), "(%s * %s)"),
-    '/': ("division", (lambda x,y: x/y), "(%s / %s)"),
-    '%': ("modulo", (lambda x,y: x%y), "(%s %% %s)")
+    '*': ("multiplication", (lambda x, y: x * y), "(%s * %s)"),
+    '/': ("division", (lambda x, y: x / y), "(%s / %s)"),
+    '%': ("modulo", (lambda x, y: x % y), "(%s %% %s)")
 }
 
+
 def p_multiplicative_expression(p):
     '''multiplicative_expression : cast_expression
                                  | multiplicative_expression '*' cast_expression
@@ -291,16 +319,17 @@ def p_multiplicative_expression(p):
     '''
     if len(p) == 2:
         p[0] = p[1]
-    else:        
-        name,op,format = mult_ops_dict[p[2]]
-        p[0] = expressions.BinaryExpressionNode(name, op, format, (False,False),
-            p[1], p[3])
+    else:
+        name, op, format = mult_ops_dict[p[2]]
+        p[0] = expressions.BinaryExpressionNode(name, op, format, (False, False),
+                                                p[1], p[3])
 
 add_ops_dict = {
-    '+': ("addition", (lambda x,y: x+y), "(%s + %s)"),
-    '-': ("subtraction", (lambda x,y: x-y), "(%s - %s)")
+    '+': ("addition", (lambda x, y: x + y), "(%s + %s)"),
+    '-': ("subtraction", (lambda x, y: x - y), "(%s - %s)")
 }
 
+
 def p_additive_expression(p):
     '''additive_expression : multiplicative_expression
                            | additive_expression '+' multiplicative_expression
@@ -309,15 +338,16 @@ def p_additive_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        name,op,format = add_ops_dict[p[2]]
-        p[0] = expressions.BinaryExpressionNode(name, op, format, (False,False),
-            p[1], p[3])
+        name, op, format = add_ops_dict[p[2]]
+        p[0] = expressions.BinaryExpressionNode(name, op, format, (False, False),
+                                                p[1], p[3])
 
 shift_ops_dict = {
-    '>>': ("right shift", (lambda x,y: x>>y), "(%s >> %s)"),
-    '<<': ("left shift", (lambda x,y: x<<y), "(%s << %s)")
+    '>>': ("right shift", (lambda x, y: x >> y), "(%s >> %s)"),
+    '<<': ("left shift", (lambda x, y: x << y), "(%s << %s)")
 }
 
+
 def p_shift_expression(p):
     '''shift_expression : additive_expression
                         | shift_expression LEFT_OP additive_expression
@@ -326,19 +356,20 @@ def p_shift_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        name,op,format = shift_ops_dict[p[2]]
-        p[0] = expressions.BinaryExpressionNode(name, op, format, (False,False),
-            p[1], p[3])
+        name, op, format = shift_ops_dict[p[2]]
+        p[0] = expressions.BinaryExpressionNode(name, op, format, (False, False),
+                                                p[1], p[3])
 
 rel_ops_dict = {
-    '>': ("greater-than", (lambda x,y: x>y), "(%s > %s)"),
-    '<': ("less-than", (lambda x,y: x<y), "(%s < %s)"),
-    '>=': ("greater-than-equal", (lambda x,y: x>=y), "(%s >= %s)"),
-    '<=': ("less-than-equal", (lambda x,y: x<=y), "(%s <= %s)")
+    '>': ("greater-than", (lambda x, y: x > y), "(%s > %s)"),
+    '<': ("less-than", (lambda x, y: x < y), "(%s < %s)"),
+    '>=': ("greater-than-equal", (lambda x, y: x >= y), "(%s >= %s)"),
+    '<=': ("less-than-equal", (lambda x, y: x <= y), "(%s <= %s)")
 }
 
+
 def p_relational_expression(p):
-    '''relational_expression : shift_expression 
+    '''relational_expression : shift_expression
                              | relational_expression '<' shift_expression
                              | relational_expression '>' shift_expression
                              | relational_expression LE_OP shift_expression
@@ -347,15 +378,16 @@ def p_relational_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        name,op,format = rel_ops_dict[p[2]]
-        p[0] = expressions.BinaryExpressionNode(name, op, format, (False,False),
-            p[1], p[3])
+        name, op, format = rel_ops_dict[p[2]]
+        p[0] = expressions.BinaryExpressionNode(name, op, format, (False, False),
+                                                p[1], p[3])
 
 equality_ops_dict = {
-    '==': ("equals", (lambda x,y: x==y), "(%s == %s)"),
-    '!=': ("not equals", (lambda x,y: x!=y), "(%s != %s)")
+    '==': ("equals", (lambda x, y: x == y), "(%s == %s)"),
+    '!=': ("not equals", (lambda x, y: x != y), "(%s != %s)")
 }
 
+
 def p_equality_expression(p):
     '''equality_expression : relational_expression
                            | equality_expression EQ_OP relational_expression
@@ -364,9 +396,10 @@ def p_equality_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        name,op,format = equality_ops_dict[p[2]]
-        p[0] = expressions.BinaryExpressionNode(name, op, format, (False,False),
-            p[1], p[3])
+        name, op, format = equality_ops_dict[p[2]]
+        p[0] = expressions.BinaryExpressionNode(name, op, format, (False, False),
+                                                p[1], p[3])
+
 
 def p_and_expression(p):
     '''and_expression : equality_expression
@@ -375,18 +408,26 @@ def p_and_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.BinaryExpressionNode("bitwise and",
-            (lambda x,y: x&y), "(%s & %s)", (False,False), p[1], p[3])
+        p[0] = expressions.BinaryExpressionNode(
+            "bitwise and", (lambda x, y: x & y),
+            "(%s & %s)", (False, False),
+            p[1],
+            p[3])
+
 
 def p_exclusive_or_expression(p):
     '''exclusive_or_expression : and_expression
                                | exclusive_or_expression '^' and_expression
-    ''' 
+    '''
     if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.BinaryExpressionNode("bitwise xor",
-            (lambda x,y: x^y), "(%s ^ %s)", (False,False), p[1], p[3])
+        p[0] = expressions.BinaryExpressionNode(
+            "bitwise xor", (lambda x, y: x ^ y),
+            "(%s ^ %s)", (False, False),
+            p[1],
+            p[3])
+
 
 def p_inclusive_or_expression(p):
     '''inclusive_or_expression : exclusive_or_expression
@@ -395,8 +436,12 @@ def p_inclusive_or_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.BinaryExpressionNode("bitwise or",
-            (lambda x,y: x|y), "(%s | %s)", (False,False), p[1], p[3])
+        p[0] = expressions.BinaryExpressionNode(
+            "bitwise or", (lambda x, y: x | y),
+            "(%s | %s)", (False, False),
+            p[1],
+            p[3])
+
 
 def p_logical_and_expression(p):
     '''logical_and_expression : inclusive_or_expression
@@ -405,8 +450,12 @@ def p_logical_and_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.BinaryExpressionNode("logical and",
-            (lambda x,y: x and y), "(%s and %s)", (True,True), p[1], p[3])
+        p[0] = expressions.BinaryExpressionNode(
+            "logical and", (lambda x, y: x and y),
+            "(%s and %s)", (True, True),
+            p[1],
+            p[3])
+
 
 def p_logical_or_expression(p):
     '''logical_or_expression : logical_and_expression
@@ -415,8 +464,12 @@ def p_logical_or_expression(p):
     if len(p) == 2:
         p[0] = p[1]
     else:
-        p[0] = expressions.BinaryExpressionNode("logical and",
-            (lambda x,y: x or y), "(%s or %s)", (True,True), p[1], p[3])
+        p[0] = expressions.BinaryExpressionNode(
+            "logical and", (lambda x, y: x or y),
+            "(%s or %s)", (True, True),
+            p[1],
+            p[3])
+
 
 def p_conditional_expression(p):
     '''conditional_expression : logical_or_expression
@@ -428,18 +481,19 @@ def p_conditional_expression(p):
         p[0] = expressions.ConditionalExpressionNode(p[1], p[3], p[5])
 
 assign_ops_dict = {
-    '*=': ("multiply", (lambda x,y: x*y), "(%s * %s)"),
-    '/=': ("divide", (lambda x,y: x/y), "(%s / %s)"),
-    '%=': ("modulus", (lambda x,y: x%y), "(%s % %s)"),
-    '+=': ("addition", (lambda x,y: x+y), "(%s + %s)"),
-    '-=': ("subtraction", (lambda x,y: x-y), "(%s - %s)"),
-    '<<=': ("left shift", (lambda x,y: x<<y), "(%s << %s)"),
-    '>>=': ("right shift",(lambda x,y: x>>y),"(%s >> %s)"),
-    '&=': ("bitwise and", (lambda x,y: x&y), "(%s & %s)"),
-    '^=': ("bitwise xor", (lambda x,y: x^y), "(%s ^ %s)"),
-    '|=': ("bitwise or", (lambda x,y: x|y), "(%s | %s)")
+    '*=': ("multiply", (lambda x, y: x * y), "(%s * %s)"),
+    '/=': ("divide", (lambda x, y: x / y), "(%s / %s)"),
+    '%=': ("modulus", (lambda x, y: x % y), "(%s % %s)"),
+    '+=': ("addition", (lambda x, y: x + y), "(%s + %s)"),
+    '-=': ("subtraction", (lambda x, y: x - y), "(%s - %s)"),
+    '<<=': ("left shift", (lambda x, y: x << y), "(%s << %s)"),
+    '>>=': ("right shift", (lambda x, y: x >> y), "(%s >> %s)"),
+    '&=': ("bitwise and", (lambda x, y: x & y), "(%s & %s)"),
+    '^=': ("bitwise xor", (lambda x, y: x ^ y), "(%s ^ %s)"),
+    '|=': ("bitwise or", (lambda x, y: x | y), "(%s | %s)")
 }
 
+
 def p_assignment_expression(p):
     '''assignment_expression : conditional_expression
                  | unary_expression assignment_operator assignment_expression
@@ -449,12 +503,13 @@ def p_assignment_expression(p):
     else:
         # In C, the value of (x*=3) is the same as (x*3). We support that here.
         # However, we don't support the change in the value of x.
-        if p[2]=='=':
+        if p[2] == '=':
             p[0] = p[3]
         else:
-            name,op,format = assign_ops_dict[p[2]]
-            p[0] = expressions.BinaryExpressionNode(name,op,format,(True,True),
-                p[1],p[3])
+            name, op, format = assign_ops_dict[p[2]]
+            p[0] = expressions.BinaryExpressionNode(name, op, format, (True, True),
+                                                    p[1], p[3])
+
 
 def p_assignment_operator(p):
     '''assignment_operator : '='
@@ -470,7 +525,8 @@ def p_assignment_operator(p):
                            | OR_ASSIGN
     '''
     p[0] = p[1]
-    
+
+
 def p_expression(p):
     '''expression : assignment_expression
                   | expression ',' assignment_expression
@@ -478,11 +534,13 @@ def p_expression(p):
     p[0] = p[1]
     # We don't need to support sequence expressions...
 
+
 def p_constant_expression(p):
     '''constant_expression : conditional_expression
     '''
     p[0] = p[1]
 
+
 def p_declaration(p):
     '''declaration : declaration_impl ';'
     '''
@@ -490,6 +548,7 @@ def p_declaration(p):
     # be executed before the ';' is shifted (otherwise the next lookahead will
     # be read, which may be affected by this declaration if its a typedef.
 
+
 def p_declaration_impl(p):
     '''declaration_impl : declaration_specifiers
                         | declaration_specifiers init_declarator_list
@@ -510,11 +569,12 @@ def p_declaration_impl(p):
         p.parser.cparser.impl_handle_declaration(declaration, filename, lineno)
 
 # shift/reduce conflict with p_statement_error.
-#def p_declaration_error(p):
+# def p_declaration_error(p):
 #    '''declaration : error ';'
 #    '''
 #    # Error resynchronisation catch-all
 
+
 def p_declaration_specifiers(p):
     '''declaration_specifiers : storage_class_specifier
                               | storage_class_specifier declaration_specifiers
@@ -528,6 +588,7 @@ def p_declaration_specifiers(p):
     else:
         p[0] = (p[1],)
 
+
 def p_init_declarator_list(p):
     '''init_declarator_list : init_declarator
                             | init_declarator_list ',' init_declarator
@@ -537,6 +598,7 @@ def p_init_declarator_list(p):
     else:
         p[0] = (p[1],)
 
+
 def p_init_declarator(p):
     '''init_declarator : declarator
                        | declarator '=' initializer
@@ -545,6 +607,7 @@ def p_init_declarator(p):
     if len(p) > 2:
         p[0].initializer = p[2]
 
+
 def p_storage_class_specifier(p):
     '''storage_class_specifier : TYPEDEF
                                | EXTERN
@@ -554,6 +617,7 @@ def p_storage_class_specifier(p):
     '''
     p[0] = cdeclarations.StorageClassSpecifier(p[1])
 
+
 def p_type_specifier(p):
     '''type_specifier : VOID
                       | CHAR
@@ -574,6 +638,7 @@ def p_type_specifier(p):
     else:
         p[0] = cdeclarations.TypeSpecifier(p[1])
 
+
 def p_struct_or_union_specifier(p):
     '''struct_or_union_specifier : struct_or_union IDENTIFIER '{' struct_declaration_list '}'
          | struct_or_union TYPE_NAME '{' struct_declaration_list '}'
@@ -590,16 +655,18 @@ def p_struct_or_union_specifier(p):
         p[0] = cdeclarations.StructTypeSpecifier(p[1], '', p[3])
     else:
         p[0] = cdeclarations.StructTypeSpecifier(p[1], p[2], p[4])
-    
+
     p[0].filename = p.slice[0].filename
     p[0].lineno = p.slice[0].lineno
 
+
 def p_struct_or_union(p):
     '''struct_or_union : STRUCT
                        | UNION
     '''
     p[0] = p[1] == 'union'
 
+
 def p_struct_declaration_list(p):
     '''struct_declaration_list : struct_declaration
                                | struct_declaration_list struct_declaration
@@ -609,6 +676,7 @@ def p_struct_declaration_list(p):
     else:
         p[0] = p[1] + p[2]
 
+
 def p_struct_declaration(p):
     '''struct_declaration : specifier_qualifier_list struct_declarator_list ';'
                           | specifier_qualifier_list ';'
@@ -624,6 +692,7 @@ def p_struct_declaration(p):
             r += (declaration,)
     p[0] = r
 
+
 def p_specifier_qualifier_list(p):
     '''specifier_qualifier_list : type_specifier specifier_qualifier_list
                                 | type_specifier
@@ -636,6 +705,7 @@ def p_specifier_qualifier_list(p):
     else:
         p[0] = (p[1],)
 
+
 def p_struct_declarator_list(p):
     '''struct_declarator_list : struct_declarator
                               | struct_declarator_list ',' struct_declarator
@@ -645,19 +715,21 @@ def p_struct_declarator_list(p):
     else:
         p[0] = p[1] + (p[3],)
 
+
 def p_struct_declarator(p):
     '''struct_declarator : declarator
                          | ':' constant_expression
                          | declarator ':' constant_expression
     '''
-    if p[1]==':':
+    if p[1] == ':':
         p[0] = cdeclarations.Declarator()
     else:
         p[0] = p[1]
         # Bitfield support
-        if len(p)==4:
+        if len(p) == 4:
             p[0].bitfield = p[3]
 
+
 def p_enum_specifier(p):
     '''enum_specifier : ENUM '{' enumerator_list '}'
                       | ENUM IDENTIFIER '{' enumerator_list '}'
@@ -669,10 +741,11 @@ def p_enum_specifier(p):
         p[0] = cdeclarations.EnumSpecifier(p[2], p[4])
     else:
         p[0] = cdeclarations.EnumSpecifier(p[2], ())
-    
+
     p[0].filename = p.slice[0].filename
     p[0].lineno = p.slice[0].lineno
 
+
 def p_enumerator_list(p):
     '''enumerator_list : enumerator_list_iso
                        | enumerator_list_iso ','
@@ -681,6 +754,7 @@ def p_enumerator_list(p):
     # not ISO C.
     p[0] = p[1]
 
+
 def p_enumerator_list_iso(p):
     '''enumerator_list_iso : enumerator
                            | enumerator_list_iso ',' enumerator
@@ -690,6 +764,7 @@ def p_enumerator_list_iso(p):
     else:
         p[0] = p[1] + (p[3],)
 
+
 def p_enumerator(p):
     '''enumerator : IDENTIFIER
                   | IDENTIFIER '=' constant_expression
@@ -699,12 +774,14 @@ def p_enumerator(p):
     else:
         p[0] = cdeclarations.Enumerator(p[1], p[3])
 
+
 def p_type_qualifier(p):
     '''type_qualifier : CONST
                       | VOLATILE
     '''
     p[0] = cdeclarations.TypeQualifier(p[1])
 
+
 def p_declarator(p):
     '''declarator : pointer direct_declarator
                   | direct_declarator
@@ -718,6 +795,7 @@ def p_declarator(p):
     else:
         p[0] = p[1]
 
+
 def p_direct_declarator(p):
     '''direct_declarator : IDENTIFIER
                          | '(' declarator ')'
@@ -728,7 +806,7 @@ def p_direct_declarator(p):
                          | direct_declarator '(' ')'
     '''
     if isinstance(p[1], cdeclarations.Declarator):
-        p[0] = p[1] 
+        p[0] = p[1]
         if p[2] == '[':
             a = cdeclarations.Array()
             a.array = p[0].array
@@ -762,7 +840,7 @@ def p_pointer(p):
     if len(p) == 2:
         p[0] = cdeclarations.Pointer()
     elif len(p) == 3:
-        if type(p[2]) == cdeclarations.Pointer:
+        if isinstance(p[2], cdeclarations.Pointer):
             p[0] = cdeclarations.Pointer()
             p[0].pointer = p[2]
         else:
@@ -773,6 +851,7 @@ def p_pointer(p):
         p[0].qualifiers = p[2]
         p[0].pointer = p[3]
 
+
 def p_type_qualifier_list(p):
     '''type_qualifier_list : type_qualifier
                            | type_qualifier_list type_qualifier
@@ -782,6 +861,7 @@ def p_type_qualifier_list(p):
     else:
         p[0] = (p[1],)
 
+
 def p_parameter_type_list(p):
     '''parameter_type_list : parameter_list
                            | parameter_list ',' ELLIPSIS
@@ -801,6 +881,7 @@ def p_parameter_list(p):
     else:
         p[0] = (p[1],)
 
+
 def p_parameter_declaration(p):
     '''parameter_declaration : declaration_specifiers declarator
                              | declaration_specifiers abstract_declarator
@@ -811,6 +892,7 @@ def p_parameter_declaration(p):
     if len(p) > 2:
         p[0].declarator = p[2]
 
+
 def p_identifier_list(p):
     '''identifier_list : IDENTIFIER
                        | identifier_list ',' IDENTIFIER
@@ -824,23 +906,26 @@ def p_identifier_list(p):
         param.declarator.identifier = p[1]
         p[0] = (param,)
 
+
 def p_type_name(p):
     '''type_name : specifier_qualifier_list
                  | specifier_qualifier_list abstract_declarator
     '''
-    typ=p[1]
-    if len(p)==3:
+    from . import ctypesparser
+    typ = p[1]
+    if len(p) == 3:
         declarator = p[2]
     else:
         declarator = None
-        
+
     declaration = cdeclarations.Declaration()
     declaration.declarator = declarator
-    cdeclarations.apply_specifiers(typ,declaration)
+    cdeclarations.apply_specifiers(typ, declaration)
     ctype = ctypesparser.get_ctypes_type(declaration.type,
-                                            declaration.declarator)
+                                         declaration.declarator)
     p[0] = ctype
 
+
 def p_abstract_declarator(p):
     '''abstract_declarator : pointer
                            | direct_abstract_declarator
@@ -848,12 +933,12 @@ def p_abstract_declarator(p):
     '''
     if len(p) == 2:
         p[0] = p[1]
-        if type(p[0]) == cdeclarations.Pointer:
+        if isinstance(p[0], cdeclarations.Pointer):
             ptr = p[0]
             while ptr.pointer:
                 ptr = ptr.pointer
             # Only if doesn't already terminate in a declarator
-            if type(ptr) == cdeclarations.Pointer:
+            if isinstance(ptr, cdeclarations.Pointer):
                 ptr.pointer = cdeclarations.Declarator()
     else:
         p[0] = p[1]
@@ -862,6 +947,7 @@ def p_abstract_declarator(p):
             ptr = ptr.pointer
         ptr.pointer = p[2]
 
+
 def p_direct_abstract_declarator(p):
     '''direct_abstract_declarator : '(' abstract_declarator ')'
                       | '[' ']'
@@ -900,24 +986,27 @@ def p_direct_abstract_declarator(p):
                     p[0].parameters = ()
                 else:
                     p[0].parameters = p[2]
-    
+
     # Check parameters for (void) and simplify to empty tuple.
     if p[0].parameters and len(p[0].parameters) == 1:
         param = p[0].parameters[0]
         if param.type.specifiers == ['void'] and not param.declarator:
             p[0].parameters = ()
 
+
 def p_initializer(p):
     '''initializer : assignment_expression
                    | '{' initializer_list '}'
                    | '{' initializer_list ',' '}'
     '''
 
+
 def p_initializer_list(p):
     '''initializer_list : initializer
                         | initializer_list ',' initializer
     '''
 
+
 def p_statement(p):
     '''statement : labeled_statement
                  | compound_statement
@@ -927,12 +1016,14 @@ def p_statement(p):
                  | jump_statement
     '''
 
+
 def p_labeled_statement(p):
     '''labeled_statement : IDENTIFIER ':' statement
                          | CASE constant_expression ':' statement
                          | DEFAULT ':' statement
     '''
 
+
 def p_compound_statement(p):
     '''compound_statement : '{' '}'
                           | '{' statement_list '}'
@@ -940,42 +1031,51 @@ def p_compound_statement(p):
                           | '{' declaration_list statement_list '}'
     '''
 
+
 def p_compound_statement_error(p):
     '''compound_statement : '{' error '}'
     '''
     # Error resynchronisation catch-all
 
+
 def p_declaration_list(p):
     '''declaration_list : declaration
                         | declaration_list declaration
     '''
 
+
 def p_statement_list(p):
     '''statement_list : statement
                       | statement_list statement
     '''
 
+
 def p_expression_statement(p):
     '''expression_statement : ';'
                             | expression ';'
     '''
+
+
 def p_expression_statement_error(p):
     '''expression_statement : error ';'
     '''
     # Error resynchronisation catch-all
 
+
 def p_selection_statement(p):
     '''selection_statement : IF '(' expression ')' statement
                            | IF '(' expression ')' statement ELSE statement
                            | SWITCH '(' expression ')' statement
     '''
 
+
 def p_iteration_statement(p):
     '''iteration_statement : WHILE '(' expression ')' statement
     | DO statement WHILE '(' expression ')' ';'
     | FOR '(' expression_statement expression_statement ')' statement
     | FOR '(' expression_statement expression_statement expression ')' statement
-    '''	
+    '''
+
 
 def p_jump_statement(p):
     '''jump_statement : GOTO IDENTIFIER ';'
@@ -985,13 +1085,15 @@ def p_jump_statement(p):
                       | RETURN expression ';'
     '''
 
+
 def p_external_declaration(p):
-    '''external_declaration : declaration 
+    '''external_declaration : declaration
                             | function_definition
     '''
 
     # Intentionally empty
 
+
 def p_function_definition(p):
     '''function_definition : declaration_specifiers declarator declaration_list compound_statement
                         | declaration_specifiers declarator compound_statement
@@ -999,6 +1101,7 @@ def p_function_definition(p):
                         | declarator compound_statement
     '''
 
+
 def p_define(p):
     '''define : PP_DEFINE PP_DEFINE_NAME PP_END_DEFINE
               | PP_DEFINE PP_DEFINE_NAME type_name PP_END_DEFINE
@@ -1008,14 +1111,14 @@ def p_define(p):
               | PP_DEFINE PP_DEFINE_MACRO_NAME '(' macro_parameter_list ')' PP_END_DEFINE
               | PP_DEFINE PP_DEFINE_MACRO_NAME '(' macro_parameter_list ')' constant_expression PP_END_DEFINE
     '''
-    
+
     filename = p.slice[1].filename
     lineno = p.slice[1].lineno
-    
+
     if p[3] != '(':
         if len(p) == 4:
-           p.parser.cparser.handle_define_constant(p[2], None, filename,
-                                                   lineno)
+            p.parser.cparser.handle_define_constant(p[2], None, filename,
+                                                    lineno)
         else:
             p.parser.cparser.handle_define_constant(p[2], p[3], filename,
                                                     lineno)
@@ -1032,12 +1135,13 @@ def p_define(p):
                 expr = None
             elif len(p) == 8:
                 expr = p[6]
-        
+
         filename = p.slice[1].filename
         lineno = p.slice[1].lineno
-        
+
         p.parser.cparser.handle_define_macro(p[2], params, expr, filename, lineno)
 
+
 def p_define_error(p):
     '''define : PP_DEFINE error PP_END_DEFINE'''
     lexer = p[2].lexer
@@ -1047,47 +1151,49 @@ def p_define_error(p):
         start -= 1
     while clexdata[end].type != 'PP_END_DEFINE':
         end += 1
-        
-    name = clexdata[start+1].value
-    if clexdata[start+1].type == 'PP_DEFINE_NAME':
+
+    name = clexdata[start + 1].value
+    if clexdata[start + 1].type == 'PP_DEFINE_NAME':
         params = None
-        contents = [t.value for t in clexdata[start+2:end]]
+        contents = [t.value for t in clexdata[start + 2:end]]
     else:
         end_of_param_list = start
         while clexdata[end_of_param_list].value != ')' and \
-              end_of_param_list<end:
+                end_of_param_list < end:
             end_of_param_list += 1
-        params = [t.value for t in clexdata[start+3:end_of_param_list] if \
-                    t.value != ',']
-        contents = [t.value for t in clexdata[end_of_param_list+1:end]]
-    
+        params = [t.value for t in clexdata[start + 3:end_of_param_list] if
+                  t.value != ',']
+        contents = [t.value for t in clexdata[end_of_param_list + 1:end]]
+
     filename = p.slice[1].filename
     lineno = p.slice[1].lineno
-    
-    p[2].lexer.cparser.handle_define_unparseable(name, params, contents, \
+
+    p[2].lexer.cparser.handle_define_unparseable(name, params, contents,
                                                  filename, lineno)
 
+
 def p_macro_parameter_list(p):
     '''macro_parameter_list : PP_MACRO_PARAM
                             | macro_parameter_list ',' PP_MACRO_PARAM
     '''
-    if len(p)==2:
+    if len(p) == 2:
         p[0] = [p[1]]
     else:
         p[1].append(p[3])
         p[0] = p[1]
 
+
 def p_error(t):
     if t.lexer.in_define:
         # p_define_error will generate an error message.
         pass
     else:
         if t.type == '$end':
-            t.parser.cparser.handle_error('Syntax error at end of file.', 
-                 t.filename, 0)
+            t.parser.cparser.handle_error('Syntax error at end of file.',
+                                          t.filename, 0)
         else:
-            t.lexer.cparser.handle_error('Syntax error at %r' % t.value, 
-                 t.filename, t.lineno)
+            t.lexer.cparser.handle_error('Syntax error at %r' % t.value,
+                                         t.filename, t.lineno)
     # Don't alter lexer: default behaviour is to pass error production
     # up until it hits the catch-all at declaration, at which point
     # parsing continues (synchronisation).
diff --git a/lib/python/ctypes/ctypesgencore/parser/cparser.py b/lib/python/ctypes/ctypesgencore/parser/cparser.py
index 213cf11..e1a0461 100644
--- a/lib/python/ctypes/ctypesgencore/parser/cparser.py
+++ b/lib/python/ctypes/ctypesgencore/parser/cparser.py
@@ -6,6 +6,8 @@ Parse a C source file.
 To use, subclass CParser and override its handle_* methods.  Then instantiate
 the class with a string to parse.
 '''
+from __future__ import print_function
+
 
 __docformat__ = 'restructuredtext'
 
@@ -16,16 +18,19 @@ import sys
 import time
 import warnings
 
-import preprocessor
-import yacc
-import cgrammar
-import cdeclarations
+from . import cdeclarations
+from . import cgrammar
+from . import preprocessor
+from . import yacc
+
 
 # --------------------------------------------------------------------------
 # Lexer
 # --------------------------------------------------------------------------
 
+
 class CLexer(object):
+
     def __init__(self, cparser):
         self.cparser = cparser
         self.type_names = set()
@@ -38,17 +43,17 @@ class CLexer(object):
     def token(self):
         while self.pos < len(self.tokens):
             t = self.tokens[self.pos]
-            
+
             self.pos += 1
 
             if not t:
                 break
-            
+
             if t.type == 'PP_DEFINE':
                 self.in_define = True
             elif t.type == 'PP_END_DEFINE':
                 self.in_define = False
-            
+
             # Transform PP tokens into C tokens
             elif t.type == 'LPAREN':
                 t.type = '('
@@ -57,36 +62,38 @@ class CLexer(object):
             elif t.type == 'IDENTIFIER' and t.value in cgrammar.keywords:
                 t.type = t.value.upper()
             elif t.type == 'IDENTIFIER' and t.value in self.type_names:
-                if (self.pos < 2 or self.tokens[self.pos-2].type not in
-                    ('ENUM', 'STRUCT', 'UNION')):
+                if (self.pos < 2 or self.tokens[self.pos - 2].type not in
+                        ('ENUM', 'STRUCT', 'UNION')):
                     t.type = 'TYPE_NAME'
-            
+
             t.lexer = self
             t.clexpos = self.pos - 1
-            
+
             return t
         return None
-        
+
 # --------------------------------------------------------------------------
 # Parser
 # --------------------------------------------------------------------------
 
+
 class CParser(object):
     '''Parse a C source file.
 
     Subclass and override the handle_* methods.  Call `parse` with a string
     to parse.
     '''
+
     def __init__(self, options, stddef_types=True, gnu_types=True):
-        self.preprocessor_parser = preprocessor.PreprocessorParser(options,self)
+        self.preprocessor_parser = preprocessor.PreprocessorParser(options, self)
         self.parser = yacc.Parser()
-        prototype = yacc.yacc(method        = 'LALR',
-                              debug         = False,
-                              module        = cgrammar,
-                              write_tables  = True,
-                              outputdir     = os.path.dirname(__file__),
-                              optimize      = True)
-        
+        prototype = yacc.yacc(method='LALR',
+                              debug=False,
+                              module=cgrammar,
+                              write_tables=True,
+                              outputdir=os.path.dirname(__file__),
+                              optimize=True)
+
         # If yacc is reading tables from a file, then it won't find the error
         # function... need to set it manually
         prototype.errorfunc = cgrammar.p_error
@@ -102,7 +109,7 @@ class CParser(object):
             self.lexer.type_names.add('__builtin_va_list')
         if sys.platform == 'win32':
             self.lexer.type_names.add('__int64')
-        
+
     def parse(self, filename, debug=False):
         '''Parse a file.
 
@@ -120,31 +127,31 @@ class CParser(object):
     # ----------------------------------------------------------------------
 
     def handle_error(self, message, filename, lineno):
-        '''A parse error occurred.  
-        
+        '''A parse error occurred.
+
         The default implementation prints `lineno` and `message` to stderr.
         The parser will try to recover from errors by synchronising at the
         next semicolon.
         '''
-        print >> sys.stderr, '%s:%s %s' % (filename, lineno, message)
-    
+        print('%s:%s %s' % (filename, lineno, message), file=sys.stderr)
+
     def handle_pp_error(self, message):
         '''The C preprocessor emitted an error.
-        
+
         The default implementatin prints the error to stderr. If processing
         can continue, it will.
         '''
-        print >> sys.stderr, 'Preprocessor:', message
-    
+        print('Preprocessor:', message, file=sys.stderr)
+
     def handle_status(self, message):
         '''Progress information.
 
         The default implementationg prints message to stderr.
         '''
-        print >> sys.stderr, message
+        print(message, file=sys.stderr)
 
     def handle_define(self, name, params, value, filename, lineno):
-        '''#define `name` `value` 
+        '''#define `name` `value`
         or #define `name`(`params`) `value`
 
         name is a string
@@ -154,19 +161,19 @@ class CParser(object):
 
     def handle_define_constant(self, name, value, filename, lineno):
         '''#define `name` `value`
-        
+
         name is a string
         value is an ExpressionNode or None
         '''
-    
+
     def handle_define_macro(self, name, params, value, filename, lineno):
         '''#define `name`(`params`) `value`
-        
+
         name is a string
         params is a list of strings
         value is an ExpressionNode or None
         '''
-    
+
     def impl_handle_declaration(self, declaration, filename, lineno):
         '''Internal method that calls `handle_declaration`.  This method
         also adds any new type definitions to the lexer's list of valid type
@@ -183,26 +190,27 @@ class CParser(object):
         self.handle_declaration(declaration, filename, lineno)
 
     def handle_declaration(self, declaration, filename, lineno):
-        '''A declaration was encountered.  
-        
+        '''A declaration was encountered.
+
         `declaration` is an instance of Declaration.  Where a declaration has
         multiple initialisers, each is returned as a separate declaration.
         '''
         pass
 
+
 class DebugCParser(CParser):
     '''A convenience class that prints each invocation of a handle_* method to
     stdout.
     '''
 
     def handle_define(self, name, value, filename, lineno):
-        print '#define name=%r, value=%r' % (name, value)
+        print('#define name=%r, value=%r' % (name, value))
 
     def handle_define_constant(self, name, value, filename, lineno):
-        print '#define constant name=%r, value=%r' % (name, value)
+        print('#define constant name=%r, value=%r' % (name, value))
 
     def handle_declaration(self, declaration, filename, lineno):
-        print declaration
-        
+        print(declaration)
+
 if __name__ == '__main__':
     DebugCParser().parse(sys.argv[1], debug=True)
diff --git a/lib/python/ctypes/ctypesgencore/parser/ctypesparser.py b/lib/python/ctypes/ctypesgencore/parser/ctypesparser.py
index 8d6eec0..acbfbb7 100644
--- a/lib/python/ctypes/ctypesgencore/parser/ctypesparser.py
+++ b/lib/python/ctypes/ctypesgencore/parser/ctypesparser.py
@@ -12,17 +12,18 @@ __docformat__ = 'restructuredtext'
 
 __all__ = ["CtypesParser"]
 
-from cparser import *
+from .cdeclarations import *
+from .cparser import *
 from ctypesgencore.ctypedescs import *
-from cdeclarations import *
 from ctypesgencore.expressions import *
 
-def get_ctypes_type(typ, declarator, check_qualifiers=False):       
+
+def get_ctypes_type(typ, declarator, check_qualifiers=False):
     signed = True
     typename = 'int'
     longs = 0
     t = None
-    
+
     for specifier in typ.specifiers:
         if isinstance(specifier, StructTypeSpecifier):
             t = make_struct_from_specifier(specifier)
@@ -36,15 +37,15 @@ def get_ctypes_type(typ, declarator, check_qualifiers=False):
             longs += 1
         else:
             typename = str(specifier)
-    
+
     if not t:
         # It is a numeric type of some sort
-        if (typename,signed,longs) in ctypes_type_map:
-            t = CtypesSimple(typename,signed,longs)
-        
+        if (typename, signed, longs) in ctypes_type_map:
+            t = CtypesSimple(typename, signed, longs)
+
         elif signed and not longs:
             t = CtypesTypedef(typename)
-        
+
         else:
             name = " ".join(typ.specifiers)
             if typename in [x[0] for x in ctypes_type_map.keys()]:
@@ -54,10 +55,10 @@ def get_ctypes_type(typ, declarator, check_qualifiers=False):
                 error = "Ctypes does not support adding additional " \
                     "specifiers to typedefs, such as \"%s\"" % name
             t = CtypesTypedef(name)
-            t.error(error,cls='unsupported-type')
-        
+            t.error(error, cls='unsupported-type')
+
         if declarator and declarator.bitfield:
-            t = CtypesBitfield(t,declarator.bitfield)
+            t = CtypesBitfield(t, declarator.bitfield)
 
     qualifiers = []
     qualifiers.extend(typ.qualifiers)
@@ -67,50 +68,51 @@ def get_ctypes_type(typ, declarator, check_qualifiers=False):
 
             params = []
             for param in declarator.parameters:
-                if param=="...":
+                if param == "...":
                     break
                 params.append(get_ctypes_type(param.type, param.declarator))
             t = CtypesFunction(t, params, variadic)
-        
+
         a = declarator.array
         while a:
             t = CtypesArray(t, a.size)
             a = a.array
 
         qualifiers.extend(declarator.qualifiers)
-        
+
         t = CtypesPointer(t, declarator.qualifiers)
-        
+
         declarator = declarator.pointer
-    
+
     if declarator and declarator.parameters is not None:
         variadic = "..." in declarator.parameters
 
         params = []
         for param in declarator.parameters:
-            if param=="...":
+            if param == "...":
                 break
             params.append(get_ctypes_type(param.type, param.declarator))
         t = CtypesFunction(t, params, variadic)
-    
+
     if declarator:
         a = declarator.array
         while a:
             t = CtypesArray(t, a.size)
             a = a.array
-    
+
     if isinstance(t, CtypesPointer) and \
        isinstance(t.destination, CtypesSimple) and \
-       t.destination.name=="char" and \
+       t.destination.name == "char" and \
        t.destination.signed:
-       t = CtypesSpecial("String")
+        t = CtypesSpecial("String")
 
     return t
 
+
 def make_struct_from_specifier(specifier):
-    variety = {True:"union", False:"struct"}[specifier.is_union]
+    variety = {True: "union", False: "struct"}[specifier.is_union]
     tag = specifier.tag
-    
+
     if specifier.declarations:
         members = []
         for declaration in specifier.declarations:
@@ -127,13 +129,14 @@ def make_struct_from_specifier(specifier):
             members.append((name, remove_function_pointer(t)))
     else:
         members = None
-    
-    return CtypesStruct(tag,variety,members,
-                        src=(specifier.filename,specifier.lineno))
+
+    return CtypesStruct(tag, variety, members,
+                        src=(specifier.filename, specifier.lineno))
+
 
 def make_enum_from_specifier(specifier):
     tag = specifier.tag
-    
+
     enumerators = []
     last_name = None
     for e in specifier.enumerators:
@@ -141,32 +144,33 @@ def make_enum_from_specifier(specifier):
             value = e.expression
         else:
             if last_name:
-                value = BinaryExpressionNode("addition", (lambda x,y:x+y),
-                    "(%s + %s)", (False,False),
-                    IdentifierExpressionNode(last_name),
-                    ConstantExpressionNode(1))
+                value = BinaryExpressionNode("addition", (lambda x, y: x + y),
+                                             "(%s + %s)", (False, False),
+                                             IdentifierExpressionNode(last_name),
+                                             ConstantExpressionNode(1))
             else:
                 value = ConstantExpressionNode(0)
-        
-        enumerators.append((e.name,value))
+
+        enumerators.append((e.name, value))
         last_name = e.name
-    
+
     return CtypesEnum(tag, enumerators,
-                      src=(specifier.filename,specifier.lineno))
+                      src=(specifier.filename, specifier.lineno))
+
 
 class CtypesParser(CParser):
     '''Parse a C file for declarations that can be used by ctypes.
-    
+
     Subclass and override the handle_ctypes_* methods.
     '''
 
     def handle_declaration(self, declaration, filename, lineno):
         t = get_ctypes_type(declaration.type, declaration.declarator)
-        
+
         if type(t) in (CtypesStruct, CtypesEnum):
             self.handle_ctypes_new_type(
                 remove_function_pointer(t), filename, lineno)
-        
+
         declarator = declaration.declarator
         if declarator is None:
             # XXX TEMPORARY while struct with no typedef not filled in
@@ -177,17 +181,17 @@ class CtypesParser(CParser):
         if declaration.storage == 'typedef':
             self.handle_ctypes_typedef(
                 name, remove_function_pointer(t), filename, lineno)
-        elif type(t) == CtypesFunction:
+        elif isinstance(t, CtypesFunction):
             self.handle_ctypes_function(
                 name, t.restype, t.argtypes, t.variadic, filename, lineno)
         elif declaration.storage != 'static':
             self.handle_ctypes_variable(name, t, filename, lineno)
 
     # ctypes parser interface.  Override these methods in your subclass.
-    
+
     def handle_ctypes_new_type(self, ctype, filename, lineno):
         pass
-    
+
     def handle_ctypes_typedef(self, name, ctype, filename, lineno):
         pass
 
diff --git a/lib/python/ctypes/ctypesgencore/parser/datacollectingparser.py b/lib/python/ctypes/ctypesgencore/parser/datacollectingparser.py
index 4946ac5..826382e 100644
--- a/lib/python/ctypes/ctypesgencore/parser/datacollectingparser.py
+++ b/lib/python/ctypes/ctypesgencore/parser/datacollectingparser.py
@@ -4,16 +4,20 @@
 DataCollectingParser subclasses ctypesparser.CtypesParser and builds Description
 objects from the CtypesType objects and other information from CtypesParser.
 After parsing is complete, a DescriptionCollection object can be retrieved by
-calling DataCollectingParser.data(). 
+calling DataCollectingParser.data().
 """
+from __future__ import print_function
 
-import ctypesparser
-from ctypesgencore.descriptions import *
+
+import os
+from tempfile import mkstemp
+
+from . import ctypesparser
 from ctypesgencore.ctypedescs import *
+from ctypesgencore.descriptions import *
 from ctypesgencore.expressions import *
 from ctypesgencore.messages import *
-from tempfile import mkstemp
-import os
+
 
 class DataCollectingParser(ctypesparser.CtypesParser,
                            ctypesparser.CtypesTypeVisitor):
@@ -22,61 +26,62 @@ class DataCollectingParser(ctypesparser.CtypesParser,
     p.parse()
     data=p.data() #A dictionary of constants, enums, structs, functions, etc.
     """
-    def __init__(self,headers,options):
-        ctypesparser.CtypesParser.__init__(self,options)
-        self.headers=headers
-        self.options=options
-        
-        self.constants=[]
-        self.typedefs=[]
-        self.structs=[]
-        self.enums=[]
-        self.functions=[]
-        self.variables=[]
-        self.macros=[]
-        
-        self.all=[]
-        self.output_order=[]
-        
+
+    def __init__(self, headers, options):
+        ctypesparser.CtypesParser.__init__(self, options)
+        self.headers = headers
+        self.options = options
+
+        self.constants = []
+        self.typedefs = []
+        self.structs = []
+        self.enums = []
+        self.functions = []
+        self.variables = []
+        self.macros = []
+
+        self.all = []
+        self.output_order = []
+
         # NULL is a useful macro to have defined
         null = ConstantExpressionNode(None)
-        nullmacro = ConstantDescription("NULL",null,("<built-in>",1))
+        nullmacro = ConstantDescription("NULL", null, ("<built-in>", 1))
         self.constants.append(nullmacro)
         self.all.append(nullmacro)
         self.output_order.append(("constant", nullmacro))
-        
+
         # A list of tuples describing macros; saved to be processed after
         # everything else has been parsed
         self.saved_macros = []
         # A set of structs that are already known
-        self.already_seen_structs=set() 
+        self.already_seen_structs = set()
         # A dict of structs that have only been seen in opaque form
-        self.already_seen_opaque_structs={} 
+        self.already_seen_opaque_structs = {}
         # A set of enums that are already known
-        self.already_seen_enums=set() 
+        self.already_seen_enums = set()
         # A dict of enums that have only been seen in opaque form
-        self.already_seen_opaque_enums={}
-            
+        self.already_seen_opaque_enums = {}
+
     def parse(self):
         fd, fname = mkstemp(suffix=".h")
         f = os.fdopen(fd, 'w+b')
         for header in self.options.other_headers:
-            print >>f, '#include <%s>' % header
+            print('#include <%s>' % header, file=f)
         for header in self.headers:
-            print >>f, '#include "%s"' % os.path.abspath(header)
+            print('#include "%s"' % os.path.abspath(header), file=f)
         f.flush()
         f.close()
-        ctypesparser.CtypesParser.parse(self,fname,None)
+        ctypesparser.CtypesParser.parse(self, fname, None)
         os.remove(fname)
 
-        for name, params, expr, (filename,lineno) in self.saved_macros:
+        for name, params, expr, (filename, lineno) in self.saved_macros:
             self.handle_macro(name, params, expr, filename, lineno)
-            
+
     def handle_define_constant(self, name, expr, filename, lineno):
         # Called by CParser
         # Save to handle later
         self.saved_macros.append((name, None, expr, (filename, lineno)))
-    
+
     def handle_define_unparseable(self, name, params, value, filename, lineno):
         # Called by CParser
         if params:
@@ -86,66 +91,66 @@ class DataCollectingParser(ctypesparser.CtypesParser,
             original_string = "#define %s %s" % \
                 (name, " ".join(value))
         macro = MacroDescription(name, params, None,
-                                 src = (filename,lineno))
+                                 src=(filename, lineno))
         macro.error("Could not parse macro \"%s\"" % original_string,
-                    cls = 'macro')
+                    cls='macro')
         macro.original_string = original_string
         self.macros.append(macro)
         self.all.append(macro)
-        self.output_order.append(('macro',macro))
-    
+        self.output_order.append(('macro', macro))
+
     def handle_define_macro(self, name, params, expr, filename, lineno):
         # Called by CParser
         # Save to handle later
-        self.saved_macros.append((name, params, expr, (filename,lineno)))
-    
+        self.saved_macros.append((name, params, expr, (filename, lineno)))
+
     def handle_ctypes_typedef(self, name, ctype, filename, lineno):
         # Called by CtypesParser
         ctype.visit(self)
-        
-        typedef=TypedefDescription(name,
-                                   ctype,
-                                   src=(filename,repr(lineno)))
-        
+
+        typedef = TypedefDescription(name,
+                                     ctype,
+                                     src=(filename, repr(lineno)))
+
         self.typedefs.append(typedef)
         self.all.append(typedef)
-        self.output_order.append(('typedef',typedef))
-    
+        self.output_order.append(('typedef', typedef))
+
     def handle_ctypes_new_type(self, ctype, filename, lineno):
         # Called by CtypesParser
-        if isinstance(ctype,ctypesparser.CtypesEnum):
+        if isinstance(ctype, ctypesparser.CtypesEnum):
             self.handle_enum(ctype, filename, lineno)
         else:
             self.handle_struct(ctype, filename, lineno)
-    
+
     def handle_ctypes_function(self, name, restype, argtypes, variadic,
                                filename, lineno):
         # Called by CtypesParser
         restype.visit(self)
         for argtype in argtypes:
             argtype.visit(self)
-        
-        function=FunctionDescription(name,
-                                     restype,
-                                     argtypes,
-                                     variadic = variadic,
-                                     src=(filename,repr(lineno)))
-        
+
+        function = FunctionDescription(name,
+                                       restype,
+                                       argtypes,
+                                       variadic=variadic,
+                                       src=(filename, repr(lineno)))
+
         self.functions.append(function)
         self.all.append(function)
-        self.output_order.append(('function',function))
+        self.output_order.append(('function', function))
 
     def handle_ctypes_variable(self, name, ctype, filename, lineno):
         # Called by CtypesParser
         ctype.visit(self)
-        
-        variable=VariableDescription(name,
-                                     ctype,
-                                     src=(filename,repr(lineno)))
-        
+
+        variable = VariableDescription(name,
+                                       ctype,
+                                       src=(filename, repr(lineno)))
+
         self.variables.append(variable)
         self.all.append(variable)
-        self.output_order.append(('variable',variable))
+        self.output_order.append(('variable', variable))
 
     def handle_struct(self, ctypestruct, filename, lineno):
         # Called from within DataCollectingParser
@@ -155,79 +160,79 @@ class DataCollectingParser(ctypesparser.CtypesParser,
         # find a transparent struct with the same tag, we fill in the
         # opaque struct with the information from the transparent struct and
         # move the opaque struct to the end of the struct list.
-        
-        name = "%s %s"%(ctypestruct.variety,ctypestruct.tag)
-        
+
+        name = "%s %s" % (ctypestruct.variety, ctypestruct.tag)
+
         if name in self.already_seen_structs:
             return
-        
+
         if ctypestruct.opaque:
             if name not in self.already_seen_opaque_structs:
                 struct = StructDescription(ctypestruct.tag,
                                            ctypestruct.variety,
-                                           None, # No members
-                                           True, # Opaque
+                                           None,  # No members
+                                           True,  # Opaque
                                            ctypestruct,
-                                           src=(filename,str(lineno)))
-                
-                self.already_seen_opaque_structs[name]=struct
+                                           src=(filename, str(lineno)))
+
+                self.already_seen_opaque_structs[name] = struct
                 self.structs.append(struct)
                 self.all.append(struct)
-                self.output_order.append(('struct',struct))
-        
+                self.output_order.append(('struct', struct))
+
         else:
-            for (membername,ctype) in ctypestruct.members:
+            for (membername, ctype) in ctypestruct.members:
                 ctype.visit(self)
-            
+
             if name in self.already_seen_opaque_structs:
                 # Fill in older version
-                struct=self.already_seen_opaque_structs[name]
+                struct = self.already_seen_opaque_structs[name]
                 struct.opaque = False
                 struct.members = ctypestruct.members
                 struct.ctype = ctypestruct
                 struct.src = ctypestruct.src
-                
-                self.output_order.append(('struct-body',struct))
-                
+
+                self.output_order.append(('struct-body', struct))
+
                 del self.already_seen_opaque_structs[name]
-            
+
             else:
                 struct = StructDescription(ctypestruct.tag,
                                            ctypestruct.variety,
                                            ctypestruct.members,
-                                           False, # Not opaque
-                                           src=(filename,str(lineno)),
-                                           ctype=ctypestruct)                
+                                           False,  # Not opaque
+                                           src=(filename, str(lineno)),
+                                           ctype=ctypestruct)
                 self.structs.append(struct)
                 self.all.append(struct)
-                self.output_order.append(('struct',struct))
-                self.output_order.append(('struct-body',struct))
-            
+                self.output_order.append(('struct', struct))
+                self.output_order.append(('struct-body', struct))
+
             self.already_seen_structs.add(name)
-    
+
     def handle_enum(self, ctypeenum, filename, lineno):
         # Called from within DataCollectingParser.
-        
+
         # Process for handling opaque enums is the same as process for opaque
         # structs. See handle_struct() for more details.
-        
+
         tag = ctypeenum.tag
         if tag in self.already_seen_enums:
             return
-            
+
         if ctypeenum.opaque:
             if tag not in self.already_seen_opaque_enums:
-                enum=EnumDescription(ctypeenum.tag,
-                             ctypeenum.enumerators,
-                             ctypeenum,
-                             src = (filename,str(lineno)))
+                enum = EnumDescription(ctypeenum.tag,
+                                       ctypeenum.enumerators,
+                                       ctypeenum,
+                                       src=(filename, str(lineno)))
                 enum.opaque = True
-                
-                self.already_seen_opaque_enums[tag]=enum
+
+                self.already_seen_opaque_enums[tag] = enum
                 self.enums.append(enum)
                 self.all.append(enum)
-                self.output_order.append(('enum',enum))
-                
+                self.output_order.append(('enum', enum))
+
         else:
             if tag in self.already_seen_opaque_enums:
                 # Fill in older opaque version
@@ -235,87 +240,87 @@ class DataCollectingParser(ctypesparser.CtypesParser,
                 enum.opaque = False
                 enum.ctype = ctypeenum
                 enum.src = ctypeenum.src
-            
+
                 del self.already_seen_opaque_enums[tag]
-            
+
             else:
-                enum=EnumDescription(ctypeenum.tag,
-                                None,
-                                src=(filename,str(lineno)),
-                                ctype=ctypeenum)
+                enum = EnumDescription(ctypeenum.tag,
+                                       None,
+                                       src=(filename, str(lineno)),
+                                       ctype=ctypeenum)
                 enum.opaque = False
-                
+
                 self.enums.append(enum)
                 self.all.append(enum)
-                self.output_order.append(('enum',enum))
-            
+                self.output_order.append(('enum', enum))
+
             self.already_seen_enums.add(tag)
-            
-            for (enumname,expr) in ctypeenum.enumerators:                
-                constant=ConstantDescription(enumname, expr,
-                                             src=(filename,lineno))
-                
+
+            for (enumname, expr) in ctypeenum.enumerators:
+                constant = ConstantDescription(enumname, expr,
+                                               src=(filename, lineno))
+
                 self.constants.append(constant)
                 self.all.append(constant)
-                self.output_order.append(('constant',constant))
-    
+                self.output_order.append(('constant', constant))
+
     def handle_macro(self, name, params, expr, filename, lineno):
         # Called from within DataCollectingParser
-        src = (filename,lineno)
-        
-        if expr==None:
+        src = (filename, lineno)
+
+        if expr is None:
             expr = ConstantExpressionNode(True)
             constant = ConstantDescription(name, expr, src)
             self.constants.append(constant)
             self.all.append(constant)
             return
-        
+
         expr.visit(self)
-        
-        if isinstance(expr,CtypesType):
+
+        if isinstance(expr, CtypesType):
             if params:
                 macro = MacroDescription(name, "", src)
-                macro.error("%s has parameters but evaluates to a type. " \
-                    "Ctypesgen does not support it." % macro.casual_name(),
-                    cls = 'macro')
+                macro.error("%s has parameters but evaluates to a type. "
+                            "Ctypesgen does not support it." % macro.casual_name(),
+                            cls='macro')
                 self.macros.append(macro)
                 self.all.append(macro)
-                self.output_order.append(('macro',macro))
-            
+                self.output_order.append(('macro', macro))
+
             else:
                 typedef = TypedefDescription(name, expr, src)
                 self.typedefs.append(typedef)
                 self.all.append(typedef)
-                self.output_order.append(('typedef',typedef))
-        
+                self.output_order.append(('typedef', typedef))
+
         else:
             macro = MacroDescription(name, params, expr, src)
             self.macros.append(macro)
             self.all.append(macro)
-            self.output_order.append(('macro',macro))
-        
+            self.output_order.append(('macro', macro))
+
         # Macros could possibly contain things like __FILE__, __LINE__, etc...
         # This could be supported, but it would be a lot of work. It would
         # probably also bloat the Preamble considerably.
-        
+
     def handle_error(self, message, filename, lineno):
         # Called by CParser
-        error_message("%s:%d: %s" % (filename,lineno,message), cls='cparser')
-    
+        error_message("%s:%d: %s" % (filename, lineno, message), cls='cparser')
+
     def handle_pp_error(self, message):
         # Called by PreprocessorParser
-        error_message("%s: %s" % (self.options.cpp, message), cls = 'cparser')
-    
+        error_message("%s: %s" % (self.options.cpp, message), cls='cparser')
+
     def handle_status(self, message):
         # Called by CParser
         status_message(message)
-    
+
     def visit_struct(self, struct):
         self.handle_struct(struct, struct.src[0], struct.src[1])
-    
-    def visit_enum(self,enum):
+
+    def visit_enum(self, enum):
         self.handle_enum(enum, enum.src[0], enum.src[1])
-    
+
     def data(self):
         return DescriptionCollection(self.constants,
                                      self.typedefs,
diff --git a/lib/python/ctypes/ctypesgencore/parser/lex.py b/lib/python/ctypes/ctypesgencore/parser/lex.py
index 079f08f..fe7d06e 100644
--- a/lib/python/ctypes/ctypesgencore/parser/lex.py
+++ b/lib/python/ctypes/ctypesgencore/parser/lex.py
@@ -11,22 +11,65 @@
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
 # version 2.1 of the License, or (at your option) any later version.
-# 
+#
 # This library 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
 # Lesser General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU Lesser General Public
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-# 
+#
 # See the file LICENSE for a complete copy of the LGPL.
 #-----------------------------------------------------------------------------
+from __future__ import print_function
 
 __version__ = "2.2"
 
-import re, sys, types, os.path
+
+try:
+    from builtins import bytes
+    PY3 = True
+except ImportError:
+    # python2
+    bytes = str
+    PY3 = False
+
+
+import operator
+import os.path
+import re
+import sys
+import types
+import collections
+
+
+if PY3:
+    _meth_func = "__func__"
+    _meth_self = "__self__"
+
+    _func_closure = "__closure__"
+    _func_code = "__code__"
+    _func_defaults = "__defaults__"
+    _func_globals = "__globals__"
+else:
+    _meth_func = "im_func"
+    _meth_self = "im_self"
+
+    _func_closure = "func_closure"
+    _func_code = "func_code"
+    _func_defaults = "func_defaults"
+    _func_globals = "func_globals"
+
+# define compatible function to support PY2 & PY3
+get_mth_func = operator.attrgetter(_meth_func)
+get_mth_self = operator.attrgetter(_meth_self)
+get_func_closure = operator.attrgetter(_func_closure)
+get_func_code = operator.attrgetter(_func_code)
+get_func_defaults = operator.attrgetter(_func_defaults)
+get_func_globals = operator.attrgetter(_func_globals)
+
 
 # Regular expression used to match valid token names
 _is_identifier = re.compile(r'^[a-zA-Z0-9_]+$')
@@ -35,26 +78,31 @@ _is_identifier = re.compile(r'^[a-zA-Z0-9_]+$')
 # It's a little funky because I want to preserve backwards compatibility
 # with Python 2.0 where types.ObjectType is undefined.
 
-try:
-   _INSTANCETYPE = (types.InstanceType, types.ObjectType)
-except AttributeError:
-   _INSTANCETYPE = types.InstanceType
-   class object: pass       # Note: needed if no new-style classes present
+_INSTANCETYPE = getattr(types, 'InstanceType', object)
+
 
 # Exception thrown when invalid token encountered and no default error
 # handler is defined.
+
+
 class LexError(Exception):
-    def __init__(self,message,s):
-         self.args = (message,)
-         self.text = s
+
+    def __init__(self, message, s):
+        self.args = (message,)
+        self.text = s
 
 # Token class
+
+
 class LexToken(object):
+
     def __str__(self):
-        return "LexToken(%s,%r,%d,%d)" % (self.type,self.value,self.lineno,self.lexpos)
+        return "LexToken(%s,%r,%d,%d)" % (self.type, self.value, self.lineno, self.lexpos)
+
     def __repr__(self):
         return str(self)
-    def skip(self,n):
+
+    def skip(self, n):
         self.lexer.skip(n)
 
 # -----------------------------------------------------------------------------
@@ -66,12 +114,14 @@ class LexToken(object):
 #    token()          -  Get the next token
 # -----------------------------------------------------------------------------
 
+
 class Lexer:
+
     def __init__(self):
-        self.lexre = None             # Master regular expression. This is a list of 
-                                      # tuples (re,findex) where re is a compiled
-                                      # regular expression and findex is a list
-                                      # mapping regex group numbers to rules
+        self.lexre = None             # Master regular expression. This is a list of
+        # tuples (re,findex) where re is a compiled
+        # regular expression and findex is a list
+        # mapping regex group numbers to rules
         self.lexretext = None         # Current regular expression strings
         self.lexstatere = {}          # Dictionary mapping lexer states to master regexs
         self.lexstateretext = {}      # Dictionary mapping lexer states to regex strings
@@ -93,7 +143,7 @@ class Lexer:
         self.lexdebug = 0             # Debugging mode
         self.lexoptimize = 0          # Optimized mode
 
-    def clone(self,object=None):
+    def clone(self, object=None):
         c = Lexer()
         c.lexstatere = self.lexstatere
         c.lexstateinfo = self.lexstateinfo
@@ -111,29 +161,29 @@ class Lexer:
         c.lineno = self.lineno
         c.lexoptimize = self.lexoptimize
         c.lexliterals = self.lexliterals
-        c.lexmodule   = self.lexmodule
+        c.lexmodule = self.lexmodule
 
         # If the object parameter has been supplied, it means we are attaching the
         # lexer to a new object.  In this case, we have to rebind all methods in
         # the lexstatere and lexstateerrorf tables.
 
         if object:
-            newtab = { }
+            newtab = {}
             for key, ritem in self.lexstatere.items():
                 newre = []
                 for cre, findex in ritem:
-                     newfindex = []
-                     for f in findex:
-                         if not f or not f[0]:
-                             newfindex.append(f)
-                             continue
-                         newfindex.append((getattr(object,f[0].__name__),f[1]))
-                newre.append((cre,newfindex))
+                    newfindex = []
+                    for f in findex:
+                        if not f or not f[0]:
+                            newfindex.append(f)
+                            continue
+                        newfindex.append((getattr(object, f[0].__name__), f[1]))
+                newre.append((cre, newfindex))
                 newtab[key] = newre
             c.lexstatere = newtab
-            c.lexstateerrorf = { }
+            c.lexstateerrorf = {}
             for key, ef in self.lexstateerrorf.items():
-                c.lexstateerrorf[key] = getattr(object,ef.__name__)
+                c.lexstateerrorf[key] = getattr(object, ef.__name__)
             c.lexmodule = object
 
         # Set up other attributes
@@ -144,64 +194,69 @@ class Lexer:
     # writetab() - Write lexer information to a table file
     # ------------------------------------------------------------
     # <tm> 25 June 2008 added 'outputdir'
-    def writetab(self,tabfile,outputdir=''):
-        tf = open(os.path.join(outputdir,tabfile)+".py","w")
-        tf.write("# %s.py. This file automatically created by PLY (version %s). Don't edit!\n" % (tabfile,__version__))
+    def writetab(self, tabfile, outputdir=''):
+        tf = open(os.path.join(outputdir, tabfile) + ".py", "w")
+        tf.write(
+            "# %s.py. This file automatically created by PLY (version %s). Don't edit!\n" %
+            (tabfile, __version__))
         tf.write("_lextokens    = %s\n" % repr(self.lextokens))
         tf.write("_lexreflags   = %s\n" % repr(self.lexreflags))
         tf.write("_lexliterals  = %s\n" % repr(self.lexliterals))
         tf.write("_lexstateinfo = %s\n" % repr(self.lexstateinfo))
-        
-        tabre = { }
+
+        tabre = {}
         for key, lre in self.lexstatere.items():
-             titem = []
-             for i in range(len(lre)):
-                  titem.append((self.lexstateretext[key][i],_funcs_to_names(lre[i][1])))
-             tabre[key] = titem
+            titem = []
+            for i in range(len(lre)):
+                titem.append((self.lexstateretext[key][i], _funcs_to_names(lre[i][1])))
+            tabre[key] = titem
 
         tf.write("_lexstatere   = %s\n" % repr(tabre))
         tf.write("_lexstateignore = %s\n" % repr(self.lexstateignore))
 
-        taberr = { }
+        taberr = {}
         for key, ef in self.lexstateerrorf.items():
-             if ef:
-                  taberr[key] = ef.__name__
-             else:
-                  taberr[key] = None
+            if ef:
+                taberr[key] = ef.__name__
+            else:
+                taberr[key] = None
         tf.write("_lexstateerrorf = %s\n" % repr(taberr))
         tf.close()
 
     # ------------------------------------------------------------
     # readtab() - Read lexer information from a tab file
     # ------------------------------------------------------------
-    def readtab(self,tabfile,fdict):
-        exec "import %s as lextab" % tabfile
-        self.lextokens      = lextab._lextokens
-        self.lexreflags     = lextab._lexreflags
-        self.lexliterals    = lextab._lexliterals
-        self.lexstateinfo   = lextab._lexstateinfo
+    def readtab(self, tabfile, fdict):
+        exec("import %s as lextab" % tabfile)
+        self.lextokens = lextab._lextokens
+        self.lexreflags = lextab._lexreflags
+        self.lexliterals = lextab._lexliterals
+        self.lexstateinfo = lextab._lexstateinfo
         self.lexstateignore = lextab._lexstateignore
-        self.lexstatere     = { }
-        self.lexstateretext = { }
-        for key,lre in lextab._lexstatere.items():
-             titem = []
-             txtitem = []
-             for i in range(len(lre)):
-                  titem.append((re.compile(lre[i][0],lextab._lexreflags),_names_to_funcs(lre[i][1],fdict)))
-                  txtitem.append(lre[i][0])
-             self.lexstatere[key] = titem
-             self.lexstateretext[key] = txtitem
-        self.lexstateerrorf = { }
-        for key,ef in lextab._lexstateerrorf.items():
-             self.lexstateerrorf[key] = fdict[ef]
+        self.lexstatere = {}
+        self.lexstateretext = {}
+        for key, lre in lextab._lexstatere.items():
+            titem = []
+            txtitem = []
+            for i in range(len(lre)):
+                titem.append(
+                    (re.compile(
+                        lre[i][0], lextab._lexreflags), _names_to_funcs(
+                        lre[i][1], fdict)))
+                txtitem.append(lre[i][0])
+            self.lexstatere[key] = titem
+            self.lexstateretext[key] = txtitem
+        self.lexstateerrorf = {}
+        for key, ef in lextab._lexstateerrorf.items():
+            self.lexstateerrorf[key] = fdict[ef]
         self.begin('INITIAL')
-         
+
     # ------------------------------------------------------------
     # input() - Push a new string into the lexer
     # ------------------------------------------------------------
-    def input(self,s):
-        if not (isinstance(s,types.StringType) or isinstance(s,types.UnicodeType)):
-            raise ValueError, "Expected a string"
+    def input(self, s):
+        if not (isinstance(s, bytes) or isinstance(s, str)):
+            raise ValueError("Expected a string")
         self.lexdata = s
         self.lexpos = 0
         self.lexlen = len(s)
@@ -209,19 +264,19 @@ class Lexer:
     # ------------------------------------------------------------
     # begin() - Changes the lexing state
     # ------------------------------------------------------------
-    def begin(self,state):
-        if not self.lexstatere.has_key(state):
-            raise ValueError, "Undefined state"
+    def begin(self, state):
+        if state not in self.lexstatere:
+            raise ValueError("Undefined state")
         self.lexre = self.lexstatere[state]
         self.lexretext = self.lexstateretext[state]
-        self.lexignore = self.lexstateignore.get(state,"")
-        self.lexerrorf = self.lexstateerrorf.get(state,None)
+        self.lexignore = self.lexstateignore.get(state, "")
+        self.lexerrorf = self.lexstateerrorf.get(state, None)
         self.lexstate = state
 
     # ------------------------------------------------------------
     # push_state() - Changes the lexing state and saves old on stack
     # ------------------------------------------------------------
-    def push_state(self,state):
+    def push_state(self, state):
         self.lexstatestack.append(self.lexstate)
         self.begin(state)
 
@@ -240,7 +295,7 @@ class Lexer:
     # ------------------------------------------------------------
     # skip() - Skip ahead n characters
     # ------------------------------------------------------------
-    def skip(self,n):
+    def skip(self, n):
         self.lexpos += n
 
     # ------------------------------------------------------------
@@ -252,21 +307,23 @@ class Lexer:
     # ------------------------------------------------------------
     def token(self):
         # Make local copies of frequently referenced attributes
-        lexpos    = self.lexpos
-        lexlen    = self.lexlen
+        lexpos = self.lexpos
+        lexlen = self.lexlen
         lexignore = self.lexignore
-        lexdata   = self.lexdata
+        lexdata = self.lexdata
 
         while lexpos < lexlen:
-            # This code provides some short-circuit code for whitespace, tabs, and other ignored characters
+            # This code provides some short-circuit code for whitespace, tabs, and
+            # other ignored characters
             if lexdata[lexpos] in lexignore:
                 lexpos += 1
                 continue
 
             # Look for a regular expression match
-            for lexre,lexindexfunc in self.lexre:
-                m = lexre.match(lexdata,lexpos)
-                if not m: continue
+            for lexre, lexindexfunc in self.lexre:
+                m = lexre.match(lexdata, lexpos)
+                if not m:
+                    continue
 
                 # Set last match in lexer so that rules can access it if they want
                 self.lexmatch = m
@@ -281,39 +338,40 @@ class Lexer:
 
                 lexpos = m.end()
                 i = m.lastindex
-                func,tok.type = lexindexfunc[i]
+                func, tok.type = lexindexfunc[i]
                 self.lexpos = lexpos
 
                 if not func:
-                   # If no token type was set, it's an ignored token
-                   if tok.type: return tok      
-                   break
+                    # If no token type was set, it's an ignored token
+                    if tok.type:
+                        return tok
+                    break
 
-                # if func not callable, it means it's an ignored token                
-                if not callable(func):
-                   break 
+                # if func not callable, it means it's an ignored token
+                if not isinstance(func, collections.Callable):
+                    break
 
                 # If token is processed by a function, call it
                 newtok = func(tok)
-                
+
                 # Every function must return a token, if nothing, we just move to next token
-                if not newtok: 
+                if not newtok:
                     lexpos = self.lexpos        # This is here in case user has updated lexpos.
-                    
+
                     # Added for pyglet/tools/wrapper/cparser.py by Alex
-                    # Holkner on 20/Jan/2007 
+                    # Holkner on 20/Jan/2007
                     lexdata = self.lexdata
                     break
-                
+
                 # Verify type of the token.  If not in the token map, raise an error
                 if not self.lexoptimize:
                     # Allow any single-character literal also for
                     # pyglet/tools/wrapper/cparser.py by Alex Holkner on
-                    # 20/Jan/2007 
-                    if not self.lextokens.has_key(newtok.type) and len(newtok.type) > 1:
-                        raise LexError, ("%s:%d: Rule '%s' returned an unknown token type '%s'" % (
-                            func.func_code.co_filename, func.func_code.co_firstlineno,
-                            func.__name__, newtok.type),lexdata[lexpos:])
+                    # 20/Jan/2007
+                    if newtok.type not in self.lextokens and len(newtok.type) > 1:
+                        raise LexError("%s:%d: Rule '%s' returned an unknown token type '%s'" % (
+                            get_func_code(func).co_filename, get_func_code(func).co_firstlineno,
+                            func.__name__, newtok.type), lexdata[lexpos:])
 
                 return newtok
             else:
@@ -327,7 +385,7 @@ class Lexer:
                     tok.lexpos = lexpos
                     self.lexpos = lexpos + 1
                     return tok
-        
+
                 # No match. Call t_error() if defined.
                 if self.lexerrorf:
                     tok = LexToken()
@@ -340,19 +398,26 @@ class Lexer:
                     newtok = self.lexerrorf(tok)
                     if lexpos == self.lexpos:
                         # Error method didn't change text position at all. This is an error.
-                        raise LexError, ("Scanning error. Illegal character '%s'" % (lexdata[lexpos]), lexdata[lexpos:])
+                        raise LexError(
+                            "Scanning error. Illegal character '%s'" %
+                            (lexdata[lexpos]), lexdata[
+                                lexpos:])
                     lexpos = self.lexpos
-                    if not newtok: continue
+                    if not newtok:
+                        continue
                     return newtok
 
                 self.lexpos = lexpos
-                raise LexError, ("Illegal character '%s' at index %d" % (lexdata[lexpos],lexpos), lexdata[lexpos:])
+                raise LexError(
+                    "Illegal character '%s' at index %d" %
+                    (lexdata[lexpos], lexpos), lexdata[
+                        lexpos:])
 
         self.lexpos = lexpos + 1
         if self.lexdata is None:
-             raise RuntimeError, "No input string given with input()"
+            raise RuntimeError("No input string given with input()")
         return None
-        
+
 # -----------------------------------------------------------------------------
 # _validate_file()
 #
@@ -361,10 +426,12 @@ class Lexer:
 # match on each line in the filename.
 # -----------------------------------------------------------------------------
 
+
 def _validate_file(filename):
     import os.path
-    base,ext = os.path.splitext(filename)
-    if ext != '.py': return 1        # No idea what the file is. Return OK
+    base, ext = os.path.splitext(filename)
+    if ext != '.py':
+        return 1        # No idea what the file is. Return OK
 
     try:
         f = open(filename)
@@ -375,7 +442,7 @@ def _validate_file(filename):
 
     fre = re.compile(r'\s*def\s+(t_[a-zA-Z_0-9]*)\(')
     sre = re.compile(r'\s*(t_[a-zA-Z_0-9]*)\s*=')
-    counthash = { }
+    counthash = {}
     linen = 1
     noerror = 1
     for l in lines:
@@ -388,7 +455,7 @@ def _validate_file(filename):
             if not prev:
                 counthash[name] = linen
             else:
-                print "%s:%d: Rule %s redefined. Previously defined on line %d" % (filename,linen,name,prev)
+                print("%s:%d: Rule %s redefined. Previously defined on line %d" % (filename, linen, name, prev))
                 noerror = 0
         linen += 1
     return noerror
@@ -400,13 +467,14 @@ def _validate_file(filename):
 # suitable for output to a table file
 # -----------------------------------------------------------------------------
 
+
 def _funcs_to_names(funclist):
     result = []
     for f in funclist:
-         if f and f[0]:
-             result.append((f[0].__name__,f[1]))
-         else:
-             result.append(f)
+        if f and f[0]:
+            result.append((f[0].__name__, f[1]))
+        else:
+            result.append(f)
     return result
 
 # -----------------------------------------------------------------------------
@@ -416,14 +484,15 @@ def _funcs_to_names(funclist):
 # functions.
 # -----------------------------------------------------------------------------
 
-def _names_to_funcs(namelist,fdict):
-     result = []
-     for n in namelist:
-          if n and n[0]:
-              result.append((fdict[n[0]],n[1]))
-          else:
-              result.append(n)
-     return result
+
+def _names_to_funcs(namelist, fdict):
+    result = []
+    for n in namelist:
+        if n and n[0]:
+            result.append((fdict[n[0]], n[1]))
+        else:
+            result.append(n)
+    return result
 
 # -----------------------------------------------------------------------------
 # _form_master_re()
@@ -433,34 +502,37 @@ def _names_to_funcs(namelist,fdict):
 # module, it may be necessary to break the master regex into separate expressions.
 # -----------------------------------------------------------------------------
 
-def _form_master_re(relist,reflags,ldict):
-    if not relist: return []
+
+def _form_master_re(relist, reflags, ldict):
+    if not relist:
+        return []
     regex = "|".join(relist)
     try:
-        lexre = re.compile(regex,re.VERBOSE | reflags)
+        lexre = re.compile(regex, re.VERBOSE | reflags)
 
         # Build the index to function map for the matching engine
-        lexindexfunc = [ None ] * (max(lexre.groupindex.values())+1)
-        for f,i in lexre.groupindex.items():
-            handle = ldict.get(f,None)
+        lexindexfunc = [None] * (max(lexre.groupindex.values()) + 1)
+        for f, i in lexre.groupindex.items():
+            handle = ldict.get(f, None)
             if type(handle) in (types.FunctionType, types.MethodType):
-                lexindexfunc[i] = (handle,handle.__name__[2:])
+                lexindexfunc[i] = (handle, handle.__name__[2:])
             elif handle is not None:
                 # If rule was specified as a string, we build an anonymous
                 # callback function to carry out the action
                 if f.find("ignore_") > 0:
-                    lexindexfunc[i] = (None,None)
-                    print "IGNORE", f
+                    lexindexfunc[i] = (None, None)
+                    print("IGNORE", f)
                 else:
                     lexindexfunc[i] = (None, f[2:])
-         
-        return [(lexre,lexindexfunc)],[regex]
+
+        return [(lexre, lexindexfunc)], [regex]
     except Exception as e:
-        m = int(len(relist)/2)
-        if m == 0: m = 1
-        llist, lre = _form_master_re(relist[:m],reflags,ldict)
-        rlist, rre = _form_master_re(relist[m:],reflags,ldict)
-        return llist+rlist, lre+rre
+        m = int(len(relist) / 2)
+        if m == 0:
+            m = 1
+        llist, lre = _form_master_re(relist[:m], reflags, ldict)
+        rlist, rre = _form_master_re(relist[m:], reflags, ldict)
+        return llist + rlist, lre + rre
 
 # -----------------------------------------------------------------------------
 # def _statetoken(s,names)
@@ -471,190 +543,202 @@ def _form_master_re(relist,reflags,ldict):
 # calling this with s = "t_foo_bar_SPAM" might return (('foo','bar'),'SPAM')
 # -----------------------------------------------------------------------------
 
-def _statetoken(s,names):
+
+def _statetoken(s, names):
     nonstate = 1
     parts = s.split("_")
-    for i in range(1,len(parts)):
-        if not names.has_key(parts[i]) and parts[i] != 'ANY': break
+    for i in range(1, len(parts)):
+        if parts[i] not in names and parts[i] != 'ANY':
+            break
     if i > 1:
-       states = tuple(parts[1:i])
+        states = tuple(parts[1:i])
     else:
-       states = ('INITIAL',)
+        states = ('INITIAL',)
 
     if 'ANY' in states:
-       states = tuple(names.keys())
-      
+        states = tuple(names.keys())
+
     tokenname = "_".join(parts[i:])
-    return (states,tokenname)
+    return (states, tokenname)
 
 # -----------------------------------------------------------------------------
 # lex(module)
 #
 # Build all of the regular expression rules from definitions in the supplied module
 # -----------------------------------------------------------------------------
-# cls added for pyglet/tools/wrapper/cparser.py by Alex Holkner on 22/Jan/2007 
+# cls added for pyglet/tools/wrapper/cparser.py by Alex Holkner on 22/Jan/2007
 # <tm> 25 June 2008 added 'outputdir'
-def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,nowarn=0,outputdir='',cls=Lexer):
+
+
+def lex(module=None, object=None, debug=0, optimize=0,
+        lextab="lextab", reflags=0, nowarn=0, outputdir='', cls=Lexer):
     global lexer
     ldict = None
-    stateinfo  = { 'INITIAL' : 'inclusive'}
+    stateinfo = {'INITIAL': 'inclusive'}
     error = 0
-    files = { }
+    files = {}
     lexobj = cls()
     lexobj.lexdebug = debug
     lexobj.lexoptimize = optimize
-    global token,input
+    global token, input
+
+    if nowarn:
+        warn = 0
+    else:
+        warn = 1
 
-    if nowarn: warn = 0
-    else: warn = 1
-    
-    if object: module = object
+    if object:
+        module = object
 
     if module:
         # User supplied a module object.
         if isinstance(module, types.ModuleType):
             ldict = module.__dict__
         elif isinstance(module, _INSTANCETYPE):
-            _items = [(k,getattr(module,k)) for k in dir(module)]
-            ldict = { }
-            for (i,v) in _items:
+            _items = [(k, getattr(module, k)) for k in dir(module)]
+            ldict = {}
+            for (i, v) in _items:
                 ldict[i] = v
         else:
-            raise ValueError,"Expected a module or instance"
+            raise ValueError("Expected a module or instance")
         lexobj.lexmodule = module
-        
+
     else:
         # No module given.  We might be able to get information from the caller.
         try:
             raise RuntimeError
         except RuntimeError:
-            e,b,t = sys.exc_info()
+            e, b, t = sys.exc_info()
             f = t.tb_frame
             f = f.f_back           # Walk out to our calling function
             ldict = f.f_globals    # Grab its globals dictionary
 
     if optimize and lextab:
         try:
-            lexobj.readtab(lextab,ldict)
+            lexobj.readtab(lextab, ldict)
             token = lexobj.token
             input = lexobj.input
             lexer = lexobj
             return lexobj
-        
+
         except ImportError:
             pass
-        
+
     # Get the tokens, states, and literals variables (if any)
-    if (module and isinstance(module,_INSTANCETYPE)):
-        tokens   = getattr(module,"tokens",None)
-        states   = getattr(module,"states",None)
-        literals = getattr(module,"literals","")
+    if (module and isinstance(module, _INSTANCETYPE)):
+        tokens = getattr(module, "tokens", None)
+        states = getattr(module, "states", None)
+        literals = getattr(module, "literals", "")
     else:
-        tokens   = ldict.get("tokens",None)
-        states   = ldict.get("states",None)
-        literals = ldict.get("literals","")
-        
+        tokens = ldict.get("tokens", None)
+        states = ldict.get("states", None)
+        literals = ldict.get("literals", "")
+
     if not tokens:
-        raise SyntaxError,"lex: module does not define 'tokens'"
-    if not (isinstance(tokens,types.ListType) or isinstance(tokens,types.TupleType)):
-        raise SyntaxError,"lex: tokens must be a list or tuple."
+        raise SyntaxError("lex: module does not define 'tokens'")
+    if not (isinstance(tokens, list) or isinstance(tokens, tuple)):
+        raise SyntaxError("lex: tokens must be a list or tuple.")
 
     # Build a dictionary of valid token names
-    lexobj.lextokens = { }
+    lexobj.lextokens = {}
     if not optimize:
         for n in tokens:
             if not _is_identifier.match(n):
-                print "lex: Bad token name '%s'" % n
+                print("lex: Bad token name '%s'" % n)
                 error = 1
-            if warn and lexobj.lextokens.has_key(n):
-                print "lex: Warning. Token '%s' multiply defined." % n
+            if warn and n in lexobj.lextokens:
+                print("lex: Warning. Token '%s' multiply defined." % n)
             lexobj.lextokens[n] = None
     else:
-        for n in tokens: lexobj.lextokens[n] = None
+        for n in tokens:
+            lexobj.lextokens[n] = None
 
     if debug:
-        print "lex: tokens = '%s'" % lexobj.lextokens.keys()
+        print("lex: tokens = '%s'" % list(lexobj.lextokens.keys()))
 
     try:
-         for c in literals:
-               if not (isinstance(c,types.StringType) or isinstance(c,types.UnicodeType)) or len(c) > 1:
-                    print "lex: Invalid literal %s. Must be a single character" % repr(c)
-                    error = 1
-                    continue
+        for c in literals:
+            if not (isinstance(c, bytes) or isinstance(
+                    c, str)) or len(c) > 1:
+                print("lex: Invalid literal %s. Must be a single character" % repr(c))
+                error = 1
+                continue
 
     except TypeError:
-         print "lex: Invalid literals specification. literals must be a sequence of characters."
-         error = 1
+        print("lex: Invalid literals specification. literals must be a sequence of characters.")
+        error = 1
 
     lexobj.lexliterals = literals
 
     # Build statemap
     if states:
-         if not (isinstance(states,types.TupleType) or isinstance(states,types.ListType)):
-              print "lex: states must be defined as a tuple or list."
-              error = 1
-         else:
-              for s in states:
-                    if not isinstance(s,types.TupleType) or len(s) != 2:
-                           print "lex: invalid state specifier %s. Must be a tuple (statename,'exclusive|inclusive')" % repr(s)
-                           error = 1
-                           continue
-                    name, statetype = s
-                    if not isinstance(name,types.StringType):
-                           print "lex: state name %s must be a string" % repr(name)
-                           error = 1
-                           continue
-                    if not (statetype == 'inclusive' or statetype == 'exclusive'):
-                           print "lex: state type for state %s must be 'inclusive' or 'exclusive'" % name
-                           error = 1
-                           continue
-                    if stateinfo.has_key(name):
-                           print "lex: state '%s' already defined." % name
-                           error = 1
-                           continue
-                    stateinfo[name] = statetype
+        if not (isinstance(states, tuple) or isinstance(states, list)):
+            print("lex: states must be defined as a tuple or list.")
+            error = 1
+        else:
+            for s in states:
+                if not isinstance(s, tuple) or len(s) != 2:
+                    print("lex: invalid state specifier %s. Must be a tuple (statename,'exclusive|inclusive')" % repr(s))
+                    error = 1
+                    continue
+                name, statetype = s
+                if not isinstance(name, bytes):
+                    print("lex: state name %s must be a string" % repr(name))
+                    error = 1
+                    continue
+                if not (statetype == 'inclusive' or statetype == 'exclusive'):
+                    print("lex: state type for state %s must be 'inclusive' or 'exclusive'" % name)
+                    error = 1
+                    continue
+                if name in stateinfo:
+                    print("lex: state '%s' already defined." % name)
+                    error = 1
+                    continue
+                stateinfo[name] = statetype
 
     # Get a list of symbols with the t_ or s_ prefix
-    tsymbols = [f for f in ldict.keys() if f[:2] == 't_' ]
+    tsymbols = [f for f in ldict.keys() if f[:2] == 't_']
 
     # Now build up a list of functions and a list of strings
 
-    funcsym =  { }        # Symbols defined as functions
-    strsym =   { }        # Symbols defined as strings
-    toknames = { }        # Mapping of symbols to token names
+    funcsym = {}        # Symbols defined as functions
+    strsym = {}        # Symbols defined as strings
+    toknames = {}        # Mapping of symbols to token names
 
     for s in stateinfo.keys():
-         funcsym[s] = []
-         strsym[s] = []
+        funcsym[s] = []
+        strsym[s] = []
 
-    ignore   = { }        # Ignore strings by state
-    errorf   = { }        # Error functions by state
+    ignore = {}        # Ignore strings by state
+    errorf = {}        # Error functions by state
 
     if len(tsymbols) == 0:
-        raise SyntaxError,"lex: no rules of the form t_rulename are defined."
+        raise SyntaxError("lex: no rules of the form t_rulename are defined.")
 
     for f in tsymbols:
         t = ldict[f]
-        states, tokname = _statetoken(f,stateinfo)
+        states, tokname = _statetoken(f, stateinfo)
         toknames[f] = tokname
 
-        if callable(t):
-            for s in states: funcsym[s].append((f,t))
-        elif (isinstance(t, types.StringType) or isinstance(t,types.UnicodeType)):
-            for s in states: strsym[s].append((f,t))
+        if isinstance(t, collections.Callable):
+            for s in states:
+                funcsym[s].append((f, t))
+        elif (isinstance(t, bytes) or isinstance(t, str)):
+            for s in states:
+                strsym[s].append((f, t))
         else:
-            print "lex: %s not defined as a function or string" % f
+            print("lex: %s not defined as a function or string" % f)
             error = 1
 
     # Sort the functions by line number
     for f in funcsym.values():
-        f.sort(lambda x,y: cmp(x[1].func_code.co_firstlineno,y[1].func_code.co_firstlineno))
+        f.sort(lambda x, y: cmp(get_func_code(x[1]).co_firstlineno, get_func_code(y[1]).co_firstlineno))
 
     # Sort the strings by regular expression length
     for s in strsym.values():
-        s.sort(lambda x,y: (len(x[1]) < len(y[1])) - (len(x[1]) > len(y[1])))
+        s.sort(lambda x, y: (len(x[1]) < len(y[1])) - (len(x[1]) > len(y[1])))
 
-    regexs = { }
+    regexs = {}
 
     # Build the master regular expressions
     for state in stateinfo.keys():
@@ -662,34 +746,34 @@ def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,now
 
         # Add rules defined by functions first
         for fname, f in funcsym[state]:
-            line = f.func_code.co_firstlineno
-            file = f.func_code.co_filename
+            line = get_func_code(f).co_firstlineno
+            file = get_func_code(f).co_filename
             files[file] = None
             tokname = toknames[fname]
 
             ismethod = isinstance(f, types.MethodType)
 
             if not optimize:
-                nargs = f.func_code.co_argcount
+                nargs = get_func_code(f).co_argcount
                 if ismethod:
                     reqargs = 2
                 else:
                     reqargs = 1
                 if nargs > reqargs:
-                    print "%s:%d: Rule '%s' has too many arguments." % (file,line,f.__name__)
+                    print("%s:%d: Rule '%s' has too many arguments." % (file, line, f.__name__))
                     error = 1
                     continue
 
                 if nargs < reqargs:
-                    print "%s:%d: Rule '%s' requires an argument." % (file,line,f.__name__)
+                    print("%s:%d: Rule '%s' requires an argument." % (file, line, f.__name__))
                     error = 1
                     continue
 
                 if tokname == 'ignore':
-                    print "%s:%d: Rule '%s' must be defined as a string." % (file,line,f.__name__)
+                    print("%s:%d: Rule '%s' must be defined as a string." % (file, line, f.__name__))
                     error = 1
                     continue
-        
+
             if tokname == 'error':
                 errorf[state] = f
                 continue
@@ -697,78 +781,77 @@ def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,now
             if f.__doc__:
                 if not optimize:
                     try:
-                        c = re.compile("(?P<%s>%s)" % (f.__name__,f.__doc__), re.VERBOSE | reflags)
+                        c = re.compile("(?P<%s>%s)" % (f.__name__, f.__doc__), re.VERBOSE | reflags)
                         if c.match(""):
-                             print "%s:%d: Regular expression for rule '%s' matches empty string." % (file,line,f.__name__)
-                             error = 1
-                             continue
+                            print("%s:%d: Regular expression for rule '%s' matches empty string." % (file, line, f.__name__))
+                            error = 1
+                            continue
                     except re.error as e:
-                        print "%s:%d: Invalid regular expression for rule '%s'. %s" % (file,line,f.__name__,e)
+                        print("%s:%d: Invalid regular expression for rule '%s'. %s" % (file, line, f.__name__, e))
                         if '#' in f.__doc__:
-                             print "%s:%d. Make sure '#' in rule '%s' is escaped with '\\#'." % (file,line, f.__name__)                 
+                            print("%s:%d. Make sure '#' in rule '%s' is escaped with '\\#'." % (file, line, f.__name__))
                         error = 1
                         continue
 
                     if debug:
-                        print "lex: Adding rule %s -> '%s' (state '%s')" % (f.__name__,f.__doc__, state)
+                        print("lex: Adding rule %s -> '%s' (state '%s')" % (f.__name__, f.__doc__, state))
 
                 # Okay. The regular expression seemed okay.  Let's append it to the master regular
                 # expression we're building
-  
-                regex_list.append("(?P<%s>%s)" % (f.__name__,f.__doc__))
+
+                regex_list.append("(?P<%s>%s)" % (f.__name__, f.__doc__))
             else:
-                print "%s:%d: No regular expression defined for rule '%s'" % (file,line,f.__name__)
+                print("%s:%d: No regular expression defined for rule '%s'" % (file, line, f.__name__))
 
         # Now add all of the simple rules
-        for name,r in strsym[state]:
-            tokname = toknames[name]       
+        for name, r in strsym[state]:
+            tokname = toknames[name]
 
             if tokname == 'ignore':
-                 ignore[state] = r
-                 continue
+                ignore[state] = r
+                continue
 
             if not optimize:
                 if tokname == 'error':
-                    raise SyntaxError,"lex: Rule '%s' must be defined as a function" % name
+                    raise SyntaxError("lex: Rule '%s' must be defined as a function" % name)
                     error = 1
                     continue
-        
-                if not lexobj.lextokens.has_key(tokname) and tokname.find("ignore_") < 0:
-                    print "lex: Rule '%s' defined for an unspecified token %s." % (name,tokname)
+
+                if tokname not in lexobj.lextokens and tokname.find("ignore_") < 0:
+                    print("lex: Rule '%s' defined for an unspecified token %s." % (name, tokname))
                     error = 1
                     continue
                 try:
-                    c = re.compile("(?P<%s>%s)" % (name,r),re.VERBOSE | reflags)
+                    c = re.compile("(?P<%s>%s)" % (name, r), re.VERBOSE | reflags)
                     if (c.match("")):
-                         print "lex: Regular expression for rule '%s' matches empty string." % name
-                         error = 1
-                         continue
+                        print("lex: Regular expression for rule '%s' matches empty string." % name)
+                        error = 1
+                        continue
                 except re.error as e:
-                    print "lex: Invalid regular expression for rule '%s'. %s" % (name,e)
+                    print("lex: Invalid regular expression for rule '%s'. %s" % (name, e))
                     if '#' in r:
-                         print "lex: Make sure '#' in rule '%s' is escaped with '\\#'." % name
+                        print("lex: Make sure '#' in rule '%s' is escaped with '\\#'." % name)
 
                     error = 1
                     continue
                 if debug:
-                    print "lex: Adding rule %s -> '%s' (state '%s')" % (name,r,state)
-                
-            regex_list.append("(?P<%s>%s)" % (name,r))
+                    print("lex: Adding rule %s -> '%s' (state '%s')" % (name, r, state))
+
+            regex_list.append("(?P<%s>%s)" % (name, r))
 
         if not regex_list:
-             print "lex: No rules defined for state '%s'" % state
-             error = 1
+            print("lex: No rules defined for state '%s'" % state)
+            error = 1
 
         regexs[state] = regex_list
 
-
     if not optimize:
-        for f in files.keys(): 
-           if not _validate_file(f):
+        for f in files.keys():
+            if not _validate_file(f):
                 error = 1
 
     if error:
-        raise SyntaxError,"lex: Unable to build lexer."
+        raise SyntaxError("lex: Unable to build lexer.")
 
     # From this point forward, we're reasonably confident that we can build the lexer.
     # No more errors will be generated, but there might be some warning messages.
@@ -776,18 +859,18 @@ def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,now
     # Build the master regular expressions
 
     for state in regexs.keys():
-        lexre, re_text = _form_master_re(regexs[state],reflags,ldict)
+        lexre, re_text = _form_master_re(regexs[state], reflags, ldict)
         lexobj.lexstatere[state] = lexre
         lexobj.lexstateretext[state] = re_text
         if debug:
             for i in range(len(re_text)):
-                 print "lex: state '%s'. regex[%d] = '%s'" % (state, i, re_text[i])
+                print("lex: state '%s'. regex[%d] = '%s'" % (state, i, re_text[i]))
 
     # For inclusive states, we need to add the INITIAL state
-    for state,type in stateinfo.items():
+    for state, type in stateinfo.items():
         if state != "INITIAL" and type == 'inclusive':
-             lexobj.lexstatere[state].extend(lexobj.lexstatere['INITIAL'])
-             lexobj.lexstateretext[state].extend(lexobj.lexstateretext['INITIAL'])
+            lexobj.lexstatere[state].extend(lexobj.lexstatere['INITIAL'])
+            lexobj.lexstateretext[state].extend(lexobj.lexstateretext['INITIAL'])
 
     lexobj.lexstateinfo = stateinfo
     lexobj.lexre = lexobj.lexstatere["INITIAL"]
@@ -795,36 +878,35 @@ def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,now
 
     # Set up ignore variables
     lexobj.lexstateignore = ignore
-    lexobj.lexignore = lexobj.lexstateignore.get("INITIAL","")
+    lexobj.lexignore = lexobj.lexstateignore.get("INITIAL", "")
 
     # Set up error functions
     lexobj.lexstateerrorf = errorf
-    lexobj.lexerrorf = errorf.get("INITIAL",None)
+    lexobj.lexerrorf = errorf.get("INITIAL", None)
     if warn and not lexobj.lexerrorf:
-        print "lex: Warning. no t_error rule is defined."
+        print("lex: Warning. no t_error rule is defined.")
 
     # Check state information for ignore and error rules
-    for s,stype in stateinfo.items():
+    for s, stype in stateinfo.items():
         if stype == 'exclusive':
-              if warn and not errorf.has_key(s):
-                   print "lex: Warning. no error rule is defined for exclusive state '%s'" % s
-              if warn and not ignore.has_key(s) and lexobj.lexignore:
-                   print "lex: Warning. no ignore rule is defined for exclusive state '%s'" % s
+            if warn and s not in errorf:
+                print("lex: Warning. no error rule is defined for exclusive state '%s'" % s)
+            if warn and s not in ignore and lexobj.lexignore:
+                print("lex: Warning. no ignore rule is defined for exclusive state '%s'" % s)
         elif stype == 'inclusive':
-              if not errorf.has_key(s):
-                   errorf[s] = errorf.get("INITIAL",None)
-              if not ignore.has_key(s):
-                   ignore[s] = ignore.get("INITIAL","")
-   
+            if s not in errorf:
+                errorf[s] = errorf.get("INITIAL", None)
+            if s not in ignore:
+                ignore[s] = ignore.get("INITIAL", "")
 
     # Create global versions of the token() and input() functions
     token = lexobj.token
     input = lexobj.input
     lexer = lexobj
 
-    # If in optimize mode, we write the lextab   
+    # If in optimize mode, we write the lextab
     if lextab and optimize:
-        lexobj.writetab(lextab,outputdir)
+        lexobj.writetab(lextab, outputdir)
 
     return lexobj
 
@@ -834,7 +916,8 @@ def lex(module=None,object=None,debug=0,optimize=0,lextab="lextab",reflags=0,now
 # This runs the lexer as a main program
 # -----------------------------------------------------------------------------
 
-def runmain(lexer=None,data=None):
+
+def runmain(lexer=None, data=None):
     if not data:
         try:
             filename = sys.argv[1]
@@ -842,7 +925,7 @@ def runmain(lexer=None,data=None):
             data = f.read()
             f.close()
         except IndexError:
-            print "Reading from standard input (type EOF to end):"
+            print("Reading from standard input (type EOF to end):")
             data = sys.stdin.read()
 
     if lexer:
@@ -854,12 +937,13 @@ def runmain(lexer=None,data=None):
         _token = lexer.token
     else:
         _token = token
-        
-    while 1:
+
+    while True:
         tok = _token()
-        if not tok: break
-        print "(%s,%r,%d,%d)" % (tok.type, tok.value, tok.lineno,tok.lexpos)
-        
+        if not tok:
+            break
+        print("(%s,%r,%d,%d)" % (tok.type, tok.value, tok.lineno, tok.lexpos))
+
 
 # -----------------------------------------------------------------------------
 # @TOKEN(regex)
@@ -876,4 +960,3 @@ def TOKEN(r):
 
 # Alternative spelling of the TOKEN decorator
 Token = TOKEN
-
diff --git a/lib/python/ctypes/ctypesgencore/parser/lextab.py b/lib/python/ctypes/ctypesgencore/parser/lextab.py
index 250657f..71751a9 100644
--- a/lib/python/ctypes/ctypesgencore/parser/lextab.py
+++ b/lib/python/ctypes/ctypesgencore/parser/lextab.py
@@ -1,8 +1,59 @@
 # lextab.py. This file automatically created by PLY (version 2.2). Don't edit!
-_lextokens    = {'RIGHT_OP': None, 'RIGHT_ASSIGN': None, 'DEC_OP': None, 'PP_MACRO_PARAM': None, 'DIV_ASSIGN': None, 'PP_DEFINE': None, 'PP_END_DEFINE': None, 'PP_DEFINE_MACRO_NAME': None, 'HEADER_NAME': None, 'NEWLINE': None, 'CHARACTER_CONSTANT': None, 'PP_STRINGIFY': None, 'AND_ASSIGN': None, 'PTR_OP': None, 'ELLIPSIS': None, 'IDENTIFIER': None, 'ADD_ASSIGN': None, 'PERIOD': None, 'AND_OP': None, 'OTHER': None, 'LPAREN': None, 'LEFT_OP': None, 'LE_OP': None, 'OR_OP': None, 'SUB_ASSIGN [...]
-_lexreflags   = 0
-_lexliterals  = ''
+_lextokens = {
+    'RIGHT_OP': None,
+    'RIGHT_ASSIGN': None,
+    'DEC_OP': None,
+    'PP_MACRO_PARAM': None,
+    'DIV_ASSIGN': None,
+    'PP_DEFINE': None,
+    'PP_END_DEFINE': None,
+    'PP_DEFINE_MACRO_NAME': None,
+    'HEADER_NAME': None,
+    'NEWLINE': None,
+    'CHARACTER_CONSTANT': None,
+    'PP_STRINGIFY': None,
+    'AND_ASSIGN': None,
+    'PTR_OP': None,
+    'ELLIPSIS': None,
+    'IDENTIFIER': None,
+    'ADD_ASSIGN': None,
+    'PERIOD': None,
+    'AND_OP': None,
+    'OTHER': None,
+    'LPAREN': None,
+    'LEFT_OP': None,
+    'LE_OP': None,
+    'OR_OP': None,
+    'SUB_ASSIGN': None,
+    'MOD_ASSIGN': None,
+    'STRING_LITERAL': None,
+    'PP_IDENTIFIER_PASTE': None,
+    'PP_NUMBER': None,
+    'PP_DEFINE_NAME': None,
+    'XOR_ASSIGN': None,
+    'OR_ASSIGN': None,
+    'GE_OP': None,
+    'MUL_ASSIGN': None,
+    'LEFT_ASSIGN': None,
+    'INC_OP': None,
+    'NE_OP': None,
+    'EQ_OP': None}
+_lexreflags = 0
+_lexliterals = ''
 _lexstateinfo = {'INITIAL': 'inclusive', 'DEFINE': 'exclusive'}
-_lexstatere   = {'INITIAL': [('(?P<t_ANY_directive>\\#\\s+(\\d+)\\s+"([^"]+)"[ \\d]*\\n)|(?P<t_ANY_punctuator>(\\.\\.\\.|\\|\\||\\+\\+|\\*=|\\^=|<<=|>>=|\\|=|\\+=|>=|>>|<<|<=|<:|%=|:>|<%|!=|\\)|\\+|\\*|\\.|\\?|==|&=|&&|\\[|\\^|--|/=|%>|-=|->|\\||!|%|&|-|,|/|;|:|=|>|]|<|{|}|~))', [None, ('t_ANY_directive', 'ANY_directive'), None, None, ('t_ANY_punctuator', 'ANY_punctuator')]), ('(?P<t_INITIAL_identifier>[a-zA-Z_]([a-zA-Z_]|[0-9])*)', [None, ('t_INITIAL_identifier', 'INITIAL_identifier')]) [...]
+_lexstatere = {
+    'INITIAL': [
+        ('(?P<t_ANY_directive>\\#\\s+(\\d+)\\s+"([^"]+)"[ \\d]*\\n)|(?P<t_ANY_punctuator>(\\.\\.\\.|\\|\\||\\+\\+|\\*=|\\^=|<<=|>>=|\\|=|\\+=|>=|>>|<<|<=|<:|%=|:>|<%|!=|\\)|\\+|\\*|\\.|\\?|==|&=|&&|\\[|\\^|--|/=|%>|-=|->|\\||!|%|&|-|,|/|;|:|=|>|]|<|{|}|~))', [
+            None, ('t_ANY_directive', 'ANY_directive'), None, None, ('t_ANY_punctuator', 'ANY_punctuator')]), ('(?P<t_INITIAL_identifier>[a-zA-Z_]([a-zA-Z_]|[0-9])*)', [
+                None, ('t_INITIAL_identifier', 'INITIAL_identifier')]), ('(?P<t_ANY_float>(?P<p1>[0-9]+)?(?P<dp>[.]?)(?P<p2>(?(p1)[0-9]*|[0-9]+))(?P<exp>(?:[Ee][+-]?[0-9]+)?)(?P<suf>[FflL]?)(?!\\w))', [
+                    None, ('t_ANY_float', 'ANY_float'), None, None, None, None, None]), ('(?P<t_ANY_int>(?P<p1>(?:0x[a-fA-F0-9]+)|(?:[0-9]+))(?P<suf>[uUlL]*))', [
+                        None, ('t_ANY_int', 'ANY_int'), None, None]), ('(?P<t_ANY_character_constant>L?\'(\\\\.|[^\\\\\'])+\')|(?P<t_ANY_string_literal>L?"(\\\\.|[^\\\\"])*")|(?P<t_ANY_lparen>\\()|(?P<t_INITIAL_newline>\\n)|(?P<t_INITIAL_pp_define>\\#define)', [
+                            None, ('t_ANY_character_constant', 'ANY_character_constant'), None, ('t_ANY_string_literal', 'ANY_string_literal'), None, ('t_ANY_lparen', 'ANY_lparen'), ('t_INITIAL_newline', 'INITIAL_newline'), ('t_INITIAL_pp_define', 'INITIAL_pp_define')])], 'DEFINE': [
+                                ('(?P<t_ANY_directive>\\#\\s+(\\d+)\\s+"([^"]+)"[ \\d]*\\n)|(?P<t_ANY_punctuator>(\\.\\.\\.|\\|\\||\\+\\+|\\*=|\\^=|<<=|>>=|\\|=|\\+=|>=|>>|<<|<=|<:|%=|:>|<%|!=|\\)|\\+|\\*|\\.|\\?|==|&=|&&|\\[|\\^|--|/=|%>|-=|->|\\||!|%|&|-|,|/|;|:|=|>|]|<|{|}|~))', [
+                                    None, ('t_ANY_directive', 'ANY_directive'), None, None, ('t_ANY_punctuator', 'ANY_punctuator')]), ('(?P<t_DEFINE_identifier>[a-zA-Z_]([a-zA-Z_]|[0-9])*)', [
+                                        None, ('t_DEFINE_identifier', 'DEFINE_identifier')]), ('(?P<t_ANY_float>(?P<p1>[0-9]+)?(?P<dp>[.]?)(?P<p2>(?(p1)[0-9]*|[0-9]+))(?P<exp>(?:[Ee][+-]?[0-9]+)?)(?P<suf>[FflL]?)(?!\\w))', [
+                                            None, ('t_ANY_float', 'ANY_float'), None, None, None, None, None]), ('(?P<t_ANY_int>(?P<p1>(?:0x[a-fA-F0-9]+)|(?:[0-9]+))(?P<suf>[uUlL]*))', [
+                                                None, ('t_ANY_int', 'ANY_int'), None, None]), ('(?P<t_ANY_character_constant>L?\'(\\\\.|[^\\\\\'])+\')|(?P<t_ANY_string_literal>L?"(\\\\.|[^\\\\"])*")|(?P<t_ANY_lparen>\\()|(?P<t_DEFINE_newline>\\n)|(?P<t_DEFINE_pp_param_op>(\\#\\#)|(\\#))', [
+                                                    None, ('t_ANY_character_constant', 'ANY_character_constant'), None, ('t_ANY_string_literal', 'ANY_string_literal'), None, ('t_ANY_lparen', 'ANY_lparen'), ('t_DEFINE_newline', 'DEFINE_newline'), ('t_DEFINE_pp_param_op', 'DEFINE_pp_param_op')])]}
 _lexstateignore = {'INITIAL': ' \t\x0b\x0c\r', 'DEFINE': ' \t\x0b\x0c\r'}
 _lexstateerrorf = {'INITIAL': 't_INITIAL_error', 'DEFINE': 't_DEFINE_error'}
diff --git a/lib/python/ctypes/ctypesgencore/parser/parsetab.py b/lib/python/ctypes/ctypesgencore/parser/parsetab.py
index 36f595a..74744c3 100644
--- a/lib/python/ctypes/ctypesgencore/parser/parsetab.py
+++ b/lib/python/ctypes/ctypesgencore/parser/parsetab.py
@@ -1,12 +1,12 @@
 
-# /Users/tim/Desktop/ctypesgen/ctypesgencore/parser/parsetab.py
+# /home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/parsetab.py
 # This file is automatically generated. Do not edit.
 
 _lr_method = 'LALR'
 
-_lr_signature = 'Oz\xa0\xf9\xf3X\xd9Mf\x00\xfa"\xb3\xb7\xce,'
+_lr_signature = '\xf5\xb5\x15\x94n\xa6\xa1\xc6\n\xee\xd4t-/\xfcr'
 
-_lr_action_items = {'VOID':([387,15,238,332,22,3,37,359,137,64,170,286,58,51,230,353,12,2,39,73,20,60,47,54,25,65,168,56,242,81,0,13,27,72,116,278,4,133,277,231,221,9,280,279,34,186,130,169,358,227,18,123,327,1,360,117,17,36,165,205,30,8,52,196,35,356,339,140,269,235,23,283,31,167,134,260,287,87,5,6,10,32,38,66,28,163,59,49,237,26,67,172,],[-253,-2,-169,-155,-3,6,-132,-251,6,6,-141,6,-222,-104,-171,-135,-118,6,-121,-247,-167,6,6,6,-120,-138,6,-246,-219,6,-1,-133,6,6,-254,6,-163,-245,-243 [...]
+_lr_action_items = {'VOID':([387,15,238,332,22,3,37,359,137,64,170,286,58,51,230,353,12,2,39,73,20,60,47,54,25,65,168,56,242,81,0,13,27,72,116,278,4,133,277,231,221,9,280,279,34,186,130,169,358,227,18,123,327,1,360,117,17,36,165,205,30,8,52,196,35,356,339,140,269,235,23,283,31,167,134,260,287,87,5,6,10,32,38,66,28,163,59,49,237,26,67,172,],[-253,-2,-169,-155,-3,6,-132,-251,6,6,-141,6,-222,-104,-171,-135,-118,6,-121,-247,-167,6,6,6,-120,-138,6,-246,-219,6,-1,-133,6,6,-254,6,-163,-245,-243 [...]
 
 _lr_action = { }
 for _k, _v in _lr_action_items.items():
@@ -14,7 +14,7 @@ for _k, _v in _lr_action_items.items():
        _lr_action[(_x,_k)] = _y
 del _lr_action_items
 
-_lr_goto_items = {'expression_statement':([240,257,382,267,140,406,380,342,263,60,408,147,378,346,158,394,],[135,342,135,135,135,135,135,377,135,135,135,135,135,135,135,135,]),'storage_class_specifier':([140,27,28,327,167,221,60,54,59,64,2,3,1,237,231,],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,]),'declaration_list':([64,60,27,],[167,140,59,]),'type_qualifier':([60,72,87,28,169,47,27,327,221,59,54,278,7,81,43,2,237,140,168,64,231,286,172,167,3,66,186,1,137,],[3,87,87,3,87,87,3,3,3,3,3,87,44,87,68,3 [...]
+_lr_goto_items = {'expression_statement':([240,257,382,267,140,406,380,342,263,60,408,147,378,346,158,394,],[135,342,135,135,135,135,135,377,135,135,135,135,135,135,135,135,]),'storage_class_specifier':([140,27,28,327,167,221,60,54,59,64,2,3,1,237,231,],[2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,]),'declaration_list':([64,60,27,],[167,140,59,]),'type_qualifier':([60,72,87,28,169,47,27,327,221,59,54,278,7,81,43,2,237,140,168,64,231,286,172,167,3,66,186,1,137,],[3,87,87,3,87,87,3,3,3,3,3,87,44,87,68,3 [...]
 
 _lr_goto = { }
 for _k, _v in _lr_goto_items.items():
@@ -23,260 +23,260 @@ for _k, _v in _lr_goto_items.items():
 del _lr_goto_items
 _lr_productions = [
   ("S'",1,None,None,None),
-  ('translation_unit',0,'p_translation_unit','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',57),
-  ('translation_unit',2,'p_translation_unit','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',58),
-  ('translation_unit',2,'p_translation_unit','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',59),
-  ('identifier',1,'p_identifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',67),
-  ('identifier',3,'p_identifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',68),
-  ('identifier',3,'p_identifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',69),
-  ('identifier',3,'p_identifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',70),
-  ('identifier',3,'p_identifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',71),
-  ('constant',1,'p_constant','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',87),
-  ('constant',1,'p_constant','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',88),
-  ('string_literal',1,'p_string_literal','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',111),
-  ('multi_string_literal',1,'p_multi_string_literal','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',115),
-  ('multi_string_literal',1,'p_multi_string_literal','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',116),
-  ('multi_string_literal',2,'p_multi_string_literal','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',117),
-  ('multi_string_literal',2,'p_multi_string_literal','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',118),
-  ('macro_param',1,'p_macro_param','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',127),
-  ('macro_param',2,'p_macro_param','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',128),
-  ('primary_expression',1,'p_primary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',136),
-  ('primary_expression',1,'p_primary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',137),
-  ('primary_expression',1,'p_primary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',138),
-  ('primary_expression',3,'p_primary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',139),
-  ('postfix_expression',1,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',147),
-  ('postfix_expression',4,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',148),
-  ('postfix_expression',3,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',149),
-  ('postfix_expression',4,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',150),
-  ('postfix_expression',3,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',151),
-  ('postfix_expression',3,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',152),
-  ('postfix_expression',2,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',153),
-  ('postfix_expression',2,'p_postfix_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',154),
-  ('argument_expression_list',1,'p_argument_expression_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',187),
-  ('argument_expression_list',3,'p_argument_expression_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',188),
-  ('asm_expression',5,'p_asm_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',197),
-  ('asm_expression',7,'p_asm_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',198),
-  ('asm_expression',9,'p_asm_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',199),
-  ('asm_expression',11,'p_asm_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',200),
-  ('str_opt_expr_pair_list',0,'p_str_opt_expr_pair_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',212),
-  ('str_opt_expr_pair_list',1,'p_str_opt_expr_pair_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',213),
-  ('str_opt_expr_pair_list',3,'p_str_opt_expr_pair_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',214),
-  ('str_opt_expr_pair',1,'p_str_opt_expr_pair','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',218),
-  ('str_opt_expr_pair',4,'p_str_opt_expr_pair','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',219),
-  ('volatile_opt',0,'p_volatile_opt','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',223),
-  ('volatile_opt',1,'p_volatile_opt','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',224),
-  ('unary_expression',1,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',239),
-  ('unary_expression',2,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',240),
-  ('unary_expression',2,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',241),
-  ('unary_expression',2,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',242),
-  ('unary_expression',2,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',243),
-  ('unary_expression',4,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',244),
-  ('unary_expression',1,'p_unary_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',245),
-  ('unary_operator',1,'p_unary_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',262),
-  ('unary_operator',1,'p_unary_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',263),
-  ('unary_operator',1,'p_unary_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',264),
-  ('unary_operator',1,'p_unary_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',265),
-  ('unary_operator',1,'p_unary_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',266),
-  ('unary_operator',1,'p_unary_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',267),
-  ('cast_expression',1,'p_cast_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',272),
-  ('cast_expression',4,'p_cast_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',273),
-  ('multiplicative_expression',1,'p_multiplicative_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',287),
-  ('multiplicative_expression',3,'p_multiplicative_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',288),
-  ('multiplicative_expression',3,'p_multiplicative_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',289),
-  ('multiplicative_expression',3,'p_multiplicative_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',290),
-  ('additive_expression',1,'p_additive_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',305),
-  ('additive_expression',3,'p_additive_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',306),
-  ('additive_expression',3,'p_additive_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',307),
-  ('shift_expression',1,'p_shift_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',322),
-  ('shift_expression',3,'p_shift_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',323),
-  ('shift_expression',3,'p_shift_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',324),
-  ('relational_expression',1,'p_relational_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',341),
-  ('relational_expression',3,'p_relational_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',342),
-  ('relational_expression',3,'p_relational_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',343),
-  ('relational_expression',3,'p_relational_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',344),
-  ('relational_expression',3,'p_relational_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',345),
-  ('equality_expression',1,'p_equality_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',360),
-  ('equality_expression',3,'p_equality_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',361),
-  ('equality_expression',3,'p_equality_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',362),
-  ('and_expression',1,'p_and_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',372),
-  ('and_expression',3,'p_and_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',373),
-  ('exclusive_or_expression',1,'p_exclusive_or_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',382),
-  ('exclusive_or_expression',3,'p_exclusive_or_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',383),
-  ('inclusive_or_expression',1,'p_inclusive_or_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',392),
-  ('inclusive_or_expression',3,'p_inclusive_or_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',393),
-  ('logical_and_expression',1,'p_logical_and_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',402),
-  ('logical_and_expression',3,'p_logical_and_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',403),
-  ('logical_or_expression',1,'p_logical_or_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',412),
-  ('logical_or_expression',3,'p_logical_or_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',413),
-  ('conditional_expression',1,'p_conditional_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',422),
-  ('conditional_expression',5,'p_conditional_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',423),
-  ('assignment_expression',1,'p_assignment_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',444),
-  ('assignment_expression',3,'p_assignment_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',445),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',460),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',461),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',462),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',463),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',464),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',465),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',466),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',467),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',468),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',469),
-  ('assignment_operator',1,'p_assignment_operator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',470),
-  ('expression',1,'p_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',475),
-  ('expression',3,'p_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',476),
-  ('constant_expression',1,'p_constant_expression','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',482),
-  ('declaration',2,'p_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',487),
-  ('declaration_impl',1,'p_declaration_impl','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',494),
-  ('declaration_impl',2,'p_declaration_impl','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',495),
-  ('declaration_specifiers',1,'p_declaration_specifiers','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',519),
-  ('declaration_specifiers',2,'p_declaration_specifiers','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',520),
-  ('declaration_specifiers',1,'p_declaration_specifiers','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',521),
-  ('declaration_specifiers',2,'p_declaration_specifiers','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',522),
-  ('declaration_specifiers',1,'p_declaration_specifiers','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',523),
-  ('declaration_specifiers',2,'p_declaration_specifiers','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',524),
-  ('init_declarator_list',1,'p_init_declarator_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',532),
-  ('init_declarator_list',3,'p_init_declarator_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',533),
-  ('init_declarator',1,'p_init_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',541),
-  ('init_declarator',3,'p_init_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',542),
-  ('storage_class_specifier',1,'p_storage_class_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',549),
-  ('storage_class_specifier',1,'p_storage_class_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',550),
-  ('storage_class_specifier',1,'p_storage_class_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',551),
-  ('storage_class_specifier',1,'p_storage_class_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',552),
-  ('storage_class_specifier',1,'p_storage_class_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',553),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',558),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',559),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',560),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',561),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',562),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',563),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',564),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',565),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',566),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',567),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',568),
-  ('type_specifier',1,'p_type_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',569),
-  ('struct_or_union_specifier',5,'p_struct_or_union_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',578),
-  ('struct_or_union_specifier',5,'p_struct_or_union_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',579),
-  ('struct_or_union_specifier',4,'p_struct_or_union_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',580),
-  ('struct_or_union_specifier',2,'p_struct_or_union_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',581),
-  ('struct_or_union_specifier',2,'p_struct_or_union_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',582),
-  ('struct_or_union',1,'p_struct_or_union','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',598),
-  ('struct_or_union',1,'p_struct_or_union','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',599),
-  ('struct_declaration_list',1,'p_struct_declaration_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',604),
-  ('struct_declaration_list',2,'p_struct_declaration_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',605),
-  ('struct_declaration',3,'p_struct_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',613),
-  ('struct_declaration',2,'p_struct_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',614),
-  ('specifier_qualifier_list',2,'p_specifier_qualifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',628),
-  ('specifier_qualifier_list',1,'p_specifier_qualifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',629),
-  ('specifier_qualifier_list',2,'p_specifier_qualifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',630),
-  ('specifier_qualifier_list',1,'p_specifier_qualifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',631),
-  ('struct_declarator_list',1,'p_struct_declarator_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',640),
-  ('struct_declarator_list',3,'p_struct_declarator_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',641),
-  ('struct_declarator',1,'p_struct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',649),
-  ('struct_declarator',2,'p_struct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',650),
-  ('struct_declarator',3,'p_struct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',651),
-  ('enum_specifier',4,'p_enum_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',662),
-  ('enum_specifier',5,'p_enum_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',663),
-  ('enum_specifier',2,'p_enum_specifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',664),
-  ('enumerator_list',1,'p_enumerator_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',677),
-  ('enumerator_list',2,'p_enumerator_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',678),
-  ('enumerator_list_iso',1,'p_enumerator_list_iso','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',685),
-  ('enumerator_list_iso',3,'p_enumerator_list_iso','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',686),
-  ('enumerator',1,'p_enumerator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',694),
-  ('enumerator',3,'p_enumerator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',695),
-  ('type_qualifier',1,'p_type_qualifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',703),
-  ('type_qualifier',1,'p_type_qualifier','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',704),
-  ('declarator',2,'p_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',709),
-  ('declarator',1,'p_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',710),
-  ('direct_declarator',1,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',722),
-  ('direct_declarator',3,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',723),
-  ('direct_declarator',4,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',724),
-  ('direct_declarator',3,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',725),
-  ('direct_declarator',4,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',726),
-  ('direct_declarator',4,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',727),
-  ('direct_declarator',3,'p_direct_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',728),
-  ('pointer',1,'p_pointer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',757),
-  ('pointer',2,'p_pointer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',758),
-  ('pointer',2,'p_pointer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',759),
-  ('pointer',3,'p_pointer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',760),
-  ('type_qualifier_list',1,'p_type_qualifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',777),
-  ('type_qualifier_list',2,'p_type_qualifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',778),
-  ('parameter_type_list',1,'p_parameter_type_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',786),
-  ('parameter_type_list',3,'p_parameter_type_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',787),
-  ('parameter_list',1,'p_parameter_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',796),
-  ('parameter_list',3,'p_parameter_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',797),
-  ('parameter_declaration',2,'p_parameter_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',805),
-  ('parameter_declaration',2,'p_parameter_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',806),
-  ('parameter_declaration',1,'p_parameter_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',807),
-  ('identifier_list',1,'p_identifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',815),
-  ('identifier_list',3,'p_identifier_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',816),
-  ('type_name',1,'p_type_name','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',828),
-  ('type_name',2,'p_type_name','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',829),
-  ('abstract_declarator',1,'p_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',845),
-  ('abstract_declarator',1,'p_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',846),
-  ('abstract_declarator',2,'p_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',847),
-  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',866),
-  ('direct_abstract_declarator',2,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',867),
-  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',868),
-  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',869),
-  ('direct_abstract_declarator',4,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',870),
-  ('direct_abstract_declarator',2,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',871),
-  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',872),
-  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',873),
-  ('direct_abstract_declarator',4,'p_direct_abstract_declarator','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',874),
-  ('initializer',1,'p_initializer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',911),
-  ('initializer',3,'p_initializer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',912),
-  ('initializer',4,'p_initializer','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',913),
-  ('initializer_list',1,'p_initializer_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',917),
-  ('initializer_list',3,'p_initializer_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',918),
-  ('statement',1,'p_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',922),
-  ('statement',1,'p_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',923),
-  ('statement',1,'p_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',924),
-  ('statement',1,'p_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',925),
-  ('statement',1,'p_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',926),
-  ('statement',1,'p_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',927),
-  ('labeled_statement',3,'p_labeled_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',931),
-  ('labeled_statement',4,'p_labeled_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',932),
-  ('labeled_statement',3,'p_labeled_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',933),
-  ('compound_statement',2,'p_compound_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',937),
-  ('compound_statement',3,'p_compound_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',938),
-  ('compound_statement',3,'p_compound_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',939),
-  ('compound_statement',4,'p_compound_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',940),
-  ('compound_statement',3,'p_compound_statement_error','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',944),
-  ('declaration_list',1,'p_declaration_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',949),
-  ('declaration_list',2,'p_declaration_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',950),
-  ('statement_list',1,'p_statement_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',954),
-  ('statement_list',2,'p_statement_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',955),
-  ('expression_statement',1,'p_expression_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',959),
-  ('expression_statement',2,'p_expression_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',960),
-  ('expression_statement',2,'p_expression_statement_error','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',963),
-  ('selection_statement',5,'p_selection_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',968),
-  ('selection_statement',7,'p_selection_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',969),
-  ('selection_statement',5,'p_selection_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',970),
-  ('iteration_statement',5,'p_iteration_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',974),
-  ('iteration_statement',7,'p_iteration_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',975),
-  ('iteration_statement',6,'p_iteration_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',976),
-  ('iteration_statement',7,'p_iteration_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',977),
-  ('jump_statement',3,'p_jump_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',981),
-  ('jump_statement',2,'p_jump_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',982),
-  ('jump_statement',2,'p_jump_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',983),
-  ('jump_statement',2,'p_jump_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',984),
-  ('jump_statement',3,'p_jump_statement','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',985),
-  ('external_declaration',1,'p_external_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',989),
-  ('external_declaration',1,'p_external_declaration','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',990),
-  ('function_definition',4,'p_function_definition','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',996),
-  ('function_definition',3,'p_function_definition','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',997),
-  ('function_definition',3,'p_function_definition','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',998),
-  ('function_definition',2,'p_function_definition','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',999),
-  ('define',3,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1003),
-  ('define',4,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1004),
-  ('define',4,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1005),
-  ('define',5,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1006),
-  ('define',6,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1007),
-  ('define',6,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1008),
-  ('define',7,'p_define','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1009),
-  ('define',3,'p_define_error','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1042),
-  ('macro_parameter_list',1,'p_macro_parameter_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1071),
-  ('macro_parameter_list',3,'p_macro_parameter_list','/Users/tim/Desktop/ctypesgen/ctypesgencore/parser/cgrammar.py',1072),
+  ('translation_unit',0,'p_translation_unit','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',63),
+  ('translation_unit',2,'p_translation_unit','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',64),
+  ('translation_unit',2,'p_translation_unit','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',65),
+  ('identifier',1,'p_identifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',74),
+  ('identifier',3,'p_identifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',75),
+  ('identifier',3,'p_identifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',76),
+  ('identifier',3,'p_identifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',77),
+  ('identifier',3,'p_identifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',78),
+  ('constant',1,'p_constant','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',95),
+  ('constant',1,'p_constant','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',96),
+  ('string_literal',1,'p_string_literal','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',120),
+  ('multi_string_literal',1,'p_multi_string_literal','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',125),
+  ('multi_string_literal',1,'p_multi_string_literal','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',126),
+  ('multi_string_literal',2,'p_multi_string_literal','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',127),
+  ('multi_string_literal',2,'p_multi_string_literal','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',128),
+  ('macro_param',1,'p_macro_param','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',141),
+  ('macro_param',2,'p_macro_param','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',142),
+  ('primary_expression',1,'p_primary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',151),
+  ('primary_expression',1,'p_primary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',152),
+  ('primary_expression',1,'p_primary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',153),
+  ('primary_expression',3,'p_primary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',154),
+  ('postfix_expression',1,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',163),
+  ('postfix_expression',4,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',164),
+  ('postfix_expression',3,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',165),
+  ('postfix_expression',4,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',166),
+  ('postfix_expression',3,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',167),
+  ('postfix_expression',3,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',168),
+  ('postfix_expression',2,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',169),
+  ('postfix_expression',2,'p_postfix_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',170),
+  ('argument_expression_list',1,'p_argument_expression_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',207),
+  ('argument_expression_list',3,'p_argument_expression_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',208),
+  ('asm_expression',5,'p_asm_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',218),
+  ('asm_expression',7,'p_asm_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',219),
+  ('asm_expression',9,'p_asm_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',220),
+  ('asm_expression',11,'p_asm_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',221),
+  ('str_opt_expr_pair_list',0,'p_str_opt_expr_pair_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',234),
+  ('str_opt_expr_pair_list',1,'p_str_opt_expr_pair_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',235),
+  ('str_opt_expr_pair_list',3,'p_str_opt_expr_pair_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',236),
+  ('str_opt_expr_pair',1,'p_str_opt_expr_pair','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',241),
+  ('str_opt_expr_pair',4,'p_str_opt_expr_pair','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',242),
+  ('volatile_opt',0,'p_volatile_opt','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',247),
+  ('volatile_opt',1,'p_volatile_opt','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',248),
+  ('unary_expression',1,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',264),
+  ('unary_expression',2,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',265),
+  ('unary_expression',2,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',266),
+  ('unary_expression',2,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',267),
+  ('unary_expression',2,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',268),
+  ('unary_expression',4,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',269),
+  ('unary_expression',1,'p_unary_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',270),
+  ('unary_operator',1,'p_unary_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',288),
+  ('unary_operator',1,'p_unary_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',289),
+  ('unary_operator',1,'p_unary_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',290),
+  ('unary_operator',1,'p_unary_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',291),
+  ('unary_operator',1,'p_unary_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',292),
+  ('unary_operator',1,'p_unary_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',293),
+  ('cast_expression',1,'p_cast_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',299),
+  ('cast_expression',4,'p_cast_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',300),
+  ('multiplicative_expression',1,'p_multiplicative_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',315),
+  ('multiplicative_expression',3,'p_multiplicative_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',316),
+  ('multiplicative_expression',3,'p_multiplicative_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',317),
+  ('multiplicative_expression',3,'p_multiplicative_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',318),
+  ('additive_expression',1,'p_additive_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',334),
+  ('additive_expression',3,'p_additive_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',335),
+  ('additive_expression',3,'p_additive_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',336),
+  ('shift_expression',1,'p_shift_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',352),
+  ('shift_expression',3,'p_shift_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',353),
+  ('shift_expression',3,'p_shift_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',354),
+  ('relational_expression',1,'p_relational_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',372),
+  ('relational_expression',3,'p_relational_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',373),
+  ('relational_expression',3,'p_relational_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',374),
+  ('relational_expression',3,'p_relational_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',375),
+  ('relational_expression',3,'p_relational_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',376),
+  ('equality_expression',1,'p_equality_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',392),
+  ('equality_expression',3,'p_equality_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',393),
+  ('equality_expression',3,'p_equality_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',394),
+  ('and_expression',1,'p_and_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',405),
+  ('and_expression',3,'p_and_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',406),
+  ('exclusive_or_expression',1,'p_exclusive_or_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',419),
+  ('exclusive_or_expression',3,'p_exclusive_or_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',420),
+  ('inclusive_or_expression',1,'p_inclusive_or_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',433),
+  ('inclusive_or_expression',3,'p_inclusive_or_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',434),
+  ('logical_and_expression',1,'p_logical_and_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',447),
+  ('logical_and_expression',3,'p_logical_and_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',448),
+  ('logical_or_expression',1,'p_logical_or_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',461),
+  ('logical_or_expression',3,'p_logical_or_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',462),
+  ('conditional_expression',1,'p_conditional_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',475),
+  ('conditional_expression',5,'p_conditional_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',476),
+  ('assignment_expression',1,'p_assignment_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',498),
+  ('assignment_expression',3,'p_assignment_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',499),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',515),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',516),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',517),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',518),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',519),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',520),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',521),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',522),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',523),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',524),
+  ('assignment_operator',1,'p_assignment_operator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',525),
+  ('expression',1,'p_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',531),
+  ('expression',3,'p_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',532),
+  ('constant_expression',1,'p_constant_expression','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',539),
+  ('declaration',2,'p_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',545),
+  ('declaration_impl',1,'p_declaration_impl','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',553),
+  ('declaration_impl',2,'p_declaration_impl','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',554),
+  ('declaration_specifiers',1,'p_declaration_specifiers','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',579),
+  ('declaration_specifiers',2,'p_declaration_specifiers','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',580),
+  ('declaration_specifiers',1,'p_declaration_specifiers','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',581),
+  ('declaration_specifiers',2,'p_declaration_specifiers','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',582),
+  ('declaration_specifiers',1,'p_declaration_specifiers','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',583),
+  ('declaration_specifiers',2,'p_declaration_specifiers','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',584),
+  ('init_declarator_list',1,'p_init_declarator_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',593),
+  ('init_declarator_list',3,'p_init_declarator_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',594),
+  ('init_declarator',1,'p_init_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',603),
+  ('init_declarator',3,'p_init_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',604),
+  ('storage_class_specifier',1,'p_storage_class_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',612),
+  ('storage_class_specifier',1,'p_storage_class_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',613),
+  ('storage_class_specifier',1,'p_storage_class_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',614),
+  ('storage_class_specifier',1,'p_storage_class_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',615),
+  ('storage_class_specifier',1,'p_storage_class_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',616),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',622),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',623),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',624),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',625),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',626),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',627),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',628),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',629),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',630),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',631),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',632),
+  ('type_specifier',1,'p_type_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',633),
+  ('struct_or_union_specifier',5,'p_struct_or_union_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',643),
+  ('struct_or_union_specifier',5,'p_struct_or_union_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',644),
+  ('struct_or_union_specifier',4,'p_struct_or_union_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',645),
+  ('struct_or_union_specifier',2,'p_struct_or_union_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',646),
+  ('struct_or_union_specifier',2,'p_struct_or_union_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',647),
+  ('struct_or_union',1,'p_struct_or_union','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',664),
+  ('struct_or_union',1,'p_struct_or_union','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',665),
+  ('struct_declaration_list',1,'p_struct_declaration_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',671),
+  ('struct_declaration_list',2,'p_struct_declaration_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',672),
+  ('struct_declaration',3,'p_struct_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',681),
+  ('struct_declaration',2,'p_struct_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',682),
+  ('specifier_qualifier_list',2,'p_specifier_qualifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',697),
+  ('specifier_qualifier_list',1,'p_specifier_qualifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',698),
+  ('specifier_qualifier_list',2,'p_specifier_qualifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',699),
+  ('specifier_qualifier_list',1,'p_specifier_qualifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',700),
+  ('struct_declarator_list',1,'p_struct_declarator_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',710),
+  ('struct_declarator_list',3,'p_struct_declarator_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',711),
+  ('struct_declarator',1,'p_struct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',720),
+  ('struct_declarator',2,'p_struct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',721),
+  ('struct_declarator',3,'p_struct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',722),
+  ('enum_specifier',4,'p_enum_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',734),
+  ('enum_specifier',5,'p_enum_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',735),
+  ('enum_specifier',2,'p_enum_specifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',736),
+  ('enumerator_list',1,'p_enumerator_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',750),
+  ('enumerator_list',2,'p_enumerator_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',751),
+  ('enumerator_list_iso',1,'p_enumerator_list_iso','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',759),
+  ('enumerator_list_iso',3,'p_enumerator_list_iso','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',760),
+  ('enumerator',1,'p_enumerator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',769),
+  ('enumerator',3,'p_enumerator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',770),
+  ('type_qualifier',1,'p_type_qualifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',779),
+  ('type_qualifier',1,'p_type_qualifier','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',780),
+  ('declarator',2,'p_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',786),
+  ('declarator',1,'p_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',787),
+  ('direct_declarator',1,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',800),
+  ('direct_declarator',3,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',801),
+  ('direct_declarator',4,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',802),
+  ('direct_declarator',3,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',803),
+  ('direct_declarator',4,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',804),
+  ('direct_declarator',4,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',805),
+  ('direct_declarator',3,'p_direct_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',806),
+  ('pointer',1,'p_pointer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',835),
+  ('pointer',2,'p_pointer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',836),
+  ('pointer',2,'p_pointer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',837),
+  ('pointer',3,'p_pointer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',838),
+  ('type_qualifier_list',1,'p_type_qualifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',856),
+  ('type_qualifier_list',2,'p_type_qualifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',857),
+  ('parameter_type_list',1,'p_parameter_type_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',866),
+  ('parameter_type_list',3,'p_parameter_type_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',867),
+  ('parameter_list',1,'p_parameter_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',876),
+  ('parameter_list',3,'p_parameter_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',877),
+  ('parameter_declaration',2,'p_parameter_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',886),
+  ('parameter_declaration',2,'p_parameter_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',887),
+  ('parameter_declaration',1,'p_parameter_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',888),
+  ('identifier_list',1,'p_identifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',897),
+  ('identifier_list',3,'p_identifier_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',898),
+  ('type_name',1,'p_type_name','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',911),
+  ('type_name',2,'p_type_name','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',912),
+  ('abstract_declarator',1,'p_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',930),
+  ('abstract_declarator',1,'p_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',931),
+  ('abstract_declarator',2,'p_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',932),
+  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',952),
+  ('direct_abstract_declarator',2,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',953),
+  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',954),
+  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',955),
+  ('direct_abstract_declarator',4,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',956),
+  ('direct_abstract_declarator',2,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',957),
+  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',958),
+  ('direct_abstract_declarator',3,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',959),
+  ('direct_abstract_declarator',4,'p_direct_abstract_declarator','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',960),
+  ('initializer',1,'p_initializer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',998),
+  ('initializer',3,'p_initializer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',999),
+  ('initializer',4,'p_initializer','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1000),
+  ('initializer_list',1,'p_initializer_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1005),
+  ('initializer_list',3,'p_initializer_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1006),
+  ('statement',1,'p_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1011),
+  ('statement',1,'p_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1012),
+  ('statement',1,'p_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1013),
+  ('statement',1,'p_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1014),
+  ('statement',1,'p_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1015),
+  ('statement',1,'p_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1016),
+  ('labeled_statement',3,'p_labeled_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1021),
+  ('labeled_statement',4,'p_labeled_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1022),
+  ('labeled_statement',3,'p_labeled_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1023),
+  ('compound_statement',2,'p_compound_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1028),
+  ('compound_statement',3,'p_compound_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1029),
+  ('compound_statement',3,'p_compound_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1030),
+  ('compound_statement',4,'p_compound_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1031),
+  ('compound_statement',3,'p_compound_statement_error','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1036),
+  ('declaration_list',1,'p_declaration_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1042),
+  ('declaration_list',2,'p_declaration_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1043),
+  ('statement_list',1,'p_statement_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1048),
+  ('statement_list',2,'p_statement_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1049),
+  ('expression_statement',1,'p_expression_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1054),
+  ('expression_statement',2,'p_expression_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1055),
+  ('expression_statement',2,'p_expression_statement_error','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1060),
+  ('selection_statement',5,'p_selection_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1066),
+  ('selection_statement',7,'p_selection_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1067),
+  ('selection_statement',5,'p_selection_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1068),
+  ('iteration_statement',5,'p_iteration_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1073),
+  ('iteration_statement',7,'p_iteration_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1074),
+  ('iteration_statement',6,'p_iteration_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1075),
+  ('iteration_statement',7,'p_iteration_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1076),
+  ('jump_statement',3,'p_jump_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1081),
+  ('jump_statement',2,'p_jump_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1082),
+  ('jump_statement',2,'p_jump_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1083),
+  ('jump_statement',2,'p_jump_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1084),
+  ('jump_statement',3,'p_jump_statement','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1085),
+  ('external_declaration',1,'p_external_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1090),
+  ('external_declaration',1,'p_external_declaration','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1091),
+  ('function_definition',4,'p_function_definition','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1098),
+  ('function_definition',3,'p_function_definition','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1099),
+  ('function_definition',3,'p_function_definition','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1100),
+  ('function_definition',2,'p_function_definition','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1101),
+  ('define',3,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1106),
+  ('define',4,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1107),
+  ('define',4,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1108),
+  ('define',5,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1109),
+  ('define',6,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1110),
+  ('define',6,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1111),
+  ('define',7,'p_define','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1112),
+  ('define',3,'p_define_error','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1146),
+  ('macro_parameter_list',1,'p_macro_parameter_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1176),
+  ('macro_parameter_list',3,'p_macro_parameter_list','/home/pietro/docdat/src/gis/grass_git/lib/python/ctypes/ctypesgencore/parser/cgrammar.py',1177),
 ]
diff --git a/lib/python/ctypes/ctypesgencore/parser/pplexer.py b/lib/python/ctypes/ctypesgencore/parser/pplexer.py
index 67c5824..4c82476 100644
--- a/lib/python/ctypes/ctypesgencore/parser/pplexer.py
+++ b/lib/python/ctypes/ctypesgencore/parser/pplexer.py
@@ -10,9 +10,25 @@ Reference is C99:
 
 __docformat__ = 'restructuredtext'
 
-import os, re, shlex, sys, tokenize, lex, yacc, traceback
+try:
+    from builtins import long
+    PY2 = True
+except ImportError:
+    # python3
+    PY2 = False
+    long = int
+
+import os
+import re
+import shlex
+import sys
+import tokenize
+import traceback
+
 import ctypes
-from lex import TOKEN
+from . import lex
+from . import yacc
+from .lex import TOKEN
 
 tokens = (
     'HEADER_NAME', 'IDENTIFIER', 'PP_NUMBER', 'CHARACTER_CONSTANT',
@@ -21,15 +37,15 @@ tokens = (
     'PTR_OP', 'INC_OP', 'DEC_OP', 'LEFT_OP', 'RIGHT_OP', 'LE_OP', 'GE_OP',
     'EQ_OP', 'NE_OP', 'AND_OP', 'OR_OP', 'MUL_ASSIGN', 'DIV_ASSIGN',
     'MOD_ASSIGN', 'ADD_ASSIGN', 'SUB_ASSIGN', 'LEFT_ASSIGN', 'RIGHT_ASSIGN',
-    'AND_ASSIGN', 'XOR_ASSIGN', 'OR_ASSIGN',  'PERIOD', 'ELLIPSIS',
+    'AND_ASSIGN', 'XOR_ASSIGN', 'OR_ASSIGN', 'PERIOD', 'ELLIPSIS',
 
     'LPAREN', 'NEWLINE',
-    
+
     'PP_DEFINE', 'PP_DEFINE_NAME', 'PP_DEFINE_MACRO_NAME', 'PP_MACRO_PARAM',
     'PP_STRINGIFY', 'PP_IDENTIFIER_PASTE', 'PP_END_DEFINE'
 )
 
-states = [('DEFINE',"exclusive")]
+states = [('DEFINE', "exclusive")]
 
 subs = {
     'D': '[0-9]',
@@ -41,8 +57,12 @@ subs = {
 }
 # Helper: substitute {foo} with subs[foo] in string (makes regexes more lexy)
 sub_pattern = re.compile('{([^}]*)}')
+
+
 def sub_repl_match(m):
     return subs[m.groups()[0]]
+
+
 def sub(s):
     return sub_pattern.sub(sub_repl_match, s)
 
@@ -53,7 +73,9 @@ def sub(s):
 # Numbers represented as int and float types.
 # For all other tokens, type is just str representation.
 
+
 class StringLiteral(str):
+
     def __new__(cls, value):
         assert value[0] == '"' and value[-1] == '"'
         # Unescaping probably not perfect but close enough.
@@ -125,53 +147,63 @@ punctuators = {
     r'?': (r'\?', '?')
 }
 
+
 def punctuator_regex(punctuators):
     punctuator_regexes = [v[0] for v in punctuators.values()]
-    punctuator_regexes.sort(lambda a, b: -cmp(len(a), len(b)))
+    if PY2:
+        punctuator_regexes.sort(lambda a, b: -cmp(len(a), len(b)))
+    else:
+        punctuator_regexes.sort(key=lambda a: -len(a))
     return '(%s)' % '|'.join(punctuator_regexes)
 
 # Process line-number directives from the preprocessor
 # See http://docs.freebsd.org/info/cpp/cpp.info.Output.html
 DIRECTIVE = r'\#\s+(\d+)\s+"([^"]+)"[ \d]*\n'
+
+
 @TOKEN(DIRECTIVE)
 def t_ANY_directive(t):
     t.lexer.filename = t.groups[2]
     t.lexer.lineno = int(t.groups[1])
     return None
 
+
 @TOKEN(punctuator_regex(punctuators))
 def t_ANY_punctuator(t):
     t.type = punctuators[t.value][1]
     return t
 
 IDENTIFIER = sub('{L}({L}|{D})*')
+
+
 @TOKEN(IDENTIFIER)
 def t_INITIAL_identifier(t):
     t.type = 'IDENTIFIER'
     return t
 
+
 @TOKEN(IDENTIFIER)
 def t_DEFINE_identifier(t):
     if t.lexer.next_is_define_name:
         # This identifier is the name of a macro
         # We need to look ahead and see if this macro takes parameters or not.
         if t.lexpos + len(t.value) < t.lexer.lexlen and \
-            t.lexer.lexdata[t.lexpos + len(t.value)] == '(':
-            
+                t.lexer.lexdata[t.lexpos + len(t.value)] == '(':
+
             t.type = 'PP_DEFINE_MACRO_NAME'
-            
+
             # Look ahead and read macro parameter list
             lexdata = t.lexer.lexdata
             pos = t.lexpos + len(t.value) + 1
             while lexdata[pos] not in '\n)':
-                pos+=1
-            params = lexdata[t.lexpos+len(t.value)+1 : pos]
+                pos += 1
+            params = lexdata[t.lexpos + len(t.value) + 1: pos]
             paramlist = [x.strip() for x in params.split(",") if x.strip()]
             t.lexer.macro_params = paramlist
-                    
+
         else:
             t.type = 'PP_DEFINE_NAME'
-        
+
         t.lexer.next_is_define_name = False
     elif t.value in t.lexer.macro_params:
         t.type = 'PP_MACRO_PARAM'
@@ -179,19 +211,21 @@ def t_DEFINE_identifier(t):
         t.type = 'IDENTIFIER'
     return t
 
-FLOAT_LITERAL = sub(r"(?P<p1>{D}+)?(?P<dp>[.]?)(?P<p2>(?(p1){D}*|{D}+))" \
+FLOAT_LITERAL = sub(r"(?P<p1>{D}+)?(?P<dp>[.]?)(?P<p2>(?(p1){D}*|{D}+))"
                     r"(?P<exp>(?:[Ee][+-]?{D}+)?)(?P<suf>{FS}?)(?!\w)")
+
+
 @TOKEN(FLOAT_LITERAL)
 def t_ANY_float(t):
     t.type = 'PP_NUMBER'
     m = t.lexer.lexmatch
-    
+
     p1 = m.group("p1")
     dp = m.group("dp")
     p2 = m.group("p2")
     exp = m.group("exp")
     suf = m.group("suf")
-    
+
     if dp or exp or (suf and suf in ("Ff")):
         s = m.group(0)
         if suf:
@@ -203,58 +237,67 @@ def t_ANY_float(t):
         t.value = "l" + p1
     else:
         t.value = "i" + p1
-        
+
     return t
 
 INT_LITERAL = sub(r"(?P<p1>(?:0x{H}+)|(?:{D}+))(?P<suf>{IS})")
+
+
 @TOKEN(INT_LITERAL)
 def t_ANY_int(t):
     t.type = 'PP_NUMBER'
     m = t.lexer.lexmatch
-    
+
     if "L" in m.group(3) or "l" in m.group(2):
         prefix = "l"
     else:
         prefix = "i"
-    
+
     g1 = m.group(2)
     if g1.startswith("0x"):
         # Convert base from hexadecimal
-        g1 = str(long(g1[2:],16))
-    elif g1[0]=="0":
+        g1 = str(long(g1[2:], 16))
+    elif g1[0] == "0":
         # Convert base from octal
-        g1 = str(long(g1,8))
-    
+        g1 = str(long(g1, 8))
+
     t.value = prefix + g1
-        
+
     return t
 
 CHARACTER_CONSTANT = sub(r"L?'(\\.|[^\\'])+'")
+
+
 @TOKEN(CHARACTER_CONSTANT)
 def t_ANY_character_constant(t):
     t.type = 'CHARACTER_CONSTANT'
     return t
 
 STRING_LITERAL = sub(r'L?"(\\.|[^\\"])*"')
+
+
 @TOKEN(STRING_LITERAL)
 def t_ANY_string_literal(t):
     t.type = 'STRING_LITERAL'
     t.value = StringLiteral(t.value)
     return t
 
+
 @TOKEN(r'\(')
 def t_ANY_lparen(t):
-    if t.lexpos == 0 or t.lexer.lexdata[t.lexpos-1] not in (' \t\f\v\n'):
+    if t.lexpos == 0 or t.lexer.lexdata[t.lexpos - 1] not in (' \t\f\v\n'):
         t.type = 'LPAREN'
     else:
         t.type = '('
     return t
 
+
 @TOKEN(r'\n')
 def t_INITIAL_newline(t):
     t.lexer.lineno += 1
     return None
 
+
 @TOKEN(r'\#define')
 def t_INITIAL_pp_define(t):
     t.type = 'PP_DEFINE'
@@ -263,33 +306,37 @@ def t_INITIAL_pp_define(t):
     t.lexer.macro_params = set()
     return t
 
+
 @TOKEN(r'\n')
 def t_DEFINE_newline(t):
     t.type = 'PP_END_DEFINE'
     t.lexer.begin("INITIAL")
     del t.lexer.macro_params
-    
+
     # Damage control in case the token immediately after the #define failed
     # to handle this
     t.lexer.next_is_define_name = False
     return t
 
+
 @TOKEN(r'(\#\#)|(\#)')
 def t_DEFINE_pp_param_op(t):
-    if t.value=='#':
+    if t.value == '#':
         t.type = 'PP_STRINGIFY'
     else:
         t.type = 'PP_IDENTIFIER_PASTE'
     return t
 
+
 def t_INITIAL_error(t):
     t.type = 'OTHER'
     return t
 
+
 def t_DEFINE_error(t):
     t.type = 'OTHER'
     t.value = t.value[0]
-    t.lexer.lexpos+=1 # Skip it if it's an error in a #define
+    t.lexer.lexpos += 1  # Skip it if it's an error in a #define
     return t
 
 t_ANY_ignore = ' \t\v\f\r'
diff --git a/lib/python/ctypes/ctypesgencore/parser/preprocessor.py b/lib/python/ctypes/ctypesgencore/parser/preprocessor.py
index 9bcc3db..92d1a10 100644
--- a/lib/python/ctypes/ctypesgencore/parser/preprocessor.py
+++ b/lib/python/ctypes/ctypesgencore/parser/preprocessor.py
@@ -10,16 +10,28 @@ Reference is C99:
 
 __docformat__ = 'restructuredtext'
 
-import os, re, shlex, sys, tokenize, lex, yacc, traceback, subprocess
+import os
+import re
+import shlex
+import subprocess
+import sys
+import tokenize
+import traceback
+
 import ctypes
-from lex import TOKEN
-import pplexer
+from . import lex
+from . import pplexer
+from . import yacc
+from .lex import TOKEN
+
 
 # --------------------------------------------------------------------------
 # Lexers
 # --------------------------------------------------------------------------
 
+
 class PreprocessorLexer(lex.Lexer):
+
     def __init__(self):
         lex.Lexer.__init__(self)
         self.filename = '<input>'
@@ -27,7 +39,7 @@ class PreprocessorLexer(lex.Lexer):
 
     def input(self, data, filename=None):
         if filename:
-            self.filename = filename 
+            self.filename = filename
         self.lasttoken = None
         self.input_stack = []
 
@@ -61,7 +73,9 @@ class PreprocessorLexer(lex.Lexer):
 
         return result
 
+
 class TokenListLexer(object):
+
     def __init__(self, tokens):
         self.tokens = tokens
         self.pos = 0
@@ -74,6 +88,7 @@ class TokenListLexer(object):
         else:
             return None
 
+
 def symbol_to_token(sym):
     if isinstance(sym, yacc.YaccSymbol):
         return sym.value
@@ -82,6 +97,7 @@ def symbol_to_token(sym):
     else:
         assert False, 'Not a symbol: %r' % sym
 
+
 def create_token(type, value, production=None):
     '''Create a token of type and value, at the position where 'production'
     was reduced.  Don`t specify production if the token is built-in'''
@@ -101,8 +117,10 @@ def create_token(type, value, production=None):
 # Grammars
 # --------------------------------------------------------------------------
 
+
 class PreprocessorParser(object):
-    def __init__(self,options,cparser):
+
+    def __init__(self, options, cparser):
         self.defines = ["inline=", "__inline__=", "__extension__=",
                         "_Bool=uint8_t", "__const=const", "__asm__(x)=",
                         "__asm(x)=", "CTYPESGEN=1"]
@@ -121,45 +139,45 @@ class PreprocessorParser(object):
                              lextab='lextab',
                              outputdir=os.path.dirname(__file__),
                              module=pplexer)
-        
+
         self.options = options
-        self.cparser = cparser # An instance of CParser
+        self.cparser = cparser  # An instance of CParser
 
     def parse(self, filename):
         """Parse a file and save its output"""
-        
+
         cmd = self.options.cpp
         if sys.platform == 'darwin':
             cmd += " -U __BLOCKS__"
         cmd += " -U __GNUC__"
         cmd += " -dD"
         for path in self.options.include_search_paths:
-            cmd += " -I%s" % path 
+            cmd += " -I%s" % path
         for define in self.defines:
             cmd += ' "-D%s"' % define
-        cmd += " " + filename.replace('\\','/')
+        cmd += " " + filename.replace('\\', '/')
 
         self.cparser.handle_status(cmd)
-        
+
         if sys.platform == 'win32':
             cmd = ['sh.exe', '-c', cmd]
 
         pp = subprocess.Popen(cmd,
-                              shell = True,
-                              stdout = subprocess.PIPE,
-                              stderr = subprocess.PIPE)
+                              shell=True,
+                              stdout=subprocess.PIPE,
+                              stderr=subprocess.PIPE)
         ppout, pperr = pp.communicate()
-        
+
         for line in pperr.split("\n"):
             if line:
                 self.cparser.handle_pp_error(line)
-        
+
         # We separate lines that are #defines and lines that are source code
         # We put all the source lines first, then all the #define lines.
-        
-        source_lines= []
+
+        source_lines = []
         define_lines = []
-        
+
         for line in ppout.split("\n"):
             line = line.rstrip('\r')
             line = line + "\n"
@@ -167,35 +185,35 @@ class PreprocessorParser(object):
                 # Line number information has to go with both groups
                 source_lines.append(line)
                 define_lines.append(line)
-            
+
             elif line.startswith("#define"):
                 source_lines.append("\n")
                 define_lines.append(line)
-            
+
             elif line.startswith("#"):
                 # It's a directive, but not a #define. Remove it
                 source_lines.append("\n")
                 define_lines.append("\n")
-            
+
             else:
                 source_lines.append(line)
                 define_lines.append("\n")
-        
+
         text = "".join(source_lines + define_lines)
-        
+
         if self.options.save_preprocessed_headers:
-            self.cparser.handle_status("Saving preprocessed headers to %s." % \
-                self.options.save_preprocessed_headers)
+            self.cparser.handle_status("Saving preprocessed headers to %s." %
+                                       self.options.save_preprocessed_headers)
             try:
                 f = file(self.options.save_preprocessed_headers, "w")
                 f.write(text)
                 f.close()
             except IOError:
                 self.cparser.handle_error("Couldn't save headers.")
-        
+
         self.lexer.input(text)
         self.output = []
-        
+
         while True:
             token = self.lexer.token()
             if token is not None:
diff --git a/lib/python/ctypes/ctypesgencore/parser/yacc.py b/lib/python/ctypes/ctypesgencore/parser/yacc.py
index 9ae2930..e0453b9 100644
--- a/lib/python/ctypes/ctypesgencore/parser/yacc.py
+++ b/lib/python/ctypes/ctypesgencore/parser/yacc.py
@@ -11,16 +11,16 @@
 # modify it under the terms of the GNU Lesser General Public
 # License as published by the Free Software Foundation; either
 # version 2.1 of the License, or (at your option) any later version.
-# 
+#
 # This library 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
 # Lesser General Public License for more details.
-# 
+#
 # You should have received a copy of the GNU Lesser General Public
 # License along with this library; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-# 
+#
 # See the file COPYING for a complete copy of the LGPL.
 #
 #
@@ -51,6 +51,7 @@
 # consider to be good Python "coding style."   Modify the code at your
 # own risk!
 # ----------------------------------------------------------------------------
+from __future__ import print_function
 
 __version__ = "2.2"
 
@@ -60,16 +61,27 @@ __version__ = "2.2"
 # Change these to modify the default behavior of yacc (if you wish)
 #-----------------------------------------------------------------------------
 
-yaccdebug   = 1                # Debugging mode.  If set, yacc generates a
-                               # a 'parser.out' file in the current directory
+yaccdebug = 1                # Debugging mode.  If set, yacc generates a
+# a 'parser.out' file in the current directory
 
-debug_file  = 'parser.out'     # Default name of the debugging file
-tab_module  = 'parsetab'       # Default name of the table module
-default_lr  = 'LALR'           # Default LR table generation method
+debug_file = 'parser.out'     # Default name of the debugging file
+tab_module = 'parsetab'       # Default name of the table module
+default_lr = 'LALR'           # Default LR table generation method
 
 error_count = 3                # Number of symbols that must be shifted to leave recovery mode
 
-import re, types, sys, cStringIO, os.path
+try:
+    import cStringIO as io
+except ImportError:
+    import io
+
+import imp
+import os.path
+import re
+import sys
+import types
+
+from .lex import get_func_code
 
 # <tm> 1 July 2008
 try:
@@ -77,6 +89,7 @@ try:
 except ImportError:
     # Preserve backwards compatibility with older versions of Python
     import md5
+
     class Dummy:
         pass
     hashlib = Dummy()
@@ -84,7 +97,10 @@ except ImportError:
     del Dummy, md5
 
 # Exception raised for yacc-related errors
-class YaccError(Exception):   pass
+
+
+class YaccError(Exception):
+    pass
 
 #-----------------------------------------------------------------------------
 #                        ===  LR Parsing Engine ===
@@ -103,10 +119,13 @@ class YaccError(Exception):   pass
 #        .lexpos     = Starting lex position
 #        .endlexpos  = Ending lex position (optional, set automatically)
 
+
 class YaccSymbol:
     filename = ''  # <ah>
-    def __str__(self):    return self.type
-    def __repr__(self):   return str(self)
+
+    def __str__(self): return self.type
+
+    def __repr__(self): return str(self)
 
 # This class is a wrapper around the objects actually passed to each
 # grammar rule.   Index lookup and assignment actually assign the
@@ -117,64 +136,71 @@ class YaccSymbol:
 # for a symbol.  The lexspan() method returns a tuple (lexpos,endlexpos)
 # representing the range of positional information for a symbol.
 
+
 class YaccProduction:
-    def __init__(self,s,stack=None):
+
+    def __init__(self, s, stack=None):
         self.slice = s
         self.pbstack = []
         self.stack = stack
 
-    def __getitem__(self,n):
-        if type(n) == types.IntType:
-             if n >= 0: return self.slice[n].value
-             else: return self.stack[n].value
+    def __getitem__(self, n):
+        if isinstance(n, int):
+            if n >= 0:
+                return self.slice[n].value
+            else:
+                return self.stack[n].value
         else:
-             return [s.value for s in self.slice[n.start:n.stop:n.step]]
+            return [s.value for s in self.slice[n.start:n.stop:n.step]]
 
-    def __setitem__(self,n,v):
+    def __setitem__(self, n, v):
         self.slice[n].value = v
 
     def __len__(self):
         return len(self.slice)
-    
-    def lineno(self,n):
-        return getattr(self.slice[n],"lineno",0)
 
-    def linespan(self,n):
-        startline = getattr(self.slice[n],"lineno",0)
-        endline = getattr(self.slice[n],"endlineno",startline)
-        return startline,endline
+    def lineno(self, n):
+        return getattr(self.slice[n], "lineno", 0)
+
+    def linespan(self, n):
+        startline = getattr(self.slice[n], "lineno", 0)
+        endline = getattr(self.slice[n], "endlineno", startline)
+        return startline, endline
 
-    def lexpos(self,n):
-        return getattr(self.slice[n],"lexpos",0)
+    def lexpos(self, n):
+        return getattr(self.slice[n], "lexpos", 0)
 
-    def lexspan(self,n):
-        startpos = getattr(self.slice[n],"lexpos",0)
-        endpos = getattr(self.slice[n],"endlexpos",startpos)
-        return startpos,endpos
+    def lexspan(self, n):
+        startpos = getattr(self.slice[n], "lexpos", 0)
+        endpos = getattr(self.slice[n], "endlexpos", startpos)
+        return startpos, endpos
 
-    def pushback(self,n):
+    def pushback(self, n):
         if n <= 0:
-            raise ValueError, "Expected a positive value"
-        if n > (len(self.slice)-1):
-            raise ValueError, "Can't push %d tokens. Only %d are available." % (n,len(self.slice)-1)
-        for i in range(0,n):
-            self.pbstack.append(self.slice[-i-1])
+            raise ValueError("Expected a positive value")
+        if n > (len(self.slice) - 1):
+            raise ValueError("Can't push %d tokens. Only %d are available." % (n, len(
+                self.slice) - 1))
+        for i in range(0, n):
+            self.pbstack.append(self.slice[-i - 1])
 
 # The LR Parsing engine.   This is defined as a class so that multiple parsers
 # can exist in the same process.  A user never instantiates this directly.
 # Instead, the global yacc() function should be used to create a suitable Parser
-# object. 
+# object.
+
 
 class Parser:
     # <ah> Remove magic (use ParserPrototype)
+
     def __init__(self):
         # Reset internal state
         self.productions = None          # List of productions
-        self.errorfunc   = None          # Error handling function
-        self.action      = { }           # LR Action table
-        self.goto        = { }           # LR goto table
-        self.require     = { }           # Attribute require table
-        self.method      = "Unknown LR"  # Table construction method used
+        self.errorfunc = None          # Error handling function
+        self.action = {}           # LR Action table
+        self.goto = {}           # LR goto table
+        self.require = {}           # Attribute require table
+        self.method = "Unknown LR"  # Table construction method used
 
         # <ah> 25 Jan 2007
         self.statestackstack = []
@@ -188,7 +214,7 @@ class Parser:
         del self.symstack[:]
         sym = YaccSymbol()
         sym.type = '$end'
-        sym.parser = self # <tm> 25 June 2008
+        sym.parser = self  # <tm> 25 June 2008
         self.symstack.append(sym)
         self.statestack.append(0)
 
@@ -204,24 +230,24 @@ class Parser:
         # <ah> 25 Jan 2007
         self.statestack[:] = self.statestackstack.pop()
         self.symstack[:] = self.symstackstack.pop()
-        
-    def parse(self,input=None,lexer=None,debug=0):
+
+    def parse(self, input=None, lexer=None, debug=0):
         lookahead = None                 # Current lookahead symbol
-        lookaheadstack = [ ]             # Stack of lookahead symbols
+        lookaheadstack = []             # Stack of lookahead symbols
         actions = self.action            # Local reference to action table
-        goto    = self.goto              # Local reference to goto table
-        prod    = self.productions       # Local reference to production list
-        pslice  = YaccProduction(None)   # Production object passed to grammar rules
+        goto = self.goto              # Local reference to goto table
+        prod = self.productions       # Local reference to production list
+        pslice = YaccProduction(None)   # Production object passed to grammar rules
         pslice.parser = self             # Parser object
         self.errorcount = 0              # Used during error recovery
 
         # If no lexer was given, we will try to use the lex module
         if not lexer:
-            import lex
+            from . import lex
             lexer = lex.lexer
 
         pslice.lexer = lexer
-        
+
         # If input was supplied, pass to lexer
         if input:
             lexer.input(input)
@@ -229,27 +255,27 @@ class Parser:
         # Tokenize function
         get_token = lexer.token
 
-        statestack = [ ]                # Stack of parsing states
+        statestack = []                # Stack of parsing states
         self.statestack = statestack
-        symstack   = [ ]                # Stack of grammar symbols
+        symstack = []                # Stack of grammar symbols
         self.symstack = symstack
 
         pslice.stack = symstack         # Put in the production
-        errtoken   = None               # Err token
+        errtoken = None               # Err token
 
         # The start state is assumed to be (0,$end)
         statestack.append(0)
         sym = YaccSymbol()
         sym.type = '$end'
-        sym.parser = self # <tm> 25 June 2008
+        sym.parser = self  # <tm> 25 June 2008
         symstack.append(sym)
-        
-        while 1:
+
+        while True:
             # Get the next symbol on the input.  If a lookahead symbol
             # is already set, we just use that. Otherwise, we'll pull
             # the next token off of the lookaheadstack or from the lexer
             if debug > 1:
-                print 'state', statestack[-1]
+                print('state', statestack[-1])
             if not lookahead:
                 if not lookaheadstack:
                     lookahead = get_token()     # Get the next token
@@ -258,17 +284,18 @@ class Parser:
                 if not lookahead:
                     lookahead = YaccSymbol()
                     lookahead.type = '$end'
-                    lookahead.parser = self # <tm> 25 June 2008
+                    lookahead.parser = self  # <tm> 25 June 2008
             if debug:
-                errorlead = ("%s . %s" % (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()
+                errorlead = ("%s . %s" %
+                             (" ".join([xx.type for xx in symstack][1:]), str(lookahead))).lstrip()
 
             # Check the action table
             s = statestack[-1]
             ltype = lookahead.type
-            t = actions.get((s,ltype),None)
+            t = actions.get((s, ltype), None)
 
             if debug > 1:
-                print 'action', t
+                print('action', t)
             if t is not None:
                 if t > 0:
                     # shift a symbol on the stack
@@ -285,14 +312,14 @@ class Parser:
                     # Decrease error count on successful shift
                     if self.errorcount > 0:
                         self.errorcount -= 1
-                        
+
                     continue
-                
+
                 if t < 0:
                     # reduce a symbol on the stack, emit a production
                     p = prod[-t]
                     pname = p.name
-                    plen  = p.len
+                    plen = p.len
 
                     # Get production function
                     sym = YaccSymbol()
@@ -302,21 +329,21 @@ class Parser:
                         sys.stderr.write("%-60s reduce %d\n" % (errorlead, -t))
 
                     if plen:
-                        targ = symstack[-plen-1:]
+                        targ = symstack[-plen - 1:]
                         targ[0] = sym
                         try:
                             sym.lineno = targ[1].lineno
                             sym.filename = targ[1].filename
-                            sym.endlineno = getattr(targ[-1],"endlineno",targ[-1].lineno)
+                            sym.endlineno = getattr(targ[-1], "endlineno", targ[-1].lineno)
                             sym.lexpos = targ[1].lexpos
-                            sym.endlexpos = getattr(targ[-1],"endlexpos",targ[-1].lexpos)
+                            sym.endlexpos = getattr(targ[-1], "endlexpos", targ[-1].lexpos)
                         except AttributeError:
                             sym.lineno = 0
                         del symstack[-plen:]
                         del statestack[-plen:]
                     else:
                         sym.lineno = 0
-                        targ = [ sym ]
+                        targ = [sym]
                     pslice.slice = targ
                     pslice.pbstack = []
                     # Call the grammar rule with our special slice object
@@ -330,15 +357,15 @@ class Parser:
                         lookahead = None
 
                     symstack.append(sym)
-                    statestack.append(goto[statestack[-1],pname])
+                    statestack.append(goto[statestack[-1], pname])
                     continue
 
                 if t == 0:
                     n = symstack[-1]
-                    return getattr(n,"value",None)
+                    return getattr(n, "value", None)
                     sys.stderr.write(errorlead, "\n")
 
-            if t == None:
+            if t is None:
                 if debug:
                     sys.stderr.write(errorlead + "\n")
                 # We have some kind of parsing error here.  To handle
@@ -354,19 +381,19 @@ class Parser:
                 if not self.errorcount:
                     self.errorcount = error_count
                     errtoken = lookahead
-                    
+
                     # <tm> 24 June 2008
                     # Let EOF error token get through so errorfunc would have
                     # access to the parser.
-                    
+
                     if self.errorfunc:
-                        global errok,token,restart
+                        global errok, token, restart
                         errok = self.errok        # Set some special functions available in error recovery
                         token = get_token
                         restart = self.restart
                         tok = self.errorfunc(errtoken)
                         del errok, token, restart   # Delete special functions
-                        
+
                         if not self.errorcount:
                             # User must have done some kind of panic
                             # mode recovery on their own.  The
@@ -376,10 +403,14 @@ class Parser:
                             continue
                     else:
                         if errtoken:
-                            if hasattr(errtoken,"lineno"): lineno = lookahead.lineno
-                            else: lineno = 0
+                            if hasattr(errtoken, "lineno"):
+                                lineno = lookahead.lineno
+                            else:
+                                lineno = 0
                             if lineno:
-                                sys.stderr.write("yacc: Syntax error at line %d, token=%s\n" % (lineno, errtoken.type))
+                                sys.stderr.write(
+                                    "yacc: Syntax error at line %d, token=%s\n" %
+                                    (lineno, errtoken.type))
                             else:
                                 sys.stderr.write("yacc: Syntax error, token=%s" % errtoken.type)
                         else:
@@ -388,7 +419,7 @@ class Parser:
 
                 else:
                     self.errorcount = error_count
-                
+
                 # case 1:  the statestack only has 1 entry on it.  If we're in this state, the
                 # entire parse has been rolled back and we're completely hosed.   The token is
                 # discarded and we just keep going.
@@ -406,7 +437,7 @@ class Parser:
                 # Start nuking entries on the stack
                 if lookahead.type == '$end':
                     # Whoa. We're really hosed here. Bail out
-                    return 
+                    return
 
                 if lookahead.type != 'error':
                     sym = symstack[-1]
@@ -417,7 +448,7 @@ class Parser:
                         continue
                     t = YaccSymbol()
                     t.type = 'error'
-                    if hasattr(lookahead,"lineno"):
+                    if hasattr(lookahead, "lineno"):
                         t.lineno = lookahead.lineno
                     t.value = lookahead
                     lookaheadstack.append(lookahead)
@@ -429,7 +460,7 @@ class Parser:
                 continue
 
             # Call an error function here
-            raise RuntimeError, "yacc: internal parser error!!!\n"
+            raise RuntimeError("yacc: internal parser error!!!\n")
 
 # -----------------------------------------------------------------------------
 #                          === Parser Construction ===
@@ -441,7 +472,7 @@ class Parser:
 # is completely self contained--meaning that it is safe to repeatedly
 # call yacc() with different grammars in the same application.
 # -----------------------------------------------------------------------------
-        
+
 # -----------------------------------------------------------------------------
 # validate_file()
 #
@@ -453,9 +484,11 @@ class Parser:
 # to try and detect duplicates.
 # -----------------------------------------------------------------------------
 
+
 def validate_file(filename):
-    base,ext = os.path.splitext(filename)
-    if ext != '.py': return 1          # No idea. Assume it's okay.
+    base, ext = os.path.splitext(filename)
+    if ext != '.py':
+        return 1          # No idea. Assume it's okay.
 
     try:
         f = open(filename)
@@ -466,7 +499,7 @@ def validate_file(filename):
 
     # Match def p_funcname(
     fre = re.compile(r'\s*def\s+(p_[a-zA-Z_0-9]*)\(')
-    counthash = { }
+    counthash = {}
     linen = 1
     noerror = 1
     for l in lines:
@@ -477,25 +510,34 @@ def validate_file(filename):
             if not prev:
                 counthash[name] = linen
             else:
-                sys.stderr.write("%s:%d: Function %s redefined. Previously defined on line %d\n" % (filename,linen,name,prev))
+                sys.stderr.write(
+                    "%s:%d: Function %s redefined. Previously defined on line %d\n" %
+                    (filename, linen, name, prev))
                 noerror = 0
         linen += 1
     return noerror
 
-# This function looks for functions that might be grammar rules, but which don't have the proper p_suffix.
+# This function looks for functions that might be grammar rules, but which
+# don't have the proper p_suffix.
+
+
 def validate_dict(d):
-    for n,v in d.items(): 
-        if n[0:2] == 'p_' and type(v) in (types.FunctionType, types.MethodType): continue
-        if n[0:2] == 't_': continue
+    for n, v in d.items():
+        if n[0:2] == 'p_' and type(v) in (types.FunctionType, types.MethodType):
+            continue
+        if n[0:2] == 't_':
+            continue
 
         if n[0:2] == 'p_':
             sys.stderr.write("yacc: Warning. '%s' not defined as a function\n" % n)
-        if 1 and isinstance(v,types.FunctionType) and v.func_code.co_argcount == 1:
+        if 1 and isinstance(v, types.FunctionType) and get_func_code(v).co_argcount == 1:
             try:
                 doc = v.__doc__.split(" ")
                 if doc[1] == ':':
-                    sys.stderr.write("%s:%d: Warning. Possible grammar rule '%s' defined without p_ prefix.\n" % (v.func_code.co_filename, v.func_code.co_firstlineno,n))
-            except StandardError:
+                    sys.stderr.write(
+                        "%s:%d: Warning. Possible grammar rule '%s' defined without p_ prefix.\n" %
+                        (get_func_code(v).co_filename, get_func_code(v).co_firstlineno, n))
+            except Exception:
                 pass
 
 # -----------------------------------------------------------------------------
@@ -506,50 +548,52 @@ def validate_dict(d):
 # -----------------------------------------------------------------------------
 
 # Initialize all of the global variables used during grammar construction
+
+
 def initialize_vars():
-    global Productions, Prodnames, Prodmap, Terminals 
+    global Productions, Prodnames, Prodmap, Terminals
     global Nonterminals, First, Follow, Precedence, LRitems
     global Errorfunc, Signature, Requires
 
-    Productions  = [None]  # A list of all of the productions.  The first
-                           # entry is always reserved for the purpose of
-                           # building an augmented grammar
-                        
-    Prodnames    = { }     # A dictionary mapping the names of nonterminals to a list of all
-                           # productions of that nonterminal.
-                        
-    Prodmap      = { }     # A dictionary that is only used to detect duplicate
-                           # productions.
+    Productions = [None]  # A list of all of the productions.  The first
+    # entry is always reserved for the purpose of
+    # building an augmented grammar
+
+    Prodnames = {}     # A dictionary mapping the names of nonterminals to a list of all
+    # productions of that nonterminal.
+
+    Prodmap = {}     # A dictionary that is only used to detect duplicate
+    # productions.
+
+    Terminals = {}     # A dictionary mapping the names of terminal symbols to a
+    # list of the rules where they are used.
 
-    Terminals    = { }     # A dictionary mapping the names of terminal symbols to a
-                           # list of the rules where they are used.
+    Nonterminals = {}     # A dictionary mapping names of nonterminals to a list
+    # of rule numbers where they are used.
 
-    Nonterminals = { }     # A dictionary mapping names of nonterminals to a list
-                           # of rule numbers where they are used.
+    First = {}     # A dictionary of precomputed FIRST(x) symbols
 
-    First        = { }     # A dictionary of precomputed FIRST(x) symbols
-    
-    Follow       = { }     # A dictionary of precomputed FOLLOW(x) symbols
+    Follow = {}     # A dictionary of precomputed FOLLOW(x) symbols
 
-    Precedence   = { }     # Precedence rules for each terminal. Contains tuples of the
-                           # form ('right',level) or ('nonassoc', level) or ('left',level)
+    Precedence = {}     # Precedence rules for each terminal. Contains tuples of the
+    # form ('right',level) or ('nonassoc', level) or ('left',level)
 
-    LRitems      = [ ]     # A list of all LR items for the grammar.  These are the
-                           # productions with the "dot" like E -> E . PLUS E
+    LRitems = []     # A list of all LR items for the grammar.  These are the
+    # productions with the "dot" like E -> E . PLUS E
+
+    Errorfunc = None    # User defined error handler
 
-    Errorfunc    = None    # User defined error handler
-    
     # <tm> 1 July 2008 changed to use hashlib
-    Signature    = hashlib.md5()   # Digital signature of the grammar rules, precedence
-                                   # and other information.  Used to determined when a
-                                   # parsing table needs to be regenerated.
+    Signature = hashlib.md5()   # Digital signature of the grammar rules, precedence
+    # and other information.  Used to determined when a
+    # parsing table needs to be regenerated.
 
-    Requires     = { }     # Requires list
+    Requires = {}     # Requires list
 
     # File objects used when creating the parser.out debugging file
     global _vf, _vfc
-    _vf           = cStringIO.StringIO()
-    _vfc          = cStringIO.StringIO()
+    _vf = io.StringIO()
+    _vfc = io.StringIO()
 
 # -----------------------------------------------------------------------------
 # class Production:
@@ -569,27 +613,29 @@ def initialize_vars():
 #       func     - Action function
 #       prec     - Precedence level
 #       lr_next  - Next LR item. Example, if we are ' E -> E . PLUS E'
-#                  then lr_next refers to 'E -> E PLUS . E'   
+#                  then lr_next refers to 'E -> E PLUS . E'
 #       lr_index - LR item index (location of the ".") in the prod list.
 #       lookaheads - LALR lookahead symbols for this item
 #       len      - Length of the production (number of symbols on right hand side)
 # -----------------------------------------------------------------------------
 
+
 class Production:
-    def __init__(self,**kw):
-        for k,v in kw.items():
-            setattr(self,k,v)
+
+    def __init__(self, **kw):
+        for k, v in kw.items():
+            setattr(self, k, v)
         self.lr_index = -1
         self.lr0_added = 0    # Flag indicating whether or not added to LR0 closure
         self.lr1_added = 0    # Flag indicating whether or not added to LR1
-        self.usyms = [ ]
-        self.lookaheads = { }
-        self.lk_added = { }
-        self.setnumbers = [ ]
-        
+        self.usyms = []
+        self.lookaheads = {}
+        self.lk_added = {}
+        self.setnumbers = []
+
     def __str__(self):
         if self.prod:
-            s = "%s -> %s" % (self.name," ".join(self.prod))
+            s = "%s -> %s" % (self.name, " ".join(self.prod))
         else:
             s = "%s -> <empty>" % self.name
         return s
@@ -598,32 +644,34 @@ class Production:
         return str(self)
 
     # Compute lr_items from the production
-    def lr_item(self,n):
-        if n > len(self.prod): return None
+    def lr_item(self, n):
+        if n > len(self.prod):
+            return None
         p = Production()
         p.name = self.name
         p.prod = list(self.prod)
         p.number = self.number
         p.lr_index = n
-        p.lookaheads = { }
+        p.lookaheads = {}
         p.setnumbers = self.setnumbers
-        p.prod.insert(n,".")
+        p.prod.insert(n, ".")
         p.prod = tuple(p.prod)
         p.len = len(p.prod)
         p.usyms = self.usyms
 
         # Precompute list of productions immediately following
         try:
-            p.lrafter = Prodnames[p.prod[n+1]]
-        except (IndexError,KeyError) as e:
+            p.lrafter = Prodnames[p.prod[n + 1]]
+        except (IndexError, KeyError) as e:
             p.lrafter = []
         try:
-            p.lrbefore = p.prod[n-1]
+            p.lrbefore = p.prod[n - 1]
         except IndexError:
             p.lrbefore = None
 
         return p
 
+
 class MiniProduction:
     pass
 
@@ -644,46 +692,53 @@ _is_identifier = re.compile(r'^[a-zA-Z0-9_-]+$')
 #                     |  productionn
 #              name2 ::= production1
 #                     |  production2
-#                    ... 
+#                    ...
 # -----------------------------------------------------------------------------
 
-def add_production(f,file,line,prodname,syms):
-    
-    if Terminals.has_key(prodname):
-        sys.stderr.write("%s:%d: Illegal rule name '%s'. Already defined as a token.\n" % (file,line,prodname))
+
+def add_production(f, file, line, prodname, syms):
+
+    if prodname in Terminals:
+        sys.stderr.write(
+            "%s:%d: Illegal rule name '%s'. Already defined as a token.\n" %
+            (file, line, prodname))
         return -1
     if prodname == 'error':
-        sys.stderr.write("%s:%d: Illegal rule name '%s'. error is a reserved word.\n" % (file,line,prodname))
+        sys.stderr.write(
+            "%s:%d: Illegal rule name '%s'. error is a reserved word.\n" %
+            (file, line, prodname))
         return -1
-                
+
     if not _is_identifier.match(prodname):
-        sys.stderr.write("%s:%d: Illegal rule name '%s'\n" % (file,line,prodname))
+        sys.stderr.write("%s:%d: Illegal rule name '%s'\n" % (file, line, prodname))
         return -1
 
     for x in range(len(syms)):
         s = syms[x]
         if s[0] in "'\"":
-             try:
-                 c = eval(s)
-                 if (len(c) > 1):
-                      sys.stderr.write("%s:%d: Literal token %s in rule '%s' may only be a single character\n" % (file,line,s, prodname)) 
-                      return -1
-                 if not Terminals.has_key(c):
-                      Terminals[c] = []
-                 syms[x] = c
-                 continue
-             except SyntaxError:
-                 pass
+            try:
+                c = eval(s)
+                if (len(c) > 1):
+                    sys.stderr.write(
+                        "%s:%d: Literal token %s in rule '%s' may only be a single character\n" %
+                        (file, line, s, prodname))
+                    return -1
+                if c not in Terminals:
+                    Terminals[c] = []
+                syms[x] = c
+                continue
+            except SyntaxError:
+                pass
         if not _is_identifier.match(s) and s != '%prec':
-            sys.stderr.write("%s:%d: Illegal name '%s' in rule '%s'\n" % (file,line,s, prodname))
+            sys.stderr.write("%s:%d: Illegal name '%s' in rule '%s'\n" % (file, line, s, prodname))
             return -1
 
     # See if the rule is already in the rulemap
-    map = "%s -> %s" % (prodname,syms)
-    if Prodmap.has_key(map):
+    map = "%s -> %s" % (prodname, syms)
+    if map in Prodmap:
         m = Prodmap[map]
-        sys.stderr.write("%s:%d: Duplicate rule %s.\n" % (file,line, m))
-        sys.stderr.write("%s:%d: Previous definition at %s:%d\n" % (file,line, m.file, m.line))
+        sys.stderr.write("%s:%d: Duplicate rule %s.\n" % (file, line, m))
+        sys.stderr.write("%s:%d: Previous definition at %s:%d\n" % (file, line, m.file, m.line))
         return -1
 
     p = Production()
@@ -694,26 +749,29 @@ def add_production(f,file,line,prodname,syms):
     p.func = f
     p.number = len(Productions)
 
-            
     Productions.append(p)
     Prodmap[map] = p
-    if not Nonterminals.has_key(prodname):
-        Nonterminals[prodname] = [ ]
-    
+    if prodname not in Nonterminals:
+        Nonterminals[prodname] = []
+
     # Add all terminals to Terminals
     i = 0
     while i < len(p.prod):
         t = p.prod[i]
         if t == '%prec':
             try:
-                precname = p.prod[i+1]
+                precname = p.prod[i + 1]
             except IndexError:
-                sys.stderr.write("%s:%d: Syntax error. Nothing follows %%prec.\n" % (p.file,p.line))
+                sys.stderr.write(
+                    "%s:%d: Syntax error. Nothing follows %%prec.\n" %
+                    (p.file, p.line))
                 return -1
 
-            prec = Precedence.get(precname,None)
+            prec = Precedence.get(precname, None)
             if not prec:
-                sys.stderr.write("%s:%d: Nothing known about the precedence of '%s'\n" % (p.file,p.line,precname))
+                sys.stderr.write(
+                    "%s:%d: Nothing known about the precedence of '%s'\n" %
+                    (p.file, p.line, precname))
                 return -1
             else:
                 p.prec = prec
@@ -721,58 +779,59 @@ def add_production(f,file,line,prodname,syms):
             del p.prod[i]
             continue
 
-        if Terminals.has_key(t):
+        if t in Terminals:
             Terminals[t].append(p.number)
             # Is a terminal.  We'll assign a precedence to p based on this
-            if not hasattr(p,"prec"):
-                p.prec = Precedence.get(t,('right',0))
+            if not hasattr(p, "prec"):
+                p.prec = Precedence.get(t, ('right', 0))
         else:
-            if not Nonterminals.has_key(t):
-                Nonterminals[t] = [ ]
+            if t not in Nonterminals:
+                Nonterminals[t] = []
             Nonterminals[t].append(p.number)
         i += 1
 
-    if not hasattr(p,"prec"):
-        p.prec = ('right',0)
-        
+    if not hasattr(p, "prec"):
+        p.prec = ('right', 0)
+
     # Set final length of productions
-    p.len  = len(p.prod)
+    p.len = len(p.prod)
     p.prod = tuple(p.prod)
 
     # Calculate unique syms in the production
-    p.usyms = [ ]
+    p.usyms = []
     for s in p.prod:
         if s not in p.usyms:
             p.usyms.append(s)
-    
+
     # Add to the global productions list
     try:
         Prodnames[p.name].append(p)
     except KeyError:
-        Prodnames[p.name] = [ p ]
+        Prodnames[p.name] = [p]
     return 0
 
 # Given a raw rule function, this function rips out its doc string
 # and adds rules to the grammar
 
+
 def add_function(f):
-    line = f.func_code.co_firstlineno
-    file = f.func_code.co_filename
+    line = get_func_code(f).co_firstlineno
+    file = get_func_code(f).co_filename
     error = 0
 
-    if isinstance(f,types.MethodType):
+    if isinstance(f, types.MethodType):
         reqdargs = 2
     else:
         reqdargs = 1
-        
-    if f.func_code.co_argcount > reqdargs:
-        sys.stderr.write("%s:%d: Rule '%s' has too many arguments.\n" % (file,line,f.__name__))
+
+    if get_func_code(f).co_argcount > reqdargs:
+        sys.stderr.write("%s:%d: Rule '%s' has too many arguments.\n" % (file, line, f.__name__))
         return -1
 
-    if f.func_code.co_argcount < reqdargs:
-        sys.stderr.write("%s:%d: Rule '%s' requires an argument.\n" % (file,line,f.__name__))
+    if get_func_code(f).co_argcount < reqdargs:
+        sys.stderr.write("%s:%d: Rule '%s' requires an argument.\n" % (file, line, f.__name__))
         return -1
-          
+
     if f.__doc__:
         # Split the doc string into lines
         pstrings = f.__doc__.splitlines()
@@ -781,18 +840,19 @@ def add_function(f):
         for ps in pstrings:
             dline += 1
             p = ps.split()
-            if not p: continue
+            if not p:
+                continue
             try:
                 if p[0] == '|':
                     # This is a continuation of a previous rule
                     if not lastp:
-                        sys.stderr.write("%s:%d: Misplaced '|'.\n" % (file,dline))
+                        sys.stderr.write("%s:%d: Misplaced '|'.\n" % (file, dline))
                         return -1
                     prodname = lastp
                     if len(p) > 1:
                         syms = p[1:]
                     else:
-                        syms = [ ]
+                        syms = []
                 else:
                     prodname = p[0]
                     lastp = prodname
@@ -800,21 +860,21 @@ def add_function(f):
                     if len(p) > 2:
                         syms = p[2:]
                     else:
-                        syms = [ ]
+                        syms = []
                     if assign != ':' and assign != '::=':
-                        sys.stderr.write("%s:%d: Syntax error. Expected ':'\n" % (file,dline))
+                        sys.stderr.write("%s:%d: Syntax error. Expected ':'\n" % (file, dline))
                         return -1
-                         
- 
-                e = add_production(f,file,dline,prodname,syms)
+
+                e = add_production(f, file, dline, prodname, syms)
                 error += e
 
-                
-            except StandardError:
-                sys.stderr.write("%s:%d: Syntax error in rule '%s'\n" % (file,dline,ps))
+            except Exception:
+                sys.stderr.write("%s:%d: Syntax error in rule '%s'\n" % (file, dline, ps))
                 error -= 1
     else:
-        sys.stderr.write("%s:%d: No documentation string specified in function '%s'\n" % (file,line,f.__name__))
+        sys.stderr.write(
+            "%s:%d: No documentation string specified in function '%s'\n" %
+            (file, line, f.__name__))
     return error
 
 
@@ -826,16 +886,17 @@ def compute_reachable():
     Print a warning for any nonterminals that can't be reached.
     (Unused terminals have already had their warning.)
     '''
-    Reachable = { }
-    for s in Terminals.keys() + Nonterminals.keys():
+    Reachable = {}
+    for s in list(Terminals.keys()) + list(Nonterminals.keys()):
         Reachable[s] = 0
 
-    mark_reachable_from( Productions[0].prod[0], Reachable )
+    mark_reachable_from(Productions[0].prod[0], Reachable)
 
     for s in Nonterminals.keys():
         if not Reachable[s]:
             sys.stderr.write("yacc: Symbol '%s' is unreachable.\n" % s)
 
+
 def mark_reachable_from(s, Reachable):
     '''
     Mark all symbols that are reachable from symbol s.
@@ -844,7 +905,7 @@ def mark_reachable_from(s, Reachable):
         # We've already reached symbol s.
         return
     Reachable[s] = 1
-    for p in Prodnames.get(s,[]):
+    for p in Prodnames.get(s, []):
         for r in p.prod:
             mark_reachable_from(r, Reachable)
 
@@ -855,6 +916,8 @@ def mark_reachable_from(s, Reachable):
 # infinite recursion cycles (grammar rules where there is no possible way
 # to derive a string of only terminals).
 # -----------------------------------------------------------------------------
+
+
 def compute_terminates():
     '''
     Raise an error for any symbols that don't terminate.
@@ -874,9 +937,9 @@ def compute_terminates():
         Terminates[n] = 0
 
     # Then propagate termination until no change:
-    while 1:
+    while True:
         some_change = 0
-        for (n,pl) in Prodnames.items():
+        for (n, pl) in Prodnames.items():
             # Nonterminal n terminates iff any of its productions terminates.
             for p in pl:
                 # Production p terminates iff all of its rhs symbols terminate.
@@ -904,9 +967,9 @@ def compute_terminates():
             break
 
     some_error = 0
-    for (s,terminates) in Terminates.items():
+    for (s, terminates) in Terminates.items():
         if not terminates:
-            if not Prodnames.has_key(s) and not Terminals.has_key(s) and s != 'error':
+            if s not in Prodnames and s not in Terminals and s != 'error':
                 # s is used-but-not-defined, and we've already warned of that,
                 # so it would be overkill to say that it's also non-terminating.
                 pass
@@ -921,42 +984,49 @@ def compute_terminates():
 #
 # This function examines all of the supplied rules to see if they seem valid.
 # -----------------------------------------------------------------------------
+
+
 def verify_productions(cycle_check=1):
     error = 0
     for p in Productions:
-        if not p: continue
+        if not p:
+            continue
 
         for s in p.prod:
-            if not Prodnames.has_key(s) and not Terminals.has_key(s) and s != 'error':
-                sys.stderr.write("%s:%d: Symbol '%s' used, but not defined as a token or a rule.\n" % (p.file,p.line,s))
+            if s not in Prodnames and s not in Terminals and s != 'error':
+                sys.stderr.write(
+                    "%s:%d: Symbol '%s' used, but not defined as a token or a rule.\n" %
+                    (p.file, p.line, s))
                 error = 1
                 continue
 
-    unused_tok = 0 
+    unused_tok = 0
     # Now verify all of the tokens
     if yaccdebug:
         _vf.write("Unused terminals:\n\n")
-    for s,v in Terminals.items():
+    for s, v in Terminals.items():
         if s != 'error' and not v:
             sys.stderr.write("yacc: Warning. Token '%s' defined, but not used.\n" % s)
-            if yaccdebug: _vf.write("   %s\n"% s)
+            if yaccdebug:
+                _vf.write("   %s\n" % s)
             unused_tok += 1
 
     # Print out all of the productions
     if yaccdebug:
         _vf.write("\nGrammar\n\n")
-        for i in range(1,len(Productions)):
+        for i in range(1, len(Productions)):
             _vf.write("Rule %-5d %s\n" % (i, Productions[i]))
-        
+
     unused_prod = 0
     # Verify the use of all productions
-    for s,v in Nonterminals.items():
+    for s, v in Nonterminals.items():
         if not v:
             p = Prodnames[s][0]
-            sys.stderr.write("%s:%d: Warning. Rule '%s' defined, but not used.\n" % (p.file,p.line, s))
+            sys.stderr.write(
+                "%s:%d: Warning. Rule '%s' defined, but not used.\n" %
+                (p.file, p.line, s))
             unused_prod += 1
 
-    
     if unused_tok == 1:
         sys.stderr.write("yacc: Warning. There is 1 unused token.\n")
     if unused_tok > 1:
@@ -969,13 +1039,11 @@ def verify_productions(cycle_check=1):
 
     if yaccdebug:
         _vf.write("\nTerminals, with rules where they appear\n\n")
-        ks = Terminals.keys()
-        ks.sort()
+        ks = sorted(Terminals.keys())
         for k in ks:
             _vf.write("%-20s : %s\n" % (k, " ".join([str(s) for s in Terminals[k]])))
         _vf.write("\nNonterminals, with rules where they appear\n\n")
-        ks = Nonterminals.keys()
-        ks.sort()
+        ks = sorted(Nonterminals.keys())
         for k in ks:
             _vf.write("%-20s : %s\n" % (k, " ".join([str(s) for s in Nonterminals[k]])))
 
@@ -997,18 +1065,20 @@ def verify_productions(cycle_check=1):
 #
 # Creates the list
 #
-#  [E -> . E PLUS E, E -> E . PLUS E, E -> E PLUS . E, E -> E PLUS E . ] 
+#  [E -> . E PLUS E, E -> E . PLUS E, E -> E PLUS . E, E -> E PLUS E . ]
 # -----------------------------------------------------------------------------
 
+
 def build_lritems():
     for p in Productions:
         lastlri = p
         lri = p.lr_item(0)
         i = 0
-        while 1:
+        while True:
             lri = p.lr_item(i)
             lastlri.lr_next = lri
-            if not lri: break
+            if not lri:
+                break
             lri.lr_num = len(LRitems)
             LRitems.append(lri)
             lastlri = lri
@@ -1025,6 +1095,7 @@ def build_lritems():
 # Given a list of precedence rules, add to the precedence table.
 # -----------------------------------------------------------------------------
 
+
 def add_precedence(plist):
     plevel = 0
     error = 0
@@ -1037,11 +1108,11 @@ def add_precedence(plist):
                 sys.stderr.write("yacc: Invalid precedence '%s'\n" % prec)
                 return -1
             for t in terms:
-                if Precedence.has_key(t):
+                if t in Precedence:
                     sys.stderr.write("yacc: Precedence already specified for terminal '%s'\n" % t)
                     error += 1
                     continue
-                Precedence[t] = (prec,plevel)
+                Precedence[t] = (prec, plevel)
         except:
             sys.stderr.write("yacc: Invalid precedence table.\n")
             error += 1
@@ -1055,11 +1126,15 @@ def add_precedence(plist):
 # is the starting symbol.
 # -----------------------------------------------------------------------------
 
+
 def augment_grammar(start=None):
     if not start:
         start = Productions[1].name
-    Productions[0] = Production(name="S'",prod=[start],number=0,len=1,prec=('right',0),func=None)
-    Productions[0].usyms = [ start ]
+    Productions[0] = Production(
+        name="S'", prod=[start],
+        number=0, len=1, prec=('right', 0),
+        func=None)
+    Productions[0].usyms = [start]
     Nonterminals[start].append(0)
 
 
@@ -1074,7 +1149,7 @@ def augment_grammar(start=None):
 def first(beta):
 
     # We are computing First(x1,x2,x3,...,xn)
-    result = [ ]
+    result = []
     for x in beta:
         x_produces_empty = 0
 
@@ -1083,7 +1158,8 @@ def first(beta):
             if f == '<empty>':
                 x_produces_empty = 1
             else:
-                if f not in result: result.append(f)
+                if f not in result:
+                    result.append(f)
 
         if x_produces_empty:
             # We have to consider the next x in beta,
@@ -1108,22 +1184,22 @@ def first(beta):
 def compute_follow(start=None):
     # Add '$end' to the follow list of the start symbol
     for k in Nonterminals.keys():
-        Follow[k] = [ ]
+        Follow[k] = []
 
     if not start:
         start = Productions[1].name
-        
-    Follow[start] = [ '$end' ]
-        
-    while 1:
+
+    Follow[start] = ['$end']
+
+    while True:
         didadd = 0
         for p in Productions[1:]:
             # Here is the production set
             for i in range(len(p.prod)):
                 B = p.prod[i]
-                if Nonterminals.has_key(B):
+                if B in Nonterminals:
                     # Okay. We got a non-terminal in a production
-                    fst = first(p.prod[i+1:])
+                    fst = first(p.prod[i + 1:])
                     hasempty = 0
                     for f in fst:
                         if f != '<empty>' and f not in Follow[B]:
@@ -1131,13 +1207,14 @@ def compute_follow(start=None):
                             didadd = 1
                         if f == '<empty>':
                             hasempty = 1
-                    if hasempty or i == (len(p.prod)-1):
+                    if hasempty or i == (len(p.prod) - 1):
                         # Add elements of follow(a) to follow(b)
                         for f in Follow[p.name]:
                             if f not in Follow[B]:
                                 Follow[B].append(f)
                                 didadd = 1
-        if not didadd: break
+        if not didadd:
+            break
 
     if 0 and yaccdebug:
         _vf.write('\nFollow:\n')
@@ -1149,6 +1226,8 @@ def compute_follow(start=None):
 #
 # Compute the value of FIRST1(X) for all symbols
 # -------------------------------------------------------------------------
+
+
 def compute_first1():
 
     # Terminals:
@@ -1156,7 +1235,7 @@ def compute_first1():
         First[t] = [t]
 
     First['$end'] = ['$end']
-    First['#'] = ['#'] # what's this for?
+    First['#'] = ['#']  # what's this for?
 
     # Nonterminals:
 
@@ -1165,13 +1244,13 @@ def compute_first1():
         First[n] = []
 
     # Then propagate symbols until no change:
-    while 1:
+    while True:
         some_change = 0
         for n in Nonterminals.keys():
             for p in Prodnames[n]:
                 for f in first(p.prod):
                     if f not in First[n]:
-                        First[n].append( f )
+                        First[n].append(f)
                         some_change = 1
         if not some_change:
             break
@@ -1180,7 +1259,7 @@ def compute_first1():
         _vf.write('\nFirst:\n')
         for k in Nonterminals.keys():
             _vf.write("%-20s : %s\n" %
-                (k, " ".join([str(s) for s in First[k]])))
+                      (k, " ".join([str(s) for s in First[k]])))
 
 # -----------------------------------------------------------------------------
 #                           === SLR Generation ===
@@ -1190,15 +1269,17 @@ def compute_first1():
 # -----------------------------------------------------------------------------
 
 # Global variables for the LR parsing engine
+
+
 def lr_init_vars():
     global _lr_action, _lr_goto, _lr_method
     global _lr_goto_cache, _lr0_cidhash
-    
-    _lr_action       = { }        # Action table
-    _lr_goto         = { }        # Goto table
-    _lr_method       = "Unknown"  # LR method used
-    _lr_goto_cache   = { }
-    _lr0_cidhash     = { }
+
+    _lr_action = {}        # Action table
+    _lr_goto = {}        # Goto table
+    _lr_method = "Unknown"  # LR method used
+    _lr_goto_cache = {}
+    _lr0_cidhash = {}
 
 
 # Compute the LR(0) closure operation on I, where I is a set of LR(0) items.
@@ -1206,25 +1287,27 @@ def lr_init_vars():
 
 _add_count = 0       # Counter used to detect cycles
 
+
 def lr0_closure(I):
     global _add_count
-    
+
     _add_count += 1
     prodlist = Productions
-    
-    # Add everything in I to J        
+
+    # Add everything in I to J
     J = I[:]
     didadd = 1
     while didadd:
         didadd = 0
         for j in J:
             for x in j.lrafter:
-                if x.lr0_added == _add_count: continue
+                if x.lr0_added == _add_count:
+                    continue
                 # Add B --> .G to J
                 J.append(x.lr_next)
                 x.lr0_added = _add_count
                 didadd = 1
-               
+
     return J
 
 # Compute the LR(0) goto function goto(I,X) where I is a set
@@ -1234,45 +1317,49 @@ def lr0_closure(I):
 # objects).  With uniqueness, we can later do fast set comparisons using
 # id(obj) instead of element-wise comparison.
 
-def lr0_goto(I,x):
+
+def lr0_goto(I, x):
     # First we look for a previously cached entry
-    g = _lr_goto_cache.get((id(I),x),None)
-    if g: return g
+    g = _lr_goto_cache.get((id(I), x), None)
+    if g:
+        return g
 
     # Now we generate the goto set in a way that guarantees uniqueness
     # of the result
-    
-    s = _lr_goto_cache.get(x,None)
+
+    s = _lr_goto_cache.get(x, None)
     if not s:
-        s = { }
+        s = {}
         _lr_goto_cache[x] = s
 
-    gs = [ ]
+    gs = []
     for p in I:
         n = p.lr_next
         if n and n.lrbefore == x:
-            s1 = s.get(id(n),None)
+            s1 = s.get(id(n), None)
             if not s1:
-                s1 = { }
+                s1 = {}
                 s[id(n)] = s1
             gs.append(n)
             s = s1
-    g = s.get('$end',None)
+    g = s.get('$end', None)
     if not g:
         if gs:
             g = lr0_closure(gs)
             s['$end'] = g
         else:
             s['$end'] = gs
-    _lr_goto_cache[(id(I),x)] = g
+    _lr_goto_cache[(id(I), x)] = g
     return g
 
-_lr0_cidhash = { }
+_lr0_cidhash = {}
 
 # Compute the LR(0) sets of item function
+
+
 def lr0_items():
-    
-    C = [ lr0_closure([Productions[0].lr_next]) ]
+
+    C = [lr0_closure([Productions[0].lr_next])]
     i = 0
     for I in C:
         _lr0_cidhash[id(I)] = i
@@ -1285,18 +1372,20 @@ def lr0_items():
         i += 1
 
         # Collect all of the symbols that could possibly be in the goto(I,X) sets
-        asyms = { }
+        asyms = {}
         for ii in I:
             for s in ii.usyms:
                 asyms[s] = None
 
         for x in asyms.keys():
-            g = lr0_goto(I,x)
-            if not g:  continue
-            if _lr0_cidhash.has_key(id(g)): continue
-            _lr0_cidhash[id(g)] = len(C)            
+            g = lr0_goto(I, x)
+            if not g:
+                continue
+            if id(g) in _lr0_cidhash:
+                continue
+            _lr0_cidhash[id(g)] = len(C)
             C.append(g)
-            
+
     return C
 
 # -----------------------------------------------------------------------------
@@ -1318,7 +1407,7 @@ def lr0_items():
 #  J. Tremblay and P. Sorenson, "The Theory and Practice of Compiler Writing",
 #      McGraw-Hill Book Company, (1985).
 #
-# Note:  This implementation is a complete replacement of the LALR(1) 
+# Note:  This implementation is a complete replacement of the LALR(1)
 #        implementation in PLY-1.x releases.   That version was based on
 #        a less efficient algorithm and it had bugs in its implementation.
 # -----------------------------------------------------------------------------
@@ -1327,23 +1416,26 @@ def lr0_items():
 # compute_nullable_nonterminals()
 #
 # Creates a dictionary containing all of the non-terminals that might produce
-# an empty production.   
+# an empty production.
 # -----------------------------------------------------------------------------
 
+
 def compute_nullable_nonterminals():
     nullable = {}
     num_nullable = 0
-    while 1:
-       for p in Productions[1:]:
-           if p.len == 0:
+    while True:
+        for p in Productions[1:]:
+            if p.len == 0:
                 nullable[p.name] = 1
                 continue
-           for t in p.prod:
-                if not nullable.has_key(t): break
-           else:
+            for t in p.prod:
+                if t not in nullable:
+                    break
+            else:
                 nullable[p.name] = 1
-       if len(nullable) == num_nullable: break
-       num_nullable = len(nullable)
+        if len(nullable) == num_nullable:
+            break
+        num_nullable = len(nullable)
     return nullable
 
 # -----------------------------------------------------------------------------
@@ -1357,16 +1449,18 @@ def compute_nullable_nonterminals():
 # The input C is the set of LR(0) items.
 # -----------------------------------------------------------------------------
 
+
 def find_nonterminal_transitions(C):
-     trans = []
-     for state in range(len(C)):
-         for p in C[state]:
-             if p.lr_index < p.len - 1:
-                  t = (state,p.prod[p.lr_index+1])
-                  if Nonterminals.has_key(t[1]):
-                        if t not in trans: trans.append(t)
-         state = state + 1
-     return trans
+    trans = []
+    for state in range(len(C)):
+        for p in C[state]:
+            if p.lr_index < p.len - 1:
+                t = (state, p.prod[p.lr_index + 1])
+                if t[1] in Nonterminals:
+                    if t not in trans:
+                        trans.append(t)
+        state = state + 1
+    return trans
 
 # -----------------------------------------------------------------------------
 # dr_relation()
@@ -1377,22 +1471,24 @@ def find_nonterminal_transitions(C):
 # Returns a list of terminals.
 # -----------------------------------------------------------------------------
 
-def dr_relation(C,trans,nullable):
-    dr_set = { }
-    state,N = trans
+
+def dr_relation(C, trans, nullable):
+    dr_set = {}
+    state, N = trans
     terms = []
 
-    g = lr0_goto(C[state],N)
+    g = lr0_goto(C[state], N)
     for p in g:
-       if p.lr_index < p.len - 1:
-           a = p.prod[p.lr_index+1]
-           if Terminals.has_key(a):
-               if a not in terms: terms.append(a)
+        if p.lr_index < p.len - 1:
+            a = p.prod[p.lr_index + 1]
+            if a in Terminals:
+                if a not in terms:
+                    terms.append(a)
 
     # This extra bit is to handle the start state
     if state == 0 and N == Productions[0].prod[0]:
-       terms.append('$end')
- 
+        terms.append('$end')
+
     return terms
 
 # -----------------------------------------------------------------------------
@@ -1401,18 +1497,19 @@ def dr_relation(C,trans,nullable):
 # Computes the READS() relation (p,A) READS (t,C).
 # -----------------------------------------------------------------------------
 
+
 def reads_relation(C, trans, empty):
     # Look for empty transitions
     rel = []
     state, N = trans
 
-    g = lr0_goto(C[state],N)
-    j = _lr0_cidhash.get(id(g),-1)
+    g = lr0_goto(C[state], N)
+    j = _lr0_cidhash.get(id(g), -1)
     for p in g:
         if p.lr_index < p.len - 1:
-             a = p.prod[p.lr_index + 1]
-             if empty.has_key(a):
-                  rel.append((j,a))
+            a = p.prod[p.lr_index + 1]
+            if a in empty:
+                rel.append((j, a))
 
     return rel
 
@@ -1422,30 +1519,31 @@ def reads_relation(C, trans, empty):
 # Determines the lookback and includes relations
 #
 # LOOKBACK:
-# 
+#
 # This relation is determined by running the LR(0) state machine forward.
 # For example, starting with a production "N : . A B C", we run it forward
 # to obtain "N : A B C ."   We then build a relationship between this final
 # state and the starting state.   These relationships are stored in a dictionary
-# lookdict.   
+# lookdict.
 #
 # INCLUDES:
 #
-# Computes the INCLUDE() relation (p,A) INCLUDES (p',B).   
+# Computes the INCLUDE() relation (p,A) INCLUDES (p',B).
 #
 # This relation is used to determine non-terminal transitions that occur
 # inside of other non-terminal transition states.   (p,A) INCLUDES (p', B)
 # if the following holds:
 #
-#       B -> LAT, where T -> epsilon and p' -L-> p 
+#       B -> LAT, where T -> epsilon and p' -L-> p
 #
 # L is essentially a prefix (which may be empty), T is a suffix that must be
 # able to derive an empty string.  State p' must lead to state p with the string L.
-# 
+#
 # -----------------------------------------------------------------------------
 
-def compute_lookback_includes(C,trans,nullable):
-    
+
+def compute_lookback_includes(C, trans, nullable):
+
     lookdict = {}          # Dictionary of lookback relations
     includedict = {}       # Dictionary of include relations
 
@@ -1453,58 +1551,65 @@ def compute_lookback_includes(C,trans,nullable):
     dtrans = {}
     for t in trans:
         dtrans[t] = 1
-    
+
     # Loop over all transitions and compute lookbacks and includes
-    for state,N in trans:
+    for state, N in trans:
         lookb = []
         includes = []
         for p in C[state]:
-            if p.name != N: continue
-        
+            if p.name != N:
+                continue
+
             # Okay, we have a name match.  We now follow the production all the way
             # through the state machine until we get the . on the right hand side
 
             lr_index = p.lr_index
             j = state
             while lr_index < p.len - 1:
-                 lr_index = lr_index + 1
-                 t = p.prod[lr_index]
-
-                 # Check to see if this symbol and state are a non-terminal transition
-                 if dtrans.has_key((j,t)):
-                       # Yes.  Okay, there is some chance that this is an includes relation
-                       # the only way to know for certain is whether the rest of the 
-                       # production derives empty
-
-                       li = lr_index + 1
-                       while li < p.len:
-                            if Terminals.has_key(p.prod[li]): break      # No forget it
-                            if not nullable.has_key(p.prod[li]): break
-                            li = li + 1
-                       else:
-                            # Appears to be a relation between (j,t) and (state,N)
-                            includes.append((j,t))
-
-                 g = lr0_goto(C[j],t)               # Go to next set             
-                 j = _lr0_cidhash.get(id(g),-1)     # Go to next state
-             
+                lr_index = lr_index + 1
+                t = p.prod[lr_index]
+
+                # Check to see if this symbol and state are a non-terminal transition
+                if (j, t) in dtrans:
+                    # Yes.  Okay, there is some chance that this is an includes relation
+                    # the only way to know for certain is whether the rest of the
+                    # production derives empty
+
+                    li = lr_index + 1
+                    while li < p.len:
+                        if p.prod[li] in Terminals:
+                            break      # No forget it
+                        if p.prod[li] not in nullable:
+                            break
+                        li = li + 1
+                    else:
+                        # Appears to be a relation between (j,t) and (state,N)
+                        includes.append((j, t))
+
+                g = lr0_goto(C[j], t)               # Go to next set
+                j = _lr0_cidhash.get(id(g), -1)     # Go to next state
+
             # When we get here, j is the final state, now we have to locate the production
             for r in C[j]:
-                 if r.name != p.name: continue
-                 if r.len != p.len:   continue
-                 i = 0
-                 # This look is comparing a production ". A B C" with "A B C ."
-                 while i < r.lr_index:
-                      if r.prod[i] != p.prod[i+1]: break
-                      i = i + 1
-                 else:
-                      lookb.append((j,r))
+                if r.name != p.name:
+                    continue
+                if r.len != p.len:
+                    continue
+                i = 0
+                # This look is comparing a production ". A B C" with "A B C ."
+                while i < r.lr_index:
+                    if r.prod[i] != p.prod[i + 1]:
+                        break
+                    i = i + 1
+                else:
+                    lookb.append((j, r))
         for i in includes:
-             if not includedict.has_key(i): includedict[i] = []
-             includedict[i].append((state,N))
-        lookdict[(state,N)] = lookb
+            if i not in includedict:
+                includedict[i] = []
+            includedict[i].append((state, N))
+        lookdict[(state, N)] = lookb
 
-    return lookdict,includedict
+    return lookdict, includedict
 
 # -----------------------------------------------------------------------------
 # digraph()
@@ -1523,37 +1628,41 @@ def compute_lookback_includes(C,trans,nullable):
 #          FP   - Set-valued function
 # ------------------------------------------------------------------------------
 
-def digraph(X,R,FP):
-    N = { }
+
+def digraph(X, R, FP):
+    N = {}
     for x in X:
-       N[x] = 0
+        N[x] = 0
     stack = []
-    F = { }
+    F = {}
     for x in X:
-        if N[x] == 0: traverse(x,N,stack,F,X,R,FP)
+        if N[x] == 0:
+            traverse(x, N, stack, F, X, R, FP)
     return F
 
-def traverse(x,N,stack,F,X,R,FP):
+
+def traverse(x, N, stack, F, X, R, FP):
     stack.append(x)
     d = len(stack)
     N[x] = d
     F[x] = FP(x)             # F(X) <- F'(x)
-    
+
     rel = R(x)               # Get y's related to x
     for y in rel:
         if N[y] == 0:
-             traverse(y,N,stack,F,X,R,FP)
-        N[x] = min(N[x],N[y])
-        for a in F.get(y,[]):
-            if a not in F[x]: F[x].append(a)
+            traverse(y, N, stack, F, X, R, FP)
+        N[x] = min(N[x], N[y])
+        for a in F.get(y, []):
+            if a not in F[x]:
+                F[x].append(a)
     if N[x] == d:
-       N[stack[-1]] = sys.maxint
-       F[stack[-1]] = F[x]
-       element = stack.pop()
-       while element != x:
-           N[stack[-1]] = sys.maxint
-           F[stack[-1]] = F[x]
-           element = stack.pop()
+        N[stack[-1]] = sys.maxsize
+        F[stack[-1]] = F[x]
+        element = stack.pop()
+        while element != x:
+            N[stack[-1]] = sys.maxsize
+            F[stack[-1]] = F[x]
+            element = stack.pop()
 
 # -----------------------------------------------------------------------------
 # compute_read_sets()
@@ -1567,38 +1676,40 @@ def traverse(x,N,stack,F,X,R,FP):
 # Returns a set containing the read sets
 # -----------------------------------------------------------------------------
 
+
 def compute_read_sets(C, ntrans, nullable):
-    FP = lambda x: dr_relation(C,x,nullable)
-    R =  lambda x: reads_relation(C,x,nullable)
-    F = digraph(ntrans,R,FP)
+    FP = lambda x: dr_relation(C, x, nullable)
+    R = lambda x: reads_relation(C, x, nullable)
+    F = digraph(ntrans, R, FP)
     return F
 
 # -----------------------------------------------------------------------------
 # compute_follow_sets()
 #
-# Given a set of LR(0) items, a set of non-terminal transitions, a readset, 
+# Given a set of LR(0) items, a set of non-terminal transitions, a readset,
 # and an include set, this function computes the follow sets
 #
 # Follow(p,A) = Read(p,A) U U {Follow(p',B) | (p,A) INCLUDES (p',B)}
 #
-# Inputs:    
+# Inputs:
 #            ntrans     = Set of nonterminal transitions
 #            readsets   = Readset (previously computed)
 #            inclsets   = Include sets (previously computed)
 #
-# Returns a set containing the follow sets      
+# Returns a set containing the follow sets
 # -----------------------------------------------------------------------------
 
-def compute_follow_sets(ntrans,readsets,inclsets):
-     FP = lambda x: readsets[x]
-     R  = lambda x: inclsets.get(x,[])
-     F = digraph(ntrans,R,FP)
-     return F
+
+def compute_follow_sets(ntrans, readsets, inclsets):
+    FP = lambda x: readsets[x]
+    R = lambda x: inclsets.get(x, [])
+    F = digraph(ntrans, R, FP)
+    return F
 
 # -----------------------------------------------------------------------------
 # add_lookaheads()
 #
-# Attaches the lookahead symbols to grammar rules. 
+# Attaches the lookahead symbols to grammar rules.
 #
 # Inputs:    lookbacks         -  Set of lookback relations
 #            followset         -  Computed follow set
@@ -1607,15 +1718,17 @@ def compute_follow_sets(ntrans,readsets,inclsets):
 # in the lookbacks set
 # -----------------------------------------------------------------------------
 
-def add_lookaheads(lookbacks,followset):
-    for trans,lb in lookbacks.items():
+
+def add_lookaheads(lookbacks, followset):
+    for trans, lb in lookbacks.items():
         # Loop over productions in lookback
-        for state,p in lb:
-             if not p.lookaheads.has_key(state):
-                  p.lookaheads[state] = []
-             f = followset.get(trans,[])
-             for a in f:
-                  if a not in p.lookaheads[state]: p.lookaheads[state].append(a)
+        for state, p in lb:
+            if state not in p.lookaheads:
+                p.lookaheads[state] = []
+            f = followset.get(trans, [])
+            for a in f:
+                if a not in p.lookaheads[state]:
+                    p.lookaheads[state].append(a)
 
 # -----------------------------------------------------------------------------
 # add_lalr_lookaheads()
@@ -1624,6 +1737,7 @@ def add_lookaheads(lookbacks,followset):
 # with LALR parsing
 # -----------------------------------------------------------------------------
 
+
 def add_lalr_lookaheads(C):
     # Determine all of the nullable nonterminals
     nullable = compute_nullable_nonterminals()
@@ -1632,40 +1746,42 @@ def add_lalr_lookaheads(C):
     trans = find_nonterminal_transitions(C)
 
     # Compute read sets
-    readsets = compute_read_sets(C,trans,nullable)
+    readsets = compute_read_sets(C, trans, nullable)
 
     # Compute lookback/includes relations
-    lookd, included = compute_lookback_includes(C,trans,nullable)
+    lookd, included = compute_lookback_includes(C, trans, nullable)
 
     # Compute LALR FOLLOW sets
-    followsets = compute_follow_sets(trans,readsets,included)
-    
+    followsets = compute_follow_sets(trans, readsets, included)
+
     # Add all of the lookaheads
-    add_lookaheads(lookd,followsets)
+    add_lookaheads(lookd, followsets)
 
 # -----------------------------------------------------------------------------
 # lr_parse_table()
 #
 # This function constructs the parse tables for SLR or LALR
 # -----------------------------------------------------------------------------
+
+
 def lr_parse_table(method):
     global _lr_method
     goto = _lr_goto           # Goto array
     action = _lr_action       # Action array
-    actionp = { }             # Action production array (temporary)
+    actionp = {}             # Action production array (temporary)
 
     _lr_method = method
-    
+
     n_srconflict = 0
     n_rrconflict = 0
 
     if yaccdebug:
-        sys.stderr.write("yacc: Generating %s parsing table...\n" % method)        
+        sys.stderr.write("yacc: Generating %s parsing table...\n" % method)
         _vf.write("\n\nParsing method: %s\n\n" % method)
-        
+
     # Step 1: Construct C = { I0, I1, ... IN}, collection of LR(0) items
     # This determines the number of states
-    
+
     C = lr0_items()
 
     if method == 'LALR':
@@ -1675,8 +1791,8 @@ def lr_parse_table(method):
     st = 0
     for I in C:
         # Loop over each production in I
-        actlist = [ ]              # List of actions
-        
+        actlist = []              # List of actions
+
         if yaccdebug:
             _vf.write("\nstate %d\n\n" % st)
             for p in I:
@@ -1688,8 +1804,8 @@ def lr_parse_table(method):
                 if p.prod[-1] == ".":
                     if p.name == "S'":
                         # Start symbol. Accept!
-                        action[st,"$end"] = 0
-                        actionp[st,"$end"] = p
+                        action[st, "$end"] = 0
+                        actionp[st, "$end"] = p
                     else:
                         # We are at the end of a production.  Reduce!
                         if method == 'LALR':
@@ -1697,59 +1813,72 @@ def lr_parse_table(method):
                         else:
                             laheads = Follow[p.name]
                         for a in laheads:
-                            actlist.append((a,p,"reduce using rule %d (%s)" % (p.number,p)))
-                            r = action.get((st,a),None)
+                            actlist.append((a, p, "reduce using rule %d (%s)" % (p.number, p)))
+                            r = action.get((st, a), None)
                             if r is not None:
                                 # Whoa. Have a shift/reduce or reduce/reduce conflict
                                 if r > 0:
                                     # Need to decide on shift or reduce here
                                     # By default we favor shifting. Need to add
                                     # some precedence rules here.
-                                    sprec,slevel = Productions[actionp[st,a].number].prec                                    
-                                    rprec,rlevel = Precedence.get(a,('right',0))
-                                    if (slevel < rlevel) or ((slevel == rlevel) and (rprec == 'left')):
-                                        # We really need to reduce here.  
-                                        action[st,a] = -p.number
-                                        actionp[st,a] = p
+                                    sprec, slevel = Productions[actionp[st, a].number].prec
+                                    rprec, rlevel = Precedence.get(a, ('right', 0))
+                                    if (slevel < rlevel) or (
+                                            (slevel == rlevel) and (rprec == 'left')):
+                                        # We really need to reduce here.
+                                        action[st, a] = -p.number
+                                        actionp[st, a] = p
                                         if not slevel and not rlevel:
-                                            _vfc.write("shift/reduce conflict in state %d resolved as reduce.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as reduce.\n" % a)
+                                            _vfc.write(
+                                                "shift/reduce conflict in state %d resolved as reduce.\n" % st)
+                                            _vf.write(
+                                                "  ! shift/reduce conflict for %s resolved as reduce.\n" % a)
                                             n_srconflict += 1
                                     elif (slevel == rlevel) and (rprec == 'nonassoc'):
-                                        action[st,a] = None
+                                        action[st, a] = None
                                     else:
                                         # Hmmm. Guess we'll keep the shift
                                         if not rlevel:
-                                            _vfc.write("shift/reduce conflict in state %d resolved as shift.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as shift.\n" % a)
-                                            n_srconflict +=1                                    
+                                            _vfc.write(
+                                                "shift/reduce conflict in state %d resolved as shift.\n" % st)
+                                            _vf.write(
+                                                "  ! shift/reduce conflict for %s resolved as shift.\n" % a)
+                                            n_srconflict += 1
                                 elif r < 0:
                                     # Reduce/reduce conflict.   In this case, we favor the rule
                                     # that was defined first in the grammar file
                                     oldp = Productions[-r]
                                     pp = Productions[p.number]
                                     if oldp.line > pp.line:
-                                        action[st,a] = -p.number
-                                        actionp[st,a] = p
+                                        action[st, a] = -p.number
+                                        actionp[st, a] = p
                                     # sys.stderr.write("Reduce/reduce conflict in state %d\n" % st)
                                     n_rrconflict += 1
-                                    _vfc.write("reduce/reduce conflict in state %d resolved using rule %d (%s).\n" % (st, actionp[st,a].number, actionp[st,a]))
-                                    _vf.write("  ! reduce/reduce conflict for %s resolved using rule %d (%s).\n" % (a,actionp[st,a].number, actionp[st,a]))
+                                    _vfc.write(
+                                        "reduce/reduce conflict in state %d resolved using rule %d (%s).\n" %
+                                        (st, actionp[
+                                            st, a].number, actionp[
+                                            st, a]))
+                                    _vf.write(
+                                        "  ! reduce/reduce conflict for %s resolved using rule %d (%s).\n" %
+                                        (a, actionp[
+                                            st, a].number, actionp[
+                                            st, a]))
                                 else:
                                     sys.stderr.write("Unknown conflict in state %d\n" % st)
                             else:
-                                action[st,a] = -p.number
-                                actionp[st,a] = p
+                                action[st, a] = -p.number
+                                actionp[st, a] = p
                 else:
                     i = p.lr_index
-                    a = p.prod[i+1]       # Get symbol right after the "."
-                    if Terminals.has_key(a):
-                        g = lr0_goto(I,a)
-                        j = _lr0_cidhash.get(id(g),-1)
+                    a = p.prod[i + 1]       # Get symbol right after the "."
+                    if a in Terminals:
+                        g = lr0_goto(I, a)
+                        j = _lr0_cidhash.get(id(g), -1)
                         if j >= 0:
                             # We are in a shift state
-                            actlist.append((a,p,"shift and go to state %d" % j))
-                            r = action.get((st,a),None)
+                            actlist.append((a, p, "shift and go to state %d" % j))
+                            r = action.get((st, a), None)
                             if r is not None:
                                 # Whoa have a shift/reduce or shift/shift conflict
                                 if r > 0:
@@ -1760,65 +1889,70 @@ def lr_parse_table(method):
                                     #   -  if precedence of reduce rule is higher, we reduce.
                                     #   -  if precedence of reduce is same and left assoc, we reduce.
                                     #   -  otherwise we shift
-                                    rprec,rlevel = Productions[actionp[st,a].number].prec
-                                    sprec,slevel = Precedence.get(a,('right',0))
-                                    if (slevel > rlevel) or ((slevel == rlevel) and (rprec != 'left')):
+                                    rprec, rlevel = Productions[actionp[st, a].number].prec
+                                    sprec, slevel = Precedence.get(a, ('right', 0))
+                                    if (slevel > rlevel) or (
+                                            (slevel == rlevel) and (rprec != 'left')):
                                         # We decide to shift here... highest precedence to shift
-                                        action[st,a] = j
-                                        actionp[st,a] = p
+                                        action[st, a] = j
+                                        actionp[st, a] = p
                                         if not rlevel:
                                             n_srconflict += 1
-                                            _vfc.write("shift/reduce conflict in state %d resolved as shift.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as shift.\n" % a)
+                                            _vfc.write(
+                                                "shift/reduce conflict in state %d resolved as shift.\n" % st)
+                                            _vf.write(
+                                                "  ! shift/reduce conflict for %s resolved as shift.\n" % a)
                                     elif (slevel == rlevel) and (rprec == 'nonassoc'):
-                                        action[st,a] = None
-                                    else:                                            
+                                        action[st, a] = None
+                                    else:
                                         # Hmmm. Guess we'll keep the reduce
                                         if not slevel and not rlevel:
-                                            n_srconflict +=1
-                                            _vfc.write("shift/reduce conflict in state %d resolved as reduce.\n" % st)
-                                            _vf.write("  ! shift/reduce conflict for %s resolved as reduce.\n" % a)
-                                            
+                                            n_srconflict += 1
+                                            _vfc.write(
+                                                "shift/reduce conflict in state %d resolved as reduce.\n" % st)
+                                            _vf.write(
+                                                "  ! shift/reduce conflict for %s resolved as reduce.\n" % a)
+
                                 else:
                                     sys.stderr.write("Unknown conflict in state %d\n" % st)
                             else:
-                                action[st,a] = j
-                                actionp[st,a] = p
-                                
-            except StandardError as e:
-                raise YaccError, "Hosed in lr_parse_table", e
+                                action[st, a] = j
+                                actionp[st, a] = p
+
+            except Exception as e:
+                raise YaccError("Hosed in lr_parse_table").with_traceback(e)
 
         # Print the actions associated with each terminal
         if yaccdebug:
-          _actprint = { }
-          for a,p,m in actlist:
-            if action.has_key((st,a)):
-                if p is actionp[st,a]:
-                    _vf.write("    %-15s %s\n" % (a,m))
-                    _actprint[(a,m)] = 1
-          _vf.write("\n")
-          for a,p,m in actlist:
-            if action.has_key((st,a)):
-                if p is not actionp[st,a]:
-                    if not _actprint.has_key((a,m)):
-                        _vf.write("  ! %-15s [ %s ]\n" % (a,m))
-                        _actprint[(a,m)] = 1
-            
+            _actprint = {}
+            for a, p, m in actlist:
+                if (st, a) in action:
+                    if p is actionp[st, a]:
+                        _vf.write("    %-15s %s\n" % (a, m))
+                        _actprint[(a, m)] = 1
+            _vf.write("\n")
+            for a, p, m in actlist:
+                if (st, a) in action:
+                    if p is not actionp[st, a]:
+                        if (a, m) not in _actprint:
+                            _vf.write("  ! %-15s [ %s ]\n" % (a, m))
+                            _actprint[(a, m)] = 1
+
         # Construct the goto table for this state
         if yaccdebug:
             _vf.write("\n")
-        nkeys = { }
+        nkeys = {}
         for ii in I:
             for s in ii.usyms:
-                if Nonterminals.has_key(s):
+                if s in Nonterminals:
                     nkeys[s] = None
         for n in nkeys.keys():
-            g = lr0_goto(I,n)
-            j = _lr0_cidhash.get(id(g),-1)            
+            g = lr0_goto(I, n)
+            j = _lr0_cidhash.get(id(g), -1)
             if j >= 0:
-                goto[st,n] = j
+                goto[st, n] = j
                 if yaccdebug:
-                    _vf.write("    %-30s shift and go to state %d\n" % (n,j))
+                    _vf.write("    %-30s shift and go to state %d\n" % (n, j))
 
         st += 1
 
@@ -1842,10 +1976,11 @@ def lr_parse_table(method):
 # This function writes the LR parsing tables to a file
 # -----------------------------------------------------------------------------
 
-def lr_write_tables(modulename=tab_module,outputdir=''):
-    filename = os.path.join(outputdir,modulename) + ".py"
+
+def lr_write_tables(modulename=tab_module, outputdir=''):
+    filename = os.path.join(outputdir, modulename) + ".py"
     try:
-        f = open(filename,"w")
+        f = open(filename, "w")
 
         f.write("""
 # %s
@@ -1858,28 +1993,28 @@ _lr_signature = %s
 
         # Change smaller to 0 to go back to original tables
         smaller = 1
-                
+
         # Factor out names to try and make smaller
         if smaller:
-            items = { }
-        
-            for k,v in _lr_action.items():
+            items = {}
+
+            for k, v in _lr_action.items():
                 i = items.get(k[1])
                 if not i:
-                    i = ([],[])
+                    i = ([], [])
                     items[k[1]] = i
                 i[0].append(k[0])
                 i[1].append(v)
 
             f.write("\n_lr_action_items = {")
-            for k,v in items.items():
+            for k, v in items.items():
                 f.write("%r:([" % k)
                 for i in v[0]:
                     f.write("%r," % i)
                 f.write("],[")
                 for i in v[1]:
                     f.write("%r," % i)
-                           
+
                 f.write("]),")
             f.write("}\n")
 
@@ -1890,34 +2025,34 @@ for _k, _v in _lr_action_items.items():
        _lr_action[(_x,_k)] = _y
 del _lr_action_items
 """)
-            
+
         else:
-            f.write("\n_lr_action = { ");
-            for k,v in _lr_action.items():
-                f.write("(%r,%r):%r," % (k[0],k[1],v))
-            f.write("}\n");
+            f.write("\n_lr_action = { ")
+            for k, v in _lr_action.items():
+                f.write("(%r,%r):%r," % (k[0], k[1], v))
+            f.write("}\n")
 
         if smaller:
             # Factor out names to try and make smaller
-            items = { }
-        
-            for k,v in _lr_goto.items():
+            items = {}
+
+            for k, v in _lr_goto.items():
                 i = items.get(k[1])
                 if not i:
-                    i = ([],[])
+                    i = ([], [])
                     items[k[1]] = i
                 i[0].append(k[0])
                 i[1].append(v)
 
             f.write("\n_lr_goto_items = {")
-            for k,v in items.items():
+            for k, v in items.items():
                 f.write("%r:([" % k)
                 for i in v[0]:
                     f.write("%r," % i)
                 f.write("],[")
                 for i in v[1]:
                     f.write("%r," % i)
-                           
+
                 f.write("]),")
             f.write("}\n")
 
@@ -1929,45 +2064,47 @@ for _k, _v in _lr_goto_items.items():
 del _lr_goto_items
 """)
         else:
-            f.write("\n_lr_goto = { ");
-            for k,v in _lr_goto.items():
-                f.write("(%r,%r):%r," % (k[0],k[1],v))                    
-            f.write("}\n");
+            f.write("\n_lr_goto = { ")
+            for k, v in _lr_goto.items():
+                f.write("(%r,%r):%r," % (k[0], k[1], v))
+            f.write("}\n")
 
         # Write production table
         f.write("_lr_productions = [\n")
         for p in Productions:
             if p:
                 if (p.func):
-                    f.write("  (%r,%d,%r,%r,%d),\n" % (p.name, p.len, p.func.__name__,p.file,p.line))
+                    f.write("  (%r,%d,%r,%r,%d),\n" %
+                            (p.name, p.len, p.func.__name__, p.file, p.line))
                 else:
                     f.write("  (%r,%d,None,None,None),\n" % (p.name, p.len))
             else:
                 f.write("  None,\n")
         f.write("]\n")
-        
+
         f.close()
 
     except IOError as e:
-        print "Unable to create '%s'" % filename
-        print e
+        print("Unable to create '%s'" % filename)
+        print(e)
         return
 
-def lr_read_tables(module=tab_module,optimize=0):
+
+def lr_read_tables(module=tab_module, optimize=0):
     global _lr_action, _lr_goto, _lr_productions, _lr_method
     try:
-        exec "import %s as parsetab" % module
-        
+        fmod = imp.find_module('parsetab', sys.path + ['ctypesgencore/parser/', ])
+        parsetab = imp.load_module('parsetab', *fmod)
         if (optimize) or (Signature.digest() == parsetab._lr_signature):
             _lr_action = parsetab._lr_action
-            _lr_goto   = parsetab._lr_goto
+            _lr_goto = parsetab._lr_goto
             _lr_productions = parsetab._lr_productions
             _lr_method = parsetab._lr_method
             return 1
         else:
             return 0
-        
-    except (ImportError,AttributeError):
+
+    except (ImportError, AttributeError):
         return 0
 
 
@@ -1975,10 +2112,7 @@ def lr_read_tables(module=tab_module,optimize=0):
 # it's a little funky because I want to preserve backwards compatibility
 # with Python 2.0 where types.ObjectType is undefined.
 
-try:
-   _INSTANCETYPE = (types.InstanceType, types.ObjectType)
-except AttributeError:
-   _INSTANCETYPE = types.InstanceType
+_INSTANCETYPE = getattr(types, 'InstanceType', object)
 
 # -----------------------------------------------------------------------------
 # yacc(module)
@@ -1987,54 +2121,58 @@ except AttributeError:
 # -----------------------------------------------------------------------------
 
 # <ah> Add parserclass parameter.
-def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module, start=None, check_recursion=1, optimize=0,write_tables=1,debugfile=debug_file,outputdir='', parserclass=Parser):
+
+
+def yacc(
+        method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module, start=None,
+        check_recursion=1, optimize=0, write_tables=1, debugfile=debug_file, outputdir='',
+        parserclass=Parser):
     global yaccdebug
     yaccdebug = debug
-    
+
     initialize_vars()
-    files = { }
+    files = {}
     error = 0
 
-
     # Add parsing method to signature
     Signature.update(method)
-    
+
     # If a "module" parameter was supplied, extract its dictionary.
     # Note: a module may in fact be an instance as well.
-    
+
     if module:
         # User supplied a module object.
         if isinstance(module, types.ModuleType):
             ldict = module.__dict__
         elif isinstance(module, _INSTANCETYPE):
-            _items = [(k,getattr(module,k)) for k in dir(module)]
-            ldict = { }
+            _items = [(k, getattr(module, k)) for k in dir(module)]
+            ldict = {}
             for i in _items:
                 ldict[i[0]] = i[1]
         else:
-            raise ValueError,"Expected a module"
-        
+            raise ValueError("Expected a module")
+
     else:
         # No module given.  We might be able to get information from the caller.
         # Throw an exception and unwind the traceback to get the globals
-        
+
         try:
             raise RuntimeError
         except RuntimeError:
-            e,b,t = sys.exc_info()
+            e, b, t = sys.exc_info()
             f = t.tb_frame
             f = f.f_back           # Walk out to our calling function
             ldict = f.f_globals    # Grab its globals dictionary
 
     # Add starting symbol to signature
     if not start:
-        start = ldict.get("start",None)
+        start = ldict.get("start", None)
     if start:
         Signature.update(start)
 
     # If running in optimized mode.  We're going to
 
-    if (optimize and lr_read_tables(tabmodule,1)):
+    if (optimize and lr_read_tables(tabmodule, 1)):
         # Read parse table
         del Productions[:]
         for p in _lr_productions:
@@ -2043,116 +2181,119 @@ def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module,
             else:
                 m = MiniProduction()
                 m.name = p[0]
-                m.len  = p[1]
+                m.len = p[1]
                 m.file = p[3]
                 m.line = p[4]
                 if p[2]:
                     m.func = ldict[p[2]]
                 Productions.append(m)
-        
+
     else:
         # Get the tokens map
-        if (module and isinstance(module,_INSTANCETYPE)):
-            tokens = getattr(module,"tokens",None)
+        if (module and isinstance(module, _INSTANCETYPE)):
+            tokens = getattr(module, "tokens", None)
         else:
-            tokens = ldict.get("tokens",None)
-    
+            tokens = ldict.get("tokens", None)
+
         if not tokens:
-            raise YaccError,"module does not define a list 'tokens'"
-        if not (isinstance(tokens,types.ListType) or isinstance(tokens,types.TupleType)):
-            raise YaccError,"tokens must be a list or tuple."
+            raise YaccError("module does not define a list 'tokens'")
+        if not (isinstance(tokens, list) or isinstance(tokens, tuple)):
+            raise YaccError("tokens must be a list or tuple.")
 
         # Check to see if a requires dictionary is defined.
-        requires = ldict.get("require",None)
+        requires = ldict.get("require", None)
         if requires:
-            if not (isinstance(requires,types.DictType)):
-                raise YaccError,"require must be a dictionary."
+            if not (isinstance(requires, dict)):
+                raise YaccError("require must be a dictionary.")
 
-            for r,v in requires.items():
+            for r, v in requires.items():
                 try:
-                    if not (isinstance(v,types.ListType)):
+                    if not (isinstance(v, list)):
                         raise TypeError
                     v1 = [x.split(".") for x in v]
                     Requires[r] = v1
-                except StandardError:
-                    print "Invalid specification for rule '%s' in require. Expected a list of strings" % r            
+                except Exception:
+                    print("Invalid specification for rule '%s' in require. Expected a list of strings" % r)
 
-        
         # Build the dictionary of terminals.  We a record a 0 in the
         # dictionary to track whether or not a terminal is actually
         # used in the grammar
 
         if 'error' in tokens:
-            print "yacc: Illegal token 'error'.  Is a reserved word."
-            raise YaccError,"Illegal token name"
+            print("yacc: Illegal token 'error'.  Is a reserved word.")
+            raise YaccError("Illegal token name")
 
         for n in tokens:
-            if Terminals.has_key(n):
-                print "yacc: Warning. Token '%s' multiply defined." % n
-            Terminals[n] = [ ]
+            if n in Terminals:
+                print("yacc: Warning. Token '%s' multiply defined." % n)
+            Terminals[n] = []
 
-        Terminals['error'] = [ ]
+        Terminals['error'] = []
 
         # Get the precedence map (if any)
-        prec = ldict.get("precedence",None)
+        prec = ldict.get("precedence", None)
         if prec:
-            if not (isinstance(prec,types.ListType) or isinstance(prec,types.TupleType)):
-                raise YaccError,"precedence must be a list or tuple."
+            if not (isinstance(prec, list) or isinstance(prec, tuple)):
+                raise YaccError("precedence must be a list or tuple.")
             add_precedence(prec)
             Signature.update(repr(prec))
 
         for n in tokens:
-            if not Precedence.has_key(n):
-                Precedence[n] = ('right',0)         # Default, right associative, 0 precedence
+            if n not in Precedence:
+                Precedence[n] = ('right', 0)         # Default, right associative, 0 precedence
 
         # Look for error handler
-        ef = ldict.get('p_error',None)
+        ef = ldict.get('p_error', None)
         if ef:
-            if isinstance(ef,types.FunctionType):
+            if isinstance(ef, types.FunctionType):
                 ismethod = 0
             elif isinstance(ef, types.MethodType):
                 ismethod = 1
             else:
-                raise YaccError,"'p_error' defined, but is not a function or method."                
-            eline = ef.func_code.co_firstlineno
-            efile = ef.func_code.co_filename
+                raise YaccError("'p_error' defined, but is not a function or method.")
+            eline = get_func_code(ef).co_firstlineno
+            efile = get_func_code(ef).co_filename
             files[efile] = None
 
-            if (ef.func_code.co_argcount != 1+ismethod):
-                raise YaccError,"%s:%d: p_error() requires 1 argument." % (efile,eline)
+            if (get_func_code(ef).co_argcount != 1 + ismethod):
+                raise YaccError("%s:%d: p_error() requires 1 argument." % (efile, eline))
             global Errorfunc
             Errorfunc = ef
         else:
-            print "yacc: Warning. no p_error() function is defined."
-            
+            print("yacc: Warning. no p_error() function is defined.")
+
         # Get the list of built-in functions with p_ prefix
-        symbols = [ldict[f] for f in ldict.keys()
-               if (type(ldict[f]) in (types.FunctionType, types.MethodType) and ldict[f].__name__[:2] == 'p_'
-                   and ldict[f].__name__ != 'p_error')]
+        symbols = [
+            ldict[f] for f in ldict.keys() if (
+                type(
+                    ldict[f]) in (
+                    types.FunctionType,
+                    types.MethodType) and ldict[f].__name__[
+                    :2] == 'p_' and ldict[f].__name__ != 'p_error')]
 
         # Check for non-empty symbols
         if len(symbols) == 0:
-            raise YaccError,"no rules of the form p_rulename are defined."
-    
+            raise YaccError("no rules of the form p_rulename are defined.")
+
         # Sort the symbols by line number
-        symbols.sort(lambda x,y: cmp(x.func_code.co_firstlineno,y.func_code.co_firstlineno))
+        symbols.sort(lambda x, y: cmp(get_func_code(x).co_firstlineno, get_func_code(y).co_firstlineno))
 
         # Add all of the symbols to the grammar
         for f in symbols:
             if (add_function(f)) < 0:
                 error += 1
             else:
-                files[f.func_code.co_filename] = None
+                files[get_func_code(f).co_filename] = None
 
         # Make a signature of the docstrings
         for f in symbols:
             if f.__doc__:
                 Signature.update(f.__doc__)
-    
+
         lr_init_vars()
 
         if error:
-            raise YaccError,"Unable to construct parser."
+            raise YaccError("Unable to construct parser.")
 
         if not lr_read_tables(tabmodule):
 
@@ -2164,39 +2305,43 @@ def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module,
             # Validate dictionary
             validate_dict(ldict)
 
-            if start and not Prodnames.has_key(start):
-                raise YaccError,"Bad starting symbol '%s'" % start
-        
-            augment_grammar(start)    
+            if start and start not in Prodnames:
+                raise YaccError("Bad starting symbol '%s'" % start)
+
+            augment_grammar(start)
             error = verify_productions(cycle_check=check_recursion)
-            otherfunc = [ldict[f] for f in ldict.keys()
-               if (type(f) in (types.FunctionType,types.MethodType) and ldict[f].__name__[:2] != 'p_')]
+            otherfunc = [
+                ldict[f] for f in ldict.keys() if (
+                    type(f) in (
+                        types.FunctionType,
+                        types.MethodType) and ldict[f].__name__[
+                        :2] != 'p_')]
 
             if error:
-                raise YaccError,"Unable to construct parser."
-            
+                raise YaccError("Unable to construct parser.")
+
             build_lritems()
             compute_first1()
             compute_follow(start)
-        
-            if method in ['SLR','LALR']:
+
+            if method in ['SLR', 'LALR']:
                 lr_parse_table(method)
             else:
-                raise YaccError, "Unknown parsing method '%s'" % method
+                raise YaccError("Unknown parsing method '%s'" % method)
 
             if write_tables:
-                lr_write_tables(tabmodule,outputdir)        
-    
+                lr_write_tables(tabmodule, outputdir)
+
             if yaccdebug:
                 try:
-                    f = open(os.path.join(outputdir,debugfile),"w")
+                    f = open(os.path.join(outputdir, debugfile), "w")
                     f.write(_vfc.getvalue())
                     f.write("\n\n")
                     f.write(_vf.getvalue())
                     f.close()
                 except IOError as e:
-                    print "yacc: can't create '%s'" % debugfile,e
-        
+                    print("yacc: can't create '%s'" % debugfile, e)
+
     # Made it here.   Create a parser object and set up its internal state.
     # Set global parse() method to bound method of parser object.
 
@@ -2204,7 +2349,7 @@ def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module,
     g.productions = Productions
     g.errorfunc = Errorfunc
     g.action = _lr_action
-    g.goto   = _lr_goto
+    g.goto = _lr_goto
     g.method = _lr_method
     g.require = Requires
 
@@ -2220,10 +2365,13 @@ def yacc(method=default_lr, debug=yaccdebug, module=None, tabmodule=tab_module,
     return g
 
 # <ah> Allow multiple instances of parser
+
+
 class ParserPrototype(object):
+
     def __init__(self, magic=None):
         if magic != "xyzzy":
-            raise YaccError, 'Use yacc()'
+            raise YaccError('Use yacc()')
 
     def init_parser(self, parser=None):
         if not parser:
@@ -2231,7 +2379,7 @@ class ParserPrototype(object):
         parser.productions = self.productions
         parser.errorfunc = self.errorfunc
         parser.action = self.action
-        parser.goto   = self.goto
+        parser.goto = self.goto
         parser.method = self.method
         parser.require = self.require
         return parser
@@ -2239,23 +2387,23 @@ class ParserPrototype(object):
 # yacc_cleanup function.  Delete all of the global variables
 # used during table construction
 
+
 def yacc_cleanup():
     global _lr_action, _lr_goto, _lr_method, _lr_goto_cache
     del _lr_action, _lr_goto, _lr_method, _lr_goto_cache
 
-    global Productions, Prodnames, Prodmap, Terminals 
+    global Productions, Prodnames, Prodmap, Terminals
     global Nonterminals, First, Follow, Precedence, LRitems
     global Errorfunc, Signature, Requires
-    
+
     del Productions, Prodnames, Prodmap, Terminals
     del Nonterminals, First, Follow, Precedence, LRitems
     del Errorfunc, Signature, Requires
-    
+
     global _vf, _vfc
     del _vf, _vfc
-    
-    
-# Stub that raises an error if parsing is attempted without first calling yacc()
-def parse(*args,**kwargs):
-    raise YaccError, "yacc: No parser built with yacc()"
 
+
+# Stub that raises an error if parsing is attempted without first calling yacc()
+def parse(*args, **kwargs):
+    raise YaccError("yacc: No parser built with yacc()")
diff --git a/lib/python/ctypes/ctypesgencore/printer/__init__.py b/lib/python/ctypes/ctypesgencore/printer/__init__.py
index 5bed563..a592397 100644
--- a/lib/python/ctypes/ctypesgencore/printer/__init__.py
+++ b/lib/python/ctypes/ctypesgencore/printer/__init__.py
@@ -5,6 +5,6 @@ This module is the backend to ctypesgen; it contains classes to
 produce the final .py output files.
 """
 
-from printer import WrapperPrinter
+from .printer import WrapperPrinter
 
-__all__ = ["WrapperPrinter"]
\ No newline at end of file
+__all__ = ["WrapperPrinter"]
diff --git a/lib/python/ctypes/ctypesgencore/printer/defaultheader.py b/lib/python/ctypes/ctypesgencore/printer/defaultheader.py
index 8f881cf..df8d285 100644
--- a/lib/python/ctypes/ctypesgencore/printer/defaultheader.py
+++ b/lib/python/ctypes/ctypesgencore/printer/defaultheader.py
@@ -6,4 +6,4 @@ Generated with:
 Do not modify this file.
 '''
 
-__docformat__ =  'restructuredtext'
+__docformat__ = 'restructuredtext'
diff --git a/lib/python/ctypes/ctypesgencore/printer/preamble.py b/lib/python/ctypes/ctypesgencore/printer/preamble.py
index 5225842..f5edf25 100644
--- a/lib/python/ctypes/ctypesgencore/printer/preamble.py
+++ b/lib/python/ctypes/ctypesgencore/printer/preamble.py
@@ -1,4 +1,12 @@
-import ctypes, os, sys
+try:
+    from builtins import long
+except ImportError:
+    long = int
+
+import os
+import sys
+
+import ctypes
 from ctypes import *
 
 _int_types = (c_int16, c_int32)
@@ -13,12 +21,14 @@ for t in _int_types:
 del t
 del _int_types
 
+
 class c_void(Structure):
     # c_void_p is a buggy return type, converting to int, so
     # POINTER(None) == c_void_p is actually written as
     # POINTER(c_void), so it can be treated as a real pointer.
     _fields_ = [('dummy', c_int)]
 
+
 def POINTER(obj):
     p = ctypes.POINTER(obj)
 
@@ -34,20 +44,29 @@ def POINTER(obj):
 
     return p
 
+
 class UserString:
+
     def __init__(self, seq):
-        if isinstance(seq, basestring):
+        if isinstance(seq, str):
             self.data = seq
         elif isinstance(seq, UserString):
             self.data = seq.data[:]
         else:
             self.data = str(seq)
+
     def __str__(self): return str(self.data)
+
     def __repr__(self): return repr(self.data)
+
     def __int__(self): return int(self.data)
+
     def __long__(self): return long(self.data)
+
     def __float__(self): return float(self.data)
+
     def __complex__(self): return complex(self.data)
+
     def __hash__(self): return hash(self.data)
 
     def __cmp__(self, string):
@@ -55,40 +74,50 @@ class UserString:
             return cmp(self.data, string.data)
         else:
             return cmp(self.data, string)
+
     def __contains__(self, char):
         return char in self.data
 
     def __len__(self): return len(self.data)
+
     def __getitem__(self, index): return self.__class__(self.data[index])
+
     def __getslice__(self, start, end):
-        start = max(start, 0); end = max(end, 0)
+        start = max(start, 0)
+        end = max(end, 0)
         return self.__class__(self.data[start:end])
 
     def __add__(self, other):
         if isinstance(other, UserString):
             return self.__class__(self.data + other.data)
-        elif isinstance(other, basestring):
+        elif isinstance(other, str):
             return self.__class__(self.data + other)
         else:
             return self.__class__(self.data + str(other))
+
     def __radd__(self, other):
-        if isinstance(other, basestring):
+        if isinstance(other, str):
             return self.__class__(other + self.data)
         else:
             return self.__class__(str(other) + self.data)
+
     def __mul__(self, n):
-        return self.__class__(self.data*n)
+        return self.__class__(self.data * n)
     __rmul__ = __mul__
+
     def __mod__(self, args):
         return self.__class__(self.data % args)
 
     # the following methods are defined in alphabetical order:
     def capitalize(self): return self.__class__(self.data.capitalize())
+
     def center(self, width, *args):
         return self.__class__(self.data.center(width, *args))
-    def count(self, sub, start=0, end=sys.maxint):
+
+    def count(self, sub, start=0, end=sys.maxsize):
         return self.data.count(sub, start, end)
-    def decode(self, encoding=None, errors=None): # XXX improve this?
+
+    def decode(self, encoding=None, errors=None):  # XXX improve this?
         if encoding:
             if errors:
                 return self.__class__(self.data.decode(encoding, errors))
@@ -96,7 +125,8 @@ class UserString:
                 return self.__class__(self.data.decode(encoding))
         else:
             return self.__class__(self.data.decode())
-    def encode(self, encoding=None, errors=None): # XXX improve this?
+
+    def encode(self, encoding=None, errors=None):  # XXX improve this?
         if encoding:
             if errors:
                 return self.__class__(self.data.encode(encoding, errors))
@@ -104,56 +134,91 @@ class UserString:
                 return self.__class__(self.data.encode(encoding))
         else:
             return self.__class__(self.data.encode())
-    def endswith(self, suffix, start=0, end=sys.maxint):
+
+    def endswith(self, suffix, start=0, end=sys.maxsize):
         return self.data.endswith(suffix, start, end)
+
     def expandtabs(self, tabsize=8):
         return self.__class__(self.data.expandtabs(tabsize))
-    def find(self, sub, start=0, end=sys.maxint):
+
+    def find(self, sub, start=0, end=sys.maxsize):
         return self.data.find(sub, start, end)
-    def index(self, sub, start=0, end=sys.maxint):
+
+    def index(self, sub, start=0, end=sys.maxsize):
         return self.data.index(sub, start, end)
+
     def isalpha(self): return self.data.isalpha()
+
     def isalnum(self): return self.data.isalnum()
+
     def isdecimal(self): return self.data.isdecimal()
+
     def isdigit(self): return self.data.isdigit()
+
     def islower(self): return self.data.islower()
+
     def isnumeric(self): return self.data.isnumeric()
+
     def isspace(self): return self.data.isspace()
+
     def istitle(self): return self.data.istitle()
+
     def isupper(self): return self.data.isupper()
+
     def join(self, seq): return self.data.join(seq)
+
     def ljust(self, width, *args):
         return self.__class__(self.data.ljust(width, *args))
+
     def lower(self): return self.__class__(self.data.lower())
+
     def lstrip(self, chars=None): return self.__class__(self.data.lstrip(chars))
+
     def partition(self, sep):
         return self.data.partition(sep)
+
     def replace(self, old, new, maxsplit=-1):
         return self.__class__(self.data.replace(old, new, maxsplit))
-    def rfind(self, sub, start=0, end=sys.maxint):
+
+    def rfind(self, sub, start=0, end=sys.maxsize):
         return self.data.rfind(sub, start, end)
-    def rindex(self, sub, start=0, end=sys.maxint):
+
+    def rindex(self, sub, start=0, end=sys.maxsize):
         return self.data.rindex(sub, start, end)
+
     def rjust(self, width, *args):
         return self.__class__(self.data.rjust(width, *args))
+
     def rpartition(self, sep):
         return self.data.rpartition(sep)
+
     def rstrip(self, chars=None): return self.__class__(self.data.rstrip(chars))
+
     def split(self, sep=None, maxsplit=-1):
         return self.data.split(sep, maxsplit)
+
     def rsplit(self, sep=None, maxsplit=-1):
         return self.data.rsplit(sep, maxsplit)
+
     def splitlines(self, keepends=0): return self.data.splitlines(keepends)
-    def startswith(self, prefix, start=0, end=sys.maxint):
+
+    def startswith(self, prefix, start=0, end=sys.maxsize):
         return self.data.startswith(prefix, start, end)
+
     def strip(self, chars=None): return self.__class__(self.data.strip(chars))
+
     def swapcase(self): return self.__class__(self.data.swapcase())
+
     def title(self): return self.__class__(self.data.title())
+
     def translate(self, *args):
         return self.__class__(self.data.translate(*args))
+
     def upper(self): return self.__class__(self.data.upper())
+
     def zfill(self, width): return self.__class__(self.data.zfill(width))
 
+
 class MutableString(UserString):
     """mutable string objects
 
@@ -169,59 +234,73 @@ class MutableString(UserString):
     errors that would be very hard to track down.
 
     A faster and better solution is to rewrite your program using lists."""
+
     def __init__(self, string=""):
         self.data = string
+
     def __hash__(self):
-        raise TypeError, "unhashable type (it is mutable)"
+        raise TypeError("unhashable type (it is mutable)")
+
     def __setitem__(self, index, sub):
         if index < 0:
             index += len(self.data)
-        if index < 0 or index >= len(self.data): raise IndexError
-        self.data = self.data[:index] + sub + self.data[index+1:]
+        if index < 0 or index >= len(self.data):
+            raise IndexError
+        self.data = self.data[:index] + sub + self.data[index + 1:]
+
     def __delitem__(self, index):
         if index < 0:
             index += len(self.data)
-        if index < 0 or index >= len(self.data): raise IndexError
-        self.data = self.data[:index] + self.data[index+1:]
+        if index < 0 or index >= len(self.data):
+            raise IndexError
+        self.data = self.data[:index] + self.data[index + 1:]
+
     def __setslice__(self, start, end, sub):
-        start = max(start, 0); end = max(end, 0)
+        start = max(start, 0)
+        end = max(end, 0)
         if isinstance(sub, UserString):
-            self.data = self.data[:start]+sub.data+self.data[end:]
-        elif isinstance(sub, basestring):
-            self.data = self.data[:start]+sub+self.data[end:]
+            self.data = self.data[:start] + sub.data + self.data[end:]
+        elif isinstance(sub, str):
+            self.data = self.data[:start] + sub + self.data[end:]
         else:
-            self.data =  self.data[:start]+str(sub)+self.data[end:]
+            self.data = self.data[:start] + str(sub) + self.data[end:]
+
     def __delslice__(self, start, end):
-        start = max(start, 0); end = max(end, 0)
+        start = max(start, 0)
+        end = max(end, 0)
         self.data = self.data[:start] + self.data[end:]
+
     def immutable(self):
         return UserString(self.data)
+
     def __iadd__(self, other):
         if isinstance(other, UserString):
             self.data += other.data
-        elif isinstance(other, basestring):
+        elif isinstance(other, str):
             self.data += other
         else:
             self.data += str(other)
         return self
+
     def __imul__(self, n):
         self.data *= n
         return self
 
+
 class String(MutableString, Union):
 
     _fields_ = [('raw', POINTER(c_char)),
                 ('data', c_char_p)]
 
     def __init__(self, obj=""):
-        if isinstance(obj, (str, unicode, UserString)):
+        if isinstance(obj, (str, UserString)):
             self.data = str(obj)
         else:
             self.raw = obj
 
     def __len__(self):
         return self.data and len(self.data) or 0
-    
+
     def from_param(cls, obj):
         # Convert None or 0
         if obj is None or obj == 0:
@@ -234,15 +313,15 @@ class String(MutableString, Union):
         # Convert from str
         elif isinstance(obj, str):
             return cls(obj)
-        
+
         # Convert from c_char_p
         elif isinstance(obj, c_char_p):
             return obj
-        
+
         # Convert from POINTER(c_char)
         elif isinstance(obj, POINTER(c_char)):
             return obj
-        
+
         # Convert from raw pointer
         elif isinstance(obj, int):
             return cls(cast(obj, POINTER(c_char)))
@@ -252,6 +331,7 @@ class String(MutableString, Union):
             return String.from_param(obj._as_parameter_)
     from_param = classmethod(from_param)
 
+
 def ReturnString(obj):
     return String.from_param(obj)
 
@@ -262,29 +342,35 @@ def ReturnString(obj):
 #
 # Non-primitive return values wrapped with UNCHECKED won't be
 # typechecked, and will be converted to c_void_p.
+
+
 def UNCHECKED(type):
     if (hasattr(type, "_type_") and isinstance(type._type_, str)
-        and type._type_ != "P"):
+            and type._type_ != "P"):
         return type
     else:
         return c_void_p
 
 # ctypes doesn't have direct support for variadic functions, so we have to write
 # our own wrapper class
+
+
 class _variadic_function(object):
-    def __init__(self,func,restype,argtypes):
-        self.func=func
-        self.func.restype=restype
-        self.argtypes=argtypes
+
+    def __init__(self, func, restype, argtypes):
+        self.func = func
+        self.func.restype = restype
+        self.argtypes = argtypes
+
     def _as_parameter_(self):
         # So we can pass this variadic function as a function pointer
         return self.func
-    def __call__(self,*args):
-        fixed_args=[]
-        i=0
+
+    def __call__(self, *args):
+        fixed_args = []
+        i = 0
         for argtype in self.argtypes:
             # Typecheck what we can
             fixed_args.append(argtype.from_param(args[i]))
-            i+=1
-        return self.func(*fixed_args+list(args[i:]))
-
+            i += 1
+        return self.func(*fixed_args + list(args[i:]))
diff --git a/lib/python/ctypes/ctypesgencore/printer/printer.py b/lib/python/ctypes/ctypesgencore/printer/printer.py
index 0990c66..62c9288 100644
--- a/lib/python/ctypes/ctypesgencore/printer/printer.py
+++ b/lib/python/ctypes/ctypesgencore/printer/printer.py
@@ -1,40 +1,47 @@
 #!/usr/bin/env python
+from __future__ import print_function
 
-import os, sys, time
-from ctypesgencore.descriptions import *
+
+import os
+import sys
+from . import test  # So we can find the path to local files in the printer package
+import time
+
+import ctypesgencore.libraryloader  # So we can get the path to it
 from ctypesgencore.ctypedescs import *
+from ctypesgencore.descriptions import *
 from ctypesgencore.messages import *
 
-import ctypesgencore.libraryloader # So we can get the path to it
-import test # So we can find the path to local files in the printer package
 
-def path_to_local_file(name,known_local_module = test):
-    basedir=os.path.dirname(known_local_module.__file__)
-    return os.path.join(basedir,name)
+def path_to_local_file(name, known_local_module=test):
+    basedir = os.path.dirname(known_local_module.__file__)
+    return os.path.join(basedir, name)
+
 
 class WrapperPrinter:
-    def __init__(self,outpath,options,data):
+
+    def __init__(self, outpath, options, data):
         status_message("Writing to %s." % outpath)
-        
-        self.file=file(outpath,"w")
-        self.options=options
+
+        self.file = file(outpath, "w")
+        self.options = options
 
         if self.options.strip_build_path and \
-          self.options.strip_build_path[-1] != os.path.sep:
+                self.options.strip_build_path[-1] != os.path.sep:
             self.options.strip_build_path += os.path.sep
-        
+
         self.print_header()
-        print >>self.file
-        
+        print(file=self.file)
+
         self.print_preamble()
-        print >>self.file
-        
+        print(file=self.file)
+
         self.print_loader()
-        print >>self.file
-                
-        self.print_group(self.options.libraries,"libraries",self.print_library)
-        self.print_group(self.options.modules,"modules",self.print_module)
-        
+        print(file=self.file)
+
+        self.print_group(self.options.libraries, "libraries", self.print_library)
+        self.print_group(self.options.modules, "modules", self.print_module)
+
         method_table = {
             'function': self.print_function,
             'macro': self.print_macro,
@@ -45,254 +52,256 @@ class WrapperPrinter:
             'enum': self.print_enum,
             'constant': self.print_constant
         }
-        
-        for kind,desc in data.output_order:
+
+        for kind, desc in data.output_order:
             if desc.included:
                 method_table[kind](desc)
-                print >>self.file
-        
-        self.print_group(self.options.inserted_files,"inserted files",
+                print(file=self.file)
+
+        self.print_group(self.options.inserted_files, "inserted files",
                          self.insert_file)
-    
-    def print_group(self,list,name,function):
+
+    def print_group(self, list, name, function):
         if list:
-            print >>self.file,"# Begin %s" % name
-            print >>self.file
+            print("# Begin %s" % name, file=self.file)
+            print(file=self.file)
             for obj in list:
                 function(obj)
-            print >>self.file
-            print >>self.file,"# %d %s" % (len(list),name)
-            print >>self.file,"# End %s" % name
+            print(file=self.file)
+            print("# %d %s" % (len(list), name), file=self.file)
+            print("# End %s" % name, file=self.file)
         else:
-            print >>self.file,"# No %s" % name
-        print >>self.file
-    
-    def srcinfo(self,src):
-        if src==None:
-            print >>self.file
+            print("# No %s" % name, file=self.file)
+        print(file=self.file)
+
+    def srcinfo(self, src):
+        if src is None:
+            print(file=self.file)
         else:
-            filename,lineno = src
-            if filename in ("<built-in>","<command line>"):
-                print >>self.file, "# %s" % filename
+            filename, lineno = src
+            if filename in ("<built-in>", "<command line>"):
+                print("# %s" % filename, file=self.file)
             else:
                 if self.options.strip_build_path and \
-                  filename.startswith(self.options.strip_build_path):
+                        filename.startswith(self.options.strip_build_path):
                     filename = filename[len(self.options.strip_build_path):]
-                print >>self.file, "# %s: %s" % (filename, lineno)
-    
+                print("# %s: %s" % (filename, lineno), file=self.file)
+
     def template_subs(self):
-        template_subs={
+        template_subs = {
             'date': time.ctime(),
             'argv': ' '.join([x for x in sys.argv if not x.startswith("--strip-build-path")]),
             'name': os.path.basename(self.options.headers[0])
         }
-        
-        for opt,value in self.options.__dict__.iteritems():
-            if type(value)==str:
-                template_subs[opt]=value
-            elif isinstance(value,(list,tuple)):
-                template_subs[opt]=(os.path.sep).join(value)
+
+        for opt, value in self.options.__dict__.items():
+            if isinstance(value, str):
+                template_subs[opt] = value
+            elif isinstance(value, (list, tuple)):
+                template_subs[opt] = (os.path.sep).join(value)
             else:
-                template_subs[opt]=repr(value)
-        
+                template_subs[opt] = repr(value)
+
         return template_subs
-    
+
     def print_header(self):
         template_file = None
-        
+
         if self.options.header_template:
             path = self.options.header_template
             try:
-                template_file = file(path,"r")
+                template_file = file(path, "r")
             except IOError:
-                error_message("Cannot load header template from file \"%s\" " \
-                    " - using default template." % path, cls = 'missing-file')
-        
+                error_message("Cannot load header template from file \"%s\" "
+                              " - using default template." % path, cls='missing-file')
+
         if not template_file:
             path = path_to_local_file("defaultheader.py")
-            template_file = file(path,"r")
-        
-        template_subs=self.template_subs()
+            template_file = file(path, "r")
+
+        template_subs = self.template_subs()
         self.file.write(template_file.read() % template_subs)
-        
+
         template_file.close()
-    
+
     def print_preamble(self):
         path = path_to_local_file("preamble.py")
-        
-        print >>self.file, "# Begin preamble"
-        print >>self.file
-        preamble_file=file(path,"r")
+
+        print("# Begin preamble", file=self.file)
+        print(file=self.file)
+        preamble_file = file(path, "r")
         self.file.write(preamble_file.read())
         preamble_file.close()
-        print >>self.file
-        print >>self.file, "# End preamble"
-    
+        print(file=self.file)
+        print("# End preamble", file=self.file)
+
     def print_loader(self):
-        print >>self.file, "_libs = {}"
-        print >>self.file, "_libdirs = %s" % self.options.compile_libdirs
-        print >>self.file
-        print >>self.file, "# Begin loader"
-        print >>self.file
+        print("_libs = {}", file=self.file)
+        print("_libdirs = %s" % self.options.compile_libdirs, file=self.file)
+        print(file=self.file)
+        print("# Begin loader", file=self.file)
+        print(file=self.file)
         path = path_to_local_file("libraryloader.py",
-                                      ctypesgencore.libraryloader)
-        loader_file=file(path,"r")
+                                  ctypesgencore.libraryloader)
+        loader_file = file(path, "r")
         self.file.write(loader_file.read())
         loader_file.close()
-        print >>self.file
-        print >>self.file, "# End loader"
-        print >>self.file
-        print >>self.file, "add_library_search_dirs([%s])" % \
-                ", ".join([repr(d) for d in self.options.runtime_libdirs])
-    
-    def print_library(self,library):
-        print >>self.file, '_libs["%s"] = load_library("%s")'%(library,library)
-    
-    def print_module(self,module):
-        print >>self.file, 'from %s import *' % name
-    
-    def print_constant(self,constant):
-        print >>self.file, '%s = %s' % \
-            (constant.name,constant.value.py_string(False)),
+        print(file=self.file)
+        print("# End loader", file=self.file)
+        print(file=self.file)
+        print("add_library_search_dirs([%s])" % \
+            ", ".join([repr(d) for d in self.options.runtime_libdirs]), file=self.file)
+
+    def print_library(self, library):
+        print('_libs["%s"] = load_library("%s")' % (library, library), file=self.file)
+
+    def print_module(self, module):
+        print('from %s import *' % name, file=self.file)
+
+    def print_constant(self, constant):
+        print('%s = %s' % \
+            (constant.name, constant.value.py_string(False)), end=' ', file=self.file)
         self.srcinfo(constant.src)
-    
-    def print_typedef(self,typedef):
-        print >>self.file, '%s = %s' % \
-            (typedef.name,typedef.ctype.py_string()),
+
+    def print_typedef(self, typedef):
+        print('%s = %s' % \
+            (typedef.name, typedef.ctype.py_string()), end=' ', file=self.file)
         self.srcinfo(typedef.src)
-    
+
     def print_struct(self, struct):
         self.srcinfo(struct.src)
         base = {'union': 'Union', 'struct': 'Structure'}[struct.variety]
-        print >>self.file, 'class %s_%s(%s):' % \
-            (struct.variety, struct.tag, base)
-        print >>self.file, '    pass'
-    
+        print('class %s_%s(%s):' % \
+            (struct.variety, struct.tag, base), file=self.file)
+        print('    pass', file=self.file)
+
     def print_struct_members(self, struct):
-        if struct.opaque: return
-        print >>self.file, '%s_%s.__slots__ = [' % (struct.variety, struct.tag)
-        for name,ctype in struct.members:
-            print >>self.file, "    '%s'," % name
-        print >>self.file, ']'
-        print >>self.file, '%s_%s._fields_ = [' % (struct.variety, struct.tag)
-        for name,ctype in struct.members:
-            if isinstance(ctype,CtypesBitfield):
-                print >>self.file, "    ('%s', %s, %s)," % \
-                    (name, ctype.py_string(), ctype.bitfield.py_string(False))
+        if struct.opaque:
+            return
+        print('%s_%s.__slots__ = [' % (struct.variety, struct.tag), file=self.file)
+        for name, ctype in struct.members:
+            print("    '%s'," % name, file=self.file)
+        print(']', file=self.file)
+        print('%s_%s._fields_ = [' % (struct.variety, struct.tag), file=self.file)
+        for name, ctype in struct.members:
+            if isinstance(ctype, CtypesBitfield):
+                print("    ('%s', %s, %s)," % \
+                    (name, ctype.py_string(), ctype.bitfield.py_string(False)), file=self.file)
             else:
-                print >>self.file, "    ('%s', %s)," % (name, ctype.py_string())
-        print >>self.file, ']'
-    
-    def print_enum(self,enum):
-        print >>self.file, 'enum_%s = c_int' % enum.tag,
+                print("    ('%s', %s)," % (name, ctype.py_string()), file=self.file)
+        print(']', file=self.file)
+
+    def print_enum(self, enum):
+        print('enum_%s = c_int' % enum.tag, end=' ', file=self.file)
         self.srcinfo(enum.src)
         # Values of enumerator are output as constants.
-    
+
     def print_function(self, function):
         if function.variadic:
             self.print_variadic_function(function)
         else:
             self.print_fixed_function(function)
-    
+
     def print_fixed_function(self, function):
         self.srcinfo(function.src)
         if function.source_library:
-            print >>self.file, "if hasattr(_libs[%r], %r):" % \
-                (function.source_library,function.c_name())
-            print >>self.file, "    %s = _libs[%r].%s" % \
-                (function.py_name(),function.source_library,function.c_name())
-            print >>self.file, "    %s.restype = %s" % \
-                (function.py_name(),function.restype.py_string())
-            print >>self.file, "    %s.argtypes = [%s]" % (function.py_name(),
-                ', '.join([a.py_string() for a in function.argtypes]))
+            print("if hasattr(_libs[%r], %r):" % \
+                (function.source_library, function.c_name()), file=self.file)
+            print("    %s = _libs[%r].%s" % \
+                (function.py_name(), function.source_library, function.c_name()), file=self.file)
+            print("    %s.restype = %s" % \
+                (function.py_name(), function.restype.py_string()), file=self.file)
+            print("    %s.argtypes = [%s]" % (
+                function.py_name(),
+                ', '.join([a.py_string() for a in function.argtypes])), file=self.file)
         else:
-            print >>self.file, "for _lib in _libs.values():"
-            print >>self.file, "    if hasattr(_lib, %r):" % function.c_name()
-            print >>self.file, "        %s = _lib.%s" % (function.py_name(),function.c_name())
-            print >>self.file, "        %s.restype = %s" % (function.py_name(),function.restype.py_string())
-            print >>self.file, "        %s.argtypes = [%s]" % (function.py_name(),
-                ', '.join([a.py_string() for a in function.argtypes]))
-            print >>self.file, "        break"
-    
-    def print_variadic_function(self,function):
+            print("for _lib in _libs.values():", file=self.file)
+            print("    if hasattr(_lib, %r):" % function.c_name(), file=self.file)
+            print("        %s = _lib.%s" % (function.py_name(), function.c_name()), file=self.file)
+            print("        %s.restype = %s" % (
+                function.py_name(), function.restype.py_string()), file=self.file)
+            print("        %s.argtypes = [%s]" % (
+                function.py_name(), ', '.join([a.py_string() for a in function.argtypes])), file=self.file)
+            print("        break", file=self.file)
+
+    def print_variadic_function(self, function):
         self.srcinfo(function.src)
         if function.source_library:
-            print >>self.file, "if hasattr(_libs[%r], %r):" % \
-                (function.source_library,function.c_name())
-            print >>self.file, "    _func = _libs[%r].%s" % \
-                (function.source_library,function.c_name())
-            print >>self.file, "    _restype = %s" % function.restype.py_string()
-            print >>self.file, "    _argtypes = [%s]" % \
-                ', '.join([a.py_string() for a in function.argtypes])
-            print >>self.file, "    %s = _variadic_function(_func,_restype,_argtypes)" % \
-                function.py_name()
+            print("if hasattr(_libs[%r], %r):" % \
+                (function.source_library, function.c_name()), file=self.file)
+            print("    _func = _libs[%r].%s" % \
+                (function.source_library, function.c_name()), file=self.file)
+            print("    _restype = %s" % function.restype.py_string(), file=self.file)
+            print("    _argtypes = [%s]" % \
+                ', '.join([a.py_string() for a in function.argtypes]), file=self.file)
+            print("    %s = _variadic_function(_func,_restype,_argtypes)" % \
+                function.py_name(), file=self.file)
         else:
-            print >>self.file, "for _lib in _libs.values():"
-            print >>self.file, "    if hasattr(_lib, %r):" % function.c_name()
-            print >>self.file, "        _func = _lib.%s" % \
-                (function.c_name())
-            print >>self.file, "        _restype = %s" % function.restype.py_string()
-            print >>self.file, "        _argtypes = [%s]" % \
-                ', '.join([a.py_string() for a in function.argtypes])
-            print >>self.file, "        %s = _variadic_function(_func,_restype,_argtypes)" % \
-                function.py_name()
-
-    
+            print("for _lib in _libs.values():", file=self.file)
+            print("    if hasattr(_lib, %r):" % function.c_name(), file=self.file)
+            print("        _func = _lib.%s" % \
+                (function.c_name()), file=self.file)
+            print("        _restype = %s" % function.restype.py_string(), file=self.file)
+            print("        _argtypes = [%s]" % \
+                ', '.join([a.py_string() for a in function.argtypes]), file=self.file)
+            print("        %s = _variadic_function(_func,_restype,_argtypes)" % \
+                function.py_name(), file=self.file)
+
     def print_variable(self, variable):
         self.srcinfo(variable.src)
         if variable.source_library:
-            print >>self.file, 'try:'
-            print >>self.file, '    %s = (%s).in_dll(_libs[%r], %r)' % \
+            print('try:', file=self.file)
+            print('    %s = (%s).in_dll(_libs[%r], %r)' % \
                 (variable.py_name(),
                  variable.ctype.py_string(),
                  variable.source_library,
-                 variable.c_name())
-            print >>self.file, 'except:'
-            print >>self.file, '    pass'
+                 variable.c_name()), file=self.file)
+            print('except:', file=self.file)
+            print('    pass', file=self.file)
         else:
-            print >>self.file, "for _lib in _libs.values():"
-            print >>self.file, '    try:'
-            print >>self.file, '        %s = (%s).in_dll(_lib, %r)' % \
+            print("for _lib in _libs.values():", file=self.file)
+            print('    try:', file=self.file)
+            print('        %s = (%s).in_dll(_lib, %r)' % \
                 (variable.py_name(),
                  variable.ctype.py_string(),
-                 variable.c_name())
-            print >>self.file, "        break"
-            print >>self.file, '    except:'
-            print >>self.file, '        pass'
-    
+                 variable.c_name()), file=self.file)
+            print("        break", file=self.file)
+            print('    except:', file=self.file)
+            print('        pass', file=self.file)
+
     def print_macro(self, macro):
         if macro.params:
             self.print_func_macro(macro)
         else:
             self.print_simple_macro(macro)
-    
+
     def print_simple_macro(self, macro):
         # The macro translator makes heroic efforts but it occasionally fails.
         # We want to contain the failures as much as possible.
         # Hence the try statement.
         self.srcinfo(macro.src)
-        print >>self.file, "try:"
-        print >>self.file, "    %s = %s" % (macro.name,macro.expr.py_string(True))
-        print >>self.file, "except:"
-        print >>self.file, "    pass"
-    
+        print("try:", file=self.file)
+        print("    %s = %s" % (macro.name, macro.expr.py_string(True)), file=self.file)
+        print("except:", file=self.file)
+        print("    pass", file=self.file)
+
     def print_func_macro(self, macro):
         self.srcinfo(macro.src)
-        print >>self.file, "def %s(%s):" % \
-            (macro.name,", ".join(macro.params))
-        print >>self.file, "    return %s" % macro.expr.py_string(True)
-    
-    def insert_file(self,filename):
+        print("def %s(%s):" % \
+            (macro.name, ", ".join(macro.params)), file=self.file)
+        print("    return %s" % macro.expr.py_string(True), file=self.file)
+
+    def insert_file(self, filename):
         try:
-            inserted_file = file(filename,"r")
+            inserted_file = file(filename, "r")
         except IOError:
             error_message("Cannot open file \"%s\". Skipped it." % filename,
-                          cls = 'missing-file')
-        
-        print >>self.file,"# Begin \"%s\"" % filename
-        print >>self.file
+                          cls='missing-file')
+
+        print("# Begin \"%s\"" % filename, file=self.file)
+        print(file=self.file)
         self.file.write(inserted_file.read())
-        print >>self.file
-        print >>self.file,"# End \"%s\"" % filename
-              
+        print(file=self.file)
+        print("# End \"%s\"" % filename, file=self.file)
+
         inserted_file.close()
diff --git a/lib/python/ctypes/ctypesgencore/printer/test.py b/lib/python/ctypes/ctypesgencore/printer/test.py
index db3568e..1f75dac 100644
--- a/lib/python/ctypes/ctypesgencore/printer/test.py
+++ b/lib/python/ctypes/ctypesgencore/printer/test.py
@@ -3,4 +3,4 @@ ctypesgencore.printer.printer imports this module so that it can find the path
 to defaulttemplate.py and defaultloader.py.
 """
 
-pass
\ No newline at end of file
+pass
diff --git a/lib/python/ctypes/ctypesgencore/processor/__init__.py b/lib/python/ctypes/ctypesgencore/processor/__init__.py
index 54968b6..2c01193 100644
--- a/lib/python/ctypes/ctypesgencore/processor/__init__.py
+++ b/lib/python/ctypes/ctypesgencore/processor/__init__.py
@@ -9,4 +9,4 @@ A convenience_function, process(), calls everything else.
 
 __all__ = ["process"]
 
-from pipeline import process
\ No newline at end of file
+from .pipeline import process
diff --git a/lib/python/ctypes/ctypesgencore/processor/dependencies.py b/lib/python/ctypes/ctypesgencore/processor/dependencies.py
index c74fae5..293727c 100644
--- a/lib/python/ctypes/ctypesgencore/processor/dependencies.py
+++ b/lib/python/ctypes/ctypesgencore/processor/dependencies.py
@@ -5,62 +5,73 @@ The dependencies module determines which descriptions depend on which other
 descriptions.
 """
 
-from ctypesgencore.descriptions import *
 from ctypesgencore.ctypedescs import *
+from ctypesgencore.descriptions import *
 from ctypesgencore.messages import *
 
+
 def find_dependencies(data, opts):
     """Visit each description in `data` and figure out which other descriptions
 it depends on, putting the results in desc.requirements. Also find errors in
 ctypedecls or expressions attached to the description and transfer them to the
 description."""
-    
+
     struct_names = {}
     enum_names = {}
     typedef_names = {}
     ident_names = {}
-    
+
     # Start the lookup tables with names from imported modules
-    
+
     for name in opts.other_known_names:
         typedef_names[name] = None
         ident_names[name] = None
         if name.startswith("struct_") or name.startswith("enum_"):
             variety = name.split("_")[0]
             tag = "_".join(name.split("_")[1:])
-            struct_names[(variety,tag)] = None
+            struct_names[(variety, tag)] = None
         if name.startswith("enum_"):
             enum_names[name] = None
-    
+
     def depend(desc, nametable, name):
         """Try to add `name` as a requirement for `desc`, looking `name` up in
 `nametable`. Returns True if found."""
 
         if name in nametable:
             requirement = nametable[name]
-            if requirement: desc.add_requirements([requirement])
+            if requirement:
+                desc.add_requirements([requirement])
             return True
         else:
             return False
-    
+
     def find_dependencies_for(desc, kind):
         """Find all the descriptions that `desc` depends on and add them as
-dependencies for `desc`. Also collect error messages regarding `desc` and 
+dependencies for `desc`. Also collect error messages regarding `desc` and
 convert unlocateable descriptions into error messages."""
 
-        if kind == "constant": roots = [desc.value]
-        if kind == "struct": roots = []
-        if kind == "struct-body": roots = [desc.ctype]
-        if kind == "enum": roots = []
-        if kind == "typedef": roots = [desc.ctype]
-        if kind == "function": roots = desc.argtypes + [desc.restype]
-        if kind == "variable": roots = [desc.ctype]
+        if kind == "constant":
+            roots = [desc.value]
+        if kind == "struct":
+            roots = []
+        if kind == "struct-body":
+            roots = [desc.ctype]
+        if kind == "enum":
+            roots = []
+        if kind == "typedef":
+            roots = [desc.ctype]
+        if kind == "function":
+            roots = desc.argtypes + [desc.restype]
+        if kind == "variable":
+            roots = [desc.ctype]
         if kind == "macro":
-            if desc.expr: roots = [desc.expr]
-            else: roots = []
-        
-        cstructs,cenums,ctypedefs,errors,identifiers = [], [], [], [], []
-        
+            if desc.expr:
+                roots = [desc.expr]
+            else:
+                roots = []
+
+        cstructs, cenums, ctypedefs, errors, identifiers = [], [], [], [], []
+
         for root in roots:
             s, e, t, errs, i = visit_type_and_collect_info(root)
             cstructs.extend(s)
@@ -68,42 +79,42 @@ convert unlocateable descriptions into error messages."""
             ctypedefs.extend(t)
             errors.extend(errs)
             identifiers.extend(i)
-        
+
         unresolvables = []
-        
+
         for cstruct in cstructs:
             if kind == "struct" and desc.variety == cstruct.variety and \
-                desc.tag == cstruct.tag:
+                    desc.tag == cstruct.tag:
                 continue
             if not depend(desc, struct_names, (cstruct.variety, cstruct.tag)):
-                unresolvables.append("%s \"%s\"" % \
-                    (cstruct.variety, cstruct.tag))
-        
+                unresolvables.append("%s \"%s\"" %
+                                     (cstruct.variety, cstruct.tag))
+
         for cenum in cenums:
             if kind == "enum" and desc.tag == cenum.tag:
                 continue
             if not depend(desc, enum_names, cenum.tag):
                 unresolvables.append("enum \"%s\"" % cenum.tag)
-        
+
         for ctypedef in ctypedefs:
             if not depend(desc, typedef_names, ctypedef):
                 unresolvables.append("typedef \"%s\"" % ctypedef)
-        
+
         for ident in identifiers:
             if isinstance(desc, MacroDescription) and \
-                desc.params and ident in desc.params:
+                    desc.params and ident in desc.params:
                 continue
             if not depend(desc, ident_names, ident):
                 unresolvables.append("identifier \"%s\"" % ident)
-        
+
         for u in unresolvables:
-            errors.append(("%s depends on an unknown %s." % \
-                          (desc.casual_name(), u), None))
-        
+            errors.append(("%s depends on an unknown %s." %
+                           (desc.casual_name(), u), None))
+
         for err, cls in errors:
             err += " %s will not be output" % desc.casual_name()
-            desc.error(err, cls = cls)
-        
+            desc.error(err, cls=cls)
+
     def add_to_lookup_table(desc, kind):
         """Add `desc` to the lookup table so that other descriptions that use
 it can find it."""
@@ -125,13 +136,13 @@ it can find it."""
     # no other type of description can look ahead like that.
 
     for kind, desc in data.output_order:
-        if kind!="macro":
+        if kind != "macro":
             find_dependencies_for(desc, kind)
             add_to_lookup_table(desc, kind)
 
     for kind, desc in data.output_order:
-        if kind=="macro":
+        if kind == "macro":
             add_to_lookup_table(desc, kind)
     for kind, desc in data.output_order:
-        if kind=="macro":
+        if kind == "macro":
             find_dependencies_for(desc, kind)
diff --git a/lib/python/ctypes/ctypesgencore/processor/operations.py b/lib/python/ctypes/ctypesgencore/processor/operations.py
index dd86c6f..f60c832 100644
--- a/lib/python/ctypes/ctypesgencore/processor/operations.py
+++ b/lib/python/ctypes/ctypesgencore/processor/operations.py
@@ -6,195 +6,210 @@ DescriptionCollection and prepare it for output.
 ctypesgencore.processor.pipeline calls the operations module.
 """
 
-import ctypes, re, os, sys, keyword
+import keyword
+import os
+import re
+import sys
+
+import ctypes
+import ctypesgencore.libraryloader
 from ctypesgencore.descriptions import *
 from ctypesgencore.messages import *
-import ctypesgencore.libraryloader
+
 
 # Processor functions
 
-def automatically_typedef_structs(data,options):
+
+def automatically_typedef_structs(data, options):
     """automatically_typedef_structs() aliases "struct_<tag>" to "<tag>" for
     every struct and union."""
     # XXX Check if it has already been aliased in the C code.
-    
+
     for struct in data.structs:
-        if not struct.ctype.anonymous: # Don't alias anonymous structs
-            typedef=TypedefDescription(struct.tag,
-                                       struct.ctype,
-                                       src=struct.src)
+        if not struct.ctype.anonymous:  # Don't alias anonymous structs
+            typedef = TypedefDescription(struct.tag,
+                                         struct.ctype,
+                                         src=struct.src)
             typedef.add_requirements(set([struct]))
-            
+
             data.typedefs.append(typedef)
-            data.all.insert(data.all.index(struct)+1,typedef)
+            data.all.insert(data.all.index(struct) + 1, typedef)
             data.output_order.append(("typedef", typedef))
 
+
 def remove_NULL(data, options):
     """remove_NULL() removes any NULL definitions from the C headers because
 ctypesgen supplies its own NULL definition."""
-    
+
     for macro in data.macros:
-        if macro.name=="NULL":
+        if macro.name == "NULL":
             macro.include_rule = "never"
 
-def remove_descriptions_in_system_headers(data,opts):
+
+def remove_descriptions_in_system_headers(data, opts):
     """remove_descriptions_in_system_headers() removes descriptions if they came
     from files outside of the header files specified from the command line."""
-    
+
     known_headers = [os.path.basename(x) for x in opts.headers]
-    
+
     for description in data.all:
-        if description.src!=None:
+        if description.src is not None:
             if description.src[0] == "<command line>":
                 description.include_rule = "if_needed"
             elif description.src[0] == "<built-in>":
                 if not opts.builtin_symbols:
-                    description.include_rule="if_needed"
+                    description.include_rule = "if_needed"
             elif os.path.basename(description.src[0]) not in known_headers:
                 if not opts.all_headers:
                     # If something else requires this, include it even though
                     # it is in a system header file.
-                    description.include_rule="if_needed"
+                    description.include_rule = "if_needed"
+
 
-def remove_macros(data,opts):
+def remove_macros(data, opts):
     """remove_macros() removes macros if --no-macros is set."""
     if not opts.include_macros:
         for macro in data.macros:
             macro.include_rule = "never"
 
-def filter_by_regexes_exclude(data,opts):
+
+def filter_by_regexes_exclude(data, opts):
     """filter_by_regexes_exclude() uses regular expressions specified by options
     dictionary to filter symbols."""
     if opts.exclude_symbols:
-        expr=re.compile(opts.exclude_symbols)
+        expr = re.compile(opts.exclude_symbols)
         for object in data.all:
             if expr.match(object.py_name()):
-                object.include_rule="never"
+                object.include_rule = "never"
+
 
-def filter_by_regexes_include(data,opts):
+def filter_by_regexes_include(data, opts):
     """filter_by_regexes_include() uses regular expressions specified by options
     dictionary to re-include symbols previously rejected by other operations."""
     if opts.include_symbols:
-        expr=re.compile(opts.include_symbols)
+        expr = re.compile(opts.include_symbols)
         for object in data.all:
-            if object.include_rule!="never":
+            if object.include_rule != "never":
                 if expr.match(object.py_name()):
-                    object.include_rule="yes"
+                    object.include_rule = "yes"
 
-def fix_conflicting_names(data,opts):
+
+def fix_conflicting_names(data, opts):
     """If any descriptions from the C code would overwrite Python builtins or
     other important names, fix_conflicting_names() adds underscores to resolve
     the name conflict."""
-    
+
     # This is the order of priority for names
     descriptions = data.functions + data.variables + data.structs + \
         data.typedefs + data.enums + data.constants + data.macros
-    
+
     # This dictionary maps names to a string representing where the name
     # came from.
-    important_names={}
-    
-    preamble_names=set()
-    preamble_names=preamble_names.union(['DarwinLibraryLoader',
-        'LibraryLoader', 'LinuxLibraryLoader', 'WindowsLibraryLoader',
-        '_WindowsLibrary', 'add_library_search_dirs', '_environ_path', 'ctypes',
-        'load_library', 'loader', 'os', 're', 'sys'])
-    preamble_names=preamble_names.union(['ArgumentError', 'CFUNCTYPE',
-        'POINTER', 'ReturnString', 'String', 'Structure', 'UNCHECKED', 'Union',
-        'UserString', '_variadic_function', 'addressof', 'c_buffer', 'c_byte',
-        'c_char', 'c_char_p', 'c_double', 'c_float', 'c_int', 'c_int16',
-        'c_int32', 'c_int64', 'c_int8', 'c_long', 'c_longlong', 'c_ptrdiff_t',
-        'c_short', 'c_size_t', 'c_ubyte', 'c_uint', 'c_uint16', 'c_uint32',
-        'c_uint64', 'c_uint8', 'c_ulong', 'c_ulonglong', 'c_ushort', 'c_void',
-        'c_void_p', 'c_voidp', 'c_wchar', 'c_wchar_p', 'cast', 'ctypes', 'os',
-        'pointer', 'sizeof'])
+    important_names = {}
+
+    preamble_names = set()
+    preamble_names = preamble_names.union(
+        ['DarwinLibraryLoader', 'LibraryLoader', 'LinuxLibraryLoader', 'WindowsLibraryLoader',
+         '_WindowsLibrary', 'add_library_search_dirs', '_environ_path', 'ctypes', 'load_library',
+         'loader', 'os', 're', 'sys'])
+    preamble_names = preamble_names.union(
+        ['ArgumentError', 'CFUNCTYPE', 'POINTER', 'ReturnString', 'String', 'Structure',
+         'UNCHECKED', 'Union', 'UserString', '_variadic_function', 'addressof', 'c_buffer',
+         'c_byte', 'c_char', 'c_char_p', 'c_double', 'c_float', 'c_int', 'c_int16', 'c_int32',
+         'c_int64', 'c_int8', 'c_long', 'c_longlong', 'c_ptrdiff_t', 'c_short', 'c_size_t',
+         'c_ubyte', 'c_uint', 'c_uint16', 'c_uint32', 'c_uint64', 'c_uint8', 'c_ulong',
+         'c_ulonglong', 'c_ushort', 'c_void', 'c_void_p', 'c_voidp', 'c_wchar', 'c_wchar_p', 'cast',
+         'ctypes', 'os', 'pointer', 'sizeof'])
     for name in preamble_names:
         important_names[name] = "a name needed by ctypes or ctypesgen"
-    for name in dir(__builtins__): important_names[name] = "a Python builtin"
+    for name in dir(__builtins__):
+        important_names[name] = "a Python builtin"
     for name in opts.other_known_names:
         important_names[name] = "a name from an included Python module"
-    for name in keyword.kwlist: important_names[name] = "a Python keyword"
-    
+    for name in keyword.kwlist:
+        important_names[name] = "a Python keyword"
+
     for description in descriptions:
         if description.py_name() in important_names:
             conflict_name = important_names[description.py_name()]
-            
-            original_name=description.casual_name()
+
+            original_name = description.casual_name()
             while description.py_name() in important_names:
                 if isinstance(description,
-                                (StructDescription, EnumDescription)):
-                    description.tag+="_"
+                              (StructDescription, EnumDescription)):
+                    description.tag += "_"
                 else:
-                    description.name="_"+description.name
-            
+                    description.name = "_" + description.name
+
             if not description.dependents:
-                description.warning("%s has been renamed to %s due to a name " \
-                    "conflict with %s." % \
-                    (original_name,
-                    description.casual_name(),
-                    conflict_name),
-                    cls = 'rename')
+                description.warning("%s has been renamed to %s due to a name "
+                                    "conflict with %s." %
+                                    (original_name,
+                                     description.casual_name(),
+                                     conflict_name),
+                                    cls='rename')
             else:
-                description.warning("%s has been renamed to %s due to a name " \
-                    "conflict with %s. Other objects depend on %s - those " \
-                    "objects will be skipped." % \
-                    (original_name, description.casual_name(),
-                    conflict_name, original_name),
-                    cls = 'rename')
-                
+                description.warning("%s has been renamed to %s due to a name "
+                                    "conflict with %s. Other objects depend on %s - those "
+                                    "objects will be skipped." %
+                                    (original_name, description.casual_name(),
+                                     conflict_name, original_name),
+                                    cls='rename')
+
                 for dependent in description.dependents:
                     dependent.include_rule = "never"
-            
-            if description.include_rule=="yes":
+
+            if description.include_rule == "yes":
                 important_names[description.py_name()] = \
                     description.casual_name()
-    
+
     # Names of struct members don't conflict with much, but they can conflict
     # with Python keywords.
-    
+
     for struct in data.structs:
         if not struct.opaque:
-            for i,(name,type) in enumerate(struct.members):
+            for i, (name, type) in enumerate(struct.members):
                 if name in keyword.kwlist:
-                    struct.members[i] = ("_"+name,type)
-                    struct.warning("Member \"%s\" of %s has been renamed to " \
-                        "\"%s\" because it has the same name as a Python " \
-                        "keyword." % (name, struct.casual_name(), "_"+name),
-                        cls = 'rename')
-    
+                    struct.members[i] = ("_" + name, type)
+                    struct.warning("Member \"%s\" of %s has been renamed to "
+                                   "\"%s\" because it has the same name as a Python "
+                                   "keyword." % (name, struct.casual_name(), "_" + name),
+                                   cls='rename')
+
     # Macro arguments may be have names that conflict with Python keywords.
     # In a perfect world, this would simply rename the parameter instead
     # of throwing an error message.
-    
+
     for macro in data.macros:
         if macro.params:
             for param in macro.params:
                 if param in keyword.kwlist:
-                    macro.error("One of the parameters to %s, \"%s\" has the " \
-                        "same name as a Python keyword. %s will be skipped." % \
-                        (macro.casual_name(), param, macro.casual_name()),
-                        cls = 'name-conflict')
+                    macro.error("One of the parameters to %s, \"%s\" has the "
+                                "same name as a Python keyword. %s will be skipped." %
+                                (macro.casual_name(), param, macro.casual_name()),
+                                cls='name-conflict')
+
 
-def find_source_libraries(data,opts):
+def find_source_libraries(data, opts):
     """find_source_libraries() determines which library contains each function
     and variable."""
-    
-    all_symbols=data.functions+data.variables
-    
+
+    all_symbols = data.functions + data.variables
+
     for symbol in all_symbols:
-        symbol.source_library=None
-    
+        symbol.source_library = None
+
     ctypesgencore.libraryloader.add_library_search_dirs(opts.compile_libdirs)
-    
+
     for library_name in opts.libraries:
         try:
-            library=ctypesgencore.libraryloader.load_library(library_name)
+            library = ctypesgencore.libraryloader.load_library(library_name)
         except ImportError as e:
-            warning_message("Could not load library \"%s\". Okay, I'll " \
-                "try to load it at runtime instead. " % (library_name),
-                cls = 'missing-library')
+            warning_message("Could not load library \"%s\". Okay, I'll "
+                            "try to load it at runtime instead. " % (library_name),
+                            cls='missing-library')
             continue
         for symbol in all_symbols:
-            if symbol.source_library==None:
-                if hasattr(library,symbol.c_name()):
-                    symbol.source_library=library_name
+            if symbol.source_library is None:
+                if hasattr(library, symbol.c_name()):
+                    symbol.source_library = library_name
diff --git a/lib/python/ctypes/ctypesgencore/processor/pipeline.py b/lib/python/ctypes/ctypesgencore/processor/pipeline.py
index 2dba8f9..4184603 100644
--- a/lib/python/ctypes/ctypesgencore/processor/pipeline.py
+++ b/lib/python/ctypes/ctypesgencore/processor/pipeline.py
@@ -1,10 +1,14 @@
 #!/usr/bin/env python
 
-import ctypes, re, os
-from ctypesgencore.processor.operations import *
-from ctypesgencore.processor.dependencies import find_dependencies
+import os
+import re
+
+import ctypes
 from ctypesgencore.ctypedescs import *
 from ctypesgencore.messages import *
+from ctypesgencore.processor.dependencies import find_dependencies
+from ctypesgencore.processor.operations import *
+
 
 """
 A brief explanation of the processing steps:
@@ -38,25 +42,27 @@ the errors that print_errors_encountered() has flagged.
 
 """
 
-def process(data,options):
+
+def process(data, options):
     status_message("Processing description list.")
-    
-    find_dependencies(data,options)
-    
-    automatically_typedef_structs(data,options)
+
+    find_dependencies(data, options)
+
+    automatically_typedef_structs(data, options)
     remove_NULL(data, options)
-    remove_descriptions_in_system_headers(data,options)
-    filter_by_regexes_exclude(data,options)
-    filter_by_regexes_include(data,options)
-    remove_macros(data,options)
-    fix_conflicting_names(data,options)
-    find_source_libraries(data,options)
-        
-    calculate_final_inclusion(data,options)
-    print_errors_encountered(data,options)
-    calculate_final_inclusion(data,options)
-
-def calculate_final_inclusion(data,opts):
+    remove_descriptions_in_system_headers(data, options)
+    filter_by_regexes_exclude(data, options)
+    filter_by_regexes_include(data, options)
+    remove_macros(data, options)
+    fix_conflicting_names(data, options)
+    find_source_libraries(data, options)
+
+    calculate_final_inclusion(data, options)
+    print_errors_encountered(data, options)
+    calculate_final_inclusion(data, options)
+
+
+def calculate_final_inclusion(data, opts):
     """calculate_final_inclusion() calculates which descriptions will be included in the
     output library.
 
@@ -66,69 +72,69 @@ def calculate_final_inclusion(data,opts):
     An object with include_rule="if_needed" is included if an object to be
         included requires it and if its requirements can be included.
     """
-    
+
     def can_include_desc(desc):
-        if desc.can_include==None:
-            if desc.include_rule=="no":
-                desc.can_include=False
-            elif desc.include_rule=="yes" or desc.include_rule=="if_needed":
-                desc.can_include=True
+        if desc.can_include is None:
+            if desc.include_rule == "no":
+                desc.can_include = False
+            elif desc.include_rule == "yes" or desc.include_rule == "if_needed":
+                desc.can_include = True
                 for req in desc.requirements:
                     if not can_include_desc(req):
-                        desc.can_include=False
+                        desc.can_include = False
         return desc.can_include
-        
+
     def do_include_desc(desc):
         if desc.included:
-            return # We've already been here
+            return  # We've already been here
         desc.included = True
         for req in desc.requirements:
             do_include_desc(req)
-    
+
     for desc in data.all:
-        desc.can_include=None # None means "Not Yet Decided"
-        desc.included=False
-        
+        desc.can_include = None  # None means "Not Yet Decided"
+        desc.included = False
+
     for desc in data.all:
-        if desc.include_rule=="yes":
+        if desc.include_rule == "yes":
             if can_include_desc(desc):
                 do_include_desc(desc)
 
-def print_errors_encountered(data,opts):
+
+def print_errors_encountered(data, opts):
     # See descriptions.py for an explanation of the error-handling mechanism
     for desc in data.all:
         # If description would not have been included, dont bother user by
         # printing warnings.
         if desc.included or opts.show_all_errors:
-            if opts.show_long_errors or len(desc.errors)+len(desc.warnings)<=2:
-                for (error,cls) in desc.errors:
+            if opts.show_long_errors or len(desc.errors) + len(desc.warnings) <= 2:
+                for (error, cls) in desc.errors:
                     # Macro errors will always be displayed as warnings.
                     if isinstance(desc, MacroDescription):
                         if opts.show_macro_warnings:
-                            warning_message(error,cls)
+                            warning_message(error, cls)
                     else:
-                        error_message(error,cls)
-                for (warning,cls) in desc.warnings:
-                    warning_message(warning,cls)
-            
+                        error_message(error, cls)
+                for (warning, cls) in desc.warnings:
+                    warning_message(warning, cls)
+
             else:
                 if desc.errors:
-                    error1,cls1 = desc.errors[0]
-                    error_message(error1,cls1)
-                    numerrs = len(desc.errors)-1
+                    error1, cls1 = desc.errors[0]
+                    error_message(error1, cls1)
+                    numerrs = len(desc.errors) - 1
                     numwarns = len(desc.warnings)
                     if numwarns:
-                        error_message("%d more errors and %d more warnings " \
-                            "for %s" % (numerrs,numwarns,desc.casual_name()))
+                        error_message("%d more errors and %d more warnings "
+                                      "for %s" % (numerrs, numwarns, desc.casual_name()))
                     else:
-                        error_message("%d more errors for %s " % \
-                            (numerrs,desc.casual_name()))
+                        error_message("%d more errors for %s " %
+                                      (numerrs, desc.casual_name()))
                 else:
-                    warning1,cls1 = desc.warnings[0]
-                    warning_message(warning1,cls1)
-                    warning_message("%d more errors for %s" % \
-                        (len(desc.warnings)-1, desc.casual_name()))
+                    warning1, cls1 = desc.warnings[0]
+                    warning_message(warning1, cls1)
+                    warning_message("%d more errors for %s" %
+                                    (len(desc.warnings) - 1, desc.casual_name()))
         if desc.errors:
             # process() will recalculate to take this into account
             desc.include_rule = "never"
-
diff --git a/lib/python/ctypes/fix.sed b/lib/python/ctypes/fix.sed
index 63a6471..5cc0447 100644
--- a/lib/python/ctypes/fix.sed
+++ b/lib/python/ctypes/fix.sed
@@ -1,7 +1,7 @@
 #!/usr/bin/sed -f
 /^# End loader$/a\
-from ctypes_preamble import *\
-from ctypes_preamble import _variadic_function\
-from ctypes_loader import *
+from .ctypes_preamble import *\
+from .ctypes_preamble import _variadic_function\
+from .ctypes_loader import *
 /^# Begin preamble$/,/^# End preamble$/d
 /^# Begin loader$/,/^# End loader$/d
diff --git a/lib/python/ctypes/loader.py b/lib/python/ctypes/loader.py
index d29f4f6..ab2fd5e 100644
--- a/lib/python/ctypes/loader.py
+++ b/lib/python/ctypes/loader.py
@@ -2,14 +2,14 @@
 # Copyright (c) 2008 David James
 # Copyright (c) 2006-2008 Alex Holkner
 # All rights reserved.
-# 
+#
 # Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions 
+# modification, are permitted provided that the following conditions
 # are met:
 #
 #  * Redistributions of source code must retain the above copyright
 #    notice, this list of conditions and the following disclaimer.
-#  * Redistributions in binary form must reproduce the above copyright 
+#  * Redistributions in binary form must reproduce the above copyright
 #    notice, this list of conditions and the following disclaimer in
 #    the documentation and/or other materials provided with the
 #    distribution.
@@ -32,31 +32,38 @@
 # POSSIBILITY OF SUCH DAMAGE.
 # ----------------------------------------------------------------------------
 
-import os.path, re, sys, glob
+import glob
+import os.path
+import re
+import sys
+
 import ctypes
 import ctypes.util
 
+
 def _environ_path(name):
     if name in os.environ:
         return os.environ[name].split(":")
     else:
         return []
 
+
 class LibraryLoader(object):
+
     def __init__(self):
-        self.other_dirs=[]
-    
-    def load_library(self,libname):
+        self.other_dirs = []
+
+    def load_library(self, libname):
         """Given the name of a library, load it."""
         paths = self.getpaths(libname)
-        
+
         for path in paths:
             if os.path.exists(path):
                 return self.load(path)
-        
-        raise ImportError,"%s not found." % libname
-    
-    def load(self,path):
+
+        raise ImportError("%s not found." % libname)
+
+    def load(self, path):
         """Given a path to a library, load it."""
         try:
             # Darwin requires dlopen to be called with mode RTLD_GLOBAL instead
@@ -68,42 +75,44 @@ class LibraryLoader(object):
             else:
                 return ctypes.cdll.LoadLibrary(path)
         except OSError as e:
-            raise ImportError,e
-    
-    def getpaths(self,libname):
+            raise ImportError(e)
+
+    def getpaths(self, libname):
         """Return a list of paths where the library might be found."""
         if os.path.isabs(libname):
             yield libname
-        
+
         else:
             for path in self.getplatformpaths(libname):
                 yield path
-            
+
             path = ctypes.util.find_library(libname)
-            if path: yield path
-    
+            if path:
+                yield path
+
     def getplatformpaths(self, libname):
         return []
 
 # Darwin (Mac OS X)
 
+
 class DarwinLibraryLoader(LibraryLoader):
     name_formats = ["lib%s.dylib", "lib%s.so", "lib%s.bundle", "%s.dylib",
-                "%s.so", "%s.bundle", "%s"]
-    
-    def getplatformpaths(self,libname):
+                    "%s.so", "%s.bundle", "%s"]
+
+    def getplatformpaths(self, libname):
         if os.path.pathsep in libname:
             names = [libname]
         else:
             names = [format % libname for format in self.name_formats]
-        
+
         for dir in self.getdirs(libname):
             for name in names:
-                yield os.path.join(dir,name)
-    
-    def getdirs(self,libname):
+                yield os.path.join(dir, name)
+
+    def getdirs(self, libname):
         '''Implements the dylib search as specified in Apple documentation:
-        
+
         http://developer.apple.com/documentation/DeveloperTools/Conceptual/
             DynamicLibraries/Articles/DynamicLibraryUsageGuidelines.html
 
@@ -116,9 +125,9 @@ class DarwinLibraryLoader(LibraryLoader):
         if not dyld_fallback_library_path:
             dyld_fallback_library_path = [os.path.expanduser('~/lib'),
                                           '/usr/local/lib', '/usr/lib']
-        
+
         dirs = []
-        
+
         if '/' in libname:
             dirs.extend(_environ_path("DYLD_LIBRARY_PATH"))
         else:
@@ -127,7 +136,7 @@ class DarwinLibraryLoader(LibraryLoader):
 
         dirs.extend(self.other_dirs)
         dirs.append(".")
-        
+
         if hasattr(sys, 'frozen') and sys.frozen == 'macosx_app':
             dirs.append(os.path.join(
                 os.environ['RESOURCEPATH'],
@@ -135,14 +144,15 @@ class DarwinLibraryLoader(LibraryLoader):
                 'Frameworks'))
 
         dirs.extend(dyld_fallback_library_path)
-        
+
         return dirs
 
 # Posix
 
+
 class PosixLibraryLoader(LibraryLoader):
     _ld_so_cache = None
-    
+
     def _create_ld_so_cache(self):
         # Recreate search path followed by ld.so.  This is going to be
         # slow to build, and incorrect (ld.so uses ld.so.cache, which may
@@ -153,17 +163,19 @@ class PosixLibraryLoader(LibraryLoader):
 
         directories = []
         for name in ("LD_LIBRARY_PATH",
-                     "SHLIB_PATH", # HPUX
-                     "LIBPATH", # OS/2, AIX
-                     "LIBRARY_PATH", # BE/OS
-                    ):
+                     "SHLIB_PATH",  # HPUX
+                     "LIBPATH",  # OS/2, AIX
+                     "LIBRARY_PATH",  # BE/OS
+                     ):
             if name in os.environ:
                 directories.extend(os.environ[name].split(os.pathsep))
         directories.extend(self.other_dirs)
         directories.append(".")
 
-        try: directories.extend([dir.strip() for dir in open('/etc/ld.so.conf')])
-        except IOError: pass
+        try:
+            directories.extend([dir.strip() for dir in open('/etc/ld.so.conf')])
+        except IOError:
+            pass
 
         directories.extend(['/lib', '/usr/lib', '/lib64', '/usr/lib64'])
 
@@ -178,7 +190,7 @@ class PosixLibraryLoader(LibraryLoader):
                     # Index by filename
                     if file not in cache:
                         cache[file] = path
-                    
+
                     # Index by library name
                     match = lib_re.match(file)
                     if match:
@@ -189,37 +201,44 @@ class PosixLibraryLoader(LibraryLoader):
                 pass
 
         self._ld_so_cache = cache
-    
+
     def getplatformpaths(self, libname):
         if self._ld_so_cache is None:
             self._create_ld_so_cache()
 
         result = self._ld_so_cache.get(libname)
-        if result: yield result
+        if result:
+            yield result
 
         path = ctypes.util.find_library(libname)
-        if path: yield os.path.join("/lib",path)
+        if path:
+            yield os.path.join("/lib", path)
 
 # Windows
 
+
 class _WindowsLibrary(object):
+
     def __init__(self, path):
         self.cdll = ctypes.cdll.LoadLibrary(path)
         self.windll = ctypes.windll.LoadLibrary(path)
 
     def __getattr__(self, name):
-        try: return getattr(self.cdll,name)
+        try:
+            return getattr(self.cdll, name)
         except AttributeError:
-            try: return getattr(self.windll,name)
+            try:
+                return getattr(self.windll, name)
             except AttributeError:
                 raise
 
+
 class WindowsLibraryLoader(LibraryLoader):
     name_formats = ["%s.dll", "lib%s.dll"]
-    
+
     def load(self, path):
         return _WindowsLibrary(path)
-    
+
     def getplatformpaths(self, libname):
         if os.path.sep not in libname:
             for name in self.name_formats:
@@ -233,13 +252,14 @@ class WindowsLibraryLoader(LibraryLoader):
 # the Ctypesgen maintainers.
 
 loaderclass = {
-    "darwin":   DarwinLibraryLoader,
-    "cygwin":   WindowsLibraryLoader,
-    "win32":    WindowsLibraryLoader
+    "darwin": DarwinLibraryLoader,
+    "cygwin": WindowsLibraryLoader,
+    "win32": WindowsLibraryLoader
 }
 
 loader = loaderclass.get(sys.platform, PosixLibraryLoader)()
 
+
 def add_library_search_dirs(other_dirs):
     loader.other_dirs = other_dirs
 
diff --git a/lib/python/ctypes/preamble.py b/lib/python/ctypes/preamble.py
index 4c6bf1a..804025e 100644
--- a/lib/python/ctypes/preamble.py
+++ b/lib/python/ctypes/preamble.py
@@ -1,4 +1,7 @@
-import ctypes, os, sys
+import os
+import sys
+
+import ctypes
 from ctypes import *
 
 _int_types = (c_int16, c_int32)
@@ -13,12 +16,14 @@ for t in _int_types:
 del t
 del _int_types
 
+
 class c_void(Structure):
     # c_void_p is a buggy return type, converting to int, so
     # POINTER(None) == c_void_p is actually written as
     # POINTER(c_void), so it can be treated as a real pointer.
     _fields_ = [('dummy', c_int)]
 
+
 def POINTER(obj):
     p = ctypes.POINTER(obj)
 
@@ -44,29 +49,35 @@ ReturnString = c_char_p
 #
 # Non-primitive return values wrapped with UNCHECKED won't be
 # typechecked, and will be converted to c_void_p.
+
+
 def UNCHECKED(type):
     if (hasattr(type, "_type_") and isinstance(type._type_, str)
-        and type._type_ != "P"):
+            and type._type_ != "P"):
         return type
     else:
         return c_void_p
 
 # ctypes doesn't have direct support for variadic functions, so we have to write
 # our own wrapper class
+
+
 class _variadic_function(object):
-    def __init__(self,func,restype,argtypes):
-        self.func=func
-        self.func.restype=restype
-        self.argtypes=argtypes
+
+    def __init__(self, func, restype, argtypes):
+        self.func = func
+        self.func.restype = restype
+        self.argtypes = argtypes
+
     def _as_parameter_(self):
         # So we can pass this variadic function as a function pointer
         return self.func
-    def __call__(self,*args):
-        fixed_args=[]
-        i=0
+
+    def __call__(self, *args):
+        fixed_args = []
+        i = 0
         for argtype in self.argtypes:
             # Typecheck what we can
             fixed_args.append(argtype.from_param(args[i]))
-            i+=1
-        return self.func(*fixed_args+list(args[i:]))
-
+            i += 1
+        return self.func(*fixed_args + list(args[i:]))
diff --git a/lib/python/docs/Makefile b/lib/python/docs/Makefile
index ef92bfd..cdf1970 100644
--- a/lib/python/docs/Makefile
+++ b/lib/python/docs/Makefile
@@ -50,6 +50,7 @@ libpythonclean:
 	-rm -f _templates/layout.html
 	-rm -f src/ctypes*.rst
 	-rm -f src/exceptions.rst
+	-rm -f src/gunittest.*rst
 	-rm -f src/imaging.rst
 	-rm -f src/pydispatch.rst
 	-rm -f src/pygrass.*rst
@@ -60,6 +61,7 @@ libpythonapidoc:
 	@echo "SPHINXBUILD: Using <$(SPHINXBUILD)>"
 	$(call run_grass,$(SPHINXAPIDOC) -T -f -o src/ ../imaging/)
 	$(call run_grass,$(SPHINXAPIDOC) -T -f -o src/ ../exceptions/)
+	$(call run_grass,$(SPHINXAPIDOC) -T -f -o src/ ../gunittest/ ../gunittest/multireport.py ../gunittest/multirunner.py ../gunittest/main.py)
 	$(call run_grass,$(SPHINXAPIDOC) -T -f -o src/ ../pydispatch/)
 	$(call run_grass,$(SPHINXAPIDOC) -T -f -o src/ ../pygrass/)
 	$(call run_grass,$(SPHINXAPIDOC) -T -f -o src/ ../script/)
diff --git a/lib/python/docs/conf.py b/lib/python/docs/conf.py
index 8b533df..622cf3a 100644
--- a/lib/python/docs/conf.py
+++ b/lib/python/docs/conf.py
@@ -25,6 +25,7 @@ if not os.getenv('GISBASE'):
 sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass')))
 sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass', 'ctypes')))
 sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass', 'exceptions')))
+sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass', 'gunittest')))
 sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass', 'imaging')))
 sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass', 'pydispatch')))
 sys.path.insert(0, os.path.abspath(os.path.join(os.environ['GISBASE'], 'etc', 'python', 'grass', 'pygrass')))
diff --git a/lib/python/docs/src/gunittest_running_tests.rst b/lib/python/docs/src/gunittest_running_tests.rst
new file mode 100644
index 0000000..1cc886a
--- /dev/null
+++ b/lib/python/docs/src/gunittest_running_tests.rst
@@ -0,0 +1,155 @@
+Running the test framework of GRASS GIS
+=======================================
+
+This is an advanced guide to running tests of GRASS GIS using GRASS
+testing framework (`gunittest`). For introduction to this topic,
+go to :ref:`test-general`.
+
+
+.. _running-tests-report:
+
+Running tests and creating report
+---------------------------------
+
+To test before commit, run all tests using testing framework.
+First start GRASS GIS session and go to the root directory of your
+GRASS GIS source code copy::
+
+    cd my/grass/source/code/root
+
+Then execute::
+
+    python -m grass.gunittest.main --location locname --location-type nc
+
+where ``locname`` is a name of location in current GRASS GIS data(base) directory
+(GISDBASE) and ``nc`` is a location specified by individual test files
+(the later is not yet fully implemented, so just put there ``nc`` every time).
+
+``grass.gunittest.main`` writes a text summary to standard output and
+it creates an HTML report from all tests in all ``testsuite`` directories inside
+the directory tree. The report is placed in ``testreport`` by default.
+Open file ``testreport/index.html`` in you web browser to inspect it.
+
+To execute just part of the tests when fixing something, ``cd`` into some
+subdirectory, e.g. ``lib`` and execute the same command as above. 
+gain, it will execute all tests in all ``testsuite`` subdirectories and
+create a report.
+
+For changing GRASS GIS data(base) directory and for other parameters, see
+help for ``grass.gunittest.main`` module::
+
+    python -m grass.gunittest.main --help
+
+
+Running individual test files
+-----------------------------
+
+To run a single test file, start GRASS session in the Location and Mapset
+suitable for testing and go to the directory where the test file is.
+Then run the file as a Python script::
+
+    python test_something.py
+
+If the file is a ``gunittest``-based or ``unittest``-based test,
+you will receive a textual output with failed individual tests (test methods).
+If the file is a general Python scriptyou need to examine the output carefully
+as well as source code itself to see what is expected behavior.
+
+The same as for general Python scripts, applies also to Shell scripts,
+so you should examine the output carefully.
+You should execute scripts using::
+
+    sh -e -x test_topology_vgeneralize.sh
+
+The ``-x`` is just to see which commands are executed but the ``-e`` flag
+is crucial because this is how the GRASS testing framework runs the Shell
+scripts. The flag causes execution to stop once some command gives a non-zero
+return code.
+
+
+Running tests and creating report
+---------------------------------
+
+Currently there is full support only for running all the tests in
+the small (basic) version of GRASS GIS sample Location for North Carolina
+(see `GRASS GIS sample data`).
+
+.. _GRASS GIS sample data: https://grass.osgeo.org/download/sample-data
+
+
+Example Bash script to run be used as a cron job
+------------------------------------------------
+
+.. code-block:: bash
+
+    #!/bin/bash
+
+    set -e  # fail fast
+
+    REPORTS=".../testreports"
+    GRASSSRC=".../grass-src"
+    # here we suppose default compilation settings of GRASS and no make install
+    GRASSBIN="$GRASSSRC/bin.../grass72"
+    GRASSDIST="$GRASSSRC/dist..."
+    
+    # necessary hardcoded GRASS paths
+    GRASSDIST_PYTHON="$GRASSDIST/etc/python"
+    GRASS_MULTI_RUNNER="$GRASSSRC/lib/python/gunittest/multirunner.py"
+    GRASS_MULTI_REPORTER="$GRASSSRC/lib/python/gunittest/multireport.py"
+
+    DATE_FLAGS="--utc +%Y-%m-%d-%H-%M"
+    NOW=$(date $DATE_FLAGS)
+
+    # contains last executed command stdout and stderr
+    # here were rely on reports being absolute
+    OUTPUT_LOGFILE="$REPORTS/output-$NOW.txt"
+
+    # these are relative to REPORTS
+    CURRENT_REPORT_BASENAME="reports_for_date-"
+    FINAL_REPORT_DIR="summary_report"
+    CURRENT_REPORTS_DIR="$CURRENT_REPORT_BASENAME$NOW"
+    LOGFILE="$REPORTS/runs.log"
+
+    GRASSDATA="/grassdata/tests-grassdata"
+
+    echo "Nightly GRASS GIS test started: $NOW" >> $LOGFILE
+
+    # compile current source code from scratch
+    cd $GRASSSRC
+    make distclean -j4
+    svn up
+    ./configure ...  # or a script containing all the flags
+    make -j4
+
+    # run tests for the current source code
+    cd $REPORTS
+    mkdir $CURRENT_REPORTS_DIR
+    cd $CURRENT_REPORTS_DIR
+    python $GRASS_MULTI_RUNNER \
+        --grassbin $GRASSBIN \
+        --grasssrc $GRASSSRC \
+        --grassdata $GRASSDATA \
+        --location nc_spm_08_grass7 --location-type nc \
+        --location other_location --location-type other_type
+
+    # create overall report of all so far executed tests
+    # the script depends on GRASS but just Python part is enough
+    export PYTHONPATH="$GRASSDIST_PYTHON:$PYTHONPATH"
+    python $GRASS_MULTI_REPORTER --output $FINAL_REPORT_DIR \
+        $CURRENT_REPORT_BASENAME*/*
+
+    # although we cannot be sure the tests were executed was successfully
+    # so publish or archive results
+    rsync -rtvu --delete $REPORTS/ "/var/www/html/grassgistestreports"
+
+    echo "Nightly ($NOW) GRASS GIS test finished: $(date $DATE_FLAGS)" >> $LOGFILE
+
+A script similar to this one can be used as a cron job, on most Linux systems
+using ``crontab -e`` and adding a line similar to the following one::
+
+    0 4 * * 1 .../grasstests/test_grass_gis.sh
+
+Which will perform the tests every Monday at 4:00 in the morning (local time).
+
+Particular script and frequency depends on what you want to test and
+how many resources you want to use.
diff --git a/lib/python/docs/src/gunittest_testing.rst b/lib/python/docs/src/gunittest_testing.rst
new file mode 100644
index 0000000..129f160
--- /dev/null
+++ b/lib/python/docs/src/gunittest_testing.rst
@@ -0,0 +1,722 @@
+Testing GRASS GIS source code and modules
+=========================================
+
+If you are already familiar with the basic concepts
+of GRASS testing framework, you might want to skip to one of:
+
+* :ref:`test-module` section
+* :ref:`test-c` section
+* :ref:`test-python` section
+* :ref:`test-doctest` section
+* :class:`~gunittest.case.TestCase` class
+* :ref:`running-tests-report` section
+
+
+Introduction
+------------
+
+For the testing in GRASS GIS, we are using a `gunittest` package and
+we usually refer to the system of writing and running tests
+as to a *GRASS testing framework*.
+
+The framework is based on Python `unittest`_ package with a large number
+of GRASS-specific improvements, extensions and changes. These include
+things such as creation of GRASS-aware HTML test reports,
+or running of test in the way that process terminations potentially
+caused by C library functions does not influence the main testing process.
+
+Some tests will run without any data but many tests require
+the small (basic) version of GRASS GIS sample Location for North Carolina
+(see `GRASS GIS sample data`).
+
+Basic example
+-------------
+
+If you are writing a test of a GRASS module, 
+create a Python script with the content derived from the example below.
+When using existing existing maps, suppose you are in North Carolina SPM
+GRASS sample location.
+
+The file can contain one or more test case classes. Each class
+can contain one or more test methods (functions).
+Here we create one test case class with one test method.
+The other two methods are class methods ensuring the right environment
+for all test methods inside a test case class.
+When a test file becomes part of source code (which is the usual case)
+it must be placed into a directory named ``testsuite``.
+
+.. code-block:: python
+
+    from grass.gunittest.case import TestCase
+    from grass.gunittest.main import test
+
+
+    # test case class must be derived from grass.gunittest.TestCase
+    class TestSlopeAspect(TestCase):
+
+        @classmethod
+        def setUpClass(cls):
+            """Ensures expected computational region"""
+            # to not override mapset's region (which might be used by other tests)
+            cls.use_temp_region()
+            # cls.runModule or self.runModule is used for general module calls
+            cls.runModule('g.region', raster='elevation')
+            # note that the region set by default for NC location is the same as
+            # the elevation raster map, this is an example shows what to do
+            # in the general case
+
+        @classmethod
+        def tearDownClass(cls):
+            cls.del_temp_region()
+
+        # test method must start with test_
+        def test_limits(self):
+            """Test that slope and aspect are in expected limits"""
+            # we don't have to delete (g.remove) the maps
+            # but we need to use unique names within one test file
+            slope = 'limits_slope'
+            aspect = 'limits_aspect'
+            # self.assertModule is used to call module which we test
+            # we expect module to finish successfully
+            self.assertModule('r.slope.aspect', elevation='elevation',
+                              slope=slope, aspect=aspect)
+            # function tests if map's min and max are within expected interval
+            self.assertRasterMinMax(map=slope, refmin=0, refmax=90,
+                                    msg="Slope in degrees must be between 0 and 90")
+            self.assertRasterMinMax(map=aspect, refmin=0, refmax=360,
+                                    msg="Aspect in degrees must be between 0 and 360")
+
+
+    if __name__ == '__main__':
+        test()
+
+In the example we have used only two assert methods, one to check that
+module runs and end successfully and the other to test that map values are
+within an expect interval. There is a much larger selection of assert methods
+in :class:`~gunittest.case.TestCase` class documentation
+and also in Python `unittest`_ package documentation.
+
+To run the test, run GRASS GIS, use NC SPM sample location and create
+a separate mapset (name it ``test`` for example). Then go to the directory
+with the test file and run it:
+
+.. code-block:: sh
+
+    python some_test_file.py
+
+The output goes to the terminal in this case. Read further to see
+also more advanced ways of invoking the tests.
+
+We have shown a test of a GRASS module using NC sample location.
+However, tests can be written also for C and Python library and also
+for internal functions in modules. See the rests of this document
+for a complete guide.
+
+
+Building blocks and terminology
+-------------------------------
+
+.. note::
+    Some parts of the terminology should be revised to ensure understanding and
+    acceptance.
+
+test function and test method
+    A *test function* is a test of one particular feature or a test of
+    one particular result.
+    A *test function* is referred to as *test method*, *individual test*
+    or just *test*.
+
+assert function and assert method
+    An *assert function* (or *assert method*) refers to a function
+    which checks that some predicate is fulfilled. For example,
+    predicate can be that two raster maps does not differ from each
+    other or that module run ends with successfully.
+
+test case
+    The test methods testing one particular topic or feature are in one
+    test case class.
+
+    From another point of view, one test case class contains all tests
+    which require the same preparation and cleanup steps. 
+    In other words, a *test case* class contains all tests which are
+    using the same *test fixture*.
+
+    There is also a general :class:`~gunittest.case.TestCase` class which
+    all concrete test case classes should inherit from to get all
+    GRASS-specific testing functionality and also to be found
+    by the testing framework.
+
+test suite
+    A *test suite*, or also *testsuite*, is a set of tests focused on one
+    topic, functionality or unit (similarly to test case).
+    In GRASS GIS, it is a set of files in one ``testsuite`` directory.
+    The test files in one ``testsuite``
+    directory are expected to test what is in the parent directory
+    of a given ``testsuite`` directory. This is used to organize
+    tests in the source code and also to generate test reports.
+
+    The term *test suite* may also refer to ``TestSuite`` class
+    which is part of Python `unittest`_ test invocation mechanism
+    used by `gunittest` internally.
+    
+    More generally, a *test suite* is a group of test cases or any tests
+    (test methods, test cases and other test suites) in one or more files.
+
+test file
+    A *test file* is a Python script executable as a standalone process.
+    It does not set up any special environment and runs where it was invoked.
+    The testing framework does not rely on the file to end in a standard
+    way which means that if one file ends with segmentation fault
+    the testing framework can continue in testing of other test files. 
+    Test files are central part `gunittest` system and are also the biggest
+    difference from Python `unittest`_. Test file name should be unique
+    but does not have to contain all parent directory names, for example
+    it can consist from a simplified name of a module plus a word or two
+    describing which functionality is tested. The name should not contain
+    dots (except for the ``.py`` suffix).
+    
+    Alternatively, a test file could be called *test script* or
+    *test module* (both in Python and GRASS sense) but note that
+    none of these is used.
+
+test runner and test invoker
+    Both *test runner* and *test invoker* refer to classes, functions or
+    scripts used to run (invoke) tests or test files. One of the terms may
+    fade of in the future (probably *invoke* because it is not used by
+    Python `unittest`_).
+
+test fixture (test set up and tear down)
+    The preparation of the test is called *setup* or *set up* and the cleaning
+    after the test is called *teardown* or *tear down*. A *test fixture* refers
+    to these two steps and also to the environment where the test or tests
+    are executed.
+
+    Each test case class can define ``setUp``, ``setUpClass``, ``tearDown``
+    and ``tearDownClass`` methods to implement preparation and cleanup
+    steps for tests it contains. The methods ending with ``Class`` are
+    class methods (in Python terminology) and should be defined using
+    ``@classmethod`` decorator and with ``cls`` as first argument. These
+    methods are executed once for the whole class while the methods
+    without ``Class`` are executed for each test method. 
+
+    In GRASS GIS, the preparation may, but does not have to, contain imports
+    of maps, using temporary region, setting computational region,
+    or generating random maps. The cleanup step should remove temporary
+    region as well as remove all created maps and files.
+
+test report
+    A *test report* is a document or set of documents with results of
+    all executed tests together with additional information such as output
+    of test.
+
+    Note that also *test result* is used also used in similar context
+    because the class responsible for representing or creating the report
+    in Python `unittest`_ package is called ``TestResult``.
+
+test failure and test error
+    A *test failure* occurs when a assert fails, e.g. value of
+    a parameter given to ``assertTrue()`` function is ``False``.
+    A *test error* occurs when something what is not tested fails,
+    i.e. when exception is risen for example preparation code or
+    a test method itself.
+
+.. _test-general:
+
+Testing with gunittest package in general
+-----------------------------------------
+
+The tests should be in files in a ``testsuite`` directory which is a subdirectory
+of the directory with tested files (module, package, library). Each test file
+(testing file) can have can have several test cases (testing classes).
+All test file names should have pattern ``test*.py`` or ``*.py``
+if another naming convention seems more appropriate.
+
+GRASS GIS `gunittest` package and testing framework is similar to the standard
+Python ``unittest`` package, so the ways to build tests are very similar.
+Test methods are in a test test case class and each test method tests one
+think using one or more assert methods.
+
+::
+
+    from grass.gunittest.case import TestCase
+    from grass.gunittest.main import test
+
+
+    class TestPython(TestCase):
+
+        def test_counting(self):
+            """Test that Python can count to two"""
+            self.assertEqual(1 + 1, 2)
+
+
+    if __name__ == '__main__':
+        test()
+
+Each test file should be able to run by itself accept certain set of command
+line parameters (currently none). This is done using
+``if __name__ == '__main__'`` and  ``gunittest.test()`` function.
+
+To run a test file, start GRASS session in the location and mapset suitable for
+testing (typically, NC sample location) and go to the test file's directory
+(it will be usually some ``testsuite`` directory in the source code)
+and run it as a Python script::
+
+    python test_something.py
+
+When running individual test files, it is advisable to be in a separate
+mapset, so for example when using NC sample location, you should use
+a new mapset of arbitrary name but not one of the predefined mapsets).
+
+To run all tests in the source tree, you have to be in the source code
+directory where you want to find tests, also you need to be inside
+a GRASS session and use command similar to this one::
+
+    python -m grass.gunittest.main --location nc_spm_grass7 --location-type nc
+
+All test files in all ``testsuite`` directories will be executed and
+a report will be created in a newly created ``testreport`` directory.
+Open the file ``testreport/index.html`` to browse though the results.
+Note that again you need to be in GRASS session to run the tests in this way.
+
+The ``--location-type`` parameter serves to filter tests according to data
+they can run successfully with. It is ignored for tests which does not have
+this specified.
+
+In this case each running test file gets its own mapset and
+current working directory but all run are in one location.
+
+.. warning::
+    The current location is ignored but you should not run tests
+    in the location which is precious to you for the case that something fails
+    and current location is used for tests.
+
+When your are writing tests you can rely on having maps which are present
+in the NC sample location, or you can generate random maps. You can also
+import your data which you store inside ``data`` directory inside the
+given ``testsuite`` directory (for maps, ASCII formats are usually used).
+If you can create tests independent on location projection and location data
+it is much better then relying on given data but it is not at all required
+and all approaches are encouraged.
+
+Whenever possible it is advantageous to use available assert methods.
+GRASS-specific assert methods are in :class:`gunittest.case.TestCase` class.
+For general assert methods refer to Python `unittest`_ package documentation.
+Both are used in the same way; they are methods of a given test case class.
+In cases (which should be rare) when no assert methods fits the purpose,
+you can use your own checking finalized with a call of ``assertTrue()``
+or ``assertFalse()`` method with the ``msg`` parameter parameter set
+to an informative message.
+
+When you are using multiple assert methods in one test method, you must
+carefully consider what assert methods are testing and in which order
+you should put them. Consider the following example::
+
+    # incorrect order
+    def test_map_in_list_wrong(self):
+        maps = get_list_of_maps()
+        self.assertIn('elevation', maps)
+        # there is no point in testing that
+        # if list (or string) was empty or None execution of test ended
+        # at the line with assertIn
+        self.assertTrue(maps)
+
+    # correct order
+    def test_map_in_list_correct(self):
+        maps = get_list_of_maps()
+        # see if list (or string) is not empty (or None)
+        self.assertTrue(maps)
+        # and then see if the list fulfills more advanced conditions
+        self.assertIn('elevation', maps)
+
+If you are not sure when you would use multiple asserts consider the case
+when using only ``assertIn()`` function::
+
+    def test_map_in_list_short(self):
+        maps = get_list_of_maps()
+        self.assertIn('elevation', maps)
+
+If the list (or string) is empty, the test fails and the message says
+something about ``elevation''`` not being in the ``maps`` but
+it might be much more useful if it would tell us that the list ``maps``
+does not contain any items. In case of ``maps`` being ``None``, the situation
+is more complicated since we using ``assertIn`` with ``None`` will
+cause test error (not only failure). We must consider what is
+expected behavior of ``get_list_of_maps()`` function and what
+we are actually testing. For example, if we would be testing function
+interface, we probably should test separately different possibilities
+using ``assertIsNotNone()`` and then ``assertTrue()`` and then anything else.
+
+Another reason for using multiple assert methods is that we may want to
+test different qualities of a result. Following the previous example,
+we can test that a list contains some map and does not contain some other.
+If you are testing a lot of things and they don't have any clear order
+or dependencies, it might be more advantageous to split
+testing into several testing methods and do the preparation (creating a list
+in our example) in ``setUpClass()`` or ``setUp()`` method.
+
+
+.. _test-module:
+
+Tests of GRASS modules
+----------------------
+
+This is applicable for both GRASS modules written in C or C++ and
+GRASS modules written in Python since we are testing the whole module
+(which is invoked as a subprocess).
+
+::
+
+    def test_elevation(self):
+        self.assertModule('r.info', map='elevation', flags='g')
+        ...
+
+Use method ``assertRasterMinMax()`` to test that a result is within
+expected range. This is a very general test which checks the basic
+correctness of the result and can be used with different maps
+in different locations.
+
+::
+
+    def test_slope_limits(self):
+        slope = 'limits_slope'
+        self.assertModule('r.slope.aspect', elevation='elevation',
+                          slope=slope)
+        self.assertRasterMinMax(map=slope, refmin=0, refmax=90,
+                                msg="Slope in degrees must be between 0 and 90")
+
+.. todo::
+    Add example of assertions of key-value results.
+
+Especially if a module module has a lot of different parameters allowed
+in different combinations, you should test the if the wrong ones are really
+disallowed and proper error messages are provided (in addition, you can
+test things such as creation and removal of maps in error states).
+
+::
+
+    from grass.gunittest.gmodules import SimpleModule
+
+    class TestRInfoParameterHandling(TestCase):
+        """Test r.info handling of wrong input of parameters."""
+
+        def test_rinfo_wrong_map(self):
+            """Test input of map which does not exist."""
+            map_name = 'does_not_exist'
+            # create a module instance suitable for testing
+            rinfo = SimpleModule('r.info', map=map_name, flags='g')
+            # test that module fails (ends with non-zero return code)
+            self.assertModuleFail(rinfo)
+            # test that error output is not empty
+            self.assertTrue(rinfo.outputs.stderr)
+            # test that the right map is mentioned in the error message
+            self.assertIn(map_name, stderr)
+
+In some cases it might be advantageous to create a module instance
+in `setUp()` method and then modify it in test methods.
+
+.. note:
+    Test should be (natural) language, i.e. locale, independent
+    to allow testing the functionality under different locale settings.
+    So, if you are testing content of messages (which should be usually
+    translated), use `assertIn()` method (regular expression might be
+    applicable in some cases but in most cases `in` is exactly the
+    operation needed).
+
+.. _test-c:
+
+Tests of C and C++ code
+-----------------------
+
+There are basically two possibilities how to test C and C++ code.
+If you are testing GRASS library code the functions which are part of API
+these functions are exposed through Python ``ctypes`` and thus can be tested
+in Python. See section :ref:`test-python` for reference.
+
+However, more advantageous and more preferable (although sometimes
+more complicated) solution is to write a special program, preferably
+GRASS module (i.e., using ``G_parser``). The dedicated program can
+provide more direct interface to C and C++ functions used by
+a GRASS module then the module and can also serve for doing benchmarks
+which are not part of the testing.
+This can approach can be applied to both 
+
+See the example in ``lib/raster3d`` GRASS source code directory
+to create a proper Makefiles. A ``main()`` function should be written
+in the same way as for a standard module.
+
+Having a GRASS module for the purpose of testing you can write test
+as if it would be standard GRASS module.
+
+
+.. _test-python:
+
+Tests of Python code
+--------------------
+
+For testing of Python code contained in some package, use
+`gunittest` in the same way as `unittest`_ would be used.
+This basically means that if you will write tests of Python functions
+and C functions exposed to Python
+through ``ctypes`` API, you might want to focus more on `unittest`_
+documentation since you will perhaps need the more standard
+assert functions rather then the GRASS-specific ones.
+
+
+.. _test-doctest:
+
+Testing Python code with doctest
+--------------------------------
+
+.. note::
+    The primary use of ``doctest`` is to ensure that the documentation
+    for functions and classes is valid. Additionally, it can increase
+    the number of tests when executed together with other tests.
+
+In Python, the easiest thing to test are functions which performs some
+computations or string manipulations, i.e. they have some numbers or strings
+on the input and some other numbers or strings on the output.
+
+At the beginning you can use doctest for this purpose. The syntax is as follows::
+
+    def sum_list(list_to_sum):
+        """Here is some documentation in docstring.
+
+        And here is the test::
+
+        >>> sum_list([2, 5, 3])
+        10
+        """
+
+In case of GRASS modules which are Python scripts, you can add something like
+this to your script::
+
+    if __name__ == "__main__":
+        if len(sys.argv) == 2 and sys.argv[1] == '--doctest':
+            import doctest
+            doctest.testmod()
+        else:
+           main()
+
+No output means that everything was successful. Note that you cannot use all
+the ways of running doctest since doctest will fail don the module file due
+to the dot or dots in the file name. Moreover, it is sometimes required that
+the file is accessible through sys.path which is not true for case of GRASS modules.
+
+However, do not use use doctest for tests of edge cases, for tests which require
+generate complex data first, etc. In these cases use `gunittest`.
+
+
+.. _test-as-scripts:
+
+Tests as general scripts
+------------------------
+
+GRASS testing framework supports also general Python or Shell scripts
+to be used as test files. This is strongly discouraged because it
+is not using standard ``gnunittest`` assert functions which only leads
+to reimplementing the functionality, relying on a person examining the data,
+or improper tests such as mere testing
+if the module executed without an error without looking at the actual results.
+Moreover, the testing framework does not have a control over what is
+executed and how which limits potential usage and features of testing
+framework. Doing this also prevents testing framework from creating a
+detailed report and thus better understanding of what is tested and what is
+failing. Shell scripts are also harder to execute on MS Windows where the
+interpreter might not be available or might not be on path.
+
+The testing framework uses Shell interpreter with ``-e`` flag when executing
+the tests, so the tests does not have to use ``set -e`` and can rely on it being
+set from outside. The flag ensures that if some command fails, i.e. ends with
+non-zero return code (exit status), the execution of the script ends too.
+The testing framework also uses ``-x`` flag to print the executed commands
+which usually makes examining of the test output easier.
+
+If multiple test files are executed using ``grass.gunittest.main`` module,
+the testing framework creates a temporary Mapset for the general Python and
+Shell scripts in the same way as it does for ``gunittest``-based test files.
+When the tests are executed separately, the clean up in current Mapset
+and current working directory must be ensured by the user or the script itself
+(which is generally true for all test files).
+
+.. warning::
+    This is a bad practice which prevents creation of detailed reports and
+    usage of advanced ``gunittest`` features, so you should avoid it
+    whenever possible.
+
+
+Data
+----
+
+.. note::
+    Both the section and the practice itself are under development.
+
+Most of the tests requires some input data. However, it is good to write
+a test in the way that it is independent on the available data.
+In case of GRASS, we have we can have tests of functions where
+some numbers or strings are input and some numbers or string are output.
+These tests does not require any data to be provided since the numbers
+can be part of the test. Then we have another category of tests, typically
+tests of GRASS modules, which require some maps to be on the input
+and thus the output (and test) depends on the specific data.
+Again, it it best to have tests which does not require any special data
+or generally environment settings (e.g. geographic projection)
+but it is much easier to write good tests with a given set of data.
+So, an compromises must be made and tests of different types should be written.
+
+In the GRASS testing framework, each test file should be marked according to
+category it belongs to. Each category corresponds to GRASS location or locations
+where the test file can run successfully.
+
+Universal tests
+    First category is *universal*. The tests in this category use some some
+    hard coded constants, generated data, random data, or their own imported
+    data as in input to function and GRASS modules. All the tests, input data
+    and reference results should be projection independent. These tests will
+    runs always regardless of available locations.
+
+Standard names tests
+    Second category are tests using *standard names*. Tests rely on a
+    certain set of maps with particular names to be present in the location.
+    Moreover, the tests can rely also on the (semantic) meaning of the
+    names, i.e. raster map named elevation will always contain some kind of
+    digital elevation model of some area, so raster map elevation can be
+    used to compute aspect. In other words, these tests should be able to
+    (successfully) run in any location with a maps named in the same way as
+    in the standard testing location(s).
+
+Standard data tests
+    Third category of tests rely on *standard data*. These tests expect that the
+    GRASS location they run in not only contains the maps with particular names
+    as in the *standard names* but the tests rely also on the data being the
+    same as in the standard testing location(s). However, the (geographic)
+    projection or data storage can be different. This is expected to be the
+    most common case but it is much better if the tests is one of the previous
+    categories (*universal* or *standard names*). If it is possible the
+    functions or modules with tests in this category should have also tests
+    which will fit into one of the previous categories, even though these
+    additional tests will not be as precise as the other tests.
+
+Location specific tests
+    Finally, there are tests which requires certain concrete location. There
+    is (or will be) a set of standard testing locations each will have the same
+    data (maps) but the projections and data storage types will be different.
+    The suggested locations are: NC sample location in SPM projection,
+    NC in SPF, NC in LL, NC in XY, and perhaps NC in UTM, and NC in some
+    custom projection (in case of strange not-fitting projection, there is
+    a danger that the results of analyses can differer significantly).
+    Moreover, the set can be extened by GRASS locations which are using
+    different storage backends, e.g. PostGIS for vectors and PostgreSQL for
+    temporal database. Tests can specify one or preferably more of these
+    standard locations.
+
+Specialized location tests
+    Additionally, an specialized location with a collection of strange,
+    incorrect, or generally extreme data will be provided. In theory, more
+    than one location like this can be created if the data cannot be
+    together in one location or if the location itself is somehow special,
+    e.g. because of projection.
+
+Each category, or perhaps each location (will) have a set of external data
+available for import or other purposes. The standardization of this data
+is in question and thus this may be specific to each location or this
+can be a separate resource common to all tests using one of the standardized
+locations, or alternatively this data can be associated with the location
+with special data.
+
+.. note::
+    The more general category you choose for your tests the more testing data
+    can applied to your tests and the more different circumstances can be tried
+    with your tests.
+
+
+Data specific to one test
+-------------------------
+
+If the data required by the test are not part of standard location
+and cannot be part of the test file itself, this data should be stored
+in files in ``data`` subdirectory of ``testsuite`` directory.
+The test should access the data using a relative path from its location,
+i.e. all data will be accessed using ``data/...``. This ``data`` directory
+might be used directly when running test file directly in the directory
+in the source code or might be copied to the test current working directory
+when running tests by the main test invoking tool.
+
+
+Tests creating separate Mapsets, Locations and GRASS Databases
+--------------------------------------------------------------
+
+If test is creating a custom Mapset or Mapsets, it can create them in
+the current Location or create a custom GRASS Database in the current
+directory. In any case, test has to take care of cleaning up (deleting)
+the created directories and it has to use names which will be unique
+enough (name of the test case class or the file is probably a good choice
+but completely unique identifier is probably much better).
+
+If test needs custom Location or it tests something related to GRASS Database,
+it must always create a new GRASS Database in the current directory.
+
+In any case, the author must try the tests cautiously and several times
+in the same Location to see if everything works as expected. Testing
+framework is using Mapsets to separate the tests and the functions
+does not explicitly check for the case where a test is using different
+Mapset then the one which has been given to it by the framework.
+
+
+Analyzing quality of source code
+--------------------------------
+
+Besides testing, you can also use some tools to check the quality of your code
+according to various standards and occurrence of certain code patterns.
+
+For C/C++ code use third party solution `Coverity Scan`_ where GRASS GIS
+is registered as project number `1038`_. Also you can use `Cppcheck`_
+which will show a lot of errors which compilers do not check.
+In any case, set your compiler to high error and warning levels,
+check them and fix them in your code.
+
+For Python, we recommend pylint and then for style issues pep8 tool
+(and perhaps also pep257 tool). However, there is more tools available
+you can use them together with the recommend ones.
+
+To provide a way to evaluate the Python source code in the whole GRASS source
+tree there is a Python script ``grass_py_static_check.py`` which uses
+pylint and pep8 with GRASS-specific settings. Run the tool in GRASS session
+in the source code root directory. A HTML report will be created in
+``pylint_report`` directory.
+
+::
+
+    grass_py_static_check.py
+
+.. note::
+    ``grass_py_static_check.py`` is available in `sandbox`_.
+
+Additionally, if you are invoking your Python code manually using python command,
+e.g. when testing, use parameters::
+
+    python -Qwarn -tt -3 some_module.py
+
+This will warn you about usage of old division semantics for integers
+and about incompatibilities with Python 3 (if you are using Python 2)
+which 2to3 tool cannot fix. Finally, it will issue errors if are using tabs
+for indentation inconsistently (note that you should not use tabs for
+indentation at all).
+
+
+Further reading
+---------------
+
+.. toctree::
+   :maxdepth: 2
+
+   gunittest
+   gunittest_running_tests
+
+
+.. _unittest: https://docs.python.org/2/library/unittest.html
+.. _doctest: https://docs.python.org/2/library/doctest.html
+.. _Coverity Scan: https://scan.coverity.com/
+.. _1038: https://scan.coverity.com/projects/1038
+.. _Cppcheck: http://cppcheck.sourceforge.net/
+.. _sandbox: https://svn.osgeo.org/grass/sandbox/wenzeslaus/grass_py_static_check.py
+.. _GRASS GIS sample data: https://grass.osgeo.org/download/sample-data
diff --git a/lib/python/docs/src/index.rst b/lib/python/docs/src/index.rst
index d340df4..b986397 100644
--- a/lib/python/docs/src/index.rst
+++ b/lib/python/docs/src/index.rst
@@ -19,6 +19,7 @@ at various levels:
   modules
 * **GRASS GIS Temporal Framework** implements the temporal GIS functionality
   of GRASS GIS and provides an API to implement spatio-temporal processing modules
+* **Testing GRASS GIS source code and modules** using gunittest package
 * **exceptions package** contains exceptions used by other packages
 * **imaging package** is a library to create animated images and films
 * **pydispatch package** is a library for signal-dispatching
@@ -33,5 +34,6 @@ Contents:
    temporal_framework
    exceptions
    imaging
+   gunittest_testing
    pydispatch
 
diff --git a/lib/python/docs/src/pygrass_gis.rst b/lib/python/docs/src/pygrass_gis.rst
index c2bb7b9..e5a01fe 100644
--- a/lib/python/docs/src/pygrass_gis.rst
+++ b/lib/python/docs/src/pygrass_gis.rst
@@ -7,7 +7,7 @@ These classes are used to manage the infrastructure
 of GRASS database: Gisdbase, Location and Mapset
 
 Details about the GRASS GIS database management (locations and mapsets)
-can be found in the `GRASS GIS 7 User's Manual: GRASS GIS Quickstart <http://grass.osgeo.org/grass71/manuals/helptext.html>`_
+can be found in the `GRASS GIS 7 User's Manual: GRASS GIS Quickstart <http://grass.osgeo.org/grass72/manuals/helptext.html>`_
 
 .. _Region-label:
 
diff --git a/lib/python/docs/src/pygrass_vector.rst b/lib/python/docs/src/pygrass_vector.rst
index ebde4b7..77bc546 100644
--- a/lib/python/docs/src/pygrass_vector.rst
+++ b/lib/python/docs/src/pygrass_vector.rst
@@ -69,7 +69,12 @@ To begin using a vector map, it must first be opened: ::
 
 The ``open()`` method supports a number of option arguments (see the :class:`~pygrass.vector.abstract.Info`
 documentation for a complete list). In particular, the mode argument can take a
-a value of ``r`` for reading, ``w`` for writing, or ``rw`` for reading/writing.
+a value of:
+
+'r': read-only mode, vector features are read-only (attribute table is modifiable since are handle by a database);
+'w': write-only mode, write a new vector map in case of an old vector map all the previous features will be removed/overwritten;
+'rw': read-write mode, add new/update vector features without removing the existing ones. Add/remove vector layers.
+
 
 The geometry of a vector map can be read sequentially using the ``next()`` method.
 To return to the beginning, use the ``rewind()`` method.
@@ -110,8 +115,8 @@ Import the geometry feature class and add two points:
 
 Write the two points to the map:
 
-    >>> new.write(point0, ('pub', ))
-    >>> new.write(point1, ('resturnat', ))
+    >>> new.write(point0, cat=1, attrs=('pub',))
+    >>> new.write(point1, cat=2, attrs=('resturant',))
 
 Commit the db changes:
 
diff --git a/lib/python/docs/src/script_intro.rst b/lib/python/docs/src/script_intro.rst
index 6f5717e..90dcc88 100644
--- a/lib/python/docs/src/script_intro.rst
+++ b/lib/python/docs/src/script_intro.rst
@@ -13,17 +13,17 @@ Parts of the API
 Syntax
 ------
 
-First, try a standard command in Command console in Layer Manager::
+First, try a standard command in Console tab in Layer Manager in GRASS GUI::
 
     r.info map=elevation -g
 
 We are running *r.info* with an option ``map`` set to ``elevation`` Now,
-switch to Python shell and type the same command but in Python syntax::
+switch to Python tab and type the same command but in Python syntax::
 
     grass.read_command('r.info', map='elevation', flags='g')
 
 We used function ``read_command()`` from the ``grass.script`` package
-which is imported under the name ``grass`` in the Python shell in GRASS
+which is imported under the name ``grass`` in the Python tab in GRASS
 GUI. There are also other functions besides ``read_command()`` most
 notably ``run_command()``, ``write_command()`` and ``parse_command()``.
 The first parameter for functions from this group is the name of the
diff --git a/lib/python/exceptions/testsuite/test_ScriptError.py b/lib/python/exceptions/testsuite/test_ScriptError.py
index 948e4a0..f22fa22 100644
--- a/lib/python/exceptions/testsuite/test_ScriptError.py
+++ b/lib/python/exceptions/testsuite/test_ScriptError.py
@@ -1,5 +1,7 @@
 # -*- coding: utf-8 -*-
-from grass.gunittest import TestCase, test
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.exceptions import ScriptError
 
 
diff --git a/lib/python/gunittest/Makefile b/lib/python/gunittest/Makefile
new file mode 100644
index 0000000..94680fa
--- /dev/null
+++ b/lib/python/gunittest/Makefile
@@ -0,0 +1,28 @@
+MODULE_TOPDIR = ../../..
+
+include $(MODULE_TOPDIR)/include/Make/Other.make
+include $(MODULE_TOPDIR)/include/Make/Python.make
+
+PYDIR = $(ETC)/python
+GDIR = $(PYDIR)/grass
+DSTDIR = $(GDIR)/gunittest
+
+# TODO: add multireport multirunner
+MODULES = case gmodules loader runner checkers gutils invoker main reporters utils
+
+PYFILES := $(patsubst %,$(DSTDIR)/%.py,$(MODULES) __init__)
+PYCFILES := $(patsubst %,$(DSTDIR)/%.pyc,$(MODULES) __init__)
+
+default: $(PYFILES) $(PYCFILES) $(GDIR)/__init__.py $(GDIR)/__init__.pyc
+
+$(PYDIR):
+	$(MKDIR) $@
+
+$(GDIR): | $(PYDIR)
+	$(MKDIR) $@
+
+$(DSTDIR): | $(GDIR)
+	$(MKDIR) $@
+
+$(DSTDIR)/%: % | $(DSTDIR)
+	$(INSTALL_DATA) $< $@
diff --git a/lib/python/gunittest/__init__.py b/lib/python/gunittest/__init__.py
new file mode 100644
index 0000000..f2dde81
--- /dev/null
+++ b/lib/python/gunittest/__init__.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework module for running from command line
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras, Soeren Gebbert
+
+Initial version of `gunittest` was created during Google Summer of Code 2014
+by Vaclav Petras as a student and Soeren Gebbert as a mentor.
+"""
+
+# Using an empty init file to minimize requirements when importing
+# and show clearly the issue when it occurs (before a try-except was used).
diff --git a/lib/python/gunittest/case.py b/lib/python/gunittest/case.py
new file mode 100644
index 0000000..bd92924
--- /dev/null
+++ b/lib/python/gunittest/case.py
@@ -0,0 +1,1226 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework test case
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+from __future__ import print_function
+
+import os
+import subprocess
+import sys
+import hashlib
+import uuid
+import unittest
+
+from grass.pygrass.modules import Module
+from grass.exceptions import CalledModuleError
+from grass.script import shutil_which
+
+from .gmodules import call_module, SimpleModule
+from .checkers import (check_text_ellipsis,
+                       text_to_keyvalue, keyvalue_equals, diff_keyvalue,
+                       file_md5, text_file_md5, files_equal_md5)
+from .utils import safe_repr
+from .gutils import is_map_in_mapset
+
+
+if sys.version_info[0] == 2:
+    import StringIO
+else:
+    from io import StringIO
+
+
+class TestCase(unittest.TestCase):
+    # we dissable R0904 for all TestCase classes because their purpose is to
+    # provide a lot of assert methods
+    # pylint: disable=R0904
+    """
+
+    Always use keyword arguments for all parameters other than first two. For
+    the first two, it is recommended to use keyword arguments but not required.
+    Be especially careful and always use keyword argument syntax for *msg*
+    parameter.
+    """
+    longMessage = True  # to get both standard and custom message
+    maxDiff = None  # we can afford long diffs
+    _temp_region = None  # to control the temporary region
+    html_reports = False  # output additional HTML files with failure details
+    readable_names = False  # prefer shorter but unreadable map and file names
+
+    def __init__(self, methodName):
+        super(TestCase, self).__init__(methodName)
+        self.grass_modules = []
+        self.supplementary_files = []
+        # Python unittest doc is saying that strings use assertMultiLineEqual
+        # but only unicode type is registered
+        # TODO: report this as a bug? is this in Python 3.x?
+        self.addTypeEqualityFunc(str, 'assertMultiLineEqual')
+
+    def _formatMessage(self, msg, standardMsg):
+        """Honor the longMessage attribute when generating failure messages.
+
+        If longMessage is False this means:
+
+        * Use only an explicit message if it is provided
+        * Otherwise use the standard message for the assert
+
+        If longMessage is True:
+
+        * Use the standard message
+        * If an explicit message is provided, return string with both messages
+
+        Based on Python unittest _formatMessage, formatting changed.
+        """
+        if not self.longMessage:
+            return msg or standardMsg
+        if msg is None:
+            return standardMsg
+        try:
+            # don't switch to '{}' formatting in Python 2.X
+            # it changes the way unicode input is handled
+            return '%s \n%s' % (msg, standardMsg)
+        except UnicodeDecodeError:
+            return '%s \n%s' % (safe_repr(msg), safe_repr(standardMsg))
+
+    @classmethod
+    def use_temp_region(cls):
+        """Use temporary region instead of the standard one for this process.
+
+        If you use this method, you have to call it in `setUpClass()`
+        and call `del_temp_region()` in `tearDownClass()`. By this you
+        ensure that each test method will have its own region and will
+        not influence other classes.
+
+        ::
+
+            @classmethod
+            def setUpClass(self):
+                self.use_temp_region()
+
+            @classmethod
+            def tearDownClass(self):
+                self.del_temp_region()
+
+        You can also call the methods in `setUp()` and `tearDown()` if
+        you are using them.
+
+        Copies the current region to a temporary region with
+        ``g.region save=``, then sets ``WIND_OVERRIDE`` to refer
+        to that region.
+        """
+        # we use just the class name since we rely on the invokation system
+        # where each test file is separate process and nothing runs
+        # in parallel inside
+        name = "tmp.%s" % (cls.__name__)
+        call_module("g.region", save=name, overwrite=True)
+        os.environ['WIND_OVERRIDE'] = name
+        cls._temp_region = name
+
+    @classmethod
+    def del_temp_region(cls):
+        """Remove the temporary region.
+
+        Unsets ``WIND_OVERRIDE`` and removes any region named by it.
+        """
+        assert cls._temp_region
+        name = os.environ.pop('WIND_OVERRIDE')
+        if name != cls._temp_region:
+            # be strict about usage of region
+            raise RuntimeError("Inconsistent use of"
+                               " TestCase.use_temp_region, WIND_OVERRIDE"
+                               " or temporary region in general\n"
+                               "Region to which should be now deleted ({n})"
+                               " by TestCase class"
+                               "does not corresond to currently set"
+                               " WIND_OVERRIDE ({c})",
+                               n=cls._temp_region, c=name)
+        call_module("g.remove", quiet=True, flags='f', type='region', name=name)
+        # TODO: we don't know if user calls this
+        # so perhaps some decorator which would use with statemet
+        # but we have zero chance of infuencing another test class
+        # since we use class-specific name for temporary region
+
+    def assertMultiLineEqual(self, first, second, msg=None):
+        r"""Test that the multiline string first is equal to the string second.
+
+        When not equal a diff of the two strings highlighting the differences
+        will be included in the error message. This method is used by default
+        when comparing strings with assertEqual().
+
+        This method replaces platform dependent newline characters
+        by ``\n`` (LF) in both parameters. This is
+        different from the same method implemented in Python ``unittest``
+        package which preserves the original newline characters.
+
+        This function removes the burden of getting the newline characters
+        right on each platfrom. You can just use ``\n`` everywhere and this
+        function will ensure that it does not matter if for example,
+        a module generates (as expected) ``\r\n`` (CRLF) newline characters
+        on MS Windows.
+
+        .. warning::
+            If you need to test the actual newline characters, use the standard
+            string comparison and functions such as ``find()``.
+        """
+        if os.linesep != '\n':
+            if os.linesep in first:
+                first = first.replace(os.linesep, '\n')
+            if os.linesep in second:
+                second = second.replace(os.linesep, '\n')
+        return super(TestCase, self).assertMultiLineEqual(
+            first=first, second=second, msg=msg)
+
+    def assertLooksLike(self, actual, reference, msg=None):
+        r"""Test that ``actual`` text is the same as ``referece`` with ellipses.
+
+        If ``actual`` contains platform dependent newline characters,
+        these will replaced by ``\n`` which is expected to be in the test data.
+
+        See :func:`check_text_ellipsis` for details of behavior.
+        """
+        self.assertTrue(isinstance(actual, str), (
+                        'actual argument is not a string'))
+        self.assertTrue(isinstance(reference, str), (
+                        'reference argument is not a string'))
+        if os.linesep != '\n' and os.linesep in actual:
+            actual = actual.replace(os.linesep, '\n')
+        if not check_text_ellipsis(actual=actual, reference=reference):
+            # TODO: add support for multiline (first line general, others with details)
+            standardMsg = '"%s" does not correspond with "%s"' % (actual,
+                                                                  reference)
+            self.fail(self._formatMessage(msg, standardMsg))
+
+    # TODO: decide if precision is mandatory
+    # (note that we don't need precision for strings and usually for integers)
+    # TODO: auto-determine precision based on the map type
+    # TODO: we can have also more general function without the subset reference
+    # TODO: change name to Module
+    def assertModuleKeyValue(self, module, reference, sep,
+                             precision, msg=None, **parameters):
+        """Test that output of a module is the same as provided subset.
+
+        ::
+
+            self.assertModuleKeyValue('r.info', map='elevation', flags='gr',
+                                      reference=dict(min=55.58, max=156.33),
+                                      precision=0.01, sep='=')
+
+        ::
+
+            module = SimpleModule('r.info', map='elevation', flags='gr')
+            self.assertModuleKeyValue(module,
+                                      reference=dict(min=55.58, max=156.33),
+                                      precision=0.01, sep='=')
+
+        The output of the module should be key-value pairs (shell script style)
+        which is typically obtained using ``-g`` flag.
+        """
+        if isinstance(reference, str):
+            reference = text_to_keyvalue(reference, sep=sep, skip_empty=True)
+        module = _module_from_parameters(module, **parameters)
+        self.runModule(module, expecting_stdout=True)
+        raster_univar = text_to_keyvalue(module.outputs.stdout,
+                                         sep=sep, skip_empty=True)
+        if not keyvalue_equals(dict_a=reference, dict_b=raster_univar,
+                               a_is_subset=True, precision=precision):
+            unused, missing, mismatch = diff_keyvalue(dict_a=reference,
+                                                      dict_b=raster_univar,
+                                                      a_is_subset=True,
+                                                      precision=precision)
+            # TODO: add region vs map extent and res check in case of error
+            if missing:
+                raise ValueError("%s output does not contain"
+                                 " the following keys"
+                                 " provided in reference"
+                                 ": %s\n" % (module, ", ".join(missing)))
+            if mismatch:
+                stdMsg = "%s difference:\n" % module
+                stdMsg += "mismatch values"
+                stdMsg += " (key, reference, actual): %s\n" % mismatch
+                stdMsg += 'command: %s %s' % (module, parameters)
+            else:
+                # we can probably remove this once we have more tests
+                # of keyvalue_equals and diff_keyvalue against each other
+                raise RuntimeError("keyvalue_equals() showed difference but"
+                                   " diff_keyvalue() did not. This can be"
+                                   " a bug in one of them or in the caller"
+                                   " (assertModuleKeyValue())")
+            self.fail(self._formatMessage(msg, stdMsg))
+
+    def assertRasterFitsUnivar(self, raster, reference,
+                               precision=None, msg=None):
+        r"""Test that raster map has the values obtained by r.univar module.
+
+        The function does not require all values from r.univar.
+        Only the provided values are tested.
+        Typical example is checking minimum, maximum and number of NULL cells
+        in the map::
+
+            values = 'null_cells=0\nmin=55.5787925720215\nmax=156.329864501953'
+            self.assertRasterFitsUnivar(raster='elevation', reference=values)
+
+        Use keyword arguments syntax for all function parameters.
+
+        Does not -e (extended statistics) flag, use `assertModuleKeyValue()`
+        for the full interface of arbitrary module.
+        """
+        self.assertModuleKeyValue(module='r.univar',
+                                  map=raster,
+                                  separator='=',
+                                  flags='g',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=precision)
+
+    def assertRasterFitsInfo(self, raster, reference,
+                             precision=None, msg=None):
+        r"""Test that raster map has the values obtained by r.univar module.
+
+        The function does not require all values from r.univar.
+        Only the provided values are tested.
+        Typical example is checking minimum, maximum and type of the map::
+
+            minmax = 'min=0\nmax=1451\ndatatype=FCELL'
+            self.assertRasterFitsInfo(raster='elevation', reference=minmax)
+
+        Use keyword arguments syntax for all function parameters.
+
+        This function supports values obtained -r (range) and
+        -e (extended metadata) flags.
+        """
+        self.assertModuleKeyValue(module='r.info',
+                                  map=raster, flags='gre',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=precision)
+
+    def assertRaster3dFitsUnivar(self, raster, reference,
+                                 precision=None, msg=None):
+        r"""Test that 3D raster map has the values obtained by r3.univar module.
+
+        The function does not require all values from r3.univar.
+        Only the provided values are tested.
+
+        Use keyword arguments syntax for all function parameters.
+
+        Function does not use -e (extended statistics) flag,
+        use `assertModuleKeyValue()` for the full interface of arbitrary
+        module.
+        """
+        self.assertModuleKeyValue(module='r3.univar',
+                                  map=raster,
+                                  separator='=',
+                                  flags='g',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=precision)
+
+    def assertRaster3dFitsInfo(self, raster, reference,
+                               precision=None, msg=None):
+        r"""Test that raster map has the values obtained by r3.info module.
+
+        The function does not require all values from r3.info.
+        Only the provided values are tested.
+
+        Use keyword arguments syntax for all function parameters.
+
+        This function supports values obtained by -g (info) and -r (range).
+        """
+        self.assertModuleKeyValue(module='r3.info',
+                                  map=raster, flags='gr',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=precision)
+
+    def assertVectorFitsTopoInfo(self, vector, reference, msg=None):
+        r"""Test that raster map has the values obtained by ``v.info`` module.
+
+        This function uses ``-t`` flag of ``v.info`` module to get topology
+        info, so the reference dictionary should contain appropriate set or
+        subset of values (only the provided values are tested).
+
+        A example of checking number of points::
+
+            topology = dict(points=10938, primitives=10938)
+            self.assertVectorFitsTopoInfo(vector='bridges', reference=topology)
+
+        Note that here we are checking also the number of primitives to prove
+        that there are no other features besides points.
+
+        No precision is applied (no difference is required). So, this function
+        is not suitable for testing items which are floating point number
+        (no such items are currently in topological information).
+
+        Use keyword arguments syntax for all function parameters.
+        """
+        self.assertModuleKeyValue(module='v.info',
+                                  map=vector, flags='t',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=0)
+
+    def assertVectorFitsRegionInfo(self, vector, reference,
+                                   precision, msg=None):
+        r"""Test that raster map has the values obtained by ``v.info`` module.
+
+        This function uses ``-g`` flag of ``v.info`` module to get topology
+        info, so the reference dictionary should contain appropriate set or
+        subset of values (only the provided values are tested).
+
+        Use keyword arguments syntax for all function parameters.
+        """
+        self.assertModuleKeyValue(module='v.info',
+                                  map=vector, flags='g',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=precision)
+
+    def assertVectorFitsExtendedInfo(self, vector, reference, msg=None):
+        r"""Test that raster map has the values obtained by ``v.info`` module.
+
+        This function uses ``-e`` flag of ``v.info`` module to get topology
+        info, so the reference dictionary should contain appropriate set or
+        subset of values (only the provided values are tested).
+
+        The most useful items for testing (considering circumstances of test
+        invocation) are name, title, level and num_dblinks. (When testing
+        storing of ``v.info -e`` metadata, the selection might be different.)
+
+        No precision is applied (no difference is required). So, this function
+        is not suitable for testing items which are floating point number.
+
+        Use keyword arguments syntax for all function parameters.
+        """
+        self.assertModuleKeyValue(module='v.info',
+                                  map=vector, flags='e',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=0)
+
+    def assertVectorInfoEqualsVectorInfo(self, actual, reference, precision,
+                                         msg=None):
+        """Test that two vectors are equal according to ``v.info -tg``.
+
+        This function does not test geometry itself just the region of the
+        vector map and number of features.
+        """
+        module = SimpleModule('v.info', flags='t', map=reference)
+        self.runModule(module)
+        ref_topo = text_to_keyvalue(module.outputs.stdout, sep='=')
+        module = SimpleModule('v.info', flags='g', map=reference)
+        self.runModule(module)
+        ref_info = text_to_keyvalue(module.outputs.stdout, sep='=')
+        self.assertVectorFitsTopoInfo(vector=actual, reference=ref_topo,
+                                      msg=msg)
+        self.assertVectorFitsRegionInfo(vector=actual, reference=ref_info,
+                                        precision=precision, msg=msg)
+
+    def assertVectorFitsUnivar(self, map, column, reference, msg=None,
+                               layer=None, type=None, where=None,
+                               precision=None):
+        r"""Test that vector map has the values obtained by v.univar module.
+
+        The function does not require all values from v.univar.
+        Only the provided values are tested.
+        Typical example is checking minimum and maximum of a column::
+
+            minmax = 'min=0\nmax=1451'
+            self.assertVectorFitsUnivar(map='bridges', column='WIDTH',
+                                        reference=minmax)
+
+        Use keyword arguments syntax for all function parameters.
+
+        Does not support -d (geometry distances) flag, -e (extended statistics)
+        flag and few other, use `assertModuleKeyValue` for the full interface
+        of arbitrary module.
+        """
+        parameters = dict(map=map, column=column, flags='g')
+        if layer:
+            parameters.update(layer=layer)
+        if type:
+            parameters.update(type=type)
+        if where:
+            parameters.update(where=where)
+        self.assertModuleKeyValue(module='v.univar',
+                                  reference=reference, msg=msg, sep='=',
+                                  precision=precision,
+                                  **parameters)
+
+    # TODO: use precision?
+    # TODO: write a test for this method with r.in.ascii
+    def assertRasterMinMax(self, map, refmin, refmax, msg=None):
+        """Test that raster map minimum and maximum are within limits.
+
+        Map minimum and maximum is tested against expression::
+
+            refmin <= actualmin and refmax >= actualmax
+
+        Use keyword arguments syntax for all function parameters.
+
+        To check that more statistics have certain values use
+        `assertRasterFitsUnivar()` or `assertRasterFitsInfo()`
+        """
+        stdout = call_module('r.info', map=map, flags='r')
+        actual = text_to_keyvalue(stdout, sep='=')
+        if refmin > actual['min']:
+            stdmsg = ('The actual minimum ({a}) is smaller than the reference'
+                      ' one ({r}) for raster map {m}'
+                      ' (with maximum {o})'.format(
+                          a=actual['min'], r=refmin, m=map, o=actual['max']))
+            self.fail(self._formatMessage(msg, stdmsg))
+        if refmax < actual['max']:
+            stdmsg = ('The actual maximum ({a}) is greater than the reference'
+                      ' one ({r}) for raster map {m}'
+                      ' (with minimum {o})'.format(
+                          a=actual['max'], r=refmax, m=map, o=actual['min']))
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    # TODO: use precision?
+    # TODO: write a test for this method with r.in.ascii
+    # TODO: almost the same as 2D version
+    def assertRaster3dMinMax(self, map, refmin, refmax, msg=None):
+        """Test that 3D raster map minimum and maximum are within limits.
+
+        Map minimum and maximum is tested against expression::
+
+            refmin <= actualmin and refmax >= actualmax
+
+        Use keyword arguments syntax for all function parameters.
+
+        To check that more statistics have certain values use
+        `assertRaster3DFitsUnivar()` or `assertRaster3DFitsInfo()`
+        """
+        stdout = call_module('r3.info', map=map, flags='r')
+        actual = text_to_keyvalue(stdout, sep='=')
+        if refmin > actual['min']:
+            stdmsg = ('The actual minimum ({a}) is smaller than the reference'
+                      ' one ({r}) for 3D raster map {m}'
+                      ' (with maximum {o})'.format(
+                          a=actual['min'], r=refmin, m=map, o=actual['max']))
+            self.fail(self._formatMessage(msg, stdmsg))
+        if refmax < actual['max']:
+            stdmsg = ('The actual maximum ({a}) is greater than the reference'
+                      ' one ({r}) for 3D raster map {m}'
+                      ' (with minimum {o})'.format(
+                          a=actual['max'], r=refmax, m=map, o=actual['min']))
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def _get_detailed_message_about_no_map(self, name, type):
+        msg = ("There is no map <{n}> of type <{t}>"
+               " in the current mapset".format(n=name, t=type))
+        related = call_module('g.list', type='raster,raster3d,vector',
+                              flags='imt', pattern='*' + name + '*')
+        if related:
+            msg += "\nSee available maps:\n"
+            msg += related
+        else:
+            msg += "\nAnd there are no maps containing the name anywhere\n"
+        return msg
+
+    def assertRasterExists(self, name, msg=None):
+        """Checks if the raster map exists in current mapset"""
+        if not is_map_in_mapset(name, type='raster'):
+            stdmsg = self._get_detailed_message_about_no_map(name, 'raster')
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertRasterDoesNotExist(self, name, msg=None):
+        """Checks if the raster map does not exist in current mapset"""
+        if is_map_in_mapset(name, type='raster'):
+            stdmsg = self._get_detailed_message_about_no_map(name, 'raster')
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertRaster3dExists(self, name, msg=None):
+        """Checks if the 3D raster map exists in current mapset"""
+        if not is_map_in_mapset(name, type='raster3d'):
+            stdmsg = self._get_detailed_message_about_no_map(name, 'raster3d')
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertRaster3dDoesNotExist(self, name, msg=None):
+        """Checks if the 3D raster map does not exist in current mapset"""
+        if is_map_in_mapset(name, type='raster3d'):
+            stdmsg = self._get_detailed_message_about_no_map(name, 'raster3d')
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertVectorExists(self, name, msg=None):
+        """Checks if the vector map exists in current mapset"""
+        if not is_map_in_mapset(name, type='vector'):
+            stdmsg = self._get_detailed_message_about_no_map(name, 'vector')
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertVectorDoesNotExist(self, name, msg=None):
+        """Checks if the vector map does not exist in current mapset"""
+        if is_map_in_mapset(name, type='vector'):
+            stdmsg = self._get_detailed_message_about_no_map(name, 'vector')
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertFileExists(self, filename, msg=None,
+                         skip_size_check=False, skip_access_check=False):
+        """Test the existence of a file.
+
+        .. note:
+            By default this also checks if the file size is greater than 0
+            since we rarely want a file to be empty. It also checks
+            if the file is accessible for reading since we expect that user
+            wants to look at created files.
+        """
+        if not os.path.isfile(filename):
+            stdmsg = 'File %s does not exist' % filename
+            self.fail(self._formatMessage(msg, stdmsg))
+        if not skip_size_check and not os.path.getsize(filename):
+            stdmsg = 'File %s is empty' % filename
+            self.fail(self._formatMessage(msg, stdmsg))
+        if not skip_access_check and not os.access(filename, os.R_OK):
+            stdmsg = 'File %s is not accessible for reading' % filename
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def assertFileMd5(self, filename, md5, text=False, msg=None):
+        r"""Test that file MD5 sum is equal to the provided sum.
+
+        Usually, this function is used to test binary files or large text files
+        which cannot be tested in some other way. Text files can be usually
+        tested by some finer method.
+
+        To test text files with this function, you should always use parameter
+        *text* set to ``True``. Note that function ``checkers.text_file_md5()``
+        offers additional parameters which might be advantageous when testing
+        text files.
+
+        The typical workflow is that you create a file in a way you
+        trust (that you obtain the right file). Then you compute MD5
+        sum of the file. And provide the sum in a test as a string::
+
+            self.assertFileMd5('result.png', md5='807bba4ffa...')
+
+        Use `file_md5()` function from this package::
+
+            file_md5('original_result.png')
+
+        Or in command line, use ``md5sum`` command if available:
+
+        .. code-block:: sh
+
+            md5sum some_file.png
+
+        Finaly, you can use Python ``hashlib`` to obtain MD5::
+
+            import hashlib
+            hasher = hashlib.md5()
+            # expecting the file to fit into memory
+            hasher.update(open('original_result.png', 'rb').read())
+            hasher.hexdigest()
+
+        .. note:
+            For text files, always create MD5 sum using ``\n`` (LF)
+            as newline characters for consistency. Also use newline
+            at the end of file (as for example, Git or PEP8 requires).
+        """
+        self.assertFileExists(filename, msg=msg)
+        if text:
+            actual = text_file_md5(filename)
+        else:
+            actual = file_md5(filename)
+        if not actual == md5:
+            standardMsg = ('File <{name}> does not have the right MD5 sum.\n'
+                           'Expected is <{expected}>,'
+                           ' actual is <{actual}>'.format(
+                               name=filename, expected=md5, actual=actual))
+            self.fail(self._formatMessage(msg, standardMsg))
+
+    def assertFilesEqualMd5(self, filename, reference, msg=None):
+        """Test that files are the same using MD5 sum.
+
+        This functions requires you to provide a file to test and
+        a reference file. For both, MD5 sum will be computed and compared with
+        each other.
+        """
+        self.assertFileExists(filename, msg=msg)
+        # nothing for ref, missing ref_filename is an error not a test failure
+        if not files_equal_md5(filename, reference):
+            stdmsg = 'Files %s and %s don\'t have the same MD5 sums' % (filename,
+                                                                        reference)
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    def _get_unique_name(self, name):
+        """Create standardized map or file name which is unique
+
+        If ``readable_names`` attribute is `True`, it uses the *name* string
+        to create the unique name. Otherwise, it creates a unique name.
+        Even if you expect ``readable_names`` to be `True`, provide *name*
+        which is unique
+
+        The *name* parameter should be valid raster name, vector name and file
+        name and should be always provided.
+        """
+        # TODO: possible improvement is to require some descriptive name
+        # and ensure uniqueness by add UUID
+        if self.readable_names:
+            return 'tmp_' + self.id().replace('.', '_') + '_' + name
+        else:
+            # UUID might be overkill (and expensive) but it's safe and simple
+            # alternative is to create hash from the readable name
+            return 'tmp_' + str(uuid.uuid4()).replace('-', '')
+
+    def _compute_difference_raster(self, first, second, name_part):
+        """Compute difference of two rasters (first - second)
+
+        The name of the new raster is a long name designed to be as unique as
+        possible and contains names of two input rasters.
+
+        :param first: raster to subtract from
+        :param second: raster used as decrement
+        :param name_part: a unique string to be used in the difference name
+
+        :returns: name of a new raster
+        """
+        diff = self._get_unique_name('compute_difference_raster_' + name_part
+                                     + '_' + first + '_minus_' + second)
+        call_module('r.mapcalc',
+                    stdin='"{d}" = "{f}" - "{s}"'.format(d=diff,
+                                                         f=first,
+                                                         s=second))
+        return diff
+
+    # TODO: name of map generation is repeted three times
+    # TODO: this method is almost the same as the one for 2D
+    def _compute_difference_raster3d(self, first, second, name_part):
+        """Compute difference of two rasters (first - second)
+
+        The name of the new raster is a long name designed to be as unique as
+        possible and contains names of two input rasters.
+
+        :param first: raster to subtract from
+        :param second: raster used as decrement
+        :param name_part: a unique string to be used in the difference name
+
+        :returns: name of a new raster
+        """
+        diff = self._get_unique_name('compute_difference_raster_' + name_part
+                                     + '_' + first + '_minus_' + second)
+
+        call_module('r3.mapcalc',
+                    stdin='"{d}" = "{f}" - "{s}"'.format(d=diff,
+                                                         f=first,
+                                                         s=second))
+        return diff
+
+    def _compute_vector_xor(self, ainput, alayer, binput, blayer, name_part):
+        """Compute symmetric difference (xor) of two vectors
+
+        :returns: name of a new vector
+        """
+        diff = self._get_unique_name('compute_difference_vector_' + name_part
+                                     + '_' + ainput + '_' + alayer + '_minus_'
+                                     + binput + '_' + blayer)
+        call_module('v.overlay', operator='xor', ainput=ainput, binput=binput,
+                    alayer=alayer, blayer=blayer,
+                    output=diff, atype='area', btype='area', olayer='')
+        # trying to avoid long reports full of categories by olayer=''
+        # olayer   Output layer for new category, ainput and binput
+        #     If 0 or not given, the category is not written
+        return diff
+
+    # TODO: -z and 3D support
+    def _import_ascii_vector(self, filename, name_part):
+        """Import a vector stored in GRASS vector ASCII format.
+
+        :returns: name of a new vector
+        """
+        # hash is the easiest way how to get a valied vector name
+        # TODO: introduce some function which will make file valid
+        hasher = hashlib.md5()
+        hasher.update(filename)
+        namehash = hasher.hexdigest()
+        vector = self._get_unique_name('import_ascii_vector_' + name_part
+                                       + '_' + namehash)
+        call_module('v.in.ascii', input=filename,
+                    output=vector, format='standard')
+        return vector
+
+    # TODO: -z and 3D support
+    def _export_ascii_vector(self, vector, name_part, digits):
+        """Import a vector stored in GRASS vector ASCII format.
+
+        :returns: name of a new vector
+        """
+        # TODO: perhaps we can afford just simple file name
+        filename = self._get_unique_name('export_ascii_vector_'
+                                         + name_part + '_' + vector)
+        call_module('v.out.ascii', input=vector,
+                    output=filename, format='standard', layer='-1',
+                    precision=digits)
+        return filename
+
+    def assertRastersNoDifference(self, actual, reference,
+                                  precision, statistics=None, msg=None):
+        """Test that `actual` raster is not different from `reference` raster
+
+        Method behaves in the same way as `assertRasterFitsUnivar()`
+        but works on difference ``reference - actual``.
+        If statistics is not given ``dict(min=-precision, max=precision)``
+        is used.
+        """
+        if statistics is None or sorted(statistics.keys()) == ['max', 'min']:
+            if statistics is None:
+                statistics = dict(min=-precision, max=precision)
+            diff = self._compute_difference_raster(reference, actual,
+                                                   'assertRastersNoDifference')
+            try:
+                self.assertModuleKeyValue('r.info', map=diff, flags='r',
+                                          sep='=', precision=precision,
+                                          reference=statistics, msg=msg)
+            finally:
+                call_module('g.remove', flags='f', type='raster', name=diff)
+        else:
+            # general case
+            # TODO: we are using r.info min max and r.univar min max interchangably
+            # but they might be different if region is different from map
+            # not considered as an huge issue since we expect the tested maps
+            # to match with region, however a documentation should containe a notice
+            self.assertRastersDifference(actual=actual, reference=reference,
+                                         statistics=statistics,
+                                         precision=precision, msg=msg)
+
+    def assertRastersDifference(self, actual, reference,
+                                statistics, precision, msg=None):
+        """Test statistical values of difference of reference and actual rasters
+
+        For cases when you are interested in no or minimal difference,
+        use `assertRastersNoDifference()` instead.
+
+        This method should not be used to test r.mapcalc or r.univar.
+        """
+        diff = self._compute_difference_raster(reference, actual,
+                                               'assertRastersDifference')
+        try:
+            self.assertRasterFitsUnivar(raster=diff, reference=statistics,
+                                        precision=precision, msg=msg)
+        finally:
+            call_module('g.remove', flags='f', type='raster', name=diff)
+
+    def assertRasters3dNoDifference(self, actual, reference,
+                                    precision, statistics=None, msg=None):
+        """Test that `actual` raster is not different from `reference` raster
+
+        Method behaves in the same way as `assertRasterFitsUnivar()`
+        but works on difference ``reference - actual``.
+        If statistics is not given ``dict(min=-precision, max=precision)``
+        is used.
+        """
+        if statistics is None or sorted(statistics.keys()) == ['max', 'min']:
+            if statistics is None:
+                statistics = dict(min=-precision, max=precision)
+            diff = self._compute_difference_raster3d(reference, actual,
+                                                     'assertRasters3dNoDifference')
+            try:
+                self.assertModuleKeyValue('r3.info', map=diff, flags='r',
+                                          sep='=', precision=precision,
+                                          reference=statistics, msg=msg)
+            finally:
+                call_module('g.remove', flags='f', type='raster_3d', name=diff)
+        else:
+            # general case
+            # TODO: we are using r.info min max and r.univar min max interchangably
+            # but they might be different if region is different from map
+            # not considered as an huge issue since we expect the tested maps
+            # to match with region, however a documentation should contain a notice
+            self.assertRasters3dDifference(actual=actual, reference=reference,
+                                           statistics=statistics,
+                                           precision=precision, msg=msg)
+
+    def assertRasters3dDifference(self, actual, reference,
+                                statistics, precision, msg=None):
+        """Test statistical values of difference of reference and actual rasters
+
+        For cases when you are interested in no or minimal difference,
+        use `assertRastersNoDifference()` instead.
+
+        This method should not be used to test r3.mapcalc or r3.univar.
+        """
+        diff = self._compute_difference_raster3d(reference, actual,
+                                                 'assertRasters3dDifference')
+        try:
+            self.assertRaster3dFitsUnivar(raster=diff, reference=statistics,
+                                          precision=precision, msg=msg)
+        finally:
+            call_module('g.remove', flags='f', type='raster_3d', name=diff)
+
+    # TODO: this works only in 2D
+    # TODO: write tests
+    def assertVectorIsVectorBuffered(self, actual, reference, precision, msg=None):
+        """
+
+        This method should not be used to test v.buffer, v.overlay or v.select.
+        """
+        # TODO: if msg is None: add info specific to this function
+        layer = '-1'
+        self.assertVectorInfoEqualsVectorInfo(actual=actual,
+                                              reference=reference,
+                                              precision=precision, msg=msg)
+        remove = []
+        buffered = reference + '_buffered'  # TODO: more unique name
+        intersection = reference + '_intersection'  # TODO: more unique name
+        self.runModule('v.buffer', input=reference, layer=layer,
+                       output=buffered, distance=precision)
+        remove.append(buffered)
+        try:
+            self.runModule('v.overlay', operator='and', ainput=actual,
+                           binput=reference,
+                           alayer=layer, blayer=layer,
+                           output=intersection, atype='area', btype='area',
+                           olayer='')
+            remove.append(intersection)
+            # TODO: this would use some refactoring
+            # perhaps different functions or more low level functions would
+            # be more appropriate
+            module = SimpleModule('v.info', flags='t', map=reference)
+            self.runModule(module)
+            ref_topo = text_to_keyvalue(module.outputs.stdout, sep='=')
+            self.assertVectorFitsTopoInfo(vector=intersection,
+                                          reference=ref_topo,
+                                          msg=msg)
+            module = SimpleModule('v.info', flags='g', map=reference)
+            self.runModule(module)
+            ref_info = text_to_keyvalue(module.outputs.stdout, sep='=')
+            self.assertVectorFitsRegionInfo(vector=intersection,
+                                            reference=ref_info,
+                                            msg=msg, precision=precision)
+        finally:
+            call_module('g.remove', flags='f', type='vector', name=remove)
+
+    # TODO: write tests
+    def assertVectorsNoAreaDifference(self, actual, reference, precision,
+                                      layer=1, msg=None):
+        """Test statistical values of difference of reference and actual rasters
+
+        Works only for areas.
+
+        Use keyword arguments syntax for all function parameters.
+
+        This method should not be used to test v.overlay or v.select.
+        """
+        diff = self._compute_xor_vectors(ainput=reference, binput=actual,
+                                         alayer=layer, blayer=layer,
+                                         name_part='assertVectorsNoDifference')
+        try:
+            module = SimpleModule('v.to.db', map=diff,
+                                  flags='pc', separator='=')
+            self.runModule(module)
+            # the output of v.to.db -pc sep== should look like:
+            # ...
+            # 43=98606087.5818323
+            # 44=727592.902311112
+            # total area=2219442027.22035
+            total_area = module.outputs.stdout.splitlines()[-1].split('=')[-1]
+            if total_area > precision:
+                stdmsg = ("Area of difference of vectors <{va}> and <{vr}>"
+                          " should be 0"
+                          " in the given precision ({p}) not {a}").format(
+                    va=actual, vr=reference, p=precision, a=total_area)
+                self.fail(self._formatMessage(msg, stdmsg))
+        finally:
+            call_module('g.remove', flags='f', type='vector', name=diff)
+
+    # TODO: here we have to have significant digits which is not consistent
+    # TODO: documentation for all new asserts
+    # TODO: same can be created for raster and 3D raster
+    def assertVectorEqualsVector(self, actual, reference, digits, precision, msg=None):
+        """Test that two vectors are equal.
+
+        .. note:
+            This test should not be used to test ``v.in.ascii`` and
+            ``v.out.ascii`` modules.
+
+        .. warning:
+            ASCII files for vectors are loaded into memory, so this
+            function works well only for "not too big" vector maps.
+        """
+        # both vectors to ascii
+        # text diff of two ascii files
+        # may also do other comparisons on vectors themselves (asserts)
+        self.assertVectorInfoEqualsVectorInfo(actual=actual, reference=reference, precision=precision, msg=msg)
+        factual = self._export_ascii_vector(vector=actual,
+                                            name_part='assertVectorEqualsVector_actual',
+                                            digits=digits)
+        freference = self._export_ascii_vector(vector=reference,
+                                               name_part='assertVectorEqualsVector_reference',
+                                               digits=digits)
+        self.assertVectorAsciiEqualsVectorAscii(actual=factual,
+                                                reference=freference,
+                                                remove_files=True,
+                                                msg=msg)
+
+    def assertVectorEqualsAscii(self, actual, reference, digits, precision, msg=None):
+        """Test that vector is equal to the vector stored in GRASS ASCII file.
+
+        .. note:
+            This test should not be used to test ``v.in.ascii`` and
+            ``v.out.ascii`` modules.
+
+        .. warning:
+            ASCII files for vectors are loaded into memory, so this
+            function works well only for "not too big" vector maps.
+        """
+        # vector to ascii
+        # text diff of two ascii files
+        # it may actually import the file and do other asserts
+        factual = self._export_ascii_vector(vector=actual,
+                                            name_part='assertVectorEqualsAscii_actual',
+                                            digits=digits)
+        vreference = None
+        try:
+            vreference = self._import_ascii_vector(filename=reference,
+                                               name_part='assertVectorEqualsAscii_reference')
+            self.assertVectorInfoEqualsVectorInfo(actual=actual,
+                                                  reference=vreference,
+                                                  precision=precision, msg=msg)
+            self.assertVectorAsciiEqualsVectorAscii(actual=factual,
+                                                    reference=reference,
+                                                    remove_files=False,
+                                                    msg=msg)
+        finally:
+            # TODO: manage using cleanup settings
+            # we rely on fail method to either raise or return (soon)
+            os.remove(factual)
+            if vreference:
+                self.runModule('g.remove', flags='f', type='vector', name=vreference)
+
+    # TODO: we expect v.out.ascii to give the same order all the time, is that OK?
+    def assertVectorAsciiEqualsVectorAscii(self, actual, reference,
+                                           remove_files=False, msg=None):
+        """Test that two GRASS ASCII vector files are equal.
+
+        .. note:
+            This test should not be used to test ``v.in.ascii`` and
+            ``v.out.ascii`` modules.
+
+        .. warning:
+            ASCII files for vectors are loaded into memory, so this
+            function works well only for "not too big" vector maps.
+        """
+        import difflib
+        # 'U' taken from difflib documentation
+        fromlines = open(actual, 'U').readlines()
+        tolines = open(reference, 'U').readlines()
+        context_lines = 3  # number of context lines
+        # TODO: filenames are set to "actual" and "reference", isn't it too general?
+        # it is even more useful if map names or file names are some generated
+        # with hash or some other unreadable things
+        # other styles of diffs are available too
+        # but unified is a good choice if you are used to svn or git
+        # workaround for missing -h (do not print header) flag in v.out.ascii
+        num_lines_of_header = 10
+        diff = difflib.unified_diff(fromlines[num_lines_of_header:],
+                                    tolines[num_lines_of_header:],
+                                    'reference', 'actual', n=context_lines)
+        # TODO: this should be solved according to cleanup policy
+        # but the parameter should be kept if it is an existing file
+        # or using this method by itself
+        if remove_files:
+            os.remove(actual)
+            os.remove(reference)
+        stdmsg = ("There is a difference between vectors when compared as"
+                  " ASCII files.\n")
+
+        output = StringIO.StringIO()
+        # TODO: there is a diff size constant which we can use
+        # we are setting it unlimited but we can just set it large
+        maxlines = 100
+        i = 0
+        for line in diff:
+            if i >= maxlines:
+                break
+            output.write(line)
+            i += 1
+        stdmsg += output.getvalue()
+        output.close()
+        # it seems that there is not better way of asking whether there was
+        # a difference (always a iterator object is returned)
+        if i > 0:
+            # do HTML diff only if there is not too many lines
+            # TODO: this might be tough to do with some more sophisticated way of reports
+            if self.html_reports and i < maxlines:
+                # TODO: this might be here and somehow stored as file or done in reporter again if right information is stored
+                # i.e., files not deleted or the whole strings passed
+                # alternative is make_table() which is the same but creates just a table not a whole document
+                # TODO: all HTML files might be collected by the main reporter
+                # TODO: standardize the format of name of HTML file
+                # for one test id there is only one possible file of this name
+                htmldiff_file_name = self.id() + '_ascii_diff' + '.html'
+                self.supplementary_files.append(htmldiff_file_name)
+                htmldiff = difflib.HtmlDiff().make_file(fromlines, tolines,
+                                                        'reference', 'actual',
+                                                        context=True,
+                                                        numlines=context_lines)
+                htmldiff_file = open(htmldiff_file_name, 'w')
+                for line in htmldiff:
+                    htmldiff_file.write(line)
+                htmldiff_file.close()
+
+            self.fail(self._formatMessage(msg, stdmsg))
+
+    @classmethod
+    def runModule(cls, module, expecting_stdout=False, **kwargs):
+        """Run PyGRASS module.
+
+        Runs the module and raises an exception if the module ends with
+        non-zero return code. Usually, this is the same as testing the
+        return code and raising exception but by using this method,
+        you give testing framework more control over the execution,
+        error handling and storing of output.
+
+        In terms of testing framework, this function causes a common error,
+        not a test failure.
+
+        :raises CalledModuleError: if the module failed
+        """
+        module = _module_from_parameters(module, **kwargs)
+        _check_module_run_parameters(module)
+        try:
+            module.run()
+        except CalledModuleError:
+            # here exception raised by run() with finish_=True would be
+            # almost enough but we want some additional info to be included
+            # in the test report
+            errors = module.outputs.stderr
+            # provide diagnostic at least in English locale
+            # TODO: standardized error code would be handy here
+            import re
+            if re.search('Raster map.*not found', errors, flags=re.DOTALL):
+                errors += "\nSee available raster maps:\n"
+                errors += call_module('g.list', type='raster')
+            if re.search('Vector map.*not found', errors, flags=re.DOTALL):
+                errors += "\nSee available vector maps:\n"
+                errors += call_module('g.list', type='vector')
+            # TODO: message format, parameters
+            raise CalledModuleError(module.popen.returncode, module.name,
+                                    module.get_python(),
+                                    errors=errors)
+        # TODO: use this also in assert and apply when appropriate
+        if expecting_stdout and not module.outputs.stdout.strip():
+
+            if module.outputs.stderr:
+                errors = " The errors are:\n" + module.outputs.stderr
+            else:
+                errors = " There were no error messages."
+            if module.outputs.stdout:
+                # this is not appropriate for translation but we don't want
+                # and don't need testing to be translated
+                got = "only whitespace."
+            else:
+                got = "nothing."
+            raise RuntimeError("Module call " + module.get_python() +
+                               " ended successfully but we were expecting"
+                               " output and got " + got + errors)
+    # TODO: we can also comapre time to some expected but that's tricky
+    # maybe we should measure time but the real benchmarks with stdin/stdout
+    # should be done by some other function
+    # TODO: this should be the function used for valgrind or profiling or debug
+    # TODO: it asserts the rc but it does much more, so testModule?
+    # TODO: do we need special function for testing module failures or just add parameter returncode=0?
+    # TODO: consider not allowing to call this method more than once
+    # the original idea was to run this method just once for test method
+    # but for "integration" tests  (script-like tests with more than one module)
+    # it would be better to be able to use this multiple times
+    # TODO: enable merging streams?
+    def assertModule(self, module, msg=None, **kwargs):
+        """Run PyGRASS module in controlled way and assert non-zero return code.
+
+        You should use this method to invoke module you are testing.
+        By using this method, you give testing framework more control over
+        the execution, error handling and storing of output.
+
+        It will not print module stdout and stderr, instead it will always
+        store them for further examination. Streams are stored separately.
+
+        This method is not suitable for testing error states of the module.
+        If you want to test behavior which involves non-zero return codes
+        and examine stderr in test, use `assertModuleFail()` method.
+
+        Runs the module and causes test failure if module ends with
+        non-zero return code.
+        """
+        module = _module_from_parameters(module, **kwargs)
+        _check_module_run_parameters(module)
+        if not shutil_which(module.name):
+            stdmsg = "Cannot find the module '{}'".format(module.name)
+            self.fail(self._formatMessage(msg, stdmsg))
+        try:
+            module.run()
+            self.grass_modules.append(module.name)
+        except CalledModuleError:
+            print(module.outputs.stdout)
+            print(module.outputs.stderr)
+            # TODO: message format
+            # TODO: stderr?
+            stdmsg = ('Running <{m.name}> module ended'
+                      ' with non-zero return code ({m.popen.returncode})\n'
+                      'Called: {code}\n'
+                      'See the following errors:\n'
+                      '{errors}'.format(
+                          m=module, code=module.get_python(),
+                          errors=module.outputs.stderr
+                      ))
+            self.fail(self._formatMessage(msg, stdmsg))
+        print(module.outputs.stdout)
+        print(module.outputs.stderr)
+        # log these to final report
+        # TODO: always or only if the calling test method failed?
+        # in any case, this must be done before self.fail()
+        # module.outputs['stdout'].value
+        # module.outputs['stderr'].value
+
+    # TODO: should we merge stderr to stdout in this case?
+    def assertModuleFail(self, module, msg=None, **kwargs):
+        """Test that module fails with a non-zero return code.
+
+        Works like `assertModule()` but expects module to fail.
+        """
+        module = _module_from_parameters(module, **kwargs)
+        _check_module_run_parameters(module)
+        # note that we cannot use finally because we do not leave except
+        try:
+            module.run()
+            self.grass_modules.append(module.name)
+        except CalledModuleError:
+            print(module.outputs.stdout)
+            print(module.outputs.stderr)
+        else:
+            print(module.outputs.stdout)
+            print(module.outputs.stderr)
+            stdmsg = ('Running <%s> ended with zero (successful) return code'
+                      ' when expecting module to fail' % module.get_python())
+            self.fail(self._formatMessage(msg, stdmsg))
+
+
+# TODO: add tests and documentation to methods which are using this function
+# some test and documentation add to assertModuleKeyValue
+def _module_from_parameters(module, **kwargs):
+    if kwargs:
+        if not isinstance(module, str):
+            raise ValueError('module can be only string or PyGRASS Module')
+        if isinstance(module, Module):
+            raise ValueError('module can be only string if other'
+                             ' parameters are given')
+            # allow passing all parameters in one dictionary called parameters
+        if list(kwargs.keys()) == ['parameters']:
+            kwargs = kwargs['parameters']
+        module = SimpleModule(module, **kwargs)
+    return module
+
+
+def _check_module_run_parameters(module):
+    # in this case module already run and we would start it again
+    if module.run_:
+        raise ValueError('Do not run the module manually, set run_=False')
+    if not module.finish_:
+        raise ValueError('This function will always finish module run,'
+                         ' set finish_=None or finish_=True.')
+    # we expect most of the usages with stdout=PIPE
+    # TODO: in any case capture PIPE always?
+    if module.stdout_ is None:
+        module.stdout_ = subprocess.PIPE
+    elif module.stdout_ != subprocess.PIPE:
+        raise ValueError('stdout_ can be only PIPE or None')
+    if module.stderr_ is None:
+        module.stderr_ = subprocess.PIPE
+    elif module.stderr_ != subprocess.PIPE:
+        raise ValueError('stderr_ can be only PIPE or None')
+        # because we want to capture it
diff --git a/lib/python/gunittest/checkers.py b/lib/python/gunittest/checkers.py
new file mode 100644
index 0000000..1fedad0
--- /dev/null
+++ b/lib/python/gunittest/checkers.py
@@ -0,0 +1,625 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework checkers
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras, Soeren Gebbert
+"""
+
+import os
+import sys
+import re
+import doctest
+
+try:
+    from grass.script.core import KeyValue
+except (ImportError, AttributeError):
+    # TODO: we are silent about the error and use a object with different
+    # interface, should be replaced by central keyvalue module
+    # this can happen when translations are not available
+    # TODO: grass should survive are give better error when tranlsations are not available
+    # even the lazy loading after firts _ call would be interesting
+    # File "...grass/script/core.py", line 40, in <module>
+    # AttributeError: 'NoneType' object has no attribute 'endswith'
+    KeyValue = dict
+
+# alternative term to check(er(s)) would be compare
+
+
+def unify_projection(dic):
+    """Unifies names of projections.
+
+    Some projections are referred using different names like
+    'Universal Transverse Mercator' and 'Universe Transverse Mercator'.
+    This function replaces synonyms by a unified name.
+
+    Example of common typo in UTM replaced by correct spelling::
+
+        >>> unify_projection({'name': ['Universe Transverse Mercator']})
+        {'name': ['Universal Transverse Mercator']}
+
+    :param dic: The dictionary containing information about projection
+
+    :return: The dictionary with the new values if needed or a copy of old one
+    """
+    # the lookup variable is a list of list, each list contains all the
+    # possible name for a projection system
+    lookup = [['Universal Transverse Mercator',
+               'Universe Transverse Mercator']]
+    dic = dict(dic)
+    for l in lookup:
+        for n in range(len(dic['name'])):
+            if dic['name'][n] in l:
+                dic['name'][n] = l[0]
+    return dic
+
+
+def unify_units(dic):
+    """Unifies names of units.
+
+    Some units have different spelling although they are the same units.
+    This functions replaces different spelling options by unified one.
+
+    Example of British English spelling replaced by US English spelling::
+
+        >>> unify_units({'units': ['metres'], 'unit': ['metre']})
+        {'units': ['meters'], 'unit': ['meter']}
+
+    :param dic: The dictionary containing information about units
+
+    :return: The dictionary with the new values if needed or a copy of old one
+    """
+    # the lookup variable is a list of list, each list contains all the
+    # possible name for a units
+    lookup = [['meter', 'metre'], ['meters', 'metres'],
+              ['Meter', 'Metre'], ['Meters', 'Metres'],
+              ['kilometer', 'kilometre'], ['kilometers', 'kilometres'],
+              ['Kilometer', 'Kilometre'], ['Kilometers', 'Kilometres'],
+              ]
+    dic = dict(dic)
+    for l in lookup:
+        import types
+        if not isinstance(dic['unit'], str):
+            for n in range(len(dic['unit'])):
+                if dic['unit'][n] in l:
+                    dic['unit'][n] = l[0]
+        else:
+            if dic['unit'] in l:
+                dic['unit'] = l[0]
+        if not isinstance(dic['units'], str):
+            for n in range(len(dic['units'])):
+                if dic['units'][n] in l:
+                    dic['units'][n] = l[0]
+        else:
+            if dic['units'] in l:
+                dic['units'] = l[0]
+    return dic
+
+
+def value_from_string(value):
+    """Create value of a most fitting type from a string.
+
+    Type conversions are applied in order ``int``, ``float``, ``string``
+    where string is no conversion.
+
+    >>> value_from_string('1')
+    1
+    >>> value_from_string('5.6')
+    5.6
+    >>> value_from_string('  5.6\t  ')
+    5.6
+    >>> value_from_string('hello')
+    'hello'
+    """
+    not_float = False
+    not_int = False
+    # Convert values into correct types
+    # We first try integer then float because
+    # int('1.0') is ValueError (although int(1.0) is not)
+    # while float('1') is not
+    try:
+        value_converted = int(value)
+    except ValueError:
+        not_int = True
+    if not_int:
+        try:
+            value_converted = float(value)
+        except ValueError:
+            not_float = True
+    # strip strings from whitespace (expecting spaces and tabs)
+    if not_int and not_float:
+        value_converted = value.strip()
+    return value_converted
+
+
+# TODO: what is the default separator?
+def text_to_keyvalue(text, sep=":", val_sep=",", functions=None,
+                     skip_invalid=False, skip_empty=False,
+                     from_string=value_from_string):
+    """Convert test to key-value pairs (dictionary-like KeyValue object).
+
+    Converts a key-value text file, where entries are separated
+    by newlines and the key and value are separated by `sep`,
+    into a key-value dictionary and discovers/uses the correct
+    data types (float, int or string) for values.
+
+    Besides key-value pairs it also parses values itself. Value is created
+    with the best fitting type using `value_from_string()` function by default.
+    When val_sep is present in value part, the resulting value is
+    a list of values.
+
+    :param text: string to convert
+    :param sep: character that separates the keys and values
+    :param val_sep: character that separates the values of a single key
+    :param functions: list of functions to apply on the resulting dictionary
+    :param skip_invalid: skip all lines which does not contain separator
+    :param skip_empty: skip empty lines
+    :param from_string: a function used to convert strings to values,
+        use ``lambda x: x`` for no conversion
+
+    :return: a dictionary representation of text
+    :return type: grass.script.core.KeyValue or dict
+
+    And example of converting text with text, floats, integers and list
+    to a dictionary::
+
+        >>> sorted(text_to_keyvalue('''a: Hello
+        ... b: 1.0
+        ... c: 1,2,3,4,5
+        ... d : hello,8,0.1''').items())  # sorted items from the dictionary
+        [('a', 'Hello'), ('b', 1.0), ('c', [1, 2, 3, 4, 5]), ('d', ['hello', 8, 0.1])]
+
+    .. warning::
+        And empty string is a valid input because empty dictionary is a valid
+        dictionary. You need to test this separately according
+        to the circumstances.
+    """
+    # splitting according to universal newlines approach
+    # TODO: add also general split with vsep
+    text = text.splitlines()
+    kvdict = KeyValue()
+    functions = [] if functions is None else functions
+
+    for line in text:
+        if line.find(sep) >= 0:
+            key, value = line.split(sep, 1)
+            key = key.strip()
+            value = value.strip()
+            # this strip may not be necessary, we strip each item in list
+            # and also if there is only one value
+        else:
+            # lines with no separator (empty or invalid)
+            if not line:
+                if not skip_empty:
+                    # TODO: here should go _ for translation
+                    # TODO: the error message is not really informative
+                    # in case of skipping lines we may get here with no key
+                    msg = ("Empty line in the parsed text.")
+                    if kvdict:
+                        # key is the one from previous line
+                        msg = ("Empty line in the parsed text."
+                               " Previous line's key is <%s>") % key
+                    raise ValueError(msg)
+            else:
+                # line contains something but not separator
+                if not skip_invalid:
+                    # TODO: here should go _ for translation
+                    raise ValueError(("Line <{l}> does not contain"
+                                      " separator <{s}>.").format(l=line, s=sep))
+            # if we get here we are silently ignoring the line
+            # because it is invalid (does not contain key-value separator) or
+            # because it is empty
+            continue
+        if value.find(val_sep) >= 0:
+            # lists
+            values = value.split(val_sep)
+            value_list = []
+            for value in values:
+                value_converted = from_string(value)
+                value_list.append(value_converted)
+            kvdict[key] = value_list
+        else:
+            # single values
+            kvdict[key] = from_string(value)
+    for function in functions:
+        kvdict = function(kvdict)
+    return kvdict
+
+
+# TODO: decide if there should be some default for precision
+# TODO: define standard precisions for DCELL, FCELL, CELL, mm, ft, cm, ...
+# TODO: decide if None is valid, and use some default or no compare
+# TODO: is None a valid value for precision?
+def values_equal(value_a, value_b, precision=0.000001):
+    """
+    >>> values_equal(1.022, 1.02, precision=0.01)
+    True
+    >>> values_equal([1.2, 5.3, 6.8], [1.1, 5.2, 6.9], precision=0.2)
+    True
+    >>> values_equal(7, 5, precision=2)
+    True
+    >>> values_equal(1, 5.9, precision=10)
+    True
+    >>> values_equal('Hello', 'hello')
+    False
+    """
+    # each if body needs to handle only not equal state
+
+    if isinstance(value_a, float) and isinstance(value_b, float):
+        # both values are float
+        # this could be also changed to is None and raise TypeError
+        # in Python 2 None is smaller than anything
+        # in Python 3 None < 3 raises TypeError
+        precision = float(precision)
+        if abs(value_a - value_b) > precision:
+            return False
+
+    elif (isinstance(value_a, float) and isinstance(value_b, int)) or \
+            (isinstance(value_b, float) and isinstance(value_a, int)):
+        # on is float the other is int
+        # don't accept None
+        precision = float(precision)
+        # we will apply precision to int-float comparison
+        # rather than converting both to integer
+        # (as in the original function from grass.script.core)
+        if abs(value_a - value_b) > precision:
+            return False
+
+    elif isinstance(value_a, int) and isinstance(value_b, int) and \
+            precision and int(precision) > 0:
+        # both int but precision applies for them
+        if abs(value_a - value_b) > precision:
+            return False
+
+    elif isinstance(value_a, list) and isinstance(value_b, list):
+        if len(value_a) != len(value_b):
+            return False
+        for i in range(len(value_a)):
+            # apply this function for comparison of items in the list
+            if not values_equal(value_a[i], value_b[i], precision):
+                return False
+    else:
+        if value_a != value_b:
+            return False
+    return True
+
+
+def keyvalue_equals(dict_a, dict_b, precision,
+                    def_equal=values_equal, key_equal=None,
+                    a_is_subset=False):
+    """Compare two dictionaries.
+
+    .. note::
+        Always use keyword arguments for all parameters with defaults.
+        It is a good idea to use keyword arguments also for the first
+        two parameters.
+
+    An example of key-value texts comparison::
+
+        >>> keyvalue_equals(text_to_keyvalue('''a: Hello
+        ... b: 1.0
+        ... c: 1,2,3,4,5
+        ... d: hello,8,0.1'''),
+        ... text_to_keyvalue('''a: Hello
+        ... b: 1.1
+        ... c: 1,22,3,4,5
+        ... d: hello,8,0.1'''), precision=0.1)
+        False
+
+    :param dict_a: first dictionary
+    :param dict_b: second dictionary
+    :param precision: precision with which the floating point values
+        are compared (passed to equality functions)
+    :param callable def_equal: function used for comparison by default
+    :param dict key_equal: dictionary of functions used for comparison
+        of specific keys, `def_equal` is used for the rest,
+        keys in dictionary are keys in `dict_a` and `dict_b` dictionaries,
+        values are the fuctions used to comapare the given key
+    :param a_is_subset: `True` if `dict_a` is a subset of `dict_b`,
+        `False` otherwise
+
+    :return: `True` if identical, `False` if different
+
+    Use `diff_keyvalue()` to get information about differeces.
+    You can use this function to find out if there is a difference and then
+    use `diff_keyvalue()` to determine all the differences between
+    dictionaries.
+    """
+    key_equal = {} if key_equal is None else key_equal
+
+    if not a_is_subset and sorted(dict_a.keys()) != sorted(dict_b.keys()):
+        return False
+    b_keys = dict_b.keys() if a_is_subset else None
+
+    # iterate over subset or just any if not a_is_subset
+    # check for missing keys in superset
+    # compare matching keys
+    for key in dict_a.keys():
+        if a_is_subset and key not in b_keys:
+            return False
+        equal_fun = key_equal.get(key, def_equal)
+        if not equal_fun(dict_a[key], dict_b[key], precision):
+            return False
+    return True
+
+
+# TODO: should the return depend on the a_is_subset parameter?
+# this function must have the same interface and behavior as keyvalue_equals
+def diff_keyvalue(dict_a, dict_b, precision,
+                  def_equal=values_equal, key_equal=None,
+                  a_is_subset=False):
+    """Determine the difference of two dictionaries.
+
+    The function returns missing keys and different values for common keys::
+
+        >>> a = {'c': 2, 'b': 3, 'a': 4}
+        >>> b = {'c': 1, 'b': 3, 'd': 5}
+        >>> diff_keyvalue(a, b, precision=0)
+        (['d'], ['a'], [('c', 2, 1)])
+
+    You can provide only a subset of values in dict_a, in this case
+    first item in tuple is an emptu list::
+
+        >>> diff_keyvalue(a, b, a_is_subset=True, precision=0)
+        ([], ['a'], [('c', 2, 1)])
+
+    This function behaves the same as `keyvalue_equals()`.
+
+    :returns: A tuple of lists, fist is list of missing keys in dict_a,
+        second missing keys in dict_b and third is a list of mismatched
+        values as tuples (key, value_from_a, value_from_b)
+    :rtype: (list, list, list)
+
+    Comparing to the Python ``difflib`` package this function does not create
+    any difference output. It just returns the dictionaries.
+    Comparing to the Python ``unittest`` ``assertDictEqual()``,
+    this function does not issues error or exception, it just determines
+    what it the difference.
+    """
+    key_equal = {} if key_equal is None else key_equal
+
+    a_keys = dict_a.keys()
+    b_keys = dict_b.keys()
+
+    missing_in_a = []
+    missing_in_b = []
+    mismatched = []
+
+    if not a_is_subset:
+        for key in b_keys:
+            if key not in a_keys:
+                missing_in_a.append(key)
+
+    # iterate over a, so we know that it is in a
+    for key in a_keys:
+        # check if it is in b
+        if key not in b_keys:
+            missing_in_b.append(key)
+        else:
+            equal_fun = key_equal.get(key, def_equal)
+            if not equal_fun(dict_a[key], dict_b[key], precision):
+                mismatched.append((key, dict_a[key], dict_b[key]))
+
+    return sorted(missing_in_a), sorted(missing_in_b), sorted(mismatched)
+
+
+def proj_info_equals(text_a, text_b):
+    """Test if two PROJ_INFO texts are equal."""
+    def compare_sums(list_a, list_b, precision):
+        """Compare difference of sums of two list using precision"""
+        # derived from the code in grass.script.core
+        if abs(sum(list_a) - sum(list_b)) > precision:
+            return False
+    sep = ':'
+    val_sep = ','
+    key_equal = {'+towgs84': compare_sums}
+    dict_a = text_to_keyvalue(text_a, sep=sep, val_sep=val_sep,
+                              functions=[unify_projection])
+    dict_b = text_to_keyvalue(text_b, sep=sep, val_sep=val_sep,
+                              functions=[unify_projection])
+    return keyvalue_equals(dict_a, dict_b,
+                            precision=0.000001,
+                            def_equal=values_equal,
+                            key_equal=key_equal)
+
+
+def proj_units_equals(text_a, text_b):
+    """Test if two PROJ_UNITS texts are equal."""
+    def lowercase_equals(string_a, string_b, precision=None):
+        # we don't need a waring for unused precision
+        # pylint: disable=W0613
+        """Test equality of two strings ignoring their case using ``lower()``.
+
+        Precision is accepted as require by `keyvalue_equals()` but ignored.
+        """
+        return string_a.lower() == string_b.lower()
+    sep = ':'
+    val_sep = ','
+    key_equal = {'unit': lowercase_equals, 'units': lowercase_equals}
+    dict_a = text_to_keyvalue(text_a, sep=sep, val_sep=val_sep,
+                              functions=[unify_units])
+    dict_b = text_to_keyvalue(text_b, sep, val_sep,
+                              functions=[unify_units])
+    return keyvalue_equals(dict_a, dict_b,
+                            precision=0.000001,
+                            def_equal=values_equal,
+                            key_equal=key_equal)
+
+
+# TODO: support also float (with E, e, inf, nan, ...?) and int (###, ##.)
+# http://hg.python.org/cpython/file/943d3e289ab4/Lib/decimal.py#l6098
+# perhaps a separate function?
+# alternative names: looks like, correspond with/to
+# TODO: change checking over lines?
+# TODO: change parameter order?
+# TODO: the behavior with last \n is strange but now using DOTALL and $
+def check_text_ellipsis(reference, actual):
+    r"""
+    >>> check_text_ellipsis("Vector map <...> contains ... points.",
+    ...                     "Vector map <bridges> contains 5268 points.")
+    True
+    >>> check_text_ellipsis("user: ...\\nname: elevation",
+    ...                     "user: some_user\\nname: elevation")
+    True
+    >>> check_text_ellipsis("user: ...\\nname: elevation",
+    ...                     "user: \\nname: elevation")
+    False
+
+    The ellipsis is always considered even if it is followed by another
+    dots. Consequently, a dot at the end of the sentence with preceding
+    ellipsis will work as well as a line filled with undefined number of dots.
+
+    >>> check_text_ellipsis("The result is ....",
+    ...                     "The result is 25.")
+    True
+    >>> check_text_ellipsis("max ..... ...",
+    ...                     "max ....... 6")
+    True
+
+    However, there is no way how to express that the dot should be in the
+    beginning and the ellipsis is at the end of the group of dots.
+
+    >>> check_text_ellipsis("The result is ....",
+    ...                     "The result is .25")
+    False
+
+    The matching goes over lines (TODO: should this be changed?):
+    >>> check_text_ellipsis("a=11\nb=...", "a=11\nb=22\n")
+    True
+
+    This function is based on regular expression containing .+ but no other
+    regular expression matching will be done.
+
+    >>> check_text_ellipsis("Result: [569] (...)",
+    ...                     "Result: 9 (too high)")
+    False
+    """
+    ref_escaped = re.escape(reference)
+    exp = re.compile(r'\\\.\\\.\\\.')  # matching escaped ...
+    ref_regexp = exp.sub('.+', ref_escaped) + "$"
+    if re.match(ref_regexp, actual, re.DOTALL):
+        return True
+    else:
+        return False
+
+
+def check_text_ellipsis_doctest(reference, actual):
+    """
+    >>> check_text_ellipsis_doctest("user: ...\\nname: elevation",
+    ...                     "user: some_user\\nname: elevation")
+    True
+    >>> check_text_ellipsis_doctest("user: ...\\nname: elevation",
+    ...                     "user: \\nname: elevation")
+    True
+
+    This function is using doctest's function to check the result, so we
+    will discuss here how the underlying function behaves.
+
+    >>> checker = doctest.OutputChecker()
+    >>> checker.check_output("user: some_user\\nname: elevation",
+    ...                      "user: some_user\\nname: elevation",
+    ...                      optionflags=None)
+    True
+    >>> checker.check_output("user: user1\\nname: elevation",
+    ...                      "user: some_user\\nname: elevation",
+    ...                      optionflags=doctest.ELLIPSIS)
+    False
+    >>> checker.check_output("user: ...\\nname: elevation",
+    ...                      "user: some_user\\nname: elevation",
+    ...                      optionflags=doctest.ELLIPSIS)
+    True
+
+    The ellipsis matches also an empty string, so the following matches:
+
+    >>> checker.check_output("user: ...\\nname: elevation",
+    ...                      "user: \\nname: elevation",
+    ...                      optionflags=doctest.ELLIPSIS)
+    True
+
+    It is robust concerning misspelled matching string but does not allow
+    ellipsis followed by a dot, e.g. at the end of the sentence:
+
+    >>> checker.check_output("user: ....\\nname: elevation",
+    ...                      "user: some_user\\nname: elevation",
+    ...                      optionflags=doctest.ELLIPSIS)
+    False
+    """
+    # this can be also global
+    checker = doctest.OutputChecker()
+    return checker.check_output(reference, actual,
+                                optionflags=doctest.ELLIPSIS)
+
+
+import hashlib
+
+# optimal size depends on file system and maybe on hasher.block_size
+_BUFFER_SIZE = 2**16
+
+
+# TODO: accept also open file object
+def file_md5(filename):
+    """Get MD5 (check) sum of a file."""
+    hasher = hashlib.md5()
+    with open(filename, 'rb') as f:
+        buf = f.read(_BUFFER_SIZE)
+        while len(buf) > 0:
+            hasher.update(buf)
+            buf = f.read(_BUFFER_SIZE)
+    return hasher.hexdigest()
+
+
+def text_file_md5(filename, exclude_lines=None, exclude_re=None,
+                  prepend_lines=None, append_lines=None):
+    """Get a MD5 (check) sum of a text file.
+
+    Works in the same way as `file_md5()` function but ignores newlines
+    characters and excludes lines from the file as well as prepend or
+    append them if requested.
+
+    :param exclude_lines: list of strings to be excluded
+        (newline characters should not be part of the strings)
+    :param exclude_re: regular expression string;
+        lines matching this regular expression will not be considered
+    :param prepend_lines: list of lines to be prepended to the file
+        before computing the sum
+    :param append_lines: list of lines  to be appended to the file
+        before computing the sum
+    """
+    hasher = hashlib.md5()
+    if exclude_re:
+        regexp = re.compile(exclude_re)
+    if prepend_lines:
+        for line in prepend_lines:
+            hasher.update(line)
+    with open(filename, 'r') as f:
+        for line in f:
+            # replace platform newlines by standard newline
+            if os.linesep != '\n':
+                line = line.rstrip(os.linesep) + '\n'
+            if exclude_lines and line in exclude_lines:
+                continue
+            if exclude_re and regexp.match(line):
+                continue
+            hasher.update(line)
+    if append_lines:
+        for line in append_lines:
+            hasher.update(line)
+    return hasher.hexdigest()
+
+
+def files_equal_md5(filename_a, filename_b):
+    """Check equality of two files according to their MD5 sums"""
+    return file_md5(filename_a) == file_md5(filename_b)
+
+
+def main():  # pragma: no cover
+    """Run the doctest"""
+    ret = doctest.testmod()
+    return ret.failed
+
+
+if __name__ == '__main__':  # pragma: no cover
+    sys.exit(main())
diff --git a/lib/python/gunittest/gmodules.py b/lib/python/gunittest/gmodules.py
new file mode 100644
index 0000000..dc2d759
--- /dev/null
+++ b/lib/python/gunittest/gmodules.py
@@ -0,0 +1,132 @@
+# -*- coding: utf-8 -*-
+"""Specialized interfaces for invoking modules for testing framework
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras, Soeren Gebbert
+"""
+
+import subprocess
+from grass.script.core import start_command
+from grass.exceptions import CalledModuleError
+from grass.pygrass.modules import Module
+
+from .utils import do_doctest_gettext_workaround
+
+
+class SimpleModule(Module):
+    """Simple wrapper around pygrass.modules.Module to make sure that
+    run\_, finish\_, stdout and stderr are set correctly.
+
+    >>> mapcalc = SimpleModule('r.mapcalc', expression='test_a = 1',
+    ...                        overwrite=True)
+    >>> mapcalc.run()
+    Module('r.mapcalc')
+    >>> mapcalc.popen.returncode
+    0
+
+    >>> colors = SimpleModule('r.colors',
+    ...                       map='test_a', rules='-', stdin_='1 red')
+    >>> colors.run()
+    Module('r.colors')
+    >>> colors.popen.returncode
+    0
+    >>> str(colors.inputs.stdin)
+    '1 red'
+    >>> str(colors.outputs.stdout)
+    ''
+    >>> colors.outputs.stderr.strip()
+    "Color table for raster map <test_a> set to 'rules'"
+    """
+    def __init__(self, cmd, *args, **kargs):
+        for banned in ['stdout_', 'stderr_', 'finish_', 'run_']:
+            if banned in kargs:
+                raise ValueError('Do not set %s parameter'
+                                 ', it would be overriden' % banned)
+        kargs['stdout_'] = subprocess.PIPE
+        kargs['stderr_'] = subprocess.PIPE
+        kargs['finish_'] = True
+        kargs['run_'] = False
+
+        Module.__init__(self, cmd, *args, **kargs)
+
+
+def call_module(module, stdin=None,
+                merge_stderr=False, capture_stdout=True, capture_stderr=True,
+                **kwargs):
+    r"""Run module with parameters given in `kwargs` and return its output.
+
+    >>> print call_module('g.region', flags='pg')  # doctest: +ELLIPSIS
+    projection=...
+    zone=...
+    n=...
+    s=...
+    w=...
+    >>> call_module('m.proj', flags='i', input='-', stdin="50.0 41.5")
+    '8642890.65|6965155.61|0.00\n'
+    >>> call_module('g.region', aabbbccc='notexist')  # doctest: +IGNORE_EXCEPTION_DETAIL
+    Traceback (most recent call last):
+        ...
+    CalledModuleError: Module run g.region ... ended with error
+
+    If `stdin` is not set and `kwargs` contains ``input`` with value set
+    to ``-`` (dash), the function raises an error.
+
+    Note that ``input`` nor ``output`` parameters are used by this
+    function itself, these are usually module parameters which this
+    function just passes to it. However, when ``input`` is in parameters
+    the function checks if its values is correct considering value of
+    ``stdin`` parameter.
+
+    :param str module: module name
+    :param stdin: string to be used as module standard input (stdin) or `None`
+    :param merge_stderr: if the standard error output should be merged with stdout
+    :param kwargs: module parameters
+
+    :returns: module standard output (stdout) as string or None if apture_stdout is False
+
+    :raises CalledModuleError: if module return code is non-zero
+    :raises ValueError: if the parameters are not correct
+
+    .. note::
+        The data read is buffered in memory, so do not use this method
+        if the data size is large or unlimited.
+    """
+    # TODO: remove this:
+    do_doctest_gettext_workaround()
+    # implemenation inspired by subprocess.check_output() function
+    if stdin:
+        if 'input' in kwargs and kwargs['input'] != '-':
+            raise ValueError(_("input='-' must be used when stdin is specified"))
+        if stdin == subprocess.PIPE:
+            raise ValueError(_("stdin must be string or buffer, not PIPE"))
+        kwargs['stdin'] = subprocess.PIPE  # to be able to send data to stdin
+    elif 'input' in kwargs and kwargs['input'] == '-':
+        raise ValueError(_("stdin must be used when input='-'"))
+    if merge_stderr and not (capture_stdout and capture_stderr):
+        raise ValueError(_("You cannot merge stdout and stderr and not capture them"))
+    if 'stdout' in kwargs:
+        raise TypeError(_("stdout argument not allowed, it could be overridden"))
+    if 'stderr' in kwargs:
+        raise TypeError(_("stderr argument not allowed, it could be overridden"))
+
+    if capture_stdout:
+        kwargs['stdout'] = subprocess.PIPE
+    if capture_stderr:
+        if merge_stderr:
+            kwargs['stderr'] = subprocess.STDOUT
+        else:
+            kwargs['stderr'] = subprocess.PIPE
+    process = start_command(module, **kwargs)
+    # input=None means no stdin (our default)
+    # for no stdout, output is None which is out interface
+    # for stderr=STDOUT or no stderr, errors is None
+    # which is fine for CalledModuleError
+    output, errors = process.communicate(input=stdin)
+    returncode = process.poll()
+    if returncode:
+        raise CalledModuleError(returncode, module, kwargs, errors)
+    return output
diff --git a/lib/python/gunittest/gutils.py b/lib/python/gunittest/gutils.py
new file mode 100644
index 0000000..9c3dce0
--- /dev/null
+++ b/lib/python/gunittest/gutils.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+"""Utilities related to GRASS GIS for GRASS Python testing framework
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+from grass.script.core import start_command, PIPE
+
+from .gmodules import call_module
+from .checkers import text_to_keyvalue
+
+
+def get_current_mapset():
+    """Get curret mapset name as a string"""
+    return call_module('g.mapset', flags='p').strip()
+
+def is_map_in_mapset(name, type, mapset=None):
+    """Check is map is present in the mapset (current mapset by default)
+
+    This function is different from what we would expect in GRASS
+    because it cares only about specific mapset, the current one by default,
+    and it does not care that the map is accessible in other mapset.
+
+    :param name: name of the map
+    :param type: data type ('raster', 'raster3d', and 'vector') 
+    """
+    if not mapset:
+        mapset = get_current_mapset()
+
+    # change type to element used by find file
+    # otherwise, we are not checking the input,
+    # so anything accepted by g.findfile will work but this can change in the
+    # future (the documentation is clear about what's legal)
+    # supporting both short and full names
+    if type == 'rast' or  type == 'raster':
+        type = 'cell'
+    elif type == 'rast3d' or type == 'raster3d':
+        type = 'grid3'
+    elif type == 'vect':
+        type = 'vector'
+    # g.findfile returns non-zero when file was not found
+    # se we ignore return code and just focus on stdout
+    process = start_command('g.findfile', flags='n',
+                            element=type, file=name, mapset=mapset,
+                            stdout=PIPE, stderr=PIPE)
+    output, errors = process.communicate()
+    info = text_to_keyvalue(output, sep='=')
+    # file is the key questioned in grass.script.core find_file()
+    # return code should be equivalent to checking the output
+    if info['file']:
+        return True
+    else:
+        return False
diff --git a/lib/python/gunittest/invoker.py b/lib/python/gunittest/invoker.py
new file mode 100644
index 0000000..7fbdea4
--- /dev/null
+++ b/lib/python/gunittest/invoker.py
@@ -0,0 +1,257 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework test files invoker (runner)
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+import os
+import sys
+import shutil
+import subprocess
+
+from .checkers import text_to_keyvalue
+
+from .loader import GrassTestLoader, discover_modules
+from .reporters import (GrassTestFilesMultiReporter,
+                        GrassTestFilesTextReporter, GrassTestFilesHtmlReporter,
+                        TestsuiteDirReporter, GrassTestFilesKeyValueReporter,
+                        get_svn_path_authors,
+                        NoopFileAnonymizer, keyvalue_to_text)
+from .utils import silent_rmtree, ensure_dir
+
+try:
+    from string import maketrans
+except ImportError:
+    maketrans = str.maketrans
+
+# needed for write_gisrc
+# TODO: it would be good to find some way of writing rc without the need to
+# have GRASS proprly set (anything from grass.script requires translations to
+# be set, i.e. the GRASS environment properly set)
+import grass.script.setup as gsetup
+
+import collections
+
+
+# TODO: this might be more extend then update
+def update_keyval_file(filename, module, returncode):
+    if os.path.exists(filename):
+        with open(filename, 'r') as keyval_file:
+            keyval = text_to_keyvalue(keyval_file.read(), sep='=')
+    else:
+        keyval = {}
+
+    # this is for one file
+    test_file_authors = get_svn_path_authors(module.abs_file_path)
+    # in case that SVN is not available use empty authors
+    if test_file_authors is None:
+        test_file_authors = ''
+
+    # always owerwrite name and status
+    keyval['name'] = module.name
+    keyval['tested_dir'] = module.tested_dir
+    if 'status' not in keyval.keys():
+        keyval['status'] = 'failed' if returncode else 'passed'
+    keyval['returncode'] = returncode
+    keyval['test_file_authors'] = test_file_authors
+
+    with open(filename, 'w') as keyval_file:
+        keyval_file.write(keyvalue_to_text(keyval))
+    return keyval
+
+
+class GrassTestFilesInvoker(object):
+    """A class used to invoke test files and create the main report"""
+
+    # TODO: it is not clear what clean_outputs mean, if should be split
+    # std stream, random outputs, saved results, profiling
+    # not stdout and stderr if they contain test results
+    # we can also save only failed tests, or generate only if assert fails
+    def __init__(self, start_dir,
+                 clean_mapsets=True, clean_outputs=True, clean_before=True,
+                 testsuite_dir='testsuite', file_anonymizer=None):
+        """
+
+        :param bool clean_mapsets: if the mapsets should be removed
+        :param bool clean_outputs: meaning is unclear: random tests outputs,
+            saved images from maps, profiling?
+        :param bool clean_before: if mapsets, outputs, and results
+            should be removed before the tests start
+            (advantageous when the previous run left everything behind)
+        """
+        self.start_dir = start_dir
+        self.clean_mapsets = clean_mapsets
+        self.clean_outputs = clean_outputs
+        self.clean_before = clean_before
+        self.testsuite_dir = testsuite_dir  # TODO: solve distribution of this constant
+        # reporter is created for each call of run_in_location()
+        self.reporter = None
+
+        self.testsuite_dirs = None
+        if file_anonymizer is None:
+            self._file_anonymizer = NoopFileAnonymizer()
+        else:
+            self._file_anonymizer = file_anonymizer
+
+    def _create_mapset(self, gisdbase, location, module):
+        """Create mapset according to information in module.
+
+        :param loader.GrassTestPythonModule module:
+        """
+        # using path.sep but also / and \ for cases when it is confused
+        # (namely the case of Unix path on MS Windows)
+        # replace . to get rid of unclean path
+        # TODO: clean paths
+        # note that backslash cannot be at the end of raw string
+        dir_as_name = module.tested_dir.translate(maketrans(r'/\.', '___'))
+        mapset = dir_as_name + '_' + module.name
+        # TODO: use grass module to do this? but we are not in the right gisdbase
+        mapset_dir = os.path.join(gisdbase, location, mapset)
+        if self.clean_before:
+            silent_rmtree(mapset_dir)
+        os.mkdir(mapset_dir)
+        # TODO: default region in mapset will be what?
+        # copy WIND file from PERMANENT
+        # TODO: this should be a function in grass.script (used also in gis_set.py, PyGRASS also has its way with Mapset)
+        # TODO: are premisions an issue here?
+        shutil.copy(os.path.join(gisdbase, location, 'PERMANENT', 'WIND'),
+                    os.path.join(mapset_dir))
+        return mapset, mapset_dir
+
+    def _run_test_module(self, module, results_dir, gisdbase, location):
+        """Run one test file."""
+        self.testsuite_dirs[module.tested_dir].append(module.name)
+        cwd = os.path.join(results_dir, module.tested_dir, module.name)
+        data_dir = os.path.join(module.file_dir, 'data')
+        if os.path.exists(data_dir):
+            # TODO: link dir instead of copy tree and remove link afterwads
+            # (removing is good because of testsuite dir in samplecode)
+            # TODO: use different dir name in samplecode and test if it works
+            shutil.copytree(data_dir, os.path.join(cwd, 'data'),
+                            ignore=shutil.ignore_patterns('*.svn*'))
+        ensure_dir(os.path.abspath(cwd))
+        # TODO: put this to constructor and copy here again
+        env = os.environ.copy()
+        mapset, mapset_dir = self._create_mapset(gisdbase, location, module)
+        gisrc = gsetup.write_gisrc(gisdbase, location, mapset)
+
+        # here is special setting of environmental variables for running tests
+        # some of them might be set from outside in the future and if the list
+        # will be long they should be stored somewhere separately
+
+        # use custom gisrc, not current session gisrc
+        env['GISRC'] = gisrc
+        # percentage in plain format is 0...10...20... ...100
+        env['GRASS_MESSAGE_FORMAT'] = 'plain'
+
+        stdout_path = os.path.join(cwd, 'stdout.txt')
+        stderr_path = os.path.join(cwd, 'stderr.txt')
+        stdout = open(stdout_path, 'w')
+        stderr = open(stderr_path, 'w')
+
+        self.reporter.start_file_test(module)
+        # TODO: we might clean the directory here before test if non-empty
+
+        if module.file_type == 'py':
+            # ignoring shebang line to use current Python
+            # and also pass parameters to it
+            # add also '-Qwarn'?
+            p = subprocess.Popen([sys.executable, '-tt', '-3',
+                                  module.abs_file_path],
+                                 cwd=cwd, env=env,
+                                 stdout=stdout, stderr=stderr)
+        elif module.file_type == 'sh':
+            # ignoring shebang line to pass parameters to shell
+            # expecting system to have sh or something compatible
+            # TODO: add some special checks for MS Windows
+            # using -x to see commands in stderr
+            # using -e to terminate fast
+            # from dash manual:
+            # -e errexit     If not interactive, exit immediately if any
+            #                untested command fails.  The exit status of a com‐
+            #                mand is considered to be explicitly tested if the
+            #                command is used to control an if, elif, while, or
+            #                until; or if the command is the left hand operand
+            #                of an '&&' or '||' operator.
+            p = subprocess.Popen(['sh', '-e', '-x', module.abs_file_path],
+                                 cwd=cwd, env=env,
+                                 stdout=stdout, stderr=stderr)
+        else:
+            p = subprocess.Popen([module.abs_file_path],
+                                 cwd=cwd, env=env,
+                                 stdout=stdout, stderr=stderr)
+        returncode = p.wait()
+        stdout.close()
+        stderr.close()
+        self._file_anonymizer.anonymize([stdout_path, stderr_path])
+
+        test_summary = update_keyval_file(
+            os.path.join(os.path.abspath(cwd), 'test_keyvalue_result.txt'),
+            module=module, returncode=returncode)
+        self.reporter.end_file_test(module=module, cwd=cwd,
+                                    returncode=returncode,
+                                    stdout=stdout_path, stderr=stderr_path,
+                                    test_summary=test_summary)
+        # TODO: add some try-except or with for better error handling
+        os.remove(gisrc)
+        # TODO: only if clean up
+        if self.clean_mapsets:
+            shutil.rmtree(mapset_dir)
+
+    def run_in_location(self, gisdbase, location, location_type,
+                        results_dir):
+        """Run tests in a given location"""
+        if os.path.abspath(results_dir) == os.path.abspath(self.start_dir):
+            raise RuntimeError("Results root directory should not be the same"
+                               " as discovery start directory")
+        self.reporter = GrassTestFilesMultiReporter(
+            reporters=[
+                GrassTestFilesTextReporter(stream=sys.stderr),
+                GrassTestFilesHtmlReporter(
+                    file_anonymizer=self._file_anonymizer,
+                    main_page_name='testfiles.html'),
+                GrassTestFilesKeyValueReporter(
+                    info=dict(location=location, location_type=location_type))
+            ])
+        self.testsuite_dirs = collections.defaultdict(list)  # reset list of dirs each time
+        # TODO: move constants out of loader class or even module
+        modules = discover_modules(start_dir=self.start_dir,
+                                   grass_location=location_type,
+                                   file_regexp=r'.*\.(py|sh)$',
+                                   skip_dirs=GrassTestLoader.skip_dirs,
+                                   testsuite_dir=GrassTestLoader.testsuite_dir,
+                                   all_locations_value=GrassTestLoader.all_tests_value,
+                                   universal_location_value=GrassTestLoader.universal_tests_value,
+                                   import_modules=False)
+
+        self.reporter.start(results_dir)
+        for module in modules:
+            self._run_test_module(module=module, results_dir=results_dir,
+                                  gisdbase=gisdbase, location=location)
+        self.reporter.finish()
+
+        # TODO: move this to some (new?) reporter
+        # TODO: add basic summary of linked files so that the page is not empty
+        with open(os.path.join(results_dir, 'index.html'), 'w') as main_index:
+            main_index.write(
+                '<html><body>'
+                '<h1>Tests for <{location}>'
+                ' using <{type}> type tests</h1>'
+                '<ul>'
+                '<li><a href="testsuites.html">Results by testsuites</a>'
+                ' (testsuite directories)</li>'
+                '<li><a href="testfiles.html">Results by test files</a></li>'
+                '<ul>'
+                '</body></html>'
+                .format(location=location, type=location_type))
+
+        testsuite_dir_reporter = TestsuiteDirReporter(
+            main_page_name='testsuites.html', testsuite_page_name='index.html',
+            top_level_testsuite_page_name='testsuite_index.html')
+        testsuite_dir_reporter.report_for_dirs(root=results_dir,
+                                               directories=self.testsuite_dirs)
diff --git a/lib/python/gunittest/loader.py b/lib/python/gunittest/loader.py
new file mode 100644
index 0000000..ad0dbdc
--- /dev/null
+++ b/lib/python/gunittest/loader.py
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework test loading functionality
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+import os
+import fnmatch
+import unittest
+import collections
+import re
+
+
+# TODO: resolve test file versus test module
+GrassTestPythonModule = collections.namedtuple('GrassTestPythonModule',
+                                               ['name', 'module',
+                                                'file_type',
+                                                'tested_dir',
+                                                'file_dir',
+                                                'abs_file_path'])
+
+
+# TODO: implement loading without the import
+def discover_modules(start_dir, skip_dirs, testsuite_dir,
+                     grass_location,
+                     all_locations_value, universal_location_value,
+                     import_modules, add_failed_imports=True,
+                     file_pattern=None, file_regexp=None):
+    """Find all test files (modules) in a directory tree.
+
+    The function is designed specifically for GRASS testing framework
+    test layout. It expects some directories to have a "testsuite"
+    directory where test files (test modules) are present.
+    Additionally, it also handles loading of test files which specify
+    in which location they can run.
+
+    :param start_dir: directory to start the search
+    :param file_pattern: pattern of files in a test suite directory
+        (using Unix shell-style wildcards)
+    :param skip_dirs: directories not to recurse to (e.g. ``.svn``)
+    :param testsuite_dir: name of directory where the test files are found,
+        the function will not recurse to this directory
+    :param grass_location: string with an accepted location type (category, shortcut)
+    :param all_locations_value: string used to say that all locations
+        should be loaded (grass_location can be set to this value)
+    :param universal_location_value: string marking a test as
+        location-independent (same as not providing any)
+    :param import_modules: True if files should be imported as modules,
+        False if the files should be just searched for the needed values
+
+    :returns: a list of GrassTestPythonModule objects
+
+    .. todo::
+        Implement import_modules.
+    """
+    modules = []
+    for root, dirs, files in os.walk(start_dir):
+        for dir_pattern in skip_dirs:
+            to_skip = fnmatch.filter(dirs, dir_pattern)
+            for skip in to_skip:
+                dirs.remove(skip)
+
+        if testsuite_dir in dirs:
+            dirs.remove(testsuite_dir)  # do not recurse to testsuite
+            full = os.path.join(root, testsuite_dir)
+            
+            all_files = os.listdir(full)
+            if file_pattern:
+                files = fnmatch.filter(all_files, file_pattern)
+            if file_regexp:
+                files = [f for f in all_files if re.match(file_regexp, f)]
+            # get test/module name without .py
+            # extecting all files to end with .py
+            # this will not work for invoking bat files but it works fine
+            # as long as we handle only Python files (and using Python
+            # interpreter for invoking)
+
+            # TODO: warning about no tests in a testsuite
+            # (in what way?)
+            for file_name in files:
+                # TODO: add also import if requested
+                # (see older versions of this file)
+                # TODO: check if there is some main in .py
+                # otherwise we can have successful test just because
+                # everything was loaded into Python
+                # TODO: check if there is set -e or exit !0 or ?
+                # otherwise we can have successful because nothing was reported
+                abspath = os.path.abspath(full)
+                abs_file_path = os.path.join(abspath, file_name)
+                if file_name.endswith('.py'):
+                    if file_name == '__init__.py':
+                        # we always ignore __init__.py
+                        continue
+                    file_type = 'py'
+                    name = file_name[:-3]
+                elif file_name.endswith('.sh'):
+                    file_type = 'sh'
+                    name = file_name[:-3]
+                else:
+                    file_type = None  # alternative would be '', now equivalent
+                    name = file_name
+
+                add = False
+                try:
+                    if grass_location == all_locations_value:
+                        add = True
+                    else:
+                        try:
+                            locations = ['nc', 'stdmaps', 'all']
+                        except AttributeError:
+                            add = True  # test is universal
+                        else:
+                            if universal_location_value in locations:
+                                add = True  # cases when it is explicit
+                            if grass_location in locations:
+                                add = True  # standard case with given location
+                            if not locations:
+                                add = True  # count not specified as universal
+                except ImportError as e:
+                    if add_failed_imports:
+                        add = True
+                    else:
+                        raise ImportError('Cannot import module named'
+                                          ' %s in %s (%s)'
+                                          % (name, full, e.message))
+                        # alternative is to create TestClass which will raise
+                        # see unittest.loader
+                if add:
+                    modules.append(GrassTestPythonModule(
+                        name=name, module=None, tested_dir=root, file_dir=full,
+                        abs_file_path=abs_file_path, file_type=file_type))
+                # in else with some verbose we could tell about skiped test
+    return modules
+
+
+# TODO: find out if this is useful for us in some way
+# we are now using only discover_modules directly
+class GrassTestLoader(unittest.TestLoader):
+    """Class handles GRASS-specific loading of test modules."""
+
+    skip_dirs = ['.svn', 'dist.*', 'bin.*', 'OBJ.*']
+    testsuite_dir = 'testsuite'
+    files_in_testsuite = '*.py'
+    all_tests_value = 'all'
+    universal_tests_value = 'universal'
+
+    def __init__(self, grass_location):
+        self.grass_location = grass_location
+
+    # TODO: what is the purpose of top_level_dir, can it be useful?
+    # probably yes, we need to know grass src or dist root
+    # TODO: not using pattern here
+    def discover(self, start_dir, pattern='test*.py', top_level_dir=None):
+        """Load test modules from in GRASS testing framework way."""
+        modules = discover_modules(start_dir=start_dir,
+                                   file_pattern=self.files_in_testsuite,
+                                   skip_dirs=self.skip_dirs,
+                                   testsuite_dir=self.testsuite_dir,
+                                   grass_location=self.grass_location,
+                                   all_locations_value=self.all_tests_value,
+                                   universal_location_value=self.universal_tests_value,
+                                   import_modules=True)
+        tests = []
+        for module in modules:
+            tests.append(self.loadTestsFromModule(module.module))
+        return self.suiteClass(tests)
+
+
+if __name__ == '__main__':
+    GrassTestLoader().discover()
diff --git a/lib/python/gunittest/main.py b/lib/python/gunittest/main.py
new file mode 100644
index 0000000..185d077
--- /dev/null
+++ b/lib/python/gunittest/main.py
@@ -0,0 +1,178 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework module for running from command line
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+import os
+import sys
+import argparse
+
+from unittest.main import TestProgram
+
+
+from .loader import GrassTestLoader
+from .runner import (GrassTestRunner, MultiTestResult,
+                     TextTestResult, KeyValueTestResult)
+from .invoker import GrassTestFilesInvoker
+from .utils import silent_rmtree
+from .reporters import FileAnonymizer
+
+import grass.script.core as gcore
+
+
+class GrassTestProgram(TestProgram):
+    """A class to be used by individual test files (wrapped in the function)"""
+
+    def __init__(self, exit_at_end, grass_location, clean_outputs=True,
+                 unittest_argv=None, module=None,
+                 verbosity=1,
+                 failfast=None, catchbreak=None):
+        """Prepares the tests in GRASS way and then runs the tests.
+
+        :param bool clean_outputs: if outputs in mapset and in ?
+        """
+        self.test = None
+        self.grass_location = grass_location
+        # it is unclear what the exact behavior is in unittest
+        # buffer stdout and stderr during tests
+        buffer_stdout_stderr = False
+
+        grass_loader = GrassTestLoader(grass_location=self.grass_location)
+
+        text_result = TextTestResult(stream=sys.stderr,
+                                     descriptions=True,
+                                     verbosity=verbosity)
+        keyval_file = open('test_keyvalue_result.txt', 'w')
+        keyval_result = KeyValueTestResult(stream=keyval_file)
+        result = MultiTestResult(results=[text_result, keyval_result])
+
+        grass_runner = GrassTestRunner(verbosity=verbosity,
+                                       failfast=failfast,
+                                       buffer=buffer_stdout_stderr,
+                                       result=result)
+        super(GrassTestProgram, self).__init__(module=module,
+                                                   argv=unittest_argv,
+                                                   testLoader=grass_loader,
+                                                   testRunner=grass_runner,
+                                                   exit=exit_at_end,
+                                                   verbosity=verbosity,
+                                                   failfast=failfast,
+                                                   catchbreak=catchbreak,
+                                                   buffer=buffer_stdout_stderr)
+        keyval_file.close()
+
+
+def test():
+    """Run a test of a module.
+    """
+    # TODO: put the link to to the report only if available
+    # TODO: how to disable Python code coverage for module and C tests?
+    # TODO: we probably need to have different test  functions for C, Python modules, and Python code
+    # TODO: combine the results using python -m coverage --help | grep combine
+    # TODO: function to anonymize/beautify file names (in content and actual filenames)
+    # TODO: implement coverage but only when requested by invoker and only if
+    # it makes sense for tests (need to know what is tested)
+    # doing_coverage = False
+    #try:
+    #    import coverage
+    #    doing_coverage = True
+    #    cov = coverage.coverage(omit="*testsuite*")
+    #    cov.start()
+    #except ImportError:
+    #    pass
+        # TODO: add some message somewhere
+
+    # TODO: enable passing omit to exclude also gunittest or nothing
+    program = GrassTestProgram(module='__main__', exit_at_end=False, grass_location='all')
+    # TODO: check if we are in the directory where the test file is
+    # this will ensure that data directory is available when it is requested
+
+    #if doing_coverage:
+    #    cov.stop()
+    #    cov.html_report(directory='testcodecoverage')
+
+    # TODO: is sys.exit the right thing here
+    sys.exit(not program.result.wasSuccessful())
+
+
+def discovery():
+    """Recursively find all tests in testsuite directories and run them
+
+    Everything is imported and runs in this process.
+
+    Runs using::
+        python main.py discovery [start_directory]
+    """
+
+    program = GrassTestProgram(grass_location='nc', exit_at_end=False)
+
+    sys.exit(not program.result.wasSuccessful())
+
+
+# TODO: makefile rule should depend on the whole build
+# TODO: create a full interface (using grass parser or argparse)
+def main():
+    parser = argparse.ArgumentParser(
+    description='Run test files in all testsuite directories starting'
+                ' from the current one'
+                ' (runs on active GRASS session)')
+    parser.add_argument('--location', dest='location', action='store',
+                        help='Name of location where to perform test', required=True)
+    parser.add_argument('--location-type', dest='location_type', action='store',
+                        default='nc',
+                        help='Type of tests which should be run'
+                             ' (tag corresponding to location)')
+    parser.add_argument('--grassdata', dest='gisdbase', action='store',
+                        default=None,
+                        help='GRASS data(base) (GISDBASE) directory'
+                        ' (current GISDBASE by default)')
+    parser.add_argument('--output', dest='output', action='store',
+                        default='testreport',
+                        help='Output directory')
+    args = parser.parse_args()
+    gisdbase = args.gisdbase
+    if gisdbase is None:
+        # here we already rely on being in GRASS session
+        gisdbase = gcore.gisenv()['GISDBASE']
+    location = args.location
+    location_type = args.location_type
+
+    if not gisdbase:
+        sys.stderr.write("GISDBASE (grassdata directory)"
+                         " cannot be empty string\n" % gisdbase)
+        sys.exit(1)
+    if not os.path.exists(gisdbase):
+        sys.stderr.write("GISDBASE (grassdata directory) <%s>"
+                         " does not exist\n" % gisdbase)
+        sys.exit(1)
+    if not os.path.exists(os.path.join(gisdbase, location)):
+        sys.stderr.write("GRASS Location <{loc}>"
+                         " does not exist in GRASS Database <{db}>\n".format(
+                             loc=location, db=gisdbase))
+        sys.exit(1)
+    results_dir = args.output
+    silent_rmtree(results_dir)  # TODO: too brute force?
+
+    start_dir = '.'
+    abs_start_dir = os.path.abspath(start_dir)
+    invoker = GrassTestFilesInvoker(
+        start_dir=start_dir,
+        file_anonymizer=FileAnonymizer(paths_to_remove=[abs_start_dir]))
+    # TODO: remove also results dir from files
+    # as an enhancemnt
+    # we can just iterate over all locations available in database
+    # but the we don't know the right location type (category, label, shortcut)
+    invoker.run_in_location(gisdbase=gisdbase,
+                            location=location,
+                            location_type=location_type,
+                            results_dir=results_dir)
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/lib/python/gunittest/multireport.py b/lib/python/gunittest/multireport.py
new file mode 100644
index 0000000..84db356
--- /dev/null
+++ b/lib/python/gunittest/multireport.py
@@ -0,0 +1,504 @@
+# -*- coding: utf-8 -*-
+"""Testing framework module for multi report
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+
+import sys
+import os
+import argparse
+import itertools
+import datetime
+import operator
+from collections import defaultdict, namedtuple
+
+
+# TODO: we should be able to work without matplotlib
+import matplotlib
+matplotlib.use('Agg')
+import matplotlib.pyplot as plt
+from matplotlib.dates import date2num
+
+from grass.gunittest.checkers import text_to_keyvalue
+from grass.gunittest.utils import ensure_dir
+from grass.gunittest.reporters import success_to_html_percent
+
+
+class TestResultSummary(object):
+    def __init__(self):
+        self.timestamp = None
+        self.svn_revision = None
+        self.location = None
+        self.location_type = None
+
+        self.total = None
+        self.successes = None
+        self.failures = None
+        self.errors = None
+
+        self.skipped = []
+        self.expected_failures = []
+        self.unexpected_successes = []
+
+        self.files_total = None
+        self.files_successes = None
+        self.files_failures = None
+
+        self.tested_modules = []
+        self.tested_dirs = []
+        self.test_files_authors = []
+        self.tested_dirs = []
+        self.time = []
+        self.names = []
+
+        self.report = None
+
+
+def plot_percents(x, xticks, xlabels, successes, failures, filename, style):
+    fig = plt.figure()
+    graph = fig.add_subplot(111)
+
+    # Plot the data as a red line with round markers
+    graph.plot(x, successes, color=style.success_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, failures, color=style.fail_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+
+    fig.autofmt_xdate()
+    graph.set_xticks(xticks)
+    graph.set_xticklabels(xlabels)
+
+    percents = range(0, 110, 10)
+    graph.set_yticks(percents)
+    graph.set_yticklabels(['%d%%' % p for p in percents])
+
+    fig.savefig(filename)
+
+
+def plot_percent_successful(x, xticks, xlabels, successes, filename, style):
+    fig = plt.figure()
+    graph = fig.add_subplot(111)
+   
+    def median(values):
+        n = len(values)
+        if n == 1:
+            return values[0]
+        sorted_values = sorted(values)
+        if n % 2 == 0:
+            return (sorted_values[n / 2 - 1] + sorted_values[n / 2]) / 2
+        else:
+            return sorted_values[n / 2]
+    
+    # this is useful for debugging or some other stat
+    # cmeans = []
+    # cmedians = []
+    # csum = 0
+    # count = 0
+    # for i, s in enumerate(successes):
+    #     csum += s
+    #     count += 1
+    #     cmeans.append(csum/count)
+    #     cmedians.append(median(successes[:i + 1]))
+
+    smedian = median(successes)
+    smax = max(successes)
+    if successes[-1] < smedian:
+        color = 'r'
+    else:
+        color = 'g'
+    # another possibility is to color according to the gradient, ideally
+    # on the whole curve but that's much more complicated
+
+    graph.plot(x, successes, color=color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+
+    # rotates the xlabels
+    fig.autofmt_xdate()
+    graph.set_xticks(xticks)
+    graph.set_xticklabels(xlabels)
+
+    step = 5
+    ymin = int(min(successes) / step) * step
+    ymax =  int(smax / step) * step
+    percents = range(ymin, ymax + step + 1, step)
+    graph.set_yticks(percents)
+    graph.set_yticklabels(['%d%%' % p for p in percents])
+
+    fig.savefig(filename)
+
+
+def tests_successful_plot(x, xticks, xlabels, results, filename, style):
+    successes = []
+    for result in results:
+        if result.total:
+            successes.append(float(result.successes) / result.total * 100)
+        else:
+            # this is not expected to happen
+            # but we don't want any exceptions if it happens
+            successes.append(0)
+
+    plot_percent_successful(x=x, xticks=xticks, xlabels=xlabels,
+                            successes=successes,
+                            filename=filename, style=style)
+
+
+def tests_plot(x, xticks, xlabels, results, filename, style):
+
+    total = [result.total for result in results]
+    successes = [result.successes for result in results]
+    # TODO: document: counting errors and failures together
+    failures = [result.failures + result.errors for result in results]
+
+    fig = plt.figure()
+
+    graph = fig.add_subplot(111)
+
+    graph.plot(x, total, color=style.total_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, successes, color=style.success_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, failures, color=style.fail_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+
+    fig.autofmt_xdate()
+    graph.set_xticks(xticks)
+    graph.set_xticklabels(xlabels)
+
+    fig.savefig(filename)
+
+def tests_percent_plot(x, xticks, xlabels, results, filename, style):
+    successes = []
+    failures = []
+    for result in results:
+        if result.total:
+            successes.append(float(result.successes) / result.total * 100)
+            # TODO: again undocumented, counting errors and failures together
+            failures.append(float(result.failures + result.errors) / result.total * 100)
+        else:
+            # this is not expected to happen
+            # but we don't want any exceptions if it happens
+            successes.append(0)
+            failures.append(0)
+
+    plot_percents(x=x, xticks=xticks, xlabels=xlabels,
+                  successes=successes, failures=failures,
+                  filename=filename, style=style)
+
+
+def files_successful_plot(x, xticks, xlabels, results, filename, style):
+    successes = []
+    for result in results:
+        if result.total:
+            successes.append(float(result.files_successes) / result.files_total * 100)
+        else:
+            # this is not expected to happen
+            # but we don't want any exceptions if it happens
+            successes.append(0)
+
+    plot_percent_successful(x=x, xticks=xticks, xlabels=xlabels,
+                            successes=successes,
+                            filename=filename, style=style)
+
+
+def files_plot(x, xticks, xlabels, results, filename, style):
+    total = [result.files_total for result in results]
+    successes = [result.files_successes for result in results]
+    failures = [result.files_failures for result in results]
+
+    fig = plt.figure()
+
+    graph = fig.add_subplot(111)
+
+    graph.plot(x, total, color=style.total_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, successes, color=style.success_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, failures, color=style.fail_color,
+               linestyle=style.linestyle, linewidth=style.linewidth)
+
+    fig.autofmt_xdate()
+    graph.set_xticks(xticks)
+    graph.set_xticklabels(xlabels)
+
+    fig.savefig(filename)
+
+
+def files_percent_plot(x, xticks, xlabels, results, filename, style):
+    successes = []
+    failures = []
+    for result in results:
+        if result.files_total:
+            successes.append(float(result.files_successes) / result.files_total * 100)
+            failures.append(float(result.files_failures) / result.files_total * 100)
+        else:
+            # this is not expected to happen
+            # but we don't want any exceptions if it happens
+            successes.append(0)
+            failures.append(0)
+
+    plot_percents(x=x, xticks=xticks, xlabels=xlabels,
+                  successes=successes, failures=failures,
+                  filename=filename, style=style)
+
+
+def info_plot(x, xticks, xlabels, results, filename, style):
+
+    modules = [len(result.tested_modules) for result in results]
+    names = [len(result.names) for result in results]
+    authors = [len(result.test_files_authors) for result in results]
+    # we want just unique directories
+    dirs = [len(set(result.tested_dirs)) for result in results]
+
+    fig = plt.figure()
+
+    graph = fig.add_subplot(111)
+
+    graph.plot(x, names, color='b', label="Test files",
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, modules, color='g', label="Tested modules",
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    # dirs == testsuites
+    graph.plot(x, dirs, color='orange', label="Tested directories",
+               linestyle=style.linestyle, linewidth=style.linewidth)
+    graph.plot(x, authors, color='r', label="Test authors",
+               linestyle=style.linestyle, linewidth=style.linewidth)
+
+    graph.legend(loc='best', shadow=False)
+
+    fig.autofmt_xdate()
+    graph.set_xticks(xticks)
+    graph.set_xticklabels(xlabels)
+
+    fig.savefig(filename)
+
+
+# TODO: solve the directory inconsitencies, implemement None
+def main_page(results, filename, images, captions, title='Test reports',
+              directory=None):
+    filename = os.path.join(directory, filename)
+    with open(filename, 'w') as page:
+        page.write(
+            '<html><body>'
+            '<h1>{title}</h1>'
+            '<table>'
+            '<thead><tr>'
+            '<th>Date (timestamp)</th><th>SVN revision</th><th>Name</th>'
+            '<th>Successful files</th><th>Successful tests</th>'
+            '</tr></thead>'
+            '<tbody>'
+            .format(title=title)
+            )
+        for result in reversed(results):
+            # TODO: include name to summary file
+            # now using location or test report directory as name
+            if result.location != 'unknown':
+                name = result.location
+            else:
+                name = os.path.basename(result.report)
+                if not name:
+                    # Python basename returns '' for 'abc/'
+                    for d in reversed(os.path.split(result.report)):
+                        if d:
+                            name = d
+                            break
+            per_test = success_to_html_percent(
+                total=result.total, successes=result.successes)
+            per_file = success_to_html_percent(
+                total=result.files_total, successes=result.files_successes)
+            report_path = os.path.relpath(path=result.report, start=directory)
+            page.write(
+                '<tr>'
+                '<td><a href={report_path}/index.html>{result.timestamp}</a></td>'
+                '<td>{result.svn_revision}</td>'
+                '<td><a href={report_path}/index.html>{name}</a></td>'
+                '<td>{pfiles}</td><td>{ptests}</td>'
+                '</tr>'
+                .format(result=result, name=name, report_path=report_path,
+                        pfiles=per_file, ptests=per_test))
+        page.write('</tbody></table>')
+        for image, caption in itertools.izip(images, captions):
+            page.write(
+                '<h3>{caption}<h3>'
+                '<img src="{image}" alt="{caption}" title="{caption}">'
+                .format(image=image, caption=caption))
+        page.write('</body></html>')
+
+
+def main():
+
+    parser = argparse.ArgumentParser(
+        description='Create overall report from several individual test reports')
+    parser.add_argument('reports', metavar='report_directory',
+                        type=str, nargs='+',
+                        help='Directories with reports')
+    parser.add_argument('--output', dest='output', action='store',
+                        default='testreports_summary',
+                        help='Output directory')
+    parser.add_argument('--timestamps', dest='timestamps', action='store_true',
+                        help='Use file timestamp instead of date in test summary')
+
+    args = parser.parse_args()
+    output = args.output
+    reports = args.reports
+    use_timestamps = args.timestamps
+
+    ensure_dir(output)
+
+    all_results = []
+    results_in_locations = defaultdict(list)
+
+    for report in reports:
+        try:
+            summary_file = os.path.join(report, 'test_keyvalue_result.txt')
+            if not os.path.exists(summary_file):
+                sys.stderr.write('WARNING: Key-value summary not available in'
+                                 ' report <%s>, skipping.\n' % summary_file)
+                # skipping incomplete reports
+                # use only results list for further processing
+                continue
+            summary = text_to_keyvalue(open(summary_file).read(), sep='=')
+            if use_timestamps:
+                test_timestamp = datetime.datetime.fromtimestamp(os.path.getmtime(summary_file))
+            else:
+                test_timestamp = datetime.datetime.strptime(summary['timestamp'], "%Y-%m-%d %H:%M:%S")
+
+            result = TestResultSummary()
+            result.timestamp = test_timestamp
+            result.total = summary['total']
+            result.successes = summary['successes']
+            result.failures = summary['failures']
+            result.errors = summary['errors']
+
+            result.files_total = summary['files_total']
+            result.files_successes = summary['files_successes']
+            result.files_failures = summary['files_failures']
+
+            result.svn_revision = str(summary['svn_revision'])
+            result.tested_modules = summary['tested_modules']
+            result.names = summary['names']
+            result.test_files_authors = summary['test_files_authors']
+            result.tested_dirs = summary['tested_dirs']
+            result.report = report
+
+            # let's consider no location as valid state and use 'unknown'
+            result.location = summary.get('location', 'unknown')
+            result.location_type = summary.get('location_type', 'unknown')
+            # grouping according to location types
+            # this can cause that two actual locations tested at the same time
+            # will end up together, this is not ideal but testing with
+            # one location type and different actual locations is not standard
+            # and although it will not break anything it will not give a nice
+            # report
+            results_in_locations[result.location_type].append(result)
+
+            all_results.append(result)
+            del result
+        except KeyError as e:
+            print('File %s does not have right values (%s)' % (report, e.message)) 
+
+    locations_main_page = open(os.path.join(output, 'index.html'), 'w')
+    locations_main_page.write(
+        '<html><body>'
+        '<h1>Test reports grouped by location type</h1>'
+        '<table>'
+        '<thead><tr>'
+        '<th>Location</th>'
+        '<th>Successful files</th><th>Successful tests</th>'
+        '</tr></thead>'
+        '<tbody>'
+        )
+
+    PlotStyle = namedtuple('PlotStyle',
+                           ['linestyle', 'linewidth',
+                           'success_color', 'fail_color', 'total_color'])
+    plot_style = PlotStyle(linestyle='-', linewidth=4.0,
+                           success_color='g', fail_color='r', total_color='b')
+
+    for location_type, results in results_in_locations.items():
+        results = sorted(results, key=operator.attrgetter('timestamp'))
+        # TODO: document: location type must be a valid dir name
+        directory = os.path.join(output, location_type)
+        ensure_dir(directory)
+
+        if location_type == 'unknown':
+            title = 'Test reports'
+        else:
+            title = ('Test reports for <{type}> location type'
+                     .format(type=location_type))
+        
+        x = [date2num(result.timestamp) for result in results]
+        # the following would be an alternative but it does not work with
+        # labels and automatic axis limits even after removing another date fun
+        # x = [result.svn_revision for result in results]
+        xlabels = [result.timestamp.strftime("%Y-%m-%d") + ' (r' + result.svn_revision + ')' for result in results]
+        step = len(x) / 10
+        xticks = x[step::step]
+        xlabels = xlabels[step::step]
+        tests_successful_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                              filename=os.path.join(directory, 'tests_successful_plot.png'),
+                              style=plot_style)
+        files_successful_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                              filename=os.path.join(directory, 'files_successful_plot.png'),
+                              style=plot_style)
+        tests_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                   filename=os.path.join(directory, 'tests_plot.png'),
+                   style=plot_style)
+        tests_percent_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                           filename=os.path.join(directory, 'tests_percent_plot.png'),
+                           style=plot_style)
+        files_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                   filename=os.path.join(directory, 'files_plot.png'),
+                   style=plot_style)
+        files_percent_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                           filename=os.path.join(directory, 'files_percent_plot.png'),
+                           style=plot_style)
+        info_plot(x=x, xticks=xticks, xlabels=xlabels, results=results,
+                  filename=os.path.join(directory, 'info_plot.png'),
+                   style=plot_style)
+
+        main_page(results=results, filename='index.html',
+                  images=['tests_successful_plot.png',
+                          'files_successful_plot.png',
+                          'tests_plot.png',
+                          'files_plot.png',
+                          'tests_percent_plot.png',
+                          'files_percent_plot.png',
+                          'info_plot.png'],
+                  captions=['Success of individual tests in percents',
+                            'Success of test files in percents',
+                            'Successes, failures and number of individual tests',
+                            'Successes, failures and number of test files',
+                            'Successes and failures of individual tests in percent',
+                            'Successes and failures of test files in percents',
+                            'Additional information'],
+                  directory=directory,
+                  title=title)
+
+        files_successes = sum(result.files_successes for result in results)
+        files_total = sum(result.files_total for result in results)
+        successes = sum(result.successes for result in results)
+        total = sum(result.total for result in results)
+        per_test = success_to_html_percent(
+            total=total, successes=successes)
+        per_file = success_to_html_percent(
+            total=files_total, successes=files_successes)
+        locations_main_page.write(
+            '<tr>'
+            '<td><a href={location}/index.html>{location}</a></td>'
+            '<td>{pfiles}</td><td>{ptests}</td>'
+            '</tr>'
+            .format(location=location_type,
+                    pfiles=per_file, ptests=per_test))
+    locations_main_page.write('</tbody></table>')
+    locations_main_page.write('</body></html>')
+    locations_main_page.close()
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/lib/python/gunittest/multirunner.py b/lib/python/gunittest/multirunner.py
new file mode 100644
index 0000000..b8efc61
--- /dev/null
+++ b/lib/python/gunittest/multirunner.py
@@ -0,0 +1,125 @@
+# -*- coding: utf-8 -*-
+"""Testing framework module for running tests in Python unittest fashion
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+from __future__ import print_function
+
+import sys
+import os
+import argparse
+import itertools
+import subprocess
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description='Run tests with new')
+    parser.add_argument('--location', '-l', required=True, action='append',
+                        dest='locations', metavar='LOCATION',
+                        help='Directories with reports')
+    parser.add_argument('--location-type', '-t', action='append',
+                        dest='location_types',
+                    default=[], metavar='TYPE',
+                    help='Add repeated values to a list',
+                    )
+    parser.add_argument('--grassbin', required=True,
+                        help='Use file timestamp instead of date in test summary')
+    # TODO: rename since every src can be used?
+    parser.add_argument('--grasssrc', required=True,
+                        help='GRASS GIS source code (to take tests from)')
+    parser.add_argument('--grassdata', required=True,
+                        help='GRASS GIS data base (GISDBASE)')
+    parser.add_argument('--create-main-report',
+                        help='Create also main report for all tests',
+                        action="store_true", default=False, dest='main_report')
+
+    args = parser.parse_args()
+    gisdb = args.grassdata
+    locations = args.locations
+    locations_types = args.location_types
+
+    # TODO: if locations empty or just one we can suppose the same all the time
+    if len(locations) != len(locations_types):
+        print("ERROR: Number of locations and their tags must be the same", file=sys.stderr)
+        return 1
+    
+
+    main_report = args.main_report
+    grasssrc = args.grasssrc  # TODO: can be guessed from dist    
+    # TODO: create directory accoring to date and revision and create reports there
+
+    # some predefined variables, name of the GRASS launch script + location/mapset
+    #grass7bin = 'C:\Program Files (x86)\GRASS GIS 7.2.svn\grass72svn.bat'
+    grass7bin = args.grassbin  # TODO: can be used if pressent
+
+    ########### SOFTWARE
+    # query GRASS 7 itself for its GISBASE
+    # we assume that GRASS GIS' start script is available and in the PATH
+    # the shell=True is here because of MS Windows? (code taken from wiki)
+    startcmd = grass7bin + ' --config path'
+    p = subprocess.Popen(startcmd, shell=True, 
+                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    out, err = p.communicate()
+    if p.returncode != 0:
+        print("ERROR: Cannot find GRASS GIS 7 start script (%s):\n%s" % (startcmd, err), file=sys.stderr)
+        return 1
+    gisbase = out.strip('\n')
+
+    # set GISBASE environment variable
+    os.environ['GISBASE'] = gisbase
+    # define GRASS Python environment
+    grass_python_dir = os.path.join(gisbase, "etc", "python")
+    sys.path.append(grass_python_dir)
+
+    ########### DATA
+    # define GRASS DATABASE
+    
+    # Set GISDBASE environment variable
+    os.environ['GISDBASE'] = gisdb
+
+    # import GRASS Python package for initialization
+    import grass.script.setup as gsetup
+
+    # launch session
+    # we need some location and mapset here
+    # TODO: can init work without it or is there some demo location in dist?
+    location = locations[0].split(':')[0]
+    mapset = 'PERMANENT'
+    gsetup.init(gisbase, gisdb, location, mapset)
+
+    reports = []
+    for location, location_type in itertools.izip(locations, locations_types):
+        # here it is quite a good place to parallelize
+        # including also type to make it unique and preserve it for sure
+        report = 'report_for_' + location + '_' + location_type
+        absreport = os.path.abspath(report)
+        p = subprocess.Popen([sys.executable, '-tt',
+                              '-m', 'grass.gunittest.main',
+                              '--grassdata', gisdb, '--location', location,
+                              '--location-type', location_type,
+                              '--output', absreport],
+                              cwd=grasssrc)
+        returncode = p.wait()
+        reports.append(report)
+
+    if main_report:
+        # TODO: solve the path to source code (work now only for grass source code)
+        arguments = [sys.executable, grasssrc + '/lib/python/guittest/' + 'multireport.py', '--timestapms']
+        arguments.extend(reports)
+        p = subprocess.Popen(arguments)
+        returncode = p.wait()
+        if returncode != 0:
+            print("ERROR: Creation of main report failed.", file=sys.stderr)
+            return 1
+
+    return 0
+
+if __name__ == '__main__':
+    sys.exit(main())
diff --git a/lib/python/gunittest/reporters.py b/lib/python/gunittest/reporters.py
new file mode 100644
index 0000000..134fac3
--- /dev/null
+++ b/lib/python/gunittest/reporters.py
@@ -0,0 +1,1184 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework module for report generation
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+import os
+import datetime
+import xml.sax.saxutils as saxutils
+import xml.etree.ElementTree as et
+import subprocess
+import sys
+import collections
+import re
+
+from .utils import ensure_dir
+from .checkers import text_to_keyvalue
+
+
+if sys.version_info[0] == 2:
+    from StringIO import StringIO
+else:
+    from io import StringIO
+
+
+# TODO: change text_to_keyvalue to same sep as here
+# TODO: create keyvalue file and move it there together with things from checkers
+def keyvalue_to_text(keyvalue, sep='=', vsep='\n', isep=',',
+                     last_vertical=None):
+    if not last_vertical:
+        last_vertical = vsep == '\n'
+    items = []
+    for key, value in keyvalue.items():
+        # TODO: use isep for iterables other than strings
+        if (not isinstance(value, str)
+                and isinstance(value, collections.Iterable)):
+            # TODO: this does not work for list of non-strings
+            value = isep.join(value)
+        items.append('{key}{sep}{value}'.format(
+            key=key, sep=sep, value=value))
+    text = vsep.join(items)
+    if last_vertical:
+        text = text + vsep
+    return text
+
+
+def replace_in_file(file_path, pattern, repl):
+    """
+
+    :param repl: a repl paramter of ``re.sub()`` function
+    """
+    # using tmp file to store the replaced content
+    tmp_file_path = file_path + '.tmp'
+    old_file = open(file_path, 'r')
+    new_file = open(tmp_file_path, 'w')
+    for line in old_file:
+        new_file.write(re.sub(pattern=pattern, string=line, repl=repl))
+    new_file.close()
+    old_file.close()
+    # remove old file since it must not exist for rename/move
+    os.remove(file_path)
+    # replace old file by new file
+    # TODO: this can fail in some (random) cases on MS Windows
+    os.rename(tmp_file_path, file_path)
+
+
+class NoopFileAnonymizer(object):
+    def anonymize(self, filenames):
+        pass
+
+
+# TODO: why not remove GISDBASE by default?
+class FileAnonymizer(object):
+    def __init__(self, paths_to_remove, remove_gisbase=True,
+                 remove_gisdbase=False):
+        self._paths_to_remove = []
+        if remove_gisbase:
+            gisbase = os.environ['GISBASE']
+            self._paths_to_remove.append(gisbase)
+        if remove_gisdbase:
+            # import only when really needed to avoid problems with
+            # translations when environment is not set properly
+            import grass.script as gscript
+            gisdbase = gscript.gisenv()['GISDBASE']
+            self._paths_to_remove.append(gisdbase)
+        if paths_to_remove:
+            self._paths_to_remove.extend(paths_to_remove)
+
+    def anonymize(self, filenames):
+        # besides GISBASE and test recursion start directory (which is
+        # supposed to be source root directory or similar) we can also try
+        # to remove user home directory and GISDBASE
+        # we suppuse that we run in standard grass session
+        # TODO: provide more effective implementation
+        for path in self._paths_to_remove:
+            for filename in filenames:
+                path_end = r'[\\/]?'
+                replace_in_file(filename, path + path_end, '')
+
+
+def get_source_url(path, revision, line=None):
+    """
+
+    :param path: directory or file path relative to remote repository root
+    :param revision: SVN revision (should be a number)
+    :param line: line in the file (should be None for directories)
+    """
+    tracurl = 'http://trac.osgeo.org/grass/browser/'
+    if line:
+        return '{tracurl}{path}?rev={revision}#L{line}'.format(**locals())
+    else:
+        return '{tracurl}{path}?rev={revision}'.format(**locals())
+
+
+def html_escape(text):
+    """Escape ``'&'``, ``'<'``, and ``'>'`` in a string of data."""
+    return saxutils.escape(text)
+
+
+def html_unescape(text):
+    """Unescape ``'&'``, ``'<'``, and ``'>'`` in a string of data."""
+    return saxutils.unescape(text)
+
+
+def color_error_line(line):
+    if line.startswith('ERROR: '):
+        # TODO: use CSS class
+        # ignoring the issue with \n at the end, HTML don't mind
+        line = '<span style="color: red">' + line + "</span>"
+    if line.startswith('FAIL: '):
+        # TODO: use CSS class
+        # ignoring the issue with \n at the end, HTML don't mind
+        line = '<span style="color: red">' + line + "</span>"
+    if line.startswith('WARNING: '):
+        # TODO: use CSS class
+        # ignoring the issue with \n at the end, HTML don't mind
+        line = '<span style="color: blue">' + line + "</span>"
+    #if line.startswith('Traceback ('):
+    #    line = '<span style="color: red">' + line + "</span>"
+    return line
+
+
+def to_web_path(path):
+    """Replace OS dependent path separator with slash.
+
+    Path on MS Windows are not usable in links on web. For MS Windows,
+    this replaces backslash with (forward) slash.
+    """
+    if os.path.sep != '/':
+        return path.replace(os.path.sep, '/')
+    else:
+        return path
+
+
+def get_svn_revision():
+    """Get SVN revision number
+
+    :returns: SVN revision number as string or None if it is
+        not possible to get
+    """
+    # TODO: here should be starting directory
+    # but now we are using current as starting
+    p = subprocess.Popen(['svnversion', '.'],
+                         stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+    stdout, stderr = p.communicate()
+    rc = p.poll()
+    if not rc:
+        stdout = stdout.strip()
+        if stdout.endswith('M'):
+            stdout = stdout[:-1]
+        if ':' in stdout:
+            # the first one is the one of source code
+            stdout = stdout.split(':')[0]
+        return stdout
+    else:
+        return None
+
+
+def get_svn_info():
+    """Get important information from ``svn info``
+
+    :returns: SVN info as dictionary or None
+        if it is not possible to obtain it
+    """
+    try:
+        # TODO: introduce directory, not only current
+        p = subprocess.Popen(['svn', 'info', '.', '--xml'],
+                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        stdout, stderr = p.communicate()
+        rc = p.poll()
+        info = {}
+        if not rc:
+            root = et.fromstring(stdout)
+            # TODO: get also date if this make sense
+            # expecting only one <entry> element
+            entry = root.find('entry')
+            info['revision'] = entry.get('revision')
+            info['url'] = entry.find('url').text
+            relurl = entry.find('relative-url')
+            # element which is not found is None
+            # empty element would be bool(el) == False
+            if relurl is not None:
+                relurl = relurl.text
+                # relative path has ^ at the beginning in SVN version 1.8.8
+                if relurl.startswith('^'):
+                    relurl = relurl[1:]
+            else:
+                # SVN version 1.8.8 supports relative-url but older do not
+                # so, get relative part from absolute URL
+                const_url_part = 'https://svn.osgeo.org/grass/'
+                relurl = info['url'][len(const_url_part):]
+            info['relative-url'] = relurl
+            return info
+    # TODO: add this to svnversion function
+    except OSError as e:
+        import errno
+        # ignore No such file or directory
+        if e.errno != errno.ENOENT:
+            raise
+    return None
+
+
+def years_ago(date, years):
+    # dateutil relative delte would be better but this is more portable
+    return date - datetime.timedelta(weeks=years * 52)
+
+
+# TODO: these functions should be called only if we know that svn is installed
+# this will simplify the functions, caller must handle it anyway
+def get_svn_path_authors(path, from_date=None):
+    """
+
+    :returns: a set of authors
+    """
+    if from_date is None:
+        # this is the SVN default for local copies
+        revision_range = 'BASE:1'
+    else:
+        revision_range = 'BASE:{%s}' % from_date
+    try:
+        # TODO: allow also usage of --limit
+        p = subprocess.Popen(['svn', 'log', '--xml',
+                              '--revision', revision_range, path],
+                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
+        stdout, stderr = p.communicate()
+        rc = p.poll()
+        if not rc:
+            root = et.fromstring(stdout)
+            # TODO: get also date if this make sense
+            # expecting only one <entry> element
+            author_nodes = root.iterfind('*/author')
+            authors = [n.text for n in author_nodes]
+            return set(authors)
+    except OSError as e:
+        import errno
+        # ignore No such file or directory
+        if e.errno != errno.ENOENT:
+            raise
+    return None
+
+
+def get_html_test_authors_table(directory, tests_authors):
+    # SVN gives us authors of code together with authors of tests
+    # so test code authors list also contains authors of tests only
+    # TODO: don't do this for the top level directories?
+    tests_authors = set(tests_authors)
+    no_svn_text = ('<span style="font-size: 60%">'
+                   'Test file authors were not obtained.'
+                   '</span>')
+    if (not tests_authors
+            or (len(tests_authors) == 1 and list(tests_authors)[0] == '')):
+        return '<h3>Code and test authors</h3>' + no_svn_text
+    from_date = years_ago(datetime.date.today(), years=1)
+    tested_dir_authors = get_svn_path_authors(directory, from_date)
+    if tested_dir_authors is not None:
+        not_testing_authors = tested_dir_authors - tests_authors
+    else:
+        no_svn_text = ('<span style="font-size: 60%">'
+                       'Authors cannot be obtained using SVN.'
+                       '</span>')
+        not_testing_authors = tested_dir_authors = [no_svn_text]
+    if not not_testing_authors:
+        not_testing_authors = ['all recent authors contributed tests']
+
+    test_authors = (
+        '<h3>Code and test authors</h3>'
+        '<p style="font-size: 60%"><em>'
+        'Note that determination of authors is approximate and only'
+        ' recent code authors are considered.'
+        '</em></p>'
+        '<table><tbody>'
+        '<tr><td>Test authors:</td><td>{file_authors}</td></tr>'
+        '<tr><td>Authors of tested code:</td><td>{code_authors}</td></tr>'
+        '<tr><td>Authors owing tests:</td><td>{not_testing}</td></tr>'
+        '</tbody></table>'
+        .format(
+            file_authors=', '.join(sorted(tests_authors)),
+            code_authors=', '.join(sorted(tested_dir_authors)),
+            not_testing=', '.join(sorted(not_testing_authors))
+        ))
+    return test_authors
+
+
+class GrassTestFilesMultiReporter(object):
+
+    def __init__(self, reporters, forgiving=False):
+        self.reporters = reporters
+        self.forgiving = forgiving
+
+    def start(self, results_dir):
+        # TODO: no directory cleaning (self.clean_before)? now cleaned by caller
+        # TODO: perhaps only those whoe need it should do it (even multiple times)
+        # and there is also the delet problem
+        ensure_dir(os.path.abspath(results_dir))
+        for reporter in self.reporters:
+            try:
+                reporter.start(results_dir)
+            except AttributeError:
+                if self.forgiving:
+                    pass
+                else:
+                    raise
+
+    def finish(self):
+        for reporter in self.reporters:
+            try:
+                reporter.finish()
+            except AttributeError:
+                if self.forgiving:
+                    pass
+                else:
+                    raise
+
+    def start_file_test(self, module):
+        for reporter in self.reporters:
+            try:
+                reporter.start_file_test(module)
+            except AttributeError:
+                if self.forgiving:
+                    pass
+                else:
+                    raise
+
+    def end_file_test(self, **kwargs):
+        for reporter in self.reporters:
+            try:
+                reporter.end_file_test(**kwargs)
+            except AttributeError:
+                if self.forgiving:
+                    pass
+                else:
+                    raise
+
+
+class GrassTestFilesCountingReporter(object):
+    def __init__(self):
+        self.test_files = None
+        self.files_fail = None
+        self.files_pass = None
+
+        self.file_pass_per = None
+        self.file_fail_per = None
+
+        self.main_start_time = None
+        self.main_end_time = None
+        self.main_time = None
+
+        self.file_start_time = None
+        self.file_end_time = None
+        self.file_time = None
+        self._start_file_test_called = False
+
+    def start(self, results_dir):
+        self.test_files = 0
+        self.files_fail = 0
+        self.files_pass = 0
+
+        # this might be moved to some report start method
+        self.main_start_time = datetime.datetime.now()
+
+    def finish(self):
+        self.main_end_time = datetime.datetime.now()
+        self.main_time = self.main_end_time - self.main_start_time
+
+        assert self.test_files == self.files_fail + self.files_pass
+        if self.test_files:
+            self.file_pass_per = 100 * float(self.files_pass) / self.test_files
+            self.file_fail_per = 100 * float(self.files_fail) / self.test_files
+        else:
+            # if no tests were executed, probably something bad happend
+            # try to report at least something
+            self.file_pass_per = None
+            self.file_fail_per = None
+
+    def start_file_test(self, module):
+        self.file_start_time = datetime.datetime.now()
+        self._start_file_test_called = True
+        self.test_files += 1
+
+    def end_file_test(self, returncode, **kwargs):
+        assert self._start_file_test_called
+        self.file_end_time = datetime.datetime.now()
+        self.file_time = self.file_end_time - self.file_start_time
+        if returncode:
+            self.files_fail += 1
+        else:
+            self.files_pass += 1
+        self._start_file_test_called = False
+
+
+def percent_to_html(percent):
+    if percent is None:
+        return '<span style="color: {color}">unknown percentage</span>'
+    elif percent > 100 or percent < 0:
+        return "? {:.2f}% ?".format(percent)
+    elif percent < 40:
+        color = 'red'
+    elif percent < 70:
+        color = 'orange'
+    else:
+        color = 'green'
+    return '<span style="color: {color}">{percent:.0f}%</span>'.format(
+        percent=percent, color=color)
+
+
+def wrap_stdstream_to_html(infile, outfile, module, stream):
+    before = '<html><body><h1>%s</h1><pre>' % (module.name + ' ' + stream)
+    after = '</pre></body></html>'
+    html = open(outfile, 'w')
+    html.write(before)
+    with open(infile) as text:
+        for line in text:
+            html.write(color_error_line(html_escape(line)))
+    html.write(after)
+    html.close()
+
+
+def html_file_preview(filename):
+    before = '<pre>'
+    after = '</pre>'
+    if not os.path.isfile(filename):
+        return '<p style="color: red>File %s does not exist<p>' % filename
+    size = os.path.getsize(filename)
+    if not size:
+        return '<p style="color: red>File %s is empty<p>' % filename
+    max_size = 10000
+    html = StringIO()
+    html.write(before)
+    if size < max_size:
+        with open(filename) as text:
+            for line in text:
+                html.write(color_error_line(html_escape(line)))
+    elif size < 10 * max_size:
+        def tail(filename, n):
+            return collections.deque(open(filename), n)
+        html.write('... (lines omitted)\n')
+        for line in tail(filename, 50):
+            html.write(color_error_line(html_escape(line)))
+    else:
+        return '<p style="color: red>File %s is too large to show<p>' % filename
+    html.write(after)
+    return html.getvalue()
+
+
+def returncode_to_html_text(returncode):
+    if returncode:
+        return '<span style="color: red">FAILED</span>'
+    else:
+        # alternatives: SUCCEEDED, passed, OK
+        return '<span style="color: green">succeeded</span>'
+
+
+# not used
+def returncode_to_html_sentence(returncode):
+    if returncode:
+        return ('<span style="color: red">&#x274c;</span>'
+                ' Test failed (return code %d)' % (returncode))
+    else:
+        return ('<span style="color: green">&#x2713;</span>'
+                ' Test succeeded (return code %d)' % (returncode))
+
+
+def returncode_to_success_html_par(returncode):
+    if returncode:
+        return ('<p> <span style="color: red">&#x274c;</span>'
+                ' Test failed</p>')
+    else:
+        return ('<p> <span style="color: green">&#x2713;</span>'
+                ' Test succeeded</p>')
+
+
+def success_to_html_text(total, successes):
+    if successes < total:
+        return '<span style="color: red">FAILED</span>'
+    elif successes == total:
+        # alternatives: SUCCEEDED, passed, OK
+        return '<span style="color: green">succeeded</span>'
+    else:
+        return ('<span style="color: red; font-size: 60%">'
+                '? more successes than total ?</span>')
+
+
+UNKNOWN_NUMBER_HTML = '<span style="font-size: 60%">unknown</span>'
+
+
+def success_to_html_percent(total, successes):
+    if total:
+        pass_per = 100 * (float(successes) / total)
+        pass_per = percent_to_html(pass_per)
+    else:
+        pass_per = UNKNOWN_NUMBER_HTML
+    return pass_per
+
+
+class GrassTestFilesHtmlReporter(GrassTestFilesCountingReporter):
+
+    unknown_number = UNKNOWN_NUMBER_HTML
+
+    def __init__(self, file_anonymizer, main_page_name='index.html'):
+        super(GrassTestFilesHtmlReporter, self).__init__()
+        self.main_index = None
+        self._file_anonymizer = file_anonymizer
+        self._main_page_name = main_page_name
+
+    def start(self, results_dir):
+        super(GrassTestFilesHtmlReporter, self).start(results_dir)
+        # having all variables public although not really part of API
+        main_page_name = os.path.join(results_dir, self._main_page_name)
+        self.main_index = open(main_page_name, 'w')
+
+        # TODO: this can be moved to the counter class
+        self.failures = 0
+        self.errors = 0
+        self.skipped = 0
+        self.successes = 0
+        self.expected_failures = 0
+        self.unexpected_success = 0
+        self.total = 0
+
+        svn_info = get_svn_info()
+        if not svn_info:
+            svn_text = ('<span style="font-size: 60%">'
+                        'SVN revision cannot be obtained'
+                        '</span>')
+        else:
+            url = get_source_url(path=svn_info['relative-url'],
+                                 revision=svn_info['revision'])
+            svn_text = ('SVN revision'
+                        ' <a href="{url}">'
+                        '{rev}</a>'
+                        ).format(url=url, rev=svn_info['revision'])
+        self.main_index.write('<html><body>'
+                              '<h1>Test results</h1>'
+                              '{time:%Y-%m-%d %H:%M:%S}'
+                              ' ({svn})'
+                              '<table>'
+                              '<thead><tr>'
+                              '<th>Tested directory</th>'
+                              '<th>Test file</th>'
+                              '<th>Status</th>'
+                              '<th>Tests</th><th>Successful</td>'
+                              '<th>Failed</th><th>Percent successful</th>'
+                              '</tr></thead><tbody>'.format(
+                                  time=self.main_start_time,
+                                  svn=svn_text))
+
+    def finish(self):
+        super(GrassTestFilesHtmlReporter, self).finish()
+
+        pass_per = success_to_html_percent(total=self.total,
+                                           successes=self.successes)
+        tfoot = ('<tfoot>'
+                 '<tr>'
+                 '<td>Summary</td>'
+                 '<td>{nfiles} test files</td>'
+                 '<td>{nsper}</td>'
+                 '<td>{total}</td><td>{st}</td><td>{ft}</td><td>{pt}</td>'
+                 '</tr>'
+                 '</tfoot>'.format(
+                     nfiles=self.test_files,
+                     nsper=percent_to_html(self.file_pass_per),
+                     st=self.successes, ft=self.failures + self.errors,
+                     total=self.total, pt=pass_per
+                     ))
+
+        # this is the second place with this function
+        # TODO: provide one implementation
+        def format_percentage(percentage):
+            if percentage is not None:
+                return "{nsper:.0f}%".format(nsper=percentage)
+            else:
+                return "unknown percentage"
+
+        summary_sentence = ('\nExecuted {nfiles} test files in {time:}.'
+                            '\nFrom them'
+                            ' {nsfiles} files ({nsper}) were successful'
+                            ' and {nffiles} files ({nfper}) failed.\n'
+                            .format(
+                                nfiles=self.test_files,
+                                time=self.main_time,
+                                nsfiles=self.files_pass,
+                                nffiles=self.files_fail,
+                                nsper=format_percentage(self.file_pass_per),
+                                nfper=format_percentage(self.file_fail_per)))
+
+        self.main_index.write('<tbody>{tfoot}</table>'
+                              '<p>{summary}</p>'
+                              '</body></html>'
+                              .format(
+                                  tfoot=tfoot,
+                                  summary=summary_sentence))
+        self.main_index.close()
+
+    def start_file_test(self, module):
+        super(GrassTestFilesHtmlReporter, self).start_file_test(module)
+        self.main_index.flush()  # to get previous lines to the report
+
+    def end_file_test(self, module, cwd, returncode, stdout, stderr,
+                      test_summary):
+        super(GrassTestFilesHtmlReporter, self).end_file_test(
+            module=module, cwd=cwd, returncode=returncode,
+            stdout=stdout, stderr=stderr)
+        # considering others accoring to total is OK when we more or less
+        # know that input data make sense (total >= errors + failures)
+        total = test_summary.get('total', None)
+        failures = test_summary.get('failures', 0)
+        errors = test_summary.get('errors', 0)
+        # Python unittest TestResult class is reporting success for no
+        # errors or failures, so skipped, expected failures and unexpected
+        # success are ignored
+        # but successful tests are only total - the others
+        # TODO: add success counter to GrassTestResult base class
+        skipped = test_summary.get('skipped', 0)
+        expected_failures = test_summary.get('expected_failures', 0)
+        unexpected_successes = test_summary.get('unexpected_successes', 0)
+        successes = test_summary.get('successes', 0)
+
+        self.failures += failures
+        self.errors += errors
+        self.skipped += skipped
+        self.expected_failures += expected_failures
+        self.unexpected_success += unexpected_successes
+
+        # zero would be valid here
+        if total is not None:
+            # success are only the clear ones
+            # percentage is influenced by all
+            # but putting only failures to table
+            self.successes += successes
+            self.total += total
+            # this will handle zero
+            pass_per = success_to_html_percent(total=total,
+                                               successes=successes)
+        else:
+            total = successes = pass_per = self.unknown_number
+        bad_ones = failures + errors
+        self.main_index.write(
+            '<tr><td>{d}</td>'
+            '<td><a href="{d}/{m}/index.html">{m}</a></td>'
+            '<td>{status}</td>'
+            '<td>{ntests}</td><td>{stests}</td>'
+            '<td>{ftests}</td><td>{ptests}</td>'
+            '<tr>'.format(
+                d=to_web_path(module.tested_dir), m=module.name,
+                status=returncode_to_html_text(returncode),
+                stests=successes, ftests=bad_ones, ntests=total,
+                ptests=pass_per))
+        wrap_stdstream_to_html(infile=stdout,
+                               outfile=os.path.join(cwd, 'stdout.html'),
+                               module=module, stream='stdout')
+        wrap_stdstream_to_html(infile=stderr,
+                               outfile=os.path.join(cwd, 'stderr.html'),
+                               module=module, stream='stderr')
+
+        file_index_path = os.path.join(cwd, 'index.html')
+        file_index = open(file_index_path, 'w')
+        file_index.write(
+            '<!DOCTYPE html><html><head><meta charset="utf-8"></head><body>'
+            '<h1>{m.name}</h1>'
+            '<h2>{m.tested_dir} – {m.name}</h2>'
+            '{status}'
+            .format(
+                m=module,
+                status=returncode_to_success_html_par(returncode),
+                ))
+
+        # TODO: include optionally hyper link to test suite
+        # TODO: file_path is reconstucted in a naive way
+        # file_path should be stored in the module/test file object and just used here
+        summary_section = (
+            '<table><tbody>'
+            '<tr><td>Test</td><td>{m}</td></tr>'
+            '<tr><td>Testsuite</td><td>{d}</td></tr>'
+            '<tr><td>Test file</td><td>{file_path}</td></tr>'
+            '<tr><td>Status</td><td>{status}</td></tr>'
+            '<tr><td>Return code</td><td>{rc}</td></tr>'
+            '<tr><td>Number of tests</td><td>{ntests}</td></tr>'
+            '<tr><td>Successful tests</td><td>{stests}</td></tr>'
+            '<tr><td>Failed tests</td><td>{ftests}</td></tr>'
+            '<tr><td>Percent successful</td><td>{ptests}</td></tr>'
+            '<tr><td>Test duration</td><td>{dur}</td></tr>'
+            .format(
+                d=module.tested_dir, m=module.name,
+                file_path=os.path.join(module.tested_dir, 'testsuite', module.name + '.' + module.file_type),
+                status=returncode_to_html_text(returncode),
+                stests=successes, ftests=bad_ones, ntests=total,
+                ptests=pass_per, rc=returncode,
+                dur=self.file_time))
+        file_index.write(summary_section)
+
+        modules = test_summary.get('tested_modules', None)
+        if modules:
+            # TODO: replace by better handling of potential lists when parsing
+            # TODO: create link to module if running in grass or in addons
+            # alternatively a link to module test summary
+            if type(modules) is not list:
+                modules = [modules]
+            file_index.write(
+                '<tr><td>Tested modules</td><td>{}</td></tr>'.format(
+                    ', '.join(sorted(set(modules)))))
+        file_index.write('</tbody></table>')
+
+        # here we would have also links to coverage, profiling, ...
+        #'<li><a href="testcodecoverage/index.html">code coverage</a></li>'
+        files_section = (
+            '<h3>Supplementary files</h3>'
+            '<ul>'
+            '<li><a href="stdout.html">standard output (stdout)</a></li>'
+            '<li><a href="stderr.html">standard error output (stderr)</a></li>'
+            )
+        file_index.write(files_section)
+
+        supplementary_files = test_summary.get('supplementary_files', None)
+        if supplementary_files:
+            # this is something we might want to do once for all and not
+            # risk that it will be done twice or rely that somebody else
+            # will do it for use
+            # the solution is perhaps do the multi reporter more grass-specific
+            # and do all common things, so that other can rely on it and
+            # moreover something can be shared with other explicity
+            # using constructors as seems advantageous for counting
+            self._file_anonymizer.anonymize(supplementary_files)
+            for f in supplementary_files:
+                file_index.write('<li><a href="{f}">{f}</a></li>'.format(f=f))
+
+        file_index.write('</ul>')
+
+        if returncode:
+            file_index.write('<h3>Standard error output (stderr)</h3>')
+            file_index.write(html_file_preview(stderr))
+
+        file_index.write('</body></html>')
+        file_index.close()
+
+        if returncode:
+            pass
+            # TODO: here we don't have oportunity to write error file
+            # to stream (stdout/stderr)
+            # a stream can be added and if not none, we could write
+
+
+# TODO: document info: additional information to be stored type: dict
+# allows overwriting what was collected
+class GrassTestFilesKeyValueReporter(GrassTestFilesCountingReporter):
+
+    def __init__(self, info=None):
+        super(GrassTestFilesKeyValueReporter, self).__init__()
+        self.result_dir = None
+        self._info = info
+
+    def start(self, results_dir):
+        super(GrassTestFilesKeyValueReporter, self).start(results_dir)
+        # having all variables public although not really part of API
+        self.result_dir = results_dir
+
+        # TODO: this can be moved to the counter class
+        self.failures = 0
+        self.errors = 0
+        self.skipped = 0
+        self.successes = 0
+        self.expected_failures = 0
+        self.unexpected_success = 0
+        self.total = 0
+
+        # TODO: document: tested_dirs is a list and it should fit with names
+        self.names = []
+        self.tested_dirs = []
+        self.files_returncodes = []
+
+        # sets (no size specified)
+        self.modules = set()
+        self.test_files_authors = set()
+
+    def finish(self):
+        super(GrassTestFilesKeyValueReporter, self).finish()
+
+        # this shoul be moved to some additional meta passed in constructor
+        svn_info = get_svn_info()
+        if not svn_info:
+            svn_revision = ''
+        else:
+            svn_revision = svn_info['revision']
+
+        summary = {}
+        summary['files_total'] = self.test_files
+        summary['files_successes'] = self.files_pass
+        summary['files_failures'] = self.files_fail
+
+        summary['names'] = self.names
+        summary['tested_dirs'] = self.tested_dirs
+        # TODO: we don't have a general mechanism for storing any type in text
+        summary['files_returncodes'] = [str(item)
+                                        for item in self.files_returncodes]
+
+        # let's use seconds as a universal time delta format
+        # (there is no standard way how to store time delta as string)
+        summary['time'] = self.main_time.total_seconds()
+
+        status = 'failed' if self.files_fail else 'succeeded'
+        summary['status'] = status
+
+        summary['total'] = self.total
+        summary['successes'] = self.successes
+        summary['failures'] = self.failures
+        summary['errors'] = self.errors
+        summary['skipped'] = self.skipped
+        summary['expected_failures'] = self.expected_failures
+        summary['unexpected_successes'] = self.unexpected_success
+
+        summary['test_files_authors'] = self.test_files_authors
+        summary['tested_modules'] = self.modules
+        summary['svn_revision'] = svn_revision
+        # ignoring issues with time zones
+        summary['timestamp'] = self.main_start_time.strftime('%Y-%m-%d %H:%M:%S')
+        # TODO: add some general metadata here (passed in constructor)
+
+        # add additional information
+        for key, value in self._info.items():
+            summary[key] = value
+
+        summary_filename = os.path.join(self.result_dir,
+                                        'test_keyvalue_result.txt')
+        with open(summary_filename, 'w') as summary_file:
+            text = keyvalue_to_text(summary, sep='=', vsep='\n', isep=',')
+            summary_file.write(text)
+
+    def end_file_test(self, module, cwd, returncode, stdout, stderr,
+                      test_summary):
+        super(GrassTestFilesKeyValueReporter, self).end_file_test(
+            module=module, cwd=cwd, returncode=returncode,
+            stdout=stdout, stderr=stderr)
+        # TODO: considering others accoring to total, OK?
+        # here we are using 0 for total but HTML reporter is using None
+        total = test_summary.get('total', 0)
+        failures = test_summary.get('failures', 0)
+        errors = test_summary.get('errors', 0)
+        # Python unittest TestResult class is reporting success for no
+        # errors or failures, so skipped, expected failures and unexpected
+        # success are ignored
+        # but successful tests are only total - the others
+        skipped = test_summary.get('skipped', 0)
+        expected_failures = test_summary.get('expected_failures', 0)
+        unexpected_successes = test_summary.get('unexpected_successes', 0)
+        successes = test_summary.get('successes', 0)
+
+        # TODO: move this to counter class and perhaps use aggregation
+        # rather then inheritance
+        self.failures += failures
+        self.errors += errors
+        self.skipped += skipped
+        self.expected_failures += expected_failures
+        self.unexpected_success += unexpected_successes
+
+        # TODO: should we test for zero?
+        if total is not None:
+            # success are only the clear ones
+            # percentage is influenced by all
+            # but putting only failures to table
+            self.successes += successes
+            self.total += total
+
+        self.files_returncodes.append(returncode)
+
+        self.tested_dirs.append(module.tested_dir)
+        self.names.append(module.name)
+
+        modules = test_summary.get('tested_modules', None)
+        if modules:
+            # TODO: replace by better handling of potential lists when parsing
+            # TODO: create link to module if running in grass or in addons
+            # alternatively a link to module test summary
+            if type(modules) not in [list, set]:
+                modules = [modules]
+            self.modules.update(modules)
+
+        test_file_authors = test_summary['test_file_authors']
+        if type(test_file_authors) not in [list, set]:
+            test_file_authors = [test_file_authors]
+        self.test_files_authors.update(test_file_authors)
+
+
+class GrassTestFilesTextReporter(GrassTestFilesCountingReporter):
+
+    def __init__(self, stream):
+        super(GrassTestFilesTextReporter, self).__init__()
+        self._stream = stream
+
+    def start(self, results_dir):
+        super(GrassTestFilesTextReporter, self).start(results_dir)
+
+    def finish(self):
+        super(GrassTestFilesTextReporter, self).finish()
+
+        def format_percentage(percentage):
+            if percentage is not None:
+                return "{nsper:.0f}%".format(nsper=percentage)
+            else:
+                return "unknown percentage"
+
+        summary_sentence = ('\nExecuted {nfiles} test files in {time:}.'
+                            '\nFrom them'
+                            ' {nsfiles} files ({nsper}) were successful'
+                            ' and {nffiles} files ({nfper}) failed.\n'
+                            .format(
+                                nfiles=self.test_files,
+                                time=self.main_time,
+                                nsfiles=self.files_pass,
+                                nffiles=self.files_fail,
+                                nsper=format_percentage(self.file_pass_per),
+                                nfper=format_percentage(self.file_fail_per)))
+        self._stream.write(summary_sentence)
+
+    def start_file_test(self, module):
+        super(GrassTestFilesTextReporter, self).start_file_test(module)
+        self._stream.flush()  # to get previous lines to the report
+
+    def end_file_test(self, module, cwd, returncode, stdout, stderr,
+                      test_summary):
+        super(GrassTestFilesTextReporter, self).end_file_test(
+            module=module, cwd=cwd, returncode=returncode,
+            stdout=stdout, stderr=stderr)
+
+        if returncode:
+            self._stream.write(
+                '{m} from {d} failed'
+                .format(
+                    d=module.tested_dir,
+                    m=module.name))
+            num_failed = test_summary.get('failures', 0)
+            num_failed += test_summary.get('errors', 0)
+            if num_failed:
+                if num_failed > 1:
+                    text = ' ({f} tests failed)'
+                else:
+                    text = ' ({f} test failed)'
+                self._stream.write(text.format(f=num_failed))
+            self._stream.write('\n')
+            # TODO: here we lost the possibility to include also file name
+            # of the appropriate report
+
+
+# TODO: there is a quite a lot duplication between this class and html reporter
+# TODO: document: do not use it for two reports, it accumulates the results
+# TODO: add also keyvalue summary generation?
+# wouldn't this conflict with collecting data from report afterwards?
+class TestsuiteDirReporter(object):
+    def __init__(self, main_page_name, testsuite_page_name='index.html',
+                 top_level_testsuite_page_name=None):
+        self.main_page_name = main_page_name
+        self.testsuite_page_name = testsuite_page_name
+        self.top_level_testsuite_page_name = top_level_testsuite_page_name
+
+        # TODO: this might be even a object which could add and validate
+        self.failures = 0
+        self.errors = 0
+        self.skipped = 0
+        self.successes = 0
+        self.expected_failures = 0
+        self.unexpected_successes = 0
+        self.total = 0
+
+        self.testsuites = 0
+        self.testsuites_successes = 0
+        self.files = 0
+        self.files_successes = 0
+
+    def report_for_dir(self, root, directory, test_files):
+        # TODO: create object from this, so that it can be passed from
+        # one function to another
+        # TODO: put the inside of for loop to another fucntion
+        dir_failures = 0
+        dir_errors = 0
+        dir_skipped = 0
+        dir_successes = 0
+        dir_expected_failures = 0
+        dir_unexpected_success = 0
+        dir_total = 0
+        test_files_authors = []
+
+        file_total = 0
+        file_successes = 0
+
+        page_name = os.path.join(root, directory, self.testsuite_page_name)
+        if (self.top_level_testsuite_page_name and
+                os.path.abspath(os.path.join(root, directory))
+                == os.path.abspath(root)):
+            page_name = os.path.join(root, self.top_level_testsuite_page_name)
+        page = open(page_name, 'w')
+        # TODO: should we use forward slashes also for the HTML because
+        # it is simpler are more consistent with the rest on MS Windows?
+        head = (
+            '<html><body>'
+            '<h1>{name} testsuite results</h1>'
+            .format(name=directory))
+        tests_table_head = (
+            '<h3>Test files results</h3>'
+            '<table>'
+            '<thead><tr>'
+            '<th>Test file</th><th>Status</th>'
+            '<th>Tests</th><th>Successful</td>'
+            '<th>Failed</th><th>Percent successful</th>'
+            '</tr></thead><tbody>'
+            )
+        page.write(head)
+        page.write(tests_table_head)
+        for test_file_name in test_files:
+            # TODO: put keyvalue fine name to constant
+            summary_filename = os.path.join(root, directory, test_file_name,
+                                            'test_keyvalue_result.txt')
+            #if os.path.exists(summary_filename):
+            with open(summary_filename, 'r') as keyval_file:
+                summary = text_to_keyvalue(keyval_file.read(), sep='=')
+            #else:
+                # TODO: write else here
+            #    summary = None
+
+            if 'total' not in summary:
+                bad_ones = successes = UNKNOWN_NUMBER_HTML
+                total = None
+            else:
+                bad_ones = summary['failures'] + summary['errors']
+                successes = summary['successes']
+                total = summary['total']
+
+                self.failures += summary['failures']
+                self.errors += summary['errors']
+                self.skipped += summary['skipped']
+                self.successes += summary['successes']
+                self.expected_failures += summary['expected_failures']
+                self.unexpected_successes += summary['unexpected_successes']
+                self.total += summary['total']
+
+                dir_failures += summary['failures']
+                dir_errors += summary['failures']
+                dir_skipped += summary['skipped']
+                dir_successes += summary['successes']
+                dir_expected_failures += summary['expected_failures']
+                dir_unexpected_success += summary['unexpected_successes']
+                dir_total += summary['total']
+
+            # TODO: keyvalue method should have types for keys function
+            # perhaps just the current post processing function is enough
+            test_file_authors = summary['test_file_authors']
+            if type(test_file_authors) is not list:
+                test_file_authors = [test_file_authors]
+            test_files_authors.extend(test_file_authors)
+
+            file_total += 1
+            file_successes += 0 if summary['returncode'] else 1
+
+            pass_per = success_to_html_percent(total=total,
+                                               successes=successes)
+            row = (
+                '<tr>'
+                '<td><a href="{f}/index.html">{f}</a></td>'
+                '<td>{status}</td>'
+                '<td>{ntests}</td><td>{stests}</td>'
+                '<td>{ftests}</td><td>{ptests}</td>'
+                '<tr>'
+                .format(
+                    f=test_file_name,
+                    status=returncode_to_html_text(summary['returncode']),
+                    stests=successes, ftests=bad_ones, ntests=total,
+                    ptests=pass_per))
+            page.write(row)
+
+        self.testsuites += 1
+        self.testsuites_successes += 1 if file_successes == file_total else 0
+        self.files += file_total
+        self.files_successes += file_successes
+
+        dir_pass_per = success_to_html_percent(total=dir_total,
+                                               successes=dir_successes)
+        file_pass_per = success_to_html_percent(total=file_total,
+                                                successes=file_successes)
+        tests_table_foot = (
+            '</tbody><tfoot><tr>'
+            '<td>Summary</td>'
+            '<td>{status}</td>'
+            '<td>{ntests}</td><td>{stests}</td>'
+            '<td>{ftests}</td><td>{ptests}</td>'
+            '</tr></tfoot></table>'
+            .format(
+                status=file_pass_per,
+                stests=dir_successes, ftests=dir_failures + dir_errors,
+                ntests=dir_total, ptests=dir_pass_per))
+        page.write(tests_table_foot)
+        test_authors = get_html_test_authors_table(
+            directory=directory, tests_authors=test_files_authors)
+        page.write(test_authors)
+        page.write('</body></html>')
+        page.close()
+
+        status = success_to_html_text(total=file_total, successes=file_successes)
+        row = (
+            '<tr>'
+            '<td><a href="{d}/{page}">{d}</a></td><td>{status}</td>'
+            '<td>{nfiles}</td><td>{sfiles}</td><td>{pfiles}</td>'
+            '<td>{ntests}</td><td>{stests}</td>'
+            '<td>{ftests}</td><td>{ptests}</td>'
+            '<tr>'
+            .format(
+                d=to_web_path(directory), page=self.testsuite_page_name,
+                status=status,
+                nfiles=file_total, sfiles=file_successes, pfiles=file_pass_per,
+                stests=dir_successes, ftests=dir_failures + dir_errors,
+                ntests=dir_total, ptests=dir_pass_per))
+        return row
+
+    def report_for_dirs(self, root, directories):
+        # TODO: this will need chanages accoring to potential chnages in absolute/relative paths
+
+        page_name = os.path.join(root, self.main_page_name)
+        page = open(page_name, 'w')
+        head = (
+            '<html><body>'
+            '<h1>Testsuites results</h1>'
+            )
+        tests_table_head = (
+            '<table>'
+            '<thead><tr>'
+            '<th>Testsuite</th>'
+            '<th>Status</th>'
+            '<th>Test files</th><th>Successful</td>'
+            '<th>Percent successful</th>'
+            '<th>Tests</th><th>Successful</td>'
+            '<th>Failed</th><th>Percent successful</th>'
+            '</tr></thead><tbody>'
+            )
+        page.write(head)
+        page.write(tests_table_head)
+
+        for directory, test_files in directories.items():
+            row = self.report_for_dir(root=root, directory=directory,
+                                      test_files=test_files)
+            page.write(row)
+
+        pass_per = success_to_html_percent(total=self.total,
+                                           successes=self.successes)
+        file_pass_per = success_to_html_percent(total=self.files,
+                                                successes=self.files_successes)
+        testsuites_pass_per = success_to_html_percent(
+            total=self.testsuites, successes=self.testsuites_successes)
+        tests_table_foot = (
+            '<tfoot>'
+            '<tr>'
+            '<td>Summary</td><td>{status}</td>'
+            '<td>{nfiles}</td><td>{sfiles}</td><td>{pfiles}</td>'
+            '<td>{ntests}</td><td>{stests}</td>'
+            '<td>{ftests}</td><td>{ptests}</td>'
+            '</tr>'
+            '</tfoot>'
+            .format(
+                status=testsuites_pass_per, nfiles=self.files,
+                sfiles=self.files_successes, pfiles=file_pass_per,
+                stests=self.successes, ftests=self.failures + self.errors,
+                ntests=self.total, ptests=pass_per))
+        page.write(tests_table_foot)
+        page.write('</body></html>')
diff --git a/lib/python/gunittest/runner.py b/lib/python/gunittest/runner.py
new file mode 100644
index 0000000..29aeff0
--- /dev/null
+++ b/lib/python/gunittest/runner.py
@@ -0,0 +1,493 @@
+# -*- coding: utf-8 -*-
+"""Testing framework module for running tests in Python unittest fashion
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+
+File content taken from Python's  ``unittest.runner``, it will be used as
+a template. It is not expected that something will left.
+"""
+
+
+import sys
+import time
+
+import unittest
+
+__unittest = True
+
+
+class _WritelnDecorator(object):
+    """Used to decorate file-like objects with a handy 'writeln' method"""
+    def __init__(self,stream):
+        self.stream = stream
+
+    def __getattr__(self, attr):
+        if attr in ('stream', '__getstate__'):
+            raise AttributeError(attr)
+        return getattr(self.stream,attr)
+
+    def writeln(self, arg=None):
+        if arg:
+            self.write(arg)
+        self.write('\n') # text-mode streams translate to \r\n if needed
+
+
+class TestResult(unittest.TestResult):
+    # descriptions and verbosity unused
+    # included for compatibility with unittest's TestResult
+    # where are also unused, so perhaps we can remove them
+    # stream set to None and not included in interface, it would not make sense
+    def __init__(self, stream=None, descriptions=None, verbosity=None):
+        super(TestResult, self).__init__(stream=stream,
+                                         descriptions=descriptions,
+                                         verbosity=verbosity)
+        self.successes = []
+
+    def addSuccess(self, test):
+        super(TestResult, self).addSuccess(test)
+        self.successes.append(test)
+
+    # TODO: better would be to pass start at the beginning
+    # alternative is to leave counting time on class
+    # TODO: document: we expect all grass classes to have setTimes
+    # TODO: alternatively, be more forgiving for non-unittest methods
+    def setTimes(self, start_time, end_time, time_taken):
+        pass
+        # TODO: implement this
+
+
+class TextTestResult(TestResult):
+    """A test result class that can print formatted text results to a stream.
+
+    Used by TextTestRunner.
+    """
+    separator1 = '=' * 70
+    separator2 = '-' * 70
+
+    def __init__(self, stream, descriptions, verbosity):
+        super(TextTestResult, self).__init__(
+            stream=stream, descriptions=descriptions, verbosity=verbosity)
+        self.stream = _WritelnDecorator(stream)
+        self.showAll = verbosity > 1
+        self.dots = verbosity == 1
+        self.descriptions = descriptions
+
+        self.start_time = None
+        self.end_time = None
+        self.time_taken = None
+
+    def getDescription(self, test):
+        doc_first_line = test.shortDescription()
+        if self.descriptions and doc_first_line:
+            return '\n'.join((str(test), doc_first_line))
+        else:
+            return str(test)
+
+    def startTest(self, test):
+        super(TextTestResult, self).startTest(test)
+        if self.showAll:
+            self.stream.write(self.getDescription(test))
+            self.stream.write(" ... ")
+            self.stream.flush()
+
+    def addSuccess(self, test):
+        super(TextTestResult, self).addSuccess(test)
+        if self.showAll:
+            self.stream.writeln("ok")
+        elif self.dots:
+            self.stream.write('.')
+            self.stream.flush()
+
+    def addError(self, test, err):
+        super(TextTestResult, self).addError(test, err)
+        if self.showAll:
+            self.stream.writeln("ERROR")
+        elif self.dots:
+            self.stream.write('E')
+            self.stream.flush()
+
+    def addFailure(self, test, err):
+        super(TextTestResult, self).addFailure(test, err)
+        if self.showAll:
+            self.stream.writeln("FAIL")
+        elif self.dots:
+            self.stream.write('F')
+            self.stream.flush()
+
+    def addSkip(self, test, reason):
+        super(TextTestResult, self).addSkip(test, reason)
+        if self.showAll:
+            self.stream.writeln("skipped {0!r}".format(reason))
+        elif self.dots:
+            self.stream.write("s")
+            self.stream.flush()
+
+    def addExpectedFailure(self, test, err):
+        super(TextTestResult, self).addExpectedFailure(test, err)
+        if self.showAll:
+            self.stream.writeln("expected failure")
+        elif self.dots:
+            self.stream.write("x")
+            self.stream.flush()
+
+    def addUnexpectedSuccess(self, test):
+        super(TextTestResult, self).addUnexpectedSuccess(test)
+        if self.showAll:
+            self.stream.writeln("unexpected success")
+        elif self.dots:
+            self.stream.write("u")
+            self.stream.flush()
+
+    def printErrors(self):
+        if self.dots or self.showAll:
+            self.stream.writeln()
+        self.printErrorList('ERROR', self.errors)
+        self.printErrorList('FAIL', self.failures)
+
+    def printErrorList(self, flavour, errors):
+        for test, err in errors:
+            self.stream.writeln(self.separator1)
+            self.stream.writeln("%s: %s" % (flavour,
+                                            self.getDescription(test)))
+            self.stream.writeln(self.separator2)
+            self.stream.writeln("%s" % err)
+
+    def setTimes(self, start_time, end_time, time_taken):
+        self.start_time = start_time
+        self.end_time = end_time
+        self.time_taken = time_taken
+
+    def stopTestRun(self):
+        super(TextTestResult, self).stopTestRun()
+        self.printErrors()
+        self.stream.writeln(self.separator2)
+        run = self.testsRun
+        self.stream.write("Ran %d test%s" % (run, run != 1 and "s" or ""))
+        if self.time_taken:
+            self.stream.write(" in %.3fs" % (self.time_taken))
+        self.stream.writeln()
+
+        expectedFails = unexpectedSuccesses = skipped = 0
+        results = map(len, (self.expectedFailures,
+                            self.unexpectedSuccesses,
+                            self.skipped))
+        expectedFails, unexpectedSuccesses, skipped = results
+
+        infos = []
+        if not self.wasSuccessful():
+            self.stream.write("FAILED")
+            failed, errored = map(len, (self.failures, self.errors))
+            if failed:
+                infos.append("failures=%d" % failed)
+            if errored:
+                infos.append("errors=%d" % errored)
+        else:
+            self.stream.write("OK")
+        if skipped:
+            infos.append("skipped=%d" % skipped)
+        if expectedFails:
+            infos.append("expected_failures=%d" % expectedFails)
+        if unexpectedSuccesses:
+            infos.append("unexpected_successes=%d" % unexpectedSuccesses)
+        if infos:
+            self.stream.writeln(" (%s)" % (", ".join(infos),))
+        else:
+            self.stream.write("\n")
+
+
+class KeyValueTestResult(TestResult):
+    """A test result class that can print formatted text results to a stream.
+
+    Used by TextTestRunner.
+    """
+    separator1 = '=' * 70
+    separator2 = '-' * 70
+
+    def __init__(self, stream, test_type=None):
+        super(KeyValueTestResult, self).__init__(
+            stream=stream, descriptions=None, verbosity=None)
+        self._stream = _WritelnDecorator(stream)
+
+        self.start_time = None
+        self.end_time = None
+        self.time_taken = None
+
+        if test_type:
+            self.test_type = test_type
+        else:
+            self.test_type = 'not-specified'
+
+        self._grass_modules = []
+        self._supplementary_files = []
+
+    def setTimes(self, start_time, end_time, time_taken):
+        self.start_time = start_time
+        self.end_time = end_time
+        self.time_taken = time_taken
+
+    def stopTest(self, test):
+        super(KeyValueTestResult, self).stopTest(test)
+        if hasattr(test, 'grass_modules'):
+            self._grass_modules.extend(test.grass_modules)
+        if hasattr(test, 'supplementary_files'):
+            self._supplementary_files.extend(test.supplementary_files)
+
+    def stopTestRun(self):
+        super(KeyValueTestResult, self).stopTestRun()
+        infos = []
+
+        run = self.testsRun
+        # TODO: name should be included by test file caller
+        # from inspect import getsourcefile
+        # from os.path import abspath
+        # abspath(getsourcefile(lambda _: None))
+        # not writing name is a good option
+        # infos.append("name=%s" % 'unknown')
+
+        infos.append("time=%.3fs" % (self.time_taken))
+#            'date={rundate}\n'
+#            'date={runtime}\n'
+#            'date={start_datetime}\n'
+#            'date={end_datetime}\n'
+
+        failed, errored = map(len, (self.failures, self.errors))
+        succeeded = len(self.successes)
+        results = map(len, (self.expectedFailures,
+                            self.unexpectedSuccesses,
+                            self.skipped))
+        expectedFails, unexpectedSuccesses, skipped = results
+
+        status = 'succeeded' if self.wasSuccessful() else 'failed'
+        infos.append("status=%s" % status)
+
+        # if only errors occur, tests are not counted properly
+        # in unittest, so reconstruct their count here
+        # (using general equation, although now errors would be enough)
+        # alternative is to behave as failed file, i.e. do not
+        # write test details and just write status=failed
+        if not run:
+            run = errored + failed + succeeded
+        infos.append("total=%d" % (run))
+
+        infos.append("failures=%d" % failed)
+        infos.append("errors=%d" % errored)
+        infos.append("successes=%d" % succeeded)
+        infos.append("skipped=%d" % skipped)
+
+        # TODO: document this: if not supported by view,
+        # expected_failures should be counted as failures and vice versa
+        # or both add to skipped as unclear?
+        infos.append("expected_failures=%d" % expectedFails)
+        infos.append("unexpected_successes=%d" % unexpectedSuccesses)
+
+        # TODO: include each module just once? list good and bad modules?
+        infos.append("tested_modules=%s" % ','.join(self._grass_modules))
+        infos.append("supplementary_files=%s" % ','.join(self._supplementary_files))
+
+        # module, modules?, c, c++?, python
+        # TODO: include also type modules?
+        # TODO: include also C++ code?
+        # TODO: distinguish C and Python modules?
+        infos.append("test_type=%s" % (self.test_type))
+
+        self._stream.write('\n'.join(infos))
+        self._stream.write('\n')
+        self._stream.flush()
+
+
+class MultiTestResult(TestResult):
+    # descriptions and verbosity unused
+    # included for compatibility with unittest's TestResult
+    # where are also unused, so perhaps we can remove them
+    # stream set to None and not included in interface, it would not make sense
+    def __init__(self, results, forgiving=False,
+                 descriptions=None, verbosity=None):
+        super(MultiTestResult, self).__init__(
+            descriptions=descriptions, verbosity=verbosity, stream=None)
+        self._results = results
+        self._forgiving = forgiving
+
+    def startTest(self, test):
+        super(MultiTestResult, self).startTest(test)
+        for result in self._results:
+            try:
+                result.startTest(test)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def stopTest(self, test):
+        """Called when the given test has been run"""
+        super(MultiTestResult, self).stopTest(test)
+        for result in self._results:
+            try:
+                result.stopTest(test)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def addSuccess(self, test):
+        super(MultiTestResult, self).addSuccess(test)
+        for result in self._results:
+            try:
+                result.addSuccess(test)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def addError(self, test, err):
+        super(MultiTestResult, self).addError(test, err)
+        for result in self._results:
+            try:
+                result.addError(test, err)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def addFailure(self, test, err):
+        super(MultiTestResult, self).addFailure(test, err)
+        for result in self._results:
+            try:
+                result.addFailure(test, err)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def addSkip(self, test, reason):
+        super(MultiTestResult, self).addSkip(test, reason)
+        for result in self._results:
+            try:
+                result.addSkip(test, reason)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def addExpectedFailure(self, test, err):
+        super(MultiTestResult, self).addExpectedFailure(test, err)
+        for result in self._results:
+            try:
+                result.addExpectedFailure(test, err)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def addUnexpectedSuccess(self, test):
+        super(MultiTestResult, self).addUnexpectedSuccess(test)
+        for result in self._results:
+            try:
+                result.addUnexpectedSuccess(test)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def printErrors(self):
+        "Called by TestRunner after test run"
+        super(MultiTestResult, self).printErrors()
+        for result in self._results:
+            try:
+                result.printErrors()
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def startTestRun(self):
+        """Called once before any tests are executed.
+
+        See startTest for a method called before each test.
+        """
+        super(MultiTestResult, self).startTestRun()
+        for result in self._results:
+            try:
+                result.startTestRun()
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    def stopTestRun(self):
+        """Called once after all tests are executed.
+
+        See stopTest for a method called after each test.
+        """
+        super(MultiTestResult, self).stopTestRun()
+        for result in self._results:
+            try:
+                result.stopTestRun()
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+    # TODO: better would be to pass start at the beginning
+    # alternative is to leave counting time on class
+    # TODO: document: we expect all grass classes to have setTimes
+    # TODO: alternatively, be more forgiving for non-unittest methods
+    def setTimes(self, start_time, end_time, time_taken):
+        for result in self._results:
+            try:
+                result.setTimes(start_time, end_time, time_taken)
+            except AttributeError:
+                if self._forgiving:
+                    pass
+                else:
+                    raise
+
+
+class GrassTestRunner(object):
+    def __init__(self, stream=sys.stderr, descriptions=True, verbosity=1,
+                 failfast=False, buffer=False, result=None):
+        self.stream = _WritelnDecorator(stream)
+        self.descriptions = descriptions
+        self.verbosity = verbosity
+        self.failfast = failfast
+        self.buffer = buffer
+        self._result = result
+
+    def run(self, test):
+        "Run the given test case or test suite."
+        result = self._result
+        unittest.registerResult(result)
+        result.failfast = self.failfast
+        result.buffer = self.buffer
+        startTime = time.time()
+        startTestRun = getattr(result, 'startTestRun', None)
+        if startTestRun is not None:
+            startTestRun()
+        try:
+            test(result)
+        finally:
+            stopTime = time.time()
+            timeTaken = stopTime - startTime
+            setTimes = getattr(result, 'setTimes', None)
+            if setTimes is not None:
+                setTimes(startTime, stopTime, timeTaken)
+            stopTestRun = getattr(result, 'stopTestRun', None)
+            if stopTestRun is not None:
+                stopTestRun()
+
+        return result
diff --git a/lib/python/gunittest/testsuite/data/samplecode/fake_code.py b/lib/python/gunittest/testsuite/data/samplecode/fake_code.py
new file mode 100644
index 0000000..549f5e3
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/fake_code.py
@@ -0,0 +1 @@
+print("This is file (%s) should not run." % __file__)
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/fake_code.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/fake_code.py
new file mode 100644
index 0000000..549f5e3
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/fake_code.py
@@ -0,0 +1 @@
+print("This is file (%s) should not run." % __file__)
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/fake_code.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/fake_code.py
new file mode 100644
index 0000000..549f5e3
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/fake_code.py
@@ -0,0 +1 @@
+print("This is file (%s) should not run." % __file__)
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/testsuite/test_error.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/testsuite/test_error.py
new file mode 100644
index 0000000..929d6e9
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/testsuite/test_error.py
@@ -0,0 +1,58 @@
+# -*- coding: utf-8 -*-
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestError(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        raise RuntimeError('Error in test function')
+        self.assertTrue(True)
+
+
+class TestErrorSetUp(TestCase):
+    # pylint: disable=R0904
+
+    def setUp(self):
+        raise RuntimeError('Error in setUp')
+
+    def test_something(self):
+        self.assertTrue(True)
+
+
+class TestErrorTearDown(TestCase):
+    # pylint: disable=R0904
+
+    def tearDown(self):
+        raise RuntimeError('Error in tearDown')
+
+    def test_something(self):
+        self.assertTrue(True)
+
+
+class TestErrorClassSetUp(TestCase):
+    # pylint: disable=R0904
+
+    @classmethod
+    def setUpClass(cls):
+        raise RuntimeError('Error in setUpClass')
+
+    def test_something(self):
+        self.assertTrue(True)
+
+
+class TestErrorClassTearDown(TestCase):
+    # pylint: disable=R0904
+
+    @classmethod
+    def tearDownClass(cls):
+        raise RuntimeError('Error in tearDownClass')
+
+    def test_something(self):
+        self.assertTrue(True)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/testsuite/test_import_error.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/testsuite/test_import_error.py
new file mode 100644
index 0000000..07433b4
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_errors/testsuite/test_import_error.py
@@ -0,0 +1,22 @@
+# -*- coding: utf-8 -*-
+
+# comment to get rid of the wrong import
+# (if it is imported before all tests start and everything would fail)
+#import this_module_or_package_does_not_exists__testing_import_error
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestNeverCalled(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        self.assertFalse("This should not be called"
+                         " if we are testing failed import."
+                         " It is all right if this fails and the wrong"
+                         " import is commented.")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/fake_code.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/fake_code.py
new file mode 100644
index 0000000..549f5e3
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/fake_code.py
@@ -0,0 +1 @@
+print("This is file (%s) should not run." % __file__)
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_gfatalerror.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_gfatalerror.py
new file mode 100644
index 0000000..52ae01b
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_gfatalerror.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import grass.lib.gis as libgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestGFatalError(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        libgis.G_fatal_error("Testing G_fatal_error() function call")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_osexit_one.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_osexit_one.py
new file mode 100644
index 0000000..45dd186
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_osexit_one.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestOsExit(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        os._exit(1)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_osexit_zero.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_osexit_zero.py
new file mode 100644
index 0000000..7b7d79f
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_osexit_zero.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestOsExit(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        os._exit(0)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_segfaut.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_segfaut.py
new file mode 100644
index 0000000..00d91bb
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_segfaut.py
@@ -0,0 +1,23 @@
+# -*- coding: utf-8 -*-
+
+import ctypes
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestSegfault(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        """Crash the Python interpreter"""
+        i = ctypes.c_char('a')
+        j = ctypes.pointer(i)
+        c = 0
+        while True:
+                j[c] = 'a'
+                c += 1
+        j
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_sysexit_one.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_sysexit_one.py
new file mode 100644
index 0000000..80423d8
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_sysexit_one.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import sys
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestSysExit(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        sys.exit(1)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_sysexit_zero.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_sysexit_zero.py
new file mode 100644
index 0000000..ecccaf4
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_errors/subsubmodule_exiting/testsuite/test_sysexit_zero.py
@@ -0,0 +1,16 @@
+# -*- coding: utf-8 -*-
+
+import sys
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestSysExit(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        sys.exit(0)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_test_fail/fake_code.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_test_fail/fake_code.py
new file mode 100644
index 0000000..549f5e3
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_test_fail/fake_code.py
@@ -0,0 +1 @@
+print("This is file (%s) should not run." % __file__)
diff --git a/lib/python/gunittest/testsuite/data/samplecode/submodule_test_fail/testsuite/test_fail.py b/lib/python/gunittest/testsuite/data/samplecode/submodule_test_fail/testsuite/test_fail.py
new file mode 100644
index 0000000..adb603d
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/submodule_test_fail/testsuite/test_fail.py
@@ -0,0 +1,15 @@
+# -*- coding: utf-8 -*-
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestFail(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        self.assertTrue(False)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_good_and_bad.py b/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_good_and_bad.py
new file mode 100644
index 0000000..1cd4218
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_good_and_bad.py
@@ -0,0 +1,24 @@
+# -*- coding: utf-8 -*-
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestSuccessAndFailure(TestCase):
+    # pylint: disable=R0904
+
+    def test_something(self):
+        self.assertTrue(True, msg="This should not fail in test_good_and_bad")
+
+    def test_something_else(self):
+        self.assertTrue(True, msg="This should not fail in test_good_and_bad")
+
+    def test_something_failing(self):
+        self.assertTrue(False, msg="This failed in test_good_and_bad")
+
+    def test_something_erroring(self):
+        raise RuntimeError('Some error which was raised')
+        self.assertTrue(True, msg="This should not fail in test_good_and_bad")
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_python_unittest.py b/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_python_unittest.py
new file mode 100644
index 0000000..dc3c605
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_python_unittest.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+from __furute__ import print_function
+from unittest import TestCase, main
+
+
+class TestUnittestSuccessVerboseSetUp(TestCase):
+    # pylint: disable=R0904
+
+    def setUp(self):
+        print("print from setUp")
+
+    def tearDown(self):
+        print("print from tearDown")
+
+    def test_something(self):
+        self.assertTrue(True, msg="This should not fail")
+
+    def test_something_failing(self):
+        self.assertTrue(False, msg="This should fail")
+
+
+class TestUnittestSuccessVerboseClassSetUp(TestCase):
+    # pylint: disable=R0904
+
+    @classmethod
+    def setUpClass(cls):
+        print("print from setUpClass")
+
+    @classmethod
+    def tearDownClass(cls):
+        print("print from tearDownClass")
+
+    def test_something(self):
+        self.assertTrue(True, msg="This should not fail")
+
+    def test_something_failing(self):
+        self.assertTrue(False, msg="This should fail")
+
+if __name__ == '__main__':
+    main()
diff --git a/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_success.py b/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_success.py
new file mode 100644
index 0000000..42268f5
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/samplecode/testsuite/test_success.py
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+from __future__ import print_function
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestSuccessVerboseSetUp(TestCase):
+    # pylint: disable=R0904
+
+    def setUp(self):
+        print("print from setUp")
+
+    def tearDown(self):
+        print("print from tearDown")
+
+    def test_something(self):
+        self.assertTrue(True)
+
+
+class TestSuccessVerboseClassSetUp(TestCase):
+    # pylint: disable=R0904
+
+    @classmethod
+    def setUpClass(cls):
+        print("print from setUpClass")
+
+    @classmethod
+    def tearDownClass(cls):
+        print("print from tearDownClass")
+
+    def test_something(self):
+        self.assertTrue(True)
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt b/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt
new file mode 100644
index 0000000..ce7f070
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt
@@ -0,0 +1,67 @@
+ORGANIZATION: 
+DIGIT DATE:   
+DIGIT NAME:   John User
+MAP NAME:     
+MAP DATE:     Thu Jul 17 10:48:49 2014
+MAP SCALE:    1
+OTHER INFO:   
+ZONE:         0
+MAP THRESH:   0.000000
+VERTI:
+P  1 1
+ 158.22136448266869 271.58220193881516
+ 1     1         
+P  1 1
+ 165.11292819449133 150.54911424993
+ 1     2         
+P  1 1
+ 413.63994455209536 293.54906127024987
+ 1     3         
+P  1 1
+ 438.62186300745248 222.04908776008995
+ 1     4         
+L  6 1
+ 148.74546437891254 204.82017848053334
+ 275.80867031564253 304.31712956997274
+ 484.27847259827752 272.01292467080407
+ 473.51040429855459 199.22078296467743
+ 426.56162651176282 188.88343739694346
+ 392.96525341662743 270.72075647483734
+ 1     5         
+L  3 1
+ 167.2665418544359 85.07925898761491
+ 315.00443892663384 110.4919001749609
+ 350.75442568171377 97.13949548330453
+ 1     6         
+B  6 1
+ 424.52940565143189 166.64372618002309
+ 396.52865681615208 104.95457640229719
+ 450.78010768450673 83.95401477583732
+ 473.53071611317159 150.45579325962694
+ 433.27963966245687 169.70630808388182
+ 424.52940565143189 166.64372618002309
+ 1     10        
+C  1 1
+ 436.7797332668668 129.8927433337183
+ 1     11        
+B  5 1
+ 251.27477223313787 263.77132370240003
+ 211.02369578242312 160.95607407285686
+ 381.21574729685835 151.33081666072943
+ 366.77786117866719 271.20902261177127
+ 251.27477223313787 263.77132370240003
+ 1     12        
+B  9 1
+ 291.52584868385264 229.20789935885148
+ 278.83800936786645 191.5818931114442
+ 329.15185493125995 191.14438141089295
+ 354.09002186268106 234.45803976546645
+ 327.83931982960621 252.83353118861885
+ 319.96410921968373 211.70743133680159
+ 305.96373480204386 257.20864819413134
+ 287.15073167834021 250.20846098531138
+ 291.52584868385264 229.20789935885148
+ 1     13        
+C  1 1
+ 258.71247114250912 206.45729093018662
+ 1     14        
diff --git a/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt b/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt
new file mode 100644
index 0000000..fff59a9
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt
@@ -0,0 +1,67 @@
+ORGANIZATION: Big University
+DIGIT DATE:   May 2014
+DIGIT NAME:   Tracy User
+MAP NAME:     
+MAP DATE:     Thu Jul 17 10:48:49 2014
+MAP SCALE:    1
+OTHER INFO:   A very useful note about this map.
+ZONE:         0
+MAP THRESH:   0.000000
+VERTI:
+P  1 1
+ 158.22136448266869 271.58220193881516
+ 1     1         
+P  1 1
+ 165.11292819449133 150.54911424993
+ 1     2         
+P  1 1
+ 413.63994455209536 293.54906127024987
+ 1     3         
+P  1 1
+ 438.62186300745248 222.04908776008995
+ 1     4         
+L  6 1
+ 148.74546437891254 204.82017848053334
+ 275.80867031564253 304.31712956997274
+ 484.27847259827752 272.01292467080407
+ 473.51040429855459 199.22078296467743
+ 426.56162651176282 188.88343739694346
+ 392.96525341662743 270.72075647483734
+ 1     5         
+L  3 1
+ 167.2665418544359 85.07925898761491
+ 315.00443892663384 110.4919001749609
+ 350.75442568171377 97.13949548330453
+ 1     6         
+B  6 1
+ 424.52940565143189 166.64372618002309
+ 396.52865681615208 104.95457640229719
+ 450.78010768450673 83.95401477583732
+ 473.53071611317159 150.45579325962694
+ 433.27963966245687 169.70630808388182
+ 424.52940565143189 166.64372618002309
+ 1     10        
+C  1 1
+ 436.7797332668668 129.8927433337183
+ 1     11        
+B  5 1
+ 251.27477223313787 263.77132370240003
+ 211.02369578242312 160.95607407285686
+ 381.21574729685835 151.33081666072943
+ 366.77786117866719 271.20902261177127
+ 251.27477223313787 263.77132370240003
+ 1     12        
+B  9 1
+ 291.52584868385264 229.20789935885148
+ 278.83800936786645 191.5818931114442
+ 329.15185493125995 191.14438141089295
+ 354.09002186268106 234.45803976546645
+ 327.83931982960621 252.83353118861885
+ 319.96410921968373 211.70743133680159
+ 305.96373480204386 257.20864819413134
+ 287.15073167834021 250.20846098531138
+ 291.52584868385264 229.20789935885148
+ 1     13        
+C  1 1
+ 258.71247114250912 206.45729093018662
+ 1     14        
diff --git a/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt b/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt
new file mode 100644
index 0000000..06b7dd5
--- /dev/null
+++ b/lib/python/gunittest/testsuite/data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt
@@ -0,0 +1,67 @@
+ORGANIZATION: 
+DIGIT DATE:   
+DIGIT NAME:   John User
+MAP NAME:     
+MAP DATE:     Thu Jul 17 10:48:49 2014
+MAP SCALE:    1
+OTHER INFO:   
+ZONE:         0
+MAP THRESH:   0.000000
+VERTI:
+P  1 1
+ 158.22136448266869 271.582204882214
+ 1     1         
+P  1 1
+ 165.11292819449133 150.54911424993
+ 1     2         
+P  1 1
+ 413.63994455209536 293.54906127024987
+ 1     3         
+P  1 1
+ 438.62186300745248 222.04908776008995
+ 1     4         
+L  6 1
+ 148.74546437891254 204.82017848053334
+ 275.80867031564253 304.31712956997274
+ 484.27847259827752 272.01292467085862
+ 473.51040429855459 199.22078296467743
+ 426.56162651176282 188.88343739694346
+ 392.96525341662743 270.72075647483734
+ 1     5         
+L  3 1
+ 167.2665418544359 85.07925898761491
+ 315.00443892663384 110.4919001749609
+ 350.75442568171377 97.13949548330453
+ 1     6         
+B  6 1
+ 424.52940565143189 166.64372618002309
+ 396.52865681615208 104.95457640229719
+ 450.78010768450673 83.95401477583732
+ 473.53071611317159 150.45579325962694
+ 433.27963966245687 169.70630808388182
+ 424.52940565143189 166.64372618002309
+ 1     10        
+C  1 1
+ 436.7797332668668 129.8927433337183
+ 1     11        
+B  5 1
+ 251.27477223313787 263.77132370240003
+ 211.02369578242312 160.95607407285686
+ 381.21574729685835 151.33081666072943
+ 366.77786117866719 271.20902261177127
+ 251.27477223313787 263.77132370240003
+ 1     12        
+B  9 1
+ 291.52584868385264 229.20789935885148
+ 278.83800936786645 191.5818931114442
+ 329.15185493125995 191.14438141089295
+ 354.09002186268106 234.45803976546645
+ 327.83931915547823 252.83353118861885
+ 319.96410921968373 211.70743133680159
+ 305.96373480204386 257.20864819413134
+ 287.15073167834021 250.20846098531138
+ 291.52584868385264 229.20789935885148
+ 1     13        
+C  1 1
+ 258.71247114250912 206.45729095422489
+ 1     14        
diff --git a/lib/python/gunittest/testsuite/test_assertions.py b/lib/python/gunittest/testsuite/test_assertions.py
new file mode 100644
index 0000000..b56b73c
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_assertions.py
@@ -0,0 +1,357 @@
+# -*- coding: utf-8 -*-
+
+"""
+Tests assertion methods.
+"""
+
+
+import os
+
+import grass.script.core as gcore
+from grass.pygrass.modules import Module
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+
+
+class TestTextAssertions(TestCase):
+    # pylint: disable=R0904
+
+    std_newline = "aaa\nbbb\n"
+    platfrom_newline = "aaa{nl}bbb{nl}".format(nl=os.linesep)
+
+    def test_assertLooksLike(self):
+        self.assertLooksLike("Generated map is <elevation>",
+                             "Generated map is <...>")
+        self.assertRaises(self.failureException,
+                          self.assertLooksLike,
+                          "Generated map is elevation.",
+                          "Generated map is <...>")
+        self.assertLooksLike("Projection string: '+proj=longlat +datum=WGS84'",
+                             "Projection string: ...")
+
+    def test_assertLooksLike_multiline(self):
+        self.assertLooksLike("a=123\nb=456\nc=789",
+                             "a=...\nb=...\nc=...")
+
+    def test_assertLooksLike_multiline_platform_dependent(self):
+        self.assertLooksLike("a=123\nb=456\nc=789",
+                             "a=...{nl}b=...{nl}c=...".format(nl=os.linesep))
+
+    def test_assertLooksLike_numbers(self):
+        self.assertLooksLike("abc = 125521",
+                             "abc = 125...")
+        self.assertLooksLike("abc = 689.156",
+                             "abc = 689...")
+        self.assertLooksLike("abc = 689.159589",
+                             "abc = 689.15...")
+        # this should fail accoring to the implementation
+        # first three dots are considered as ellipses
+        self.assertRaises(self.failureException,
+                          self.assertLooksLike,
+                          "abc = 689.159589",
+                          "abc = 689....")
+
+    def do_all_combidnations(self, first, second, function):
+        function(first, first)
+        function(first, second)
+        function(second, first)
+        function(second, second)
+
+    def test_assertMultiLineEqual(self):
+        r"""Test different combinations of ``\n`` and os.linesep"""
+        self.do_all_combidnations(self.std_newline, self.platfrom_newline,
+                                  function=self.assertMultiLineEqual)
+
+    def test_assertMultiLineEqual_raises(self):
+        """Test mixed line endings"""
+        self.assertRaises(self.failureException,
+                          self.assertMultiLineEqual,
+                          "aaa\n\rbbb\r",
+                          "aaa\nbbb\n")
+
+    def test_assertEqual(self):
+        """Test for of newlines for strings (uses overwritten assertMultiLineEqual())"""
+        self.do_all_combidnations(self.std_newline, self.platfrom_newline,
+                                  function=self.assertEqual)
+
+    def test_assertEqual_raises(self):
+        """Test mixed line endings"""
+        self.assertRaises(self.failureException,
+                          self.assertEqual,
+                          "aaa\n\rbbb\r",
+                          "aaa\nbbb\n")
+
+
+R_UNIVAR_ELEVATION_SUBSET = """n=2025000
+null_cells=0
+min=55.5787925720215
+max=156.329864501953
+"""
+
+RANDOM_KEYVALUES = """abc=2025000
+aaa=55.5787925720215
+bbb=156.329864501953
+"""
+
+R_INFO_ELEVATION_SUBSET = """rows=1350
+cols=1500
+cells=2025000
+datatype=FCELL
+"""
+
+# r.info -gre map=elevation
+ELEVATION_MAPSET_DICT = {'mapset': 'PERMANENT'}
+
+# r.univar map=elevation
+ELEVATION_MINMAX = """min=55.5787925720215
+max=156.329864501953
+"""
+
+# values rounded manually to maximal expected perecision
+ELEVATION_MINMAX_DICT = {'min': 55.58, 'max': 156.33}
+
+
+class TestAssertModuleKeyValue(TestCase):
+    """Test usage of `assertModuleKeyValue` method."""
+    # pylint: disable=R0904
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        cls.runModule(SimpleModule('g.region', raster='elevation'))
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+
+    def test_pygrass_module(self):
+        """Test syntax with Module and required parameters as module"""
+        module = Module('r.info', map='elevation', flags='gr',
+                        run_=False, finish_=True)
+        self.assertModuleKeyValue(module,
+                                  reference=dict(min=55.58, max=156.33),
+                                  precision=0.01, sep='=')
+
+    def test_pygrass_simple_module(self):
+        """Test syntax with SimpleModule as module"""
+        module = SimpleModule('r.info', map='elevation', flags='gr')
+        self.assertModuleKeyValue(module,
+                                  reference=dict(min=55.58, max=156.33),
+                                  precision=0.01, sep='=')
+
+    def test_direct_parameters(self):
+        """Test syntax with module and its parameters as function parameters"""
+        self.assertModuleKeyValue('r.info', map='elevation', flags='gr',
+                                  reference=dict(min=55.58, max=156.33),
+                                  precision=0.01, sep='=')
+
+    def test_parameters_parameter(self):
+        """Test syntax with module parameters in one parameters dictionary"""
+        self.assertModuleKeyValue(module='r.info',
+                                  parameters=dict(map='elevation', flags='gr'),
+                                  reference=dict(min=55.58, max=156.33),
+                                  precision=0.01, sep='=')
+
+
+class TestRasterMapAssertions(TestCase):
+    # pylint: disable=R0904
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        # TODO: here we should actually not call self.runModule but call_module
+        cls.runModule(SimpleModule('g.region', raster='elevation'))
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+
+    def test_assertRasterFitsUnivar(self):
+        self.assertRasterFitsUnivar('elevation', R_UNIVAR_ELEVATION_SUBSET,
+                                    precision=0.01)
+        self.assertRaises(self.failureException,
+                          self.assertRasterFitsUnivar,
+                          'geology', R_UNIVAR_ELEVATION_SUBSET, precision=0.01)
+        self.assertRaises(ValueError,
+                          self.assertRasterFitsUnivar,
+                          'elevation', RANDOM_KEYVALUES)
+
+    def test_assertRasterFitsInfo(self):
+        self.assertRasterFitsInfo('elevation', R_INFO_ELEVATION_SUBSET)
+        self.assertRaises(self.failureException,
+                          self.assertRasterFitsInfo,
+                          'geology', R_INFO_ELEVATION_SUBSET)
+        self.assertRaises(ValueError,
+                          self.assertRasterFitsInfo,
+                          'elevation', RANDOM_KEYVALUES)
+
+    def test_common_values_info_univar(self):
+        self.assertRasterFitsUnivar('elevation',
+                                    ELEVATION_MINMAX, precision=0.01)
+        self.assertRasterFitsInfo('elevation',
+                                  ELEVATION_MINMAX, precision=0.01)
+
+    def test_dict_as_parameter(self):
+        """This also tests if we are using r.info -e flag and that precision is
+        not required for strings.
+        """
+        self.assertRasterFitsInfo('elevation', ELEVATION_MAPSET_DICT)
+
+    def test_assertRastersNoDifference(self):
+        """Test basic usage of assertRastersNoDifference"""
+        self.assertRastersNoDifference(actual='elevation',
+                                       reference='elevation',
+                                       precision=0,  # this might need to be increased
+                                       msg="The same maps should have no difference")
+        self.assertRaises(self.failureException,
+                          self.assertRastersNoDifference,
+                          actual='elevation',
+                          reference='geology',
+                          precision=1,
+                          msg="Different maps should have difference")
+
+    def test_assertRastersNoDifference_mean(self):
+        """Test usage of assertRastersNoDifference with mean"""
+        self.assertRastersNoDifference(actual='elevation',
+                                       reference='elevation',
+                                       precision=0,  # this might need to be increased
+                                       statistics=dict(mean=0),
+                                       msg="The difference of same maps should have small mean")
+        self.assertRaises(self.failureException,
+                          self.assertRastersNoDifference,
+                          actual='elevation',
+                          reference='geology',
+                          precision=1,
+                          statistics=dict(mean=0),
+                          msg="The difference of different maps should have huge mean")
+
+
+class TestMapExistsAssertions(TestCase):
+    # pylint: disable=R0904
+
+    raster_cell = 'TestMapExistsAssertions_raster_cell'
+    raster_dcell = 'TestMapExistsAssertions_raster_dcell'
+    raster3d = 'TestMapExistsAssertions_raster3D'
+    vector = 'TestMapExistsAssertions_vector'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        cls.runModule('g.region', n=10, e=10, s=0, w=0, t=10, b=0, res=1)
+        cls.runModule('r.mapcalc', expression=cls.raster_cell + ' = 1')
+        cls.runModule('r.mapcalc', expression=cls.raster_dcell + ' = 1.0')
+        cls.runModule('r3.mapcalc', expression=cls.raster3d + ' = 1.0')
+        cls.runModule('v.edit', map=cls.vector, tool='create')
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.runModule('g.remove', flags='f',
+                      type=['raster', 'raster3d', 'vector'],
+                      name=[cls.raster_cell, cls.raster_dcell,
+                            cls.raster3d, cls.vector])
+        cls.del_temp_region()
+
+    def test_rast_cell_exists(self):
+        self.assertRasterExists(self.raster_cell)
+
+    def test_rast_dcell_exists(self):
+        self.assertRasterExists(self.raster_dcell)
+
+    def test_rast_does_not_exist(self):
+        self.assertRaises(self.failureException,
+                          self.assertRasterExists,
+                          'does_not_exists')
+
+    def test_rast3d_exists(self):
+        self.assertRaster3dExists(self.raster3d)
+
+    def test_rast3d_does_not_exist(self):
+        self.assertRaises(self.failureException,
+                          self.assertRaster3dExists,
+                          'does_not_exists')
+
+    def test_vect_exists(self):
+        self.assertVectorExists(self.vector)
+
+    def test_vect_does_not_exist(self):
+        self.assertRaises(self.failureException,
+                          self.assertVectorExists,
+                          'does_not_exists')
+
+    def test_rast_does_not_exist_in_current_mapset(self):
+		# expecting that there is elevation in PERMANENT
+		# TODO: use skip decorator
+		# TODO: add the same tests but for vect and rast3d
+        self.assertRaises(self.failureException,
+                          self.assertRasterExists,
+                          'elevation',
+                          msg="Rasters from different mapsets should be ignored")
+
+
+class TestFileAssertions(TestCase):
+    # pylint: disable=R0904
+
+    @classmethod
+    def setUpClass(cls):
+        # we expect WIND to be always present
+        gisenv = gcore.gisenv()
+        cls.existing_file = os.path.join(gisenv['GISDBASE'],
+                                         gisenv['LOCATION_NAME'],
+                                         'PERMANENT', 'WIND')
+        cls.emtpy_file = cls.__name__ + '_this_is_an_empty_file'
+        open(cls.emtpy_file, 'w').close()
+        cls.file_with_md5 = cls.__name__ + '_this_is_a_file_with_known_md5'
+        file_content = 'Content of the file with known MD5.\n'
+        with open(cls.file_with_md5, 'w') as f:
+            f.write(file_content)
+        # MD5 sum created using:
+        # echo 'Content of the file with known MD5.' > some_file.txt
+        # md5sum some_file.txt
+        cls.file_md5 = '807bba4ffac4bb351bc3f27853009949'
+
+        cls.file_with_same_content = cls.__name__ + '_file_with_same_content'
+        with open(cls.file_with_same_content, 'w') as f:
+            f.write(file_content)
+
+        cls.file_with_different_content = cls.__name__ + '_file_with_different_content'
+        with open(cls.file_with_different_content, 'w') as f:
+            f.write(file_content + ' Something else here.')
+
+    @classmethod
+    def tearDownClass(cls):
+        os.remove(cls.emtpy_file)
+        os.remove(cls.file_with_md5)
+        os.remove(cls.file_with_same_content)
+        os.remove(cls.file_with_different_content)
+
+    def test_assertFileExists(self):
+        self.assertFileExists(filename=self.existing_file)
+        self.assertRaises(self.failureException,
+                          self.assertFileExists,
+                          filename='this_one_does_not_exists')
+
+    def test_assertFileExists_empty_file(self):
+        self.assertFileExists(filename=self.emtpy_file, skip_size_check=True)
+        self.assertRaises(self.failureException,
+                          self.assertFileExists,
+                          filename=self.emtpy_file)
+
+    def test_assertFileMd5(self):
+        self.assertFileMd5(filename=self.file_with_md5, md5=self.file_md5)
+        self.assertRaises(self.failureException,
+                          self.assertFileMd5,
+                          filename=self.file_with_md5, md5='wrongmd5')
+
+    def test_assertFilesEqualMd5(self):
+        self.assertFilesEqualMd5(filename=self.file_with_md5,
+                                 reference=self.file_with_same_content)
+        self.assertRaises(self.failureException,
+                          self.assertFilesEqualMd5,
+                          filename=self.file_with_md5,
+                          reference=self.file_with_different_content)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/test_assertions_rast3d.py b/lib/python/gunittest/testsuite/test_assertions_rast3d.py
new file mode 100644
index 0000000..088495d
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_assertions_rast3d.py
@@ -0,0 +1,127 @@
+# -*- coding: utf-8 -*-
+
+"""
+Tests assertion methods for 3D rasters.
+"""
+
+from grass.exceptions import CalledModuleError
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestRaster3dMapAssertions(TestCase):
+    # pylint: disable=R0904
+    constant_map = 'raster3d_assertions_constant'
+    rcd_increasing_map = 'raster3d_assertions_rcd_increasing'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        # TODO: here we should actually not call self.runModule but call_module
+        cls.runModule('g.region', n=200, s=100, e=400, w=200,
+                      t=500, b=450, res3=1)
+        cls.runModule('r3.mapcalc', expression='%s = 155' % cls.constant_map)
+        cls.runModule('r3.mapcalc',
+                      expression='%s = row() + col() + depth()' % cls.rcd_increasing_map)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+        # TODO: input as list does not work, why?
+        cls.runModule('g.remove', flags='f', type='raster_3d',
+                      name=','.join([cls.constant_map, cls.rcd_increasing_map]))
+
+    def test_assertRaster3dFitsUnivar(self):
+        reference = dict(n=1000000,
+                         null_cells=0,
+                         cells=1000000,
+                         min=155,
+                         max=155,
+                         range=0,
+                         mean=155,
+                         mean_of_abs=155,
+                         stddev=0,
+                         variance=0,
+                         coeff_var=0,
+                         sum=155000000)
+        self.assertRaster3dFitsUnivar(self.constant_map, reference=reference,
+                                      precision=0.000001)
+        self.assertRaises(self.failureException,
+                          self.assertRaster3dFitsUnivar,
+                          self.rcd_increasing_map,
+                          reference=reference, precision=1)
+        self.assertRaises(ValueError,
+                          self.assertRaster3dFitsUnivar,
+                          self.constant_map, reference=dict(a=4, b=5, c=6))
+        self.assertRaises(CalledModuleError,
+                          self.assertRaster3dFitsUnivar,
+                          'does_not_exists', reference=dict(a=4, b=5, c=6))
+
+    def test_assertRaster3dFitsInfo(self):
+        reference = dict(north=200,
+                         south=100,
+                         east=400,
+                         west=200,
+                         bottom=450,
+                         top=500,
+                         nsres=1,
+                         ewres=1,
+                         tbres=1,
+                         rows=100,
+                         cols=200,
+                         depths=50)
+        self.assertRaster3dFitsInfo(self.constant_map, reference=reference)
+
+        reference['north'] = 500
+        self.assertRaises(self.failureException,
+                          self.assertRaster3dFitsInfo,
+                          self.constant_map, reference=reference)
+        self.assertRaises(ValueError,
+                          self.assertRaster3dFitsInfo,
+                          self.constant_map, reference=dict(a=5))
+
+    def test_common_values_info_univar(self):
+        minmax = dict(min=3, max=350)
+        self.assertRaster3dFitsUnivar(self.rcd_increasing_map,
+                                      minmax, precision=0.01)
+        self.assertRaster3dFitsInfo(self.rcd_increasing_map,
+                                    minmax, precision=0.01)
+
+    def test_string_as_parameter(self):
+        self.assertRaster3dFitsInfo(self.constant_map,
+                                    reference="max=155", precision=1)
+        self.assertRaster3dFitsUnivar(self.rcd_increasing_map,
+                                      reference="n=1000000", precision=0)
+
+    def test_assertRasters3dNoDifference(self):
+        """Test basic usage of assertRastersNoDifference"""
+        # precision might need to be increased
+        self.assertRasters3dNoDifference(actual=self.rcd_increasing_map,
+                                       reference=self.rcd_increasing_map,
+                                       precision=0,
+                                       msg="The same maps should have no difference")
+        self.assertRaises(self.failureException,
+                          self.assertRasters3dNoDifference,
+                          actual=self.constant_map,
+                          reference=self.rcd_increasing_map,
+                          precision=1,
+                          msg="Different maps should have difference")
+
+    def test_assertRasters3dNoDifference_mean(self):
+        """Test usage of assertRastersNoDifference with mean"""
+        self.assertRasters3dNoDifference(actual=self.rcd_increasing_map,
+                                       reference=self.rcd_increasing_map,
+                                       precision=0,  # this might need to be increased
+                                       statistics=dict(mean=0),
+                                       msg="The difference of same maps should have small mean")
+        self.assertRaises(self.failureException,
+                          self.assertRasters3dNoDifference,
+                          actual=self.constant_map,
+                          reference=self.rcd_increasing_map,
+                          precision=1,
+                          statistics=dict(mean=0),
+                          msg="The difference of different maps should have huge mean")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/test_assertions_vect.py b/lib/python/gunittest/testsuite/test_assertions_vect.py
new file mode 100644
index 0000000..407e950
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_assertions_vect.py
@@ -0,0 +1,233 @@
+# -*- coding: utf-8 -*-
+
+"""
+Tests assertion methods for vectors.
+"""
+
+from grass.exceptions import CalledModuleError
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+V_UNIVAR_SCHOOLS_WIDTH_SUBSET = """n=144
+nmissing=0
+nnull=23
+min=0
+max=2294
+range=2294
+sum=109978
+mean=763.736
+mean_abs=763.736
+"""
+
+RANDOM_KEYVALUES = """abc=2025000
+aaa=55.5787925720215
+bbb=156.329864501953
+"""
+
+# v.info schools -t
+V_UNIVAR_SCHOOLS_TOPO = dict(
+    nodes=0,
+    points=167,
+    lines=0,
+    boundaries=0,
+    centroids=0,
+    areas=0,
+    islands=0,
+    primitives=167,
+    map3d=0,
+)
+
+# v.info schools -g and rounded
+V_UNIVAR_SCHOOLS_REGION = dict(
+    north=248160,
+    south=203560,
+    east=671715,
+    west=619215,
+    top=0,
+    bottom=0,
+)
+
+# v.info schools -g and reduced to minimum
+V_UNIVAR_SCHOOLS_EXTENDED = dict(
+    name='schools',
+    level=2,
+    num_dblinks=1,
+)
+
+
+class TestVectorInfoAssertions(TestCase):
+    """Test assertions of map meta and statistics"""
+    # pylint: disable=R0904
+    def test_assertVectorFitsUnivar(self):
+        self.assertVectorFitsUnivar(map='schools', column='CORECAPACI',
+                                    reference=V_UNIVAR_SCHOOLS_WIDTH_SUBSET,
+                                    precision=0.01)
+        self.assertRaises(self.failureException,
+                          self.assertVectorFitsUnivar,
+                          map='schools', column='GLEVEL',
+                          reference=V_UNIVAR_SCHOOLS_WIDTH_SUBSET,
+                          precision=0.01)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsUnivar,
+                          map='schools', column='CORECAPACI',
+                          reference=RANDOM_KEYVALUES)
+
+    def test_assertVectorFitsTopoInfo(self):
+        self.assertVectorFitsTopoInfo('schools', V_UNIVAR_SCHOOLS_TOPO)
+        self.assertRaises(self.failureException,
+                          self.assertVectorFitsTopoInfo,
+                          'hospitals',
+                          V_UNIVAR_SCHOOLS_TOPO)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsTopoInfo,
+                          'schools', RANDOM_KEYVALUES)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsTopoInfo,
+                          'schools', V_UNIVAR_SCHOOLS_REGION)
+
+    def test_assertVectorFitsRegionInfo(self):
+        self.assertVectorFitsRegionInfo('schools', V_UNIVAR_SCHOOLS_REGION, precision=1.0)
+        self.assertRaises(self.failureException,
+                          self.assertVectorFitsRegionInfo,
+                          'hospitals', V_UNIVAR_SCHOOLS_REGION, precision=1.0)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsRegionInfo,
+                          'schools', RANDOM_KEYVALUES, precision=1.0)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsRegionInfo,
+                          'schools', V_UNIVAR_SCHOOLS_TOPO, precision=1.0)
+
+    def test_assertVectorFitsExtendedInfo(self):
+        self.assertVectorFitsExtendedInfo('schools', V_UNIVAR_SCHOOLS_EXTENDED)
+        self.assertRaises(self.failureException,
+                          self.assertVectorFitsExtendedInfo,
+                          'hospitals',
+                          V_UNIVAR_SCHOOLS_EXTENDED)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsExtendedInfo,
+                          'schools',
+                          RANDOM_KEYVALUES)
+        self.assertRaises(ValueError,
+                          self.assertVectorFitsExtendedInfo,
+                          'schools',
+                          V_UNIVAR_SCHOOLS_TOPO)
+
+    def test_assertVectorInfoEqualsVectorInfo(self):
+        self.assertVectorInfoEqualsVectorInfo('schools', 'schools', precision=0.00000001)
+        self.assertRaises(self.failureException,
+                          self.assertVectorInfoEqualsVectorInfo,
+                          'hospitals', 'schools', precision=0.00000001)
+        self.assertRaises(CalledModuleError,
+                          self.assertVectorInfoEqualsVectorInfo,
+                          'schools', 'does_not_exist', precision=0.00000001)
+
+
+class TestVectorGeometryAssertions(TestCase):
+    """Test assertions of map geometry"""
+    # pylint: disable=R0904
+    maps_to_remove = []
+    simple_base_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14.txt'
+    simple_modified_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_modified.txt'
+    simple_diff_header_file = 'data/simple_vector_map_ascii_4p_2l_2c_3b_dp14_diff_header.txt'
+    precision = 0.00001
+    digits = 14
+
+    @classmethod
+    def tearDownClass(cls):
+        # TODO: this should be decided globaly by cleanup variable
+        # perhaps cls.gremove() wheoul be the right option
+        # when invoking separately, no need to delete maps since mapset
+        # is deleted
+        if cls.maps_to_remove:
+            cls.runModule('g.remove', flags='f', type='vector',
+                          name=','.join(cls.maps_to_remove))
+
+    def test_assertVectorEqualsVector_basic(self):
+        """Check completely different maps."""
+        self.assertVectorEqualsVector(actual='schools', reference='schools',
+                                      precision=0.01, digits=15)
+        self.assertRaises(self.failureException,
+                          self.assertVectorEqualsVector,
+                          actual='schools', reference='hospitals',
+                          precision=0.01, digits=7)
+        self.assertRaises(CalledModuleError,
+                          self.assertVectorEqualsVector,
+                          actual='does_not_exist', reference='hospitals',
+                          precision=0.01, digits=7)
+
+    def test_assertVectorEqualsVector_geometry_same_header(self):
+        """Check small slighlty different maps with same header in ASCII."""
+        amap = 'simple_vector_map_base_geom'
+        bmap = 'simple_vector_map_modified_geom'
+        self.runModule('v.in.ascii', format='standard',
+                       input=self.simple_base_file,
+                       output=amap)
+        self.maps_to_remove.append(amap)
+        self.runModule('v.in.ascii', format='standard',
+                       input=self.simple_modified_file,
+                       output=bmap)
+        self.maps_to_remove.append(bmap)
+        self.assertVectorEqualsVector(actual=amap, reference=amap,
+                                      precision=self.precision, digits=self.digits)
+        self.assertRaises(self.failureException,
+                          self.assertVectorEqualsVector,
+                          actual=amap, reference=bmap,
+                          precision=self.precision, digits=self.digits)
+
+    def test_assertVectorEqualsVector_geometry(self):
+        """Check small slighlty different maps with different headers in ASCII."""
+        amap = 'simple_vector_map_base'
+        bmap = 'simple_vector_map_different_header'
+        self.runModule('v.in.ascii', format='standard',
+                       input=self.simple_base_file,
+                       output=amap)
+        self.maps_to_remove.append(amap)
+        self.runModule('v.in.ascii', format='standard',
+                       input=self.simple_diff_header_file,
+                       output=bmap)
+        self.maps_to_remove.append(bmap)
+        self.assertVectorEqualsVector(actual=amap, reference=bmap,
+                                      precision=self.precision, digits=self.digits)
+
+    def test_assertVectorAsciiEqualsVectorAscii_diff_header(self):
+        """Test ASCII files with different header.
+
+        Prove that files were not deleted if not requested.
+        """
+        self.assertVectorAsciiEqualsVectorAscii(actual=self.simple_base_file,
+                                                reference=self.simple_diff_header_file)
+        self.assertFileExists(self.simple_base_file)
+        self.assertFileExists(self.simple_diff_header_file)
+
+    def test_assertVectorAsciiEqualsVectorAscii_diff_content(self):
+        """Test ASCII files with slighlty different content.
+
+        Prove that files were not deleted if not requested.
+        """
+        self.assertRaises(self.failureException,
+                          self.assertVectorAsciiEqualsVectorAscii,
+                          actual=self.simple_base_file,
+                          reference=self.simple_modified_file)
+        self.assertFileExists(self.simple_base_file)
+        self.assertFileExists(self.simple_modified_file)
+
+    def test_assertVectorEqualsAscii_by_import(self):
+        amap = 'simple_vector_map_imported_base'
+        self.runModule('v.in.ascii', format='standard',
+                       input=self.simple_base_file,
+                       output=amap)
+        self.maps_to_remove.append(amap)
+        self.assertVectorEqualsAscii(amap, self.simple_diff_header_file,
+                                     precision=self.precision, digits=self.digits)
+        self.assertRaises(self.failureException,
+                          self.assertVectorEqualsAscii,
+                          amap, self.simple_modified_file,
+                          precision=self.precision, digits=self.digits)
+        self.assertFileExists(self.simple_base_file)
+        self.assertFileExists(self.simple_modified_file)
+        self.assertFileExists(self.simple_diff_header_file)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/test_checkers.py b/lib/python/gunittest/testsuite/test_checkers.py
new file mode 100644
index 0000000..a58b9de
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_checkers.py
@@ -0,0 +1,398 @@
+# -*- coding: utf-8 -*-
+
+"""
+Tests checkers functions
+
+ at brief Test of GRASS Python testing framework checkers
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Vaclav Petras
+"""
+
+
+from grass.script.utils import parse_key_val, try_remove
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.checkers import (
+    values_equal, text_to_keyvalue,
+    keyvalue_equals, proj_info_equals, proj_units_equals,
+    file_md5, text_file_md5)
+
+
+
+class TestValuesEqual(TestCase):
+
+    def test_floats(self):
+        self.assertTrue(values_equal(5.0, 5.0))
+        self.assertTrue(values_equal(5.1, 5.19, precision=0.1))
+        self.assertTrue(values_equal(5.00005, 5.000059, precision=0.00001))
+        self.assertFalse(values_equal(5.125, 5.280))
+        self.assertFalse(values_equal(5.00005, 5.00006, precision=0.00001))
+        self.assertFalse(values_equal(2.5, 15.5, precision=5))
+
+    def test_ints(self):
+        self.assertTrue(values_equal(5, 5, precision=0.01))
+        self.assertFalse(values_equal(5, 6, precision=0.01))
+        self.assertTrue(values_equal(5, 8, precision=3))
+        self.assertFalse(values_equal(3600, 3623, precision=20))
+        self.assertTrue(values_equal(5, 5))
+        self.assertFalse(values_equal(5, 6))
+
+    def test_floats_and_ints(self):
+        self.assertTrue(values_equal(5.1, 5, precision=0.2))
+        self.assertFalse(values_equal(5.1, 5, precision=0.01))
+
+    def test_strings(self):
+        self.assertTrue(values_equal('hello', 'hello'))
+        self.assertFalse(values_equal('Hello', 'hello'))
+
+    def test_lists(self):
+        self.assertTrue(values_equal([1, 2, 3], [1, 2, 3]))
+        self.assertTrue(values_equal([1.1, 2.0, 3.9],
+                                     [1.1, 1.95, 4.0],
+                                     precision=0.2))
+        self.assertFalse(values_equal([1, 2, 3, 4, 5],
+                                      [1, 22, 3, 4, 5],
+                                      precision=1))
+
+    def test_mixed_lists(self):
+        self.assertTrue(values_equal([1, 'abc', 8], [1, 'abc', 8.2],
+                                     precision=0.5))
+
+    def test_recursive_lists(self):
+        self.assertTrue(values_equal([1, 'abc', [5, 9.6, 9.0]],
+                                     [1, 'abc', [4.9, 9.2, 9.3]],
+                                     precision=0.5))
+
+KEYVAL_TEXT = '''s: Hello
+str: Hello world!
+f: 1.0
+l: 1,2,3,4,5
+mixed: hello,8,-25,world!,4-1,5:2,0.1,-9.6
+'''
+
+# file location/PERMANENT/PROJ_INFO
+PROJ_INFO_TEXT_1 = """name: Lambert Conformal Conic
+proj: lcc
+datum: nad83
+a: 6378137.0
+es: 0.006694380022900787
+lat_1: 36.16666666666666
+lat_2: 34.33333333333334
+lat_0: 33.75
+lon_0: -79
+x_0: 609601.22
+y_0: 0
+no_defs: defined
+"""
+
+# file location/PERMANENT/PROJ_UNITS
+PROJ_UNITS_TEXT_1 = """unit: Meter
+units: Meters
+meters: 1
+"""
+
+PROJ_INFO_TEXT_2 = """name: Lambert Conformal Conic
+proj: lcc
+datum: nad83
+a: 6378137.0000000002
+es: 0.006694380022900787
+lat_1:  36.166666667
+lat_2: 34.333333333
+lat_0:   33.75
+lon_0:   -79
+x_0: 609601.22
+y_0: 0
+no_defs: defined
+"""
+
+PROJ_UNITS_TEXT_2 = """unit: Metre
+units: Metres
+meters: 1
+"""
+# what about keys and lower/upper case letters
+
+
+class TestTextToKeyValue(TestCase):
+    def test_conversion(self):
+        keyvals = text_to_keyvalue(KEYVAL_TEXT, sep=':', val_sep=',')
+        expected = {'s': 'Hello',
+                    'str': 'Hello world!',
+                    'f': 1.0,
+                    'l': [1, 2, 3, 4, 5],
+                    'mixed': ['hello', 8, -25, 'world!',
+                              '4-1', '5:2', 0.1, -9.6]}
+        self.assertDictEqual(expected, keyvals)
+
+    def test_single_values(self):
+        keyvals = text_to_keyvalue("a: 1.5", sep=':')
+        self.assertDictEqual({'a': 1.5}, keyvals)
+        keyvals = text_to_keyvalue("abc=1", sep='=')
+        self.assertDictEqual({'abc': 1}, keyvals)
+        keyvals = text_to_keyvalue("abc=hello", sep='=')
+        self.assertDictEqual({'abc': 'hello'}, keyvals)
+
+    def test_strip(self):
+        keyvals = text_to_keyvalue("a:   2.8  ", sep=':')
+        self.assertDictEqual({'a': 2.8}, keyvals)
+        keyvals = text_to_keyvalue("a:  2  ; 2.8 ; ab cd ",
+                                   sep=':', val_sep=';')
+        self.assertDictEqual({'a': [2, 2.8, 'ab cd']}, keyvals)
+        keyvals = text_to_keyvalue("a  :  2  ; 2.8", sep=':', val_sep=';')
+        self.assertDictEqual({'a': [2, 2.8]}, keyvals)
+        keyvals = text_to_keyvalue("a  : \t 2  ;\t2.8", sep=':', val_sep=';')
+        self.assertDictEqual({'a': [2, 2.8]}, keyvals)
+
+    def test_empty_list_item(self):
+        keyvals = text_to_keyvalue("a: 1, ,5,,", sep=':', val_sep=',')
+        self.assertDictEqual({'a': [1, '', 5, '', '']}, keyvals)
+
+    def test_empty_value(self):
+        keyvals = text_to_keyvalue("a: ", sep=':')
+        self.assertDictEqual({'a': ''}, keyvals)
+        keyvals = text_to_keyvalue("a:", sep=':')
+        self.assertDictEqual({'a': ''}, keyvals)
+
+    def test_wrong_lines(self):
+        # we consider no key-value separator as invalid line
+        # and we silently ignore these
+        keyvals = text_to_keyvalue("a", sep=':',
+                                   skip_invalid=True, skip_empty=False)
+        self.assertDictEqual({}, keyvals)
+
+        self.assertRaises(ValueError, text_to_keyvalue, "a", sep=':',
+                          skip_invalid=False, skip_empty=False)
+
+        # text_to_keyvalue considers the empty string as valid input
+        keyvals = text_to_keyvalue("", sep=':',
+                                   skip_invalid=False, skip_empty=False)
+        self.assertDictEqual({}, keyvals)
+
+        self.assertRaises(ValueError, text_to_keyvalue, "\n", sep=':',
+                          skip_invalid=True, skip_empty=False)
+
+        keyvals = text_to_keyvalue("a\n\n", sep=':',
+                                   skip_invalid=True, skip_empty=True)
+        self.assertDictEqual({}, keyvals)
+
+    def test_separators(self):
+        keyvals = text_to_keyvalue("a=a;b;c", sep='=', val_sep=';')
+        self.assertDictEqual({'a': ['a', 'b', 'c']}, keyvals)
+        keyvals = text_to_keyvalue("a 1;2;3", sep=' ', val_sep=';')
+        self.assertDictEqual({'a': [1, 2, 3]}, keyvals)
+        # spaces as key-value separator and values separators
+        # this should work (e.g. because of : in DMS),
+        # although it does not support stripping (we don't merge separators)
+        keyvals = text_to_keyvalue("a 1 2 3", sep=' ', val_sep=' ')
+        self.assertDictEqual({'a': [1, 2, 3]}, keyvals)
+        
+    #def test_projection_files(self):
+        
+# obtained by r.univar elevation -g
+# floats removed
+R_UNIVAR_KEYVAL = """n=2025000
+null_cells=57995100
+cells=60020100
+min=55.5787925720215
+max=156.329864501953
+range=100.751071929932
+mean=110.375440275606
+mean_of_abs=110.375440275606
+stddev=20.3153233205981
+variance=412.712361620436
+coeff_var=18.4056555243368
+sum=223510266.558102
+"""
+
+# obtained by r.univar elevation -g
+# floats removed
+R_UNIVAR_KEYVAL_INT = """n=2025000
+null_cells=57995100
+cells=60020100
+"""
+
+R_UNIVAR_KEYVAL_INT_DICT = {'n': 2025000,
+                            'null_cells': 57995100, 'cells': 60020100}
+
+
+class TestComapreProjections(TestCase):
+
+    def test_compare_proj_info(self):
+        self.assertTrue(proj_info_equals(PROJ_INFO_TEXT_1, PROJ_INFO_TEXT_2))
+        self.assertTrue(proj_units_equals(PROJ_UNITS_TEXT_1, PROJ_UNITS_TEXT_2))
+
+
+class TestParseKeyvalue(TestCase):
+
+    def test_shell_script_style(self):
+
+        self.assertDictEqual(parse_key_val(R_UNIVAR_KEYVAL_INT, val_type=int),
+                             R_UNIVAR_KEYVAL_INT_DICT)
+
+
+R_UNIVAR_ELEVATION = """n=2025000
+null_cells=57995100
+cells=60020100
+min=55.5787925720215
+max=156.329864501953
+range=100.751071929932
+mean=110.375440275606
+mean_of_abs=110.375440275606
+stddev=20.3153233205981
+variance=412.712361620436
+coeff_var=18.4056555243368
+sum=223510266.558102
+first_quartile=94.79
+median=108.88
+third_quartile=126.792
+percentile_90=138.66
+"""
+
+R_UNIVAR_ELEVATION_ROUNDED = """n=2025000
+null_cells=57995100
+cells=60020100
+min=55.5788
+max=156.33
+range=100.751
+mean=110.375
+mean_of_abs=110.375
+stddev=20.3153
+variance=412.712
+coeff_var=18.4057
+sum=223510266.558
+first_quartile=94.79
+median=108.88
+third_quartile=126.792
+percentile_90=138.66
+"""
+
+R_UNIVAR_ELEVATION_SUBSET = """n=2025000
+null_cells=57995100
+cells=60020100
+min=55.5787925720215
+max=156.329864501953
+"""
+
+
+class TestRasterMapComparisons(TestCase):
+
+    def test_compare_univars(self):
+        self.assertTrue(keyvalue_equals(text_to_keyvalue(R_UNIVAR_ELEVATION,
+                                                          sep='='),
+                                         text_to_keyvalue(R_UNIVAR_ELEVATION,
+                                                          sep='='),
+                                         precision=0))
+        self.assertFalse(keyvalue_equals(text_to_keyvalue(R_UNIVAR_ELEVATION,
+                                                           sep='='),
+                                          text_to_keyvalue(R_UNIVAR_ELEVATION_SUBSET,
+                                                           sep='='),
+                                          precision=0))
+
+    def test_compare_univars_subset(self):
+        self.assertTrue(keyvalue_equals(text_to_keyvalue(R_UNIVAR_ELEVATION_SUBSET,
+                                                          sep='='),
+                                         text_to_keyvalue(R_UNIVAR_ELEVATION,
+                                                          sep='='),
+                                         a_is_subset=True, precision=0))
+        self.assertFalse(keyvalue_equals(text_to_keyvalue(R_UNIVAR_ELEVATION,
+                                                           sep='='),
+                                          text_to_keyvalue(R_UNIVAR_ELEVATION_SUBSET,
+                                                           sep='='),
+                                          a_is_subset=True, precision=0))
+
+    def test_compare_univars_rounded(self):
+        self.assertTrue(keyvalue_equals(text_to_keyvalue(R_UNIVAR_ELEVATION,
+                                                          sep='='),
+                                         text_to_keyvalue(R_UNIVAR_ELEVATION_ROUNDED,
+                                                          sep='='),
+                                         precision=0.001))
+
+CORRECT_LINES = [
+    "null_cells=57995100",
+    "cells=60020100",
+    "min=55.5787925720215",
+    "max=156.329864501953"
+]
+
+INCORRECT_LINES = [
+    "null_cells=579951",
+    "cells=60020100",
+    "min=5.5787925720215",
+    "max=156.329864501953"
+]
+
+
+class TestMd5Sums(TestCase):
+    r"""
+
+    To create MD5 which is used for testing use:
+
+    .. code: sh
+    $ cat > test.txt << EOF
+    null_cells=57995100
+    cells=60020100
+    min=55.5787925720215
+    max=156.329864501953
+    EOF
+    $ md5sum test.txt
+    9dd6c4bb9d2cf6051b12f4b5f9d70523  test.txt
+    """
+
+    correct_md5sum = '9dd6c4bb9d2cf6051b12f4b5f9d70523'
+    correct_file_name_platform_nl = 'md5_sum_correct_file_platform_nl'
+    correct_file_name_unix_nl = 'md5_sum_correct_file_unix_nl'
+    wrong_file_name = 'md5_sum_wrong_file'
+
+    @classmethod
+    def setUpClass(cls):
+        with open(cls.correct_file_name_platform_nl, 'w') as f:
+            for line in CORRECT_LINES:
+                # \n should be converted to platform newline
+                f.write(line + '\n')
+        with open(cls.correct_file_name_unix_nl, 'wb') as f:
+            for line in CORRECT_LINES:
+                # binary mode will write pure \n
+                f.write(line + '\n')
+        with open(cls.wrong_file_name, 'w') as f:
+            for line in INCORRECT_LINES:
+                # \n should be converted to platform newline
+                f.write(line + '\n')
+
+    @classmethod
+    def tearDownClass(cls):
+        try_remove(cls.correct_file_name_platform_nl)
+        try_remove(cls.correct_file_name_unix_nl)
+        try_remove(cls.wrong_file_name)
+
+    def test_text_file_binary(self):
+        r"""File with ``\n`` (LF) newlines as binary (MD5 has ``\n``)."""
+        self.assertEqual(file_md5(self.correct_file_name_unix_nl),
+                         self.correct_md5sum,
+                         msg="MD5 sums different")
+
+    def test_text_file_platfrom(self):
+        r"""Text file with platform dependent newlines"""
+        self.assertEqual(text_file_md5(self.correct_file_name_platform_nl),
+                         self.correct_md5sum,
+                         msg="MD5 sums different")
+
+    def test_text_file_unix(self):
+        r"""Text file with ``\n`` (LF) newlines"""
+        self.assertEqual(text_file_md5(self.correct_file_name_unix_nl),
+                         self.correct_md5sum,
+                         msg="MD5 sums different")
+
+    def test_text_file_different(self):
+        r"""Text file with ``\n`` (LF) newlines"""
+        self.assertNotEqual(text_file_md5(self.wrong_file_name),
+                            self.correct_md5sum,
+                            msg="MD5 sums must be different")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/test_doctests.py b/lib/python/gunittest/testsuite/test_doctests.py
new file mode 100644
index 0000000..38db54a
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_doctests.py
@@ -0,0 +1,41 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.gunittest.gmodules
+import grass.gunittest.checkers
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(grass.gunittest.gmodules))
+    tests.addTests(doctest.DocTestSuite(grass.gunittest.checkers))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/gunittest/testsuite/test_gmodules.py b/lib/python/gunittest/testsuite/test_gmodules.py
new file mode 100644
index 0000000..fbb0d83
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_gmodules.py
@@ -0,0 +1,94 @@
+# -*- coding: utf-8 -*-
+
+import subprocess
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import (call_module, CalledModuleError)
+
+G_REGION_OUTPUT = """...
+n=...
+s=...
+w=...
+e=...
+nsres=...
+ewres=...
+rows=...
+cols=...
+cells=...
+"""
+
+
+class TestCallModuleFunction(TestCase):
+
+    def test_output(self):
+        output = call_module('g.region', flags='pg')
+        self.assertLooksLike(output, G_REGION_OUTPUT)
+
+    def test_input_output(self):
+        output = call_module('m.proj', flags='i', input='-', stdin="50.0 41.5")
+        self.assertLooksLike(output, '...|...\n')
+
+    def test_no_output(self):
+        output = call_module('m.proj', flags='i', input='-', stdin="50.0 41.5",
+                             capture_stdout=False)
+        self.assertIsNone(output)
+
+    def test_merge_stderr(self):
+        output = call_module('m.proj', flags='i', input='-', stdin="50.0 41.5",
+                             verbose=True,
+                             merge_stderr=True)
+        self.assertLooksLike(output, '...+proj=longlat +datum=WGS84...')
+        self.assertLooksLike(output, '...|...\n')
+
+    def test_merge_stderr_with_wrong_stdin_stderr(self):
+        self.assertRaises(ValueError,
+                          call_module,
+                          'm.proj', flags='i', input='-', stdin="50.0 41.5",
+                          verbose=True,
+                          merge_stderr=True, capture_stdout=False)
+        self.assertRaises(ValueError,
+                          call_module,
+                          'm.proj', flags='i', input='-', stdin="50.0 41.5",
+                          verbose=True,
+                          merge_stderr=True, capture_stderr=False)
+        self.assertRaises(ValueError,
+                          call_module,
+                          'm.proj', flags='i', input='-', stdin="50.0 41.5",
+                          verbose=True,
+                          merge_stderr=True,
+                          capture_stdout=False, capture_stderr=False)
+
+    def test_wrong_module_params(self):
+        self.assertRaises(CalledModuleError,
+                          call_module,
+                          'g.region', aabbbccc='notexist')
+
+    def test_module_input_param_wrong(self):
+        self.assertRaises(ValueError,
+                          call_module,
+                          'm.proj', flags='i', input='does_not_exist',
+                          stdin="50.0 41.5")
+
+    def test_missing_stdin_with_input_param(self):
+        self.assertRaises(ValueError,
+                          call_module,
+                          'm.proj', flags='i', input='-')
+
+    def test_wrong_usage_of_popen_like_interface(self):
+        self.assertRaises(ValueError,
+                          call_module,
+                          'm.proj', flags='i', input='-',
+                          stdin=subprocess.PIPE)
+        self.assertRaises(TypeError,
+                          call_module,
+                          'm.proj', flags='i', input='-', stdin="50.0 41.5",
+                          stdout='any_value_or_type_here')
+        self.assertRaises(TypeError,
+                          call_module,
+                          'm.proj', flags='i', input='-', stdin="50.0 41.5",
+                          stderr='any_value_or_type_here')
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/testsuite/test_module_assertions.py b/lib/python/gunittest/testsuite/test_module_assertions.py
new file mode 100644
index 0000000..abbc16c
--- /dev/null
+++ b/lib/python/gunittest/testsuite/test_module_assertions.py
@@ -0,0 +1,81 @@
+# -*- coding: utf-8 -*-
+
+import copy
+import subprocess
+
+from grass.pygrass.modules import Module
+from grass.gunittest.gmodules import SimpleModule
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import CalledModuleError
+
+
+class TestModuleAssertions(TestCase):
+    """Test assertions using PyGRASS Module"""
+    # pylint: disable=R0904
+
+    def setUp(self):
+        """Create two Module instances one correct and one with wrong map"""
+        self.rinfo = Module('r.info', map='elevation', flags='g',
+                            stdout_=subprocess.PIPE, run_=False, finish_=True)
+        self.rinfo_wrong = copy.deepcopy(self.rinfo)
+        self.wrong_map = 'does_not_exists'
+        self.rinfo_wrong.inputs['map'].value = self.wrong_map
+
+    def test_runModule(self):
+        """Correct and incorrect Module used in runModule()"""
+        self.runModule(self.rinfo)
+        self.assertTrue(self.rinfo.outputs['stdout'].value)
+        self.assertRaises(CalledModuleError, self.runModule, self.rinfo_wrong)
+
+    def test_assertModule(self):
+        """Correct and incorrect Module used in assertModule()"""
+        self.assertModule(self.rinfo)
+        self.assertTrue(self.rinfo.outputs['stdout'].value)
+        self.assertRaises(self.failureException, self.assertModule, self.rinfo_wrong)
+
+    def test_assertModuleFail(self):
+        """Correct and incorrect Module used in assertModuleFail()"""
+        self.assertModuleFail(self.rinfo_wrong)
+        stderr = self.rinfo_wrong.outputs['stderr'].value
+        self.assertTrue(stderr)
+        self.assertIn(self.wrong_map, stderr)
+        self.assertRaises(self.failureException, self.assertModuleFail, self.rinfo)
+
+
+class TestSimpleModuleAssertions(TestCase):
+    """Test assertions using SimpleModule"""
+    # pylint: disable=R0904
+
+    def setUp(self):
+        """Create two SimpleModule instances one correct and one with wrong map
+        """
+        self.rinfo = SimpleModule('r.info', map='elevation', flags='g')
+        self.rinfo_wrong = copy.deepcopy(self.rinfo)
+        self.wrong_map = 'does_not_exists'
+        self.rinfo_wrong.inputs['map'].value = self.wrong_map
+
+    def test_runModule(self):
+        """Correct and incorrect SimpleModule used in runModule()"""
+        self.runModule(self.rinfo)
+        self.assertTrue(self.rinfo.outputs['stdout'].value)
+        self.assertRaises(CalledModuleError, self.runModule, self.rinfo_wrong)
+
+    def test_assertModule(self):
+        """Correct and incorrect SimpleModule used in assertModule()"""
+        self.assertModule(self.rinfo)
+        self.assertTrue(self.rinfo.outputs['stdout'].value)
+        self.assertRaises(self.failureException, self.assertModule, self.rinfo_wrong)
+
+    def test_assertModuleFail(self):
+        """Correct and incorrect SimpleModule used in assertModuleFail()"""
+        self.assertModuleFail(self.rinfo_wrong)
+        stderr = self.rinfo_wrong.outputs['stderr'].value
+        self.assertTrue(stderr)
+        self.assertIn(self.wrong_map, stderr)
+        self.assertRaises(self.failureException, self.assertModuleFail, self.rinfo)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/gunittest/utils.py b/lib/python/gunittest/utils.py
new file mode 100644
index 0000000..988f7be
--- /dev/null
+++ b/lib/python/gunittest/utils.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+"""GRASS Python testing framework utilities (general and test-specific)
+
+Copyright (C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS GIS
+for details.
+
+:authors: Vaclav Petras
+"""
+
+import os
+import sys
+import shutil
+import errno
+
+
+def ensure_dir(directory):
+    """Create all directories in the given path if needed."""
+    if not os.path.exists(directory):
+        os.makedirs(directory)
+
+
+def silent_rmtree(filename):
+    """Remove the file but do nothing if file does not exist."""
+    try:
+        shutil.rmtree(filename)
+    except OSError as e:
+        # errno.ENOENT is "No such file or directory"
+        # re-raise if a different error occurred
+        if e.errno != errno.ENOENT:
+            raise
+
+
+def do_doctest_gettext_workaround():
+    """Setups environment for doing a doctest with gettext usage.
+
+    When using gettext with dynamically defined underscore function
+    (``_("For translation")``), doctest does not work properly. One option is
+    to use `import as` instead of dynamically defined underscore function but
+    this would require change all modules which are used by tested module.
+    This should be considered for the future. The second option is to define
+    dummy underscore function and one other function which creates the right
+    environment to satisfy all. This is done by this function.
+    """
+    def new_displayhook(string):
+        """A replacement for default `sys.displayhook`"""
+        if string is not None:
+            sys.stdout.write("%r\n" % (string,))
+
+    def new_translator(string):
+        """A fake gettext underscore function."""
+        return string
+
+    sys.displayhook = new_displayhook
+
+    try:
+        import __builtin__
+    except ImportError:
+        import builtins as __builtin__
+    __builtin__._ = new_translator
+
+
+_MAX_LENGTH = 80
+
+# taken from unittest.util (Python 2.7) since it is not part of API
+# but we need it for the same reason as it is used un unittest's TestCase
+def safe_repr(obj, short=False):
+    try:
+        result = repr(obj)
+    except Exception:
+        result = object.__repr__(obj)
+    if not short or len(result) < _MAX_LENGTH:
+        return result
+    return result[:_MAX_LENGTH] + ' [truncated]...'
diff --git a/lib/python/pygrass/Makefile b/lib/python/pygrass/Makefile
index 14e3424..80c478d 100644
--- a/lib/python/pygrass/Makefile
+++ b/lib/python/pygrass/Makefile
@@ -9,7 +9,7 @@ DSTDIR = $(GDIR)/pygrass
 
 MODULES = errors utils orderdict
 
-CLEAN_SUBDIRS = messages modules raster vector gis shell tests
+CLEAN_SUBDIRS = messages modules raster vector gis shell tests rpc
 
 PYFILES := $(patsubst %,$(DSTDIR)/%.py,$(MODULES) __init__)
 PYCFILES := $(patsubst %,$(DSTDIR)/%.pyc,$(MODULES) __init__)
@@ -22,6 +22,7 @@ default: $(PYFILES) $(PYCFILES) $(GDIR)/__init__.py $(GDIR)/__init__.pyc
 	-$(MAKE) -C gis || echo $(CURDIR)/gis >> $(ERRORLOG)
 	-$(MAKE) -C shell || echo $(CURDIR)/shell >> $(ERRORLOG)
 	-$(MAKE) -C tests || echo $(CURDIR)/tests >> $(ERRORLOG)
+	-$(MAKE) -C rpc || echo $(CURDIR)/gis >> $(ERRORLOG)
 
 $(PYDIR):
 	$(MKDIR) $@
diff --git a/lib/python/pygrass/errors.py b/lib/python/pygrass/errors.py
index 9f0d72f..d634f04 100644
--- a/lib/python/pygrass/errors.py
+++ b/lib/python/pygrass/errors.py
@@ -16,3 +16,15 @@ def must_be_open(method):
         else:
             get_msgr().warning(_("The map is close!"))
     return wrapper
+
+
+def mapinfo_must_be_set(method):
+
+    @wraps(method)
+    def wrapper(self, *args, **kargs):
+        if self.c_mapinfo:
+            return method(self, *args, **kargs)
+        else:
+            raise GrassError(_("The self.c_mapinfo pointer must be "\
+                                 "correctly initiated"))
+    return wrapper
diff --git a/lib/python/pygrass/gis/__init__.py b/lib/python/pygrass/gis/__init__.py
index 7521827..9cc7a3c 100644
--- a/lib/python/pygrass/gis/__init__.py
+++ b/lib/python/pygrass/gis/__init__.py
@@ -15,6 +15,9 @@ libgis.G_gisinit('')
 from grass.pygrass.errors import GrassError
 
 
+test_vector_name="Gis_test_vector"
+test_raster_name="Gis_test_raster"
+
 ETYPE = {'raster': libgis.G_ELEMENT_RASTER,
          'raster_3d': libgis.G_ELEMENT_RASTER3D,
          'vector': libgis.G_ELEMENT_VECTOR,
@@ -229,8 +232,8 @@ class Location(object):
         ::
 
             >>> location = Location()
-            >>> sorted(location.mapsets())
-            ['PERMANENT', 'user1']
+            >>> sorted(location.mapsets())                # doctest: +ELLIPSIS
+            [...]
 
         """
         mapsets = [mapset for mapset in self]
@@ -249,15 +252,17 @@ class Location(object):
 class Mapset(object):
     """Mapset ::
 
+        >>> from grass.script.core import gisenv
+        >>> genv = gisenv()
         >>> mapset = Mapset()
-        >>> mapset
-        Mapset('user1')
-        >>> mapset.gisdbase                               # doctest: +ELLIPSIS
-        '/home/...'
-        >>> mapset.location
-        'nc_basic_spm_grass7'
-        >>> mapset.name
-        'user1'
+        >>> mapset                                        # doctest: +ELLIPSIS
+        Mapset(...)
+        >>> mapset.gisdbase == genv['GISDBASE']
+        True
+        >>> mapset.location == genv['LOCATION_NAME']
+        True
+        >>> mapset.name == genv['MAPSET']
+        True
 
     ..
     """
@@ -317,13 +322,14 @@ class Mapset(object):
 
         ::
 
-            >>> mapset = Mapset('PERMANENT')
-            >>> rast = mapset.glist('rast')
-            >>> rast.sort()
-            >>> rast                                      # doctest: +ELLIPSIS
-            ['basins', 'elevation', ...]
-            >>> sorted(mapset.glist('rast', pattern='el*'))
-            ['elevation', 'elevation_shade']
+            >>> mapset = Mapset()
+            >>> mapset.current()
+            >>> rast = mapset.glist('raster')
+            >>> test_raster_name in rast
+            True
+            >>> vect = mapset.glist('vector')
+            >>> test_vector_name in vect
+            True
 
         ..
         """
@@ -364,13 +370,7 @@ class Mapset(object):
 
 
 class VisibleMapset(object):
-    """VisibleMapset object::
-
-        >>> mapset = VisibleMapset('user1')
-        >>> mapset
-        ['user1', 'PERMANENT']
-
-    ..
+    """VisibleMapset object
     """
     def __init__(self, mapset, location='', gisdbase=''):
         self.mapset = mapset
@@ -442,3 +442,24 @@ class VisibleMapset(object):
         """Reset to the original search path"""
         final = [self.mapset, 'PERMANENT']
         self._write(final)
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    from grass.script.core import run_command
+
+    utils.create_test_vector_map(test_vector_name)
+    run_command("g.region", n=50, s=0, e=60, w=0, res=1)
+    run_command("r.mapcalc", expression="%s = 1"%(test_raster_name),
+                             overwrite=True)
+    run_command("g.region", n=40, s=0, e=40, w=0, res=2)
+
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    mset = utils.get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
+    mset = utils.get_mapset_raster(test_raster_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='raster', name=test_raster_name)
diff --git a/lib/python/pygrass/gis/region.py b/lib/python/pygrass/gis/region.py
index faf1a24..8fef617 100644
--- a/lib/python/pygrass/gis/region.py
+++ b/lib/python/pygrass/gis/region.py
@@ -8,49 +8,109 @@ from __future__ import (nested_scopes, generators, division, absolute_import,
                         with_statement, print_function, unicode_literals)
 import ctypes
 import grass.lib.gis as libgis
+import grass.lib.raster as libraster
 import grass.script as grass
 
 from grass.pygrass.errors import GrassError
 from grass.pygrass.shell.conversion import dict2html
+from grass.pygrass.utils import get_mapset_vector, get_mapset_raster
 
+test_vector_name="Region_test_vector"
+test_raster_name="Region_test_raster"
 
 class Region(object):
     """This class is design to easily access and modify GRASS computational
     region. ::
 
-        >>> default = Region(default=True)
-        >>> current_original = Region()
-        >>> current = Region()
-        >>> current.align('elevation')
-        >>> default == current
-        True
-        >>> current.cols
-        1500
-        >>> current.ewres
-        10.0
-        >>> current.cols = 3000
-        >>> current.ewres
+        >>> r = Region()
+        >>> r.north
+        40.0
+        >>> r.south
+        0.0
+        >>> r.east
+        40.0
+        >>> r.west
+        0.0
+        >>> r.cols
+        20
+        >>> r.rows
+        20
+        >>> r.nsres
+        2.0
+        >>> r.ewres
+        2.0
+
+        >>> r.north = 100
+        >>> r.east = 100
+        >>> r.adjust(rows=True, cols=True)
+        >>> r.nsres
         5.0
-        >>> current.ewres = 20.0
-        >>> current.cols
-        750
-        >>> current.set_current()
-        >>> default == current
-        False
-        >>> current.get_default()
-        >>> default = Region(default=True)
-        >>> default == current
-        True
-        >>> current_original.set_current()
+        >>> r.ewres
+        5.0
+        >>> r.cols
+        20
+        >>> r.rows
+        20
+
+        >>> r.read()
+        >>> r.north = 100
+        >>> r.east = 100
+        >>> r.adjust(rows=False, cols=True)
+        >>> r.nsres
+        2.0
+        >>> r.ewres
+        5.0
+        >>> r.cols
+        20
+        >>> r.rows
+        50
+
+        >>> r.read()
+        >>> r.north = 100
+        >>> r.east = 100
+        >>> r.adjust(rows=True, cols=False)
+        >>> r.nsres
+        5.0
+        >>> r.ewres
+        2.0
+        >>> r.cols
+        50
+        >>> r.rows
+        20
+
+        >>> r.read()
+        >>> r.north = 100
+        >>> r.east = 100
+        >>> r.adjust(rows=False, cols=False)
+        >>> r.nsres
+        2.0
+        >>> r.ewres
+        2.0
+        >>> r.cols
+        50
+        >>> r.rows
+        50
+
+        >>> r.read()
+        >>> r.cols = 1000
+        >>> r.ewres
+        0.04
+        >>> r.rows = 1000
+        >>> r.nsres
+        0.04
 
     ..
     """
     def __init__(self, default=False):
-        self.c_region = ctypes.pointer(libgis.Cell_head())
+        self.c_region = libgis.Cell_head()
         if default:
-            self.get_default()
+            self.read_default()
         else:
-            self.get_current()
+            self.read()
+
+    def byref(self):
+        """Return the internal region representation as pointer"""
+        return ctypes.pointer(self.c_region)
 
     def _set_param(self, key, value):
         grass.run_command('g.region', **{key: value})
@@ -58,66 +118,66 @@ class Region(object):
     #----------LIMITS----------
     def _get_n(self):
         """Private function to obtain north value"""
-        return self.c_region.contents.north
+        return self.c_region.north
 
     def _set_n(self, value):
         """Private function to set north value"""
-        self.c_region.contents.north = value
+        self.c_region.north = value
 
     north = property(fget=_get_n, fset=_set_n,
                      doc="Set and obtain north coordinate")
 
     def _get_s(self):
         """Private function to obtain south value"""
-        return self.c_region.contents.south
+        return self.c_region.south
 
     def _set_s(self, value):
         """Private function to set south value"""
-        self.c_region.contents.south = value
+        self.c_region.south = value
 
     south = property(fget=_get_s, fset=_set_s,
                      doc="Set and obtain south coordinate")
 
     def _get_e(self):
         """Private function to obtain east value"""
-        return self.c_region.contents.east
+        return self.c_region.east
 
     def _set_e(self, value):
         """Private function to set east value"""
-        self.c_region.contents.east = value
+        self.c_region.east = value
 
     east = property(fget=_get_e, fset=_set_e,
                     doc="Set and obtain east coordinate")
 
     def _get_w(self):
         """Private function to obtain west value"""
-        return self.c_region.contents.west
+        return self.c_region.west
 
     def _set_w(self, value):
         """Private function to set west value"""
-        self.c_region.contents.west = value
+        self.c_region.west = value
 
     west = property(fget=_get_w, fset=_set_w,
                     doc="Set and obtain west coordinate")
 
     def _get_t(self):
         """Private function to obtain top value"""
-        return self.c_region.contents.top
+        return self.c_region.top
 
     def _set_t(self, value):
         """Private function to set top value"""
-        self.c_region.contents.top = value
+        self.c_region.top = value
 
     top = property(fget=_get_t, fset=_set_t,
                    doc="Set and obtain top value")
 
     def _get_b(self):
         """Private function to obtain bottom value"""
-        return self.c_region.contents.bottom
+        return self.c_region.bottom
 
     def _set_b(self, value):
         """Private function to set bottom value"""
-        self.c_region.contents.bottom = value
+        self.c_region.bottom = value
 
     bottom = property(fget=_get_b, fset=_set_b,
                       doc="Set and obtain bottom value")
@@ -125,11 +185,11 @@ class Region(object):
     #----------RESOLUTION----------
     def _get_rows(self):
         """Private function to obtain rows value"""
-        return self.c_region.contents.rows
+        return self.c_region.rows
 
     def _set_rows(self, value):
         """Private function to set rows value"""
-        self.c_region.contents.rows = value
+        self.c_region.rows = value
         self.adjust(rows=True)
 
     rows = property(fget=_get_rows, fset=_set_rows,
@@ -137,23 +197,34 @@ class Region(object):
 
     def _get_cols(self):
         """Private function to obtain columns value"""
-        return self.c_region.contents.cols
+        return self.c_region.cols
 
     def _set_cols(self, value):
         """Private function to set columns value"""
-        self.c_region.contents.cols = value
+        self.c_region.cols = value
         self.adjust(cols=True)
 
     cols = property(fget=_get_cols, fset=_set_cols,
                     doc="Set and obtain number of columns")
 
+    def _get_depths(self):
+        """Private function to obtain depths value"""
+        return self.c_region.depths
+
+    def _set_depths(self, value):
+        """Private function to set depths value"""
+        self.c_region.depths = value
+
+    depths = property(fget=_get_depths, fset=_set_depths,
+                      doc="Set and obtain number of depths")
+
     def _get_nsres(self):
         """Private function to obtain north-south value"""
-        return self.c_region.contents.ns_res
+        return self.c_region.ns_res
 
     def _set_nsres(self, value):
         """Private function to obtain north-south value"""
-        self.c_region.contents.ns_res = value
+        self.c_region.ns_res = value
         self.adjust()
 
     nsres = property(fget=_get_nsres, fset=_set_nsres,
@@ -161,11 +232,11 @@ class Region(object):
 
     def _get_ewres(self):
         """Private function to obtain east-west value"""
-        return self.c_region.contents.ew_res
+        return self.c_region.ew_res
 
     def _set_ewres(self, value):
         """Private function to set east-west value"""
-        self.c_region.contents.ew_res = value
+        self.c_region.ew_res = value
         self.adjust()
 
     ewres = property(fget=_get_ewres, fset=_set_ewres,
@@ -173,11 +244,11 @@ class Region(object):
 
     def _get_tbres(self):
         """Private function to obtain top-botton 3D value"""
-        return self.c_region.contents.tb_res
+        return self.c_region.tb_res
 
     def _set_tbres(self, value):
         """Private function to set top-bottom 3D value"""
-        self.c_region.contents.tb_res = value
+        self.c_region.tb_res = value
         self.adjust()
 
     tbres = property(fget=_get_tbres, fset=_set_tbres,
@@ -186,22 +257,14 @@ class Region(object):
     @property
     def zone(self):
         """Return the zone of projection
-
-        >>> reg = Region()
-        >>> reg.zone
-        0
         """
-        return self.c_region.contents.zone
+        return self.c_region.zone
 
     @property
     def proj(self):
         """Return a code for projection
-
-        >>> reg = Region()
-        >>> reg.proj
-        99
         """
-        return self.c_region.contents.proj
+        return self.c_region.proj
 
     @property
     def cells(self):
@@ -210,22 +273,25 @@ class Region(object):
 
     #----------MAGIC METHODS----------
     def __repr__(self):
-        rg = 'Region(north=%g, south=%g, east=%g, west=%g, nsres=%g, ewres=%g)'
+        rg = "Region(north=%g, south=%g, east=%g, west=%g, "\
+                    "nsres=%g, ewres=%g, rows=%i, cols=%i, "\
+                    "cells=%i, zone=%i, proj=%i)"
         return rg % (self.north, self.south, self.east, self.west,
-                     self.nsres, self.ewres)
+                     self.nsres, self.ewres, self.rows, self.cols,
+                     self.cells, self.zone, self.proj)
 
     def _repr_html_(self):
         return dict2html(dict(self.items()), keys=self.keys(),
                          border='1', kdec='b')
 
     def __unicode__(self):
-        return grass.pipe_command("g.region", flags="pu").communicate()[0]
+        return self.__repr__()
 
     def __str__(self):
         return self.__unicode__()
 
     def __eq__(self, reg):
-        """Compare two region.
+        """Compare two region. ::
 
         >>> r0 = Region()
         >>> r1 = Region()
@@ -235,9 +301,12 @@ class Region(object):
         True
         >>> r1 == r2
         False
+
+        ..
         """
         attrs = ['north', 'south', 'west', 'east', 'top', 'bottom',
-                 'nsres', 'ewres', 'tbres']
+                 'nsres', 'ewres', 'tbres', 'rows', 'cols', 'cells',
+                 'zone', 'proj']
         for attr in attrs:
             if getattr(self, attr) != getattr(reg, attr):
                 return False
@@ -263,13 +332,7 @@ class Region(object):
                 'cols', 'cells']
 
     def items(self):
-        """Return a list of tuple with key and value. ::
-
-            >>> reg = Region()
-            >>> reg.items()                              # doctest: +ELLIPSIS
-            [(u'proj', 99), ..., (u'cells', 2025000)]
-
-        ..
+        """Return a list of tuple with key and value.
         """
         return [(k, self.__getattribute__(k)) for k in self.keys()]
 
@@ -277,79 +340,256 @@ class Region(object):
     def zoom(self, raster_name):
         """Shrink region until it meets non-NULL data from this raster map
 
+        Warning: This will change the user GRASS region settings
+
         :param raster_name: the name of raster
         :type raster_name: str
         """
         self._set_param('zoom', str(raster_name))
-        self.get_current()
+        self.read()
 
     def align(self, raster_name):
         """Adjust region cells to cleanly align with this raster map
 
+        Warning: This will change the user GRASS region settings
+
         :param raster_name: the name of raster
         :type raster_name: str
         """
         self._set_param('align', str(raster_name))
-        self.get_current()
+        self.read()
 
     def adjust(self, rows=False, cols=False):
         """Adjust rows and cols number according with the nsres and ewres
         resolutions. If rows or cols parameters are True, the adjust method
         update nsres and ewres according with the rows and cols numbers.
         """
-        libgis.G_adjust_Cell_head(self.c_region, bool(rows), bool(cols))
+        libgis.G_adjust_Cell_head(self.byref(), bool(rows), bool(cols))
 
-    def vect(self, vector_name):
+    def from_vect(self, vector_name):
         """Adjust bounding box of region using a vector
 
-        :param vector_name: the name of vector
-        :type vector_name: str
+            :param vector_name: the name of vector
+            :type vector_name: str
 
-        ::
+            Example ::
 
             >>> reg = Region()
-            >>> reg.vect('census')
+            >>> reg.from_vect(test_vector_name)
             >>> reg.get_bbox()
-            Bbox(230963.640878, 212125.562878, 645837.437393, 628769.374393)
-            >>> reg.get_default()
+            Bbox(6.0, 0.0, 14.0, 0.0)
+            >>> reg.read()
+            >>> reg.get_bbox()
+            Bbox(40.0, 0.0, 40.0, 0.0)
 
-        ..
+            ..
         """
         from grass.pygrass.vector import VectorTopo
         with VectorTopo(vector_name, mode='r') as vect:
             bbox = vect.bbox()
             self.set_bbox(bbox)
 
+    def from_rast(self, raster_name):
+        """Set the region from the computational region
+            of a raster map layer.
+
+            :param raster_name: the name of raster
+            :type raster_name: str
+
+            :param mapset: the mapset of raster
+            :type mapset: str
+
+            call C function `Rast_get_cellhd`
+
+            Example ::
+
+            >>> reg = Region()
+            >>> reg.from_rast(test_raster_name)
+            >>> reg.get_bbox()
+            Bbox(50.0, 0.0, 60.0, 0.0)
+            >>> reg.read()
+            >>> reg.get_bbox()
+            Bbox(40.0, 0.0, 40.0, 0.0)
+
+            ..
+           """
+        if not raster_name:
+            raise ValueError("Raster name or mapset are invalid")
+
+
+        mapset = get_mapset_raster(raster_name)
+
+        if mapset:
+            libraster.Rast_get_cellhd(raster_name, mapset,
+                                      self.byref())
+
+    def set_raster_region(self):
+        """Set the computational region (window) for all raster maps in the current process.
+           
+           Attention: All raster objects must be closed or the
+                      process will be terminated.
+                      
+           The Raster library C function Rast_set_window() is called.
+        
+        """
+        libraster.Rast_set_window(self.byref())
+
     def get_current(self):
-        """Set the current GRASS region to the Region object"""
-        libgis.G_get_set_window(self.c_region)
+        """Get the current working region of this process
+           and store it into this Region object
+
+           Previous calls to set_current() affects values returned by this function.
+           Previous calls to read() affects values returned by this function
+           only if the current working region is not initialized.
+
+            Example:
+
+            >>> r = Region()
+            >>> r.north
+            40.0
+
+            >>> r.north = 30
+            >>> r.north
+            30.0
+            >>> r.get_current()
+            >>> r.north
+            40.0
+
+        """
+        libgis.G_get_set_window(self.byref())
 
     def set_current(self):
-        """Set the Region object to the current GRASS region"""
-        libgis.G_set_window(self.c_region)
-
-    def get_default(self):
-        """Set the default GRASS region to the Region object"""
-        libgis.G_get_window(self.c_region)
-
-    def set_default(self):
-        """Set the Region object to the default GRASS region.
-        It works only in PERMANENT mapset"""
-        from grass.pygrass.gis import Mapset
-        mapset = Mapset()
-        if mapset.name != 'PERMANENT':
-            raise GrassError("ERROR: Unable to change default region. The " \
-                             "current mapset is not <PERMANENT>.")
+        """Set the current working region from this region object
+
+           This function adjusts the values before setting the region
+           so you don't have to call G_adjust_Cell_head().
+
+           Attention: Only the current process is affected.
+                      The GRASS computational region is not affected.
+
+            Example::
+
+            >>> r = Region()
+            >>> r.north
+            40.0
+            >>> r.south
+            0.0
+
+            >>> r.north = 30
+            >>> r.south = 20
+            >>> r.set_current()
+            >>> r.north
+            30.0
+            >>> r.south
+            20.0
+            >>> r.get_current()
+            >>> r.north
+            30.0
+            >>> r.south
+            20.0
+
+            >>> r.read(force_read=False)
+            >>> r.north
+            40.0
+            >>> r.south
+            0.0
+
+            >>> r.read(force_read=True)
+            >>> r.north
+            40.0
+            >>> r.south
+            0.0
+
+        """
+        libgis.G_set_window(self.byref())
+
+    def read(self, force_read=True):
+        """
+          Read the region into this region object
+
+          Reads the region as stored in the WIND file in the user's current
+          mapset into region.
+
+          3D values are set to defaults if not available in WIND file.  An
+          error message is printed and exit() is called if there is a problem
+          reading the region.
+
+          <b>Note:</b> GRASS applications that read or write raster maps
+          should not use this routine since its use implies that the active
+          module region will not be used. Programs that read or write raster
+          map data (or vector data) can query the active module region using
+          Rast_window_rows() and Rast_window_cols().
+
+          :param force_read: If True the WIND file of the current mapset
+                             is re-readed, otherwise the initial region
+                             set at process start will be loaded from the internal
+                             static variables.
+          :type force_read: boolean
+
+        """
+        # Force the reading of the WIND file
+        if force_read:
+            libgis.G_unset_window()
+        libgis.G_get_window(self.byref())
+
+    def write(self):
+        """Writes the region from this region object
+
+           This function writes this region to the Region file (WIND)
+           in the users current mapset. This function should be
+           carefully used, since the user will ot notice if his region
+           was changed and would expect that only g.region will do this.
+
+            Example ::
+
+            >>> from copy import deepcopy
+            >>> r = Region()
+            >>> rn = deepcopy(r)
+            >>> r.north = 20
+            >>> r.south = 10
+
+            >>> r.write()
+            >>> r.read()
+            >>> r.north
+            20.0
+            >>> r.south
+            10.0
+
+            >>> rn.write()
+            >>> r.read()
+            >>> r.north
+            40.0
+            >>> r.south
+            0.0
+
+            >>> r.read_default()
+            >>> r.write()
+
+            ..
+        """
         self.adjust()
-        if libgis.G_put_window(self.c_region) < 0:
+        if libgis.G_put_window(self.byref()) < 0:
             raise GrassError("Cannot change region (DEFAUL_WIND file).")
 
+
+    def read_default(self):
+        """
+          Get the default region
+
+          Reads the default region for the location in this Region object.
+          3D values are set to defaults if not available in WIND file.
+
+          An error message is printed and exit() is called if there is a
+          problem reading the default region.
+        """
+        libgis.G_get_default_window(self.byref())
+
     def get_bbox(self):
         """Return a Bbox object with the extension of the region. ::
 
             >>> reg = Region()
             >>> reg.get_bbox()
-            Bbox(228500.0, 215000.0, 645000.0, 630000.0)
+            Bbox(40.0, 0.0, 40.0, 0.0)
 
         ..
         """
@@ -380,3 +620,26 @@ class Region(object):
         self.south = bbox.south
         self.east = bbox.east
         self.west = bbox.west
+
+if __name__ == "__main__":
+
+    import doctest
+    from grass.pygrass import utils
+    from grass.script.core import run_command
+
+    utils.create_test_vector_map(test_vector_name)
+    run_command("g.region", n=50, s=0, e=60, w=0, res=1)
+    run_command("r.mapcalc", expression="%s = 1"%(test_raster_name),
+                             overwrite=True)
+    run_command("g.region", n=40, s=0, e=40, w=0, res=2)
+
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    mset = utils.get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
+    mset = utils.get_mapset_raster(test_raster_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='raster', name=test_raster_name)
+
diff --git a/lib/python/pygrass/gis/testsuite/test_doctests.py b/lib/python/pygrass/gis/testsuite/test_doctests.py
new file mode 100644
index 0000000..71bf90a
--- /dev/null
+++ b/lib/python/pygrass/gis/testsuite/test_doctests.py
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+from grass.pygrass import gis
+from grass.pygrass.gis import region
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+
+    from grass.pygrass import utils
+    from grass.script.core import run_command
+    utils.create_test_vector_map(gis.test_vector_name)
+    utils.create_test_vector_map(gis.region.test_vector_name)
+    run_command("g.region", n=50, s=0, e=60, w=0, res=1)
+    run_command("r.mapcalc", expression="%s = 1"%(gis.test_raster_name),
+                             overwrite=True)
+    run_command("r.mapcalc", expression="%s = 1"%(gis.region.test_raster_name),
+                             overwrite=True)
+    run_command("g.region", n=40, s=0, e=40, w=0, res=2)
+
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(gis))
+    tests.addTests(doctest.DocTestSuite(region))
+    return tests
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/gis/testsuite/test_gis.py b/lib/python/pygrass/gis/testsuite/test_gis.py
new file mode 100644
index 0000000..d0fef3c
--- /dev/null
+++ b/lib/python/pygrass/gis/testsuite/test_gis.py
@@ -0,0 +1,25 @@
+# -*- coding: utf-8 -*-
+"""
+Luca Delucchi
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.gis.region import Region
+
+
+class RegionTestCase(TestCase):
+
+    def test_bounds(self):
+        reg1 = Region()
+        reg2 = Region()
+        self.assertTrue(reg1, reg2)
+        north = reg2.north
+        reg2.north = 0
+        self.assertNotEqual(reg1.north, reg2.north)
+        reg2.north = north
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/messages/testsuite/test_doctests.py b/lib/python/pygrass/messages/testsuite/test_doctests.py
new file mode 100644
index 0000000..3a49197
--- /dev/null
+++ b/lib/python/pygrass/messages/testsuite/test_doctests.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.messages as gmessages
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(gmessages))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/modules/grid/grid.py b/lib/python/pygrass/modules/grid/grid.py
index 00898be..9c7d484 100644
--- a/lib/python/pygrass/modules/grid/grid.py
+++ b/lib/python/pygrass/modules/grid/grid.py
@@ -70,20 +70,22 @@ def copy_mapset(mapset, path):
     :returns: the instance of the new Mapset.
 
 
+    >>> from grass.script.core import gisenv
+    >>> mname = gisenv()['MAPSET']
     >>> mset = Mapset()
-    >>> mset.name
-    'user1'
+    >>> mset.name == mname
+    True
     >>> import tempfile as tmp
     >>> import os
     >>> path = os.path.join(tmp.gettempdir(), 'my_loc', 'my_mset')
-    >>> copy_mapset(mset, path)
-    Mapset('user1')
-    >>> sorted(os.listdir(path))
-    [u'PERMANENT', u'user1']
+    >>> copy_mapset(mset, path)                           # doctest: +ELLIPSIS
+    Mapset(...)
+    >>> sorted(os.listdir(path))                          # doctest: +ELLIPSIS
+    [...'PERMANENT'...]
     >>> sorted(os.listdir(os.path.join(path, 'PERMANENT')))
     [u'DEFAULT_WIND', u'PROJ_EPSG', u'PROJ_INFO', u'PROJ_UNITS', u'VAR', u'WIND']
-    >>> sorted(os.listdir(os.path.join(path, 'user1'))) # doctest: +ELLIPSIS
-    [...u'SEARCH_PATH', u'VAR', u'WIND']
+    >>> sorted(os.listdir(os.path.join(path, mname)))   # doctest: +ELLIPSIS
+    [...u'SEARCH_PATH',...u'WIND']
     >>> import shutil
     >>> shutil.rmtree(path)
 
@@ -111,8 +113,12 @@ def read_gisrc(gisrc):
     :returns: a tuple with the mapset, location and gisdbase
 
     >>> import os
-    >>> read_gisrc(os.environ['GISRC'])  # doctest: +ELLIPSIS
-    (u'user1', ...)
+    >>> from grass.script.core import gisenv
+    >>> genv = gisenv()
+    >>> (read_gisrc(os.environ['GISRC']) == (genv['MAPSET'],
+    ...                                      genv['LOCATION_NAME'],
+    ...                                      genv['GISDBASE']))
+    True
     """
     with open(gisrc, 'r') as gfile:
         gis = dict([(k.strip(), v.strip())
diff --git a/lib/python/pygrass/modules/grid/testsuite/test_doctests.py b/lib/python/pygrass/modules/grid/testsuite/test_doctests.py
new file mode 100644
index 0000000..b56e34d
--- /dev/null
+++ b/lib/python/pygrass/modules/grid/testsuite/test_doctests.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.modules as gmodules
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+
+    tests.addTests(doctest.DocTestSuite(gmodules.shortcuts))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/modules/interface/module.py b/lib/python/pygrass/modules/interface/module.py
index 3cce740..103d08b 100644
--- a/lib/python/pygrass/modules/interface/module.py
+++ b/lib/python/pygrass/modules/interface/module.py
@@ -15,11 +15,11 @@ from .typedict import TypeDict
 from .read import GETFROMTAG, DOC
 from .env import G_debug
 
-
 if sys.version_info[0] == 2:
     from itertools import izip_longest as zip_longest
 else:
     from itertools import zip_longest
+    unicode = str
 
 
 def _get_bash(self, *args, **kargs):
@@ -371,6 +371,8 @@ class Module(object):
     Multiple run test
     >>> colors = Module("r.colors", map="test_a",
     ...                                            color="ryb", run_=False)
+    >>> colors.get_bash()
+    u'r.colors map=test_a color=ryb'
     >>> colors.run()
     Module('r.colors')
     >>> colors(color="gyr")
@@ -583,11 +585,11 @@ class Module(object):
         return self
 
     def get_bash(self):
-        """Return a BASH rapresentation of the Module."""
+        """Return a BASH representation of the Module."""
         return ' '.join(self.make_cmd())
 
     def get_python(self):
-        """Return a Python rapresentation of the Module."""
+        """Return a Python representation of the Module."""
         prefix = self.name.split('.')[0]
         name = '_'.join(self.name.split('.')[1:])
         params = ', '.join([par.get_python() for par in self.params_list
diff --git a/lib/python/pygrass/modules/interface/parameter.py b/lib/python/pygrass/modules/interface/parameter.py
index 22466aa..a8d46c2 100644
--- a/lib/python/pygrass/modules/interface/parameter.py
+++ b/lib/python/pygrass/modules/interface/parameter.py
@@ -18,6 +18,7 @@ def _check_value(param, value):
     """
     must_val = 'The Parameter <%s>, must be one of the following values: %r'
     req = 'The Parameter <%s>, require: %s, get: %s instead: %r\n%s'
+    string = (type(b''), type(u''))
 
     def raiseexcpet(exc, param, ptype, value):
         """Function to modifa the error message"""
@@ -32,7 +33,6 @@ def _check_value(param, value):
 
     def check_string(value):
         """Function to check that a string parameter is already a string"""
-        string = (str, unicode)
         if param.type in string:
             if type(value) in (int, float):
                 value = str(value)
diff --git a/lib/python/pygrass/modules/interface/testsuite/test_doctests.py b/lib/python/pygrass/modules/interface/testsuite/test_doctests.py
new file mode 100644
index 0000000..e1d0d27
--- /dev/null
+++ b/lib/python/pygrass/modules/interface/testsuite/test_doctests.py
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.modules as gmodules
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(gmodules.interface.flag))
+    tests.addTests(doctest.DocTestSuite(gmodules.interface.module))
+    tests.addTests(doctest.DocTestSuite(gmodules.interface.parameter))
+
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/modules/interface/testsuite/test_flag.py b/lib/python/pygrass/modules/interface/testsuite/test_flag.py
new file mode 100644
index 0000000..51dada4
--- /dev/null
+++ b/lib/python/pygrass/modules/interface/testsuite/test_flag.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Jun 24 09:43:53 2014
+
+ at author: pietro
+"""
+from __future__ import unicode_literals
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.modules.interface.flag import Flag
+
+
+class TestFlag(TestCase):
+    def test_get_bash(self):
+        """Test get_bash method"""
+        flag = Flag(diz=dict(name='a'))
+        self.assertFalse(flag.value)
+        self.assertEqual('', flag.get_bash())
+        flag.special = True
+        self.assertEqual('', flag.get_bash())
+        flag.value = True
+        self.assertEqual('--a', flag.get_bash())
+        flag.special = False
+        self.assertEqual('-a', flag.get_bash())
+
+    def test_get_python(self):
+        """Test get_python method"""
+        flag = Flag(diz=dict(name='a'))
+        self.assertFalse(flag.value)
+        self.assertEqual('', flag.get_python())
+        flag.special = True
+        self.assertEqual('', flag.get_python())
+        flag.value = True
+        self.assertEqual('a=True', flag.get_python())
+        flag.special = False
+        self.assertEqual('a', flag.get_python())
+
+    def test_bool(self):
+        """Test magic __bool__ method"""
+        flag = Flag(diz=dict(name='a'))
+        flag.value = True
+        self.assertTrue(True if flag else False)
+        flag.value = False
+        self.assertFalse(True if flag else False)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/modules/interface/testsuite/test_modules.py b/lib/python/pygrass/modules/interface/testsuite/test_modules.py
new file mode 100644
index 0000000..13764af
--- /dev/null
+++ b/lib/python/pygrass/modules/interface/testsuite/test_modules.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Tue Jun 24 09:43:53 2014
+
+ at author: pietro
+"""
+import sys
+from fnmatch import fnmatch
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.script.core import get_commands
+from grass.exceptions import ParameterError
+from grass.pygrass.modules.interface import Module
+
+PY2 = sys.version_info[0] == 2
+if PY2:
+    from StringIO import StringIO
+else:
+    from io import BytesIO as StringIO
+
+
+SKIP = ["g.parser", ]
+
+
+# taken from six
+def with_metaclass(meta, *bases):
+    """Create a base class with a metaclass."""
+    # This requires a bit of explanation: the basic idea is to make a dummy
+    # metaclass for one level of class instantiation that replaces itself with
+    # the actual metaclass.
+    class metaclass(meta):
+
+        def __new__(cls, name, this_bases, d):
+            return meta(name, bases, d)
+    return type.__new__(metaclass, 'temporary_class', (), {})
+
+
+class ModulesMeta(type):
+    def __new__(mcs, name, bases, dict):
+
+        def gen_test(cmd):
+            def test(self):
+                Module(cmd)
+            return test
+
+        cmds = [c for c in sorted(list(get_commands()[0]))
+                if c not in SKIP and not fnmatch(c, "g.gui.*")]
+        for cmd in cmds:
+            test_name = "test__%s" % cmd.replace('.', '_')
+            dict[test_name] = gen_test(cmd)
+        return type.__new__(mcs, name, bases, dict)
+
+
+class TestModules(with_metaclass(ModulesMeta, TestCase)):
+    pass
+
+
+class TestModulesPickability(TestCase):
+    def test_rsun(self):
+        """Test if a Module instance is pickable"""
+        import pickle
+
+        out = StringIO()
+        pickle.dump(Module('r.sun'), out)
+        out.close()
+
+
+class TestModulesCheck(TestCase):
+    def test_flags_with_suppress_required(self):
+        """Test if flags with suppress required are handle correctly"""
+        gextension = Module('g.extension')
+        # check if raise an error if required parameter are missing
+        with self.assertRaises(ParameterError):
+            gextension.check()
+
+        # check if the flag suppress the required parameters
+        gextension.flags.a = True
+        self.assertIsNone(gextension.check())
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/modules/interface/testsuite/test_parameter.py b/lib/python/pygrass/modules/interface/testsuite/test_parameter.py
new file mode 100644
index 0000000..20749ea
--- /dev/null
+++ b/lib/python/pygrass/modules/interface/testsuite/test_parameter.py
@@ -0,0 +1,346 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Fri Jul  4 16:32:54 2014
+
+ at author: pietro
+"""
+from __future__ import print_function
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.modules.interface.parameter import Parameter, _check_value
+
+GETTYPE = {
+    'string': str,
+    'integer': int,
+    'float': float,
+    'double': float,
+    'file': str,
+    'all': lambda x: x,
+}
+
+class TestCheckValueFunction(TestCase):
+
+    def test_single_all(self):
+        param = Parameter(diz=dict(name='int_number', required='yes',
+                                   multiple='no', type='all'))
+        value = 1
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = 1.2
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = "elev"
+        self.assertTupleEqual((value, value), _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(TypeError):
+            _check_value(param, (1, 2))
+
+    def test_single_float_double(self):
+        for ptype in ('float', 'double'):
+            param = Parameter(diz=dict(name='int_number', required='yes',
+                                       multiple='no', type=ptype))
+            value = 1
+            self.assertTupleEqual((float(value), value), _check_value(param, value))
+            value = 1.2
+            self.assertTupleEqual((value, value), _check_value(param, value))
+            value = "1"
+            self.assertTupleEqual((float(value), value), _check_value(param, value))
+            value = "1.35"
+            self.assertTupleEqual((float(value), value), _check_value(param, value))
+
+            # test errors
+            with self.assertRaises(ValueError):
+                _check_value(param, "elev")
+            with self.assertRaises(TypeError):
+                _check_value(param, (1., 2.))
+
+    def test_multiple_float_double(self):
+        for ptype in ('float', 'double'):
+            param = Parameter(diz=dict(name='number', required='yes',
+                                       multiple='yes', type=ptype))
+            value = (1.4, 2.3)
+            self.assertTupleEqual((list(value), value),
+                                  _check_value(param, value))
+            value = (1, 2)
+            self.assertTupleEqual(([float(v) for v in value], value),
+                                  _check_value(param, value))
+            value = ("1", "2")
+            self.assertTupleEqual(([float(v) for v in value], value),
+                                  _check_value(param, value))
+            value = ("1.4", "2.3")
+            self.assertTupleEqual(([float(v) for v in value], value),
+                                  _check_value(param, value))
+            value = 1.
+            self.assertTupleEqual(([value, ], value),
+                                  _check_value(param, value))
+            value = 1
+            self.assertTupleEqual(([value, ], value),
+                                  _check_value(param, value))
+
+            # test errors
+            with self.assertRaises(ValueError):
+                _check_value(param, "elev")
+            with self.assertRaises(ValueError):
+                _check_value(param, ("elev", "slope", "aspect"))
+
+    def test_range_float_double(self):
+        for ptype in ('float', 'double'):
+            param = Parameter(diz=dict(name='int_number', required='yes',
+                                       multiple='no', type=ptype,
+                                       values=["0.0-2.5", ]))
+            value = 1
+            self.assertTupleEqual((float(value), value), _check_value(param, value))
+            value = 1.2
+            self.assertTupleEqual((value, value), _check_value(param, value))
+            value = "0"
+            self.assertTupleEqual((float(value), value), _check_value(param, value))
+            value = "2.5"
+            self.assertTupleEqual((float(value), value), _check_value(param, value))
+
+            # test errors
+            with self.assertRaises(ValueError):
+                _check_value(param, "elev")
+            with self.assertRaises(TypeError):
+                _check_value(param, (1., 2.))
+            with self.assertRaises(ValueError):
+                _check_value(param, -1.)
+            with self.assertRaises(ValueError):
+                _check_value(param, 2.6)
+
+    def test_single_integer(self):
+        param = Parameter(diz=dict(name='int_number', required='yes',
+                                   multiple='no', type='integer'))
+        value = 1
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = 1.2
+        self.assertTupleEqual((int(value), value), _check_value(param, value))
+        value = "1"
+        self.assertTupleEqual((int(value), value), _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(ValueError):
+            _check_value(param, "1.")
+        with self.assertRaises(ValueError):
+            _check_value(param, "elev")
+        with self.assertRaises(TypeError):
+            _check_value(param, (1, 2))
+
+    def test_multiple_integer(self):
+        param = Parameter(diz=dict(name='int_number', required='yes',
+                                   multiple='yes', type='integer'))
+        value = (1, 2)
+        #import ipdb; ipdb.set_trace()
+        self.assertTupleEqual((list(value), value), _check_value(param, value))
+        value = (1.2, 2.3)
+        self.assertTupleEqual(([int(v) for v in value], value),
+                              _check_value(param, value))
+        value = ("1", "2")
+        self.assertTupleEqual(([int(v) for v in value], value),
+                              _check_value(param, value))
+        value = 1
+        self.assertTupleEqual(([1, ], value), _check_value(param, value))
+        value = 1.2
+        self.assertTupleEqual(([int(value), ], value),
+                              _check_value(param, value))
+        value = "1"
+        self.assertTupleEqual(([int(value), ], value),
+                              _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(ValueError):
+            _check_value(param, "elev")
+        with self.assertRaises(ValueError):
+            _check_value(param, ("elev", "slope", "aspect"))
+
+    def test_keydescvalues(self):
+        for ptype in ('integer', 'float'):
+            param = Parameter(diz=dict(name='int_number', required='yes',
+                                       multiple='yes',
+                                       keydesc=('range', '(min, max)'),
+                                       type='integer'))
+            value = (1, 2)
+            self.assertTupleEqual(([value, ], value),
+                                  _check_value(param, value))
+            value = [(1, 2), (2, 3)]
+            self.assertTupleEqual((value, value), _check_value(param, value))
+
+            with self.assertRaises(TypeError):
+                _check_value(param, 1)
+
+    def test_range_integer(self):
+        param = Parameter(diz=dict(name='int_number', required='yes',
+                                   multiple='no', type='integer',
+                                   values=["0-10", ]))
+        value = 1
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = 0
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = 10
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = 1.2
+        self.assertTupleEqual((int(value), value), _check_value(param, value))
+        value = "1"
+        self.assertTupleEqual((int(value), value), _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(ValueError):
+            _check_value(param, "1.")
+        with self.assertRaises(ValueError):
+            _check_value(param, "elev")
+        with self.assertRaises(TypeError):
+            _check_value(param, (1, 2))
+        with self.assertRaises(ValueError):
+            _check_value(param, -1)
+        with self.assertRaises(ValueError):
+            _check_value(param, 11)
+
+    def test_choice_integer(self):
+        param = Parameter(diz=dict(name='int_number', required='yes',
+                                   multiple='no', type='integer',
+                                   values=[2, 4, 6, 8]))
+        value = 4
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = 2
+        self.assertTupleEqual((int(value), value), _check_value(param, value))
+        value = "8"
+        self.assertTupleEqual((int(value), value), _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(ValueError):
+            _check_value(param, "2.")
+        with self.assertRaises(ValueError):
+            _check_value(param, "elev")
+        with self.assertRaises(TypeError):
+            _check_value(param, (1, 2))
+        with self.assertRaises(ValueError):
+            _check_value(param, 3)
+
+    def test_single_string_file(self):
+        for ptype in ('string', 'file'):
+            param = Parameter(diz=dict(name='name', required='yes',
+                                       multiple='no', type=ptype))
+            value = u'elev'
+            self.assertTupleEqual((value, value), _check_value(param, value))
+            value = 10
+            self.assertTupleEqual((str(value), value),
+                                  _check_value(param, value))
+            value = 12.5
+            self.assertTupleEqual((str(value), value),
+                                  _check_value(param, value))
+
+            # test errors
+            with self.assertRaises(TypeError):
+                _check_value(param, ('abc', 'def'))
+
+    def test_multiple_strings(self):
+        param = Parameter(diz=dict(name='rastnames', required='yes',
+                                   multiple='yes', type='string'))
+        value = ['elev', 'slope', 'aspect']
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = ('elev', 'slope', 'aspect')
+        self.assertTupleEqual((list(value), value), _check_value(param, value))
+        value = ['1.3', '2.3', '4.5']
+        self.assertTupleEqual((value, value), _check_value(param, value))
+        value = [1.3, 2.3, 4.5]
+        self.assertTupleEqual(([str(v) for v in value], value),
+                              _check_value(param, value))
+        value = (1, 2, 3)
+        self.assertTupleEqual(([str(v) for v in value], value),
+                              _check_value(param, value))
+        value = 'elev'
+        self.assertTupleEqual(([value, ], value), _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(ValueError):
+            _check_value(param, ({}, {}, {}))
+
+    def test_choice_string(self):
+        values = ["elev", "asp", "slp"]
+        param = Parameter(diz=dict(name='rastname', required='yes',
+                                   multiple='no', type='string',
+                                   values=values))
+        value = "asp"
+        self.assertTupleEqual((value, value), _check_value(param, value))
+
+        # test errors
+        with self.assertRaises(ValueError):
+            _check_value(param, "2")
+        with self.assertRaises(ValueError):
+            _check_value(param, "2.")
+        with self.assertRaises(TypeError):
+            _check_value(param, (1, 2))
+        with self.assertRaises(ValueError):
+            _check_value(param, "elevation")
+
+
+class TestParameterGetBash(TestCase):
+    def test_single_float_double(self):
+        for ptype in ('float', 'double'):
+            param = Parameter(diz=dict(name='number', required='yes',
+                                       multiple='no', type=ptype))
+            # set private attributes to skip the check function
+            param._value = 1.0
+            param._rawvalue = 1.0
+            self.assertEqual("number=1.0", param.get_bash())
+            param._value = 1.0
+            param._rawvalue = "1."
+            self.assertEqual("number=1.", param.get_bash())
+
+    def test_multiple_float_double(self):
+        for ptype in ('float', 'double'):
+            param = Parameter(diz=dict(name='number', required='yes',
+                                       multiple='yes', type=ptype))
+            # set private attributes to skip the check function
+            param._value = [1.0, ]
+            param._rawvalue = 1.0
+            self.assertEqual("number=1.0", param.get_bash())
+            param._value = [1.0, ]
+            param._rawvalue = "1."
+            self.assertEqual("number=1.", param.get_bash())
+            param._value = [1.0, 2.0, 3.0]
+            param._rawvalue = [1.0, 2.0, 3.0]
+            self.assertEqual("number=1.0,2.0,3.0", param.get_bash())
+            param._value = [1.0, 2.0, 3.0]
+            param._rawvalue = ["1.", "2.", "3."]
+            self.assertEqual("number=1.,2.,3.", param.get_bash())
+
+    def test_single_string(self):
+        param = Parameter(diz=dict(name='rast', required='yes',
+                                   multiple='no', type='string'))
+        # set private attributes to skip the check function
+        param._value = 'elev'
+        param._rawvalue = 'elev'
+        self.assertEqual("rast=elev", param.get_bash())
+
+    def test_multiple_strings(self):
+        param = Parameter(diz=dict(name='rast', required='yes',
+                                   multiple='yes', type='string'))
+        # set private attributes to skip the check function
+        param._value = ['elev', 'asp', 'slp']
+        param._rawvalue = ['elev', 'asp', 'slp']
+        self.assertEqual("rast=elev,asp,slp", param.get_bash())
+        param._value = ['elev', ]
+        param._rawvalue = 'elev'
+        self.assertEqual("rast=elev", param.get_bash())
+
+    def test_keydescvalues(self):
+        param = Parameter(diz=dict(name='range', required='yes',
+                                   multiple='yes',
+                                   keydesc=('range', '(min, max)'),
+                                   type='integer'))
+        # set private attributes to skip the check function
+        param._value = [(1., 2.), ]
+        param._rawvalue = (1., 2.)
+        self.assertEqual("range=1.0,2.0", param.get_bash())
+        param._value = [(1., 2.), (3., 4.)]
+        param._rawvalue = [(1., 2.), (3., 4.)]
+        self.assertEqual("range=1.0,2.0,3.0,4.0", param.get_bash())
+        param._value = [(1., 2.), (3., 4.)]
+        param._rawvalue = [('1.0', '2.00'), ('3.000', '4.0000')]
+        self.assertEqual("range=1.0,2.00,3.000,4.0000", param.get_bash())
+
+        with self.assertRaises(TypeError):
+            _check_value(param, 1)
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/modules/shortcuts.py b/lib/python/pygrass/modules/shortcuts.py
index bd7981d..f5af373 100644
--- a/lib/python/pygrass/modules/shortcuts.py
+++ b/lib/python/pygrass/modules/shortcuts.py
@@ -21,11 +21,12 @@ class MetaModule(object):
        >>> g_list.required
        ['type']
        >>> g_list.inputs.type = 'raster'
+       >>> g_list.inputs.mapset = 'PERMANENT'
        >>> g_list.stdout_ = -1
        >>> g_list.run()
        Module('g.list')
        >>> g_list.outputs.stdout                         # doctest: +ELLIPSIS
-       '...basins...soils...'
+       '...basin...soils...'
        >>> r = MetaModule('r')
        >>> what = r.what
        >>> what.description
@@ -46,7 +47,7 @@ class MetaModule(object):
         return self.cls('%s.%s' % (self.prefix, name.replace('_', '.')))
 
 
-# http://grass.osgeo.org/grass71/manuals/full_index.html
+# http://grass.osgeo.org/grass72/manuals/full_index.html
 #[ d.* | db.* | g.* | i.* | m.* | ps.* | r.* | r3.* | t.* | v.* ]
 #
 #  d.*	display commands
diff --git a/lib/python/pygrass/modules/testsuite/test_doctests.py b/lib/python/pygrass/modules/testsuite/test_doctests.py
new file mode 100644
index 0000000..c3ba81d
--- /dev/null
+++ b/lib/python/pygrass/modules/testsuite/test_doctests.py
@@ -0,0 +1,43 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+from grass.pygrass.modules import shortcuts, grid, interface
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(interface))
+    tests.addTests(doctest.DocTestSuite(grid.grid))
+    tests.addTests(doctest.DocTestSuite(grid.patch))
+    tests.addTests(doctest.DocTestSuite(grid.split))
+    tests.addTests(doctest.DocTestSuite(shortcuts))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/modules/testsuite/test_import_isolation.py b/lib/python/pygrass/modules/testsuite/test_import_isolation.py
new file mode 100644
index 0000000..91a8782
--- /dev/null
+++ b/lib/python/pygrass/modules/testsuite/test_import_isolation.py
@@ -0,0 +1,53 @@
+# -*- coding: utf-8 -*-
+"""
+Authors:   pietro
+
+Copyright: (C) 2015 pietro
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+
+Created on  Wed Jul 15 11:34:32 2015
+"""
+from __future__ import absolute_import
+
+import sys
+import fnmatch
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+def check(*patterns):
+    """Return a set of the imported libraries that soddisfies several patterns.
+    """
+    result = []
+    imports = sorted(sys.modules.keys())
+    for pattern in patterns:
+        result.extend(fnmatch.filter(imports, pattern))
+    return set(result)
+
+
+class TestImportIsolation(TestCase):
+    patterns = ['grass.lib*']
+
+    def test_import_isolation(self):
+        """Check that modules  classes are not using ctypes"""
+        isolate = set()
+        self.assertEqual(isolate, check(*self.patterns),
+                         msg="Test isolation before any import.")
+        # same import done in __init__ file
+        from grass.pygrass.modules.interface import Module, ParallelModuleQueue
+        from grass.pygrass.modules import shortcuts
+        self.assertEqual(isolate, check(*self.patterns),
+                         msg="Test isolation after import Module.")
+        # test the other way round
+        from grass.pygrass.vector import VectorTopo
+        self.assertNotEqual(isolate, check(*self.patterns),
+                            msg=("Test the isolation is broken, therefore "
+                                 "the defined patterns are correct"))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/raster/__init__.py b/lib/python/pygrass/raster/__init__.py
index e7da376..c01f46a 100644
--- a/lib/python/pygrass/raster/__init__.py
+++ b/lib/python/pygrass/raster/__init__.py
@@ -33,6 +33,9 @@ from grass.pygrass.raster.buffer import Buffer
 from grass.pygrass.raster.segment import Segment
 from grass.pygrass.raster.rowio import RowIO
 
+WARN_OVERWRITE = "Raster map <{0}> already exists and will be overwritten"
+
+test_raster_name="Raster_test_map"
 
 class RasterRow(RasterAbstractBase):
     """Raster_row_access": Inherits: "Raster_abstract_base" and implements
@@ -51,57 +54,85 @@ class RasterRow(RasterAbstractBase):
           object (only for rows), since r.mapcalc is more sophisticated and
           faster
 
-    Examples:
-
-    >>> elev = RasterRow('elevation')
-    >>> elev.exist()
-    True
-    >>> elev.is_open()
-    False
-    >>> elev.open()
-    >>> elev.is_open()
-    True
-    >>> elev.has_cats()
-    False
-    >>> elev.mode
-    u'r'
-    >>> elev.mtype
-    'FCELL'
-    >>> elev.num_cats()
-    0
-    >>> elev.info.range
-    (56, 156)
-    >>> elev.info
-    elevation@
-    rows: 1350
-    cols: 1500
-    north: 228500.0 south: 215000.0 nsres:10.0
-    east:  645000.0 west: 630000.0 ewres:10.0
-    range: 56, 156
-    proj: 99
-    <BLANKLINE>
-
-    Each Raster map have an attribute call ``cats`` that allow user
-    to interact with the raster categories.
-
-    >>> land = RasterRow('geology')
-    >>> land.open()
-    >>> land.cats               # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
-    [('Zml', 1, None),
-     ...
-     ('Tpyw', 1832, None)]
-
-    Open a raster map using the *with statement*:
-
-    >>> with RasterRow('elevation') as elev:
-    ...     for row in elev[:3]:
-    ...         row[:4]
-    ...
-    Buffer([ 141.99613953,  141.27848816,  141.37904358,  142.29821777], dtype=float32)
-    Buffer([ 142.90461731,  142.39450073,  142.68611145,  143.59086609], dtype=float32)
-    Buffer([ 143.81854248,  143.54707336,  143.83972168,  144.59527588], dtype=float32)
-    >>> elev.is_open()
-    False
+        Examples:
+
+        >>> elev = RasterRow(test_raster_name)
+        >>> elev.exist()
+        True
+        >>> elev.is_open()
+        False
+        >>> elev.open()
+        >>> elev.is_open()
+        True
+        >>> elev.has_cats()
+        True
+        >>> elev.mode
+        u'r'
+        >>> elev.mtype
+        'CELL'
+        >>> elev.num_cats()
+        16
+        >>> elev.info.range
+        (11, 44)
+        >>> elev.info.cols
+        4
+        >>> elev.info.rows
+        4
+
+        Editing the history
+
+        >>> elev.hist.read()
+        >>> elev.hist.title = "A test map"
+        >>> elev.hist.write()
+        >>> elev.hist.title
+        'A test map'
+        >>> elev.hist.keyword
+        'This is a test map'
+
+        >>> attrs = list(elev.hist)
+        >>> attrs[0]
+        ('name', u'Raster_test_map')
+        >>> attrs[2]
+        ('mtype', '')
+
+        Each Raster map have an attribute call ``cats`` that allow user
+        to interact with the raster categories.
+
+        >>> elev.cats          # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+        [('A', 11, None),
+         ('B', 12, None),
+        ...
+         ('P', 44, None)]
+
+        >>> elev.cats.labels() # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+        ['A', 'B', 'C', 'D', 'E',
+         'F', 'G', 'H', 'I', 'J',
+         'K', 'L', 'M', 'n', 'O', 'P']
+        >>> elev.cats[0]
+        ('A', 11, None)
+        >>> elev.cats[2]
+        ('C', 13, None)
+        >>> elev.cats[0] = ('AA', 11)
+        >>> elev.cats[1] = ('BB', 12)
+        >>> elev.cats.write()
+        >>> elev.cats.read()
+        >>> elev.cats[0]
+        ('AA', 11, None)
+        >>> elev.cats[1]
+        ('BB', 12, None)
+
+        Open a raster map using the *with statement*:
+
+        >>> with RasterRow(test_raster_name) as elev:
+        ...     for row in elev:
+        ...         row
+        Buffer([11, 21, 31, 41], dtype=int32)
+        Buffer([12, 22, 32, 42], dtype=int32)
+        Buffer([13, 23, 33, 43], dtype=int32)
+        Buffer([14, 24, 34, 44], dtype=int32)
+
+        >>> elev.is_open()
+        False
 
     """
     def __init__(self, name, mapset='', *args, **kargs):
@@ -111,21 +142,19 @@ class RasterRow(RasterAbstractBase):
     @must_be_open
     def get_row(self, row, row_buffer=None):
         """Private method that return the row using the read mode
-        call the `Rast_get_row` C function.
+            call the `Rast_get_row` C function.
 
-        :param row: the number of row to obtain
-        :type row: int
-        :param row_buffer: Buffer object instance with the right dim and type
-        :type row_buffer: Buffer
+            :param row: the number of row to obtain
+            :type row: int
+            :param row_buffer: Buffer object instance with the right dim and type
+            :type row_buffer: Buffer
 
-        >>> elev = RasterRow('elevation')
-        >>> elev.open()
-        >>> elev[0]                 # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
-        Buffer([ 141.99613953, 141.27848816,  141.37904358, ..., 58.40825272,
-                 58.30711365,  58.18310547], dtype=float32)
-        >>> elev.get_row(0)         # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
-        Buffer([ 141.99613953, 141.27848816, 141.37904358, ..., 58.40825272,
-                 58.30711365, 58.18310547], dtype=float32)
+            >>> elev = RasterRow(test_raster_name)
+            >>> elev.open()
+            >>> elev[0]
+            Buffer([11, 21, 31, 41], dtype=int32)
+            >>> elev.get_row(0)
+            Buffer([11, 21, 31, 41], dtype=int32)
 
         """
         if row_buffer is None:
@@ -241,6 +270,18 @@ class RasterRowIO(RasterRow):
         :type row: int
         :param row_buffer: Specify the Buffer object that will be instantiate
         :type row_buffer: Buffer object
+
+            >>> elev = RasterRowIO(test_raster_name)
+            >>> elev.open('r')
+            >>> for row in elev:
+            ...     row
+            Buffer([11, 21, 31, 41], dtype=int32)
+            Buffer([12, 22, 32, 42], dtype=int32)
+            Buffer([13, 23, 33, 43], dtype=int32)
+            Buffer([14, 24, 34, 44], dtype=int32)
+
+            >>> elev.close()
+
         """
         if row_buffer is None:
             row_buffer = Buffer((self._cols,), self.mtype)
@@ -329,6 +370,27 @@ class RasterSegment(RasterAbstractBase):
         :type row: int
         :param row_buffer: specify the Buffer object that will be instantiate
         :type row_buffer: Buffer object
+
+            >>> elev = RasterRowIO(test_raster_name)
+            >>> elev.open('r')
+            >>> for row in elev:
+            ...     row
+            Buffer([11, 21, 31, 41], dtype=int32)
+            Buffer([12, 22, 32, 42], dtype=int32)
+            Buffer([13, 23, 33, 43], dtype=int32)
+            Buffer([14, 24, 34, 44], dtype=int32)
+
+            >>> elev.close()
+
+
+            >>> with RasterSegment(test_raster_name) as elev:
+            ...     for row in elev:
+            ...         row
+            Buffer([11, 21, 31, 41], dtype=int32)
+            Buffer([12, 22, 32, 42], dtype=int32)
+            Buffer([13, 23, 33, 43], dtype=int32)
+            Buffer([14, 24, 34, 44], dtype=int32)
+
         """
         if row_buffer is None:
             row_buffer = Buffer((self._cols), self.mtype)
@@ -338,8 +400,30 @@ class RasterSegment(RasterAbstractBase):
     def put_row(self, row, row_buffer):
         """Write the row using the `segment.put_row` method
 
-        :param row: a Row object to insert into raster
-        :type row: Buffer object
+            :param row: a Row object to insert into raster
+            :type row: Buffer object
+
+            Input and output must have the same type in case of row copy
+
+            >>> map_a = RasterSegment(test_raster_name)
+            >>> map_b = RasterSegment(test_raster_name + "_segment")
+            >>> map_a.open('r')
+            >>> map_b.open('w', mtype="CELL", overwrite=True)
+            >>> for row in xrange(map_a.info.rows):
+            ...     map_b[row] = map_a[row] + 1000
+            >>> map_a.close()
+            >>> map_b.close()
+
+            >>> map_b = RasterSegment(test_raster_name + "_segment")
+            >>> map_b.open("r")
+            >>> for row in map_b:
+            ...         row
+            Buffer([1011, 1021, 1031, 1041], dtype=int32)
+            Buffer([1012, 1022, 1032, 1042], dtype=int32)
+            Buffer([1013, 1023, 1033, 1043], dtype=int32)
+            Buffer([1014, 1024, 1034, 1044], dtype=int32)
+            >>> map_b.close()
+
         """
         self.segment.put_row(row, row_buffer)
 
@@ -351,6 +435,29 @@ class RasterSegment(RasterAbstractBase):
         :type row: int
         :param col: Specify the column number
         :type col: int
+
+
+            >>> elev = RasterSegment(test_raster_name)
+            >>> elev.open('r')
+            >>> for i in xrange(4):
+            ...     elev.get(i,i)
+            11
+            22
+            33
+            44
+            >>> elev.close()
+
+
+            >>> with RasterSegment(test_raster_name) as elev:
+            ...     elev.get(0,0)
+            ...     elev.get(1,1)
+            ...     elev.get(2,2)
+            ...     elev.get(3,3)
+            11
+            22
+            33
+            44
+
         """
         return self.segment.get(row, col)
 
@@ -364,6 +471,28 @@ class RasterSegment(RasterAbstractBase):
         :type col: int
         :param val: Specify the value that will be write to the map cell
         :type val: value
+
+            >>> map_a = RasterSegment(test_raster_name)
+            >>> map_b = RasterSegment(test_raster_name + "_segment")
+            >>> map_a.open('r')
+            >>> map_b.open('w', mtype="FCELL", overwrite=True)
+            >>> for row in xrange(map_a.info.rows):
+            ...     for col in xrange(map_a.info.cols):
+            ...         value = map_a.get(row,col)
+            ...         map_b.put(row,col,value + 100)
+            >>> map_a.close()
+            >>> map_b.close()
+
+            >>> map_b = RasterSegment(test_raster_name + "_segment")
+            >>> map_b.open("r")
+            >>> for row in map_b:
+            ...         row
+            Buffer([ 111.,  121.,  131.,  141.], dtype=float32)
+            Buffer([ 112.,  122.,  132.,  142.], dtype=float32)
+            Buffer([ 113.,  123.,  133.,  143.], dtype=float32)
+            Buffer([ 114.,  124.,  134.,  144.], dtype=float32)
+            >>> map_b.close()
+
         """
         self.segment.val.value = val
         self.segment.put(row, col)
@@ -416,7 +545,7 @@ class RasterSegment(RasterAbstractBase):
                 self.hist.read()
 
                 if self.mode == "rw":
-                    warning(_(WARN_OVERWRITE.format(self)))
+                    #warning(_(WARN_OVERWRITE.format(self)))
                     # Close the file descriptor and open it as new again
                     libraster.Rast_close(self._fd)
                     self._fd = libraster.Rast_open_new(
@@ -479,3 +608,142 @@ def random_map(mapname, mtype, overwrite=True, factor=100):
         random_map.put_row(row_buf)
     random_map.close()
     return random_map
+
+
+def raster2numpy(rastname, mapset=''):
+    """Return a numpy array from a raster map
+
+    :param str rastname: the name of raster map
+    :parar str mapset: the name of mapset containig raster map
+    """
+    with RasterRow(rastname, mapset=mapset, mode='r') as rast:
+        return np.array(rast)
+
+
+def raster2numpy_img(rastname, region, color="ARGB", array=None):
+    """Convert a raster map layer into a string with
+       32Bit ARGB, 24Bit RGB or 8Bit Gray little endian encoding.
+
+        Return a numpy array from a raster map of type uint8
+        that contains the colored map data as 32 bit ARGB, 32Bit RGB
+        or 8 bit image
+
+       :param rastname: The name of raster map
+       :type rastname: string
+
+       :param region: The region to be used for raster map reading
+       :type region: grass.pygrass.gis.region.Region
+
+       :param color: "ARGB", "RGB", "GRAY1", "GRAY2"
+                     ARGB  -> 32Bit RGB with alpha channel (0xAARRGGBB)
+                     RGB   -> 32Bit RGB (0xffRRGGBB)
+                     GRAY1 -> grey scale formular: .33R+ .5G+ .17B
+                     GRAY2 -> grey scale formular: .30R+ .59G+ .11B
+       :type color: String
+
+       :param array: A numpy array (optional) to store the image,
+                     the array needs to setup as follows:
+
+                     array = np.ndarray((region.rows*region.cols*scale), np.uint8)
+
+                     scale = 4 in case of ARGB and RGB or scale = 1
+                     in case of Gray scale
+       :type array: numpy.ndarray
+
+       :return: A numpy array of size rows*cols*4 in case of ARGB, RGB and
+                rows*cols*1 in case of gray scale
+
+       Attention: This function will change the computational raster region
+       of the current process while running.
+    """
+    from copy import deepcopy
+    region_orig = deepcopy(region)
+    # Set the raster region
+    region.set_raster_region()
+
+    scale = 1
+    color_mode = 1
+    if color.upper() == "ARGB":
+        scale = 4
+        color_mode = 1
+    elif color.upper() == "RGB":
+        scale = 4
+        color_mode = 2
+    elif color.upper() == "GRAY1":
+        scale = 1
+        color_mode = 3
+    elif color.upper() == "GRAY2":
+        scale = 1
+        color_mode = 4
+
+    if array is None:
+        array = np.ndarray((region.rows*region.cols*scale), np.uint8)
+
+    libraster.Rast_map_to_img_str(rastname, color_mode,
+                                  array.ctypes.data_as(ctypes.POINTER(ctypes.c_uint8)))
+    # Restore the raster region
+    region_orig.set_raster_region()
+
+    return array
+
+
+def numpy2raster(array, mtype, rastname, overwrite=False):
+    """Save a numpy array to a raster map
+
+    :param obj array: a numpy array
+    :param obj mtype: the datatype of array
+    :param str rastername: the name of output map
+    :param bool overwrite: True to overwrite existing map
+    """
+    reg = Region()
+    if (reg.rows, reg.cols) != array.shape:
+        msg = "Region and array are different: %r != %r"
+        raise TypeError(msg % ((reg.rows, reg.cols), array.shape))
+    with RasterRow(rastname, mode='w', mtype=mtype, overwrite=overwrite) as new:
+        newrow = Buffer((array.shape[1],), mtype=mtype)
+        for row in array:
+            newrow[:] = row[:]
+            new.put_row(newrow)
+
+if __name__ == "__main__":
+
+    import doctest
+    from grass.pygrass import utils
+    from grass.pygrass.modules import Module
+    Module("g.region", n=40, s=0, e=40, w=0, res=10)
+    Module("r.mapcalc", expression="%s = row() + (10 * col())"%(test_raster_name),
+                             overwrite=True)
+    Module("r.support", map=test_raster_name,
+                        title="A test map",
+                        history="Generated by r.mapcalc",
+                        description="This is a test map")
+    cats="""11:A
+            12:B
+            13:C
+            14:D
+            21:E
+            22:F
+            23:G
+            24:H
+            31:I
+            32:J
+            33:K
+            34:L
+            41:M
+            42:n
+            43:O
+            44:P"""
+    Module("r.category", rules="-", map=test_raster_name,
+           stdin_=cats, separator=":")
+
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    mset = utils.get_mapset_raster(test_raster_name, mapset='')
+    if mset:
+        Module("g.remove", flags='f', type='raster', name=test_raster_name)
+    mset = utils.get_mapset_raster(test_raster_name + "_segment",
+                                   mapset='')
+    if mset:
+        Module("g.remove", flags='f', type='raster',
+               name=test_raster_name + "_segment")
diff --git a/lib/python/pygrass/raster/abstract.py b/lib/python/pygrass/raster/abstract.py
index c276a67..7e99d92 100644
--- a/lib/python/pygrass/raster/abstract.py
+++ b/lib/python/pygrass/raster/abstract.py
@@ -31,9 +31,9 @@ from grass.pygrass.raster.raster_type import TYPE as RTYPE, RTYPE_STR
 from grass.pygrass.raster.category import Category
 from grass.pygrass.raster.history import History
 
+test_raster_name="abstract_test_map"
 
 ## Define global variables to not exceed the 80 columns
-WARN_OVERWRITE = "Raster map <{0}> already exists and will be overwritten"
 INDXOUTRANGE = "The index (%d) is out of range, have you open the map?."
 INFO = """{name}@{mapset}
 rows: {rows}
@@ -49,16 +49,16 @@ class Info(object):
     def __init__(self, name, mapset=''):
         """Read the information for a raster map. ::
 
-            >>> info = Info('elevation')
+            >>> info = Info(test_raster_name)
             >>> info.read()
-            >>> info
-            elevation@
-            rows: 1350
-            cols: 1500
-            north: 228500.0 south: 215000.0 nsres:10.0
-            east:  645000.0 west: 630000.0 ewres:10.0
-            range: 56, 156
-            proj: 99
+            >>> info          # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+            abstract_test_map@
+            rows: 4
+            cols: 4
+            north: 40.0 south: 0.0 nsres:10.0
+            east:  40.0 west: 0.0 ewres:10.0
+            range: 11, 44
+            ...
             <BLANKLINE>
 
         """
@@ -190,6 +190,9 @@ class Info(object):
     def items(self):
         return [(k, self.__getattribute__(k)) for k in self.keys()]
 
+    def __iter__(self):
+        return ((k, self.__getattribute__(k)) for k in self.keys())
+
     def _repr_html_(self):
         return dict2html(dict(self.items()), keys=self.keys(),
                          border='1', kdec='b')
@@ -212,13 +215,11 @@ class RasterAbstractBase(object):
         """The constructor need at least the name of the map
         *optional* field is the `mapset`.
 
-        >>> ele = RasterAbstractBase('elevation')
+        >>> ele = RasterAbstractBase(test_raster_name)
         >>> ele.name
-        u'elevation'
+        u'abstract_test_map'
         >>> ele.exist()
         True
-        >>> ele.mapset
-        'PERMANENT'
 
         ..
         """
@@ -355,7 +356,7 @@ class RasterAbstractBase(object):
 
         call the C function `G_find_raster`.
 
-        >>> ele = RasterAbstractBase('elevation')
+        >>> ele = RasterAbstractBase(test_raster_name)
         >>> ele.exist()
         True
         """
@@ -371,7 +372,7 @@ class RasterAbstractBase(object):
     def is_open(self):
         """Return True if the map is open False otherwise.
 
-        >>> ele = RasterAbstractBase('elevation')
+        >>> ele = RasterAbstractBase(test_raster_name)
         >>> ele.is_open()
         False
 
@@ -400,9 +401,10 @@ class RasterAbstractBase(object):
     def name_mapset(self, name=None, mapset=None):
         """Return the full name of the Raster.
 
-        >>> ele = RasterAbstractBase('elevation')
-        >>> ele.name_mapset()
-        u'elevation at PERMANENT'
+        >>> ele = RasterAbstractBase(test_raster_name)
+        >>> name = ele.name_mapset().split("@")
+        >>> name
+        [u'abstract_test_map']
 
         """
         if name is None:
@@ -424,11 +426,19 @@ class RasterAbstractBase(object):
             utils.rename(self.name, newname, 'rast')
         self._name = newname
 
-    def set_from_rast(self, rastname='', mapset=''):
-        """Set the region that will use from a map, if rastername and mapset
-        is not specify, use itself.
+    def set_region_from_rast(self, rastname='', mapset=''):
+        """Set the computational region from a map,
+           if rastername and mapset is not specify, use itself.
+           This region will be used by all
+           raster map layers that are opened in the same process.
+
+           The GRASS region settings will not be modified.
+
+           call C function `Rast_get_cellhd`, `Rast_set_window`
 
-        call C function `Rast_get_cellhd`"""
+           return: The region that was used to set the computational region
+
+           """
         if self.is_open():
             fatal("You cannot change the region if map is open")
             raise
@@ -439,7 +449,24 @@ class RasterAbstractBase(object):
             mapset = self.mapset
 
         libraster.Rast_get_cellhd(rastname, mapset,
-                                  ctypes.byref(region._region))
+                                  region.byref())
+        self._set_raster_window(region)
+        return region
+
+    def set_region(self, region):
+        """Set the computational region that can be different from the
+           current region settings. This region will be used by all
+           raster map layers that are opened in the same process.
+
+           The GRASS region settings will not be modified.
+        """
+        if self.is_open():
+            fatal("You cannot change the region if map is open")
+            raise
+        self._set_raster_window(region)
+
+    def _set_raster_window(self, region):
+        libraster.Rast_set_window(region.byref())
         # update rows and cols attributes
         self._rows = libraster.Rast_window_rows()
         self._cols = libraster.Rast_window_cols()
@@ -448,11 +475,19 @@ class RasterAbstractBase(object):
     def get_value(self, point, region=None):
         """This method returns the pixel value of a given pair of coordinates:
 
-        :param point: pair of coordinates in tuple object
+        :param point: pair of coordinates in tuple object or class object with coords() method
+        :param region: The region that should be used for sampling,
+                       default is the current computational region that can be set with set_region()
+                       or set_region_from_rast()
         """
+        # Check for tuple
+        if type(point) != type([]) and type(point) != type(()):
+            point = point.coords()
+        # If no region was set, use the current computational region
         if not region:
             region = Region()
-        row, col = utils.coor2pixel(point.coords(), region)
+            libraster.Rast_get_window(region.byref())
+        row, col = utils.coor2pixel(point, region)
         if col < 0 or col > region.cols or row < 0 or row > region.rows:
             return None
         line = self.get_row(int(row))
@@ -523,3 +558,19 @@ class RasterAbstractBase(object):
     def set_cat(self, label, min_cat, max_cat=None, index=None):
         """Set or update a category"""
         self.cats.set_cat(index, (label, min_cat, max_cat))
+
+if __name__ == "__main__":
+
+    import doctest
+    from grass.pygrass import utils
+    from grass.pygrass.modules import Module
+    Module("g.region", n=40, s=0, e=40, w=0, res=10)
+    Module("r.mapcalc", expression="%s = row() + (10 * col())"%(test_raster_name),
+                             overwrite=True)
+
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    mset = utils.get_mapset_raster(test_raster_name, mapset='')
+    if mset:
+        Module("g.remove", flags='f', type='raster', name=test_raster_name)
diff --git a/lib/python/pygrass/raster/category.py b/lib/python/pygrass/raster/category.py
index 5fa8594..2b1ddb4 100644
--- a/lib/python/pygrass/raster/category.py
+++ b/lib/python/pygrass/raster/category.py
@@ -50,18 +50,6 @@ class Category(list):
     Rast_copy_cats() <- This should be wrapped so that categories from an
     existing Python category class are copied.
 
-
-    >>> import grass.lib.raster as libraster
-    >>> import ctypes
-    >>> from grass.pygrass.raster.category import Category
-    >>> cats = Category('landuse')
-    >>> cats.read()
-    >>> cats.labels()                                     # doctest: +ELLIPSIS
-    ['undefined', 'developed', 'agriculture', ..., 'water', 'sediment']
-    >>> cats[0]
-    ('undefined', 0, None)
-    >>> cats[1]
-    ('developed', 1, None)
     """
     def __init__(self, name, mapset='', mtype='CELL', *args, **kargs):
         self.name = name
@@ -272,7 +260,7 @@ class Category(list):
         :type category: Category object
         """
         libraster.Rast_copy_cats(ctypes.byref(self.c_cats),     # to
-                                 ctypes.byref(category._cats))  # from
+                                 ctypes.byref(category.c_cats))  # from
         self._read_cats()
 
     def ncats(self):
diff --git a/lib/python/pygrass/raster/history.py b/lib/python/pygrass/raster/history.py
index 442485b..fcb46f4 100644
--- a/lib/python/pygrass/raster/history.py
+++ b/lib/python/pygrass/raster/history.py
@@ -11,28 +11,6 @@ import datetime
 
 class History(object):
     """History class help to manage all the metadata of a raster map
-
-    >>> import grass.lib.gis as libgis
-    >>> libgis.G_gisinit('')
-    >>> hist = History('elevation')
-    >>> hist.read()
-    >>> hist.creator
-    'helena'
-    >>> hist.src1
-    ''
-    >>> hist.src2
-    ''
-    >>> hist.keyword
-    'generated by r.proj'
-    >>> hist.date
-    datetime.datetime(2006, 11, 7, 1, 9, 51)
-    >>> hist.mapset
-    'PERMANENT'
-    >>> hist.maptype
-    'raster'
-    >>> hist.title
-    'elev_ned10m'
-
     """
     def __init__(self, name, mapset='', mtype='',
                  creator='', src1='', src2='', keyword='',
@@ -49,20 +27,29 @@ class History(object):
         self.keyword = keyword
         self.date = date
         self.title = title
+        self.attrs = ['name', 'mapset', 'mtype', 'creator', 'src1', 'src2',
+                      'keyword', 'date', 'title']
 
     def __repr__(self):
-        attrs = ['name', 'mapset', 'mtype', 'creator', 'src1', 'src2',
-                 'keyword', 'date', 'title']
-        return "History(%s)" % ', '.join(["%s=%r" % (attr, getattr(self, attr))
-                                          for attr in attrs])
+        return "History(%s)" % ', '.join(["%s=%r" % (self.attr, getattr(self, attr))
+                                          for attr in self.attrs])
 
     def __del__(self):
         """Rast_free_history"""
         pass
+        
+    def __eq__(self, hist):
+        for attr in self.attrs:
+           if getattr(self, attr) != getattr(hist, attr):
+                return False
+        return True
 
     def __len__(self):
         return self.length()
 
+    def __iter__(self):
+        return ((attr, getattr(self, attr)) for attr in self.attrs)
+
     #----------------------------------------------------------------------
     #libraster.HIST_CREATOR
     def _get_creator(self):
@@ -125,7 +112,10 @@ class History(object):
         date_str = libraster.Rast_get_history(self.c_hist,
                                               libraster.HIST_MAPID)
         if date_str:
-            return datetime.datetime.strptime(date_str, self.date_fmt)
+            try:
+                return datetime.datetime.strptime(date_str, self.date_fmt)
+            except:
+                return date_str
 
     def _set_date(self, datetimeobj):
         if datetimeobj:
@@ -234,17 +224,9 @@ class History(object):
         obtain all the information of map. ::
 
             >>> import grass.lib.gis as libgis
-            >>> libgis.G_gisinit('')
             >>> import ctypes
             >>> import grass.lib.raster as libraster
             >>> hist = libraster.History()
-            >>> libraster.Rast_read_history(ctypes.c_char_p('elevation'),
-            ...                             ctypes.c_char_p(''),
-            ...                             ctypes.byref(hist))
-            0
-            >>> libraster.Rast_get_history(ctypes.byref(hist),
-            ...                            libraster.HIST_MAPID)
-            'Tue Nov  7 01:09:51 2006'
 
         ..
         """
diff --git a/lib/python/pygrass/raster/testsuite/data/a.png b/lib/python/pygrass/raster/testsuite/data/a.png
new file mode 100644
index 0000000..13bb5db
Binary files /dev/null and b/lib/python/pygrass/raster/testsuite/data/a.png differ
diff --git a/lib/python/pygrass/raster/testsuite/data/b.png b/lib/python/pygrass/raster/testsuite/data/b.png
new file mode 100644
index 0000000..1ce5c0c
Binary files /dev/null and b/lib/python/pygrass/raster/testsuite/data/b.png differ
diff --git a/lib/python/pygrass/raster/testsuite/data/c.png b/lib/python/pygrass/raster/testsuite/data/c.png
new file mode 100644
index 0000000..0325ccf
Binary files /dev/null and b/lib/python/pygrass/raster/testsuite/data/c.png differ
diff --git a/lib/python/pygrass/raster/testsuite/data/d.png b/lib/python/pygrass/raster/testsuite/data/d.png
new file mode 100644
index 0000000..91f378a
Binary files /dev/null and b/lib/python/pygrass/raster/testsuite/data/d.png differ
diff --git a/lib/python/pygrass/raster/testsuite/data/e.png b/lib/python/pygrass/raster/testsuite/data/e.png
new file mode 100644
index 0000000..91f378a
Binary files /dev/null and b/lib/python/pygrass/raster/testsuite/data/e.png differ
diff --git a/lib/python/pygrass/raster/testsuite/data/geology_cats b/lib/python/pygrass/raster/testsuite/data/geology_cats
new file mode 100644
index 0000000..bca265f
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/data/geology_cats
@@ -0,0 +1,16 @@
+A:11
+B:12
+C:13
+D:14
+E:21
+F:22
+G:23
+H:24
+I:31
+J:32
+K:33
+L:34
+M:41
+n:42
+O:43
+P:44
\ No newline at end of file
diff --git a/lib/python/pygrass/raster/testsuite/test_category.py b/lib/python/pygrass/raster/testsuite/test_category.py
new file mode 100644
index 0000000..3895919
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_category.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon Sep 15 17:09:40 2014
+
+ at author: lucadelu
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.raster import RasterRow
+from grass.pygrass.raster.category import Category
+from grass.script.core import tempfile
+
+
+class RasterCategoryTestCase(TestCase):
+
+    name = "RasterCategoryTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create test raster map and region"""
+        cls.use_temp_region()
+        cls.runModule("g.region", n=40, s=0, e=40, w=0, res=10)
+        cls.runModule("r.mapcalc", expression="%s = row() + (10.0 * col())"%(cls.name),
+                                   overwrite=True)
+        cls.runModule("r.support", map=cls.name,
+                        title="A test map",
+                        history="Generated by r.mapcalc",
+                        description="This is a test map")
+        cats="""11:A
+                12:B
+                13:C
+                14:D
+                21:E
+                22:F
+                23:G
+                24:H
+                31:I
+                32:J
+                33:K
+                34:L
+                41:M
+                42:n
+                43:O
+                44:P"""
+
+        cls.runModule("r.category", rules="-", map=cls.name,
+                                 stdin_=cats, separator=":")
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='raster', 
+                      name=cls.name)
+        cls.del_temp_region()
+
+    def testCategory(self):
+        r = RasterRow(self.name)
+        r.open()
+        cats = r.cats
+        cats1 = Category(self.name)
+        cats1.read()
+        self.assertEqual(cats, cats1)
+        r.close()
+
+    def testFirstCat(self):
+        cat0 = ('A', 11, None)
+        cat7 = ('H', 24, None)
+        cat15 = ('P', 44, None)
+        cats = Category(self.name)
+        cats.read()
+        self.assertEqual(cats[0], cat0)
+        self.assertEqual(cats[7], cat7)
+        self.assertEqual(cats[15], cat15)
+
+    def testWrite(self):
+        tmpfile = tempfile(False)
+        cats = Category(self.name)
+        cats.read()
+        cats.write_rules(tmpfile)
+        self.assertFilesEqualMd5(tmpfile, 'data/geology_cats')
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/raster/testsuite/test_doctests.py b/lib/python/pygrass/raster/testsuite/test_doctests.py
new file mode 100644
index 0000000..220dee9
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_doctests.py
@@ -0,0 +1,74 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.raster as pgrass
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+
+
+    from grass.pygrass.modules import Module
+    Module("g.region", n=40, s=0, e=40, w=0, res=10)
+    Module("r.mapcalc", expression="%s = row() + (10 * col())"%\
+                                   (pgrass.test_raster_name),
+                             overwrite=True)
+    Module("r.support", map=pgrass.test_raster_name,
+                        title="A test map",
+                        history="Generated by r.mapcalc",
+                        description="This is a test map")
+    cats="""11:A
+            12:B
+            13:C
+            14:D
+            21:E
+            22:F
+            23:G
+            24:H
+            31:I
+            32:J
+            33:K
+            34:L
+            41:M
+            42:n
+            43:O
+            44:P"""
+    Module("r.category", rules="-", map=pgrass.test_raster_name,
+           stdin_=cats, separator=":")
+
+    Module("r.mapcalc", expression="%s = row() + (10 * col())"%\
+                                   (pgrass.abstract.test_raster_name),
+                             overwrite=True)
+
+    tests.addTests(doctest.DocTestSuite(pgrass))
+    tests.addTests(doctest.DocTestSuite(pgrass.abstract))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/raster/testsuite/test_history.py b/lib/python/pygrass/raster/testsuite/test_history.py
new file mode 100644
index 0000000..051f5fd
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_history.py
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Mon Sep 15 17:09:40 2014
+
+ at author: lucadelu
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.raster import RasterRow
+from grass.pygrass.raster.history import History
+
+
+class RasterHistoryTestCate(TestCase):
+
+    name = "RasterCategoryTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create test raster map and region"""
+        cls.use_temp_region()
+        cls.runModule("g.region", n=40, s=0, e=40, w=0, res=10)
+        cls.runModule("r.mapcalc", expression="%s = row() + (10 * col())"%(cls.name),
+                                   overwrite=True)
+        cls.runModule("r.support", map=cls.name,
+                        title="A test map",
+                        history="Generated by r.mapcalc",
+                        description="This is a test map")
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='raster', 
+                      name=cls.name)
+        cls.del_temp_region()
+
+    def testHistory(self):
+        r = RasterRow(self.name)
+        r.open("r")
+        hist = r.hist
+        
+        self.assertEqual(hist.title, "A test map")
+        self.assertEqual(hist.keyword,  "This is a test map")
+        
+        hist1 = History(self.name)
+        hist1.read()
+
+        self.assertEqual(hist1.title, "A test map")
+        self.assertEqual(hist1.keyword,  "This is a test map")
+        
+        self.assertEqual(hist, hist1)
+        self.assertEqual(hist.creator, hist1.creator)
+        hist1.creator = "Markus"
+        self.assertNotEqual(hist.creator, hist1.creator)
+        r.close()
+        
+        hist1.title = "No such title"
+        hist1.keyword = "No such description"
+        hist1.src1 = "No such source 1"
+        hist1.src2 = "No such source 2"
+        hist1.write()
+        
+        r.open("r")
+        hist = r.hist
+
+        self.assertEqual(hist.title, "No such title")
+        self.assertEqual(hist.keyword,  "No such description")
+        self.assertEqual(hist.creator, "Markus")
+        self.assertEqual(hist.creator, "Markus")
+        self.assertEqual(hist.src1, "No such source 1")
+        self.assertEqual(hist.src2, "No such source 2")
+        r.close()
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/raster/testsuite/test_numpy.py b/lib/python/pygrass/raster/testsuite/test_numpy.py
new file mode 100644
index 0000000..ae2cc2a
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_numpy.py
@@ -0,0 +1,56 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Jul 30 18:27:22 2015
+
+ at author: lucadelu
+"""
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from numpy.random import random
+from grass.pygrass.raster import raster2numpy, numpy2raster, RasterRow
+
+
+def check_raster(name):
+    r = RasterRow(name)
+    try:
+        r.open(mode='r')
+        r.close()
+        return True
+    except:
+        return False
+
+
+class NumpyTestCase(TestCase):
+
+    name = "RasterRowTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create test raster map and region"""
+        cls.use_temp_region()
+        cls.runModule("g.region", n=40, s=0, e=60, w=0, res=1)
+        cls.runModule("r.mapcalc", expression="%s = float(row() + (10.0 * col()))"%(cls.name),
+                                   overwrite=True)
+        cls.numpy_obj = raster2numpy(cls.name)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='raster',
+                      name=cls.name)
+        cls.del_temp_region()
+
+    def test_type(self):
+        self.assertTrue(str(self.numpy_obj.dtype), 'float32')
+
+    def test_len(self):
+        self.assertTrue(len(self.numpy_obj), 40)
+        self.assertTrue(len(self.numpy_obj[0]), 60)
+
+    def test_write(self):
+        ran = random([40, 60])
+        numpy2raster(ran, 'FCELL', self.name, True)
+        self.assertTrue(check_raster(self.name))
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/raster/testsuite/test_raster.py b/lib/python/pygrass/raster/testsuite/test_raster.py
new file mode 100644
index 0000000..a9eb3fd
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_raster.py
@@ -0,0 +1,83 @@
+# -*- coding: utf-8 -*-
+from grass.exceptions import OpenError
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from unittest import skip
+
+from grass.pygrass.raster import RasterRow
+
+
+class RasterRowTestCase(TestCase):
+
+    name = "RasterRowTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create test raster map and region"""
+        cls.use_temp_region()
+        cls.runModule("g.region", n=40, s=0, e=40, w=0, res=10)
+        cls.runModule("r.mapcalc", expression="%s = row() + (10.0 * col())"%(cls.name),
+                                   overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='raster', 
+                      name=cls.name)
+        cls.del_temp_region()
+
+    def test_type(self):
+        r = RasterRow(self.name)
+        r.open(mode='r')
+        self.assertTrue(r.mtype,'DCELL')
+        r.close()
+
+    def test_isopen(self):
+        r = RasterRow(self.name)
+        self.assertFalse(r.is_open())
+        r.open(mode='r')
+        self.assertTrue(r.is_open())
+        r.close()
+        self.assertFalse(r.is_open())
+
+    def test_name(self):
+        r = RasterRow(self.name)
+        r.open(mode='r')
+        self.assertEqual(r.name, self.name)
+        fullname = "{name}@{mapset}".format(name=r.name, mapset=r.mapset)
+        self.assertEqual(r.fullname(), fullname)
+        r.close()
+
+    def test_exist(self):
+        notexist = RasterRow(self.name + 'notexist')
+        self.assertFalse(notexist.exist())
+        exist = RasterRow(self.name)
+        self.assertTrue(exist.exist())
+
+    def test_open_r(self):
+        notexist = RasterRow(self.name + 'notexist')
+        with self.assertRaises(OpenError):
+            # raster does not exist
+            notexist.open(mode='r')
+        r = RasterRow(self.name)
+        r.open(mode='r', mtype='FCELL')
+        # ignore the mtype if is open in read mode
+        self.assertEqual(r.mtype, 'DCELL')
+        r.close()
+
+    def test_open_w(self):
+        r = RasterRow(self.name)
+        with self.assertRaises(OpenError):
+            # raster type is not defined!
+            r.open(mode='w')
+        with self.assertRaises(OpenError):
+            # raster already exist
+            r.open(mode='w', mtype='DCELL')
+        # open in write mode and overwrite
+        r.open(mode='w', mtype='DCELL', overwrite=True)
+        self.assertTrue(r.mtype, 'DCELL')
+        r.close()
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/raster/testsuite/test_raster_img.py b/lib/python/pygrass/raster/testsuite/test_raster_img.py
new file mode 100644
index 0000000..733da0e
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_raster_img.py
@@ -0,0 +1,201 @@
+# -*- coding: utf-8
+import numpy as np
+import unittest
+import ctypes
+from unittest import skip
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.raster import RasterRow
+from grass.pygrass.raster import raster2numpy_img
+from grass.pygrass.gis.region import Region
+from grass.script.core import tempfile
+
+has_PyQt4=False
+try:
+    from PyQt4.QtCore import *
+    from PyQt4.QtGui import *
+    has_PyQt4=True
+except:
+    pass
+
+class RasterRowImgTestCase(TestCase):
+
+    name = "RasterRowImgTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create test raster map and region"""
+        cls.use_temp_region()
+        cls.runModule("g.region", n=60, s=0, e=40, w=0, res=0.1)
+        cls.runModule("r.mapcalc", expression="%s = if(row() >= 10 && row() <= 60, null(), row()  + (10.0 * col()))"%(cls.name),
+                                   overwrite=True)
+        cls.runModule("r.colors", map=cls.name, color="elevation")
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='raster',
+                      name=cls.name)
+        cls.del_temp_region()
+
+    @unittest.skipIf(has_PyQt4 is False, "Require PyQt4")
+    def test_resampling_to_QImg_1(self):
+
+        region = Region()
+        region.from_rast(self.name)
+        region.cols = 320
+        region.rows = 240
+        region.adjust()
+
+        tmpfile = tempfile(False)
+        tmpfile = tmpfile + ".png"
+
+        a = raster2numpy_img(self.name, region)
+
+        image = QImage(a.data, region.cols, region.rows,
+                       QImage.Format_ARGB32)
+        #image.save("data/a.png")
+        image.save(tmpfile)
+        self.assertFilesEqualMd5(tmpfile, "data/a.png")
+
+    @unittest.skipIf(has_PyQt4 is False, "Require PyQt4")
+    def test_resampling_to_QImg_2(self):
+
+        region = Region()
+        region.from_rast(self.name)
+        region.cols = 640
+        region.rows = 480
+        region.adjust()
+
+        tmpfile = tempfile(False)
+        tmpfile = tmpfile + ".png"
+
+        # With array as argument
+        array = np.ndarray((region.rows*region.cols*4), np.uint8)
+
+        raster2numpy_img(rastname=self.name, region=region,
+                         color="ARGB", array=array)
+
+        image = QImage(array.data,
+                       region.cols, region.rows, QImage.Format_ARGB32)
+        #image.save("data/b.png")
+        image.save(tmpfile)
+        self.assertFilesEqualMd5(tmpfile, "data/b.png")
+
+    @unittest.skipIf(has_PyQt4 is False, "Require PyQt4")
+    def test_resampling_to_QImg_large(self):
+
+        region = Region()
+        region.from_rast(self.name)
+        region.cols = 4000
+        region.rows = 3000
+        region.adjust()
+
+        tmpfile = tempfile(False)
+        tmpfile = tmpfile + ".png"
+
+        # With array as argument
+        array = np.ndarray((region.rows*region.cols*4), np.uint8)
+
+        raster2numpy_img(rastname=self.name, region=region,
+                         color="ARGB", array=array)
+
+        image = QImage(array.data,
+                       region.cols, region.rows, QImage.Format_ARGB32)
+        #image.save("data/c.png")
+        image.save(tmpfile)
+        self.assertFilesEqualMd5(tmpfile, "data/c.png")
+
+    @unittest.skipIf(has_PyQt4 is False, "Require PyQt4")
+    def test_resampling_to_QImg_3(self):
+
+        region = Region()
+        region.from_rast(self.name)
+        region.cols = 400
+        region.rows = 300
+        region.adjust()
+
+        tmpfile = tempfile(False)
+        tmpfile = tmpfile + ".png"
+
+        # With array as argument
+        array = np.ndarray((region.rows*region.cols*4), np.uint8)
+
+        raster2numpy_img(rastname=self.name, region=region,
+                         color="RGB", array=array)
+
+        image = QImage(array.data,
+                       region.cols, region.rows, QImage.Format_RGB32)
+        #image.save("data/d.png")
+        image.save(tmpfile)
+        self.assertFilesEqualMd5(tmpfile, "data/d.png")
+
+    @unittest.skipIf(has_PyQt4 is False, "Require PyQt4")
+    def test_resampling_to_QImg_4(self):
+
+        region = Region()
+        region.from_rast(self.name)
+        region.cols = 400
+        region.rows = 300
+        region.adjust()
+
+        tmpfile = tempfile(False)
+        tmpfile = tmpfile + ".png"
+
+        array = raster2numpy_img(rastname=self.name, region=region,
+                                 color="RGB")
+
+        image = QImage(array.data,
+                       region.cols, region.rows, QImage.Format_RGB32)
+        #image.save("data/e.png")
+        image.save(tmpfile)
+        self.assertFilesEqualMd5(tmpfile, "data/e.png")
+
+    def test_resampling_to_numpy_img_1(self):
+
+        region = Region()
+        region.ewres = 10
+        region.nsres = 10
+        region.adjust(rows=True, cols=True)
+
+        a = raster2numpy_img(self.name, region)
+
+        self.assertEqual(len(a), region.rows * region.cols*4)
+
+    def test_resampling_to_numpy_img_2(self):
+
+        region = Region()
+        region.ewres = 1
+        region.nsres = 1
+        region.adjust(rows=True, cols=True)
+
+        a = raster2numpy_img(self.name, region)
+
+        self.assertEqual(len(a), region.rows * region.cols*4)
+
+    def test_resampling_to_numpy_img_3(self):
+
+        region = Region()
+        region.ewres = 0.4
+        region.nsres = 0.4
+        region.adjust(rows=True, cols=True)
+
+        a = raster2numpy_img(self.name, region, color="GRAY1")
+
+        self.assertEqual(len(a), region.rows * region.cols*1)
+
+    def test_resampling_to_numpy_img_4(self):
+
+        region = Region()
+        region.ewres = 0.1
+        region.nsres = 0.1
+        region.adjust(rows=True, cols=True)
+
+        a = raster2numpy_img(self.name, region, color="GRAY2")
+
+        self.assertEqual(len(a), region.rows * region.cols*1)
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/raster/testsuite/test_raster_region.py b/lib/python/pygrass/raster/testsuite/test_raster_region.py
new file mode 100644
index 0000000..67f44f4
--- /dev/null
+++ b/lib/python/pygrass/raster/testsuite/test_raster_region.py
@@ -0,0 +1,113 @@
+# -*- coding: utf-8
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from unittest import skip
+
+from grass.pygrass.raster import RasterRow
+from grass.pygrass.raster import raster2numpy
+from grass.pygrass.gis.region import Region
+
+class RasterRowRegionTestCase(TestCase):
+
+    name = "RasterRowRegionTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create test raster map and region"""
+        cls.use_temp_region()
+        cls.runModule("g.region", n=40, s=0, e=40, w=0, res=10)
+        cls.runModule("r.mapcalc", expression="%s = row() + (10.0 * col())"%(cls.name),
+                                   overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='raster', 
+                      name=cls.name)
+        cls.del_temp_region()
+
+    def test_resampling_1(self):
+        
+        region = Region()
+        
+        region.ewres = 4
+        region.nsres = 4
+        region.north = 30
+        region.south = 10
+        region.east = 30
+        region.west = 10
+        region.adjust(rows=True, cols=True)
+        
+        rast = RasterRow(self.name)
+        rast.set_region(region)
+        rast.open(mode='r')
+        
+        self.assertItemsEqual(rast[0].tolist(), [22,22,22,22,22,32,32,32,32,32])        
+        self.assertItemsEqual(rast[5].tolist(), [23,23,23,23,23,33,33,33,33,33])
+        
+        rast.close()
+
+    def test_resampling_2(self):
+        
+        region = Region()
+        
+        region.ewres = 5
+        region.nsres = 5
+        region.north = 60
+        region.south = -20
+        region.east = 60
+        region.west = -20
+        region.adjust(rows=True, cols=True)
+        
+        rast = RasterRow(self.name)
+        rast.set_region(region)
+        rast.open(mode='r')
+        
+        """
+        [nan, nan, nan, nan, nan, nan, nan, nan]
+        [nan, nan, nan, nan, nan, nan, nan, nan]
+        [nan, nan, 11.0, 21.0, 31.0, 41.0, nan, nan]
+        [nan, nan, 12.0, 22.0, 32.0, 42.0, nan, nan]
+        [nan, nan, 13.0, 23.0, 33.0, 43.0, nan, nan]
+        [nan, nan, 14.0, 24.0, 34.0, 44.0, nan, nan]
+        [nan, nan, nan, nan, nan, nan, nan, nan]
+        [nan, nan, nan, nan, nan, nan, nan, nan]
+        """
+
+        self.assertItemsEqual(rast[2].tolist()[2:6], [11.,21.,31.,41.])        
+        self.assertItemsEqual(rast[5].tolist()[2:6], [14.,24.,34.,44.])
+        
+        rast.close()
+
+    def test_resampling_to_numpy(self):
+        
+        region = Region()
+        region.ewres = 0.1
+        region.nsres = 0.1
+        region.adjust()
+        region.set_raster_region()
+        
+        a = raster2numpy(self.name)
+        
+        self.assertEqual(len(a), 400)
+        
+        region.ewres = 1
+        region.nsres = 1
+        region.adjust()
+        region.set_raster_region()
+        
+        a = raster2numpy(self.name)
+        
+        self.assertEqual(len(a), 40)
+
+        region.ewres = 5
+        region.nsres = 5
+        region.adjust()
+        region.set_raster_region()
+        
+        a = raster2numpy(self.name)
+        
+        self.assertEqual(len(a), 8)
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/rpc/Makefile b/lib/python/pygrass/rpc/Makefile
new file mode 100644
index 0000000..d30b8de
--- /dev/null
+++ b/lib/python/pygrass/rpc/Makefile
@@ -0,0 +1,32 @@
+MODULE_TOPDIR = ../../../..
+
+include $(MODULE_TOPDIR)/include/Make/Other.make
+include $(MODULE_TOPDIR)/include/Make/Python.make
+include $(MODULE_TOPDIR)/include/Make/Doxygen.make
+
+PYDIR = $(ETC)/python
+GDIR = $(PYDIR)/grass
+PGDIR = $(GDIR)/pygrass
+DSTDIR= $(PGDIR)/rpc
+
+MODULES = base
+
+PYFILES := $(patsubst %,$(DSTDIR)/%.py,$(MODULES) __init__)
+PYCFILES := $(patsubst %,$(DSTDIR)/%.pyc,$(MODULES) __init__)
+
+default: $(PYFILES) $(PYCFILES) $(GDIR)/__init__.py $(GDIR)/__init__.pyc
+
+$(PYDIR):
+	$(MKDIR) $@
+
+$(GDIR): | $(PYDIR)
+	$(MKDIR) $@
+
+$(DSTDIR): | $(GDIR)
+	$(MKDIR) $@
+
+$(DSTDIR)/%: % | $(DSTDIR)
+	$(INSTALL_DATA) $< $@
+
+#doxygen:
+DOXNAME = pythonpygrass
diff --git a/lib/python/pygrass/rpc/__init__.py b/lib/python/pygrass/rpc/__init__.py
new file mode 100644
index 0000000..e8ae4e1
--- /dev/null
+++ b/lib/python/pygrass/rpc/__init__.py
@@ -0,0 +1,450 @@
+# -*- coding: utf-8 -*-
+"""
+Fast and exit-safe interface to PyGRASS Raster and Vector layer
+using multiprocessing
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+
+import time
+import threading
+import sys
+from multiprocessing import Process, Lock, Pipe
+from ctypes import *
+
+from grass.exceptions import FatalError
+from grass.pygrass.vector import *
+from grass.pygrass.raster import *
+import grass.lib.gis as libgis
+from .base import RPCServerBase
+from grass.pygrass.gis.region import Region
+import grass.pygrass.utils as utils
+import logging
+
+###############################################################################
+###############################################################################
+
+class RPCDefs(object):
+    # Function identifier and index
+    STOP = 0
+    GET_VECTOR_TABLE_AS_DICT = 1
+    GET_VECTOR_FEATURES_AS_WKB = 2
+    GET_RASTER_IMAGE_AS_NP = 3
+    G_FATAL_ERROR = 14
+
+
+def _get_raster_image_as_np(lock, conn, data):
+    """Convert a raster map into an image and return
+       a numpy array with RGB or Gray values.
+
+       :param lock: A multiprocessing.Lock instance
+       :param conn: A multiprocessing.Pipe instance used to send True or False
+       :param data: The list of data entries [function_id, raster_name, extent, color]
+    """
+    array = None
+    try:
+        name = data[1]
+        mapset = data[2]
+        extent = data[3]
+        color = data[4]
+
+        mapset = utils.get_mapset_raster(name, mapset)
+
+        if not mapset:
+            raise ValueError("Unable to find raster map <%s>"%(name))
+
+        rast = RasterRow(name, mapset)
+
+        if rast.exist():
+
+            reg = Region()
+            reg.from_rast(name)
+
+            if extent is not None:
+                if "north" in extent:
+                    reg.north = extent["north"]
+                if "south" in extent:
+                    reg.south = extent["south"]
+                if "east" in extent:
+                    reg.east =  extent["east"]
+                if "west" in extent:
+                    reg.west =  extent["west"]
+                if "rows" in extent:
+                    reg.rows =  extent["rows"]
+                if "cols" in extent:
+                    reg.cols =  extent["cols"]
+                reg.adjust()
+
+            array = raster2numpy_img(name, reg, color)
+    except:
+        raise
+    finally:
+        conn.send(array)
+
+def _get_vector_table_as_dict(lock, conn, data):
+    """Get the table of a vector map layer as dictionary
+
+       :param lock: A multiprocessing.Lock instance
+       :param conn: A multiprocessing.Pipe instance used to send True or False
+       :param data: The list of data entries [function_id, name, mapset, where]
+
+    """
+    ret = None
+    try:
+        name = data[1]
+        mapset = data[2]
+        where = data[3]
+
+        mapset = utils.get_mapset_vector(name, mapset)
+
+        if not mapset:
+            raise ValueError("Unable to find vector map <%s>"%(name))
+
+        layer = VectorTopo(name, mapset)
+
+        if layer.exist() is True:
+            layer.open("r")
+            columns = None
+            table = None
+            if layer.table is not None:
+                columns = layer.table.columns
+                table = layer.table_to_dict(where=where)
+            layer.close()
+
+            ret = {}
+            ret["table"] = table
+            ret["columns"] = columns
+    except:
+        raise
+    finally:
+        conn.send(ret)
+
+def _get_vector_features_as_wkb_list(lock, conn, data):
+    """Return vector layer features as wkb list
+
+       supported feature types:
+       point, centroid, line, boundary, area
+
+       :param lock: A multiprocessing.Lock instance
+       :param conn: A multiprocessing.Pipe instance used to send True or False
+       :param data: The list of data entries [function_id,name,mapset,extent,
+                                              feature_type, field]
+
+    """
+    wkb_list = None
+    try:
+        name = data[1]
+        mapset = data[2]
+        extent = data[3]
+        feature_type = data[4]
+        field = data[5]
+        bbox = None
+
+        mapset = utils.get_mapset_vector(name, mapset)
+
+        if not mapset:
+            raise ValueError("Unable to find vector map <%s>"%(name))
+
+        layer = VectorTopo(name, mapset)
+
+        if layer.exist() is True:
+            if extent is not None:
+                bbox = basic.Bbox(north=extent["north"],
+                                  south=extent["south"],
+                                  east=extent["east"],
+                                  west=extent["west"])
+
+            layer.open("r")
+            if feature_type.lower() == "area":
+                wkb_list = layer.areas_to_wkb_list(bbox=bbox, field=field)
+            else:
+                wkb_list = layer.features_to_wkb_list(bbox=bbox,
+                                                      feature_type=feature_type,
+                                                      field=field)
+            layer.close()
+    except:
+        raise
+    finally:
+        conn.send(wkb_list)
+
+###############################################################################
+
+def _fatal_error(lock, conn, data):
+    """Calls G_fatal_error()"""
+    libgis.G_fatal_error("Fatal Error in C library server")
+
+
+###############################################################################
+
+def _stop(lock, conn, data):
+    conn.close()
+    lock.release()
+    sys.exit()
+
+###############################################################################
+
+def data_provider_server(lock, conn):
+    """The PyGRASS data provider server designed to be a target for
+       multiprocessing.Process
+
+       :param lock: A multiprocessing.Lock
+       :param conn: A multiprocessing.Pipe
+    """
+
+    def error_handler(data):
+        """This function will be called in case of a fatal error in libgis"""
+        # sys.stderr.write("Error handler was called\n")
+        # We send an exeption that will be handled in
+        # the parent process, then close the pipe
+        # and release any possible lock
+        conn.send(FatalError("G_fatal_error() was called in the server process"))
+        conn.close()
+        lock.release()
+
+    CALLBACK = CFUNCTYPE(c_void_p, c_void_p)
+    CALLBACK.restype = c_void_p
+    CALLBACK.argtypes = c_void_p
+
+    cerror_handler = CALLBACK(error_handler)
+
+    libgis.G_add_error_handler(cerror_handler, None)
+
+    # Crerate the function array
+    functions = [0]*15
+    functions[RPCDefs.GET_VECTOR_TABLE_AS_DICT] = _get_vector_table_as_dict
+    functions[RPCDefs.GET_VECTOR_FEATURES_AS_WKB] = _get_vector_features_as_wkb_list
+    functions[RPCDefs.GET_RASTER_IMAGE_AS_NP] = _get_raster_image_as_np
+    functions[RPCDefs.STOP] = _stop
+    functions[RPCDefs.G_FATAL_ERROR] = _fatal_error
+
+    while True:
+        # Avoid busy waiting
+        conn.poll(None)
+        data = conn.recv()
+        lock.acquire()
+        functions[data[0]](lock, conn, data)
+        lock.release()
+
+test_vector_name="data_provider_vector_map"
+test_raster_name="data_provider_raster_map"
+
+class DataProvider(RPCServerBase):
+    """Fast and exit-safe interface to PyGRASS data delivery functions
+
+    """
+    def __init__(self):
+        RPCServerBase.__init__(self)
+
+    def start_server(self):
+        """This function must be re-implemented in the subclasses
+        """
+        self.client_conn, self.server_conn = Pipe(True)
+        self.lock = Lock()
+        self.server = Process(target=data_provider_server, args=(self.lock,
+                                                             self.server_conn))
+        self.server.daemon = True
+        self.server.start()
+
+    def get_raster_image_as_np(self, name, mapset=None, extent=None, color="RGB"):
+        """Return the attribute table of a vector map as dictionary.
+
+           See documentation of: pygrass.raster.raster2numpy_img
+
+           Usage:
+
+           .. code-block:: python
+
+            >>> from grass.pygrass.rpc import DataProvider
+            >>> provider = DataProvider()
+            >>> ret = provider.get_raster_image_as_np(name=test_raster_name)
+            >>> len(ret)
+            64
+
+            >>> extent = {"north":30, "south":10, "east":30, "west":10,
+            ...           "rows":2, "cols":2}
+            >>> ret = provider.get_raster_image_as_np(name=test_raster_name,
+            ...                                       extent=extent)
+            >>> len(ret)
+            16
+
+            >>> extent = {"rows":3, "cols":1}
+            >>> ret = provider.get_raster_image_as_np(name=test_raster_name,
+            ...                                       extent=extent)
+            >>> len(ret)
+            12
+
+            >>> extent = {"north":100, "south":10, "east":30, "west":10,
+            ...           "rows":2, "cols":2}
+            >>> ret = provider.get_raster_image_as_np(name=test_raster_name,
+            ...                                       extent=extent)
+
+            >>> provider.stop()
+
+            >>> extent = {"rows":3, "cols":1}
+            >>> ret = provider.get_raster_image_as_np(name=test_raster_name,
+            ...                                       extent=extent)
+            >>> len(ret)
+            12
+
+
+            ..
+        """
+        self.check_server()
+        self.client_conn.send([RPCDefs.GET_RASTER_IMAGE_AS_NP,
+                               name, mapset, extent, color])
+        return self.safe_receive("get_raster_image_as_np")
+
+    def get_vector_table_as_dict(self, name, mapset=None, where=None):
+        """Return the attribute table of a vector map as dictionary.
+
+           See documentation of: pygrass.vector.VectorTopo::table_to_dict
+
+           Usage:
+
+           .. code-block:: python
+
+            >>> from grass.pygrass.rpc import DataProvider
+            >>> provider = DataProvider()
+            >>> ret = provider.get_vector_table_as_dict(name=test_vector_name)
+            >>> ret["table"]
+            {1: [1, u'point', 1.0], 2: [2, u'line', 2.0], 3: [3, u'centroid', 3.0]}
+            >>> ret["columns"]
+            Columns([(u'cat', u'INTEGER'), (u'name', u'varchar(50)'), (u'value', u'double precision')])
+            >>> ret = provider.get_vector_table_as_dict(name=test_vector_name,
+            ...                                           where="value > 1")
+            >>> ret["table"]
+            {2: [2, u'line', 2.0], 3: [3, u'centroid', 3.0]}
+            >>> ret["columns"]
+            Columns([(u'cat', u'INTEGER'), (u'name', u'varchar(50)'), (u'value', u'double precision')])
+            >>> provider.get_vector_table_as_dict(name="no_map",
+            ...                                   where="value > 1")
+            >>> provider.stop()
+
+            ..
+        """
+        self.check_server()
+        self.client_conn.send([RPCDefs.GET_VECTOR_TABLE_AS_DICT,
+                               name, mapset, where])
+        return self.safe_receive("get_vector_table_as_dict")
+
+    def get_vector_features_as_wkb_list(self, name, mapset=None, extent=None,
+                                        feature_type="point", field=1):
+        """Return the features of a vector map as wkb list.
+
+           :param extent: A dictionary of {"north":double, "south":double,
+                                           "east":double, "west":double}
+           :param feature_type: point, centroid, line, boundary or area
+
+           See documentation: pygrass.vector.VectorTopo::features_to_wkb_list
+                              pygrass.vector.VectorTopo::areas_to_wkb_list
+
+
+           Usage:
+
+           .. code-block:: python
+
+            >>> from grass.pygrass.rpc import DataProvider
+            >>> provider = DataProvider()
+            >>> wkb = provider.get_vector_features_as_wkb_list(name=test_vector_name,
+            ...                                                extent=None,
+            ...                                                feature_type="point")
+            >>> for entry in wkb:
+            ...     f_id, cat, string = entry
+            ...     print(f_id, cat, len(string))
+            1 1 21
+            2 1 21
+            3 1 21
+
+            >>> extent = {"north":6.6, "south":5.5, "east":14.5, "west":13.5}
+            >>> wkb = provider.get_vector_features_as_wkb_list(name=test_vector_name,
+            ...                                                extent=extent,
+            ...                                                feature_type="point")
+            >>> for entry in wkb:
+            ...     f_id, cat, string = entry
+            ...     print(f_id, cat, len(string))
+            3 1 21
+
+            >>> wkb = provider.get_vector_features_as_wkb_list(name=test_vector_name,
+            ...                                                extent=None,
+            ...                                                feature_type="line")
+            >>> for entry in wkb:
+            ...     f_id, cat, string = entry
+            ...     print(f_id, cat, len(string))
+            4 2 57
+            5 2 57
+            6 2 57
+
+
+            >>> wkb = provider.get_vector_features_as_wkb_list(name=test_vector_name,
+            ...                                                extent=None,
+            ...                                                feature_type="centroid")
+            >>> for entry in wkb:
+            ...     f_id, cat, string = entry
+            ...     print(f_id, cat, len(string))
+            19 3 21
+            18 3 21
+            20 3 21
+            21 3 21
+
+            >>> wkb = provider.get_vector_features_as_wkb_list(name=test_vector_name,
+            ...                                                extent=None,
+            ...                                                feature_type="area")
+            >>> for entry in wkb:
+            ...     f_id, cat, string = entry
+            ...     print(f_id, cat, len(string))
+            1 3 225
+            2 3 141
+            3 3 93
+            4 3 141
+
+            >>> wkb = provider.get_vector_features_as_wkb_list(name=test_vector_name,
+            ...                                                extent=None,
+            ...                                                feature_type="boundary")
+            >>> for entry in wkb:
+            ...     f_id, cat, string = entry
+            ...     print(f_id, cat, len(string))
+            10 None 41
+            7 None 41
+            8 None 41
+            9 None 41
+            11 None 89
+            12 None 41
+            14 None 41
+            13 None 41
+            17 None 41
+            15 None 41
+            16 None 41
+
+            >>> provider.stop()
+
+            ..
+        """
+        self.check_server()
+        self.client_conn.send([RPCDefs.GET_VECTOR_FEATURES_AS_WKB,
+                               name, mapset, extent, feature_type, field])
+        return self.safe_receive("get_vector_features_as_wkb_list")
+
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    from grass.pygrass.modules import Module
+    Module("g.region", n=40, s=0, e=40, w=0, res=10)
+    Module("r.mapcalc", expression="%s = row() + (10 * col())"%(test_raster_name),
+                             overwrite=True)
+    utils.create_test_vector_map(test_vector_name)
+
+    doctest.testmod()
+
+    """Remove the generated maps, if exist"""
+    mset = utils.get_mapset_raster(test_raster_name, mapset='')
+    if mset:
+        Module("g.remove", flags='f', type='raster', name=test_raster_name)
+    mset = utils.get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        Module("g.remove", flags='f', type='vector', name=test_vector_name)
diff --git a/lib/python/pygrass/rpc/base.py b/lib/python/pygrass/rpc/base.py
new file mode 100644
index 0000000..c4db948
--- /dev/null
+++ b/lib/python/pygrass/rpc/base.py
@@ -0,0 +1,184 @@
+# -*- coding: utf-8 -*-
+"""
+Fast and exit-safe interface to PyGRASS Raster and Vector layer
+using multiprocessing
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+
+from grass.exceptions import FatalError
+import time
+import threading
+import sys
+from multiprocessing import Process, Lock, Pipe
+import logging
+
+###############################################################################
+
+def dummy_server(lock, conn):
+    """Dummy server process
+
+       :param lock: A multiprocessing.Lock
+       :param conn: A multiprocessing.Pipe
+    """
+
+    while True:
+        # Avoid busy waiting
+        conn.poll(None)
+        data = conn.recv()
+        lock.acquire()
+        if data[0] == 0:
+            conn.close()
+            lock.release()
+            sys.exit()
+        if data[0] == 1:
+            raise Exception("Server process intentionally killed by exception")
+        lock.release()
+
+class RPCServerBase(object):
+    """This is the base class for send and receive RPC server
+       It uses a Pipe for IPC.
+
+
+        >>> import grass.script as gscript
+        >>> from grass.pygrass.rpc.base import RPCServerBase
+        >>> provider = RPCServerBase()
+
+        >>> provider.is_server_alive()
+        True
+
+        >>> provider.is_check_thread_alive()
+        True
+
+        >>> provider.stop()
+        >>> provider.is_server_alive()
+        False
+
+        >>> provider.is_check_thread_alive()
+        False
+
+        >>> provider = RPCServerBase()
+        >>> provider.is_server_alive()
+        True
+        >>> provider.is_check_thread_alive()
+        True
+
+        Kill the server process with an exception, it should restart
+
+        >>> provider.client_conn.send([1])
+        >>> provider.is_server_alive()
+        True
+
+        >>> provider.is_check_thread_alive()
+        True
+
+    """
+
+    def __init__(self):
+        self.client_conn = None
+        self.server_conn = None
+        self.queue = None
+        self.server = None
+        self.checkThread = None
+        self.threadLock = threading.Lock()
+        self.start_server()
+        self.start_checker_thread()
+        self.stopThread = False
+
+    def is_server_alive(self):
+        return self.server.is_alive()
+
+    def is_check_thread_alive(self):
+        return self.checkThread.is_alive()
+
+    def start_checker_thread(self):
+        if self.checkThread is not None and self.checkThread.is_alive():
+            self.stop_checker_thread()
+
+        self.checkThread = threading.Thread(target=self.thread_checker)
+        self.checkThread.daemon = True
+        self.stopThread = False
+        self.checkThread.start()
+
+    def stop_checker_thread(self):
+        self.threadLock.acquire()
+        self.stopThread = True
+        self.threadLock.release()
+        self.checkThread.join(None)
+
+    def thread_checker(self):
+        """Check every 200 micro seconds if the server process is alive"""
+        while True:
+            time.sleep(0.2)
+            # sys.stderr.write("Check server process\n")
+            self._check_restart_server(caller="Server check thread")
+            self.threadLock.acquire()
+            if self.stopThread == True:
+                #sys.stderr.write("Stop thread\n")
+                self.threadLock.release()
+                return
+            self.threadLock.release()
+
+    def start_server(self):
+        """This function must be re-implemented in the subclasses
+        """
+        self.client_conn, self.server_conn = Pipe(True)
+        self.lock = Lock()
+        self.server = Process(target=dummy_server, args=(self.lock,
+                                                         self.server_conn))
+        self.server.daemon = True
+        self.server.start()
+
+    def check_server(self):
+        self._check_restart_server()
+
+    def _check_restart_server(self, caller="main thread"):
+        """Restart the server if it was terminated
+        """
+        self.threadLock.acquire()
+        if self.server.is_alive() is True:
+            self.threadLock.release()
+            return
+        self.client_conn.close()
+        self.server_conn.close()
+        self.start_server()
+
+        logging.warning("Needed to restart the libgis server, caller: %s"%(caller))
+
+        self.threadLock.release()
+
+    def safe_receive(self, message):
+        """Receive the data and throw a FatalError exception in case the server
+           process was killed and the pipe was closed by the checker thread"""
+        try:
+            ret = self.client_conn.recv()
+            if isinstance(ret,  FatalError):
+               raise ret
+            return ret
+        except (EOFError,  IOError,  FatalError) as e:
+            # The pipe was closed by the checker thread because
+            # the server process was killed
+            raise FatalError("Exception raised: " + str(e) + " Message: " + message)
+
+    def stop(self):
+        """Stop the check thread, the libgis server and close the pipe
+
+           This method should be called at exit using the package atexit
+        """
+        #sys.stderr.write("###### Stop was called\n")
+        self.stop_checker_thread()
+        if self.server is not None and self.server.is_alive():
+            self.client_conn.send([0, ])
+            self.server.terminate()
+        if self.client_conn is not None:
+            self.client_conn.close()
+
+
+if __name__ == "__main__":
+    import doctest
+    doctest.testmod()
diff --git a/lib/python/pygrass/rpc/testsuite/test_doctests.py b/lib/python/pygrass/rpc/testsuite/test_doctests.py
new file mode 100644
index 0000000..080c92a
--- /dev/null
+++ b/lib/python/pygrass/rpc/testsuite/test_doctests.py
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.rpc as pygrpc
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+
+    from grass.pygrass import utils
+    from grass.pygrass.modules import Module
+    Module("g.region", n=40, s=0, e=40, w=0, res=10)
+    Module("r.mapcalc", expression="%s = row() + (10 * col())"%(pygrpc.test_raster_name),
+                             overwrite=True)
+    utils.create_test_vector_map(pygrpc.test_vector_name)
+    
+
+    tests.addTests(doctest.DocTestSuite(pygrpc))
+    tests.addTests(doctest.DocTestSuite(pygrpc.base))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/shell/testsuite/test_doctests.py b/lib/python/pygrass/shell/testsuite/test_doctests.py
new file mode 100644
index 0000000..693e5f8
--- /dev/null
+++ b/lib/python/pygrass/shell/testsuite/test_doctests.py
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+from grass.pygrass.shell import conversion, show
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(conversion))
+    tests.addTests(doctest.DocTestSuite(show))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/testsuite/test_doctests.py b/lib/python/pygrass/testsuite/test_doctests.py
new file mode 100644
index 0000000..1657779
--- /dev/null
+++ b/lib/python/pygrass/testsuite/test_doctests.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.utils as gutils
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(gutils))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/utils.py b/lib/python/pygrass/utils.py
index c639114..ad5eb03 100644
--- a/lib/python/pygrass/utils.py
+++ b/lib/python/pygrass/utils.py
@@ -12,6 +12,9 @@ from grass.script import core as grasscore
 from grass.pygrass.errors import GrassError
 
 
+test_vector_name="Utils_test_vector"
+test_raster_name="Utils_test_raster"
+
 def looking(obj, filter_string):
     """
     >>> import grass.lib.vector as libvect
@@ -104,9 +107,9 @@ def rename(oldname, newname, maptype, **kwargs):
 def copy(existingmap, newmap, maptype, **kwargs):
     """Copy a map
 
-    >>> copy('census', 'mycensus', 'vect')
-    >>> rename('mycensus', 'mynewcensus', 'vect')
-    >>> remove('mynewcensus', 'vect')
+    >>> copy(test_vector_name, 'mycensus', 'vector')
+    >>> rename('mycensus', 'mynewcensus', 'vector')
+    >>> remove('mynewcensus', 'vector')
 
     """
     kwargs.update({maptype: '{old},{new}'.format(old=existingmap, new=newmap)})
@@ -116,8 +119,9 @@ def copy(existingmap, newmap, maptype, **kwargs):
 def getenv(env):
     """Return the current grass environment variables
 
-    >>> getenv("MAPSET")
-    'user1'
+    >>> from grass.script.core import gisenv
+    >>> getenv("MAPSET") == gisenv()["MAPSET"]
+    True
 
     """
     return libgis.G_getenv_nofatal(env)
@@ -126,8 +130,8 @@ def getenv(env):
 def get_mapset_raster(mapname, mapset=''):
     """Return the mapset of the raster map
 
-    >>> get_mapset_raster('elevation')
-    'PERMANENT'
+    >>> get_mapset_raster(test_raster_name) == getenv("MAPSET")
+    True
 
     """
     return libgis.G_find_raster2(mapname, mapset)
@@ -136,8 +140,8 @@ def get_mapset_raster(mapname, mapset=''):
 def get_mapset_vector(mapname, mapset=''):
     """Return the mapset of the vector map
 
-    >>> get_mapset_vector('census')
-    'PERMANENT'
+    >>> get_mapset_vector(test_vector_name) == getenv("MAPSET")
+    True
 
     """
     return libgis.G_find_vector2(mapname, mapset)
@@ -151,7 +155,7 @@ def is_clean_name(name):
     >>> is_clean_name('0census')
     True
     >>> is_clean_name('census?')
-    False
+    True
     >>> is_clean_name('cénsus')
     False
 
@@ -164,6 +168,7 @@ def is_clean_name(name):
 def coor2pixel(coord, region):
     """Convert coordinates into a pixel row and col
 
+    >>> from grass.pygrass.gis.region import Region
     >>> reg = Region()
     >>> coor2pixel((reg.west, reg.north), reg)
     (0.0, 0.0)
@@ -172,13 +177,14 @@ def coor2pixel(coord, region):
 
     """
     (east, north) = coord
-    return (libraster.Rast_northing_to_row(north, region.c_region),
-            libraster.Rast_easting_to_col(east, region.c_region))
+    return (libraster.Rast_northing_to_row(north, region.byref()),
+            libraster.Rast_easting_to_col(east, region.byref()))
 
 
 def pixel2coor(pixel, region):
     """Convert row and col of a pixel into a coordinates
 
+    >>> from grass.pygrass.gis.region import Region
     >>> reg = Region()
     >>> pixel2coor((0, 0), reg) == (reg.north, reg.west)
     True
@@ -187,34 +193,47 @@ def pixel2coor(pixel, region):
 
     """
     (col, row) = pixel
-    return (libraster.Rast_row_to_northing(row, region.c_region),
-            libraster.Rast_col_to_easting(col, region.c_region))
+    return (libraster.Rast_row_to_northing(row, region.byref()),
+            libraster.Rast_col_to_easting(col, region.byref()))
 
 
 def get_raster_for_points(poi_vector, raster, column=None, region=None):
     """Query a raster map for each point feature of a vector
 
+    test_vector_name="Utils_test_vector"
+    test_raster_name="Utils_test_raster"
+
     Example
 
     >>> from grass.pygrass.vector import VectorTopo
     >>> from grass.pygrass.raster import RasterRow
-    >>> ele = RasterRow('elevation')
-    >>> copy('schools','myschools','vect')
-    >>> sch = VectorTopo('myschools')
-    >>> sch.open(mode='r')
-    >>> get_raster_for_points(sch, ele)               # doctest: +ELLIPSIS
-    [(1, 633649.2856743174, 221412.94434781274, 145.06602)...
-    >>> sch.table.columns.add('elevation','double precision')
-    >>> 'elevation' in sch.table.columns
+    >>> from grass.pygrass.gis.region import Region
+    >>> region = Region()
+    >>> region.from_rast(test_raster_name)
+    >>> region.set_raster_region()
+    >>> ele = RasterRow(test_raster_name)
+    >>> copy(test_vector_name,'test_vect_2','vector')
+    >>> fire = VectorTopo('test_vect_2')
+    >>> fire.open(mode='r')
+    >>> l = get_raster_for_points(fire, ele, region=region)
+    >>> l[0]                                        # doctest: +ELLIPSIS
+    (1, 620856.9585876337, 230066.3831321055, 111.2153883384)
+    >>> l[1]                                        # doctest: +ELLIPSIS
+    (2, 625331.9185974908, 229990.82160762616, 89.978796115200012)
+    >>> fire.table.columns.add(test_raster_name,'double precision')
+    >>> test_raster_name in fire.table.columns
     True
-    >>> get_raster_for_points(sch, ele, 'elevation')
+    >>> get_raster_for_points(fire, ele, column=test_raster_name, region=region)
     True
-    >>> sch.table.filters.select('NAMESHORT','elevation')
-    Filters(u'SELECT NAMESHORT, elevation FROM myschools;')
-    >>> cur = sch.table.execute()
-    >>> cur.fetchall()                                # doctest: +ELLIPSIS
-    [(u'SWIFT CREEK', 145.06602), ... (u'9TH GRADE CTR', None)]
-    >>> remove('myschools','vect')
+    >>> fire.table.filters.select('name', test_raster_name)
+    Filters(u'SELECT name, Utils_test_raster FROM test_vect_2;')
+    >>> cur = fire.table.execute()
+    >>> r = cur.fetchall()
+    >>> r[0]                                        # doctest: +ELLIPSIS
+    (u'Morrisville #3', 111.2153883384)
+    >>> r[1]                                        # doctest: +ELLIPSIS
+    (u'Morrisville #1', 89.97879611520001)
+    >>> remove('test_vect_2','vect')
 
 
     :param point: point vector object
@@ -234,6 +253,7 @@ def get_raster_for_points(poi_vector, raster, column=None, region=None):
         raster.open()
     if poi_vector.num_primitive_of('point') == 0:
         raise GrassError(_("Vector doesn't contain points"))
+
     for poi in poi_vector.viter('points'):
         val = raster.get_value(poi, region)
         if column:
@@ -265,32 +285,12 @@ def r_export(rast, output='', fmt='png', **kargs):
 
 def get_lib_path(modname, libname=None):
     """Return the path of the libname contained in the module.
+
+    .. deprecated:: 7.1
+        Use :func:`grass.script.utils.get_lib_path` instead.
     """
-    from os.path import isdir, join, sep
-    from os import getenv
-
-    if isdir(join(getenv('GISBASE'), 'etc', modname)):
-        path = join(os.getenv('GISBASE'), 'etc', modname)
-    elif getenv('GRASS_ADDON_BASE') and libname and \
-            isdir(join(getenv('GRASS_ADDON_BASE'), 'etc', modname, libname)):
-        path = join(getenv('GRASS_ADDON_BASE'), 'etc', modname)
-    elif getenv('GRASS_ADDON_BASE') and \
-            isdir(join(getenv('GRASS_ADDON_BASE'), 'etc', modname)):
-        path = join(getenv('GRASS_ADDON_BASE'), 'etc', modname)
-    elif getenv('GRASS_ADDON_BASE') and \
-            isdir(join(getenv('GRASS_ADDON_BASE'), modname, modname)):
-        path = join(os.getenv('GRASS_ADDON_BASE'), modname, modname)
-    else:
-        # used by g.extension compilation process
-        cwd = os.getcwd()
-        idx = cwd.find(modname)
-        if idx < 0:
-            return None
-        path = '{cwd}{sep}etc{sep}{modname}'.format(cwd=cwd[:idx+len(modname)],
-                                                    sep=sep,
-                                                    modname=modname)
-    
-    return path
+    from grass.script.utils import get_lib_path
+    return get_lib_path(modname=modname, libname=libname)
 
 
 def set_path(modulename, dirname=None, path='.'):
@@ -301,74 +301,11 @@ def set_path(modulename, dirname=None, path='.'):
                     libraries, default None
     :param path: string with the path to reach the dirname locally.
 
-    Example
-    --------
-
-    "set_path" example working locally with the source code of a module
-    (r.green) calling the function with all the parameters. Below it is
-    reported the directory structure on the r.green module.
-
-    ::
-
-        grass_prompt> pwd
-        ~/Download/r.green/r.green.hydro/r.green.hydro.financial
-
-        grass_prompt> tree ../../../r.green
-        ../../../r.green
-        |-- ...
-        |-- libgreen
-        |   |-- pyfile1.py
-        |   +-- pyfile2.py
-        +-- r.green.hydro
-           |-- Makefile
-           |-- libhydro
-           |   |-- pyfile1.py
-           |   +-- pyfile2.py
-           |-- r.green.hydro.*
-           +-- r.green.hydro.financial
-               |-- Makefile
-               |-- ...
-               +-- r.green.hydro.financial.py
-
-        21 directories, 125 files
-
-    in the source code the function is called with the following parameters: ::
-
-        set_path('r.green', 'libhydro', '..')
-        set_path('r.green', 'libgreen', os.path.join('..', '..'))
-
-    when we are executing the module: r.green.hydro.financial locally from
-    the command line:  ::
-
-        grass_prompt> python r.green.hydro.financial.py --ui
-
-    In this way we are executing the local code even if the module was already
-    installed as grass-addons and it is available in GRASS standards path.
-
-    The function is cheching if the dirname is provided and if the
-    directory exists and it is available using the path
-    provided as third parameter, if yes add the path to sys.path to be
-    importable, otherwise it will check on GRASS GIS standard paths.
-
+    .. deprecated:: 7.1
+        Use :func:`grass.script.utils.set_path` instead.
     """
-    import sys
-    # TODO: why dirname is checked first - the logic should be revised
-    pathlib = None
-    if dirname:
-        pathlib = os.path.join(path, dirname)
-    if pathlib and os.path.exists(pathlib):
-        # we are running the script from the script directory, therefore
-        # we add the path to sys.path to reach the directory (dirname)
-        sys.path.append(os.path.abspath(path))
-    else:
-        # running from GRASS GIS session
-        path = get_lib_path(modulename, dirname)
-        if path is None:
-            pathname = os.path.join(modulename, dirname) if dirname else modulename
-            raise ImportError("Not able to find the path '%s' directory "
-                              "(current dir '%s')." % (pathname, os.getcwd()))
-        
-        sys.path.insert(0, path)
+    from grass.script.utils import set_path
+    return set_path(modulename=modulename, dirname=dirname, path=path)
 
 
 def split_in_chunk(iterable, length=10):
@@ -413,3 +350,177 @@ def table_exist(cursor, table_name):
             return False
     one = cursor.fetchone() if cursor else None
     return True if one and one[0] else False
+
+
+def create_test_vector_map(map_name="test_vector"):
+    """This functions creates a vector map layer with points, lines, boundaries,
+       centroids, areas, isles and attributes for testing purposes
+
+       This should be used in doc and unit tests to create location/mapset
+       independent vector map layer. This map includes 3 points, 3 lines,
+       11 boundaries and 4 centroids. The attribute table contains cat, name
+       and value columns.
+
+        param map_name: The vector map name that should be used
+
+
+
+                                  P1 P2 P3
+           6                       *  *  *
+           5
+           4    _______ ___ ___   L1 L2 L3
+        Y  3   |A1___ *|  *|  *|   |  |  |
+           2   | |A2*| |   |   |   |  |  |
+           1   | |___| |A3 |A4 |   |  |  |
+           0   |_______|___|___|   |  |  |
+          -1
+            -1 0 1 2 3 4 5 6 7 8 9 10 12 14
+                           X
+    """
+
+    from grass.pygrass.vector import VectorTopo
+    from grass.pygrass.vector.geometry import Point, Line, Centroid, Boundary
+
+    cols = [(u'cat', 'INTEGER PRIMARY KEY'),
+            (u'name','varchar(50)'),
+            (u'value', 'double precision')]
+    with VectorTopo(map_name, mode='w', tab_name=map_name,
+                    tab_cols=cols) as vect:
+
+        # Write 3 points
+        vect.write(Point(10, 6), cat=1, attrs=("point", 1))
+        vect.write(Point(12, 6), cat=1)
+        vect.write(Point(14, 6), cat=1)
+        # Write 3 lines
+        vect.write(Line([(10, 4), (10, 2), (10,0)]), cat=2, attrs=("line", 2))
+        vect.write(Line([(12, 4), (12, 2), (12,0)]), cat=2)
+        vect.write(Line([(14, 4), (14, 2), (14,0)]), cat=2)
+        # boundaries 1 - 4
+        vect.write(Boundary(points=[(0, 0), (0,4)]))
+        vect.write(Boundary(points=[(0, 4), (4,4)]))
+        vect.write(Boundary(points=[(4, 4), (4,0)]))
+        vect.write(Boundary(points=[(4, 0), (0,0)]))
+        # 5. boundary (Isle)
+        vect.write(Boundary(points=[(1, 1), (1,3), (3, 3), (3,1), (1,1)]))
+        # boundaries 6 - 8
+        vect.write(Boundary(points=[(4, 4), (6,4)]))
+        vect.write(Boundary(points=[(6, 4), (6,0)]))
+        vect.write(Boundary(points=[(6, 0), (4,0)]))
+        # boundaries 9 - 11
+        vect.write(Boundary(points=[(6, 4), (8,4)]))
+        vect.write(Boundary(points=[(8, 4), (8,0)]))
+        vect.write(Boundary(points=[(8, 0), (6,0)]))
+        # Centroids, all have the same cat and attribute
+        vect.write(Centroid(x=3.5, y=3.5), cat=3, attrs=("centroid", 3))
+        vect.write(Centroid(x=2.5, y=2.5), cat=3)
+        vect.write(Centroid(x=5.5, y=3.5), cat=3)
+        vect.write(Centroid(x=7.5, y=3.5), cat=3)
+
+        vect.organization = 'Thuenen Institut'
+        vect.person = 'Soeren Gebbert'
+        vect.title = 'Test dataset'
+        vect.comment = 'This is a comment'
+
+        vect.table.conn.commit()
+
+        vect.organization = "Thuenen Institut"
+        vect.person = "Soeren Gebbert"
+        vect.title = "Test dataset"
+        vect.comment = "This is a comment"
+        vect.close()
+
+def create_test_stream_network_map(map_name="streams"):
+    """
+       This functions creates a vector map layer with lines that represent
+       a stream network with two different graphs. The first graph
+       contains a loop, the second can be used as directed graph.
+
+       This should be used in doc and unit tests to create location/mapset
+       independent vector map layer.
+
+        param map_name: The vector map name that should be used
+
+       1(0,2)  3(2,2)
+        \     /
+       1 \   / 2
+          \ /
+           2(1,1)
+    6(0,1) ||  5(2,1)
+       5 \ || / 4
+          \||/
+           4(1,0)
+           |
+           | 6
+           |7(1,-1)
+
+       7(0,-1) 8(2,-1)
+        \     /
+       8 \   / 9
+          \ /
+           9(1, -2)
+           |
+           | 10
+           |
+          10(1,-3)
+    """
+
+    from grass.pygrass.vector import VectorTopo
+    from grass.pygrass.vector.geometry import Line
+
+    cols = [(u'cat', 'INTEGER PRIMARY KEY'), (u'id', 'INTEGER')]
+    with VectorTopo(map_name, mode='w', tab_name=map_name,
+                    tab_cols=cols) as streams:
+
+        # First flow graph
+        l = Line([(0,2), (0.22, 1.75), (0.55, 1.5), (1,1)])
+        streams.write(l, cat=1, attrs=(1,))
+        l = Line([(2,2),(1,1)])
+        streams.write(l, cat=2, attrs=(2,))
+        l = Line([(1,1), (0.85, 0.5), (1,0)])
+        streams.write(l, cat=3, attrs=(3,))
+        l = Line([(2,1),(1,0)])
+        streams.write(l, cat=4, attrs=(4,))
+        l = Line([(0,1),(1,0)])
+        streams.write(l, cat=5, attrs=(5,))
+        l = Line([(1,0),(1,-1)])
+        streams.write(l, cat=6, attrs=(6,))
+        # Reverse line 3
+        l = Line([(1,0), (1.15, 0.5),(1,1)])
+        streams.write(l, cat=7, attrs=(7,))
+
+        # second flow graph
+        l = Line([(0,-1),(1,-2)])
+        streams.write(l, cat=8, attrs=(8,))
+        l = Line([(2,-1),(1,-2)])
+        streams.write(l, cat=9, attrs=(9,))
+        l = Line([(1,-2),(1,-3)])
+        streams.write(l, cat=10, attrs=(10,))
+
+        streams.organization = 'Thuenen Institut'
+        streams.person = 'Soeren Gebbert'
+        streams.title = 'Test dataset for stream networks'
+        streams.comment = 'This is a comment'
+
+        streams.table.conn.commit()
+        streams.close()
+
+if __name__ == "__main__":
+
+    import doctest
+    from grass.pygrass import utils
+    from grass.script.core import run_command
+
+    utils.create_test_vector_map(test_vector_name)
+    run_command("g.region", n=50, s=0, e=60, w=0, res=1)
+    run_command("r.mapcalc", expression="%s = 1"%(test_raster_name),
+                             overwrite=True)
+
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    mset = utils.get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
+    mset = utils.get_mapset_raster(test_raster_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='raster', name=test_raster_name)
diff --git a/lib/python/pygrass/vector/__init__.py b/lib/python/pygrass/vector/__init__.py
index 1581a42..4ee7be9 100644
--- a/lib/python/pygrass/vector/__init__.py
+++ b/lib/python/pygrass/vector/__init__.py
@@ -1,8 +1,11 @@
 # -*- coding: utf-8 -*-
+from __future__ import print_function
+
 from os.path import join, exists
 import grass.lib.gis as libgis
 libgis.G_gisinit('')
 import grass.lib.vector as libvect
+import ctypes
 
 #
 # import pygrass modules
@@ -24,12 +27,15 @@ _NUMOF = {"areas": libvect.Vect_get_num_areas,
           "holes": libvect.Vect_get_num_holes,
           "islands": libvect.Vect_get_num_islands,
           "kernels": libvect.Vect_get_num_kernels,
+          "points": libvect.Vect_get_num_lines,
           "lines": libvect.Vect_get_num_lines,
           "nodes": libvect.Vect_get_num_nodes,
           "updated_lines": libvect.Vect_get_num_updated_lines,
           "updated_nodes": libvect.Vect_get_num_updated_nodes,
           "volumes": libvect.Vect_get_num_volumes}
 
+# For test purposes
+test_vector_name = "vector_doctest_map"
 
 #=============================================
 # VECTOR
@@ -39,16 +45,14 @@ class Vector(Info):
     """Vector class is the grass vector format without topology
 
         >>> from grass.pygrass.vector import Vector
-        >>> cens = Vector('census')
-        >>> cens.is_open()
+        >>> test_vect = Vector(test_vector_name)
+        >>> test_vect.is_open()
         False
-        >>> cens.mapset
+        >>> test_vect.mapset
         ''
-        >>> cens.exist()
+        >>> test_vect.exist()
         True
-        >>> cens.mapset
-        'PERMANENT'
-        >>> cens.overwrite
+        >>> test_vect.overwrite
         False
 
     """
@@ -58,6 +62,7 @@ class Vector(Info):
         self._topo_level = 1
         self._class_name = 'Vector'
         self.overwrite = False
+        self._cats = []
 
     def __repr__(self):
         if self.exist():
@@ -68,12 +73,12 @@ class Vector(Info):
     def __iter__(self):
         """::
 
-            >>> cens = Vector('census')
-            >>> cens.open(mode='r')
-            >>> features = [feature for feature in cens]
+            >>> test_vect = Vector(test_vector_name)
+            >>> test_vect.open(mode='r')
+            >>> features = [feature for feature in test_vect]
             >>> features[:3]
-            [Boundary(v_id=None), Boundary(v_id=None), Boundary(v_id=None)]
-            >>> cens.close()
+            [Point(10.000000, 6.000000), Point(12.000000, 6.000000), Point(14.000000, 6.000000)]
+            >>> test_vect.close()
 
         ..
         """
@@ -84,17 +89,17 @@ class Vector(Info):
     def next(self):
         """::
 
-            >>> cens = Vector('census')
-            >>> cens.open(mode='r')
-            >>> cens.next()
-            Boundary(v_id=None)
-            >>> cens.next()
-            Boundary(v_id=None)
-            >>> cens.close()
+            >>> test_vect = Vector(test_vector_name)
+            >>> test_vect.open(mode='r')
+            >>> test_vect.next()
+            Point(10.000000, 6.000000)
+            >>> test_vect.next()
+            Point(12.000000, 6.000000)
+            >>> test_vect.close()
 
         ..
         """
-        return read_next_line(self.c_mapinfo, self.table, self.writable,
+        return read_next_line(self.c_mapinfo, self.table, self.writeable,
                               is2D=not self.is_3D())
 
     @must_be_open
@@ -104,7 +109,7 @@ class Vector(Info):
             raise GrassError("Vect_rewind raise an error.")
 
     @must_be_open
-    def write(self, geo_obj, attrs=None, set_cats=True):
+    def write(self, geo_obj, cat=None, attrs=None):
         """Write geometry features and attributes.
 
         :param geo_obj: a geometry grass object define in
@@ -113,11 +118,9 @@ class Vector(Info):
         :param attrs: a list with the values that will be insert in the
                       attribute table.
         :type attrs: list
-        :param set_cats: if True, the category of the geometry feature is set
-                         using the default layer of the vector map and a
-                         progressive category value (default), otherwise the
+        :param cat: The category of the geometry feature, otherwise the
                          c_cats attribute of the geometry object will be used.
-        :type set_cats: bool
+        :type cat: integer
 
         Open a new vector map ::
 
@@ -140,19 +143,19 @@ class Vector(Info):
 
         create two points ::
 
-            >>> point0 = Point(636981.336043, 256517.602235)
-            >>> point1 = Point(637209.083058, 257970.129540)
+            >>> point0 = Point(0, 0)
+            >>> point1 = Point(1, 1)
 
         then write the two points on the map, with ::
 
-            >>> new.write(point0, ('pub', ))
-            >>> new.write(point1, ('resturnat', ))
+            >>> new.write(point0, cat=1, attrs=('pub',))
+            >>> new.write(point1, cat=2, attrs=('resturant',))
 
         commit the db changes ::
 
             >>> new.table.conn.commit()
             >>> new.table.execute().fetchall()
-            [(1, u'pub'), (2, u'resturnat')]
+            [(1, u'pub'), (2, u'resturant')]
 
         close the vector map ::
 
@@ -164,29 +167,34 @@ class Vector(Info):
 
             >>> new.open(mode='r')
             >>> new.read(1)
-            Point(636981.336043, 256517.602235)
+            Point(0.000000, 0.000000)
             >>> new.read(2)
-            Point(637209.083058, 257970.129540)
+            Point(1.000000, 1.000000)
             >>> new.read(1).attrs['name']
             u'pub'
             >>> new.read(2).attrs['name']
-            u'resturnat'
+            u'resturant'
             >>> new.close()
             >>> new.remove()
 
         """
         self.n_lines += 1
-        if self.table is not None and attrs:
-            attr = [self.n_lines, ]
-            attr.extend(attrs)
-            cur = self.table.conn.cursor()
-            cur.execute(self.table.columns.insert_str, attr)
-            cur.close()
-
-        if set_cats:
+        if attrs and cat is None:
+            cat = (self._cats[-1] if self._cats else 0) + 1
+
+        if cat is not None and cat not in self._cats:
+            self._cats.append(cat)
+            if self.table is not None and attrs is not None:
+                attr = [cat, ]
+                attr.extend(attrs)
+                cur = self.table.conn.cursor()
+                cur.execute(self.table.columns.insert_str, attr)
+                cur.close()
+
+        if cat is not None:
             cats = Cats(geo_obj.c_cats)
             cats.reset()
-            cats.set(self.n_lines, self.layer)
+            cats.set(cat, self.layer)
 
         if geo_obj.gtype == _Area.gtype:
             result = self._write_area(geo_obj)
@@ -206,23 +214,23 @@ class Vector(Info):
         """Return if vector has color table associated in file system;
         Color table stored in the vector's attribute table well be not checked
 
-        >>> cens = Vector('census')
-        >>> cens.open(mode='r')
-        >>> cens.has_color_table()
+        >>> test_vect = Vector(test_vector_name)
+        >>> test_vect.open(mode='r')
+        >>> test_vect.has_color_table()
         False
 
-        >>> cens.close()
+        >>> test_vect.close()
         >>> from grass.pygrass.utils import copy, remove
-        >>> copy('census','mycensus','vect')
+        >>> copy(test_vector_name,'mytest_vect','vect')
         >>> from grass.pygrass.modules.shortcuts import vector as v
-        >>> v.colors(map='mycensus', color='population', column='TOTAL_POP')
+        >>> v.colors(map='mytest_vect', color='population', column='value')
         Module('v.colors')
-        >>> mycens = Vector('mycensus')
-        >>> mycens.open(mode='r')
-        >>> mycens.has_color_table()
+        >>> mytest_vect = Vector('mytest_vect')
+        >>> mytest_vect.open(mode='r')
+        >>> mytest_vect.has_color_table()
         True
-        >>> mycens.close()
-        >>> remove('mycensus', 'vect')
+        >>> mytest_vect.close()
+        >>> remove('mytest_vect', 'vect')
         """
         loc = Location()
         path = join(loc.path(), self.mapset, 'vector', self.name, 'colr')
@@ -238,14 +246,17 @@ class VectorTopo(Vector):
 
     Open a vector map using the *with statement*: ::
 
-        >>> with VectorTopo('schools', mode='r') as schools:
-        ...     for school in schools[:3]:
-        ...         print school.attrs['NAMESHORT']
+        >>> with VectorTopo(test_vector_name, mode='r') as test_vect:
+        ...     for feature in test_vect[:7]:
+        ...         print(feature.attrs['name'])
         ...
-        SWIFT CREEK
-        BRIARCLIFF
-        FARMINGTON WOODS
-        >>> schools.is_open()
+        point
+        point
+        point
+        line
+        line
+        line
+        >>> test_vect.is_open()
         False
 
     ..
@@ -261,11 +272,11 @@ class VectorTopo(Vector):
     def __getitem__(self, key):
         """::
 
-            >>> cens = VectorTopo('census')
-            >>> cens.open(mode='r')
-            >>> cens[:3]
-            [Boundary(v_id=1), Boundary(v_id=2), Boundary(v_id=3)]
-            >>> cens.close()
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open(mode='r')
+            >>> test_vect[:4]
+            [Point(10.000000, 6.000000), Point(12.000000, 6.000000), Point(14.000000, 6.000000)]
+            >>> test_vect.close()
 
         ..
         """
@@ -298,17 +309,17 @@ class VectorTopo(Vector):
 
         ::
 
-            >>> cens = VectorTopo('census')
-            >>> cens.open(mode='r')
-            >>> cens.num_primitive_of('point')
-            0
-            >>> cens.num_primitive_of('line')
-            0
-            >>> cens.num_primitive_of('centroid')
-            2537
-            >>> cens.num_primitive_of('boundary')
-            6383
-            >>> cens.close()
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open(mode='r')
+            >>> test_vect.num_primitive_of('point')
+            3
+            >>> test_vect.num_primitive_of('line')
+            3
+            >>> test_vect.num_primitive_of('centroid')
+            4
+            >>> test_vect.num_primitive_of('boundary')
+            11
+            >>> test_vect.close()
 
         ..
         """
@@ -321,28 +332,28 @@ class VectorTopo(Vector):
 
         :param vtype: the name of type to query; the supported values are:
                       *areas*, *dblinks*, *faces*, *holes*, *islands*,
-                      *kernels*, *line_points*, *lines*, *nodes*,
+                      *kernels*, *line_points*, *lines*, *nodes*, *points*,
                       *update_lines*, *update_nodes*, *volumes*
         :type vtype: str
 
-            >>> cens = VectorTopo('census')
-            >>> cens.open(mode='r')
-            >>> cens.number_of("areas")
-            2547
-            >>> cens.number_of("islands")
-            49
-            >>> cens.number_of("holes")
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open(mode='r')
+            >>> test_vect.number_of("areas")
+            4
+            >>> test_vect.number_of("islands")
+            2
+            >>> test_vect.number_of("holes")
             0
-            >>> cens.number_of("lines")
-            8920
-            >>> cens.number_of("nodes")
-            3885
-            >>> cens.number_of("pizza")
+            >>> test_vect.number_of("lines")
+            21
+            >>> test_vect.number_of("nodes")
+            15
+            >>> test_vect.number_of("pizza")
             ...                     # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
             Traceback (most recent call last):
                 ...
             ValueError: vtype not supported, use one of: 'areas', ...
-            >>> cens.close()
+            >>> test_vect.close()
 
 
         ..
@@ -368,32 +379,39 @@ class VectorTopo(Vector):
 
         :param vtype: the name of type to query; the supported values are:
                       *areas*, *dblinks*, *faces*, *holes*, *islands*,
-                      *kernels*, *line_points*, *lines*, *nodes*,
+                      *kernels*, *line_points*, *lines*, *nodes*, *points*,
                       *update_lines*, *update_nodes*, *volumes*
         :type vtype: str
         :param idonly: variable to return only the id of features instead of
                        full features
         :type idonly: bool
 
-            >>> cens = VectorTopo('census', mode='r')
-            >>> cens.open(mode='r')
-            >>> big = [area for area in cens.viter('areas')
-            ...        if area.alive() and area.area() >= 10000]
-            >>> big[:3]
-            [Area(5), Area(6), Area(13)]
+            >>> test_vect = VectorTopo(test_vector_name, mode='r')
+            >>> test_vect.open(mode='r')
+            >>> areas = [area for area in test_vect.viter('areas')]
+            >>> areas[:3]
+            [Area(1), Area(2), Area(3)]
 
 
         to sort the result in a efficient way, use: ::
 
             >>> from operator import methodcaller as method
-            >>> big.sort(key=method('area'), reverse=True)  # sort the list
-            >>> for area in big[:3]:
-            ...     print area, area.area()
-            Area(2099) 5392751.5304
-            Area(2171) 4799921.30863
-            Area(495) 4055812.49695
-            >>> cens.close()
-
+            >>> areas.sort(key=method('area'), reverse=True)  # sort the list
+            >>> for area in areas[:3]:
+            ...     print(area, area.area())
+            Area(1) 12.0
+            Area(2) 8.0
+            Area(4) 8.0
+
+            >>> areas = [area for area in test_vect.viter('areas')]
+            >>> for area in areas:
+            ...     print(area.centroid().cat)
+            3
+            3
+            3
+            3
+
+            >>> test_vect.close()
         """
         if vtype in _GEOOBJ.keys():
             if _GEOOBJ[vtype] is not None:
@@ -402,7 +420,7 @@ class VectorTopo(Vector):
                     return ids
                 return (_GEOOBJ[vtype](v_id=indx, c_mapinfo=self.c_mapinfo,
                                        table=self.table,
-                                       writable=self.writable)
+                                       writeable=self.writeable)
                         for indx in ids)
         else:
             keys = "', '".join(sorted(_GEOOBJ.keys()))
@@ -412,18 +430,18 @@ class VectorTopo(Vector):
     def rewind(self):
         """Rewind vector map to cause reads to start at beginning. ::
 
-            >>> cens = VectorTopo('census')
-            >>> cens.open(mode='r')
-            >>> cens.next()
-            Boundary(v_id=1)
-            >>> cens.next()
-            Boundary(v_id=2)
-            >>> cens.next()
-            Boundary(v_id=3)
-            >>> cens.rewind()
-            >>> cens.next()
-            Boundary(v_id=1)
-            >>> cens.close()
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open(mode='r')
+            >>> test_vect.next()
+            Point(10.000000, 6.000000)
+            >>> test_vect.next()
+            Point(12.000000, 6.000000)
+            >>> test_vect.next()
+            Point(14.000000, 6.000000)
+            >>> test_vect.rewind()
+            >>> test_vect.next()
+            Point(10.000000, 6.000000)
+            >>> test_vect.close()
 
         ..
         """
@@ -454,12 +472,12 @@ class VectorTopo(Vector):
         is2D = not self.is_3D()
         if generator:
             return (read_line(feature_id=v_id, c_mapinfo=self.c_mapinfo,
-                              table=self.table, writable=self.writable,
+                              table=self.table, writeable=self.writeable,
                               is2D=is2D)
                     for v_id in ilist)
         else:
             return [read_line(feature_id=v_id, c_mapinfo=self.c_mapinfo,
-                              table=self.table, writable=self.writable,
+                              table=self.table, writeable=self.writeable,
                               is2D=is2D)
                     for v_id in ilist]
 
@@ -469,31 +487,31 @@ class VectorTopo(Vector):
 
         :param int feature_id: the id of feature to obtain
 
-        >>> cens = VectorTopo('census')
-        >>> cens.open(mode='r')
-        >>> feature1 = cens.read(0)                     #doctest: +ELLIPSIS
+        >>> test_vect = VectorTopo(test_vector_name)
+        >>> test_vect.open(mode='r')
+        >>> feature1 = test_vect.read(0)                     #doctest: +ELLIPSIS
         Traceback (most recent call last):
             ...
         ValueError: The index must be >0, 0 given.
-        >>> feature1 = cens.read(1)
+        >>> feature1 = test_vect.read(5)
         >>> feature1
-        Boundary(v_id=1)
+        Line([Point(12.000000, 4.000000), Point(12.000000, 2.000000), Point(12.000000, 0.000000)])
         >>> feature1.length()
-        444.54490917696944
-        >>> cens.read(-1)
-        Centoid(642963.159711, 214994.016279)
-        >>> len(cens)
-        8920
-        >>> cens.read(8920)
-        Centoid(642963.159711, 214994.016279)
-        >>> cens.read(8921)                             #doctest: +ELLIPSIS
+        4.0
+        >>> test_vect.read(-1)
+        Centoid(7.500000, 3.500000)
+        >>> len(test_vect)
+        21
+        >>> test_vect.read(21)
+        Centoid(7.500000, 3.500000)
+        >>> test_vect.read(22)                             #doctest: +ELLIPSIS
         Traceback (most recent call last):
           ...
         IndexError: Index out of range
-        >>> cens.close()
+        >>> test_vect.close()
 
         """
-        return read_line(feature_id, self.c_mapinfo, self.table, self.writable,
+        return read_line(feature_id, self.c_mapinfo, self.table, self.writeable,
                          is2D=not self.is_3D())
 
     @must_be_open
@@ -517,8 +535,8 @@ class VectorTopo(Vector):
             attr.extend(attrs)
             self.table.update(key=line, values=attr)
         elif self.table is None and attrs:
-            print "Table for vector {name} does not exist, attributes not" \
-                  " loaded".format(name=self.name)
+            print("Table for vector {name} does not exist, attributes not"
+                  " loaded".format(name=self.name))
         libvect.Vect_cat_set(geo_obj.c_cats, self.layer, line)
         result = libvect.Vect_rewrite_line(self.c_mapinfo,
                                            line, geo_obj.gtype,
@@ -558,19 +576,295 @@ class VectorTopo(Vector):
             raise GrassError("I can not find the Bbox.")
         return bbox
 
-    @must_be_open
-    def select_by_bbox(self, bbox):
-        """Return the BBox of the vector map
-        """
-        # TODO replace with bbox if bbox else Bbox() ??
-        bbox = Bbox()
-        if libvect.Vect_get_map_box(self.c_mapinfo, bbox.c_bbox) == 0:
-            raise GrassError("I can not find the Bbox.")
-        return bbox
-
     def close(self, build=True, release=True):
         """Close the VectorTopo map, if release is True, the memory
         occupied by spatial index is released"""
         if release:
             libvect.Vect_set_release_support(self.c_mapinfo)
         super(VectorTopo, self).close(build=build)
+
+    @must_be_open
+    def table_to_dict(self, where=None):
+        """Return the attribute table as a dictionary with the category as keys
+
+            The columns have the order of the self.table.columns.names() list.
+
+            Examples
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            >>> test_vect.table_to_dict()
+            {1: [1, u'point', 1.0], 2: [2, u'line', 2.0], 3: [3, u'centroid', 3.0]}
+
+            >>> test_vect.table_to_dict(where="value > 2")
+            {3: [3, u'centroid', 3.0]}
+
+            >>> test_vect.table_to_dict(where="value > 0")
+            {1: [1, u'point', 1.0], 2: [2, u'line', 2.0], 3: [3, u'centroid', 3.0]}
+
+            >>> test_vect.table.filters.get_sql()
+            u'SELECT cat,name,value FROM vector_doctest_map WHERE value > 0 ORDER BY cat;'
+
+        """
+
+        if self.table is not None:
+            table_dict = {}
+            # Get the category index
+            cat_index = self.table.columns.names().index("cat")
+            # Prepare a filter
+            if where is not None:
+                self.table.filters.where(where)
+
+            self.table.filters.order_by("cat")
+
+            self.table.filters.select(",".join(self.table.columns.names()))
+            # Execute the query and fetch the result
+            cur = self.table.execute()
+            l = cur.fetchall()
+            # Generate the dictionary
+            for entry in l:
+                table_dict[entry[cat_index]] = list(entry)
+
+            return(table_dict)
+
+        return None
+
+    @must_be_open
+    def features_to_wkb_list(self, bbox=None, feature_type="point", field=1):
+        """Return all features of type point, line, boundary or centroid
+           as a list of Well Known Binary representations (WKB)
+           (id, cat, wkb) triplets located in a specific
+           bounding box.
+
+           :param bbox: The boundingbox to search for features,
+                       if bbox=None the boundingbox of the whole
+                       vector map layer is used
+
+           :type bbox: grass.pygrass.vector.basic.Bbox
+
+           :param feature_type: The type of feature that should be converted to
+                                the Well Known Binary (WKB) format. Supported are:
+                               'point'    -> libvect.GV_POINT     1
+                               'line'     -> libvect.GV_LINE      2
+                               'boundary' -> libvect.GV_BOUNDARY  3
+                               'centroid' -> libvect.GV_CENTROID  4
+           :type type: string
+
+           :param field: The category field
+           :type field: integer
+
+           :return: A list of triplets, or None if nothing was found
+
+           The well known binary are stored in byte arrays.
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            >>> bbox = Bbox(north=20, south=-1, east=20, west=-1)
+            >>> result = test_vect.features_to_wkb_list(bbox=bbox,
+            ...                                         feature_type="point")
+            >>> len(result)
+            3
+            >>> for entry in result:
+            ...     f_id, cat, wkb = entry
+            ...     print((f_id, cat, len(wkb)))
+            (1, 1, 21)
+            (2, 1, 21)
+            (3, 1, 21)
+
+            >>> result = test_vect.features_to_wkb_list(bbox=None,
+            ...                                         feature_type="line")
+            >>> len(result)
+            3
+            >>> for entry in result:
+            ...     f_id, cat, wkb = entry
+            ...     print((f_id, cat, len(wkb)))
+            (4, 2, 57)
+            (5, 2, 57)
+            (6, 2, 57)
+
+            >>> result = test_vect.features_to_wkb_list(bbox=bbox,
+            ...                                         feature_type="boundary")
+            >>> len(result)
+            11
+
+            >>> result = test_vect.features_to_wkb_list(bbox=None,
+            ...                                         feature_type="centroid")
+            >>> len(result)
+            4
+
+            >>> for entry in result:
+            ...     f_id, cat, wkb = entry
+            ...     print((f_id, cat, len(wkb)))
+            (19, 3, 21)
+            (18, 3, 21)
+            (20, 3, 21)
+            (21, 3, 21)
+
+            >>> result = test_vect.features_to_wkb_list(bbox=bbox,
+            ...                                         feature_type="blub")
+            Traceback (most recent call last):
+            ...
+            GrassError: Unsupported feature type <blub>, supported are <point,line,boundary,centroid>
+
+            >>> test_vect.close()
+
+        """
+
+        supported = ['point', 'line', 'boundary', 'centroid']
+
+        if feature_type.lower() not in supported:
+            raise GrassError("Unsupported feature type <%s>, "\
+                             "supported are <%s>"%(feature_type,
+                                                   ",".join(supported)))
+
+        if bbox is None:
+            bbox = self.bbox()
+
+        bboxlist = self.find_by_bbox.geos(bbox, type=feature_type.lower(),
+                                          bboxlist_only = True)
+
+        if bboxlist is not None and len(bboxlist) > 0:
+
+            l = []
+            line_p = libvect.line_pnts()
+            line_c = libvect.line_cats()
+            size = ctypes.c_size_t()
+            cat = ctypes.c_int()
+            error = ctypes.c_int()
+
+            for f_id in bboxlist.ids:
+                barray = libvect.Vect_read_line_to_wkb(self.c_mapinfo,
+                                                       ctypes.byref(line_p),
+                                                       ctypes.byref(line_c),
+                                                       f_id,
+                                                       ctypes.byref(size),
+                                                       ctypes.byref(error))
+                if not barray:
+                    if error == -1:
+                        raise GrassError(_("Unable to read line of feature %i"%(f_id)))
+                    if error == -2:
+                        print("Empty feature %i"%(f_id))
+                    continue
+
+                ok = libvect.Vect_cat_get(ctypes.byref(line_c), field,
+                                          ctypes.byref(cat))
+                if ok < 1:
+                    pcat = None
+                else:
+                    pcat = cat.value
+
+                l.append((f_id, pcat, ctypes.string_at(barray, size.value)))
+                libgis.G_free(barray)
+
+            return l
+        return None
+
+    @must_be_open
+    def areas_to_wkb_list(self, bbox=None, field=1):
+        """Return all features of type point, line, boundary or centroid
+           as a list of Well Known Binary representations (WKB)
+           (id, cat, wkb) triplets located in a specific
+           bounding box.
+
+           :param bbox: The boundingbox to search for features,
+                       if bbox=None the boundingbox of the whole
+                       vector map layer is used
+
+           :type bbox: grass.pygrass.vector.basic.Bbox
+
+           :param field: The centroid category field
+           :type field: integer
+
+           :return: A list of triplets, or None if nothing was found
+
+           The well known binary are stored in byte arrays.
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            >>> bbox = Bbox(north=20, south=-1, east=20, west=-1)
+            >>> result = test_vect.areas_to_wkb_list(bbox=bbox)
+            >>> len(result)
+            4
+            >>> for entry in result:
+            ...     a_id, cat, wkb = entry
+            ...     print((a_id, cat, len(wkb)))
+            (1, 3, 225)
+            (2, 3, 141)
+            (3, 3, 93)
+            (4, 3, 141)
+
+            >>> result = test_vect.areas_to_wkb_list()
+            >>> len(result)
+            4
+            >>> for entry in result:
+            ...     a_id, cat, wkb = entry
+            ...     print((a_id, cat, len(wkb)))
+            (1, 3, 225)
+            (2, 3, 141)
+            (3, 3, 93)
+            (4, 3, 141)
+
+            >>> test_vect.close()
+
+
+        """
+        if bbox is None:
+            bbox = self.bbox()
+
+        bboxlist = self.find_by_bbox.areas(bbox, bboxlist_only = True)
+
+        if bboxlist is not None and len(bboxlist) > 0:
+
+            l = []
+            line_c = libvect.line_cats()
+            size = ctypes.c_size_t()
+            cat = ctypes.c_int()
+
+            for a_id in bboxlist.ids:
+                barray = libvect.Vect_read_area_to_wkb(self.c_mapinfo,
+                                                       a_id,
+                                                       ctypes.byref(size))
+                if not barray:
+                    raise GrassError(_("Unable to read area with id %i"%(a_id)))
+
+                pcat = None
+                c_ok = libvect.Vect_get_area_cats(self.c_mapinfo, a_id,
+                                                  ctypes.byref(line_c))
+                if c_ok == 0: # Centroid found
+
+                    ok = libvect.Vect_cat_get(ctypes.byref(line_c), field,
+                                              ctypes.byref(cat))
+                    if ok > 0:
+                        pcat = cat.value
+
+                l.append((a_id, pcat, ctypes.string_at(barray, size.value)))
+                libgis.G_free(barray)
+
+            return l
+        return None
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    utils.create_test_vector_map(test_vector_name)
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    from grass.pygrass.utils import get_mapset_vector
+    from grass.script.core import run_command
+    mset = get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
diff --git a/lib/python/pygrass/vector/abstract.py b/lib/python/pygrass/vector/abstract.py
index 301dacf..b0d80b8 100644
--- a/lib/python/pygrass/vector/abstract.py
+++ b/lib/python/pygrass/vector/abstract.py
@@ -14,6 +14,7 @@ from grass.pygrass.errors import GrassError, OpenError, must_be_open
 from grass.pygrass.vector.table import DBlinks, Link
 from grass.pygrass.vector.find import PointFinder, BboxFinder, PolygonFinder
 
+test_vector_name="abstract_doctest_map"
 
 def is_open(c_mapinfo):
     """Return if the Vector is open"""
@@ -30,51 +31,39 @@ class Info(object):
     """Basic vector info.
     To get access to the vector info the map must be opened. ::
 
-        >>> cens = Info('census')
-        >>> cens.open(mode='r')
+        >>> test_vect = Info(test_vector_name)
+        >>> test_vect.open(mode='r')
 
     Then it is possible to read and write the following map attributes: ::
 
-        >>> cens.organization
-        'NC OneMap'
-        >>> cens.person
-        'hmitaso'
-        >>> cens.title
-        'Wake County census blocks with attributes, clipped (polygon map)'
-        >>> cens.map_date
-        datetime.datetime(2007, 3, 19, 22, 1, 37)
-        >>> cens.date
-        ''
-        >>> cens.scale
+        >>> test_vect.organization
+        'Thuenen Institut'
+        >>> test_vect.person
+        'Soeren Gebbert'
+        >>> test_vect.title
+        'Test dataset'
+        >>> test_vect.scale
         1
-        >>> cens.comment
-        ''
-        >>> cens.comment = "One useful comment!"
-        >>> cens.comment
+        >>> test_vect.comment
+        'This is a comment'
+        >>> test_vect.comment = "One useful comment!"
+        >>> test_vect.comment
         'One useful comment!'
-        >>> cens.zone
-        0
-        >>> cens.proj
-        99
 
     There are some read only attributes: ::
 
-        >>> cens.full_name
-        'census at PERMANENT'
-        >>> cens.proj_name
-        'Lambert Conformal Conic'
-        >>> cens.maptype
+        >>> test_vect.maptype
         'native'
 
     And some basic methods: ::
 
-        >>> cens.is_3D()
+        >>> test_vect.is_3D()
         False
-        >>> cens.exist()
+        >>> test_vect.exist()
         True
-        >>> cens.is_open()
+        >>> test_vect.is_open()
         True
-        >>> cens.close()
+        >>> test_vect.close()
 
     """
     def __init__(self, name, mapset='', *aopen, **kwopen):
@@ -107,8 +96,6 @@ class Info(object):
         if not utils.is_clean_name(newname):
             str_err = _("Map name {0} not valid")
             raise ValueError(str_err.format(newname))
-        if self.exist():
-            self.rename(newname)
         self._name = newname
 
     name = property(fget=_get_name, fset=_set_name,
@@ -173,7 +160,10 @@ class Info(object):
     def _get_map_date(self):
         """Private method to obtain the Vector map date"""
         date_str = libvect.Vect_get_map_date(self.c_mapinfo)
-        return datetime.datetime.strptime(date_str, self.date_fmt)
+        try:
+            return datetime.datetime.strptime(date_str, self.date_fmt)
+        except:
+            return date_str
 
     def _set_map_date(self, datetimeobj):
         """Private method to change the Vector map date"""
@@ -362,18 +352,19 @@ class Info(object):
         if mode == 'w':
             openvect = libvect.Vect_open_new(self.c_mapinfo, self.name, with_z)
             self.dblinks = DBlinks(self.c_mapinfo)
-            if tab_cols:
-                # create a link
-                link = Link(layer,
-                            link_name if link_name else self.name,
-                            tab_name if tab_name else self.name,
-                            link_key, link_db, link_driver)
-                # add the new link
-                self.dblinks.add(link)
-                # create the table
-                table = link.table()
-                table.create(tab_cols)
-                table.conn.commit()
+
+        if mode in ('w', 'rw') and tab_cols:
+            # create a link
+            link = Link(layer,
+                        link_name if link_name else self.name,
+                        tab_name if tab_name else self.name,
+                        link_key, link_db, link_driver)
+            # add the new link
+            self.dblinks.add(link)
+            # create the table
+            table = link.table()
+            table.create(tab_cols)
+            table.conn.commit()
 
         # check the C function result.
         if openvect == -1:
@@ -388,13 +379,17 @@ class Info(object):
             self.layer = self.dblinks.by_layer(layer).layer
             self.table = self.dblinks.by_layer(layer).table()
             self.n_lines = self.table.n_rows()
-        self.writable = self.mapset == utils.getenv("MAPSET")
+        self.writeable =  self.mapset == utils.getenv("MAPSET")
+        # Initialize the finder
         self.find = {'by_point': PointFinder(self.c_mapinfo, self.table,
-                                             self.writable),
-                     'by_box': BboxFinder(self.c_mapinfo, self.table,
-                                          self.writable),
+                                             self.writeable),
+                     'by_bbox': BboxFinder(self.c_mapinfo, self.table,
+                                          self.writeable),
                      'by_polygon': PolygonFinder(self.c_mapinfo, self.table,
-                                                 self.writable), }
+                                                 self.writeable), }
+        self.find_by_point = self.find["by_point"]
+        self.find_by_bbox  = self.find["by_bbox"]
+        self.find_by_polygon = self.find["by_polygon"]
 
     def close(self, build=False):
         """Method to close the Vector
@@ -432,3 +427,9 @@ class Info(object):
             str_err = 'Error when trying build topology with Vect_build'
             raise GrassError(str_err)
         libvect.Vect_close(self.c_mapinfo)
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    utils.create_test_vector_map(test_vector_name)
+    doctest.testmod()
diff --git a/lib/python/pygrass/vector/basic.py b/lib/python/pygrass/vector/basic.py
index ccada6c..15f7bbb 100644
--- a/lib/python/pygrass/vector/basic.py
+++ b/lib/python/pygrass/vector/basic.py
@@ -572,3 +572,7 @@ class CatsList(object):
         :type cat: int
         """
         return bool(libvect.Vect_cat_in_cat_list(cat, self.c_cat_list))
+
+if __name__ == "__main__":
+    import doctest
+    doctest.testmod()
diff --git a/lib/python/pygrass/vector/find.py b/lib/python/pygrass/vector/find.py
index bb253fd..544c677 100644
--- a/lib/python/pygrass/vector/find.py
+++ b/lib/python/pygrass/vector/find.py
@@ -11,17 +11,19 @@ from grass.pygrass.errors import must_be_open
 from grass.pygrass.vector.basic import Ilist, BoxList
 from grass.pygrass.vector.geometry import read_line, Isle, Area, Point, Node
 
+# For test purposes
+test_vector_name = "find_doctest_map"
 
 class AbstractFinder(object):
-    def __init__(self, c_mapinfo, table=None, writable=False):
-        """AbstractFinder
+    def __init__(self, c_mapinfo, table=None, writeable=False):
+        """Abstract finder
         -----------------
 
         Find geometry feature around a point.
         """
         self.c_mapinfo = c_mapinfo
         self.table = table
-        self.writable = writable
+        self.writeable = writeable
         self.vtype = {'point':    libvect.GV_POINT,  # 1
                       'line':     libvect.GV_LINE,   # 2
                       'boundary': libvect.GV_BOUNDARY,  # 3
@@ -33,60 +35,119 @@ class AbstractFinder(object):
         from . import abstract
         return abstract.is_open(self.c_mapinfo)
 
-
 class PointFinder(AbstractFinder):
-    """PointFinder
-
-    Find the geomtry features of a vector map that are close to a point.
-
-    >>> from grass.pygrass.vector import VectorTopo
-    >>> zipcodes = VectorTopo('zipcodes', 'PERMANENT')
-    >>> schools = VectorTopo('schools', 'PERMANENT')
-    >>> zipcodes.open('r')
-    >>> schools.open('r')
-    >>> result = []
-    >>> for school in schools:
-    ...     zipcode = zipcodes.find['by_point'].area(school)
-    ...     result.append((school.attrs['NAMESHORT'],
-    ...                    zipcode.attrs['ZIPCODE']))
-    ...
-    >>> result[0]
-    (u'SWIFT CREEK', u'RALEIGH 27606')
-    >>> result[1]
-    (u'BRIARCLIFF', u'CARY 27511')
-    >>> result[2]
-    (u'FARMINGTON WOODS', u'CARY 27511')
-    >>> from grass.pygrass.vector.geometry import Point
-    >>> pnt = Point(631213.349291, 224684.900084)
-    >>> school = schools.find['by_point'].geo(pnt, maxdist=300.)
-    >>> school.attrs['NAMELONG']
-    u'ADAMS ELEMENTARY'
-    >>> for school in schools.find['by_point'].geos(pnt, maxdist=1000.):
-    ...     print school.attrs['NAMELONG']
-    ...
-    CARY HIGH
-    EAST CARY MIDDLE SITE
-    ADAMS ELEMENTARY
-    >>> schools.close()
-    >>> zipcodes.close()
+    """Point finder
+
+        This class provides an interface to search geometry features
+        of a vector map that are close to a point. The PointFinder class
+        is part of a topological vector map object.
     """
-    def __init__(self, c_mapinfo, table=None, writable=False):
-        """Find geometry feature around a point.
+    def __init__(self, c_mapinfo, table=None, writeable=False):
+        """Find geometry feature(s) around a point.
+
+            :param c_mapinfo: Pointer to the vector layer mapinfo structure
+            :type c_mapinfo: ctypes pointer to mapinfo structure
+
+            :param table: Attribute table of the vector layer
+            :type table: Class Table from grass.pygrass.table
+
+            :param writable: True or False
+            :type writeable: boolean
         """
-        super(PointFinder, self).__init__(c_mapinfo, table, writable)
+        super(PointFinder, self).__init__(c_mapinfo, table, writeable)
+
+    @must_be_open
+    def node(self, point, maxdist):
+        """Find the nearest node around a specific point.
+
+            :param point: The point to search
+            :type point: grass.pygrass.vector.geometry.Point
 
-# TODO: add the Node class and enable this method
-#    def node(self, point, maxdist):
-#        """Find the nearest node. Vect_find_node"""
-#        i = libvect.Vect_find_node(self.c_mapinfo, point.x, point.y, point.z,
-#                                   float(maxdist), int(not point.is2D))
-#        return geometry.Node(self.c_mapinfo.contents.plus.contents.Node[i])
+            :param maxdist: The maximum search distance around the point
+            :type maxdist: float
+
+            :return: A grass.pygrass.vector.geometry.Node if found or None
+
+            This methods uses libvect.Vect_find_node()()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.geometry import Point
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find nearest node
+            >>> points = (Point(10,0), Point(10,4), Point(14,0))
+            >>> result = []
+            >>> for point in points:
+            ...     f = test_vect.find_by_point.node(point=point, maxdist=1)
+            ...     if f:
+            ...         result.append(f)
+            >>> result
+            [Node(2), Node(1), Node(6)]
+
+            >>> test_vect.find_by_point.node(point=Point(20,20), maxdist=0)
+
+            >>> test_vect.close()
+        """
+        node_id = libvect.Vect_find_node(self.c_mapinfo, point.x,
+                                         point.y,
+                                         point.z if point.z else 0,
+                                         float(maxdist),
+                                         int(not point.is2D))
+        if node_id:
+            return Node(v_id=node_id, c_mapinfo=self.c_mapinfo,
+                 table=self.table, writeable=self.writeable)
 
     @must_be_open
     def geo(self, point, maxdist, type='all', exclude=0):
-        """Find the nearest line. Vect_find_line
+        """Find the nearest vector feature around a specific point.
+
+            :param point: The point to search
+            :type point: grass.pygrass.vector.geometry.Point
+
+            :param maxdist: The maximum search distance around the point
+            :type maxdist: float
+
+            :param type: The type of feature to search for
+                         Valid type are all the keys in find.vtype dictionary
+            :type type: string
+
+            :param exclude: if > 0 number of lines which should be
+                            excluded from selection
+
+            :return: A grass.pygrass.vector.geometry.Node if found or None
+
+            This methods uses libvect.Vect_find_line()()
 
-        Valid type are all the keys in find.vtype dictionary
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.geometry import Point
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find single features
+            >>> points = (Point(10,0), Point(10,6), Point(14,2))
+            >>> result = []
+            >>> for point in points:
+            ...     f = test_vect.find_by_point.geo(point=point, maxdist=1)
+            ...     if f:
+            ...         result.append(f)
+            >>> for f in result:
+            ...     print(f.to_wkt_p())    #doctest: +NORMALIZE_WHITESPACE
+            LINESTRING(10.000000 4.000000,
+                       10.000000 2.000000,
+                       10.000000 0.000000)
+            POINT(10.000000 6.000000)
+            LINESTRING(14.000000 4.000000,
+                       14.000000 2.000000,
+                       14.000000 0.000000)
+
+            >>> test_vect.find_by_point.geo(point=Point(20,20), maxdist=0)
+
+            >>> test_vect.close()
         """
         feature_id = libvect.Vect_find_line(self.c_mapinfo,
                                             point.x, point.y,
@@ -95,13 +156,83 @@ class PointFinder(AbstractFinder):
                                             int(not point.is2D), exclude)
         if feature_id:
             return read_line(feature_id, self.c_mapinfo,
-                             self.table, self.writable)
+                             self.table, self.writeable)
 
     @must_be_open
     def geos(self, point, maxdist, type='all', exclude=None):
-        """Find the nearest line. Vect_find_line_list
+        """Find the nearest vector features around a specific point.
+
+            :param point: The point to search
+            :type point: grass.pygrass.vector.geometry.Point
+
+            :param maxdist: The maximum search distance around the point
+            :type maxdist: float
+
+            :param type: The type of feature to search for
+                         Valid type are all the keys in find.vtype dictionary
+            :type type: string
 
-        Valid type are all the keys in find.vtype dictionary
+            :param exclude: if > 0 number of lines which should be
+                            excluded from selection
+
+            :return: A list of grass.pygrass.vector.geometry
+                     (Line, Point, Boundary, Centroid) if found or None
+
+            This methods uses libvect.Vect_find_line_list()()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.geometry import Point
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find multiple features
+            >>> points = (Point(10,0), Point(10,5), Point(14,2))
+            >>> result = []
+            >>> for point in points:
+            ...     f = test_vect.find_by_point.geos(point=point,
+            ...                                      maxdist=1.5)
+            ...     if f:
+            ...         result.append(f)
+            >>> for f in result:
+            ...     print(f)             #doctest: +NORMALIZE_WHITESPACE
+            [Line([Point(10.000000, 4.000000),
+                   Point(10.000000, 2.000000),
+                   Point(10.000000, 0.000000)])]
+            [Line([Point(10.000000, 4.000000),
+                   Point(10.000000, 2.000000),
+                   Point(10.000000, 0.000000)]),
+             Point(10.000000, 6.000000)]
+            [Line([Point(14.000000, 4.000000),
+                   Point(14.000000, 2.000000),
+                   Point(14.000000, 0.000000)])]
+
+            # Find multiple boundaries
+            >>> point = Point(3,3)
+            >>> result = test_vect.find_by_point.geos(point=Point(3,3),
+            ...                                          type="boundary",
+            ...                                          maxdist=1.5)
+            >>> result                   #doctest: +NORMALIZE_WHITESPACE
+            [Boundary([Point(0.000000, 4.000000), Point(4.000000, 4.000000)]),
+             Boundary([Point(4.000000, 4.000000), Point(4.000000, 0.000000)]),
+             Boundary([Point(1.000000, 1.000000), Point(1.000000, 3.000000),
+                       Point(3.000000, 3.000000), Point(3.000000, 1.000000),
+                       Point(1.000000, 1.000000)]),
+             Boundary([Point(4.000000, 4.000000), Point(6.000000, 4.000000)])]
+
+            # Find multiple centroids
+            >>> point = Point(3,3)
+            >>> result = test_vect.find_by_point.geos(point=Point(3,3),
+            ...                                          type="centroid",
+            ...                                          maxdist=1.5)
+            >>> result                   #doctest: +NORMALIZE_WHITESPACE
+            [Centoid(2.500000, 2.500000),
+             Centoid(3.500000, 3.500000)]
+
+            >>> test_vect.find_by_point.geos(point=Point(20,20), maxdist=0)
+
+            >>> test_vect.close()
         """
         excl = Ilist(exclude) if exclude else Ilist([])
         found = Ilist()
@@ -111,61 +242,310 @@ class PointFinder(AbstractFinder):
                                        self.vtype[type], float(maxdist),
                                        int(not point.is2D),
                                        excl.c_ilist, found.c_ilist):
-            return [read_line(f_id, self.c_mapinfo, self.table, self.writable)
+            return [read_line(f_id, self.c_mapinfo, self.table, self.writeable)
                     for f_id in found]
-        else:
-            return []
+
 
     @must_be_open
     def area(self, point):
-        """Find the nearest area. Vect_find_area"""
+        """Find the nearest area around a specific point.
+
+            :param point: The point to search
+            :type point: grass.pygrass.vector.geometry.Point
+
+            :return: A grass.pygrass.vector.geometry.Area if found or None
+
+            This methods uses libvect.Vect_find_area()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.geometry import Point
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find AREAS
+            >>> points = (Point(0.5,0.5), Point(5,1), Point(7,1))
+            >>> result = []
+            >>> for point in points:
+            ...     area = test_vect.find_by_point.area(point)
+            ...     result.append(area)
+            >>> result
+            [Area(1), Area(2), Area(4)]
+            >>> for area in result:
+            ...     print(area.to_wkt())         #doctest: +NORMALIZE_WHITESPACE
+            POLYGON ((0.0000000000000000 0.0000000000000000,
+                      0.0000000000000000 4.0000000000000000,
+                      0.0000000000000000 4.0000000000000000,
+                      4.0000000000000000 4.0000000000000000,
+                      4.0000000000000000 4.0000000000000000,
+                      4.0000000000000000 0.0000000000000000,
+                      4.0000000000000000 0.0000000000000000,
+                      0.0000000000000000 0.0000000000000000),
+                     (1.0000000000000000 1.0000000000000000,
+                      3.0000000000000000 1.0000000000000000,
+                      3.0000000000000000 3.0000000000000000,
+                      1.0000000000000000 3.0000000000000000,
+                      1.0000000000000000 1.0000000000000000))
+            POLYGON ((4.0000000000000000 0.0000000000000000,
+                      4.0000000000000000 4.0000000000000000,
+                      4.0000000000000000 4.0000000000000000,
+                      6.0000000000000000 4.0000000000000000,
+                      6.0000000000000000 4.0000000000000000,
+                      6.0000000000000000 0.0000000000000000,
+                      6.0000000000000000 0.0000000000000000,
+                      4.0000000000000000 0.0000000000000000))
+            POLYGON ((6.0000000000000000 0.0000000000000000,
+                      6.0000000000000000 4.0000000000000000,
+                      6.0000000000000000 4.0000000000000000,
+                      8.0000000000000000 4.0000000000000000,
+                      8.0000000000000000 4.0000000000000000,
+                      8.0000000000000000 0.0000000000000000,
+                      8.0000000000000000 0.0000000000000000,
+                      6.0000000000000000 0.0000000000000000))
+
+            >>> test_vect.find_by_point.area(Point(20,20))
+
+            >>> test_vect.close()
+        """
         area_id = libvect.Vect_find_area(self.c_mapinfo, point.x, point.y)
         if area_id:
             return Area(v_id=area_id, c_mapinfo=self.c_mapinfo,
-                        table=self.table, writable=self.writable)
+                        table=self.table, writeable=self.writeable)
 
     @must_be_open
     def island(self, point):
-        """Find the nearest island. Vect_find_island"""
+        """Find the nearest island around a specific point.
+
+            :param point: The point to search
+            :type point: grass.pygrass.vector.geometry.Point
+
+            :return: A grass.pygrass.vector.geometry.Isle if found or None
+
+            This methods uses Vect_find_island.Vect_find_area()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.geometry import Point
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find ISLANDS
+            >>> points = (Point(2,2), Point(5,1))
+            >>> result = []
+            >>> for point in points:
+            ...     area = test_vect.find_by_point.island(point)
+            ...     result.append(area)
+            >>> result
+            [Isle(2), Isle(1)]
+            >>> for isle in result:
+            ...     print(isle.to_wkt())         #doctest: +NORMALIZE_WHITESPACE
+            Polygon((1.000000 1.000000, 3.000000 1.000000,
+                     3.000000 3.000000, 1.000000 3.000000, 1.000000 1.000000))
+            Polygon((0.000000 4.000000, 0.000000 0.000000, 4.000000 0.000000,
+                     6.000000 0.000000, 8.000000 0.000000, 8.000000 4.000000,
+                     6.000000 4.000000, 4.000000 4.000000, 0.000000 4.000000))
+
+            >>> test_vect.find_by_point.island(Point(20,20))
+
+            >>> test_vect.close()
+        """
         isle_id = libvect.Vect_find_island(self.c_mapinfo, point.x, point.y)
         if isle_id:
             return Isle(v_id=isle_id, c_mapinfo=self.c_mapinfo,
-                        table=self.table, writable=self.writable)
+                        table=self.table, writeable=self.writeable)
 
 
 class BboxFinder(AbstractFinder):
-    def __init__(self, c_mapinfo, table=None, writable=False):
-        super(BboxFinder, self).__init__(c_mapinfo, table, writable)
+    """Bounding Box finder
+
+    This class provides an interface to search geometry features
+    of a vector map that are inside or intersect a boundingbox.
+    The BboxFinder class is part of a topological vector map object.
+
+    """
+    def __init__(self, c_mapinfo, table=None, writeable=False):
+        """Find geometry feature(s)that are insider or intersect
+           with a boundingbox.
+
+            :param c_mapinfo: Pointer to the vector layer mapinfo structure
+            :type c_mapinfo: ctypes pointer to mapinfo structure
+
+            :param table: Attribute table of the vector layer
+            :type table: Class Table from grass.pygrass.table
+
+            :param writable: True or False
+            :type writeable: boolean
+        """
+        super(BboxFinder, self).__init__(c_mapinfo, table, writeable)
 
     @must_be_open
-    def geos(self, bbox, type='all', bbox_list=False):
-        """Find the geometry features contained in the bbox.
-        Vect_select_lines_by_box
+    def geos(self, bbox, type='all', bboxlist_only=False):
+        """Find vector features inside a boundingbox.
+
+            :param bbox: The boundingbox to search in
+            :type bbox: grass.pygrass.vector.basic.Bbox
+
+            :param type: The type of feature to search for
+                         Valid type are all the keys in find.vtype dictionary
+            :type type: string
+
+            :param bboxlist_only: If true the BoxList will be returned,
+                                  no features are generated
+            :type bboxlist_only: boolean
+
+            :return: A list of grass.pygrass.vector.geometry
+                     (Line, Point, Boundary, Centroid) if found,
+                     or None if nothing was found.
+                     If bboxlist_only is True a BoxList
+                     object will be returned, or None if nothing was found.
+
+            This methods uses libvect.Vect_select_lines_by_box()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            >>> bbox = Bbox(north=5, south=-1, east=3, west=-1)
+            >>> result = test_vect.find_by_bbox.geos(bbox=bbox)
+            >>> [bbox for bbox in result] #doctest: +NORMALIZE_WHITESPACE
+            [Boundary([Point(4.000000, 0.000000), Point(0.000000, 0.000000)]),
+             Boundary([Point(0.000000, 0.000000), Point(0.000000, 4.000000)]),
+             Boundary([Point(0.000000, 4.000000), Point(4.000000, 4.000000)]),
+             Boundary([Point(1.000000, 1.000000), Point(1.000000, 3.000000),
+                       Point(3.000000, 3.000000), Point(3.000000, 1.000000),
+                       Point(1.000000, 1.000000)]),
+             Centoid(2.500000, 2.500000)]
+
+            >>> bbox = Bbox(north=5, south=-1, east=3, west=-1)
+            >>> result = test_vect.find_by_bbox.geos(bbox=bbox,
+            ...                                      bboxlist_only=True)
+            >>> result                   #doctest: +NORMALIZE_WHITESPACE
+            Boxlist([Bbox(0.0, 0.0, 4.0, 0.0),
+                     Bbox(4.0, 0.0, 0.0, 0.0),
+                     Bbox(4.0, 4.0, 4.0, 0.0),
+                     Bbox(3.0, 1.0, 3.0, 1.0),
+                     Bbox(2.5, 2.5, 2.5, 2.5)])
 
-        Valid type are all the keys in find.vtype dictionary
+            >>> bbox = Bbox(north=7, south=-1, east=15, west=9)
+            >>> result = test_vect.find_by_bbox.geos(bbox=bbox)
+            >>> [bbox for bbox in result] #doctest: +NORMALIZE_WHITESPACE
+            [Line([Point(10.000000, 4.000000), Point(10.000000, 2.000000),
+                   Point(10.000000, 0.000000)]),
+             Point(10.000000, 6.000000),
+             Line([Point(12.000000, 4.000000), Point(12.000000, 2.000000),
+                   Point(12.000000, 0.000000)]),
+             Point(12.000000, 6.000000),
+             Line([Point(14.000000, 4.000000), Point(14.000000, 2.000000),
+                   Point(14.000000, 0.000000)]),
+             Point(14.000000, 6.000000)]
+
+            >>> bbox = Bbox(north=20, south=18, east=20, west=18)
+            >>> test_vect.find_by_bbox.geos(bbox=bbox)
+
+            >>> bbox = Bbox(north=20, south=18, east=20, west=18)
+            >>> test_vect.find_by_bbox.geos(bbox=bbox, bboxlist_only=True)
+
+            >>> test_vect.close()
         """
         found = BoxList()
         if libvect.Vect_select_lines_by_box(self.c_mapinfo, bbox.c_bbox,
                                             self.vtype[type], found.c_boxlist):
-            if bbox_list:
+            if bboxlist_only:
                 return found
             else:
                 return (read_line(f_id, self.c_mapinfo, self.table,
-                                  self.writable) for f_id in found.ids)
+                                  self.writeable) for f_id in found.ids)
 
     @must_be_open
     def nodes(self, bbox):
-        """Find the nearest area. Vect_find_area"""
+        """Find nodes inside a boundingbox.
+
+            :param bbox: The boundingbox to search in
+            :type bbox: grass.pygrass.vector.basic.Bbox
+
+            :return: A list of nodes or None if nothing was found
+
+            This methods uses libvect.Vect_select_nodes_by_box()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find nodes in box
+            >>> bbox = Bbox(north=5, south=-1, east=15, west=9)
+            >>> result = test_vect.find_by_bbox.nodes(bbox=bbox)
+            >>> [node for node in result]
+            [Node(2), Node(1), Node(4), Node(3), Node(5), Node(6)]
+
+            >>> bbox = Bbox(north=20, south=18, east=20, west=18)
+            >>> test_vect.find_by_bbox.nodes(bbox=bbox)
+
+            >>> test_vect.close()
+        """
         found = Ilist()
         if libvect.Vect_select_nodes_by_box(self.c_mapinfo, bbox.c_bbox,
                                             found.c_ilist):
-            for n_id in found:
-                yield Node(v_id=n_id, c_mapinfo=self.c_mapinfo,
-                           table=self.table, writable=self.writable)
+            if len(found) > 0:
+                return (Node(v_id=n_id, c_mapinfo=self.c_mapinfo,
+                             table=self.table, writeable=self.writeable)
+                        for n_id in found)
 
     @must_be_open
     def areas(self, bbox, boxlist=None, bboxlist_only=False):
-        """Find the nearest area. Vect_find_area"""
+        """Find areas inside a boundingbox.
+
+            :param bbox: The boundingbox to search in
+            :type bbox: grass.pygrass.vector.basic.Bbox
+
+            :param boxlist: An existing BoxList to be filled with
+            :type_boxlist: grass.pygrass.vector.basic.BoxList
+
+            :param bboxlist_only: If true the BoxList will be returned,
+                                  no features are generated
+            :type bboxlist_only: boolean
+
+            :return: A list of areas or None if nothing was found
+
+            This methods uses libvect.Vect_select_areas_by_box()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find areas in box
+            >>> bbox = Bbox(north=5, south=-1, east=9, west=-1)
+            >>> result = test_vect.find_by_bbox.areas(bbox=bbox)
+            >>> [area for area in result]
+            [Area(1), Area(2), Area(3), Area(4)]
+
+            >>> bbox = Bbox(north=5, south=-1, east=9, west=-1)
+            >>> result = test_vect.find_by_bbox.areas(bbox=bbox,
+            ...                                       bboxlist_only=True)
+            >>> result                   #doctest: +NORMALIZE_WHITESPACE
+            Boxlist([Bbox(4.0, 0.0, 4.0, 0.0),
+                     Bbox(4.0, 0.0, 6.0, 4.0),
+                     Bbox(3.0, 1.0, 3.0, 1.0),
+                     Bbox(4.0, 0.0, 8.0, 6.0)])
+
+            >>> bbox = Bbox(north=20, south=18, east=20, west=18)
+            >>> test_vect.find_by_bbox.areas(bbox=bbox)
+
+            >>> test_vect.find_by_bbox.areas(bbox=bbox,
+            ...                              bboxlist_only=True)
+
+            >>> test_vect.close()
+        """
         boxlist = boxlist if boxlist else BoxList()
         if libvect.Vect_select_areas_by_box(self.c_mapinfo, bbox.c_bbox,
                                             boxlist.c_boxlist):
@@ -173,31 +553,83 @@ class BboxFinder(AbstractFinder):
                 return boxlist
             else:
                 return (Area(v_id=a_id, c_mapinfo=self.c_mapinfo,
-                             table=self.table, writable=self.writable)
+                             table=self.table, writeable=self.writeable)
                         for a_id in boxlist.ids)
-        return []
 
     @must_be_open
-    def islands(self, bbox, bbox_list=False):
-        """Find the nearest island. Vect_find_island"""
+    def islands(self, bbox, bboxlist_only=False):
+        """Find isles inside a boundingbox.
+
+            :param bbox: The boundingbox to search in
+            :type bbox: grass.pygrass.vector.basic.Bbox
+
+            :param bboxlist_only: If true the BoxList will be returned,
+                                  no features are generated
+            :type bboxlist_only: boolean
+
+            :return: A list of isles or None if nothing was found
+
+            This methods uses libvect.Vect_select_isles_by_box()
+
+            Examples:
+
+            >>> from grass.pygrass.vector import VectorTopo
+            >>> from grass.pygrass.vector.basic import Bbox
+            >>> test_vect = VectorTopo(test_vector_name)
+            >>> test_vect.open('r')
+
+            # Find isles in box
+            >>> bbox = Bbox(north=5, south=-1, east=9, west=-1)
+            >>> result = test_vect.find_by_bbox.islands(bbox=bbox)
+            >>> [isle for isle in result]
+            [Isle(1), Isle(2)]
+
+            >>> bbox = Bbox(north=5, south=-1, east=9, west=-1)
+            >>> result = test_vect.find_by_bbox.islands(bbox=bbox,
+            ...                                       bboxlist_only=True)
+            >>> result                   #doctest: +NORMALIZE_WHITESPACE
+            Boxlist([Bbox(4.0, 0.0, 8.0, 0.0),
+                     Bbox(3.0, 1.0, 3.0, 1.0)])
+
+            >>> bbox = Bbox(north=20, south=18, east=20, west=18)
+            >>> test_vect.find_by_bbox.islands(bbox=bbox)
+
+            >>> test_vect.find_by_bbox.islands(bbox=bbox,
+            ...                              bboxlist_only=True)
+
+            >>> test_vect.close()
+        """
         found = BoxList()
         if libvect.Vect_select_isles_by_box(self.c_mapinfo, bbox.c_bbox,
                                             found.c_boxlist):
-            if bbox_list:
+            if bboxlist_only:
                 return found
             else:
                 return (Isle(v_id=i_id, c_mapinfo=self.c_mapinfo,
-                             table=self.table, writable=self.writable)
+                             table=self.table, writeable=self.writeable)
                         for i_id in found.ids)
-        return []
 
 
 class PolygonFinder(AbstractFinder):
-    def __init__(self, c_mapinfo, table=None, writable=False):
-        super(PolygonFinder, self).__init__(c_mapinfo, table, writable)
+    def __init__(self, c_mapinfo, table=None, writeable=False):
+        super(PolygonFinder, self).__init__(c_mapinfo, table, writeable)
 
     def lines(self, polygon, isles=None):
         pass
 
     def areas(self, polygon, isles=None):
         pass
+
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    utils.create_test_vector_map(test_vector_name)
+    doctest.testmod()
+
+    """Remove the generated vector map, if exist"""
+    from grass.pygrass.utils import get_mapset_vector
+    from grass.script.core import run_command
+    mset = get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
diff --git a/lib/python/pygrass/vector/geometry.py b/lib/python/pygrass/vector/geometry.py
index 5f2f5bf..a2934c9 100644
--- a/lib/python/pygrass/vector/geometry.py
+++ b/lib/python/pygrass/vector/geometry.py
@@ -14,11 +14,13 @@ import numpy as np
 import grass.lib.gis as libgis
 import grass.lib.vector as libvect
 
-from grass.pygrass.errors import GrassError
+from grass.pygrass.errors import GrassError, mapinfo_must_be_set
 
 from grass.pygrass.vector.basic import Ilist, Bbox, Cats
 from grass.pygrass.vector import sql
 
+# For test purposes
+test_vector_name = "geometry_doctest_map"
 
 LineDist = namedtuple('LineDist', 'point dist spdist sldist')
 
@@ -133,12 +135,12 @@ def get_xyz(pnt):
 
 
 class Attrs(object):
-    def __init__(self, cat, table, writable=False):
+    def __init__(self, cat, table, writeable=False):
         self._cat = None
         self.cond = ''
         self.table = table
         self.cat = cat
-        self.writable = writable
+        self.writeable = writeable
 
     def _get_cat(self):
         return self._cat
@@ -152,51 +154,61 @@ class Attrs(object):
     cat = property(fget=_get_cat, fset=_set_cat,
                    doc="Set and obtain cat value")
 
-    def __getitem__(self, key):
+    def __getitem__(self, keys):
         """Return the value stored in the attribute table.
 
         >>> from grass.pygrass.vector import VectorTopo
-        >>> schools = VectorTopo('schools')
-        >>> schools.open('r')
-        >>> school = schools[1]
-        >>> attrs = Attrs(school.cat, schools.table)
-        >>> attrs['TAG']
-        u'568'
+        >>> test_vect = VectorTopo(test_vector_name)
+        >>> test_vect.open('r')
+        >>> v1 = test_vect[1]
+        >>> v1.attrs['name']
+        u'point'
+        >>> v1.attrs['name', 'value']
+        (u'point', 1.0)
+        >>> test_vect.close()
 
         """
-        #SELECT {cols} FROM {tname} WHERE {condition};
-        try:
-            cur = self.table.execute(sql.SELECT_WHERE.format(cols=key,
-                                                         tname=self.table.name,
-                                                         condition=self.cond))
-        except:
-            import ipdb; ipdb.set_trace()
+        sqlcode = sql.SELECT_WHERE.format(cols=(keys if np.isscalar(keys)
+                                                else ', '.join(keys)),
+                                          tname=self.table.name,
+                                          condition=self.cond)
+        cur = self.table.execute(sqlcode)
         results = cur.fetchone()
         if results is not None:
             return results[0] if len(results) == 1 else results
 
-    def __setitem__(self, key, value):
+    def __setitem__(self, keys, values):
         """Set value of a given column of a table attribute.
 
         >>> from grass.pygrass.vector import VectorTopo
-        >>> from grass.pygrass.utils import copy, remove
-        >>> copy('schools', 'myschools', 'vect')
-        >>> schools = VectorTopo('myschools')
-        >>> schools.open('r')
-        >>> school = schools[1]
-        >>> attrs = Attrs(school.cat, schools.table, True)
-        >>> attrs['TAG'] = 'New Label'
-        >>> attrs['TAG']
-        u'New Label'
-        >>> attrs.table.conn.close()
-        >>> remove('myschools','vect')
-        """
-        if self.writable:
-            #UPDATE {tname} SET {new_col} = {old_col} WHERE {condition}
-            values = '%s=%r' % (key, value)
-            self.table.execute(sql.UPDATE_WHERE.format(tname=self.table.name,
-                                                       values=values,
-                                                       condition=self.cond))
+        >>> test_vect = VectorTopo(test_vector_name)
+        >>> test_vect.open('r')
+        >>> v1 = test_vect[1]
+        >>> v1.attrs['name']
+        u'point'
+
+        >>> v1.attrs['name'] = "new_point_1"
+        >>> v1.attrs['name']
+        u'new_point_1'
+
+        >>> v1.attrs['name', 'value'] = "new_point_2", 100.
+        >>> v1.attrs['name', 'value']
+        (u'new_point_2', 100.0)
+        >>> v1.attrs['name', 'value'] = "point", 1.
+        >>> v1.attrs.table.conn.commit()
+        >>> test_vect.close()
+
+        """
+        if self.writeable:
+            if np.isscalar(keys):
+                keys, values = (keys, ), (values, )
+
+            vals = ','.join(['%s=%r' % (k, v) for k, v in zip(keys, values)])
+            # "UPDATE {tname} SET {values} WHERE {condition};"
+            sqlcode = sql.UPDATE_WHERE.format(tname=self.table.name,
+                                              values=vals,
+                                              condition=self.cond)
+            self.table.execute(sqlcode)
             #self.table.conn.commit()
         else:
             str_err = "You can only read the attributes if the map is in another mapset"
@@ -211,15 +223,14 @@ class Attrs(object):
 
     def values(self):
         """Return the values of the attribute table row.
+
            >>> from grass.pygrass.vector import VectorTopo
-           >>> schools = VectorTopo('schools')
-           >>> schools.open('r')
-           >>> school = schools[1]
-           >>> attrs = Attrs(school.cat, schools.table)
-           >>> attrs.values()       # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
-           (1,
-           ...
-           None)
+           >>> test_vect = VectorTopo(test_vector_name)
+           >>> test_vect.open('r')
+           >>> v1 = test_vect[1]
+           >>> v1.attrs.values()
+           (1, u'point', 1.0)
+            >>> test_vect.close()
 
         """
         #SELECT {cols} FROM {tname} WHERE {condition}
@@ -230,15 +241,15 @@ class Attrs(object):
 
     def keys(self):
         """Return the column name of the attribute table.
+
            >>> from grass.pygrass.vector import VectorTopo
-           >>> schools = VectorTopo('schools')
-           >>> schools.open('r')
-           >>> school = schools[1]
-           >>> attrs = Attrs(school.cat, schools.table)
-           >>> attrs.keys()         # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
-           [u'cat',
-           ...
-           u'NOTES']
+           >>> test_vect = VectorTopo(test_vector_name)
+           >>> test_vect.open('r')
+           >>> v1 = test_vect[1]
+           >>> v1.attrs.keys()
+           [u'cat', u'name', u'value']
+            >>> test_vect.close()
+
         """
         return self.table.columns.names()
 
@@ -249,54 +260,102 @@ class Attrs(object):
 
 class Geo(object):
     """
-    >>> geo0 = Geo()
-    >>> points = ctypes.pointer(libvect.line_pnts())
-    >>> cats = ctypes.pointer(libvect.line_cats())
-    >>> geo1 = Geo(c_points=points, c_cats=cats)
+    Base object for different feature types
     """
     gtype = None
 
     def __init__(self, v_id=0, c_mapinfo=None, c_points=None, c_cats=None,
-                 table=None, writable=False, is2D=True):
+                 table=None, writeable=False, is2D=True, free_points=False,
+                 free_cats=False):
+        """Constructor of a geometry object
+
+            :param v_id:      The vector feature id
+            :param c_mapinfo: A pointer to the vector mapinfo structure
+            :param c_points:  A pointer to a libvect.line_pnts structure, this
+                              is optional, if not set an internal structure will
+                              be allocated and free'd at object destruction
+            :param c_cats:    A pointer to a libvect.line_cats structure, this
+                              is optional, if not set an internal structure will
+                              be allocated and free'd at object destruction
+            :param table:     The attribute table to select attributes for
+                              this feature
+            :param writeable: Not sure what this is for?
+            :param is2D:      If True this feature has two dimensions, False if
+                              this feature has three dimensions
+            :param free_points: Set this True if the provided c_points structure
+                                should be free'd at object destruction, be aware
+                                that no other object should free them, otherwise
+                                you can expect a double free corruption segfault
+            :param free_cats:   Set this True if the provided c_cats structure
+                                should be free'd at object destruction, be aware
+                                that no other object should free them, otherwise
+                                you can expect a double free corruption segfault
+
+        """
         self.id = v_id  # vector id
         self.c_mapinfo = c_mapinfo
         self.is2D = (is2D if is2D is not None else
                      bool(libvect.Vect_is_3d(self.c_mapinfo) != 1))
 
+        # Set True if cats and points are allocated by this object
+        # to free the cats and points structures on destruction
+        self._free_points = False
+        self._free_cats = False
+
         read = False
         # set c_points
         if c_points is None:
             self.c_points = ctypes.pointer(libvect.line_pnts())
+            self._free_points = True
             read = True
         else:
             self.c_points = c_points
+            self._free_points = free_points
 
         # set c_cats
         if c_cats is None:
             self.c_cats = ctypes.pointer(libvect.line_cats())
+            self._free_cats = free_cats
             read = True
         else:
             self.c_cats = c_cats
-
-        # set the attributes
-        self.attrs = None
-        if table is not None:
-            self.attrs = Attrs(self.cat, table, writable)
+            self._free_cats = True
 
         if self.id and self.c_mapinfo is not None and read:
             self.read()
 
+        # set the attributes as last thing to do
+        self.attrs = None
+        if table is not None and self.cat is not None:
+            self.attrs = Attrs(self.cat, table, writeable)
+
+    def __del__(self):
+        """Take care of the allocated line_pnts and line_cats allocation
+        """
+        if self._free_points == True and self.c_points:
+            if self.c_points.contents.alloc_points > 0:
+                #print("G_free(points) [%i]"%(self.c_points.contents.alloc_points))
+                libgis.G_free(self.c_points.contents.x)
+                libgis.G_free(self.c_points.contents.y)
+                if self.c_points.contents.z:
+                    libgis.G_free(self.c_points.contents.z)
+        if self._free_cats == True and self.c_cats:
+            if self.c_cats.contents.alloc_cats > 0:
+                #print("G_free(cats) [%i]"%(self.c_cats.contents.alloc_cats))
+                libgis.G_free(self.c_cats.contents.cat)
+
     @property
     def cat(self):
         if self.c_cats.contents.cat:
             return self.c_cats.contents.cat.contents.value
 
-    def is_with_topology(self):
+    def has_topology(self):
         if self.c_mapinfo is not None:
             return self.c_mapinfo.contents.level == 2
         else:
             return False
 
+    @mapinfo_must_be_set
     def read(self):
         """Read and set the coordinates of the centroid from the vector map,
         using the centroid_id and calling the Vect_read_line C function"""
@@ -304,6 +363,29 @@ class Geo(object):
                                                        self.c_points,
                                                        self.c_cats)
 
+    def to_wkt(self):
+        """Return a "well know text" (WKT) geometry string, this method uses
+           the GEOS implementation in the vector library. ::
+
+            >>> pnt = Point(10, 100)
+            >>> pnt.to_wkt()
+            'POINT (10.0000000000000000 100.0000000000000000)'
+        """
+        return libvect.Vect_line_to_wkt(self.c_points, self.gtype, not self.is2D)
+
+    def to_wkb(self):
+        """Return a "well know binary" (WKB) geometry byte array, this method uses
+           the GEOS implementation in the vector library. ::
+
+            >>> pnt = Point(10, 100)
+            >>> wkb = pnt.to_wkb()
+            >>> len(wkb)
+            21
+        """
+        size = ctypes.c_size_t()
+        barray = libvect.Vect_line_to_wkb(self.c_points, self.gtype,
+                                          not self.is2D, ctypes.byref(size))
+        return(ctypes.string_at(barray, size.value))
 
 class Point(Geo):
     """Instantiate a Point object that could be 2 or 3D, default
@@ -327,7 +409,20 @@ class Point(Geo):
         >>> pnt
         Point(0.000000, 0.000000, 0.000000)
         >>> print(pnt)
-        POINT(0.000000 0.000000 0.000000)
+        POINT Z (0.0000000000000000 0.0000000000000000 0.0000000000000000)
+
+
+        >>> c_points = ctypes.pointer(libvect.line_pnts())
+        >>> c_cats = ctypes.pointer(libvect.line_cats())
+        >>> p = Point(c_points = c_points, c_cats=c_cats)
+        >>> del p
+
+
+        >>> c_points = ctypes.pointer(libvect.line_pnts())
+        >>> c_cats = ctypes.pointer(libvect.line_cats())
+        >>> p = Point(c_points=c_points, c_cats=c_cats, free_points=True,
+        ...           free_cats=True)
+        >>> del p
 
     ..
     """
@@ -378,7 +473,7 @@ class Point(Geo):
                  doc="Set and obtain z coordinate")
 
     def __str__(self):
-        return self.get_wkt()
+        return self.to_wkt()
 
     def __repr__(self):
         return "Point(%s)" % ', '.join(['%f' % coor for coor in self.coords()])
@@ -427,11 +522,11 @@ class Point(Geo):
         else:
             return self.x, self.y, self.z
 
-    def get_wkt(self):
-        """Return a "well know text" (WKT) geometry string. ::
+    def to_wkt_p(self):
+        """Return a "well know text" (WKT) geometry string Python implementation. ::
 
             >>> pnt = Point(10, 100)
-            >>> pnt.get_wkt()
+            >>> pnt.to_wkt_p()
             'POINT(10.000000 100.000000)'
 
         .. warning::
@@ -442,16 +537,6 @@ class Point(Geo):
         return "POINT(%s)" % ' '.join(['%f' % coord
                                       for coord in self.coords()])
 
-    def get_wkb(self):
-        """Return a "well know binary" (WKB) geometry buffer
-
-        .. warning::
-
-            Not implemented yet.
-
-        """
-        pass
-
     def distance(self, pnt):
         """Calculate distance of 2 points, using the Vect_points_distance
         C function, If one of the point have z == None, return the 2D distance.
@@ -499,13 +584,11 @@ class Point(Geo):
         :returns: the buffer as Area object
 
         >>> pnt = Point(0, 0)
-        >>> area = pnt.buffer(10)
-        >>> area.boundary                              #doctest: +ELLIPSIS
+        >>> boundary, centroid = pnt.buffer(10)
+        >>> boundary                              #doctest: +ELLIPSIS
         Line([Point(10.000000, 0.000000),...Point(10.000000, 0.000000)])
-        >>> area.centroid
+        >>> centroid
         Point(0.000000, 0.000000)
-        >>> area.isles
-        []
 
         """
         if dist is not None:
@@ -519,7 +602,7 @@ class Point(Geo):
                                    dist_x, dist_y,
                                    angle, int(round_), tol,
                                    p_points)
-        return Area(boundary=bound, centroid=self)
+        return (bound, self)
 
 
 class Line(Geo):
@@ -603,23 +686,23 @@ class Line(Geo):
         return self.c_points.contents.n_points
 
     def __str__(self):
-        return self.get_wkt()
+        return self.to_wkt()
 
     def __repr__(self):
         return "Line([%s])" % ', '.join([repr(pnt) for pnt in self.__iter__()])
 
-    def get_pnt(self, distance, angle=0, slope=0):
+    def point_on_line(self, distance, angle=0, slope=0):
         """Return a Point object on line in the specified distance, using the
         `Vect_point_on_line` C function.
         Raise a ValueError If the distance exceed the Line length. ::
 
             >>> line = Line([(0, 0), (1, 1)])
-            >>> line.get_pnt(5)      #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+            >>> line.point_on_line(5)      #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
             Traceback (most recent call last):
                 ...
             ValueError: The distance exceed the length of the line,
             that is: 1.414214
-            >>> line.get_pnt(1)
+            >>> line.point_on_line(1)
             Point(0.707107, 0.707107)
 
         ..
@@ -639,6 +722,13 @@ class Line(Geo):
         pnt.is2D = self.is2D
         return pnt
 
+    @mapinfo_must_be_set
+    def alive(self):
+        """Return True if this line is alive or False if this line is
+           dead or its index is out of range.
+        """
+        return(bool(libvect.Vect_line_alive(self.c_mapinfo, self.id)))
+
     def append(self, pnt):
         """Appends one point to the end of a line, using the
         ``Vect_append_point`` C function.
@@ -802,7 +892,8 @@ class Line(Geo):
         point.is2D = self.is2D
         return LineDist(point, dist.value, sp_dist.value, lp_dist.value)
 
-    def get_first_cat(self):
+    @mapinfo_must_be_set
+    def first_cat(self):
         """Fetches FIRST category number for given vector line and field, using
         the ``Vect_get_line_cat`` C function.
 
@@ -811,7 +902,7 @@ class Line(Geo):
             Not implemented yet.
         """
         # TODO: add this method.
-        libvect.Vect_get_line_cat(self.map, self.id, self.field)
+        # libvect.Vect_get_line_cat(self.c_mapinfo, self.id, self.field)
         pass
 
     def pop(self, indx):
@@ -822,9 +913,9 @@ class Line(Geo):
 
             >>> line = Line([(0, 0), (1, 1), (2, 2)])
             >>> midle_pnt = line.pop(1)
-            >>> midle_pnt
+            >>> midle_pnt                #doctest: +NORMALIZE_WHITESPACE
             Point(1.000000, 1.000000)
-            >>> line
+            >>> line                     #doctest: +NORMALIZE_WHITESPACE
             Line([Point(0.000000, 0.000000), Point(2.000000, 2.000000)])
 
         """
@@ -843,7 +934,7 @@ class Line(Geo):
 
             >>> line = Line([(0, 0), (1, 1), (2, 2)])
             >>> line.delete(-1)
-            >>> line
+            >>> line                     #doctest: +NORMALIZE_WHITESPACE
             Line([Point(0.000000, 0.000000), Point(1.000000, 1.000000)])
 
         """
@@ -897,7 +988,7 @@ class Line(Geo):
 
             >>> line = Line([(0, 0), (1, 1), (2, 2)])
             >>> line.remove((2, 2))
-            >>> line[-1]
+            >>> line[-1]                     #doctest: +NORMALIZE_WHITESPACE
             Point(1.000000, 1.000000)
 
         ..
@@ -951,22 +1042,22 @@ class Line(Geo):
         libvect.Vect_line_segment(self.c_points, start, end, line.c_points)
         return line
 
-    def tolist(self):
+    def to_list(self):
         """Return a list of tuple. ::
 
             >>> line = Line([(0, 0), (1, 1), (2, 0), (1, -1)])
-            >>> line.tolist()
+            >>> line.to_list()
             [(0.0, 0.0), (1.0, 1.0), (2.0, 0.0), (1.0, -1.0)]
 
         ..
         """
         return [pnt.coords() for pnt in self.__iter__()]
 
-    def toarray(self):
+    def to_array(self):
         """Return an array of coordinates. ::
 
             >>> line = Line([(0, 0), (1, 1), (2, 0), (1, -1)])
-            >>> line.toarray()                 #doctest: +NORMALIZE_WHITESPACE
+            >>> line.to_array()                 #doctest: +NORMALIZE_WHITESPACE
             array([[ 0.,  0.],
                    [ 1.,  1.],
                    [ 2.,  0.],
@@ -974,13 +1065,13 @@ class Line(Geo):
 
         ..
         """
-        return np.array(self.tolist())
+        return np.array(self.to_list())
 
-    def get_wkt(self):
+    def to_wkt_p(self):
         """Return a Well Known Text string of the line. ::
 
             >>> line = Line([(0, 0), (1, 1), (1, 2)])
-            >>> line.get_wkt()                 #doctest: +ELLIPSIS
+            >>> line.to_wkt_p()                 #doctest: +ELLIPSIS
             'LINESTRING(0.000000 0.000000, ..., 1.000000 2.000000)'
 
         ..
@@ -1012,15 +1103,6 @@ class Line(Geo):
         else:
             return None
 
-    def get_wkb(self):
-        """Return a WKB buffer.
-
-        .. warning::
-
-            Not implemented yet.
-        """
-        pass
-
     def buffer(self, dist=None, dist_x=None, dist_y=None,
                angle=0, round_=True, caps=True, tol=0.1):
         """Return the buffer area around the line, using the
@@ -1042,12 +1124,12 @@ class Line(Geo):
         :returns: the buffer as Area object
 
         >>> line = Line([(0, 0), (0, 2)])
-        >>> area = line.buffer(10)
-        >>> area.boundary                              #doctest: +ELLIPSIS
+        >>> boundary, centroid, isles = line.buffer(10)
+        >>> boundary                              #doctest: +ELLIPSIS
         Line([Point(-10.000000, 0.000000),...Point(-10.000000, 0.000000)])
-        >>> area.centroid
+        >>> centroid                     #doctest: +NORMALIZE_WHITESPACE
         Point(0.000000, 0.000000)
-        >>> area.isles
+        >>> isles
         []
 
         ..
@@ -1065,10 +1147,10 @@ class Line(Geo):
                                   dist_x, dist_y, angle,
                                   int(round_), int(caps), tol,
                                   p_bound, pp_isle, n_isles)
-        return Area(boundary=Line(c_points=p_bound.contents),
-                    centroid=self[0],
-                    isles=[Line(c_points=pp_isle[i].contents)
-                           for i in range(n_isles.contents.value)])
+        boundary = Line(c_points=p_bound.contents)
+        isles = [Line(c_points=pp_isle[i].contents)
+                 for i in range(n_isles.contents.value) if pp_isle[i]]
+        return(boundary, self[0], isles)
 
     def reset(self):
         """Reset line, using `Vect_reset_line` C function. ::
@@ -1086,9 +1168,16 @@ class Line(Geo):
         """
         libvect.Vect_reset_line(self.c_points)
 
+    @mapinfo_must_be_set
     def nodes(self):
-        """Return the nodes in the line"""
-        if self.is_with_topology():
+        """Return the start and end nodes of the line
+
+           This method requires topology build.
+
+           return: A tuple of Node objects that represent the
+                   start and end point of this line.
+        """
+        if self.has_topology():
             n1 = ctypes.c_int()
             n2 = ctypes.c_int()
             libvect.Vect_get_line_nodes(self.c_mapinfo, self.id,
@@ -1099,9 +1188,30 @@ class Line(Geo):
 
 
 class Node(object):
-    def __init__(self, v_id, c_mapinfo):
+    """Node class for topological analysis of line neighbors.
+
+       Objects of this class will be returned by the node() function
+       of a Line object.
+
+       All methods in this class require a proper setup of the Node
+       objects. Hence, the correct id and a valid pointer to a mapinfo
+       object must be provided in the constructions. Otherwise a segfault
+       may happen.
+
+    """
+    def __init__(self, v_id, c_mapinfo, **kwords):
+        """Construct a Node object
+
+           param v_id: The unique node id
+           param c_mapinfo: A valid pointer to the mapinfo object
+           param **kwords: Ignored
+        """
         self.id = v_id  # vector id
         self.c_mapinfo = c_mapinfo
+        self._setup()
+
+    @mapinfo_must_be_set
+    def _setup(self):
         self.is2D = bool(libvect.Vect_is_3d(self.c_mapinfo) != 1)
         self.nlines = libvect.Vect_get_node_n_lines(self.c_mapinfo, self.id)
 
@@ -1114,6 +1224,14 @@ class Node(object):
     def __repr__(self):
         return "Node(%d)" % self.id
 
+    @mapinfo_must_be_set
+    def alive(self):
+        """Return True if this node is alive or False if this node is
+           dead or its index is out of range.
+        """
+        return(bool(libvect.Vect_node_alive(self.c_mapinfo, self.id)))
+
+    @mapinfo_must_be_set
     def coords(self):
         """Return a tuple with the node coordinates."""
         x = ctypes.c_double()
@@ -1123,6 +1241,19 @@ class Node(object):
                                    ctypes.byref(y), ctypes.byref(z))
         return (x.value, y.value) if self.is2D else (x.value, y.value, z.value)
 
+    def to_wkt(self):
+        """Return a "well know text" (WKT) geometry string. ::
+        """
+        return "POINT(%s)" % ' '.join(['%f' % coord
+                                      for coord in self.coords()])
+
+    def to_wkb(self):
+        """Return a "well know binary" (WKB) geometry array. ::
+
+           TODO: Must be implemented
+        """
+        raise Exception("Not implemented")
+
     def ilines(self, only_in=False, only_out=False):
         """Return a generator with all lines id connected to a node.
         The line id is negative if line is ending on the node and positive if
@@ -1138,6 +1269,7 @@ class Node(object):
             if (not only_in and lid > 0) or (not only_out and lid < 0):
                 yield lid
 
+    @mapinfo_must_be_set
     def lines(self, only_in=False, only_out=False):
         """Return a generator with all lines connected to a node.
 
@@ -1149,6 +1281,7 @@ class Node(object):
         for iline in self.ilines(only_in, only_out):
             yield Line(v_id=abs(iline), c_mapinfo=self.c_mapinfo)
 
+    @mapinfo_must_be_set
     def angles(self):
         """Return a generator with all lines angles in a node."""
         for iline in range(self.nlines):
@@ -1162,27 +1295,29 @@ class Boundary(Line):
     # geometry type
     gtype = libvect.GV_BOUNDARY
 
-    def __init__(self, lines=None, left=None, right=None,
-                 **kargs):
+    def __init__(self, **kargs):
+        super(Boundary, self).__init__(**kargs)
+
         v_id = kargs.get('v_id', 0)
         self.dir = libvect.GV_FORWARD if v_id > 0 else libvect.GV_BACKWARD
-        super(Boundary, self).__init__(**kargs)
         self.c_left = ctypes.pointer(ctypes.c_int())
         self.c_right = ctypes.pointer(ctypes.c_int())
-        #self.get_left_right()
 
     @property
-    def left_id(self):
+    def left_area_id(self):
+        """Left side area id, only available after read_area_ids() was called"""
         return self.c_left.contents.value
 
     @property
-    def right_id(self):
+    def right_area_id(self):
+        """Right side area id, only available after read_area_ids() was called"""
         return self.c_right.contents.value
 
     def __repr__(self):
-        return "Boundary(v_id=%r)" % self.id
+        return "Boundary([%s])" % ', '.join([repr(pnt) for pnt in self.__iter__()])
 
-    def _get_centroid(self, side, idonly=False):
+    @mapinfo_must_be_set
+    def _centroid(self, side, idonly=False):
         if side > 0:
             v_id = libvect.Vect_get_area_centroid(self.c_mapinfo, side)
             v_id = v_id if v_id else None
@@ -1192,24 +1327,25 @@ class Boundary(Line):
                 cntr = Centroid(v_id=v_id, c_mapinfo=self.c_mapinfo)
                 return cntr
 
-    def get_left_centroid(self, idonly=False):
-        """Return left value
+    def left_centroid(self, idonly=False):
+        """Return left centroid
 
         :param idonly: True to return only the cat of feature
         :type idonly: bool
         """
-        return self._get_centroid(self.left_id, idonly)
+        return self._centroid(self.c_left.contents.value, idonly)
 
-    def get_right_centroid(self, idonly=False):
-        """Return right value
+    def right_centroid(self, idonly=False):
+        """Return right centroid
 
         :param idonly: True to return only the cat of feature
         :type idonly: bool
         """
-        return self._get_centroid(self.left_id, idonly)
+        return self._centroid(self.c_right.contents.value, idonly)
 
-    def get_left_right(self):
-        """Return left and right value"""
+    @mapinfo_must_be_set
+    def read_area_ids(self):
+        """Read and return left and right area ids of the boundary"""
 
         libvect.Vect_get_line_areas(self.c_mapinfo, self.id,
                                     self.c_left, self.c_right)
@@ -1239,11 +1375,12 @@ class Centroid(Point):
         >>> centroid
         Centoid(0.000000, 10.000000)
         >>> from grass.pygrass.vector import VectorTopo
-        >>> geo = VectorTopo('geology')
-        >>> geo.open(mode='r')
-        >>> centroid = Centroid(v_id=1, c_mapinfo=geo.c_mapinfo)
+        >>> test_vect = VectorTopo(test_vector_name)
+        >>> test_vect.open(mode='r')
+        >>> centroid = Centroid(v_id=18, c_mapinfo=test_vect.c_mapinfo)
         >>> centroid
-        Centoid(893202.874416, 297339.312795)
+        Centoid(3.500000, 3.500000)
+        >>> test_vect.close()
 
     ..
     """
@@ -1254,9 +1391,9 @@ class Centroid(Point):
         super(Centroid, self).__init__(**kargs)
         self.area_id = area_id
         if self.id and self.c_mapinfo and self.area_id is None:
-            self.area_id = self.get_area_id()
+            self.area_id = self._area_id()
         elif self.c_mapinfo and self.area_id and self.id is None:
-            self.id = self.get_centroid_id()
+            self.id = self._centroid_id()
         if self.area_id is not None:
             self.read()
 
@@ -1265,7 +1402,8 @@ class Centroid(Point):
     def __repr__(self):
         return "Centoid(%s)" % ', '.join(['%f' % co for co in self.coords()])
 
-    def get_centroid_id(self):
+    @mapinfo_must_be_set
+    def _centroid_id(self):
         """Return the centroid_id, using the c_mapinfo and an area_id
         attributes of the class, and calling the Vect_get_area_centroid
         C function, if no centroid_id were found return None"""
@@ -1273,9 +1411,10 @@ class Centroid(Point):
                                                      self.area_id)
         return centroid_id if centroid_id != 0 else None
 
-    def get_area_id(self):
+    @mapinfo_must_be_set
+    def _area_id(self):
         """Return the area_id, using the c_mapinfo and an centroid_id
-        attributes of the class, and calling the Vect_get_centroid_area
+        attributes of the class, and calling the Vect_centroid_area
         C function, if no area_id were found return None"""
         area_id = libvect.Vect_get_centroid_area(self.c_mapinfo,
                                                  self.id)
@@ -1292,6 +1431,7 @@ class Isle(Geo):
     def __repr__(self):
         return "Isle(%d)" % (self.id)
 
+    @mapinfo_must_be_set
     def boundaries(self):
         """Return a list of boundaries"""
         ilist = Ilist()
@@ -1299,31 +1439,55 @@ class Isle(Geo):
                                          ilist.c_ilist)
         return ilist
 
+    @mapinfo_must_be_set
     def bbox(self, bbox=None):
         """Return bounding box of Isle"""
         bbox = bbox if bbox else Bbox()
         libvect.Vect_get_isle_box(self.c_mapinfo, self.id, bbox.c_bbox)
         return bbox
 
+    @mapinfo_must_be_set
     def points(self):
         """Return a Line object with the outer ring points"""
         line = Line()
         libvect.Vect_get_isle_points(self.c_mapinfo, self.id, line.c_points)
         return line
 
+    def to_wkt(self):
+        """Return a Well Known Text string of the isle. ::
+
+            For now the outer ring is returned
+
+            TODO: Implement inner rings detected from isles
+        """
+        line = self.points()
+
+        return "Polygon((%s))" % ', '.join([
+               ' '.join(['%f' % coord for coord in pnt])
+               for pnt in line.to_list()])
+
+    def to_wkb(self):
+        """Return a "well know text" (WKB) geometry array. ::
+        """
+        raise Exception("Not implemented")
+
+    @mapinfo_must_be_set
     def points_geos(self):
         """Return a Line object with the outer ring points
         """
         return libvect.Vect_get_isle_points_geos(self.c_mapinfo, self.id)
 
+    @mapinfo_must_be_set
     def area_id(self):
         """Returns area id for isle."""
         return libvect.Vect_get_isle_area(self.c_mapinfo, self.id)
 
+    @mapinfo_must_be_set
     def alive(self):
         """Check if isle is alive or dead (topology required)"""
         return bool(libvect.Vect_isle_alive(self.c_mapinfo, self.id))
 
+    @mapinfo_must_be_set
     def contain_pnt(self, pnt):
         """Check if point is in area.
 
@@ -1356,9 +1520,10 @@ class Isles(object):
         self._isles_id = None
         self._isles = None
         if area_id:
-            self._isles_id = self.get_isles_id()
-            self._isles = self.get_isles()
+            self._isles_id = self.isles_ids()
+            self._isles = self.isles()
 
+    @mapinfo_must_be_set
     def __len__(self):
         return libvect.Vect_get_area_num_isles(self.c_mapinfo, self.area_id)
 
@@ -1367,29 +1532,21 @@ class Isles(object):
 
     def __getitem__(self, key):
         if self._isles is None:
-            self.get_isles()
+            self.isles()
         return self._isles[key]
 
-    def get_isles_id(self):
+    @mapinfo_must_be_set
+    def isles_ids(self):
         """Return the id of isles"""
         return [libvect.Vect_get_area_isle(self.c_mapinfo, self.area_id, i)
                 for i in range(self.__len__())]
 
-    def get_isles(self):
+    @mapinfo_must_be_set
+    def isles(self):
         """Return isles"""
         return [Isle(v_id=isle_id, c_mapinfo=self.c_mapinfo)
                 for isle_id in self._isles_id]
 
-    def select_by_bbox(self, bbox):
-        """Vect_select_isles_by_box
-
-        .. warning::
-
-            Not implemented yet.
-
-        """
-        pass
-
 
 class Area(Geo):
     """
@@ -1397,7 +1554,7 @@ class Area(Geo):
     Vect_find_area,
     Vect_get_area_box,
     Vect_get_area_points_geos,
-    Vect_get_centroid_area,
+    Vect_centroid_area,
 
     Vect_get_isle_area,
     Vect_get_line_areas,
@@ -1415,34 +1572,23 @@ class Area(Geo):
     # geometry type
     gtype = libvect.GV_AREA
 
-    def __init__(self, boundary=None, centroid=None, isles=None, **kargs):
+    def __init__(self, **kargs):
         super(Area, self).__init__(**kargs)
-        self.boundary = None
-        self.centroid = None
-        self.isles = None
-        if boundary and centroid:
-            self.boundary = boundary
-            self.centroid = centroid
-            self.isles = isles if isles else []
 
         # set the attributes
-        if self.attrs and self.cat:
-            self.attrs.cat = self.cat
+        #if self.attrs and self.cat:
+        #    self.attrs.cat = self.cat
 
     def __repr__(self):
         return "Area(%d)" % self.id if self.id else "Area( )"
 
-    def init_from_id(self, area_id=None):
-        """Return an Area object"""
-        if area_id is None and self.id is None:
-            raise ValueError("You need to give or set the area_id")
-        self.id = area_id if area_id is not None else self.id
-        # get boundary
-        self.get_points()
-        # get isles
-        self.get_isles()
-
-    def get_points(self, line=None):
+    @property
+    def cat(self):
+        centroid = self.centroid()
+        return centroid.cat if centroid else None
+
+    @mapinfo_must_be_set
+    def points(self, line=None):
         """Return a Line object with the outer ring
 
         :param line: a Line object to fill with info from points of area
@@ -1452,7 +1598,8 @@ class Area(Geo):
         libvect.Vect_get_area_points(self.c_mapinfo, self.id, line.c_points)
         return line
 
-    def get_centroid(self, centroid=None):
+    @mapinfo_must_be_set
+    def centroid(self):
         """Return the centroid
 
         :param centroid: a Centroid object to fill with info from centroid of area
@@ -1460,34 +1607,35 @@ class Area(Geo):
         """
         centroid_id = libvect.Vect_get_area_centroid(self.c_mapinfo, self.id)
         if centroid_id:
-            if centroid:
-                centroid.id = centroid_id
-                centroid.read()
-                return centroid
             return Centroid(v_id=centroid_id, c_mapinfo=self.c_mapinfo,
                             area_id=self.id)
 
+    @mapinfo_must_be_set
     def num_isles(self):
         return libvect.Vect_get_area_num_isles(self.c_mapinfo, self.id)
 
-    def get_isles(self, isles=None):
-        """Instantiate the boundary attribute reading area_id"""
+    @mapinfo_must_be_set
+    def isles(self, isles=None):
+        """Return a list of islands located in this area"""
         if isles is not None:
             isles.area_id = self.id
             return isles
         return Isles(self.c_mapinfo, self.id)
 
+    @mapinfo_must_be_set
     def area(self):
         """Returns area of area without areas of isles.
         double Vect_get_area_area (const struct Map_info \*Map, int area)
         """
         return libvect.Vect_get_area_area(self.c_mapinfo, self.id)
 
+    @mapinfo_must_be_set
     def alive(self):
         """Check if area is alive or dead (topology required)
         """
         return bool(libvect.Vect_area_alive(self.c_mapinfo, self.id))
 
+    @mapinfo_must_be_set
     def bbox(self, bbox=None):
         """Return the Bbox of area
 
@@ -1498,6 +1646,7 @@ class Area(Geo):
         libvect.Vect_get_area_box(self.c_mapinfo, self.id, bbox.c_bbox)
         return bbox
 
+    @mapinfo_must_be_set
     def buffer(self, dist=None, dist_x=None, dist_y=None,
                angle=0, round_=True, caps=True, tol=0.1):
         """Return the buffer area around the area, using the
@@ -1516,9 +1665,10 @@ class Area(Geo):
         :param tol: fix the maximum distance between theoretical arc and
                     output segments
         :type tol: float
-        :returns: the buffer as Area object
+        :returns: the buffer as line, centroid, isles object tuple
 
         """
+
         if dist is not None:
             dist_x = dist
             dist_y = dist
@@ -1532,11 +1682,12 @@ class Area(Geo):
                                   dist_x, dist_y, angle,
                                   int(round_), int(caps), tol,
                                   p_bound, pp_isle, n_isles)
-        return Area(boundary=Line(c_points=p_bound.contents),
-                    centroid=self.centroid,
-                    isles=[Line(c_points=pp_isle[i].contents)
-                           for i in range(n_isles.contents.value)])
+        return (Line(c_points=p_bound.contents),
+                self.centroid,
+                [Line(c_points=pp_isle[i].contents)
+                 for i in range(n_isles.contents.value)])
 
+    @mapinfo_must_be_set
     def boundaries(self, ilist=False):
         """Creates list of boundaries for given area.
 
@@ -1550,6 +1701,22 @@ class Area(Geo):
             return ilist
         return [Boundary(v_id=abs(v_id), c_mapinfo=self.c_mapinfo) for v_id in ilst]
 
+    def to_wkt(self):
+        """Return a "well know text" (WKT) area string, this method uses
+           the GEOS implementation in the vector library. ::
+        """
+        return libvect.Vect_read_area_to_wkt(self.c_mapinfo, self.id)
+
+    def to_wkb(self):
+        """Return a "well know binary" (WKB) area byte array, this method uses
+           the GEOS implementation in the vector library. ::
+        """
+        size = ctypes.c_size_t()
+        barray = libvect.Vect_read_area_to_wkb(self.c_mapinfo, self.id,
+                                              ctypes.byref(size))
+        return(ctypes.string_at(barray, size.value))
+
+    @mapinfo_must_be_set
     def cats(self, cats=None):
         """Get area categories.
 
@@ -1564,38 +1731,37 @@ class Area(Geo):
         """Find FIRST category of given field and area.
 
         int Vect_get_area_cat(const struct Map_info \*Map, int area, int field)
+
+        ..warning: Not implemented
         """
         pass
 
-    def contain_pnt(self, pnt, bbox=None):
+    @mapinfo_must_be_set
+    def contains_point(self, point, bbox=None):
         """Check if point is in area.
 
-        :param pnt: the point to analyze
-        :type pnt: a Point object or a tuple with the coordinates
+        :param point: the point to analyze
+        :type point: a Point object or a tuple with the coordinates
         :param bbox: the bounding box where run the analysis
         :type bbox: a Bbox object
         """
         bbox = bbox if bbox else self.bbox()
-        return bool(libvect.Vect_point_in_area(pnt.x, pnt.y,
+        return bool(libvect.Vect_point_in_area(point.x, point.y,
                                                self.c_mapinfo, self.id,
                                                bbox.c_bbox))
 
+    @mapinfo_must_be_set
     def perimeter(self):
         """Calculate area perimeter.
 
         :return: double Vect_area_perimeter (const struct line_pnts \*Points)
 
         """
-        border = self.get_points()
+        border = self.points()
         return libvect.Vect_line_geodesic_length(border.c_points)
 
-    def read(self, line=None, centroid=None, isles=None):
-        self.boundary = self.get_points(line)
-        self.centroid = self.get_centroid(centroid)
-        #self.isles = self.get_isles(isles)
-        if self.centroid:
-            libvect.Vect_read_line(self.c_mapinfo, None, self.c_cats,
-                                   self.centroid.id)
+    def read(self):
+        pass
 
 
 #
@@ -1615,6 +1781,7 @@ GEOOBJ = {"areas": Area,
           "dblinks": None,
           "faces": None,
           "holes": None,
+          "boundaries": Boundary,
           "islands": Isle,
           "kernels": None,
           "line_points": None,
@@ -1635,16 +1802,27 @@ def c_read_next_line(c_mapinfo, c_points, c_cats):
     return ftype, v_id, c_points, c_cats
 
 
-def read_next_line(c_mapinfo, table=None, writable=False,
+def read_next_line(c_mapinfo, table=None, writeable=False,
                    c_points=None, c_cats=None, is2D=True):
     """Return the next geometry feature of a vector map."""
+
+    # Take care of good memory management
+    free_points = False
+    if c_points == None:
+        free_points = True
+
+    free_cats = False
+    if c_cats == None:
+        free_cats = True
+
     c_points = c_points if c_points else ctypes.pointer(libvect.line_pnts())
     c_cats = c_cats if c_cats else ctypes.pointer(libvect.line_cats())
     ftype, v_id, c_points, c_cats = c_read_next_line(c_mapinfo, c_points,
                                                      c_cats)
     return GV_TYPE[ftype]['obj'](v_id=v_id, c_mapinfo=c_mapinfo,
                                  c_points=c_points, c_cats=c_cats,
-                                 table=table, writable=writable, is2D=is2D)
+                                 table=table, writeable=writeable, is2D=is2D,
+                                 free_points=free_points, free_cats=free_cats)
 
 
 def c_read_line(feature_id, c_mapinfo, c_points, c_cats):
@@ -1660,10 +1838,19 @@ def c_read_line(feature_id, c_mapinfo, c_points, c_cats):
         raise ValueError('The index must be >0, %r given.' % feature_id)
 
 
-def read_line(feature_id, c_mapinfo, table=None, writable=False,
+def read_line(feature_id, c_mapinfo, table=None, writeable=False,
               c_points=None, c_cats=None, is2D=True):
     """Return a geometry object given the feature id and the c_mapinfo.
     """
+    # Take care of good memory management
+    free_points = False
+    if c_points == None:
+        free_points = True
+
+    free_cats = False
+    if c_cats == None:
+        free_cats = True
+
     c_points = c_points if c_points else ctypes.pointer(libvect.line_pnts())
     c_cats = c_cats if c_cats else ctypes.pointer(libvect.line_cats())
     feature_id, ftype, c_points, c_cats = c_read_line(feature_id, c_mapinfo,
@@ -1671,7 +1858,21 @@ def read_line(feature_id, c_mapinfo, table=None, writable=False,
     if GV_TYPE[ftype]['obj'] is not None:
         return GV_TYPE[ftype]['obj'](v_id=feature_id, c_mapinfo=c_mapinfo,
                                      c_points=c_points, c_cats=c_cats,
-                                     table=table, writable=writable, is2D=is2D)
-
-
+                                     table=table, writeable=writeable, is2D=is2D,
+                                     free_points=free_points,
+                                     free_cats=free_cats)
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    utils.create_test_vector_map(test_vector_name)
+    doctest.testmod()
+
+
+    """Remove the generated vector map, if exist"""
+    from grass.pygrass.utils import get_mapset_vector
+    from grass.script.core import run_command
+    mset = get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
 
diff --git a/lib/python/pygrass/vector/table.py b/lib/python/pygrass/vector/table.py
index 926bd30..f44f5b1 100644
--- a/lib/python/pygrass/vector/table.py
+++ b/lib/python/pygrass/vector/table.py
@@ -9,9 +9,13 @@ from __future__ import (nested_scopes, generators, division, absolute_import,
                         with_statement, print_function, unicode_literals)
 
 import os
-import sys
 
-long = int if sys.version_info[0] == 3 else long
+try:
+    from builtins import long, unicode
+except ImportError:
+    # python3
+    long = int
+    unicode = str
 
 import ctypes
 import numpy as np
@@ -31,6 +35,9 @@ from grass.script.core import warning
 
 from grass.pygrass.vector import sql
 
+# For test purposes
+test_vector_name = "table_doctest_map"
+
 DRIVERS = ('sqlite', 'pg')
 
 
@@ -44,8 +51,9 @@ def get_path(path):
     >>> import os
     >>> new_path2 = os.path.join(gisenv()['GISDBASE'], gisenv()['LOCATION_NAME'],
     ...                          gisenv()['MAPSET'], 'sqlite', 'sqlite.db')
-    >>> new_path == new_path2
+    >>> new_path.replace("//","/") == new_path2.replace("//","/")
     True
+
     """
     if "$" not in path:
         return path
@@ -164,19 +172,19 @@ class Columns(object):
     For a sqlite table:
 
     >>> import sqlite3
-    >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-    >>> cols_sqlite = Columns('census',
+    >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+    >>> cols_sqlite = Columns(test_vector_name,
     ...                       sqlite3.connect(get_path(path)))
     >>> cols_sqlite.tname
-    u'census'
+    u'table_doctest_map'
 
     For a postgreSQL table:
 
     >>> import psycopg2 as pg                              #doctest: +SKIP
-    >>> cols_pg = Columns('boundary_municp_pg',
+    >>> cols_pg = Columns(test_vector_name,
     ...                   pg.connect('host=localhost dbname=grassdb')) #doctest: +SKIP
     >>> cols_pg.tname #doctest: +SKIP
-    'boundary_municp_pg'                                   #doctest: +SKIP
+    'table_doctest_map'                                   #doctest: +SKIP
 
     """
     def __init__(self, tname, connection, key='cat'):
@@ -190,7 +198,7 @@ class Columns(object):
         return item in self.names()
 
     def __repr__(self):
-        return "Columns(%r)" % self.items()
+        return "Columns(%r)" % list(self.items())
 
     def __getitem__(self, key):
         return self.odict[key]
@@ -209,15 +217,12 @@ class Columns(object):
         """Return True if two table have the same columns.
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
         >>> connection = sqlite3.connect(get_path(path))
-        >>> cols0 = Columns('census', connection)
-        >>> cols1 = Columns('census', connection)
-        >>> cols2 = Columns('hospitals', connection)
+        >>> cols0 = Columns(test_vector_name, connection)
+        >>> cols1 = Columns(test_vector_name, connection)
         >>> cols0 == cols1
         True
-        >>> cols1 == cols2
-        False
         """
         return obj.tname == self.tname and obj.odict == self.odict
 
@@ -231,13 +236,13 @@ class Columns(object):
         """Return True if is a psycopg connection.
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> cols_sqlite = Columns('census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> cols_sqlite = Columns(test_vector_name,
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.is_pg()
         False
         >>> import psycopg2 as pg #doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) #doctest: +SKIP
         >>> cols_pg.is_pg() #doctest: +SKIP
         True
@@ -287,16 +292,16 @@ class Columns(object):
         Remove it is used to remove a columns.
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> cols_sqlite = Columns('census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> cols_sqlite = Columns(test_vector_name,
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.sql_descr()                   # doctest: +ELLIPSIS
-        u'cat integer, OBJECTID integer, AREA double precision, ...'
+        u'cat INTEGER, name varchar(50), value double precision'
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) # doctest: +SKIP
         >>> cols_pg.sql_descr()                 # doctest: +ELLIPSIS +SKIP
-        'cat int4, objectid int4, area float8, perimeter float8, ...'
+        u'cat INTEGER, name varchar(50), value double precision'
         """
         if remove:
             return ', '.join(['%s %s' % (key, val) for key, val in self.items()
@@ -309,16 +314,16 @@ class Columns(object):
         """Return a list with the column types.
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> cols_sqlite = Columns('census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> cols_sqlite = Columns(test_vector_name,
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.types()                       # doctest: +ELLIPSIS
-        [u'integer', u'integer', ...]
+        [u'INTEGER', u'varchar(50)', u'double precision']
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) # doctest: +SKIP
         >>> cols_pg.types()                     # doctest: +ELLIPSIS +SKIP
-        ['int4', 'int4', 'float8', 'float8', 'float8', ...]
+        [u'INTEGER', u'varchar(50)', u'double precision']
 
         """
         return self.odict.values()
@@ -328,16 +333,16 @@ class Columns(object):
         Remove it is used to remove a columns.
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> cols_sqlite = Columns('census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> cols_sqlite = Columns(test_vector_name,
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.names()                      # doctest: +ELLIPSIS
-        [u'cat', u'OBJECTID', u'AREA', u'PERIMETER', ...]
+        [u'cat', u'name', u'value']
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',       # doctest: +SKIP
+        >>> cols_pg = Columns(test_vector_name,       # doctest: +SKIP
         ...                   pg.connect('host=localhost dbname=grassdb'))
         >>> cols_pg.names()                     # doctest: +ELLIPSIS +SKIP
-        ['cat', 'objectid', 'area', 'perimeter', ...]
+        [u'cat', u'name', u'value']
 
         """
         if remove:
@@ -354,16 +359,16 @@ class Columns(object):
         """Return a list of tuple with column name and column type.
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> cols_sqlite = Columns('census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> cols_sqlite = Columns(test_vector_name,
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.items()                       # doctest: +ELLIPSIS
-        [(u'cat', u'integer'), ...]
+        [(u'cat', u'INTEGER'), (u'name', u'varchar(50)'), (u'value', u'double precision')]
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) # doctest: +SKIP
         >>> cols_pg.items()                     # doctest: +ELLIPSIS +SKIP
-        [('cat', 'int4'), ('objectid', 'int4'), ('area', 'float8'), ...]
+        [(u'cat', u'INTEGER'), (u'name', u'varchar(50)'), (u'value', u'double precision')]
 
         """
         return self.odict.items()
@@ -379,7 +384,7 @@ class Columns(object):
         >>> import sqlite3
         >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
         >>> from grass.pygrass.utils import copy, remove
-        >>> copy('census','mycensus','vect')
+        >>> copy(test_vector_name,'mycensus','vect')
         >>> cols_sqlite = Columns('mycensus',
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.add(['n_pizza'], ['INT'])
@@ -433,7 +438,7 @@ class Columns(object):
         >>> import sqlite3
         >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
         >>> from grass.pygrass.utils import copy, remove
-        >>> copy('census','mycensus','vect')
+        >>> copy(test_vector_name,'mycensus','vect')
         >>> cols_sqlite = Columns('mycensus',
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.add(['n_pizza'], ['INT'])
@@ -446,7 +451,7 @@ class Columns(object):
         True
 
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) # doctest: +SKIP
         >>> cols_pg.rename('n_pizza', 'n_pizzas')         # doctest: +SKIP
         >>> 'n_pizza' in cols_pg                          # doctest: +SKIP
@@ -487,7 +492,7 @@ class Columns(object):
         >>> import sqlite3
         >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
         >>> from grass.pygrass.utils import copy, remove
-        >>> copy('census','mycensus','vect')
+        >>> copy(test_vector_name,'mycensus','vect')
         >>> cols_sqlite = Columns('mycensus',
         ...                       sqlite3.connect(get_path(path)))
         >>> cols_sqlite.add(['n_pizzas'], ['INT'])
@@ -496,7 +501,7 @@ class Columns(object):
           ...
         DBError: SQLite does not support to cast columns.
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) # doctest: +SKIP
         >>> cols_pg.cast('n_pizzas', 'float8')            # doctest: +SKIP
         >>> cols_pg['n_pizzas']                           # doctest: +SKIP
@@ -528,18 +533,18 @@ class Columns(object):
         >>> import sqlite3
         >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
         >>> from grass.pygrass.utils import copy, remove
-        >>> copy('census','mycensus','vect')
+        >>> copy(test_vector_name,'mycensus','vect')
         >>> cols_sqlite = Columns('mycensus',
         ...                       sqlite3.connect(get_path(path)))
-        >>> cols_sqlite.drop('CHILD')                 # doctest: +ELLIPSIS
-        >>> 'CHILD' in cols_sqlite
+        >>> cols_sqlite.drop('name')                 # doctest: +ELLIPSIS
+        >>> 'name' in cols_sqlite
         False
 
         >>> import psycopg2 as pg                         # doctest: +SKIP
-        >>> cols_pg = Columns('boundary_municp_pg',
+        >>> cols_pg = Columns(test_vector_name,
         ...                   pg.connect('host=localhost dbname=grassdb')) # doctest: +SKIP
-        >>> cols_pg.drop('CHILD') # doctest: +SKIP
-        >>> 'CHILD' in cols_pg # doctest: +SKIP
+        >>> cols_pg.drop('name') # doctest: +SKIP
+        >>> 'name' in cols_pg # doctest: +SKIP
         False
         >>> remove('mycensus','vect')
 
@@ -568,18 +573,18 @@ class Link(object):
     It is possible to define a Link object or given all the information
     (layer, name, table name, key, database, driver):
 
-    >>> link = Link(1, 'link0', 'census', 'cat',
-    ...             '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db', 'sqlite')
+    >>> link = Link(1, 'link0', test_vector_name, 'cat',
+    ...             '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db', 'sqlite')
     >>> link.layer
     1
     >>> link.name
     'link0'
     >>> link.table_name
-    'census'
+    'table_doctest_map'
     >>> link.key
     'cat'
     >>> link.database
-    '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
+    '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
     >>> link.driver
     'sqlite'
     >>> link
@@ -690,11 +695,11 @@ class Link(object):
     def __eq__(self, link):
         """Return True if two Link instance have the same parameters.
 
-        >>> l0 = Link(1, 'link0', 'census', 'cat',
-        ...           '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db', 'sqlite')
-        >>> l1 = Link(1, 'link0', 'census', 'cat',
-        ...           '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db', 'sqlite')
-        >>> l2 = Link(2, 'link0', 'census', 'cat',
+        >>> l0 = Link(1, 'link0', test_vector_name, 'cat',
+        ...           '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db', 'sqlite')
+        >>> l1 = Link(1, 'link0', test_vector_name, 'cat',
+        ...           '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db', 'sqlite')
+        >>> l2 = Link(2, 'link0', test_vector_name, 'cat',
         ...           '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db', 'sqlite')
         >>> l0 == l1
         True
@@ -716,16 +721,18 @@ class Link(object):
     def connection(self):
         """Return a connection object.
 
-        >>> link = Link(1, 'link0', 'census', 'cat',
-        ...             '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db',
+        >>> link = Link(1, 'link0', test_vector_name, 'cat',
+        ...             '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db',
         ...             'sqlite')
         >>> conn = link.connection()
         >>> cur = conn.cursor()
-        >>> cur.execute("SELECT cat,TOTAL_POP,PERIMETER FROM %s" %
+        >>> link.table_name
+        'table_doctest_map'
+        >>> cur.execute("SELECT cat, name, value from %s" %
         ...             link.table_name)              # doctest: +ELLIPSIS
         <sqlite3.Cursor object at ...>
-        >>> cur.fetchone()
-        (1, 44, 757.669)
+        >>> cur.fetchone()     #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+        (1, u'point', 1.0)
         >>> cur.close()
         >>> conn.close()
 
@@ -759,15 +766,15 @@ class Link(object):
     def table(self):
         """Return a Table object.
 
-        >>> link = Link(1, 'link0', 'census', 'cat',
-        ...             '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db',
+        >>> link = Link(1, 'link0', test_vector_name, 'cat',
+        ...             '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db',
         ...             'sqlite')
         >>> table = link.table()
-        >>> table.filters.select('cat', 'TOTAL_POP', 'PERIMETER')
-        Filters(u'SELECT cat, TOTAL_POP, PERIMETER FROM census;')
+        >>> table.filters.select('cat', 'name', 'value')
+        Filters(u'SELECT cat, name, value FROM table_doctest_map;')
         >>> cur = table.execute()
         >>> cur.fetchone()
-        (1, 44, 757.669)
+        (1, u'point', 1.0)
         >>> cur.close()
 
         """
@@ -776,15 +783,15 @@ class Link(object):
     def info(self):
         """Print information of the link.
 
-        >>> link = Link(1, 'link0', 'census', 'cat',
-        ...             '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db',
+        >>> link = Link(1, 'link0', test_vector_name, 'cat',
+        ...             '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db',
         ...             'sqlite')
         >>> link.info()
         layer:     1
         name:      link0
-        table:     census
+        table:     table_doctest_map
         key:       cat
-        database:  $GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db
+        database:  $GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db
         driver:    sqlite
 
         """
@@ -800,15 +807,15 @@ class DBlinks(object):
     """Interface containing link to the table DB.
 
     >>> from grass.pygrass.vector import VectorTopo
-    >>> cens = VectorTopo('census')
+    >>> cens = VectorTopo(test_vector_name)
     >>> cens.open(mode='r')
     >>> dblinks = DBlinks(cens.c_mapinfo)
     >>> dblinks
-    DBlinks([Link(1, census, sqlite)])
+    DBlinks([Link(1, table_doctest_map, sqlite)])
     >>> dblinks[0]
-    Link(1, census, sqlite)
-    >>> dblinks['census']
-    Link(1, census, sqlite)
+    Link(1, table_doctest_map, sqlite)
+    >>> dblinks[test_vector_name]
+    Link(1, table_doctest_map, sqlite)
     >>> cens.close()
 
     """
@@ -879,16 +886,16 @@ class DBlinks(object):
        :type link: a Link object
 
         >>> from grass.pygrass.vector import VectorTopo
-        >>> municip = VectorTopo('census')
-        >>> municip.open(mode='r')
-        >>> dblinks = DBlinks(municip.c_mapinfo)
+        >>> test_vect = VectorTopo(test_vector_name)
+        >>> test_vect.open(mode='r')
+        >>> dblinks = DBlinks(test_vect.c_mapinfo)
         >>> dblinks
-        DBlinks([Link(1, census, sqlite)])
-        >>> link = Link(2, 'pg_link', 'boundary_municp_pg', 'cat',
+        DBlinks([Link(1, table_doctest_map, sqlite)])
+        >>> link = Link(2, 'pg_link', test_vector_name, 'cat',
         ...             'host=localhost dbname=grassdb', 'pg') # doctest: +SKIP
         >>> dblinks.add(link)                             # doctest: +SKIP
         >>> dblinks                                       # doctest: +SKIP
-        DBlinks([Link(1, boundary_municp, sqlite)])
+        DBlinks([Link(1, table_doctest_map, sqlite)])
 
         """
         #TODO: check if open in write mode or not.
@@ -906,14 +913,14 @@ class DBlinks(object):
         :type force: boole
 
         >>> from grass.pygrass.vector import VectorTopo
-        >>> municip = VectorTopo('census')
-        >>> municip.open(mode='r')
-        >>> dblinks = DBlinks(municip.c_mapinfo)
+        >>> test_vect = VectorTopo(test_vector_name)
+        >>> test_vect.open(mode='r')
+        >>> dblinks = DBlinks(test_vect.c_mapinfo)
         >>> dblinks
-        DBlinks([Link(1, census, sqlite)])
+        DBlinks([Link(1, table_doctest_map, sqlite)])
         >>> dblinks.remove('pg_link')                     # doctest: +SKIP
         >>> dblinks  # need to open vector map in write mode
-        DBlinks([Link(1, census, sqlite)])
+        DBlinks([Link(1, table_doctest_map, sqlite)])
 
 
         """
@@ -937,12 +944,12 @@ class Table(object):
 
     >>> import sqlite3
     >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-    >>> tab_sqlite = Table(name='census',
+    >>> tab_sqlite = Table(name=test_vector_name,
     ...                    connection=sqlite3.connect(get_path(path)))
     >>> tab_sqlite.name
-    u'census'
+    u'table_doctest_map'
     >>> import psycopg2                                   # doctest: +SKIP
-    >>> tab_pg = Table('boundary_municp_pg',
+    >>> tab_pg = Table(test_vector_name,
     ...                psycopg2.connect('host=localhost dbname=grassdb',
     ...                                 'pg'))            # doctest: +SKIP
     >>> tab_pg.columns                          # doctest: +ELLIPSIS +SKIP
@@ -983,10 +990,10 @@ class Table(object):
 
         >>> import sqlite3
         >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> tab_sqlite = Table(name='census',
+        >>> tab_sqlite = Table(name=test_vector_name,
         ...                    connection=sqlite3.connect(get_path(path)))
         >>> tab_sqlite
-        Table(u'census')
+        Table(u'table_doctest_map')
 
         """
         return "Table(%r)" % (self.name)
@@ -1027,11 +1034,11 @@ class Table(object):
         """Return the number of rows
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> tab_sqlite = Table(name='census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> tab_sqlite = Table(name=test_vector_name,
         ...                    connection=sqlite3.connect(get_path(path)))
         >>> tab_sqlite.n_rows()
-        2537
+        3
         """
         cur = self.conn.cursor()
         cur.execute(sql.SELECT.format(cols='Count(*)', tname=self.name))
@@ -1055,14 +1062,14 @@ class Table(object):
         :type values: list of tuple
 
         >>> import sqlite3
-        >>> path = '$GISDBASE/$LOCATION_NAME/PERMANENT/sqlite/sqlite.db'
-        >>> tab_sqlite = Table(name='census',
+        >>> path = '$GISDBASE/$LOCATION_NAME/$MAPSET/sqlite/sqlite.db'
+        >>> tab_sqlite = Table(name=test_vector_name,
         ...                    connection=sqlite3.connect(get_path(path)))
-        >>> tab_sqlite.filters.select('cat', 'TOTAL_POP').order_by('AREA')
-        Filters(u'SELECT cat, TOTAL_POP FROM census ORDER BY AREA;')
+        >>> tab_sqlite.filters.select('cat', 'name').order_by('value')
+        Filters(u'SELECT cat, name FROM table_doctest_map ORDER BY value;')
         >>> cur = tab_sqlite.execute()
-        >>> cur.fetchone()
-        (1856, 0)
+        >>> cur.fetchone()     #doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+         (1, u'point')
 
         """
         try:
@@ -1071,9 +1078,10 @@ class Table(object):
             if many and values:
                 return cur.executemany(sqlc, values)
             return cur.execute(sqlc)
-        except:
-            #import ipdb; ipdb.set_trace()
-            raise ValueError("The SQL is not correct:\n%r" % sqlc)
+        except Exception as exc:
+            raise ValueError("The SQL statement is not correct:\n%r,\n"
+                             "values: %r,\n"
+                             "SQL error: %s" % (sqlc, values, str(exc)))
 
     def exist(self, cursor=None):
         """Return True if the table already exist in the DB, False otherwise
@@ -1152,3 +1160,18 @@ class Table(object):
                 print("The table: %s already exist." % self.name)
         cur.close()
         self.columns.update_odict()
+
+
+if __name__ == "__main__":
+    import doctest
+    from grass.pygrass import utils
+    utils.create_test_vector_map(test_vector_name)
+    doctest.testmod()
+
+
+    """Remove the generated vector map, if exist"""
+    from grass.pygrass.utils import get_mapset_vector
+    from grass.script.core import run_command
+    mset = get_mapset_vector(test_vector_name, mapset='')
+    if mset:
+        run_command("g.remove", flags='f', type='vector', name=test_vector_name)
diff --git a/lib/python/pygrass/vector/testsuite/test_doctests.py b/lib/python/pygrass/vector/testsuite/test_doctests.py
new file mode 100644
index 0000000..2ab7013
--- /dev/null
+++ b/lib/python/pygrass/vector/testsuite/test_doctests.py
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.pygrass.vector as gvector
+import grass.pygrass.utils as gutils
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+
+    from grass.pygrass import utils
+    utils.create_test_vector_map(gvector.test_vector_name)
+    utils.create_test_vector_map(gvector.abstract.test_vector_name)
+    utils.create_test_vector_map(gvector.geometry.test_vector_name)
+    utils.create_test_vector_map(gvector.find.test_vector_name)
+    utils.create_test_vector_map(gvector.table.test_vector_name)
+
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(gvector))
+    tests.addTests(doctest.DocTestSuite(gvector.abstract))
+    tests.addTests(doctest.DocTestSuite(gvector.basic))
+    tests.addTests(doctest.DocTestSuite(gvector.find))
+    tests.addTests(doctest.DocTestSuite(gvector.geometry))
+    tests.addTests(doctest.DocTestSuite(gvector.sql))
+    tests.addTests(doctest.DocTestSuite(gvector.table))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/pygrass/vector/testsuite/test_filters.py b/lib/python/pygrass/vector/testsuite/test_filters.py
new file mode 100644
index 0000000..0516658
--- /dev/null
+++ b/lib/python/pygrass/vector/testsuite/test_filters.py
@@ -0,0 +1,82 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Jul  2 07:25:34 2015
+
+ at author: pietro
+"""
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.vector.table import Filters
+
+
+class FiltersTestCase(TestCase):
+
+    def setUp(self):
+        """Create a not empty filters instance"""
+        self.filters = Filters('table')
+        self.attrs = ('_select', '_where', '_groupby', '_orderby', '_limit')
+
+    def test_init(self):
+        """Test Filters __init__"""
+        self.assertEqual(self.filters.tname, 'table')
+        for attr in self.attrs:
+            self.assertEqual(getattr(self.filters, attr), None)
+
+    def test_select(self):
+        """Test Filters select method"""
+        self.assertEqual(self.filters.select()._select,
+                         'SELECT * FROM table')
+        self.assertEqual(self.filters.select('column')._select,
+                         'SELECT column FROM table')
+        self.assertEqual(self.filters.select('column0', 'column1')._select,
+                         'SELECT column0, column1 FROM table')
+
+    def test_where(self):
+        """Test Filters where method"""
+        self.assertEqual(self.filters.where('column >= 10')._where,
+                         'WHERE column >= 10')
+
+    def test_order_by(self):
+        """Test Filters order_by method"""
+        self.assertEqual(self.filters.order_by('column')._orderby,
+                         'ORDER BY column')
+        self.assertEqual(self.filters.order_by('column0', 'column1')._orderby,
+                         'ORDER BY column0, column1')
+
+    def test_limit(self):
+        """Test Filters limit method"""
+        self.assertEqual(self.filters.limit(10)._limit, 'LIMIT 10')
+        with self.assertRaises(ValueError):
+            self.filters.limit('a')
+
+    def test_group_by(self):
+        """Test Filters group_by method"""
+        self.assertEqual(self.filters.group_by('column')._groupby,
+                         'GROUP BY column')
+        self.assertEqual(self.filters.group_by('column0', 'column1')._groupby,
+                         'GROUP BY column0, column1')
+
+    def test_get_sql(self):
+        """Test Filters get_sql method"""
+        sql_code = 'select_sql'
+        sep = '=> '
+        fsep = ' ' + sep
+        self.filters._select = sql_code
+        for attr in self.attrs[1:]:
+            attr_sql = sep + attr[1:]
+            setattr(self.filters, attr, attr_sql)
+            sql_code += fsep + attr[1:]
+            self.assertEqual(self.filters.get_sql(), sql_code + ';')
+
+    def test_reset(self):
+        """Test Filters reset method"""
+        # fill the attributes with strigns
+        for attr in self.attrs:
+            setattr(self.filters, attr, attr)
+        self.filters.reset()
+        for attr in self.attrs:
+            self.assertEqual(getattr(self.filters, attr), None)
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/vector/testsuite/test_geometry.py b/lib/python/pygrass/vector/testsuite/test_geometry.py
index e01b078..4907ce7 100644
--- a/lib/python/pygrass/vector/testsuite/test_geometry.py
+++ b/lib/python/pygrass/vector/testsuite/test_geometry.py
@@ -8,13 +8,16 @@ import sys
 import unittest
 import numpy as np
 
-from grass.gunittest import TestCase, test
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
 import grass.lib.vector as libvect
+from grass.script.core import run_command
 
-from grass.pygrass.vector import VectorTopo
+from grass.pygrass.vector import Vector, VectorTopo
 from grass.pygrass.vector.geometry import Point, Line, Node
-
+from grass.pygrass.vector.geometry import Area, Boundary, Centroid
+from grass.pygrass.vector.basic import Bbox
 
 class PointTestCase(TestCase):
 
@@ -50,12 +53,22 @@ class PointTestCase(TestCase):
         self.assertEqual(Point(1, 2).coords(), (1, 2))
         self.assertEqual(Point(1, 2, 3).coords(), (1, 2, 3))
 
-    def test_get_wkt(self):
+    def test_to_wkt_p(self):
         """Test coords method"""
-        self.assertEqual(Point(1, 2).get_wkt(), 'POINT(1.000000 2.000000)')
-        self.assertEqual(Point(1, 2, 3).get_wkt(),
+        self.assertEqual(Point(1, 2).to_wkt_p(), 'POINT(1.000000 2.000000)')
+        self.assertEqual(Point(1, 2, 3).to_wkt_p(),
                          'POINT(1.000000 2.000000 3.000000)')
 
+    def test_to_wkt(self):
+        """Test coords method"""
+        self.assertEqual(Point(1, 2).to_wkt(), 'POINT (1.0000000000000000 2.0000000000000000)')
+        self.assertEqual(Point(1, 2, 3).to_wkt(),
+                         'POINT Z (1.0000000000000000 2.0000000000000000 3.0000000000000000)')
+
+    def test_to_wkb(self):
+        """Test to_wkb method"""
+        self.assertEqual(len(Point(1, 2).to_wkb()), 21)
+
     def test_distance(self):
         """Test distance method"""
         point0 = Point(0, 0, 0)
@@ -88,6 +101,29 @@ class PointTestCase(TestCase):
 
 class LineTestCase(TestCase):
 
+    tmpname = "LineTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+
+        from grass.pygrass import utils
+        utils.create_test_vector_map(cls.tmpname)
+
+        cls.vect = None
+        cls.vect = VectorTopo(cls.tmpname)
+        cls.vect.open('r')
+        cls.c_mapinfo = cls.vect.c_mapinfo
+
+    @classmethod
+    def tearDownClass(cls):
+        if cls.vect is not None:
+            cls.vect.close()
+            cls.c_mapinfo = None
+
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='vector', 
+                      name=cls.tmpname)
+
     def test_len(self):
         """Test __len__ magic method"""
         self.assertEqual(len(Line()), 0)
@@ -120,9 +156,18 @@ class LineTestCase(TestCase):
         """Test get_pnt method"""
         line = Line([(0, 0), (1, 1)])
         with self.assertRaises(ValueError):
-            line.get_pnt(5)
+            line.point_on_line(5)
         vals = (0.7071067811865475, 0.7071067811865475)
-        self.assertTupleEqual(line.get_pnt(1).coords(), vals)
+        self.assertTupleEqual(line.point_on_line(1).coords(), vals)
+
+    def test_to_wkt(self):
+        """Test to_wkt method"""
+        string = 'LINESTRING (0.0000000000000000 0.0000000000000000, 1.0000000000000000 1.0000000000000000)'
+        self.assertEqual(Line([(0, 0), (1, 1)]).to_wkt(), string)
+
+    def test_to_wkb(self):
+        """Test to_wkb method"""
+        self.assertEqual(len(Line([(0, 0), (1, 1)]).to_wkb()), 41)
 
     def test_bbox(self):
         """Test bbox method"""
@@ -134,24 +179,29 @@ class LineTestCase(TestCase):
         self.assertEqual(0, bbox.west)
 
     def test_nodes(self):
-        """Test inodes method"""
+        """Test nodes method"""
         def nodes2tuple(nodes):
             """Convert an iterable of nodes to a tuple of nodes id"""
             return tuple(n.id for n in nodes)
 
-        with VectorTopo("roadsmajor", mode='r') as vect:
-            self.assertTupleEqual((206, 172), nodes2tuple(vect[284].nodes()))
-            self.assertTupleEqual((208, 206), nodes2tuple(vect[287].nodes()))
-            self.assertTupleEqual((206, 209), nodes2tuple(vect[288].nodes()))
-            self.assertTupleEqual((218, 206), nodes2tuple(vect[301].nodes()))
+        with VectorTopo("LineTestCase_map", mode='r') as vect:
+            self.assertTupleEqual((1, 2), nodes2tuple(vect[4].nodes()))
+            self.assertTupleEqual((3, 4), nodes2tuple(vect[5].nodes()))
+            self.assertTupleEqual((5, 6), nodes2tuple(vect[6].nodes()))
 
+class NodeTestCase(TestCase):
 
+    tmpname = "NodeTestCase_map"
 
-class NodeTestCase(TestCase):
     @classmethod
     def setUpClass(cls):
+
+        # Tests are based on a stream network
+        from grass.pygrass import utils
+        utils.create_test_stream_network_map(cls.tmpname)
+
         cls.vect = None
-        cls.vect = VectorTopo("roadsmajor")
+        cls.vect = VectorTopo(cls.tmpname)
         cls.vect.open('r')
         cls.c_mapinfo = cls.vect.c_mapinfo
 
@@ -161,32 +211,172 @@ class NodeTestCase(TestCase):
             cls.vect.close()
             cls.c_mapinfo = None
 
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='vector', 
+                      name=cls.tmpname)
+
     def test_init(self):
         """Test Node __init__"""
-        node = Node(v_id=206, c_mapinfo=self.c_mapinfo)
-        self.assertEqual(206, node.id)
+        node = Node(v_id=4, c_mapinfo=self.c_mapinfo)
+        self.assertEqual(4, node.id)
         self.assertTrue(node.is2D)
-        self.assertEqual(4, node.nlines)
+        self.assertEqual(5, node.nlines)
 
     def test_coords(self):
         """Test Node coordinates"""
-        node = Node(v_id=206, c_mapinfo=self.c_mapinfo)
-        self.assertTupleEqual((620906.5786131569, 221685.65913128198),
-                              node.coords())
+        node = Node(v_id=4, c_mapinfo=self.c_mapinfo)
+        self.assertTupleEqual((1.0, 0.0), node.coords())
 
     def test_ilines(self):
-        """Test Node coordinates"""
-        node = Node(v_id=206, c_mapinfo=self.c_mapinfo)
-        self.assertTupleEqual((288, -301, -287, 284), tuple(node.ilines()))
-        self.assertTupleEqual((-301, -287), tuple(node.ilines(only_in=True)))
-        self.assertTupleEqual((288, 284), tuple(node.ilines(only_out=True)))
+        """Test Node neighbors"""
+        node = Node(v_id=4, c_mapinfo=self.c_mapinfo)
+        self.assertTupleEqual((6, -4, 7, -3, -5), tuple(node.ilines()))
+        self.assertTupleEqual((-4, -3, -5), tuple(node.ilines(only_in=True)))
+        node = Node(v_id=4, c_mapinfo=self.c_mapinfo)
+        self.assertTupleEqual((6, 7), tuple(node.ilines(only_out=True)))
 
     def test_angles(self):
         """Test Node angles"""
-        node = Node(v_id=206, c_mapinfo=self.c_mapinfo)
-        angles = (-3.044905185699463, -1.026218056678772,
-                  0.10362745821475983, 2.2236430644989014)
+        node = Node(v_id=4, c_mapinfo=self.c_mapinfo)
+        angles = (-1.5707963705062866, 0.7853981852531433,
+                   1.2793395519256592, 1.8622530698776245,
+                   2.356194496154785)
         self.assertTupleEqual(angles, tuple(node.angles()))
 
+class AreaTestCase(TestCase):
+
+    tmpname = "AreaTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+
+        # Tests are based on a stream network
+        from grass.pygrass import utils
+        utils.create_test_vector_map(cls.tmpname)
+
+        cls.vect = None
+        cls.vect = VectorTopo(cls.tmpname)
+        cls.vect.open('r')
+        cls.c_mapinfo = cls.vect.c_mapinfo
+
+    @classmethod
+    def tearDownClass(cls):
+        if cls.vect is not None:
+            cls.vect.close()
+            cls.c_mapinfo = None
+
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='vector', 
+                      name=cls.tmpname)
+
+    def test_init(self):
+        """Test area __init__ and basic functions"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        self.assertEqual(1, area.id)
+        self.assertTrue(area.is2D)
+        self.assertTrue(area.alive())
+        self.assertEqual(area.area(), 12.0)
+
+    def test_to_wkt(self):
+        """Test to_wkt method"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        # Outer and inner ring!!
+        string = "POLYGON ((0.0000000000000000 0.0000000000000000, "\
+                           "0.0000000000000000 4.0000000000000000, "\
+                           "0.0000000000000000 4.0000000000000000, "\
+                           "4.0000000000000000 4.0000000000000000, "\
+                           "4.0000000000000000 4.0000000000000000, "\
+                           "4.0000000000000000 0.0000000000000000, "\
+                           "4.0000000000000000 0.0000000000000000, "\
+                           "0.0000000000000000 0.0000000000000000), "\
+                           "(1.0000000000000000 1.0000000000000000, "\
+                           "3.0000000000000000 1.0000000000000000, "\
+                           "3.0000000000000000 3.0000000000000000, "\
+                           "1.0000000000000000 3.0000000000000000, "\
+                           "1.0000000000000000 1.0000000000000000))"
+        self.assertEqual(area.to_wkt(), string)
+
+    def test_to_wkb(self):
+        """Test to_wkt method"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        self.assertEqual(len(area.to_wkb()), 225)
+
+    def test_contains_point(self):
+        """Test contain_point method"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        p = Point(0.5, 0.5)
+        bbox = Bbox(4.0, 0.0, 4.0, 0.0)
+        self.assertTrue(area.contains_point(p, bbox))
+        self.assertTrue(area.contains_point(p))
+
+    def test_bbox(self):
+        """Test contain_point method"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        self.assertEqual(str(area.bbox()), "Bbox(4.0, 0.0, 4.0, 0.0)")
+
+    def test_centroid(self):
+        """Test centroid access"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        centroid = area.centroid()
+
+        self.assertEqual(centroid.id, 18)
+        self.assertEqual(centroid.area_id, 1)
+        self.assertEqual(centroid.to_wkt(), 'POINT (3.5000000000000000 3.5000000000000000)')
+
+    def test_boundaries_1(self):
+        """Test boundary access"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        boundaries = area.boundaries()
+        self.assertEqual(len(boundaries), 4)
+
+        string_list = []
+        string_list.append("LINESTRING (0.0000000000000000 0.0000000000000000, 0.0000000000000000 4.0000000000000000)")
+        string_list.append("LINESTRING (0.0000000000000000 4.0000000000000000, 4.0000000000000000 4.0000000000000000)")
+        string_list.append("LINESTRING (4.0000000000000000 4.0000000000000000, 4.0000000000000000 0.0000000000000000)")
+        string_list.append("LINESTRING (4.0000000000000000 0.0000000000000000, 0.0000000000000000 0.0000000000000000)")
+
+        for boundary, i in zip(boundaries, range(4)):
+            self.assertEqual(len(boundary.to_wkb()), 41)
+            self.assertEqual(boundary.to_wkt(), string_list[i])
+
+    def test_boundaries_2(self):
+        """Test boundary access"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        boundaries = area.boundaries()
+        boundary = boundaries[2]
+        boundary.read_area_ids()
+        self.assertEqual(boundary.left_area_id, 2)
+        self.assertEqual(boundary.right_area_id, 1)
+
+        self.assertEqual(boundary.left_centroid().to_wkt(), 'POINT (5.5000000000000000 3.5000000000000000)')
+        self.assertEqual(boundary.right_centroid().to_wkt(), 'POINT (3.5000000000000000 3.5000000000000000)')
+
+    def test_isles_1(self):
+        """Test centroid access"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        self.assertEqual(area.num_isles(), 1)
+
+        isles = area.isles()
+        isle = isles[0]
+
+        self.assertEqual(isle.area(), 4.0)
+        self.assertEqual(isle.points().to_wkt(), "LINESTRING (1.0000000000000000 1.0000000000000000, "\
+                                                             "3.0000000000000000 1.0000000000000000, "\
+                                                             "3.0000000000000000 3.0000000000000000, "\
+                                                             "1.0000000000000000 3.0000000000000000, "\
+                                                             "1.0000000000000000 1.0000000000000000)")
+    def test_isles_2(self):
+        """Test centroid access"""
+        area = Area(v_id=1, c_mapinfo=self.c_mapinfo)
+        self.assertEqual(area.num_isles(), 1)
+
+        isles = area.isles()
+        isle = isles[0]
+        self.assertEqual(isle.area_id(), 1)
+        self.assertTrue(isle.alive())
+
+        self.assertEqual(str(isle.bbox()), "Bbox(3.0, 1.0, 3.0, 1.0)")
+
+
 if __name__ == '__main__':
     test()
diff --git a/lib/python/pygrass/vector/testsuite/test_geometry_attrs.py b/lib/python/pygrass/vector/testsuite/test_geometry_attrs.py
new file mode 100644
index 0000000..26e3d6c
--- /dev/null
+++ b/lib/python/pygrass/vector/testsuite/test_geometry_attrs.py
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Jun 19 14:13:53 2014
+
+ at author: pietro
+"""
+import sys
+import unittest
+import numpy as np
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+import grass.lib.vector as libvect
+from grass.script.core import run_command
+
+from grass.pygrass.vector import VectorTopo
+
+
+class GeometryAttrsTestCase(TestCase):
+
+    tmpname = "GeometryAttrsCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+
+        from grass.pygrass import utils
+        utils.create_test_vector_map(cls.tmpname)
+
+        cls.vect = None
+        cls.vect = VectorTopo(cls.tmpname)
+        cls.vect.open('r')
+        cls.c_mapinfo = cls.vect.c_mapinfo
+
+        cls.attrs = cls.vect[1].attrs
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.attrs = None
+        if cls.vect is not None:
+            cls.vect.close()
+            cls.c_mapinfo = None
+
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='vector',
+                      name=cls.tmpname)
+
+    def test_getitem(self):
+        """Test __getitem__ magic method"""
+        self.assertEqual(self.attrs['name'], u'point')
+        self.assertEqual(self.attrs['value'], 1.0)
+        self.assertTupleEqual(self.attrs['name', 'value'], (u'point', 1.0))
+
+        with self.assertRaises(ValueError) as cm:
+            self.attrs['not_existing_column_name']
+
+        self.assertTrue(u"not_existing_column_name" in cm.exception.message)
+
+
+    def test_setitem(self):
+        """Test __setitem__ magic method"""
+        newname = 'setitem_point_1'
+        newvalue = 100.0
+        newpairs = ('setitem_point_2', 1000.)
+
+        self.attrs.__setitem__('name', newname)
+        self.assertEqual(self.attrs['name'], newname)
+        self.attrs.__setitem__('value', newvalue)
+        self.assertEqual(self.attrs['value'], newvalue)
+        self.attrs.__setitem__(('name', 'value'), newpairs)
+        self.assertEqual(self.attrs['name', 'value'], newpairs)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/vector/testsuite/test_table.py b/lib/python/pygrass/vector/testsuite/test_table.py
new file mode 100644
index 0000000..174d198
--- /dev/null
+++ b/lib/python/pygrass/vector/testsuite/test_table.py
@@ -0,0 +1,216 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Jun 25 11:08:22 2014
+
+ at author: pietro
+"""
+try:
+    from builtins import long
+except ImportError:
+    # python3
+    long = int
+
+import os
+import sqlite3
+import tempfile as tmp
+from string import ascii_letters, digits
+from random import choice
+import numpy as np
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.pygrass.vector.table import Table, get_path
+
+
+# dictionary that generate random data
+COL2VALS = {'INT': lambda n:     np.random.randint(9, size=n),
+            'INTEGER': lambda n: np.random.randint(9, size=n),
+            'INTEGER PRIMARY KEY': lambda n: np.arange(1, n+1, dtype=long),
+            'REAL': lambda n: np.random.rand(n),
+            'TEXT': lambda n: np.array([randstr() for _ in range(n)])}
+
+
+def randstr(prefix='', suffix='', size=6, chars=ascii_letters + digits):
+    """Return a random string of characters.
+
+    :param prefix: string prefix, default: ''
+    :type prefix: str
+
+    :param suffix: string suffix, default: ''
+    :type suffix: str
+
+    :param size: number of random characters
+    :type size: int
+
+    :param chars: string containing the characters that will be used
+    :type chars: str
+
+    :returns: string
+    """
+    return prefix + ''.join(choice(chars) for _ in range(size)) + suffix
+
+
+def get_table_random_values(nrows, columns):
+    """Generate a random recarray respecting the columns definition.
+
+    :param nrows: number of rows of the generated array
+    :type nrows: int
+
+    :param columns: list of tuple containing column name and type.
+    :type columns: list of tuple
+
+    :returns: numpy recarray
+    """
+    vals, dtype = [], []
+    for cname, ctype in columns:
+        if ctype not in COL2VALS:
+            raise TypeError("Unkown column type %s for: %s" % (ctype, cname))
+        vals.append(COL2VALS[ctype](nrows))
+        dtype.append((cname, vals[-1].dtype.str))
+    return np.array([v for v in zip(*vals)], dtype=dtype)
+
+
+class DBconnection(object):
+    """Define a class to share common methods between TestCase."""
+    path = os.path.join(tmp.gettempdir(), randstr(prefix='temp', suffix='.db'))
+    connection = sqlite3.connect(get_path(path))
+    columns = [('cat', 'INTEGER PRIMARY KEY'),
+               ('cint', 'INT'),
+               ('creal', 'REAL'),
+               ('ctxt', 'TEXT')]
+
+    def create_table_instance(self, **kw):
+        """Return a Table class instance
+
+        :param **kw: keyword arguments of Table class
+                     without name and connection.
+        :type **kw: key-word arguments
+
+        :returns: Table instance
+        """
+        self.tname = randstr(prefix='temp')
+        return Table(name=self.tname,
+                     connection=self.connection, **kw)
+
+    def create_empty_table(self, columns=None, **kw):
+        """Create an empty table in the database and return Table class
+        instance.
+
+        :param columns: list of tuple containing the column names and types.
+        :type columns: list of tuple
+
+        :param **kw: keyword arguments of Table class
+                     without name and connection.
+        :type **kw: key-word arguments
+
+        :returns: Table instance
+        """
+        columns = self.columns if columns is None else columns
+        table = self.create_table_instance(**kw)
+        table.create(columns)
+        return table
+
+    def create_not_empty_table(self, nrows=None, values=None,
+                               columns=None, **kw):
+        """Create a not empty table in the database and return Table class
+        instance.
+
+        :param nrows: number of rows.
+        :type nrows: list of tuple
+
+        :param values: list of tuple containing the values for each row.
+        :type values: list of tuple
+
+        :param columns: list of tuple containing the column names and types.
+        :type columns: list of tuple
+
+        :param **kw: keyword arguments of Table class
+                     without name and connection.
+        :type **kw: key-word arguments
+
+        :returns: Table instance
+        """
+        if nrows is None and values is None:
+            msg = "Both parameters ``nrows`` ``values`` are empty"
+            raise RuntimeError(msg)
+        columns = self.columns if columns is None else columns
+        values = (get_table_random_values(nrows, columns) if values is None
+                  else values)
+        table = self.create_empty_table(columns=columns, **kw)
+        table.insert(values, many=True)
+        return table
+
+    def setUp(self):
+        """Create a not empty table instance"""
+        self.table = self.create_not_empty_table(10)
+        self.cols = self.table.columns
+
+    def tearDown(self):
+        """Remove the generated vector map, if exist"""
+        self.table.drop(force=True)
+        self.table = None
+        self.cols = None
+
+
+class ColumnsTestCase(DBconnection, TestCase):
+
+    def test_check_insert_update_str(self):
+        """Check insert_str and update_str attribute of Columns are correct"""
+        insert = 'INSERT INTO %s VALUES (?,?,?,?)'
+        self.assertEqual(self.cols.insert_str, insert % self.tname)
+        update = 'UPDATE %s SET cint=?,creal=?,ctxt=? WHERE cat=?;'
+        self.assertEqual(self.cols.update_str, update % self.tname)
+
+
+class TableInsertTestCase(DBconnection, TestCase):
+
+    def setUp(self):
+        """Create a not empty table instance"""
+        self.table = self.create_empty_table()
+        self.cols = self.table.columns
+
+    def tearDown(self):
+        """Remove the generated vector map, if exist"""
+        self.table.drop(force=True)
+        self.table = None
+        self.cols = None
+
+    def test_insert(self):
+        """Test Table.insert method"""
+        cat = 1
+        vals = (cat, 1111, 0.1111, 'test')
+        cur = self.connection.cursor()
+        self.table.insert(vals, cursor=cur)
+        sqlquery = "SELECT cat, cint, creal, ctxt FROM %s WHERE cat=%d"
+        cur.execute(sqlquery % (self.tname, cat))
+        self.assertTupleEqual(vals, cur.fetchone())
+
+    def test_insert_many(self):
+        """Test Table.insert method using many==True"""
+        vals = [(1, 1111, 0.1111, 'test1'),
+                (2, 2222, 0.2222, 'test2'),
+                (3, 3333, 0.3333, 'test3')]
+        cur = self.connection.cursor()
+        self.table.insert(vals, cursor=cur, many=True)
+        sqlquery = "SELECT cat, cint, creal, ctxt FROM %s"
+        cur.execute(sqlquery % self.tname)
+        self.assertListEqual(vals, cur.fetchall())
+
+
+class TableUpdateTestCase(DBconnection, TestCase):
+
+    def test_update(self):
+        """Test Table.update method"""
+        vals = (1122, 0.1122, 'test')
+        cat = 1
+        cur = self.connection.cursor()
+        self.table.update(cat, list(vals), cursor=cur)
+        self.connection.commit()
+        sqlquery = "SELECT cint, creal, ctxt FROM %s WHERE cat=%d"
+        cur.execute(sqlquery % (self.tname, cat))
+        self.assertTupleEqual(vals, cur.fetchone())
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/vector/testsuite/test_vector.py b/lib/python/pygrass/vector/testsuite/test_vector.py
new file mode 100644
index 0000000..a8ac44a
--- /dev/null
+++ b/lib/python/pygrass/vector/testsuite/test_vector.py
@@ -0,0 +1,70 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Jun 18 17:21:42 2014
+
+ at author: pietro
+"""
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.script.core import run_command
+from grass.pygrass.vector import VectorTopo
+
+
+class VectorTopoTestCase(TestCase):
+
+    tmpname = "VectorTopoTestCase_map"
+
+    @classmethod
+    def setUpClass(cls):
+        
+        from grass.pygrass import utils
+        utils.create_test_vector_map(cls.tmpname)
+        
+        cls.vect = None
+        cls.vect = VectorTopo(cls.tmpname)
+        cls.vect.open('r')
+        cls.vect.close()
+
+    @classmethod
+    def tearDownClass(cls):
+        if cls.vect.is_open():
+            cls.vect.close()
+
+        """Remove the generated vector map, if exist"""
+        cls.runModule("g.remove", flags='f', type='vector', 
+                      name=cls.tmpname)
+
+    def test_getitem_slice(self):
+        """Test that getitem handle correctly the slice starting from 1"""
+        vcoords =  ((10.0, 6.0), (12.0, 6.0))
+        with VectorTopo(self.tmpname, mode="r") as vect:
+            coords = tuple([pnt.coords() for pnt in vect[:3]])
+            self.assertTupleEqual(vcoords, coords)
+            coords = tuple([pnt.coords() for pnt in vect[1:3]])
+            self.assertTupleEqual(vcoords, coords)
+            self.vect.close()
+
+    def test_viter(self):
+        """Test that getitem handle correctly the slice starting from 1"""
+
+        with VectorTopo(self.tmpname, mode="r") as vect:
+            for name in ["points", "lines", "areas", "islands", "nodes"]:
+                count = 0
+                for feature in vect.viter(name):
+                    count += 1
+                self.assertEqual(count, vect.number_of(name))
+                
+            self.vect.close()
+
+    def test_getitem_raise(self):
+        """Test that getitem raise a value error if the key is not
+        an integer or a slice"""
+        with VectorTopo(self.tmpname, mode="r") as vect:
+            with self.assertRaises(ValueError):
+                vect['value']
+
+            self.vect.close()
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/pygrass/vector/testsuite/test_vector3d.py b/lib/python/pygrass/vector/testsuite/test_vector3d.py
index dc5f301..d881f6a 100644
--- a/lib/python/pygrass/vector/testsuite/test_vector3d.py
+++ b/lib/python/pygrass/vector/testsuite/test_vector3d.py
@@ -6,7 +6,8 @@ Created on Wed Jun 18 17:21:42 2014
 """
 import numpy as np
 
-from grass.gunittest import TestCase, test
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
 from grass.script.core import run_command
 
@@ -59,9 +60,8 @@ class VectorTopo3DTestCase(TestCase):
     @classmethod
     def tearDownClass(cls):
         """Remove the generated vector map, if exist"""
-        mset = get_mapset_vector(cls.tmpname, mapset='')
-        if mset:
-            run_command("g.remove", flags='f', type='vector', name=cls.tmpname)
+        cls.runModule("g.remove", flags='f', type='vector', 
+                      name=cls.tmpname)
 
 
 if __name__ == '__main__':
diff --git a/lib/python/script/__init__.py b/lib/python/script/__init__.py
index 0df3100..b670e89 100644
--- a/lib/python/script/__init__.py
+++ b/lib/python/script/__init__.py
@@ -1,9 +1,10 @@
 """Python interface to launch GRASS GIS modules in scripts
 """
+from __future__ import absolute_import
 
-from core   import *
-from db     import *
-from raster import *
-from raster3d import *
-from vector import *
-from utils import *
+from .core   import *
+from .db     import *
+from .raster import *
+from .raster3d import *
+from .vector import *
+from .utils import *
diff --git a/lib/python/script/array.py b/lib/python/script/array.py
index cab3d93..0fc45e7 100644
--- a/lib/python/script/array.py
+++ b/lib/python/script/array.py
@@ -3,12 +3,13 @@ Functions to use GRASS 2D and 3D rasters with NumPy.
 
 Usage:
 
->>> import grass.script as grass
+>>> from __future__ import print_function
+>>> import grass.script as gscript
 >>> from grass.script import array as garray
 >>>
 >>> # We create a temporary region that is only valid in this python session
-... grass.use_temp_region()
->>> grass.run_command("g.region", n=80, e=120, t=60, s=0, w=0, b=0, res=20, res3=20)
+... gscript.use_temp_region()
+>>> gscript.run_command("g.region", n=80, e=120, t=60, s=0, w=0, b=0, res=20, res3=20)
 0
 >>>
 >>> # Lets create a raster map numpy array
@@ -21,7 +22,7 @@ Usage:
 ...         map2d_1[y,x] = y + x
 ...
 >>> # Lets have a look at the array
-... print map2d_1
+... print(map2d_1)
 [[ 0.  1.  2.  3.  4.  5.]
  [ 1.  2.  3.  4.  5.  6.]
  [ 2.  3.  4.  5.  6.  7.]
@@ -31,15 +32,13 @@ Usage:
 ... map2d_1.write(mapname="map2d_1", overwrite=True)
 0
 >>>
->>> # We create a new array and read map2d_1 to modify it
-... map2d_2 = garray.array()
+>>> # We create a new array from raster map2d_1 to modify it
+... map2d_2 = garray.array(mapname="map2d_1")
 >>> # Don't do map2d_2 = map2d_1 % 3
 ... # because: this will overwrite the internal temporary filename
-... map2d_2.read("map2d_1")
-0
->>> map2d_2 %= 3
+... map2d_2 %= 3
 >>> # Show the result
-... print map2d_2
+... print(map2d_2)
 [[ 0.  1.  2.  0.  1.  2.]
  [ 1.  2.  0.  1.  2.  0.]
  [ 2.  0.  1.  2.  0.  1.]
@@ -60,7 +59,7 @@ Usage:
 ...             map3d_1[z,y,x] = z + y + x
 ...
 >>> # Lets have a look at the 3D array
-... print map3d_1
+... print(map3d_1)
 [[[  0.   1.   2.   3.   4.   5.]
   [  1.   2.   3.   4.   5.   6.]
   [  2.   3.   4.   5.   6.   7.]
@@ -79,15 +78,13 @@ Usage:
 ... # with name map3d_1
 ... map3d_1.write(mapname="map3d_1", overwrite=True)
 0
->>> # We create a new 3D array and read map3d_1 to modify it
-... map3d_2 = garray.array3d()
+>>> # We create a new 3D array from 3D raster map3d_1 to modify it
+... map3d_2 = garray.array3d(mapname="map3d_1")
 >>> # Don't do map3d_2 = map3d_1 % 3
 ... # because: this will overwrite the internal temporary filename
-... map3d_2.read("map3d_1")
-0
->>> map3d_2 %= 3
+... map3d_2 %= 3
 >>> # Show the result
-... print map3d_2
+... print(map3d_2)
 [[[ 0.  1.  2.  0.  1.  2.]
   [ 1.  2.  0.  1.  2.  0.]
   [ 2.  0.  1.  2.  0.  1.]
@@ -114,11 +111,13 @@ for details.
 .. sectionauthor:: Glynn Clements
 """
 
-import os
+from __future__ import absolute_import
+import sys
+
 import numpy
 
-from utils import try_remove
-import core as grass
+from .utils import try_remove
+from . import core as gcore
 from grass.exceptions import CalledModuleError
 
 
@@ -126,7 +125,7 @@ from grass.exceptions import CalledModuleError
 
 class _tempfile(object):
     def __init__(self):
-        self.filename = grass.tempfile()
+        self.filename = gcore.tempfile()
 
     def __del__(self):
         try_remove(self.filename)
@@ -134,24 +133,47 @@ class _tempfile(object):
 ###############################################################################
 
 class array(numpy.memmap):
-    def __new__(cls, dtype=numpy.double):
+    def __new__(cls, mapname=None, null=None, dtype=numpy.double):
         """Define new numpy array
 
         :param cls:
         :param dtype: data type (default: numpy.double)
         """
-        reg = grass.region()
+        reg = gcore.region()
         r = reg['rows']
         c = reg['cols']
         shape = (r, c)
 
         tempfile = _tempfile()
+        if mapname:
+            kind = numpy.dtype(dtype).kind
+            size = numpy.dtype(dtype).itemsize
+
+            if kind == 'f':
+                flags = 'f'
+            elif kind in 'biu':
+                flags = 'i'
+            else:
+                raise ValueError(_('Invalid kind <%s>') % kind)
+
+            if size not in [1, 2, 4, 8]:
+                raise ValueError(_('Invalid size <%d>') % size)
+
+            gcore.run_command(
+                'r.out.bin',
+                flags=flags,
+                input=mapname,
+                output=tempfile.filename,
+                bytes=size,
+                null=null,
+                quiet=True,
+                overwrite=True)
 
         self = numpy.memmap.__new__(
             cls,
             filename=tempfile.filename,
             dtype=dtype,
-            mode='w+',
+            mode='r+',
             shape=shape)
 
         self.tempfile = tempfile
@@ -166,7 +188,14 @@ class array(numpy.memmap):
 
         :return: 0 on success
         :return: non-zero code on failure
+
+        .. deprecated:: 7.1
+        Instead reading the map after creating the array,
+        pass the map name in the array constructor.
         """
+        if sys.platform == 'win32':
+            gcore.warning(_("grass.script.array.read is deprecated and does not"
+                            " work on MS Windows, pass raster name in the constructor"))
         kind = self.dtype.kind
         size = self.dtype.itemsize
 
@@ -181,7 +210,7 @@ class array(numpy.memmap):
             raise ValueError(_('Invalid size <%d>') % size)
 
         try:
-            grass.run_command(
+            gcore.run_command(
                 'r.out.bin',
                 flags=flags,
                 input=mapname,
@@ -224,10 +253,10 @@ class array(numpy.memmap):
         else:
             raise ValueError(_('Invalid kind <%s>') % kind)
 
-        reg = grass.region()
+        reg = gcore.region()
 
         try:
-            grass.run_command(
+            gcore.run_command(
                 'r.in.bin',
                 flags=flags,
                 input=self.filename,
@@ -251,25 +280,48 @@ class array(numpy.memmap):
 
 
 class array3d(numpy.memmap):
-    def __new__(cls, dtype=numpy.double):
+    def __new__(cls, mapname=None, null=None, dtype=numpy.double):
         """Define new 3d numpy array
 
         :param cls:
         :param dtype: data type (default: numpy.double)
         """
-        reg = grass.region(True)
+        reg = gcore.region(True)
         r = reg['rows3']
         c = reg['cols3']
         d = reg['depths']
         shape = (d, r, c)
 
         tempfile = _tempfile()
+        if mapname:
+            kind = numpy.dtype(dtype).kind
+            size = numpy.dtype(dtype).itemsize
+    
+            if kind == 'f':
+                flags = None # default is double
+            elif kind in 'biu':
+                flags = 'i'
+            else:
+                raise ValueError(_('Invalid kind <%s>') % kind)
+
+            if size not in [1, 2, 4, 8]:
+                raise ValueError(_('Invalid size <%d>') % size)
+
+            gcore.run_command(
+                'r3.out.bin',
+                flags=flags,
+                input=mapname,
+                output=tempfile.filename,
+                bytes=size,
+                null=null,
+                quiet=True,
+                overwrite=True)
 
         self = numpy.memmap.__new__(
             cls,
             filename=tempfile.filename,
             dtype=dtype,
-            mode='w+',
+            mode='r+',
             shape=shape)
 
         self.tempfile = tempfile
@@ -285,7 +337,14 @@ class array3d(numpy.memmap):
 
         :return: 0 on success
         :return: non-zero code on failure
+
+        .. deprecated:: 7.1
+        Instead reading the map after creating the array,
+        pass the map name in the array constructor.
         """
+        if sys.platform == 'win32':
+            gcore.warning(_("grass.script.array3d.read is deprecated and does not"
+                            " work on MS Windows, pass 3D raster name in the constructor"))
         kind = self.dtype.kind
         size = self.dtype.itemsize
 
@@ -300,7 +359,7 @@ class array3d(numpy.memmap):
             raise ValueError(_('Invalid size <%d>') % size)
 
         try:
-            grass.run_command(
+            gcore.run_command(
                 'r3.out.bin',
                 flags=flags,
                 input=mapname,
@@ -338,10 +397,10 @@ class array3d(numpy.memmap):
         else:
             raise ValueError(_('Invalid kind <%s>') % kind)
 
-        reg = grass.region(True)
+        reg = gcore.region(True)
 
         try:
-            grass.run_command(
+            gcore.run_command(
                 'r3.in.bin',
                 flags=flags,
                 input=self.filename,
diff --git a/lib/python/script/core.py b/lib/python/script/core.py
index 2467ec6..123cdc5 100644
--- a/lib/python/script/core.py
+++ b/lib/python/script/core.py
@@ -17,25 +17,34 @@ for details.
 .. sectionauthor:: Martin Landa <landa.martin gmail.com>
 .. sectionauthor:: Michael Barton <michael.barton asu.edu>
 """
+from __future__ import absolute_import, print_function
 
 import os
 import sys
-import types
-import re
 import atexit
 import subprocess
 import shutil
 import codecs
 import types as python_types
 
-from utils import KeyValue, parse_key_val, basename, encode
+from .utils import KeyValue, parse_key_val, basename, encode
 from grass.exceptions import ScriptError, CalledModuleError
 
 # i18N
 import gettext
 gettext.install('grasslibs', os.path.join(os.getenv("GISBASE"), 'locale'))
-import __builtin__
-__builtin__.__dict__['_'] = __builtin__.__dict__['_'].im_self.lgettext
+
+try:
+    # python2
+    import __builtin__
+    from os import environ
+except ImportError:
+    # python3
+    import builtins as __builtin__
+    from os import environb as environ
+    unicode = str
+__builtin__.__dict__['_'] = __builtin__.__dict__['_'].__self__.lgettext
+
 
 # subprocess wrapper that uses shell on Windows
 
@@ -82,14 +91,18 @@ _popen_args = ["bufsize", "executable", "stdin", "stdout", "stderr",
 
 
 def _make_val(val):
-    if isinstance(val, types.StringType) or \
-            isinstance(val, types.UnicodeType):
+    """Convert value to bytes"""
+    if isinstance(val, bytes):
         return val
-    if isinstance(val, types.ListType):
-        return ",".join(map(_make_val, val))
-    if isinstance(val, types.TupleType):
-        return _make_val(list(val))
-    return str(val)
+    if isinstance(val, (str, unicode)):
+        return encode(val)
+    if isinstance(val, (int, float)):
+        return encode(str(val))
+    try:
+        return b",".join(map(_make_val, iter(val)))
+    except TypeError:
+        pass
+    return bytes(val)
 
 
 def get_commands():
@@ -249,7 +262,7 @@ def get_real_command(cmd):
     return cmd
 
 
-def make_command(prog, flags="", overwrite=False, quiet=False, verbose=False,
+def make_command(prog, flags=b"", overwrite=False, quiet=False, verbose=False,
                  errors=None, **options):
     """Return a list of strings suitable for use as the args parameter to
     Popen() or call(). Example:
@@ -268,31 +281,34 @@ def make_command(prog, flags="", overwrite=False, quiet=False, verbose=False,
 
     :return: list of arguments
     """
-    args = [prog]
+    args = [_make_val(prog)]
     if overwrite:
-        args.append("--o")
+        args.append(b"--o")
     if quiet:
-        args.append("--q")
+        args.append(b"--q")
     if verbose:
-        args.append("--v")
+        args.append(b"--v")
     if flags:
-        if '-' in flags:
+        flags = _make_val(flags)
+        if b'-' in flags:
             raise ScriptError("'-' is not a valid flag")
-        args.append("-%s" % flags)
-    for opt, val in options.iteritems():
+        args.append(b"-" + bytes(flags))
+    for opt, val in options.items():
         if opt in _popen_args:
             continue
+        # convert string to bytes
+        opt = encode(opt)
         if val != None:
-            if opt.startswith('_'):
+            if opt.startswith(b'_'):
                 opt = opt[1:]
                 warning(_("To run the module <%s> add underscore at the end"
                     " of the option <%s> to avoid conflict with Python"
                     " keywords. Underscore at the beginning is"
                     " depreciated in GRASS GIS 7.0 and will be removed"
                     " in version 7.1.") % (prog, opt))
-            elif opt.endswith('_'):
+            elif opt.endswith(b'_'):
                 opt = opt[:-1]
-            args.append("%s=%s" % (opt, _make_val(val)))
+            args.append(opt + b'=' + _make_val(val))
     return args
 
 
@@ -312,16 +328,16 @@ def handle_errors(returncode, result, args, kwargs):
         raise CalledModuleError(module=None, code=repr(args),
                                 returncode=returncode)
 
-def start_command(prog, flags="", overwrite=False, quiet=False,
+def start_command(prog, flags=b"", overwrite=False, quiet=False,
                   verbose=False, **kwargs):
     """Returns a Popen object with the command created by make_command.
     Accepts any of the arguments which Popen() accepts apart from "args"
     and "shell".
 
     >>> p = start_command("g.gisenv", stdout=subprocess.PIPE)
-    >>> print p  # doctest: +ELLIPSIS
+    >>> print(p)  # doctest: +ELLIPSIS
     <...Popen object at 0x...>
-    >>> print p.communicate()[0]  # doctest: +SKIP
+    >>> print(p.communicate()[0])  # doctest: +SKIP
     GISDBASE='/opt/grass-data';
     LOCATION_NAME='spearfish60';
     MAPSET='glynn';
@@ -343,7 +359,7 @@ def start_command(prog, flags="", overwrite=False, quiet=False,
     """
     options = {}
     popts = {}
-    for opt, val in kwargs.iteritems():
+    for opt, val in kwargs.items():
         if opt in _popen_args:
             popts[opt] = val
         else:
@@ -358,7 +374,6 @@ def start_command(prog, flags="", overwrite=False, quiet=False,
                                                               __name__,
                                                               ' '.join(args)))
         sys.stderr.flush()
-
     return Popen(args, **popts)
 
 
@@ -400,9 +415,9 @@ def pipe_command(*args, **kwargs):
     "stdout = PIPE". Returns the Popen object.
 
     >>> p = pipe_command("g.gisenv")
-    >>> print p  # doctest: +ELLIPSIS
+    >>> print(p)  # doctest: +ELLIPSIS
     <....Popen object at 0x...>
-    >>> print p.communicate()[0]  # doctest: +SKIP
+    >>> print(p.communicate()[0])  # doctest: +SKIP
     GISDBASE='/opt/grass-data';
     LOCATION_NAME='spearfish60';
     MAPSET='glynn';
@@ -471,7 +486,7 @@ def parse_command(*args, **kwargs):
     parse = None
     parse_args = {}
     if 'parse' in kwargs:
-        if type(kwargs['parse']) is types.TupleType:
+        if isinstance(kwargs['parse'], tuple):
             parse = kwargs['parse'][0]
             parse_args = kwargs['parse'][1]
         del kwargs['parse']
@@ -663,15 +678,15 @@ def _parse_opts(lines):
         if not line:
             break
         try:
-            [var, val] = line.split('=', 1)
+            [var, val] = line.split(b'=', 1)
         except:
             raise SyntaxError("invalid output from g.parser: %s" % line)
 
-        if var.startswith('flag_'):
+        if var.startswith(b'flag_'):
             flags[var[5:]] = bool(int(val))
-        elif var.startswith('opt_'):
+        elif var.startswith(b'opt_'):
             options[var[4:]] = val
-        elif var in ['GRASS_OVERWRITE', 'GRASS_VERBOSE']:
+        elif var in [b'GRASS_OVERWRITE', b'GRASS_VERBOSE']:
             os.environ[var] = val
         else:
             raise SyntaxError("invalid output from g.parser: %s" % line)
@@ -692,14 +707,17 @@ def parser():
     dictionaries containing option/flag values, keyed by lower-case
     option/flag names. The values in "options" are strings, those in
     "flags" are Python booleans.
+
+    Overview table of parser standard options:
+    https://grass.osgeo.org/grass72/manuals/parser_standard_options.html
     """
     if not os.getenv("GISBASE"):
-        print >> sys.stderr, "You must be in GRASS GIS to run this program."
+        print("You must be in GRASS GIS to run this program.", file=sys.stderr)
         sys.exit(1)
 
-    cmdline = [basename(sys.argv[0])]
-    cmdline += ['"' + arg + '"' for arg in sys.argv[1:]]
-    os.environ['CMDLINE'] = ' '.join(cmdline)
+    cmdline = [basename(encode(sys.argv[0]))]
+    cmdline += [b'"' + encode(arg) + b'"' for arg in sys.argv[1:]]
+    environ[b'CMDLINE'] = b' '.join(cmdline)
 
     argv = sys.argv[:]
     name = argv[0]
@@ -712,12 +730,12 @@ def parser():
     prog = "g.parser.exe" if sys.platform == "win32" else "g.parser"
     p = subprocess.Popen([prog, '-n'] + argv, stdout=subprocess.PIPE)
     s = p.communicate()[0]
-    lines = s.split('\0')
+    lines = s.split(b'\0')
 
-    if not lines or lines[0] != "@ARGS_PARSED@":
-        sys.stdout.write(s)
+    if not lines or lines[0] != b"@ARGS_PARSED@":
+        stdout = os.fdopen(sys.stdout.fileno(), 'wb')
+        stdout.write(s)
         sys.exit(p.returncode)
-
     return _parse_opts(lines[1:])
 
 # interface to g.tempfile
@@ -927,7 +945,7 @@ def gisenv():
     dictionary. Example:
 
     >>> env = gisenv()
-    >>> print env['GISDBASE']  # doctest: +SKIP
+    >>> print(env['GISDBASE'])  # doctest: +SKIP
     /opt/grass-data
 
     :return: list of GRASS variables
@@ -977,7 +995,7 @@ def region(region3d=False, complete=False):
 
     s = read_command("g.region", flags=flgs)
     reg = parse_key_val(s, val_type=float)
-    for k in ['rows',  'cols',  'cells',
+    for k in ['projection', 'zone', 'rows',  'cols',  'cells',
               'rows3', 'cols3', 'cells3', 'depths']:
         if k not in reg:
             continue
@@ -1089,9 +1107,9 @@ def find_file(name, element='cell', mapset=None):
     dictionary. Example:
 
     >>> result = find_file('elevation', element='cell')
-    >>> print result['fullname']
+    >>> print(result['fullname'])
     elevation at PERMANENT
-    >>> print result['file']  # doctest: +ELLIPSIS
+    >>> print(result['file'])  # doctest: +ELLIPSIS
     /.../PERMANENT/cell/elevation
 
 
@@ -1132,7 +1150,7 @@ def list_strings(type, pattern=None, mapset=None, exclude=None, flag=''):
     """
     if type == 'cell':
         verbose(_('Element type should be "raster" and not "%s"') % type)
-    
+
     result = list()
     for line in read_command("g.list",
                              quiet=True,
@@ -1321,7 +1339,7 @@ def find_program(pgm, *args):
             or non-zero return code
     :return: True otherwise
     """
-    nuldev = file(os.devnull, 'w+')
+    nuldev = open(os.devnull, 'w+')
     try:
         # TODO: the doc or impl is not correct, any return code is accepted
         call([pgm] + list(args), stdin = nuldev, stdout = nuldev, stderr = nuldev)
@@ -1491,8 +1509,7 @@ def version():
 
     ::
 
-        print version()
-
+        >>> print(version())
         {'proj4': '4.8.0', 'geos': '3.3.5', 'libgis_revision': '52468',
          'libgis_date': '2012-07-27 22:53:30 +0200 (Fri, 27 Jul 2012)',
          'version': '7.0.svn', 'date': '2012', 'gdal': '2.0dev',
@@ -1500,7 +1517,7 @@ def version():
 
     """
     data = parse_command('g.version', flags='rge', errors='ignore')
-    for k, v in data.iteritems():
+    for k, v in data.items():
         data[k.strip()] = v.replace('"', '').strip()
 
     return data
diff --git a/lib/python/script/db.py b/lib/python/script/db.py
index d503045..13b7297 100644
--- a/lib/python/script/db.py
+++ b/lib/python/script/db.py
@@ -18,9 +18,9 @@ for details.
 .. sectionauthor:: Glynn Clements
 .. sectionauthor:: Martin Landa <landa.martin gmail.com>
 """
-
-from core import *
-from utils import try_remove
+from __future__ import absolute_import
+from .core import *
+from .utils import try_remove
 from grass.exceptions import CalledModuleError
 
 
@@ -114,7 +114,7 @@ def db_connection(force=False):
     if not conn and force:
         run_command('db.connect', flags='c')
         conn = parse_command('db.connect', flags='g')
-    
+
     return conn
 
 def db_select(sql=None, filename=None, table=None, **args):
@@ -163,8 +163,7 @@ def db_select(sql=None, filename=None, table=None, **args):
         fatal(_("Fetching data failed"))
 
     ofile = open(fname)
-    result = map(lambda x: tuple(x.rstrip(os.linesep).split(args['sep'])),
-                 ofile.readlines())
+    result = [tuple(x.rstrip(os.linesep).split(args['sep'])) for x in ofile.readlines()]
     ofile.close()
     try_remove(fname)
 
@@ -185,12 +184,12 @@ def db_table_in_vector(table):
 
     :param str table: name of table to query
     """
-    from vector import vector_db
+    from .vector import vector_db
     nuldev = file(os.devnull, 'w')
     used = []
     vects = list_strings('vect')
     for vect in vects:
-        for f in vector_db(vect, stderr=nuldev).itervalues():
+        for f in vector_db(vect, stderr=nuldev).values():
             if not f:
                 continue
             if f['table'] == table:
diff --git a/lib/python/script/raster.py b/lib/python/script/raster.py
index 4bbcc09..2c9e472 100644
--- a/lib/python/script/raster.py
+++ b/lib/python/script/raster.py
@@ -17,15 +17,23 @@ for details.
 .. sectionauthor:: Glynn Clements
 .. sectionauthor:: Martin Landa <landa.martin gmail.com>
 """
+from __future__ import absolute_import
 
 import os
 import string
-import types
 import time
 
-from core import *
+from .core import *
 from grass.exceptions import CalledModuleError
-from utils import float_or_dms, parse_key_val
+from .utils import float_or_dms, parse_key_val
+
+
+try:
+    from builtins import unicode
+    bytes = str
+except ImportError:
+    # python3
+    unicode = str
 
 
 def raster_history(map):
@@ -160,13 +168,13 @@ def raster_what(map, coord, env=None, localized=False):
                        query
     :param env:
     """
-    if type(map) in (types.StringType, types.UnicodeType):
+    if isinstance(map, (bytes, unicode)):
         map_list = [map]
     else:
         map_list = map
 
     coord_list = list()
-    if type(coord) is types.TupleType:
+    if isinstance(coord, tuple):
         coord_list.append('%f,%f' % (coord[0], coord[1]))
     else:
         for e, n in coord:
diff --git a/lib/python/script/raster3d.py b/lib/python/script/raster3d.py
index 752d22b..63ae20f 100644
--- a/lib/python/script/raster3d.py
+++ b/lib/python/script/raster3d.py
@@ -9,7 +9,7 @@ Usage:
     grass.raster3d_info(map)
 
 
-(C) 2008-2009 by the GRASS Development Team
+(C) 2008-2016 by the GRASS Development Team
 This program is free software under the GNU General Public
 License (>=v2). Read the file COPYING that comes with GRASS
 for details.
@@ -18,11 +18,12 @@ for details.
 .. sectionauthor:: Martin Landa <landa.martin gmail.com>
 .. sectionauthor:: Soeren Gebbert <soeren.gebbert gmail.com>
 """
+from __future__ import absolute_import
 
 import string
 
-from core import *
-from utils import float_or_dms, parse_key_val
+from .core import *
+from .utils import float_or_dms, parse_key_val
 from grass.exceptions import CalledModuleError
 
 
@@ -64,22 +65,28 @@ def raster3d_info(map):
     return kv
 
 
-def mapcalc3d(exp, quiet=False, verbose=False, overwrite=False, **kwargs):
+def mapcalc3d(exp, quiet=False, verbose=False, overwrite=False,
+              seed=None, env=None, **kwargs):
     """Interface to r3.mapcalc.
 
     :param str exp: expression
     :param bool quiet: True to run quietly (<tt>--q</tt>)
     :param bool verbose: True to run verbosely (<tt>--v</tt>)
     :param bool overwrite: True to enable overwriting the output (<tt>--o</tt>)
+    :param seed: an integer used to seed the random-number generator for the
+                 rand() function, or 'auto' to generate a random seed
+    :param dict env: dictionary of environment variables for child process
     :param kwargs:
     """
+
+    if seed == 'auto':
+        seed = hash((os.getpid(), time.time())) % (2**32)
+
     t = string.Template(exp)
     e = t.substitute(**kwargs)
 
     try:
-        run_command('r3.mapcalc', expression=e,
-                    quiet=quiet,
-                    verbose=verbose,
-                    overwrite=overwrite)
+        write_command('r3.mapcalc', file='-', stdin=e, env=env, seed=seed,
+                      quiet=quiet, verbose=verbose, overwrite=overwrite)
     except CalledModuleError:
         fatal(_("An error occurred while running r3.mapcalc"))
diff --git a/lib/python/script/setup.py b/lib/python/script/setup.py
index 7f8a462..d69ede1 100644
--- a/lib/python/script/setup.py
+++ b/lib/python/script/setup.py
@@ -24,17 +24,17 @@ Usage::
     # query GRASS itself for its GISBASE
     # (with fixes for specific platforms)
     # needs to be edited by the user
-    grass7bin = 'grass70'
+    grass7bin = 'grass72'
     if sys.platform.startswith('win'):
         # MS Windows
-        grass7bin = r'C:\OSGeo4W\bin\grass70.bat'
+        grass7bin = r'C:\OSGeo4W\bin\grass72.bat'
         # uncomment when using standalone WinGRASS installer
-        # grass7bin = r'C:\Program Files (x86)\GRASS GIS 7.0.0\grass70.bat'
+        # grass7bin = r'C:\Program Files (x86)\GRASS GIS 7.2.0\grass72.bat'
         # this can be avoided if GRASS executable is added to PATH
     elif sys.platform == 'darwin':
         # Mac OS X
         # TODO: this have to be checked, maybe unix way is good enough
-        grass7bin = '/Applications/GRASS/GRASS-7.0.app/'
+        grass7bin = '/Applications/GRASS/GRASS-7.2.app/'
 
     # query GRASS GIS itself for its GISBASE
     startcmd = [grass7bin, '--config', 'path']
@@ -102,11 +102,11 @@ import tempfile as tmpfile
 
 def write_gisrc(dbase, location, mapset):
     """Write the ``gisrc`` file and return its path."""
-    fd, gisrc = tmpfile.mkstemp()
-    os.write(fd, "GISDBASE: %s\n" % dbase)
-    os.write(fd, "LOCATION_NAME: %s\n" % location)
-    os.write(fd, "MAPSET: %s\n" % mapset)
-    os.close(fd)
+    gisrc = tmpfile.mktemp()
+    with open(gisrc, 'w') as rc:
+        rc.write("GISDBASE: %s\n" % dbase)
+        rc.write("LOCATION_NAME: %s\n" % location)
+        rc.write("MAPSET: %s\n" % mapset)
     return gisrc
 
 
@@ -149,6 +149,7 @@ def init(gisbase, dbase='', location='demolocation', mapset='PERMANENT'):
     :param dbase: path to GRASS database (default: '')
     :param location: location name (default: 'demolocation')
     :param mapset: mapset within given location (default: 'PERMANENT')
+    
     :returns: path to ``gisrc`` file (to be deleted later)
     """
     # TODO: why we don't set GISBASE?
diff --git a/lib/python/script/task.py b/lib/python/script/task.py
index d0c362f..a915b2d 100644
--- a/lib/python/script/task.py
+++ b/lib/python/script/task.py
@@ -17,9 +17,17 @@ for details.
 
 .. sectionauthor:: Martin Landa <landa.martin gmail.com>
 """
-
+import re
 import types
 import string
+
+try:
+    from builtins import unicode
+    bytes = str
+except ImportError:
+    # python3
+    unicode = str
+
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
@@ -32,8 +40,8 @@ if hasattr(etree, 'ParseError'):
 else:
     ETREE_EXCEPTIONS = (expat.ExpatError)
 
-from utils import encode, decode
-from core import *
+from .utils import encode, decode, split
+from .core import *
 
 
 class grassTask:
@@ -152,10 +160,10 @@ class grassTask:
                 val = p[element]
                 if val is None:
                     continue
-                if type(val) in (types.ListType, types.TupleType):
+                if isinstance(val, (list, tuple)):
                     if value in val:
                         return p
-                elif type(val) ==  types.StringType:
+                elif isinstance(val, (bytes, unicode)):
                     if p[element][:len(value)] ==  value:
                         return p
                 else:
@@ -165,8 +173,8 @@ class grassTask:
             pass
 
         if raiseError:
-            raise ValueError, _("Parameter element '%(element)s' not found: '%(value)s'") % \
-                { 'element' : element, 'value' : value }
+            raise ValueError(_("Parameter element '%(element)s' not found: '%(value)s'") % \
+                { 'element' : element, 'value' : value })
         else:
             return None
 
@@ -180,7 +188,7 @@ class grassTask:
         for f in self.flags:
             if f['name'] == aFlag:
                 return f
-        raise ValueError, _("Flag not found: %s") % aFlag
+        raise ValueError(_("Flag not found: %s") % aFlag)
 
     def get_cmd_error(self):
         """Get error string produced by get_cmd(ignoreErrors = False)
@@ -242,7 +250,7 @@ class grassTask:
 
         errList = self.get_cmd_error()
         if ignoreErrors is False and errList:
-            raise ValueError, '\n'.join(errList)
+            raise ValueError('\n'.join(errList))
 
         return cmd
 
@@ -492,12 +500,12 @@ def get_interface_description(cmd):
                 del sys.path[0]  # remove gui/scripts from the path
 
         if p.returncode != 0:
-            raise ScriptError, _("Unable to fetch interface description for command '%(cmd)s'."
-                                 "\n\nDetails: %(det)s") % {'cmd': cmd, 'det': cmderr}
+            raise ScriptError(_("Unable to fetch interface description for command '%(cmd)s'."
+                                 "\n\nDetails: %(det)s") % {'cmd': cmd, 'det': cmderr})
 
     except OSError as e:
-        raise ScriptError, _("Unable to fetch interface description for command '%(cmd)s'."
-                             "\n\nDetails: %(det)s") % {'cmd': cmd, 'det': e}
+        raise ScriptError(_("Unable to fetch interface description for command '%(cmd)s'."
+                             "\n\nDetails: %(det)s") % {'cmd': cmd, 'det': e})
 
     desc = cmdout.replace('grass-interface.dtd',
                           os.path.join(os.getenv('GISBASE'),
@@ -509,6 +517,9 @@ def get_interface_description(cmd):
 def parse_interface(name, parser=processTask, blackList=None):
     """Parse interface of given GRASS module
 
+    The *name* is either GRASS module name (of a module on path) or
+    a full or relative path to an executable.
+
     :param str name: name of GRASS module to be parsed
     :param parser:
     :param blackList:
@@ -518,7 +529,15 @@ def parse_interface(name, parser=processTask, blackList=None):
     except ETREE_EXCEPTIONS as error:
         raise ScriptError(_("Cannot parse interface description of"
             "<{name}> module: {error}").format(name=name, error=error))
-    return parser(tree, blackList=blackList).get_task()
+    task = parser(tree, blackList=blackList).get_task()
+    # if name from interface is different than the originally
+    # provided name, then the provided name is likely a full path needed
+    # to actually run the module later
+    # (processTask uses only the XML which does not contain the original
+    # path used to execute the module)
+    if task.name != name:
+        task.path = name
+    return task
 
 
 def command_info(cmd):
@@ -592,3 +611,68 @@ def command_info(cmd):
     cmdinfo['usage'] = usage
 
     return cmdinfo
+
+def cmdtuple_to_list(cmd):
+    """Convert command tuple to list.
+
+    :param tuple cmd: GRASS command to be converted
+
+    :return: command in list
+    """
+    cmdList = []
+    if not cmd:
+        return cmdList
+
+    cmdList.append(cmd[0])
+
+    if 'flags' in cmd[1]:
+        for flag in cmd[1]['flags']:
+            cmdList.append('-' + flag)
+    for flag in ('help', 'verbose', 'quiet', 'overwrite'):
+        if flag in cmd[1] and cmd[1][flag] is True:
+            cmdList.append('--' + flag)
+
+    for k, v in cmd[1].items():
+        if k in ('flags', 'help', 'verbose', 'quiet', 'overwrite'):
+            continue
+        cmdList.append('%s=%s' % (k, v))
+
+    return cmdList
+
+def cmdlist_to_tuple(cmd):
+    """Convert command list to tuple for run_command() and others
+
+    :param list cmd: GRASS command to be converted
+
+    :return: command as tuple
+    """
+    if len(cmd) < 1:
+        return None
+
+    dcmd = {}
+    for item in cmd[1:]:
+        if '=' in item: # params
+            key, value = item.split('=', 1)
+            dcmd[str(key)] = value.replace('"', '')
+        elif item[:2] == '--': # long flags
+            flag = item[2:]
+            if flag in ('help', 'verbose', 'quiet', 'overwrite'):
+                dcmd[str(flag)] = True
+        elif len(item) == 2 and item[0] == '-': # -> flags
+            if 'flags' not in dcmd:
+                dcmd['flags'] = ''
+            dcmd['flags'] += item[1]
+        else: # unnamed parameter
+            module = parse_interface(cmd[0])
+            dcmd[module.define_first()] = item
+
+    return (cmd[0], dcmd)
+
+def cmdstring_to_tuple(cmd):
+    """Convert command string to tuple for run_command() and others
+
+    :param str cmd: command to be converted
+
+    :return: command as tuple
+    """
+    return cmdlist_to_tuple(split(cmd))
diff --git a/lib/python/script/testsuite/test_core_make_val.py b/lib/python/script/testsuite/test_core_make_val.py
new file mode 100644
index 0000000..faad002
--- /dev/null
+++ b/lib/python/script/testsuite/test_core_make_val.py
@@ -0,0 +1,31 @@
+# -*- coding: utf-8 -*-
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.script.core import _make_val
+
+
+class TestCoreMakeVal(TestCase):
+    """Tests function `_make_val` that convert value to bytes."""
+
+    def test_bytes(self):
+        self.assertEqual(b'text', _make_val(b'text'))
+
+    def test_unicode(self):
+        self.assertEqual(b'text', _make_val(u'text'))
+
+    def test_int(self):
+        self.assertEqual(b'123', _make_val(123))
+
+    def test_float(self):
+        self.assertEqual(b'1.23', _make_val(1.23))
+
+    def test_iterable(self):
+        test = b'text', u'text', 123, 1.23
+        solution = b'text,text,123,1.23'
+        self.assertEqual(solution, _make_val(test))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/script/testsuite/test_doctests.py b/lib/python/script/testsuite/test_doctests.py
new file mode 100644
index 0000000..04575b8
--- /dev/null
+++ b/lib/python/script/testsuite/test_doctests.py
@@ -0,0 +1,39 @@
+# -*- coding: utf-8 -*-
+"""
+Tests checkers
+"""
+
+import doctest
+
+import grass.gunittest.case
+import grass.gunittest.main
+import grass.gunittest.utils
+
+import grass.script.array as garray
+
+
+# doctest does not allow changing the base classes of test case, skip test case
+# and test suite, so we need to create a new type which inherits from our class
+# and contains doctest's methods
+# the alternative is to copy 500 from doctest and change what is needed
+# (this might be necessary anyway beacuse of the reports and stdout and stderr)
+doctest.DocFileCase = type('DocFileCase',
+                           (grass.gunittest.case.TestCase,),
+                           dict(doctest.DocFileCase.__dict__))
+doctest.SkipDocTestCase = type('SkipDocTestCase',
+                               (grass.gunittest.case.TestCase,),
+                               dict(doctest.SkipDocTestCase.__dict__))
+
+
+def load_tests(loader, tests, ignore):
+    # TODO: this must be somewhere when doctest is called, not here
+    # TODO: ultimate solution is not to use _ as a buildin in lib/python
+    # for now it is the only place where it works
+    grass.gunittest.utils.do_doctest_gettext_workaround()
+    # this should be called at some top level
+    tests.addTests(doctest.DocTestSuite(garray))
+    return tests
+
+
+if __name__ == '__main__':
+    grass.gunittest.main.test()
diff --git a/lib/python/script/testsuite/test_raster.py b/lib/python/script/testsuite/test_raster.py
new file mode 100644
index 0000000..59d151b
--- /dev/null
+++ b/lib/python/script/testsuite/test_raster.py
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Thu Feb 18 09:42:23 2016
+
+ at author: lucadelu
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+import grass.script as gscript
+
+
+class TestRaster(TestCase):
+    """Test raster functions"""
+
+    raster = 'testrasterscript'
+    region = gscript.region()
+    coords = (region['e'] - 1, region['n'] - 1)
+
+    @classmethod
+    def setUpClass(cls):
+        cls.runModule("r.mapcalc", expression="testrasterscript = 100",
+                      overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.runModule("g.remove", type='raster', name='testrasterscript',
+                      flags='f')
+
+    def test_raster_what(self):
+        res = gscript.raster_what(self.raster, [self.coords])[0]
+        self.assertEquals(int(res[self.raster]['value']), 100)
+
+        res = gscript.raster_what(self.raster, [self.coords],
+                                  localized=True)[0]
+        self.assertEquals(int(res[self.raster][_('value')]), 100)
+
+    def test_raster_info(self):
+        res = gscript.raster_info(self.raster)
+        self.assertEquals(str(res['cols']), str(self.region['cols']))
+        self.assertEquals(str(res['north']), str(self.region['n']))
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/script/testsuite/test_start_command_functions.py b/lib/python/script/testsuite/test_start_command_functions.py
new file mode 100644
index 0000000..14d4aec
--- /dev/null
+++ b/lib/python/script/testsuite/test_start_command_functions.py
@@ -0,0 +1,67 @@
+# -*- coding: utf-8 -*-
+# the utf-8 is important because we do use the characters
+"""Tests of start_command function family (location independent)"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.script.core import start_command, PIPE, run_command
+
+
+class TestPythonKeywordsInParameters(TestCase):
+    """Tests additional underscore syntax which helps to avoid Python keywords
+
+    It works the same for keywords, buildins and any names.
+    """
+
+    raster = b'does_not_exist'
+
+    def test_prefixed_underscore(self):
+        proc = start_command(
+            'g.region', _raster=self.raster, stderr=PIPE)
+        stderr = proc.communicate()[1]
+        self.assertNotIn(b'_raster', stderr)
+        self.assertIn(self.raster, stderr,
+            msg="Raster map name should appear in the error output")
+
+    def test_suffixed_underscore(self):
+        proc = start_command(
+            'g.region', raster_=self.raster, stderr=PIPE)
+        stderr = proc.communicate()[1]
+        self.assertNotIn(b'raster_', stderr)
+        self.assertIn(self.raster, stderr,
+            msg="Raster map name should appear in the error output")
+
+    def test_multiple_underscores(self):
+        proc = start_command(
+            'g.region', _raster_=self.raster, stderr=PIPE)
+        stderr = proc.communicate()[1]
+        returncode = proc.poll()
+        self.assertEquals(returncode, 1)
+        self.assertIn(b'raster', stderr)
+
+
+class TestPythonModuleWithUnicodeParameters(TestCase):
+    """Tests if unicode works in parameters of Python modules
+
+    This in fact tests also the `parser()` function (original motivation
+    for this tests).
+
+    Using g.search.module because it takes any option values.
+    """
+
+    def test_python_module_ascii(self):
+        """This tests if Python module works"""
+        run_command('g.search.modules', keyword=b'Priserny kun')
+
+    def test_python_module_czech_nonascii(self):
+        """This likely fails on non-UTF-8 systems (i.e. MS Win)"""
+        run_command('g.search.modules', keyword=b'Příšerný kůň')
+
+    def test_python_module_czech_unicode(self):
+        """This likely fails on non-UTF-8 systems (i.e. MS Win)"""
+        run_command('g.search.modules', keyword=u'Příšerný kůň')
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/script/testsuite/test_start_command_functions_nc.py b/lib/python/script/testsuite/test_start_command_functions_nc.py
new file mode 100644
index 0000000..257ea6e
--- /dev/null
+++ b/lib/python/script/testsuite/test_start_command_functions_nc.py
@@ -0,0 +1,54 @@
+"""Tests of start_command function family in nc location"""
+
+LOCATION = 'nc'
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.script.core import start_command, PIPE
+
+
+class TestPythonKeywordsInParameters(TestCase):
+    """Tests additional underscore syntax which helps to avoid Python keywords
+
+    It works the same for keywords, buildins and any names.
+    """
+
+    raster = 'elevation'
+
+    # fresh region for each test function
+    def setUp(self):
+        self.use_temp_region()
+
+    def tearDown(self):
+        self.del_temp_region()
+
+    def test_prefixed_underscore(self):
+        proc = start_command(
+            'g.region', _raster=self.raster, stderr=PIPE)
+        stderr = proc.communicate()[1]
+        returncode = proc.poll()
+        self.assertEquals(returncode, 0,
+            msg="Underscore as prefix was not accepted")
+        self.assertNotIn(b'_raster', stderr)
+
+    def test_suffixed_underscore(self):
+        proc = start_command(
+            'g.region', raster_=self.raster, stderr=PIPE)
+        stderr = proc.communicate()[1]
+        returncode = proc.poll()
+        self.assertEquals(returncode, 0,
+            msg="Underscore as suffix was not accepted, stderr is:\n%s" % stderr)
+        self.assertNotIn(b'raster_', stderr)
+
+    def test_multiple_underscores(self):
+        proc = start_command(
+            'g.region', _raster_=self.raster, stderr=PIPE)
+        stderr = proc.communicate()[1]
+        returncode = proc.poll()
+        self.assertEquals(returncode, 1,
+            msg="Underscore at both sides was accepted")
+        self.assertIn(b'raster', stderr)
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/script/testsuite/test_utils.py b/lib/python/script/testsuite/test_utils.py
new file mode 100644
index 0000000..2f3ef37
--- /dev/null
+++ b/lib/python/script/testsuite/test_utils.py
@@ -0,0 +1,66 @@
+# -*- coding: utf-8 -*-
+import os
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+from grass.script import utils
+
+
+class EnvironChange(TestCase):
+    env = dict()
+    NOT_FOUND = 'Not found!'
+
+    def setUp(self):
+        self.original_env = {k: os.environ.get(k, self.NOT_FOUND)
+                             for k in self.env.keys()}
+        for k, v in self.env.items():
+                os.environ[k] = v
+
+    def tearDown(self):
+        for k, v in self.env.items():
+                oval = self.original_env[k]
+                if oval == self.NOT_FOUND:
+                    os.environ.pop(k)
+                else:
+                    os.environ[k] = oval
+
+
+class LcAllC(EnvironChange):
+    env = dict(LC_ALL='C')
+
+
+class TestEncode(TestCase):
+    """Tests function `encode` that convert value to bytes."""
+
+    def test_bytes(self):
+        self.assertEqual(b'text', utils.encode(b'text'))
+
+    def test_unicode(self):
+        self.assertEqual(b'text', utils.encode(u'text'))
+
+    def test_bytes_grabage_in_out(self):
+        """If the input is bytes we should not touch it for encoding"""
+        self.assertEqual(b'Příšerný kůň', utils.encode(b'Příšerný kůň'))
+
+
+class TestDecode(TestCase):
+    """Tests function `encode` that convert value to unicode."""
+
+    def test_bytes(self):
+        self.assertEqual(u'text', utils.decode(b'text'))
+
+    def test_unicode(self):
+        self.assertEqual(u'text', utils.decode(u'text'))
+
+
+class TestEncodeLcAllC(TestEncode, LcAllC):
+    pass
+
+
+class TestDecodeLcAllC(TestDecode, LcAllC):
+    pass
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/script/utils.py b/lib/python/script/utils.py
index dff0ac6..6162954 100644
--- a/lib/python/script/utils.py
+++ b/lib/python/script/utils.py
@@ -7,7 +7,7 @@ Usage:
 
     from grass.script import utils as gutils
 
-(C) 2014 by the GRASS Development Team
+(C) 2014-2016 by the GRASS Development Team
 This program is free software under the GNU General Public
 License (>=v2). Read the file COPYING that comes with GRASS
 for details.
@@ -18,11 +18,12 @@ for details.
 """
 
 import os
+import sys
 import shutil
 import locale
+import shlex
 import re
 
-
 def float_or_dms(s):
     """Convert DMS to float.
 
@@ -149,30 +150,31 @@ class KeyValue(dict):
         self[key] = value
 
 
-def decode(string):
-    """Decode string with defualt locale
+def decode(bytes_):
+    """Decode bytes with default locale and return (unicode) string
 
-    :param str string: the string to decode
-    """
-    enc = locale.getdefaultlocale()[1]
-    if enc:
-        if hasattr(string, 'decode'):
-            return string.decode(enc)
+    No-op if parameter is not bytes (assumed unicode string).
 
-    return string
+    :param bytes bytes_: the bytes to decode
+    """
+    if isinstance(bytes_, bytes):
+        enc = locale.getdefaultlocale()[1]
+        return bytes_.decode(enc) if enc else bytes_.decode()
+    return bytes_
 
 
 def encode(string):
-    """Encode string with defualt locale
+    """Encode string with default locale and return bytes with that encoding
+
+    No-op if parameter is bytes (assumed already encoded).
+    This ensures garbage in, garbage out.
 
     :param str string: the string to encode
     """
+    if isinstance(string, bytes):
+        return string
     enc = locale.getdefaultlocale()[1]
-    if enc:
-        if hasattr(string, 'encode'):
-            return string.encode(enc)
-
-    return string
+    return string.encode(enc) if enc else string.encode()
 
 
 def parse_key_val(s, sep='=', dflt=None, val_type=None, vsep=None):
@@ -243,6 +245,16 @@ def get_num_suffix(number, max_number):
     return '{number:0{width}d}'.format(width=len(str(max_number)),
                                        number=number)
 
+def split(s):
+    """!Platform specific shlex.split"""
+    if sys.version_info >= (2, 6):
+        return shlex.split(s, posix = (sys.platform != "win32"))
+    elif sys.platform == "win32":
+        return shlex.split(s.replace('\\', r'\\'))
+    else:
+        return shlex.split(s)
+
+
 # source:
 #    http://stackoverflow.com/questions/4836710/
 #    does-python-have-a-built-in-function-for-string-natural-sort/4836734#4836734
@@ -252,3 +264,118 @@ def natural_sort(l):
     convert = lambda text: int(text) if text.isdigit() else text.lower()
     alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
     return sorted(l, key=alphanum_key)
+
+
+def get_lib_path(modname, libname=None):
+    """Return the path of the libname contained in the module.
+    """
+    from os.path import isdir, join, sep
+    from os import getenv
+
+    if isdir(join(getenv('GISBASE'), 'etc', modname)):
+        path = join(os.getenv('GISBASE'), 'etc', modname)
+    elif getenv('GRASS_ADDON_BASE') and libname and \
+            isdir(join(getenv('GRASS_ADDON_BASE'), 'etc', modname, libname)):
+        path = join(getenv('GRASS_ADDON_BASE'), 'etc', modname)
+    elif getenv('GRASS_ADDON_BASE') and \
+            isdir(join(getenv('GRASS_ADDON_BASE'), 'etc', modname)):
+        path = join(getenv('GRASS_ADDON_BASE'), 'etc', modname)
+    elif getenv('GRASS_ADDON_BASE') and \
+            isdir(join(getenv('GRASS_ADDON_BASE'), modname, modname)):
+        path = join(os.getenv('GRASS_ADDON_BASE'), modname, modname)
+    else:
+        # used by g.extension compilation process
+        cwd = os.getcwd()
+        idx = cwd.find(modname)
+        if idx < 0:
+            return None
+        path = '{cwd}{sep}etc{sep}{modname}'.format(cwd=cwd[:idx+len(modname)],
+                                                    sep=sep,
+                                                    modname=modname)
+        if libname:
+            path += '{pathsep}{cwd}{sep}etc{sep}{modname}{sep}{libname}'.format(
+                cwd=cwd[:idx+len(modname)],
+                sep=sep,
+                modname=modname, libname=libname,
+                pathsep=os.pathsep
+            )
+
+    return path
+
+
+def set_path(modulename, dirname=None, path='.'):
+    """Set sys.path looking in the the local directory GRASS directories.
+
+    :param modulename: string with the name of the GRASS module
+    :param dirname: string with the directory name containing the python
+                    libraries, default None
+    :param path: string with the path to reach the dirname locally.
+
+    Example
+    --------
+
+    "set_path" example working locally with the source code of a module
+    (r.green) calling the function with all the parameters. Below it is
+    reported the directory structure on the r.green module.
+
+    ::
+
+        grass_prompt> pwd
+        ~/Download/r.green/r.green.hydro/r.green.hydro.financial
+
+        grass_prompt> tree ../../../r.green
+        ../../../r.green
+        |-- ...
+        |-- libgreen
+        |   |-- pyfile1.py
+        |   +-- pyfile2.py
+        +-- r.green.hydro
+           |-- Makefile
+           |-- libhydro
+           |   |-- pyfile1.py
+           |   +-- pyfile2.py
+           |-- r.green.hydro.*
+           +-- r.green.hydro.financial
+               |-- Makefile
+               |-- ...
+               +-- r.green.hydro.financial.py
+
+        21 directories, 125 files
+
+    in the source code the function is called with the following parameters: ::
+
+        set_path('r.green', 'libhydro', '..')
+        set_path('r.green', 'libgreen', os.path.join('..', '..'))
+
+    when we are executing the module: r.green.hydro.financial locally from
+    the command line:  ::
+
+        grass_prompt> python r.green.hydro.financial.py --ui
+
+    In this way we are executing the local code even if the module was already
+    installed as grass-addons and it is available in GRASS standards path.
+
+    The function is cheching if the dirname is provided and if the
+    directory exists and it is available using the path
+    provided as third parameter, if yes add the path to sys.path to be
+    importable, otherwise it will check on GRASS GIS standard paths.
+
+    """
+    import sys
+    # TODO: why dirname is checked first - the logic should be revised
+    pathlib = None
+    if dirname:
+        pathlib = os.path.join(path, dirname)
+    if pathlib and os.path.exists(pathlib):
+        # we are running the script from the script directory, therefore
+        # we add the path to sys.path to reach the directory (dirname)
+        sys.path.append(os.path.abspath(path))
+    else:
+        # running from GRASS GIS session
+        path = get_lib_path(modulename, dirname)
+        if path is None:
+            pathname = os.path.join(modulename, dirname) if dirname else modulename
+            raise ImportError("Not able to find the path '%s' directory "
+                              "(current dir '%s')." % (pathname, os.getcwd()))
+
+        sys.path.insert(0, path)
diff --git a/lib/python/script/vector.py b/lib/python/script/vector.py
index 02206e5..8928635 100644
--- a/lib/python/script/vector.py
+++ b/lib/python/script/vector.py
@@ -16,14 +16,20 @@ for details.
 .. sectionauthor:: Glynn Clements
 .. sectionauthor:: Martin Landa <landa.martin gmail.com>
 """
-
+from __future__ import absolute_import
 import os
 import types
-import copy
-import __builtin__
 
-from utils import parse_key_val
-from core import *
+try:
+    import __builtin__
+    bytes = str
+except ImportError:
+    # python3
+    import builtins as __builtin__
+    unicode = str
+
+from .utils import parse_key_val
+from .core import *
 from grass.exceptions import CalledModuleError
 
 
@@ -263,7 +269,7 @@ json = None
 orderedDict = None
 
 
-def vector_what(map, coord, distance=0.0, ttype=None, encoding=None):
+def vector_what(map, coord, distance=0.0, ttype=None, encoding=None, skip_attributes=False):
     """Query vector map at given locations
 
     To query one vector map at one location
@@ -319,6 +325,8 @@ def vector_what(map, coord, distance=0.0, ttype=None, encoding=None):
     :param distance: query threshold distance (in map units)
     :param ttype: list of topology types (default of v.what are point, line,
                   area, face)
+    :param encoding: attributes encoding
+    :param skip_attributes: True to skip quering attributes
 
     :return: parsed list
     """
@@ -326,7 +334,7 @@ def vector_what(map, coord, distance=0.0, ttype=None, encoding=None):
         locale = os.environ["LC_ALL"]
         os.environ["LC_ALL"] = "C"
 
-    if type(map) in (types.StringType, types.UnicodeType):
+    if isinstance(map, (bytes, unicode)):
         map_list = [map]
     else:
         map_list = map
@@ -334,14 +342,14 @@ def vector_what(map, coord, distance=0.0, ttype=None, encoding=None):
     layer_list = ['-1'] * len(map_list)
 
     coord_list = list()
-    if type(coord) is types.TupleType:
+    if isinstance(coord, tuple):
         coord_list.append('%f,%f' % (coord[0], coord[1]))
     else:
         for e, n in coord:
             coord_list.append('%f,%f' % (e, n))
 
     cmdParams = dict(quiet      = True,
-                     flags      = 'aj',
+                     flags      = 'j' if skip_attributes else 'aj',
                      map        = ','.join(map_list),
                      layer      = ','.join(layer_list),
                      coordinates = ','.join(coord_list),
@@ -352,7 +360,7 @@ def vector_what(map, coord, distance=0.0, ttype=None, encoding=None):
     try:
         ret = read_command('v.what',
                            **cmdParams).strip()
-    except CalledModuleError, e:
+    except CalledModuleError as e:
         raise ScriptError(e.msg)
 
     if "LC_ALL" in os.environ:
diff --git a/lib/python/temporal/__init__.py b/lib/python/temporal/__init__.py
index efe8003..b88d8f2 100644
--- a/lib/python/temporal/__init__.py
+++ b/lib/python/temporal/__init__.py
@@ -1,33 +1,35 @@
-from core import *
-from base import *
-from spatial_extent import *
-from metadata import *
-from abstract_dataset import *
-from abstract_map_dataset import *
-from abstract_space_time_dataset import *
-from space_time_datasets import *
-from datetime_math import *
-from open_stds import *
-from factory import *
-from gui_support import *
-from list_stds import *
-from register import *
-from sampling import *
-from aggregation import *
-from extract import *
-from stds_export import *
-from stds_import import *
-from mapcalc import *
-from univar_statistics import *
-from c_libraries_interface import *
-from spatio_temporal_relationships import *
-from spatial_topology_dataset_connector import *
-from temporal_extent import *
-from temporal_topology_dataset_connector import *
-from temporal_granularity import *
-from temporal_algebra import *
-from temporal_vector_algebra import *
-from temporal_raster_base_algebra import *
-from temporal_raster_algebra import *
-from temporal_raster3d_algebra import *
-from temporal_operator import *
+from __future__ import (absolute_import)
+
+from .core import *
+from .base import *
+from .spatial_extent import *
+from .metadata import *
+from .abstract_dataset import *
+from .abstract_map_dataset import *
+from .abstract_space_time_dataset import *
+from .space_time_datasets import *
+from .datetime_math import *
+from .open_stds import *
+from .factory import *
+from .gui_support import *
+from .list_stds import *
+from .register import *
+from .sampling import *
+from .aggregation import *
+from .extract import *
+from .stds_export import *
+from .stds_import import *
+from .mapcalc import *
+from .univar_statistics import *
+from .c_libraries_interface import *
+from .spatio_temporal_relationships import *
+from .spatial_topology_dataset_connector import *
+from .temporal_extent import *
+from .temporal_topology_dataset_connector import *
+from .temporal_granularity import *
+from .temporal_algebra import *
+from .temporal_vector_algebra import *
+from .temporal_raster_base_algebra import *
+from .temporal_raster_algebra import *
+from .temporal_raster3d_algebra import *
+from .temporal_operator import *
diff --git a/lib/python/temporal/abstract_dataset.py b/lib/python/temporal/abstract_dataset.py
index 2ca55f3..03211f9 100644
--- a/lib/python/temporal/abstract_dataset.py
+++ b/lib/python/temporal/abstract_dataset.py
@@ -11,11 +11,11 @@ for details.
 :authors: Soeren Gebbert
 """
 from abc import ABCMeta, abstractmethod
-from temporal_extent import *
-from spatial_extent import *
-from metadata import *
-from temporal_topology_dataset_connector import *
-from spatial_topology_dataset_connector import *
+from .temporal_extent import *
+from .spatial_extent import *
+from .metadata import *
+from .temporal_topology_dataset_connector import *
+from .spatial_topology_dataset_connector import *
 
 ###############################################################################
 
diff --git a/lib/python/temporal/abstract_map_dataset.py b/lib/python/temporal/abstract_map_dataset.py
index 78faa19..8c65815 100644
--- a/lib/python/temporal/abstract_map_dataset.py
+++ b/lib/python/temporal/abstract_map_dataset.py
@@ -10,8 +10,9 @@ for details.
 
 :authors: Soeren Gebbert
 """
-from abstract_dataset import *
-from datetime_math import *
+from __future__ import print_function
+from .abstract_dataset import *
+from .datetime_math import *
 
 
 class AbstractMapDataset(AbstractDataset):
@@ -199,16 +200,16 @@ class AbstractMapDataset(AbstractDataset):
         if self.get_type() == "raster":
             #                1         2         3         4         5         6         7
             #      0123456789012345678901234567890123456789012345678901234567890123456789012345678
-            print " +-------------------- Raster Dataset ----------------------------------------+"
+            print(" +-------------------- Raster Dataset ----------------------------------------+")
         if self.get_type() == "raster3d":
             #                1         2         3         4         5         6         7
             #      0123456789012345678901234567890123456789012345678901234567890123456789012345678
-            print " +-------------------- 3D Raster Dataset -------------------------------------+"
+            print(" +-------------------- 3D Raster Dataset -------------------------------------+")
         if self.get_type() == "vector":
             #                1         2         3         4         5         6         7
             #      0123456789012345678901234567890123456789012345678901234567890123456789012345678
-            print " +-------------------- Vector Dataset ----------------------------------------+"
-        print " |                                                                            |"
+            print(" +-------------------- Vector Dataset ----------------------------------------+")
+        print(" |                                                                            |")
         self.base.print_info()
         self.temporal_extent.print_info()
         if self.is_topology_build():
@@ -228,8 +229,8 @@ class AbstractMapDataset(AbstractDataset):
                 else:
                     string += ",%s" % ds
                 count += 1
-        print " | Registered datasets ........ " + string
-        print " +----------------------------------------------------------------------------+"
+        print(" | Registered datasets ........ " + string)
+        print(" +----------------------------------------------------------------------------+")
 
     def print_shell_info(self):
         """Print information about this object in shell style"""
@@ -247,7 +248,7 @@ class AbstractMapDataset(AbstractDataset):
                 else:
                     string += ",%s" % ds
                 count += 1
-            print "registered_datasets=" + string
+            print("registered_datasets=" + string)
 
         if self.is_topology_build():
             self.print_topology_shell_info()
@@ -539,25 +540,25 @@ class AbstractMapDataset(AbstractDataset):
                >>> map      = tgis.RasterDataset(None)
                >>> temp_ext = tgis.RasterRelativeTime(start_time=1, end_time=2, unit="years")
                >>> map.set_temporal_extent(temp_ext)
-               >>> print map.get_temporal_extent_as_tuple()
+               >>> print(map.get_temporal_extent_as_tuple())
                (1, 2)
                >>> map      = tgis.VectorDataset(None)
                >>> temp_ext = tgis.VectorAbsoluteTime(start_time=datetime.datetime(2000, 1, 1),
                ...                                        end_time=datetime.datetime(2001, 1, 1))
                >>> map.set_temporal_extent(temp_ext)
-               >>> print map.get_temporal_extent_as_tuple()
+               >>> print(map.get_temporal_extent_as_tuple())
                (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0))
 
                >>> map1 = tgis.VectorDataset("A at P")
                >>> check = map1.set_absolute_time(datetime.datetime(2000,5,5), datetime.datetime(2005,6,6))
-               >>> print map1.get_temporal_extent_as_tuple()
+               >>> print(map1.get_temporal_extent_as_tuple())
                (datetime.datetime(2000, 5, 5, 0, 0), datetime.datetime(2005, 6, 6, 0, 0))
                >>> map2 = tgis.RasterDataset("B at P")
                >>> check = map2.set_absolute_time(datetime.datetime(1990,1,1), datetime.datetime(1999,8,1))
-               >>> print map2.get_temporal_extent_as_tuple()
+               >>> print(map2.get_temporal_extent_as_tuple())
                (datetime.datetime(1990, 1, 1, 0, 0), datetime.datetime(1999, 8, 1, 0, 0))
                >>> map2.set_temporal_extent(map1.get_temporal_extent())
-               >>> print map2.get_temporal_extent_as_tuple()
+               >>> print(map2.get_temporal_extent_as_tuple())
                (datetime.datetime(2000, 5, 5, 0, 0), datetime.datetime(2005, 6, 6, 0, 0))
 
         """
@@ -710,7 +711,7 @@ class AbstractMapDataset(AbstractDataset):
                >>> map      = tgis.RasterDataset(None)
                >>> spat_ext = tgis.SpatialExtent(north=10, south=-10, east=20, west=-20, top=5, bottom=-5)
                >>> map.set_spatial_extent(spat_ext)
-               >>> print map.get_spatial_extent_as_tuple()
+               >>> print(map.get_spatial_extent_as_tuple())
                (10.0, -10.0, 20.0, -20.0, 5.0, -5.0)
 
         """
@@ -729,7 +730,7 @@ class AbstractMapDataset(AbstractDataset):
                >>> spat_ext = tgis.SpatialExtent(north=10, south=-10, east=20, west=-20, top=5, bottom=-5)
                >>> map.set_spatial_extent(spat_ext)
                >>> map.spatial_buffer(10)
-               >>> print map.get_spatial_extent_as_tuple()
+               >>> print(map.get_spatial_extent_as_tuple())
                (20.0, -20.0, 30.0, -30.0, 15.0, -15.0)
 
         """
@@ -756,7 +757,7 @@ class AbstractMapDataset(AbstractDataset):
                >>> spat_ext = tgis.SpatialExtent(north=10, south=-10, east=20, west=-20, top=5, bottom=-5)
                >>> map.set_spatial_extent(spat_ext)
                >>> map.spatial_buffer_2d(10)
-               >>> print map.get_spatial_extent_as_tuple()
+               >>> print(map.get_spatial_extent_as_tuple())
                (20.0, -20.0, 30.0, -30.0, 5.0, -5.0)
 
         """
diff --git a/lib/python/temporal/abstract_space_time_dataset.py b/lib/python/temporal/abstract_space_time_dataset.py
index 602afc9..c62b35c 100644
--- a/lib/python/temporal/abstract_space_time_dataset.py
+++ b/lib/python/temporal/abstract_space_time_dataset.py
@@ -10,11 +10,12 @@ for details.
 
 :authors: Soeren Gebbert
 """
+from __future__ import print_function
 import sys
 import uuid
-from abstract_dataset import *
-from temporal_granularity import *
-from spatio_temporal_relationships import *
+from .abstract_dataset import *
+from .temporal_granularity import *
+from .spatio_temporal_relationships import *
 
 ###############################################################################
 
@@ -98,21 +99,21 @@ class AbstractSpaceTimeDataset(AbstractDataset):
         if self.get_type() == "strds":
             #                1         2         3         4         5         6         7
             #      0123456789012345678901234567890123456789012345678901234567890123456789012345678
-            print " +-------------------- Space Time Raster Dataset -----------------------------+"
+            print(" +-------------------- Space Time Raster Dataset -----------------------------+")
         if self.get_type() == "str3ds":
             #                1         2         3         4         5         6         7
             #      0123456789012345678901234567890123456789012345678901234567890123456789012345678
-            print " +-------------------- Space Time 3D Raster Dataset --------------------------+"
+            print(" +-------------------- Space Time 3D Raster Dataset --------------------------+")
         if self.get_type() == "stvds":
             #                1         2         3         4         5         6         7
             #      0123456789012345678901234567890123456789012345678901234567890123456789012345678
-            print " +-------------------- Space Time Vector Dataset -----------------------------+"
-        print " |                                                                            |"
+            print(" +-------------------- Space Time Vector Dataset -----------------------------+")
+        print(" |                                                                            |")
         self.base.print_info()
         self.temporal_extent.print_info()
         self.spatial_extent.print_info()
         self.metadata.print_info()
-        print " +----------------------------------------------------------------------------+"
+        print(" +----------------------------------------------------------------------------+")
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
@@ -1137,7 +1138,7 @@ class AbstractSpaceTimeDataset(AbstractDataset):
                 ...     maps.append(map)
                 >>> grans = tgis.AbstractSpaceTimeDataset.resample_maplist_by_granularity(maps,0,8,1)
                 >>> for map_list in grans:
-                ...    print map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple()
+                ...    print(map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple())
                 None (0, 1)
                 None (1, 2)
                 map0 at PERMANENT (2, 3)
@@ -1156,7 +1157,7 @@ class AbstractSpaceTimeDataset(AbstractDataset):
                 >>> maps.append(map2)
                 >>> grans = tgis.AbstractSpaceTimeDataset.resample_maplist_by_granularity(maps,0,16,2)
                 >>> for map_list in grans:
-                ...    print map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple()
+                ...    print(map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple())
                 None (0, 2)
                 map1 at PERMANENT (2, 4)
                 map1 at PERMANENT (4, 6)
@@ -1175,7 +1176,7 @@ class AbstractSpaceTimeDataset(AbstractDataset):
                 >>> maps.append(map2)
                 >>> grans = tgis.AbstractSpaceTimeDataset.resample_maplist_by_granularity(maps,0,16,2)
                 >>> for map_list in grans:
-                ...    print map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple()
+                ...    print(map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple())
                 None (0, 2)
                 map1 at PERMANENT (2, 4)
                 None (4, 6)
@@ -1194,7 +1195,7 @@ class AbstractSpaceTimeDataset(AbstractDataset):
                 >>> maps.append(map2)
                 >>> grans = tgis.AbstractSpaceTimeDataset.resample_maplist_by_granularity(maps,datetime(2000,1,1),datetime(2001,4,1),"1 month")
                 >>> for map_list in grans:
-                ...    print map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple()
+                ...    print(map_list[0].get_id(), map_list[0].get_temporal_extent_as_tuple())
                 None (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2000, 2, 1, 0, 0))
                 None (datetime.datetime(2000, 2, 1, 0, 0), datetime.datetime(2000, 3, 1, 0, 0))
                 None (datetime.datetime(2000, 3, 1, 0, 0), datetime.datetime(2000, 4, 1, 0, 0))
diff --git a/lib/python/temporal/aggregation.py b/lib/python/temporal/aggregation.py
index 2389014..d96b6e3 100644
--- a/lib/python/temporal/aggregation.py
+++ b/lib/python/temporal/aggregation.py
@@ -17,7 +17,10 @@ for details.
 :author: Soeren Gebbert
 """
 
-from space_time_datasets import *
+from .space_time_datasets import *
+from .datetime_math import create_suffix_from_datetime
+from .datetime_math import create_time_suffix
+from .datetime_math import create_numeric_suffic
 import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
@@ -182,7 +185,8 @@ def aggregate_raster_maps(inputs, base, start, end, count, method,
 
 def aggregate_by_topology(granularity_list, granularity, map_list, topo_list,
                           basename, time_suffix, offset=0, method="average",
-                          nprocs=1, spatial=None, dbif=None, overwrite=False):
+                          nprocs=1, spatial=None, dbif=None, overwrite=False,
+                          file_limit=1000):
     """Aggregate a list of raster input maps with r.series
 
        :param granularity_list: A list of AbstractMapDataset objects.
@@ -207,6 +211,8 @@ def aggregate_by_topology(granularity_list, granularity, map_list, topo_list,
                        east, south, north, bottom, top
        :param dbif: The database interface to be used
        :param overwrite: Overwrite existing raster maps
+       :param file_limit: The maximum number of raster map layers that
+                          should be opened at once by r.series
        :return: A list of RasterDataset objects that contain the new map names
                 and the temporal extent for map registration
     """
@@ -273,13 +279,16 @@ def aggregate_by_topology(granularity_list, granularity, map_list, topo_list,
                            "start": str(granule.temporal_extent.get_start_time()),
                            "end": str(granule.temporal_extent.get_end_time())}))
 
-            if granule.is_time_absolute() is True and time_suffix is True:
+            if granule.is_time_absolute() is True and time_suffix == 'gran':
                 suffix = create_suffix_from_datetime(granule.temporal_extent.get_start_time(),
                                                      granularity)
+                output_name = "{ba}_{su}".format(ba=basename, su=suffix)
+            elif granule.is_time_absolute() is True and time_suffix == 'time':
+                suffix = create_time_suffix(granule)
+                output_name = "{ba}_{su}".format(ba=basename, su=suffix)
             else:
-                suffix = gscript.get_num_suffix(count + int(offset),
-                                                len(granularity_list) + int(offset))
-            output_name = "%s_%s" % (basename, suffix)
+                output_name = create_numeric_suffic(basename, count + int(offset),
+                                                    time_suffix)
 
             map_layer = RasterDataset("%s@%s" % (output_name,
                                                  get_current_mapset()))
@@ -303,7 +312,12 @@ def aggregate_by_topology(granularity_list, granularity, map_list, topo_list,
 
                 mod = copy.deepcopy(r_series)
                 mod(file=filename, output=output_name)
-                if len(aggregation_list) > 1000:
+                if len(aggregation_list) > int(file_limit):
+                    msgr.warning(_("The limit of open fiels (%i) was "\
+                                   "reached (%i). The module r.series will "\
+                                   "be run with flag z, to avoid open "\
+                                   "files limit exceeding."%(int(file_limit),
+                                                             len(aggregation_list))))
                     mod(flags="z")
                 process_queue.put(mod)
             else:
@@ -311,6 +325,8 @@ def aggregate_by_topology(granularity_list, granularity, map_list, topo_list,
                 mod(raster=[aggregation_list[0],  output_name])
                 process_queue.put(mod)
 
+    process_queue.wait()
+
     if connected:
         dbif.close()
 
diff --git a/lib/python/temporal/base.py b/lib/python/temporal/base.py
index 4d5851b..0e6f5e1 100644
--- a/lib/python/temporal/base.py
+++ b/lib/python/temporal/base.py
@@ -24,9 +24,9 @@ for details.
 
 :author: Soeren Gebbert
 """
-
+from __future__ import print_function
 from datetime import datetime
-from core import *
+from .core import *
 
 ###############################################################################
 
@@ -186,7 +186,7 @@ class DictSQLSerializer(object):
     def print_self(self):
         """Print the content of the internal dictionary to stdout
         """
-        print self.D
+        print(self.D)
 
 ###############################################################################
 
@@ -276,7 +276,7 @@ class SQLDatabaseInterface(DictSQLSerializer):
                         if None a temporary connection will be established
         """
         sql = self.get_delete_statement()
-        #print sql
+        #print(sql)
 
         if dbif:
             dbif.execute(sql,   mapset=self.mapset)
@@ -350,8 +350,8 @@ class SQLDatabaseInterface(DictSQLSerializer):
                         if None a temporary connection will be established
         """
         sql, args = self.get_select_statement()
-        #print sql
-        #print args
+        #print(sql)
+        #print(args)
 
         if dbif:
             if len(args) == 0:
@@ -408,8 +408,8 @@ class SQLDatabaseInterface(DictSQLSerializer):
                         if None a temporary connection will be established
         """
         sql, args = self.get_insert_statement()
-        #print sql
-        #print args
+        #print(sql)
+        #print(args)
 
         if dbif:
             dbif.execute(sql, args, mapset=self.mapset)
@@ -462,8 +462,8 @@ class SQLDatabaseInterface(DictSQLSerializer):
             self.msgr.fatal(_("Missing identifer"))
 
         sql, args = self.get_update_statement(ident)
-        #print sql
-        #print args
+        #print(sql)
+        #print(args)
 
         if dbif:
             dbif.execute(sql, args, mapset=self.mapset)
@@ -513,8 +513,8 @@ class SQLDatabaseInterface(DictSQLSerializer):
             self.msgr.fatal(_("Missing identifer"))
 
         sql, args = self.get_update_all_statement(ident)
-        #print sql
-        #print args
+        #print(sql)
+        #print(args)
 
         if dbif:
             dbif.execute(sql, args, mapset=self.mapset)
@@ -766,26 +766,26 @@ class DatasetBase(SQLDatabaseInterface):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " +-------------------- Basic information -------------------------------------+"
-        print " | Id: ........................ " + str(self.get_id())
-        print " | Name: ...................... " + str(self.get_name())
-        print " | Mapset: .................... " + str(self.get_mapset())
+        print( " +-------------------- Basic information -------------------------------------+")
+        print( " | Id: ........................ " + str(self.get_id()))
+        print(" | Name: ...................... " + str(self.get_name()))
+        print(" | Mapset: .................... " + str(self.get_mapset()))
         if self.get_layer():
-            print " | Layer:...................... " + str(self.get_layer())
-        print " | Creator: ................... " + str(self.get_creator())
-        print " | Temporal type: ............. " + str(self.get_ttype())
-        print " | Creation time: ............. " + str(self.get_ctime())
+            print(" | Layer:...................... " + str(self.get_layer()))
+        print(" | Creator: ................... " + str(self.get_creator()))
+        print(" | Temporal type: ............. " + str(self.get_ttype()))
+        print(" | Creation time: ............. " + str(self.get_ctime()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "id=" + str(self.get_id())
-        print "name=" + str(self.get_name())
-        print "mapset=" + str(self.get_mapset())
+        print("id=" + str(self.get_id()))
+        print("name=" + str(self.get_name()))
+        print("mapset=" + str(self.get_mapset()))
         if self.get_layer():
-            print "layer=" + str(self.get_layer())
-        print "creator=" + str(self.get_creator())
-        print "temporal_type=" + str(self.get_ttype())
-        print "creation_time=" + str(self.get_ctime())
+            print("layer=" + str(self.get_layer()))
+        print("creator=" + str(self.get_creator()))
+        print("temporal_type=" + str(self.get_ttype()))
+        print("creation_time=" + str(self.get_ctime()))
 
 ###############################################################################
 
@@ -901,7 +901,7 @@ class STDSBase(DatasetBase):
 
            :return: None if not found
         """
-        if self.D.has_key("modification_time"):
+        if "modification_time" in self.D:
             return self.D["modification_time"]
         else:
             return None
@@ -912,15 +912,15 @@ class STDSBase(DatasetBase):
         """Print information about this class in human readable style"""
         DatasetBase.print_info(self)
         #      0123456789012345678901234567890
-        print " | Modification time:.......... " + str(self.get_mtime())
-        print " | Semantic type:.............. " + str(
-            self.get_semantic_type())
+        print(" | Modification time:.......... " + str(self.get_mtime()))
+        print(" | Semantic type:.............. " + str(
+            self.get_semantic_type()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         DatasetBase.print_shell_info(self)
-        print "modification_time=" + str(self.get_mtime())
-        print "semantic_type=" + str(self.get_semantic_type())
+        print("modification_time=" + str(self.get_mtime()))
+        print("semantic_type=" + str(self.get_semantic_type()))
 
 ###############################################################################
 
diff --git a/lib/python/temporal/c_libraries_interface.py b/lib/python/temporal/c_libraries_interface.py
index 233e732..76cfcce 100644
--- a/lib/python/temporal/c_libraries_interface.py
+++ b/lib/python/temporal/c_libraries_interface.py
@@ -11,17 +11,23 @@ for details.
 :authors: Soeren Gebbert
 """
 
+from grass.exceptions import FatalError
+import time
+import threading
 import sys
 from multiprocessing import Process, Lock, Pipe
 import logging
 from ctypes import *
-from core import *
+from .core import *
 import grass.lib.gis as libgis
 import grass.lib.raster as libraster
 import grass.lib.vector as libvector
 import grass.lib.date as libdate
 import grass.lib.raster3d as libraster3d
 import grass.lib.temporal as libtgis
+from grass.pygrass.rpc.base import RPCServerBase
+from grass.pygrass.raster import RasterRow
+from grass.pygrass.vector import VectorTopo
 
 ###############################################################################
 
@@ -42,7 +48,8 @@ class RPCDefs(object):
     G_MAPSET = 11
     G_LOCATION = 12
     G_GISDBASE = 13
-    G_FATAL_ERROR = 14
+    READ_MAP_FULL_INFO = 14
+    G_FATAL_ERROR = 49
 
     TYPE_RASTER = 0
     TYPE_RASTER3D = 1
@@ -51,10 +58,127 @@ class RPCDefs(object):
 ###############################################################################
 
 
+def _read_map_full_info(lock, conn, data):
+    """Read full map specific metadata from the spatial database using
+       PyGRASS functions.
+
+       :param lock: A multiprocessing.Lock instance
+       :param conn: A multiprocessing.Pipe instance used to send True or False
+       :param data: The list of data entries [function_id, maptype, name, mapset]
+    """
+    info = None
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        if maptype == RPCDefs.TYPE_RASTER:
+            info = _read_raster_full_info(name, mapset)
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            info = _read_vector_full_info(name, mapset)
+    except:
+        raise
+    finally:
+        conn.send(info)
+
+###############################################################################
+
+
+def _read_raster_full_info(name, mapset):
+    """Read raster info, history and cats using PyGRASS RasterRow
+       and return a dictionary. Colors should be supported in the
+       future.
+    """
+
+    info = {}
+    r = RasterRow(name=name, mapset=mapset)
+    if r.exist() is True:
+        r.open("r")
+
+        for item in r.info:
+            info[item[0]] = item[1]
+
+        for item in r.hist:
+            info[item[0]] = item[1]
+
+        info["full_name"] = r.name_mapset()
+        info["mtype"] = r.mtype
+        if r.cats:
+            info["cats_title"] = r.cats_title
+            info["cats"] = list(r.cats)
+        r.close()
+
+        ts = libgis.TimeStamp()
+        check = libgis.G_read_raster_timestamp(name, mapset, byref(ts))
+
+        if check:
+            dates = _convert_timestamp_from_grass(ts)
+            info["start_time"] = dates[0]
+            info["end_time"] = dates[1]
+            if len(dates) > 2:
+                info["time_unit"] = dates[2]
+
+    return(info)
+
+###############################################################################
+
+
+def _read_vector_full_info(name, mapset, layer = None):
+    """Read vector info using PyGRASS VectorTopo
+       and return a dictionary. C
+    """
+
+    info = {}
+
+    v = VectorTopo(name=name, mapset=mapset)
+    if v.exist() is True:
+        v.open("r")
+        # Bounding box
+        for item in v.bbox().items():
+            info[item[0]] = item[1]
+
+        info["name"] = v.name
+        info["mapset"] = v.mapset
+        info["comment"] = v.comment
+        info["full_name"] = v.full_name
+        info["is_3d"] = v.is_3D()
+        info["map_date"] = v.map_date
+        info["maptype"] = v.maptype
+        info["organization"] = v.organization
+        info["person"] = v.person
+        info["proj"] = v.proj
+        info["proj_name"] = v.proj_name
+        info["title"] = v.title
+        info["thresh"] = v.thresh
+        info["zone"] = v.zone
+        vtypes = ['areas', 'dblinks', 'faces', 'holes', 'islands',
+                  'kernels', 'lines', 'nodes', 'points', 'updated_lines',
+                  'updated_nodes', 'volumes']
+        for vtype in vtypes:
+            info[vtype] = v.number_of(vtype)
+
+        info.update(v.num_primitives())
+
+        if v.table is not None:
+            info["columns"] = v.table.columns
+
+        ts = libgis.TimeStamp()
+        check = libgis.G_read_vector_timestamp(name, layer, mapset, byref(ts))
+
+        if check:
+            dates = _convert_timestamp_from_grass(ts)
+            info["start_time"] = dates[0]
+            info["end_time"] = dates[1]
+            if len(dates) > 2:
+                info["time_unit"] = dates[2]
+
+    return(info)
+
 def _fatal_error(lock, conn, data):
     """Calls G_fatal_error()"""
     libgis.G_fatal_error("Fatal Error in C library server")
 
+###############################################################################
+
 
 def _get_mapset(lock, conn, data):
     """Return the current mapset
@@ -68,6 +192,8 @@ def _get_mapset(lock, conn, data):
     mapset = libgis.G_mapset()
     conn.send(mapset)
 
+###############################################################################
+
 
 def _get_location(lock, conn, data):
     """Return the current location
@@ -81,6 +207,8 @@ def _get_location(lock, conn, data):
     location = libgis.G_location()
     conn.send(location)
 
+###############################################################################
+
 
 def _get_gisdbase(lock, conn, data):
     """Return the current gisdatabase
@@ -94,6 +222,8 @@ def _get_gisdbase(lock, conn, data):
     gisdbase = libgis.G_gisdbase()
     conn.send(gisdbase)
 
+###############################################################################
+
 
 def _get_driver_name(lock, conn, data):
     """Return the temporal database driver of a specific mapset
@@ -123,18 +253,23 @@ def _get_database_name(lock, conn, data):
 
        :returns: Name of the database or None if no temporal database present
     """
-    mapset = data[1]
-    if not mapset:
-        mapset = libgis.G_mapset()
-    dbstring = libtgis.tgis_get_mapset_database_name(mapset)
-
-    if dbstring:
-        # We substitute GRASS variables if they are located in the database string
-        # This behavior is in conjunction with db.connect
-        dbstring = dbstring.replace("$GISDBASE", libgis.G_gisdbase())
-        dbstring = dbstring.replace("$LOCATION_NAME", libgis.G_location())
-        dbstring = dbstring.replace("$MAPSET", mapset)
-    conn.send(dbstring)
+    dbstring = None
+    try:
+        mapset = data[1]
+        if not mapset:
+            mapset = libgis.G_mapset()
+        dbstring = libtgis.tgis_get_mapset_database_name(mapset)
+
+        if dbstring:
+            # We substitute GRASS variables if they are located in the database string
+            # This behavior is in conjunction with db.connect
+            dbstring = dbstring.replace("$GISDBASE", libgis.G_gisdbase())
+            dbstring = dbstring.replace("$LOCATION_NAME", libgis.G_location())
+            dbstring = dbstring.replace("$MAPSET", mapset)
+    except:
+        raise
+    finally:
+        conn.send(dbstring)
 
 ###############################################################################
 
@@ -158,15 +293,15 @@ def _available_mapsets(lock, conn, data):
         while mapsets[count]:
             char_list = ""
             mapset = mapsets[count]
-            
+
             permission = libgis.G_mapset_permissions(mapset)
             in_search_path = libgis.G_is_mapset_in_search_path(mapset)
-            
+
             c = 0
             while mapset[c] != "\x00":
                 char_list += mapset[c]
                 c += 1
-            
+
             if permission >= 0 and in_search_path == 1:
                 mapset_list.append(char_list)
 
@@ -189,6 +324,8 @@ def _available_mapsets(lock, conn, data):
     finally:
         conn.send(mapset_list)
 
+###############################################################################
+
 
 def _has_timestamp(lock, conn, data):
     """Check if the file based GRASS timestamp is present and send
@@ -200,21 +337,25 @@ def _has_timestamp(lock, conn, data):
                     mapset, layer]
 
     """
-    maptype = data[1]
-    name = data[2]
-    mapset = data[3]
-    layer = data[4]
     check = False
-    if maptype == RPCDefs.TYPE_RASTER:
-        if libgis.G_has_raster_timestamp(name, mapset) == 1:
-            check = True
-    elif maptype == RPCDefs.TYPE_VECTOR:
-        if libgis.G_has_vector_timestamp(name, layer, mapset) == 1:
-            check = True
-    elif maptype == RPCDefs.TYPE_RASTER3D:
-        if libgis.G_has_raster3d_timestamp(name, mapset) == 1:
-            check = True
-    conn.send(check)
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        layer = data[4]
+        if maptype == RPCDefs.TYPE_RASTER:
+            if libgis.G_has_raster_timestamp(name, mapset) == 1:
+                check = True
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            if libgis.G_has_vector_timestamp(name, layer, mapset) == 1:
+                check = True
+        elif maptype == RPCDefs.TYPE_RASTER3D:
+            if libgis.G_has_raster3d_timestamp(name, mapset) == 1:
+                check = True
+    except:
+        raise
+    finally:
+        conn.send(check)
 
 ###############################################################################
 
@@ -244,21 +385,26 @@ def _read_timestamp(lock, conn, data):
                     mapset, layer]
 
     """
-    maptype = data[1]
-    name = data[2]
-    mapset = data[3]
-    layer = data[4]
     check = False
-    ts = libgis.TimeStamp()
-    if maptype == RPCDefs.TYPE_RASTER:
-        check = libgis.G_read_raster_timestamp(name, mapset, byref(ts))
-    elif maptype == RPCDefs.TYPE_VECTOR:
-        check = libgis.G_read_vector_timestamp(name, layer, mapset, byref(ts))
-    elif maptype == RPCDefs.TYPE_RASTER3D:
-        check = libgis.G_read_raster3d_timestamp(name, mapset, byref(ts))
-
-    dates = _convert_timestamp_from_grass(ts)
-    conn.send((check, dates))
+    dates = None
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        layer = data[4]
+        ts = libgis.TimeStamp()
+        if maptype == RPCDefs.TYPE_RASTER:
+            check = libgis.G_read_raster_timestamp(name, mapset, byref(ts))
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            check = libgis.G_read_vector_timestamp(name, layer, mapset, byref(ts))
+        elif maptype == RPCDefs.TYPE_RASTER3D:
+            check = libgis.G_read_raster3d_timestamp(name, mapset, byref(ts))
+
+        dates = _convert_timestamp_from_grass(ts)
+    except:
+        raise
+    finally:
+        conn.send((check, dates))
 
 ###############################################################################
 
@@ -278,27 +424,30 @@ def _write_timestamp(lock, conn, data):
        :param data: The list of data entries [function_id, maptype, name,
                     mapset, layer, timestring]
     """
-    maptype = data[1]
-    name = data[2]
-    mapset = data[3]
-    layer = data[4]
-    timestring = data[5]
     check = -3
-    ts = libgis.TimeStamp()
-    check = libgis.G_scan_timestamp(byref(ts), timestring)
-
-    if check != 1:
-        logging.error("Unable to convert the timestamp: " + timestring)
-        return -2
-
-    if maptype == RPCDefs.TYPE_RASTER:
-        check = libgis.G_write_raster_timestamp(name, byref(ts))
-    elif maptype == RPCDefs.TYPE_VECTOR:
-        check = libgis.G_write_vector_timestamp(name, layer, byref(ts))
-    elif maptype == RPCDefs.TYPE_RASTER3D:
-        check = libgis.G_write_raster3d_timestamp(name, byref(ts))
-
-    conn.send(check)
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        layer = data[4]
+        timestring = data[5]
+        ts = libgis.TimeStamp()
+        check = libgis.G_scan_timestamp(byref(ts), timestring)
+
+        if check != 1:
+            logging.error("Unable to convert the timestamp: " + timestring)
+            return -2
+
+        if maptype == RPCDefs.TYPE_RASTER:
+            check = libgis.G_write_raster_timestamp(name, byref(ts))
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            check = libgis.G_write_vector_timestamp(name, layer, byref(ts))
+        elif maptype == RPCDefs.TYPE_RASTER3D:
+            check = libgis.G_write_raster3d_timestamp(name, byref(ts))
+    except:
+        raise
+    finally:
+        conn.send(check)
 
 ###############################################################################
 
@@ -319,19 +468,22 @@ def _remove_timestamp(lock, conn, data):
                     mapset, layer]
 
     """
-    maptype = data[1]
-    name = data[2]
-    mapset = data[3]
-    layer = data[4]
     check = False
-    if maptype == RPCDefs.TYPE_RASTER:
-        check = libgis.G_remove_raster_timestamp(name, mapset)
-    elif maptype == RPCDefs.TYPE_VECTOR:
-        check = libgis.G_remove_vector_timestamp(name, layer, mapset)
-    elif maptype == RPCDefs.TYPE_RASTER3D:
-        check = libgis.G_remove_raster3d_timestamp(name, mapset)
-
-    conn.send(check)
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        layer = data[4]
+        if maptype == RPCDefs.TYPE_RASTER:
+            check = libgis.G_remove_raster_timestamp(name, mapset)
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            check = libgis.G_remove_vector_timestamp(name, layer, mapset)
+        elif maptype == RPCDefs.TYPE_RASTER3D:
+            check = libgis.G_remove_raster3d_timestamp(name, mapset)
+    except:
+        raise
+    finally:
+        conn.send(check)
 
 ###############################################################################
 
@@ -347,21 +499,24 @@ def _map_exists(lock, conn, data):
        :param data: The list of data entries [function_id, maptype, name, mapset]
 
     """
-    maptype = data[1]
-    name = data[2]
-    mapset = data[3]
     check = False
-    if maptype == RPCDefs.TYPE_RASTER:
-        mapset = libgis.G_find_raster(name, mapset)
-    elif maptype == RPCDefs.TYPE_VECTOR:
-        mapset = libgis.G_find_vector(name, mapset)
-    elif maptype == RPCDefs.TYPE_RASTER3D:
-        mapset = libgis.G_find_raster3d(name, mapset)
-
-    if mapset:
-        check = True
-
-    conn.send(check)
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        if maptype == RPCDefs.TYPE_RASTER:
+            mapset = libgis.G_find_raster(name, mapset)
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            mapset = libgis.G_find_vector(name, mapset)
+        elif maptype == RPCDefs.TYPE_RASTER3D:
+            mapset = libgis.G_find_raster3d(name, mapset)
+
+        if mapset:
+            check = True
+    except:
+        raise
+    finally:
+        conn.send(check)
 
 ###############################################################################
 
@@ -374,17 +529,21 @@ def _read_map_info(lock, conn, data):
        :param conn: A multiprocessing.Pipe instance used to send True or False
        :param data: The list of data entries [function_id, maptype, name, mapset]
     """
-    maptype = data[1]
-    name = data[2]
-    mapset = data[3]
-    if maptype == RPCDefs.TYPE_RASTER:
-        kvp = _read_raster_info(name, mapset)
-    elif maptype == RPCDefs.TYPE_VECTOR:
-        kvp = _read_vector_info(name, mapset)
-    elif maptype == RPCDefs.TYPE_RASTER3D:
-        kvp = _read_raster3d_info(name, mapset)
-
-    conn.send(kvp)
+    kvp = None
+    try:
+        maptype = data[1]
+        name = data[2]
+        mapset = data[3]
+        if maptype == RPCDefs.TYPE_RASTER:
+            kvp = _read_raster_info(name, mapset)
+        elif maptype == RPCDefs.TYPE_VECTOR:
+            kvp = _read_vector_info(name, mapset)
+        elif maptype == RPCDefs.TYPE_RASTER3D:
+            kvp = _read_raster3d_info(name, mapset)
+    except:
+        raise
+    finally:
+        conn.send(kvp)
 
 ###############################################################################
 
@@ -734,7 +893,6 @@ def _convert_timestamp_from_grass(ts):
 
 ###############################################################################
 
-
 def _stop(lock, conn, data):
     libgis.G_debug(1, "Stop C-interface server")
     conn.close()
@@ -742,9 +900,6 @@ def _stop(lock, conn, data):
     sys.exit()
 
 ###############################################################################
-# Global server connection
-server_connection = None
-server_lock = None
 
 
 def c_library_server(lock, conn):
@@ -754,8 +909,27 @@ def c_library_server(lock, conn):
        :param lock: A multiprocessing.Lock
        :param conn: A multiprocessing.Pipe
     """
+
+    def error_handler(data):
+        """This function will be called in case of a fatal error in libgis"""
+        #sys.stderr.write("Error handler was called\n")
+        # We send an exeption that will be handled in
+        # the parent process, then close the pipe
+        # and release any possible lock
+        conn.send(FatalError())
+        conn.close()
+        lock.release()
+
+    CALLBACK = CFUNCTYPE(c_void_p, c_void_p)
+    CALLBACK.restype = c_void_p
+    CALLBACK.argtypes = c_void_p
+
+    cerror_handler = CALLBACK(error_handler)
+
+    libgis.G_add_error_handler(cerror_handler, None)
+
     # Crerate the function array
-    functions = [0]*15
+    functions = [0]*50
     functions[RPCDefs.STOP] = _stop
     functions[RPCDefs.HAS_TIMESTAMP] = _has_timestamp
     functions[RPCDefs.WRITE_TIMESTAMP] = _write_timestamp
@@ -769,6 +943,7 @@ def c_library_server(lock, conn):
     functions[RPCDefs.G_MAPSET] = _get_mapset
     functions[RPCDefs.G_LOCATION] = _get_location
     functions[RPCDefs.G_GISDBASE] = _get_gisdbase
+    functions[RPCDefs.READ_MAP_FULL_INFO] = _read_map_full_info
     functions[RPCDefs.G_FATAL_ERROR] = _fatal_error
 
     libgis.G_gisinit("c_library_server")
@@ -776,14 +951,13 @@ def c_library_server(lock, conn):
 
     while True:
         # Avoid busy waiting
-        conn.poll(4)
+        conn.poll(None)
         data = conn.recv()
         lock.acquire()
         functions[data[0]](lock, conn, data)
         lock.release()
 
-
-class CLibrariesInterface(object):
+class CLibrariesInterface(RPCServerBase):
     """Fast and exit-safe interface to GRASS C-libraries functions
 
        This class implements a fast and exit-safe interface to the GRASS
@@ -834,6 +1008,16 @@ class CLibrariesInterface(object):
            True
            >>> ciface.read_raster_info("test", tgis.get_current_mapset())
            {'rows': 12, 'north': 80.0, 'min': 1, 'datatype': 'CELL', 'max': 1, 'ewres': 10.0, 'cols': 8, 'west': 0.0, 'east': 120.0, 'nsres': 10.0, 'south': 0.0}
+
+           >>> info = ciface.read_raster_full_info("test", tgis.get_current_mapset())
+           >>> info           # doctest: +ELLIPSIS +NORMALIZE_WHITESPACE
+           {u'tbres': 1.0, ... 'keyword': 'generated by r.mapcalc',
+            u'bottom': 0.0, 'end_time': None, 'title': 'test', u'south': 0.0}
+
+           >>> info["start_time"]
+           datetime.datetime(1995, 3, 12, 10, 34, 40)
+           >>> info["end_time"]
+
            >>> check = ciface.has_raster_timestamp("test", tgis.get_current_mapset())
            >>> print check
            True
@@ -881,8 +1065,26 @@ class CLibrariesInterface(object):
            >>> print check
            True
            >>> kvp = ciface.read_vector_info("test", tgis.get_current_mapset())
+           >>> kvp['points']
+           10
+
+           >>> kvp = ciface.read_vector_full_info("test", tgis.get_current_mapset())
            >>> print kvp['points']
            10
+           >>> kvp['point']
+           10
+           >>> kvp['area']
+           0
+           >>> kvp['lines']
+           10
+           >>> kvp['line']
+           0
+           >>> 'columns' in kvp
+           False
+           >>> kvp["start_time"]
+           datetime.datetime(1995, 3, 12, 10, 34, 40)
+           >>> kvp["end_time"]
+
            >>> check = ciface.has_vector_timestamp("test", tgis.get_current_mapset(), None)
            >>> print check
            True
@@ -909,15 +1111,33 @@ class CLibrariesInterface(object):
            >>> location = ciface.get_location()
            >>> gisdbase = ciface.get_gisdbase()
 
+           >>> ciface.fatal_error() # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
+           Traceback (most recent call last):
+               raise FatalError("Exception raised: " + str(e) + " Message: " + message)
+           FatalError: Exception raised:  ...
+
+           >>> ciface.fatal_error() # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
+           Traceback (most recent call last):
+               raise FatalError("Exception raised: " + str(e) + " Message: " + message)
+           FatalError: Exception raised:  ...
+
+           >>> ciface.fatal_error() # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
+           Traceback (most recent call last):
+               raise FatalError("Exception raised: " + str(e) + " Message: " + message)
+           FatalError: Exception raised:  ...
+
+           >>> ciface.fatal_error() # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
+           Traceback (most recent call last):
+               raise FatalError("Exception raised: " + str(e) + " Message: " + message)
+           FatalError: Exception raised:  ...
+
+           >>> ciface.stop()
+
            >>> gscript.del_temp_region()
 
     """
     def __init__(self):
-        self.client_conn = None
-        self.server_conn = None
-        self.queue = None
-        self.server = None
-        self.start_server()
+        RPCServerBase.__init__(self)
 
     def start_server(self):
         self.client_conn, self.server_conn = Pipe(True)
@@ -927,16 +1147,6 @@ class CLibrariesInterface(object):
         self.server.daemon = True
         self.server.start()
 
-    def _check_restart_server(self):
-        """Restart the server if it was terminated
-        """
-        if self.server.is_alive() is True:
-            return
-        self.client_conn.close()
-        self.server_conn.close()
-        self.start_server()
-        logging.warning("Needed to restart the libgis server")
-
     def raster_map_exists(self, name, mapset):
         """Check if a raster map exists in the spatial database
 
@@ -944,10 +1154,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: True if exists, False if not
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.MAP_EXISTS, RPCDefs.TYPE_RASTER,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("raster_map_exists")
 
     def read_raster_info(self, name, mapset):
         """Read the raster map info from the file system and store the content
@@ -958,10 +1168,26 @@ class CLibrariesInterface(object):
            :returns: The key value pairs of the map specific metadata,
                      or None in case of an error
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.READ_MAP_INFO, RPCDefs.TYPE_RASTER,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("read_raster_info")
+
+    def read_raster_full_info(self, name, mapset):
+        """Read raster info, history and cats using PyGRASS RasterRow
+           and return a dictionary. Colors should be supported in the
+           future.
+
+           :param name: The name of the map
+           :param mapset: The mapset of the map
+           :returns: The key value pairs of the map specific metadata,
+                     or None in case of an error
+        """
+        self.check_server()
+        self.client_conn.send([RPCDefs.READ_MAP_FULL_INFO,
+                               RPCDefs.TYPE_RASTER,
+                               name, mapset, None])
+        return self.safe_receive("read_raster_full_info")
 
     def has_raster_timestamp(self, name, mapset):
         """Check if a file based raster timetamp exists
@@ -970,10 +1196,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: True if exists, False if not
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.HAS_TIMESTAMP, RPCDefs.TYPE_RASTER,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("has_raster_timestamp")
 
     def remove_raster_timestamp(self, name, mapset):
         """Remove a file based raster timetamp
@@ -985,10 +1211,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: The return value of G_remove_raster_timestamp
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.REMOVE_TIMESTAMP, RPCDefs.TYPE_RASTER,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("remove_raster_timestamp")
 
     def read_raster_timestamp(self, name, mapset):
         """Read a file based raster timetamp
@@ -1007,10 +1233,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: The return value of G_read_raster_timestamp
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.READ_TIMESTAMP, RPCDefs.TYPE_RASTER,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("read_raster_timestamp")
 
     def write_raster_timestamp(self, name, mapset, timestring):
         """Write a file based raster timetamp
@@ -1026,10 +1252,10 @@ class CLibrariesInterface(object):
            :param timestring: A GRASS datetime C-library compatible string
            :returns: The return value of G_write_raster_timestamp
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.WRITE_TIMESTAMP, RPCDefs.TYPE_RASTER,
                                name, mapset, None, timestring])
-        return self.client_conn.recv()
+        return self.safe_receive("write_raster_timestamp")
 
     def raster3d_map_exists(self, name, mapset):
         """Check if a 3D raster map exists in the spatial database
@@ -1038,10 +1264,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: True if exists, False if not
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.MAP_EXISTS, RPCDefs.TYPE_RASTER3D,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("raster3d_map_exists")
 
     def read_raster3d_info(self, name, mapset):
         """Read the 3D raster map info from the file system and store the content
@@ -1052,10 +1278,10 @@ class CLibrariesInterface(object):
            :returns: The key value pairs of the map specific metadata,
                      or None in case of an error
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.READ_MAP_INFO, RPCDefs.TYPE_RASTER3D,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("read_raster3d_info")
 
     def has_raster3d_timestamp(self, name, mapset):
         """Check if a file based 3D raster timetamp exists
@@ -1064,10 +1290,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: True if exists, False if not
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.HAS_TIMESTAMP, RPCDefs.TYPE_RASTER3D,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("has_raster3d_timestamp")
 
     def remove_raster3d_timestamp(self, name, mapset):
         """Remove a file based 3D raster timetamp
@@ -1079,10 +1305,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: The return value of G_remove_raster3d_timestamp
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.REMOVE_TIMESTAMP, RPCDefs.TYPE_RASTER3D,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("remove_raster3d_timestamp")
 
     def read_raster3d_timestamp(self, name, mapset):
         """Read a file based 3D raster timetamp
@@ -1101,10 +1327,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: The return value of G_read_raster3d_timestamp
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.READ_TIMESTAMP, RPCDefs.TYPE_RASTER3D,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("read_raster3d_timestamp")
 
     def write_raster3d_timestamp(self, name, mapset, timestring):
         """Write a file based 3D raster timetamp
@@ -1120,10 +1346,10 @@ class CLibrariesInterface(object):
            :param timestring: A GRASS datetime C-library compatible string
            :returns: The return value of G_write_raster3d_timestamp
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.WRITE_TIMESTAMP, RPCDefs.TYPE_RASTER3D,
                                name, mapset, None, timestring])
-        return self.client_conn.recv()
+        return self.safe_receive("write_raster3d_timestamp")
 
     def vector_map_exists(self, name, mapset):
         """Check if a vector map exists in the spatial database
@@ -1132,10 +1358,10 @@ class CLibrariesInterface(object):
            :param mapset: The mapset of the map
            :returns: True if exists, False if not
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.MAP_EXISTS, RPCDefs.TYPE_VECTOR,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("vector_map_exists")
 
     def read_vector_info(self, name, mapset):
         """Read the vector map info from the file system and store the content
@@ -1146,10 +1372,25 @@ class CLibrariesInterface(object):
            :returns: The key value pairs of the map specific metadata,
                      or None in case of an error
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.READ_MAP_INFO, RPCDefs.TYPE_VECTOR,
                                name, mapset, None])
-        return self.client_conn.recv()
+        return self.safe_receive("read_vector_info")
+
+    def read_vector_full_info(self, name, mapset):
+        """Read vector info using PyGRASS VectorTopo
+           and return a dictionary.
+
+           :param name: The name of the map
+           :param mapset: The mapset of the map
+           :returns: The key value pairs of the map specific metadata,
+                     or None in case of an error
+        """
+        self.check_server()
+        self.client_conn.send([RPCDefs.READ_MAP_FULL_INFO,
+                               RPCDefs.TYPE_VECTOR,
+                               name, mapset, None])
+        return self.safe_receive("read_vector_full_info")
 
     def has_vector_timestamp(self, name, mapset, layer=None):
         """Check if a file based vector timetamp exists
@@ -1159,10 +1400,10 @@ class CLibrariesInterface(object):
            :param layer: The layer of the vector map
            :returns: True if exists, False if not
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.HAS_TIMESTAMP, RPCDefs.TYPE_VECTOR,
                                name, mapset, layer])
-        return self.client_conn.recv()
+        return self.safe_receive("has_vector_timestamp")
 
     def remove_vector_timestamp(self, name, mapset, layer=None):
         """Remove a file based vector timetamp
@@ -1175,10 +1416,10 @@ class CLibrariesInterface(object):
            :param layer: The layer of the vector map
            :returns: The return value of G_remove_vector_timestamp
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.REMOVE_TIMESTAMP, RPCDefs.TYPE_VECTOR,
                                name, mapset, layer])
-        return self.client_conn.recv()
+        return self.safe_receive("remove_vector_timestamp")
 
     def read_vector_timestamp(self, name, mapset, layer=None):
         """Read a file based vector timetamp
@@ -1198,10 +1439,10 @@ class CLibrariesInterface(object):
            :param layer: The layer of the vector map
            :returns: The return value ofG_read_vector_timestamp and the timestamps
        """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.READ_TIMESTAMP, RPCDefs.TYPE_VECTOR,
                                name, mapset, layer])
-        return self.client_conn.recv()
+        return self.safe_receive("read_vector_timestamp")
 
     def write_vector_timestamp(self, name, mapset, timestring, layer=None):
         """Write a file based vector timestamp
@@ -1218,19 +1459,19 @@ class CLibrariesInterface(object):
            :param layer: The layer of the vector map
            :returns: The return value of G_write_vector_timestamp
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.WRITE_TIMESTAMP, RPCDefs.TYPE_VECTOR,
                                name, mapset, layer, timestring])
-        return self.client_conn.recv()
+        return self.safe_receive("write_vector_timestamp")
 
     def available_mapsets(self):
         """Return all available mapsets the user can access as a list of strings
 
            :returns: Names of available mapsets as list of strings
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.AVAILABLE_MAPSETS, ])
-        return self.client_conn.recv()
+        return self.safe_receive("available_mapsets")
 
     def get_driver_name(self, mapset=None):
         """Return the temporal database driver of a specific mapset
@@ -1239,9 +1480,9 @@ class CLibrariesInterface(object):
 
            :returns: Name of the driver or None if no temporal database present
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.GET_DRIVER_NAME, mapset])
-        return self.client_conn.recv()
+        return self.safe_receive("get_driver_name")
 
     def get_database_name(self, mapset=None):
         """Return the temporal database name of a specific mapset
@@ -1250,59 +1491,48 @@ class CLibrariesInterface(object):
 
            :returns: Name of the database or None if no temporal database present
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.GET_DATABASE_NAME, mapset])
-        return self.client_conn.recv()
+        return self.safe_receive("get_database_name")
 
     def get_mapset(self):
         """Return the current mapset
 
            :returns: Name of the current mapset
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.G_MAPSET, ])
-        return self.client_conn.recv()
+        return self.safe_receive("get_mapset")
 
     def get_location(self):
         """Return the location
 
            :returns: Name of the location
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.G_LOCATION, ])
-        return self.client_conn.recv()
+        return self.safe_receive("get_location")
 
     def get_gisdbase(self):
         """Return the gisdatabase
 
            :returns: Name of the gisdatabase
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.G_GISDBASE, ])
-        return self.client_conn.recv()
+        return self.safe_receive("get_gisdbase")
 
     def fatal_error(self, mapset=None):
-        """Return the temporal database name of a specific mapset
-
-           :param mapset: Name of the mapset
+        """Generate a fatal error in libgis.
 
-           :returns: Name of the database or None if no temporal database present
+            This function is only for testing purpose.
         """
-        self._check_restart_server()
+        self.check_server()
         self.client_conn.send([RPCDefs.G_FATAL_ERROR])
-
-    def stop(self):
-        """Stop the messenger server and close the pipe
-
-           This method should be called at exit using the package atexit
-        """
-        if self.server is not None and self.server.is_alive():
-            self.client_conn.send([0, ])
-            self.server.join(5)
-            self.server.terminate()
-        if self.client_conn is not None:
-            self.client_conn.close()
+        # The pipe should be closed in the checker thread
+        return self.safe_receive("Fatal error")
 
 if __name__ == "__main__":
     import doctest
     doctest.testmod()
+
diff --git a/lib/python/temporal/core.py b/lib/python/temporal/core.py
index 4bb9aae..2cef901 100644
--- a/lib/python/temporal/core.py
+++ b/lib/python/temporal/core.py
@@ -28,14 +28,22 @@ for details.
 
 :author: Soeren Gebbert
 """
+#import traceback
 import os
 # i18N
 import gettext
 gettext.install('grasslibs', os.path.join(os.getenv("GISBASE"), 'locale'))
 
+try:
+    from builtins import long
+except ImportError:
+    # python3
+    long = int
+
 import grass.script as gscript
 from datetime import datetime
-from c_libraries_interface import *
+from .c_libraries_interface import *
+from grass.pygrass import messages
 # Import all supported database backends
 # Ignore import errors since they are checked later
 try:
@@ -59,16 +67,20 @@ def profile_function(func):
     do_profiling = os.getenv("GRASS_TGIS_PROFILE")
 
     if do_profiling is "True" or do_profiling is "1":
-        import cProfile, pstats, StringIO
+        import cProfile, pstats
+        try:
+            import StringIO as io
+        except ImportError:
+            import io
         pr = cProfile.Profile()
         pr.enable()
         func()
         pr.disable()
-        s = StringIO.StringIO()
+        s = io.StringIO()
         sortby = 'cumulative'
         ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
         ps.print_stats()
-        print s.getvalue()
+        print(s.getvalue())
     else:
         func()
 
@@ -238,8 +250,8 @@ def _init_tgis_message_interface(raise_on_error=False):
                               a fatal error, call sys.exit(1) otherwise
     """
     global message_interface
-    from grass.pygrass import messages
-    message_interface = messages.get_msgr(raise_on_error=raise_on_error)
+    if message_interface is None:
+        message_interface = messages.get_msgr(raise_on_error=raise_on_error)
 
 
 def get_tgis_message_interface():
@@ -266,7 +278,8 @@ def _init_tgis_c_library_interface():
        libraster, libraster3d and libvector functions
     """
     global c_library_interface
-    c_library_interface = CLibrariesInterface()
+    if c_library_interface is None:
+        c_library_interface = CLibrariesInterface()
 
 
 def get_tgis_c_library_interface():
@@ -435,6 +448,7 @@ def get_available_temporal_mapsets():
                   database) are the values
     """
     global c_library_interface
+    global message_interface
 
     mapsets = c_library_interface.available_mapsets()
 
@@ -443,9 +457,23 @@ def get_available_temporal_mapsets():
     for mapset in mapsets:
         driver = c_library_interface.get_driver_name(mapset)
         database = c_library_interface.get_database_name(mapset)
+        
+        message_interface.debug(1, "get_available_temporal_mapsets: "\
+                                   "\n  mapset %s\n  driver %s\n  database %s"%(mapset,
+                                   driver, database))
 
         if driver and database:
-            tgis_mapsets[mapset] = (driver,  database)
+            # Check if the temporal sqlite database exists
+            # We need to set non-existing databases in case the mapset is the current mapset
+            # to create it
+            if (driver == "sqlite" and os.path.exists(database)) or mapset == get_current_mapset() :
+                tgis_mapsets[mapset] = (driver,  database)
+
+            # We need to warn if the connection is defined but the database does not
+            # exists
+            if driver == "sqlite" and not os.path.exists(database):
+                message_interface.warning("Temporal database connection defined as:\n" + \
+                                          database + "\nBut database file does not exist.")
 
     return tgis_mapsets
 
@@ -456,7 +484,7 @@ def init(raise_fatal_error=False):
     """This function set the correct database backend from GRASS environmental
        variables and creates the grass temporal database structure for raster,
        vector and raster3d maps as well as for the space-time datasets strds,
-       str3ds and stvds in case it does not exists.
+       str3ds and stvds in case it does not exist.
 
        Several global variables are initiated and the messenger and C-library
        interface subprocesses are spawned.
@@ -535,19 +563,20 @@ def init(raise_fatal_error=False):
     _init_tgis_c_library_interface()
     msgr = get_tgis_message_interface()
     msgr.debug(1, "Initiate the temporal database")
+                  #"\n  traceback:%s"%(str("  \n".join(traceback.format_stack()))))
 
     ciface = get_tgis_c_library_interface()
     driver_string = ciface.get_driver_name()
     database_string = ciface.get_database_name()
 
     # Set the mapset check and the timestamp write
-    if grassenv.has_key("TGIS_DISABLE_MAPSET_CHECK"):
+    if "TGIS_DISABLE_MAPSET_CHECK" in grassenv:
         if grassenv["TGIS_DISABLE_MAPSET_CHECK"] == "True" or \
            grassenv["TGIS_DISABLE_MAPSET_CHECK"] == "1":
             enable_mapset_check = False
             msgr.warning("TGIS_DISABLE_MAPSET_CHECK is True")
 
-    if grassenv.has_key("TGIS_DISABLE_TIMESTAMP_WRITE"):
+    if "TGIS_DISABLE_TIMESTAMP_WRITE" in grassenv:
         if grassenv["TGIS_DISABLE_TIMESTAMP_WRITE"] == "True" or \
            grassenv["TGIS_DISABLE_TIMESTAMP_WRITE"] == "1":
             enable_timestamp_write = False
@@ -737,10 +766,10 @@ def create_temporal_database(dbif):
     stvds_tables_sql = stds_tables_template_sql.replace("STDS", "stvds")
     str3ds_tables_sql = stds_tables_template_sql.replace("STDS", "str3ds")
 
-    msgr.message(_("Creating temporal database: %s" % (tgis_database_string)))
+    msgr.message(_("Creating temporal database: %s" % (str(tgis_database_string))))
 
     if tgis_backend == "sqlite":
-        # We need to create the sqlite3 database path if it does not exists
+        # We need to create the sqlite3 database path if it does not exist
         tgis_dir = os.path.dirname(tgis_database_string)
         if not os.path.exists(tgis_dir):
             try:
@@ -767,7 +796,7 @@ def create_temporal_database(dbif):
                                         "postgresql_indexes.sql"), 'r').read()
 
     # Connect now to the database
-    if not dbif.connected:
+    if dbif.connected is not True:
         dbif.connect()
 
     # Execute the SQL statements for sqlite
@@ -847,7 +876,7 @@ class SQLDatabaseInterfaceConnection(object):
             driver,  dbstring = self.tgis_mapsets[mapset]
 
             if dbstring not in self.unique_connections.keys():
-                self.unique_connections[dbstring] = DBConnection(backend=driver, 
+                self.unique_connections[dbstring] = DBConnection(backend=driver,
                                                                  dbstring=dbstring)
 
             self.connections[mapset] = self.unique_connections[dbstring]
@@ -878,7 +907,7 @@ class SQLDatabaseInterfaceConnection(object):
             driver,  dbstring = self.tgis_mapsets[mapset]
             conn = self.connections[mapset]
             if conn.is_connected() is False:
-                conn .connect(dbstring)
+                conn.connect(dbstring)
 
         self.connected = True
 
@@ -911,9 +940,8 @@ class SQLDatabaseInterfaceConnection(object):
             mapset = self.current_mapset
 
         if mapset not in self.tgis_mapsets.keys():
-            self.msgr.fatal(_("Unable to mogrify sql statement. There is no "
-                              "temporal database connection defined for "
-                              "mapset <%(mapset)s>" % {"mapset": mapset}))
+            self.msgr.fatal(_("Unable to mogrify sql statement. " +
+                              self._create_mapset_error_message(mapset)))
 
         return self.connections[mapset].mogrify_sql_statement(content)
 
@@ -934,9 +962,8 @@ class SQLDatabaseInterfaceConnection(object):
             mapset = self.current_mapset
 
         if mapset not in self.tgis_mapsets.keys():
-            self.msgr.fatal(_("Unable to check table. There is no temporal "
-                              "database connection defined for mapset "
-                              "<%(mapset)s>" % {"mapset": mapset}))
+            self.msgr.fatal(_("Unable to check table. " +
+                              self._create_mapset_error_message(mapset)))
 
         return self.connections[mapset].check_table(table_name)
 
@@ -951,9 +978,8 @@ class SQLDatabaseInterfaceConnection(object):
             mapset = self.current_mapset
 
         if mapset not in self.tgis_mapsets.keys():
-            self.msgr.fatal(_("Unable to execute sql statement. There is no "
-                              "temporal database connection defined for "
-                              "mapset <%(mapset)s>" % {"mapset": mapset}))
+            self.msgr.fatal(_("Unable to execute sql statement. " +
+                              self._create_mapset_error_message(mapset)))
 
         return self.connections[mapset].execute(statement,  args)
 
@@ -962,9 +988,8 @@ class SQLDatabaseInterfaceConnection(object):
             mapset = self.current_mapset
 
         if mapset not in self.tgis_mapsets.keys():
-            self.msgr.fatal(_("Unable to fetch one. There is no temporal "
-                              "database connection defined for mapset "
-                              "<%(mapset)s>" % {"mapset": mapset}))
+            self.msgr.fatal(_("Unable to fetch one. " +
+                              self._create_mapset_error_message(mapset)))
 
         return self.connections[mapset].fetchone()
 
@@ -973,9 +998,8 @@ class SQLDatabaseInterfaceConnection(object):
             mapset = self.current_mapset
 
         if mapset not in self.tgis_mapsets.keys():
-            self.msgr.fatal(_("Unable to fetch all. There is no temporal "
-                              "database connection defined for mapset "
-                              "<%(mapset)s>" % {"mapset": mapset}))
+            self.msgr.fatal(_("Unable to fetch all. " +
+                              self._create_mapset_error_message(mapset)))
 
         return self.connections[mapset].fetchall()
 
@@ -991,12 +1015,20 @@ class SQLDatabaseInterfaceConnection(object):
             mapset = self.current_mapset
 
         if mapset not in self.tgis_mapsets.keys():
-            self.msgr.fatal(_("Unable to execute transaction. There is no "
-                              "temporal database connection defined for "
-                              "mapset <%(mapset)s>" % {"mapset": mapset}))
+            self.msgr.fatal(_("Unable to execute transaction. " +
+                              self._create_mapset_error_message(mapset)))
 
         return self.connections[mapset].execute_transaction(statement)
 
+    def _create_mapset_error_message(self, mapset):
+
+          return("You have no permission to "
+                 "access mapset <%(mapset)s>, or "
+                 "mapset <%(mapset)s> has no temporal database. "
+                 "Accessable mapsets are: <%(mapsets)s>" % \
+                 {"mapset": mapset,
+                  "mapsets":','.join(self.tgis_mapsets.keys())})
+
 ###############################################################################
 
 
@@ -1012,7 +1044,7 @@ class DBConnection(object):
 
     def __init__(self, backend=None, dbstring=None):
         """ Constructor of a database connection
-        
+
             param backend:The database backend sqlite or pg
             param dbstring: The database connection string
         """
@@ -1032,9 +1064,15 @@ class DBConnection(object):
         if dbstring is None:
             global tgis_database_string
             self.dbstring = tgis_database_string
+        
+        self.dbstring = dbstring
 
         self.msgr = get_tgis_message_interface()
-        self.msgr.debug(1, "SQLDatabaseInterfaceConnection constructor")
+        self.msgr.debug(1, "DBConnection constructor:"\
+                           "\n  backend: %s"\
+                           "\n  dbstring: %s"%(backend, self.dbstring))
+                           #"\n  traceback:%s"%(backend, self.dbstring, 
+                           #str("  \n".join(traceback.format_stack()))))
 
     def __del__(self):
         if self.connected is True:
@@ -1058,7 +1096,7 @@ class DBConnection(object):
         """Connect to the DBMI to execute SQL statements
 
             Supported backends are sqlite3 and postgresql
-            
+
             param dbstring: The database connection string
         """
         # Connection in the current mapset
@@ -1133,9 +1171,9 @@ class DBConnection(object):
                 if self.connected:
                     try:
                         return self.cursor.mogrify(sql, args)
-                    except:
-                        print sql, args
-                        raise
+                    except Exception as exc:
+                        print(sql, args)
+                        raise exc
                 else:
                     self.connect()
                     statement = self.cursor.mogrify(sql, args)
diff --git a/lib/python/temporal/datetime_math.py b/lib/python/temporal/datetime_math.py
index 50c00e1..952b165 100644
--- a/lib/python/temporal/datetime_math.py
+++ b/lib/python/temporal/datetime_math.py
@@ -9,7 +9,7 @@ for details.
 :authors: Soeren Gebbert
 """
 from datetime import datetime, timedelta
-from core import *
+from .core import *
 import copy
 
 try:
@@ -861,6 +861,42 @@ def create_suffix_from_datetime(start_time,  granularity):
     global suffix_units
     return start_time.strftime(suffix_units[granularity.split(' ')[1]])
 
+def create_time_suffix(mapp, end=False):
+    """Create a datetime string based on a map datetime object
+
+       :param mapp: a temporal map dataset
+       :param end: True if you want add also end time to the suffix
+    """
+    start = mapp.temporal_extent.get_start_time()
+    sstring = start.isoformat().replace(':', '_').replace('-', '_')
+    if end:
+        end = mapp.temporal_extent.get_end_time()
+        estring = end.isoformat().replace(':', '_').replace('-', '_')
+        return "{st}_{en}".format(st=sstring, en=estring)
+    return sstring
+
+def create_numeric_suffic(base, count, zeros):
+    """Create a string based on count and number of zeros decided by zeros
+
+       :param base: the basename for new map
+       :param count: a number
+       :param zeros: a string containing the expected number, coming from suffix option
+    """
+    spli = zeros.split('%')
+    if len(spli) == 2:
+        suff = spli[1]
+        if suff.isdigit():
+            if int(suff[0]) == 0:
+                zero = suff
+            else:
+                zero = "0{nu}".format(nu=suff)
+        else:
+            zero = '05'
+    else:
+        zero = '05'
+    s = '{ba}_{i:' + zero + 'd}'
+    return s.format(ba=base, i=count)
+
 if __name__ == "__main__":
     import doctest
     doctest.testmod()
diff --git a/lib/python/temporal/extract.py b/lib/python/temporal/extract.py
index b6ecffc..85c6635 100644
--- a/lib/python/temporal/extract.py
+++ b/lib/python/temporal/extract.py
@@ -10,8 +10,11 @@ for details.
 """
 
 from grass.script.utils import get_num_suffix
-from space_time_datasets import *
-from open_stds import *
+from .space_time_datasets import *
+from .open_stds import *
+from .datetime_math import create_suffix_from_datetime
+from .datetime_math import create_time_suffix
+from .datetime_math import create_numeric_suffic
 from multiprocessing import Process
 import grass.script as gscript
 from grass.exceptions import CalledModuleError
@@ -19,9 +22,9 @@ from grass.exceptions import CalledModuleError
 ############################################################################
 
 
-def extract_dataset(input, output, type, where, expression, base, nprocs=1,
-                    register_null=False, layer=1,
-                    vtype="point,line,boundary,centroid,area,face"):
+def extract_dataset(input, output, type, where, expression, base, time_suffix,
+                    nprocs=1, register_null=False, layer=1,
+                    vtype="point,line,boundary,centroid,area,face", ):
     """Extract a subset of a space time raster, raster3d or vector dataset
 
        A mapcalc expression can be provided to process the temporal extracted
@@ -37,6 +40,8 @@ def extract_dataset(input, output, type, where, expression, base, nprocs=1,
                          statement
        :param base: The base name of the new created maps in case a mapclac
                    expression is provided
+       :param time_suffix: string to choose which suffix to use: gran, time, num%*
+                          (where * are digits)
        :param nprocs: The number of parallel processes to be used for mapcalc
                      processing
        :param register_null: Set this number True to register empty maps
@@ -85,9 +90,19 @@ def extract_dataset(input, output, type, where, expression, base, nprocs=1,
                 if count % 10 == 0:
                     msgr.percent(count, num_rows, 1)
 
-                map_name = "{base}_{suffix}".format(base=base,
-                                                    suffix=get_num_suffix(count,
-                                                                          num_rows))
+                if sp.get_temporal_type() == 'absolute' and time_suffix == 'gran':
+                    old_map = sp.get_new_map_instance(row["id"])
+                    old_map.select(dbif)
+                    suffix = create_suffix_from_datetime(old_map.temporal_extent.get_start_time(),
+                                                         sp.get_granularity())
+                    map_name = "{ba}_{su}".format(ba=base, su=suffix)
+                elif sp.get_temporal_type() == 'absolute' and time_suffix == 'time':
+                    old_map = sp.get_new_map_instance(row["id"])
+                    old_map.select(dbif)
+                    suffix = create_time_suffix(old_map)
+                    map_name = "{ba}_{su}".format(ba=base, su=suffix)
+                else:
+                    map_name = create_numeric_suffic(base, count, time_suffix)
 
                 # We need to modify the r(3).mapcalc expression
                 if type != "vector":
@@ -168,7 +183,7 @@ def extract_dataset(input, output, type, where, expression, base, nprocs=1,
         msgr.percent(0, num_rows, 1)
 
         temporal_type, semantic_type, title, description = sp.get_initial_values()
-        new_sp = open_new_stds(output, type, sp.get_temporal_type(), title, 
+        new_sp = open_new_stds(output, type, sp.get_temporal_type(), title,
                                description, semantic_type, dbif,
                                gscript.overwrite())
 
diff --git a/lib/python/temporal/factory.py b/lib/python/temporal/factory.py
index 8541b4d..7a5dbd9 100644
--- a/lib/python/temporal/factory.py
+++ b/lib/python/temporal/factory.py
@@ -18,7 +18,7 @@ for details.
 :authors: Soeren Gebbert
 """
 
-from space_time_datasets import *
+from .space_time_datasets import *
 
 ###############################################################################
 
diff --git a/lib/python/temporal/gui_support.py b/lib/python/temporal/gui_support.py
index 3c7b884..b935aea 100644
--- a/lib/python/temporal/gui_support.py
+++ b/lib/python/temporal/gui_support.py
@@ -10,8 +10,8 @@ for details.
 :authors: Soeren Gebbert
 """
 
-from space_time_datasets import *
-from factory import *
+from .space_time_datasets import *
+from .factory import *
 import grass.script as gscript
 
 ###############################################################################
diff --git a/lib/python/temporal/list_stds.py b/lib/python/temporal/list_stds.py
index 7d5a1f8..5908a7d 100644
--- a/lib/python/temporal/list_stds.py
+++ b/lib/python/temporal/list_stds.py
@@ -17,16 +17,16 @@ for details.
 
 :authors: Soeren Gebbert
 """
-
-from space_time_datasets import *
-from factory import *
-from open_stds import *
+from __future__ import print_function
+from .space_time_datasets import *
+from .factory import *
+from .open_stds import *
 
 ###############################################################################
 
 
 def get_dataset_list(type, temporal_type, columns=None, where=None,
-                     order=None):
+                     order=None, dbif=None):
     """ Return a list of time stamped maps or space time datasets of a specific
         temporal type that are registred in the temporal database
 
@@ -41,6 +41,7 @@ def get_dataset_list(type, temporal_type, columns=None, where=None,
         :param where: A where statement for selected listing without "WHERE"
         :param order: A comma separated list of columns to order the
                       datasets by category
+        :param dbif: The database interface to be used
 
         :return: A dictionary with the rows of the SQL query for each
                  available mapset
@@ -51,21 +52,19 @@ def get_dataset_list(type, temporal_type, columns=None, where=None,
             >>> tgis.init()
             >>> name = "list_stds_test"
             >>> sp = tgis.open_new_stds(name=name, type="strds",
-            ... temporaltype="absolute", title="title", descr="descr",
-            ... semantic="mean", dbif=None, overwrite=True)
+            ... temporaltype="absolute", title="title", descr="descr", semantic="mean", dbif=None, overwrite=True)
             >>> mapset = tgis.get_current_mapset()
             >>> stds_list = tgis.get_dataset_list("strds", "absolute", columns="name")
             >>> rows =  stds_list[mapset]
             >>> for row in rows:
             ...     if row["name"] == name:
-            ...         print True
+            ...         print(True)
             True
-            >>> stds_list = tgis.get_dataset_list("strds", "absolute",
-            ... columns="name,mapset", where="mapset = '%s'"%(mapset))
+            >>> stds_list = tgis.get_dataset_list("strds", "absolute", columns="name,mapset", where="mapset = '%s'"%(mapset))
             >>> rows =  stds_list[mapset]
             >>> for row in rows:
             ...     if row["name"] == name and row["mapset"] == mapset:
-            ...         print True
+            ...         print(True)
             True
             >>> check = sp.delete()
 
@@ -73,8 +72,7 @@ def get_dataset_list(type, temporal_type, columns=None, where=None,
     id = None
     sp = dataset_factory(type, id)
 
-    dbif = SQLDatabaseInterfaceConnection()
-    dbif.connect()
+    dbif, connected = init_dbif(dbif)
 
     mapsets = get_available_temporal_mapsets()
 
@@ -107,13 +105,16 @@ def get_dataset_list(type, temporal_type, columns=None, where=None,
         if rows:
             result[mapset] = rows
 
+    if connected:
+        dbif.close()
+
     return result
 
 ###############################################################################
 
 
 def list_maps_of_stds(type, input, columns, order, where, separator,
-                      method, no_header=False, gran=None,
+                      method, no_header=False, gran=None, dbif=None,
                       outpath=None):
     """ List the maps of a space time dataset using different methods
 
@@ -127,6 +128,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
         :param separator: The field separator character between the columns
         :param method: String identifier to select a method out of cols,
                        comma,delta or deltagaps
+        :param dbif: The database interface to be used
 
             - "cols" Print preselected columns specified by columns
             - "comma" Print the map ids ("name at mapset") as comma separated string
@@ -145,7 +147,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
         :param outpath: The path to file where to save output
     """
 
-    dbif, connected = init_dbif(None)
+    dbif, connected = init_dbif(dbif)
     msgr = get_tgis_message_interface()
 
     sp = open_old_stds(input, type, dbif)
@@ -190,7 +192,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
             if outpath:
                 outfile.write('{st}\n'.format(st=string))
             else:
-                print string
+                print(string)
 
         if maps and len(maps) > 0:
 
@@ -238,7 +240,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
                 if outpath:
                     outfile.write('{st}\n'.format(st=string))
                 else:
-                    print string
+                    print(string)
 
     else:
         # In comma separated mode only map ids are needed
@@ -260,7 +262,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
                 if outpath:
                     outfile.write('{st}\n'.format(st=string))
                 else:
-                    print string
+                    print(string)
 
             elif method == "cols":
                 # Print the column names if requested
@@ -279,7 +281,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
                     if outpath:
                         outfile.write('{st}\n'.format(st=output))
                     else:
-                        print output
+                        print(output)
 
                 for row in rows:
                     output = ""
@@ -293,7 +295,7 @@ def list_maps_of_stds(type, input, columns, order, where, separator,
                     if outpath:
                         outfile.write('{st}\n'.format(st=output))
                     else:
-                        print output
+                        print(output)
     if outpath:
         outfile.close()
     if connected:
diff --git a/lib/python/temporal/mapcalc.py b/lib/python/temporal/mapcalc.py
index 51412d5..b6bdec9 100644
--- a/lib/python/temporal/mapcalc.py
+++ b/lib/python/temporal/mapcalc.py
@@ -9,8 +9,8 @@ for details.
 :authors: Soeren Gebbert
 """
 
-from space_time_datasets import *
-from open_stds import *
+from .space_time_datasets import *
+from .open_stds import *
 from multiprocessing import Process
 import grass.script as gscript
 from grass.exceptions import CalledModuleError
diff --git a/lib/python/temporal/metadata.py b/lib/python/temporal/metadata.py
index 6bf4816..607bbb7 100644
--- a/lib/python/temporal/metadata.py
+++ b/lib/python/temporal/metadata.py
@@ -21,7 +21,8 @@ for details.
 
 :authors: Soeren Gebbert
 """
-from base import *
+from __future__ import print_function
+from .base import *
 
 ###############################################################################
 
@@ -234,26 +235,26 @@ class RasterMetadataBase(SQLDatabaseInterface):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " | Datatype:................... " + str(self.get_datatype())
-        print " | Number of columns:.......... " + str(self.get_cols())
-        print " | Number of rows:............. " + str(self.get_rows())
-        print " | Number of cells:............ " + str(
-            self.get_number_of_cells())
-        print " | North-South resolution:..... " + str(self.get_nsres())
-        print " | East-west resolution:....... " + str(self.get_ewres())
-        print " | Minimum value:.............. " + str(self.get_min())
-        print " | Maximum value:.............. " + str(self.get_max())
+        print(" | Datatype:................... " + str(self.get_datatype()))
+        print(" | Number of columns:.......... " + str(self.get_cols()))
+        print(" | Number of rows:............. " + str(self.get_rows()))
+        print(" | Number of cells:............ " + str(
+            self.get_number_of_cells()))
+        print(" | North-South resolution:..... " + str(self.get_nsres()))
+        print(" | East-west resolution:....... " + str(self.get_ewres()))
+        print(" | Minimum value:.............. " + str(self.get_min()))
+        print(" | Maximum value:.............. " + str(self.get_max()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "datatype=" + str(self.get_datatype())
-        print "cols=" + str(self.get_cols())
-        print "rows=" + str(self.get_rows())
-        print "number_of_cells=" + str(self.get_number_of_cells())
-        print "nsres=" + str(self.get_nsres())
-        print "ewres=" + str(self.get_ewres())
-        print "min=" + str(self.get_min())
-        print "max=" + str(self.get_max())
+        print("datatype=" + str(self.get_datatype()))
+        print("cols=" + str(self.get_cols()))
+        print("rows=" + str(self.get_rows()))
+        print("number_of_cells=" + str(self.get_number_of_cells()))
+        print("nsres=" + str(self.get_nsres()))
+        print("ewres=" + str(self.get_ewres()))
+        print("min=" + str(self.get_min()))
+        print("max=" + str(self.get_max()))
 
 ###############################################################################
 
@@ -323,7 +324,7 @@ class RasterMetadata(RasterMetadataBase):
 
     def print_info(self):
         """Print information about this class in human readable style"""
-        print " +-------------------- Metadata information ----------------------------------+"
+        print(" +-------------------- Metadata information ----------------------------------+")
         #      0123456789012345678901234567890
         RasterMetadataBase.print_info(self)
 
@@ -445,18 +446,18 @@ class Raster3DMetadata(RasterMetadataBase):
 
     def print_info(self):
         """Print information about this class in human readable style"""
-        print " +-------------------- Metadata information ----------------------------------+"
+        print(" +-------------------- Metadata information ----------------------------------+")
         #      0123456789012345678901234567890
         RasterMetadataBase.print_info(self)
         #      0123456789012345678901234567890
-        print " | Number of depths:........... " + str(self.get_depths())
-        print " | Top-Bottom resolution:...... " + str(self.get_tbres())
+        print(" | Number of depths:........... " + str(self.get_depths()))
+        print(" | Top-Bottom resolution:...... " + str(self.get_tbres()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         RasterMetadataBase.print_shell_info(self)
-        print "depths=" + str(self.get_depths())
-        print "tbres=" + str(self.get_tbres())
+        print("depths=" + str(self.get_depths()))
+        print("tbres=" + str(self.get_tbres()))
 
 ###############################################################################
 
@@ -763,36 +764,36 @@ class VectorMetadata(SQLDatabaseInterface):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " +-------------------- Metadata information ----------------------------------+"
-        print " | Is map 3d .................. " + str(self.get_3d_info())
-        print " | Number of points ........... " + str(self.get_number_of_points())
-        print " | Number of lines ............ " + str(self.get_number_of_lines())
-        print " | Number of boundaries ....... " + str(self.get_number_of_boundaries())
-        print " | Number of centroids ........ " + str(self.get_number_of_centroids())
-        print " | Number of faces ............ " + str(self.get_number_of_faces())
-        print " | Number of kernels .......... " + str(self.get_number_of_kernels())
-        print " | Number of primitives ....... " + str(self.get_number_of_primitives())
-        print " | Number of nodes ............ " + str(self.get_number_of_nodes())
-        print " | Number of areas ............ " + str(self.get_number_of_areas())
-        print " | Number of islands .......... " + str(self.get_number_of_islands())
-        print " | Number of holes ............ " + str(self.get_number_of_holes())
-        print " | Number of volumes .......... " + str(self.get_number_of_volumes())
+        print(" +-------------------- Metadata information ----------------------------------+")
+        print(" | Is map 3d .................. " + str(self.get_3d_info()))
+        print(" | Number of points ........... " + str(self.get_number_of_points()))
+        print(" | Number of lines ............ " + str(self.get_number_of_lines()))
+        print(" | Number of boundaries ....... " + str(self.get_number_of_boundaries()))
+        print(" | Number of centroids ........ " + str(self.get_number_of_centroids()))
+        print(" | Number of faces ............ " + str(self.get_number_of_faces()))
+        print(" | Number of kernels .......... " + str(self.get_number_of_kernels()))
+        print(" | Number of primitives ....... " + str(self.get_number_of_primitives()))
+        print(" | Number of nodes ............ " + str(self.get_number_of_nodes()))
+        print(" | Number of areas ............ " + str(self.get_number_of_areas()))
+        print(" | Number of islands .......... " + str(self.get_number_of_islands()))
+        print(" | Number of holes ............ " + str(self.get_number_of_holes()))
+        print(" | Number of volumes .......... " + str(self.get_number_of_volumes()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "is_3d=" + str(self.get_3d_info())
-        print "points=" + str(self.get_number_of_points())
-        print "lines=" + str(self.get_number_of_lines())
-        print "boundaries=" + str(self.get_number_of_boundaries())
-        print "centroids=" + str(self.get_number_of_centroids())
-        print "faces=" + str(self.get_number_of_faces())
-        print "kernels=" + str(self.get_number_of_kernels())
-        print "primitives=" + str(self.get_number_of_primitives())
-        print "nodes=" + str(self.get_number_of_nodes())
-        print "areas=" + str(self.get_number_of_areas())
-        print "islands=" + str(self.get_number_of_islands())
-        print "holes=" + str(self.get_number_of_holes())
-        print "volumes=" + str(self.get_number_of_volumes())
+        print("is_3d=" + str(self.get_3d_info()))
+        print("points=" + str(self.get_number_of_points()))
+        print("lines=" + str(self.get_number_of_lines()))
+        print("boundaries=" + str(self.get_number_of_boundaries()))
+        print("centroids=" + str(self.get_number_of_centroids()))
+        print("faces=" + str(self.get_number_of_faces()))
+        print("kernels=" + str(self.get_number_of_kernels()))
+        print("primitives=" + str(self.get_number_of_primitives()))
+        print("nodes=" + str(self.get_number_of_nodes()))
+        print("areas=" + str(self.get_number_of_areas()))
+        print("islands=" + str(self.get_number_of_islands()))
+        print("holes=" + str(self.get_number_of_holes()))
+        print("volumes=" + str(self.get_number_of_volumes()))
 
 ###############################################################################
 
@@ -908,29 +909,29 @@ class STDSMetadataBase(SQLDatabaseInterface):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " | Number of registered maps:.. " + str(
-            self.get_number_of_maps())
-        print " |"
-        print " | Title:"
-        print " | " + str(self.get_title())
-        print " | Description:"
-        print " | " + str(self.get_description())
-        print " | Command history:"
+        print(" | Number of registered maps:.. " + str(
+            self.get_number_of_maps()))
+        print(" |")
+        print(" | Title:")
+        print(" | " + str(self.get_title()))
+        print(" | Description:")
+        print(" | " + str(self.get_description()))
+        print(" | Command history:")
         command = self.get_command()
         if command:
             for token in command.split("\n"):
-                print " | " + str(token)
+                print(" | " + str(token))
 
     def print_history(self):
         """Print history information about this class in human readable
             shell style
         """
         #      0123456789012345678901234567890
-        print "# Title:"
-        print "# " + str(self.get_title())
-        print "# Description:"
-        print "# " + str(self.get_description())
-        print "# Command history:"
+        print("# Title:")
+        print("# " + str(self.get_title()))
+        print("# Description:")
+        print("# " + str(self.get_description()))
+        print("# Command history:")
         command = self.get_command()
 
         if command:
@@ -946,15 +947,15 @@ class STDSMetadataBase(SQLDatabaseInterface):
                 count += 1
                 if len(token) > 1:
                     if token[0] == "#":
-                        print token
+                        print(token)
                     elif count < len(print_list):
-                        print token + " \\"
+                        print(token + " \\")
                     else:
-                        print token
+                        print(token)
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "number_of_maps=" + str(self.get_number_of_maps())
+        print("number_of_maps=" + str(self.get_number_of_maps()))
 
 ###############################################################################
 
@@ -1142,29 +1143,29 @@ class STDSRasterMetadataBase(STDSMetadataBase):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " | North-South resolution min:. " + str(self.get_nsres_min())
-        print " | North-South resolution max:. " + str(self.get_nsres_max())
-        print " | East-west resolution min:... " + str(self.get_ewres_min())
-        print " | East-west resolution max:... " + str(self.get_ewres_max())
-        print " | Minimum value min:.......... " + str(self.get_min_min())
-        print " | Minimum value max:.......... " + str(self.get_min_max())
-        print " | Maximum value min:.......... " + str(self.get_max_min())
-        print " | Maximum value max:.......... " + str(self.get_max_max())
-        print " | Aggregation type:........... " + str(self.get_aggregation_type())
+        print(" | North-South resolution min:. " + str(self.get_nsres_min()))
+        print(" | North-South resolution max:. " + str(self.get_nsres_max()))
+        print(" | East-west resolution min:... " + str(self.get_ewres_min()))
+        print(" | East-west resolution max:... " + str(self.get_ewres_max()))
+        print(" | Minimum value min:.......... " + str(self.get_min_min()))
+        print(" | Minimum value max:.......... " + str(self.get_min_max()))
+        print(" | Maximum value min:.......... " + str(self.get_max_min()))
+        print(" | Maximum value max:.......... " + str(self.get_max_max()))
+        print(" | Aggregation type:........... " + str(self.get_aggregation_type()))
         STDSMetadataBase.print_info(self)
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "aggregation_type=" + str(self.get_aggregation_type())
+        print("aggregation_type=" + str(self.get_aggregation_type()))
         STDSMetadataBase.print_shell_info(self)
-        print "nsres_min=" + str(self.get_nsres_min())
-        print "nsres_max=" + str(self.get_nsres_max())
-        print "ewres_min=" + str(self.get_ewres_min())
-        print "ewres_max=" + str(self.get_ewres_max())
-        print "min_min=" + str(self.get_min_min())
-        print "min_max=" + str(self.get_min_max())
-        print "max_min=" + str(self.get_max_min())
-        print "max_max=" + str(self.get_max_max())
+        print("nsres_min=" + str(self.get_nsres_min()))
+        print("nsres_max=" + str(self.get_nsres_max()))
+        print("ewres_min=" + str(self.get_ewres_min()))
+        print("ewres_max=" + str(self.get_ewres_max()))
+        print("min_min=" + str(self.get_min_min()))
+        print("min_max=" + str(self.get_min_max()))
+        print("max_min=" + str(self.get_max_min()))
+        print("max_max=" + str(self.get_max_max()))
 
 
 ###############################################################################
@@ -1261,16 +1262,16 @@ class STRDSMetadata(STDSRasterMetadataBase):
 
     def print_info(self):
         """Print information about this class in human readable style"""
-        print " +-------------------- Metadata information ----------------------------------+"
+        print(" +-------------------- Metadata information ----------------------------------+")
         #      0123456789012345678901234567890
-        print " | Raster register table:...... " + str(
-            self.get_raster_register())
+        print(" | Raster register table:...... " + str(
+            self.get_raster_register()))
         STDSRasterMetadataBase.print_info(self)
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         STDSRasterMetadataBase.print_shell_info(self)
-        print "raster_register=" + str(self.get_raster_register())
+        print("raster_register=" + str(self.get_raster_register()))
 
 ###############################################################################
 
@@ -1397,21 +1398,21 @@ class STR3DSMetadata(STDSRasterMetadataBase):
 
     def print_info(self):
         """Print information about this class in human readable style"""
-        print " +-------------------- Metadata information ----------------------------------+"
+        print(" +-------------------- Metadata information ----------------------------------+")
         #      0123456789012345678901234567890
         #      0123456789012345678901234567890
-        print " | 3D raster register table:... " + str(
-            self.get_raster3d_register())
-        print " | Top-bottom resolution min:.. " + str(self.get_ewres_min())
-        print " | Top-bottom resolution max:.. " + str(self.get_ewres_max())
+        print(" | 3D raster register table:... " + str(
+            self.get_raster3d_register()))
+        print(" | Top-bottom resolution min:.. " + str(self.get_ewres_min()))
+        print(" | Top-bottom resolution max:.. " + str(self.get_ewres_max()))
         STDSRasterMetadataBase.print_info(self)
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         STDSRasterMetadataBase.print_shell_info(self)
-        print "tbres_min=" + str(self.get_tbres_min())
-        print "tbres_max=" + str(self.get_tbres_max())
-        print "raster3d_register=" + str(self.get_raster3d_register())
+        print("tbres_min=" + str(self.get_tbres_min()))
+        print("tbres_max=" + str(self.get_tbres_max()))
+        print("raster3d_register=" + str(self.get_raster3d_register()))
 
 ###############################################################################
 
@@ -1662,40 +1663,40 @@ class STVDSMetadata(STDSMetadataBase):
 
     def print_info(self):
         """Print information about this class in human readable style"""
-        print " +-------------------- Metadata information ----------------------------------+"
+        print(" +-------------------- Metadata information ----------------------------------+")
         #      0123456789012345678901234567890
-        print " | Vector register table:...... " + str(
-            self.get_vector_register())
-        print " | Number of points ........... " + str(self.number_of_points)
-        print " | Number of lines ............ " + str(self.number_of_lines)
-        print " | Number of boundaries ....... " + str(self.number_of_boundaries)
-        print " | Number of centroids ........ " + str(self.number_of_centroids)
-        print " | Number of faces ............ " + str(self.number_of_faces)
-        print " | Number of kernels .......... " + str(self.number_of_kernels)
-        print " | Number of primitives ....... " + str(self.number_of_primitives)
-        print " | Number of nodes ............ " + str(self.number_of_nodes)
-        print " | Number of areas ............ " + str(self.number_of_areas)
-        print " | Number of islands .......... " + str(self.number_of_islands)
-        print " | Number of holes ............ " + str(self.number_of_holes)
-        print " | Number of volumes .......... " + str(self.number_of_volumes)
+        print(" | Vector register table:...... " + str(
+            self.get_vector_register()))
+        print(" | Number of points ........... " + str(self.number_of_points))
+        print(" | Number of lines ............ " + str(self.number_of_lines))
+        print(" | Number of boundaries ....... " + str(self.number_of_boundaries))
+        print(" | Number of centroids ........ " + str(self.number_of_centroids))
+        print(" | Number of faces ............ " + str(self.number_of_faces))
+        print(" | Number of kernels .......... " + str(self.number_of_kernels))
+        print(" | Number of primitives ....... " + str(self.number_of_primitives))
+        print(" | Number of nodes ............ " + str(self.number_of_nodes))
+        print(" | Number of areas ............ " + str(self.number_of_areas))
+        print(" | Number of islands .......... " + str(self.number_of_islands))
+        print(" | Number of holes ............ " + str(self.number_of_holes))
+        print(" | Number of volumes .......... " + str(self.number_of_volumes))
         STDSMetadataBase.print_info(self)
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         STDSMetadataBase.print_shell_info(self)
-        print "vector_register=" + str(self.get_vector_register())
-        print "points=" + str(self.get_number_of_points())
-        print "lines=" + str(self.get_number_of_lines())
-        print "boundaries=" + str(self.get_number_of_boundaries())
-        print "centroids=" + str(self.get_number_of_centroids())
-        print "faces=" + str(self.get_number_of_faces())
-        print "kernels=" + str(self.get_number_of_kernels())
-        print "primitives=" + str(self.get_number_of_primitives())
-        print "nodes=" + str(self.get_number_of_nodes())
-        print "areas=" + str(self.get_number_of_areas())
-        print "islands=" + str(self.get_number_of_islands())
-        print "holes=" + str(self.get_number_of_holes())
-        print "volumes=" + str(self.get_number_of_volumes())
+        print("vector_register=" + str(self.get_vector_register()))
+        print("points=" + str(self.get_number_of_points()))
+        print("lines=" + str(self.get_number_of_lines()))
+        print("boundaries=" + str(self.get_number_of_boundaries()))
+        print("centroids=" + str(self.get_number_of_centroids()))
+        print("faces=" + str(self.get_number_of_faces()))
+        print("kernels=" + str(self.get_number_of_kernels()))
+        print("primitives=" + str(self.get_number_of_primitives()))
+        print("nodes=" + str(self.get_number_of_nodes()))
+        print("areas=" + str(self.get_number_of_areas()))
+        print("islands=" + str(self.get_number_of_islands()))
+        print("holes=" + str(self.get_number_of_holes()))
+        print("volumes=" + str(self.get_number_of_volumes()))
 
 ###############################################################################
 
diff --git a/lib/python/temporal/open_stds.py b/lib/python/temporal/open_stds.py
index c81457e..c3010d1 100644
--- a/lib/python/temporal/open_stds.py
+++ b/lib/python/temporal/open_stds.py
@@ -18,7 +18,7 @@ for details.
 :authors: Soeren Gebbert
 """
 
-from factory import *
+from .factory import *
 
 ###############################################################################
 
@@ -37,7 +37,7 @@ def open_old_stds(name, type, dbif=None):
        :param type: The type of the space time dataset (strd, str3ds, stvds,
                     raster, vector, raster3d)
        :param dbif: The optional database interface to be used
-       
+
        :return: New stds object
 
     """
diff --git a/lib/python/temporal/register.py b/lib/python/temporal/register.py
index 1772677..6946606 100644
--- a/lib/python/temporal/register.py
+++ b/lib/python/temporal/register.py
@@ -17,7 +17,7 @@ for details.
 :authors: Soeren Gebbert
 """
 
-from open_stds import *
+from .open_stds import *
 import grass.script as gscript
 
 ###############################################################################
diff --git a/lib/python/temporal/sampling.py b/lib/python/temporal/sampling.py
index 3c72380..2b7d21e 100644
--- a/lib/python/temporal/sampling.py
+++ b/lib/python/temporal/sampling.py
@@ -16,8 +16,8 @@ for details.
 
 :authors: Soeren Gebbert
 """
-
-from factory import *
+from __future__ import print_function
+from .factory import *
 
 
 def sample_stds_by_stds_topology(intype, sampletype, inputs, sampler, header,
@@ -122,7 +122,7 @@ def sample_stds_by_stds_topology(intype, sampletype, inputs, sampler, header,
             string += "%s%s" % ("end_time", separator)
             string += "%s%s" % ("interval_length", separator)
             string += "%s" % ("distance_from_begin")
-            print string
+            print(string)
 
         first_time, dummy = mapmatrizes[0][0]["granule"].get_temporal_extent_as_tuple()
 
@@ -163,7 +163,7 @@ def sample_stds_by_stds_topology(intype, sampletype, inputs, sampler, header,
             string += "%s%s" % (end, separator)
             string += "%s%s" % (delta, separator)
             string += "%s" % (delta_first)
-            print string
+            print(string)
 
     dbif.close()
     if len(mapmatrizes) > 0:
diff --git a/lib/python/temporal/space_time_datasets.py b/lib/python/temporal/space_time_datasets.py
index ad3503f..303ba38 100644
--- a/lib/python/temporal/space_time_datasets.py
+++ b/lib/python/temporal/space_time_datasets.py
@@ -9,8 +9,8 @@ for details.
 :authors: Soeren Gebbert
 """
 import getpass
-from abstract_map_dataset import *
-from abstract_space_time_dataset import *
+from .abstract_map_dataset import *
+from .abstract_space_time_dataset import *
 import grass.script.array as garray
 
 ###############################################################################
@@ -73,6 +73,16 @@ class RasterDataset(AbstractMapDataset):
              | Minimum value:.............. 1.0
              | Maximum value:.............. 1.0
 
+            >>> grass.run_command("r.timestamp", map="strds_map_test_case",
+            ...                   date="2 years", quiet=True)
+            0
+            >>> rmap.read_timestamp_from_grass()
+            True
+            >>> rmap.get_temporal_extent_as_tuple()
+            (2, None)
+            >>> rmap.get_relative_time_unit()
+            'years'
+
             >>> newmap = rmap.get_new_instance("new at PERMANENT")
             >>> isinstance(newmap, RasterDataset)
             True
@@ -89,7 +99,7 @@ class RasterDataset(AbstractMapDataset):
             >>> rmap.get_temporal_extent_as_tuple()
             (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2012, 1, 1, 0, 0))
             >>> rmap.get_name()
-            'strds_map_test_case'
+            u'strds_map_test_case'
             >>> rmap.get_mapset() == mapset
             True
             >>> rmap.get_temporal_type()
@@ -392,6 +402,16 @@ class Raster3DDataset(AbstractMapDataset):
              | Number of depths:........... 10
              | Top-Bottom resolution:...... 10.0
 
+            >>> grass.run_command("r3.timestamp", map="str3ds_map_test_case",
+            ...                   date="2 years", quiet=True)
+            0
+            >>> r3map.read_timestamp_from_grass()
+            True
+            >>> r3map.get_temporal_extent_as_tuple()
+            (2, None)
+            >>> r3map.get_relative_time_unit()
+            'years'
+
             >>> newmap = r3map.get_new_instance("new at PERMANENT")
             >>> isinstance(newmap, Raster3DDataset)
             True
@@ -408,7 +428,7 @@ class Raster3DDataset(AbstractMapDataset):
             >>> r3map.get_temporal_extent_as_tuple()
             (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2012, 1, 1, 0, 0))
             >>> r3map.get_name()
-            'str3ds_map_test_case'
+            u'str3ds_map_test_case'
             >>> r3map.get_mapset() == mapset
             True
             >>> r3map.get_temporal_type()
@@ -722,6 +742,17 @@ class VectorDataset(AbstractMapDataset):
              | Number of islands .......... 0
              | Number of holes ............ 0
              | Number of volumes .......... 0
+
+            >>> grass.run_command("v.timestamp", map="stvds_map_test_case",
+            ...                   date="2 years", quiet=True)
+            0
+            >>> vmap.read_timestamp_from_grass()
+            True
+            >>> vmap.get_temporal_extent_as_tuple()
+            (2, None)
+            >>> vmap.get_relative_time_unit()
+            'years'
+
             >>> newmap = vmap.get_new_instance("new at PERMANENT")
             >>> isinstance(newmap, VectorDataset)
             True
@@ -738,7 +769,7 @@ class VectorDataset(AbstractMapDataset):
             >>> vmap.get_temporal_extent_as_tuple()
             (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2012, 1, 1, 0, 0))
             >>> vmap.get_name()
-            'stvds_map_test_case'
+            u'stvds_map_test_case'
             >>> vmap.get_mapset() == mapset
             True
             >>> vmap.get_temporal_type()
diff --git a/lib/python/temporal/spatial_extent.py b/lib/python/temporal/spatial_extent.py
index da25cec..95ef787 100644
--- a/lib/python/temporal/spatial_extent.py
+++ b/lib/python/temporal/spatial_extent.py
@@ -33,7 +33,8 @@ for details.
 
 :authors: Soeren Gebbert
 """
-from base import *
+from __future__ import print_function
+from .base import *
 
 
 class SpatialExtent(SQLDatabaseInterface):
@@ -1782,22 +1783,22 @@ class SpatialExtent(SQLDatabaseInterface):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " +-------------------- Spatial extent ----------------------------------------+"
-        print " | North:...................... " + str(self.get_north())
-        print " | South:...................... " + str(self.get_south())
-        print " | East:.. .................... " + str(self.get_east())
-        print " | West:....................... " + str(self.get_west())
-        print " | Top:........................ " + str(self.get_top())
-        print " | Bottom:..................... " + str(self.get_bottom())
+        print(" +-------------------- Spatial extent ----------------------------------------+")
+        print(" | North:...................... " + str(self.get_north()))
+        print(" | South:...................... " + str(self.get_south()))
+        print(" | East:.. .................... " + str(self.get_east()))
+        print(" | West:....................... " + str(self.get_west()))
+        print(" | Top:........................ " + str(self.get_top()))
+        print(" | Bottom:..................... " + str(self.get_bottom()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "north=" + str(self.get_north())
-        print "south=" + str(self.get_south())
-        print "east=" + str(self.get_east())
-        print "west=" + str(self.get_west())
-        print "top=" + str(self.get_top())
-        print "bottom=" + str(self.get_bottom())
+        print("north=" + str(self.get_north()))
+        print("south=" + str(self.get_south()))
+        print("east=" + str(self.get_east()))
+        print("west=" + str(self.get_west()))
+        print("top=" + str(self.get_top()))
+        print("bottom=" + str(self.get_bottom()))
 
 
 ###############################################################################
diff --git a/lib/python/temporal/spatial_topology_dataset_connector.py b/lib/python/temporal/spatial_topology_dataset_connector.py
index ffe29a3..8647f7f 100644
--- a/lib/python/temporal/spatial_topology_dataset_connector.py
+++ b/lib/python/temporal/spatial_topology_dataset_connector.py
@@ -14,6 +14,7 @@ for details.
 
 :authors: Soeren Gebbert
 """
+from __future__ import print_function
 import copy
 
 
@@ -68,7 +69,7 @@ class SpatialTopologyDatasetConnector(object):
             meet=a at P
             >>> rlist = tmr.get_spatial_relations()
             >>> if "COVER" in rlist.keys():
-            ...    print rlist["COVER"][0].get_id()
+            ...    print(rlist["COVER"][0].get_id())
             a at P
 
     """
@@ -318,54 +319,54 @@ class SpatialTopologyDatasetConnector(object):
     def print_spatial_topology_info(self):
         """Print information about this class in human readable style"""
 
-        print " +-------------------- Spatial Topology --------------------------------------+"
+        print(" +-------------------- Spatial Topology --------------------------------------+")
         #          0123456789012345678901234567890
         if self.equivalent is not None:
-            print " | Equivalent: ................ " + \
-                self._generate_map_list_string(self.equivalent)
+            print(" | Equivalent: ................ " +
+                  self._generate_map_list_string(self.equivalent))
         if self.cover is not None:
-            print " | Cover: ..................... " + \
-                self._generate_map_list_string(self.cover)
+            print(" | Cover: ..................... " +
+                  self._generate_map_list_string(self.cover))
         if self.covered is not None:
-            print " | Covered: ................... " + \
-                self._generate_map_list_string(self.covered)
+            print(" | Covered: ................... " +
+                  self._generate_map_list_string(self.covered))
         if self.overlap is not None:
-            print " | Overlap: ................... " + \
-                self._generate_map_list_string(self.overlap)
+            print(" | Overlap: ................... " +
+                  self._generate_map_list_string(self.overlap))
         if self.in_ is not None:
-            print " | In: ........................ " + \
-                self._generate_map_list_string(self.in_)
+            print(" | In: ........................ " +
+                  self._generate_map_list_string(self.in_))
         if self.contain is not None:
-            print " | Contain: ................... " + \
-                self._generate_map_list_string(self.contain)
+            print(" | Contain: ................... " +
+                  self._generate_map_list_string(self.contain))
         if self.meet is not None:
-            print " | Meet: ...................... " + \
-                self._generate_map_list_string(self.meet)
+            print(" | Meet: ...................... " +
+                  self._generate_map_list_string(self.meet))
 
     def print_spatial_topology_shell_info(self):
         """Print information about this class in shell style"""
 
         if self.equivalent is not None:
-            print "equivalent=" + self._generate_map_list_string(self.equivalent,
-                                                                 False)
+            print("equivalent=" + self._generate_map_list_string(self.equivalent,
+                                                                 False))
         if self.cover is not None:
-            print "cover=" + self._generate_map_list_string(
-                self.cover, False)
+            print("cover=" + self._generate_map_list_string(
+                  self.cover, False))
         if self.covered is not None:
-            print "covered=" + \
-                self._generate_map_list_string(self.covered, False)
+            print("covered=" +
+                  self._generate_map_list_string(self.covered, False))
         if self.overlap is not None:
-            print "overlap=" + \
-                self._generate_map_list_string(self.overlap)
+            print("overlap=" +
+                  self._generate_map_list_string(self.overlap))
         if self.in_ is not None:
-            print "in=" + \
-                self._generate_map_list_string(self.in_)
+            print("in=" +
+                  self._generate_map_list_string(self.in_))
         if self.contain is not None:
-            print "contain=" + \
-                self._generate_map_list_string(self.contain)
+            print("contain=" +
+                  self._generate_map_list_string(self.contain))
         if self.meet is not None:
-            print "meet=" + \
-                self._generate_map_list_string(self.meet)
+            print("meet=" +
+                  self._generate_map_list_string(self.meet))
 
 ###############################################################################
 
diff --git a/lib/python/temporal/spatio_temporal_relationships.py b/lib/python/temporal/spatio_temporal_relationships.py
index 05edf3f..5182165 100644
--- a/lib/python/temporal/spatio_temporal_relationships.py
+++ b/lib/python/temporal/spatio_temporal_relationships.py
@@ -17,8 +17,10 @@ for details.
 
 :authors: Soeren Gebbert
 """
-from abstract_dataset import *
-from datetime_math import *
+from __future__ import print_function
+
+from .abstract_dataset import *
+from .datetime_math import *
 import grass.lib.vector as vector
 import grass.lib.rtree as rtree
 import grass.lib.gis as gis
@@ -94,8 +96,8 @@ class SpatioTemporalTopologyBuilder(object):
             >>> for map in mapsA:
             ...     if map.get_equal():
             ...         relations = map.get_equal()
-            ...         print "Map %s has equal relation to map %s"%(map.get_name(),
-            ...               relations[0].get_name())
+            ...         print("Map %s has equal relation to map %s"%(map.get_name(),
+            ...               relations[0].get_name()))
             Map a0 has equal relation to map b0
             Map a1 has equal relation to map b1
             Map a2 has equal relation to map b2
@@ -104,8 +106,8 @@ class SpatioTemporalTopologyBuilder(object):
             >>> for map in mapsB:
             ...     if map.get_equal():
             ...         relations = map.get_equal()
-            ...         print "Map %s has equal relation to map %s"%(map.get_name(),
-            ...               relations[0].get_name())
+            ...         print("Map %s has equal relation to map %s"%(map.get_name(),
+            ...               relations[0].get_name()))
             Map b0 has equal relation to map a0
             Map b1 has equal relation to map a1
             Map b2 has equal relation to map a2
@@ -132,7 +134,7 @@ class SpatioTemporalTopologyBuilder(object):
             ...     m = map.get_temporal_relations()
             ...     for key in m.keys():
             ...         if key not in ["NEXT", "PREV"]:
-            ...             print(key, m[key][0].get_temporal_extent_as_tuple())
+            ...             print((key, m[key][0].get_temporal_extent_as_tuple()))
             (0, 1)
             ('PRECEDES', (1, 2))
             (1, 2)
@@ -171,7 +173,7 @@ class SpatioTemporalTopologyBuilder(object):
             ...     m = map.get_temporal_relations()
             ...     for key in m.keys():
             ...         if key not in ["NEXT", "PREV"]:
-            ...             print(key, m[key][0].get_temporal_extent_as_tuple())
+            ...             print((key, m[key][0].get_temporal_extent_as_tuple()))
             (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0))
             ('PRECEDES', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0)))
             (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0))
@@ -210,7 +212,7 @@ class SpatioTemporalTopologyBuilder(object):
             ...     m = map.get_temporal_relations()
             ...     for key in m.keys():
             ...         if key not in ["NEXT", "PREV"]:
-            ...             print(key, m[key][0].get_temporal_extent_as_tuple())
+            ...             print((key, m[key][0].get_temporal_extent_as_tuple()))
             (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2001, 1, 1, 0, 0))
             ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
             ('STARTS', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
@@ -254,7 +256,7 @@ class SpatioTemporalTopologyBuilder(object):
             ...     m = map.get_temporal_relations()
             ...     for key in m.keys():
             ...         if key not in ["NEXT", "PREV"]:
-            ...             print(key, m[key][0].get_temporal_extent_as_tuple())
+            ...             print((key, m[key][0].get_temporal_extent_as_tuple()))
             (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2002, 1, 1, 0, 0))
             ('OVERLAPS', (datetime.datetime(2001, 1, 1, 0, 0), datetime.datetime(2004, 1, 1, 0, 0)))
             ('DURING', (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2003, 1, 1, 0, 0)))
@@ -303,7 +305,7 @@ class SpatioTemporalTopologyBuilder(object):
             ...     m = map.get_temporal_relations()
             ...     for key in m.keys():
             ...         if key not in ["NEXT", "PREV"]:
-            ...             print(key, m[key][0].get_temporal_extent_as_tuple())
+            ...             print((key, m[key][0].get_temporal_extent_as_tuple()))
             (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2000, 1, 1, 0, 0, 2))
             ('OVERLAPS', (datetime.datetime(2000, 1, 1, 0, 0, 1), datetime.datetime(2000, 1, 1, 0, 0, 3)))
             ('PRECEDES', (datetime.datetime(2000, 1, 1, 0, 0, 2), datetime.datetime(2000, 1, 1, 0, 0, 4)))
@@ -338,7 +340,7 @@ class SpatioTemporalTopologyBuilder(object):
             ...     m = map.get_temporal_relations()
             ...     for key in m.keys():
             ...         if key not in ["NEXT", "PREV"]:
-            ...             print(key, m[key][0].get_temporal_extent_as_tuple())
+            ...             print((key, m[key][0].get_temporal_extent_as_tuple()))
             (datetime.datetime(2000, 1, 1, 0, 0), datetime.datetime(2000, 1, 1, 0, 0, 2))
             ('OVERLAPS', (datetime.datetime(2000, 1, 1, 0, 0, 1), datetime.datetime(2000, 1, 1, 0, 0, 3)))
             ('PRECEDES', (datetime.datetime(2000, 1, 1, 0, 0, 2), datetime.datetime(2000, 1, 1, 0, 0, 4)))
@@ -431,7 +433,7 @@ class SpatioTemporalTopologyBuilder(object):
         sorted_maps = sorted(
             maps, key=AbstractDatasetComparisonKeyStartTime)
 
-        for i in xrange(len(sorted_maps) - 1):
+        for i in range(len(sorted_maps) - 1):
             sorted_maps[i].set_next(sorted_maps[i + 1])
 
         for map_ in sorted_maps:
@@ -491,7 +493,7 @@ class SpatioTemporalTopologyBuilder(object):
 
         tree = rtree.RTreeCreateTree(-1, 0, dim)
 
-        for i in xrange(len(maps)):
+        for i in range(len(maps)):
 
             rect = self._map_to_rect(tree, maps[i], spatial)
             rtree.RTreeInsertRect(rect, i + 1, tree)
@@ -542,13 +544,13 @@ class SpatioTemporalTopologyBuilder(object):
 
         list_ = gis.G_new_ilist()
 
-        for j in xrange(len(mapsB)):
+        for j in range(len(mapsB)):
 
             rect = self._map_to_rect(tree, mapsB[j], spatial)
             vector.RTreeSearch2(tree, rect, list_)
             rtree.RTreeFreeRect(rect)
 
-            for k in xrange(list_.contents.n_values):
+            for k in range(list_.contents.n_values):
                 i = list_.contents.value[k] - 1
 
                 # Get the temporal relationship
diff --git a/lib/python/temporal/stds_export.py b/lib/python/temporal/stds_export.py
index 09ff8b7..7da6ef0 100644
--- a/lib/python/temporal/stds_export.py
+++ b/lib/python/temporal/stds_export.py
@@ -30,9 +30,9 @@ import os
 import tarfile
 import tempfile
 
-from space_time_datasets import *
-from factory import *
-from open_stds import *
+from .space_time_datasets import *
+from .factory import *
+from .open_stds import *
 import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
@@ -52,7 +52,8 @@ exported_maps = {}
 ############################################################################
 
 
-def _export_raster_maps_as_gdal(rows, tar, list_file, new_cwd, fs, format_):
+def _export_raster_maps_as_gdal(rows, tar, list_file, new_cwd, fs, format_,
+                                type_):
     for row in rows:
         name = row["name"]
         start = row["start_time"]
@@ -70,7 +71,7 @@ def _export_raster_maps_as_gdal(rows, tar, list_file, new_cwd, fs, format_):
             if format_ == "GTiff":
                 # Export the raster map with r.out.gdal as tif
                 out_name = name + ".tif"
-                if datatype == "CELL":
+                if datatype == "CELL" and not type_:
                     nodata = max_val + 1
                     if nodata < 256 and min_val >= 0:
                         gdal_type = "Byte"
@@ -83,6 +84,10 @@ def _export_raster_maps_as_gdal(rows, tar, list_file, new_cwd, fs, format_):
                     gscript.run_command("r.out.gdal", flags="c", input=name,
                                         output=out_name, nodata=nodata,
                                         type=gdal_type, format="GTiff")
+                elif type_:
+                    gscript.run_command("r.out.gdal", flags="cf", input=name,
+                                        output=out_name,
+                                        type=type_, format="GTiff")
                 else:
                     gscript.run_command("r.out.gdal", flags="c",
                                         input=name, output=out_name,
@@ -227,7 +232,7 @@ def _export_raster3d_maps(rows, tar, list_file, new_cwd, fs):
 
 
 def export_stds(input, output, compression, directory, where, format_="pack",
-                type_="strds"):
+                type_="strds", datatype=None):
     """Export space time datasets as tar archive with optional compression
 
         This method should be used to export space time datasets
@@ -259,6 +264,7 @@ def export_stds(input, output, compression, directory, where, format_="pack",
               - "strds" Space time raster dataset
               - "str3ds" Space time 3D raster dataset
               - "stvds" Space time vector dataset
+        :param datatype: Force the output datatype for r.out.gdal
     """
 
     # Save current working directory path
@@ -295,7 +301,7 @@ def export_stds(input, output, compression, directory, where, format_="pack",
         if type_ == "strds":
             if format_ == "GTiff" or format_ == "AAIGrid":
                 _export_raster_maps_as_gdal(
-                    rows, tar, list_file, new_cwd, fs, format_)
+                    rows, tar, list_file, new_cwd, fs, format_, datatype)
             else:
                 _export_raster_maps(rows, tar, list_file, new_cwd, fs)
         elif type_ == "stvds":
@@ -329,7 +335,9 @@ def export_stds(input, output, compression, directory, where, format_="pack",
     if sp.is_time_relative():
         string += "%s=%s\n" % ("relative_time_unit",
                                sp.get_relative_time_unit())
-    string += "%s=%s\n" % ("number_of_maps", sp.metadata.get_number_of_maps())
+    # replace sp.metadata.get_number_of_maps() with len(rows)
+    # sp.metadata.get_number_of_maps() doesn't  work with where option
+    string += "%s=%s\n" % ("number_of_maps", len(rows))
     north, south, east, west, top, bottom = sp.get_spatial_extent_as_tuple()
     string += "%s=%s\n" % ("north", north)
     string += "%s=%s\n" % ("south", south)
diff --git a/lib/python/temporal/stds_import.py b/lib/python/temporal/stds_import.py
index 4899fe9..da7c3ec 100644
--- a/lib/python/temporal/stds_import.py
+++ b/lib/python/temporal/stds_import.py
@@ -33,10 +33,10 @@ import os
 import os.path
 import tarfile
 
-from space_time_datasets import *
-from register import *
-import factory
-from factory import *
+from .space_time_datasets import *
+from .register import *
+from . import factory
+from .factory import *
 import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
@@ -53,7 +53,7 @@ imported_maps = {}
 
 
 def _import_raster_maps_from_gdal(maplist, overr, exp, location, link, format_,
-                                  set_current_region=False):
+                                  set_current_region=False, memory=300):
     impflags = ""
     if overr:
         impflags += "o"
@@ -76,7 +76,7 @@ def _import_raster_maps_from_gdal(maplist, overr, exp, location, link, format_,
                                     overwrite=gscript.overwrite())
             else:
                 gscript.run_command("r.in.gdal", input=filename,
-                                    output=name,
+                                    output=name, memory=memory,
                                     flags=impflags,
                                     overwrite=gscript.overwrite())
 
@@ -173,7 +173,8 @@ def _import_vector_maps(maplist):
 
 def import_stds(input, output, directory, title=None, descr=None, location=None,
                 link=False, exp=False, overr=False, create=False,
-                stds_type="strds", base=None, set_current_region=False):
+                stds_type="strds", base=None, set_current_region=False,
+                memory=300):
     """Import space time datasets of type raster and vector
 
         :param input: Name of the input archive file
@@ -194,6 +195,7 @@ def import_stds(input, output, directory, title=None, descr=None, location=None,
                          should be imported
         :param base: The base name of the new imported maps, it will be
                      extended using a numerical index.
+        :param memory: Cache size for raster rows, used in r.in.gdal
     """
 
     global raise_on_error
@@ -242,7 +244,7 @@ def import_stds(input, output, directory, title=None, descr=None, location=None,
         temp_file = open(temp_name, "w")
         proj_name = os.path.abspath(proj_file_name)
 
-        # We need to convert projection strings generated 
+        # We need to convert projection strings generated
         # from other programms than g.proj into
         # new line format so that the grass file comparison function
         # can be used to compare the projections
@@ -437,7 +439,8 @@ def import_stds(input, output, directory, title=None, descr=None, location=None,
         if type_ == "strds":
             if format_ == "GTiff" or format_ == "AAIGrid":
                 _import_raster_maps_from_gdal(maplist, overr, exp, location,
-                                              link, format_, set_current_region)
+                                              link, format_, set_current_region,
+                                              memory)
             if format_ == "pack":
                 _import_raster_maps(maplist, set_current_region)
         elif type_ == "stvds":
diff --git a/lib/python/temporal/temporal_algebra.py b/lib/python/temporal/temporal_algebra.py
index 2424f0a..d8f732d 100644
--- a/lib/python/temporal/temporal_algebra.py
+++ b/lib/python/temporal/temporal_algebra.py
@@ -302,14 +302,14 @@ for details.
     >>> expression =  "D = A {!:} B {:,during} C"
     >>> print(expression)
     D = A {!:} B {:,during} C
-    >>> p.parse(expression)
+    >>> ret = p.parse(expression)
     A* =  A {!:} B
     A** =  A* {:,during} C
     D = A**
     >>> expression =  "D = A {:} B {!:,during} C"
     >>> print(expression)
     D = A {:} B {!:,during} C
-    >>> p.parse(expression)
+    >>> ret = p.parse(expression)
     A* =  A {:} B
     A** =  A* {!:,during} C
     D = A**
@@ -318,56 +318,56 @@ for details.
     >>> expression =  "C = test1 : test2"
     >>> print(expression)
     C = test1 : test2
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     >>> expression =  'D = buff_t(test1,"10 months")'
     >>> print(expression)
     D = buff_t(test1,"10 months")
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     >>> expression =  'E = test2 {:,during} buff_t(test1,"1 days")'
     >>> print(expression)
     E = test2 {:,during} buff_t(test1,"1 days")
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     >>> expression =  'F = test2 {:,equal} buff_t(test1,"1 days")'
     >>> print(expression)
     F = test2 {:,equal} buff_t(test1,"1 days")
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     >>> p.debug = True
     >>> expression =  'H = tsnap(test2 {:,during} buff_t(test1, "1 days"))'
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     test1* = buff_t( test1 , " 1 days " )
     test2* =  test2 {:,during} test1*
     test2** = tsnap( test2* )
     H = test2**
     >>> expression =  'H = tshift(test2 {:,during} test1, "1 days")'
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     test2* =  test2 {:,during} test1
     test2** = tshift( test2* , " 1 days " )
     H = test2**
     >>> expression =  'H = tshift(H, 3)'
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     H* = tshift( H , 3 )
     H = H*
     >>> expression =  'C = if(td(A) == 2, A)'
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     td(A)
     td(A) == 2
     A* =  if condition None  then  A
     C = A*
     >>> expression =  'C = if(td(A) == 5, A, B)'
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     td(A)
     td(A) == 5
     A* =  if condition None  then  A  else  B
     C = A*
     >>> expression =  'C = if(td(A) == 5 || start_date(A) > "2010-01-01", A, B)'
-    >>> p.parse(expression, 'stvds')
+    >>> ret = p.parse(expression, 'stvds')
     td(A)
     td(A) == 5
     start_date A > "2010-01-01"
     None || None
     A* =  if condition None  then  A  else  B
     C = A*
-    
+
     >>> p = tgis.TemporalAlgebraLexer()
     >>> p.build()
     >>> p.debug = True
@@ -390,7 +390,7 @@ for details.
     LexToken(LPAREN,'(',1,32)
     LexToken(NAME,'C',1,33)
     LexToken(RPAREN,')',1,34)
-    
+
     >>> p = tgis.TemporalAlgebraLexer()
     >>> p.build()
     >>> p.debug = True
@@ -412,7 +412,7 @@ for details.
     LexToken(COMMA,',',1,33)
     LexToken(NAME,'A',1,35)
     LexToken(RPAREN,')',1,36)
-    
+
     >>> p = tgis.TemporalAlgebraLexer()
     >>> p.build()
     >>> p.debug = True
@@ -438,6 +438,7 @@ for details.
     LexToken(RPAREN,')',1,48)
 
 """
+from __future__ import print_function
 
 try:
     import ply.lex as lex
@@ -448,17 +449,17 @@ except:
 import os
 import copy
 import grass.pygrass.modules as pymod
-from space_time_datasets import *
-from factory import *
-from open_stds import *
-from temporal_operator import *
+from .space_time_datasets import *
+from .factory import *
+from .open_stds import *
+from .temporal_operator import *
 
 ##############################################################################
 
 class TemporalAlgebraLexer(object):
     """Lexical analyzer for the GRASS GIS temporal algebra"""
 
-    # Functions that defines an if condition, temporal buffering, snapping and 
+    # Functions that defines an if condition, temporal buffering, snapping and
     # selection of maps with temporal extent.
     conditional_functions = {
         'if'    : 'IF',
@@ -466,11 +467,12 @@ class TemporalAlgebraLexer(object):
         'tsnap'  : 'TSNAP',
         'tshift' : 'TSHIFT',
         'tmap' : 'TMAP',
+        'merge' : 'MERGE',
         'strds' : 'STRDS',
         'str3ds' : 'STR3DS',
         'stvds' : 'STVDS',
     }
-    
+
     # Variables with date and time strings
     datetime_functions = {
         'start_time'     : 'START_TIME',     # start time as HH::MM:SS
@@ -564,7 +566,7 @@ class TemporalAlgebraLexer(object):
     t_T_REL_OPERATOR     = r'\{([a-zA-Z\| ])+\}'
     t_T_SELECT           = r':'
     t_T_NOT_SELECT       = r'!:'
-    t_LPAREN             = r'\('    
+    t_LPAREN             = r'\('
     t_RPAREN             = r'\)'
     t_COMMA              = r','
     t_CEQUALS            = r'=='
@@ -580,7 +582,7 @@ class TemporalAlgebraLexer(object):
     t_QUOTE              = r'[\"\']'
 
     # These are the things that should be ignored.
-    t_ignore = ' \t'
+    t_ignore = ' \t\n'
 
     # Read time string and convert it into a date object
     def t_DATETIME(self, t):
@@ -629,7 +631,7 @@ class TemporalAlgebraLexer(object):
         t.lineno += len(t.value)
 
     def t_NAME(self, t):
-        r'[a-zA-Z_][a-zA-Z_0-9]*'
+        r'[a-zA-Z_][a-zA-Z_0-9\@]*'
         self.temporal_symbol(t)
         return t
 
@@ -648,12 +650,13 @@ class TemporalAlgebraLexer(object):
 
     # Handle errors.
     def t_error(self, t):
-        raise SyntaxError("syntax error on line %d near '%s'" %
-            (t.lineno, t.value))
+        raise SyntaxError("syntax error on line %d position %i near '%s'" %
+                          (t.lineno, t.lexpos, t.value))
 
     # Build the lexer
     def build(self,**kwargs):
-        self.lexer = lex.lex(module=self, optimize=False, debug=False, **kwargs)
+        self.lexer = lex.lex(module=self, optimize=False,
+                             nowarn=True, debug=0, **kwargs)
 
     # Just for testing
     def test(self,data):
@@ -663,7 +666,7 @@ class TemporalAlgebraLexer(object):
         while True:
              tok = self.lexer.token()
              if not tok: break
-             print tok
+             print(tok)
 
 ###############################################################################
 
@@ -735,16 +738,22 @@ class TemporalAlgebraParser(object):
         ('left', 'AND', 'OR', 'T_COMP_OPERATOR'), #2
         )
 
-    def __init__(self, pid=None, run = True, debug = False, spatial = False, 
-                        null = False, register_null = False,  nprocs = 1):
+    def __init__(self, pid=None, run=True, debug=False, spatial=False,
+                 register_null=False, dry_run=False, nprocs=1):
         self.run = run
+        self.dry_run = dry_run              # Compute the processes and output but Do not start the processes
+        self.process_chain_dict = {}        # This dictionary stores all processes, as well as the maps to register and remove
+        self.process_chain_dict["processes"] = []       # The mapcalc and v.patch module calls
+        self.process_chain_dict["register"] = []        # Maps that must be registered/updated or inserted in a new STDS
+        self.process_chain_dict["remove"] = []          # The g.remove module calls
+        self.process_chain_dict["STDS"] = {}            # The STDS that must be created
+
         self.debug = debug
         self.pid = pid
         # Intermediate vector map names
         self.names = {}
         # Count map names
         self.spatial = spatial
-        self.null = null
         self.mapset = get_current_mapset()
         self.temporaltype = None
         self.msgr = get_tgis_message_interface()
@@ -760,45 +769,45 @@ class TemporalAlgebraParser(object):
     def __del__(self):
         if self.dbif.connected:
             self.dbif.close()
-            
+
     def setup_common_granularity(self,  expression,  stdstype = 'strds',  lexer = None):
         """Configure the temporal algebra to use the common granularity of all
              space time datasets in the expression to generate the map lists.
-             
+
              This function will analyze the expression to detect space time datasets
-             and computes the common granularity  from all granularities.
-          
+             and computes the common granularity from all granularities of the input space time datasets.
+
              This granularity is then be used to generate the map lists. Hence, all
              maps from all STDS will have equidistant temporal extents. The only meaningful
-             temporal relation is "equal".
-             
+             temporal relation is therefore "equal".
+
              :param expression: The algebra expression to analyze
-             
+
              :param lexer: The temporal algebra lexer (select, raster, voxel, vector) that should be used to
                                     parse the expression, default is TemporalAlgebraLexer
-             
+
              :return: True if successful, False otherwise
- 
         """
         l = lexer
         # Split the expression to ignore the left part
         expressions = expression.split("=")[1:]
         expression = " ".join(expressions)
-        
+
         # Check if spatio-temporal operators are present in the expression
         if "{" in expression or "}" in expression:
-            self.msgr.error(_("Spatio temporal operators are not supported in granularity algebra mode"))
+            self.msgr.error(_("Spatio-temporal topological operators are not"
+                              " supported in granularity algebra mode"))
             return False
-            
+
         # detect all STDS
         if l is None:
             l = TemporalAlgebraLexer()
         l.build()
         l.lexer.input(expression)
-        
+
         name_list = []
         tokens = []
-        
+
         count = 0
         while True:
             tok = l.lexer.token()
@@ -810,12 +819,13 @@ class TemporalAlgebraParser(object):
             if count > 1:
                 if tokens[count - 2] == "MAP" or tokens[count - 2] == "TMAP":
                     ignore = True
-            
+
             if tok.type == "NAME" and ignore == False:
                 name_list.append(tok.value)
             count += 1
 
         grans = []
+        start_times = []
         ttypes = {}
         dbif, connected = init_dbif(self.dbif)
 
@@ -827,25 +837,37 @@ class TemporalAlgebraParser(object):
                 return False
 
             grans.append(stds.get_granularity())
+            start_times.append(stds.get_temporal_extent_as_tuple()[0])
             ttypes[stds.get_temporal_type()] = stds.get_temporal_type()
-        
+
         # Only one temporal type is allowed
         if len(ttypes) > 1:
             self.msgr.error(_("All input space time datasets must have the same temporal type."))
             return False
-            
+
         # Compute the common granularity
         if "absolute" in ttypes.keys():
-            self.granularity = compute_common_absolute_time_granularity(grans)
+            self.granularity = compute_common_absolute_time_granularity(grans, start_times)
         else:
             self.granularity = compute_common_relative_time_granularity(grans)
-            
+
         self.use_granularity = True
-        
+
         return True
 
-    def parse(self, expression, stdstype = 'strds', maptype = 'rast',  mapclass = RasterDataset, 
-                      basename = None, overwrite=False):
+    def parse(self, expression, stdstype='strds',
+              maptype='rast',  mapclass=RasterDataset,
+              basename=None, overwrite=False):
+        """Parse the algebra expression and run the computation
+
+        :param expression:
+        :param stdstype:
+        :param maptype:
+        :param mapclass:
+        :param basename:
+        :param overwrite:
+        :return: The process chain dictionary is dry-run was enabled, None otherwise
+        """
         self.lexer = TemporalAlgebraLexer()
         self.lexer.build()
         self.parser = yacc.yacc(module=self, debug=self.debug)
@@ -859,6 +881,8 @@ class TemporalAlgebraParser(object):
         self.expression = expression
         self.parser.parse(expression)
 
+        return self.process_chain_dict
+
     def generate_map_name(self):
         """Generate an unique  map name and register it in the objects map list
 
@@ -874,8 +898,11 @@ class TemporalAlgebraParser(object):
         self.names[name] = name
         return name
 
-    def generate_new_map(self, base_map, bool_op = 'and', copy = True,  rename = True, 
-                                              remove = False):
+    def generate_new_map(self, base_map,
+                         bool_op='and',
+                         copy=True,
+                         rename=True,
+                         remove=False):
         """Generate a new map using the spatio-temporal extent of the base map
 
            :param base_map: This map is used to create the new map
@@ -895,7 +922,7 @@ class TemporalAlgebraParser(object):
         # Create new map based on the related map list.
         map_new = base_map.get_new_instance(mapname)
         # Set initial map extend of new vector map.
-        self.overlay_map_extent(map_new, base_map, bool_op = bool_op, copy = copy)
+        self.overlay_map_extent(map_new, base_map, bool_op=bool_op, copy=copy)
         if not rename:
             name = base_map.get_id()
             map_new.set_id(name)
@@ -905,8 +932,12 @@ class TemporalAlgebraParser(object):
         map_new.uid = name
         return map_new
 
-    def overlay_map_extent(self, mapA, mapB, bool_op = None, temp_op = 'l',
-                            copy = False):
+    def overlay_map_extent(self,
+                           mapA,
+                           mapB,
+                           bool_op=None,
+                           temp_op='l',
+                           copy=False):
         """Compute the spatio-temporal extent of two topological related maps
 
            :param mapA: The first map
@@ -964,7 +995,7 @@ class TemporalAlgebraParser(object):
                 if temp_ext != None:
                     mapA.set_temporal_extent(temp_ext)
                 else:
-                    returncode = 0                   
+                    returncode = 0
             elif temp_op == 'd':
                 temp_ext = mapA.temporal_disjoint_union(mapB)
                 if temp_ext != None:
@@ -976,55 +1007,58 @@ class TemporalAlgebraParser(object):
                 if temp_ext != None:
                     mapA.set_temporal_extent(temp_ext)
                 else:
-                    returncode = 0 
+                    returncode = 0
         return(returncode)
 
-    def set_temporal_extent_list(self, maplist, topolist = ["EQUAL"], temporal = 'l' ):
-        """ Change temporal extent of map list based on temporal relations to 
+    def set_temporal_extent_list(self,
+                                 maplist,
+                                 topolist=["EQUAL"],
+                                 temporal='l' ):
+        """ Change temporal extent of map list based on temporal relations to
                 other map list and given temporal operator.
 
-            :param maplist: List of map objects for which relations has been build 
-                                        correctely.
+            :param maplist: List of map objects for which relations has been build
+                                        correctly.
             :param topolist: List of strings of temporal relations.
             :param temporal: The temporal operator specifying the temporal
-                                            extent operation (intersection, union, disjoint 
+                                            extent operation (intersection, union, disjoint
                                             union, right reference, left reference).
 
             :return: Map list with specified temporal extent.
         """
         resultdict = {}
-        
+
         for map_i in maplist:
             # Loop over temporal related maps and create overlay modules.
             tbrelations = map_i.get_temporal_relations()
             # Generate an intermediate map for the result map list.
-            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', 
-                                                                        copy = True,  rename = True)
+            map_new = self.generate_new_map(base_map=map_i, bool_op='and',
+                                            copy=True,  rename=True)
             # Combine temporal and spatial extents of intermediate map with related maps.
             for topo in topolist:
                 if topo in tbrelations.keys():
                     for map_j in (tbrelations[topo]):
                         if temporal == 'r':
                             # Generate an intermediate map for the result map list.
-                            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', 
-                                                                                        copy = True,  rename = True)
+                            map_new = self.generate_new_map(base_map=map_i, bool_op='and',
+                                                            copy=True,  rename=True)
                         # Create overlayed map extent.
-                        returncode = self.overlay_map_extent(map_new, map_j, 'and', \
-                                                                temp_op = temporal)
+                        returncode = self.overlay_map_extent(map_new, map_j, 'and',
+                                                             temp_op=temporal)
                         # Stop the loop if no temporal or spatial relationship exist.
                         if returncode == 0:
                             break
                         # Append map to result map list.
                         elif returncode == 1:
-                            print(map_new.get_id() + " " + str(map_new.get_temporal_extent_as_tuple()))
-                            print(map_new.condition_value)
+                            # print(map_new.get_id() + " " + str(map_new.get_temporal_extent_as_tuple()))
+                            # print(map_new.condition_value)
                             # print(map_new.cmd_list)
                             # resultlist.append(map_new)
                             resultdict[map_new.get_id()] = map_new
-        
+
                         # Create r.mapcalc expression string for the operation.
-                        #cmdstring = self.build_command_string(s_expr_a = map_new,  
-                        #                                                                s_expr_b = map_j,  
+                        #cmdstring = self.build_command_string(s_expr_a = map_new,
+                        #                                                                s_expr_b = map_j,
                         #                                                                operator = function)
                         # Conditional append of module command.
                         #map_new.cmd_list = cmdstring
@@ -1036,32 +1070,34 @@ class TemporalAlgebraParser(object):
         # Get sorted map objects as values from result dictionoary.
         resultlist = resultdict.values()
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
-        
+
         return(resultlist)
-    
+
     ######################### Temporal functions ##############################
 
     def remove_maps(self):
         """Removes empty or intermediate maps of different type.
         """
-        
+
         map_names = {}
         map_names["raster"] = []
         map_names["raster3d"] = []
         map_names["vector"] = []
-                
+
         if self.removable_maps:
             for map in self.removable_maps.values():
                     map_names[map.get_type()].append(map.get_name())
-        
+
         for key in map_names.keys():
             if map_names[key]:
                 self.msgr.message(_("Removing un-needed or empty %s maps"%(key)))
                 self._remove_maps(map_names[key],  key)
 
-    def _remove_maps(self,  namelist,  map_type):
+    def _remove_maps(self,
+                     namelist,
+                     map_type):
         """Remove maps of specific type
-        
+
             :param namelist: List of map names to be removed
             :param map_type: The type of the maps  (raster, raster_3d or vector)
         """
@@ -1069,26 +1105,32 @@ class TemporalAlgebraParser(object):
         chunklist = [namelist[i:i + max] for i in range(0, len(namelist), max)]
         for chunk in chunklist:
             stringlist = ",".join(chunk)
-            
+
             if self.run:
                 m = copy.deepcopy(self.m_mremove)
                 m.inputs["type"].value = map_type
                 m.inputs["name"].value = stringlist
                 m.flags["f"].value = True
-                print m.get_bash()
-                m.run()
+                # print(m.get_bash())
+                self.process_chain_dict["remove"].append(m.get_dict())
 
-    def check_stds(self, input, clear = False,  stds_type = None,  check_type=True):
-        """ Check if input space time dataset exist in database and return its map list.
+                if self.dry_run is False:
+                    m.run()
 
-            :param input: Name of space time data set as string or list of maps.
-            :param clear: Reset the stored conditional values to empty list.
-            :param check_type: Check the type of the space time dataset to match the global stds type
-            :param stds_type: The type of the space time dataset to be opened, if not provided 
-                                          then self.stdstype will be used
+    def check_stds(self,
+                   input,
+                   clear=False,
+                   stds_type=None,
+                   check_type=True):
+        """ Check if input space time dataset exist in database and return its map list.
 
-            :return: List of maps.
+        :param input: Name of space time data set as string or list of maps.
+        :param clear: Reset the stored conditional values to empty list.
+        :param check_type: Check the type of the space time dataset to match the global stds type
+        :param stds_type: The type of the space time dataset to be opened, if not provided
+                                      then self.stdstype will be used
 
+        :return: List of maps.
         """
         if isinstance(input, str):
             # Check for mapset in given stds input.
@@ -1102,7 +1144,7 @@ class TemporalAlgebraParser(object):
             else:
                 stds = dataset_factory(self.stdstype, id_input)
             # Check for occurrence of space time dataset.
-            if stds.is_in_db(dbif=self.dbif) == False:
+            if stds.is_in_db(dbif=self.dbif) is False:
                 raise FatalError(_("Space time %s dataset <%s> not found") %
                     (stds.get_new_map_instance(None).get_type(), id_input))
             else:
@@ -1111,7 +1153,8 @@ class TemporalAlgebraParser(object):
                 if self.use_granularity:
                     # We create the maplist out of the map array from none-gap objects
                     maplist = []
-                    map_array = stds.get_registered_maps_as_objects_by_granularity(gran=self.granularity,  dbif=self.dbif)
+                    map_array = stds.get_registered_maps_as_objects_by_granularity(gran=self.granularity,
+                                                                                   dbif=self.dbif)
                     for entry in map_array:
                         # Ignore gap objects
                         if entry[0].get_id() is not None:
@@ -1125,9 +1168,9 @@ class TemporalAlgebraParser(object):
                     if "condition_value" not in dir(map_i):
                         map_i.condition_value = []
                     # Set and check global temporal type variable and map.
-                    if map_i.is_time_absolute() and self.temporaltype == None:
+                    if map_i.is_time_absolute() and self.temporaltype is None:
                         self.temporaltype = 'absolute'
-                    elif map_i.is_time_relative() and self.temporaltype == None:
+                    elif map_i.is_time_relative() and self.temporaltype is None:
                         self.temporaltype = 'relative'
                     elif map_i.is_time_absolute() and self.temporaltype == 'relative':
                         self.msgr.fatal(_("Wrong temporal type of space time dataset <%s> \
@@ -1137,11 +1180,11 @@ class TemporalAlgebraParser(object):
                         self.msgr.fatal(_("Wrong temporal type of space time dataset <%s> \
                                       <%s> time is required") %
                                      (id_input, self.temporaltype))
-        elif isinstance(input,  self.mapclass):
+        elif isinstance(input, self.mapclass):
             # Check if the input is a single map and return it as list with one entry.
             maplist = [input]
-        
-        elif isinstance(input,  list):
+
+        elif isinstance(input, list):
             maplist = input
             # Create map_value as empty list item.
             for map_i in maplist:
@@ -1155,20 +1198,26 @@ class TemporalAlgebraParser(object):
                     map_i.condition_value = []
         else:
             self.msgr.fatal(_("Wrong type of input " + str(input)))
-            
+
         # We generate a unique map id that will be used
-        # in the topology analysis, since the maplist can 
-        # contain maps with equal map ids 
+        # in the topology analysis, since the maplist can
+        # contain maps with equal map ids
         for map in maplist:
             map.uid = self.generate_map_name()
             if self.debug:
-                print map.get_name(), map.uid,  map.get_temporal_extent_as_tuple()
-        
+                print(map.get_name(), map.uid,  map.get_temporal_extent_as_tuple())
+
         return(maplist)
 
-    def get_temporal_topo_list(self, maplistA, maplistB = None, topolist = ["EQUAL"],
-                               assign_val = False, count_map = False, compare_bool = False,  
-                               compop = None, aggregate = None):
+    def get_temporal_topo_list(self,
+                               maplistA,
+                               maplistB=None,
+                               topolist=["EQUAL"],
+                               assign_val=False,
+                               count_map=False,
+                               compare_bool=False,
+                               compop=None,
+                               aggregate=None):
         """Build temporal topology for two space time data sets, copy map objects
           for given relation into map list.
 
@@ -1184,7 +1233,7 @@ class TemporalAlgebraParser(object):
                             related map list and compariosn operator.
           :param compop: Comparison operator, && or ||.
           :param aggregate: Aggregation operator for relation map list, & or |.
-          
+
           :return: List of maps from maplistA that fulfil the topological relationships
                   to maplistB specified in topolist.
 
@@ -1212,8 +1261,8 @@ class TemporalAlgebraParser(object):
               >>> for map in resultlist:
               ...     if map.get_equal():
               ...         relations = map.get_equal()
-              ...         print "Map %s has equal relation to map %s"%(map.get_name(),
-              ...               relations[0].get_name())
+              ...         print("Map %s has equal relation to map %s"%(map.get_name(),
+              ...               relations[0].get_name()))
               Map a0 has equal relation to map b0
               Map a1 has equal relation to map b1
               Map a2 has equal relation to map b2
@@ -1245,8 +1294,8 @@ class TemporalAlgebraParser(object):
               >>> for map in resultlist:
               ...     if map.get_starts():
               ...         relations = map.get_starts()
-              ...         print "Map %s has start relation to map %s"%(map.get_name(),
-              ...               relations[0].get_name())
+              ...         print("Map %s has start relation to map %s"%(map.get_name(),
+              ...               relations[0].get_name()))
               Map a0 has start relation to map b0
               Map a1 has start relation to map b1
               Map a2 has start relation to map b2
@@ -1260,8 +1309,8 @@ class TemporalAlgebraParser(object):
               >>> for map in resultlist:
               ...     if map.get_during():
               ...         relations = map.get_during()
-              ...         print "Map %s has during relation to map %s"%(map.get_name(),
-              ...               relations[0].get_name())
+              ...         print("Map %s has during relation to map %s"%(map.get_name(),
+              ...               relations[0].get_name()))
               Map a0 has during relation to map b0
               Map a1 has during relation to map b0
               Map a2 has during relation to map b1
@@ -1363,22 +1412,25 @@ class TemporalAlgebraParser(object):
                     # Use unique identifier, since map names may be equal
                     resultdict[map_i.uid] = map_i
         resultlist = resultdict.values()
-        
+
         # Sort list of maps chronological.
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
-        
+
         return(resultlist)
-    
-    def assign_bool_value(self,  map_i, tbrelations, topolist = ["EQUAL"]):
-        """ Function to assign boolean map value based on the map_values from the 
-                compared map list by topological relationships.
-                
+
+    def assign_bool_value(self,
+                          map_i,
+                          tbrelations,
+                          topolist=["EQUAL"]):
+        """ Function to assign boolean map value based on the map_values from the
+        compared map list by topological relationships.
+
           :param map_i: Map object with temporal extent.
           :param tbrelations: List of temporal relation to map_i.
           :param topolist: List of strings for given temporal relations.
-          
-          :return: Map object with conditional value that has been assigned by 
-                        relation maps that fulfil the topological relationships to 
+
+          :return: Map object with conditional value that has been assigned by
+                        relation maps that fulfil the topological relationships to
                         maplistB specified in topolist.
         """
         condition_value_list = []
@@ -1397,19 +1449,24 @@ class TemporalAlgebraParser(object):
         else:
             resultbool = False
         map_i.condition_value = [resultbool]
-        
+
         return(resultbool)
 
-    def compare_bool_value(self,  map_i, tbrelations, compop, aggregate,  topolist = ["EQUAL"]):
-        """ Function to evaluate two map lists with boolean values by boolean 
-            comparison operator. 
-            
+    def compare_bool_value(self,
+                           map_i,
+                           tbrelations,
+                           compop,
+                           aggregate,
+                           topolist=["EQUAL"]):
+        """ Function to evaluate two map lists with boolean values by boolean
+            comparison operator.
+
           :param map_i: Map object with temporal extent.
           :param tbrelations: List of temporal relation to map_i.
           :param topolist: List of strings for given temporal relations.
           :param compop: Comparison operator, && or ||.
           :param aggregate: Aggregation operator for relation map list, & or |.
-          
+
           :return: Map object with conditional value that has been evaluated by
                         comparison operators.
         """
@@ -1441,37 +1498,41 @@ class TemporalAlgebraParser(object):
             print(resultbool)
         # Add boolean value to result list.
         map_i.condition_value = [resultbool]
-        
+
         return(resultbool)
-    
+
     def eval_toperator(self, operator, optype = 'relation'):
         """This function evaluates a string containing temporal operations.
 
          :param operator: String of temporal operations, e.g. {!=,equal|during,l}.
          :param optype: String to define operator type.
-         
+
          :return :List of temporal relations (equal, during), the given function
           (!:) and the interval/instances (l).
-          
+
         .. code-block:: python
-        
+
              >>> import grass.temporal as tgis
              >>> tgis.init()
              >>> p = tgis.TemporalOperatorParser()
              >>> operator = "{+, during}"
              >>> p.parse(operator, optype = 'raster')
-             >>> print(p.relations, p.temporal, p.function)
+             >>> print((p.relations, p.temporal, p.function))
              (['during'], 'l', '+')
 
         """
         p = TemporalOperatorParser()
         p.parse(operator, optype)
         p.relations = [rel.upper() for rel in p.relations]
-        
+
         return(p.relations, p.temporal, p.function,  p.aggregate)
 
-    def perform_temporal_selection(self, maplistA, maplistB, topolist = ["EQUAL"],
-                                   inverse = False, assign_val = False):
+    def perform_temporal_selection(self,
+                                   maplistA,
+                                   maplistB,
+                                   topolist=["EQUAL"],
+                                   inverse=False,
+                                   assign_val=False):
         """This function performs temporal selection operation.
 
           :param maplistA:   List of maps representing the left side of a temporal
@@ -1512,8 +1573,8 @@ class TemporalAlgebraParser(object):
               >>> for map in resultlist:
               ...     if map.get_equal():
               ...         relations = map.get_equal()
-              ...         print "Map %s has equal relation to map %s"%(map.get_name(),
-              ...               relations[0].get_name())
+              ...         print("Map %s has equal relation to map %s"%(map.get_name(),
+              ...               relations[0].get_name()))
               Map a5 has equal relation to map b0
               Map a6 has equal relation to map b1
               Map a7 has equal relation to map b2
@@ -1523,7 +1584,7 @@ class TemporalAlgebraParser(object):
               ...                                           True)
               >>> for map in resultlist:
               ...     if not map.get_equal():
-              ...         print "Map %s has no equal relation to mapset mapsB"%(map.get_name())
+              ...         print("Map %s has no equal relation to mapset mapsB"%(map.get_name()))
               Map a0 has no equal relation to mapset mapsB
               Map a1 has no equal relation to mapset mapsB
               Map a2 has no equal relation to mapset mapsB
@@ -1551,7 +1612,11 @@ class TemporalAlgebraParser(object):
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
         return(resultlist)
 
-    def set_granularity(self, maplistA, maplistB, toperator = 'l', topolist = ["EQUAL"]):
+    def set_granularity(self,
+                        maplistA,
+                        maplistB,
+                        toperator='l',
+                        topolist=["EQUAL"]):
         """This function sets the temporal extends of a list of maps based on
              another map list.
 
@@ -1597,8 +1662,8 @@ class TemporalAlgebraParser(object):
               a8 at B - start: 8 end: 10
 
         """
-        topologylist = ["EQUAL", "FOLLOWS", "PRECEDES", "OVERLAPS", "OVERLAPPED", \
-                        "DURING", "STARTS", "FINISHES", "CONTAINS", "STARTED", \
+        topologylist = ["EQUAL", "FOLLOWS", "PRECEDES", "OVERLAPS", "OVERLAPPED",
+                        "DURING", "STARTS", "FINISHES", "CONTAINS", "STARTED",
                         "FINISHED"]
 
         for topo in topolist:
@@ -1659,7 +1724,7 @@ class TemporalAlgebraParser(object):
             if unchanged == True:
                 if self.debug:
                     print('Leave temporal extend of result map: ' +  map_i.get_map_id() + ' unchanged.')
-        
+
         resultlist = resultdict.values()
         # Sort list of maps chronological.
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
@@ -1679,7 +1744,7 @@ class TemporalAlgebraParser(object):
           :return: Dictionary with temporal functions for given input map.
 
           .. code-block:: python
-          
+
               >>> import grass.temporal as tgis
               >>> import datetime
               >>> tgis.init()
@@ -1820,7 +1885,7 @@ class TemporalAlgebraParser(object):
                 map_i.condition_value = boolname
         return(maplist)
 
-    def eval_map_list(self, maplist ,thenlist, topolist = ["EQUAL"]):
+    def eval_map_list(self, maplist ,thenlist, topolist=["EQUAL"]):
         """ This function transfers boolean values from temporal expression
              from one map list to another by their topology. These boolean
              values are added to the maps as condition_value.
@@ -1834,30 +1899,30 @@ class TemporalAlgebraParser(object):
         # Get topology of then statement map list in relation to the other maplist
         # and assign boolean values of the maplist to the thenlist.
         containlist = self.perform_temporal_selection(thenlist, maplist,
-                                                        assign_val = True,
-                                                        topolist = topolist)
+                                                      assign_val=True,
+                                                      topolist=topolist)
         # Inverse selection of maps from thenlist and assigning False values.
         #excludelist = self.perform_temporal_selection(thenlist, maplist,
-         #                                               assign_val = True,
-          #                                              inverse = True,
-          #                                              topolist = topolist)
+        #                                              assign_val = True,
+        #                                              inverse = True,
+        #                                              topolist = topolist)
         # Combining the selection and inverse selection list.
         resultlist = containlist# + excludelist
 
         return(resultlist)
 
-    def build_condition_list(self, tvarexpr, thenlist,  topolist = ["EQUAL"]):
+    def build_condition_list(self, tvarexpr, thenlist,  topolist=["EQUAL"]):
         """ This function evaluates temporal variable expressions of a conditional
              expression in two steps.
              At first it combines stepwise the single conditions by their relations with LALR.
-             In this prossess sub condition map lists will be created which will include 
-             information of the underlying single conditions. Important: The temporal 
-             relations between conditions are evaluated by implicit aggregation. 
-             In the second step the aggregated condition map list will be compared with the 
+             In this prossess sub condition map lists will be created which will include
+             information of the underlying single conditions. Important: The temporal
+             relations between conditions are evaluated by implicit aggregation.
+             In the second step the aggregated condition map list will be compared with the
              map list of conclusion statements by the given temporal relation.
-             
-             The result is writen as 'condition_value' attribute to the resulting map objects. 
-             These attribute consists of boolean expressions and operators which can be 
+
+             The result is writen as 'condition_value' attribute to the resulting map objects.
+             These attribute consists of boolean expressions and operators which can be
              evaluated with the eval_condition_list function.
              [True,  '||', False, '&&', True]
 
@@ -1870,17 +1935,17 @@ class TemporalAlgebraParser(object):
 
              :param thenlist: Map list object of the conclusion statement.
                          It will be compared and evaluated by the conditions.
-          
-             :param topolist: List of temporal relations between the conditions and the 
+
+             :param topolist: List of temporal relations between the conditions and the
                          conclusions.
-                          
+
              :return: Map list with conditional values for all temporal expressions.
 
         """
-        
-        # Evaluate the temporal variable expression and compute the temporal combination 
+
+        # Evaluate the temporal variable expression and compute the temporal combination
         # of conditions.
-        
+
         # Check if the input expression is a valid single global variable.
         if isinstance(tvarexpr, GlobalTemporalVar) and tvarexpr.get_type() == "global" :
             # Use method eval_global_var to evaluate expression.
@@ -1891,10 +1956,6 @@ class TemporalAlgebraParser(object):
             resultlist = self.eval_map_list(tvarexpr, thenlist, topolist)
         elif len(tvarexpr) % 2 != 0:
             # Define variables for map list comparisons.
-            left_obj = []
-            operator = []
-            right_obj =[]
-            count = 0
             #self.msgr.fatal("Condition list is not complete. Elements missing")
             for iter in range(len(tvarexpr)):
                 expr = tvarexpr[iter]
@@ -1927,14 +1988,14 @@ class TemporalAlgebraParser(object):
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
 
         return(resultlist)
-        
+
     def eval_condition_list(self, maplist, inverse = False):
         """ This function evaluates conditional values of a map list.
              A recursive function is used to evaluate comparison statements
              from left to right in the given conditional list.
 
-             For example: 
-            
+             For example::
+
                   - [True,  '||', False, '&&', True]  -> True
                   - [True,  '||', False, '&&', False] -> False
                   - [True,  '&&', False, '&&', True]  -> False
@@ -1955,7 +2016,6 @@ class TemporalAlgebraParser(object):
             for ele in conditionlist:
                 if ele == '||':
                     ele_index = conditionlist.index(ele)
-                    topolist = conditionlist.pop(ele_index -1)
                     right = conditionlist.pop(ele_index)
                     left  = conditionlist.pop(ele_index - 2)
                     if any([left, right]):
@@ -1966,7 +2026,6 @@ class TemporalAlgebraParser(object):
                     recurse_compare(conditionlist)
                 if ele == '&&':
                     ele_index = conditionlist.index(ele)
-                    topolist = conditionlist.pop(ele_index -1)
                     right = conditionlist.pop(ele_index)
                     left  = conditionlist.pop(ele_index - 2)
                     if all([left, right]):
@@ -1975,6 +2034,7 @@ class TemporalAlgebraParser(object):
                         result = False
                     conditionlist[ele_index - 2] = result
                     recurse_compare(conditionlist)
+
             resultlist = conditionlist
 
             return(resultlist)
@@ -2013,43 +2073,47 @@ class TemporalAlgebraParser(object):
         """
         if self.run:
             dbif, connected = init_dbif(self.dbif)
-            map_stds_type = None
             map_type = None
             if isinstance(t[3], list):
                 num = len(t[3])
                 count = 0
-                register_list = []      
+                register_list = []
                 if num > 0:
-                    process_queue = pymod.ParallelModuleQueue(int(self.nprocs))
+
+                    if self.dry_run is False:
+                        process_queue = pymod.ParallelModuleQueue(int(self.nprocs))
+
                     for map_i in t[3]:
-                        # Test if temporal extents have been changed by temporal 
-                        # relation operators (i|r). 
+                        # Check if the map type and stds type are compatible
                         if count == 0:
                             maps_stds_type = map_i.get_new_stds_instance(None).get_type()
                             map_type = map_i.get_type()
                             if maps_stds_type != self.stdstype:
-                                self.msgr.warning(_("The resulting space time dataset type <%(a)s> is "\
-                                                                "different from the requested type <%(b)s>"\
-                                                                %({"a":maps_stds_type,  "b":self.stdstype})))
+                                self.msgr.warning(_("The resulting space time dataset type <%(a)s> is "
+                                                    "different from the requested type <%(b)s>"
+                                                    %({"a":maps_stds_type,  "b":self.stdstype})))
                         else:
                             map_type_2 = map_i.get_type()
                             if map_type != map_type_2:
                                 self.msgr.fatal(_("Maps that should be registered in the "\
-                                                           "resulting space time dataset have different types."))
-
-                        map_i_extent = map_i.get_temporal_extent_as_tuple()
-                        map_test = map_i.get_new_instance(map_i.get_id())
-                        map_test.select(dbif)
-                        map_test_extent = map_test.get_temporal_extent_as_tuple()
-                        if map_test_extent != map_i_extent:
+                                                  "resulting space time dataset have different types."))
+                        count += 1
+
+                        # Test if temporal extents was been modified by temporal
+                        # relation operators (i|r).
+                        # If it was modified, then the map will be copied
+                        map_a_extent = map_i.get_temporal_extent_as_tuple()
+                        map_b = map_i.get_new_instance(map_i.get_id())
+                        map_b.select(dbif)
+                        map_b_extent = map_b.get_temporal_extent_as_tuple()
+                        if map_a_extent != map_b_extent:
                             # Create new map with basename
                             newident = self.basename + "_" + str(count)
                             map_result = map_i.get_new_instance(newident + "@" + self.mapset)
 
-                            if map_test.map_exists() and self.overwrite == False:
-                                self.msgr.fatal("Error raster maps with basename %s exist. "\
-                                                        "Use --o flag to overwrite existing file" \
-                                                        %(mapname))
+                            if map_result.map_exists() and self.overwrite == False:
+                                self.msgr.fatal("Error raster maps with basename %s exist. "
+                                                "Use --o flag to overwrite existing file"%map_i.get_id())
 
                             map_result.set_temporal_extent(map_i.get_temporal_extent())
                             map_result.set_spatial_extent(map_i.get_spatial_extent())
@@ -2058,69 +2122,94 @@ class TemporalAlgebraParser(object):
                             register_list.append(map_result)
 
                             # Copy the map
+                            m = copy.deepcopy(self.m_copy)
+                            m.flags["overwrite"].value = self.overwrite
+
                             if map_i.get_type() == 'raster':
-                                m = copy.deepcopy(self.m_copy)
-                                m.inputs["raster"].value = map_i.get_id(),  newident
-                                m.flags["overwrite"].value = self.overwrite
-                                process_queue.put(m)
+                                m.inputs["raster"].value = map_i.get_id(), newident
                             elif map_i.get_type() == 'raster3d':
-                                m = copy.deepcopy(self.m_copy)
-                                m.inputs["raster_3d"].value = map_i.get_id(),  newident
-                                m.flags["overwrite"].value = self.overwrite
-                                process_queue.put(m)
+                                m.inputs["raster_3d"].value = map_i.get_id(), newident
                             elif map_i.get_type() == 'vector':
-                                m = copy.deepcopy(self.m_copy)
-                                m.inputs["vector"].value = map_i.get_id(),  newident
-                                m.flags["overwrite"].value = self.overwrite
+                                m.inputs["vector"].value = map_i.get_id(), newident
+
+                            # Add the process description to the dict
+                            self.process_chain_dict["processes"].append(m.get_dict())
+
+                            if self.dry_run is False:
                                 process_queue.put(m)
                         else:
                             register_list.append(map_i)
-                        count  += 1
 
                     # Wait for running processes
-                    process_queue.wait()
-                    
+                    if self.dry_run is False:
+                        process_queue.wait()
+
                     # Open connection to temporal database.
-                    # Create result space time dataset based on the map stds type        
-                    resultstds = open_new_stds(t[1],maps_stds_type, \
-                                                             'absolute', t[1], t[1], \
-                                                             'mean', self.dbif, \
-                                                             overwrite = self.overwrite)                            
-                    for map_i in register_list:                
+                    # Create result space time dataset based on the map stds type
+                    if self.dry_run is False:
+                        resultstds = open_new_stds(t[1],maps_stds_type,
+                                                   'absolute', t[1], t[1],
+                                                   'mean', self.dbif,
+                                                   overwrite=self.overwrite)
+
+                    for map_i in register_list:
                         # Get meta data from grass database.
                         map_i.load()
+
+                        # Put the map into the process dictionary
+                        start, end = map_i.get_temporal_extent_as_tuple()
+                        self.process_chain_dict["register"].append((map_i.get_name(), str(start), str(end)))
+
                         # Check if temporal extents have changed and a new map was created
-                        if hasattr(map_i,  "is_new") is True:
+                        if hasattr(map_i, "is_new") is True:
                             # Do not register empty maps if not required
                             # In case of a null map continue, do not register null maps
-                            if map_i.metadata.get_min() is None and \
-                               map_i.metadata.get_max() is None:
-                                if not self.register_null:
-                                    self.removable_maps[map_i.get_name()] = map_i
-                                    continue
+
+                            if map_i.get_type() is "raster" or map_i.get_type() is "raster3d":
+                                if map_i.metadata.get_min() is None and \
+                                   map_i.metadata.get_max() is None:
+                                    if not self.register_null:
+                                        self.removable_maps[map_i.get_name()] = map_i
+                                        continue
+
                             if map_i.is_in_db(dbif) and self.overwrite:
                                 # Update map in temporal database.
-                                map_i.update_all(dbif)
-                            elif map_i.is_in_db(dbif) and self.overwrite == False:
+                                if self.dry_run is False:
+                                    map_i.update_all(dbif)
+                            elif map_i.is_in_db(dbif) and self.overwrite is False:
                                 # Raise error if map exists and no overwrite flag is given.
                                 self.msgr.fatal("Error map %s exist in temporal database. "
-                                                        "Use overwrite flag.  : \n%s" \
-                                                        %(map_i.get_map_id(), cmd.popen.stderr))
+                                                "Use overwrite flag."%map_i.get_map_id())
                             else:
                                 # Insert map into temporal database.
-                                map_i.insert(dbif)
+                                if self.dry_run is False:
+                                    map_i.insert(dbif)
+
                         # Register map in result space time dataset.
-                        success = resultstds.register_map(map_i, dbif)
-                    resultstds.update_from_registered_maps(dbif)
+                        if self.dry_run is False:
+                            success = resultstds.register_map(map_i, dbif)
+                            if not success:
+                                self.msgr.warning("Unabe to register map layers "
+                                                  "in STDS %s"%(t[1]))
+
+                    if self.dry_run is False:
+                        resultstds.update_from_registered_maps(dbif)
+
+                    self.process_chain_dict["STDS"]["name"] = t[1]
+                    self.process_chain_dict["STDS"]["stdstype"] = self.stdstype
+                    self.process_chain_dict["STDS"]["temporal_type"] = 'absolute'
+
                 elif num == 0:
-                    self.msgr.warning("Empty result space time dataset. "\
-                                                  "No map has been registered in %s"  %(t[1] ))
+                    self.msgr.warning("Empty result space time dataset. "
+                                      "No map has been registered in %s"%(t[1]))
                     # Open connection to temporal database.
-                    # Create result space time dataset.                        
-                    resultstds = open_new_stds(t[1], self.stdstype, \
-                                                             'absolute', t[1], t[1], \
-                                                             'mean', dbif, \
-                                                             overwrite = self.overwrite)
+                    # Create result space time dataset.
+                    if self.dry_run is False:
+                        resultstds = open_new_stds(t[1], self.stdstype,
+                                                   'absolute', t[1], t[1],
+                                                   'mean', dbif,
+                                                   overwrite=self.overwrite)
+
             if connected:
                 dbif.close()
             t[0] = t[3]
@@ -2128,7 +2217,7 @@ class TemporalAlgebraParser(object):
             t[0] = t[3]
 
         if self.debug:
-            print t[1], "=", t[3]
+            print(t[1], "=", t[3])
 
     def p_stds_1(self, t):
         # Definition of a space time dataset
@@ -2149,50 +2238,50 @@ class TemporalAlgebraParser(object):
 
     def p_expr_strds_function(self, t):
         # Explicitly specify a space time raster dataset
-        # R = A : strds(B) 
+        # R = A : strds(B)
         """
         expr : STRDS LPAREN stds RPAREN
         """
         if self.run:
-            t[0] = self.check_stds(t[3], stds_type = "strds",  check_type=False)
+            t[0] = self.check_stds(t[3], stds_type = "strds", check_type=False)
         else:
             t[0] = t[3]
             if self.debug:
-                print "Opening STRDS: ",  t[0]
+                print("Opening STRDS: ",  t[0])
 
     def p_expr_str3ds_function(self, t):
         # Explicitly specify a space time raster dataset
-        # R = A : str3ds(B) 
+        # R = A : str3ds(B)
         """
         expr : STR3DS LPAREN stds RPAREN
         """
         if self.run:
-            t[0] = self.check_stds(t[3], stds_type = "str3ds",  check_type=False)
+            t[0] = self.check_stds(t[3], stds_type = "str3ds", check_type=False)
         else:
             t[0] = t[3]
             if self.debug:
-                print "Opening STR3DS: ",  t[0]
+                print("Opening STR3DS: ",  t[0])
 
     def p_expr_stvds_function(self, t):
         # Explicitly specify a space time vector dataset
-        # R = A : stvds(B) 
+        # R = A : stvds(B)
         """
         expr : STVDS LPAREN stds RPAREN
         """
         if self.run:
-            print t[3]
-            t[0] = self.check_stds(t[3], stds_type = "stvds",  check_type=False)
+            print(t[3])
+            t[0] = self.check_stds(t[3], stds_type = "stvds", check_type=False)
         else:
             t[0] = t[3]
             if self.debug:
-                print "Opening STVDS: ",  t[0]
+                print("Opening STVDS: ",  t[0])
 
     def p_expr_tmap_function(self, t):
         # Add a single map.
-        # Only the spatial extent of the map is evaluated. 
+        # Only the spatial extent of the map is evaluated.
         # Temporal extent is not existing.
         # Examples:
-        #    R = tmap(A) 
+        #    R = tmap(A)
         """
         expr : TMAP LPAREN stds RPAREN
         """
@@ -2210,53 +2299,105 @@ class TemporalAlgebraParser(object):
                 # Check for occurrence of space time dataset.
                 if map_i.map_exists() == False:
                     raise FatalError(_("%s map <%s> not found in GRASS spatial database") %
-                        (map_i.get_type(), id_input))
+                                      (map_i.get_type(), id_input))
                 else:
                     # Select dataset entry from database.
                     map_i.select(dbif=self.dbif)
             else:
-                raise FatalError(_("Wrong map type <%s> . TMAP only supports single "\
-                                             "maps that are registered in the temporal GRASS database")\
-                                              %(map_i.get_type()))
+                raise FatalError(_("Wrong map type. TMAP only supports single "
+                                   "maps that are registered in the temporal GRASS database"))
             # Return map object.
             t[0] = [map_i]
         else:
             t[0] = "tmap(",  t[3] , ")"
 
         if self.debug:
-            print "tmap(", t[3] , ")"
+            print("tmap(", t[3] , ")")
+
+    def p_expr_tmerge_function(self, t):
+        # Merge two maplists of same STDS type into a result map list.
+        # Only possible for same data types!
+        # Examples:
+        #    R = merge(A, B)
+        """
+        expr : MERGE LPAREN stds COMMA stds RPAREN
+             | MERGE LPAREN expr COMMA stds RPAREN
+             | MERGE LPAREN stds COMMA expr RPAREN
+             | MERGE LPAREN expr COMMA expr RPAREN
+        """
+        if self.run:
+            # Check input map.
+            maplistA   = self.check_stds(t[3])
+            maplistB   = self.check_stds(t[5])
+
+            # Check empty lists.
+            if len(maplistA) == 0 and len(maplistB) == 0:
+                self.msgr.warning(_("Merging empty map lists"))
+                resultlist = maplistA + maplistB
+            elif len(maplistA) == 0:
+                self.msgr.message(_("First Map list is empty, can't merge it. Return only last map list"))
+                resultlist = maplistB
+            elif len(maplistB) == 0:
+                self.msgr.message(_("Second Map list is empty, can't merge it. Return only first map list"))
+                resultlist = maplistA
+            else:
+                # Check for identical data types in map lists.
+                typeA = maplistA[0].metadata.get_datatype()
+                typeB = maplistB[0].metadata.get_datatype()
+
+                if typeA != typeB:
+                    raise FatalError(_("Space time datasets to merge must have the same temporal type"))
+
+                resultlist = maplistA + maplistB
+
+            # Return map list.
+            t[0] = resultlist
+        else:
+            t[0] = "merge(",  t[3], ",", t[5], ")"
+
+        if self.debug:
+            print("merge(", t[3], ",", t[5], ")")
 
     def p_t_hash(self,t):
         """
         t_hash_var : stds HASH stds
-                        | expr HASH stds
-                        | stds HASH expr
-                        | expr HASH expr
+                   | expr HASH stds
+                   | stds HASH expr
+                   | expr HASH expr
         """
 
         if self.run:
             maplistA   = self.check_stds(t[1])
             maplistB   = self.check_stds(t[3])
-            resultlist = self.get_temporal_topo_list(maplistA, maplistB,
-                                                        count_map = True)
+            resultlist = self.get_temporal_topo_list(maplistA,
+                                                     maplistB,
+                                                     count_map=True)
             t[0] = resultlist
 
     def p_t_hash2(self,t):
         """
         t_hash_var : stds T_HASH_OPERATOR stds
-                      | stds T_HASH_OPERATOR expr
-                      | expr T_HASH_OPERATOR stds
-                      | expr T_HASH_OPERATOR expr
+                   | stds T_HASH_OPERATOR expr
+                   | expr T_HASH_OPERATOR stds
+                   | expr T_HASH_OPERATOR expr
         """
 
         if self.run:
             maplistA   = self.check_stds(t[1])
             maplistB   = self.check_stds(t[3])
-            topolist   = self.eval_toperator(t[2],  optype = 'hash')[0]
-            resultlist = self.get_temporal_topo_list(maplistA, maplistB, topolist,
-                                                     count_map = True)
+            topolist   = self.eval_toperator(t[2], optype='hash')[0]
+            resultlist = self.get_temporal_topo_list(maplistA,
+                                                     maplistB,
+                                                     topolist,
+                                                     count_map=True)
             t[0] = resultlist
 
+    def p_t_hash_paren(self, t):
+        """
+        t_hash_var : LPAREN t_hash_var RPAREN
+        """
+        t[0] = t[2]
+
     def p_t_td_var(self, t):
         """
         t_td_var : TD LPAREN stds RPAREN
@@ -2267,11 +2408,11 @@ class TemporalAlgebraParser(object):
             for map_i in maplist:
                 if map_i.is_time_absolute:
                     start, end = map_i.get_absolute_time()
-                    if end != None:
+                    if end is not None:
                         td = time_delta_to_relative_time(end - start)
                 else:
-                    start, end, unit = current.get_relative_time()
-                    if end != None:
+                    start, end, unit = map_i.get_relative_time()
+                    if end is not None:
                         td = end - start
                 if "map_value" in dir(map_i):
                     gvar = GlobalTemporalVar()
@@ -2285,7 +2426,7 @@ class TemporalAlgebraParser(object):
             t[0] = "td(" + str(t[3]) + ")"
 
         if self.debug:
-            print "td(" + str(t[3]) + ")"
+            print("td(" + str(t[3]) + ")")
 
 
     def p_t_time_var(self, t):
@@ -2330,8 +2471,8 @@ class TemporalAlgebraParser(object):
         #    A # B == 2
         #    td(A) < 31
         """
-        t_var_expr :  t_td_var comp_op number
-                | t_hash_var comp_op number
+        t_var_expr : t_td_var   comp_op number
+                   | t_hash_var comp_op number
         """
         if self.run:
             maplist = self.check_stds(t[1])
@@ -2349,11 +2490,11 @@ class TemporalAlgebraParser(object):
                         map_i.condition_value = boolname
                 except:
                     self.msgr.fatal("Error: the given expression does not contain a correct time difference object.")
-            
+
             t[0] = maplist
-            
+
         if self.debug:
-            print t[1], t[2], t[3]
+            print(t[1], t[2], t[3])
 
     def p_t_var_expr_number(self, t):
         # Examples:
@@ -2362,7 +2503,7 @@ class TemporalAlgebraParser(object):
         #    start_day(B) < start_month(A)
         """
         t_var_expr : t_var LPAREN stds RPAREN comp_op number
-                | t_var LPAREN expr RPAREN comp_op number      
+                   | t_var LPAREN expr RPAREN comp_op number
         """
         # TODO:  Implement comparison operator for map lists.
         #| t_var LPAREN stds RPAREN comp_op t_var LPAREN stds RPAREN
@@ -2382,7 +2523,7 @@ class TemporalAlgebraParser(object):
             t[0] = resultlist
 
         if self.debug:
-                print t[1], t[3], t[5], t[6]
+                print(t[1], t[3], t[5], t[6])
 
     def p_t_var_expr_time(self, t):
         # Examples:
@@ -2392,18 +2533,18 @@ class TemporalAlgebraParser(object):
         # TODO:  Implement statement in backward direction:
         # TIME comp_op START_TIME LPAREN stds RPAREN
         """
-        t_var_expr : START_TIME LPAREN stds RPAREN comp_op TIME
-                   | START_DATE LPAREN stds RPAREN comp_op DATE
+        t_var_expr : START_TIME     LPAREN stds RPAREN comp_op TIME
+                   | START_DATE     LPAREN stds RPAREN comp_op DATE
                    | START_DATETIME LPAREN stds RPAREN comp_op DATETIME
-                   | END_TIME LPAREN stds RPAREN comp_op TIME
-                   | END_DATE LPAREN stds RPAREN comp_op DATE
-                   | END_DATETIME LPAREN stds RPAREN comp_op DATETIME
-                   | START_TIME LPAREN expr RPAREN comp_op TIME
-                   | START_DATE LPAREN expr RPAREN comp_op DATE
+                   | END_TIME       LPAREN stds RPAREN comp_op TIME
+                   | END_DATE       LPAREN stds RPAREN comp_op DATE
+                   | END_DATETIME   LPAREN stds RPAREN comp_op DATETIME
+                   | START_TIME     LPAREN expr RPAREN comp_op TIME
+                   | START_DATE     LPAREN expr RPAREN comp_op DATE
                    | START_DATETIME LPAREN expr RPAREN comp_op DATETIME
-                   | END_TIME LPAREN expr RPAREN comp_op TIME
-                   | END_DATE LPAREN expr RPAREN comp_op DATE
-                   | END_DATETIME LPAREN expr RPAREN comp_op DATETIME
+                   | END_TIME       LPAREN expr RPAREN comp_op TIME
+                   | END_DATE       LPAREN expr RPAREN comp_op DATE
+                   | END_DATETIME   LPAREN expr RPAREN comp_op DATETIME
         """
         if self.run:
             # Check input maplist.
@@ -2415,12 +2556,11 @@ class TemporalAlgebraParser(object):
             gvar.value  = t[6]
             # Evaluate temporal variable for given maplist.
             resultlist = self.eval_global_var(gvar, maplist)
-            
-            t[0] = resultlist
 
+            t[0] = resultlist
 
         if self.debug:
-            print t[1], t[3],  t[5], t[6]
+            print(t[1], t[3],  t[5], t[6])
 
     def p_t_var_expr_comp(self, t):
         """
@@ -2434,18 +2574,19 @@ class TemporalAlgebraParser(object):
             relations = ["EQUAL"]
             temporal = "l"
             function = t[2] + t[3]
-            aggregate = t[2] 
-            # Build conditional values based on topological relationships.            
-            complist = self.get_temporal_topo_list(tvarexprA, tvarexprB, topolist = relations,
-                               compare_bool = True, compop = function[0], aggregate = aggregate)
+            aggregate = t[2]
+            # Build conditional values based on topological relationships.
+            complist = self.get_temporal_topo_list(tvarexprA, tvarexprB, topolist=relations,
+                                                   compare_bool=True, compop=function[0],
+                                                   aggregate=aggregate)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
-            
+            resultlist = self.set_temporal_extent_list(complist, topolist = relations,
+                                                       temporal=temporal)
+
             t[0] = resultlist
 
         if self.debug:
-            print t[1], t[2] + t[3], t[4]
+            print(t[1], t[2] + t[3], t[4])
 
     def p_t_var_expr_comp_op(self, t):
         """
@@ -2455,18 +2596,18 @@ class TemporalAlgebraParser(object):
             tvarexprA  = t[1]
             tvarexprB  = t[3]
             # Evaluate temporal comparison operator.
-            relations, temporal, function, aggregate  = self.eval_toperator(t[2],  optype = 'boolean')
+            relations, temporal, function, aggregate = self.eval_toperator(t[2],  optype='boolean')
             # Build conditional values based on topological relationships.
-            complist = self.get_temporal_topo_list(tvarexprA, tvarexprB, topolist = relations,
-                               compare_bool = True, compop = function[0], aggregate = aggregate)
+            complist = self.get_temporal_topo_list(tvarexprA, tvarexprB, topolist=relations,
+                               compare_bool=True, compop=function[0], aggregate=aggregate)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
+            resultlist = self.set_temporal_extent_list(complist, topolist=relations,
+                                                       temporal=temporal)
 
             t[0] = resultlist
 
         if self.debug:
-            print t[1], t[2], t[3]
+            print(t[1], t[2], t[3])
 
     def p_expr_t_select(self, t):
         # Temporal equal selection
@@ -2490,10 +2631,10 @@ class TemporalAlgebraParser(object):
             # Return map list.
             t[0] = selectlist
         else:
-            t[0] = t[1] , "*"
+            t[0] = t[1] + "*"
 
         if self.debug:
-            print str(t[1]),  "* = ", t[1], t[2], t[3]
+            print(str(t[1]),  "* = ", t[1], t[2], t[3])
 
     def p_expr_t_not_select(self, t):
         # Temporal equal selection
@@ -2512,26 +2653,25 @@ class TemporalAlgebraParser(object):
             maplistB     = self.check_stds(t[3])
             # Perform negative selection.
             selectlist = self.perform_temporal_selection(maplistA, maplistB,
-                                                         inverse = True)
+                                                         inverse=True)
             # Return map list.
             t[0] = selectlist
         else:
             t[0] = t[1] + "*"
 
         if self.debug:
-            print t[1] + "* = ", t[1], t[2], t[3]
-
+            print(t[1] + "* = ", t[1], t[2], t[3])
 
     def p_expr_t_select_operator(self, t):
         # Temporal equal selection
         # The temporal topology relation equals is implicit
         # Examples:
         #    A {!:} B  # Select the part of A that is temporally unequal to B
-        #    A  {:} B  # Select the part of A that is temporally equal B
-        #    A {equals, !:} B    # Select the part of A that is temporally unequal to B
-        #    A {during, !:} B    # Select the part of A that is temporally not during B
-        #    A {overlaps, :} B   # Select the part of A that temporally overlaps B
-        #    A {overlaps|equals, :} B  # Select the part of A that temporally overlaps or equals B
+        #    A { :} B  # Select the part of A that is temporally equal B
+        #    A {!:, equals} B          # Select the part of A that is temporally unequal to B
+        #    A {!:, during} B          # Select the part of A that is temporally not during B
+        #    A {:, overlaps} B         # Select the part of A that temporally overlaps B
+        #    A {:, overlaps|equals} B  # Select the part of A that temporally overlaps or equals B
         """
         expr : stds T_SELECT_OPERATOR stds
              | expr T_SELECT_OPERATOR stds
@@ -2540,10 +2680,10 @@ class TemporalAlgebraParser(object):
         """
         if self.run:
             # Check input stds.
-            maplistA     = self.check_stds(t[1])
-            maplistB     = self.check_stds(t[3])
+            maplistA = self.check_stds(t[1])
+            maplistB = self.check_stds(t[3])
             # Evaluate temporal operator.
-            operators  = self.eval_toperator(t[2],  optype = 'select')
+            operators  = self.eval_toperator(t[2],  optype='select')
             # Check for negative selection.
             if operators[2] == "!:":
                 negation = True
@@ -2551,16 +2691,17 @@ class TemporalAlgebraParser(object):
                 negation = False
             # Perform selection.
             selectlist = self.perform_temporal_selection(maplistA, maplistB,
-                         topolist = operators[0], inverse = negation)
-            selectlist = self.set_granularity(selectlist, maplistB, operators[1], 
-                operators[0])
+                                                         topolist=operators[0],
+                                                         inverse=negation)
+            selectlist = self.set_granularity(selectlist, maplistB, operators[1],
+                                              operators[0])
             # Return map list.
             t[0] = selectlist
         else:
             t[0] = t[1] + "*"
 
         if self.debug:
-            print t[1] + "* = ", t[1], t[2], t[3]
+            print(t[1] + "* = ", t[1], t[2], t[3])
 
 
     def p_expr_condition_if(self, t):
@@ -2575,7 +2716,7 @@ class TemporalAlgebraParser(object):
             thenlist     = self.check_stds(t[5])
             # Get temporal conditional statement.
             tvarexpr     = t[3]
-            thencond     = self.build_condition_list(tvarexpr, thenlist)      
+            thencond     = self.build_condition_list(tvarexpr, thenlist)
             thenresult   = self.eval_condition_list(thencond)
             # Clear the map and conditional values of the map list.
             resultlist   = self.check_stds(thenresult, clear = True)
@@ -2585,7 +2726,7 @@ class TemporalAlgebraParser(object):
             t[0] = t[5] + "*"
 
         if self.debug:
-            print str(t[5]) + "* = ", "if condition", str(t[3]), ' then ', str(t[5])
+            print(str(t[5]) + "* = ", "if condition", str(t[3]), ' then ', str(t[5]))
 
     def p_expr_condition_if_relation(self, t):
         # Examples
@@ -2599,9 +2740,9 @@ class TemporalAlgebraParser(object):
             thenlist     = self.check_stds(t[7])
             # Get temporal conditional statement.
             tvarexpr     = t[5]
-            topolist     = self.eval_toperator(t[3],  optype = 'relation')[0]
-            thencond     = self.build_condition_list(tvarexpr, thenlist, topolist)            
-            thenresult   = self.eval_condition_list(thencond)          
+            topolist     = self.eval_toperator(t[3],  optype='relation')[0]
+            thencond     = self.build_condition_list(tvarexpr, thenlist, topolist)
+            thenresult   = self.eval_condition_list(thencond)
             # Clear the map and conditional values of the map list.
             resultlist   = self.check_stds(thenresult, clear = True)
             # Return resulting map list.
@@ -2610,7 +2751,7 @@ class TemporalAlgebraParser(object):
             t[0] = t[7] + "*"
 
         if self.debug:
-            print "result* = ", "if ", str(t[3]),  "condition", str(t[5]), " then ", str(t[7])
+            print("result* = ", "if ", str(t[3]),  "condition", str(t[5]), " then ", str(t[7]))
 
     def p_expr_condition_elif(self, t):
         # Examples
@@ -2633,8 +2774,8 @@ class TemporalAlgebraParser(object):
             elseresult   = self.eval_condition_list(elsecond, inverse = True)
 
             # Combine and sort else and then statement to result map list.
-            combilist = thenresult + elseresult
-            resultlist = sorted(combilist, key = AbstractDatasetComparisonKeyStartTime)
+            combilist    = thenresult + elseresult
+            resultlist   = sorted(combilist, key = AbstractDatasetComparisonKeyStartTime)
             # Clear the map and conditional values of the map list.
             resultlist   = self.check_stds(resultlist, clear = True)
             # Return resulting map list.
@@ -2643,7 +2784,7 @@ class TemporalAlgebraParser(object):
             t[0] = t[5] + "*"
 
         if self.debug:
-            print str(t[5]) + "* = ", "if condition", str(t[3]), " then ", str(t[5]), ' else ', str(t[7])
+            print(str(t[5]) + "* = ", "if condition", str(t[3]), " then ", str(t[5]), ' else ', str(t[7]))
 
     def p_expr_condition_elif_relation(self, t):
         # Examples
@@ -2662,7 +2803,7 @@ class TemporalAlgebraParser(object):
             elselist     = self.check_stds(t[9])
             # Get temporal conditional statement.
             tvarexpr     = t[5]
-            topolist     = self.eval_toperator(t[3],  optype = 'relation')[0]
+            topolist     = self.eval_toperator(t[3],  optype='relation')[0]
             thencond     = self.build_condition_list(tvarexpr, thenlist, topolist)
             thenresult   = self.eval_condition_list(thencond)
             elsecond     = self.build_condition_list(tvarexpr, elselist, topolist)
@@ -2683,17 +2824,17 @@ class TemporalAlgebraParser(object):
 
         if self.debug:
             if t[5]:
-                print str(t[7]), "* = ", "if condition", str(t[5]), " then ", str(t[7]), ' else ', str(t[9])
+                print(str(t[7]), "* = ", "if condition", str(t[5]), " then ", str(t[7]), ' else ', str(t[9]))
             else:
-                print str(t[9]), "* = ", "if condition", str(t[5]), " then ", str(t[7]), ' else ', str(t[9])
+                print(str(t[9]), "* = ", "if condition", str(t[5]), " then ", str(t[7]), ' else ', str(t[9]))
 
     def p_expr_t_buff(self, t):
         # Examples
         # buff_t(A : B, "10 minutes")  # Select the part of A that is temporally
         #                                equal to B and create a buffer of 10 minutes around
         """
-        expr : BUFF_T LPAREN stds COMMA QUOTE number NAME QUOTE RPAREN
-             | BUFF_T LPAREN expr COMMA QUOTE number NAME QUOTE RPAREN
+        expr : BUFF_T LPAREN stds COMMA QUOTE  number NAME QUOTE RPAREN
+             | BUFF_T LPAREN expr COMMA QUOTE  number NAME QUOTE RPAREN
              | BUFF_T LPAREN stds COMMA number RPAREN
              | BUFF_T LPAREN expr COMMA number RPAREN
         """
@@ -2714,9 +2855,9 @@ class TemporalAlgebraParser(object):
 
         if self.debug:
             if len(t) == 10:
-                print str(t[3]) + "* = buff_t(", str(t[3]), "," , '"', str(t[6]), str(t[7]), '"', ")"
+                print(str(t[3]) + "* = buff_t(", str(t[3]), ",", '"', str(t[6]), str(t[7]), '"', ")")
             elif len(t) == 7:
-                print str(t[3]) + "* = buff_t(", str(t[3]), ",", str(t[5]), ")"
+                print(str(t[3]) + "* = buff_t(", str(t[3]), ",", str(t[5]), ")")
 
     def p_expr_t_snap(self, t):
         # Examples
@@ -2735,15 +2876,15 @@ class TemporalAlgebraParser(object):
             t[0] = t[3] + "*"
 
         if self.debug:
-            print str(t[3]) + "* = tsnap(", str(t[3]), ")"
+            print(str(t[3]) + "* = tsnap(", str(t[3]), ")")
 
     def p_expr_t_shift(self, t):
         # Examples
         # tshift(A : B, "10 minutes")  # Shift the selection from A temporally
         #                                by 10 minutes.
         """
-        expr : TSHIFT LPAREN stds COMMA QUOTE number NAME QUOTE RPAREN
-             | TSHIFT LPAREN expr COMMA QUOTE number NAME QUOTE RPAREN
+        expr : TSHIFT LPAREN stds COMMA QUOTE  number NAME QUOTE RPAREN
+             | TSHIFT LPAREN expr COMMA QUOTE  number NAME QUOTE RPAREN
              | TSHIFT LPAREN stds COMMA number RPAREN
              | TSHIFT LPAREN expr COMMA number RPAREN
         """
@@ -2756,22 +2897,23 @@ class TemporalAlgebraParser(object):
             elif len(t) == 7:
                 increment = str(t[5])
             # Perform shifting.
-            shiftlist = AbstractSpaceTimeDataset.shift_map_list(maplist, increment)
+            shiftlist = AbstractSpaceTimeDataset.shift_map_list(maplist,
+                                                                increment)
             t[0] = shiftlist
         else:
             t[0] = t[3] + "*"
 
         if self.debug:
             if len(t) == 10:
-                print str(t[3]) + "* = tshift(", str(t[3]), "," , '"', str(t[6]), str(t[7]), '"', ")"
+                print(str(t[3]) + "* = tshift(", str(t[3]), "," , '"', str(t[6]), str(t[7]), '"', ")")
             elif len(t) == 7:
-                print str(t[3]) + "* = tshift(", str(t[3]), ",", str(t[5]), ")"
+                print(str(t[3]) + "* = tshift(", str(t[3]), ",", str(t[5]), ")")
 
     # Handle errors.
     def p_error(self, t):
         if t:
-            raise SyntaxError("syntax error on line %d, token %s near '%s' expression '%s'" %
-                             (t.lineno, t.type, t.value, self.expression))
+            raise SyntaxError("syntax error on line %d, position %i token %s near '%s' expression '%s'" %
+                              (t.lineno, t.lexpos, t.type, t.value, self.expression))
         else:
             raise SyntaxError("Unexpected syntax error")
 
diff --git a/lib/python/temporal/temporal_extent.py b/lib/python/temporal/temporal_extent.py
index eeaa47e..2c5d9e8 100644
--- a/lib/python/temporal/temporal_extent.py
+++ b/lib/python/temporal/temporal_extent.py
@@ -19,7 +19,8 @@ for details.
 
 :authors: Soeren Gebbert
 """
-from base import *
+from __future__ import print_function
+from .base import *
 
 ###############################################################################
 
@@ -156,13 +157,13 @@ class TemporalExtent(SQLDatabaseInterface):
                >>> A = TemporalExtent(start_time=5, end_time=8 )
                >>> B = TemporalExtent(start_time=3, end_time=4 )
                >>> inter = A.intersect(B)
-               >>> print inter
+               >>> print(inter)
                None
 
                >>> A = TemporalExtent(start_time=5, end_time=8 )
                >>> B = TemporalExtent(start_time=3, end_time=None )
                >>> inter = A.intersect(B)
-               >>> print inter
+               >>> print(inter)
                None
 
         """
@@ -396,13 +397,13 @@ class TemporalExtent(SQLDatabaseInterface):
                >>> A = TemporalExtent(start_time=5, end_time=8 )
                >>> B = TemporalExtent(start_time=3, end_time=4 )
                >>> inter = A.intersect(B)
-               >>> print inter
+               >>> print(inter)
                None
 
                >>> A = TemporalExtent(start_time=5, end_time=8 )
                >>> B = TemporalExtent(start_time=3, end_time=None )
                >>> inter = A.intersect(B)
-               >>> print inter
+               >>> print(inter)
                None
 
         """
@@ -1028,13 +1029,13 @@ class TemporalExtent(SQLDatabaseInterface):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " | Start time:................. " + str(self.get_start_time())
-        print " | End time:................... " + str(self.get_end_time())
+        print(" | Start time:................. " + str(self.get_start_time()))
+        print(" | End time:................... " + str(self.get_end_time()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
-        print "start_time=" + str(self.get_start_time())
-        print "end_time=" + str(self.get_end_time())
+        print("start_time=" + str(self.get_start_time()))
+        print("end_time=" + str(self.get_end_time()))
 
 ###############################################################################
 
@@ -1052,7 +1053,7 @@ class AbsoluteTemporalExtent(TemporalExtent):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " +-------------------- Absolute time -----------------------------------------+"
+        print(" +-------------------- Absolute time -----------------------------------------+")
         TemporalExtent.print_info(self)
 
     def print_shell_info(self):
@@ -1177,14 +1178,14 @@ class STDSAbsoluteTime(AbsoluteTemporalExtent):
         """Print information about this class in human readable style"""
         AbsoluteTemporalExtent.print_info(self)
         #      0123456789012345678901234567890
-        print " | Granularity:................ " + str(self.get_granularity())
-        print " | Temporal type of maps:...... " + str(self.get_map_time())
+        print(" | Granularity:................ " + str(self.get_granularity()))
+        print(" | Temporal type of maps:...... " + str(self.get_map_time()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         AbsoluteTemporalExtent.print_shell_info(self)
-        print "granularity=" + str(self.get_granularity())
-        print "map_time=" + str(self.get_map_time())
+        print("granularity=" + str(self.get_granularity()))
+        print("map_time=" + str(self.get_map_time()))
 
 ###############################################################################
 
@@ -1294,14 +1295,14 @@ class RelativeTemporalExtent(TemporalExtent):
     def print_info(self):
         """Print information about this class in human readable style"""
         #      0123456789012345678901234567890
-        print " +-------------------- Relative time -----------------------------------------+"
+        print(" +-------------------- Relative time -----------------------------------------+")
         TemporalExtent.print_info(self)
-        print " | Relative time unit:......... " + str(self.get_unit())
+        print(" | Relative time unit:......... " + str(self.get_unit()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         TemporalExtent.print_shell_info(self)
-        print "unit=" + str(self.get_unit())
+        print("unit=" + str(self.get_unit()))
 
 ###############################################################################
 
@@ -1426,14 +1427,14 @@ class STDSRelativeTime(RelativeTemporalExtent):
         """Print information about this class in human readable style"""
         RelativeTemporalExtent.print_info(self)
         #      0123456789012345678901234567890
-        print " | Granularity:................ " + str(self.get_granularity())
-        print " | Temporal type of maps:...... " + str(self.get_map_time())
+        print(" | Granularity:................ " + str(self.get_granularity()))
+        print(" | Temporal type of maps:...... " + str(self.get_map_time()))
 
     def print_shell_info(self):
         """Print information about this class in shell style"""
         RelativeTemporalExtent.print_shell_info(self)
-        print "granularity=" + str(self.get_granularity())
-        print "map_time=" + str(self.get_map_time())
+        print("granularity=" + str(self.get_granularity()))
+        print("map_time=" + str(self.get_map_time()))
 
 ###############################################################################
 
diff --git a/lib/python/temporal/temporal_granularity.py b/lib/python/temporal/temporal_granularity.py
index 5ab3f95..f4c102e 100644
--- a/lib/python/temporal/temporal_granularity.py
+++ b/lib/python/temporal/temporal_granularity.py
@@ -17,8 +17,9 @@ for details.
 
 :authors: Soeren Gebbert
 """
-from abstract_dataset import *
-from datetime_math import *
+from .abstract_dataset import *
+from .datetime_math import *
+from functools import reduce
 
 ###############################################################################
 
@@ -497,7 +498,7 @@ def compute_absolute_time_granularity(maps):
 
 def compute_common_relative_time_granularity(gran_list):
 	"""Compute the greatest common granule from a list of relative time granules
-    
+
         .. code-block:: python
 
             >>> import grass.temporal as tgis
@@ -505,7 +506,7 @@ def compute_common_relative_time_granularity(gran_list):
             >>> grans = [1,2,30]
             >>> tgis.compute_common_relative_time_granularity(grans)
             1
-            
+
             >>> import grass.temporal as tgis
             >>> tgis.init()
             >>> grans = [10,20,30]
@@ -516,8 +517,238 @@ def compute_common_relative_time_granularity(gran_list):
 
 ###############################################################################
 
-def compute_common_absolute_time_granularity(gran_list):
-    """Compute the greatest common granule from a list of absolute time granules
+def compute_common_absolute_time_granularity(gran_list,
+                                             start_date_list = None):
+    """ Compute the greatest common granule from a list of absolute time granules,
+        considering the start times of the related space time datasets in the
+        common granularity computation.
+
+        The list of start dates is optional. If you use this function to compute a common
+        granularity between space time datasets, then you should provide their start times
+        to avoid wrong synchronization.
+
+        :param gran_list: List of granularities
+        :param start_date_list: List of the start times of related space time datasets
+        :return: The common granularity
+
+        .. code-block:: python
+
+            >>> from datetime import datetime
+            >>> import grass.temporal as tgis
+            >>> tgis.init()
+            >>> grans = ["20 second", "10 minutes", "2 hours"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '20 seconds'
+
+            >>> grans = ["20 second", "10 minutes", "2 hours"]
+            >>> dates = [datetime(2001,1,1,0,0,20),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 second'
+
+            >>> grans = ["7200 second", "240 minutes", "1 year"]
+            >>> dates = [datetime(2001,1,1,0,0,10),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 second'
+
+            >>> grans = ["7200 second", "89 minutes", "1 year"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '60 seconds'
+
+            >>> grans = ["120 minutes", "2 hours"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '60 minutes'
+
+            >>> grans = ["120 minutes", "2 hours"]
+            >>> dates = [datetime(2001,1,1,0,30,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 minute'
+
+            >>> grans = ["360 minutes", "3 hours"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '60 minutes'
+
+            >>> grans = ["2 hours", "4 hours", "8 hours"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '2 hours'
+
+            >>> grans = ["2 hours", "4 hours", "8 hours"]
+            >>> dates = [datetime(2001,1,1,2,0,0),
+            ...          datetime(2001,1,1,4,0,0),
+            ...          datetime(2001,1,1,8,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 hour'
+
+            >>> grans = ["8 hours", "2 days"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '8 hours'
+
+            >>> grans = ["8 hours", "2 days"]
+            >>> dates = [datetime(2001,1,1,10,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 hour'
+
+            >>> grans = ["120 months", "360 months", "4 years"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '12 months'
+
+            >>> grans = ["30 days", "10 days", "5 days"]
+            >>> dates = [datetime(2001,2,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '5 days'
+
+            >>> grans = ["30 days", "10 days", "5 days"]
+            >>> dates = [datetime(2001,2,2,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 day'
+
+            >>> grans = ["2 days", "360 months", "4 years"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '2 days'
+
+            >>> grans = ["2 days", "360 months", "4 years"]
+            >>> dates = [datetime(2001,1,2,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 day'
+
+            >>> grans = ["120 months", "360 months", "4 years"]
+            >>> dates = [datetime(2001,2,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 month'
+
+            >>> grans = ["120 months", "361 months", "4 years"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '1 month'
+
+            >>> grans = ["120 months", "360 months", "4 years"]
+            >>> dates = [datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),
+            ...          datetime(2001,1,1,0,0,0),]
+            >>> tgis.compute_common_absolute_time_granularity(grans, dates)
+            '12 months'
+
+        ..
+
+    """
+
+    common_granule = compute_common_absolute_time_granularity_simple(gran_list)
+
+    if start_date_list is None:
+        return common_granule
+
+    num, granule = common_granule.split()
+
+    if granule in ["seconds",  "second"]:
+        # If the start seconds are different between the start dates
+        # set the granularity to one second
+        for start_time in start_date_list:
+            if start_time.second != start_date_list[0].second:
+                return "1 second"
+        # Make sure the granule does not exceed the hierarchy limit
+        if int(num) > 60:
+            if int(num)%60 == 0:
+                return "60 seconds"
+            else:
+                return "1 second"
+
+    if granule in ["minutes",  "minute"]:
+        # If the start minutes are different between the start dates
+        # set the granularity to one minute
+        for start_time in start_date_list:
+            if start_time.minute != start_date_list[0].minute:
+                return "1 minute"
+        # Make sure the granule does not exceed the hierarchy limit
+        if int(num) > 60:
+            if int(num)%60 == 0:
+                return "60 minutes"
+            else:
+                return "1 minute"
+
+    if granule in ["hours",  "hour"]:
+        # If the start hours are different between the start dates
+        # set the granularity to one hour
+        for start_time in start_date_list:
+            if start_time.hour != start_date_list[0].hour:
+                return "1 hour"
+        # Make sure the granule does not exceed the hierarchy limit
+        if int(num) > 24:
+            if int(num)%24 == 0:
+                return "24 hours"
+            else:
+                return "1 hour"
+
+    if granule in ["days",  "day"]:
+        # If the start days are different between the start dates
+        # set the granularity to one day
+        for start_time in start_date_list:
+            if start_time.day != start_date_list[0].day:
+                return "1 day"
+        # Make sure the granule does not exceed the hierarchy limit
+        if int(num) > 365:
+            if int(num)%365 == 0:
+                return "365 days"
+            else:
+                return "1 day"
+
+    if granule in ["months",  "month"]:
+        # If the start months are different between the start dates
+        # set the granularity to one month
+        for start_time in start_date_list:
+            if start_time.month != start_date_list[0].month:
+                return "1 month"
+        # Make sure the granule does not exceed the hierarchy limit
+        if int(num) > 12:
+            if int(num)%12 == 0:
+                return "12 months"
+            else:
+                return "1 month"
+
+    return common_granule
+
+###############################################################################
+
+def compute_common_absolute_time_granularity_simple(gran_list):
+    """ Compute the greatest common granule from a list of absolute time granules
+
+        :param gran_list: List of granularities
+        :return: The common granularity
 
         .. code-block:: python
 
@@ -525,24 +756,24 @@ def compute_common_absolute_time_granularity(gran_list):
             >>> tgis.init()
             >>> grans = ["1 second", "2 seconds", "30 seconds"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
-            '1 seconds'
-            
+            '1 second'
+
             >>> grans = ["3 second", "6 seconds", "30 seconds"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
             '3 seconds'
-            
+
             >>> grans = ["12 second", "18 seconds", "30 seconds", "10 minutes"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
             '6 seconds'
-            
+
             >>> grans = ["20 second", "10 minutes", "2 hours"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
             '20 seconds'
-            
+
             >>> grans = ["7200 second", "240 minutes", "1 year"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
             '7200 seconds'
-            
+
             >>> grans = ["7200 second", "89 minutes", "1 year"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
             '60 seconds'
@@ -585,43 +816,43 @@ def compute_common_absolute_time_granularity(gran_list):
 
             >>> grans = ["120 months", "361 months", "4 years"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
-            '1 months'
+            '1 month'
 
             >>> grans = ["2 years", "3 years", "4 years"]
             >>> tgis.compute_common_absolute_time_granularity(grans)
-            '1 years'
+            '1 year'
     """
-    
+
     has_seconds = False # 0
     has_minutes = False # 1
     has_hours = False     # 2
     has_days = False      # 3
     has_months = False  # 4
     has_years = False     # 5
-    
+
     seconds = []
     minutes = []
     hours = []
     days = []
     months = []
     years = []
-    
+
     min_gran = 6
     max_gran = -1
-    
+
     for entry in gran_list:
         if not check_granularity_string(entry, "absolute"):
             return False
 
         num,  gran = entry.split()
-        
+
         if gran in ["seconds",  "second"]:
             has_seconds = True
             if min_gran > 0:
                 min_gran = 0
             if max_gran < 0:
                 max_gran = 0
-                
+
             seconds.append(int(num))
 
         if gran in ["minutes",  "minute"]:
@@ -630,7 +861,7 @@ def compute_common_absolute_time_granularity(gran_list):
                 min_gran = 1
             if max_gran < 1:
                 max_gran = 1
-                
+
             minutes.append(int(num))
 
         if gran in ["hours",  "hour"]:
@@ -639,7 +870,7 @@ def compute_common_absolute_time_granularity(gran_list):
                 min_gran = 2
             if max_gran < 2:
                 max_gran = 2
-                
+
             hours.append(int(num))
 
         if gran in ["days",  "day"]:
@@ -648,7 +879,7 @@ def compute_common_absolute_time_granularity(gran_list):
                 min_gran = 3
             if max_gran < 3:
                 max_gran = 3
-                
+
             days.append(int(num))
 
         if gran in ["months",  "month"]:
@@ -657,7 +888,7 @@ def compute_common_absolute_time_granularity(gran_list):
                 min_gran = 4
             if max_gran < 4:
                 max_gran = 4
-                
+
             months.append(int(num))
 
         if gran in ["years",  "year"]:
@@ -666,9 +897,9 @@ def compute_common_absolute_time_granularity(gran_list):
                 min_gran = 5
             if max_gran < 5:
                 max_gran = 5
-                
+
             years.append(int(num))
-            
+
     if has_seconds:
         if has_minutes:
             minutes.sort()
@@ -691,8 +922,11 @@ def compute_common_absolute_time_granularity(gran_list):
             seconds.append(years[0]*60*60*24*366)
 
         num = gcd_list(seconds)
-        return "%i %s"%(num,  "seconds")
-        
+        gran = "second"
+        if num > 1:
+            gran += "s"
+        return "%i %s"%(num,  gran)
+
     elif has_minutes:
         if has_hours:
             hours.sort()
@@ -711,8 +945,11 @@ def compute_common_absolute_time_granularity(gran_list):
             minutes.append(years[0]*60*24*365)
             minutes.append(years[0]*60*24*366)
         num = gcd_list(minutes)
-        return "%i %s"%(num,  "minutes")
-        
+        gran = "minute"
+        if num > 1:
+            gran += "s"
+        return "%i %s"%(num,  gran)
+
     elif has_hours:
         if has_days:
             days.sort()
@@ -728,7 +965,10 @@ def compute_common_absolute_time_granularity(gran_list):
             hours.append(years[0]*24*365)
             hours.append(years[0]*24*366)
         num = gcd_list(hours)
-        return "%i %s"%(num,  "hours")
+        gran = "hour"
+        if num > 1:
+            gran += "s"
+        return "%i %s"%(num,  gran)
 
     elif has_days:
         if has_months:
@@ -742,19 +982,28 @@ def compute_common_absolute_time_granularity(gran_list):
             days.append(years[0]*365)
             days.append(years[0]*366)
         num = gcd_list(days)
-        return "%i %s"%(num,  "days")
+        gran = "day"
+        if num > 1:
+            gran += "s"
+        return "%i %s"%(num,  gran)
 
     elif has_months:
         if has_years:
             years.sort()
             months.append(years[0]*12)
         num = gcd_list(months)
-        return "%i %s"%(num,  "months")
-        
+        gran = "month"
+        if num > 1:
+            gran += "s"
+        return "%i %s"%(num,  gran)
+
     elif has_years:
         num = gcd_list(years)
-        return "%i %s"%(num,  "years")
-        
+        gran = "year"
+        if num > 1:
+            gran += "s"
+        return "%i %s"%(num,  gran)
+
 
 ###############################################################################
 # http://akiscode.com/articles/gcd_of_a_list.shtml
diff --git a/lib/python/temporal/temporal_operator.py b/lib/python/temporal/temporal_operator.py
index 5b5282b..8d9b83b 100644
--- a/lib/python/temporal/temporal_operator.py
+++ b/lib/python/temporal/temporal_operator.py
@@ -14,95 +14,126 @@ for details.
     >>> p = TemporalOperatorParser()
     >>> expression =  "{equal| during}"
     >>> p.parse(expression, optype = 'relation')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['equal', 'during'], None, None)
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{contains | starts}"
     >>> p.parse(expression)
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['contains', 'starts'], None, None)
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{&&, during}"
     >>> p.parse(expression, optype = 'boolean')
-    >>> print(p.relations, p.temporal, p.function,p.aggregate)
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
     (['during'], 'l', '&&', '&')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{||, equal | during}"
     >>> p.parse(expression, optype = 'boolean')
-    >>> print(p.relations, p.temporal, p.function,p.aggregate)
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
     (['equal', 'during'], 'l', '||', '|')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{||, equal | during, &}"
     >>> p.parse(expression, optype = 'boolean')
-    >>> print(p.relations, p.temporal, p.function,p.aggregate)
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
     (['equal', 'during'], 'l', '||', '&')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{&&, during, |}"
     >>> p.parse(expression, optype = 'boolean')
-    >>> print(p.relations, p.temporal, p.function,p.aggregate)
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
     (['during'], 'l', '&&', '|')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{&&, during, |, r}"
     >>> p.parse(expression, optype = 'boolean')
-    >>> print(p.relations, p.temporal, p.function,p.aggregate)
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
     (['during'], 'r', '&&', '|')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{&&, during, u}"
     >>> p.parse(expression, optype = 'boolean')
-    >>> print(p.relations, p.temporal, p.function,p.aggregate)
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
     (['during'], 'u', '&&', '&')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{:, during, r}"
     >>> p.parse(expression, optype = 'select')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['during'], 'r', ':')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{!:, equal | contains, d}"
     >>> p.parse(expression, optype = 'select')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['equal', 'contains'], 'd', '!:')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{#, during, r}"
     >>> p.parse(expression, optype = 'hash')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['during'], 'r', '#')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{#, equal | contains}"
     >>> p.parse(expression, optype = 'hash')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['equal', 'contains'], 'l', '#')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{+, during, r}"
     >>> p.parse(expression, optype = 'raster')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['during'], 'r', '+')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{/, equal | contains}"
     >>> p.parse(expression, optype = 'raster')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['equal', 'contains'], 'l', '/')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{+, equal | contains,intersect}"
     >>> p.parse(expression, optype = 'raster')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['equal', 'contains'], 'i', '+')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{*, contains,disjoint}"
     >>> p.parse(expression, optype = 'raster')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['contains'], 'd', '*')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{~, equal,left}"
     >>> p.parse(expression, optype = 'overlay')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['equal'], 'l', '~')
-    >>> p = TemporalOperatorParser()    
+    >>> p = TemporalOperatorParser()
     >>> expression =  "{^, over,right}"
     >>> p.parse(expression, optype = 'overlay')
-    >>> print(p.relations, p.temporal, p.function)
+    >>> print((p.relations, p.temporal, p.function))
     (['overlaps', 'overlapped'], 'r', '^')
+    >>> p = TemporalOperatorParser()
+    >>> expression =  "{&&, equal | during | contains | starts, &}"
+    >>> p.parse(expression, optype = 'boolean')
+    >>> print((p.relations, p.temporal, p.function, p.aggregate))
+    (['equal', 'during', 'contains', 'starts'], 'l', '&&', '&')
+    >>> p = TemporalOperatorParser()
+    >>> expression =  "{&&, equal | during | contains | starts, &&&&&}"
+    >>> p.parse(expression, optype = 'boolean')
+    Traceback (most recent call last):
+    SyntaxError: Unexpected syntax error in expression "{&&, equal | during | contains | starts, &&&&&}" at position 42 near &
+    >>> p = TemporalOperatorParser()
+    >>> expression =  "{+, starting}"
+    >>> p.parse(expression)
+    Traceback (most recent call last):
+    SyntaxError: syntax error on line 1 position 4 near 'starting'
+    >>> p = TemporalOperatorParser()
+    >>> expression =  "{nope, start, |, l}"
+    >>> p.parse(expression)
+    Traceback (most recent call last):
+    SyntaxError: syntax error on line 1 position 1 near 'nope'
+    >>> p = TemporalOperatorParser()
+    >>> expression =  "{++, start, |, l}"
+    >>> p.parse(expression)
+    Traceback (most recent call last):
+    SyntaxError: Unexpected syntax error in expression "{++, start, |, l}" at position 2 near +
+    >>> p = TemporalOperatorParser()
+    >>> expression =  "{^, over, right}"
+    >>> p.parse(expression, optype='rter')
+    Traceback (most recent call last):
+    SyntaxError: Unknown optype rter, must be one of ['select', 'boolean', 'raster', 'hash', 'relation', 'overlay']
 
 """
+from __future__ import print_function
 
 try:
     import ply.lex as lex
@@ -134,7 +165,7 @@ class TemporalOperatorLexer(object):
         'COMMA',
         'LEFTREF',
         'RIGHTREF',
-        'UNION', 
+        'UNION',
         'DISJOINT',
         'INTERSECT',
         'HASH',
@@ -142,11 +173,11 @@ class TemporalOperatorLexer(object):
         'AND',
         'DISOR',
         'XOR',
-        'NOT',        
+        'NOT',
         'MOD',
         'DIV',
         'MULT',
-        'ADD',      
+        'ADD',
         'SUB',
         'T_SELECT',
         'T_NOT_SELECT',
@@ -158,30 +189,30 @@ class TemporalOperatorLexer(object):
     tokens = tokens + tuple(relations.values())
 
     # Regular expression rules for simple tokens
-    t_T_SELECT                = r':'
-    t_T_NOT_SELECT        = r'!:'
-    t_COMMA                    = r','
-    t_LEFTREF                  = '^[l|left]'
-    t_RIGHTREF                ='^[r|right]'
-    t_UNION                     = '^[u|union]'
-    t_DISJOINT                 = '^[d|disjoint]'
-    t_INTERSECT             = '^[i|intersect]'
-    t_HASH                      = r'\#'
-    t_OR                          = r'[\|]'
-    t_AND                        = r'[&]'
-    t_DISOR                     = r'\+'
-    t_XOR                         = r'\^'
-    t_NOT                         = r'\~'    
-    t_MOD                       = r'[\%]'
-    t_DIV                         = r'[\/]'
-    t_MULT                      = r'[\*]'
-    t_ADD                       = r'[\+]'
-    t_SUB                        = r'[-]'
-    t_CLPAREN                = r'\{'
-    t_CRPAREN                = r'\}'
+    t_T_SELECT       = r':'
+    t_T_NOT_SELECT   = r'!:'
+    t_COMMA          = r','
+    t_LEFTREF        = '^[l|left]'
+    t_RIGHTREF       = '^[r|right]'
+    t_UNION          = '^[u|union]'
+    t_DISJOINT       = '^[d|disjoint]'
+    t_INTERSECT      = '^[i|intersect]'
+    t_HASH           = r'\#'
+    t_OR             = r'[\|]'
+    t_AND            = r'[&]'
+    t_DISOR          = r'\+'
+    t_XOR            = r'\^'
+    t_NOT            = r'\~'
+    t_MOD            = r'[\%]'
+    t_DIV            = r'[\/]'
+    t_MULT           = r'[\*]'
+    t_ADD            = r'[\+]'
+    t_SUB            = r'[-]'
+    t_CLPAREN        = r'\{'
+    t_CRPAREN        = r'\}'
 
     # These are the things that should be ignored.
-    t_ignore = ' \t'
+    t_ignore = ' \t\n'
 
     # Track line numbers.
     def t_newline(self, t):
@@ -190,8 +221,7 @@ class TemporalOperatorLexer(object):
 
     def t_NAME(self, t):
         r'[a-zA-Z_][a-zA-Z_0-9]*'
-        self.temporal_symbol(t)
-        return t
+        return self.temporal_symbol(t)
 
     # Parse symbols
     def temporal_symbol(self, t):
@@ -213,18 +243,19 @@ class TemporalOperatorLexer(object):
         elif t.value == 'i' or t.value == 'intersect':
             t.value = 'i'
             t.type = 'INTERSECT'
-        #else:
-        #    t.type = 'NAME'
+        else:
+            self.t_error(t)
         return(t)
 
     # Handle errors.
     def t_error(self, t):
-        raise SyntaxError("syntax error on line %d near '%s'" %
-            (t.lineno, t.value))
+        raise SyntaxError("syntax error on line %d position %i near '%s'" %
+                          (t.lineno, t.lexpos, t.value))
 
     # Build the lexer
     def build(self,**kwargs):
-        self.lexer = lex.lex(module=self, **kwargs)
+        self.lexer = lex.lex(module=self, optimize=False,
+                             nowarn=True, debug=0, **kwargs)
 
     # Just for testing
     def test(self,data):
@@ -234,7 +265,7 @@ class TemporalOperatorLexer(object):
         while True:
              tok = self.lexer.token()
              if not tok: break
-             print tok
+             print(tok)
 
 ###############################################################################
 
@@ -244,35 +275,54 @@ class TemporalOperatorParser(object):
     def __init__(self):
         self.lexer = TemporalOperatorLexer()
         self.lexer.build()
-        self.parser = yacc.yacc(module=self)
-        self.relations = None
-        self.temporal  = None
-        self.function  = None
-        self.aggregate = None
-
-    def parse(self, expression,  optype = 'relation'):
-        self.optype = optype        
+        self.parser = yacc.yacc(module=self, debug=0)
+        self.relations = None   # Temporal relations (equals, contain, during, ...)
+        self.temporal  = None   # Temporal operation (intersect, left, right, ...)
+        self.function  = None   # Actual operation (+, -, /, *, ... )
+        self.aggregate = None   # Aggregation function (|, &)
+
+        self.optype_list = ["select", "boolean", "raster", "hash", "relation", "overlay"]
+
+    def parse(self, expression, optype='relation'):
+        """Parse the expression and fill the object variables
+
+        :param expression:
+        :param optype: The parameter optype can be of type:
+                       - select   { :, during,   r}
+                       - boolean  {&&, contains, |}
+                       - raster   { *, equal,    |}
+                       - overlay  { |, starts,   &}
+                       - hash     { #, during,   l}
+                       - relation {during}
+        :return:
+        """
+        self.optype = optype
+
+        if optype not in self.optype_list:
+            raise SyntaxError("Unknown optype %s, must be one of %s"%(self.optype, str(self.optype_list)))
+        self.expression = expression
         self.parser.parse(expression)
-        # The parameter optype can be of type: select {:, during, r}, boolean{&&, contains, |}, 
-        #                                                            raster{*, equal, |}, vector {|, starts, &},
-        #                                                            hash{#, during, l} or relation {during}.
-    
+
     # Error rule for syntax errors.
     def p_error(self, t):
-        raise SyntaxError("Unexpected syntax error")
+        raise SyntaxError("Unexpected syntax error in expression"
+                          " \"%s\" at position %i near %s"%(self.expression,
+                                                            t.lexpos,
+                                                            t.value))
 
     # Get the tokens from the lexer class
     tokens = TemporalOperatorLexer.tokens
- 
+
     def p_relation_operator(self, t):
-        # The expression should always return a list of maps.
+        # {during}
+        # {during | equal | starts}
         """
         operator : CLPAREN relation CRPAREN
                  | CLPAREN relationlist CRPAREN
         """
         # Check for correct type.
         if not self.optype == 'relation':
-            raise SyntaxError("invalid syntax")
+            raise SyntaxError("Wrong optype \"%s\" must be \"relation\""%self.optype)
         else:
             # Set three operator components.
             if isinstance(t[2], list):
@@ -285,16 +335,17 @@ class TemporalOperatorParser(object):
             t[0] = t[2]
 
     def p_relation_bool_operator(self, t):
-        # The expression should always return a list of maps.
+        # {||, during}
+        # {&&, during | equal | starts}
         """
-        operator : CLPAREN OR OR COMMA relation CRPAREN
-                | CLPAREN AND AND COMMA relation CRPAREN
-                | CLPAREN OR OR COMMA relationlist CRPAREN
-                | CLPAREN AND AND COMMA relationlist CRPAREN
+        operator : CLPAREN OR  OR  COMMA relation     CRPAREN
+                 | CLPAREN AND AND COMMA relation     CRPAREN
+                 | CLPAREN OR  OR  COMMA relationlist CRPAREN
+                 | CLPAREN AND AND COMMA relationlist CRPAREN
         """
         if not self.optype == 'boolean':
-            raise SyntaxError("invalid syntax")
-        else:        
+            raise SyntaxError("Wrong optype \"%s\" must be \"boolean\""%self.optype)
+        else:
             # Set three operator components.
             if isinstance(t[5], list):
                 self.relations = t[5]
@@ -303,24 +354,25 @@ class TemporalOperatorParser(object):
             self.temporal  = "l"
             self.function  = t[2] + t[3]
             self.aggregate = t[2]
-            
+
             t[0] = t[2]
 
     def p_relation_bool_combi_operator(self, t):
-        # The expression should always return a list of maps.
-        """
-        operator : CLPAREN OR OR COMMA relation COMMA OR CRPAREN
-                | CLPAREN OR OR COMMA relation COMMA AND CRPAREN
-                | CLPAREN AND AND COMMA relation COMMA OR CRPAREN
-                | CLPAREN AND AND COMMA relation COMMA AND CRPAREN
-                | CLPAREN OR OR COMMA relationlist COMMA OR CRPAREN
-                | CLPAREN OR OR COMMA relationlist COMMA AND CRPAREN
-                | CLPAREN AND AND COMMA relationlist COMMA OR CRPAREN
-                | CLPAREN AND AND COMMA relationlist COMMA AND CRPAREN
+        # {||, during, &}
+        # {&&, during | equal | starts, |}
+        """
+        operator : CLPAREN OR  OR  COMMA relation     COMMA OR  CRPAREN
+                 | CLPAREN OR  OR  COMMA relation     COMMA AND CRPAREN
+                 | CLPAREN AND AND COMMA relation     COMMA OR  CRPAREN
+                 | CLPAREN AND AND COMMA relation     COMMA AND CRPAREN
+                 | CLPAREN OR  OR  COMMA relationlist COMMA OR  CRPAREN
+                 | CLPAREN OR  OR  COMMA relationlist COMMA AND CRPAREN
+                 | CLPAREN AND AND COMMA relationlist COMMA OR  CRPAREN
+                 | CLPAREN AND AND COMMA relationlist COMMA AND CRPAREN
         """
         if not self.optype == 'boolean':
-            raise SyntaxError("invalid syntax")
-        else:        
+            raise SyntaxError("Wrong optype \"%s\" must be \"boolean\""%self.optype)
+        else:
             # Set three operator components.
             if isinstance(t[5], list):
                 self.relations = t[5]
@@ -329,20 +381,21 @@ class TemporalOperatorParser(object):
             self.temporal  = "l"
             self.function  = t[2] + t[3]
             self.aggregate = t[7]
-            
+
             t[0] = t[2]
 
     def p_relation_bool_combi_operator2(self, t):
-        # The expression should always return a list of maps.
+        # {||, during, left}
+        # {&&, during | equal | starts, union}
         """
-        operator : CLPAREN OR OR COMMA relation COMMA temporal CRPAREN
-                | CLPAREN AND AND COMMA relation COMMA temporal CRPAREN
-                | CLPAREN OR OR COMMA relationlist COMMA temporal CRPAREN
-                | CLPAREN AND AND COMMA relationlist COMMA temporal CRPAREN
+        operator : CLPAREN OR  OR  COMMA relation     COMMA temporal CRPAREN
+                 | CLPAREN AND AND COMMA relation     COMMA temporal CRPAREN
+                 | CLPAREN OR  OR  COMMA relationlist COMMA temporal CRPAREN
+                 | CLPAREN AND AND COMMA relationlist COMMA temporal CRPAREN
         """
         if not self.optype == 'boolean':
-            raise SyntaxError("invalid syntax")
-        else:        
+            raise SyntaxError("Wrong optype \"%s\" must be \"boolean\""%self.optype)
+        else:
             # Set three operator components.
             if isinstance(t[5], list):
                 self.relations = t[5]
@@ -351,24 +404,25 @@ class TemporalOperatorParser(object):
             self.temporal  = t[7]
             self.function  = t[2] + t[3]
             self.aggregate = t[2]
-            
+
             t[0] = t[2]
-    
+
     def p_relation_bool_combi_operator3(self, t):
-        # The expression should always return a list of maps.
-        """
-        operator : CLPAREN OR OR COMMA relation COMMA OR COMMA temporal CRPAREN
-                | CLPAREN OR OR COMMA relation COMMA AND COMMA temporal CRPAREN
-                | CLPAREN AND AND COMMA relation COMMA OR COMMA temporal CRPAREN
-                | CLPAREN AND AND COMMA relation COMMA AND COMMA temporal CRPAREN
-                | CLPAREN OR OR COMMA relationlist COMMA OR COMMA temporal CRPAREN
-                | CLPAREN OR OR COMMA relationlist COMMA AND COMMA temporal CRPAREN
-                | CLPAREN AND AND COMMA relationlist COMMA OR COMMA temporal CRPAREN
-                | CLPAREN AND AND COMMA relationlist COMMA AND COMMA temporal CRPAREN
+        # {||, during, |, left}
+        # {&&, during | equal | starts, &, union}
+        """
+        operator : CLPAREN OR  OR  COMMA relation     COMMA OR  COMMA temporal CRPAREN
+                 | CLPAREN OR  OR  COMMA relation     COMMA AND COMMA temporal CRPAREN
+                 | CLPAREN AND AND COMMA relation     COMMA OR  COMMA temporal CRPAREN
+                 | CLPAREN AND AND COMMA relation     COMMA AND COMMA temporal CRPAREN
+                 | CLPAREN OR  OR  COMMA relationlist COMMA OR  COMMA temporal CRPAREN
+                 | CLPAREN OR  OR  COMMA relationlist COMMA AND COMMA temporal CRPAREN
+                 | CLPAREN AND AND COMMA relationlist COMMA OR  COMMA temporal CRPAREN
+                 | CLPAREN AND AND COMMA relationlist COMMA AND COMMA temporal CRPAREN
         """
         if not self.optype == 'boolean':
-            raise SyntaxError("invalid syntax")
-        else:        
+            raise SyntaxError("Wrong optype \"%s\" must be \"relation\""%self.optype)
+        else:
             # Set three operator components.
             if isinstance(t[5], list):
                 self.relations = t[5]
@@ -377,30 +431,29 @@ class TemporalOperatorParser(object):
             self.temporal  = t[9]
             self.function  = t[2] + t[3]
             self.aggregate = t[7]
-            
+
             t[0] = t[2]
-    
+
     def p_select_relation_operator(self, t):
-        # The expression should always return a list of maps.
+        # {!:}
+        # { :, during}
+        # {!:, during | equal | starts}
+        # { :, during | equal | starts, l}
         """
         operator : CLPAREN select CRPAREN
-                    | CLPAREN select COMMA relation CRPAREN
-                    | CLPAREN select COMMA relationlist CRPAREN
-                    | CLPAREN select COMMA relation COMMA temporal CRPAREN
-                    | CLPAREN select COMMA relationlist COMMA temporal CRPAREN
+                 | CLPAREN select COMMA relation     CRPAREN
+                 | CLPAREN select COMMA relationlist CRPAREN
+                 | CLPAREN select COMMA relation     COMMA temporal CRPAREN
+                 | CLPAREN select COMMA relationlist COMMA temporal CRPAREN
         """
         if not self.optype == 'select':
-            raise SyntaxError("invalid syntax")
+            raise SyntaxError("Wrong optype \"%s\" must be \"select\""%self.optype)
         else:
             if len(t) == 4:
                 # Set three operator components.
                 self.relations = ['equal']
                 self.temporal  = "l"
                 self.function  = t[2]
-            elif len(t) == 5:
-                self.relations = ['equal']
-                self.temporal  = t[3]
-                self.function  = t[2]
             elif len(t) == 6:
                 if isinstance(t[4], list):
                     self.relations = t[4]
@@ -418,26 +471,25 @@ class TemporalOperatorParser(object):
             t[0] = t[2]
 
     def p_hash_relation_operator(self, t):
-        # The expression should always return a list of maps.
+        # {#}
+        # {#, during}
+        # {#, during | equal | starts}
+        # {#, during | equal | starts, l}
         """
         operator : CLPAREN HASH CRPAREN
-                    | CLPAREN HASH COMMA relation CRPAREN
-                    | CLPAREN HASH COMMA relationlist CRPAREN
-                    | CLPAREN HASH COMMA relation COMMA temporal CRPAREN
-                    | CLPAREN HASH COMMA relationlist COMMA temporal CRPAREN
+                 | CLPAREN HASH COMMA relation     CRPAREN
+                 | CLPAREN HASH COMMA relationlist CRPAREN
+                 | CLPAREN HASH COMMA relation     COMMA temporal CRPAREN
+                 | CLPAREN HASH COMMA relationlist COMMA temporal CRPAREN
         """
         if not self.optype == 'hash':
-            raise SyntaxError("invalid syntax")
+            raise SyntaxError("Wrong optype \"%s\" must be \"hash\""%self.optype)
         else:
             if len(t) == 4:
                 # Set three operator components.
                 self.relations = ['equal']
                 self.temporal  = "l"
                 self.function  = t[2]
-            elif len(t) == 5:
-                self.relations = ['equal']
-                self.temporal  = t[3]
-                self.function  = t[2]
             elif len(t) == 6:
                 if isinstance(t[4], list):
                     self.relations = t[4]
@@ -455,26 +507,25 @@ class TemporalOperatorParser(object):
             t[0] = t[2]
 
     def p_raster_relation_operator(self, t):
-        # The expression should always return a list of maps.
+        # {+}
+        # {-, during}
+        # {*, during | equal | starts}
+        # {/, during | equal | starts, l}
         """
         operator : CLPAREN arithmetic CRPAREN
-                    | CLPAREN arithmetic COMMA relation CRPAREN
-                    | CLPAREN arithmetic COMMA relationlist CRPAREN
-                    | CLPAREN arithmetic COMMA relation COMMA temporal CRPAREN
-                    | CLPAREN arithmetic COMMA relationlist COMMA temporal CRPAREN
+                 | CLPAREN arithmetic COMMA relation     CRPAREN
+                 | CLPAREN arithmetic COMMA relationlist CRPAREN
+                 | CLPAREN arithmetic COMMA relation     COMMA temporal CRPAREN
+                 | CLPAREN arithmetic COMMA relationlist COMMA temporal CRPAREN
         """
         if not self.optype == 'raster':
-            raise SyntaxError("invalid syntax")
+            raise SyntaxError("Wrong optype \"%s\" must be \"raster\""%self.optype)
         else:
             if len(t) == 4:
                 # Set three operator components.
                 self.relations = ['equal']
                 self.temporal  = "l"
                 self.function  = t[2]
-            elif len(t) == 5:
-                self.relations = ['equal']
-                self.temporal  = t[3]
-                self.function  = t[2]
             elif len(t) == 6:
                 if isinstance(t[4], list):
                     self.relations = t[4]
@@ -492,26 +543,25 @@ class TemporalOperatorParser(object):
             t[0] = t[2]
 
     def p_overlay_relation_operator(self, t):
-        # The expression should always return a list of maps.
+        # {+}
+        # {-, during}
+        # {~, during | equal | starts}
+        # {^, during | equal | starts, l}
         """
         operator : CLPAREN overlay CRPAREN
-                    | CLPAREN overlay COMMA relation CRPAREN
-                    | CLPAREN overlay COMMA relationlist CRPAREN
-                    | CLPAREN overlay COMMA relation COMMA temporal CRPAREN
-                    | CLPAREN overlay COMMA relationlist COMMA temporal CRPAREN
+                 | CLPAREN overlay COMMA relation     CRPAREN
+                 | CLPAREN overlay COMMA relationlist CRPAREN
+                 | CLPAREN overlay COMMA relation     COMMA temporal CRPAREN
+                 | CLPAREN overlay COMMA relationlist COMMA temporal CRPAREN
         """
         if not self.optype == 'overlay':
-            raise SyntaxError("invalid syntax")
+            raise SyntaxError("Wrong optype \"%s\" must be \"overlay\""%self.optype)
         else:
             if len(t) == 4:
                 # Set three operator components.
                 self.relations = ['equal']
                 self.temporal  = "l"
                 self.function  = t[2]
-            elif len(t) == 5:
-                self.relations = ['equal']
-                self.temporal  = t[3]
-                self.function  = t[2]
             elif len(t) == 6:
                 if isinstance(t[4], list):
                     self.relations = t[4]
@@ -546,7 +596,7 @@ class TemporalOperatorParser(object):
         t[0] = t[1]
 
     def p_over(self, t):
-        # The list of relations.
+        # The the over keyword
         """
         relation : OVER
         """
@@ -571,10 +621,10 @@ class TemporalOperatorParser(object):
         # The list of relations.
         """
         temporal : LEFTREF
-                | RIGHTREF
-                | UNION
-                | DISJOINT
-                | INTERSECT
+                 | RIGHTREF
+                 | UNION
+                 | DISJOINT
+                 | INTERSECT
         """
         t[0] = t[1]
 
@@ -601,10 +651,10 @@ class TemporalOperatorParser(object):
         # The list of relations.
         """
         overlay : AND
-                   | OR
-                   | XOR
-                   | DISOR
-                   | NOT
+                | OR
+                | XOR
+                | DISOR
+                | NOT
         """
         t[0] = t[1]
 ###############################################################################
@@ -612,4 +662,3 @@ class TemporalOperatorParser(object):
 if __name__ == "__main__":
     import doctest
     doctest.testmod()
-
diff --git a/lib/python/temporal/temporal_raster3d_algebra.py b/lib/python/temporal/temporal_raster3d_algebra.py
index 3f88ee4..c9c9d94 100644
--- a/lib/python/temporal/temporal_raster3d_algebra.py
+++ b/lib/python/temporal/temporal_raster3d_algebra.py
@@ -10,17 +10,19 @@ for details.
 :authors: Thomas Leppelt and Soeren Gebbert
 
 """
-
-import grass.pygrass.modules as pygrass
-from temporal_raster_base_algebra import *
+from .temporal_raster_base_algebra import *
 
 ###############################################################################
 
 class TemporalRaster3DAlgebraParser(TemporalRasterBaseAlgebraParser):
     """The temporal raster algebra class"""
 
-    def __init__(self, pid=None, run=False, debug=True, spatial = False, nprocs = 1, register_null = False):
-        TemporalRasterBaseAlgebraParser.__init__(self, pid, run, debug, spatial, nprocs, register_null)
+    def __init__(self, pid=None, run=False, debug=True, spatial=False,
+                 register_null=False, dry_run=False, nprocs=1):
+
+        TemporalRasterBaseAlgebraParser.__init__(self, pid=pid, run=run, debug=debug,
+                                                 spatial=spatial, register_null=register_null,
+                                                 dry_run=dry_run, nprocs=nprocs)
 
         self.m_mapcalc = pymod.Module('r3.mapcalc')
         self.m_mremove = pymod.Module('g.remove')
@@ -34,7 +36,7 @@ class TemporalRaster3DAlgebraParser(TemporalRasterBaseAlgebraParser):
         while True:
             tok = l.lexer.token()
             if not tok: break
-            
+
             if tok.type == "STVDS" or tok.type == "STRDS" or tok.type == "STR3DS":
                 raise SyntaxError("Syntax error near '%s'" %(tok.type))
 
@@ -51,6 +53,8 @@ class TemporalRaster3DAlgebraParser(TemporalRasterBaseAlgebraParser):
         self.expression = expression
         self.parser.parse(expression)
 
+        return self.process_chain_dict
+
     ######################### Temporal functions ##############################
 
     def p_statement_assign(self, t):
diff --git a/lib/python/temporal/temporal_raster_algebra.py b/lib/python/temporal/temporal_raster_algebra.py
index af02223..1fe7c04 100644
--- a/lib/python/temporal/temporal_raster_algebra.py
+++ b/lib/python/temporal/temporal_raster_algebra.py
@@ -52,15 +52,19 @@ for details.
 
 """
 
-from temporal_raster_base_algebra import *
+from .temporal_raster_base_algebra import *
 
 ###############################################################################
 
 class TemporalRasterAlgebraParser(TemporalRasterBaseAlgebraParser):
     """The temporal raster algebra class"""
 
-    def __init__(self, pid=None, run=False, debug=True, spatial = False, nprocs = 1, register_null = False):
-        TemporalRasterBaseAlgebraParser.__init__(self, pid, run, debug, spatial, nprocs, register_null)
+    def __init__(self, pid=None, run=False, debug=True, spatial=False,
+                 register_null=False, dry_run=False, nprocs=1):
+
+        TemporalRasterBaseAlgebraParser.__init__(self, pid=pid, run=run, debug=debug,
+                                                 spatial=spatial, register_null=register_null,
+                                                 dry_run=dry_run, nprocs=nprocs)
 
         self.m_mapcalc = pymod.Module('r.mapcalc')
         self.m_mremove = pymod.Module('g.remove')
@@ -74,10 +78,10 @@ class TemporalRasterAlgebraParser(TemporalRasterBaseAlgebraParser):
         while True:
             tok = l.lexer.token()
             if not tok: break
-            
+
             if tok.type == "STVDS" or tok.type == "STRDS" or tok.type == "STR3DS":
                 raise SyntaxError("Syntax error near '%s'" %(tok.type))
-        
+
         self.lexer = TemporalRasterAlgebraLexer()
         self.lexer.build()
         self.parser = yacc.yacc(module=self, debug=self.debug)
@@ -91,6 +95,8 @@ class TemporalRasterAlgebraParser(TemporalRasterBaseAlgebraParser):
         self.expression = expression
         self.parser.parse(expression)
 
+        return self.process_chain_dict
+
     ######################### Temporal functions ##############################
 
     def p_statement_assign(self, t):
@@ -101,6 +107,7 @@ class TemporalRasterAlgebraParser(TemporalRasterBaseAlgebraParser):
         TemporalRasterBaseAlgebraParser.p_statement_assign(self, t)
 
     def p_ts_neighbour_operation(self, t):
+        # Spatial and temporal neighbour operations via indexing
         # Examples:
         # A[1,0]
         # B[-2]
diff --git a/lib/python/temporal/temporal_raster_base_algebra.py b/lib/python/temporal/temporal_raster_base_algebra.py
index 44acca9..65e653a 100644
--- a/lib/python/temporal/temporal_raster_base_algebra.py
+++ b/lib/python/temporal/temporal_raster_base_algebra.py
@@ -14,25 +14,25 @@ for details.
     >>> p = TemporalRasterAlgebraLexer()
     >>> p.build()
     >>> p.debug = True
-    >>> expression =  'R = A {+,equal,l} B '
+    >>> expression =  'R = A {+,equal,l} B'
     >>> p.test(expression)
-    R = A {+,equal,l} B 
+    R = A {+,equal,l} B
     LexToken(NAME,'R',1,0)
     LexToken(EQUALS,'=',1,2)
     LexToken(NAME,'A',1,4)
     LexToken(T_ARITH2_OPERATOR,'{+,equal,l}',1,6)
     LexToken(NAME,'B',1,18)
-    >>> expression =  'R = A {*,equal|during,r} B '
+    >>> expression =  'R = A {*,equal|during,r} B'
     >>> p.test(expression)
-    R = A {*,equal|during,r} B 
+    R = A {*,equal|during,r} B
     LexToken(NAME,'R',1,0)
     LexToken(EQUALS,'=',1,2)
     LexToken(NAME,'A',1,4)
     LexToken(T_ARITH1_OPERATOR,'{*,equal|during,r}',1,6)
     LexToken(NAME,'B',1,25)
-    >>> expression =  'R = A {+,equal|during} B '
+    >>> expression =  'R = A {+,equal|during} B'
     >>> p.test(expression)
-    R = A {+,equal|during} B 
+    R = A {+,equal|during} B
     LexToken(NAME,'R',1,0)
     LexToken(EQUALS,'=',1,2)
     LexToken(NAME,'A',1,4)
@@ -40,10 +40,10 @@ for details.
     LexToken(NAME,'B',1,23)
 
 """
-
+from __future__ import print_function
 import grass.pygrass.modules as pymod
-from temporal_operator import *
-from temporal_algebra import *
+from .temporal_operator import *
+from .temporal_algebra import *
 
 ##############################################################################
 
@@ -70,12 +70,12 @@ class TemporalRasterAlgebraLexer(TemporalAlgebraLexer):
         'isnull'  : 'ISNULL',
         'isntnull': 'ISNTNULL',
         'null'    : 'NULL',
-        'exist'   : 'EXIST',   
+        'exist'   : 'EXIST',
     }
-    
+
     # Functions that defines single maps with time stamp and without temporal extent.
     map_functions = {'map' : 'MAP'}
-    
+
     # This is the list of token names.
     raster_tokens = (
         'MOD',
@@ -138,11 +138,19 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         ('left', 'AND', 'OR', 'T_COMP_OPERATOR', 'MOD', 'DIV', 'MULT',
          'T_ARITH1_OPERATOR'))
 
-    def __init__(self, pid=None, run = True, debug = False, spatial = False, \
-                  nprocs = 1, register_null = False):
-        TemporalAlgebraParser.__init__(self, pid, run, debug, spatial)
-        self.nprocs = nprocs
-        self.register_null = register_null
+    def __init__(self, pid=None, run=True,
+                 debug=False, spatial=False,
+                 register_null=False,
+                 dry_run=False, nprocs=1):
+
+        TemporalAlgebraParser.__init__(self,
+                                       pid=pid,
+                                       run=run,
+                                       debug=debug,
+                                       spatial=spatial,
+                                       register_null=register_null,
+                                       dry_run=dry_run,
+                                       nprocs=nprocs)
 
     def check_null(self, t):
         try:
@@ -152,38 +160,38 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             return "null()"
 
     ######################### Temporal functions ##############################
-    def get_temporal_topo_list(self, maplistA, maplistB = None, topolist = ["EQUAL"],
-                               assign_val = False, count_map = False, compare_bool = False,  
-                               compare_cmd = False,  compop = None, aggregate = None,  
-                               new = False,  convert = False,  operator_cmd = False):
+    def get_temporal_topo_list(self, maplistA, maplistB=None, topolist=["EQUAL"],
+                               assign_val=False, count_map=False, compare_bool=False,
+                               compare_cmd=False,  compop=None, aggregate=None,
+                               new=False,  convert=False,  operator_cmd=False):
         """Build temporal topology for two space time data sets, copy map objects
-          for given relation into map list.
-          
-          :param maplistA: List of maps.
-          :param maplistB: List of maps.
-          :param topolist: List of strings of temporal relations.
-          :param assign_val: Boolean for assigning a boolean map value based on
-                            the map_values from the compared map list by
-                            topological relationships.
-          :param count_map: Boolean if the number of topological related maps
-                           should be returned.
-          :param compare_bool: Boolean for comparing boolean map values based on
-                            related map list and compariosn operator.
-          :param compare_cmd: Boolean for comparing command list values based on
-                            related map list and compariosn operator.
-          :param compop: Comparison operator, && or ||.
-          :param aggregate: Aggregation operator for relation map list, & or |.
-          :param new: Boolean if new temporary maps should be created.
-          :param convert: Boolean if conditional values should be converted to 
-                        r.mapcalc command strings.
-          :param operator_cmd: Boolean for aggregate arithmetic operators implicitly 
-                        in command list values based on related map lists.
-                    
-          :return: List of maps from maplistA that fulfil the topological relationships
-                  to maplistB specified in topolist.
-        """
-        topologylist = ["EQUAL", "FOLLOWS", "PRECEDES", "OVERLAPS", "OVERLAPPED", \
-                        "DURING", "STARTS", "FINISHES", "CONTAINS", "STARTED", \
+        for given relation into map list.
+
+        :param maplistA: List of maps.
+        :param maplistB: List of maps.
+        :param topolist: List of strings of temporal relations.
+        :param assign_val: Boolean for assigning a boolean map value based on
+                        the map_values from the compared map list by
+                        topological relationships.
+        :param count_map: Boolean if the number of topological related maps
+                       should be returned.
+        :param compare_bool: Boolean for comparing boolean map values based on
+                        related map list and compariosn operator.
+        :param compare_cmd: Boolean for comparing command list values based on
+                        related map list and compariosn operator.
+        :param compop: Comparison operator, && or ||.
+        :param aggregate: Aggregation operator for relation map list, & or |.
+        :param new: Boolean if new temporary maps should be created.
+        :param convert: Boolean if conditional values should be converted to
+                    r.mapcalc command strings.
+        :param operator_cmd: Boolean for aggregate arithmetic operators implicitly
+                    in command list values based on related map lists.
+
+        :return: List of maps from maplistA that fulfil the topological relationships
+              to maplistB specified in topolist.
+        """
+        topologylist = ["EQUAL", "FOLLOWS", "PRECEDES", "OVERLAPS", "OVERLAPPED",
+                        "DURING", "STARTS", "FINISHES", "CONTAINS", "STARTED",
                         "FINISHED"]
         complementdict = {"EQUAL": "EQUAL", "FOLLOWS" : "PRECEDES",
                           "PRECEDES" : "FOLLOWS", "OVERLAPS" : "OVERLAPPED",
@@ -203,7 +211,7 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         spatialdict = {'strds' : '2D', 'stvds' : '2D', 'str3ds' : '3D'}
         # Build spatial temporal topology
         if self.spatial:
-            tb.build(maplistA, maplistB, spatial = spatialdict[self.stdstype])
+            tb.build(maplistA, maplistB, spatial=spatialdict[self.stdstype])
         else:
             tb.build(maplistA, maplistB)
         # Iterate through maps in maplistA and search for relationships given
@@ -219,7 +227,7 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                 self.compare_cmd_value(map_i,  tbrelations, compop, aggregate, topolist, convert)
             elif operator_cmd:
                 self.operator_cmd_value(map_i,  tbrelations, compop, topolist)
-                
+
             for topo in topolist:
                 if topo.upper() in tbrelations.keys():
                     if count_map:
@@ -233,30 +241,30 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                     # Use unique identifier, since map names may be equal
                     resultdict[map_i.uid] = map_i
         resultlist = resultdict.values()
-        
+
         # Sort list of maps chronological.
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
-        
-        return(resultlist)    
-    
+
+        return(resultlist)
+
     def build_command_string(self, map_i,  relmap, operator = None, cmd_type = None):
-        """This function build the r.mapcalc command string for conditionals, 
-            spatial variable combinations and boolean comparisons.
-            
-            For Example: 'if(a1 == 1, b1, c2)' or 'exist(a1) && sin(b1)'
-            
-            :param map_i: map object with temporal extent and built relations.
-            :param relmap: map object with defined temporal relation to map_i.
-            :param operator: String representing operator between two spatial variables 
-                            (&&,||,+,-,*,/).
-            :param cmd_type: map object with defined temporal relation to map_i:
-                            condition, conclusion or operator.
-            
-            :return: the resulting command string for conditionals or spatial variable 
-                combinations
-        """    
+        """This function build the r.mapcalc command string for conditionals,
+        spatial variable combinations and boolean comparisons.
+
+        For Example: 'if(a1 == 1, b1, c2)' or 'exist(a1) && sin(b1)'
+
+        :param map_i: map object with temporal extent and built relations.
+        :param relmap: map object with defined temporal relation to map_i.
+        :param operator: String representing operator between two spatial variables
+                        (&&,||,+,-,*,/).
+        :param cmd_type: map object with defined temporal relation to map_i:
+                        condition, conclusion or operator.
+
+        :return: the resulting command string for conditionals or spatial variable
+            combinations
+        """
         def sub_cmdstring(map_i):
-            """This function search for command string in a map object and 
+            """This function search for command string in a map object and
             return substitute string (contained commandstring or map name)"""
             if "cmd_list" in dir(map_i):
                 map_sub = map_i.cmd_list
@@ -268,8 +276,8 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                 except:
                     map_sub = map_i
             return(map_sub)
-        
-        # Check  for type of operation, conditional or spatial variable combination 
+
+        # Check  for type of operation, conditional or spatial variable combination
         # and Create r.mapcalc expression string for the operation.
         cmdstring = ""
         if cmd_type == 'condition':
@@ -284,27 +292,29 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             leftsub = sub_cmdstring(map_i)
             rightsub = sub_cmdstring(relmap)
             if operator == None:
-                self.msgr.fatal("Error: Can't build command string for map %s, operator is missing" \
+                self.msgr.fatal("Error: Can't build command string for map %s, operator is missing"
                     %(map_i.get_map_id()))
-            cmdstring = "(%s %s %s)" %(leftsub, operator,  rightsub)
+            cmdstring = "(%s %s %s)" %(leftsub, operator, rightsub)
         return(cmdstring)
 
-    def compare_cmd_value(self,  map_i, tbrelations, compop, aggregate,  
-                                                topolist = ["EQUAL"],  convert = False):
-        """ Function to evaluate two map lists with boolean values by boolean 
-            comparison operator. Extended temporal algebra version with command 
-            list builder for temporal raster algebra.
-            
-            :param map_i: Map object with temporal extent.
-            :param tbrelations: List of temporal relation to map_i.
-            :param topolist: List of strings for given temporal relations.
-            :param compop: Comparison operator, && or ||.
-            :param aggregate: Aggregation operator for relation map list, & or |.
-            :param convert: Boolean if conditional values should be converted to 
-                        r.mapcalc command strings.
-
-            :return: Map object with conditional value that has been evaluated by
-                        comparison operators.
+    def compare_cmd_value(self,  map_i, tbrelations, compop, aggregate,
+                          topolist = ["EQUAL"],  convert = False):
+        """ Function to evaluate two map lists with boolean values by boolean
+        comparison operator.
+
+        Extended temporal algebra version with command
+        list builder for temporal raster algebra.
+
+        :param map_i: Map object with temporal extent.
+        :param tbrelations: List of temporal relation to map_i.
+        :param topolist: List of strings for given temporal relations.
+        :param compop: Comparison operator, && or ||.
+        :param aggregate: Aggregation operator for relation map list, & or |.
+        :param convert: Boolean if conditional values should be converted to
+                    r.mapcalc command strings.
+
+        :return: Map object with conditional value that has been evaluated by
+                    comparison operators.
         """
         # Build comandlist list with elements from related maps and given relation operator.
         if convert and "condition_value" in dir(map_i):
@@ -315,7 +325,7 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             leftcmd = map_i.cmd_list
             cmd_value_list = [leftcmd]
         count = 0
-        
+
         for topo in topolist:
             if topo.upper() in tbrelations.keys():
                 relationmaplist = tbrelations[topo.upper()]
@@ -337,19 +347,19 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             cmd_value_str = ''.join(map(str, cmd_value_list))
             # Add command list to result map.
             map_i.cmd_list = cmd_value_str
-        
+
             return(cmd_value_str)
 
     def operator_cmd_value(self,  map_i, tbrelations, operator, topolist = ["EQUAL"]):
         """ Function to evaluate two map lists by given arithmetic operator.
-        
-            :param map_i: Map object with temporal extent.
-            :param tbrelations: List of temporal relation to map_i.
-            :param topolist: List of strings for given temporal relations.
-            :param operator: Arithmetic operator, +-*/%.
 
-            :return: Map object with command list with  operators that has been 
-                        evaluated by implicit aggregration.
+        :param map_i: Map object with temporal extent.
+        :param tbrelations: List of temporal relation to map_i.
+        :param topolist: List of strings for given temporal relations.
+        :param operator: Arithmetic operator, +-*/%.
+
+        :return: Map object with command list with  operators that has been
+                    evaluated by implicit aggregration.
         """
         # Build comandlist list with elements from related maps and given relation operator.
         leftcmd = map_i
@@ -359,55 +369,60 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                 relationmaplist = tbrelations[topo.upper()]
                 for relationmap in relationmaplist:
                     # Create r.mapcalc expression string for the operation.
-                    cmdstring = self.build_command_string(leftcmd,  
-                                                                                        relationmap, 
-                                                                                        operator = operator, 
-                                                                                        cmd_type = "operator")
+                    cmdstring = self.build_command_string(leftcmd,
+                                                          relationmap,
+                                                          operator=operator,
+                                                          cmd_type="operator")
                     leftcmd = cmdstring
         # Add command list to result map.
         map_i.cmd_list = cmdstring
-        
+
         return(cmdstring)
-    
-    def set_temporal_extent_list(self, maplist, topolist = ["EQUAL"], temporal = 'l' , 
-                                                        cmd_bool = False, cmd_type = None,  operator = None):
-        """ Change temporal extent of map list based on temporal relations to 
-                other map list and given temporal operator.
-
-            :param maplist: List of map objects for which relations has been build 
-                                        correctely.
-            :param topolist: List of strings of temporal relations.
-            :param temporal: The temporal operator specifying the temporal
-                                            extent operation (intersection, union, disjoint 
-                                            union, right reference, left reference).
-            :param cmd_bool: Boolean if command string should be merged for related maps.
-            :param cmd_type: map object with defined temporal relation to map_i:
-                            condition, conclusion or operator.
-            :param operator: String defining the type of operator.
-
-            :return: Map list with specified temporal extent and optional command string.
+
+    def set_temporal_extent_list(self, maplist, topolist=["EQUAL"], temporal='l' ,
+                                 cmd_bool=False, cmd_type=None,  operator=None):
+        """ Change temporal extent of map list based on temporal relations to
+        other map list and given temporal operator.
+
+        :param maplist: List of map objects for which relations has been build
+                                    correctely.
+        :param topolist: List of strings of temporal relations.
+        :param temporal: The temporal operator specifying the temporal
+                                        extent operation (intersection, union, disjoint
+                                        union, right reference, left reference).
+        :param cmd_bool: Boolean if command string should be merged for related maps.
+        :param cmd_type: map object with defined temporal relation to map_i:
+                        condition, conclusion or operator.
+        :param operator: String defining the type of operator.
+
+        :return: Map list with specified temporal extent and optional command string.
         """
         resultdict = {}
-        
+
         for map_i in maplist:
             # Loop over temporal related maps and create overlay modules.
             tbrelations = map_i.get_temporal_relations()
             # Generate an intermediate map for the result map list.
-            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', 
-                                                                        copy = True,  rename = True)
-            
+            map_new = self.generate_new_map(base_map=map_i,
+                                            bool_op='and',
+                                            copy=True,
+                                            rename=True)
+
             # Combine temporal and spatial extents of intermediate map with related maps.
             for topo in topolist:
                 if topo in tbrelations.keys():
                     for map_j in (tbrelations[topo]):
                         if temporal == 'r':
                             # Generate an intermediate map for the result map list.
-                            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', 
-                                                                                        copy = True,  rename = True)
+                            map_new = self.generate_new_map(base_map=map_i,
+                                                            bool_op='and',
+                                                            copy=True,
+                                                            rename=True)
                         # Create overlayed map extent.
-                        returncode = self.overlay_map_extent(map_new, map_j, 'and', \
-                                                                temp_op = temporal)
-                        
+                        returncode = self.overlay_map_extent(map_new, map_j,
+                                                             'and',
+                                                             temp_op = temporal)
+
                         # Stop the loop if no temporal or spatial relationship exist.
                         if returncode == 0:
                             break
@@ -417,10 +432,10 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                             # resultlist.append(map_new)
                             if cmd_bool:
                                 # Create r.mapcalc expression string for the operation.
-                                cmdstring = self.build_command_string(map_i,  
-                                                                                                    map_j, 
-                                                                                                    operator = operator, 
-                                                                                                    cmd_type = cmd_type)
+                                cmdstring = self.build_command_string(map_i,
+                                                                      map_j,
+                                                                      operator=operator,
+                                                                      cmd_type=cmd_type)
                                 # Conditional append of module command.
                                 map_new.cmd_list = cmdstring
                             # Write map object to result dictionary.
@@ -433,66 +448,67 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         # Get sorted map objects as values from result dictionoary.
         resultlist = resultdict.values()
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
-        
+
         return(resultlist)
-    
-    def build_condition_cmd_list(self, iflist, thenlist,  elselist = None,  
-                                                        condition_topolist = ["EQUAL"], 
-                                                        conclusion_topolist = ["EQUAL"], 
-                                                        temporal = 'l', null = False):
+
+    def build_condition_cmd_list(self, iflist, thenlist,  elselist=None,
+                                 condition_topolist=["EQUAL"],
+                                 conclusion_topolist=["EQUAL"],
+                                 temporal='l', null=False):
         """This function build the r.mapcalc command strings for spatial conditionals.
-            For Example: 'if(a1 == 1, b1, c2)'
-
-            :param iflist: Map list with temporal extents and command list.
-            :param thenlist: Map list with temporal extents and command list or numeric string.
-            :param elselist: Map list with temporal extents and command list or numeric string.
-            :param condition_topolist: List of strings for given temporal relations between 
-                            conditions and conclusions.
-            :param conclusion_topolist: List of strings for given temporal relations between 
-                            conditions (then and else).
-            :param temporal: The temporal operator specifying the temporal
-                                            extent operation (intersection, union, disjoint 
-                                            union, right reference, left reference).
-            :param null: Boolean if null map support should be activated.
-
-            :return: map list with resulting command string for given condition type.
-        """    
+        For Example: 'if(a1 == 1, b1, c2)'
+
+        :param iflist: Map list with temporal extents and command list.
+        :param thenlist: Map list with temporal extents and command list or numeric string.
+        :param elselist: Map list with temporal extents and command list or numeric string.
+        :param condition_topolist: List of strings for given temporal relations between
+                        conditions and conclusions.
+        :param conclusion_topolist: List of strings for given temporal relations between
+                        conditions (then and else).
+        :param temporal: The temporal operator specifying the temporal
+                                        extent operation (intersection, union, disjoint
+                                        union, right reference, left reference).
+        :param null: Boolean if null map support should be activated.
+
+        :return: map list with resulting command string for given condition type.
+        """
         resultlist = []
         # First merge conclusion command maplists or strings.
         # Check if alternative conclusion map list is given.
         if all([isinstance(thenlist, list), isinstance(elselist, list)]):
             # Build conclusion command map list.
-            conclusiontopolist = self.get_temporal_topo_list(thenlist, elselist,  conclusion_topolist)
-            conclusionlist = self.set_temporal_extent_list(conclusiontopolist, 
-                                                                                    topolist = conclusion_topolist, 
-                                                                                    temporal = temporal , 
-                                                                                    cmd_bool = True, 
-                                                                                    cmd_type = "conclusion")
+            conclusiontopolist = self.get_temporal_topo_list(thenlist, elselist,
+                                                             conclusion_topolist)
+            conclusionlist = self.set_temporal_extent_list(conclusiontopolist,
+                                                           topolist=conclusion_topolist,
+                                                           temporal=temporal ,
+                                                           cmd_bool=True,
+                                                           cmd_type="conclusion")
         # Check if any conclusion is a numeric statements.
         elif any([isinstance(thenlist, str), isinstance(elselist, str)]):
-            conclusionlist = []            
+            conclusionlist = []
             # Check if only alternative conclusion is a numeric statements.
             if all([isinstance(thenlist, list), isinstance(elselist, str)]):
                 listinput = thenlist
                 numinput = elselist
                 for map_i in listinput:
                     # Create r.mapcalc expression string for the operation.
-                    cmdstring = self.build_command_string( map_i,  
-                                                                                            numinput, 
-                                                                                            cmd_type = 'conclusion')
+                    cmdstring = self.build_command_string(map_i,
+                                                          numinput,
+                                                          cmd_type='conclusion')
                     # Conditional append of module command.
                     map_i.cmd_list = cmdstring
                     # Append map to result map list.
                     conclusionlist.append(map_i)
             # Check if only direct conclusion is a numeric statements.
-            elif all([isinstance(thenlist, str), isinstance(elselist, list)]):                
+            elif all([isinstance(thenlist, str), isinstance(elselist, list)]):
                 listinput = elselist
                 numinput =  thenlist
                 for map_i in listinput:
                     # Create r.mapcalc expression string for the operation.
-                    cmdstring = self.build_command_string(numinput,  
-                                                                                            map_i,  
-                                                                                            cmd_type = 'conclusion')
+                    cmdstring = self.build_command_string(numinput,
+                                                          map_i,
+                                                          cmd_type='conclusion')
                     # Conditional append of module command.
                     map_i.cmd_list = cmdstring
                     # Append map to result map list.
@@ -502,15 +518,15 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         else:
             # The direct conclusion is used.
             conclusionlist = thenlist
-        # Use the conclusion map or string to merge it with the condition and 
+        # Use the conclusion map or string to merge it with the condition and
         # return maplist.
         if isinstance(conclusionlist,  str):
             resultlist = []
             for map_i in iflist:
                 # Create r.mapcalc expression string for the operation.
-                cmdstring = self.build_command_string(map_i,  
-                                                                                        conclusionlist,  
-                                                                                        cmd_type = 'condition')
+                cmdstring = self.build_command_string(map_i,
+                                                      conclusionlist,
+                                                      cmd_type='condition')
                 # Conditional append of module command.
                 map_i.cmd_list = cmdstring
                 # Append map to result map list.
@@ -518,29 +534,32 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             return(resultlist)
         elif isinstance(conclusionlist,  list):
             # Build result command map list between conditions and conclusions.
-            conditiontopolist = self.get_temporal_topo_list(iflist, conclusionlist,  
-                                                                                        topolist = condition_topolist)
-            resultlist = self.set_temporal_extent_list(conditiontopolist, 
-                                                                            topolist = condition_topolist, 
-                                                                            temporal = 'r' , 
-                                                                            cmd_bool = True, 
-                                                                            cmd_type = "condition")
+            conditiontopolist = self.get_temporal_topo_list(iflist,
+                                                            conclusionlist,
+                                                            topolist=condition_topolist)
+            resultlist = self.set_temporal_extent_list(conditiontopolist,
+                                                       topolist=condition_topolist,
+                                                       temporal='r',
+                                                       cmd_bool=True,
+                                                       cmd_type="condition")
             return(resultlist)
 
     ###########################################################################
 
     def p_statement_assign(self, t):
-        # The expression should always return a list of maps.
+        # This function executes the processing of raster/raster3d algebra
+        # that was build based on the expression
         """
         statement : stds EQUALS expr
         """
         if self.run:
             # Create the process queue for parallel mapcalc processing
-            process_queue = pymod.ParallelModuleQueue(int(self.nprocs))
+            if self.dry_run is False:
+                process_queue = pymod.ParallelModuleQueue(int(self.nprocs))
+
             if isinstance(t[3], list):
                 num = len(t[3])
                 count = 0
-                returncode = 0
                 register_list = []
                 for i in range(num):
                     # Check if resultmap names exist in GRASS database.
@@ -549,9 +568,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                         new_map = RasterDataset(map_name)
                     else:
                         new_map = Raster3DDataset(map_name)
-                    if new_map.map_exists() and self.overwrite == False:
-                        self.msgr.fatal("Error maps with basename %s exist. Use --o flag to overwrite existing file" \
-                                            %(map_name))
+                    if new_map.map_exists() and self.overwrite is False:
+                        self.msgr.fatal("Error maps with basename %s exist. "
+                                        "Use --o flag to overwrite existing file"%map_name)
                 map_test_list = []
                 for map_i in t[3]:
                     newident = self.basename + "_" + str(count)
@@ -560,82 +579,110 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                         # Change map name to given basename.
                         # Create deepcopy of r.mapcalc module.
 
-                        map_test = map_i.get_new_instance(newident + "@" + self.mapset)
-                        map_test.set_temporal_extent(map_i.get_temporal_extent())
-                        map_test.set_spatial_extent(map_i.get_spatial_extent())
-                        map_test_list.append(map_test)
+                        new_map = map_i.get_new_instance(newident + "@" + self.mapset)
+                        new_map.set_temporal_extent(map_i.get_temporal_extent())
+                        new_map.set_spatial_extent(map_i.get_spatial_extent())
+                        map_test_list.append(new_map)
 
                         m = copy.deepcopy(self.m_mapcalc)
                         m_expression = newident + "=" + map_i.cmd_list
                         m.inputs["expression"].value = str(m_expression)
                         m.flags["overwrite"].value = self.overwrite
-                        process_queue.put(m)
-                    
+                        #print(m.get_bash())
+                        self.process_chain_dict["processes"].append(m.get_dict())
+
+                        if self.dry_run is False:
+                            process_queue.put(m)
+
                     elif map_i.map_exists():
-                        # Copy map if it exists
-                        map_test = map_i.get_new_instance(newident + "@" + self.mapset)
-                        map_test.set_temporal_extent(map_i.get_temporal_extent())
-                        map_test.set_spatial_extent(map_i.get_spatial_extent())
-                        map_test_list.append(map_test)
-                        
+                        # Copy map if it exists b = a
+                        new_map = map_i.get_new_instance(newident + "@" + self.mapset)
+                        new_map.set_temporal_extent(map_i.get_temporal_extent())
+                        new_map.set_spatial_extent(map_i.get_spatial_extent())
+                        map_test_list.append(new_map)
+
                         m = copy.deepcopy(self.m_mapcalc)
                         m_expression = newident + "=" + map_i.get_map_id()
                         m.inputs["expression"].value = str(m_expression)
                         m.flags["overwrite"].value = self.overwrite
-                        print m.get_bash()
-                        process_queue.put(m)
-                        
+                        #print(m.get_bash())
+                        self.process_chain_dict["processes"].append(m.get_dict())
+
+                        if self.dry_run is False:
+                            process_queue.put(m)
+
                     else:
-                        self.msgr.error(_("Error computing map <%s>"%(map_i.get_id()) ))
-                    count  += 1
+                        self.msgr.error(_("Error computing map <%s>"%map_i.get_id()))
+                    count += 1
 
-                process_queue.wait()
+                if self.dry_run is False:
+                    process_queue.wait()
 
                 for map_i in map_test_list:
                     register_list.append(map_i)
 
                 # Open connection to temporal database.
                 dbif, connect = init_dbif(self.dbif)
+
                 # Create result space time dataset.
-                resultstds = open_new_stds(t[1], self.stdstype, \
-                                                         'absolute', t[1], t[1], \
-                                                         'mean', self.dbif, \
-                                                         overwrite = self.overwrite)
+                if self.dry_run is False:
+                    resultstds = open_new_stds(t[1], self.stdstype,
+                                               'absolute', t[1], t[1],
+                                               'mean', self.dbif,
+                                               overwrite = self.overwrite)
                 for map_i in register_list:
-                    # Get meta data from grass database.
-                    map_i.load()
-                    # Do not register empty maps if not required
-                    # In case of a null map continue, do not register null maps
-                    if map_i.metadata.get_min() is None and \
-                       map_i.metadata.get_max() is None:
-                        if not self.register_null:
-                            self.removable_maps[map_i.get_name()] = map_i
-                            continue
+
+                    # Put the map into the process dictionary
+                    start, end = map_i.get_temporal_extent_as_tuple()
+                    self.process_chain_dict["register"].append((map_i.get_name(),
+                                                                str(start),
+                                                                str(end)))
+
+                    if self.dry_run is False:
+                        # Get meta data from grass database.
+                        map_i.load()
+                        # Do not register empty maps if not required
+                        # In case of a null map continue, do not register null maps
+                        if map_i.metadata.get_min() is None and \
+                           map_i.metadata.get_max() is None:
+                            if not self.register_null:
+                                self.removable_maps[map_i.get_name()] = map_i
+                                continue
 
                     if map_i.is_in_db(dbif) and self.overwrite:
                         # Update map in temporal database.
-                        map_i.update_all(dbif)
-                    elif map_i.is_in_db(dbif) and self.overwrite == False:
+                        if self.dry_run is False:
+                            map_i.update_all(dbif)
+                    elif map_i.is_in_db(dbif) and self.overwrite is False:
                         # Raise error if map exists and no overwrite flag is given.
-                        self.msgr.fatal("Error raster map %s exist in temporal database. Use overwrite flag.  : \n%s" \
-                                            %(map_i.get_map_id(), cmd.popen.stderr))
+                        self.msgr.fatal("Error raster map %s exist in temporal database. "
+                                        "Use overwrite flag."%map_i.get_map_id())
                     else:
                         # Insert map into temporal database.
-                        map_i.insert(dbif)
+                        if self.dry_run is False:
+                            map_i.insert(dbif)
                     # Register map in result space time dataset.
-                    success = resultstds.register_map(map_i, dbif)
-                resultstds.update_from_registered_maps(dbif)
+                    if self.dry_run is False:
+                        success = resultstds.register_map(map_i, dbif)
+
+                if self.dry_run is False:
+                    resultstds.update_from_registered_maps(dbif)
+
+                self.process_chain_dict["STDS"]["name"] = t[1]
+                self.process_chain_dict["STDS"]["stdstype"] = self.stdstype
+                self.process_chain_dict["STDS"]["temporal_type"] = 'absolute'
+
                 dbif.close()
                 t[0] = register_list
-
+                # Remove intermediate maps
                 self.remove_maps()
-    
+
     def p_expr_spmap_function(self, t):
         # Add a single map.
-        # Only the spatial extent of the map is evaluated. 
+        # Only the spatial extent of the map is evaluated.
         # Temporal extent is not existing.
         # Examples:
-        #    R = map(A) 
+        #    R = map(A)
         """
         mapexpr : MAP LPAREN stds RPAREN
         """
@@ -666,47 +713,56 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             t[0] = "map(" + t[3] + ")"
 
         if self.debug:
-            print "map(" + t[3] + ")"
+            print("map(" + t[3] + ")")
 
     def p_arith1_operation(self, t):
+        # A % B
+        # A / B
+        # A * B
+        # A % td(B)
+        # A * td(B)
+        # A / td(B)
         """
-        expr : stds MOD stds
-             | expr MOD stds
-             | stds MOD expr
-             | expr MOD expr
-             | stds DIV stds
-             | expr DIV stds
-             | stds DIV expr
-             | expr DIV expr
+        expr : stds MOD  stds
+             | expr MOD  stds
+             | stds MOD  expr
+             | expr MOD  expr
+             | stds DIV  stds
+             | expr DIV  stds
+             | stds DIV  expr
+             | expr DIV  expr
              | stds MULT stds
              | expr MULT stds
              | stds MULT expr
              | expr MULT expr
-             | stds MOD t_td_var
-             | expr MOD t_td_var
-             | stds DIV t_td_var
-             | expr DIV t_td_var
+             | stds MOD  t_td_var
+             | expr MOD  t_td_var
+             | stds DIV  t_td_var
+             | expr DIV  t_td_var
              | stds MULT t_td_var
              | expr MULT t_td_var
         """
         # Check input stds.
         maplistA = self.check_stds(t[1])
         maplistB = self.check_stds(t[3])
-        
+
         topolist = self.get_temporal_topo_list(maplistA, maplistB)
 
         if self.run:
             resultlist = []
             for map_i in topolist:
                 # Generate an intermediate map for the result map list.
-                map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', copy = True)
+                map_new = self.generate_new_map(base_map=map_i,
+                                                bool_op='and',
+                                                copy=True)
                 # Loop over temporal related maps and create overlay modules.
                 tbrelations = map_i.get_temporal_relations()
                 count = 0
                 for map_j in (tbrelations['EQUAL']):
                     # Create overlayed map extent.
-                    returncode = self.overlay_map_extent(map_new, map_j, 'and', \
-                                                            temp_op = 'l')
+                    returncode = self.overlay_map_extent(map_new, map_j,
+                                                         'and',
+                                                         temp_op='l')
                     # Stop the loop if no temporal or spatial relationship exist.
                     if returncode == 0:
                         break
@@ -718,9 +774,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                         name = self.generate_map_name()
 
                     # Create r.mapcalc expression string for the operation.
-                    cmdstring = self.build_command_string(map_i, map_j,  
-                                                                                    operator = t[2], 
-                                                                                    cmd_type = "operator")
+                    cmdstring = self.build_command_string(map_i, map_j,
+                                                          operator=t[2],
+                                                          cmd_type="operator")
                     # Conditional append of module command.
                     map_new.cmd_list = cmdstring
                     count += 1
@@ -732,28 +788,34 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_arith1_operation_numeric1(self, t):
+        # A % 1
+        # A / 4
+        # A * 5
+        # A % map(b1)
+        # A * map(b2)
+        # A / map(b3)
         """
-        expr : stds MOD number
-            | expr MOD number
-            | stds DIV number
-            | expr DIV number
-            | stds MULT number
-            | expr MULT number
-            | stds MOD numberstr
-            | expr MOD numberstr
-            | stds DIV numberstr
-            | expr DIV numberstr
-            | stds MULT numberstr
-            | expr MULT numberstr            
-            | stds MOD mapexpr
-            | expr MOD mapexpr
-            | stds DIV mapexpr
-            | expr DIV mapexpr
-            | stds MULT mapexpr
-            | expr MULT mapexpr            
+        expr : stds MOD  number
+             | expr MOD  number
+             | stds DIV  number
+             | expr DIV  number
+             | stds MULT number
+             | expr MULT number
+             | stds MOD  numberstr
+             | expr MOD  numberstr
+             | stds DIV  numberstr
+             | expr DIV  numberstr
+             | stds MULT numberstr
+             | expr MULT numberstr
+             | stds MOD  mapexpr
+             | expr MOD  mapexpr
+             | stds DIV  mapexpr
+             | expr DIV  mapexpr
+             | stds MULT mapexpr
+             | expr MULT mapexpr
         """
         # Check input stds.
         maplist = self.check_stds(t[1])
@@ -776,29 +838,35 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
 
     def p_arith1_operation_numeric2(self, t):
+        # 1 % A
+        # 4 / A
+        # 5 * A
+        # map(b1) % A
+        # map(b4) / A
+        # map(b5) * A
         """
-        expr : number MOD stds
-            | number MOD expr
-            | number DIV stds
-            | number DIV expr
-            | number MULT stds
-            | number MULT expr
-            | numberstr MOD stds
-            | numberstr MOD expr
-            | numberstr DIV stds
-            | numberstr DIV expr
-            | numberstr MULT stds
-            | numberstr MULT expr            
-            | mapexpr MOD stds
-            | mapexpr MOD expr
-            | mapexpr DIV stds
-            | mapexpr DIV expr
-            | mapexpr MULT stds
-            | mapexpr MULT expr             
+        expr : number    MOD  stds
+             | number    MOD  expr
+             | number    DIV  stds
+             | number    DIV  expr
+             | number    MULT stds
+             | number    MULT expr
+             | numberstr MOD  stds
+             | numberstr MOD  expr
+             | numberstr DIV  stds
+             | numberstr DIV  expr
+             | numberstr MULT stds
+             | numberstr MULT expr
+             | mapexpr   MOD  stds
+             | mapexpr   MOD  expr
+             | mapexpr   DIV  stds
+             | mapexpr   DIV  expr
+             | mapexpr   MULT stds
+             | mapexpr   MULT expr
         """
         # Check input stds.
         maplist = self.check_stds(t[3])
@@ -821,10 +889,14 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
 
     def p_arith2_operation(self, t):
+        # A + B
+        # A - B
+        # A + td(B)
+        # A - td(B)
         """
         expr : stds ADD stds
              | expr ADD stds
@@ -849,15 +921,19 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             resultlist = []
             for map_i in topolist:
                 # Generate an intermediate map for the result map list.
-                map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', copy = True)
+                map_new = self.generate_new_map(base_map=map_i,
+                                                bool_op='and',
+                                                copy=True)
 
                 # Loop over temporal related maps and create overlay modules.
                 tbrelations = map_i.get_temporal_relations()
                 count = 0
                 for map_j in (tbrelations['EQUAL']):
                     # Create overlayed map extent.
-                    returncode = self.overlay_map_extent(map_new, map_j, 'and', \
-                                                            temp_op = 'l')
+                    returncode = self.overlay_map_extent(map_new,
+                                                         map_j,
+                                                         'and',
+                                                         temp_op='l')
                     # Stop the loop if no temporal or spatial relationship exist.
                     if returncode == 0:
                         break
@@ -867,11 +943,12 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                     else:
                         # Generate an intermediate map
                         name = self.generate_map_name()
-                    
+
                     # Create r.mapcalc expression string for the operation.
-                    cmdstring = self.build_command_string(map_i, map_j,  
-                                                                                    operator = t[2], 
-                                                                                    cmd_type = "operator")
+                    cmdstring = self.build_command_string(map_i,
+                                                          map_j,
+                                                          operator=t[2],
+                                                          cmd_type="operator")
                     # Conditional append of module command.
                     map_new.cmd_list = cmdstring
                     count += 1
@@ -884,22 +961,26 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_arith2_operation_numeric1(self, t):
+        # A + 2
+        # A - 3
+        # A + map(b4)
+        # A - map(b5)
         """
         expr : stds ADD number
-            | expr ADD number
-            | stds SUB number
-            | expr SUB number
-            | stds ADD numberstr
-            | expr ADD numberstr
-            | stds SUB numberstr
-            | expr SUB numberstr            
-            | stds ADD mapexpr
-            | expr ADD mapexpr
-            | stds SUB mapexpr
-            | expr SUB mapexpr
+             | expr ADD number
+             | stds SUB number
+             | expr SUB number
+             | stds ADD numberstr
+             | expr ADD numberstr
+             | stds SUB numberstr
+             | expr SUB numberstr
+             | stds ADD mapexpr
+             | expr ADD mapexpr
+             | stds SUB mapexpr
+             | expr SUB mapexpr
         """
         # Check input stds.
         maplist = self.check_stds(t[1])
@@ -922,22 +1003,26 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_arith2_operation_numeric2(self, t):
+        # 2 + A
+        # 3 - A
+        # map(b2) + A
+        # map(b3) - A
         """
-        expr : number ADD stds
-            | number ADD expr
-            | number SUB stds
-            | number SUB expr
-            | numberstr ADD stds
-            | numberstr ADD expr
-            | numberstr SUB stds            
-            | numberstr SUB expr     
-            | mapexpr ADD stds
-            | mapexpr ADD expr
-            | mapexpr SUB stds
-            | mapexpr SUB expr   
+        expr : number    ADD stds
+             | number    ADD expr
+             | number    SUB stds
+             | number    SUB expr
+             | numberstr ADD stds
+             | numberstr ADD expr
+             | numberstr SUB stds
+             | numberstr SUB expr
+             | mapexpr   ADD stds
+             | mapexpr   ADD expr
+             | mapexpr   SUB stds
+             | mapexpr   SUB expr
         """
         # Check input stds.
         maplist = self.check_stds(t[3])
@@ -960,9 +1045,13 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_arith1_operation_relation(self, t):
+        # A {*, equal, l} B
+        # A {*, equal, l} td(B)
+        # A {*, equal, l} B {/, during, r} C
+        # A {*, equal, l} B {/, equal, l}  C {/, during, r} D
         """
         expr : stds T_ARITH1_OPERATOR stds
              | expr T_ARITH1_OPERATOR stds
@@ -971,25 +1060,33 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
              | stds T_ARITH1_OPERATOR t_td_var
              | expr T_ARITH1_OPERATOR t_td_var
         """
-        if self.run:        
+        if self.run:
             # Check input stds.
             maplistA = self.check_stds(t[1])
             maplistB = self.check_stds(t[3])
-            relations, temporal, function, aggregate = self.eval_toperator(t[2],  optype = 'raster')
+            relations, temporal, function, aggregate = self.eval_toperator(t[2], optype='raster')
             # Build conditional values based on topological relationships.
-            complist = self.get_temporal_topo_list(maplistA, maplistB, topolist = relations,
-                               operator_cmd = True, compop = function)
+            complist = self.get_temporal_topo_list(maplistA,
+                                                   maplistB,
+                                                   topolist=relations,
+                                                   operator_cmd=True,
+                                                   compop=function)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
-        
-        t[0] = resultlist   
+            resultlist = self.set_temporal_extent_list(complist,
+                                                       topolist=relations,
+                                                       temporal=temporal)
+
+        t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_arith2_operation_relation(self, t):
+        # A {+, equal, l} B
+        # A {+, equal, l} td(b)
+        # A {+, equal, l} B {-, during, r} C
+        # A {+, equal, l} B {+, equal, l}  C {-, during, r} D
         """
         expr : stds T_ARITH2_OPERATOR stds
              | expr T_ARITH2_OPERATOR stds
@@ -998,31 +1095,40 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
              | stds T_ARITH2_OPERATOR t_td_var
              | expr T_ARITH2_OPERATOR t_td_var
         """
-        if self.run:        
+        if self.run:
             # Check input stds.
             maplistA = self.check_stds(t[1])
             maplistB = self.check_stds(t[3])
-            relations, temporal, function, aggregate = self.eval_toperator(t[2],  optype = 'raster')
+            relations, temporal, function, aggregate = self.eval_toperator(t[2], optype='raster')
             # Build conditional values based on topological relationships.
-            complist = self.get_temporal_topo_list(maplistA, maplistB, topolist = relations,
-                               operator_cmd = True, compop = function)
+            complist = self.get_temporal_topo_list(maplistA,
+                                                   maplistB,
+                                                   topolist=relations,
+                                                   operator_cmd=True,
+                                                   compop=function)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
-        
+            resultlist = self.set_temporal_extent_list(complist,
+                                                       topolist=relations,
+                                                       temporal=temporal)
+
         t[0] = resultlist
-  
+
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_arith_operation_numeric_string(self, t):
+        # 1 + 1
+        # 1 - 1
+        # 1 * 1
+        # 1 / 1
+        # 1 % 1
         """
         numberstr : number ADD number
-            | number SUB number
-            | number DIV number
-            | number MULT number
-            | number MOD number
+                  | number SUB number
+                  | number DIV number
+                  | number MULT number
+                  | number MOD number
         """
         numstring = "(%s %s %s)" %(t[1], t[2], t[3])
 
@@ -1030,7 +1136,7 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             print(numstring)
-    
+
     def p_mapcalc_function(self, t):
         # Supported mapcalc functions.
         """
@@ -1050,12 +1156,10 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         t[0] = t[1]
 
         if self.debug:
-            for map in resultlist:
-                print map.cmd_list
+            print(t[1])
 
 
     def p_mapcalc_operation1(self, t):
-        # Examples:
         # sin(A)
         # log(B)
         """
@@ -1082,10 +1186,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_mapexpr_operation(self, t):
-        # Examples:
         # sin(map(a))
         """
         mapexpr : mapcalc_arith LPAREN mapexpr RPAREN
@@ -1099,10 +1202,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             t[0] = cmdstring
 
         if self.debug:
-            print mapstring
+            print(mapstring)
 
     def p_s_var_expr_1(self, t):
-        # Examples:
         #   isnull(A)
         """
         s_var_expr : ISNULL LPAREN stds RPAREN
@@ -1128,10 +1230,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_var_expr_2(self, t):
-        # Examples:
         #   isntnull(A)
         """
         s_var_expr : ISNTNULL LPAREN stds RPAREN
@@ -1157,10 +1258,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_var_expr_3(self, t):
-        # Examples:
         #   A <= 2
         """
         s_var_expr : stds comp_op number
@@ -1186,10 +1286,9 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_var_expr_4(self, t):
-        # Examples:
         #   exist(B)
         """
         s_var_expr : EXIST LPAREN stds RPAREN
@@ -1215,16 +1314,15 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
-    
+                print(map.cmd_list)
+
     def p_s_var_expr_comp(self, t):
-        # Examples:
         #   A <= 2 || B == 10
         #   A < 3 && A > 1
         """
         s_var_expr : s_var_expr AND AND s_var_expr
-                   | s_var_expr OR OR s_var_expr
-        """        
+                   | s_var_expr OR  OR  s_var_expr
+        """
         if self.run:
             # Check input stds.
             s_var_exprA = self.check_stds(t[1])
@@ -1233,21 +1331,25 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             temporal = "l"
             function = t[2] + t[3]
             aggregate = t[2]
-            # Build conditional values based on topological relationships.            
-            complist = self.get_temporal_topo_list(s_var_exprA, s_var_exprB, topolist = relations,
-                               compare_cmd = True, compop = function, aggregate = aggregate)
+            # Build conditional values based on topological relationships.
+            complist = self.get_temporal_topo_list(s_var_exprA,
+                                                   s_var_exprB,
+                                                   topolist=relations,
+                                                   compare_cmd=True,
+                                                   compop=function,
+                                                   aggregate=aggregate)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
-                                
+            resultlist = self.set_temporal_extent_list(complist,
+                                                       topolist=relations,
+                                                       temporal=temporal)
+
             t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_var_expr_comp_op(self, t):
-        # Examples:
         #   A <= 2 {||} B == 10
         #   A < 3 {&&, equal} A > 1
         """
@@ -1258,52 +1360,57 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             s_var_exprA = self.check_stds(t[1])
             s_var_exprB = self.check_stds(t[3])
             # Evaluate temporal comparison operator.
-            relations, temporal, function, aggregate  = self.eval_toperator(t[2],  optype = 'boolean')
+            relations, temporal, function, aggregate = self.eval_toperator(t[2], optype='boolean')
             # Build conditional values based on topological relationships.
-            complist = self.get_temporal_topo_list(s_var_exprA, s_var_exprB, topolist = relations,
-                               compare_cmd = True, compop = function, aggregate = aggregate)
+            complist = self.get_temporal_topo_list(s_var_exprA,
+                                                   s_var_exprB,
+                                                   topolist=relations,
+                                                   compare_cmd=True,
+                                                   compop=function,
+                                                   aggregate=aggregate)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
-            
+            resultlist = self.set_temporal_extent_list(complist,
+                                                       topolist=relations,
+                                                       temporal=temporal)
+
             t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_expr_condition_if(self, t):
-        # Examples:
         #   if(s_var_expr, B)
         #   if(A == 1, B)
         """
-        expr : IF LPAREN s_var_expr COMMA stds RPAREN
-             | IF LPAREN s_var_expr COMMA expr RPAREN
+        expr : IF LPAREN s_var_expr  COMMA stds RPAREN
+             | IF LPAREN s_var_expr  COMMA expr RPAREN
              | IF LPAREN ts_var_expr COMMA stds RPAREN
              | IF LPAREN ts_var_expr COMMA expr RPAREN
         """
         ifmaplist = self.check_stds(t[3])
         thenmaplist = self.check_stds(t[5])
-        resultlist = self.build_condition_cmd_list(ifmaplist, thenmaplist,  
-                                                                            elselist = None, 
-                                                                            condition_topolist = ["EQUAL"], 
-                                                                            conclusion_topolist = ["EQUAL"], 
-                                                                            temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   thenmaplist,
+                                                   elselist=None,
+                                                   condition_topolist=["EQUAL"],
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_numeric_condition_if(self, t):
-        # Examples:
         #   if(s_var_expr, 1)
         #   if(A == 5, 10)
         """
-        expr : IF LPAREN s_var_expr COMMA number RPAREN
-             | IF LPAREN s_var_expr COMMA NULL LPAREN RPAREN RPAREN
+        expr : IF LPAREN s_var_expr  COMMA number RPAREN
+             | IF LPAREN s_var_expr  COMMA NULL   LPAREN RPAREN RPAREN
              | IF LPAREN ts_var_expr COMMA number RPAREN
-             | IF LPAREN ts_var_expr COMMA NULL LPAREN RPAREN RPAREN
+             | IF LPAREN ts_var_expr COMMA NULL   LPAREN RPAREN RPAREN
         """
         ifmaplist = self.check_stds(t[3])
         resultlist = []
@@ -1315,7 +1422,8 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         # Iterate over condition map list.
         for map_i in ifmaplist:
             # Create r.mapcalc expression string for the operation.
-            cmdstring = self.build_command_string(map_i, numinput, cmd_type = 'condition')
+            cmdstring = self.build_command_string(map_i, numinput,
+                                                  cmd_type='condition')
             # Conditional append of module command.
             map_i.cmd_list = cmdstring
             # Append map to result map list.
@@ -1325,40 +1433,40 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_expr_condition_if_relation(self, t):
-        # Examples:
         #   if({equal||during}, s_var_expr, A)
         """
-        expr : IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA expr RPAREN
+        expr : IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA stds RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA expr RPAREN
              | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds RPAREN
              | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr RPAREN
         """
-        relations, temporal, function,  aggregation = self.eval_toperator(t[3],  
-                                                                                        optype = 'relation')
+        relations, temporal, function,  aggregation = self.eval_toperator(t[3],
+                                                                          optype='relation')
         ifmaplist = self.check_stds(t[5])
         thenmaplist = self.check_stds(t[7])
-        resultlist = self.build_condition_cmd_list(ifmaplist, thenmaplist,  
-                                                                            elselist = None, 
-                                                                            condition_topolist = relations, 
-                                                                            conclusion_topolist = ["EQUAL"], 
-                                                                            temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   thenmaplist,
+                                                   elselist=None,
+                                                   condition_topolist=relations,
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_expr_condition_elif(self, t):
-        # Examples:
         #   if(s_var_expr, A, B)
         """
-        expr : IF LPAREN s_var_expr COMMA stds COMMA stds RPAREN
-             | IF LPAREN s_var_expr COMMA stds COMMA expr RPAREN
-             | IF LPAREN s_var_expr COMMA expr COMMA stds RPAREN
-             | IF LPAREN s_var_expr COMMA expr COMMA expr RPAREN
+        expr : IF LPAREN s_var_expr  COMMA stds COMMA stds RPAREN
+             | IF LPAREN s_var_expr  COMMA stds COMMA expr RPAREN
+             | IF LPAREN s_var_expr  COMMA expr COMMA stds RPAREN
+             | IF LPAREN s_var_expr  COMMA expr COMMA expr RPAREN
              | IF LPAREN ts_var_expr COMMA stds COMMA stds RPAREN
              | IF LPAREN ts_var_expr COMMA stds COMMA expr RPAREN
              | IF LPAREN ts_var_expr COMMA expr COMMA stds RPAREN
@@ -1369,34 +1477,34 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         thenmaplist = self.check_stds(t[5])
         elsemaplist = self.check_stds(t[7])
         # Create conditional command map list.
-        resultlist = self.build_condition_cmd_list(ifmaplist, thenmaplist,  
-                                                                            elselist = elsemaplist, 
-                                                                            condition_topolist = ["EQUAL"], 
-                                                                            conclusion_topolist = ["EQUAL"], 
-                                                                            temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   thenmaplist,
+                                                   elselist=elsemaplist,
+                                                   condition_topolist=["EQUAL"],
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
 
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_numeric_condition_elif(self, t):
-        # Examples:
         #   if(s_var_expr, 1, 2)
         #   if(A == 5, 10, 0)
         """
-        expr : IF LPAREN s_var_expr COMMA number COMMA number RPAREN
-             | IF LPAREN s_var_expr COMMA NULL LPAREN RPAREN COMMA number RPAREN
-             | IF LPAREN s_var_expr COMMA number COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN s_var_expr COMMA NULL LPAREN RPAREN COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN ts_var_expr COMMA number COMMA number RPAREN
-             | IF LPAREN ts_var_expr COMMA NULL LPAREN RPAREN COMMA number RPAREN
-             | IF LPAREN ts_var_expr COMMA number COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN ts_var_expr COMMA NULL LPAREN RPAREN COMMA NULL LPAREN RPAREN RPAREN             
+        expr : IF LPAREN s_var_expr  COMMA number COMMA  number RPAREN
+             | IF LPAREN s_var_expr  COMMA NULL   LPAREN RPAREN COMMA  number RPAREN
+             | IF LPAREN s_var_expr  COMMA number COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN s_var_expr  COMMA NULL   LPAREN RPAREN COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN ts_var_expr COMMA number COMMA  number RPAREN
+             | IF LPAREN ts_var_expr COMMA NULL   LPAREN RPAREN COMMA  number RPAREN
+             | IF LPAREN ts_var_expr COMMA number COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN ts_var_expr COMMA NULL   LPAREN RPAREN COMMA  NULL   LPAREN RPAREN RPAREN
         """
         ifmaplist = self.check_stds(t[3])
-        resultlist = []
         # Select input for r.mapcalc expression based on length of PLY object.
         if len(t) == 9:
             numthen = t[5]
@@ -1414,38 +1522,40 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         numelse = str(numelse)
         print(numthen + " " +numelse )
         # Create conditional command map list.
-        resultlist = self.build_condition_cmd_list(ifmaplist, numthen,  numelse,  
-                                                        condition_topolist = ["EQUAL"], 
-                                                        conclusion_topolist = ["EQUAL"], 
-                                                        temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   numthen,
+                                                   numelse,
+                                                   condition_topolist=["EQUAL"],
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
 
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_numeric_expr_condition_elif(self, t):
-        # Examples:
         #   if(s_var_expr, 1, A)
         #   if(A == 5 && C > 5, A, null())
         """
-        expr : IF LPAREN s_var_expr COMMA number COMMA stds RPAREN
-             | IF LPAREN s_var_expr COMMA NULL LPAREN RPAREN COMMA stds RPAREN
-             | IF LPAREN s_var_expr COMMA number COMMA expr RPAREN
-             | IF LPAREN s_var_expr COMMA NULL LPAREN RPAREN COMMA expr RPAREN
-             | IF LPAREN s_var_expr COMMA stds COMMA number RPAREN
-             | IF LPAREN s_var_expr COMMA stds COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN s_var_expr COMMA expr COMMA number RPAREN
-             | IF LPAREN s_var_expr COMMA expr COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN ts_var_expr COMMA number COMMA stds RPAREN
-             | IF LPAREN ts_var_expr COMMA NULL LPAREN RPAREN COMMA stds RPAREN
-             | IF LPAREN ts_var_expr COMMA number COMMA expr RPAREN
-             | IF LPAREN ts_var_expr COMMA NULL LPAREN RPAREN COMMA expr RPAREN
-             | IF LPAREN ts_var_expr COMMA stds COMMA number RPAREN
-             | IF LPAREN ts_var_expr COMMA stds COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN ts_var_expr COMMA expr COMMA number RPAREN
-             | IF LPAREN ts_var_expr COMMA expr COMMA NULL LPAREN RPAREN RPAREN             
+        expr : IF LPAREN s_var_expr  COMMA number COMMA  stds   RPAREN
+             | IF LPAREN s_var_expr  COMMA NULL   LPAREN RPAREN COMMA  stds   RPAREN
+             | IF LPAREN s_var_expr  COMMA number COMMA  expr   RPAREN
+             | IF LPAREN s_var_expr  COMMA NULL   LPAREN RPAREN COMMA  expr   RPAREN
+             | IF LPAREN s_var_expr  COMMA stds   COMMA  number RPAREN
+             | IF LPAREN s_var_expr  COMMA stds   COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN s_var_expr  COMMA expr   COMMA  number RPAREN
+             | IF LPAREN s_var_expr  COMMA expr   COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN ts_var_expr COMMA number COMMA  stds   RPAREN
+             | IF LPAREN ts_var_expr COMMA NULL   LPAREN RPAREN COMMA  stds   RPAREN
+             | IF LPAREN ts_var_expr COMMA number COMMA  expr   RPAREN
+             | IF LPAREN ts_var_expr COMMA NULL   LPAREN RPAREN COMMA  expr   RPAREN
+             | IF LPAREN ts_var_expr COMMA stds   COMMA  number RPAREN
+             | IF LPAREN ts_var_expr COMMA stds   COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN ts_var_expr COMMA expr   COMMA  number RPAREN
+             | IF LPAREN ts_var_expr COMMA expr   COMMA  NULL   LPAREN RPAREN RPAREN
         """
         ifmaplist = self.check_stds(t[3])
         # Select input for r.mapcalc expression based on length of PLY object.
@@ -1465,40 +1575,42 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                 elseinput = str(t[7] + t[8] + t[9])
 
         # Create conditional command map list.
-        resultlist = self.build_condition_cmd_list(ifmaplist, theninput,  elseinput,  
-                                                        condition_topolist = ["EQUAL"], 
-                                                        conclusion_topolist = ["EQUAL"], 
-                                                        temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   theninput,
+                                                   elseinput,
+                                                   condition_topolist=["EQUAL"],
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
 
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_s_numeric_expr_condition_elif_relation(self, t):
-        # Examples:
         #   if({during},s_var_expr, 1, A)
         #   if({during}, A == 5, A, null())
         """
-        expr : IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA number COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA NULL LPAREN RPAREN COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA number COMMA expr RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA NULL LPAREN RPAREN COMMA expr RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA stds COMMA number RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA stds COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA expr COMMA number RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA expr COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA number COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA NULL LPAREN RPAREN COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA number COMMA expr RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA NULL LPAREN RPAREN COMMA expr RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds COMMA number RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds COMMA NULL LPAREN RPAREN RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr COMMA number RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr COMMA NULL LPAREN RPAREN RPAREN             
-        """
-        relations, temporal, function,  aggregation = self.eval_toperator(t[3],  optype = 'relation')
+        expr : IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA number COMMA  stds   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA NULL   LPAREN RPAREN COMMA  stds   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA number COMMA  expr   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA NULL   LPAREN RPAREN COMMA  expr   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA stds   COMMA  number RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA stds   COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA expr   COMMA  number RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA expr   COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA number COMMA  stds   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA NULL   LPAREN RPAREN COMMA  stds   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA number COMMA  expr   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA NULL   LPAREN RPAREN COMMA  expr   RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds   COMMA  number RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds   COMMA  NULL   LPAREN RPAREN RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr   COMMA  number RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr   COMMA  NULL   LPAREN RPAREN RPAREN
+        """
+        relations, temporal, function,  aggregation = self.eval_toperator(t[3], optype='relation')
         ifmaplist = self.check_stds(t[5])
         # Select input for r.mapcalc expression based on length of PLY object.
         if len(t) == 11:
@@ -1509,55 +1621,59 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
                 theninput = self.check_stds(t[7])
                 elseinput = str(t[9])
         elif len(t) == 13:
-            if isinstance(t[7],  int):
+            if t[7] == 'null':
                 theninput = str(t[7] + t[8] + t[9])
                 elseinput = self.check_stds(t[11])
-            elif isinstance(t[9],  int):
+            elif t[9] == 'null':
                 theninput = self.check_stds(t[7])
                 elseinput = str(t[9] + t[10] + t[11])
 
         # Create conditional command map list.
-        resultlist = self.build_condition_cmd_list(ifmaplist, theninput,  elseinput,  
-                                                        condition_topolist = relations, 
-                                                        conclusion_topolist = ["EQUAL"], 
-                                                        temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   theninput,
+                                                   elseinput,
+                                                   condition_topolist=relations,
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
 
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
-
+                print(map.cmd_list)
 
     def p_s_expr_condition_elif_relation(self, t):
-        # Examples:
         #   if({equal||during}, s_var_expr, A, B)
         """
-        expr : IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA stds COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA stds COMMA expr RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA expr COMMA stds RPAREN
-             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr COMMA expr COMMA expr RPAREN
+        expr : IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA stds COMMA stds RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA stds COMMA expr RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA expr COMMA stds RPAREN
+             | IF LPAREN T_REL_OPERATOR COMMA s_var_expr  COMMA expr COMMA expr RPAREN
              | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds COMMA stds RPAREN
              | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA stds COMMA expr RPAREN
              | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr COMMA stds RPAREN
              | IF LPAREN T_REL_OPERATOR COMMA ts_var_expr COMMA expr COMMA expr RPAREN
         """
-        relations, temporal, function, aggregation = self.eval_toperator(t[3],  optype = 'relation')
+        relations, temporal, function, aggregation = self.eval_toperator(t[3], optype='relation')
         ifmaplist = self.check_stds(t[5])
         thenmaplist = self.check_stds(t[7])
         elsemaplist = self.check_stds(t[9])
-        
+
         # Create conditional command map list.
-        resultlist = self.build_condition_cmd_list(ifmaplist, thenmaplist,  elsemaplist,  
-                                                        condition_topolist = relations, 
-                                                        conclusion_topolist = ["EQUAL"], 
-                                                        temporal = 'r', null = False)
+        resultlist = self.build_condition_cmd_list(ifmaplist,
+                                                   thenmaplist,
+                                                   elsemaplist,
+                                                   condition_topolist=relations,
+                                                   conclusion_topolist=["EQUAL"],
+                                                   temporal='r',
+                                                   null=False)
 
         t[0] = resultlist
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
     def p_ts_var_expr1(self, t):
         # Combination of spatial and temporal conditional expressions.
@@ -1567,18 +1683,18 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
         #  IMPORTANT: Only the intersection of map lists in conditionals are
         #  exported.
         """
-        ts_var_expr : s_var_expr AND AND t_var_expr
-                    | t_var_expr AND AND s_var_expr
-                    | t_var_expr OR OR s_var_expr
-                    | s_var_expr OR OR t_var_expr
+        ts_var_expr : s_var_expr  AND AND t_var_expr
+                    | t_var_expr  AND AND s_var_expr
+                    | t_var_expr  OR  OR  s_var_expr
+                    | s_var_expr  OR  OR  t_var_expr
                     | ts_var_expr AND AND s_var_expr
                     | ts_var_expr AND AND t_var_expr
-                    | ts_var_expr OR OR s_var_expr
-                    | ts_var_expr OR OR t_var_expr
-                    | s_var_expr AND AND ts_var_expr
-                    | t_var_expr AND AND ts_var_expr
-                    | s_var_expr OR OR ts_var_expr
-                    | t_var_expr OR OR ts_var_expr
+                    | ts_var_expr OR  OR  s_var_expr
+                    | ts_var_expr OR  OR  t_var_expr
+                    | s_var_expr  AND AND ts_var_expr
+                    | t_var_expr  AND AND ts_var_expr
+                    | s_var_expr  OR  OR  ts_var_expr
+                    | t_var_expr  OR  OR  ts_var_expr
         """
         if self.run:
             # Check input stds.
@@ -1588,19 +1704,23 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
             temporal = "l"
             function = t[2] + t[3]
             aggregate = t[2]
-            # Build conditional values based on topological relationships.            
-            complist = self.get_temporal_topo_list(s_var_exprA, s_var_exprB, 
-                                                                            topolist = relations, compare_cmd = True, 
-                                                                            compop = function, aggregate = aggregate,  
-                                                                            convert = True)
+            # Build conditional values based on topological relationships.
+            complist = self.get_temporal_topo_list(s_var_exprA,
+                                                   s_var_exprB,
+                                                   topolist=relations,
+                                                   compare_cmd=True,
+                                                   compop=function,
+                                                   aggregate=aggregate,
+                                                   convert=True)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
-                                temporal = temporal)
+            resultlist = self.set_temporal_extent_list(complist,
+                                                       topolist=relations,
+                                                       temporal=temporal)
 
         t[0] = resultlist
-    
+
     def p_hash_operation(self, t):
-        # Calculate the number of maps within an interval of another map from a 
+        # Calculate the number of maps within an interval of another map from a
         # second space time dataset.
         # A # B
         # A {equal,r#} B
@@ -1628,7 +1748,7 @@ class TemporalRasterBaseAlgebraParser(TemporalAlgebraParser):
 
         if self.debug:
             for map in resultlist:
-                print map.cmd_list
+                print(map.cmd_list)
 
 ###############################################################################
 
diff --git a/lib/python/temporal/temporal_topology_dataset_connector.py b/lib/python/temporal/temporal_topology_dataset_connector.py
index a4017e7..19f4af4 100644
--- a/lib/python/temporal/temporal_topology_dataset_connector.py
+++ b/lib/python/temporal/temporal_topology_dataset_connector.py
@@ -16,6 +16,7 @@ for details.
 
 :authors: Soeren Gebbert
 """
+from __future__ import print_function
 import copy
 
 
@@ -104,7 +105,7 @@ class TemporalTopologyDatasetConnector(object):
             finished=a at P
             >>> rlist = tmr.get_temporal_relations()
             >>> if "FINISHED" in rlist.keys():
-            ...    print rlist["FINISHED"][0].get_id()
+            ...    print(rlist["FINISHED"][0].get_id())
             a at P
 
     """
@@ -503,85 +504,85 @@ class TemporalTopologyDatasetConnector(object):
     def print_temporal_topology_info(self):
         """Print information about this class in human readable style"""
 
-        print " +-------------------- Temporal Topology -------------------------------------+"
+        print(" +-------------------- Temporal Topology -------------------------------------+")
         #          0123456789012345678901234567890
         if self.next() is not None:
-            print " | Next: ...................... " + str(self.next().get_id())
+            print(" | Next: ...................... " + str(self.next().get_id()))
         if self.prev() is not None:
-            print " | Previous: .................. " + str(self.prev().get_id())
+            print(" | Previous: .................. " + str(self.prev().get_id()))
         if self.equal is not None:
-            print " | Equal:...................... " + \
-                self._generate_map_list_string(self.equal)
+            print(" | Equal:...................... " +
+                  self._generate_map_list_string(self.equal))
         if self.follows is not None:
-            print " | Follows: ................... " + \
-                self._generate_map_list_string(self.follows)
+            print(" | Follows: ................... " +
+                  self._generate_map_list_string(self.follows))
         if self.precedes is not None:
-            print " | Precedes: .................. " + \
-                self._generate_map_list_string(self.precedes)
+            print(" | Precedes: .................. " +
+                  self._generate_map_list_string(self.precedes))
         if self.overlaps is not None:
-            print " | Overlaps: .................. " + \
-                self._generate_map_list_string(self.overlaps)
+            print(" | Overlaps: .................. " +
+                  self._generate_map_list_string(self.overlaps))
         if self.overlapped is not None:
-            print " | Overlapped: ................ " + \
-                self._generate_map_list_string(self.overlapped)
+            print(" | Overlapped: ................ " +
+                  self._generate_map_list_string(self.overlapped))
         if self.during is not None:
-            print " | During: .................... " + \
-                self._generate_map_list_string(self.during)
+            print(" | During: .................... " +
+                  self._generate_map_list_string(self.during))
         if self.contains is not None:
-            print " | Contains: .................. " + \
-                self._generate_map_list_string(self.contains)
+            print(" | Contains: .................. " +
+                  self._generate_map_list_string(self.contains))
         if self.starts is not None:
-            print " | Starts:.. .................. " + \
-                self._generate_map_list_string(self.starts)
+            print(" | Starts:.. .................. " +
+                  self._generate_map_list_string(self.starts))
         if self.started is not None:
-            print " | Started:. .................. " + \
-                self._generate_map_list_string(self.started)
+            print(" | Started:. .................. " +
+                  self._generate_map_list_string(self.started))
         if self.finishes is not None:
-            print " | Finishes:................... " + \
-                self._generate_map_list_string(self.finishes)
+            print(" | Finishes:................... " +
+                  self._generate_map_list_string(self.finishes))
         if self.finished is not None:
-            print " | Finished:................... " + \
-                self._generate_map_list_string(self.finished)
+            print(" | Finished:................... " +
+                  self._generate_map_list_string(self.finished))
 
     def print_temporal_topology_shell_info(self):
         """Print information about this class in shell style"""
 
         if self.next() is not None:
-            print "next=" + self.next().get_id()
+            print("next=" + self.next().get_id())
         if self.prev() is not None:
-            print "prev=" + self.prev().get_id()
+            print("prev=" + self.prev().get_id())
         if self.equal is not None:
-            print "equal=" + self._generate_map_list_string(self.equal, False)
+            print("equal=" + self._generate_map_list_string(self.equal, False))
         if self.follows is not None:
-            print "follows=" + self._generate_map_list_string(self.follows,
-                                                              False)
+            print("follows=" + self._generate_map_list_string(self.follows,
+                                                              False))
         if self.precedes is not None:
-            print "precedes=" + self._generate_map_list_string(
-                self.precedes, False)
+            print("precedes=" + self._generate_map_list_string(
+                  self.precedes, False))
         if self.overlaps is not None:
-            print "overlaps=" + self._generate_map_list_string(
-                self.overlaps, False)
+            print("overlaps=" + self._generate_map_list_string(
+                  self.overlaps, False))
         if self.overlapped is not None:
-            print "overlapped=" + \
-                self._generate_map_list_string(self.overlapped, False)
+            print("overlapped=" +
+                  self._generate_map_list_string(self.overlapped, False))
         if self.during is not None:
-            print "during=" + self._generate_map_list_string(self.during,
-                                                             False)
+            print("during=" + self._generate_map_list_string(self.during,
+                                                             False))
         if self.contains is not None:
-            print "contains=" + self._generate_map_list_string(
-                self.contains, False)
+            print("contains=" + self._generate_map_list_string(
+                  self.contains, False))
         if self.starts is not None:
-            print "starts=" + \
-                self._generate_map_list_string(self.starts)
+            print("starts=" +
+                  self._generate_map_list_string(self.starts))
         if self.started is not None:
-            print "started=" + \
-                self._generate_map_list_string(self.started)
+            print("started=" +
+                  self._generate_map_list_string(self.started))
         if self.finishes is not None:
-            print "finishes=" + \
-                self._generate_map_list_string(self.finishes)
+            print("finishes=" +
+                  self._generate_map_list_string(self.finishes))
         if self.finished is not None:
-            print "finished=" + \
-                self._generate_map_list_string(self.finished)
+            print("finished=" +
+                  self._generate_map_list_string(self.finished))
 
 ###############################################################################
 
diff --git a/lib/python/temporal/temporal_vector_algebra.py b/lib/python/temporal/temporal_vector_algebra.py
index 449cb55..4efeef3 100644
--- a/lib/python/temporal/temporal_vector_algebra.py
+++ b/lib/python/temporal/temporal_vector_algebra.py
@@ -41,10 +41,10 @@ for details.
     LexToken(RPAREN,')',1,16)
 
 """
-
+from __future__ import print_function
 import grass.pygrass.modules as pygrass
-from temporal_operator import *
-from temporal_algebra import *
+from .temporal_operator import *
+from .temporal_algebra import *
 
 ##############################################################################
 
@@ -129,7 +129,7 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
         while True:
             tok = l.lexer.token()
             if not tok: break
-            
+
             if tok.type == "STVDS" or tok.type == "STRDS" or tok.type == "STR3DS":
                 raise SyntaxError("Syntax error near '%s'" %(tok.type))
 
@@ -149,12 +149,12 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
     ######################### Temporal functions ##############################
 
     def get_temporal_topo_list(self, maplistA, maplistB = None, topolist = ["EQUAL"],
-                               assign_val = False, count_map = False, compare_bool = False,  
-                               compare_cmd = False,  compop = None, aggregate = None,  
+                               assign_val = False, count_map = False, compare_bool = False,
+                               compare_cmd = False,  compop = None, aggregate = None,
                                new = False,  convert = False,  overlay_cmd = False):
         """Build temporal topology for two space time data sets, copy map objects
           for given relation into map list.
-          
+
           :param maplistA: List of maps.
           :param maplistB: List of maps.
           :param topolist: List of strings of temporal relations.
@@ -170,11 +170,11 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
           :param compop: Comparison operator, && or ||.
           :param aggregate: Aggregation operator for relation map list, & or |.
           :param new: Boolean if new temporary maps should be created.
-          :param convert: Boolean if conditional values should be converted to 
+          :param convert: Boolean if conditional values should be converted to
                         r.mapcalc command strings.
-          :param overlay_cmd: Boolean for aggregate overlay operators implicitly 
+          :param overlay_cmd: Boolean for aggregate overlay operators implicitly
                         in command list values based on related map lists.
-                    
+
           :return: List of maps from maplistA that fulfil the topological relationships
                   to maplistB specified in topolist.
         """
@@ -215,7 +215,7 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                 self.compare_cmd_value(map_i,  tbrelations, compop, aggregate, topolist, convert)
             elif overlay_cmd:
                 self.overlay_cmd_value(map_i,  tbrelations, compop, topolist)
-                
+
             for topo in topolist:
                 if topo.upper() in tbrelations.keys():
                     if count_map:
@@ -229,21 +229,21 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                     # Use unique identifier, since map names may be equal
                     resultdict[map_i.uid] = map_i
         resultlist = resultdict.values()
-        
+
         # Sort list of maps chronological.
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
-        
+
         return(resultlist)
 
     def overlay_cmd_value(self,  map_i, tbrelations, function, topolist = ["EQUAL"]):
         """ Function to evaluate two map lists by given overlay operator.
-        
+
           :param map_i: Map object with temporal extent.
           :param tbrelations: List of temporal relation to map_i.
           :param topolist: List of strings for given temporal relations.
           :param function: Overlay operator, &|+^~.
-          
-          :return: Map object with command list with  operators that has been 
+
+          :return: Map object with command list with  operators that has been
                         evaluated by implicit aggregration.
         """
         # Build comandlist list with elements from related maps and given relation operator.
@@ -292,30 +292,30 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                     mapainput = name
         # Add command list to result map.
         map_i.cmd_list = resultlist
-        
+
         return(resultlist)
 
     def set_temporal_extent_list(self, maplist, topolist = ["EQUAL"], temporal = 'l' ):
-        """ Change temporal extent of map list based on temporal relations to 
+        """ Change temporal extent of map list based on temporal relations to
                 other map list and given temporal operator.
 
-            :param maplist: List of map objects for which relations has been build 
+            :param maplist: List of map objects for which relations has been build
                                         correctely.
             :param topolist: List of strings of temporal relations.
             :param temporal: The temporal operator specifying the temporal
-                                            extent operation (intersection, union, disjoint 
+                                            extent operation (intersection, union, disjoint
                                             union, right reference, left reference).
 
             :return: Map list with specified temporal extent.
         """
         resultdict = {}
-        
+
         for map_i in maplist:
             # Loop over temporal related maps and create overlay modules.
             tbrelations = map_i.get_temporal_relations()
             # Generate an intermediate map for the result map list.
-            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', 
-                                                                        copy = True,  rename = False,  
+            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and',
+                                                                        copy = True,  rename = False,
                                                                         remove = True)
             # Combine temporal and spatial extents of intermediate map with related maps.
             for topo in topolist:
@@ -323,8 +323,8 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                     for map_j in (tbrelations[topo]):
                         if temporal == 'r':
                             # Generate an intermediate map for the result map list.
-                            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and', 
-                                                                                        copy = True,  rename = False,  
+                            map_new = self.generate_new_map(base_map=map_i, bool_op = 'and',
+                                                                                        copy = True,  rename = False,
                                                                                         remove = True)
                         # Create overlayed map extent.
                         returncode = self.overlay_map_extent(map_new, map_j, 'and', \
@@ -344,9 +344,9 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
         # Get sorted map objects as values from result dictionoary.
         resultlist = resultdict.values()
         resultlist = sorted(resultlist, key = AbstractDatasetComparisonKeyStartTime)
-        
+
         return(resultlist)
-    
+
     ###########################################################################
 
     def p_statement_assign(self, t):
@@ -370,8 +370,8 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                     vectormap = VectorDataset(vectorname + "@" + get_current_mapset())
                     if vectormap.map_exists() and self.overwrite == False:
                         self.msgr.fatal(_("Error vector maps with basename %s exist. "
-                                      "Use --o flag to overwrite existing file") \
-                                      %(vectorname))
+                                          "Use --o flag to overwrite existing file") \
+                                          %(vectorname))
                 for map_i in t[3]:
                     if "cmd_list" in dir(map_i):
                         # Execute command list.
@@ -381,7 +381,7 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                                 # otherwise v.overlay will break
                                 if cmd.name == "v.overlay":
                                     for name in (cmd.inputs["ainput"].value,
-                                                    cmd.inputs["binput"].value):
+                                                 cmd.inputs["binput"].value):
                                         #self.msgr.message("Check if map <" + name + "> exists")
                                         if name.find("@") < 0:
                                             name = name + "@" + get_current_mapset()
@@ -400,10 +400,11 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                             # print the command that will be executed
                             self.msgr.message("Run command:\n" + cmd.get_bash())
                             cmd.run()
+
                             if cmd.popen.returncode != 0:
-                                self.msgr.fatal(_("Error starting %s : \n%s") \
-                                                    %(cmd.get_bash(), \
-                                                    cmd.popen.stderr))
+                                self.msgr.fatal(_("Error starting %s : \n%s")
+                                                  %(cmd.get_bash(),
+                                                  cmd.popen.stderr))
                             mapname = cmd.outputs['output'].value
                             if mapname.find("@") >= 0:
                                 map_test = map_i.get_new_instance(mapname)
@@ -414,7 +415,7 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                                 break
                         if returncode == 0:
                             # We remove the invalid vector name from the remove list.
-                            if self.removable_maps.has_key(map_i.get_name()):
+                            if map_i.get_name() in self.removable_maps:
                                 self.removable_maps.pop(map_i.get_name())
                             mapset = map_i.get_mapset()
                             # Change map name to given basename.
@@ -427,7 +428,7 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                             count += 1
                             register_list.append(map_i)
                     else:
-                        # Test if temporal extents have been changed by temporal 
+                        # Test if temporal extents have been changed by temporal
                         # relation operators (i|r). This is a code copy from temporal_algebra.py
                         map_i_extent = map_i.get_temporal_extent_as_tuple()
                         map_test = map_i.get_new_instance(map_i.get_id())
@@ -438,9 +439,10 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                             newident = self.basename + "_" + str(count)
                             map_result = map_i.get_new_instance(newident + "@" + self.mapset)
 
-                            if map_test.map_exists() and self.overwrite == False:
-                                self.msgr.fatal("Error raster maps with basename %s exist. Use --o flag to overwrite existing file" \
-                                                    %(mapname))
+                            if map_test.map_exists() and self.overwrite is False:
+                                self.msgr.fatal("Error raster maps with basename %s exist. "
+                                                "Use --o flag to overwrite existing file"
+                                                %(mapname))
 
                             map_result.set_temporal_extent(map_i.get_temporal_extent())
                             map_result.set_spatial_extent(map_i.get_spatial_extent())
@@ -459,10 +461,10 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
 
                 if len(register_list) > 0:
                     # Create result space time dataset.
-                    resultstds = open_new_stds(t[1], self.stdstype, \
-                                                                'absolute', t[1], t[1], \
-                                                                "temporal vector algebra", self.dbif,
-                                                                overwrite = self.overwrite)
+                    resultstds = open_new_stds(t[1], self.stdstype,
+                                               'absolute', t[1], t[1],
+                                               "temporal vector algebra", self.dbif,
+                                               overwrite=self.overwrite)
                     for map_i in register_list:
                         # Check if modules should be executed from command list.
                         if hasattr(map_i, "cmd_list") or hasattr(map_i, "is_new"):
@@ -483,11 +485,11 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
                             # Map is original from an input STVDS
                             map_i.load()
                         # Register map in result space time dataset.
-                        print map_i.get_temporal_extent_as_tuple()
+                        print(map_i.get_temporal_extent_as_tuple())
                         success = resultstds.register_map(map_i, dbif=dbif)
                     resultstds.update_from_registered_maps(dbif)
-                
-            # Remove intermediate maps    
+
+            # Remove intermediate maps
             self.remove_maps()
             if connected:
                 dbif.close()
@@ -521,13 +523,13 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
             maplistA = self.check_stds(t[1])
             maplistB = self.check_stds(t[3])
             relations = ["EQUAL"]
-            temporal = 'l' 
-            function = t[2] 
+            temporal = 'l'
+            function = t[2]
             # Build commmand list for related maps.
             complist = self.get_temporal_topo_list(maplistA, maplistB, topolist = relations,
                                                                     compop = function, overlay_cmd = True)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
+            resultlist = self.set_temporal_extent_list(complist, topolist = relations,
                                 temporal = temporal)
 
             t[0] = resultlist
@@ -550,9 +552,9 @@ class TemporalVectorAlgebraParser(TemporalAlgebraParser):
             complist = self.get_temporal_topo_list(maplistA, maplistB, topolist = relations,
                                                                     compop = function, overlay_cmd = True)
             # Set temporal extent based on topological relationships.
-            resultlist = self.set_temporal_extent_list(complist, topolist = relations, 
+            resultlist = self.set_temporal_extent_list(complist, topolist = relations,
                                 temporal = temporal)
-          
+
             t[0] = resultlist
         if self.debug:
             str(t[1]) + t[2] + str(t[3])
diff --git a/lib/python/temporal/testsuite/test_doctests.py b/lib/python/temporal/testsuite/test_doctests.py
index fcbc797..5fbdc99 100644
--- a/lib/python/temporal/testsuite/test_doctests.py
+++ b/lib/python/temporal/testsuite/test_doctests.py
@@ -5,29 +5,30 @@ Temporal framework doctests
 
 import doctest
 import grass.temporal
-import grass.gunittest
+import grass.gunittest.case
+import grass.gunittest.main
 import grass.gunittest.utils
-import os
+
 
 doctest.DocFileCase = type('DocFileCase',
-                           (grass.gunittest.TestCase,),
+                           (grass.gunittest.case.TestCase,),
                            dict(doctest.DocFileCase.__dict__))
 doctest.SkipDocTestCase = type('SkipDocTestCase',
-                               (grass.gunittest.TestCase,),
+                               (grass.gunittest.case.TestCase,),
                                dict(doctest.SkipDocTestCase.__dict__))
 
+
 def load_tests(loader, tests, ignore):
     grass.gunittest.utils.do_doctest_gettext_workaround()
     tests.addTests(doctest.DocTestSuite(grass.temporal.abstract_dataset))
     tests.addTests(doctest.DocTestSuite(grass.temporal.abstract_map_dataset))
     tests.addTests(doctest.DocTestSuite(grass.temporal.abstract_space_time_dataset))
     tests.addTests(doctest.DocTestSuite(grass.temporal.base))
-    tests.addTests(doctest.DocTestSuite(grass.temporal.c_libraries_interface))
     # Unexpected error here
-    #tests.addTests(doctest.DocTestSuite(grass.temporal.core))
+    ##tests.addTests(doctest.DocTestSuite(grass.temporal.core))
     tests.addTests(doctest.DocTestSuite(grass.temporal.datetime_math))
     # Unexpected error here
-    #tests.addTests(doctest.DocTestSuite(grass.temporal.list_stds))
+    ##tests.addTests(doctest.DocTestSuite(grass.temporal.list_stds))
     tests.addTests(doctest.DocTestSuite(grass.temporal.metadata))
     tests.addTests(doctest.DocTestSuite(grass.temporal.register))
     tests.addTests(doctest.DocTestSuite(grass.temporal.space_time_datasets))
@@ -44,7 +45,9 @@ def load_tests(loader, tests, ignore):
     tests.addTests(doctest.DocTestSuite(grass.temporal.temporal_raster_base_algebra))
     tests.addTests(doctest.DocTestSuite(grass.temporal.temporal_operator))
     tests.addTests(doctest.DocTestSuite(grass.temporal.temporal_vector_algebra))
+    tests.addTests(doctest.DocTestSuite(grass.temporal.c_libraries_interface))
     return tests
 
+
 if __name__ == '__main__':
-    grass.gunittest.test()
+    grass.gunittest.main.test()
diff --git a/lib/python/temporal/testsuite/test_register_function.py b/lib/python/temporal/testsuite/test_register_function.py
index 8ff5ffd..55c9832 100644
--- a/lib/python/temporal/testsuite/test_register_function.py
+++ b/lib/python/temporal/testsuite/test_register_function.py
@@ -10,11 +10,12 @@ for details.
 """
 
 import grass.temporal as tgis
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 import datetime
 import os
 
-class TestRegisterFunctions(grass.gunittest.TestCase):
+class TestRegisterFunctions(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -335,4 +336,4 @@ class TestRegisterFails(TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_register.py b/lib/python/temporal/testsuite/unittests_register.py
deleted file mode 100644
index 21ab827..0000000
--- a/lib/python/temporal/testsuite/unittests_register.py
+++ /dev/null
@@ -1,307 +0,0 @@
-"""!Unit test to register raster maps with absolute and relative 
-   time using tgis.register_maps_in_space_time_dataset()
-
-(C) 2013 by the GRASS Development Team
-This program is free software under the GNU General Public
-License (>=v2). Read the file COPYING that comes with GRASS
-for details.
-
- at author Soeren Gebbert
-"""
-
-import grass.script as grass
-import grass.temporal as tgis
-from gunittest.case import GrassTestCase
-import datetime
-
-class TestRegisterFunctions(GrassTestCase):
-
-    @classmethod
-    def setUpClass(cls):
-        """!Initiate the temporal GIS and set the region
-        """
-        # Use always the current mapset as temporal database
-        cls.assertModule("g.gisenv",  set="TGIS_USE_CURRENT_MAPSET=1")
-        tgis.init()
-        grass.overwrite = True
-        grass.use_temp_region()
-        cls.assertModule("g.region", n=80.0, s=0.0, e=120.0, 
-                                w=0.0, t=1.0, b=0.0, res=10.0)
-
-    def setUp(self):
-        """!Create the test maps and the space time raster datasets
-        """
-        self.assertModule("r.mapcalc", overwrite=True, quiet=True, 
-                          expression="register_map_1 = 1")
-        self.assertModule("r.mapcalc", overwrite=True, quiet=True, 
-                          expression="register_map_2 = 2")
-        self.assertEqual(ret, 0)
-        
-        
-        self.strds_abs = tgis.open_new_stds(name="register_test_abs", type="strds", temporaltype="absolute", 
-                                            title="Test strds", descr="Test strds", semantic="field")
-        self.strds_rel = tgis.open_new_stds(name="register_test_rel", type="strds", temporaltype="relative", 
-                                            title="Test strds", descr="Test strds", semantic="field")
-
-    def test_absolute_time_strds_1(self):
-        """!Test the registration of maps with absolute time in a
-           space time raster dataset
-        """
-        tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_abs.get_name(), 
-                 maps="register_map_1,register_map_2",
-                 start="2001-01-01", increment="1 day", interval=True)
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1))
-        self.assertEqual(end, datetime.datetime(2001, 1, 2))
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 2))
-        self.assertEqual(end, datetime.datetime(2001, 1, 3))
-
-        self.strds_abs.select()
-        start, end = self.strds_abs.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1))
-        self.assertEqual(end, datetime.datetime(2001, 1, 3))
-
-    def test_absolute_time_strds_2(self):
-        """!Test the registration of maps with absolute time in a
-           space time raster dataset.
-           The timestamps are set using the C-Interface beforehand, so that the register function needs
-           to read the timetsamp from the map metadata.
-        """
-
-        ciface = tgis.get_tgis_c_library_interface()
-        ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1 Jan 2001/2 Jan 2001")
-        ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "2 Jan 2001/3 Jan 2001")
-
-        tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_abs.get_name(), 
-                                                 maps="register_map_1,register_map_2")
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1))
-        self.assertEqual(end, datetime.datetime(2001, 1, 2))
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 2))
-        self.assertEqual(end, datetime.datetime(2001, 1, 3))
-
-        self.strds_abs.select()
-        start, end = self.strds_abs.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1))
-        self.assertEqual(end, datetime.datetime(2001, 1, 3))
-
-    def test_absolute_time_1(self):
-        """!Test the registration of maps with absolute time
-        """
-        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
-                 maps="register_map_1,register_map_2",
-                 start="2001-01-01", increment="1 day", interval=True)
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1))
-        self.assertEqual(end, datetime.datetime(2001, 1, 2))
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 2))
-        self.assertEqual(end, datetime.datetime(2001, 1, 3))
-
-    def test_absolute_time_2(self):
-        """!Test the registration of maps with absolute time
-        """
-        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
-                 maps="register_map_1,register_map_2",
-                 start="2001-01-01 10:30:01", increment="8 hours", interval=False)
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
-
-    def test_absolute_time_3(self):
-        """!Test the registration of maps with absolute time. 
-           The timestamps are set using the C-Interface beforehand, so that the register function needs
-           to read the timetsamp from the map metadata.
-        """
-                 
-        ciface = tgis.get_tgis_c_library_interface()
-        ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1 Jan 2001 10:30:01")
-        ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1 Jan 2001 18:30:01")
-
-        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
-                 maps="register_map_1,register_map_2")
-                 
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1, 10, 30, 1))
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end = map.get_absolute_time()
-        self.assertEqual(start, datetime.datetime(2001, 1, 1, 18, 30, 1))
-
-    def test_relative_time_strds_1(self):
-        """!Test the registration of maps with relative time in a
-           space time raster dataset
-        """
-
-        tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_rel.get_name(), 
-                                                 maps="register_map_1,register_map_2", start=0, 
-                                                 increment=1, unit="day", interval=True)
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 0)
-        self.assertEqual(end, 1)
-        self.assertEqual(unit, "day")
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1)
-        self.assertEqual(end, 2)
-        self.assertEqual(unit, "day")
-
-        self.strds_rel.select()
-        start, end, unit = self.strds_rel.get_relative_time()
-        self.assertEqual(start, 0)
-        self.assertEqual(end, 2)
-        self.assertEqual(unit, "day")
-
-    def test_relative_time_strds_2(self):
-        """!Test the registration of maps with relative time in a
-           space time raster dataset. The timetsamps are set for the maps using the 
-           C-interface before registration.
-        """
-        ciface = tgis.get_tgis_c_library_interface()
-        ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1000000 seconds/1500000 seconds")
-        ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1500000 seconds/2000000 seconds")
-
-        tgis.register_maps_in_space_time_dataset(type="rast", name=self.strds_rel.get_name(), 
-                                                 maps="register_map_1,register_map_2")
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1000000)
-        self.assertEqual(end, 1500000)
-        self.assertEqual(unit, "seconds")
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1500000)
-        self.assertEqual(end, 2000000)
-        self.assertEqual(unit, "seconds")
-
-        self.strds_rel.select()
-        start, end, unit = self.strds_rel.get_relative_time()
-        self.assertEqual(start, 1000000)
-        self.assertEqual(end, 2000000)
-        self.assertEqual(unit, "seconds")
-        
-    def test_relative_time_1(self):
-        """!Test the registration of maps with relative time
-        """
-        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
-                 maps="register_map_1,register_map_2",
-                 start=0, increment=1, unit="day", interval=True)
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 0)
-        self.assertEqual(end, 1)
-        self.assertEqual(unit, "day")
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1)
-        self.assertEqual(end, 2)
-        self.assertEqual(unit, "day")
-
-    def test_relative_time_2(self):
-        """!Test the registration of maps with relative time
-        """
-        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
-                 maps="register_map_1,register_map_2",
-                 start=1000000, increment=500000, unit="seconds", interval=True)
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1000000)
-        self.assertEqual(end, 1500000)
-        self.assertEqual(unit, "seconds")
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1500000)
-        self.assertEqual(end, 2000000)
-        self.assertEqual(unit, "seconds")
-
-    def test_relative_time_3(self):
-        """!Test the registration of maps with relative time. The timetsamps are set beforhand using
-           the C-interface.
-        """
-        ciface = tgis.get_tgis_c_library_interface()
-        ciface.write_raster_timestamp("register_map_1", tgis.get_current_mapset(), "1000000 seconds/1500000 seconds")
-        ciface.write_raster_timestamp("register_map_2", tgis.get_current_mapset(), "1500000 seconds/2000000 seconds")
-        
-        tgis.register_maps_in_space_time_dataset(type="rast", name=None, 
-                 maps="register_map_1,register_map_2")
-
-        map = tgis.RasterDataset("register_map_1@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1000000)
-        self.assertEqual(end, 1500000)
-        self.assertEqual(unit, "seconds")
-
-        map = tgis.RasterDataset("register_map_2@" + tgis.get_current_mapset())
-        map.select()
-        start, end, unit = map.get_relative_time()
-        self.assertEqual(start, 1500000)
-        self.assertEqual(end, 2000000)
-        self.assertEqual(unit, "seconds")
-
-    def tearDown(self):
-        """!Remove maps from temporal database
-        """
-        self.assertModule("t.unregister", maps="register_map_1,register_map_2", quiet=True)
-        self.assertModule("g.remove", rast="register_map_1,register_map_2", quiet=True)
-        self.strds_abs.delete()
-        self.strds_rel.delete()
-
-    @classmethod
-    def tearDownClass(cls):
-        """!Remove the temporary region
-        """
-        grass.del_temp_region()
-
-if __name__ == '__main__':
-    from gunittest.main import test
-    test()
-
-
diff --git a/lib/python/temporal/testsuite/unittests_temporal_algebra.py b/lib/python/temporal/testsuite/unittests_temporal_algebra.py
index 9070779..a724e14 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_algebra.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_algebra.py
@@ -9,11 +9,12 @@ for details.
 
 import grass.script
 import grass.temporal as tgis
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 import datetime
 import os
 
-class TestTemporalAlgebra(grass.gunittest.TestCase):
+class TestTemporalAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -54,8 +55,8 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
                                                  start="2001-01-02", increment="2 day", interval=True)
         tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
                                                  start="2001-01-03", increment="1 day", interval=True)
-        tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+        tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap",
+                                                 start="2001-01-03", end="2001-01-04")
 
     def tearDown(self):
         self.runModule("t.remove", inputs="R", quiet=True)
@@ -69,14 +70,14 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_select1(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A : A",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 4)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -85,14 +86,14 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_select2(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A : D",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 3) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 3)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -101,14 +102,14 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_select3(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A !: D",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 2) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 2)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 3))
@@ -117,14 +118,14 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_select_operators1(self):
         """Testing the temporal select operator. Including temporal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -133,14 +134,14 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_select_operators2(self):
         """Testing the temporal select operator. Including temporal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,equal|during} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -148,16 +149,16 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
         self.assertEqual(D.get_granularity(),  u'1 day')
 
     def test_temporal_select_operators3(self):
-        """Testing the temporal select operator. Including temporal relations 
+        """Testing the temporal select operator. Including temporal relations
             and negation operation. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {!:,during} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -165,9 +166,9 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
         self.assertEqual(D.get_granularity(),  u'1 day')
 
     def test_temporal_select_operators4(self):
-        """Testing the temporal select operator. Including temporal relations and 
+        """Testing the temporal select operator. Including temporal relations and
             temporal operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during,d} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -178,8 +179,8 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
             self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
             self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -187,9 +188,9 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
         self.assertEqual(D.get_granularity(),  u'2 days')
 
     def test_temporal_select_operators5(self):
-        """Testing the temporal select operator. Including temporal relations and 
+        """Testing the temporal select operator. Including temporal relations and
             temporal operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = C {:,contains} A",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -200,8 +201,8 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
             self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
             self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 7) 
-        self.assertEqual(D.metadata.get_max_max(), 7) 
+        self.assertEqual(D.metadata.get_min_min(), 7)
+        self.assertEqual(D.metadata.get_max_max(), 7)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -210,15 +211,15 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_extent1(self):
         """Testing the temporal extent operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during,r} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -227,15 +228,15 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_extent2(self):
         """Testing the temporal extent operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during,d} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
-        maplist = D.get_registered_maps_as_objects()    
+        maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -244,7 +245,7 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_extent3(self):
         """Testing the temporal extent operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during,u} C",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -253,10 +254,10 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
         for map_i in maplist:
             start_map, end_map = map_i.get_absolute_time()
             self.assertEqual(start_map, datetime.datetime(2001, 1, 2))
-            self.assertEqual(end_map, datetime.datetime(2001, 1, 4))            
+            self.assertEqual(end_map, datetime.datetime(2001, 1, 4))
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -265,15 +266,15 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_hash1(self):
         """Testing the hash function in conditional statement. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = if(A # D == 1, A)",  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 3) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 3)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -282,16 +283,16 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_hash_operator1(self):
         """Testing the hash operator function in conditional statement. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression="R = if(A {#,during} C == 1, A)",  stdstype = 'strds', 
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression="R = if(A {#,during} C == 1, A)",  stdstype = 'strds',
                                        basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -300,33 +301,33 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_temporal_hash_operator2(self):
         """Testing the hash operator function in conditional statement. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression="R = if({during}, C {#,contains} A == 2, A)",  
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression="R = if({during}, C {#,contains} A == 2, A)",
                                                  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
-    
+
     def test_tmap_function1(self):
         """Testing the tmap function. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = tmap(singletmap)',  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 99) 
-        self.assertEqual(D.metadata.get_max_max(), 99) 
+        self.assertEqual(D.metadata.get_min_min(), 99)
+        self.assertEqual(D.metadata.get_max_max(), 99)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -335,20 +336,182 @@ class TestTemporalAlgebra(grass.gunittest.TestCase):
 
     def test_tmap_function2(self):
         """Testing the tmap function. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = A : tmap(singletmap)',  stdstype = 'strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 3) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 3)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
+    def test_merge_function1(self):
+        """Testing the merge function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = merge(A,D)',  stdstype = 'strds', basename="r", overwrite=True)
+
+        D = tgis.open_old_stds("R", type="strds")
+        D.select()
+        maplist = D.get_registered_maps_as_objects()
+        self.assertEqual(D.metadata.get_number_of_maps(), 7)
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 10)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 6))
+        self.assertEqual( D.check_temporal_topology(),  False)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+    def test_merge_function2(self):
+        """Testing the merge function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = merge(A, B {!:,contains} A)',  stdstype = 'strds', basename="r", overwrite=True)
+
+        D = tgis.open_old_stds("R", type="strds")
+        D.select()
+        maplist = D.get_registered_maps_as_objects()
+        self.assertEqual(D.metadata.get_number_of_maps(), 4)
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 4)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 5))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+class TestTemporalAlgebraDryRun(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        tgis.init(True) # Raise on error instead of exit(1)
+        cls.use_temp_region()
+        cls.runModule("g.region", n=80.0, s=0.0, e=120.0,
+                                       w=0.0, t=1.0, b=0.0, res=10.0)
+
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a1 = 1")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a2 = 2")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a3 = 3")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="c1 = 7")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d1 = 8")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 9")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 10")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99")
+
+        tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
+                           title="A", descr="A", semantic="field", overwrite=True)
+        tgis.open_new_stds(name="B", type="strds", temporaltype="absolute",
+                           title="B", descr="B", semantic="field", overwrite=True)
+        tgis.open_new_stds(name="C", type="strds", temporaltype="absolute",
+                           title="C", descr="C", semantic="field", overwrite=True)
+        tgis.open_new_stds(name="D", type="strds", temporaltype="absolute",
+                           title="D", descr="D", semantic="field", overwrite=True)
+
+        tgis.register_maps_in_space_time_dataset(type="raster", name="A", maps="a1,a2,a3,a4",
+                                                 start="2001-01-01", increment="1 day", interval=True)
+        tgis.register_maps_in_space_time_dataset(type="raster", name="B", maps="b1,b2",
+                                                 start="2001-01-01", increment="2 day", interval=True)
+        tgis.register_maps_in_space_time_dataset(type="raster", name="C", maps="c1",
+                                                 start="2001-01-02", increment="2 day", interval=True)
+        tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
+                                                 start="2001-01-03", increment="1 day", interval=True)
+        tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap",
+                                                 start="2001-01-03", end="2001-01-04")
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove", flags="rf", inputs="A,B,C,D", quiet=True)
+        cls.del_temp_region()
+
+    def test_merge_function1(self):
+        """Testing the merge function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = merge(A, B {:,contains} A)',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 6)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_merge_function2(self):
+        """Testing the merge function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = merge(A, B {!:,contains} A)',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 4)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_merge_function3(self):
+        """Testing the merge function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = merge(A, D {!:,equal} A)',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 5)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_shift1(self):
+        """Testing the shift function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = tshift(A, "3 days")',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+        print(pc["register"])
+        self.assertEqual(len(pc["register"]), 4)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_shift2(self):
+        """Testing the shift function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = tshift(A, "2 days") {:,during,l} C',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+        print(pc["register"])
+        self.assertEqual(len(pc["register"]), 1)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_buffer1(self):
+        """Testing the shift function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = buff_t(A, "1 day") ',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+        print(pc["register"])
+        self.assertEqual(len(pc["register"]), 4)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_buff2(self):
+        """Testing the shift function. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=False, dry_run=True)
+        pc = ta.parse(expression='R = buff_t(A, "1 day") {:,contains,l} C',
+                      stdstype = 'strds', basename="r",
+                      overwrite=True)
+        print(pc["register"])
+        self.assertEqual(len(pc["register"]), 2)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_algebra_grs.py b/lib/python/temporal/testsuite/unittests_temporal_algebra_grs.py
index e631f89..67e91c8 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_algebra_grs.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_algebra_grs.py
@@ -9,11 +9,12 @@ for details.
 
 import grass.script
 import grass.temporal as tgis
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 import datetime
 import os
 
-class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
+class TestTemporalAlgebraGranularity(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -61,7 +62,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d3",
                                                  start="2001-05-01", increment="31 days", interval=True)
         tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+                                                start="2001-01-03", end="2001-01-04")
 
     def tearDown(self):
         pass
@@ -76,12 +77,12 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
 
     def test_common_granularity_1(self):
         """Testing the common granularity function. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = A : B'
         ret = ta.setup_common_granularity(expression=expr)
 
         self.assertEqual(ret, True)
-        self.assertEqual(ta.granularity, "1 months")
+        self.assertEqual(ta.granularity, "1 month")
 
         ta.count = 0
         ta.stdstype = "strds"
@@ -108,7 +109,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
        
     def test_common_granularity_2(self):
         """Testing the common granularity function year to month samping. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = A : C'
         ret = ta.setup_common_granularity(expression=expr)
         
@@ -128,7 +129,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
 
     def test_common_granularity_3(self):
         """Testing the common granularity function with gaps. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = A : D'
         ret = ta.setup_common_granularity(expression=expr)
         
@@ -148,7 +149,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
 
     def test_common_granularity_4(self):
         """Testing the common granularity function year to month with gaps. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = C : D'
         ret = ta.setup_common_granularity(expression=expr)
         
@@ -167,7 +168,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
        
     def test_common_granularity_4(self):
         """Testing the common granularity function year to month with gaps. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = C : D'
         ret = ta.setup_common_granularity(expression=expr)
         
@@ -186,7 +187,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
        
     def test_common_granularity_5(self):
         """Testing the common granularity function year to month with gaps. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = A : C : D'
         ret = ta.setup_common_granularity(expression=expr)
         
@@ -205,7 +206,7 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
          
     def test_common_granularity_6(self):
         """Testing the common granularity function year to month with gaps. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         expr = 'R = if(start_month(A) > 2, A : C : D)'
         ret = ta.setup_common_granularity(expression=expr)
         
@@ -225,4 +226,4 @@ class TestTemporalAlgebraGranularity(grass.gunittest.TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_algebra_mixed_stds.py b/lib/python/temporal/testsuite/unittests_temporal_algebra_mixed_stds.py
index c42869e..6fe0f70 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_algebra_mixed_stds.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_algebra_mixed_stds.py
@@ -31,26 +31,24 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
         cls.runModule("r3.mapcalc", overwrite=True, quiet=True, expression="a4 = 4")
 
         tgis.open_new_stds(name="A", type="str3ds", temporaltype="absolute",
-                                         title="A", descr="A", semantic="field", overwrite=True)
+                           title="A", descr="A", semantic="field", overwrite=True)
 
         tgis.register_maps_in_space_time_dataset(type="raster3d", name="A", maps="a1,a2,a3,a4",
                                                  start="2001-01-01", increment="1 day", interval=True)
 
-
         cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b1 = 5")
         cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="b2 = 6")
 
         tgis.open_new_stds(name="B", type="strds", temporaltype="absolute",
-                                         title="B", descr="B", semantic="field", overwrite=True)
+                           title="B", descr="B", semantic="field", overwrite=True)
 
         tgis.register_maps_in_space_time_dataset(type="raster", name="B", maps="b1,b2",
                                                  start="2001-01-01", increment="2 day", interval=True)
 
-
         cls.runModule("v.random", overwrite=True, quiet=True, npoints=20, seed=3,  output='c1')
 
         tgis.open_new_stds(name="C", type="stvds", temporaltype="absolute",
-                                         title="B", descr="C", semantic="field", overwrite=True)
+                           title="B", descr="C", semantic="field", overwrite=True)
 
         tgis.register_maps_in_space_time_dataset(type="vector", name="C", maps="c1",
                                                  start="2001-01-02", increment="2 day", interval=True)
@@ -59,15 +57,16 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
     def tearDownClass(cls):
         """Remove the temporary region
         """
-        cls.runModule("t.remove", flags="rf", type="str3ds",  inputs="A", quiet=True)
+        cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A", quiet=True)
         cls.runModule("t.remove", flags="rf", type="strds", inputs="B", quiet=True)
         cls.runModule("t.remove", flags="rf", type="stvds", inputs="C", quiet=True)
         cls.del_temp_region()
 
     def test_temporal_select_operators1(self):
         """Testing the temporal select operator. Including temporal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression="R = A {:,during} stvds(C)",  stdstype = 'str3ds', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression="R = A {:,during} stvds(C)",
+                 stdstype='str3ds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
@@ -80,10 +79,21 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True, dry_run=True)
+        pc = ta.parse(expression="R = A {:,during} stvds(C)",
+                      stdstype='str3ds', basename="r", overwrite=True)
+
+        print(pc)
+
+        self.assertEqual(len(pc["register"]), 2)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "str3ds")
+
     def test_temporal_select_operators2(self):
         """Testing the temporal select operator. Including temporal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression="R = A {:,equal|during} stvds(C)",  stdstype = 'str3ds', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression="R = A {:,equal|during} stvds(C)",
+                 stdstype='str3ds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
@@ -96,11 +106,23 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True,
+                                        dry_run=True)
+        pc = ta.parse(expression="R = A {:,equal|during} stvds(C)",
+                      stdstype='str3ds', basename="r", overwrite=True)
+
+        print(pc)
+
+        self.assertEqual(len(pc["register"]), 2)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "str3ds")
+
     def test_temporal_select_operators3(self):
         """Testing the temporal select operator. Including temporal relations 
             and negation operation. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression="R = A {!:,during} stvds(C)",  stdstype = 'str3ds', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression="R = A {!:,during} stvds(C)",
+                 stdstype='str3ds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
@@ -116,13 +138,12 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
     def test_temporal_select_operators4(self):
         """Testing the temporal select operator. Including temporal relations and 
             temporal operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="V = C {:,contains} str3ds(A)",  
-                       stdstype = 'stvds', basename="r", overwrite=True)
+                 stdstype='stvds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("V", type="stvds")
         D.select()
-        maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
@@ -133,13 +154,12 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
     def test_temporal_select_operators5(self):
         """Testing the temporal select operator. Including temporal relations and 
             temporal operators. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during} strds(B)",  
-                       stdstype = 'str3ds', basename="r", overwrite=True)
+                 stdstype='str3ds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
-        maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
@@ -149,14 +169,12 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
 
     def test_temporal_hash_operator1(self):
         """Testing the hash operator function in conditional statement. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = if(A {#,during} stvds(C) == 1, A)",  
-                       stdstype = 'str3ds', 
-                       basename="r", overwrite=True)
+                 stdstype='str3ds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
-        maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
         self.assertEqual(D.metadata.get_min_min(), 2) 
         self.assertEqual(D.metadata.get_max_max(), 3) 
@@ -168,39 +186,49 @@ class TestTemporalAlgebraMixedDatasets(TestCase):
 
     def test_temporal_hash_operator2(self):
         """Testing the hash operator function in conditional statement. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = if({during}, stvds(C) {#,contains} A == 2, A)",  
-                                                 stdstype = 'str3ds', basename="r", overwrite=True)
+                 stdstype='str3ds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
-        maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
         self.assertEqual(D.metadata.get_min_min(), 2) 
         self.assertEqual(D.metadata.get_max_max(), 3) 
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
-        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
-    def test_different_stds_handling(self):
+    def test_different_stds_handling1(self):
         """Testing the handling of different stds types as output. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = if({during}, stvds(C) {#,contains} str3ds(A) == 2, str3ds(A))",  
-                                                 stdstype = 'strds', basename="r", overwrite=True)
+                 stdstype='strds', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="str3ds")
         D.select()
-        maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
         self.assertEqual(D.metadata.get_min_min(), 2) 
         self.assertEqual(D.metadata.get_max_max(), 3) 
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
-        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
+    def test_different_stds_handling2(self):
+        """Testing the handling of different stds types as output. """
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True,
+                                        dry_run=True)
+        pc = ta.parse(expression="R = if({during}, (stvds(C) {#,contains} str3ds(A)) == 2, str3ds(A))",
+                      stdstype='strds', basename="r", overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 2)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+
 if __name__ == '__main__':
     test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_conditionals.py b/lib/python/temporal/testsuite/unittests_temporal_conditionals.py
index 87371a1..783ce20 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_conditionals.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_conditionals.py
@@ -9,11 +9,12 @@ for details.
 
 import grass.script
 import grass.temporal as tgis
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 import datetime
 import os
 
-class TestTemporalConditionals(grass.gunittest.TestCase):
+class TestTemporalConditionals(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -62,7 +63,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="raster", name="E", maps="e1,e2,e3",
                                                  start="2000-12-31", increment="2 day", interval=True)
         tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+                                                start="2001-01-03", end="2001-01-04")
 
     def tearDown(self):
         self.runModule("t.remove", inputs="R", quiet=True)
@@ -76,7 +77,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_1(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = if(start_date(A) >= "2001-01-03", A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -92,7 +93,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_2(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = if(td(A) == 1, A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -108,7 +109,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
     
     def test_temporal_condition_3(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = if(td(A) == 1 || start_date(A) >= "2001-01-03", A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -124,7 +125,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
     
     def test_temporal_condition_4(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = if(start_date(A) >= "2001-01-03", A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -140,7 +141,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_5(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
         ta.parse(expression='R = if(start_day(A) <= 2, A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -156,8 +157,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
     
     def test_temporal_condition_6(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(td(A) == 1 {||,during} start_date(C) < "2001-01-02", A)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(td(A) == 1 {||,during} start_date(C) < "2001-01-02", A)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -172,8 +174,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_7(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if({over},start_date(C) == "2001-01-02" {&&,contains} td(A) == 1, B)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if({over},start_date(C) == "2001-01-02" {&&,contains} td(A) == 1, B)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -188,8 +191,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_8(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {||,over,|} td(E) == 2, B)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {||,over,|} td(E) == 2, B)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -204,8 +208,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_9(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,&} td(E) == 2, B)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,&} td(E) == 2, B)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -220,8 +225,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_10(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {||,over,|,r} td(E) == 2, E)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {||,over,|,r} td(E) == 2, E)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -236,8 +242,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
  
     def test_temporal_condition_11(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,r} td(E) == 2, E)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,r} td(E) == 2, E)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -252,8 +259,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_12(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,|,r} td(E) == 2, E)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(start_date(B) <= "2001-01-01" {&&,over,|,r} td(E) == 2, E)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -268,8 +276,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
     
     def test_temporal_conditional_13(self):
         """Testing the hash operator function in conditional statement. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if({equal|during},td(B) == 2 {&&,contains} td(A) == 1, A)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if({equal|during},td(B) == 2 {&&,contains} td(A) == 1, A)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -285,8 +294,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
  
     def test_temporal_condition_else_1(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(start_date(A) <= "2001-01-03", A, D)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(start_date(A) <= "2001-01-03", A, D)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -301,8 +311,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
     
     def test_temporal_condition_else_2(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if(td(D) == 1 && start_date(A) >= "2001-01-04", A, D)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if(td(D) == 1 && start_date(A) >= "2001-01-04", A, D)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -317,13 +328,14 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_else_3(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if({during},td(B) == 2 {&&,contains} start_date(D) >= "2001-01-04", A, D)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if({during},td(B) == 2 {&&,contains} start_date(D) >= "2001-01-04", A, D)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 8) 
+        self.assertEqual(D.metadata.get_min_min(), 8)
         self.assertEqual(D.metadata.get_max_max(), 9) 
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
@@ -333,8 +345,9 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
 
     def test_temporal_condition_else_4(self):
         """Testing the temporal select operator with equal relations. """
-        ta = tgis.TemporalAlgebraParser(run = True, debug = True)
-        ta.parse(expression='R = if({equal|over},start_date(B) <= "2001-01-01" {&&,over,|,r} td(E) == 2, E, B)', basename="r", overwrite=True)
+        ta = tgis.TemporalAlgebraParser(run=True, debug=True)
+        ta.parse(expression='R = if({equal|over},start_date(B) <= "2001-01-01" {&&,over,|,r} td(E) == 2, E, B)',
+                 basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -350,7 +363,7 @@ class TestTemporalConditionals(grass.gunittest.TestCase):
         self.assertEqual(D.get_granularity(),  u'2 days')
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
 
 
 
diff --git a/lib/python/temporal/testsuite/unittests_temporal_raster3d_algebra.py b/lib/python/temporal/testsuite/unittests_temporal_raster3d_algebra.py
index e8fc998..9d51ab2 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_raster3d_algebra.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_raster3d_algebra.py
@@ -10,11 +10,12 @@ for details.
 
 import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 import datetime
-import os
 
-class TestTemporalRaster3dAlgebra(gunittest.TestCase):
+
+class TestTemporalRaster3dAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -76,8 +77,6 @@ class TestTemporalRaster3dAlgebra(gunittest.TestCase):
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
 
-if __name__ == '__main__':
-    grass.gunittest.test()
-
-
 
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_raster_algebra.py b/lib/python/temporal/testsuite/unittests_temporal_raster_algebra.py
index 1af7c85..b404944 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_raster_algebra.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_raster_algebra.py
@@ -8,12 +8,12 @@ for details.
 """
 
 import datetime
-import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTemporalRasterAlgebra(gunittest.TestCase):
+
+class TestTemporalRasterAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -55,7 +55,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
                                                  start="2001-01-03", increment="1 day", interval=True)                                                 
         tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+                                                start="2001-01-03", end="2001-01-04")
         
     def tearDown(self):
         self.runModule("t.remove", flags="rf", inputs="R", quiet=True)
@@ -70,26 +70,36 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_extent1(self):
         """Testing the temporal extent operators. """
-        ta = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        ta = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         ta.parse(expression="R = A {:,during,r} C",   basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 3) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 3)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
         self.assertEqual( D.check_temporal_topology(),  False)
         self.assertEqual(D.get_granularity(),  u'2 days')
 
+        ta = tgis.TemporalRasterAlgebraParser(run=True, debug=True, dry_run=True)
+        pc = ta.parse(expression="R = A {:,during,r} C", basename="r", overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 2)
+        self.assertEqual(len(pc["processes"]), 2)
+        self.assertEqual(pc["processes"][0]["name"], "r.mapcalc")
+        self.assertEqual(pc["processes"][1]["name"], "r.mapcalc")
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
     def test_temporal_conditional_time_dimension_bug(self):
-        """Testing the conditional time dimension bug, that uses the time 
-            dimension of the conditional statement instead the time dimension 
+        """Testing the conditional time dimension bug, that uses the time
+            dimension of the conditional statement instead the time dimension
             of the then/else statement."""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = if({contains}, B == 5,  A - 1,  A + 1)", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -105,7 +115,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_hash_1(self):
         """Simple arithmetic test including the hash operator"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A + (A {#, equal,l} A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -120,7 +130,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_td_1(self):
         """Simple arithmetic test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A + td(A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -134,7 +144,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_td_2(self):
         """Simple arithmetic test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A / td(A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -148,7 +158,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_td_3(self):
         """Simple arithmetic test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A {+,equal} td(A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -163,7 +173,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_td_4(self):
         """Simple arithmetic test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A {/, equal} td(A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -178,7 +188,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_if_1(self):
         """Simple arithmetic test with if condition"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = if({equal}, start_date(A) >= "2001-01-02", A + A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -192,7 +202,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_if_2(self):
         """Simple arithmetic test with if condition"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = if({equal}, A#A == 1, A - A)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -206,7 +216,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_complex_arith_if_1(self):
         """Complex arithmetic test with if condition"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = if(start_date(A) < "2001-01-03" && A#A == 1, A{+, starts,l}C, A{+, finishes,l}C)', \
                   basename="r", overwrite=True)
 
@@ -221,7 +231,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_1(self):
         """Simple arithmetic test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {*, equal} A {+, equal} A", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -235,7 +245,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_2(self):
         """Simple arithmetic test that creates an empty strds"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {*, during} A {+, during} A", basename="r", overwrite=True)
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -243,7 +253,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_simple_arith_3(self):
         """Simple arithmetic test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A / A + A*A/A", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -254,10 +264,10 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
-        
+
     def test_temporal_intersection_1(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {+,equal,i} B", basename="r", overwrite=True)
         D = tgis.open_old_stds("R", type="strds")
         D.select()
@@ -265,7 +275,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_2(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {+,during,i} B", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -279,7 +289,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_3(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {+,starts,i} B", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -293,7 +303,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_4(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {+,finishes,intersect} B", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -307,7 +317,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_5(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {+,starts|finishes,i} B", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -321,7 +331,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_6(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = B {+,overlaps,u} C", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -335,7 +345,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_7(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = B {+,overlapped,u} C", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -349,7 +359,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_intersection_8(self):
         """Simple temporal intersection test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A {+,during,l} buff_t(C, "1 day") ',
                   basename="r", overwrite=True)
 
@@ -364,7 +374,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_neighbors_1(self):
         """Simple temporal neighborhood computation test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A[-1] + A[1]',
                   basename="r", overwrite=True)
 
@@ -379,7 +389,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_neighbors_2(self):
         """Simple temporal neighborhood computation test"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = A[0,0,-1] + A[0,0,1]',
                   basename="r", overwrite=True)
 
@@ -394,15 +404,15 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_tmap_function1(self):
         """Testing the tmap function. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = tmap(singletmap)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 99) 
-        self.assertEqual(D.metadata.get_max_max(), 99) 
+        self.assertEqual(D.metadata.get_min_min(), 99)
+        self.assertEqual(D.metadata.get_max_max(), 99)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -411,15 +421,15 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_tmap_function2(self):
         """Testing the tmap function. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = tmap(singletmap) + 1', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 100) 
-        self.assertEqual(D.metadata.get_max_max(), 100) 
+        self.assertEqual(D.metadata.get_min_min(), 100)
+        self.assertEqual(D.metadata.get_max_max(), 100)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -428,15 +438,15 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_map_function1(self):
         """Testing the map function. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R = map(singlemap) + A', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 4)
-        self.assertEqual(D.metadata.get_min_min(), 101) 
-        self.assertEqual(D.metadata.get_max_max(), 104) 
+        self.assertEqual(D.metadata.get_min_min(), 101)
+        self.assertEqual(D.metadata.get_max_max(), 104)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -445,15 +455,15 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_map_function2(self):
         """Testing the map function. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression='R =  A * map(singlemap)', basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         maplist = D.get_registered_maps_as_objects()
         self.assertEqual(D.metadata.get_number_of_maps(), 4)
-        self.assertEqual(D.metadata.get_min_min(), 100) 
-        self.assertEqual(D.metadata.get_max_max(), 400) 
+        self.assertEqual(D.metadata.get_min_min(), 100)
+        self.assertEqual(D.metadata.get_max_max(), 400)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -462,14 +472,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_select(self):
         """Testing the temporal select operator. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A : A", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 4)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -478,14 +488,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_select(self):
         """Testing the temporal select operator. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A : D", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 3) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 3)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -494,14 +504,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_select_operators1(self):
         """Testing the temporal select operator. Including temporal relations. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A : D", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 3) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 3)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -510,14 +520,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_select_operators2(self):
         """Testing the temporal select operator. Including temporal relations. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {!:,during} C", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -525,16 +535,16 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         self.assertEqual(D.get_granularity(),  u'1 day')
 
     def test_temporal_select_operators3(self):
-        """Testing the temporal select operator. Including temporal relations and 
+        """Testing the temporal select operator. Including temporal relations and
             different temporal operators (lr|+&)"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {:,during,d} B", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 4)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -542,9 +552,9 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         self.assertEqual(D.get_granularity(),  u'2 days')
 
     def test_temporal_select_operators4(self):
-        """Testing the temporal select operator. Including temporal relations and 
+        """Testing the temporal select operator. Including temporal relations and
             different temporal operators (lr|+&)"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A {:,equal|during,r} C", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -565,14 +575,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_hash_operator1(self):
         """Testing the temporal hash operator in the raster algebra. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = if(A # D == 1, A)", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 3) 
-        self.assertEqual(D.metadata.get_max_max(), 4) 
+        self.assertEqual(D.metadata.get_min_min(), 3)
+        self.assertEqual(D.metadata.get_max_max(), 4)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -581,14 +591,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_hash_operator2(self):
         """Testing the temporal hash operator in the raster algebra. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = A # D", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 1) 
-        self.assertEqual(D.metadata.get_max_max(), 1) 
+        self.assertEqual(D.metadata.get_min_min(), 1)
+        self.assertEqual(D.metadata.get_max_max(), 1)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -597,14 +607,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_hash_operator3(self):
         """Testing the temporal hash operator in the raster algebra. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = C {#,contains} A", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 2) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 2)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
@@ -613,30 +623,30 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_temporal_hash_operator4(self):
         """Testing the temporal hash operator in the raster algebra. """
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = if({contains},A # D == 1, C {#,contains} A)", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 1)
-        self.assertEqual(D.metadata.get_min_min(), 2) 
-        self.assertEqual(D.metadata.get_max_max(), 2) 
+        self.assertEqual(D.metadata.get_min_min(), 2)
+        self.assertEqual(D.metadata.get_max_max(), 2)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'2 days')
- 
+
     def test_raster_arithmetic_relation_1(self):
         """Arithmetic test with temporal intersection"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = B {+,contains,l} A ", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 8) 
-        self.assertEqual(D.metadata.get_max_max(), 13) 
+        self.assertEqual(D.metadata.get_min_min(), 8)
+        self.assertEqual(D.metadata.get_max_max(), 13)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -645,14 +655,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_raster_arithmetic_relation_2(self):
         """Arithmetic test with temporal intersection"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = B {*,contains,l} A ", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 10) 
-        self.assertEqual(D.metadata.get_max_max(), 72) 
+        self.assertEqual(D.metadata.get_min_min(), 10)
+        self.assertEqual(D.metadata.get_max_max(), 72)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
@@ -661,45 +671,45 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
 
     def test_raster_arithmetic_relation_3(self):
         """Arithmetic test with temporal intersection"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = B {+,contains,l} A ", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(), 2)
-        self.assertEqual(D.metadata.get_min_min(), 8) 
-        self.assertEqual(D.metadata.get_max_max(), 13) 
+        self.assertEqual(D.metadata.get_min_min(), 8)
+        self.assertEqual(D.metadata.get_max_max(), 13)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'2 days')
-    
+
     def test_raster_arithmetic_relation_4(self):
         """Arithmetic test with temporal intersection"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = B {+,contains,r} A ", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(),4)
-        self.assertEqual(D.metadata.get_min_min(), 8) 
-        self.assertEqual(D.metadata.get_max_max(), 13) 
+        self.assertEqual(D.metadata.get_min_min(), 8)
+        self.assertEqual(D.metadata.get_max_max(), 13)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 1, 5))
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
-    
+
     def test_raster_arithmetic_relation_5(self):
         """Complex arithmetic test with temporal intersection"""
-        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
         tra.parse(expression="R = tmap(singletmap) {+,equal| precedes| follows,l} A + map(singlemap)", basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
         D.select()
         self.assertEqual(D.metadata.get_number_of_maps(),1)
-        self.assertEqual(D.metadata.get_min_min(), 208) 
+        self.assertEqual(D.metadata.get_min_min(), 208)
         self.assertEqual(D.metadata.get_max_max(), 208)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 3))
@@ -707,5 +717,30 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
+    def test_capacity_1(self):
+        """Arithmetic test with temporal intersection"""
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True)
+        expr = "R = (((((((A + A) - A) * A) / A) % A) - td(A)) - (A # A))"
+        tra.parse(expression=expr, basename="r", overwrite=True)
+
+        D = tgis.open_old_stds("R", type="strds")
+        D.select()
+        self.assertEqual(D.metadata.get_number_of_maps(), 4)
+        self.assertEqual(D.metadata.get_min_min(), -2)
+        self.assertEqual(D.metadata.get_max_max(), -2)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 5))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True, dry_run=True)
+        pc = tra.parse(expression=expr, basename="r", overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 4)
+        self.assertEqual(len(pc["processes"]), 4)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_raster_algebra_grs.py b/lib/python/temporal/testsuite/unittests_temporal_raster_algebra_grs.py
index bb59c82..1ebbbde 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_raster_algebra_grs.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_raster_algebra_grs.py
@@ -8,12 +8,12 @@ for details.
 """
 
 import datetime
-import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTemporalRasterAlgebra(gunittest.TestCase):
+
+class TestTemporalRasterAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -37,6 +37,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d2 = 11")
         cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="d3 = 12")
         cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="singletmap = 99")
+        cls.runModule("r.mapcalc", overwrite=True, quiet=True, expression="nullmap = null()")
 
         tgis.open_new_stds(name="A", type="strds", temporaltype="absolute",
                                          title="A", descr="A", semantic="field", overwrite=True)
@@ -60,7 +61,9 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d3",
                                                  start="2001-05-01", increment="5 days", interval=True)
         tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-03-01", end="2001-04-01", interval=True)
+                                                start="2001-03-01", end="2001-04-01")
+        tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="nullmap",
+                                                start="2001-01-01", end="2001-07-01")
         
     def tearDown(self):
         return
@@ -95,13 +98,87 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 month')
 
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True, dry_run=True)
+        tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
+        pc = tra.parse(expression=expr, basename="r", overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 6)
+        self.assertEqual(len(pc["processes"]), 6)
+        self.assertEqual(pc["processes"][0]["name"], "r.mapcalc")
+        self.assertEqual(pc["processes"][5]["name"], "r.mapcalc")
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
     def test_2(self):
         """Simple arithmetik test"""
         tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        expr = "R = A + B + C"
+        ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
+        self.assertEqual(ret, True)
+
+        tra.parse(expression=expr, basename="r", overwrite=True)
+
+        D = tgis.open_old_stds("R", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 6)
+        self.assertEqual(D.metadata.get_min_min(), 17) # 1 + 7 + 9
+        self.assertEqual(D.metadata.get_max_max(), 23) # 6 + 8 + 9
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 7, 1))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 month')
+
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True, dry_run=True)
+        tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
+        pc = tra.parse(expression=expr, basename="r", overwrite=True)
+
+        self.assertEqual(len(pc["register"]), 6)
+        self.assertEqual(len(pc["processes"]), 6)
+        self.assertEqual(pc["processes"][0]["name"], "r.mapcalc")
+        self.assertEqual(pc["processes"][5]["name"], "r.mapcalc")
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_3(self):
+        """Simple arithmetik test with null map"""
+        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
+        expr = "R = A + B + C + tmap(nullmap)"
+        ret = tra.setup_common_granularity(expression=expr,
+                                           lexer=tgis.TemporalRasterAlgebraLexer())
+        self.assertEqual(ret, True)
+
+        tra.parse(expression=expr, basename="r", overwrite=True)
+
+        D = tgis.open_old_stds("R", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 0)
+        self.assertEqual(D.metadata.get_min_min(), None)
+        self.assertEqual(D.metadata.get_max_max(), None)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, None)
+        self.assertEqual(end, None)
+        self.assertEqual( D.check_temporal_topology(),  False)
+        self.assertEqual(D.get_granularity(),  None)
+
+        tra = tgis.TemporalRasterAlgebraParser(run=True, debug=True, dry_run=True)
+        tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
+        pc = tra.parse(expression=expr, basename="r", overwrite=True)
+
+        print(pc)
+
+        self.assertEqual(len(pc["register"]), 0)
+        self.assertEqual(len(pc["processes"]), 0)
+        self.assertEqual(pc["STDS"]["name"], "R")
+        self.assertEqual(pc["STDS"]["stdstype"], "strds")
+
+    def test_4(self):
+        """Simple arithmetik test"""
+        tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
         expr = "R = if(D == 11,  A - 1, A + 1)"
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -149,7 +226,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         expr = 'R = A + td(A:D)'
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -169,7 +246,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         expr = 'R = if(start_date(A) >= "2001-02-01", A + A)'
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -187,7 +264,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         expr = 'R = if(A#A == 1, A - A)'
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -205,7 +282,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         expr = 'R = if(start_date(A) < "2001-03-01" && A#A == 1, A+C, A-C)'
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -223,7 +300,7 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         expr ='R = (A[0,0,-1] : D) + (A[0,0,1] : D)'
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -234,14 +311,14 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 2))
         self.assertEqual(end, datetime.datetime(2001, 5, 6))
-    
+
     def test_map(self):
         """Test STDS + single map without timestamp"""
         tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
         expr = "R = A + map(singletmap)"
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
@@ -252,20 +329,20 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 1, 1))
         self.assertEqual(end, datetime.datetime(2001, 7, 1))
-        
+
     def test_tmap_map(self):
         """Test STDS + single map with and without timestamp"""
         tra = tgis.TemporalRasterAlgebraParser(run = True, debug = True)
         expr = "R = tmap(singletmap) + A + map(singletmap)"
         ret = tra.setup_common_granularity(expression=expr,  lexer = tgis.TemporalRasterAlgebraLexer())
         self.assertEqual(ret, True)
-        
+
         tra.parse(expression=expr, basename="r", overwrite=True)
 
         D = tgis.open_old_stds("R", type="strds")
 
         self.assertEqual(D.metadata.get_number_of_maps(),1)
-        self.assertEqual(D.metadata.get_min_min(), 201) 
+        self.assertEqual(D.metadata.get_min_min(), 201)
         self.assertEqual(D.metadata.get_max_max(), 201)
         start, end = D.get_absolute_time()
         self.assertEqual(start, datetime.datetime(2001, 3, 1))
@@ -273,5 +350,6 @@ class TestTemporalRasterAlgebra(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 month')
 
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_raster_conditionals.py b/lib/python/temporal/testsuite/unittests_temporal_raster_conditionals.py
index 4687450..0eed6a1 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_raster_conditionals.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_raster_conditionals.py
@@ -8,12 +8,12 @@ for details.
 """
 
 import datetime
-import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTemporalRasterAlgebraConditionals(gunittest.TestCase):
+
+class TestTemporalRasterAlgebraConditionals(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -494,5 +494,6 @@ class TestTemporalRasterAlgebraConditionals(gunittest.TestCase):
         self.assertEqual( R.check_temporal_topology(),  True)
         self.assertEqual(R.get_granularity(),  u'1 day')
 
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/lib/python/temporal/testsuite/unittests_temporal_vector_algebra.py b/lib/python/temporal/testsuite/unittests_temporal_vector_algebra.py
index 27225f1..2310a12 100644
--- a/lib/python/temporal/testsuite/unittests_temporal_vector_algebra.py
+++ b/lib/python/temporal/testsuite/unittests_temporal_vector_algebra.py
@@ -8,12 +8,12 @@ for details.
 """
 
 import datetime
-import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTemporalVectorAlgebra(gunittest.TestCase):
+
+class TestTemporalVectorAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -55,7 +55,7 @@ class TestTemporalVectorAlgebra(gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="vector", name="D", maps="d1,d2,d3",
                                                  start="2001-01-03", increment="1 day", interval=True)
         tgis.register_maps_in_space_time_dataset(type="vector", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+                                                start="2001-01-03", end="2001-01-04")
     
     def tearDown(self):
         self.runModule("t.remove", type="stvds", inputs="R", quiet=True)
@@ -202,8 +202,6 @@ class TestTemporalVectorAlgebra(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
-if __name__ == '__main__':
-    gunittest.test()
-
-
 
+if __name__ == '__main__':
+    test()
diff --git a/lib/python/temporal/unit_tests.py b/lib/python/temporal/unit_tests.py
index 253fe12..392996e 100644
--- a/lib/python/temporal/unit_tests.py
+++ b/lib/python/temporal/unit_tests.py
@@ -8,12 +8,14 @@ for details.
 
 :authors: Soeren Gebbert
 """
+from __future__ import print_function
+
 import copy
 from datetime import datetime
 import grass.script.core as core
-from temporal_granularity import *
-from datetime_math import *
-from space_time_datasets import *
+from .temporal_granularity import *
+from .datetime_math import *
+from .space_time_datasets import *
 
 import grass.lib.vector as vector
 import grass.lib.rtree as rtree
@@ -29,15 +31,15 @@ core.set_raise_on_error(True)
 def test_increment_datetime_by_string():
 
     # First test
-    print "# Test 1"
+    print("# Test 1")
     dt = datetime(2001, 9, 1, 0, 0, 0)
     string = "60 seconds, 4 minutes, 12 hours, 10 days, 1 weeks, 5 months, 1 years"
 
     dt1 = datetime(2003, 2, 18, 12, 5, 0)
     dt2 = increment_datetime_by_string(dt, string)
 
-    print dt
-    print dt2
+    print(dt)
+    print(dt2)
 
     delta = dt1 - dt2
 
@@ -45,15 +47,15 @@ def test_increment_datetime_by_string():
         core.fatal("increment computation is wrong %s" % (delta))
 
     # Second test
-    print "# Test 2"
+    print("# Test 2")
     dt = datetime(2001, 11, 1, 0, 0, 0)
     string = "1 months"
 
     dt1 = datetime(2001, 12, 1)
     dt2 = increment_datetime_by_string(dt, string)
 
-    print dt
-    print dt2
+    print(dt)
+    print(dt2)
 
     delta = dt1 - dt2
 
@@ -61,15 +63,15 @@ def test_increment_datetime_by_string():
         core.fatal("increment computation is wrong %s" % (delta))
 
     # Third test
-    print "# Test 3"
+    print("# Test 3")
     dt = datetime(2001, 11, 1, 0, 0, 0)
     string = "13 months"
 
     dt1 = datetime(2002, 12, 1)
     dt2 = increment_datetime_by_string(dt, string)
 
-    print dt
-    print dt2
+    print(dt)
+    print(dt2)
 
     delta = dt1 - dt2
 
@@ -77,15 +79,15 @@ def test_increment_datetime_by_string():
         core.fatal("increment computation is wrong %s" % (delta))
 
     # 4. test
-    print "# Test 4"
+    print("# Test 4")
     dt = datetime(2001, 1, 1, 0, 0, 0)
     string = "72 months"
 
     dt1 = datetime(2007, 1, 1)
     dt2 = increment_datetime_by_string(dt, string)
 
-    print dt
-    print dt2
+    print(dt)
+    print(dt2)
 
     delta = dt1 - dt2
 
@@ -98,7 +100,7 @@ def test_increment_datetime_by_string():
 def test_adjust_datetime_to_granularity():
 
     # First test
-    print "Test 1"
+    print("Test 1")
     dt = datetime(2001, 8, 8, 12, 30, 30)
     result = adjust_datetime_to_granularity(dt, "5 seconds")
     correct = datetime(2001, 8, 8, 12, 30, 30)
@@ -109,7 +111,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # Second test
-    print "Test 2"
+    print("Test 2")
     result = adjust_datetime_to_granularity(dt, "20 minutes")
     correct = datetime(2001, 8, 8, 12, 30, 00)
 
@@ -119,7 +121,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # Third test
-    print "Test 2"
+    print("Test 2")
     result = adjust_datetime_to_granularity(dt, "20 minutes")
     correct = datetime(2001, 8, 8, 12, 30, 00)
 
@@ -129,7 +131,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 4. test
-    print "Test 4"
+    print("Test 4")
     result = adjust_datetime_to_granularity(dt, "3 hours")
     correct = datetime(2001, 8, 8, 12, 00, 00)
 
@@ -139,7 +141,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 5. test
-    print "Test 5"
+    print("Test 5")
     result = adjust_datetime_to_granularity(dt, "5 days")
     correct = datetime(2001, 8, 8, 00, 00, 00)
 
@@ -149,7 +151,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 6. test
-    print "Test 6"
+    print("Test 6")
     result = adjust_datetime_to_granularity(dt, "2 weeks")
     correct = datetime(2001, 8, 6, 00, 00, 00)
 
@@ -159,7 +161,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 7. test
-    print "Test 7"
+    print("Test 7")
     result = adjust_datetime_to_granularity(dt, "6 months")
     correct = datetime(2001, 8, 1, 00, 00, 00)
 
@@ -169,7 +171,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 8. test
-    print "Test 8"
+    print("Test 8")
     result = adjust_datetime_to_granularity(dt, "2 years")
     correct = datetime(2001, 1, 1, 00, 00, 00)
 
@@ -179,7 +181,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 9. test
-    print "Test 9"
+    print("Test 9")
     result = adjust_datetime_to_granularity(
         dt, "2 years, 3 months, 5 days, 3 hours, 3 minutes, 2 seconds")
     correct = datetime(2001, 8, 8, 12, 30, 30)
@@ -190,7 +192,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 10. test
-    print "Test 10"
+    print("Test 10")
     result = adjust_datetime_to_granularity(dt, "3 months, 5 days, 3 minutes")
     correct = datetime(2001, 8, 8, 12, 30, 00)
 
@@ -200,7 +202,7 @@ def test_adjust_datetime_to_granularity():
         core.fatal("Granularity adjustment computation is wrong %s" % (delta))
 
     # 11. test
-    print "Test 11"
+    print("Test 11")
     result = adjust_datetime_to_granularity(dt, "3 weeks, 5 days")
     correct = datetime(2001, 8, 8, 00, 00, 00)
 
@@ -214,7 +216,7 @@ def test_adjust_datetime_to_granularity():
 
 def test_compute_datetime_delta():
 
-    print "Test 1"
+    print("Test 1")
     start = datetime(2001, 1, 1, 00, 00, 00)
     end = datetime(2001, 1, 1, 00, 00, 00)
 
@@ -228,7 +230,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 2"
+    print("Test 2")
     start = datetime(2001, 1, 1, 00, 00, 14)
     end = datetime(2001, 1, 1, 00, 00, 44)
 
@@ -242,7 +244,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 3"
+    print("Test 3")
     start = datetime(2001, 1, 1, 00, 00, 44)
     end = datetime(2001, 1, 1, 00, 01, 14)
 
@@ -256,7 +258,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 4"
+    print("Test 4")
     start = datetime(2001, 1, 1, 00, 00, 30)
     end = datetime(2001, 1, 1, 00, 05, 30)
 
@@ -270,7 +272,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 5"
+    print("Test 5")
     start = datetime(2001, 1, 1, 00, 00, 00)
     end = datetime(2001, 1, 1, 00, 01, 00)
 
@@ -284,7 +286,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 6"
+    print("Test 6")
     start = datetime(2011, 10, 31, 00, 45, 00)
     end = datetime(2011, 10, 31, 01, 45, 00)
 
@@ -298,7 +300,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 7"
+    print("Test 7")
     start = datetime(2011, 10, 31, 00, 45, 00)
     end = datetime(2011, 10, 31, 01, 15, 00)
 
@@ -312,7 +314,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 8"
+    print("Test 8")
     start = datetime(2011, 10, 31, 00, 45, 00)
     end = datetime(2011, 10, 31, 12, 15, 00)
 
@@ -326,7 +328,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 9"
+    print("Test 9")
     start = datetime(2011, 10, 31, 00, 00, 00)
     end = datetime(2011, 10, 31, 01, 00, 00)
 
@@ -340,7 +342,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 10"
+    print("Test 10")
     start = datetime(2011, 10, 31, 00, 00, 00)
     end = datetime(2011, 11, 01, 01, 00, 00)
 
@@ -354,7 +356,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 11"
+    print("Test 11")
     start = datetime(2011, 10, 31, 12, 00, 00)
     end = datetime(2011, 11, 01, 06, 00, 00)
 
@@ -368,7 +370,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 12"
+    print("Test 12")
     start = datetime(2011, 11, 01, 00, 00, 00)
     end = datetime(2011, 12, 01, 01, 00, 00)
 
@@ -382,7 +384,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 13"
+    print("Test 13")
     start = datetime(2011, 11, 01, 00, 00, 00)
     end = datetime(2011, 11, 05, 00, 00, 00)
 
@@ -396,7 +398,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 14"
+    print("Test 14")
     start = datetime(2011, 10, 06, 00, 00, 00)
     end = datetime(2011, 11, 05, 00, 00, 00)
 
@@ -410,7 +412,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 15"
+    print("Test 15")
     start = datetime(2011, 12, 02, 00, 00, 00)
     end = datetime(2012, 01, 01, 00, 00, 00)
 
@@ -424,7 +426,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 16"
+    print("Test 16")
     start = datetime(2011, 01, 01, 00, 00, 00)
     end = datetime(2011, 02, 01, 00, 00, 00)
 
@@ -438,7 +440,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 17"
+    print("Test 17")
     start = datetime(2011, 12, 01, 00, 00, 00)
     end = datetime(2012, 01, 01, 00, 00, 00)
 
@@ -452,7 +454,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 18"
+    print("Test 18")
     start = datetime(2011, 12, 01, 00, 00, 00)
     end = datetime(2012, 06, 01, 00, 00, 00)
 
@@ -466,7 +468,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 19"
+    print("Test 19")
     start = datetime(2011, 06, 01, 00, 00, 00)
     end = datetime(2021, 06, 01, 00, 00, 00)
 
@@ -480,7 +482,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 20"
+    print("Test 20")
     start = datetime(2011, 06, 01, 00, 00, 00)
     end = datetime(2012, 06, 01, 12, 00, 00)
 
@@ -495,7 +497,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 21"
+    print("Test 21")
     start = datetime(2011, 06, 01, 00, 00, 00)
     end = datetime(2012, 06, 01, 12, 30, 00)
 
@@ -510,7 +512,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 22"
+    print("Test 22")
     start = datetime(2011, 06, 01, 00, 00, 00)
     end = datetime(2012, 06, 01, 12, 00, 05)
 
@@ -525,7 +527,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 23"
+    print("Test 23")
     start = datetime(2011, 06, 01, 00, 00, 00)
     end = datetime(2012, 06, 01, 00, 30, 00)
 
@@ -540,7 +542,7 @@ def test_compute_datetime_delta():
     if delta != 0:
         core.fatal("Compute datetime delta is wrong %s" % (delta))
 
-    print "Test 24"
+    print("Test 24")
     start = datetime(2011, 06, 01, 00, 00, 00)
     end = datetime(2012, 06, 01, 00, 00, 05)
 
@@ -559,7 +561,7 @@ def test_compute_datetime_delta():
 def test_compute_absolute_time_granularity():
 
     # First we test intervals
-    print "Test 1"
+    print("Test 1")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "1 year"
@@ -575,7 +577,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 2"
+    print("Test 2")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "3 years"
@@ -591,7 +593,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 3"
+    print("Test 3")
     maps = []
     a = datetime(2001, 5, 1)
     increment = "1 month"
@@ -607,7 +609,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 4"
+    print("Test 4")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "3 months"
@@ -623,7 +625,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 3"
+    print("Test 3")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "1 day"
@@ -639,7 +641,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 4"
+    print("Test 4")
     maps = []
     a = datetime(2001, 1, 14)
     increment = "14 days"
@@ -655,7 +657,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 5"
+    print("Test 5")
     maps = []
     a = datetime(2001, 3, 1)
     increment = "1 month, 4 days"
@@ -672,7 +674,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 6"
+    print("Test 6")
     maps = []
     a = datetime(2001, 2, 11)
     increment = "1 days, 1 hours"
@@ -689,7 +691,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 7"
+    print("Test 7")
     maps = []
     a = datetime(2001, 6, 12)
     increment = "6 hours"
@@ -705,7 +707,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 8"
+    print("Test 8")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "20 minutes"
@@ -721,7 +723,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 9"
+    print("Test 9")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "5 hours, 25 minutes"
@@ -738,7 +740,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 10"
+    print("Test 10")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "5 minutes, 30 seconds"
@@ -755,7 +757,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 11"
+    print("Test 11")
     maps = []
     a = datetime(2001, 12, 31)
     increment = "60 minutes, 30 seconds"
@@ -772,15 +774,15 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 12"
+    print("Test 12")
     maps = []
     a = datetime(2001, 12, 31, 12, 30, 30)
     increment = "3600 seconds"
     for i in range(24):
         start = increment_datetime_by_string(a, increment, i)
         end = increment_datetime_by_string(a, increment, i + 1)
-        print start
-        print end
+        print(start)
+        print(end)
         map = RasterDataset(None)
         map.set_absolute_time(start, end)
         maps.append(map)
@@ -792,7 +794,7 @@ def test_compute_absolute_time_granularity():
 
     # Test absolute time points
 
-    print "Test 13"
+    print("Test 13")
     maps = []
     a = datetime(2001, 12, 31, 12, 30, 30)
     increment = "3600 seconds"
@@ -808,7 +810,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 14"
+    print("Test 14")
     maps = []
     a = datetime(2001, 12, 31, 00, 00, 00)
     increment = "20 days"
@@ -824,7 +826,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 15"
+    print("Test 15")
     maps = []
     a = datetime(2001, 12, 01, 00, 00, 00)
     increment = "5 months"
@@ -842,7 +844,7 @@ def test_compute_absolute_time_granularity():
 
     # Test absolute time interval and points
 
-    print "Test 16"
+    print("Test 16")
     maps = []
     a = datetime(2001, 12, 31, 12, 30, 30)
     increment = "3600 seconds"
@@ -867,7 +869,7 @@ def test_compute_absolute_time_granularity():
         core.fatal("Wrong granularity reference %s != gran %s" % (
             increment, gran))
 
-    print "Test 17"
+    print("Test 17")
     maps = []
     a = datetime(2001, 1, 1)
     increment = "2 days"
@@ -970,7 +972,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "equivalent":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -979,12 +981,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -993,22 +995,22 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = B.spatial_relation_2d(A)
-    print relation
+    print(relation)
     if relation != "covered":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = B.spatial_relation(A)
-    print relation
+    print(relation)
     if relation != "covered":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1017,17 +1019,17 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = B.spatial_relation_2d(A)
-    print relation
+    print(relation)
     if relation != "covered":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1035,7 +1037,7 @@ def test_spatial_relations():
         north=70, south=30, east=50, west=20, bottom=-50, top=50)
 
     relation = B.spatial_relation(A)
-    print relation
+    print(relation)
     if relation != "covered":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1044,12 +1046,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "contain":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1058,7 +1060,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "cover":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1067,12 +1069,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "contain":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = B.spatial_relation(A)
-    print relation
+    print(relation)
     if relation != "in":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1081,12 +1083,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "overlap":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "overlap":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1095,12 +1097,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "in":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "overlap":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1109,7 +1111,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "overlap":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1118,7 +1120,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "in":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1130,12 +1132,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1147,12 +1149,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1164,12 +1166,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1181,12 +1183,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1198,12 +1200,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1215,12 +1217,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1232,12 +1234,12 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation_2d(B)
-    print relation
+    print(relation)
     if relation != "disjoint":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "disjoint":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1249,7 +1251,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1261,7 +1263,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1271,7 +1273,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1281,7 +1283,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1291,7 +1293,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1301,7 +1303,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1311,7 +1313,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1321,7 +1323,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1331,7 +1333,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1341,7 +1343,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1351,7 +1353,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1361,7 +1363,7 @@ def test_spatial_relations():
     B.print_info()
 
     relation = A.spatial_relation(B)
-    print relation
+    print(relation)
     if relation != "meet":
         core.fatal("Wrong spatial relation: %s" % (relation))
 
@@ -1392,7 +1394,7 @@ def test_temporal_topology_builder():
 
     count = 0
     for _map in tb:
-        print "[%s]" % (_map.get_name())
+        print("[%s]" % (_map.get_name()))
         _map.print_topology_info()
         if _map.get_id() != map_listA[count].get_id():
             core.fatal("Error building temporal topology <%s> != <%s>" %
@@ -1432,7 +1434,7 @@ def test_temporal_topology_builder():
 
     count = 0
     for _map in tb:
-        print "[%s]" % (_map.get_map_id())
+        print("[%s]" % (_map.get_map_id()))
         _map.print_topology_shell_info()
         if _map.get_id() != map_listB[count].get_id():
             core.fatal("Error building temporal topology <%s> != <%s>" %
@@ -1444,7 +1446,7 @@ def test_temporal_topology_builder():
 
     count = 0
     for _map in tb:
-        print "[%s]" % (_map.get_map_id())
+        print("[%s]" % (_map.get_map_id()))
         _map.print_topology_shell_info()
         if _map.get_id() != map_listA[count].get_id():
             core.fatal("Error building temporal topology <%s> != <%s>" %
@@ -1453,7 +1455,7 @@ def test_temporal_topology_builder():
 
     count = 0
     for _map in map_listB:
-        print "[%s]" % (_map.get_map_id())
+        print("[%s]" % (_map.get_map_id()))
         _map.print_topology_shell_info()
 
     # Probing some relations
@@ -1488,13 +1490,13 @@ def test_map_list_sorting():
     _map.set_absolute_time(datetime(2001, 03, 01), datetime(2001, 04, 01))
     map_list.append(copy.copy(_map))
 
-    print "Original"
+    print("Original")
     for _map in map_list:
-        print _map.get_temporal_extent_as_tuple()[0], _map.get_temporal_extent_as_tuple()[1]
-    print "Sorted by start time"
+        print(_map.get_temporal_extent_as_tuple()[0], _map.get_temporal_extent_as_tuple()[1])
+    print("Sorted by start time")
     new_list = sorted(map_list, key=AbstractDatasetComparisonKeyStartTime)
     for _map in new_list:
-        print _map.get_temporal_extent_as_tuple()[0], _map.get_temporal_extent_as_tuple()[1]
+        print(_map.get_temporal_extent_as_tuple()[0], _map.get_temporal_extent_as_tuple()[1])
 
     if new_list[0] != map_list[1]:
         core.fatal("Sorting by start time failed")
@@ -1503,10 +1505,10 @@ def test_map_list_sorting():
     if new_list[2] != map_list[2]:
         core.fatal("Sorting by start time failed")
 
-    print "Sorted by end time"
+    print("Sorted by end time")
     new_list = sorted(map_list, key=AbstractDatasetComparisonKeyEndTime)
     for _map in new_list:
-        print _map.get_temporal_extent_as_tuple()[0], _map.get_temporal_extent_as_tuple()[1]
+        print(_map.get_temporal_extent_as_tuple()[0], _map.get_temporal_extent_as_tuple()[1])
 
     if new_list[0] != map_list[1]:
         core.fatal("Sorting by end time failed")
@@ -1523,7 +1525,7 @@ def test_1d_rtree():
 
     tree = rtree.RTreeCreateTree(-1, 0, 1)
 
-    for i in xrange(10):
+    for i in range(10):
 
         rect = rtree.RTreeAllocRect(tree)
         rtree.RTreeSetRect1D(rect, tree, float(i - 2), float(i + 2))
@@ -1539,9 +1541,9 @@ def test_1d_rtree():
     rtree.RTreeFreeRect(rect)
 
     # print rectangle ids
-    print "Number of overlapping rectangles", num
-    for i in xrange(list_.n_values):
-        print "id", list_.value[i]
+    print("Number of overlapping rectangles", num)
+    for i in range(list_.n_values):
+        print("id", list_.value[i])
 
     rtree.RTreeDestroyTree(tree)
 
@@ -1553,7 +1555,7 @@ def test_2d_rtree():
 
     tree = rtree.RTreeCreateTree(-1, 0, 2)
 
-    for i in xrange(10):
+    for i in range(10):
 
         rect = rtree.RTreeAllocRect(tree)
 
@@ -1571,9 +1573,9 @@ def test_2d_rtree():
     rtree.RTreeFreeRect(rect)
 
     # print rectangle ids
-    print "Number of overlapping rectangles", num
-    for i in xrange(list_.n_values):
-        print "id", list_.value[i]
+    print("Number of overlapping rectangles", num)
+    for i in range(list_.n_values):
+        print("id", list_.value[i])
 
     rtree.RTreeDestroyTree(tree)
 
@@ -1585,7 +1587,7 @@ def test_3d_rtree():
 
     tree = rtree.RTreeCreateTree(-1, 0, 3)
 
-    for i in xrange(10):
+    for i in range(10):
 
         rect = rtree.RTreeAllocRect(tree)
         rtree.RTreeSetRect3D(rect, tree,
@@ -1593,12 +1595,12 @@ def test_3d_rtree():
                              float(i - 2), float(i + 2),
                              float(i - 2), float(i + 2))
         rtree.RTreeInsertRect(rect, i + 1, tree)
-        print i + 1
+        print(i + 1)
         rtree.RTreePrintRect(rect, 1, tree)
 
     rect = rtree.RTreeAllocRect(tree)
     rtree.RTreeSetRect3D(rect, tree, 2.0, 7.0, 2.0, 7.0, 2.0, 7.0)
-    print "Select"
+    print("Select")
     rtree.RTreePrintRect(rect, 1, tree)
 
     list_ = gis.ilist()
@@ -1607,9 +1609,9 @@ def test_3d_rtree():
     rtree.RTreeFreeRect(rect)
 
     # print rectangle ids
-    print "Number of overlapping rectangles", num
-    for i in xrange(list_.n_values):
-        print "id", list_.value[i]
+    print("Number of overlapping rectangles", num)
+    for i in range(list_.n_values):
+        print("id", list_.value[i])
 
     rtree.RTreeDestroyTree(tree)
 
@@ -1621,7 +1623,7 @@ def test_4d_rtree():
 
     tree = rtree.RTreeCreateTree(-1, 0, 4)
 
-    for i in xrange(10):
+    for i in range(10):
 
         # Allocate the boundary
         rect = rtree.RTreeAllocRect(tree)
@@ -1643,9 +1645,9 @@ def test_4d_rtree():
     rtree.RTreeFreeRect(rect)
 
     # print rectangle ids
-    print "Number of overlapping rectangles", num
-    for i in xrange(list_.n_values):
-        print "id", list_.value[i]
+    print("Number of overlapping rectangles", num)
+    for i in range(list_.n_values):
+        print("id", list_.value[i])
 
     rtree.RTreeDestroyTree(tree)
 
diff --git a/lib/python/temporal/univar_statistics.py b/lib/python/temporal/univar_statistics.py
index bd13392..23f5215 100755
--- a/lib/python/temporal/univar_statistics.py
+++ b/lib/python/temporal/univar_statistics.py
@@ -18,8 +18,9 @@ for details.
 
 :authors: Soeren Gebbert
 """
+from __future__ import print_function
 
-from open_stds import *
+from .open_stds import *
 import grass.script as gscript
 
 ###############################################################################
@@ -71,7 +72,7 @@ def print_gridded_dataset_univar_statistics(type, input, output, where, extended
             string += "third_quartile" + fs + "percentile_90"
 
         if output is None:
-            print string
+            print(string)
         else:
             out_file.write(string + "\n")
 
@@ -113,7 +114,7 @@ def print_gridded_dataset_univar_statistics(type, input, output, where, extended
             string += fs + str(stats["third_quartile"]) + fs + str(stats["percentile_90"])
 
         if output is None:
-            print string
+            print(string)
         else:
             out_file.write(string + "\n")
 
@@ -126,7 +127,7 @@ def print_gridded_dataset_univar_statistics(type, input, output, where, extended
 ###############################################################################
 
 
-def print_vector_dataset_univar_statistics(input, twhere, layer, type, column,
+def print_vector_dataset_univar_statistics(input, output, twhere, layer, type, column,
                                            where, extended, no_header=False,
                                            fs="|"):
     """Print univariate statistics for a space time vector dataset
@@ -148,6 +149,9 @@ def print_vector_dataset_univar_statistics(input, twhere, layer, type, column,
     dbif = SQLDatabaseInterfaceConnection()
     dbif.connect()
 
+    if output is not None:
+        out_file = open(output, "w")
+
     mapset = get_current_mapset()
 
     if input.find("@") >= 0:
@@ -187,7 +191,10 @@ def print_vector_dataset_univar_statistics(input, twhere, layer, type, column,
                 string += fs + "first_quartile" + fs + "median" + fs + \
                     "third_quartile" + fs + "percentile_90"
 
-        print string
+        if output is None:
+            print(string)
+        else:
+            out_file.write(string + "\n")
 
     for row in rows:
         id = row["name"] + "@" + row["mapset"]
@@ -247,6 +254,12 @@ def print_vector_dataset_univar_statistics(input, twhere, layer, type, column,
                 else:
                     string += fs + fs + fs + fs
 
-        print string
+        if output is None:
+            print(string)
+        else:
+            out_file.write(string + "\n")
 
     dbif.close()
+
+    if output is not None:
+        out_file.close()
\ No newline at end of file
diff --git a/lib/raster/R.h b/lib/raster/R.h
index ce1ac73..0896daa 100644
--- a/lib/raster/R.h
+++ b/lib/raster/R.h
@@ -67,6 +67,7 @@ struct fileinfo			/* Information for opened cell files */
     struct Quant quant;
     struct GDAL_link *gdal;
     int data_fd;		/* Raster data fd               */
+    off_t *null_row_ptr;	/* Null file row addresses      */
 };
 
 struct R__			/*  Structure of library globals */
@@ -77,6 +78,7 @@ struct R__			/*  Structure of library globals */
     int want_histogram;
     int nbytes;
     int compression_type;
+    int compress_nulls;
     int window_set;		/* Flag: window set?                    */
     int split_window;           /* Separate windows for input and output */
     struct Cell_head rd_window;	/* Window used for input        */
diff --git a/lib/raster/close.c b/lib/raster/close.c
index 8587b39..a4a206b 100644
--- a/lib/raster/close.c
+++ b/lib/raster/close.c
@@ -33,6 +33,8 @@
 #define FORMAT_FILE "f_format"
 #define QUANT_FILE  "f_quant"
 #define NULL_FILE   "null"
+/* cmpressed null file */
+#define NULLC_FILE  "nullcmpr"
 
 static int close_old(int);
 static int close_new(int, int);
@@ -278,6 +280,9 @@ static int close_new_gdal(int fd, int ok)
 	G_file_name_misc(path, "cell_misc", NULL_FILE, fcb->name,
 			  G_mapset());
 	remove(path);
+	G_file_name_misc(path, "cell_misc", NULLC_FILE, fcb->name,
+			  G_mapset());
+	remove(path);
 
 	/* write 0-length cell file */
 	G_make_mapset_element("cell");
@@ -340,10 +345,6 @@ static int close_new(int fd, int ok)
     if (fcb->gdal)
 	return close_new_gdal(fd, ok);
 
-    if (fcb->null_fd >= 0)
-	close(fcb->null_fd);
-    fcb->null_fd = -1;
-
     if (ok) {
 	switch (fcb->open_mode) {
 	case OPEN_NEW_COMPRESSED:
@@ -362,12 +363,26 @@ static int close_new(int fd, int ok)
 	    fcb->data = NULL;
 	}
 
+	if (fcb->null_row_ptr) {			/* compressed nulls */
+	    fcb->null_row_ptr[fcb->cellhd.rows] = lseek(fcb->null_fd, 0L, SEEK_CUR);
+	    Rast__write_null_row_ptrs(fd, fcb->null_fd);
+	}
+
+	if (fcb->null_fd >= 0)
+	    close(fcb->null_fd);
+	fcb->null_fd = -1;
+
 	/* create path : full null file name */
 	G__make_mapset_element_misc("cell_misc", fcb->name);
-	G_file_name_misc(path, "cell_misc", NULL_FILE, fcb->name,
-			  G_mapset());
+	G_file_name_misc(path, "cell_misc", NULL_FILE, fcb->name, G_mapset());
+	remove(path);
+	G_file_name_misc(path, "cell_misc", NULLC_FILE, fcb->name, G_mapset());
 	remove(path);
 
+	G_file_name_misc(path, "cell_misc",
+			 fcb->null_row_ptr ? NULLC_FILE : NULL_FILE,
+			 fcb->name, G_mapset());
+
 	if (fcb->null_cur_row > 0) {
 	    /* if temporary NULL file exists, write it into cell_misc/name/null */
 	    if (rename(fcb->null_temp_name, path)) {
@@ -419,6 +434,10 @@ static int close_new(int fd, int ok)
     close(fcb->data_fd);
     fcb->open_mode = -1;
 
+    if (fcb->null_fd >= 0)
+	close(fcb->null_fd);
+    fcb->null_fd = -1;
+
     if (fcb->data != NULL)
 	G_free(fcb->data);
 
@@ -465,6 +484,47 @@ static int close_new(int fd, int ok)
     return stat;
 }
 
+void Rast__close_null(int fd)
+{
+    struct fileinfo *fcb = &R__.fileinfo[fd];
+    char path[GPATH_MAX];
+
+    if (fcb->null_row_ptr) {			/* compressed nulls */
+	fcb->null_row_ptr[fcb->cellhd.rows] = lseek(fcb->null_fd, 0L, SEEK_CUR);
+	Rast__write_null_row_ptrs(fd, fcb->null_fd);
+	G_free(fcb->null_row_ptr);
+    }
+
+    if (fcb->null_fd >= 0)
+	close(fcb->null_fd);
+    fcb->null_fd = -1;
+
+    /* create path : full null file name */
+    G__make_mapset_element_misc("cell_misc", fcb->name);
+    G_file_name_misc(path, "cell_misc", NULL_FILE, fcb->name, G_mapset());
+    remove(path);
+    G_file_name_misc(path, "cell_misc", NULLC_FILE, fcb->name, G_mapset());
+    remove(path);
+
+    G_file_name_misc(path, "cell_misc",
+		     fcb->null_row_ptr ? NULLC_FILE : NULL_FILE,
+		     fcb->name, G_mapset());
+
+    if (rename(fcb->null_temp_name, path))
+	G_warning(_("Unable to rename null file '%s' to '%s': %s"),
+		  fcb->null_temp_name, path, strerror(errno));
+    remove(fcb->null_temp_name);
+
+    G_free(fcb->null_temp_name);
+
+    G_free(fcb->name);
+    G_free(fcb->mapset);
+
+    G_free(fcb->null_bits);
+
+    fcb->open_mode = -1;
+}
+
 /* returns 0 on success, 1 on failure */
 static void write_fp_format(int fd)
 {
diff --git a/lib/raster/color_read.c b/lib/raster/color_read.c
index 509cd60..465526a 100644
--- a/lib/raster/color_read.c
+++ b/lib/raster/color_read.c
@@ -87,7 +87,7 @@ int Rast_read_colors(const char *name, const char *mapset,
 		Rast_get_range_min_max(&range, &min, &max);
 		if (!Rast_is_c_null_value(&min) &&
 		    !Rast_is_c_null_value(&max))
-		    Rast_make_rainbow_colors(colors, min, max);
+		    Rast_make_colors(colors, DEFAULT_COLOR_TABLE, min, max);
 		return 0;
 	    }
 	}
@@ -96,7 +96,7 @@ int Rast_read_colors(const char *name, const char *mapset,
 		Rast_get_fp_range_min_max(&drange, &dmin, &dmax);
 		if (!Rast_is_d_null_value(&dmin) &&
 		    !Rast_is_d_null_value(&dmax))
-		    Rast_make_rainbow_fp_colors(colors, dmin, dmax);
+		    Rast_make_fp_colors(colors, DEFAULT_COLOR_TABLE, dmin, dmax);
 		return 0;
 	    }
 	}
diff --git a/lib/raster/format.c b/lib/raster/format.c
index 86b05c5..f55336f 100644
--- a/lib/raster/format.c
+++ b/lib/raster/format.c
@@ -91,10 +91,8 @@ int Rast__check_format(int fd)
     return Rast__read_row_ptrs(fd);
 }
 
-int Rast__read_row_ptrs(int fd)
+static int read_row_ptrs(int nrows, int old, off_t *row_ptr, int fd)
 {
-    struct fileinfo *fcb = &R__.fileinfo[fd];
-    int nrows = fcb->cellhd.rows;
     unsigned char nbytes;
     unsigned char *buf, *b;
     int n;
@@ -105,9 +103,9 @@ int Rast__read_row_ptrs(int fd)
      * (this makes them machine dependent)
      */
 
-    if (fcb->cellhd.compressed < 0) {
+    if (old) {
 	n = (nrows + 1) * sizeof(off_t);
-	if (read(fcb->data_fd, fcb->row_ptr, n) != n)
+	if (read(fd, row_ptr, n) != n)
 	    goto badread;
 	return 1;
     }
@@ -119,14 +117,14 @@ int Rast__read_row_ptrs(int fd)
      *  actual values do not exceed the capability of the off_t)
      */
 
-    if (read(fcb->data_fd, &nbytes, 1) != 1)
+    if (read(fd, &nbytes, 1) != 1)
 	goto badread;
     if (nbytes == 0)
 	goto badread;
 
     n = (nrows + 1) * nbytes;
     buf = G_malloc(n);
-    if (read(fcb->data_fd, buf, n) != n)
+    if (read(fd, buf, n) != n)
 	goto badread;
 
     for (row = 0, b = buf; row <= nrows; row++) {
@@ -143,7 +141,7 @@ int Rast__read_row_ptrs(int fd)
 	    v += c;
 	}
 
-	fcb->row_ptr[row] = v;
+	row_ptr[row] = v;
     }
 
     G_free(buf);
@@ -151,27 +149,52 @@ int Rast__read_row_ptrs(int fd)
     return 1;
 
   badread:
-    G_warning(_("Fail of initial read of compressed file [%s in %s]"),
-	      fcb->name, fcb->mapset);
     return -1;
 }
 
-int Rast__write_row_ptrs(int fd)
+int Rast__read_row_ptrs(int fd)
+{
+    struct fileinfo *fcb = &R__.fileinfo[fd];
+    int nrows = fcb->cellhd.rows;
+    int old = fcb->cellhd.compressed < 0;
+
+    if (read_row_ptrs(nrows, old, fcb->row_ptr, fcb->data_fd) < 0) {
+	G_warning(_("Fail of initial read of compressed file [%s in %s]"),
+		  fcb->name, fcb->mapset);
+	return -1;
+    }
+
+    return 1;
+}
+
+int Rast__read_null_row_ptrs(int fd, int null_fd)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
     int nrows = fcb->cellhd.rows;
+
+    if (read_row_ptrs(nrows, 0, fcb->null_row_ptr, null_fd) < 0) {
+	G_warning(_("Fail of initial read of compressed null file [%s in %s]"),
+		  fcb->name, fcb->mapset);
+	return -1;
+    }
+
+    return 1;
+}
+
+static int write_row_ptrs(int nrows, off_t *row_ptr, int fd)
+{
     int nbytes = sizeof(off_t);
     unsigned char *buf, *b;
     int len, row, result;
 
-    lseek(fcb->data_fd, 0L, SEEK_SET);
+    lseek(fd, 0L, SEEK_SET);
 
     len = (nrows + 1) * nbytes + 1;
     b = buf = G_malloc(len);
     *b++ = nbytes;
 
     for (row = 0; row <= nrows; row++) {
-	off_t v = fcb->row_ptr[row];
+	off_t v = row_ptr[row];
 	int i;
 
 	for (i = nbytes - 1; i >= 0; i--) {
@@ -182,8 +205,24 @@ int Rast__write_row_ptrs(int fd)
 	b += nbytes;
     }
 
-    result = (write(fcb->data_fd, buf, len) == len);
+    result = (write(fd, buf, len) == len);
     G_free(buf);
 
     return result;
 }
+
+int Rast__write_row_ptrs(int fd)
+{
+    struct fileinfo *fcb = &R__.fileinfo[fd];
+    int nrows = fcb->cellhd.rows;
+
+    return write_row_ptrs(nrows, fcb->row_ptr, fcb->data_fd);
+}
+
+int Rast__write_null_row_ptrs(int fd, int null_fd)
+{
+    struct fileinfo *fcb = &R__.fileinfo[fd];
+    int nrows = fcb->cellhd.rows;
+
+    return write_row_ptrs(nrows, fcb->null_row_ptr, null_fd);
+}
diff --git a/lib/raster/get_row.c b/lib/raster/get_row.c
index a79beba..542fb0e 100644
--- a/lib/raster/get_row.c
+++ b/lib/raster/get_row.c
@@ -97,8 +97,9 @@ static void read_data_fp_compressed(int fd, int row, unsigned char *data_buf,
 
     *nbytes = fcb->nbytes;
 
-    if ((size_t) G_zlib_read(fcb->data_fd, readamount, data_buf, bufsize) != bufsize)
-	G_fatal_error(_("Error reading raster data for row %d of <%s>"),
+    if ((size_t) G_read_compressed(fcb->data_fd, readamount, data_buf,
+                                   bufsize, fcb->cellhd.compressed) != bufsize)
+	G_fatal_error(_("Error uncompressing raster data for row %d of <%s>"),
 		      row, fcb->name);
 }
 
@@ -128,7 +129,8 @@ static void read_data_compressed(int fd, int row, unsigned char *data_buf,
     off_t t1 = fcb->row_ptr[row];
     off_t t2 = fcb->row_ptr[row + 1];
     ssize_t readamount = t2 - t1;
-    unsigned char *cmp;
+    size_t bufsize;
+    unsigned char *cmp, *cmp2;
     int n;
 
     if (lseek(fcb->data_fd, t1, SEEK_SET) < 0)
@@ -143,6 +145,9 @@ static void read_data_compressed(int fd, int row, unsigned char *data_buf,
 		      row, fcb->name);
     }
 
+    /* save cmp for free below */
+    cmp2 = cmp;
+
     /* Now decompress the row */
     if (fcb->cellhd.compressed > 0) {
 	/* one byte is nbyte count */
@@ -153,16 +158,21 @@ static void read_data_compressed(int fd, int row, unsigned char *data_buf,
 	/* pre 3.0 compression */
 	n = *nbytes = fcb->nbytes;
 
-    if (fcb->cellhd.compressed < 0 || readamount < n * fcb->cellhd.cols) {
-	if (fcb->cellhd.compressed == 2)
-	    G_zlib_expand(cmp, readamount, data_buf, n * fcb->cellhd.cols);
-	else
+    bufsize = n * fcb->cellhd.cols;
+    if (fcb->cellhd.compressed < 0 || readamount < bufsize) {
+	if (fcb->cellhd.compressed == 1)
 	    rle_decompress(data_buf, cmp, n, readamount);
+	else {
+	    if (G_expand(cmp, readamount, data_buf, bufsize,
+		     fcb->cellhd.compressed) != bufsize)
+	    G_fatal_error(_("Error uncompressing raster data for row %d of <%s>"),
+			  row, fcb->name);
+	}
     }
     else
 	memcpy(data_buf, cmp, readamount);
 
-    G_freea(cmp);
+    G_freea(cmp2);
 }
 
 static void read_data_uncompressed(int fd, int row, unsigned char *data_buf,
@@ -804,11 +814,50 @@ void Rast_get_d_row(int fd, DCELL * buf, int row)
     Rast_get_row(fd, buf, row, DCELL_TYPE);
 }
 
-static int read_null_bits(int fd, int row)
+static int read_null_bits_compressed(int null_fd, unsigned char *flags,
+				     int row, size_t size, int fd)
+{
+    struct fileinfo *fcb = &R__.fileinfo[fd];
+    off_t t1 = fcb->null_row_ptr[row];
+    off_t t2 = fcb->null_row_ptr[row + 1];
+    size_t readamount = t2 - t1;
+    unsigned char *compressed_buf;
+
+    if (lseek(null_fd, t1, SEEK_SET) < 0)
+	G_fatal_error(_("Error reading null data for row %d of <%s>"),
+		      row, fcb->name);
+
+    if (readamount == size) {
+	if (read(null_fd, flags, size) != size) {
+	    G_fatal_error(_("Error reading null data for row %d of <%s>"),
+			  row, fcb->name);
+	}
+	return 1;
+    }
+
+    compressed_buf = G_alloca(readamount);
+
+    if (read(null_fd, compressed_buf, readamount) != readamount) {
+	G_freea(compressed_buf);
+	G_fatal_error(_("Error reading null data for row %d of <%s>"),
+		      row, fcb->name);
+    }
+
+    /* null bits file compressed with LZ4, see lib/gis/compress.h */
+    if (G_lz4_expand(compressed_buf, readamount, flags, size) < 1) {
+	G_fatal_error(_("Error uncompressing null data for row %d of <%s>"),
+		      row, fcb->name);
+    }
+
+    G_freea(compressed_buf);
+
+    return 1;
+}
+
+int Rast__read_null_bits(int fd, int row, unsigned char *flags)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
     int null_fd = fcb->null_fd;
-    unsigned char *flags = fcb->null_bits;
     int cols = fcb->cellhd.cols;
     off_t offset;
     ssize_t size;
@@ -823,6 +872,10 @@ static int read_null_bits(int fd, int row)
 	return 0;
 
     size = Rast__null_bitstream_size(cols);
+
+    if (fcb->null_row_ptr)
+	return read_null_bits_compressed(null_fd, flags, R, size, fd);
+
     offset = (off_t) size * R;
 
     if (lseek(null_fd, offset, SEEK_SET) < 0)
@@ -850,7 +903,7 @@ static void get_null_value_row_nomask(int fd, char *flags, int row)
     }
 
     if (row != fcb->null_cur_row) {
-	if (!read_null_bits(fd, row)) {
+	if (!Rast__read_null_bits(fd, row, fcb->null_bits)) {
 	    fcb->null_cur_row = -1;
 	    if (fcb->map_type == CELL_TYPE) {
 		/* If can't read null row, assume  that all map 0's are nulls */
diff --git a/lib/raster/init.c b/lib/raster/init.c
index 7e67cac..29e1a08 100644
--- a/lib/raster/init.c
+++ b/lib/raster/init.c
@@ -77,7 +77,7 @@ void Rast__error_handler(void *p)
 
 static int init(void)
 {
-    char *zlib;
+    char *zlib, *nulls, *cname;
 
     Rast__init_window();
 
@@ -96,6 +96,34 @@ static int init(void)
     zlib = getenv("GRASS_INT_ZLIB");
     R__.compression_type = (!zlib || atoi(zlib)) ? 2 : 1;
 
+    cname = getenv("GRASS_COMPRESSOR");
+    /* 1: RLE
+     * 2: ZLIB (DEFLATE)
+     * 3: LZ4
+     * 4: BZIP2 */
+    if (cname) {
+	/* ask gislib */
+	R__.compression_type = G_compressor_number(cname);
+	if (R__.compression_type < 1) {
+	    if (R__.compression_type < 0) {
+		G_warning(_("Unknown compression method <%s>, using default ZLIB"),
+		    cname);
+	    }
+	    if (R__.compression_type == 0) {
+		G_warning(_("No compression is not supported for GRASS raster maps, using default ZLIB"));
+	    }
+	    R__.compression_type = 2; /* default to ZLIB */
+	}
+	if (G_check_compressor(R__.compression_type) != 1) {
+	    G_warning(_("This GRASS version does not support %s compression, using default ZLIB"),
+		cname);
+	    R__.compression_type = 2; /* default to ZLIB */
+	}
+    }
+
+    nulls = getenv("GRASS_COMPRESS_NULLS");
+    R__.compress_nulls = (nulls && atoi(nulls)) ? 1 : 0;
+
     G_add_error_handler(Rast__error_handler, NULL);
 
     initialized = 1;
diff --git a/lib/raster/open.c b/lib/raster/open.c
index a1c0d9b..6345f1d 100644
--- a/lib/raster/open.c
+++ b/lib/raster/open.c
@@ -218,10 +218,22 @@ int Rast__open_old(const char *name, const char *mapset)
 			  r_name, r_mapset);
     }
 
+    /* compressor */
+    if (MAP_TYPE != CELL_TYPE) {
+	/* fp maps do not use RLE */
+	/* previously, compressed simply meant yes (ZLIB) or no
+	 * now compressed encodes compressor type
+	 * 0: not compressed
+	 * 1, 2: ZLIB
+	 * 3: LZ4
+	 * 4: BZIP2
+	 * etc */
+	if (cellhd.compressed == 1)
+	    cellhd.compressed = 2;
+    }
     /* test if compressor type is supported */
-    if (cellhd.compressed > 2) {
-	G_fatal_error(_("Raster map <%s@%s>: unsupported compression type %d"),
-		      r_name, r_mapset, cellhd.compressed);
+    if (!G_check_compressor(cellhd.compressed)) {
+	G_fatal_error(_("Compression with %s is not supported"), G_compressor_name(cellhd.compressed));
     }
 
     if (cellhd.proj != R__.rd_window.proj)
@@ -337,21 +349,24 @@ int Rast__open_old(const char *name, const char *mapset)
     fcb->io_error = 0;
     fcb->map_type = MAP_TYPE;
     fcb->nbytes = MAP_NBYTES;
+    fcb->null_row_ptr = NULL;
 
     if (!gdal) {
-	if (!G_find_file2_misc("cell_misc", NULL_FILE, r_name, r_mapset)) {
-	    /* G_warning("unable to find [%s]",path); */
-	    fcb->null_file_exists = 0;
-	    /* check for compressed null file */
-	    if (G_find_file2_misc("cell_misc", NULLC_FILE, r_name, r_mapset)) {
-		G_fatal_error(_("Unable to read compressed null file for <%s@%s>. At least GRASS GIS 7.2 is needed"), r_name, r_mapset);
-		return -1;
+	/* First, check for compressed null file */
+	fcb->null_fd = G_open_old_misc("cell_misc", NULL_FILE, r_name, r_mapset);
+	if (fcb->null_fd < 0) {
+	    fcb->null_fd = G_open_old_misc("cell_misc", NULLC_FILE, r_name, r_mapset);
+	    if (fcb->null_fd >= 0) {
+		fcb->null_row_ptr = G_calloc(fcb->cellhd.rows + 1, sizeof(off_t));
+		if (Rast__read_null_row_ptrs(fd, fcb->null_fd) < 0) {
+		    close(fcb->null_fd);
+		    fcb->null_fd = -1;
+		    G_free(fcb->null_row_ptr);
+		    fcb->null_row_ptr = NULL;
+		}
 	    }
 	}
-	else {
-	    fcb->null_fd = G_open_old_misc("cell_misc", NULL_FILE, r_name, r_mapset);
-	    fcb->null_file_exists = fcb->null_fd >= 0;
-	}
+	fcb->null_file_exists = fcb->null_fd >= 0;
     }
 
     return fd;
@@ -528,6 +543,7 @@ static int open_raster_new_gdal(char *map, char *mapset,
     fcb->null_cur_row = 0;
     fcb->null_bits = NULL;
     fcb->null_fd = -1;
+    fcb->null_row_ptr = NULL;
 
     if (fcb->map_type != CELL_TYPE)
 	Rast_quant_init(&(fcb->quant));
@@ -637,6 +653,8 @@ static int open_raster_new(const char *name, int open_mode,
      *   allocate space to hold the row address array
      */
     fcb->cellhd = R__.wr_window;
+    
+    /* change open_mode to OPEN_NEW_UNCOMPRESSED if R__.compression_type == 0 ? */
 
     if (open_mode == OPEN_NEW_COMPRESSED && fcb->map_type == CELL_TYPE) {
 	fcb->row_ptr = G_calloc(fcb->cellhd.rows + 1, sizeof(off_t));
@@ -661,6 +679,11 @@ static int open_raster_new(const char *name, int open_mode,
 	    Rast_quant_init(&(fcb->quant));
 	}
     }
+    if (open_mode == OPEN_NEW_COMPRESSED && fcb->map_type != CELL_TYPE &&
+        fcb->cellhd.compressed == 1) {
+	/* fp maps do not use RLE */
+	fcb->cellhd.compressed = 2;
+    }
 
     /* save name and mapset, and tempfile name */
     fcb->name = map;
@@ -685,6 +708,12 @@ static int open_raster_new(const char *name, int open_mode,
 
     fcb->null_temp_name = tempname;
 
+    if (R__.compress_nulls) {
+	fcb->null_row_ptr = G_calloc(fcb->cellhd.rows + 1, sizeof(off_t));
+	G_zero(fcb->row_ptr, (fcb->cellhd.rows + 1) * sizeof(off_t));
+	Rast__write_null_row_ptrs(fd, fcb->null_fd);
+    }
+
     /* next row to be written (in order) is zero */
     fcb->null_cur_row = 0;
 
@@ -710,6 +739,61 @@ static int open_raster_new(const char *name, int open_mode,
     return fd;
 }
 
+int Rast__open_null_write(const char *name)
+{
+    char xname[GNAME_MAX], xmapset[GMAPSET_MAX];
+    struct fileinfo *fcb;
+    int fd;
+    char *tempname;
+    char *map;
+    char *mapset;
+
+    Rast__init();
+
+    if (!G_find_raster2(name, G_mapset()))
+	G_fatal_error(_("Raster map <%s> does not exist in the current mapset (%s)"),
+		      name, G_mapset());
+
+    if (G_unqualified_name(name, G_mapset(), xname, xmapset) < 0)
+	G_fatal_error(_("Raster map <%s> is not in the current mapset (%s)"),
+		      name, G_mapset());
+    map = G_store(xname);
+    mapset = G_store(xmapset);
+
+    fd = new_fileinfo();
+    fcb = &R__.fileinfo[fd];
+
+    G_zero(fcb, sizeof(*fcb));
+
+    fcb->name = map;
+    fcb->mapset = mapset;
+
+    Rast_get_cellhd(map, mapset, &fcb->cellhd);
+
+    /* open a null tempfile name */
+    tempname = G_tempfile();
+    fcb->null_fd = creat(tempname, 0666);
+    if (fcb->null_fd < 0) {
+        int err = errno;
+	G_free(tempname);
+	G_free(fcb->name);
+	G_free(fcb->mapset);
+	G_fatal_error(_("No temp files available: %s"), strerror(err));
+    }
+    fcb->null_temp_name = tempname;
+
+    if (R__.compress_nulls) {
+	fcb->null_row_ptr = G_calloc(fcb->cellhd.rows + 1, sizeof(off_t));
+	G_zero(fcb->null_row_ptr, (fcb->cellhd.rows + 1) * sizeof(off_t));
+	Rast__write_null_row_ptrs(fd, fcb->null_fd);
+    }
+
+    /* allocate null bitstream buffer for writing */
+    fcb->null_bits = Rast__allocate_null_bits(fcb->cellhd.cols);
+
+    return fd;
+}
+
 /*!
    \brief Set raster map floating-point data format.
 
diff --git a/lib/raster/put_row.c b/lib/raster/put_row.c
index 7e5a989..d45b06f 100644
--- a/lib/raster/put_row.c
+++ b/lib/raster/put_row.c
@@ -122,12 +122,12 @@ static void write_data(int fd, int row, unsigned char *buf, int n)
 		      row, fcb->name, strerror(errno));
 }
 
-static void write_data_compressed(int fd, int row, unsigned char *buf, int n)
+static void write_data_compressed(int fd, int row, unsigned char *buf, int n, int compressor)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
     int nwrite = fcb->nbytes * n;
 
-    if (G_zlib_write(fcb->data_fd, buf, nwrite) < 0)
+    if (G_write_compressed(fcb->data_fd, buf, nwrite, compressor) < 0)
 	G_fatal_error(_("Error writing compressed FP data for row %d of <%s>: %s"),
 		      row, fcb->name, strerror(errno));
 }
@@ -205,7 +205,7 @@ static void put_fp_data(int fd, char *null_buf, const void *rast,
 	convert_double(work_buf, size, null_buf, rast, row, n);
 
     if (compressed)
-	write_data_compressed(fd, row, work_buf, n);
+	write_data_compressed(fd, row, work_buf, n, fcb->cellhd.compressed);
     else
 	write_data(fd, row, work_buf, n);
 
@@ -322,15 +322,6 @@ static int rle_compress(unsigned char *dst, unsigned char *src, int n,
 	n -= count;
     }
 
-    return nwrite;
-}
-
-static int zlib_compress(unsigned char *dst, unsigned char *src, int n,
-			 int nbytes)
-{
-    int total = nbytes * n;
-    int nwrite = G_zlib_compress(src, total, dst, total);
-
     return (nwrite >= total) ? 0 : nwrite;
 }
 
@@ -338,7 +329,7 @@ static void put_data(int fd, char *null_buf, const CELL * cell,
 		     int row, int n, int zeros_r_nulls)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
-    int compressed = fcb->cellhd.compressed;
+    int compressed = (fcb->open_mode == OPEN_NEW_COMPRESSED);
     int len = compressed ? sizeof(CELL) : fcb->nbytes;
     unsigned char *work_buf, *wk;
     ssize_t nwrite;
@@ -379,9 +370,15 @@ static void put_data(int fd, char *null_buf, const CELL * cell,
 	compressed_buf[0] = work_buf[0] = nbytes;
 
 	/* then compress the data */
-	nwrite = compressed == 1
-	    ? rle_compress(compressed_buf + 1, work_buf + 1, n, nbytes)
-	    : zlib_compress(compressed_buf + 1, work_buf + 1, n, nbytes);
+	if (fcb->cellhd.compressed == 1)
+	    nwrite = rle_compress(compressed_buf + 1, work_buf + 1, n, nbytes);
+	else {
+	    nwrite = G_compress(work_buf + 1, total, compressed_buf + 1, total,
+	                        fcb->cellhd.compressed);
+	}
+
+	if (nwrite >= total)
+	    nwrite = 0;
 
 	if (nwrite > 0) {
 	    nwrite++;
@@ -481,60 +478,53 @@ static void put_raster_data(int fd, char *null_buf, const void *rast,
 	put_fp_data(fd, null_buf, rast, row, n, map_type);
 }
 
-static void put_null_data(int fd, const char *flags, int row)
+static void put_null_value_row(int fd, const char *flags)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
 
+    if (fcb->gdal)
+	G_fatal_error(_("GDAL output doesn't support writing null rows separately"));
+
     if (fcb->null_fd < 0)
 	G_fatal_error(_("No null file for <%s>"), fcb->name);
 
     Rast__convert_01_flags(flags, fcb->null_bits,
 			   fcb->cellhd.cols);
 
-    Rast__write_null_bits(fcb->null_fd, fcb->null_bits, row,
-			  fcb->cellhd.cols, fd);
+    Rast__write_null_bits(fd, fcb->null_bits);
 }
 
-static void put_null_value_row(int fd, const char *buf)
+static void write_null_bits_compressed(const unsigned char *flags,
+				       int row, size_t size, int fd)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
+    unsigned char *compressed_buf;
+    ssize_t nwrite;
 
-    if (fcb->gdal)
-	G_fatal_error(_("GDAL output doesn't support writing null rows separately"));
-
-    put_null_data(fd, buf, fcb->null_cur_row);
-
-    fcb->null_cur_row++;
-}
+    fcb->null_row_ptr[row] = lseek(fcb->null_fd, 0L, SEEK_CUR);
 
-/*!
-   \brief Open null file for write
+    compressed_buf = G_alloca(size + 1);
 
-   \param fd file descriptor of raster cell data file
+    /* compress null bits file with LZ4, see lib/gis/compress.h */
+    nwrite = G_lz4_compress(flags, size, compressed_buf, size);
 
-   \return field descriptor of null data file
- */
-int Rast__open_null_write(int fd)
-{
-    struct fileinfo *fcb = &R__.fileinfo[fd];
-    int null_fd;
-
-    if (access(fcb->null_temp_name, 0) != 0)
-	G_fatal_error(_("Unable to find a temporary null file <%s>"),
-		      fcb->null_temp_name);
-
-    null_fd = open(fcb->null_temp_name, O_WRONLY);
-    if (null_fd < 0)
-	G_fatal_error(_("Unable to open null file <%s>"),
-		      fcb->null_temp_name);
+    if (nwrite > 0 && nwrite < size) {
+	if (write(fcb->null_fd, compressed_buf, nwrite) != nwrite)
+	    G_fatal_error(_("Error writing compressed null data for row %d of <%s>"),
+			  row, fcb->name);
+    }
+    else {
+	if (write(fcb->null_fd, flags, size) != size)
+	    G_fatal_error(_("Error writing compressed null data for row %d of <%s>"),
+			  row, fcb->name);
+    }
 
-    return null_fd;
+    G_freea(compressed_buf);
 }
 
 /*!
    \brief Write null data
 
-   \param null_fd file descriptor of null file where data is to be written
    \param flags ?
    \param row row number
    \param col col number
@@ -542,20 +532,26 @@ int Rast__open_null_write(int fd)
 
    \return void
  */
-void Rast__write_null_bits(int null_fd, const unsigned char *flags, int row,
-			   int cols, int fd)
+void Rast__write_null_bits(int fd, const unsigned char *flags)
 {
     struct fileinfo *fcb = &R__.fileinfo[fd];
+    int row = fcb->null_cur_row++;
     off_t offset;
     size_t size;
 
-    size = Rast__null_bitstream_size(cols);
-    offset = (off_t) size *row;
+    size = Rast__null_bitstream_size(fcb->cellhd.cols);
+
+    if (fcb->null_row_ptr) {
+	write_null_bits_compressed(flags, row, size, fd);
+	return;
+    }
+
+    offset = (off_t) size * row;
 
-    if (lseek(null_fd, offset, SEEK_SET) < 0)
+    if (lseek(fcb->null_fd, offset, SEEK_SET) < 0)
 	G_fatal_error(_("Error writing null row %d of <%s>"), row, fcb->name);
 
-    if (write(null_fd, flags, size) != size)
+    if (write(fcb->null_fd, flags, size) != size)
 	G_fatal_error(_("Error writing null row %d of <%s>"), row, fcb->name);
 }
 
diff --git a/lib/raster/rast_to_img_string.c b/lib/raster/rast_to_img_string.c
new file mode 100644
index 0000000..a802b20
--- /dev/null
+++ b/lib/raster/rast_to_img_string.c
@@ -0,0 +1,171 @@
+
+/****************************************************************************
+ *
+ * Function:     Rast_map_to_img_str() based on r.to.ppm
+ * AUTHOR(S):    Bill Brown, USA-CERL (original contributor)
+ *               Markus Neteler <neteler itc.it>, 
+ *               Bernhard Reiter <bernhard intevation.de>, 
+ *               Glynn Clements <glynn gclements.plus.com>, 
+ *               Jachym Cepicky <jachym les-ejk.cz>, 
+ *               Jan-Oliver Wagner <jan intevation.de>
+ *               Soeren Gebbert
+ * PURPOSE:      converts a GRASS raster map into an ARGB or
+ *               gray scale unsigned char string
+ * COPYRIGHT:    (C) 1999-2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the file COPYING that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+#include <string.h>
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/glocale.h>
+
+#define DEF_RED 255
+#define DEF_GRN 255
+#define DEF_BLU 255
+
+/* \brief Convert a raster map layer into a string with
+ *        32Bit ARGB, 32Bit RGB or 8Bit Gray little endian encoding.
+ * 
+ * The raster color table is used for coloring the image. Null values are 
+ * marked as transparent. Only little endian encoding is supported.
+ * 
+ * This function uses Rast_window_rows() and Rast_window_cols() to 
+ * get rows and cols, hence use Rast_set_window() to set the required
+ * region for raster access.
+ * 
+ * \param name The name of the raster map layer to convert
+ * \param color_mode The color modes to use:
+ *                  Color mode 1 -> 32Bit ARGB (0xAARRGGBB)
+ *                  Color mode 2 -> 32Bit RGB  (0xffRRGGBB)
+ *                  Color mode 3 -> grey scale formular: .33R+ .5G+ .17B
+ *                  Color mode 4 -> grey scale formular: .30R+ .59G+ .11B
+ * 
+ * \param result: An unsigned char pointer to store the result. 
+ *                It must have size 4*cols*rows in case of
+ *                ARGB and RGB, 
+ *                rows*cols in case of gray scale.
+ * 
+ * \return: 0 in case map not found, -1 in case the color mode is incorrect, 1 on success
+ * 
+ */
+int Rast_map_to_img_str(char *name, int color_mode, unsigned char* result)
+{
+    unsigned char *set = NULL, *red = NULL, *green = NULL, 
+                  *blue = NULL;
+    unsigned char alpha;
+    const char *mapset = NULL;
+    CELL *cell_buf = NULL;
+    FCELL *fcell_buf = NULL;
+    DCELL *dcell_buf = NULL;
+    void *voidc = NULL;
+    int rtype, row, col;
+    size_t i;
+    int map = 0;
+    
+    struct Colors colors;
+    int rows = Rast_window_rows();
+    int cols = Rast_window_cols();
+
+    if(color_mode > 3 || color_mode < 1)
+        return(-1);
+
+    mapset = G_find_raster2(name, "");
+    
+    if(!mapset)
+        return(0);
+    
+    map = Rast_open_old(name, "");
+
+    cell_buf = Rast_allocate_c_buf();
+    fcell_buf = Rast_allocate_f_buf();
+    dcell_buf = Rast_allocate_d_buf();
+
+    red = G_malloc(cols);
+    green = G_malloc(cols);
+    blue = G_malloc(cols);
+    set  = G_malloc(cols);
+
+    Rast_read_colors(name, mapset, &colors);
+
+    rtype = Rast_get_map_type(map);
+    if (rtype == CELL_TYPE)
+        voidc = (CELL *) cell_buf;
+    else if (rtype == FCELL_TYPE)
+        voidc = (FCELL *) fcell_buf;
+    else if (rtype == DCELL_TYPE)
+        voidc = (DCELL *) dcell_buf;
+
+    i = 0;
+    
+    if(color_mode == 1 || color_mode == 2) {/* 32BIT ARGB COLOR IMAGE with transparency */
+        for (row = 0; row < rows; row++) {
+            Rast_get_row(map, (void *)voidc, row, rtype);
+            Rast_lookup_colors((void *)voidc, red, green, blue, set,
+                               cols, &colors, rtype);
+                               
+            alpha = (unsigned char)255;
+            if ( color_mode == 1 && Rast_is_null_value( voidc, rtype ) )
+            {
+                alpha = (unsigned char)0;
+            }
+            for (col = 0; col < cols; col++) {
+                /* Only little endian */
+                if (set[col]) {
+                    result[i++] = blue[col];
+                    result[i++] = green[col];
+                    result[i++] = red[col];
+                    result[i++] = alpha;
+                }
+                else {
+                    result[i++] = DEF_BLU;
+                    result[i++] = DEF_GRN;
+                    result[i++] = DEF_RED;
+                    result[i++] = alpha;
+                }
+            }
+        }
+    }
+    else {/* GREYSCALE IMAGE */
+        for (row = 0; row < rows; row++) {
+            Rast_get_row(map, (void *)voidc, row, rtype);
+            Rast_lookup_colors((void *)voidc, red, green, blue, set,
+                               cols, &colors, rtype);
+            
+            if(color_mode == 3) {
+                for (col = 0; col < cols; col++) {
+                    /*.33R+ .5G+ .17B */
+                    result[i++] = ((red[col])   * 11 + 
+                                   (green[col]) * 16 +
+                                   (blue[col])  * 5) >> 5;
+                }
+            } else {
+                for (col = 0; col < cols; col++) {
+                    /*NTSC Y equation: .30R+ .59G+ .11B */
+                    result[i++] = ((red[col])   * 19 + 
+                                   (green[col]) * 38 + 
+                                   (blue[col])  * 7) >> 6;
+                }
+            }
+        }
+    }
+
+    Rast_free_colors(&colors);
+
+    G_free(cell_buf);
+    G_free(fcell_buf);
+    G_free(dcell_buf);
+    G_free(red);
+    G_free(green);
+    G_free(blue);
+    G_free(set);
+    Rast_close(map);
+    
+    return(1);
+}
diff --git a/lib/raster/rasterlib.dox b/lib/raster/rasterlib.dox
index 9723db3..e9e8f65 100644
--- a/lib/raster/rasterlib.dox
+++ b/lib/raster/rasterlib.dox
@@ -1232,12 +1232,23 @@ double, i.e. an all-ones exponent, the top-bit of the mantissa set,
 and either sign).
 
 So far as arithmetic is concerned, any value with an all-ones exponent
-and a non-zero mantissa is treated as NaN. But the GRASS
-Rast_is_[fd]_null_value() functions only consider the all-ones bit
-pattern to be null. I intend to change this in 7.x so that all FP NaN
-values are treated as null. This will mean that code which can
-generate NaNs doesn't have to explicitly convert them to the GRASS
-null value.
+and a non-zero mantissa is treated as NaN.
+Rast_set_d_null_value() and Rast_set_f_null_value() use the all-ones
+bit pattern. This is one of the many NaN values (anything with an
+all-ones exponent and a non-zero mantissa is NaN). As the topmost bit
+(i.e. the sign bit) is set, it is possible that some code would
+consider that to be "-NaN". E.g. code which writes a leading "-" based
+upon the sign bit before considering the other components would do so.
+
+Rast_is_d_null_value() and Rast_is_f_null_value() treat any NaN as
+null (specifically, they test whether the value is unequal to itself).
+
+At one time, these functions (or rather, their predecessors) checked
+explicitly for the all-ones pattern, but this was changed (in r33717
+and r33752) to improve robustness. Apart from code explicitly setting
+a value to "null", NaNs can arise from calculations (0.0/0.0, sqrt(x)
+or log(x) for x<0, asin(x) or acos(x) for abs(x)>1, etc), and there's
+no guarantee as to exactly which NaN representation will result.
 
 <b>Presence or absence of <tt>null</tt> file:</b>
 
diff --git a/lib/raster/window_map.c b/lib/raster/window_map.c
index 1d7b2f3..ef7d1dc 100644
--- a/lib/raster/window_map.c
+++ b/lib/raster/window_map.c
@@ -37,7 +37,7 @@ void Rast__create_window_mapping(int fd)
     int i;
     int x;
     double C1, C2;
-    double west;
+    double west, east;
 
     if (fcb->open_mode >= 0 && fcb->open_mode != OPEN_OLD)	/* open for write? */
 	return;
@@ -55,11 +55,16 @@ void Rast__create_window_mapping(int fd)
      * cellhd west.
      */
     west = R__.rd_window.west;
+    east = R__.rd_window.east;
     if (R__.rd_window.proj == PROJECTION_LL) {
-	while (west > fcb->cellhd.west + 360.0)
+	while (west > fcb->cellhd.west + 360.0) {
 	    west -= 360.0;
-	while (west < fcb->cellhd.west)
+	    east -= 360.0;
+	}
+	while (west < fcb->cellhd.west) {
 	    west += 360.0;
+	    east += 360.0;
+	}
     }
 
     C1 = R__.rd_window.ew_res / fcb->cellhd.ew_res;
@@ -77,19 +82,25 @@ void Rast__create_window_mapping(int fd)
 
     /* do wrap around for lat/lon */
     if (R__.rd_window.proj == PROJECTION_LL) {
-	col = fcb->col_map;
-	C2 = (west - 360.0 - fcb->cellhd.west +
-	      R__.rd_window.ew_res / 2.0) / fcb->cellhd.ew_res;
-	for (i = 0; i < R__.rd_window.cols; i++) {
-	    x = C2;
-	    if (C2 < x)		/* adjust for rounding of negatives */
-		x--;
-	    if (x < 0 || x >= fcb->cellhd.cols)	/* not in data file */
-		x = -1;
-	    if (*col == 0)	/* only change those not already set */
-		*col = x + 1;
-	    col++;
-	    C2 += C1;
+	
+	while (east - 360.0 > fcb->cellhd.west) {
+	    east -= 360.0;
+	    west -= 360.0;
+
+	    col = fcb->col_map;
+	    C2 = (west - fcb->cellhd.west +
+		  R__.rd_window.ew_res / 2.0) / fcb->cellhd.ew_res;
+	    for (i = 0; i < R__.rd_window.cols; i++) {
+		x = C2;
+		if (C2 < x)		/* adjust for rounding of negatives */
+		    x--;
+		if (x < 0 || x >= fcb->cellhd.cols)	/* not in data file */
+		    x = -1;
+		if (*col == 0)	/* only change those not already set */
+		    *col = x + 1;
+		col++;
+		C2 += C1;
+	    }
 	}
     }
 
diff --git a/lib/raster3d/color.c b/lib/raster3d/color.c
index efd5ede..e0f95bb 100644
--- a/lib/raster3d/color.c
+++ b/lib/raster3d/color.c
@@ -57,7 +57,7 @@ int Rast3d_read_colors(const char *name, const char *mapset, struct Colors *colo
 	if (Rast3d_read_range(name, mapset, &drange) >= 0) {
 	    Rast_get_fp_range_min_max(&drange, &dmin, &dmax);
 	    if (!Rast_is_d_null_value(&dmin) && !Rast_is_d_null_value(&dmax))
-		Rast_make_rainbow_fp_colors(colors, dmin, dmax);
+		Rast_make_fp_colors(colors, DEFAULT_COLOR_TABLE, dmin, dmax);
 	    return 0;
 	}
 	err = "missing";
diff --git a/lib/raster3d/fpcompress.c b/lib/raster3d/fpcompress.c
index 2398afa..625b348 100644
--- a/lib/raster3d/fpcompress.c
+++ b/lib/raster3d/fpcompress.c
@@ -704,7 +704,7 @@ Rast3d_fpcompress_write_xdr_nums(int fd, char *src, int nofNum, int precision,
 					    &nBytes, &offsetMantissa);
 
 	*compressBuf = 0;
-	status = G_zlib_write(fd, (unsigned char *)compressBuf, nBytes + 1);
+	status = G_write_compressed(fd, (unsigned char *)compressBuf, nBytes + 1, 2);
 
     if (status < 0) {
 	Rast3d_error("Rast3d_fpcompress_write_xdr_nums: write error");
@@ -726,8 +726,8 @@ Rast3d_fpcompress_read_xdr_nums(int fd, char *dst, int nofNum, int fileBytes,
     char *src, *dest, *srcStop;
     nBytes = (isFloat ? XDR_FLOAT_LENGTH : XDR_DOUBLE_LENGTH);
 
-    status = G_zlib_read(fd, fileBytes, (unsigned char *)compressBuf,
-			 nofNum * nBytes + 1);
+    status = G_read_compressed(fd, fileBytes, (unsigned char *)compressBuf,
+			 nofNum * nBytes + 1, 2);
 
     if (status < 0) {
 	Rast3d_error("Rast3d_fpcompress_read_xdr_nums: read error");
diff --git a/lib/raster3d/gradient.c b/lib/raster3d/gradient.c
new file mode 100644
index 0000000..525cafd
--- /dev/null
+++ b/lib/raster3d/gradient.c
@@ -0,0 +1,179 @@
+
+/*!
+   \file gradient.c
+
+   \brief Gradient computation
+
+   (C) 2014 by the GRASS Development Team
+
+   This program is free software under the GNU General Public
+   License (>=v2).  Read the file COPYING that comes with GRASS
+   for details.
+
+   \author Anna Petrasova
+ */
+
+/*!
+   \brief Gradient computation
+
+   Gradient computation (second order approximation)
+   using central differencing scheme (plus forward and backward
+   difference of second order approximation). When one or more of the cells,
+   from which the gradient for a particular cell is computed, is null,
+   gradient for that particular cell is set to 0.
+   
+   \param array pointer to RASTER3D_Array with input values
+   \param step array of x, y, z steps for gradient (resolution values)
+   \param[out] grad_x pointer to RASTER3D_Array_double with gradient in x direction
+   \param[out] grad_y pointer to RASTER3D_Array_double with gradient in y direction
+   \param[out] grad_z pointer to RASTER3D_Array_double with gradient in z direction
+
+ */
+#include <grass/raster3d.h>
+
+void Rast3d_gradient_double(RASTER3D_Array_double *array, double *step,
+			    RASTER3D_Array_double *grad_x,
+			    RASTER3D_Array_double *grad_y,
+			    RASTER3D_Array_double *grad_z)
+{
+    int col, row, depth;
+    double val0, val1, val2;
+
+    for (depth = 0; depth < array->sz; depth++) {
+	for (row = 0; row < array->sy; row++) {
+	    /* row start */
+	    val0 = RASTER3D_ARRAY_ACCESS(array, 0, row, depth);
+	    val1 = RASTER3D_ARRAY_ACCESS(array, 1, row, depth);
+	    val2 = RASTER3D_ARRAY_ACCESS(array, 2, row, depth);
+	    if (Rast_is_d_null_value(&val0))
+		Rast_set_null_value(&RASTER3D_ARRAY_ACCESS(grad_x, 0, row, depth),
+				    1, DCELL_TYPE);
+	    else if (Rast_is_d_null_value(&val1) || Rast_is_d_null_value(&val2))
+		RASTER3D_ARRAY_ACCESS(grad_x, 0, row, depth) = 0;
+	    else
+		RASTER3D_ARRAY_ACCESS(grad_x, 0, row, depth) =
+			(-3 * val0 + 4 * val1 - val2) / (2 * step[0]);
+
+	    /* row end */
+	    val0 = RASTER3D_ARRAY_ACCESS(array, array->sx - 3, row, depth);
+	    val1 = RASTER3D_ARRAY_ACCESS(array, array->sx - 2, row, depth);
+	    val2 = RASTER3D_ARRAY_ACCESS(array, array->sx - 1, row, depth);
+	    if (Rast_is_d_null_value(&val2))
+		Rast_set_null_value(
+			&RASTER3D_ARRAY_ACCESS(grad_x, array->sx - 1, row, depth),
+			1, DCELL_TYPE);
+	    else if (Rast_is_d_null_value(&val0) || Rast_is_d_null_value(&val1))
+		RASTER3D_ARRAY_ACCESS(grad_x, array->sx - 1, row, depth) = 0;
+	    else
+		RASTER3D_ARRAY_ACCESS(grad_x, array->sx - 1, row, depth) =
+			(3 * val2 - 4 * val1 + val0) / (2 * step[0]);
+
+	    /* row */
+	    for (col = 1; col < array->sx - 1; col++) {
+		val0 = RASTER3D_ARRAY_ACCESS(array, col - 1, row, depth);
+		val1 = RASTER3D_ARRAY_ACCESS(array, col, row, depth);
+		val2 = RASTER3D_ARRAY_ACCESS(array, col + 1, row, depth);
+		if (Rast_is_d_null_value(&val1))
+		    Rast_set_null_value(
+			    &RASTER3D_ARRAY_ACCESS(grad_x, col, row, depth),
+			    1, DCELL_TYPE);
+		else if (Rast_is_d_null_value(&val0) || Rast_is_d_null_value(&val2))
+		    RASTER3D_ARRAY_ACCESS(grad_x, col, row, depth) = 0;
+		else
+		    RASTER3D_ARRAY_ACCESS(grad_x, col, row, depth) =
+			    (val2 - val0) / (2 * step[0]);
+	    }
+	}
+    }
+    for (depth = 0; depth < array->sz; depth++) {
+	for (col = 0; col < array->sx; col++) {
+	    /* col start */
+	    val0 = RASTER3D_ARRAY_ACCESS(array, col, 0, depth);
+	    val1 = RASTER3D_ARRAY_ACCESS(array, col, 1, depth);
+	    val2 = RASTER3D_ARRAY_ACCESS(array, col, 2, depth);
+	    if (Rast_is_d_null_value(&val0))
+		Rast_set_null_value(&RASTER3D_ARRAY_ACCESS(grad_y, col, 0, depth),
+				    1, DCELL_TYPE);
+	    else if (Rast_is_d_null_value(&val1) || Rast_is_d_null_value(&val2))
+		RASTER3D_ARRAY_ACCESS(grad_y, col, 0, depth) = 0;
+	    else
+		RASTER3D_ARRAY_ACCESS(grad_y, col, 0, depth) =
+			-(-3 * val0 + 4 * val1 - val2) / (2 * step[1]);
+
+	    /* col end */
+	    val0 = RASTER3D_ARRAY_ACCESS(array, col, array->sy - 3, depth);
+	    val1 = RASTER3D_ARRAY_ACCESS(array, col, array->sy - 2, depth);
+	    val2 = RASTER3D_ARRAY_ACCESS(array, col, array->sy - 1, depth);
+	    if (Rast_is_d_null_value(&val2))
+		Rast_set_null_value(
+			&RASTER3D_ARRAY_ACCESS(grad_y, col, array->sy - 1, depth),
+			1, DCELL_TYPE);
+	    else if (Rast_is_d_null_value(&val0) || Rast_is_d_null_value(&val1))
+		RASTER3D_ARRAY_ACCESS(grad_y, col, array->sy - 1, depth) = 0;
+	    else
+		RASTER3D_ARRAY_ACCESS(grad_y, col, array->sy - 1, depth) =
+			-(3 * val2 - 4 * val1 + val0) / (2 * step[1]);
+
+	    /* col */
+	    for (row = 1; row < array->sy - 1; row++) {
+		val0 = RASTER3D_ARRAY_ACCESS(array, col, row - 1, depth);
+		val1 = RASTER3D_ARRAY_ACCESS(array, col, row, depth);
+		val2 = RASTER3D_ARRAY_ACCESS(array, col, row + 1, depth);
+		if (Rast_is_d_null_value(&val1))
+		    Rast_set_null_value(
+			    &RASTER3D_ARRAY_ACCESS(grad_y, col, row, depth),
+			    1, DCELL_TYPE);
+		else if (Rast_is_d_null_value(&val0) || Rast_is_d_null_value(&val2))
+		    RASTER3D_ARRAY_ACCESS(grad_y, col, row, depth) = 0;
+		else
+		    RASTER3D_ARRAY_ACCESS(grad_y, col, row, depth) =
+			    -(val2 - val0) / (2 * step[1]);
+	    }
+	}
+    }
+    for (row = 0; row < array->sy; row++) {
+	for (col = 0; col < array->sx; col++) {
+	    /* vertical col start */
+	    val0 = RASTER3D_ARRAY_ACCESS(array, col, row, 0);
+	    val1 = RASTER3D_ARRAY_ACCESS(array, col, row, 1);
+	    val2 = RASTER3D_ARRAY_ACCESS(array, col, row, 2);
+	    if (Rast_is_d_null_value(&val0))
+		Rast_set_null_value(&RASTER3D_ARRAY_ACCESS(grad_z, col, row, 0),
+				    1, DCELL_TYPE);
+	    else if (Rast_is_d_null_value(&val1) || Rast_is_d_null_value(&val2))
+		RASTER3D_ARRAY_ACCESS(grad_z, col, row, 0) = 0;
+	    else
+		RASTER3D_ARRAY_ACCESS(grad_z, col, row, 0) =
+			(-3 * val0 + 4 * val1 - val2) / (2 * step[2]);
+
+	    /* vertical col end */
+	    val0 = RASTER3D_ARRAY_ACCESS(array, col, row, array->sz - 3);
+	    val1 = RASTER3D_ARRAY_ACCESS(array, col, row, array->sz - 2);
+	    val2 = RASTER3D_ARRAY_ACCESS(array, col, row, array->sz - 1);
+	    if (Rast_is_d_null_value(&val2))
+		Rast_set_null_value(
+			&RASTER3D_ARRAY_ACCESS(grad_z, col, row, array->sz - 1),
+			1, DCELL_TYPE);
+	    else if (Rast_is_d_null_value(&val0) || Rast_is_d_null_value(&val1))
+		RASTER3D_ARRAY_ACCESS(grad_z, col, row, array->sz - 1) = 0;
+	    else
+		RASTER3D_ARRAY_ACCESS(grad_z, col, row, array->sz - 1) =
+			(3 * val2 - 4 * val1 + val0) / (2 * step[2]);
+	    /* vertical col */
+	    for (depth = 1; depth < array->sz - 1; depth++) {
+		val0 = RASTER3D_ARRAY_ACCESS(array, col, row, depth - 1);
+		val1 = RASTER3D_ARRAY_ACCESS(array, col, row, depth);
+		val2 = RASTER3D_ARRAY_ACCESS(array, col, row, depth + 1);
+		if (Rast_is_d_null_value(&val1))
+		    Rast_set_null_value(
+			    &RASTER3D_ARRAY_ACCESS(grad_z, col, row, depth),
+			    1, DCELL_TYPE);
+		else if (Rast_is_d_null_value(&val0) || Rast_is_d_null_value(&val2))
+		    RASTER3D_ARRAY_ACCESS(grad_z, col, row, depth) = 0;
+		else
+		    RASTER3D_ARRAY_ACCESS(grad_z, col, row, depth) =
+			    (val2 - val0) / (2 * step[2]);
+	    }
+	}
+    }
+}
diff --git a/lib/rst/interp_float/interp2d.c b/lib/rst/interp_float/interp2d.c
index b7d74a2..7a51e9a 100644
--- a/lib/rst/interp_float/interp2d.c
+++ b/lib/rst/interp_float/interp2d.c
@@ -107,7 +107,7 @@ int IL_grid_calc_2d(struct interp_params *params,
     double xxr, yyr;
 
     if (params->theta) {
-	teta = params->theta / 57.295779;	/* deg to rad */
+	teta = params->theta / M_R2D;	/* deg to rad */
 	rsin = sin(teta);
 	rcos = cos(teta);
     }
diff --git a/lib/rst/interp_float/secpar2d.c b/lib/rst/interp_float/secpar2d.c
index 5b357d6..0d3c939 100644
--- a/lib/rst/interp_float/secpar2d.c
+++ b/lib/rst/interp_float/secpar2d.c
@@ -62,7 +62,7 @@ int IL_secpar_loop_2d(struct interp_params *params,
     int i, got, bmask = 1;
     static int first_time_g = 1;
 
-    ro = 57.295779;
+    ro = M_R2D;
     gradmin = 0.001;
 
 
diff --git a/lib/symbol/Makefile b/lib/symbol/Makefile
index a874b0a..65b29a3 100644
--- a/lib/symbol/Makefile
+++ b/lib/symbol/Makefile
@@ -7,7 +7,7 @@ include $(MODULE_TOPDIR)/include/Make/Lib.make
 
 SYMBOL_SRC := $(wildcard symbol/*/*)
 SYMBOL_DST := $(patsubst symbol/%,$(ETC)/symbol/%,$(SYMBOL_SRC))
-SYMBOL_DIRS := $(patsubst %,$(ETC)/symbol/%, demo basic extra geology n_arrows)
+SYMBOL_DIRS := $(patsubst %,$(ETC)/symbol/%, demo basic extra geology legend n_arrows)
 
 default: lib
 	$(MAKE) $(SYMBOL_DST)
diff --git a/lib/symbol/read.c b/lib/symbol/read.c
index b3b7696..a4d93b8 100644
--- a/lib/symbol/read.c
+++ b/lib/symbol/read.c
@@ -312,10 +312,14 @@ SYMBOL *S_read(const char *sname)
 		sprintf(buf, "Incorrect box definition: '%s'", data);
 		return (err(fp, symb, buf));
 	    }
-	    if (x2 - x > y2 - y)
-		symb->scale = 1 / (x2 - x);
-	    else
-		symb->scale = 1 / (y2 - y);
+	    symb->xscale = 1 / (x2 - x);
+	    symb->yscale = 1 / (y2 - y);
+	    if (x2 - x > y2 - y) {
+		symb->scale = symb->xscale;
+	    }
+	    else {
+		symb->scale = symb->yscale;
+	    }
 	}
 	else if (strcmp(key, "STRING") == 0) {
 	    G_debug(4, "  STRING >");
diff --git a/lib/symbol/symbol/legend/area b/lib/symbol/symbol/legend/area
new file mode 100644
index 0000000..a3572a4
--- /dev/null
+++ b/lib/symbol/symbol/legend/area
@@ -0,0 +1,13 @@
+VERSION 1.0
+BOX -1 -1 1 1
+POLYGON
+  RING
+    LINE
+      -1 -0.75
+      1 -0.75
+      1 0.75
+      -1 0.75
+    END
+  END
+END
+
diff --git a/lib/symbol/symbol/legend/area_curved b/lib/symbol/symbol/legend/area_curved
new file mode 100644
index 0000000..0972e03
--- /dev/null
+++ b/lib/symbol/symbol/legend/area_curved
@@ -0,0 +1,114 @@
+VERSION 1.0
+BOX -1 -1 1 1
+POLYGON
+  RING
+    LINE
+      -00.030 000.615
+      000.064 000.656
+      000.128 000.696
+      000.200 000.768
+      000.260 000.813
+      000.321 000.865
+      000.375 000.903
+      000.431 000.917
+      000.488 000.944
+      000.547 000.944
+      000.605 000.913
+      000.661 000.873
+      000.721 000.835
+      000.773 000.770
+      000.821 000.696
+      000.872 000.648
+      000.909 000.561
+      000.944 000.472
+      000.978 000.366
+      000.992 000.261
+      000.998 000.166
+      001.000 000.094
+      001.000 000.013
+      000.998 -00.071
+      000.976 -00.148
+      000.954 -00.223
+      000.932 -00.297
+      000.903 -00.376
+      000.876 -00.454
+      000.838 -00.527
+      000.804 -00.595
+      000.767 -00.660
+      000.727 -00.726
+      000.681 -00.801
+      000.644 -00.854
+      000.603 -00.903
+      000.551 -00.946
+      000.509 -00.976
+      000.471 -00.996
+      000.429 -01.000
+      000.388 -00.998
+      000.338 -00.996
+      000.289 -00.964
+      000.249 -00.923
+      000.204 -00.875
+      000.163 -00.825
+      000.126 -00.748
+      000.074 -00.670
+      000.038 -00.601
+      -00.008 -00.539
+      -00.051 -00.486
+      -00.095 -00.462
+      -00.144 -00.446
+      -00.194 -00.428
+      -00.242 -00.428
+      -00.286 -00.430
+      -00.337 -00.432
+      -00.377 -00.448
+      -00.420 -00.466
+      -00.461 -00.478
+      -00.509 -00.480
+      -00.552 -00.480
+      -00.595 -00.488
+      -00.642 -00.496
+      -00.687 -00.498
+      -00.731 -00.498
+      -00.779 -00.488
+      -00.822 -00.462
+      -00.864 -00.450
+      -00.925 -00.416
+      -00.953 -00.347
+      -00.984 -00.267
+      -00.995 -00.196
+      -01.000 -00.108
+      -01.000 -00.013
+      -01.000 000.078
+      -00.985 000.182
+      -00.972 000.273
+      -00.958 000.357
+      -00.941 000.431
+      -00.912 000.519
+      -00.892 000.599
+      -00.878 000.670
+      -00.852 000.728
+      -00.834 000.778
+      -00.800 000.839
+      -00.773 000.889
+      -00.739 000.942
+      -00.703 000.976
+      -00.667 000.994
+      -00.624 001.000
+      -00.586 000.992
+      -00.541 000.980
+      -00.495 000.956
+      -00.445 000.942
+      -00.403 000.919
+      -00.365 000.881
+      -00.332 000.835
+      -00.289 000.797
+      -00.239 000.760
+      -00.200 000.720
+      -00.157 000.672
+      -00.115 000.629
+      -00.075 000.617
+      000.023 000.629
+    END
+  END
+END
+
diff --git a/lib/symbol/symbol/legend/line b/lib/symbol/symbol/legend/line
new file mode 100644
index 0000000..64166ce
--- /dev/null
+++ b/lib/symbol/symbol/legend/line
@@ -0,0 +1,8 @@
+VERSION 1.0
+BOX -1 -1 1 1
+STRING
+  LINE
+    -1 0
+    1 0
+  END
+END
diff --git a/lib/symbol/symbol/legend/line_crooked b/lib/symbol/symbol/legend/line_crooked
new file mode 100644
index 0000000..125a3ce
--- /dev/null
+++ b/lib/symbol/symbol/legend/line_crooked
@@ -0,0 +1,13 @@
+VERSION 1.0
+BOX -1 -1 1 1
+STRING
+  LINE
+    -1 -0.33
+    -0.33  0.33
+     0.33 -0.33
+     1  0.33
+	 0.33 -0.33
+	-0.33  0.33
+	-1 -0.33
+  END
+END
diff --git a/lib/vector/Vlib/build.c b/lib/vector/Vlib/build.c
index 8d127d3..426a737 100644
--- a/lib/vector/Vlib/build.c
+++ b/lib/vector/Vlib/build.c
@@ -998,7 +998,7 @@ int Vect_build_partial(struct Map_info *Map, int build)
 int Vect_save_topo(struct Map_info *Map)
 {
     struct Plus_head *plus;
-    char *path;
+    char path[GPATH_MAX];
     struct gvfile fp;
 
     G_debug(1, "Vect_save_topo()");
@@ -1007,9 +1007,8 @@ int Vect_save_topo(struct Map_info *Map)
     plus = &(Map->plus);
     dig_file_init(&fp);
 
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     fp.file = G_fopen_new(path, GV_TOPO_ELEMENT);
-    G_free(path);
     if (fp.file == NULL) {
 	G_warning(_("Unable to create topo file for vector map <%s>"), Map->name);
 	return 0;
@@ -1247,7 +1246,7 @@ int Vect_build_sidx_from_topo(const struct Map_info *Map)
 int Vect_save_sidx(struct Map_info *Map)
 {
     struct Plus_head *plus;
-    char *file_path;
+    char file_path[GPATH_MAX];
 
     G_debug(1, "Vect_save_spatial_index()");
 
@@ -1261,11 +1260,10 @@ int Vect_save_sidx(struct Map_info *Map)
     /* new or update mode ? */
     if (plus->Spidx_new == TRUE) {
 	/*  write out rtrees to sidx file  */
-        file_path = Vect__get_element_path(Map, GV_SIDX_ELEMENT);
+        Vect__get_element_path(file_path, Map, GV_SIDX_ELEMENT);
 	G_debug(1, "Open sidx: %s", file_path);
 	dig_file_init(&(plus->spidx_fp));
 	plus->spidx_fp.file = fopen(file_path, "w+");
-        G_free(file_path);
 	if (plus->spidx_fp.file == NULL) {
 	    G_warning(_("Unable to create spatial index file for vector map <%s>"),
 		      Vect_get_name(Map));
diff --git a/lib/vector/Vlib/build_ogr.c b/lib/vector/Vlib/build_ogr.c
index 82d654a..15746a5 100644
--- a/lib/vector/Vlib/build_ogr.c
+++ b/lib/vector/Vlib/build_ogr.c
@@ -27,6 +27,8 @@
 #include <ogr_api.h>
 #endif
 
+#include "local_proto.h"
+
 /*!
    \brief Build pseudo-topology (simple features) for OGR layer
 
@@ -124,7 +126,7 @@ int Vect_save_fidx(struct Map_info *Map,
     length = 9;
 
     sprintf(elem, "%s/%s", GV_DIRECTORY, Map->name);
-    G_file_name(fname, elem, GV_FIDX_ELEMENT, Map->mapset);
+    Vect__get_element_path(fname, Map, GV_FIDX_ELEMENT);
     G_debug(4, "Open fidx: %s", fname);
     dig_file_init(&fp);
     fp.file = fopen(fname, "w");
diff --git a/lib/vector/Vlib/cindex.c b/lib/vector/Vlib/cindex.c
index 0bf82c0..3415713 100644
--- a/lib/vector/Vlib/cindex.c
+++ b/lib/vector/Vlib/cindex.c
@@ -472,7 +472,7 @@ int Vect_cidx_dump(const struct Map_info *Map, FILE * out)
 int Vect_cidx_save(struct Map_info *Map)
 {
     struct Plus_head *plus;
-    char *path;
+    char path[GPATH_MAX];
     struct gvfile fp;
 
     G_debug(2, "Vect_cidx_save()");
@@ -482,9 +482,8 @@ int Vect_cidx_save(struct Map_info *Map)
     
     dig_file_init(&fp);
     
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     fp.file = G_fopen_new(path, GV_CIDX_ELEMENT);
-    G_free(path);
     if (fp.file == NULL) {
 	G_warning(_("Unable to create category index file for vector map <%s>"),
                   Vect_get_name(Map));
@@ -517,7 +516,7 @@ int Vect_cidx_save(struct Map_info *Map)
 int Vect_cidx_open(struct Map_info *Map, int head_only)
 {
     int ret;
-    char file_path[GPATH_MAX], *path;
+    char file_path[GPATH_MAX], path[GPATH_MAX];
     struct gvfile fp;
     struct Plus_head *Plus;
 
@@ -526,17 +525,15 @@ int Vect_cidx_open(struct Map_info *Map, int head_only)
 
     Plus = &(Map->plus);
 
-    path = Vect__get_path(Map);
-    G_file_name(file_path, path, GV_CIDX_ELEMENT, Map->mapset);
-
+    Vect__get_path(path, Map);
+    Vect__get_element_path(file_path, Map, GV_CIDX_ELEMENT);
+    
     if (access(file_path, F_OK) != 0) {	/* does not exist */
-        G_free(path);
 	return 1;
     }
 
     dig_file_init(&fp);
     fp.file = G_fopen_old(path, GV_CIDX_ELEMENT, Map->mapset);
-    G_free(path);
     
     if (fp.file == NULL) {	/* category index file is not available */
 	G_warning(_("Unable to open category index file for vector map <%s>"),
diff --git a/lib/vector/Vlib/close.c b/lib/vector/Vlib/close.c
index cd9fc81..6353627 100644
--- a/lib/vector/Vlib/close.c
+++ b/lib/vector/Vlib/close.c
@@ -5,7 +5,7 @@
 
    Higher level functions for reading/writing/manipulating vectors.
 
-   (C) 2001-2009, 2011-2012 by the GRASS Development Team
+   (C) 2001-2015 by the GRASS Development Team
 
    This program is free software under the GNU General Public License
    (>=v2). Read the file COPYING that comes with GRASS for details.
@@ -323,14 +323,12 @@ void Vect__free_offset(struct Format_info_offset *offset)
 
 void unlink_file(const struct Map_info *Map, const char *name)
 {
-    char *path;
+    char path[GPATH_MAX];
 
     /* delete old support files if available */
-    path = Vect__get_element_path(Map, name);
+    Vect__get_element_path(path, Map, name);
     if (access(path, F_OK) == 0) { /* file exists? */
         G_debug(2, "\t%s: unlink", path);
         unlink(path);
     }
-
-    G_free(path);
 }
diff --git a/lib/vector/Vlib/close_nat.c b/lib/vector/Vlib/close_nat.c
index ec98a84..2a37c8b 100644
--- a/lib/vector/Vlib/close_nat.c
+++ b/lib/vector/Vlib/close_nat.c
@@ -5,7 +5,7 @@
 
    Higher level functions for reading/writing/manipulating vectors.
 
-   (C) 2001-2009, 2013 by the GRASS Development Team
+   (C) 2001-2015 by the GRASS Development Team
 
    This program is free software under the GNU General Public License
    (>=v2).  Read the file COPYING that comes with GRASS for details.
@@ -15,8 +15,11 @@
 */
 
 #include <stdlib.h>
+#include <unistd.h>
+#include <errno.h>
 
 #include <grass/vector.h>
+#include <grass/glocale.h>
 
 #include "local_proto.h"
 
@@ -52,12 +55,121 @@ int V1_close_nat(struct Map_info *Map)
 
     /* delete temporary map ? */
     if (Map->temporary) {
-        if (getenv("GRASS_VECTOR_TEMPORARY") == NULL) {
+        int delete;
+        char *env = getenv("GRASS_VECTOR_TEMPORARY");
+
+        delete = TRUE;
+        if (Map->temporary == TEMPORARY_MAP_ENV && env) {
+            if (G_strcasecmp(env, "move") == 0) {
+                /* copy temporary vector map to the current mapset */
+                char path_tmp[GPATH_MAX], path_map[GPATH_MAX];
+                    
+                G_debug(1, "V1_close_nat(): temporary map <%s> TO BE MOVED TO"
+                        " CURRENT MAPSET",
+                        Map->name);
+                Vect__get_element_path(path_tmp, Map, NULL);
+
+                G_file_name(path_map, GV_DIRECTORY, NULL, Map->mapset);
+                if (access(path_map, 0) != 0 && G_mkdir(path_map) != 0)
+                    G_fatal_error(_("Unable to create '%s': %s"),
+                                  path_map, strerror(errno));
+
+                G_file_name(path_map, GV_DIRECTORY, Map->name, Map->mapset);
+
+                G_debug(1, "V1_close_nat(): %s -> %s", path_tmp, path_map);
+                if (0 != G_recursive_copy(path_tmp, path_map))
+                    G_fatal_error(_("Unable to copy '%s': %s"), path_tmp, strerror(errno));
+
+#ifdef TEMPORARY_MAP_DB
+                int i, ndblinks;
+                int tmp;
+                
+                struct field_info *fi;
+                dbConnection connection;
+                struct dblinks *dblinks;
+
+                G_debug(1, "V1_close_nat(): copying attributes");
+                /* copy also attributes */
+                dblinks = Vect_new_dblinks_struct();
+                db_get_connection(&connection);
+                ndblinks = Vect_get_num_dblinks(Map);
+                for (i = 0; i < ndblinks; i++) {
+                    fi = Vect_get_dblink(Map, i);
+                    if (DB_OK != db_copy_table(fi->driver, fi->database, fi->table,
+                                               connection.driverName,
+                                               connection.databaseName,
+                                               fi->table)) {
+                        G_warning(_("Unable to copy table <%s>"), fi->table);
+                        continue;
+                    }
+
+                    Vect_add_dblink(dblinks, fi->number, fi->name,
+                                    fi->table, fi->key, connection.databaseName,
+                                    connection.driverName);
+                    G_free(fi);
+                }
+                G_free(Map->dblnk);
+                Map->dblnk = dblinks;
+                tmp = Map->temporary;
+                Map->temporary = TEMPORARY_MAP_DISABLED;
+                Vect_write_dblinks(Map);
+                Map->temporary = tmp;
+#endif
+            }
+            else if (G_strcasecmp(env, "delete") == 0) {
+                /* delete temporary vector map */
+                G_debug(1, "V1_close_nat(): temporary map <%s> TO BE DELETED", Map->name);
+            }
+            else {
+                /* do not delete temporary vector map */
+                G_debug(1, "V1_close_nat(): temporary map <%s> IS NOT DELETED", 
+                        Map->name);
+                delete = FALSE;
+            }
+        }
+        else if (Map->temporary == TEMPORARY_MAP) {
             G_debug(1, "V1_close_nat(): temporary map <%s> TO BE DELETED", Map->name);
-            Vect__delete(Map->name, TRUE);
+            delete = TRUE;
         }
-        else {
-            G_debug(1, "V1_close_nat(): temporary map <%s> IS NOT DELETED", Map->name);
+        
+        if (delete) {
+            char path_tmp[GPATH_MAX];
+
+            /* delete vector directory */
+            Vect__get_element_path(path_tmp, Map, NULL);
+            G_recursive_remove(path_tmp);
+
+#ifndef TEMPORARY_MAP_DB
+            if (G_strcasecmp(env, "move") != 0) {
+                int i, ndblinks;
+
+                dbDriver *driver;
+                dbString table_name;
+                
+                struct field_info *fi;
+                
+                db_init_string(&table_name);
+                
+                /* drop also attribute table */
+                ndblinks = Vect_get_num_dblinks(Map);
+                for (i = 0; i < ndblinks; i++) {
+                    fi = Vect_get_dblink(Map, i);
+                    
+                    driver = db_start_driver_open_database(fi->driver, fi->database);
+                    if (driver == NULL) {
+                        G_warning(_("Unable to open database <%s> by driver <%s>"),
+                                  fi->database, fi->driver);
+                        continue;
+                    }
+                    
+                    db_set_string(&table_name, fi->table);
+                    if (DB_OK != db_drop_table(driver, &table_name)) {
+                        G_warning(_("Unable to drop table <%s>"), fi->table);
+                        continue;
+                    }
+                }
+            }
+#endif
         }
     }
 
diff --git a/lib/vector/Vlib/close_pg.c b/lib/vector/Vlib/close_pg.c
index 936ca12..6e49d23 100644
--- a/lib/vector/Vlib/close_pg.c
+++ b/lib/vector/Vlib/close_pg.c
@@ -127,8 +127,7 @@ int V2_close_pg(struct Map_info *Map)
         
         /* delete old support files if available */
         sprintf(buf, "%s/%s", GV_DIRECTORY, Map->name);
-        
-        G_file_name(file_path, buf, GV_TOPO_ELEMENT, G_mapset());
+        Vect__get_element_path(file_path, Map, GV_TOPO_ELEMENT);
         if (access(file_path, F_OK) == 0) /* file exists? */
             unlink(file_path);
         
diff --git a/lib/vector/Vlib/copy.c b/lib/vector/Vlib/copy.c
index f8159c7..93ccd30 100644
--- a/lib/vector/Vlib/copy.c
+++ b/lib/vector/Vlib/copy.c
@@ -477,7 +477,7 @@ int Vect__copy_areas(const struct Map_info *In, int field, struct Map_info *Out)
     if (nareas > 0)
         G_message(_("Exporting areas..."));
     for (area = 1; area <= nareas; area++) {
-        G_debug(3, "area = %d", area);
+        G_debug(2, "area = %d", area);
         G_percent(area, nareas, 3);
 
         /* get category */
diff --git a/lib/vector/Vlib/field.c b/lib/vector/Vlib/field.c
index 33820a5..7256f31 100644
--- a/lib/vector/Vlib/field.c
+++ b/lib/vector/Vlib/field.c
@@ -385,9 +385,25 @@ struct field_info *Vect_default_field_info(struct Map_info *Map,
 	fi->name = G_store(buf);
 
     fi->key = G_store(GV_KEY_COLUMN);	/* Should be: id/fid/gfid/... ? */
+#ifdef TEMPORARY_MAP_DB
+    if (Map->temporary) {
+        Vect__get_element_path(buf, Map, NULL);
+        if (strcmp(DB_DEFAULT_DRIVER, "sqlite") == 0)
+            strcat(buf, "/sqlite.db");
+        else
+            strcat(buf, "/db.dbf");
+        fi->database = G_store(buf);
+        fi->driver = DB_DEFAULT_DRIVER;
+    }
+    else {
+        fi->database = G_store(connection.databaseName);
+        fi->driver = G_store(connection.driverName);
+    }
+#else
     fi->database = G_store(connection.databaseName);
     fi->driver = G_store(connection.driverName);
-
+#endif
+    
     return fi;
 }
 
@@ -560,7 +576,7 @@ static int read_dblinks_nat(struct Map_info *Map)
     char file[1024], buf[2001];
     char tab[1024], col[1024], db[1024], drv[1024], fldstr[1024], *fldname;
     int fld;
-    char *c, *path;
+    char *c, path[GPATH_MAX];
     int row, rule;
     struct dblinks *dbl;
     char **tokens;
@@ -569,9 +585,8 @@ static int read_dblinks_nat(struct Map_info *Map)
     dbl = Map->dblnk;
 
     /* Read dblink for native format */
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     fd = G_fopen_old(path, GV_DBLN_ELEMENT, Map->mapset);
-    G_free(path);
     if (fd == NULL) {		/* This may be correct, no tables defined */
 	G_debug(1, "Cannot open vector database definition file");
 	return -1;
@@ -892,7 +907,7 @@ int Vect_write_dblinks(struct Map_info *Map)
 {
     int i;
     FILE *fd;
-    char *path, buf[1024];
+    char path[GPATH_MAX], buf[1024];
     struct dblinks *dbl;
 
     if (Map->format != GV_FORMAT_NATIVE)
@@ -904,9 +919,8 @@ int Vect_write_dblinks(struct Map_info *Map)
 
     dbl = Map->dblnk;
 
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     fd = G_fopen_new(path, GV_DBLN_ELEMENT);
-    G_free(path);
     if (fd == NULL) {		/* This may be correct, no tables defined */
 	G_warning(_("Unable to create database definition file for vector map <%s>"),
 		  Vect_get_name(Map));
diff --git a/lib/vector/Vlib/geos.c b/lib/vector/Vlib/geos.c
index 478ea1e..fab62aa 100644
--- a/lib/vector/Vlib/geos.c
+++ b/lib/vector/Vlib/geos.c
@@ -1,15 +1,15 @@
 /*!
   \file lib/vector/Vlib/geos.c
-  
+
   \brief Vector library - GEOS support
-  
+
   Higher level functions for reading/writing/manipulating vectors.
-  
+
   (C) 2009 by the GRASS Development Team
-  
+
   This program is free software under the GNU General Public License
   (>=v2).  Read the file COPYING that comes with GRASS for details.
-  
+
   \author Martin Landa <landa.martin gmail.com>
  */
 
@@ -31,13 +31,13 @@ static GEOSCoordSequence *read_polygon_points(struct Map_info *, int, int*);
     - GV_POINT     -> POINT
     - GV_LINE      -> LINESTRING
     - GV_BOUNDARY  -> LINESTRING / LINEARRING
-   
+
    You should free allocated memory by GEOSGeom_destroy().
 
    \param Map pointer to Map_info structure
    \param line feature id
    \param[out] type feature type or NULL
-   
+
    \return pointer to GEOSGeometry instance
    \return empty GEOSGeometry for unsupported feature type
    \return NULL on error
@@ -45,25 +45,25 @@ static GEOSCoordSequence *read_polygon_points(struct Map_info *, int, int*);
 GEOSGeometry *Vect_read_line_geos(struct Map_info *Map, int line, int *type)
 {
     struct P_line *Line;
-    
+
     G_debug(3, "Vect_read_line_geos(): line = %d", line);
-    
+
     if (!VECT_OPEN(Map))
-	G_fatal_error("Vect_read_line_geos(): %s", _("vector map is not opened"));
-    
+        G_fatal_error("Vect_read_line_geos(): %s", _("vector map is not opened"));
+
     if (line < 1 || line > Map->plus.n_lines)
-	G_fatal_error(_("Vect_read_line_geos(): feature id %d is not reasonable "
-			"(max features in vector map <%s>: %d)"),
-		      line, Vect_get_full_name(Map), Map->plus.n_lines);
-    
+        G_fatal_error(_("Vect_read_line_geos(): feature id %d is not reasonable "
+                        "(max features in vector map <%s>: %d)"),
+                      line, Vect_get_full_name(Map), Map->plus.n_lines);
+
     if (Map->format != GV_FORMAT_NATIVE)
-	G_fatal_error("Vect_read_line_geos(): %s", _("only native format supported"));
-    
+        G_fatal_error("Vect_read_line_geos(): %s", _("only native format supported"));
+
     Line = Map->plus.Line[line];
     if (Line == NULL)
-	G_fatal_error("Vect_read_line_geos(): %s %d",
-		      _("Attempt to read dead line"), line);
-    
+        G_fatal_error("Vect_read_line_geos(): %s %d",
+                      _("Attempt to read dead line"), line);
+
     return Vect__read_line_geos(Map, Line->offset, type);
 }
 
@@ -73,7 +73,7 @@ GEOSGeometry *Vect_read_line_geos(struct Map_info *Map, int line, int *type)
    You should free allocated memory by GEOSGeom_destroy().
 
    \param Map pointer to Map_info structure
-   \param area area id 
+   \param area area id
 
    \return pointer to GEOSGeometry instance
    \return NULL on error
@@ -82,29 +82,29 @@ GEOSGeometry *Vect_read_area_geos(struct Map_info * Map, int area)
 {
     int i, nholes, isle;
     GEOSGeometry *boundary, *poly, **holes;
-    
+
     G_debug(3, "Vect_read_area_geos(): area = %d", area);
 
     boundary = GEOSGeom_createLinearRing(Vect_get_area_points_geos(Map, area));
     if (!boundary) {
-	G_fatal_error(_("Vect_read_area_geos(): unable to read area id %d"),
-		      area);
+        G_fatal_error(_("Vect_read_area_geos(): unable to read area id %d"),
+                      area);
     }
 
     nholes = Vect_get_area_num_isles(Map, area);
     holes = (GEOSGeometry **) G_malloc(nholes * sizeof(GEOSGeometry *));
     for (i = 0; i < nholes; i++) {
-	isle = Vect_get_area_isle(Map, area, i);
-	if (isle < 1) {
-	    nholes--;
-	    continue;
-	}
-	holes[i] = GEOSGeom_createLinearRing(Vect_get_isle_points_geos(Map, isle));
-	if (!(holes[i]))
-	    G_fatal_error(_("Vect_read_area_geos(): unable to read isle id %d of area id %d"),
-			  isle, area);
+        isle = Vect_get_area_isle(Map, area, i);
+        if (isle < 1) {
+            nholes--;
+            continue;
+        }
+        holes[i] = GEOSGeom_createLinearRing(Vect_get_isle_points_geos(Map, isle));
+        if (!(holes[i]))
+            G_fatal_error(_("Vect_read_area_geos(): unable to read isle id %d of area id %d"),
+                          isle, area);
     }
-    
+
     poly = GEOSGeom_createPolygon(boundary, holes, nholes);
     G_free(holes);
 
@@ -116,73 +116,72 @@ GEOSGeometry *Vect_read_area_geos(struct Map_info * Map, int area)
 
    Supported types:
    - GV_POINT    -> POINT
+   - GV_CENTROID -> POINT
    - GV_LINE     -> LINESTRING
    - GV_BOUNDARY -> LINEARRING
 
    You should free allocated memory by GEOSGeom_destroy().
 
-   \param Map pointer to Map_info structure
    \param points pointer to line_pnts structure
    \param type feature type (see supported types)
+   \param with_z Set to 1 if the feature is 3d, 0 otherwise
 
    \return pointer to GEOSGeometry instance
    \return NULL on error
  */
-GEOSGeometry *Vect_line_to_geos(struct Map_info *Map,
-				const struct line_pnts *points, int type)
+GEOSGeometry *Vect_line_to_geos(const struct line_pnts *points,
+                                int type, int with_z)
 {
-    int i, with_z;
+    int i;
     GEOSGeometry *geom;
     GEOSCoordSequence *pseq;
 
     G_debug(3, "Vect_line_to_geos(): type = %d", type);
-    
-    with_z = Vect_is_3d(Map);
-    
+
     /* read only points / lines / boundaries */
-    if (!(type & (GV_POINT | GV_LINES)))
-	return NULL;
+    if (!(type & (GV_POINT | GV_CENTROID | GV_LINES)))
+        return NULL;
 
-    if (type == GV_POINT) { 
-	if (points->n_points != 1)
-	    /* point is not valid */
-	    return NULL;
+    if (type == GV_POINT || type == GV_CENTROID) {
+        if (points->n_points != 1)
+            /* point is not valid */
+            return NULL;
     }
-    else {			
-	if (points->n_points < 2)
-	    /* line/boundary is not valid */
-	    return NULL;
+    else {
+        if (points->n_points < 2)
+            /* line/boundary is not valid */
+            return NULL;
     }
-    
+
     pseq = GEOSCoordSeq_create(points->n_points, with_z ? 3 : 2);
-    
+
     for (i = 0; i < points->n_points; i++) {
-	GEOSCoordSeq_setX(pseq, i, points->x[i]);
-	GEOSCoordSeq_setY(pseq, i, points->y[i]);
-	if (with_z)
-	    GEOSCoordSeq_setZ(pseq, i, points->z[i]);
+        GEOSCoordSeq_setX(pseq, i, points->x[i]);
+        GEOSCoordSeq_setY(pseq, i, points->y[i]);
+        if (with_z)
+            GEOSCoordSeq_setZ(pseq, i, points->z[i]);
     }
 
-    if (type == GV_POINT)
-	geom = GEOSGeom_createPoint(pseq);
+    if (type == GV_POINT || type == GV_CENTROID)
+        geom = GEOSGeom_createPoint(pseq);
     else if (type == GV_LINE)
-	geom = GEOSGeom_createLineString(pseq);
+        geom = GEOSGeom_createLineString(pseq);
     else { /* boundary */
-	geom = GEOSGeom_createLineString(pseq);
-	if (GEOSisRing(geom)) {
-	    /* GEOSGeom_destroy(geom); */
-	    geom = GEOSGeom_createLinearRing(pseq);
-	}
+        geom = GEOSGeom_createLineString(pseq);
+        if (GEOSisRing(geom)) {
+            /*GEOSGeom_destroy(geom);*/
+            geom = GEOSGeom_createLinearRing(pseq);
+        }
     }
-    
+
     /* GEOSCoordSeq_destroy(pseq); */
 
     return geom;
 }
 
-/*!  
+/*!
   \brief Read line from coor file
-  
+
   You should free allocated memory by GEOSGeom_destroy().
 
   \param Map pointer to Map_info
@@ -197,50 +196,50 @@ GEOSGeometry *Vect_line_to_geos(struct Map_info *Map,
 GEOSGeometry *Vect__read_line_geos(struct Map_info *Map, long offset, int *type)
 {
     int ftype;
-    
+
     GEOSGeometry *geom;
     GEOSCoordSequence *pseq;
-    
+
     pseq = V1_read_line_geos(Map, offset, &ftype);
     if (!pseq)
-	G_fatal_error(_("Unable to read line offset %ld"), offset);
-    
+        G_fatal_error(_("Unable to read line offset %ld"), offset);
+
     if (ftype & GV_POINT) {
-	G_debug(3, "    geos_type = point");
-	geom = GEOSGeom_createPoint(pseq);
+        G_debug(3, "    geos_type = point");
+        geom = GEOSGeom_createPoint(pseq);
     }
     else if (ftype & GV_LINE) {
-	G_debug(3, "    geos_type = linestring");
-	geom = GEOSGeom_createLineString(pseq);
+        G_debug(3, "    geos_type = linestring");
+        geom = GEOSGeom_createLineString(pseq);
     }
     else { /* boundary */
-	geom = GEOSGeom_createLineString(pseq);
-	if (GEOSisRing(geom)) {
-	    /* GEOSGeom_destroy(geom); */
-	    geom = GEOSGeom_createLinearRing(pseq);
-	    G_debug(3, "    geos_type = linearring");
-	}
-	else {
-	    G_debug(3, "    geos_type = linestring");
-	}
+        geom = GEOSGeom_createLineString(pseq);
+        if (GEOSisRing(geom)) {
+            /* GEOSGeom_destroy(geom); */
+            geom = GEOSGeom_createLinearRing(pseq);
+            G_debug(3, "    geos_type = linearring");
+        }
+        else {
+            G_debug(3, "    geos_type = linestring");
+        }
     }
-        
+
     /* GEOSCoordSeq_destroy(pseq); */
-    
+
     if (type)
       *type = ftype;
-    
+
     return geom;
 }
 
-/*!  
+/*!
   \brief Read line from coor file into GEOSCoordSequence
-  
+
   You should free allocated memory by GEOSCoordSeq_destroy().
-  
+
   \param Map pointer to Map_info
   \param line line id
-  
+
   \return pointer to GEOSCoordSequence
   \return empty GEOSCoordSequence for dead line or unsuppored feature type
   \return NULL end of file
@@ -249,31 +248,31 @@ GEOSCoordSequence *V2_read_line_geos(struct Map_info *Map, int line)
 {
     int ftype;
     struct P_line *Line;
-    
+
     G_debug(3, "V2_read_line_geos(): line = %d", line);
-    
+
     Line = Map->plus.Line[line];
 
     if (Line == NULL)
-	G_fatal_error("V2_read_line_geos(): %s %d",
-		      _("Attempt to read dead line"), line);
-    
+        G_fatal_error("V2_read_line_geos(): %s %d",
+                      _("Attempt to read dead line"), line);
+
     return V1_read_line_geos(Map, Line->offset, &ftype);
 }
 
 
-/*!  
+/*!
   \brief Read feature from coor file into GEOSCoordSequence
 
   Note: Function reads only points, lines and boundaries, other
   feature types are ignored (empty coord array is returned)!
-  
+
   You should free allocated memory by GEOSCoordSeq_destroy().
-  
+
   \param Map pointer to Map_info
   \param offset line offset
   \param[out] type feature type
-  
+
   \return pointer to GEOSCoordSequence
   \return empty GEOSCoordSequence for dead line or unsuppored feature type
   \return NULL end of file
@@ -285,103 +284,103 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, int *typ
     char rhead, nc;
     long size;
     double *x, *y, *z;
-    
+
     GEOSCoordSequence *pseq;
-    
+
     G_debug(3, "V1_read_line_geos(): offset = %ld", offset);
-    
+
     Map->head.last_offset = offset;
-    
+
     /* reads must set in_head, but writes use default */
     dig_set_cur_port(&(Map->head.port));
-    
+
     dig_fseek(&(Map->dig_fp), offset, 0);
-    
+
     if (0 >= dig__fread_port_C(&rhead, 1, &(Map->dig_fp)))
-	return NULL;            /* end of file */
-    
-    if (!(rhead & 0x01))	/* dead line */
-	return GEOSCoordSeq_create(0, (Map->head.with_z) ? 3 : 2);
-
-    if (rhead & 0x02)		/* categories exists */
-	do_cats = 1;		/* do not return here let file offset moves forward to next */
-    else			/* line */
-	do_cats = 0;
-    
+        return NULL;            /* end of file */
+
+    if (!(rhead & 0x01))        /* dead line */
+        return GEOSCoordSeq_create(0, (Map->head.with_z) ? 3 : 2);
+
+    if (rhead & 0x02)           /* categories exists */
+        do_cats = 1;            /* do not return here let file offset moves forward to next */
+    else                        /* line */
+        do_cats = 0;
+
     rhead >>= 2;
     *type = dig_type_from_store((int) rhead);
-    
+
     /* read only points / lines / boundaries */
     if (!(*type & (GV_POINT | GV_LINES)))
-	return GEOSCoordSeq_create(0, (Map->head.with_z) ? 3 : 2);
- 
+        return GEOSCoordSeq_create(0, (Map->head.with_z) ? 3 : 2);
+
     /* skip categories */
     if (do_cats) {
-	if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
-	    if (0 >= dig__fread_port_I(&n_cats, 1, &(Map->dig_fp)))
-		return NULL;
-	}
-	else {			                /* coor format 5.0 */
-	    if (0 >= dig__fread_port_C(&nc, 1, &(Map->dig_fp)))
-		return NULL;
-	    n_cats = (int) nc;
-	}
-	G_debug(3, "    n_cats = %d", n_cats);
-
-	if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
-	    size = (2 * PORT_INT) * n_cats;
-	}
-	else {		                /* coor format 5.0 */
-	    size = (PORT_SHORT + PORT_INT) * n_cats;
-	}
-	dig_fseek(&(Map->dig_fp), size, SEEK_CUR);
+        if (Map->head.coor_version.minor == 1) {        /* coor format 5.1 */
+            if (0 >= dig__fread_port_I(&n_cats, 1, &(Map->dig_fp)))
+                return NULL;
+        }
+        else {                                  /* coor format 5.0 */
+            if (0 >= dig__fread_port_C(&nc, 1, &(Map->dig_fp)))
+                return NULL;
+            n_cats = (int) nc;
+        }
+        G_debug(3, "    n_cats = %d", n_cats);
+
+        if (Map->head.coor_version.minor == 1) {        /* coor format 5.1 */
+            size = (2 * PORT_INT) * n_cats;
+        }
+        else {                          /* coor format 5.0 */
+            size = (PORT_SHORT + PORT_INT) * n_cats;
+        }
+        dig_fseek(&(Map->dig_fp), size, SEEK_CUR);
     }
 
     if (*type & GV_POINTS) {
-	    n_points = 1;
+            n_points = 1;
     }
     else {
-	if (0 >= dig__fread_port_I(&n_points, 1, &(Map->dig_fp)))
-	    return NULL;
+        if (0 >= dig__fread_port_I(&n_points, 1, &(Map->dig_fp)))
+            return NULL;
     }
-    
+
     G_debug(3, "    n_points = %d dim = %d", n_points, (Map->head.with_z) ? 3 : 2);
-    
+
     pseq = GEOSCoordSeq_create(n_points, (Map->head.with_z) ? 3 : 2);
-    
+
     x = (double *) G_malloc(n_points * sizeof(double));
     y = (double *) G_malloc(n_points * sizeof(double));
     if (Map->head.with_z)
-	z = (double *) G_malloc(n_points * sizeof(double));
+        z = (double *) G_malloc(n_points * sizeof(double));
     else
-	z = NULL;
-    
+        z = NULL;
+
     if (0 >= dig__fread_port_D(x, n_points, &(Map->dig_fp)))
-	return NULL; /* end of file */
+        return NULL; /* end of file */
 
     if (0 >= dig__fread_port_D(y, n_points, &(Map->dig_fp)))
-	return NULL; /* end of file */
+        return NULL; /* end of file */
 
     if (Map->head.with_z) {
-	if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp)))
-	    return NULL; /* end of file */
+        if (0 >= dig__fread_port_D(z, n_points, &(Map->dig_fp)))
+            return NULL; /* end of file */
 
     }
 
     for (i = 0; i < n_points; i++) {
-	GEOSCoordSeq_setX(pseq, i, x[i]);
-	GEOSCoordSeq_setY(pseq, i, y[i]);
-	if (Map->head.with_z)
-	    GEOSCoordSeq_setZ(pseq, i, z[i]);
+        GEOSCoordSeq_setX(pseq, i, x[i]);
+        GEOSCoordSeq_setY(pseq, i, y[i]);
+        if (Map->head.with_z)
+            GEOSCoordSeq_setZ(pseq, i, z[i]);
     }
-    
+
     G_debug(3, "    off = %ld", (long) dig_ftell(&(Map->dig_fp)));
-    
+
     G_free((void *) x);
     G_free((void *) y);
     if (z)
-	G_free((void *) z);
-    
+        G_free((void *) z);
+
     return pseq;
 }
 
@@ -403,17 +402,17 @@ GEOSCoordSequence *Vect_get_area_points_geos(struct Map_info *Map, int area)
 {
     struct Plus_head *Plus;
     struct P_area *Area;
-    
+
     G_debug(3, "Vect_get_area_points_geos(): area = %d", area);
-    
+
     Plus = &(Map->plus);
     Area = Plus->Area[area];
 
-    if (Area == NULL) {		/* dead area */
-	G_warning(_("Attempt to read points of nonexistent area id %d"), area);
-	return NULL;		/* error , because we should not read dead areas */
+    if (Area == NULL) {         /* dead area */
+        G_warning(_("Attempt to read points of nonexistent area id %d"), area);
+        return NULL;            /* error , because we should not read dead areas */
     }
-    
+
     return read_polygon_points(Map, Area->n_lines, Area->lines);
 }
 
@@ -421,7 +420,7 @@ GEOSCoordSequence *Vect_get_area_points_geos(struct Map_info *Map, int area)
    \brief Returns the polygon (isle) array of points (inner ring)
 
    You should free allocated memory by GEOSCoordSeq_destroy().
-   
+
    See also Vect_get_isle_points().
 
    \param Map pointer to Map_info
@@ -434,7 +433,7 @@ GEOSCoordSequence *Vect_get_isle_points_geos(struct Map_info *Map, int isle)
 {
     struct Plus_head *Plus;
     struct P_isle *Isle;
-    
+
     G_debug(3, "Vect_get_isle_points_geos(): isle = %d", isle);
 
     Plus = &(Map->plus);
@@ -450,7 +449,7 @@ GEOSCoordSequence *read_polygon_points(struct Map_info *Map, int n_lines, int *l
     unsigned int n_points, n_points_shell;
     double x, y, z;
     int *dir;
-    
+
     GEOSCoordSequence **pseq, *pseq_shell;
 
     G_debug(3, "  n_lines = %d", n_lines);
@@ -459,64 +458,64 @@ GEOSCoordSequence *read_polygon_points(struct Map_info *Map, int n_lines, int *l
 
     n_points_shell = 0;
     for (i = 0; i < n_lines; i++) {
-	line = lines[i];
-	aline = abs(line);
-	G_debug(3, "  append line(%d) = %d", i, line);
-
-	if (line > 0)
-	    dir[i] = GV_FORWARD;
-	else
-	    dir[i] = GV_BACKWARD;
-	
-	pseq[i] = V2_read_line_geos(Map, aline);
-	if (!(pseq[i])) {
-	    G_fatal_error(_("Unable to read feature id %d"), aline);
-	}
-	
-	GEOSCoordSeq_getSize(pseq[i], &n_points);
-	G_debug(3, "  line n_points = %d", n_points);
-	n_points_shell += n_points;
+        line = lines[i];
+        aline = abs(line);
+        G_debug(3, "  append line(%d) = %d", i, line);
+
+        if (line > 0)
+            dir[i] = GV_FORWARD;
+        else
+            dir[i] = GV_BACKWARD;
+
+        pseq[i] = V2_read_line_geos(Map, aline);
+        if (!(pseq[i])) {
+            G_fatal_error(_("Unable to read feature id %d"), aline);
+        }
+
+        GEOSCoordSeq_getSize(pseq[i], &n_points);
+        G_debug(3, "  line n_points = %d", n_points);
+        n_points_shell += n_points;
     }
 
     /* create shell (outer ring) */
     pseq_shell = GEOSCoordSeq_create(n_points_shell, Map->head.with_z ? 3 : 2);
     k = 0;
     for (i = 0; i < n_lines; i++) {
-	GEOSCoordSeq_getSize(pseq[i], &n_points);
-	if (dir[i] == GV_FORWARD) {
-	    for (j = 0; j < (int) n_points; j++, k++) {
-		GEOSCoordSeq_getX(pseq[i], j, &x);
-		GEOSCoordSeq_setX(pseq_shell, k, x);
-		
-		GEOSCoordSeq_getY(pseq[i], j, &y);
-		GEOSCoordSeq_setY(pseq_shell, k, y);
-		
-		if (Map->head.with_z) {
-		    GEOSCoordSeq_getY(pseq[i], j, &z);
-		    GEOSCoordSeq_setZ(pseq_shell, k, z);
-		}
-	    }
-	}
-	else { /* GV_BACKWARD */
-	    for (j = (int) n_points - 1; j > -1; j--, k++) {
-		GEOSCoordSeq_getX(pseq[i], j, &x);
-		GEOSCoordSeq_setX(pseq_shell, k, x);
-		
-		GEOSCoordSeq_getY(pseq[i], j, &y);
-		GEOSCoordSeq_setY(pseq_shell, k, y);
-		
-		if (Map->head.with_z) {
-		    GEOSCoordSeq_getY(pseq[i], j, &z);
-		    GEOSCoordSeq_setZ(pseq_shell, k, z);
-		}
-	    }
-	}
-	GEOSCoordSeq_destroy(pseq[i]);
+        GEOSCoordSeq_getSize(pseq[i], &n_points);
+        if (dir[i] == GV_FORWARD) {
+            for (j = 0; j < (int) n_points; j++, k++) {
+                GEOSCoordSeq_getX(pseq[i], j, &x);
+                GEOSCoordSeq_setX(pseq_shell, k, x);
+
+                GEOSCoordSeq_getY(pseq[i], j, &y);
+                GEOSCoordSeq_setY(pseq_shell, k, y);
+
+                if (Map->head.with_z) {
+                    GEOSCoordSeq_getY(pseq[i], j, &z);
+                    GEOSCoordSeq_setZ(pseq_shell, k, z);
+                }
+            }
+        }
+        else { /* GV_BACKWARD */
+            for (j = (int) n_points - 1; j > -1; j--, k++) {
+                GEOSCoordSeq_getX(pseq[i], j, &x);
+                GEOSCoordSeq_setX(pseq_shell, k, x);
+
+                GEOSCoordSeq_getY(pseq[i], j, &y);
+                GEOSCoordSeq_setY(pseq_shell, k, y);
+
+                if (Map->head.with_z) {
+                    GEOSCoordSeq_getY(pseq[i], j, &z);
+                    GEOSCoordSeq_setZ(pseq_shell, k, z);
+                }
+            }
+        }
+        GEOSCoordSeq_destroy(pseq[i]);
     }
-    
+
     G_free((void *) pseq);
     G_free((void *) dir);
-    
+
     return pseq_shell;
 }
 #endif /* HAVE_GEOS */
diff --git a/lib/vector/Vlib/geos_to_wktb.c b/lib/vector/Vlib/geos_to_wktb.c
new file mode 100644
index 0000000..0029e00
--- /dev/null
+++ b/lib/vector/Vlib/geos_to_wktb.c
@@ -0,0 +1,278 @@
+/*!
+  \file lib/vector/Vlib/geos_to_wktb.c
+
+  \brief Vector library - GEOS powered WKT and WKB export
+
+  Higher level functions for reading/writing/manipulating vectors.
+
+  (C) 2015 by the GRASS Development Team
+
+  This program is free software under the GNU General Public License
+  (>=v2).  Read the file COPYING that comes with GRASS for details.
+
+  \author Soeren Gebbert <soerengebbert googlemail.com>
+ */
+
+#include <stdlib.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+
+#ifdef HAVE_GEOS
+
+/*!
+   \brief Read vector area and return it as Well Known Binary (WKB)
+          unsigned char array
+
+   \param Map pointer to Map_info structure
+   \param area area id
+   \param size The size of the returned unsigned char array
+
+   \return pointer to unsigned char array
+   \return NULL on error
+ */
+unsigned char *Vect_read_area_to_wkb(struct Map_info * Map, int area, size_t *size)
+{
+    static int init = 0;
+    /* The writer is static for performance reasons */
+    static GEOSWKBWriter *writer = NULL;
+    unsigned char *wkb = NULL;
+
+    if(init == 0) {
+        initGEOS(NULL, NULL);
+        writer = GEOSWKBWriter_create();
+        init += 1;
+    }
+
+    GEOSWKBWriter_setOutputDimension(writer, 2);
+
+    GEOSGeometry *geom = Vect_read_area_geos(Map, area);
+
+    if(!geom) {
+        return(NULL);
+    }
+
+    wkb = GEOSWKBWriter_write(writer, geom, size);
+
+    GEOSGeom_destroy(geom);
+
+    return(wkb);
+}
+
+/*!
+   \brief Read vector area and return it as Well Known Text (WKT)
+          unsigned char array
+
+   \param Map pointer to Map_info structure
+   \param area area id
+   \param size The size of the returned unsigned char array
+
+   \return pointer to char array
+   \return NULL on error
+ */
+char *Vect_read_area_to_wkt(struct Map_info * Map, int area)
+{
+    static int init = 0;
+    /* The writer is static for performance reasons */
+    static GEOSWKTWriter *writer = NULL;
+    char *wkt = NULL;
+
+    if(init == 0) {
+        initGEOS(NULL, NULL);
+        writer = GEOSWKTWriter_create();
+        init += 1;
+    }
+
+    GEOSWKTWriter_setOutputDimension(writer, 2);
+
+    GEOSGeometry *geom = Vect_read_area_geos(Map, area);
+
+    if(!geom) {
+        return(NULL);
+    }
+
+    wkt = GEOSWKTWriter_write(writer, geom);
+
+    GEOSGeom_destroy(geom);
+
+    return(wkt);
+}
+
+/*!
+   \brief Read a Well Known Binary (WKB) representation of
+          a given feature id.
+           
+   This function reads a specific feature and converts it into a 
+   WKB representation. line_pnts and line_cats structures can be provided
+   to store the result of the read operation. That is meaningful in case
+   the category values of the feature are needed.
+   This function is not thread safe, it uses static variables for speedup.
+
+   Supported feature types:
+   - GV_POINT    -> POINT
+   - GV_CENTROID -> POINT
+   - GV_LINE     -> LINESTRING
+   - GV_BOUNDARY -> LINEARRING
+
+   \param Map pointer to Map_info structure
+   \param line_p pointer to line_pnts structure to use, or NULL
+   \param line_c pointer to line_cats structure to use, or NULL
+   \param line The id of the feature to read
+   \param size The size of the returned unsigned char array
+
+   \return pointer to unsigned char array
+   \return NULL on error
+ */
+unsigned char *Vect_read_line_to_wkb(const struct Map_info *Map, 
+                                     struct line_pnts *line_p, 
+                                     struct line_cats *line_c, 
+                                     int line, size_t *size,
+                                     int *error)
+{    
+    static int init = 0;
+    /* The writer is static for performance reasons */
+    static GEOSWKBWriter *writer = NULL;
+    unsigned char *wkb = NULL;
+    int destroy_line = 0, destroy_cats = 0;
+
+    if(init == 0) {
+        initGEOS(NULL, NULL);
+        writer = GEOSWKBWriter_create();
+        init += 1;
+    }
+
+    if(line_p == NULL) {
+        destroy_line = 1;
+        line_p = Vect_new_line_struct();
+    }
+    
+    if(line_c == NULL) {
+        destroy_cats = 1;
+        line_c = Vect_new_cats_struct();
+    }
+    
+    int f_type = Vect_read_line(Map, line_p, line_c, line);
+    /* Save the error state */
+    *error = f_type;
+    
+    if(f_type < 0)
+        return(NULL);
+    
+    GEOSWKBWriter_setOutputDimension(writer, Vect_is_3d(Map) ? 3 : 2);
+
+    GEOSGeometry *geom = Vect_line_to_geos(line_p, f_type, Vect_is_3d(Map));
+    
+    if(destroy_cats == 1)
+        Vect_destroy_cats_struct(line_c);
+
+    if(destroy_line == 1)
+        Vect_destroy_line_struct(line_p);
+
+    if(!geom) {
+        return(NULL);
+    }
+
+    wkb = GEOSWKBWriter_write(writer, geom, size);
+
+    GEOSGeom_destroy(geom);
+
+    return(wkb);
+}
+
+/*!
+   \brief Create a Well Known Binary (WKB) representation of
+          given feature type from points.
+
+   This function is not thread safe, it uses static variables for speedup.
+
+   Supported feature types:
+   - GV_POINT    -> POINT
+   - GV_CENTROID -> POINT
+   - GV_LINE     -> LINESTRING
+   - GV_BOUNDARY -> LINEARRING
+
+   \param points pointer to line_pnts structure
+   \param type feature type (see supported types)
+   \param with_z Set to 1 if the feature is 3d, 0 otherwise
+   \param size The size of the returned byte array
+
+   \return pointer to char array
+   \return NULL on error
+ */
+unsigned char *Vect_line_to_wkb(const struct line_pnts *points,
+                       int type, int with_z, size_t *size)
+{
+    static int init = 0;
+    /* The writer is static for performance reasons */
+    static GEOSWKBWriter *writer = NULL;
+    unsigned char *wkb = NULL;
+
+    if(init == 0) {
+        initGEOS(NULL, NULL);
+        writer = GEOSWKBWriter_create();
+        init += 1;
+    }
+
+    GEOSWKBWriter_setOutputDimension(writer, with_z ? 3 : 2);
+
+    GEOSGeometry *geom = Vect_line_to_geos(points, type, with_z);
+
+    if(!geom) {
+        return(NULL);
+    }
+
+    wkb = GEOSWKBWriter_write(writer, geom, size);
+
+    GEOSGeom_destroy(geom);
+
+    return(wkb);
+}
+
+/*!
+   \brief Create a Well Known Text (WKT) representation of
+          given feature type from points.
+
+   This function is not thread safe, it uses static variables for speedup.
+
+   Supported types:
+   - GV_POINT    -> POINT
+   - GV_CENTROID -> POINT
+   - GV_LINE     -> LINESTRING
+   - GV_BOUNDARY -> LINEARRING
+
+   \param points pointer to line_pnts structure
+   \param type feature type (see supported types)
+   \param with_z Set to 1 if the feature is 3d, 0 otherwise
+
+   \return pointer to char array
+   \return NULL on error
+ */
+char *Vect_line_to_wkt(const struct line_pnts *points,
+                       int type, int with_z)
+{
+    static int init = 0;
+    /* The writer is static for performance reasons */
+    static GEOSWKTWriter *writer = NULL;
+    char *wkt = NULL;
+
+    if(init == 0) {
+        initGEOS(NULL, NULL);
+        writer = GEOSWKTWriter_create();
+        init += 1;
+    }
+
+    GEOSWKTWriter_setOutputDimension(writer, with_z ? 3 : 2);
+
+    GEOSGeometry *geom = Vect_line_to_geos(points, type, with_z);
+
+    if(!geom) {
+        return(NULL);
+    }
+
+    wkt = GEOSWKTWriter_write(writer, geom);
+
+    GEOSGeom_destroy(geom);
+
+    return(wkt);
+}
+
+#endif /* HAVE_GEOS */
diff --git a/lib/vector/Vlib/header.c b/lib/vector/Vlib/header.c
index 5dd70f9..5bce684 100644
--- a/lib/vector/Vlib/header.c
+++ b/lib/vector/Vlib/header.c
@@ -77,12 +77,11 @@ int Vect_write_header(const struct Map_info *Map)
  */
 int Vect__write_head(const struct Map_info *Map)
 {
-    char *path;
+    char path[GPATH_MAX];
     FILE *head_fp;
 
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     head_fp = G_fopen_new(path, GV_HEAD_ELEMENT);
-    G_free(path);
     if (head_fp == NULL) {
 	G_warning(_("Unable to create header file for vector map <%s>"),
 		  Vect_get_full_name(Map));
@@ -118,15 +117,14 @@ int Vect__read_head(struct Map_info *Map)
 {
     FILE *head_fp;
     char buff[2000];
-    char *path, *ptr;
+    char path[GPATH_MAX], *ptr;
 
     /* Reset / init */
     Vect__init_head(Map);
     
     G_debug(1, "Vect__read_head(): vector = %s@%s", Map->name, Map->mapset);
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     head_fp = G_fopen_old(path, GV_HEAD_ELEMENT, Map->mapset);
-    G_free(path);
     if (head_fp == NULL) {
 	G_warning(_("Unable to open header file of vector <%s>"),
 		  Vect_get_full_name(Map));
diff --git a/lib/vector/Vlib/local_proto.h b/lib/vector/Vlib/local_proto.h
index 9ad1fac..c6d0fb0 100644
--- a/lib/vector/Vlib/local_proto.h
+++ b/lib/vector/Vlib/local_proto.h
@@ -7,6 +7,14 @@
 #define CACHE_FEATURE 0
 #define CACHE_MAP     1
 
+/*! Attributes of temporary maps */
+/* #define TEMPORARY_MAP_DB */
+
+/*! Temporary mode */
+#define TEMPORARY_MAP_DISABLED 0
+#define TEMPORARY_MAP_ENV      1
+#define TEMPORARY_MAP          2
+
 /* Internal vector library subroutines which are not part of public
    API*/
 
@@ -27,8 +35,8 @@ int Vect__delete(const char *, int);
 /* open.c */
 int Vect__open_old(struct Map_info *, const char *, const char *,
                    const char *, int, int, int);
-char *Vect__get_path(const struct Map_info *);
-char *Vect__get_element_path(const struct Map_info *, const char *);
+char *Vect__get_path(char *, const struct Map_info *);
+char *Vect__get_element_path(char *, const struct Map_info *, const char *);
 
 /* write_nat.c */
 int V2__add_line_to_topo_nat(struct Map_info *, off_t, int,
diff --git a/lib/vector/Vlib/map.c b/lib/vector/Vlib/map.c
index 428d723..dc70aee 100644
--- a/lib/vector/Vlib/map.c
+++ b/lib/vector/Vlib/map.c
@@ -22,6 +22,7 @@
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <fcntl.h>
+#include <errno.h>
 
 #include <grass/glocale.h>
 #include <grass/vector.h>
@@ -31,6 +32,41 @@
 #include "local_proto.h"
 
 /*!
+   \brief Creates and initializes Map_info structure
+
+  To free allocated memory call Vect_destroy_map_struct().
+
+   \return pointer to Map_info 
+ */
+struct Map_info *Vect_new_map_struct(void)
+{
+    struct Map_info *p;
+
+    p = (struct Map_info *)malloc(sizeof(struct Map_info)); 
+
+    if (NULL == p)
+      G_fatal_error("Vect_new_map_struct(): %s", _("Out of memory"));
+
+    G_zero(p, sizeof(struct Map_info));
+
+    return p;
+}
+
+/*!
+   \brief Frees all memory associated with a Map_info structure,
+   including the structure itself
+
+   \param p pointer to Map_info structure
+ */
+void Vect_destroy_map_struct(struct Map_info *p)
+{
+   /* We should free all allocated member structures, but they may be already 
+      freed by other functions (e.g. Vect_close()) without resetting member pointers to zero */
+
+   G_free((char *)p);
+}
+
+/*!
    \brief Copy file
 
    \param src source file
@@ -347,9 +383,9 @@ int Vect_delete(const char *map)
 int Vect__delete(const char *map, int is_tmp)
 {
     int ret;
-    char *path, path_buf[GPATH_MAX];
+    char path[GPATH_MAX], path_buf[GPATH_MAX];
     char xname[GNAME_MAX], xmapset[GMAPSET_MAX];
-    const char *tmp, *mapset;
+    const char *tmp, *mapset, *env;
     
     struct Map_info Map;
     
@@ -384,7 +420,7 @@ int Vect__delete(const char *map, int is_tmp)
         }
     }
         
-    path = Vect__get_element_path(&Map, GV_DBLN_ELEMENT);
+    Vect__get_element_path(path, &Map, GV_DBLN_ELEMENT);
     G_debug(1, "dbln file: %s", path);
 
     if (access(path, F_OK) == 0) {
@@ -439,10 +475,9 @@ int Vect__delete(const char *map, int is_tmp)
             }
         }
     }
-    G_free(path);
     
     /* Delete all files from vector/name directory */
-    path = Vect__get_element_path(&Map, NULL);
+    Vect__get_element_path(path, &Map, NULL);
     Vect_close(&Map);
     G_debug(3, "opendir '%s'", path);
     dir = opendir(path);
@@ -468,23 +503,30 @@ int Vect__delete(const char *map, int is_tmp)
     }
     closedir(dir);
     
-    /* NFS can create .nfsxxxxxxxx files for those deleted 
-     *  -> we have to move the directory to ./tmp before it is deleted */
-    tmp = G_tempfile();
-
-    G_debug(3, "rename '%s' to '%s'", path, tmp);
-    ret = rename(path, tmp);
-    if (ret == -1) {
-        G_warning(_("Unable to rename directory '%s' to '%s'"), path, tmp);
-        return -1;
+    env = getenv("GRASS_VECTOR_TMPDIR_MAPSET");
+    if (env && strcmp(env, "0") == 0) {
+	tmp = path;
+    }
+    else {
+	/* NFS can create .nfsxxxxxxxx files for those deleted 
+	 *  -> we have to move the directory to ./tmp before it is deleted */
+	tmp = G_tempfile();
+	
+	G_debug(3, "rename '%s' to '%s'", path, tmp);
+	
+	ret = rename(path, tmp);
+	if (ret == -1) {
+	    G_warning(_("Unable to rename directory '%s' to '%s'"), path, tmp);
+	    return -1;
+	}
     }
-    G_free(path);
 
     G_debug(3, "remove directory '%s'", tmp);
     /* Warning: remove() fails on Windows */
     ret = rmdir(tmp);
     if (ret == -1) {
-        G_warning(_("Unable to remove directory '%s'"), tmp);
+        G_warning(_("Unable to remove directory '%s': %s"),
+		  tmp, strerror(errno));
         return -1;
     }
 
diff --git a/lib/vector/Vlib/net.c b/lib/vector/Vlib/net.c
deleted file mode 100644
index 0c31bf1..0000000
--- a/lib/vector/Vlib/net.c
+++ /dev/null
@@ -1,1191 +0,0 @@
-/*!
- * \file lib/vector/Vlib/net.c
- *
- * \brief Vector library - net releated fns
- *
- * Higher level functions for reading/writing/manipulating vectors.
- *
- * (C) 2001-2009 by the GRASS Development Team
- *
- * This program is free software under the GNU General Public License
- * (>=v2).  Read the file COPYING that comes with GRASS for details.
- *
- * \author Radim Blazek
- */
-
-#include <stdlib.h>
-#include <string.h>
-#include <fcntl.h>
-#include <grass/dbmi.h>
-#include <grass/vector.h>
-#include <grass/glocale.h>
-
-static int From_node;		/* from node set in SP and used by clipper for first arc */
-
-static int clipper(dglGraph_s * pgraph,
-		   dglSPClipInput_s * pargIn,
-		   dglSPClipOutput_s * pargOut, void *pvarg)
-{				/* caller's pointer */
-    dglInt32_t cost;
-    dglInt32_t from;
-
-    G_debug(3, "Net: clipper()");
-
-    from = dglNodeGet_Id(pgraph, pargIn->pnNodeFrom);
-
-    G_debug(3, "  Edge = %d NodeFrom = %d NodeTo = %d edge cost = %d",
-	    (int)dglEdgeGet_Id(pgraph, pargIn->pnEdge),
-	    (int)from, (int)dglNodeGet_Id(pgraph, pargIn->pnNodeTo),
-	    (int)pargOut->nEdgeCost);
-
-    if (from != From_node) {	/* do not clip first */
-	if (dglGet_NodeAttrSize(pgraph) > 0) {
-	    memcpy(&cost, dglNodeGet_Attr(pgraph, pargIn->pnNodeFrom),
-		   sizeof(cost));
-	    if (cost == -1) {	/* closed, cannot go from this node except it is 'from' node */
-		G_debug(3, "  closed node");
-		return 1;
-	    }
-	    else {
-		G_debug(3, "  EdgeCost += %d (node)", (int)cost);
-		pargOut->nEdgeCost += cost;
-	    }
-	}
-    }
-    else {
-	G_debug(3, "  don't clip first node");
-    }
-
-    return 0;
-}
-
-/*!
-   \brief Build network graph.
-
-   Internal format for edge costs is integer, costs are multiplied
-   before conversion to int by 1000 and for lenghts LL without geo flag by 1000000.
-   The same multiplication factor is used for nodes.
-   Costs in database column may be 'integer' or 'double precision' number >= 0
-   or -1 for infinity i.e. arc or node is closed and cannot be traversed
-   If record in table is not found for arcs, arc is skip.
-   If record in table is not found for node, costs for node are set to 0.
-
-   \param Map vector map
-   \param ltype line type for arcs
-   \param afield arc costs field (if 0, use length)
-   \param nfield node costs field (if 0, do not use node costs)
-   \param afcol column with forward costs for arc
-   \param abcol column with backward costs for arc (if NULL, back costs = forward costs), 
-   \param ncol column with costs for nodes (if NULL, do not use node costs), 
-   \param geo use geodesic calculation for length (LL), 
-   \param version graph version to create (1, 2, 3)
-
-   \return 0 on success, 1 on error
- */
-int
-Vect_net_build_graph(struct Map_info *Map,
-		     int ltype,
-		     int afield,
-		     int nfield,
-		     const char *afcol,
-		     const char *abcol,
-		     const char *ncol, int geo, int version)
-{
-    int i, j, from, to, line, nlines, nnodes, ret, type, cat, skipped, cfound;
-    int dofw, dobw;
-    struct line_pnts *Points;
-    struct line_cats *Cats;
-    double dcost, bdcost, ll;
-    int cost, bcost;
-    dglGraph_s *gr;
-    dglInt32_t dgl_cost;
-    dglInt32_t opaqueset[16] =
-	{ 360000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
-    struct field_info *Fi;
-    dbDriver *driver = NULL;
-    dbHandle handle;
-    dbString stmt;
-    dbColumn *Column;
-    dbCatValArray fvarr, bvarr;
-    int fctype = 0, bctype = 0, nrec;
-
-    /* TODO int costs -> double (waiting for dglib) */
-    G_debug(1, "Vect_build_graph(): ltype = %d, afield = %d, nfield = %d",
-	    ltype, afield, nfield);
-    G_debug(1, "    afcol = %s, abcol = %s, ncol = %s", afcol, abcol, ncol);
-
-    G_message(_("Building graph..."));
-
-    Map->dgraph.line_type = ltype;
-
-    Points = Vect_new_line_struct();
-    Cats = Vect_new_cats_struct();
-
-    ll = 0;
-    if (G_projection() == 3)
-	ll = 1;			/* LL */
-
-    if (afcol == NULL && ll && !geo)
-	Map->dgraph.cost_multip = 1000000;
-    else
-	Map->dgraph.cost_multip = 1000;
-
-    nlines = Vect_get_num_lines(Map);
-    nnodes = Vect_get_num_nodes(Map);
-
-    gr = &(Map->dgraph.graph_s);
-
-    /* Allocate space for costs, later replace by functions reading costs from graph */
-    Map->dgraph.edge_fcosts = (double *)G_malloc((nlines + 1) * sizeof(double));
-    Map->dgraph.edge_bcosts = (double *)G_malloc((nlines + 1) * sizeof(double));
-    Map->dgraph.node_costs = (double *)G_malloc((nnodes + 1) * sizeof(double));
-    /* Set to -1 initially */
-    for (i = 1; i <= nlines; i++) {
-	Map->dgraph.edge_fcosts[i] = -1;	/* forward */
-	Map->dgraph.edge_bcosts[i] = -1;	/* backward */
-    }
-    for (i = 1; i <= nnodes; i++) {
-	Map->dgraph.node_costs[i] = 0;
-    }
-
-    if (version < 1 || version > 3)
-	version = 1;
-
-    if (ncol != NULL)
-	dglInitialize(gr, (dglByte_t) version, sizeof(dglInt32_t), (dglInt32_t) 0,
-		      opaqueset);
-    else
-	dglInitialize(gr, (dglByte_t) version, (dglInt32_t) 0, (dglInt32_t) 0,
-		      opaqueset);
-
-    if (gr == NULL)
-	G_fatal_error(_("Unable to build network graph"));
-
-    db_init_handle(&handle);
-    db_init_string(&stmt);
-
-    if (abcol != NULL && afcol == NULL)
-	G_fatal_error(_("Forward costs column not specified"));
-
-    /* --- Add arcs --- */
-    /* Open db connection */
-    if (afcol != NULL) {
-	/* Get field info */
-	if (afield < 1)
-	    G_fatal_error(_("Arc field < 1"));
-	Fi = Vect_get_field(Map, afield);
-	if (Fi == NULL)
-	    G_fatal_error(_("Database connection not defined for layer %d"),
-			  afield);
-
-	/* Open database */
-	driver = db_start_driver_open_database(Fi->driver, Fi->database);
-	if (driver == NULL)
-	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
-			  Fi->database, Fi->driver);
-
-	/* Load costs to array */
-	if (db_get_column(driver, Fi->table, afcol, &Column) != DB_OK)
-	    G_fatal_error(_("Column <%s> not found in table <%s>"),
-			  afcol, Fi->table);
-
-	fctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
-
-	if (fctype != DB_C_TYPE_INT && fctype != DB_C_TYPE_DOUBLE)
-	    G_fatal_error(_("Data type of column <%s> not supported (must be numeric)"),
-			  afcol);
-
-	db_CatValArray_init(&fvarr);
-	nrec =
-	    db_select_CatValArray(driver, Fi->table, Fi->key, afcol, NULL,
-				  &fvarr);
-	G_debug(1, "forward costs: nrec = %d", nrec);
-
-	if (abcol != NULL) {
-	    if (db_get_column(driver, Fi->table, abcol, &Column) != DB_OK)
-		G_fatal_error(_("Column <%s> not found in table <%s>"),
-			      abcol, Fi->table);
-
-	    bctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
-
-	    if (bctype != DB_C_TYPE_INT && bctype != DB_C_TYPE_DOUBLE)
-		G_fatal_error(_("Data type of column <%s> not supported (must be numeric)"),
-			      abcol);
-
-	    db_CatValArray_init(&bvarr);
-	    nrec =
-		db_select_CatValArray(driver, Fi->table, Fi->key, abcol, NULL,
-				      &bvarr);
-	    G_debug(1, "backward costs: nrec = %d", nrec);
-	}
-    }
-
-    skipped = 0;
-
-    G_message(_("Registering arcs..."));
-
-    for (i = 1; i <= nlines; i++) {
-	G_percent(i, nlines, 1);	/* must be before any continue */
-	dofw = dobw = 1;
-	type = Vect_read_line(Map, Points, Cats, i);
-	if (!(type & ltype & (GV_LINE | GV_BOUNDARY)))
-	    continue;
-
-	Vect_get_line_nodes(Map, i, &from, &to);
-
-	if (afcol != NULL) {
-	    if (!(Vect_cat_get(Cats, afield, &cat))) {
-		G_debug(2,
-			"Category of field %d not attached to the line %d -> line skipped",
-			afield, i);
-		skipped += 2;	/* Both directions */
-		continue;
-	    }
-	    else {
-		if (fctype == DB_C_TYPE_INT) {
-		    ret = db_CatValArray_get_value_int(&fvarr, cat, &cost);
-		    dcost = cost;
-		}
-		else {		/* DB_C_TYPE_DOUBLE */
-		    ret =
-			db_CatValArray_get_value_double(&fvarr, cat, &dcost);
-		}
-		if (ret != DB_OK) {
-		    G_warning(_("Database record for line %d (cat = %d, "
-				"forward/both direction(s)) not found "
-				"(forward/both direction(s) of line skipped)"),
-			      i, cat);
-		    dofw = 0;
-		}
-
-		if (abcol != NULL) {
-		    if (bctype == DB_C_TYPE_INT) {
-			ret =
-			    db_CatValArray_get_value_int(&bvarr, cat, &bcost);
-			bdcost = bcost;
-		    }
-		    else {	/* DB_C_TYPE_DOUBLE */
-			ret =
-			    db_CatValArray_get_value_double(&bvarr, cat,
-							    &bdcost);
-		    }
-		    if (ret != DB_OK) {
-			G_warning(_("Database record for line %d (cat = %d, "
-				    "backword direction) not found"
-				    "(direction of line skipped)"), i, cat);
-			dobw = 0;
-		    }
-		}
-		else {
-		    if (dofw)
-			bdcost = dcost;
-		    else
-			dobw = 0;
-		}
-	    }
-	}
-	else {
-	    if (ll) {
-		if (geo)
-		    dcost = Vect_line_geodesic_length(Points);
-		else
-		    dcost = Vect_line_length(Points);
-	    }
-	    else
-		dcost = Vect_line_length(Points);
-
-	    bdcost = dcost;
-	}
-	if (dofw && dcost != -1) {
-	    cost = (dglInt32_t) Map->dgraph.cost_multip * dcost;
-	    G_debug(5, "Add arc %d from %d to %d cost = %d", i, from, to,
-		    cost);
-	    ret =
-		dglAddEdge(gr, (dglInt32_t) from, (dglInt32_t) to,
-			   (dglInt32_t) cost, (dglInt32_t) i);
-	    Map->dgraph.edge_fcosts[i] = dcost;
-	    if (ret < 0)
-		G_fatal_error("Cannot add network arc");
-	}
-
-	G_debug(5, "bdcost = %f edge_bcosts = %f", bdcost,
-		Map->dgraph.edge_bcosts[i]);
-	if (dobw && bdcost != -1) {
-	    bcost = (dglInt32_t) Map->dgraph.cost_multip * bdcost;
-	    G_debug(5, "Add arc %d from %d to %d bcost = %d", -i, to, from,
-		    bcost);
-	    ret =
-		dglAddEdge(gr, (dglInt32_t) to, (dglInt32_t) from,
-			   (dglInt32_t) bcost, (dglInt32_t) - i);
-	    Map->dgraph.edge_bcosts[i] = bdcost;
-	    if (ret < 0)
-		G_fatal_error(_("Cannot add network arc"));
-	}
-    }
-
-    if (afcol != NULL && skipped > 0)
-	G_debug(2, "%d lines missing category of field %d skipped", skipped,
-		afield);
-
-    if (afcol != NULL) {
-	db_close_database_shutdown_driver(driver);
-	db_CatValArray_free(&fvarr);
-
-	if (abcol != NULL) {
-	    db_CatValArray_free(&bvarr);
-	}
-    }
-
-    /* Set node attributes */
-    G_debug(2, "Register nodes");
-    if (ncol != NULL) {
-	double x, y, z;
-	struct bound_box box;
-	struct boxlist *List;
-	
-	List = Vect_new_boxlist(0);
-
-	G_debug(2, "Set nodes' costs");
-	if (nfield < 1)
-	    G_fatal_error("Node field < 1");
-
-	G_message(_("Setting node costs..."));
-
-	Fi = Vect_get_field(Map, nfield);
-	if (Fi == NULL)
-	    G_fatal_error(_("Database connection not defined for layer %d"),
-			  nfield);
-
-	driver = db_start_driver_open_database(Fi->driver, Fi->database);
-	if (driver == NULL)
-	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
-			  Fi->database, Fi->driver);
-
-	/* Load costs to array */
-	if (db_get_column(driver, Fi->table, ncol, &Column) != DB_OK)
-	    G_fatal_error(_("Column <%s> not found in table <%s>"),
-			  ncol, Fi->table);
-
-	fctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
-
-	if (fctype != DB_C_TYPE_INT && fctype != DB_C_TYPE_DOUBLE)
-	    G_fatal_error(_("Data type of column <%s> not supported (must be numeric)"),
-			  ncol);
-
-	db_CatValArray_init(&fvarr);
-	nrec =
-	    db_select_CatValArray(driver, Fi->table, Fi->key, ncol, NULL,
-				  &fvarr);
-	G_debug(1, "node costs: nrec = %d", nrec);
-
-	for (i = 1; i <= nnodes; i++) {
-	    /* TODO: what happens if we set attributes of not existing node (skipped lines,
-	     *       nodes without lines) */
-
-	    /* select points at node */
-	    Vect_get_node_coor(Map, i, &x, &y, &z);
-	    box.E = box.W = x;
-	    box.N = box.S = y;
-	    box.T = box.B = z;
-	    Vect_select_lines_by_box(Map, &box, GV_POINT, List);
-
-	    G_debug(2, "  node = %d nlines = %d", i, List->n_values);
-	    cfound = 0;
-	    dcost = 0;
-
-	    for (j = 0; j < List->n_values; j++) {
-		line = List->id[j];
-		G_debug(2, "  line (%d) = %d", j, line);
-		type = Vect_read_line(Map, NULL, Cats, line);
-		if (!(type & GV_POINT))
-		    continue;
-		if (Vect_cat_get(Cats, nfield, &cat)) {	/* point with category of field found */
-		    /* Set costs */
-		    if (fctype == DB_C_TYPE_INT) {
-			ret =
-			    db_CatValArray_get_value_int(&fvarr, cat, &cost);
-			dcost = cost;
-		    }
-		    else {	/* DB_C_TYPE_DOUBLE */
-			ret =
-			    db_CatValArray_get_value_double(&fvarr, cat,
-							    &dcost);
-		    }
-		    if (ret != DB_OK) {
-			G_warning(_("Database record for node %d (cat = %d) not found "
-				   "(cost set to 0)"), i, cat);
-		    }
-		    cfound = 1;
-		    break;
-		}
-	    }
-	    if (!cfound) {
-		G_debug(2,
-			"Category of field %d not attached to any points in node %d"
-			"(costs set to 0)", nfield, i);
-	    }
-	    if (dcost == -1) {	/* closed */
-		cost = -1;
-	    }
-	    else {
-		cost = (dglInt32_t) Map->dgraph.cost_multip * dcost;
-	    }
-	    dgl_cost = cost;
-	    G_debug(3, "Set node's cost to %d", cost);
-	    dglNodeSet_Attr(gr, dglGetNode(gr, (dglInt32_t) i), &dgl_cost);
-	    Map->dgraph.node_costs[i] = dcost;
-	}
-	db_close_database_shutdown_driver(driver);
-	db_CatValArray_free(&fvarr);
-	
-	Vect_destroy_boxlist(List);
-    }
-
-    G_message(_("Flattening the graph..."));
-    ret = dglFlatten(gr);
-    if (ret < 0)
-	G_fatal_error(_("GngFlatten error"));
-
-    /* init SP cache */
-    /* disable to debug dglib cache */
-    dglInitializeSPCache(gr, &(Map->dgraph.spCache));
-
-    G_message(_("Graph was built"));
-
-    return 0;
-}
-
-
-/*!
-   \brief Find shortest path.
-
-   Costs for 'from' and 'to' nodes are not considered (SP found even if
-   'from' or 'to' are 'closed' (costs = -1) and costs of these
-   nodes are not added to SP costs result.
-
-   \param Map vector map
-   \param from from node
-   \param to to node
-   \param[out] List list of line ids (path)
-   \param[out] cost costs value
-
-   \return number of segments
-   \return 0 is correct for from = to, or List == NULL ? sum of costs is better return value,
-   \return -1 : destination unreachable
-
- */
-int
-Vect_net_shortest_path(struct Map_info *Map, int from, int to,
-		       struct ilist *List, double *cost)
-{
-    int i, line, *pclip, cArc, nRet;
-    dglSPReport_s *pSPReport;
-    dglInt32_t nDistance;
-    int use_cache = 1;		/* set to 0 to disable dglib cache */
-
-    G_debug(3, "Vect_net_shortest_path(): from = %d, to = %d", from, to);
-
-    /* Note : if from == to dgl goes to nearest node and returns back (dgl feature) => 
-     *         check here for from == to */
-
-    if (List != NULL)
-	Vect_reset_list(List);
-
-    /* Check if from and to are identical, otherwise dglib returns path to neares node and back! */
-    if (from == to) {
-	if (cost != NULL)
-	    *cost = 0;
-	return 0;
-    }
-
-    From_node = from;
-
-    pclip = NULL;
-    if (List != NULL) {
-	if (use_cache) {
-	    nRet =
-		dglShortestPath(&(Map->dgraph.graph_s), &pSPReport, (dglInt32_t) from,
-				(dglInt32_t) to, clipper, pclip, &(Map->dgraph.spCache));
-	}
-	else {
-	    nRet =
-		dglShortestPath(&(Map->dgraph.graph_s), &pSPReport, (dglInt32_t) from,
-				(dglInt32_t) to, clipper, pclip, NULL);
-	}
-    }
-    else {
-	if (use_cache) {
-	    nRet =
-		dglShortestDistance(&(Map->dgraph.graph_s), &nDistance, (dglInt32_t) from,
-				    (dglInt32_t) to, clipper, pclip, &(Map->dgraph.spCache));
-	}
-	else {
-	    nRet =
-		dglShortestDistance(&(Map->dgraph.graph_s), &nDistance, (dglInt32_t) from,
-				    (dglInt32_t) to, clipper, pclip, NULL);
-	}
-    }
-
-    if (nRet == 0) {
-	/* G_warning("Destination node %d is unreachable from node %d\n" , to , from); */
-	if (cost != NULL)
-	    *cost = PORT_DOUBLE_MAX;
-	return -1;
-    }
-    else if (nRet < 0) {
-	G_warning(_("dglShortestPath error: %s"), dglStrerror(&(Map->dgraph.graph_s)));
-	return -1;
-    }
-
-    if (List != NULL) {
-	for (i = 0; i < pSPReport->cArc; i++) {
-	    line = dglEdgeGet_Id(&(Map->dgraph.graph_s), pSPReport->pArc[i].pnEdge);
-	    G_debug(2, "From %ld to %ld - cost %ld user %d distance %ld", pSPReport->pArc[i].nFrom, pSPReport->pArc[i].nTo, dglEdgeGet_Cost(&(Map->dgraph.graph_s), pSPReport->pArc[i].pnEdge) / Map->dgraph.cost_multip,	/* this is the cost from clip() */
-		    line, pSPReport->pArc[i].nDistance);
-	    Vect_list_append(List, line);
-	}
-    }
-
-    if (cost != NULL) {
-	if (List != NULL)
-	    *cost = (double)pSPReport->nDistance / Map->dgraph.cost_multip;
-	else
-	    *cost = (double)nDistance / Map->dgraph.cost_multip;
-    }
-
-    if (List != NULL) {
-	cArc = pSPReport->cArc;
-	dglFreeSPReport(&(Map->dgraph.graph_s), pSPReport);
-    }
-    else
-	cArc = 0;
-
-    return (cArc);
-}
-
-/*!
-  \brief Get graph structure
-  
-  Graph is built by Vect_net_build_graph().
-  
-  Returns NULL when graph is not built.
-  
-  \param Map pointer to Map_info struct
-
-  \return pointer to dglGraph_s struct or NULL
-*/
-dglGraph_s *Vect_net_get_graph(struct Map_info *Map)
-{
-    return &(Map->dgraph.graph_s);
-}
-
-/*! 
-   \brief Returns in cost for given direction in *cost.
-
-   cost is set to -1 if closed.
-
-   \param Map vector map
-   \param line line id
-   \param direction direction (GV_FORWARD, GV_BACKWARD) 
-   \param[out] cost
-
-   \return 1 OK
-   \return 0 does not exist (was not inserted)
- */
-int
-Vect_net_get_line_cost(const struct Map_info *Map, int line, int direction,
-		       double *cost)
-{
-    /* dglInt32_t *pEdge; */
-
-    G_debug(5, "Vect_net_get_line_cost(): line = %d, dir = %d", line,
-	    direction);
-
-    if (direction == GV_FORWARD) {
-	/* V1 has no index by line-id -> array used */
-	/*
-	   pEdge = dglGetEdge(&(Map->dgraph.graph_s), line);
-	   if (pEdge == NULL)
-		return 0;
-	   *cost = (double) dglEdgeGet_Cost(&(Map->dgraph.graph_s), pEdge);
-	 */
-	if (Map->dgraph.edge_fcosts[line] == -1) {
-	    *cost = -1;
-	    return 0;
-	}
-	else
-            *cost = Map->dgraph.edge_fcosts[line];
-    }
-    else if (direction == GV_BACKWARD) {
-	/*
-	   pEdge = dglGetEdge(&(Map->dgraph.graph_s), -line);
-	   if (pEdge == NULL) 
-	    	return 0;
-	   *cost = (double) dglEdgeGet_Cost(&(Map->dgraph.graph_s), pEdge);
-	 */
-	if (Map->dgraph.edge_bcosts[line] == -1) {
-	    *cost = -1;
-	    return 0;
-	}
-	else
-	    *cost = Map->dgraph.edge_bcosts[line];
-	G_debug(5, "Vect_net_get_line_cost(): edge_bcosts = %f",
-		Map->dgraph.edge_bcosts[line]);
-    }
-    else {
-	G_fatal_error(_("Wrong line direction in Vect_net_get_line_cost()"));
-    }
-
-    return 1;
-}
-
-/*!
-   \brief Get cost of node
-
-   \param Map vector map
-   \param node node id
-   \param[out] cost costs value
-
-   \return 1
- */
-int Vect_net_get_node_cost(const struct Map_info *Map, int node, double *cost)
-{
-    G_debug(3, "Vect_net_get_node_cost(): node = %d", node);
-
-    *cost = Map->dgraph.node_costs[node];
-
-    G_debug(3, "  -> cost = %f", *cost);
-
-    return 1;
-}
-
-/*!
-   \brief Find nearest node(s) on network. 
-
-   \param Map vetor map
-   \param x,y,z point coordinates (z coordinate NOT USED !)
-   \param direction (GV_FORWARD - from point to net, GV_BACKWARD - from net to point)
-   \param maxdist maximum distance to the network
-   \param[out] node1 pointer where to store the node number (or NULL)
-   \param[out] node2 pointer where to store the node number (or NULL)
-   \param[out] ln    pointer where to store the nearest line number (or NULL)
-   \param[out] costs1 pointer where to store costs on nearest line to node1 (not costs from x,y,z to the line) (or NULL)
-   \param[out] costs2 pointer where to store costs on nearest line to node2 (not costs from x,y,z to the line) (or NULL)
-   \param[out] Points1 pointer to structure where to store vertices on nearest line to node1 (or NULL)
-   \param[out] Points2 pointer to structure where to store vertices on nearest line to node2 (or NULL)
-   \param[out] pointer where to distance to the line (or NULL)
-   \param[out] distance
-
-   \return number of nodes found (0,1,2)
- */
-int Vect_net_nearest_nodes(struct Map_info *Map,
-			   double x, double y, double z,
-			   int direction, double maxdist,
-			   int *node1, int *node2, int *ln, double *costs1,
-			   double *costs2, struct line_pnts *Points1,
-			   struct line_pnts *Points2, double *distance)
-{
-    int line, n1, n2, nnodes;
-    int npoints;
-    int segment;		/* nearest line segment (first is 1) */
-    static struct line_pnts *Points = NULL;
-    double cx, cy, cz, c1, c2;
-    double along;		/* distance along the line to nearest point */
-    double length;
-
-    G_debug(3, "Vect_net_nearest_nodes() x = %f y = %f", x, y);
-
-    /* Reset */
-    if (node1)
-	*node1 = 0;
-    if (node2)
-	*node2 = 0;
-    if (ln)
-	*ln = 0;
-    if (costs1)
-	*costs1 = PORT_DOUBLE_MAX;
-    if (costs2)
-	*costs2 = PORT_DOUBLE_MAX;
-    if (Points1)
-	Vect_reset_line(Points1);
-    if (Points2)
-	Vect_reset_line(Points2);
-    if (distance)
-	*distance = PORT_DOUBLE_MAX;
-
-    if (!Points)
-	Points = Vect_new_line_struct();
-
-    /* Find nearest line */
-    line = Vect_find_line(Map, x, y, z, Map->dgraph.line_type, maxdist, 0, 0);
-
-    if (line < 1)
-	return 0;
-
-    Vect_read_line(Map, Points, NULL, line);
-    npoints = Points->n_points;
-    Vect_get_line_nodes(Map, line, &n1, &n2);
-
-    segment =
-	Vect_line_distance(Points, x, y, z, 0, &cx, &cy, &cz, distance, NULL,
-			   &along);
-
-    G_debug(4, "line = %d n1 = %d n2 = %d segment = %d", line, n1, n2,
-	    segment);
-
-    /* Check first or last point and return one node in that case */
-    G_debug(4, "cx = %f cy = %f first = %f %f last = %f %f", cx, cy,
-	    Points->x[0], Points->y[0], Points->x[npoints - 1],
-	    Points->y[npoints - 1]);
-
-    if (Points->x[0] == cx && Points->y[0] == cy) {
-	if (node1)
-	    *node1 = n1;
-	if (ln)
-	    *ln = line;
-	if (costs1)
-	    *costs1 = 0;
-	if (Points1) {
-	    Vect_append_point(Points1, x, y, z);
-	    Vect_append_point(Points1, cx, cy, cz);
-	}
-	G_debug(3, "first node nearest");
-	return 1;
-    }
-    if (Points->x[npoints - 1] == cx && Points->y[npoints - 1] == cy) {
-	if (node1)
-	    *node1 = n2;
-	if (ln)
-	    *ln = line;
-	if (costs1)
-	    *costs1 = 0;
-	if (Points1) {
-	    Vect_append_point(Points1, x, y, z);
-	    Vect_append_point(Points1, cx, cy, cz);
-	}
-	G_debug(3, "last node nearest");
-	return 1;
-    }
-
-    nnodes = 2;
-
-    /* c1 - costs to get from/to the first vertex */
-    /* c2 - costs to get from/to the last vertex */
-    if (direction == GV_FORWARD) {	/* from point to net */
-	Vect_net_get_line_cost(Map, line, GV_BACKWARD, &c1);
-	Vect_net_get_line_cost(Map, line, GV_FORWARD, &c2);
-    }
-    else {
-	Vect_net_get_line_cost(Map, line, GV_FORWARD, &c1);
-	Vect_net_get_line_cost(Map, line, GV_BACKWARD, &c2);
-    }
-
-    if (c1 < 0)
-	nnodes--;
-    if (c2 < 0)
-	nnodes--;
-    if (nnodes == 0)
-	return 0;		/* both directions closed */
-
-    length = Vect_line_length(Points);
-
-    if (ln)
-	*ln = line;
-
-    if (nnodes == 1 && c1 < 0) {	/* first direction is closed, return node2 as node1 */
-	if (node1)
-	    *node1 = n2;
-
-	if (costs1) {		/* to node 2, i.e. forward */
-	    *costs1 = c2 * (length - along) / length;
-	}
-
-	if (Points1) {		/* to node 2, i.e. forward */
-	    int i;
-
-	    if (direction == GV_FORWARD) {	/* from point to net */
-		Vect_append_point(Points1, x, y, z);
-		Vect_append_point(Points1, cx, cy, cz);
-		for (i = segment; i < npoints; i++)
-		    Vect_append_point(Points1, Points->x[i], Points->y[i],
-				      Points->z[i]);
-	    }
-	    else {
-		for (i = npoints - 1; i >= segment; i--)
-		    Vect_append_point(Points1, Points->x[i], Points->y[i],
-				      Points->z[i]);
-
-		Vect_append_point(Points1, cx, cy, cz);
-		Vect_append_point(Points1, x, y, z);
-	    }
-	}
-    }
-    else {
-	if (node1)
-	    *node1 = n1;
-	if (node2)
-	    *node2 = n2;
-
-	if (costs1) {		/* to node 1, i.e. backward */
-	    *costs1 = c1 * along / length;
-	}
-
-	if (costs2) {		/* to node 2, i.e. forward */
-	    *costs2 = c2 * (length - along) / length;
-	}
-
-	if (Points1) {		/* to node 1, i.e. backward */
-	    int i;
-
-	    if (direction == GV_FORWARD) {	/* from point to net */
-		Vect_append_point(Points1, x, y, z);
-		Vect_append_point(Points1, cx, cy, cz);
-		for (i = segment - 1; i >= 0; i--)
-		    Vect_append_point(Points1, Points->x[i], Points->y[i],
-				      Points->z[i]);
-	    }
-	    else {
-		for (i = 0; i < segment; i++)
-		    Vect_append_point(Points1, Points->x[i], Points->y[i],
-				      Points->z[i]);
-
-		Vect_append_point(Points1, cx, cy, cz);
-		Vect_append_point(Points1, x, y, z);
-	    }
-	}
-
-	if (Points2) {		/* to node 2, i.e. forward */
-	    int i;
-
-	    if (direction == GV_FORWARD) {	/* from point to net */
-		Vect_append_point(Points2, x, y, z);
-		Vect_append_point(Points2, cx, cy, cz);
-		for (i = segment; i < npoints; i++)
-		    Vect_append_point(Points2, Points->x[i], Points->y[i],
-				      Points->z[i]);
-	    }
-	    else {
-		for (i = npoints - 1; i >= segment; i--)
-		    Vect_append_point(Points2, Points->x[i], Points->y[i],
-				      Points->z[i]);
-
-		Vect_append_point(Points2, cx, cy, cz);
-		Vect_append_point(Points2, x, y, z);
-	    }
-	}
-    }
-
-    return nnodes;
-}
-
-/*!
-   \brief Find shortest path on network between 2 points given by coordinates. 
-
-   \param Map vector map
-   \param fx,fy,fz from point x coordinate (z ignored)
-   \param tx,ty,tz to point x coordinate (z ignored)
-   \param fmax maximum distance to the network from 'from'
-   \param tmax maximum distance to the network from 'to'
-   \param[out] costs pointer where to store costs on the network (or NULL)
-   \param[out] Points pointer to the structure where to store vertices of shortest path (or NULL)
-   \param[out] List pointer to the structure where list of lines on the network is stored (or NULL)
-   \param[out] FPoints pointer to the structure where to store line from 'from' to first network node (or NULL)
-   \param[out] TPoints pointer to the structure where to store line from last network node to 'to' (or NULL)
-   \param[out] fdist distance from 'from' to the net (or NULL)
-   \param[out] tdist distance from 'to' to the net (or NULL)
-
-   \return 1 OK
-   \return 0 not reachable
- */
-int
-Vect_net_shortest_path_coor(struct Map_info *Map,
-			    double fx, double fy, double fz, double tx,
-			    double ty, double tz, double fmax, double tmax,
-			    double *costs, struct line_pnts *Points,
-			    struct ilist *List, struct line_pnts *FPoints,
-			    struct line_pnts *TPoints, double *fdist,
-			    double *tdist)
-{
-  return Vect_net_shortest_path_coor2(Map, fx, fy, fz, tx, ty, tz, fmax, tmax, 
-            costs, Points, List, NULL, FPoints, TPoints, fdist, tdist);
-}
-
-/*!
-   \brief Find shortest path on network between 2 points given by coordinates. 
-
-   \param Map vector map
-   \param fx,fy,fz from point x coordinate (z ignored)
-   \param tx,ty,tz to point x coordinate (z ignored)
-   \param fmax maximum distance to the network from 'from'
-   \param tmax maximum distance to the network from 'to'
-   \param costs pointer where to store costs on the network (or NULL)
-   \param Points pointer to the structure where to store vertices of shortest path (or NULL)
-   \param List pointer to the structure where list of lines on the network is stored (or NULL)
-   \param NodesList pointer to the structure where list of nodes on the network is stored (or NULL)
-   \param FPoints pointer to the structure where to store line from 'from' to first network node (or NULL)
-   \param TPoints pointer to the structure where to store line from last network node to 'to' (or NULL)
-   \param fdist distance from 'from' to the net (or NULL)
-   \param tdist distance from 'to' to the net (or NULL)
-
-   \return 1 OK, 0 not reachable
- */
-int
-Vect_net_shortest_path_coor2(struct Map_info *Map,
-			    double fx, double fy, double fz, double tx,
-			    double ty, double tz, double fmax, double tmax,
-			    double *costs, struct line_pnts *Points,
-			    struct ilist *List, struct ilist *NodesList,
-                            struct line_pnts *FPoints,
-			    struct line_pnts *TPoints, double *fdist,
-			    double *tdist)
-{
-    int fnode[2], tnode[2];	/* nearest nodes, *node[1] is 0 if only one was found */
-    double fcosts[2], tcosts[2], cur_cst;	/* costs to nearest nodes on the network */
-    int nfnodes, ntnodes, fline, tline;
-    static struct line_pnts *APoints, *SPoints, *fPoints[2], *tPoints[2];
-    static struct ilist *LList;
-    static int first = 1;
-    int reachable, shortcut;
-    int i, j, fn = 0, tn = 0;
-
-    /* from/to_point_node is set if from/to point projected to line 
-     *falls exactly on node (shortcut -> fline == tline) */
-    int from_point_node = 0;
-    int to_point_node = 0;
-
-    G_debug(3, "Vect_net_shortest_path_coor()");
-
-    if (first) {
-	APoints = Vect_new_line_struct();
-	SPoints = Vect_new_line_struct();
-	fPoints[0] = Vect_new_line_struct();
-	fPoints[1] = Vect_new_line_struct();
-	tPoints[0] = Vect_new_line_struct();
-	tPoints[1] = Vect_new_line_struct();
-	LList = Vect_new_list();
-	first = 0;
-    }
-
-    /* Reset */
-    if (costs)
-	*costs = PORT_DOUBLE_MAX;
-    if (Points)
-	Vect_reset_line(Points);
-    if (fdist)
-	*fdist = 0;
-    if (tdist)
-	*tdist = 0;
-    if (List)
-	List->n_values = 0;
-    if (FPoints)
-	Vect_reset_line(FPoints);
-    if (TPoints)
-	Vect_reset_line(TPoints);
-    if (NodesList != NULL)
-	Vect_reset_list(NodesList);
-
-    /* Find nearest nodes */
-    fnode[0] = fnode[1] = tnode[0] = tnode[1] = 0;
-
-    nfnodes =
-	Vect_net_nearest_nodes(Map, fx, fy, fz, GV_FORWARD, fmax, &(fnode[0]),
-			       &(fnode[1]), &fline, &(fcosts[0]),
-			       &(fcosts[1]), fPoints[0], fPoints[1], fdist);
-    if (nfnodes == 0)
-	return 0;
-
-    if (nfnodes == 1 && fPoints[0]->n_points < 3) {
-        from_point_node = fnode[0];
-    } 
-
-    ntnodes =
-	Vect_net_nearest_nodes(Map, tx, ty, tz, GV_BACKWARD, tmax,
-			       &(tnode[0]), &(tnode[1]), &tline, &(tcosts[0]),
-			       &(tcosts[1]), tPoints[0], tPoints[1], tdist);
-    if (ntnodes == 0)
-	return 0;
-
-    if (ntnodes == 1 && tPoints[0]->n_points < 3) {
-        to_point_node = tnode[0];
-    } 
-
-
-    G_debug(3, "fline = %d tline = %d", fline, tline);
-
-    reachable = shortcut = 0;
-    cur_cst = PORT_DOUBLE_MAX;
-
-    /* It may happen, that 2 points are at the same line. */
-    /* TODO?: it could also happen that fline != tline but both points are on the same
-     * line if they fall on node but a different line was found. This case is correctly
-     * handled as normal non shortcut, but it could be added here. In that case 
-     * NodesList collection must be changed */
-    if (fline == tline && (nfnodes > 1 || ntnodes > 1)) {
-	double len, flen, tlen, c, fseg, tseg;
-	double fcx, fcy, fcz, tcx, tcy, tcz;
-
-	Vect_read_line(Map, APoints, NULL, fline);
-	len = Vect_line_length(APoints);
-
-	/* distance along the line */
-	fseg =
-	    Vect_line_distance(APoints, fx, fy, fz, 0, &fcx, &fcy, &fcz, NULL,
-			       NULL, &flen);
-	tseg =
-	    Vect_line_distance(APoints, tx, ty, tz, 0, &tcx, &tcy, &tcz, NULL,
-			       NULL, &tlen);
-
-	Vect_reset_line(SPoints);
-	if (flen == tlen) {
-	    cur_cst = 0;
-	    reachable = shortcut = 1;
-	}
-	else if (flen < tlen) {
-	    Vect_net_get_line_cost(Map, fline, GV_FORWARD, &c);
-	    if (c >= 0) {
-		cur_cst = c * (tlen - flen) / len;
-
-		Vect_append_point(SPoints, fx, fy, fz);
-		Vect_append_point(SPoints, fcx, fcy, fcz);
-		for (i = fseg; i < tseg; i++)
-		    Vect_append_point(SPoints, APoints->x[i], APoints->y[i],
-				      APoints->z[i]);
-
-		Vect_append_point(SPoints, tcx, tcy, tcz);
-		Vect_append_point(SPoints, tx, ty, tz);
-
-		reachable = shortcut = 1;
-	    }
-	}
-	else {			/* flen > tlen */
-	    Vect_net_get_line_cost(Map, fline, GV_BACKWARD, &c);
-	    if (c >= 0) {
-		cur_cst = c * (flen - tlen) / len;
-
-		Vect_append_point(SPoints, fx, fy, fz);
-		Vect_append_point(SPoints, fcx, fcy, fcz);
-		for (i = fseg - 1; i >= tseg; i--)
-		    Vect_append_point(SPoints, APoints->x[i], APoints->y[i],
-				      APoints->z[i]);
-
-		Vect_append_point(SPoints, tcx, tcy, tcz);
-		Vect_append_point(SPoints, tx, ty, tz);
-
-		reachable = shortcut = 1;
-	    }
-	}
-    }
-
-    /* Find the shortest variant from maximum 4 */
-    for (i = 0; i < nfnodes; i++) {
-	for (j = 0; j < ntnodes; j++) {
-	    double ncst, cst;
-	    int ret;
-
-	    G_debug(3, "i = %d fnode = %d j = %d tnode = %d", i, fnode[i], j,
-		    tnode[j]);
-
-	    ret =
-		Vect_net_shortest_path(Map, fnode[i], tnode[j], NULL, &ncst);
-	    if (ret == -1)
-		continue;	/* not reachable */
-
-	    cst = fcosts[i] + ncst + tcosts[j];
-	    if (reachable == 0 || cst < cur_cst) {
-		cur_cst = cst;
-		fn = i;
-		tn = j;
-		shortcut = 0;
-	    }
-	    reachable = 1;
-	}
-    }
-
-    G_debug(3, "reachable = %d shortcut = %d cur_cst = %f", reachable,
-	    shortcut, cur_cst);
-    if (reachable) {
-	if (shortcut) {
-	    if (Points)
-		Vect_append_points(Points, SPoints, GV_FORWARD);
-            if (NodesList) {
-                /* Check if from/to point projected to line falls on node and 
-                 *add it to the list */
-                if (from_point_node > 0)
-		    Vect_list_append(NodesList, from_point_node);
-
-                if (to_point_node > 0)
-		    Vect_list_append(NodesList, to_point_node);
-            }
-	}
-	else {
-            if (NodesList) {
-                /* it can happen that starting point falls on node but SP starts 
-                 * form the other node, add it in that case, 
-                 * similarly for to point below */
-                if (from_point_node > 0 && from_point_node != fnode[fn]) {
-                    Vect_list_append(NodesList, from_point_node);
-                }
-
-                /* add starting net SP search node */
-                Vect_list_append(NodesList, fnode[fn]);
-            }
-	    Vect_net_shortest_path(Map, fnode[fn], tnode[tn], LList,
-				   NULL);
-	    G_debug(3, "Number of lines %d", LList->n_values);
-
-	    if (Points)
-		Vect_append_points(Points, fPoints[fn], GV_FORWARD);
-
-	    if (FPoints)
-		Vect_append_points(FPoints, fPoints[fn], GV_FORWARD);
-
-	    for (i = 0; i < LList->n_values; i++) {
-		int line;
-
-		line = LList->value[i];
-		G_debug(3, "i = %d line = %d", i, line);
-
-		if (Points) {
-		    Vect_read_line(Map, APoints, NULL, abs(line));
-
-		    if (line > 0)
-			Vect_append_points(Points, APoints, GV_FORWARD);
-		    else
-			Vect_append_points(Points, APoints, GV_BACKWARD);
-		}
-                if (NodesList) {
-                    int node, node1, node2;
-
-                    Vect_get_line_nodes(Map, abs(line), &node1, &node2);
-                    /* add the second node, the first of first segmet was alread added */
-                    if (line > 0)
-			node = node2;
-                    else
-			node = node1;
-
-                    Vect_list_append(NodesList, node);
-                }
-
-		if (List)
-		    Vect_list_append(List, line);
-	    }
-
-	    if (Points)
-		Vect_append_points(Points, tPoints[tn], GV_FORWARD);
-
-	    if (TPoints)
-		Vect_append_points(TPoints, tPoints[tn], GV_FORWARD);
-
-            if (NodesList) {
-                if (to_point_node > 0 && to_point_node != tnode[tn]) {
-                    Vect_list_append(NodesList, to_point_node);
-                }
-            }
-	}
-
-	if (costs)
-	    *costs = cur_cst;
-    }
-
-    return reachable;
-}
diff --git a/lib/vector/Vlib/net_analyze.c b/lib/vector/Vlib/net_analyze.c
new file mode 100644
index 0000000..5a54f92
--- /dev/null
+++ b/lib/vector/Vlib/net_analyze.c
@@ -0,0 +1,1057 @@
+/*!
+ * \file lib/vector/Vlib/net_analyze.c
+ *
+ * \brief Vector library - releated fns for vector network analyses
+ *
+ * Higher level functions for reading/writing/manipulating vectors.
+ *
+ * (C) 2001-2009, 2014 by the GRASS Development Team
+ *
+ * This program is free software under the GNU General Public License
+ * (>=v2).  Read the file COPYING that comes with GRASS for details.
+ *
+ * \author Radim Blazek
+ * \author Stepan Turek stepan.turek seznam.cz (turns support)
+ */
+
+#include <grass/dbmi.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+
+static int From_node;		/* from node set in SP and used by clipper for first arc */
+
+static int clipper(dglGraph_s * pgraph,
+		   dglSPClipInput_s * pargIn,
+		   dglSPClipOutput_s * pargOut, void *pvarg)
+{				/* caller's pointer */
+    dglInt32_t cost;
+    dglInt32_t from;
+
+    G_debug(3, "Net: clipper()");
+
+    from = dglNodeGet_Id(pgraph, pargIn->pnNodeFrom);
+
+    G_debug(3, "  Edge = %d NodeFrom = %d NodeTo = %d edge cost = %d",
+	    (int)dglEdgeGet_Id(pgraph, pargIn->pnEdge),
+	    (int)from, (int)dglNodeGet_Id(pgraph, pargIn->pnNodeTo),
+	    (int)pargOut->nEdgeCost);
+
+    if (from != From_node) {	/* do not clip first */
+	if (dglGet_NodeAttrSize(pgraph) > 0) {
+	    memcpy(&cost, dglNodeGet_Attr(pgraph, pargIn->pnNodeFrom),
+		   sizeof(cost));
+	    if (cost == -1) {	/* closed, cannot go from this node except it is 'from' node */
+		G_debug(3, "  closed node");
+		return 1;
+	    }
+	    else {
+		G_debug(3, "  EdgeCost += %d (node)", (int)cost);
+		pargOut->nEdgeCost += cost;
+	    }
+	}
+    }
+    else {
+	G_debug(3, "  don't clip first node");
+    }
+
+    return 0;
+}
+
+/*!
+   \brief Converts shortest path result, which is calculated by DGLib on newtwork without turntable, into output format.
+ */
+static int convert_dgl_shortest_path_result(struct Map_info *Map,
+					    dglSPReport_s * pSPReport,
+					    struct ilist *List)
+{
+    int i, line;
+
+    Vect_reset_list(List);
+
+    for (i = 0; i < pSPReport->cArc; i++) {
+	line =
+	    dglEdgeGet_Id(&(Map->dgraph.graph_s), pSPReport->pArc[i].pnEdge);
+	G_debug(2, "From %ld to %ld - cost %ld user %d distance %ld", pSPReport->pArc[i].nFrom, pSPReport->pArc[i].nTo, dglEdgeGet_Cost(&(Map->dgraph.graph_s), pSPReport->pArc[i].pnEdge) / Map->dgraph.cost_multip,	/* this is the cost from clip() */
+		line, pSPReport->pArc[i].nDistance);
+	Vect_list_append(List, line);
+    }
+
+    return 0;
+}
+
+/*!
+   \brief Converts shortest path result, which is calculated by DGLib on newtwork with turntable, into output format.
+ */
+static int ttb_convert_dgl_shortest_path_result(struct Map_info *Map,
+						dglSPReport_s * pSPReport,
+						int tucfield,
+						struct ilist *List)
+{
+    int i, line_id, type, tucfield_idx;
+    int line_ucat;
+
+    Vect_reset_list(List);
+
+    tucfield_idx = Vect_cidx_get_field_index(Map, tucfield);
+
+    for (i = 0; i < pSPReport->cArc; i++) {
+	dglEdgeGet_Id(&(Map->dgraph.graph_s), pSPReport->pArc[i].pnEdge);
+
+	line_ucat =
+	    dglNodeGet_Id(&(Map->dgraph.graph_s),
+			  dglEdgeGet_Head(&(Map->dgraph.graph_s),
+					  pSPReport->pArc[i].pnEdge));
+
+	/* get standard ucat numbers (DGLib does not like negative node numbers) */
+	if (line_ucat % 2 == 1)
+	    line_ucat = ((line_ucat - 1) / -2);
+	else
+	    line_ucat = (line_ucat) / 2;
+
+	/* skip virtual nodes */
+	if (Vect_cidx_find_next
+	    (Map, tucfield_idx, abs(line_ucat), GV_LINE, 0, &type,
+	     &line_id) == -1)
+	    continue;
+
+	if (line_ucat < 0)
+	    line_id *= -1;
+
+	G_debug(2, "From %ld to %ld - cost %ld user %d distance %ld", pSPReport->pArc[i].nFrom, pSPReport->pArc[i].nTo, dglEdgeGet_Cost(&(Map->dgraph.graph_s), pSPReport->pArc[i].pnEdge) / Map->dgraph.cost_multip,	/* this is the cost from clip() */
+		line_ucat, pSPReport->pArc[i].nDistance);
+
+	Vect_list_append(List, line_id);
+    }
+
+    return 0;
+}
+
+/*!
+   \brief Finds shortest path on network using DGLib
+
+
+   \param Map vector map with build DGLib graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param from from node id in build the network
+   \param to to node in build the network
+   \param UseTtb the graph is build with/without turntable
+   \param tucfield layer with unique cats for turntable (relevant only when UseTtb = 1)
+ */
+static int find_shortest_path(struct Map_info *Map, int from, int to,
+			      struct ilist *List, double *cost, int UseTtb,
+			      int tucfield)
+{
+    int *pclip, cArc, nRet;
+    dglSPReport_s *pSPReport;
+    dglInt32_t nDistance;
+    int use_cache = 1;		/* set to 0 to disable dglib cache */
+
+    G_debug(3, "find_shortest_path(): from = %d, to = %d", from, to);
+
+    /* Note : if from == to dgl goes to nearest node and returns back (dgl feature) => 
+     *         check here for from == to */
+
+    /* Check if from and to are identical, otherwise dglib returns path to neares node and back! */
+    if (from == to) {
+	if (cost != NULL)
+	    *cost = 0;
+	return 0;
+    }
+
+    From_node = from;
+    pclip = NULL;
+    if (List != NULL) {
+	if (use_cache) {
+	    nRet =
+		dglShortestPath(&(Map->dgraph.graph_s), &pSPReport,
+				(dglInt32_t) from, (dglInt32_t) to, clipper,
+				pclip, &(Map->dgraph.spCache));
+	}
+	else {
+	    nRet =
+		dglShortestPath(&(Map->dgraph.graph_s), &pSPReport,
+				(dglInt32_t) from, (dglInt32_t) to, clipper,
+				pclip, NULL);
+	}
+    }
+    else {
+	if (use_cache) {
+	    nRet =
+		dglShortestDistance(&(Map->dgraph.graph_s), &nDistance,
+				    (dglInt32_t) from, (dglInt32_t) to,
+				    clipper, pclip, &(Map->dgraph.spCache));
+	}
+	else {
+	    nRet =
+		dglShortestDistance(&(Map->dgraph.graph_s), &nDistance,
+				    (dglInt32_t) from, (dglInt32_t) to,
+				    clipper, pclip, NULL);
+	}
+    }
+
+    if (nRet == 0) {
+	/* G_warning("Destination node %d is unreachable from node %d\n" , to , from); */
+	if (cost != NULL)
+	    *cost = PORT_DOUBLE_MAX;
+	return -1;
+    }
+    else if (nRet < 0) {
+	G_warning(_("dglShortestPath error: %s"),
+		  dglStrerror(&(Map->dgraph.graph_s)));
+	return -1;
+    }
+
+    if (List != NULL) {
+	if (UseTtb)
+	    ttb_convert_dgl_shortest_path_result(Map, pSPReport, tucfield,
+						 List);
+	else
+	    convert_dgl_shortest_path_result(Map, pSPReport, List);
+    }
+
+    if (cost != NULL) {
+	if (List != NULL)
+	    *cost = (double)pSPReport->nDistance / Map->dgraph.cost_multip;
+	else
+	    *cost = (double)nDistance / Map->dgraph.cost_multip;
+    }
+
+    if (List != NULL) {
+	cArc = pSPReport->cArc;
+	dglFreeSPReport(&(Map->dgraph.graph_s), pSPReport);
+    }
+    else
+	cArc = 0;
+
+    return cArc;
+}
+
+/*!
+   \brief Find shortest path on network.
+
+   Costs for 'from' and 'to' nodes are not considered (SP found even if
+   'from' or 'to' are 'closed' (costs = -1) and costs of these
+   nodes are not added to SP costs result.
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param from start of the path
+   \param from_type if 0 - node id (intersection), if 1 - line unique cat 
+   \param to end of the path
+   \param to_type if 0 - node id (intersection), if 1 - line unique cat
+   \param tucfield field with unique categories used in the turntable 
+   \param[out] List list of line ids (path)
+   \param[out] cost costs value
+
+   \return number of segments
+   \return 0 is correct for from = to, or List == NULL ? sum of costs is better return value,
+   \return -1 : destination unreachable
+
+ */
+
+int
+Vect_net_ttb_shortest_path(struct Map_info *Map, int from, int from_type,
+			   int to, int to_type,
+			   int tucfield, struct ilist *List, double *cost)
+{
+    double x, y, z;
+    struct bound_box box;
+    struct boxlist *box_List;
+    struct line_cats *Cats;
+    int f, t;
+    int i_line, line, type, cfound;
+
+    box_List = Vect_new_boxlist(0);
+    Cats = Vect_new_cats_struct();
+
+    if (from_type == 0) {	/* TODO duplicite code with to_type, move into function */
+	/* select points at node */
+	Vect_get_node_coor(Map, from, &x, &y, &z);
+	box.E = box.W = x;
+	box.N = box.S = y;
+	box.T = box.B = z;
+	Vect_select_lines_by_box(Map, &box, GV_POINT, box_List);
+
+	cfound = 0;
+
+	for (i_line = 0; i_line < box_List->n_values; i_line++) {
+	    line = box_List->id[i_line];
+
+	    type = Vect_read_line(Map, NULL, Cats, line);
+	    if (!(type & GV_POINT))
+		continue;
+	    if (Vect_cat_get(Cats, tucfield, &f)) {
+		++cfound;
+		break;
+	    }
+	}
+	if (!cfound)
+	    G_fatal_error(_
+			  ("Unable to find point with defined unique category for node <%d>."),
+			  from);
+	else if (cfound > 1)
+	    G_warning(_
+		      ("There exists more than one point on node <%d> with unique category in field  <%d>.\n"
+		       "The unique category layer may not be valid."),
+		      tucfield, from);
+
+	G_debug(2, "from node = %d, unique cat = %d ", from, f);
+	f = f * 2;
+    }
+    else {
+	if (from < 0)
+	    f = from * -2 + 1;
+	else
+	    f = from * 2;
+	G_debug(2, "from edge unique cat = %d", from);
+    }
+
+    if (to_type == 0) {
+	/* select points at node */
+	Vect_get_node_coor(Map, to, &x, &y, &z);
+	box.E = box.W = x;
+	box.N = box.S = y;
+	box.T = box.B = z;
+	Vect_select_lines_by_box(Map, &box, GV_POINT, box_List);
+
+	cfound = 0;
+
+	for (i_line = 0; i_line < box_List->n_values; i_line++) {
+	    line = box_List->id[i_line];
+	    type = Vect_read_line(Map, NULL, Cats, line);
+	    if (!(type & GV_POINT))
+		continue;
+	    if (Vect_cat_get(Cats, tucfield, &t)) {
+		cfound = 1;
+		break;
+	    }
+	}
+	if (!cfound)
+	    G_fatal_error(_
+			  ("Unable to find point with defined unique category for node <%d>."),
+			  to);
+	else if (cfound > 1)
+	    G_warning(_
+		      ("There exists more than one point on node <%d> with unique category in field  <%d>.\n"
+		       "The unique category layer may not be valid."),
+		      tucfield, to);
+
+	G_debug(2, "to node = %d, unique cat = %d ", to, t);
+	t = t * 2 + 1;
+    }
+    else {
+	if (to < 0)
+	    t = to * -2 + 1;
+	else
+	    t = to * 2;
+	G_debug(2, "to edge unique cat = %d", to);
+    }
+
+    Vect_destroy_boxlist(box_List);
+    Vect_destroy_cats_struct(Cats);
+
+    return find_shortest_path(Map, f, t, List, cost, 1, tucfield);
+}
+
+/*!
+   \brief Find shortest path.
+
+   Costs for 'from' and 'to' nodes are not considered (SP found even if
+   'from' or 'to' are 'closed' (costs = -1) and costs of these
+   nodes are not added to SP costs result.
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param from from node
+   \param to to node
+   \param[out] List list of line ids (path)
+   \param[out] cost costs value
+
+   \return number of segments
+   \return 0 is correct for from = to, or List == NULL ? sum of costs is better return value,
+   \return -1 : destination unreachable
+
+ */
+int
+Vect_net_shortest_path(struct Map_info *Map, int from, int to,
+		       struct ilist *List, double *cost)
+{
+    return find_shortest_path(Map, from, to, List, cost, 0, -1);
+}
+
+/*!
+   \brief Get graph structure
+
+   Graph is built by Vect_net_build_graph().
+
+   Returns NULL when graph is not built.
+
+   \param Map pointer to Map_info struct
+
+   \return pointer to dglGraph_s struct or NULL
+ */
+dglGraph_s *Vect_net_get_graph(struct Map_info * Map)
+{
+    return &(Map->dgraph.graph_s);
+}
+
+/*! 
+   \brief Returns in cost for given direction in *cost.
+
+   cost is set to -1 if closed.
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param line line id
+   \param direction direction (GV_FORWARD, GV_BACKWARD) 
+   \param[out] cost
+
+   \return 1 OK
+   \return 0 does not exist (was not inserted)
+ */
+int
+Vect_net_get_line_cost(const struct Map_info *Map, int line, int direction,
+		       double *cost)
+{
+    /* dglInt32_t *pEdge; */
+
+    G_debug(5, "Vect_net_get_line_cost(): line = %d, dir = %d", line,
+	    direction);
+
+    if (direction == GV_FORWARD) {
+	/* V1 has no index by line-id -> array used */
+	/*
+	   pEdge = dglGetEdge(&(Map->dgraph.graph_s), line);
+	   if (pEdge == NULL)
+	   return 0;
+	   *cost = (double) dglEdgeGet_Cost(&(Map->dgraph.graph_s), pEdge);
+	 */
+	if (Map->dgraph.edge_fcosts[line] == -1) {
+	    *cost = -1;
+	    return 0;
+	}
+	else
+	    *cost = Map->dgraph.edge_fcosts[line];
+    }
+    else if (direction == GV_BACKWARD) {
+	/*
+	   pEdge = dglGetEdge(&(Map->dgraph.graph_s), -line);
+	   if (pEdge == NULL) 
+	   return 0;
+	   *cost = (double) dglEdgeGet_Cost(&(Map->dgraph.graph_s), pEdge);
+	 */
+	if (Map->dgraph.edge_bcosts[line] == -1) {
+	    *cost = -1;
+	    return 0;
+	}
+	else
+	    *cost = Map->dgraph.edge_bcosts[line];
+	G_debug(5, "Vect_net_get_line_cost(): edge_bcosts = %f",
+		Map->dgraph.edge_bcosts[line]);
+    }
+    else {
+	G_fatal_error(_("Wrong line direction in Vect_net_get_line_cost()"));
+    }
+
+    return 1;
+}
+
+/*!
+   \brief Get cost of node
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param node node id
+   \param[out] cost costs value
+
+   \return 1
+ */
+int Vect_net_get_node_cost(const struct Map_info *Map, int node, double *cost)
+{
+    G_debug(3, "Vect_net_get_node_cost(): node = %d", node);
+
+    *cost = Map->dgraph.node_costs[node];
+
+    G_debug(3, "  -> cost = %f", *cost);
+
+    return 1;
+}
+
+/*!
+   \brief Find nearest node(s) on network. 
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param x,y,z point coordinates (z coordinate NOT USED !)
+   \param direction (GV_FORWARD - from point to net, GV_BACKWARD - from net to point)
+   \param maxdist maximum distance to the network
+   \param[out] node1 pointer where to store the node number (or NULL)
+   \param[out] node2 pointer where to store the node number (or NULL)
+   \param[out] ln    pointer where to store the nearest line number (or NULL)
+   \param[out] costs1 pointer where to store costs on nearest line to node1 (not costs from x,y,z to the line) (or NULL)
+   \param[out] costs2 pointer where to store costs on nearest line to node2 (not costs from x,y,z to the line) (or NULL)
+   \param[out] Points1 pointer to structure where to store vertices on nearest line to node1 (or NULL)
+   \param[out] Points2 pointer to structure where to store vertices on nearest line to node2 (or NULL)
+   \param[out] pointer where to distance to the line (or NULL)
+   \param[out] distance
+
+   \return number of nodes found (0,1,2)
+ */
+int Vect_net_nearest_nodes(struct Map_info *Map,
+			   double x, double y, double z,
+			   int direction, double maxdist,
+			   int *node1, int *node2, int *ln, double *costs1,
+			   double *costs2, struct line_pnts *Points1,
+			   struct line_pnts *Points2, double *distance)
+{
+    int line, n1, n2, nnodes;
+    int npoints;
+    int segment;		/* nearest line segment (first is 1) */
+    static struct line_pnts *Points = NULL;
+    double cx, cy, cz, c1, c2;
+    double along;		/* distance along the line to nearest point */
+    double length;
+
+    G_debug(3, "Vect_net_nearest_nodes() x = %f y = %f", x, y);
+
+    /* Reset */
+    if (node1)
+	*node1 = 0;
+    if (node2)
+	*node2 = 0;
+    if (ln)
+	*ln = 0;
+    if (costs1)
+	*costs1 = PORT_DOUBLE_MAX;
+    if (costs2)
+	*costs2 = PORT_DOUBLE_MAX;
+    if (Points1)
+	Vect_reset_line(Points1);
+    if (Points2)
+	Vect_reset_line(Points2);
+    if (distance)
+	*distance = PORT_DOUBLE_MAX;
+
+    if (!Points)
+	Points = Vect_new_line_struct();
+
+    /* Find nearest line */
+    line = Vect_find_line(Map, x, y, z, Map->dgraph.line_type, maxdist, 0, 0);
+
+    if (line < 1)
+	return 0;
+
+    Vect_read_line(Map, Points, NULL, line);
+    npoints = Points->n_points;
+    Vect_get_line_nodes(Map, line, &n1, &n2);
+
+    segment =
+	Vect_line_distance(Points, x, y, z, 0, &cx, &cy, &cz, distance, NULL,
+			   &along);
+
+    G_debug(4, "line = %d n1 = %d n2 = %d segment = %d", line, n1, n2,
+	    segment);
+
+    /* Check first or last point and return one node in that case */
+    G_debug(4, "cx = %f cy = %f first = %f %f last = %f %f", cx, cy,
+	    Points->x[0], Points->y[0], Points->x[npoints - 1],
+	    Points->y[npoints - 1]);
+
+    if (Points->x[0] == cx && Points->y[0] == cy) {
+	if (node1)
+	    *node1 = n1;
+	if (ln)
+	    *ln = line;
+	if (costs1)
+	    *costs1 = 0;
+	if (Points1) {
+	    Vect_append_point(Points1, x, y, z);
+	    Vect_append_point(Points1, cx, cy, cz);
+	}
+	G_debug(3, "first node nearest");
+	return 1;
+    }
+    if (Points->x[npoints - 1] == cx && Points->y[npoints - 1] == cy) {
+	if (node1)
+	    *node1 = n2;
+	if (ln)
+	    *ln = line;
+	if (costs1)
+	    *costs1 = 0;
+	if (Points1) {
+	    Vect_append_point(Points1, x, y, z);
+	    Vect_append_point(Points1, cx, cy, cz);
+	}
+	G_debug(3, "last node nearest");
+	return 1;
+    }
+
+    nnodes = 2;
+
+    /* c1 - costs to get from/to the first vertex */
+    /* c2 - costs to get from/to the last vertex */
+    if (direction == GV_FORWARD) {	/* from point to net */
+	Vect_net_get_line_cost(Map, line, GV_BACKWARD, &c1);
+	Vect_net_get_line_cost(Map, line, GV_FORWARD, &c2);
+    }
+    else {
+	Vect_net_get_line_cost(Map, line, GV_FORWARD, &c1);
+	Vect_net_get_line_cost(Map, line, GV_BACKWARD, &c2);
+    }
+
+    if (c1 < 0)
+	nnodes--;
+    if (c2 < 0)
+	nnodes--;
+    if (nnodes == 0)
+	return 0;		/* both directions closed */
+
+    length = Vect_line_length(Points);
+
+    if (ln)
+	*ln = line;
+
+    if (nnodes == 1 && c1 < 0) {	/* first direction is closed, return node2 as node1 */
+	if (node1)
+	    *node1 = n2;
+
+	if (costs1) {		/* to node 2, i.e. forward */
+	    *costs1 = c2 * (length - along) / length;
+	}
+
+	if (Points1) {		/* to node 2, i.e. forward */
+	    int i;
+
+	    if (direction == GV_FORWARD) {	/* from point to net */
+		Vect_append_point(Points1, x, y, z);
+		Vect_append_point(Points1, cx, cy, cz);
+		for (i = segment; i < npoints; i++)
+		    Vect_append_point(Points1, Points->x[i], Points->y[i],
+				      Points->z[i]);
+	    }
+	    else {
+		for (i = npoints - 1; i >= segment; i--)
+		    Vect_append_point(Points1, Points->x[i], Points->y[i],
+				      Points->z[i]);
+
+		Vect_append_point(Points1, cx, cy, cz);
+		Vect_append_point(Points1, x, y, z);
+	    }
+	}
+    }
+    else {
+	if (node1)
+	    *node1 = n1;
+	if (node2)
+	    *node2 = n2;
+
+	if (costs1) {		/* to node 1, i.e. backward */
+	    *costs1 = c1 * along / length;
+	}
+
+	if (costs2) {		/* to node 2, i.e. forward */
+	    *costs2 = c2 * (length - along) / length;
+	}
+
+	if (Points1) {		/* to node 1, i.e. backward */
+	    int i;
+
+	    if (direction == GV_FORWARD) {	/* from point to net */
+		Vect_append_point(Points1, x, y, z);
+		Vect_append_point(Points1, cx, cy, cz);
+		for (i = segment - 1; i >= 0; i--)
+		    Vect_append_point(Points1, Points->x[i], Points->y[i],
+				      Points->z[i]);
+	    }
+	    else {
+		for (i = 0; i < segment; i++)
+		    Vect_append_point(Points1, Points->x[i], Points->y[i],
+				      Points->z[i]);
+
+		Vect_append_point(Points1, cx, cy, cz);
+		Vect_append_point(Points1, x, y, z);
+	    }
+	}
+
+	if (Points2) {		/* to node 2, i.e. forward */
+	    int i;
+
+	    if (direction == GV_FORWARD) {	/* from point to net */
+		Vect_append_point(Points2, x, y, z);
+		Vect_append_point(Points2, cx, cy, cz);
+		for (i = segment; i < npoints; i++)
+		    Vect_append_point(Points2, Points->x[i], Points->y[i],
+				      Points->z[i]);
+	    }
+	    else {
+		for (i = npoints - 1; i >= segment; i--)
+		    Vect_append_point(Points2, Points->x[i], Points->y[i],
+				      Points->z[i]);
+
+		Vect_append_point(Points2, cx, cy, cz);
+		Vect_append_point(Points2, x, y, z);
+	    }
+	}
+    }
+
+    return nnodes;
+}
+
+/*!
+   \brief Find shortest path on network between 2 points given by coordinates. 
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param fx,fy,fz from point x coordinate (z ignored)
+   \param tx,ty,tz to point x coordinate (z ignored)
+   \param fmax maximum distance to the network from 'from'
+   \param tmax maximum distance to the network from 'to'
+   \param UseTtb the graph is build with/without turntable
+   \param tucfield field with unique categories used in the turntable 
+   \param costs pointer where to store costs on the network (or NULL)
+   \param Points pointer to the structure where to store vertices of shortest path (or NULL)
+   \param List pointer to the structure where list of lines on the network is stored (or NULL)
+   \param NodesList pointer to the structure where list of nodes on the network is stored (or NULL)
+   \param FPoints pointer to the structure where to store line from 'from' to first network node (or NULL)
+   \param TPoints pointer to the structure where to store line from last network node to 'to' (or NULL)
+   \param fdist distance from 'from' to the net (or NULL)
+   \param tdist distance from 'to' to the net (or NULL)
+
+   \return 1 OK, 0 not reachable
+ */
+static int
+find_shortest_path_coor(struct Map_info *Map,
+			double fx, double fy, double fz, double tx,
+			double ty, double tz, double fmax, double tmax,
+			int UseTtb, int tucfield,
+			double *costs, struct line_pnts *Points,
+			struct ilist *List, struct ilist *NodesList,
+			struct line_pnts *FPoints,
+			struct line_pnts *TPoints, double *fdist,
+			double *tdist)
+{
+    int fnode[2], tnode[2];	/* nearest nodes, *node[1] is 0 if only one was found */
+    double fcosts[2], tcosts[2], cur_cst;	/* costs to nearest nodes on the network */
+    int nfnodes, ntnodes, fline, tline;
+    static struct line_pnts *APoints, *SPoints, *fPoints[2], *tPoints[2];
+    static struct ilist *LList;
+    static int first = 1;
+    int reachable, shortcut;
+    int i, j, fn = 0, tn = 0;
+
+    /* from/to_point_node is set if from/to point projected to line 
+     *falls exactly on node (shortcut -> fline == tline) */
+    int from_point_node = 0;
+    int to_point_node = 0;
+
+    G_debug(3, "Vect_net_shortest_path_coor()");
+
+    if (first) {
+	APoints = Vect_new_line_struct();
+	SPoints = Vect_new_line_struct();
+	fPoints[0] = Vect_new_line_struct();
+	fPoints[1] = Vect_new_line_struct();
+	tPoints[0] = Vect_new_line_struct();
+	tPoints[1] = Vect_new_line_struct();
+	LList = Vect_new_list();
+	first = 0;
+    }
+
+    /* Reset */
+    if (costs)
+	*costs = PORT_DOUBLE_MAX;
+    if (Points)
+	Vect_reset_line(Points);
+    if (fdist)
+	*fdist = 0;
+    if (tdist)
+	*tdist = 0;
+    if (List)
+	List->n_values = 0;
+    if (FPoints)
+	Vect_reset_line(FPoints);
+    if (TPoints)
+	Vect_reset_line(TPoints);
+    if (NodesList != NULL)
+	Vect_reset_list(NodesList);
+
+    /* Find nearest nodes */
+    fnode[0] = fnode[1] = tnode[0] = tnode[1] = 0;
+
+    nfnodes =
+	Vect_net_nearest_nodes(Map, fx, fy, fz, GV_FORWARD, fmax, &(fnode[0]),
+			       &(fnode[1]), &fline, &(fcosts[0]),
+			       &(fcosts[1]), fPoints[0], fPoints[1], fdist);
+    if (nfnodes == 0)
+	return 0;
+
+    if (nfnodes == 1 && fPoints[0]->n_points < 3) {
+	from_point_node = fnode[0];
+    }
+
+    ntnodes =
+	Vect_net_nearest_nodes(Map, tx, ty, tz, GV_BACKWARD, tmax,
+			       &(tnode[0]), &(tnode[1]), &tline, &(tcosts[0]),
+			       &(tcosts[1]), tPoints[0], tPoints[1], tdist);
+    if (ntnodes == 0)
+	return 0;
+
+    if (ntnodes == 1 && tPoints[0]->n_points < 3) {
+	to_point_node = tnode[0];
+    }
+
+
+    G_debug(3, "fline = %d tline = %d", fline, tline);
+
+    reachable = shortcut = 0;
+    cur_cst = PORT_DOUBLE_MAX;
+
+    /* It may happen, that 2 points are at the same line. */
+    /* TODO?: it could also happen that fline != tline but both points are on the same
+     * line if they fall on node but a different line was found. This case is correctly
+     * handled as normal non shortcut, but it could be added here. In that case 
+     * NodesList collection must be changed */
+    if (fline == tline && (nfnodes > 1 || ntnodes > 1)) {
+	double len, flen, tlen, c, fseg, tseg;
+	double fcx, fcy, fcz, tcx, tcy, tcz;
+
+	Vect_read_line(Map, APoints, NULL, fline);
+	len = Vect_line_length(APoints);
+
+	/* distance along the line */
+	fseg =
+	    Vect_line_distance(APoints, fx, fy, fz, 0, &fcx, &fcy, &fcz, NULL,
+			       NULL, &flen);
+	tseg =
+	    Vect_line_distance(APoints, tx, ty, tz, 0, &tcx, &tcy, &tcz, NULL,
+			       NULL, &tlen);
+
+	Vect_reset_line(SPoints);
+	if (flen == tlen) {
+	    cur_cst = 0;
+	    reachable = shortcut = 1;
+	}
+	else if (flen < tlen) {
+	    Vect_net_get_line_cost(Map, fline, GV_FORWARD, &c);
+	    if (c >= 0) {
+		cur_cst = c * (tlen - flen) / len;
+
+		Vect_append_point(SPoints, fx, fy, fz);
+		Vect_append_point(SPoints, fcx, fcy, fcz);
+		for (i = fseg; i < tseg; i++)
+		    Vect_append_point(SPoints, APoints->x[i], APoints->y[i],
+				      APoints->z[i]);
+
+		Vect_append_point(SPoints, tcx, tcy, tcz);
+		Vect_append_point(SPoints, tx, ty, tz);
+
+		reachable = shortcut = 1;
+	    }
+	}
+	else {			/* flen > tlen */
+	    Vect_net_get_line_cost(Map, fline, GV_BACKWARD, &c);
+	    if (c >= 0) {
+		cur_cst = c * (flen - tlen) / len;
+
+		Vect_append_point(SPoints, fx, fy, fz);
+		Vect_append_point(SPoints, fcx, fcy, fcz);
+		for (i = fseg - 1; i >= tseg; i--)
+		    Vect_append_point(SPoints, APoints->x[i], APoints->y[i],
+				      APoints->z[i]);
+
+		Vect_append_point(SPoints, tcx, tcy, tcz);
+		Vect_append_point(SPoints, tx, ty, tz);
+
+		reachable = shortcut = 1;
+	    }
+	}
+    }
+
+    /* Find the shortest variant from maximum 4 */
+    for (i = 0; i < nfnodes; i++) {
+	for (j = 0; j < ntnodes; j++) {
+	    double ncst, cst;
+	    int ret;
+
+	    G_debug(3, "i = %d fnode = %d j = %d tnode = %d", i, fnode[i], j,
+		    tnode[j]);
+
+	    if (UseTtb)
+		ret =
+		    Vect_net_ttb_shortest_path(Map, fnode[i], 0, tnode[j], 0,
+					       tucfield, NULL, &ncst);
+	    else
+		ret =
+		    Vect_net_shortest_path(Map, fnode[i], tnode[j], NULL,
+					   &ncst);
+	    if (ret == -1)
+		continue;	/* not reachable */
+
+	    cst = fcosts[i] + ncst + tcosts[j];
+	    if (reachable == 0 || cst < cur_cst) {
+		cur_cst = cst;
+		fn = i;
+		tn = j;
+		shortcut = 0;
+	    }
+	    reachable = 1;
+	}
+    }
+
+    G_debug(3, "reachable = %d shortcut = %d cur_cst = %f", reachable,
+	    shortcut, cur_cst);
+    if (reachable) {
+	if (shortcut) {
+	    if (Points)
+		Vect_append_points(Points, SPoints, GV_FORWARD);
+	    if (NodesList) {
+		/* Check if from/to point projected to line falls on node and 
+		 *add it to the list */
+		if (from_point_node > 0)
+		    Vect_list_append(NodesList, from_point_node);
+
+		if (to_point_node > 0)
+		    Vect_list_append(NodesList, to_point_node);
+	    }
+	}
+	else {
+	    if (NodesList) {
+		/* it can happen that starting point falls on node but SP starts 
+		 * form the other node, add it in that case, 
+		 * similarly for to point below */
+		if (from_point_node > 0 && from_point_node != fnode[fn]) {
+		    Vect_list_append(NodesList, from_point_node);
+		}
+
+		/* add starting net SP search node */
+		Vect_list_append(NodesList, fnode[fn]);
+	    }
+
+	    if (UseTtb)
+		Vect_net_ttb_shortest_path(Map, fnode[fn], 0, tnode[tn], 0,
+					   tucfield, LList, NULL);
+	    else
+		Vect_net_shortest_path(Map, fnode[fn], tnode[tn], LList,
+				       NULL);
+
+	    G_debug(3, "Number of lines %d", LList->n_values);
+
+	    if (Points)
+		Vect_append_points(Points, fPoints[fn], GV_FORWARD);
+
+	    if (FPoints)
+		Vect_append_points(FPoints, fPoints[fn], GV_FORWARD);
+
+	    for (i = 0; i < LList->n_values; i++) {
+		int line;
+
+		line = LList->value[i];
+		G_debug(3, "i = %d line = %d", i, line);
+
+		if (Points) {
+		    Vect_read_line(Map, APoints, NULL, abs(line));
+
+		    if (line > 0)
+			Vect_append_points(Points, APoints, GV_FORWARD);
+		    else
+			Vect_append_points(Points, APoints, GV_BACKWARD);
+		}
+		if (NodesList) {
+		    int node, node1, node2;
+
+		    Vect_get_line_nodes(Map, abs(line), &node1, &node2);
+		    /* add the second node, the first of first segmet was alread added */
+		    if (line > 0)
+			node = node2;
+		    else
+			node = node1;
+
+		    Vect_list_append(NodesList, node);
+		}
+
+		if (List)
+		    Vect_list_append(List, line);
+	    }
+
+	    if (Points)
+		Vect_append_points(Points, tPoints[tn], GV_FORWARD);
+
+	    if (TPoints)
+		Vect_append_points(TPoints, tPoints[tn], GV_FORWARD);
+
+	    if (NodesList) {
+		if (to_point_node > 0 && to_point_node != tnode[tn]) {
+		    Vect_list_append(NodesList, to_point_node);
+		}
+	    }
+	}
+
+	if (costs)
+	    *costs = cur_cst;
+    }
+
+    return reachable;
+}
+
+/*!
+   \brief Find shortest path on network between 2 points given by coordinates. 
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param fx,fy,fz from point x coordinate (z ignored)
+   \param tx,ty,tz to point x coordinate (z ignored)
+   \param fmax maximum distance to the network from 'from'
+   \param tmax maximum distance to the network from 'to'
+   \param costs pointer where to store costs on the network (or NULL)
+   \param Points pointer to the structure where to store vertices of shortest path (or NULL)
+   \param List pointer to the structure where list of lines on the network is stored (or NULL)
+   \param NodesList pointer to the structure where list of nodes on the network is stored (or NULL)
+   \param FPoints pointer to the structure where to store line from 'from' to first network node (or NULL)
+   \param TPoints pointer to the structure where to store line from last network node to 'to' (or NULL)
+   \param fdist distance from 'from' to the net (or NULL)
+   \param tdist distance from 'to' to the net (or NULL)
+
+   \return 1 OK, 0 not reachable
+ */
+int
+Vect_net_shortest_path_coor(struct Map_info *Map,
+			    double fx, double fy, double fz, double tx,
+			    double ty, double tz, double fmax, double tmax,
+			    double *costs, struct line_pnts *Points,
+			    struct ilist *List, struct ilist *NodesList,
+			    struct line_pnts *FPoints,
+			    struct line_pnts *TPoints, double *fdist,
+			    double *tdist)
+{
+    return find_shortest_path_coor(Map, fx, fy, fz, tx, ty, tz, fmax, tmax, 0,
+				   0, costs, Points, List, NodesList,
+				   FPoints, TPoints, fdist, tdist);
+}
+
+/*!
+   \brief Find shortest path on network with turntable between 2 points given by coordinates. 
+
+   \param Map vector map with build graph (see Vect_net_ttb_build_graph and Vect_net_build_graph)
+   \param fx,fy,fz from point x coordinate (z ignored)
+   \param tx,ty,tz to point x coordinate (z ignored)
+   \param fmax maximum distance to the network from 'from'
+   \param tmax maximum distance to the network from 'to'
+   \param tucfield field with unique categories used in the turntable 
+   \param costs pointer where to store costs on the network (or NULL)
+   \param Points pointer to the structure where to store vertices of shortest path (or NULL)
+   \param List pointer to the structure where list of lines on the network is stored (or NULL)
+   \param NodesList pointer to the structure where list of nodes on the network is stored (or NULL)
+   \param FPoints pointer to the structure where to store line from 'from' to first network node (or NULL)
+   \param TPoints pointer to the structure where to store line from last network node to 'to' (or NULL)
+   \param fdist distance from 'from' to the net (or NULL)
+   \param tdist distance from 'to' to the net (or NULL)
+
+   \return 1 OK, 0 not reachable
+ */
+int
+Vect_net_ttb_shortest_path_coor(struct Map_info *Map,
+				double fx, double fy, double fz, double tx,
+				double ty, double tz, double fmax,
+				double tmax, int tucfield,
+				double *costs, struct line_pnts *Points,
+				struct ilist *List, struct ilist *NodesList,
+				struct line_pnts *FPoints,
+				struct line_pnts *TPoints, double *fdist,
+				double *tdist)
+{
+    return find_shortest_path_coor(Map, fx, fy, fz, tx, ty, tz, fmax, tmax,
+				   1, tucfield, costs, Points, List,
+				   NodesList, FPoints, TPoints, fdist, tdist);
+}
diff --git a/lib/vector/Vlib/net_build.c b/lib/vector/Vlib/net_build.c
new file mode 100644
index 0000000..debc487
--- /dev/null
+++ b/lib/vector/Vlib/net_build.c
@@ -0,0 +1,1076 @@
+/*!
+ * \file lib/vector/Vlib/net_build.c
+ *
+ * \brief Vector library - releated fns for vector network building
+ *
+ * Higher level functions for reading/writing/manipulating vectors.
+ *
+ * (C) 2001-2009, 2014 by the GRASS Development Team
+ *
+ * This program is free software under the GNU General Public License
+ * (>=v2).  Read the file COPYING that comes with GRASS for details.
+ *
+ * \author Radim Blazek
+ * \author Stepan Turek stepan.turek seznam.cz (turns support)
+ */
+
+#include <grass/dbmi.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+
+/*!
+   \brief Build network graph with turntable.
+
+   Internal format for edge costs is integer, costs are multiplied
+   before conversion to int by 1000 and for lengths LL without geo flag by 1000000.
+   The same multiplication factor is used for nodes.
+   Costs in database column may be 'integer' or 'double precision' number >= 0
+   or -1 for infinity i.e. arc or node is closed and cannot be traversed
+   If record in table is not found for arcs, costs for arc are set to 0.
+   If record in table is not found for node, costs for node are set to 0.
+
+   \param Map vector map
+   \param ltype line type for arcs
+   \param afield arc costs field (if 0, use length)
+   \param nfield node costs field (if 0, do not use node costs)
+   \param tfield field where turntable is attached 
+   \param tucfield field with unique categories used in the turntable 
+   \param afcol column with forward costs for arc
+   \param abcol column with backward costs for arc (if NULL, back costs = forward costs), 
+   \param ncol column with costs for nodes (if NULL, do not use node costs), 
+   \param geo use geodesic calculation for length (LL), 
+   \param algorithm not used (in future code for algorithm)
+
+   \return 0 on success, 1 on error
+ */
+
+int
+Vect_net_ttb_build_graph(struct Map_info *Map,
+			 int ltype,
+			 int afield,
+			 int nfield,
+			 int tfield,
+			 int tucfield,
+			 const char *afcol,
+			 const char *abcol,
+			 const char *ncol, int geo, int algorithm)
+{
+    /* TODO very long function, split into smaller ones */
+    int i, j, from, to, line, nlines, nnodes, ret, type, cat, skipped, cfound;
+    struct line_pnts *Points;
+    struct line_cats *Cats;
+    double dcost, bdcost, ll;
+    int cost, bcost;
+    dglGraph_s *gr;
+    dglInt32_t opaqueset[16] =
+	{ 360000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+    struct field_info *Fi;
+    dbDriver *driver = NULL;
+    dbDriver *ttbdriver = NULL;
+    dbHandle handle;
+    dbString stmt;
+    dbColumn *Column;
+    dbCatValArray fvarr, bvarr;
+    int fctype = 0, bctype = 0, nrec, nturns;
+
+    int ln_cat, nnode_lns, i_line, line_id, i_virt_edge;
+    struct line_cats *ln_Cats;
+    double x, y, z;
+    struct bound_box box;
+    struct boxlist *List;
+
+    dglInt32_t dgl_cost = cost;
+
+    /*TODO attributes of turntable shoud be stored in one place */
+    const char *tcols[] = { "cat", "ln_from", "ln_to", "cost", "isec", NULL
+    };
+    dbCatValArray tvarrs[5];
+    int tctype[5] = { 0 };
+    int tucfield_idx;
+
+    int t, f;
+    int node_pt_id, turn_cat, tucfound;
+    int isec;
+
+    /* TODO int costs -> double (waiting for dglib) */
+    G_debug(1, "Vect_net_ttb_build_graph(): "
+	    "ltype = %d, afield = %d, nfield = %d, tfield = %d, tucfield = %d ",
+	    ltype, afield, nfield, tfield, tucfield);
+    G_debug(1, "    afcol = %s, abcol = %s, ncol = %s", afcol, abcol, ncol);
+
+    G_message(_("Building graph..."));
+
+    Map->dgraph.line_type = ltype;
+
+    Points = Vect_new_line_struct();
+    Cats = Vect_new_cats_struct();
+
+    ll = 0;
+    if (G_projection() == 3)
+	ll = 1;			/* LL */
+
+    if (afcol == NULL && ll && !geo)
+	Map->dgraph.cost_multip = 1000000;
+    else
+	Map->dgraph.cost_multip = 1000;
+
+    nlines = Vect_get_num_lines(Map);
+    nnodes = Vect_get_num_nodes(Map);
+
+    gr = &(Map->dgraph.graph_s);
+
+    /* Allocate space for costs, later replace by functions reading costs from graph */
+    Map->dgraph.edge_fcosts =
+	(double *)G_malloc((nlines + 1) * sizeof(double));
+    Map->dgraph.edge_bcosts =
+	(double *)G_malloc((nlines + 1) * sizeof(double));
+    Map->dgraph.node_costs =
+	(double *)G_malloc((nnodes + 1) * sizeof(double));
+
+    /* Set to -1 initially */
+    for (i = 1; i <= nlines; i++) {
+	Map->dgraph.edge_fcosts[i] = -1;	/* forward */
+	Map->dgraph.edge_bcosts[i] = -1;	/* backward */
+    }
+    for (i = 1; i <= nnodes; i++) {
+	Map->dgraph.node_costs[i] = 0;
+    }
+
+    dglInitialize(gr, (dglByte_t) 1, sizeof(dglInt32_t), (dglInt32_t) 0,
+		  opaqueset);
+
+    if (gr == NULL)
+	G_fatal_error(_("Unable to build network graph"));
+
+    db_init_handle(&handle);
+    db_init_string(&stmt);
+
+    if (abcol != NULL && afcol == NULL)
+	G_fatal_error(_("Forward costs column not specified"));
+
+    /* --- Add arcs --- */
+    /* Open db connection */
+
+    /* Get field info */
+    if (tfield < 1)
+	G_fatal_error(_("Turntable field < 1"));
+    Fi = Vect_get_field(Map, tfield);
+    if (Fi == NULL)
+	G_fatal_error(_("Database connection not defined for layer %d"),
+		      tfield);
+
+    /* Open database */
+    ttbdriver = db_start_driver_open_database(Fi->driver, Fi->database);
+    if (ttbdriver == NULL)
+	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+		      Fi->database, Fi->driver);
+
+    i = 0;
+    while (tcols[i]) {
+	/* Load costs to array */
+	if (db_get_column(ttbdriver, Fi->table, tcols[i], &Column) != DB_OK)
+	    G_fatal_error(_("Turntable column <%s> not found in table <%s>"),
+			  tcols[i], Fi->table);
+
+	tctype[i] = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	if ((tctype[i] == DB_C_TYPE_INT || tctype[i] == DB_C_TYPE_DOUBLE) &&
+	    !strcmp(tcols[i], "cost")) ;
+	else if (tctype[i] == DB_C_TYPE_INT) ;
+	else
+	    G_fatal_error(_
+			  ("Data type of column <%s> not supported (must be numeric)"),
+			  tcols[i]);
+
+	db_CatValArray_init(&tvarrs[i]);
+	nturns =
+	    db_select_CatValArray(ttbdriver, Fi->table, Fi->key, tcols[i],
+				  NULL, &tvarrs[i]);
+	++i;
+    }
+
+    G_debug(1, "forward costs: nrec = %d", nturns);
+
+    /* Set node attributes */
+    G_message("Register nodes");
+    if (ncol != NULL) {
+
+	G_debug(2, "Set nodes' costs");
+	if (nfield < 1)
+	    G_fatal_error("Node field < 1");
+
+	G_message(_("Setting node costs..."));
+
+	Fi = Vect_get_field(Map, nfield);
+	if (Fi == NULL)
+	    G_fatal_error(_("Database connection not defined for layer %d"),
+			  nfield);
+
+	driver = db_start_driver_open_database(Fi->driver, Fi->database);
+	if (driver == NULL)
+	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+			  Fi->database, Fi->driver);
+
+	/* Load costs to array */
+	if (db_get_column(driver, Fi->table, ncol, &Column) != DB_OK)
+	    G_fatal_error(_("Column <%s> not found in table <%s>"),
+			  ncol, Fi->table);
+
+	fctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	if (fctype != DB_C_TYPE_INT && fctype != DB_C_TYPE_DOUBLE)
+	    G_fatal_error(_
+			  ("Data type of column <%s> not supported (must be numeric)"),
+			  ncol);
+
+	db_CatValArray_init(&fvarr);
+
+	nrec =
+	    db_select_CatValArray(driver, Fi->table, Fi->key, ncol, NULL,
+				  &fvarr);
+	G_debug(1, "node costs: nrec = %d", nrec);
+
+	tucfield_idx = Vect_cidx_get_field_index(Map, tucfield);
+    }
+
+    List = Vect_new_boxlist(0);
+    ln_Cats = Vect_new_cats_struct();
+
+    G_message("Building turns graph...");
+
+    i_virt_edge = -1;
+    for (i = 1; i <= nnodes; i++) {
+	/* TODO: what happens if we set attributes of non existing node (skipped lines,
+	 *       nodes without lines) */
+
+	/* select points at node */
+	Vect_get_node_coor(Map, i, &x, &y, &z);
+	box.E = box.W = x;
+	box.N = box.S = y;
+	box.T = box.B = z;
+	Vect_select_lines_by_box(Map, &box, GV_POINT, List);
+
+	G_debug(2, "  node = %d nlines = %d", i, List->n_values);
+	cfound = 0;
+	dcost = 0;
+	tucfound = 0;
+
+	for (j = 0; j < List->n_values; j++) {
+	    line = List->id[j];
+	    G_debug(2, "  line (%d) = %d", j, line);
+	    type = Vect_read_line(Map, NULL, Cats, line);
+	    if (!(type & GV_POINT))
+		continue;
+	    /* get node column costs */
+	    if (ncol != NULL && !cfound && Vect_cat_get(Cats, nfield, &cat)) {	/* point with category of field found */
+		/* Set costs */
+		if (fctype == DB_C_TYPE_INT) {
+		    ret = db_CatValArray_get_value_int(&fvarr, cat, &cost);
+		    dcost = cost;
+		}
+		else {		/* DB_C_TYPE_DOUBLE */
+		    ret =
+			db_CatValArray_get_value_double(&fvarr, cat, &dcost);
+		}
+		if (ret != DB_OK) {
+		    G_warning(_
+			      ("Database record for node %d (cat = %d) not found "
+			       "(cost set to 0)"), i, cat);
+		}
+		cfound = 1;
+		Map->dgraph.node_costs[i] = dcost;
+	    }
+
+	    /* add virtual nodes and lines, which represents the intersections 
+	       there are added two nodes for every intersection, which are linked 
+	       with the nodes (edges in primal graph). 
+	       the positive node - when we are going from the intersection 
+	       the negative node - when we are going to the intersection
+
+	       TODO There are more possible approaches in virtual nodes management.
+	       We can also add and remove them dynamically as they are needed 
+	       for analysis when Vect_net_ttb_shortest_path is called 
+	       (problem of flattening graph).
+	       Currently this static solution was chosen, because it cost 
+	       time only when graph is build. However it costs more memory space.
+	       For Dijkstra algorithm this expansion should not be serious problem 
+	       because we can only get into positive node or go from the negative
+	       node. 
+
+	     */
+
+	    ret = Vect_cat_get(Cats, tucfield, &cat);
+	    if (!tucfound && ret) {	/* point with category of field found */
+		/* find lines which belongs to the intersection */
+		nnode_lns = Vect_get_node_n_lines(Map, i);
+
+		for (i_line = 0; i_line < nnode_lns; i_line++) {
+
+		    line_id = Vect_get_node_line(Map, i, i_line);
+		    Vect_read_line(Map, NULL, ln_Cats, abs(line_id));
+		    Vect_cat_get(ln_Cats, tucfield, &ln_cat);
+
+		    if (line_id < 0)
+			ln_cat *= -1;
+		    f = cat * 2;
+
+		    if (ln_cat < 0)
+			t = ln_cat * -2 + 1;
+		    else
+			t = ln_cat * 2;
+
+		    G_debug(5,
+			    "Add arc %d for virtual node from %d to %d cost = %d",
+			    i_virt_edge, f, t, 0);
+
+		    /* positive, start virtual node */
+		    ret = dglAddEdge(gr, (dglInt32_t) f, (dglInt32_t) t,
+				     (dglInt32_t) 0,
+				     (dglInt32_t) (i_virt_edge));
+		    if (ret < 0)
+			G_fatal_error(_
+				      ("Cannot add network arc for virtual node connection."));
+
+		    t = cat * 2 + 1;
+		    i_virt_edge--;
+
+		    if (-ln_cat < 0)
+			f = ln_cat * 2 + 1;
+		    else
+			f = ln_cat * -2;
+
+		    G_debug(5,
+			    "Add arc %d for virtual node from %d to %d cost = %d",
+			    i_virt_edge, f, t, 0);
+
+		    /* negative, destination virtual node */
+		    ret = dglAddEdge(gr, (dglInt32_t) f, (dglInt32_t) t,
+				     (dglInt32_t) 0,
+				     (dglInt32_t) (i_virt_edge));
+		    if (ret < 0)
+			G_fatal_error(_
+				      ("Cannot add network arc for virtual node connection."));
+
+		    i_virt_edge--;
+		}
+		tucfound++;
+	    }
+	    else if (ret)
+		tucfound++;
+	}
+
+	if (tucfound > 1)
+	    G_warning(_
+		      ("There exists more than one point of node <%d> with unique category field  <%d>.\n"
+		       "The unique categories layer is not valid therefore you will probably get incorrect results."),
+		      tucfield, i);
+
+	if (ncol != NULL && !cfound)
+	    G_debug(2,
+		    "Category of field %d  is not attached to any points in node %d"
+		    "(costs set to 0)", nfield, i);
+    }
+
+    Vect_destroy_cats_struct(ln_Cats);
+
+    for (i = 1; i <= nturns; i++) {
+	/* select points at node */
+
+	/* TODO use cursors */
+	db_CatValArray_get_value_int(&tvarrs[0], i, &turn_cat);
+
+	db_CatValArray_get_value_int(&tvarrs[1], i, &from);
+	db_CatValArray_get_value_int(&tvarrs[2], i, &to);
+
+	db_CatValArray_get_value_int(&tvarrs[4], i, &isec);
+	dcost = 0.0;
+	if (ncol != NULL) {
+	    /* TODO optimization do not do it for every turn in intersection again  */
+	    if (Vect_cidx_find_next
+		(Map, tucfield_idx, isec, GV_POINT, 0, &type,
+		 &node_pt_id) == -1) {
+		G_warning(_
+			  ("Unable to find point representing intersection <%d> in unique categories field <%d>.\n"
+			   "Cost for the intersection was set to 0.\n"
+			   "The unique categories layer is not valid therefore you will probably get incorrect results."),
+			  isec, tucfield);
+	    }
+	    else {
+		Vect_read_line(Map, Points, Cats, node_pt_id);
+
+		node_pt_id =
+		    Vect_find_node(Map, *Points->x, *Points->y, *Points->z,
+				   0.0, WITHOUT_Z);
+
+		if (node_pt_id == 0) {
+		    G_warning(_
+			      ("Unable to find node for point representing intersection <%d> in unique categories field <%d>.\n"
+			       "Cost for the intersection was set to 0.\n"
+			       "The unique categories layer is not valid therefore you will probably get incorrect results."),
+			      isec, tucfield);
+		}
+		else {
+		    G_debug(2, "  node = %d", node_pt_id);
+		    dcost = Map->dgraph.node_costs[node_pt_id];
+		}
+	    }
+	}
+
+	G_debug(2, "Set node's cost to %f", dcost);
+
+	if (dcost >= 0) {
+	    /* Set costs from turntable */
+	    if (tctype[3] == DB_C_TYPE_INT) {
+		ret = db_CatValArray_get_value_int(&tvarrs[3], i, &cost);
+		dcost = cost;
+	    }
+	    else		/* DB_C_TYPE_DOUBLE */
+		ret = db_CatValArray_get_value_double(&tvarrs[3], i, &dcost);
+
+	    if (ret != DB_OK) {
+		G_warning(_
+			  ("Database record for turn with cat = %d in not found. "
+			   "(The turn was skipped."), i);
+		continue;
+	    }
+
+	    if (dcost >= 0) {
+
+		if (ncol != NULL)
+		    cost =
+			(Map->dgraph.node_costs[node_pt_id] +
+			 dcost) * (dglInt32_t) Map->dgraph.cost_multip;
+		else
+		    cost = dcost * (dglInt32_t) Map->dgraph.cost_multip;
+
+		/* dglib does not like negative id's of nodes  */
+		if (from < 0)
+		    f = from * -2 + 1;
+		else
+		    f = from * 2;
+
+		if (to < 0)
+		    t = to * -2 + 1;
+		else
+		    t = to * 2;
+
+		G_debug(5, "Add arc/turn %d for turn from %d to %d cost = %d",
+			turn_cat, f, t, cost);
+
+		ret = dglAddEdge(gr, (dglInt32_t) f, (dglInt32_t) t,
+				 (dglInt32_t) cost, (dglInt32_t) (turn_cat));
+
+		if (ret < 0)
+		    G_fatal_error(_
+				  ("Cannot add network arc representing turn."));
+	    }
+	}
+    }
+
+    Vect_destroy_boxlist(List);
+
+    i = 0;
+    while (tcols[i]) {
+	db_CatValArray_free(&tvarrs[i]);
+	++i;
+    }
+
+    if (ncol != NULL) {
+	db_close_database_shutdown_driver(driver);
+	db_CatValArray_free(&fvarr);
+    }
+
+    /* Open db connection */
+    if (afcol != NULL) {
+	/* Get field info */
+	if (afield < 1)
+	    G_fatal_error(_("Arc field < 1"));
+	Fi = Vect_get_field(Map, afield);
+	if (Fi == NULL)
+	    G_fatal_error(_("Database connection not defined for layer %d"),
+			  afield);
+
+	/* Open database */
+	driver = db_start_driver_open_database(Fi->driver, Fi->database);
+	if (driver == NULL)
+	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+			  Fi->database, Fi->driver);
+
+	/* Load costs to array */
+	if (db_get_column(driver, Fi->table, afcol, &Column) != DB_OK)
+	    G_fatal_error(_("Column <%s> not found in table <%s>"),
+			  afcol, Fi->table);
+
+	fctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	if (fctype != DB_C_TYPE_INT && fctype != DB_C_TYPE_DOUBLE)
+	    G_fatal_error(_
+			  ("Data type of column <%s> not supported (must be numeric)"),
+			  afcol);
+
+	db_CatValArray_init(&fvarr);
+	nrec =
+	    db_select_CatValArray(driver, Fi->table, Fi->key, afcol, NULL,
+				  &fvarr);
+	G_debug(1, "forward costs: nrec = %d", nrec);
+
+	if (abcol != NULL) {
+	    if (db_get_column(driver, Fi->table, abcol, &Column) != DB_OK)
+		G_fatal_error(_("Column <%s> not found in table <%s>"),
+			      abcol, Fi->table);
+
+	    bctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	    if (bctype != DB_C_TYPE_INT && bctype != DB_C_TYPE_DOUBLE)
+		G_fatal_error(_
+			      ("Data type of column <%s> not supported (must be numeric)"),
+			      abcol);
+
+	    db_CatValArray_init(&bvarr);
+	    nrec =
+		db_select_CatValArray(driver, Fi->table, Fi->key, abcol, NULL,
+				      &bvarr);
+	    G_debug(1, "backward costs: nrec = %d", nrec);
+	}
+    }
+
+    skipped = 0;
+
+    G_message(_("Registering arcs..."));
+
+    for (i = 1; i <= nlines; i++) {
+	G_percent(i, nlines, 1);	/* must be before any continue */
+
+	type = Vect_read_line(Map, Points, Cats, i);
+	if (!(type & ltype & (GV_LINE | GV_BOUNDARY)))
+	    continue;
+
+	Vect_get_line_nodes(Map, i, &from, &to);
+
+	dcost = bdcost = 0;
+
+	cfound = Vect_cat_get(Cats, tucfield, &cat);
+	if (!cfound)
+	    continue;
+
+	if (cfound > 1)
+	    G_warning(_
+		      ("Line with id <%d> has more unique categories defined in field <%d>.\n"
+		       "The unique categories layer is not valid therefore you will probably get incorrect results."),
+		      i, tucfield);
+
+	if (afcol != NULL) {
+	    if (!(Vect_cat_get(Cats, afield, &cat))) {
+		G_debug(2,
+			"Category of field %d not attached to the line %d -> cost was set to 0",
+			afield, i);
+		skipped += 2;	/* Both directions */
+	    }
+	    else {
+		if (fctype == DB_C_TYPE_INT) {
+		    ret = db_CatValArray_get_value_int(&fvarr, cat, &cost);
+		    dcost = cost;
+		}
+		else {		/* DB_C_TYPE_DOUBLE */
+		    ret =
+			db_CatValArray_get_value_double(&fvarr, cat, &dcost);
+		}
+		if (ret != DB_OK) {
+		    G_warning(_("Database record for line %d (cat = %d, "
+				"forward/both direction(s)) not found "
+				"(cost was set to 0)"), i, cat);
+		}
+
+		if (abcol != NULL) {
+		    if (bctype == DB_C_TYPE_INT) {
+			ret =
+			    db_CatValArray_get_value_int(&bvarr, cat, &bcost);
+			bdcost = bcost;
+		    }
+		    else {	/* DB_C_TYPE_DOUBLE */
+			ret =
+			    db_CatValArray_get_value_double(&bvarr, cat,
+							    &bdcost);
+		    }
+		    if (ret != DB_OK) {
+			G_warning(_("Database record for line %d (cat = %d, "
+				    "backword direction) not found"
+				    "(cost was set to 0)"), i, cat);
+		    }
+		}
+		else
+		    bdcost = dcost;
+
+		Vect_cat_get(Cats, tucfield, &cat);
+	    }
+	}
+	else {
+	    if (ll) {
+		if (geo)
+		    dcost = Vect_line_geodesic_length(Points);
+		else
+		    dcost = Vect_line_length(Points);
+	    }
+	    else
+		dcost = Vect_line_length(Points);
+
+	    bdcost = dcost;
+	}
+
+	cost = (dglInt32_t) Map->dgraph.cost_multip * dcost;
+	dgl_cost = cost;
+
+	cat = cat * 2;
+
+	G_debug(5, "Setinng node %d cost: %d", cat, cost);
+	dglNodeSet_Attr(gr, dglGetNode(gr, (dglInt32_t) cat), &dgl_cost);
+
+	Map->dgraph.edge_fcosts[i] = dcost;
+
+	cost = (dglInt32_t) Map->dgraph.cost_multip * bdcost;
+	dgl_cost = cost;
+
+	++cat;
+
+	G_debug(5, "Setinng node %d cost: %d", cat, cost);
+	dglNodeSet_Attr(gr, dglGetNode(gr, (dglInt32_t) cat), &dgl_cost);
+
+	Map->dgraph.edge_bcosts[i] = bdcost;
+    }
+
+    if (afcol != NULL && skipped > 0)
+	G_debug(2, "%d lines missing category of field %d skipped", skipped,
+		afield);
+
+    if (afcol != NULL) {
+	db_close_database_shutdown_driver(driver);
+	db_CatValArray_free(&fvarr);
+
+	if (abcol != NULL) {
+	    db_CatValArray_free(&bvarr);
+	}
+    }
+    db_close_database_shutdown_driver(ttbdriver);
+
+    Vect_destroy_line_struct(Points);
+    Vect_destroy_cats_struct(Cats);
+
+    G_message(_("Flattening the graph..."));
+    ret = dglFlatten(gr);
+    if (ret < 0)
+	G_fatal_error(_("GngFlatten error"));
+
+    /* init SP cache */
+    /* disable to debug dglib cache */
+    dglInitializeSPCache(gr, &(Map->dgraph.spCache));
+
+    G_message(_("Graph was built"));
+    return 0;
+}
+
+/*!
+   \brief Build network graph.
+
+   Internal format for edge costs is integer, costs are multiplied
+   before conversion to int by 1000 and for lengths LL without geo flag by 1000000.
+   The same multiplication factor is used for nodes.
+   Costs in database column may be 'integer' or 'double precision' number >= 0
+   or -1 for infinity i.e. arc or node is closed and cannot be traversed
+   If record in table is not found for arcs, arc is skip.
+   If record in table is not found for node, costs for node are set to 0.
+
+   \param Map vector map
+   \param ltype line type for arcs
+   \param afield arc costs field (if 0, use length)
+   \param nfield node costs field (if 0, do not use node costs)
+   \param afcol column with forward costs for arc
+   \param abcol column with backward costs for arc (if NULL, back costs = forward costs), 
+   \param ncol column with costs for nodes (if NULL, do not use node costs), 
+   \param geo use geodesic calculation for length (LL), 
+   \param version graph version to create (1, 2, 3)
+
+   \return 0 on success, 1 on error
+ */
+int
+Vect_net_build_graph(struct Map_info *Map,
+		     int ltype,
+		     int afield,
+		     int nfield,
+		     const char *afcol,
+		     const char *abcol,
+		     const char *ncol, int geo, int version)
+{
+    /* TODO long function, split into smaller ones */
+    int i, j, from, to, line, nlines, nnodes, ret, type, cat, skipped, cfound;
+    int dofw, dobw;
+    struct line_pnts *Points;
+    struct line_cats *Cats;
+    double dcost, bdcost, ll;
+    int cost, bcost;
+    dglGraph_s *gr;
+    dglInt32_t dgl_cost;
+    dglInt32_t opaqueset[16] =
+	{ 360000, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+    struct field_info *Fi;
+    dbDriver *driver = NULL;
+    dbHandle handle;
+    dbString stmt;
+    dbColumn *Column;
+    dbCatValArray fvarr, bvarr;
+    int fctype = 0, bctype = 0, nrec;
+
+    /* TODO int costs -> double (waiting for dglib) */
+    G_debug(1, "Vect_net_build_graph(): ltype = %d, afield = %d, nfield = %d",
+	    ltype, afield, nfield);
+    G_debug(1, "    afcol = %s, abcol = %s, ncol = %s", afcol, abcol, ncol);
+
+    G_message(_("Building graph..."));
+
+    Map->dgraph.line_type = ltype;
+
+    Points = Vect_new_line_struct();
+    Cats = Vect_new_cats_struct();
+
+    ll = 0;
+    if (G_projection() == 3)
+	ll = 1;			/* LL */
+
+    if (afcol == NULL && ll && !geo)
+	Map->dgraph.cost_multip = 1000000;
+    else
+	Map->dgraph.cost_multip = 1000;
+
+    nlines = Vect_get_num_lines(Map);
+    nnodes = Vect_get_num_nodes(Map);
+
+    gr = &(Map->dgraph.graph_s);
+
+    /* Allocate space for costs, later replace by functions reading costs from graph */
+    Map->dgraph.edge_fcosts =
+	(double *)G_malloc((nlines + 1) * sizeof(double));
+    Map->dgraph.edge_bcosts =
+	(double *)G_malloc((nlines + 1) * sizeof(double));
+    Map->dgraph.node_costs =
+	(double *)G_malloc((nnodes + 1) * sizeof(double));
+    /* Set to -1 initially */
+    for (i = 1; i <= nlines; i++) {
+	Map->dgraph.edge_fcosts[i] = -1;	/* forward */
+	Map->dgraph.edge_bcosts[i] = -1;	/* backward */
+    }
+    for (i = 1; i <= nnodes; i++) {
+	Map->dgraph.node_costs[i] = 0;
+    }
+
+    if (version < 1 || version > 3)
+	version = 1;
+
+    if (ncol != NULL)
+	dglInitialize(gr, (dglByte_t) version, sizeof(dglInt32_t), (dglInt32_t) 0,
+		      opaqueset);
+    else
+	dglInitialize(gr, (dglByte_t) version, (dglInt32_t) 0, (dglInt32_t) 0,
+		      opaqueset);
+
+    if (gr == NULL)
+	G_fatal_error(_("Unable to build network graph"));
+
+    db_init_handle(&handle);
+    db_init_string(&stmt);
+
+    if (abcol != NULL && afcol == NULL)
+	G_fatal_error(_("Forward costs column not specified"));
+
+    /* --- Add arcs --- */
+    /* Open db connection */
+    if (afcol != NULL) {
+	/* Get field info */
+	if (afield < 1)
+	    G_fatal_error(_("Arc field < 1"));
+	Fi = Vect_get_field(Map, afield);
+	if (Fi == NULL)
+	    G_fatal_error(_("Database connection not defined for layer %d"),
+			  afield);
+
+	/* Open database */
+	driver = db_start_driver_open_database(Fi->driver, Fi->database);
+	if (driver == NULL)
+	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+			  Fi->database, Fi->driver);
+
+	/* Load costs to array */
+	if (db_get_column(driver, Fi->table, afcol, &Column) != DB_OK)
+	    G_fatal_error(_("Column <%s> not found in table <%s>"),
+			  afcol, Fi->table);
+
+	fctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	if (fctype != DB_C_TYPE_INT && fctype != DB_C_TYPE_DOUBLE)
+	    G_fatal_error(_
+			  ("Data type of column <%s> not supported (must be numeric)"),
+			  afcol);
+
+	db_CatValArray_init(&fvarr);
+	nrec =
+	    db_select_CatValArray(driver, Fi->table, Fi->key, afcol, NULL,
+				  &fvarr);
+	G_debug(1, "forward costs: nrec = %d", nrec);
+
+	if (abcol != NULL) {
+	    if (db_get_column(driver, Fi->table, abcol, &Column) != DB_OK)
+		G_fatal_error(_("Column <%s> not found in table <%s>"),
+			      abcol, Fi->table);
+
+	    bctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	    if (bctype != DB_C_TYPE_INT && bctype != DB_C_TYPE_DOUBLE)
+		G_fatal_error(_
+			      ("Data type of column <%s> not supported (must be numeric)"),
+			      abcol);
+
+	    db_CatValArray_init(&bvarr);
+	    nrec =
+		db_select_CatValArray(driver, Fi->table, Fi->key, abcol, NULL,
+				      &bvarr);
+	    G_debug(1, "backward costs: nrec = %d", nrec);
+	}
+    }
+
+    skipped = 0;
+
+    G_message(_("Registering arcs..."));
+
+    for (i = 1; i <= nlines; i++) {
+	G_percent(i, nlines, 1);	/* must be before any continue */
+	dofw = dobw = 1;
+	type = Vect_read_line(Map, Points, Cats, i);
+	if (!(type & ltype & (GV_LINE | GV_BOUNDARY)))
+	    continue;
+
+	Vect_get_line_nodes(Map, i, &from, &to);
+
+	if (afcol != NULL) {
+	    if (!(Vect_cat_get(Cats, afield, &cat))) {
+		G_debug(2,
+			"Category of field %d not attached to the line %d -> line skipped",
+			afield, i);
+		skipped += 2;	/* Both directions */
+		continue;
+	    }
+	    else {
+		if (fctype == DB_C_TYPE_INT) {
+		    ret = db_CatValArray_get_value_int(&fvarr, cat, &cost);
+		    dcost = cost;
+		}
+		else {		/* DB_C_TYPE_DOUBLE */
+		    ret =
+			db_CatValArray_get_value_double(&fvarr, cat, &dcost);
+		}
+		if (ret != DB_OK) {
+		    G_warning(_("Database record for line %d (cat = %d, "
+				"forward/both direction(s)) not found "
+				"(forward/both direction(s) of line skipped)"),
+			      i, cat);
+		    dofw = 0;
+		}
+
+		if (abcol != NULL) {
+		    if (bctype == DB_C_TYPE_INT) {
+			ret =
+			    db_CatValArray_get_value_int(&bvarr, cat, &bcost);
+			bdcost = bcost;
+		    }
+		    else {	/* DB_C_TYPE_DOUBLE */
+			ret =
+			    db_CatValArray_get_value_double(&bvarr, cat,
+							    &bdcost);
+		    }
+		    if (ret != DB_OK) {
+			G_warning(_("Database record for line %d (cat = %d, "
+				    "backword direction) not found"
+				    "(direction of line skipped)"), i, cat);
+			dobw = 0;
+		    }
+		}
+		else {
+		    if (dofw)
+			bdcost = dcost;
+		    else
+			dobw = 0;
+		}
+	    }
+	}
+	else {
+	    if (ll) {
+		if (geo)
+		    dcost = Vect_line_geodesic_length(Points);
+		else
+		    dcost = Vect_line_length(Points);
+	    }
+	    else
+		dcost = Vect_line_length(Points);
+
+	    bdcost = dcost;
+	}
+	if (dofw && dcost != -1) {
+	    cost = (dglInt32_t) Map->dgraph.cost_multip * dcost;
+	    G_debug(5, "Add arc %d from %d to %d cost = %d", i, from, to,
+		    cost);
+	    ret =
+		dglAddEdge(gr, (dglInt32_t) from, (dglInt32_t) to,
+			   (dglInt32_t) cost, (dglInt32_t) i);
+	    Map->dgraph.edge_fcosts[i] = dcost;
+	    if (ret < 0)
+		G_fatal_error("Cannot add network arc");
+	}
+
+	G_debug(5, "bdcost = %f edge_bcosts = %f", bdcost,
+		Map->dgraph.edge_bcosts[i]);
+	if (dobw && bdcost != -1) {
+	    bcost = (dglInt32_t) Map->dgraph.cost_multip * bdcost;
+	    G_debug(5, "Add arc %d from %d to %d bcost = %d", -i, to, from,
+		    bcost);
+	    ret =
+		dglAddEdge(gr, (dglInt32_t) to, (dglInt32_t) from,
+			   (dglInt32_t) bcost, (dglInt32_t) - i);
+	    Map->dgraph.edge_bcosts[i] = bdcost;
+	    if (ret < 0)
+		G_fatal_error(_("Cannot add network arc"));
+	}
+    }
+
+    if (afcol != NULL && skipped > 0)
+	G_debug(2, "%d lines missing category of field %d skipped", skipped,
+		afield);
+
+    if (afcol != NULL) {
+	db_close_database_shutdown_driver(driver);
+	db_CatValArray_free(&fvarr);
+
+	if (abcol != NULL) {
+	    db_CatValArray_free(&bvarr);
+	}
+    }
+
+    /* Set node attributes */
+    G_debug(2, "Register nodes");
+    if (ncol != NULL) {
+	double x, y, z;
+	struct bound_box box;
+	struct boxlist *List;
+
+	List = Vect_new_boxlist(0);
+
+	G_debug(2, "Set nodes' costs");
+	if (nfield < 1)
+	    G_fatal_error("Node field < 1");
+
+	G_message(_("Setting node costs..."));
+
+	Fi = Vect_get_field(Map, nfield);
+	if (Fi == NULL)
+	    G_fatal_error(_("Database connection not defined for layer %d"),
+			  nfield);
+
+	driver = db_start_driver_open_database(Fi->driver, Fi->database);
+	if (driver == NULL)
+	    G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+			  Fi->database, Fi->driver);
+
+	/* Load costs to array */
+	if (db_get_column(driver, Fi->table, ncol, &Column) != DB_OK)
+	    G_fatal_error(_("Column <%s> not found in table <%s>"),
+			  ncol, Fi->table);
+
+	fctype = db_sqltype_to_Ctype(db_get_column_sqltype(Column));
+
+	if (fctype != DB_C_TYPE_INT && fctype != DB_C_TYPE_DOUBLE)
+	    G_fatal_error(_
+			  ("Data type of column <%s> not supported (must be numeric)"),
+			  ncol);
+
+	db_CatValArray_init(&fvarr);
+	nrec =
+	    db_select_CatValArray(driver, Fi->table, Fi->key, ncol, NULL,
+				  &fvarr);
+	G_debug(1, "node costs: nrec = %d", nrec);
+
+	for (i = 1; i <= nnodes; i++) {
+	    /* TODO: what happens if we set attributes of not existing node (skipped lines,
+	     *       nodes without lines) */
+
+	    /* select points at node */
+	    Vect_get_node_coor(Map, i, &x, &y, &z);
+	    box.E = box.W = x;
+	    box.N = box.S = y;
+	    box.T = box.B = z;
+	    Vect_select_lines_by_box(Map, &box, GV_POINT, List);
+
+	    G_debug(2, "  node = %d nlines = %d", i, List->n_values);
+	    cfound = 0;
+	    dcost = 0;
+
+	    for (j = 0; j < List->n_values; j++) {
+		line = List->id[j];
+		G_debug(2, "  line (%d) = %d", j, line);
+		type = Vect_read_line(Map, NULL, Cats, line);
+		if (!(type & GV_POINT))
+		    continue;
+		if (Vect_cat_get(Cats, nfield, &cat)) {	/* point with category of field found */
+		    /* Set costs */
+		    if (fctype == DB_C_TYPE_INT) {
+			ret =
+			    db_CatValArray_get_value_int(&fvarr, cat, &cost);
+			dcost = cost;
+		    }
+		    else {	/* DB_C_TYPE_DOUBLE */
+			ret =
+			    db_CatValArray_get_value_double(&fvarr, cat,
+							    &dcost);
+		    }
+		    if (ret != DB_OK) {
+			G_warning(_
+				  ("Database record for node %d (cat = %d) not found "
+				   "(cost set to 0)"), i, cat);
+		    }
+		    cfound = 1;
+		    break;
+		}
+	    }
+	    if (!cfound) {
+		G_debug(2,
+			"Category of field %d not attached to any points in node %d"
+			"(costs set to 0)", nfield, i);
+	    }
+	    if (dcost == -1) {	/* closed */
+		cost = -1;
+	    }
+	    else {
+		cost = (dglInt32_t) Map->dgraph.cost_multip * dcost;
+	    }
+
+	    dgl_cost = cost;
+	    G_debug(3, "Set node's cost to %d", cost);
+
+	    dglNodeSet_Attr(gr, dglGetNode(gr, (dglInt32_t) i), &dgl_cost);
+
+	    Map->dgraph.node_costs[i] = dcost;
+	}
+	db_close_database_shutdown_driver(driver);
+	db_CatValArray_free(&fvarr);
+
+	Vect_destroy_boxlist(List);
+    }
+
+    G_message(_("Flattening the graph..."));
+    ret = dglFlatten(gr);
+    if (ret < 0)
+	G_fatal_error(_("GngFlatten error"));
+
+    /* init SP cache */
+    /* disable to debug dglib cache */
+    dglInitializeSPCache(gr, &(Map->dgraph.spCache));
+
+    G_message(_("Graph was built"));
+
+    return 0;
+}
diff --git a/lib/vector/Vlib/open.c b/lib/vector/Vlib/open.c
index 0e7e917..c98480c 100644
--- a/lib/vector/Vlib/open.c
+++ b/lib/vector/Vlib/open.c
@@ -6,7 +6,7 @@
   
   Higher level functions for reading/writing/manipulating vectors.
   
-  (C) 2001-2009, 2012-2013 by the GRASS Development Team
+  (C) 2001-2015 by the GRASS Development Team
   
   This program is free software under the GNU General Public License
   (>=v2).  Read the file COPYING that comes with GRASS for details.
@@ -154,7 +154,7 @@ int Vect_set_open_level(int level)
  \param update non-zero to open for update otherwise read-only mode
  \param head_only read only header info from 'head', 'dbln', 'topo',
  'cidx' is not opened. The header may be opened on level 2 only.
- \param is_tmp TRUE for temporary maps
+ \param is_tmp non-zero code for temporary maps
 
  \return level of openness (1, 2)
  \return -1 in error
@@ -163,7 +163,7 @@ int Vect__open_old(struct Map_info *Map, const char *name, const char *mapset,
                    const char *layer, int update, int head_only, int is_tmp)
 {
     char xname[GNAME_MAX], xmapset[GMAPSET_MAX];
-    char *path;
+    char path[GPATH_MAX];
     FILE *fp;
     int level, level_request;
     int format, ret;
@@ -174,8 +174,8 @@ int Vect__open_old(struct Map_info *Map, const char *name, const char *mapset,
             "head_only = %d, is_tmp = %d", name, mapset, layer ? layer : "NULL", update, head_only,
             is_tmp);
     
-    if (!is_tmp) {
-        is_tmp = getenv("GRASS_VECTOR_TEMPORARY") ? TRUE : FALSE;
+    if (update && !is_tmp) {
+        is_tmp = getenv("GRASS_VECTOR_TEMPORARY") ? TEMPORARY_MAP_ENV : TEMPORARY_MAP_DISABLED;
         G_debug(1, "Vect__open_old(): is_tmp = %d (check GRASS_VECTOR_TEMPORARY)", is_tmp);
     }
 
@@ -221,7 +221,7 @@ int Vect__open_old(struct Map_info *Map, const char *name, const char *mapset,
             Map->mapset = G_store("");
     }
 
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
 
     if (!ogr_mapset) {
         /* try to find vector map (not for OGR mapset) */
@@ -253,9 +253,20 @@ int Vect__open_old(struct Map_info *Map, const char *name, const char *mapset,
                     return -1;
                 }
             }
-            G_file_name(file_path, path, GV_HEAD_ELEMENT, Map->mapset);
-            if (access(file_path, F_OK) != 0)
-                return -1;
+
+            Vect__get_element_path(file_path, Map, GV_HEAD_ELEMENT);
+            if (access(file_path, F_OK) != 0) {
+                /* unable to find header file for temporary map, try
+                 * to switch to normal mode, useful when updating
+                 * existing map */
+                Map->temporary = FALSE;
+                Vect__get_path(path, Map); /* path must be updated for
+                                            * subsequent operations */
+                Vect__get_element_path(file_path, Map, GV_HEAD_ELEMENT);
+                if (access(file_path, F_OK) != 0)
+                    return -1;
+
+            }
         }
     }
     
@@ -521,26 +532,24 @@ int Vect__open_old(struct Map_info *Map, const char *name, const char *mapset,
     if (update && !head_only) {
         char file_path[GPATH_MAX];
 
-        G_file_name(file_path, path, GV_TOPO_ELEMENT, G_mapset());
+        Vect__get_element_path(file_path, Map, GV_TOPO_ELEMENT);
         if (access(file_path, F_OK) == 0)       /* topo file exists? */
             unlink(file_path);
 
-        G_file_name(file_path, path, GV_SIDX_ELEMENT, G_mapset());
+        Vect__get_element_path(file_path, Map, GV_SIDX_ELEMENT);
         if (access(file_path, F_OK) == 0)       /* sidx file exists? */
             unlink(file_path);
 
-        G_file_name(file_path, path, GV_CIDX_ELEMENT, G_mapset());
+        Vect__get_element_path(file_path, Map, GV_CIDX_ELEMENT);
         if (access(file_path, F_OK) == 0)       /* cidx file exists? */
             unlink(file_path);
 
         if (format == GV_FORMAT_OGR || format == GV_FORMAT_POSTGIS) {
-            G_file_name(file_path, path, GV_FIDX_ELEMENT, G_mapset());
+            Vect__get_element_path(file_path, Map, GV_FIDX_ELEMENT);
             if (access(file_path, F_OK) == 0)   /* fidx file exists? */
                 unlink(file_path);
         }
     }
-
-    G_free(path);
     
     return level;
 }
@@ -791,7 +800,8 @@ int open_new(struct Map_info *Map, const char *name, int with_z, int is_tmp)
     
     if (Map->format != GV_FORMAT_OGR_DIRECT &&
         getenv("GRASS_VECTOR_PGFILE") == NULL) { /* GRASS_VECTOR_PGFILE defined by v.out.postgis */
-        char *path;
+        char *env;
+        char path[GPATH_MAX];
         
         G_debug(2, " using non-direct format");
 
@@ -804,7 +814,9 @@ int open_new(struct Map_info *Map, const char *name, int with_z, int is_tmp)
                 return -1;
             }
         }
-        else {
+
+        env = getenv("GRASS_VECTOR_TEMPORARY");
+        if (!Map->temporary || (env && strcmp(env, "move") == 0)) {
             if (G_find_vector2(name, G_mapset()) != NULL) {
                 G_warning(_("Vector map <%s> already exists and will be overwritten"),
                           name);
@@ -828,9 +840,8 @@ int open_new(struct Map_info *Map, const char *name, int with_z, int is_tmp)
         Vect__write_head(Map);
 
         /* create history file */
-        path = Vect__get_path(Map);
+        Vect__get_path(path, Map);
         Map->hist_fp = G_fopen_new(path, GV_HIST_ELEMENT);
-        G_free(path);
         if (Map->hist_fp == NULL) {
             G_warning(_("Unable to open history file of vector map <%s>"),
                       name);
@@ -911,7 +922,7 @@ int Vect_open_new(struct Map_info *Map, const char *name, int with_z)
 {
     int is_tmp;
     
-    is_tmp = getenv("GRASS_VECTOR_TEMPORARY") ? TRUE : FALSE;
+    is_tmp = getenv("GRASS_VECTOR_TEMPORARY") ? TEMPORARY_MAP_ENV : TEMPORARY_MAP_DISABLED;
     G_debug(1, "Vect_open_new(): is_tmp = %d", is_tmp);
     
     return open_new(Map, name, with_z, is_tmp);
@@ -949,7 +960,7 @@ int Vect_open_tmp_new(struct Map_info *Map, const char *name, int with_z)
     }
     G_debug(1, "Vect_open_tmp_new(): name = '%s' with_z = %d", name, with_z);
 
-    return open_new(Map, tmp_name, with_z, TRUE); /* temporary map */
+    return open_new(Map, tmp_name, with_z, TEMPORARY_MAP); /* temporary map */
 }
 
 /*!
@@ -963,14 +974,12 @@ int Vect_open_tmp_new(struct Map_info *Map, const char *name, int with_z)
 */
 int Vect_coor_info(const struct Map_info *Map, struct Coor_info *Info)
 {
-    char *path, file_path[GPATH_MAX];
+    char file_path[GPATH_MAX];
     struct stat stat_buf;
     
     switch (Map->format) {
     case GV_FORMAT_NATIVE:
-        path = Vect__get_path(Map);
-        G_file_name(file_path, path, GV_COOR_ELEMENT, Map->mapset);
-        G_free(path);
+        Vect__get_element_path(file_path, Map, GV_COOR_ELEMENT);
         G_debug(1, "get coor info: %s", file_path);
         if (0 != stat(file_path, &stat_buf)) {
             G_warning(_("Unable to stat file <%s>"), file_path);
@@ -1087,7 +1096,7 @@ int Vect_maptype(const struct Map_info *Map)
 int Vect_open_topo(struct Map_info *Map, int head_only)
 {
     int err, ret;
-    char file_path[GPATH_MAX], *path;
+    char file_path[GPATH_MAX], path[GPATH_MAX];
     struct gvfile fp;
     struct Coor_info CInfo;
     struct Plus_head *Plus;
@@ -1097,17 +1106,14 @@ int Vect_open_topo(struct Map_info *Map, int head_only)
 
     Plus = &(Map->plus);
 
-    path = Vect__get_path(Map);
-    G_file_name(file_path, path, GV_TOPO_ELEMENT, Map->mapset);
-    
+    Vect__get_path(path, Map);
+    Vect__get_element_path(file_path, Map, GV_TOPO_ELEMENT);
     if (access(file_path, F_OK) != 0) {  /* does not exist */
-        G_free(path);
         return 1;
     }
 
     dig_file_init(&fp);
     fp.file = G_fopen_old(path, GV_TOPO_ELEMENT, Map->mapset);
-    G_free(path);
 
     if (fp.file == NULL) {      /* topo file is not available */
         G_debug(1, "Cannot open topo file for vector '%s@%s'.",
@@ -1186,16 +1192,14 @@ int Vect_open_sidx(struct Map_info *Map, int mode)
     dig_file_init(&(Plus->spidx_fp));
 
     if (mode < 2) {
-        char *path, file_path[GPATH_MAX];
+        char path[GPATH_MAX], file_path[GPATH_MAX];
         
-        path = Vect__get_path(Map);
-        G_file_name(file_path, path, GV_SIDX_ELEMENT, Map->mapset);
-
+        Vect__get_path(path, Map);
+        Vect__get_element_path(file_path, Map, GV_SIDX_ELEMENT);
         if (access(file_path, F_OK) != 0)       /* does not exist */
             return 1;
 
         Plus->spidx_fp.file = G_fopen_old(path, GV_SIDX_ELEMENT, Map->mapset);
-        G_free(path);
         
         if (Plus->spidx_fp.file == NULL) {  /* sidx file is not available */
             G_debug(1, "Cannot open spatial index file for vector '%s@%s'.",
@@ -1306,7 +1310,7 @@ int map_format(struct Map_info *Map)
              * in the native format and when closing the map
              * transferred to output OGR layer */
             format = GV_FORMAT_NATIVE;
-            Map->temporary = TRUE;
+            Map->temporary = TEMPORARY_MAP;
         }
         fp = G_fopen_old("", "OGR", G_mapset());
         if (!fp) {
@@ -1423,7 +1427,7 @@ int map_format(struct Map_info *Map)
                  * in the native format and when closing the map
                  * transferred to output PostGIS layer */
                 format = GV_FORMAT_NATIVE;
-                Map->temporary = TRUE;
+                Map->temporary = TEMPORARY_MAP;
             }
         }
     }
@@ -1435,26 +1439,23 @@ int map_format(struct Map_info *Map)
 /*!
   \brief Get map directory name (internal use only)
 
-  Allocate string should be freed by G_free().
-
+  \param file_path path string buffer
   \param Map pointer to Map_info struct
 
-  \return allocated buffer containing path
+  \return buffer containing path
 */
-char *Vect__get_path(const struct Map_info *Map)
+char *Vect__get_path(char *path, const struct Map_info *Map)
 {
-    char path[GPATH_MAX];
-    
     if (Map->temporary) {
         char path_tmp[GPATH_MAX];
-        G_temp_element(path_tmp);
+        G__temp_element(path_tmp, TRUE);
         sprintf(path, "%s/%s/%s", path_tmp, GV_DIRECTORY, Map->name);
     }
     else {
         sprintf(path, "%s/%s", GV_DIRECTORY, Map->name);
     }
     
-    return G_store(path);
+    return path;
 }
 
 /*!
@@ -1467,13 +1468,17 @@ char *Vect__get_path(const struct Map_info *Map)
 
   \return allocated buffer containing path
 */
-char *Vect__get_element_path(const struct Map_info *Map, const char *element)
+char *Vect__get_element_path(char *file_path,
+                             const struct Map_info *Map, const char *element)
 {
-    char file_path[GPATH_MAX], *path;
+    char path[GPATH_MAX];
     
-    path = Vect__get_path(Map);
-    G_file_name(file_path, path, element, Map->mapset);
-    G_free(path);
+    Vect__get_path(path, Map);
+    if (Map->temporary)
+        G_file_name_tmp(file_path, path, element, Map->mapset);
+    else
+        G_file_name(file_path, path, element, Map->mapset);
 
-    return G_store(file_path);
+    return file_path;
 }
+
diff --git a/lib/vector/Vlib/open_nat.c b/lib/vector/Vlib/open_nat.c
index 604c8bc..69c342f 100644
--- a/lib/vector/Vlib/open_nat.c
+++ b/lib/vector/Vlib/open_nat.c
@@ -38,20 +38,19 @@ static int check_coor(struct Map_info *Map);
 */
 int V1_open_old_nat(struct Map_info *Map, int update)
 {
-    char *path;
+    char path[GPATH_MAX];
     struct Coor_info CInfo;
 
     G_debug(1, "V1_open_old_nat(): name = %s mapset = %s", Map->name,
 	    Map->mapset);
 
-    path = Vect__get_path(Map);
+    Vect__get_path(path, Map);
     dig_file_init(&(Map->dig_fp));
     if (update)
 	Map->dig_fp.file = G_fopen_modify(path, GV_COOR_ELEMENT);
     else
 	Map->dig_fp.file =
 	    G_fopen_old(path, GV_COOR_ELEMENT, Map->mapset);
-    G_free(path);
     
     if (Map->dig_fp.file == NULL) {
         G_warning(_("Unable to open coor file for vector map <%s>"),
@@ -95,19 +94,19 @@ int V1_open_old_nat(struct Map_info *Map, int update)
 */
 int V1_open_new_nat(struct Map_info *Map, const char *name, int with_z)
 {
-    char *path, file_path[GPATH_MAX];
+    char path[GPATH_MAX];
 
     G_debug(1, "V1_open_new_nat(): name = %s with_z = %d is_tmp = %d",
             name, with_z, Map->temporary);
 
-    path = Vect__get_path(Map);
-
     /* Set the 'coor' file version */
     Map->head.coor_version.major = GV_COOR_VER_MAJOR;
     Map->head.coor_version.minor = GV_COOR_VER_MINOR;
     Map->head.coor_version.back_major = GV_COOR_EARLIEST_MAJOR;
     Map->head.coor_version.back_minor = GV_COOR_EARLIEST_MINOR;
-
+    
+    Vect__get_path(path, Map);
+    
     /* TODO: open better */
     dig_file_init(&(Map->dig_fp));
     Map->dig_fp.file = G_fopen_new(path, GV_COOR_ELEMENT);
@@ -119,14 +118,13 @@ int V1_open_new_nat(struct Map_info *Map, const char *name, int with_z)
     Map->dig_fp.file = G_fopen_modify(path, GV_COOR_ELEMENT);
     if (Map->dig_fp.file == NULL)
 	return -1;
-
+    
     /* if overwrite OK, any existing files have already been deleted by
      * Vect_open_new(): remove this check ? */
     /* check to see if dig_plus file exists and if so, remove it */
-    G_file_name(file_path, path, GV_TOPO_ELEMENT, G_mapset());
-    G_free(path);
-    if (access(file_path, F_OK) == 0)
-        unlink(file_path); /* remove topo file if exists */
+    Vect__get_element_path(path, Map, GV_TOPO_ELEMENT);
+    if (access(path, F_OK) == 0)
+        unlink(path); /* remove topo file if exists */
     
     /* set conversion matrices */
     dig_init_portable(&(Map->head.port), dig__byte_order_out());
diff --git a/lib/vector/Vlib/open_pg.c b/lib/vector/Vlib/open_pg.c
index 092e0fb..d4c6f10 100644
--- a/lib/vector/Vlib/open_pg.c
+++ b/lib/vector/Vlib/open_pg.c
@@ -522,9 +522,11 @@ void connect_db(struct Format_info_pg *pg_info)
         /* try connection settings for given database first, then try
          * any settings defined for pg driver */
         db_get_login2("pg", dbname, &user, &passwd, &host, &port);
+        /* any settings defined for pg driver disabled - can cause
+           problems when running multiple local/remote db clusters
         if (strlen(dbname) > 0 && !user && !passwd)
             db_get_login2("pg", NULL, &user, &passwd, &host, &port);
-        
+        */
         if (user || passwd || host || port) {
             char  conninfo[DB_SQL_MAX];
 
diff --git a/lib/vector/Vlib/read_pg.c b/lib/vector/Vlib/read_pg.c
index eb8f1b9..a2db39e 100644
--- a/lib/vector/Vlib/read_pg.c
+++ b/lib/vector/Vlib/read_pg.c
@@ -1505,9 +1505,14 @@ int Vect__execute_pg(PGconn * conn, const char *stmt)
     G_debug(3, "Vect__execute_pg(): %s", stmt);
     result = PQexec(conn, stmt);
     if (!result || PQresultStatus(result) != PGRES_COMMAND_OK) {
-        PQclear(result);
+        size_t stmt_len;
+        char stmt_prt[512];
         
-        G_warning(_("Execution failed: %s\nReason: %s"), stmt,
+        PQclear(result);
+        stmt_len = strlen(stmt);
+        strncpy(stmt_prt, stmt, stmt_len > 511 ? 511 : stmt_len);
+        stmt_prt[stmt_len > 511 ? 511 : stmt_len] = '\0';
+        G_warning(_("Execution failed: %s (...)\nReason: %s"), stmt_prt,
                   PQerrorMessage(conn));
         return -1;
     }
diff --git a/lib/vector/Vlib/snap.c b/lib/vector/Vlib/snap.c
index 0cb7437..4fe609d 100644
--- a/lib/vector/Vlib/snap.c
+++ b/lib/vector/Vlib/snap.c
@@ -21,6 +21,7 @@
 #include <math.h>
 #include <grass/vector.h>
 #include <grass/glocale.h>
+#include <grass/kdtree.h>
 
 /* translate segment to box and back */
 #define X1W 0x01	/* x1 is West, x2 East */
@@ -121,6 +122,14 @@ static int add_item_box(int id, const struct RTree_Rect *rect, void *list)
     return 1;
 }
 
+static void
+Vect_snap_lines_list_rtree(struct Map_info *, const struct ilist *,
+		           double, struct Map_info *);
+
+static void
+Vect_snap_lines_list_kdtree(struct Map_info *, const struct ilist *,
+		            double, struct Map_info *);
+
 /*!
    \brief Snap selected lines to existing vertex in threshold.
    
@@ -161,6 +170,366 @@ void
 Vect_snap_lines_list(struct Map_info *Map, const struct ilist *List_lines,
 		     double thresh, struct Map_info *Err)
 {
+    if (getenv("GRASS_VECTOR_LOWMEM"))
+	Vect_snap_lines_list_rtree(Map, List_lines, thresh, Err);
+    else
+	Vect_snap_lines_list_kdtree(Map, List_lines, thresh, Err);
+}
+
+static void
+Vect_snap_lines_list_kdtree(struct Map_info *Map, const struct ilist *List_lines,
+		     double thresh, struct Map_info *Err)
+{
+    struct line_pnts *Points, *NPoints;
+    struct line_cats *Cats;
+    int line, ltype, line_idx;
+    double thresh2;
+
+    int point;			/* index in points array */
+    int nanchors, ntosnap;	/* number of anchors and number of points to be snapped */
+    int nsnapped, ncreated;	/* number of snapped verices, number of new vertices (on segments) */
+    int apoints, npoints, nvertices;	/* number of allocated points, registered points, vertices */
+    XPNT *XPnts;		/* Array of points */
+    NEW *New = NULL;		/* Array of new points */
+    int anew = 0, nnew;		/* allocated new points , number of new points */
+    struct ilist *List;
+    int *Index = NULL;		/* indexes of anchors for vertices */
+    int aindex = 0;		/* allocated Index */
+
+    struct kdtree *KDTree;
+    double c[2];
+    double *kdd;
+    int *kduid, kd_found;
+
+
+    if (List_lines->n_values < 1)
+	return;
+
+    Points = Vect_new_line_struct();
+    NPoints = Vect_new_line_struct();
+    Cats = Vect_new_cats_struct();
+    List = Vect_new_list();
+
+    KDTree = kdtree_create(2, NULL);
+
+    thresh2 = thresh * thresh;
+
+    /* Go through all lines in vector, and add each point to structure of points */
+    apoints = 0;
+    point = 1;			/* index starts from 1 ! */
+    nvertices = 0;
+    XPnts = NULL;
+
+    G_important_message(_("Snap vertices Pass 1: select points"));
+    for (line_idx = 0; line_idx < List_lines->n_values; line_idx++) {
+	int v;
+
+	G_percent(line_idx, List_lines->n_values, 2);
+
+	line = List_lines->value[line_idx];
+
+	G_debug(3, "line =  %d", line);
+	if (!Vect_line_alive(Map, line))
+	    continue;
+
+	ltype = Vect_read_line(Map, Points, Cats, line);
+
+	for (v = 0; v < Points->n_points; v++) {
+	    G_debug(3, "  vertex v = %d", v);
+	    nvertices++;
+
+	    /* coords */
+	    c[0] = Points->x[v];
+	    c[1] = Points->y[v];
+
+	    if (kdtree_insert(KDTree, c, point, 0)) {
+		/* Add to structure */
+		if ((point - 1) == apoints) {
+		    apoints += 10000;
+		    XPnts =
+			(XPNT *) G_realloc(XPnts,
+					   (apoints + 1) * sizeof(XPNT));
+		}
+		XPnts[point].x = Points->x[v];
+		XPnts[point].y = Points->y[v];
+		XPnts[point].anchor = -1;
+		point++;
+	    }
+	}
+    }
+    G_percent(line_idx, List_lines->n_values, 2); /* finish it */
+
+    G_debug(1, "KD Tree depth: %d", (int)KDTree->root->depth);
+    kdtree_optimize(KDTree, 2);
+    G_debug(1, "KD Tree depth: %d", (int)KDTree->root->depth);
+
+    npoints = point - 1;
+
+    /* Go through all registered points and if not yet marked mark it as anchor and assign this anchor
+     * to all not yet marked points in threshold */
+
+    G_important_message(_("Snap vertices Pass 2: assign anchor vertices"));
+
+    nanchors = ntosnap = 0;
+    for (point = 1; point <= npoints; point++) {
+	int i;
+
+	G_percent(point, npoints, 4);
+
+	G_debug(3, "  point = %d", point);
+
+	if (XPnts[point].anchor >= 0)
+	    continue;
+
+	XPnts[point].anchor = 0;	/* make it anchor */
+	nanchors++;
+
+	/* Find points in threshold */
+	c[0] = XPnts[point].x;
+	c[1] = XPnts[point].y;
+
+	Vect_reset_list(List);
+	kd_found = kdtree_dnn(KDTree, c, &kduid, &kdd, thresh, &point);
+	G_debug(4, "  %d points in threshold box", kd_found);
+
+	for (i = 0; i < kd_found; i++) {
+	    int pointb;
+	    double dx, dy, dist2;
+
+	    pointb = kduid[i];
+	    if (pointb == point)
+		continue;
+
+	    dx = XPnts[pointb].x - XPnts[point].x;
+	    dy = XPnts[pointb].y - XPnts[point].y;
+	    dist2 = dx * dx + dy * dy;
+
+	    if (dist2 > thresh2) /* outside threshold */
+		continue;
+		
+	    /* doesn't have an anchor yet */
+	    if (XPnts[pointb].anchor == -1) {
+		XPnts[pointb].anchor = point;
+		ntosnap++;
+	    }
+	    else if (XPnts[pointb].anchor > 0) {   /* check distance to previously assigned anchor */
+		double dist2_a;
+
+		dx = XPnts[XPnts[pointb].anchor].x - XPnts[pointb].x;
+		dy = XPnts[XPnts[pointb].anchor].y - XPnts[pointb].y;
+		dist2_a = dx * dx + dy * dy;
+
+		/* replace old anchor */
+		if (dist2 < dist2_a) {
+		    XPnts[pointb].anchor = point;
+		}
+	    }
+	}
+	if (kd_found) {
+	    G_free(kdd);
+	    G_free(kduid);
+	}
+    }
+
+    /* Go through all lines and: 
+     *   1) for all vertices: if not anchor snap it to its anchor
+     *   2) for all segments: snap it to all anchors in threshold (except anchors of vertices of course) */
+
+    nsnapped = ncreated = 0;
+
+    G_important_message(_("Snap vertices Pass 3: snap to assigned points"));
+
+    for (line_idx = 0; line_idx < List_lines->n_values; line_idx++) {
+	int v, spoint, anchor;
+	int changed = 0;
+	double kddist;
+
+	G_percent(line_idx, List_lines->n_values, 2);
+
+	line = List_lines->value[line_idx];
+
+	G_debug(3, "line =  %d", line);
+	if (!Vect_line_alive(Map, line))
+	    continue;
+
+	ltype = Vect_read_line(Map, Points, Cats, line);
+
+	if (Points->n_points >= aindex) {
+	    aindex = Points->n_points;
+	    Index = (int *)G_realloc(Index, aindex * sizeof(int));
+	}
+
+	/* Snap all vertices */
+	for (v = 0; v < Points->n_points; v++) {
+	    /* Box */
+	    c[0] = Points->x[v];
+	    c[1] = Points->y[v];
+
+	    /* Find point ( should always find one point ) */
+	    Vect_reset_list(List);
+
+	    spoint = -1;
+	    kdtree_knn(KDTree, c, &spoint, &kddist, 1, NULL);
+	    if (spoint == -1)
+		G_fatal_error("Point not in KD Tree");
+
+	    anchor = XPnts[spoint].anchor;
+
+	    if (anchor > 0) {	/* to be snapped */
+		Points->x[v] = XPnts[anchor].x;
+		Points->y[v] = XPnts[anchor].y;
+		nsnapped++;
+		changed = 1;
+		Index[v] = anchor;	/* point on new location */
+	    }
+	    else {
+		Index[v] = spoint;	/* old point */
+	    }
+	}
+
+	/* New points */
+	Vect_reset_line(NPoints);
+
+	/* Snap all segments to anchors in threshold */
+	for (v = 0; v < Points->n_points - 1; v++) {
+	    int i;
+	    double x1, x2, y1, y2, xmin, xmax, ymin, ymax;
+	    double dx, dy;
+	    double kdthresh;
+
+	    G_debug(3, "  segment = %d end anchors : %d  %d", v, Index[v],
+		    Index[v + 1]);
+
+	    x1 = Points->x[v];
+	    x2 = Points->x[v + 1];
+	    y1 = Points->y[v];
+	    y2 = Points->y[v + 1];
+
+	    Vect_append_point(NPoints, Points->x[v], Points->y[v],
+			      Points->z[v]);
+
+	    /* Box */
+	    if (x1 <= x2) {
+		xmin = x1;
+		xmax = x2;
+	    }
+	    else {
+		xmin = x2;
+		xmax = x1;
+	    }
+	    if (y1 <= y2) {
+		ymin = y1;
+		ymax = y2;
+	    }
+	    else {
+		ymin = y2;
+		ymax = y1;
+	    }
+
+	    c[0] = (xmin + xmax) / 2;
+	    c[1] = (ymin + ymax) / 2;
+
+	    dx = xmax - xmin;
+	    dy = ymax - ymin;
+	    kdthresh = sqrt(dx * dx + dy * dy) + thresh;
+
+	    /* Find points */
+	    Vect_reset_list(List);
+	    kd_found = kdtree_dnn(KDTree, c, &kduid, &kdd, kdthresh, NULL);
+
+	    G_debug(3, "  %d points in box", kd_found);
+
+	    /* Snap to anchor in threshold different from end points */
+	    nnew = 0;
+	    for (i = 0; i < kd_found; i++) {
+		double dist2, along;
+
+		spoint = kduid[i];
+		G_debug(4, "    spoint = %d anchor = %d", spoint,
+			XPnts[spoint].anchor);
+
+		if (spoint == Index[v] || spoint == Index[v + 1])
+		    continue;	/* end point */
+		if (XPnts[spoint].anchor > 0)
+		    continue;	/* point is not anchor */
+
+		/* Check the distance */
+		dist2 =
+		    dig_distance2_point_to_line(XPnts[spoint].x,
+						XPnts[spoint].y, 0, x1, y1, 0,
+						x2, y2, 0, 0, NULL, NULL,
+						NULL, &along, NULL);
+
+		G_debug(4, "      distance = %lf", sqrt(dist2));
+
+		if (dist2 <= thresh2) {
+		    G_debug(4, "      anchor in thresh, along = %lf", along);
+
+		    if (nnew == anew) {
+			anew += 100;
+			New = (NEW *) G_realloc(New, anew * sizeof(NEW));
+		    }
+		    New[nnew].anchor = spoint;
+		    New[nnew].along = along;
+		    nnew++;
+		}
+	    }
+	    if (kd_found) {
+		G_free(kduid);
+		G_free(kdd);
+	    }
+	    G_debug(3, "  nnew = %d", nnew);
+	    /* insert new vertices */
+	    if (nnew > 0) {
+		/* sort by distance along the segment */
+		qsort(New, sizeof(char) * nnew, sizeof(NEW), sort_new);
+
+		for (i = 0; i < nnew; i++) {
+		    anchor = New[i].anchor;
+		    /* Vect_line_insert_point ( Points, ++v, XPnts[anchor].x, XPnts[anchor].y, 0); */
+		    Vect_append_point(NPoints, XPnts[anchor].x,
+				      XPnts[anchor].y, 0);
+		    ncreated++;
+		}
+		changed = 1;
+	    }
+	}
+
+	/* append end point */
+	v = Points->n_points - 1;
+	Vect_append_point(NPoints, Points->x[v], Points->y[v], Points->z[v]);
+
+	if (changed) {		/* rewrite the line */
+	    Vect_line_prune(NPoints);	/* remove duplicates */
+	    if (NPoints->n_points > 1 || !(ltype & GV_LINES)) {
+		Vect_rewrite_line(Map, line, ltype, NPoints, Cats);
+	    }
+	    else {
+		Vect_delete_line(Map, line);
+	    }
+	    if (Err) {
+		Vect_write_line(Err, ltype, Points, Cats);
+	    }
+	}
+    }				/* for each line */
+    G_percent(line_idx, List_lines->n_values, 2); /* finish it */
+
+    Vect_destroy_line_struct(Points);
+    Vect_destroy_line_struct(NPoints);
+    Vect_destroy_cats_struct(Cats);
+    G_free(XPnts);
+    G_free(Index);
+    G_free(New);
+    kdtree_destroy(KDTree);
+
+    G_verbose_message(_("Snapped vertices: %d"), nsnapped);
+    G_verbose_message(_("New vertices: %d"), ncreated);
+}
+
+static void
+Vect_snap_lines_list_rtree(struct Map_info *Map, const struct ilist *List_lines,
+		     double thresh, struct Map_info *Err)
+{
     struct line_pnts *Points, *NPoints;
     struct line_cats *Cats;
     int line, ltype, line_idx;
@@ -270,7 +639,7 @@ Vect_snap_lines_list(struct Map_info *Map, const struct ilist *List_lines,
     for (point = 1; point <= npoints; point++) {
 	int i;
 
-	G_percent(point, npoints, 2);
+	G_percent(point, npoints, 4);
 
 	G_debug(3, "  point = %d", point);
 
@@ -581,7 +950,7 @@ Vect_snap_lines(struct Map_info *Map, int type, double thresh,
    \param[in,out] Points line points to snap
    \param[in] thresh threshold in which to snap vertices
    \param[in] with_z 2D or 3D snapping
-   \param[in,out] nsnapped number of snapped verices
+   \param[in,out] nsnapped number of snapped vertices
    \param[in,out] ncreated number of new vertices (on segments)
   
    \return 1 if line was changed, otherwise 0
diff --git a/lib/vector/Vlib/testsuite/test_vlib_box.py b/lib/vector/Vlib/testsuite/test_vlib_box.py
new file mode 100644
index 0000000..74c0801
--- /dev/null
+++ b/lib/vector/Vlib/testsuite/test_vlib_box.py
@@ -0,0 +1,86 @@
+"""
+TEST:      box.c
+
+AUTHOR(S): Vaclav Petras
+
+PURPOSE:   Test functions related to bounding box
+
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import ctypes
+import grass.lib.vector as libvect
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestPointInBoundingBox(TestCase):
+    """Test functions related to point in bounding box"""
+
+    def setUp(self):
+        """Create bbox object"""
+        self.c_bbox = ctypes.pointer(libvect.bound_box())
+        # x range
+        self.c_bbox.contents.E = 220
+        self.c_bbox.contents.W = 215
+        # y range
+        self.c_bbox.contents.N = 135
+        self.c_bbox.contents.S = 125
+        # z range
+        self.c_bbox.contents.T = 340
+        self.c_bbox.contents.B = 330
+
+    def test_bbox_3d_in(self):
+        """Check Vect_point_in_box() function with 3D points inside bbox"""
+        self.check_point_in_3d(217, 130, 335)
+        self.check_point_in_3d(219.999999, 125.000001, 339.999999)
+
+    def test_bbox_3d_out(self):
+        """Check Vect_point_in_box() function with 3D points outside bbox"""
+        self.check_point_out_3d(100, 100, 100)
+        self.check_point_out_3d(500, 593, 900)
+        self.check_point_out_3d(-220, 130, 335)
+        self.check_point_out_3d(220, -130, 335)
+        self.check_point_out_3d(220, 130, -335)
+
+    def check_point_in_3d(self, x, y, z):
+        """Wraps Vect_point_in_box() with assert and a message"""
+        self.assertTrue(libvect.Vect_point_in_box(x, y, z, self.c_bbox),
+                        msg="Point should be inside the bbox")
+
+    def check_point_out_3d(self, x, y, z):
+        """Wraps Vect_point_in_box() with assert and a message"""
+        self.assertFalse(libvect.Vect_point_in_box(x, y, z, self.c_bbox),
+                         msg="Point should be outside the bbox")
+
+    def test_bbox_2d_in(self):
+        """Check Vect_point_in_box_2d() function with 2D points inside bbox"""
+        self.check_point_in_2d(217, 130)
+        self.check_point_in_2d(219.999999, 125.000001)
+
+    def test_bbox_2d_out(self):
+        """Check Vect_point_in_box_2d() function with 2D points outside bbox"""
+        self.check_point_out_2d(100, 100)
+        self.check_point_out_2d(500, 593)
+        self.check_point_out_2d(-220, 130)
+        self.check_point_out_2d(220, -130)
+        self.check_point_out_2d(-220, -130)
+
+    def check_point_in_2d(self, x, y):
+        """Wraps Vect_point_in_box_2d() with assert, message and bbox"""
+        self.assertTrue(libvect.Vect_point_in_box_2d(x, y, self.c_bbox),
+                        msg="Point should be inside the bbox")
+
+    def check_point_out_2d(self, x, y):
+        """Wraps Vect_point_in_box_2d() with assert, message and bbox"""
+        self.assertFalse(libvect.Vect_point_in_box_2d(x, y, self.c_bbox),
+                         msg="Point should be outside the bbox")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/lib/vector/Vlib/write_nat.c b/lib/vector/Vlib/write_nat.c
index 07c40a1..0f014fd 100644
--- a/lib/vector/Vlib/write_nat.c
+++ b/lib/vector/Vlib/write_nat.c
@@ -5,7 +5,7 @@
 
    Higher level functions for reading/writing/manipulating vectors.
 
-   (C) 2001-2013 by the GRASS Development Team
+   (C) 2001-2015 by the GRASS Development Team
 
    This program is free software under the GNU General Public License
    (>=v2). Read the file COPYING that comes with GRASS for details.
diff --git a/lib/vector/Vlib/write_ogr.c b/lib/vector/Vlib/write_ogr.c
index ca0670c..8bf53e5 100644
--- a/lib/vector/Vlib/write_ogr.c
+++ b/lib/vector/Vlib/write_ogr.c
@@ -131,7 +131,7 @@ int V1_delete_line_ogr(struct Map_info *Map, off_t offset)
     }
     
     if (offset >= ogr_info->offset.array_num) {
-	G_warning(_("Invalid offset (%d)"), offset);
+	G_warning(_("Invalid offset (%ld)"), offset);
 	return -1;
     }
     
@@ -608,13 +608,13 @@ int write_attributes(dbDriver *driver, int cat, const struct field_info *Fi,
 	value = db_get_column_value(column);
 	/* for debug only */
 	db_convert_column_value_to_string(column, &dbstring);	
-	G_debug(2, "col %d : val = %s", j,
+	G_debug(3, "col %d : val = %s", j,
 		db_get_string(&dbstring));
 	
 	sqltype = db_get_column_sqltype(column);
 	ctype = db_sqltype_to_Ctype(sqltype);
 	ogrtype = sqltype_to_ogrtype(sqltype);
-	G_debug(2, "  colctype = %d", ctype);
+	G_debug(3, "  colctype = %d", ctype);
 	
 	ogrfieldnum = OGR_F_GetFieldIndex(Ogr_feature, colname);
 	if (ogrfieldnum < 0) {
diff --git a/lib/vector/Vlib/write_pg.c b/lib/vector/Vlib/write_pg.c
index 624829f..3127597 100644
--- a/lib/vector/Vlib/write_pg.c
+++ b/lib/vector/Vlib/write_pg.c
@@ -277,7 +277,7 @@ off_t V2_rewrite_line_pg(struct Map_info *Map, off_t line, int type,
     }
     
     geom_data = line_to_wkb(pg_info, &points, 1, type, Map->head.with_z);
-    G_asprintf(&stmt, "UPDATE \"%s\".\"%s\" SET geom = '%s'::GEOMETRY WHERE %s_id = %d",
+    G_asprintf(&stmt, "UPDATE \"%s\".\"%s\" SET geom = '%s'::GEOMETRY WHERE %s_id = %ld",
                schema_name, table_name, geom_data, keycolumn, line);
     G_free(geom_data);
 
@@ -341,7 +341,7 @@ int V1_delete_line_pg(struct Map_info *Map, off_t offset)
 
     sprintf(stmt, "DELETE FROM %s WHERE %s = %ld",
             pg_info->table_name, pg_info->fid_column, fid);
-    G_debug(2, "SQL: %s", stmt);
+    G_debug(3, "SQL: %s", stmt);
 
     if (Vect__execute_pg(pg_info->conn, stmt) == -1) {
         G_warning(_("Unable to delete feature"));
@@ -2026,7 +2026,7 @@ char *build_insert_stmt(const struct Format_info_pg *pg_info,
                     value = db_get_column_value(column);
                     /* for debug only */
                     db_convert_column_value_to_string(column, &dbstmt);
-                    G_debug(2, "col %d : val = %s", col,
+                    G_debug(3, "col %d : val = %s", col,
                             db_get_string(&dbstmt));
 
                     sqltype = db_get_column_sqltype(column);
diff --git a/lib/vector/dglib/dglib.dox b/lib/vector/dglib/dglib.dox
index 0b93a1d..90318ea 100644
--- a/lib/vector/dglib/dglib.dox
+++ b/lib/vector/dglib/dglib.dox
@@ -317,6 +317,6 @@ Nitin K Dhiman, AINN group, CAIR  <nitinkdhiman at gmail.com> (code walkthrough doc
 
 GRASS 6 Vector Architecture \ref vectorlib 
 
-Last change: $Date: 2015-09-16 17:44:00 +0200 (Wed, 16 Sep 2015) $
+Last change: $Date: 2015-09-09 20:21:10 +0200 (Wed, 09 Sep 2015) $
 */
 
diff --git a/lib/vector/diglib/plus_struct.c b/lib/vector/diglib/plus_struct.c
index 39f4fd7..c2afc71 100644
--- a/lib/vector/diglib/plus_struct.c
+++ b/lib/vector/diglib/plus_struct.c
@@ -416,7 +416,7 @@ int dig_Rd_P_isle(struct Plus_head *Plus, int n, struct gvfile * fp)
     int cnt;
     struct P_isle *ptr;
 
-    G_debug(3, "dig_Rd_P_isle()");
+    G_debug(4, "dig_Rd_P_isle()");
 
     if (0 >= dig__fread_port_P(&cnt, 1, fp))
 	return (-1);
diff --git a/lib/vector/diglib/struct_alloc.c b/lib/vector/diglib/struct_alloc.c
index 3e91ecd..f443ead 100644
--- a/lib/vector/diglib/struct_alloc.c
+++ b/lib/vector/diglib/struct_alloc.c
@@ -71,7 +71,7 @@ int dig_node_alloc_line(struct P_node * node, int add)
     int num;
     char *p;
 
-    G_debug(3, "dig_node_alloc_line(): add = %d", add);
+    G_debug(5, "dig_node_alloc_line(): add = %d", add);
 
     num = node->n_lines + add;
 
@@ -242,7 +242,7 @@ int dig_alloc_isles(struct Plus_head *Plus, int add)
     int size;
     char *p;
 
-    G_debug(3, "dig_alloc_isle():");
+    G_debug(5, "dig_alloc_isle():");
     size = Plus->alloc_isles + 1 + add;
     p = G_realloc(Plus->Isle, size * sizeof(struct P_isle *));
     if (p == NULL)
@@ -470,7 +470,7 @@ int dig_isle_alloc_line(struct P_isle * isle, int add)
     int num;
     char *p;
 
-    G_debug(3, "dig_isle_alloc_line():");
+    G_debug(5, "dig_isle_alloc_line():");
     num = isle->alloc_lines + add;
 
     p = G_realloc(isle->lines, num * sizeof(plus_t));
diff --git a/lib/vector/neta/articulation_point.c b/lib/vector/neta/articulation_point.c
index ffa170d..2901065 100644
--- a/lib/vector/neta/articulation_point.c
+++ b/lib/vector/neta/articulation_point.c
@@ -3,7 +3,7 @@
 
    \brief Network Analysis library - connected components
 
-   Computes strongly and weakly connected components.
+   Computes network articulation points.
 
    (C) 2009-2010 by Daniel Bundala, and the GRASS Development Team
 
diff --git a/lib/vector/neta/flow.c b/lib/vector/neta/flow.c
index d9602ad..257a650 100644
--- a/lib/vector/neta/flow.c
+++ b/lib/vector/neta/flow.c
@@ -33,7 +33,7 @@ dglInt32_t sign(dglInt32_t x)
    \brief Get max flow from source to sink.
 
    Array flow stores flow for each edge. Negative flow corresponds to a
-   flow in opposite direction The function assumes that the edge costs
+   flow in opposite direction. The function assumes that the edge costs
    correspond to edge capacities.
 
    \param graph input graph
@@ -53,6 +53,8 @@ int NetA_flow(dglGraph_s * graph, struct ilist *source_list,
     dglInt32_t **prev;
     char *is_source, *is_sink;
     int begin, end, total_flow;
+    int have_node_costs;
+    dglInt32_t ncost;
 
     nnodes = dglGet_NodeCount(graph);
     nlines = dglGet_EdgeCount(graph) / 2;	/*each line corresponds to two edges. One in each direction */
@@ -73,6 +75,9 @@ int NetA_flow(dglGraph_s * graph, struct ilist *source_list,
     for (i = 0; i <= nlines; i++)
 	flow[i] = 0;
 
+    ncost = 0;
+    have_node_costs = dglGet_NodeAttrSize(graph);
+
     total_flow = 0;
     while (1) {
 	dglInt32_t node, edge_id, min_residue;
@@ -104,7 +109,13 @@ int NetA_flow(dglGraph_s * graph, struct ilist *source_list,
 			found = to;
 			break;
 		    }
-		    queue[end++] = to;
+		    /* do not go through closed nodes */
+		    if (have_node_costs) {
+			memcpy(&ncost, dglNodeGet_Attr(graph, dglEdgeGet_Tail(graph, edge)),
+			       sizeof(ncost));
+		    }
+		    if (ncost >= 0)
+			queue[end++] = to;
 		}
 	    }
 	    dglEdgeset_T_Release(&et);
@@ -280,6 +291,9 @@ int NetA_split_vertices(dglGraph_s * in, dglGraph_s * out, int *node_costs)
 
 	if (node_costs)
 	    cost = node_costs[v];
+	/* skip closed nodes */
+	if (cost < 0)
+	    continue;
 	if (cost > max_node_cost)
 	    max_node_cost = cost;
 	dglAddEdge(out, 2 * v - 1, 2 * v, cost, edge_cnt);
@@ -292,6 +306,13 @@ int NetA_split_vertices(dglGraph_s * in, dglGraph_s * out, int *node_costs)
 	dglEdgesetTraverser_s et;
 	dglInt32_t *edge;
 	dglInt32_t v = dglNodeGet_Id(in, cur_node);
+	dglInt32_t cost = 1;
+
+	if (node_costs)
+	    cost = node_costs[v];
+	/* skip closed nodes */
+	if (cost < 0)
+	    continue;
 
 	dglEdgeset_T_Initialize(&et, in, dglNodeGet_OutEdgeset(in, cur_node));
 	for (edge = dglEdgeset_T_First(&et); edge;
diff --git a/lib/vector/neta/spanningtree.c b/lib/vector/neta/spanningtree.c
index 006f2d7..38b4ea8 100644
--- a/lib/vector/neta/spanningtree.c
+++ b/lib/vector/neta/spanningtree.c
@@ -88,10 +88,12 @@ static int cmp_edge(const void *pa, const void *pb)
 int NetA_spanning_tree(dglGraph_s * graph, struct ilist *tree_list)
 {
     int nnodes, edges, nedges, i, index;
-    edge_cost_pair *perm;	/*permutaion of edges in ascending order */
+    edge_cost_pair *perm;	/*permutation of edges in ascending order */
     struct union_find uf;
     dglEdgesetTraverser_s et;
 
+    /* TODO: consider closed nodes / node costs */
+
     nnodes = dglGet_NodeCount(graph);
     nedges = dglGet_EdgeCount(graph);
     perm = (edge_cost_pair *) G_calloc(nedges, sizeof(edge_cost_pair));
@@ -99,7 +101,7 @@ int NetA_spanning_tree(dglGraph_s * graph, struct ilist *tree_list)
 	G_fatal_error(_("Out of memory"));
 	return -1;
     }
-    /*for some obscure reasons, dglGetEdge always returns NULL. Therefore this complicated enumeration of the edges... */
+    /* dglGetEdge is only supported with graphs version > 1. Therefore this complicated enumeration of the edges... */
     index = 0;
     G_message(_("Computing minimum spanning tree..."));
     G_percent_reset();
diff --git a/lib/vector/testsuite/test_topology_vgeneralize.sh b/lib/vector/testsuite/test_topology_vgeneralize.sh
new file mode 100755
index 0000000..9419794
--- /dev/null
+++ b/lib/vector/testsuite/test_topology_vgeneralize.sh
@@ -0,0 +1,40 @@
+#!/bin/sh
+
+############################################################################
+#
+# TEST:         test_topology_vgeneralize
+# AUTHOR(S):    Markus Metz
+#
+# PURPOSE:      Tests if the topology is correct using v.generalize debug mode
+# COPYRIGHT:    (C) 2011-2014 by Markus Metz and the GRASS Development Team
+#
+#               This program is free software under the GNU General Public
+#               License (version 2). Read the file COPYING that comes with GRASS
+#               for details.
+#
+#############################################################################
+
+# The vectors in the sample datasets are "too good", I did not find a
+# vector to provoke any errors, thus the r.to.vect step.
+
+# Real world datasets, particularly vectors with administrative areas or
+# land cover/land use classification, are in this respect more suitable
+# because they contain lots of topological errors. Unfortunately, these
+# datasets are too large to be included in the sample datasets.
+
+# the script expects to run using shell with -e flag
+# (equivalent of set -e in a script)
+
+# prepare
+g.region rast=landuse
+r.to.vect input=landuse output=landuse type=area
+
+# use the v.generalize debug mode
+export GRASS_VECTOR_TOPO_DEBUG=1
+
+# test will fail if this (and any other) command fails
+v.generalize input=landuse output=landuse_dp method=douglas threshold=21
+
+# clean up (executed if successful)
+g.remove -f type=vector name=landuse
+g.remove -f type=raster name=landuse_dp
diff --git a/locale/po/grasslibs_ar.po b/locale/po/grasslibs_ar.po
index 582f33b..85bcd03 100644
--- a/locale/po/grasslibs_ar.po
+++ b/locale/po/grasslibs_ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_ar\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2005-03-09 12:50+0100\n"
 "Last-Translator: Dr. Alaa Masoud <alaamasoud at hotmail.com>\n"
 "Language-Team: Arabic <grass-translations at lists.osgeo.org>\n"
@@ -38,10 +38,12 @@ msgstr "لم يمكن فتحه %s فى %s"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "لم يتم كتابة روابط قاعدة البيانات"
@@ -51,45 +53,45 @@ msgstr "لم يتم كتابة روابط قاعدة البيانات"
 msgid "Unable to get list tables in database <%s>"
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "لم يتم كتابة روابط قاعدة البيانات"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "لم يتم كتابة روابط قاعدة البيانات"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr ""
@@ -673,8 +675,8 @@ msgstr "غير موجود'%s' الفيكتور"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -684,8 +686,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -788,12 +790,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -841,17 +843,17 @@ msgstr "دليل الخواص المضاعفة القيمة خارج النطا
 msgid "Category index out of range"
 msgstr "دليل الخواص المضاعفة القيمة خارج النطاق"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "خطا فى كتابة الدليل الفراغى\n"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, fuzzy, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
@@ -919,8 +921,8 @@ msgstr "%d : عدد الحدود غير الصحيحة\n"
 msgid "Number of redundant holes: %d"
 msgstr "%d : عدد الحدود غير الصحيحة\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
@@ -1020,38 +1022,38 @@ msgstr "عدد المساحات     :   -\n"
 msgid "Number of isles: -"
 msgstr "عدد الجزر     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "خطا فى كتابة ملف الطبوغرافية\n"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "لم يمكن محو الخط,الخريطة  غير مفتوحة على المستوى الثانى"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "خطا فى كتابة الدليل الفراغى\n"
@@ -1118,9 +1120,11 @@ msgstr "مسقط غير معروف"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1169,8 +1173,10 @@ msgstr "لم يمكن محو الخط"
 msgid "Unable to fetch data from table"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "لم يتم كتابة روابط قاعدة البيانات"
@@ -1211,24 +1217,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1249,7 +1255,7 @@ msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1276,12 +1282,12 @@ msgstr "لم يمكن فتح ملف مؤقت"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1289,7 +1295,7 @@ msgstr "لم يمكن فتح ملف مؤقت"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
@@ -1381,7 +1387,7 @@ msgstr "لم يمكن فتحه %s فى %s"
 msgid "No connection defined"
 msgstr "فشل الإتصال\n"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
@@ -1397,7 +1403,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "لم يمكن فتحه %s فى %s"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "لم يمكن فتحه %s فى %s"
@@ -1616,7 +1622,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr "لم يمكن فتح ملف مؤقت"
@@ -1631,17 +1637,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "لم يمكن فتح ملف مؤقت"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "لم يمكن فتحه %s فى %s"
@@ -1725,26 +1731,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
@@ -1849,7 +1872,8 @@ msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
@@ -1882,6 +1906,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "لم يمكن فتحه %s فى %s"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "لم يمكن فتحه %s فى %s"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "لم يمكن فتحه %s فى %s"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1890,7 +1929,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, fuzzy, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
@@ -2173,7 +2212,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2186,129 +2225,129 @@ msgstr "غير موجود'%s' الفيكتور"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 #, fuzzy
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "الخريطة لا يمكن فتحها للتحديث"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, fuzzy, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, fuzzy, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "%d على مستوى %s لم يمكن فتح فيكتور قديم "
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, fuzzy, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "SQL اسم الخريطة غير متوافق مع نظام"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, fuzzy, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "تشكيل غير صالح\n"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, fuzzy, c-format
 msgid "Unable to stat file <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "حجم ملف الأحداثيات مختلف عن القيم المحفوظة فى ملف الطبوغرافية"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, fuzzy, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "حجم ملف الأحداثيات مختلف عن القيم المحفوظة فى ملف الطبوغرافية"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2565,29 +2604,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "عدد النقاط    :   %d\n"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "يتم الان بناء الطبولوجى ...\n"
@@ -2617,77 +2656,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
 
-#: ../lib/vector/Vlib/net.c:117
-#, fuzzy
-msgid "Building graph..."
-msgstr "يتم الان بناء الطبولوجى ...\n"
-
-#: ../lib/vector/Vlib/net.c:162
-#, fuzzy
-msgid "Unable to build network graph"
-msgstr "%s لم يمكن العثور على الفيكتور"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-#, fuzzy
-msgid "Registering arcs..."
-msgstr ":تسجيل الخطوط"
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-#, fuzzy
-msgid "Cannot add network arc"
-msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-#, fuzzy
-msgid "Flattening the graph..."
-msgstr "يتم الان بناء الطبولوجى ...\n"
-
-#: ../lib/vector/Vlib/net.c:453
-#, fuzzy
-msgid "Graph was built"
-msgstr "تم بناء الطبولوجى\n"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2790,14 +2758,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "فشل الإتصال\n"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "فشل الإتصال\n"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2861,62 +2836,57 @@ msgstr "لم يحدد المشغل الأساسى"
 msgid "Default database is not set"
 msgstr "لم تحدد قاعدة البيانات الأساس"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "رابط قاعدة البيانات المطلوب %d, القيمة العظمى للرابط %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr " %s فى  %d خطا فى القاعدة على الصف"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 #, fuzzy
 msgid "Unable to open OGR DBMI driver"
 msgstr "OGR DBMI لم يمكن فتح مشغل"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "مسقط غير معروف"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 #, fuzzy
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3066,98 +3036,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, fuzzy, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "مسقط غير معروف"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "مسقط غير معروف"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 #, fuzzy
 msgid "Vector map name is not SQL compliant"
 msgstr "SQL اسم الخريطة غير متوافق مع نظام"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, fuzzy, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, fuzzy, c-format
 msgid "Unable to delete table <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, fuzzy, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, fuzzy, c-format
 msgid "Unable to open directory '%s'"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, fuzzy, c-format
 msgid "Unable to delete file '%s'"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, fuzzy, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/vector/Vlib/map.c:487
+#: ../lib/vector/Vlib/map.c:528
 #, fuzzy, c-format
-msgid "Unable to remove directory '%s'"
+msgid "Unable to remove directory '%s': %s"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3248,6 +3218,151 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+#, fuzzy
+msgid "Building graph..."
+msgstr "يتم الان بناء الطبولوجى ...\n"
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+#, fuzzy
+msgid "Unable to build network graph"
+msgstr "%s لم يمكن العثور على الفيكتور"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "لم يتم كتابة روابط قاعدة البيانات"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+#, fuzzy
+msgid "Registering arcs..."
+msgstr ":تسجيل الخطوط"
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+#, fuzzy
+msgid "Flattening the graph..."
+msgstr "يتم الان بناء الطبولوجى ...\n"
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+#, fuzzy
+msgid "Graph was built"
+msgstr "تم بناء الطبولوجى\n"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+#, fuzzy
+msgid "Cannot add network arc"
+msgstr "%s: لم يمكن فتح ملف  الطبوغرافية للكتابة\n"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3363,7 +3478,7 @@ msgid "3D raster map <%s> not found"
 msgstr "غير موجود'%s' الفيكتور"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, fuzzy, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3505,88 +3620,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "لم يمكن فتح ملف مؤقت"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "لم يمكن فتحه %s فى %s"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "إسم الفيكتور المدخلة"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "للخرائط الراسترية الموجودة %d\n"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "دليل الخواص المضاعفة القيمة خارج النطاق"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "غير موجود'%s' الفيكتور"
@@ -3595,32 +3720,36 @@ msgstr "غير موجود'%s' الفيكتور"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
@@ -3660,7 +3789,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "غير موجود'%s' الفيكتور"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3677,12 +3806,12 @@ msgid "Error computing map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3696,9 +3825,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3710,87 +3839,87 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "مسقط غير معروف"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
@@ -3820,132 +3949,132 @@ msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "يتم الان بناء الطبولوجى ...\n"
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "مسقط غير معروف"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3970,20 +4099,20 @@ msgid ""
 "%s"
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3992,7 +4121,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4000,12 +4129,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "datum لم يمكن فتح ملف جدول : %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "لم يتم كتابة روابط قاعدة البيانات"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4013,49 +4142,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "datum لم يمكن فتح ملف جدول : %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "لم يتم تنفيذ الأمر"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "[%s] لم يتم ايجاد"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "لم يتم تنفيذ الأمر"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4063,182 +4180,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "لم يتم تنفيذ الأمر"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "لم يتم تنفيذ الأمر"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "مسقط غير معروف"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "مسقط غير معروف"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4246,19 +4363,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4319,58 +4436,65 @@ msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "لم يمكن فتح ملف مؤقت"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, fuzzy, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4541,28 +4665,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
@@ -4592,189 +4716,230 @@ msgstr "غير موجود'%s' الفيكتور"
 msgid "Unable to parse time string: %s"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr " %s لم يمكن فتح"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "الشرق يجب أن يكون أكبر من الغرب"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "الشرق يجب أن يكون أكبر من الغرب"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "الشرق يجب أن يكون أكبر من الغرب"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "'%s'الى '%s'لم يمكن نسخ فيكتور"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4786,31 +4951,31 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "غير معروف"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr ""
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr ""
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4818,16 +4983,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4835,103 +5035,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr " %s لم يمكن فتح"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "موجود ولايمكن تغييره '%s' الفيكتور"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "يجب أن لا يحوى نقطة أو قيمة معدومة <%s> اسم ماف فيكتورى غير سليم\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr " غير مسموح به والاسم غير صحيح <%c> الحرف"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr " لم يمكن محو الخط,الخريطة  غير مفتوحة بوضع مهيأ للكتابة"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "إسم الفيكتور المدخلة"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr ""
 
@@ -5028,7 +5228,7 @@ msgstr "لم يمكن فتحه %s فى %s"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, fuzzy, c-format
 msgid "Raster map <%s> not found"
 msgstr "غير موجود'%s' الفيكتور"
@@ -5526,12 +5726,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "<%s> فى مجموعة الخريطة <%s>"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "<%s> فى مجموعة الخريطة <%s>"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5744,7 +5944,7 @@ msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيس
 msgid "WARNING: "
 msgstr "تحذير:"
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "خطــــأ:"
@@ -5879,7 +6079,7 @@ msgstr "مضاعفة حقل"
 msgid "Duplicate compressed field"
 msgstr "مضاعفة الحقل المضغوط"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
@@ -6006,22 +6206,22 @@ msgstr "GISRC - المتغير لم يحدد بشكل صحيح"
 msgid "Variable '%s' not set"
 msgstr "GISRC - المتغير لم يحدد بشكل صحيح"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr " %s لم يمكن فتح"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr " %s لم يمكن فتح"
@@ -6076,12 +6276,12 @@ msgstr " %s ellipsoid لا يوجد حقل  %s فى %s الملف"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr " %s ellipsoid لا يوجد حقل  %s فى %s الملف"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "لم يتم عمل عنصر مجموعة الخرائط%s (%s)"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "لم يتم عمل عنصر مجموعة الخرائط%s (%s)"
@@ -6099,19 +6299,19 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 #, fuzzy
 msgid "Flags"
 msgstr ""
 "\n"
 "علامات:\n"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 #, fuzzy
 msgid "Parameters"
 msgstr ""
@@ -6126,6 +6326,10 @@ msgstr ""
 msgid "Default"
 msgstr ""
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6215,19 +6419,23 @@ msgstr ""
 "\n"
 "علامات:\n"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr ""
 "\n"
 "إحداثيات:\n"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s الأساس الحفوظ: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   خيارات:"
@@ -6517,221 +6725,230 @@ msgstr ""
 msgid "Category value"
 msgstr "قيمة الفئة"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 #, fuzzy
 msgid "Category values"
 msgstr "قيم الفئة."
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "مثلا:7,3,1ـ13,9 "
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "اسم الملف المفتوح %s\n"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "إسم الراستر المخرجة"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "اسم الملف المفتوح %s\n"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "أحداثيات غير صحيحة"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "إسم الفيكتور المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "إسم الفيكتور المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "إسم الراستر المخرجة"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "إسم الراستر المخرجة"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "إسم الفيكتور المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "إسم الفيكتور المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "إسم الفيكتور المخرجة"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "إسم الراستر المخرجة"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "إسم الراستر المدخلة"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr " %s لم يمكن فتح"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "لم يمكن محو الخط"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "يتم الان بناء الطبولوجى ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6852,149 +7069,153 @@ msgstr ""
 "\n"
 "وصف:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "أسفا<%s> ليس إختيار صحيح\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "خطــــأ:"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 #, fuzzy
 msgid "Unable to determine program name"
 msgstr "لم يمكن تحديد مكان ملفات المستخدم"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "أسفا<%s> ليس إختيار صحيح\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr ""
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "أسفا<%s> ليس إختيار صحيح\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> فى مجموعة الخريطة <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
 "\tPresented as: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
 "\tLegal range: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
 "\tValid options: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
 "\t(%s)"
 msgstr ""
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
 "\tYou provided %d item(s): %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "أسفا<%s> ليس إختيار صحيح\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "أسفا<%s> ليس إختيار صحيح\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
@@ -7916,16 +8137,36 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr ""
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "خطأ قراءة ملف مضغوط [%s in %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "خطأ قراءة ملف مضغوط [%s in %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr " خطأ: لم يبدأ النظام. معد البرنامج نسي إستدعاء برنامج بدءالنظام ()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7956,51 +8197,46 @@ msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "خطا فى كتابة الدليل الفراغى\n"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "datum لم يمكن فتح ملف جدول : %s"
+msgid "No null file for <%s>"
+msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "datum لم يمكن فتح ملف جدول : %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "%d خطأ فى كتابة الصف المنعدم"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "غير موجود'%s' الفيكتور"
@@ -8091,22 +8327,22 @@ msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيس
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "[%s فى %s]لم يمكن انشاء ملف العنوان الرئيسى"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 #, fuzzy
 msgid "unable to write f_format file for CELL maps"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
@@ -8192,104 +8428,104 @@ msgstr "للخرائط الراسترية الموجودة %d\n"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "[%s in %s] الملف الرئيسى غير صالح للخريطة الأساس\n"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
+msgid "Compression with %s is not supported"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "[%s] فى [%s] - بيتة لكل خلية (%d) قيم كبيرة"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr "%s اسم ملف غير صحيح"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "غير متاح << %s >> الموقع"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "خطأ: محاولة لتحديث خريطة ليست ضمن مجموعة الخرائط الحالية"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "[%s] لم يتم ايجاد"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, fuzzy, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr " %s ellipsoid لا يوجد حقل  %s فى %s الملف"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr " %s ellipsoid لا يوجد حقل  %s فى %s الملف"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, fuzzy, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8329,24 +8565,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "خطا فى كتابة الدليل الفراغى\n"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "دعم الفئة [%s] فى مجموعة الخرائط [%s] %s"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "%d خطأ فى كتابة الصف المنعدم"
@@ -8590,33 +8842,28 @@ msgstr "غير معروف"
 msgid "Unsupported icon %d"
 msgstr "مسقط غير معروف"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "لم يمكن فتحه %s فى %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8695,17 +8942,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "تحذير:"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr " : توصيل اشباه المراكز"
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8713,112 +8960,157 @@ msgstr ""
 "الإستخدام:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "لقبول الأساس المخزن"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
+#, fuzzy
+msgid "initial GRASS Location"
+msgstr "أسفا<%s> ليس إختيار صحيح\n"
+
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "لم يمكن توفير ذاكرة كافية\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "الشكل المطلوب غير متاح فى هذا الأصدار"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8828,281 +9120,297 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "أسفا<%s> ليس إختيار صحيح\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
+msgstr ""
+
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
-msgstr ""
-
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "يتم الان بناء الطبولوجى ...\n"
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - المتغير لم يحدد بشكل صحيح"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr " : توصيل اشباه المراكز"
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "فشل الإتصال\n"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "لم يمكن فتحه %s فى %s"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr " %s لم يمكن فتح"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "لاشىء"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "لم يمكن فتح ملف مؤقت"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "غير موجود'%s' الفيكتور"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "لم يمكن فتحه %s فى %s"
@@ -9375,6 +9683,40 @@ msgstr "لم يمكن توفير ذاكرة"
 #~ msgstr "لم يمكن توفير ذاكرة"
 
 #, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "datum لم يمكن فتح ملف جدول : %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "'%s' لم يمكن فتح ملف التاريخ للفيكتور"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "datum لم يمكن فتح ملف جدول : %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "datum لم يمكن فتح ملف جدول : %s"
+
+#, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "لم يمكن فتحه %s فى %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "RETURN أضغط   لألغاء الأمر\n"
 
@@ -9383,8 +9725,8 @@ msgstr "لم يمكن توفير ذاكرة"
 #~ msgstr "غير موجود'%s' الفيكتور"
 
 #, fuzzy
-#~ msgid "Cannot fetch row"
-#~ msgstr "لم يمكن محو الخط"
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "إسم الراستر المدخلة"
 
 #, fuzzy
 #~ msgid "Mode type: {0} not supported."
@@ -9395,9 +9737,5 @@ msgstr "لم يمكن توفير ذاكرة"
 #~ msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr " [%s] غير قادر على أنشاء ملف عنوان رئيسى ل"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "إسم الراستر المدخلة"
+#~ msgid "Cannot fetch row"
+#~ msgstr "لم يمكن محو الخط"
diff --git a/locale/po/grasslibs_cs.po b/locale/po/grasslibs_cs.po
index 6190cfc..913b82e 100644
--- a/locale/po/grasslibs_cs.po
+++ b/locale/po/grasslibs_cs.po
@@ -9,16 +9,15 @@
 # Jan Trochta <j.trochta seznam.cz>, 2008.
 # Miroslav Hořejší <miroslav.horejsi at fsv.cvut.cz>, 2009/01.
 # Pavel Valenta <pavel.valenta at fsv.cvut.cz>, 2009/01.
-# Stanislav Horáček <stanislav.horacek at gmail.com>, 2015.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_cs\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-03-15 18:32+0100\n"
-"Last-Translator: Stanislav Horáček <stanislav.horacek at gmail.com>\n"
-"Language-Team: <freegeocz at fsv.cvut.cz>\n"
+"Last-Translator: \n"
+"Language-Team:  <cs at li.org>\n"
 "Language: cs_CS\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -47,10 +46,12 @@ msgstr "Nelze spustit ovladač <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nelze otevřít databázi <%s> pomocí ovladače <%s>"
@@ -60,45 +61,45 @@ msgstr "Nelze otevřít databázi <%s> pomocí ovladače <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "Nelze získat seznam tabulek v databázi <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Tabulka <%s> již existuje v databázi <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Nelze otevřít vybrat kurzor: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Sloupec <%s> není typu integer"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Sloupec <%s> nebyl nalezen"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Nelze vytvořit tabulku <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Neznámý typ sloupce (sloupec <%s>)"
@@ -710,8 +711,8 @@ msgstr "Typ prvku OGR %d není podporován"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -721,8 +722,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -829,12 +830,12 @@ msgstr ""
 "V tomto vydání není podporován starý formát topologie verze %d.%d. Zkuste "
 "topologii přebudovat."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Chyba GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -881,17 +882,17 @@ msgstr "Index vrstev je mimo rozsah"
 msgid "Category index out of range"
 msgstr "Index vrstev je mimo rozsah"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Chyba při zápisu souboru s indexem kategorií <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
@@ -957,8 +958,8 @@ msgstr "Počet chybných hranic: %d"
 msgid "Number of redundant holes: %d"
 msgstr "Počet hranic: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
@@ -1055,16 +1056,16 @@ msgstr "Počet ploch: -"
 msgid "Number of isles: -"
 msgstr "Počet ostrovů: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Chyba při sestavení souboru s topologií"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
@@ -1073,21 +1074,21 @@ msgstr ""
 "Nelze vytvořit prostorový index z topologie, vektorová mapa není otevřena na "
 "úrovni 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "BUG (Vect_build_sidx_from_topo): bod neexistuje"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Chyba při zapisování souboru s prostorovým indexem."
 
@@ -1153,9 +1154,11 @@ msgstr "Neznámé klíčové slovo %s v hlavičce vektorové mapy"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1204,8 +1207,10 @@ msgstr "Nelze vybrat atributy"
 msgid "Unable to fetch data from table"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Sloupec <%s> nebyl nalezen v tabulce <%s>"
@@ -1245,17 +1250,17 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Nelze přidat arc  do sítě"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "chyba dglShortestPath: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
@@ -1264,7 +1269,7 @@ msgstr ""
 "Soubor se souřadnicemi (Coor) vektorové mapy <%s@%s> je větší než by měl být "
 "(%ld bytů přebývá)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1286,7 +1291,7 @@ msgstr "Pokus o čtení bodů z neexistující plochy"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1313,12 +1318,12 @@ msgstr "Pokus načíst topografii pro mrtvý ostrov (%d)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1326,7 +1331,7 @@ msgstr "Pokus načíst topografii pro mrtvý ostrov (%d)"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
@@ -1417,7 +1422,7 @@ msgstr "Nelze přepsat prvek %d"
 msgid "No connection defined"
 msgstr "Připojení selhalo."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Nesprávné jméno vektorové mapy <%s>"
@@ -1433,7 +1438,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Nelze přepsat prvek %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Nelze otevřít soubor %s"
@@ -1656,7 +1661,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "pro tento formát/úroveň není podpora"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Pokus číst mrtvou linii "
 
@@ -1670,17 +1675,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Nelze číst linii %d"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Pokus o čtení bodů z neexistující plochy"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Nelze přepsat prvek %d"
@@ -1765,28 +1770,45 @@ msgstr "Prvek OGR bez ID."
 msgid "OGR feature type '%s' not supported"
 msgstr "Typ prvku OGR %d není podporován"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Chybný směr linie ve Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 "Náhodné čtení není podporováno OGR pro tuto vrstvu, nelze vytvořit podporu"
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Nelze otevřít soubor s topologií pro zápis <%s>"
@@ -1889,7 +1911,8 @@ msgstr "Nelze kopírovat vektorovou mapu <%s> do <%s>"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Nelze připojit databázi k vektorové mapě <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Nelze kopírovat tabulku <%s>"
@@ -1921,6 +1944,21 @@ msgstr "Překrytí: typy hranice x linie nejsou podporovány operátorem AND"
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Překrytí: typy plocha x plocha nejsou podporovány operátorem AND"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Nelze vytvořit tabulku <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Nelze kopírovat tabulku <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Nelze kopírovat tabulku <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1930,7 +1968,7 @@ msgstr "Prvek OGR bez ID je ignorován"
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Nelze otevřít zdroj dat OGR '%s'"
@@ -2217,7 +2255,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2230,32 +2268,32 @@ msgstr "Vektorová mapa <%s> nebyla nalezena"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Mapa, která není obsažena v aktuálním mapsetu, nemůže být otevřena pro zápis"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nelze otevřít vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Nelze otevřít soubor s topologií pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2264,98 +2302,98 @@ msgstr ""
 "Nelze otevřít existující vektorovou mapu <%s> na úrovni %d. Zkuste "
 "přebudovat topologii pomocí v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Vytvářím topologii pro vektorovou vrstvu <%s>..."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Nelze otevřít vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Název mapy nevyhovuje podmínkám SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Nelze smazat vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Nelze otevřít soubor s historií pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "pro tento formát/úroveň není podpora"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "Velikost souboru 'coor' se liší od hodnot uložených v souboru s topologií"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Vytvořte prosím znovu topologii pro vektorovou mapu <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 "Velikost souboru 'coor' se liší od hodnot uložených v souboru s topologií"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Nelze otevřít soubor %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2613,29 +2651,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Počet primitiv: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Vytváření ploch..."
@@ -2665,76 +2703,6 @@ msgstr "%s:Plocha %d neexistuje"
 msgid "Attempt to access dead area %d"
 msgstr "Pokus o odstranění mrtvé plochy"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Vytváření grafu ..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Nelze sestavit síťový grafu"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Sloupec pro váhu směr dopředu není specifikován"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Arc vrstva < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "Datový typ sloupce <%s> není podporován (musí být integer nebo double)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Registrování arcs ..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"Datová položka pro linii %d (cat = %d, dopředu/oba směry nebyla "
-"nalezena(dopředu/oba směry linie přeskočeny)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"Datová položka pro linii %d (cat = %d, směr dozadu) nebyla nalezena(směr "
-"linie přeskočen)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Nelze přidat arc sítě"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Nastavení váhy uzlů ..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"Datový záznam pro uzel %d (cat = %d) nebyl nalezen (váha nastavena na 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Zpracování grafu ..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Struktura grafu sestavena"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Chybný směr linie ve Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "Linie není ukončena smyčkou"
@@ -2840,14 +2808,21 @@ msgstr "Porušený řádek v hlavičce: %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Připojení selhalo."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Připojení selhalo."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2912,26 +2887,26 @@ msgstr "Výchozí ovladač není nastaven"
 msgid "Default database is not set"
 msgstr "Výchozí databáze není nastavena"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Požadovaný dblink %d, maximální počet spojení %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Chyba v pravidlu na řádku %d v %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Nelze otevřít vrstvu <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Nelze otevřít ovladač pro OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2939,35 +2914,30 @@ msgstr ""
 "Všechny FID testy selhaly. Ani 'FID' ani 'ogc_fid' nebo 'ogr_fid' nebo gid' "
 "nejsou použitelné v OGR DB tabulce"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "Neznámá Location"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "Bug: pokus o aktualizaci mapy, která není v aktuálním mapsetu."
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Nesprávné jméno vektorové mapy <%s>"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3117,97 +3087,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Nelze smazat prvek %d z prostorového indexu"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Nelze otevřít hlavičkový soubor vektorové mapy <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Porušený řádek v hlavičce: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Neznámé klíčové slovo %s v hlavičce vektorové mapy"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Neznámé kartografické zobrazení"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Název mapy nevyhovuje podmínkám SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Nelze kopírovat vektorovou mapu <%s> do <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Nelze smazat tabulku <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Nelze vytvořit index pro tabulku <%s>, klíč <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Nesprávné jméno vektorové mapy <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Nelze nelézt tabulku <%s> připojenou k vektorové mapě <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Tabulka <%s> připojená k vektorové mapě <%s> neexistuje"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Nelze otevřít adresář <%s>"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Nelze smazat soubor <%s>"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Nelze přejmenovat adresář '%s' na '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Nelze smazat adresář '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3294,6 +3264,156 @@ msgstr "Vektorová struktura nebyla nikdy inicializována"
 msgid "Map structure has been closed"
 msgstr "Struktura mapy byla uzavřena"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Vytváření grafu ..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Nelze sestavit síťový grafu"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Sloupec pro váhu směr dopředu není specifikován"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Arc vrstva < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Sloupec <%s> nebyl nalezen v tabulce <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "Datový typ sloupce <%s> není podporován (musí být integer nebo double)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Nastavení váhy uzlů ..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"Datový záznam pro uzel %d (cat = %d) nebyl nalezen (váha nastavena na 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Nelze přidat arc sítě"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"Datový záznam pro uzel %d (cat = %d) nebyl nalezen (váha nastavena na 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Nelze přidat arc sítě"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Arc vrstva < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Registrování arcs ..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Datová položka pro linii %d (cat = %d, dopředu/oba směry nebyla "
+"nalezena(dopředu/oba směry linie přeskočeny)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"Datová položka pro linii %d (cat = %d, směr dozadu) nebyla nalezena(směr "
+"linie přeskočen)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Zpracování grafu ..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Struktura grafu sestavena"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"Datová položka pro linii %d (cat = %d, dopředu/oba směry nebyla "
+"nalezena(dopředu/oba směry linie přeskočeny)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"Datová položka pro linii %d (cat = %d, směr dozadu) nebyla nalezena(směr "
+"linie přeskočen)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Nelze přidat arc sítě"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3408,7 +3528,7 @@ msgid "3D raster map <%s> not found"
 msgstr "3D rastrová mapa <%s> nebyla nalezena"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3552,88 +3672,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Nelze číst linii %d"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Nelze přepsat prvek %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Typ prvku OGR %d není podporován"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Název sloupce atributové tabulky"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Potíže při čtení rastrové mapy"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Prvek OGR bez ID je ignorován"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Index je mimo rozsah"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Tabulka <%s> připojená k vektorové mapě <%s> neexistuje"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Typ prvku OGR %d není podporován"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Typ prvku OGR %d není podporován"
@@ -3642,32 +3772,36 @@ msgstr "Typ prvku OGR %d není podporován"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Nelze vytvořit rastrovou mapu <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Nelze číst soubor s barevnou škálou pro rastrovou mapu <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Nelze vytvořit rastrovou mapu <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Nelze kopírovat vektorovou mapu <%s> do <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Nelze smazat vektorovou mapu <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Nelze vytvořit rastrovou mapu <%s>"
@@ -3707,7 +3841,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3724,12 +3858,12 @@ msgid "Error computing map <%s>"
 msgstr "Chyba při otevírání g3d mapy <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3743,9 +3877,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3757,88 +3891,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Neznámý vektorový typ"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  formát: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Neplatný soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "syntaktická chyba"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Neplatný soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Neplatný soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
@@ -3868,132 +4002,132 @@ msgstr "Nelze vytvořit vektorovou mapu <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Nelze otevřít vektorovou mapu <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Rastrová mapa <%s> nebyla nalezena"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Vektorová mapa <%s> nebyla nalezena"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Vytváření ploch..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Nelze smazat adresář '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "nelze zapsat informace o historii pro [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Nelze otevřít soubor s definicí vektorové databáze '%s'"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "nemohu nalézt dočasný nullový soubor %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "nemohu nalézt dočasný nullový soubor %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Nelze otevřít soubor s indexem kategorií <%s> pro zápis"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Typy vektorových prvků"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Nelze vytvořit hlavičkový soubor pro [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4018,20 +4152,20 @@ msgid ""
 "%s"
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Nelze otevřít soubor s definicí vektorové databáze '%s'"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4040,7 +4174,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Nelze otevřít soubor s definicí vektorové databáze '%s'"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4048,12 +4182,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Nelze otevřít soubor s definicí vektorové databáze '%s'"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Typy vektorových prvků"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4061,49 +4195,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Nelze smazat adresář '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nelze otevřít soubor s definicí vektorové databáze '%s'"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Nelze vytvořit tabulku <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Nelze spustit příkaz"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Nelze nalézt '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Nelze spustit příkaz"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4111,182 +4233,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Nelze spustit příkaz"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Nelze spustit příkaz"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Neznámý vektorový typ"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  formát: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Typy vektorových prvků"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Nelze zapsat kvantizační pravidla pro mapu %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  formát: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4294,19 +4416,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4367,58 +4489,65 @@ msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Nelze číst hlavičkový soubor"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Nelze číst rozsah hodnot 3D rastrové mapy <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Nelze zavřít rastrovou mapu <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Název původní rastrové mapy"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  formát: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Název původní rastrové mapy"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4590,28 +4719,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Nelze otevřít hlavičkový soubor rastrové mapy <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Rastrová mapa <%s> nebyla nalezena"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Nelze číst rozmezí hodnot rastrové mapy <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Rastrová mapa <%s> nebyla nalezena"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
@@ -4641,189 +4770,230 @@ msgstr "Typ prvku OGR %d není podporován"
 msgid "Unable to parse time string: %s"
 msgstr "Nelze otevřít soubor %s v <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Rastrová mapa <%s> nebyla nalezena"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Nelze zavřít vstupní mapu"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "Nelze vytvořit soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Neplatný soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Neplatný soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Neplatný soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Hodnota pro východ musí být větší než pro západ"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Hodnota pro východ musí být větší než pro západ"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "Nelze vytvořit soubor s časovou značkou pro %s mapu %s v mapsetu %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Hodnota pro východ musí být větší než pro západ"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Nelze najít vektorovou mapu <%s> v <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4835,32 +5005,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "neznámý"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s nenalezen"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "povinný: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4868,16 +5038,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Nesprávné jméno vektorové mapy <%s>"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Nesprávné jméno vektorové mapy <%s>"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Nesprávné jméno vektorové mapy <%s>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Nesprávné jméno vektorové mapy <%s>"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4885,79 +5090,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Nelze zavřít vstupní mapu"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Vektorová mapa <%s> již existuje a bude přepsána."
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Nedovolený název souboru. Soubor se nemůže jmenovat '.' nebo 'NIC'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Nedovolený název souboru. Znak <%c> není povolen.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "Pro vrstvu %d nebylo definováno databázové připojení"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Chyba při načítání vektorové mapy <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4965,24 +5170,24 @@ msgid ""
 msgstr ""
 "Nelze oobnovit prvek %d, vektorová mapa <%s> není otevřena v módu pro 'zápis'"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Název vstupní vektorové mapy"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Barva"
@@ -5082,7 +5287,7 @@ msgstr "Nelze otevřít soubor <%s> pro zápis"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Rastrová mapa <%s> nebyla nalezena"
@@ -5602,12 +5807,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "%s nenalezeno v současném mapsetu (%s)"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "%s nenalezeno v současném mapsetu (%s)"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5823,7 +6028,7 @@ msgstr "Neplatná časová značka specifikovaná pro %s mapu %s v mapsetu %s"
 msgid "WARNING: "
 msgstr "UPOZORNĚNÍ: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "CHYBA: "
@@ -5959,7 +6164,7 @@ msgstr "duplicitní položka pro formát"
 msgid "Duplicate compressed field"
 msgstr "duplicitní komprimovaná položka"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s:Plocha %d neexistuje"
@@ -6088,22 +6293,22 @@ msgstr "GISRC - proměnná není nastavena"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): Proměnná %s není nastavena"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): mapset <%s> neodpovídá xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Nelze otevřít '%s'"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: nelze otevřít soubor %s"
@@ -6158,12 +6363,12 @@ msgstr "Neplatné es: položka '%s' v souboru %s v <%s>"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "V souboru %s v <%s> chybí informace o ref. elipsoidu"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Nelze vytvořit prvek mapsetu %s (%s): %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Nelze zpřístupnit prvek mapsetu %s(%s): %s"
@@ -6181,16 +6386,16 @@ msgid "SYNOPSIS"
 msgstr "Synopse"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Přepínače"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parametry"
 
@@ -6202,6 +6407,10 @@ msgstr "Volby"
 msgid "Default"
 msgstr "Výchozí"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6292,17 +6501,22 @@ msgstr "Prvek OGR bez ID je ignorován"
 msgid "Flags:"
 msgstr "Přepínače:"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Redukovaný výpis"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Parametry"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   výchozí: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   volby:"
@@ -6584,219 +6798,228 @@ msgstr ""
 msgid "Category value"
 msgstr "Hodnota kategorie"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Hodnoty kategorie"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Např.: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Id prvku"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Id prvků"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Název vstupního souboru %s"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "Název výstupního souboru"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Oddělovač"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Barva"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Buď název standardní barvy nebo R:G:B triplet"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Buď standardní GRASS barva, R:G:B triplet nebo \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 msgid "Name of input directory"
 msgstr "Název vstupního adresáře"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr "Jednotky"
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr "Typy dat"
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Neplatné souřadnice"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Název vstupní vektorové mapy"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr "Textový řetězec představující hodnotu NULL"
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Nelze nastavit zaostření"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Název výstupní rastrové mapy"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Název rastrové vrstvy výškového modelu"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Název rastrové vrstvy výškového modelu"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Název výstupní rastrové mapy"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Název vstupní vektorové mapy"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Název vstupní vektorové mapy"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Nedostatek místa ve vektorovém poli"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Název vstupní 3d rastrové vrstvy"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Název vstupní 3d rastrové vrstvy"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Název výstupní 3d rastrové vrstvy"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Nelze zavřít vstupní mapu"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "Podmínka WHERE příkazu SQL bez klíčového slova 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 msgid "Do not create attribute table"
 msgstr "Nevytvářet atributovou tabulku"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr "Nevytvářet topologii"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6915,79 +7138,84 @@ msgstr ""
 "\n"
 "Popis:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG v popisu, volba %s v <%s> neexistuje"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG v popisu, volba %s v <%s> neexistuje"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Použijte buď --quiet nebo --verbose indikátor ne oba. Použiji --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr "Použijte buď --quiet nebo --verbose indikátor ne oba. Použiji --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr "Použijte buď --quiet nebo --verbose indikátor ne oba. Použiji --quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Promiňte, ale <%s> není platná volba\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "CHYBA: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "nelze určit jméno programu"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Promiňte, ale <%c> není platný přepínač\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Promiňte, ale <%s=> je dvojznačný\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Promiňte, ale <%s> není platný parametr\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> v mapsetu <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6996,7 +7224,7 @@ msgstr ""
 "\n"
 "CHYBA: neplatná syntaxe rozsahu pro parametr <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7005,14 +7233,14 @@ msgstr ""
 "\n"
 "CHYBA: hodnota <%s> mimo rozsah parametru <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "CHYBA: Chybí hodnota pro parametr <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7021,7 +7249,7 @@ msgstr ""
 "\n"
 "CHYBA: hodnota <%s> mimo rozsah parametru <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7031,7 +7259,7 @@ msgstr ""
 "CHYBA: Povinný parametr <%s> nebyl zadán:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7040,37 +7268,37 @@ msgstr ""
 "\n"
 "CHYBA: volba <%s> musí být zadána jako násobek %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Promiňte, ale <%s> není platná volba\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Oddělovač"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Promiňte, ale <%s> není platná volba\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Typ prvku OGR %d není podporován"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Nelze otevřít soubor %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Nelze vytvořit tabulku <%s>"
@@ -8052,16 +8280,36 @@ msgstr "Neplatné popisy ref. elipsoidu (a, rf, es, nebo b) v souboru"
 msgid "No ellipsoid info given in file"
 msgstr "V souboru není uveden žádný referenční elipsoid"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Selhání při počátečním čtení komprimovaného souboru [%s v %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Selhání při počátečním čtení komprimovaného souboru [%s v %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "Systém není inicializován. Programátor zapomněl zavolat G_gisinit()."
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8092,51 +8340,46 @@ msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Chyba při zápisu souboru s indexem kategorií <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Nelze otevřít hlavičkový soubor vektorové mapy <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "nemohu nalézt dočasný nullový soubor %s"
+msgid "No null file for <%s>"
+msgstr "Nelze otevřít hlavičkový soubor vektorové mapy <%s>"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "Nelze otevřít soubor %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "chyba při čtení prázdného řádku %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: mapa [%s] není pro zápis otevřena - žádost ignorována"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: neotevřený souborový deskriptor - žádost ignorována"
@@ -8227,22 +8470,22 @@ msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Nelze číst hlavičkový soubor pro rastrovou mapu <%s@%s>"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Nesprávné jméno vektorové mapy <%s>"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Nelze smazat soubor <%s>"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "neschopen zapsat soubor f_format pro mapy CELL "
 
@@ -8331,12 +8574,12 @@ msgstr "Chyba při načítání 3D rastrové mapy <%s>"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "Rastrová mapa <%s@%s>:formát položky v hlavičkovém souboru je neplatný"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Typ prvku OGR %d není podporován"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8345,17 +8588,17 @@ msgstr ""
 "Rastrová mapa<%s@%s> je v jiné projekci než současnýregion. Nalezena mapa <"
 "%s@%s>, měla by být <%s>"
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Rastrová mapa <%s@%s> je v jiné zóně (%d) než současný region (%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Rastrová mapa<%s@%s>: příliš mnoho bytů na buňku (%d)"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
@@ -8363,78 +8606,78 @@ msgstr ""
 "map <%s@%s> je součásti knihovny GDAL, ale vaše kompilace GRASSu knihovnu "
 "GDAL nepodporuje."
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Nelze otevřít hlavičkový soubor rastrové mapy <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "chyba při čtení mapy <%s@%s>, řádek %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Nelze otevřít hlavičkový soubor vektorové mapy <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Nelze otevřít soubor %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Nesprávné jméno vektorové mapy <%s>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> je neplatné jméno souboru"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "G__open_raster_new(): nejsou k dispozici žádné dočasné soubory"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Rastrová mapa <%s> není v aktuálním mapsetu (%s)"
+
+#: ../lib/raster/open.c:817
 #, fuzzy
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 "G_set_fp_type(): Může být zavoláno pouze s typy FCELL_TYPE nebo DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Nelze nalézt '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Neplatný typ: položka '%s' v souboru '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Neplatný typ: položka '%s' v souboru '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Rastrová mapa <%s> není xdr:posloupnost_bytů: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 #, fuzzy
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
@@ -8477,24 +8720,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "Čtení rastrové mapy <%s@%s> požadavek pro řádek %d je mimo region"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Chyba při zápisu souboru s indexem kategorií <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "chyba při čtení komprimované mapy <%s@%s>, řádek %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "chyba při čtení prázdného řádku %d"
@@ -8734,33 +8993,28 @@ msgstr "neznámý"
 msgid "Unsupported icon %d"
 msgstr "Typy vektorových prvků"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Nelze spustit ovladač <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Nelze spustit ovladač <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Nelze otevřít soubor %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8836,17 +9090,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Nelze otevřít soubor <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "UPOZORNĚNÍ: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Nastavení váhy uzlů ..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8854,115 +9108,159 @@ msgstr ""
 "Použití:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "použít výchozí"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "neplatná mapová projekce\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Nelze alokovat paměť"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Požadovaný formát není zkompilován v této verzi"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8972,283 +9270,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Promiňte, ale <%s> není platná volba\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Prosím, oznamte tuto chybu vývojářům GRASSu.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
-msgstr ""
-
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s:Plocha %d neexistuje"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s:Plocha %d neexistuje"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Vytváření grafu ..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - proměnná není nastavena"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Nastavení váhy uzlů ..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Připojení selhalo."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Nelze nastavit zaostření"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Nápověda pro příkaz [%s] není dostupná\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "nic"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Nelze otevřít dočasný soubor"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Typ prvku OGR %d není podporován"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Nelze spustit ovladač <%s>"
@@ -9520,10 +9834,48 @@ msgstr "Nedostatek paměti"
 #~ msgid "Out of memmory"
 #~ msgstr "Nedostatek paměti"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Nelze otevřít soubor s definicí vektorové databáze '%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nelze otevřít hlavičkový soubor pro vektorovou mapu <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "nemohu nalézt dočasný nullový soubor %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "Nelze otevřít soubor %s"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "CHYBA: volba <%s>: <%s> existuje.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Nesprávné jméno vektorové mapy <%s>"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Nelze otevřít soubor %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Promiňte, ale <%s> není platná volba\n"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "stiskněte RETURN pro pokračování -->"
 
@@ -9568,9 +9920,5 @@ msgstr "Nedostatek paměti"
 #~ msgstr "Nesprávné jméno vektorové mapy <%s>"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Nesprávné jméno vektorové mapy <%s>"
-
-#, fuzzy
 #~ msgid "Removing empty 3D raster maps"
 #~ msgstr "Název vstupní rastrové mapy"
diff --git a/locale/po/grasslibs_de.po b/locale/po/grasslibs_de.po
index f69e454..12540b6 100644
--- a/locale/po/grasslibs_de.po
+++ b/locale/po/grasslibs_de.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2014-08-13 11:57+0200\n"
 "Last-Translator: Robert Nuske <robert.nuske nw-fva.de>\n"
 "Language-Team: German <grass-translations at lists.osgeo.org>\n"
@@ -44,10 +44,12 @@ msgstr "Kann den Treiber <%s> nicht starten."
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Kann die Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
@@ -57,45 +59,45 @@ msgstr "Kann die Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
 msgid "Unable to get list tables in database <%s>"
 msgstr "Kann die Tabellen der Datenbank <%s> nicht auflisten."
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Tabelle <%s> existiert bereits in der Datenbank <%s>."
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Kann den Select-Cursor '%s' nicht öffnen."
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Spalte <%s> ist nicht Integer."
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Spalte <%s> nicht gefunden."
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Kann die Tabelle <%s> nicht anlegen."
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Kann keine Daten aus der Tabelle <%s> beziehen."
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Unbekannter Spaltentyp (Spalte <%s>)."
@@ -704,8 +706,8 @@ msgstr "OGR Objekttyp %d wird nicht unterstützt."
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -715,8 +717,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -817,12 +819,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr "Vektor."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "GngFlatten Fehler"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr "Berechne minimalen aufspannenden Baum..."
 
@@ -867,17 +869,17 @@ msgstr "Layerindex außerhalb des Wertebereichs."
 msgid "Category index out of range"
 msgstr "Layerindex außerhalb des Wertebereichs."
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Kann die Kategorieindex-Datei der Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Fehler beim Schreiben der Kategorieindex-Datei <%s>."
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Kann die Kategorieindex-Datei der Vektorkarte <%s> nicht öffnen."
@@ -945,8 +947,8 @@ msgstr "Anzahl inkorrekter Grenzen: %d"
 msgid "Number of redundant holes: %d"
 msgstr "Anzahl der Grenzen: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Vektor Karte"
@@ -1043,37 +1045,37 @@ msgstr "Anzahl der Flächen: -"
 msgid "Number of isles: -"
 msgstr "Anzahl der Inseln: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Fehler beim Schreiben der Topologie-Datei."
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "BUG (Vect_build_sidx_from_topo): Knoten existiert nicht."
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Fehler beim Schreiben des räumlichen Index."
 
@@ -1139,9 +1141,11 @@ msgstr "unbekannt Vektor"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1190,8 +1194,10 @@ msgstr "Kann Attribute nicht selektieren."
 msgid "Unable to fetch data from table"
 msgstr "Kann keine Daten aus der Tabelle <%s> beziehen."
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Spalte <%s> nicht in Tabelle <%s> gefunden."
@@ -1231,17 +1237,17 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Kann 'network arc' nicht hinzufügen."
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "dglShortestPath Fehler: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
@@ -1250,7 +1256,7 @@ msgstr ""
 "Coor-Datei der Vektorkarte <%s@%s> ist größer als sie sein sollte (%ld Byte "
 "Überschuss)."
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1272,7 +1278,7 @@ msgstr "Versuche Punkte nicht existenter Fläche zu lesen."
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1299,12 +1305,12 @@ msgstr "Versuche Topologie einer toten Insel (%d) zu lesen."
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1312,7 +1318,7 @@ msgstr "Versuche Topologie einer toten Insel (%d) zu lesen."
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Kann die Kategorieindex-Datei der Vektorkarte <%s> nicht öffnen."
@@ -1404,7 +1410,7 @@ msgstr "Kann Objekt %d nicht schreiben."
 msgid "No connection defined"
 msgstr "Verbindung fehlgeschlagen."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Kann nicht zum Verzeichnis %s wechseln."
@@ -1420,7 +1426,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Kann Objekt %d nicht schreiben."
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Kann Datei %s nicht öffnen."
@@ -1642,7 +1648,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "nur das native Format unterstützt"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Versuche tote Linie zu lesen."
 
@@ -1657,17 +1663,17 @@ msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 "Vect_read_area_geos(): Kann Insel-ID %d der Fläche mit ID %d nicht lesen."
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Kann Linien-Offset %ld nicht lesen."
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Versuche Punkte nicht existenter Fläche mit ID %d zu lesen."
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "Kann die Objekt-ID %d nicht lesen."
@@ -1754,16 +1760,33 @@ msgstr "OGR Objekt ohne ID."
 msgid "OGR feature type '%s' not supported"
 msgstr "OGR Objekttyp %d wird nicht unterstützt."
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Falsche Linienrichtung in Vect_net_get_line_cost()."
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
@@ -1771,12 +1794,12 @@ msgstr ""
 "Direktes Lesen wird von OGR für diesen Layer nicht unterstützt, kann Support "
 "nicht erzeugen."
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Kann Topologiedatei nicht zum Schreiben von <%s> öffnen"
@@ -1877,7 +1900,8 @@ msgstr "Kann die Vektorkarte <%s> nicht nach <%s> kopieren."
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Kann Datenbankverknüpfung für Vektorkarte <%s> nicht hinzufügen."
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Kann die Tabelle <%s> nicht kopieren."
@@ -1909,6 +1933,21 @@ msgstr "Overlay: Typ Linie/Grenze wird nicht vom Operator AND unterstützt."
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Overlay: Typ Fläche x Fläche wird nicht vom Operator AND unterstützt."
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Kann die Tabelle <%s> nicht anlegen."
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Kann die Tabelle <%s> nicht kopieren."
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Kann die Tabelle <%s> nicht kopieren."
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1918,7 +1957,7 @@ msgstr "OGR feature ohne ID ignoriert."
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Kann die OGR-Datenquelle '%s' nicht öffnen."
@@ -2205,7 +2244,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2218,33 +2257,33 @@ msgstr "Vektorkarte <%s> nicht gefunden."
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Eine Karte, die sich nicht im aktuellen Mapset befindet, kann nicht zum "
 "Aktualisierung geöffnet werden."
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Kann Topologie-Datei der Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2253,98 +2292,98 @@ msgstr ""
 "Kann die Vektorkarte <%s> nicht auf Level %d öffnen. Versuchen Sie die "
 "Topologie mit v.build neu anzulegen."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Vektor Karte."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Kann die History-Datei der Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Rasterkarte <%s> ist nicht im aktuellen Mapset (%s)."
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Name der Vektorkarte ist nicht SQL kompatibel."
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Kann Vektorkarte <%s> nicht löschen."
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "nur das native Format unterstützt"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Unable to stat file <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "Größe der 'coor' Datei unterscheidet sich von dem in der Topologie-Datei "
 "gespeicherten Wert."
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Bitte erneuern Sie die Topologie der Vektorkarte <%s@%s>."
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "Größe"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2604,29 +2643,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr "Fang Vertices Durchgang 1: Selektiere Punkte"
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr "Fang Vertices Durchgang 2: Weise Anker-Vertices zu"
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr "Fang Vertices Durchgang 3: Fange zugewiesene Punkte"
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr "Gefangene Vertices: %d"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr "Neue Vertices: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Erzeuge Flächen..."
@@ -2656,78 +2695,6 @@ msgstr "%s: Fläche %d existiert nicht."
 msgid "Attempt to access dead area %d"
 msgstr "Versuche ein totes Objekt zu löschen"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Erzeuge Graphen..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Kann den Netzwerk-Graph nicht erzeugen."
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Spalte der Vorwärtskosten nicht angegeben."
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Arc Feld < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-"Spaltentyp der Spalte <%s> wird nicht unterstützt (muss numerisch sein)."
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Registriere arcs..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"Datenbankeintrag für Linie %d (cat = %d, vorwärts/beide Richtung(en)) nicht "
-"gefunden (vorwärts/beide Richtung(en) der Linie übersprungen)."
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"Datenbankeintrag für Linie %d (cat = %d, rückwärts Richtung) nicht gefunden "
-"(Richtung der Linie übersprungen)."
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Kann Netzwerk arc nicht hinzufügen."
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Setze Kosten der Knoten..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"Datenbankeintrag für Knoten %d (cat = %d) nicht gefunden (Kosten auf 0 "
-"gesetzt)."
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Mache den Graph flach..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Graph wurde erstellt."
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Falsche Linienrichtung in Vect_net_get_line_cost()."
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "Linie ist nicht gelooped."
@@ -2832,14 +2799,21 @@ msgstr "Kaputte Zeile im Header: %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Verbindung fehlgeschlagen."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Verbindung fehlgeschlagen."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2904,26 +2878,26 @@ msgstr "Standard-Treiber wurde nicht angegeben."
 msgid "Default database is not set"
 msgstr "Standard-Datenbank ist nicht angegeben."
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Angeforderte Datenbankverknüpfung %d, maximale Verknüpfungsanzahl %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Fehler in Regel in Zeile %d in %s."
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Kann den OGR DBMI-Treiber nicht öffnen."
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2931,36 +2905,31 @@ msgstr ""
 "Alle FID Tests fehlgeschlagen. Weder 'FID' noch 'ogc_fid', 'ogr_fid', 'gid' "
 "sind in der OGR DB Tabelle vorhanden."
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "unbekannt"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 "Bug: Versuch eine Karte zu aktualisieren, die nicht im aktuellen Mapset ist."
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Kann nicht zum Verzeichnis %s wechseln."
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3110,97 +3079,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Kann Eintrag %d nicht aus dem räumlichen Index löschen."
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Vektor Karte"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Kann Header-Datei der Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Kaputte Zeile im Header: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Unbekanntes Schlüsselwort %s in Vektor header."
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Unbekannte Projektion."
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Name der Vektorkarte ist nicht SQL kompatibel."
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht nach <%s> kopieren."
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Kann Tabelle <%s> nicht löschen."
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Kann keinen Index für die Tabelle <%s>, Schlüssel <%s> erzeugen."
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Ungültiger Name für Vektorkarte <%s>."
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Kann Header-Datei der Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Kann die Tabelle <%s> verknüpft mit Vektorkarte <%s> nicht finden."
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Tabelle <%s> verknüpft mit Vektorkarte <%s> existiert nicht."
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Kann das Verzeichnis '%s' nicht öffnen."
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Kann Datei '%s' nicht löschen."
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Kann das Verzeichnis '%s' nicht in '%s' umbenennen."
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Kann das Verzeichnis '%s' nicht löschen."
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3287,6 +3256,159 @@ msgstr "Kartenstruktur wurde nie initialisiert."
 msgid "Map structure has been closed"
 msgstr "Kartenstruktur wurde geschlossen."
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Erzeuge Graphen..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Kann den Netzwerk-Graph nicht erzeugen."
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Spalte der Vorwärtskosten nicht angegeben."
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Arc Feld < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Spalte <%s> nicht in Tabelle <%s> gefunden."
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+"Spaltentyp der Spalte <%s> wird nicht unterstützt (muss numerisch sein)."
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Setze Kosten der Knoten..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"Datenbankeintrag für Knoten %d (cat = %d) nicht gefunden (Kosten auf 0 "
+"gesetzt)."
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Kann Netzwerk arc nicht hinzufügen."
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"Datenbankeintrag für Knoten %d (cat = %d) nicht gefunden (Kosten auf 0 "
+"gesetzt)."
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Kann Netzwerk arc nicht hinzufügen."
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Arc Feld < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Registriere arcs..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Datenbankeintrag für Linie %d (cat = %d, vorwärts/beide Richtung(en)) nicht "
+"gefunden (vorwärts/beide Richtung(en) der Linie übersprungen)."
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"Datenbankeintrag für Linie %d (cat = %d, rückwärts Richtung) nicht gefunden "
+"(Richtung der Linie übersprungen)."
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Mache den Graph flach..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Graph wurde erstellt."
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"Datenbankeintrag für Linie %d (cat = %d, vorwärts/beide Richtung(en)) nicht "
+"gefunden (vorwärts/beide Richtung(en) der Linie übersprungen)."
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"Datenbankeintrag für Linie %d (cat = %d, rückwärts Richtung) nicht gefunden "
+"(Richtung der Linie übersprungen)."
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Kann Netzwerk arc nicht hinzufügen."
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3401,7 +3523,7 @@ msgid "3D raster map <%s> not found"
 msgstr "3D-Rasterkarte <%s> nicht gefunden."
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3545,88 +3667,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Kann Linien-Offset %ld nicht lesen."
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Kann die Objekt-ID %d nicht lesen."
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "OGR Objektart %d wird nicht unterstützt."
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Name der Attributspalte"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Raster Karte"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "OGR feature ohne ID ignoriert."
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Index liegt außerhalb des Wertebereichs in"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Tabelle <%s> verknüpft mit Vektorkarte <%s> existiert nicht."
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "OGR Objektart %d wird nicht unterstützt."
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "OGR Objektart %d wird nicht unterstützt."
@@ -3635,32 +3767,36 @@ msgstr "OGR Objektart %d wird nicht unterstützt."
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Kann die Rasterkarte <%s> nicht erzeugen."
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Kann die Farbdatei für die Rasterkarte <%s> nicht lesen."
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Kann die Rasterkarte <%s> nicht erzeugen."
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Kann die Vektorkarte <%s> nicht nach <%s> kopieren."
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Kann Vektorkarte <%s> nicht löschen."
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Kann die Rasterkarte <%s> nicht erzeugen."
@@ -3700,7 +3836,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3717,12 +3853,12 @@ msgid "Error computing map <%s>"
 msgstr "Fehler beim Öffnen der G3D-Rasterkarte <%s>."
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3736,9 +3872,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3750,87 +3886,87 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Unbekannter Vektortyp."
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  Format: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Ungültige Zeitstempel-Datei für %s Karte %s in Mapset %s."
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr "Interner Fehler"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Ungültige Zeitstempel-Datei für %s Karte %s in Mapset %s."
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Ungültige Zeitstempel-Datei für %s Karte %s in Mapset %s."
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Raster Karte."
@@ -3860,132 +3996,132 @@ msgstr "Kann die Vektorkarte <%s> nicht anlegen."
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Rasterkarte <%s> wurde nicht gefunden."
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Vektorkarte <%s> nicht gefunden."
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Unable to stat file <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Exportiere Flächen..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Kann das Verzeichnis '%s' nicht löschen."
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "Kann die History-Informationen der Karte [%s] nicht schreiben."
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Kann Datei '%s' mit Definition der Vektor-Datenbank nicht öffnen."
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "Kann keine temporäre NULL-Datei %s finden."
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "Kann keine temporäre NULL-Datei %s finden."
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Kann cidx Datei <%s> nicht zum Schreiben öffnen."
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Eigenschaften"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Kann Header-Datei für [%s] nicht erstellen."
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4010,20 +4146,20 @@ msgid ""
 "%s"
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Kann Datei '%s' mit Definition der Vektor-Datenbank nicht öffnen."
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4032,7 +4168,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Kann Datei '%s' mit Definition der Vektor-Datenbank nicht öffnen."
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4040,12 +4176,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Kann Datei '%s' mit Definition der Vektor-Datenbank nicht öffnen."
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Eigenschaften"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4053,49 +4189,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Kann das Verzeichnis '%s' nicht löschen."
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Kann Datei '%s' mit Definition der Vektor-Datenbank nicht öffnen."
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Kann die Tabelle <%s> nicht anlegen."
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Kann den Befehl nicht ausführen."
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Vektor Karte"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Kann '%s' nicht finden"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Vektor Karte"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Unable to stat file <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Kann den Befehl nicht ausführen."
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4103,182 +4227,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Kann den Befehl nicht ausführen."
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Kann den Befehl nicht ausführen."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Unbekannter Vektortyp."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  Format: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Eigenschaften"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Kann keine quant-Regeln für Karte %s schreiben."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Kann keine Daten aus der Tabelle <%s> beziehen."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  Format: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Kann keine Daten aus der Tabelle <%s> beziehen."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Kann keine Daten aus der Tabelle <%s> beziehen."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4286,19 +4410,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4359,58 +4483,65 @@ msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Kann Header-Datei nicht lesen."
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Kann den Wertebereich der 3D Rasterkarte <%s> nicht lesen."
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Kann die 3D Rasterkarte <%s> nicht schließen."
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Name der Basis-Rasterkarte"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  Format: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Name der Basis-Rasterkarte"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4582,28 +4713,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Raster Karte"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Rasterkarte <%s> wurde nicht gefunden."
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Raster Karte"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Rasterkarte <%s> wurde nicht gefunden."
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Raster Karte."
@@ -4633,189 +4764,230 @@ msgstr "OGR Objekttyp %d wird nicht unterstützt."
 msgid "Unable to parse time string: %s"
 msgstr "Kann Datei %s in <%s> nicht öffnen."
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Name der Eingabe-Rasterkarte"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Rasterkarte <%s> wurde nicht gefunden."
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Kann die Eingabekarte nicht schließen."
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "Kann keine Zeitstempel-Datei für %s Karte %s in Mapset %s erzeugen."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Ungültige Zeitstempel-Datei für %s Karte %s in Mapset %s."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Ungültige Zeitstempel-Datei für %s Karte %s in Mapset %s."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Ungültige Zeitstempel-Datei für %s Karte %s in Mapset %s."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Ostwert muss größer als der Westwert sein."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Ostwert muss größer als der Westwert sein."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "Kann keine Zeitstempel-Datei für %s Karte %s in Mapset %s erzeugen."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Raster Karte."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Ostwert muss größer als der Westwert sein."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Kann die Vektorkarte <%s> in <%s> nicht finden."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4827,30 +4999,30 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Kann keine Daten aus der Tabelle <%s> holen."
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 msgid "unknown"
 msgstr "unbekannt"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr "Schalter nicht gefunden: %s"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr "<benötigt>"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4858,16 +5030,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Kann nicht zum Verzeichnis %s wechseln."
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Kann nicht zum Verzeichnis %s wechseln."
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Kann nicht zum Verzeichnis %s wechseln."
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Kann nicht zum Verzeichnis %s wechseln."
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4875,79 +5082,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Kann die Eingabekarte nicht schließen."
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Vektorkarte <%s> existiert bereits und wird überschrieben."
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Ungültiger Dateiname.  Er darf nicht '.' oder 'NULL' sein.\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Ungültiger Dateiname. Das Zeichen <%c> ist nicht erlaubt.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "Die Datenbankverbindung für den Layer <%d> nicht definiert."
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Fehler beim Laden der Vektorkarte <%s>."
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4956,24 +5163,24 @@ msgstr ""
 "Kann Objekt %d nicht wiederherstellen. Vektorkarte <%s> ist nicht im "
 "Schreibmodus geöffnet."
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "keine Daten"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr "Farbe"
 
@@ -5072,7 +5279,7 @@ msgstr "Kann Datei <%s> nicht zum Schreiben öffnen."
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Rasterkarte <%s> wurde nicht gefunden."
@@ -5598,12 +5805,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "Keine %s Dateien im aktuellen Mapset vorhanden\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "Keine %s Dateien im aktuellen Mapset vorhanden\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5826,7 +6033,7 @@ msgstr "Ungültiger Zeitstempel für %s Karte %s in Mapset %s spezifiziert."
 msgid "WARNING: "
 msgstr "WARNUNG: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "FEHLER: "
@@ -5962,7 +6169,7 @@ msgstr "Doppeltes Format-Feld."
 msgid "Duplicate compressed field"
 msgstr "Doppeltes komprimiertes Feld."
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Fläche %d existiert nicht."
@@ -6086,22 +6293,22 @@ msgstr "GISRC - Variable nicht gesetzt."
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): Variable %s nicht gesetzt."
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): mapset <%s> passt nicht zu xmapset <%s>."
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Kann '%s' nicht öffnen."
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: Kann die Datei %s nicht öffnen."
@@ -6156,12 +6363,12 @@ msgstr "Ungültiges es: Feld '%s' in Datei %s in <%s>."
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Keine Ellipsoid-Info in Datei %s in <%s>."
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Kann das Mapset Element %s (%s) nicht erzeugen: %s."
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Kann auf das Mapset Element %s (%s) nicht zugreifen: %s."
@@ -6179,16 +6386,16 @@ msgid "SYNOPSIS"
 msgstr "SYNOPSIS"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Flags"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parameter"
 
@@ -6200,6 +6407,10 @@ msgstr "Optionen"
 msgid "Default"
 msgstr "Standardwert"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6280,16 +6491,21 @@ msgstr "OGR feature ohne ID ignoriert."
 msgid "Flags:"
 msgstr "Schalter:"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Schweigsamer Ausgabemodus"
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr "Parameter:"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s    Standard: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   Optionen: "
@@ -6569,219 +6785,228 @@ msgstr ""
 msgid "Category value"
 msgstr "Kategoriewert"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Kategoriewerte"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Beispiel: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Objekt-ID"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Objekt-IDs"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Name der  Eingabedatei"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Name der Ausgabedatei"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Feld-Trennzeichen"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 #, fuzzy
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr "Spezialzeichen: Zeilenumbruch, Leerzeichen, Komma, Tabulator"
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Farben"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Entweder ein Standardfarbname oder ein R:G:B Tripel."
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Entweder eine Standard GRASS-Farbe, ein R:G:B-Tripel oder \"none\"."
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Name der  Eingabedatei"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 msgid "Coordinates"
 msgstr "Koordinaten"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Name der Eingabe-Vektorkarte"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Name der Attributspalte"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Name der Eingabe-Rasterkarte(n)"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Name der Ausgabe-Rasterkarte"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Name der Höhenkarte"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Name der Höhenkarte"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Name der Ausgaberasterkarte."
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Name der Eingabe-Vektorkarte(n)"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Name der Eingabe-Vektorkarte(n)"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Nicht genug Platz im Vektor-Array."
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Name der Eingabe-3D-Rasterkarte"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Name der Eingabe-3D-Rasterkarte"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Name der Ausgabe-3D-Rasterkarte"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "BUG: Aktualisiere die Karte, welche nicht im aktuellen Mapset ist."
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Name der Eingabe-Rasterkarte"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Name der Eingabe-Rasterkarte"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Kann die Eingabekarte nicht schließen."
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "WHERE Bedingungen des SQL-Ausdrucks ohne das Schlüsselwort 'where'."
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Lade Daten aus der Attributtabelle ..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6897,81 +7122,88 @@ msgstr "G_list: Unbekannter Elementtyp"
 msgid "no description"
 msgstr "keine Beschreibung"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG in Beschreibungen, Option '%s' in <%s> existiert nicht."
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG in Beschreibungen, Option '%s' in <%s> existiert nicht."
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Verwenden Sie entweder --quiet oder --verbose, aber nicht beide. Verwende --"
 "verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 "Verwenden Sie entweder --quiet oder --verbose, aber nicht beide. Verwende --"
 "quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+"Verwenden Sie entweder --quiet oder --verbose, aber nicht beide. Verwende --"
+"quiet."
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Tut mir leid, <%s> ist keine gültige Option"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr "FEHLER"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Kann den Namen des Programms nicht herausfinden."
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Tut mir leid, <%c> ist kein gültiges Flag"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Tut mir leid, <%s=> ist nicht eindeutig.\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Tut mir leid, <%s> ist kein gültiger Parameter.\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> in Mapset <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6980,7 +7212,7 @@ msgstr ""
 "\n"
 "Fehler: Ungültige Syntax für Wertebereich des Parameters <%s>.\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6989,14 +7221,14 @@ msgstr ""
 "\n"
 "FEHLER: Wert <%s> ist außerhalb des Wertebereichs des Parameters <%s>.\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "FEHLER: Fehlender Wert für Parameter <%s>.\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7005,7 +7237,7 @@ msgstr ""
 "\n"
 "FEHLER: Wert <%s> ist außerhalb der Spanne von Parameter <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7014,7 +7246,7 @@ msgstr ""
 "FEHLER: Benötigter Parameter <%s> wurde nicht angegeben:\n"
 "\t(%s)\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7023,37 +7255,37 @@ msgstr ""
 "\n"
 "FEHLER: Option <%s> muss als Vielfaches von %d angegeben werden.\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Tut mir leid, <%s> ist keine gültige Option"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Feld-Trennzeichen"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Tut mir leid, <%s> ist keine gültige Option"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "OGR Objekttyp %d wird nicht unterstützt."
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Kann die Tabelle <%s> nicht anlegen."
@@ -8033,11 +8265,16 @@ msgstr "Ungültiger Ellipsoid-Parameter (a, rf, es oder b) in der Datei."
 msgid "No ellipsoid info given in file"
 msgstr "Keine Informationen zum Ellipsoid in der Datei."
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Initiales Einlesen der komprimierten Datei [%s in %s] fehlgeschlagen."
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Initiales Einlesen der komprimierten Datei [%s in %s] fehlgeschlagen."
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
@@ -8045,6 +8282,21 @@ msgstr ""
 "Fehler. System ist nicht initialisiert. Der Programmierer hat vergessen, "
 "G_gisinit() aufzurufen.\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8075,52 +8327,47 @@ msgstr "Fehler Karte"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Fehler Karte"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Fehler Karte"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Fehler Karte"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Fehler"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Kann die History-Datei für die Vektorkarte <%s> nicht öffnen."
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "Kann keine temporäre NULL-Datei %s finden."
+msgid "No null file for <%s>"
+msgstr "Kann die History-Datei für die Vektorkarte <%s> nicht öffnen."
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: Kann die Datei %s nicht öffnen."
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Fehler Karte"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "Fehler beim Schreiben der Null-Reihe %d."
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr ""
 "%s: Karte [%s] ist nicht zum Schreiben geöffnet - Anfrage wird ignoriert."
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: Ungeöffneter Dateibeschreiber - Anfrage ignoriert."
@@ -8213,22 +8460,22 @@ msgstr "Raster Karte."
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Raster Karte."
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Kann nicht zum Verzeichnis %s wechseln."
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "Kann f_format Datei für cell-Karten nicht schreiben."
 
@@ -8317,104 +8564,104 @@ msgstr "Fehler Raster Karte"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "Rasterkarte <%s@%s>: Formatfeld in Header-Datei ungültig."
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
+msgid "Compression with %s is not supported"
+msgstr "OGR Objekttyp %d wird nicht unterstützt."
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr "Raster Karte Raster Karte."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Raster Karte"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Raster Karte"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr "Karte"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Raster Karte"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Fehler Karte"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Kann die History-Datei für die Vektorkarte <%s> nicht öffnen."
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Kann nicht zum Verzeichnis %s wechseln."
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Rasterkarte <%s> ist nicht im aktuellen Mapset (%s)."
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> ist ein ungültiger Dateiname."
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr "Keine temp Dateien vorhanden: %s"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Rasterkarte <%s> ist nicht im aktuellen Mapset (%s)."
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Rasterkarte <%s> nicht im Mapset <%s> gefunden."
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Kann '%s' nicht finden."
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Ungültiger Typ: Feld '%s' in Datei '%s'. "
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "ungültiger Typ: Feld %s in Datei %s. "
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Rasterkarte <%s> ist nicht xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 #, fuzzy
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
@@ -8455,26 +8702,42 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 "Die Leseanfrage der Rasterkarte <%s@%s> für Zeile %d ist außerhalb der "
 "Region."
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Fehler Karte"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Fehler Karte"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Fehler"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Fehler Karte"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Fehler Karte"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Fehler beim Lesen der NULL-Zeile %d."
@@ -8708,33 +8971,28 @@ msgstr "nicht bekannt"
 msgid "Unsupported icon %d"
 msgstr "Eigenschaften"
 
-#: ../lib/display/r_raster.c:128
-#, c-format
-msgid "%s variable defined, %s ignored"
-msgstr ""
+#: ../lib/display/r_raster.c:98
+#, fuzzy, c-format
+msgid "Both %s and %s are defined. %s will be ignored."
+msgstr "'where' und 'cats' Parameter wurden übergeben, cat wird ignoriert."
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Kann den Treiber <%s> nicht starten."
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Kann den Treiber <%s> nicht starten."
 
-#: ../lib/display/r_raster.c:236
-#, c-format
-msgid "Unable to open file '%s'"
-msgstr "Kann Datei '%s' nicht öffnen"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8812,127 +9070,171 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Kann Datei %s nicht öffnen."
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr "WARNUNG:"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr "Beende..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr "Benutzung"
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "Zum Akzeptieren der Standardeinstellung"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "Ungültige Projektion\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Kann keinen Speicher für temporäres Bild belegen."
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Das angeforderte Format ist in diese Version nicht einkompiliert."
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8942,282 +9244,298 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Tut mir leid, <%s> ist keine gültige Option\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Bitte unterrichten Sie die GRASS-Entwickler über diesen Fehler.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Fläche %d existiert nicht."
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Fläche %d existiert nicht."
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Erzeuge Graphen..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - Variable nicht gesetzt."
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Beende..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Verbindung fehlgeschlagen."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Kann keine Daten aus der Tabelle <%s> holen."
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Kann Focus nicht setzten."
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Leider keine Hilfe für den Befehl [%s] verfügbar.\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
+#: ../lib/init/grass.py:1576
+msgid "Done."
+msgstr "Erledigt."
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr ""
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr "Erledigt."
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Kann temporäre Datei nicht öffnen."
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "OGR Objekttyp %d wird nicht unterstützt."
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Kann den Treiber <%s> nicht starten."
@@ -9499,10 +9817,47 @@ msgstr "Nicht genügend Arbeitsspeicher."
 #~ msgid "Out of memmory"
 #~ msgstr "Nicht genügend Arbeitsspeicher"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Kann Datei '%s' mit Definition der Vektor-Datenbank nicht öffnen."
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Vektor Karte"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Vektor Karte"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "Kann keine temporäre NULL-Datei %s finden."
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: Kann die Datei %s nicht öffnen."
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Tut mir leid, <%s> ist keine gültige Option\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "FEHLER: Option <%s>: <%s> existiert bereits.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Kann nicht zum Verzeichnis %s wechseln."
+
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Kann Datei '%s' nicht öffnen"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "RETURN zum Weitermachen drücken -->"
 
@@ -9510,6 +9865,21 @@ msgstr "Nicht genügend Arbeitsspeicher."
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Vektorkarte <%s> ist nicht auf Level >= 2 geöffnet."
 
+#~ msgid "Background color"
+#~ msgstr "Hintergrundfarbe"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Name der Eingaberasterkarte."
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "OGR Objektart %d wird nicht unterstützt."
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "Kann nicht zum Verzeichnis %s wechseln."
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Attribute für Kategorie %d nicht gefunden."
 
@@ -9534,22 +9904,3 @@ msgstr "Nicht genügend Arbeitsspeicher."
 
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: Ungültige # Dimensionen oder Felder"
-
-#~ msgid "Background color"
-#~ msgstr "Hintergrundfarbe"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "OGR Objektart %d wird nicht unterstützt."
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "Kann nicht zum Verzeichnis %s wechseln."
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Kann nicht zum Verzeichnis %s wechseln."
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Name der Eingaberasterkarte."
diff --git a/locale/po/grasslibs_el.po b/locale/po/grasslibs_el.po
index 9850d8f..45dade8 100644
--- a/locale/po/grasslibs_el.po
+++ b/locale/po/grasslibs_el.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_el\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2008-10-16 11:25+0300\n"
 "Last-Translator: Vasilios Antoniou <antoniou_v at yahoo.gr>\n"
 "Language-Team: Greek <grass-translations at lists.osgeo.org>\n"
@@ -39,10 +39,12 @@ msgstr "Αδυναμία εκκίνησης του οδηγού <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Αδυναμία ανοίγματος της βάσης δεδομένων <%s> με τον οδηγό <%s>"
@@ -52,46 +54,46 @@ msgstr "Αδυναμία ανοίγματος της βάσης δεδομένω
 msgid "Unable to get list tables in database <%s>"
 msgstr "Αδυναμία λήψης λίστα πινάκων στη βάση δεδομένων <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Πίνακας <%s> υπάρχει ήδη στην βάση δεδομένων <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Αδυναμία ανοίγματος κέρσορα '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr ""
@@ -701,8 +703,8 @@ msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -712,8 +714,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -814,12 +816,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "GngFlatten σφάλμα"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -866,17 +868,17 @@ msgstr ""
 msgid "Category index out of range"
 msgstr "Οι διαστάσεις του πίνακα είναι έξω από την περιοχή"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του υπομνήματος για τον διανυσματικό χάρτη <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Σφάλμα εγγραφής χωρικών δεδομένων στο αρχείο"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του υπομνήματος για τον διανυσματικό χάρτη <%s>"
@@ -942,8 +944,8 @@ msgstr "Αριθμός λανθασμένων συνοριακών γραμμώ
 msgid "Number of redundant holes: %d"
 msgstr "Αριθμός συνοριακών γραμμών:   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του υπομνήματος για τον διανυσματικό χάρτη <%s>"
@@ -1043,16 +1045,16 @@ msgstr "Αριθμός περιοχών     :   -\n"
 msgid "Number of isles: -"
 msgstr "Αριθμός περιοχών     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Σφάλμα κατά την εγγραφή του χάρτη"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
@@ -1061,21 +1063,21 @@ msgstr ""
 "Αδυναμία δημιοργίας χωρικού πίνακα από την τοπολογία, ο διανυσματικός χάρτης "
 "δεν είναι ανοικτός στο topo level 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "BUG (Vect_build_sidx_from_topo): κόμβος δεν υπάρχει"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του υπομνήματος για τον διανυσματικό χάρτη <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Σφάλμα εγγραφής χωρικών δεδομένων στο αρχείο"
 
@@ -1141,9 +1143,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1193,8 +1197,10 @@ msgstr "Αδυναμία διαγραφής στρώμα/κατηγορία %d/%
 msgid "Unable to fetch data from table"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr ""
@@ -1234,17 +1240,17 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr ""
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "dglShortestPath σφάλμα: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του ιστορικού του διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
@@ -1253,7 +1259,7 @@ msgstr ""
 "Τα αρχεία συντεταγμένων (coor) των διανυσματικών χαρτών <%s@%s> είναι "
 "μεγαλύτερα από όσο θα έπρεπε (%ld bytes excess)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1275,7 +1281,7 @@ msgstr "Προσπάθεια προσπελασης σημείων σε επιφ
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1302,12 +1308,12 @@ msgstr ""
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1315,7 +1321,7 @@ msgstr ""
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του υπομνήματος για τον διανυσματικό χάρτη <%s>"
@@ -1406,7 +1412,7 @@ msgstr "Αδυναμία επανεγγραφής feature %d"
 msgid "No connection defined"
 msgstr "Σφάλμα σύνδεσης."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
@@ -1422,7 +1428,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Αδυναμία επανεγγραφής feature %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
@@ -1646,7 +1652,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr ""
 
@@ -1660,17 +1666,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Αδυναμία ανάγνωσης γραμμής %d"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Προσπάθεια προσπελασης σημείων σε επιφάνεια που δεν υπάρχει"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Αδυναμία επανεγγραφής feature %d"
@@ -1755,26 +1761,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Αδυναμία ανοίγματος αρχείου για εγγραφή <%s>"
@@ -1879,7 +1902,8 @@ msgid "Unable to add database link for vector map <%s>"
 msgstr ""
 "Αδυναμία προσθήκης σύνδεσης με βάση δεδομένων για τον διανυσματικό χάρτη <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Αδυναμία αντιγραφής πίνακα <%s>"
@@ -1912,6 +1936,21 @@ msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 "Overlay: επιφάνεια x επιφάνεια τύποι δεν υποστηρίζονται από AND τελεστή"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Αδυναμία αντιγραφής πίνακα <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Αδυναμία αντιγραφής πίνακα <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1921,7 +1960,7 @@ msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Αδυναμία ανοίγματος OGR πηγή δεδομένων '%s'"
@@ -2205,7 +2244,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2218,34 +2257,34 @@ msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Ο διανυσματικός χάρτης που δεν ανήκει στο τρέχον mapset δεν μπορεί να "
 "ανοίξει για ενημέρωση"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 "Αδυναμία ανοίγματος τοπολογικού αρχείου για τον διανυσματικό χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2254,96 +2293,96 @@ msgstr ""
 "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s> στο τοπολογικό επίπεδο %d. "
 "Δοκιμάστε να ξαναφτιάξετε την τοπολογία με v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Δημιουργία τοπολογίας για τον διανυσματικό χάρτη <%s>...\n"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του ιστορικού του διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Ο διανυσματικός χάρτης δεν είναι συμβατός με SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Αδυναμία ανοίγματος του ιστορικού του διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Λάθος διάταξη (φορματ)"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Παρακαλώ ξαναφτιάξτε την τοπολογία για τον διανυσματικό χάρτη <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2607,29 +2646,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Όλα τα σημεία (vertices)"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Δημιουργία επιφανειών"
@@ -2659,71 +2698,6 @@ msgstr "%s: Επιδάνεια %d δεν υπάρχει"
 msgid "Attempt to access dead area %d"
 msgstr "Προσπάθεια διαγραφής λάθος στοιχείων"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2827,14 +2801,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Σφάλμα σύνδεσης."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Σφάλμα σύνδεσης."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2902,60 +2883,55 @@ msgstr "Ο προεπιλεγμένος οδηγός δεν έχει καθορ
 msgid "Default database is not set"
 msgstr "Η προεπιλεγμένη βάση δεδομένων δεν έχει καθοριστεί"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Δεν είναι δυνατή η ανάγνωση του εύρους του αρχείου για [%s σε %s]"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Αδυναμία ανοίγματος επιπέδου <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "Άγνωστος τελεστής"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3106,101 +3082,101 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Δεν γίνεται η διαγραφή του αντικειμένου %d από το χωρικό πίνακα"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Ο διανυσματικός χάρτης δεν είναι συμβατός με SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Αδυναμία διαγραφής πίνακα <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Αδυναμία δημιουργίας καταλόγου για τον πίνακα <%s>, κλειδί <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr ""
 "Αδυναμία εύρεσης του πίνακα <%s> που είναι συνδεδεμένος με τον διανυσματικό "
 "χάρτη <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr ""
 "Ο πίνακας <%s> που είναι συνδεδεμένος με τον διανυσματικό χάρτη <%s> δεν "
 "υπάρχει"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Αδυναμία ανοίγματος καταλόγου συστήματος '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Αδυναμία διαγραφής αρχείου '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Αδυναμία μετονομασίας καταλόγου συστήματος '%s' σε '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Αδυναμία μεταφοράς καταλόγου συστήματος '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3288,6 +3264,143 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr "Η δομή του χάρτη έχει κλείσει"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+msgid "Cannot add network arc for virtual node connection."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "Η εγγραφή της βάσης δεδομένων για cat %d δεν βρέθηκε"
+
+#: ../lib/vector/Vlib/net_build.c:465
+msgid "Cannot add network arc representing turn."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr ""
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3403,7 +3516,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3545,92 +3658,102 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Αδυναμία ανάγνωσης γραμμής %d"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Αδυναμία επανεγγραφής feature %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Όνομα στήλης"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Πρόβλημα με την ανάγνωση του ράστερ χάρτη"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Οι διαστάσεις του πίνακα είναι έξω από την περιοχή"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr ""
 "Ο πίνακας <%s> που είναι συνδεδεμένος με τον διανυσματικό χάρτη <%s> δεν "
 "υπάρχει"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
@@ -3639,32 +3762,36 @@ msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Αδυναμία δημιουργίας raster χάρτη <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Αδυναμία δημιουργίας raster χάρτη <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Αδυναμία δημιουργίας raster χάρτη <%s>"
@@ -3705,7 +3832,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3723,12 +3850,12 @@ msgid "Error computing map <%s>"
 msgstr "Σφάλμα κατά το άνοιγμα του g3d χάρτη <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3742,9 +3869,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3756,88 +3883,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Άγνωστο τύπος διανύσματος"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  φορμάτ: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Λανθασμένο timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "Συντακτικό λάθος"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Λανθασμένο timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Λανθασμένο timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
@@ -3867,110 +3994,110 @@ msgstr "Αδυναμία δημιουργίας διανυσματικού χά
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Δημιουργία επιφανειών"
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Αδυναμία μεταφοράς καταλόγου συστήματος '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "δεν είναι δυνατή η εγγραφή του ιστορικού για [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s in %s]"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "Αδυναμία εγγραφής προσωρινού κενού αρχείου %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "Αδυναμία εγγραφής προσωρινού κενού αρχείου %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Αδυναμία εγγραφής προσωρινού κενού αρχείου %s"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Τύποι δεδομένων"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
@@ -3978,22 +4105,22 @@ msgid ""
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4019,20 +4146,20 @@ msgid ""
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s in %s]"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4041,7 +4168,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s in %s]"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4049,12 +4176,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s in %s]"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Δεν μπορώ να ανοίξω την βάση δεδομένων %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4062,49 +4189,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Αδυναμία μεταφοράς καταλόγου συστήματος '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s in %s]"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Αδυναμία εκτέλεσης εντολής"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Αδυναμία εύρεσης '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Αδυναμία κλεισίματος του χάρτη input"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Αδυναμία εκτέλεσης εντολής"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4112,182 +4227,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Αδυναμία εκτέλεσης εντολής"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Αδυναμία εκτέλεσης εντολής"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Άγνωστο τύπος διανύσματος"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  φορμάτ: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Τύποι δεδομένων"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Δεν μπορούν να εγγραφούν quant κανόνες γιατον χάρτη %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  φορμάτ: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4295,19 +4410,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4368,30 +4483,30 @@ msgstr "Αδυναμία αντιγραφής διανυσματικού χάρ
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Αδυναμία ανάγνωσης head αρχείου"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης 3Δ ραστερ χάρτη <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Αδυναμία κλεισίματος του 3Δ ραστερ χάρτη <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Όνομα χάρτη υποβάθρου ράστερ"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
@@ -4399,28 +4514,35 @@ msgid ""
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  φορμάτ: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Όνομα χάρτη υποβάθρου ράστερ"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4595,28 +4717,28 @@ msgid "Wrong identifier, the mapset is missing"
 msgstr ""
 "Αδυναμία ανοίγματος κεφαλικού (header) αρχείου για τον ράστερ χάρτη <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Αδυναμία διαβάσματος εύρους για τον ράστερ χάρτη <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
@@ -4646,105 +4768,122 @@ msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 msgid "Unable to parse time string: %s"
 msgstr "Αδυναμία ανοίγματος αρχείου %s στο <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Αδυναμία κλεισίματος του χάρτη input"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
@@ -4752,36 +4891,36 @@ msgid ""
 msgstr ""
 "Δεν μπορεί να δημιουργηεί timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Λανθασμένο timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Λανθασμένο timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Λανθασμένο timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Η Ανατολή πρέπει να είναι μεγαλύτερηαπό τη Δύση"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Η Ανατολή πρέπει να είναι μεγαλύτερηαπό τη Δύση"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
@@ -4789,48 +4928,72 @@ msgid ""
 msgstr ""
 "Δεν μπορεί να δημιουργηεί timestamp αρχείο για %s χάρτη %s στο mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Η Ανατολή πρέπει να είναι μεγαλύτερηαπό τη Δύση"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Αδυναμία αντιγραφής διανυσματικού χάρτη <%s> σε <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4842,32 +5005,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "άγνωστο"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s δεν βρέθηκε"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "απαιτούμενο: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4875,16 +5038,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4892,81 +5090,81 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Αδυναμία κλεισίματος του χάρτη input"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Μη επιτρεπτό όνομα.  δεν μπορεί να είναι  '.' ή  'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Μη επιτρεπτό όνομα αρχείου. Ο χαρακτήρας <%c> δεν επιτρέπεται.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 "Δεν έχει καθοριστεί η σύνδεση με τη βάση δεδομένων για το επίπεδο (layer) %d"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Σφάλμα κατά το άνοιγμα του διανυσματικού χάρτη <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4975,24 +5173,24 @@ msgstr ""
 "Αδυναμία αποκατάστασης feature %d, διανυσματικός χάρτης <%s> δεν είναι "
 "ανοικτός σε 'write' mode"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Όνομα εισαγόμενου διανυσματικού χάρτη"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Χρώμα"
@@ -5093,7 +5291,7 @@ msgstr "Αδυναμία ανοίγματος αρχείου <%s> για εγγ
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
@@ -5620,12 +5818,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5848,7 +6046,7 @@ msgstr "Λάθος timestamp καθορίστηκε για %s χάρτη %s στ
 msgid "WARNING: "
 msgstr "ΠΡΟΣΟΧΗ:"
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ΣΦΑΛΜΑ:"
@@ -5984,7 +6182,7 @@ msgstr "διπλό πεδίο φορμάτ"
 msgid "Duplicate compressed field"
 msgstr "διπλό πεδίο συμπιεσμένου αρχείου"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Επιδάνεια %d δεν υπάρχει"
@@ -6110,22 +6308,22 @@ msgstr "GISRC - η παράμετρος δεν έχει καθοριστεί"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): %s η παράμετρος δεν έχει καθοριστεί"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): mapset <%s> δεν ταιριάζει με το xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Αδυναμία ανοίγματος '%s'"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
@@ -6180,12 +6378,12 @@ msgstr "Λάθος es: πεδίο '%s' στο αρχείο %s στο <%s>"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Δεν έχουν δωθεί πληροφορίες για το ελλειψοειδές στο αρχείο %s στο <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Αδυναμία δημιουργίας mapset στοιχείου %s (%s)"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Αδυναμία δημιουργίας mapset στοιχείου %s (%s)"
@@ -6203,16 +6401,16 @@ msgid "SYNOPSIS"
 msgstr "ΣΥΝΟΨΗ"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr ""
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Παράμετροι"
 
@@ -6224,6 +6422,10 @@ msgstr "Επιλογές"
 msgid "Default"
 msgstr "Προεπιλογή"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6317,17 +6519,22 @@ msgstr ""
 "\n"
 "Flags:\n"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Quiet module εξαγωγή"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Παράμετροι"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   προεπιλογή: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   επιλογές: "
@@ -6616,223 +6823,232 @@ msgstr ""
 msgid "Category value"
 msgstr "Τιμή κατηγορίας"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Τιμές κατηγοριών"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Παράδειγμα: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 #, fuzzy
 msgid "Feature id"
 msgstr "Χαρακτηριστικό: "
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 #, fuzzy
 msgid "Feature ids"
 msgstr "Χαρακτηριστικό: "
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Όνομα αρχείου εισαγωγής"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "Όνομα αρχείου εξαγωγής"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Διαχωριστής πεδίων (π.χ. , .  tab)"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Χρώμα"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Είτε ένα στανταρ όνομα χρώματος ή συνδυασμός R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Δώστε ένα στανταρ χρώμα GRASS, συνδυασμό R:G:B ή \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Όνομα αρχείου εισαγωγής"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Λάθος συντεταγμένες"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Όνομα εισαγόμενου διανυσματικού χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Όνομα στήλης"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Όνομα εισαγώμενων ράστερ χαρτών"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Όνομα ράστερ χάρτη υψομέτρου"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Όνομα ράστερ χάρτη υψομέτρου"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Όνομα εισαγόμενων διανυσματικων χαρτών"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Όνομα εισαγόμενων διανυσματικων χαρτών"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Όνομα εξαγόμενου διανυσματικού χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Όνομα εισαγώμενων 3Δ ράστερ χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Όνομα εισαγώμενων 3Δ ράστερ χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Όνομα εξαγόμενου 3Δ ράστερ χάρτη"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Αδυναμία κλεισίματος του χάρτη input"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "WHERE συνθήκες της SQL δήλωση χωρίς 'where' λέξη-κλειδί"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Φορτώνω δεδομένα από τα πίνακα..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6951,80 +7167,86 @@ msgstr ""
 "\n"
 "Περιγραφή:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG στις περιγραφές, επιλογή '%s' στο <%s> δεν υπάρχει"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG στις περιγραφές, επιλογή '%s' στο <%s> δεν υπάρχει"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Χρησιμοποιήστε  --quiet ή --verbose flag, όχι και τα δύο. Υποθέτω --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 "Χρησιμοποιήστε  --quiet ή --verbose flag, όχι και τα δύο. Υποθέτω --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+"Χρησιμοποιήστε  --quiet ή --verbose flag, όχι και τα δύο. Υποθέτω --quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Συγνώμη <%s> δεν είναι αποδεκτή επιλογή\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ΣΦΑΛΜΑ:"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Αδυναμία προσδιορισμού του ονόματος του προγράμματος"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Συγνώμη, <%s> δεν είναι επιτρεπτή παράμετρος\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Συγνώμη, <%s=> είναι αμφίσημο\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Συγνώμη, <%s> δεν είναι επιτρεπτή παράμετρος\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> στο mapset <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7033,7 +7255,7 @@ msgstr ""
 "\n"
 "ΣΦΑΛΜΑ: μη επιτρεπτό σύνταξη εύρους για την παράμετρο <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7042,14 +7264,14 @@ msgstr ""
 "\n"
 "ΣΦΑΛΜΑ: η τιμή <%s> είναι εκτός ορίων <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "ΣΦΑΛΜΑ: Λείπει τιμή για την παράμετρο <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7058,7 +7280,7 @@ msgstr ""
 "\n"
 "ΣΦΑΛΜΑ: η τιμή <%s> είναι εκτός ορίων <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7068,7 +7290,7 @@ msgstr ""
 "ΣΦΑΛΜΑ: Η απαιτούμενη παράμετρος <%s> δεν έχει καθοριστεί:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7077,37 +7299,37 @@ msgstr ""
 "\n"
 "ΣΦΑΛΜΑ: η επιλογή <%s> πρέπει να δωθεί σε πολλαπλάσια του %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Συγνώμη <%s> δεν είναι αποδεκτή επιλογή\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Διαχωριστής πεδίων (π.χ. , .  tab)"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Συγνώμη <%s> δεν είναι αποδεκτή επιλογή\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
@@ -8100,11 +8322,16 @@ msgstr "Μη επιτρεπτοι παράμετροι ελλειψοειδού
 msgid "No ellipsoid info given in file"
 msgstr "Δεν έχουν δωθεί στοιχεία για το ελλειψοειδές στο αρχείο"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Σφάλμα αρχικής προσπέλασης του συμπιεσμένου αρχείου [%s in %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Σφάλμα αρχικής προσπέλασης του συμπιεσμένου αρχείου [%s in %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
@@ -8112,6 +8339,21 @@ msgstr ""
 "Το σύστημα δεν έχει αρχικοποιηθεί. Ο προγραμματιστής ξέχασει να καλέσει "
 "G_gisinit()."
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8142,51 +8384,46 @@ msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου 
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Αδυναμία ανοίγματος οδηγού <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "Αδυναμία εγγραφής προσωρινού κενού αρχείου %s"
+msgid "No null file for <%s>"
+msgstr "Αδυναμία ανοίγματος οδηγού <%s>"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "Σφάλμα εγγραφής κενής γραμμής %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s:χάρτης [%s] δεν είναι ανοιχτός για εγγραφή - η εντολή αγνοείται"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: μη ανοικτή περιγραφή αρχείου - εντολή αγνοείτε"
@@ -8280,22 +8517,22 @@ msgstr ""
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Αδυναμία ανάγνωσης κεφαλικού αρχείου για ράστερ χάρτη <%s@%s>."
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Αδυναμία διαγραφής αρχείου '%s'"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "αδυναμία εγγραφής f_format αρχείου για CELL χάρτες"
 
@@ -8386,12 +8623,12 @@ msgstr ""
 "Το φορμά του ράστερ χάρτη <%s@%s>: στο κεφαλικό αρχείο (header) είναι "
 "λανθασμένο"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8400,19 +8637,19 @@ msgstr ""
 "Ο ράστερ χάρτης <%s@%s> έχει διαφορετική προβολή από την τρέχουσα περιοχή. Ο "
 "χάρτης <%s@%s>, θα έπρεπε να ήταν <%s>."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 "Ο ράστερ χάρτης <%s@%s> έχει διαφορετική ζώνη (%d) από την τρέχουσα περιοχή "
 "(%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Ο ράστερ χάρτης <%s@%s>: έχει bytes per cell (%d) πολύ μεγάλο"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
@@ -8420,78 +8657,78 @@ msgstr ""
 "Ο χάρτης <%s@%s> είναι ένας σύνδεσμος GDAL αλλά το  GRASS έχει γίνει "
 "compiled χωρίς GDAL υποστήριξη"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr ""
 "Αδυναμία ανοίγματος κεφαλικού (header) αρχείου για τον ράστερ χάρτη <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Σφάλμα ανάγνωσης χάρτη <%s@%s>, γραμμή %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Αδυναμία ανοίγματος οδηγού <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "G__open_raster_new(): δεν υπάρχουν προσωρινά αρχεία, μη διαθέσιμα"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Ο ραστερ χάρτης <%s> δεν ανήκει στο τρέχον mapset (%s)"
+
+#: ../lib/raster/open.c:817
 #, fuzzy
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr "G_set_fp_type(): μπορεί να καλεστεί μόνο με FCELL_TYPE ή DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε στο mapset <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Αδυναμία εύρεσης '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Εσφαλμένος τύπος: το πεδίο '%s' στο αρχείο '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Εσφαλμένος τύπος: το πεδίο '%s' στο αρχείο '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Ο χάρτης raster  <%s> δεν είναι xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 #, fuzzy
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
@@ -8534,26 +8771,42 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 "Το διάβασμα του ράστερ χάρτη <%s@%s> κλήση για γραμμή %d είναι έξω από την "
 "περιοχή"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Σφάλμα κατά το άνοιγμα του 3Δ ραστερ χάρτη <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Σφάλμα κατά την ανάγνωση συμπιεσμένου χάρτη <%s@%s>, γραμμή %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Σφάλμα ανάγνωσης κενής γραμμής %d"
@@ -8794,33 +9047,28 @@ msgstr "άγνωστο"
 msgid "Unsupported icon %d"
 msgstr "Τύποι δεδομένων"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Αδυναμία εκκίνησης του οδηγού <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Αδυναμία εκκίνησης του οδηγού <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Αδυναμία ανοίγματος αρχείου %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8896,17 +9144,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Αδυναμία ανοίγματος του αρχείου που περιέχει τον πίνακα datum <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "ΠΡΟΣΟΧΗ:"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Δημιουργία επιφανειών"
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8914,115 +9162,159 @@ msgstr ""
 "Χρήση:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "για να αποδεκτείτε το προκαθορισμένο"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "Λανθασμένη προβολή\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Αδυναμία κατανομής (allocate) προσωρινή εικόνα"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Το συγκεκριμένο format δεν γίνει compiled για την έκδοση αυτή"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -9032,71 +9324,78 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Συγνώμη <%s> δεν είναι αποδεκτή επιλογή\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
+msgstr ""
+
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
@@ -9105,211 +9404,220 @@ msgstr ""
 "Παρακαλώ ενημερώστε τους προγραμματιστές του GRASS για αυτό το μήνυμα "
 "λάθους.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Επιδάνεια %d δεν υπάρχει"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Επιδάνεια %d δεν υπάρχει"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Δημιουργία επιφανειών"
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - η παράμετρος δεν έχει καθοριστεί"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Δημιουργία επιφανειών"
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Σφάλμα σύνδεσης."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Αδυναμία focus"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Δεν υπάρχει κείμενο βοήθειας για την εντολή [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "κανένα"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Αδυναμία εκκίνησης του οδηγού <%s>"
@@ -9588,29 +9896,63 @@ msgstr "G_malloc: εκτός μνήμης"
 #~ msgid "Out of memmory"
 #~ msgstr "G_malloc: εκτός μνήμης"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Αδυναμία δημιουργίας κεφαλικού αρχείου για [%s in %s]"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Αδυναμία ανοίγματος header αρχείου διανυσματικού χάρτη <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "Αδυναμία εγγραφής προσωρινού κενού αρχείου %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: αδυναμία ανοίγματος αρχείου %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Συγνώμη <%s> δεν είναι αποδεκτή επιλογή\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "ΣΦΑΛΜΑ: Η επιλογή <%s>: <%s> υπάρχει.\n"
 
 #, fuzzy
-#~ msgid "Hit RETURN to continue"
-#~ msgstr "Πατήστε RETURN για συνέχεια -->"
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
 
 #, fuzzy
-#~ msgid "Vector map <%s> is not opened on topology level"
-#~ msgstr "Ο διανυσματικός χάρτης <%s> δεν είναι ανοικτός σε επίπεδο >= 2"
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Αδυναμία ανοίγματος αρχείου %s"
 
 #, fuzzy
-#~ msgid "Attributes for category %d not found"
-#~ msgstr "Η εγγραφή της βάσης δεδομένων για cat %d δεν βρέθηκε"
+#~ msgid "Hit RETURN to continue"
+#~ msgstr "Πατήστε RETURN για συνέχεια -->"
 
 #, fuzzy
-#~ msgid "Cannot fetch row"
-#~ msgstr "Δεν μπορώ να πάρω πληροφορίες για το επίπεδο"
+#~ msgid "Vector map <%s> is not opened on topology level"
+#~ msgstr "Ο διανυσματικός χάρτης <%s> δεν είναι ανοικτός σε επίπεδο >= 2"
 
 #~ msgid "Background color"
 #~ msgstr "Χρώμα φόντου"
 
 #, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
+
+#, fuzzy
 #~ msgid "Mode type: {0} not supported."
 #~ msgstr "OGR χαρακτηριστικό χωρίς ID αγνοείται"
 
@@ -9619,9 +9961,9 @@ msgstr "G_malloc: εκτός μνήμης"
 #~ msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Λάθος όνομα διανυσματικού χάρτη <%s>"
+#~ msgid "Attributes for category %d not found"
+#~ msgstr "Η εγγραφή της βάσης δεδομένων για cat %d δεν βρέθηκε"
 
 #, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
+#~ msgid "Cannot fetch row"
+#~ msgstr "Δεν μπορώ να πάρω πληροφορίες για το επίπεδο"
diff --git a/locale/po/grasslibs_es.po b/locale/po/grasslibs_es.po
index e0b7625..5a458a4 100644
--- a/locale/po/grasslibs_es.po
+++ b/locale/po/grasslibs_es.po
@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-07-14 22:45-0500\n"
 "Last-Translator: \n"
 "Language-Team: Spanish <grass-translations at lists.osgeo.org>\n"
@@ -49,10 +49,12 @@ msgstr "No ha sido posible iniciar el controlador <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "No ha sido posible abrir la base de datos <%s> con el controlador <%s>"
@@ -62,45 +64,45 @@ msgstr "No ha sido posible abrir la base de datos <%s> con el controlador <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "No ha sido posible obtener las tablas de lista de la base de datos <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "La tabla <%s> ya existe en la base de dato y será sobreescrita"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "La tabla <%s> ya existe en la base de datos <%s>."
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "No ha sido posible abrir el cursor resultado de la instrucción select:'%s'."
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "La columna <%s> no es de tipo \"número entero\""
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "No ha encontrado la columna <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "No ha sido posible crear la tabla <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "No se pueden recuperar los datos de la tabla <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Tipo columna desconocido (columna <%s>)"
@@ -688,8 +690,8 @@ msgstr "Formato vectorial '%s' no soportado"
 msgid "Format definition is not correct: %s"
 msgstr "Definición de formato no es correcta: %s"
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -699,8 +701,8 @@ msgstr "Definición de formato no es correcta: %s"
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -787,12 +789,12 @@ msgstr "Su versión de GRASS no soporta totalmente el formato de topología %d.%
 msgid "Old topology format version %d.%d is not supported by this release. Try to rebuild topology using v.build or v.build.all module."
 msgstr "Formato de topología viejo versión %d.%d no está soportado para esta versión. Trate de reconstruir la topología usando los módulos v.build o v.build.all."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Error GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr "Calculando el árbol de mínima expansión..."
 
@@ -836,17 +838,17 @@ msgstr "El índice de capa se encuentra fuera del rango"
 msgid "Category index out of range"
 msgstr "El índice de categoría está fuera de rango"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "No ha sido posible crear archivo de índices de categoría para el mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 msgid "Error writing out category index file"
 msgstr "Error al escribir el archivo de salida de índices de categoría <%s>"
 
 #
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "No se puede abrir archivo de índice de categorías del mapa vectorial <%s>"
@@ -910,8 +912,8 @@ msgstr "Omitiendo revisiones posteriores debido a contornos incorrectos"
 msgid "Number of redundant holes: %d"
 msgstr "Cantidad de agujeros redundantes: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "No ha sido posible abrir archivo de índices espaciales del mapa vectorial <%s>"
@@ -1008,34 +1010,34 @@ msgstr "Cantidad de áreas: -"
 msgid "Number of isles: -"
 msgstr "Cantidad de íslas: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "No ha sido posible crear archivo de topología del mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Error al escribir el archivo de topología"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 msgid "Unable to build spatial index from topology, vector map is not opened at topology level 2"
 msgstr "No ha sido posible constuir índice para topología, el mapa vectorial no está abierto en el nivel topológico 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr "%s no está soportado más"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr "Índice espacial no disponible, no puede ser guardado"
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "No ha sido posible crear archivo de índices espaciales del mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Error al escribir el archivo de índice espacial"
 
@@ -1102,9 +1104,11 @@ msgstr "Palabra clave <%s> en la cabecera del vectorial"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1153,8 +1157,10 @@ msgstr "No se pueden seleccionar atributos para categoría = %d"
 msgid "Unable to fetch data from table"
 msgstr "No se pueden recuperar los datos de la tabla. <%s>."
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "No se ha encontrado la columna <%s> en la tabla <%s>"
@@ -1192,22 +1198,22 @@ msgstr "%d elementos sin categoría omitidos. Para exportar también elementos s
 msgid "Unable to add network arc"
 msgstr "No ha sido posible añadir un arco a la red"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "Error de dglShortestPath: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "No ha sido posible abrir archivo de coordenadas del mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes excess)"
 msgstr "El archivo de coordenadas del mapa vectorial <%s@%s> es mayor de lo que debiera (%ld bytes sobrantes)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
 msgstr "El archivo de coordenadas del mapa vectorial <%s@%s> es menor de lo que debería ser (faltan %ld bytes)."
@@ -1225,7 +1231,7 @@ msgstr "Se intentó leer puntos de una isla que no existe"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1252,12 +1258,12 @@ msgstr "Se intentó leer la topología de una isla (%d) muerta (inexistente)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1265,7 +1271,7 @@ msgstr "Se intentó leer la topología de una isla (%d) muerta (inexistente)"
 msgid "GRASS is not compiled with OGR support"
 msgstr "GRASS no está compilado con soporte OGR"
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "No ha sido posible guardar archivo de índices de los elementos del mapa vectorial <%s>"
@@ -1353,7 +1359,7 @@ msgstr "No se puede reescribir el el objeto espacial %d"
 msgid "No connection defined"
 msgstr "No se ha definido la conexión"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "El nombre del mapa vectorial <%s> no es válido"
@@ -1368,7 +1374,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "No ha sido posible eliminar elemento (%s) %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 msgid "Unable to open PG file"
 msgstr "No ha sido posible abrir archivo PG"
 
@@ -1576,7 +1582,7 @@ msgstr "Vect_read_line_geos(): El identificador del razgo id %d no es razonable
 msgid "only native format supported"
 msgstr "Sólo el formato nativo es soportado"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Se intentó leer línea muerta (inexistente)"
 
@@ -1591,17 +1597,17 @@ msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr "Vect_read_area_geos(): No se puede leer el id de la isla %d del id del área %d"
 
 #
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "No se puede leer el ajuste de desplazamiento de línea %ld"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Intento de leer puntos de un id de área inexistente %d"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "No se puede leer el id %d del elemento."
@@ -1685,25 +1691,41 @@ msgstr "Objeto espacial OGR sin ID."
 msgid "OGR feature type '%s' not supported"
 msgstr "Tipo de elemeto OGR '%s' no soportado"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  <%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Dirección de línea incorrecta en Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr "Capa OGR vacía, nada que construir"
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr "Tabla de elemento <%s> no tiene una llave primaria definida"
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr "La lectura aleatoria no está soportada por OGR para esta capa. No ha sido posible construir topología."
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr "Usando formato de datos externo '%s' (tipo de elemento '%s')"
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "No ha sido posible archivo de id de elementos para escribir <%s>"
@@ -1804,7 +1826,8 @@ msgstr "No ha sido posible copiar tabla <%s> para capa %d desde <%s> hacia <%s>"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "No ha sido posible añadir el enlace del mapa vectorial <%s> a la base de datos."
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "No se puede copiar la tabla <%s>."
@@ -1835,6 +1858,21 @@ msgstr "Superposición: los tipos de línea / contorno no son compatibles con el
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Superposición: Los tipos \"area x area\" no son compatibles con el operador AND."
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "No ha sido posible crear la tabla <%s>."
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "No se puede copiar la tabla <%s>."
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "No se puede copiar la tabla <%s>."
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr "Fuente de datos OGR no definida"
@@ -1843,7 +1881,7 @@ msgstr "Fuente de datos OGR no definida"
 msgid "OGR layer not defined"
 msgstr "Capa OGR no definida"
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "No se puede abrir la fuente de datos OGR '%s'."
@@ -2111,7 +2149,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Mapa vectorial <%s> no se encuentra en el Directorio de mapas actual"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2123,123 +2161,123 @@ msgstr "El mapa vectorial <%s> no ha sido encontrado."
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Solamente se puede acceder al mapa vectorial temporal desde el Directorio de mapas actual"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "No puede ser abierto para su actualización, un mapa vectorial que no esté en el directorio actual de mapas de usuario (mapset)."
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "No se puede abrir el mapa vectorial <%s>."
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "No ha sido posible leer archivo de cabecera del mapa vectorial <%s>"
 
 #
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "No ha sido posible abrir el archivo de topología del mapa vectorial <%s>."
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, c-format
 msgid "Unable to open vector map <%s> on level %d. Try to rebuild vector topology with v.build."
 msgstr "No ha sido posible abrir mapa vectorial <%s> en el nivel %d. Intente reconstruir la topología vectorial mediante v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Construyedo topología para capa OGR <%s> desde la fuente de datos '%s'..."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "No ha sido posible abrir el mapa vectorial <%s> en el nivel %d"
 
 #
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "No se puede abrir el archivo de historial del mapa vectorial <%s>."
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "No ha sido posible crear mapa vectorial: <%s> no se encuentra en el Directorio de mapas actual (%s)."
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "No ha sido posible crear mapa vectorial: <%s> no se ajusta al estándar SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "No se puede borrar el mapa vectorial <%s>."
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "El mapa vectorial <%s> ya existe y será sobrescrito."
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "No se ha podido abrir archivo de historia para mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr "Usando formato OGR/%s "
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr "Usando formato de topología PostGIS"
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr "Usando formato PostGIS"
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 msgid "Using native format"
 msgstr "Usando formato nativo"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "No se pueden presentar estadísticas del archivo <%s>."
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr "%d desconocido (actualizar Vect_maptype_info)"
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "El tamaño del archivo de coordenadas difiere del valor guardado en el archivo de topología."
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Por favor, reconstruya la topología del mapa vectorial <%s@%s>."
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "El tamaño del archivo 'coor' difiere del valor guardado en archivo sidx"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 msgid "Unable to open OGR file"
 msgstr "No se puede abrir archivo OGR"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr "Salida OGR detectada también, usando OGR"
 
@@ -2481,29 +2519,29 @@ msgstr "Inconsistencia en topología: número de líneas %d (debería ser %d)"
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr "Inconsistencia en topología: número de centroides %d (debería ser %d)"
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr "Ajustar vértices; Paso 1, Seleccione los puntos."
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr "Ajustar vértices; Paso 2, Asigne los vértices ancla."
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr "Ajustar vértices; Paso 3, Ajustar a los puntos asignados."
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr "Vertices ajustados: %d"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr "Nuevos vértices:%d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 msgid "Reading features..."
 msgstr "Leyendo elementos..."
 
@@ -2531,68 +2569,6 @@ msgstr "%s: El área %d no existe."
 msgid "Attempt to access dead area %d"
 msgstr "Se intentó accesar a un área %d muerta (inexistente)"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Construyendo grafica..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Imposible crear gráfico de la red."
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Columna de costos a futuro no especificada."
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Campo de arco < 1."
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "El tipo de datos para la columna <%s> no está soportado (debe ser de tipo numérico)."
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Registrando arcos..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid "Database record for line %d (cat = %d, forward/both direction(s)) not found (forward/both direction(s) of line skipped)"
-msgstr "No se ha encontrado el registro de la base de datos para la línea %d (cat =%d, hacia adelante/en una o ambas direcciones) (se omite la línea hacia adelante/en una o ambas direcciones)."
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid "Database record for line %d (cat = %d, backword direction) not found(direction of line skipped)"
-msgstr "No se ha encontrado el registro de la línea %d (cat = %d, en la dirección hacia atrás) en la base de datos , (se omite la dirección de la línea)."
-
-#
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "No se ha podido añadir el arco a la red."
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Estableciendo costes de nodos..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr "No se encuentra el registro para el nodo %d (cat = %d). (El coste se establece como 0)."
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Achatamiento de la gráfica ..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "El grafico fue construido."
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Dirección de línea incorrecta en Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "La línea no ha sido utilizada en un lazo."
@@ -2690,7 +2666,14 @@ msgstr "Datos corrompidos. %s."
 msgid "Corrupted data"
 msgstr "Datos corruptos"
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "La conexión ha fallado."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, c-format
 msgid ""
 "Execution failed: %s\n"
@@ -2699,7 +2682,7 @@ msgstr ""
 "Ha fallado la ejecución: %s\n"
 "Razón: %s"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2761,56 +2744,51 @@ msgstr "El controlador predeterminado no se ha establecido."
 msgid "Default database is not set"
 msgstr "No ha sido establecida la base de datos predeterminada."
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Dblink solicitado %d, número máximo de enlace %d."
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Error en la regla en la fila %d en <%s>"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "No se puede abrir la capa OGR <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "No se puede abrir el controlador OGR DBMI."
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' available in OGR DB table"
 msgstr "Todas las pruebas FID han fallado. Ni los \"FID\" ni \"ogc_fid\" ni \"ogr_fid\" ni \"gid\", están disponibles en la tabla OGR DB"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr "Tabla de elementos <%s> no tiene definida una llave primaria. No ha sido posible definir enlaces DB."
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr "GRASS no está compilado con soporte PostgreSQL"
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 msgid "Unknown vector map format"
 msgstr "Formato de mapa vectorial"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "No ha sido posible crear archivo de definición de base de datos para mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "Bug: se intentó actualizar mapa que no se encuentra en el Directorio de mapas actual"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "El nombre del mapa vectorial <%s> no es válido"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, c-format
 msgid "Creating field <%s> failed"
@@ -2957,101 +2935,101 @@ msgstr "Centroide %d: área inválida %d"
 msgid "Unable to delete item %d from spatial index"
 msgstr "No ha sido posible eliminar el objeto %d del índice espacial."
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "No ha sido posible crear archivo de encabezado para el mapa vectorial <%s>"
 
 #
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "No se puede abrir el archivo de cabecera del vector <%s>."
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Línea dañada en la cabecera: %s."
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Palabra clave '%s' desconocida en encabezado de vectorial"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Proyección desconocida."
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "El nombre del mapa vectorial no se ajusta al estándar SQL."
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "No ha sido posible encontrar el mapa vectorial <%s> en <%s>."
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "No se puede copiar el mapa vectorial <%s> en <%s>."
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "No se puede borrar la tabla <%s>."
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "No ha sido posible crear el índice para la tabla <%s>, llave <%s>."
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr "Ignorando Directorio de mapas no válido: %s"
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Nombre de mapa vectorial no válido <%s>."
 
 #
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "No se puede abrir el archivo de cabecera del mapa vectorial <%s>."
 
 #
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "No se puede encontrar la tabla <%s> enlazada con el mapa vectorial <%s>."
 
 #
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "La tabla <%s> enlazada con el mapa vectorial <%s> no existe."
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "No se puede abrir el directorio '%s'."
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "No se puede borrar el archivo '%s'."
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "No se puede cambiar el nombre del directorio de '%s' a '%s'."
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "No se puede eliminar el directorio '%s'."
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3133,6 +3111,133 @@ msgstr "Nunca ha sido inicializada la estructura del mapa."
 msgid "Map structure has been closed"
 msgstr "Se ha cerrado la estructura del mapa."
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Construyendo grafica..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Imposible crear gráfico de la red."
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Columna de costos a futuro no especificada."
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Campo de arco < 1."
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "No se ha encontrado la columna <%s> en la tabla <%s>."
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "El tipo de datos para la columna <%s> no está soportado (debe ser de tipo numérico)."
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Estableciendo costes de nodos..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr "No se encuentra el registro para el nodo %d (cat = %d). (El coste se establece como 0)."
+
+#
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "No se ha podido añadir el arco a la red."
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid "Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "No se encuentra el registro para el nodo %d (cat = %d). (El coste se establece como 0)."
+
+#
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "No se ha podido añadir el arco a la red."
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Campo de arco < 1."
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Registrando arcos..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid "Database record for line %d (cat = %d, forward/both direction(s)) not found (cost was set to 0)"
+msgstr "No se ha encontrado el registro de la base de datos para la línea %d (cat =%d, hacia adelante / en una o ambas direcciones) (se omite la línea hacia adelante / en una o ambas direcciones)."
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid "Database record for line %d (cat = %d, backword direction) not found(cost was set to 0)"
+msgstr "No se ha encontrado el registro de la línea %d (cat = %d, en la dirección hacia atrás) en la base de datos , (se omite la dirección de la línea)."
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Achatamiento de la gráfica ..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "El grafico fue construido."
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid "Database record for line %d (cat = %d, forward/both direction(s)) not found (forward/both direction(s) of line skipped)"
+msgstr "No se ha encontrado el registro de la base de datos para la línea %d (cat =%d, hacia adelante/en una o ambas direcciones) (se omite la línea hacia adelante/en una o ambas direcciones)."
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid "Database record for line %d (cat = %d, backword direction) not found(direction of line skipped)"
+msgstr "No se ha encontrado el registro de la línea %d (cat = %d, en la dirección hacia atrás) en la base de datos , (se omite la dirección de la línea)."
+
+#
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "No se ha podido añadir el arco a la red."
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr "Romper polígono: ¡bug en árbol binario!"
@@ -3244,7 +3349,7 @@ msgid "3D raster map <%s> not found"
 msgstr "No se ha encontrado el mapa raster 3D <%s>."
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3383,85 +3488,96 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ". Ver los errores en la salida (de errores)."
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr "El vectorial no contiene puntos"
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr "Eliminar la tabla <%s> que está adjuntada a los siguientes mapa(s):"
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr "Defe usar la bandera force para realmente eliminarlos. Saliendo."
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "No se puede leer el ajuste de desplazamiento de línea %ld"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "No se puede leer el id %d del elemento."
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr "Nombre de mapa {0} no válido"
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr "La ejecución del subproceso no fue exitosa"
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Ráster tipo: {0} no soportado"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr "Error al ejecutar: Rast_get_ith_cat"
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 msgid "Null value detected"
 msgstr "Valor NULO detectado"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 msgid "Error executing: Rast_set_cat"
 msgstr "Error ejecutando: Rast_set_cat"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr "El mapa no existe, no puedo abrir modo en 'r'"
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Mapa ráster <{0}> ya existe y no será sobreescrito"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 msgid "Raster type not defined"
 msgstr "Tipo de ráster no definido"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr "Tipo de modo: {0} no soportado ('r', 'w','rw')"
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, python-format
 msgid "Index out of range: %r."
 msgstr "Índice fuera de rango: %r."
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Mapa ráster <{0}> ya existe. Use overwrite."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Mapa ráster <{0}> no existe"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Tipo de modo: {0} no soportado ('r','w')"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Tipo de sobreescritura: {0} no soportado (Verdadero/Falso)"
@@ -3470,32 +3586,36 @@ msgstr "Tipo de sobreescritura: {0} no soportado (Verdadero/Falso)"
 msgid "The map is close!"
 msgstr "¡El mapa está cerrado!"
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "No ha sido posible exportar mapa ráster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "No ha sido posible exportar regla de colores para mapas ráster <%s> r.out.gdal"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "No ha sido posible exportar mapa ráster <%s> con r.pack"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "No ha sido posible exportar mapa <%s> como GML con v.out.ogr"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "No ha sido posible exportar mapa vectorial <%s> con v.pack"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "No ha sido posible exportar mapa ráster <%s> con r3.pack"
@@ -3531,7 +3651,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "El mapa raster <%s> no se encuentra en el directorio de mapas (mapset) <%s>."
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, python-format
 msgid "Map <%s> is already in temporal database, use overwrite flag to overwrite"
 msgstr "Mapa <%s> ya está en la base de datos temporales, usar bandera overwrite para sobrescribirlo"
@@ -3547,12 +3667,12 @@ msgid "Error computing map <%s>"
 msgstr "Error calculando mapa <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "%s mapa <%s> no encontrado en base de datos espacial de GRASS"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr "Elemento no válido '%s'"
@@ -3564,9 +3684,9 @@ msgstr "No ha sido posible insertar el conjunto de datos <%(ds)s> del tipo %(typ
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr "No ha sido posible actualizar el conjunto de datos <%(ds)s> del tipo %(type)s en la base de datos temporales. El Directorio de mapas del conjunto de datos no es igual al Directorio de mapas actual"
@@ -3576,86 +3696,86 @@ msgstr "No ha sido posible actualizar el conjunto de datos <%(ds)s> del tipo %(t
 msgid "Unknown dataset type: %s"
 msgstr "Tipo conjunto de datos desconocido: %s"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr "Debe especificar el nombre base de los nuevos mapas creados"
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr "Aplicando expresión r.mapcalc: \"%s\""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr "Aplicando expresión r3.mapcalc: \"%s\""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr "Aplicando sentencia where en v.extract: \"%s\""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 msgid "Error in computation process"
 msgstr "Error en el proceso de cálculo"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "No ha sido posible leer el archivo de marca de tiempo para mapa ráster <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "No ha sido posible crear archivo de marca de tiempo para mapa ráster <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Fecha y hora no válidas en la marca de tiempo de mapa ráster <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr "Error interno"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "No ha sido posible elminar marca de tiempo de mapa ráster <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "No ha sido posible leer archivo de marca de tiempo de mapa ráster 3D <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "No ha sido posible crear archivo de marca de tiempo de mapa ráster 3D <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Fecha y hora no válidas en marca de tiempo de mapa ráster 3D <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "No ha sido posible leer archivo de marca de tiempo del mapa vectorial <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "No ha sido posible crear archivo de marca de tiempo del mapa vectorial <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Fecha y hora no válidas en marca de tiempo de mapa vectorial <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "No ha sido posible eliminar marca de tiempo del mapa vectorial <%s>"
@@ -3685,45 +3805,45 @@ msgstr "No ha sido posible importar mapa vectorial <%s> desde el archivo %s."
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "No ha sido posible desempaquetar mapa vectorial <%s> desde el archivo %s."
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Archivo de conjunto de datos ráster espacio temporales <%s> no encontrado"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Directorio de extracción <%s> no encontrado"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr "Revisando validez del archivo de entrada (tamaño %0.1f MB). Puede ser tardado..."
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, python-format
 msgid "Unable to find init file <%s>"
 msgstr "No ha sido posible encontrar archivo init <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, python-format
 msgid "Unable to find list file <%s>"
 msgstr "No ha sido posible encontrar archivo de lista <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "No ha sido posible encontrar archivo de proyección <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 msgid "Extracting data..."
 msgstr "Extrayendo datos..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr "La información de la proyección no coincide. Procesando..."
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
@@ -3732,83 +3852,83 @@ msgstr ""
 "Existe una diferencia entre el archivo PROJ_INFO  del mapa importado y la Localización actual:\n"
 "{diff}"
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr "La información de la proyección no concuerda. Abortando."
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "No ha sido posible crear Localización %(l)s. Razón: %(e)s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, python-format
 msgid "Unable to switch to location %s"
 msgstr "No ha sido posible cambiar a Localización %s"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "No ha sido posible crear la base de datos temporales predeterminada en nueva Localización %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr "Palabras clave %(t)s, %(s)s o %(n)s no encontradas en archivo de inicio (init file)."
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr "La cantidad de mapas no es la misma en los archivos de inicio (init) y lista."
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr "El archivo de almacenamiento es de un tipo de conjunto de datos espacio temporales incorrecto"
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "No ha sido posible encontrar archivo ráster GeoTIFF <%s> en archivo."
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "No ha sido posible encontrar archivo ráster AAIGrid <%s> en archivo."
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "No ha sido posible encontrar archivo vectorial GML <%s> en archivo."
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "No ha sido posible encontrar archivo de paquete GRASS <%s> en archivo."
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 msgid "Unsupported input format"
 msgstr "Tipo de formato no soportado"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, python-format
 msgid "Space time %(t)s dataset <%(sp)s> is already in the database. Use the overwrite flag."
 msgstr "Conjunto de datos <%(sp)s> espacio temporales %(t)s ya está en la base de datos. Use la bandera overwrite."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Sobreescribir conjunto de datos <%(id)s> espacio temporales %(sp)s y quitar registro a todos los mapas."
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, python-format
 msgid "Key word %s not found in init file."
 msgstr "Palabra clave %s no encontrada en archivo de inicio (init file)."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, python-format
 msgid "Create space time %s dataset."
 msgstr "Creando conjunto de datos espacio temporal %s."
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr "Ha fallado el cambio a la Localización original"
 
@@ -3835,11 +3955,11 @@ msgstr ""
 "Error, mapa vectorial %s ya existe en la base de datos temporales. Use bandera overwrite: \n"
 "%s"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid "Unable to initialize the temporal DBMI interface. Please use t.connect to specify the driver and the database string"
 msgstr "No ha sido posible inicializar la interfaz temporal DBMI. Por favor use t.connect para especificar el controlador y la cadena de la base de datos"
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
@@ -3848,7 +3968,7 @@ msgstr ""
 "No ha sido posible recibir metadatos de base de datos temporales.\n"
 "Información de la base de datos temporales actual:%(info)s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3859,7 +3979,7 @@ msgstr ""
 "Base de datos temporales: no coincide la versión.\n"
 "%(backup)s "
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3870,12 +3990,12 @@ msgstr ""
 "%(backup)sVersión de la base de datos soportada es: %(tdb)i\n"
 "Información de base de datos temporales actual:%(info)s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, python-format
 msgid "Creating temporal database: %s"
 msgstr "Creando base de datos temporal: %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -3886,39 +4006,37 @@ msgstr ""
 "Excepción: %s\n"
 "Por favor use t.connect para definir una ruta de lectura y escritura de base de datos temporal"
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid "Unable to mogrify sql statement. There is no temporal database connection defined for mapset <%(mapset)s>"
-msgstr "No ha sido posible modificar sentencia sql. No hay conexión a base de datos temporales definida para Directorio de mapas <%(mapset)s>"
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "No se puede eliminar el elemento %s"
 
-#: ../lib/python/temporal/core.py:937
-#, python-format
-msgid "Unable to check table. There is no temporal database connection defined for mapset <%(mapset)s>"
-msgstr "No ha sido posible revisar la tabla. No está definida la conexión a la base de datos temporales para el Directorio de mapas <%(mapset)s>"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "No ha sido posible crear la tabla <%s>."
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid "Unable to execute sql statement. There is no temporal database connection defined for mapset <%(mapset)s>"
-msgstr "No ha sido posible ejecutar la sentencia sql. No hay conexión a base de datos temporales definida para el  Directorio de mapas <%(mapset)s>"
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "No se puede ejecutar el comando."
 
-#
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid "Unable to fetch one. There is no temporal database connection defined for mapset <%(mapset)s>"
-msgstr "No se puede abrir el archivo de cabecera del mapa vectorial <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "No se puede encontrar '%s'."
 
-#
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid "Unable to fetch all. There is no temporal database connection defined for mapset <%(mapset)s>"
-msgstr "No se puede abrir el archivo de cabecera del mapa vectorial <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "No se pueden presentar estadísticas del archivo <%s>."
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid "Unable to execute transaction. There is no temporal database connection defined for mapset <%(mapset)s>"
-msgstr "No ha sido posible ejecutar la transacción. No hay conexión definida a base de datos temporales para el Directorio de mapas <%(mapset)s>"
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "No se puede ejecutar el comando."
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -3929,7 +4047,7 @@ msgstr ""
 "Excepción: \"%(ex)s\"\n"
 "Por favor use t.connect para definir "
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, python-format
 msgid ""
 "Unable to execute :\n"
@@ -3938,7 +4056,7 @@ msgstr ""
 "No ha sido posible ejecutar :\n"
 "%(sql)s"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, python-format
 msgid ""
 "Unable to execute transaction:\n"
@@ -3947,163 +4065,163 @@ msgstr ""
 "No ha sido posible ejecutar transacción:\n"
 "%(sql)s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Tipo temporal desconocido \"%s\""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "Granularidad incorrecta: \"%s\""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Unidad temporal no soportada: %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Registro de tabla <%s> creado para conjunto de datos <%s> espacio temporales %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr "Los conjuntos de datos espacio temporales deben ser del mismo tipo de tiempo"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr "El tipo de mapa temporal de la muesta del cnojunto de mapas debe ser de intervalo"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "No ha sido posible obtener ids de tabla de registro <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr "Formato de granularidad incorrecto: %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr "No ha sido posible renombrar conjunto de datos <%(ds)s> del tipo %(type)s en la base de datos temporales. El Directorio de mapas del conjunto de datos no coincide con el Directorio de mapas actual"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr "El renombramiento para conjunto de datos espacio temporales no está soportado para PostgreSQL."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Eliminar conjunto de datos <%s> espacio temporales %s de base de datos temporales"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr "No ha sido posible eliminar el conjunto de datos <%(ds)s> del tipo %(type)s de la base de datos temporales. El Directorio de mapas no coincide con el Directorio de mapas actual"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, python-format
 msgid "Drop map register table: %s"
 msgstr "Tabla de registro del mapa eliminada: %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 msgid "Error in register table request"
 msgstr "Error al registrar solicitud de la tabla"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, python-format
 msgid "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of the dataset does not match the current mapset"
 msgstr "No ha sido posible registrar mapas en Directorio de mapas <%(ds)s> de tipo %(type)s. El Directorio de mapas del conjunto de datos no coincide con el Directorio de mapas actual"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid "Only a map that was inserted in the temporal database can be registered in a space time dataset"
 msgstr "Solamente el mapa que haya sido insertado en la base de datos temporales puede ser registrado en un conjunto de datos espacio temporales"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr "Mapa <%(id)s> con capa %(l)s tiene tiempo no válido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr "El mapa <%s> tiene un tiempo no válido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, python-format
 msgid "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer %(l)s are different"
 msgstr "Son distintos los tipos de tiempo de conjunto de datos espacio temporales <%(id)s> y mapa <%(map)s> con capa %(l)s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, python-format
 msgid "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Son diferentes los tipos de tiempo del conjunto de datos espacio temporales <%(id)s> y del mapa <%(map)s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Definir unidad temporal para conjunto de datos <%s> espacio temporales %s como %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid "Relative time units of space time dataset <%(id)s> and map <%(map)s> with layer %(l)s are different"
 msgstr "Son diferentes las unidades de tiempo relativas de conjunto de datos <%(id)s> y mapa <%(map)s> con capa %(l)s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid "Relative time units of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Son diferentes las unidades de tiempo relativas de conjunto de datos <%(id)s> y mapa <%(map)s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr "Solamente se pueden registrar mapas del mismo Directorio de mapas"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Mapa <%(map)s> con capa %(l)s ya está registrado."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr "Mapa <%s> ya registrado."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr "No ha sido posible quitar el registro del mapa del conjunto de datos <%(ds)s> del tipo %(type)s en la base de datos temporales. El Directorio de mapas del conjunto de mapas no coincide con el Directorio de mapas actual"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, python-format
 msgid "Map <%(map)s> with layer %(l)s is not registered in space time dataset <%(base)s>"
 msgstr "Mapa <%(map)s> con capa %(l)s no está registrado en conjunto de datos espacio temporales <%(base)s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "El mapa <%(map)s> no está registrado en conjunto de datos espacio temporales <%(base)s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid "Update metadata, spatial and temporal extent from all registered maps of <%s>"
 msgstr "Actualizar metadato, extensión espacial y temporal para todos los mapas registrados es de <%s>"
@@ -4158,52 +4276,57 @@ msgstr "Iniciando registro de mapas en base de datos temporales..."
 msgid "The temporal operators <%s> support only absolute time."
 msgstr "El operador temporal <%s> solamente soporta tiempos absolutos."
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 msgid "Unable to read range file"
 msgstr "No ha sido posible leer archivo de rango"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "No ha sido posible cargar rango de mapa ráster 3D <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "No ha sido posible cerrar el mapa raster 3D <%s>."
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Agregando mapa ráster %s"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, python-format
 msgid "Raster map <%(name)s> is already in temporal database, use overwrite flag to overwrite"
 msgstr "Mapa ráster <%(name)s> ya está en la base de datos temporales, use la bandera overwrite para sobreescribir"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr "Calcular agregación de los mapas entre %(st)s - %(end)s"
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 msgid "Error occurred in r.series computation"
 msgstr "Ocurrió error en cálculo de r.series"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Agregando mapas ráster %(len)i desde %(start)s hasta %(end)s"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid "Unable to perform aggregation. Output raster map <%(name)s> exists and overwrite flag was not set"
 msgstr "No ha sido posible realizar la agregación. El mapa ráster de salida <%(name)s> ya existe y la bandera overwrite no fue definida"
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid "The limit of open fiels (%i) was reached (%i). The module r.series will be run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4350,28 +4473,28 @@ msgstr "Identificador faltante"
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Identificador incorrecto, falta el Directorio de mapas"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Conjunto de datos <No se ha encontrado el mapa raster <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "No ha sido posile obtener estadísticas de mapa ráster <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "No ha sido posile obtener estadísticas de mapa ráster 3d <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Conjunto de datos <%(i)s> espacio temporales %(sp)s no encontrado"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "No ha sido posible obtener estadísticas de mapa vectorial <%s>"
@@ -4399,159 +4522,201 @@ msgstr "Las Zonas de tiempo no están soportadas"
 msgid "Unable to parse time string: %s"
 msgstr "No ha sido posible parsear cadena de tiempo: %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr "Operadores espacio temporales no están soportados en el modo de álgebra con granularidad"
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr "Todos los conjuntos de datos espacio temporales de entrada deben tener una topología temporal válida."
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Todos los conjuntos de datos espacio temporales deben ser del mismo tipo de tiempo."
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Removiendo mapas vacíos %s no necesitados"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Conjunto de datos <%s> espacio temporales %s no encontrado"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid "Wrong temporal type of space time dataset <%s>                                       <%s> time is required"
 msgstr "El tipo temporal del conjunto de datos espacio temporales  es incorrecto <%s>                                       <%s> tiempo es requerido"
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 msgid "Wrong type of input "
 msgstr "Tipo de entrada incorrecto"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid "The resulting space time dataset type <%(a)s> is different from the requested type <%(b)s>"
 msgstr "El tipo <%(a)s> de conjunto de datos espacio temporales es diferente del tipo solicitado <%(b)s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid "Maps that should be registered in the resulting space time dataset have different types."
 msgstr "Los mapas que deberían estar registrados en el conjunto de datos espacio temporales son de tipos diferentes."
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid "Wrong map type <%s> . TMAP only supports single maps that are registered in the temporal GRASS database"
 msgstr "Tipo de mapa incorrecto <%s> . TMAP solo soporta mapas solos que estén registrados en la base de datos temporal"
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+#, fuzzy
+msgid "Merging empty map lists"
+msgstr "Nombre del mapa raster de entrada."
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "No se puede encontrar el mapa vectorial <%s> en <%s>."
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr "Lista de mapas vacía"
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr "Entrada vacía en lista de mapas, esto no debería de ocurrir"
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid "Projections are different. Unable to compute overlapping_2d for spatial extents"
 msgstr "Las proyecciones son distintas. No es posible calcular el overlapping_2d para la extensión espacial"
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr "Las proyecciones son distintas. No es posible calcular is_in_2d para la extensión espacial"
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid "Projections are different. Unable to compute equivalent_2d for spatial extents"
 msgstr "Las proyecciones son distintas. No es posible calcular equivalent_2d para la extensión espacial"
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr "Las proyecciones son distintas. No es posible calcular cover_2d para la extensión espacial"
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr "Las proyecciones son distintas. No es posible calcular covertura para la extensión espacial"
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr "Cálculo de volumen no está soportado para proyecciones LL"
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr "Cálculo de área no está soportado para proyecciones LL"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Tiempo de inicio debe ser de tipo fecha y hora para %(type)s mapa <%(id)s> con capa: %(l)s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Tiempo de inicio debe ser de tipo fecha y hora para %(type)s mapa <%(id)s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Tiempo de término debe ser de tipo fecha y hora para %(type)s mapa <%(id)s> con capa: %(l)s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Tiempo de término debe ser de tipo fecha y hora para %(type)s mapa <%(id)s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Tiempo de término debe ser mayor al tiempo de inicio para %(type)s mapa <%(id)s> con capa: %(l)s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Tiempo de término debe mayor que el tiempo de inicio para %(type)s mapa <%(id)s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s> with layer %(l)s: %(u)s"
 msgstr "Tipo de unidad relativa de tiempo no soportada para %(type)s mapa <%(id)s> con capa %(l)s: %(u)s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Tipo de unidad relativa de tiempo no soportada para %(type)s mapa <%(id)s>: %(u)s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, python-format
 msgid "End time must be greater than start time for %(typ)s map <%(id)s> with layer %(l)s"
 msgstr "Tiempo de término debe ser mayor que tiempo inicial para %(typ)s mapa <%(id)s> con capa %(l)s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is greater than end time"
 msgstr "Mapa <%(id)s> con la capa %(layer)s tiene un intervalo incorrecto, el tiempo de inicio es mayor que el tiempo de término"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr "El mapa <%s> tiene un intervalo de tiempo incorrecto, tiempo de inicio es mayor que el de término"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr "El mapa <%s> tiene un tiempo de inicio incorrecto"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Eliminar %s conjunto de datos <%s> de base de datos temporales"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal database. The mapset of the dataset does not match the current mapset"
 msgstr "No ha sido posible quitar el registro del conjunto de datos <%(ds)s> de tipo %(type)s de la base de datos temporales. El Directorio de mapas del conjunto de datos no coincide con el Directorio de mapas actual"
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid "Programmer error: '%(sql)s', '%(filename)s', or '%(table)s' must be provided"
@@ -4562,30 +4727,30 @@ msgstr "Error del programador: se debe dar '%(sql)s', '%(filename)s', o '%(table
 msgid "Fetching data failed"
 msgstr "No se pueden recuperar los datos de la tabla. <%s>."
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 msgid "unknown"
 msgstr "desconocido"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr "Parámetero element '%(element)s' no encontrado: '%(value)s'"
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr "Bandera no encontrada: %s"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr "Faltan parámetros '%(name)s' (%(desc)s)."
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr "<required>"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4593,81 +4758,112 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr "No se puede parsear descripción de interface de <{name}> módulo: {error}"
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "El nombre del mapa vectorial <%s> no es válido"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "El nombre del mapa vectorial <%s> no es válido"
+
+#: ../lib/python/script/array.py:197
+msgid "grass.script.array.read is deprecated and does not work on MS Windows, pass raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "El nombre del mapa vectorial <%s> no es válido"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "El nombre del mapa vectorial <%s> no es válido"
+
+#: ../lib/python/script/array.py:346
+msgid "grass.script.array3d.read is deprecated and does not work on MS Windows, pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr "No se puede encontrar el ejecutable {}"
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid "To run the module <%s> add underscore at the end of the option <%s> to avoid conflict with Python keywords. Underscore at the beginning is depreciated in GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr "Para correr el módulo <%s> añada guión bajo al final de la opción <%s> para evitar conflicto con las palabras reservadas de Python. El guión bajo al inicio es despreciado en GRASS 7.0 y será removido en la versión 7.1."
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr "Mezclando tipos de valores. Se tratará de comparar luego de la conversión a enteros"
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr "Tipo de elemento debe ser \"cell\" y no \"%s\""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr "Tipo de elemento debe ser \"raster\" y no \"%s\""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 msgid "Unable to list mapsets"
 msgstr "No ha sido posible enlistar Directorios de mapas"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr "La Localización <%s> ya existe. Operación cancelada."
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "La Localización <%s> ya existe y será sobreescrita"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr "Nivel de depuración {}"
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr "AVISO: ignorado nivel de depuración no soportado (debe ser >=0 y <=5)- {}\n"
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Nombre de archivo <%s> no admitido. No puede ser 'NULL' o empezar con '.'."
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Nombre de archivo <%(s)s> no admitido. <%(il)s> no permitido.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "La conexión a la base de datos no está definida para capa %s"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Capa faltante %(layer)d en mapa vectorial <%(map)s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr "Ha fallado vector_db_select()"
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
@@ -4676,32 +4872,32 @@ msgstr ""
 "Salida de v.what no está en formato JSON válido:\n"
 "{ret}"
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr "Ocurrió un error al correr r3.mapcalc"
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, python-format
 msgid "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in current mapset."
 msgstr "No ha sido posible escribir historia para <%(map)s>. Mapa ráster >%(map)s> no encontrado en el Directorio de mapas actual."
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr "Ocurrió un error al correr r.mapcalc"
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 msgid "No data"
 msgstr "No hay datos"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr "valor"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr "etiqueta"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr "color"
 
@@ -4795,7 +4991,7 @@ msgstr "No es posible abrir el archivo <%s> para escritura."
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "No se ha encontrado el mapa raster <%s>."
@@ -5283,12 +5479,12 @@ msgstr "<%s> nada ha sido renombrado"
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "Copiar %s <%s> al Directorio de mapas actual con el nombre <%s>"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "No ha sido posible copiar <%s> al conjunto de mapas actual como <%s>"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr "%s copiado"
@@ -5497,7 +5693,7 @@ msgstr "Marca de tiempo especificada no es válida para mapa vectorial <%s@%s>"
 msgid "WARNING: "
 msgstr "ADVERTENCIA: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ERROR: "
@@ -5615,7 +5811,7 @@ msgstr "Campo de formato duplicado"
 msgid "Duplicate compressed field"
 msgstr "Campo comprimido duplicado"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "Localización <%s> no existe"
@@ -5739,22 +5935,22 @@ msgstr "GISRC - variable no definida"
 msgid "Variable '%s' not set"
 msgstr "Variable '%s' no definida"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): Directorio de mapas <%s> no corresponde a xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "G__open(read): no ha sido posible abrir '%s': %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G__open(write): no ha sido posible abrir '%s': %s"
@@ -5808,12 +6004,12 @@ msgstr "Campo es no válido:'%s' en el archivo %s en <%s>."
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "No se ha proporcionado información del elipsoide en el archivo %s en <%s>."
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "No ha sido posible generar el elemento del Directorio de mapas %s (%s): %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "No ha sido posible posible accesar el elemento del Directorio de mapas %s (%s): %s"
@@ -5831,16 +6027,16 @@ msgid "SYNOPSIS"
 msgstr "SINOPSIS"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Identificadores."
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr "Forzar lanzamiento de cuadro de diálogo GUI"
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parámetros"
 
@@ -5852,6 +6048,10 @@ msgstr "Opciones"
 msgid "Default"
 msgstr "Preseleccionado"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr "Error interno: opción o bandera no encontrada"
@@ -5931,16 +6131,21 @@ msgstr "ERROR: opción key no definida"
 msgid "Flags:"
 msgstr "Banderas:"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Salida \"silenciosa\" del módulo."
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr "Parámetros:"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   preestablecido: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   opciones: "
@@ -6183,195 +6388,205 @@ msgstr "Un solo mapa vectorial puede conectarse a más de una tabla de base de d
 msgid "Category value"
 msgstr "Valor de categoría"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Valores de categorías"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Ejemplo: 1,3,7-9,13."
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Identificador de elemento"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Identificadores de elementos"
 
 #
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Nombre del archivo de entrada"
 
 #
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Nombre del archivo de salida"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Separador de campos"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr "Caracteres especiales: tubería ('|'), espacio, coma, tabulador, línea nueva"
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Color"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Puede ser un nombre de color estándar o triplete R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Puede ser un nombre de color estándar, triplete R:G:B, o \"ninguno\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 msgid "Name of input directory"
 msgstr "Nombre de directorio de entrada"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr "Unidades"
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr "Tipo de dato(s)"
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr "Nombre de Directorio de mapas (predeterminado: ruta de búsqueda actual)"
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr "'.' para Directorio de mapas"
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr "Nombre de Localización"
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr "Nombre de Localización (no es ruta de Localización)"
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr "Directorio de bases de datos GRASS GIS"
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr "Predeterminado: ruta a la base de datos actual GRASS GIS"
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 msgid "Coordinates"
 msgstr "Coordenadas"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 msgid "Name of color table"
 msgstr "Nombre de tabla de colores"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr "Texto que representa valor NULO"
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 msgid "Name of saved region"
 msgstr "Nombre de región guardada"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 msgid "Name of the input space time dataset"
 msgstr "Nombre del conjunto de datos espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 msgid "Name of the input space time datasets"
 msgstr "Nombre de los conjuntos de datos espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 msgid "Name of the output space time dataset"
 msgstr "Nombre del conjunto de datos espacio temporales de salida"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 msgid "Name of the input space time raster dataset"
 msgstr "Nombre del conjunto de datos ráster espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 msgid "Name of the input space time raster datasets"
 msgstr "Nombre de los conjuntos de datos ráster espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 msgid "Name of the output space time raster dataset"
 msgstr "Nombre del conjunto de datos ráster espacio temporales de salida"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 msgid "Name of the input space time vector dataset"
 msgstr "Nombre del conjunto de datos vectoriales espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 msgid "Name of the input space time vector datasets"
 msgstr "Nombre de los conjuntos de datos vectoriales espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 msgid "Name of the output space time vector dataset"
 msgstr "Nombre del conjunto de datos vectoriales espacio temporales de salida"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 msgid "Name of the input space time raster3d dataset"
 msgstr "Nombre del conjunto de datos ráster3d espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 msgid "Name of the input space time raster3d datasets"
 msgstr "Nombre de los conjunto de datos ráster3d espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 msgid "Name of the output space time raster3d dataset"
 msgstr "Nombre del conjunto de datos ráster3d espacio temporales de salida"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 msgid "Type of the input space time dataset"
 msgstr "Tipo del conjunto de datos espacio temporales de entrada"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 msgid "Name of the input map"
 msgstr "Nombre del mapa de entrada"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 msgid "Name of the input maps"
 msgstr "Nombre de los mapas de entrada"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 msgid "Type of the input map"
 msgstr "Tipo del mapa de entrada"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 msgid "The temporal type of the space time dataset"
 msgstr "El tipo de tiempo del conjunto de datos espacio temporales"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 msgid "WHERE conditions of SQL statement without 'where' keyword used in the temporal GIS framework"
 msgstr "Condiciones \"WHERE\" de sentencia SQL no tiene la palabra clave \"where\" usada en el marco de trabajo de SIG temporal"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr "Ejemplo: start_time > '2001-01-01 12:30:00'"
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr "El método a ser usado para muestrear el conjunto de datos de entrada"
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 msgid "Do not create attribute table"
 msgstr "No crear tabla de atributos"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr "No construir topología"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+#, fuzzy
+msgid "Request for unsupported compressor"
+msgstr "El mapa raster <%s> no se encuentra en el directorio de mapas (mapset) <%s>."
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6485,77 +6700,82 @@ msgstr "G_list: tipo de elemento desconocido."
 msgid "no description"
 msgstr "no hay descripción"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG in opción nombre, '%s' no es válido"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "Error en las descripciónes, no existe la opción '%s' en <%s>."
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr "Utilice cualquier identificador de opción (flag) --quiet (silencioso) o --verbose (detallado), pero no ambos, de ser este el caso se asume la opción detallado --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr "Utilice cualquier identificador de opción (flag) --quiet (silencioso) o --verbose (detallado), pero no ambos, de ser este el caso se asume silencioso --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr "Utilice cualquier identificador de opción (flag) --quiet (silencioso) o --verbose (detallado), pero no ambos, de ser este el caso se asume silencioso --quiet."
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Disculpe <%s> no es una opción válida"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr "Tu instalación no incluye la GUI, saliendo."
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr "ERROR"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "No se puede determinar el nombre del programa."
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "%s: Disculpe, <%c> no es una bandera válida"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "%s: Disculpe, <%s=> es ambiguo"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr "Opción <%s=> coincide"
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr "Por favor actualice el uso de <%s>: la opción <%s> ha sido renombrada como <%s>"
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "%s: Disculpe, <%s> no es un parámetro válido"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> es una abreviación de <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr "La opción <%s> no acepta respuestas múltiples"
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6564,7 +6784,7 @@ msgstr ""
 "Syntaxis de rango no admitida para parámetro <%s>\n"
 "\tPresentado como: %s"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6573,12 +6793,12 @@ msgstr ""
 "Valor <%s> fuera de rango para parámetro <%s>\n"
 "\tRango permitido: %s"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, c-format
 msgid "Missing value for parameter <%s>"
 msgstr "Falta valor para parámetro <%s>"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -6587,7 +6807,7 @@ msgstr ""
 "Valor <%s> es ambiguo para parámetro <%s>\n"
 "\tOpciones válidas: %s"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -6596,7 +6816,7 @@ msgstr ""
 "Parámetro requerido <%s> no definido:\n"
 "\t(%s)"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -6605,37 +6825,37 @@ msgstr ""
 "La opción <%s> debe ser dada en múltiplos de %d\n"
 "\tUsted dio %d item(s): %s"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr "opción <%s>: <%s> ya existe. Para sobreescribir, use la bandera --overwrite"
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, c-format
 msgid "%s= is not a separator option"
 msgstr "%s= no es una opción de separador"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr "No hay separador dado para %s="
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, c-format
 msgid "%s= is not a file option"
 msgstr "%s= no es una opción de archivo"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "No está soportada la apertura de múltiples archivos para %s="
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "No ha sido posible abrir %s archivo <%s>"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "No ha sido posible crear %s archivo <%s>"
@@ -7587,15 +7807,34 @@ msgstr "Descriptores de elipsoide no válidos (a, rf, es o b) en el archivo."
 msgid "No ellipsoid info given in file"
 msgstr "No se ha dado información del elipsoide en el archivo."
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Fallo en la lectura inicial del archivo comprimido [%s en %s]."
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Fallo en la lectura inicial del archivo comprimido [%s en %s]."
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "Librería raster no inicializada. El programador olvidó llamar a Rast_init()."
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid "No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7626,51 +7865,46 @@ msgstr "Error al escribir datos descomprimidos FP para fila %d de <%s>: %s"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Error al escribir datos comprimidos FP para fila %d de <%s>: %s"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Error al escribir datos comprimidos para fila %d de <%s>"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Error al escribir datos descomprimidos para fila %d de <%s>"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Error al escribir datos via GDAL para fila %d de <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, c-format
-msgid "No null file for <%s>"
-msgstr "No hay archivo nulo para <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr "GDAL no soporta el escribir filas nulas de manera separada"
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "No ha sido posible encontrar archivo temporal nulo <%s>"
+msgid "No null file for <%s>"
+msgstr "No hay archivo nulo para <%s>"
 
-#: ../lib/raster/put_row.c:528
-#, c-format
-msgid "Unable to open null file <%s>"
-msgstr "No ha sido posible abrir archivo temporal nulo <%s>"
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
+#, fuzzy, c-format
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "Error al escribir fila nula %d de <%s>"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "put_raster_row: mapa ráster <%s> no está abierto para escritura - solicitud ignorada"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "put_raster_row: archivo descriptor no abierto - solicitud ignorada"
 
@@ -7756,22 +7990,22 @@ msgstr "Error al cerrar archivo de metadatos <%s> para mapa ráster <%s@%s>"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "No ha sido posible crear archivo de metadatos <%s> para mapa ráster <%s@%s>"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Descriptor no válido: %d"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "No ha sido posible renombrar archivo nulo '%s' hacia '%s': %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr ""
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "no ha sido posible escribir archivo f_format file para mapas CELL"
 
@@ -7856,102 +8090,101 @@ msgstr "Error al leer tipo de mapa para mapa ráster <%s>"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "Mapa ráster <%s@%s>: El campo de formato en el archivo de encabezado no es válido"
 
-#: ../lib/raster/open.c:223
-#, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Mapa ráster <%s@%s>: tipo de compresión %d no soportada"
+#: ../lib/raster/open.c:236
+#, fuzzy, c-format
+msgid "Compression with %s is not supported"
+msgstr "No se soportan objetos espaciales del tipo %d OGR"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid "Raster map <%s> is in different projection than current region. Found <%s>, should be <%s>."
 msgstr "Mapa ráster <%s> está en una proyección diferente a la región actual. Se encontró <%s>, debería de ser <%s>."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Mapa ráster <%s> está en una zona (%d) diferente a la región actual (%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Mapa ráster <%s>: bytes por celda (%d) demasiado grande"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, fuzzy, c-format
 msgid "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr "El mapa <%s@%s> es una liga GDAL pero grass ha sido compilado sin soporte para GDAL"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "No se puede abrir archivo %s archivo para mapa ráster <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Error al leer el mapa <%s@%s>, fila %d"
 
-#
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "No se puede abrir el archivo de cabecera del vectorial <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 msgid "Unable to create GDAL link"
 msgstr "No ha sido posible crear enlace GDAL"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr "Tipo de mapa no válido <%d>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Mapa ráster <%s> no se encuentra en el Directorio de mapas actual (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> es un nombre de archivo no admitido"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr "No hay archivos temporales disponibles: %s"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "El mapa raster <%s> no se encuentra en el directorio de mapas de usuario actual (mapset). (%s)."
+
+#: ../lib/raster/open.c:817
 #, fuzzy
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr "G_set_fp_type(): únicamente puede ser invocado mediante FCELL_TYPE o DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Mapa ráster <%s> no encontrado en Directorio de mapas <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "No se puede encontrar '%s'."
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Tipo no válido: campo '%s' en el archivo '%s'."
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Tipo faltante: campo en '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Mapa ráster <%s> no es xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr "Rast_set_quant_rules() solamente puede ser invocado para mapas ráster abiertos para lectura"
 
@@ -7990,24 +8223,40 @@ msgstr "Rast__null_bitstream_size: columnas (%d) es negativo"
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr "Rast_make_random_colors: mínimo (%d) > máximo (%d)"
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "Leyendo mapa ráster <%s@%s> la solicitud para la fila %d está fuera de la región"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Error al escribir el archivo de índices de categoría <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Error al leer la fila nula %d."
@@ -8233,31 +8482,26 @@ msgstr "desconocido"
 msgid "Unsupported icon %d"
 msgstr "Ícono no soportado %d"
 
-#: ../lib/display/r_raster.c:128
-#, c-format
-msgid "%s variable defined, %s ignored"
+#: ../lib/display/r_raster.c:98
+#, fuzzy, c-format
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr "%s variable definida, %s ignorado"
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid "Neither %s (managed by d.mon command) nor %s (used for direct rendering) defined"
 msgstr "Ni %s (administrado por el comando d.mon), ni %s (utilizado para renderización directa) han sido definidos"
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Controlador de visualización <%s> desconocido"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, c-format
 msgid "Using display driver <%s>..."
 msgstr "Usando el controlador de visualización <%s>..."
 
-#: ../lib/display/r_raster.c:236
-#, c-format
-msgid "Unable to open file '%s'"
-msgstr "No se puede abrir el archivo '%s'"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8333,123 +8577,165 @@ msgstr "El bloqueo simultáneo de Directorio de mapas no está soportado en Wind
 msgid "Unable to write lockfile %s (%s)"
 msgstr "No ha sido posible escribir archivo de bloqueo (lockfile) %s (%s)"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr "ADVERTENCIA"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr "Saliendo..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr "Uso"
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr "mostrar este mensaje de ayuda"
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr "mostrar información de la versión y salir"
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr "crear base de datos dada, Localización o Directorio de mapas si es que no existe"
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr "salir luego de la creación de la Localización o Directorio de mapas. Solo con bandera -c"
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid "force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr "use interfaz basada en texto (saltar pantalla de bienvenida)"
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr "y establecer como predeterminado"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr "use interfaz basada en texto (mostrar pantalla de bienvenida)"
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr "use $DEFAULT_GUI interfaz gráfica de usuario"
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr "mostrar parámetros de configuración GRASS"
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr "opciones: arco,construir,compilar,ruta,revisión"
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
-msgstr "base de datos inicial (ruta a datos)"
-
-#: ../lib/init/grass.py:220
-msgid "initial location"
-msgstr "Localización inicial"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
-msgstr "Directorio de mapas inicial"
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
 
-#: ../lib/init/grass.py:222
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "fully qualified initial mapset directory"
-msgstr "directorio de Directorio de mapas inicial totalmente calificado"
+msgid "initial GRASS Location"
+msgstr ""
+"\n"
+"Proyección no válida.\n"
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:351
+msgid "directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
+msgstr ""
+
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
+msgstr ""
+
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr "Variables ambientales relevantes para arranque"
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
-msgstr "seleccionar GUI (texto, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
+msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr "establecer navegador web para páginas de ayuda"
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr "definir ruta(s) adicionales para módulos GRASS locales o scripts del usuario"
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr "definir GISBASE adicional para Complementos instalados localmente"
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid "The APPDATA variable points to directory which does not exist, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, python-format
 msgid "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "¡No ha sido posible crear directorio temporal <grass7-%(user)s-%(lock)s>! Saliendo."
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
-msgstr "ERROR: línea no válida en archivo RC: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
+msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "GUI <%s> no soportada en esta versión"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr "Se buscó un navegador web, pero no se encontró ninguno"
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8465,40 +8751,46 @@ msgstr ""
 "\n"
 "Presione RETURN para continuar.\n"
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
+msgstr ""
+
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
 msgstr ""
-"Al parecer el sistema X de Windows no está activo.\n"
-"No se puede soportar una interfaz gráfica de usuario.\n"
-"Cambiando al modo de interfaz basada en texto.\n"
-"\n"
-"Presione RETURN para continuar"
 
-#: ../lib/init/grass.py:598
+#: ../lib/init/grass.py:836
 #, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "ERROR: <%s> no es una Localización GRASS válida"
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
-msgid "Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be created by '-c' switch."
-msgstr "Directorio de mapas <%s> no existe en Localización GRASS <%s>. Se puede crear un nuevo Directorio de mapas con switch '-c'."
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid "Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can be created by '-c' switch."
+msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr "Ha fallado la creación de una nueva Localización. La localización <%s> ya existe."
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
@@ -8506,36 +8798,25 @@ msgstr ""
 "Variables GISDBASE, LOCATION_NAME y MAPSET no están definidas adecuadamente.\n"
 "Se necesita arranque interactivo."
 
-#: ../lib/init/grass.py:678
-msgid "<{}> requested, but not available. Run GRASS in text mode (-text) or install missing package (usually 'grass-gui')."
-msgstr "<{}> solicitado, pero no disponible. Correr GRASS en modo de texto (-text) o instalar el paquete faltante (usualmente 'grass-gui')."
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid "Invalid user interface specified - <%s>. Use the --help option to see valid interface names."
 msgstr "Interfaz de usuario especificada no válida - <%s>. Use la opción --help para ver los nombres válidos para interfaces."
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
-"Error al arrancar GUI. Si es necesario, por favor reporte este error a los desarrolladores de GRASS.\n"
-"Cambiando a modo de texto ahora.\n"
-"\n"
-"Presione RETURN para continuar..."
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
-"Se recibió mensaje de SALIDA de la GUI.\n"
-"GRASS no se iniciará. Hasta pronto."
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
@@ -8543,58 +8824,50 @@ msgstr ""
 "Código de retorno no válido para script de arranque de GUI.\n"
 "Por favor avise a los desarrolladores de GRASS de este error."
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
-"Error al leer datos de información de ruta para g.gisenv.\n"
-"BASESIG=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
-"\n"
-"Revisar el archivo <%s(file)> ."
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr "Variable ambiental '%s' ya está definida, ignorando valor '%s'"
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr "Faltan configuraciones locales predeterminadas. GRASS está corriendo con C local."
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid "A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr "Se ha solicitado un cambio de idioma. Intentando cambiar GRASS a '%s'"
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "Ruta '%s' no existe"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr "La ruta '%s' no accesable."
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr "Usted no es el dueño de '%s'."
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
-msgid "%(user)s is currently running GRASS in selected mapset (file %(file)s found). Concurrent use not allowed."
-msgstr "%(user)s está corriendo actualmente GRASS en Directorio de mapas seleccionado (archivo %(file)s encontrado). No está permitido el uso simultáneo."
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission for this operation). Have another look in the processor manager just to be sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid "%(user)s is currently running GRASS in selected mapset (file %(file)s found). Forcing to launch GRASS..."
+msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
@@ -8603,158 +8876,161 @@ msgstr ""
 "No ha sido posible accesar '%s' de manera correcta.\n"
 "Por favor notifique al personal de sistemas."
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Construyendo grafica..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr "Consola de comandos <%(sh)s> no soportada: %(env)s"
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 msgid "The SHELL variable is not set"
 msgstr "La variable SHELL no está definida"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not found. Exiting.\n"
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
-"Archivo de trabajo '%s' ha sido definido en la variable 'GRASS_BATCH_JOB' pero no ha sido encontrado. Saliendo.\n"
-"\n"
-"Use 'unset GRASS_BATCH_JOB' para deshabilitar procesamiento de trabajo por lotes."
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
-msgstr "Cambiar permiso de archivo a 'ejecutable' para '%s'"
+msgid "Change file permission to 'executable' for <%s>"
+msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
 msgstr "Ejecutando '%s'..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "La conexión ha fallado."
+
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
 msgstr "La ejecución de '%s' ha terminado."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr "La GUI de GRASS debería ser <%s>"
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "No es posible establecer el foco."
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr "Bienvenido a GRASS GIS %s"
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr "Página web de GRASS GIS:"
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr "Esta versión corriendo a través de:"
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr "La ayuda está disponible con el comando:"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr "Vea los términos de la licencia con:"
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr "Leer opciones para citar con:"
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr "Si lo necesita, reinicie la GUI con:"
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr "Iniciar GUI con:"
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr "En cuanto esté listo para salir escriba: "
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr "MÁSCARAS ráster 2D y 3D presentes"
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr "MÁSCARA ráster presente"
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr "MÁSCARA ráster 3D presente"
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
+#: ../lib/init/grass.py:1576
+msgid "Done."
+msgstr "Hecho."
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr "Salió de GRASS GIS, hasta pronto"
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr "Hecho."
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr "Limpiando archivos temporales..."
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr "Por favor instale el paquete de desarrolladores de GRASS GIS"
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Parámetro <%s> no soportado"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
-msgstr "Bandera -e se necesita también bandera -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
+msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, fuzzy, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument (`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 "No se puede iniciar GRASS. Usted puede:\n"
 " - Lanzar GRASS con '-gui' switch (`grass70 -gui`)\n"
 " - Crear manualmente un archivo GISRC (%s)\n"
 " - Lanzar GRASS con la ruta para localización/directorio de mapas (mapset) como un argumento (`grass70 /pruta/a/localización/directorio de mapas`)"
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr "Creando nueva Localización/Directorio de mapas..."
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr "Iniciando GRASS GIS..."
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid "<{}> requested, but not available. Run GRASS in text mode (-text) or install missing package (usually 'grass-gui')."
+msgstr "<{}> solicitado, pero no disponible. Correr GRASS en modo de texto (-text) o instalar el paquete faltante (usualmente 'grass-gui')."
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr "Lanzando GUI <%s> en el fondo, por favor espere..."
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Ha fallado el iniciar la consola de comandos '%s'"
@@ -9011,6 +9287,38 @@ msgstr ""
 msgid "%s: out of memory"
 msgstr "%s: sin memoria"
 
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "No se puede abrir el archivo '%s'"
+
+#~ msgid "Unable to check table. There is no temporal database connection defined for mapset <%(mapset)s>"
+#~ msgstr "No ha sido posible revisar la tabla. No está definida la conexión a la base de datos temporales para el Directorio de mapas <%(mapset)s>"
+
+#
+#, fuzzy
+#~ msgid "Unable to fetch one. There is no temporal database connection defined for mapset <%(mapset)s>"
+#~ msgstr "No se puede abrir el archivo de cabecera del mapa vectorial <%s>"
+
+#
+#, fuzzy
+#~ msgid "Unable to fetch all. There is no temporal database connection defined for mapset <%(mapset)s>"
+#~ msgstr "No se puede abrir el archivo de cabecera del mapa vectorial <%s>"
+
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "No ha sido posible encontrar archivo temporal nulo <%s>"
+
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "No ha sido posible abrir archivo temporal nulo <%s>"
+
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "ERROR: <%s> no es una Localización GRASS válida"
+
+#~ msgid "GRASS GUI should be <%s>"
+#~ msgstr "La GUI de GRASS debería ser <%s>"
+
+#, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
+
 #
 #, fuzzy
 #~ msgid "Unable to restore feature/offset %lu in vector map <%s>"
@@ -9067,210 +9375,156 @@ msgstr "%s: sin memoria"
 #~ msgstr "El nombre del mapa vectorial <%s> no es válido"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
-
-#, fuzzy
 #~ msgid "Removing empty 3D raster maps"
 #~ msgstr "Nombre del ráster de entrada"
 
 #, fuzzy
-#~ msgid "Removing empty raster maps"
-#~ msgstr "Nombre del mapa raster de entrada."
-
-#, fuzzy
 #~ msgid "Wrong type of input"
 #~ msgstr "No es posible cerrar el mapa de entrada."
 
 #, fuzzy
-#~ msgid "Turntable field < 1"
-#~ msgstr "Campo de arco < 1."
-
-#, fuzzy
-#~ msgid "Turntable column <%s> not found in table <%s>"
-#~ msgstr "No se ha encontrado la columna <%s> en la tabla <%s>."
-
-#
-#, fuzzy
-#~ msgid "Cannot add network arc for virtual node connection."
-#~ msgstr "No se ha podido añadir el arco a la red."
-
-#, fuzzy
-#~ msgid "Database record for turn with cat = %d in not found. (The turn was skipped."
-#~ msgstr "No se encuentra el registro para el nodo %d (cat = %d). (El coste se establece como 0)."
-
-#
-#, fuzzy
-#~ msgid "Cannot add network arc representing turn."
-#~ msgstr "No se ha podido añadir el arco a la red."
-
-#, fuzzy
-#~ msgid "Database record for line %d (cat = %d, forward/both direction(s)) not found (cost was set to 0)"
-#~ msgstr "No se ha encontrado el registro de la base de datos para la línea %d (cat =%d, hacia adelante / en una o ambas direcciones) (se omite la línea hacia adelante / en una o ambas direcciones)."
-
-#, fuzzy
-#~ msgid "Database record for line %d (cat = %d, backword direction) not found(cost was set to 0)"
-#~ msgstr "No se ha encontrado el registro de la línea %d (cat = %d, en la dirección hacia atrás) en la base de datos , (se omite la dirección de la línea)."
-
-#, fuzzy
-#~ msgid "Unable to create '%s': %s"
-#~ msgstr "No ha sido posible crear la tabla <%s>."
-
-#, fuzzy
-#~ msgid "Unable to copy '%s': %s"
-#~ msgstr "No se puede copiar la tabla <%s>."
-
-#, fuzzy
-#~ msgid "Unable to drop table <%s>"
-#~ msgstr "No se puede copiar la tabla <%s>."
-
-#, fuzzy
-#~ msgid ""
-#~ "Execution failed: %s (...)\n"
-#~ "Reason: %s"
-#~ msgstr "La conexión ha fallado."
+#~ msgid "Example: income < 1000 and population >= 10000"
+#~ msgstr "Ejemplo: salario < 1000 y habitantes >=10000."
 
-#, fuzzy
-#~ msgid "Unable to remove directory '%s': %s"
+#~ msgid "Unable to remove directory '%s'"
 #~ msgstr "No se puede eliminar el directorio '%s'."
 
-#
-#, fuzzy
-#~ msgid "Unable to read line of feature %i"
-#~ msgstr "No se puede leer el ajuste de desplazamiento de línea %ld"
-
-#, fuzzy
-#~ msgid "Unable to read area with id %i"
-#~ msgstr "No se puede leer el id %d del elemento."
-
-#, fuzzy
-#~ msgid "Unable to mogrify sql statement. "
-#~ msgstr "No se puede eliminar el elemento %s"
-
-#, fuzzy
-#~ msgid "Unable to check table. "
-#~ msgstr "No ha sido posible crear la tabla <%s>."
-
-#, fuzzy
-#~ msgid "Unable to execute sql statement. "
-#~ msgstr "No se puede ejecutar el comando."
-
-#, fuzzy
-#~ msgid "Unable to fetch one. "
-#~ msgstr "No se puede encontrar '%s'."
+#~ msgid "Unable to mogrify sql statement. There is no temporal database connection defined for mapset <%(mapset)s>"
+#~ msgstr "No ha sido posible modificar sentencia sql. No hay conexión a base de datos temporales definida para Directorio de mapas <%(mapset)s>"
 
-#, fuzzy
-#~ msgid "Unable to fetch all. "
-#~ msgstr "No se pueden presentar estadísticas del archivo <%s>."
+#~ msgid "Unable to execute sql statement. There is no temporal database connection defined for mapset <%(mapset)s>"
+#~ msgstr "No ha sido posible ejecutar la sentencia sql. No hay conexión a base de datos temporales definida para el  Directorio de mapas <%(mapset)s>"
 
-#, fuzzy
-#~ msgid "Unable to execute transaction. "
-#~ msgstr "No se puede ejecutar el comando."
+#~ msgid "Unable to execute transaction. There is no temporal database connection defined for mapset <%(mapset)s>"
+#~ msgstr "No ha sido posible ejecutar la transacción. No hay conexión definida a base de datos temporales para el Directorio de mapas <%(mapset)s>"
 
-#, fuzzy
-#~ msgid "Merging empty map lists"
-#~ msgstr "Nombre del mapa raster de entrada."
+#~ msgid "Raster map <%s@%s>: unsupported compression type %d"
+#~ msgstr "Mapa ráster <%s@%s>: tipo de compresión %d no soportada"
 
+#
 #, fuzzy
-#~ msgid "Space time datasets to merge must have the same temporal type"
-#~ msgstr "No se puede encontrar el mapa vectorial <%s> en <%s>."
+#~ msgid "Unable to read compressed null file for <%s@%s>"
+#~ msgstr "No se puede abrir el archivo de cabecera del vectorial <%s>"
 
-#, fuzzy
-#~ msgid "Invalid kind <%s>"
-#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
+#~ msgid "%s variable defined, %s ignored"
+#~ msgstr "%s variable definida, %s ignorado"
 
-#, fuzzy
-#~ msgid "Invalid size <%d>"
-#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
+#~ msgid "initial database (path to GIS data)"
+#~ msgstr "base de datos inicial (ruta a datos)"
 
-#, fuzzy
-#~ msgid "Invalid FP size <%d>"
-#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
+#~ msgid "initial location"
+#~ msgstr "Localización inicial"
 
-#, fuzzy
-#~ msgid "Invalid integer size <%d>"
-#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
+#~ msgid "initial mapset"
+#~ msgstr "Directorio de mapas inicial"
 
 #, fuzzy
-#~ msgid "Super quiet module output"
-#~ msgstr "Salida \"silenciosa\" del módulo."
+#~ msgid "fully qualified initial mapset directory"
+#~ msgstr "directorio de Directorio de mapas inicial totalmente calificado"
 
-#, fuzzy
-#~ msgid "Example: income < 1000 and population >= 10000"
-#~ msgstr "Ejemplo: salario < 1000 y habitantes >=10000."
+#~ msgid "select GUI (text, gui)"
+#~ msgstr "seleccionar GUI (texto, gui)"
 
-#, fuzzy
-#~ msgid "Request for unsupported compressor"
-#~ msgstr "El mapa raster <%s> no se encuentra en el directorio de mapas (mapset) <%s>."
+#~ msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#~ msgstr "ERROR: línea no válida en archivo RC: '%s' (%s)\n"
 
-#, fuzzy
-#~ msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
-#~ msgstr "Utilice cualquier identificador de opción (flag) --quiet (silencioso) o --verbose (detallado), pero no ambos, de ser este el caso se asume silencioso --quiet."
+#~ msgid ""
+#~ "It appears that the X Windows system is not active.\n"
+#~ "A graphical based user interface is not supported.\n"
+#~ "Switching to text based interface mode.\n"
+#~ "\n"
+#~ "Hit RETURN to continue"
+#~ msgstr ""
+#~ "Al parecer el sistema X de Windows no está activo.\n"
+#~ "No se puede soportar una interfaz gráfica de usuario.\n"
+#~ "Cambiando al modo de interfaz basada en texto.\n"
+#~ "\n"
+#~ "Presione RETURN para continuar"
 
-#, fuzzy
-#~ msgid "Fail of initial read of compressed null file [%s in %s]"
-#~ msgstr "Fallo en la lectura inicial del archivo comprimido [%s en %s]."
+#~ msgid "Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be created by '-c' switch."
+#~ msgstr "Directorio de mapas <%s> no existe en Localización GRASS <%s>. Se puede crear un nuevo Directorio de mapas con switch '-c'."
 
-#, fuzzy
-#~ msgid "Error writing compressed null data for row %d of <%s>"
-#~ msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+#~ msgid ""
+#~ "Error in GUI startup. If necessary, please report this error to the GRASS developers.\n"
+#~ "Switching to text mode now.\n"
+#~ "\n"
+#~ "Hit RETURN to continue..."
+#~ msgstr ""
+#~ "Error al arrancar GUI. Si es necesario, por favor reporte este error a los desarrolladores de GRASS.\n"
+#~ "Cambiando a modo de texto ahora.\n"
+#~ "\n"
+#~ "Presione RETURN para continuar..."
 
-#, fuzzy
-#~ msgid "Compression with %s is not supported"
-#~ msgstr "No se soportan objetos espaciales del tipo %d OGR"
+#~ msgid ""
+#~ "Received EXIT message from GUI.\n"
+#~ "GRASS is not started. Bye."
+#~ msgstr ""
+#~ "Se recibió mensaje de SALIDA de la GUI.\n"
+#~ "GRASS no se iniciará. Hasta pronto."
 
-#, fuzzy
-#~ msgid "Raster map <%s> does not exist in the current mapset (%s)"
-#~ msgstr "El mapa raster <%s> no se encuentra en el directorio de mapas de usuario actual (mapset). (%s)."
+#~ msgid ""
+#~ "Error reading data path information from g.gisenv.\n"
+#~ "GISDBASE=%(gisbase)s\n"
+#~ "LOCATION_NAME=%(location)s\n"
+#~ "MAPSET=%(mapset)s\n"
+#~ "\n"
+#~ "Check the <%s(file)> file."
+#~ msgstr ""
+#~ "Error al leer datos de información de ruta para g.gisenv.\n"
+#~ "BASESIG=%(gisbase)s\n"
+#~ "LOCATION_NAME=%(location)s\n"
+#~ "MAPSET=%(mapset)s\n"
+#~ "\n"
+#~ "Revisar el archivo <%s(file)> ."
 
-#, fuzzy
-#~ msgid "Error uncompressing raster data for row %d of <%s>"
-#~ msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+#~ msgid "Environmental variable '%s' already set, ignoring value '%s'"
+#~ msgstr "Variable ambiental '%s' ya está definida, ignorando valor '%s'"
 
-#, fuzzy
-#~ msgid "Error reading null data for row %d of <%s>"
-#~ msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+#~ msgid "A language override has been requested. Trying to switch GRASS into '%s'..."
+#~ msgstr "Se ha solicitado un cambio de idioma. Intentando cambiar GRASS a '%s'"
 
-#, fuzzy
-#~ msgid "Error uncompressing null data for row %d of <%s>"
-#~ msgstr "Error al leer el mapa comprimido <%s@%s>, fila %d"
+#~ msgid "%(user)s is currently running GRASS in selected mapset (file %(file)s found). Concurrent use not allowed."
+#~ msgstr "%(user)s está corriendo actualmente GRASS en Directorio de mapas seleccionado (archivo %(file)s encontrado). No está permitido el uso simultáneo."
 
-#, fuzzy
-#~ msgid "Both %s and %s are defined. %s will be ignored."
-#~ msgstr "%s variable definida, %s ignorado"
+#~ msgid "Unsupported shell <%(sh)s>: %(env)s"
+#~ msgstr "Consola de comandos <%(sh)s> no soportada: %(env)s"
 
-#, fuzzy
-#~ msgid "initial GRASS Location"
+#~ msgid ""
+#~ "Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not found. Exiting.\n"
+#~ "\n"
+#~ "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 #~ msgstr ""
+#~ "Archivo de trabajo '%s' ha sido definido en la variable 'GRASS_BATCH_JOB' pero no ha sido encontrado. Saliendo.\n"
 #~ "\n"
-#~ "Proyección no válida.\n"
+#~ "Use 'unset GRASS_BATCH_JOB' para deshabilitar procesamiento de trabajo por lotes."
 
-#, fuzzy
-#~ msgid "Executing <%s> ..."
-#~ msgstr "Ejecutando '%s'..."
+#~ msgid "Change file permission to 'executable' for '%s'"
+#~ msgstr "Cambiar permiso de archivo a 'ejecutable' para '%s'"
 
-#, fuzzy
-#~ msgid ""
-#~ "Execution of <{cmd}> failed:\n"
-#~ "{error}"
-#~ msgstr "La conexión ha fallado."
+#~ msgid "Executing '%s' ..."
+#~ msgstr "Ejecutando '%s'..."
 
-#, fuzzy
-#~ msgid "Execution of <%s> finished."
+#~ msgid "Execution of '%s' finished."
 #~ msgstr "La ejecución de '%s' ha terminado."
 
-#, fuzzy
-#~ msgid "Unable to close GUI. {}"
-#~ msgstr "No es posible establecer el foco."
+#~ msgid "Flag -e required also flag -c"
+#~ msgstr "Bandera -e se necesita también bandera -c"
 
-#, fuzzy
 #~ msgid ""
-#~ "Unable to start GRASS GIS. You have the choice to:\n"
-#~ " - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -gui`)\n"
-#~ " - Launch GRASS GIS directly with path to the location/mapset as an argument (`{cmd_name} /path/to/location/mapset`)\n"
-#~ " - Create manually the GISRC file ({gisrcrc})"
+#~ "Unable to start GRASS. You can:\n"
+#~ " - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
+#~ " - Create manually GISRC file (%s)\n"
+#~ " - Launch GRASS with path to the location/mapset as an argument (`grass70 /path/to/location/mapset`)"
 #~ msgstr ""
 #~ "No se puede iniciar GRASS. Usted puede:\n"
 #~ " - Lanzar GRASS con '-gui' switch (`grass70 -gui`)\n"
 #~ " - Crear manualmente un archivo GISRC (%s)\n"
 #~ " - Lanzar GRASS con la ruta para localización/directorio de mapas (mapset) como un argumento (`grass70 /pruta/a/localización/directorio de mapas`)"
+
+#, fuzzy
+#~ msgid "Invalid size {0}"
+#~ msgstr "El nombre del mapa vectorial <%s> no es válido"
+
+#, fuzzy
+#~ msgid "Removing empty raster maps"
+#~ msgstr "Nombre del mapa raster de entrada."
diff --git a/locale/po/grasslibs_fi.po b/locale/po/grasslibs_fi.po
index d149ed4..4e2b5cc 100644
--- a/locale/po/grasslibs_fi.po
+++ b/locale/po/grasslibs_fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_fi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-08-17 16:24+0300\n"
 "Last-Translator: Kari Salovaara <kari.salovaara at pp1.inet.fi>\n"
 "Language-Team: Finnish <grass-translations at lists.osgeo.org>\n"
@@ -39,10 +39,12 @@ msgstr "Ei voida käynnistää ajuria <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Ei voida avata tietokantaa <%s> ajurilla <%s>"
@@ -52,45 +54,45 @@ msgstr "Ei voida avata tietokantaa <%s> ajurilla <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "Ei saada listaa tauluista tietokannasta <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Taulu <%s> on jo olemassa tietokannassa ja päällekirjoitetaan"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Taulu <%s> on jo olemassa tietokannassa <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Sarake <%s> ei ole integer (kokonaisluku)"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Saraketta <%s> ei löydy"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Ei voida luoda taulua <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Tuntematon saraketyyppi (sarake <%s>)"
@@ -654,8 +656,8 @@ msgstr ""
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -665,8 +667,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -766,12 +768,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -815,16 +817,16 @@ msgstr ""
 msgid "Category index out of range"
 msgstr ""
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 msgid "Error writing out category index file"
 msgstr ""
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -888,8 +890,8 @@ msgstr ""
 msgid "Number of redundant holes: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr ""
@@ -986,36 +988,36 @@ msgstr ""
 msgid "Number of isles: -"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr ""
 
@@ -1080,9 +1082,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1130,8 +1134,10 @@ msgstr ""
 msgid "Unable to fetch data from table"
 msgstr ""
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr ""
@@ -1170,24 +1176,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr ""
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1206,7 +1212,7 @@ msgstr ""
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1233,12 +1239,12 @@ msgstr ""
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1246,7 +1252,7 @@ msgstr ""
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr ""
@@ -1334,7 +1340,7 @@ msgstr ""
 msgid "No connection defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, c-format
 msgid "Invalid offset (%ld)"
 msgstr ""
@@ -1349,7 +1355,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr ""
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 msgid "Unable to open PG file"
 msgstr ""
 
@@ -1558,7 +1564,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr ""
 
@@ -1572,17 +1578,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr ""
@@ -1665,26 +1671,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr ""
@@ -1784,7 +1807,8 @@ msgstr ""
 msgid "Unable to add database link for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr ""
@@ -1815,6 +1839,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Ei voida luoda taulua <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Ei voida luoda taulua <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Ei voida luoda taulua <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1823,7 +1862,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr ""
@@ -2095,7 +2134,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr ""
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2107,124 +2146,124 @@ msgstr ""
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 msgid "Using native format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 msgid "Unable to open OGR file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2467,29 +2506,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 msgid "Reading features..."
 msgstr ""
 
@@ -2517,71 +2556,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr ""
@@ -2682,14 +2656,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr ""
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2747,59 +2728,54 @@ msgstr ""
 msgid "Default database is not set"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 msgid "Unknown vector map format"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, c-format
-msgid "Invalid offset (%d)"
-msgstr ""
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, c-format
 msgid "Creating field <%s> failed"
@@ -2948,98 +2924,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
-msgstr ""
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
+msgstr "Ei voida käynnistää ajuria <%s>"
 
 #: ../lib/vector/Vlib/constraint.c:150
 msgid "Layer constraint ignored for non-native vector formats"
@@ -3120,6 +3096,143 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Saraketta <%s> ei löydy"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+msgid "Cannot add network arc for virtual node connection."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+msgid "Cannot add network arc representing turn."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr ""
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3231,7 +3344,7 @@ msgid "3D raster map <%s> not found"
 msgstr ""
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3336,7 +3449,7 @@ msgstr ""
 #: ../lib/pngdriver/write_png.c:39
 #, fuzzy
 msgid "Unable to write PNG"
-msgstr "Ei voida käynnistää ajuria <%s>"
+msgstr "Ei voida luoda taulua <%s>"
 
 #: ../lib/pngdriver/write_png.c:78
 #, fuzzy
@@ -3371,85 +3484,95 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Ei voida luoda taulua <%s>"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Ei voida luoda taulua <%s>"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 msgid "Null value detected"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 msgid "Error executing: Rast_set_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 msgid "Raster type not defined"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, python-format
 msgid "Index out of range: %r."
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr ""
@@ -3458,32 +3581,36 @@ msgstr ""
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, python-format
 msgid "Unable to export raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr ""
@@ -3522,7 +3649,7 @@ msgid "Creating a new space time %s dataset"
 msgstr ""
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3539,12 +3666,12 @@ msgid "Error computing map <%s>"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr ""
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3558,9 +3685,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3572,86 +3699,86 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 msgid "Error in computation process"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr ""
@@ -3681,130 +3808,130 @@ msgstr ""
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, python-format
 msgid "Extraction directory <%s> not found"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, python-format
 msgid "Unable to find init file <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, python-format
 msgid "Unable to find list file <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, python-format
 msgid "Unable to find projection file <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 msgid "Extracting data..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, python-format
 msgid "Unable to switch to location %s"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 msgid "Unsupported input format"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, python-format
 msgid "Key word %s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, python-format
 msgid "Create space time %s dataset."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3829,20 +3956,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3851,7 +3978,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3859,12 +3986,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, python-format
 msgid "Creating temporal database: %s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -3872,49 +3999,35 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
+#: ../lib/python/temporal/core.py:943
+msgid "Unable to mogrify sql statement. "
 msgstr ""
 
-#: ../lib/python/temporal/core.py:937
-#, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Ei voida luoda taulua <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Ei voida luoda taulua <%s>"
 
-#: ../lib/python/temporal/core.py:965
-#, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Ei voida luoda taulua <%s>"
 
-#: ../lib/python/temporal/core.py:976
-#, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Ei voida luoda taulua <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
+#: ../lib/python/temporal/core.py:1018
+msgid "Unable to execute transaction. "
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -3922,181 +4035,181 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, python-format
 msgid "Drop map register table: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 msgid "Error in register table request"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4104,19 +4217,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4175,56 +4288,63 @@ msgstr ""
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 msgid "Unable to read range file"
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, python-format
 msgid "Aggregating %s raster maps"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 msgid "Error occurred in r.series computation"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4387,28 +4507,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr ""
@@ -4436,187 +4556,227 @@ msgstr ""
 msgid "Unable to parse time string: %s"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 msgid "All input space time datasets must have the same temporal type."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 msgid "Wrong type of input "
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr ""
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4627,30 +4787,30 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr ""
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 msgid "unknown"
 msgstr ""
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr ""
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr ""
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4658,16 +4818,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, python-format
+msgid "Invalid kind <%s>"
+msgstr ""
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, python-format
+msgid "Invalid size <%d>"
+msgstr ""
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, python-format
+msgid "Invalid FP size <%d>"
+msgstr ""
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, python-format
+msgid "Invalid integer size <%d>"
+msgstr ""
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4675,101 +4870,101 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 msgid "Unable to list mapsets"
 msgstr ""
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr ""
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr ""
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr ""
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr ""
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 msgid "No data"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr ""
 
@@ -4866,7 +5061,7 @@ msgstr ""
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr ""
@@ -5355,12 +5550,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr ""
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr ""
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5572,7 +5767,7 @@ msgstr ""
 msgid "WARNING: "
 msgstr ""
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr ""
@@ -5687,7 +5882,7 @@ msgstr ""
 msgid "Duplicate compressed field"
 msgstr ""
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr ""
@@ -5811,22 +6006,22 @@ msgstr ""
 msgid "Variable '%s' not set"
 msgstr ""
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr ""
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr ""
@@ -5880,12 +6075,12 @@ msgstr ""
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr ""
@@ -5903,16 +6098,16 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr ""
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr ""
 
@@ -5924,6 +6119,10 @@ msgstr ""
 msgid "Default"
 msgstr ""
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6003,16 +6202,20 @@ msgstr ""
 msgid "Flags:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr ""
@@ -6266,195 +6469,204 @@ msgstr ""
 msgid "Category value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 msgid "Name of input directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 msgid "Coordinates"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 msgid "Name of color table"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 msgid "Name of saved region"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 msgid "Name of the input space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 msgid "Name of the input space time datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 msgid "Name of the output space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 msgid "Name of the input space time raster dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 msgid "Name of the input space time raster datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 msgid "Name of the output space time raster dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 msgid "Name of the input space time vector dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 msgid "Name of the input space time vector datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 msgid "Name of the output space time vector dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 msgid "Name of the input space time raster3d dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 msgid "Name of the input space time raster3d datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 msgid "Name of the output space time raster3d dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 msgid "Type of the input space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 msgid "Name of the input map"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 msgid "Name of the input maps"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 msgid "Type of the input map"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 msgid "The temporal type of the space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 msgid "Do not create attribute table"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6568,147 +6780,151 @@ msgstr ""
 msgid "no description"
 msgstr ""
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr ""
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr ""
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr ""
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr ""
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr ""
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
 "\tPresented as: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
 "\tLegal range: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
 "\tValid options: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
 "\t(%s)"
 msgstr ""
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
 "\tYou provided %d item(s): %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, c-format
 msgid "%s= is not a separator option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, c-format
 msgid "%s= is not a file option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, c-format
 msgid "Unable to open %s file <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, c-format
 msgid "Unable to create %s file <%s>"
 msgstr ""
@@ -7596,15 +7812,35 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr ""
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr ""
 
+#: ../lib/raster/format.c:176
+#, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr ""
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7635,51 +7871,46 @@ msgstr ""
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr ""
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:489
-#, c-format
-msgid "No null file for <%s>"
-msgstr ""
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, c-format
-msgid "Unable to find a temporary null file <%s>"
+msgid "No null file for <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, c-format
-msgid "Unable to open null file <%s>"
+msgid "Error writing compressed null data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr ""
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr ""
 
@@ -7769,22 +8000,22 @@ msgstr ""
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr ""
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr ""
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr ""
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr ""
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 
@@ -7869,103 +8100,103 @@ msgstr ""
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
+msgid "Compression with %s is not supported"
 msgstr ""
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr ""
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:347
-#, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr ""
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 msgid "Unable to create GDAL link"
 msgstr ""
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr ""
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr ""
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr ""
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr ""
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8005,24 +8236,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr ""
+
+#: ../lib/raster/get_row.c:227
 #, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr ""
+
+#: ../lib/raster/get_row.c:848
+#, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr ""
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr ""
@@ -8249,33 +8496,28 @@ msgstr ""
 msgid "Unsupported icon %d"
 msgstr ""
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, c-format
 msgid "Unknown display driver <%s>"
 msgstr ""
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, c-format
 msgid "Using display driver <%s>..."
 msgstr ""
 
-#: ../lib/display/r_raster.c:236
-#, c-format
-msgid "Unable to open file '%s'"
-msgstr ""
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8350,123 +8592,167 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr ""
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr ""
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr ""
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr ""
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr ""
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:350
+msgid "initial GRASS Location"
+msgstr ""
+
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr ""
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr ""
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8476,277 +8762,293 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
+msgstr ""
+
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
 msgstr ""
 
-#: ../lib/init/grass.py:598
+#: ../lib/init/grass.py:836
 #, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
 msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
-msgstr ""
-
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 msgid "Building user fontcap..."
 msgstr ""
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
+#: ../lib/init/grass.py:1289
+msgid "The SHELL variable is not set"
 msgstr ""
 
-#: ../lib/init/grass.py:967
-msgid "The SHELL variable is not set"
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
 msgstr ""
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
+#: ../lib/init/grass.py:1343
 #, python-format
-msgid "Executing '%s' ..."
+msgid "Executing <%s> ..."
 msgstr ""
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
+#: ../lib/init/grass.py:1350
+#, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
 msgstr ""
 
-#: ../lib/init/grass.py:996
+#: ../lib/init/grass.py:1353
 #, python-format
-msgid "GRASS GUI should be <%s>"
+msgid "Execution of <%s> finished."
 msgstr ""
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Ei voida luoda taulua <%s>"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
+#: ../lib/init/grass.py:1576
+msgid "Done."
 msgstr ""
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr ""
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr ""
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, python-format
 msgid "Parameter <%s> not supported"
 msgstr ""
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, python-format
 msgid "Failed to start shell '%s'"
 msgstr ""
diff --git a/locale/po/grasslibs_fr.po b/locale/po/grasslibs_fr.po
index 051dfcb..658b57a 100644
--- a/locale/po/grasslibs_fr.po
+++ b/locale/po/grasslibs_fr.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-12-13 20:38+0100\n"
 "Last-Translator: Sylvain Maillard <sylvain.maillard at gmail.com>\n"
 "Language-Team: French <grass-translations at lists.osgeo.org>\n"
@@ -43,10 +43,12 @@ msgstr "Impossible de démarrer le pilote <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Impossible d'ouvrir la base de données <%s> avec le driver <%s>"
@@ -56,45 +58,45 @@ msgstr "Impossible d'ouvrir la base de données <%s> avec le driver <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "Impossible d'obtenir la liste des tables dans la base de données <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "La table <%s> existe déjà dans la base de données et va être écrasée"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "La table <%s> existe déjà dans la base de données <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Impossible d'ouvrir le curseur de sélection: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "La colonne <%s> n'est pas de type entier"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Colonne <%s> non trouvée"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Impossible de créer la table <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Impossible de récupérer les données depuis la table <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Type de colonne inconnu (colonne <%s>)"
@@ -711,8 +713,8 @@ msgstr "Le type d'objet OGR %d n'est pas géré"
 msgid "Format definition is not correct: %s"
 msgstr "Définition du format incorrecte : %s"
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -722,8 +724,8 @@ msgstr "Définition du format incorrecte : %s"
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -831,12 +833,12 @@ msgstr ""
 "Le format d'index %d.%d n'est pas supporté par cette version. Essayez de "
 "reconstruire la topologie ou de mettre à jour GRASS."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Erreur GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr "Calcul de l'arbre couvrant de poids minimal ..."
 
@@ -881,19 +883,19 @@ msgstr "Index de couche en dehors des limites"
 msgid "Category index out of range"
 msgstr "Index de couche en dehors des limites"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr ""
 "Impossible d'ouvrir le fichier des catégories d'index pour la couche "
 "vectorielle <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Erreur lors de l'écriture du fichier d'index de catégorie <%s>."
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -961,8 +963,8 @@ msgstr "Nombre de contours incorrects : %d"
 msgid "Number of redundant holes: %d"
 msgstr "Nombre de trous redondants : %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Impossible d'ouvrir le fichier d'index pour la carte vecteur <%s>"
@@ -1059,16 +1061,16 @@ msgstr "Nombre de surfaces: -"
 msgid "Number of isles: -"
 msgstr "Nombre d'îles: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Impossible de créer le fichier topo pour la carte vecteur <%s>"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Erreur à l'écriture du fichier topo."
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
@@ -1076,24 +1078,24 @@ msgstr ""
 "Impossible de construire l'index spatial depuis la topologie, la couche "
 "vecteur n'est pas ouverte au niveau topologique 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr "%s n'est plus supporté"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 #, fuzzy
 msgid "Spatial index not available, can not be saved"
 msgstr "Index spatial non disponible, impossible d'enregistrer"
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr ""
 "Impossible de créer le fichier d'index spatial pour la couche vectorielle <"
 "%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Erreur à l'écriture du fichier d'index spatial."
 
@@ -1161,9 +1163,11 @@ msgstr "Type vectoriel inconnu."
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1213,8 +1217,10 @@ msgstr "Impossible de sélectionner les attributs pour cat = %d"
 msgid "Unable to fetch data from table"
 msgstr "Impossible de copier la table <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Colonne <%s> non trouvée dans la table <%s>"
@@ -1258,18 +1264,18 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Impossible d'ajouter un arc de réseau"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "erreur de dglShortestPath: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr ""
 "Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
@@ -1278,7 +1284,7 @@ msgstr ""
 "Le fichier coor de la carte vecteur <%s@%s> est plus grand qu'il ne devrait "
 "(%ld bytes en trop)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1300,7 +1306,7 @@ msgstr "Tentative de lire les points d'une surface non existante"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1327,12 +1333,12 @@ msgstr "Tentative de lire la topologie d'une île morte (%d)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1340,7 +1346,7 @@ msgstr "Tentative de lire la topologie d'une île morte (%d)"
 msgid "GRASS is not compiled with OGR support"
 msgstr "GRASS n'est pas compilé avec le support de OGR"
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr ""
@@ -1436,7 +1442,7 @@ msgstr "Impossible de ré-écrire l'entité %d"
 msgid "No connection defined"
 msgstr "Echec de la connexion."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Format invalide\n"
@@ -1452,7 +1458,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Impossible d'écrire la ligne matricielle %i"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Impossible d'ouvrir le fichier %s"
@@ -1683,7 +1689,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "Seul le format natif est pris en charge"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Tentative de lecture d'une ligne morte"
 
@@ -1698,17 +1704,17 @@ msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 "Vect_read_area_geos(): impossible de lire l'île d'id %d de la surface d'id %d"
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Impossible de lire le décalage de ligne %ld"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Tentative de lecture des points de la surface non existante d'id %d"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "Impossible de lire l'entité d'id %d"
@@ -1794,28 +1800,49 @@ msgstr "Entité OGR sans ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "Le type d'objet OGR %d n'est pas géré"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, fuzzy, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+"Impossible de trouver un point avec une catégorie unique pour le noeuf <%d>."
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, fuzzy, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+"Il existe plus de un point sur le noeud <%d> avec une catégorie unique dans "
+"le champ <%d>.\n"
+"La couche de catégories uniques ne semble pas valide."
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Mauvaise ligne de direction dans Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr "Couche OGR vide, rien à construire"
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, fuzzy, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr "La table <%s> n'a pas de clef primaire définie"
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 "La lecture aléatoire n'est pas supportée par OGR pour cette couche. "
 "Impossible de créer la topologie."
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr "Utilisation du format de données externe '%s' (entité de type '%s')"
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Impossible d'ouvrir le fichier topo en écriture <%s>"
@@ -1920,7 +1947,8 @@ msgstr "Impossible de copier la table <%s> pour la couche %d de <%s> à <%s>"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Impossible de lier la base de données à la carte vectorielle <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Impossible de copier la table <%s>"
@@ -1951,6 +1979,21 @@ msgstr "Supperposer : types ligne/contour non supportés par l'opérateur AND"
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Supperposer : type surface x surface non supporté par l'opérateur AND"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Impossible de créer <%s.%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Impossible de copier la table <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Impossible de copier la table <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr "Source de données OGR non définie"
@@ -1959,7 +2002,7 @@ msgstr "Source de données OGR non définie"
 msgid "OGR layer not defined"
 msgstr "Couche OGR non définie"
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Impossible d'ouvrir la source de données OGR '%s'"
@@ -2255,7 +2298,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Carte vecteur <%s> non trouvé dans le jeu de données courant"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2269,34 +2312,34 @@ msgstr ""
 "Les cartes vecteur temporaires ne sont accessibles que dans le jeu de cartes "
 "courant"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Une couche vectorielle qui n'est pas dans le jeu de données courant ne peut "
 "pas être ouverte pour une mise à jour"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Impossible d'ouvrir la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Impossible de lire le fichier d'en-tête pour la carte vecteur <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 "Impossible d'ouvrir le fichier topologique pour la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2305,101 +2348,101 @@ msgstr ""
 "Impossible d'ouvrir la carte vecteur <%s> au niveau %d. Essayez de "
 "reconstruire la topologie avec v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr ""
 "Construction de la topologie pour la couche OGR <%s> à partir dans la source "
 "'%s' ..."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Impossible d'ouvrir la couche vecteur <%s> au niveau %d"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr ""
 "Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr ""
 "Impossible de créer la carte vecteur : <%s> n'est pas dans le jeux de carte "
 "courant (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Impossible de créer la couche vecteur : <%s> n'est pas compatible SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Impossible de supprimer la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr ""
 "Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr "Utilisation du format OGR/%s"
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr "Utilisation du format PostGIS Topology"
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr "Utilisation du format PostGIS"
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 msgid "Using native format"
 msgstr "Utilisation du format natif"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Impossible d'ouvrir le fichier statistique <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, fuzzy, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr "%d inconnu (mise à jour de Vect_maptype_info)"
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "La taille du fichier 'coord' est différente de la valeur sauvegardée dans le "
 "fichier de topologie"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Veuillez reconstruire la topologie pour la couche vectorielle <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "Taille du fichier 'coord' différente de la valeur dans le fichier sidx"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 msgid "Unable to open OGR file"
 msgstr "Impossible d'ouvrir le fichier OGR"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr "Sortie OGR également détectée, utilisation de OGR"
 
@@ -2670,29 +2713,29 @@ msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 "Inconsistance dans la topologie : nombre de centroïdes %d (devrait être %d)"
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr "Accrochage des sommets passe 1 : sélection des points"
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr "Accrochage des sommets passe 2 : assignation des ancrages de sommets"
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr "Accrochage des sommets passe 3 : accrochage sur les points assignés"
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr "Sommets accrochés : %d"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr "Nouveau sommet : %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Construction du graphique ..."
@@ -2722,78 +2765,6 @@ msgstr "%s: la surface %d n'existe pas"
 msgid "Attempt to access dead area %d"
 msgstr "Tentative de supprimer une surface morte"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Construction du graphique ..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Impossible de construire le graphe de réseau"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "La colonne des coûts transférés n'est pas spécifiée"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Arc < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-"Type de données de la colonne <%s> non pris en charge (doit être numeric)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Enregistrement des arcs ... "
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"L'enregistrement de la base de données de la ligne %d (cat = %d, avant/"
-"toutes directions) introuvable (avant/toutes directions de la ligne sautée)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"L'enregistrement de la base de données de la ligne %d (cat = %d, direction "
-"arrière) introuvable (direction de la ligne sautée)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Impossible d'ajouter un arc de réseau"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Réglage des coûts du noeud ..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"L'enregistrement de la base de données pour le noeud %d (cat = %d) n'a pas "
-"été trouvé (coût fixé à 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Aplanir le graph ..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Le graphique a été construit"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Mauvaise ligne de direction dans Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "La ligne ne boucle pas"
@@ -2899,7 +2870,16 @@ msgstr "Données corrompues. %s."
 msgid "Corrupted data"
 msgstr "Données corrompues"
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr ""
+"Échec de l'exécution : %s\n"
+"Raison : %s"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, c-format
 msgid ""
 "Execution failed: %s\n"
@@ -2908,7 +2888,7 @@ msgstr ""
 "Échec de l'exécution : %s\n"
 "Raison : %s"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2980,26 +2960,26 @@ msgstr "Le pilote par défaut n'est pas défini"
 msgid "Default database is not set"
 msgstr "La base de données par défaut n'est pas définie"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "dblink demandé %d, nombre maximum du lien %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Erreur dans la règle à la ligne %d dans %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Impossible d'ouvrir le fichier %s"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Impossible d'ouvrir le pilote OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -3007,7 +2987,7 @@ msgstr ""
 "Tous les tests FID ont échoués. Ni 'FID' ni 'ogc_fid' ni 'ogr_fid' ni 'gid' "
 "ne sont disponibles dans la table OGR DB"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, fuzzy, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
@@ -3015,32 +2995,27 @@ msgstr ""
 "La table <%s> n'a pas de clef primaire définie. Impossible de définir le "
 "lien base de donnée."
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr "GRASS n'est pas compilé avec le support PostgreSQL"
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "Erreur inconnue"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr ""
 "Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 "Bug: tentative de mise à jour d'une couche qui n'est pas dans le jeu de "
 "cartes courant"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Offset invalide (%d)"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, c-format
 msgid "Creating field <%s> failed"
@@ -3191,98 +3166,98 @@ msgstr "Centroïde %d : surface %d invalide"
 msgid "Unable to delete item %d from spatial index"
 msgstr "Impossible de supprimer l'élément d'id %d de l'index spatial"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr ""
 "Impossible de créer le fichier d'en-tête pour la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Impossible d'ouvrir le fichier d'en-tête du vecteur <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Ligne corrompue dans l'en-tête: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Type vectoriel inconnu."
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Projection inconnue"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Le nom de la couche  vectorielle n'est pas compatible avec le SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Impossible de trouver la carte vecteur <%s> dans <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Impossible de supprimer la table <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Impossible de créer l'index de la table <%s>, clef <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr "Jeu de cartes invalide ignoré : %s"
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Nom de carte vecteur non valide <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Impossible d'ouvrir le fichier d'historique pour la carte vecteur <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Impossible de trouver la table <%s> liée à la couche vectorielle <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "La table <%s> liée à la carte vecteur <%s> n'existe pas "
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Impossible d'ouvrir le répertoire '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Impossible de supprimer le fichier <%s>"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Impossible de renommer le répertoire '%s' en '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Impossible de supprimer le répertoire '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3369,6 +3344,159 @@ msgstr "La structure de carte n'a jamais été initialisée"
 msgid "Map structure has been closed"
 msgstr "La structure de carte a été fermée"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Construction du graphique ..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Impossible de construire le graphe de réseau"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "La colonne des coûts transférés n'est pas spécifiée"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Arc < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Colonne <%s> non trouvée dans la table <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+"Type de données de la colonne <%s> non pris en charge (doit être numeric)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Réglage des coûts du noeud ..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"L'enregistrement de la base de données pour le noeud %d (cat = %d) n'a pas "
+"été trouvé (coût fixé à 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Impossible d'ajouter un arc de réseau"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"L'enregistrement de la base de données pour le noeud %d (cat = %d) n'a pas "
+"été trouvé (coût fixé à 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Impossible d'ajouter un arc de réseau"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Arc < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Enregistrement des arcs ... "
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"L'enregistrement de la base de données de la ligne %d (cat = %d, avant/"
+"toutes directions) introuvable (avant/toutes directions de la ligne sautée)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"L'enregistrement de la base de données de la ligne %d (cat = %d, direction "
+"arrière) introuvable (direction de la ligne sautée)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Aplanir le graph ..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Le graphique a été construit"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"L'enregistrement de la base de données de la ligne %d (cat = %d, avant/"
+"toutes directions) introuvable (avant/toutes directions de la ligne sautée)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"L'enregistrement de la base de données de la ligne %d (cat = %d, direction "
+"arrière) introuvable (direction de la ligne sautée)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Impossible d'ajouter un arc de réseau"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3485,7 +3613,7 @@ msgid "3D raster map <%s> not found"
 msgstr "La carte raster 3D <%s> n'a pas été trouvée"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3633,89 +3761,99 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ". Voir les erreus dans la sortie (d'erreurs)."
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr "Le vecteur ne contiens pas de points"
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr "Suppression de la table <%s> qui est attaché à la carte suivante : "
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 #, fuzzy
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr "Vous devez utiliser l'option force pour réellement le supprimer."
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Impossible de lire le décalage de ligne %ld"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Impossible de lire l'entité d'id %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr "Nom de carte {0} non valide"
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr "L'exécution du sous-module a échoué"
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Le type d'objet OGR %d n'est pas géré"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr "Erreur d'exacution : Rast_get_ith_cat"
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Nom de l'attribut colonne"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Problème de lecture du fichier de cellules raster"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr "La carte n'existe pas, impossible de l'ouvrir en mode 'r'"
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "L'objet OGR sans ID a été ignoré"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr "Type de mode {0} non supporté ('r', 'w','rw')"
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Index hors limites dans"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "La table <%s> liée à la carte vecteur <%s> n'existe pas "
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Le type de colonne n'est pas supporté"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Le type d'objet OGR %d n'est pas géré"
@@ -3724,33 +3862,37 @@ msgstr "Le type d'objet OGR %d n'est pas géré"
 msgid "The map is close!"
 msgstr "La carte est fermée !"
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr "Le pointeur self.c_mapinfo doit être initialisé correctement"
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Impossible de créer la couche vectorielle <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr ""
 "Impossible d'ouvrir le fichier topologique pour la couche vectorielle <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Impossible de créer la couche vectorielle <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Impossible de supprimer la couche vectorielle <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Impossible de créer la couche vectorielle <%s>"
@@ -3790,7 +3932,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "la couche matricielle demandée <%s> n'a pas été trouvée"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3807,12 +3949,12 @@ msgid "Error computing map <%s>"
 msgstr "Erreur à l'ouverture de la couche g3d <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr "Élément '%s' invalide"
@@ -3829,9 +3971,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3846,95 +3988,95 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Type vectoriel inconnu."
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 #, fuzzy
 msgid "You need to specify the base name of new created maps"
 msgstr "Vous devez spécifier le nom de base pour créer de nouvelles cartes"
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr "Application de la formule r.mapcalc : \"%s\""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr "Application de la formule r3.mapcalc : \"%s\""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  format : %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr ""
 "Fichier d'étiquette date&heure (timestamp) invalide pour la couche %s %s "
 "dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "erreur de syntaxe"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr ""
 "Fichier d'étiquette date&heure (timestamp) invalide pour la couche %s %s "
 "dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr ""
 "Fichier d'étiquette date&heure (timestamp) invalide pour la couche %s %s "
 "dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
@@ -3965,48 +4107,48 @@ msgstr "Impossible de créer la couche vectorielle <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Impossible d'ouvrir la couche vectorielle <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "La carte vecteur <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "La couche vectorielle <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 "Vérification de la validité du fichier d'entrée (taille : %0.1f MB). Ceci "
 "peut prendre un certain temps ..."
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Impossible d'ouvrir le fichier statistique <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Impossible d'ouvrir le fichier statistique <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Impossible d'ouvrir le fichier statistique <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Export des surfaces ..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr "Les informations de projection ne correspondent pas. Traitement ..."
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
@@ -4016,87 +4158,87 @@ msgstr ""
 "secteur courant :\n"
 "{diff}"
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr "Les informations de projection ne correspondent pas. Annulation."
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Impossible de supprimer le répertoire '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "impossible d'écrire l'historique pour [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "impossible d'ouvrir le fichier de datums : %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, fuzzy, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr "Mots clefs %(t)s, %(s)s ou %(n)s non trouvé dans le fichier init."
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 #, fuzzy
 msgid "Number of maps mismatch in init and list file."
 msgstr "Le nombre de cartes diffère entre les fichiers init et list."
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "impossible de trouver un fichier temporaire null %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "impossible de trouver un fichier temporaire null %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Impossible de trouver la carte vecteur <%s> dans <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Impossible d'ouvrir le fichier cidx <%s> en écriture"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Type(s) d'entité(s)"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Impossible de créer le fichier d'en-tête pour [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "pas de fichier %s disponible dans le jeu de données actuel\n"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "la couche matricielle demandée <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr "La bascule vers le secteur originel a échoué"
 
@@ -4123,20 +4265,20 @@ msgid ""
 "%s"
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "impossible d'ouvrir le fichier de datums : %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4145,7 +4287,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "impossible d'ouvrir le fichier de datums : %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4153,12 +4295,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "impossible d'ouvrir le fichier de datums : %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Impossible d'ouvrir la base de données %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4170,51 +4312,37 @@ msgstr ""
 "Merci d'utiliser t.connect pour définir un chemin de base temporelle en mode "
 "lecture-écriture"
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Impossible de supprimer le répertoire '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "impossible d'ouvrir le fichier de datums : %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Impossible de créer la table <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Impossible d'exécuter la commande"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr ""
-"Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "[%s] introuvable"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr ""
-"Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Impossible d'ouvrir le fichier statistique <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Impossible d'exécuter la commande"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4222,79 +4350,79 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Impossible d'exécuter la commande"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Impossible d'exécuter la commande"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Type vectoriel inconnu."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  format : %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Type(s) d'entité(s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Impossible d'écrire la règle de quantité pour la couche %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr "Le jeu de données temporel doit être du même type temporel"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Impossible de copier la table <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  format : %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -4304,18 +4432,18 @@ msgstr ""
 "base temporelle. Le jeu de cartes des données ne correspond pas au jeu de "
 "cartes courant"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 "Le renommage d'un jeu de données temporel n'est pas supporté pour postgreSQL."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
@@ -4325,24 +4453,24 @@ msgstr ""
 "base temporelle. Le jeu de cartes des données ne correspond pas au jeu de "
 "cartes courant"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Impossible de copier la table <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Impossible de copier la table <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "la couche matricielle demandée <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
@@ -4350,63 +4478,63 @@ msgstr ""
 "Seule une carte qui a été ajoutée dans la base temporelle peut être "
 "enregistrée dans le jeu de données temporel"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, fuzzy, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr "La carte <%(id)s> avec la couche %(l)s a un temps invalide"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "la couche matricielle demandée <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "la couche matricielle demandée <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "pas de fichier %s disponible dans le jeu de données actuel\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr "La carte <%s> est déjà enregistrée."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4417,19 +4545,19 @@ msgstr ""
 "de la base temporelle.  Le jeu de cartes des données ne correspond pas au "
 "jeu de cartes courant"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "pas de fichier %s disponible dans le jeu de données actuel\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "pas de fichier %s disponible dans le jeu de données actuel\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4492,58 +4620,65 @@ msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Impossible de lire le fichier d'en-tête"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Impossible de lire la couche vectorielle <%s%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Impossible de fermer la carte raster 3D <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Nom de la couche matricielle de base"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  format : %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Nom de la couche matricielle de base"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4717,28 +4852,28 @@ msgstr ""
 "Impossible d'ouvrir le fichier d'index de catégorie pour la couche "
 "vectorielle <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "La carte vecteur <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Impossible de lire la couche vectorielle <%s%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "La carte vecteur <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
@@ -4768,105 +4903,126 @@ msgstr "Le type d'objet OGR %d n'est pas géré"
 msgid "Unable to parse time string: %s"
 msgstr "Impossible d'ouvrir le fichier %s dans <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Nom de la couche matricielle d'entrée"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "La carte vecteur <%s> n'a pas été trouvée"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Impossible de fermer la carte en entrée"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr "Fusion de listes de cartes vides"
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+"La première liste de cartes est vide, pas de fusion possible. Retourne "
+"uniquement la dernière liste de cartes"
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+"La deuxième liste de cartes est vide, pas de fusion possible. Retourne "
+"uniquement la première liste de cartes"
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr "Liste de cartes vide"
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr "Entrée vide dans la liste de cartes, ceci ne devrait pas se produire"
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr "Le calcul de volume n'est pas supporté pour les projections LL"
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr "Le calcul de surface n'est pas supporté pour les projections LL"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
@@ -4875,14 +5031,14 @@ msgstr ""
 "Impossible de créer le fichier d'étiquettes date&heure (timestamp) pour la "
 "couche %s %s dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 "Fichier d'étiquette date&heure (timestamp) invalide pour la couche %s %s "
 "dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
@@ -4890,27 +5046,27 @@ msgstr ""
 "Fichier d'étiquette date&heure (timestamp) invalide pour la couche %s %s "
 "dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 "Fichier d'étiquette date&heure (timestamp) invalide pour la couche %s %s "
 "dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "L'Est doit être plus grand que l'Ouest"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "L'Est doit être plus grand que l'Ouest"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
@@ -4919,53 +5075,78 @@ msgstr ""
 "Impossible de créer le fichier d'étiquettes date&heure (timestamp) pour la "
 "couche %s %s dans le jeu de données (mapset) %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "L'Est doit être plus grand que l'Ouest"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/script/db.py:153
-#, python-format
-msgid ""
-"Programmer error: '%(sql)s', '%(filename)s', or '%(table)s' must be provided"
-msgstr ""
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr "input='-' doit être utilisé quand stdin est spécifié"
+
+#: ../lib/python/gunittest/gmodules.py:105
+#, fuzzy
+msgid "stdin must be string or buffer, not PIPE"
+msgstr "stdin doit être une chaîne ou un tampon, pas un PIPE"
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr "stdin doit être utilisé quand input='-'"
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr "argument stdout non autorisé, il peut être écrasé"
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr "argument stderr non autorisé, il peut être écrasé"
+
+#: ../lib/python/script/db.py:153
+#, python-format
+msgid ""
+"Programmer error: '%(sql)s', '%(filename)s', or '%(table)s' must be provided"
+msgstr ""
 "Erreur du programmeur : '%(sql)s', '%(filename)s', ou '%(table)s' doivent "
 "être fournis"
 
@@ -4974,32 +5155,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Impossible de copier la table <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "inconnu"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr "Élément '%(element)s' du paramètre non trouvé : '%(value)s'"
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s introuvable"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr "Le paramètre '%(name)s' (%(desc)s) est manquant."
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "obligatoire : %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -5011,16 +5192,51 @@ msgstr ""
 "\n"
 "Détails: %(det)s"
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Format invalide\n"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Format invalide\n"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Type de carte invalide <%d>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Format invalide\n"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -5028,70 +5244,70 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 "Mélange de types de valeurs. Va essayer de les comparer après une conversion "
 "en entier"
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr "Le type de l'élément devrait être \"cell\" et pas \"%s\""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr "Le type de l'élément devrait être \"raster\" et pas \"%s\""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Impossible de fermer la carte en entrée"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr "Le secteur <%s> existe déjà. Opération annulée."
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "La couche vectorielle <%s> existe déjà et va être écrasé"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Nom de fichier illégal.  Ne peut pas être '.' ou 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Nom de fichier illégal. Caractère <%c> interdit.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "Connexion à la base de données indéfinie pour la couche %d"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Erreur à l'ouverture de la couche g3d <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr "vector_db_select() a échoué"
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
@@ -5100,11 +5316,11 @@ msgstr ""
 "La sortie de w.what n'est pas un format JSON valide :\n"
 " {ret}"
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr "Une erreur s'est produite pendant l'exécution de r3.mapcalc"
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -5113,24 +5329,24 @@ msgstr ""
 "Impossible de supprimer la ligne, la couche '%s' n'est pas ouverte en mode "
 "'écriture'"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr "Une erreur s'est produite pendant l'exécution de r.mapcalc"
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "pas de donnée"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr "valeur"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr "étiquette"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Couleur"
@@ -5232,7 +5448,7 @@ msgstr "Impossible d'ouvrir le fichier <%s> en écriture"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "La carte vecteur <%s> n'a pas été trouvée"
@@ -5763,12 +5979,12 @@ msgstr "<%s> rien de renommé"
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "<%s> dans le jeu de données (mapset) <%s>"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "<%s> dans le jeu de données (mapset) <%s>"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr "%s copié"
@@ -6002,7 +6218,7 @@ msgstr ""
 msgid "WARNING: "
 msgstr "ATTENTION: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ERREUR :"
@@ -6138,7 +6354,7 @@ msgstr "multiples occurrences du champ de format"
 msgid "Duplicate compressed field"
 msgstr "multiples occurrences pour le champ compressed"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "La table <%s> liée à la carte vecteur <%s> n'existe pas "
@@ -6270,22 +6486,22 @@ msgstr "GISRC - variable sans valeur"
 msgid "Variable '%s' not set"
 msgstr "GISRC - variable sans valeur"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): mapset <%s> ne correspond pas à xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "G_spawn: impossible d'ouvrir le fichier %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: impossible d'ouvrir le fichier %s"
@@ -6340,12 +6556,12 @@ msgstr "es invalide: champ '%s' dans le fichier %s de <%s>"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Pas d'information sur l'ellipsoïde dans le fichier %s de <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Impossible de créer l'élément %s du jeu de cartes %s : %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Impossible d'accéder à l'élément %s du jeu de données (%s): %s"
@@ -6363,17 +6579,17 @@ msgid "SYNOPSIS"
 msgstr "SYNOPSIS"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Drapeaux"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 #, fuzzy
 msgid "Force launching GUI dialog"
 msgstr "Force le lancement de la boite de dialogue"
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Paramètres"
 
@@ -6385,6 +6601,10 @@ msgstr "Options"
 msgid "Default"
 msgstr "Défaut"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr "Erreur interne : option ou argument non trouvé"
@@ -6476,17 +6696,22 @@ msgstr "L'objet OGR sans ID a été ignoré"
 msgid "Flags:"
 msgstr "Drapeaux"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Sortie du module en mode silence"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Paramètres"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   par défaut: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   options: "
@@ -6781,222 +7006,231 @@ msgstr ""
 msgid "Category value"
 msgstr "Valeur de la catégorie"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Valeurs de catégorie"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Exemple: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Id d'entité"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Id d'entités"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Nom du fichier en entrée"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Nom du fichier en sortie"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Séparateur de champ"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 #, fuzzy
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr "Caractères spéciaux: nouvelle ligne, espace, virgule, tabulation"
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Couleur"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Soit un nom de couleur standard ou un triplet R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Soit une couleur standard de GRASS, un triplet R:G:B ou \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Nom du fichier en entrée"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr "Unités"
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr "Type(s) de données"
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr "Nom du jeu de cartes (par défaut : chemin de recherche courant)"
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr "'.' pour le jeu de cartes courant"
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr "Nom du Secteur"
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr "Nom du Secteur (pas son chemin)"
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr "Répertoire de la base du SIG GRASS"
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr "Défaut : chemin de la base SIG GRASS courante"
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Coordonnées invalides"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Nom de la couche vectorielle en entrée"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr "Chaîne représentant la valeur NULL"
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Allocation mémoire impossible\n"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Nom de(s) couche(s) matricielle(s) en entrée"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "pas de fichier %s disponible dans le jeu de données actuel\n"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Nom de la couche matricielle en sortie"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Nom de la couche matricielle d'élévation"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Nom de la couche matricielle d'élévation"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Nom de la couche matricielle en sortie"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Nom de(s) couche(s) vectorielle(s) en entrée"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Nom de(s) couche(s) vectorielle(s) en entrée"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Espace insuffisant dans le tableau vecteur"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Nom de la couche matricielle 3D en entrée"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Nom de la couche matricielle 3D en entrée"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Nom de la couche matricielle 3D en sortie"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "pas de fichier %s disponible dans le jeu de données actuel\n"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Nom de la couche matricielle d'entrée"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Nom de la couche matricielle d'entrée"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Impossible de fermer la carte en entrée"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "la couche matricielle demandée <%s> n'a pas été trouvée"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "WHERE conditions d'une clause SQL sans le mot-clef 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 #, fuzzy
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr "Exemple : start_time > '2001-01-01 12:30:00'"
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr "La méthode à utiliser pour échantillonner le jeu de donénes en entrée"
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Chargement des données de la table attributaire..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "Construction de la topologie ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -7116,84 +7350,91 @@ msgstr ""
 "\n"
 "Description :\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG dans les descriptions, l'option '%s' dans  <%s> n'existe pas"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG dans les descriptions, l'option '%s' dans  <%s> n'existe pas"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Utiliser le drapeau soit --quiet soit --verbose, pas les deux ; --verbose "
 "supposé."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 "Utiliser le drapeau soit --quiet soit --verbose, pas les deux ; --quiet "
 "supposé."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+"Utiliser le drapeau soit --quiet soit --verbose, pas les deux ; --quiet "
+"supposé."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Désolé, <%s> n'est pas une option valide\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ERREUR :"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "impossible de déterminer le nom du programme"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Désolé, <%c> n'est pas un drapeau valide\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Désolé, <%s=> est ambigu\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, fuzzy, c-format
 msgid "Option <%s=> matches"
 msgstr "Option <%s=> correspond"
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 "Merci de mettre à jour l'utilisation de <%s> : l'option <%s> a été renommée "
 "en <%s>"
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Désolé, <%s> n'est pas un paramètre valide\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> dans le jeu de données (mapset) <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr "L'option <%s> n'accepte pas les réponses multiples"
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7202,7 +7443,7 @@ msgstr ""
 "\n"
 "ERREUR : syntaxe de l'intervalle illégale pour le paramètre <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7211,14 +7452,14 @@ msgstr ""
 "\n"
 "ERREUR : valeur <%s> en dehors de l'intervalle pour le paramètre <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "ERREUR : Valeur manquante pour le paramètre <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7227,7 +7468,7 @@ msgstr ""
 "\n"
 "ERREUR : valeur <%s> en dehors de l'intervalle pour le paramètre <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7237,7 +7478,7 @@ msgstr ""
 "ERREUR : Le paramètre obligatoire <%s> n'a pas de valeur :\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7246,37 +7487,37 @@ msgstr ""
 "\n"
 "ERREUR : l'option <%s> doit être un multiple de %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Désolé, <%s> n'est pas une option valide\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Séparateur de champ"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Désolé, <%s> n'est pas une option valide\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Le type d'objet OGR %d n'est pas géré"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Impossible d'ouvrir le fichier %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Impossible de supprimer la table <%s>"
@@ -8257,11 +8498,16 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr "Le fichier ne contient pas d'information sur l'ellipsoïde"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Echec de la première lecture du fichier compressé [%s dans %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Echec de la première lecture du fichier compressé [%s dans %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
@@ -8269,6 +8515,21 @@ msgstr ""
 "Le système n'est pas initialisé. Le développeur a oublié d'appeler "
 "G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8303,55 +8564,52 @@ msgstr ""
 "erreur en lisant la couche compressée [%s] dans le jeu de données [%s], "
 "ligne %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr ""
 "erreur en lisant la couche compressée [%s] dans le jeu de données [%s], "
 "ligne %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr ""
 "erreur en lisant la couche compressée [%s] dans le jeu de données [%s], "
 "ligne %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Erreur lors de l'écriture du fichier d'index de catégorie <%s>."
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Impossible d'ouvrir le fichier %s"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "impossible de trouver un fichier temporaire null %s"
+msgid "No null file for <%s>"
+msgstr "Impossible d'ouvrir le fichier %s"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "Impossible d'ouvrir le fichier %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr ""
+"erreur en lisant la couche compressée [%s] dans le jeu de données [%s], "
+"ligne %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "erreur lors de l'écriture d'une ligne nulle %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s : couche [%s] non ouverte en écriture - demande ignorée"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s : descripteur de fichier non ouvert - demande ignorée"
@@ -8448,22 +8706,22 @@ msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Impossible de créer l'en-tête de fichier pour [%s dans %s]"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Format invalide\n"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Impossible d'ouvrir le fichier statistique <%s>"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Impossible de supprimer le fichier <%s>"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 "pas en mesure d'écrire des fichiers f_format pour des couches de cellules"
@@ -8555,12 +8813,12 @@ msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 "Carte raster <%s@%s>: format de champ invalide dans le fichier d'en-tête"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Carte raster <%s> non trouvée dans le jeux de données <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Le type d'objet OGR %d n'est pas géré"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8569,19 +8827,19 @@ msgstr ""
 "La carte raster <%s> est dans une projection différente de la région "
 "courante. Trouvé <%s>, devrait être <%s>."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 "La carte raster <%s> est dans une zone différente (%d) de la région courante "
 "(%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Carte raster <%s> : octets par cellule (%d) trop grand"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
@@ -8589,76 +8847,76 @@ msgstr ""
 "La carte raster <%s@%s> est un lien GDAL mais GRASS est compilé sans le "
 "support de GDAL"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Impossible d'ouvrir le fichier %s pour la carte raster <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Erreur de lecture du format pour <%s@%s>"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Impossible d'ouvrir le fichier %s"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 msgid "Unable to create GDAL link"
 msgstr "Impossible de créer un lien GDAL"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr "Type de carte invalide <%d>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "La carte raster <%s> n'est pas dans le jeux de carte courant (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> est un nom de fichier illégal"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr "Pas de fichier temporaire disponible : %s"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "La carte raster <%s> n'existe pas dans le jeux de cartes courant (%s)"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 "Rast_set_fp_type() : ne peut être appelé qu'avec FCELL_TYPE ou DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Carte raster <%s> non trouvée dans le jeux de données <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Impossible de trouve '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "type invalide: champ '%s' dans le fichier '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Type manquant : champ dans le fichier '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "La carte raster <%s> n'est pas xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8704,26 +8962,42 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr "Rast_make_random_colors : min (%d) > max (%d)"
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 "La lecture de la carte raster <%s@%s> demande la ligne %d en dehors de la "
 "région"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Erreur de lecture des données raster à la ligne %d de <%s>"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Erreur de lecture des données raster à la ligne %d de <%s>"
+
+#: ../lib/raster/get_row.c:227
 #, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Erreur de lecture des données raster avec GDAL à la ligne %d de <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Erreur de lecture de données nulles à la ligne %d de <%s>"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Erreur de lecture de données nulles à la ligne %d de <%s>"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Erreur de lecture de la ligne nulle %d de <%s>"
@@ -8957,33 +9231,28 @@ msgstr "inconnu"
 msgid "Unsupported icon %d"
 msgstr "Icône non supportée %d"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
-msgstr ""
+msgid "Both %s and %s are defined. %s will be ignored."
+msgstr "%s et %s sont tous les deux définis. %s sera ignoré."
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Pilote graphique <%s> inconnu"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, c-format
 msgid "Using display driver <%s>..."
 msgstr "Utilisation du pilote graphique <%s> ..."
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Impossible d'ouvrir le fichier %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -9061,114 +9330,157 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Impossible d'écrire le fichier de verrou %s (%s)"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr "ATTENTION"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr "Sortie ..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr ""
 "Utilisation\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr "afficher ce message d'aide"
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr "afficher les informations de version et quitter"
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr "créer la base de données, secteur ou jeu de cartes si non existants"
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 "quitter après la création du secteur ou du jeu de cartes. Uniquement avec "
 "l'argument -c"
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+"force la suppression de .gislock si il existe (utiliser avec précausion). "
+"Uniquement avec l'argument -text"
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr "utiliser l'interface texte (sauter l'écran de bienvenue)"
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr "et définir par défaut"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr "utiliser l'interface texte (afficher l'écran de bienvenue)"
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr "utiliser l'interface utilisateur graphique $DEFAULT_GUI"
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr "afficher les paramètres de configuration GRASS"
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
-msgstr "base de données initiale (chemin vers les données SIG)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
 
-#: ../lib/init/grass.py:220
-#, fuzzy
-msgid "initial location"
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
-"\n"
-"projection invalide\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
-msgstr "jeu de cartes initial"
+#: ../lib/init/grass.py:350
+msgid "initial GRASS Location"
+msgstr "Secteur GRASS initla"
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
+msgstr "Jeu de cartes GRASS initial"
+
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
+msgstr ""
+
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr "Variables d'environnement pour le démarrage"
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr "définir le navigateur web pour les pages d'aide"
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 "définir des chemins supplémentaires pour les modules GRASS locaux ou les "
 "scripts utilisateurs"
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 "définir un GISBASE supplémentaire pour les extentions GRASS installées "
 "localement"
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr "script shell à exécuter par lot"
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr "définir le nom du shell python pour supplanter 'python'"
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
@@ -9176,21 +9488,21 @@ msgstr ""
 "Impossible de créer le dossier temporaire <grass7-%(user)s-%(lock)s> ! "
 "Sortie."
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Interface <%s> non supportée par cette version"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr "Aucun navigateur web trouvé"
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -9206,45 +9518,52 @@ msgstr ""
 "\n"
 "Appuyez sur ENTRÉE pour continuer.\n"
 
-#: ../lib/init/grass.py:546
-#, fuzzy
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
-"Le système X Windows n'est pas actif.\n"
-"L'interface graphique n'est pas supportée.\n"
-"Bascule vers l'interface en mode texte.\n"
-"\n"
-"Appuyez sur ENTRÉE pour continuer"
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Désolé, <%s> n'est pas une option valide\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
-"Le jeu de cartes <%s> n'existepas dans le secteur GRASS <%s>. Il est "
-"possible de créer un nouveau jeu de cartes avec l'option '-c'."
+"Le jeu de cartes <{mapset}> n'existe pas dans le secteur GRASS <{loc}>. Il "
+"est possible de créer un nouveau jeu de cartes avec l'option '-c'."
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr "Échec de création du nouveau secteur. Le secteur <%s> existe déjà."
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr "Fichier WIND manquant réparé"
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
@@ -9253,13 +9572,7 @@ msgstr ""
 "correctement.\n"
 "Démarrage interactif nécessaire."
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
@@ -9268,31 +9581,22 @@ msgstr ""
 "Interface utilisateur spécifiée invalide - <%s>. Utilisez l'option --help "
 "pour voir les noms d'interfaces valides."
 
-#: ../lib/init/grass.py:698
-#, fuzzy
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
-"Erreur dans le démarrage de l'interface graphique. Si nécessaire, merci de "
-"rapporter cette erreur aux développeurs GRASS.\n"
-"Bascule vers le mode texte.\n"
-"\n"
-"Appuyez sur ENTRÉE pour continuer ..."
 
-#: ../lib/init/grass.py:708
-#, fuzzy
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
-"Reçu le massage EXIT de l'interface graphique.\n"
-"GRASS n'est pas démarré. Au revoir."
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
@@ -9301,64 +9605,70 @@ msgstr ""
 "graphique.\n"
 "Veuillez avertir les développeurs GRASS de cette erreur."
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
-"Erreur de lecture des informations de chemin des données depuis g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"Erreur de lecture des informations du chemin des données depuis g.gisenv.\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Vérifier le fichier <%s(file)>."
-
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
+"Vérifier le fichier <{file}>."
 
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 "Les paramètres de locale par défaut sont manquants. Utilisation de la locale "
 "C."
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-"Un forçage de langage a été demandé. Essai de basculer GRASS en '%s' ..."
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "Le chemin '%s' n'existe pas"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "Le chemin '%s' n'existe pas"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+"%(user)s utilise GRASS dans le jeu de cartes sélectionné (fichier %(file)s "
+"trouvé). Les utilisations simultanées ne sont pas permises.\n"
+"Vous pouvez forcer le démarrage de GRASS avec l'option -f (vous devez avoir "
+"les permissions pour cette opération). Vérifiez le gestionnaire de processus "
+"pour être sûr ..."
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
+"%(user)s utilise GRASS dans le jeu de cartes sélectionné (fichier %(file)s "
+"trouvé). Lancement de GRASS forcé ..."
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
@@ -9367,164 +9677,167 @@ msgstr ""
 "Impossible d'accéder correctement à '%s'.\n"
 "Merci d'en notifier votre administrateur système."
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Construction du graphique ..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr "Shell <%(sh)s> non supporté : %(env)s"
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 msgid "The SHELL variable is not set"
 msgstr "La variable SHELL n'est pas définie"
 
-#: ../lib/init/grass.py:978
-#, fuzzy, python-format
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr "Shell <{sh}> non supporté : {env_file}"
+
+#: ../lib/init/grass.py:1321
+#, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
-"Le fichier de tâche '%s' a été défini dans la variable 'GRASS_BATCH_JOB' "
-"mais n'est pas trouvé. Sortie.\n"
-"\n"
-"Utilisez 'ne pas définir GRASS_BATCH_JOB' pour désactiver le traitement des "
-"tâches par lot."
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
-msgstr "Changer les permissions du fichier '%s' pour 'exécutable'"
+msgid "Change file permission to 'executable' for <%s>"
+msgstr ""
 
-#: ../lib/init/grass.py:985
+#: ../lib/init/grass.py:1343
 #, python-format
-msgid "Executing '%s' ..."
-msgstr "Exécution de '%s' ..."
+msgid "Executing <%s> ..."
+msgstr "Exécution de <%s> ..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr "Exécution de '%s' terminée."
+#: ../lib/init/grass.py:1350
+#, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr ""
+"La commande <{cmd}> a échoué :\n"
+"{error}"
 
-#: ../lib/init/grass.py:996
+#: ../lib/init/grass.py:1353
 #, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr "L'innterface graphique de GRASS devrait être <%s>"
+msgid "Execution of <%s> finished."
+msgstr "Exécution de <%s> terminée."
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Impossible de fermer le curseur %s"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr "Bienvenue dans le SIG GRASS %s"
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr "Page d'accueil du SIG GRASS :"
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr "Cette version fonctionne avec :"
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr "L'aide est disponible par la commande :"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr "Voir les termes de la licence avec :"
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 #, fuzzy
 msgid "See citation options with:"
 msgstr "Voir les termes de la licence avec :"
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr "Si requis, redémarrer l'interface graphique avec :"
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr "Démarrer l'interface graphique avec :"
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr "MASKs raster 2D et 3D présents"
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr "MASK raster présent"
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr "MASK raster 3D présent"
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-"La tâche par lot '%s' (définie dans la variable GRASS_BATCH_JOB) a été "
-"exécutée."
+#: ../lib/init/grass.py:1576
+msgid "Done."
+msgstr "Terminé."
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr ""
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr "Terminé."
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr "Nettoyage des fichiers temporaires ..."
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Paramètres <%s> on supporté"
 
-#: ../lib/init/grass.py:1382
-#, fuzzy
-msgid "Flag -e required also flag -c"
-msgstr "L'argument -e requiert également -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
+msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr "Création d'un nouveau secteur/jeu de carte du SIG GRASS"
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr "Démarrage du SIG GRASS ..."
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, fuzzy, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 "Démarrage de l'interface graphique <%s> en tâche de fond, merci de "
 "patienter ..."
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Échec au lancement du shell '%s'"
@@ -9821,249 +10134,74 @@ msgstr "%s : dépassement de mémoire"
 #~ msgstr "Vous n'avez pas la permission d'accéder au jeu de cartes <%s>"
 
 #, fuzzy
-#~ msgid "Unable to find point with defined unique category for node <%d>."
-#~ msgstr ""
-#~ "Impossible de trouver un point avec une catégorie unique pour le noeuf <"
-#~ "%d>."
-
-#, fuzzy
-#~ msgid ""
-#~ "There exists more than one point on node <%d> with unique category in "
-#~ "field  <%d>.\n"
-#~ "The unique category layer may not be valid."
-#~ msgstr ""
-#~ "Il existe plus de un point sur le noeud <%d> avec une catégorie unique "
-#~ "dans le champ <%d>.\n"
-#~ "La couche de catégories uniques ne semble pas valide."
-
-#, fuzzy
-#~ msgid "Unable to create '%s': %s"
-#~ msgstr "Impossible de créer <%s.%s>"
-
-#, fuzzy
-#~ msgid "Unable to copy '%s': %s"
-#~ msgstr "Impossible de copier la table <%s>"
-
-#, fuzzy
-#~ msgid "Unable to drop table <%s>"
-#~ msgstr "Impossible de copier la table <%s>"
-
-#, fuzzy
 #~ msgid ""
-#~ "Execution failed: %s (...)\n"
-#~ "Reason: %s"
-#~ msgstr ""
-#~ "Échec de l'exécution : %s\n"
-#~ "Raison : %s"
-
-#, fuzzy
-#~ msgid "Unable to remove directory '%s': %s"
-#~ msgstr "Impossible de supprimer le répertoire '%s'"
-
-#, fuzzy
-#~ msgid "Turntable field < 1"
-#~ msgstr "Arc < 1"
-
-#, fuzzy
-#~ msgid "Turntable column <%s> not found in table <%s>"
-#~ msgstr "Colonne <%s> non trouvée dans la table <%s>"
-
-#, fuzzy
-#~ msgid "Cannot add network arc for virtual node connection."
-#~ msgstr "Impossible d'ajouter un arc de réseau"
-
-#, fuzzy
-#~ msgid ""
-#~ "Database record for turn with cat = %d in not found. (The turn was "
-#~ "skipped."
-#~ msgstr ""
-#~ "L'enregistrement de la base de données pour le noeud %d (cat = %d) n'a "
-#~ "pas été trouvé (coût fixé à 0)"
-
-#, fuzzy
-#~ msgid "Cannot add network arc representing turn."
-#~ msgstr "Impossible d'ajouter un arc de réseau"
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "impossible d'ouvrir le fichier de datums : %s"
 
 #, fuzzy
 #~ msgid ""
-#~ "Database record for line %d (cat = %d, forward/both direction(s)) not "
-#~ "found (cost was set to 0)"
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
 #~ msgstr ""
-#~ "L'enregistrement de la base de données de la ligne %d (cat = %d, avant/"
-#~ "toutes directions) introuvable (avant/toutes directions de la ligne "
-#~ "sautée)"
+#~ "Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <"
+#~ "%s>"
 
 #, fuzzy
 #~ msgid ""
-#~ "Database record for line %d (cat = %d, backword direction) not found(cost "
-#~ "was set to 0)"
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
 #~ msgstr ""
-#~ "L'enregistrement de la base de données de la ligne %d (cat = %d, "
-#~ "direction arrière) introuvable (direction de la ligne sautée)"
+#~ "Impossible d'ouvrir le fichier d'historique pour la couche vectorielle <"
+#~ "%s>"
 
 #, fuzzy
-#~ msgid "Unable to read line of feature %i"
-#~ msgstr "Impossible de lire le décalage de ligne %ld"
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "impossible de trouver un fichier temporaire null %s"
 
 #, fuzzy
-#~ msgid "Unable to read area with id %i"
-#~ msgstr "Impossible de lire l'entité d'id %d"
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "Impossible d'ouvrir le fichier %s"
 
-#~ msgid "The self.c_mapinfo pointer must be correctly initiated"
-#~ msgstr "Le pointeur self.c_mapinfo doit être initialisé correctement"
+#~ msgid "initial database (path to GIS data)"
+#~ msgstr "base de données initiale (chemin vers les données SIG)"
 
 #, fuzzy
-#~ msgid "Unable to mogrify sql statement. "
-#~ msgstr "Impossible de supprimer le répertoire '%s'"
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Désolé, <%s> n'est pas une option valide\n"
 
 #, fuzzy
-#~ msgid "Unable to check table. "
-#~ msgstr "Impossible de créer la table <%s>"
-
-#, fuzzy
-#~ msgid "Unable to execute sql statement. "
-#~ msgstr "Impossible d'exécuter la commande"
-
-#, fuzzy
-#~ msgid "Unable to fetch one. "
-#~ msgstr "[%s] introuvable"
-
-#, fuzzy
-#~ msgid "Unable to fetch all. "
-#~ msgstr "Impossible d'ouvrir le fichier statistique <%s>"
-
-#, fuzzy
-#~ msgid "Unable to execute transaction. "
-#~ msgstr "Impossible d'exécuter la commande"
-
-#~ msgid "Merging empty map lists"
-#~ msgstr "Fusion de listes de cartes vides"
-
-#~ msgid "First Map list is empty, can't merge it. Return only last map list"
-#~ msgstr ""
-#~ "La première liste de cartes est vide, pas de fusion possible. Retourne "
-#~ "uniquement la dernière liste de cartes"
-
-#~ msgid "Second Map list is empty, can't merge it. Return only first map list"
-#~ msgstr ""
-#~ "La deuxième liste de cartes est vide, pas de fusion possible. Retourne "
-#~ "uniquement la première liste de cartes"
-
-#, fuzzy
-#~ msgid "Space time datasets to merge must have the same temporal type"
-#~ msgstr "Impossible de copier la couche vectorielle <%s> vers <%s>"
-
-#~ msgid "input='-' must be used when stdin is specified"
-#~ msgstr "input='-' doit être utilisé quand stdin est spécifié"
-
-#, fuzzy
-#~ msgid "stdin must be string or buffer, not PIPE"
-#~ msgstr "stdin doit être une chaîne ou un tampon, pas un PIPE"
-
-#~ msgid "stdin must be used when input='-'"
-#~ msgstr "stdin doit être utilisé quand input='-'"
-
-#~ msgid "stdout argument not allowed, it could be overridden"
-#~ msgstr "argument stdout non autorisé, il peut être écrasé"
-
-#~ msgid "stderr argument not allowed, it could be overridden"
-#~ msgstr "argument stderr non autorisé, il peut être écrasé"
-
-#, fuzzy
-#~ msgid "Fail of initial read of compressed null file [%s in %s]"
-#~ msgstr "Echec de la première lecture du fichier compressé [%s dans %s]"
-
-#, fuzzy
-#~ msgid "Error writing compressed null data for row %d of <%s>"
-#~ msgstr ""
-#~ "erreur en lisant la couche compressée [%s] dans le jeu de données [%s], "
-#~ "ligne %d"
-
-#~ msgid "Raster map <%s> does not exist in the current mapset (%s)"
-#~ msgstr ""
-#~ "La carte raster <%s> n'existe pas dans le jeux de cartes courant (%s)"
-
-#~ msgid "Error reading null data for row %d of <%s>"
-#~ msgstr "Erreur de lecture de données nulles à la ligne %d de <%s>"
-
-#~ msgid "Both %s and %s are defined. %s will be ignored."
-#~ msgstr "%s et %s sont tous les deux définis. %s sera ignoré."
-
-#~ msgid ""
-#~ "force removal of .gislock if exists (use with care!). Only with -text flag"
-#~ msgstr ""
-#~ "force la suppression de .gislock si il existe (utiliser avec précausion). "
-#~ "Uniquement avec l'argument -text"
-
-#~ msgid "initial GRASS Location"
-#~ msgstr "Secteur GRASS initla"
-
-#~ msgid "initial GRASS Mapset"
-#~ msgstr "Jeu de cartes GRASS initial"
-
-#~ msgid ""
-#~ "Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset "
-#~ "can be created by '-c' switch."
-#~ msgstr ""
-#~ "Le jeu de cartes <{mapset}> n'existe pas dans le secteur GRASS <{loc}>. "
-#~ "Il est possible de créer un nouveau jeu de cartes avec l'option '-c'."
-
 #~ msgid ""
-#~ "Error reading data path information from g.gisenv.\n"
-#~ "GISDBASE={gisbase}\n"
-#~ "LOCATION_NAME={location}\n"
-#~ "MAPSET={mapset}\n"
+#~ "Error in GUI startup. If necessary, please report this error to the GRASS "
+#~ "developers.\n"
+#~ "Switching to text mode now.\n"
 #~ "\n"
-#~ "Check the <{file}> file."
+#~ "Hit RETURN to continue..."
 #~ msgstr ""
-#~ "Erreur de lecture des informations du chemin des données depuis g."
-#~ "gisenv.\n"
-#~ "GISDBASE={gisbase}\n"
-#~ "LOCATION_NAME={location}\n"
-#~ "MAPSET={mapset}\n"
+#~ "Erreur dans le démarrage de l'interface graphique. Si nécessaire, merci "
+#~ "de rapporter cette erreur aux développeurs GRASS.\n"
+#~ "Bascule vers le mode texte.\n"
 #~ "\n"
-#~ "Vérifier le fichier <{file}>."
-
-#~ msgid ""
-#~ "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-#~ "found). Concurrent use not allowed.\n"
-#~ "You can force launching GRASS using -f flag (note that you need "
-#~ "permission for this operation). Have another look in the processor "
-#~ "manager just to be sure..."
-#~ msgstr ""
-#~ "%(user)s utilise GRASS dans le jeu de cartes sélectionné (fichier "
-#~ "%(file)s trouvé). Les utilisations simultanées ne sont pas permises.\n"
-#~ "Vous pouvez forcer le démarrage de GRASS avec l'option -f (vous devez "
-#~ "avoir les permissions pour cette opération). Vérifiez le gestionnaire de "
-#~ "processus pour être sûr ..."
-
-#~ msgid ""
-#~ "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-#~ "found). Forcing to launch GRASS..."
-#~ msgstr ""
-#~ "%(user)s utilise GRASS dans le jeu de cartes sélectionné (fichier "
-#~ "%(file)s trouvé). Lancement de GRASS forcé ..."
-
-#~ msgid "Unsupported shell <{sh}>: {env_file}"
-#~ msgstr "Shell <{sh}> non supporté : {env_file}"
-
-#~ msgid "Executing <%s> ..."
-#~ msgstr "Exécution de <%s> ..."
+#~ "Appuyez sur ENTRÉE pour continuer ..."
 
 #~ msgid ""
-#~ "Execution of <{cmd}> failed:\n"
-#~ "{error}"
+#~ "A language override has been requested. Trying to switch GRASS into "
+#~ "'%s'..."
 #~ msgstr ""
-#~ "La commande <{cmd}> a échoué :\n"
-#~ "{error}"
-
-#~ msgid "Execution of <%s> finished."
-#~ msgstr "Exécution de <%s> terminée."
+#~ "Un forçage de langage a été demandé. Essai de basculer GRASS en '%s' ..."
 
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "ERREUR: option <%s>: <%s> existe.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Offset invalide (%d)"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Impossible d'ouvrir le fichier %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "pressez RETOUR pour continuer -->"
 
@@ -10086,10 +10224,6 @@ msgstr "%s : dépassement de mémoire"
 #~ msgid "Invalid type {0}"
 #~ msgstr "Format invalide\n"
 
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Format invalide\n"
-
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Attributs pour la catégorie %d non trouvés"
 
@@ -10127,6 +10261,97 @@ msgstr "%s : dépassement de mémoire"
 #~ "erreur en lisant la couche compressée [%s] dans le jeu de données [%s], "
 #~ "ligne %d"
 
+#, fuzzy
+#~ msgid "initial location"
+#~ msgstr ""
+#~ "\n"
+#~ "projection invalide\n"
+
+#~ msgid "initial mapset"
+#~ msgstr "jeu de cartes initial"
+
+#, fuzzy
+#~ msgid ""
+#~ "It appears that the X Windows system is not active.\n"
+#~ "A graphical based user interface is not supported.\n"
+#~ "Switching to text based interface mode.\n"
+#~ "\n"
+#~ "Hit RETURN to continue"
+#~ msgstr ""
+#~ "Le système X Windows n'est pas actif.\n"
+#~ "L'interface graphique n'est pas supportée.\n"
+#~ "Bascule vers l'interface en mode texte.\n"
+#~ "\n"
+#~ "Appuyez sur ENTRÉE pour continuer"
+
+#~ msgid ""
+#~ "Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
+#~ "created by '-c' switch."
+#~ msgstr ""
+#~ "Le jeu de cartes <%s> n'existepas dans le secteur GRASS <%s>. Il est "
+#~ "possible de créer un nouveau jeu de cartes avec l'option '-c'."
+
+#, fuzzy
+#~ msgid ""
+#~ "Received EXIT message from GUI.\n"
+#~ "GRASS is not started. Bye."
+#~ msgstr ""
+#~ "Reçu le massage EXIT de l'interface graphique.\n"
+#~ "GRASS n'est pas démarré. Au revoir."
+
+#~ msgid ""
+#~ "Error reading data path information from g.gisenv.\n"
+#~ "GISDBASE=%(gisbase)s\n"
+#~ "LOCATION_NAME=%(location)s\n"
+#~ "MAPSET=%(mapset)s\n"
+#~ "\n"
+#~ "Check the <%s(file)> file."
+#~ msgstr ""
+#~ "Erreur de lecture des informations de chemin des données depuis g."
+#~ "gisenv.\n"
+#~ "GISDBASE=%(gisbase)s\n"
+#~ "LOCATION_NAME=%(location)s\n"
+#~ "MAPSET=%(mapset)s\n"
+#~ "\n"
+#~ "Vérifier le fichier <%s(file)>."
+
+#~ msgid "Unsupported shell <%(sh)s>: %(env)s"
+#~ msgstr "Shell <%(sh)s> non supporté : %(env)s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+#~ "found. Exiting.\n"
+#~ "\n"
+#~ "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
+#~ msgstr ""
+#~ "Le fichier de tâche '%s' a été défini dans la variable 'GRASS_BATCH_JOB' "
+#~ "mais n'est pas trouvé. Sortie.\n"
+#~ "\n"
+#~ "Utilisez 'ne pas définir GRASS_BATCH_JOB' pour désactiver le traitement "
+#~ "des tâches par lot."
+
+#~ msgid "Change file permission to 'executable' for '%s'"
+#~ msgstr "Changer les permissions du fichier '%s' pour 'exécutable'"
+
+#~ msgid "Executing '%s' ..."
+#~ msgstr "Exécution de '%s' ..."
+
+#~ msgid "Execution of '%s' finished."
+#~ msgstr "Exécution de '%s' terminée."
+
+#~ msgid "GRASS GUI should be <%s>"
+#~ msgstr "L'innterface graphique de GRASS devrait être <%s>"
+
+#~ msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
+#~ msgstr ""
+#~ "La tâche par lot '%s' (définie dans la variable GRASS_BATCH_JOB) a été "
+#~ "exécutée."
+
+#, fuzzy
+#~ msgid "Flag -e required also flag -c"
+#~ msgstr "L'argument -e requiert également -c"
+
 #~ msgid ""
 #~ "Unable to start GRASS GIS. You have the choice to:\n"
 #~ " - Launch the GRASS GIS interface with the '-gui' switch (`%s -gui`)\n"
@@ -10139,3 +10364,6 @@ msgstr "%s : dépassement de mémoire"
 #~ "- Démarrer le SIG GRASS directement avec le chemin du secteur/jeu de "
 #~ "cartes en argument (`%s /chemin/vers/secteur/jeu/de/cartes`)\n"
 #~ "- Créer manuellement le fichier GISRC (%s)"
+
+#~ msgid "Unable to remove directory '%s'"
+#~ msgstr "Impossible de supprimer le répertoire '%s'"
diff --git a/locale/po/grasslibs_it.po b/locale/po/grasslibs_it.po
index 71fbdb9..87b2c75 100644
--- a/locale/po/grasslibs_it.po
+++ b/locale/po/grasslibs_it.po
@@ -14,7 +14,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_it\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-02-26 21:52+0100\n"
 "Last-Translator: Carlo Cormio <carlo.cormio3 at unibo.it>\n"
 "Language-Team: Italian <grass-translations at lists.osgeo.org>\n"
@@ -46,10 +46,12 @@ msgstr "Impossibile avviare il driver <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Impossibile aprire il database <%s> dal driver <%s>"
@@ -59,45 +61,45 @@ msgstr "Impossibile aprire il database <%s> dal driver <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "Impossibile ottenere la lista delle tabelle nel database <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Il vettoriale '%s' è già presente e sarà sovrascritto"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "La tabella <%s> esiste già nel database <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Impossibile aprire il cursore di selezione: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Colonna <%s> non è intero"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Colonna <%s> non trovata"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Impossibile creare la tabella <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Impossibile ottenere i dati dalla tabella <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Tipo della colonna sconosciuto (colonna <%s>"
@@ -711,8 +713,8 @@ msgstr "Tipo %d di feature OGR non supportato"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -722,8 +724,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -831,12 +833,12 @@ msgstr ""
 "Versione %d.%d del formato dell'indice delle features non è supportata da "
 "questa release. Ricostruire la topologia o aggiornare GRASS."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Errore GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr "Calcolando lo spanning tree minimo..."
 
@@ -881,17 +883,17 @@ msgstr "Indice del layer fuori dal range"
 msgid "Category index out of range"
 msgstr "Indice del layer fuori dal range"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Impossibile aprire il degli indici di categoria per il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Errore nella scrittura del file di indici di categoria <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Impossibile aprire il degli indici di categoria per il vettoriale <%s>"
@@ -955,8 +957,8 @@ msgstr "Ulteriori controlli saltati a causa di contorni non corretti"
 msgid "Number of redundant holes: %d"
 msgstr "Numero di cavità ridondanti: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
@@ -1053,17 +1055,17 @@ msgstr "Numero di aree: -"
 msgid "Number of isles: -"
 msgstr "Numero di isole: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr ""
 "Non riesco a creare il file della topologia pe rla mappa vettoriale <%s>"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Errore nella scrittura del file di topologia"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
@@ -1071,22 +1073,22 @@ msgstr ""
 "Non riesco a creare l'indice spaziale dalla topologia, la mappa vettoriale "
 "'%s' non è aperta al livello topologico 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr "%s non è più supportato"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr ""
 "Non riesco a creare il file dell'indice spaziale per la mappa vettoriale '%s'"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Errore nella scrittura del file dell'indice spaziale"
 
@@ -1152,9 +1154,11 @@ msgstr "Tipo di interpolazione sconosciuta"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1203,8 +1207,10 @@ msgstr "Non è possibile selezionare attributi"
 msgid "Unable to fetch data from table"
 msgstr "Impossibile ottenere i dati dalla tabella <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Colonna <%s> non trovata nella tabella <%s>"
@@ -1244,24 +1250,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Impossibile aggiungere un arco alla rete"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "Errore dglShortestPath: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1281,7 +1287,7 @@ msgstr "Tentativo di leggere punti di un'area inesisente"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1308,12 +1314,12 @@ msgstr "Tentativo di leggere la topologia da un'isola inesistente (%d)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1321,7 +1327,7 @@ msgstr "Tentativo di leggere la topologia da un'isola inesistente (%d)"
 msgid "GRASS is not compiled with OGR support"
 msgstr "GRASS è compilato senza il supporto OGR"
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Impossibile aprire il degli indici di categoria per il vettoriale <%s>"
@@ -1412,7 +1418,7 @@ msgstr "Impossibile riscrivere l'elemento %d"
 msgid "No connection defined"
 msgstr "Connessione fallita."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "impossibile cambiare la directory %s"
@@ -1428,7 +1434,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Impossibile riscrivere l'elemento %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Impossibile aprire il file %s in %s"
@@ -1649,7 +1655,7 @@ msgid "only native format supported"
 msgstr "solo il formato nativo è supportato"
 
 # riga o linea?
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Tentativo di leggere riga inesistente"
 
@@ -1665,17 +1671,17 @@ msgstr ""
 "Vect_read_area_geos(): impossibile leggere l'isola con id %d nell' area con "
 "id %d"
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Impossibile leggere l'offset %ld della linea"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Tentativo di leggere punti di un'area inesistente con id %d"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "Impossibile leggere la feature con id %d"
@@ -1760,16 +1766,33 @@ msgstr "Feature OGR senza ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "Tipo %d di feature OGR non supportato"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Direzione sbagliata della linea in Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
@@ -1777,12 +1800,12 @@ msgstr ""
 "Lettura random non è supportata da OGR per questo layer, non è possibile "
 "costruire supporto"
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Non riesco ad aprire il file di topologia in scrittura: %s\n"
@@ -1885,7 +1908,8 @@ msgstr "Impossibile copiare il vettoriale <%s> in <%s>"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Impossibile aggiungere il database collegato al vettoriale <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Impossibile copiare la tabella <%s>"
@@ -1918,6 +1942,21 @@ msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 "Intersezione: tipologie area per area non supportate dall'operatore AND"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Impossibile creare la tabella <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Impossibile copiare la tabella <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Impossibile copiare la tabella <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1926,7 +1965,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Impossibile aprire la sorgente dei dati OGR '%s'"
@@ -2216,7 +2255,7 @@ msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2230,33 +2269,33 @@ msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Il vettoriale che non presente nel mapset in uso non può essere aperta per "
 "gli aggiornamenti"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Impossibile aprire il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Impossibile aprire il file della topologia per il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2265,100 +2304,100 @@ msgstr ""
 "Impossibile aprire il vettoriale <%s> sul livello %d. Provare a ricostruire "
 "la topologia con v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Ricrea la topologia per il vettore '%s@%s'"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "impossibile cambiare la directory %s"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Impossibile aprire lo storico per il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Il raster <%s> non si trova nel mapset in uso (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Il nome del vettoriale non è conforme a SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Impossibile eliminare il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Il vettoriale <%s> è già presente e sarà sovrascritto"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "solo il formato nativo è supportato"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Impossibile eseguire 'stat' sul file <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "La dimensione del file 'coor' differisce dal valore salvato nel file di "
 "topologia"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Ricreare la topologia per il vettore <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 "La dimensione del file 'coor' è diverso dal valore salvato nel file di "
 "topologia"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2618,29 +2657,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr "Numero di vertici: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Costruendo aree..."
@@ -2670,73 +2709,6 @@ msgstr "%s: Area %d non esiste"
 msgid "Attempt to access dead area %d"
 msgstr "Tentativo di cancellare feature inesistente"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Creando il grafico..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Impossibile costruire il grafico della rete"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Colonna del costo di ritorno non specificata"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "il tipo della colonna <%s> non supportato (dev'essere numerico)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Registrando archi..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Impossibile aggiugnere arco alla rete"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Impostazione in corso dei costi dei nodi..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"Record del database non trovato per il nodo %d (cat = %d) (costo impostato a "
-"0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Il grafico è stata creato"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Direzione sbagliata della linea in Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "La linea non è chiusa"
@@ -2837,14 +2809,21 @@ msgstr "Riga corrotta nel head: %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Connessione fallita."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Connessione fallita."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2911,26 +2890,26 @@ msgstr "Il valore predefinito del driver non è impostato"
 msgid "Default database is not set"
 msgstr "Il valore predefinito del database non è impostato"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Richiesto dblink %d, massimo numero di link %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Errore nella regola alla riga %d in %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Impossibile aprire il driver OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2938,36 +2917,31 @@ msgstr ""
 "Fallimento di tutti i test FID. Nella tabella DB OGR non è presente nessuno "
 "di: 'FID', 'ogc_fid', 'ogr_fid', 'gid'"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "errore sconosciuto"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "impossibile cambiare la directory %s"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3117,97 +3091,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Impossibile eliminare l'elemento %d dall'indice spaziale"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Impossibile aprire il file di intestazione per il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Riga corrotta nel head: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Tipo di interpolazione sconosciuta"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Proiezione sconosciuta"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Il nome del vettoriale non è conforme a SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Impossibile copiare il vettoriale <%s> in <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Impossibile eliminare la tabella <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Impossibile creare indice per la tabella <%s>, chiave <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Nome del vettoriale <%s> invalido"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Impossibile aprire il file di intestazione per il vettoriale <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Impossibile trovare la tabella <%s> collegata al vettoriale <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Tabella <%s> collegata al vettoriale <%s> non esiste"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Impossibile aprire la directory '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Impossibile eliminare il file '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Impossibile rinominare la directory '%s' a '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Impossibile rimuovere la directory '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3294,6 +3268,153 @@ msgstr "La struttura della mappa non è mai stata inizializzata"
 msgid "Map structure has been closed"
 msgstr "La struttura della mappa è stata chiusa"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Creando il grafico..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Impossibile costruire il grafico della rete"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Colonna del costo di ritorno non specificata"
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Colonna <%s> non trovata nella tabella <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "il tipo della colonna <%s> non supportato (dev'essere numerico)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Impostazione in corso dei costi dei nodi..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"Record del database non trovato per il nodo %d (cat = %d) (costo impostato a "
+"0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Impossibile aggiugnere arco alla rete"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"Record del database non trovato per il nodo %d (cat = %d) (costo impostato a "
+"0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Impossibile aggiugnere arco alla rete"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Registrando archi..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Record del database non trovato per il nodo %d (cat = %d) (costo impostato a "
+"0)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"Record del database non trovato per il nodo %d (cat = %d) (costo impostato a "
+"0)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Il grafico è stata creato"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Impossibile aggiugnere arco alla rete"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3408,7 +3529,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Raster 3D <%s> non trovato"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3557,88 +3678,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ". Vedi gli errori nel (error) output."
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Impossibile leggere l'offset %ld della linea"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Impossibile leggere la feature con id %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr "Nome di mappa {0} non valido"
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Tipo %d di feature OGR non supportato"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Nome della colonna dell'attributo"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "problemi leggendo il file di cellule raster"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr "La mappa non esiste, non posso aprirla in modalità 'r'"
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Il vettoriale <%s> è già presente e sarà sovrascritto"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Raster <%s> non trovato"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Indice fuori dal range in "
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Il vettoriale <%s> è già presente e sarà sovrascritto"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Tabella <%s> collegata al vettoriale <%s> non esiste"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Tipo %d di feature OGR non supportato"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Tipo %d di feature OGR non supportato"
@@ -3647,32 +3778,36 @@ msgstr "Tipo %d di feature OGR non supportato"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Impossibile creare il raster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Impossibile leggere il file dei colori del raster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Impossibile creare il raster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Impossibile copiare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Impossibile eliminare il vettoriale <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Impossibile creare il raster <%s>"
@@ -3713,7 +3848,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3730,12 +3865,12 @@ msgid "Error computing map <%s>"
 msgstr "Errore nell'apertura della mappa g3d <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr "Elemento non valido '%s'"
@@ -3751,9 +3886,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3765,88 +3900,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Tipo di interpolazione sconosciuta"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr "Devi specificare il nome di base per le nuove mappe create"
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr "Sto applicando l'espressione r.mapcalc: \"%s\""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr "Sto applicando l'espressione r3.mapcalc: \"%s\""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr "Sto applicando la condizione \"where\" di v.extract: \"%s\""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "Errore nell'apertura della mappa g3d <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "timestamp non valido nel file per %s mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "errore di sintassi"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "timestamp non valido nel file per %s mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "timestamp non valido nel file per %s mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
@@ -3876,46 +4011,46 @@ msgstr "Impossibile creare il vettoriale <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Impossibile aprire il vettoriale <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Raster <%s> non trovato"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Vettoriale <%s> non trovato"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Impossibile eseguire 'stat' sul file <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Costruendo aree..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
@@ -3925,88 +4060,88 @@ msgstr ""
 "location in uso:\n"
 "{diff}"
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr "Le informazioni sulla proiezione non corrispondono. Annullamento."
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Impossibile rimuovere la directory '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "non riesco a scrivere le informazioni dello storico per [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr ""
 "Impossibile aprire il file %s delle definizioni del database vettoriale"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr "Parole chiave %(t)s, %(s)s or %(n)s non trovate nel file init."
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr "Il numero di mappe nei file init e list non corrisponde."
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "impossibile aprire il file tabella datum: %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "impossibile aprire il file tabella datum: %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Impossibile aprire il file cidx <%s> per la scrittura"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Tipo di "
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Il vettoriale '%s' è già presente e sarà sovrascritto"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Impossibile creare il file di intestazione per [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr "Il passaggio alla location di origine è fallito"
 
@@ -4033,7 +4168,7 @@ msgid ""
 "%s"
 msgstr "Il vettoriale '%s' è già presente e sarà sovrascritto"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
@@ -4041,7 +4176,7 @@ msgstr ""
 "Non riesco ad inizializzare l'interfaccia temporale DBMI. Utilizzare t."
 "connect per specificare il driver e la stringa del database"
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
@@ -4049,7 +4184,7 @@ msgid ""
 msgstr ""
 "Impossibile aprire il file %s delle definizioni del database vettoriale"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4059,7 +4194,7 @@ msgid ""
 msgstr ""
 "Impossibile aprire il file %s delle definizioni del database vettoriale"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4068,12 +4203,12 @@ msgid ""
 msgstr ""
 "Impossibile aprire il file %s delle definizioni del database vettoriale"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Tipo di "
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4085,54 +4220,37 @@ msgstr ""
 "Utilizzare t.connect per impostare il percorso ad un database temporale con "
 "lettura e scrittura abilitate."
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Impossibile rimuovere la directory '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr ""
-"Impossibile aprire il file %s delle definizioni del database vettoriale"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Impossibile creare la tabella <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
-"Non riesco ad eseguire la condizione sql. Nessuna connessione ad un database "
-"temporale è stata definita per il mapset <%(mapset)s>"
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Impossibile eseguire il comando"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Impossibile trovare '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Impossibile eseguire 'stat' sul file <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
-"Non riesco ad eseguire la transazione. Nessuna connessione ad un database "
-"temporale è stata definita per il mapset <%(mapset)s>"
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Impossibile eseguire il comando"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4140,155 +4258,155 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Impossibile eseguire il comando"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Impossibile eseguire il comando"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Tipologia di vettoria sconosciuto"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "Granularità errata: \"%s\""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Tipo di "
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr "I dataset spazio-temporali devono essere dello stesso tipo temporale"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 "Il tipo di mappa temporale del dataset campione deve essere \"intervallo\""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Impossibile ottenere i dati dalla tabella <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr "Formato della granularità errato: %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Impossibile ottenere i dati dalla tabella <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Impossibile ottenere i dati dalla tabella <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr "La mappa <%(id)s> con layer %(l)s ha un tempo non valido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr "La mappa <%s> ha un tempo non valido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
@@ -4297,7 +4415,7 @@ msgstr ""
 "Le unità di tempo relativo del dataset spazio-temporale <%(id)s> e della "
 "mappa <%(map)s> con layer %(l)s sono diverse"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
@@ -4306,23 +4424,23 @@ msgstr ""
 "Le unità di tempo relativo del dataset spazio-temporale <%(id)s> e della "
 "mappa <%(map)s> sono diverse"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 "E? possibile registrare solamente mappe appartenenti allo stesso mapset"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr "La mappa <%s> è già registrata."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4333,7 +4451,7 @@ msgstr ""
 "nel database temporale. Il mapset del dataset non corrisponde al mapset in "
 "uso"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
@@ -4341,13 +4459,13 @@ msgid ""
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4413,52 +4531,52 @@ msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr "Gli operatori temporali <%s> supportano solo tempi assoluti."
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Impossibile leggere il file dell'intestazione"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Impossibile leggere range del raster 3D <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Impossibile chiudere il raster 3D <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Nome della mappa raster base in input"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Il vettoriale '%s' è già presente e sarà sovrascritto"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr "Sto calcolando l'aggregazione delle mappe tra %(st)s - %(end)s"
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "Errore nell'apertura della mappa g3d <%s>"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Nome della mappa raster base in input"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
@@ -4467,6 +4585,13 @@ msgstr ""
 "Non riesco ad eseguire l'aggregazione. La mappa raster di output <%(name)s> "
 "esiste e l'opzione di sovrascrittura non è stata impostata"
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4637,28 +4762,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Raster <%s> non trovato"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "impossibile cambiare la directory %s"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Raster <%s> non trovato"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
@@ -4688,34 +4813,34 @@ msgstr "Tipo %d di feature OGR non supportato"
 msgid "Unable to parse time string: %s"
 msgstr "Impossibile aprire il file %s in <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 "Gli operatori spazio-temporali non sono supportati in modalità algebrica per "
 "la granularità"
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 "Tutti i dataset spazio-temporali devono avere una topologia temporale valida."
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Nome del raster in input"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Raster <%s> non trovato"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
@@ -4724,12 +4849,12 @@ msgstr ""
 "Tipo temporale del database spazio-temporale <%s> "
 "errato                                       <%s> richiesto"
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Impossibile chiudere la mappa di input"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
@@ -4738,7 +4863,7 @@ msgstr ""
 "Il tipo di dataset spazio-temporale risultante <%(a)s> è diverso dal tipo <"
 "%(b)s> richiesto"
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
@@ -4746,7 +4871,7 @@ msgstr ""
 "Le mappe che dovrebbe essere registrata nel dataset spazio-temporale "
 "risultante hanno tipi differenti."
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
@@ -4755,15 +4880,33 @@ msgstr ""
 "Tipo di mappa <%s> errato. TMAP supporta soltanto singole mappe registrate "
 "nel database temporale di GRASS"
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+#, fuzzy
+msgid "Merging empty map lists"
+msgstr "Lista di mappe vuota"
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr "Lista di mappe vuota"
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr "Valore vuoto nella lista delle mappe, questo non dovrebbe succedere"
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
@@ -4771,14 +4914,14 @@ msgstr ""
 "Le proiezioni sono differenti. Non riesco a calcolare overlapping_2d per le "
 "estensioni spaziali"
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 "Le proiezioni sono differenti. Non riesco a calcolare is_in_2d per le "
 "estensioni spaziali"
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
@@ -4786,28 +4929,28 @@ msgstr ""
 "Le proiezioni sono differenti. Non riesco a calcolare equivalent_2d per le "
 "estensioni spaziali"
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 "Le proiezioni sono differenti. Non riesco a calcolare cover_2d per le "
 "estensioni spaziali"
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 "Le proiezioni sono differenti. Non riesco a calcolare cover per le "
 "estensioni spaziali"
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr "Il calcolo dei volumi non è supportato per le proiezioni LL"
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr "Il calcolo delle aree non è supportato per le proiezioni LL"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
@@ -4815,36 +4958,36 @@ msgid ""
 msgstr ""
 "Non riesco a creare il file %s di timestamp per la mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "timestamp non valido nel file per %s mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "timestamp non valido nel file per %s mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "timestamp non valido nel file per %s mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "L'Est deve essere più grande dell'Ovest"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "L'Est deve essere più grande dell'Ovest"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
@@ -4852,48 +4995,72 @@ msgid ""
 msgstr ""
 "Non riesco a creare il file %s di timestamp per la mappa %s nel mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Impossibile creare il file di intestazione per [%s in %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "L'Est deve essere più grande dell'Ovest"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr "La mappa <%s> ha un tempo di avvio non corretto"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Impossibile trovare il vettoriale <%s> in <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4907,31 +5074,31 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "sconosciuto"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr "Opzione non trovata: %s"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr "Il parametro '%(name)s' (%(desc)s) è assente."
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr "<richiesto>"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4939,16 +5106,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "impossibile cambiare la directory %s"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "impossibile cambiare la directory %s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Tipo di mappa non valido <%d>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "impossibile cambiare la directory %s"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4960,68 +5162,68 @@ msgstr ""
 "trattino basso all'inizio è obsoleto in GRASS GIS 7.0 e sarà rimosso nella "
 "versione 7.1."
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr "L'elemento dovrebbe essere di tipo \"cell\" e non \"%s\""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr "L'elemento dovrebbe essere di tipo \"raster\" e non \"%s\""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Impossibile aprire %s"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr "Location <%s> esistente. Operazione annullata."
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Il vettoriale <%s> è già presente e sarà sovrascritto"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Nome file non valido. Non può essere '.' oppure 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Nome del file non valido. Il carattere <%c> non è permesso.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "La connessione del database non è definita per il layer %d"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "per mappe raster presenti %d\n"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr "vector_db_select() fallito"
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
@@ -5030,11 +5232,11 @@ msgstr ""
 "l'output di v.what non è un formato JSON:\n"
 " {ret}"
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr "Si è verificato un errore durante l'esecuzione di r3.mapcalc"
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -5043,24 +5245,24 @@ msgstr ""
 "Non posso cancellare la linea, la mappa '%s' non è aperta in modalità di "
 "scrittura ('write')"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr "Si è verificato un errore durante l'esecuzione di r.mapcalc"
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "no data"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr "valore"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr "etichetta"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Colore"
@@ -5162,7 +5364,7 @@ msgstr "Impossibile aprire il file <%s> per la scrittura"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Raster <%s> non trovato"
@@ -5689,12 +5891,12 @@ msgstr "<%s> non è stato rinominato nulla"
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "Nessun file %s disponibile nel mapset in uso\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "Nessun file %s disponibile nel mapset in uso\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr "%s copiato"
@@ -5916,7 +6118,7 @@ msgstr "timestamp specificato non valido per %s mappa %s nel mapset %s"
 msgid "WARNING: "
 msgstr "ATTENZIONE: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ERRORE: "
@@ -6052,7 +6254,7 @@ msgstr "campo formato duplicato"
 msgid "Duplicate compressed field"
 msgstr "campo compressed duplicato"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Area %d non esiste"
@@ -6184,22 +6386,22 @@ msgstr "GISRC - variabile non impostata"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): variabile %s non impostata"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): mapset <%s> non corrisponde a xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Impossibile aprire '%s'"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: impossibile aprire il file %s"
@@ -6254,12 +6456,12 @@ msgstr "Non valido. es. campo '%s' nel file %s in <%s>"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Nessun informazione sull'ellissoide disponibile nel file %s in <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Impossibile creare l'elemento %s (%s) nel mapset: %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Non è possibile accedere all'elemento mapset %s (%s): %s"
@@ -6277,16 +6479,16 @@ msgid "SYNOPSIS"
 msgstr "SINOPSI"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Flag"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parametri"
 
@@ -6298,6 +6500,10 @@ msgstr "Opzioni"
 msgid "Default"
 msgstr "Default"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6390,17 +6596,22 @@ msgstr ""
 "\n"
 "Flags:\n"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Output quieto del modulo"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Parametri"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   predefinito: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   opzioni: "
@@ -6691,222 +6902,231 @@ msgstr ""
 msgid "Category value"
 msgstr "Valore categoria"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Valori categoria"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Esempio: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Id dell'elemento"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Id delle feature"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Percorso al file di input"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Nome per il file di output"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Separatore dei campi"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 #, fuzzy
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr "Caratteri speciali: newline, spazio, virgola, tab"
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Colore"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Sia un nome di colonna standard, sia una terna R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Sia un colore standard GRASS, sia una terna R:G:B, sia \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Percorso al file di input"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr "Unità"
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr "Tipo(i) di dati"
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr "Nome del mapset (default: percorso di ricerca in uso)"
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr "'.' per il mapset in uso"
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Coordinate non valide"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Nome della mappa vettoriale in input"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Nome della colonna dell'attributo"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Nome delle mappe raster in input"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Nome del raster di output"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Nome della mappa raster in input"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Nome della mappa raster in input"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Nome della mappa raster in output"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Nome del vettoriale di input"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Nome del vettoriale di input"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Non abbastanza spazo nell'array del vettore"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Nome del raster 3d in input"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Nome del raster 3d in input"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Nome del raster 3d in output"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr ""
 "Bug: attesa di aggiornamento di una mappa non presente nel mapset in uso"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Nome del raster in input"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Nome del raster in input"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Impossibile chiudere la mappa di input"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "La clausola WHERE del comando SQL manca della parola chiave 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr "Esempio di start_time > '2001-01-01 12:30:00'"
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Caricamento dati dalla tabella degli attributi in corso..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr "Non costruire la topologia"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -7025,82 +7245,89 @@ msgstr ""
 "\n"
 "Descrizione:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG nella descrizione, opzione '%s' in <%s> non esiste"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG nella descrizione, opzione '%s' in <%s> non esiste"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Usare una sola delle due flag --quiet o --verbose, non entrambe. Scelta "
 "automatica: --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 "Usare una sola delle due flag --quiet o --verbose, non entrambe. Scelta "
 "automatica: --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+"Usare una sola delle due flag --quiet o --verbose, non entrambe. Scelta "
+"automatica: --quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Mi spiace <%s> non è una opzione valida\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ERRORE: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Impossibile determinare il nome del programma"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Mi spiace ma, <%c> non è un flag valido\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Mi spiace, <%s=> è ambiguo\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr "L'opzione <%s=> corrisponde"
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr "Aggiornare l'utilizzo di <%s>: l'opzione <%s> èstata rinominata <%s>"
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Spiacente <%s> non è un parametro valido\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> nel mapset <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr "L'opzione <%s> non accetta risposte multiple"
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7109,7 +7336,7 @@ msgstr ""
 "\n"
 "ERRORE: intervallo di sintassi non valido per il parametro <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7118,14 +7345,14 @@ msgstr ""
 "\n"
 "ERRORE: il valore <%s> è fuori dall'intervallo atteso dal parametro<%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "ERRORE: Valore assente per il parametro <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7134,7 +7361,7 @@ msgstr ""
 "\n"
 "Errore: il valore <%s> è fuori dall'intervallo atteso dal parametro<%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7143,7 +7370,7 @@ msgstr ""
 "ERRORE: Il parametro <%s> richiesto non è definito:\n"
 "\t(%s)\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7152,37 +7379,37 @@ msgstr ""
 "\n"
 "ERRORE: l'opzione <%s> deve essere fornita come multipli di %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Mi spiace <%s> non è una opzione valida\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Separatore dei campi"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Mi spiace <%s> non è una opzione valida\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Tipo %d di feature OGR non supportato"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Impossibile creare la tabella <%s>"
@@ -8123,17 +8350,37 @@ msgstr "Descrittori (a, rf, es o b) dell'ellissoide invalidi nel file"
 msgid "No ellipsoid info given in file"
 msgstr "Nessuna informazione sull'ellissoide nel file dato"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Errore nella lettura iniziale del file compresso [%s in %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Errore nella lettura iniziale del file compresso [%s in %s]"
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 "Libreria raster non inizializzata. Il programmatore ha dimenticato di "
 "chiamare Rast_init()."
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8165,55 +8412,50 @@ msgstr ""
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Errore nella scrittura dei dati FP compressi per la riga %d di <%s>"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Errore nella scrittura dei dati compressi per la riga %d di <%s>"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Errore nella scrittura dei dati non compressi per la riga %d di <%s>"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Errore nella scrittura dei dati tramite GDAL per la riga %d di <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, c-format
-msgid "No null file for <%s>"
-msgstr "Nessun file null per <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 "Il formato di output di GDAL non supporta la scrittura di righe null "
 "separatamente"
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "Non riesco a trovare un file temporaneo null <%s>"
+msgid "No null file for <%s>"
+msgstr "Nessun file null per <%s>"
 
-#: ../lib/raster/put_row.c:528
-#, c-format
-msgid "Unable to open null file <%s>"
-msgstr "Non riesco ad aprire il file null <%s>"
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
+#, fuzzy, c-format
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Errore nella scrittura dei dati compressi per la riga %d di <%s>"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "errore nella scrittura della riga vuota %d di <%s>"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr ""
 "put_raster_row: mappa raster <%s> non aperta in scrittura - richiesta "
 "ignorata"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "put_raster_row: descrittore di file non aperto - richiesta ignorata"
 
@@ -8315,22 +8557,22 @@ msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr ""
 "Non riesco a creare il file dei metadati <%s> per la mappa raster <%s@%s>"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Descrittore non valido: %d"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Non riesco a rinominare il file null '%s' in '%s': %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Non riesco a rinominare il file cella '%s' in '%s': %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "Impossibile scrivere file f_format per mappe CELL"
 
@@ -8418,12 +8660,12 @@ msgstr "Errore nella lettura del tipo di mappa per la mappa raster <%s>"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "Raster <%s@%s>: formato campo nell'intestazione del file non valido"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Raster <%s> non trovato nel mapset <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Tipo %d di feature OGR non supportato"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8432,19 +8674,19 @@ msgstr ""
 "La mappa raster <%s> ha una proiezione diversa da quella della regione "
 "corrente. La proiezione è <%s>, dovrebbe essere <%s>."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 "La mappa raster <%s> è in una zona diversa (%d) rispetto alla regione "
 "corrente (%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Mappa raster <%s> byte per cella (%d) troppo grande"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
@@ -8452,76 +8694,76 @@ msgstr ""
 "La mappa raster <%s@%s> è un collegamento GDAL ma GRASS è stato compilato "
 "senza il supporto GDAL"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Non riesco ad aprire il file %s per la mappa raster <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Errore nella lettura del formato per <%s@%s>"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Non riesco a leggere il file dell'intervallo per '%s'"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 msgid "Unable to create GDAL link"
 msgstr "Non riesco a creare il collegamento a GDAL"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr "Tipo di mappa non valido <%d>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Il raster <%s> non si trova nel mapset in uso (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> è un nome file non valido"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr "Nessun file temporaneo disponibile: %s"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Il raster <%s> non si trova nel mapset in uso (%s)"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 "Rast_set_fp_type(): può essere chiamata solo con FCELL_TYPE o DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Raster <%s> non trovato nel mapset <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Impossibile trovare '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Tipo non valido: campo '%s' nel file '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Tipo mancante: campo nel file '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Raster <%s> non è xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8563,27 +8805,43 @@ msgstr "Rast__null_bitstream_size: cols (%d) è negativo"
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr "Rast_make_random_colors: min (%d) > max (%d)"
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 " Lettura del raster <%s@%s>. La richiesta per la riga %d è fuori dalla "
 "regione"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Errore nella lettura della mappa raster per la riga %d di <%s>"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Errore nella lettura della mappa raster per la riga %d di <%s>"
+
+#: ../lib/raster/get_row.c:227
 #, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr ""
 "Errore nella lettura della mappa raster tramite GDAL per la riga %d di <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Errore nella lettura della mappa raster per la riga %d di <%s>"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Errore nella lettura della mappa raster per la riga %d di <%s>"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Errore nella lettura della riga vuota %d per <%s>"
@@ -8822,12 +9080,12 @@ msgstr "sconosciuto"
 msgid "Unsupported icon %d"
 msgstr "Tipo di "
 
-#: ../lib/display/r_raster.c:128
-#, c-format
-msgid "%s variable defined, %s ignored"
-msgstr "variabile %s definita, %s ignorata"
+#: ../lib/display/r_raster.c:98
+#, fuzzy, c-format
+msgid "Both %s and %s are defined. %s will be ignored."
+msgstr "i parametri 'where' e 'cats' sono stati forniti, cat verrà ignorato"
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
@@ -8836,21 +9094,16 @@ msgstr ""
 "Nè %s (gestita dal comando d.mon) nè %s (utilizzato per il rendering "
 "diretto) definiti"
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Impossibile avviare il driver <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Impossibile avviare il driver <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Impossibile eliminare il file '%s'"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8925,17 +9178,17 @@ msgstr "Il locking concorrente del mapset non è supportato in Windows."
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "ATTENZIONE: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Impostazione in corso dei costi dei nodi..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8943,118 +9196,165 @@ msgstr ""
 "Uso:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr "stampa questo messaggio di aiuto"
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr "mostra le informazioni di versione ed esci"
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr "crea il database, la location o il mapset se non esiste"
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 "esci dopo la creazione della location o del mapset. Solo con l'opzione -c"
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr "usa l'interfaccia testuale (salta la schermata di benvenuto)"
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "per accettare i valori predefiniti"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr "usa l'interfaccia testuale (mostra la schermata di benvenuto)"
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr "usa l'interfaccia grafica $DEFAULT_GUI"
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr "stampa i parametri di configurazione di GRASS"
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr "opzioni: architettura, versione, compilatore, percorso, revisione"
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
-msgstr "database iniziale (percorso ai dati GIS)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "proiezione non valida\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+#, fuzzy
+msgid "initial GRASS Mapset"
 msgstr "mapset iniziale"
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+#, fuzzy
+msgid "fully qualified initial Mapset directory"
 msgstr "nome completo della cartella iniziale del mapset"
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr "Variabili di sistema rilevanti per l'avvio"
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+#, fuzzy
+msgid "select GUI (text, gui, gtext)"
 msgstr "selezionare la GUI (testo, gui)"
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr "definire il browser web html per le pagine del manuale"
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 "definire percorsi aggiuntivi ai moduli GRASS locali o agli script dell'utente"
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 "definire un GISBASE aggiuntivo per gli addon di GRASS installati in locale"
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr "script di shell da eseguire come batch job"
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr "definire il nome della shell di python per sovrascrivere 'python'"
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Impossibile allocare memoria\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Il formato richiesto non è stato compilato per questa versione"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr "Ricerca di un web browser, nessun risultato"
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -9068,13 +9368,15 @@ msgstr ""
 "Usare l'opzione -help per i dettagli\n"
 "Premere INVIO per continuare\n"
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
+#, fuzzy
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 "Sembra che il sistema X Windows non sia attivo.\n"
 "L'interfaccia grafica non è supportata.\n"
@@ -9082,31 +9384,43 @@ msgstr ""
 "\n"
 "Premere invio per continuare"
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Mi spiace <%s> non è una opzione valida\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, fuzzy, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 "Il mapset <%s> non esiste nella location GRASS <%s>. Un nuovo mapset può "
 "essere creato con l'opzione '-c'."
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 "Creazione della nuova location fallita. La location <%s> è già presente."
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr "File WIND mancante riparato."
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
@@ -9115,13 +9429,7 @@ msgstr ""
 "adeguatamente.\n"
 "E' necessario l'avvio interattivo."
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
@@ -9130,41 +9438,38 @@ msgstr ""
 "Interfaccia utente non valida - <%s>. Utilizzare l'opzione -help per "
 "visualizzare i nomi delle interfacce disponibili."
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
-"Errore nell'avvio della GUI. Se necessario, riportare l'errore agli "
-"sviluppatori di GRASS.\n"
-"Avvio della modalità testuale.\n"
-"\n"
-"Premere invio per continuare..."
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
+#, fuzzy
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr "Ricevuto messaggio EXIT dalla GUI|nGRASS non viene avviato. Ciao."
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Per piacere avvisa gli sviluppatori GRASS per questo errore\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, fuzzy, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 "Errore nella lettura del percorso ai dati da g.gisenv.\n"
 "GISDBASE=%(gisbase)s\n"
@@ -9173,207 +9478,212 @@ msgstr ""
 "\n"
 "Controllare il file <%s(file)>."
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr "La variabile d'ambiente '%s' è già definita, ignoro il valore '%s'"
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-"E' stata richiesta una sovrascrittura della lingua. Provo a lanciare GRASS "
-"in '%s'"
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Area %d non esiste"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Area %d non esiste"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
-"%(user)s sta eseguendo GRASS nel mapset selezionato (file %(file)s trovato). "
-"L'utilizzo contemporaneo non è consentito."
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Creazione topologia...\n"
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr "Shell non supportata <%(sh)s>: %(env)s"
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - variabile non impostata"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, fuzzy, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr "Shell non supportata <%(sh)s>: %(env)s"
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
 msgstr "Sto eseguendo '%s'..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Connessione fallita."
+
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
 msgstr "Esecuzione di '%s' terminata."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr "GRASS GUI dovrebbe essere <%s>"
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Impossibile impostare il focus"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr "Benvenuto in GRASS GIS%s"
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr "Homepage di GRASS GIS:"
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Nessun aiuto disponibile per il comando [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr "VIsualizza i termini di licenza con:"
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 #, fuzzy
 msgid "See citation options with:"
 msgstr "VIsualizza i termini di licenza con:"
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr "Se necessario, riavvia la GUI con:"
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr "Avvia la GUI con:"
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr "Per uscire digitare:"
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr "Maschere raster 2D e 3D presenti"
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr "Maschera raster presente"
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr "Maschera raster 3D presente"
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr "Arrivederci da GRASS GIS"
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "nessuno"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr "Arrivederci da GRASS GIS"
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Impossibile aprire il file %s in %s"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Tipo %d di feature OGR non supportato"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+#, fuzzy
+msgid "Flag -e requires also flag -c"
 msgstr "L'opzione -e richiede anche l'opzione -c"
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr "Sto creando una nuova location/mapset GRASS GIS"
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr "Sto avviando GRASS GIS..."
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr "Sto avviando <%s> GUI in background, attendere prego..."
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Impossibile aprire il file %s in %s"
@@ -9657,10 +9967,87 @@ msgstr "Memoria esaurita"
 #~ msgid "Out of memmory"
 #~ msgstr "Memoria esaurita"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr ""
+#~ "Impossibile aprire il file %s delle definizioni del database vettoriale"
+
+#~ msgid ""
+#~ "Unable to execute sql statement. There is no temporal database connection "
+#~ "defined for mapset <%(mapset)s>"
+#~ msgstr ""
+#~ "Non riesco ad eseguire la condizione sql. Nessuna connessione ad un "
+#~ "database temporale è stata definita per il mapset <%(mapset)s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Non riesco ad aprire lo storico per il vettoriale '%s'"
+
+#~ msgid ""
+#~ "Unable to execute transaction. There is no temporal database connection "
+#~ "defined for mapset <%(mapset)s>"
+#~ msgstr ""
+#~ "Non riesco ad eseguire la transazione. Nessuna connessione ad un database "
+#~ "temporale è stata definita per il mapset <%(mapset)s>"
+
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "Non riesco a trovare un file temporaneo null <%s>"
+
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "Non riesco ad aprire il file null <%s>"
+
+#~ msgid "initial database (path to GIS data)"
+#~ msgstr "database iniziale (percorso ai dati GIS)"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Mi spiace <%s> non è una opzione valida\n"
+
+#~ msgid ""
+#~ "Error in GUI startup. If necessary, please report this error to the GRASS "
+#~ "developers.\n"
+#~ "Switching to text mode now.\n"
+#~ "\n"
+#~ "Hit RETURN to continue..."
+#~ msgstr ""
+#~ "Errore nell'avvio della GUI. Se necessario, riportare l'errore agli "
+#~ "sviluppatori di GRASS.\n"
+#~ "Avvio della modalità testuale.\n"
+#~ "\n"
+#~ "Premere invio per continuare..."
+
+#~ msgid ""
+#~ "A language override has been requested. Trying to switch GRASS into "
+#~ "'%s'..."
+#~ msgstr ""
+#~ "E' stata richiesta una sovrascrittura della lingua. Provo a lanciare "
+#~ "GRASS in '%s'"
+
+#~ msgid "GRASS GUI should be <%s>"
+#~ msgstr "GRASS GUI dovrebbe essere <%s>"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "ERRORE: l'opzione <%s>: <%s> esiste.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "impossibile cambiare la directory %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Impossibile eliminare il file '%s'"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "premi INVIO per continuare -->"
 
@@ -9668,6 +10055,21 @@ msgstr "Memoria esaurita"
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Il vettoriale <%s> non è aperto sul livello >= 2"
 
+#~ msgid "Background color"
+#~ msgstr "Colore sfondo"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Nome della mappa raster in input"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "Tipo %d di feature OGR non supportato"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "impossibile cambiare la directory %s"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Attributi per la categoria %d non trovato"
 
@@ -9694,21 +10096,15 @@ msgstr "Memoria esaurita"
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: numero di dimensioni o campi non valido"
 
-#~ msgid "Background color"
-#~ msgstr "Colore sfondo"
+#~ msgid "Environmental variable '%s' already set, ignoring value '%s'"
+#~ msgstr "La variabile d'ambiente '%s' è già definita, ignoro il valore '%s'"
 
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "Tipo %d di feature OGR non supportato"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "impossibile cambiare la directory %s"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "impossibile cambiare la directory %s"
+#~ msgid ""
+#~ "%(user)s is currently running GRASS in selected mapset (file %(file)s "
+#~ "found). Concurrent use not allowed."
+#~ msgstr ""
+#~ "%(user)s sta eseguendo GRASS nel mapset selezionato (file %(file)s "
+#~ "trovato). L'utilizzo contemporaneo non è consentito."
 
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Nome della mappa raster in input"
+#~ msgid "%s variable defined, %s ignored"
+#~ msgstr "variabile %s definita, %s ignorata"
diff --git a/locale/po/grasslibs_ja.po b/locale/po/grasslibs_ja.po
index 80b734c..369df08 100644
--- a/locale/po/grasslibs_ja.po
+++ b/locale/po/grasslibs_ja.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_ja\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2012-03-05 12:14+0900\n"
 "Last-Translator: Naoki Ueda <nao at locapoint.com>\n"
 "Language-Team: Japanese <grass-translations at lists.osgeo.org>\n"
@@ -43,10 +43,12 @@ msgstr "ドライバー <%s> をスタートできません"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "ドライバー <%s> でデータベース <%s> を開けません"
@@ -56,45 +58,45 @@ msgstr "ドライバー <%s> でデータベース <%s> を開けません"
 msgid "Unable to get list tables in database <%s>"
 msgstr "データベース <%s> にリストテーブルを移動できません"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "テーブル <%s> は既にデータベース <%s> に存在します"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "選択カーソルを開けません: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "列 <%s> は整数型ではありません"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "列 <%s> は見つかりませんでした"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "テーブル <%s> を作成できません"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "テーブル <%s> からデータをフェッチできません"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "不明な列タイプ (列 <%s>)"
@@ -706,8 +708,8 @@ msgstr "OGRフィーチャタイプ %d はサポートされません"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -717,8 +719,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -825,12 +827,12 @@ msgstr ""
 "フィーチャー索引フォーマットバージョン %d. %d はこのリリースでサポートされて"
 "いません. トポロジーを再作成するかGRASSをアップデートしてください."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "GngFlattenエラー"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr "最小スパンニングツリーの計算中..."
 
@@ -876,17 +878,17 @@ msgstr "レイヤー索引は範囲外です"
 msgid "Category index out of range"
 msgstr "レイヤー索引は範囲外です"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "ベクトルマップ <%s> の索引ファイルを開けません"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "カテゴリー索引ファイル <%s> 書き込み中のエラー"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "ベクトルマップ <%s> の索引ファイルを開けません"
@@ -954,8 +956,8 @@ msgstr "間違った境界の数: %d"
 msgid "Number of redundant holes: %d"
 msgstr "境界の数: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "���"
@@ -1052,37 +1054,37 @@ msgstr "領域の数: -"
 msgid "Number of isles: -"
 msgstr "アイルの数: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "topo ファイル書き込みのエラー"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "���"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "バグ (Vect_build_sidx_from_topo): ノードは存在しません"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "空間インデックスファイルを書き込めません"
 
@@ -1148,9 +1150,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1199,8 +1203,10 @@ msgstr "属性を選択できません"
 msgid "Unable to fetch data from table"
 msgstr "テーブル <%s> からデータをフェッチできません"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "テーブル <%s> に列 <%s> が見つかりません"
@@ -1239,24 +1245,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "ネットワークアークを追加できません"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "dgl最短パスエラー: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr "ベクトルマップ <%s@%s> の座標ファイルが大きすぎます(%ld バイト超過)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1277,7 +1283,7 @@ msgstr "存在しないエリアのポイントを読もうとしています"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1304,12 +1310,12 @@ msgstr "不要な島 (%d) のトポロジーを読み込もうとしています
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1317,7 +1323,7 @@ msgstr "不要な島 (%d) のトポロジーを読み込もうとしています
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "ベクトルマップ <%s> の索引ファイルを開けません"
@@ -1408,7 +1414,7 @@ msgstr "フィーチャー %d を書き込めません"
 msgid "No connection defined"
 msgstr "接続に失敗しました"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "����� ���� ���\n"
@@ -1424,7 +1430,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "フィーチャー %d を書き込めません"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "���"
@@ -1644,7 +1650,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "ネイティブ形式のみサポートされています"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "不要なラインを読み込みます"
 
@@ -1658,17 +1664,17 @@ msgstr "Vect_read_area_geos(): エリア ID %d が読み込めません"
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr "Vect_read_area_geos(): isle ID %d エリア ID %d が読み込めません"
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "ラインオフセットを読み込めません %ld"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "存在しないエリアID %d を読み込もうとしています"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "フィーチャーIDを読めません %d"
@@ -1753,16 +1759,33 @@ msgstr "IDなしのOGRフィーチャ"
 msgid "OGR feature type '%s' not supported"
 msgstr "OGRフィーチャタイプ %d はサポートされません"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Vect_net_get_line_cost() におけるラインの方向は正しくありません"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
@@ -1770,12 +1793,12 @@ msgstr ""
 "このレイヤーのランダムな読み込みはOGRにサポートされていません, サポート作成不"
 "可"
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "���"
@@ -1878,7 +1901,8 @@ msgstr "ベクトルマップ <%s> を <%s> にコピーできません"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "ベクトルマップ <%s> にデータベースをリンクを追加できません"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "テーブル <%s> をコピーできません"
@@ -1912,6 +1936,21 @@ msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 "オーバーレイ: 領域 x 領域タイプはAND演算子によってサポートされていません"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "テーブル <%s> を作成できません"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "テーブル <%s> をコピーできません"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "テーブル <%s> をコピーできません"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1920,7 +1959,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "OGR データソース '%s' を開けません"
@@ -2208,7 +2247,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "���"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2221,31 +2260,31 @@ msgstr "ベクトルマップ <%s> が見つかりません"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "���"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "現在のマップセットにないベクトルマップは更新できません"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "ベクトルマップ <%s> を開けません"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "ベクトルマップ <%s> のトポロジーファイルを開けません"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2254,95 +2293,95 @@ msgstr ""
 "ベクトルマップ <%s> をレベル %d で開けません.  v.build.でベクトルトポロジーを"
 "再作成してください"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "���"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "����� ���� ���\n"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "ベクトルマップ <%s> のヒストリーファイルを開けません"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "ラスターマップ <%s> は現在のマップセットにありません (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "ベクトルマップ名はSQLに基づいていません"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "ベクトルマップ <%s> を削除できません"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "ネイティブ形式のみサポートされています"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "ファイル <%s> をスタートできません"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "'coor' ファイルのサイズはトポロジーファイルに保存された値と異なります"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "ベクトルマップ <%s@%s>のためトポロジーを再作成してください"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "���"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2600,29 +2639,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "プリミティブの数: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "領域を作成しています..."
@@ -2652,79 +2691,6 @@ msgstr "%s: エリア %d は存在しません"
 msgid "Attempt to access dead area %d"
 msgstr "不要なフィーチャを削除しようとしています"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "グラフを作成しています..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "ネットワークグラフを作成できません"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "フォワードコスト列は指定されていません"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "アークフィールド < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-"データ型 of 列 <%s> のデータタイプはサポートされていません (数字でなければな"
-"らない)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "アークを登録しています..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"ライン %d (カタログ = %d, 前/後の両方向) のデータベース レコードは見つかりま"
-"せんでした (スキップされた前/後の両方向とも)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"ライン %d (cat = %d, backword direction) のデータベースレコードは見つかりませ"
-"んでした(ラインの方向はスキップされました)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "ネットワークアークを追加できません"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "ノードコストをセットしています..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"ノード %d (cat = %d) のデータベースレコードは見つかりませんでした (コストは0"
-"にセットされています)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "グラフを平らにしています..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "グラフは作成されています"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Vect_net_get_line_cost() におけるラインの方向は正しくありません"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "ラインはループされていません"
@@ -2831,14 +2797,21 @@ msgstr "ヘッドにおいて破損した行: %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "接続に失敗しました"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "接続に失敗しました"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2903,26 +2876,26 @@ msgstr "デフォルトドライバーが指定されていません"
 msgid "Default database is not set"
 msgstr "デフォルのデータベースが指定されていません"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "要求された dbリンク %d, 最大のリンク数 %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "OGR DBMI ドライバーを開けません"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2930,35 +2903,30 @@ msgstr ""
 "全てのFIDテストは失敗しました. OGR DBテーブルには 'FID' も 'ogc_fid' も "
 "'ogr_fid' も 'gid' ありません "
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "不明なベクトルタイプ"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "バグ: このマップセットにないマップをアップデートしようとしています"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "����� ���� ���\n"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3108,97 +3076,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "アイテム %d を空間インデックスから削除できません"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "���"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "ベクトル <%s> のヘッダーファイルを開けません"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "ヘッドにおいて破損した行: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "ベクトルヘッドにおける不明なキーワード %s"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "不明な投影法"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "ベクトルマップ名はSQLに基づいていません"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "ベクトルマップ <%s> を <%s> にコピーできません"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "テーブル <%s> を削除できません"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "テーブル <%s> の索引を作成できません, キー <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "無効なベクトルマップ名 <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "ベクトルマップ <%s> のヘッダーファイルを開けません"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "ベクトルマップ <%s> にリンクするテーブル <%s> が見つかりません"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "ベクトルマップ <%s> にリンクするテーブル <%s> は存在しません"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "ディレクトリ '%s' を開けません"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "ファイル '%s' を削除できません"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "ディレクトリ名を  '%s'  から  '%s' に変更できません"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "ディレクトリ  '%s' を削除できません"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3285,6 +3253,160 @@ msgstr "マップ構造は一度も初期化されませんでした"
 msgid "Map structure has been closed"
 msgstr "マップ構造は閉じられています"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "グラフを作成しています..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "ネットワークグラフを作成できません"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "フォワードコスト列は指定されていません"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "アークフィールド < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "テーブル <%s> に列 <%s> が見つかりません"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+"データ型 of 列 <%s> のデータタイプはサポートされていません (数字でなければな"
+"らない)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "ノードコストをセットしています..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"ノード %d (cat = %d) のデータベースレコードは見つかりませんでした (コストは0"
+"にセットされています)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "ネットワークアークを追加できません"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"ノード %d (cat = %d) のデータベースレコードは見つかりませんでした (コストは0"
+"にセットされています)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "ネットワークアークを追加できません"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "アークフィールド < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "アークを登録しています..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"ライン %d (カタログ = %d, 前/後の両方向) のデータベース レコードは見つかりま"
+"せんでした (スキップされた前/後の両方向とも)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"ライン %d (cat = %d, backword direction) のデータベースレコードは見つかりませ"
+"んでした(ラインの方向はスキップされました)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "グラフを平らにしています..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "グラフは作成されています"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"ライン %d (カタログ = %d, 前/後の両方向) のデータベース レコードは見つかりま"
+"せんでした (スキップされた前/後の両方向とも)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"ライン %d (cat = %d, backword direction) のデータベースレコードは見つかりませ"
+"んでした(ラインの方向はスキップされました)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "ネットワークアークを追加できません"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3399,7 +3521,7 @@ msgid "3D raster map <%s> not found"
 msgstr "3D ラスターマップ <%s> は見つかりませんでした"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3543,88 +3665,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "ラインオフセットを読み込めません %ld"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "フィーチャーIDを読めません %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "OGRフィーチャタイプ %d はサポートされません"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "属性列名"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "���"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "ラスターマップ <%s> が見つかりません"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "索引は範囲外です"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "ベクトルマップ <%s> にリンクするテーブル <%s> は存在しません"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "OGRフィーチャタイプ %d はサポートされません"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "OGRフィーチャタイプ %d はサポートされません"
@@ -3633,32 +3765,36 @@ msgstr "OGRフィーチャタイプ %d はサポートされません"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "ラスターマップ <%s> を作成できません"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "ラスターマップ <%s> のカラーファイルを読み込めません"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "ラスターマップ <%s> を作成できません"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "ベクトルマップ <%s> を <%s> にコピーできません"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "ベクトルマップ <%s> を削除できません"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "ラスターマップ <%s> を作成できません"
@@ -3698,7 +3834,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3715,12 +3851,12 @@ msgid "Error computing map <%s>"
 msgstr "3Dグリッドマップ <%s> を開けません"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3734,9 +3870,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3748,88 +3884,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "���"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  フォーマット: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "���"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "構文エラー"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "���"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "���"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "����� ���� ���\n"
@@ -3859,132 +3995,132 @@ msgstr "ベクトルマップ <%s> を作成できません"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "ベクトルマップ <%s> を開けません"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "ラスターマップ <%s> が見つかりません"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "ファイル <%s> をスタートできません"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "領域を作成しています..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "ディレクトリ  '%s' を削除できません"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "ベクトル データベース 定義ファイル '%s' を開けません"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "cidx ファイル <%s> を書き込みに開けません"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "���"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4009,20 +4145,20 @@ msgid ""
 "%s"
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "ベクトル データベース 定義ファイル '%s' を開けません"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4031,7 +4167,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "ベクトル データベース 定義ファイル '%s' を開けません"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4039,12 +4175,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "ベクトル データベース 定義ファイル '%s' を開けません"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "���"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4052,49 +4188,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "ディレクトリ  '%s' を削除できません"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "ベクトル データベース 定義ファイル '%s' を開けません"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "テーブル <%s> を作成できません"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "コマンドを実行できません"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "���"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "見つかりません '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "���"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "ファイル <%s> をスタートできません"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "コマンドを実行できません"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4102,182 +4226,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "コマンドを実行できません"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "コマンドを実行できません"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "不明なベクトルタイプ"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  フォーマット: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "マップに量子化ルールを書き込めません %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "テーブル <%s> からデータをフェッチできません"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  フォーマット: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "テーブル <%s> からデータをフェッチできません"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "テーブル <%s> からデータをフェッチできません"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4285,19 +4409,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4358,58 +4482,65 @@ msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "ヘッドファイルを読み込めません"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "3D ラスターマップ <%s> の範囲を読めません"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "ラスターマップ <%s> を閉じれません"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "基本ラスターマップ名"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  フォーマット: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "基本ラスターマップ名"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4581,28 +4712,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "���"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "ラスターマップ <%s> が見つかりません"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "ラスターマップ <%s> が見つかりません"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "����� ���� ���\n"
@@ -4632,189 +4763,230 @@ msgstr "OGRフィーチャタイプ %d はサポートされません"
 msgid "Unable to parse time string: %s"
 msgstr "ファイルを開けません %s in <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "入力するラスターマップ名"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "ラスターマップ <%s> が見つかりません"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "入力マップを閉じれません"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "<%s> にベクトルマップ <%s> を見つけられません"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "���"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "東は西より大きくないといけません"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "東は西より大きくないといけません"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "ベクトルマップ <%s> を <%s> にコピーできません"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "����� ���� ���\n"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "東は西より大きくないといけません"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "<%s> にベクトルマップ <%s> を見つけられません"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4826,32 +4998,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "テーブル <%s> からデータをフェッチできません"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "不明"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s が見つかりません"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "要求: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4859,16 +5031,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "����� ���� ���\n"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "����� ���� ���\n"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "����� ���� ���\n"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "����� ���� ���\n"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4876,79 +5083,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "入力マップを閉じれません"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "ベクトルマップ <%s> は既に存在し上書きされます"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "���"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "���"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "データベース接続はレイヤー %d に定義されていません"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "ベクトルマップ <%s> をロードできません"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4957,24 +5164,24 @@ msgstr ""
 "フィーチャー %d を修復できません, ベクトルマップ <%s> が'書き込み' モードで開"
 "かれていません"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "データがありません"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "色"
@@ -5074,7 +5281,7 @@ msgstr "書き込みにファイル <%s> を開けません"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "ラスターマップ <%s> が見つかりません"
@@ -5595,12 +5802,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "���"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "���"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5820,7 +6027,7 @@ msgstr "����� ���� ���\n"
 msgid "WARNING: "
 msgstr "警告:  "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "エラー:  "
@@ -5956,7 +6163,7 @@ msgstr "重複するフォーマットフィールド"
 msgid "Duplicate compressed field"
 msgstr "重複する圧縮フィールド"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: エリア %d は存在しません"
@@ -6080,22 +6287,22 @@ msgstr "GISRC - 変数が設定されていません"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): 変数 %s が設定されていません"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(読み取り): マップセット <%s> はxmapsetと一致していません <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "開けません '%s'"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(書き込み): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: ファイルが開けません %s"
@@ -6150,12 +6357,12 @@ msgstr " ファイル %s内の無効な es:フィールド '%s' in <%s>"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "ファイル %sに楕円体のデータがありません in <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "マップセットの要素が作成できません %s (%s): %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "マップセット要素にアクセスできません %s (%s): %s"
@@ -6173,16 +6380,16 @@ msgid "SYNOPSIS"
 msgstr "概要"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "フラッグ"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "パラメータ"
 
@@ -6194,6 +6401,10 @@ msgstr "オプション"
 msgid "Default"
 msgstr "デフォルト"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6284,17 +6495,22 @@ msgstr ""
 msgid "Flags:"
 msgstr "フラッグ"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "モジュールを出力"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "パラメータ"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   デフォルト: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   オプション: "
@@ -6580,219 +6796,228 @@ msgstr ""
 msgid "Category value"
 msgstr "カテゴリー値"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "カテゴリー値"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "例: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "フィーチャ id"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "フィーチャ ids"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "入力するファイル名"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "出力するファイル名"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "フィールドセパレーター"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "色"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "標準色名あるいは赤:緑:青"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "標準のGRASSカラー、赤:緑:青、あるいは \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "入力するファイル名"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "無効な座標"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "入力するベクトルマップ名"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "属性列名"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "入力するラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "���"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "出力するラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "標高ラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "標高ラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "���"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "入力するベクトルマップ名"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "入力するベクトルマップ名"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "ベクトル 配列に十分なスペースがありません"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "入力する3Dラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "入力する3Dラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "出力する3Dラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "���"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "入力するラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "入力するラスターマップ名"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "入力マップを閉じれません"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr " 'where'句なしの SQL文のWHEREコンディション"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "属性テ-ブルからデータをロードしています ..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6912,78 +7137,83 @@ msgstr ""
 "\n"
 "説明:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "説明内のバグ, <%s>内のオプション '%s' は存在しません"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "説明内のバグ, <%s>内のオプション '%s' は存在しません"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr " --quiet --verboseのいずれかを使用します。 --verboseと仮定します"
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr " --quiet --verboseのいずれかを使用します。 --quietと仮定します"
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr " --quiet --verboseのいずれかを使用します。 --quietと仮定します"
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "<%s> オプションは無効です\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "エラー:  "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "プログラム名を決定できません"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "<%c> フラッグは無効です\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "<%s=>は不明瞭です\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "<%s> パラメータは無効です\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> マップセット <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6992,7 +7222,7 @@ msgstr ""
 "\n"
 "エラー: パラメータの無効な範囲の構文 <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7001,21 +7231,21 @@ msgstr ""
 "\n"
 "エラー: 値<%s>はパラメーターの範囲外です<%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "エラー: パラメータ値が見つかりません <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
 "\tValid options: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7025,7 +7255,7 @@ msgstr ""
 "エラー: 必要なパラメータ <%s> が設定されていません:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7034,37 +7264,37 @@ msgstr ""
 "\n"
 "エラー: オプション <%s> は%dの倍数でなければなりません\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "<%s> オプションは無効です\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "フィールドセパレーター"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "<%s> オプションは無効です\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "OGRフィーチャタイプ %d はサポートされません"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "���"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "テーブル <%s> を作成できません"
@@ -7999,16 +8229,36 @@ msgstr "ファイル内の無効な楕円体ディスクリプタ (a, rf, es or
 msgid "No ellipsoid info given in file"
 msgstr "ファイルに楕円体のデータがありません"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "圧縮ファイル[%s in %s]の最初の読み取りに失敗しました"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "圧縮ファイル[%s in %s]の最初の読み取りに失敗しました"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "\a���: ����� �� ��������. ���G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8039,51 +8289,46 @@ msgstr "���"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "���"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
+msgid "No null file for <%s>"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
+msgid "Error writing compressed null data for row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "���"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "���"
@@ -8174,22 +8419,22 @@ msgstr "����� ���� ���\n"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "����� ���� ���\n"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "���"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "���"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "セルマップにf_formatを書き込めません"
 
@@ -8276,104 +8521,104 @@ msgstr "���"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "ラスターマップ <%s@%s>: 無効なヘッダーファイルのフォーマット領域"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
+msgid "Compression with %s is not supported"
+msgstr "OGRフィーチャタイプ %d はサポートされません"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr ""
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "���"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "���"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "���"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "���"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "����� ���� ���\n"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "ラスターマップ <%s> は現在のマップセットにありません (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> 無効なファイル名です"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "%sファイルはマップセットに使用できません <%s>\n"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "ラスターマップ <%s> は現在のマップセットにありません (%s)"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "ラスターマップ <%s> マップセット内に見つかりません <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "見つかりません '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "無効なタイプ: ファイル '%s'内の領域 '%s' "
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "ラスターマップ<%s>はxdrではありません: バイト順: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8413,24 +8658,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "読み取ったラスターマップ <%s@%s> の行 %d は範囲外です"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "���"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "���"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "���"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "���"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "NULL行の読み取りエラー %d"
@@ -8663,33 +8924,29 @@ msgstr "不明"
 msgid "Unsupported icon %d"
 msgstr "���"
 
-#: ../lib/display/r_raster.c:128
-#, c-format
-msgid "%s variable defined, %s ignored"
+#: ../lib/display/r_raster.c:98
+#, fuzzy, c-format
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
+"'where' と 'cats' のパラメーターが定義されましたので, cat は無視されました"
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "ドライバー <%s> をスタートできません"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "ドライバー <%s> をスタートできません"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "ファイルが開けません %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8765,17 +9022,17 @@ msgstr "マップセットの平行ロックはウィンドウズではサポー
 msgid "Unable to write lockfile %s (%s)"
 msgstr "���"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "警告:  "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "ノードコストをセットしています..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8783,115 +9040,159 @@ msgstr ""
 "用例:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "デフォルトの許可"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "無効な投影法\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "仮の画像を割り当てられません"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "要求されたフォーマットはこのバージョンではコンパイルされません"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8901,283 +9202,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "<%s> オプションは無効です\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "このエラーをGRASS開発者に報告してください.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
-msgstr ""
-
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: エリア %d は存在しません"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: エリア %d は存在しません"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "グラフを作成しています..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - 変数が設定されていません"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "ノードコストをセットしています..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "接続に失敗しました"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "テーブル <%s> からデータをフェッチできません"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "フォーカスを設置できません"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "コマンドのヘルプが利用できません [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "無し"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "一時ファイルが開けません"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "OGRフィーチャタイプ %d はサポートされません"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "ドライバー <%s> をスタートできません"
@@ -9454,10 +9771,48 @@ msgstr "メモリ不足"
 #~ msgid "Out of memmory"
 #~ msgstr "メモリ不足"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "ベクトル データベース 定義ファイル '%s' を開けません"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "���"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "���"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "���"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "���"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "<%s> オプションは無効です\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "エラー: オプション <%s>: <%s> 存在します.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "����� ���� ���\n"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "ファイルが開けません %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "続行のためにリターンを押す -->"
 
@@ -9465,6 +9820,21 @@ msgstr "メモリ不足"
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "ベクトルマップ <%s> はレベル >= 2 で開かれていません"
 
+#~ msgid "Background color"
+#~ msgstr "背景の色"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "入力するファイル"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "OGRフィーチャタイプ %d はサポートされません"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "����� ���� ���\n"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "カテゴリー %d の属性は見つかりませんでした"
 
@@ -9489,22 +9859,3 @@ msgstr "メモリ不足"
 
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: 不正な # ディメンションまたはフィールド"
-
-#~ msgid "Background color"
-#~ msgstr "背景の色"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "OGRフィーチャタイプ %d はサポートされません"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "����� ���� ���\n"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "����� ���� ���\n"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "入力するファイル"
diff --git a/locale/po/grasslibs_ko.po b/locale/po/grasslibs_ko.po
index 45b376a..42f7530 100644
--- a/locale/po/grasslibs_ko.po
+++ b/locale/po/grasslibs_ko.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_ko\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-10-30 22:07-0500\n"
 "Last-Translator: Huidae Cho <grass4u at gmail.com>\n"
 "Language-Team: Korean <grass-translations at lists.osgeo.org>\n"
@@ -38,10 +38,12 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
@@ -51,45 +53,45 @@ msgstr "'%s' 디버그파일을 열 수 없습니다"
 msgid "Unable to get list tables in database <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr ""
@@ -670,8 +672,8 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -681,8 +683,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -784,12 +786,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -836,17 +838,17 @@ msgstr ""
 msgid "Category index out of range"
 msgstr "카테고리는 정수여야 합니다."
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, fuzzy, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
@@ -911,8 +913,8 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Number of redundant holes: %d"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
@@ -1011,38 +1013,38 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Number of isles: -"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "임시파일을 열 수 없습니다"
@@ -1109,9 +1111,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1160,8 +1164,10 @@ msgstr "'%s' 디버그파일을 열 수 없습니다"
 msgid "Unable to fetch data from table"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
@@ -1202,24 +1208,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1240,7 +1246,7 @@ msgstr "임시파일을 열 수 없습니다"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1267,12 +1273,12 @@ msgstr "임시파일을 열 수 없습니다"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1280,7 +1286,7 @@ msgstr "임시파일을 열 수 없습니다"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
@@ -1371,7 +1377,7 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "No connection defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -1387,7 +1393,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -1606,7 +1612,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr "임시파일을 열 수 없습니다"
@@ -1621,17 +1627,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -1715,26 +1721,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "임시파일을 열 수 없습니다"
@@ -1834,7 +1857,8 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -1866,6 +1890,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1874,7 +1913,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, fuzzy, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -2154,7 +2193,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2167,126 +2206,126 @@ msgstr "벡터맵 <%s>를 찾을 수 없습니다"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, fuzzy, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, fuzzy, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, fuzzy, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, fuzzy, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "잘못된 좌표"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, fuzzy, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, fuzzy, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2538,29 +2577,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -2590,73 +2629,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:162
-#, fuzzy
-msgid "Unable to build network graph"
-msgstr "Datum %s 테이블파일을 열 수 없습니다"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-#, fuzzy
-msgid "Cannot add network arc"
-msgstr "임시파일을 열 수 없습니다"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2759,14 +2731,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2828,61 +2807,56 @@ msgstr ""
 msgid "Default database is not set"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 #, fuzzy
 msgid "Unable to open OGR DBMI driver"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Datum %s 테이블파일을 열 수 없습니다"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3032,97 +3006,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, fuzzy, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, fuzzy, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, fuzzy, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, fuzzy, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, fuzzy, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, fuzzy, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, fuzzy, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/vector/Vlib/map.c:487
+#: ../lib/vector/Vlib/map.c:528
 #, fuzzy, c-format
-msgid "Unable to remove directory '%s'"
+msgid "Unable to remove directory '%s': %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3210,6 +3184,147 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+#, fuzzy
+msgid "Unable to build network graph"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "'%s' 디버그파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "임시파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "임시파일을 열 수 없습니다"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+#, fuzzy
+msgid "Cannot add network arc"
+msgstr "임시파일을 열 수 없습니다"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3324,7 +3439,7 @@ msgid "3D raster map <%s> not found"
 msgstr "3차원 라스터맵 <%s>를 찾을 수 없습니다"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, fuzzy, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3466,87 +3581,97 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "임시파일을 열 수 없습니다"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "라스터 타입: {0}를 지원하지 않습니다"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 msgid "Null value detected"
 msgstr "널값을 찾았습니다"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, python-format
 msgid "Index out of range: %r."
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr ""
@@ -3555,32 +3680,36 @@ msgstr ""
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -3620,7 +3749,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3637,12 +3766,12 @@ msgid "Error computing map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3656,9 +3785,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3670,87 +3799,87 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -3780,131 +3909,131 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 msgid "Extracting data..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3929,20 +4058,20 @@ msgid ""
 "%s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3951,7 +4080,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3959,12 +4088,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -3972,49 +4101,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "%s 요소를 지울 수 없습니다"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "'%s' 디버그파일을 열 수 없습니다"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "'%s' 디버그파일을 열 수 없습니다"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4022,182 +4139,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4205,19 +4322,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4278,58 +4395,65 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, fuzzy, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4496,28 +4620,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -4547,189 +4671,230 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Unable to parse time string: %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "동쪽경계는 서쪽경계보다 값이 커야합니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "동쪽경계는 서쪽경계보다 값이 커야합니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "동쪽경계는 서쪽경계보다 값이 커야합니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4741,31 +4906,31 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr ""
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr ""
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4773,16 +4938,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4790,103 +4990,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr ""
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr ""
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr ""
 
@@ -4986,7 +5186,7 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr ""
@@ -5485,12 +5685,12 @@ msgstr "<%s> 어떤 이름도 바꾸지 않았습니다"
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "<%s>를 현재 맵셋의 <%s>으로 복사합니다"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "<%s>를 현재 맵셋의 <%s>으로 복사 할 수 없습니다"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr "%s를 복사했습니다"
@@ -5702,7 +5902,7 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "WARNING: "
 msgstr ""
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr ""
@@ -5822,7 +6022,7 @@ msgstr ""
 msgid "Duplicate compressed field"
 msgstr ""
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "임시파일을 열 수 없습니다"
@@ -5948,22 +6148,22 @@ msgstr ""
 msgid "Variable '%s' not set"
 msgstr ""
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -6018,12 +6218,12 @@ msgstr ""
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -6041,16 +6241,16 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr ""
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr ""
 
@@ -6062,6 +6262,10 @@ msgstr ""
 msgid "Default"
 msgstr ""
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6141,16 +6345,20 @@ msgstr ""
 msgid "Flags:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr ""
@@ -6424,215 +6632,224 @@ msgstr ""
 msgid "Category value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "자동 MASK파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "자동 MASK파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "잘못된 좌표"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 msgid "Name of the output space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 msgid "Name of the input space time vector datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 msgid "Name of the output space time vector dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "자동 MASK파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "자동 MASK파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6748,149 +6965,153 @@ msgstr ""
 msgid "no description"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr ""
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr ""
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr ""
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr ""
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr ""
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
 "\tPresented as: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
 "\tLegal range: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
 "\tValid options: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
 "\t(%s)"
 msgstr ""
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
 "\tYou provided %d item(s): %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, c-format
 msgid "%s= is not a separator option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr ""
 "\n"
 "**<%s> 잘못된 이름 **\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -7782,15 +8003,35 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr ""
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr ""
 
+#: ../lib/raster/format.c:176
+#, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr ""
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7821,51 +8062,46 @@ msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "'%s' 디버그파일을 열 수 없습니다"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "Datum %s 테이블파일을 열 수 없습니다"
+msgid "No null file for <%s>"
+msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "Datum %s 테이블파일을 열 수 없습니다"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr ""
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr ""
 
@@ -7955,22 +8191,22 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 
@@ -8055,106 +8291,106 @@ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "'%s' 디버그파일을 열 수 없습니다"
+msgid "Compression with %s is not supported"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr ""
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "'%s' 디버그파일을 열 수 없습니다"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr ""
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr ""
 "\n"
 "**<%s> 잘못된 이름 **\n"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "'%s' 디버그파일을 열 수 없습니다"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "'%s' 디버그파일을 열 수 없습니다"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8194,24 +8430,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "임시파일을 열 수 없습니다"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "맵 [%s], 맵셑 [%s]을(를) 위한 분류지원: %s"
@@ -8444,33 +8696,28 @@ msgstr ""
 msgid "Unsupported icon %d"
 msgstr "알려지지 않은 벡터타입입니다"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Datum %s 테이블파일을 열 수 없습니다"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8549,123 +8796,167 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr ""
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr ""
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr ""
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr ""
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:350
+msgid "initial GRASS Location"
+msgstr ""
+
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr ""
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8675,277 +8966,293 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
+#: ../lib/init/grass.py:833
 #, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
 msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 msgid "Building user fontcap..."
 msgstr ""
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
+#: ../lib/init/grass.py:1289
+msgid "The SHELL variable is not set"
 msgstr ""
 
-#: ../lib/init/grass.py:967
-msgid "The SHELL variable is not set"
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
 msgstr ""
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
+#: ../lib/init/grass.py:1343
 #, python-format
-msgid "Executing '%s' ..."
+msgid "Executing <%s> ..."
 msgstr ""
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
+#: ../lib/init/grass.py:1350
+#, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
 msgstr ""
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
+#: ../lib/init/grass.py:1576
+msgid "Done."
 msgstr ""
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr ""
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr ""
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, python-format
 msgid "Parameter <%s> not supported"
 msgstr ""
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Datum %s 테이블파일을 열 수 없습니다"
@@ -9212,6 +9519,40 @@ msgstr ""
 #~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
 #, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "'%s' 디버그파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "'%s' 디버그파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "취소를 원하시면 RETURN을 누르세요\n"
 
@@ -9219,6 +9560,14 @@ msgstr ""
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
 
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "카테고리 %d를 위한 속성을 찾을 수 없습니다"
 
@@ -9249,15 +9598,3 @@ msgstr ""
 #~ "G_oldsite_describe() must be called immediately after G_fopen_sites_old()."
 #~ msgstr ""
 #~ "G_fopen_sites_old() 다음 즉시 G_oldsite_describe()를 호출해야 합니다."
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Datum %s 테이블파일을 열 수 없습니다"
diff --git a/locale/po/grasslibs_lv.po b/locale/po/grasslibs_lv.po
index 32440bb..75c78d4 100644
--- a/locale/po/grasslibs_lv.po
+++ b/locale/po/grasslibs_lv.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_lv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-01-24 11:11+0200\n"
 "Last-Translator: Maris Nartiss <maris.kde at gmail.com>\n"
 "Language-Team: Latvian <grass-translations at lists.osgeo.org>\n"
@@ -43,10 +43,12 @@ msgstr ""
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nav iespējams atvērt datu bāzi <%s> izmantojot <%s> dzinēju"
@@ -56,45 +58,45 @@ msgstr "Nav iespējams atvērt datu bāzi <%s> izmantojot <%s> dzinēju"
 msgid "Unable to get list tables in database <%s>"
 msgstr "neiespējami atvērt elipsoīda tabulas failu: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "neiespējami atvērt elipsoīda tabulas failu: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "Nevar atvērt datubāzi %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "Nevar atvērt datubāzi %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr ""
@@ -686,8 +688,8 @@ msgstr "Vect_write_line() šim formātam/līmenim nav atbalstīta"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -697,8 +699,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -800,12 +802,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -852,17 +854,17 @@ msgstr "Slāņa indekss ārpus robežām"
 msgid "Category index out of range"
 msgstr "Slāņa indekss ārpus robežām"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Kļūdu rakstīšana ārpus telpisko datu index faila.\n"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -930,8 +932,8 @@ msgstr "Nepareizu robežu skaits   :   %d\n"
 msgid "Number of redundant holes: %d"
 msgstr "Robežu skaits:   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr ""
@@ -1031,38 +1033,38 @@ msgstr "Laukumu skaits     :   -\n"
 msgid "Number of isles: -"
 msgstr "'Salu' skaits     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "Kļūdu raskrīšana ārpus topo faila.\n"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "Nevar izdzēst līniju, karte '%s' karte nav atvērta līmenī 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "Parametrs <%s> nav atbalstīts"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "Kļūdu rakstīšana ārpus telpisko datu index faila.\n"
@@ -1129,9 +1131,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1180,8 +1184,10 @@ msgstr "Nevar dzēst līniju"
 msgid "Unable to fetch data from table"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Nevar atvērt datubāzi %s"
@@ -1221,24 +1227,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr ""
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "dglShortestPath kļūda: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1258,7 +1264,7 @@ msgstr "Nevar nolasīt histogrammu priekš [%s no %s]"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1285,12 +1291,12 @@ msgstr ""
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1298,7 +1304,7 @@ msgstr ""
 msgid "GRASS is not compiled with OGR support"
 msgstr "GRASS nav kompilēts ar OGR atbalstu"
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr ""
@@ -1386,7 +1392,7 @@ msgstr "Neiespējami atvērt failu %s iekš %s"
 msgid "No connection defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Nederīgs mezgla ID: %d"
@@ -1401,7 +1407,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 msgid "Unable to open PG file"
 msgstr ""
 
@@ -1618,7 +1624,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "Vect_write_line() šim formātam/līmenim nav atbalstīta"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr "Nevar atvērt 'temp'/pagaidu failu"
@@ -1633,17 +1639,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Nevar atvērt 'temp'/pagaidu failu"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Nevar nolasīt histogrammu priekš [%s no %s]"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Neiespējami atvērt failu %s iekš %s"
@@ -1727,26 +1733,44 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+"Nebija iespējams izveidot jaunu novietojumu. Novietojums <%s> jau eksistē."
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
@@ -1850,7 +1874,8 @@ msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
@@ -1883,6 +1908,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Neiespējami atvērt failu %s iekš %s"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Neiespējami atvērt failu %s iekš %s"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Neiespējami atvērt failu %s iekš %s"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1891,7 +1931,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr ""
@@ -2174,7 +2214,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Vektoru karte <%s> pašreizējā karšu kopā nav atrasta"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2187,126 +2227,126 @@ msgstr "Vektorkarte <%s> nav atrasta"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nav iespējams atvērt vektoru karti <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr ""
 "Nav iespējams izveidot vektoru karti <%s>. Nosaukums nav SQL savietojams"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, fuzzy, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Vect_write_line() šim formātam/līmenim nav atbalstīta"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 msgid "Unable to open OGR file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2563,29 +2603,29 @@ msgstr "nezināns interpolācijas tips"
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr "nezināns interpolācijas tips"
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Pirmatnējo/vienkāršo datu skaits:   %d\n"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Veidojam topoloģiju... \n"
@@ -2615,75 +2655,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "Nevar nolasīt histogrammu priekš [%s no %s]"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Tiek veidots grafs..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Nav iespējams izveidot tīkla grafu"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-#, fuzzy
-msgid "Registering arcs..."
-msgstr "Saglabājam/reģistrējam līnijas"
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-#, fuzzy
-msgid "Cannot add network arc"
-msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-#, fuzzy
-msgid "Flattening the graph..."
-msgstr "Veidojam topoloģiju... \n"
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Grafs ir izveidots"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-"Nebija iespējams izveidot jaunu novietojumu. Novietojums <%s> jau eksistē."
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr ""
@@ -2786,14 +2757,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Pieslēgšanās izgāzusies\n"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Pieslēgšanās izgāzusies\n"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2854,60 +2832,55 @@ msgstr "Noklusējuma dzinējs nav iestatīts"
 msgid "Default database is not set"
 msgstr "Noklusējuma datubāze nav iestatīta"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Pieprasītā dbsaite %d, maksimāli iespējamo saišu skaits %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Nevar atvērt OGR DBMI dzinēju"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, fuzzy, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 " Tikai %d%% no loga ir saglabāts \"%s\" pārklājuma ar tekošo GRASS logu."
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr "GRASS nav kompilēts ar PostgreSQL atbalstu"
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 msgid "Unknown vector map format"
 msgstr "Nezināms vektordatu kartes formāts"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Nederīgs mezgla ID: %d"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, c-format
 msgid "Creating field <%s> failed"
@@ -3058,98 +3031,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Nezināma projekcija"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 #, fuzzy
 msgid "Vector map name is not SQL compliant"
 msgstr "Kartes nosaukums nav SQL savietojams."
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, fuzzy, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, fuzzy, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Niespējami izveidot atkarību failu [%s iekš %s]"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, fuzzy, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, fuzzy, c-format
 msgid "Unable to open directory '%s'"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, fuzzy, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, fuzzy, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/vector/Vlib/map.c:487
+#: ../lib/vector/Vlib/map.c:528
 #, fuzzy, c-format
-msgid "Unable to remove directory '%s'"
+msgid "Unable to remove directory '%s': %s"
 msgstr "neispējami mainīt direktoriju uz %s"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3234,6 +3207,148 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Tiek veidots grafs..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Nav iespējams izveidot tīkla grafu"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Nevar atvērt datubāzi %s"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+#, fuzzy
+msgid "Registering arcs..."
+msgstr "Saglabājam/reģistrējam līnijas"
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+#, fuzzy
+msgid "Flattening the graph..."
+msgstr "Veidojam topoloģiju... \n"
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Grafs ir izveidots"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+#, fuzzy
+msgid "Cannot add network arc"
+msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3349,7 +3464,7 @@ msgid "3D raster map <%s> not found"
 msgstr "3D rastra karte <%s> nav atrasta"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3491,88 +3606,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Nevar atvērt 'temp'/pagaidu failu"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Neiespējami atvērt failu %s iekš %s"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 #, fuzzy
 msgid "Error executing: Rast_get_ith_cat"
 msgstr "eksistējošām rastra kartēm %d"
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 msgid "Null value detected"
 msgstr "Konstatēta NULL vērtība"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "eksistējošām rastra kartēm %d"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Nevar ierakstīt līniju,karte nav atvērta"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Dubulto atribūtu indekss ārpus diapazona"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Ieejas vektors '%s' nav atrasts"
@@ -3581,32 +3706,36 @@ msgstr "Ieejas vektors '%s' nav atrasts"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "neispējami mainīt direktoriju uz %s"
@@ -3646,7 +3775,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Ievades rastra failu nosaukumi"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3663,12 +3792,12 @@ msgid "Error computing map <%s>"
 msgstr "Kļūdu raskrīšana ārpus topo faila.\n"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3682,9 +3811,9 @@ msgstr "Ieejas vektors '%s' nav atrasts"
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, fuzzy, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3696,93 +3825,93 @@ msgstr "Ieejas vektors '%s' nav atrasts"
 msgid "Unknown dataset type: %s"
 msgstr "nezināns interpolācijas tips"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  formāts: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr ""
 "Nederīgs liakspiedola(timestamp) fails priekš %s kartes %s  karšu biblotēkā "
 "%s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr "Iekšēja kļūda"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr ""
 "Nederīgs liakspiedola(timestamp) fails priekš %s kartes %s  karšu biblotēkā "
 "%s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr ""
 "Nederīgs liakspiedola(timestamp) fails priekš %s kartes %s  karšu biblotēkā "
 "%s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
@@ -3812,132 +3941,132 @@ msgstr "neispējami mainīt direktoriju uz %s"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Eksportē laukumus..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "Nevar atvērt 'temp'/pagaidu failu"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "neispējami atvērt datumu tabulas failu: %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, fuzzy, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 #, fuzzy
 msgid "The archive file is of wrong space time dataset type"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "neispējami atrast pagaidu null failu: %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "neispējami atrast pagaidu null failu: %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Neiespējami atvērt %s priekš rakstīšanas"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 msgid "Unsupported input format"
 msgstr "Ievades objektu tips"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Ievades rastra failu nosaukumi"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3962,20 +4091,20 @@ msgid ""
 "%s"
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "neispējami atvērt datumu tabulas failu: %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3984,7 +4113,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "neispējami atvērt datumu tabulas failu: %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3992,12 +4121,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "neispējami atvērt datumu tabulas failu: %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Nevar atvērt datubāzi %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4005,49 +4134,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, fuzzy, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr "neispējami atvērt datumu tabulas failu: %s"
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "neispējami atvērt datumu tabulas failu: %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/core.py:954
-#, fuzzy, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr "neispējami atvērt datumu tabulas failu: %s"
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "neiespējami izpildīt komandu"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nevar atvērt vēsturi vektoram '%s'"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "neiespējami atrast [%s]"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nevar atvērt vēsturi vektoram '%s'"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/core.py:994
-#, fuzzy, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr "Nevar atvērt vēsturi vektoram '%s'"
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "neiespējami izpildīt komandu"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4055,182 +4172,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "neiespējami izpildīt komandu"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "neiespējami izpildīt komandu"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "nezināns interpolācijas tips"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  formāts: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "nezināns interpolācijas tips"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Ievades rastra failu nosaukumi"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  formāts: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, fuzzy, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, fuzzy, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, fuzzy, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, fuzzy, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, fuzzy, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, fuzzy, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, fuzzy, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, fuzzy, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4238,19 +4355,19 @@ msgid ""
 "mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4314,58 +4431,65 @@ msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Nevar atvērt 'temp'/pagaidu failu"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Bāzes rastra faila nosaukums"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, fuzzy, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr "Krāsa"
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  formāts: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Bāzes rastra faila nosaukums"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4537,28 +4661,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
@@ -4588,105 +4712,123 @@ msgstr "Parametrs <%s> nav atbalstīts"
 msgid "Unable to parse time string: %s"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Ievades rastra faila nosaukums"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, fuzzy, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Ievades kartes tips"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+#, fuzzy
+msgid "Merging empty map lists"
+msgstr "Lauku atdalītājs"
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr "Lauku atdalītājs"
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr "Objekta id"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
@@ -4695,40 +4837,40 @@ msgstr ""
 "Nevar izveidot laikspiedola(timestamp) failu priekš %s kartes %s karšu "
 "biblitēkā %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 "Nederīgs liakspiedola(timestamp) fails priekš %s kartes %s  karšu biblotēkā "
 "%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 "Nederīgs liakspiedola(timestamp) fails priekš %s kartes %s  karšu biblotēkā "
 "%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Austrumiem ir jābūt lielākiem nekā Rietumiem"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Austrumiem ir jābūt lielākiem nekā Rietumiem"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
@@ -4737,48 +4879,72 @@ msgstr ""
 "Nevar izveidot laikspiedola(timestamp) failu priekš %s kartes %s karšu "
 "biblitēkā %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Austrumiem ir jābūt lielākiem nekā Rietumiem"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, fuzzy, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4790,32 +4956,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "nav zināms"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s nav atrasts"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "prasītais: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4823,96 +4989,131 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
-msgid "Cannot find the executable {}"
-msgstr ""
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Nederīgs mezgla ID: %d"
 
-#: ../lib/python/script/core.py:288
-#, python-format
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "neispējami mainīt direktoriju uz %s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Nederīgs kartes tips <%d>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Nederīgs mezgla ID: %d"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
+msgid "Cannot find the executable {}"
+msgstr ""
+
+#: ../lib/python/script/core.py:304
+#, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
 "conflict with Python keywords. Underscore at the beginning is depreciated in "
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Neisespējami atvērt %s"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, fuzzy, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Vektors '%s' jau eksistē un tiks pārrakstīts."
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Neatļauts faila nosaukums.  Nevar būt '.' vai 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Neatļauts faila nosaukums. zīme <%c> nav atļauta.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4921,24 +5122,24 @@ msgstr ""
 "Nevar izdzēst līniju, karte '%s' karte nav atvērta rakstīšanas 'write' "
 "režijmā"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "nav datu"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr "vērtība"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr "nosaukums"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr "krāsa"
 
@@ -5035,7 +5236,7 @@ msgstr "Nav iespējams atvērt failu <%s> rakstīšanai"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Rastra karte <%s> nav atrasta"
@@ -5529,12 +5730,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "nav %s faili pieejami pašreizējā karšu biblotēkā\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "nav %s faili pieejami pašreizējā karšu biblotēkā\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5757,7 +5958,7 @@ msgstr ""
 msgid "WARNING: "
 msgstr "BRĪDINĀJUMS:"
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "KĻŪDA: "
@@ -5892,7 +6093,7 @@ msgstr "dubultot formāta lauku"
 msgid "Duplicate compressed field"
 msgstr "dubultot kompresēto lauku"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "Novietojums <%s> neeksistē"
@@ -6016,22 +6217,22 @@ msgstr "GISRC - mainīgais nav norādīts"
 msgid "Variable '%s' not set"
 msgstr "Mainīgais '%s' nav iestatīts"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "G_spawn: neispējami atvērt failu %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: neispējami atvērt failu %s"
@@ -6086,12 +6287,12 @@ msgstr "nederīgs a: lauks %s failā %s pie %s"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Nav sneigta eleipsoīda infromācija failā %s pie %s"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr ""
@@ -6109,16 +6310,16 @@ msgid "SYNOPSIS"
 msgstr "KOPSAVILKUMS"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Karogi"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parametri"
 
@@ -6132,6 +6333,10 @@ msgstr " opcijas: %s\n"
 msgid "Default"
 msgstr " noklusēts: %s\n"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6211,16 +6416,21 @@ msgstr ""
 msgid "Flags:"
 msgstr "Karogi:"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Klusināt moduļa izvadi"
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr "Parametri:"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   noklusētais: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   opcijas: "
@@ -6495,188 +6705,188 @@ msgstr ""
 msgid "Category value"
 msgstr "Kategorijas vērtība"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Kategoriju vērtības"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Piemēram: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Objekta id"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Objektu id"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Ievades faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Izvades faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Lauka atdalītājs"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Krāsa"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Atvērtā faila nosaukums %s"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr "Vienības"
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 msgid "Coordinates"
 msgstr "Koordinātes"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 msgid "Name of color table"
 msgstr "Krāsu tabulas nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 msgid "Name of saved region"
 msgstr "Saglabātā reģiona nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Ievades rastra failu nosaukumi"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Izvades rastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Reljefa rastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Reljefa rastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Izvades rastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 msgid "Name of the input space time vector dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Ieejas vektorkartes nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Izejas vektorkartes nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Ieejas 3drastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Ieejas 3drastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Izejas 3drastra faila nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 msgid "Name of the input map"
 msgstr "Ievades kartes nosaukums"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 msgid "Name of the input maps"
 msgstr "Ievades karšu nosaukumi"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 msgid "Type of the input map"
 msgstr "Ievades kartes tips"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
@@ -6685,22 +6895,31 @@ msgstr ""
 "KUR  SQL pieprasījuma nosacījumi bez 'where' atslēgvārda. (piemērs: income < "
 "1000 and inhab >= 10000)"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 msgid "Do not create attribute table"
 msgstr "Neveidot atribūtu tabulu"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr "Neveidot topoloģiju"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6817,77 +7036,81 @@ msgstr ""
 msgid "no description"
 msgstr "nav apraksta"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Atvainojiet, <%s> nav derīgs parametrs"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr "KĻŪDA"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Nav iespējams noteikt programmas nosaukumu"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Atvainojiet, <%c> ir nedrīgs karogs"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Atvainojiet, <%s=> nav viennozīmīgi"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Atvainojiet, <%s> ir nedrīgs parametrs"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s>karšu kopā <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr "<%s> opcija nepieņem vairākus parametrus"
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6896,7 +7119,7 @@ msgstr ""
 "\n"
 "Kļūda: nepieņemama parametra sintakse <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6905,14 +7128,14 @@ msgstr ""
 "\n"
 "Kļūda: vērtība <%s> ir ārpus apgabala parametram  <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "Kļūda: Trūkst vērtība parametram <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -6921,7 +7144,7 @@ msgstr ""
 "\n"
 "Kļūda: vērtība <%s> ir ārpus apgabala parametram  <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -6931,7 +7154,7 @@ msgstr ""
 "KĻŪDA: Prasītais parametrs <%s> nav iestatīts:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -6940,37 +7163,37 @@ msgstr ""
 "\n"
 "Kļūda: opcija/pazīme <%s> ir jabūt paredzētai daudzskaitlīgi no %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Atvainojiet, <%s> nav derīgs parametrs"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Nav norādīts atdalītājs"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Atvainojiet, <%s> nav derīgs parametrs"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Parametrs <%s> nav atbalstīts"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
@@ -7886,15 +8109,35 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr "Failā nav sniegta elipsoīda informācija"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Izgāzusies arhivētā faila lasīšanas inicializācija [%s iekš %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Izgāzusies arhivētā faila lasīšanas inicializācija [%s iekš %s]"
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7925,51 +8168,46 @@ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Kļūdu rakstīšana ārpus telpisko datu index faila.\n"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "G_spawn: neispējami atvērt failu %s"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "neispējami atrast pagaidu null failu: %s"
+msgid "No null file for <%s>"
+msgstr "G_spawn: neispējami atvērt failu %s"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: neispējami atvērt failu %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "Kļūdas rakstīšana null row %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "Ieejas vektors '%s' nav atrasts"
@@ -8060,22 +8298,22 @@ msgstr "neispējami mainīt direktoriju uz %s"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Nepareizs deskriptors: %d"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "neispējami mainīt direktoriju uz %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 
@@ -8165,104 +8403,104 @@ msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 "[%s] karšu biblotēkā [%s]-formāta lauks faila galvā (header) ir nederīgs"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Ieejas vektors '%s' nav atrasts"
+msgid "Compression with %s is not supported"
+msgstr "Parametrs <%s> nav atbalstīts"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "G_spawn: neispējami atvērt failu %s"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr "Nederīgs kartes tips <%d>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr "%s - ** neatļauts vārds/nosaukums **"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "Krāsu fails priekš [%s] nav pieejams"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "neiespējami atrast [%s]"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, fuzzy, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "nederīgs tips: lauks %s failā %s"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "nederīgs tips: lauks %s failā %s"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, fuzzy, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Ieejas vektors '%s' nav atrasts"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8302,24 +8540,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Kļūdu rakstīšana ārpus telpisko datu index faila.\n"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "kļūda lasot NULL rindu %d"
@@ -8550,33 +8804,28 @@ msgstr "nav zināms"
 msgid "Unsupported icon %d"
 msgstr "nezināns interpolācijas tips"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Neiespējami atvērt failu %s iekš %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8652,126 +8901,171 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Neiespējami atvērt failu %s iekš %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr "BRĪDINĀJUMS"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr "Iziet..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr "Lietojums"
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr "izdrukā šo palīdzības paziņojumu"
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr "parāda versijas informāciju un iziet"
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 #, fuzzy
 msgid "use text based interface (skip welcome screen)"
 msgstr "lietot teksta bāzētu saskarni"
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "lai apstiprinātu noklusēto"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 #, fuzzy
 msgid "use text based interface (show welcome screen)"
 msgstr "lietot teksta bāzētu saskarni"
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr "izdrukā GRASS konfigurācijas parametrus"
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
+#, fuzzy
+msgid "initial GRASS Location"
+msgstr "KĻŪDA: <%s> nav derīgs GRASS novietojums"
+
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr ""
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8781,284 +9075,301 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Atvainojiet, <%s> nav derīgs parametrs"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, fuzzy, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 "Karšu kopa <%s> GRASS novietojumā <%s> neeksistē. Jaunu karšu kopu var "
 "izveidot ar '-c' parametru."
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 "Nebija iespējams izveidot jaunu novietojumu. Novietojums <%s> jau eksistē."
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
+"Grafiskajā vidē bija pieprasīta iziešana.\n"
+"GRASS GIS netiks startēts."
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
-msgstr ""
-
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "Ceļš '%s' neeksitē"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr "Ceļš '%s' nav pieejams."
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr "Jūs neesat '%s' īpašnieks."
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 msgid "Building user fontcap..."
 msgstr ""
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
+#: ../lib/init/grass.py:1289
+msgid "The SHELL variable is not set"
 msgstr ""
 
-#: ../lib/init/grass.py:967
-msgid "The SHELL variable is not set"
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
 msgstr ""
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
+#: ../lib/init/grass.py:1343
 #, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+msgid "Executing <%s> ..."
+msgstr "Izpilda <%s>...."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Pieslēgšanās izgāzusies\n"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Pieslēgšanās izgāzusies\n"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+msgid "Unable to close GUI. {}"
+msgstr "Nevar aizvērt GUI. {}"
+
+#: ../lib/init/grass.py:1411
 #, fuzzy, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr "Laipni lūdzam GRASS %s"
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr "GRASS GIS mājas lapa:"
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr "Šo versiju darbina"
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr "Palīdzība ir pieejama ar komandu:"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr "Licences informācija ir pieejama:"
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 #, fuzzy
 msgid "See citation options with:"
 msgstr "Licences informācija ir pieejama:"
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr "Ja nepieciešams, grafisko vidi var pārstartēt ar:"
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr "Grafiskās vides startēšana: "
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr "Lai izietu, izpildiet:"
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 #, fuzzy
 msgid "2D and 3D raster MASKs present"
 msgstr "[Ir rastra MASKa]"
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 #, fuzzy
 msgid "Raster MASK present"
 msgstr "[Ir rastra MASKa]"
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 #, fuzzy
 msgid "3D raster MASK present"
 msgstr "[Ir rastra MASKa]"
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
+#: ../lib/init/grass.py:1576
+msgid "Done."
+msgstr "Pabeigts."
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr "Uz redzēšanos"
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr "Pabeigts."
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr "Satīra pagaidu failus..."
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Parametrs <%s> nav atbalstīts"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr "Startē GRASS GIS..."
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr "Startē <%s> grafisko vidi fona režīmā. Lūdzu uzgaidiet..."
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, python-format
 msgid "Failed to start shell '%s'"
 msgstr ""
@@ -9324,208 +9635,84 @@ msgstr ""
 msgid "%s: out of memory"
 msgstr "Neiespējami piešķirt atmiņu\n"
 
-#, fuzzy
-#~ msgid "Unable to restore feature/offset %lu in vector map <%s>"
-#~ msgstr "Nevar atvērt vēsturi vektoram '%s'"
+#~ msgid ""
+#~ "Path '%s' not accessible\n"
+#~ "and you are not the owner of it."
+#~ msgstr ""
+#~ "Ceļš '%s' nav pieejams\n"
+#~ "un jūs neesat tā īpašnieks."
 
 #, fuzzy
 #~ msgid "Out of memmory"
 #~ msgstr "Neiespējami piešķirt atmiņu\n"
 
 #, fuzzy
-#~ msgid "ERROR: option <%s>: <%s> exists.\n"
-#~ msgstr "Kļūda: opcija/pazīme <%s>: <%s> jau eksistē.\n"
-
-#~ msgid "Hit RETURN to continue"
-#~ msgstr "Spied ENTER, lai turpinātu"
-
-#, fuzzy
-#~ msgid "Vector map <%s> is not opened on topology level"
-#~ msgstr "Vektoru karte <%s> nav atvērta"
-
-#~ msgid "Attributes for category %d not found"
-#~ msgstr "Kategorijai %d atribūti nav atrasti"
-
-#~ msgid "Category must be integer"
-#~ msgstr "Kategorijai ir jābūt veselam skaitlim"
-
-#~ msgid "Memory error in writing timestamp"
-#~ msgstr "Laika zīmoga rakstīšanas atmiņas kļūda"
-
-#~ msgid "Illegal TimeStamp string"
-#~ msgstr "Nederīgs laika zīmoga teksts"
-
-#~ msgid "Cannot fetch row"
-#~ msgstr "Nevar saņemt rindu"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "Ieejas vektors '%s' nav atrasts"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "neispējami mainīt direktoriju uz %s"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "neispējami mainīt direktoriju uz %s"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Ievades rastra faila nosaukums"
-
-#, fuzzy
-#~ msgid "Unable to mogrify sql statement. "
-#~ msgstr "neispējami mainīt direktoriju uz %s"
-
-#, fuzzy
-#~ msgid "Unable to check table. "
-#~ msgstr "Neiespējami atvērt failu %s iekš %s"
-
-#, fuzzy
-#~ msgid "Unable to execute sql statement. "
-#~ msgstr "neiespējami izpildīt komandu"
-
-#, fuzzy
-#~ msgid "Unable to fetch one. "
-#~ msgstr "neiespējami atrast [%s]"
-
-#, fuzzy
-#~ msgid "Unable to fetch all. "
-#~ msgstr "Neiespējami atvērt failu %s iekš %s"
-
-#, fuzzy
-#~ msgid "Unable to execute transaction. "
-#~ msgstr "neiespējami izpildīt komandu"
-
-#, fuzzy
-#~ msgid "Merging empty map lists"
-#~ msgstr "Lauku atdalītājs"
-
-#, fuzzy
-#~ msgid "Space time datasets to merge must have the same temporal type"
-#~ msgstr "neiespējami atvērt rastra karti [%s iekš %s]"
-
-#, fuzzy
-#~ msgid "Unable to read line of feature %i"
-#~ msgstr "Nevar atvērt 'temp'/pagaidu failu"
-
-#, fuzzy
-#~ msgid "Unable to read area with id %i"
-#~ msgstr "Neiespējami atvērt failu %s iekš %s"
-
-#, fuzzy
-#~ msgid "Error uncompressing raster data for row %d of <%s>"
-#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
-
-#, fuzzy
-#~ msgid "Error reading null data for row %d of <%s>"
-#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
-
-#, fuzzy
-#~ msgid "Error uncompressing null data for row %d of <%s>"
-#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
-
-#, fuzzy
-#~ msgid "Error writing compressed null data for row %d of <%s>"
-#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
-
-#, fuzzy
-#~ msgid "Compression with %s is not supported"
-#~ msgstr "Parametrs <%s> nav atbalstīts"
-
-#, fuzzy
-#~ msgid "Raster map <%s> does not exist in the current mapset (%s)"
-#~ msgstr ""
-#~ "Defekts: atteikts papildināt karti,kura nav tekošajā karšu komplektā."
-
-#, fuzzy
-#~ msgid "Fail of initial read of compressed null file [%s in %s]"
-#~ msgstr "Izgāzusies arhivētā faila lasīšanas inicializācija [%s iekš %s]"
-
-#, fuzzy
-#~ msgid "initial GRASS Location"
-#~ msgstr "KĻŪDA: <%s> nav derīgs GRASS novietojums"
-
-#, fuzzy
 #~ msgid ""
-#~ "Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset "
-#~ "can be created by '-c' switch."
-#~ msgstr ""
-#~ "Karšu kopa <%s> GRASS novietojumā <%s> neeksistē. Jaunu karšu kopu var "
-#~ "izveidot ar '-c' parametru."
+#~ "Unable to mogrify sql statement. There is no temporal database connection "
+#~ "defined for mapset <%(mapset)s>"
+#~ msgstr "neispējami atvērt datumu tabulas failu: %s"
 
+#, fuzzy
 #~ msgid ""
-#~ "Exit was requested in GUI.\n"
-#~ "GRASS GIS will not start. Bye."
-#~ msgstr ""
-#~ "Grafiskajā vidē bija pieprasīta iziešana.\n"
-#~ "GRASS GIS netiks startēts."
-
-#~ msgid "Executing <%s> ..."
-#~ msgstr "Izpilda <%s>...."
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "neispējami atvērt datumu tabulas failu: %s"
 
 #, fuzzy
 #~ msgid ""
-#~ "Execution of <{cmd}> failed:\n"
-#~ "{error}"
-#~ msgstr "Pieslēgšanās izgāzusies\n"
+#~ "Unable to execute sql statement. There is no temporal database connection "
+#~ "defined for mapset <%(mapset)s>"
+#~ msgstr "neispējami atvērt datumu tabulas failu: %s"
 
 #, fuzzy
-#~ msgid "Execution of <%s> finished."
-#~ msgstr "Pieslēgšanās izgāzusies\n"
-
-#~ msgid "Unable to close GUI. {}"
-#~ msgstr "Nevar aizvērt GUI. {}"
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
 #, fuzzy
-#~ msgid "Unable to create '%s': %s"
-#~ msgstr "Neiespējami atvērt failu %s iekš %s"
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
 #, fuzzy
-#~ msgid "Unable to copy '%s': %s"
-#~ msgstr "Neiespējami atvērt failu %s iekš %s"
+#~ msgid ""
+#~ "Unable to execute transaction. There is no temporal database connection "
+#~ "defined for mapset <%(mapset)s>"
+#~ msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
 #, fuzzy
-#~ msgid "Unable to drop table <%s>"
-#~ msgstr "Neiespējami atvērt failu %s iekš %s"
+#~ msgid "Error writing uncompressed FP data for row %d of <%s>"
+#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
 #, fuzzy
-#~ msgid "Unable to remove directory '%s': %s"
-#~ msgstr "neispējami mainīt direktoriju uz %s"
+#~ msgid "Error writing compressed FP data for row %d of <%s>"
+#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
 
 #, fuzzy
-#~ msgid "Turntable column <%s> not found in table <%s>"
-#~ msgstr "Nevar atvērt datubāzi %s"
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "neispējami atrast pagaidu null failu: %s"
 
 #, fuzzy
-#~ msgid "Cannot add network arc for virtual node connection."
-#~ msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: neispējami atvērt failu %s"
 
 #, fuzzy
-#~ msgid "Cannot add network arc representing turn."
-#~ msgstr "Nevar atvērt topo failu rakstīšanai: %s\n"
+#~ msgid "Unable to restore feature/offset %lu in vector map <%s>"
+#~ msgstr "Nevar atvērt vēsturi vektoram '%s'"
 
 #, fuzzy
-#~ msgid ""
-#~ "Execution failed: %s (...)\n"
-#~ "Reason: %s"
-#~ msgstr "Pieslēgšanās izgāzusies\n"
-
-#~ msgid ""
-#~ "Path '%s' not accessible\n"
-#~ "and you are not the owner of it."
-#~ msgstr ""
-#~ "Ceļš '%s' nav pieejams\n"
-#~ "un jūs neesat tā īpašnieks."
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Nederīgs mezgla ID: %d"
 
 #, fuzzy
-#~ msgid "Error writing uncompressed FP data for row %d of <%s>"
-#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Atvainojiet, <%s> nav derīgs parametrs"
 
 #, fuzzy
-#~ msgid "Error writing compressed FP data for row %d of <%s>"
-#~ msgstr "kļūda nolasot %smap [%s] karšu biblotēkā [%s], līnija %d"
+#~ msgid "ERROR: option <%s>: <%s> exists.\n"
+#~ msgstr "Kļūda: opcija/pazīme <%s>: <%s> jau eksistē.\n"
 
 #, fuzzy
 #~ msgid "Unable to allocate stream"
@@ -9560,3 +9747,41 @@ msgstr "Neiespējami piešķirt atmiņu\n"
 #, fuzzy
 #~ msgid "Unable to open <%s>"
 #~ msgstr "Neiespējami atvērt failu %s iekš %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Neiespējami atvērt failu %s iekš %s"
+
+#~ msgid "Hit RETURN to continue"
+#~ msgstr "Spied ENTER, lai turpinātu"
+
+#, fuzzy
+#~ msgid "Vector map <%s> is not opened on topology level"
+#~ msgstr "Vektoru karte <%s> nav atvērta"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Ievades rastra faila nosaukums"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "Ieejas vektors '%s' nav atrasts"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "neispējami mainīt direktoriju uz %s"
+
+#~ msgid "Attributes for category %d not found"
+#~ msgstr "Kategorijai %d atribūti nav atrasti"
+
+#~ msgid "Category must be integer"
+#~ msgstr "Kategorijai ir jābūt veselam skaitlim"
+
+#~ msgid "Memory error in writing timestamp"
+#~ msgstr "Laika zīmoga rakstīšanas atmiņas kļūda"
+
+#~ msgid "Illegal TimeStamp string"
+#~ msgstr "Nederīgs laika zīmoga teksts"
+
+#~ msgid "Cannot fetch row"
+#~ msgstr "Nevar saņemt rindu"
diff --git a/locale/po/grasslibs_ml.po b/locale/po/grasslibs_ml.po
index 7fd01f9..0944a27 100644
--- a/locale/po/grasslibs_ml.po
+++ b/locale/po/grasslibs_ml.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_ml\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2010-08-24 11:31+0530\n"
 "Last-Translator: Mohammed Rashad <rashadkm at gmail.com>\n"
 "Language-Team: GRASS Malayalam Translation Team <rashadkm at gmail.com>\n"
@@ -39,10 +39,12 @@ msgstr "ഡ്രയ്വ്വർ തുടങ്ങാൻ സാധിക്
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "ഡേറ്റാബേയ്സ് <%s> തുറക്കൻ പറ്റുന്നില്ല <%s>"
@@ -52,45 +54,45 @@ msgstr "ഡേറ്റാബേയ്സ് <%s> തുറക്കൻ പറ
 msgid "Unable to get list tables in database <%s>"
 msgstr "ടേബിലിന്റെ പട്ടിക ഡേറ്റാബേയ്സിൽ നിന്ന് വായിക്കാൻ പട്ടുന്നില്ല <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "കളം <%s> അക്കമല്ല"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "കളം കണ്മനില്ല <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "കളത്തിന്റെ തരത്തിൽ പിശക് (കളം <%s>)"
@@ -659,8 +661,8 @@ msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാന
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -670,8 +672,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -772,12 +774,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -824,16 +826,16 @@ msgstr ""
 msgid "Category index out of range"
 msgstr "തരം അക്കമായിരിക്കണം"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 msgid "Error writing out category index file"
 msgstr ""
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -897,8 +899,8 @@ msgstr ""
 msgid "Number of redundant holes: %d"
 msgstr "അതിർത്തികളുടെ എണ്ണം: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
@@ -995,36 +997,36 @@ msgstr ""
 msgid "Number of isles: -"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr ""
 
@@ -1090,9 +1092,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1141,8 +1145,10 @@ msgstr "തിരഞ്ഞെടുത്ത രേഖകൾ ടേബിളി
 msgid "Unable to fetch data from table"
 msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "കളം <%s> ടേബിളിൽ <%s> കാണ്മനില്ല"
@@ -1181,24 +1187,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr ""
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1218,7 +1224,7 @@ msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1245,12 +1251,12 @@ msgstr ""
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1258,7 +1264,7 @@ msgstr ""
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
@@ -1348,7 +1354,7 @@ msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 msgid "No connection defined"
 msgstr "കണക്ഷൻ നിർവീര്യമായി."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr ""
@@ -1366,7 +1372,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
@@ -1584,7 +1590,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr ""
 
@@ -1598,17 +1604,17 @@ msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
@@ -1692,26 +1698,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "ഡ്രയ്വ്വർ തുറക്കൻ പറ്റുന്നില്ല <%s>"
@@ -1813,7 +1836,8 @@ msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ
 msgid "Unable to add database link for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr ""
@@ -1845,6 +1869,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "തുറക്കാൻ പറ്റുന്നില്ല <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "ടേബിൾ കളയാൻ പറ്റുന്നില്ല: '%s'"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1853,7 +1892,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "OGR ഡേറ്റയുടെ ഉറവിടം തുറക്കാൻ പറ്റുന്നില്ല '%s'"
@@ -2133,7 +2172,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2146,125 +2185,125 @@ msgstr ""
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 msgid "Using native format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2517,29 +2556,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "പ്രാജീനമായതിന്റെ എണ്ണം: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "ചതുരയളവ് പണിയുന്നു..."
@@ -2569,71 +2608,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr ""
@@ -2734,14 +2708,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "കണക്ഷൻ നിർവീര്യമായി."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "കണക്ഷൻ നിർവീര്യമായി."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2801,59 +2782,54 @@ msgstr ""
 msgid "Default database is not set"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "ലെയർ തുറക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 msgid "Unknown vector map format"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, c-format
-msgid "Invalid offset (%d)"
-msgstr ""
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3003,98 +2979,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
-msgstr ""
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
+msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
 #: ../lib/vector/Vlib/constraint.c:150
 msgid "Layer constraint ignored for non-native vector formats"
@@ -3179,6 +3155,143 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr "മാപ്പിന്റെ ഘടന അടച്ച് കളഞു"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "കളം <%s> ടേബിളിൽ <%s> കാണ്മനില്ല"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+msgid "Cannot add network arc for virtual node connection."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+msgid "Cannot add network arc representing turn."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr ""
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3293,7 +3406,7 @@ msgid "3D raster map <%s> not found"
 msgstr ""
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3435,87 +3548,97 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 msgid "Error executing: Rast_set_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, python-format
 msgid "Index out of range: %r."
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "ഗ്രൂപ്പ് <%s> കാലിയാണ്‌ \n"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
@@ -3524,32 +3647,36 @@ msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാന
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
@@ -3589,7 +3716,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3606,12 +3733,12 @@ msgid "Error computing map <%s>"
 msgstr ""
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3625,9 +3752,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3639,86 +3766,86 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 msgid "Error in computation process"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
@@ -3748,132 +3875,132 @@ msgstr "വെക്റ്റർ അടയ്ക്കാൻ പറ്റുന
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "ചതുരയളവ് പണിയുന്നു..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "വെക്റ്റർ ഡേറ്റാബേയ്സ് ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല '%s'"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3898,20 +4025,20 @@ msgid ""
 "%s"
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "വെക്റ്റർ ഡേറ്റാബേയ്സ് ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല '%s'"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3920,7 +4047,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "വെക്റ്റർ ഡേറ്റാബേയ്സ് ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല '%s'"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3928,12 +4055,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "വെക്റ്റർ ഡേറ്റാബേയ്സ് ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല '%s'"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -3941,49 +4068,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "തുറക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "വെക്റ്റർ ഡേറ്റാബേയ്സ് ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല '%s'"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "താല്ക്കാലിക ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "വെക്റ്റർ അടയ്ക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "താല്ക്കാലിക ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -3991,182 +4106,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "താല്ക്കാലിക ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "താല്ക്കാലിക ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4174,19 +4289,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4247,57 +4362,64 @@ msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 msgid "Error occurred in r.series computation"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4463,28 +4585,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
@@ -4514,188 +4636,229 @@ msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാന
 msgid "Unable to parse time string: %s"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 msgid "Wrong type of input "
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4707,30 +4870,30 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 msgid "unknown"
 msgstr ""
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr ""
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr ""
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4738,16 +4901,59 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr ""
+"\n"
+"%s തെറ്റിപ്പൊയി; വീണ്ടും ശ്രമിക്കുക >"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr ""
+"\n"
+"%s തെറ്റിപ്പൊയി; വീണ്ടും ശ്രമിക്കുക >"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr ""
+"\n"
+"%s തെറ്റിപ്പൊയി; വീണ്ടും ശ്രമിക്കുക >"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr ""
+"\n"
+"%s തെറ്റിപ്പൊയി; വീണ്ടും ശ്രമിക്കുക >"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4755,103 +4961,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "വെക്റ്റർ അടയ്ക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "ഈ ടേബിൾ <%s> ഡേറ്റാബേയ്സിൽ ഉണ്ട് <%s>"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "അസാധുവായ ടേബിൾ മാപ്പിന്റെ പേർ <%s> '.' ഉണ്ടാകാൻ പാടില്ല \n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "അസാധുവായ ടേബിൾ മാപ്പിന്റെ പേർ <%s> ഈ അക്ഷരം അനുവദിക്കുന്നതല്ല <%c> \n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr ""
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr ""
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr ""
 
@@ -4948,7 +5154,7 @@ msgstr ""
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
@@ -5442,12 +5648,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "<%s> മാപ്പ്സെറ്റിൽ <%s>"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "<%s> മാപ്പ്സെറ്റിൽ <%s>"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5661,7 +5867,7 @@ msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ
 msgid "WARNING: "
 msgstr ""
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr ""
@@ -5776,7 +5982,7 @@ msgstr ""
 msgid "Duplicate compressed field"
 msgstr ""
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "ഗ്രൂപ്പ് <%s> കാലിയാണ്‌ \n"
@@ -5901,22 +6107,22 @@ msgstr ""
 msgid "Variable '%s' not set"
 msgstr ""
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
@@ -5970,12 +6176,12 @@ msgstr ""
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr ""
@@ -5993,16 +6199,16 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr ""
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr ""
 
@@ -6014,6 +6220,10 @@ msgstr ""
 msgid "Default"
 msgstr ""
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6093,16 +6303,20 @@ msgstr ""
 msgid "Flags:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr ""
@@ -6376,212 +6590,221 @@ msgstr ""
 msgid "Category value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 msgid "Coordinates"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 msgid "Name of the output space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 msgid "Name of the input space time vector dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 msgid "Name of the input space time vector datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 msgid "Name of the output space time vector dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 msgid "Type of the input map"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6696,147 +6919,151 @@ msgstr ""
 msgid "no description"
 msgstr ""
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr ""
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr ""
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr ""
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr ""
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr ""
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> മാപ്പ്സെറ്റിൽ <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
 "\tPresented as: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
 "\tLegal range: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
 "\tValid options: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
 "\t(%s)"
 msgstr ""
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
 "\tYou provided %d item(s): %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, c-format
 msgid "%s= is not a separator option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, c-format
 msgid "%s= is not a file option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
@@ -7730,15 +7957,35 @@ msgstr "ഫയലിൽ ഉള്ള എല്ലിപ്സോയിട് വ
 msgid "No ellipsoid info given in file"
 msgstr "എല്ലിപ്സോയിട് വിവരങ്ങൾ ഫയലിൽ എല്ല"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr ""
 
+#: ../lib/raster/format.c:176
+#, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr ""
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7769,51 +8016,46 @@ msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr ""
 
+#: ../lib/raster/put_row.c:486
+msgid "GDAL output doesn't support writing null rows separately"
+msgstr ""
+
 #: ../lib/raster/put_row.c:489
 #, c-format
 msgid "No null file for <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:503
-msgid "GDAL output doesn't support writing null rows separately"
-msgstr ""
-
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
-
-#: ../lib/raster/put_row.c:528
-#, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "ദറ്റും പട്ടികയിലെ <%s> വരിയിൽ പിശക്, %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr ""
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr ""
 
@@ -7903,22 +8145,22 @@ msgstr ""
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr ""
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 
@@ -8003,104 +8245,104 @@ msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
+msgid "Compression with %s is not supported"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr ""
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr ""
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr ""
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr ""
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "തെറ്റ്: നിലവിലുള്ള മാപ്പ്സെറ്റിലില്ലാത്ത മാപ്പിനെ മാറ്റം വരുത്താൻ ശ്രമിക്കുന്നു"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8140,24 +8382,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
@@ -8388,33 +8646,28 @@ msgstr ""
 msgid "Unsupported icon %d"
 msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "ഡ്രയ്വ്വർ തുടങ്ങാൻ സാധിക്കുന്നില്ല <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "ഡ്രയ്വ്വർ തുടങ്ങാൻ സാധിക്കുന്നില്ല <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8490,124 +8743,168 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr ""
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "ചതുരയളവ് പണിയുന്നു..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr ""
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr ""
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
+msgid "initial GRASS Location"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "ടേബിൾ ഉണ്ടാക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr ""
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8617,278 +8914,294 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
+#: ../lib/init/grass.py:833
 #, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
 msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "ചതുരയളവ് പണിയുന്നു..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
+#: ../lib/init/grass.py:1289
+msgid "The SHELL variable is not set"
 msgstr ""
 
-#: ../lib/init/grass.py:967
-msgid "The SHELL variable is not set"
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
 msgstr ""
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "ചതുരയളവ് പണിയുന്നു..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "കണക്ഷൻ നിർവീര്യമായി."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "വെക്റ്റർ അടയ്ക്കാൻ പറ്റുന്നില്ല <%s>"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
+#: ../lib/init/grass.py:1576
+msgid "Done."
 msgstr ""
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr ""
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr ""
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "ഡ്രയ്വ്വർ തുടങ്ങാൻ സാധിക്കുന്നില്ല <%s>"
@@ -9155,19 +9468,49 @@ msgstr ""
 #~ msgstr "ടേബിൾ നിന്ന് ഡേറ്റ എടുക്കാൻ പറ്റുന്നില്ല <%s>"
 
 #, fuzzy
-#~ msgid "Vector map <%s> is not opened on topology level"
-#~ msgstr "വെക്റ്റർ മാപ്പ് തുറന്നിട്ടില്ല"
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "വെക്റ്റർ ഡേറ്റാബേയ്സ് ഫയൽ തുറക്കാൻ പറ്റുന്നില്ല '%s'"
 
-#~ msgid "Category must be integer"
-#~ msgstr "തരം അക്കമായിരിക്കണം"
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
-#~ msgid "Illegal TimeStamp string"
-#~ msgstr "അസാധുവായ ടൈംസ്റ്റാമ്പ്"
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "വെക്റ്റർ മാപ്പ് വായിക്കാൻ പട്ടുന്നില്ല"
 
 #, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "ഫയൽ തുറക്കൻ പറ്റുന്നില്ല %s"
+
+#, fuzzy
+#~ msgid "Vector map <%s> is not opened on topology level"
+#~ msgstr "വെക്റ്റർ മാപ്പ് തുറന്നിട്ടില്ല"
 
 #, fuzzy
 #~ msgid "Removing empty 3D raster maps"
 #~ msgstr "റാസ്റ്റെർ മാപ്പ് തുറക്കാൻ പറ്റുനില്ല <%s>"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "റാസ്റ്റെർ മാപ്പ് <%s> കണ്മാനില്ല"
+
+#~ msgid "Category must be integer"
+#~ msgstr "തരം അക്കമായിരിക്കണം"
+
+#~ msgid "Illegal TimeStamp string"
+#~ msgstr "അസാധുവായ ടൈംസ്റ്റാമ്പ്"
diff --git a/locale/po/grasslibs_pl.po b/locale/po/grasslibs_pl.po
index cbef8c1..b0ff095 100644
--- a/locale/po/grasslibs_pl.po
+++ b/locale/po/grasslibs_pl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-07-16 15:42+0100\n"
 "Last-Translator: Milena Nowotarska <do.milenki * gmail.com>\n"
 "Language-Team: GRASS Translation Team\n"
@@ -41,10 +41,12 @@ msgstr "Nie można uruchomić sterownika <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nie można otworzyć bazy danych <%s> przez sterownik <%s>"
@@ -54,45 +56,45 @@ msgstr "Nie można otworzyć bazy danych <%s> przez sterownik <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "Nie można uzyskać listy tabel w bazie danych <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Tabela <%s> już istnieje w bazie danych <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Nie można otworzyć kursora wyboru: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Kolumna <%s> nie jest całkowitoliczbowa"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Kolumna <%s> nie została znaleziona"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Nie można utworzyć tabeli <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Nie można pobrać danych z tabeli <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Nieznany typ kolumny (kolumna <%s>)"
@@ -677,8 +679,8 @@ msgstr "Obiekty OGR typu %d nie są obsługiwane"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -688,8 +690,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -796,12 +798,12 @@ msgstr ""
 "Format indeksu obietków wektorowych %d.%d nie jest obsługiwany w tym wydaniu "
 "GRASS. Przebuduj topologię lub zaktualizuj GRASS."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Błąd GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr "Oblicznie minimalnego drzewa rozpinającego (MST)..."
 
@@ -846,17 +848,17 @@ msgstr "Indeks warstwy jest poza zakresem"
 msgid "Category index out of range"
 msgstr "Indeks warstwy jest poza zakresem"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Nie można otworzyć pliku indeksu kategorii mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Błąd podczas zapisu pliku indeksu kategorii <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Nie można otworzyć pliku indeksu kategorii mapy wektorowej <%s>"
@@ -921,8 +923,8 @@ msgstr "Liczba nieprawidłowych granic: %d"
 msgid "Number of redundant holes: %d"
 msgstr "Liczba granic: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Nie można otworzyć pliku indeksu kategorii dla mapy wektorowej <%s>"
@@ -1019,16 +1021,16 @@ msgstr "Liczba obszarów: -"
 msgid "Number of isles: -"
 msgstr "Liczba wysp: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Błąd podczas zapisu pliku topologii"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
@@ -1037,21 +1039,21 @@ msgstr ""
 "Nie można utworzyć indeksu przestrzennego z topologii, mapa wektorowa nie "
 "jest otwarta na poziomie topo 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "BUG (Vect_build_sidx_from_topo): węzeł nie istnieje"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Nie można otworzyć pliku indeksu kategorii dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Błąd podczas zapisu pliku indeksu przestrzennego"
 
@@ -1117,9 +1119,11 @@ msgstr "Nieznane słowo kluczowe %s w nagłówku wektora"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1168,8 +1172,10 @@ msgstr "Nie można wybrać atrybutów"
 msgid "Unable to fetch data from table"
 msgstr "Nie można pobrać danych z tabeli <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Kolumna <%s> nie została znaleziona w tabeli <%s>"
@@ -1209,24 +1215,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Nie można dodać odcinka sieci"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "dglShortestPath błąd: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1246,7 +1252,7 @@ msgstr "Próba odczytu punktów nieistniejącego obszaru"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1273,12 +1279,12 @@ msgstr "Próba odczytu topologii martwej wyspy (%d)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1286,7 +1292,7 @@ msgstr "Próba odczytu topologii martwej wyspy (%d)"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Nie można otworzyć pliku indeksu kategorii mapy wektorowej <%s>"
@@ -1377,7 +1383,7 @@ msgstr "Nie można ponownie zapisać obiektu %d"
 msgid "No connection defined"
 msgstr "Połączenie nie powiodło się."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Niedozwolony typ mapy <%d>"
@@ -1393,7 +1399,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Nie można ponownie zapisać obiektu %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Nie można otworzyć pliku GDAL"
@@ -1615,7 +1621,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "obsługiwany jest tylko format natywny"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Próba odczytu martwej linii"
 
@@ -1629,17 +1635,17 @@ msgstr "Vect_read_area_geos(): nie można odczytać obszaru id %d"
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr "Vect_read_area_geos(): nie można odczytać wyspy id %d obszaru id %d"
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Nie mozna odczytać przesunięcia linii %ld"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Próba odczytu punktów z nieistniejącego obszaru id %d"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "Nie można odczytać obiektu id %d"
@@ -1724,27 +1730,44 @@ msgstr "Obiekt OGR bez ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "Obiekty OGR typu %d nie są obsługiwane"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Błędny kierunek linii w Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr "Losowy odczyt danych OGR nie jest obsługiwany dla tej warstwy"
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Nie można otworzyć pliku cidx <%s> do zapisu"
@@ -1847,7 +1870,8 @@ msgstr "Nie można skopiować mapy wektorowej <%s> do <%s>"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Nie można dodać połączenia do bazy danych dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Nie można skopiować tabeli <%s>"
@@ -1879,6 +1903,21 @@ msgstr "Overlay: operator AND nie obsługuje linii i granic"
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Overlay: operator AND nie obsługuje typów obszar x obszar"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Nie można utworzyć tabeli <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Nie można skopiować tabeli <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Nie można skopiować tabeli <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1888,7 +1927,7 @@ msgstr "Obiekt OGR bez ID został zignorowany."
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Nie można otworzyć źródła danych OGR '%s'"
@@ -2178,7 +2217,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2191,31 +2230,31 @@ msgstr "Nie znaleziono mapy wektorowej <%s>"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "Mapa wektorowa spoza bieżącego mapsecie nie może być otwarta do zapisu"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nie można otworzyć mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Nie można otworzyć pliku topologii mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2224,96 +2263,96 @@ msgstr ""
 "Nie znaleziono mapy wektorowej <%s> na poziomie %d. Spróbuj przebudować "
 "topologię za pomocą v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Buduję topologię dla mapy wektorowej <%s>..."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Nie można otworzyć mapy wektorowej <%s> na poziomie %d"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Nie można otworzyć pliku historii mapy wektorej <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr ""
 "Nie można utworzyć mapy wektorowej: <%s> nie znajduje się w bieżącym "
 "mapsecie (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Nie można utworzyć mapy wektorowej <%s>. Nazwa nie jest zgodna z SQL."
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Nie można usunąć mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Nie można otworzyć pliku historii dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 msgid "Using native format"
 msgstr "Obsługiwany jest tylko format natywny"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Nie można ustalić stanu pliku <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "Wielkość pliku 'coor' różni się od wartości zapisanej w pliku topologii"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Przebuduj topologię mapy wektorowej <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 msgid "Unable to open OGR file"
 msgstr "Nie można otworzyć pliku OGR"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2571,29 +2610,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr "Snapuj werteksy Krok 1: wybierz punkty"
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr "Snapuj werteksy Krok 2: wskaż werteksy kotwic"
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr "Snapuj werteksy Krok 3: snapuj do wskazanych punktów"
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr "Zasnapowane werteksy: %d"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr "Nowe werteksy : %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Budowanie obszarów..."
@@ -2623,78 +2662,6 @@ msgstr "%s: Obszar %d nie istnieje"
 msgid "Attempt to access dead area %d"
 msgstr "Próba usunięcia martwego obiektu"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Budowanie grafu..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Nie można zbudować grafu sieci"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Nie zdefiniowana kolumna kosztów do przodu"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Numer warstwy z odcinkami < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "Typ danych kolumny <%s> nie jest obsługiwany (wymagane dane liczbowe)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Rejestrowanie odcinków..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"Nie znaleziono wpisu bazy danych dla linii %d (cat = %d, kierunek(ki) do "
-"przodu/w obie strony), pominięto kierunek(ki) do przodu/w obie strony tej "
-"linii"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"Nie znaleziono wpisu bazy danych dla linii %d (cat = %d, kierunek wstecz), "
-"pominęto kierunek tej linii"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Nie można dodać odcinka sieci"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Ustawianie kosztów węzłów..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"Nie znaleziono wpisu bazy danych dla węzła %d (cat = %d), koszt ustawiono na "
-"0"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Spłaszczanie grafu..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Graf został zbudowany"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Błędny kierunek linii w Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "Linia nie jest zapętlona"
@@ -2799,14 +2766,21 @@ msgstr "Uszkodzony wiersz w nagłówku: %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Połączenie nie powiodło się."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Połączenie nie powiodło się."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2873,26 +2847,26 @@ msgstr "Domyślny sterownik nie jest ustawiony"
 msgid "Default database is not set"
 msgstr "Domyślna baza danych nie jest ustawiona"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Zażądano połączenia %d, najwyższy numer połączenia %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Błąd w regule w wierszu %d w %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Nie można otworzyć warstwy <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Nie można otworzyć sterownika OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2900,36 +2874,31 @@ msgstr ""
 "Wszystkie testy FID zawiodły. Żadne z 'FID', 'ogc_fid', 'ogr_fid', 'gid' nie "
 "jest dostępne w tabeli bazy danych OGR"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "nieznany operator"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 "Bug: próba aktualizacji mapy, która nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Niedozwolony typ mapy <%d>"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3079,97 +3048,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Nie można usunąć obiektu %d z indeksu przestrzennego"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Nie można otworzyć pliku nagłówkowego wektora <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Uszkodzony wiersz w nagłówku: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Nieznane słowo kluczowe %s w nagłówku wektora"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Nieznane odwzorowanie"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Nazwa mapy wektorowej nie jest zgodna z SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Nie można skopiować mapy wektorowej <%s> do <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Nie można usunąć tabeli <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Nie można utworzyć indeksu dla tabeli <%s>, klucz <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Niedozwolona nazwa mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Nie można otworzyć pliku nagłówkowego mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Nie można odnaleźć tabeli <%s> podłączonej do mapy wektorowej <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Tabela <%s> podłączona do mapy wektorowej <%s> nie istnieje"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Nie można otworzyć katalogu '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Nie można usunąć pliku '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Nie można zmienić nazwy katalogu z '%s' na '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Nie można usunąć katalogu '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3258,6 +3227,160 @@ msgstr "Struktura mapy nie została zainicjowana"
 msgid "Map structure has been closed"
 msgstr "Struktura mapy została zamknięta"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Budowanie grafu..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Nie można zbudować grafu sieci"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Nie zdefiniowana kolumna kosztów do przodu"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Numer warstwy z odcinkami < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Kolumna <%s> nie została znaleziona w tabeli <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "Typ danych kolumny <%s> nie jest obsługiwany (wymagane dane liczbowe)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Ustawianie kosztów węzłów..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"Nie znaleziono wpisu bazy danych dla węzła %d (cat = %d), koszt ustawiono na "
+"0"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Nie można dodać odcinka sieci"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"Nie znaleziono wpisu bazy danych dla węzła %d (cat = %d), koszt ustawiono na "
+"0"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Nie można dodać odcinka sieci"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Numer warstwy z odcinkami < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Rejestrowanie odcinków..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Nie znaleziono wpisu bazy danych dla linii %d (cat = %d, kierunek(ki) do "
+"przodu/w obie strony), pominięto kierunek(ki) do przodu/w obie strony tej "
+"linii"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"Nie znaleziono wpisu bazy danych dla linii %d (cat = %d, kierunek wstecz), "
+"pominęto kierunek tej linii"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Spłaszczanie grafu..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Graf został zbudowany"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"Nie znaleziono wpisu bazy danych dla linii %d (cat = %d, kierunek(ki) do "
+"przodu/w obie strony), pominięto kierunek(ki) do przodu/w obie strony tej "
+"linii"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"Nie znaleziono wpisu bazy danych dla linii %d (cat = %d, kierunek wstecz), "
+"pominęto kierunek tej linii"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Nie można dodać odcinka sieci"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3372,7 +3495,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Nie znaleziono mapy rastrowej 3D <%s>"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3514,88 +3637,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Nie mozna odczytać przesunięcia linii %ld"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Nie można odczytać obiektu id %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Obiekty OGR typu %d nie są obsługiwane"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Nazwa kolumny atrybutów"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Problem podczas czytania mapy rastrowej"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Obiekt OGR bez ID został zignorowany."
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Indeks poza zakresem w"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Tabela <%s> podłączona do mapy wektorowej <%s> nie istnieje"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Obiekty OGR typu %d nie są obsługiwane"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Obiekty OGR typu %d nie są obsługiwane"
@@ -3604,32 +3737,36 @@ msgstr "Obiekty OGR typu %d nie są obsługiwane"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Nie można odczytać pliku palety kolorów mapy rastrowej <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Nie można skopiować mapy wektorowej <%s> do <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Nie można usunąć mapy wektorowej <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
@@ -3669,7 +3806,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3686,12 +3823,12 @@ msgid "Error computing map <%s>"
 msgstr "Błąd podczas otwierania mapy rastrowej 3D <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3705,9 +3842,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3719,88 +3856,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "nieznany typ interpolacjinieznany typ interpolacji"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Nie można utworzyć pliku znacznika czasu dla mapy rastrowej <%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Nie można utworzyć pliku znacznika czasu dla mapy rastrowej <%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Niepoprawny plik histogramu dla  [%s w %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "błąd składni"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Nie można utworzyć pliku znacznika czasu dla mapy rastrowej <%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Nie można utworzyć pliku znacznika czasu dla mapy rastrowej <%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Niepoprawny plik histogramu dla  [%s w %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Niepoprawny plik histogramu dla  [%s w %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
@@ -3830,132 +3967,132 @@ msgstr "Nie można utworzyć mapy wektorowej <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Nie można otworzyć mapy wektorowej <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Mapa rastrowa <%s> nie została znaleziona"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Nie znaleziono mapy wektorowej <%s>"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Nie można otworzyć pliku %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Nie można ustalić stanu pliku <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Nie można otworzyć pliku %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Budowanie obszarów..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Nie można usunąć katalogu '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "Nie można zapisać historii dla [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Nie można otworzyć pliku definicji bazy danych wektora '%s'"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "nie można znaleć tymczasowego pliku NULL: %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "nie można znaleć tymczasowego pliku NULL: %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Nie można otworzyć pliku 'cidx' <%s> do zapisu"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Typ obiektu"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Nie można utworzyć nagłówka pliku dla [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3980,20 +4117,20 @@ msgid ""
 "%s"
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Nie można otworzyć pliku definicji bazy danych wektora '%s'"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4002,7 +4139,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Nie można otworzyć pliku definicji bazy danych wektora '%s'"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4010,12 +4147,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Nie można otworzyć pliku definicji bazy danych wektora '%s'"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Typ obiektu"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4023,49 +4160,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Nie można usunąć katalogu '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nie można otworzyć pliku definicji bazy danych wektora '%s'"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Nie można utworzyć tabeli <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Nie można wykonać polecenia"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Nie można odnaleźć '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Nie można ustalić stanu pliku <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Nie można wykonać polecenia"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4073,182 +4198,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Nie można wykonać polecenia"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Nie można wykonać polecenia"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Nieznany typ wektora."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Typ obiektu"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Nie można pobrać danych z tabeli <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Nie można pobrać danych z tabeli <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Nie można pobrać danych z tabeli <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4256,19 +4381,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4329,57 +4454,64 @@ msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 msgid "Unable to read range file"
 msgstr "Nie można odczytać pliku zakresu"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Nie można odczytać zakresu danych mapy rastrowej 3D <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Nie można zamknąć mapy rastrowej 3D <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Nazwa bazowej mapy rastrowej"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Nazwa bazowej mapy rastrowej"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4551,28 +4683,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Nie można otworzyć pliku śledzenia błędu '%s'"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Mapa rastrowa <%s> nie została znaleziona"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Nie można utworzyć pliku znacznika czasu dla mapy rastrowej <%s>."
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Mapa rastrowa <%s> nie została znaleziona"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
@@ -4602,189 +4734,230 @@ msgstr "Obiekty OGR typu %d nie są obsługiwane"
 msgid "Unable to parse time string: %s"
 msgstr "Nie można otworzyć pliku %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Nazwa wejściowej mapy rastrowej"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Mapa rastrowa <%s> nie została znaleziona"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Nie można zamknąć mapy wejściowej"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "Nie można utworzyć pliku znacznika czasu dla %s mapy %s w mapsecie %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Niepoprawny plik histogramu dla  [%s w %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Nieprawidłowy znacznik czasu dla %s mapy %s w mapsecie %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Niepoprawny plik histogramu dla  [%s w %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Wartość dla wschodu musi być większa niż dla zachodu"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Wartość dla wschodu musi być większa niż dla zachodu"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "Nie można utworzyć pliku znacznika czasu dla %s mapy %s w mapsecie %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Wartość dla wschodu musi być większa niż dla zachodu"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Nie można odnaleźć mapy wektorowej <%s> w <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4796,32 +4969,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Nie można odczytać danych z tabeli <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "nieznany"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s nie znaleziono"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "wymagane: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4829,16 +5002,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Niedozwolony typ mapy <%d>"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Niedozwolony typ mapy <%d>"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Niedozwolony typ mapy <%d>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Niedozwolony typ mapy <%d>"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4846,79 +5054,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Nie można zamknąć mapy wejściowej "
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Niedozwolona nazwa pliku. Nazwa nie może zawierać '.' lub 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Niedozwolona nazwa pliku. Znak <%c> jest niedopuszczalny.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "Połączenie z bazą danych nie zostało zdefiniowane dla warstwy %d"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr ""
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4927,24 +5135,24 @@ msgstr ""
 "Nie można przywrócić obiektu %d, mapa wektorowa <%s> nie jest otwarta w "
 "trybie 'zapisu'"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "brak danych"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Kolor"
@@ -5045,7 +5253,7 @@ msgstr "Nie można otworzyć pliku <%s> do zapisu"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Mapa rastrowa <%s> nie została znaleziona"
@@ -5573,12 +5781,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "Kopiuj %s <%s> do bieżącego mapsetu jako <%s>"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "Kopiuj %s <%s> do bieżącego mapsetu jako <%s>"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, fuzzy, c-format
 msgid "%s copied"
 msgstr "%s: skopiowane"
@@ -5796,7 +6004,7 @@ msgstr "Niepoprawny  plik znacznika czasu dla mapy wektorowej <%s@%s>"
 msgid "WARNING: "
 msgstr "UWAGA: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "BŁĄD: "
@@ -5911,7 +6119,7 @@ msgstr "Powtórzone pole formatu"
 msgid "Duplicate compressed field"
 msgstr "Powtórzone pole kompresji"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Obszar %d nie istnieje"
@@ -6043,22 +6251,22 @@ msgstr "GISRC - zmienna nie zdefiniowana"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): Zmienna %s nie zdefiniowana"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): mapset <%s> nie odpowiada xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "G_spawn: nie można otworzyć pliku %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: nie można otworzyć pliku %s"
@@ -6113,12 +6321,12 @@ msgstr "Błędne es: pole '%s' w pliku %s w <%s>"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Brak informacji o elipsoidzie w pliku %s w <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Nie można utworzyć elementu mapsetu %s (%s): %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Nie można uzyskać dostępu do elementu mapsetu %s (%s): %s"
@@ -6136,16 +6344,16 @@ msgid "SYNOPSIS"
 msgstr "SKŁADNIA"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Flagi"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parametry"
 
@@ -6157,6 +6365,10 @@ msgstr "Opcje"
 msgid "Default"
 msgstr "Domyślne"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6236,16 +6448,21 @@ msgstr "BŁĄD: Klucz opcji nie zdefiniowany"
 msgid "Flags:"
 msgstr "Flagi:"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Uruchom bez komunikatów"
+
+#: ../lib/gis/parser_help.c:214
 msgid "Parameters:"
 msgstr "Parametry:"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   domyślnie: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   opcje: "
@@ -6534,220 +6751,229 @@ msgstr ""
 msgid "Category value"
 msgstr "Wartość kategorii"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Wartości kategorii"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Przykład: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "ID obiektu"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "ID obiektów"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Ścieżka do pliku wejściowego"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Ścieżka do pliku wyjściowego"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Separator pól"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 #, fuzzy
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr "Znaki specjalne: nowa linia, spacja, przecinek, tab"
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Kolor"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Standardowa nazwa koloru GRASS albo R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Standardowa nazwa koloru GRASS, R:G:B lub \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Ścieżka do pliku wejściowego"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Błędne współrzędne"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Nazwa wejściowej mapy wektorowej"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Nazwa kolumny atrybutów"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Nazwa(y) wejściowej mapy rastrowej"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Nazwa wyjściowej mapy rastrowej"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Nazwa mapy rastrowej wysokości"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Nazwa mapy rastrowej wysokości"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Nazwa wyjściowej mapy rastrowej"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Nazwa(y) wejściowej mapy wektorowej"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Nazwa(y) wejściowej mapy wektorowej"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Brak miejsca w tablicy wektorowej"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Nazwa wejściowej mapy rastrowej 3D"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Nazwa wejściowej mapy rastrowej 3D"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Nazwa wyjściowej mapy rastrowej 3D"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "mapa <%s> nie znajduje się w bieżącym mapsecie"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Nazwa wejściowej mapy rastrowej"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Nazwa wejściowej mapy rastrowej"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Nie można zamknąć mapy wejściowej"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "Warunki WHERE polecenia SQL - bez 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Odczyt danych z tabeli atrybutów..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6866,78 +7092,83 @@ msgstr ""
 "\n"
 "Opis:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG (błąd) w opisach, opcja '%s' w <%s> nie istnieje"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG (błąd) w opisach, opcja '%s' w <%s> nie istnieje"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr "Użyj albo flagi --quiet albo --verbose, ale nie obu. Użyto --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr "Użyj albo flagi --quiet albo --verbose, ale nie obu. Użyto --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr "Użyj albo flagi --quiet albo --verbose, ale nie obu. Użyto --quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "<%s> nie jest poprawną opcją\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "BŁĄD: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Nie można określić nazwy programu"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "<%c> nie jest poprawną flagą\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "<%s=> jest niejasne\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "<%s> nie jest poprawnym parametrem\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> w mapsecie <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6946,7 +7177,7 @@ msgstr ""
 "\n"
 "BŁĄD: błędna składnia zakresu dla parametru <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6955,14 +7186,14 @@ msgstr ""
 "\n"
 "BŁĄD: wartość <%s> jest poza zakresem parametru <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "BŁĄD: Brakująca wartość dla parametru <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -6971,7 +7202,7 @@ msgstr ""
 "\n"
 "Błąd: wartość <%s> zajduje się poza zakresem dla parametru <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -6981,7 +7212,7 @@ msgstr ""
 "BŁĄD: Wymagany parametr <%s> nie został podany:\n"
 "\t(%s)\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -6990,37 +7221,37 @@ msgstr ""
 "\n"
 "BŁĄD: opcja <%s> musi być wielokrotnością %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "<%s> nie jest poprawną opcją\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Nie wskazano separatora"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "<%s> nie jest poprawną opcją\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Obiekty OGR typu %d nie są obsługiwane"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Nie można otworzyć pliku GDAL"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Nie można utworzyć tabeli <%s>"
@@ -7980,16 +8211,36 @@ msgstr "Błędne parametry elipsoidy (a, rf, es or b) w pliku"
 msgid "No ellipsoid info given in file"
 msgstr "Plik nie zawiera informacji o elipsoidzie"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Nieudany odczyt skompresowanego pliku [%s w %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Nieudany odczyt skompresowanego pliku [%s w %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "System nie został zainicjalizowany. Nie wywołano G_gisinit()"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8020,51 +8271,46 @@ msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Błąd podczas zapisu pliku indeksu kategorii <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Nie można otworzyć pliku nagłówka dla wektora <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "nie można znaleć tymczasowego pliku NULL: %s"
+msgid "No null file for <%s>"
+msgstr "Nie można otworzyć pliku nagłówka dla wektora <%s>"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: nie można otworzyć pliku %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "błąd podczas zapisu zerowego wiersza %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: mapa [%s] nie jest otwarta do zapisu - request ignored"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: mapa [%s] nie jest otwarta do zapisu - request ignored"
@@ -8155,22 +8401,22 @@ msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Nie można odczytać nagłówka pliku dla mapy rastrowej <%s@%s>."
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Niedozwolony typ mapy <%d>"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Nie można otworzyć pliku %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Nie można usunąć pliku '%s'"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "nie można zapisać pliku f_format dla map CELL"
 
@@ -8259,12 +8505,12 @@ msgstr "Nie można utworzyć mapy rastrowej <%s>"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "Mapa rastrowa <%s@%s>: nieprawidłowe pole formatu w pliku nagłówkowym"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Obiekty OGR typu %d nie są obsługiwane"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8273,94 +8519,94 @@ msgstr ""
 "[%s] w mapsecie [%s] - w innym odwzorowaniu niż bieżący region:\n"
 "znaleziona mapa [%s] w: <%s>, a powinno być <%s> "
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 "[%s] w mapsecie [%s] - znajduje się w innej strefie [%d] niż bieżący region "
 "[%d]"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Nie można otworzyć pliku śledzenia błędu '%s'"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Błąd podczas czytania mapy <%s@%s>, rząd %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Nie można otworzyć pliku nagłówka dla wektora <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Nie można otworzyć pliku GDAL"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr "Niedozwolony typ mapy <%d>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Mapa rastrowa <%s> nie znajduje się w bieżącym mapsecie (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> jest niedozwoloną nazwą pliku"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "Plik koloru dla [%s] nie jest dostępny"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Mapa rastrowa <%s> nie znajduje się w bieżącym mapsecie (%s)"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w mapsecie <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Nie można odnaleźć '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Nieprawidłowy typ: pole '%s' w pliku '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "nieprawidłowy typ: pole '%s' w pliku '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Mapa rastrowa <%s> nie jest xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8400,25 +8646,41 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 "Żądanie odczytu mapy rastrowej <%s@%s> dla wiersza %d jest poza regionem"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Błąd podczas zapisu pliku indeksu kategorii <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Błąd podczas czytania skompresowanej mapy <%s@%s>, rząd %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Błąd podczas odczytu wiersza NULL %d"
@@ -8651,33 +8913,28 @@ msgstr "nieznany"
 msgid "Unsupported icon %d"
 msgstr "Typ obiektu"
 
-#: ../lib/display/r_raster.c:128
-#, c-format
-msgid "%s variable defined, %s ignored"
-msgstr ""
+#: ../lib/display/r_raster.c:98
+#, fuzzy, c-format
+msgid "Both %s and %s are defined. %s will be ignored."
+msgstr "Dostarczono parametry 'where' i 'cats', cat będzie zignorowane"
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Nie można uruchomić sterownika <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Nie można uruchomić sterownika <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Nie można otworzyć pliku %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8753,125 +9010,170 @@ msgstr "Jednoczesne blokowanie mapsetu nie jest obsługiwane w systemie Windows"
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Nie można zapisać pliku wyjściowego <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "UWAGA:"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Ustawianie kosztów węzłów..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr ""
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr ""
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:350
+#, fuzzy
+msgid "initial GRASS Location"
+msgstr "<%s> nie jest poprawną opcją\n"
+
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Nie można usunąć katalogu '%s'"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Żądany format nie jest skompilowany w tej wersji"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8881,280 +9183,296 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "<%s> nie jest poprawną opcją\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Obszar %d nie istnieje"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Obszar %d nie istnieje"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Tworzenie obszarów..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - brak ustawień zmiennych"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Ustawianie kosztów węzłów..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Połączenie nie powiodło się."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Nie można odczytać danych z tabeli <%s>"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Nie można ustawić środka"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "brak"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Obiekty OGR typu %d nie są obsługiwane"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Nie można uruchomić sterownika <%s>"
@@ -9429,13 +9747,62 @@ msgstr "Brak wolnej pamięci"
 #~ msgid "Out of memmory"
 #~ msgstr "Brak wolnej pamięci"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Nie można otworzyć pliku definicji bazy danych wektora '%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nie można otworzyć pliku nagłówka dla mapy wektorowej <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "nie można znaleć tymczasowego pliku NULL: %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: nie można otworzyć pliku %s"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "BŁĄD: opcja <%s>: <%s> istnieje.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Niedozwolony typ mapy <%d>"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Nie można otworzyć pliku %s"
+
+#, fuzzy
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Mapa wektorowa <%s> nie jest otwarta na poziomie >= 2"
 
+#~ msgid "Background color"
+#~ msgstr "Kolor tła"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Nazwa źródłowej mapy rastrowej"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "Obiekty OGR typu %d nie są obsługiwane"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "Niedozwolony typ mapy <%d>"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Nie odnaleziono atrybutów kategorii %d"
 
@@ -9461,22 +9828,3 @@ msgstr "Brak wolnej pamięci"
 
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: błedne # wymiary lub pola"
-
-#~ msgid "Background color"
-#~ msgstr "Kolor tła"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "Obiekty OGR typu %d nie są obsługiwane"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "Niedozwolony typ mapy <%d>"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Niedozwolony typ mapy <%d>"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Nazwa źródłowej mapy rastrowej"
diff --git a/locale/po/grasslibs_pt.po b/locale/po/grasslibs_pt.po
index 95d0c8d..80ebb10 100644
--- a/locale/po/grasslibs_pt.po
+++ b/locale/po/grasslibs_pt.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_pt\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-12-22 16:37+0200\n"
 "Last-Translator: luisa <gem12lte at student.lu.se>\n"
 "Language-Team: gem12lte at student.lu.se\n"
@@ -42,10 +42,12 @@ msgstr "N
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "N�o foi poss�vel abrir a base de dados <%s> com o driver <%s>"
@@ -55,45 +57,45 @@ msgstr "N
 msgid "Unable to get list tables in database <%s>"
 msgstr "N�o foi poss�vel obter tabelas de lista na base de dados <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Tabela <%s> j� existe na base de dados <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "N�o foi poss�vel abrir o cursor de sele��o: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Coluna <%s> n�o � constitu�da por n�mero inteiros"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "N�o foi poss�vel criar a tabela <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "N�o foi retirar dados da tabela <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Tipo de coluna desconhecido (coluna <%s>)"
@@ -700,8 +702,8 @@ msgstr "Fei
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -711,8 +713,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -815,12 +817,12 @@ msgstr ""
 "Formato vers�o %d do �ndice de elementos. %d n�o � suportado por esta "
 "edi��o. Tente reconstruir a topologia ou atualize o GRASS."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Erro GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 #, fuzzy
 msgid "Computing minimum spanning tree..."
 msgstr "A calcular a �rvore de menores dist�ncias..."
@@ -869,17 +871,17 @@ msgstr "
 msgid "Category index out of range"
 msgstr "�ndice de camadas fora dos limites"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Imposs�vel abrir �ndice de categoria para mapa vetorial <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Erro de escrita no arquivo de �ndices espaciais."
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -946,8 +948,8 @@ msgstr "N
 msgid "Number of redundant holes: %d"
 msgstr "N�mero de fronteiras:   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Imposs�vel abrir �ndice de categoria para mapa vetorial <%s>"
@@ -1044,37 +1046,37 @@ msgstr "N
 msgid "Number of isles: -"
 msgstr "N�mero de ilhas: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Erro na escrita do ficheiro topo"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "n�o � poss�vel apagar a linha, o mapa '%s' n�o est� aberto no n�vel 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Imposs�vel abrir �ndice de categoria para mapa vetorial <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Erro de escrita do ficheiro de �ndices espaciais"
 
@@ -1140,9 +1142,11 @@ msgstr "Tipo de vetor desconhecido"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1191,8 +1195,10 @@ msgstr "n
 msgid "Unable to fetch data from table"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "A coluna <%s> n�o foi encontrada na tabela <%s>"
@@ -1232,24 +1238,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "N�o foi poss�vel adicionar arco � rede"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "Erro dglShortestPath: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1269,7 +1275,7 @@ msgstr "Tentativa de remover ilha de uma 
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1296,12 +1302,12 @@ msgstr "Tentativa de ler topologia para uma ilha morta (%d)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1309,7 +1315,7 @@ msgstr "Tentativa de ler topologia para uma ilha morta (%d)"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Imposs�vel abrir �ndice de categoria para mapa vetorial <%s>"
@@ -1401,7 +1407,7 @@ msgstr "N
 msgid "No connection defined"
 msgstr "Falha na conex�o."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Imposs�vel mudar de diret�rio para %s"
@@ -1417,7 +1423,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Imposs�vel abrir arquivo %s"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Imposs�vel abrir arquivo %s"
@@ -1639,7 +1645,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "s� suporta o formato nativo"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Tentativa de ler uma linha morta"
 
@@ -1653,17 +1659,17 @@ msgstr "Vect_read_area_geos(): n
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr "Vect_read_area_geos(): n�o foi poss�vel ler a id %d da isle %d"
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr "N�o foi poss�vel ler o deslocamento da linha %ld"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Tentativa de ler os pontos da �rea inexistente com id %d"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr "N�o foi poss�vel ler id do elemento %d"
@@ -1748,26 +1754,43 @@ msgstr "Elemento OGR sem ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Dire��o errada da linha em Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Imposs�vel abrir arquivo topo para escrita <%s>"
@@ -1872,7 +1895,8 @@ msgstr ""
 "N�o foi poss�vel adicionar a liga��o da base de dados relativa ao mapa "
 "vectorial <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "N�o foi poss�vel copiar a tabela <%s>"
@@ -1904,6 +1928,21 @@ msgstr "Sobreposi
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Sobreposi��o: tipo �rea x �rea n�o suportado pelo operador AND"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Imposs�vel abrir arquivo %s"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "N�o foi poss�vel copiar a tabela <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "N�o foi poss�vel copiar a tabela <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1913,7 +1952,7 @@ msgstr "Ignorando fei
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "N�o foi poss�vel abrir a fonte de dados OGR '%s'"
@@ -2198,7 +2237,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2211,35 +2250,35 @@ msgstr "Mapa vectorial <%s> n
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Um mapa vectorial que n�o est� no mapset atual n�o pode ser aberto para "
 "atualiza��o"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "N�o foi poss�vel abrir o mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 "N�o foi poss�vel abrir o ficheiro de topologia relativo ao mapa vectorial <"
 "%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2248,99 +2287,99 @@ msgstr ""
 "N�o foi poss�vel abrir o mapa vectorial <%s> no n�vel %d. Tente reconstruir "
 "a topologia do vector usando v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Favor reconstruir a topologia do vetor '%s@%s'"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr ""
 "N�o foi poss�vel abrir o ficheiro do hist�rico relativo ao mapa vectorial <"
 "%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Nome do mapa n�o obedece ao SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "N�o foi poss�vel apagar o mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "O mapa vectorial <%s> j� existe e ser� reescrito"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Tipo da coluna n�o suportado"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "N�o foi poss�vel iniciar o ficheiro <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "Tamanho do ficheiro 'coor' difere do valor gravado no ficheiro de topologia"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Por favor reconstrua a topologia do mapa vectorial <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "Tamanho do arquivo 'coor' difere do valor gravado no arquivo topo."
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2598,29 +2637,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr "Passo 1 de encaixe de v�rtices: selecionar pontos"
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr "Passo 2 de encaixe de v�rtices: atribuir v�rtices �ncora"
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr "Passo 3 de encaixe de v�rtices: snap para os pontos atributos"
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr "V�rtices encaixados: %d"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr "Novos v�rtices: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Construindo grafo ..."
@@ -2650,77 +2689,6 @@ msgstr "%s: 
 msgid "Attempt to access dead area %d"
 msgstr "Tentativa de remover �rea morta"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "A construir grafo..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "N�o foi poss�vel construir grafo da rede"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Coluna de custos n�o especificada"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Arco < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "O tipo de dado da coluna <%s> n�o � suportado (deve ser num�rico)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Registando arcos..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"Registo da base de dados para a linha %d (cat = %d, em frente/ambas as "
-"dire��es) n�o encontrada (em frente/ambas as dire��es da linha ignoradas)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"Registo da base de dados para a linha %d(cat = %d, dire��o reversa) n�o "
-"encontrada (dire��o da linha ignorada)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "N�o foi poss�vel adicionar arco � rede"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "A definir custo dos n�s..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"Registo da base de dados para o n� %d (cat = %d) n�o encontrado (custo "
-"definido como 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Achatando o grafo..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Grafo constru�do"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Dire��o errada da linha em Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2822,14 +2790,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Falha na conex�o."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Falha na conex�o."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2895,26 +2870,26 @@ msgstr "Driver padr
 msgid "Default database is not set"
 msgstr "Base de dados padr�o n�o foi especificada"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "dblink %d solicitado, %d liga��es no m�ximo"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Erro na regra da linha %d em %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "N�o foi poss�vel abrir driver OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2922,35 +2897,30 @@ msgstr ""
 "Todos os testes FID falharam. FID, 'ogc_fid', 'ogr_fid' e 'gid' "
 "indispon�veis na tabela de base de dados OGR"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "Erro desconhecido"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Imposs�vel mudar de diret�rio para %s"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3100,99 +3070,99 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "N�o foi poss�vel apagar o item %d do �ndice espacial"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "N�o foi poss�vel abrir o ficheiro do cabe�alho do vector <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, fuzzy, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Linha corrompida no cabe�alho: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Proje��o desconhecida"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Nome do mapa n�o obedece ao SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "N�o foi poss�vel encontrar o mapa vectorial <%s> em <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "N�o foi poss�vel copiar o mapa vectorial <%s> para <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "N�o foi poss�vel apagar a tabela <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "N�o foi poss�vel criar o �ndice para a tabela <%s>, chave <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Nome de mapa vectorial inv�lido <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr ""
 "N�o foi poss�vel abrir o ficheiro do cabe�alho para o mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr ""
 "N�o foi poss�vel encontrar a tabela <%s> relativa ao mapa vectorial <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "A tabela <%s> relativa ao mapa vectorial <%s> n�o existe"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "N�o foi poss�vel abrir o diret�rio '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "N�o foi poss�vel apagar o ficheiro '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "N�o foi poss�vel mudar o nome do diret�rio '%s' para '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "N�o foi poss�vel remover o diret�rio '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3279,6 +3249,158 @@ msgstr "A estrutura do mapa n
 msgid "Map structure has been closed"
 msgstr "A estrutura do mapa foi fechada"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "A construir grafo..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "N�o foi poss�vel construir grafo da rede"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Coluna de custos n�o especificada"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Arco < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "A coluna <%s> n�o foi encontrada na tabela <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "O tipo de dado da coluna <%s> n�o � suportado (deve ser num�rico)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "A definir custo dos n�s..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"Registo da base de dados para o n� %d (cat = %d) n�o encontrado (custo "
+"definido como 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "N�o foi poss�vel adicionar arco � rede"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"Registo da base de dados para o n� %d (cat = %d) n�o encontrado (custo "
+"definido como 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "N�o foi poss�vel adicionar arco � rede"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Arco < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Registando arcos..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Registo da base de dados para a linha %d (cat = %d, em frente/ambas as "
+"dire��es) n�o encontrada (em frente/ambas as dire��es da linha ignoradas)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"Registo da base de dados para a linha %d(cat = %d, dire��o reversa) n�o "
+"encontrada (dire��o da linha ignorada)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Achatando o grafo..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Grafo constru�do"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"Registo da base de dados para a linha %d (cat = %d, em frente/ambas as "
+"dire��es) n�o encontrada (em frente/ambas as dire��es da linha ignoradas)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"Registo da base de dados para a linha %d(cat = %d, dire��o reversa) n�o "
+"encontrada (dire��o da linha ignorada)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "N�o foi poss�vel adicionar arco � rede"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3394,7 +3516,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Mapa raster 3d <%s> n�o encontrado"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3536,88 +3658,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "N�o foi poss�vel ler o deslocamento da linha %ld"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "N�o foi poss�vel ler id do elemento %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Nome da coluna de atributos"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "problema lendo arquivo cell raster"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "O mapa vectorial <%s> j� existe e ser� reescrito"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Ignorando fei��o OGR sem ID"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Dimens�es da matriz al�m dos limites"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Imposs�vel abrir topologia para mapa vetorial <%s>"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Tipo da coluna n�o suportado"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
@@ -3626,32 +3758,36 @@ msgstr "Fei
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Imposs�vel mudar de diret�rio para %s"
@@ -3691,7 +3827,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3708,12 +3844,12 @@ msgid "Error computing map <%s>"
 msgstr "Erro ao abrir mapa g3d <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3727,9 +3863,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3741,88 +3877,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "erro de sintaxe"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
@@ -3852,132 +3988,132 @@ msgstr "Imposs
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Construindo grafo ..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "n�o consegui escrever os dados hist�ricos para [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "n�o consegui abrir %s para escrita"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Tipo(s) de fei��o"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "n�o consegui criar o cabe�alho para o arquivo [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4002,20 +4138,20 @@ msgid ""
 "%s"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4024,7 +4160,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4032,12 +4168,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "n�o consegui abrir banco de dados %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4045,49 +4181,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "N�o foi poss�vel criar a tabela <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "n�o consegui encontrar [%s]"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4095,182 +4219,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Tipo(s) de fei��o"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4278,19 +4402,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4351,58 +4475,65 @@ msgstr "n
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Imposs�vel ler arquivo de cabe�alho"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "N�o foi poss�vel fechar o mapa raster 3D <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Nome do mapa raster base"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Nome do mapa raster base"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4574,28 +4705,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Imposs�vel abrir �ndice de categoria para mapa vetorial <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
@@ -4625,189 +4756,230 @@ msgstr "Fei
 msgid "Unable to parse time string: %s"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Imposs�vel fechar mapa de entrada"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "n�o consegui criar arquivo de data para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Leste deve ser maior que o Oeste"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Leste deve ser maior que o Oeste"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "n�o consegui criar arquivo de data para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Leste deve ser maior que o Oeste"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4819,32 +4991,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "desconhecido"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s n�o encontrado"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "obrigat�ria: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4852,16 +5024,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4869,79 +5076,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Imposs�vel fechar mapa de entrada"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Nome de arquivo ilegal. n�o pode ser '.' ou 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Nome de arquivo ilegal. O caractere <%c> n�o � permitido.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Erro abrindo mapa g3d <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4949,24 +5156,24 @@ msgid ""
 msgstr ""
 "n�o consegui apagar a linha, o mapa '%s' n�o est� aberto em modo de escrita"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Cor"
@@ -5068,7 +5275,7 @@ msgstr "N
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Mapa raster <%s> n�o encontrado"
@@ -5600,12 +5807,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "n�o h� arquivos <%s> dispon�veis no mapset ativo\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "n�o h� arquivos <%s> dispon�veis no mapset ativo\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5825,7 +6032,7 @@ msgstr "Arquivo de data inv
 msgid "WARNING: "
 msgstr "ATEN��O: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ERRO:"
@@ -5961,7 +6168,7 @@ msgstr "campo formato est
 msgid "Duplicate compressed field"
 msgstr "campo comprimido duplicado"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "Imposs�vel abrir topologia para mapa vetorial <%s>"
@@ -6089,22 +6296,22 @@ msgstr "GISRC - vari
 msgid "Variable '%s' not set"
 msgstr "GISRC - vari�vel n�o incializada"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): o mapset <%s> n�o corresponde ao xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "G_spawn: N�o foi poss�vel abrir o ficheiro %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: N�o foi poss�vel abrir o ficheiro %s"
@@ -6159,12 +6366,12 @@ msgstr "Par
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "O ficheiro %s em <%s> n�o tem informa��es sobre o elips�ide"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "N�o foi poss�vel gerar o elemento do mapset %s (%s): %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "N�o foi poss�vel aceder ao elemento do mapset %s (%s): %s"
@@ -6182,17 +6389,17 @@ msgid "SYNOPSIS"
 msgstr "RESUMO"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 #, fuzzy
 msgid "Flags"
 msgstr "Alertas"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Par�metros"
 
@@ -6204,6 +6411,10 @@ msgstr "Op
 msgid "Default"
 msgstr "Padr�o"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6295,17 +6506,22 @@ msgstr "Ignorando fei
 msgid "Flags:"
 msgstr "Op��es"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Sa�da do m�dulo quiet"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Par�metros"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   padr�o: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   op��es: "
@@ -6592,223 +6808,232 @@ msgstr ""
 msgid "Category value"
 msgstr "Valor da categoria"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Valores da categoria"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Exemplo: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "ID do elemento"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "IDs dos elementos"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr "Nome do ficheiro de entrada"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Nome do ficheiro de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Separador de campos"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 #, fuzzy
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 "Caracteres especiais: newline (nova linha), space (espa�o), comma (v�rgula), "
 "tab (indenta��o)"
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Cor"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Um nome de cor padr�o ou tripla R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Cor padr�o do GRASS, tripla R:G:B ou \"none\" (\"nenhum\")"
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Nome do arquivo de entrada"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Coordenadas inv�lidas"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Nome da coluna de atributos"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Nome do mapa raster de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Nome do mapa raster de eleva��o"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Nome do mapa raster de eleva��o"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Nome do mapa raster de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Nome do mapa vetor de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Nome do mapa raster3D de entrada"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Nome do mapa raster3D de entrada"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Nome do mapa raster3d de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Imposs�vel fechar mapa de entrada"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "Cl�usula WHERE do comando SQL sem palavra-chave 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "Criando topologia ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6927,80 +7152,85 @@ msgstr ""
 "\n"
 "Descri��o:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "BUG nas descri��es, op��o '%s' em <%s> n�o existe"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "BUG nas descri��es, op��o '%s' em <%s> n�o existe"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 #, fuzzy
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr "Usar alerta --quiet ou --verbose, n�o ambos. Assume --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 #, fuzzy
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr "Usar alerta --quiet ou --verbose, n�o ambos. Assume --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr "Usar alerta --quiet ou --verbose, n�o ambos. Assume --quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ERRO:"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "N�o foi poss�vel descobrir o nome do programa"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Desculpe, <%c> n�o � um flag v�lido\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Desculpe, <%s=> � amb�guo\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Desculpe, <%s> n�o � um par�metro v�lido\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> no mapset <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7009,7 +7239,7 @@ msgstr ""
 "\n"
 "ERRO: sintaxe ilegal no intervalo do par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7018,14 +7248,14 @@ msgstr ""
 "\n"
 "ERRO: valor <%s> fora do intervalo do par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "ERRO: Falta valor para o par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7034,7 +7264,7 @@ msgstr ""
 "\n"
 "ERRO: valor <%s> fora do intervalo do par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7044,7 +7274,7 @@ msgstr ""
 "ERRO: Par�metro necess�rio <%s> n�o fornecido:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7053,37 +7283,37 @@ msgstr ""
 "\n"
 "ERRO: A op��o <%s> deve ser m�ltipla de %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Separador de Campos"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
@@ -8061,11 +8291,16 @@ msgstr "Descritor inv
 msgid "No ellipsoid info given in file"
 msgstr "O ficheiro n�o t�m informa��es sobre o elips�ide"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Falha na leitura inicial do ficheiro compactado [%s em %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Falha na leitura inicial do ficheiro compactado [%s em %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
@@ -8073,6 +8308,21 @@ msgstr ""
 "\aERRO: Sistema n�o iniciado. O programador n�o incluiu a chamada a "
 "G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8103,51 +8353,46 @@ msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Erro de escrita no arquivo de �ndices espaciais."
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
+msgid "No null file for <%s>"
+msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: n�o consegui abrir o arquivo %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "erro escrevendo linha de nulos %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: map [%s] n�o est� aberto para escrita - pedido ignorado"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: descritor de arquivo n�o foi aberto - pedido ignorado"
@@ -8239,22 +8484,22 @@ msgstr "n
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "imposs�vel escrever ficheiro f_format para mapas CELL"
 
@@ -8344,12 +8589,12 @@ msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 "Mapa raster <%s@%s>: o campo formato do ficheiro do cabe�alho � inv�lido"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Mapa raster <%s> n�o encontrado no mapset <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8358,93 +8603,93 @@ msgstr ""
 "[%s] no mapset [%s] - est� numa proje��o diferente da regi�o atual:\n"
 "o mapa [%s] em: <%s>, deveria ser <%s> "
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 "[%s] no mapset [%s] - est� em uma zona diferente [%d] da regi�o atual [%d]"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "[%s] em [%s] - bytes demais por c�lula (%d)"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Imposs�vel abrir �ndice de categoria para mapa vetorial <%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "erro lendo mapa [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Mapa raster <%s> n�o est� mapset atual (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> � um nome de ficheiro ilegal"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "n�o h� arquivos %s dispon�veis no mapset %s\n"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Mapa raster <%s> n�o est� mapset atual (%s)"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Mapa raster <%s> n�o encontrado no mapset <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "N�o foi poss�vel encontrar '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Tipo inv�lido: campo '%s' no ficheiro '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "tipo inv�lido: campo %s no arquivo %s"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Mapa raster <%s> n�o � xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8484,25 +8729,41 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, fuzzy, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 "O pedido de leitura da linha %d do mapa raster <%s@%s> est� fora da regi�o"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Erro de escrita no arquivo de �ndices espaciais."
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Erro ao ler linha nula %d"
@@ -8743,33 +9004,28 @@ msgstr "desconhecido"
 msgid "Unsupported icon %d"
 msgstr "Tipo(s) de fei��o"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Imposs�vel abrir arquivo %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8848,17 +9104,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "ATEN��O: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Ajustando custo dos n�s ..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8866,115 +9122,159 @@ msgstr ""
 "Uso:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "para aceitar os valores padr�o"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "proje��o inv�lida\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "n�o consegui alocar mem�ria\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "O formato requisitado n�o foi compilado nesta vers�o"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8984,283 +9284,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Por favor avise aos desenvolvedores do GRASS sobre este erro.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Construindo grafo ..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - vari�vel n�o incializada"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Ajustando custo dos n�s ..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Falha na conex�o."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Imposs�vel abrir arquivo %s"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "n�o consegui abrir [%s]"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "No h� ajuda dispon�vel para o comando [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "nenhum"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "n�o consegui abrir arquivo tempor�rio"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Imposs�vel abrir arquivo %s"
@@ -9543,10 +9859,48 @@ msgstr "G_malloc: mem
 #~ msgid "Out of memmory"
 #~ msgstr "G_malloc: mem�ria esgotada"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Imposs�vel abrir hist�rico para mapa vetorial %s"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: n�o consegui abrir o arquivo %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "ERRO: op��o <%s>: <%s> j� existe.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Imposs�vel abrir arquivo %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "Pressione ENTER para continuar -->"
 
@@ -9554,6 +9908,21 @@ msgstr "G_malloc: mem
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Vetor de entrada '%s' n�o encontrado"
 
+#~ msgid "Background color"
+#~ msgstr "Cor de fundo"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Nome do mapa raster de entrada"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "Tipo da coluna n�o suportado"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "Imposs�vel mudar de diret�rio para %s"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Atributos para a categoria %d n�o encontrados"
 
@@ -9579,22 +9948,3 @@ msgstr "G_malloc: mem
 #, fuzzy
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: # dims ou campos inv�lidos"
-
-#~ msgid "Background color"
-#~ msgstr "Cor de fundo"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "Tipo da coluna n�o suportado"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "Imposs�vel mudar de diret�rio para %s"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Imposs�vel mudar de diret�rio para %s"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Nome do mapa raster de entrada"
diff --git a/locale/po/grasslibs_pt_br.po b/locale/po/grasslibs_pt_br.po
index 28b9664..a09a4b0 100644
--- a/locale/po/grasslibs_pt_br.po
+++ b/locale/po/grasslibs_pt_br.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_pt_br\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2007-05-20 10:44-0300\n"
 "Last-Translator: Paulo E. P. Marcondes <paulomarcondes at gmail.com>\n"
 "Language-Team: Brazilian Portuguese <grass-translations at lists.osgeo.org>\n"
@@ -43,10 +43,12 @@ msgstr "n
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "n�o consegui abrir banco de dados %s"
@@ -56,45 +58,45 @@ msgstr "n
 msgid "Unable to get list tables in database <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "Imposs�vel descrever tabela <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "Imposs�vel descrever tabela <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, fuzzy, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "n�o consegui ler"
@@ -688,8 +690,8 @@ msgstr "Fei
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -699,8 +701,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -802,12 +804,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -855,17 +857,17 @@ msgstr "Dimens
 msgid "Category index out of range"
 msgstr "Dimens�es da matriz al�m dos limites"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Erro de escrita no arquivo de �ndices espaciais.\n"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, fuzzy, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
@@ -933,8 +935,8 @@ msgstr "N
 msgid "Number of redundant holes: %d"
 msgstr "N�mero de fronteiras:   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
@@ -1034,38 +1036,38 @@ msgstr "N
 msgid "Number of isles: -"
 msgstr "N�mero de ilhas     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "Erro na escrita do arquivo topo\n"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "n�o � poss�vel apagar a linha, o mapa '%s' n�o est� aberto no n�vel 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "Erro de escrita no arquivo de �ndices espaciais.\n"
@@ -1132,9 +1134,11 @@ msgstr "Tipo de vetor desconhecido"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1183,8 +1187,10 @@ msgstr "n
 msgid "Unable to fetch data from table"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Imposs�vel descrever tabela <%s>"
@@ -1225,24 +1231,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "n�o consegui calcular centr�ide para �rea %d"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1263,7 +1269,7 @@ msgstr "n
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1290,12 +1296,12 @@ msgstr "n
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1303,7 +1309,7 @@ msgstr "n
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
@@ -1395,7 +1401,7 @@ msgstr "n
 msgid "No connection defined"
 msgstr "Falha na conex�o.\n"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Imposs�vel mudar de diret�rio para %s"
@@ -1411,7 +1417,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
@@ -1633,7 +1639,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr "n�o consegui abrir arquivo tempor�rio"
@@ -1648,17 +1654,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "n�o consegui abrir arquivo tempor�rio"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "n�o consegui calcular centr�ide para �rea %d"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
@@ -1744,26 +1750,43 @@ msgstr "Ignorando fei
 msgid "OGR feature type '%s' not supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "n�o consegui abrir arquivo topo para escrita: %s\n"
@@ -1868,7 +1891,8 @@ msgstr "n
 msgid "Unable to add database link for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
@@ -1901,6 +1925,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1910,7 +1949,7 @@ msgstr "Ignorando fei
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, fuzzy, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Imposs�vel mudar de diret�rio para %s"
@@ -2192,7 +2231,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2205,130 +2244,130 @@ msgstr "Vetor de entrada '%s' n
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 #, fuzzy
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Um mapa que n�o est� no mapset atual n�o pode ser aberto para atualiza��o."
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, fuzzy, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, fuzzy, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "n�o consegui abrir vetor antigo %s no n�vel %d"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Favor reconstruir a topologia do vetor '%s@%s'"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, fuzzy, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Nome do mapa n�o obedece ao SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, fuzzy, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, fuzzy, c-format
 msgid "Unable to stat file <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "Tamanho do arquivo 'coor' difere do valor gravado no arquivo topo."
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, fuzzy, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Favor reconstruir a topologia do vetor '%s@%s'"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "Tamanho do arquivo 'coor' difere do valor gravado no arquivo topo."
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2583,29 +2622,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "N�mero de primitivas:   %d\n"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Criando topologia ...\n"
@@ -2635,77 +2674,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "n�o consegui calcular centr�ide para �rea %d"
 
-#: ../lib/vector/Vlib/net.c:117
-#, fuzzy
-msgid "Building graph..."
-msgstr "Criando topologia ...\n"
-
-#: ../lib/vector/Vlib/net.c:162
-#, fuzzy
-msgid "Unable to build network graph"
-msgstr "n�o consegui encontrar vetor %s"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, fuzzy, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "Tipo da coluna z n�o � suportado (deve ser inteiro ou double)"
-
-#: ../lib/vector/Vlib/net.c:225
-#, fuzzy
-msgid "Registering arcs..."
-msgstr "Registrando linhas: "
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-#, fuzzy
-msgid "Cannot add network arc"
-msgstr "n�o consegui calcular centr�ide para �rea %d"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, fuzzy, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr "Registro no banco de dados para categoria %d n�o encontrado"
-
-#: ../lib/vector/Vlib/net.c:444
-#, fuzzy
-msgid "Flattening the graph..."
-msgstr "Criando topologia ...\n"
-
-#: ../lib/vector/Vlib/net.c:453
-#, fuzzy
-msgid "Graph was built"
-msgstr "A topologia foi criada.\n"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2808,14 +2776,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Falha na conex�o.\n"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Falha na conex�o.\n"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2883,62 +2858,57 @@ msgstr "Driver padr
 msgid "Default database is not set"
 msgstr "Banco de dados padr�o n�o foi especificado"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "dblink %d solicitado, %d links no m�ximo"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Erro na regra da linha %d em %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 #, fuzzy
 msgid "Unable to open OGR DBMI driver"
 msgstr "n�o consegui abrir driver DBMI OGR"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "Erro desconhecido"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 #, fuzzy
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Imposs�vel mudar de diret�rio para %s"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3088,98 +3058,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, fuzzy, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Proje��o desconhecida"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 #, fuzzy
 msgid "Vector map name is not SQL compliant"
 msgstr "Nome do mapa n�o obedece ao SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, fuzzy, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, fuzzy, c-format
 msgid "Unable to delete table <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, fuzzy, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, fuzzy, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, fuzzy, c-format
 msgid "Unable to delete file '%s'"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, fuzzy, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/vector/Vlib/map.c:487
+#: ../lib/vector/Vlib/map.c:528
 #, fuzzy, c-format
-msgid "Unable to remove directory '%s'"
+msgid "Unable to remove directory '%s': %s"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3270,6 +3240,151 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+#, fuzzy
+msgid "Building graph..."
+msgstr "Criando topologia ...\n"
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+#, fuzzy
+msgid "Unable to build network graph"
+msgstr "n�o consegui encontrar vetor %s"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Imposs�vel descrever tabela <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, fuzzy, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "Tipo da coluna z n�o � suportado (deve ser inteiro ou double)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, fuzzy, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr "Registro no banco de dados para categoria %d n�o encontrado"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "n�o consegui calcular centr�ide para �rea %d"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "Registro no banco de dados para categoria %d n�o encontrado"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "n�o consegui calcular centr�ide para �rea %d"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+#, fuzzy
+msgid "Registering arcs..."
+msgstr "Registrando linhas: "
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr "Registro no banco de dados para categoria %d n�o encontrado"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr "Registro no banco de dados para categoria %d n�o encontrado"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+#, fuzzy
+msgid "Flattening the graph..."
+msgstr "Criando topologia ...\n"
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+#, fuzzy
+msgid "Graph was built"
+msgstr "A topologia foi criada.\n"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+#, fuzzy
+msgid "Cannot add network arc"
+msgstr "n�o consegui calcular centr�ide para �rea %d"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3385,7 +3500,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, fuzzy, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3529,88 +3644,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "n�o consegui abrir arquivo tempor�rio"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Nome da coluna de atributos"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "problema lendo arquivo cell raster"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Ignorando fei��o OGR sem ID"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Dimens�es da matriz al�m dos limites"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
@@ -3619,32 +3744,36 @@ msgstr "Fei
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Imposs�vel mudar de diret�rio para %s"
@@ -3684,7 +3813,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3701,12 +3830,12 @@ msgid "Error computing map <%s>"
 msgstr "ERRO abrindo mapa raster %s"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3720,9 +3849,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3734,87 +3863,87 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
@@ -3844,132 +3973,132 @@ msgstr "Imposs
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Criando topologia ...\n"
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "n�o consegui escrever os dados hist�ricos para [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "n�o consegui abrir %s para escrita"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "n�o consegui criar o cabe�alho para o arquivo [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3994,20 +4123,20 @@ msgid ""
 "%s"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4016,7 +4145,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4024,12 +4153,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "n�o consegui abrir banco de dados %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4037,49 +4166,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "N�o consegui abrir hist�rico para o vetor %s"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "n�o consegui encontrar [%s]"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "N�o consegui abrir hist�rico para o vetor %s"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4087,182 +4204,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Imposs�vel executar o comando"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "n�o consegui escrever as regras matem�ticas para o mapa %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4270,19 +4387,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4343,58 +4460,65 @@ msgstr "n
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "n�o consegui abrir arquivo tempor�rio"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, fuzzy, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Nome do mapa raster base"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  formato: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Nome do mapa raster base"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4566,28 +4690,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
@@ -4617,189 +4741,230 @@ msgstr "Fei
 msgid "Unable to parse time string: %s"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "n�o consegui abrir [%s]"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "n�o consegui criar arquivo de data para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Arquivo de data inv�lido para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Leste deve ser maior que o Oeste"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Leste deve ser maior que o Oeste"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "n�o consegui criar arquivo de data para o %s mapa %s no mapset %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Leste deve ser maior que o Oeste"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "n�o foi poss�vel abrir o mapa raster [%s em %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4811,32 +4976,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "desconhecido"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s n�o encontrado"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "obrigat�ria: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4844,16 +5009,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4861,79 +5061,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "n�o consegui abrir [%s]"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "O vetor '%s' j� existe e ser� sobrescrito."
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Nome de arquivo ilegal. n�o pode ser '.' ou 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Nome de arquivo ilegal. O caractere <%c> n�o � permitido.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "ERRO abrindo mapa raster %s"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4941,24 +5141,24 @@ msgid ""
 msgstr ""
 "n�o consegui apagar a linha, o mapa '%s' n�o est� aberto em modo de escrita"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr ""
 
@@ -5055,7 +5255,7 @@ msgstr "n
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, fuzzy, c-format
 msgid "Raster map <%s> not found"
 msgstr "Vetor de entrada '%s' n�o encontrado"
@@ -5572,12 +5772,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "n�o h� arquivos %s dispon�veis no mapset ativo\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "n�o h� arquivos %s dispon�veis no mapset ativo\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5795,7 +5995,7 @@ msgstr "Arquivo de data inv
 msgid "WARNING: "
 msgstr "ATEN��O: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ERRO:"
@@ -5930,7 +6130,7 @@ msgstr "campo formato est
 msgid "Duplicate compressed field"
 msgstr "campo comprimido duplicado"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
@@ -6058,22 +6258,22 @@ msgstr "GISRC - vari
 msgid "Variable '%s' not set"
 msgstr "GISRC - vari�vel n�o incializada"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "n�o consegui abrir [%s]"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: n�o consegui abrir o arquivo %s"
@@ -6128,12 +6328,12 @@ msgstr "Par
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Elips�ide n�o fornecido no arquivo %s em %s"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "n�o foi poss�vel gerar o elemento  %s (%s) do mapset"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "n�o foi poss�vel gerar o elemento  %s (%s) do mapset"
@@ -6151,19 +6351,19 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 #, fuzzy
 msgid "Flags"
 msgstr ""
 "\n"
 "Flags:\n"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 #, fuzzy
 msgid "Parameters"
 msgstr ""
@@ -6180,6 +6380,10 @@ msgstr " op
 msgid "Default"
 msgstr " padr�o: %s\n"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6270,19 +6474,23 @@ msgstr ""
 "\n"
 "Flags:\n"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr ""
 "\n"
 "Par�metros:\n"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   padr�o: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   op��es: "
@@ -6562,221 +6770,230 @@ msgstr ""
 msgid "Category value"
 msgstr "Valor da categoria"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Valores da categoria"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Exemplo: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Nome do arquivo de entrada"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "Nome do arquivo de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Nome do arquivo de entrada"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Coordenadas inv�lidas"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "n�o consegui abrir [%s]"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Nome do mapa raster de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Nome do mapa raster de eleva��o"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Nome do mapa raster de eleva��o"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Nome do mapa raster de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Nome do mapa vetor de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Nome do mapa raster3D de entrada"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Nome do mapa raster3D de entrada"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Nome do mapa raster3d de sa�da"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Nome do mapa raster de entrada"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "n�o consegui abrir [%s]"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "Cl�usula WHERE do comando SQL sem palavra-chave 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "n�o consegui apagar a linha"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "Criando topologia ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6895,79 +7112,83 @@ msgstr ""
 "\n"
 "Descri��o:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ERRO:"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 #, fuzzy
 msgid "Unable to determine program name"
 msgstr "n�o consegui encontrar o diret�rio do usu�rio"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Desculpe, <%c> n�o � um flag v�lido\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Desculpe, <%s=> � amb�guo\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Desculpe, <%s> n�o � um par�metro v�lido\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> no mapset <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6976,7 +7197,7 @@ msgstr ""
 "\n"
 "ERRO: sintaxe ilegal no intervalo do par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6985,14 +7206,14 @@ msgstr ""
 "\n"
 "ERRO: valor <%s> fora do intervalo do par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "ERRO: Falta valor para o par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7001,7 +7222,7 @@ msgstr ""
 "\n"
 "ERRO: valor <%s> fora do intervalo do par�metro <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7011,7 +7232,7 @@ msgstr ""
 "ERRO: Par�metro necess�rio <%s> n�o fornecido:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7020,37 +7241,37 @@ msgstr ""
 "\n"
 "ERRO: A op��o <%s> deve ser m�ltipla de %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
@@ -7987,11 +8208,16 @@ msgstr "elips
 msgid "No ellipsoid info given in file"
 msgstr "O arquivo n�o cont�m informa��es sobre o elips�ide"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Falha na leitura inicial do arquivo compactado [%s en %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Falha na leitura inicial do arquivo compactado [%s en %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
@@ -7999,6 +8225,21 @@ msgstr ""
 "\aERRO: Sistema n�o iniciado. O programador n�o incluiu a chamada a "
 "G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8029,51 +8270,46 @@ msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Erro de escrita no arquivo de �ndices espaciais.\n"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "N�o consegui abrir hist�rico para o vetor %s"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
+msgid "No null file for <%s>"
+msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: n�o consegui abrir o arquivo %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "erro escrevendo linha de nulos %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: map [%s] n�o est� aberto para escrita - pedido ignorado"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: descritor de arquivo n�o foi aberto - pedido ignorado"
@@ -8165,22 +8401,22 @@ msgstr "n
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "n�o consegui criar o arquivo de cabe�alho para [%s em %s]"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "imposs�vel escrever arquivo f_format para mapas CELL"
 
@@ -8269,12 +8505,12 @@ msgstr "ERRO abrindo mapa raster %s"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "[%s] no mapset [%s]-o campo formato no cabe�alho do arquivo � inv�lido"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Vetor de entrada '%s' n�o encontrado"
+msgid "Compression with %s is not supported"
+msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8283,93 +8519,93 @@ msgstr ""
 "[%s] no mapset [%s] - est� numa proje��o diferente da regi�o atual:\n"
 "o mapa [%s] em: <%s>, deveria ser <%s> "
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 "[%s] no mapset [%s] - est� em uma zona diferente [%d] da regi�o atual [%d]"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "[%s] em [%s] - bytes demais por c�lula (%d)"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "N�o consegui abrir hist�rico para o vetor %s"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "erro lendo mapa [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "N�o consegui abrir hist�rico para o vetor %s"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Imposs�vel mudar de diret�rio para %s"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr "opencell: %s - nome de arquivo ilegal"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "n�o h� arquivos %s dispon�veis no mapset %s\n"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Bug: tentativa de atualizar mapa que n�o est� no mapset atual."
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "n�o consegui encontrar [%s]"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, fuzzy, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "tipo inv�lido: campo %s no arquivo %s"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "tipo inv�lido: campo %s no arquivo %s"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, fuzzy, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Vetor de entrada '%s' n�o encontrado"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8409,24 +8645,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, fuzzy, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "[%s em %s] - instru��o de leitura para a linha %d est� fora da regi�o"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Erro de escrita no arquivo de �ndices espaciais.\n"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "erro lendo mapa compactado [%s] no mapset [%s], linha %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "erro lendo linha nula %d"
@@ -8669,33 +8921,28 @@ msgstr "desconhecido"
 msgid "Unsupported icon %d"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8774,17 +9021,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "ATEN��O: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Anexando centr�ides:"
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8792,115 +9039,159 @@ msgstr ""
 "Uso:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "para aceitar os valores padr�o"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "proje��o inv�lida\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
+msgstr ""
+
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "n�o consegui alocar mem�ria\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "O formato requisitado n�o foi compilado nesta vers�o"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8910,283 +9201,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Por favor avise aos desenvolvedores do GRASS sobre este erro.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Criando topologia ...\n"
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - vari�vel n�o incializada"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Anexando centr�ides:"
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Falha na conex�o.\n"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "n�o consegui abrir [%s]"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "No h� ajuda dispon�vel para o comando [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "nenhum"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "n�o consegui abrir arquivo tempor�rio"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Fei��o OGR tipo %d n�o suportada)"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
@@ -9454,10 +9761,48 @@ msgstr ""
 #~ msgid "Unable to restore feature/offset %lu in vector map <%s>"
 #~ msgstr "Imposs�vel mudar de diret�rio para %s"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "n�o foi poss�vel abrir o arquivo com a tabela de datum: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "N�o consegui abrir hist�rico para o vetor %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "N�o consegui abrir hist�rico para o vetor %s"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "n�o foi poss�vel encontrar o arquivo null tempor�rio: %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: n�o consegui abrir o arquivo %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Desculpe <%s> n�o � uma op��o v�lida\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "ERRO: op��o <%s>:<%s> j� existe.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Imposs�vel mudar de diret�rio para %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "n�o foi poss�vel abrir o arquivo %s em %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "Pressione ENTER para continuar -->"
 
@@ -9466,12 +9811,8 @@ msgstr ""
 #~ msgstr "Vetor de entrada '%s' n�o encontrado"
 
 #, fuzzy
-#~ msgid "Attributes for category %d not found"
-#~ msgstr "Registro no banco de dados para categoria %d n�o encontrado"
-
-#, fuzzy
-#~ msgid "Cannot fetch row"
-#~ msgstr "n�o consegui obter informa��es da camada"
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Nome do mapa raster de entrada"
 
 #, fuzzy
 #~ msgid "Mode type: {0} not supported."
@@ -9482,9 +9823,9 @@ msgstr ""
 #~ msgstr "Imposs�vel mudar de diret�rio para %s"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Imposs�vel mudar de diret�rio para %s"
+#~ msgid "Attributes for category %d not found"
+#~ msgstr "Registro no banco de dados para categoria %d n�o encontrado"
 
 #, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Nome do mapa raster de entrada"
+#~ msgid "Cannot fetch row"
+#~ msgstr "n�o consegui obter informa��es da camada"
diff --git a/locale/po/grasslibs_ro.po b/locale/po/grasslibs_ro.po
index d74e342..4ac7c0b 100644
--- a/locale/po/grasslibs_ro.po
+++ b/locale/po/grasslibs_ro.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_ro\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-11-21 22:05+0200\n"
 "Last-Translator: Mihai Moise\n"
 "Language-Team: GRASS Translation Team <grass-translations at lists.osgeo.org>\n"
@@ -37,10 +37,12 @@ msgstr ""
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nu s-a putut deschide baza de date <%s> by driver <%s>"
@@ -50,45 +52,45 @@ msgstr "Nu s-a putut deschide baza de date <%s> by driver <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Tabelul <%s> exista deja in baza de date <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Coloana <%s> nu este de tip integer"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Colona <%s> nu s-a găsit"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Nu s-a putut crea tabelul <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr ""
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr ""
@@ -685,8 +687,8 @@ msgstr "Harta vectorială <%s> nu a fost găsită"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -696,8 +698,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -798,12 +800,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -848,16 +850,16 @@ msgstr ""
 msgid "Category index out of range"
 msgstr "Categoria trebuie să fie de tip integer"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 msgid "Error writing out category index file"
 msgstr ""
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -921,8 +923,8 @@ msgstr ""
 msgid "Number of redundant holes: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
@@ -1019,36 +1021,36 @@ msgstr ""
 msgid "Number of isles: -"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Nu s-a putut citit fișierul foto al rasterului <%s>"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Un s-a putut citi harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr ""
 
@@ -1114,9 +1116,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1165,8 +1169,10 @@ msgstr ""
 msgid "Unable to fetch data from table"
 msgstr "Nu s-a putut scrie rândul %i din raster"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr ""
@@ -1205,24 +1211,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr ""
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1241,7 +1247,7 @@ msgstr ""
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1268,12 +1274,12 @@ msgstr ""
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1281,7 +1287,7 @@ msgstr ""
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Un s-a putut citi harta vectorială <%s>"
@@ -1371,7 +1377,7 @@ msgstr ""
 msgid "No connection defined"
 msgstr "Conexiune eșuată."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, c-format
 msgid "Invalid offset (%ld)"
 msgstr ""
@@ -1387,7 +1393,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Nu s-a putut deschide codecul"
@@ -1601,7 +1607,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr ""
 
@@ -1615,17 +1621,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, c-format
 msgid "Unable to read line offset %ld"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, c-format
 msgid "Unable to read feature id %d"
 msgstr ""
@@ -1708,26 +1714,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Nu s-a putut deschide fișierul <%s> pentru scriere"
@@ -1827,7 +1850,8 @@ msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 msgid "Unable to add database link for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr ""
@@ -1859,6 +1883,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Nu s-a putut crea rasterul <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Nu s-a putut deschide <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Nu s-a putut crea tabelul <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1867,7 +1906,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr ""
@@ -2143,7 +2182,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2155,125 +2194,125 @@ msgstr "Harta vectorială <%s> nu a fost găsită"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Un s-a putut citi harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 msgid "Using native format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Nu s-a putut deschide codecul"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2523,29 +2562,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, c-format
 msgid "New vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 msgid "Reading features..."
 msgstr ""
 
@@ -2573,71 +2612,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr ""
@@ -2738,14 +2712,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Conexiune eșuată."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Conexiune eșuată."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2805,59 +2786,54 @@ msgstr ""
 msgid "Default database is not set"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Nu s-a putut deschide <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 msgid "Unknown vector map format"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, c-format
-msgid "Invalid offset (%d)"
-msgstr ""
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, c-format
 msgid "Creating field <%s> failed"
@@ -3007,98 +2983,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Un s-a putut citi harta vectorială <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Proiecţie necunoscută"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
-msgstr ""
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
+msgstr "Nu s-a putut citit fișierul foto al rasterului <%s>"
 
 #: ../lib/vector/Vlib/constraint.c:150
 msgid "Layer constraint ignored for non-native vector formats"
@@ -3181,6 +3157,143 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Colona <%s> nu s-a găsit"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+msgid "Cannot add network arc for virtual node connection."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+msgid "Cannot add network arc representing turn."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr ""
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3294,7 +3407,7 @@ msgid "3D raster map <%s> not found"
 msgstr "rasterul 3D <%s> nu a fost găsit"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3436,86 +3549,96 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Un s-a putut citi harta vectorială <%s>"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Harta raster <%s> nu este găsită"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 msgid "Null value detected"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 msgid "Error executing: Rast_set_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Harta raster <%s> nu este găsită"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Harta raster <%s> nu este găsită"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, python-format
 msgid "Index out of range: %r."
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Harta raster <%s> nu este găsită"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr ""
@@ -3524,32 +3647,36 @@ msgstr ""
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Nu s-a putut citit fișierul foto al rasterului <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Nu s-a putut crea rasterul <%s>"
@@ -3588,7 +3715,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Nume pentru harta vectorială de intrare"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3605,12 +3732,12 @@ msgid "Error computing map <%s>"
 msgstr "Eroare în dechiderea hărții g3d <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3624,9 +3751,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3638,87 +3765,87 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "Eroare în dechiderea hărții g3d <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Un s-a putut citi harta vectorială <%s>"
@@ -3748,130 +3875,130 @@ msgstr "Nu s-a putut dechide harta vectorială <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "rasterul 3D <%s> nu a fost găsit"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Nu s-a putut deschide <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Nu s-a putut deschide rasterul <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 msgid "Extracting data..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "Nu s-a putut scrie rândul %i din raster"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Nu s-a putut deschide fișierul <%s> pentru scriere"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 msgid "Unsupported input format"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, python-format
 msgid "Key word %s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, python-format
 msgid "Create space time %s dataset."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3896,20 +4023,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3918,7 +4045,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3926,12 +4053,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Traducere culori pentru rasterul <%s>..."
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -3939,49 +4066,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Nu s-a putut deschide <%s>"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Nu s-a putut crea tabelul <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Nu s-a putut aloca imaginea"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Nu s-a putut închide harta de intrare"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Nu s-a putut aloca fluxul"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Nu s-a putut deschide codecul"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -3989,182 +4104,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Nu s-a putut aloca imaginea"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, python-format
 msgid "Wrong granularity format: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, python-format
 msgid "Drop map register table: %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Eroare în găsirea intervalului"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4172,19 +4287,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4244,58 +4359,65 @@ msgstr "Traducere culori pentru rasterul <%s>..."
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Nu s-a putut citi intervalul rasterului 3D <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Nu s-a putut închide rasterul 3D <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "Eroare în dechiderea hărții g3d <%s>"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Nu s-a putut crea rasterul <%s>"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4461,28 +4583,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Nu s-a putut citi intervalul rasterului 3D <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr ""
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Nu s-a putut crea rasterul <%s>"
@@ -4512,188 +4634,228 @@ msgstr "rasterul 3D <%s> nu a fost găsit"
 msgid "Unable to parse time string: %s"
 msgstr "Nu s-a putut deschide rasterul <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 msgid "All input space time datasets must have the same temporal type."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "rasterul 3D <%s> nu a fost găsit"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Nu s-a putut închide harta de intrare"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr ""
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4704,30 +4866,30 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr ""
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 msgid "unknown"
 msgstr ""
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, python-format
 msgid "Flag not found: %s"
 msgstr ""
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 msgid "<required>"
 msgstr ""
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4735,16 +4897,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Elipsoidul nu este valid <%s> în fişier"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, python-format
+msgid "Invalid size <%d>"
+msgstr ""
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, python-format
+msgid "Invalid FP size <%d>"
+msgstr ""
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, python-format
+msgid "Invalid integer size <%d>"
+msgstr ""
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4752,103 +4949,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Nu s-a putut închide harta de intrare"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr ""
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr ""
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr ""
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr ""
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "nicio dată"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Culoare"
@@ -4947,7 +5144,7 @@ msgstr "Nu s-a putut deschide fișierul <%s> pentru scriere"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Harta raster <%s> nu este găsită"
@@ -5448,12 +5645,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr ""
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "Nu s-a putut dechide harta vectorială <%s>"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5665,7 +5862,7 @@ msgstr "Nu s-a putut dechide harta vectorială <%s>"
 msgid "WARNING: "
 msgstr ""
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr ""
@@ -5780,7 +5977,7 @@ msgstr ""
 msgid "Duplicate compressed field"
 msgstr ""
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "Harta raster <%s> nu este găsită"
@@ -5904,22 +6101,22 @@ msgstr ""
 msgid "Variable '%s' not set"
 msgstr ""
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Nu s-a putut deschide '%s'"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "Nu s-a putut deschide '%s'"
@@ -5974,12 +6171,12 @@ msgstr ""
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr ""
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr ""
@@ -5997,16 +6194,16 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr ""
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parametrii"
 
@@ -6018,6 +6215,10 @@ msgstr "Opțiuni"
 msgid "Default"
 msgstr ""
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6097,17 +6298,21 @@ msgstr ""
 msgid "Flags:"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Parametrii"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr ""
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr ""
@@ -6379,204 +6584,213 @@ msgstr ""
 msgid "Category value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Id trăsătură"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 msgid "Name of input file"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Culoare"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 msgid "Coordinates"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 msgid "Name of saved region"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 msgid "Name of the input space time datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 msgid "Name of the output space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 msgid "Name of the input space time raster dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 msgid "Name of the input space time raster datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 msgid "Name of the output space time raster dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Nume pentru harta vectorială de ieșire"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 msgid "Name of the input space time raster3d dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 msgid "Name of the input space time raster3d datasets"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 msgid "Name of the output space time raster3d dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 msgid "Type of the input space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Nu s-a putut închide harta de intrare"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 msgid "The temporal type of the space time dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 msgid "Do not create attribute table"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6690,147 +6904,151 @@ msgstr ""
 msgid "no description"
 msgstr ""
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr ""
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 msgid "ERROR"
 msgstr ""
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr ""
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr ""
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr ""
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
 "\tPresented as: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
 "\tLegal range: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr "Parametri formatului de ieșire invalizi"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
 "\tValid options: %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
 "\t(%s)"
 msgstr ""
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
 "\tYou provided %d item(s): %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, c-format
 msgid "%s= is not a separator option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, c-format
 msgid "%s= is not a file option"
 msgstr ""
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "rasterul 3D <%s> nu a fost găsit"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Nu s-a putut deschide <%s>"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Nu s-a putut crea rasterul <%s>"
@@ -7790,15 +8008,35 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr ""
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr ""
 
+#: ../lib/raster/format.c:176
+#, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr ""
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7829,51 +8067,46 @@ msgstr "Eroare în găsirea intervalului"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Eroare în găsirea intervalului"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr ""
 
+#: ../lib/raster/put_row.c:486
+msgid "GDAL output doesn't support writing null rows separately"
+msgstr ""
+
 #: ../lib/raster/put_row.c:489
 #, c-format
 msgid "No null file for <%s>"
 msgstr ""
 
-#: ../lib/raster/put_row.c:503
-msgid "GDAL output doesn't support writing null rows separately"
-msgstr ""
-
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
-
-#: ../lib/raster/put_row.c:528
-#, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "Nu s-a putut deschide <%s>"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Eroare în găsirea intervalului"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "Eroare în timpul scrierii unui cadru video"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr ""
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr ""
 
@@ -7963,22 +8196,22 @@ msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr ""
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Nu s-a putut citit fișierul foto al rasterului <%s>"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Nu s-a putut citit fișierul foto al rasterului <%s>"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 
@@ -8063,104 +8296,104 @@ msgstr "Nu s-a putut citi intervalul fp pentru rasterul <%s>"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Harta raster <%s> nu este găsită"
+msgid "Compression with %s is not supported"
+msgstr "rasterul 3D <%s> nu a fost găsit"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr "Rasterul <%s> este în afara actualei regiuni. Încărcarea a eșuat."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Rasterul <%s> este în afara actualei regiuni. Încărcarea a eșuat."
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Nu s-a putut deschide rasterul <%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Eroare în dechiderea hărții g3d <%s>"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Nu s-a putut citi intervalul pentru rasterul <%s> "
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Nu s-a putut scrie rândul %i din raster"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr ""
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr ""
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr ""
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, c-format
 msgid "No temp files available: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Nu s-a putut crea rasterul <%s>"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Nu s-a gasit '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, c-format
 msgid "Missing type: field in file '%s'"
 msgstr ""
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8200,24 +8433,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Eroare în găsirea intervalului"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Eroare în găsirea intervalului"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Eroare în găsirea intervalului"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Eroare în găsirea intervalului"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Eroare în găsirea intervalului"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Eroare în dechiderea hărții g3d <%s>"
@@ -8448,33 +8697,28 @@ msgstr ""
 msgid "Unsupported icon %d"
 msgstr ""
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, c-format
 msgid "Unknown display driver <%s>"
 msgstr ""
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, c-format
 msgid "Using display driver <%s>..."
 msgstr ""
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Nu s-a putut deschide <%s>"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8550,123 +8794,167 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Nu s-a putut scrie rândul %i din raster"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 msgid "WARNING"
 msgstr ""
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 msgid "Exiting..."
 msgstr ""
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 msgid "Usage"
 msgstr ""
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr ""
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:350
+msgid "initial GRASS Location"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
+msgstr ""
+
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr ""
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr ""
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8676,71 +8964,78 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
+#: ../lib/init/grass.py:833
 #, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
 msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
@@ -8749,207 +9044,216 @@ msgstr ""
 "gsd_rot(): %c este o specificare de axă invalidă. Rotația ignorată. Adresați-"
 "vă dezvoltatorilor GRASS pentru această eroare"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 msgid "Building user fontcap..."
 msgstr ""
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
+#: ../lib/init/grass.py:1289
+msgid "The SHELL variable is not set"
 msgstr ""
 
-#: ../lib/init/grass.py:967
-msgid "The SHELL variable is not set"
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
 msgstr ""
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
+#: ../lib/init/grass.py:1343
 #, python-format
-msgid "Executing '%s' ..."
+msgid "Executing <%s> ..."
 msgstr ""
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Conexiune eșuată."
 
-#: ../lib/init/grass.py:996
+#: ../lib/init/grass.py:1353
 #, python-format
-msgid "GRASS GUI should be <%s>"
+msgid "Execution of <%s> finished."
 msgstr ""
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Nu s-a putut închide rasterul 3D <%s>"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
+#: ../lib/init/grass.py:1576
+msgid "Done."
 msgstr ""
 
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
+#: ../lib/init/grass.py:1578
 msgid "Goodbye from GRASS GIS"
 msgstr ""
 
-#: ../lib/init/grass.py:1206
-msgid "Done."
-msgstr ""
-
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "rasterul 3D <%s> nu a fost găsit"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, python-format
 msgid "Failed to start shell '%s'"
 msgstr ""
@@ -9216,12 +9520,42 @@ msgstr "Nu mai este memorie"
 #~ msgstr "Nu mai este memorie"
 
 #, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "Nu s-a putut citit fișierul categorie al rasterului <%s>"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "Nu s-a putut deschide <%s>"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Nu s-a putut deschide <%s>"
+
+#, fuzzy
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#~ msgid "Category must be integer"
-#~ msgstr "Categoria trebuie să fie de tip integer"
-
 #, fuzzy
 #~ msgid "Removing empty 3D raster maps"
 #~ msgstr "Nume pentru harta vectorială de intrare"
+
+#~ msgid "Category must be integer"
+#~ msgstr "Categoria trebuie să fie de tip integer"
diff --git a/locale/po/grasslibs_ru.po b/locale/po/grasslibs_ru.po
index c53c327..4a51eff 100644
--- a/locale/po/grasslibs_ru.po
+++ b/locale/po/grasslibs_ru.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2009-01-27 22:58-0600\n"
 "Last-Translator: Maxim Dubinin <sim at gis-lab.info>\n"
 "Language-Team: Russian <grass-translations at lists.osgeo.org>\n"
@@ -37,10 +37,12 @@ msgstr "Невозможен запуск драйвера <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Невозможно открыть БД <%s> с помощью драйвера <%s>"
@@ -50,45 +52,45 @@ msgstr "Невозможно открыть БД <%s> с помощью драй
 msgid "Unable to get list tables in database <%s>"
 msgstr "Невозможно получить список таблиц базы данных <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Таблица <%s> уже есть в базе данных <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Невозможно открыть выбранный курсор: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Поле <%s> не целочисленное"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Поле <%s> не найдено"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Невозможно создать таблицу <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Неизвестный тип поля (поле <%s>)"
@@ -707,8 +709,8 @@ msgstr "тип данных OGR %d не поддерживается"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -718,8 +720,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -826,12 +828,12 @@ msgstr ""
 "Формат объектного индекса %d.%d не поддерживается этим выпуском. Попробуйте "
 "перестроить топологию или обновить GRASS"
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "ошибка GngFlatten"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -878,17 +880,17 @@ msgstr "Индекс слоя вне диапазона"
 msgid "Category index out of range"
 msgstr "Индекс слоя вне диапазона"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Невозможно открыть файл индекса категорий для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Ошибка записи в файл индекса категорий <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Невозможно открыть файл индекса категорий для векторного слоя <%s>"
@@ -954,8 +956,8 @@ msgstr "Количество неправильных границ: %d"
 msgid "Number of redundant holes: %d"
 msgstr "Количество границ: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Невозможно открыть файл индекса категорий для векторного слоя <%s>"
@@ -1052,16 +1054,16 @@ msgstr "Количество полигонов: -"
 msgid "Number of isles: -"
 msgstr "Количество островов: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Ошибка записи топо файла"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
@@ -1070,21 +1072,21 @@ msgstr ""
 "Невозможно построить пространственный индекс из топологии, векторный слой не "
 "открыт на втором топо уровне"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "Ошибка (Vect_build_sidx_from_topo): узел не существует"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Невозможно открыть файл индекса категорий для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Ошибка записи файл пространственного индекса"
 
@@ -1150,9 +1152,11 @@ msgstr "Неизвестное ключевое слово %s в заголов
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1201,8 +1205,10 @@ msgstr "Невозможно выбрать атрибуты"
 msgid "Unable to fetch data from table"
 msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Поле <%s> не найдено в таблице <%s>"
@@ -1242,17 +1248,17 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Невозможно добавить сетевую дугу"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "ошибка dglShortestPath : %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Невозможно открыть файл истории для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
@@ -1261,7 +1267,7 @@ msgstr ""
 "Файлы coor векторного слоя <%s@%s> больше, чем они должны быть (на %ld "
 "байтов)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1283,7 +1289,7 @@ msgstr "Попытка считать точки из несуществующе
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1310,12 +1316,12 @@ msgstr "Невозможно прочесть гистограмму для уд
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1323,7 +1329,7 @@ msgstr "Невозможно прочесть гистограмму для уд
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Невозможно открыть файл индекса категорий для векторного слоя <%s>"
@@ -1414,7 +1420,7 @@ msgstr "Невозможно перезаписать объект %d"
 msgid "No connection defined"
 msgstr "Ошибка соединения."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Неправильное имя векторного слоя <%s>"
@@ -1430,7 +1436,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Невозможно перезаписать объект %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Невозможно открыть файл %s"
@@ -1653,7 +1659,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "для этого формата/уровня не поддерживается "
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Попытка считать информацию об удаленной линии"
 
@@ -1667,17 +1673,17 @@ msgstr "Невозможно перезаписать объект %d"
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Невозможно прочитать линию %d"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Попытка считать точки из несуществующего полигона"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Невозможно перезаписать объект %d"
@@ -1762,27 +1768,44 @@ msgstr "OGR объект без ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "тип данных OGR %d не поддерживается"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Неправильное направление линии в Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr "Для этого слоя OGR не поддерживается cлучайное чтение"
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr " Невозможно открыть топо-файл для записи <%s>"
@@ -1885,7 +1908,8 @@ msgstr "Невозможно скопировать векторный слой
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Невозможно добавить связь с базой данных для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Невозможно скопировать таблицу <%s>"
@@ -1917,6 +1941,21 @@ msgstr "Оверлей: типы линия/граница не поддержи
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Оверлей: типы полигон x полигон не поддерживаются оператором AND"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Невозможно создать таблицу <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Невозможно скопировать таблицу <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Невозможно скопировать таблицу <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1926,7 +1965,7 @@ msgstr "OGR объект без ID проигнорирован"
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Невозможно открыть OGR источник данных '%s'"
@@ -2214,7 +2253,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2227,33 +2266,33 @@ msgstr "Векторный слой <%s> не найден"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Векторный слой не находится в текущем наборе и не может быть открыт для "
 "обновления"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Невозможно открыть векторный слой <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Невозможно открыть файл топологии для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2262,98 +2301,98 @@ msgstr ""
 "Невозможно открыть векторный слой <%s> на уровне %d. Попробуйте перестроить "
 "векторную топологию с помощью v.build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Построение топологии для векторного слоя  <%s>..."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "Невозможно открыть векторный слой <%s>"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Невозможно открыть файл истории для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Имя векторного слоя не SQL-совместимо"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Невозможно удалить векторный слой <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Невозможно открыть файл истории для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "для этого формата/уровня не поддерживается "
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, fuzzy, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "Размер файла 'coor' отличается от значения сохраненного в файле топологии"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Пожалуйста, перестройте топологию для векторного слоя <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 "Размер файла 'coor' отличается от значения сохраненного в файле топологии"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Невозможно открыть файл %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2613,29 +2652,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, fuzzy, c-format
 msgid "Snapped vertices: %d"
 msgstr "Прилепленные вершины"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Новые узлы"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Построение полигонов..."
@@ -2665,75 +2704,6 @@ msgstr "%s: Полигон %d не существует"
 msgid "Attempt to access dead area %d"
 msgstr "Попытка удалить уже удаленный объект"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Построение графа..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Невозможно построить сетевой граф"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Не выбран столбец forward costs"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "поле Arc < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "Тип данных поля <%s> не поддерживается (должен быть числовым)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Регистрируются дуги..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"Запись в БД для линии %d (cat = %d, вперед/оба направления) не найден "
-"(вперед/оба направления линии пропущены)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-"Запись в БД для линии %d (cat = %d, направление назад) не найден "
-"(направление назад пропущено)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Невозможно добавить сетевую дугу "
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Устанавливается стоимость для узлов..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr "Запись в БД для узла  %d (cat = %d) не найдена (стоимость = 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Выпрямление графа"
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Граф построен"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Неправильное направление линии в Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2839,14 +2809,21 @@ msgstr "Испорченная строка в заголовке  %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Ошибка соединения."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Ошибка соединения."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2912,26 +2889,26 @@ msgstr "Драйвер по умолчанию не установлен"
 msgid "Default database is not set"
 msgstr "База данных по умолчанию не установлена "
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Запрашиваемый dblink %d, максимальное число связей %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Ошибка в правиле для ряда %d в %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Невозможно открыть слой <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Невозможно открыть драйвер OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2939,35 +2916,30 @@ msgstr ""
 "Все тесты FID окончены неудачно. Ни  'FID' ни 'ogc_fid' ни 'ogr_fid' ни "
 "'gid' недоступны в таблице OGR DB"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "неизвестный оператор"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "Ошибка: попытка обновить слой не содержащийся в текущем наборе ."
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Неправильное имя векторного слоя <%s>"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3118,97 +3090,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Невозможно удалить запись %d из пространственного индекса"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Невозможно открыть файл заголовка вектора <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Испорченная строка в заголовке  %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Неизвестное ключевое слово %s в заголовке вектора"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Неизвестная проекция"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Имя векторного слоя не SQL-совместимо"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Невозможно скопировать векторный слой <%s> в <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Невозможно удалить таблицу <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Невозможно создать индекс для таблицы <%s>, ключ <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Неправильное имя векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Невозможно найти таблицу <%s> связанную с векторным слоем <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Таблица <%s> связанная с векторным слоем <%s> не существует"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Невозможно открыть папку '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Невозможно удалить файл '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Невозможно переименовать папку '%s' в '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Невозможно удалить папку '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3295,6 +3267,154 @@ msgstr "Векторная структура не иннициализиров
 msgid "Map structure has been closed"
 msgstr "Структура карты закрыта"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Построение графа..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Невозможно построить сетевой граф"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Не выбран столбец forward costs"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "поле Arc < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Поле <%s> не найдено в таблице <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "Тип данных поля <%s> не поддерживается (должен быть числовым)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Устанавливается стоимость для узлов..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr "Запись в БД для узла  %d (cat = %d) не найдена (стоимость = 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Невозможно добавить сетевую дугу "
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "Запись в БД для узла  %d (cat = %d) не найдена (стоимость = 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Невозможно добавить сетевую дугу "
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "поле Arc < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Регистрируются дуги..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Запись в БД для линии %d (cat = %d, вперед/оба направления) не найден "
+"(вперед/оба направления линии пропущены)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+"Запись в БД для линии %d (cat = %d, направление назад) не найден "
+"(направление назад пропущено)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Выпрямление графа"
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Граф построен"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"Запись в БД для линии %d (cat = %d, вперед/оба направления) не найден "
+"(вперед/оба направления линии пропущены)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+"Запись в БД для линии %d (cat = %d, направление назад) не найден "
+"(направление назад пропущено)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Невозможно добавить сетевую дугу "
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3410,7 +3530,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Растровый 3D слой <%s> не найден"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3554,88 +3674,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Невозможно прочитать линию %d"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Невозможно перезаписать объект %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "тип данных OGR %d не поддерживается"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Имя поля"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Ошибка чтения растрового слоя"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "OGR объект без ID проигнорирован"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Индекс вне диапазона в"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Таблица <%s> связанная с векторным слоем <%s> не существует"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "тип данных OGR %d не поддерживается"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "тип данных OGR %d не поддерживается"
@@ -3644,32 +3774,36 @@ msgstr "тип данных OGR %d не поддерживается"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Невозможно создать растровый слой <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Невозможно прочитать цветовой файл для растрового слоя <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Невозможно создать растровый слой <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Невозможно скопировать векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Невозможно удалить векторный слой <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Невозможно создать растровый слой <%s>"
@@ -3709,7 +3843,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3726,12 +3860,12 @@ msgid "Error computing map <%s>"
 msgstr "Ошибка открытия g3d слоя <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3745,9 +3879,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3759,88 +3893,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Неизвестный тип вектора."
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  формат: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Неверный формат файла временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "синтаксическая ошибка"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Неверный формат файла временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Неверный формат файла временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
@@ -3870,132 +4004,132 @@ msgstr "Невозможно создать векторный слой <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Невозможно открыть векторный слой <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Растровый слой <%s> не найден"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Векторный слой <%s> не найден"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Построение полигонов..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Невозможно удалить папку '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "невозможно записать историю для [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Невозможно открыть файл определений векторной базы данных '%s'"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "невозможно найти временный null-файл %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "невозможно найти временный null-файл %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Невозможно открыть cidx файл <%s> для записи"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Тип объекта"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Невозможно создать файл заголовка для [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4020,20 +4154,20 @@ msgid ""
 "%s"
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Невозможно открыть файл определений векторной базы данных '%s'"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4042,7 +4176,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Невозможно открыть файл определений векторной базы данных '%s'"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4050,12 +4184,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Невозможно открыть файл определений векторной базы данных '%s'"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Невозможно открыть базу данных %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4063,49 +4197,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Невозможно создать элемент набора %s (%s)"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Невозможно открыть файл определений векторной базы данных '%s'"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Невозможно создать таблицу <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Невозможно выполнить команду"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Невозможно найти '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Невозможно выполнить команду"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4113,182 +4235,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Невозможно выполнить команду"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Невозможно выполнить команду"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Неизвестный тип вектора."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  формат: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Тип объекта"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Невозможно записать правила разбиения значений для слоя %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  формат: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4296,19 +4418,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4369,58 +4491,65 @@ msgstr "Невозможно найти векторный слой <%s> в <%s>
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Не могу открыть файл заголовка"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Невозможно прочесть диапазон растрового 3D слоя <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Невозможно закрыть растровый 3D слой <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Имя базовой растровой карты"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  формат: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Имя базовой растровой карты"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4592,28 +4721,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Невозможно открыть файл заголовка для растрового слоя <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Растровый слой <%s> не найден"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Невозможно прочитать диапазон растрового слоя <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Растровый слой <%s> не найден"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
@@ -4643,189 +4772,230 @@ msgstr "тип данных OGR %d не поддерживается"
 msgid "Unable to parse time string: %s"
 msgstr "Невозможно открыть файл %s в <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Имя исходной растровой карты"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Растровый слой <%s> не найден"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Невозможно закрыть исходный слой"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Невозможно найти векторный слой <%s> в <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "Невозможно создать файл временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Неверный формат файла временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Неверный формат файла временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Неверный формат файла временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Восток должен быть больше Запада"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Восток должен быть больше Запада"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "Невозможно создать файл временной метки для %s карты %s в наборе %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Восток должен быть больше Запада"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Невозможно найти векторный слой <%s> в <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4837,32 +5007,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "неизвестно"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s не найден"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "необходимо: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4870,16 +5040,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Неправильное имя векторного слоя <%s>"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Неправильное имя векторного слоя <%s>"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Неправильное имя векторного слоя <%s>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Неправильное имя векторного слоя <%s>"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4887,79 +5092,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Невозможно закрыть исходный слой"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Векторный слой <%s> уже существует и будет перезаписан"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Неправильное имя файла.  Не должно быть '.' или 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Неправильное имя файла. Знак <%c> недопустим.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "Для слоя %d не определено соединение с базой данных"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Ошибка загрузки векторного слоя <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4968,24 +5173,24 @@ msgstr ""
 "Невозможно восстановить объект %d, векторный слой <%s> не открыт в режиме "
 "записи"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Имя исходного векторного слоя"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Цвет"
@@ -5084,7 +5289,7 @@ msgstr "Невозможно открыть файл <%s> для записи"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Растровый слой <%s> не найден"
@@ -5606,12 +5811,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "в текущем наборе (%s) файлов %s нет"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "в текущем наборе (%s) файлов %s нет"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5827,7 +6032,7 @@ msgstr "Задана неверная временная метка для %s к
 msgid "WARNING: "
 msgstr "ПРЕДУПРЕЖДЕНИЕ: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ОШИБКА: "
@@ -5963,7 +6168,7 @@ msgstr "дважды задано поле формата"
 msgid "Duplicate compressed field"
 msgstr "дважды задано поле сжатия"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Полигон %d не существует"
@@ -6089,22 +6294,22 @@ msgstr "GISRC - переменная не установлена"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): Переменная %s не установлена"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): набор <%s> не совпадает с xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Невозможно открыть [%s]"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr "G__open(write): xmapset <%s> != G_mapset() <%s>"
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: невозможно открыть файл %s"
@@ -6159,12 +6364,12 @@ msgstr "Неверный параметр es: поле '%s' в файле %s в
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Нет информации об эллипсоиде в файле %s в <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Невозможно создать элемент набора %s (%s)"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Невозможно создать элемент набора %s (%s)"
@@ -6182,16 +6387,16 @@ msgid "SYNOPSIS"
 msgstr "Синопсис"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Флаги"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Параметры"
 
@@ -6203,6 +6408,10 @@ msgstr "Опции"
 msgid "Default"
 msgstr "По умолчанию"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6294,17 +6503,22 @@ msgstr "OGR объект без ID проигнорирован"
 msgid "Flags:"
 msgstr "Флаги"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Краткое описание работы модуля"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Параметры"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   по умолчанию: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   опции: "
@@ -6593,221 +6807,230 @@ msgstr ""
 msgid "Category value"
 msgstr "Значение категории"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Значения категорий"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Пример: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "Id объекта"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Id объектов"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Имя исходного файла"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "Имя выходного файла"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Разделитель полей"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Цвет"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Либо стандратное название цвета, либо триплет R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Либо стандартный цвет GRASS, либо триплет R:G:B, либо \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Имя исходного файла"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Неверные координаты"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Имя исходного векторного слоя"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Невозможно установить фокус"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Имя исходного(ых) растрового(ых) слоя(слоев)"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Имя выходной растровой карты"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Имя растрового слоя высот"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Имя растрового слоя высот"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Имя выходной растровой карты"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Имя исходного(ых) векторного(ых) слоя(слоев)"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Имя исходного(ых) векторного(ых) слоя(слоев)"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Недостаточно места в векторном массиве"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Имя исходного raster3d слоя"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Имя исходного raster3d слоя"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Имя выходного raster3d слоя"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Имя исходной растровой карты"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Имя исходной растровой карты"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Невозможно закрыть исходный слой"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "условия WHERE  SQL-запроса не имеет ключевого слова 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Загружаются данные из таблицы аттрибутов"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 msgid "Do not build topology"
 msgstr ""
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6926,82 +7149,89 @@ msgstr ""
 "\n"
 "Описание:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "Ошибка в описаниях, опция %s в <%s> не существует"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "Ошибка в описаниях, опция %s в <%s> не существует"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Используйте либо флаг --quiet либо --verbose, но не оба вместе. "
 "Предполагается --verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 "Используйте либо флаг --quiet либо --verbose, но не оба вместе. "
 "Предполагается --quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+"Используйте либо флаг --quiet либо --verbose, но не оба вместе. "
+"Предполагается --quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Извините, опция <%s> неверна\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ОШИБКА: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Невозможно определить имя программы"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Извините, флаг <%c> неверен\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Извините, параметр <%s=> неоднозначен\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Извините, параметр <%s> неверен\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> в наборе <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7010,7 +7240,7 @@ msgstr ""
 "\n"
 "Ошибка: неверный синтаксис диапазона для параметра <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7019,14 +7249,14 @@ msgstr ""
 "\n"
 "Ошибка: значение <%s> выходит за диапазон параметра <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "Ошибка: Отсутвует значение для параметра <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7035,7 +7265,7 @@ msgstr ""
 "\n"
 "Ошибка: значение <%s> выходит за диапазон параметра <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7045,7 +7275,7 @@ msgstr ""
 "Ошибка: Требуемый параметр <%s> не установлен:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7054,37 +7284,37 @@ msgstr ""
 "\n"
 "Ошибка: опция <%s> должна задаваться в множественных значениях %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Извините, опция <%s> неверна\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Разделитель полей"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Извините, опция <%s> неверна\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "тип данных OGR %d не поддерживается"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Невозможно открыть файл %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Невозможно создать таблицу <%s>"
@@ -8064,17 +8294,37 @@ msgstr "Неправильные параметры эллипсоида (a, rf,
 msgid "No ellipsoid info given in file"
 msgstr "В файле нет информации об эллипсоиде"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Ошибка чтения сжатого файла [%s в %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Ошибка чтения сжатого файла [%s в %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 "Система не инициализирована. Программистов не выполнен вызов G_gisinit()."
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8105,51 +8355,46 @@ msgstr "Ошибка чтения сжатой слоя [%s] из набора [
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Ошибка записи в файл индекса категорий <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Невозможно открыть файл заголовка вектора <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "невозможно найти временный null-файл %s"
+msgid "No null file for <%s>"
+msgstr "Невозможно открыть файл заголовка вектора <%s>"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: невозможно открыть файл %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "ошибка при записи нулевой строки %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: слой [%s] не открыт для записи - запрос игнорирован"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: дескриптор файла не открыт  - запрос игнорирован"
@@ -8240,22 +8485,22 @@ msgstr "Невозможно прочитать файл заголовка дл
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Невозможно прочитать файл заголовка для растрового слоя <%s@%s>."
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "Неправильное имя векторного слоя <%s>"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Невозможно удалить файл '%s'"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "невозможно записать файл f_format для CELL карт"
 
@@ -8344,12 +8589,12 @@ msgstr "Ошибка загрузки растрового 3d слоя <%s>"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "Растровый слой <%s@%s>: формат поля в файле заголовка неверен"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Растровый слой <%s> не найден в наборе <%s>"
+msgid "Compression with %s is not supported"
+msgstr "тип данных OGR %d не поддерживается"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8358,94 +8603,94 @@ msgstr ""
 "Растровый слой <%s@%s> в проекции отличной от проекции текущего региона. "
 "Найден растровый слой <%s@%s>, должно быть <%s> ."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Растровый слой <%s@%s> в другой зоне (%d) чем текущий регион (%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Растровый слой <%s@%s>: слишком много байт на ячейку (%d) "
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 "слой <%s@%s> является связью GDAL но GRASS скомпилирован без поддержки GDAL"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Невозможно открыть файл заголовка для растрового слоя <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Ошибка чтения слоя <%s@%s>, ряд %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Невозможно открыть файл заголовка вектора <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Невозможно открыть файл %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "Неправильное имя векторного слоя <%s>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> - неправильное имя файла"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "G__open_raster_new(): недоступны временные файлы"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Растрового слоя <%s> нет в текущем наборе (%s)"
+
+#: ../lib/raster/open.c:817
 #, fuzzy
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr "G_set_fp_type(): может быть вызвано только с FCELL_TYPE или DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Растровый слой <%s> не найден в наборе <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Невозможно найти '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Неверный тип: поле '%s' в файле '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Неверный тип: поле '%s' в файле '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Растровый слой <%s> не xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 #, fuzzy
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
@@ -8487,24 +8732,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "Чтение растрового слоя <%s@%s> ряд %d находится вне диапазона"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Ошибка записи в файл индекса категорий <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Ошибка чтения сжатой слоя [%s] из набора [%s], ряд %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Ошибка чтения нулевого ряда %d"
@@ -8743,33 +9004,28 @@ msgstr "неизвестно"
 msgid "Unsupported icon %d"
 msgstr "Тип объекта"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Невозможен запуск драйвера <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Невозможен запуск драйвера <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Невозможно открыть файл %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8845,17 +9101,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Невозможно открыть файл статистики <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "ПРЕДУПРЕЖДЕНИЕ: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Устанавливается стоимость для узлов..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8863,115 +9119,159 @@ msgstr ""
 "Использование:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "чтобы установить по умолчанию"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "неверная проекция\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Невозможно разместить временное изображение"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Запрашиваемый формат для этой версии не скомпилирован."
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8981,283 +9281,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Извините, опция <%s> неверна\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Сообщите разработчикам GRASS об этой ошибке.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Полигон %d не существует"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Полигон %d не существует"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Построение графа..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - переменная не установлена"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Устанавливается стоимость для узлов..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Ошибка соединения."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Невозможно получить данные из таблицы <%s>"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Невозможно установить фокус"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Нет справки для команды [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "нет"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Невозможно открыть временный файл"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "тип данных OGR %d не поддерживается"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Невозможен запуск драйвера <%s>"
@@ -9529,10 +9845,48 @@ msgstr "Нет памяти"
 #~ msgid "Out of memmory"
 #~ msgstr "Нет памяти"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Невозможно открыть файл определений векторной базы данных '%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Невозможно открыть файл заголовка для векторного слоя <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "невозможно найти временный null-файл %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: невозможно открыть файл %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Извините, опция <%s> неверна\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "Ошибка: опция <%s>: <%s> существует.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Неправильное имя векторного слоя <%s>"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Невозможно открыть файл %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "нажмите RETURN для продолжения -->"
 
@@ -9540,6 +9894,21 @@ msgstr "Нет памяти"
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Векторный слой <%s> не открыт на уровне >= 2"
 
+#~ msgid "Background color"
+#~ msgstr "Цвет фона"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Имя исходной растровой карты"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "тип данных OGR %d не поддерживается"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "Неправильное имя векторного слоя <%s>"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Атрибуты для категории %d не найдены"
 
@@ -9564,22 +9933,3 @@ msgstr "Нет памяти"
 
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: неправильное число размерностей или полей"
-
-#~ msgid "Background color"
-#~ msgstr "Цвет фона"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "тип данных OGR %d не поддерживается"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "Неправильное имя векторного слоя <%s>"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Неправильное имя векторного слоя <%s>"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Имя исходной растровой карты"
diff --git a/locale/po/grasslibs_sl.po b/locale/po/grasslibs_sl.po
index 90d7afc..f1f9a55 100644
--- a/locale/po/grasslibs_sl.po
+++ b/locale/po/grasslibs_sl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_sl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2005-04-26 09:38+0200\n"
 "Last-Translator: Miha Staut <mihastaut at yahoo.co.uk>\n"
 "Language-Team: Sloven��ina <grass-translations at lists.osgeo.org>\n"
@@ -39,10 +39,12 @@ msgstr "Nezmo
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Ne morem zapisati povezav z bazo podatkov."
@@ -52,45 +54,45 @@ msgstr "Ne morem zapisati povezav z bazo podatkov."
 msgid "Unable to get list tables in database <%s>"
 msgstr "Nezmo�en odpreti datoteko s tabelo elipsoida: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Nezmo�en odpreti datoteko s tabelo elipsoida: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "Ne morem zapisati povezav z bazo podatkov."
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "Ne morem zapisati povezav z bazo podatkov."
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr ""
@@ -686,8 +688,8 @@ msgstr "Vect_write_line() za ta format/nivo ni podprt"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -697,8 +699,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -801,12 +803,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -854,17 +856,17 @@ msgstr "Dvojni atributni indeks je izven razpona"
 msgid "Category index out of range"
 msgstr "Dvojni atributni indeks je izven razpona"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Napaka pri pisanju datoteke sidx.\n"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, fuzzy, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
@@ -932,8 +934,8 @@ msgstr "
 msgid "Number of redundant holes: %d"
 msgstr "�tevilo meja             :  %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
@@ -1033,38 +1035,38 @@ msgstr "
 msgid "Number of isles: -"
 msgstr "�tevilo otokov     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "Napaka pri zapisu datotek topo. \n"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "Ne morem izbrisati linije, sloj '%s' ni odprt na nivoju 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "Napaka pri pisanju datoteke sidx.\n"
@@ -1131,9 +1133,11 @@ msgstr "Nepoznan \"location\""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1182,8 +1186,10 @@ msgstr "Ne morem zbrisati linije"
 msgid "Unable to fetch data from table"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Ne morem zapisati povezav z bazo podatkov."
@@ -1224,24 +1230,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Ne morem odpreti datoteke topo za pisanje: %s\n"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1262,7 +1268,7 @@ msgstr "Ne morem prebrati histograma za [%s v %s]"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1289,12 +1295,12 @@ msgstr "Ne morem prebrati histograma za [%s v %s]"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1302,7 +1308,7 @@ msgstr "Ne morem prebrati histograma za [%s v %s]"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
@@ -1394,7 +1400,7 @@ msgstr "Nezmo
 msgid "No connection defined"
 msgstr "Povezava ni uspela.\n"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "ne morem spremeniti direktorija v %s"
@@ -1410,7 +1416,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
@@ -1632,7 +1638,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "Vect_write_line() za ta format/nivo ni podprt"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr "Ne morem odpreti temp datoteke"
@@ -1647,17 +1653,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Ne morem odpreti temp datoteke"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Ne morem prebrati histograma za [%s v %s]"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
@@ -1741,26 +1747,43 @@ msgstr ""
 msgid "OGR feature type '%s' not supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Ne morem odpreti datoteke topo za pisanje: %s\n"
@@ -1865,7 +1888,8 @@ msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
@@ -1898,6 +1922,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Nezmo�en odpreti datoteko %s v %s"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Nezmo�en odpreti datoteko %s v %s"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Nezmo�en odpreti datoteko %s v %s"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 msgid "OGR datasource not defined"
 msgstr ""
@@ -1906,7 +1945,7 @@ msgstr ""
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, fuzzy, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "ne morem spremeniti direktorija v %s"
@@ -2189,7 +2228,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2202,131 +2241,131 @@ msgstr "Vneseni vektor '%s' ni bil najden"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 #, fuzzy
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "Sloj, ki ni v trenutnem mapset ne more biti odprt za posodabljanje."
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, fuzzy, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, fuzzy, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "Ne morem odpreti starega vektorja %s na nivoju %d"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Prosim ponovno izgradi topologijo vektorja '%s@%s'"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, fuzzy, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Ime sloja se ne sklada z SQL pravili."
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, fuzzy, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Vect_write_line() za ta format/nivo ni podprt"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, fuzzy, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 "Velikost datoteke 'coor' je razli�na od vrednosti shranjene v datoteki topo."
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, fuzzy, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Prosim ponovno izgradi topologijo vektorja '%s@%s'"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 "Velikost datoteke 'coor' je razli�na od vrednosti shranjene v datoteki topo."
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2583,29 +2622,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "�tevilo primitivnih enot :  %d\n"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Gradim topologijo ...\n"
@@ -2635,77 +2674,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "Ne morem prebrati histograma za [%s v %s]"
 
-#: ../lib/vector/Vlib/net.c:117
-#, fuzzy
-msgid "Building graph..."
-msgstr "Gradim topologijo ...\n"
-
-#: ../lib/vector/Vlib/net.c:162
-#, fuzzy
-msgid "Unable to build network graph"
-msgstr "Ne najdem vektorja %s"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:225
-#, fuzzy
-msgid "Registering arcs..."
-msgstr "Registriram linije: "
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-#, fuzzy
-msgid "Cannot add network arc"
-msgstr "Ne morem odpreti datoteke topo za pisanje: %s\n"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:444
-#, fuzzy
-msgid "Flattening the graph..."
-msgstr "Gradim topologijo ...\n"
-
-#: ../lib/vector/Vlib/net.c:453
-#, fuzzy
-msgid "Graph was built"
-msgstr "Topologija je zgrajena. \n"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2808,14 +2776,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Povezava ni uspela.\n"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Povezava ni uspela.\n"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2883,62 +2858,57 @@ msgstr "Privzeti gonilnik ni dolo
 msgid "Default database is not set"
 msgstr "Privzeta baza podatkov ni podana"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Zahtevan dblink %d, najve�ja vrednost �tevila povezave %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Napaka v pravilu na vrstici %d v %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 #, fuzzy
 msgid "Unable to open OGR DBMI driver"
 msgstr "Ne morem odpreti OGR DBMI gonilnika."
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "Nepoznan \"location\""
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 #, fuzzy
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "ne morem spremeniti direktorija v %s"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3088,98 +3058,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, fuzzy, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Nepoznan \"location\""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Neznana projekcija"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 #, fuzzy
 msgid "Vector map name is not SQL compliant"
 msgstr "Ime sloja se ne sklada z SQL pravili."
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, fuzzy, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, fuzzy, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, fuzzy, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, fuzzy, c-format
 msgid "Unable to open directory '%s'"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, fuzzy, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, fuzzy, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/vector/Vlib/map.c:487
+#: ../lib/vector/Vlib/map.c:528
 #, fuzzy, c-format
-msgid "Unable to remove directory '%s'"
+msgid "Unable to remove directory '%s': %s"
 msgstr "ne morem spremeniti direktorija v %s"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3270,6 +3240,151 @@ msgstr ""
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+#, fuzzy
+msgid "Building graph..."
+msgstr "Gradim topologijo ...\n"
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+#, fuzzy
+msgid "Unable to build network graph"
+msgstr "Ne najdem vektorja %s"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Ne morem zapisati povezav z bazo podatkov."
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Ne morem odpreti datoteke topo za pisanje: %s\n"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Ne morem odpreti datoteke topo za pisanje: %s\n"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+#, fuzzy
+msgid "Registering arcs..."
+msgstr "Registriram linije: "
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+#, fuzzy
+msgid "Flattening the graph..."
+msgstr "Gradim topologijo ...\n"
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+#, fuzzy
+msgid "Graph was built"
+msgstr "Topologija je zgrajena. \n"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+#, fuzzy
+msgid "Cannot add network arc"
+msgstr "Ne morem odpreti datoteke topo za pisanje: %s\n"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3384,7 +3499,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, fuzzy, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3528,88 +3643,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Ne morem odpreti temp datoteke"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Nezmo�en odpreti datoteko %s v %s"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Ime vhodnega vektorskega sloja"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "za obstoje�e rastrske sloje %d\n"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Ne morem zapisati linije, sloj ni odprt"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Dvojni atributni indeks je izven razpona"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Vneseni vektor '%s' ni bil najden"
@@ -3618,32 +3743,36 @@ msgstr "Vneseni vektor '%s' ni bil najden"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "ne morem spremeniti direktorija v %s"
@@ -3683,7 +3812,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3700,12 +3829,12 @@ msgid "Error computing map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3719,9 +3848,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3733,87 +3862,87 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Nepoznan \"location\""
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "Neveljavna timestamp datoteka za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 msgid "Internal error"
 msgstr ""
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "Neveljavna timestamp datoteka za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "Neveljavna timestamp datoteka za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
@@ -3843,132 +3972,132 @@ msgstr "ne morem spremeniti direktorija v %s"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Gradim topologijo ...\n"
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "ne morem zapisati \"history\" podatkov za [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Nezmo�en odpreti %s za pisanje"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Nepoznan \"location\""
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Nezmo�en ustvariti vzglavno datoteko za [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3993,20 +4122,20 @@ msgid ""
 "%s"
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4015,7 +4144,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4023,12 +4152,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Ne morem zapisati povezav z bazo podatkov."
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4036,49 +4165,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "ne morem izvesti ukaza"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "ne najdem [%s]"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "ne morem izvesti ukaza"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4086,182 +4203,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "ne morem izvesti ukaza"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "ne morem izvesti ukaza"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Nepoznan \"location\""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Nepoznan \"location\""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Ne morem zapisati \"quant\" pravil za sloj %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4269,19 +4386,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4342,58 +4459,65 @@ msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Ne morem odpreti temp datoteke"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, fuzzy, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  format: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4565,28 +4689,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
@@ -4616,189 +4740,230 @@ msgstr "Vneseni vektor '%s' ni bil najden"
 msgid "Unable to parse time string: %s"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Ne morem odpreti %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "Ne morem ustvariti timestamp datoteke za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Neveljavna timestamp datoteka za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "Neveljavna timestamp datoteka za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "Neveljavna timestamp datoteka za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "East mora biti ve�ji od West"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "East mora biti ve�ji od West"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "Ne morem ustvariti timestamp datoteke za %s sloj %s v \"mapset\" %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "East mora biti ve�ji od West"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "ne morem odpreti rastrskega sloja [%s v %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4810,32 +4975,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "ni poznan"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "ne najdem %s"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "zahtevan: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4843,16 +5008,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "ne morem spremeniti direktorija v %s"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "ne morem spremeniti direktorija v %s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "ne morem spremeniti direktorija v %s"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "ne morem spremeniti direktorija v %s"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4860,103 +5060,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Ne morem odpreti %s"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Vektor '%s' �e obstaja in bo prepisan."
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Neveljavno ime datoteke. Ne more biti '.' ali 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Neveljavno ime. Znak <%c> je prepovedan."
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr "Ne morem izbrisati linije, sloj '%s' ni odprt v zapisovalnem na�inu"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Ime vhodnega vektorskega sloja"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "color"
 msgstr ""
 
@@ -5053,7 +5253,7 @@ msgstr "Nezmo
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, fuzzy, c-format
 msgid "Raster map <%s> not found"
 msgstr "Vneseni vektor '%s' ni bil najden"
@@ -5551,12 +5751,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "v trenutnem \"mapset\" ni datotek z imenom %s\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "v trenutnem \"mapset\" ni datotek z imenom %s\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5775,7 +5975,7 @@ msgstr "timestamp dolo
 msgid "WARNING: "
 msgstr "OPOZORILO: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "NAPAKA: "
@@ -5910,7 +6110,7 @@ msgstr "obstajata dve polji za format"
 msgid "Duplicate compressed field"
 msgstr "obstajata polji o podatku o stiskanju"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
@@ -6037,22 +6237,22 @@ msgstr "GISRC - spremenljivka ni nastavljena"
 msgid "Variable '%s' not set"
 msgstr "GISRC - spremenljivka ni nastavljena"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Ne morem odpreti %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: ne morem odpreti datoteke %s"
@@ -6107,12 +6307,12 @@ msgstr "neveljaven es: polje %s v datoteki %s v %s"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "V datoteki %s v %s ni podatka o elipsoidu"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "ne morem izdelati elementa \"mapset\"-a %s (%s)"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "ne morem izdelati elementa \"mapset\"-a %s (%s)"
@@ -6130,19 +6330,19 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 #, fuzzy
 msgid "Flags"
 msgstr ""
 "\n"
 "Izbire:\n"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 #, fuzzy
 msgid "Parameters"
 msgstr ""
@@ -6159,6 +6359,10 @@ msgstr "mo
 msgid "Default"
 msgstr " privzet: %s\n"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6248,19 +6452,23 @@ msgstr ""
 "\n"
 "Izbire:\n"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr ""
 "\n"
 "Parametri:\n"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   privzet: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   mo�nosti: "
@@ -6554,199 +6762,199 @@ msgstr ""
 msgid "Category value"
 msgstr "Vrednost kategorije"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 #, fuzzy
 msgid "Category values"
 msgstr "Vrednost kategorij"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 #, fuzzy
 msgid "Example: 1,3,7-9,13"
 msgstr "Vrednost kategorij (primer: 1,3,7-9,13)"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Ime odprte datoteke %s\n"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Ime odprte datoteke %s\n"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Neveljavne koordinate"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Ime vhodnega vektorskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "Ne morem odpreti %s"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Ime vhodnega vektorskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Ime vhodnega vektorskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Ime izhodnega vektorskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Ne morem odpreti %s"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
@@ -6755,24 +6963,33 @@ msgstr ""
 "WHERE pogoji SQL stavka brez klju�ne besede 'where': (primer: dohodek < 1000 "
 "and preb >= 10000)"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Ne morem zbrisati linije"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "Gradim topologijo ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6893,79 +7110,83 @@ msgstr ""
 "\n"
 "Opis:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Oprostite <%s> ni veljavna mo�nost\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "NAPAKA: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 #, fuzzy
 msgid "Unable to determine program name"
 msgstr "ne morem dolo�iti uporabnikovega doma�ega direktorija"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Oprostite <%c> ni veljavna izbira\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Oprostite <%s=> je dvoumno\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Oprostite <%s> ni veljaven parameter\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> v \"mapset\" <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6974,7 +7195,7 @@ msgstr ""
 "\n"
 "Napaka: neveljaven razpon sintakse za parameter <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6983,14 +7204,14 @@ msgstr ""
 "\n"
 "Napaka: vrednost <%s> izven razpona za parameter <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "Napaka: Manjkajo�a vrednost za parameter <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -6999,7 +7220,7 @@ msgstr ""
 "\n"
 "Napaka: vrednost <%s> izven razpona za parameter <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7009,7 +7230,7 @@ msgstr ""
 "NAPAKA: Zahtevani parameter <%s> ni nastavljen:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7018,37 +7239,37 @@ msgstr ""
 "\n"
 "Napaka: mo�nost <%s> mora biti podana v ve�kratnikih %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Oprostite <%s> ni veljavna mo�nost\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, c-format
 msgid "No separator given for %s="
 msgstr ""
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Oprostite <%s> ni veljavna mo�nost\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
@@ -7981,11 +8202,16 @@ msgstr "neveljaven elipsoid %s v datoteki"
 msgid "No ellipsoid info given in file"
 msgstr "V datoteki ni informacije o elipsoidu"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Napaka pri branju za�etka stisnjene datoteke [%s v %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Napaka pri branju za�etka stisnjene datoteke [%s v %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
@@ -7993,6 +8219,21 @@ msgstr ""
 "\aNAPAKA: Sistem ni inicializiran. Programer je pozabil poklicati "
 "G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8023,51 +8264,46 @@ msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Napaka pri pisanju datoteke sidx.\n"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
+msgid "No null file for <%s>"
+msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: ne morem odpreti datoteke %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "napaka pri pisanju \"null\" vrstice %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "Vneseni vektor '%s' ni bil najden"
@@ -8158,22 +8394,22 @@ msgstr "Nezmo
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Nezmo�en ustvariti datoteko z vzglavjem za [%s v %s]"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 #, fuzzy
 msgid "unable to write f_format file for CELL maps"
 msgstr "Nezmo�en ustvariti vzglavno datoteko za [%s]"
@@ -8263,12 +8499,12 @@ msgstr "za obstoje
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "[%s] v \"mapset\" [%s]-format polja v datoteki vzglavja je neveljaven."
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
+msgid "Compression with %s is not supported"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8277,92 +8513,92 @@ msgstr ""
 "[%s] v \"mapset\" [%s] - je v druga�ni projekciji kot trenutna regija:\n"
 "najden sloj [%s] v: <%s>, moral bi biti <%s> "
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "[%s] v \"mapset\" [%s] - v drugi coni [%d] kot trenutna regija [%d]"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "[%s] v [%s] - bajtov na celico (%d) preve�"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "ne morem spremeniti direktorija v %s"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr "opencell: %s - neveljavno ime datoteke"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "LOCATION  << %s >>  ne obstaja"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Hro��: poskus posodobitve sloja, ki ni v trenutnem mapset."
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "ne najdem [%s]"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, fuzzy, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "neveljavni tip: polje %s v datoteki %s"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "neveljavni tip: polje %s v datoteki %s"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, fuzzy, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8402,24 +8638,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, fuzzy, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "[%s v %s] - zahteva po branju za vrstico %d je izven regije"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Napaka pri pisanju datoteke sidx.\n"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "napaka pri branju %s sloja [%s] v \"mapset\" [%s], vrstica %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "napaka pri branju null vrstice %d"
@@ -8669,33 +8921,28 @@ msgstr "ni poznan"
 msgid "Unsupported icon %d"
 msgstr "Nepoznan \"location\""
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Nezmo�en odpreti datoteko %s v %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8774,17 +9021,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "OPOZORILO: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Pripajanje centroidov: "
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8792,115 +9039,159 @@ msgstr ""
 "Uporaba:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "za izbrati privzeto"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "neveljavna projekcija\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Nezmo�en dodeliti spomin\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Zahtevani format ni bil preveden v tej verziji"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8910,283 +9201,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Oprostite <%s> ni veljavna mo�nost\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Prosim sporo�ite razvijalcem GRASS-a o tej napaki.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Gradim topologijo ...\n"
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - spremenljivka ni nastavljena"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Pripajanje centroidov: "
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Povezava ni uspela.\n"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Nezmo�en odpreti datoteko %s v %s"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Ne morem odpreti %s"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Za ukaz [%s] ni na voljo pomo�i\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "ga ni"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Ne morem odpreti temp datoteke"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Vneseni vektor '%s' ni bil najden"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Nezmo�en odpreti datoteko %s v %s"
@@ -9459,10 +9766,48 @@ msgstr "ne morem dodeliti spomina"
 #~ msgstr "ne morem dodeliti spomina"
 
 #, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Ne morem odpreti datoteke z zgodovino za vektor '%s'"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "Nezmo�en odpreti datoteko s tabelo fundamentalne to�ke: %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: ne morem odpreti datoteke %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Oprostite <%s> ni veljavna mo�nost\n"
+
+#, fuzzy
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "Napaka: mo�nost <%s>: <%s> obstaja.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "ne morem spremeniti direktorija v %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Nezmo�en odpreti datoteko %s v %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "pritisnite RETURN za nadaljevanje -->"
 
@@ -9471,8 +9816,8 @@ msgstr "ne morem dodeliti spomina"
 #~ msgstr "Vneseni vektor '%s' ni bil najden"
 
 #, fuzzy
-#~ msgid "Cannot fetch row"
-#~ msgstr "Ne morem zbrisati linije"
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Ime vhodnega rastrskega sloja"
 
 #, fuzzy
 #~ msgid "Mode type: {0} not supported."
@@ -9483,9 +9828,5 @@ msgstr "ne morem dodeliti spomina"
 #~ msgstr "ne morem spremeniti direktorija v %s"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "ne morem spremeniti direktorija v %s"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Ime vhodnega rastrskega sloja"
+#~ msgid "Cannot fetch row"
+#~ msgstr "Ne morem zbrisati linije"
diff --git a/locale/po/grasslibs_th.po b/locale/po/grasslibs_th.po
index 61fcd9c..91fce8c 100644
--- a/locale/po/grasslibs_th.po
+++ b/locale/po/grasslibs_th.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_th\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2008-01-05 15:19+0700\n"
 "Last-Translator: man <mansv68 at yahoo.co.th>\n"
 "Language-Team: Thai <grass-translations at lists.osgeo.org>\n"
@@ -40,10 +40,12 @@ msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "ไม่สามารถเปิดตาราง <%s> ด้วยตัวขับ <%s>"
@@ -53,45 +55,45 @@ msgstr "ไม่สามารถเปิดตาราง <%s> ด้วย
 msgid "Unable to get list tables in database <%s>"
 msgstr "ไม่สามารถเปิดไฟล์ตารางรูปทรงรี: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "ไม่สามารถเปิดไฟล์ตารางรูปทรงรี: %s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "ไม่สามารถเปิด directory '%s' ได้"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "ไม่สามารถ บรรยายตารางนี้ได้ <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "ไม่สามารถ บรรยายตารางนี้ได้ <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "ไม่สามารถลบตารางได้ <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, fuzzy, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "ไม่สามารถอ่าน ชนิดของ column ได้"
@@ -704,8 +706,8 @@ msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -715,8 +717,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -819,12 +821,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "GngFlatten ผิดพลาด"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -871,17 +873,17 @@ msgstr "ดัชนี ชั้นข้อมูล ไม่อยู่ใ
 msgid "Category index out of range"
 msgstr "ดัชนี ชั้นข้อมูล ไม่อยู่ในช่วง"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "การเขียนผิดพลาด ไม่มีหมวดดัชนีในไฟล์ <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s>"
@@ -949,8 +951,8 @@ msgstr "จำนวนขอบเขตที่ไม่ถูกต้อง
 msgid "Number of redundant holes: %d"
 msgstr "จำนวนขอบเขต:   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s>"
@@ -1050,38 +1052,38 @@ msgstr "จำนวน  รูปปิด     :   -\n"
 msgid "Number of isles: -"
 msgstr "จำนวน  isles     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "เกิดข้อผิดพลาดขณะเขียน topo ไฟล์ "
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "ไม่สามารถลบ,แผนที่ '%s ไม่ไดถูกเปิด ในระดับ 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "เกิดข้อผิดพลาดขณะเขียน spatial index ไฟล์ "
@@ -1148,9 +1150,11 @@ msgstr "ไม่ทราบชนิดของข้อมูลเชิง
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1199,8 +1203,10 @@ msgstr "ไม่สามารถลบ"
 msgid "Unable to fetch data from table"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "ไม่สามารถ บรรยายตารางนี้ได้ <%s>"
@@ -1241,24 +1247,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "ไม่สามารถเพิ่ม network arc"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1279,7 +1285,7 @@ msgstr "ตั้งใจที่จะลบ  isle จากพื้นท
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1306,12 +1312,12 @@ msgstr " ตั้งใจที่จะอ่านจบบรรทัด [
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1319,7 +1325,7 @@ msgstr " ตั้งใจที่จะอ่านจบบรรทัด [
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s>"
@@ -1413,7 +1419,7 @@ msgstr "ไม่สามารถลบไฟล์  '%s'"
 msgid "No connection defined"
 msgstr "การเชื่อมต่อล้มเหลว"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
@@ -1429,7 +1435,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "ไม่สามารถลบไฟล์  '%s'"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
@@ -1652,7 +1658,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "ไม่รองรับ ชนิด Column นี้"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr " ตั้งใจที่จะอ่านจบบรรทัด [%d]"
@@ -1667,17 +1673,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "ไม่สามารถอ่าน ส่วนหัวของไฟล์ได้"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "ตั้งใจที่จะลบ  isle จากพื้นที่"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "ไม่สามารถลบไฟล์  '%s'"
@@ -1763,26 +1769,43 @@ msgstr "ข้อมูล OGR ที่ไม่มี  ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "ทิศทางผิดใน  Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "ไม่สามารถเปิด topo ไฟล์ เพื่อเขียน <%s> ได้"
@@ -1887,7 +1910,8 @@ msgstr "ไม่สามารถคัดลอกแผนที่เชิ
 msgid "Unable to add database link for vector map <%s>"
 msgstr "ไม่สามารถเพิ่ม การเชื่อมต่อฐานข้อมูล สำหรับข้อมูลเชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
@@ -1920,6 +1944,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "ไม่สามารถลบตารางได้ <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1929,7 +1968,7 @@ msgstr "ข้อมูล %d ไม่มี ID ตัดออก"
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, fuzzy, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "ไม่สามารถเปิด directory '%s' ได้"
@@ -2211,7 +2250,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2224,127 +2263,127 @@ msgstr "ไม่พบ ชื่อแผนที่เชิงเส้น <
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "แผนที่เชิงเส้นที่ไม่ได้อยู่ใน ชุอแผนที่ ที่กำลังทำงาน ไม่สามารถแก้ไขได้"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "ไม่สามารถเปิดแผนที่เชิงเส้นได้ <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "ไม่สามารถเปิด topology ไฟล์ของ แผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "ไม่สามารถเปิดแผนที่เชิงเส้นได้ <%s> บน topology ระดับ %d"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "โปรดสร้าง  topology ของ แผนที่เชิงเส้นใหม่ <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "ไม่สามารถเปิดแผนที่เชิงเส้นได้ <%s>"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "ชื่อแผนที่เชิงเส้น ไม่ใช่ คำสั่ง SQL "
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "ไม่สามารถลบแผนที่เชิงเส้น  <%s> ได้"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "ไม่รองรับ ชนิด Column นี้"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "ขนาดของ ไฟล์ 'coor' แตกต่างจากค่าที่บันทึกไว้ในไฟล์  topology"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "โปรดสร้าง  topology ของ แผนที่เชิงเส้นใหม่ <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "ขนาดของ ไฟล์ 'coor' แตกต่างจากค่าที่บันทึกไว้ในไฟล์  topology"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2599,29 +2638,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, fuzzy, c-format
 msgid "Snapped vertices: %d"
 msgstr "ดูดเข้าหา จุดหัก"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "เพิ่ม จุดหัก"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "สร้าง graph ..."
@@ -2651,78 +2690,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "ตั้งใจที่จะลบพื้นที่"
 
-#: ../lib/vector/Vlib/net.c:117
-#, fuzzy
-msgid "Building graph..."
-msgstr "สร้าง graph ..."
-
-#: ../lib/vector/Vlib/net.c:162
-#, fuzzy
-msgid "Unable to build network graph"
-msgstr "ไม่สามารถสร้าง network graph"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Costs column ไม่ได้ระบุ"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Arc field < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, fuzzy, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "ชนิดของ z column ไม่รองรับ (ต้องเป็น  integer หรือ  double)"
-
-#: ../lib/vector/Vlib/net.c:225
-#, fuzzy
-msgid "Registering arcs..."
-msgstr "การบันทึก arcs ..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"ข้อมูลบรรทัดที่ %d (cat = %d, forward/both direction(s)) ไม่พบ (forward/both "
-"direction(s)  ข้ามไป)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr "ข้อมูลบรรทัดที่ %d (cat = %d, backword direction) ไม่พบ ( ข้ามไป)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "ไม่สามารถเพิ่ม network arc"
-
-#: ../lib/vector/Vlib/net.c:352
-#, fuzzy
-msgid "Setting node costs..."
-msgstr "กำหนด node costs ..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr "ข้อมูล node %d (cat = %d) ไม่พบ (กำหนด cost เป็น 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-#, fuzzy
-msgid "Flattening the graph..."
-msgstr "Flattening the graph ..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Graph ถูกสร้าง"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "ทิศทางผิดใน  Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2825,14 +2792,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "การเชื่อมต่อล้มเหลว"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "การเชื่อมต่อล้มเหลว"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2899,62 +2873,57 @@ msgstr "ไม่ได้กำหนด ตัวขับตั้งต้
 msgid "Default database is not set"
 msgstr "ไม่ได้กำหนด ฐานข้อมูล ตั้งต้น"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "ต้องการ dblink %d, จำนวนการเชื่อมมากสุด %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "ผิดพลาดใน กฏ บน แถว %d ใน %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 #, fuzzy
 msgid "Unable to open OGR DBMI driver"
 msgstr "ไม่สามารถเปิดตัวขับ OGR DBMI "
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "ไม่ทราบข้อผิดพลาด"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 #, fuzzy
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3104,97 +3073,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "ไม่สามารถลบไฟล์  '%s'"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, fuzzy, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "ไม่ทราบชนิดของข้อมูลเชิงเส้น"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "ไม่รู้จกแบบการฉายนี้"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "ชื่อแผนที่เชิงเส้น ไม่ใช่ คำสั่ง SQL "
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "ไม่สามารถลบตารางได้ <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "ไม่สามารถสร้างดัชนีสำหรับตาราง <%s> ด้วย key <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "ไม่สามารถค้นหาตาราง <%s> ที่เชื่อมกับข้อมูลเชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "ไม่สามารถค้นหาตาราง <%s> ที่เชื่อมกับข้อมูลเชิงเส้น <%s>"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "ไม่สามารถเปิด directory '%s' ได้"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "ไม่สามารถลบไฟล์  '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "ไม่สามารถเปลี่ยนชื่อ  directory  '%s' เป็น '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "ไม่สามารถลบ directory '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3286,6 +3255,155 @@ msgstr "ผลลัพธ์ข้อมูลเชิงเส้น ยั
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+#, fuzzy
+msgid "Building graph..."
+msgstr "สร้าง graph ..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+#, fuzzy
+msgid "Unable to build network graph"
+msgstr "ไม่สามารถสร้าง network graph"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Costs column ไม่ได้ระบุ"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Arc field < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "ไม่สามารถ บรรยายตารางนี้ได้ <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, fuzzy, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "ชนิดของ z column ไม่รองรับ (ต้องเป็น  integer หรือ  double)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+#, fuzzy
+msgid "Setting node costs..."
+msgstr "กำหนด node costs ..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr "ข้อมูล node %d (cat = %d) ไม่พบ (กำหนด cost เป็น 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "ไม่สามารถเพิ่ม network arc"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "ข้อมูล node %d (cat = %d) ไม่พบ (กำหนด cost เป็น 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "ไม่สามารถเพิ่ม network arc"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Arc field < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+#, fuzzy
+msgid "Registering arcs..."
+msgstr "การบันทึก arcs ..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"ข้อมูลบรรทัดที่ %d (cat = %d, forward/both direction(s)) ไม่พบ (forward/both "
+"direction(s)  ข้ามไป)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr "ข้อมูลบรรทัดที่ %d (cat = %d, backword direction) ไม่พบ ( ข้ามไป)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+#, fuzzy
+msgid "Flattening the graph..."
+msgstr "Flattening the graph ..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Graph ถูกสร้าง"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"ข้อมูลบรรทัดที่ %d (cat = %d, forward/both direction(s)) ไม่พบ (forward/both "
+"direction(s)  ข้ามไป)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr "ข้อมูลบรรทัดที่ %d (cat = %d, backword direction) ไม่พบ ( ข้ามไป)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "ไม่สามารถเพิ่ม network arc"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3400,7 +3518,7 @@ msgid "3D raster map <%s> not found"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, fuzzy, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3544,88 +3662,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "ไม่สามารถอ่าน ส่วนหัวของไฟล์ได้"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "ไม่สามารถลบไฟล์  '%s'"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "ชื่อช่องข้อมูล"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "มีปัญหาในการอ่าน cell ไฟล์"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "ข้อมูล %d ไม่มี ID ตัดออก"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "ดัชนี ชั้นข้อมูล ไม่อยู่ในช่วง"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "ไม่สามารถค้นหาตาราง <%s> ที่เชื่อมกับข้อมูลเชิงเส้น <%s>"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "ไม่รองรับ ชนิด Column นี้"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
@@ -3634,32 +3762,36 @@ msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "ไม่สามารถสร้างแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "ไม่สามารถสร้างแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "ไม่สามารถลบแผนที่เชิงเส้น  <%s> ได้"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "ไม่สามารถสร้างแผนที่เชิงภาพ <%s> "
@@ -3699,7 +3831,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3716,12 +3848,12 @@ msgid "Error computing map <%s>"
 msgstr "เกิดข้อผิดพลาดระหว่างเปิด แผนที่ g3d <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3735,9 +3867,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3749,88 +3881,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "ไม่ทราบชนิดของข้อมูลเชิงเส้น"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  รูปแบบ: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "คำสั่งผิดพลาด"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
@@ -3860,132 +3992,132 @@ msgstr "ไม่สามารถสร้างแผนที่เชิง
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "ไม่สามารถเปิดแผนที่เชิงเส้นได้ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "ไม่พบ ชื่อแผนที่เชิงเส้น <%s>"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "สร้าง graph ..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "ไม่สามารถลบ directory '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "ไม่สามารถเขียนข้อมูลประวัติ สำหรับ [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "ไม่สามารถเปิดไฟล์ datum table ได้ : %s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "ไม่สามารถค้นหาไฟล์ชั่คราวได้ %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "ไม่สามารถค้นหาไฟล์ชั่คราวได้ %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "ไม่สามารถเปิด cidx ไฟล์ <%s> สำหรับเขียนได้"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "ลักษณะข้อมูล"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์ [%s] ได้"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4010,20 +4142,20 @@ msgid ""
 "%s"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "ไม่สามารถเปิดไฟล์ datum table ได้ : %s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4032,7 +4164,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "ไม่สามารถเปิดไฟล์ datum table ได้ : %s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4040,12 +4172,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "ไม่สามารถเปิดไฟล์ datum table ได้ : %s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "ไม่สามารถเปิดฐานข้อมูลได้ %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4053,49 +4185,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "ไม่สามารถลบ directory '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "ไม่สามารถเปิดไฟล์ datum table ได้ : %s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "ไม่สามารถลบตารางได้ <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "ไม่สามารถทำงานคำสั่งนี้ได้"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "ไม่สามารถค้นหา  [%s]"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "ไม่สามารถทำงานคำสั่งนี้ได้"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4103,182 +4223,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "ไม่สามารถทำงานคำสั่งนี้ได้"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "ไม่สามารถทำงานคำสั่งนี้ได้"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "ไม่ทราบชนิดของข้อมูลเชิงเส้น"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  รูปแบบ: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "ลักษณะข้อมูล"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "ไม่สามารถเขียนกฎของปริมาณสำหรับ แผนที่ %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  รูปแบบ: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4286,19 +4406,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4359,58 +4479,65 @@ msgstr "ไม่สามารถคัดลอกแผนที่เชิ
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "ไม่สามารถอ่าน ส่วนหัวของไฟล์ได้"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "ไม่สามารถสร้างแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, fuzzy, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "ไม่สามารถเปิดแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "ชื่อข้อมูลฐานเชิงภาพ"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  รูปแบบ: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "ชื่อข้อมูลฐานเชิงภาพ"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4582,28 +4709,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "ไม่สามารถสร้างแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
@@ -4633,189 +4760,230 @@ msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 msgid "Unable to parse time string: %s"
 msgstr "ไม่สามารถเปิดไฟล์ได้ %s ใน %s"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "ชื่อข้อมูลเชิงภาพ"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "ไม่สามารถปิดการนำเข้าแผนที่"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "ไม่สามารถสร้างการลงเวลาในไฟล์ สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "ค่าออก ต้องมากกว่าตก"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "ค่าออก ต้องมากกว่าตก"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "ไม่สามารถสร้างการลงเวลาในไฟล์ สำหรับ %s แผนที่ %s ในชุดแผนที่ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "ค่าออก ต้องมากกว่าตก"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "ไม่สามารถคัดลอกแผนที่เชิงเส้น  <%s> ไปเป็น <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4827,32 +4995,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "ไม่ทราบ"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s ไม่พบ"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "ต้องการ: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4860,16 +5028,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4877,103 +5080,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "ไม่สามารถปิดการนำเข้าแผนที่"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "ชือไฟล์ไม่ถูกต้อง  ไม่สามารถใช้ '.' หรือ 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "ชือไฟล์ไม่ถูกต้อง ตัวอักษร <%c> ใช้ไม่ได้\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "การเชื่อมต่อฐานข้อมูลไม่ได้ถูกกำหนด สำหรับชั้นข้อมูลนี้ %d"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "เกิดข้อผิดพลาดระหว่างเปิด แผนที่ g3d <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr "ไม่สามารถลบ,แผนที่ '%s ไม่ไดถูกเปิด เพื่อเขียน"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "ชื่อแผนที่เชิงเส้น"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "สี"
@@ -5071,7 +5274,7 @@ msgstr "ไม่สามารถเปิด %s เพื่อเขีย
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
@@ -5588,12 +5791,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "ไม่มีไฟล์ %s อยู่ในชุดแผนที่ปัจจุบัน\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "ไม่มีไฟล์ %s อยู่ในชุดแผนที่ปัจจุบัน\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5808,7 +6011,7 @@ msgstr "ไฟล์ลงเวลาไม่ถูกต้อง สำห
 msgid "WARNING: "
 msgstr "คำเตือน: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "ข้อผิดพลาด: "
@@ -5944,7 +6147,7 @@ msgstr "Field รูปแบบ ซ้ำ"
 msgid "Duplicate compressed field"
 msgstr "Field การบีบอัด ซ้ำ"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "ไม่สามารถค้นหาตาราง <%s> ที่เชื่อมกับข้อมูลเชิงเส้น <%s>"
@@ -6070,22 +6273,22 @@ msgstr "GISRC - ไม่ได้กำหนดค่าตัวแปล"
 msgid "Variable '%s' not set"
 msgstr "GISRC - ไม่ได้กำหนดค่าตัวแปล"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "ไม่สามารถเปิดได้ %s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: ไม่สามารถเปิดไฟล์ %s ได้"
@@ -6140,12 +6343,12 @@ msgstr "ไม่ถูกต้อง: field %s ในไฟล์ %s ใน %s
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "ไม่มีข้อมูลรูปทรงรีในไฟล์ %s in %s"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "ไม่สามารถสร้างส่วนประกอบของแผนที่ได้ %s (%s)"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "ไม่สามารถสร้างส่วนประกอบของแผนที่ได้ %s (%s)"
@@ -6163,16 +6366,16 @@ msgid "SYNOPSIS"
 msgstr "สาระสำคัญ"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "ธง"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "ตัวแปร"
 
@@ -6184,6 +6387,10 @@ msgstr "เงื่อนไข"
 msgid "Default"
 msgstr "ค่าตั้งต้น"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6275,17 +6482,22 @@ msgstr "ข้อมูล %d ไม่มี ID ตัดออก"
 msgid "Flags:"
 msgstr "ธง"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "แสดงผลแบบเงียบ"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "ตัวแปร"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s  ค่าต้งต้น: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   เงื่อนไข: "
@@ -6572,224 +6784,233 @@ msgstr ""
 msgid "Category value"
 msgstr "ค่ารายละเอียด"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "ค่ารายละเอียด"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "ตัวอย่าง: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 #, fuzzy
 msgid "Feature id"
 msgstr "ลักษณะข้อมูล"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 #, fuzzy
 msgid "Feature ids"
 msgstr "ลักษณะข้อมูล"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "ชื่อไฟล์ที่จะนำเข้า"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "ชื่อไฟล์ผลลัพธ์"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "ตัวแยก Field"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "สี"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "ใส่ชื่อสีมาตรฐาน หรือ R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "ใส่ชื่อสีมาตรฐานของ GRASS หรือ R:G:B หรือ \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "ชื่อไฟล์ที่จะนำเข้า"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "ค่าพิกัดไม่ถูกต้อง"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "ชื่อแผนที่เชิงเส้น"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "ไม่สามารถเปิดได้ %s"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "ชื่อข้อมูลเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "ชื่อผลลัพธ์เชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "ชื่อข้อมูลความสูงเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "ชื่อข้อมูลความสูงเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "ชื่อผลลัพธ์เชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "ชื่อแผนที่เชิงเส้น"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "ชื่อแผนที่เชิงเส้น"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "กลุ่มข้อมูลแผนที่เชิงเส้น ไม่มีที่ว่างพอ"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "ชื่อข้อมูลความสูงเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "ชื่อข้อมูลความสูงเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "ชื่อผลลัพธ์เชิงภาพ 3 มิติ"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "ชื่อข้อมูลเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "ชื่อข้อมูลเชิงภาพ"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "ไม่สามารถปิดการนำเข้าแผนที่"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "WHERE เงื่อนไขประโยค SQL ที่ปราศจาก 'where' keyword"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "กำลังอ่านข้อมูลจากตารางข้อมูล"
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "กำลังสร้าง topology ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6908,79 +7129,83 @@ msgstr ""
 "\n"
 "คำอธิบาย:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "เสียใจ <%s> ไม่มีอยู่ในเงื่อนไข\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "ข้อผิดพลาด: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 #, fuzzy
 msgid "Unable to determine program name"
 msgstr "ไม่สามารถหา  home directory ของผู้ใช้"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "เสียใจ, <%c> ไม่มีธง\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "เสียใจ, <%s=> ไม่ชัดเจน\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "เสียใจ, <%s> ค่าตัวแปรไม่ถูกต้อง\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> ในชุดแผนที่ <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6989,7 +7214,7 @@ msgstr ""
 "\n"
 "ข้อผิดพลาด: ใส่ค่าตัวแปรผิด <%s>\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6998,14 +7223,14 @@ msgstr ""
 "\n"
 "ข้อผิดพลาด: ค่า <%s> อยู่นอกช่วงค่าตัวแปร <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "ข้อผิดพลาด:ขาดค่าตัวแปร <%s>\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7014,7 +7239,7 @@ msgstr ""
 "\n"
 "ข้อผิดพลาด: ค่า <%s> อยู่นอกช่วงค่าตัวแปร <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7024,7 +7249,7 @@ msgstr ""
 "ข้อผิดพลาด: ต้องการค่าตัวแปร <%s> ไม่ได้กำหนด:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7033,37 +7258,37 @@ msgstr ""
 "\n"
 "ข้อผิดพลาด: เงื่อนไข <%s> จะต้องมีหลายค่าของ %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "เสียใจ <%s> ไม่มีอยู่ในเงื่อนไข\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "ตัวแยก Field"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "เสียใจ <%s> ไม่มีอยู่ในเงื่อนไข\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "ไม่สามารถลบตารางได้ <%s>"
@@ -8043,16 +8268,36 @@ msgstr "รูปวงรี  %s ไม่มีในไฟล์"
 msgid "No ellipsoid info given in file"
 msgstr "ไม่มีข้อมูลรูปวงรี ในไฟล์"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "การอ่านไฟล์ที่ถูกบีบอัด ล้มเหลว [%s ใน %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "การอ่านไฟล์ที่ถูกบีบอัด ล้มเหลว [%s ใน %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "\aข้อผิดพลาด: ระบบไม่สามารถเริ่มต้น. Programmer ลืมเรียก G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8083,51 +8328,46 @@ msgstr "ผิดพลาดในการอ่านการบีบอั
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "การเขียนผิดพลาด ไม่มีหมวดดัชนีในไฟล์ <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "ไม่สามารถค้นหาไฟล์ชั่คราวได้ %s"
+msgid "No null file for <%s>"
+msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: ไม่สามารถเปิดไฟล์ %s ได้"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "การเขียนผิดพลาด ที่แถวเปล่า %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: แผนที่ [%s] ไม่ได้ถูกเปิดเพื่อเขียน - การร้องขอถูกยกเลิก"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: ไม่สามารถเปิดตัวอธิบายไฟล์ได้ - การร้องขอถูกยกเลิก"
@@ -8218,22 +8458,22 @@ msgstr "ไม่สามารถสร้างส่วนหัวของ
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "ไม่สามารถสร้างส่วนหัวของไฟล์สำหรับ [%s in %s]"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "ไม่สามารถลบไฟล์  '%s'"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "ไม่สามารถเขียน  f_format ไฟล์สำหรับ CELL maps ได้"
 
@@ -8320,12 +8560,12 @@ msgstr "เกิดข้อผิดพลาดระหว่างเปิ
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "[%s] ในชุดแผนที่ [%s]-รูปแบบของ field ในส่วนหัวไม่ถูกต้อง"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
+msgid "Compression with %s is not supported"
+msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8334,92 +8574,92 @@ msgstr ""
 "[%s] ในชุดแผนที่ [%s] - ในการฉายภาพที่แตกต่างจากขอบเขตปัจจุบัน:\n"
 " พบแผนที่ [%s] ใน: <%s>, ควรจะ <%s> "
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "[%s] ชุดแผนที่ [%s] - ในโซนที่แตกต่าง [%d] จากขอบเขตปัจจุบัน [%d]"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "[%s] ใน [%s] - bytes ต่อ cell (%d) ใหญ่เกินไป"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "ไม่สามารถเปิด ไฟล์หมวดดัชนี สำหรับแผนที่เชิงเส้น <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "ผิดพลาดในการอ่านแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr "เปิดcell: %s - ชื่อไฟล์ไม่ถูกต้อง"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "ไม่มีไฟล์ %s อยู่ในชุดแผนที่ <%s>\n"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "ข้อผิดพลาด: ตั้งใจที่จะปรับปรุงแผนที่ ที่ไม่อยู่ในชุดแผนที่ที่กำลังใช้งาน"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "ไม่สามารถค้นหา  [%s]"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, fuzzy, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "ชนิดไม่ถูกต้อง: field %sในไฟล์ %s "
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "ชนิดไม่ถูกต้อง: field %sในไฟล์ %s "
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, fuzzy, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "ไม่พบแผนที่เชิงภาพ <%s> "
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8459,24 +8699,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, fuzzy, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "[%s ใน %s] -อ่านคำสั่งสำหรับ แถว %d อยู่นอกขอบเขต"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "การเขียนผิดพลาด ไม่มีหมวดดัชนีในไฟล์ <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "ผิดพลาดในการอ่านการบีบอัดแผนที่ [%s] ในชุดแผนที่ [%s], แถว %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "เกิดข้อผืดพลาดในการอ่านแถวเปล่า  %d"
@@ -8716,33 +8972,28 @@ msgstr "ไม่ทราบ"
 msgid "Unsupported icon %d"
 msgstr "ลักษณะข้อมูล"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8821,17 +9072,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "คำเตือน: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "กำหนด node costs ..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8839,115 +9090,159 @@ msgstr ""
 "วิธีใช้:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "ใช้ค่าตั้งต้น"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
+msgstr ""
+
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "การฉายภาพไม่ถูกต้อง\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "ไม่สามารถจองหน่วยความจำได้\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "รูปแบบที่ต้องการยังใช้ไม่ได้ใน รุ่นนี้"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8957,283 +9252,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "เสียใจ <%s> ไม่มีอยู่ในเงื่อนไข\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "โปรดแจ้งขอ้ผิดพลาดให้กับ ทีพัฒนา GRASS\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "สร้าง graph ..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - ไม่ได้กำหนดค่าตัวแปล"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "กำหนด node costs ..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "การเชื่อมต่อล้มเหลว"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "ไม่สามารถคัดลอกตารางได้ <%s>"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "ไม่สามารถเปิดได้ %s"
+
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "ไม่มีความช่วยเหลือสำหรับคำสั่งนี้ [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "none"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "ไม่สามารถเปิด temp ไฟล์"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "ชนิดข้อมูล OGR  %d ไม่รองรับ)"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "ไม่สามารถระบุสภาพไฟล์ <%s>"
@@ -9505,29 +9816,63 @@ msgstr "G_malloc: หน่วยความจำไม่พอ"
 #~ msgid "Out of memmory"
 #~ msgstr "G_malloc: หน่วยความจำไม่พอ"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "ไม่สามารถเปิดไฟล์ datum table ได้ : %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "ไม่สามารถเปิด ไฟล์ประวัติ สำหรับแผนที่เชิงเส้น <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "ไม่สามารถค้นหาไฟล์ชั่คราวได้ %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: ไม่สามารถเปิดไฟล์ %s ได้"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "เสียใจ <%s> ไม่มีอยู่ในเงื่อนไข\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "ข้อผิดพลาด: เงื่อนไข <%s>: <%s> มีอยู่\n"
 
 #, fuzzy
-#~ msgid "Hit RETURN to continue"
-#~ msgstr "กด RETURN เพื่อดำเนินการต่อ -->"
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
 
 #, fuzzy
-#~ msgid "Vector map <%s> is not opened on topology level"
-#~ msgstr "ไม่พบ ชื่อแผนที่เชิงเส้น <%s>"
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "ไม่สามารถเปิดไฟล์ %s ได้"
 
 #, fuzzy
-#~ msgid "Attributes for category %d not found"
-#~ msgstr "ไม่พบ ข้อมูลสำหรับแสดง %d  จากฐานข้อมูล"
+#~ msgid "Hit RETURN to continue"
+#~ msgstr "กด RETURN เพื่อดำเนินการต่อ -->"
 
 #, fuzzy
-#~ msgid "Cannot fetch row"
-#~ msgstr "ไม่สามารถอ่านรายละเอียดของชั้นข้อมูลได้"
+#~ msgid "Vector map <%s> is not opened on topology level"
+#~ msgstr "ไม่พบ ชื่อแผนที่เชิงเส้น <%s>"
 
 #~ msgid "Background color"
 #~ msgstr "สีฉากหลัง"
 
 #, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "ชื่อข้อมูลเชิงภาพ"
+
+#, fuzzy
 #~ msgid "Mode type: {0} not supported."
 #~ msgstr "ไม่รองรับ ชนิด Column นี้"
 
@@ -9536,9 +9881,9 @@ msgstr "G_malloc: หน่วยความจำไม่พอ"
 #~ msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "ไม่สามารถอ่านข้อมูลแผนที่เชิงเส้นได้ <%s%s>"
+#~ msgid "Attributes for category %d not found"
+#~ msgstr "ไม่พบ ข้อมูลสำหรับแสดง %d  จากฐานข้อมูล"
 
 #, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "ชื่อข้อมูลเชิงภาพ"
+#~ msgid "Cannot fetch row"
+#~ msgstr "ไม่สามารถอ่านรายละเอียดของชั้นข้อมูลได้"
diff --git a/locale/po/grasslibs_tr.po b/locale/po/grasslibs_tr.po
index 4c4c2d9..7d799fc 100644
--- a/locale/po/grasslibs_tr.po
+++ b/locale/po/grasslibs_tr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_tr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2010-11-08 15:14+0200\n"
 "Last-Translator: Saban Safak <ssafak at cvm.com.tr>\n"
 "Language-Team: Türkçe <grass-translations at lists.osgeo.org>\n"
@@ -40,10 +40,12 @@ msgstr "<%s> Sürücüsü başlatılamıyor"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "<%s>  veritabanı <%s> sürücüsüyle açılamıyor"
@@ -53,45 +55,45 @@ msgstr "<%s>  veritabanı <%s> sürücüsüyle açılamıyor"
 msgid "Unable to get list tables in database <%s>"
 msgstr "< %s> veritabanındaki tablo tablo listesi alınamıyor"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "<%s> tablosu <%s> veritabanında zaten var"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Seçme imleci açılamıyor: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "<%s> sütunu tamsayı değil"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "<%s> sütunu bulunamıyor"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "<%s> tablosu oluşturulamıyor"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "<%s> tablosundan veri alınamadı"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Bilinmeyen sütun tipi (sütun <%s>)"
@@ -670,8 +672,8 @@ msgstr "%d OGR obje tipi desteklenmiyor"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -681,8 +683,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -783,12 +785,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -835,17 +837,17 @@ msgstr ""
 msgid "Category index out of range"
 msgstr "İndeks aralık dışında"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Kategori indeks dosyasını yazmada hata <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr ""
@@ -911,8 +913,8 @@ msgstr "Hatalı sınır sayısı   :   %d\n"
 msgid "Number of redundant holes: %d"
 msgstr "Sınır sayısı:   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "<%s> vektör haritasının geçmiş dosyası açılamıyor"
@@ -1012,39 +1014,39 @@ msgstr "Alan sayısı     :    -\n"
 msgid "Number of isles: -"
 msgstr "Ada sayısı     :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Topoloji dosyasını yazmada hata"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "Veritabanı bağlantısı eklenemiyor, harita WRITE modunda açılmadı"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "<%s> vektör haritasının geçmiş dosyası açılamıyor"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Konumsal indek dosyasını yazmada hata"
 
@@ -1110,9 +1112,11 @@ msgstr ""
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1161,8 +1165,10 @@ msgstr "Çizgi silinemedi"
 msgid "Unable to fetch data from table"
 msgstr "<%s> tablosundan veri alınamadı"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "<%s> sütunu <%s> tablosunda bulunamıyor"
@@ -1202,24 +1208,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Şebeke çizgisi eklenemedi"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "<%s> vektör haritasının geçmiş dosyası açılamıyor"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1239,7 +1245,7 @@ msgstr "%d çizgisi okunamıyor"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1266,12 +1272,12 @@ msgstr ""
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1279,7 +1285,7 @@ msgstr ""
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "<%s> vektör haritasının geçmiş dosyası açılamıyor"
@@ -1370,7 +1376,7 @@ msgstr "%d çizgisi okunamıyor"
 msgid "No connection defined"
 msgstr "Bağlantıda hata oldu."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "Geçersiz koordinatlar"
@@ -1386,7 +1392,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "%d çizgisi okunamıyor"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Geçici dosya açılamıyor"
@@ -1607,7 +1613,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr ""
 
@@ -1621,17 +1627,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "%d çizgisi okunamıyor"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "%d çizgisi okunamıyor"
@@ -1716,26 +1722,43 @@ msgstr "ID'si olmayan OGR objesi"
 msgid "OGR feature type '%s' not supported"
 msgstr "%d OGR obje tipi desteklenmiyor"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Topoloji dosyası yazmak için açılamıyor <%s>"
@@ -1838,7 +1861,8 @@ msgstr "Vektör harita <%s> ten <%s> e kopyalanamıyor"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "<%s> vektör haritasının veritabanı bağı eklenemiyor"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "<%s> tablosuna kopyalanamıyor"
@@ -1870,6 +1894,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "<%s> tablosu oluşturulamıyor"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "<%s> tablosuna kopyalanamıyor"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "<%s> tablosuna kopyalanamıyor"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1879,7 +1918,7 @@ msgstr "ID'si olmayan OGR objesi görmezden gelindi"
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "'%s' OGR veri kaynağı açılamıyor"
@@ -2161,7 +2200,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2174,126 +2213,126 @@ msgstr "<%s> vektör haritası bulunamadı"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "<%s> vektör haritası açılamıyor"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "Vektör harita <%s> ten <%s> e kopyalanamıyor"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "<%s> vektör haritası için topoloji kuruluyor   \n"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "<%s> vektör haritası açılamıyor"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "<%s> vektör haritasının geçmiş dosyası açılamıyor"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Vektör harita isimleri YSD uyumlu değil"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "<%s> vektör haritası silinemiyor"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "<%s> vektör haritasının geçmiş dosyası açılamıyor"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Uygun olmayan biçim"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Geçici dosya açılamıyor"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2546,29 +2585,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, fuzzy, c-format
 msgid "Snapped vertices: %d"
 msgstr "Tüm kırıklık noktaları"
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Tüm kırıklık noktaları"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Alanlar oluşturuluyor: "
@@ -2598,71 +2637,6 @@ msgstr "%s: Alan %d mevcut değil"
 msgid "Attempt to access dead area %d"
 msgstr "%d çizgisi okunamıyor"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Grafik oluşturuluyor..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Şebeke grafiği oluşturulamıyor"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "<%s> sütunu veri tipi desteklenmiyor ( tamsayı olmalı)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "çizgiler kaydediliyor ..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Şebeke çizgisi eklenemedi"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr "%d düğümünün (cat = %d) veritabanı kaydı bulunamıyor (cost set to 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Grafik oluşturuluyor..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Grafik oluşturuldu"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2765,14 +2739,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Bağlantıda hata oldu."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Bağlantıda hata oldu."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2834,60 +2815,55 @@ msgstr "Varsayılan sürücü ayarlanmadı"
 msgid "Default database is not set"
 msgstr "Varsayılan veritabanı ayarlanamadı"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "[%s deki %s] in aralık dosyası okunamıyor"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "<%s> katmanı açılamıyor"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "OGR DBMI sürücüsü açılamıyor"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "bilinmeyen işletmen"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr ""
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "Geçersiz koordinatlar"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3038,97 +3014,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Bilinmeyen projeksiyon"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Vektör harita isimleri YSD uyumlu değil"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Vektör harita <%s> ten <%s> e kopyalanamıyor"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "<%s> tablosu silinemiyor"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "<%s> tablosu için indeks oluşturulamıyor, anahtar <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "'%s' dizini açılamıyor"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "'%s' dosyası silinemiyor"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "'%s' dizini '%s' olarak yeniden adlandırılamıyor"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "'%s' dizini kaldırılamıyor "
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3218,6 +3194,145 @@ msgstr "Harita yapısı başlatılamadı"
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Grafik oluşturuluyor..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Şebeke grafiği oluşturulamıyor"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "<%s> sütunu <%s> tablosunda bulunamıyor"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "<%s> sütunu veri tipi desteklenmiyor ( tamsayı olmalı)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr "%d düğümünün (cat = %d) veritabanı kaydı bulunamıyor (cost set to 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Şebeke çizgisi eklenemedi"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "%d düğümünün (cat = %d) veritabanı kaydı bulunamıyor (cost set to 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Şebeke çizgisi eklenemedi"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "çizgiler kaydediliyor ..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr "%d düğümünün (cat = %d) veritabanı kaydı bulunamıyor (cost set to 0)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr "%d düğümünün (cat = %d) veritabanı kaydı bulunamıyor (cost set to 0)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Grafik oluşturuluyor..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Grafik oluşturuldu"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Şebeke çizgisi eklenemedi"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3332,7 +3447,7 @@ msgid "3D raster map <%s> not found"
 msgstr "<%s> 3B raster haritası bulunamadı"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3476,88 +3591,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "%d çizgisi okunamıyor"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "%d çizgisi okunamıyor"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "%d OGR obje tipi desteklenmiyor"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Öznitelik sütunu adı"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "[%s deki %s] in aralık dosyası okunamıyor"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "ID'si olmayan OGR objesi görmezden gelindi"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "İndeks aralık dışında"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "<%s> raster haritası boş"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "%d OGR obje tipi desteklenmiyor"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "%d OGR obje tipi desteklenmiyor"
@@ -3566,32 +3691,36 @@ msgstr "%d OGR obje tipi desteklenmiyor"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "<%s> raster haritası oluşturulamıyor"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "<%s> raster haritasının renk dosyası okunamıyor"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "<%s> raster haritası oluşturulamıyor"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Vektör harita <%s> ten <%s> e kopyalanamıyor"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "<%s> vektör haritası silinemiyor"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "<%s> raster haritası oluşturulamıyor"
@@ -3631,7 +3760,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "<%s> raster haritası bulunamadı"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3648,12 +3777,12 @@ msgid "Error computing map <%s>"
 msgstr "<%s>g3d dosyasını açmada hata"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3667,9 +3796,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3681,105 +3810,105 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "bilinmeyen enterpolasyon tipi"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  biçim: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr ""
 " %s harita takımındaki %s haritası %s için geçersiz zaman damgası dosyası"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "Girdi yazım hatası"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr ""
 " %s harita takımındaki %s haritası %s için geçersiz zaman damgası dosyası"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr ""
 " %s harita takımındaki %s haritası %s için geçersiz zaman damgası dosyası"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr ""
@@ -3811,132 +3940,132 @@ msgstr "<%s> vektör haritası oluşturulamıyor"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "<%s> vektör haritası açılamıyor"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "<%s> raster haritası bulunamadı"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "<%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "datum tablo dosyası açılamıyor <%s>"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "datum tablo dosyası açılamıyor <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "datum tablo dosyası açılamıyor <%s>"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Alanlar oluşturuluyor: "
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "'%s' dizini kaldırılamıyor "
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "[%s] in geçmiş bilgisi yazılamıyor"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "[%s deki %s] için üst bilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "%s geçici boş dosyası bulunamadı"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "%s geçici boş dosyası bulunamadı"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "<%s> cidx dosyası yazmak için açılamıyor"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Obje tip(ler)i"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "[%s] için üstbilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "<%s> raster haritası bulunamadı"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -3961,20 +4090,20 @@ msgid ""
 "%s"
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "[%s deki %s] için üst bilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3983,7 +4112,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "[%s deki %s] için üst bilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -3991,12 +4120,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "[%s deki %s] için üst bilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "%s veritabanı açılamıyor"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4004,49 +4133,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "'%s' dizini kaldırılamıyor "
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "[%s deki %s] için üst bilgi dosyası oluşturulamıyor"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "<%s> tablosu oluşturulamıyor"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Komut uygulanamıyor"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "'%s' bulunamadı"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Girdi haritası kapatılamıyor"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Komut uygulanamıyor"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4054,182 +4171,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Komut uygulanamıyor"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Komut uygulanamıyor"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "bilinmeyen enterpolasyon tipi"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  biçim: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Obje tip(ler)i"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "<%s@%s> raster haritası açılamıyor"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "<%s> tablosundan veri alınamadı"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  biçim: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "<%s> tablosundan veri alınamadı"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "<%s> tablosundan veri alınamadı"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "[%s] için üstbilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "[%s] için üstbilgi dosyası oluşturulamıyor"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4237,19 +4354,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4310,58 +4427,65 @@ msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Üstbilgi dosyası okunamıyor"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "<%s> raster haritasının kayar nokta aralığı okunamıyor"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Raster temel haritanın adı"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  biçim: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Raster temel haritanın adı"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4533,30 +4657,30 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "<%s@%s> raster haritası açılamıyor"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "<%s> raster haritası bulunamadı"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "<%s> raster haritası oluşturulamıyor"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "<%s> raster haritası bulunamadı"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr ""
@@ -4588,105 +4712,122 @@ msgstr "%d OGR obje tipi desteklenmiyor"
 msgid "Unable to parse time string: %s"
 msgstr "%s içindeki <%s> dosyası açılamadı"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Girdi raster haritası adı"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "<%s> raster haritası bulunamadı"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Girdi haritası kapatılamıyor"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "<%s> deki <%s> vektör haritası bulunamadı"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
@@ -4695,39 +4836,39 @@ msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 " %s harita takımındaki %s haritası %s için geçersiz zaman damgası dosyası"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 " %s harita takımındaki %s haritası %s için geçersiz zaman damgası dosyası"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 " %s harita takımındaki %s haritası %s için geçersiz zaman damgası dosyası"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Doğu batıdan büyük olmalıdır"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Doğu batıdan büyük olmalıdır"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
@@ -4736,50 +4877,74 @@ msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr ""
 "%s harita takımındaki %s haritası %s için zaman damgası dosyası "
 "oluşturulamıyor"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Doğu batıdan büyük olmalıdır"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "<%s> deki <%s> vektör haritası bulunamadı"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4791,32 +4956,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "<%s> tablosundan veri alınamadı"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "bilinmiyor"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "%s bulunamadı"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "gereken: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4824,16 +4989,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "Geçersiz koordinatlar"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "Geçersiz koordinatlar"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "Geçersiz koordinatlar"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "Geçersiz koordinatlar"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4841,103 +5041,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Girdi haritası kapatılamıyor"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Uygun olmayan dosya adı. '.' veya 'NULL' olmamalı\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Uygun olmayan dosya adı. <%c> karakteri kullanılamaz.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "%d katmanının veritabanı bağlantısı belirlenmedi"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr ""
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr "Veritabanı bağlantısı eklenemiyor, harita WRITE modunda açılmadı"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Girdi vektör haritasının adı"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Renk"
@@ -5037,7 +5237,7 @@ msgstr "<%s> dosyası yazma için açılamıyor"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "<%s> raster haritası bulunamadı"
@@ -5531,12 +5731,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5760,7 +5960,7 @@ msgstr ""
 msgid "WARNING: "
 msgstr "UYARI:"
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "HATA:"
@@ -5896,7 +6096,7 @@ msgstr "tekrarlanan format alanı"
 msgid "Duplicate compressed field"
 msgstr "tekrarlanan sıkıştırılmış alan"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Alan %d mevcut değil"
@@ -6022,22 +6222,22 @@ msgstr "GISRC - değişken ayarlanmadı"
 msgid "Variable '%s' not set"
 msgstr "GISRC - değişken ayarlanmadı"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "'%s' açılamadı"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "'%s' açılamadı"
@@ -6092,12 +6292,12 @@ msgstr ""
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "%s deki <%s> dosyasında hiç elipsoid bilgisi verilmedi"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "%s (%s) harita takımı elemanı yapılamıyor"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "%s (%s) harita takımı elemanı yapılamıyor"
@@ -6115,16 +6315,16 @@ msgid "SYNOPSIS"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Flamalar"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Parametreler"
 
@@ -6136,6 +6336,10 @@ msgstr "Seçenekler"
 msgid "Default"
 msgstr "Varsayılan"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6227,17 +6431,21 @@ msgstr "ID'si olmayan OGR objesi görmezden gelindi"
 msgid "Flags:"
 msgstr "Flamalar"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+msgid "Super quiet module output"
+msgstr ""
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Parametreler"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   varsayılan: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   seçenekler: "
@@ -6517,223 +6725,232 @@ msgstr ""
 msgid "Category value"
 msgstr "Kategori değeri"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Kategori değerleri"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Örnek: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 #, fuzzy
 msgid "Feature id"
 msgstr "Obje: "
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 #, fuzzy
 msgid "Feature ids"
 msgstr "Obje: "
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Girdi dosyasının adı"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 msgid "Name for output file"
 msgstr "Çıktı dosya adı"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Alan ayracı"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Renk"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Ya standart renk adı veya K:Y:M üçlemesi"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Ya standart GRASS rengi,K:Y:M üçlemesi, yada \"hiçbiri\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Girdi dosyasının adı"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Geçersiz koordinatlar"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Girdi vektör haritasının adı"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "<%s> vektörü kapatılamıyor"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Girdi raster harita(lar) adı"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Çıktı raster haritasının adı"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Yükselti raster haritası adı"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Yükselti raster haritası adı"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Çıktı raster haritasının adı"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Girdi vektör haritasının adı"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Girdi vektör haritasının adı"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Çıktı vektör haritasının adı"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Girdi raster3d haritanın adı"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Girdi raster3d harita(lar) adı"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Girdi raster3d harita(lar) adı"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "%s dosyası geçerli harita takımında değil (%s)"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Girdi raster haritası adı"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Girdi raster haritası adı"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Girdi haritası kapatılamıyor"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "[%s] için üstbilgi dosyası oluşturulamıyor"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "'where' sözcüğü olmayan WHERE SQL tümcesi"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Öznitelik tablosundan veri yükleniyor ..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "Topoloji oluşturuluyor...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6852,78 +7069,82 @@ msgstr ""
 "\n"
 "Tanım:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Üzgünüm <%s> geçerli bir seçenek değil\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "HATA:"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr ""
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Üzgünüm, <%c> geçerli bir flama değil\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Üzgünüm, <%s=> belirsizdir\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Üzgünüm <%s> geçerli bir parametre değil\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> harita takımındaki <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -6932,7 +7153,7 @@ msgstr ""
 "\n"
 "Hata: <%s> parametresi için geçersiz aralık \n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -6941,14 +7162,14 @@ msgstr ""
 "\n"
 "Hata: <%s> parametresi için <%s> değeri aralık dışında\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "Hata: <%s> parametresi için kayıp değer\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -6957,7 +7178,7 @@ msgstr ""
 "\n"
 "Hata: <%s> parametresi için <%s> değeri aralık dışında\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -6967,44 +7188,44 @@ msgstr ""
 "HATA: Gerekli <%s> parametresi ayarlanmadı:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
 "\tYou provided %d item(s): %s"
 msgstr ""
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Üzgünüm <%s> geçerli bir seçenek değil\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Alan ayracı"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Üzgünüm <%s> geçerli bir seçenek değil\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "%d OGR obje tipi desteklenmiyor"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Geçici dosya açılamıyor"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "<%s> tablosu oluşturulamıyor"
@@ -7920,15 +8141,35 @@ msgstr ""
 msgid "No ellipsoid info given in file"
 msgstr "Dosyada hiç elipsoid bilgisi verilmedi"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "[%s deki %s] sıkıştırılmış dosyasınıokumada başlangıç hatası"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "[%s deki %s] sıkıştırılmış dosyasınıokumada başlangıç hatası"
+
 #: ../lib/raster/init.c:61
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr ""
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -7959,51 +8200,46 @@ msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Kategori indeks dosyasını yazmada hata <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "<%s> için aralık dosyası açılamıyor"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "%s geçici boş dosyası bulunamadı"
+msgid "No null file for <%s>"
+msgstr "<%s> için aralık dosyası açılamıyor"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "datum tablo dosyası açılamıyor <%s>"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "%d boş satırları yazmada hata"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: [%s] haritası yazmak için açılamıyor - istek yok sayıldı"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: açılamayan dosya tanımlatıcı - istek yok sayıldı"
@@ -8094,22 +8330,22 @@ msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, c-format
 msgid "Invalid descriptor: %d"
 msgstr ""
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "datum tablo dosyası açılamıyor <%s>"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "'%s' dosyası silinemiyor"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr ""
 
@@ -8194,104 +8430,104 @@ msgstr "<%s> raster haritasının kayar nokta aralığı okunamıyor"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "<%s> raster haritası bulunamadı"
+msgid "Compression with %s is not supported"
+msgstr "%d OGR obje tipi desteklenmiyor"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
 "should be <%s>."
 msgstr ""
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr ""
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr ""
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "<%s@%s> raster haritası açılamıyor"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "<%s@%s> haritasını okumada hata, satır %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "<%s> için aralık dosyası açılamıyor"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Geçici dosya açılamıyor"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, c-format
 msgid "Invalid map type <%d>"
 msgstr ""
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr ""
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> uygun olmayan bir addır"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "<%s> harita takımında hiç %s dosyası yok\n"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "%s dosyası geçerli harita takımında değil (%s)"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr ""
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "'%s' bulunamadı"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "geçersiz tip: '%s' alanı '%s' dosyasındaki"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "geçersiz tip: '%s' alanı '%s' dosyasındaki"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr ""
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8331,24 +8567,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr ""
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Kategori indeks dosyasını yazmada hata <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "<%s@%s> sıkıştırılmış haritasını okumada hata, satır %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "%d boş satırları okumada hata"
@@ -8582,33 +8834,28 @@ msgstr "bilinmiyor"
 msgid "Unsupported icon %d"
 msgstr "Obje tip(ler)i"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "<%s> Sürücüsü başlatılamıyor"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "<%s> Sürücüsü başlatılamıyor"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "<%s> katmanı açılamıyor"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8684,17 +8931,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "datum tablo dosyası açılamıyor <%s>"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "UYARI:"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Alan merkezleri ekleniyor: "
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8702,115 +8949,159 @@ msgstr ""
 "Kullanım:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr "yardım mesajını yazdır"
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "varsayılanı kabul et"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "geçersiz projeksiyon\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "'%s' dizini kaldırılamıyor "
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "İstenen format bu sürümde derlenmedi."
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8820,282 +9111,298 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Üzgünüm <%s> geçerli bir seçenek değil\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
+msgstr ""
+
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Alan %d mevcut değil"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Alan %d mevcut değil"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
+msgstr ""
+
+#: ../lib/init/grass.py:1205
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Forcing to launch GRASS..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Grafik oluşturuluyor..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - değişken ayarlanmadı"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Alan merkezleri ekleniyor: "
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Bağlantıda hata oldu."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "<%s> tablosundan veri alınamadı"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "<%s> vektörü kapatılamıyor"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "[%s] komutu için yardım yoktur\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "hiçbiri"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Geçici dosya açılamıyor"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "%d OGR obje tipi desteklenmiyor"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "<%s> Sürücüsü başlatılamıyor"
@@ -9367,36 +9674,70 @@ msgstr "Yetersiz bellek"
 #~ msgid "Out of memmory"
 #~ msgstr "Yetersiz bellek"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "[%s deki %s] için üst bilgi dosyası oluşturulamıyor"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "%s geçici boş dosyası bulunamadı"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "datum tablo dosyası açılamıyor <%s>"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Üzgünüm <%s> geçerli bir seçenek değil\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "Hata: seçenek <%s>: <%s> mevcut.\n"
 
 #, fuzzy
-#~ msgid "Hit RETURN to continue"
-#~ msgstr "Devam etmek için ENTER'a basın -->"
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "Geçersiz koordinatlar"
 
 #, fuzzy
-#~ msgid "Vector map <%s> is not opened on topology level"
-#~ msgstr "Veritabanı bağlantısı eklenemiyor, harita WRITE modunda açılmadı"
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "<%s> katmanı açılamıyor"
 
 #, fuzzy
-#~ msgid "Attributes for category %d not found"
-#~ msgstr "%d kategorisinin veritabanı kaydı bulunamıyor"
+#~ msgid "Hit RETURN to continue"
+#~ msgstr "Devam etmek için ENTER'a basın -->"
 
 #, fuzzy
-#~ msgid "Cannot fetch row"
-#~ msgstr "Katman bilgisi alınamıyor"
+#~ msgid "Vector map <%s> is not opened on topology level"
+#~ msgstr "Veritabanı bağlantısı eklenemiyor, harita WRITE modunda açılmadı"
 
 #~ msgid "Background color"
 #~ msgstr "Arkaplan rengi"
 
 #, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Girdi raster haritası adı"
+
+#, fuzzy
 #~ msgid "Mode type: {0} not supported."
 #~ msgstr "%d OGR obje tipi desteklenmiyor"
 
 #, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "Geçersiz koordinatlar"
+#~ msgid "Attributes for category %d not found"
+#~ msgstr "%d kategorisinin veritabanı kaydı bulunamıyor"
 
 #, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Girdi raster haritası adı"
+#~ msgid "Cannot fetch row"
+#~ msgstr "Katman bilgisi alınamıyor"
diff --git a/locale/po/grasslibs_vi.po b/locale/po/grasslibs_vi.po
index 2f88757..5656c71 100644
--- a/locale/po/grasslibs_vi.po
+++ b/locale/po/grasslibs_vi.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_vi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2010-08-27 11:18+0700\n"
 "Last-Translator: \n"
 "Language-Team: American English <kde-i18n-doc at kde.org>\n"
@@ -40,10 +40,12 @@ msgstr "Không thể khởi động trình điều khiển <%s>"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
@@ -53,45 +55,45 @@ msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
 msgid "Unable to get list tables in database <%s>"
 msgstr "không thể lấy các bảng danh sách trong csdl <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "Bảng <%s> đã có trong csdl <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Không thể mở con trỏ chọn: '%s'"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, c-format
 msgid "Column <%s> is not integer"
 msgstr "Cột <%s> không phải kiểu số nguyên"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, c-format
 msgid "Column <%s> not found"
 msgstr "Không tìm thấy cột <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Không thể tạo bảng <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "Kiểu cột không biết (cột <%s>)"
@@ -701,8 +703,8 @@ msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -712,8 +714,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -821,12 +823,12 @@ msgstr ""
 "Định dạng chỉ mục đối tượng phiên bản %d.%d không được hỗ trợ trong bản phát "
 "hành này. Hãy thử xây dựng lại tôpô hoặc cập nhật GRASS."
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr "Lỗi GngFlattern"
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -873,17 +875,17 @@ msgstr "Chỉ mục phạm trù nằm ngoài miền"
 msgid "Category index out of range"
 msgstr "Chỉ mục phạm trù nằm ngoài miền"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "Không thể mở tập tin chỉ mục phạm trù của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "Lỗi khi đang ghi tập tin chỉ mục phạm trù <%s>"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "Không thể mở tập tin chỉ mục phạm trù của bản đồ vec-tơ <%s>"
@@ -949,8 +951,8 @@ msgstr "Số ranh giới không đúng: %d"
 msgid "Number of redundant holes: %d"
 msgstr "Số ranh giới: %d"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "Không thể mở tập tin chỉ mục phạm trù của bản đồ vec-tơ <%s>"
@@ -1047,16 +1049,16 @@ msgstr "Số vùng: -"
 msgid "Number of isles: -"
 msgstr "Số đảo: -"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 msgid "Error writing out topo file"
 msgstr "Lỗi khi đang ghi vào tập tin tôpô"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
@@ -1065,21 +1067,21 @@ msgstr ""
 "Không thể xây dựng chỉ mục không gian từ tôpô, bản đồ vec-tơ không được mở ở "
 "tôpô cấp 2"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, fuzzy, c-format
 msgid "%s is no longer supported"
 msgstr "LỖI CỦA CHƯƠNG TRÌNH (Vect_build_sidx_from_topo): nốt không tồn tại"
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "Không thể mở tập tin chỉ mục phạm trù của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 msgid "Error writing out spatial index file"
 msgstr "Lỗi khi đang ghi tập tin chỉ mục không gian"
 
@@ -1145,9 +1147,11 @@ msgstr "Không hiểu từ khoá %s trong tiêu đề vec-tơ"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1196,8 +1200,10 @@ msgstr "Không thể chọn các thuộc tính"
 msgid "Unable to fetch data from table"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "Không tìm thấy cột <%s> trong bảng <%s>"
@@ -1237,17 +1243,17 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "Không thể thêm cung mạng lưới"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr "Lỗi dglShortestPath: %s"
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "Không thể mở tập tin lịch sử của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
@@ -1256,7 +1262,7 @@ msgstr ""
 "Các tập tin coor của bản đồ vec-tơ <%s@%s> lớn hơn cỡ đúng của nó (quá %ld "
 "byte)"
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, fuzzy, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1278,7 +1284,7 @@ msgstr "Cố gắng đọc các điểm của một vùng không tồn tại"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1305,12 +1311,12 @@ msgstr "Cố gắng đọc tôpô của đảo chết (%d)"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1318,7 +1324,7 @@ msgstr "Cố gắng đọc tôpô của đảo chết (%d)"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "Không thể mở tập tin chỉ mục phạm trù của bản đồ vec-tơ <%s>"
@@ -1409,7 +1415,7 @@ msgstr "Không thể ghi lại đối tượng %d"
 msgid "No connection defined"
 msgstr "Kết nối thất bại."
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "không thể đổi thư mục đến %s"
@@ -1425,7 +1431,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "Không thể ghi lại đối tượng %d"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "Không thể mở tập tin %s trong %s"
@@ -1649,7 +1655,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 msgid "Attempt to read dead line"
 msgstr "Cố gắng đọc dòng chết"
 
@@ -1663,17 +1669,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "Không thể đọc đường %d"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "Cố gắng đọc các điểm của một vùng không tồn tại"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "Không thể ghi lại đối tượng %d"
@@ -1758,16 +1764,33 @@ msgstr "Đối tượng OGR không có ID"
 msgid "OGR feature type '%s' not supported"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr "Hướng của đường bị sai trong Vect_net_get_line_cost()"
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 #, fuzzy
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
@@ -1775,12 +1798,12 @@ msgstr ""
 "Việc đọc ngẫu nhiên không được OGR hỗ trợ đối với lớp này, không thể xây "
 "dựng hỗ trợ"
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "Không thể mở tập tin tôpô để ghi <%s>"
@@ -1883,7 +1906,8 @@ msgstr "Không thể sao chép bản đồ vec-tơ <%s> vào <%s>"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "Không thể thêm liên kết csdl cho bản đồ vec-tơ '%s'"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, c-format
 msgid "Unable to copy table <%s>"
 msgstr "Không thể sao chép bảng <%s>"
@@ -1915,6 +1939,21 @@ msgstr "Chồng: kiều đường/ranh giới chưa được toán tử AND hỗ
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr "Chồng: các kiều vùng x vùng chưa được toán tử AND hỗ trợ"
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "Không thể tạo bảng <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "Không thể sao chép bảng <%s>"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "Không thể sao chép bảng <%s>"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1924,7 +1963,7 @@ msgstr "Đối tượng OGR không có ID bị bỏ qua"
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "Không thể mở nguồn dữ liệu OGR '%s'"
@@ -2213,7 +2252,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2226,33 +2265,33 @@ msgstr "Không tìm thấy bản đồ vec-tơ <%s>"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr ""
 "Bản đồ vec-tơ không ở trong bộ bản đồ hiện tại nên không thể mở để cập nhật "
 "được"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Không thể mở bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "Không thể mở tập tin tôpô của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
@@ -2261,96 +2300,96 @@ msgstr ""
 "Không thể mở bản đồ vec-tơ <%s> ở cấp %d. Hãy thử xây dựng lại tôpô bằng v."
 "build."
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "Đang xây dựng lại tôpô cho bản đồ vec-tơ <%s>..."
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "không thể mở bản đồ raster [%s in %s]"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "Không thể mở tập tin lịch sử của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "Bản đồ raster <%s> không ở trong bộ bản đồ hiện tại (%s)"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "Tên bản đồ vec-tơ không tương thích SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "Không thể xoá bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "Không thể mở tập tin lịch sử của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, c-format
 msgid "Unable to stat file <%s>"
 msgstr "Không thể khởi động tập tin <%s>"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "Kích thước của tập tin 'coor' khác với giá trị lưu trong tập tin tôpô."
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "Vui lòng xây dựng lại tôpô cho bản đồ vec-tơ <%s@%s>"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "Kích thước của tập tin 'coor' khác với giá trị lưu trong tập tin tôpô."
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2606,29 +2645,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "Số đối tượng nguyên thủy: %d"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "Đang xây dựng các vùng..."
@@ -2658,73 +2697,6 @@ msgstr "%s: Vùng %d không tồn tại"
 msgid "Attempt to access dead area %d"
 msgstr "Cố gắng xoá đối tượng chết"
 
-#: ../lib/vector/Vlib/net.c:117
-msgid "Building graph..."
-msgstr "Đang xây dựng biểu đồ..."
-
-#: ../lib/vector/Vlib/net.c:162
-msgid "Unable to build network graph"
-msgstr "Không thể xây dựng biểu đồ mạng lưới"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr "Cột chi phí tới không được chỉ định"
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr "Trường Arc < 1"
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "Kiểu dữ liệu của cột <%s> không được hỗ trợ (phải là kiểu số)"
-
-#: ../lib/vector/Vlib/net.c:225
-msgid "Registering arcs..."
-msgstr "Đang đăng ký các cung..."
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-"Không tìm thấy bản ghi csdl cho đường %d (cat = %d, hướng tới/cả hai hướng) 
(hướng tới/cả hai hướng của đường bị bỏ qua)"
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr "Không tìm thấy bản ghi cho đường %d (cat = %d, hướng lui) 
(hướng của đường bị bỏ qua)"
-
-#: ../lib/vector/Vlib/net.c:322
-msgid "Cannot add network arc"
-msgstr "Không thể thêm cung mạng lưới"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr "Đang thiết lập các chi phí nốt..."
-
-#: ../lib/vector/Vlib/net.c:415
-#, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr ""
-"Không tìm thấy bản ghi csdl cho nốt %d (cat = %d) (chi phí thiết lập về 0)"
-
-#: ../lib/vector/Vlib/net.c:444
-msgid "Flattening the graph..."
-msgstr "Đang làm phẳng biểu đồ..."
-
-#: ../lib/vector/Vlib/net.c:453
-msgid "Graph was built"
-msgstr "Biểu đồ đã được xây dựng"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr "Hướng của đường bị sai trong Vect_net_get_line_cost()"
-
 #: ../lib/vector/Vlib/buffer2.c:361
 msgid "Line is not looped"
 msgstr "Đường không bị thắt nút"
@@ -2832,14 +2804,21 @@ msgstr "Hàng bị lỗi trong tiêu đề: %s"
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "Kết nối thất bại."
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "Kết nối thất bại."
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2904,26 +2883,26 @@ msgstr "Trình đ.khiển mặc định không được thiết lập"
 msgid "Default database is not set"
 msgstr "CSDL mặc định không được thiết lập"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "Liên kết csdl %d được yêu cầu, số lượng liên kết tối đa %d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "Lỗi trong quy tắc tại dòng %d trong %s"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "Không thể mở lớp <%s>"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 msgid "Unable to open OGR DBMI driver"
 msgstr "Không thể mở trình đ.khiển OGR DBMI"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
@@ -2931,35 +2910,30 @@ msgstr ""
 "Tất cả các kiểm tra FID thất bại. 'FID', 'ogc_fid', 'ogr_fid' lẫn 'gid' đều "
 "không dùng được trong bảng OGR DB"
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "toán tử không hiểu"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "không thể đổi thư mục đến %s"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3110,97 +3084,97 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "Không thể xoá mục %d khỏi chỉ mục không gian"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "Không thể mở tập tin header của vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr "Hàng bị lỗi trong tiêu đề: %s"
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "Không hiểu từ khoá %s trong tiêu đề vec-tơ"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "Phép chiếu không biết"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 msgid "Vector map name is not SQL compliant"
 msgstr "Tên bản đồ vec-tơ không tương thích SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "Không thể sao chép bản đồ vec-tơ <%s> vào <%s>"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, c-format
 msgid "Unable to delete table <%s>"
 msgstr "Không thể xoá bảng <%s>"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Không thể tạo chỉ mục cho bảng <%s>, khoá <%s>"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "Tên bản đồ vec-tơ không hợp lệ <%s>"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "Không thể tìm thấy bảng <%s> được liên kết vào bản đồ vec-tơ <%s>"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "Bảng <%s> được liên kết vào bản đồ vec-tơ <%s> không tồn tại"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, c-format
 msgid "Unable to open directory '%s'"
 msgstr "Không thể mở thư mục '%s'"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, c-format
 msgid "Unable to delete file '%s'"
 msgstr "Không thể xoá tập tin '%s'"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "Không thể đổi tên thư mục '%s' thành '%s'"
 
-#: ../lib/vector/Vlib/map.c:487
-#, c-format
-msgid "Unable to remove directory '%s'"
+#: ../lib/vector/Vlib/map.c:528
+#, fuzzy, c-format
+msgid "Unable to remove directory '%s': %s"
 msgstr "Không thể loại bỏ thư mục '%s'"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3287,6 +3261,150 @@ msgstr "Cấu trúc bản đồ chưa từng được khởi tạo"
 msgid "Map structure has been closed"
 msgstr "Cấu trúc bản đồ đã được đóng"
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+msgid "Building graph..."
+msgstr "Đang xây dựng biểu đồ..."
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+msgid "Unable to build network graph"
+msgstr "Không thể xây dựng biểu đồ mạng lưới"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr "Cột chi phí tới không được chỉ định"
+
+#: ../lib/vector/Vlib/net_build.c:156
+#, fuzzy
+msgid "Turntable field < 1"
+msgstr "Trường Arc < 1"
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "Không tìm thấy cột <%s> trong bảng <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "Kiểu dữ liệu của cột <%s> không được hỗ trợ (phải là kiểu số)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr "Đang thiết lập các chi phí nốt..."
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr ""
+"Không tìm thấy bản ghi csdl cho nốt %d (cat = %d) (chi phí thiết lập về 0)"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "Không thể thêm cung mạng lưới"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr ""
+"Không tìm thấy bản ghi csdl cho nốt %d (cat = %d) (chi phí thiết lập về 0)"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "Không thể thêm cung mạng lưới"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr "Trường Arc < 1"
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+msgid "Registering arcs..."
+msgstr "Đang đăng ký các cung..."
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr ""
+"Không tìm thấy bản ghi csdl cho đường %d (cat = %d, hướng tới/cả hai hướng) 
(hướng tới/cả hai hướng của đường bị bỏ qua)"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr "Không tìm thấy bản ghi cho đường %d (cat = %d, hướng lui) 
(hướng của đường bị bỏ qua)"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+msgid "Flattening the graph..."
+msgstr "Đang làm phẳng biểu đồ..."
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+msgid "Graph was built"
+msgstr "Biểu đồ đã được xây dựng"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+"Không tìm thấy bản ghi csdl cho đường %d (cat = %d, hướng tới/cả hai hướng) 
(hướng tới/cả hai hướng của đường bị bỏ qua)"
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr "Không tìm thấy bản ghi cho đường %d (cat = %d, hướng lui) 
(hướng của đường bị bỏ qua)"
+
+#: ../lib/vector/Vlib/net_build.c:937
+msgid "Cannot add network arc"
+msgstr "Không thể thêm cung mạng lưới"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3402,7 +3520,7 @@ msgid "3D raster map <%s> not found"
 msgstr "Không tìm thấy bản đồ raster 3D <%s>"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3546,88 +3664,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "Không thể đọc đường %d"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "Không thể ghi lại đối tượng %d"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "Tên của cột thuộc tính"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "Trục trặc khi đang đọc bản đồ raster"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "Đối tượng OGR không có ID bị bỏ qua"
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "Chỉ mục nằm ngoài miền trong"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "Bảng <%s> được liên kết vào bản đồ vec-tơ <%s> không tồn tại"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
@@ -3636,32 +3764,36 @@ msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "Không thể tạo bản đồ raster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "Không thể đọc tập tin màu của bản đồ raster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "Không thể tạo bản đồ raster <%s>"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "Không thể sao chép bản đồ vec-tơ <%s> vào <%s>"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "Không thể xoá bản đồ vec-tơ <%s>"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "Không thể tạo bản đồ raster <%s>"
@@ -3701,7 +3833,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3718,12 +3850,12 @@ msgid "Error computing map <%s>"
 msgstr "Lỗi khi đang mở bản đồ g3d <%s>"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3737,9 +3869,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3751,91 +3883,91 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "Kiểu vec-tơ không biết."
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  định dạng: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr ""
 "Tập tin đánh dấu thời gian không hợp lệ cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "lỗi cú pháp"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr ""
 "Tập tin đánh dấu thời gian không hợp lệ cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr ""
 "Tập tin đánh dấu thời gian không hợp lệ cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
@@ -3865,132 +3997,132 @@ msgstr "Không thể tạo bản đồ vec-tơ <%s>"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "Không thể mở bản đồ vec-tơ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "Không tìm thấy bản đồ raster <%s>"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "Không tìm thấy bản đồ vec-tơ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "Không thể khởi động tập tin <%s>"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "Đang xây dựng các vùng..."
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "Không thể loại bỏ thư mục '%s'"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "không thể ghi thông tin lịch sử cho [%s]"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "Không thể mở tập tin định nghĩa csdl vec-tơ: '%s'"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "không thể tìm thấy một tập tin null tạm %s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "không thể tìm thấy một tập tin null tạm %s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "Không thể mở tập tin cidx <%s> để ghi"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "Kiểu đối tượng"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "Không thể tạo ra tập tin header cho [%s]"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4015,20 +4147,20 @@ msgid ""
 "%s"
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "Không thể mở tập tin định nghĩa csdl vec-tơ: '%s'"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4037,7 +4169,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Không thể mở tập tin định nghĩa csdl vec-tơ: '%s'"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4045,12 +4177,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "Không thể mở tập tin định nghĩa csdl vec-tơ: '%s'"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "Không thể mở CSDL"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4058,49 +4190,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "Không thể loại bỏ thư mục '%s'"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Không thể mở tập tin định nghĩa csdl vec-tơ: '%s'"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "Không thể tạo bảng <%s>"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "Không thể thực thi lệnh"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "Không thể tìm thấy '%s'"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "Không thể khởi động tập tin <%s>"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "Không thể thực thi lệnh"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4108,182 +4228,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "Không thể thực thi lệnh"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "Không thể thực thi lệnh"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "Kiểu vec-tơ không biết."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  định dạng: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "Kiểu đối tượng"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "Không thể ghi các quy tắc lượng tử cho bản đồ %s"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  định dạng: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4291,19 +4411,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4364,58 +4484,65 @@ msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "Không thể đọc tập tin đề mục"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "Không thể đọc miền của bản đồ raster 3D <%s>"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "Không thể đóng bản đồ raster 3D <%s>"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "Tên của bản đồ raster gốc"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  định dạng: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "Tên của bản đồ raster gốc"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4587,28 +4714,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "Không thể mở tập tin header của bản đồ raster <%s@%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "Không tìm thấy bản đồ raster <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "Không thể đọc miền của bản đồ raster <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "Không tìm thấy bản đồ raster <%s>"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
@@ -4638,105 +4765,122 @@ msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 msgid "Unable to parse time string: %s"
 msgstr "Không thể mở tập tin %s trong <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "Tên của bản đồ raster đầu vào"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "Không tìm thấy bản đồ raster <%s>"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "Không thể đóng bản đồ đầu vào"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
@@ -4744,39 +4888,39 @@ msgid ""
 msgstr ""
 "Không thể tạo tập tin đánh dấu thời gian cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 "Tập tin đánh dấu thời gian không hợp lệ cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr ""
 "Tập tin đánh dấu thời gian không hợp lệ cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr ""
 "Tập tin đánh dấu thời gian không hợp lệ cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "Cận Đông phải lớn hơn cận Tây"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "Cận Đông phải lớn hơn cận Tây"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
@@ -4784,48 +4928,72 @@ msgid ""
 msgstr ""
 "Không thể tạo tập tin đánh dấu thời gian cho %s bản đồ %s trong bộ bản đồ %s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "Cận Đông phải lớn hơn cận Tây"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "Không thể tìm thấy bản đồ vec-tơ <%s> trongg <%s>"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4837,32 +5005,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "không biết"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "không tìm thấy %s"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr "cần có: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4870,16 +5038,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "không thể đổi thư mục đến %s"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "không thể đổi thư mục đến %s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "không thể đổi thư mục đến %s"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "không thể đổi thư mục đến %s"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4887,79 +5090,79 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "Không thể đóng bản đồ đầu vào"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "Tên tập tin không hợp lệ. Không thể là '.' hay 'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "Tên tập tin không hợp lệ. Ký tự <%c> không được phép.\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, fuzzy, python-format
 msgid "Database connection not defined for layer %s"
 msgstr "Kết nối CSDL không được định nghĩa cho lớp %d"
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "Lỗi khi đang nạp bản đồ vec-tơ <%s>"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
@@ -4968,24 +5171,24 @@ msgstr ""
 "Không thể phục hồi lại đối tượng %d, bản đồ vec-tơ <%s> không được mở ở chế "
 "độ 'write' (ghi)"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "Tên của bản đồ vec-tơ đầu vào"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "Màu"
@@ -5084,7 +5287,7 @@ msgstr "Không thể mở tập tin <%s> để ghi"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, c-format
 msgid "Raster map <%s> not found"
 msgstr "Không tìm thấy bản đồ raster <%s>"
@@ -5606,12 +5809,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "Keine %s Dateien im aktuellen Mapset vorhanden\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "Keine %s Dateien im aktuellen Mapset vorhanden\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5835,7 +6038,7 @@ msgstr ""
 msgid "WARNING: "
 msgstr "CẢNH BÁO: "
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "LỖI: "
@@ -5971,7 +6174,7 @@ msgstr "trường định dạng bị đúp"
 msgid "Duplicate compressed field"
 msgstr "trường nén bị đúp"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "%s: Vùng %d không tồn tại"
@@ -6101,22 +6304,22 @@ msgstr "GISRC - biến không được thiết lập"
 msgid "Variable '%s' not set"
 msgstr "G_getenv(): Biến %s không được thiết lập"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr "G__open(read): bộ bản đồ <%s> không khớp với xmapset <%s>"
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "Không thể mở '%s'"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn: không thể mở tập tin %s"
@@ -6171,12 +6374,12 @@ msgstr "Giá trị es không hợp lệ : trường '%s' trong tập tin %s tron
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "Thông tin về ellipsoid không được cung cấp trong tập tin %s trong <%s>"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "Không thể tạo thành phần cho bộ bản đồ %s (%s): %s"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "Không thể truy cập thành phần của bộ bản đồ %s (%s): %s"
@@ -6194,16 +6397,16 @@ msgid "SYNOPSIS"
 msgstr "TÓM TẮT"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "Các cờ"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "Các tham số"
 
@@ -6215,6 +6418,10 @@ msgstr "Tùy chọn"
 msgid "Default"
 msgstr "Mặc định"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6306,17 +6513,22 @@ msgstr "Đối tượng OGR không có ID bị bỏ qua"
 msgid "Flags:"
 msgstr "Các cờ"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Đầu ra mô-đun im lặng"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "Các tham số"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s    mặc định: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   tùy chọn: "
@@ -6605,222 +6817,231 @@ msgstr ""
 msgid "Category value"
 msgstr "Giá trị phạm trù"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "Các giá trị phạm trù"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "Ví dụ: 1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 msgid "Feature id"
 msgstr "id đối tượng"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 msgid "Feature ids"
 msgstr "Các id đối tượng"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "Tên của tập tin đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "Tên của tập tin đầu ra"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "Dấu phân cách trường"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "Màu"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "Hoặc là một màu chuẩn hoặc là bộ ba R:G:B"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "Hoặc là một màu GRASS chuẩn, bộ ba R:G:B, hoặc \"none\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "Tên của tập tin đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "Tọa độ không hợp lệ"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "Tên của bản đồ vec-tơ đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "không thể mở %s"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "Tên của (các) bản đồ raster đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "Tên của bản đồ raster đầu ra"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "Tên của bản đồ raster độ cao"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "Tên của bản đồ raster độ cao"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "Tên của bản đồ raster đầu ra"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "Tên của (các) bản đồ vec-tơ đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "Tên của (các) bản đồ vec-tơ đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "Không đủ không gian trong mảng vec-tơ"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "Tên của bản đồ raster 3d đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "Tên của bản đồ raster 3d đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "Tên của bản đồ raster 3d đầu ra"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "'Bọ': cố gắng cập nhật bản đồ không ở trong bộ bản đồ hiện tại."
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "Tên của bản đồ raster đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "Tên của bản đồ raster đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "Không thể đóng bản đồ đầu vào"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
 "temporal GIS framework"
 msgstr "Các điều kiện WHERE của câu lệnh SQL không có từ khóa 'where'"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "Đang nạp dữ liệu từ bảng thuộc tính..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "Đang xây dựng tôpô ...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6940,82 +7161,89 @@ msgstr ""
 "\n"
 "Mô tả:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, fuzzy, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr "'BỌ' trong các mô tả, tùy chọn '%s' trong <%s> không tồn tại"
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr "'BỌ' trong các mô tả, tùy chọn '%s' trong <%s> không tồn tại"
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 "Dùng cờ --quiet hoặc --verbose, không được dùng cả hai. Giả định dùng --"
 "verbose."
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 "Dùng cờ --quiet hoặc --verbose, không được dùng cả hai. Giả định dùng --"
 "quiet."
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+#, fuzzy
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+"Dùng cờ --quiet hoặc --verbose, không được dùng cả hai. Giả định dùng --"
+"quiet."
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "Xin lỗi <%s> không phải là tùy chọn hợp lệ\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "LỖI: "
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 msgid "Unable to determine program name"
 msgstr "Không thể xác định tên chương trình"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "Xin lỗi, <%c> không phải là cờ hợp lệ\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "Xin lỗi, <%s=> không rõ ràng\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "Xin lỗi, <%s> không phải là tham số hợp lệ\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s> trong bộ bản đồ <%s>"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7024,7 +7252,7 @@ msgstr ""
 "\n"
 "
LỖI: Cú pháp miền cho tham số <%s> không hợp lệ\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7033,14 +7261,14 @@ msgstr ""
 "\n"
 "
LỖI: giá trị <%s> nằm ngoài miền đối với tham số <%s>\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "LỖI: Giá trị cho tham số <%s> bị thiếu\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7049,7 +7277,7 @@ msgstr ""
 "\n"
 "Lỗi: giá trị <%s> nằm ngoài miền cho tham số <%s>\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7059,7 +7287,7 @@ msgstr ""
 "LỖI: Tham số yêu cầu <%s> không được thiết lập:\n"
 "    (%s).\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7068,37 +7296,37 @@ msgstr ""
 "\n"
 "
LỖI: tùy chọn <%s> phải được cung cấp ở dạng bội số của %d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "Xin lỗi <%s> không phải là tùy chọn hợp lệ\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "Dấu phân cách trường"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "Xin lỗi <%s> không phải là tùy chọn hợp lệ\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "Không thể tạo bảng <%s>"
@@ -8081,16 +8309,36 @@ msgstr "Các mô tả ellipsoid trong tập tin (a, rf, es hoặc b) không hợ
 msgid "No ellipsoid info given in file"
 msgstr "Không có thông tin ellipsoid trong tập tin được cung cấp"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "Thất bại trong việc khởi động đọc tập tin nén [%s trong %s]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "Thất bại trong việc khởi động đọc tập tin nén [%s trong %s]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "Hệ thống không được khởi chạy. Lập trình viên quên gọi G_gisinit()."
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8121,51 +8369,46 @@ msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "Lỗi khi đang ghi tập tin chỉ mục phạm trù <%s>"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "Không thể mở tập tin lịch sử của vector '%s'"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "không thể tìm thấy một tập tin null tạm %s"
+msgid "No null file for <%s>"
+msgstr "Không thể mở tập tin lịch sử của vector '%s'"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn: không thể mở tập tin %s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "lỗi khi đang ghi hàng null %d"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: bản đồ [%s] không được mở để ghi - yêu cầu bị bỏ qua"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: Mô tả tập tin không được mở - yêu cầu bị bỏ qua"
@@ -8257,22 +8500,22 @@ msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "Không thể đọc tập tin header cho bản đồ raster <%s@%s>."
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "không thể đổi thư mục đến %s"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "Không thể xoá tập tin '%s'"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "Không thể ghi tập tin f_format cho các bản đồ CELL"
 
@@ -8362,12 +8605,12 @@ msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr ""
 "Bản đồ raster <%s@%s>: định dạng trường trong tập tin header không hợp lệ"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
+msgid "Compression with %s is not supported"
+msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8376,17 +8619,17 @@ msgstr ""
 "Bản đồ raster <%s@%s> ở phép chiếu khác với vùng hiện hành. Tìm thấy bản đồ <"
 "%s@%s>, lẽ ra phải là <%s>."
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "Bản đồ raster <%s@%s> ở một múi (%d) khác với vùng hiện hành (%d)"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "Bản đồ raster <%s@%s>: số byte trên ô (%d) quá lớn"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
@@ -8394,77 +8637,77 @@ msgstr ""
 "bản đồ <%s@%s> là một liên kết GDAL nhưng GRASS được biên dịch không có hỗ "
 "trợ GDAL"
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "Không thể mở tập tin header của bản đồ raster <%s@%s>"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "Lỗi khi đang đọc bản đồ <%s@%s>, hàng %d"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "Không thể mở tập tin lịch sử của vector '%s'"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "không thể đổi thư mục đến %s"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "Bản đồ raster <%s> không ở trong bộ bản đồ hiện tại (%s)"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, c-format
 msgid "<%s> is an illegal file name"
 msgstr "<%s> là một tên tập tin không hợp lệ"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "G__open_raster_new(): không có tập tin tạm nào dùng được"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "Bản đồ raster <%s> không ở trong bộ bản đồ hiện tại (%s)"
+
+#: ../lib/raster/open.c:817
 #, fuzzy
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr "G_set_fp_type(): chỉ có thể được gọi với FCELL_TYPE hoặc DCELL_TYPE"
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ <%s>"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, c-format
 msgid "Unable to find '%s'"
 msgstr "Không thể tìm thấy '%s'"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "Kiểu không hợp lệ: trường '%s' trong tập tin '%s'"
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "Kiểu không hợp lệ: trường '%s' trong tập tin '%s'"
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "Bản đồ raster <%s> không phải là xdr: byte_order: %s"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 #, fuzzy
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
@@ -8506,24 +8749,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "Đang đọc bản đồ raster <%s@%s> yêu cầu cho hàng %d nằm ngoài vùng"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "Lỗi khi đang ghi tập tin chỉ mục phạm trù <%s>"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "Lỗi khi đang đọc bản đồ nén <%s@%s>, hàng %d"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "Lỗi khi đang đọc hàng null %d"
@@ -8762,33 +9021,28 @@ msgstr "không biết"
 msgid "Unsupported icon %d"
 msgstr "Kiểu đối tượng"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "Không thể khởi động trình điều khiển <%s>"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "Không thể khởi động trình điều khiển <%s>"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "Không thể mở tập tin %s"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8864,17 +9118,17 @@ msgstr ""
 msgid "Unable to write lockfile %s (%s)"
 msgstr "Không thể mở tập tin %s trong %s"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "CẢNH BÁO: "
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "Đang thiết lập các chi phí nốt..."
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8882,115 +9136,159 @@ msgstr ""
 "Cách dùng:\n"
 "
 "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 #, fuzzy
 msgid "and set as default"
 msgstr "để chấp nhận mặc định"
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
+#: ../lib/init/grass.py:350
 #, fuzzy
-msgid "initial location"
+msgid "initial GRASS Location"
 msgstr ""
 "\n"
 "phép chiếu không hợp lệ\n"
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
+msgstr ""
+
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "Không thể cấp phát hình ảnh tạm"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "Định dạng được yêu cầu không được biên dịch trong phiên bản này"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -9000,283 +9298,299 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "Xin lỗi <%s> không phải là tùy chọn hợp lệ\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:836
 #, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
+
+#: ../lib/init/grass.py:840
+#, python-format
+msgid ""
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 #, fuzzy
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr "Vui lòng báo cho các nhà phát triển GRASS về lỗi này.\n"
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist"
 msgstr "%s: Vùng %d không tồn tại"
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, fuzzy, python-format
 msgid "Path '%s' not accessible."
 msgstr "%s: Vùng %d không tồn tại"
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "Đang xây dựng biểu đồ..."
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - biến không được thiết lập"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "Đang thiết lập các chi phí nốt..."
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "Kết nối thất bại."
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "Không thể lấy dữ liệu từ bảng <%s>"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "Không thể thiết lập tiêu điểm"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 #, fuzzy
 msgid "Help is available with the command:"
 msgstr "Không có trợ giúp cho lệnh [%s]\n"
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "không có"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 #, fuzzy
 msgid "Cleaning up temporary files..."
 msgstr "Không thể mở tập tin tạm"
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "Không thể khởi động trình điều khiển <%s>"
@@ -9549,10 +9863,48 @@ msgstr "Hết bộ nhớ "
 #~ msgid "Out of memmory"
 #~ msgstr "Hết bộ nhớ "
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "Không thể mở tập tin định nghĩa csdl vec-tơ: '%s'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "Không thể mở tập tin header của bản đồ vec-tơ <%s>"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "không thể tìm thấy một tập tin null tạm %s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn: không thể mở tập tin %s"
+
+#, fuzzy
+#~ msgid "ERROR: <%s> is not a valid GRASS location"
+#~ msgstr "Xin lỗi <%s> không phải là tùy chọn hợp lệ\n"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "LỖI: tùy chọn <%s>: <%s> đã có.\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "không thể đổi thư mục đến %s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "Không thể mở tập tin %s"
+
+#, fuzzy
 #~ msgid "Hit RETURN to continue"
 #~ msgstr "bấm RETURN để tiếp tục -->"
 
@@ -9560,6 +9912,21 @@ msgstr "Hết bộ nhớ "
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "Bản đồ vec-tơ <%s> không mở được ở cấp >=2"
 
+#~ msgid "Background color"
+#~ msgstr "Màu nền"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "Tên của bản đồ raster đầu vào"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "không thể đổi thư mục đến %s"
+
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "Không tìm thấy các thuộc tính cho phạm trù %d"
 
@@ -9584,22 +9951,3 @@ msgstr "Hết bộ nhớ "
 
 #~ msgid "G_oldsite_new_struct: invalid # dims or fields"
 #~ msgstr "G_oldsite_new_struct: # kích thước hoặc trường không hợp lệ"
-
-#~ msgid "Background color"
-#~ msgstr "Màu nền"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "Kiểu đối tượng OGR %d không được hỗ trợ"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "không thể đổi thư mục đến %s"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "không thể đổi thư mục đến %s"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "Tên của bản đồ raster đầu vào"
diff --git a/locale/po/grasslibs_zh.po b/locale/po/grasslibs_zh.po
index 128c858..0e410d9 100644
--- a/locale/po/grasslibs_zh.po
+++ b/locale/po/grasslibs_zh.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasslibs_zh\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2014-04-16 12:27+0100\n"
 "Last-Translator: YusiJi <jiyusi0001 at gmail.com>\n"
 "Language-Team: Simplified Chinese <translations at grass.itc.it>\n"
@@ -40,10 +40,12 @@ msgstr "无法打开文件 %s 在 %s 中"
 #: ../lib/db/dbmi_client/db.c:46 ../lib/vector/neta/timetables.c:133
 #: ../lib/vector/neta/utils.c:119 ../lib/vector/Vlib/ascii.c:410
 #: ../lib/vector/Vlib/array.c:282 ../lib/vector/Vlib/write_pg.c:2907
-#: ../lib/vector/Vlib/cats.c:597 ../lib/vector/Vlib/net.c:184
-#: ../lib/vector/Vlib/net.c:361 ../lib/vector/Vlib/write_ogr.c:197
-#: ../lib/vector/Vlib/map.c:305 ../lib/ogsf/gp3.c:208 ../lib/ogsf/gv3.c:350
-#: ../lib/rst/interp_float/vinput2d.c:109
+#: ../lib/vector/Vlib/close_nat.c:160 ../lib/vector/Vlib/cats.c:597
+#: ../lib/vector/Vlib/write_ogr.c:197 ../lib/vector/Vlib/map.c:341
+#: ../lib/vector/Vlib/net_build.c:165 ../lib/vector/Vlib/net_build.c:211
+#: ../lib/vector/Vlib/net_build.c:496 ../lib/vector/Vlib/net_build.c:797
+#: ../lib/vector/Vlib/net_build.c:976 ../lib/ogsf/gp3.c:208
+#: ../lib/ogsf/gv3.c:350 ../lib/rst/interp_float/vinput2d.c:109
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "无法打开数据库 %s"
@@ -53,45 +55,45 @@ msgstr "无法打开数据库 %s"
 msgid "Unable to get list tables in database <%s>"
 msgstr "无法打开椭球表文件:%s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:167
+#: ../lib/db/dbmi_client/copy_tab.c:189
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database and will be overwritten"
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/db/dbmi_client/copy_tab.c:172
+#: ../lib/db/dbmi_client/copy_tab.c:194
 #, fuzzy, c-format
 msgid "Table <%s> already exists in database <%s>"
 msgstr "无法打开椭球表文件:%s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:218 ../lib/db/dbmi_client/copy_tab.c:295
+#: ../lib/db/dbmi_client/copy_tab.c:242 ../lib/db/dbmi_client/copy_tab.c:319
 #: ../lib/db/dbmi_client/table.c:110 ../lib/vector/Vlib/write_ogr.c:210
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/db/dbmi_client/copy_tab.c:250
+#: ../lib/db/dbmi_client/copy_tab.c:274
 #, fuzzy, c-format
 msgid "Column <%s> is not integer"
 msgstr "无法打开数据库表 <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:267 ../lib/rst/interp_float/vinput2d.c:115
+#: ../lib/db/dbmi_client/copy_tab.c:291 ../lib/rst/interp_float/vinput2d.c:115
 #: ../lib/rst/interp_float/vinput2d.c:129
 #, fuzzy, c-format
 msgid "Column <%s> not found"
 msgstr "无法打开数据库表 <%s>"
 
-#: ../lib/db/dbmi_client/copy_tab.c:270
+#: ../lib/db/dbmi_client/copy_tab.c:294
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/db/dbmi_client/copy_tab.c:314 ../lib/vector/Vlib/write_pg.c:2009
+#: ../lib/db/dbmi_client/copy_tab.c:338 ../lib/vector/Vlib/write_pg.c:2009
 #: ../lib/vector/Vlib/write_ogr.c:585
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/db/dbmi_client/copy_tab.c:370
+#: ../lib/db/dbmi_client/copy_tab.c:394
 #, fuzzy, c-format
 msgid "Unknown column type (column <%s>)"
 msgstr "无法读取平滑字段的类型"
@@ -703,8 +705,8 @@ msgstr "不支持的 OGR 要素类型 %d"
 msgid "Format definition is not correct: %s"
 msgstr ""
 
-#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:64
-#: ../lib/vector/neta/flow.c:179 ../lib/vector/neta/spanningtree.c:99
+#: ../lib/vector/diglib/struct_alloc.c:491 ../lib/vector/neta/flow.c:66
+#: ../lib/vector/neta/flow.c:190 ../lib/vector/neta/spanningtree.c:101
 #: ../lib/vector/neta/timetables.c:69 ../lib/vector/neta/timetables.c:168
 #: ../lib/vector/neta/timetables.c:178 ../lib/vector/neta/timetables.c:191
 #: ../lib/vector/neta/timetables.c:278 ../lib/vector/neta/timetables.c:413
@@ -714,8 +716,8 @@ msgstr ""
 #: ../lib/vector/neta/centrality.c:63 ../lib/vector/neta/centrality.c:145
 #: ../lib/vector/neta/path.c:262 ../lib/vector/neta/bridge.c:58
 #: ../lib/vector/Vlib/line.c:50 ../lib/vector/Vlib/line.c:154
-#: ../lib/segment/open.c:98 ../lib/rowio/setup.c:61 ../lib/rowio/setup.c:67
-#: ../lib/rst/interp_float/segmen2d.c:199
+#: ../lib/vector/Vlib/map.c:48 ../lib/segment/open.c:98 ../lib/rowio/setup.c:61
+#: ../lib/rowio/setup.c:67 ../lib/rst/interp_float/segmen2d.c:199
 #: ../lib/rst/interp_float/segmen2d.c:205
 #: ../lib/rst/interp_float/segmen2d.c:211
 #: ../lib/rst/interp_float/segmen2d.c:221
@@ -818,12 +820,12 @@ msgid ""
 "rebuild topology using v.build or v.build.all module."
 msgstr ""
 
-#: ../lib/vector/neta/flow.c:310 ../lib/vector/Vlib/graph.c:105
-#: ../lib/vector/Vlib/net.c:447
+#: ../lib/vector/neta/flow.c:331 ../lib/vector/Vlib/graph.c:105
+#: ../lib/vector/Vlib/net_build.c:661 ../lib/vector/Vlib/net_build.c:1067
 msgid "GngFlatten error"
 msgstr ""
 
-#: ../lib/vector/neta/spanningtree.c:104
+#: ../lib/vector/neta/spanningtree.c:106
 msgid "Computing minimum spanning tree..."
 msgstr ""
 
@@ -871,17 +873,17 @@ msgstr "双精度属性索引越界"
 msgid "Category index out of range"
 msgstr "双精度属性索引越界"
 
-#: ../lib/vector/Vlib/cindex.c:489
+#: ../lib/vector/Vlib/cindex.c:488
 #, fuzzy, c-format
 msgid "Unable to create category index file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/cindex.c:498
+#: ../lib/vector/Vlib/cindex.c:497
 #, fuzzy
 msgid "Error writing out category index file"
 msgstr "写空间索引文件时出错。\n"
 
-#: ../lib/vector/Vlib/cindex.c:542 ../lib/vector/Vlib/open.c:382
+#: ../lib/vector/Vlib/cindex.c:539 ../lib/vector/Vlib/open.c:393
 #, fuzzy, c-format
 msgid "Unable to open category index file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
@@ -949,8 +951,8 @@ msgstr "错误边界的数量      :   %d\n"
 msgid "Number of redundant holes: %d"
 msgstr "边界的数量          :   %d\n"
 
-#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:356
-#: ../lib/vector/Vlib/open.c:860
+#: ../lib/vector/Vlib/build.c:865 ../lib/vector/Vlib/open.c:367
+#: ../lib/vector/Vlib/open.c:871
 #, fuzzy, c-format
 msgid "Unable to open spatial index file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
@@ -1050,38 +1052,38 @@ msgstr "区域的数量          :   -\n"
 msgid "Number of isles: -"
 msgstr "岛的数量            :   -\n"
 
-#: ../lib/vector/Vlib/build.c:1014
+#: ../lib/vector/Vlib/build.c:1013
 #, fuzzy, c-format
 msgid "Unable to create topo file for vector map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/vector/Vlib/build.c:1022
+#: ../lib/vector/Vlib/build.c:1021
 #, fuzzy
 msgid "Error writing out topo file"
 msgstr "写拓扑文件时出错。\n"
 
-#: ../lib/vector/Vlib/build.c:1211
+#: ../lib/vector/Vlib/build.c:1210
 #, fuzzy
 msgid ""
 "Unable to build spatial index from topology, vector map is not opened at "
 "topology level 2"
 msgstr "无法删除线,地图'%s'没有在级别2上打开"
 
-#: ../lib/vector/Vlib/build.c:1234
+#: ../lib/vector/Vlib/build.c:1233
 #, c-format
 msgid "%s is no longer supported"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1257
+#: ../lib/vector/Vlib/build.c:1256
 msgid "Spatial index not available, can not be saved"
 msgstr ""
 
-#: ../lib/vector/Vlib/build.c:1270
+#: ../lib/vector/Vlib/build.c:1268
 #, fuzzy, c-format
 msgid "Unable to create spatial index file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/build.c:1279
+#: ../lib/vector/Vlib/build.c:1277
 #, fuzzy
 msgid "Error writing out spatial index file"
 msgstr "写空间索引文件时出错。\n"
@@ -1148,9 +1150,11 @@ msgstr "未知矢量类型"
 
 #: ../lib/vector/Vlib/ascii.c:398 ../lib/vector/Vlib/array.c:276
 #: ../lib/vector/Vlib/copy.c:594 ../lib/vector/Vlib/copy.c:704
-#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/net.c:178
-#: ../lib/vector/Vlib/net.c:356 ../lib/vector/Vlib/map.c:264
-#: ../lib/vector/Vlib/map.c:400 ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
+#: ../lib/vector/Vlib/cats.c:589 ../lib/vector/Vlib/map.c:300
+#: ../lib/vector/Vlib/map.c:436 ../lib/vector/Vlib/net_build.c:159
+#: ../lib/vector/Vlib/net_build.c:206 ../lib/vector/Vlib/net_build.c:490
+#: ../lib/vector/Vlib/net_build.c:791 ../lib/vector/Vlib/net_build.c:971
+#: ../lib/ogsf/gp3.c:202 ../lib/ogsf/gv3.c:344
 #: ../lib/rst/interp_float/vinput2d.c:100
 #, c-format
 msgid "Database connection not defined for layer %d"
@@ -1199,8 +1203,10 @@ msgstr "无法删除想线"
 msgid "Unable to fetch data from table"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net.c:189
-#: ../lib/vector/Vlib/net.c:206 ../lib/vector/Vlib/net.c:366
+#: ../lib/vector/Vlib/ascii.c:756 ../lib/vector/Vlib/net_build.c:216
+#: ../lib/vector/Vlib/net_build.c:501 ../lib/vector/Vlib/net_build.c:519
+#: ../lib/vector/Vlib/net_build.c:802 ../lib/vector/Vlib/net_build.c:820
+#: ../lib/vector/Vlib/net_build.c:981
 #, fuzzy, c-format
 msgid "Column <%s> not found in table <%s>"
 msgstr "无法打开数据库表 <%s>"
@@ -1241,24 +1247,24 @@ msgstr ""
 msgid "Unable to add network arc"
 msgstr "无法为区域 %d 计算质心"
 
-#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net.c:536
+#: ../lib/vector/Vlib/graph.c:226 ../lib/vector/Vlib/net_analyze.c:198
 #, c-format
 msgid "dglShortestPath error: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:57
+#: ../lib/vector/Vlib/open_nat.c:56
 #, fuzzy, c-format
 msgid "Unable to open coor file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/open_nat.c:154
+#: ../lib/vector/Vlib/open_nat.c:152
 #, c-format
 msgid ""
 "Coor file of vector map <%s@%s> is larger than it should be (%ld bytes "
 "excess)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_nat.c:158
+#: ../lib/vector/Vlib/open_nat.c:156
 #, c-format
 msgid ""
 "Coor file of vector <%s@%s> is shorter than it should be (%ld bytes missing)."
@@ -1279,7 +1285,7 @@ msgstr "无法为区域 %d 计算质心"
 #: ../lib/vector/Vlib/write_pg.c:157 ../lib/vector/Vlib/write_pg.c:196
 #: ../lib/vector/Vlib/write_pg.c:294 ../lib/vector/Vlib/write_pg.c:354
 #: ../lib/vector/Vlib/write_pg.c:476 ../lib/vector/Vlib/close_pg.c:99
-#: ../lib/vector/Vlib/close_pg.c:147 ../lib/vector/Vlib/close.c:275
+#: ../lib/vector/Vlib/close_pg.c:146 ../lib/vector/Vlib/close.c:275
 #: ../lib/vector/Vlib/copy.c:404 ../lib/vector/Vlib/simple_features.c:336
 #: ../lib/vector/Vlib/build_pg.c:117 ../lib/vector/Vlib/build_sfa.c:718
 #: ../lib/vector/Vlib/open_pg.c:143 ../lib/vector/Vlib/open_pg.c:200
@@ -1306,12 +1312,12 @@ msgstr "无法读取[ %s 在 %s 中]的直方图"
 #: ../lib/vector/Vlib/close_ogr.c:77 ../lib/vector/Vlib/close_ogr.c:111
 #: ../lib/vector/Vlib/write_sfa.c:298 ../lib/vector/Vlib/close.c:284
 #: ../lib/vector/Vlib/read_ogr.c:56 ../lib/vector/Vlib/read_ogr.c:157
-#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:94
-#: ../lib/vector/Vlib/build_ogr.c:169 ../lib/vector/Vlib/open_ogr.c:121
+#: ../lib/vector/Vlib/read_ogr.c:242 ../lib/vector/Vlib/build_ogr.c:96
+#: ../lib/vector/Vlib/build_ogr.c:171 ../lib/vector/Vlib/open_ogr.c:121
 #: ../lib/vector/Vlib/open_ogr.c:154 ../lib/vector/Vlib/open_ogr.c:231
 #: ../lib/vector/Vlib/simple_features.c:310 ../lib/vector/Vlib/build_sfa.c:711
 #: ../lib/vector/Vlib/rewind_ogr.c:47 ../lib/vector/Vlib/rewind_ogr.c:71
-#: ../lib/vector/Vlib/field.c:660 ../lib/vector/Vlib/write_ogr.c:69
+#: ../lib/vector/Vlib/field.c:675 ../lib/vector/Vlib/write_ogr.c:69
 #: ../lib/vector/Vlib/write_ogr.c:105 ../lib/vector/Vlib/write_ogr.c:145
 #: ../lib/vector/Vlib/header_finfo.c:41 ../lib/vector/Vlib/header_finfo.c:80
 #: ../lib/vector/Vlib/header_finfo.c:113 ../lib/vector/Vlib/header_finfo.c:153
@@ -1319,7 +1325,7 @@ msgstr "无法读取[ %s 在 %s 中]的直方图"
 msgid "GRASS is not compiled with OGR support"
 msgstr ""
 
-#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:140
+#: ../lib/vector/Vlib/close_ogr.c:104 ../lib/vector/Vlib/close_pg.c:139
 #, fuzzy, c-format
 msgid "Unable to save feature index file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
@@ -1411,7 +1417,7 @@ msgstr "无法打开文件 %s 在 %s 中"
 msgid "No connection defined"
 msgstr "连接失败。\n"
 
-#: ../lib/vector/Vlib/write_pg.c:326
+#: ../lib/vector/Vlib/write_pg.c:326 ../lib/vector/Vlib/write_ogr.c:134
 #, fuzzy, c-format
 msgid "Invalid offset (%ld)"
 msgstr "无法将目录改变到%s"
@@ -1427,7 +1433,7 @@ msgid "Unable to delete feature (%s) %d"
 msgstr "无法打开文件 %s 在 %s 中"
 
 #: ../lib/vector/Vlib/write_pg.c:612 ../lib/vector/Vlib/write_pg.c:880
-#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1351
+#: ../lib/vector/Vlib/build_pg.c:411 ../lib/vector/Vlib/open.c:1355
 #, fuzzy
 msgid "Unable to open PG file"
 msgstr "无法打开文件 %s 在 %s 中"
@@ -1649,7 +1655,7 @@ msgstr ""
 msgid "only native format supported"
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:259
+#: ../lib/vector/Vlib/geos.c:65 ../lib/vector/Vlib/geos.c:258
 #, fuzzy
 msgid "Attempt to read dead line"
 msgstr "无法打开临时文件"
@@ -1664,17 +1670,17 @@ msgstr ""
 msgid "Vect_read_area_geos(): unable to read isle id %d of area id %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/geos.c:206
+#: ../lib/vector/Vlib/geos.c:205
 #, fuzzy, c-format
 msgid "Unable to read line offset %ld"
 msgstr "无法打开临时文件"
 
-#: ../lib/vector/Vlib/geos.c:413
+#: ../lib/vector/Vlib/geos.c:412
 #, fuzzy, c-format
 msgid "Attempt to read points of nonexistent area id %d"
 msgstr "无法为区域 %d 计算质心"
 
-#: ../lib/vector/Vlib/geos.c:473
+#: ../lib/vector/Vlib/geos.c:472
 #, fuzzy, c-format
 msgid "Unable to read feature id %d"
 msgstr "无法打开文件 %s 在 %s 中"
@@ -1760,26 +1766,43 @@ msgstr "没有 ID 的 OGR 要素被忽略。 "
 msgid "OGR feature type '%s' not supported"
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/vector/Vlib/build_ogr.c:69
+#: ../lib/vector/Vlib/net_analyze.c:288 ../lib/vector/Vlib/net_analyze.c:329
+#, c-format
+msgid "Unable to find point with defined unique category for node <%d>."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:292 ../lib/vector/Vlib/net_analyze.c:333
+#, c-format
+msgid ""
+"There exists more than one point on node <%d> with unique category in field  "
+"<%d>.\n"
+"The unique category layer may not be valid."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_analyze.c:449
+msgid "Wrong line direction in Vect_net_get_line_cost()"
+msgstr ""
+
+#: ../lib/vector/Vlib/build_ogr.c:71
 msgid "Empty OGR layer, nothing to build"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:80 ../lib/vector/Vlib/build_pg.c:93
+#: ../lib/vector/Vlib/build_ogr.c:82 ../lib/vector/Vlib/build_pg.c:93
 #, c-format
 msgid "Feature table <%s> has no primary key defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:82
+#: ../lib/vector/Vlib/build_ogr.c:84
 msgid ""
 "Random read is not supported by OGR for this layer. Unable to build topology."
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:88 ../lib/vector/Vlib/build_pg.c:101
+#: ../lib/vector/Vlib/build_ogr.c:90 ../lib/vector/Vlib/build_pg.c:101
 #, c-format
 msgid "Using external data format '%s' (feature type '%s')"
 msgstr ""
 
-#: ../lib/vector/Vlib/build_ogr.c:132
+#: ../lib/vector/Vlib/build_ogr.c:134
 #, fuzzy, c-format
 msgid "Unable to open fidx file for write <%s>"
 msgstr "无法打开拓扑文件进行写操作: %s\n"
@@ -1884,7 +1907,8 @@ msgstr "无法打开栅格图[%s在%s中]"
 msgid "Unable to add database link for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/map.c:281
+#: ../lib/vector/Vlib/copy.c:738 ../lib/vector/Vlib/close_nat.c:102
+#: ../lib/vector/Vlib/map.c:317
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
@@ -1917,6 +1941,21 @@ msgstr ""
 msgid "Overlay: area x area types not supported by AND operator"
 msgstr ""
 
+#: ../lib/vector/Vlib/close_nat.c:74
+#, fuzzy, c-format
+msgid "Unable to create '%s': %s"
+msgstr "无法打开文件 %s 在 %s 中"
+
+#: ../lib/vector/Vlib/close_nat.c:81
+#, fuzzy, c-format
+msgid "Unable to copy '%s': %s"
+msgstr "无法打开文件 %s 在 %s 中"
+
+#: ../lib/vector/Vlib/close_nat.c:167
+#, fuzzy, c-format
+msgid "Unable to drop table <%s>"
+msgstr "无法打开文件 %s 在 %s 中"
+
 #: ../lib/vector/Vlib/open_ogr.c:60
 #, fuzzy
 msgid "OGR datasource not defined"
@@ -1926,7 +1965,7 @@ msgstr "没有 ID 的 OGR 要素被忽略。 "
 msgid "OGR layer not defined"
 msgstr ""
 
-#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:675
+#: ../lib/vector/Vlib/open_ogr.c:77 ../lib/vector/Vlib/field.c:690
 #, fuzzy, c-format
 msgid "Unable to open OGR data source '%s'"
 msgstr "无法将目录改变到%s"
@@ -2209,7 +2248,7 @@ msgid "Vector map <%s> not found in current mapset"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
 #: ../lib/vector/Vlib/open.c:235 ../lib/vector/Vlib/legal_vname.c:141
-#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:227
+#: ../lib/vector/Vlib/legal_vname.c:144 ../lib/vector/Vlib/map.c:263
 #: ../lib/ogsf/gp3.c:56 ../lib/ogsf/gp3.c:191 ../lib/ogsf/gv3.c:60
 #: ../lib/ogsf/gv3.c:333 ../lib/manage/do_remove.c:57
 #: ../lib/manage/do_rename.c:54
@@ -2222,129 +2261,129 @@ msgstr "输入矢量'%s'未找到"
 msgid "Temporary vector maps can be accessed only in the current mapset"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/vector/Vlib/open.c:266
+#: ../lib/vector/Vlib/open.c:277
 #, fuzzy
 msgid ""
 "Vector map which is not in the current mapset cannot be opened for update"
 msgstr "不在当前地图集中的地图不能被打开并更新。"
 
-#: ../lib/vector/Vlib/open.c:290 ../lib/vector/Vlib/open.c:426
-#: ../lib/vector/Vlib/map.c:156 ../lib/vector/Vlib/map.c:166
-#: ../lib/vector/Vlib/map.c:238
-#: ../lib/python/temporal/c_libraries_interface.py:589 ../lib/ogsf/gp3.c:62
+#: ../lib/vector/Vlib/open.c:301 ../lib/vector/Vlib/open.c:437
+#: ../lib/vector/Vlib/map.c:192 ../lib/vector/Vlib/map.c:202
+#: ../lib/vector/Vlib/map.c:274
+#: ../lib/python/temporal/c_libraries_interface.py:748 ../lib/ogsf/gp3.c:62
 #: ../lib/ogsf/gp3.c:196 ../lib/ogsf/gv3.c:66 ../lib/ogsf/gv3.c:338
 #, fuzzy, c-format, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/vector/Vlib/open.c:300
+#: ../lib/vector/Vlib/open.c:311
 #, fuzzy, c-format
 msgid "Unable to read header file of vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/open.c:341
+#: ../lib/vector/Vlib/open.c:352
 #, fuzzy, c-format
 msgid "Unable to open topology file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/open.c:408
+#: ../lib/vector/Vlib/open.c:419
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> on level %d. Try to rebuild vector topology "
 "with v.build."
 msgstr "无法打开旧的矢量%s在级别%d上"
 
-#: ../lib/vector/Vlib/open.c:434
+#: ../lib/vector/Vlib/open.c:445
 #, fuzzy, c-format
 msgid "Building topology for OGR layer <%s> from datasource '%s'..."
 msgstr "请为矢量'%s@%s'重建拓扑"
 
-#: ../lib/vector/Vlib/open.c:442
+#: ../lib/vector/Vlib/open.c:453
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> on level %d"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/vector/Vlib/open.c:496
+#: ../lib/vector/Vlib/open.c:507
 #, fuzzy, c-format
 msgid "Unable to open history file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/open.c:768
+#: ../lib/vector/Vlib/open.c:777
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not in the current mapset (%s)"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/vector/Vlib/open.c:777
+#: ../lib/vector/Vlib/open.c:786
 #, fuzzy, c-format
 msgid "Unable to create vector map: <%s> is not SQL compliant"
 msgstr "地图名称不适应SQL"
 
-#: ../lib/vector/Vlib/open.c:803 ../lib/vector/Vlib/open.c:814
-#: ../lib/vector/Vlib/map.c:123
+#: ../lib/vector/Vlib/open.c:813 ../lib/vector/Vlib/open.c:826
+#: ../lib/vector/Vlib/map.c:159
 #, fuzzy, c-format
 msgid "Unable to delete vector map <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/vector/Vlib/open.c:809 ../lib/vector/Vlib/map.c:119
-#: ../lib/vector/Vlib/map.c:213
+#: ../lib/vector/Vlib/open.c:821 ../lib/vector/Vlib/map.c:155
+#: ../lib/vector/Vlib/map.c:249
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists and will be overwritten"
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/vector/Vlib/open.c:835
+#: ../lib/vector/Vlib/open.c:846
 #, fuzzy, c-format
 msgid "Unable to open history file of vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/open.c:876
+#: ../lib/vector/Vlib/open.c:887
 #, c-format
 msgid "Using OGR/%s format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:880
+#: ../lib/vector/Vlib/open.c:891
 msgid "Using PostGIS Topology format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:882
+#: ../lib/vector/Vlib/open.c:893
 msgid "Using PostGIS format"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:885
+#: ../lib/vector/Vlib/open.c:896
 #, fuzzy
 msgid "Using native format"
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/vector/Vlib/open.c:976
+#: ../lib/vector/Vlib/open.c:985
 #, fuzzy, c-format
 msgid "Unable to stat file <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/open.c:1040
+#: ../lib/vector/Vlib/open.c:1049
 #, c-format
 msgid "unknown %d (update Vect_maptype_info)"
 msgstr ""
 
-#: ../lib/vector/Vlib/open.c:1132
+#: ../lib/vector/Vlib/open.c:1138
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in topology file"
 msgstr "'coor'文件的大小与拓扑文件中保存的值不同。"
 
-#: ../lib/vector/Vlib/open.c:1143 ../lib/vector/Vlib/open.c:1244
+#: ../lib/vector/Vlib/open.c:1149 ../lib/vector/Vlib/open.c:1248
 #, fuzzy, c-format
 msgid "Please rebuild topology for vector map <%s@%s>"
 msgstr "请为矢量'%s@%s'重建拓扑"
 
-#: ../lib/vector/Vlib/open.c:1233
+#: ../lib/vector/Vlib/open.c:1237
 #, fuzzy
 msgid "Size of 'coor' file differs from value saved in sidx file"
 msgstr "'coor'文件的大小与拓扑文件中保存的值不同。"
 
-#: ../lib/vector/Vlib/open.c:1313
+#: ../lib/vector/Vlib/open.c:1317
 #, fuzzy
 msgid "Unable to open OGR file"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/open.c:1339
+#: ../lib/vector/Vlib/open.c:1343
 msgid "OGR output also detected, using OGR"
 msgstr ""
 
@@ -2600,29 +2639,29 @@ msgstr ""
 msgid "Inconsistency in topology: number of centroids %d (should be %d)"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:213
+#: ../lib/vector/Vlib/snap.c:223 ../lib/vector/Vlib/snap.c:582
 msgid "Snap vertices Pass 1: select points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:267
+#: ../lib/vector/Vlib/snap.c:271 ../lib/vector/Vlib/snap.c:636
 msgid "Snap vertices Pass 2: assign anchor vertices"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:336
+#: ../lib/vector/Vlib/snap.c:340 ../lib/vector/Vlib/snap.c:705
 msgid "Snap vertices Pass 3: snap to assigned points"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:518
+#: ../lib/vector/Vlib/snap.c:525 ../lib/vector/Vlib/snap.c:887
 #, c-format
 msgid "Snapped vertices: %d"
 msgstr ""
 
-#: ../lib/vector/Vlib/snap.c:519
+#: ../lib/vector/Vlib/snap.c:526 ../lib/vector/Vlib/snap.c:888
 #, fuzzy, c-format
 msgid "New vertices: %d"
 msgstr "允许覆盖"
 
-#: ../lib/vector/Vlib/snap.c:546
+#: ../lib/vector/Vlib/snap.c:915
 #, fuzzy
 msgid "Reading features..."
 msgstr "建立拓扑...\n"
@@ -2652,77 +2691,6 @@ msgstr ""
 msgid "Attempt to access dead area %d"
 msgstr "无法为区域 %d 计算质心"
 
-#: ../lib/vector/Vlib/net.c:117
-#, fuzzy
-msgid "Building graph..."
-msgstr "建立拓扑...\n"
-
-#: ../lib/vector/Vlib/net.c:162
-#, fuzzy
-msgid "Unable to build network graph"
-msgstr "无法找到矢量%s"
-
-#: ../lib/vector/Vlib/net.c:168
-msgid "Forward costs column not specified"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:175
-msgid "Arc field < 1"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:195 ../lib/vector/Vlib/net.c:212
-#: ../lib/vector/Vlib/net.c:372
-#, fuzzy, c-format
-msgid "Data type of column <%s> not supported (must be numeric)"
-msgstr "z 值字段的类型不支持 (必须为整型或双精度)"
-
-#: ../lib/vector/Vlib/net.c:225
-#, fuzzy
-msgid "Registering arcs..."
-msgstr "注册线: "
-
-#: ../lib/vector/Vlib/net.c:254
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, forward/both direction(s)) not found "
-"(forward/both direction(s) of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:273
-#, c-format
-msgid ""
-"Database record for line %d (cat = %d, backword direction) not "
-"found(direction of line skipped)"
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:322
-#, fuzzy
-msgid "Cannot add network arc"
-msgstr "无法为区域 %d 计算质心"
-
-#: ../lib/vector/Vlib/net.c:352
-msgid "Setting node costs..."
-msgstr ""
-
-#: ../lib/vector/Vlib/net.c:415
-#, fuzzy, c-format
-msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
-msgstr "类型为 %d 的记录未找到"
-
-#: ../lib/vector/Vlib/net.c:444
-#, fuzzy
-msgid "Flattening the graph..."
-msgstr "建立拓扑...\n"
-
-#: ../lib/vector/Vlib/net.c:453
-#, fuzzy
-msgid "Graph was built"
-msgstr "拓扑建立完成。\n"
-
-#: ../lib/vector/Vlib/net.c:636
-msgid "Wrong line direction in Vect_net_get_line_cost()"
-msgstr ""
-
 #: ../lib/vector/Vlib/buffer2.c:361
 #, fuzzy
 msgid "Line is not looped"
@@ -2825,14 +2793,21 @@ msgstr ""
 msgid "Corrupted data"
 msgstr ""
 
-#: ../lib/vector/Vlib/read_pg.c:1510 ../lib/vector/Vlib/read_pg.c:1541
+#: ../lib/vector/Vlib/read_pg.c:1515
+#, fuzzy, c-format
+msgid ""
+"Execution failed: %s (...)\n"
+"Reason: %s"
+msgstr "连接失败。\n"
+
+#: ../lib/vector/Vlib/read_pg.c:1546
 #, fuzzy, c-format
 msgid ""
 "Execution failed: %s\n"
 "Reason: %s"
 msgstr "连接失败。\n"
 
-#: ../lib/vector/Vlib/read_pg.c:1670
+#: ../lib/vector/Vlib/read_pg.c:1675
 #, fuzzy, c-format
 msgid ""
 "Unable to read features. Reason:\n"
@@ -2898,62 +2873,57 @@ msgstr "默认驱动未设置"
 msgid "Default database is not set"
 msgstr "默认数据库未设置"
 
-#: ../lib/vector/Vlib/field.c:412
+#: ../lib/vector/Vlib/field.c:428
 #, c-format
 msgid "Requested dblink %d, maximum link number %d"
 msgstr "请求的dblink %d,最大链接数%d"
 
-#: ../lib/vector/Vlib/field.c:599 ../lib/vector/Vlib/field.c:607
+#: ../lib/vector/Vlib/field.c:614 ../lib/vector/Vlib/field.c:622
 #, fuzzy, c-format
 msgid "Error in rule on row %d in <%s>"
 msgstr "错误在第%d行%s文件中"
 
-#: ../lib/vector/Vlib/field.c:692
+#: ../lib/vector/Vlib/field.c:707
 #, fuzzy, c-format
 msgid "Unable to open OGR layer <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/field.c:719
+#: ../lib/vector/Vlib/field.c:734
 #, fuzzy
 msgid "Unable to open OGR DBMI driver"
 msgstr "无法打开OGR DBMI驱动。"
 
-#: ../lib/vector/Vlib/field.c:758
+#: ../lib/vector/Vlib/field.c:773
 msgid ""
 "All FID tests failed. Neither 'FID' nor 'ogc_fid' nor 'ogr_fid' nor 'gid' "
 "available in OGR DB table"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:825
+#: ../lib/vector/Vlib/field.c:840
 #, c-format
 msgid ""
 "Feature table <%s> has no primary key defined. Unable to define DB links."
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:845
+#: ../lib/vector/Vlib/field.c:860
 msgid "GRASS not compiled with PostgreSQL support"
 msgstr ""
 
-#: ../lib/vector/Vlib/field.c:877
+#: ../lib/vector/Vlib/field.c:892
 #, fuzzy
 msgid "Unknown vector map format"
 msgstr "未知区域"
 
-#: ../lib/vector/Vlib/field.c:911
+#: ../lib/vector/Vlib/field.c:925
 #, fuzzy, c-format
 msgid "Unable to create database definition file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/field.c:1006
+#: ../lib/vector/Vlib/field.c:1020
 #, fuzzy
 msgid "Bug: attempt to update map which is not in current mapset"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/vector/Vlib/write_ogr.c:134
-#, fuzzy, c-format
-msgid "Invalid offset (%d)"
-msgstr "无法将目录改变到%s"
-
 #: ../lib/vector/Vlib/write_ogr.c:239
 #, fuzzy, c-format
 msgid "Creating field <%s> failed"
@@ -3103,98 +3073,98 @@ msgstr ""
 msgid "Unable to delete item %d from spatial index"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/header.c:87
+#: ../lib/vector/Vlib/header.c:86
 #, fuzzy, c-format
 msgid "Unable to create header file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/header.c:131
+#: ../lib/vector/Vlib/header.c:129
 #, fuzzy, c-format
 msgid "Unable to open header file of vector <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/header.c:139
+#: ../lib/vector/Vlib/header.c:137
 #, c-format
 msgid "Corrupted row in head: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/header.c:177
+#: ../lib/vector/Vlib/header.c:175
 #, fuzzy, c-format
 msgid "Unknown keyword '%s' in vector head"
 msgstr "未知矢量类型"
 
-#: ../lib/vector/Vlib/header.c:554 ../lib/gis/proj3.c:110
+#: ../lib/vector/Vlib/header.c:552 ../lib/gis/proj3.c:110
 msgid "Unknown projection"
 msgstr "未知的投影"
 
-#: ../lib/vector/Vlib/map.c:103 ../lib/vector/Vlib/map.c:209
+#: ../lib/vector/Vlib/map.c:139 ../lib/vector/Vlib/map.c:245
 #, fuzzy
 msgid "Vector map name is not SQL compliant"
 msgstr "地图名称不适应SQL"
 
-#: ../lib/vector/Vlib/map.c:107
+#: ../lib/vector/Vlib/map.c:143
 #, fuzzy, c-format
 msgid "Unable to find vector map <%s> in <%s>"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/vector/Vlib/map.c:143 ../lib/vector/Vlib/map.c:231
+#: ../lib/vector/Vlib/map.c:179 ../lib/vector/Vlib/map.c:267
 #, fuzzy, c-format
 msgid "Unable to copy vector map <%s> to <%s>"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/vector/Vlib/map.c:295 ../lib/vector/Vlib/map.c:426
+#: ../lib/vector/Vlib/map.c:331 ../lib/vector/Vlib/map.c:462
 #, fuzzy, c-format
 msgid "Unable to delete table <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/map.c:310
+#: ../lib/vector/Vlib/map.c:346
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/vector/Vlib/map.c:366
+#: ../lib/vector/Vlib/map.c:402
 #, c-format
 msgid "Ignoring invalid mapset: %s"
 msgstr ""
 
-#: ../lib/vector/Vlib/map.c:371
+#: ../lib/vector/Vlib/map.c:407
 #, fuzzy, c-format
 msgid "Invalid vector map name <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/vector/Vlib/map.c:381
+#: ../lib/vector/Vlib/map.c:417
 #, fuzzy, c-format
 msgid "Unable to open header file for vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/map.c:413
+#: ../lib/vector/Vlib/map.c:449
 #, fuzzy, c-format
 msgid "Unable to find table <%s> linked to vector map <%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/map.c:436
+#: ../lib/vector/Vlib/map.c:472
 #, fuzzy, c-format
 msgid "Table <%s> linked to vector map <%s> does not exist"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/vector/Vlib/map.c:450
+#: ../lib/vector/Vlib/map.c:485
 #, fuzzy, c-format
 msgid "Unable to open directory '%s'"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/vector/Vlib/map.c:464
+#: ../lib/vector/Vlib/map.c:499
 #, fuzzy, c-format
 msgid "Unable to delete file '%s'"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/vector/Vlib/map.c:478
+#: ../lib/vector/Vlib/map.c:519
 #, fuzzy, c-format
 msgid "Unable to rename directory '%s' to '%s'"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/vector/Vlib/map.c:487
+#: ../lib/vector/Vlib/map.c:528
 #, fuzzy, c-format
-msgid "Unable to remove directory '%s'"
+msgid "Unable to remove directory '%s': %s"
 msgstr "无法将目录改变到%s"
 
 #: ../lib/vector/Vlib/constraint.c:150
@@ -3286,6 +3256,151 @@ msgstr "矩阵没有初始化"
 msgid "Map structure has been closed"
 msgstr ""
 
+#: ../lib/vector/Vlib/net_build.c:101 ../lib/vector/Vlib/net_build.c:727
+#, fuzzy
+msgid "Building graph..."
+msgstr "建立拓扑...\n"
+
+#: ../lib/vector/Vlib/net_build.c:143 ../lib/vector/Vlib/net_build.c:775
+#, fuzzy
+msgid "Unable to build network graph"
+msgstr "无法找到矢量%s"
+
+#: ../lib/vector/Vlib/net_build.c:149 ../lib/vector/Vlib/net_build.c:781
+msgid "Forward costs column not specified"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:156
+msgid "Turntable field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:172
+#, fuzzy, c-format
+msgid "Turntable column <%s> not found in table <%s>"
+msgstr "无法打开数据库表 <%s>"
+
+#: ../lib/vector/Vlib/net_build.c:182 ../lib/vector/Vlib/net_build.c:223
+#: ../lib/vector/Vlib/net_build.c:508 ../lib/vector/Vlib/net_build.c:526
+#: ../lib/vector/Vlib/net_build.c:809 ../lib/vector/Vlib/net_build.c:827
+#: ../lib/vector/Vlib/net_build.c:988
+#, fuzzy, c-format
+msgid "Data type of column <%s> not supported (must be numeric)"
+msgstr "z 值字段的类型不支持 (必须为整型或双精度)"
+
+#: ../lib/vector/Vlib/net_build.c:202 ../lib/vector/Vlib/net_build.c:967
+msgid "Setting node costs..."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:277 ../lib/vector/Vlib/net_build.c:1032
+#, fuzzy, c-format
+msgid "Database record for node %d (cat = %d) not found (cost set to 0)"
+msgstr "类型为 %d 的记录未找到"
+
+#: ../lib/vector/Vlib/net_build.c:332 ../lib/vector/Vlib/net_build.c:352
+#, fuzzy
+msgid "Cannot add network arc for virtual node connection."
+msgstr "无法为区域 %d 计算质心"
+
+#: ../lib/vector/Vlib/net_build.c:364
+#, c-format
+msgid ""
+"There exists more than one point of node <%d> with unique category field  <"
+"%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:393
+#, c-format
+msgid ""
+"Unable to find point representing intersection <%d> in unique categories "
+"field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:407
+#, c-format
+msgid ""
+"Unable to find node for point representing intersection <%d> in unique "
+"categories field <%d>.\n"
+"Cost for the intersection was set to 0.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:432
+#, fuzzy, c-format
+msgid ""
+"Database record for turn with cat = %d in not found. (The turn was skipped."
+msgstr "类型为 %d 的记录未找到"
+
+#: ../lib/vector/Vlib/net_build.c:465
+#, fuzzy
+msgid "Cannot add network arc representing turn."
+msgstr "无法为区域 %d 计算质心"
+
+#: ../lib/vector/Vlib/net_build.c:487 ../lib/vector/Vlib/net_build.c:788
+msgid "Arc field < 1"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:539 ../lib/vector/Vlib/net_build.c:840
+#, fuzzy
+msgid "Registering arcs..."
+msgstr "注册线: "
+
+#: ../lib/vector/Vlib/net_build.c:558
+#, c-format
+msgid ""
+"Line with id <%d> has more unique categories defined in field <%d>.\n"
+"The unique categories layer is not valid therefore you will probably get "
+"incorrect results."
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:579
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(cost was set to 0)"
+msgstr "类型为 %d 的记录未找到"
+
+#: ../lib/vector/Vlib/net_build.c:596
+#, fuzzy, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not found(cost "
+"was set to 0)"
+msgstr "类型为 %d 的记录未找到"
+
+#: ../lib/vector/Vlib/net_build.c:658 ../lib/vector/Vlib/net_build.c:1064
+#, fuzzy
+msgid "Flattening the graph..."
+msgstr "建立拓扑...\n"
+
+#: ../lib/vector/Vlib/net_build.c:667 ../lib/vector/Vlib/net_build.c:1073
+#, fuzzy
+msgid "Graph was built"
+msgstr "拓扑建立完成。\n"
+
+#: ../lib/vector/Vlib/net_build.c:869
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, forward/both direction(s)) not found "
+"(forward/both direction(s) of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:888
+#, c-format
+msgid ""
+"Database record for line %d (cat = %d, backword direction) not "
+"found(direction of line skipped)"
+msgstr ""
+
+#: ../lib/vector/Vlib/net_build.c:937
+#, fuzzy
+msgid "Cannot add network arc"
+msgstr "无法为区域 %d 计算质心"
+
 #: ../lib/vector/Vlib/break_polygons.c:102
 msgid "Break polygons: Bug in binary tree!"
 msgstr ""
@@ -3401,7 +3516,7 @@ msgid "3D raster map <%s> not found"
 msgstr "输入矢量'%s'未找到"
 
 #: ../lib/gpde/n_arrays_io.c:281
-#: ../lib/python/temporal/c_libraries_interface.py:518
+#: ../lib/python/temporal/c_libraries_interface.py:677
 #: ../lib/ogsf/gvl_file.c:436
 #, fuzzy, c-format, python-format
 msgid "Unable to open 3D raster map <%s>"
@@ -3545,88 +3660,98 @@ msgstr ""
 msgid ". See errors in the (error) output."
 msgstr ""
 
-#: ../lib/python/pygrass/utils.py:236
+#: ../lib/python/pygrass/utils.py:255
 msgid "Vector doesn't contain points"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1017
+#: ../lib/python/pygrass/vector/table.py:1024
 #, python-format
 msgid "Deleting table <%s> which is attached to following map(s):"
 msgstr ""
 
-#: ../lib/python/pygrass/vector/table.py:1021
+#: ../lib/python/pygrass/vector/table.py:1028
 msgid "You must use the force flag to actually remove it. Exiting."
 msgstr ""
 
-#: ../lib/python/pygrass/vector/abstract.py:108
-#: ../lib/python/pygrass/raster/abstract.py:298
+#: ../lib/python/pygrass/vector/__init__.py:752
+#, fuzzy, python-format
+msgid "Unable to read line of feature %i"
+msgstr "无法打开临时文件"
+
+#: ../lib/python/pygrass/vector/__init__.py:841
+#, fuzzy, python-format
+msgid "Unable to read area with id %i"
+msgstr "无法打开文件 %s 在 %s 中"
+
+#: ../lib/python/pygrass/vector/abstract.py:97
+#: ../lib/python/pygrass/raster/abstract.py:299
 #, python-brace-format
 msgid "Map name {0} not valid"
 msgstr ""
 
-#: ../lib/python/pygrass/modules/grid/grid.py:547
+#: ../lib/python/pygrass/modules/grid/grid.py:553
 msgid "Execution of subprocesses was not successful"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:81
+#: ../lib/python/pygrass/raster/category.py:69
 #, fuzzy, python-brace-format
 msgid "Raster type: {0} not supported"
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/python/pygrass/raster/category.py:168
+#: ../lib/python/pygrass/raster/category.py:156
 msgid "Error executing: Rast_get_ith_cat"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/category.py:196
+#: ../lib/python/pygrass/raster/category.py:184
 #, fuzzy
 msgid "Null value detected"
 msgstr "输入矢量的名称"
 
-#: ../lib/python/pygrass/raster/category.py:198
+#: ../lib/python/pygrass/raster/category.py:186
 #, fuzzy
 msgid "Error executing: Rast_set_cat"
 msgstr "读取栅格单元文件问题"
 
-#: ../lib/python/pygrass/raster/__init__.py:180
+#: ../lib/python/pygrass/raster/__init__.py:209
 msgid "The map does not exist, I can't open in 'r' mode"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:185
+#: ../lib/python/pygrass/raster/__init__.py:214
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists and will be not overwritten"
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/python/pygrass/raster/__init__.py:189
+#: ../lib/python/pygrass/raster/__init__.py:218
 #, fuzzy
 msgid "Raster type not defined"
 msgstr "没有 ID 的 OGR 要素被忽略。 "
 
-#: ../lib/python/pygrass/raster/__init__.py:280
+#: ../lib/python/pygrass/raster/__init__.py:321
 #, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w','rw')"
 msgstr ""
 
-#: ../lib/python/pygrass/raster/__init__.py:300
+#: ../lib/python/pygrass/raster/__init__.py:341
 #, fuzzy, python-format
 msgid "Index out of range: %r."
 msgstr "双精度属性索引越界"
 
-#: ../lib/python/pygrass/raster/__init__.py:401
+#: ../lib/python/pygrass/raster/__init__.py:530
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> already exists. Use overwrite."
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/python/pygrass/raster/__init__.py:432
+#: ../lib/python/pygrass/raster/__init__.py:561
 #, fuzzy, python-brace-format
 msgid "Raster map <{0}> does not exist"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/python/pygrass/raster/abstract.py:274
+#: ../lib/python/pygrass/raster/abstract.py:275
 #, fuzzy, python-brace-format
 msgid "Mode type: {0} not supported ('r', 'w')"
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/python/pygrass/raster/abstract.py:285
+#: ../lib/python/pygrass/raster/abstract.py:286
 #, fuzzy, python-brace-format
 msgid "Overwrite type: {0} not supported (True/False)"
 msgstr "不支持的 OGR 要素类型 %d"
@@ -3635,32 +3760,36 @@ msgstr "不支持的 OGR 要素类型 %d"
 msgid "The map is close!"
 msgstr ""
 
-#: ../lib/python/temporal/stds_export.py:99
+#: ../lib/python/pygrass/errors.py:28
+msgid "The self.c_mapinfo pointer must be correctly initiated"
+msgstr ""
+
+#: ../lib/python/temporal/stds_export.py:104
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/stds_export.py:110
+#: ../lib/python/temporal/stds_export.py:115
 #, fuzzy, python-format
 msgid "Unable to export color rules for raster map <%s> r.out.gdal"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/stds_export.py:134
+#: ../lib/python/temporal/stds_export.py:139
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r.pack"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/stds_export.py:162
+#: ../lib/python/temporal/stds_export.py:167
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> as GML with v.out.ogr"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/stds_export.py:195
+#: ../lib/python/temporal/stds_export.py:200
 #, fuzzy, python-format
 msgid "Unable to export vector map <%s> with v.pack"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/stds_export.py:221
+#: ../lib/python/temporal/stds_export.py:226
 #, fuzzy, python-format
 msgid "Unable to export raster map <%s> with r3.pack"
 msgstr "无法将目录改变到%s"
@@ -3700,7 +3829,7 @@ msgid "Creating a new space time %s dataset"
 msgstr "输入矢量'%s'未找到"
 
 #: ../lib/python/temporal/open_stds.py:208
-#: ../lib/python/temporal/extract.py:115 ../lib/python/temporal/mapcalc.py:236
+#: ../lib/python/temporal/extract.py:130 ../lib/python/temporal/mapcalc.py:236
 #, fuzzy, python-format
 msgid ""
 "Map <%s> is already in temporal database, use overwrite flag to overwrite"
@@ -3717,12 +3846,12 @@ msgid "Error computing map <%s>"
 msgstr "打开g3d地图 <%s>错误"
 
 #: ../lib/python/temporal/temporal_raster_base_algebra.py:655
-#: ../lib/python/temporal/temporal_algebra.py:2212
+#: ../lib/python/temporal/temporal_algebra.py:2216
 #, fuzzy, python-format
 msgid "%s map <%s> not found in GRASS spatial database"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1215
+#: ../lib/python/temporal/gui_support.py:56 ../lib/python/script/core.py:1233
 #, python-format
 msgid "Invalid element '%s'"
 msgstr ""
@@ -3736,9 +3865,9 @@ msgstr ""
 
 #: ../lib/python/temporal/abstract_dataset.py:428
 #: ../lib/python/temporal/abstract_dataset.py:471
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2274
-#: ../lib/python/temporal/abstract_map_dataset.py:415
-#: ../lib/python/temporal/abstract_map_dataset.py:511
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2275
+#: ../lib/python/temporal/abstract_map_dataset.py:416
+#: ../lib/python/temporal/abstract_map_dataset.py:512
 #, python-format
 msgid ""
 "Unable to update dataset <%(ds)s> of type %(type)s in the temporal database. "
@@ -3750,88 +3879,88 @@ msgstr ""
 msgid "Unknown dataset type: %s"
 msgstr "未知矢量类型"
 
-#: ../lib/python/temporal/extract.py:54
+#: ../lib/python/temporal/extract.py:59
 msgid "You need to specify the base name of new created maps"
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:122
+#: ../lib/python/temporal/extract.py:137
 #, python-format
 msgid "Applying r.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:127
+#: ../lib/python/temporal/extract.py:142
 #, python-format
 msgid "Applying r3.mapcalc expression: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:132
+#: ../lib/python/temporal/extract.py:147
 #, python-format
 msgid "Applying v.extract where statement: \"%s\""
 msgstr ""
 
-#: ../lib/python/temporal/extract.py:160
+#: ../lib/python/temporal/extract.py:175
 #, fuzzy
 msgid "Error in computation process"
 msgstr "  格式: %s\n"
 
-#: ../lib/python/temporal/space_time_datasets.py:221
+#: ../lib/python/temporal/space_time_datasets.py:231
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for raster map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:245
+#: ../lib/python/temporal/space_time_datasets.py:255
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for raster map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:250
+#: ../lib/python/temporal/space_time_datasets.py:260
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for raster map <%s>"
 msgstr "对%s是无效的时间戳文件,地图%s 地图集%s"
 
-#: ../lib/python/temporal/space_time_datasets.py:255
-#: ../lib/python/temporal/space_time_datasets.py:589
+#: ../lib/python/temporal/space_time_datasets.py:265
+#: ../lib/python/temporal/space_time_datasets.py:609
 #, fuzzy
 msgid "Internal error"
 msgstr "格式错误"
 
-#: ../lib/python/temporal/space_time_datasets.py:272
-#: ../lib/python/temporal/space_time_datasets.py:603
+#: ../lib/python/temporal/space_time_datasets.py:282
+#: ../lib/python/temporal/space_time_datasets.py:623
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for raster map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:555
+#: ../lib/python/temporal/space_time_datasets.py:575
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for 3D raster map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:579
+#: ../lib/python/temporal/space_time_datasets.py:599
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for 3D raster map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:584
+#: ../lib/python/temporal/space_time_datasets.py:604
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for 3D raster map <%s>"
 msgstr "对%s是无效的时间戳文件,地图%s 地图集%s"
 
-#: ../lib/python/temporal/space_time_datasets.py:848
+#: ../lib/python/temporal/space_time_datasets.py:879
 #, fuzzy, python-format
 msgid "Unable to read timestamp file for vector map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:871
+#: ../lib/python/temporal/space_time_datasets.py:902
 #, fuzzy, python-format
 msgid "Unable to create timestamp file for vector map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/space_time_datasets.py:876
+#: ../lib/python/temporal/space_time_datasets.py:907
 #, fuzzy, python-format
 msgid "Invalid datetime in timestamp for vector map <%s>"
 msgstr "对%s是无效的时间戳文件,地图%s 地图集%s"
 
-#: ../lib/python/temporal/space_time_datasets.py:892
+#: ../lib/python/temporal/space_time_datasets.py:923
 #, fuzzy, python-format
 msgid "Unable to remove timestamp for vector map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
@@ -3861,132 +3990,132 @@ msgstr "无法将目录改变到%s"
 msgid "Unable to unpack vector map <%s> from file %s."
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/stds_import.py:205
+#: ../lib/python/temporal/stds_import.py:207
 #, fuzzy, python-format
 msgid "Space time raster dataset archive <%s> not found"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/stds_import.py:208
+#: ../lib/python/temporal/stds_import.py:210
 #, fuzzy, python-format
 msgid "Extraction directory <%s> not found"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/stds_import.py:214
+#: ../lib/python/temporal/stds_import.py:216
 #, python-format
 msgid "Checking validity of input file (size: %0.1f MB). Make take a while..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:221
+#: ../lib/python/temporal/stds_import.py:223
 #, fuzzy, python-format
 msgid "Unable to find init file <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/stds_import.py:223
+#: ../lib/python/temporal/stds_import.py:225
 #, fuzzy, python-format
 msgid "Unable to find list file <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/stds_import.py:225
+#: ../lib/python/temporal/stds_import.py:227
 #, fuzzy, python-format
 msgid "Unable to find projection file <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/stds_import.py:227
+#: ../lib/python/temporal/stds_import.py:229
 #, fuzzy
 msgid "Extracting data..."
 msgstr "建立拓扑...\n"
 
-#: ../lib/python/temporal/stds_import.py:267
+#: ../lib/python/temporal/stds_import.py:269
 msgid "Projection information does not match. Proceeding..."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:271
+#: ../lib/python/temporal/stds_import.py:273
 #, python-brace-format
 msgid ""
 "Difference between PROJ_INFO file of imported map and of current location:\n"
 "{diff}"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:274
+#: ../lib/python/temporal/stds_import.py:276
 msgid "Projection information does not match. Aborting."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:291
+#: ../lib/python/temporal/stds_import.py:293
 #, fuzzy, python-format
 msgid "Unable to create location %(l)s. Reason: %(e)s"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/stds_import.py:299
+#: ../lib/python/temporal/stds_import.py:301
 #, fuzzy, python-format
 msgid "Unable to switch to location %s"
 msgstr "无法写入[%s]的历史信息"
 
-#: ../lib/python/temporal/stds_import.py:304
+#: ../lib/python/temporal/stds_import.py:306
 #, fuzzy, python-format
 msgid "Unable to create default temporal database in new location %s"
 msgstr "无法打开基准面表文件:%s"
 
-#: ../lib/python/temporal/stds_import.py:377
+#: ../lib/python/temporal/stds_import.py:379
 #, python-format
 msgid "Key words %(t)s, %(s)s or %(n)s not found in init file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:383
+#: ../lib/python/temporal/stds_import.py:385
 msgid "Number of maps mismatch in init and list file."
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:394
+#: ../lib/python/temporal/stds_import.py:396
 msgid "The archive file is of wrong space time dataset type"
 msgstr ""
 
-#: ../lib/python/temporal/stds_import.py:402
+#: ../lib/python/temporal/stds_import.py:404
 #, fuzzy, python-format
 msgid "Unable to find GeoTIFF raster file <%s> in archive."
 msgstr "找不到临时空文件:%s"
 
-#: ../lib/python/temporal/stds_import.py:408
+#: ../lib/python/temporal/stds_import.py:410
 #, fuzzy, python-format
 msgid "Unable to find AAIGrid raster file <%s> in archive."
 msgstr "找不到临时空文件:%s"
 
-#: ../lib/python/temporal/stds_import.py:414
+#: ../lib/python/temporal/stds_import.py:416
 #, fuzzy, python-format
 msgid "Unable to find GML vector file <%s> in archive."
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/stds_import.py:423
+#: ../lib/python/temporal/stds_import.py:425
 #, fuzzy, python-format
 msgid "Unable to find GRASS package file <%s> in archive."
 msgstr "无法为写入打开%s"
 
-#: ../lib/python/temporal/stds_import.py:426
+#: ../lib/python/temporal/stds_import.py:428
 #, fuzzy
 msgid "Unsupported input format"
 msgstr "要素类型"
 
-#: ../lib/python/temporal/stds_import.py:432
+#: ../lib/python/temporal/stds_import.py:434
 #, fuzzy, python-format
 msgid ""
 "Space time %(t)s dataset <%(sp)s> is already in the database. Use the "
 "overwrite flag."
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/python/temporal/stds_import.py:452
+#: ../lib/python/temporal/stds_import.py:455
 #, fuzzy, python-format
 msgid "Overwrite space time %(sp)s dataset <%(id)s> and unregister all maps."
 msgstr "无法为[%s]创建头文件"
 
-#: ../lib/python/temporal/stds_import.py:464
+#: ../lib/python/temporal/stds_import.py:467
 #, fuzzy, python-format
 msgid "Key word %s not found in init file."
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/python/temporal/stds_import.py:469
+#: ../lib/python/temporal/stds_import.py:472
 #, fuzzy, python-format
 msgid "Create space time %s dataset."
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/stds_import.py:498
+#: ../lib/python/temporal/stds_import.py:501
 msgid "Switching to original location failed"
 msgstr ""
 
@@ -4011,20 +4140,20 @@ msgid ""
 "%s"
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/python/temporal/core.py:576
+#: ../lib/python/temporal/core.py:605
 msgid ""
 "Unable to initialize the temporal DBMI interface. Please use t.connect to "
 "specify the driver and the database string"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:639
+#: ../lib/python/temporal/core.py:668
 #, fuzzy, python-format
 msgid ""
 "Unable to receive temporal database metadata.\n"
 "Current temporal database info:%(info)s"
 msgstr "无法打开基准面表文件:%s"
 
-#: ../lib/python/temporal/core.py:644
+#: ../lib/python/temporal/core.py:673
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4033,7 +4162,7 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "无法打开基准面表文件:%s"
 
-#: ../lib/python/temporal/core.py:652
+#: ../lib/python/temporal/core.py:681
 #, fuzzy, python-format
 msgid ""
 "Unsupported temporal database: version mismatch.\n"
@@ -4041,12 +4170,12 @@ msgid ""
 "Current temporal database info:%(info)s"
 msgstr "无法打开基准面表文件:%s"
 
-#: ../lib/python/temporal/core.py:740
+#: ../lib/python/temporal/core.py:769
 #, fuzzy, python-format
 msgid "Creating temporal database: %s"
 msgstr "无法打开数据库 %s"
 
-#: ../lib/python/temporal/core.py:749
+#: ../lib/python/temporal/core.py:778
 #, python-format
 msgid ""
 "Unable to create SQLite temporal database\n"
@@ -4054,49 +4183,37 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database path"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:914
-#, python-format
-msgid ""
-"Unable to mogrify sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:943
+#, fuzzy
+msgid "Unable to mogrify sql statement. "
+msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/core.py:937
-#, fuzzy, python-format
-msgid ""
-"Unable to check table. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "无法打开基准面表文件:%s"
+#: ../lib/python/temporal/core.py:965
+#, fuzzy
+msgid "Unable to check table. "
+msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/core.py:954
-#, python-format
-msgid ""
-"Unable to execute sql statement. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:981
+#, fuzzy
+msgid "Unable to execute sql statement. "
+msgstr "无法执行命令"
 
-#: ../lib/python/temporal/core.py:965
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch one. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "无法打开矢量'%s'的历史记录"
+#: ../lib/python/temporal/core.py:991
+#, fuzzy
+msgid "Unable to fetch one. "
+msgstr "无法找到[%s]"
 
-#: ../lib/python/temporal/core.py:976
-#, fuzzy, python-format
-msgid ""
-"Unable to fetch all. There is no temporal database connection defined for "
-"mapset <%(mapset)s>"
-msgstr "无法打开矢量'%s'的历史记录"
+#: ../lib/python/temporal/core.py:1001
+#, fuzzy
+msgid "Unable to fetch all. "
+msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/core.py:994
-#, python-format
-msgid ""
-"Unable to execute transaction. There is no temporal database connection "
-"defined for mapset <%(mapset)s>"
-msgstr ""
+#: ../lib/python/temporal/core.py:1018
+#, fuzzy
+msgid "Unable to execute transaction. "
+msgstr "无法执行命令"
 
-#: ../lib/python/temporal/core.py:1083
+#: ../lib/python/temporal/core.py:1121
 #, python-format
 msgid ""
 "Unable to connect to %(db)s database: %(string)s\n"
@@ -4104,182 +4221,182 @@ msgid ""
 "Please use t.connect to set a read- and writable temporal database backend"
 msgstr ""
 
-#: ../lib/python/temporal/core.py:1240
+#: ../lib/python/temporal/core.py:1278
 #, fuzzy, python-format
 msgid ""
 "Unable to execute :\n"
 " %(sql)s"
 msgstr "无法执行命令"
 
-#: ../lib/python/temporal/core.py:1284
+#: ../lib/python/temporal/core.py:1322
 #, fuzzy, python-format
 msgid ""
 "Unable to execute transaction:\n"
 " %(sql)s"
 msgstr "无法执行命令"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:155
-#: ../lib/python/temporal/abstract_space_time_dataset.py:289
+#: ../lib/python/temporal/abstract_space_time_dataset.py:156
+#: ../lib/python/temporal/abstract_space_time_dataset.py:290
 #, fuzzy, python-format
 msgid "Unknown temporal type \"%s\""
 msgstr "未知矢量类型"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:282
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1050
+#: ../lib/python/temporal/abstract_space_time_dataset.py:283
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1051
 #, fuzzy, python-format
 msgid "Wrong granularity: \"%s\""
 msgstr "  格式: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:310
+#: ../lib/python/temporal/abstract_space_time_dataset.py:311
 #, fuzzy, python-format
 msgid "Unsupported temporal unit: %s"
 msgstr "要素类型"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:360
+#: ../lib/python/temporal/abstract_space_time_dataset.py:361
 #, fuzzy, python-format
 msgid "Created register table <%s> for space time %s  dataset <%s>"
 msgstr "无法为地图 %s 写入量化规则"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:678
-#: ../lib/python/temporal/abstract_space_time_dataset.py:920
+#: ../lib/python/temporal/abstract_space_time_dataset.py:679
+#: ../lib/python/temporal/abstract_space_time_dataset.py:921
 msgid "The space time datasets must be of the same temporal type"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:683
-#: ../lib/python/temporal/abstract_space_time_dataset.py:925
+#: ../lib/python/temporal/abstract_space_time_dataset.py:684
+#: ../lib/python/temporal/abstract_space_time_dataset.py:926
 msgid "The temporal map type of the sample dataset must be interval"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1487
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1488
 #, fuzzy, python-format
 msgid "Unable to get map ids from register table <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1569
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1605
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1570
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1606
 #: ../lib/python/temporal/datetime_math.py:451
 #, fuzzy, python-format
 msgid "Wrong granularity format: %s"
 msgstr "  格式: %s\n"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1598
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1599
 #, python-format
 msgid ""
 "Unable to shift dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1767
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1768
 #, python-format
 msgid ""
 "Unable to snap dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1869
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1870
 #, python-format
 msgid ""
 "Unable to rename dataset <%(ds)s> of type %(type)s in the temporal database. "
 "The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1878
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1879
 msgid "Renaming of space time datasets is not supported for PostgreSQL."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1943
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1944
 #, fuzzy, python-format
 msgid "Delete space time %s  dataset <%s> from temporal database"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1949
-#: ../lib/python/temporal/abstract_map_dataset.py:823
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1950
+#: ../lib/python/temporal/abstract_map_dataset.py:824
 #, python-format
 msgid ""
 "Unable to delete dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:1962
+#: ../lib/python/temporal/abstract_space_time_dataset.py:1963
 #, fuzzy, python-format
 msgid "Drop map register table: %s"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2017
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2018
 #, fuzzy
 msgid "Error in register table request"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2046
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2047
 #, fuzzy, python-format
 msgid ""
 "Unable to register map in dataset <%(ds)s> of type %(type)s. The mapset of "
 "the dataset does not match the current mapset"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2055
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2056
 msgid ""
 "Only a map that was inserted in the temporal database can be registered in a "
 "space time dataset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2078
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2079
 #, python-format
 msgid "Map <%(id)s> with layer %(l)s has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2082
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2083
 #, python-format
 msgid "Map <%s> has invalid time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2100
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2101
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> with layer "
 "%(l)s are different"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2106
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2107
 #, fuzzy, python-format
 msgid ""
 "Temporal type of space time dataset <%(id)s> and map <%(map)s> are different"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2121
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2122
 #, fuzzy, python-format
 msgid "Set temporal unit for space time %s dataset <%s> to %s"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2131
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2132
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> with "
 "layer %(l)s are different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2137
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2138
 #, python-format
 msgid ""
 "Relative time units of space time dataset <%(id)s> and map <%(map)s> are "
 "different"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2143
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2144
 msgid "Only maps from the same mapset can be registered"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2148
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2149
 #, fuzzy, python-format
 msgid "Map <%(map)s> with layer %(l)s is already registered."
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2152
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2153
 #, python-format
 msgid "Map <%s> is already registered."
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2200
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2201
 #, python-format
 msgid ""
 "Unable to unregister map from dataset <%(ds)s> of type %(type)s in the "
@@ -4287,19 +4404,19 @@ msgid ""
 "mapset"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2213
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2214
 #, fuzzy, python-format
 msgid ""
 "Map <%(map)s> with layer %(l)s is not registered in space time dataset <"
 "%(base)s>"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2219
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2220
 #, fuzzy, python-format
 msgid "Map <%(map)s> is not registered in space time dataset <%(base)s>"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/python/temporal/abstract_space_time_dataset.py:2280
+#: ../lib/python/temporal/abstract_space_time_dataset.py:2281
 #, python-format
 msgid ""
 "Update metadata, spatial and temporal extent from all registered maps of <%s>"
@@ -4360,58 +4477,65 @@ msgstr "无法打开栅格图[%s在%s中]"
 msgid "The temporal operators <%s> support only absolute time."
 msgstr ""
 
-#: ../lib/python/temporal/c_libraries_interface.py:438
-#: ../lib/python/temporal/c_libraries_interface.py:455
+#: ../lib/python/temporal/c_libraries_interface.py:597
+#: ../lib/python/temporal/c_libraries_interface.py:614
 #, fuzzy
 msgid "Unable to read range file"
 msgstr "无法打开临时文件"
 
-#: ../lib/python/temporal/c_libraries_interface.py:533
+#: ../lib/python/temporal/c_libraries_interface.py:692
 #, fuzzy, python-format
 msgid "Unable to load range of 3D raster map <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/c_libraries_interface.py:548
+#: ../lib/python/temporal/c_libraries_interface.py:707
 #: ../lib/ogsf/gvl_file.c:470 ../lib/raster3d/close.c:120
 #: ../lib/raster3d/close.c:130 ../lib/raster3d/close.c:159
 #, fuzzy, c-format, python-format
 msgid "Unable to close 3D raster map <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/aggregation.py:121
+#: ../lib/python/temporal/aggregation.py:124
 #, fuzzy, python-format
 msgid "Aggregating %s raster maps"
 msgstr "输入栅格的名称"
 
-#: ../lib/python/temporal/aggregation.py:135
+#: ../lib/python/temporal/aggregation.py:138
 #, fuzzy, python-format
 msgid ""
 "Raster map <%(name)s> is already in temporal database, use overwrite flag to "
 "overwrite"
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/python/temporal/aggregation.py:140
+#: ../lib/python/temporal/aggregation.py:143
 #, python-format
 msgid "Computing aggregation of maps between %(st)s - %(end)s"
 msgstr ""
 
-#: ../lib/python/temporal/aggregation.py:165
+#: ../lib/python/temporal/aggregation.py:168
 #, fuzzy
 msgid "Error occurred in r.series computation"
 msgstr "  格式: %s\n"
 
-#: ../lib/python/temporal/aggregation.py:271
+#: ../lib/python/temporal/aggregation.py:277
 #, fuzzy, python-format
 msgid "Aggregating %(len)i raster maps from %(start)s to %(end)s"
 msgstr "输入栅格的名称"
 
-#: ../lib/python/temporal/aggregation.py:289
+#: ../lib/python/temporal/aggregation.py:298
 #, python-format
 msgid ""
 "Unable to perform aggregation. Output raster map <%(name)s> exists and "
 "overwrite flag was not set"
 msgstr ""
 
+#: ../lib/python/temporal/aggregation.py:316
+#, python-format
+msgid ""
+"The limit of open fiels (%i) was reached (%i). The module r.series will be "
+"run with flag z, to avoid open files limit exceeding."
+msgstr ""
+
 #: ../lib/python/temporal/register.py:76 ../lib/python/temporal/register.py:79
 #, python-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4583,28 +4707,28 @@ msgstr ""
 msgid "Wrong identifier, the mapset is missing"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/python/temporal/univar_statistics.py:59
-#: ../lib/python/temporal/univar_statistics.py:172
+#: ../lib/python/temporal/univar_statistics.py:60
+#: ../lib/python/temporal/univar_statistics.py:176
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> is empty"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/univar_statistics.py:98
+#: ../lib/python/temporal/univar_statistics.py:99
 #, fuzzy, python-format
 msgid "Unable to get statistics for raster map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/univar_statistics.py:101
+#: ../lib/python/temporal/univar_statistics.py:102
 #, fuzzy, python-format
 msgid "Unable to get statistics for 3d raster map <%s>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/python/temporal/univar_statistics.py:162
+#: ../lib/python/temporal/univar_statistics.py:166
 #, fuzzy, python-format
 msgid "Space time %(sp)s dataset <%(i)s> not found"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/univar_statistics.py:213
+#: ../lib/python/temporal/univar_statistics.py:220
 #, fuzzy, python-format
 msgid "Unable to get statistics for vector map <%s>"
 msgstr "无法为[%s在%s中]创建头文件"
@@ -4634,189 +4758,230 @@ msgstr "不支持的 OGR 要素类型 %d"
 msgid "Unable to parse time string: %s"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/temporal/temporal_algebra.py:790
+#: ../lib/python/temporal/temporal_algebra.py:792
 msgid "Spatio temporal operators are not supported in granularity algebra mode"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:826
+#: ../lib/python/temporal/temporal_algebra.py:829
 msgid "All input space time datasets must have a valid temporal topology."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:834
+#: ../lib/python/temporal/temporal_algebra.py:838
 #, fuzzy
 msgid "All input space time datasets must have the same temporal type."
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/temporal_algebra.py:1059
+#: ../lib/python/temporal/temporal_algebra.py:1063
 #, fuzzy, python-format
 msgid "Removing un-needed or empty %s maps"
 msgstr "输入栅格的名称"
 
-#: ../lib/python/temporal/temporal_algebra.py:1106
+#: ../lib/python/temporal/temporal_algebra.py:1110
 #, fuzzy, python-format
 msgid "Space time %s dataset <%s> not found"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/python/temporal/temporal_algebra.py:1133
 #: ../lib/python/temporal/temporal_algebra.py:1137
+#: ../lib/python/temporal/temporal_algebra.py:1141
 #, python-format
 msgid ""
 "Wrong temporal type of space time dataset <"
 "%s>                                       <%s> time is required"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:1157
+#: ../lib/python/temporal/temporal_algebra.py:1161
 #, fuzzy
 msgid "Wrong type of input "
 msgstr "无法打开%s"
 
-#: ../lib/python/temporal/temporal_algebra.py:2031
+#: ../lib/python/temporal/temporal_algebra.py:2035
 #, python-format
 msgid ""
 "The resulting space time dataset type <%(a)s> is different from the "
 "requested type <%(b)s>"
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2037
+#: ../lib/python/temporal/temporal_algebra.py:2041
 msgid ""
 "Maps that should be registered in the resulting space time dataset have "
 "different types."
 msgstr ""
 
-#: ../lib/python/temporal/temporal_algebra.py:2218
+#: ../lib/python/temporal/temporal_algebra.py:2222
 #, python-format
 msgid ""
 "Wrong map type <%s> . TMAP only supports single maps that are registered in "
 "the temporal GRASS database"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:201
+#: ../lib/python/temporal/temporal_algebra.py:2251
+msgid "Merging empty map lists"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2254
+msgid "First Map list is empty, can't merge it. Return only last map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2257
+msgid "Second Map list is empty, can't merge it. Return only first map list"
+msgstr ""
+
+#: ../lib/python/temporal/temporal_algebra.py:2265
+#, fuzzy
+msgid "Space time datasets to merge must have the same temporal type"
+msgstr "无法打开栅格图[%s在%s中]"
+
+#: ../lib/python/temporal/list_stds.py:203
 msgid "Empty map list"
 msgstr ""
 
-#: ../lib/python/temporal/list_stds.py:212
+#: ../lib/python/temporal/list_stds.py:214
 msgid "Empty entry in map list, this should not happen"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:118
+#: ../lib/python/temporal/spatial_extent.py:119
 msgid ""
 "Projections are different. Unable to compute overlapping_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:524
+#: ../lib/python/temporal/spatial_extent.py:525
 msgid ""
 "Projections are different. Unable to compute is_in_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:656
+#: ../lib/python/temporal/spatial_extent.py:657
 msgid ""
 "Projections are different. Unable to compute equivalent_2d for spatial "
 "extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:761
+#: ../lib/python/temporal/spatial_extent.py:762
 msgid ""
 "Projections are different. Unable to compute cover_2d for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:833
+#: ../lib/python/temporal/spatial_extent.py:834
 msgid "Projections are different. Unable to compute cover for spatial extents"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1685
+#: ../lib/python/temporal/spatial_extent.py:1686
 msgid "Volume computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/spatial_extent.py:1703
+#: ../lib/python/temporal/spatial_extent.py:1704
 msgid "Area computation is not supported for LL projections"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:341
+#: ../lib/python/temporal/abstract_map_dataset.py:342
 #, fuzzy, python-format
 msgid ""
 "Start time must be of type datetime for %(type)s map <%(id)s> with layer: "
 "%(l)s"
 msgstr "无法为%s创建时间戳文件, 地图%s 地图集%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:348
+#: ../lib/python/temporal/abstract_map_dataset.py:349
 #, fuzzy, python-format
 msgid "Start time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "对%s是无效的时间戳文件,地图%s 地图集%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:356
+#: ../lib/python/temporal/abstract_map_dataset.py:357
 #, fuzzy, python-format
 msgid ""
 "End time must be of type datetime for %(type)s map <%(id)s> with layer: %(l)s"
 msgstr "对%s是无效的时间戳文件,地图%s 地图集%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:363
+#: ../lib/python/temporal/abstract_map_dataset.py:364
 #, fuzzy, python-format
 msgid "End time must be of type datetime for %(type)s map <%(id)s>"
 msgstr "对%s是无效的时间戳文件,地图%s 地图集%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:372
+#: ../lib/python/temporal/abstract_map_dataset.py:373
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(type)s map <%(id)s> with "
 "layer: %(l)s"
 msgstr "东经值必须比西经值大"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:380
-#: ../lib/python/temporal/abstract_map_dataset.py:473
+#: ../lib/python/temporal/abstract_map_dataset.py:381
+#: ../lib/python/temporal/abstract_map_dataset.py:474
 #, fuzzy, python-format
 msgid "End time must be greater than start time for %(type)s map <%(id)s>"
 msgstr "东经值必须比西经值大"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:451
+#: ../lib/python/temporal/abstract_map_dataset.py:452
 #, fuzzy, python-format
 msgid ""
 "Unsupported relative time unit type for %(type)s map <%(id)s> with layer "
 "%(l)s: %(u)s"
 msgstr "无法为%s创建时间戳文件, 地图%s 地图集%s"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:458
+#: ../lib/python/temporal/abstract_map_dataset.py:459
 #, fuzzy, python-format
 msgid "Unsupported relative time unit type for %(type)s map <%(id)s>: %(u)s"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:467
+#: ../lib/python/temporal/abstract_map_dataset.py:468
 #, fuzzy, python-format
 msgid ""
 "End time must be greater than start time for %(typ)s map <%(id)s> with layer "
 "%(l)s"
 msgstr "东经值必须比西经值大"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:782
+#: ../lib/python/temporal/abstract_map_dataset.py:783
 #, python-format
 msgid ""
 "Map <%(id)s> with layer %(layer)s has incorrect time interval, start time is "
 "greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:788
+#: ../lib/python/temporal/abstract_map_dataset.py:789
 #, python-format
 msgid ""
 "Map <%s> has incorrect time interval, start time is greater than end time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:794
+#: ../lib/python/temporal/abstract_map_dataset.py:795
 #, python-format
 msgid "Map <%s> has incorrect start time"
 msgstr ""
 
-#: ../lib/python/temporal/abstract_map_dataset.py:841
+#: ../lib/python/temporal/abstract_map_dataset.py:842
 #, fuzzy, python-format
 msgid "Delete %s dataset <%s> from temporal database"
 msgstr "无法打开栅格图[%s在%s中]"
 
-#: ../lib/python/temporal/abstract_map_dataset.py:891
+#: ../lib/python/temporal/abstract_map_dataset.py:892
 #, python-format
 msgid ""
 "Unable to unregister dataset <%(ds)s> of type %(type)s from the temporal "
 "database. The mapset of the dataset does not match the current mapset"
 msgstr ""
 
+#: ../lib/python/gunittest/gmodules.py:103
+msgid "input='-' must be used when stdin is specified"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:105
+msgid "stdin must be string or buffer, not PIPE"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:108
+msgid "stdin must be used when input='-'"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:110
+msgid "You cannot merge stdout and stderr and not capture them"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:112
+msgid "stdout argument not allowed, it could be overridden"
+msgstr ""
+
+#: ../lib/python/gunittest/gmodules.py:114
+msgid "stderr argument not allowed, it could be overridden"
+msgstr ""
+
 #: ../lib/python/script/db.py:153
 #, python-format
 msgid ""
@@ -4828,32 +4993,32 @@ msgstr ""
 msgid "Fetching data failed"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/python/script/task.py:54
+#: ../lib/python/script/task.py:62
 #, fuzzy
 msgid "unknown"
 msgstr "未知"
 
-#: ../lib/python/script/task.py:168
+#: ../lib/python/script/task.py:176
 #, python-format
 msgid "Parameter element '%(element)s' not found: '%(value)s'"
 msgstr ""
 
-#: ../lib/python/script/task.py:183
+#: ../lib/python/script/task.py:191
 #, fuzzy, python-format
 msgid "Flag not found: %s"
 msgstr "未发现 %s"
 
-#: ../lib/python/script/task.py:202
+#: ../lib/python/script/task.py:210
 #, python-format
 msgid "Parameter '%(name)s' (%(desc)s) is missing."
 msgstr ""
 
-#: ../lib/python/script/task.py:235
+#: ../lib/python/script/task.py:243
 #, fuzzy
 msgid "<required>"
 msgstr " 必须值: %s\n"
 
-#: ../lib/python/script/task.py:495 ../lib/python/script/task.py:499
+#: ../lib/python/script/task.py:503 ../lib/python/script/task.py:507
 #, python-format
 msgid ""
 "Unable to fetch interface description for command '%(cmd)s'.\n"
@@ -4861,16 +5026,51 @@ msgid ""
 "Details: %(det)s"
 msgstr ""
 
-#: ../lib/python/script/task.py:519
+#: ../lib/python/script/task.py:530
 #, python-brace-format
 msgid "Cannot parse interface description of<{name}> module: {error}"
 msgstr ""
 
-#: ../lib/python/script/core.py:58
+#: ../lib/python/script/array.py:157 ../lib/python/script/array.py:207
+#: ../lib/python/script/array.py:254 ../lib/python/script/array.py:305
+#: ../lib/python/script/array.py:356 ../lib/python/script/array.py:398
+#, fuzzy, python-format
+msgid "Invalid kind <%s>"
+msgstr "无法将目录改变到%s"
+
+#: ../lib/python/script/array.py:160 ../lib/python/script/array.py:210
+#: ../lib/python/script/array.py:308 ../lib/python/script/array.py:359
+#, fuzzy, python-format
+msgid "Invalid size <%d>"
+msgstr "无法将目录改变到%s"
+
+#: ../lib/python/script/array.py:197
+msgid ""
+"grass.script.array.read is deprecated and does not work on MS Windows, pass "
+"raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/array.py:247 ../lib/python/script/array.py:392
+#, fuzzy, python-format
+msgid "Invalid FP size <%d>"
+msgstr "无法将目录改变到%s"
+
+#: ../lib/python/script/array.py:251 ../lib/python/script/array.py:395
+#, fuzzy, python-format
+msgid "Invalid integer size <%d>"
+msgstr "无法将目录改变到%s"
+
+#: ../lib/python/script/array.py:346
+msgid ""
+"grass.script.array3d.read is deprecated and does not work on MS Windows, "
+"pass 3D raster name in the constructor"
+msgstr ""
+
+#: ../lib/python/script/core.py:67
 msgid "Cannot find the executable {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:288
+#: ../lib/python/script/core.py:304
 #, python-format
 msgid ""
 "To run the module <%s> add underscore at the end of the option <%s> to avoid "
@@ -4878,103 +5078,103 @@ msgid ""
 "GRASS GIS 7.0 and will be removed in version 7.1."
 msgstr ""
 
-#: ../lib/python/script/core.py:910
+#: ../lib/python/script/core.py:928
 msgid "Mixing value types. Will try to compare after integer conversion"
 msgstr ""
 
-#: ../lib/python/script/core.py:1105
+#: ../lib/python/script/core.py:1123
 #, python-format
 msgid "Element type should be \"cell\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1134 ../lib/python/script/core.py:1199
+#: ../lib/python/script/core.py:1152 ../lib/python/script/core.py:1217
 #, python-format
 msgid "Element type should be \"raster\" and not \"%s\""
 msgstr ""
 
-#: ../lib/python/script/core.py:1354
+#: ../lib/python/script/core.py:1372
 #, fuzzy
 msgid "Unable to list mapsets"
 msgstr "无法打开%s"
 
-#: ../lib/python/script/core.py:1393
+#: ../lib/python/script/core.py:1411
 #, python-format
 msgid "Location <%s> already exists. Operation canceled."
 msgstr ""
 
-#: ../lib/python/script/core.py:1396
+#: ../lib/python/script/core.py:1414
 #, fuzzy, python-format
 msgid "Location <%s> already exists and will be overwritten"
 msgstr "矢量'%s'已经存在,它将会被覆盖。"
 
-#: ../lib/python/script/core.py:1521
+#: ../lib/python/script/core.py:1538
 msgid "Debug level {}"
 msgstr ""
 
-#: ../lib/python/script/core.py:1524
+#: ../lib/python/script/core.py:1541
 msgid "WARNING: Ignoring unsupported debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../lib/python/script/core.py:1540
+#: ../lib/python/script/core.py:1557
 #, fuzzy, python-format
 msgid "Illegal filename <%s>. Cannot be 'NULL' or start with '.'."
 msgstr "非法的文件名。不能是'.'或'NULL'\n"
 
-#: ../lib/python/script/core.py:1549
+#: ../lib/python/script/core.py:1566
 #, fuzzy, python-format
 msgid "Illegal filename <%(s)s>. <%(il)s> not allowed.\n"
 msgstr "非法的文件名。不允许包含字符<%c>。\n"
 
-#: ../lib/python/script/vector.py:82
+#: ../lib/python/script/vector.py:88
 #, python-format
 msgid "Database connection not defined for layer %s"
 msgstr ""
 
-#: ../lib/python/script/vector.py:222
+#: ../lib/python/script/vector.py:228
 #, fuzzy, python-format
 msgid "Missing layer %(layer)d in vector map <%(map)s>"
 msgstr "打开g3d地图 <%s>错误"
 
-#: ../lib/python/script/vector.py:237
+#: ../lib/python/script/vector.py:243
 msgid "vector_db_select() failed"
 msgstr ""
 
-#: ../lib/python/script/vector.py:387
+#: ../lib/python/script/vector.py:395
 #, python-brace-format
 msgid ""
 "v.what output is not valid JSON format:\n"
 " {ret}"
 msgstr ""
 
-#: ../lib/python/script/raster3d.py:85
+#: ../lib/python/script/raster3d.py:86
 msgid "An error occurred while running r3.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:46
+#: ../lib/python/script/raster.py:54
 #, fuzzy, python-format
 msgid ""
 "Unable to write history for <%(map)s>. Raster map <%(map)s> not found in "
 "current mapset."
 msgstr "无法删除线,地图'%s'没有以写模式打开"
 
-#: ../lib/python/script/raster.py:105
+#: ../lib/python/script/raster.py:113
 msgid "An error occurred while running r.mapcalc"
 msgstr ""
 
-#: ../lib/python/script/raster.py:183
+#: ../lib/python/script/raster.py:191
 #, fuzzy
 msgid "No data"
 msgstr "输入矢量的名称"
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "value"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 msgid "label"
 msgstr ""
 
-#: ../lib/python/script/raster.py:190
+#: ../lib/python/script/raster.py:199
 #, fuzzy
 msgid "color"
 msgstr "颜色"
@@ -5072,7 +5272,7 @@ msgstr "无法为写入打开%s"
 #: ../lib/rst/interp_float/resout2d.c:395
 #: ../lib/rst/interp_float/resout2d.c:410
 #: ../lib/rst/interp_float/resout2d.c:426 ../lib/raster/open.c:178
-#: ../lib/raster/open.c:758 ../lib/raster/open.c:795 ../lib/raster/open.c:847
+#: ../lib/raster/open.c:841 ../lib/raster/open.c:878 ../lib/raster/open.c:930
 #, fuzzy, c-format
 msgid "Raster map <%s> not found"
 msgstr "输入矢量'%s'未找到"
@@ -5590,12 +5790,12 @@ msgstr ""
 msgid "Copy %s <%s> to current mapset as <%s>"
 msgstr "当前地图集中没有 %s 文件\n"
 
-#: ../lib/manage/do_copy.c:50
+#: ../lib/manage/do_copy.c:50 ../lib/manage/do_copy.c:67
 #, fuzzy, c-format
 msgid "Unable to copy <%s> to current mapset as <%s>"
 msgstr "当前地图集中没有 %s 文件\n"
 
-#: ../lib/manage/do_copy.c:70
+#: ../lib/manage/do_copy.c:72
 #, c-format
 msgid "%s copied"
 msgstr ""
@@ -5810,7 +6010,7 @@ msgstr "为%s指定了无效的时间戳,地图%s 地图集%s"
 msgid "WARNING: "
 msgstr "警告:"
 
-#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1509
+#: ../lib/gis/error.c:362 ../lib/gis/parser.c:1584
 #, c-format
 msgid "ERROR: "
 msgstr "错误:"
@@ -5946,7 +6146,7 @@ msgstr "复制格式字段"
 msgid "Duplicate compressed field"
 msgstr "复制压缩字段"
 
-#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:593
+#: ../lib/gis/make_mapset.c:66 ../lib/init/grass.py:831
 #, fuzzy, c-format, python-format
 msgid "Location <%s> doesn't exist"
 msgstr "无法打开矢量'%s'的历史记录"
@@ -6072,22 +6272,22 @@ msgstr "GISRC - 变量未设置"
 msgid "Variable '%s' not set"
 msgstr "GISRC - 变量未设置"
 
-#: ../lib/gis/open.c:66
+#: ../lib/gis/open.c:68
 #, c-format
 msgid "G__open(read): mapset <%s> doesn't match xmapset <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:82
+#: ../lib/gis/open.c:89
 #, fuzzy, c-format
 msgid "G__open(read): Unable to open '%s': %s"
 msgstr "无法打开%s"
 
-#: ../lib/gis/open.c:91
+#: ../lib/gis/open.c:98
 #, c-format
 msgid "G__open(write): xmapset <%s> != G_mapset() <%s>"
 msgstr ""
 
-#: ../lib/gis/open.c:109
+#: ../lib/gis/open.c:122
 #, fuzzy, c-format
 msgid "G__open(write): Unable to open '%s': %s"
 msgstr "G_spawn:无法打开文件%s"
@@ -6142,12 +6342,12 @@ msgstr "无效的es:字段 %s 文件 %s (在%s中)"
 msgid "No ellipsoid info given in file %s in <%s>"
 msgstr "文件 %s 没有给定椭球信息(在%s中)"
 
-#: ../lib/gis/mapset_msc.c:61
+#: ../lib/gis/mapset_msc.c:90
 #, fuzzy, c-format
 msgid "Unable to make mapset element %s (%s): %s"
 msgstr "无法生成地图集元素 %s (%s)"
 
-#: ../lib/gis/mapset_msc.c:65
+#: ../lib/gis/mapset_msc.c:94
 #, fuzzy, c-format
 msgid "Unable to access mapset element %s (%s): %s"
 msgstr "无法生成地图集元素 %s (%s)"
@@ -6165,16 +6365,16 @@ msgid "SYNOPSIS"
 msgstr "提要"
 
 #: ../lib/gis/parser_html.c:141 ../lib/gis/parser_rest.c:146
-#: ../lib/init/grass.py:205
+#: ../lib/init/grass.py:333
 msgid "Flags"
 msgstr "标记:"
 
-#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:205
+#: ../lib/gis/parser_html.c:180 ../lib/gis/parser_help.c:206
 msgid "Force launching GUI dialog"
 msgstr ""
 
 #: ../lib/gis/parser_html.c:189 ../lib/gis/parser_rest.c:179
-#: ../lib/init/grass.py:218
+#: ../lib/init/grass.py:347
 msgid "Parameters"
 msgstr "参数:"
 
@@ -6186,6 +6386,10 @@ msgstr "选项:"
 msgid "Default"
 msgstr "默认值:"
 
+#: ../lib/gis/cmprbzip.c:82 ../lib/gis/cmprbzip.c:142
+msgid "GRASS needs to be compiled with BZIP2 for BZIP2 compression"
+msgstr ""
+
 #: ../lib/gis/parser_dependencies.c:122
 msgid "Internal error: option or flag not found"
 msgstr ""
@@ -6277,17 +6481,22 @@ msgstr "没有 ID 的 OGR 要素被忽略。 "
 msgid "Flags:"
 msgstr "标记:"
 
-#: ../lib/gis/parser_help.c:213
+#: ../lib/gis/parser_help.c:205
+#, fuzzy
+msgid "Super quiet module output"
+msgstr "Quiet模式输出"
+
+#: ../lib/gis/parser_help.c:214
 #, fuzzy
 msgid "Parameters:"
 msgstr "参数:"
 
-#: ../lib/gis/parser_help.c:236
+#: ../lib/gis/parser_help.c:237
 #, c-format
 msgid "  %*s   default: %s\n"
 msgstr "  %*s   默认值: %s\n"
 
-#: ../lib/gis/parser_help.c:262
+#: ../lib/gis/parser_help.c:263
 #, c-format
 msgid "  %*s   options: "
 msgstr "  %*s   选项: "
@@ -6584,200 +6793,200 @@ msgstr "一个矢量地图能够连接多个数据库表。这个数字决定使
 msgid "Category value"
 msgstr "类别值"
 
-#: ../lib/gis/parser_standard_options.c:540
+#: ../lib/gis/parser_standard_options.c:541
 msgid "Category values"
 msgstr "类别值"
 
-#: ../lib/gis/parser_standard_options.c:541
-#: ../lib/gis/parser_standard_options.c:555
+#: ../lib/gis/parser_standard_options.c:542
+#: ../lib/gis/parser_standard_options.c:557
 msgid "Example: 1,3,7-9,13"
 msgstr "例如:1,3,7-9,13"
 
-#: ../lib/gis/parser_standard_options.c:547
+#: ../lib/gis/parser_standard_options.c:549
 #, fuzzy
 msgid "Feature id"
 msgstr "要素类型"
 
-#: ../lib/gis/parser_standard_options.c:554
+#: ../lib/gis/parser_standard_options.c:556
 #, fuzzy
 msgid "Feature ids"
 msgstr "要素类型"
 
-#: ../lib/gis/parser_standard_options.c:565
-#: ../lib/gis/parser_standard_options.c:573
+#: ../lib/gis/parser_standard_options.c:567
+#: ../lib/gis/parser_standard_options.c:575
 #, fuzzy
 msgid "Name of input file"
 msgstr "打开文件的名称 %s"
 
-#: ../lib/gis/parser_standard_options.c:581
+#: ../lib/gis/parser_standard_options.c:583
 #, fuzzy
 msgid "Name for output file"
 msgstr "输出栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:590
+#: ../lib/gis/parser_standard_options.c:592
 msgid "Field separator"
 msgstr "字段分隔符"
 
-#: ../lib/gis/parser_standard_options.c:591
+#: ../lib/gis/parser_standard_options.c:593
 msgid "Special characters: pipe, comma, space, tab, newline"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:602
-#: ../lib/gis/parser_standard_options.c:613
+#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:615
 msgid "Color"
 msgstr "颜色"
 
-#: ../lib/gis/parser_standard_options.c:604
+#: ../lib/gis/parser_standard_options.c:606
 msgid "Either a standard color name or R:G:B triplet"
 msgstr "使用一个标准的颜色名或R:G:B三元组"
 
-#: ../lib/gis/parser_standard_options.c:615
+#: ../lib/gis/parser_standard_options.c:617
 #, fuzzy
 msgid "Either a standard color name, R:G:B triplet, or \"none\""
 msgstr "选用标准GRASS颜色,R:G:B三元组或是\"空\""
 
-#: ../lib/gis/parser_standard_options.c:626
+#: ../lib/gis/parser_standard_options.c:628
 #, fuzzy
 msgid "Name of input directory"
 msgstr "打开文件的名称 %s"
 
-#: ../lib/gis/parser_standard_options.c:636
+#: ../lib/gis/parser_standard_options.c:638
 msgid "Units"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:645
+#: ../lib/gis/parser_standard_options.c:647
 msgid "Data type(s)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:655
+#: ../lib/gis/parser_standard_options.c:657
 msgid "Name of mapset (default: current search path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:656
+#: ../lib/gis/parser_standard_options.c:658
 msgid "'.' for current mapset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:664
+#: ../lib/gis/parser_standard_options.c:666
 msgid "Location name"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:665
+#: ../lib/gis/parser_standard_options.c:667
 msgid "Location name (not location path)"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:675
+#: ../lib/gis/parser_standard_options.c:677
 msgid "GRASS GIS database directory"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:676
+#: ../lib/gis/parser_standard_options.c:678
 msgid "Default: path to the current GRASS GIS database"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:688
+#: ../lib/gis/parser_standard_options.c:690
 #, fuzzy
 msgid "Coordinates"
 msgstr "无效的坐标"
 
-#: ../lib/gis/parser_standard_options.c:697
+#: ../lib/gis/parser_standard_options.c:699
 #, fuzzy
 msgid "Name of color table"
 msgstr "输入矢量的名称"
 
-#: ../lib/gis/parser_standard_options.c:708
+#: ../lib/gis/parser_standard_options.c:710
 msgid "String representing NULL value"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:717
+#: ../lib/gis/parser_standard_options.c:719
 #, fuzzy
 msgid "Name of saved region"
 msgstr "无法打开%s"
 
-#: ../lib/gis/parser_standard_options.c:727
+#: ../lib/gis/parser_standard_options.c:729
 #, fuzzy
 msgid "Name of the input space time dataset"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:736
+#: ../lib/gis/parser_standard_options.c:738
 #, fuzzy
 msgid "Name of the input space time datasets"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/gis/parser_standard_options.c:744
+#: ../lib/gis/parser_standard_options.c:746
 #, fuzzy
 msgid "Name of the output space time dataset"
 msgstr "输出栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:752
+#: ../lib/gis/parser_standard_options.c:754
 #, fuzzy
 msgid "Name of the input space time raster dataset"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:761
+#: ../lib/gis/parser_standard_options.c:763
 #, fuzzy
 msgid "Name of the input space time raster datasets"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:769
+#: ../lib/gis/parser_standard_options.c:771
 #, fuzzy
 msgid "Name of the output space time raster dataset"
 msgstr "输出栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:777
+#: ../lib/gis/parser_standard_options.c:779
 #, fuzzy
 msgid "Name of the input space time vector dataset"
 msgstr "输入矢量地图名"
 
-#: ../lib/gis/parser_standard_options.c:786
+#: ../lib/gis/parser_standard_options.c:788
 #, fuzzy
 msgid "Name of the input space time vector datasets"
 msgstr "输入矢量地图名"
 
-#: ../lib/gis/parser_standard_options.c:794
+#: ../lib/gis/parser_standard_options.c:796
 #, fuzzy
 msgid "Name of the output space time vector dataset"
 msgstr "输出矢量地图名"
 
-#: ../lib/gis/parser_standard_options.c:802
+#: ../lib/gis/parser_standard_options.c:804
 #, fuzzy
 msgid "Name of the input space time raster3d dataset"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:811
+#: ../lib/gis/parser_standard_options.c:813
 #, fuzzy
 msgid "Name of the input space time raster3d datasets"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:819
+#: ../lib/gis/parser_standard_options.c:821
 #, fuzzy
 msgid "Name of the output space time raster3d dataset"
 msgstr "输出栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:828
+#: ../lib/gis/parser_standard_options.c:830
 #, fuzzy
 msgid "Type of the input space time dataset"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/gis/parser_standard_options.c:836
+#: ../lib/gis/parser_standard_options.c:838
 #, fuzzy
 msgid "Name of the input map"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:845
+#: ../lib/gis/parser_standard_options.c:847
 #, fuzzy
 msgid "Name of the input maps"
 msgstr "输入栅格的名称"
 
-#: ../lib/gis/parser_standard_options.c:854
+#: ../lib/gis/parser_standard_options.c:856
 #, fuzzy
 msgid "Type of the input map"
 msgstr "无法打开%s"
 
-#: ../lib/gis/parser_standard_options.c:863
+#: ../lib/gis/parser_standard_options.c:865
 #, fuzzy
 msgid "The temporal type of the space time dataset"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/gis/parser_standard_options.c:870
+#: ../lib/gis/parser_standard_options.c:872
 #, fuzzy
 msgid ""
 "WHERE conditions of SQL statement without 'where' keyword used in the "
@@ -6786,24 +6995,33 @@ msgstr ""
 "SQL 语句的 WHERE 子句不使用'where'关键字。(如:income < 1000 and inhab >= "
 "10000)"
 
-#: ../lib/gis/parser_standard_options.c:871
+#: ../lib/gis/parser_standard_options.c:873
 msgid "Example: start_time > '2001-01-01 12:30:00'"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:881
+#: ../lib/gis/parser_standard_options.c:883
 msgid "The method to be used for sampling the input dataset"
 msgstr ""
 
-#: ../lib/gis/parser_standard_options.c:915
+#: ../lib/gis/parser_standard_options.c:917
 #, fuzzy
 msgid "Do not create attribute table"
 msgstr "从属性表中载入数据..."
 
-#: ../lib/gis/parser_standard_options.c:919
+#: ../lib/gis/parser_standard_options.c:921
 #, fuzzy
 msgid "Do not build topology"
 msgstr "建立拓扑...\n"
 
+#: ../lib/gis/parser_standard_options.c:922
+msgid "Advantageous when handling a large number of points"
+msgstr ""
+
+#: ../lib/gis/compress.c:131 ../lib/gis/compress.c:193
+#: ../lib/gis/compress.c:209
+msgid "Request for unsupported compressor"
+msgstr ""
+
 #: ../lib/gis/open_misc.c:49
 #, c-format
 msgid "G__open_misc(read): mapset <%s> doesn't match xmapset <%s>"
@@ -6922,79 +7140,83 @@ msgstr ""
 "\n"
 "描述:\n"
 
-#: ../lib/gis/parser.c:352
+#: ../lib/gis/parser.c:355
 #, c-format
 msgid "BUG in option name, '%s' is not valid"
 msgstr ""
 
-#: ../lib/gis/parser.c:404
+#: ../lib/gis/parser.c:407
 #, c-format
 msgid "BUG in descriptions, option '%s' in <%s> does not exist"
 msgstr ""
 
-#: ../lib/gis/parser.c:521
+#: ../lib/gis/parser.c:525
 msgid "Use either --quiet or --verbose flag, not both. Assuming --verbose."
 msgstr ""
 
-#: ../lib/gis/parser.c:535
+#: ../lib/gis/parser.c:539
 msgid "Use either --quiet or --verbose flag, not both. Assuming --quiet."
 msgstr ""
 
-#: ../lib/gis/parser.c:566
+#: ../lib/gis/parser.c:554
+msgid "Use either --qq or --verbose flag, not both. Assuming --qq."
+msgstr ""
+
+#: ../lib/gis/parser.c:585
 #, fuzzy, c-format
 msgid "Sorry <%s> is not a valid option"
 msgstr "对不起,<%s>不是有效的选项\n"
 
-#: ../lib/gis/parser.c:579
+#: ../lib/gis/parser.c:598
 msgid "Your installation doesn't include GUI, exiting."
 msgstr ""
 
-#: ../lib/gis/parser.c:602 ../lib/init/grass.py:130
+#: ../lib/gis/parser.c:621 ../lib/init/grass.py:187
 #, fuzzy
 msgid "ERROR"
 msgstr "错误:"
 
-#: ../lib/gis/parser.c:867
+#: ../lib/gis/parser.c:941
 #, fuzzy
 msgid "Unable to determine program name"
 msgstr "无法确定用户的家目录"
 
-#: ../lib/gis/parser.c:889 ../lib/gis/parser.c:906
+#: ../lib/gis/parser.c:963 ../lib/gis/parser.c:980
 #, fuzzy, c-format
 msgid "%s: Sorry, <%c> is not a valid flag"
 msgstr "对不起,<%c>不是有效的标记\n"
 
-#: ../lib/gis/parser.c:1036
+#: ../lib/gis/parser.c:1110
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s=> is ambiguous"
 msgstr "对不起,<%s=>不明确\n"
 
-#: ../lib/gis/parser.c:1039
+#: ../lib/gis/parser.c:1113
 #, c-format
 msgid "Option <%s=> matches"
 msgstr ""
 
-#: ../lib/gis/parser.c:1057
+#: ../lib/gis/parser.c:1131
 #, c-format
 msgid "Please update the usage of <%s>: option <%s> has been renamed to <%s>"
 msgstr ""
 
-#: ../lib/gis/parser.c:1070
+#: ../lib/gis/parser.c:1144
 #, fuzzy, c-format
 msgid "%s: Sorry, <%s> is not a valid parameter"
 msgstr "对不起,<%s>不是有效的参数\n"
 
-#: ../lib/gis/parser.c:1076 ../lib/gis/parser.c:1321
+#: ../lib/gis/parser.c:1150 ../lib/gis/parser.c:1396
 #, fuzzy, c-format
 msgid "<%s> is an abbreviation for <%s>"
 msgstr "<%s>在地图集<%s>中"
 
-#: ../lib/gis/parser.c:1081
+#: ../lib/gis/parser.c:1155
 #, c-format
 msgid "Option <%s> does not accept multiple answers"
 msgstr ""
 
-#: ../lib/gis/parser.c:1152
+#: ../lib/gis/parser.c:1227
 #, fuzzy, c-format
 msgid ""
 "Illegal range syntax for parameter <%s>\n"
@@ -7003,7 +7225,7 @@ msgstr ""
 "\n"
 "错误:参数<%s>的非法范围语法\n"
 
-#: ../lib/gis/parser.c:1158
+#: ../lib/gis/parser.c:1233
 #, fuzzy, c-format
 msgid ""
 "Value <%s> out of range for parameter <%s>\n"
@@ -7012,14 +7234,14 @@ msgstr ""
 "\n"
 "错误:值<%s>超出了参数<%s>的范围\n"
 
-#: ../lib/gis/parser.c:1164
+#: ../lib/gis/parser.c:1239
 #, fuzzy, c-format
 msgid "Missing value for parameter <%s>"
 msgstr ""
 "\n"
 "错误:参数<%s>缺少值\n"
 
-#: ../lib/gis/parser.c:1170
+#: ../lib/gis/parser.c:1245
 #, fuzzy, c-format
 msgid ""
 "Value <%s> ambiguous for parameter <%s>\n"
@@ -7028,7 +7250,7 @@ msgstr ""
 "\n"
 "错误:值<%s>超出了参数<%s>的范围\n"
 
-#: ../lib/gis/parser.c:1343
+#: ../lib/gis/parser.c:1418
 #, fuzzy, c-format
 msgid ""
 "Required parameter <%s> not set:\n"
@@ -7038,7 +7260,7 @@ msgstr ""
 "错误:必须的参数<%s>未设置:\n"
 "    (%s)。\n"
 
-#: ../lib/gis/parser.c:1435
+#: ../lib/gis/parser.c:1510
 #, fuzzy, c-format
 msgid ""
 "Option <%s> must be provided in multiples of %d\n"
@@ -7047,37 +7269,37 @@ msgstr ""
 "\n"
 "错误:选项<%s>必须乘以%d\n"
 
-#: ../lib/gis/parser.c:1511 ../lib/gis/parser.c:1518
+#: ../lib/gis/parser.c:1586 ../lib/gis/parser.c:1593
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../lib/gis/parser.c:1628
+#: ../lib/gis/parser.c:1703
 #, fuzzy, c-format
 msgid "%s= is not a separator option"
 msgstr "对不起,<%s>不是有效的选项\n"
 
-#: ../lib/gis/parser.c:1631
+#: ../lib/gis/parser.c:1706
 #, fuzzy, c-format
 msgid "No separator given for %s="
 msgstr "字段分隔符"
 
-#: ../lib/gis/parser.c:1693 ../lib/gis/parser.c:1710
+#: ../lib/gis/parser.c:1768 ../lib/gis/parser.c:1785
 #, fuzzy, c-format
 msgid "%s= is not a file option"
 msgstr "对不起,<%s>不是有效的选项\n"
 
-#: ../lib/gis/parser.c:1695
+#: ../lib/gis/parser.c:1770
 #, fuzzy, c-format
 msgid "Opening multiple files not supported for %s="
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/gis/parser.c:1701
+#: ../lib/gis/parser.c:1776
 #, fuzzy, c-format
 msgid "Unable to open %s file <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/gis/parser.c:1707
+#: ../lib/gis/parser.c:1782
 #, fuzzy, c-format
 msgid "Unable to create %s file <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
@@ -8060,16 +8282,36 @@ msgstr "文件中无效的椭球%s"
 msgid "No ellipsoid info given in file"
 msgstr "文件中没有给出椭球信息"
 
-#: ../lib/raster/format.c:154
+#: ../lib/raster/format.c:162
 #, c-format
 msgid "Fail of initial read of compressed file [%s in %s]"
 msgstr "压缩文件的初始化读取失败[%s在%s中]"
 
+#: ../lib/raster/format.c:176
+#, fuzzy, c-format
+msgid "Fail of initial read of compressed null file [%s in %s]"
+msgstr "压缩文件的初始化读取失败[%s在%s中]"
+
 #: ../lib/raster/init.c:61
 #, fuzzy
 msgid "Raster library not initialized. Programmer forgot to call Rast_init()."
 msgstr "\a错误:系统没有初始化。程序员忘记调用 G_gisinit()\n"
 
+#: ../lib/raster/init.c:109
+#, c-format
+msgid "Unknown compression method <%s>, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:113
+msgid ""
+"No compression is not supported for GRASS raster maps, using default ZLIB"
+msgstr ""
+
+#: ../lib/raster/init.c:118
+#, c-format
+msgid "This GRASS version does not support %s compression, using default ZLIB"
+msgstr ""
+
 #: ../lib/raster/histogram.c:55
 #, c-format
 msgid "Histogram for [%s in %s] missing (run r.support)"
@@ -8100,51 +8342,46 @@ msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 msgid "Error writing compressed FP data for row %d of <%s>: %s"
 msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 
-#: ../lib/raster/put_row.c:390 ../lib/raster/put_row.c:396
+#: ../lib/raster/put_row.c:387 ../lib/raster/put_row.c:393
 #, fuzzy, c-format
 msgid "Error writing compressed data for row %d of <%s>"
 msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 
-#: ../lib/raster/put_row.c:406
+#: ../lib/raster/put_row.c:403
 #, fuzzy, c-format
 msgid "Error writing uncompressed data for row %d of <%s>"
 msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 
-#: ../lib/raster/put_row.c:465
+#: ../lib/raster/put_row.c:462
 #, fuzzy, c-format
 msgid "Error writing data via GDAL for row %d of <%s>"
 msgstr "写空间索引文件时出错。\n"
 
-#: ../lib/raster/put_row.c:489
-#, fuzzy, c-format
-msgid "No null file for <%s>"
-msgstr "无法打开矢量'%s'的历史记录"
-
-#: ../lib/raster/put_row.c:503
+#: ../lib/raster/put_row.c:486
 msgid "GDAL output doesn't support writing null rows separately"
 msgstr ""
 
-#: ../lib/raster/put_row.c:523
+#: ../lib/raster/put_row.c:489
 #, fuzzy, c-format
-msgid "Unable to find a temporary null file <%s>"
-msgstr "找不到临时空文件:%s"
+msgid "No null file for <%s>"
+msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/raster/put_row.c:528
+#: ../lib/raster/put_row.c:513 ../lib/raster/put_row.c:518
 #, fuzzy, c-format
-msgid "Unable to open null file <%s>"
-msgstr "G_spawn:无法打开文件%s"
+msgid "Error writing compressed null data for row %d of <%s>"
+msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 
-#: ../lib/raster/put_row.c:556 ../lib/raster/put_row.c:559
+#: ../lib/raster/put_row.c:552 ../lib/raster/put_row.c:555
 #, fuzzy, c-format
 msgid "Error writing null row %d of <%s>"
 msgstr "写入空行 %d 时出错"
 
-#: ../lib/raster/put_row.c:684
+#: ../lib/raster/put_row.c:680
 #, fuzzy, c-format
 msgid "put_raster_row: raster map <%s> not open for write - request ignored"
 msgstr "%s: 地图 [%s] 没有打开写操作──忽略请求"
 
-#: ../lib/raster/put_row.c:691
+#: ../lib/raster/put_row.c:687
 #, fuzzy
 msgid "put_raster_row: unopened file descriptor - request ignored"
 msgstr "%s: 无法打开文件描述符──忽略请求"
@@ -8235,22 +8472,22 @@ msgstr "无法为[%s在%s中]创建头文件"
 msgid "Unable to create <%s> metadata file for raster map <%s@%s>"
 msgstr "无法为[%s在%s中]创建头文件"
 
-#: ../lib/raster/close.c:75 ../lib/raster/close.c:108
+#: ../lib/raster/close.c:77 ../lib/raster/close.c:110
 #, fuzzy, c-format
 msgid "Invalid descriptor: %d"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/raster/close.c:374
+#: ../lib/raster/close.c:389 ../lib/raster/close.c:514
 #, fuzzy, c-format
 msgid "Unable to rename null file '%s' to '%s': %s"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/raster/close.c:440
+#: ../lib/raster/close.c:459
 #, fuzzy, c-format
 msgid "Unable to rename cell file '%s' to '%s': %s"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/raster/close.c:476
+#: ../lib/raster/close.c:536
 msgid "unable to write f_format file for CELL maps"
 msgstr "无法将CELL地图写入f_format文件"
 
@@ -8338,12 +8575,12 @@ msgstr "已有栅格地图 %d"
 msgid "Raster map <%s@%s>: format field in header file invalid"
 msgstr "[%s]在地图集[%s]中 - 头文件中的格式字段无效"
 
-#: ../lib/raster/open.c:223
+#: ../lib/raster/open.c:236
 #, fuzzy, c-format
-msgid "Raster map <%s@%s>: unsupported compression type %d"
-msgstr "输入矢量'%s'未找到"
+msgid "Compression with %s is not supported"
+msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/raster/open.c:228
+#: ../lib/raster/open.c:240
 #, fuzzy, c-format
 msgid ""
 "Raster map <%s> is in different projection than current region. Found <%s>, "
@@ -8352,92 +8589,92 @@ msgstr ""
 "[%s]在地图集[%s]中 - 与当前范围的投影不同:\n"
 " 找到的地图[%s]在<%s>投影下,当前的投影应该是<%s> "
 
-#: ../lib/raster/open.c:235
+#: ../lib/raster/open.c:247
 #, fuzzy, c-format
 msgid "Raster map <%s> is in different zone (%d) than current region (%d)"
 msgstr "[%s]在地图集[%s]中 - 区域[%d]与当前的范围[%d]不同"
 
-#: ../lib/raster/open.c:240
+#: ../lib/raster/open.c:252
 #, fuzzy, c-format
 msgid "Raster map <%s>: bytes per cell (%d) too large"
 msgstr "[%s]在[%s]中 - 每像元所占比特数(%d)太大"
 
-#: ../lib/raster/open.c:265
+#: ../lib/raster/open.c:277
 #, c-format
 msgid ""
 "Raster map <%s@%s> is a GDAL link but GRASS is compiled without GDAL support"
 msgstr ""
 
-#: ../lib/raster/open.c:273
+#: ../lib/raster/open.c:285
 #, fuzzy, c-format
 msgid "Unable to open %s file for raster map <%s@%s>"
 msgstr "无法打开矢量'%s'的历史记录"
 
-#: ../lib/raster/open.c:310
+#: ../lib/raster/open.c:322
 #, fuzzy, c-format
 msgid "Error reading format for <%s@%s>"
 msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 
-#: ../lib/raster/open.c:347
-#, fuzzy, c-format
-msgid "Unable to read compressed null file for <%s@%s>"
-msgstr "无法打开矢量'%s'的历史记录"
-
-#: ../lib/raster/open.c:512
+#: ../lib/raster/open.c:527
 #, fuzzy
 msgid "Unable to create GDAL link"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/raster/open.c:583 ../lib/raster/gdal.c:476
+#: ../lib/raster/open.c:599 ../lib/raster/gdal.c:476
 #, fuzzy, c-format
 msgid "Invalid map type <%d>"
 msgstr "无法将目录改变到%s"
 
-#: ../lib/raster/open.c:588
+#: ../lib/raster/open.c:604 ../lib/raster/open.c:756
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in the current mapset (%s)"
 msgstr "错误:试图更新不在当前地图集中的地图。"
 
-#: ../lib/raster/open.c:595
+#: ../lib/raster/open.c:611
 #, fuzzy, c-format
 msgid "<%s> is an illegal file name"
 msgstr "opencell: %s - 非法的文件名"
 
-#: ../lib/raster/open.c:609 ../lib/raster/open.c:681
+#: ../lib/raster/open.c:625 ../lib/raster/open.c:704 ../lib/raster/open.c:778
 #, fuzzy, c-format
 msgid "No temp files available: %s"
 msgstr "区域  << %s >>  无效"
 
-#: ../lib/raster/open.c:734
+#: ../lib/raster/open.c:752
+#, fuzzy, c-format
+msgid "Raster map <%s> does not exist in the current mapset (%s)"
+msgstr "错误:试图更新不在当前地图集中的地图。"
+
+#: ../lib/raster/open.c:817
 msgid "Rast_set_fp_type(): can only be called with FCELL_TYPE or DCELL_TYPE"
 msgstr ""
 
-#: ../lib/raster/open.c:792
+#: ../lib/raster/open.c:875
 #, fuzzy, c-format
 msgid "Raster map <%s> not found in mapset <%s>"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/raster/open.c:853
+#: ../lib/raster/open.c:936
 #, fuzzy, c-format
 msgid "Unable to find '%s'"
 msgstr "无法找到[%s]"
 
-#: ../lib/raster/open.c:864
+#: ../lib/raster/open.c:947
 #, fuzzy, c-format
 msgid "Invalid type: field '%s' in file '%s'"
 msgstr "无效的类型:字段%s在文件%s中 "
 
-#: ../lib/raster/open.c:869
+#: ../lib/raster/open.c:952
 #, fuzzy, c-format
 msgid "Missing type: field in file '%s'"
 msgstr "无效的类型:字段%s在文件%s中 "
 
-#: ../lib/raster/open.c:874
+#: ../lib/raster/open.c:957
 #, fuzzy, c-format
 msgid "Raster map <%s> is not xdr: byte_order: %s"
 msgstr "输入矢量'%s'未找到"
 
-#: ../lib/raster/open.c:943
+#: ../lib/raster/open.c:1026
 msgid ""
 "Rast_set_quant_rules() can be called only for raster maps opened for reading"
 msgstr ""
@@ -8477,24 +8714,40 @@ msgstr ""
 msgid "Rast_make_random_colors: min (%d) > max (%d)"
 msgstr ""
 
-#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:845
+#: ../lib/raster/get_row.c:36 ../lib/raster/get_row.c:898
 #, fuzzy, c-format
 msgid "Reading raster map <%s@%s> request for row %d is outside region"
 msgstr "[%s 在 %s 中] - 读取的行 %d 超出范围"
 
-#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:101
-#: ../lib/raster/get_row.c:135 ../lib/raster/get_row.c:142
-#: ../lib/raster/get_row.c:177 ../lib/raster/get_row.c:181
+#: ../lib/raster/get_row.c:95 ../lib/raster/get_row.c:137
+#: ../lib/raster/get_row.c:144 ../lib/raster/get_row.c:187
+#: ../lib/raster/get_row.c:191
 #, fuzzy, c-format
 msgid "Error reading raster data for row %d of <%s>"
 msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
 
-#: ../lib/raster/get_row.c:217
+#: ../lib/raster/get_row.c:102 ../lib/raster/get_row.c:168
+#, fuzzy, c-format
+msgid "Error uncompressing raster data for row %d of <%s>"
+msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
+
+#: ../lib/raster/get_row.c:227
 #, fuzzy, c-format
 msgid "Error reading raster data via GDAL for row %d of <%s>"
 msgstr "写空间索引文件时出错。\n"
 
-#: ../lib/raster/get_row.c:829 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:827 ../lib/raster/get_row.c:832
+#: ../lib/raster/get_row.c:842
+#, fuzzy, c-format
+msgid "Error reading null data for row %d of <%s>"
+msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
+
+#: ../lib/raster/get_row.c:848
+#, fuzzy, c-format
+msgid "Error uncompressing null data for row %d of <%s>"
+msgstr "读取 %s 错误:地图[%s] 地图集[%s],第 %d 行"
+
+#: ../lib/raster/get_row.c:882 ../lib/raster/get_row.c:885
 #, fuzzy, c-format
 msgid "Error reading null row %d for <%s>"
 msgstr "读取空行 %d 出错"
@@ -8740,33 +8993,28 @@ msgstr "未知"
 msgid "Unsupported icon %d"
 msgstr "要素类型"
 
-#: ../lib/display/r_raster.c:128
+#: ../lib/display/r_raster.c:98
 #, c-format
-msgid "%s variable defined, %s ignored"
+msgid "Both %s and %s are defined. %s will be ignored."
 msgstr ""
 
-#: ../lib/display/r_raster.c:147
+#: ../lib/display/r_raster.c:131
 #, c-format
 msgid ""
 "Neither %s (managed by d.mon command) nor %s (used for direct rendering) "
 "defined"
 msgstr ""
 
-#: ../lib/display/r_raster.c:165
+#: ../lib/display/r_raster.c:150
 #, fuzzy, c-format
 msgid "Unknown display driver <%s>"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/display/r_raster.c:166
+#: ../lib/display/r_raster.c:151
 #, fuzzy, c-format
 msgid "Using display driver <%s>..."
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/display/r_raster.c:236
-#, fuzzy, c-format
-msgid "Unable to open file '%s'"
-msgstr "无法打开文件 %s 在 %s 中"
-
 #: ../lib/display/tran_colr.c:107 ../lib/display/tran_colr.c:109
 #, c-format
 msgid "[%s]: No such color"
@@ -8845,17 +9093,17 @@ msgstr "Windows 不支持当前锁定地图集"
 msgid "Unable to write lockfile %s (%s)"
 msgstr "无法打开文件 %s 在 %s 中"
 
-#: ../lib/init/grass.py:74
+#: ../lib/init/grass.py:123
 #, fuzzy
 msgid "WARNING"
 msgstr "警告:"
 
-#: ../lib/init/grass.py:131
+#: ../lib/init/grass.py:188
 #, fuzzy
 msgid "Exiting..."
 msgstr "附加质心:"
 
-#: ../lib/init/grass.py:204
+#: ../lib/init/grass.py:332
 #, fuzzy
 msgid "Usage"
 msgstr ""
@@ -8863,111 +9111,156 @@ msgstr ""
 "用法:\n"
 " "
 
-#: ../lib/init/grass.py:206
+#: ../lib/init/grass.py:334
 msgid "print this help message"
 msgstr ""
 
-#: ../lib/init/grass.py:207
+#: ../lib/init/grass.py:335
 msgid "show version information and exit"
 msgstr ""
 
-#: ../lib/init/grass.py:208
+#: ../lib/init/grass.py:336
 msgid "create given database, location or mapset if it doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:209
+#: ../lib/init/grass.py:337
 msgid "exit after creation of location or mapset. Only with -c flag"
 msgstr ""
 
-#: ../lib/init/grass.py:210
+#: ../lib/init/grass.py:338
+msgid ""
+"force removal of .gislock if exists (use with care!). Only with -text flag"
+msgstr ""
+
+#: ../lib/init/grass.py:339
 msgid "use text based interface (skip welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:211 ../lib/init/grass.py:213 ../lib/init/grass.py:215
+#: ../lib/init/grass.py:340 ../lib/init/grass.py:342 ../lib/init/grass.py:344
 msgid "and set as default"
 msgstr ""
 
-#: ../lib/init/grass.py:212
+#: ../lib/init/grass.py:341
 msgid "use text based interface (show welcome screen)"
 msgstr ""
 
-#: ../lib/init/grass.py:214
+#: ../lib/init/grass.py:343
 msgid "use $DEFAULT_GUI graphical user interface"
 msgstr ""
 
-#: ../lib/init/grass.py:216
+#: ../lib/init/grass.py:345
 msgid "print GRASS configuration parameters"
 msgstr ""
 
-#: ../lib/init/grass.py:217
+#: ../lib/init/grass.py:346
 msgid "options: arch,build,compiler,path,revision"
 msgstr ""
 
-#: ../lib/init/grass.py:219
-msgid "initial database (path to GIS data)"
+#: ../lib/init/grass.py:348
+msgid "initial GRASS GIS database directory"
+msgstr ""
+
+#: ../lib/init/grass.py:349
+msgid "directory containing Locations"
 msgstr ""
 
-#: ../lib/init/grass.py:220
-msgid "initial location"
+#: ../lib/init/grass.py:350
+#, fuzzy
+msgid "initial GRASS Location"
+msgstr "对不起,<%s>不是有效的选项\n"
+
+#: ../lib/init/grass.py:351
+msgid ""
+"directory containing Mapsets with one common coordinate system (projection)"
 msgstr ""
 
-#: ../lib/init/grass.py:221
-msgid "initial mapset"
+#: ../lib/init/grass.py:352
+msgid "initial GRASS Mapset"
 msgstr ""
 
-#: ../lib/init/grass.py:222
-msgid "fully qualified initial mapset directory"
+#: ../lib/init/grass.py:353
+msgid "fully qualified initial Mapset directory"
 msgstr ""
 
-#: ../lib/init/grass.py:223
+#: ../lib/init/grass.py:354
 msgid "Environment variables relevant for startup"
 msgstr ""
 
-#: ../lib/init/grass.py:224
-msgid "select GUI (text, gui)"
+#: ../lib/init/grass.py:355
+msgid "select GUI (text, gui, gtext)"
 msgstr ""
 
-#: ../lib/init/grass.py:225
+#: ../lib/init/grass.py:356
 msgid "set html web browser for help pages"
 msgstr ""
 
-#: ../lib/init/grass.py:226
+#: ../lib/init/grass.py:357
 msgid "set additional path(s) to local GRASS modules or user scripts"
 msgstr ""
 
-#: ../lib/init/grass.py:227
+#: ../lib/init/grass.py:358
 msgid "set additional GISBASE for locally installed GRASS Addons"
 msgstr ""
 
-#: ../lib/init/grass.py:228
+#: ../lib/init/grass.py:359
 msgid "shell script to be processed as batch job"
 msgstr ""
 
-#: ../lib/init/grass.py:229
+#: ../lib/init/grass.py:360
 msgid "set python shell name to override 'python'"
 msgstr ""
 
-#: ../lib/init/grass.py:267
+#: ../lib/init/grass.py:361
+msgid "execute GRASS module or script"
+msgstr ""
+
+#: ../lib/init/grass.py:362
+msgid "provided executable will be executed in GRASS session"
+msgstr ""
+
+#: ../lib/init/grass.py:363
+msgid "GRASS module, script or any other executable"
+msgstr ""
+
+#: ../lib/init/grass.py:364
+msgid "parameters of the executable"
+msgstr ""
+
+#: ../lib/init/grass.py:365
+msgid "standard flags"
+msgstr ""
+
+#: ../lib/init/grass.py:390
+msgid "The APPDATA variable is not set, ask your operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:393
+msgid ""
+"The APPDATA variable points to directory which does not exist, ask your "
+"operating system support"
+msgstr ""
+
+#: ../lib/init/grass.py:440
 #, fuzzy, python-format
 msgid ""
 "Unable to create temporary directory <grass7-%(user)s-%(lock)s>! Exiting."
 msgstr "无法分配内存\n"
 
-#: ../lib/init/grass.py:302
-#, python-format
-msgid "ERROR: Invalid line in RC file: '%s' (%s)\n"
+#: ../lib/init/grass.py:493
+#, python-brace-format
+msgid "Invalid line in RC file ({file}): '{line}' ({error})\n"
 msgstr ""
 
-#: ../lib/init/grass.py:355
+#: ../lib/init/grass.py:547
 #, fuzzy, python-format
 msgid "GUI <%s> not supported in this version"
 msgstr "在这一版本中没有编译请求的格式"
 
-#: ../lib/init/grass.py:500
+#: ../lib/init/grass.py:704
 msgid "Searched for a web browser, but none found"
 msgstr ""
 
-#: ../lib/init/grass.py:534
+#: ../lib/init/grass.py:742
 msgid ""
 "The python command does not work as expected!\n"
 "Please check your GRASS_PYTHON environment variable.\n"
@@ -8977,280 +9270,296 @@ msgid ""
 "Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:546
+#: ../lib/init/grass.py:754
 msgid ""
 "It appears that the X Windows system is not active.\n"
 "A graphical based user interface is not supported.\n"
+"(DISPLAY variable is not set.)\n"
 "Switching to text based interface mode.\n"
 "\n"
-"Hit RETURN to continue"
+"Hit RETURN to continue.\n"
 msgstr ""
 
-#: ../lib/init/grass.py:598
-#, fuzzy, python-format
-msgid "ERROR: <%s> is not a valid GRASS location"
-msgstr "对不起,<%s>不是有效的选项\n"
+#: ../lib/init/grass.py:833
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT Mapset is missing"
+msgstr ""
+
+#: ../lib/init/grass.py:836
+#, python-format
+msgid "<%s> is not a valid GRASS Location because PERMANENT is not a directory"
+msgstr ""
 
-#: ../lib/init/grass.py:601
+#: ../lib/init/grass.py:840
 #, python-format
 msgid ""
-"Mapset <%s> doesn't exist in GRASS location <%s>. A new mapset can be "
-"created by '-c' switch."
+"<%s> is not a valid GRASS Location because PERMANENT Mapset does not have a "
+"DEFAULT_WIND file (default computational region)"
+msgstr ""
+
+#: ../lib/init/grass.py:844
+#, python-brace-format
+msgid ""
+"Mapset <{mapset}> doesn't exist in GRASS Location <{loc}>. A new mapset can "
+"be created by '-c' switch."
 msgstr ""
 
-#: ../lib/init/grass.py:620
+#: ../lib/init/grass.py:907
 #, python-format
 msgid "Failed to create new location. The location <%s> already exists."
 msgstr ""
 
-#: ../lib/init/grass.py:652
+#: ../lib/init/grass.py:918
 msgid "Missing WIND file fixed"
 msgstr ""
 
-#: ../lib/init/grass.py:664
+#: ../lib/init/grass.py:930
 msgid ""
 "GISDBASE, LOCATION_NAME and MAPSET variables not set properly.\n"
 "Interactive startup needed."
 msgstr ""
 
-#: ../lib/init/grass.py:678
-msgid ""
-"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
-"missing package (usually 'grass-gui')."
-msgstr ""
-
-#: ../lib/init/grass.py:685
+#: ../lib/init/grass.py:954
 #, python-format
 msgid ""
 "Invalid user interface specified - <%s>. Use the --help option to see valid "
 "interface names."
 msgstr ""
 
-#: ../lib/init/grass.py:698
+#: ../lib/init/grass.py:973
 msgid ""
-"Error in GUI startup. If necessary, please report this error to the GRASS "
-"developers.\n"
-"Switching to text mode now.\n"
-"\n"
-"Hit RETURN to continue..."
+"Error in GUI startup. See messages above (if any) and if necessary, please "
+"report this error to the GRASS developers.\n"
+"On systems with package manager, make sure you have the right GUI package, "
+"probably named grass-gui, installed.\n"
+"To run GRASS GIS in text mode use the -text flag."
 msgstr ""
 
-#: ../lib/init/grass.py:708
+#: ../lib/init/grass.py:981
 msgid ""
-"Received EXIT message from GUI.\n"
-"GRASS is not started. Bye."
+"Exit was requested in GUI.\n"
+"GRASS GIS will not start. Bye."
 msgstr ""
 
-#: ../lib/init/grass.py:711
+#: ../lib/init/grass.py:984
 msgid ""
 "Invalid return code from GUI startup script.\n"
 "Please advise GRASS developers of this error."
 msgstr ""
 
-#: ../lib/init/grass.py:722
+#: ../lib/init/grass.py:1031
+#, python-brace-format
 msgid ""
 "Error reading data path information from g.gisenv.\n"
-"GISDBASE=%(gisbase)s\n"
-"LOCATION_NAME=%(location)s\n"
-"MAPSET=%(mapset)s\n"
+"GISDBASE={gisbase}\n"
+"LOCATION_NAME={location}\n"
+"MAPSET={mapset}\n"
 "\n"
-"Check the <%s(file)> file."
+"Check the <{file}> file."
 msgstr ""
 
-#: ../lib/init/grass.py:749
-#, python-format
-msgid "Environmental variable '%s' already set, ignoring value '%s'"
-msgstr ""
-
-#: ../lib/init/grass.py:811
+#: ../lib/init/grass.py:1114
 msgid "Default locale settings are missing. GRASS running with C locale."
 msgstr ""
 
-#: ../lib/init/grass.py:816
-#, python-format
-msgid ""
-"A language override has been requested. Trying to switch GRASS into '%s'..."
-msgstr ""
-
-#: ../lib/init/grass.py:875
+#: ../lib/init/grass.py:1183
 #, python-format
 msgid "Path '%s' doesn't exist"
 msgstr ""
 
-#: ../lib/init/grass.py:877
+#: ../lib/init/grass.py:1185
 #, python-format
 msgid "Path '%s' not accessible."
 msgstr ""
 
 #. GTC %s is mapset's folder path
-#: ../lib/init/grass.py:882
+#: ../lib/init/grass.py:1190
 #, python-format
 msgid "You are not the owner of '%s'."
 msgstr ""
 
-#: ../lib/init/grass.py:891
+#: ../lib/init/grass.py:1198
 #, python-format
 msgid ""
 "%(user)s is currently running GRASS in selected mapset (file %(file)s "
-"found). Concurrent use not allowed."
+"found). Concurrent use not allowed.\n"
+"You can force launching GRASS using -f flag (note that you need permission "
+"for this operation). Have another look in the processor manager just to be "
+"sure..."
 msgstr ""
 
-#: ../lib/init/grass.py:895
+#: ../lib/init/grass.py:1205
+#, python-format
+msgid ""
+"%(user)s is currently running GRASS in selected mapset (file %(file)s "
+"found). Forcing to launch GRASS..."
+msgstr ""
+
+#: ../lib/init/grass.py:1209
 #, python-format
 msgid ""
 "Unable to properly access '%s'.\n"
 "Please notify system personel."
 msgstr ""
 
-#: ../lib/init/grass.py:910
+#: ../lib/init/grass.py:1230
 #, fuzzy
 msgid "Building user fontcap..."
 msgstr "建立拓扑...\n"
 
-#: ../lib/init/grass.py:962
-#, python-format
-msgid "Unsupported shell <%(sh)s>: %(env)s"
-msgstr ""
-
-#: ../lib/init/grass.py:967
+#: ../lib/init/grass.py:1289
 #, fuzzy
 msgid "The SHELL variable is not set"
 msgstr "GISRC - 变量未设置"
 
-#: ../lib/init/grass.py:978
+#: ../lib/init/grass.py:1305
+#, python-brace-format
+msgid "Unsupported shell <{sh}>: {env_file}"
+msgstr ""
+
+#: ../lib/init/grass.py:1321
 #, python-format
 msgid ""
-"Job file '%s' has been defined in the 'GRASS_BATCH_JOB' variable but not "
+"Job file <%s> has been defined in the 'GRASS_BATCH_JOB' variable but not "
 "found. Exiting.\n"
 "\n"
 "Use 'unset GRASS_BATCH_JOB' to disable batch job processing."
 msgstr ""
 
-#: ../lib/init/grass.py:983
+#: ../lib/init/grass.py:1328
 #, python-format
-msgid "Change file permission to 'executable' for '%s'"
+msgid "Change file permission to 'executable' for <%s>"
 msgstr ""
 
-#: ../lib/init/grass.py:985
-#, python-format
-msgid "Executing '%s' ..."
-msgstr ""
+#: ../lib/init/grass.py:1343
+#, fuzzy, python-format
+msgid "Executing <%s> ..."
+msgstr "附加质心:"
 
-#: ../lib/init/grass.py:990
-#, python-format
-msgid "Execution of '%s' finished."
-msgstr ""
+#: ../lib/init/grass.py:1350
+#, fuzzy, python-brace-format
+msgid ""
+"Execution of <{cmd}> failed:\n"
+"{error}"
+msgstr "连接失败。\n"
 
-#: ../lib/init/grass.py:996
-#, python-format
-msgid "GRASS GUI should be <%s>"
-msgstr ""
+#: ../lib/init/grass.py:1353
+#, fuzzy, python-format
+msgid "Execution of <%s> finished."
+msgstr "无法打开文件 %s 在 %s 中"
+
+#: ../lib/init/grass.py:1384
+#, fuzzy
+msgid "Unable to close GUI. {}"
+msgstr "无法打开%s"
 
-#: ../lib/init/grass.py:1039
+#: ../lib/init/grass.py:1411
 #, python-format
 msgid "Welcome to GRASS GIS %s"
 msgstr ""
 
-#: ../lib/init/grass.py:1059
+#: ../lib/init/grass.py:1433
 msgid "GRASS GIS homepage:"
 msgstr ""
 
 #. GTC Running through: SHELL NAME
-#: ../lib/init/grass.py:1061
+#: ../lib/init/grass.py:1435
 msgid "This version running through:"
 msgstr ""
 
-#: ../lib/init/grass.py:1063
+#: ../lib/init/grass.py:1437
 msgid "Help is available with the command:"
 msgstr ""
 
-#: ../lib/init/grass.py:1064
+#: ../lib/init/grass.py:1438
 msgid "See the licence terms with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1065
+#: ../lib/init/grass.py:1439
 msgid "See citation options with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1068
+#: ../lib/init/grass.py:1442
 msgid "If required, restart the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1070
+#: ../lib/init/grass.py:1444
 msgid "Start the GUI with:"
 msgstr ""
 
-#: ../lib/init/grass.py:1072
+#: ../lib/init/grass.py:1446
 msgid "When ready to quit enter:"
 msgstr ""
 
-#: ../lib/init/grass.py:1159
+#: ../lib/init/grass.py:1534
 msgid "2D and 3D raster MASKs present"
 msgstr ""
 
-#: ../lib/init/grass.py:1160
+#: ../lib/init/grass.py:1535
 msgid "Raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1161
+#: ../lib/init/grass.py:1536
 msgid "3D raster MASK present"
 msgstr ""
 
-#: ../lib/init/grass.py:1202
-#, python-format
-msgid "Batch job '%s' (defined in GRASS_BATCH_JOB variable) was executed."
-msgstr ""
-
-#: ../lib/init/grass.py:1203 ../lib/init/grass.py:1208
-msgid "Goodbye from GRASS GIS"
-msgstr ""
-
-#: ../lib/init/grass.py:1206
+#: ../lib/init/grass.py:1576
 #, fuzzy
 msgid "Done."
 msgstr "无"
 
-#: ../lib/init/grass.py:1213
+#: ../lib/init/grass.py:1578
+msgid "Goodbye from GRASS GIS"
+msgstr ""
+
+#: ../lib/init/grass.py:1583
 msgid "Cleaning up temporary files..."
 msgstr ""
 
-#: ../lib/init/grass.py:1227
+#: ../lib/init/grass.py:1603
 msgid "Please install the GRASS GIS development package"
 msgstr ""
 
-#: ../lib/init/grass.py:1259
+#: ../lib/init/grass.py:1635
 #, fuzzy, python-format
 msgid "Parameter <%s> not supported"
 msgstr "不支持的 OGR 要素类型 %d"
 
-#: ../lib/init/grass.py:1382
-msgid "Flag -e required also flag -c"
+#: ../lib/init/grass.py:1779
+msgid "Flag -e requires also flag -c"
 msgstr ""
 
-#: ../lib/init/grass.py:1425
-#, python-format
+#: ../lib/init/grass.py:1826
+#, python-brace-format
 msgid ""
-"Unable to start GRASS. You can:\n"
-" - Launch GRASS with '-gui' switch (`grass70 -gui`)\n"
-" - Create manually GISRC file (%s)\n"
-" - Launch GRASS with path to the location/mapset as an argument (`grass70 /"
-"path/to/location/mapset`)"
+"Unable to start GRASS GIS. You have the choice to:\n"
+" - Launch the GRASS GIS interface with the '-gui' switch (`{cmd_name} -"
+"gui`)\n"
+" - Launch GRASS GIS directly with path to the location/mapset as an argument "
+"(`{cmd_name} /path/to/location/mapset`)\n"
+" - Create manually the GISRC file ({gisrcrc})"
 msgstr ""
 
-#: ../lib/init/grass.py:1435
+#: ../lib/init/grass.py:1841
 msgid "Creating new GRASS GIS location/mapset..."
 msgstr ""
 
-#: ../lib/init/grass.py:1437
+#: ../lib/init/grass.py:1843
 msgid "Starting GRASS GIS..."
 msgstr ""
 
-#: ../lib/init/grass.py:1495
+#: ../lib/init/grass.py:1864
+msgid ""
+"<{}> requested, but not available. Run GRASS in text mode (-text) or install "
+"missing package (usually 'grass-gui')."
+msgstr ""
+
+#: ../lib/init/grass.py:1918
 #, python-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
-#: ../lib/init/grass.py:1510
+#: ../lib/init/grass.py:1940
 #, fuzzy, python-format
 msgid "Failed to start shell '%s'"
 msgstr "无法打开文件 %s 在 %s 中"
@@ -9522,13 +9831,62 @@ msgstr "G_malloc:内存溢出"
 #~ msgid "Out of memmory"
 #~ msgstr "G_malloc:内存溢出"
 
+#, fuzzy
+#~ msgid ""
+#~ "Unable to check table. There is no temporal database connection defined "
+#~ "for mapset <%(mapset)s>"
+#~ msgstr "无法打开基准面表文件:%s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch one. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "无法打开矢量'%s'的历史记录"
+
+#, fuzzy
+#~ msgid ""
+#~ "Unable to fetch all. There is no temporal database connection defined for "
+#~ "mapset <%(mapset)s>"
+#~ msgstr "无法打开矢量'%s'的历史记录"
+
+#, fuzzy
+#~ msgid "Unable to find a temporary null file <%s>"
+#~ msgstr "找不到临时空文件:%s"
+
+#, fuzzy
+#~ msgid "Unable to open null file <%s>"
+#~ msgstr "G_spawn:无法打开文件%s"
+
 #~ msgid "ERROR: option <%s>: <%s> exists.\n"
 #~ msgstr "错误:选项<%s>:<%s>已存在。\n"
 
 #, fuzzy
+#~ msgid "Invalid offset (%d)"
+#~ msgstr "无法将目录改变到%s"
+
+#, fuzzy
+#~ msgid "Unable to open file '%s'"
+#~ msgstr "无法打开文件 %s 在 %s 中"
+
+#, fuzzy
 #~ msgid "Vector map <%s> is not opened on topology level"
 #~ msgstr "输入矢量'%s'未找到"
 
+#~ msgid "Background color"
+#~ msgstr "背景颜色"
+
+#, fuzzy
+#~ msgid "Removing empty 3D raster maps"
+#~ msgstr "输入栅格的名称"
+
+#, fuzzy
+#~ msgid "Mode type: {0} not supported."
+#~ msgstr "不支持的 OGR 要素类型 %d"
+
+#, fuzzy
+#~ msgid "Invalid type {0}"
+#~ msgstr "无法将目录改变到%s"
+
 #, fuzzy
 #~ msgid "Attributes for category %d not found"
 #~ msgstr "类型为 %d 的记录未找到"
@@ -9550,22 +9908,3 @@ msgstr "G_malloc:内存溢出"
 #, fuzzy
 #~ msgid "Cannot fetch row"
 #~ msgstr "无法获取图层信息"
-
-#~ msgid "Background color"
-#~ msgstr "背景颜色"
-
-#, fuzzy
-#~ msgid "Mode type: {0} not supported."
-#~ msgstr "不支持的 OGR 要素类型 %d"
-
-#, fuzzy
-#~ msgid "Invalid type {0}"
-#~ msgstr "无法将目录改变到%s"
-
-#, fuzzy
-#~ msgid "Invalid size {0}"
-#~ msgstr "无法将目录改变到%s"
-
-#, fuzzy
-#~ msgid "Removing empty 3D raster maps"
-#~ msgstr "输入栅格的名称"
diff --git a/locale/po/grassmods_ar.po b/locale/po/grassmods_ar.po
index e01709b..5109273 100644
--- a/locale/po/grassmods_ar.po
+++ b/locale/po/grassmods_ar.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_ar\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2005-03-09 12:50+0100\n"
 "Last-Translator: Dr. Alaa Masoud <alaamasoud at hotmail.com>\n"
 "Language-Team: Arabic <grass-translations at lists.osgeo.org>\n"
@@ -249,6 +249,7 @@ msgstr "غير موجود <%s> الراستر"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -482,6 +483,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات dbmscap\n"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -621,29 +627,29 @@ msgstr "<%s> لم يمكن فتح"
 msgid "Unable to open database:"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "لم يتم الإتصال بقاعدة البيانات\n"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "غير موجود <%s> الراستر"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -655,6 +661,11 @@ msgstr "لم يتم تحديث الحدود"
 msgid "Unable grant on table:"
 msgstr "<%s> لم يمكن فتح"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "<%s> لم يمكن فتح"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -782,7 +793,7 @@ msgstr "<%s> لم يمكن فتح"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -860,17 +871,17 @@ msgstr "اسم الجدول"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -904,39 +915,39 @@ msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -982,7 +993,7 @@ msgstr "عرض كل مشغلات قاعدة البيانات"
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1012,7 +1023,7 @@ msgstr "عدم انشاء جدول الخواص"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1108,10 +1119,10 @@ msgid "Unable to open database <%s>"
 msgstr "<%s> لم يمكن فتح"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1307,11 +1318,11 @@ msgstr "ملف المدخل"
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -1347,10 +1358,10 @@ msgstr "<%s> اسم الملف المستخدم لل"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "الخريطة المخرجة"
@@ -1360,7 +1371,7 @@ msgstr "الخريطة المخرجة"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "فاصل التسجيل الراسى للمخرج "
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1369,7 +1380,7 @@ msgstr "فاصل التسجيل الراسى للمخرج "
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "(1/0) اسم الملف البينرى "
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 #, fuzzy
 msgid "Do not include column names in output"
 msgstr "لاتشمل اسماء الأعمدة في المخرج"
@@ -1379,7 +1390,7 @@ msgstr "لاتشمل اسماء الأعمدة في المخرج"
 msgid "Describe query only (don't run it)"
 msgstr "(وصف الاستفهام فقط(بدون تنفيذ"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 #, fuzzy
 msgid "Vertical output (instead of horizontal)"
 msgstr "(مخرج راسي (بدلا من الافقي"
@@ -1430,6 +1441,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "اسم الخريطة الراسترية الحاوية على درجات الإنحدار"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 #, fuzzy
 msgid "Ignore SQL errors and continue"
 msgstr "اهمال اخطاء اس.كيو.ال والاستمرار"
@@ -1607,7 +1619,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1729,7 +1740,7 @@ msgstr "لم يمكن اختيار البيانات من الجدول"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1737,15 +1748,15 @@ msgstr "لم يمكن اختيار البيانات من الجدول"
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1843,7 +1854,7 @@ msgstr "لم يتم تحديث الحدود"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1893,7 +1904,7 @@ msgstr " 2-%d اسماء الخرائط المدخلة"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1906,26 +1917,27 @@ msgstr " 2-%d اسماء الخرائط المدخلة"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "%s بالمشغل %s لم يمكن فتح قاعدة البيانات"
@@ -1936,7 +1948,8 @@ msgid "Column type not supported (must be string)"
 msgstr "نوع العمود غير مدعم"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2083,13 +2096,13 @@ msgstr "%s لم يمكن فتح ملف المدى ل"
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2097,8 +2110,8 @@ msgstr "%s لم يمكن فتح ملف المدى ل"
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2142,10 +2155,11 @@ msgstr "عدد نقاط الإستيفاء"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2159,13 +2173,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2174,6 +2191,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2189,7 +2207,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2209,11 +2227,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2225,27 +2243,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2263,74 +2281,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2340,6 +2361,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2355,6 +2377,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2373,6 +2396,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2381,15 +2405,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2426,7 +2451,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "عرض الهيئات المدعمة والخروج"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "%s لم يمكن فتح "
@@ -3025,69 +3050,70 @@ msgid "Vector map <%s> not found"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -3153,12 +3179,13 @@ msgstr "اسم الطبقة المستخدمة كدرجة لون"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, fuzzy, c-format
 msgid "Unable to open file <%s>"
@@ -3287,7 +3314,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3453,7 +3480,7 @@ msgid "Area:"
 msgstr "المساحة\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3469,7 +3496,7 @@ msgstr "لم يمكن اختيار البيانات من الجدول"
 msgid "No attribute table for layer %d"
 msgstr "غير موجود <%s> الراستر"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3482,15 +3509,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "%s بالمشغل %s لم يمكن فتح قاعدة البيانات"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "%s لم يتم منح الإمتياز على الجدول"
@@ -3513,6 +3541,7 @@ msgid ""
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3521,6 +3550,7 @@ msgid "extract"
 msgstr "عدم انشاء جدول الخواص"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3531,10 +3561,10 @@ msgstr "الصفر قيمة حقيقية"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "نوع المظهر"
@@ -3556,12 +3586,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "عدم انشاء جدول الخواص"
@@ -3582,39 +3611,45 @@ msgstr "الصفر قيمة حقيقية"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3630,7 +3665,10 @@ msgstr "الصفر قيمة حقيقية"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3702,7 +3740,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3749,45 +3787,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3831,11 +3870,11 @@ msgstr "نوع العمود غير مدعم"
 msgid "Format <%s> does not support writing"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3985,9 +4024,9 @@ msgstr "الملف  الأسكى الراسترى المطلوب ادخاله"
 msgid "Name for output file where to save current settings"
 msgstr "اسم الملف الخرج المحتوى على مصفوفة الخطا وعامل كبا"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 #, fuzzy
 msgid "List supported formats and exit"
 msgstr "عرض الهيئات المدعمة والخروج"
@@ -4010,7 +4049,7 @@ msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
 msgid "Print current status in shell script style"
 msgstr "طباعة الأحصاء فى صورة شل سكربت"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "طبقتين يجب تحديدهم"
@@ -4026,18 +4065,18 @@ msgid "%s= must be specified"
 msgstr "طبقتين يجب تحديدهم"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "عرض الهيئات المدعمة والخروج"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4048,66 +4087,67 @@ msgstr "عرض الهيئات المدعمة والخروج"
 msgid "network"
 msgstr "dig قراءة ملف...\n"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr ""
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4119,10 +4159,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4135,50 +4176,86 @@ msgstr ""
 msgid "Cost"
 msgstr "درجة الوضوح"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "عدد الأعمدة"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "أقصى مسافة من نقطة اارؤية بالأمتار"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "اسم الخريطة الراسترية الجديدة"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr " nv لون\n"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4187,10 +4264,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4206,8 +4283,8 @@ msgstr "%-5d تم تخطى فئات النقط الميت\n"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4236,22 +4313,22 @@ msgstr "%s لم يتم منح الإمتياز على الجدول"
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4260,17 +4337,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "لم يمكن حشر صف جديد: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d تحديث الخطا\n"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4281,7 +4358,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4291,7 +4368,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 msgid "geometry"
 msgstr ""
 
@@ -4344,17 +4421,17 @@ msgid "Unable to get category list <%s>"
 msgstr "طباعة عناوين الفئة"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, fuzzy, c-format
 msgid "Required parameter <%s> not set"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "dig_att لم يمكن العثور على ملف"
@@ -4654,6 +4731,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "اسم الخريطة الراسترية الحاوية على درجات الإنحدار"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4674,12 +4752,15 @@ msgstr "اسم الخريطة الراسترية الحاوية على درجا
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4843,11 +4924,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "لم يتم الإتصال بقاعدة البيانات\n"
@@ -4986,9 +5067,9 @@ msgid "Remove existing color table"
 msgstr "بقاء جدول الألوان الحالى "
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5053,7 +5134,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5069,8 +5150,7 @@ msgstr "طبقتين يجب تحديدهم"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5096,6 +5176,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
@@ -5121,7 +5202,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5130,13 +5211,14 @@ msgstr "اسم الخريطة الراسترية الناتجة"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, fuzzy, c-format
 msgid "3D raster map <%s> not found"
@@ -5168,8 +5250,9 @@ msgstr "التوقيع ..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5215,7 +5298,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -5270,6 +5353,7 @@ msgid "Point out of range"
 msgstr "عدد الصفوف"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5278,15 +5362,17 @@ msgstr "عدد الصفوف"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5381,14 +5467,15 @@ msgstr "خريطة الإرتفاعات المخرجة بعد الملىء"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "الخريطة المخرجة"
@@ -5587,15 +5674,15 @@ msgstr "طريقة الاستيفاء المستخدمة"
 msgid "Input failed"
 msgstr "ملف المدخل"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "ملف المدخل"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr ""
 
@@ -5640,9 +5727,9 @@ msgstr "نوع العمود غير مدعم"
 msgid "Point without category"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5671,7 +5758,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "الصفر قيمة حقيقية"
+msgstr "التوقيع ..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5750,9 +5837,9 @@ msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات d
 msgid "3D raster map <%s> created"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5763,86 +5850,128 @@ msgstr "لم يمكن حشر صف جديد: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "إدخال خريطة راسترية بينرية "
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "الخريطة الراسترية لنقاط البدء"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "أقصى مسافة من نقطة اارؤية بالأمتار"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr ""
+"\n"
+"\n"
+"%d :عدد النقاط\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "%c :نوع غير معروف"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr ""
+"\n"
+"\n"
+"%d :عدد النقاط\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "الخريطة الراسترية لنقاط البدء"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "إدخال خريطة راسترية بينرية "
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5862,18 +5991,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "الملف الراسترى المدخل"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "اسم الجدول"
@@ -5908,9 +6039,9 @@ msgstr "اسم الخريطة الراسترية المحتوية على معل
 msgid "Name of column containing z coordinate"
 msgstr "اسم الخريطة الراسترية المحتوية على معلومات التكلفة لخلية الشبكة"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "مخرج متبادل البيتات"
@@ -5960,7 +6091,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "لم يتم فتح إختيار المؤشر"
@@ -5979,7 +6110,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -6007,7 +6138,85 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d نقطة كتبت للمخرج\n"
 msgstr[1] "%d نقطة كتبت للمخرج\n"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+#, fuzzy
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr "إعادة توقيع خريطة راسترية من مكان إلى المكان الحالى"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+#, fuzzy
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "%s لم يمكن فتح "
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+#, fuzzy
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "%s لم يمكن فتح "
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "طباعة نوع الملف الراسترى فقط"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+#, fuzzy
+msgid "Projection of input dataset and current location appear to match"
+msgstr "إعادة توقيع خريطة راسترية من مكان إلى المكان الحالى"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "%s لم يمكن فتح "
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "%s:منطقة غير صالحة"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "نوع غير معروف"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6030,7 +6239,7 @@ msgstr[1] "%d نقطة كتبت للمخرج\n"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6039,7 +6248,7 @@ msgstr[1] "%d نقطة كتبت للمخرج\n"
 msgid "statistics"
 msgstr "عدم انشاء جدول الخواص"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6680,8 +6889,8 @@ msgstr "نوع العمود غير مدعم"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "اسم الخريطة الراسترية الناتجة"
@@ -6742,13 +6951,13 @@ msgid "Breaking lines..."
 msgstr "التوقيع ..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "الخريطة الفيكتورية لنقاط البدء"
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "وصل الفئات...\n"
@@ -6758,12 +6967,12 @@ msgstr "وصل الفئات...\n"
 msgid "Merging lines..."
 msgstr "التوقيع ..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 #, fuzzy
 msgid "Attaching islands..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "لم يتم حساب شبه مركز المساحة"
 
@@ -6779,13 +6988,14 @@ msgstr "كتابة ملف جديد...\n"
 msgid "Attribute not found"
 msgstr "غير موجود <%s> الراستر"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "كتابة رؤوس قمم الخطوط"
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "لم يمكن حشر صف جديد: %s"
@@ -6863,92 +7073,93 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "عدد النقاط المطلوب تخصيصها"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "dig عطل فى فتح ملف المدخل"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "اسم الخريطة الراسترية المحتوية على معلومات التكلفة لخلية الشبكة"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "نوع جدول الألوان"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 #, fuzzy
 msgid "Create 3D output"
 msgstr "مخرج متبادل البيتات"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "عدد النقاط المطلوب تخصيصها"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d نقطة كتبت للمخرج\n"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr ""
@@ -6957,36 +7168,37 @@ msgstr ""
 "#-#-#-#-#  grassmods_ar.po (grassmods_ar)  #-#-#-#-#\n"
 "اسم الملف الراسترى الموجود"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "استخدام المنطقة الحالية"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "استخدام المنطقة الحالية"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "الخريطة الفيكتورية لنقاط البدء"
@@ -7033,7 +7245,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "اسم الخريطة الراسترية المطلوب استفهامها"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "<%s> اسم الملف المستخدم لل"
@@ -7047,80 +7259,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "جداول النظام بدلا من جداول المستخدم"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
+#: ../vector/v.what.rast/main.c:170
 #, fuzzy, c-format
-msgid "Column <%s> not found"
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "نوع العمود غير مدعم"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "التوقيع ..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "<%s>لم يتم العثور على الخريطة المدخلة\n"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "استخدام المنطقة الحالية"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, fuzzy, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d فئات محملة من الفيكتور\n"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d فئات متضاعفة فى الفيكتور\n"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, fuzzy, c-format
 msgid "%d categories loaded from table"
 msgstr "%d فئات محملة من الجدول\n"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, fuzzy, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d فئات من الفيكتور مفقودة من الجدول\n"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, fuzzy, c-format
 msgid "%d update errors"
 msgstr "%d تحديث الخطا\n"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d حدثت من التسجيلات\n"
@@ -7128,14 +7338,14 @@ msgstr "%d حدثت من التسجيلات\n"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "اسم الخريطة الراسترية الناتجة"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7229,7 +7439,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7285,6 +7495,149 @@ msgstr "%-5d تم تخطى فئات النقط الميت\n"
 msgid "%d records updated"
 msgstr "%d حدثت من التسجيلات\n"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "لم يتم الإتصال بقاعدة البيانات\n"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "نوع العمود غير مدعم"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "cat = %d لا يوجد تسجيل للخط"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "cat = %d لا يوجد تسجيل للخط"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "غير موجودة <%s> المنطقة"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "تحويل راستر جراسى الى بينرى"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%-5d فئات الخط قرات\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "عدم انشاء جدول الخواص"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "لم توجد<%s>الخريطة الفيكتورية"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "عدد الأعمدة"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "لم تحدد خرائط مدخلة"
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "استخدام المنطقة الحالية"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "اسم الخريطة الراسترية الجديدة"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7321,6 +7674,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, fuzzy, c-format
+msgid "Column <%s> not found"
+msgstr "غير موجودة <%s> المنطقة"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7351,47 +7710,54 @@ msgstr "[%s]لم يتم فتح ملف الخلية ل "
 msgid "No areas selected from vector map <%s>"
 msgstr "%d نقطة كتبت للمخرج\n"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "<%s> لم يمكن فتح"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "%s لم يمكن فتح ملف المدى ل"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7456,15 +7822,17 @@ msgstr "الملف الراستري للسطح"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "تقرير الإحصائيات للخرائط الراسترية"
@@ -7505,7 +7873,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "نوع غير معروف"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "التوقيع ..."
@@ -7525,12 +7893,17 @@ msgstr "لم تحدد خرائط مدخلة"
 msgid "Get area %d failed"
 msgstr "عدم انشاء جدول الخواص"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "dig عطل فى فتح ملف المدخل"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 #, fuzzy
 msgid "Area centroid without category"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
@@ -7562,11 +7935,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "عدد الأعمدة"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr ""
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7747,47 +8115,53 @@ msgstr "نوع المظهر"
 msgid "Incompatible types"
 msgstr ""
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "اسم الطبقة المستخدمة كدرجة لون"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "(1/0) اسم الملف البينرى "
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "أقصى مسافة من نقطة اارؤية بالأمتار"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr ""
@@ -7795,95 +8169,95 @@ msgstr ""
 "\n"
 "%d :عدد النقاط\n"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "%c :نوع غير معروف"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "cat = %d لا يوجد تسجيل للخط"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "لم يتم الوصول للهدف\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
@@ -7891,17 +8265,17 @@ msgstr ""
 "\n"
 "%d :عدد النقاط\n"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "%s:لم يتم إنشاء الجدول"
@@ -8112,14 +8486,15 @@ msgstr "%-5d تم تخطى فئات النقط الميت\n"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "اسم الملف المخرج"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "الملف  الأسكى الراسترى المطلوب ادخاله"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8143,9 +8518,13 @@ msgstr "الملف  الأسكى الراسترى المطلوب ادخاله"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8210,7 +8589,7 @@ msgstr "الفاصل الحقلي للمخرج"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "عدد الأرقام المميزة , النقط العشرية فقط"
 
@@ -8275,7 +8654,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr " 2-%d اسماء الخرائط المدخلة"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8380,9 +8759,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "<%s> لم يمكن فتح"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "<%s> لم يمكن فتح"
@@ -8978,7 +9358,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -9003,7 +9383,7 @@ msgstr "اسم الخريطة الراسترية المدخلة"
 msgid "Resolving conflicts..."
 msgstr "الخريطة الفيكتورية لنقاط البدء"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "كتابة ملف جديد...\n"
@@ -9032,207 +9412,211 @@ msgid "Performs vector based generalization."
 msgstr "عدد نقاط الإستيفاء"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "القيمة العشوائية الكبري"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "تنعيم الأركان"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "تنعيم الأركان"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "تنعيم الأركان"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "لم يتم نسخ الجدول"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "%c :نوع غير معروف"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "اسم الخريطة الراسترية الناتجة"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "التوقيع ..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "اسم ااملف المخرج"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9313,8 +9697,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 #, fuzzy
 msgid "Text color"
 msgstr " اللون الأساس\n"
@@ -9328,13 +9712,13 @@ msgstr " اللون الأساس\n"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9532,14 +9916,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "التوقيع ..."
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "لم يتم حساب شبه مركز المساحة"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "لم يتم حساب شبه مركز المساحة"
@@ -9592,14 +9976,6 @@ msgstr "التوقيع ..."
 msgid "Constructing 3D hull..."
 msgstr "التوقيع ..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9681,7 +10057,9 @@ msgstr "عدد نقاط الإستيفاء"
 msgid "Bicubic interpolation"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10091,6 +10469,193 @@ msgstr "%s لم يتم العثور على الخريطة الراسترية"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "لم يتم الثور على شيئ\n"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "غير موجود <%s> الراستر"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "اسم ملف ناتج التصنيف"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "اسم الملف الراسترى الموجود"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "أقصى مسافة من نقطة اارؤية بالأمتار"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "مضاهاة"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "اسم خريطة النقط الفيكتورية المخرجة"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "حجم التجاور"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "dig قراءة ملف...\n"
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "كتابة ملف جديد...\n"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "حجم التجاور"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "إدخال خريطة راسترية بينرية "
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "الإنحراف المعيارى"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "dig قراءة ملف...\n"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "الخريطة الفيكتورية لنقاط البدء"
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "اسم خريطة الراستر المخرجة"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "dig قراءة ملف...\n"
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "لم يتم الثور على شيئ\n"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "غير موجود <%s> الراستر"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "غير موجود <%s> الراستر"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10233,26 +10798,26 @@ msgstr "اسم الخريطة الراسترية الجديدة"
 msgid "Impossible to write to aux table"
 msgstr "القيمة التى تعنى قيمة منعدمة"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "التباين"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d نقطة كتبت للمخرج\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%-5d الخطوط قرأت وكتبت فى ملف المخرج\n"
@@ -10291,7 +10856,7 @@ msgstr "اسم الخريطة الراسترية المدخلة"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10304,14 +10869,14 @@ msgstr "اسم الخريطة الراسترية المدخلة"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10341,49 +10906,132 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "اسم الملف المخرج"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "إحداثيات الشرق والشمال لنقطة البدء"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "نوع غير معروف"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "الخريطة الفيكتورية لنقاط الإنتهاء"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr " nv لون\n"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "نوع غير معروف"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "<%s> لم يمكن فتح"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "%s:لم يتم الحشر بالجدول"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "اسم الخريطة الراسترية الناتجة"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "الخريطة الراسترية المطلوب الضبط عليها"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "خريطة مخرجة حيث ستكتب النقاط"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "خريطة مخرجة حيث ستكتب النقاط"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "%s بالمشغل %s لم يمكن فتح قاعدة البيانات"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "<%s> لم يمكن فتح"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "<%s> لم يمكن فتح"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10515,7 +11163,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d فئات محملة من الجدول\n"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "لم يتم حساب شبه مركز المساحة"
@@ -10631,7 +11279,7 @@ msgstr "لم يتم الإتصال بقاعدة البيانات\n"
 msgid "Key column type is not integer"
 msgstr "نوع العمود غير مدعم"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "لم يمكن اختيار البيانات من الجدول"
@@ -11381,7 +12029,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "اجبار المخرج للقيم الصحيحة"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11642,8 +12290,8 @@ msgstr "الخريطة الفيكتورية لنقاط البدء"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "تباين المجموع"
@@ -11653,7 +12301,7 @@ msgstr "تباين المجموع"
 msgid "Mapset containing input vector map"
 msgstr "اسم مجموعة الخرائط للخريطة المدخلة"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "ضبط من المنطقة الحالية"
@@ -11663,7 +12311,7 @@ msgstr "ضبط من المنطقة الحالية"
 msgid "Name of input vector map to re-project"
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "الطريق لقاعدة البيانات للموقع المدخل"
 
@@ -11678,8 +12326,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "المساحة\n"
@@ -11712,17 +12360,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "خريطة الراستر االناتجة"
@@ -12063,351 +12713,571 @@ msgstr ""
 "جدول: %s\n"
 "عمود مفتاحى: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "خريطة مخرجة حيث ستكتب النقاط"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "dig قراءة ملف...\n"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "عدم انشاء جدول الخواص"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "عدد الأعمدة"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr "عدد الأعمدة"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "نوع العمود غير مدعم"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "عدد الأعمدة"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 #, fuzzy
 msgid "Key column not found"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "نطاق البيانات المخرجة"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "dig قراءة ملف...\n"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d حدثت من التسجيلات\n"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, fuzzy, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "لم يتم فتح إختيار المؤشر"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 #, fuzzy
 msgid "Cannot fetch row"
 msgstr "لم يتم جلب البيانات"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 #, fuzzy
 msgid "Unknown column type"
 msgstr "نوع غير معروف"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, fuzzy, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "لم يمكن حشر صف جديد: %s"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+#, fuzzy
+msgid "Over-riding projection check"
+msgstr "طباعة نوع الملف الراسترى فقط"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "ملف المدخل"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "طباعة نوع الملف الراسترى فقط"
+msgid "Layer number to store return information as category"
+msgstr "اسم الخريطة الراسترية"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "عدم انشاء جدول الخواص"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "طباعة نوع الملف الراسترى فقط"
+
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "اسم المقع الجديد"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+#, fuzzy
+msgid "Filter range for z data (min,max)"
+msgstr "min,max :المدى الصحيح"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "ادخال القيم الصحيحة "
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "ادخال القيم الصحيحة "
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "طباعة نوع الملف الراسترى فقط"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "اسم خريطة النقط الفيكتورية المخرجة"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
+msgid "Layer number or name for mask option"
+msgstr "اسم الملف الراسترى الموجود"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "ادخال القيم الصحيحة "
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "مضاهاة"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "ادخال القيم الصحيحة "
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "الخريطة الفيكتورية لنقاط البدء"
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "اسم المقع الجديد"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "طباعة نوع الملف الراسترى فقط"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "استخدام المنطقة الحالية"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "الخريطة المدخلة حاوية الخطوط"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "مد حدود الموقع معتمدا على مجموعة البيانات الجديدة"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "اسم خريطة الراستر المخرجة"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "درجة وضوح الخريطة المخرجة"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "عدم انشاء جدول الخواص"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "نوع غير معروف"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "اسم الخريطة الراسترية"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "%s:لم يتم إنشاء الجدول"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "%s لم يمكن فتح "
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "خريطة مخرجة حيث ستكتب النقاط"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-#, fuzzy
-msgid "Over-riding projection check"
-msgstr "طباعة نوع الملف الراسترى فقط"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "الخريطة الفيكتورية لنقاط البدء"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-#, fuzzy
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "الخريطة الفيكتورية لنقاط البدء"
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
-msgstr "إعادة توقيع خريطة راسترية من مكان إلى المكان الحالى"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-#, fuzzy
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "%s لم يمكن فتح "
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-#, fuzzy
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "%s لم يمكن فتح "
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-#, fuzzy
-msgid "Projection of input dataset and current location appear to match"
-msgstr "إعادة توقيع خريطة راسترية من مكان إلى المكان الحالى"
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "خريطة مخرجة حيث ستكتب النقاط"
+msgid "%lu points imported"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "%s بالمشغل %s لم يمكن فتح قاعدة البيانات"
+msgid "%lu input points were not valid"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "الخريطة الفيكتورية لنقاط البدء"
+msgid "%lu input points were outside of the selected area"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d نقاط تم تحميلها\n"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d نقاط تم تحميلها\n"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "الإحداثيات للإستفهام"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "%s بالمشغل %s لم يمكن فتح قاعدة البيانات"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12415,22 +13285,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "%s:لم يتم إنشاء الجدول"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "dig_att لم يمكن العثور على ملف"
@@ -12440,12 +13310,12 @@ msgstr "dig_att لم يمكن العثور على ملف"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "اسم الملف المخرج"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "الملف الراسترى الطلوب إدخالة"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12453,25 +13323,29 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "اسم خريطة الراستر المخرجة"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12519,7 +13393,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "%s:منطقة غير صالحة"
+msgstr "عدد الأعمدة"
 
 #: ../vector/v.delaunay/main.c:88
 #, fuzzy
@@ -12659,147 +13533,147 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "طباعة عناوين الفئة"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "طباعة عناوين الفئة"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "اسم ااملف المخرج"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "لم يمكن اختيار البيانات من الجدول"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "الملف الراسترى المدخل"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "بناء الدليل الفراغى ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "التوقيع ..."
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "لم يتم حساب شبه مركز المساحة"
@@ -13069,23 +13943,27 @@ msgstr "اسم الملف المخرج"
 msgid "%d features written to '%s'."
 msgstr "%d نقطة كتبت للمخرج\n"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "%s لم يمكن فتح "
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
@@ -13093,15 +13971,20 @@ msgstr ""
 "\n"
 "%d :عدد النقاط\n"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13155,7 +14038,7 @@ msgstr "عدد نقاط الإستيفاء"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13836,7 +14719,7 @@ msgstr "%d التسجيلات اختيرت من الجدول"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14142,49 +15025,58 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "طباعة عناوين الفئة"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 #, fuzzy
 msgid "Output vertical record separator"
 msgstr "فاصل التسجيل الراسى للمخرج "
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "dig قراءة ملف...\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "اسم الخريطة الراسترية الموجودة"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "لم يتم فتح إختيار المؤشر"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "<%s>لم يتم العثور على الخريطة المدخلة\n"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "طباعة عناوين الفئة"
@@ -14229,46 +15121,50 @@ msgstr "المسافة العظمى بين النقاط بوحدات الخري
 msgid "Add new vertices, but do not split"
 msgstr "كتابة ملف جديد...\n"
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "كتابة رؤوس قمم الخطوط"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "نوع غير معروف"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "درجة وضوح الخريطة المخرجة"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s:خط %d:%s\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s:خط %d:%s\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "القيمة التى تعنى قيمة منعدمة"
@@ -14391,7 +15287,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "نوع المظهر"
@@ -14495,10 +15393,13 @@ msgid "Writing out vector columns..."
 msgstr "كتابة ملف جديد...\n"
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14510,6 +15411,7 @@ msgstr "الملف الراسترى المدخل"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14669,8 +15571,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 #, fuzzy
 msgid "Font name"
 msgstr "اسم الجدول"
@@ -14745,6 +15648,130 @@ msgstr "dig قراءة ملف...\n"
 msgid "Counting points quadrats..."
 msgstr "dig قراءة ملف...\n"
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "اسم ملف ناتج التصنيف"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "لم يتم الثور على شيئ\n"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "ادخال القيم الصحيحة "
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "ادخال القيم الصحيحة "
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "القيمة العشوائية الكبري"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "الإنحراف المعيارى"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14759,29 +15786,29 @@ msgstr "اسم الخريطة الراسترية"
 msgid "Target location <%s> not found"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "غير موجود <%s> الراستر"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15117,11 +16144,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "لم يتم الإتصال بقاعدة البيانات\n"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "نوع العمود غير مدعم"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -15207,320 +16229,323 @@ msgid_plural "%d records updated."
 msgstr[0] "%d حدثت من التسجيلات\n"
 msgstr[1] "%d حدثت من التسجيلات\n"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "اسم قاعدة البيانات"
+msgid "Name of OGR datasource to be imported"
+msgstr "الملف الراسترى الطلوب إدخالة"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "القيمة المدخلة : أصغر حجم من محددات  مياه الأحواض الخارجية"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "اسم خريطة الراستر المخرجة"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "اسم الطبقة المستخدمة كدرجة لون"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "لم يتم حساب شبه مركز المساحة"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "%s لم يتم العثور على الخريطة الراسترية"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "<%s> اسم الملف المستخدم لل"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "عدد الأعمدة"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "%-5d فئات النقط قرات\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "عرض الهيئات المدعمة والخروج"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "اجبار المخرج للقيم الصحيحة"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "درجة وضوح الخريطة المخرجة"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr " 2-%d اسماء الخرائط المدخلة"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "اسم الخريطة الراسترية الناتجة"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "نوع العمود غير مدعم"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "نوع العمود غير مدعم"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "التوقيع ..."
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15528,116 +16553,116 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "وصل الفئات...\n"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "%-5d تم تخطى فئات النقط الميت\n"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "حجم التجاور"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "ملف المدخل"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15854,6 +16879,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "لم يتم الإتصال بقاعدة البيانات\n"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16015,19 +17045,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr "dig قراءة ملف...\n"
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "لم يتم جلب البيانات"
@@ -16210,14 +17240,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "خريطة مخرجة حيث ستكتب النقاط"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists"
 msgstr "dig_att لم يمكن العثور على ملف"
@@ -16347,14 +17377,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "إنشاء نقاط على الخط المدخل"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "<%s>لم يتم العثور على الخريطة المدخلة\n"
 msgstr[1] "<%s>لم يتم العثور على الخريطة المدخلة\n"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16855,19 +17890,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16881,6 +17921,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16893,7 +17934,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17054,6 +18095,7 @@ msgid "Unable to map image file"
 msgstr "<%s> لم يمكن فتح"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17071,14 +18113,14 @@ msgstr "<%s> لم يمكن فتح"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17117,6 +18159,53 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "اختيار الخط الذى سيعرض به النص على الشاشة"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "dig_att لم يمكن العثور على ملف"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -17134,7 +18223,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17147,7 +18236,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17219,21 +18308,26 @@ msgstr ""
 msgid ""
 "Uploads space time raster dataset values at positions of vector points to "
 "the table."
-msgstr "اسم الخريطة الراسترية الناتجة"
+msgstr "تحويل خريطة راسترية إلى فيكتورية"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17248,6 +18342,7 @@ msgstr "اسم الخريطة الراسترية الناتجة"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17343,6 +18438,93 @@ msgstr "اسم الملف الراسترى الموجود"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "تحويل خريطة راسترية إلى فيكتورية"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "عرض ملفات الراستر للموقع والخروج"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "اسم الخريطة الراسترية المدخلة"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "اسم الراستر المدخل"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17479,7 +18661,7 @@ msgstr "%s لم يتم فتح قاعدة البيانات"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17493,8 +18675,8 @@ msgid "rename"
 msgstr "اسم الجدول"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17504,9 +18686,9 @@ msgid "input"
 msgstr "اسم الخريطة المدخلة"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17522,6 +18704,77 @@ msgstr "خروج"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "%s لم يتم العثور على الخريطة الراسترية"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "خلق خريطة فيكتورية بكنتورات محددة من خريطة راسترية"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "درجة الوضوح"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "المدى التزايدى بين مستويات الكنتور"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "عرض قائمة مستويات الكنتور"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "مستوى الكنتور الأصغر"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "مستوى الكنتور الأقصى"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "اصغر عدد من النقاط لخط الكنتور"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "اسم الراستر المدخل"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "عدم انشاء جدول الخواص"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17530,7 +18783,7 @@ msgstr "عرض ملفات الراستر للموقع والخروج"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17586,8 +18839,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17701,74 +18955,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "اسم الخريطة الراسترية المدخلة"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "اسم الخريطة المخرجة"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "اسم الخريطة المخرجة"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17803,11 +19026,11 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "اسم الخريطة الراسترية الجديدة"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
@@ -17816,38 +19039,21 @@ msgstr ""
 "#-#-#-#-#  grassmods_ar.po (grassmods_ar)  #-#-#-#-#\n"
 "اسم الخريطة الراسترية المدخلة"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "اسم الراستر المدخل"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17949,8 +19155,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "اسم الملف المخرج"
+msgid "Name for output image (or text file for -t)"
+msgstr "اسم ملف التقرير"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17967,6 +19173,54 @@ msgstr "استخدام احداثيات مركز الخريطة\n"
 msgid "Use gnuplot for display"
 msgstr "<%s> لم يمكن فتح"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "اسم ملف الإنحدار المخرج"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "عرض القيم مفصولة بفاصلة"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "اسم ملف التقرير"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "%s لم يتم فتح قاعدة البيانات"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "اسم خريطة الراستر المخرجة"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17998,32 +19252,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "مد حدود الموقع معتمدا على مجموعة البيانات الجديدة"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "درجة وضوح الخريطة المخرجة"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18220,6 +19452,20 @@ msgstr "عدد مستويات الألوان لكل مركب"
 msgid "Output field separator"
 msgstr "الفاصل الحقلى بين بيانات المخرج"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "تحويل خريطة راسترية إلى فيكتورية"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "عرض ملفات الراستر للموقع والخروج"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 #, fuzzy
 msgid "Displays a raster map and its legend on a graphics window"
@@ -18321,8 +19567,15 @@ msgstr "%s لم يتم فتح قاعدة البيانات"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "اسم الخريطة الراسترية الجديدة"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "اسم ااملف المخرج"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "اسم الخريطة الراسترية الموجودة"
@@ -18332,7 +19585,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18341,15 +19594,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "اسم الخريطة الراسترية الجديدة"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18395,7 +19648,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "اختيار الخط الذى سيعرض به النص على الشاشة"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "اسم الملف المخرج"
 
@@ -18476,16 +19729,27 @@ msgstr "اسم الملف المخرج"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "اسم خريطة الراستر المخرجة"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "تحويل خريطة راسترية إلى فيكتورية"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18562,12 +19826,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18693,13 +19964,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18709,12 +19979,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "طباعة الأحصاء فى صورة شل سكربت"
@@ -18730,7 +20000,7 @@ msgid "ASCII file containing input data"
 msgstr "الملف  الأسكى الراسترى المطلوب ادخاله"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "تقرير الإحصائيات للخرائط الراسترية"
@@ -18739,14 +20009,14 @@ msgstr "تقرير الإحصائيات للخرائط الراسترية"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "نوع التخزين للخريطة الراسترية الناتجة "
 
@@ -18786,18 +20056,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "استخدام احداثيات مركز الخريطة\n"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "النسبة من الخريطة للحفظ بالذاكرة"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "طريقة تقرير الإنحدار"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18837,19 +20107,15 @@ msgid ""
 "on the fly."
 msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "الملف الراسترى الطلوب إدخالة"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "الخريطة الراسترية المخرجة للمساحات ذات مشكلة"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18949,7 +20215,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19035,24 +20301,18 @@ msgstr "عرض ملفات الراستر للموقع والخروج"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "عدد نقاط الإستيفاء"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "اسم الخريطة الراسترية"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "اسم الراستر المدخل"
@@ -19170,17 +20430,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "عدد نقاط الإستيفاء"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19188,10 +20452,6 @@ msgid ""
 "space time raster datasets."
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19306,78 +20566,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "اسم المقع الجديد"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "طباعة الجداول والخروج"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "طباعة الجداول والخروج"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "طباعة الجداول والخروج"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "موقع قاعدة البيانات"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "جداول النظام بدلا من جداول المستخدم"
@@ -19494,10 +20770,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr ""
@@ -19552,6 +20824,56 @@ msgstr ""
 msgid "Test name"
 msgstr "اسم الجدول"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "تحويل خريطة راسترية إلى فيكتورية"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "<%s> اسم الملف المستخدم لل"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+#, fuzzy
+msgid "Smooth corners of area features"
+msgstr "تنعيم الأركان"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "استخدام احداثيات مركز الخريطة\n"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "dig قراءة ملف...\n"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr "أستخدام القيم الراسترية كفئات بدلا من توالى فريد,خلية فقط"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -19619,6 +20941,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "نوع المظهر"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "عرض الهيئات المدعمة والخروج"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19792,20 +21125,26 @@ msgid "Description of the space time dataset"
 msgstr "اسم الخريطة الراسترية الجديدة"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "اسم الخريطة الراسترية الجديدة"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19849,12 +21188,12 @@ msgstr "عدد نقاط الإستيفاء"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19937,7 +21276,7 @@ msgstr "عرض ملفات الراستر للموقع والخروج"
 msgid "Neighborhood size"
 msgstr "حجم التجاور"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "عدد نقاط الإستيفاء"
@@ -20040,24 +21379,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "درجة وضوح الخريطة المخرجة"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "وصف مبسط للخريطة الراسترية الناتجة"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "اسم ااملف المخرج"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "اسم ااملف المخرج"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "لا تقص المنطقة الحالية"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "الإحداثى الشمالى للخريطة\n"
@@ -20131,17 +21487,36 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "عدد الأعمدة"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "<%s> اسم الملف المستخدم لل"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
@@ -20232,6 +21607,7 @@ msgstr "اسم الخريطة الراسترية"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20247,10 +21623,15 @@ msgstr "اسم ااملف المخرج"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20365,28 +21746,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "الخريطة الراسترية المطلوب تسجيلها"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "%s لم يتم فتح قاعدة البيانات"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "تحويل خريطة راسترية إلى فيكتورية"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "انتشار القيم المنعدمة"
 
@@ -20423,7 +21799,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "انشاء خريطة راسترية بها مساحات متجاورة نمت بخلية واحدة"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20438,7 +21814,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "buffer نصف قطر الحلجز المصدى"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "مترى"
 
@@ -20456,12 +21832,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "تحويل خريطة راسترية إلى فيكتورية"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "عدد نقاط الإستيفاء"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20487,7 +21863,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "انشاء خريطة راسترية موضحة الأحواض التحتية لمحددات المياه"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20516,6 +21892,16 @@ msgstr "تنعيم الأركان"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "انشاء خريطة راسترية موضحة الأحواض التحتية لمحددات المياه"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "%s لم يمكن فتح "
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20526,19 +21912,11 @@ msgstr "اسم الخريطة الراسترية الموجودة"
 msgid "Vector map to which to join other table"
 msgstr "عدم انشاء جدول الخواص"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "عدم انشاء جدول الخواص"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20567,17 +21945,17 @@ msgstr "عدد مرات تكرار المرشح"
 msgid "Imports space time raster dataset."
 msgstr "اسم الخريطة الراسترية الناتجة"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20657,14 +22035,17 @@ msgstr "غير موجودة <%s> الخريطة الراسترية "
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20696,11 +22077,11 @@ msgstr "لم يتم حساب شبه مركز المساحة"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "بدء بالقيم فى الخريطة الراسترية"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20708,8 +22089,8 @@ msgstr "<%s> لم يمكن فتح"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "تغلب على الخريطة المخرجة"
@@ -20763,6 +22144,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -20914,9 +22296,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20943,7 +22326,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "اسم الخريطة الراسترية الناتجة"
@@ -21008,6 +22394,141 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "خريطة مخرجة حيث ستكتب النقاط"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "لم توجد<%s>الخريطة الفيكتورية"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "عدم انشاء جدول الخواص"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "اسم الخريطة الراسترية المخرجة"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "اسم الخريطة الراسترية الناتجة"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s:خط %d:%s\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "طريقة الاستيفاء المستخدمة"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "لم تحدد خرائط مدخلة"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "اسم قاعدة بيانات المدخل"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "<%s> عدد مستويات الألوان المستخدمة فى"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "لم يمكن وصف الجدول"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "تغلب على الخريطة المخرجة"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21138,11 +22659,11 @@ msgstr "<%s> لم يمكن فتح"
 msgid "3D raster map for which to modify null values"
 msgstr "اسم لخريطة الراسترية انسخ جدول ألوانها"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -21167,7 +22688,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "عدم انشاء جدول الخواص"
@@ -21176,6 +22697,82 @@ msgstr "عدم انشاء جدول الخواص"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "اسم الخريطة الراسترية"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "انشاء خرائط راسترية من ملفات بيانية متعدد الأضلاعخط فى الدليل الحالى"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "الخريطة الراسترية لنقاط البدء"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "غير موجودة <%s> الخريطة الراسترية "
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "كتابة ملف جديد...\n"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "اسم لخريطة الراسترية انسخ جدول ألوانها"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "استخدام احداثيات مركز الخريطة\n"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "عدد نقاط الإستيفاء"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "لم يتم تحديث الحدود"
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -21230,13 +22827,13 @@ msgstr ""
 msgid "Update range"
 msgstr "نطاق البيانات المخرجة"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "%s لم يمكن فتح ملف المدى ل"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr ""
@@ -21294,7 +22891,7 @@ msgstr "تغلب على الخريطة المخرجة"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات dbmscap\n"
@@ -21669,7 +23266,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, fuzzy, c-format
 msgid "Unknown method <%s>"
@@ -21679,7 +23276,7 @@ msgstr "%c :نوع غير معروف"
 msgid "Aggregate operation"
 msgstr "عملية التجميع"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21715,6 +23312,38 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "لم يتم فتح إختيار المؤشر"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "التباين"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "دمج الأحمر والأخضر والأزرق الى خريطة مركبة مفردة"
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "اسم الخريطة الراسترية المخرجة"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "حجم رصيد النقط"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "لم يتم حساب شبه مركز المساحة"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "خريطة الراستر االناتجة"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22058,38 +23687,38 @@ msgstr "طباعة الأحصاء فى صورة شل سكربت"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22383,13 +24012,13 @@ msgid "Unknown operation '%s'"
 msgstr "نوع غير معروف"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "%s لم يمكن فتح "
@@ -22461,8 +24090,8 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "dig_att لم يمكن العثور على ملف"
+msgid "<%s> already exists. File not copied."
+msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22573,8 +24202,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -22834,9 +24463,9 @@ msgstr "الملف الراسترى الطلوب إدخالة"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "اسم الخريطة الراسترية"
@@ -22851,15 +24480,15 @@ msgstr "شكل فاصل المخرج"
 msgid "File name exclusion pattern (default: none)"
 msgstr "شكل فاصل المخرج"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -22869,7 +24498,7 @@ msgid "Remove base raster maps"
 msgstr "الخريطة الراسترية الغطاء"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -22915,80 +24544,70 @@ msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr "شكل فاصل المخرج"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr "شكل فاصل المخرج"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المسماه"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "طباعة نوع الملف الراسترى فقط"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "header تخطى طباعة معلومات عن العنوان الرئيسى بأول الملف"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "بدء بالقيم فى الخريطة الراسترية"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
@@ -23202,57 +24821,57 @@ msgstr "لم يتم تحديث الحدود"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "%s:منطقة غير صالحة"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "لم يتم تحديث الحدود"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23472,38 +25091,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "غير موجودة <%s> المنطقة"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "الملف الراسترى الطلوب إدخالة"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23812,11 +25452,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "اسم الخريطة الراسترية الموجودة"
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "اسم خريطة النقط الفيكتورية المخرجة"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23987,7 +25622,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 #, fuzzy
 msgid "Percent complete..."
 msgstr "مقلوب فرق العزم"
@@ -24406,7 +26041,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24600,157 +26235,157 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "خريطة الراستر االناتجة"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "إعادة توقيع خريطة راسترية من مكان إلى المكان الحالى"
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "الخريطة الفيكتورية لنقاط البدء"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "اسم مجموعة الخرائط للخريطة المدخلة"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "اسم خريطة الراستر المخرجة"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "درجة وضوح الخريطة المخرجة"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "طباعة الأحصاء فى صورة شل سكربت"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "خريطة مدخلة: أماكن المنخفضات الحقيقية"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "درجة وضوح الخريطة المخرجة"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "درجة وضوح الخريطة المخرجة"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "اسم الخريطة المخرجة"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "درجة وضوح الخريطة المخرجة"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "اسم الخريطة المدخلة"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr " %f %f :%d العقدة\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr " %f %f :%d العقدة\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr " %f %f :%d العقدة\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 #, fuzzy
 msgid "Output:"
 msgstr "الخريطة المخرجة"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "التوقيع ..."
@@ -24808,12 +26443,6 @@ msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات d
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "وصف مبسط للخريطة الراسترية الناتجة"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -24841,22 +26470,22 @@ msgstr "الملف الراسترى المدخل"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, fuzzy, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "كتابة ملف جديد...\n"
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 #, fuzzy
 msgid "Done."
 msgstr "انتهى\n"
@@ -25631,7 +27260,7 @@ msgstr "طبقتين يجب تحديدهم"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s لم يمكن فتح "
@@ -25851,8 +27480,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "%s لم يمكن فتح ملف المدى ل"
@@ -25938,12 +27567,12 @@ msgstr "<%s> لم يمكن فتح"
 msgid "Can't get cell header"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -26133,18 +27762,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "عدد مرات تكرار المرشح"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-#, fuzzy
-msgid "Filter range for z data (min,max)"
-msgstr "min,max :المدى الصحيح"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26170,7 +27794,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "%s:منطقة غير صالحة"
@@ -26180,15 +27804,15 @@ msgstr "%s:منطقة غير صالحة"
 msgid "Invalid vrange"
 msgstr "%s:منطقة غير صالحة"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26210,7 +27834,7 @@ msgid "Reading input data..."
 msgstr "dig قراءة ملف...\n"
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -26253,16 +27877,16 @@ msgstr "[%s]لم يتم فتح ملف الخلية ل "
 msgid "Writing to output raster map..."
 msgstr "اسم خريطة الراستر المخرجة"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "%d نقاط تم تحميلها\n"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -26421,11 +28045,6 @@ msgstr "اسم الخريطة الراسترية المخرجة"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "نوع المظهر"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -26978,104 +28597,109 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "اسم لخريطة الراسترية انسخ جدول ألوانها"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "اسم ااملف المخرج"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "خريطة مخرجة حيث ستكتب النقاط"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "%s لم يمكن فتح ملف المدى ل"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "%s لم يمكن فتح ملف المدى ل"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "الخريطة الراسترية لنقاط البدء"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "%s لم يمكن فتح ملف المدى ل"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "اسم ااملف المخرج"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "خريطة الراستر االناتجة"
@@ -27413,7 +29037,7 @@ msgstr "الملف  الأسكى الراسترى المطلوب ادخاله"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "نوع المظهر"
+msgstr "وصف مبسط للملف الراسترى المخرج"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27498,89 +29122,178 @@ msgstr "التوقيع ..."
 msgid "File <%s> created"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr "انشاء خرائط راسترية من ملفات بيانية متعدد الأضلاعخط فى الدليل الحالى"
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "dig_att عطل فى فتح ملف المدخل"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "min,max :المدى الصحيح"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "تقرير الإحصائيات للخرائط الراسترية"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "وصف مبسط للملف الراسترى المخرج"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "ضبط المنطقة الحالية من ابعاد هذه الخريطة "
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "غير موجودة <%s> الخريطة الراسترية "
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "نوع غير معروف"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "%s:منطقة غير صالحة"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "%s لم يمكن فتح "
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "التوقيع ..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "<%s>لم يتم العثور على الخريطة المدخلة\n"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "انشاء خريطة راسترية بها مساحات متجاورة نمت بخلية واحدة"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "اسم الخريطة المدخلة"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "%c :نوع غير معروف"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "لم يتم تحديث الحدود"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27723,7 +29436,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "dig_att لم يمكن العثور على ملف"
@@ -27832,7 +29545,7 @@ msgid "There are no valid locations in the current region"
 msgstr "استخدام المنطقة الحالية"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28427,7 +30140,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28880,7 +30593,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "طباعة الأحصاء فى صورة شل سكربت"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28901,11 +30614,6 @@ msgstr ""
 msgid "Unable to write to temp file"
 msgstr "لم يتم تحديث الحدود"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "الخريطة الفيكتورية لنقاط البدء"
-
 #: ../raster/r.clump/clump.c:265
 msgid "Pass 2 of 2..."
 msgstr ""
@@ -29024,7 +30732,7 @@ msgid "Writing output raster map..."
 msgstr "اسم خريطة الراستر المخرجة"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -29035,42 +30743,42 @@ msgstr "خريطة الراستر االناتجة"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "انشاء احصائيات المساحة لطبقات الخرائط الراسترية"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "إحداثيات الشرق والشمال لنقطة البدء"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "!تم تحديد إحداثى شمال فارغ"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "!تم تحديد إحداثى شمال فارغ"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -29163,22 +30871,22 @@ msgid "Invalid map type"
 msgstr "%s:منطقة غير صالحة"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -29285,23 +30993,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29309,8 +31017,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29806,225 +31514,230 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "اسم الخريطة المدخلة"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "خريطة مدخلة: كمية السريان للمياه على البر لكل خلية"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "USLE خريطة مدخلة : التضاريس الحاجبة للسريان السطحى عبر البر, فى"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "القيمة المدخلة : أصغر حجم من محددات  مياه الأحواض الخارجية"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "USLE القيمة المدخلة : أكبر طول من للسريان السطحى, فى"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "الخريطة المخرجة : عدد الخلايا التى تصب فى كل خلية"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "خريطة الدليل الطبوغرافى"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "خريطة الدليل الطبوغرافى"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "الخريطة المخرجة : كل نصف حوض معطى قيمة فريدة "
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "USLE فى (LS)الخريطة المخرجة : طول الإنحدار ووعورته, عامل"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "USLE فى (S)الخريطة المخرجة : وعورة الإنحداه, عامل "
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "عامل الضرب لقيم الإرتفاعات"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "السماح لسريان المياه أفقيا ورأسيا فقط"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 #, fuzzy
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "السماح بخيار مد الذاكرة : العملية بطيئة"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 #, fuzzy
 msgid "Sorry, you must choose an output map."
 msgstr "اسم الخريطة المخرجة"
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "حجم التجاور"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "نوع العمود غير مدعم"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -30033,20 +31746,30 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "الخريطة الفيكتورية لنقاط البدء"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "الخريطة الفيكتورية لنقاط البدء"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "الخريطة الفيكتورية لنقاط البدء"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -30075,33 +31798,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "الخريطة الراسترية المطلوب تسجيلها"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "انشاء خريطة راسترية موضحة الأحواض التحتية لمحددات المياه"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 #, fuzzy
 msgid "Aggregation method"
 msgstr "عملية التجميع"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, fuzzy, c-format
 msgid "Unable to read color table for %s"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -30507,7 +32230,7 @@ msgstr "اسم الخريطة الراسترية الناتجة"
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "اسم الخريطة الراسترية الناتجة"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - لون غير معروف\n"
@@ -30888,7 +32611,7 @@ msgid ""
 msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30903,11 +32626,23 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "%d نقاط تم تحميلها\n"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "طبقتين يجب تحديدهم"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31191,33 +32926,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "طباعة عناوين الفئة"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -31517,32 +33252,12 @@ msgstr "درجة الوضوح"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "خلق خريطة فيكتورية بكنتورات محددة من خريطة راسترية"
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "المدى التزايدى بين مستويات الكنتور"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "عرض قائمة مستويات الكنتور"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "عرض قائمة مستويات الكنتور"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "مستوى الكنتور الأصغر"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "مستوى الكنتور الأقصى"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "اصغر عدد من النقاط لخط الكنتور"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32135,54 +33850,55 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "الخريطة الراسترية المطلوب الضبط عليها"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "تكويد الحروف"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "dig_att عطل فى فتح ملف المدخل"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "نوع غير معروف"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "كتابة ملف جديد...\n"
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "الملف الراسترى المدخل"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "%c :نوع غير معروف"
@@ -32232,81 +33948,81 @@ msgstr "نوع غير معروف"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "اسم الخريطة الراسترية الناتجة"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "اسم الخريطة الراسترية الناتجة"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "مساحة: %d  عدد الجزر: %d\n"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "%s:منطقة غير صالحة"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "نوع غير معروف"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "%s:لم يتم إنشاء الجدول"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -32496,22 +34212,22 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr "الصفر قيمة حقيقية"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 #, fuzzy
 msgid "Location PROJ_INFO is:\n"
 msgstr "%s لم يمكن فتح "
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32550,14 +34266,6 @@ msgstr "اسم الخريطة الراسترية الجديدة"
 msgid "Band to select (default is all bands)"
 msgstr "band الشريحة المطلوبة والأساس كل الشرائح"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32580,7 +34288,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "لم يتم تحديث الحدود"
@@ -32600,7 +34308,7 @@ msgstr "خريطة مخرجة حيث ستكتب النقاط"
 msgid "Reading band %d of %d..."
 msgstr "خريطة الإرتفاعات"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
@@ -32670,197 +34378,216 @@ msgstr "%s لم يمكن فتح ملف المدى ل"
 msgid "Link to raster map <%s> created."
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "ادخال ملف راسترى ثنائى كطبقة خريطة راسترية جراسية"
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "الملف الراسترى الطلوب إدخالة"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "band الشريحة المطلوبة والأساس كل الشرائح"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "اسم الخريطة الناتجة"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "الموقع المستخدم لقراءة الإسقاط منه لنقاط السيطرة الأرضية "
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "اسم ملف الإرتفاعات الراسترى"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "عدم انشاء جدول الخواص"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "الإحتفاظ بأعداد الشرائح بدلا من استخدام اسماء لون الشرائح"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "طباعة الجداول والخروج"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "<%s> لم يمكن فتح"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "كتابة ملف جديد...\n"
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "dig_att عطل فى فتح ملف المدخل"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "اسم الخريطة الراسترية"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "%s لم يتم فتح قاعدة البيانات"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "كتابة ملف جديد...\n"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "خريطة الإتجاه المخرجة"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "درجة وضوح الخريطة المخرجة"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "ضبط المنطقة الحالية من ابعاد الخريطة المدخلة"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "خريطة الراستر االناتجة"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr " <%s> فى <%s>لم يمكن قراءة العنوان الرئيسى ل"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr " <%s> فى <%s>لم يمكن قراءة العنوان الرئيسى ل"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
@@ -32988,7 +34715,7 @@ msgstr "(خريطة الإرتفاعات  (مدخل "
 msgid "Writing topographic index map..."
 msgstr "خريطة الدليل الطبوغرافى"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr ""
@@ -33094,12 +34821,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "التوقيع ..."
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33107,25 +34834,25 @@ msgstr ""
 "انشاء خريطة مركبة باستخدام قيم الفئات من خرائط لملىء خلايا بدون قيمة فى "
 "خرائط اخرى"
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "اسم الخرائط الراسترية المطلوب ترقيعها ببعضها "
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 #, fuzzy
 msgid "Name for resultant raster map"
 msgstr "وصف مبسط للخريطة الراسترية الناتجة"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "استخدم الصفر بدلا من القيمة المنعدمة لتمثيل الشفافية"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "اسم الخريطة الراسترية المدخلة"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "%s لم يمكن فتح ملف المدى ل"
@@ -33195,38 +34922,6 @@ msgstr "الصفر قيمة حقيقية"
 msgid "Converts a raster map into a vector map."
 msgstr "تحويل خريطة راسترية إلى فيكتورية"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "<%s> اسم الملف المستخدم لل"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-#, fuzzy
-msgid "Smooth corners of area features"
-msgstr "تنعيم الأركان"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr "أستخدام القيم الراسترية كفئات بدلا من توالى فريد,خلية فقط"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "استخدام احداثيات مركز الخريطة\n"
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "dig قراءة ملف...\n"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -33738,11 +35433,6 @@ msgstr "حجم رصيد النقط"
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "اسم خريطة الراستر المخرجة"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34030,7 +35720,7 @@ msgstr "خلق أسطح عشوائية باستقلال فراغى"
 msgid "Name for output raster map(s)"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "أقصى مسافة من نقطة اارؤية بالأمتار"
@@ -34057,7 +35747,7 @@ msgstr "عدد نقاط الإستيفاء"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "%-5d dig_att قراءة ملف...\n"
@@ -34394,7 +36084,7 @@ msgstr "حساب إحصائيات المتغير الأحادى من خلايا
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34420,7 +36110,7 @@ msgstr "التوقيع ..."
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -34442,7 +36132,7 @@ msgstr "حساب إحصائيات المتغير الأحادى من خلايا
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "التوقيع ..."
@@ -34597,7 +36287,7 @@ msgstr "لم يتم انشاء الدليل"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
@@ -34769,11 +36459,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "%s لم يتم العثور على الخريطة الراسترية"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "بدء بالقيم فى الخريطة الراسترية"
@@ -35004,21 +36694,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "استخدام احداثيات مركز الخريطة\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "خريطة الراستر االناتجة"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "%s:منطقة غير صالحة"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "استخدام احداثيات مركز الخريطة\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "خريطة الراستر االناتجة"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "استخدام احداثيات مركز الخريطة\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "خريطة الراستر االناتجة"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35044,76 +36774,85 @@ msgstr "فك الخريطة"
 msgid "Print compression information and data type of input map(s)"
 msgstr "طباعة الأحصاء فى صورة شل سكربت"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "لم توجد<%s>الخريطة الفيكتورية"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "المساحة\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "dig_att لم يمكن العثور على ملف"
+msgid "Uncompressing <%s>"
+msgstr "تكويد الحروف"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "تكويد الحروف"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "تكويد الحروف"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "<%s> فى <%s>لم يمكن فتح الملف للمنظر ثلاثى الأبعاد"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35147,52 +36886,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "غير موجود <%s> الراستر"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "نوع المظهر"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "انشاء خريطة راسترية موضحة الأحواض التحتية لمحددات المياه"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "%s لم يمكن فتح "
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "طبقتين يجب تحديدهم"
@@ -35622,21 +37361,29 @@ msgstr[1] "حساب الظلال من نموذج الإرتفاعت الرقمى
 msgid "Calculating %s"
 msgstr "حساب الظلال من نموذج الإرتفاعت الرقمى"
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "مضاهاة"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "خلق قيم خلية عشوائية باستقلال فراغى"
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr ""
+"\n"
+"\n"
+"%d :عدد النقاط\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35778,7 +37525,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr "لم توجد<%s>الخريطة الفيكتورية"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr " nv لون\n"
@@ -35900,16 +37647,11 @@ msgid "Starting and ending coordinates"
 msgstr "استخدام احداثيات مركز الخريطة\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 #, fuzzy
 msgid "Line color"
 msgstr " nv لون\n"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr " اللون الأساس\n"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -35939,8 +37681,8 @@ msgid "Name of monitor to start"
 msgstr "اسم الخريطة المخرجة"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36002,47 +37744,65 @@ msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "طباعة إحداثيات الإتصال الحلى و الخروج"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "عرض ملفات الراستر للموقع والخروج"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "طبقتين يجب تحديدهم"
@@ -36052,64 +37812,74 @@ msgstr "طبقتين يجب تحديدهم"
 msgid "Monitor <%s> is not running"
 msgstr "غير موجود <%s> الراستر"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "<%s> لم يمكن فتح"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "خريطة مخرجة حيث ستكتب النقاط"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "%s:لم يتم إنشاء الجدول"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "الخريطة المخرجة"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "[%s]لم يتم فتح ملف الخلية ل "
+msgid "Starting monitor <%s>..."
+msgstr "كتابة ملف جديد...\n"
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "<%s> لم يمكن فتح"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "الإحداثى الشمالى للخريطة\n"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "غير موجودة <%s> المنطقة"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "<%s> لم يمكن فتح"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "<%s>لم يتم العثور على الخريطة المدخلة\n"
 
 #: ../display/d.erase/main.c:33
 msgid ""
@@ -36220,28 +37990,47 @@ msgstr "طبقتين يجب تحديدهم"
 msgid "[%s]: illegal value specified"
 msgstr "اسم ااملف المخرج"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "طباعة نوع الملف الراسترى فقط"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr "اختيار الخط الذى سيعرض به النص على الشاشة"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "الخريطة الراسترية لنقاط البدء"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "طباعة نوع الملف الراسترى فقط"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "اسم الخريطة الراسترية الموجودة"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36249,7 +38038,7 @@ msgstr[0] " nv لون\n"
 msgstr[1] " nv لون\n"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36257,7 +38046,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36337,11 +38126,6 @@ msgstr "لون    قيمة\n"
 msgid "Colorize features according color definition column"
 msgstr "عدد الأعمدة"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "لم تحدد خرائط مدخلة"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36351,7 +38135,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr ""
 
@@ -36895,37 +38679,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "%s:منطقة غير صالحة"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "تقرير عن الراستر المدخلة والخروج"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "استخدام المنطقة الحالية"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37180,15 +38964,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "اسم الخريطة الراسترية الموجودة"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "ملف المدخل"
@@ -37254,7 +39029,7 @@ msgstr "نوع المظهر"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "نوع المظهر"
@@ -37292,12 +39067,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "مخرج متبادل البيتات"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37340,14 +39125,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "طباعة نوع الملف الراسترى فقط"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37431,11 +39209,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -37449,34 +39228,90 @@ msgstr "اختيار الخط الذى سيعرض به النص على الشا
 msgid "North arrow style"
 msgstr "نوع المظهر"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr " nv لون\n"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -37492,72 +39327,72 @@ msgstr "<%s>لم يتم العثور على الخريطة المدخلة\n"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 #, fuzzy
 msgid "Name of raster aspect map to be displayed"
 msgstr "اسم الخريطة الراسترية  للعرض كخلفية"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 #, fuzzy
 msgid "Type of existing raster aspect map"
 msgstr "اسم الخريطة الراسترية الموجودة"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "لم يتم حساب شبه مركز المساحة"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "لم يتم حساب شبه مركز المساحة"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 #, fuzzy
 msgid "Raster map containing values used for arrow length"
 msgstr "اسم خريطة الإرتفاعات"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "ملف المدخل"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "ملف المدخل"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "<%s> لم يمكن فتح"
@@ -37842,57 +39677,43 @@ msgstr "الملفات الراسترية المطلوب رؤيتها%d"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "لم توجد<%s>الخريطة الفيكتورية"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "غير موجود <%s> الراستر"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "الخريطة الراسترية المطلوب الضبط عليها"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "إدخال خريطة راسترية بينرية "
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "نقطة %d فى حاجة لإدخال على الأقل"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "dig_att عطل فى فتح ملف المدخل"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -37967,7 +39788,21 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr "اسم الملف الخرج المحتوى على مصفوفة الخطا وعامل كبا"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "لم توجد<%s>الخريطة الفيكتورية"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "غير موجود <%s> الراستر"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
@@ -37975,107 +39810,107 @@ msgstr ""
 "\n"
 "%d :عدد النقاط\n"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "ملف المدخل"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "ملف المدخل"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "ملف المدخل"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "ملف المدخل"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "ملف المدخل"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "%s لم يمكن فتح "
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "%c :نوع غير معروف"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "%s:خطا \n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "%s:خطا \n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "%s لم يتم العثور على الخريطة الراسترية"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "dig قراءة ملف...\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "N: %-10.3f    S: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "E: %-10.3f    W: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "E: %-10.3f    W: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "%c :نوع غير معروف"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "تنعيم الأركان"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, fuzzy, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
@@ -38083,27 +39918,27 @@ msgstr ""
 "\n"
 "%d :عدد النقاط\n"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr ""
@@ -38111,67 +39946,67 @@ msgstr ""
 "\n"
 "%d :عدد النقاط\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "%-5d dig_att قراءة ملف...\n"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38475,8 +40310,8 @@ msgid "radiance"
 msgstr "التباين"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "الصفر قيمة حقيقية"
@@ -38847,359 +40682,403 @@ msgstr "غير موجودة <%s> الخريطة الراسترية "
 msgid "group <%s> references the following subgroups\n"
 msgstr "غير موجودة <%s> المنطقة"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "اسم السطح العشوائى المطلوب إنتاجه"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "الصفر قيمة حقيقية"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "خريطة الراستر الغطاء"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "اسم السطح الفراكتالى الراسترى"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "اسم الخريطة المخرجة"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "اسم الخريطة المدخلة"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "اسم الخريطة المدخلة"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "خريطة الإتجاه المخرجة"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "عدد الصفوف"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "عدد الصفوف"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39410,7 +41289,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "مساحة: %d  عدد الجزر: %d\n"
@@ -39771,108 +41650,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "لم يتم فتح إختيار المؤشر"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "تغلب على الخريطة المخرجة"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات dbmscap\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "تغلب على الخريطة المخرجة"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "عدد النقاط المطلوب تخصيصها"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "غير موجودة <%s> المنطقة"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "كتابة ملف جديد...\n"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "التوقيع ..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "لن يتم عرض شيئ ,minreg حجم المنطقة اقل من أصغر حجم مسجل\n"
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att لم يمكن العثور على ملف"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "الصفر قيمة حقيقية"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "تغلب على الخريطة المخرجة"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات dbmscap\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "تغلب على الخريطة المخرجة"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "عدد النقاط المطلوب تخصيصها"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "كتابة ملف جديد...\n"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -39946,64 +41831,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "طبقتين يجب تحديدهم"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "القيمة التى تعنى قيمة منعدمة"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "%s:منطقة غير صالحة"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "%s لم يمكن فتح "
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "%s لم يمكن فتح "
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "%s لم يمكن فتح "
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "خريطة الراستر االناتجة"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "غير موجودة <%s> الخريطة الراسترية "
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "مساحة: %d  عدد الجزر: %d\n"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "مساحة: %d  عدد الجزر: %d\n"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "غير موجودة <%s> المنطقة"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -40073,7 +41975,7 @@ msgstr "اسم الخريطة الراسترية المخرجة"
 msgid "Name for output raster map (blue)"
 msgstr "اسم الخريطة الراسترية المخرجة"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40125,7 +42027,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -40976,51 +42878,55 @@ msgstr "غير موجودة <%s> المنطقة"
 msgid "Option '%s' is required for new exposure info"
 msgstr "%s لم يمكن فتح "
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "ملف المدخل"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "اسم الخريطة الناتجة"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "وصف مبسط للملف الراسترى المخرج"
@@ -41306,6 +43212,10 @@ msgstr "عدد نقاط الإستيفاء"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41697,12 +43607,36 @@ msgid "Name for output raster map (saturation)"
 msgstr "اسم خريطة الراستر المخرجة"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "%s:لم يتم إنشاء الجدول"
+#~ msgid "<%s> already exists"
+#~ msgstr "dig_att لم يمكن العثور على ملف"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "%s:لم يتم إنشاء الجدول"
+#~ msgid "<%s> already compressed"
+#~ msgstr "dig_att لم يمكن العثور على ملف"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "لم يتم الثور على شيئ\n"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "عدم انشاء جدول الخواص"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "عدم انشاء جدول الخواص"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "اسم الخريطة الراسترية"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "الإحداثى الشمالى للخريطة\n"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "عدم انشاء جدول الخواص"
 
 #, fuzzy
 #~ msgid "time series"
@@ -41749,58 +43683,6 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "عدد الصفوف"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "اسم الخريطة ااراسترية الكنتورية"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "اسم الخريطة ااراسترية الكنتورية"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr "إخراج ملف الإشعاع المنتشرالراسترى"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr "إخراج ملف الإشعاع المنتشرالراسترى"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "اسم ملف الإرتفاعات الراسترى"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "اسم ملف الإرتفاعات الراسترى"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr "اسم ملف الإرتفاعات الراسترى"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr "إخراج ملف الإشعاع المنتشرالراسترى"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "عدد نقاط الإستيفاء"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
-
-#, fuzzy
 #~ msgid "Location: %s\n"
 #~ msgstr "%s لم يمكن فتح "
 
@@ -41809,20 +43691,20 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "%s"
 
 #, fuzzy
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "غير موجودة <%s> المنطقة"
+#~ msgid "Could not rewind input file"
+#~ msgstr "<%s>لم يتم العثور على الخريطة المدخلة\n"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "الخريطة المخرجة"
+#~ msgid "Name for basins raster map"
+#~ msgstr "اسم الخريطة الراسترية"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "خريطة الدليل الطبوغرافى"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "اسم الخريطة الراسترية"
+#~ msgid "output map <%s> exists"
+#~ msgstr "الخريطة المخرجة"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "%d طول الصفحة بالخط والأساس  "
@@ -41830,6 +43712,9 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "%d عرض الصفحة بالحرف والأساس "
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
+
 #, fuzzy
 #~ msgid "%s: Error writing temporary file"
 #~ msgstr "خطا فى محاولة قراءة ملف قاعدة البيانات dbmscap\n"
@@ -41847,6 +43732,24 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "غير موجود <%s> الراستر"
 
 #, fuzzy
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "غير موجودة <%s> المنطقة"
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "تغلب على الإسقاط مستخدما إسقاط الموقع"
+
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "%s:لم يتم إنشاء الجدول"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "تحويل خريطة راسترية إلى فيكتورية"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "اسم الخريطة الراسترية الناتجة"
 
@@ -41881,88 +43784,52 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "ضبط من المنطقة الحالية"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s>فى<%s>لم يمكن فتح الملف الفيكتورى"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "تحويل خريطة راسترية إلى فيكتورية"
+#~ msgid "OGR datasource name"
+#~ msgstr "اسم قاعدة البيانات"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "لم تحدد خرائط مدخلة"
 
 #, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "خريطة الراستر االناتجة"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "%s لم يمكن فتح ملف المدى ل"
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d فئات محملة من الجدول\n"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "طبقتين يجب تحديدهم"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "اسم الملف المخرج"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
 #, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "طبقتين يجب تحديدهم"
+#~ msgid "Env file not found"
+#~ msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
 #, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "اسم الملف المخرج"
+#~ msgid "PID file not found"
+#~ msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
 #, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "اسم الملف المخرج"
+#~ msgid "Command file not found"
+#~ msgstr "غير موجودة <%s> المنطقة"
 
 #, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "اسم الملف المخرج"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "خريطة الراستر االناتجة"
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
+#~ msgid "Name for output image"
 #~ msgstr "اسم الملف المخرج"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "طبقتين يجب تحديدهم"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "طبقتين يجب تحديدهم"
-
-#, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "طبقتين يجب تحديدهم"
-
-#, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "اختيار الخط الذى سيعرض به النص على الشاشة"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "%s لم يمكن فتح ملف المدى ل"
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "عرض الهيئات المدعمة والخروج"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d فئات محملة من الجدول\n"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr "اسم الخريطة الراسترية المخرجة"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "إخراج مسافات العلامات العظمى"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -42006,32 +43873,74 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "مترى"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "اسم الخريطة الراسترية المخرجة"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "إخراج مسافات العلامات العظمى"
+#~ msgid "Default: input"
+#~ msgstr "المسافة العظمى بين النقاط بوحدات الخريطة"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "التوقيع ..."
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "اختيار الخط الذى سيعرض به النص على الشاشة"
 
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "اسم الخريطة الراسترية الناتجة"
+#~ msgid "Text color or \"none\""
+#~ msgstr " اللون الأساس\n"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "[%s]لم يتم فتح ملف الخلية ل "
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "عرض الهيئات المدعمة والخروج"
 
 #, fuzzy
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "خطأ نظام: كود غير متوافق"
+#~ msgid "flowline"
+#~ msgstr "لم توجد<%s>الخريطة الفيكتورية"
+
+#~ msgid "Failed opening input dig file."
+#~ msgstr "dig عطل فى فتح ملف المدخل"
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "dig_att لم يمكن العثور على ملف"
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "dig_att عطل فى فتح ملف المدخل"
 
 #, fuzzy
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "خطأ نظام: كود غير متوافق"
+#~ msgid "Attaching categories..."
+#~ msgstr "وصل الفئات...\n"
+
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "(فئة %d) عطل فى وصل خاصية لخط"
+
+#, fuzzy
+#~ msgid "Writing new file..."
+#~ msgstr "كتابة ملف جديد...\n"
+
+#, fuzzy
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "%-5d النقط والخطوط كتبت فى ملف المخرج\n"
+
+#, fuzzy
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "%-5d أشباه المراكز كتبت فى ملف المخرج\n"
+
+#, fuzzy
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "اسم الخريطة الراسترية المدخلة"
+
+#, fuzzy
+#~ msgid "Endian of input vector map"
+#~ msgstr "اسم الخريطة الراسترية المدخلة"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr "لم توجد عناوين فئات, لم يتم إنشاء الجدول\n"
+
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -42132,112 +44041,126 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "%-5d الفئات قرأت فى الذاكرة\n"
 
 #, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr "لم توجد عناوين فئات, لم يتم إنشاء الجدول\n"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "خطأ نظام: كود غير متوافق"
 
 #, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "[%s]لم يتم فتح ملف الخلية ل "
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "dig عطل فى فتح ملف المدخل"
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "dig_att لم يمكن العثور على ملف"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "خطأ نظام: كود غير متوافق"
 
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "dig_att عطل فى فتح ملف المدخل"
+#, fuzzy
+#~ msgid "One or more coordinates"
+#~ msgstr "استخدام احداثيات مركز الخريطة\n"
 
 #, fuzzy
-#~ msgid "Attaching categories..."
-#~ msgstr "وصل الفئات...\n"
+#~ msgid "Name of elevation map"
+#~ msgstr "اسم ملف الإرتفاعات الراسترى"
 
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "(فئة %d) عطل فى وصل خاصية لخط"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "الزخرفة الممثلة لخلية بدون بيانات"
 
 #, fuzzy
-#~ msgid "Writing new file..."
-#~ msgstr "كتابة ملف جديد...\n"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "طبقتين يجب تحديدهم"
 
 #, fuzzy
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "%-5d النقط والخطوط كتبت فى ملف المخرج\n"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "%c :نوع غير معروف"
 
 #, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "%-5d أشباه المراكز كتبت فى ملف المخرج\n"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "%s لم يتم العثور على الخريطة الراسترية"
 
 #, fuzzy
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "اسم الخريطة الراسترية المدخلة"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "%s لم يتم العثور على الخريطة الراسترية"
 
-#, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "اسم الخريطة الراسترية المدخلة"
+#~ msgid "String representing no data cell value"
+#~ msgstr "الزخرفة المستخدمة لتمثيل قيمة الخلية بدون بيانات"
 
 #, fuzzy
-#~ msgid "Unknown raster map type"
-#~ msgstr "طباعة نوع الملف الراسترى فقط"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "وسيلة إستيفاء السطح لخريطة راسترية"
 
 #, fuzzy
-#~ msgid "Can't call bad function"
-#~ msgstr "لم يتم انشاء الدليل"
+#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
+#~ msgstr "وصف مبسط للملف الراسترى المخرج"
 
 #, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "خريطة الإرتفاعات"
+#~ msgid ""
+#~ "Computes anisotropic cumulative cost of moving between different "
+#~ "geographic locations on an input elevation raster map whose cell category "
+#~ "values represent elevation combined with an input raster map layer whose "
+#~ "cell values represent friction cost."
+#~ msgstr ""
+#~ "طبقة الخريطة الراسترية التى توضح التكلفة التجمعية المتحركة بين اماكن "
+#~ "جغرافية مختلفة على طبقة خريطة راسترية  تمثل قيم فئة خليتها التكلفة"
 
-#, fuzzy
-#~ msgid "One or more coordinates"
-#~ msgstr "استخدام احداثيات مركز الخريطة\n"
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "اسم الطبقة المستخدمة كشدة"
 
-#, fuzzy
-#~ msgid "Cannot create quaddata"
-#~ msgstr "لم يتم انشاء الدليل"
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "اسم الطبقة المستخدمة كتشبع"
 
-#, fuzzy
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "لم يتم انشاء الدليل"
+#~ msgid "Name of output layer to be used for GREEN"
+#~ msgstr "اسم الطبقة المخرجة كلون أخضر"
+
+#~ msgid "Name of output layer to be used for BLUE"
+#~ msgstr "اسم الطبقة المخرجة كلون أزرق"
+
+#~ msgid "Surface generation program."
+#~ msgstr "برنامج انشاء السطح"
 
 #, fuzzy
-#~ msgid "Cannot create tree"
-#~ msgstr "لم يتم انشاء الدليل"
+#~ msgid "%s=%s - illegal number of interpolation points"
+#~ msgstr "عدد نقاط الإستيفاء"
 
 #, fuzzy
-#~ msgid "Cannot create tree info"
-#~ msgstr "لم يتم انشاء الدليل"
+#~ msgid "Interpolating raster map <%s>... %d row... "
+#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
+#~ msgstr[0] "خريطة الراستر االناتجة"
+#~ msgstr[1] "خريطة الراستر االناتجة"
 
 #, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "تحويل خريطة راسترية إلى فيكتورية"
+#~ msgid "Output z-file (elevation) map"
+#~ msgstr "خريطة الإرتفاعات"
 
 #, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
+#~ msgid "Output aspect map (or fy)"
+#~ msgstr "اسم خريطة الراستر المخرجة"
 
 #, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "ملف المدخل"
+#~ msgid "Prefix for output raster map(s)"
+#~ msgstr "اسم الخريطة الراسترية المخرجة"
 
 #, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "لم يتم حساب شبه مركز المساحة"
+#~ msgid "String to represent no data cell"
+#~ msgstr "الزخرفة الممثلة لخلية بدون بيانات"
+
+#~ msgid "Character to represent no data cell"
+#~ msgstr "الحرف الممثل لخلية بدون بيانات"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr ""
-#~ "\n"
-#~ "يتم الآن تحويل الفيكتورات ...\n"
+#~ msgid "Binary raster file to be imported"
+#~ msgstr "الملف الراسترى الطلوب إدخالة"
+
+#~ msgid "Name of spread path raster map"
+#~ msgstr "اسم الخريطة الراسترية لطريق الإنتشار"
+
+#~ msgid "Run verbosely"
+#~ msgstr "تنفيذ بإسهاب"
 
 #, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d نقطة كتبت للمخرج\n"
+#~ msgid "%s available in mapset <%s>:"
+#~ msgstr "عرض الهيئات المدعمة والخروج"
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "اسم الطبقة المستخدمة كشدة"
+#, fuzzy
+#~ msgid "Null value indicator"
+#~ msgstr "مؤشر القيمة المنعدمة"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "اسم الطبقة المستخدمة كتشبع"
+#, fuzzy
+#~ msgid "Suppress warnings"
+#~ msgstr "تخطى رؤوس الصفحات"
 
 #, fuzzy
 #~ msgid ""
@@ -42254,41 +44177,40 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "اسم الملف الراسترى الموجود"
 
 #, fuzzy
-#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
-#~ msgstr "وصف مبسط للملف الراسترى المخرج"
+#~ msgid "Name of input raster map(s)"
+#~ msgstr "اسم الخريطة الراسترية المدخلة"
 
 #, fuzzy
-#~ msgid ""
-#~ "Computes anisotropic cumulative cost of moving between different "
-#~ "geographic locations on an input elevation raster map whose cell category "
-#~ "values represent elevation combined with an input raster map layer whose "
-#~ "cell values represent friction cost."
-#~ msgstr ""
-#~ "طبقة الخريطة الراسترية التى توضح التكلفة التجمعية المتحركة بين اماكن "
-#~ "جغرافية مختلفة على طبقة خريطة راسترية  تمثل قيم فئة خليتها التكلفة"
+#~ msgid "The output type of the space time dataset"
+#~ msgstr "اسم الخريطة الراسترية الجديدة"
 
-#~ msgid "Name of output layer to be used for GREEN"
-#~ msgstr "اسم الطبقة المخرجة كلون أخضر"
+#, fuzzy
+#~ msgid "Type of the aggregation space time dataset, default is strds"
+#~ msgstr "اسم الخريطة الراسترية الجديدة"
 
-#~ msgid "Name of output layer to be used for BLUE"
-#~ msgstr "اسم الطبقة المخرجة كلون أزرق"
+#, fuzzy
+#~ msgid "Prefix for output raster maps (default: input)"
+#~ msgstr "اسم خريطة الراستر المخرجة"
 
 #, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "وسيلة إستيفاء السطح لخريطة راسترية"
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
 
-#~ msgid "Surface generation program."
-#~ msgstr "برنامج انشاء السطح"
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "عرض الهيئات المدعمة والخروج"
 
 #, fuzzy
-#~ msgid "%s=%s - illegal number of interpolation points"
-#~ msgstr "عدد نقاط الإستيفاء"
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "عرض الهيئات المدعمة والخروج"
 
 #, fuzzy
-#~ msgid "Interpolating raster map <%s>... %d row... "
-#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
-#~ msgstr[0] "خريطة الراستر االناتجة"
-#~ msgstr[1] "خريطة الراستر االناتجة"
+#~ msgid "Invalid distance"
+#~ msgstr "%s:منطقة غير صالحة"
 
 #, fuzzy
 #~ msgid "allocation"
@@ -42299,114 +44221,123 @@ msgstr "اسم خريطة الراستر المخرجة"
 #~ msgstr "dig قراءة ملف...\n"
 
 #, fuzzy
-#~ msgid "Name of elevation map"
-#~ msgstr "اسم ملف الإرتفاعات الراسترى"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "الزخرفة الممثلة لخلية بدون بيانات"
+#~ msgid "Please specify input= or file="
+#~ msgstr "اسم الملف المخرج"
 
 #, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgid "Either -p or output= must be given"
 #~ msgstr "طبقتين يجب تحديدهم"
 
 #, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "طبقتين يجب تحديدهم"
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "اسم الملف المخرج"
 
 #, fuzzy
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "%c :نوع غير معروف"
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "اسم الملف المخرج"
 
 #, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "%s لم يتم العثور على الخريطة الراسترية"
+#~ msgid "Please specify input= or infile="
+#~ msgstr "اسم الملف المخرج"
 
 #, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "%s لم يتم العثور على الخريطة الراسترية"
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "اسم الملف المخرج"
 
-#~ msgid "String representing no data cell value"
-#~ msgstr "الزخرفة المستخدمة لتمثيل قيمة الخلية بدون بيانات"
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "التوقيع ..."
 
 #, fuzzy
-#~ msgid "Output z-file (elevation) map"
-#~ msgstr "خريطة الإرتفاعات"
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "طبقتين يجب تحديدهم"
 
 #, fuzzy
-#~ msgid "Output aspect map (or fy)"
-#~ msgstr "اسم خريطة الراستر المخرجة"
+#~ msgid "High Pass Filter Options"
+#~ msgstr "مضاهاة"
 
 #, fuzzy
-#~ msgid "Prefix for output raster map(s)"
-#~ msgstr "اسم الخريطة الراسترية المخرجة"
+#~ msgid "Name of elevation raster map"
+#~ msgstr "اسم ملف الإرتفاعات الراسترى"
 
 #, fuzzy
-#~ msgid "String to represent no data cell"
-#~ msgstr "الزخرفة الممثلة لخلية بدون بيانات"
+#~ msgid "coordinates of the outlet (east,north)"
+#~ msgstr "إحداثيات الشرق والشمال لنقطة البدء"
 
-#~ msgid "Character to represent no data cell"
-#~ msgstr "الحرف الممثل لخلية بدون بيانات"
+#, fuzzy
+#~ msgid "No maps output"
+#~ msgstr "اسم الخريطة المخرجة"
 
 #, fuzzy
-#~ msgid "Binary raster file to be imported"
-#~ msgstr "الملف الراسترى الطلوب إدخالة"
+#~ msgid "Cannot create quaddata"
+#~ msgstr "لم يتم انشاء الدليل"
 
-#~ msgid "Name of spread path raster map"
-#~ msgstr "اسم الخريطة الراسترية لطريق الإنتشار"
+#, fuzzy
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "لم يتم انشاء الدليل"
 
-#~ msgid "Run verbosely"
-#~ msgstr "تنفيذ بإسهاب"
+#, fuzzy
+#~ msgid "Cannot create tree"
+#~ msgstr "لم يتم انشاء الدليل"
 
 #, fuzzy
-#~ msgid "%s available in mapset <%s>:"
-#~ msgstr "عرض الهيئات المدعمة والخروج"
+#~ msgid "Cannot create tree info"
+#~ msgstr "لم يتم انشاء الدليل"
 
 #, fuzzy
-#~ msgid "Null value indicator"
-#~ msgstr "مؤشر القيمة المنعدمة"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "[%s]لم يتم فتح ملف الخلية ل "
 
 #, fuzzy
-#~ msgid "Suppress warnings"
-#~ msgstr "تخطى رؤوس الصفحات"
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "طبقتين يجب تحديدهم"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "مضاهاة"
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "طبقتين يجب تحديدهم"
 
 #, fuzzy
-#~ msgid "Name of input raster map(s)"
-#~ msgstr "اسم الخريطة الراسترية المدخلة"
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "طبقتين يجب تحديدهم"
 
 #, fuzzy
-#~ msgid "The output type of the space time dataset"
-#~ msgstr "اسم الخريطة الراسترية الجديدة"
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "تحويل خريطة راسترية إلى فيكتورية"
 
 #, fuzzy
-#~ msgid "Type of the aggregation space time dataset, default is strds"
-#~ msgstr "اسم الخريطة الراسترية الجديدة"
+#~ msgid "Site file <%s> not found"
+#~ msgstr "غير موجود <%s>الملف للمنظر ثلاثى الأبعاد "
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (default: input)"
-#~ msgstr "اسم خريطة الراستر المخرجة"
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "ملف المدخل"
 
 #, fuzzy
-#~ msgid "Name of elevation raster map"
-#~ msgstr "اسم ملف الإرتفاعات الراسترى"
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "لم يتم حساب شبه مركز المساحة"
 
 #, fuzzy
-#~ msgid "coordinates of the outlet (east,north)"
-#~ msgstr "إحداثيات الشرق والشمال لنقطة البدء"
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr ""
+#~ "\n"
+#~ "يتم الآن تحويل الفيكتورات ...\n"
 
 #, fuzzy
-#~ msgid "No maps output"
-#~ msgstr "اسم الخريطة المخرجة"
+#~ msgid "%d sites written."
+#~ msgstr "%d نقطة كتبت للمخرج\n"
 
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr "حساب إحصائيات المتغير الأحادى من خلايا ذات قيمة بالخريطة الراسترية"
+#~ msgid "Performing map %s + %s"
+#~ msgstr "خريطة الإرتفاعات"
 
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "%s:منطقة غير صالحة"
+#~ msgid "Can't call bad function"
+#~ msgstr "لم يتم انشاء الدليل"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "اسم الخريطة الراسترية الناتجة"
+
+#, fuzzy
+#~ msgid "Unknown raster map type"
+#~ msgstr "طباعة نوع الملف الراسترى فقط"
diff --git a/locale/po/grassmods_cs.po b/locale/po/grassmods_cs.po
index 89e76e8..01d3e41 100644
--- a/locale/po/grassmods_cs.po
+++ b/locale/po/grassmods_cs.po
@@ -15,7 +15,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_cs\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-04-10 15:14+0200\n"
 "Last-Translator: \n"
 "Language-Team: cs at li.org\n"
@@ -257,6 +257,7 @@ msgstr "Vrstva OGR <%s> nebyla nalezena"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -491,6 +492,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Chyba při zavírání souboru ASCII"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -630,29 +636,29 @@ msgstr "Nelze otevřít OGR zdroj dat '%s'"
 msgid "Unable to open database:"
 msgstr "Nelze otevřít databázi: "
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Spojení s databází nebylo definováno"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "Rastrová vrstva <%s> již existuje."
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Neschopen vytvořit tabulku: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "%s mapa <%s> nebyla nalezena"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -663,6 +669,11 @@ msgstr "Nelze vytvořit index"
 msgid "Unable grant on table:"
 msgstr "Nelze kopírovat tabulku"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Nelze nastavit velikost"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -793,7 +804,7 @@ msgstr "Nelze otevřít databázi <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -872,17 +883,17 @@ msgstr "Uživatel"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Nastavení"
 
@@ -917,39 +928,39 @@ msgstr "Vypiš parametry současného připojení a ukonči se"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -994,7 +1005,7 @@ msgstr "Vypiš všechny databázové ovladače."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1024,7 +1035,7 @@ msgstr "Nebyla nalezena žádná atributová tabulka"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1117,10 +1128,10 @@ msgid "Unable to open database <%s>"
 msgstr "Nelze otevřít databázi <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1309,11 +1320,11 @@ msgstr "Selhalo"
 msgid "succeeded"
 msgstr "úspěch"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Nelze otevřít soubor <%s> pro psaní"
@@ -1348,10 +1359,10 @@ msgstr "Jméno atributového sloupce použitého pro volbu dotazu 'query'"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Formát"
 
@@ -1360,7 +1371,7 @@ msgstr "Formát"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Výstupní vertikální oddělovač záznamů"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1368,7 +1379,7 @@ msgstr "Výstupní vertikální oddělovač záznamů"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Název výstupní mapy (pro standardní výstup použijte \"-\")"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Nezahrnovat do výstupu názvy sloupců"
 
@@ -1376,7 +1387,7 @@ msgstr "Nezahrnovat do výstupu názvy sloupců"
 msgid "Describe query only (don't run it)"
 msgstr "Dotaz pouze popiš (neprováděj)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Vertikální výstup (místo horizontálního)"
 
@@ -1426,6 +1437,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Soubor obsahující příkazy SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignoruj chyby SQL a pokračuj"
 
@@ -1601,7 +1613,6 @@ msgstr "Otočit obsah o 90 stupňů"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1724,7 +1735,7 @@ msgstr "Nelze vybrat data z tabulky"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1732,15 +1743,15 @@ msgstr "Nelze vybrat data z tabulky"
 msgid "Error in pj_do_proj"
 msgstr "Chyba v pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "Nelze získat klíčové hodnoty kartografického zobrazení aktuální lokace"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1835,7 +1846,7 @@ msgstr "Nelze vytvořit dočasný mask soubor PostScriptu"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1881,7 +1892,7 @@ msgstr "Nelze získat informace o vrstvě pro vektorovou mapu"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1894,26 +1905,27 @@ msgstr "Nelze získat informace o vrstvě pro vektorovou mapu"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nelze otevřít databázi <%s> ovladačem <%s>"
@@ -1923,7 +1935,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Typ sloupce není podporován (musí být string)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2069,13 +2082,13 @@ msgstr "Nelze otevřít dočasný PostScriptový soubor s maskou."
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2083,8 +2096,8 @@ msgstr "Nelze otevřít dočasný PostScriptový soubor s maskou."
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2128,10 +2141,11 @@ msgstr "Vyrovnání histogramu"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2145,13 +2159,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2160,6 +2177,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2175,7 +2193,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2195,11 +2213,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2211,27 +2229,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2249,74 +2267,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "rastr"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2326,6 +2347,7 @@ msgstr "rastr"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2341,6 +2363,7 @@ msgstr "rastr"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2359,6 +2382,7 @@ msgid "vector"
 msgstr "vektor"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2367,15 +2391,16 @@ msgstr "vektor"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2415,7 +2440,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Seznam podporovaných výstupních formátů"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Soubor <%s> byl vytvořen"
@@ -3024,69 +3049,70 @@ msgid "Vector map <%s> not found"
 msgstr "Vektorová mapa <%s> nebyla nalezena"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nelze otevřít vektorovou mapu <%s>"
@@ -3155,12 +3181,13 @@ msgstr "Žádné aktivní pseudo kontrolní body"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3295,7 +3322,7 @@ msgstr "Koeficienty dynamického popisování"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3466,7 +3493,7 @@ msgid "Area:"
 msgstr "Plocha\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Zapisuji atributy ..."
@@ -3481,7 +3508,7 @@ msgstr "Nelze vybrat atributy pro plochu %d"
 msgid "No attribute table for layer %d"
 msgstr "Nebyla nalezena žádná atributová tabulka"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3494,15 +3521,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Nelze otevřít databázi <%s> ovladačem <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Nelze poskytnou práva na tabulku <%s>"
@@ -3525,6 +3553,7 @@ msgid ""
 msgstr "Výpočet polohy středu..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3533,6 +3562,7 @@ msgid "extract"
 msgstr "vektor, vyjmutí"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3543,10 +3573,10 @@ msgstr "Výběr"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "From (z_mapy)"
@@ -3570,12 +3600,11 @@ msgstr "Nekopírovat atributy (viz též parametr 'new')"
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Atributy"
 
@@ -3594,39 +3623,45 @@ msgstr "Obrácený výběr"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3642,7 +3677,10 @@ msgstr "Obrácený výběr"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3717,7 +3755,7 @@ msgstr "Ignoruji textový vstup: %s"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3771,45 +3809,46 @@ msgstr ""
 "Součet náhodných kategoií musí být stejný nebo větší  než unikátní \"%s\" "
 "součet kategorí prvků %d"
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3851,11 +3890,11 @@ msgstr "Typ sloupce (%s) není podporován"
 msgid "Format <%s> does not support writing"
 msgstr "Ovladač <%s> nepodporuje vytváření rastrů"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -4008,9 +4047,9 @@ msgstr "Jméno vstupního souboru, nebo \"-\" pročtení ze standardního vstupu
 msgid "Name for output file where to save current settings"
 msgstr "Název výstupního souboru obsahující závěrečnou zprávu"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Vypsat podporované formáty a ukončit"
 
@@ -4033,7 +4072,7 @@ msgstr "Vypiš aktuální cestu k mapsetům"
 msgid "Print current status in shell script style"
 msgstr "Vypiš statistiku ve stylu pro shell skript"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "-s a -n se navzájem vylučují"
@@ -4049,18 +4088,18 @@ msgid "%s= must be specified"
 msgstr "Musí být zadány 2 vrstvy"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Podporované formáty:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4071,68 +4110,69 @@ msgstr "Podporované formáty:\n"
 msgid "network"
 msgstr "síť"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr "nejkratší cesta"
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Nalézá nejkratší cestu ve vektorové síti."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Typ hrany grafu"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Vrstva hran"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Typ hrany grafu"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "Vrstva uzlů grafu"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 "Název souboru obsahujícího počáteční a koncové body. Pokud nezadáno, čte se "
 "standardní vstup"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Sloupec s cenami hran (pohyb dopředu/obousměrně)."
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4144,10 +4184,11 @@ msgstr "Sloupec s cenami hran (pohyb dopředu/obousměrně)."
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4160,29 +4201,29 @@ msgstr "Sloupec s cenami hran (pohyb dopředu/obousměrně)."
 msgid "Cost"
 msgstr "Cena"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Sloupec s cenami hran (pohyb ve směru zpět)."
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Sloupec s cenami uzlů"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "Maximální vzdálenost od bodu k síti"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4192,20 +4233,56 @@ msgstr ""
 "prahovou hodnotu, cesta nebude nalezena a vytiskne se chybová zpráva. Pro "
 "zrychlení procesu udržujte tuto hodnotu co nejnižší."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Žádná tabulka."
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Vrstva / tabulka"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "Použít geodetickou kalkulaci pro lokace zadané sférickými souřadnicemi"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 "Zapiš výstup jako části původního vstupu, ne každou cestu jako jednu linii."
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4214,10 +4291,10 @@ msgstr "Současná projekce není ve sférických souřadnicích (šířka-délk
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4233,8 +4310,8 @@ msgstr "[%d] bodů bez kategorie ( nfield: [%d])"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4263,22 +4340,22 @@ msgstr "Nelze poskytnou práva na tabulku <%s>"
 msgid "Wrong input format: %s"
 msgstr "Špatný vstupní formát: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "Žádný bod s kategorií [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr "Bod s kategorií [%d] nelze dosáhnout z bodu s kategorií [%d]"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "Bod %f,%f je nedosažitelný z bodu %f,%f"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4287,17 +4364,17 @@ msgstr "Bod %f,%f je nedosažitelný z bodu %f,%f"
 msgid "Cannot insert new record: %s"
 msgstr "Nelze vložit nový záznam: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] chyb vstupního formátu"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "[%d] bodů dané kategorie chybí"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "%d cíl(e) jsou nedosažitelné (včetně bodů mimo mezní hodnotu)"
@@ -4308,7 +4385,7 @@ msgstr "%d cíl(e) jsou nedosažitelné (včetně bodů mimo mezní hodnotu)"
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4318,7 +4395,7 @@ msgstr "%d cíl(e) jsou nedosažitelné (včetně bodů mimo mezní hodnotu)"
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "vektor, geometry"
@@ -4373,17 +4450,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Nelzezískat seznam kategorií <%s>"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Požadovaný parametr <%s> nebyl zadán"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "Vektorová mapa <%s> již existuje"
@@ -4700,6 +4777,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Jméno souboru obsahující počáteční signatury"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4720,12 +4798,15 @@ msgstr "Jméno souboru obsahující počáteční signatury"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4886,11 +4967,11 @@ msgstr "Vrstva musí být > 0 pro 'where'"
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Spojení s databází nebylo definováno pro vrstvu %d "
@@ -5030,9 +5111,9 @@ msgid "Remove existing color table"
 msgstr "Smazat existující tabulku barev"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5096,7 +5177,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5114,8 +5195,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "-s a -n se navzájem vylučují"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5141,6 +5221,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Vektorová mapa <%s> není 3D"
@@ -5166,7 +5247,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Barevná tabulka rastrové mapy <%s> nebyl nalezena"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5175,13 +5256,14 @@ msgstr "Nelze načíst tabulku barev pro rastrovou mapu <%s>"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, fuzzy, c-format
 msgid "3D raster map <%s> not found"
@@ -5212,8 +5294,9 @@ msgstr "Načítám prvky..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5258,7 +5341,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Konec souboru dosažen pře koncem kategorií."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Nelze použít sloupec <%s>"
@@ -5315,6 +5398,7 @@ msgid "Point out of range"
 msgstr "Počet hran mimo rozsah"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5323,15 +5407,17 @@ msgstr "Počet hran mimo rozsah"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5427,14 +5513,15 @@ msgstr "Výstupní bodová mapa s odchylkami"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Výstupy"
 
@@ -5630,15 +5717,15 @@ msgstr "Interpolační metoda"
 msgid "Input failed"
 msgstr "Vstup selhal"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "%s selhalo"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "%d bytů prostoru na disku pro dočasné soubory."
@@ -5686,9 +5773,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Žádný bod s kategorií [%d]"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5796,9 +5883,9 @@ msgstr "Chyba při zavírání souboru ASCII"
 msgid "3D raster map <%s> created"
 msgstr "Rastrová mapa <%s> byla vytvořena."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5809,17 +5896,17 @@ msgstr "Nelze vložit nový řádek: %s"
 msgid "Init costs from node %d"
 msgstr "Počáteční ceny z uzlu %d "
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Steinerův strom"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Vytvořit Steinerův strom pro síť a dané koncové body"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5828,71 +5915,108 @@ msgstr ""
 "'Minimální Steinerův strom' je NP-těžká úloha, v tomto module je použit "
 "heuristický algoritmus, výsledek nemusí být optimální"
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "Vrstva uzlů (používáno pro koncové body)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Sloupec s cenami hran (pro oba smery)"
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr "Kategorie bodů na koncích (vrstva je dána parametrem nlayer)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Počet Steinerových bodů (-1 pro všechny možné)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Bod není spojen se sítí"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Počet měst (cities): [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Nedostatek koncových bodů(< 2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "Požadovaný počet Steinerových bodů > než je možné"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Počet vstupních bodů: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr "Konec na uzlu [%d] nemůže být spojen s koncem na uzlu [%d]"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 "[%d] (nedosažitelné) uzly odstraněny ze seznamu kandidátů na Steinerovy body"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "MST cena = %f"
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "Hledám [%d]. Steinerův bod"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr "Steinerův bod na uzlu [%d] byl přidán do koncových bodů (MST cena =%f)"
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "Nebyl nalezen žádný Steinerův bod -> opuštím cyklus"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Počet Steinerových bodů (-1 pro všechny možné)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "MST cena = %f"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5912,18 +6036,20 @@ msgstr "Nebyl nalezen žádný Steinerův bod -> opuštím cyklus"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Importuji"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "body"
@@ -5956,9 +6082,9 @@ msgstr "Jméno sloupce obsahujícího souřadnici y"
 msgid "Name of column containing z coordinate"
 msgstr "Jméno sloupce obsahujícího souřadnici z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Vytvořit 3D výstup"
@@ -6009,7 +6135,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Nelze otevřít kurzor pro výběr: '%s'"
@@ -6027,7 +6153,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "sloupec x/y/z musí být integer nebo double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Kopíruji atributy..."
@@ -6054,7 +6180,88 @@ msgstr[0] "%d bodů zapsáno do vektorové mapy."
 msgstr[1] "%d bodů zapsáno do vektorové mapy."
 msgstr[2] ""
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Vypadá to, že kartografické zobrazení datasetu neodpovídá zobrazení aktuální "
+"lokace \n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO  je:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "iMPORT PROJ_INFO datasetu je:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Zvažte vytvoření nové location s parametry 'location' ze vstupního "
+"datasetu.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"Nelze převést informace o vstupní mapové projekci do formátu GRASSu (pro "
+"kontrolu)"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Přeskakuje se kontrola kartografického zobrazení."
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "Kartografické zobrazení vstupního datasetu a aktuální lokace souhlasí."
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr " 4 parametry vyžadovány pro 'prostorový' parametr."
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Neplatné zrange"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Neznámá volba  pravidla: '%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6077,7 +6284,7 @@ msgstr[2] ""
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6086,7 +6293,7 @@ msgstr[2] ""
 msgid "statistics"
 msgstr "Statistika"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6725,8 +6932,8 @@ msgstr "Typ sloupce (%s) není podporován"
 msgid "Operator '%s' is not supported for type line"
 msgstr "fOperátor '%s' není podporuje typ linie"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Nelze číst vektorovou mapy"
@@ -6785,12 +6992,12 @@ msgid "Breaking lines..."
 msgstr "Rozbíjím linie ... "
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Odstraňuji duplicitní centroidy ..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "Čistím hranice v uzlech..."
 
@@ -6799,11 +7006,11 @@ msgstr "Čistím hranice v uzlech..."
 msgid "Merging lines..."
 msgstr "Bufer linií...."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Přidávám ostrovy..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Nelze spočítat centroid oblasti"
 
@@ -6818,12 +7025,13 @@ msgstr "Dotazuji vektorovou mapu <%s>..."
 msgid "Attribute not found"
 msgstr "Atribut(y) nenalezeny"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Zapisuji centroidy ..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Nelze vložit nový řádek: '%s'"
@@ -6897,108 +7105,110 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "Vektorová mapa <%s> nebyla nalezena v současném mapsetu"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Typ vzorkování"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Náhodně vytvořit 2D/3D bodovou vektorovou vrstvu."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "počet bodů, které mají být vytvořeny"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "načítání bodů ve vstupní vektorové vrstvě "
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "minimální výška z (nutný přepínač -znebo název sloupce)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "maximální výška z (nutný přepínač -znebo název sloupce)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Jméno sloupce obsahujícího numerická data"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Zapíše y-souřadnice do sloupce místo vytvoření 3D vektoru"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Typ tabulky barev"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Vytvořit 3D výstup"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Vybírám prvky...."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "počet bodů,musí být > 0 (zadáno %d)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d z %d prvků vybráno pro vektorovou mapu <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Jméno existující vektorové mapy (to)"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Neschopen vytvořit tabulku: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "Tabulka by měla obsahovat pouze dva sloupce"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -7006,20 +7216,20 @@ msgstr ""
 "vytvořilli jste nepodporovaný typ sloupce. Tento modul podporuje pouze tyto "
 "typy slopuců INTEGER a DOUBLE PRECISION."
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr ""
 "Počáteční vektorová mapa <%s> neobsahuje v současném regionu žádné body"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
 "Počáteční vektorová mapa <%s> neobsahuje v současném regionu žádné body"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Vytvářím body..."
 
@@ -7065,7 +7275,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Jméno rastrového souboru, na který budou dotazy směřovány"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Název sloupce atributu, který má být použit pro štítky"
@@ -7079,82 +7289,80 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Vytiskni průměrné hodnoty namísto intervalů"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Sloupec <%s> nebyl nalezen"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Sloupec <%s> nebyl nalezen v tabulce <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Typ sloupce není podporován"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Typ rastru je celé číslo, typ sloupce je float"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Typ rastru je float a typ sloupce je celé číslo, některá data mohou být "
 "ztracena!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Načítám prvky..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "%d linií nebo hranic nalezeno ve vektorové mapě <%s@%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d bodů je mimo současný region, vynechávám"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "%d bodů bez kategorie, vynechávám"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Více bodů (%d) kategorie %d, hodnota nastavena na 'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d kategorií bylo načteno z vektorové mapy"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d duplicitních kategorií ve vektorové mapě"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d kategorií bylo načteno z tabulky"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d kategorií z vektorové mapy chybí v tabulce"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d chyb při aktualizaci"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d záznamů aktualizováno"
@@ -7162,14 +7370,14 @@ msgstr "%d záznamů aktualizováno"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Aktualizuj statistiku rastru"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7257,7 +7465,7 @@ msgstr "První sloupec je vždy kategorie prvku 'from' zavolaná from_cat"
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "Vektorová mapa <%s> není v tomto mapsetu a nelze ji měnit"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7315,6 +7523,151 @@ msgstr "Žádný bod s kategorií [%d]"
 msgid "%d records updated"
 msgstr "%d záznamů aktualizováno"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Spojení s databází nebylo definováno pro vrstvu %d "
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Typ sloupce není podporován"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Žádný záznam pro kategorii [%d]"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Žádný záznam pro kategorii [%d]"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Sloupec <%s> nebyl nalezen"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Vytvořit vektorové body jako 3D body"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Konvertuje vektorové vrstvy OGR na GRASS vektorové mapy."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Číslo vrstvy (from)"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld kategorií"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Číslo vrstvy (to)"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Číslo vrstvy (to)"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Číslo vrstvy, ke které se mají sloupce přidat"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "|Sloupec musí být číselnéh typu"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Sloupce"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Jméno sloupce s definicí barvy (se vstupem RRR:GGG:BBB)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+msgid "Color definition in R:G:B form"
+msgstr "Definice barvy ve tvaru R:G:B"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Nelze číst barvy."
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Nastavit na z data"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Nastavit na z data"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Limit při importu do současného regionu"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Žádná tabulka."
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7351,6 +7704,12 @@ msgstr "Chyba ve sloupci s definicí barvy (%s),  kategorie %d"
 msgid "Label column was not specified, no labels will be written"
 msgstr "Sloupec s popisky nebyl určen, nebudou zapsány žádné popisky"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Sloupec <%s> nebyl nalezen"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7381,46 +7740,53 @@ msgstr "Nelze použít sloupec <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d z %d prvků vybráno pro vektorovou mapu <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Průchod %d z %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "Problém při zpracovávání ploch z vektorové mapy <%s>, pokračuji...."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "Problém při čtení linií z vektorové mapy <%s>, pokračuji...."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Zapisuji rastrovou mapu..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Vytvářím podpůrné soubory pro rastrovou mapu..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 "Barva může být aktualizována z databáze pouze jesstli je použití=atribut"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Změněných ploch: %d z %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Změněných bodů/linií: %d z %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7486,16 +7852,18 @@ msgstr "Rastrový soubor pro povrch"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "Maximální velikost použité paměti bude použité s volbou -m (v MB)"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Statistika použitá pro rastrové hodnoty"
@@ -7536,7 +7904,7 @@ msgstr "Parametr column nemůže být použit současně se souřadnicí z"
 msgid "Unknown option '%s'"
 msgstr "Neznámá volba '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Načítám plochy..."
 
@@ -7554,12 +7922,17 @@ msgstr "Nelze použít zadaný sloupec"
 msgid "Get area %d failed"
 msgstr "Selhalo získávání plochy %d"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Import souboru DXF selhalo!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "Plochy bez centroidů (může být v pořádku pro ostrovy)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Centroid plochy bez categorie"
 
@@ -7590,11 +7963,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Název sloupce se stupni centrality"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Sloupce"
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr ""
@@ -7777,22 +8145,22 @@ msgstr "Typ prvků, do něhož bude probíhat konverze"
 msgid "Incompatible types"
 msgstr "Nekompatibilní typy"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr "Nelze kopírovat atributovou tabulku do výstupní mapy"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr "obchodní cestující"
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr "Vytvoří cyklus spojující dané uzly (Problém obchodního cestujícího)."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7800,79 +8168,85 @@ msgstr ""
 "Problém obchodního cestujícího (TSP) je NP-těžká úloha, v tomto modulu je "
 "použit heuristický algoritmus, vytvoření cyklu nemusí být optimální řešení"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr "Kategorie bodů ('cities') na uzlech (vrstva je dána parametrem nlayer)"
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "Vrstva uzlů (použito pro města (cities))"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "EXPERIMENTÁLNÍ:Sloupec cen (pohyb ve směru zpět)."
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr ""
 "Název výstupního souboru uchovávajícího posloupnost uzlů (pro standardní "
 "výstup použijte \"-\")"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr "Kategorie bodů ('cities') na uzlech (vrstva je dána parametrem nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Bod není spojen se sítí"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Počet měst (cities): [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Nedostatek měst (cities) (<2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Vytvářím cenovou mezipaměť..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "Žádný bod na uzlu %d"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Žádná kategorie pro bod na uzlu %d"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Místo určení [kategorie %d] je nedosažitelné z místa [kategorie %d]"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr "Vyhledávání nejkratšího okruhu..."
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr "Okruh s celkovou cenou %.3f"
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Nelze otevřít soubor '%s' pro zápis"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "izoinie"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Rozdělí síť podle cenových izolinií."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7883,7 +8257,7 @@ msgstr ""
 "uzel musí být otevřen (ceny >=0). Hodnota ceny středového uzlu bude použita "
 "při výpočtu."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7892,50 +8266,50 @@ msgstr ""
 "Kategorie středů (body na uzlech), k nimž bude síť alokována, vrstva pro "
 "tyto kategorie je dána parametrem nlayer"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Ceny pro izolinie"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr "Špatná cena izolinie: %f"
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr "Hodnota izolinie: %f méně než předchozí"
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr "Hodnota izolinie %d: %f"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr "Nedostatečné ceny, všechny prvky spadají do sprvní skupiny hodnot."
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr "Střed na uzavřeném uzlu (hodnota = -1) ingorován"
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Počet středů (center): %d (nlayer:%d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 "Nedostatečný počet středů pro vybranou vrstvu (nlayer). Nic nebude přiděleno."
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Počítám ceny ze středu %d..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr "Nelze získat segment linie, segment je mimo linii"
 
@@ -8142,14 +8516,15 @@ msgstr ""
 "Cesta k výslednému souboru ASCII nebo jmenéno ASCII vektoru, pokud je zadána "
 "volba '-o'."
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Pokud není zadán, čte se standardní vstup"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8173,9 +8548,13 @@ msgstr "Pokud není zadán, čte se standardní vstup"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8237,7 +8616,7 @@ msgstr "Oddělovač sloupců (bodový mód)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 "Počet míst za desetinnou čárkou (pouze pro mapy s plovoucí desetinnou čárkou)"
@@ -8303,7 +8682,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Nelze získat informace o vrstvě pro vektorovou mapu <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8402,9 +8781,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Nelze otevřít vstupní soubor <%s>. Chyba %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Nelze vytvořit index pro tabulku <%s>, klíč <%s>"
@@ -8993,7 +9373,7 @@ msgstr ""
 "Poznámka: Včetně minima první třídy\n"
 "\n"
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Vrstva %d"
@@ -9014,7 +9394,7 @@ msgstr "Nelzevypočítat inverzní matici"
 msgid "Resolving conflicts..."
 msgstr "Řeším problémy..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Generalizace (%s)..."
@@ -9044,201 +9424,205 @@ msgid "Performs vector based generalization."
 msgstr "Generalizace prvků vektorové mapy"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Generalizace prvků vektorové mapy"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Algoritmus Spline interpolace"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Generalizace prvků vektorové mapy"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "Algoritmus generalizace"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "Maximální přípustná hodnota"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "Parametr nadhledu"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr "Procent bodů ve výstupu z algoritmu 'douglasova_redukce'"
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr "Posun vypočítaných bodů vzhledem k originálu"
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr "Minimální úhel mezi dvěma následujícími segmenty v Hernitově mtodě"
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "Mezní stupeň pro generalizaci síťě"
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr "Přísnost dodržení mezní vzdálenosti v generalizaci síťě"
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "Práhová hodnota pro generalizi sítě"
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr "Parametr vyhlazení (snakes alpha)"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr "Parametr vyhlazení (snakes beta)"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Počet opakování"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 msgid "Do not copy attributes"
 msgstr "Nekopírovat atributy"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Neznámá metoda"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Sloupec <%s> nebyl nalezen v tabulce <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Nelze vytvořit vektorovou mapu <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Přemisťuji data:.."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "Generalizace prvků vektorové mapy"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Generalizace (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Používám rozlišení [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "Font '%s' není font typu FreeType \n"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "Font '%s' není font typu FreeType \n"
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, fuzzy, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 "%d hranic nebylo ořezáno, protože ořezání by poškodilo jejich topologii"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, fuzzy, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "Počet opěrných bodů byl snížen z %d na %d [%d%%]"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 #, fuzzy
 msgid "changed"
 msgstr "Řádky změněny"
@@ -9313,8 +9697,8 @@ msgstr "Velikost ikony bodových prvků (v mapových jednotkách)"
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Barva textu"
 
@@ -9327,13 +9711,13 @@ msgstr "Barva textu"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Barvy"
@@ -9532,14 +9916,14 @@ msgstr "Vyhledávání nejkratšího okruhu..."
 msgid "Cleaning output topology"
 msgstr "Nástroj pro čištění topologie"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Mazání přívěsků"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Mazání mostů"
@@ -9592,14 +9976,6 @@ msgstr "Načítám plochy..."
 msgid "Constructing 3D hull..."
 msgstr "Převádím ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9687,7 +10063,9 @@ msgstr "Bilineární interpolace"
 msgid "Bicubic interpolation"
 msgstr "Bikubická interpolace"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Tykhonovův upravující parametr (ovlivňuje vyhlazení)"
 
@@ -10104,6 +10482,193 @@ msgstr "Chyba při čtení ASCII souboru: '%s'"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: Zapisuji hlavičku VTK"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Žádná bodová data nenalezena"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "rastr"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d tříd."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Cluster separace"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Číslo vrstvy (vektorová mapa A)"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Maximální vzdálenost od bodu k síti"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Minimální počet pixelů ve třídě"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Cluster separace"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "Nelze nastavit předvybranou vektorovou mapu na úrovni otevření"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Počet tříd musí být < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Velikost sousedů musí být větší než nula"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Počítám plochy ve zkusných plochách ..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Žádné body nebyly nalezeny, přeskakuji type=point"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Vytvářím cenovou mezipaměť..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s=%s - musí být větší než nula"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Používám maximální vzdálenost mezi jednotlivými body: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Nebyly nalezeny žádné rastrové mapy"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Maximální vzdálenost k nejbližšímu prvku"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "Průměr = %.5lf"
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Směrodatná odchylka"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Používám maximální vzdálenost mezi jednotlivými body: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Hledání nákladů cesty..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "npoints = %d, nterrain = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Nic nebylo nalezeno, přeskakuji typ=line"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Vytvářím body..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Zapisuji výslednou rastrovou mapu %s... "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Načítám vstupy..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Žádná bodová data nenalezena"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "vektor, jádrová hustota"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "Nalezeno%d tříd"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "Nalezeno%d tříd"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10235,26 +10800,26 @@ msgstr "Nelze aktualizovat údaje v aux tabulce"
 msgid "Impossible to write to aux table"
 msgstr "Nelze zapsat údaje do aux tabulky"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Provádí správu síťě"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Provádí správu síťě"
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "Nelze otevřít vektorový soubor <%s> v úrovni topologie %d"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d nových bodů zapsáno do výstupní mapy"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "[%d] linií načteno a zapsáno do výstupu"
@@ -10295,7 +10860,7 @@ msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 "Požadováno pro operaci 'spojení'. Spojuje body v dané mezní vzdálenosti."
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10309,14 +10874,14 @@ msgstr "Název vstupní bodové vektorové vrstvy"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr "Požadováno pro operaci 'spojení'"
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Operace bude vykonána"
@@ -10345,48 +10910,132 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Nalézá nejkratší cestu ve vektorové síti."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 "Požadováno pro operaci 'spojení'. Spojuje body v dané mezní vzdálenosti."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Jména vstupních souborů"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Požadováno pro operaci 'spojení'"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Přiřaď jedinečné kategorie novým bodům "
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "PRo operaci 'nodes' (uzly)"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Vektorová mapa s cílovými body"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Vrstva linie"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Neznámá operace"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "Mezní hodnota musí být >= 0"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Nelze číst řádek vstupu z <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Nelze vložit do tabulky: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Nelze otevřít vektorovou mapu <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Nelze vytvořit vektorovou mapu <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Tabulka <%s> v databázi <%s> neexistuje"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Rastrová mapa <%s> již existuje a bude přepsána."
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Rastrová mapa <%s> již existuje a bude přepsána."
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Nelze otevřít databázi <%s> ovladačem <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Nelze vytvořit tabulku <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Nelze kopírovat atributovou tabulku do vektorové mapy <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Nelze vytvořit tabulku <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10522,7 +11171,7 @@ msgid "Categories already exist in layer %d"
 msgstr "Načteno %d kategorií z vektorové mapy (vrstva %d)"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "Nelze vypočítat centroid plochy"
 
@@ -10633,7 +11282,7 @@ msgstr "Spojení s databází nebylo definováno pro vrstvu %d "
 msgid "Key column type is not integer"
 msgstr "Sloupec s klíčem není typu integer"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Nelze načíst data z tabulky <%s>"
@@ -11445,7 +12094,7 @@ msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 "Vynutit 2D výstup, i když je vstup 3D (platí pouze pro výstup Shapefile)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr "Užitečné, pokud je vstup 3D, ale všechny souřadnice z jsou totožné"
@@ -11712,8 +12361,8 @@ msgstr "Lokace obsahující vstupní vektorovou vrstvu"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Zdroj"
@@ -11722,7 +12371,7 @@ msgstr "Zdroj"
 msgid "Mapset containing input vector map"
 msgstr "Mapset obsahující vstupní vektorové vrstvy"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Název cílového mapsetu"
@@ -11732,7 +12381,7 @@ msgstr "Název cílového mapsetu"
 msgid "Name of input vector map to re-project"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Cesta k adresáři databáze GRASSu se vstupní lokací"
 
@@ -11747,8 +12396,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "Plocha"
@@ -11783,17 +12432,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "Vstupní a výstupní lokace nemohou být stejné."
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Kontroluje se lokace <%s>, mapset <%s>"
@@ -12161,221 +12812,387 @@ msgstr ""
 "Tabulka: %s\n"
 "Sloupec s klíčem: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Vytvoří nový binární vektorovou mapu kombinací více vektorových vrstev."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 "Výstupní vektorová mapa, do které budou zapsány výběry vstupního vektoru"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Nevytvářet topologii"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
-"Přiložit soubory k existujícímu souboru (musí být aktivována volba přepsání)"
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Zkopíruj také atributovou tabulku."
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "V současnosti je podporována pouze vrstva 1."
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+"Přiložit soubory k existujícímu souboru (musí být aktivována volba přepsání)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Postrádám tabulku"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Klíčové sloupce jsou různé."
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Počet sloupců se liší."
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Jména sloupců se liší."
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Typy sloupců se liší."
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "Délky textových sloupců se liší"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Klíčový sloupec nenalezen"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "Výstupní mapa není 3D."
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Nelze vytvořit tabulku <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Opravuji vektorovou mapu <%s@%s>..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "Chyba při čtení souboru <%s> - některá data mohou být poškozena"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Buduji topologii pro vektorovou mapu <%s>..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "Průniky hranic budou muset být spojeny (snap)."
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "Linie souborům společné budou muset být editovány."
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "Informace v hlavičce by také měly být upraveny."
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d vektorových map opraveno"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Nelze otevřít kurzor pro výběr: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Nelze přidat řádek"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Neznámý typ sloupce"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Nelze vložit nový záznam: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "Přeskakuje se kontrola kartografického zobrazení."
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Konvertuje vektorové vrstvy OGR na GRASS vektorové mapy."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Vstup selhal"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Číslo vrstvy (to)"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Číslo vrstvy, ke které se mají sloupce přidat"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Importovat pouze subregion"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Subegion"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Formát: xmin,ymin,xmax,ymax - obvykle Z,J,V,S"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Název nové lokace, která má být vytvořena"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Rozsah filtru pro z data: (min,max)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Celočíselné hodnoty jsou importovány"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Celočíselné hodnoty jsou importovány"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Název vstupní vektorové vrstvy řídkého bodového pole"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Číslo vrstvy (vektorová mapa A)"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Celočíselné hodnoty jsou importovány"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Korelace"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Celočíselné hodnoty jsou importovány"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Importuji body ..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s>  neplatný počet bodů "
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Název nové lokace, která má být vytvořena"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "Vypíše historii rastrové mapy namísto infa"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "Přepsat kartografické zobrazení (použít zobrazení lokace)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Limit při importu do současného regionu"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Vstupní vektorová mapa obsahující body"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr "Rozšířit region podle nového datasetu"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Vytvořit rovnoběžky ke vstupním liniím."
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr "Přepsat kartografické zobrazení (použít zobrazení lokace)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Nelze získat jednotky kartografického zobrazení aktuální lokace"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Skupina <%s> neexistuje"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Nevytvářet atributové tabulky"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Neznámá volba  pravidla: '%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Číslo vrstvy (from)"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr "Vyberte současné nastavení regionu nebo prostorové volby, ne oboje"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr " 4 parametry vyžadovány pro 'prostorový' parametr."
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12383,122 +13200,172 @@ msgstr ""
 "Nelze převést vstupní mapovou projekci do formátu GRASSu; nelze vytvořit "
 "novou location."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Neschopen vytvořit tabulku: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Lokace <%s> vytvořena"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Vektorová mapa '%s' již existuje a bude přepsána."
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"Nelze převést informace o vstupní mapové projekci do formátu GRASSu (pro "
-"kontrolu)"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "Přeskakuje se kontrola kartografického zobrazení."
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Importuji body ..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Importuji body ..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Vypadá to, že kartografické zobrazení datasetu neodpovídá zobrazení aktuální "
-"lokace \n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO  je:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d bodů načteno"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "iMPORT PROJ_INFO datasetu je:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d bodů načteno"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Zvažte vytvoření nové location s parametry 'location' ze vstupního "
-"datasetu.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "Kartografické zobrazení vstupního datasetu a aktuální lokace souhlasí."
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Vektorová mapa '%s' již existuje a bude přepsána."
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d bodů mimo práhovou hodnotu"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d bodů mimo práhovou hodnotu"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Nelze otevřít databázi <%s> ovladačem <%s>"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Importuji body ..."
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported (limit was %d)"
 msgstr "%d bodů načteno"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "%d bodů načteno"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "%d bodů mimo práhovou hodnotu"
+
+#: ../vector/v.in.lidar/main.c:759
+#, fuzzy, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr "%d bodů mimo práhovou hodnotu"
+
+#: ../vector/v.in.lidar/main.c:761
+#, fuzzy, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "%d bodů mimo práhovou hodnotu"
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d bodů mimo práhovou hodnotu"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d bodů mimo práhovou hodnotu"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d bodů mimo práhovou hodnotu"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Nedostatek bodů, je požadováno %d"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Nelze otevřít vektorovou mapu <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Nelze otevřít databázi <%s> ovladačem <%s>"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12507,22 +13374,22 @@ msgid ""
 msgstr ""
 "Vytvoří novou vektorovou mapu jako odkaz na OGR vrstvu (pouze pro čtení)."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Vrstva <%s> není dostupná"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Nelze vytvořit tabulku : '%s'"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Nelze vytvořit soubor <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Rastrová mapa <%s> byla vytvořena."
@@ -12532,12 +13399,12 @@ msgstr "Rastrová mapa <%s> byla vytvořena."
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Název výstupního souboru"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Název rastrového souboru, který má být spojen"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12549,26 +13416,30 @@ msgstr ""
 "\t\tESRI ShapeFile: název souboru ShapeFile\n"
 "\t\tSoubor MapInfo: název souboru MapInfo"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Jméno výstupní rastrové mapy (výchozí: jméno vstupní mapy)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Vypiš dostupné vrstvy z datového zdroje a ukonči se"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Vypiš dostupné vrstvy z datového zdroje a ukonči se"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 #, fuzzy
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "Formát: vrstva typ počet min max"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12756,145 +13627,145 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr "Vytvoří vnější rohy hranaté"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Netytváří 'čepice' na konci ronvoběžek"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Vypsat vektorové atributy"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 "Vyberte bufer vzdálenost/vedlější vzdálenost/úhel nebo sloupec ale ne oboje."
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "Tato volba vyžaduje jeden sloupec"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' musí být . 0 pro 'where'"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Tolerance byla přenastavena na %g"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Neplatná žádost delete"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Tolerance v jednotkách mapy = %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Nelze vybrat data z tabulky <%s>"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Bufer ploch..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Atribut má neplatnou velikost (%.3f) pro kategorii %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Tolerance v jednotkách mapy: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Bufer ploch..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Bufery linií... "
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Přebudovávám části topologie... "
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "Spojování hranic..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Zlom polygonů"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Lámu hranice ..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Čistím hranice v uzlech..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Výpočet polohy středu..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Čistím hranice v uzlech..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Lámu hranice ..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Výpočet polohy středu..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Nelze vypočítat centroid plochy"
@@ -13171,18 +14042,18 @@ msgstr "Název výstupního souboru"
 msgid "%d features written to '%s'."
 msgstr "%d prvků zapsáno do '%s'."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "alokace"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "Určit (alokovat) podsíťě pro nejbližší centra (směr ze středu)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
@@ -13191,22 +14062,31 @@ msgstr ""
 "Střední uzel musí být otevřen (ceny >= 0). Ceny středových uzlů jsou použity "
 "ve výpočtu"
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Počet středů: [%d] (nlayer:[%d])"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 #, fuzzy
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 "Nedostatečný počet středů pro vybranou vrstvu (nlayer). Nic nebude alokováno."
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Počítám ceny ze středů ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Počítám ceny ze středů ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13264,7 +14144,7 @@ msgstr "%s=%s - neplatný počet bodů pro interpolaci"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13948,7 +14828,7 @@ msgstr "Není žádný záznam v LR tabulce"
 msgid "More than one record in LR table"
 msgstr "Více než jeden záznam nalezen v LR tabulce"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14248,29 +15128,39 @@ msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 "%d hranic nebylo ořezáno, protože ořezání by poškodilo jejich topologii"
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Vypsat vektorové atributy"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "WHERE podmínky SQL dotazu pro prvky 'do' ('to') beze slova 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Výstupní vertikální oddělovač záznamů"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 "Vypsat minimální rozměry regionu vybraného vektorového prvku místo atributů"
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 msgid "Region"
 msgstr "Region"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 msgid "Exclude attributes not linked to features"
 msgstr "Vynechat atributy, které nejsou připojeny k prvkům"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
@@ -14279,16 +15169,16 @@ msgstr ""
 "Nelze otevřít vektorovou mapu <%s> na úrovni topologie. Přepínač '%c' "
 "vyžaduje úroveň topologie."
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Nelze otevřít kurzor pro výbě"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Nelze získa tokraj regionu pro plochu %d"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Nelze získat okraj regionu pro linii %d"
@@ -14329,46 +15219,50 @@ msgstr "Maximální počet bodů v segmentu"
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Zapíše opěrné body linií."
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Vyhlazení musí být pozitivní hodnota."
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Neznámý typ sloupce '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Nelze získat jednotky mapové projekce vstupní mapy"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "délka %f\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "délka %f\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Počet tříd musí být < 256!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -14489,7 +15383,9 @@ msgstr "Úhel rotace (ve stupních proti směru hodinových ručiček)"
 msgid "Number of vertex points per grid cell"
 msgstr "Počet opakování \t= %d buňek\n"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Typ prvků 'do' ('to')"
@@ -14589,10 +15485,13 @@ msgid "Writing out vector columns..."
 msgstr "Zapisuji vektorové sloupce ... "
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14604,6 +15503,7 @@ msgstr "rastr, mapová algebra"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14761,8 +15661,9 @@ msgstr "Umístění"
 msgid "Offset label in y-direction"
 msgstr "Ofset štítku ve směru y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Název písma"
 
@@ -14834,6 +15735,130 @@ msgstr "Hledám kvadráty..."
 msgid "Counting points quadrats..."
 msgstr "Počítám plochy ve zkusných plochách ..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Bodová klasifikace"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Žádná bodová data nenalezena"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Celočíselné hodnoty jsou importovány"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Celočíselné hodnoty jsou importovány"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s>  neplatný počet bodů "
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Maximální přípustná hodnota"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Počet opakování \t= %d buňek\n"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Počet opakování \t= %d buňek\n"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Směrodatná odchylka"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14848,28 +15873,28 @@ msgstr "Informace o cílové lokaci a mapsetu pro skupinu <%s> nejsou dostupné"
 msgid "Target location <%s> not found"
 msgstr "Cílová lokace <%s> nebyla nalezena"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Mapset <%s> ve vstupní lokaci <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "Přístup odepřen"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "nenalezen"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "Prosím zpusťte i.target pro skupinu"
 
@@ -15221,11 +16246,6 @@ msgstr "%s akumuluje tyto hodnoty místo plochy.\n"
 msgid " Database connection not defined for layer <%s>"
 msgstr "Spojení s databází nebylo definováno pro vrstvu %d "
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Typ sloupce není podporován"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "Nelze seřadit hodnoty klíč/hodnota"
@@ -15320,16 +16340,18 @@ msgstr[0] "%d záznamů aktualizováno"
 msgstr[1] "%d záznamů aktualizováno"
 msgstr[2] ""
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr ""
 "Importuje vektorová data do vektorové vrstvy GRASSu za použití knihovny OGR."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "Název zdroje dat OGR"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Název rastrového souboru, který má být importován"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15339,13 +16361,13 @@ msgstr ""
 "\t\tESRI ShapeFile: adresář obsahující soubory ShapeFile\n"
 "\t\tSoubory MapInfo: adresář obsahující soubory MapInfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 "Jméno OGR vrstvy, pokud není zadán, jsou pouze vytištěny přítomné vrstvy"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15355,51 +16377,51 @@ msgstr ""
 "\t\tESRI ShapeFile: název souboru ShapeFile\n"
 "\t\tSoubor MapInfo: název souboru MapInfo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Minimální importovaná plocha (plošné jednotky)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr "Menší plochy a ostrovy budou ignorovány. Měla by být větší než snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "Volitelně změnit základní vstupní typ"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Žádné aktivní pseudo kontrolní body"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Čistím hranice v uzlech..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "VYtvořit lomené čáry z linií a hranic."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Zmazat duplicitní centroidy     "
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Práh navázaní pro hranice"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' pro žádný snap"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15407,183 +16429,185 @@ msgstr ""
 "Seznam názvů sloupců, které budou použity namísto originálních názvů, první "
 "je požit pro sloupce s kategoriemi"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Chyba při čtení ASCII souboru: '%s'"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr ""
 "Název sloupce atributu, který má být použit jaok štítky pro kategorie "
 "rastrové mapy"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Název sloupce se stupni centrality"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Jestli ne, bude použito zadané jméno vstupní mapy "
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 msgid "List supported OGR formats and exit"
 msgstr "Vypsat podporované formáty OGR a ukončit se"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 msgid "List available OGR layers in data source and exit"
 msgstr "Vypsat dostupné vrstvy OGR ze zdroje dat a ukončit se"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Nepročistit polygony (nedoporučuje se)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr "Vynutit 2D výstup, i když je vstup 3D"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Nelze získat jednotky kartografického zobrazení aktuální lokace"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Vypiš parametry současného připojení a ukonči se"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Změnit názvy sloupců na malá písmena"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Nelze otevřít zdroj dat <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Pozice kurzoru není podporována ovladačem MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "Zdroj dat obsahuje %d vrstev:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Vrstva <%s> není dostupná"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Nelze získat informace o vrstvě pro vektorovou mapu <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Sloupec <%s> nebyl nalezen v tabulce <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Vzdálenost bufferu v mapových jednotkách"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Nelze vytvořit vektorovou mapu <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Sloupec s klíčem '%s' nebyl nalezen"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Sloupec s klíčem není typu integer"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Sloupec <%s> nebyl nalezen v tabulce <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr "Zápis sloupce <%s> s pevnou délkou %d znaků (může být zkrácen)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr "Zápis sloupce <%s> s pevnou délkou %d znaků (může být zkrácen)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15592,57 +16616,57 @@ msgstr ""
 "Délka pro sloupec '%s' nastavena na 255 (nebyla specifikována OGR), některé "
 "řetězce mohou být zkráceny!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr "Zápis sloupce <%s> s pevnou délkou %d znaků (může být zkrácen)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Typ sloupce není podporován (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Importuji prvky mapy %d..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s bez geometrie"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Zlom polygonů"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "rozdělit hranice (mezní hodnota =%.3e)"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Lámu hranice ..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Měním hranice přívěsků  na linie:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Měním hranice mostů na linie:        "
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Výpočet polohy středu..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15654,116 +16678,116 @@ msgstr ""
 "atributové tabulce. Číslo prvků pro tyto plochy jsou uloženy jako kategorie "
 "ve vrstvě %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d vstupních polygonů"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d vstupních polygonů"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Celkem ploch: %e (%d ploch)"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Celkem ploch: %e (%d ploch)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Překrytí plochy: %e (%d ploch)"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Překrytí plochy: %e (%d ploch)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "PPlochy bez kategorie:%e (%d ploch)"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "PPlochy bez kategorie:%e (%d ploch)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Práh navázaní pro hranice"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Vstup selhal"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Nelze vyjmout tabulku: %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "Skupina musí existovat v současném mapsetu"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15985,6 +17009,11 @@ msgstr ""
 "Spojení s databází nebylo pro vrstvu <%d> definováno. Nejprve použijte v.db."
 "connect."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Barevná tabulka rastrové mapy <%s> nebyl nalezena"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16144,7 +17173,7 @@ msgstr "Volba 'sinuous' má smysl pouze pro linie"
 msgid "Querying database... "
 msgstr "Doztazuji se databáze ...."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
@@ -16153,14 +17182,14 @@ msgstr ""
 "Dotez pro kategorii '0' (žádná kategorie) nebyl vykonán díky mnoha (%d) "
 "dotazovaným kategoriím. Všechny další zprávy pro kategorii 0 nejsou platné."
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 "Mnohonásobné výsledky dotazu, výstupní hodnota nastavena na NULL (kategorie "
 "[%d])"
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "Nelze získat řádek"
 
@@ -16349,14 +17378,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Rastrová mapa <%s> již existuje a bude přepsána."
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Rastrová vrstva <%s> již existuje."
@@ -16495,7 +17524,12 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Přiřaď jedinečné kategorie novým bodům "
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Vytvořit rovnoběžky ke vstupním liniím."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
@@ -16503,7 +17537,7 @@ msgstr[0] "%d linií nebo hranic nalezeno ve vektorové mapě <%s@%s>"
 msgstr[1] "%d linií nebo hranic nalezeno ve vektorové mapě <%s@%s>"
 msgstr[2] ""
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -17014,19 +18048,24 @@ msgstr "Chybný časový otisk"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17040,6 +18079,7 @@ msgstr "Chybný časový otisk"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17052,7 +18092,7 @@ msgstr "Chybný časový otisk"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17214,6 +18254,7 @@ msgid "Unable to map image file"
 msgstr "Nelze otevřít soubor obrazové skupiny"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17231,14 +18272,14 @@ msgstr "Nelze otevřít soubor obrazové skupiny"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17276,6 +18317,55 @@ msgstr "Nelze získat vhodnou barevnou hodnotu."
 msgid "Using private colormap for DirectColor visual."
 msgstr "Používám soukromou mapu barev pro DirectColor visual."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Nahlaš informace o vstupním rastru a ukonči se"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Seznam vrstevnic (isolinií)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Vytvoří nový soubor, pokud neexistuje."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Smazání malých úhlů na uzlech"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Vypiš aktuální cestu k mapsetům"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Vypiš parametry současného připojení a ukonči se"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -17293,7 +18383,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17306,7 +18396,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17382,18 +18472,23 @@ msgstr ""
 "Uloží hodnoty rastru pod vektorovými body do jejich atributové tabulky."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17408,6 +18503,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17507,6 +18603,93 @@ msgstr ""
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Název vstupní 3D rastrové mapy"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Počet třid "
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Nelze zavřít vstupní mapu"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17645,7 +18828,7 @@ msgstr "Vytvořit prázdnou databázi."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17659,8 +18842,8 @@ msgid "rename"
 msgstr "Uživatel"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17670,9 +18853,9 @@ msgid "input"
 msgstr "Vstup"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17688,6 +18871,77 @@ msgstr "Požadováno"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Nelze editovat vektorovou vrstvu uloženou v jiném mapsetu."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "Vytvooří vektorovou mapu určených vrstevnic z rastrové mapy."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Kontrast"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Interval mezi íşrovněmi isoliniemi"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Seznam vrstevnic (isolinií)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Minimální íşroveň isolinie"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Maximální íşroveň isolinie"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Minimální počet bodů pro isolinii (0 -> žádný limit)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Nelze zavřít vstupní mapu"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Nevytvářet atributovou tabulku"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17696,7 +18950,7 @@ msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17752,8 +19006,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17866,74 +19121,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Název vstupní 3D rastrové mapy"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Název existující rastrové mapy obsahující výsledky klasifikace"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Název existující rastrové mapy obsahující výsledky klasifikace"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17968,47 +19192,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Název souboru s filtrem"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Název dvou nebo více vstupních rsatrových vrstev"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Počet třid "
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Nelze zavřít vstupní mapu"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18109,8 +19316,8 @@ msgstr "rastr, dpz, multispektrální"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Název výstupního souboru"
+msgid "Name for output image (or text file for -t)"
+msgstr "Jméno výstupního souboru s výsledky chybové matice a kappa index"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18127,6 +19334,54 @@ msgstr "Použít mapové souřadnice namísto souřadnic xyz"
 msgid "Use gnuplot for display"
 msgstr "Text k zobrazení"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Vytvoř TIFF world file (tfw)"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Seznam hodnot oddělených čárkou"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Název výstupního souboru, pro uložení zprávy"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Vytvořit prázdnou databázi."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Počet třid "
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Název výstupního ovladače"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18158,31 +19413,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Hranice lokace se zvětší podle nového datasetu"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr "Přepsat kartografické zobrazení (použít zobrazení lokace)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Nelze získat jednotky kartografického zobrazení aktuální lokace"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18374,6 +19608,20 @@ msgstr "Počet úrovní, které budou použity pro každou součást"
 msgid "Output field separator"
 msgstr "Výstupní oddělovač sloupců"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr ""
@@ -18476,8 +19724,15 @@ msgstr "Vytvořit prázdnou databázi."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Název souboru s filtrem"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "obecné, ovládání map"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Název existující rastrové mapy"
@@ -18490,7 +19745,7 @@ msgstr ""
 "mosaic"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18499,15 +19754,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Název souboru s filtrem"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18559,7 +19814,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr ""
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Název výstupního souboru"
 
@@ -18594,7 +19849,7 @@ msgstr "Převede rastrovou mapu na vektorovou."
 #: ../locale/scriptstrings/r.rgb_to_translate.c:4
 #, fuzzy
 msgid "separate"
-msgstr "Parametry"
+msgstr "Výstupní oddělovač sloupců"
 
 #: ../locale/scriptstrings/r.rgb_to_translate.c:5
 msgid "split"
@@ -18639,16 +19894,27 @@ msgstr "Jména vstupních souborů"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Jméno výstupní rastrové mapy (výchozí: jméno vstupní mapy)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18725,12 +19991,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18858,16 +20131,14 @@ msgstr ""
 "Nová hodnota, která bude přiřazena do sloupečku (textové řetězce misí být "
 "'uvozeny')"
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Seznam vrstevnic (isolinií)"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18878,12 +20149,12 @@ msgstr ""
 "statistiky"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "Projdi soubor, nalezni okrajové hodnoty a ukonči se"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "Ve scan módu tiskni ve stylu pro shell skript"
 
@@ -18898,7 +20169,7 @@ msgid "ASCII file containing input data"
 msgstr "ASCII soubor obsahující vstupní data (\"-\" pro standardní vstup)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Statistika použitá pro rastrové hodnoty"
 
@@ -18906,14 +20177,14 @@ msgstr "Statistika použitá pro rastrové hodnoty"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Statistika"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Typ uložení výsledné rastrové mapy"
 
@@ -18955,17 +20226,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Měřítkový faktor pro hodnoty atributů"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Část mapy v procentech, která má být uchována v paměti"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "pth percentil hodnot"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -19008,11 +20279,6 @@ msgid ""
 msgstr ""
 "Importuje vektorová data do vektorové vrstvy GRASSu za použití knihovny OGR."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Název rastrového souboru, který má být importován"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
@@ -19124,7 +20390,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19213,24 +20479,18 @@ msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Počet třid "
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Název základní rastrové mapy"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Nelze zavřít vstupní mapu"
@@ -19346,17 +20606,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Počet bodů pro interpolaci"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19364,10 +20628,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19485,78 +20745,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Název nové location, která má být vytvořena"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Vypiš dostupná pravidla barev a ukonči se"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Vypiš dostupná pravidla barev a ukonči se"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Vypiš dostupná pravidla barev a ukonči se"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "Alokace metriky"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "systémové tabulky místo uživatelských"
@@ -19674,10 +20950,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19735,6 +21007,58 @@ msgstr ""
 msgid "Test name"
 msgstr "Název písma"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Název sloupce atributu, který má být použit pro štítky"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Jemné rohy plošných prvků"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Posun hodnot souřadnice z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Zapíše rastrové hodnoty jako souřadnice z. Není vytvořena tabulka. V "
+"současné době jsou podporovány pouze body."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+msgid "Do not build vector topology"
+msgstr "Nevytvářet topologii vektoru"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Použij rastrové hodnoty jako kategorie místo jedinečné sekvence (pouze CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -19802,6 +21126,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Typ hrany grafu"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "přepínač -z není u bodů podporován"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19976,20 +21311,26 @@ msgid "Description of the space time dataset"
 msgstr "Název souboru s filtrem"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Název souboru s filtrem"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20033,13 +21374,13 @@ msgstr "vektor, transformace"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Číslo vrstvy"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20123,7 +21464,7 @@ msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 msgid "Neighborhood size"
 msgstr "Velikost okolí"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Počet bodů pro interpolaci"
@@ -20227,24 +21568,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Rozlišení výstupní mapy"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Titulek pro výslednou rastrovou mapu"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadata"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Používám rozlišení [%g]"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Neplatný název výstupního souboru <%s>"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Nepoužívej optimalizaci oříznutím regionu"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Počáteční mapové souřadnice"
@@ -20315,17 +21673,37 @@ msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 "Uloží hodnoty rastru pod vektorovými body do jejich atributové tabulky."
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "sloupec(ce)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Jméno vektorové mapy k editaci"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "sloupec(ce)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Název sloupce atributu, který má být použit pro štítky"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Vzdálenost bufferu v mapových jednotkách"
@@ -20419,6 +21797,7 @@ msgstr "Rastrová hodnota"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20434,10 +21813,15 @@ msgstr "Eigen hodnoty:"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "Rastrová hodnota"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20552,28 +21936,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "Spočítá univariantní statistiku z ne-nullových buněk rastrové mapy."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "body"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Vytvořit prázdnou databázi."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Vytvářej hodnoty NULL"
 
@@ -20611,7 +21990,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "Vytvoří rastrovou spojitých oblastí zvětšených o jednu buňku."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20625,7 +22004,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Poloměr obalové zóny (bufferu) v počtu buněk"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metrický"
 
@@ -20645,12 +22024,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Počet bodů pro interpolaci"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20676,7 +22055,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "Převzorkovat rastrovou vrstvuna jemnější  s využitím interpolace."
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20706,6 +22085,16 @@ msgstr "Parametr vyhlazení (smoothing)"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "Čas použitý pro opakování [minuty]"
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Bikubická nebo bilineární interpolace s Tykhonovou regularizací"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Location: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20716,20 +22105,11 @@ msgstr "Nelze kopírovat atributovou tabulku do vektorové mapy <%s>"
 msgid "Vector map to which to join other table"
 msgstr "Název rastrové mapy, ze které se má kopírovat tabulka kategorií"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Číslo vrstvy (to)"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "sloupec(ce)"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20758,17 +22138,17 @@ msgstr "Počet iterací"
 msgid "Imports space time raster dataset."
 msgstr "Aktualizuj statistiku rastru"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Zarovnat současný region podle vstupní mapy"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Rastrová mapa <%s> byla vytvořena."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20848,14 +22228,17 @@ msgstr "3D rastrová mapa <%s> nebyla nalezena"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20886,11 +22269,11 @@ msgstr "Nelze alokovat pro řetězec paměť"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Nelze načíst rozsah hodnot rastrové mapy <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Chyba při čtení souboru s historií"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20898,8 +22281,8 @@ msgstr "Nelze uzavřít rastrovou mapu <%s@%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Chuba při zápisu dat"
 
@@ -20952,6 +22335,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Nelze vytvořit soubor <%s>"
@@ -21115,9 +22499,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Typ podporchového toku"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21145,7 +22530,10 @@ msgstr "Přímá choleskyho analýza nepracuje s řídkou maticí"
 msgid "Unable to create and solve the linear equation system"
 msgstr "Nelze vytvořit a vyřešit soustavu lineárních rovnic"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Nejsem schopen vytvořit rastrovou mapu <%s>"
@@ -21215,6 +22603,142 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Rastrová mapa %d Jméno souboru: %s již existuje. Mapa bude přepsána!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Hodnota izolinií"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Prosím zadejte tři g3d RGB mapy"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Vektorová mapa <%s> nebyla nalezena"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Počítám směry odtoku...."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Jméno vstupní vektorové bodové mapy"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Jméno vektorové mapy k editaci"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Název výstupní rastrové mapy orientace"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Jméno rastrové mapy, obsahující výsledky"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "délka %f\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Počet opakování"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Šířka bystřiny (v metrech). Výchozí je šířka rastrové buňky"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "rastr, interpolace"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Není specifikována rastrová mapa"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Název vstupní databáze není nastaven"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Maximální počet iterací"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Maximální počet iterací"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Počet buněk mezi drahami odtoku"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Nelze popsat tabulku <%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Chyba při čtení mapy odstínu (hue)"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21353,11 +22877,11 @@ msgstr "Nelze otevřít vstupní soubor ASCII <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "mapa 3dcell pro modifikaci hodnot NULL"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Seznam hodnot buněk pro nastavení NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Hodnota pro nahrazení hodnoty NULL"
 
@@ -21382,7 +22906,7 @@ msgstr "modifyNull: chyba při zarovnání všech dlaždic"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: chyba při zavírání souboru tmp"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "rastr, noullvé data"
@@ -21391,6 +22915,84 @@ msgstr "rastr, noullvé data"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Vytvořit výlučně soubor s bitmapou 3D NULL-hodnota"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "rastr"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Vytvoří rastrovou mapu smontováním více souřadnic za pomoci univariantní "
+"statistiky"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Neindexovat body podle rastrových buněk "
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Počet opakování \t= %d buňek\n"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "3D rastrová mapa <%s> nebyla nalezena"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Zapisuji výstupní mapu..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "mapa 3dcell pro modifikaci hodnot NULL"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Posun hodnot souřadnice z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "vektor, transformace"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Nelze číst dočasný soubor"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21444,13 +23046,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Rozsah výstupních dat"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Nelze číst soubor s kategoriemi rastrové mapy <%s@%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Tabulka kategorií pro <%s> nastavena na %s"
@@ -21508,7 +23110,7 @@ msgstr "Chyba při čtení mapy odstínu (hue)"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Načítám data ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Chyba při zavírání souboru g3d"
@@ -21907,7 +23509,7 @@ msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 "Chybné hodnoty 3d raster mapy! Hodnoty by měly být v rozmezí 0 a 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21917,7 +23519,7 @@ msgstr "Neznámá metoda <%s>."
 msgid "Aggregate operation"
 msgstr "Agregace"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21953,6 +23555,39 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Nelze alokovat cell buffery."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Variance"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+"Kombinuje červenou, zelenou a modrou mapovou vrstvu do jedné rastrové mapy."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Název výstupní rastrové mapy"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Velikost bodové vyrovnávací paměti"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Nelze alokovat paměť."
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Zapisuji novou rastrovou mapu..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22296,38 +23931,38 @@ msgstr "Vypiš výsledek ve stylu pro shell skript"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22624,13 +24259,13 @@ msgid "Unknown operation '%s'"
 msgstr "Neznámá operace"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr "ignorováno\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Location <%s> vytvořena"
@@ -22702,8 +24337,9 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "Rastrová vrstva <%s> již existuje."
+msgid "<%s> already exists. File not copied."
+msgstr ""
+"Rastrová mapa <%s> již existuje v mapsetu <%s>, zkuste prosím jiné jméno."
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22825,8 +24461,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -23091,9 +24727,9 @@ msgstr "Názvy ignorovaných souborů (výchozí: žádné)"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "rastr"
@@ -23106,15 +24742,15 @@ msgstr "Parametry vyhledávání pro názvy souborů"
 msgid "File name exclusion pattern (default: none)"
 msgstr "Parametry vyhledávání pro názvy vynechaných souborů (výchozí: žádné)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr "Ignorovat velikost písmen"
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "Použít základní regulární výrazy místo zástupných znaků"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "Použít rozšířené regulární výrazy místo zástupných znaků"
 
@@ -23124,7 +24760,7 @@ msgid "Remove base raster maps"
 msgstr "Mazání přívěsků"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Nelze otevřít soubor <%s>"
@@ -23171,82 +24807,72 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr "Kanál, který má být vybrán (výchozí: všechny kanály)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 "Naimportuj jako hodnoty s plovoucí desetinnou čárkou (double) (výchozí: "
 "celočíselné)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "mapset, ze kterého má být seznam udělán (výchozí: aktuální)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Jméno výstupní rastrové mapy (výchozí: jméno vstupní mapy)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Nastaví aktuální region z pojmenovaného regionu"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "Vytiskni pouze typ rastrové mapy"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "Potlač výpis informací z hlavičky"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "-s a -n se navzájem vylučují"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "-s a -n se navzájem vylučují"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Skupina <%s> neexistuje"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Nelze číst hlavičku rastrové mapy <%s@%s> "
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Vektorová mapa <%s> nemohla být otevřena na úrovní topologie %d"
@@ -23463,59 +25089,59 @@ msgstr "Nelze získat aktuální region"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Neplatná mapa <%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 #, fuzzy
 msgid "Can't get projection info of current location"
 msgstr "Nelze získat jednotky mapové projekce aktuální location"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Nelze získat jednotky kartografického zobrazení aktuální lokace"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "Nelze nastavit parametry mapové projekce lat/long"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 #, fuzzy
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Chyba v pj_do_proj (nelze reprojekovat GCP %i)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23737,38 +25363,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "Rastrový (cell) soubor nebyl nalezen"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Název rastrového souboru, který má být importován"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -24086,10 +25733,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Můj první modul pro zpracování vektorových dat"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "Nelze nastavit předvybranou vektorovou mapu na úrovni otevření"
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24263,7 +25906,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Hotových procent..."
 
@@ -24686,7 +26329,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Nelze získat klíčové hodnoty mapové projekce aktuální location"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24879,151 +26522,151 @@ msgstr "ewres=%f"
 msgid "Writing new raster map..."
 msgstr "Zapisuji novou rastrovou mapu..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Změna projekce rastrové mapy ze zvolené location do aktuální location."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Lokace obsahující vstupní vektorovou vrstvu"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Mapset obsahující vstupní vektorovou vrstvu"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Jméno výstupní rastrové mapy (výchozí: jméno vstupní mapy)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Rozlišení výstupní mapy"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Vypiš rastrové soubory vstupní location a ukonči se"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Vypiš parametry současného připojení ve stylu shellu a ukonči se."
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr "Vstupní a výstupní lokace jsou stejné."
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 "Nelze získat informace o kartografickém zobrazení výstupní rastrové vrstvy"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr ""
 "Nelze získat jednotky kartografického zobrazení výstupní rastrové vrstvy"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 "Nelze získat klíčové hodnoty kartografického zobrazení výstupní rastrové "
 "vrstvy"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Mapset <%s> ve vstupní lokaci <%s> - <%s>"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Rastrová mapa <%s> v lokaci <%s>, mapsetu <%s> není dostupná"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "Nelze získat informace o projekci vstupní mapy"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "Nelze získat jednotky mapové projekce vstupní mapy"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "Nelze získat klíčové hodnoty mapové projekce vstupní mapy"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Nelze pracovat s nepřipojenými daty (xy location)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "do <%s@%s> (location <%s> ... %s"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Vstup:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Sloupce: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Řádky: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Sever: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Jih: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Západ: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Východ: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "rozlišení vz: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "rozlišení sj: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Výstup:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Převádím..."
 
@@ -25076,12 +26719,6 @@ msgstr "Chyba při zápisu souboru se segmenty"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr "Umožňuje vytvořit a/nebo modifikovat podpůrné soubory rastrové mapy."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Titulek pro výslednou rastrovou mapu"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Text pro jednotky nové mapy"
@@ -25109,22 +26746,22 @@ msgstr "Nelze otevřít soubor se signaturami"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Rastrová mapa <%s> nebyla v aktuálním mapsetu nalezena"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] je reklasifikací jiné mapy. Ukončuji se."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Zapisuji nový soubor \"null\" pro [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Odstraňuji soubor \"null\" pro [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Dokonáno jest."
 
@@ -25929,7 +27566,7 @@ msgstr "%s = %s -- musí být větší než nula"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s Nelze otevřít %s"
@@ -26138,8 +27775,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "Dva páry násobitele a ofsetu kategorie, pro $1 a $2"
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Nelze číst soubor s kategoriemi rastrové mapy <%s@%s>"
@@ -26224,12 +27861,12 @@ msgstr "Nelze číst řádek vstupu z <%s>"
 msgid "Can't get cell header"
 msgstr "Nelze dostat hlavičku rastrového souboru"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "JÉMINÁNKU: řádky se změnily z %d na %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "JÉMINÁNKU: sloupce se změnily z %d na %d"
@@ -26423,10 +28060,6 @@ msgid "Number of header lines to skip at top of input file"
 msgstr ""
 "Počet řádků hlavičky vstupního souboru, které budou přeskočeny (bodový režim)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Rozsah filtru pro z data: (min,max)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -26434,7 +28067,7 @@ msgstr "Rozsah filtru pro z data: (min,max)"
 msgid "Advanced Input"
 msgstr "Pokročilé"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Nastavit na z data"
 
@@ -26462,7 +28095,7 @@ msgstr "Nastavit na z data"
 msgid "Please specify a reasonable column number."
 msgstr "Prosím, zadejte přijatelné číslo sloupce."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "Neplatné zrange"
 
@@ -26471,15 +28104,15 @@ msgstr "Neplatné zrange"
 msgid "Invalid vrange"
 msgstr "Neplatné zrange"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "Nelze vypočítat percentil bez určené volby pth!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "Nelze spočítat trim průměr bez zadané volby trim!"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26502,7 +28135,7 @@ msgid "Reading input data..."
 msgstr "Načítám vstupy..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Průchod #%d (z %d) ..."
@@ -26548,16 +28181,16 @@ msgstr "Špatná souřadnice y linie %lu sloupec %d <%s>"
 msgid "Writing to output raster map..."
 msgstr "Zapisuji výslednou rastrovou mapu %s... "
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "%lu bodů nalezeno v regionu."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Prohledávání dat ..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Rozsah:     min         max\n"
@@ -26718,11 +28351,6 @@ msgstr "Název výstupní rastrové mapy"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "Formát souboru (na velikosti písmen záleží, viz také přepínač -l)"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Typ hrany grafu"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "Vytvoření možností pro uspěšné projítí ovladačem formátu výstupu"
@@ -27272,41 +28900,46 @@ msgstr "Neplatná souřadnice y <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Varování, ignoruji bod mimo okno: %.4f, %.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Spravuje NULLové hodnoty zadané rastrové mapy."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "mapa 3dcell pro modifikaci hodnot NULL"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Pracuj pouze pokud je mapa s plovoucí desetinnou čárkou"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Pracuj pouze pokud je mapa celočíselná"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Udělej svou práci pouze pokud mapa nemá soubor NULL"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "Vytvoř soubor s hodnotami NULL při validaci všech buněk"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "Smazat soubor NULL"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "Vytvoř soubor s hodnotami NULL při validaci všech buněk"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
@@ -27315,62 +28948,63 @@ msgstr ""
 "Rastrové mapa <%s> vznikla překlasifikováním mapy <%s@%s>. Zvažte vytvoření "
 "kopie pomocí r.mapcalc. Ukončuji."
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Rastrová mapa <%s> nebyla nalezena v mapsetu <%s>"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "%s je neplatná hodnota pro null"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Rastrová mapa <%s> již má vytvořen soubor null"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> je celočíselná rastrová mapa (CELL)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> je čeločíselná rastrová mapa (CELL) použiji null=%d."
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> je rastrová mapa s desetinnou čásrkou"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Zapisuji nový soubor null pro rastrovou mapu <%s>..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Rastrová mapa <%s> byla pozměněna."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Odstraňuji soubor null pro rastrovou mpau <%s>..."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: neplatná hodnota pro spec"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: neplatná hodnota pro spec"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Zapisuji nová data pro rastrovou mapu <%s>... "
@@ -27781,88 +29415,180 @@ msgstr "Převádím..."
 msgid "File <%s> created"
 msgstr "Soubor <%s> vytvořen"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Vytvoří rastrovou mapu smontováním více souřadnic za pomoci univariantní "
 "statistiky"
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Soubor obsahující pravidla překódování."
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Rozsah filtru pro z data: (min,max)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Nastavit na z data"
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+"Vyřadit <trim> procent nejmenších a <trim> procent nejvetších hodnot "
+"pozorování"
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Titulek výstupního rastru"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Nastav region tak, aby odpovídal této rastrové mapě"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Skupina <%s> neexistuje"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "na rozsah z nebude během hledání brán zřetel"
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Neznámá volba  pravidla: '%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Neplatná mapa <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Location <%s> vytvořena"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "Čtu data... "
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Nelze otevřít výstupní soubor <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Zapisuji do vrstvy ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu bodů nalezeno v regionu."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Nelze otevřít soubor <%s> pro psaní"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Vytvoří rastrovou mapu se vzdáleností k prvkům ve vstupní vrstvě."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Jméno výstupní vrstvy se vzdáleností"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Název výstupní rastrové mapy"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Maximální vzdálenost mezi body v jednotkách mapy."
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Maximální vzdálenost k nejbližšímu prvku"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "Nejméně jedna z voleb distance= a hodnota= musí být zadána"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Neznámá metrika: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Maximální vzdálenost mezi body v jednotkách mapy."
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Nelze zapisovat do dočasného souboru <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -28002,7 +29728,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr "Převádím %s..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "V rastrové mapě <%s> jsou obsaženy různé typy hodnot."
@@ -28109,7 +29835,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Neexistuje žádné správné umístění v současném regioinu"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28700,7 +30426,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29150,7 +30876,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Vypiš statistiku ve stylu pro shell skript"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29173,11 +30899,6 @@ msgstr "Průchod %d..."
 msgid "Unable to write to temp file"
 msgstr "Nelze číst dočasný soubor"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Vytvářím body..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29296,7 +31017,7 @@ msgid "Writing output raster map..."
 msgstr "Zapisuji výslednou rastrovou mapu %s... "
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -29307,43 +31028,43 @@ msgstr "Zapisuji rastrovou mapu <%s>..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Vytvoří statistiku ploch pro rastrové mapy."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "průchod povodí %d"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Název výstupní rastrové mapy"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Mapa souřadnic počátečních bodů (V,S)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Neplatná východní souřadnice <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Neplatná severní souřadnice <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Varování, ignoruji bod mimo okno: %.4f, %.4f"
@@ -29444,22 +31165,22 @@ msgid "Invalid map type"
 msgstr "Neplatná mapa <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "ČÁST %d: Zavírám mapy"
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "ČÁST %d: Určování rozvodí."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "ČÁST 1a (z %d1d): inicializace paměti."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "ČÁST 1b (z %1d): Určuji odtok mimo mapu."
@@ -29589,25 +31310,25 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 #, fuzzy
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "ČÁST 3: Akumulace povrchového odtoku."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "ČÁST 3: Akumulace povrchového odtoku."
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29616,8 +31337,8 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -30185,183 +31906,188 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "Stiskněte <return> pokud žádnou takovou mapu překážek nemáte."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Vstup"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Název vstupní rastrové mapy"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Vstupní mapa: množství povrchového odtoku na buňku"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Název vstupní rastrové mapy(saturation - sytost)"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Vstupní mapa: povrchu bránícího povrchovému odtoku, pro USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Vstupní hodnota: minimální velikost vnějšího povodí"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Vstupní hodnota: maximální délka povrchového odtoku, pro USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Výstupní mapa: počet buněk, které tečou skrz každou buňku"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Výstupní mapa topografického indexu:"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Název výstupní rastrové mapy orientace"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Výstupní mapa: každému sub-povodí je dána jednoznačná hodnota"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Název výstupní rastrové mapy sklonu"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "Výstupní mapa: délka svahu a sklon, faktor (LS) pro USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Název výstupní rastrové mapy sklonu"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Výstupní mapa: faktor sklonu svahu (S) pro USLE"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Převodní koeficient pro hodnoty z"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "Maximální velikost použité paměti bude použité s volbou -m (v MB)"
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Povolit pouze horizontální a vertikální tok vody"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Umožněno rozšířené využití paměti: Operace je pomalá"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Promiňte, musíte zadat nějakou výstupní mapu."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s=%s - musí být větší než nula"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30372,17 +32098,17 @@ msgstr ""
 "    basin, stream, half.basin, slope nebo LS\n"
 "    MUSÍTE zadat prahovou hodnotu povodí (basin threshold)."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Location lat/long není podporována"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Podproces selhal s návratovým kódem %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -30390,26 +32116,26 @@ msgstr[0] "ČÁST 1 začínám: Nastavuji proměnné. Celkem proběhne %d část
 msgstr[1] "ČÁST 1 začínám: Nastavuji proměnné. Celkem proběhne %d částí."
 msgstr[2] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 #, fuzzy
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 "Maximální velikost použité paměti byla menší než 3 MB, nastavuji výchozí "
 "hodnotu = 300 MB."
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "ČÁST 1b (z %1d): Určuji odtok mimo mapu."
@@ -30419,21 +32145,31 @@ msgstr "ČÁST 1b (z %1d): Určuji odtok mimo mapu."
 msgid "Closing accumulation map"
 msgstr "nemohu otevřít novou mapu akumulace "
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Výpočet sekcí"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Výpočet sekcí"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Výpočet sekcí"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Počítám směry odtoku...."
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -30464,31 +32200,31 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "rastr, převzorkování"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Převzorkovat rastrovou vrstvu s využitím agregace."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Agregační metoda"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Váha podle plochy (pomalejší)"
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Nelze číst barevnou tabulku pro %s"
@@ -30898,7 +32634,7 @@ msgstr ""
 "Barevná tabulka 'grey.log' není podporována pro rastrové mapy s desetinnou "
 "čárkou"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "Neznámý barevný požadavek '%s'"
@@ -31288,7 +33024,7 @@ msgid ""
 msgstr "Spočítá univariantní statistiku z ne-nullových buněk rastrové mapy."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31303,11 +33039,25 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Použij stejné rozlišení jako je vstupní RASTER3D mapa pro 2d výstupní mapu, "
+"nezávisle na aktuálním rozlišení"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "Spočítá univariantní statistiku z ne-nullových buněk rastrové mapy."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "input= a source= se vzájemně vylučují"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31604,22 +33354,22 @@ msgstr "Otevřít rastrovou mapu %s - jednou pro každou hloubku (%d/%d)"
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "Vstupní mapy musí být stejného typu. CELL, FCELL nebo DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: Nelze nalézt bounding box pro linie"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "Průchod číslo %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
@@ -31627,11 +33377,11 @@ msgstr[0] "%d pixelů smazáno "
 msgstr[1] "%d pixelů smazáno "
 msgstr[2] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Ztenčování bylo íşspěšně dokončeno."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr "Ztenčení nedokončeno, zkuste zvýšit parametr 'iterations'."
 
@@ -31936,32 +33686,12 @@ msgstr "Kontrast"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "Vytvooří vektorovou mapu určených vrstevnic z rastrové mapy."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Interval mezi íşrovněmi isoliniemi"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Seznam vrstevnic (isolinií)"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Seznam vrstevnic (isolinií)"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Minimální íşroveň isolinie"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Maximální íşroveň isolinie"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Minimální počet bodů pro isolinii (0 -> žádný limit)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32574,55 +34304,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Nelze vytvořit a vyřešit soustavu lineárních rovnic"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Rastrová mapa, podle které se má zarovnat"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Eigen hodnoty:"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Eigen hodnoty:"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Soubor obsahující pravidla reklasifikace"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Počátek pro generování náhodného čísla"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Zapisuji výstupní mapu..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "-s a -n se navzájem vylučují"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "Chyba prametru"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "Chyba ve výpočtu čísel s plovoucí desetinnou čárkou"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "Přetečení je započítáno ve výpočtu"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Neznámý typ: %d"
@@ -32672,80 +34403,80 @@ msgstr "Neplatná chyba pro funkci '%s'"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Nelze číst tabulku barev rastrové mapy <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Nelze vytvořit btree pro rastrovou mapu <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Chybný mapový modifikátor: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Nedefinována proměnná '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Neplatná mapa <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Funkce '%s' není definovaná"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "Příliš málo argumentů (%d) funkce %s()"
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "Příliš mnoho argumentů (%d) funkce %s()"
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Neplatné typy argumentů funkce %s()"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "Interní chba funkce %s()"
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "Špatný počet argumentů (%d) operátoru '%s'"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "FOrmat_expression_prec: neznámý typ: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Nelze uzavřít rastrovou mapu <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Nelze uzavřít výstupní rastrovou mapu"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Známé funkce:"
@@ -32932,7 +34663,7 @@ msgstr "Úklid vpřed dokončen"
 msgid "Reverse sweep complete"
 msgstr "Úklid vzad dokončen"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
@@ -32940,15 +34671,15 @@ msgstr ""
 "Nelze převést informace o vstupní mapové projekci do formátu GRASSu (pro "
 "kontrolu)"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "PROJ_INFO lokace je:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "PROJ_INFO datasetu je:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32992,14 +34723,6 @@ msgstr "Jméno datového zdroje GDAL, který není soubor"
 msgid "Band to select (default is all bands)"
 msgstr "Kanál, který má být vybrán (výchozí: všechny kanály)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadata"
-
 #: ../raster/r.external/main.c:113
 #, fuzzy
 msgid "Flip horizontally"
@@ -33024,7 +34747,7 @@ msgstr "Formát: vrstva typ počet min max"
 msgid "%s= or %s= must be given"
 msgstr "Měl by být zadán \"value=\" nebo \"-i\""
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Nelze získat aktuální region"
@@ -33043,7 +34766,7 @@ msgstr "Rastrová mapa <%s> již existuje a bude přepsána."
 msgid "Reading band %d of %d..."
 msgstr "Načítám mapu %s ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Vybraný kanál (%d) neexistuje"
@@ -33112,101 +34835,116 @@ msgstr "Vytvářím podpůrné soubory pro %s"
 msgid "Link to raster map <%s> created."
 msgstr "Rastrová mapa <%s> byla vytvořena."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importuje binární rastrový soubor jako GRASS rastrovou mapu."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Název rastrového souboru, který má být importován"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Kanál, který má být vybrán (výchozí: všechny kanály)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Název cílové location"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 "Název location, ze které bude načtena mapová projekce pro GCP transformaci"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Nelze dostat jedno z rastrových pásem"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Název vstupního souboru s digitálním modelem terénu"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Nevytvářet atributové tabulky"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Přepsat kartografické zobrazení (použít zobrazení lokace)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Ponechej čísla kanálů místo použití jmen jejich barev"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "vypiš tabulky a ukonči se."
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "Musíte zadat cílovou location různou od současné"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "Musíte zadat spodní a svrchní mapu"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Počet subrozmezí musí být >= 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Nelze otevřít zdroj dat <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 #, fuzzy
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
@@ -33215,95 +34953,100 @@ msgstr ""
 "Vstupní mapa je pootočená - nelze ji naimportovat. Použijte 'gdalwarp' pro "
 "její transformaci severem-nahoru."
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Pokračuje importování..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Nelze otevřít soubor se signaturami"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Nelze dostat jedno z rastrových pásem"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Kopíruji %d GCPS v souboru bodů pro <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "GCPs mají následující OpenGIS WTK souřadnicový systém:"
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Změna projekce GCPs tabulky:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Vstupní projekce pro GCP tabulku: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "á Výstupní projekce pro GCP tabulk: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Chyba v pj_do_proj (nelze reprojekovat GCP %i)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "Nelze získat klíčové hodnoty mapové projekce vstupní GCPs"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "Nelze získat informace o kartografickém zobrazení cílové lokace"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Nelze získat jednotky kartografického zobrazení cílové lokace"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "Nelze získat klíčové hodnoty kartografického zobrazení cílové lokace"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Zapisuji rastrovou mapu <%s>..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Nastavuji barevnou tabulku barev  na šedou pro <%s> (8bit plný rozsah)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 "Nastavuji barevnou tabulku barev  na šedou pro <%s> (16bit, rozsah obrazu)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Nelze otevřít soubor <%s>"
@@ -33429,7 +35172,7 @@ msgstr "Načítám mapu elevace:"
 msgid "Writing topographic index map..."
 msgstr "Zapisuji mapu topografického indexu..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Počet sekcí, které mají být vytvořeny"
@@ -33530,12 +35273,12 @@ msgstr "Objem jezera %f metrů krychlových"
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr "Objem je správný pouze pokud je jeho hloubka (rastr terénu) v metrech"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Zobrazit obsah"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33544,23 +35287,23 @@ msgstr ""
 "jedné nebo několika map tak, že vyplní oblasti \"bez žádných dat\" v "
 "jinémapové vrstvě."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Názvy rastrových map, které mají být spojeny"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Titulek pro výslednou rastrovou mapu"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Použij nulu (0) jako transparentní hodnotu, namísto NULLy"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Minimální počet vstupních rastrových map jsou dvě"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Vytvářím podpůrné soubory pro rastrovou vrstvu <%s>"
@@ -33637,40 +35380,6 @@ msgstr "vektor, interpolace"
 msgid "Converts a raster map into a vector map."
 msgstr "Převede rastrovou mapu na vektorovou."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Název sloupce atributu, který má být použit pro štítky"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Jemné rohy plošných prvků"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Použij rastrové hodnoty jako kategorie místo jedinečné sekvence (pouze CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Posun hodnot souřadnice z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Zapíše rastrové hodnoty jako souřadnice z. Není vytvořena tabulka. V "
-"současné době jsou podporovány pouze body."
-
-#: ../raster/r.to.vect/main.c:111
-msgid "Do not build vector topology"
-msgstr "Nevytvářet topologii vektoru"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr "Doporučeno pro rozsáhlé převody bodů"
@@ -34204,11 +35913,6 @@ msgstr "Velikost bodové vyrovnávací paměti"
 msgid "Advanced"
 msgstr "Pokročilé"
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Název výstupního ovladače"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34510,7 +36214,7 @@ msgstr "Vytvoří prostorově závislé povrchy náhodných hodnot."
 msgid "Name for output raster map(s)"
 msgstr "Název výstupní rastrové mapy"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "maximální vzdálenost od bodu k síti"
@@ -34536,7 +36240,7 @@ msgstr "Maximální počet iterací"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Zapisuji rastrovou mapu <%s>..."
@@ -34884,7 +36588,7 @@ msgstr "Počítám index diversity dominance rastrové mapy"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34910,7 +36614,7 @@ msgstr "Zobrazit obsah"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Neplatný konfigurační soubor"
@@ -34929,7 +36633,7 @@ msgstr "Počítá standardní odchylku plošek rastrové mapy"
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Zobrazit obsah"
@@ -35083,7 +36787,7 @@ msgstr "Nelze provést lseek"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Počítám Shannonův index diversity rastrové mapy"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "Počítám index střední hodnoty atributu pixelu rastrové mapy"
 
@@ -35274,11 +36978,11 @@ msgstr "sever=%f"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Nelze načíst maximální vzdálenost. Přerušuji"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Výpočet mapy %01d z %01d (úhel %lf, rastrová mapa <%s>)"
@@ -35509,13 +37213,53 @@ msgstr "incidout požaduje nastavený parametr času"
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Mode 2: denní ozářenost pro zadaný den roku."
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Konstanta zvětšení prostupnosti"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Zapisuji rastrovou mapu <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Neplatná mapa <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Špatná cena izolinie: %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Zapisuji rastrovou mapu <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Používám souřadnice středu mapy: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Zapisuji rastrovou mapu <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 "POkud použijete volbu -s a žádnou rastrovou mapu s horizontem, numpartitions "
 "musí být =1"
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -35523,11 +37267,11 @@ msgstr ""
 "Pokud chcete ušetřit zabrání množství paměti a zároveň použít stíny, je "
 "třeba použít před-vypočítané horizonty."
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35553,78 +37297,89 @@ msgstr "Dekomprimuj mapu"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Vypiš výsledek ve stylu pro shell skript"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "Vektorová mapa <%s> nebyla nalezena v současném mapsetu"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "[%s] je reklasifikací mapy <%s> v mapsetu <%s> - nelze rozbalit"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "[%s] je reklasifikací mapy <%s> v mapsetu <%s> - nelze komprimovat"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] je reklasifikací mapy <%s> v mapsetu <%s> - nelze rozbalit"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "HOTOVO: komprimovaný soubor je %lu bytů menší"
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "HOTOVO: komprimovaný soubor je %lu bytů menší"
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "HOTOVO: rozbalený soubor je %lu bytů větší"
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "HOTOVO: komprimovaný soubor je %lu bytů větší"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Plocha"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] je již rozbalena"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] je již komprimována"
+msgid "Uncompressing <%s>"
+msgstr "Eigen hodnoty:"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%sKOMPRIMUJI [%s]"
+msgid "Re-compressing <%s>"
+msgstr "Eigen hodnoty:"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Odstranění <%s>"
+
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] je reklasifikací mapy <%s> v mapsetu <%s> - nelze rozbalit"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "[%s] je reklasifikací mapy <%s> v mapsetu <%s> - nelze komprimovat"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35656,53 +37411,53 @@ msgstr "o_adev: V množině žádná data"
 msgid "Filter <%s> not found"
 msgstr "Soubor <%s> nebyl nalezen"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "vektor, jádrová hustota"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Převzorkovat rastrovou vrstvu s využitím agregace."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 #, fuzzy
 msgid "Filter radius (horizontal)"
 msgstr "Rozděleno horizontálně, ne vertikálně."
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Měl by být zadán \"value=\" nebo \"-i\""
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Location <%s> vytvořena"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "<%s> obsahuje příliš mnoho příznaků (limit je 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Musí být zadána alespoň jedna volba z %s"
@@ -36130,21 +37885,26 @@ msgstr[2] ""
 msgid "Calculating %s"
 msgstr "Počítám mapy ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' musí být . 0 pro 'where'"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Korelace"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Vytvoří prostorově závislé pole náhodných hodnot."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Minimální počet sloupců: %d"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -36288,7 +38048,7 @@ msgstr "Vzdálenost"
 msgid "Grid line width"
 msgstr "Šířka hranice"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr "Barva rámečku"
@@ -36419,16 +38179,11 @@ msgid "Starting and ending coordinates"
 msgstr "Počáteční pár souřadnic"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 #, fuzzy
 msgid "Line color"
 msgstr " nv barva\n"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "Barva textu"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -36458,8 +38213,8 @@ msgid "Name of monitor to start"
 msgstr "Jméno rastrové mapy, obsahující výsledky"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36521,48 +38276,66 @@ msgstr "Vypiš parametry současného připojení a ukonči se"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Vypiš parametry současného připojení a ukonči se"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Vypiš vektorové soubory vstupní location a ukonči se"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Nelze číst barvy."
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "Location <%s> vytvořena"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 #, fuzzy
 msgid "No monitor selected"
 msgstr "Nebyl vybán žádný záznam"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Měl by být zadán \"value=\" nebo \"-i\""
@@ -36572,64 +38345,74 @@ msgstr "Měl by být zadán \"value=\" nebo \"-i\""
 msgid "Monitor <%s> is not running"
 msgstr "Soubor <%s> nebyl nalezen"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "Rastrový (cell) soubor nebyl nalezen"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Nelze vytvořit soubor <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Rastrový (cell) soubor nebyl nalezen"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Nelze otevřít OGR zdroj dat '%s'"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "Nelze vytvořit soubor <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Soubor '%s' již existuje a bude přepsán."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Nelze vytvořit tabulku : '%s'"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Typ výstupní mapy"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Location <%s> vytvořena"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Nelze vytvořit soubor <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Zapisuji do vektorové mapy <%s> ..."
 
-#: ../display/d.mon/start.c:163
-#, fuzzy, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "Natavuji jméno mapy na <%s>, které přepíše <%s>"
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Nelze číst barvy."
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Location <%s> vytvořena"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Seznam vrstevnic (isolinií)"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Rastrový (cell) soubor nebyl nalezen"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Nelze otevřít soubor <%s>"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Nelze číst barvy."
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "%d linií nebo hranic nalezeno ve vektorové mapě <%s@%s>"
 
 #: ../display/d.erase/main.c:33
 msgid ""
@@ -36739,27 +38522,46 @@ msgstr "%s: neplatná hodnota pro spec"
 msgid "[%s]: illegal value specified"
 msgstr "%s: neplatná hodnota pro spec"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Provádím logaritmickou transforamci"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Neindexovat body podle rastrových buněk "
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Nastavení"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "Cesta k výslednému souboru VTK"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36768,7 +38570,7 @@ msgstr[1] "Barva rámečku"
 msgstr[2] ""
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36776,7 +38578,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36849,10 +38651,6 @@ msgstr "Barva výplně plochy"
 msgid "Colorize features according color definition column"
 msgstr "Vybarvit prvky podle sloupce s definicí barvy"
 
-#: ../display/d.vect/main.c:129
-msgid "Color definition in R:G:B form"
-msgstr "Definice barvy ve tvaru R:G:B"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr "Vybarvit bodové nebo plošné prvky podle souřadnice z"
@@ -36862,7 +38660,7 @@ msgstr "Vybarvit bodové nebo plošné prvky podle souřadnice z"
 msgid "Lines"
 msgstr "Linie"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Šířka linie"
 
@@ -37423,37 +39221,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Neplatné souřadnice %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Nahlaš informace o vstupním rastru a ukonči se"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "Použij aktuální region"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37716,15 +39514,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "Cesta k výslednému souboru VTK"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 #, fuzzy
 msgid "Input file"
@@ -37791,7 +39580,7 @@ msgstr "Typ hrany grafu"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr ""
 
@@ -37829,12 +39618,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Vytvořit 3D výstup"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37877,14 +39676,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Nastavení"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37969,11 +39761,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -37987,34 +39780,90 @@ msgstr "Nahlaš informace o vstupním rastru a ukonči se"
 msgid "North arrow style"
 msgstr "Barva rámečku"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr " nv barva\n"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -38030,73 +39879,73 @@ msgstr "Nemohl jsem uzavřít mapu"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 #, fuzzy
 msgid "Name of raster aspect map to be displayed"
 msgstr "Název rastrové mapy která bude zobrazena"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 #, fuzzy
 msgid "Type of existing raster aspect map"
 msgstr "Název existující rastrové mapy"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Barva pro vykreslení Xek (nullové hodnoty)"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Barva pro vykreslení Xek (nullové hodnoty)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 #, fuzzy
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Měřítkový faktor pro výškový model"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "Neplatná hodnota pro null"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "Neplatná hodnota pro '%s' (%s)"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 #, fuzzy
 msgid "Scale option requires magnitude_map"
 msgstr "Tato volba vyžaduje jeden sloupec"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Nelze číst soubor s rozsahem"
@@ -38388,55 +40237,41 @@ msgstr ""
 "\n"
 "matice dělení tříd\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Rastrová mapa <%s> nebyla v aktuálním mapsetu nalezena"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Podskupina <%s> nebyla nalezena ve skupině <%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Rastrová mapa <%s> v podskupině <%s> neexistuje."
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "Nebyly nalezeny žádné rastrové mapy"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Podskupina <%s> neobsahuje žádné rastrové mapy"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Podskupina <%s> obsahuje pouze 1 rastrovou mapu"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Podskupina obsahovat nejméně 2 rastrové mapy"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Nelze otevřít soubor obsahující zárodečné příznaky <%s>"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Nelze načíst soubor s příznaky <%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s> obsahuje příliš mnoho příznaků (limit je 255)"
@@ -38513,199 +40348,213 @@ msgstr "Minimální počet pixelů ve třídě"
 msgid "Name for output file containing final report"
 msgstr "Název výstupního souboru obsahující závěrečnou zprávu"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Rastrová mapa <%s> nebyla v aktuálním mapsetu nalezena"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Podskupina <%s> nebyla nalezena ve skupině <%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Neplatný počet počátečních tříd (%s)"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Neplatná hodnota(y) vzorkovacích intervalů (%s)"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "neplatná hodnota iterací(%s)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Neplatná hodnota konvergence (%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Neplatná hodnota rozdělení (%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Neplatná hodnota min_size (%s)"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Nelze vyvořit soubor pro závěrečnou zprávu <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### CLUSTER (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Lokace: %s"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Skupina:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Podskupina: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Soubor s výslednými příznaky: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Region"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Sever: %12.2f  Východ: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Jih: %12.2f  Západ: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Roz:   %12.2f  Roz:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Řádky:  %12d  Sloupce: %12d  Buňky: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Maska: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Cluster parametry\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr "Počáteční počet tříd:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [ze souboru příznaků %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "Minimální velikost třídy:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "Minimální dělení tříd:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Procentuální konvergence:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "Minimální počet iterací: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "Vzorkovací interval řádku:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "Vzorkovací interval sloupce:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "Načítám rastrovou mapu..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr "Paměť vyčerpána. Prosím, spusťte znovu a vyberte menší velikost vzorku"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Velikost vzorku: %d bodů\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 "Nedostatek bodů vzorku. Prosím, spusťte znovu a vyberte menší velikost "
 "vzorku."
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 "Nedostatek nenulových bodů vzorku. Zkontrolujte váš aktuální region (a "
 "masku)."
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## závěrečný výsledek #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d tříd (konvergence=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Nelze zapsat soubor s příznaky <%s> pro skupinu <%s>, podskupinu <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38713,12 +40562,12 @@ msgstr ""
 "\n"
 "#################### TŘÍDY ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d tříd, %.2f%% bodů stabilních\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38986,6 +40835,7 @@ msgid "Name of target mapset"
 msgstr "Název cílového mapsetu"
 
 #: ../imagery/i.target/main.c:68
+#, fuzzy
 msgid "Set current location and mapset as target for imagery group"
 msgstr "Nastaví aktuální lokaci a mapset jako cíl pro obrazovou skupinu"
 
@@ -39032,8 +40882,8 @@ msgid "radiance"
 msgstr "Variance"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Výběr"
@@ -39401,359 +41251,403 @@ msgstr "Skupina <%s> neexistuje"
 msgid "group <%s> references the following subgroups\n"
 msgstr "Podskupina <%s> neobsahuje žádné rastrové mapy"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Název rastrové mapy s povrchem pro křížový výběr"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Výběr"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Spočítá parametry reliéfu z digitálního modelu terénu"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Název tabulku referenčního systému"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Název existující rastrové mapy obsahující výsledky klasifikace"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Název vstupní vrstvy"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Jméno rastru plochy, který má být vytvořen"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Výstupní rastrová mapa orientace"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Počet hran mimo rozsah"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "Počet hran mimo rozsah"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39953,7 +41847,7 @@ msgstr "Trénovací mapa s \"pravdou o zemi\""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Maximální počet podtříd v každé třídě"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Neplatný počet podtříd (%s)"
@@ -40310,108 +42204,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Paměť vyčerpána"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Chyba při čtení mapy odstínu (hue)"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Chyba při zápisu souboru se segmenty"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Chuba při zápisu dat"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "počet bodů, které mají být vytvořeny"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Operace nebyla dosud implementována"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Zapisuji výstupní mapu..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Zpracovávám plochy..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "Soubor dig_att již neexistuje."
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Výběr"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Chyba při čtení mapy odstínu (hue)"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Chyba při zápisu souboru se segmenty"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Chuba při zápisu dat"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "počet bodů, které mají být vytvořeny"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Zapisuji výstupní mapu..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40485,64 +42385,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Mezní hodnota musí být >= 0"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Nelze vytvořit soubor segmentů pro %s"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Neplatná metoda: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Location <%s> vytvořena"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Location <%s> vytvořena"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Location <%s> vytvořena"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s: základní mapa nebyla nalezena"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Vzorová mapa by měla být binární (0/1 CELL) "
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "%s: základní mapa nebyla nalezena"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Počáteční počet tříd"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Počáteční počet tříd"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Operace nebyla dosud implementována"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -40611,7 +42528,7 @@ msgstr "Název výstupní rastrové mapy(green-zelená)"
 msgid "Name for output raster map (blue)"
 msgstr "Název výstupní rastrové mapy(blue-modrá)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40663,7 +42580,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -41516,51 +43433,55 @@ msgstr "Skupina <%s> nebyla nalezena"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Location <%s> vytvořena"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Selhalo"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Název vektorové vrstvy prvního impulsu"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Nejméně <%s> nebo <%s> je požadován"
@@ -41846,6 +43767,11 @@ msgstr "vektor, transformace"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "Prosím zpusťte i.target pro skupinu"
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -42248,9 +44174,921 @@ msgstr "Jméno výstupní rastrové mapy (saturation-sytost)"
 #~ msgstr "Názvy a typy nových sloupců"
 
 #, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Žádná bodová data nenalezena"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Číslo vrstvy (to)"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Číslo vrstvy, ke které se mají sloupce přidat"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Číslo vrstvy, ke které se mají sloupce přidat"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Počáteční mapové souřadnice"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Vytiskni na standardní výstup, neměň atributovou tabulku."
+
+#, fuzzy
+#~ msgid "<%s> already exists"
+#~ msgstr "Rastrová vrstva <%s> již existuje."
+
+#, fuzzy
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] je již komprimována"
+
+#, fuzzy
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "%sKOMPRIMUJI [%s]"
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "Přetečení je započítáno ve výpočtu"
+
+#, fuzzy
+#~ msgid "time series"
+#~ msgstr "body"
+
+#, fuzzy
+#~ msgid "Monthly minimum temperatures"
+#~ msgstr "Prvky"
+
+#, fuzzy
+#~ msgid "Monthly minimum temperatures for 12 months"
+#~ msgstr "Prvky"
+
+#, fuzzy
+#~ msgid "Monthly maximum temperatures"
+#~ msgstr "Prvky"
+
+#, fuzzy
+#~ msgid "Monthly maximum temperatures for 12 months"
+#~ msgstr "Prvky"
+
+#, fuzzy
+#~ msgid "Monthly average temperatures"
+#~ msgstr "Název rastrové mapy s povrchem pro křížový výběr"
+
+#, fuzzy
+#~ msgid "Monthly average temperatures for 12 months"
+#~ msgstr "Prvky"
+
+#, fuzzy
+#~ msgid "Prefix for output maps"
+#~ msgstr "Předpona výstupních rastrových map"
+
+#, fuzzy
+#~ msgid "Scale factor for input temperature"
+#~ msgstr "Měřítkový faktor pro výškový model"
+
+#, fuzzy
+#~ msgid "Scale factor for output temperature"
+#~ msgstr "Měřítkový faktor pro výškový model"
+
+#, fuzzy
+#~ msgid "Number of quartals to use"
+#~ msgstr "Počet zkusných ploch"
+
+#~ msgid "Location: %s\n"
+#~ msgstr "Lokace: %s\n"
+
+#~ msgid " %s\n"
+#~ msgstr "%s\n"
+
+#~ msgid "Region\n"
+#~ msgstr "Region\n"
+
+#~ msgid ""
+#~ "\n"
+#~ "%d classes, %.2f%% points stable\n"
+#~ msgstr ""
+#~ "\n"
+#~ "%d tříd, %.2f%% bodů stabilních\n"
+
+#~ msgid "Subregion"
+#~ msgstr "Subegion"
+
+#, fuzzy
+#~ msgid "Time increment"
+#~ msgstr "Zvětšení hodnoty kategorií o"
+
+#, fuzzy
+#~ msgid "Could not rewind input file"
+#~ msgstr "Nelze otevřít výstupní soubor <%s>"
+
+#, fuzzy
+#~ msgid "Input options"
+#~ msgstr "Vstupní_volby"
+
+#, fuzzy
+#~ msgid "Output options"
+#~ msgstr "Výstupní_volby"
+
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Přepsat kartografické zobrazení (použít zobrazení lokace)"
+
+#~ msgid ""
+#~ "\n"
+#~ "You can use the -o flag to r.external to override this check and use the "
+#~ "location definition for the dataset.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Přepínačem -o můžete tuto kontrolu zrušit a použít definici lokace pro "
+#~ "dataset.\n"
+
+#~ msgid "%s: Error writing temporary file"
+#~ msgstr "%s: Chyba při zapisování do dočasného souboru"
+
+#, fuzzy
+#~ msgid "Name for basins raster map"
+#~ msgstr "Název základní rastrové mapy"
+
+#~ msgid ""
+#~ "\n"
+#~ "You can use the -o flag to r.in.gdal to override this check and use the "
+#~ "location definition for the dataset.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Můžete použít přepínač -o zrušení této kontroly.\n"
+
+#, fuzzy
+#~ msgid "output map <%s> exists"
+#~ msgstr "Výstupní mapa <%s> ignorována"
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Přepsat kartografické zobrazení (použít zobrazení lokace)"
+
+#~ msgid ""
+#~ "\n"
+#~ "You can use the -o flag to %s to override this projection check.\n"
+#~ msgstr ""
+#~ "\n"
+#~ "Můžete použít přepínač -o pro %s a přeskočit toto ověření.\n"
+
+#~ msgid "[%s] not found"
+#~ msgstr "[%s] nenalezen"
+
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "volba <%s>: <%s> již existuje"
+
+#~ msgid "Page length (default: %d lines)"
+#~ msgstr "Délka stránky (výchozí: %d řádků)"
+
+#~ msgid "Page width (default: %d characters)"
+#~ msgstr "Šířka stránky (výchozí: %d znaků)"
+
+#~ msgid "Lokace:"
+#~ msgstr "Location:"
+
+#~ msgid "OGR datasource name"
+#~ msgstr "Název zdroje dat OGR"
+
+#, fuzzy
+#~ msgid "Default: path to the current GRASS database"
+#~ msgstr "Název cílového mapsetu"
+
+#, fuzzy
+#~ msgid "Command file not found"
+#~ msgstr "Rastrový (cell) soubor nebyl nalezen"
+
+#, fuzzy
+#~ msgid "Env file not found"
+#~ msgstr "Rastrový (cell) soubor nebyl nalezen"
+
+#, fuzzy
+#~ msgid "PID file not found"
+#~ msgstr "Rastrový (cell) soubor nebyl nalezen"
+
+#, fuzzy
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Nelze vytvořit soubor <%s>"
+
+#, fuzzy
+#~ msgid "Starting monitor <%s> with env file '%s'"
+#~ msgstr "Natavuji jméno mapy na <%s>, které přepíše <%s>"
+
+#, fuzzy
+#~ msgid "Text color or \"none\""
+#~ msgstr "Barva textu"
+
+#, fuzzy
 #~ msgid "Username to set for DB connection"
 #~ msgstr "Nelze nastavit projekci"
 
 #, fuzzy
 #~ msgid "Password to set for DB connection"
 #~ msgstr "Nelze nastavit projekci"
+
+#, fuzzy
+#~ msgid "Full path to the directory where the new location is"
+#~ msgstr "nová GISDBASE (celá cesta k adrešáři, kde je uložena nová location)"
+
+#, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "Name for output image"
+#~ msgstr "Název výstupního souboru"
+
+#, fuzzy
+#~ msgid "Unpacks a vector map packed with v.pack."
+#~ msgstr "aktualizuji metadat vektorové mapy."
+
+#, fuzzy
+#~ msgid "Default value: GRASS_GUI if defined otherwise wxpython"
+#~ msgstr "Výchozí hodnota: GRASS_GUI pokud není jinak definováno tcltk"
+
+#, fuzzy
+#~ msgid ""
+#~ "Exports a vector map to a GPS receiver or file format supported by "
+#~ "GPSBabel."
+#~ msgstr "Exportuje GRASS vektory jako soubor DXF."
+
+#, fuzzy
+#~ msgid "Export as waypoints"
+#~ msgstr "Exportuj linie jako polygony"
+
+#, fuzzy
+#~ msgid "Export as routes"
+#~ msgstr "Exportuj linie jako polygony"
+
+#, fuzzy
+#~ msgid "Name for output file or GPS device"
+#~ msgstr "Název výstupního souboru"
+
+#, fuzzy
+#~ msgid "GPSBabel supported output format"
+#~ msgstr "Seznam podporovaných výstupních formátů"
+
+#, fuzzy
+#~ msgid "No default DB driver defined"
+#~ msgstr "Základní ovladač není nastaven"
+
+#, fuzzy
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> již existuje v mapsetu <%s>"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "PřevedeGRASS bodovou vrstvu na vektorovou mapu."
+
+#, fuzzy
+#~ msgid "No flag given"
+#~ msgstr "Chyba při načítání souboru se souřadnicemi"
+
+#, fuzzy
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Načítám rastrovou mapu..."
+
+#, fuzzy
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Nelze číst soubor REF podskupiny <%s> ve skupině <%s>."
+
+#, fuzzy
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d kategorií bylo načteno z tabulky <%s>"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Měl by být zadán \"value=\" nebo \"-i\""
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "input= a source= se vzájemně vylučují"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Prosím, zadejte sloupec z"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Měl by být zadán \"value=\" nebo \"-i\""
+
+#, fuzzy
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "-r a -e se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "input= a source= se vzájemně vylučují"
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "weight= a -c se navzájem vylučují"
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "weight= a -c se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "weight= a -c se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "-r a -e se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Neplatná hodnota pro scalex"
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "input= a source= se vzájemně vylučují"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "input= a source= se vzájemně vylučují"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Prosím, zadejte sloupec z"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Prosím, zadejte sloupec z"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "input= a source= se vzájemně vylučují"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Prosím, zadejte sloupec z"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Prosím, zadejte sloupec z"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "Flags -%c and -%c are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "-s a -n se navzájem vylučují"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Jeden z přepínačů \"-i\" nebo \"-r\" nebo voleb \"color\", \"rast\" nebo "
+#~ "\"rules\" MUSÍ být zadána!"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr ""
+#~ "Jeden z přepínačů \"-i\" nebo \"-r\" nebo voleb \"color\", \"rast\" nebo "
+#~ "\"rules\" MUSÍ být zadána!"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Vypiš podporované formáty a ukonči se"
+
+#, fuzzy
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Název výstupní rastrové mapy"
+
+#, fuzzy
+#~ msgid "Default: input"
+#~ msgstr "Chyba při převodu na diskrétní hodnoty v jednotkách mapy"
+
+#, fuzzy
+#~ msgid ""
+#~ "Name of attribute column to use for thematic display (must be numeric)"
+#~ msgstr "Název sloupce atributu, který má být použit pro štítky"
+
+#, fuzzy
+#~ msgid "Type of thematic display"
+#~ msgstr "Název rastrové mapy která bude zobrazena"
+
+#, fuzzy
+#~ msgid "Vector point icon for point data"
+#~ msgstr "Vektorová mapa s bodovými vzorky"
+
+#, fuzzy
+#~ msgid "Icon size for point data"
+#~ msgstr "Zaokrouhli data s plovoucí desetinnou čárkou"
+
+#, fuzzy
+#~ msgid "Number of classes for interval theme (integer)"
+#~ msgstr "Počet třid "
+
+#, fuzzy
+#~ msgid "Color for graduated points map"
+#~ msgstr "Tabulka barev pro <%s> byla aktualizována"
+
+#, fuzzy
+#~ msgid "Ending color for custom color gradient"
+#~ msgstr "Měřítkový faktor souřadnic x"
+
+#, fuzzy
+#~ msgid "Misc"
+#~ msgstr "Metrický"
+
+#, fuzzy
+#~ msgid "Files"
+#~ msgstr "Linie"
+
+#, fuzzy
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Název výstupní rastrové mapy (red-červená)"
+
+#, fuzzy
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr ""
+#~ "Vytvoř též maximální vzdálenost, na kterou může přeskočit jiskra a "
+#~ "způsobit požár"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "zobrazení"
+
+#, fuzzy
+#~ msgid ""
+#~ "Allows creation and/or modification of raster3d map layer support files."
+#~ msgstr ""
+#~ "Umožňuje vytvořit a/nebo modifikovat podpůrné soubory rastrové mapy."
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Nelze číst vektorovou mapy"
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Neschopen vytvořit tabulku: %s"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Není dostatek paměti"
+
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "OLD_T_NEW dostal jsem špatný typ kódu [%x]"
+
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "NEW_T_OLD dostal jsem špatný typ kódu [%x]"
+
+#~ msgid "Reading dig file..."
+#~ msgstr "Načítám soubor dig..."
+
+#~ msgid "Input file is version 3."
+#~ msgstr "Vstupní soubor je verze 3."
+
+#~ msgid "Input file is version 4."
+#~ msgstr "Vstupní soubor je verze 4."
+
+#~ msgid "Input file is portable."
+#~ msgstr "Vstupní soubor je přenositelný."
+
+#~ msgid ""
+#~ "Input file is not portable. We will attempt to convert anyway but "
+#~ "conversion may fail. Please read manual for detail information."
+#~ msgstr ""
+#~ "Vstupní soubor není přenositelný. Přesto se jej pokusím změnit, ale "
+#~ "převod může selhat. Prosím, přečtěte si manuál pro detailnější informace."
+
+#~ msgid "[%d] points read to memory"
+#~ msgstr "[%d]bodů načteno do paměti"
+
+#~ msgid "[%d] lines read to memory"
+#~ msgstr "[%d] linií načteno do paměti"
+
+#~ msgid "[%d] points read and written to output"
+#~ msgstr "[%d] bodů načteno a zapsáno do výstupu"
+
+#~ msgid "[%d] lines read and written to output"
+#~ msgstr "[%d] linií načteno a zapsáno do výstupu"
+
+#~ msgid "[%d] area boundaries read and written to output"
+#~ msgstr "[%d] hranic oblasti bylo načteno a zapsáno do výstupu"
+
+#~ msgid "[%d] dead points skipped"
+#~ msgstr "[%d] mrtvých bodů přeskočeno"
+
+#~ msgid "[%d] dead lines skipped"
+#~ msgstr "[%d] mrtvých linií přeskočeno"
+
+#~ msgid "[%d] dead area boundaries skipped"
+#~ msgstr "[%d] mrtvých hranic oblastí přeskočeno"
+
+#~ msgid "[%d] elements of unknown type skipped"
+#~ msgstr "[%d]prvků neznámého typu přeskočeno"
+
+#~ msgid "[%d] elements read to memory"
+#~ msgstr "[%d] prvků načteno do paměti."
+
+#~ msgid "Reading dig_att file..."
+#~ msgstr "Načítám soubor dig_att..."
+
+#~ msgid "Error: %s"
+#~ msgstr "Chyba: %s"
+
+#~ msgid "Unknown type: %c"
+#~ msgstr "Neznámý typ: %c"
+
+#~ msgid "[%d] point categories read"
+#~ msgstr "[%d] kategorií bodů načteno"
+
+#~ msgid "[%d] line categories read"
+#~ msgstr "[%d] kategorií linií načteno"
+
+#~ msgid "[%d] centroids read"
+#~ msgstr "[%d] centroidů načteno"
+
+#~ msgid "[%d] dead point categories skipped"
+#~ msgstr "[%d] mrtvých bodů kategorií přeskočeno"
+
+#~ msgid "[%d] dead line categories skipped"
+#~ msgstr "[%d] mrtvých kategorií linií přeskočeno"
+
+#~ msgid "[%d] dead centroids skipped"
+#~ msgstr "[%d] mrtvých centroidů přeskočeno"
+
+#~ msgid "[%d] categories of unknown type skipped"
+#~ msgstr "[%d] kategorií neznámého typu přeskočeno"
+
+#~ msgid "[%d] categories read into memory"
+#~ msgstr "[%d] kategorií načteno do paměti."
+
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "Nebyly nalezeny žádné štítky kategorií (dig_cats), nebyla vytvořena "
+#~ "tabulka."
+
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "Nelze otevřít soubor dig_cats"
+
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Otevření vstupního souboru dig selhalo."
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "Soubor dig_att neexistuje."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Otevření vstupního souboru dig_att selhalo."
+
+#~ msgid "Attaching categories..."
+#~ msgstr "Přidávám kategorie..."
+
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "Selhalo přidávání atributu (kategorie %d) k linii."
+
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "Linie %d štítek: %d odpovídá jinému štítku: %d."
+
+#~ msgid "Writing new file..."
+#~ msgstr "Zapisuji nový soubor..."
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "[%d] body a linie byly zapsány do výstupního souboru."
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "[%d] centroidy byly zapsány do výstupního souboru."
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importuje starší verze GRASS vektorových map."
+
+#~ msgid "Endian of input vector map"
+#~ msgstr "Endián pro vstupní vektorovou mapu"
+
+#~ msgid "Interpolation spline step value in east direction"
+#~ msgstr "Hodnota kroku spline interpolace v východním směru"
+
+#~ msgid "Interpolation spline step value in north direction"
+#~ msgstr "Hodnota kroku spline interpolace v severním směru"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "Neznámý typ rastrové mapy"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Velikost cache (MiB)"
+
+#~ msgid "Can't call bad function"
+#~ msgstr "Nelze volat špatnou funkci"
+
+#~ msgid "Bad arguments to pointfunc %s"
+#~ msgstr "Chybné argumenty pro pointfunc %s"
+
+#~ msgid "No function defined to perform ``point %c point''"
+#~ msgstr "Není definována žádná funkce pro vykonání \"bod %c bod\""
+
+#~ msgid "Performing 1 arg map function on map %s"
+#~ msgstr "Vykonávám funkci s 1 argumentem na mapě %s"
+
+#~ msgid "Performing 2 arg map function on maps %s and %s"
+#~ msgstr "Vykonávám funkci s 2 argumenty na mapách %s a %s"
+
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Vykonávání mapa %s + %s"
+
+#~ msgid "Can't call bad map-function"
+#~ msgstr "Nelze volat špatnou mapovou funkci"
+
+#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
+#~ msgstr "Špatné argumenty mapové funkce %s (argc = %d)"
+
+#~ msgid "No function defined to perform map %c map"
+#~ msgstr "Není definována žádná funkce pro vykonání mapa %c mapa"
+
+#~ msgid "Can't call bad num-function"
+#~ msgstr "Nelze volat špatnou numerickou funkci"
+
+#~ msgid "Bad arguments to numfunc %s"
+#~ msgstr "Špatné agrumenty numerické funkce %s"
+
+#~ msgid "No function defined to perform ``number %c number''"
+#~ msgstr "Není definována žádná funkce pro vykonání \"číslo %c číslo\""
+
+#~ msgid "Can't call bad any-function"
+#~ msgstr "Nelze volat chybnou funkci"
+
+#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
+#~ msgstr "Chybné argumenty pro anyfunc %s (argc = %d)"
+
+#~ msgid "One or more coordinates"
+#~ msgstr "Jedna nebo více souřadnic"
+
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Pro adx není dostatek paměti"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Pro ady není dostatek paměti"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Pro adxx není dostatek paměti"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Pro adyy není dostatek paměti"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Pro adxy není dostatek paměti"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Nelze vytvořit quaddata"
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Nelze vytvořit quadfunc"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "Nelze vytvořit tree"
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "Nelze vytvořit tree info"
+
+#~ msgid "sites"
+#~ msgstr "body"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "PřevedeGRASS bodovou vrstvu na vektorovou mapu."
+
+#~ msgid "Site file <%s> not found"
+#~ msgstr "GRASS site soubor <%s> nebyl nalezen"
+
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Nelze přiřadit formát pro GRASS site"
+
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Selhalo alokování struktury GRASS site"
+
+#~ msgid "Input format: dimension: %d strings: %d FP: %d"
+#~ msgstr "Vstupní formát: dimeenze: %d řetězec: %d FP: %d"
+
+#~ msgid ""
+#~ "Floating point category values, using sequential integer for category"
+#~ msgstr ""
+#~ "Hodnoty kategorií map desetinnou čárkou, použiji postupný převod celých "
+#~ "čísel pro kategorie"
+
+#~ msgid "No category values, using sequential integer for category"
+#~ msgstr ""
+#~ "Žádná hodnota kategorie, použiji postupný převod celých čísel  pro "
+#~ "kategorie"
+
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "Převádím GRASS site na vektorovou mapu..."
+
+#~ msgid "%d sites written."
+#~ msgstr "%d bodů zapsáno."
+
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Název mapy, která má být použita jako INTENZITA  systému IHS"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Název mapy, která má být použita jako NASYCENOST v systému IHS"
+
+#, fuzzy
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Jméno výstupního souboru s výsledky chybové matice a kappa index"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Název rastrové mapy pro vložení do skupiny"
+
+#, fuzzy
+#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
+#~ msgstr "Mpa obsahují početní výsledky [m]"
+
+#, fuzzy
+#~ msgid ""
+#~ "Computes anisotropic cumulative cost of moving between different "
+#~ "geographic locations on an input elevation raster map whose cell category "
+#~ "values represent elevation combined with an input raster map layer whose "
+#~ "cell values represent friction cost."
+#~ msgstr ""
+#~ "Vytvoří rastrovou mapu obsahující anisotropické kumulativní náklady "
+#~ "pohybumezi různými geografickými polohami po vstupní rastrové mapě s "
+#~ "výškou, jejížhodnoty buněk reprezentují výšku kombinovanou s další mapou, "
+#~ "jejíž hodnoty reprezentují frikční povrch."
+
+#~ msgid "Name of output layer to be used for GREEN"
+#~ msgstr "Název výstupní mapy, která bude použita jako ZELENÁ v systému RGB"
+
+#~ msgid "Name of output layer to be used for BLUE"
+#~ msgstr "Název výstupní mapy, která bude použita jako MODRÁ v systému RGB"
+
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Nástroj pro interpolaci povrchů rastrových map."
+
+#~ msgid "Surface generation program."
+#~ msgstr "Program pro tvorbu povrchů."
+
+#~ msgid ""
+#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
+#~ msgstr ""
+#~ "Location v systému lat/long není r.surf.idw2 není podporována, použijte r."
+#~ "surf.idw"
+
+#~ msgid "%s=%s - illegal number of interpolation points"
+#~ msgstr "%s=%s - neplatný počet bodů pro interpolaci"
+
+#~ msgid "%s: no data points found"
+#~ msgstr "%s: nebyly nalezeny žádné body"
+
+#, fuzzy
+#~ msgid "Interpolating raster map <%s>... %d row... "
+#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
+#~ msgstr[0] "Interpoluji rastrovou mapu <%s> ... řádek %d ..."
+#~ msgstr[1] "Interpoluji rastrovou mapu <%s> ... řádek %d ..."
+
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "lat/long projekce není v současnosti podporována"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "alokace"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "síťování"
+
+#~ msgid "Name of elevation map"
+#~ msgstr "Jméno mapy elevace"
+
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Znak pro označení buněk s hodnotou NULL"
+
+#, fuzzy
+#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Jeden z přepínačů \"-i\" nebo \"-r\" nebo voleb \"color\", \"rast\" nebo "
+#~ "\"rules\" MUSÍ být zadána!"
+
+#, fuzzy
+#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Jeden z přepínačů \"-i\" nebo \"-r\" nebo voleb \"color\", \"rast\" nebo "
+#~ "\"rules\" MUSÍ být zadána!"
+
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Neznámá metrika: [%s]."
+
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Chyba při čtení soubor kategeorií pro <%s>"
+
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Chyba při čtení souboru color pro <%s>"
+
+#~ msgid "String representing no data cell value"
+#~ msgstr "Textový řetězec reprezentující buňky s hodnotou \"no data\""
+
+#~ msgid "Output z-file (elevation) map"
+#~ msgstr "Výstupní z-soubor nadmořských výšek"
+
+#~ msgid "Output aspect map (or fy)"
+#~ msgstr "Výstupní mapa expozice (nebo fy)"
+
+#~ msgid "Prefix for output raster map(s)"
+#~ msgstr "Předpona výstupních rastrových map"
+
+#, fuzzy
+#~ msgid "String to represent no data cell"
+#~ msgstr "Znak pro označení buněk s hodnotou NULL"
+
+#~ msgid "Character to represent no data cell"
+#~ msgstr "Znak pro označení buněk s hodnotou NULL"
+
+#~ msgid "Binary raster file to be imported"
+#~ msgstr "Název rastrového souboru, který má být importován"
+
+#~ msgid "Name of spread path raster map"
+#~ msgstr "Název rastrové mapy obsahující cesty šíření"
+
+#~ msgid "Run verbosely"
+#~ msgstr "Rozšířený výpis"
+
+#, fuzzy
+#~ msgid "%s available in mapset <%s>:"
+#~ msgstr "Vypiš přítomné vrstvy a ukonči se"
+
+#~ msgid "Null value indicator"
+#~ msgstr "Indikátor hodnoty NULL záznamu"
+
+#~ msgid "Suppress warnings"
+#~ msgstr "Potlač varování"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "GeoTIFF možnosti vytvoření"
+
+#, fuzzy
+#~ msgid "Name of input raster map(s)"
+#~ msgstr "Název vstupní rastrové mapy"
+
+#, fuzzy
+#~ msgid "The output type of the space time dataset"
+#~ msgstr "Název souboru s filtrem"
+
+#, fuzzy
+#~ msgid "Type of the aggregation space time dataset, default is strds"
+#~ msgstr "Název souboru s filtrem"
+
+#, fuzzy
+#~ msgid "Prefix for output raster maps (default: input)"
+#~ msgstr "Jméno výstupní rastrové mapy (výchozí: jméno vstupní mapy)"
+
+#, fuzzy
+#~ msgid "Name of elevation raster map"
+#~ msgstr "Název rastrového souboru s digitálním modelem terénu"
+
+#, fuzzy
+#~ msgid "coordinates of the outlet (east,north)"
+#~ msgstr "Souřadnice středu (východ, sever)"
+
+#, fuzzy
+#~ msgid "threshold"
+#~ msgstr "Nástroj: Mezní hodnota"
+
+#, fuzzy
+#~ msgid "No maps output"
+#~ msgstr "Žádné výstupní mapy"
+
+#, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr "Spočítá univariantní statistiku z ne-nullových buněk rastrové mapy."
+
+#, fuzzy
+#~ msgid "Data to be classified: column name or expression"
+#~ msgstr "Jméno sloupce nebo výraz"
+
+#~ msgid "Create grid of points instead of areas and centroids"
+#~ msgstr "Vytvořit mřížku bodů místo ploch a centroidů"
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "Vytvořit mřížku bodů místo ploch a centroidů"
+
+#~ msgid "Invalid distance"
+#~ msgstr "Chybná vzdálenost"
+
+#~ msgid "Layer number"
+#~ msgstr "Číslo vrstvy"
diff --git a/locale/po/grassmods_de.po b/locale/po/grassmods_de.po
index fb20796..fbd18ce 100644
--- a/locale/po/grassmods_de.po
+++ b/locale/po/grassmods_de.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2014-08-13 11:44+0200\n"
 "Last-Translator: Robert Nuske <robert.nuske nw-fva.de>\n"
 "Language-Team: German <grass-translations at lists.osgeo.org>\n"
@@ -255,6 +255,7 @@ msgstr "Mapset <%s> nicht gefunden."
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -490,6 +491,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr "SQLITE Datenbank ist beschäftigt, warte schon %d Sekunden..."
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Fehler beim Schließen der ASCII-Datei."
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -629,28 +635,28 @@ msgstr "Kann die OGR-Datenquelle '%s' nicht öffnen."
 msgid "Unable to open database:"
 msgstr "Kann Datenbank nicht öffnen:"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 msgid "SQLite database connection is still busy"
 msgstr "Die SQLite Datenbankverbindung ist noch beschäftigt."
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> existiert bereits"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Kann Tabelle nicht erzeugen: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "Mapset <%s> nicht gefunden."
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -661,6 +667,11 @@ msgstr "Kann den Index nicht erzeugen."
 msgid "Unable grant on table:"
 msgstr "Kann die Tabelle nicht kopieren."
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Kann die Größe nicht setzen."
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -791,7 +802,7 @@ msgstr "Kann die Datenbank <%s> nicht öffnen."
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -870,17 +881,17 @@ msgstr "Name"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Einstellungen"
 
@@ -892,7 +903,7 @@ msgstr "Durchgang %d"
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "Schriftname"
+msgstr "Testname"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -915,39 +926,39 @@ msgstr "Gibt derzeitige Verbindungsparameter aus und beendet sich."
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -990,7 +1001,7 @@ msgstr "Listet alle Datenbanktreiber"
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1020,7 +1031,7 @@ msgstr "Vektor, Raster, Attributtabelle"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1117,10 +1128,10 @@ msgid "Unable to open database <%s>"
 msgstr "Kann die Datenbank <%s> nicht öffnen."
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1309,11 +1320,11 @@ msgstr "fehlgeschlagen"
 msgid "succeeded"
 msgstr "erfolgreich beendet"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Kann Datei <%s> nicht zum Schreiben öffnen."
@@ -1347,10 +1358,10 @@ msgstr "Name der Attributespalte verwendet mit der 'query'-Option."
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Format"
 
@@ -1359,7 +1370,7 @@ msgstr "Format"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Zu berechnendes Perzentil (erfordert den Schalter -e)."
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1369,7 +1380,7 @@ msgstr ""
 "Name der Ausgabekarte (wenn keiner oder \"-\"  angegeben wurdeerfolgt die "
 "Ausgabe nach stdout)."
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "In der Ausgabe kein Spaltennamen ausgeben."
 
@@ -1377,7 +1388,7 @@ msgstr "In der Ausgabe kein Spaltennamen ausgeben."
 msgid "Describe query only (don't run it)"
 msgstr "Beschreibe die Abfrage nur (führe sie nicht aus)."
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Vertikale Ausgabe (anstatt horizontal)."
 
@@ -1430,6 +1441,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Name der Datei, die SQL-Befehle enthält."
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignoriere SQL-Fehler und fahre fort."
 
@@ -1594,7 +1606,6 @@ msgstr "Rotiere Zeichnung um 90 Grad"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 msgid "Output settings"
@@ -1715,7 +1726,7 @@ msgstr "Kann Daten nicht aus der Tabelle laden."
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1723,15 +1734,15 @@ msgstr "Kann Daten nicht aus der Tabelle laden."
 msgid "Error in pj_do_proj"
 msgstr "Error in pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "Kann die Projektionsinformationen der aktuellen Location nicht holen."
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1817,7 +1828,7 @@ msgstr "Kann die temporäre PostScript-Masken-Datei nicht erzeugen."
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1859,7 +1870,7 @@ msgstr "Kann die Layer-Informationen der Vektorkarte nicht bekommen."
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1872,26 +1883,27 @@ msgstr "Kann die Layer-Informationen der Vektorkarte nicht bekommen."
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Kann Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
@@ -1901,7 +1913,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Spaltentyp wird nicht unterstützt (muss 'string' sein)."
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2048,13 +2061,13 @@ msgstr "Kann die temporäre PostScript-Masken-Datei nicht öffnen."
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2062,8 +2075,8 @@ msgstr "Kann die temporäre PostScript-Masken-Datei nicht öffnen."
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2107,10 +2120,11 @@ msgstr "Histogram Equalization (histogrammbasierte nichtlinearen Streckung)"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2124,13 +2138,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2139,6 +2156,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2154,7 +2172,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2174,11 +2192,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2190,27 +2208,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2228,74 +2246,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "Raster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2305,6 +2326,7 @@ msgstr "Raster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2320,6 +2342,7 @@ msgstr "Raster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2338,6 +2361,7 @@ msgid "vector"
 msgstr "Vektor"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2346,15 +2370,16 @@ msgstr "Vektor"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2395,7 +2420,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Nicht unterstütztes Dateiformat."
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Datei <%s> erstellt."
@@ -2950,69 +2975,70 @@ msgid "Vector map <%s> not found"
 msgstr "Vektorkarte <%s> nicht gefunden."
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
@@ -3076,12 +3102,13 @@ msgstr "Keine aktiven Kontrollpunkte."
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3210,7 +3237,7 @@ msgstr "Zeige Transformationsmatrix Koeffizienten."
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3375,7 +3402,7 @@ msgid "Area:"
 msgstr "Fläche:"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Schreibe Attribute ..."
@@ -3390,7 +3417,7 @@ msgstr "Vermisse das Topography-Attribut der Oberfläche %d."
 msgid "No attribute table for layer %d"
 msgstr "Keine Attributtabelle gefunden."
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3403,15 +3430,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Kann Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Kann Rechte für die Tabelle <%s> nicht setzen."
@@ -3434,6 +3462,7 @@ msgid ""
 msgstr "Finde Zentroide der Layer: %s"
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3441,6 +3470,7 @@ msgid "extract"
 msgstr "extrahieren"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3451,10 +3481,10 @@ msgstr "Selektion"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "From"
@@ -3481,12 +3511,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Attribute"
 
@@ -3505,39 +3534,45 @@ msgstr "Kehre die Auswahl um"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3553,7 +3588,10 @@ msgstr "Kehre die Auswahl um"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3630,7 +3668,7 @@ msgstr "Ignorierter Text-Eintrag: %s."
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3683,45 +3721,46 @@ msgstr ""
 "Die Zahl der zufälligen Kategorien ist größer oder gleich der Zahl der "
 "eindeutigen \"%s\" Feature Kategorien %d."
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3763,11 +3802,11 @@ msgstr "Format <%s> wird nicht unterstützt"
 msgid "Format <%s> does not support writing"
 msgstr "Der Treiber <%s> unterstützt die Erzeugung von Rasterdaten nicht."
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3921,9 +3960,9 @@ msgstr "Name der Eingabe-Datei; oder \"-\" um von stdin zu lesen."
 msgid "Name for output file where to save current settings"
 msgstr "Name der Ausgabedatei, die den Endbericht enthält."
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Zeige unterstützte Formate an und Schluß."
 
@@ -3946,7 +3985,7 @@ msgstr "Gebe den aktuellen Mapset Suchpfad aus."
 msgid "Print current status in shell script style"
 msgstr "Gebe die Statistik im Shell-Skript-Stil aus."
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "-s und -n schließen sich gegenseitig aus."
@@ -3954,7 +3993,9 @@ msgstr "-s und -n schließen sich gegenseitig aus."
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Entweder 'rules' oder 'col' muss angegeben werden."
+msgstr ""
+"Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" oder "
+"\"rules\" muss angegeben werden!"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -3962,18 +4003,18 @@ msgid "%s= must be specified"
 msgstr "2 Layer müssen angegeben werden."
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Unterstützte Formate:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3983,68 +4024,69 @@ msgstr "Unterstützte Formate:\n"
 msgid "network"
 msgstr "Netzwerk"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Findet den kürzesten Weg in einem Vektor-Netzwerk."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Art der Kante"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Kanten-Layer"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Art der Kante"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "Knoten-Layer"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 "Name der Datei mit Start- und Endpunkten. Falls nicht angegeben, wird von "
 "stdin gelesen."
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Kostenspalte (Nummer) für vorwärts/beide Richtungen der Kanten."
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4056,10 +4098,11 @@ msgstr "Kostenspalte (Nummer) für vorwärts/beide Richtungen der Kanten."
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4071,29 +4114,29 @@ msgstr "Kostenspalte (Nummer) für vorwärts/beide Richtungen der Kanten."
 msgid "Cost"
 msgstr "Kosten"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Kostenspalte (Nummer) für die rückwärts Richtungen der Kanten."
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Spalte mit Kosten für Knoten (Zahl)."
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "Maximale Distanz zum Netzwerk."
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4104,21 +4147,57 @@ msgstr ""
 "gefunden und eine Fehlermeldung ausgegeben. Um die Verarbeitung zu "
 "beschleunigen, wählen Sie den Wert so gering wie möglich."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Keine Tabelle."
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Layer/Tabelle"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "Verwende gedätische Berechnungen für Longitude-Latitude Locations."
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 "Schreibe die Ausgabe in Form der originalen Eingabesegmente und nicht jeden "
 "Weg als eine Linie."
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4127,10 +4206,10 @@ msgstr "Die aktuelle Projektion ist nicht longitude-latitude."
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4146,8 +4225,8 @@ msgstr "[%d] Punkte ohne Kategorie (nfield: [%d])."
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4176,24 +4255,24 @@ msgstr "Kann keine Rechte für die Tabelle <%s> setzen."
 msgid "Wrong input format: %s"
 msgstr "Falsches Eingabe-Format: %s."
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "Kein Punkte mit Kategorie [%d]."
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 "Punkt mit der Kategorie [%d] ist nicht erreichbar von dem Punkt mit der "
 "Kategorie [%d]."
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "Punkt %f,%f ist nicht erreichbar von Punkt %f,%f."
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4202,17 +4281,17 @@ msgstr "Punkt %f,%f ist nicht erreichbar von Punkt %f,%f."
 msgid "Cannot insert new record: %s"
 msgstr "Kann neuen Eintrag nicht einfügen: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] Input-Format-Fehler."
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "[%d] Punkte mit gegebener Kategorie fehlen."
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4225,7 +4304,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4235,7 +4314,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "Vektor, Geometrie"
@@ -4290,17 +4369,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Kann die Liste der Kategorien <%s> nicht bekommen."
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Benötigter Parameter <%s> wurde nicht angegeben"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "Vektorkarte <%s> existiert bereits."
@@ -4604,6 +4683,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Name der Datei mit den Anfangssignaturen."
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4624,12 +4704,15 @@ msgstr "Name der Datei mit den Anfangssignaturen."
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4794,11 +4877,11 @@ msgstr "Layer muss > 0 sein für 'where'."
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Die Datenbankverbindung für den Layer<%d> ist nicht definiert."
@@ -4932,9 +5015,9 @@ msgid "Remove existing color table"
 msgstr "Lösche existierende Farbtabelle."
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr "Entfernen"
@@ -4996,7 +5079,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5014,8 +5097,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "-s und -n schließen sich gegenseitig aus."
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5041,6 +5123,7 @@ msgid "Color table exists. Exiting."
 msgstr "Farbtabelle schon vorhanden."
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Vektorkarte <%s> ist nicht 3D."
@@ -5066,7 +5149,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Farbtabelle der Rasterkarte <%s> nicht gefunden."
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5075,13 +5158,14 @@ msgstr "Kann die Farbtabelle der Rasterkarte <%s> nicht lesen."
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5111,8 +5195,9 @@ msgstr "Lese Objekte..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5157,7 +5242,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Ende der ASCII-Datei vor dem Ende der Kategorien erreicht."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Kann die Spalte <%s> nicht verwenden."
@@ -5211,6 +5296,7 @@ msgid "Point out of range"
 msgstr "Kantenanzahl außerhalb der Spanne."
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5219,15 +5305,17 @@ msgstr "Kantenanzahl außerhalb der Spanne."
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5323,14 +5411,15 @@ msgstr "Gebe Vektor-Punktkarte mit Abweichungen aus."
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Ausgaben"
 
@@ -5463,7 +5552,7 @@ msgstr "Nicht genügend Speicher für az."
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "Kann die Datei <%s> nicht erzeugen."
+msgstr "Kann Tabelle nicht erzeugen: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5528,15 +5617,15 @@ msgstr "Interpolationsmethode."
 msgid "Input failed"
 msgstr "Eingabe fehlgeschlagen."
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "%s fehlgeschlagen"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr ""
@@ -5587,9 +5676,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Kein Punkte mit Kategorie [%d]."
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5618,7 +5707,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Selektion"
+msgstr "Verarbeite Flächen ..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5697,9 +5786,9 @@ msgstr "Fehler beim Schließen der ASCII-Datei."
 msgid "3D raster map <%s> created"
 msgstr "Rasterkarte <%s> erzeugt."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5710,17 +5799,17 @@ msgstr "Kann neue Zeile %s nicht einfügen."
 msgid "Init costs from node %d"
 msgstr "Anfangskosten von Knoten %d"
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Features"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Erzeuge 'Steiner Tree' für das Netzwerk und die gegebenen Stationen"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5730,46 +5819,58 @@ msgstr ""
 "Modul wird ein heuristischer Algorithmus verwenden, so kann das Ergebnis "
 "suboptimal sein."
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "Layer mit Knoten (verwendet für dir Stationen)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Kostenspalte für dir Kanten (für beide Richtungen)."
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 "Kategorien der Punkte auf den Stationen (Layer wird mit nlayer angegeben)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Anzahl der Steiner Punkte (-1 für alle Möglichen)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Maximale Distanz zum Netzwerk."
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Anzahl der Städte: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Nicht genügend Stationen (< 2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "Es wurden mehr Steiner-Punkte angefordert als möglich sind"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Anzahl der Eingabepunkte: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 "Station am Knoten [%d] kann nicht mit der Station am Knoten [%d] verbunden "
 "werden"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
@@ -5777,30 +5878,54 @@ msgstr ""
 "[%d] (nicht erreichbare) Knoten wurden aus der Liste der Steiner-"
 "Punktkandidaten entfernt"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "MST Kosten = %f"
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "Suche nach [%d]. Steiner-Punkt"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 "Steiner-Punkt am Knoten [%d] wurde zu den Stationen hinzugefügt (MST Kosten "
 "= %f)."
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "Keine Steiner-Punkte gefunden -> verlasse die Schleife"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Anzahl der Steiner Punkte (-1 für alle Möglichen)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "MST Kosten = %f"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5820,17 +5945,19 @@ msgstr "Keine Steiner-Punkte gefunden -> verlasse die Schleife"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr "Import"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Punkt"
@@ -5863,9 +5990,9 @@ msgstr "Name der Spalte mit den Y-Koordinaten."
 msgid "Name of column containing z coordinate"
 msgstr "Name der Spalte mit den Z-Koordinaten."
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "3D-Ausgabe."
 
@@ -5916,7 +6043,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Kann den Select-Cursor '%s' nicht öffnen."
@@ -5934,7 +6061,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "x/y/z-Spalten müssen vom Typ integer oder double sein."
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Kopiere Attribute..."
@@ -5960,7 +6087,90 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d Punkte in die Vektorkarte geschrieben."
 msgstr[1] "%d Punkte in die Vektorkarte geschrieben."
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Die Projektion des Datensatzes scheint nicht mit der aktuellen Location "
+"übereinzustimmen.\n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "Zu importierender Datensatz PROJ_INFO:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Bedenken Sie, dass die Erzeugung einer neuen Location auf Grundlage der "
+"Eingabedaten mit dem Parameter 'location=' geeigneter sein könnte.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"Kann die Projektionsinformationen der Eingabekarte nicht ins GRASS-Format "
+"konvertieren, zwecks Überprüfung."
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Übersteuere die Überprüfung der Projektion."
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"Die Projektionsinformationen des Eingabedatensatzes und der aktuellen "
+"Location scheinen übereinzustimmen."
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "4 Werte sind für den Parameter 'spatial' nötig."
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Ungültige z-Spanne."
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Unbekannte Regeloption: '%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5983,7 +6193,7 @@ msgstr[1] "%d Punkte in die Vektorkarte geschrieben."
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5991,7 +6201,7 @@ msgstr[1] "%d Punkte in die Vektorkarte geschrieben."
 msgid "statistics"
 msgstr "Statistik"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6601,8 +6811,8 @@ msgstr "Spaltentyp (%s) wird nicht unterstützt."
 msgid "Operator '%s' is not supported for type line"
 msgstr "Der Operator '%s' wird nicht für den Typ Linie unterstützt"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Kann die Vektorkarte nicht lesen."
@@ -6659,12 +6869,12 @@ msgid "Breaking lines..."
 msgstr "Teile Linien..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Entferne Duplikate ..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "Säubere Grenzen an den Knoten..."
 
@@ -6672,11 +6882,11 @@ msgstr "Säubere Grenzen an den Knoten..."
 msgid "Merging lines..."
 msgstr "Verschmelze Linien..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Füge Inseln hinzu..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Kann den Flächenzentroiden nicht berechnen."
 
@@ -6691,12 +6901,13 @@ msgstr "Frage Vektorkarte <%s> ab..."
 msgid "Attribute not found"
 msgstr "Attribute nicht gefunden"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Schreibe Zentroide..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Kann neuen Eintrag nicht einfügen: '%s'"
@@ -6775,79 +6986,80 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "Vektorkarte <%s> im aktuellen Mapset nicht gefunden."
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Abtast-Methode (sampling)."
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Erzeugt zufällige 2D/3D GRASS Vektor-Punktkarten."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Anzahl der zu erstellenden Punkte."
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Lese Punkte aus Eingabe-Vektorkarte."
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Minimale z-Höhe (benötigt den Schalter '-z' oder Spaltenname)."
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Maximale z-Höhe  (benötigt den Schalter '-z' oder Spaltenname)."
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Name der Spalte, die numerische Werte enthält."
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Schreibt Z Werte in eine Spalte anstelle der 3D Vektorkarte."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Farbtabellentyp"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Erzeuge eine 3D-Ausgabe."
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Selektiere Punkte für jede Fläche..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Anzahl der Punkte muss größer >0 sein (%d gegeben)."
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
@@ -6856,29 +7068,30 @@ msgstr ""
 "Ungültige Layer-Nummer (%d). Parameter '%s' oder '%s' angegeben, vermute "
 "Layer '1'."
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d von %d Objekten selektiert in der Vektorkarte <%s>."
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Name existierender Vektorkarte mit Flächen"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Kann Tabelle nicht erzeugen: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "Tabelle sollte nur zwei Spalten haben."
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -6886,18 +7099,18 @@ msgstr ""
 "Sie haben nicht unterstützte Spaltentypen erzeugt. Dieses Modul unterstützt "
 "nur die Spaltentypen INTEGER und DOUBLE PRECISION."
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "Start-Vektorkarte <%s> beinhaltet keine Punkte in der aktuellen Region"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "Start-Vektorkarte <%s> beinhaltet keine Punkte in der aktuellen Region"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Erzeuge Punkte... "
 
@@ -6944,7 +7157,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Name einer existierenden Rasterkarte, die abgefragt werden soll."
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Spalte die mit den Abfrageergebnissen aktualisiert werden soll."
@@ -6958,82 +7171,80 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Gib gemittelte Werte anstatt Intervalle aus."
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Spalte <%s> nicht gefunden."
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Spalte <%s> in der Tabelle <%s>nicht gefunden."
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Spaltentyp nicht unterstützt."
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Rastertyp ist Integer und der Spaltentyp ist Fließkomma."
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Rastertyp ist Fließkomma und der Spaltentyp ist Integer. Etwas "
 "Informationsgehalt der Daten geht verloren!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Lese Feature..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "%d Linien oder Grenzen in der Vektorkarte <%s@%s> gefunden."
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d Punkte außerhalb der Region wurden übersprungen."
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "%d Punkte ohne Kategorie wurden übersprungen."
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Mehrere Punkte (%d) der Kategorie %d, auf 'NULL' gesetzt."
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d Kategorien aus dem Vektor geladen."
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d doppelte Kategorien im Vektor."
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d Kategorien aus der Tabelle geladen."
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d Kategorien des Vektors fehlen in der Tabelle."
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d Aktualisier-Fehler."
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d Einträge aktualisiert."
@@ -7041,14 +7252,14 @@ msgstr "%d Einträge aktualisiert."
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Raster, Statistik"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7134,7 +7345,7 @@ msgstr ""
 "Vektorkarte <%s> ist nicht im Mapset des Benutzers und kann nicht "
 "aktualisiert werden."
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7189,6 +7400,152 @@ msgstr "Konnte die Flächen-Kategorie %d nicht finden."
 msgid "%d records updated"
 msgstr "%d Einträge aktualisiert."
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Die Datenbankverbindung für den Layer<%d> ist nicht definiert."
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Spaltentyp nicht unterstützt."
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Kein Eintrag für Linie (cat = %d)."
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Kein Eintrag für Linie (cat = %d)."
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Spalte <%s> nicht gefunden."
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr "LIDAR"
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Erzeuge Vektorpunkte als 3D-Punkte."
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Konvertiere OGR Vektorlayer in das GRASS Vektorkarten."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Layer-Nummer für Punkt-Karte"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld Kategorien"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Layer-Nummer (to)."
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Layer-Nummer (to)."
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Layer, in dem Spalten hinzugefügt werden soll."
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Spalte muss numerisch sein."
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Spalten"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Name der Farbdefinitionsspalte (mit dem Schalter -a zu benutzen)."
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Spalte mit Farbwerten nicht spezifiziert."
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Kann Farbe nicht lesen."
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Skalierungsfaktor für die z-Daten."
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Skalierungsfaktor für die z-Daten."
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Begrenze den Import auf die aktuelle Region."
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Keine Tabelle."
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7227,6 +7584,12 @@ msgstr ""
 "Spalte mit Beschriftungen wurde nicht angegeben. Es werden keine "
 "Beschriftungen ausgegeben."
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Spalte <%s> nicht gefunden."
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7256,47 +7619,54 @@ msgstr "Kann die Spalte <%s> nicht verwenden."
 msgid "No areas selected from vector map <%s>"
 msgstr "%d von %d Objekten selektiert in der Vektorkarte <%s>."
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Durchlauf %d von %d."
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 "Probleme beim Verarbeiten der Flächen der Vektorkarte <%s>, mache weiter..."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 "Probleme beim Verarbeiten der Linien der Vektorkarte <%s>, mache weiter..."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Schreibe Rasterkarte..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Erstelle Supportdateien für Rasterkarte..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "Farbe kann nur von der Datenbank aktualisiert werden wenn use=attr."
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Konvertierte Flächen: %d von %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Konvertierte Punkte/Linien: %d von %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7358,8 +7728,9 @@ msgstr "Rasterwert (für use=val)."
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
@@ -7367,8 +7738,9 @@ msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Statistik um Rasterwert zu bestimmen"
@@ -7415,7 +7787,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Unbekannte Option '%s'."
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Lese Flächen..."
 
@@ -7433,11 +7805,16 @@ msgstr "kann die spezifizierte Spalte nicht verwenden."
 msgid "Get area %d failed"
 msgstr "Holen der Fläche %d fehlgeschlagen."
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Import der DXF-Datei fehlgeschlagen!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr "Fläche ohne Zentroid (OK für Inseln)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Zentroid ohne Kategorie."
 
@@ -7470,11 +7847,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Spaltenname der Degree-Zentralität"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Spalten"
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr "Spaltenname der Closeness-Zentralität"
@@ -7651,24 +8023,24 @@ msgstr "Objekt-Typ in den konvertiert wird."
 msgid "Incompatible types"
 msgstr "Inkompatible Typen."
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr "Kopieren der Attributtabelle in die Ausgabekarte fehlgeschlagen."
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 "Erzeugt einen Ring der die gegebenen Knoten verbindet (Handelsreisenden-"
 "Problem)."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7676,80 +8048,86 @@ msgstr ""
 "Bedenken Sie das: Das Handelsreisenden-Problem ist NP-hart. Dies Modul setzt "
 "ein heuristischen Algorithmus ein und erzeugte Ringen können suboptimal sein."
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+"Kategorien der Punkte ('Städte') auf den Knoten (Layer wird mit nlayer "
+"bestimmt)."
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "Knoten-Layer (verwendet für Städte)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Kostenspalte (Nummer) für die rückwärts Richtungen der Kanten."
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr ""
 "Name der Ausgabekarte (wenn keiner oder \"-\"  angegeben wurdeerfolgt die "
 "Ausgabe nach stdout)."
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
-"Kategorien der Punkte ('Städte') auf den Knoten (Layer wird mit nlayer "
-"bestimmt)."
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Maximale Distanz zum Netzwerk."
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Anzahl der Städte: [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Nicht ausreichend Städte (< 2)."
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Erzeuge Zentroide..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "Kein Punkte mit Kategorie [%d]."
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Kein Eintrag für Punkt (cat = %d)."
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Zielknoten [%d] ist nicht erreichbar von Knoten [%d]."
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Kann Datei <%s> nicht zum Schreiben öffnen."
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 msgid "isolines"
 msgstr "Isolinien"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Teilt das Netz durch Isokostenlinien."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7760,7 +8138,7 @@ msgstr ""
 "Zentraler Knoten muss geöffnet sein (Kosten >= 0). Kosten des zentralen "
 "Knotens gehen in die Berechnung ein."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7769,51 +8147,51 @@ msgstr ""
 "Kategorien der Zentren (Punkte auf Knoten) zu welchen das Netz zugewiesen "
 "wird. Der Layer für diese Kategorien wird mit der 'nlayer'-Option angegebn."
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Kosten für Isolinien."
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr "Falsche Isokosten: %f"
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr "Isokosten: %f weniger als vorher"
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr "Iso Kosten %d: %f"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 "Kosten sind nicht hoch genug. Alles in Reichweit fällt in das erste Band."
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr "Zentrum auf geschlossenem Knoten (Kosten = -1) wurde ignoriert."
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Anzahl der Zentren: %d (nlayer %d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 "Nicht genügend Zentren für den gewählten nlayer. Nichts wird zugewiesen."
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Berechne Kosten ausgehend vom Zentrum %d..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 "Kann das Liniensegment nicht bekommen, Segment ist außerhalb der Linie."
@@ -8026,14 +8404,15 @@ msgstr ""
 "Pfad zur resultiertenden ASCII-Datei oder ASCII-Kartenname, wenn der "
 "Schalter '-o' angegeben ist."
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Lese von der Standardeingabe, wenn nicht angegeben (oder \"-\")."
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8057,9 +8436,13 @@ msgstr "Lese von der Standardeingabe, wenn nicht angegeben (oder \"-\")."
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8121,7 +8504,7 @@ msgstr "Trennzeichen (Punkt-Modus)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Anzahl der signifikanten Stellen (nur Fließkommazahlen)"
 
@@ -8186,7 +8569,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Kann die Layer-Informationen der Vektorkarte <%s> nicht bekommen"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8284,9 +8667,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Kann die Eingabedatei <%s> nicht öffnen. Fehler %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Kann keinen Index für die Tabelle <%s>, Schlüssel <%s> erzeugen."
@@ -8882,7 +9266,7 @@ msgstr ""
 "Bemerkung: Minimum der ersten Klasse ist inklusive\n"
 "\n"
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Layer %d"
@@ -8903,7 +9287,7 @@ msgstr "Kann die Matrix nicht invertieren."
 msgid "Resolving conflicts..."
 msgstr "Löse Konflikte..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 msgid "generalization"
 msgstr "Generalisierung"
 
@@ -8933,185 +9317,187 @@ msgstr "Vektorbasierte Generalisierung."
 
 #: ../vector/v.generalize/main.c:100
 #, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Vektorbasierte Generalisierung."
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
-"%d Linien/Grenzen wurden nicht geändert wegen übertriebener Vereinfachung."
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Splineinterpolations Algorithmus"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Vektorbasierte Generalisierung."
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "Generalisierungs Algorithmus"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "Maximaler Toleranzwert"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "Vorausschau-Parameter"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 "Prozentsatz der Punkte im Ergebnis des 'douglas_reduction' Algorithmus."
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 "Verschieben von berechneten Punkten in Richtung seiner ursprünglichen "
 "Position."
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 "Minimaler Winkel zwischen zwei aufeinanderfolgenden Segmenten in der Hermite-"
 "Methode."
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "Grad-Schwellenwert für die Netzwerk Generalisierung."
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 "Geschlossenheits(closeness)-Schwellenwert für die Netzwerk Generalisierung."
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "Betweeness-Schwellwert für die Netzwerk Generalisierung."
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr "Alpha-Parameter für die Snakes."
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr "Beta-Parameter für die Snakes."
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Anzahl der Iterationen"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Kopiere die Tabelle nicht."
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Unbekannte Methode"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Spalte <%s> in der Tabelle <%s>nicht gefunden."
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht erzeugen."
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr "Verschieben..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr "Netzwerk Generalisierung..."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr "Attribute werden für die 'where'-Option benötigt. Kopiere Tabelle."
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Generalisierung (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Verwende Auflösung [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "Methode '%s' hat den ersten Punkt nicht erhalten."
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr "Methode '%s' hat den letzten Punkt nicht erhalten."
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "Methode '%s' hat den letzten Punkt nicht erhalten."
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
@@ -9119,23 +9505,23 @@ msgstr ""
 "%d Grenzen wurden nicht geändert, weil Änderungen die Topologie beschädigen "
 "würden."
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 "%d Linien/Grenzen wurden nicht geändert wegen übertriebener Vereinfachung."
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, fuzzy, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "Anzahl der Vertices der selektierten Linien %s von %d zu %d (%d%%)."
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr "reduziert"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr "geändert"
 
@@ -9208,8 +9594,8 @@ msgstr "Symbolgröße von Punktobjekten (in Karteneinheiten)."
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Text-Farbe"
 
@@ -9222,13 +9608,13 @@ msgstr "Text-Farbe"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Farben"
@@ -9424,13 +9810,13 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Säuberungswerkzeug"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 msgid "Removing dangles..."
 msgstr "Entferne Überstände (dangles)..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 msgid "Removing bridges..."
 msgstr "Entferne Brücken..."
 
@@ -9482,14 +9868,6 @@ msgstr "Lese 3D Vertices..."
 msgid "Constructing 3D hull..."
 msgstr "Konvertiere ..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr "LIDAR"
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9577,7 +9955,9 @@ msgstr "Bilineare Interpolation."
 msgid "Bicubic interpolation"
 msgstr "Bikubische Interpolation."
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Parameter für die Tykhonov Regularisierung (beinflußt Glättung)."
 
@@ -10005,6 +10385,193 @@ msgstr "Fehler beim Lesen des Wertes des Attributes '%s'."
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: Schreibe VTK-Header"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Keine Datenpunkte gefunden."
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "Raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d Klumpen."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Cluster-Separation."
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Layer-Nummer (Vektorkarte A)."
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Maximale Distanz zum Netzwerk."
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Minimale Anzahl von Pixeln in einer Klasse."
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Cluster-Separation."
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "Kann das vorherbestimmte Vektoröffnungslevel nicht setzen."
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Anzahl der Klassen muss < 256 sein."
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Die Größe der Nachbarschaft muss positiv sein."
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Zähle Sites in den Quadraten..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Keine Punkte gefunden, überspringe den Typ point."
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Erzeuge Zentroide..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s=%s - muss eine positive Zahl sein."
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Benutze maximale Distanz zwischen Punkten %f."
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Keine Kategorien gefunden"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Maximale Distanz zur nächsten Linie."
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "Mittelwert = %.5lf"
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Standardabweichung"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Benutze maximale Distanz zwischen Punkten %f."
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Finde Kostenpfad..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "npoints = %d, nterrain = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Keine Linien gefunden, überspringe %s."
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Erzeuge Punkte... "
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Schreibe Ausgabe-Rasterkarten..."
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Lese Eingaben..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Keine Punkte gefunden"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "Vektor, Kerndichte"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%d Klassen gefunden."
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%d Klassen gefunden."
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10140,26 +10707,26 @@ msgstr "Unmöglich die aux-Tabelle zu aktualisieren."
 msgid "Impossible to write to aux table"
 msgstr "Unmöglich die aux-Tabelle zu schreiben."
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Führt Wartungsarbeiten im Netzwerk durch."
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Führt Wartungsarbeiten im Netzwerk durch."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "Kann die Vektorkarte <%s> auf dem Topologischen Level %d nicht öffnen."
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d neue Punkte in die Ausgabe geschrieben."
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "[%d] Linien sind gelesen und in die Ausgabe geschrieben worden."
@@ -10201,7 +10768,7 @@ msgstr ""
 "Erforderlich für die Operation 'connect'. Verbindet Punkte innerhalb des "
 "gegebenen Schwellenwertes."
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10215,14 +10782,14 @@ msgstr "Name der Eingabe-Vektorkarte mit Punkten."
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr "Benötigt für die Operation 'connect'."
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Operation die ausgeführt werden soll."
@@ -10251,49 +10818,133 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Findet den kürzesten Weg in einem Vektor-Netzwerk."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 "Erforderlich für die Operation 'connect'. Verbindet Punkte innerhalb des "
 "gegebenen Schwellenwertes."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Namen der Eingabedateien."
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Benötigt für die Operation 'connect'."
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Weise neuen Punkten eindeutige Kategorien zu."
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "Für die Operation 'nodes'."
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Vektorkarte mit den Stopp-Punkten"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Linien-Layer"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Unbekannte Operation."
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "Der Schwellwert muss >=0 sein."
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Kann Eingabe nicht von <%s> lesen."
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Kann nicht in Tabelle <%s> einfügen."
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Kann die Vektorkarte <%s> nicht öffnen."
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Kann die Vektorkarte <%s> nicht erzeugen."
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Die Tabelle <%s> existiert nicht in der Datenbank <%s>."
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "OGR Vektor <%s> existiert bereits und wird überschrieben"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "OGR Vektor <%s> existiert bereits und wird überschrieben"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Kann Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Kann die Tabelle <%s> nicht erzeugen."
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Kann die Attributtabelle nicht in die Vektorkarte <%s> kopieren."
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Kann die Tabelle <%s> nicht erzeugen."
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10434,7 +11085,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d Kategorien gelesen von der Vektorkarte (Layer %d)."
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "Kann den Zentroid der Fläche nicht berechnen."
 
@@ -10543,7 +11194,7 @@ msgstr "Die Datenbankverbindung für den Layer<%d> ist nicht definiert."
 msgid "Key column type is not integer"
 msgstr "Schlüssel-Spalte (key column) ist nicht muss vom Typ integer."
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Kann Daten nicht aus der Tabelle <%s> holen."
@@ -11382,7 +12033,7 @@ msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 "Erzeuge 3D Ausgabe wenn Eingabe 3D ist (nur bei Ausgabe von Shapefiles)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11645,8 +12296,8 @@ msgstr "Location, die die Eingabe-Vektorkarte enthält."
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr "Quelle"
 
@@ -11654,7 +12305,7 @@ msgstr "Quelle"
 msgid "Mapset containing input vector map"
 msgstr "Mapset, das die Eingabe-Vektorkarte enthält."
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Gebe Namen des aktuellen Fensters aus."
@@ -11664,7 +12315,7 @@ msgstr "Gebe Namen des aktuellen Fensters aus."
 msgid "Name of input vector map to re-project"
 msgstr "Name der Eingabe-Rasterkarte, die umprojeziert werden soll."
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Pfad zur GRASS-Datenbank der Eingabe-Location."
 
@@ -11679,8 +12330,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr "Ziel"
 
@@ -11713,17 +12364,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "Eingabe und Ausgabe Location dürfen nicht identisch sein."
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Prüfe Location <%s> Mapset <%s>."
@@ -12091,12 +12744,12 @@ msgstr ""
 "Tabelle: %s\n"
 "Schlüsselspalte: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "Erzeugt eine neue Vektorkarte durch Kombination anderer Vektorkarten."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
@@ -12104,215 +12757,379 @@ msgstr ""
 "Ausgabe-Vektorkarte, in die die Boundig Boxes der Eingabe-Vektorkarten "
 "geschrieben werden"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Erzeuge keine Topologie."
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
-"Hänge Dateien an eine existierende Datei an. Das Überschreiben von "
-"existierenden Dateien muss aktiviert sein"
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Kopiere auch die Attributtabelle"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "Nur die Tabelle des Layer 1 wird zur Zeit unterstützt"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+"Hänge Dateien an eine existierende Datei an. Das Überschreiben von "
+"existierenden Dateien muss aktiviert sein"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Fehlende Tabelle."
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Schlüsselspalten (key columns) stimmen nicht überein"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Anzahl der Spalten stimmt nicht überein"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Spaltennamen stimmen nicht überein"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Spaltentypen stimmen nicht überein"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "Länge der 'string'-Spalten stimmen nicht überein"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Schlüselspalte (key column) nicht gefunden"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "Die Ausgabekarte ist nicht 3D"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Kann die Tabelle <%s> nicht erzeugen."
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Kombiniere Vektorkarte <%s@%s>..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 "Fehler beim Lesen der Vektorkarte <%s> - Einige Daten könnten nicht korrekt "
 "sein"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Erstelle Topologie für die Vektorkarte <%s>..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "Überschneidungen an den Grenzen müssen gefangen werden"
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "Linien, die in mehreren Dateien vorkommen, müssen editiert werden"
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "Die Header-Informationen müssen auch editiert werden"
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d Vektorkarten kombiniert"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Kann den Select-Cursor '%s' nicht öffnen"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Kann die Zeile nicht holen"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Unbekannter Spalten-Typ"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Kann neuen Eintrag nicht einfügen: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "Übersteuere die Überprüfung der Projektion."
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Konvertiere OGR Vektorlayer in das GRASS Vektorkarten."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Eingabe fehlgeschlagen."
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Layer-Nummer (to)."
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Layer, in dem Spalten hinzugefügt werden soll."
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Importiere nur einen Ausschnitt."
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Ausschnitt"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Format: xmin,ymin,xmax,ymax - gewöhnlich W,S,O,N"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Name der neu zu erstellenden Location."
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Filterbereich für z-Daten (min,max)."
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Integer-Werte wurden importiert."
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Integer-Werte wurden importiert."
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Gebe Rasterhistorie anstelle der Info aus."
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Eingabe Vektorkarte mit wenigen Punkten."
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Layer-Nummer (Vektorkarte A)."
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Integer-Werte wurden importiert."
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Dekoration"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
 msgstr ""
-"Übersteuere die Projektion des Datensatzes (verwende Projektion der "
-"Location)."
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Integer-Werte wurden importiert."
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Importiere Punkte..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> Ungültige Anzahl von Punkten."
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Name der neu zu erstellenden Location."
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Gebe Rasterhistorie anstelle der Info aus."
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Begrenze den Import auf die aktuelle Region."
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Eingabe-Vektorkarte mit Punkten."
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr "Vergrößere die Ausdehnung der Region basierend auf neuem Datensatz."
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Name der Ausgabe-Rasterkarte (Standard: abgleitet aus dem Paket)"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr "Übersteuere die Projektionsprüfung (verwende Projektion der Location)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Kann die Projektionseinheit der aktuellen Location nicht ermitteln."
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Gruppe <%s> existiert nicht."
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Kann Tabelle <%s> nicht beschreiben."
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Unbekannte Regeloption: '%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Layer-Nummer für Punkt-Karte"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 "Wählen Sie entweder den Schalter \"aktuelle Region\" oder die Option "
 "'spatial' aber nicht beide."
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "4 Werte sind für den Parameter 'spatial' nötig."
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12320,124 +13137,172 @@ msgstr ""
 "Kann die Projektion der Eingabekarte nicht in das GRASS-Format konvertieren; "
 "erstelle daher keine neue Location."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Kann die Location <%s>: %s nicht erstellen."
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Location <%s> erstellt."
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Die Vektorkarte <%s> existiert bereits und wird überschrieben."
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"Kann die Projektionsinformationen der Eingabekarte nicht ins GRASS-Format "
-"konvertieren, zwecks Überprüfung."
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "Übersteuere die Überprüfung der Projektion."
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Importiere %d Punkte..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Importiere %d Punkte..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Die Projektion des Datensatzes scheint nicht mit der aktuellen Location "
-"übereinzustimmen.\n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d Punkte importiert"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "Zu importierender Datensatz PROJ_INFO:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d Punkte importiert"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Bedenken Sie, dass die Erzeugung einer neuen Location auf Grundlage der "
-"Eingabedaten mit dem Parameter 'location=' geeigneter sein könnte.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"Die Projektionsinformationen des Eingabedatensatzes und der aktuellen "
-"Location scheinen übereinzustimmen."
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Die Vektorkarte <%s> existiert bereits und wird überschrieben."
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:606
-#, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Kann Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:742
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Importiere %d Punkte..."
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "%d points imported"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
 msgstr "%d Punkte importiert"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "%d Punkte importiert"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
+
+#: ../vector/v.in.lidar/main.c:759
+#, fuzzy, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
+
+#: ../vector/v.in.lidar/main.c:761
+#, fuzzy, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d Punkte außerhalb des Schwellenwertes."
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d Punkte außerhalb des Schwellenwertes."
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Die letzten %d Punkte werden ignoriert."
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Kann die Vektorkarte <%s> nicht öffnen."
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Kann Datenbank <%s> nicht mit dem Treiber <%s> öffnen."
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12447,22 +13312,22 @@ msgstr ""
 "Erzeugt eine neue Vektorkarte als einen ausschließlich lesbaren Link zu "
 "einem OGR-Layer."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Layer <%s> ist nicht vorhanden."
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Kann die Zeile %d nicht zurückschreiben."
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Kann die Datei <%s> nicht erzeugen."
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Rasterkarte <%s> erzeugt."
@@ -12472,12 +13337,12 @@ msgstr "Rasterkarte <%s> erzeugt."
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Name für die auszugebende Tabelle"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Rasterdatei die verbunden werden soll."
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12489,25 +13354,29 @@ msgstr ""
 " \t\tESRI Shapefile: Name des Shapefiles\n"
 "\t\tMapInfo Datei: Mapinfo-Dateiname."
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Name der Ausgabe-Vektorkarte (Standard: input)."
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr "Zeigt die vorhandenen Layer in der Datenquelle und beendet sich."
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Zeigt die vorhandenen Layer in der Datenquelle und beendet sich."
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 #, fuzzy
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "Format: Layer Typ Anzahl Min Max"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12557,7 +13426,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Ungültige GEOS Geometrie!"
+msgstr "Geometriespalte:"
 
 #: ../vector/v.delaunay/main.c:88
 msgid ""
@@ -12692,56 +13561,56 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr "Mache äußere Ecken gerade"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Erzeuge keine Kappen an den Enden von Polylinien"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 msgid "Transfer categories and attributes"
 msgstr "Übertrage Kategorien und Attribute"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 #, fuzzy
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr "Beachte: In geographischen Koordinatensystem sind Distanzen in Grad"
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 "Wählen Sie entweder die Puffer distance/minordistance/angle oder eine "
 "Spalte, aber nicht beides"
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr "Die bufcol-Option benötigt einen gültigen Layer."
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr "Toleranz muss >= 0 sein."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Die Toleranz wurde auf %g zurückgesetzt"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 msgid "Illegal scale value"
 msgstr "Ungültiger Maßstabswert"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Toleranz in Karteneinheiten = %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Kann keine Daten der Tabelle <%s> selektieren"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
@@ -12749,12 +13618,12 @@ msgstr ""
 "Keine Objekte zum Puffern vorhanden. Überprüfen Sie die Option type und die "
 "Objekte in der Eingabe-Vektorkarte."
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
@@ -12762,69 +13631,69 @@ msgstr ""
 "Negative Distanzen für interne Puffer sind nicht erlaubt und werden in "
 "positive Werte umgewandelt."
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Puffere Flächen..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Attribut hat ungültige Größe (%.3f) für Kategorie %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Toleranz in Karteneinheiten: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 msgid "Buffering features..."
 msgstr "Puffere Objekte..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr "Negative Distanzen sind nur für Flächen erlaubt"
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 msgid "Cleaning buffers..."
 msgstr "Säubere Puffer..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Erstelle Teile der Topologie..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "Fange Grenzen..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr "Teile Polygone..."
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Breche Grenzen auf..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr "Säubere Grenzen an den Knoten"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 msgid "Calculating centroids for all areas..."
 msgstr "Berechne Zentroide für alle Flächen..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Erstelle der zu löschenden Grenzen..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr "Lösche Grenzen..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr "Berechne Zentroide der Flächen..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Kann keinen Zentroid für die Fläche %d berechnen."
@@ -13109,18 +13978,18 @@ msgstr "Name der Ausgabedatei"
 msgid "%d features written to '%s'."
 msgstr "%d Objekte geschrieben nach '%s'."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Location: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "Allokiere Teilnetze für das nächste Zentrum (Richtung vom Zentrum)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
@@ -13129,22 +13998,31 @@ msgstr ""
 "Zentraler Knoten muss geöffnet sein (Kosten >= 0). Kosten des zentralen "
 "Knoten gehen im die Berechnung mit ein."
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Zahl der Zentren: [%d] (nlayer: [%d])."
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 #, fuzzy
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 "Nicht genügend Zentren für den gewählten nlayer. Nichts wird zugewiesen."
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Berechne die Kosten von den Zentren ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Berechne die Kosten von den Zentren ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13202,7 +14080,7 @@ msgstr "%s=%s - Ungültige Anzahl von Interpolationspunkten."
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13893,7 +14771,7 @@ msgstr "Keine Datensätze in der LR-Tabelle."
 msgid "More than one record in LR table"
 msgstr "Mehr als ein Datensatz in der LR-Tabelle."
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14197,31 +15075,42 @@ msgstr ""
 "%d Grenzen wurden nicht geputzt, weil das Putzen die Topologie beschädigt "
 "hätte."
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Gebe Vektorattribute aus."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+"Ziel-WHERE Bedingungen des SQL-Ausdrucks ohne das Schlüsselwort 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Vertikales Trennzeichen für die Ausgabe."
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 "Gebe anstelle der Attribute die minimale Ausdehnung der Region der "
 "selektierten Vektorobjekte aus."
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 msgid "Region"
 msgstr "Region"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Füllt die Datenbank mit Werten der Vektor-Feature."
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
@@ -14230,16 +15119,16 @@ msgstr ""
 "Kann die Vektorkarte <%s> nicht im topologischen Modus öffnen. Schalter '%c' "
 "benötigt aber den topologischen Modus."
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Kann den Select-Cursor nicht öffnen."
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Kann die 'Bounding Box' der Fläche %d nicht bekommen."
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Kann die 'Bounding Box' der Linie %d nicht bekommen."
@@ -14277,46 +15166,50 @@ msgstr "Maximale Anzahl der Vertices auf einem Segment"
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Schreibe Vertices der Linien."
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Der Glättungswert muß positiv sein."
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, c-format
 msgid "Unknown unit %s"
 msgstr "Unbekannte Einheit %s"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Kann die Projektionseinheit der Eingabekarte nicht ermitteln."
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, c-format
 msgid "Length in map units: %g"
 msgstr "Länge in Karteneinheiten: %g"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, c-format
 msgid "Length in meters: %g"
 msgstr "Länge in Meter: %g"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Anzahl der Klassen muss < 256 sein."
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -14437,7 +15330,9 @@ msgstr "Rotationswinkel (in Grad gegen den Uhrzeigersinn)."
 msgid "Number of vertex points per grid cell"
 msgstr "Anzahl der horizontalen Vertexpunkte pro Gridzelle."
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Ziel-Vektortyp"
@@ -14537,10 +15432,13 @@ msgid "Writing out vector columns..."
 msgstr "Schreibe Vektor Spalten ..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -14551,6 +15449,7 @@ msgstr "Algebra"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14708,8 +15607,9 @@ msgstr "Platzierung"
 msgid "Offset label in y-direction"
 msgstr "Label-Versatz in Y-Richtung."
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Schriftname"
 
@@ -14784,6 +15684,130 @@ msgstr "Finde Quadrate..."
 msgid "Counting points quadrats..."
 msgstr "Zähle Sites in den Quadraten..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Punkt Klassifikation."
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Keine Datenpunkte gefunden."
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Integer-Werte wurden importiert."
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Integer-Werte wurden importiert."
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> Ungültige Anzahl von Punkten."
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Maximaler Toleranzwert"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Anzahl der horizontalen Vertexpunkte pro Gridzelle."
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Anzahl der horizontalen Vertexpunkte pro Gridzelle."
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Standardabweichung"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14798,28 +15822,28 @@ msgstr "Ziel-Information für die Gruppe <%s> fehlt."
 msgid "Target location <%s> not found"
 msgstr "Ziel-Location <%s> nicht gefunden."
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Mapset <%s> in Ziel-Location <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "Zugang verweigert."
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "nicht gefunden"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "Bitte führen Sie i.target für die Gruppe aus."
 
@@ -15173,11 +16197,6 @@ msgstr "Berechne Geometriedistanzen an Stelle der Tabellenwerte."
 msgid " Database connection not defined for layer <%s>"
 msgstr "Datenbankverbindung ist für den Layer <%s> nicht definiert."
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Spaltentyp nicht unterstützt."
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "Kann das key/value array nicht sortieren."
@@ -15265,16 +16284,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d Einträge aktualisiert."
 msgstr[1] "%d Einträge aktualisiert."
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Konvertiere OGR Vektorlayer in das GRASS Vektorkarten."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "Name der OGR Datenquelle"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Zu importierende Rasterdatei."
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15284,14 +16305,14 @@ msgstr ""
 "\t\tESRI Shapefile: Verzeichnis, welches die Shapefiles beinhaltet.\n"
 "\t\tMapInfo Datei: Verzeichnis, welches die MapInfo-Dateien enthält."
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 "Name des OGR-Layers. Wenn nicht spezifiziert, werden alle verfügbaren Layer "
 "importiert."
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15301,52 +16322,52 @@ msgstr ""
 " \t\tESRI Shapefile: Name des Shapefiles\n"
 "\t\tMapInfo Datei: Mapinfo-Dateiname."
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Kleinste zu importierende Fläche (in Flächeneinheiten)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 "Kleinere Flächen und Inseln werden ignoriert. Sollte größer sein als snap^2."
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "Optionalerweise: Ändere den Standard Input-Typ."
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Keine aktiven Kontrollpunkte."
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Säubere Grenzen an den Knoten"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Erstellt Poly-Linien aus Linien und Grenzen"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Entferne doppelte Zentroide"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Fangtoleranz für Grenzen"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' für kein Fangen"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15354,188 +16375,190 @@ msgstr ""
 "Zeige sie Spaltennamen die anstatt der Originalnamen verwendet werden. Der "
 "Erste entspricht der Kategoriespalte."
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Fehler beim Lesen des Wertes des Attributes '%s'."
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Name der Spalte mit Raster-Kategorie-Beschriftungen."
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Spaltenname der Degree-Zentralität"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Wenn nicht angegeben wird der Name der Eingabekarte verwendet."
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Zeige unterstützte Formate an und Schluß."
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Zeigt die vorhandenen Layer in der Datenquelle und beendet sich."
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Polygone nicht säubern (clean) (nicht empfehlenswert)."
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Erzwinge Ausgabe von Integer-Werten."
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Kann die Projektionseinheit der aktuellen Location nicht ermitteln."
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Gibt derzeitige Verbindungsparameter aus und beendet sich."
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr "Aktualisiere die Standard-Region auch wenn im Mapset PERMANENT."
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Ändere Spaltenname zu Kleinbuchstaben"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Kann die Datenquelle <%s> nicht öffnen."
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Cursor-Position wird nicht von MySQL unterstützt."
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "Datenquelle enthält %d Layer:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Layer <%s> ist nicht vorhanden."
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Kann die Layer-Informationen der Vektorkarte <%s> nicht bekommen"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Spalte <%s> in der Tabelle <%s>nicht gefunden."
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Distanz der Grenz-Aufteilung in Karteneinheiten: %G"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Verwende die temporäre Vektorkarte <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, c-format
 msgid "Key column '%s' not found"
 msgstr "Schlüsselspalte '%s' nicht gefunden."
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Schlüssel-Spalte (key column) ist nicht muss vom Typ integer."
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Spalte <%s> in der Tabelle <%s>nicht gefunden."
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 "Schreibe Spalte <%s> mit einer festen Länge von %d Zeichen (Es könnte etwas "
 "abgeschnitten worden sein). "
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 "Schreibe Spalte <%s> mit einer festen Länge von %d Zeichen (Es könnte etwas "
 "abgeschnitten worden sein). "
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15544,57 +16567,57 @@ msgstr ""
 "Breite für die Spalte %s wird auf 255 gesetzt (wurde nicht von OGR "
 "bestimmt). Einige Texte können abgeschnitten worden sein!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 "Schreibe Spalte %s mit einer festen Länge von %d Zeichen (Es könnte etwas "
 "abgeschnitten worden sein). "
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Spaltentyp (%s) wird nicht unterstützt."
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Importiere %d Objekte der Karte..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s ohne Geometrie."
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 msgid "Cleaning polygons"
 msgstr "Säubere Polygone..."
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Fange Grenzen (Schwellwert = %.3e):"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 msgid "Merging boundaries..."
 msgstr "Vereinige Grenzen..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Ändere Grenzüberstände zu Linien:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Ändere Brücken der Grenzen zu Linien:"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Finde Zentroide der Layer: %s"
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15606,115 +16629,115 @@ msgstr ""
 "der Attributtabelle verlinkt. Die Anzahl der Objekte für diese Flächen ist "
 "als Kategoriewert im Layer %d abgelegt."
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr "%d Eingabepolygone\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d Eingabepolygone"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Gesamtfläche: %G (%d Flächen)\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Gesamtfläche: %G (%d Flächen)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Überlappende Fläche: %G (%d Flächen)\n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Überlappende Fläche: %G (%d Flächen)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Fläche ohne Kategorie: %G (%d Flächen)\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Fläche ohne Kategorie: %G (%d Flächen)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 "Versuchen Sie den Import nochmals, Fangtoleranz mindestens %g: 'snap=%g'"
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr "Versuchen Sie den Import nochmals, Fangtoleranz %g: 'snap=%g'"
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, fuzzy, c-format
 msgid "%d additional areas where created during import."
 msgstr "Es sind während des Imports Fehler aufgetreten"
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Fangtoleranz für Grenzen"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 msgid "Import failed"
 msgstr "Import fehlgeschlagen"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Kann die Tabelle <%s> nicht löschen."
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr " Standard-Region für die Location aktualisiert."
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr "Region des aktuellen Mapsets aktualisiert."
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15934,6 +16957,11 @@ msgstr ""
 "Datenbankverbindung für Layer %d nicht definiert. Verwenden Sie zuerst v.db."
 "connect."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Farbtabelle der Rasterkarte <%s> nicht gefunden."
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16091,7 +17119,7 @@ msgstr "Die 'azimuth' -Option macht nur Sinn für Linien."
 msgid "Querying database... "
 msgstr "Frage die Datenbank ab..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
@@ -16101,13 +17129,13 @@ msgstr ""
 "viele (%d) Kategorien in der Abfrage sind. Alle im Folgenden berichteten "
 "Werte für cat 0 sind nicht korrekt. "
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 "Mehrere Abfrage-Ergebnisse, Ausgabewert auf NULL gesetzt (Kategorie [%d])."
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "Kann den Datensatz nicht holen."
 
@@ -16305,14 +17333,14 @@ msgstr ""
 "Punkte."
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Die Rasterkarte <%s> existiert bereits und wird überschrieben"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Die Rasterkarte <%s> existiert bereits."
@@ -16451,14 +17479,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Weise neuen Punkten eindeutige Kategorien zu."
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Erzeugt Linien parallel zu den Eingabevektorlinien."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "%d Linien oder Grenzen in der Vektorkarte <%s@%s> gefunden."
 msgstr[1] "%d Linien oder Grenzen in der Vektorkarte <%s@%s> gefunden."
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16974,19 +18007,24 @@ msgstr "Ungültiger Zeitstempel."
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17000,6 +18038,7 @@ msgstr "Ungültiger Zeitstempel."
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17012,7 +18051,7 @@ msgstr "Ungültiger Zeitstempel."
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17172,6 +18211,7 @@ msgid "Unable to map image file"
 msgstr "Kann die Bilddatei nicht kartieren."
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17189,14 +18229,14 @@ msgstr "Kann die Bilddatei nicht kartieren."
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17234,6 +18274,59 @@ msgstr "Kann keine zufriedenstellenden Farben finden."
 msgid "Using private colormap for DirectColor visual."
 msgstr "Benutze private Farbtabelle für DirectColor Visualisierung."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Zeigt einen Maßstabsbalken im Grafikfenster an."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Liste aller Grafikfenster."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Erzeuge das Mapset, wenn es nicht existiert."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Entferne alle Frames und lösche den Inhalt des Grafikfensters."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Gebe den aktuellen Mapset Suchpfad aus."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Gib den Namen des momentan selektierten Grafikfensters aus."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+#, fuzzy
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr "Präfix wo Erweiterungen installiert werden"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+"Größe und Platzierung als Prozentsatz der Bildschirmkoordinaten (0,0 ist "
+"links unten)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17254,7 +18347,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17267,7 +18360,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17346,18 +18439,23 @@ msgstr ""
 "Attributtabelle."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17372,6 +18470,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17472,6 +18571,93 @@ msgstr "Anteil der ersten Karte in der Mischung in Prozent."
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Konvertiert 3D-Rasterkarten in 2D-Rasterkarten."
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Liste die Vektorkarten der Eingabe-Location und beendet sich."
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Name der 3D Eingabe-Rasterkarte."
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Anzahl der zu bestimmenden Klassen"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Eingabe-Rasterkarten"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -17607,7 +18793,7 @@ msgstr "Erzeugt eine leere Datenbank."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17621,8 +18807,8 @@ msgid "rename"
 msgstr "Name"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17631,9 +18817,9 @@ msgid "input"
 msgstr "Eingabe"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17647,6 +18833,78 @@ msgstr "Benötigt"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Baut die Topologie aller Vektorkarten im aktuellen Mapset neu auf."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Erzeugt eine Vektorkarte mit bestimmten Kontourlinien aus einer Rasterkarte."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Kontrast"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Abstand zwischen der kontour-Intervallen."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Anzahl der Kontour-Level"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Minimales Kontur-Level"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Maximales Kontur-Level"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Minimale Anzahl der Punkte für eine Kontour-Linie (0 -> kein Limit)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Eingabe-Rasterkarten"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Keine Attributtabelle erzeugen."
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17655,7 +18913,7 @@ msgstr "Liste die Vektorkarten der Eingabe-Location und beendet sich."
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17714,8 +18972,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17825,74 +19084,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Name der 3D Eingabe-Rasterkarte."
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Name der Rasterkarte mit Klassifikationsergebnissen."
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Name der Rasterkarte mit Klassifikationsergebnissen."
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17927,47 +19155,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Name der neuen Datenbank."
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Namen einer oder mehrerer Eingabe-Rasterkarten."
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Anzahl der zu bestimmenden Klassen"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Eingabe-Rasterkarten"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18070,8 +19281,8 @@ msgstr "multispektral"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Name der Ausgabedatei"
+msgid "Name for output image (or text file for -t)"
+msgstr "Name der Ausgabedatei (ohne Dateiendung)."
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18088,6 +19299,53 @@ msgstr "Beschrifte mit Koordinaten anstelle der Nummerierung."
 msgid "Use gnuplot for display"
 msgstr "Darzustellender Text"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Ausgabe-Worldfile"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Kommagetrennte Werteliste."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Name der Ausgabedatei zum Speichern des Reports."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Erzeugt eine leere Datenbank."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Anzahl der zu bestimmenden Klassen"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr "Ausgabe der Kopfzeile."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18119,31 +19377,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Vergrößere die Location basierend auf dem neuen Datensatz."
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr "Übersteuere die Projektionsprüfung (verwende Projektion der Location)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Kann die Projektionseinheit der aktuellen Location nicht ermitteln."
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18333,6 +19570,20 @@ msgstr "Anzahl Zellen, die die Kacheln in alle Richtungen überlappen sollen."
 msgid "Output field separator"
 msgstr "Ausgabe Feld-Trennzeichen"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Konvertiert 3D-Rasterkarten in 2D-Rasterkarten."
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Liste die Vektorkarten der Eingabe-Location und beendet sich."
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Zeigt eine eine Rasterkarte und die Legende im Grafikfenster an."
@@ -18433,8 +19684,15 @@ msgstr "Erzeugt eine leere Datenbank."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Name der neuen Datenbank."
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "Allgemein, Kartenverwaltung"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Name einer existierenden Rasterkarte."
@@ -18447,7 +19705,7 @@ msgstr ""
 "Karten."
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18456,15 +19714,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Name der neuen Datenbank."
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18513,7 +19771,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Speichert den Inhalte des aktiven Grafikfensters in einer Grafikdatei."
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Name der Ausgabedatei"
 
@@ -18591,16 +19849,28 @@ msgstr "Name der Eingabe-Paket-Datei"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Name der Ausgabe-Rasterkarte (Standard: abgleitet aus dem Paket)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+#, fuzzy
+msgid "Spatio-temporal mapcalc expression"
+msgstr "Berechne eine neue Rasterkarte mit einem r.mapcalc-Ausdruck. "
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Konvertiert 3D-Rasterkarten in 2D-Rasterkarten."
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 msgid "inputs"
 msgstr "Eingaben"
@@ -18676,12 +19946,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18740,7 +20017,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Name der Bedeckungs-Rasterkarte"
+msgstr "Name der zweiten Rasterkarte."
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18814,17 +20091,15 @@ msgstr ""
 "Wert mit dem die Spalte aktualisiert werden soll (varchar-Werte müssen in "
 "einfachen Anführungszeichen angegeben werden, z.B. 'grass')."
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 #, fuzzy
 msgid "Redraws the content of currently selected monitor."
 msgstr "Gib den Namen des momentan selektierten Grafikfensters aus."
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Liste aller Grafikfenster."
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18835,13 +20110,13 @@ msgstr ""
 "univariater Statistik."
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 "Lese Eingabedatei um die räumliche Ausdehnung zu bestimmen und beendet sich."
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "Im Lesemodus Ausgabe im Shell-Skript-Stil."
 
@@ -18856,7 +20131,7 @@ msgid "ASCII file containing input data"
 msgstr "ASCII-Datei mit Eingabedaten (oder \"-\" um von stdin zu lesen)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Statistik um Rasterwert zu bestimmen"
 
@@ -18864,14 +20139,14 @@ msgstr "Statistik um Rasterwert zu bestimmen"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Statistik"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Speichertyp der resultierenden Rasterkarte."
 
@@ -18912,17 +20187,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Skalierfaktor für die Werte der Attributspalte"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Prozentteil der Karte, der im Speicher gehalten werden soll."
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "Perzentil der Werte"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18966,19 +20241,15 @@ msgid ""
 "on the fly."
 msgstr "Konvertiere OGR Vektorlayer in das GRASS Vektorkarten."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Zu importierende Rasterdatei."
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Ausgabe-Vektorkarte, in die die Fehlern geschrieben werden."
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Gleiche die aktuelle Region an die Eingabekarte an."
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19072,7 +20343,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19161,24 +20432,18 @@ msgstr "Liste die Vektorkarten der Eingabe-Location und beendet sich."
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Anzahl der zu bestimmenden Klassen"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Name der Expositions-Rasterkarte."
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Eingabe-Rasterkarten"
@@ -19296,17 +20561,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Anzahl der Interpolationspunkte."
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19314,11 +20583,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Liste die Vektorkarten der Eingabe-Location und beendet sich."
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-#, fuzzy
-msgid "Spatio-temporal mapcalc expression"
-msgstr "Berechne eine neue Rasterkarte mit einem r.mapcalc-Ausdruck. "
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19442,86 +20706,103 @@ msgstr ""
 "Werkzeug um GRASS-Erweiterungen in lokaler GRASS-Installation zu verwalten."
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
+#, fuzzy
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 "Download und Installation von Erweiterungen aus dem 'GRASS Addons SVN "
 "Repository' in der lokalen GRASS Installation oder Entfernt installierte "
 "Erweiterungen. "
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Name der zu installierenden/entfernenden Erweiterung"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 #, fuzzy
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr "Präfix wo Erweiterungen installiert werden"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
-msgstr "URL des SVN Addons Repository"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
+msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 #, fuzzy
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr "Präfix wo Erweiterungen installiert werden"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Zeige die im GRASS Addons Repository vorhandenen Module"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Zeigt die vorhandenen Regelsätze und Schluß."
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Zeigt die vorhandenen Regelsätze und Schluß."
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 #, fuzzy
 msgid "List locally installed extensions"
 msgstr "Präfix wo Erweiterungen installiert werden"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 "Systemweite Installation (eventuell Systemadministratorrechte erforderlich)."
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "Histogram Equalization (histogrammbasierte nichtlinearen Streckung)"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Systemtabellen anstatt Benutzertabellen."
@@ -19642,10 +20923,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr "Berechne eine neue Rasterkarte mit einem r.mapcalc-Ausdruck. "
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19704,6 +20981,60 @@ msgstr ""
 msgid "Test name"
 msgstr "Testname"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Konvertiert 3D-Rasterkarten in 2D-Rasterkarten."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Name der Attribut-Spalte die für die Label benutzt werden soll."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Glättet Ecken flächenhafter Objekte"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Verschiebewert für Z-Koordinaten"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Schreibe Rasterwerte als Z-Koordinate. Attributtabelle wird nicht erzeugt. "
+"Derzeit werden nur Punkte unterstützt."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Erzeuge keine Topologie."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Benutze Rasterzellenwerte als Kategoriewerte anstelle von eindeutigen "
+"Sequenzen (nur bei CELL-Karten)."
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19777,6 +21108,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Diagrammtyp"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Der Schalter '-z' wird nur für Punkte unterstützt."
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19948,20 +21290,26 @@ msgid "Description of the space time dataset"
 msgstr "Name der neuen Datenbank."
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Name der neuen Datenbank."
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20005,12 +21353,12 @@ msgstr "Tasseled Cap (Kauth Thomas) Transformation für LANDSAT-TM Daten."
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr "Landsat"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20095,7 +21443,7 @@ msgstr "Liste die Vektorkarten der Eingabe-Location und beendet sich."
 msgid "Neighborhood size"
 msgstr "Nachbarschaftsgröße"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Anzahl der Interpolationspunkte."
@@ -20200,24 +21548,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Auflösung der Ausgabe-Karte"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Titel der resultierenden Rasterkarte. "
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadaten"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Feine Auflösung"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "optionale Ansichts-Rasterkarte"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Führe kein Optimierung der Region durch."
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Passe Lat/Lon-Karten in geographische Koordinaten (90N,S; 180E,W) ein."
 
@@ -20280,17 +21645,36 @@ msgstr "Alter und neuer Name der Spalte (alt,neu)."
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "Schreibt den Vektorwert an der Stelle der Vektorpunkte in die Tabelle."
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr "Spalte"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Name der zu editierenden Vektorkarte"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Spalte"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Name der Attribut-Spalte die für die Label benutzt werden soll."
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr "Maximale Abfragedistanz in Karteneinheiten."
 
@@ -20379,6 +21763,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20392,11 +21777,15 @@ msgid "Sill value"
 msgstr "%s: ungültiger Wert."
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20508,28 +21897,23 @@ msgid ""
 msgstr ""
 "Berechnet univariate Statistiken der nicht-NULL Zellen einer Rasterkarte."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "Sites"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Erzeugt eine leere Datenbank."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Konvertiert 3D-Rasterkarten in 2D-Rasterkarten."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Reiche NULLs durch"
 
@@ -20570,7 +21954,7 @@ msgstr ""
 "Flächen."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20583,7 +21967,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Radius des Puffers in Rasterzellen"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metrisch"
 
@@ -20603,12 +21987,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Konvertiert 3D-Rasterkarten in 2D-Rasterkarten."
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Anzahl der Interpolationspunkte."
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20634,7 +22018,7 @@ msgstr ""
 "Fülle Flächen ohne Daten in Rasterkarten mit Hilfe von Spline-Interpolation."
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20662,6 +22046,17 @@ msgstr "Spline-Glättungs-(smooth) Parameter"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "Zeit verwendet für die Iterationen [Minuten]"
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+"Bikubische oder bilineare Spline-Interpolation mit Tykhonov-Regularisierung."
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Location: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 msgid "Joins a database table to a vector map table."
 msgstr "Verbindet Datenbanktabelle mit der Attributtabelle einer Vektorkarte."
@@ -20670,18 +22065,10 @@ msgstr "Verbindet Datenbanktabelle mit der Attributtabelle einer Vektorkarte."
 msgid "Vector map to which to join other table"
 msgstr "Vektorkarte, an die eine andere Tabelle gejoined werden soll."
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr "Layer, in dem 'gejoined' werden soll."
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr "Spalte"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20709,17 +22096,17 @@ msgstr "Anzahl Spalten, die in der Farbtabelle erscheinen sollen"
 msgid "Imports space time raster dataset."
 msgstr "Aktualisiere die Statistik der Rasterkarte."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Gleiche die aktuelle Region an die Eingabekarte an."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Link zur Rasterkarte <%s> erzeugt"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20796,14 +22183,17 @@ msgstr "3D-Rasterkarte <%s> nicht gefunden."
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20834,11 +22224,11 @@ msgstr "Kann keinen Speicher für Zeichenkette reservieren."
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Kann den Wertebereich der 3D-Rasterkarte <%s> nicht lesen."
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Fehler beim Lesen der 'history'-Datei."
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20846,8 +22236,8 @@ msgstr "Kann die 3D-Rasterkarte <%s> nicht schließen."
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Fehler beim Schreiben der Daten."
 
@@ -20899,6 +22289,7 @@ msgstr "Integer Ausgabe unterstützt nicht bytes=8 in diesem Build"
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Kann die Datei <%s> nicht erzeugen."
@@ -21061,9 +22452,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Art des Grundwasserflusses "
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21094,7 +22486,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Kann das lineare Gleichungssystem nicht erzeugen und lösen."
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Kann die 3D-Rasterkarte <%s> nicht erzeugen."
@@ -21161,6 +22556,143 @@ msgid ""
 msgstr ""
 "Rasterkarte %i Dateiname: %s existiert bereits. Sie wird überschrieben!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Kosten für Isolinien."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Bitte geben Sie drei RGB 3D-Rasterkarten an."
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Vektorkarte <%s> nicht gefunden."
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Berechne Flußrichtungen..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr ""
+"Name der Vektorpunktekarte, dessen Attributtabelle editiert werden soll. "
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Name der zu editierenden Vektorkarte"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Name der Ausgabe-Expositions-Rasterkarte."
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Name der 3D-Rasterkarte(n) mit Glanzwerten"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "Länge in Karteneinheiten: %g"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Anzahl der Iterationen"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Standard ist die Rasterzellenbreite."
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "Interpolationsmethode."
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Keine Rasterkarte ausgewählt"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Standard-Datenbank ist nicht angegeben."
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Maximale Zahl der Iterationen."
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Maximale Zahl der Iterationen."
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Anzahl der Zellen zwischen Fließlinien."
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Kann Tabelle <%s> nicht beschreiben."
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Fehler beim Lesen der Daten"
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr "Erzeugt Volumenstatistiken für 3D-Rasterkarten."
@@ -21293,11 +22825,11 @@ msgstr "Kann die ASCII-Datei nicht schließen."
 msgid "3D raster map for which to modify null values"
 msgstr "3D-Rasterkarte, deren NULL-Werte geändert werden sollen"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Liste von Werten, die auf NULL gesetzt werden sollen."
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Wert, der den NULL-Werte ersetzen soll."
 
@@ -21321,7 +22853,7 @@ msgstr "modifyNull: error flushing all tiles"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: Kann temporären Datei nicht schließen."
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "Raster, NULL-Werte"
@@ -21330,6 +22862,84 @@ msgstr "Raster, NULL-Werte"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Erstelle explizit ein 3D NULL-Wert Bitmap Datei."
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "Raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Erzeugt eine Rasterkarte aus einer Vielzahl von Koordinaten unter Verwendung "
+"univariater Statistik."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Indiziere die Punkte nicht mittels der Rasterzellen."
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Anzahl der horizontalen Vertexpunkte pro Gridzelle."
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "3D-Rasterkarte <%s> nicht gefunden."
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Schreibe Karte raus..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "3D-Rasterkarte, deren NULL-Werte geändert werden sollen"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Verschiebewert für Z-Koordinaten"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "Vektor, Transformation"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Kann die temporäre Datei nicht erzeugen."
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21385,13 +22995,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Spanne der Ausgabedaten."
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Kann die Kategorie-Datei der Rasterkarte <%s@%s> nicht lesen."
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "cats Tabelle für [%s] ist auf %s gesetzt."
@@ -21445,7 +23055,7 @@ msgstr "Fehler beim Lesen der Daten"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Lade Daten ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Fehler beim Schließen der G3D-Datei."
@@ -21829,7 +23439,7 @@ msgstr ""
 "Falsche Werte in der 3D-Rasterkarte! Werte sollten zwischen 0 und 255 "
 "liegen!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21839,7 +23449,7 @@ msgstr "Unbekannte Methode <%s>."
 msgid "Aggregate operation"
 msgstr "Aggregationsverfahren"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr "Quantile für method=quantile"
@@ -21874,6 +23484,40 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Kann keinen Speicher reservieren."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Gradient"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+"Kombiniert rote, grüne und blaue Rasterkarten zu einer zusammengesetzten "
+"Rasterkarte."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Name der Ausgabe-Rasterkarte(n)."
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Größe des Punkt-Caches."
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Kann keinen Speicher reservieren."
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Schreibe neue Rasterkarte..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22215,38 +23859,38 @@ msgstr "Gebe Info im Shell-Skript-Style aus (inklusive SVN Revisionsnummer)"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22544,13 +24188,13 @@ msgid "Unknown operation '%s'"
 msgstr "Unbekannte Operater"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr " ignoriert\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Option <%s> erforderlich."
@@ -22621,9 +24265,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: Dateien sind identisch, kein Kopieren nötig."
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> existiert bereits"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> existiert bereits im Mapset <%s>."
 
 #: ../general/g.proj/datumtrans.c:47
 #, c-format
@@ -22740,8 +24384,8 @@ msgstr ""
 "Erzwinge das Übersteuern der Datumtransformationsinformation des Eingabe "
 "Koordinatensystems."
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr "Modifizieren"
 
@@ -23011,9 +24655,9 @@ msgstr "Liste der zu importierenden Layer."
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "Muster"
 
@@ -23027,15 +24671,15 @@ msgstr "Suchmuster für Kartennamen (Standard: alle)."
 msgid "File name exclusion pattern (default: none)"
 msgstr "Suchmuster für den Ausschluss von Kartennamen (Standard: nichts)."
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "Verwende einfache reguläre Ausdrücke an Stelle von wildcards."
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "Verwende erweiterte reguläre Ausdrücke an Stelle von wildcards."
 
@@ -23045,7 +24689,7 @@ msgid "Remove base raster maps"
 msgstr "Entferne Basiskarten"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Kann die Datei <%s> nicht öffnen."
@@ -23097,7 +24741,7 @@ msgstr "Benennt Karten im aktuellen Mapset um."
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
@@ -23105,73 +24749,63 @@ msgstr ""
 "Liste vorhandene GRASS Datenbank-Dateien eines vom Nutzer bestimmten "
 "Datentyps und verwende optional ein Suchmuster."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "Suchmuster für Kartennamen (Standard: alle)."
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "Suchmuster für den Ausschluss von Kartennamen (Standard: nichts)."
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Aufzulistendes Mapset (Standard: aktueller Suchpfad)."
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 #, fuzzy
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 "Erzeuge optional ein neues Mapset oder liste die verfügbaren Mapsets in der "
 "Location auf."
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Name des Mapsets (Standard: das aktuelle)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Übernehme Einstellungen von einer benannten Region."
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "Gebe Datentypen aus."
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr "Gebe vollqualifizierte Kartennamen aus (inkl. Mapset)."
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "Schöne Ausgabe in menschenlesbaren Format."
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "Ausführliche Ausgabe (liste ebenfalls Kartentitel)."
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "-s und -n schließen sich gegenseitig aus."
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "-s und -n schließen sich gegenseitig aus."
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Gruppe <%s> existiert nicht."
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Kann den Header der 3D-Rasterkarte <%s@%s> nicht lesen."
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Kann Vektorkarte <%s> auf der topologischen Ebene %d nicht öffnen"
@@ -23383,46 +25017,46 @@ msgstr ""
 "Kann die Standard-Region nicht ändern. Das aktuelle Mapset ist nicht "
 "<PERMANENT>."
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Ungültige Eingabe <%s=%s>."
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 "Kann die Projektionsinformation der aktuellen Location nicht ermitteln."
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Kann die Projektionseinheit der aktuellen Location nicht ermitteln."
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Kann lat/long Projektions Parameter nicht aktualisieren."
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Fehler in pj_do_proj (Projektion des Eingabekoordinatenpaars)."
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 "Sie sind bereits in Lat/Long. Verwenden Sie den Schalter -p statt dessen."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
@@ -23430,7 +25064,7 @@ msgstr ""
 "Sie befinden sich in einer einfachen XY-Location. Umprojezieren nach Lat/Lon "
 "ist nicht möglich.Verwenden Sie statt dessen den Schalter -p)."
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23438,7 +25072,7 @@ msgstr ""
 "WGS84 Ausgabe nicht möglich, da diese Location keine "
 "Datumstransformationsparameter enthält. Versuchen Sie g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr "Lat/Long Berechnungen sind in einem einfachen XY-System nicht möglich."
 
@@ -23665,44 +25299,65 @@ msgid "command line interface with GUI startup screen"
 msgstr "Cell-Datei nicht gefunden."
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Zu importierende Rasterdatei."
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:78
 #, fuzzy
 msgid "Update default user interface settings"
 msgstr "Aktualisiert die Standard-GUI Einstellungen."
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 #, fuzzy
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 "Starten Sie das GUI nicht nachdem Sie die standard GUI-Einstellungen "
 "geändert haben."
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s> ist jetzt das Standard-GUI."
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
+#, fuzzy, c-format
+msgid "Launching <%s> GUI, please wait..."
+msgstr "Starte <%s> GUI im Hintergrund. Bitte warten Sie ..."
+
+#: ../general/g.gui/main.c:122
 #, c-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr "Starte <%s> GUI im Hintergrund. Bitte warten Sie ..."
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
-msgstr ""
-
 #: ../general/g.access/set_perms.c:26
 msgid "Unable to change mapset permissions"
 msgstr "Kann die Zugriffsrechte des Mapsets nicht ändern."
@@ -24011,10 +25666,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Mein erstes Vektormodul."
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "Kann das vorherbestimmte Vektoröffnungslevel nicht setzen."
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24186,7 +25837,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Prozent fertig..."
 
@@ -24610,7 +26261,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Kann die Projektionsinformationen der aktuellen Location nicht holen."
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24802,150 +26453,150 @@ msgstr "owres=%f"
 msgid "Writing new raster map..."
 msgstr "Schreibe neue Rasterkarte..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 "Reprojiziert eine Rasterkarte von einer Location in die aktuelle Location."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr "Location mit der Eingaberasterkarte"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr "Mapset mit der Eingaberasterkarte"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Name der Eingabe-Rasterkarte, die umprojeziert werden soll."
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Name der Ausgabe-Rasterkarte (Standard: input)."
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Auflösung der Ausgabe-Karte"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Listet alle Rasterkarten in der Eingabe-Location auf und beendet sich."
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr ""
 "Gibt die Grenzen der Eingabekarte in der aktuellen Projektion aus und "
 "beendet sich."
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 "Gibt die Grenzen der Eingabekarte in der aktuellen Projektion im Shellskript-"
 "Format aus und beendet sich."
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr "Eingabe- und Ausgabe-Location sind identisch."
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 "Kann die Projektionsinformation der Ausgabe-Rasterkarte nicht ermitteln."
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "Kann die Projektionseinheit der Ausgabe-Rasterkarte nicht ermitteln."
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 "Kann die Kennzahlen der Projektion der Ausgabe-Rasterkarte nicht ermitteln."
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Mapset <%s> in Eingabe-Location <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Rasterkarte <%s> in der Location <%s> im Mapset <%s> nicht gefunden."
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "Kann die Projektionsinformation der Eingabekarte nicht ermitteln."
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "Kann die Projektionseinheit der Eingabekarte nicht ermitteln."
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "Kann die Kennzahlen der Projektion der Eingabekarte nicht ermitteln."
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Kann nicht mit unprojezierten Daten arbeiten (xy location)."
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "Eingabekarte <%s@%s> in Location <%s>:"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Eingabe:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Spalten: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Zeilen: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Norden: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Süden: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Westen: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Osten: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "EW-res: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "NS-res: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Ausgabe:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Projiziere... "
 
@@ -24999,12 +26650,6 @@ msgstr ""
 "Erlaubt das Erzeugen und/oder das Modifizieren von Rasterkarten-Support-"
 "Dateien."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Titel der resultierenden Rasterkarte. "
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Text für die Einheit der Daten der Karte."
@@ -25034,22 +26679,22 @@ msgstr "Kann die Signaturdatei nicht öffnen."
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Rasterkarte <%s> im aktuellen Mapset nicht gefunden."
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] ist eine reklassifizierte Karte einer anderen Karte. Beende mich."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Schreibe neue NULL-Datei für Karte [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Entferne NULL-Datei für [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Fertig."
 
@@ -25869,7 +27514,7 @@ msgstr "High (%d) muss größer als 1 sein."
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "[%s] konnte nicht gefunden werden!"
@@ -26079,8 +27724,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "Zwei Paare mit Kategoriemultiplikatoren und -versatz, für $1 und $2."
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Kann die Kategorie-Datei der Rasterkarte <%s@%s> nicht lesen."
@@ -26166,12 +27811,12 @@ msgstr "Kann Eingabe nicht von <%s> lesen."
 msgid "Can't get cell header"
 msgstr "Kann den Zellenheader nicht holen."
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "UPS: Die Zeilen haben sich von %d auf %d geändert."
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: Spalten haben sich von %d auf %d verändert."
@@ -26370,10 +28015,6 @@ msgstr ""
 "Anzahl der Kopfzeilen, die am Anfang der Eingabedatei übersprungen werden "
 "soll (Punktmodus)."
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Filterbereich für z-Daten (min,max)."
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -26381,7 +28022,7 @@ msgstr "Filterbereich für z-Daten (min,max)."
 msgid "Advanced Input"
 msgstr "Fortgeschritten"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Skalierungsfaktor für die z-Daten."
 
@@ -26409,7 +28050,7 @@ msgstr "Skalierungsfaktor für die z-Daten."
 msgid "Please specify a reasonable column number."
 msgstr "Bitte geben Sie eine sinnvolle Spaltenummer an."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "Ungültige z-Spanne."
 
@@ -26418,15 +28059,15 @@ msgstr "Ungültige z-Spanne."
 msgid "Invalid vrange"
 msgstr "Ungültige z-Spanne."
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "Kann das Perzentil nicht berechnen ohne die Angabe von pth!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "Kann keinen getrimmten Mittelwert (trimmean) ohne Angabe von trim!"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26451,7 +28092,7 @@ msgid "Reading input data..."
 msgstr "Lese Eingaben..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Durchlauf %d (von %d) ..."
@@ -26497,16 +28138,16 @@ msgstr "Schlechte Y-Koordinate in Zeile %lu Spalte %d. <%s>"
 msgid "Writing to output raster map..."
 msgstr "Schreibe Ausgabe-Rasterkarten..."
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "%lu Punkte in der Region gefunden."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Lese Daten ..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Bereich:     min         max\n"
@@ -26673,11 +28314,6 @@ msgstr ""
 "GIS Format, dass ausgegeben werden soll (Gross- und Kleinschreibung "
 "beachten, siehe auch den Schalter -l)."
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Diagrammtyp"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "Erstellungs-Optionen für den Ausgabeformat-Treiber."
@@ -27242,45 +28878,52 @@ msgstr "Illegale Y-Koordinate <%s>."
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Warnung: Ignoriere Punkte außerhalb des Fensters: %4f,%4f."
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Verwaltet NULL-Werte einer Rasterkarte."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "3D-Rasterkarte, deren NULL-Werte modifiziert werden sollen."
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Nur ausführen, wenn die Karte Fließkommawerte enthält."
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "Prüfen"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Nur ausführen, wenn die Karte ganze Zahlen enthält."
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 "Nur ausführen, wenn für die Karte noch keine NULL-Wert Bitmap Datei "
 "existiert."
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 "Erzeuge eine NULL-Wert Bitmap Datei, die alle Daten-Zellen für gültig "
 "erklärt."
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "Entferne NULL-Wert Bitmap-Datei."
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+"Erzeuge eine NULL-Wert Bitmap Datei, die alle Daten-Zellen für gültig "
+"erklärt."
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
@@ -27290,62 +28933,63 @@ msgstr ""
 "Bedenken Sie, dass es sinnvoll sein könnte eine Kopie mit r.mapcalc zu "
 "erzeugen. Beende mich."
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Rasterkarte <%s> befindet sich nicht in Ihrem Mapset <%s>."
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "%s ist ein ungültiger Wert für NULL."
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Die Rasterkarte <%s> hat bereits eine NULL-Datei."
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> ist eine integer Rasterkarte (CELL)."
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> ist eine integer Rasterkarte (CELL). Verwende null=%d."
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> ist eine Fließkomma-Rasterkarte."
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Schreibe neue NULL-Datei für Rasterkarte <%s>... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Rasterkarte <%s> geändert."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Entferne NULL-Datei der Rasterkarte <%s>..."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: ungültiger Wert angegeben."
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: ungültiger Wert."
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Schreibe neue Daten für die Rasterkarte <%s>..."
@@ -27674,7 +29318,7 @@ msgstr "Name der Eingabe-Datei; oder \"-\" um von stdin zu lesen."
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Ziel-Vektortyp"
+msgstr "Titel der Ausgabe-Rasterkarte."
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27756,86 +29400,178 @@ msgstr "Konvertiere ..."
 msgid "File <%s> created"
 msgstr "Datei <%s> erstellt."
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Erzeugt eine Rasterkarte aus einer Vielzahl von Koordinaten unter Verwendung "
 "univariater Statistik."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Datei die Regeln zum Umkodieren enthält."
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Filterbereich für z-Daten (min,max)."
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Skalierungsfaktor für die z-Daten."
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+"Verwerfe <trim> Prozent der kleinsten und <trim> Prozent der größsten "
+"Beobachtungen."
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Ausgabe-Rasterkarte erforderlich."
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Setze Region angepasst an diese Rasterkarte."
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Gruppe <%s> existiert nicht."
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "zrange wird im Lesemodus nicht berücksichtigt."
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Unbekannte Regeloption: '%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Ungültige Karte <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Option <%s> erforderlich."
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "Lese Daten..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Konnte die Ausgabedate <%s> nicht öffnen."
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Schreibe in die Karte ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu Punkte in der Region gefunden."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Kann die Datei '%s' nicht zum Lesen öffnen."
+
+#: ../raster/r.grow.distance/main.c:156
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Erzeugt eine Rasterkarte mit Distanzen zu nächsten Raster-Objekten."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Name der Distanz-Ausgabekarte."
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Name der Ausgabe-Rasterkarte."
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr "Ausgabedistanz in Meter und statt in Karteneinheiten"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Maximale Distanz zur nächsten Linie."
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "Entweder distance= oder value= muss angegeben werden."
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr "metric=geodesic ist nur gültig für lat/lon"
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Unbekannte Maßzahl: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Ausgabedistanz in Meter und statt in Karteneinheiten"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Kann die temporäre Datei <%s> nicht erzeugen."
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 msgid "Writing output raster maps..."
 msgstr "Schreibe Ausgabe-Rasterkarten..."
@@ -27972,7 +29708,7 @@ msgstr "[%s]: Diese Farbe gibt es nicht."
 msgid "Converting <%s>..."
 msgstr "Konvertiere <%s>..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "Raster <%s> Typen passen nicht."
@@ -28077,7 +29813,7 @@ msgid "There are no valid locations in the current region"
 msgstr "ES sind keine gültigen Locations in der aktuellen Region."
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28669,7 +30405,7 @@ msgstr "[%s]: Diese Farbe gibt es nicht."
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29109,7 +30845,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Gebe die Statistik im Shell-Skript-Stil aus."
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29131,11 +30867,6 @@ msgstr "Durchgang 2..."
 msgid "Unable to write to temp file"
 msgstr "Kann die temporäre Datei nicht schreiben."
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Erzeuge Punkte... "
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29265,7 +30996,7 @@ msgid "Writing output raster map..."
 msgstr "Schreibe Ausgabe-Rasterkarten..."
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -29276,43 +31007,43 @@ msgstr "Schreibe Rasterkarte <%s>..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr "Richtung gelesen: %lf, Nachbar gefunden: %i"
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Erzeugt Rasterkarte mit Wassereinzugsgebieten."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "Raster, Sichtbereich"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Name der Ausgabe-Rasterkarte."
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Koordinaten von Startpunkt(en) (O,N)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Ungültige Ost-Koordinate <%s>."
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Ungültige Nord-Koordinate <%s>."
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Warnung: Ignoriere Punkte außerhalb des Fensters: %4f,%4f."
@@ -29412,22 +31143,22 @@ msgid "Invalid map type"
 msgstr "Ungültige Karte <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "ABSCHNITT %d: Schließe Karten."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "ABSCHNITT %d: Bestimme Wassereinzugsgebiet."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "ABSCHNITT 1a (von %1d): Initiiere den Speicher."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "ABSCHNITT 1b (of %1d): Ermittle den Fluß aus der Karte heraus."
@@ -29553,24 +31284,24 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "ABSCHNITT 3: Akkumuliere Oberflächenabfluß mit SFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "ABSCHNITT 3: Akkumuliere Oberflächenabfluß mit MFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr "MFD: kumulierter Anteil der Fließrichtung ist nicht 1.0 aber %f "
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, fuzzy, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29582,8 +31313,8 @@ msgstr[1] ""
 "MFD: A * Pfad schon verarbeitet bei der Verteilung der Flüsse: %d von %d "
 "Zellen"
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -30184,48 +31915,48 @@ msgstr ""
 "Drücke <return> für die nächste Frage wenn es keine Karte der Blockierungen "
 "gibt. "
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 msgid "Inputs"
 msgstr "Eingabe"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Name der Eingabe-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 "Alle Zellen, die nicht NULL sind oder den Wert Null haben werden als echte "
 "Bodensenke aufgefasst."
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Eingabekarte mit der Größe des Oberflächenabfluss pro Zelle."
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Name der Eingabe-Rasterkarte (Sättigung, saturation)."
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Eingabe-Rasterkarte: Flächen die Oberflächenabfluss blockieren"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 #, fuzzy
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
@@ -30233,107 +31964,112 @@ msgstr ""
 "Alle Zellen, die nicht NULL sind oder den Wert Null haben werden als echte "
 "Hindernis aufgefasst."
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Eingabewert: kleinste Größe des äußeren Wassereinzugsgebiets."
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 "Eingabewert: Maximale Länge des Oberflächenabflusses in Karteneinheiten für "
 "USLE."
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 msgid "Name for output accumulation raster map"
 msgstr "Name der Ausgabe-Akkumulations-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Ausgabekarte mit Anzahl der Zellen, die durch jede Zelle abfließt."
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Ausgabekarte mit topographischem Index"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Name der Ausgabe-Expositions-Rasterkarte."
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Ausgabekarte mit Einzugsgebietshälften mit eindeutigen Wert."
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 msgid "Name for output slope length raster map"
 msgstr "Name der Ausgabe-Neigungslängen-Rasterkarte"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "Ausgabekarte der Hanglängen und -Neigungsfaktoren (LS) für USLE."
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 msgid "Name for output slope steepness raster map"
 msgstr "Name der Ausgabe-Neigungs-Rasterkarte"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Ausgabekarte der Hangneigungsfaktoren (S) für USLE."
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Umrechnungsfaktor für MFD (1-10)"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 "1 = am meisten divergierende Fluss, 10 = am meisten konvergierende Fluss. "
 "Empfohlen: 5"
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 "Maximal zu verwendender Speicher in Verbindung mit dem Schalter -m (in MB)."
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr "SFD: einzelne Fließrichtung, MFD: mehrere Fließrichtungen."
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Erlaube nur horizontalen und vertikalen Wasserfluss."
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Schalte Auslagerung auf Festplatte an: Operation ist langsam."
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
@@ -30342,36 +32078,36 @@ msgstr ""
 "überschreiten. Schlagen Sie im Handbuch nach wie die Speicheranforderungen "
 "berechnet werden."
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 "Verwende positive Flussakkumulation, auch für vorraussichtliche "
 "Unterschätzungen."
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 "Siehe Handbuch für detaillierte Beschreibung der Ausgabe der "
 "Flussakkumulation."
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Entschuldigung, Sie müssen eine Ausgabe-Karte wählen."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s=%s - muss eine positive Zahl sein."
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30382,17 +32118,17 @@ msgstr ""
 "    basin, stream, half.basin, length.slope, or slope.steepness\n"
 "    MÜSSEN Sie ein Wert für den Parameter 'basin threshold' angegeben."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Lat/Long Locations werden von diesem Modul nicht unterstützt"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Unterprozess fehlgeschlagen mit dem Fehlercode %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -30401,26 +32137,26 @@ msgstr[0] ""
 msgstr[1] ""
 "ABSCHNITT 1 Beginne: Initialisiere Variablen. %d Abschnitte insgesamt."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 #, fuzzy
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 "Maximal verwendbarer Speicher war kleiner als 3 MB; Setze es auf den "
 "Standardwert 300 MB."
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "ABSCHNITT 1b (of %1d): Ermittle den Fluß aus der Karte heraus."
@@ -30430,22 +32166,32 @@ msgstr "ABSCHNITT 1b (of %1d): Ermittle den Fluß aus der Karte heraus."
 msgid "Closing accumulation map"
 msgstr "Rasterkarte mit zero-crossings."
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Rasterkarte mit zero-crossings."
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Rasterkarte mit zero-crossings."
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Rasterkarte mit zero-crossings."
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Berechne Flußrichtungen..."
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Rasterkarte mit zero-crossings."
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Rasterkarte mit zero-crossings."
@@ -30478,34 +32224,34 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 #, fuzzy
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 "MFD: A * Pfad schon verarbeitet bei der Verteilung der Flüsse: %d von %d "
 "Zellen"
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "Raster, Resamplen"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Erzeugt eine neue Rasterkarte gröberer Auflösung mittels Aggregation."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Aggregationsmethode."
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Gewichte in Bezug auf die Fläche (langsamer)."
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Kann die Farbtabelle für %s nicht lesen."
@@ -30905,7 +32651,7 @@ msgstr "Farbtabelle 'grey.eq' wird für Fließkomma-Karten nicht unterstützt."
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "Farbtabelle 'grey.log' wird für Fließkomma-Karten nicht unterstützt."
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "Unbekannte Farbanfrage '%s'."
@@ -31304,7 +33050,7 @@ msgstr ""
 "Berechnet univariate Statistiken der nicht-NULL Zellen einer Rasterkarte."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31319,12 +33065,26 @@ msgstr "Rasterkarte für Zonenbildung, muss vom Typ CELL sein"
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Verwende dieselbe Auflösung wie die RASTER3D-Eingabekarte für die 2D-"
+"Ausgabekarten. Dies ist unabhängig von der Auflösung der aktuellen Region. "
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 "Berechnet univariate Statistiken der nicht-NULL Zellen einer Rasterkarte."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31630,33 +33390,33 @@ msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 "Eingabekarten müssen vom gleichen Datentyp sein. CELL FCELL oder DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: Kann keine Bounding Box für die Linien finden."
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Bounding Box:  l = %d, r = %d, o = %d, u = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "Durchgang Nummer %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Löschte %d  Pixel "
 msgstr[1] "Löschte %d  Pixel "
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Ausdünnung erfolgreich abgeschlossen."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 "Ausdünnung nicht vollständig. Es könnte sinnvoll sein den Wert des Parameter "
@@ -31957,32 +33717,12 @@ msgid "Produces a vector map of specified contours from a raster map."
 msgstr ""
 "Erzeugt eine Vektorkarte mit bestimmten Kontourlinien aus einer Rasterkarte."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Abstand zwischen der kontour-Intervallen."
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Anzahl der Kontour-Level"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Anzahl der Kontour-Level"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Minimales Kontur-Level"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Maximales Kontur-Level"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Minimale Anzahl der Punkte für eine Kontour-Linie (0 -> kein Limit)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32592,55 +34332,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Kann das lineare Gleichungssystem nicht erzeugen und lösen."
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Rasterkarte, an die angepasst werden soll."
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Emissionswert(e)"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Emissionswert(e)"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Datei mit Reklassifizierungsregeln."
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Startwert für den Zufallszahlengenerator."
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Schreibe Karte raus..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "-s und -n schließen sich gegenseitig aus."
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "Parameterfehler"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "Während der Berechnung sind Fließkomma-Fehler aufgetreten."
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "Überlauf während der Berechnung."
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Unbekannter Typ: %d"
@@ -32690,80 +34431,80 @@ msgstr "Unbekannter Fehler für die Funktion '%s'."
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Kann die Farbdatei für die Rasterkarte <%s@%s> nicht lesen."
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Kann den btree der Rasterkarte <%s@%s> nicht erzeugen."
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Ungültiger Kartenmodifikator: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Undefinierte Variable '%s'."
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Ungültige Karte <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Undefinierte Funktion '%s'."
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "Zu wenige Argumente (%d) für die Funktion %s()."
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "Zu viele Argumente (%d) für die Funktion %s()."
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Falsche Argument-Typen für die Funktion %s()."
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "Interner Fehler in der Funktion %s()."
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "Ungültige Anzahl von Argumenten (%d) für den Operator '%s'."
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "Format_expression_prec: unbekannter Typ: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Kann die Rasterkarte <%s@%s> nicht schliessen."
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Kann die Ausgabe-Rasterkarte nicht schließen."
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Bekannte Funktionen:"
@@ -32947,7 +34688,7 @@ msgstr "Der Vorwärts-Durchlauf ist beendet."
 msgid "Reverse sweep complete"
 msgstr "Rückwertiger Durchlauf fertig."
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
@@ -32955,15 +34696,15 @@ msgstr ""
 "Kann die Projektion der Eingabe-Rasterkarte nicht ins GRASS-Format "
 "konvertieren, zwecks Überprüfung."
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "Location PROJ_INFO:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "Datensatz PROJ_INFO:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -33007,14 +34748,6 @@ msgstr "Name einer nicht Dateiartigen GDAL-Datenquelle."
 msgid "Band to select (default is all bands)"
 msgstr "auszuwählende Kanäle (Standard: alle Kanäle)."
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadaten"
-
 #: ../raster/r.external/main.c:113
 #, fuzzy
 msgid "Flip horizontally"
@@ -33039,7 +34772,7 @@ msgstr "Format: Layer Typ Anzahl Min Max"
 msgid "%s= or %s= must be given"
 msgstr "Entweder -h oderr rows= and cols= müssen angegeben sein"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Kann die derzeitige Region nicht aktualisieren."
@@ -33058,7 +34791,7 @@ msgstr "Bildgruppe <%s> existiert bereits und wird überschrieben."
 msgid "Reading band %d of %d..."
 msgstr "Lese Karte %s ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Der ausgewählte Kanal (%d) existiert nicht."
@@ -33127,27 +34860,27 @@ msgstr "Erstelle Support-Dateien für <%s>."
 msgid "Link to raster map <%s> created."
 msgstr "Link zur Rasterkarte <%s> erzeugt"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importiert eine binäre Rasterdatei in eine GRASS Rasterkarte."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Zu importierende Rasterdatei."
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "auszuwählende Kanäle (Standard: alle Kanäle)."
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Name der Ziellocation für das Bild."
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
@@ -33155,76 +34888,91 @@ msgstr ""
 "Name der Location, von der Projektionsinformationen für eine GCP-"
 "Transformation gelesen werden soll."
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Kann den Rasterkanal nicht bekommen."
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Name der Rasterkarte mit Höheninformationen [in Meter]."
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Kann Tabelle <%s> nicht beschreiben."
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Übersteuere die Projektion (verwende Projektion der Location)."
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Verwende die Nummern der Kanäle anstatt der Farbbezeichnungen."
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Gibt Tabellen aus und beendet sich."
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 "Sie müssen eine Ziel-Location angeben, die verschieden ist von der Ausgabe-"
 "Location."
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "Sie müssen eine obere und eine untere Karte angegeben."
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr "Der '-l'-Schalter funktioniert nur in einer Lat/Lon-Location."
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Die Anzahl der Bereiche muß gleich oder größer 1 sein."
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Kann die Datenquelle <%s> nicht öffnen."
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
@@ -33233,7 +34981,7 @@ msgstr ""
 "werden. Sie können 'gdalwarp' verwenden, um die Karte zu transformieren, so "
 "dass Norden oben ist."
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
@@ -33243,87 +34991,92 @@ msgstr ""
 "der Begrenzung und Auflösung mit r.info und eine Anpassung mit r.region "
 "dieser Parameter ist für die weitere Berechnung empfehlenswert."
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Fahre mit dem Import fort..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Kann die Signaturdatei nicht öffnen."
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Kann den Rasterkanal nicht bekommen."
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Kopiere %d GCPs in eine Punktdatei für <%s>."
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "GCPs haben das folgende OpenGIS WKT Koordinatensystem:"
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Umprojezieren der GCP Tabelle:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Eingabe-Projektion der GCP-Tabelle: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* Ausgabe-Projektion der GCP-Tabelle: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Fehler in pj_do_proj (kann den GCP %i nicht umprojezieren)."
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "Kann die Kennzahlen der Projektion der Eingabe-GCPs nicht übersetzten."
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "Kann die Projektionsinformation der Ziel-Location nicht ermitteln."
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Kann die Projektionseinheit der Ziel-Location nicht ermitteln."
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "Kann die Kennzahlen der Projektion der Ziel-Location nicht ermitteln."
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Schreibe Rasterkarte <%s>..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Erstelle Graustufen Farbtabelle für <%s> (8bit, full range)."
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "Erstelle Graustufen Farbtabelle für <%s> (16bit, image range)."
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Kann die Datei <%s> nicht öffnen."
@@ -33455,7 +35208,7 @@ msgstr "Lese Höheninformationen... "
 msgid "Writing topographic index map..."
 msgstr "Schreibe Karte mit topographischem Index."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Anzahl der Eingabepunkte: %d."
@@ -33569,12 +35322,12 @@ msgstr ""
 "Das Volumen ist nur korrekt, wenn die Seetiefe (Terrain-Rasterkarte) in "
 "Metern angegeben wurde."
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Zeige den Index."
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33583,23 +35336,23 @@ msgstr ""
 "mehrerer) Rasterkarte(n) in \"NO DATA\"-Bereiche einer anderen Rasterkarte "
 "gefüllt werden."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Name der Rasterkarten, die zusammengefügt werden sollen."
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Name der resultierenden Rasterkarte."
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Verwende Null (0) für Transparenz anstelle von NULL."
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Die minimale Anzahl der Eingabe-Rasterkarten ist zwei."
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Erstelle Supportdateien für die Rasterkarte <%s>."
@@ -33674,42 +35427,6 @@ msgstr "Vektor, Interpolation"
 msgid "Converts a raster map into a vector map."
 msgstr "Konvertiert eine Rasterkarte in eine Vektorkarte."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Name der Attribut-Spalte die für die Label benutzt werden soll."
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Glättet Ecken flächenhafter Objekte"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Benutze Rasterzellenwerte als Kategoriewerte anstelle von eindeutigen "
-"Sequenzen (nur bei CELL-Karten)."
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Verschiebewert für Z-Koordinaten"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Schreibe Rasterwerte als Z-Koordinate. Attributtabelle wird nicht erzeugt. "
-"Derzeit werden nur Punkte unterstützt."
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Erzeuge keine Topologie."
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -34243,10 +35960,6 @@ msgstr "Größe des Punkt-Caches."
 msgid "Advanced"
 msgstr "Fortgeschritten"
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr "Ausgabe der Kopfzeile."
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr "Zeige die Kategorielabel der Rasterzelle(n)."
@@ -34546,7 +36259,7 @@ msgstr "Erzeugt zufällige Oberfläche(n) mit räumlicher Abhängigkeit."
 msgid "Name for output raster map(s)"
 msgstr "Name der Ausgabe-Rasterkarte(n)."
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Maximale Distanz der räumlichen Korrelation (Wert >= 0.0)."
 
@@ -34572,7 +36285,7 @@ msgstr "Maximaler Zellwert der Verteilung."
 msgid "Uniformly distributed cell values"
 msgstr "Gleichförmig verteilte Zellwerte."
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Erzeuge Rasterkarte <%s> ..."
@@ -34914,7 +36627,7 @@ msgstr "Berechnet Dominanz-Diversitäts-Index einer Rasterkarte."
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34940,7 +36653,7 @@ msgstr "Zeige den Index."
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Konfigurationsdatei"
@@ -34959,7 +36672,7 @@ msgstr "Berechnet die Standardabweichung der Patch-Größen einer Rasterkarte."
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Zeige den Index."
@@ -35110,7 +36823,7 @@ msgstr "Kann lseek nicht ausführen."
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Berechnet Shannons Diversitäts-Index einer Rasterkarte."
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 "Berechnet den Mittelwert der Attribute (Rasterwerte) -Index einer "
@@ -35305,11 +37018,11 @@ msgstr "Norden"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Konnte die maximale Distanz nicht lesen. Breche ab."
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr "Der Distanzwert muss zwischen 0.5 und 1.5 sein. Abbruch."
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Berechne Karte %01d von %01d (Winkel %lf, Rasterkarte <%s>)."
@@ -35552,13 +37265,53 @@ msgstr "incidout benötigt den Zeit-Parameter."
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Modus 2: integrierte tägliche Strahlung für einen Tag des Jahres"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Diffusions Steigerungsrate"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Schreibe Rasterkarte <%s>."
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Ungültige Karte <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Falsche Isokosten: %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Schreibe Rasterkarte <%s>."
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Verwende die Koordinaten der Kartenmitte: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Schreibe Rasterkarte <%s>."
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 "Wenn sie -s und keine Horizont-Rasterkarte verwenden, muss numpartitions=1 "
 "sein."
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -35566,13 +37319,13 @@ msgstr ""
 "Wenn Sie Speicher sparen und Schatten verwenden wollen, müssen Sie einen "
 "vorher berechneten Horizont verwenden."
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 "Die Rasterkarten latin und longin haben kein Effekt in einer Lat/Lon "
 "Location."
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 "Entweder müssen die beiden Rasterkarten latin und longin oder keine von "
@@ -35600,86 +37353,97 @@ msgstr "Entkomprimiert die Karte"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Gebe die Projektionsinformationen im Shellskript-Stil aus"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "Vektorkarte <%s> im aktuellen Mapset nicht gefunden."
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 "[%s] ist eine Reklassifikations-Datei von <%s> im Mapset <%s> - kann nicht "
 "dekomprimieren."
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 "<%s> ist eine Reklassifikations-Datei von <%s> im Mapset <%s> - kann nicht "
 "komprimieren."
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 "[%s] ist eine per GDAL verknüpfte Karte  - kann nicht (de)komprimieren."
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "ERLEDIGT: dekomprimierte Datei ist %lu Bytes kleiner."
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "ERLEDIGT: komprimierte Datei ist %lu Bytes kleiner."
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "ERLEDIGT: dekomprimierte Datei ist %lu Bytes größer. "
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "ERLEDIGT: komprimierte Datei ist %lu Bytes größer. "
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Flächengröße"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] ist bereits dekomprimiert."
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] ist bereits komprimiert."
+msgid "Uncompressing <%s>"
+msgstr "Emissionswert(e)"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%sKOMPRIMIERE [%s]"
+msgid "Re-compressing <%s>"
+msgstr "Emissionswert(e)"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Lösche <%s>"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 "[%s] ist eine per GDAL verknüpfte Karte  - kann nicht (de)komprimieren."
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 "<%s> ist eine Reklassifikations-Datei von <%s> im Mapset <%s> - kann nicht "
 "komprimieren."
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35711,53 +37475,53 @@ msgstr "o_adev: Keine Daten im Feld."
 msgid "Filter <%s> not found"
 msgstr "Datei <%s> nicht gefunden."
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Vektor, Kerndichte"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Erzeugt eine neue Rasterkarte gröberer Auflösung mittels Aggregation."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 #, fuzzy
 msgid "Filter radius (horizontal)"
 msgstr "Teile horizontal und nicht vertikal."
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Entweder -h oderr rows= and cols= müssen angegeben sein"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Option <%s> erforderlich."
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "<%s> hat zu viele Signaturen (Limit ist 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Zumindest eine Option von %s muss angegeben werden."
@@ -36188,20 +37952,25 @@ msgstr[1] "Berechne Zentralitätsmaße..."
 msgid "Calculating %s"
 msgstr "Berechne Karten..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr "Distanz muss >= 0.0 sein."
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Korrelation"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Erzeugt zufällig Zellwerte mit räumlicher Abhängigkeit."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Maximal zu ladende Anzahl Spalten."
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 "Zufälliger Startwert (SEED_MIN >= Wert >= SEED_MAX) (Standard [zufällig])."
@@ -36347,7 +38116,7 @@ msgstr "ausschalten"
 msgid "Grid line width"
 msgstr "Gitterlinienbreite"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Gitternetz Farbe"
 
@@ -36474,14 +38243,10 @@ msgid "Starting and ending coordinates"
 msgstr "Anfangs- und End-Koordinaten."
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Linien-Farbe"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Text-Farbe oder \"none\"."
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -36510,8 +38275,8 @@ msgid "Name of monitor to start"
 msgstr "Name des Grafikfensters, das gestartet werden soll."
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36573,49 +38338,67 @@ msgstr "Gib den Namen des momentan selektierten Grafikfensters aus."
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Gib den Namen des momentan selektierten Grafikfensters aus."
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Gib den Namen des momentan selektierten Grafikfensters aus."
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "Nicht automatisch beim Starten selektieren."
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Gebe das aktuell ausgewählte Grafikfenster frei."
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Kann Farbe nicht lesen."
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Öffne Formular im Editiermodus."
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 #, fuzzy
 msgid "Currently selected monitor:"
 msgstr "Gebe das aktuell ausgewählte Grafikfenster frei."
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, fuzzy, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr "Nicht zu der Kommandoliste im Monitor hinzufügen."
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr "Grafikfenster <%s> freigegeben."
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Kein Grafikfenster ausgewählt."
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Entweder \"-i\" oder \"value=\" muss angegeben werden."
@@ -36625,65 +38408,75 @@ msgstr "Entweder \"-i\" oder \"value=\" muss angegeben werden."
 msgid "Monitor <%s> is not running"
 msgstr "Fehler - Grafikfenster '%s' ist nicht aktiv."
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "Cell-Datei nicht gefunden."
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Kann die Datei <%s> nicht erzeugen."
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Cell-Datei nicht gefunden."
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Kann die OGR-Datenquelle '%s' nicht öffnen."
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Kann die Datei <%s> nicht erzeugen."
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Die Datei '%s' existiert bereits und wird überschrieben."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Kann die Zeile %d nicht zurückschreiben."
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Typ der Ausgabe"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Grafikfenster <%s> freigegeben."
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Kann die Datei <%s> nicht erzeugen."
+msgid "Starting monitor <%s>..."
+msgstr "Schreibe Vektorkarte <%s> ..."
 
-#: ../display/d.mon/start.c:163
-#, fuzzy, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "Setze den Namen der Karte auf <%s>, was <%s> übersteuert."
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Kann die Farbdatei nicht lesen."
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Grafikfenster <%s> freigegeben."
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Liste aller Grafikfenster."
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 #, fuzzy
 msgid "No monitors running"
 msgstr "Fehler - Grafikfenster '%s' ist nicht aktiv."
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Cell-Datei nicht gefunden."
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Kann die Datei <%s> nicht öffnen."
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Kann die Farbdatei nicht lesen."
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Nicht zu der Kommandoliste im Monitor hinzufügen."
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36798,12 +38591,12 @@ msgstr "%s: ungültiger Wert."
 msgid "[%s]: illegal value specified"
 msgstr "%s: ungültiger Wert."
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Führe log Transformation aus."
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -36812,16 +38605,34 @@ msgstr ""
 "Überlagert Zell-Kategoriewerte über eine Rasterkarte im aktiven Grafik-"
 "Fenster."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Indiziere die Punkte nicht mittels der Rasterzellen."
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Hole Textfarbe von der Farbtabelle der Zelle."
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Einstellungen"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Pfad zur Font-Datei."
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr "Text Encoding (nur für TrueType Fonts)."
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36829,7 +38640,7 @@ msgstr[0] "Gitternetz Farbe"
 msgstr[1] "Gitternetz Farbe"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36841,7 +38652,7 @@ msgstr ""
 "dargestellten Zellen könnten zu klein sein, um die Kategorien lesen zu "
 "können."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 "Abbruch (Region größer als 200 Zeilen x 200 Spalten sind nicht erlaubt)"
@@ -36923,11 +38734,6 @@ msgstr "Flächenfüllfarbe"
 msgid "Colorize features according color definition column"
 msgstr "Name der Farbdefinitionsspalte (mit dem Schalter -a zu benutzen)."
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Spalte mit Farbwerten nicht spezifiziert."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36937,7 +38743,7 @@ msgstr ""
 msgid "Lines"
 msgstr "Linien"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Linienbreite"
 
@@ -37516,37 +39322,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Ungültige Koordinaten %s %s."
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Zeige Informationen über das aktive Grafikfenster."
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Stelle das Screen-Rechteck dar (link, rechts, oben, unten)."
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Stelle die Screen-Dimensionen dar (Breite, Höhe)."
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Stelle das aktive Frame-Rechteck dar."
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Stelle die Screen-Dimensionen dar (Breite, Höhe)."
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Stelle das Screen-Rechteck der aktuellen Region dar."
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 #, fuzzy
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
@@ -37828,14 +39634,6 @@ msgstr "Text-Ausrichtung"
 msgid "Line spacing"
 msgstr "Zeilenabstand"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Pfad zur Font-Datei."
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr "Text Encoding (nur für TrueType Fonts)."
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Eingabe-Datei"
@@ -37900,7 +39698,7 @@ msgstr "Diagrammtyp"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Diagramm-Eigenschaften"
 
@@ -37938,6 +39736,11 @@ msgstr "Zentriert das Balkendiagramm um einen Datenpunkt."
 msgid "Maximum value used for bar plot reference"
 msgstr "Maximaler Wert wird für die Referenz des Balkenplots verwendet."
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Erzeuge eine 3D-Ausgabe."
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
@@ -37946,6 +39749,11 @@ msgstr ""
 "Stellt drei Rasterkarten als rot, grün und blau Überlagerung im aktuellen "
 "Kartenfenster dar."
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37990,14 +39798,7 @@ msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 "Benutze einen Teilausschnitt der Wertespanne für eine Legende (min,max)."
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Einstellungen"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr "Schriftgröße"
@@ -38088,11 +39889,12 @@ msgstr "Farbspanne überschreitet obere Grenze des aktuellen Datensatzes."
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "use=%s out of range [%.3f, %.3f]. (extend with range= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Nichts zu zeichnen! Evtl. keine Kategorien mit Labeln?"
 
@@ -38106,34 +39908,90 @@ msgstr "Zeigt einen Maßstabsbalken im Grafikfenster an."
 msgid "North arrow style"
 msgstr "Farbe des Nordpfeils"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr "Bildschirmkoordinaten der linken oberen Ecke des Rechtecks"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Farbe der Randzone"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Zeichne nur eine Maßstabsleiste."
@@ -38150,7 +40008,7 @@ msgstr "Kann die Rasterzeile nicht bekommen."
 msgid "Could not read symbol \"%s\""
 msgstr "Konnte nicht von <%s> lesen."
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -38158,63 +40016,63 @@ msgstr ""
 "Zeichnet Pfeile, die die Exposition der Zellen repräsentieren, basierend auf "
 "einer Rasterkarte mit Expositionsdaten."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Name der Expositionskarte, die angezeigt werden soll."
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Typ der existierenden Expositionskarte."
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Farbe der Pfeile."
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Farbe der Pfeile."
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Farbe zum Zeichnen der X (NULL-Werte)."
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Farbe für unbekannte Information."
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Zeichne jede Nte Zelle einen Pfeil."
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Rasterkarte, die Werte für die Pfeillänge enthält."
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Skalierfaktor für die Pfeile (Magnitude-Karte)."
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Unzulässiger Wert für den Skalierfaktor."
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "Unzulässiger Wert für den Skip-Faktor."
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 "Magnitude wird nur für GRASS sowie Kompass-Expositionskarten unterstützt."
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr "Skalier-Option benötigt die magnitude_map."
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "Problem beim Lesen der Range-Datei."
 
@@ -38497,55 +40355,41 @@ msgstr ""
 "Klassen Separabilitäts-Matrix\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Gruppe <%s> im aktuellen Mapset nicht gefunden."
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Untergruppe <%s> in der Gruppe <%s> nicht gefunden."
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Rasterkarte <%s> existiert nicht in der Untergruppe <%s>."
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "Keine Rasterkarten gefunden."
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Untergruppe <%s> beinhaltet keine Rasterkarten."
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Untergruppe <%s> hat nur eine Rasterkarte."
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Die Untergruppe muss mindestens 2 Rasterkarten enthalten."
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Kann die Start-Signaturdatei <%s> nicht öffnen."
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Kann die Signaturdatei <%s> nicht lesen."
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s> hat zu viele Signaturen (Limit ist 255)"
@@ -38622,203 +40466,217 @@ msgstr "Minimale Anzahl von Pixeln in einer Klasse."
 msgid "Name for output file containing final report"
 msgstr "Name der Ausgabedatei, die den Endbericht enthält."
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Gruppe <%s> im aktuellen Mapset nicht gefunden."
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Untergruppe <%s> in der Gruppe <%s> nicht gefunden."
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Unzulässige Anzahl der Anfangs-Klassen (%s)."
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Unzulässige(r) Wert(e) für die Stichproben-Intervalle (%s)."
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Unzulässige Wert für die Iterationen (%s)."
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Unzulässiger Konvergenzwert (%s)."
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Unzulässiger Wert für Separation (%s)."
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Unzulässiger Wert für min_size (%s)."
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Kann die Datei mit dem Bericht <%s> nicht erzeugen."
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### CLUSTER (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Location: %s"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Gruppe:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Untergruppe: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Resultierende Signaturdatei: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Region"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Nord: %12.2f  Ost: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Süd: %12.2f  Westen: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Auflösung:   %12.2f  Auflösung:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Zeilen:  %12d  Spalten: %12d  Zellen: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Maske: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Cluster Parameter\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " Anzahl der initialen Klassen:     %d."
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [aus der Signaturdatei %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "Minimale Klassen-Größe:          %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr " Minimale Klassen-Separierung:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Prozent Konvergenz:        %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "Maximale Anzahl der Wiederholungen: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "Zeilen Stichprobeninterval:      %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "Spalten  Stichprobeninterval:         %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "Lese Rasterkarten..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 "Speicher voll! Bitte wiederholen Sie den Lauf mit einer kleineren "
 "Stichprobengröße."
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Stichprobengröße: %d Punkte\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 "Nicht genügend Stichprobenpunkte. Bitte wiederholen Sie den Lauf mit einer "
 "größeren Stichprobe."
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 "Nicht genug nicht-null Stichprobenpunkte. Bitte überprüfen Sie die aktuelle "
 "Region (und Maske)."
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## Endergebnisse ##############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d Klassen (Konvergenz =%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 "Kann die Signaturdatei <%s> für die Gruppe <%s> Untergruppe <%s> nicht "
 "erzeugen."
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38826,12 +40684,12 @@ msgstr ""
 "\n"
 "#################### KLASSEN ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d Klassen, %.2f%% stabile Punkte.\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -39148,8 +41006,8 @@ msgid "radiance"
 msgstr "Strahlung"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr "Reflexion"
 
@@ -39512,357 +41370,402 @@ msgstr "Gruppe <%s> existiert nicht."
 msgid "group <%s> references the following subgroups\n"
 msgstr "Untergruppe <%s> beinhaltet keine Rasterkarten."
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Name der Ausgabe-Rasterkarte mit zufälliger Oberfläche."
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 msgid "vegetation"
 msgstr "Vegetation"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Extrahiert Parameter für Qualitätskontrolle aus Modis QC Layern."
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Name des Oberflächenreflexions-QC-Layers [bit array]"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 msgid "Name for output QC type classification layer"
 msgstr "Name des Ausgabe-QC-Typ-Klassifikationslayers"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr "Name des MODIS Produkttyps"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 msgid "Name of QC type to extract"
 msgstr "Name des zu extrahierenden QC-Typs"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Name der Ausgabe-Rasterkarte, der Fließrichtungen."
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 #, fuzzy
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr "Dieser Schalter ist nur für MOD09Q1 @ 250m Produkte vorhanden"
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Kanalnummer außerhalb des erlaubten Bereichs [1-7]"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr "Kanalnummer außerhalb des erlaubten Bereichs [1-7]"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr "mod09Q1 Produkt hat nur 2 Kanäle"
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 #, fuzzy
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr "Dieser Schalter ist nur für MOD09A1s @ 500m Produkte vorhanden"
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 #, fuzzy
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr "Dieser Schalter ist nur für MOD09Q1 @ 250m Produkte vorhanden"
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 #, fuzzy
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr "Dieser Schalter ist nur für MOD09Q1 @ 250m Produkte vorhanden"
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+#, fuzzy
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr "Dieser Schalter ist nur für MOD09Q1 @ 250m Produkte vorhanden"
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -40061,7 +41964,7 @@ msgstr "'Ground Truth'-Trainingskarte."
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Maximale Anzahl der Unter-Signaturen in jeder Klasse."
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Unzulässige Anzahl von Unter-Signaturen (%s)."
@@ -40420,110 +42323,116 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Speicher ist zu Ende (Out-of-memory)."
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+#, fuzzy
+msgid "object recognition"
+msgstr "Vektor, Projektion"
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Fehler beim Lesen der Daten"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Fehler beim Lesen der Segment-Datei."
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Fehler beim Schreiben der Daten."
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Anzahl der zu erstellenden Punkte."
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Operation nicht implementiert."
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Schreibe Karte raus..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Bearbeite ersten Durchgang..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 "Region-Größe ist kleiner als die Minimal-Region; es wird nichts angezeigt."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att Datei existiert bereits."
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Subset"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-#, fuzzy
-msgid "object recognition"
-msgstr "Vektor, Projektion"
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Fehler beim Lesen der Daten"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Fehler beim Lesen der Segment-Datei."
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Fehler beim Schreiben der Daten."
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Anzahl der zu erstellenden Punkte."
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Schreibe Karte raus..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40597,64 +42506,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Der Schwellwert muss >=0 sein."
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Kann die Höhenkarte nicht öffnen."
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Ungültige Methode: %s."
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Option <%s> erforderlich."
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Option <%s> erforderlich."
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Option <%s> erforderlich."
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s: Basis-Rasterkarte nicht gefunden."
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Musterkarte sollte eine binäre 0/1 Rasterkarte sein."
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Eine oder mehrere Rasterkarte nicht gefunden."
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Initiale Anzahl der Klassen: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Initiale Anzahl der Klassen: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Operation nicht implementiert."
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -40722,7 +42648,7 @@ msgstr "Name der Ausgabe-Rasterkarte (grün)."
 msgid "Name for output raster map (blue)"
 msgstr "Name der Ausgabe-Rasterkarte (blau)."
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40774,7 +42700,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "%s sind zu viele Karten. Es sind nur %d erlaubt."
@@ -41619,50 +43545,54 @@ msgstr "Gruppe [%s] nicht gefunden."
 msgid "Option '%s' is required for new exposure info"
 msgstr "Option <%s> erforderlich."
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 msgid "albedo"
 msgstr "Albedo"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Name einer existierenden Vektorkarte."
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Ausgabe-Rasterkarte erforderlich."
@@ -41946,6 +43876,11 @@ msgstr "Vektor, Transformation"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "Bitte führen Sie i.target für die Gruppe aus."
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -42356,13 +44291,55 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ "Datentyp hängt von der verwendeten Datenbank ab, aber alle unterstützen "
 #~ "VARCHAR(), INT, DOUBLE PRECISION und DATE."
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> existiert bereits"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Kann Projektion nicht setzten."
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] ist bereits komprimiert."
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Kann Projektion nicht setzten."
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "%sKOMPRIMIERE [%s]"
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "Überlauf während der Berechnung."
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Keine Datenpunkte gefunden."
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Layer, in dem Spalten hinzugefügt werden soll."
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Layer, in dem Spalten hinzugefügt werden soll."
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Layer-Nummer (to)."
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Koordinaten der Startpunkte"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr ""
+#~ "Gebe die Ausgabe auf stdout aus und verändere die Attributtabelle nicht."
+
+#, fuzzy
+#~ msgid ""
+#~ "Error map of all lines and boundaries not being generalized due to "
+#~ "topology issues or over-simplification"
+#~ msgstr ""
+#~ "%d Linien/Grenzen wurden nicht geändert wegen übertriebener Vereinfachung."
 
 #, fuzzy
 #~ msgid "time series"
@@ -42408,76 +44385,6 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgid "Number of quartals to use"
 #~ msgstr "Anzahl der Quadrate"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Name der Eingabe-Rasterkarte mit Breitengraden [Dezimalgrad]."
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Name der Eingabe-Rasterkarte mit Längengraden [Dezimalgrad]."
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Ausgabe-Rasterkarte der diffusen Sonneneinstrahlung [W.m-2] (Modus 1) "
-#~ "oder der Abstrahlung [Wh.m-2.day-1] (Modus 2)."
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Ausgabekarte der Grund-Ausstrahlung [W.m-2] (Modus 1) oder Intensität [Wh."
-#~ "m-2.day1] (Modus 2)."
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Ausgabe der globalen (Gesamt-) Strahlungsintensität/-summe [W.m-2] (Modus "
-#~ "1) oder Rasterkarten der Strahlungsintensität/-summe [Wh.m-2.day-1] "
-#~ "(Modus 2)."
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Name der Rasterkartem mit Höheninformation [m]."
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Name der Rasterkarte mit Höheninformationen [in Meter]."
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Ausgabekarte der Grund-Ausstrahlung [W.m-2] (Modus 1) oder Intensität [Wh."
-#~ "m-2.day1] (Modus 2)."
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Ausgabe der globalen (Gesamt-) Strahlungsintensität/-summe [W.m-2] (Modus "
-#~ "1) oder Rasterkarten der Strahlungsintensität/-summe [Wh.m-2.day-1] "
-#~ "(Modus 2)."
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Anzahl der Interpolationspunkte."
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Übersteuere die Projektion (verwende Projektion der Location)."
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Location: %s\n"
 
@@ -42494,31 +44401,41 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ "\n"
 #~ "%d Klassen, %.2f%% stabile Punkte\n"
 
+#~ msgid "Subregion"
+#~ msgstr "Ausschnitt"
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Inkrement für die Kategorienummern"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "Option <%s>: <%s> existiert."
-
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Ausgabekarte <%s> ignoriert."
+#~ msgid "Could not rewind input file"
+#~ msgstr "Konnte die Ausgabedate <%s> nicht öffnen."
 
-#, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Ausgabekarte mit topographischem Index"
+#~ msgid "SVN Addons repository URL"
+#~ msgstr "URL des SVN Addons Repository"
 
 #, fuzzy
 #~ msgid "Name for basins raster map"
 #~ msgstr "Name der Basis-Rasterkarte."
 
+#, fuzzy
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> existiert bereits im Mapset <%s>."
+
+#, fuzzy
+#~ msgid "output map <%s> exists"
+#~ msgstr "Ausgabekarte <%s> ignoriert."
+
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Seitenlänge (Standard: %d Zeilen)."
 
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Seitenbreite (Standard: %d Zeichen)."
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Übersteuere die Projektion (verwende Projektion der Location)."
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -42543,6 +44460,14 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgid "[%s] not found"
 #~ msgstr "[%s] nicht gefunden werden."
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "Option <%s>: <%s> existiert."
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr ""
+#~ "Übersteuere die Projektion des Datensatzes (verwende Projektion der "
+#~ "Location)."
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -42562,6 +44487,14 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ "verwenden.\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
 #~ msgid "Default value: GRASS_GUI if defined otherwise wxpython"
 #~ msgstr "Standardwert: GRASS_GUI wenn definiert, ansonsten tcltk"
 
@@ -42574,6 +44507,17 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ "Neue GISDBASE (vollständiger Pfad zu dem Verzeichnis, in dem sich die "
 #~ "neue L0cation befindet)."
 
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Kann Projektion nicht setzten."
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Konvertiert alle alten GRASS Vektorkarten im aktuellen Mapset in das "
+#~ "aktuelle Format."
+
 #~ msgid "Packs up a raster map and support files for copying."
 #~ msgstr "Komprimiere eine Rasterkarte und Hilfsdateien zum Kopieren."
 
@@ -42620,161 +44564,68 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgid "No default DB driver defined"
 #~ msgstr "Standard-Treiber wurde nicht angegeben."
 
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s> existiert bereits im Mapset <%s>."
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Konvertiert alle alten GRASS Vektorkarten im aktuellen Mapset in das "
-#~ "aktuelle Format."
+#~ msgid "OGR datasource name"
+#~ msgstr "Name der OGR Datenquelle"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Keine Karte angegeben."
 
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Benenne reclass-Karten um."
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Konnte REF-Datei der Gruppe <%s> nicht lesen."
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d Kategorien von der Tabelle <%s> geladen."
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Entweder \"-i\" oder \"value=\" muss angegeben werden."
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Bitte geben Sie Z-Spalte an."
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Entweder \"-i\" oder \"value=\" muss angegeben werden."
-
-#, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "weight= und -c schließen sich gegenseitig aus."
-
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "weight= und -c schließen sich gegenseitig aus."
-
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "weight= und gauss= schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Ungültiger Wert für scalex."
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Bitte geben Sie Z-Spalte an."
-
 #, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Bitte geben Sie Z-Spalte an."
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Kann die Datei <%s> nicht erzeugen."
 
 #, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+#~ msgid "Starting monitor <%s> with env file '%s'"
+#~ msgstr "Setze den Namen der Karte auf <%s>, was <%s> übersteuert."
 
 #, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+#~ msgid "Env file not found"
+#~ msgstr "Cell-Datei nicht gefunden."
 
 #, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Bitte geben Sie Z-Spalte an."
+#~ msgid "PID file not found"
+#~ msgstr "Cell-Datei nicht gefunden."
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Bitte geben Sie Z-Spalte an."
+#~ msgid "Command file not found"
+#~ msgstr "Cell-Datei nicht gefunden."
 
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Benenne reclass-Karten um."
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "-s und -n schließen sich gegenseitig aus."
+#~ msgid "Name for output image"
+#~ msgstr "Name der Ausgabedatei"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
-#~ "oder \"rules\" muss angegeben werden!"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Konnte REF-Datei der Gruppe <%s> nicht lesen."
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr ""
-#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
-#~ "oder \"rules\" muss angegeben werden!"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Entweder ein Standardfarbname oder ein R:G:B Tripel."
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d Kategorien von der Tabelle <%s> geladen."
 
 #~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "Stellt eine thematische Vektorkarte im aktiven Grafikfenster dar."
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
+#~ msgstr ""
+#~ "Korrektur der v.lidar.growing Ausgabe. Das ist der letzte von 3 "
+#~ "Algorithmen um LIDAR zu filtern."
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Farbe für den Text."
+#~ msgid "Interpolation spline step value in east direction"
+#~ msgstr "Spline-Interpolations-Schrittweite in Ost-Richtung."
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Farbe des zu zeichnenden Gitters, oder \"none\" für nichts."
+#~ msgid "Interpolation spline step value in north direction"
+#~ msgstr "Spline-Interpolations-Schrittweite in Nord-Richtung"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Name der Ausgabe-Rasterkarte(n)."
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Name der Ausgabe-Rasterkarte (rot)."
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Diskretisierfehler in der Karteneinheit."
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Auch die maximale Entdeckungsentfernung berechnen."
 
 #~ msgid "Displays thematic vector map"
 #~ msgstr "Zeigt thematische Vektorkarten an."
@@ -42897,16 +44748,35 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgstr "Verwende mathematische Notation in der Legende."
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Name der Ausgabe-Rasterkarte (rot)."
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Name der Ausgabe-Rasterkarte(n)."
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Auch die maximale Entdeckungsentfernung berechnen."
+#~ msgid "Default: input"
+#~ msgstr "Diskretisierfehler in der Karteneinheit."
+
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "Stellt eine thematische Vektorkarte im aktiven Grafikfenster dar."
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "Text-Farbe oder \"none\"."
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Darstellung"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Farbe für den Text."
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Farbe des zu zeichnenden Gitters, oder \"none\" für nichts."
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Entweder ein Standardfarbname oder ein R:G:B Tripel."
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "Linie"
 
 #, fuzzy
 #~ msgid ""
@@ -42915,21 +44785,47 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ "Erlaubt das Erzeugen und/oder das Modifizieren von Rasterkarten-Support-"
 #~ "Dateien."
 
-#~ msgid "Unable to create vector map"
-#~ msgstr "Kann die Vektorkarte nicht erzeugen"
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Kann input dig Datei nicht öffnen."
 
-#, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Kann Tabelle nicht erzeugen: %s"
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "dig_att Datei existiert nicht."
 
-#~ msgid "Not enough memory"
-#~ msgstr "Nicht genug Speicher"
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Kann dig_att Datei nicht öffnen."
 
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "OLD_T_NEW Habe einen schlechten Code-Typ erhalten [%x]"
+#~ msgid "Attaching categories..."
+#~ msgstr "Füge Kategorien an..."
 
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "NEW_T_OLD Habe einen schlechten Code-Typ erhalten [%x]"
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr ""
+#~ "Das Anfügen von einem Attribut (Kategorie %d) an eine Linie ist "
+#~ "fehlgeschlagen."
+
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "Linie %d Beschriftung: %d passt zu einer anderen Beschriftung: %d."
+
+#~ msgid "Writing new file..."
+#~ msgstr "Schreibe neue Datei..."
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "[%d] Punkte und Linien wurden in die Ausgabedatei geschrieben."
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "[%d] Zentroide wurden in die Ausgabedatei geschrieben."
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importiert alte Version von GRASS Vektorkarten."
+
+#~ msgid "Endian of input vector map"
+#~ msgstr "Endian der Eingabe-Vektorkarte."
+
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "Keine Kategoriebeschriftungen (dig_cats) gefunden; keine Tabelle erstellt."
+
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "Kann die dig_cats Datei nicht öffnen."
 
 #~ msgid "Reading dig file..."
 #~ msgstr "Lese dig Datei..."
@@ -43015,192 +44911,41 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "[%d] Kategorien in den Speicher gelesen."
 
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "Keine Kategoriebeschriftungen (dig_cats) gefunden; keine Tabelle erstellt."
-
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "Kann die dig_cats Datei nicht öffnen."
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Kann input dig Datei nicht öffnen."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "dig_att Datei existiert nicht."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Kann dig_att Datei nicht öffnen."
-
-#~ msgid "Attaching categories..."
-#~ msgstr "Füge Kategorien an..."
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr ""
-#~ "Das Anfügen von einem Attribut (Kategorie %d) an eine Linie ist "
-#~ "fehlgeschlagen."
-
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "Linie %d Beschriftung: %d passt zu einer anderen Beschriftung: %d."
-
-#~ msgid "Writing new file..."
-#~ msgstr "Schreibe neue Datei..."
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "[%d] Punkte und Linien wurden in die Ausgabedatei geschrieben."
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "[%d] Zentroide wurden in die Ausgabedatei geschrieben."
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importiert alte Version von GRASS Vektorkarten."
-
-#~ msgid "Endian of input vector map"
-#~ msgstr "Endian der Eingabe-Vektorkarte."
-
-#~ msgid "Interpolation spline step value in east direction"
-#~ msgstr "Spline-Interpolations-Schrittweite in Ost-Richtung."
-
-#~ msgid "Interpolation spline step value in north direction"
-#~ msgstr "Spline-Interpolations-Schrittweite in Nord-Richtung"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "Unbekannter Rasterkartentyp."
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Cache Größe (MiB)"
-
-#~ msgid "Can't call bad function"
-#~ msgstr "Kann schlechte Funktion nicht aufrufen."
-
-#~ msgid "Bad arguments to pointfunc %s"
-#~ msgstr "Schlechte Argumente für pointfunc %s"
-
-#~ msgid "No function defined to perform ``point %c point''"
-#~ msgstr ""
-#~ "Es wurde keine Funktion definiert, um \"Punkt %c Punkt\" auszuführen."
-
-#~ msgid "Performing 1 arg map function on map %s"
-#~ msgstr "Führe 1-Argumentkartenfunktion auf der Karte <%s> aus."
-
-#~ msgid "Performing 2 arg map function on maps %s and %s"
-#~ msgstr "Führe 2-Argumentekartenfunktion auf den Karten <%s> und <%s> aus."
-
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Führe Karte <%s> + <%s> aus."
-
-#~ msgid "Can't call bad map-function"
-#~ msgstr "Kann schlechte Kartenfunktion nicht aufrufen."
-
-#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
-#~ msgstr "Schlechte Argumente für mapfunc %s (argc = %d)."
-
-#~ msgid "No function defined to perform map %c map"
-#~ msgstr "Keine Funktion definiert, um \"Karte %c Karte\" auszuführen."
-
-#~ msgid "Can't call bad num-function"
-#~ msgstr "Kann schlechte num-Funktion nicht aufrufen."
-
-#~ msgid "Bad arguments to numfunc %s"
-#~ msgstr "Schlechte Argumente für numfunc %s"
-
-#~ msgid "No function defined to perform ``number %c number''"
-#~ msgstr "Keine Funktion definiert, um \"Zahl %c Zahl\" auszuführen."
-
-#~ msgid "Can't call bad any-function"
-#~ msgstr "Kann schlechte Any-Funktion nicht aufrufen."
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "OLD_T_NEW Habe einen schlechten Code-Typ erhalten [%x]"
 
-#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
-#~ msgstr "Schlechte Argumente für anyfunc %s (argc = %d)."
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "NEW_T_OLD Habe einen schlechten Code-Typ erhalten [%x]"
 
 #~ msgid "One or more coordinates"
 #~ msgstr "Eine oder mehrere Koordinaten"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Nicht genügend Speicher für adx."
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Nicht genügend Speicher für ady."
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Nicht genügend Speicher für adxx."
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Nicht genügend Speicher für adyy."
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Nicht genügend Speicher für adxy."
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "Kann quaddata nicht erzeugen."
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "Kann quadfunc nicht erzeugen."
-
-#~ msgid "Cannot create tree"
-#~ msgstr "Kann tree nicht erzeugen."
-
-#~ msgid "Cannot create tree info"
-#~ msgstr "Kann tree-Information nicht erzeugen."
-
-#~ msgid "sites"
-#~ msgstr "Sites"
-
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Konvertiert eine GRASS site_lists Datei in eine Vektorkarte."
-
-#~ msgid "Site file <%s> not found"
-#~ msgstr "Site-Datei <%s> nicht gefunden."
-
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Kann das site_list Format nicht erraten."
-
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Reservieren von Speicher für Site-Struktur fehlgeschlagen."
-
-#~ msgid "Input format: dimension: %d strings: %d FP: %d"
-#~ msgstr "Input-Format: Dimension: %d strings: %d FP: %d"
-
-#~ msgid ""
-#~ "Floating point category values, using sequential integer for category"
-#~ msgstr ""
-#~ "Fließkomma Kategoriewerte -> verwende einen fortlaufenden Integer für die "
-#~ "Kategorien."
-
-#~ msgid "No category values, using sequential integer for category"
-#~ msgstr ""
-#~ "Keine Kategoriewerte -> verwende einen fortlaufenden Integer für die "
-#~ "Kategorien."
-
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "Übetrage Sites in eine Vektor-Punktkarte..."
+#~ msgid "Name of elevation map"
+#~ msgstr "Name der Höhenkarte"
 
-#~ msgid "%d sites written."
-#~ msgstr "%d Sites geschrieben."
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Zeichenkette, die NODATA-Zellen repräsentiert"
 
-#~ msgid "Name of layer to be used for INTENSITY"
+#, fuzzy
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
 #~ msgstr ""
-#~ "Name der Karte, die für die Intensität (INTENSITY) verwendet werden soll."
+#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
+#~ "oder \"rules\" muss angegeben werden!"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr ""
-#~ "Name der Karte, die für die Sättigung (SATURATION) verwendet werden soll"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Unbekannte Maßzahl: [%s]."
 
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "Importiert LÄnderdateien vom US-NGA GEOnet Names Server (GNS) in eine "
-#~ "Vektorpunktkarte."
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Fehler beim Lesen der Kategorie-Datei für <%s>."
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Unkomprimierte GNS-Datei von NGA (mit der Dateiendung .txt)."
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Fehler beim Lesen der Farb-Datei für <%s>."
 
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Erzeugt eine Rasterkarte vom Ergebnis (optional)."
+#~ msgid "String representing no data cell value"
+#~ msgstr "Zeichenkette, die NODATA-Werte repräsentiert."
 
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "Tabellendatei, die exportiert werden soll oder DB-Verbindung"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Oberflächeninterpolationswerkzeug für Rasterkarten."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -43218,15 +44963,20 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ "entstehen. Dabei werden als Eingabekarten einmal ein Höhenmodell und eine "
 #~ "Rasterkarte mit Reibungs-Kosten kombiniert."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr ""
+#~ "Name der Karte, die für die Intensität (INTENSITY) verwendet werden soll."
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr ""
+#~ "Name der Karte, die für die Sättigung (SATURATION) verwendet werden soll"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Name der Ausgabe-Karte, die den GRÜNEN Kanal enthalten soll"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Name der Ausgabe-Karte, die den BLAUEN Kanal enthalten soll"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Oberflächeninterpolationswerkzeug für Rasterkarten."
-
 #~ msgid "Surface generation program."
 #~ msgstr "Programm zur Erzeugung von Oberflächen."
 
@@ -43248,53 +44998,15 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgstr[0] "Interpoliere Rasterkarte <%s> ... %d Zeilenn... "
 #~ msgstr[1] "Interpoliere Rasterkarte <%s> ... %d Zeilenn... "
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "Lat/Lon Projektion wird zur Zeit noch nicht unterstützt."
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Location: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "Vektor, Netzwerk"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "Name der Höhenkarte"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Zeichenkette, die NODATA-Zellen repräsentiert"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
-#~ "oder \"rules\" muss angegeben werden!"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
-#~ "oder \"rules\" muss angegeben werden!"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Unbekannte Maßzahl: [%s]."
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Fehler beim Lesen der Kategorie-Datei für <%s>."
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Fehler beim Lesen der Farb-Datei für <%s>."
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Zeichenkette, die NODATA-Werte repräsentiert."
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "Name der Ausgabe Höhenkarte (Z-Werte)."
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "Ausgabe-Expositionskarte (oder fy)."
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "Lat/Lon Projektion wird zur Zeit noch nicht unterstützt."
+
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "Präfix für Ausgabe-Rasterkarte(n)."
 
@@ -43324,15 +45036,22 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgid "Suppress warnings"
 #~ msgstr "Unterdrücke Warnungen."
 
-#, fuzzy
-#~ msgid "High resolution panchromatic image"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
 #~ msgstr ""
-#~ "Brovey-Transformation zum mischen multispektraler und hochaufgelöster "
-#~ "panchromatischer Kanäle."
+#~ "Importiert LÄnderdateien vom US-NGA GEOnet Names Server (GNS) in eine "
+#~ "Vektorpunktkarte."
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Filterkriterien"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Unkomprimierte GNS-Datei von NGA (mit der Dateiendung .txt)."
+
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Erzeugt eine Rasterkarte vom Ergebnis (optional)."
+
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "Tabellendatei, die exportiert werden soll oder DB-Verbindung"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -43361,6 +45080,153 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgstr "Name der Ausgabe-Rasterkarte (Standard: input)."
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Berechnet univariate Statistiken der nicht-NULL Zellen einer Rasterkarte."
+
+#~ msgid "Data to be classified: column name or expression"
+#~ msgstr "Zu klassifizierende Daten: Spaltenname oder Ausdruck."
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Farbe des zu zeichnenden Gitters, oder \"none\" für nichts."
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Farbe des zu zeichnenden Gitters, oder \"none\" für nichts."
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Farbe für unbekannte Information."
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Farbe des zu zeichnenden Gitters, oder \"none\" für nichts."
+
+#~ msgid "Create grid of points instead of areas and centroids"
+#~ msgstr "Erzeuge ein Gitter mit Punkten anstelle von Flächen und Zentroiden."
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "Erzeuge ein Gitter mit Punkten anstelle von Flächen und Zentroiden."
+
+#~ msgid "Invalid distance"
+#~ msgstr "Ungültige Distanz."
+
+#~ msgid "Layer number"
+#~ msgstr "Layer-Nummer"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Location: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "Vektor, Netzwerk"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Bitte geben Sie Z-Spalte an."
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Ungültiger Wert für scalex."
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Entweder \"-i\" oder \"value=\" muss angegeben werden."
+
+#, fuzzy
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Bitte geben Sie Z-Spalte an."
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Bitte geben Sie Z-Spalte an."
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "'input=' und 'source=' schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Bitte geben Sie Z-Spalte an."
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Bitte geben Sie Z-Spalte an."
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Darstellung"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Entweder \"-i\" oder \"value=\" muss angegeben werden."
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "weight= und -c schließen sich gegenseitig aus."
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "weight= und -c schließen sich gegenseitig aus."
+
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "weight= und gauss= schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr ""
+#~ "Brovey-Transformation zum mischen multispektraler und hochaufgelöster "
+#~ "panchromatischer Kanäle."
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Filterkriterien"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Name der Eingabe-Rasterkarte."
 
@@ -43376,31 +45242,145 @@ msgstr "Name der Ausgabe-Rasterkarte (Sättigung, saturation)."
 #~ msgid "No maps output"
 #~ msgstr "Keine Ausgabekarte angegeben."
 
-#, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr ""
-#~ "Berechnet univariate Statistiken der nicht-NULL Zellen einer Rasterkarte."
-
-#~ msgid "Data to be classified: column name or expression"
-#~ msgstr "Zu klassifizierende Daten: Spaltenname oder Ausdruck."
-
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Farbe des zu zeichnenden Gitters, oder \"none\" für nichts."
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "Zeichne das Histogramm schweigsam."
 
-#~ msgid "Create grid of points instead of areas and centroids"
-#~ msgstr "Erzeuge ein Gitter mit Punkten anstelle von Flächen und Zentroiden."
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Nicht genügend Speicher für adx."
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Nicht genügend Speicher für ady."
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Nicht genügend Speicher für adxx."
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Nicht genügend Speicher für adyy."
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Nicht genügend Speicher für adxy."
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Kann quaddata nicht erzeugen."
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Kann quadfunc nicht erzeugen."
+
+#~ msgid "Cannot create tree"
+#~ msgstr "Kann tree nicht erzeugen."
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "Kann tree-Information nicht erzeugen."
 
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "Erzeuge ein Gitter mit Punkten anstelle von Flächen und Zentroiden."
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Kann Tabelle nicht erzeugen: %s"
 
-#~ msgid "Invalid distance"
-#~ msgstr "Ungültige Distanz."
+#~ msgid "Not enough memory"
+#~ msgstr "Nicht genug Speicher"
 
-#~ msgid "Layer number"
-#~ msgstr "Layer-Nummer"
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "-s und -n schließen sich gegenseitig aus."
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
+#~ "oder \"rules\" muss angegeben werden!"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr ""
+#~ "Entweder \"-i\" oder \"-r\" oder eine der Optionen \"color\", \"rast\" "
+#~ "oder \"rules\" muss angegeben werden!"
+
+#~ msgid "sites"
+#~ msgstr "Sites"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Konvertiert eine GRASS site_lists Datei in eine Vektorkarte."
+
+#~ msgid "Site file <%s> not found"
+#~ msgstr "Site-Datei <%s> nicht gefunden."
+
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Kann das site_list Format nicht erraten."
+
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Reservieren von Speicher für Site-Struktur fehlgeschlagen."
+
+#~ msgid "Input format: dimension: %d strings: %d FP: %d"
+#~ msgstr "Input-Format: Dimension: %d strings: %d FP: %d"
+
+#~ msgid ""
+#~ "Floating point category values, using sequential integer for category"
+#~ msgstr ""
+#~ "Fließkomma Kategoriewerte -> verwende einen fortlaufenden Integer für die "
+#~ "Kategorien."
+
+#~ msgid "No category values, using sequential integer for category"
+#~ msgstr ""
+#~ "Keine Kategoriewerte -> verwende einen fortlaufenden Integer für die "
+#~ "Kategorien."
+
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "Übetrage Sites in eine Vektor-Punktkarte..."
+
+#~ msgid "%d sites written."
+#~ msgstr "%d Sites geschrieben."
+
+#~ msgid "Performing 1 arg map function on map %s"
+#~ msgstr "Führe 1-Argumentkartenfunktion auf der Karte <%s> aus."
+
+#~ msgid "Performing 2 arg map function on maps %s and %s"
+#~ msgstr "Führe 2-Argumentekartenfunktion auf den Karten <%s> und <%s> aus."
+
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Führe Karte <%s> + <%s> aus."
+
+#~ msgid "Can't call bad map-function"
+#~ msgstr "Kann schlechte Kartenfunktion nicht aufrufen."
+
+#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
+#~ msgstr "Schlechte Argumente für mapfunc %s (argc = %d)."
+
+#~ msgid "No function defined to perform map %c map"
+#~ msgstr "Keine Funktion definiert, um \"Karte %c Karte\" auszuführen."
+
+#~ msgid "Can't call bad num-function"
+#~ msgstr "Kann schlechte num-Funktion nicht aufrufen."
+
+#~ msgid "Bad arguments to numfunc %s"
+#~ msgstr "Schlechte Argumente für numfunc %s"
+
+#~ msgid "No function defined to perform ``number %c number''"
+#~ msgstr "Keine Funktion definiert, um \"Zahl %c Zahl\" auszuführen."
+
+#~ msgid "No function defined to perform ``point %c point''"
+#~ msgstr ""
+#~ "Es wurde keine Funktion definiert, um \"Punkt %c Punkt\" auszuführen."
+
+#~ msgid "Can't call bad any-function"
+#~ msgstr "Kann schlechte Any-Funktion nicht aufrufen."
+
+#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
+#~ msgstr "Schlechte Argumente für anyfunc %s (argc = %d)."
+
+#~ msgid "Can't call bad function"
+#~ msgstr "Kann schlechte Funktion nicht aufrufen."
+
+#~ msgid "Bad arguments to pointfunc %s"
+#~ msgstr "Schlechte Argumente für pointfunc %s"
+
+#~ msgid "Unable to create vector map"
+#~ msgstr "Kann die Vektorkarte nicht erzeugen"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Cache Größe (MiB)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "Unbekannter Rasterkartentyp."
diff --git a/locale/po/grassmods_el.po b/locale/po/grassmods_el.po
index 99da595..c79f131 100644
--- a/locale/po/grassmods_el.po
+++ b/locale/po/grassmods_el.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_el\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2009-02-19 10:29+0200\n"
 "Last-Translator: Vasilios Antoniou <vantoniou at gmail.com>\n"
 "Language-Team: Greek <grass-translations at lists.osgeo.org>\n"
@@ -250,6 +250,7 @@ msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε."
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -482,6 +483,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Σφάλμα κατά το κλείσομο ascii αρχείου"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -619,30 +625,30 @@ msgstr "Αδυναμία ανοίγματος OGR πηγή δεδομένων '%
 msgid "Unable to open database:"
 msgstr "Αδυναμία ανοίγματος βάσης δεδομενων"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr ""
 "Δεν έχει καθοριστεί η σύνδεση με τη βάση δεδομένων για το επίπεδο (layer) %d"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε."
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -653,6 +659,11 @@ msgstr ""
 msgid "Unable grant on table:"
 msgstr "Αδυναμία αντιγραφής πίνακα <%s>"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -781,7 +792,7 @@ msgstr "Αδυναμία ανοίγματος βάσης δεδομενων <%s>
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -859,17 +870,17 @@ msgstr "Όνομα χρήστη"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -903,39 +914,39 @@ msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύ
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -980,7 +991,7 @@ msgstr "Δίνει τη λίστα για όλους τους οδηγούς β
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1010,7 +1021,7 @@ msgstr "βάση δεδομένων, πίνακας ιδιοτήτων"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1104,10 +1115,10 @@ msgid "Unable to open database <%s>"
 msgstr "Αδυναμία ανοίγματος βάσης δεδομενων <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1295,11 +1306,11 @@ msgstr ""
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Αδυναμία ανοίγματος αρχείου <%s> για εγγραφή"
@@ -1333,10 +1344,10 @@ msgstr "Όνομα του δεύτερου ράστερ χάρτη για blendi
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Διαμόρφωση"
 
@@ -1345,7 +1356,7 @@ msgstr "Διαμόρφωση"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Κάθετος διαχωριστής εγγραφών εξόδου"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1353,7 +1364,7 @@ msgstr "Κάθετος διαχωριστής εγγραφών εξόδου"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Μην συμπεριλάβεται τα ονόματα των στηλών στην έξοδο"
 
@@ -1361,7 +1372,7 @@ msgstr "Μην συμπεριλάβεται τα ονόματα των στηλ
 msgid "Describe query only (don't run it)"
 msgstr "Περιγράφη μόνο το ερώτημα (δεν το τρέχει)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Οριζόντια έξοδος (αντί για κατακόρυφη)"
 
@@ -1411,6 +1422,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Όνομα του αρχείου που περιέχει SQL εντολές"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Αγνοεί τα SQL λάθη και συνεχίζει"
 
@@ -1565,7 +1577,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1681,7 +1692,7 @@ msgstr ""
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1689,15 +1700,15 @@ msgstr ""
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1786,7 +1797,7 @@ msgstr ""
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1828,7 +1839,7 @@ msgstr ""
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1841,26 +1852,27 @@ msgstr ""
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Αδυναμία ανοίγματος της βάσης δεδομένων <%s> με τον οδηγό <%s>"
@@ -1870,7 +1882,8 @@ msgid "Column type not supported (must be string)"
 msgstr ""
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2010,13 +2023,13 @@ msgstr ""
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2024,8 +2037,8 @@ msgstr ""
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2068,10 +2081,11 @@ msgstr ""
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2085,13 +2099,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2100,6 +2117,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2115,7 +2133,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2135,11 +2153,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2151,27 +2169,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2189,74 +2207,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2266,6 +2287,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2281,6 +2303,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2299,6 +2322,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2307,15 +2331,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2351,7 +2376,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr ""
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr ""
@@ -2915,69 +2940,70 @@ msgid "Vector map <%s> not found"
 msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
@@ -3038,12 +3064,13 @@ msgstr ""
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3166,7 +3193,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 msgid "distance"
 msgstr ""
@@ -3321,7 +3348,7 @@ msgid "Area:"
 msgstr ""
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr ""
@@ -3336,7 +3363,7 @@ msgstr ""
 msgid "No attribute table for layer %d"
 msgstr "Τύπωμα της δομή του πίνακα"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3349,15 +3376,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Αδυναμία ανοίγματος της βάσης δεδομένων <%s> με τον οδηγό <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr ""
@@ -3380,6 +3408,7 @@ msgid ""
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3387,6 +3416,7 @@ msgid "extract"
 msgstr ""
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 msgid "select"
 msgstr ""
@@ -3396,10 +3426,10 @@ msgstr ""
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 msgid "random"
 msgstr ""
 
@@ -3420,12 +3450,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr ""
 
@@ -3444,39 +3473,45 @@ msgstr ""
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3492,7 +3527,10 @@ msgstr ""
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3561,7 +3599,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3609,45 +3647,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3689,11 +3728,11 @@ msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
 msgid "Format <%s> does not support writing"
 msgstr ""
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3838,9 +3877,9 @@ msgstr "Όνομα εισαγώμενου διανυσματικού χάρτη
 msgid "Name for output file where to save current settings"
 msgstr "Όνομα του αρχείου που περιέχει SQL εντολές"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr ""
 
@@ -3861,7 +3900,7 @@ msgstr ""
 msgid "Print current status in shell script style"
 msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
@@ -3877,17 +3916,17 @@ msgid "%s= must be specified"
 msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 msgid "Supported formats:"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3897,66 +3936,67 @@ msgstr ""
 msgid "network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr ""
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -3968,10 +4008,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -3983,48 +4024,83 @@ msgstr ""
 msgid "Cost"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "διάνυσμα, πίνακας χρωμάτων"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+msgid "Layer with turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4033,10 +4109,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4052,8 +4128,8 @@ msgstr ""
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4082,22 +4158,22 @@ msgstr ""
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4106,17 +4182,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4127,7 +4203,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4137,7 +4213,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 msgid "geometry"
 msgstr ""
 
@@ -4188,17 +4264,17 @@ msgid "Unable to get category list <%s>"
 msgstr ""
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Οι απαιτούμενες παράμετροι <%s> δεν έχουν δοθεί"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr ""
@@ -4488,6 +4564,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Όνομα του αρχείου που περιέχει SQL εντολές"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4508,12 +4585,15 @@ msgstr "Όνομα του αρχείου που περιέχει SQL εντολ
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4669,11 +4749,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr ""
@@ -4808,9 +4888,9 @@ msgid "Remove existing color table"
 msgstr ""
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr ""
@@ -4871,7 +4951,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4887,8 +4967,7 @@ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δω
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -4914,6 +4993,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr ""
@@ -4939,7 +5019,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -4948,13 +5028,14 @@ msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος γι
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, fuzzy, c-format
 msgid "3D raster map <%s> not found"
@@ -4985,8 +5066,9 @@ msgstr ""
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5031,7 +5113,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
@@ -5085,6 +5167,7 @@ msgid "Point out of range"
 msgstr ""
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5093,15 +5176,17 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5194,14 +5279,15 @@ msgstr "Όνομα εξαγόμενου διανυσματικού χάρτη"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "Αποτέλεσμα:"
@@ -5394,14 +5480,14 @@ msgstr "ράστερ 3Δ, voxel"
 msgid "Input failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 msgid "Secpar_loop failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr ""
 
@@ -5442,9 +5528,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5473,7 +5559,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "ράστερ 3Δ, voxel"
+msgstr "Εγγραφή %s από %s..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5505,7 +5591,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:368
 #, fuzzy, c-format
 msgid "Mask raster map [%s] not found"
-msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
+msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 
 #: ../vector/v.vol.rst/user1.c:383
 #, fuzzy
@@ -5552,9 +5638,9 @@ msgstr "Σφάλμα κατά το κλείσομο ascii αρχείου"
 msgid "3D raster map <%s> created"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5565,83 +5651,119 @@ msgstr ""
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 msgid "steiner tree"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Δίνει τη λίστα όλων των πινάκων για μία δεδομένη βάση δεδομένων."
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, c-format
+msgid "Steiner tree costs = %f"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5661,17 +5783,19 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 msgid "points"
 msgstr ""
 
@@ -5701,9 +5825,9 @@ msgstr ""
 msgid "Name of column containing z coordinate"
 msgstr ""
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Πλήρες output"
@@ -5751,7 +5875,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Αδυναμία ανοίγματος κέρσορα '%s'"
@@ -5770,7 +5894,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr ""
@@ -5796,7 +5920,81 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 msgstr[1] "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Λάθος συντεταγμένες"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Άγνωστος τύπος"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5819,7 +6017,7 @@ msgstr[1] "Αδυναμία ανάγνωσης διανυσματικού χάρ
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5828,7 +6026,7 @@ msgstr[1] "Αδυναμία ανάγνωσης διανυσματικού χάρ
 msgid "statistics"
 msgstr "ράστερ 3Δ, στατιστικά"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6443,8 +6641,8 @@ msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
@@ -6501,12 +6699,12 @@ msgid "Breaking lines..."
 msgstr ""
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr ""
 
@@ -6515,11 +6713,11 @@ msgstr ""
 msgid "Merging lines..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr ""
 
@@ -6534,12 +6732,13 @@ msgstr ""
 msgid "Attribute not found"
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr ""
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr ""
@@ -6614,123 +6813,125 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Όνομα εισαγώμενων ράστερ χαρτών"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr ""
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Όνομα του αρχείου που περιέχει υπογραφές (signatures)"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 msgid "Writes z values to column"
 msgstr ""
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Τύπος"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr ""
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr ""
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr ""
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr ""
 
@@ -6774,7 +6975,7 @@ msgid "Name of existing raster map to be queried"
 msgstr ""
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Όνομα αρχείου εξαγωγής"
@@ -6787,80 +6988,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
+#: ../vector/v.what.rast/main.c:170
 #, fuzzy, c-format
-msgid "Column <%s> not found"
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, c-format
 msgid "%d records updated."
 msgstr ""
@@ -6868,14 +7067,14 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "ράστερ 3Δ, στατιστικά"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -6959,7 +7158,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr ""
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7013,6 +7212,150 @@ msgstr ""
 msgid "%d records updated"
 msgstr ""
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr ""
+"Δεν έχει καθοριστεί η σύνδεση με τη βάση δεδομένων για το επίπεδο (layer) %d"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "MySQL οδηγός: στήλη '%s', τύπος %d δεν υποστηρίζεται"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Αντιγραφή πίνακα απέτυχε"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Αντιγραφή πίνακα απέτυχε"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Η στήλη <%s> δεν βρέθηκε"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+msgid "Exports vector points as LAS point cloud"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "ράστερ 3D, voxel, εξαγωγή"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Η στήλη <%s> δεν βρέθηκε"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "Χρώμα"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Χρώμα"
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "διάνυσμα, πίνακας χρωμάτων"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7049,6 +7392,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, fuzzy, c-format
+msgid "Column <%s> not found"
+msgstr "Η στήλη <%s> δεν βρέθηκε"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7079,47 +7428,54 @@ msgstr ""
 msgid "No areas selected from vector map <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 #, fuzzy
 msgid "Color can be updated from database only if use=attr"
 msgstr "Χρώμα"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7179,15 +7535,17 @@ msgstr ""
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 msgid "Cache size for raster rows"
 msgstr ""
 
@@ -7226,7 +7584,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr ""
 
@@ -7244,11 +7602,15 @@ msgstr ""
 msgid "Get area %d failed"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+msgid "Failed to plot polygon"
+msgstr ""
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr ""
 
@@ -7278,12 +7640,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Νούμερο επιπέδου"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "Χρώμα"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7456,152 +7812,158 @@ msgstr ""
 msgid "Incompatible types"
 msgstr ""
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Όνομα εξαγόμενου διανυσματικού χάρτη"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Δίνει τη λίστα όλων των πινάκων για μία δεδομένη βάση δεδομένων."
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "δεν βρέθηκε"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, c-format
 msgid "No category for point at node %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Αδυναμία ανοίγματος αρχείου <%s> για εγγραφή"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 msgid "isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 
@@ -7799,14 +8161,15 @@ msgstr ""
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Όνομα αρχείου εξαγωγής"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "διάνυσμα, πίνακας χρωμάτων"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -7830,9 +8193,13 @@ msgstr "διάνυσμα, πίνακας χρωμάτων"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -7894,7 +8261,7 @@ msgstr ""
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 
@@ -7960,7 +8327,7 @@ msgstr ""
 "Αδυναμία προσθήκης σύνδεσης με βάση δεδομένων για τον διανυσματικό χάρτη <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8060,9 +8427,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Αδυναμία ανοίγματος αρχείου <%s> για εγγραφή"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Αδυναμία δημιουργίας καταλόγου για τον πίνακα <%s>, κλειδί <%s>"
@@ -8620,7 +8988,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -8641,7 +9009,7 @@ msgstr ""
 msgid "Resolving conflicts..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 msgid "generalization"
 msgstr ""
 
@@ -8666,198 +9034,201 @@ msgid "Performs vector based generalization."
 msgstr ""
 
 #: ../vector/v.generalize/main.c:100
+msgid "Error map with failed generalizations"
+msgstr ""
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 msgid "Lang Simplification Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "ράστερ 3Δ, voxel"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Αδυναμία αντιγραφής πίνακα <%s>"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Αδυναμία δημιουργίας διανυσματικού χάρτη <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, c-format
 msgid "Using threshold: %g %s"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -8929,8 +9300,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr ""
 
@@ -8943,13 +9314,13 @@ msgstr ""
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9138,14 +9509,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr ""
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
@@ -9194,14 +9565,6 @@ msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 msgid "Constructing 3D hull..."
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9278,7 +9641,9 @@ msgstr ""
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9680,6 +10045,188 @@ msgstr "Σφάλμα κατά την ανάγνωση του εύρους για
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.cluster/main.c:92
+msgid "cluster"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:93
+msgid "clump"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Εγγραφή %s από %s..."
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Εγγραφή %s από %s..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+msgid "Not enough points in input, nothing to do"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+msgid "Estimating maximum distance ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, c-format
+msgid "Standard deviation: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, c-format
+msgid "Estimated maximum distance: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "δεν βρέθηκε"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -9812,25 +10359,25 @@ msgstr "Αδυναμία λίστας βάσεων δεδομένων"
 msgid "Impossible to write to aux table"
 msgstr ""
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 msgid "network maintenance"
 msgstr ""
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr ""
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, c-format
 msgid "%d new points (nodes) written to output."
 msgstr ""
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
@@ -9869,7 +10416,7 @@ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -9882,14 +10429,14 @@ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr ""
@@ -9918,46 +10465,131 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Όνομα αρχείου εξαγωγής"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr ""
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Αντιγραφή πίνακα απέτυχε"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr ""
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Αδυναμία δημιουργίας διανυσματικού χάρτη <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr ""
+"Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr ""
+"Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Αδυναμία ανοίγματος της βάσης δεδομένων <%s> με τον οδηγό <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10085,7 +10717,7 @@ msgid "Categories already exist in layer %d"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr ""
 
@@ -10191,7 +10823,7 @@ msgstr ""
 msgid "Key column type is not integer"
 msgstr ""
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
@@ -10915,7 +11547,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11169,8 +11801,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr ""
 
@@ -11178,7 +11810,7 @@ msgstr ""
 msgid "Mapset containing input vector map"
 msgstr ""
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Η προεπιλεγμένη βάση δεδομένων δεν έχει καθοριστεί"
@@ -11188,7 +11820,7 @@ msgstr "Η προεπιλεγμένη βάση δεδομένων δεν έχε
 msgid "Name of input vector map to re-project"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr ""
 
@@ -11203,8 +11835,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr ""
 
@@ -11235,17 +11867,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr ""
@@ -11575,352 +12209,571 @@ msgid ""
 "Key column: %s\n"
 msgstr ""
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr ""
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr ""
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr ""
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr ""
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr ""
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr ""
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr ""
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Όνομα αρχείου εξαγωγής"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
-msgid "Import subregion only"
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+msgid "Import subregion only"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 msgid "If not specified, all points are imported"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+msgid "Import only n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "Νούμερο επιπέδου"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
+msgid "Limit import to the current region"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
-msgid "Limit import to the current region"
+#: ../vector/v.in.lidar/main.c:285
+msgid "Invert mask when selecting points"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Αδυναμία περιγραφής πίνακα <%s>"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Άγνωστος τύπος"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Νούμερο επιπέδου"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Αδυναμία δημιουργίας διανυσματικού χάρτη <%s>"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
+"Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.in.lidar/main.c:732
+#, c-format
+msgid "%llu input points were not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:734
+#, c-format
+msgid "%llu input points were outside of the selected area"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:736
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were outside of the area specified by mask"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
+#: ../vector/v.in.lidar/main.c:738
+#, c-format
+msgid "%llu input points were filtered out by return number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
+#: ../vector/v.in.lidar/main.c:740
+#, c-format
+msgid "%llu input points were filtered out by class number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
+#: ../vector/v.in.lidar/main.c:742
+#, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
 msgstr ""
-"Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../vector/v.in.lidar/main.c:606
-#, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Αδυναμία ανοίγματος της βάσης δεδομένων <%s> με τον οδηγό <%s>"
+#: ../vector/v.in.lidar/main.c:744
+#, c-format
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:747
+#, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
+msgid "%lu points imported (limit was %d)"
+msgstr "δεν βρέθηκε"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported"
 msgstr "δεν βρέθηκε"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:757
+#, c-format
+msgid "%lu input points were not valid"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:759
+#, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:761
+#, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
 #, c-format
-msgid "%d input points were not valid"
+msgid "%lu input points were filtered out by class number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
+#, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Τύπωμα της δομή του πίνακα"
+
+#: ../vector/v.in.lidar/main.c:780
 #, c-format
-msgid "%d input points were filtered out by class number"
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
 msgstr ""
 
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Αδυναμία ανοίγματος της βάσης δεδομένων <%s> με τον οδηγό <%s>"
+
 #: ../vector/v.external/main.c:55
 msgid ""
 "Creates a new pseudo-vector map as a link to an OGR-supported layer or a "
 "PostGIS feature table."
 msgstr ""
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr ""
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Αδυναμία περιγραφής πίνακα <%s>"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
@@ -11930,12 +12783,12 @@ msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Όνομα πίνακα εξαγωγής"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -11943,25 +12796,29 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Όνομα εξαγόμενου διανυσματικού χάρτη"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12141,137 +12998,137 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 msgid "Do not make caps at the ends of polylines"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 msgid "Transfer categories and attributes"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 msgid "Cleaning buffers..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
@@ -12536,36 +13393,45 @@ msgstr "Όνομα αρχείου εξαγωγής"
 msgid "%d features written to '%s'."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Όνομα τοποθεσία"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -12619,7 +13485,7 @@ msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13259,7 +14125,7 @@ msgstr ""
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -13548,45 +14414,54 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr ""
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Κάθετος διαχωριστής εγγραφών εξόδου"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 msgid "Region"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr ""
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr ""
@@ -13624,43 +14499,47 @@ msgstr ""
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
-msgid "Use either length or vertices"
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
 msgstr ""
 
 #: ../vector/v.split/main.c:108
+msgid "Use either length or vertices"
+msgstr ""
+
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Άγνωστος τύπος"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 msgid "Can not get projection units"
 msgstr ""
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, c-format
 msgid "Length in map units: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, c-format
 msgid "Length in meters: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 msgid "Number of vertices must be at least 2"
 msgstr ""
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -13774,7 +14653,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
@@ -13872,10 +14753,13 @@ msgid "Writing out vector columns..."
 msgstr ""
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -13886,6 +14770,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 msgid "aggregation"
@@ -14032,8 +14917,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr ""
 
@@ -14102,6 +14988,125 @@ msgstr ""
 msgid "Counting points quadrats..."
 msgstr "Εγγραφή %s από %s..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "δεν βρέθηκε"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+msgid "Copies only the given number of points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:199
+msgid "Minimal difference of z values"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#: ../vector/v.decimate/main.c:232
+msgid "Use z in grid decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14116,28 +15121,28 @@ msgstr ""
 msgid "Target location <%s> not found"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "Δεν επιτρέπεται η πρόσβαση"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "δεν βρέθηκε"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -14462,11 +15467,6 @@ msgid " Database connection not defined for layer <%s>"
 msgstr ""
 "Δεν έχει καθοριστεί η σύνδεση με τη βάση δεδομένων για το επίπεδο (layer) %d"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "MySQL οδηγός: στήλη '%s', τύπος %d δεν υποστηρίζεται"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -14550,314 +15550,318 @@ msgid_plural "%d records updated."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr ""
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Όνομα εισαγώμενου διανυσματικού χάρτη "
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Ελάχιστο μέγεθος κάθε κελιού"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Όνομα του δεύτερου ράστερ χάρτη για blending"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Νούμερο επιπέδου"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 msgid "If not given, all geometry columns from the input are used"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 msgid "List supported OGR formats and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Η θέση του κέρσοεα δεν υποστηρίζεται από τον οδηγό MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Χρώμα"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Αδυναμία δημιουργίας διανυσματικού χάρτη <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, c-format
 msgid "%d %s without geometry skipped"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 msgid "Cleaning polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -14865,115 +15869,115 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "ράστερ 3Δ, voxel"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Αδυναμία αντιγραφής πίνακα <%s>"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15185,6 +16189,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr ""
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -15339,19 +16348,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr ""
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr ""
 
@@ -15524,14 +16533,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr ""
@@ -15656,14 +16665,18 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+msgid "Create polyline from lines with same categories"
+msgstr ""
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 msgstr[1] "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16138,19 +17151,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16164,6 +17182,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16176,7 +17195,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -16332,6 +17351,7 @@ msgid "Unable to map image file"
 msgstr ""
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -16349,14 +17369,14 @@ msgstr ""
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16394,6 +17414,51 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+msgid "Manages display frames on the user's graphics monitor."
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+msgid "Create a new frame if doesn't exist and select"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -16411,7 +17476,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -16424,7 +17489,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -16496,21 +17561,26 @@ msgstr ""
 msgid ""
 "Uploads space time raster dataset values at positions of vector points to "
 "the table."
-msgstr "ράστερ 3Δ, στατιστικά"
+msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -16525,6 +17595,7 @@ msgstr "ράστερ 3Δ, στατιστικά"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -16616,6 +17687,92 @@ msgstr "Όνομα του πρώτου ράστερ χάρτη για blending"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Όνομα χάρτη "
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Αδυναμία κλεισίματος του χάρτη input"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -16744,7 +17901,7 @@ msgstr "Δημιουργεί μία κενή βάση δεδομένων"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 msgid "map management"
@@ -16757,8 +17914,8 @@ msgid "rename"
 msgstr "Όνομα χρήστη"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -16768,9 +17925,9 @@ msgid "input"
 msgstr "Αποτέλεσμα:"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -16784,6 +17941,76 @@ msgstr ""
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+msgid "contour"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Αδυναμία κλεισίματος του χάρτη input"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "διαγραφή ενός πίνακα ιδιοτήτων."
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -16792,7 +18019,7 @@ msgstr "Όνομα χάρτη "
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -16847,8 +18074,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -16959,74 +18187,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17061,44 +18258,27 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Αδυναμία λίστας βάσεων δεδομένων"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
-msgid "Number of r.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Αδυναμία κλεισίματος του χάρτη input"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
+msgid "Number of r.mapcalc processes to run in parallel"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
@@ -17197,8 +18377,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Όνομα αρχείου εξαγωγής"
+msgid "Name for output image (or text file for -t)"
+msgstr "Όνομα αρχείου εξαγωγής (ΜΗΝ προσθέσετε επέκταση αρχείου)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17214,6 +18394,54 @@ msgstr "Χρησιμοποιήστε συντεταγμένες χάρτη αν
 msgid "Use gnuplot for display"
 msgstr ""
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Χρησιμοποιήστε συντεταγμένες χάρτη αντί χψζ συντεταγμένες"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Όνομα του αρχείου που περιέχει SQL εντολές"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Δημιουργεί μία κενή βάση δεδομένων"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Αριθμός των δεδαδικών ψηφίων για τους αριθμούς υποδιαστολής"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17245,31 +18473,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -17444,6 +18651,20 @@ msgstr ""
 msgid "Output field separator"
 msgstr "Διαχωριστής πεδίων εξόδου"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Όνομα χάρτη "
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr ""
@@ -17541,8 +18762,14 @@ msgstr "Δημιουργεί μία κενή βάση δεδομένων"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Αδυναμία λίστας βάσεων δεδομένων"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+msgid "time management"
+msgstr ""
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
@@ -17552,7 +18779,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -17561,15 +18788,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Αδυναμία λίστας βάσεων δεδομένων"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -17612,7 +18839,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr ""
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 #, fuzzy
 msgid "Name for output file"
 msgstr "Όνομα αρχείου εξαγωγής"
@@ -17693,16 +18920,27 @@ msgstr "Όνομα αρχείου εξαγωγής"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -17778,12 +19016,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -17906,13 +19151,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -17922,12 +19166,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr ""
 
@@ -17942,7 +19186,7 @@ msgid "ASCII file containing input data"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr ""
 
@@ -17950,14 +19194,14 @@ msgstr ""
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr ""
 
@@ -17995,17 +19239,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Αδυναμία διαβάσματος εύρους fp για τον ραστερ χάρτη <%s>"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18045,19 +19289,15 @@ msgid ""
 "on the fly."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Όνομα εισαγώμενου διανυσματικού χάρτη "
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
-msgstr "Εξαγωγή όνομα οδηγού"
+msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Αδυναμία κλεισίματος του χάρτη εισαγωγής"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18151,7 +19391,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -18235,23 +19475,18 @@ msgstr "Όνομα χάρτη "
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Όνομα χάρτη "
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Αδυναμία κλεισίματος του χάρτη input"
@@ -18363,17 +19598,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Αριθμός των δεδαδικών ψηφίων για τους αριθμούς υποδιαστολής"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18381,10 +19620,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Όνομα χάρτη "
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -18493,74 +19728,90 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
-msgid "List available extensions in the GRASS Addons SVN repository"
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 msgid "Install"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Πίνακες συστήματος αντί πίνακες χρηστών"
@@ -18674,10 +19925,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr ""
@@ -18731,6 +19978,54 @@ msgstr ""
 msgid "Test name"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Όνομα του δεύτερου ράστερ χάρτη για blending"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+msgid "Write raster values as z coordinate"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -18797,6 +20092,16 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Η διάταξη της βάσης δεδομένων"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+msgid "Supported only for GTiff"
+msgstr ""
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr ""
@@ -18962,20 +20267,26 @@ msgid "Description of the space time dataset"
 msgstr "Αδυναμία λίστας βάσεων δεδομένων"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Αδυναμία λίστας βάσεων δεδομένων"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19019,13 +20330,13 @@ msgstr "ράστερ 3Δ, voxel"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Νούμερο επιπέδου"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19108,7 +20419,7 @@ msgstr "Όνομα χάρτη "
 msgid "Neighborhood size"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Αριθμός των δεδαδικών ψηφίων για τους αριθμούς υποδιαστολής"
@@ -19208,24 +20519,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr ""
 
@@ -19288,17 +20616,35 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+msgid "query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Όνομα του δεύτερου ράστερ χάρτη για blending"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr ""
 
@@ -19386,6 +20732,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -19399,11 +20746,15 @@ msgid "Sill value"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -19513,27 +20864,22 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 msgid "series"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Δημιουργεί μία κενή βάση δεδομένων"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -19568,7 +20914,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -19581,7 +20927,7 @@ msgid "Radius of buffer in raster cells"
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr ""
 
@@ -19599,11 +20945,11 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 msgid "Number of interpolation processes to run in parallel"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -19630,7 +20976,7 @@ msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -19656,6 +21002,17 @@ msgstr ""
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+"Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Αποτέλεσμα:"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -19666,19 +21023,11 @@ msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτ
 msgid "Vector map to which to join other table"
 msgstr "βάση δεδομένων, πίνακας ιδιοτήτων"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Νούμερο επιπέδου"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -19707,17 +21056,17 @@ msgstr "Αριθμός γραμμών που θα εμφανίζονται στ
 msgid "Imports space time raster dataset."
 msgstr "ράστερ 3Δ, στατιστικά"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Αδυναμία κλεισίματος του χάρτη εισαγωγής"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -19794,14 +21143,17 @@ msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -19832,11 +21184,11 @@ msgstr ""
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Αδυναμία διαβάσματος εύρους fp για τον ραστερ χάρτη <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Σφάλμα κατά την ανάγνωση του αρχείου ιστορικού"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -19844,8 +21196,8 @@ msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr ""
 
@@ -19897,6 +21249,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr ""
@@ -20051,9 +21404,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20079,7 +21433,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Αδυναμία δημιουργίας και λύσης του γραμμικού συστήματος"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Αδυναμία δημιουργίας raster χάρτη <%s>."
@@ -20146,6 +21503,139 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr ""
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Εγγραφή %s από %s..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "βάση δεδομένων, πίνακας ιδιοτήτων"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Χρώμα"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in map units"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+msgid "Unit of integration step"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Προεπιλογή"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Η προεπιλεγμένη βάση δεδομένων δεν έχει καθοριστεί"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Νούμερο επιπέδου"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Αδυναμία περιγραφής πίνακα <%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -20282,11 +21772,11 @@ msgstr "Αδυναμία ανοίγματος προσωρινού αρχείο
 msgid "3D raster map for which to modify null values"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -20311,7 +21801,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: σφάλμα κατά το άνοιγμα προσωρινού αρχείου"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 msgid "null data"
 msgstr ""
 
@@ -20319,6 +21809,81 @@ msgstr ""
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "ράστερ 3Δ, voxel"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "Όνομα εισαγώμενων ράστερ χαρτών"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Ο 3Δ χάρτης raster  <%s> δεν βρέθηκε"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+msgid "Transform"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -20369,13 +21934,13 @@ msgstr ""
 msgid "Update range"
 msgstr ""
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr ""
@@ -20431,7 +21996,7 @@ msgstr "Σφάλμα κατά την ανάγνωση του εύρους για
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Φόρτωση δεδομένων... (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Σφάλμα κατά το κλείσιμο του g3d αρχείου."
@@ -20797,7 +22362,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -20807,7 +22372,7 @@ msgstr ""
 msgid "Aggregate operation"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr ""
@@ -20838,6 +22403,36 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Δεν γίνεται η μετακίνηση του κέρσορα."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "ράστερ 3Δ, στατιστικά"
+
+#: ../raster3d/r3.gradient/main.c:47
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Δεν γίνεται η μετακίνηση του κέρσορα."
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -21168,38 +22763,38 @@ msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύ
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -21487,13 +23082,13 @@ msgid "Unknown operation '%s'"
 msgstr "Άγνωστος τύπος"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
@@ -21561,9 +23156,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr ""
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr ""
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "Η στήλη <%s> δεν βρέθηκε"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -21671,8 +23266,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -21924,9 +23519,9 @@ msgstr ""
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr ""
 
@@ -21938,15 +23533,15 @@ msgstr ""
 msgid "File name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -21956,7 +23551,7 @@ msgid "Remove base raster maps"
 msgstr "Όνομα χάρτη υποβάθρου ράστερ"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Αδυναμία εκκίνησης του οδηγού <%s>"
@@ -22002,75 +23597,65 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr ""
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 msgid "'.' for current region; '*' for default region"
 msgstr ""
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr ""
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr ""
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr ""
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
@@ -22263,56 +23848,56 @@ msgstr ""
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -22524,38 +24109,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Όνομα εισαγώμενου διανυσματικού χάρτη "
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -22853,10 +24459,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr ""
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr ""
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23013,7 +24615,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr ""
 
@@ -23417,7 +25019,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -23607,144 +25209,144 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr ""
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Αδυναμία κλεισίματος του χάρτη εισαγωγής"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr ""
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Όνομα εξαγόμενου διανυσματικού χάρτη"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr ""
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr ""
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr ""
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Γραμμές: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Βόρεια: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Νότια: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Δυτικά: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Ανατολικά: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "ΑΔ-res: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "ΒΝ-res: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Αποτέλεσμα:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr ""
 
@@ -23798,12 +25400,6 @@ msgstr "Σφάλμα κατά την ανάγνωση του εύρους για
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr ""
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -23829,22 +25425,22 @@ msgstr ""
 msgid "Raster map <%s> not found in current mapset"
 msgstr ""
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr ""
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr ""
 
@@ -24587,7 +26183,7 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "Δεν μπορώ να ανοίξω την βάση δεδομένων %s"
@@ -24786,8 +26382,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr ""
@@ -24869,12 +26465,12 @@ msgstr ""
 msgid "Can't get cell header"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -25060,17 +26656,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "Αριθμός γραμμών που θα εμφανίζονται στο υπόμνημα."
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr ""
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -25095,7 +26687,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "Λάθος συντεταγμένες"
@@ -25105,15 +26697,15 @@ msgstr "Λάθος συντεταγμένες"
 msgid "Invalid vrange"
 msgstr "Λάθος συντεταγμένες"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -25135,7 +26727,7 @@ msgid "Reading input data..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -25178,16 +26770,16 @@ msgstr ""
 msgid "Writing to output raster map..."
 msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -25338,11 +26930,6 @@ msgstr ""
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Η διάταξη της βάσης δεδομένων"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -25872,105 +27459,110 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr ""
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr ""
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "Όνομα υπάρχοντως 3Δ ράστερ χάρτη"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
@@ -26291,7 +27883,7 @@ msgstr ""
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Αδυναμία ανοίγματος διανυσματικού χάρτη <%s>"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -26375,85 +27967,173 @@ msgstr ""
 msgid "File <%s> created"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Όνομα του αρχείου που περιέχει υπογραφές (signatures)"
+
+#: ../raster/r.in.lidar/main.c:175
+msgid "Filter range for intensity values (min,max)"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Αδυναμία διαβάσματος εύρους fp για τον ραστερ χάρτη <%s>"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Η στήλη <%s> δεν βρέθηκε"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Άγνωστος τύπος"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Αδυναμία ανοίγματος αρχείου <%s> για εγγραφή"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Μετατρέπει ένα 3Δ επίπεδο ράστερ χάρτη σε ένα ASCII αρχείο κειμένου"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Εγγραφή %s από %s..."
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Άγνωστος τύπος"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -26588,7 +28268,7 @@ msgstr "[%s]: Δεν υπάρχει τέτοιο χρώμα"
 msgid "Converting <%s>..."
 msgstr "Εγγραφή %s από %s..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr ""
@@ -26691,7 +28371,7 @@ msgid "There are no valid locations in the current region"
 msgstr ""
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -27253,7 +28933,7 @@ msgstr "[%s]: Δεν υπάρχει τέτοιο χρώμα"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -27675,7 +29355,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -27697,11 +29377,6 @@ msgstr "Κωδικός"
 msgid "Unable to write to temp file"
 msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -27817,7 +29492,7 @@ msgid "Writing output raster map..."
 msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -27828,42 +29503,42 @@ msgstr ""
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Λάθος συντεταγμένες"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Λάθος συντεταγμένες"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -27952,22 +29627,22 @@ msgid "Invalid map type"
 msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -28075,23 +29750,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -28099,8 +29774,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -28593,216 +30268,220 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Αποτέλεσμα:"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη (saturation)"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη (blue)"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Ελάχιστο μέγεθος κάθε κελιού"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Αριθμός γραμμών που θα εμφανίζονται στο υπόμνημα."
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+msgid "Stream power index a * tan(b)"
+msgstr ""
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 msgid "The basin threshold must be a positive number."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -28810,19 +30489,27 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+msgid "Closing TCI and SPI maps"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 msgid "Closing TCI map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+msgid "Closing SPI map"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -28850,30 +30537,30 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 msgid "resample"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr ""
@@ -29261,7 +30948,7 @@ msgstr ""
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr ""
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr ""
@@ -29636,7 +31323,7 @@ msgid ""
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -29651,11 +31338,22 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -29929,33 +31627,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -30231,31 +31929,11 @@ msgstr ""
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr ""
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr ""
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 msgid "Contour levels"
 msgstr ""
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr ""
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -30849,50 +32527,51 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Αδυναμία δημιουργίας και λύσης του γραμμικού συστήματος"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 msgid "Expression"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 msgid "File containing expression(s) to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 msgid "Seed for rand() function"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 msgid "parse error"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr ""
@@ -30942,80 +32621,80 @@ msgstr ""
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr ""
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -31198,21 +32877,21 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -31250,14 +32929,6 @@ msgstr ""
 msgid "Band to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -31280,7 +32951,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Αδυναμία υπολογισμού κέντρων πολυγώνου για την επιφάνεια %d"
@@ -31300,7 +32971,7 @@ msgstr ""
 msgid "Reading band %d of %d..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr ""
@@ -31369,190 +33040,210 @@ msgstr ""
 msgid "Link to raster map <%s> created."
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Παράγει στατιστικά όγκου για 3Δ ράστερ χάρτες."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Όνομα εισαγώμενου διανυσματικού χάρτη "
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 msgid "Band(s) to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Αδυναμία λίστας βάσεων δεδομένων"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Αδυναμία δημιουργίας raster χάρτη <%s>."
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Όνομα εισαγώμενου διανυσματικού χάρτη "
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Αδυναμία περιγραφής πίνακα <%s>"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr ""
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Τυπώνει τον πίνακα και κλεινει (έξοδος)"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Ο αριθμός των υποπεριοχών πρέπει να είναι μεγαλύτερος ή ίσος του 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Αδυναμία ανοίγματος OGR πηγή δεδομένων '%s'"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Φόρτωση δεδομένων... (%dx%dx%d)"
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Αδυναμία δημιουργίας raster χάρτη <%s>."
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
@@ -31672,7 +33363,7 @@ msgstr ""
 msgid "Writing topographic index map..."
 msgstr ""
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Αριθμός γραμμών που θα εμφανίζονται στο υπόμνημα."
@@ -31767,33 +33458,33 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 msgid "patching"
 msgstr ""
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
 msgstr ""
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr ""
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr ""
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr ""
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
@@ -31862,36 +33553,6 @@ msgstr "ράστερ 3Δ, voxel"
 msgid "Converts a raster map into a vector map."
 msgstr "Μετατρέπει ένα 3Δ επίπεδο ράστερ χάρτη σε ένα ASCII αρχείο κειμένου"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Όνομα του δεύτερου ράστερ χάρτη για blending"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-msgid "Write raster values as z coordinate"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Αδυναμία ανάγνωσης αρχείου χρώματος για τον ράστερ χάρτη <%s>"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -32385,11 +34046,6 @@ msgstr ""
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr ""
@@ -32677,7 +34333,7 @@ msgstr ""
 msgid "Name for output raster map(s)"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr ""
 
@@ -32701,7 +34357,7 @@ msgstr ""
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
@@ -33027,7 +34683,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 msgid "landscape structure analysis"
 msgstr ""
@@ -33051,7 +34707,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr ""
@@ -33070,7 +34726,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 msgid "patch index"
 msgstr ""
 
@@ -33214,7 +34870,7 @@ msgstr ""
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr ""
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 
@@ -33379,11 +35035,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Αδυναμία διαβάσματος εύρους fp για τον ραστερ χάρτη <%s>"
@@ -33595,21 +35251,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, c-format
+msgid "Using Linke constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, c-format
+msgid "Using slope constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, c-format
+msgid "Using aspect constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -33635,76 +35331,84 @@ msgstr ""
 msgid "Print compression information and data type of input map(s)"
 msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
+msgstr ""
+
+#: ../raster/r.compress/main.c:221
+msgid "same size"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
+msgid "Uncompressing <%s>"
+msgstr "Δεν επιτρέπεται η πρόσβαση"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Δεν επιτρέπεται η πρόσβαση"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Δεν επιτρέπεται η πρόσβαση"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -33736,50 +35440,50 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 msgid "kernel filter"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
@@ -34186,20 +35890,25 @@ msgstr[1] "Αδυναμία υπολογισμού κέντρων πολυγών
 msgid "Calculating %s"
 msgstr "Αδυναμία σκαναρίσματος χρόνου: "
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "ράστερ 3Δ, voxel"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Νούμερο επιπέδου"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -34334,7 +36043,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr ""
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr ""
 
@@ -34453,15 +36162,10 @@ msgid "Starting and ending coordinates"
 msgstr ""
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr ""
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "κανένα"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -34490,8 +36194,8 @@ msgid "Name of monitor to start"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -34553,46 +36257,64 @@ msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύ
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Εκτυπώνει τις τρέχουσες παραμέτρους σύνδεσης και κλείνει"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 msgid "Disable true colors"
 msgstr ""
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
@@ -34602,65 +36324,75 @@ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δω
 msgid "Monitor <%s> is not running"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "Η στήλη <%s> δεν βρέθηκε"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Αδυναμία περιγραφής πίνακα <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Η στήλη <%s> δεν βρέθηκε"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Αδυναμία ανοίγματος OGR πηγή δεδομένων '%s'"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr ""
 "Ο διανυσματικός χάρτης <%s> υπάρχει ήδη και θα αντικατασταθεί (overwritten)"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Αδυναμία περιγραφής πίνακα <%s>"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Εξαγωγή όνομα οδηγού"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, c-format
 msgid "Monitor <%s> already running"
 msgstr ""
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Σφάλμα ανοίγματος 3Δ ράστερ χάρτη <%s>"
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
 #: ../display/d.mon/select.c:14
 #, c-format
 msgid "Monitor <%s> is already selected"
 msgstr ""
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 msgid "List of running monitors:"
 msgstr ""
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Η στήλη <%s> δεν βρέθηκε"
-
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
 msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+
 #: ../display/d.erase/main.c:33
 msgid ""
 "Erases the contents of the active graphics display frame with user defined "
@@ -34763,25 +36495,43 @@ msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 msgid "[%s]: illegal value specified"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 msgid "map annotations"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Αποτέλεσμα:"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -34789,7 +36539,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -34797,7 +36547,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -34871,11 +36621,6 @@ msgstr ""
 msgid "Colorize features according color definition column"
 msgstr "Νούμερο επιπέδου"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Χρώμα"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -34885,7 +36630,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr ""
 
@@ -35411,35 +37156,35 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Λάθος συντεταγμένες"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 msgid "Displays information about the active display monitor."
 msgstr ""
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr ""
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -35683,14 +37428,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr ""
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr ""
@@ -35752,7 +37489,7 @@ msgstr ""
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr ""
 
@@ -35788,12 +37525,21 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+msgid "Create 3D charts"
+msgstr ""
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 msgid ""
 "Displays a legend for a 2D or 3D raster map in the active frame of the "
@@ -35835,14 +37581,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Αποτέλεσμα:"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr ""
@@ -35926,11 +37665,12 @@ msgstr "Χρώμα"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -35942,34 +37682,90 @@ msgstr ""
 msgid "North arrow style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Χρώμα"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -35984,69 +37780,69 @@ msgstr ""
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 #, fuzzy
 msgid "Type of existing raster aspect map"
 msgstr "Τύπος"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Χρώμα για τον σχεδιασμό βελών"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Χρώμα για τον σχεδιασμό βελών"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Χρώμα για τον σχεδιασμό Χ's  (Null values)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Χρώμα για την απεικόνιση άγνωστης πληροφορίας"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr ""
 
@@ -36308,56 +38104,42 @@ msgstr "Χρώμα"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Η στήλη <%s> δεν βρέθηκε"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Αδυναμία ανοίγματος βάσης δεδομενων <%s>"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Αδυναμία ανάγνωσης αρχείου υπογραφής <%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -36430,202 +38212,216 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr "Όνομα του αρχείου που περιέχει SQL εντολές"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Η στήλη <%s> δεν βρέθηκε"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "<%s> είναι μη επιτρεπτό όνομα αρχείου"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Όνομα τοποθεσία"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Τύπος"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, c-format
 msgid "Group:    %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, c-format
 msgid "Subgroup: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Αδυναμία ανάγνωσης αρχείου υπογραφής <%s>"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, c-format
 msgid "Region%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Τύπος"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Παράμετροι"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
-msgstr "Νούμερο επιπέδου"
+msgstr "ράστερ 3Δ, voxel"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Αδυναμία δημιουργίας καταλόγου για τον πίνακα <%s>, κλειδί <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -36919,8 +38715,8 @@ msgid "radiance"
 msgstr "ράστερ 3Δ, στατιστικά"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr ""
 
@@ -37278,354 +39074,398 @@ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 msgid "group <%s> references the following subgroups\n"
 msgstr "Η στήλη <%s> δεν βρέθηκε"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Όνομα χάρτη υποβάθρου ράστερ"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "ράστερ 3Δ, voxel"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Ascii ράστερ χάρτης που θα εισαχθεί"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 msgid "mod09: Atmospheric Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -37824,7 +39664,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr ""
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr ""
@@ -38177,108 +40017,113 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Εκτός μνήμης"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
+
+#: ../imagery/i.segment/watershed.c:19
+msgid "Watershed is not yet implemented"
+msgstr ""
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Χάρτης επαναφόρτισης σε  m^3/s"
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, c-format
 msgid "Candidate flag is already %s"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Βάση δεδομένων, SQL"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Σφάλμα κατά την ανάγνωση του εύρους για [%s]"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Νούμερο των υποπεριοχών για συλλογή στατιστικών από αυτά"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Αδυναμία κλεισίματος του εξαγόμενου χάρτη"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -38351,60 +40196,76 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 msgid "Invalid similarity method"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Ο 3Δ ράστερ χάρτης <%s> δεν βρέθηκε"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 msgid "Invalid number of iterations, 100 will be used"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 msgid "Invalid number of MB, 300 will be used"
 msgstr ""
 
+#: ../imagery/i.segment/mean_shift.c:42
+msgid "Mean shift is not yet implemented"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -38468,7 +40329,7 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (green)"
 msgid "Name for output raster map (blue)"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη (blue)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -38520,7 +40381,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -39338,49 +41199,53 @@ msgstr "Η στήλη <%s> δεν βρέθηκε"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 msgid "albedo"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 msgid "Computes broad band albedo from surface reflectance."
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
@@ -39657,6 +41522,10 @@ msgstr ""
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -40039,6 +41908,34 @@ msgid "Name for output raster map (saturation)"
 msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 
 #, fuzzy
+#~ msgid "<%s> already compressed"
+#~ msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "δεν βρέθηκε"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Νούμερο επιπέδου"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Νούμερο επιπέδου"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Νούμερο επιπέδου"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Λάθος συντεταγμένες"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "διαγραφή ενός πίνακα ιδιοτήτων."
+
+#, fuzzy
 #~ msgid "Monthly minimum temperatures"
 #~ msgstr "Όνομα χάρτη "
 
@@ -40079,54 +41976,22 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgstr "Όνομα του δεύτερου ράστερ χάρτη για blending"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Όνομα ράστερ χάρτη υψομέτρου"
+#~ msgid "Could not rewind input file"
+#~ msgstr "Αδυναμία ανοίγματος του χάρτη raster <%s>"
 
 #, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Όνομα ράστερ χάρτη υψομέτρου"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr "Όνομα ράστερ χάρτη υψομέτρου"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Όνομα χάρτη υποβάθρου ράστερ"
 
 #, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Αριθμός των δεδαδικών ψηφίων για τους αριθμούς υποδιαστολής"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
 
 #, fuzzy
 #~ msgid "output map <%s> exists"
 #~ msgstr "Ο διανυσματικός χάρτης <%s> δεν βρέθηκε"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Όνομα χάρτη υποβάθρου ράστερ"
-
-#, fuzzy
-#~ msgid "Input options"
-#~ msgstr "Αποτέλεσμα:"
-
-#, fuzzy
 #~ msgid "Output options"
 #~ msgstr "Αποτέλεσμα:"
 
@@ -40143,72 +42008,36 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgstr "Ο προεπιλεγμένος οδηγός δεν έχει καθοριστεί"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "Ο χάρτης raster  <%s> δεν βρέθηκε"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Αδυναμία δημιουργίας καταλόγου για τον πίνακα <%s>, κλειδί <%s>"
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Όνομα αρχείου εξαγωγής"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
 
 #, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Όνομα αρχείου εξαγωγής"
+#~ msgid "Env file not found"
+#~ msgstr "Η στήλη <%s> δεν βρέθηκε"
 
 #, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Όνομα αρχείου εξαγωγής"
+#~ msgid "PID file not found"
+#~ msgstr "Η στήλη <%s> δεν βρέθηκε"
 
 #, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Όνομα αρχείου εξαγωγής"
+#~ msgid "Command file not found"
+#~ msgstr "Η στήλη <%s> δεν βρέθηκε"
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
+#~ msgid "Name for output image"
 #~ msgstr "Όνομα αρχείου εξαγωγής"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
-
-#, fuzzy
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Είτε ένα στανταρ όνομα χρώματος ή συνδυασμός R:G:B"
-
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Χρώμα για το κείμενο"
-
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Χρώμα κανένα"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Αδυναμία δημιουργίας καταλόγου για τον πίνακα <%s>, κλειδί <%s>"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "Αδυναμία φόρτωσης δεδομένων πίνακα <%s>"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Ο προεπιλεγμένος οδηγός δεν έχει καθοριστεί"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (red)"
 
 #, fuzzy
 #~ msgid ""
@@ -40240,37 +42069,39 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgstr "Χρώμα"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (red)"
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "ράστερ 3Δ, στατιστικά"
+#~ msgid "Default: input"
+#~ msgstr "Ο προεπιλεγμένος οδηγός δεν έχει καθοριστεί"
 
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+#~ msgid "Text color or \"none\""
+#~ msgstr "κανένα"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Χρώμα για το κείμενο"
 
 #, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Χρώμα κανένα"
 
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Cache size (MiB)"
+#, fuzzy
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Είτε ένα στανταρ όνομα χρώματος ή συνδυασμός R:G:B"
 
 #, fuzzy
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "Αδυναμία ανοίγματος προσωρινού αρχείου"
+
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Το στοιχείο char αντιπροσωπεύει κελό χωρίς δεδομένα"
 
 #, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Όνομα αρχείου εξαγωγής (ΜΗΝ προσθέσετε επέκταση αρχείου)"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -40283,21 +42114,6 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgstr[1] "Χάρτης επαναφόρτισης σε  m^3/s"
 
 #, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Όνομα τοποθεσία"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Το στοιχείο char αντιπροσωπεύει κελό χωρίς δεδομένα"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
-
-#, fuzzy
 #~ msgid "String to represent no data cell"
 #~ msgstr "Το στοιχείο char αντιπροσωπεύει κελό χωρίς δεδομένα"
 
@@ -40309,8 +42125,14 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgstr "Δείκτης κενής τιμής"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "ράστερ 3Δ, voxel"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+
+#, fuzzy
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Όνομα αρχείου εξαγωγής (ΜΗΝ προσθέσετε επέκταση αρχείου)"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -40329,6 +42151,69 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgstr "Όνομα εξαγόμενου ράστερ χάρτη"
 
 #, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Χρώμα κανένα"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Χρώμα κανένα"
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Χρώμα για την απεικόνιση άγνωστης πληροφορίας"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Χρώμα κανένα"
+
+#~ msgid "Layer number"
+#~ msgstr "Νούμερο επιπέδου"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Όνομα τοποθεσία"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Όνομα αρχείου εξαγωγής"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Όνομα αρχείου εξαγωγής"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Όνομα αρχείου εξαγωγής"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Όνομα αρχείου εξαγωγής"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Όνομα αρχείου εξαγωγής"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "ράστερ 3Δ, στατιστικά"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "ράστερ 3Δ, voxel"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Όνομα εισαγώμενου ράστερ χάρτη "
 
@@ -40343,5 +42228,21 @@ msgstr "Όνομα εξαγόμενου ράστερ χάρτη (saturation)"
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Χρώμα "
 
-#~ msgid "Layer number"
-#~ msgstr "Νούμερο επιπέδου"
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Αδυναμία δημιουργίας πίνακα <%s>"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "Είτε 'from_table' ή 'select' επιλογή πρέπει να δωθεί."
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Αδυναμία ανάγνωσης διανυσματικού χάρτη"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Cache size (MiB)"
diff --git a/locale/po/grassmods_es.po b/locale/po/grassmods_es.po
index c8269b1..86e1edd 100644
--- a/locale/po/grassmods_es.po
+++ b/locale/po/grassmods_es.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-07-18 12:34-0500\n"
 "Last-Translator: \n"
 "Language-Team: Español <grass-translations at lists.osgeo.org>\n"
@@ -227,6 +227,7 @@ msgstr "Capa OGR <%s> no encontrada"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -445,6 +446,11 @@ msgstr "Error en sqlite3_step():"
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr "SQLITE db ocupado, esperando por %d segundos..."
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Error en sqlite3_step():"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -569,27 +575,27 @@ msgstr "No se ha podido crear directorio '%s' para base de datos sqlite"
 msgid "Unable to open database:"
 msgstr "No se ha podido abrir bsae de datos:"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 msgid "SQLite database connection is still busy"
 msgstr "Conexión a la base de datos SQLite aún está ocupada"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, c-format
 msgid "Database <%s> already exists"
 msgstr "La base de datos <'%s'> ya existe"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 msgid "Unable to create database:"
 msgstr "No se ha podido crear la base de datos:"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, c-format
 msgid "Database <%s> not found"
 msgstr "Base de datos <%s> no encontrada"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -600,6 +606,11 @@ msgstr "No se puede crear el índice"
 msgid "Unable grant on table:"
 msgstr "No se puede copiar la tabla"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "No se puede establecer el tamaño"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr "No es posible explorar la marca de tiempo (timestamp)(ni idea de cómo procesar el huso horario):"
@@ -708,7 +719,7 @@ msgstr "No se puede eliminar base de datos <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -783,17 +794,17 @@ msgstr "Nombre de usuario"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Configuraciones"
 
@@ -825,39 +836,39 @@ msgstr "Mostrar la configuración de la conexión y salir"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -899,7 +910,7 @@ msgstr "Enlista todos los controladores de bases de datos."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -928,7 +939,7 @@ msgstr "tabla de atributos"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr "SQL"
 
@@ -1016,10 +1027,10 @@ msgid "Unable to open database <%s>"
 msgstr "No se puede abrir la base de datos <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1193,11 +1204,11 @@ msgstr "falló"
 msgid "succeeded"
 msgstr "conseguido"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "No se puede abrir el archivo <%s> para escribir"
@@ -1229,10 +1240,10 @@ msgstr "Nombre de la tabla a consultar"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Formato"
 
@@ -1240,7 +1251,7 @@ msgstr "Formato"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Separador de registros vertical (necesita la opción -v)"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1248,7 +1259,7 @@ msgstr "Separador de registros vertical (necesita la opción -v)"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Nombre para el archivo de salida (si se omite o \"-\" salida a stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "No incluir nombres de columna en la salida"
 
@@ -1256,7 +1267,7 @@ msgstr "No incluir nombres de columna en la salida"
 msgid "Describe query only (don't run it)"
 msgstr "Sólo describir la consulta (no ejecutarla)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Salida vertical (en vez de horizontal)"
 
@@ -1303,6 +1314,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Nombre del archivo que contiene sentencia(s) SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignorar errores SQL y continuar"
 
@@ -1453,7 +1465,6 @@ msgstr "Rotar impresión 90 grados"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 msgid "Output settings"
@@ -1567,7 +1578,7 @@ msgstr "No se pueden cargar datos de la tabla"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1575,15 +1586,15 @@ msgstr "No se pueden cargar datos de la tabla"
 msgid "Error in pj_do_proj"
 msgstr "Error en pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "No se pueden obtener los valores clave de la proyección de la localización actual"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1669,7 +1680,7 @@ msgstr "No se puede crear el archivo de máscara PostScript temporal."
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1711,7 +1722,7 @@ msgstr "No se puede obtener información de la capa para el mapa vectorial"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1724,26 +1735,27 @@ msgstr "No se puede obtener información de la capa para el mapa vectorial"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "No se puede abrir la base de datos <%s> por el controlador <%s>"
@@ -1753,7 +1765,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Tipo de columna no soportado (debe ser cadena)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -1889,13 +1902,13 @@ msgstr "No se puede abrir el archivo de máscaras PostScript temporal."
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -1903,8 +1916,8 @@ msgstr "No se puede abrir el archivo de máscaras PostScript temporal."
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -1947,10 +1960,11 @@ msgstr "visualización"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr "gráficas"
@@ -1964,13 +1978,16 @@ msgstr "gráficas"
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -1979,6 +1996,7 @@ msgstr "gráficas"
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -1994,7 +2012,7 @@ msgstr "gráficas"
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2014,11 +2032,11 @@ msgstr "gráficas"
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2030,27 +2048,27 @@ msgstr "gráficas"
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2068,74 +2086,77 @@ msgstr "gráficas"
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "ráster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2145,6 +2166,7 @@ msgstr "ráster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2160,6 +2182,7 @@ msgstr "ráster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2178,6 +2201,7 @@ msgid "vector"
 msgstr "vectorial"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2186,15 +2210,16 @@ msgstr "vectorial"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 msgid "raster3d"
@@ -2226,7 +2251,7 @@ msgstr "Altura del punto de observación no facilitada, utilizando valor calcula
 msgid "Unsupported output format"
 msgstr "Formado de salida no soportado"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Archivo <%s> creado"
@@ -2772,69 +2797,70 @@ msgid "Vector map <%s> not found"
 msgstr "Mapa vectorial <%s> no encontrado"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "No se puede abrir el mapa vectorial <%s>"
@@ -2894,12 +2920,13 @@ msgstr "No hay puntos de control activos"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3021,7 +3048,7 @@ msgstr "Mostrar coeficientes de matriz de transformación"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 msgid "distance"
 msgstr "distancia"
@@ -3174,7 +3201,7 @@ msgid "Area:"
 msgstr "Área:"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Escribiendo atributos..."
@@ -3189,7 +3216,7 @@ msgstr "Escribiendo tabla de atributos para capa %d"
 msgid "No attribute table for layer %d"
 msgstr "No se ha encontrado tabla de atributos para capa %d"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3202,15 +3229,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "No se puede abrir la base de datos <%s> con el controlador <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "No se pueden otorgar privilegios sobre la tabla <%s>"
@@ -3230,6 +3258,7 @@ msgid "Topology level required for extracting areas for OGR layers. Areas will b
 msgstr "Nivel de topología es requerido para extraer áreas para capas OGR. Las áreas no serán procesadas."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3237,6 +3266,7 @@ msgid "extract"
 msgstr "extraer"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 msgid "select"
 msgstr "seleccionar"
@@ -3246,10 +3276,10 @@ msgstr "seleccionar"
 msgid "dissolve"
 msgstr "disolver"
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 msgid "random"
 msgstr "aleatorio"
 
@@ -3268,12 +3298,11 @@ msgstr "No copiar atributos (ver también el parámetro 'new')"
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Atributos"
 
@@ -3292,39 +3321,45 @@ msgstr "Invertir selección"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3340,7 +3375,10 @@ msgstr "Invertir selección"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3407,7 +3445,7 @@ msgstr "Entrada de texto ignorada: %s"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3448,45 +3486,46 @@ msgstr "La categoría aleatoria count debe ser más pequeña que el elemento cou
 msgid "Random category count is larger or equal to uniq <%s> feature category count %d"
 msgstr "La categoría aleatoria count es mayor o igual que uniq <%s> elemento categoría count %d"
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3524,11 +3563,11 @@ msgstr "Formato <%s> no soportado"
 msgid "Format <%s> does not support writing"
 msgstr "Formato <%s> no soporta escritura"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3670,9 +3709,9 @@ msgstr "Nombre de directorio de entrada del cual leer configuraciones"
 msgid "Name for output file where to save current settings"
 msgstr "Nombre de archivo de salida donde guardar configuraciones actuales"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Listar los formatos soportados y salir"
 
@@ -3692,7 +3731,7 @@ msgstr "Mostrar estatus actual"
 msgid "Print current status in shell script style"
 msgstr "Mostrar estatus actual en estilo de script de consola de comandos"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "%s= y %s=/%s= son mutuamente excluyentes"
@@ -3708,17 +3747,17 @@ msgid "%s= must be specified"
 msgstr "%s= debe ser especificado"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 msgid "Supported formats:"
 msgstr "Formatos soportados:"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3728,65 +3767,66 @@ msgstr "Formatos soportados:"
 msgid "network"
 msgstr "red"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr "ruta más corta"
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Encuentra la ruta más corta en una red vectorial."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Tipo de arco"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Capa de arco"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Tipo de arco"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "Capa de nodo"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid "Name of file containing start and end points. If not given, read from stdin"
 msgstr "Nombre del archivo que contiene los puntos inicial y final. Si no se indica, se leerá de stdin."
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Delante del arco/ ambas direcciones de la columna de coste (número)"
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -3798,10 +3838,11 @@ msgstr "Delante del arco/ ambas direcciones de la columna de coste (número)"
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -3813,45 +3854,81 @@ msgstr "Delante del arco/ ambas direcciones de la columna de coste (número)"
 msgid "Cost"
 msgstr "Coste"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Columna de coste de nodos (número)"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "Distancia máxima a la red"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid "If start/end are given as coordinates. If start/end point is outside this threshold, the path is not found and error message is printed. To speed up the process, keep this value as low as possible."
 msgstr "Si inicio/final se dan como coordenadas. Si el punto inicio/final está fuera de este umbral, la ruta no se encuentra y se imprime un mensaje de error. Para acelerar el proceso, mantenga este valor lo más bajo posible."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Ninguna tabla"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Capa/tabla"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "Usar cálculos geodésicos para localizaciones latitud-longitud"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr "Escribir la salida como los segmentos de entrada originales, no cada ruta como una línea."
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -3860,10 +3937,10 @@ msgstr "La proyección actual no es latitud-longitud"
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -3879,8 +3956,8 @@ msgstr "[%d] puntos sin categoría (nfield: [%d])"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -3909,22 +3986,22 @@ msgstr "No se pueden otorgar privilegios sobre la tabla <%s>"
 msgid "Wrong input format: %s"
 msgstr "Formato de entrada incorrecto: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "Ningún punto con categoría [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr "El punto con categoría [%d] no es alcanzable desde el punto con categoría [%d]"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "El punto %f,%f no es alcanzable desde el punto %f,%f"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -3933,17 +4010,17 @@ msgstr "El punto %f,%f no es alcanzable desde el punto %f,%f"
 msgid "Cannot insert new record: %s"
 msgstr "No se puede insertar el nuevo registro: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] errores de formato de entrada"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "Faltan [%d] puntos de la categoría dada"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "Destino(s) %d inalcanzable(s) (incluyendo puntos fuera del umbral)"
@@ -3954,7 +4031,7 @@ msgstr "Destino(s) %d inalcanzable(s) (incluyendo puntos fuera del umbral)"
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -3964,7 +4041,7 @@ msgstr "Destino(s) %d inalcanzable(s) (incluyendo puntos fuera del umbral)"
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 msgid "geometry"
 msgstr "geometría"
 
@@ -4013,17 +4090,17 @@ msgid "Unable to get category list <%s>"
 msgstr "No se puede obtener category list <%s>"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Parámetro <%s> requerido no establecido"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "El mapa vectorial <%s> ya existe"
@@ -4295,6 +4372,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Nombre de archivo que contiene datos en formato vectorial GRASS ASCII"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4315,12 +4393,15 @@ msgstr "Nombre de archivo que contiene datos en formato vectorial GRASS ASCII"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4474,11 +4555,11 @@ msgstr "La capa debe ser >0 para 'where' (donde)"
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "La conexión a la base de datos no ha sido definida para la capa %d"
@@ -4601,9 +4682,9 @@ msgid "Remove existing color table"
 msgstr "Eliminar la tabla de colores existente"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr "Eliminar"
@@ -4663,7 +4744,7 @@ msgstr "Opción dada <%s>, asumiento <use=attr>..."
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4679,8 +4760,7 @@ msgstr "Uno de los -%c, -%c o %s=, %s= o %s= debe ser especificado"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "%s=, %s= y %s= son mutuamente excluyentes"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -4706,6 +4786,7 @@ msgid "Color table exists. Exiting."
 msgstr "El color de la tabla existe. Saliendo"
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "El mapa vectorial <%s> no es 3D"
@@ -4731,7 +4812,7 @@ msgstr "Lectura de regla de coloresdesde entrada estándar no soportada actualme
 msgid "Color table <%s> not found"
 msgstr "Tabla de colores <%s> no encontrada"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -4740,13 +4821,14 @@ msgstr "No se puede leer la tabla de color para el mapa raster <%s>"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -4776,8 +4858,9 @@ msgstr "Leyendo elementos..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -4820,7 +4903,7 @@ msgstr "Valor máximo (%d) está fuera del rango %d,%d"
 msgid "Converting color rules into categories..."
 msgstr "Conviritiendo reglas de color en categorías..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "No se puede añadir la columna <%s> a la tabla <%s>"
@@ -4872,6 +4955,7 @@ msgid "Point out of range"
 msgstr "Punto fuera de rango"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -4880,15 +4964,17 @@ msgstr "Punto fuera de rango"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr "voxel"
 
@@ -4972,14 +5058,15 @@ msgstr "Nombre de mapa vectorial de puntos generado para desviaciones"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Salidas"
 
@@ -5154,14 +5241,14 @@ msgstr "Falló interpolación"
 msgid "Input failed"
 msgstr "Falló la entrada"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 msgid "Secpar_loop failed"
 msgstr "Ha fallado Secpar_loop"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr "No hay suficiente espacio en el disco --no se pueden escribir archivos"
 
@@ -5197,9 +5284,9 @@ msgstr "El tipo de columna suavizado no está soportado (debe ser entero o doble
 msgid "Point without category"
 msgstr "Punto sin categoría"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5296,9 +5383,9 @@ msgstr "Error al cerrar archivo de salida %s"
 msgid "3D raster map <%s> created"
 msgstr "Mapa ráster 3D <%s> creado"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5309,79 +5396,116 @@ msgstr "No se puede insertar nueva línea: %s"
 msgid "Init costs from node %d"
 msgstr "Coste inicial desde el nodo %d"
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 msgid "steiner tree"
 msgstr "árbol de Steiner"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Crear árbol de Steiner para red y terminales dadas."
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm is used in this module so the result may be sub optimal."
 msgstr "Note que el problema del 'Árbol mínimo de Steiner' es NP-hard y se usa un algoritmo heurístico en este módulo por lo que el resultado puede ser subóptimo."
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "Capa de nodos (usada para terminales)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Columna de coste de arcos (para ambas direcciones)"
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr "Categorías de puntos en terminales (la capa se especifica por nlayer)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Número de puntos Steiner (-1 para todos los posibles)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "El punto no está conectado a la red"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Número de ciudades: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Terminales insuficientes (<2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "Número de puntos de Steiner solicitado mayor que el posible"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Número de puntos de entrada: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr "La terminal en el nodo [%d] no se puede conectar a la terminal en el nodo [%d]"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr "[%d] nodos (no alcanzables) eliminados de la lista de puntos de Steiner candidatos"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "Coste MST = %f"
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "Buscar [%d]. Punto de Steiner"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr "El punto de Steiner en el nodo [%d] se añadió a las terminales (coste MST = %f)"
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "No se encontró ningún punto de Steiner -> saliendo del ciclo"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Número de puntos steiner (-1 para todos los posibles)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Coste MST = %f"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5401,17 +5525,19 @@ msgstr "No se encontró ningún punto de Steiner -> saliendo del ciclo"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr "importar"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 msgid "points"
 msgstr "puntos"
 
@@ -5439,9 +5565,9 @@ msgstr "Nombre de la columna que contiene las coordenadas Y"
 msgid "Name of column containing z coordinate"
 msgstr "Nombre de la columna que contiene las coordenadas Z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "Salida 3D"
 
@@ -5482,7 +5608,7 @@ msgid "Unable to define key column. This operation is not supported by <%s> driv
 msgstr "No ha sido posible definir columna clave. Esta operación no está soportada por controlador <%s>.  Debe definir la opción <%s>."
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "No se puede abrir el cursor de selección: '%s'"
@@ -5500,7 +5626,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "La columna X/Y/Z debe ser entero o doble"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Copiando atributos..."
@@ -5526,7 +5652,80 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d punto escrito en mapa vectorial."
 msgstr[1] "%d puntos escritos en mapa vectorial."
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"La proyección del conjunto de datos parece no corresponder con la localización actual.\n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "La información de proyección (PROJ_INFO) de la localización es:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "La información de proyección (PROJ_INFO) del conjunto de datos a importar es:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the -o flag to ignore them and use current location definition.\n"
+msgstr ""
+"\n"
+"En caso de que no haya diferencias significativas en las definiciones de proyección, use la bandera -o para ignorarlas y use la definición de la Localización actual.\n"
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid "Consider generating a new location with 'location' parameter from input data set.\n"
+msgstr "Considere generar una nueva Localización con el parámetro 'location' del conjunto de datos de entrada.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid "Unable to convert input map projection information to GRASS format for checking"
+msgstr "No se puede convertir información de la proyección del mapa de entrada a formato GRASS para comprobar"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Ignorando comprobación de proyección"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "Las proyecciones del conjunto de datos de entrada y de la localización actual parecen coincidir"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr " Se requieren 4.parámetros para el parámetro 'espacial'"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "rangoz no válido"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Opción de norma: '%s' desconocida"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5549,7 +5748,7 @@ msgstr[1] "%d puntos escritos en mapa vectorial."
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5557,7 +5756,7 @@ msgstr[1] "%d puntos escritos en mapa vectorial."
 msgid "statistics"
 msgstr "estadísticas"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 msgid "point pattern"
@@ -6132,8 +6331,8 @@ msgstr "Tipo de elemento (%d) no válido para <%s>. Solamente están soportados
 msgid "Operator '%s' is not supported for type line"
 msgstr "El operador '%s' no está soportado por el tipo línea"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 msgid "Unable to create temporary vector map"
 msgstr "No ha sido posible crear mapa vectorial temporal"
 
@@ -6189,12 +6388,12 @@ msgid "Breaking lines..."
 msgstr "Rompiendo líneas..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Eliminando duplicados..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "Limpiando límites y nodos..."
 
@@ -6202,11 +6401,11 @@ msgstr "Limpiando límites y nodos..."
 msgid "Merging lines..."
 msgstr "Uniendo las líneas..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Adjuntando islas..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Imposible calcular el centroide del área"
 
@@ -6221,12 +6420,13 @@ msgstr "Consultando mapa vectorial <%s>..."
 msgid "Attribute not found"
 msgstr "Atributo no encontrado"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Escribiendo centroides..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "No se pueden insertar nuevos registros: '%s'"
@@ -6293,111 +6493,113 @@ msgstr "La lectura directa del acceso a capas OGR no está soportada para este m
 msgid "Vector map <%s> is not in current mapset"
 msgstr "El mapa vectorial <%s> no está en el directorio de mapas actual"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr "muestreo"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 msgid "Generates random 2D/3D vector points."
 msgstr "Genera puntos vectoriales aleatorios 2D/3D."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Número de puntos a crear"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 msgid "Restrict points to areas in input vector"
 msgstr "Restringir puntos a áreas del vectorial de entrada"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Altura z mínima (-z flag o column name)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Altura z máxima (necesita -z flag o column name)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid "The seed to initialize the random generator. If not set the process ID is used"
 msgstr "La semilla para inicializar el generador aleatorio, Si no se define se usan las ID de lo procesos"
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 msgid "Name of column for z values"
 msgstr "Nombre de la columna para valores z"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 msgid "Writes z values to column"
 msgstr "Escribe valores z a la columna"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 msgid "Type of column for z values"
 msgstr "Tipo de columna para valores z"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Crear salida 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 msgid "Generate n points for each individual area"
 msgstr "Genera n puntos para cada área individual"
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "El número de puntos debe ser > 0 (%d dados)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer '1'."
 msgstr "Número de capa (%d) no válido. Parámetro '%s' o '%s' especificados, asumiendo capa '1'."
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, c-format
 msgid "No areas in vector map <%s>"
 msgstr "No hay áreas en mapa vectorial <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "La opción <-%c> necesita de entrada un vectorial con áreas"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "No se puede crear la tabla: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "La tabla tendría que contener sólo dos columnas"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid "You have created unsupported column type. This module supports only INTEGER and DOUBLE PRECISION column types."
 msgstr "Has creado un tipo de columna que no puede soportarse. Este módulo soporta sólo tipos de columna INTEGER i DOUBLE PRECISION."
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, c-format
 msgid "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "Áreas seleccionadas del vectorial de entrada <%s> no se sobrelapan con la región actual"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "El vectorial de entrada <%s> no se sobrelapa con la región actual"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Generando puntos..."
 
@@ -6438,7 +6640,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Nombre del mapa ráster existente a consultar"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Nombre de la columna de atributos en la que se subirán los resultados de la búsqueda"
 
@@ -6450,79 +6652,77 @@ msgstr "Interpola valores desde las cuatro celdas vecinas"
 msgid "Print categories and values instead of updating the database"
 msgstr "Mostrar categorías y valores en vez de actualizar la base de datos"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Columna <%s> no encontrada"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Columna <%s> no encontrada en la tabla <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Tipo de columna no soportado"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "El tipo ráster es entero y el tipo de columna es coma flotante"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr "El tipo ráster es coma flotante y el tipo de columna es entero, ¡¡algunos datos perdidos!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 msgid "Reading features from vector map..."
 msgstr "Leyendo elementos desde mapa vectorial..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "No hay elementos de tipo (%s) encontrados en mapa vectorial <%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d puntos fuera de la región actual fueron omitidos"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "%d puntos sin categoría fueron omitidos"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Varios puntos (%d) de categoría %d, valor que se definira como 'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d categorías cargadas del vectorial"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d categorías duplicadas en el mapa vectorial <%s>"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d categorías cargadas de la tabla"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d categorías del vectorial faltan en la tabla"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d errores al actualizar"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, c-format
 msgid "%d records updated."
 msgstr "%d registros actualizados."
@@ -6530,13 +6730,13 @@ msgstr "%d registros actualizados."
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 msgid "univariate statistics"
 msgstr "estadísticas univariadas"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 msgid "zonal statistics"
 msgstr "estadísticas de zona"
@@ -6607,7 +6807,7 @@ msgstr "La primera columna es siempre la categoría del área"
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "El mapa vectorial <%s> no esta en el directorio de mapas del usuario y no se puede actualizar"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -6658,6 +6858,148 @@ msgstr "no se encontró área con categoría %d"
 msgid "%d records updated"
 msgstr "%d registros actualizados"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "La conexión a la base de datos no ha sido definida para la capa %d"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+msgid "Only numeric column type is supported"
+msgstr "Solamente está soportada columna de tipo numérico"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "No hay registro para la categoría [%d]"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "No hay registro para la categoría [%d]"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Columna <%s> no encontrada"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr "LIDAR"
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Generar puntos vectoriales como puntos 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Convertir capas vectoriales OGR a mapas vectoriales de GRASS."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Número de capa (desde)"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld categorías"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Número o nombre de la capa (vectorial)"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Número o nombre de la capa (vectorial)"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Número de capa a la que añadir la columna(s)"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "La columna tiene que ser numérica"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Columnas"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Nombre de la columna de definición de color (para usar con la opción -a)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+msgid "Color definition in R:G:B form"
+msgstr "Definición de color en la forma R:G:B"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "No se puede leer el color"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Escala a aplicar a los datos Z"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid "This scale does not change the values itself but only how precisely they are stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Escala a aplicar a los datos Z"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Limitar importación a la región actual"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "tabla de colores"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -6693,6 +7035,12 @@ msgstr "Error en la columna (%s) de definición de color con categoría %d"
 msgid "Label column was not specified, no labels will be written"
 msgstr "No se especificó la columna de etiquetas, no se escribirán etiquetas"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Columna <%s> no encontrada"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -6722,45 +7070,50 @@ msgstr "No ha sido posible usar columna <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "No hay áreas seleccionadas del mapa vectorial <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid "Area conversion and line densification are mutually exclusive, disabling line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Paso %d de %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "Problema al procesas las áreas del mapa vectorial <%s>, continuado..."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "Problema al procesas las líneas del mapa vectorial <%s>, continuado..."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Escribiendo mapa ráster..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Creando archivos de soporte para el mapa raster..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "El color se puede actualizar desde la base de datos sólo si uso=atributo"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Áreas convertidas: %d de %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Puntos/líneas convertidos: %d de %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -6816,15 +7169,17 @@ msgstr "Valor raster (para utilizar=val)"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr "Memoria máxima a utilizar (en MB)"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 msgid "Cache size for raster rows"
 msgstr "Tamaño de caché para filas ráster"
 
@@ -6862,7 +7217,7 @@ msgstr "El parámetro columna no se puede combinar con el uso de la coordenada Z
 msgid "Unknown option '%s'"
 msgstr "Opción '%s' desconocida"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Leyendo areas..."
 
@@ -6880,11 +7235,16 @@ msgstr "No se puede usar la columna especificada"
 msgid "Get area %d failed"
 msgstr "Fallo al obtener el área %d"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "¡No se pudo importar el archivo DXF!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr "Área sin centroide (puede ser correcto para islas)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Centroide de área sin categoría"
 
@@ -6911,11 +7271,6 @@ msgstr "Calcula grados, centralidad, intermediación -betweeness-, proximidad y
 msgid "Name of degree centrality column"
 msgstr "Nombre de columna de grado de centralidad"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Columnas"
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr "Nombre de columna de proximidad central"
@@ -7085,142 +7440,147 @@ msgstr "Tipo de elemento en el que convertir"
 msgid "Incompatible types"
 msgstr "Tipos incompatibles"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr "Error al copia tabla de atributos al mapa de salida"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr "vendedor"
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr "Crea una ruta circular que conecta los nodos indicados (Problema del vendedor viajero)"
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid "Note that TSP is NP-hard, heuristic algorithm is used by this module and created cycle may be sub optimal"
 msgstr "Note que TSP es NP-hard, algoritmo heurístico que es usado por este módulo y el círculo creado puede ser subóptimo"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr "Categorías de puntos ('ciudades') en los nodos (la capa es especificada por nlayer)"
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "Capa de nodos (usada para ciudades)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "EXPERIMENTAL: columna de costo de dirección de arco trasero (número)"
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Nombre para archivo de salida que contendrá secuencia de nodos (\"-\" para salida a estándar)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr "Categorías de puntos ('ciudades') en los nodos (la capa es especificada por nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+msgid "Point is not connected to the network"
+msgstr "El punto no está conectado a la red"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, c-format
 msgid "Number of cities: %d"
 msgstr "Cantidad de ciudades: %d"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Ciudades insuficientes (<2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 msgid "Creating cost cache..."
 msgstr "Creando caché de costo..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, c-format
 msgid "No point at node %d"
 msgstr "Ningún punto en nodo %d"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, c-format
 msgid "No category for point at node %d"
 msgstr "No hay categoría para punto en nodo %d"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Nodo de destino [cat %d] no se puede alcanzar desde el nodo [cat %d]"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr "Buscando el ciclo más corto..."
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr "Ciclo con costo total %.3f"
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "No ha sido posible abrir archivo '%s' para escritura"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 msgid "isolines"
 msgstr "isolíneas"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Divide la red por isolíneas de costes."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid "Splits net to bands between cost isolines (direction from center). Center node must be opened (costs >= 0). Costs of center node are used in calculation."
 msgstr "Divide la red en bandas entre isolíneas de coste (dirección desde el centro). El nodo central debe estar abierto (coste >= 0). Los costes de nodo central se usan en el cálculo."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid "Categories of centers (points on nodes) to which net will be allocated, layer for this categories is given by nlayer option"
 msgstr "Categorías de los centros (puntos en nodos) a los que se asignará la red, la capa para estas categorías es dada por la opción nlayer"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Costes para isolíneas"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr "Coste de isolínea incorrecto: %f"
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr "Coste de isolínea: %f menor que el anterior"
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr "Coste de isolínea %d: %f"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr "Costes insuficientes, todo lo alcanzable caen en la primera banda"
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr "Centro en nodo cerrado (coste = -1) ignorado"
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Número de centros: %d (nlayer %d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr "Centros insuficientes para la nlayer seleccionada. Nada se asignará."
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Calculando costes desde el centro %d..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr "No se puede obtener el segmento de línea, el segmento está fuera de la línea"
 
@@ -7414,13 +7774,14 @@ msgstr "Ocurrió un error, nada que exportar"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Nombre de archivo ASCII de salida o nombre de vectorial ASCII si '-o' es definida"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 msgid "If not given or '-' then standard output"
 msgstr "Si no se da o '-' entonces salida estándar"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -7444,9 +7805,13 @@ msgstr "Si no se da o '-' entonces salida estándar"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -7506,7 +7871,7 @@ msgstr "Separador de campos (modo de puntos)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Número de dígitos significativos (coma flotante solamente)"
 
@@ -7564,7 +7929,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "No hay tabla de colores definida para mapa vectorial <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -7658,9 +8023,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "No se puede abrir el archivo de entrada <%s>. Error %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "No se puede crear el índice para la tabla <%s>, clave <%s>"
@@ -8190,7 +8556,7 @@ msgstr ""
 "Nota: Se incluye un mínimo de una primera clase\n"
 "\n"
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Capa %d"
@@ -8211,7 +8577,7 @@ msgstr "No se puede calcular la matriz inversa"
 msgid "Resolving conflicts..."
 msgstr "Resolviendo conflictos..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 msgid "generalization"
 msgstr "generalización"
 
@@ -8236,194 +8602,199 @@ msgid "Performs vector based generalization."
 msgstr "Realiza generalización basada en vectoriales."
 
 #: ../vector/v.generalize/main.c:100
-msgid "Error map of all lines and boundaries not being generalized due to topology issues or over-simplification"
-msgstr "Mapa de errores de todas las líneas y contornos que no fueron generalizados debido a problemas en topología o sobre simplificación"
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Realiza generalización basada en vectoriales."
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:102
+msgid "Lines and boundaries causing errors (collapsed to a point or topology errors)"
+msgstr ""
+
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr "Algoritmo Douglas-Peucker"
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr "Algoritmo Douglas-Peucker con parámetro de reducción"
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 msgid "Lang Simplification Algorithm"
 msgstr "Algoritmo de Simplificación de Lang"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr "Algoritmo de reducción de vértices elimina puntos cercanos entre sí"
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr "Algoritmo Reumann-Witkam"
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr "Algoritmo Forward-Looking de Boyle"
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr "Algoritmo de media móvil de McMaster's"
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr "Algoritmo de ponderación de distancia de McMaster"
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr "Algoritmo de Chaiken"
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr "Interpolación por Splines cúbicas de Hermite"
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr "Método Snakes para suavizado de línea"
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 msgid "Network generalization"
 msgstr "Generalización de redes"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr "Desplazamiento de líneas cercanas entre sí"
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "Algoritmo de generalización"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "Valor de toleracia máximo"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "Parámetro de vista al frente (look-ahead)"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr "Porcentaje de los puntos en la salida del algoritmo 'douglas_reduction'"
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr "Deslizamiento del punto procesado hacia el punto original"
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr "Ángulo mínimo entre dos segmentos consecutivos en el método Hermite"
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "Nivel umbral en la generalización de la red"
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr "Umbral de proximidad en la generalización de la red"
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "Intermediaicón umbral en la generalización de la red"
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Parámetro de suavizado spline"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Parámetro de tensión spline"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Número de iteraciones"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr "Deshabilitar soporte para ciclo"
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr "No modificar los puntos terminales de las líneas que forman un ciclo cerrado"
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 msgid "Do not copy attributes"
 msgstr "No copiar atributos"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Método desconocido"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, c-format
 msgid "No lines found in input map <%s>"
 msgstr "No se encontraron líneas en el mapa de entrada <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "No se puede crear el mapa vectorial de errores <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr "Desplazamiento..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr "Generalización de red..."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr "Se necesitan atributos para opción 'where', copiando tabla"
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Generalización (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, c-format
 msgid "Using threshold: %g %s"
 msgstr "Usando umbral: %g %s"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "El método '%s' no preservó el primer punto"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr "Método '%s' no preservó último punto"
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "Método '%s' no preservó bucle"
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid "%d boundaries were not modified because modification would damage topology"
 msgstr "%d contornos no fueron modificados porque la modificación recorte dañaría la topología"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr "%d líneas/contornos no fueron modificados debido a sobre simplificación"
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "Cantidad de vértices para elementos %s seleccionados desde %d hasta %d (%d%% faltantes)"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr "reducido"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr "cambiado"
 
@@ -8495,8 +8866,8 @@ msgstr "Tamaño de icono para elementos punto (en unidades de mapa)"
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Color de texto"
 
@@ -8509,13 +8880,13 @@ msgstr "Color de texto"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Colores"
@@ -8695,14 +9066,14 @@ msgstr "Buscando errores en la topología..."
 msgid "Cleaning output topology"
 msgstr "Limiando topología"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Eliminar balanceos"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 msgid "Removing bridges..."
 msgstr "Eliminando puentes..."
 
@@ -8749,14 +9120,6 @@ msgstr "Leyendo vértices 3D..."
 msgid "Constructing 3D hull..."
 msgstr "Construyendo convexo 3D..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr "LIDAR"
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid "Performs bicubic or bilinear spline interpolation with Tykhonov regularization."
 msgstr "Realiza interpolación spline bicúbica o bilineal con regularización Tykhonov."
@@ -8826,7 +9189,9 @@ msgstr "Interpolación bilineal."
 msgid "Bicubic interpolation"
 msgstr "Interpolación bicúbica"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Parámetro de regularización Tykhonov (affecta el smooting)"
 
@@ -9196,6 +9561,192 @@ msgstr "Error leyendo el valor de atributo '%s'"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: escribiendo la cabecera VTK"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "No se han encontrado puntos de datos"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "ráster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d grupos."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Separación de clúster"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Nombre del mapa vectorial de entrada"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Distancia máxima a la red"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Número mínimo de píxeles en una clase"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Separación de clúster"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "No ha sido posible establecer nivel predeterminado de apertura de vectorial"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "¡El número de clases deber ser < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "El tamaño del vecindario debe ser positivo"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "lugares."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "No se encontraron puntos, se salta el tipo=punto"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Creando centroides..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s = %s -- de ser un número posiivollll"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Usando la distancia máxima entre puntos: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "No se encontraron mapas raster"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Distancia máxima a la línea más próxima"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "Media = %.5lf"
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Desviación estándar"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Usando la distancia máxima entre puntos: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Encontrando ruta de coste..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "npoints = %d, nterrain = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "No se encontraron líneas, omitiendo %s"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+msgid "Generating renumbering scheme..."
+msgstr "Generando esquema de renumeración..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Escribiendo mapa ráster de salida %s... "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Leyendo entradas..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "No se han encontrado puntos de datos"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "vectorial, densidad de kernel"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%d clases encontradas"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%d clases encontradas"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr "bordes"
@@ -9328,25 +9879,25 @@ msgstr "Imposible actualizar la tabla aux"
 msgid "Impossible to write to aux table"
 msgstr "Imposible escribir en la tabla aux"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 msgid "network maintenance"
 msgstr "mantenimiento de red"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Realiza el mantenimiento de redes."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "No se puede abrir el mapa vectorial <%s> en el nivel topológico %d"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d nuevos puntos (nodos) escirtos en salida."
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%d líneas (arcos de red) escritas en salida."
@@ -9383,7 +9934,7 @@ msgstr "Nombre de mapa vectorial de líneas (arcos) de entrada"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr "Requerido para operación 'nodes', 'connect', 'report' y 'nreport'"
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr "Arcos"
 
@@ -9395,14 +9946,14 @@ msgstr "Nombre de mapa vectorial de puntos (nodos) de entrada"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr "Requerido para operación 'connect' y 'arcs'"
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr "Nodos"
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Operación a realizar"
@@ -9427,42 +9978,121 @@ msgstr "mostrar en la salida estándar {line_category start_point_category end_p
 msgid "print to standard output {point_category line_category[,line_category...]}"
 msgstr "mostrar en la salida estándar {point_category line_category[,line_category...]}"
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Encuentra la ruta más corta en una red vectorial."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr "Requerido para la operación 'conectar'. Conectar puntos en el umbral dado."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 msgid "Name of input file"
 msgstr "Nombre de archivo de entrada"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Requerido para operación 'arcs' ('-' para entrada estándar)"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Asignar categorías únicas a nuevos puntos"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "Para la operación 'nodos'"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 msgid "Snap points to network"
 msgstr "Ensamblar puntos a red"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid "For operation 'connect'. By default, a new line from the point to the network is created."
 msgstr "Para operación 'connect'. De manera predeterminada, se crea una nueva línea del punto a la red."
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Capa de líneas"
+
+#: ../vector/v.net/args.c:106
+msgid "Layer where turntable will be attached. Format: layer number[/layer name].Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid "Layer with unique categories for every line in arc_layer and point on every node.  The categories are used in turntable. Format: layer number[/layer name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Operación no conocida"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "El valor umbral debe ser >=0"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "No se puede leer la entrada desde <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "No se puede insertar en la tabla: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "No se puede abrir el mapa vectorial <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "No se puede crear el mapa vectorial <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "La tabla <%s> no existe en la base de datos <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "La capa OGR <%s> ya existe y será sobrescrita"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "La capa OGR <%s> ya existe y será sobrescrita"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "No se puede abrir la base de datos <%s> por el controlador <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "No se puede crear la tabla <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "No es posible copiar tabla de atributos al mapa vectorial <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "No se puede crear la tabla <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -9580,7 +10210,7 @@ msgid "Categories already exist in layer %d"
 msgstr "Las categorías ya existen en capa %d"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "No es posible calcular el centroide de área"
 
@@ -9682,7 +10312,7 @@ msgstr "La conexión a la base de datos no definida para capa %s"
 msgid "Key column type is not integer"
 msgstr "La columna clave debe ser de tipo integer"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "No se pueden recuperar datos de la tabla <%s>"
@@ -10331,7 +10961,7 @@ msgstr "Usar formato de archivo .prj tipo ESRI (sólo se aplica al Shapefile de
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "Forsar salida 2D aun si la entrada es 3D (aplica solamente para Shapefile de salida)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr "Es útil si la entrada es 3D pero todas las coordenadas son idénticas"
@@ -10563,8 +11193,8 @@ msgstr "Localización que contiene el mapa vectorial de entrada"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr "Fuente"
 
@@ -10572,7 +11202,7 @@ msgstr "Fuente"
 msgid "Mapset containing input vector map"
 msgstr "Conjunto de mapas que contiene el mapa vectorial de entrada"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 msgid "Default: name of current mapset"
 msgstr "Predeterminado: nombre del directorio de mapas actual"
 
@@ -10580,7 +11210,7 @@ msgstr "Predeterminado: nombre del directorio de mapas actual"
 msgid "Name of input vector map to re-project"
 msgstr "Nombre de mapa vectorial de entrada a reproyectar"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Ruta a la base de datos de GRASS de la localización de entrada"
 
@@ -10594,8 +11224,8 @@ msgstr "Aumentar precisión de formas reproyectadas, desactivar con smax=0"
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr "Objetivo"
 
@@ -10624,17 +11254,19 @@ msgstr "Solamente salida LatitudLongitud, predeterminada es -180,180"
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr "opción <%s>: <%s> existe. Para sobreescribir, use la bandera --overwrite"
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "Las localizaciones de entrada y salida no pueden ser la misma"
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Comprobando localización <%s> directorio de mapas <%s>"
@@ -10988,337 +11620,546 @@ msgstr ""
 "Tabla: %s\n"
 "Columna de clave: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "Crear un nuevo mapa vectorial combinando otros mapas vectoriales."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid "Name for output vector map where bounding boxes of input vector maps are written to"
 msgstr "Nombre para el mapa vectorial de salida en el que se escriben los recuadros de límites de los mapas vectoriales de entrada"
 
-#: ../vector/v.patch/main.c:85
-msgid "Append files to existing file (overwriting existing files must be activated)"
-msgstr "Añadir archivos al existente (debe estar activada la sobrescritura de archivos existentes)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "No construir topología"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Copiar también la tabla de atributos"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "Actualmente sólo está soportada la tabla de la capa 1"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid "Append files to existing file (overwriting existing files must be activated)"
+msgstr "Añadir archivos al existente (debe estar activada la sobrescritura de archivos existentes)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Falta la tabla"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Diferencia de columnas clave"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Diferencia de número de columnas"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Diferencia de nombres de columnas"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Diferencia de tipos de columnas"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "Diferencia de columnas de longitud de cadenas"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Columna clave no encontrada"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "El mapa de salida no es 3D"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "No se puede crear la tabla <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Parchando mapa vectorial <%s>..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "Error al leer el mapa vectorial <%s> - algunos datos pueden no ser correctos"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Construyendo topología para el mapa vectorial <%s>..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "Las intersecciones en los bordes tendrán que ensamblarse"
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "Las líneas comunes entre archivos tendrán que ser editadas"
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "La información de la cabecera también puede que tenga que ser editada"
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d mapas vectoriales parcheados"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "No se puede abrir el cursor de selección: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "No se puede recuperar la fila"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Tipo de columna desconocido"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "No se puede insertar nuevo registro: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "Ignorando comprobación de proyección"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid "Values of %s and %s are the same. All categories would be stored only in layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Convierte nubes de puntos LAS LiDAR a un mapa vectorial GRASS con libLAS."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 msgid "LAS input file"
 msgstr "Archivo de entrada LAS"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr "Archivos de entrada LiDAR en formato LAS (*.las o *.laz)"
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Número o nombre de la capa (vectorial)"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Número de capa a la que añadir la columna(s)"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Importar sólo la subregión"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Subregión"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Formato: xmin,ymin,xmax,ymax - normalmente W,S,E,N"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Nombre de la nueva localización a crear"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Rango de filtrado para los datos Z (mínimo, máximo)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr "Solamente importa puntos de tipo de retorno seleccionado"
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 msgid "If not specified, all points are imported"
 msgstr "Si se especifica, se importan los valores enteros"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr "Solamente importa puntos de clase(s) seleccionada(s)"
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 msgid "Input is comma separated integers. If not specified, all points are imported."
 msgstr "En entrada los enteros están separados con comas. Si no se especifica, se importarán todos los puntos."
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Nombre del mapa vectorial de entrada de puntos esparcidos"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Nombre del mapa vectorial de entrada"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid "For example, 5 will import 80 percent of points. If not specified, all points are imported"
+msgstr "Se importan los valores enteros"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Correlación"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid "For example, 4 will import 25 percent of points. If not specified, all points are imported"
+msgstr "Se importan los valores enteros"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Importando puntos..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> número de puntos no válido"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Nombre de la nueva localización a crear"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 msgid "Print LAS file info and exit"
 msgstr "Mostrar archivo de información LAS y salir"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "Ignorar proyección del conjunto de datos (usar proyección de la localización)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Limitar importación a la región actual"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Mapa vectorial de entrada que contiene puntos"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr "Extender extensión de región basado en nuevo conjunto de datos"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "No se pueden escribir categorías para el mapa raster <%s>"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr "Invalida verificación de la proyección (usar la proyección de la localización actual)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Asumir que el conjunto de datos tiene la misma proyección de la Localización actual"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid "Create the location specified by the \"location\" parameter and exit. Do not import the vector data."
 msgstr "Crear la Localización especificada por el parámetro \"location\" y salir. No importa datos vectoriales."
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Archivo de entrada <%s> no existe"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr "Archivo de entrada <%s> no es nube de puntos LAS LiDAR"
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
 #, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Opción de filtro no conocida <%s>"
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "vectorial, ráster, tabla de atributos"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:409
+#, fuzzy, c-format
+msgid "Storing generated point IDs as categories in the layer <%d>, consequently no more than %d points can be imported"
+msgstr "Número de capa (desde)"
+
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr "Seleccionar la opción región actual o la opción espacial, no ambas"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr " Se requieren 4.parámetros para el parámetro 'espacial'"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid "Unable to convert input map projection to GRASS format; cannot create new location."
 msgstr "No se puede convertir la proyección del mapa de entrada a formato GRASS; no se puede crear la nueva localización."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, c-format
 msgid "Unable to create new location <%s>"
 msgstr "No se puede crear nueva Localización <%s>"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Localización <%s> creada"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid "Unable to convert input map projection information to GRASS format for checking"
-msgstr "No se puede convertir información de la proyección del mapa de entrada a formato GRASS para comprobar"
-
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "Ignorando comprobación de proyección"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "El vectorial <%s> ya existe y será sobrescrito"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"La proyección del conjunto de datos parece no corresponder con la localización actual.\n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "La información de proyección (PROJ_INFO) de la localización es:\n"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Explorando %d puntos..."
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "La información de proyección (PROJ_INFO) del conjunto de datos a importar es:\n"
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Explorando %d puntos..."
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the -o flag to ignore them and use current location definition.\n"
+#: ../vector/v.in.lidar/main.c:718
+msgid "The underlying libLAS library is at its limits. Previously reported counts might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"\n"
-"En caso de que no haya diferencias significativas en las definiciones de proyección, use la bandera -o para ignorarlas y use la definición de la Localización actual.\n"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid "Consider generating a new location with 'location' parameter from input data set.\n"
-msgstr "Considere generar una nueva Localización con el parámetro 'location' del conjunto de datos de entrada.\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d puntos importados"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "Las proyecciones del conjunto de datos de entrada y de la localización actual parecen coincidir"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d puntos importados"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "El vectorial <%s> ya existe y será sobrescrito"
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d puntos de entrada no fueron válidos"
 
-#: ../vector/v.in.lidar/main.c:606
-#, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "No se puede abrir la base de datos <%s> por el controlador <%s>"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d puntos de entrada estuvieron fuera del área seleccionada"
 
-#: ../vector/v.in.lidar/main.c:640
-#, c-format
-msgid "Scanning %d points..."
-msgstr "Explorando %d puntos..."
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d puntos de entrada estuvieron fuera del área seleccionada"
+
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d puntos fuera del umbral"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "%d points imported"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
 msgstr "%d puntos importados"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "%d puntos importados"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
 msgstr "%d puntos de entrada no fueron válidos"
 
-#: ../vector/v.in.lidar/main.c:812
-#, c-format
-msgid "%d input points were outside of the selected area"
+#: ../vector/v.in.lidar/main.c:759
+#, fuzzy, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr "%d puntos de entrada estuvieron fuera del área seleccionada"
+
+#: ../vector/v.in.lidar/main.c:761
+#, fuzzy, c-format
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d puntos de entrada estuvieron fuera del área seleccionada"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d puntos de entrada estuvieron fuera del área seleccionada"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d puntos fuera del umbral"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid "Accuracy of the printed point counts might be limited by your computer architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "El último punto será ignorado"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid "Maximum number of categories reached (%d). Import ended prematurely. Try to import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
-msgstr "% puntos de entrada fueron filtrados por número de retorno"
+msgid "Failed to open vector <%s>"
+msgstr "No se puede abrir el mapa vectorial <%s>"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/attributes.c:129
 #, c-format
-msgid "%d input points were filtered out by class number"
-msgstr "%d puntos fueron filtrados por número de clases"
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "No se puede abrir la base de datos <%s> por el controlador <%s>"
 
 #: ../vector/v.external/main.c:55
 msgid "Creates a new pseudo-vector map as a link to an OGR-supported layer or a PostGIS feature table."
 msgstr "Crea un nuevo mapa pseudo vectorial como un enlace a una capa soportada por OGR o una tabla de elementos PosGIS."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Capa <%s> no disponible"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, c-format
 msgid "Unable to delete '%s'"
 msgstr "No ha sido posible eliminar '%s'"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "No se puede crear el archivo '%s/%s'"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Liga al mapa vectorial <%s> creada."
@@ -11327,11 +12168,11 @@ msgstr "Liga al mapa vectorial <%s> creada."
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Nombre de fuente de datos OGR o PostGIS de entrada"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Nombre de capa OGR o tabla de elementos PostGIS que será enlazada"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -11343,22 +12184,26 @@ msgstr ""
 "\t\tArchivo MapInfo: nombre de archivo mapinfo\n"
 "\t\tBase de datos PostGIS: nombre de tabla"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Nombre para el mapa vectorial GRASS de salida (predeterminado: el de entrada)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr "Listar las capas disponibles en la fuente de datos y salir"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 msgid "List available layers including feature type in data source and exit"
 msgstr "Enlistar capas disponibles en la fuente de datos incluyendo tipo de elemento y salir"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "Formato: nombre de capa,tipo,revisión de proyección,geometría"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr "GRASS no está compilado con soporte PostgreSQL"
@@ -11524,125 +12369,125 @@ msgstr "Distancia máxima entre arcos teóricos y segmentos de polígonos como m
 msgid "Make outside corners straight"
 msgstr "Hacer las esquinas externas rectas"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 msgid "Do not make caps at the ends of polylines"
 msgstr "No hacer remates al final de las polilíneas"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 msgid "Transfer categories and attributes"
 msgstr "Transferir categorías y atributos"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid "Note: In latitude-longitude coordinate system specify distances in degree unit"
 msgstr "Nota: en coordenadas latitud-longitud especifique distancias en unidades de grado"
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr "Selecciona una distancia al buffer/ menor distancia/ ángulo o columna pero no ambo."
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr "La opción bufcol requiere una capa válida."
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr "La tolerancia tiene que ser > 0."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Se restableció la tolerancia a %g"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 msgid "Illegal scale value"
 msgstr "Valor de escala no permitido"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "La tolerancia en unidades de mapa= %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "No se pueden seleccionar datos de la tabla <%s>"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid "No features available for buffering. Check type option and features available in the input vector."
 msgstr "No hay elementos disponible para hacer buffer. Revisar opción tipo y elementos disponibles en mapa vectorial de entrada."
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr "Banderas -%c/%c ignoradas por esta versión, se requiere GEOS >= 3.3"
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid "Negative distances for internal buffers are not supported and converted to positive values."
 msgstr "Distancias negativas para buffers internos no están soportadas  y se convertirán a valores positivos."
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Realizando buffer a las áreas..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Atributo de tamaño no válido (%.3f) para la categoría %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "La tolerancia en unidades de mapa: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 msgid "Buffering features..."
 msgstr "Realizando buffer a los elementos..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr "Distancias negativas solo están permitidas para áreas"
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 msgid "Cleaning buffers..."
 msgstr "Limpiando buffers..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Construyendo partes de la topología..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "Ensamblando contornos..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr "Rompiendo polígonos..."
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Rompiendo los bordes..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr "Limpiando límites en nodos"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 msgid "Calculating centroids for all areas..."
 msgstr "Calculando centroides para todas las áreas..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Generando lista de contornos a eliminar..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr "Eliminando contornos..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr "Calculando centroides para áreas..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "No se puede calcular el centroide para el área %d"
@@ -11897,32 +12742,41 @@ msgstr "Nombre para archivo DXF de salida"
 msgid "%d features written to '%s'."
 msgstr "%d elementos escritos a '%s'."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 msgid "cost allocation"
 msgstr "asignación de costo"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "Asigna subredes para los centros más próximos (dirección a partir del centro)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid "center node must be opened (costs >= 0). Costs of center node are used in calculation"
 msgstr "nodo central debe estar abierto (costos >=0). Los costos del nodo central se usan en los cálculos."
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Número de centros: [%d] (nlayer: [%d])"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr "Centros insuficientes para la nlayer seleccionada. Nada se asignará."
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 msgid "Calculating costs from centers ..."
 msgstr "Calculando costos a partir de los centros..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Calculando costos a partir de los centros..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr "IDW"
@@ -11969,7 +12823,7 @@ msgstr "Número (%s) de puntos a interpolar no admitido"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -12613,7 +13467,7 @@ msgstr "Ningún registro en la tabla LR"
 msgid "More than one record in LR table"
 msgstr "Más de un registro en la tabla LR"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr "ensamblando"
 
@@ -12885,41 +13739,51 @@ msgstr "%d vértices de la entrada %d (vértices del tipo dado) eliminados, i.e.
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr "%d contornos no recortados porque el recorte dañaría la topología"
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Imprime atributos de mapa vectorial."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "Hasta condiciones WHERE de sentencia SQL sin palabra clave 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Separador de registros vertical de salida"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid "Print minimal region extent of selected vector features instead of attributes"
 msgstr "Imprimir la extensión mínima de la región de los elementos vectoriales seleccionados en lugar de los atributos"
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 msgid "Region"
 msgstr "Región"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 msgid "Exclude attributes not linked to features"
 msgstr "Excluye atributos no enlazados a elementos"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid "Unable to open vector map <%s> at topology level. Flag '%c' requires topology level."
 msgstr "No ha sido posible abrir mapa vectorial <%s> en el nivel topológico. La bandera '%c' requiere del nivel topológico."
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "No se puede abrir el cursor de selección"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "No se puede obtener el encuadre -bounding box- de area %d"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "No se ha podido obtener el encuadre de línea %d"
@@ -12956,43 +13820,47 @@ msgstr "Número máximo de vértices en segmento"
 msgid "Add new vertices, but do not split"
 msgstr "Añadir nuevos vértices, pero no dividir"
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr "Aplica solo para la opción 'length'"
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 msgid "Use either length or vertices"
 msgstr "Usar longitud o vértices"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr "La longitud debe ser positiva pero es %g"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, c-format
 msgid "Unknown unit %s"
 msgstr "Unidad %s desconocida"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 msgid "Can not get projection units"
 msgstr "No se pueden obtener unidades de proyección"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, c-format
 msgid "Length in map units: %g"
 msgstr "Longitud en unidades del mapa: %g"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, c-format
 msgid "Length in meters: %g"
 msgstr "Longitud en metro: %g"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 msgid "Number of vertices must be at least 2"
 msgstr "El número de vertices debe ser al menos 2"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "No ha sido posible hacer segmento de línea: %f - %f (longitud de línea = %f)"
@@ -13100,7 +13968,9 @@ msgstr "Ángulo de rotación (en grados en el sentido de las agujas del reloj)"
 msgid "Number of vertex points per grid cell"
 msgstr "Número de puntos vértice por celda de malla"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 msgid "Output feature type"
 msgstr "Tipo de elemento de salida"
 
@@ -13194,10 +14064,13 @@ msgid "Writing out vector columns..."
 msgstr "Escribiendo columnas del vectorial de salida..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -13208,6 +14081,7 @@ msgstr "álgebra"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 msgid "aggregation"
@@ -13346,8 +14220,9 @@ msgstr "Situación"
 msgid "Offset label in y-direction"
 msgstr "Margen de etiqueta en dirección Y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Nombre de fuente"
 
@@ -13414,6 +14289,119 @@ msgstr "Encontrando cuadrados..."
 msgid "Counting points quadrats..."
 msgstr "Contando puntos cuadrantes..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Clasificación de puntos"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "No se han encontrado puntos de datos"
+
+#: ../vector/v.decimate/main.c:131
+msgid "Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid "For example, 5 will import 80 percent of points. If not specified, all points are copied"
+msgstr "Se importan los valores enteros"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid "For example, 4 will import 25 percent of points. If not specified, all points are copied"
+msgstr "Se importan los valores enteros"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> número de puntos no válido"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Valor de toleracia máximo"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Número de puntos vértice horizontales  porrr"
+
+#: ../vector/v.decimate/main.c:211
+msgid "Preserves only the given number of points per grid cell in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Número de puntos vértice horizontales  porrr"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "desviación estándar"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid "Input layer must be set to a particular layer, not <%s>, when using <%s> option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid "Settings for count-based decimation would cause it to do nothing and no other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -13428,28 +14416,28 @@ msgstr "Falta Información de destino para el grupo <%s> "
 msgid "Target location <%s> not found"
 msgstr "Localización de destino <%s> no encontrada"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Directorio de mapas <%s> en la localización de destino <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "permiso denegado"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "no encontrado"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "Por favor, ejecutar i.targer para group."
 
@@ -13749,10 +14737,6 @@ msgstr "Calculando distancias geométricas entre %d primitivas..."
 msgid " Database connection not defined for layer <%s>"
 msgstr " La conexión a la base de datos no ha sido definida para la capa <%s>"
 
-#: ../vector/v.univar/main.c:358
-msgid "Only numeric column type is supported"
-msgstr "Solamente está soportada columna de tipo numérico"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "No se pueden ordenar la matriz de claves/valores"
@@ -13835,15 +14819,16 @@ msgid_plural "%d records updated."
 msgstr[0] "%d registro actualizado"
 msgstr[1] "%d registros actualizados"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Importa datos vecotriales a mapas vectoriales de GRASS usando la librería OGR."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "Nombre de fuente de datos OGR"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+msgid "Name of OGR datasource to be imported"
+msgstr "Nombre de fuente de datos OGR de salida a importar"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -13853,12 +14838,12 @@ msgstr ""
 "\tShapefile de ESRI: directorio que contiene shapefiles\n"
 "\tArchivo MapInfo: directorio que contiene archivos MapInfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr "Nombre de capa OGR. Si no se indica, se importan todas las capas disponibles."
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -13868,374 +14853,377 @@ msgstr ""
 "\t\tShapefile ESRI: nombre del shapefile\n"
 "\t\tArchivo MapInfo: nombre del archivo MapInfo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Tamaño de área mínimo a importar (metros cuadrados)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr "Las áreas más pequeñas y las islas se ignorarán. Debería ser mayor que snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "Cambiar opcionalmente el tipo de entrada por defecto"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 msgid "import area centroids as points"
 msgstr "importar centroides de áreas como puntos"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 msgid "import area boundaries as lines"
 msgstr "importar contorno de área como líneas"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 msgid "import lines as area boundaries"
 msgstr "importar líneas como contornos de área"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 msgid "import points as centroids"
 msgstr "importar puntos como centroides"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Umbral de autoensamblado para contornos (unidades de mapa)"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' para no ensamblar"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid "List of column names to be used instead of original names, first is used for category column"
 msgstr "Lista de nombres de columna a usar en vez de los originales. El primero se usa para la columna de categoría"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 msgid "Encoding value for attribute data"
 msgstr "Valor de codificación para atributo de datos"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr "Anula interpretación de codificación, útil cuando se importa Shapefile de ESRI"
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 msgid "Name of column used for categories"
 msgstr "Nombre de la columna para categorías"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid "If not given, categories are generated as unique values and stored in 'cat' column"
 msgstr "Si no se da, las categorías son generadas como valores únicos y guardados en la columna 'cat'"
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 msgid "Name of geometry column"
 msgstr "Nombre de la columna de geometría"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Si no se da, se usarán todas las columnas de geometría de la entrada"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 msgid "List supported OGR formats and exit"
 msgstr "Enlistar formatos OGR soportados y salida"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 msgid "List available OGR layers in data source and exit"
 msgstr "Enlistar las capas OGR disponibles en la fuente de datos y salir"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "No limpiar polígonos (no recomendado)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr "Forzar salida 2D aunque la entrada sea 3D"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "No se pueden obtener unidades de la proyección de la localización actual"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 msgid "Perform projection check only and exit"
 msgstr "Solamente realizar revisión de proyección y salir"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr "También actualiza la región predeterminada si está en el directorio de mapas PERMANENT"
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Cambiar nombres de columna a minúsculas"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid "Database not defined, please check default  connection settings by db.connect"
-msgstr "Base de datos no definida, por favor revise la configuración de conexión predeterminada por db.connect"
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "No se puede abrir el origen de datos <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr "Opción <%s> será ignorada. OGR no lo soporta para el formato seleccionado (%s)."
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL >= 1.11"
 msgstr "Opción <%s> será ignorada. Múltiples campos de geometría son soportados por GDAL >=1.11"
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Valor codificado no soportado por el controlador OGR <%s>"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "Fuente de datos <%s> (formato '%s') contiene %d capas:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 msgid "No OGR layers available"
 msgstr "No hay capas OGR disponibles"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Todos las capas OGR disponibles serán importadas al mapa vectorial <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Columna geometría <%s> no encontrada en capa OGR <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr "La bandera region solamente es aplicada a la primer capa OGR"
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr "La región actual no se sobrelapa con OGR de entrada. Nada qué importar."
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr "La opción 'spatial' es aplicada solamente con la primer capa OGR"
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr "Los parámetros 'spatial' no sobrelapan con entrada OGR. No qué importar."
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr "La opción 'where' es aplicada solamente a la primer capa OGR"
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr "Revise si capa OGR <%s> contiene polígonos..."
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Distancia de división de límites en unidades de mapa: %G"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Usando vectorial temporal <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, c-format
 msgid "Key column '%s' not found"
 msgstr "Columna clave '%s' no encontrada"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, c-format
 msgid "Key column '%s' is not integer"
 msgstr "La columna '%s' no es de tipo entero"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Nombre de columna <%s> renombrada como <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr "Escribiendo columna <%s> con entero 64 como entero 32"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr "Escribiendo columna <%s> con longitud fija de %d caracteres (puede quedar truncada)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid "Width for column %s set to 255 (was not specified by OGR), some strings may be truncated!"
 msgstr "Anchura para la columna %s establecida a 255 (no fue especificada por OGR). ¡Algunas cadenas pueden quedar truncadas!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr "Escribiendo la columna %s con longitud fija de %d caracteres (puede quedar truncada)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Tipo de columna (Ogr_fyle: %d) no soportado (Ogr_fieldname: %s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Importando elementos %d (capa OGR <%s>)..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s sin geometría omitidos"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 msgid "Cleaning polygons"
 msgstr "Limpiando polígonos"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Ensamblar contornos (umbral = %.3e):"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 msgid "Merging boundaries..."
 msgstr "Uniendo contornos..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Cambiar nodos colgantes de los contornos a líneas:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 msgid "Changing boundary bridges to lines..."
 msgstr "Cambiando puentes de contornos a líneas..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Encontrando centroides para capa OGR <%s>..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid "%d areas represent more (overlapping) features, because polygons overlap in input layer(s). Such areas are linked to more than 1 row in attribute table. The number of features for those areas is stored as category in layer %d"
 msgstr "%d áreas representan más elementos (solapados), porque los polígonos solapan en la capa(s) de entrada. Estas áreas están enlazadas a más de una fila en la tabla de atributos. El número de elementos para estas áreas se guarda como categoría en la capa %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr "%d polígonos de entrada\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d polígonos de entrada"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Área total: %G (%d areas)\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Área total: %G (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Área solapada: %G (%d areas)\n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Área solapada: %G (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Área sin categoría: %G (%d areas)\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Área sin categoría: %G (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr "Algunos de los polígonos de entrada se sobrelapan entre sí."
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr "Si no se quiere sobrelapamiento, los datos necesitan ser limpiados."
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr "La entrada puede ser limpiada ensamblando vértices entre ellos."
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr "Rango estimado para umbral de ensamblado: [%g, %g]"
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr "Trate de importar de nuevo, ensamblando con al menos %g: 'snap=%g'"
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr "Trate de importar de nuevo, ensamblando con %g: 'snap=%g'"
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr "Es posible que sea necesario limpiar manualmente."
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr "%d polígonos de entrada fueron perdidos durante la importación."
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr "%d áreas adicionales fueron creadas durante la importación."
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "El umbral %g para ensamblado puede ser demasiado grande."
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 msgid "Import failed"
 msgstr "Falló importación."
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "No ha sido posible eliminar tabla: '%s'"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr "Se actualizó la región predeterminada para esta Localización"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr "Actualizada la región para el directorio de mapas actual"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid "Input data contains 3D features. Created vector is 2D only, disable -2 flag to import 3D vector."
 msgstr "Datos de entrada contienen elementos 3D. El vectorial creado es 2D. Use la bandera -2 para importar vectorial 3D."
 
@@ -14434,6 +15422,11 @@ msgstr "Mapa vectorial <%s> no encontrado en el Directorio de mapas actual. No e
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "Conexión a base de datos no definida para la capa %d. Use v.db.connect primero."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "No se encuentra la tabla de color del mapa raster <%s>"
+
 #: ../vector/v.to.db/parse.c:36
 msgid "Layer number or name (write to)"
 msgstr "Número o nombre de capa (write to)"
@@ -14580,17 +15573,17 @@ msgstr "La opción 'azimuth' sólo tiene sentido para líneas"
 msgid "Querying database... "
 msgstr "Consultando base de datos... "
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid "Query for category '0' (no category) was not executed because of too many (%d) query categories. All later reported values for cat 0 are not valid."
 msgstr "La consulta de categorías '0' (sin categoría) no se ejecutó debido a demasiadas categorías de consulta (%d). Todos los valores anteriores informados para la categoría 0 no son válidos."
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr "Múltiples resultados de la consulta, valores de salida establecidos a NULO (categoría [%d])"
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "No se puede recuperar el registro"
 
@@ -14751,14 +15744,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr "En el modo de red, multiplicar el resultado por el número de puntos de entrada"
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "El mapa ráster <%s> ya existe y será sobrescrito"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "El mapa ráster <%s> ya existe"
@@ -14873,14 +15866,19 @@ msgstr "Asignar número de categoría de primer línea a polilínea"
 msgid "Assign multiple category numbers to polyline"
 msgstr "Asignar múltiples números de categoría a polilínea"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Crea línea paralela a las líneas vectoriales de entrada"
+
+#: ../vector/v.build.polylines/main.c:231
 #, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "%d línea o contorno encontrado en mapa vectorial de entrada"
 msgstr[1] "%d líneas o contornos encontrados en mapa vectorial de entrada"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -15331,19 +16329,24 @@ msgstr "marca de tiempo"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -15357,6 +16360,7 @@ msgstr "marca de tiempo"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -15369,7 +16373,7 @@ msgstr "marca de tiempo"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -15518,6 +16522,7 @@ msgid "Unable to map image file"
 msgstr "No se puede mapear el archivo de imagen"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -15535,14 +16540,14 @@ msgstr "No se puede mapear el archivo de imagen"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -15580,6 +16585,54 @@ msgstr "No se pueden conseguir suficientes colores."
 msgid "Using private colormap for DirectColor visual."
 msgstr "Usando mapa de color privado para DirectColor visual."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Muestra una barra de escala en el monitor de GRASS."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr "monitores"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Crear directorio de mapas si no existe"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Eliminar todos los marcos y borrar la pantalla"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Mostrar directorio de mapas actual y salir"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Mostrar el nombre del monitor seleccionado actualmente y salir"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid "Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr "Tamaño y posición como porcentaje de coordenadas de pantalla (0,0 es abajo a la izquierda)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid "Image fusion algorithms to sharpen multispectral with high-res panchromatic channels"
 msgstr "Algoritmos de fusión de imágenes para mejorar multiespectral con canales pancromáticos de alta resolución"
@@ -15595,7 +16648,7 @@ msgstr "Algoritmos de fusión de imágenes para mejorar multiespectral con canal
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -15608,7 +16661,7 @@ msgstr "Algoritmos de fusión de imágenes para mejorar multiespectral con canal
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -15675,18 +16728,23 @@ msgid "Uploads space time raster dataset values at positions of vector points to
 msgstr "Carga valores de ráster en las posiciones de puntos vectoriales a la tabla."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -15701,6 +16759,7 @@ msgstr "Carga valores de ráster en las posiciones de puntos vectoriales a la ta
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -15781,6 +16840,84 @@ msgstr "Porcentaje de peso del primer mapa para la mezcla de color"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr "Combinar capas R,G,B resultantes en un solo mapa de salida"
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid "Apply temporal and spatial operations on space time 3D raster datasets using temporal 3D raster algebra."
+msgstr "Convierte mapas ráster 3D en mapas ráster 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid "Algebraic expression for temporal and spatial analysis of space time 3D raster datasets"
+msgstr "Listar mapas vectoriales en la localización de entrada y salir"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+msgid "Basename of the new generated output maps"
+msgstr "Nombre base de los mapas nuevos generados de salida"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid "A numerical suffix separated by an underscore will be attached to create a unique identifier"
+msgstr "Un sufijo numérico separado por un guión bajo será añadido para crear un identificador único"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Número de procesos r3.mapcalc que correrán en paralelo"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr "Activar topología espacial"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+msgid "Register Null maps"
+msgstr "Registrado mapas Nulos"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid "Creates raster plane map given dip (inclination), aspect (azimuth) and one point."
 msgstr "Crea un mapa ráster plano dando pendiente (inclinación), orientación (azimut) y un punto."
@@ -15897,7 +17034,7 @@ msgstr "Renombrar un conjunto de datos espacio temporales"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 msgid "map management"
@@ -15909,8 +17046,8 @@ msgid "rename"
 msgstr "renombrar"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -15919,9 +17056,9 @@ msgid "input"
 msgstr "entrada"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -15935,6 +17072,70 @@ msgstr "Requerido"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Reconstruye la topología de todos los mapas vectoriales en el directorio de mapas actual"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid "Produces a space time vector dataset of specified contours from a space time raster dataset."
+msgstr "Produce un mapa vectorial de contrornos específicado a partir de un mapa raster."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Contraste"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid "Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Incremento entre niveles de contorno"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Lista de niveles de contorno"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Nivel mínimo de contorno"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Nivel máximo de contorno"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Número mínimo de puntos para una línea de contorno (0 -> sin límite)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid "Number of r.contour processes to run in parallel, more than 1 process works only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Mapas raster de entrada"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "No crear la tabla de atributos"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 msgid "Lists registered maps of a space time raster dataset."
 msgstr "Enlistar mapas registrados en un conjunto de datos ráster espacio temporales."
@@ -15942,7 +17143,7 @@ msgstr "Enlistar mapas registrados en un conjunto de datos ráster espacio tempo
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr "lista"
 
@@ -15991,8 +17192,9 @@ msgid "RGB"
 msgstr "RGB"
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr "satélite"
 
@@ -16092,61 +17294,33 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr "Granularidad para acumulación '1 day'"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-msgid "Basename of the new generated output maps"
-msgstr "Nombre base de los mapas nuevos generados de salida"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid "A numerical suffix separated by an underscore will be attached to create a unique identifier"
-msgstr "Un sufijo numérico separado por un guión bajo será añadido para crear un identificador único"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
-msgid "Use these limits in case lower and/or upper input  space time raster datasets are not defined"
-msgstr "Use estos límites en caso de que los mapas de entrada lower y/o upper no estén definidos"
-
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+msgid "Use these limits in case lower and/or upper input  space time raster datasets are not defined or contain NULL values"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 msgid "Scale factor for input space time raster dataset"
 msgstr "Factor de escalamiento para conjunto de datos ráster espacio temporales de entrada"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 msgid "Shift factor for input space time raster dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid "This method will be applied to compute the accumulative values from the input maps in a single granule"
 msgstr "Este métdo será aplicado para calcular la acumulación de valores desde mapas de entrada en un solo gránulo"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr "Índice de grado de días de crecimiento o índices Winkler: media: sum(mapas de entrada)/(cantidad de mapas de entrada); Grado de días biológicamente efectivos; índice heliotermal Huglin"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid "Register empty maps in the output space time raster dataset, otherwise they will be deleted"
 msgstr "Registrar mapas vacíos en el conjunto de datos espacio temporales de salida, de otra manera serán eliminados"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr "Revertir dirección del tiempo en acumulación cíclica"
 
@@ -16174,40 +17348,26 @@ msgstr "Intervalos de tiempo para este conjunto de datos espacio temporales (rá
 msgid "Type of the aggregation space time dataset"
 msgstr "Tipo de agregación del conjunto de datos espacio temporales"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Operación de agregar va a ser realizara en los mapas ráster"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid "Offset that is used to create the output map ids, output map id is generated as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Número de procesos r.mapcalc que correrán en paralelo"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-msgid "Register Null maps"
-msgstr "Registrado mapas Nulos"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid "Use start time - truncated according to granularity - as suffix (overrides offset option)"
-msgstr "Usar tiempo de inicio - truncado de acuerdo a la granularidad - como sufijo (anula la opción offset)"
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 msgid "Exports space time raster dataset as VTK time series."
 msgstr "Exporta conjunto de datos ráster espacio temporales como serie de tiempo VTK."
@@ -16293,8 +17453,9 @@ msgid "multispectral"
 msgstr "multiespectral"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
-msgid "Name for output image"
-msgstr "Nombre para la imagen de salida"
+#, fuzzy
+msgid "Name for output image (or text file for -t)"
+msgstr "Nombre para el archivo imagen de salida (sin extensión)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 msgid "Graphics format for output file"
@@ -16308,6 +17469,48 @@ msgstr "Mostrar coordenadas de muestra en vez de numeración en la leyenda"
 msgid "Use gnuplot for display"
 msgstr "Usar gnuplot para visualizador"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Archivo de georeferenciación de salida"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid "Sample a space time raster dataset at specific vector point coordinates and write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Lista de valores separados por coma"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Nombre de un archivo de salida para albergar el informe"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+msgid "Sort the maps by category"
+msgstr "Ordenar los mapas por categoría"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid "The layout of the output. One point per row (row), one point per column (col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Número de clases a definir"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr "Cabecera de fila de salida"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 msgid "Imports a space time vector dataset from a GRASS GIS specific archive file."
 msgstr "Importa un conjunto de daos vectoriales espacio temporales a partir de un archivo de almacenamiento específico para GRASS."
@@ -16335,30 +17538,10 @@ msgid "Create a new location and import the data into it. Do not run this module
 msgstr "Crear una nueva Localización e importar los datos a ella. No correr este módilo en paralelo o interrumpirlo cuado una nueva Localización deba ser creada"
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Ampliar la extensión de la localización en base a nuevo conjunto de datos"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr "Invalida verificación de la proyección (usar la proyección de la localización actual)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Asumir que el conjunto de datos tiene la misma proyección de la Localización actual"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid "Create the location specified by the \"location\" parameter and exit. Do not import the space time vector datasets."
 msgstr "Crear la Localización especificada por el parámetro \"location\" y salir. No importa conjuntos de datos vectoriales espacio temporales."
@@ -16521,6 +17704,16 @@ msgstr "El número de teselas de celda debería solapas en cada dirección"
 msgid "Output field separator"
 msgstr "Separador de campos de salida"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid "Apply temporal and spatial operations on space time raster datasets using temporal raster algebra."
+msgstr "Convierte mapas ráster 3D en mapas ráster 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid "r.mapcalc expression for temporal and spatial analysis of space time raster datasets"
+msgstr "Listar mapas vectoriales en la localización de entrada y salir"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Muestra un mapa ráster y su leyenda en una ventana gráfica"
@@ -16606,8 +17799,15 @@ msgstr "Ordenar el conjunto de datos espacio temporales por categoría"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Autoensambla temporalmente los mapas de un conjuto de datos espacio temporal."
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "general, gestión de mapas"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 msgid "Name of an existing space time dataset"
 msgstr "Nombre de un conjunto de datos espacio temporales existente"
 
@@ -16616,7 +17816,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr "Hace mosaicos de varias imágenes y extiende colormap."
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr "haciendo mosaicos"
 
@@ -16625,15 +17825,15 @@ msgstr "haciendo mosaicos"
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Nombre de la nueva base de datos"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr "cambiar"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr "Cambiar granularidad"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid "Format absolute time: \"x years, x months, x weeks, x days, x hours, x minutes, x seconds\", relative time is of type integer"
 msgstr "Formato de tiempo absoluto \"x años, x meses, x semanas, x días, x horas, x minutos, x segundos\" tiempo relativo es de tipo entero"
 
@@ -16669,7 +17869,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Guarda el contenido del monitor activo en un fichero gráfico."
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Nombre para el archivo de salida"
 
@@ -16737,15 +17937,24 @@ msgstr "Nombre de archivo pack de entrada"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Nombre para mapa ráster de salida (predeterminado: se toma de archivo de entrada internos)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid "Apply temporal and spatial oeprations on space time vector datasets using temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr "Expresión mapcalc espacio temporal"
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Combina varios conjuntos de datos espacio temporales en un solo conjunto de datos espacio temporal."
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr "unir"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 msgid "inputs"
 msgstr "entradas"
@@ -16802,10 +18011,14 @@ msgid "The output space time raster dataset that stores the indication of the st
 msgstr "El conjunto de datos ráster espacio temporales de salida que guarda la indicación del tiempo de inicio, intermedio y término del rango de datos especificados"
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
+msgid "Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'count' for numerical suffix with a specific number of digits (default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
 msgid "The minimum and maximum value of the occurrence of accumulated values, these values will be used if the min/max space time raster datasets are not specified"
 msgstr "El valor mínimo y máximo de la ocurrencia de valores acumulados, estos valores serán usados si no se especifica mínimo/máximo de conjunto de datos ráster espacio temporales"
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid "The user defined values that indicate start, intermediate and end status in the indicator output space time raster dataset"
 msgstr "Valores definidos por el usuario que indican estátus de inicio, intermedio y término en el conjunto de datos ráster de indicadores de salida"
 
@@ -16910,26 +18123,25 @@ msgstr "Valor literal con el cual actualizar la columna"
 msgid "Name of other attribute column to query, can be combination of columns (e.g. co1+col2)"
 msgstr "Nombre de otra columna de atributos a consultar, puede ser combinación de columnas (ej. col1 + col2)"
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 msgid "Redraws the content of currently selected monitor."
 msgstr "Redibuja el contenido del monitor actualmente seleccionado."
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
-msgstr "monitores"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 msgid "Create a 3D raster map from an assemblage of many coordinates using univariate statistics"
 msgstr "Crear un mapa ráster 3D a patrir de un ensamblaje de varias coordenadas usando estadísticas univariadas"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "Explorar archivo de datos para la extensión y luego salir"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "En modo de escaneo, imprimir usando estilo de script de consola"
 
@@ -16943,7 +18155,7 @@ msgid "ASCII file containing input data"
 msgstr "Archivo ASCII que contiene datos de entrada"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Estadística a utilizar para los valores ráster"
 
@@ -16951,14 +18163,14 @@ msgstr "Estadística a utilizar para los valores ráster"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Estadístico"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Tipo de almacenamiento para el mapa ráster resultante"
 
@@ -16994,17 +18206,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Factor de escalamiento a aplicar a datos de columna de valores"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Porcentaje de mapa a mantener en memoria"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "pth percentil de los valores"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid "Discard <trim> percent of the smallest and <trim> percent of the largest observations"
 msgstr "Descartar <trim> porcentaje de las menores y <trim> porcentaje de las mayores observaciones"
 
@@ -17032,10 +18244,6 @@ msgstr "Permite al usuario consultar de forma interactiva una capa de mapa rást
 msgid "Imports vector data into a GRASS vector map using OGR library and reprojects on the fly."
 msgstr "Importa datos vectoriales a mapa vectorial GRASS usando librería OGR y reproyecta al vuelo utilizando la librería OGR."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-msgid "Name of OGR datasource to be imported"
-msgstr "Nombre de fuente de datos OGR de salida a importar"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 msgid "Output vector map extent"
 msgstr "Extensión de mapa vectorial de salida"
@@ -17128,7 +18336,7 @@ msgstr "Buscar módulos GRASS usando palabras clave"
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -17199,20 +18407,15 @@ msgstr "Ejecuta expresiones de r3.mapcalc en mapas muestreados de conjunto de da
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr "expresión r3.mapcalc aplicada a cada tiempo de los datos muestreados"
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Número de procesos r3.mapcalc que correrán en paralelo"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Extraer subconjunto de conjunto de datos espacio temporales vectoriales."
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid "The number of v.extract processes to run in parallel. Use only if database backend is used which supports concurrent writing"
 msgstr "El número de procesos v.extract a ejecutar de manera paralela. Usar solamente si se usa backend de base de datos que soporte escritura concurrente"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 msgid "Register empty maps"
 msgstr "Registrado mapas vacíos"
 
@@ -17307,22 +18510,22 @@ msgstr "Agrega temporalmente los mapas de un conjunto de datos ráster espacio t
 msgid "Either a numerical suffix or the start time (s-flag) separated by an underscore will be attached to create a unique identifier"
 msgstr "Se adjuntara un sufijo numérico o tiempo de inicio (bandera s) separado por un guión bajo para crear un identificador único"
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid "Aggregation granularity, format absolute time \"x years, x months, x weeks, x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr "Granularidad de agregación, formato de tiempo absoluto \"x años, x meses, x días, x horas, x minutos, x segundos\" o un valor entero para tiempo relativo"
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 msgid "Number of r.series processes to run in parallel"
 msgstr "Número de procesos r.series que correrán en paralelo"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 msgid "Performs spatio-temporal mapcalc expressions on temporally sampled maps of space time raster datasets."
 msgstr "Ejecuta expresiones mapcalc espacio temporales en mapas temporales muestreados de conjunto de datos ráster espacio temporales."
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr "Expresión mapcalc espacio temporal"
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 msgid "Basename for output raster maps"
 msgstr "Nombre base para mapas ráster de salida"
@@ -17413,68 +18616,83 @@ msgid "Maintains GRASS Addons extensions in local GRASS installation."
 msgstr "Mantiene los Complementos de extensiones de GRASS en instalación local GRASS"
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
-msgid "Downloads, installs extensions from GRASS Addons SVN repository into local GRASS installation or removes installed extensions."
-msgstr "Descarga, instala extensiones desde repositorio SVN de complementos GRASS en la instalación local de GRASS o remueve extensiones instaladas."
+msgid "Downloads and installs extensions from GRASS Addons repository or other source into the local GRASS installation or removes installed extensions."
+msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 msgid "Name of extension to install or remove"
 msgstr "Nombre de extensión a instalar o eliminar"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr "Nombre de caja de herramientas (conjunto de extesiones) cuando se de la bandera -t"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
-msgstr "URL de repositorio SVN de Complementos"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid "URL or directory to get the extension from (supported only on Linux and Mac)"
+msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid "The official repository is used by default. User can specify a ZIP file, directory or a repository on common hosting services. If not identified, Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr "Prefijo donde instalar extensión (ignorado cuando se da la bandera -s)"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr "Establecer el proxy con: \"http=<value>,ftp=<value>\""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
-msgid "List available extensions in the GRASS Addons SVN repository"
-msgstr "Enlistar extensiones disponibles en el respositorio SVN de Complementos de GRASS"
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
+#, fuzzy
+msgid "List available extensions in the official GRASS GIS Addons repository"
+msgstr "Listar los módulos disponibles en el respositorio GRASS Addons SVN"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
-msgid "List available extensions in the GRASS Addons SVN repository including module description"
-msgstr "Enlistar extensiones disponibles en el repositorio SVN de Completos de GRASS incluyendo la descripción del módulo"
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
+#, fuzzy
+msgid "List available extensions in the official GRASS GIS Addons repository including module description"
+msgstr "Listar reglas disponibles y salir"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
-msgid "List available extensions in the GRASS Addons SVN repository (shell script style)"
-msgstr "Enlistar extensiones disponibles en el repositorio SVN de GRASS (estilo script de consola de comandos)"
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#, fuzzy
+msgid "List available extensions in the official GRASS GIS Addons repository (shell script style)"
+msgstr "Listar reglas disponibles y salir"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr "Enlistar extensiones instaladas localmente"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 msgid "Install"
 msgstr "Instalar"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr "Descargar código fuente y salir"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr "No instalar la nueva extensión, solo compilarla"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr "Forzar eliminar cuando desinstalando la extensión (operation=remove)"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Operar en cajas de herramientas en vez de módulos individuales (expermiental)"
 
@@ -17573,10 +18791,6 @@ msgstr "Seleccionar mapas desde conjunto de datos por relaciones topológicas a
 msgid "The temporal mapcalc expression"
 msgstr "La expresión mapcalc temporal"
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr "Activar topología espacial"
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr "Elimina un elemento vectorial de un mapa vectorial mediante la selección de atributos."
@@ -17621,6 +18835,50 @@ msgstr "Probar el controlador de base de datos. La base de datos debe existir y
 msgid "Test name"
 msgstr "Nombre de prueba"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Convierte mapas ráster 3D en mapas ráster 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+msgid "Name of attribute column to store value"
+msgstr "Nombre de columa de atributos en la cual guardar valor"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid "Number of r.to.vect processes to run in parallel, more than 1 process works only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Suavizar esquinas de elementos de áreas"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+msgid "Write raster values as z coordinate"
+msgstr "Escribir valores ráster como coordenada z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr "Tabla no ha sido creada. Actualmente soportada solamente para puntos."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+msgid "Do not build vector topology"
+msgstr "No constuir topología vectorial"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr "Nombre debe ajustarse al estándar SQL"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr "Usar valores ráster como categorías en vez de secuencia única (sólo CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid "Allows the user to interactively query vector map layers at user-selected locations."
 msgstr "Permite al usuario consultar de forma interactiva una capa de mapa vectorial en ubicaciones seleccionadas por el usuario."
@@ -17677,6 +18935,16 @@ msgstr "El formato de exportación de un solo mapa ráster"
 msgid "Supported are GTiff, AAIGrid via r.out.gdal and the GRASS package format of r.pack"
 msgstr "Los soportados son GTiff, AAIGrid vía r.out.gdal y el formato de paquete GRASS de r.pack"
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+msgid "Data type"
+msgstr "Tipo de datos"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "La opción z sólo está soportada para puntos"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr "Mostrar las páginas del manual de los módulos GRASS."
@@ -17817,16 +19085,21 @@ msgid "Description of the space time dataset"
 msgstr "Descripción del nuevo conjunto de datos espacio temporales"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nombre de la nueva base de datos"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid "Update the metadata information and spatial extent of registered maps from the GRASS spatial database"
 msgstr "Actualizar información de metadatos y extensión espacial de los mapas registrados desde la base de datos espaciales GRASS"
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid "Check for removed maps and delete them from the temporal database and all effected space time datasets"
 msgstr "Revisar para mapas eliminados y eliminarlos desde la base de datos y todos los conjuntos de datos afectados"
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
-msgid "Update metadata information, temporal and spatial extent from registered maps"
-msgstr "Actualizar información de metadatos, extensión temporal y espacial de los mapas registrados"
+#: ../locale/scriptstrings/t.support_to_translate.c:13
+msgid "Update metadata information, temporal and spatial extent from registered maps based on database entries."
+msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
 msgid "Exports a space time vector dataset as GRASS GIS specific archive file."
@@ -17862,12 +19135,12 @@ msgstr "Realiza transformación Tasseled Cap (Kauth Thomas)"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr "Landsat"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr "MODIS"
 
@@ -17933,7 +19206,7 @@ msgstr "Realiza un análisis de vecindario para cada mapa en un conjunto de dato
 msgid "Neighborhood size"
 msgstr "Tamaño de vecindario"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Número de procesos r.neighbor que correrán en paralelo"
 
@@ -18013,22 +19286,39 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Resolución de mapa ráster (usar con opción resolution=valor)"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Título para el mapa ráster resultante"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadatos"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 msgid "Estimate resolution only"
 msgstr "Estimar solamente resolución"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 msgid "Optional"
 msgstr "Opcional"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "No realizar optimización de cortado de la región"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Forzar los mpas Lat/Lon a encajar en coordenadas geogPosición de pantalla en coordenadas geográficas  (90N,S; 180E,W)"
 
@@ -18085,15 +19375,35 @@ msgstr "Nombre antiguo y nuevo de la columna (antiguo,nuevo)"
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "Carga valores vectoriales en las posiciones de puntos vectoriales a la tabla."
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr "capa,columna"
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr "columna"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 msgid "Name of vector map to be queried"
 msgstr "Nombre de mapa vectorial a consultar"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+#, fuzzy
+msgid "query_layer,query_column"
+msgstr "capa,columna"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "capa,columna"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 msgid "Name of attribute column to be queried"
 msgstr "Nombre de columna de atributos a consultar"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr "Distancia máxima de consulta en unidades de mapa"
 
@@ -18172,6 +19482,7 @@ msgstr "Valor de rango"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr "Se ajusta automáticamente si no se define"
 
@@ -18184,10 +19495,15 @@ msgid "Sill value"
 msgstr "Valor de meseta"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+#, fuzzy
+msgid "Kappa value"
+msgstr "Valor ráster"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 msgid "Name for output variance raster map"
 msgstr "Nombre de mapas ráster de varianza de salida"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr "Si se omite, será <input name>_kriging.var"
 
@@ -18285,23 +19601,19 @@ msgstr "Convierte un conjunto de datos ráster en un mapa ráster 3D."
 msgid "Performs different aggregation algorithms from r.series on all or a subset of raster maps in a space time raster dataset."
 msgstr "Realiza algoritmos de agregación diferentes de r.series en todos los subconjuntos de mapas raster en un conjunto de datos ráster espacio temporales."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 msgid "series"
 msgstr "series"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-msgid "Sort the maps by category"
-msgstr "Ordenar los mapas por categoría"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 msgid "Do not assign the space time raster dataset start and end time to the output map"
 msgstr "No asignar el tiempo de inicio y término del conjunto de datos espacio temporales al mapa de salida"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Propagar NULOS"
 
@@ -18334,7 +19646,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "Genera una capa de mapa ráster con áreas contiguas incrementadas en una celda."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr "proximidad"
 
@@ -18347,7 +19659,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Radio de buffer en celdas ráster"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Métrica"
 
@@ -18363,11 +19675,11 @@ msgstr "Valor a escribir para celdas \"incrementadas\""
 msgid "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Reemplaza vacíos en un conjunto de datos ráster espacio temporales con mapas ráster interpolados."
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Número de procesos de interpolación a correr en paralelo"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid "Assign the space time raster dataset start and end time to the output map"
 msgstr "Asignar el tiempo de inicio y término del conjunto de datos espacio temporales en el mapa de salida"
 
@@ -18388,7 +19700,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "Rellenar áreas sin datos de mapas ráster, usando la interpolación de splines."
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -18415,6 +19727,16 @@ msgstr "Parámetro de suavizado spline"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "Tiempo utilizado para iteraciones [minutos]"
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Interpolación spline bicúbica o bilineal con regularización Tykhonov."
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Localización: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 msgid "Joins a database table to a vector map table."
 msgstr "Une tabla de una base de datos a una tabla de un mapa vectorial."
@@ -18423,18 +19745,10 @@ msgstr "Une tabla de una base de datos a una tabla de un mapa vectorial."
 msgid "Vector map to which to join other table"
 msgstr "Mapa vectorial al que unir otra tabla"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr "capa,columna"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr "Capa a la que unir"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr "columna"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr "Columna de identificador (ej.: cat) en la tabla vectorial que será usada para unión"
@@ -18459,15 +19773,15 @@ msgstr "Subconjunto de columnas desde la otra tabla"
 msgid "Imports space time raster dataset."
 msgstr "Importa conjunto de datos ráster espacio temporales."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 msgid "Set the current region from the last map that was imported"
 msgstr "Establecer la región actual desde el último mapa que fue importado"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 msgid "Link the raster files using r.external"
 msgstr "Enlazar el archivo ráster usando r.external"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid "Create the location specified by the \"location\" parameter and exit. Do not import the space time raster datasets."
 msgstr "Crear la Localización especificada por el parámetro \"location\" y salir. No importa conjuntos de datos ráster espacio temporales."
 
@@ -18534,14 +19848,17 @@ msgstr "Mapa ráster 3D <%s> no encontrado"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -18572,11 +19889,11 @@ msgstr "No se puede asignar memoria para la cadena"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "No ha sido posible leer el rango del mapa ráster 3D <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Error mientras se leía archivo de historia"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -18584,8 +19901,8 @@ msgstr "No se puede cerrar mapa ráster 3D <%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Error al escribir datos"
 
@@ -18635,6 +19952,7 @@ msgstr "Salida de enteros no soporta bytes=8 en su construcción"
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "No ha sido posible crear archivo <%s>"
@@ -18754,9 +20072,10 @@ msgstr "Usar un sistema de ecuaciones lineales cuadráticas completamente llenad
 msgid "groundwater flow"
 msgstr "Flujo hídrico subterraneo"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -18780,7 +20099,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "No se puede crear y resolver el sistema de ecuaciones lineal"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "No ha sido posible crear mapa ráster 3D <%s>"
@@ -18837,6 +20159,138 @@ msgstr "Nombre de archivo del mapa ráster %i: %s"
 msgid "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Nombre de archivo de mapa ráster %d: %s ya existe. Usar la bandear --o para sobreescribir."
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Costes para isolíneas"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Por favor, proporciona tres mapas RGB G3D"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Mapa vectorial <%s> no encontrado"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Calculando direcciones de flujo..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid "Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid "If no map is provided, flow lines are generated from each cell of the input 3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Nombre del mapa vectorial de puntos para el que editar la tabla de atributos"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nombre de mapa vectorial a editar"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Nombre para el mapa ráster de salida"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Nombre del mapa(s) raster para el brillo"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid "Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "longitud %f\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Número de iteraciones"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Anchura de corriente (en metros). Por defecto es la anchura de celda ráster."
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "vectorial, interpolación"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "No se ha especificado ningún mapa raster"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "La base de datos por defecto no está asignada"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Número máximo de iteraciones"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Número máximo de iteraciones"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Número de celdas entre líneas de flujo"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "No se puede describir la tabla<%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Error leyendo datos"
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr "Genera estadísticas de volúmenes para mapas ráster 3D."
@@ -18946,11 +20400,11 @@ msgstr "No ha sido posible cerrar archivo ASCII"
 msgid "3D raster map for which to modify null values"
 msgstr "Mapa ráster 3D al cual se modificarán valores nulos"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Lista de valores de celda para establecer a NULO"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "El valor por el que sustituir los valores nulos"
 
@@ -18974,7 +20428,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: no ha sido posible cerrar archivo tmp"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 msgid "null data"
 msgstr "dato nulo"
 
@@ -18982,6 +20436,82 @@ msgstr "dato nulo"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Crear explícitamente el archivo de mapa de bits de valor nulo 3D"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "ráster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "Crear un mapa ráster a partir de un ensamblaje de muchas coordenadas usando estadísticas univariantes."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "No indexar puntos por celda ráster"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Número de puntos vértice horizontales  porrr"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Mapa ráster 3D <%s> no encontrado"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Escribiendo mapa..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "mapa ráster 3D para el que modificar los valores nulos"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Cambiando valor para coordenadas Z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "vectorial, transformación"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "No se pueden crear archivos temporales"
+
 #: ../raster3d/r3.support/main.c:52
 msgid "Allows creation and/or modification of 3D raster map layer support files."
 msgstr "Permite la creación y/o modificación de archivos de soporte de capas de mapas ráster."
@@ -19031,13 +20561,13 @@ msgstr "Testo al cual guardar historia"
 msgid "Update range"
 msgstr "Actualizar rango"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "No ha sido posible leer archivo de categorías de mapa ráster <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Tabla de categorías de [%s] establecida a %s"
@@ -19089,7 +20619,7 @@ msgstr "Error al leer datos binarios"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Cargando %s datoscon %i bytes ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Error al cerrar archivo G3D"
@@ -19433,7 +20963,7 @@ msgstr "write_vtk_data: escribiendo datos de las celdas %s con filas %i columnas
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "¡Valores de mapa ráster 3D incorrectos! Los valores deben estar entre 0 y 255\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -19443,7 +20973,7 @@ msgstr "Método <%s> desconocido"
 msgid "Aggregate operation"
 msgstr "Agregar operación"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr "Quantil a calcular por el método=quantil"
@@ -19469,6 +20999,36 @@ msgstr "Hace de cada valor voxel una función de los valores asignados a los vox
 msgid "Unable to allocate buffer"
 msgstr "No ha sido posible asignar buffer"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Varianza"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid "Computes gradient of a 3D raster map and outputs gradient components as three 3D raster maps."
+msgstr "Combina mapas raster rojos, verdes y azules en una sola composición de mapa raster."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Nombre para el mapa(s) raster de salida"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Tamaño del caché de punto"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "No se puede asignar memoria"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Escribiendo nuevo mapa ráster..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -19777,34 +21337,34 @@ msgstr "Imprimir información en el estilo de script de la consola de comandos d
 msgid "Shell"
 msgstr "Consola de comandos"
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid "Cannot determine GRASS libgis version and date number. The GRASS build might be broken. Report this to developers or packagers.\n"
 msgstr "No se puede determinar versión GRASS libgis y número de fecha. La construcción GRASS puede estar rota. Reporte esto a los desarrolladores o a quienes se encargan de los paquetes.\n"
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid "GRASS GIS libgis version and date number don't have the expected format. Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr "GIS_H_VERSION=\"%s\""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr "GIS_H_DATE=\"%s\""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr "GRASS no está compilado con soporte GDAL/OGR"
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr "GRASS no está compilado con soporte GEOS"
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr "GRASS no está compilado con soporte SQLite"
 
@@ -20079,13 +21639,13 @@ msgid "Unknown operation '%s'"
 msgstr "Operación '%s' desconocida"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr "Opción -%c ignorada"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, c-format
 msgid "Option <%s> ignored"
 msgstr "Opción <%s> ignorada"
@@ -20150,9 +21710,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: los archivos son los mismos, no se requiere ninguna copia"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> ya existe"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> ya existe en el directorio de mapas<%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, c-format
@@ -20251,8 +21811,8 @@ msgstr " \"0\" para sin especificar o \"-1\" para listar y salir"
 msgid "Force override of datum transformation information in input co-ordinate system"
 msgstr "Forzar a ignorar la información de transformación del datum en el sistema de coordenadas de entrada"
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr "Modificar"
 
@@ -20484,9 +22044,9 @@ msgstr "Nombre de archivo(s) a ignorar (predeterminado: none)"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "Patrón"
 
@@ -20498,15 +22058,15 @@ msgstr "Patrón de búsqueda de nombre de archivo"
 msgid "File name exclusion pattern (default: none)"
 msgstr "Patrón de exclusión de nombre de archivo (predeterminado: none)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr "Ignorar mayúsculas y minúsculas"
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "Usar expressiones regulares básicas en vez de comodines"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "Usar expressiones regulares largas en vez de comodines"
 
@@ -20515,7 +22075,7 @@ msgid "Remove base raster maps"
 msgstr "Eliminar mapas ráster base"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "No ha sido posible compilar patrón <%s>"
@@ -20558,71 +22118,61 @@ msgstr "%s: no se puede eliminar o excluir archivos que no se encuentren en el d
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr "Nombres de archivo ilegales no permitidos en el nombre o ignorar opción."
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid "Lists available GRASS data base files of the user-specified data type optionally using the search pattern."
 msgstr "Enlista archivos de base de datos de GRASS del tipo de datos especificado por el usuario opcionalmente usando el patrón de búsqueda."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "Patrón de búsqueda de nombre mapa (por omisión: todos)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "Patrón de exclusión de Map name (por defecto: ninguno)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Directorio de mapas a enlistar (predeterminado: ruta de búsqueda actual)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr "'.' para directorio de mapas actual, '*' para todos los directorios de mapas de la localización"
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Nombre de región guardada para mapa de búsqueda (predeterminado: no restingido)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 msgid "'.' for current region; '*' for default region"
 msgstr "'.' para región actual; '*' para región predeterminada"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "Imprimir tipos de datos"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "Impresión buena en formato leíble"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "Listado detallado (también lista títulos de mapas)"
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "-%c/-%c y %s= son mutuamente excluyentes"
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "-%c/-%c y -%c/-%c son mutuamente excluyentes"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "El directorio de mapas <%s> no existe"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "No se puede leer la cabecera del mapa ráster 3D <%s@%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "No se puede abrir el mapa vectorial <%s@%s> al nivel topológico"
@@ -20809,52 +22359,52 @@ msgstr "No se puede actualizar la región actual"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr "No se puede cambiar la región predeterminada. El directorio de mapas actual no es <PERMANENT>."
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Entrada no válida <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "No se puede obtener información de la proyección de la localización actual"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "No se pueden obtener unidades de la proyección de la localización actual"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "No se pueden actualizar los parámetro de proyección latitud/longitud"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Error en pj_do_proj (proyección de par de coordenadas de entrada)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "Ya está en Lat/Long. Usar la opción -p en su lugar."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid "You are in a simple XY location, projection to Lat/Lon is not possible. Use the -p flag instead."
 msgstr "Está en una localización XY, proyectar a Lat/Lon no es posible. Use la bandera -p en su lugar."
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid "WGS84 output not possible as this location does not contain datum transformation parameters. Try running g.setproj."
 msgstr "Salida WGS84 imposible, ya que esta localización no contiene parámetros de transformación del datum. Pruebe a ejecutar g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr "Los cálculos Lat/Long no pueden realizarse desde un sistema simple XY"
 
@@ -21060,40 +22610,58 @@ msgid "command line interface with GUI startup screen"
 msgstr "interfaz de línea de comando con pantalla GUI de arranque"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
 msgstr "Nombre del archivo del espacio de trabajo que se cargará en el arranque (válido solo para wxGUI)"
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid "By default the GUI starts in the background and control is immediately returned to the caller. When GUI runs in foregreound, it blocks the command line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr "Actualizar configuración predeterminada de interfaz de usuario"
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr "Predeterminado"
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr "No lanzar Gui luego de actualizar la configuración predeterminada de la interfaz de usuario"
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s> es ahora la GUI por defecto"
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr "Nada qué hacer. Para configurar <%s> como interfaz de usuario predeterminada use la bandera -%c"
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr "Tu instalación no incluye la GUI, saliendo."
+
+#: ../general/g.gui/main.c:111
+#, fuzzy, c-format
+msgid "Launching <%s> GUI, please wait..."
+msgstr "Lanzando GUI <%s> en el fondo, por favor espere..."
+
+#: ../general/g.gui/main.c:122
 #, c-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr "Lanzando GUI <%s> en el fondo, por favor espere..."
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
-msgstr "Tu instalación no incluye la GUI, saliendo."
-
 #: ../general/g.access/set_perms.c:26
 msgid "Unable to change mapset permissions"
 msgstr "No se pueden cambiar los permisos del directorio de mapas"
@@ -21388,10 +22956,6 @@ msgstr "palabra clave 3"
 msgid "My first vector module"
 msgstr "Mi primer módulo vectorial"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "No ha sido posible establecer nivel predeterminado de apertura de vectorial"
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -21537,7 +23101,7 @@ msgstr "r.slope.aspect no convierte unidades horizontales a metros en esta versi
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Porcentaje completo..."
 
@@ -21926,7 +23490,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "No se pueden obtener valores clave de la Localización actual"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -22109,138 +23673,138 @@ msgstr "resolución E-W=%f"
 msgid "Writing new raster map..."
 msgstr "Escribiendo nuevo mapa ráster..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Reproyecta un mapa ráster de una Localización dada a la Localización actual."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr "Localización que contiene el mapa raster de entrada"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr "Directorio de mapas que contiene mapa raster de entrada"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Nombre del mapa ráster a reproyectar"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Nombre para mapa ráster de salida (predeterminado: igual al de 'input')"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 msgid "Resolution of output raster map"
 msgstr "Resolución de mapa ráster de salida"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 msgid "List raster maps in input mapset and exit"
 msgstr "Enlistar mapas ráster del directorio de mapas de entrada y salir"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Imprimir los límites del mapa de entrada en la proyección actual y salir"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Imprimir los límites del mapa de entrada en la proyección actual y salir (en el estilo de la consola de comandos UNIX)"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr "Las localizaciones de entrada y salida son las mismas"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr "No se puede obtener información de la proyección del mapa ráster de salida"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "No se pueden obtener las unidades de la proyección del mapa ráster de salida"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr "No se pueden obtener los valores clave de la proyección del mapa ráster de salida"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Directorio de mapas <%s> en localización de entrada <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "No se encuentra el mapa ráster <%s> en la localización <%s> en el directorio de mapas <%s>"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "No se puede obtener información de la proyección del mapa de entrada"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "No se pueden obtener las unidades de la proyección del mapa de entrada"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "No se pueden obtener los valores clave de la proyección del mapa de entrada"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "No se puede trabajar con datos no proyectados (localización XY)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "Mapa de entrada  <%s@%s> en localización <%s>:"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Entrada:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Columnas: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Filas: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Norte: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Sur: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Oeste: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Este: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "Resolución Este-Oeste: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "Resolución Norte-Sur: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Salida:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Proyectando..."
 
@@ -22290,12 +23854,6 @@ msgstr "Error leyendo el archivo de segmentos"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr "Permite la creación y/o modificación de archivos de soporte de capas de mapas ráster."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Título para el mapa ráster resultante"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Texto a usar para unidades de datos del mapa"
@@ -22321,22 +23879,22 @@ msgstr "Eliminar el archivo nulo"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "No se ha encontrado el mapa ráster <%s> en el directorio de mapas actual"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] es una reclasificación de otro mapa. Saliendo."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Escribiendo nuevo archivo de nulos para [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Eliminando archivo de nulos de [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Terminado."
 
@@ -22960,7 +24518,7 @@ msgstr "%s debe ser mayor que 1"
 msgid "Ignoring %s because %s is not specified"
 msgstr "Ignorando %s por que %s no está especificado"
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, c-format
 msgid "%s cannot be 0"
 msgstr "%s No puede ser 0"
@@ -23145,8 +24703,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "Dos pares de multiplicadores de categoría y compensación, para $1 y $2"
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "No se puede leer el archivo de categorías del mapa ráster <%s@%s>"
@@ -23227,12 +24785,12 @@ msgstr "No se puede leer la entrada desde <%s>"
 msgid "Can't get cell header"
 msgstr "No se puede obtener la cabecera de celda"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS: cambiadas filas desde %d hasta %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: cambiadas columnas desde %d hasta %d"
@@ -23403,17 +24961,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "Número de líneas de encabezado que se saltarán desde la línea de hata arriba del archivo de entrada"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Rango de filtrado para los datos Z (mínimo, máximo)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr "Entrada avanzada"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Escala a aplicar a los datos Z"
 
@@ -23437,7 +24991,7 @@ msgstr "Escalamiento a aplicar a columna de datos de valores alternativos"
 msgid "Please specify a reasonable column number."
 msgstr "Por favor, especifique un número de columna razonable."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "rangoz no válido"
 
@@ -23445,15 +24999,15 @@ msgstr "rangoz no válido"
 msgid "Invalid vrange"
 msgstr "vrange no válido"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "No es posible calcular el percentil sin especificar la opción pth!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "No es posible calcular la media recortada sin especificar la opción de recorte!"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid "Unable to process the hole map at once. Please set the %s option to some value lower than 100."
 msgstr "No ha sido posible procesar todo el mapa de una sola vez. Por favor defina la opción %s a una valor menor que 100."
@@ -23471,7 +25025,7 @@ msgid "Reading input data..."
 msgstr "Leyendo datos de entrada..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Pase #%d (de %d)..."
@@ -23514,16 +25068,16 @@ msgstr ""
 msgid "Writing to output raster map..."
 msgstr "Escribiendo mapa ráster de salida..."
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "%lu puntos encontrados en la región."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Escaneando datos..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Rango:     mínimo          máximo\n"
@@ -23661,10 +25215,6 @@ msgstr "Nombre para el archivo ráster de salida"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "Formato de datos ráster a escribir (sensible a mayúsculas y minísculas, ver tambien la bandera -l)"
 
-#: ../raster/r.out.gdal/main.c:192
-msgid "Data type"
-msgstr "Tipo de datos"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "Opción(es) de creación para pasar al formato driver de salida"
@@ -24162,100 +25712,106 @@ msgstr "Coordenada Y no admitida <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Aviso, se ignoran los puntos fuera de la ventana: %g, %g"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Gestiona los valores-NULOS de un determinado mapa raster."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 msgid "Name of raster map for which to edit null values"
 msgstr "Nombre de mapa ráster para el cual editar valores nulos"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Hacer el trabajo sólo si el mapa es de coma flotante"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "Revisar"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Hacer el trabajo sólo si el mapa es de enteros"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Hacer el trabajo sólo si el mapa es no tiene un archivo de mapa de bits de valor NULO"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "Crear archivo de mapa de bits de valor NULO validando todas las celdas de datos"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "Eliminar archivo de mapa de bits de valor NULO"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "Crear archivo de mapa de bits de valor NULO validando todas las celdas de datos"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy with r.mapcalc. Exiting."
 msgstr "El mapa ráster <%s> es una reclasificación de mapa  <%s@%s>. Considera generar una copia con r.mapcalc. Saliendo."
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "El mapa raster <%s> no se encuentra en el directorio de mapas  <%s>"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "no se admite la entrada %s por nula"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "El mapa raster <%s> ya tiene un archivo bitmap nulo"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> es un mapa raster integer (CELL)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> es un mapa de enteros (CELL). Usando null=%d."
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> es un mapa raster de punto flotante"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Escribiendo nuevo archivo de nulos para el mapa raster  <%s>... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Mapa raster <%s> modificado."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Eliminando archivo de nulos del mapa raster <%s>..."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: especificación de valor no admitida"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: especificación de valor no admitida"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Escribiendo nuevos datos del mapa raster <%s> ..."
@@ -24647,80 +26203,165 @@ msgstr "Convirtiendo..."
 msgid "File <%s> created"
 msgstr "Archivo %s creado"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr "Crea un mapa ráster a partir de puntos LAS LiDAR usando estadísticas univariadas."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Archivo que contiene reglas de recodificación"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Rango de filtrado para los datos Z (mínimo, máximo)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Escala a aplicar a los datos Z"
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr "Descartar <trim> porcentaje de las menores y <trim> porcentaje de las mayores observaciones"
+
+#: ../raster/r.in.lidar/main.c:219
 msgid "Output raster resolution"
 msgstr "Resolución de mapa ráster de salida"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Establecer la región para ajustar este mapa ráster"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid "Set computation region to match the 2D extent and resolution of the newly created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr "Importar valores de intensidad en vez de valores z"
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "El grupo <%s> no existe"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "el rango z no se tendrá en cuenta durante el escaneo"
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid "First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Opción de filtro no conocida <%s>"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Mapa no válido <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Opción '%s debe ser > 0.0"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid "Unable to process the hole map at once. Please set the '%s' option to some value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "Leyendo datos ..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "No se puede leer el archivo de intervalo"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Escribiendo al mapa..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu puntos encontrados en la región."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "No se puede abrir el archivo '%s' para lectura"
+
+#: ../raster/r.grow.distance/main.c:156
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Genera un mapa ráster de la distancia a elementos ráster más cercanos."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 msgid "Name for distance output raster map"
 msgstr "Nombre para mapa ráster de distancias"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 msgid "Name for value output raster map"
 msgstr "Nombre para mapa ráster de salida de valores"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr "Distancias de salida en metros en vez de en unidades de mapa"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Distancia máxima a la línea más próxima"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "Se debe dar al menos una de las dos distance= y value="
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr "metric=geodesic es válido solamente para lat/lon"
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Métrica desconocida: '%s'"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Distancia de salida en metros para lat/long solamente es posible con '%s=%s'"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "No ha sido posible crear archivo temporal <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 msgid "Writing output raster maps..."
 msgstr "Escribiendo mapas ráster de salida..."
@@ -24848,7 +26489,7 @@ msgstr "[%s]: No hay tal color"
 msgid "Converting <%s>..."
 msgstr "Convirtiendo <%s>..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "Tipo de raster <%s> que no encaja"
@@ -24945,7 +26586,7 @@ msgid "There are no valid locations in the current region"
 msgstr "No hay ninguna localización válida en la región actual"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -25471,7 +27112,7 @@ msgstr "No hay tal color <%s>"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -25869,7 +27510,7 @@ msgstr "Agrupa también celdas diagonales vecinas"
 msgid "Print only the number of clumps in shell script style"
 msgstr "Imprimir las estadísticas en estilo de script de consola"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -25888,10 +27529,6 @@ msgstr "Paso 1 de 2..."
 msgid "Unable to write to temp file"
 msgstr "No ha sido posible escribir archivo temporal"
 
-#: ../raster/r.clump/clump.c:225
-msgid "Generating renumbering scheme..."
-msgstr "Generando esquema de renumeración..."
-
 #: ../raster/r.clump/clump.c:265
 msgid "Pass 2 of 2..."
 msgstr "Paso 2 de 2..."
@@ -25999,7 +27636,7 @@ msgid "Writing output raster map..."
 msgstr "Escribiendo mapa ráster de salida..."
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -26010,41 +27647,41 @@ msgstr "Escribiendo mapa raster <%s>..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr "Escribiendo mapa ráster <%s>"
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Genera un mapa raster de las subcuencas hidrográficas."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr "cuenca"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Nombre para el mapa ráster de salida"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 msgid "Name for output watershed basin map"
 msgstr "Nombre para mapa de salida de cuencas hidrográficas"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Coordenadas de mapa del punto(s) iniciales (E,N)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Coordenada Este <%s> no admitida"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Coordenada Norte <%s> no admitida"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Aviso, se ignoran los puntos fuera de la ventana: %.4f,%.4f"
@@ -26126,22 +27763,22 @@ msgid "Invalid map type"
 msgstr "Mapa no válido <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "SECCIÓN %d: cerrando mapas."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "SECCIÓN %d: determinación de cuenca hidrográfica."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "SECCIÓN 1a (de %1d): iniciando memoria."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "SECCIÓN 1b (de %1d): Determinando flujo Offmap."
@@ -26238,31 +27875,31 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "SECCIÓN 3: Acumulando Flujo de Superficie con SFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "SECCIÓN 3: acumulando flujo superficial con MFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr "MFD: la proporción acumulativa de la distribución de flujo no es 1.0 sino %f"
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural "MFD: A * path already processed when distributing flow: %d of %d cells"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr "SECCIÓN 3b: Ajustando direcciónes de drenaje."
 
@@ -26783,169 +28420,174 @@ msgstr "factores de bloqueo.\n"
 msgid "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "Pulsar <return> por si mismo para la próxima pregunta si no hay mapa de bloqueo."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr "Calcula parámetros hidrológicos y factores RUSLE."
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 msgid "Inputs"
 msgstr "Entradas:"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 msgid "Name of input depressions raster map"
 msgstr "Nombre de mapa ráster de entrada de depresiones"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr "Todas las celdas no nulas y no cero son consideradas como depresiones reales"
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Mapa de entrada: cantidad de flujo superficial por celda"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Nombre de mapa ráster de entrada de porcentaje de perturbación de tierra"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr "Para USLE"
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Mapa de entrada: flujo de superficie "
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr "Para USLE. Todas las celdas no nulas y no cero son consideradas como terrenos bloqueados."
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Valor de entrada: tamaño mínimo de la cuenca hidrográfica exterior"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Valor de entrada: longitud máxima de flujo de superficie, para USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 msgid "Name for output accumulation raster map"
 msgstr "Nombre para mapa ráster de salida de acumulación"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Mapa de salida: número de celdas que drenan a través de cada celda"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Nombre para mapa de salida de índice topográfico ln(a / tan(b))"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Producir mapa de índice topográfico"
+
+#: ../raster/r.watershed/front/main.c:152
 msgid "Name for output drainage direction raster map"
 msgstr "Nombre para mapa ráster de salida de dirección de drenaje"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 msgid "Name for output basins raster map"
 msgstr "Nombre para mapa ráster de salida de cuencas"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 msgid "Name for output stream segments raster map"
 msgstr "Nombre para mapa ráster de salida de segmentos de arroyos"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 msgid "Name for output half basins raster map"
 msgstr "Nombre para mapa ráster de salida de cuencas medias"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Mapa de salida: se da un valor único a cada semicuenca"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 msgid "Name for output slope length raster map"
 msgstr "Nombre para mapa ráster de salida de longitud de pendiente"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "Mapa de salida: factor de longitud e inclinación de la pendiente (LS) para USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Nombre para mapa ráster de salida de "
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Mapa de salida: factor de inclinación de la pendiente (S) para USLE"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Factor de convergencia para MFD (1-10)"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr "1 = flujo más divergente, 10 = flujo más convergente. Recomendado: 5"
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "Memoria máxima a utilizar con -m flag (en MB)"
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr "Flujo SFD (D8) (el predeterminado es MFD)"
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr "SFD: dirección de flujo simple, MFD: dirección de flujo múltiple"
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Permitir sólo flujo de agua horizontal y vertical"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Activar opción de swapping de memoria a disco: funcionamiento lento"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid "Only needed if memory requirements exceed available RAM; see manual on how to calculate memory requirements"
 msgstr "Solo es necesario si los requisitos de memoria sobrepasan la RAM disponible; ver manual para calcular los requisitos de memoria"
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr "Utilizar acumulación de flujo positiva incluso para posibles subestimaciones"
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr "Ver manual para una descripción detallada de la salida del flujo acumulado"
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr "Bellas áreas planas"
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr "La dirección del flujo en las áreas planas es modificado para verse más bello"
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Lo siento, debe elegir un mapa de salida."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s = %s -- de ser un número posiivollll"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -26956,40 +28598,40 @@ msgstr ""
 "    cuenca, corriente, semicuenca, pendiente o IS\n"
 "    DEBE proporcionar un valor para el parámetro de umbral de cuenca."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Localización latitud/longitud no soportada"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Ha fallado el subproceso con código de salida %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] "Comenzando SECCIÓN 1: iniciando variables. Sección total %d."
 msgstr[1] "Comenzando SECCIÓN 1: iniciando variables. %d secciones totales."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr "Memoria máxima a usar era menor que 3 MB, establecer en 3 MB."
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr "Necesitará hasta %.2f MB de espacio en el disco"
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr "Necesitará hasta %.2f GB (%.0f MB) de espacio en el disco"
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "SECCIÓN 1b: determinando flujo Offmap."
 
@@ -26997,19 +28639,29 @@ msgstr "SECCIÓN 1b: determinando flujo Offmap."
 msgid "Closing accumulation map"
 msgstr "Cerrando mapa de acumulación"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Importando puntos..."
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 msgid "Closing TCI map"
 msgstr "Cerrando mapa TCI"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Importando puntos..."
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr "Cerrando mapa de dirección de flujo"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr "Cerrando mapa LS"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr "Cerrando mapa SL"
 
@@ -27037,30 +28689,30 @@ msgstr "No hay semillas para búsqueda A*"
 msgid "bug in A* Search: doer %"
 msgstr "bug en búsqueda A*: doer %"
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 msgid "resample"
 msgstr "remuestrear"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Vuelve a muestrear capas de mapa raster en una malla más gruesa usando agregación."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Método de agregación"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Peso de acuerdo con el area (más lento)"
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "No se puede leer la tabla de color para %s"
@@ -27434,7 +29086,7 @@ msgstr "La tabla de colores 'grey.eq' no está soportada para mapa de punto flot
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "La tabla de colores 'grey.log' no está soportada para mapa de punto flotante %s"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "Petición de color '%s' desconocida"
@@ -27788,7 +29440,7 @@ msgid "Calculates univariate statistics from the non-null cells of a 3D raster m
 msgstr "Calcula estadísticas univariadas a partir de las celdas no nulas de un mapa ráster."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid "Statistics include number of cells counted, minimum and maximum cell values, range, arithmetic mean, population variance, standard deviation, coefficient of variation, and sum."
 msgstr "Las estadísticas incluyen el número de celdas contadas, valores de las celdas mínimo y máximo, rango, media aritmética, varianza poblacional, desviación estandar, coeficiente de variación, y suma."
 
@@ -27800,10 +29452,20 @@ msgstr "El mapa raster utilizado para zonificar tiene que ser del tipo CELL"
 msgid "Extended"
 msgstr "Extendido"
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid "Use the native resolution and extent of the raster map, instead of the current region"
+msgstr "Usar la misma resolución que en mapa RASTER3D de entrada para los mapas 2D de salida, independientemente de la configuración de la región actual"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "Calcula estadísticas univariantes a partir de celdas no nulas de un mapa ráster."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "weight= y -c son excluyentes mutuamente"
+
 #: ../raster/r.out.ascii/main.c:63
 msgid "Converts a raster map layer into a GRASS ASCII text file."
 msgstr "Convierte capa de mapa ráster en un archivo de texto GRASS ASCII."
@@ -28061,32 +29723,32 @@ msgstr "Abrir mapa ráster %s - una vez para cada profundidad (%d/%d)"
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "Los mapas de entrada tienen que ser del mismo tipo. ¡CELL, FCELL o DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 msgid "Unable to find bounding box for lines"
 msgstr "No ha sido posible encontrar bounding box para líneas"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Recuadro de contorno:  l = %d, r = %d, t = %d, b = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "Pase número %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "%d pixel borrado"
 msgstr[1] "%d pixeles borrados"
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Adelgazamiento completado con éxito."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr "Adelgazamiento no completado, considere incrementar el parámetro 'iteraciones'."
 
@@ -28341,31 +30003,11 @@ msgstr "contornos"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "Produce un mapa vectorial de contrornos específicado a partir de un mapa raster."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Incremento entre niveles de contorno"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 msgid "Contour levels"
 msgstr "Niveles de contorno"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Lista de niveles de contorno"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Nivel mínimo de contorno"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Nivel máximo de contorno"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Número mínimo de puntos para una línea de contorno (0 -> sin límite)"
-
 #: ../raster/r.contour/main.c:140
 #, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -28892,49 +30534,50 @@ msgstr "Paso de tiempo %i con suma de tiempo %g"
 msgid "Could not create and solve the linear equation system"
 msgstr "No se puede crear y resolver el sistema de ecuaciones lineales"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 msgid "Raster map calculator."
 msgstr "Calculadora de mapas ráster."
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr "Expresión a evaluar"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 msgid "Expression"
 msgstr "Expresión"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 msgid "File containing expression(s) to evaluate"
 msgstr "Archivo que contiene expresión(es) a evaluar"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 msgid "Seed for rand() function"
 msgstr "Semilla para función rand()"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr "Genera semilla aleatoria (el resultado es no deterministico)"
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Escribiendo mapa..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "%s= and -%c son mutuamente excluyentes"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 msgid "parse error"
 msgstr "error al parsear"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "Hubo error(es) de coma flotante en el cálculo"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "Hubo desbordamiento en el cálculo"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Tipo desconocido: %d"
@@ -28984,80 +30627,80 @@ msgstr "Error desconocido para la función '%s'"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr "mapa de salida <%s> existe. Para sobreescribir, use la bandera --overwrite"
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "No se puede leer el archivo de color del mapa ráster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "No se puede crear btree para el mapa ráster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Modificador de mapa no válido: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Variable indefinida '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Mapa no válido <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Función desconocida '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "Demasiado pocos argumentos (%d) para la función %s()"
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "Demasiados argumentos (%d) para la función %s()"
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Tipos de argumentos incorrecto para la función %s()"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "Error interno para la función %s()"
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "Número de argumentos (%d) no admitido para el operador '%s'"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "Format_expression_prec: tipo desconocido: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "No se puede cerrar el mapa ráster <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "N se puede cerrar el mapa ráster de salida"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Funciones conocidas:"
@@ -29230,19 +30873,19 @@ msgstr "Barrido hacia delante completo"
 msgid "Reverse sweep complete"
 msgstr "Barrido hacia atrás completo"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid "Unable to convert input raster map projection information to GRASS format for checking"
 msgstr "No se puede convertir la información de la proyección del mapa de entrada al formato de GRASS para comprobar"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "La PROJ_INFO de la localización es:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "La PROJ_INFO del conjunto de datos es:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid "Consider generating a new location from the input dataset using the 'location' parameter.\n"
 msgstr "Considere generar una nueva localización a partir del conjunto de datos de entrada usando el parámetro 'localización'.\n"
 
@@ -29274,14 +30917,6 @@ msgstr "Nombre de la nueva base de datos"
 msgid "Band to select (default is all bands)"
 msgstr "Banda a seleccionar (por omisión todas las bandas)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadatos"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr "Rotar horizontalmente"
@@ -29303,7 +30938,7 @@ msgstr "Formato: número de banda,tipo,revisión de proyección"
 msgid "%s= or %s= must be given"
 msgstr "%s= o %s= deben ser dados"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 msgid "Unable to get current working directory"
 msgstr "No se puede obtener el directorio de trabajo actual"
 
@@ -29321,7 +30956,7 @@ msgstr "El grupo de imaginería <%s> ya existe y será sobrescrito."
 msgid "Reading band %d of %d..."
 msgstr "Leyendo banda %d de %d"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "La banda seleccionada (%d) no existe"
@@ -29390,173 +31025,192 @@ msgstr "Creando archivos de soporte para %s"
 msgid "Link to raster map <%s> created."
 msgstr "Enlazar un mapa ráster <%s> creado."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importa datos ráster a mapa ráster GRASS usando librería GDAL."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 msgid "Name of raster file to be imported"
 msgstr "Nombre de archivo ráster que será importado"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 msgid "Band(s) to select (default is all bands)"
 msgstr "Banda(s) a seleccionar (de manera predeterminada son todas las bandas)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 msgid "Name of GCPs target location"
 msgstr "Nombre de ubicación objetivo de puntos de cotrol en tierra (GCPs)"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 msgid "Name of location to create or to read projection from for GCPs transformation"
 msgstr "Nombre de Localización a crear o desde la cual leer proyección para transformación de puntos de control en tierra (GCPs)"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "No se puede obtener la banda del ráster"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr "Si es 0, no se añade compensación y la primer banda es 1"
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid "Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Nombre del mapa ráster de elevación de entrada [metros]"
+
+#: ../raster/r.in.gdal/main.c:171
 msgid "File prefix for raster attribute tables"
 msgstr "Prefijo de archivo para tablas de atributos ráster"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr "El número de banda y \".csv\" será añadido al predijo del archivo"
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Ignorar proyección (usar proyección de la localización)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Mantener números de banda en vez de usar nombre de color de banda"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid "Create the location specified by the \"location\" parameter and exit. Do not import the raster file."
 msgstr "Crear la Localización especificada por parámetro \"location\" y salir. No importar archivo ráster."
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 msgid "Print number of bands and exit"
 msgstr "Mostrar número de bandas y salir"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "Debe especificar una localización de destino distinta de la localización de salida"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr "Debe especificar un nombre de Localización válido."
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr "La '-l' flag sólo funciona en localizaciones Lat/Lon"
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "El número de subrangos tiene que ser igual o mayor que 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr "Usando tamaño de memoria caché: %.1f MiB"
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "No ha sido posible abrir fuente de datos <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin plate spline transformation (%s or %s)."
 msgstr "Entrada parece ser datos NOAA/AVHRR que necesitan ser georeferenciados con transformación spline de capa fina (%s o %s)."
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid "Input raster map is flipped or rotated - cannot import. You may use 'gdalwarp' to transform the map to North-up."
 msgstr "Mapa ráster de entrada está volteado o rotado - no se puede importar. Debe usar 'gdalwrap' para transformar el mapa para que el norte quede arriba."
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid "Map bounds have been constrained to geographic coordinates. You will almost certainly want to check map bounds and resolution with r.info and reset them with r.region before going any further."
 msgstr "Los bordes del mapa están constreñidos a coordenadas geográficas. Seguramente querrás revisar los bordes del mapa y la resolución con r.info y reiniciarlos con r.region antes de continuar avanzando."
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Procediendo con la importación de %d bandas ráster..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "No se puede abrir el archivo de firmas"
+
+#: ../raster/r.in.gdal/main.c:665
 #, c-format
 msgid "Unable to get raster band number %d"
 msgstr "No ha sido posible obtener número %d de bandas ráster"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Copiando %d GCP en archivo de puntos para <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "Los GCP tiene el siguiente sistema de coordenadas WKT de OpenGIS"
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Reproyectado la tabla de los GCP:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Proyección de entrada para la tabla de GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* Proyección de salida para la tabla de GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Error en pj_do_proj (no se puede reproyectar GCP %i)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid "The target for the output group <%s> has been set to location <%s>, mapset <PERMANENT>."
 msgstr "El objetivo para el grupo de salida <%s> ha sido definido en la Localización <%s>, Directorio de mapas <PERMANENT>."
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "No se pueden traducir los valores clave de la proyección de los GCP de entrada"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "No se puede obtener información de la proyección de la localización de destino"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "No se pueden obtener las unidades de la proyección de la localización de destino"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "No se pueden obtener los valores clave de la proyección de la localización de destino"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Importando mapa ráster <%s>..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr "Rega de colores inconsistente en RAT"
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Creando tabla de grises para <%s> (8bit, periodo completo)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "Creando tabla de grises para <%s> (16bit,rango de imagen)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "No ha sido posible abrir archivo <%s>: %s."
@@ -29662,7 +31316,7 @@ msgstr "Leyendo mapa de elevación..."
 msgid "Writing topographic index map..."
 msgstr "Escribiendo mapa de índice topográfico..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Número de sumideros o contornos: %d"
@@ -29754,31 +31408,31 @@ msgstr "Volumen del lago %f metros cúbicos"
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr "El volumen sólo es correcto si la profundidad del lago (mapa ráster de terreno) está en metros"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 msgid "patching"
 msgstr "parchando"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid "Creates a composite raster map layer by using known category values from one (or more) map layer(s) to fill in areas of \"no data\" in another map layer."
 msgstr "Crea una capa de mapa ráster compuesta usando valores de categoría conocidos de una (o más) capa(s) de mapa para rellenar áreas \"sin datos\" en otra capa de mapa."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Nombre de los mapas ráster a parchear juntos"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Nombre para el mapa ráster resultante"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Usar cero (0) para transparencia en vez de NULO"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "El número mínimo de mapas ráster de entrada es dos"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Creando archivos de soporte para mapa ráster <%s>..."
@@ -29846,34 +31500,6 @@ msgstr "vectorisación"
 msgid "Converts a raster map into a vector map."
 msgstr "Convierte un mapa ráster en un mapa vectorial."
 
-#: ../raster/r.to.vect/main.c:88
-msgid "Name of attribute column to store value"
-msgstr "Nombre de columa de atributos en la cual guardar valor"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr "Nombre debe ajustarse al estándar SQL"
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Suavizar esquinas de elementos de áreas"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr "Usar valores ráster como categorías en vez de secuencia única (sólo CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-msgid "Write raster values as z coordinate"
-msgstr "Escribir valores ráster como coordenada z"
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr "Tabla no ha sido creada. Actualmente soportada solamente para puntos."
-
-#: ../raster/r.to.vect/main.c:111
-msgid "Do not build vector topology"
-msgstr "No constuir topología vectorial"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr "Recomendado para conversión masiva de puntos"
@@ -30347,10 +31973,6 @@ msgstr "Tamaño del caché de punto"
 msgid "Advanced"
 msgstr "Avanzado"
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr "Cabecera de fila de salida"
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr "Mostrar las etiquetas de categoría de la celda(s) de cuadrícula"
@@ -30597,7 +32219,7 @@ msgstr "Genera superficie(s) aleatoria con dependencia espacial."
 msgid "Name for output raster map(s)"
 msgstr "Nombre para el mapa(s) raster de salida"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Distancia máxima de correlación espacial  (valor >= 0.0)"
 
@@ -30621,7 +32243,7 @@ msgstr "Número valor de celda de distribución"
 msgid "Uniformly distributed cell values"
 msgstr "Valores de celdas distribuidos uniformemente"
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Generando mapa raster <%s>..."
@@ -30926,7 +32548,7 @@ msgstr "Calcula el índice de diversidad de la dominancia en un mapa ráster"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 msgid "landscape structure analysis"
 msgstr "ańalisis de estructura del paisaje"
@@ -30950,7 +32572,7 @@ msgstr "índice de diversidad"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Archivo de configuración"
@@ -30969,7 +32591,7 @@ msgstr "Calcula la desviación estándar del área de parche en un mapa ráster"
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 msgid "patch index"
 msgstr "índice de parche"
 
@@ -31102,7 +32724,7 @@ msgstr "No se puede hacer lseek"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Calcula el índice de diversidad de Shannon en un mapa ráster"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "Calcula el índice de atributo de píxel medio en un mapa ráster"
 
@@ -31247,11 +32869,11 @@ msgstr "norte"
 msgid "Could not read maximum distance. Aborting."
 msgstr "No se pudo leer una distancia máxima. Cancelando."
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr "Los valores de distancia deben ser 0.5-1.5. Abortando."
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Calculando mapa %01d de %01d (ángulo %.2f, mapa ráster <%s>)"
@@ -31430,19 +33052,59 @@ msgstr "incidout requiere que se establezca el parámetro hora local (time)"
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Modo 2: irradiación diaria integrada para un día determinado del año"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Constante de incremento de difusión"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Escribiendo mapa ráster <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Mapa no válido <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Coste de isolínea incorrecto: %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Escribiendo mapa ráster <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Usando coordenadas del centro del mapa: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Escribiendo mapa ráster <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr "Si se utiliza -s y no se usan horizontes raster, les particiones numéricas deben ser = 1"
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid "If you want to save memory and to use shadows, you must use pre-calculated horizons."
 msgstr "Si quieres guardar memoria y usar sombras, tienes que utilizar horizontes pre-calculados."
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr "mapas ráster latin y longin no tienen efecto cuando se está en una Localización Lat/Lon"
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr "Se deben dar ambos mapas ráster latin y longin, o ninguno"
 
@@ -31466,79 +33128,90 @@ msgstr "Descomprimir el mapa"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Mostrar información de compresión y tipo de datos en mapa(s) de entrada"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "El mapa vectorial <%s> no está en el directorio de mapas actual"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "<%s> es un archivo de reclasificación de mapa <%s> en Directorio de mapas <%s> - no se puede descomprimir"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "<%s> es un archivo de reclasificación de mapa <%s> en Directorio de mapas <%s> - no se puede comprimir"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "<%s> es un mapa GDAL enlazado - no se puede (des)comprimir"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "HECHO: el archivo descomprimido es %lu bytes más pequeño"
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "HECHO: el archivo comprimido es %lu bytes más pequeño"
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "HECHO: el archivo descomprimido es %lu bytes mayor"
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "HECHO: el archivo comprimido es %lu bytes mayor"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "área"
+
+#: ../raster/r.compress/main.c:237
 #, c-format
 msgid "<%s> already uncompressed"
 msgstr "<%s> ya está descomprimido"
 
-#: ../raster/r.compress/main.c:200
-#, c-format
-msgid "<%s> already compressed"
-msgstr "<%s> ya está comprimido"
+#: ../raster/r.compress/main.c:240
+#, fuzzy, c-format
+msgid "Uncompressing <%s>"
+msgstr "Expresión"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%sCOMPRIME <%s>"
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Expresión"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Eliminando <%s>"
+
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "<%s> es un mapa GDAL enlazado"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "<%s> es un archivo de reclasificación de mapa <%s> en Directorio de mapas <%s> "
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
-msgstr "<%s> está descomprimido (nivel %i: %s). Tipo de datos: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
+msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
-msgstr "<%s> está descomprimido (nivel %i: %s). Tipo de datos: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
+msgstr ""
 
 #: ../raster/r.statistics/main.c:59
 msgid "Calculates category or object oriented statistics."
@@ -31569,50 +33242,50 @@ msgstr "o_adev: ningún dato en la matriz"
 msgid "Filter <%s> not found"
 msgstr "Filtro <%s> no encontrado"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 msgid "kernel filter"
 msgstr "filtro kernel"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Remuestrea mapa ráster usando un kernel analítico."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr "Filtrar kernel(s)"
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr "Filtrar radios"
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr "Radio de filtro (horizontal)"
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr "Radio de filtro (vertical)"
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Se requiere ya sea %s= o %s=/%s"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, c-format
 msgid "Both %s= and %s= required"
 msgstr "Se necesitan ambas opciones %s= y %s="
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr "Número diferente de valores para filter= y [xy_]radius="
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr "Demasiados filtros (máx: %d)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 msgid "At least one filter must be finite"
 msgstr "Al menos un filtro debe ser finito"
 
@@ -31983,19 +33656,24 @@ msgstr[1] "Calculando %d medidas de textura"
 msgid "Calculating %s"
 msgstr "Calculando %s..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr "La distancia debe ser >= 0.0"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 msgid "autocorrelation"
 msgstr "autocorrelación"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Genera valores de celda aleatorios con dependencia espacial."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Número máximo de columnas a cargar"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr "Seed aleatorio (SEED_MIN >= valor >= SEED_MAX) (por defecto [aleatorio])"
 
@@ -32120,7 +33798,7 @@ msgstr "Inutilizar"
 msgid "Grid line width"
 msgstr "Grosor de la cuadrícula"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Color de cuadrícula"
 
@@ -32241,14 +33919,10 @@ msgid "Starting and ending coordinates"
 msgstr "Coordenadas inicial y final"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Color de línea"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Color de texto o \"none\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -32276,8 +33950,8 @@ msgid "Name of monitor to start"
 msgstr "Nombre del monitor a iniciar"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr "Administrar"
 
@@ -32333,45 +34007,63 @@ msgstr "Mostrar el nombre del monitor seleccionado actualmente y salir"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Mostrar el nombre de la pantalla seleccionada actualmente"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Mostrar el nombre del monitor seleccionado actualmente y salir"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "No seleccionar automáticamente al empezar"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Libera y detiene el monitor seleccionado actualmente y salir"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 msgid "Disable true colors"
 msgstr "Desactivar colores verdaderos"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr "Abrir archivo de salida y actualizar modo"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr "Necesita la bandera --overwite"
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr "Monitor actualmente seleccionado:"
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr "Enlistar comandos para el monitor <%s>:"
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr "Monitor <%s> liberado"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr " Ningún monitor seleccionado"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Se debe dar <%s>, <%s> o <%s>"
@@ -32381,59 +34073,73 @@ msgstr "Se debe dar <%s>, <%s> o <%s>"
 msgid "Monitor <%s> is not running"
 msgstr "Monitor <%s> no estaba funcionando"
 
-#: ../display/d.mon/stop.c:37
-msgid "Env file not found"
-msgstr "Archivo Env no encontrado"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "No se puede crear el archivo <%s>"
 
-#: ../display/d.mon/stop.c:55
-msgid "PID file not found"
-msgstr "Archivo PID no encontrado"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "No se puede abrir el origen de datos <%s>"
 
-#: ../display/d.mon/start.c:32
-#, c-format
-msgid "File '%s' already exists and will be overwritten"
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "No se puede crear el archivo <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "El archivo '%s' ya existe y se sobrescribirá"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "No se puede borrar la línea %d"
+
+#: ../display/d.mon/start.c:82
 #, c-format
 msgid "Output file: %s"
 msgstr "Archivo de salida: %s"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, c-format
 msgid "Monitor <%s> already running"
 msgstr "Monitor <%s> sigue funcioando"
 
-#: ../display/d.mon/start.c:132
-#, c-format
-msgid "Unable to create file '%s'"
-msgstr "No se puede crear el archivo '%s'"
+#: ../display/d.mon/start.c:140
+#, fuzzy, c-format
+msgid "Starting monitor <%s>..."
+msgstr "Escribiendo mapa vectorial <%s> ..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "Iniciando monitor <%s> con archivo env '%s'"
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "No se puede leer el archivo de comandos"
 
 #: ../display/d.mon/select.c:14
 #, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Monitor <%s> ya está seleccionado"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 msgid "List of running monitors:"
 msgstr "Enlistar todos los monitores:"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr "No hay monitores funcionando"
 
-#: ../display/d.mon/list.c:84
-msgid "Command file not found"
-msgstr "Archivo de comandos no encontrado"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "No se puede abrir el archivo <%s>"
 
-#: ../display/d.mon/list.c:88
-msgid "Unable to read command file"
-msgstr "No se puede leer el archivo de comandos"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Enlistar comandos para el monitor <%s>:"
 
 #: ../display/d.erase/main.c:33
 msgid "Erases the contents of the active graphics display frame with user defined color."
@@ -32529,23 +34235,40 @@ msgstr "[%s]: especificación de categoría no admitida"
 msgid "[%s]: illegal value specified"
 msgstr "[%s]: especificación de valor no admitida"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 msgid "map annotations"
 msgstr "anotaciones del mapa"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 msgid "Overlays cell category values on a raster map displayed in the active graphics frame."
 msgstr "Superpone los valores de categoría de celda en un mapa mostrado en la pantalla activa."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr "Alinear cuadrículas con celdas raster"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Obtener color de texto del valor de color de la celda"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+msgid "Font settings"
+msgstr "Configuraciones de la fuente"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Ruta al archivo de fuentes"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr "Text encoding (sólo aplicable a fuentes 'TrueType fonts'"
+
+#: ../display/d.rast.num/main.c:200
 #, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -32553,7 +34276,7 @@ msgstr[0] "%d col"
 msgstr[1] "%d cols"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -32562,7 +34285,7 @@ msgstr ""
 "Tamaño de la región actual: %s X %s\n"
 "La configuración de su región actual puede ser demasiado grande. Las celdas mostradas en su pantalla pueden ser demasiado pequeñas para que el número de la categoría de la celda sea visible."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr "Abortando (no está permitida una región mayor a 200 filas X 200 columnas)"
 
@@ -32631,10 +34354,6 @@ msgstr "Color de relleno"
 msgid "Colorize features according color definition column"
 msgstr "Colorear elementos de acuerdo a columna de definición de color"
 
-#: ../display/d.vect/main.c:129
-msgid "Color definition in R:G:B form"
-msgstr "Definición de color en la forma R:G:B"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr "Colorear puntos o áreas en función de la coordenada z"
@@ -32644,7 +34363,7 @@ msgstr "Colorear puntos o áreas en función de la coordenada z"
 msgid "Lines"
 msgstr "Líneas"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Ancho de línea"
 
@@ -33136,35 +34855,35 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Coordenadas no válidas <%s,%s>"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 msgid "Displays information about the active display monitor."
 msgstr "Muestra información sobre la pantalla activa"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr "Los monitores de visualización son mantenidos por d.mon."
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Mostrar rectángulo de pantalla (izquierda, derecha superior, inferior)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Mostrar dimensiones de pantalla (anchura, altura)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Mostrar rectángulo del marco activo"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr "Mostrar dimensiones de marco (anchura, altura)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Mostrar rectángulo de pantalla de la región actual"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr "Muestra coordenadas geográficas y resolución de todo el marco"
 
@@ -33394,14 +35113,6 @@ msgstr "Alineación del texto"
 msgid "Line spacing"
 msgstr "Espaciamiento de la línea"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Ruta al archivo de fuentes"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr "Text encoding (sólo aplicable a fuentes 'TrueType fonts'"
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Archivo de entrada"
@@ -33463,7 +35174,7 @@ msgstr "Tipo de gráfico"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Propiedades del gráfico"
 
@@ -33499,10 +35210,19 @@ msgstr "Centrar el gráfico de barras alrededor de un punto de datos"
 msgid "Maximum value used for bar plot reference"
 msgstr "Valor máximo usado para para referencia de trazado de barras"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Crear salida 3D"
+
 #: ../display/d.rgb/main.c:58
 msgid "Displays three user-specified raster maps as red, green, and blue overlays in the active graphics frame."
 msgstr "Muestra tres mapas raster especificados por el usuario como superposiciones de rojo, verde y azul en el marco gráfico activo."
 
+#: ../display/d.legend/histogram.c:108
+msgid "Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 msgid "Displays a legend for a 2D or 3D raster map in the active frame of the graphics monitor."
 msgstr "Mostrar una leyenda para un mapa ráster 2D o 3D en el marco activo de la pantalla."
@@ -33540,13 +35260,7 @@ msgstr "Subconjunto"
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Usar un subconjunto del rango del mapa para la leyenda (min, max)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-msgid "Font settings"
-msgstr "Configuraciones de la fuente"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr "Tamaño de fuente"
@@ -33626,11 +35340,11 @@ msgstr "El rango de color excede el límite superior de los datos reales"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "usar=%s fuera de rango [%.3f, %.3f]. (extender con rango= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
-msgstr "El histograma constreñido por rango no está implementado aún"
+#: ../display/d.legend/main.c:859
+msgid "Histogram plotting not implemented for categorical legends. Use the '-s' flag"
+msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "¡Nada que dibujar! (¿ninguna categoría con etiquetas?)"
 
@@ -33642,33 +35356,89 @@ msgstr "Muestra una flecha al norte en el monitor de gráficas."
 msgid "North arrow style"
 msgstr "Estilo de la flecha del Norte"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr "Estilo"
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr "Coordenadas de pantalla para la esquina superior izquierda del rectángulo"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr "(0,0) es abajo y a la izquierda del marco de visualización"
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 msgid "Fill color"
 msgstr "Color de relleno"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr "negro"
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr "Texto"
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr "Dibujar símbolo sin texto"
 
@@ -33683,63 +35453,63 @@ msgstr "No se pudo analizar el símbolo"
 msgid "Could not read symbol \"%s\""
 msgstr "No se pudo leer el símbolo \"%s\""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid "Draws arrows representing cell aspect direction for a raster map containing aspect data."
 msgstr "Dibuja flechas que representan la dirección de orientación de celdas para un mapa ráster que contiente datos de orientación."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Nombre mapa de orientación ráster a mostrar"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Tipo de mapa de orientación ráster existente"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Color para dibujar las flechas"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 msgid "Color for drawing drawing grid"
 msgstr "Color para dibujar la cuadrícula"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 msgid "Color for drawing null values (X symbol)"
 msgstr "Color para dibujar los valores nulos (símbolo X)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Color para mostrar información desconocida (símbolo ?)"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Dibujar flecha cada N celdas de la cuadrícula"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Mapa ráster que contiene los valores usados para la longitud de las flechas"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Factor de escalamiento para las flechas (mapa de magnitud)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Valor no admitido para factor de escalamiento"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "Valor no admitido para saltar"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "Magnitud sólo esta soportado para GRASS y para mapas de aspecto (compass maps)."
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr "La opción escala requiere magnitude_map"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "Problema al leer archivo de rango"
 
@@ -34000,55 +35770,41 @@ msgstr ""
 "matriz de separabilidad de clase\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "El grupo <%s> no fue encontrado en el directorio de mapas actual"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Subgrupo <%s> no encontrado en el grupo <%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "El mapa raster <%s> no existe en el subgrupo <%s>"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "No se encontraron mapas raster"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "El subgrupo [%s] no tiene ningún mapa raster"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "El subgrupo [%s] sólo tiene un mapa raster"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "El subgrupo debe tener al menos 2 mapas raster para ejecutar %s"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "No se puede abrir archivo de signatura seed <%s>"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "No se puede leer el archivo de firmas <%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "** <%s> tiene demasiadas firmas (el límite son 255)"
@@ -34116,199 +35872,213 @@ msgstr "Número mínimo de píxeles en una clase"
 msgid "Name for output file containing final report"
 msgstr "Nombre del archivo de salida que contiene el informe final"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "El grupo <%s> no fue encontrado en el directorio de mapas actual"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Subgrupo <%s> no encontrado en el grupo <%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Nombre de clases iniciales (%s) no admitido"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Valor(es) de intervalos de muestreo (%s) no admitidos"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Valor no admitido de iteraciones (%s)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Valor no admitido de convergencia (%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Valor no admitido de separación (%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Valor no admitido de min_size (%s)"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "No se puede crear archivo report <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr "#################### AGRUPACIÓN (%s) ####################%s%s"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, c-format
 msgid "Location: %s%s"
 msgstr "Localización: %s%s"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, c-format
 msgid "Mapset:   %s%s"
 msgstr "Directorio de mapas:   %s%s"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, c-format
 msgid "Group:    %s%s"
 msgstr "Grupo:    %s%s"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, c-format
 msgid "Subgroup: %s%s"
 msgstr "Subgrupo: %s%s"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr " %s%s"
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Archivo de firmas resultante: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, c-format
 msgid "Region%s"
 msgstr "Región%s"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Norte: %12.2f  Este: %12.2f%s"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Sur: %12.2f  Oeste: %12.2f%s"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Resolución:   %12.2f  Resolución:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Filas:  %12d  Columnas: %12d  Celdas: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, c-format
 msgid "Mask: %s%s"
 msgstr "Máscara: %s%s"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, c-format
 msgid "Cluster parameters%s"
 msgstr "Parámetros de clúster%s"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " Número de clases inicial:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [del archivo de firmas %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr " Tamaño mínimo de clase:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr " Separación mínima de clase:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr " Convergencia porcentual:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr " Número máximo de iteraciones: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr " Intervalo de muestreo de filas:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr " Intervalo de muestreo de columnas:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "Leyendo mapas raster..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr "Sin memoria. Por favor ejecute de nuevo y elija un tamaño de muestra más pequeño."
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr "Tamaño de muestra: %d puntos%s"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid "Not enough sample points. Please run again and choose a larger sample size."
 msgstr "Número de puntos de muestra insuficiente. Por favor ejecute de nuevo y elija un tamaño de muestra mayor."
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr "Puntos de datos de muestra distintos de cero insuficientes. Compruebe su región (y máscara) actual."
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr "%s########## resultados finales #############%s"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d clases (convergencia=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "No se pudo crear archivo de signaturas <%s> para grupo <%s>, subgrupo <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr "%s%s#################### CLASES ####################%s"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%s%d clases, %.2f%% puntos estable%s"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -34607,8 +36377,8 @@ msgid "radiance"
 msgstr "radiancia"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr "reflectancia"
 
@@ -34962,349 +36732,393 @@ msgstr "El grupo <%s> no existe"
 msgid "group <%s> references the following subgroups\n"
 msgstr "El subgrupo [%s] no tiene ningún mapa raster"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr "evaluación de la calidad de la imagen"
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 msgid "land surface temperature"
 msgstr "temperatura de la superficie del suelo"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 msgid "vegetation"
 msgstr "vegetación"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Extrae parámetros de control de calidad de las capas MODIS QC"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Nombre de capa ráster de superficie fractal"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 msgid "Name for output QC type classification layer"
 msgstr "Nombre para capa de salida de clasificación tipo QC"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr "Nombre del tipo de producto MODIS"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr "reflectancia superficial 250m 8-días"
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr "reflectancia superficial 500m 8-días"
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr "reflectancia superficial 500m 8-días, State QA"
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr "reflectancia superficial 5000m diariamente"
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr "LST 1km diario (Día/Noche)"
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr "LST 1km 8-días (Día/Noche)"
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr "VI 1km 16-días"
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr "Calidad Brdf-Albedo (SDS auxiliar) 1km 8-días"
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr "Calidad Brdf-Albedo (BRDF SDS) 1km 8-días"
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Nombre del plano ráster a crear"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr "mod09: corrección de adyacencia"
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 msgid "mod09: Atmospheric Correction"
 msgstr "mod09: Corrección atmosférica"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr "mod09: estado de nubosidad"
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr "mod09: bandera de calidad de datos banda por banda"
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr "mod09: banda de 250m es de órbita distinta que la de 500m"
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr "mod09: evaluación general de calidad de la tierra MODIS"
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr "mod11A1: evaluación de calidad general MODIS"
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr "mod11A1: indicaciones detalladas de calidad"
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr "mod11A1: error de clases de emisividad promedio"
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr "mod11A1: error de clases LST promedio"
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr "mod11A2: indicaciones detalladas de calidad"
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr "mod11A2: error de clases de emisividad promedio"
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr "mod11A2: evaluación general de calidad MODIS"
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr "mod21A1: error de clases LST promedio"
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr "mod09*s: StateQA cantidad de aerosol"
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr "mod09*s: corrección  StateQA BRDF realizada"
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr "mod09*s: cirro StateQA detectado"
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr "mod09*s: sombra de nube StateQA"
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr "mod09*s: estado de nubosidad StateQA"
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr "mod09*s: algoritmo interno de nubes StateQA"
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr "mod09*s: algoritmo interno de fuego StateQA"
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr "mod09*s: máscara de nieve interna StateQA"
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr "mod09*s: StateQA mod35 nieve hielo"
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr "mod09*s: pixel adyacente a nube StateQA"
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr "mod09*i: CM interno: nublado"
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr "mod09*i: CM interno: despejado"
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr "mod09*i: CM interno: nubes altas"
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr "mod09*i: CM interno: nubes bajas"
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr "mod09*i: CM interno: nieve"
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr "mod09*i: CM interno: fuego"
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr "mod09*i: CM interno: destello de sol"
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr "mod09*i: CM interno: polvo"
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr "mod09*i: CM interno: sombra de nube"
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr "mod09*i: CM interno: pixel adyacente a nube"
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr "mod09*i: CM interno: cirro"
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr "mod09*i: CM interno: bandera pancromática (Pan Flag)"
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr "mod09*i: CM interno: criterio para recuperaciín de aerosol"
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr "mod09*i: CM interno: AOT (aerosol optical depth) tiene clim. val."
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr "mod13A2: MODIS Land General Quality Assessment"
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr "mod13A2: estimación de calidad del pixel"
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr "mod13A2: rango de cantidad de aerosol"
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr "mod13A2: si pixel es vecino de una nube"
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr "mod13A2: si se realiza corrección BRDF"
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr "mod13A2: si el pixel está mezclado con nubes"
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr "mod13A2: separar tierra de objetos de  varios agua"
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr "mod13A2: si está presente en pixel de nieve/hielo"
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr "mod13A2: si hay sombra presente en pixel"
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr "mcd43B2: corrección de calidad de BRDF realizada"
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr "mcd43B2q: corrección de calidad de BRDF realizada"
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr "Número de banda de producto MODIS (mod09Q1=[1,2],mod09A1=[1-7],m[o/y]d09CMG=[1-7], mcd43B2q=[1-7])"
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr "Banda 1: Rojo"
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr "Banda 2: NIR"
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr "Banda 3: Azul"
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr "Banda 4: Verde"
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr "Banda 5: SWIR 1"
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr "Banda 6: SWIR 2"
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr "Banda 7: SWIR 3"
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr "Esta bandera solamente está disponible para productos MOD09Q1 @ 250m"
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr "Número de banda de salida de rango permitido [1-2]"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr "Número de banda de salida de rango permitido [1-7]"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr "producto mod09Q1 solamente tiene 2 bandas"
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr "Esta bandera solamente está disponible para productos mod09CMGi @ 5000m"
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr "Esta bandera solamente está disponible para productos MOD13A2 @ 1km"
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr "Esta bandera solamente está disponible para productos MCD43B2 @ 1km"
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr "Nombres y/o combinación desconocidos, por favor revise la ortografía"
 
@@ -35499,7 +37313,7 @@ msgstr "Mapa de entrenamiento verdadero sobre el terreno"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Número máximo de sub-signaturas en cualquier clase"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Nombre de sub-signaturas <%s> no admitido"
@@ -35835,104 +37649,110 @@ msgstr "Cantidad de segmentos en memoria: %d de %d total"
 msgid "rclist out of memory"
 msgstr "Sin memoria"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr "reconocimiento de objeto"
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr "Identifica segmentos (objetos) de los datos de imágenes."
+
+#: ../imagery/i.segment/main.c:46
+msgid "Error in reading data"
+msgstr "Error al leer datos"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Error al escribir el archivo de segmentos"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Error al escribir datos"
+
+#: ../imagery/i.segment/main.c:59
+#, c-format
+msgid "Number of segments created: %d"
+msgstr "Cantidad de segmentos creados: %d"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Operación no implementada"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Escribiendo mapa..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr "Escribiendo índice de bondad"
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, c-format
 msgid "Processing pass %d..."
 msgstr "Procesando paso %d..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid "Segmentation processes stopped at %d due to reaching max iteration limit, more merges may be possible"
 msgstr "El proceso de segmentación se detuvo en %d debido a que se alcanzó el límite máximo de iteraciones, es posible hacer más uniones"
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr "Segmentación convirgió luego de %d iteraciones"
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr "Uniendo segmentos menores a %d celdas..."
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr "Las estadísticas de la región deberían estar en árbol, %d >= %d"
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr "Las ids de las regiones son distintas"
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr "La región consiste de solo una celda, nada qué actualizar"
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "El tamaño de la región es menor que minreg, no se muestra nada."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr "El tamaño de la región es %d, debería ser %d"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "el archivo dig_att ya existe"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "set"
 msgstr "definir"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr "no establecer"
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr "Región de tamaño %d debe estar en el árbol de búsqueda"
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr "reconocimiento de objeto"
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr "Identifica segmentos (objetos) de los datos de imágenes."
-
-#: ../imagery/i.segment/main.c:46
-msgid "Error in reading data"
-msgstr "Error al leer datos"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Error al escribir el archivo de segmentos"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Error al escribir datos"
-
-#: ../imagery/i.segment/main.c:59
-#, c-format
-msgid "Number of segments created: %d"
-msgstr "Cantidad de segmentos creados: %d"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Escribiendo mapa..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr "Escribiendo índice de bondad"
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr "Umbral de diferencia entre 0 y 1"
@@ -35999,59 +37819,74 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Umbral debe ser > 0 y < 1"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 msgid "Unable to assign segmentation method"
 msgstr "No se puede asignar método de segmentación"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 msgid "Invalid similarity method"
 msgstr "Método de similitud no válido"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Se requiere la opción '%s' debe ser > 0"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Se requiere la opción '%s' debe ser <= 1"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Se requiere la opción '%s' debe ser >= 0"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 msgid "Seeds raster map not found"
 msgstr "El mapa ráster de semillas no fue encontrado"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "El mapa de semillas debe ser un mapa ráster tipo CELL (enteros)"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Segmentación c"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Número de tramos inválido: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Número de tramos inválido: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Operación no implementada"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid "Mean shift stopped at %d due to reaching max iteration limit, more changes may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -36113,7 +37948,7 @@ msgstr "Nombre para el mapa raster de salida (verde)"
 msgid "Name for output raster map (blue)"
 msgstr "Nombre para el mapa raster de salida (azul)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr "ASTER"
 
@@ -36162,7 +37997,7 @@ msgstr "SWIR es Low Gain 1"
 msgid "SWIR is Low Gain 2"
 msgstr "SWIR es Low Gain 2"
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "Demasiados mapas de entrada. Solamente se permiten %d."
@@ -36972,47 +38807,51 @@ msgstr "Grupo [%s] no encontrado"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Se requiere la opción <%s>"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 msgid "albedo"
 msgstr "albedo"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr "AVHRR"
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Nombre de capa ráster del albedo de banda ancha de la reflectancia de la superficie."
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr "MODIS (7 bandas de entrada:1,2,3,4,5,6,7)"
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr "NOAA AVHRR (2 bandas de entrada:1,2)"
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr "Landsat 5+7 (6 bandas de entrada:1,2,3,4,5,7)"
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr "ASTER (6 bandas de entrada:1,3,5,6,8,9)"
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr "Modo agresivo (Landsat)"
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid "Albedo dry run to calculate some water to beach/sand/desert stretching, a kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr "Modo suave (MODIS)"
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Título de mapa ráster de salida"
@@ -37281,6 +39120,11 @@ msgstr "Establecer evapotranspiración negativa en cero"
 msgid "Use Night-time"
 msgstr "Use tiempo nocturno"
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "Por favor, ejecutar i.targer para group."
+
 #: ../imagery/i.rectify/main.c:102
 msgid "Rectifies an image by computing a coordinate transformation for each pixel in the image based on the control points."
 msgstr "Rectifica una imagen calculando una transformación de coordenadas para cada píxel de la imagen basada en los puntos de control."
diff --git a/locale/po/grassmods_fi.po b/locale/po/grassmods_fi.po
index e8617db..4197fbb 100644
--- a/locale/po/grassmods_fi.po
+++ b/locale/po/grassmods_fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_fi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-08-17 23:02+0300\n"
 "Last-Translator: Kari Salovaara <kari.salovaara at pp1.inet.fi>\n"
 "Language-Team: Finnish <grass-translations at lists.osgeo.org>\n"
@@ -217,6 +217,7 @@ msgstr "OGR tasoa <%s> ei löytynyt"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -431,6 +432,10 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+msgid "Error in sqlite3_exec():"
+msgstr ""
+
 #: ../db/drivers/sqlite/fetch.c:72
 msgid "Unable to fetch:"
 msgstr ""
@@ -555,27 +560,27 @@ msgstr ""
 msgid "Unable to open database:"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 msgid "SQLite database connection is still busy"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, c-format
 msgid "Database <%s> already exists"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 msgid "Unable to create database:"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, c-format
 msgid "Database <%s> not found"
 msgstr ""
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -585,6 +590,11 @@ msgstr ""
 msgid "Unable grant on table:"
 msgstr ""
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Ei voida suorittaa lauseketta."
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -697,7 +707,7 @@ msgstr ""
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -772,17 +782,17 @@ msgstr ""
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -814,39 +824,39 @@ msgstr ""
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -888,7 +898,7 @@ msgstr ""
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -917,7 +927,7 @@ msgstr ""
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr "SQL"
 
@@ -1007,10 +1017,10 @@ msgid "Unable to open database <%s>"
 msgstr ""
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1183,11 +1193,11 @@ msgstr "epäonistui"
 msgid "succeeded"
 msgstr "onnistui"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr ""
@@ -1219,10 +1229,10 @@ msgstr ""
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr ""
 
@@ -1230,7 +1240,7 @@ msgstr ""
 msgid "Vertical record separator (requires -v flag)"
 msgstr ""
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1238,7 +1248,7 @@ msgstr ""
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr ""
 
@@ -1246,7 +1256,7 @@ msgstr ""
 msgid "Describe query only (don't run it)"
 msgstr ""
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr ""
 
@@ -1293,6 +1303,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr ""
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr ""
 
@@ -1443,7 +1454,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 msgid "Output settings"
@@ -1556,7 +1566,7 @@ msgstr ""
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1564,15 +1574,15 @@ msgstr ""
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1658,7 +1668,7 @@ msgstr ""
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1700,7 +1710,7 @@ msgstr ""
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1713,26 +1723,27 @@ msgstr ""
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr ""
@@ -1742,7 +1753,8 @@ msgid "Column type not supported (must be string)"
 msgstr ""
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -1881,13 +1893,13 @@ msgstr ""
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -1895,8 +1907,8 @@ msgstr ""
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -1939,10 +1951,11 @@ msgstr ""
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -1956,13 +1969,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -1971,6 +1987,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -1986,7 +2003,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2006,11 +2023,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2022,27 +2039,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2060,74 +2077,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2137,6 +2157,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2152,6 +2173,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2170,6 +2192,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2178,15 +2201,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 msgid "raster3d"
@@ -2220,7 +2244,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr ""
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr ""
@@ -2763,69 +2787,70 @@ msgid "Vector map <%s> not found"
 msgstr ""
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr ""
@@ -2885,12 +2910,13 @@ msgstr ""
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3008,7 +3034,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 msgid "distance"
 msgstr ""
@@ -3163,7 +3189,7 @@ msgid "Area:"
 msgstr "Ala:"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr ""
@@ -3178,7 +3204,7 @@ msgstr ""
 msgid "No attribute table for layer %d"
 msgstr ""
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3191,15 +3217,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr ""
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr ""
@@ -3221,6 +3248,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3228,6 +3256,7 @@ msgid "extract"
 msgstr ""
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 msgid "select"
 msgstr ""
@@ -3237,10 +3266,10 @@ msgstr ""
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 msgid "random"
 msgstr ""
 
@@ -3261,12 +3290,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr ""
 
@@ -3285,39 +3313,45 @@ msgstr ""
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3333,7 +3367,10 @@ msgstr ""
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3402,7 +3439,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3449,45 +3486,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3529,11 +3567,11 @@ msgstr ""
 msgid "Format <%s> does not support writing"
 msgstr ""
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3669,9 +3707,9 @@ msgstr ""
 msgid "Name for output file where to save current settings"
 msgstr ""
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr ""
 
@@ -3691,7 +3729,7 @@ msgstr ""
 msgid "Print current status in shell script style"
 msgstr ""
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr ""
@@ -3707,17 +3745,17 @@ msgid "%s= must be specified"
 msgstr ""
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 msgid "Supported formats:"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3727,66 +3765,67 @@ msgstr ""
 msgid "network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr ""
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -3798,10 +3837,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -3813,48 +3853,82 @@ msgstr ""
 msgid "Cost"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+msgid "Turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+msgid "Layer with turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -3863,10 +3937,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -3882,8 +3956,8 @@ msgstr ""
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -3912,22 +3986,22 @@ msgstr ""
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -3936,17 +4010,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -3957,7 +4031,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -3967,7 +4041,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 msgid "geometry"
 msgstr ""
 
@@ -4018,17 +4092,17 @@ msgid "Unable to get category list <%s>"
 msgstr ""
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr ""
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr ""
@@ -4308,6 +4382,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr ""
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4328,12 +4403,15 @@ msgstr ""
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4489,11 +4567,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr ""
@@ -4615,9 +4693,9 @@ msgid "Remove existing color table"
 msgstr ""
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr ""
@@ -4677,7 +4755,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4693,8 +4771,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr ""
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -4720,6 +4797,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr ""
@@ -4745,7 +4823,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr ""
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -4754,13 +4832,14 @@ msgstr ""
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -4790,8 +4869,9 @@ msgstr ""
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -4834,7 +4914,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr ""
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr ""
@@ -4886,6 +4966,7 @@ msgid "Point out of range"
 msgstr ""
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -4894,15 +4975,17 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -4988,14 +5071,15 @@ msgstr ""
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr ""
 
@@ -5172,14 +5256,14 @@ msgstr ""
 msgid "Input failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 msgid "Secpar_loop failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr ""
 
@@ -5216,9 +5300,9 @@ msgstr ""
 msgid "Point without category"
 msgstr ""
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5321,9 +5405,9 @@ msgstr ""
 msgid "3D raster map <%s> created"
 msgstr ""
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5334,82 +5418,119 @@ msgstr ""
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 msgid "steiner tree"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, c-format
+msgid "Number of terminals: %d\n"
+msgstr ""
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr ""
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, c-format
+msgid "Steiner tree costs = %f"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5429,17 +5550,19 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 msgid "points"
 msgstr ""
 
@@ -5468,9 +5591,9 @@ msgstr ""
 msgid "Name of column containing z coordinate"
 msgstr ""
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr ""
 
@@ -5516,7 +5639,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
@@ -5534,7 +5657,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr ""
@@ -5560,7 +5683,80 @@ msgid_plural "%d points written to vector map."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+msgid "Overriding projection check"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, c-format
+msgid "4 values required for '%s' option"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, c-format
+msgid "Invalid zrange <%s>"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, c-format
+msgid "Unknown return filter value <%s>"
+msgstr ""
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5583,7 +5779,7 @@ msgstr[1] ""
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5591,7 +5787,7 @@ msgstr[1] ""
 msgid "statistics"
 msgstr ""
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 msgid "point pattern"
@@ -6173,8 +6369,8 @@ msgstr ""
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 msgid "Unable to create temporary vector map"
 msgstr ""
 
@@ -6230,12 +6426,12 @@ msgid "Breaking lines..."
 msgstr ""
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr ""
 
@@ -6243,11 +6439,11 @@ msgstr ""
 msgid "Merging lines..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr ""
 
@@ -6262,12 +6458,13 @@ msgstr ""
 msgid "Attribute not found"
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr ""
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr ""
@@ -6337,118 +6534,120 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr ""
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 msgid "Generates random 2D/3D vector points."
 msgstr ""
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr ""
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 msgid "Restrict points to areas in input vector"
 msgstr ""
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 msgid "Name of column for z values"
 msgstr ""
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 msgid "Writes z values to column"
 msgstr ""
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 msgid "Type of column for z values"
 msgstr ""
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr ""
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 msgid "Generate n points for each individual area"
 msgstr ""
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr ""
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, c-format
 msgid "No areas in vector map <%s>"
 msgstr ""
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr ""
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr ""
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr ""
 
@@ -6489,7 +6688,7 @@ msgid "Name of existing raster map to be queried"
 msgstr ""
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 msgid "Name of attribute column to be updated with the query result"
 msgstr ""
 
@@ -6501,79 +6700,77 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr ""
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Saraketta <%s> ei löytynyt taulusta <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 msgid "Reading features from vector map..."
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:246
-#, c-format
+#: ../vector/v.what.rast/main.c:257
+#, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
-msgstr ""
+msgstr "Kursoria ei voida avata"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:655
-#, c-format
+#: ../vector/v.what.rast/main.c:666
+#, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
-msgstr ""
+msgstr "Kursoria ei voida avata"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, c-format
 msgid "%d records updated."
 msgstr ""
@@ -6581,13 +6778,13 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 msgid "univariate statistics"
 msgstr ""
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 msgid "zonal statistics"
 msgstr ""
@@ -6662,7 +6859,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr ""
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -6713,6 +6910,137 @@ msgstr ""
 msgid "%d records updated"
 msgstr ""
 
+#: ../vector/v.out.lidar/main.c:77
+#, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+msgid "Only numeric column type is supported"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, c-format
+msgid "No record for cat = %d"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:187
+#, c-format
+msgid "NULL value for cat = %d"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:196
+#, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+msgid "Exports vector points as LAS point cloud"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:476
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+msgid "Layer number to store generated point ID as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+msgid "Categories"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:503
+msgid "Layer number to store return number as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+msgid "Layer number to store class number as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:517
+msgid "Layer number where RGB color is stored as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+msgid "Column with return number"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:543
+msgid "RGB color definition column"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+msgid "Color definition in R:G:B form"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+msgid "Limit export to the current region"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Ei voida ladata taulua."
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -6748,6 +7076,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -6777,45 +7111,52 @@ msgstr ""
 msgid "No areas selected from vector map <%s>"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -6871,15 +7212,17 @@ msgstr ""
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 msgid "Cache size for raster rows"
 msgstr ""
 
@@ -6918,7 +7261,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr ""
 
@@ -6936,11 +7279,15 @@ msgstr ""
 msgid "Get area %d failed"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+msgid "Failed to plot polygon"
+msgstr ""
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr ""
 
@@ -6969,11 +7316,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr ""
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr ""
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr ""
@@ -7138,149 +7480,154 @@ msgstr ""
 msgid "Incompatible types"
 msgstr ""
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+msgid "Point is not connected to the network"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, c-format
 msgid "Number of cities: %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 msgid "Creating cost cache..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, c-format
 msgid "No point at node %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, c-format
 msgid "No category for point at node %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 msgid "isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 
@@ -7475,13 +7822,14 @@ msgstr ""
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr ""
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 msgid "If not given or '-' then standard output"
 msgstr ""
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -7505,9 +7853,13 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -7567,7 +7919,7 @@ msgstr ""
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 
@@ -7625,7 +7977,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr ""
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -7719,9 +8071,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr ""
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
@@ -8008,9 +8361,9 @@ msgid "Not enough column names"
 msgstr ""
 
 #: ../vector/v.distance/main.c:315 ../vector/v.distance/main.c:335
-#, c-format
+#, fuzzy, c-format
 msgid "Input vector map <%s> is 3D"
-msgstr ""
+msgstr "Kursoria ei voida avata"
 
 #: ../vector/v.distance/main.c:326 ../vector/v.distance/main.c:347
 #, c-format
@@ -8261,7 +8614,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -8282,7 +8635,7 @@ msgstr ""
 msgid "Resolving conflicts..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 msgid "generalization"
 msgstr ""
 
@@ -8307,196 +8660,199 @@ msgid "Performs vector based generalization."
 msgstr ""
 
 #: ../vector/v.generalize/main.c:100
+msgid "Error map with failed generalizations"
+msgstr ""
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 msgid "Lang Simplification Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 msgid "Network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 msgid "Do not copy attributes"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, c-format
 msgid "No lines found in input map <%s>"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, c-format
 msgid "Using threshold: %g %s"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -8568,8 +8924,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr ""
 
@@ -8582,13 +8938,13 @@ msgstr ""
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -8773,13 +9129,13 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr ""
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 msgid "Removing dangles..."
 msgstr ""
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 msgid "Removing bridges..."
 msgstr ""
 
@@ -8826,14 +9182,6 @@ msgstr ""
 msgid "Constructing 3D hull..."
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -8909,7 +9257,9 @@ msgstr ""
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9293,6 +9643,174 @@ msgstr ""
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+msgid "point cloud"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:92
+msgid "cluster"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:93
+msgid "clump"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:94
+msgid "Performs cluster identification."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:102
+msgid "Layer number or name for cluster ids"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:109
+msgid "Maximum distance to neighbors"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:115
+msgid "Minimum number of points to create a cluster"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:123
+msgid "Clustering method"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:165
+msgid "Minimum number of points must be at least 2"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:173
+#, c-format
+msgid "Option %s must be positive"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:186
+msgid "Counting input points ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+msgid "Not enough points in input, nothing to do"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:216
+msgid "Creating search index ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, c-format
+msgid "Option %s must be a positive number"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+msgid "Estimating maximum distance ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Tauluja ei löytynyt"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, c-format
+msgid "Standard deviation: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, c-format
+msgid "Estimated maximum distance: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+msgid "Building clusters ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, c-format
+msgid "No clusters found, adjust option %s"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+msgid "Generating renumbering scheme..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+msgid "Write out cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:710
+msgid "Loading points ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+msgid "Not enough points found"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "Tauluja ei löytynyt"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "Tauluja ei löytynyt"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -9424,25 +9942,25 @@ msgstr ""
 msgid "Impossible to write to aux table"
 msgstr ""
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 msgid "network maintenance"
 msgstr ""
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr ""
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, c-format
 msgid "%d new points (nodes) written to output."
 msgstr ""
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr ""
@@ -9479,7 +9997,7 @@ msgstr ""
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -9491,14 +10009,14 @@ msgstr ""
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr ""
@@ -9527,44 +10045,126 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 msgid "Name of input file"
 msgstr ""
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr ""
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 msgid "Snap points to network"
 msgstr ""
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+msgid "Turntable layer"
+msgstr ""
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr ""
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Indeksiä ei voida luoda:"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Ei voida luoda taulua."
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Kursoria ei voida avata"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Ei voida luoda taulua."
+
+#: ../vector/v.net/turntable.c:655
+#, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr ""
+
+#: ../vector/v.net/turntable.c:660
+#, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr ""
+
+#: ../vector/v.net/turntable.c:665
+#, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr ""
+
+#: ../vector/v.net/turntable.c:700
+#, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr ""
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Ei voida luoda taulua."
+
+#: ../vector/v.net/turntable.c:722
+#, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr ""
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Ei voida luoda taulua."
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -9689,7 +10289,7 @@ msgid "Categories already exist in layer %d"
 msgstr ""
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr ""
 
@@ -9792,7 +10392,7 @@ msgstr ""
 msgid "Key column type is not integer"
 msgstr ""
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr ""
@@ -10495,7 +11095,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -10737,8 +11337,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr ""
 
@@ -10746,7 +11346,7 @@ msgstr ""
 msgid "Mapset containing input vector map"
 msgstr ""
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 msgid "Default: name of current mapset"
 msgstr ""
 
@@ -10754,7 +11354,7 @@ msgstr ""
 msgid "Name of input vector map to re-project"
 msgstr ""
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr ""
 
@@ -10768,8 +11368,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr ""
 
@@ -10798,17 +11398,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr ""
@@ -11130,324 +11732,533 @@ msgid ""
 "Key column: %s\n"
 msgstr ""
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+msgid "Do not expect input with topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
-msgid "Copy also attribute table"
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
 #: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
+msgid "Copy also attribute table"
+msgstr ""
+
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr ""
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr ""
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr ""
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, c-format
 msgid "Patching vector map <%s>..."
 msgstr ""
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr ""
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr ""
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr ""
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr ""
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr ""
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 msgid "LAS input file"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
-msgid "Import subregion only"
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+msgid "Layer number to store return information as category"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
+#: ../vector/v.in.lidar/main.c:172
+msgid "Layer number where RBG colors are stored as category"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+msgid "Import subregion only"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 msgid "If not specified, all points are imported"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
-msgid "Print LAS file info and exit"
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+msgid "Name of vector map with areas where the points should be imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:224
+msgid "Layer number or name for mask option"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Paikka"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:261
+msgid "Import only n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:262
+msgid "Imports only the given number of points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+msgid "Print LAS file info and exit"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+msgid "Invert mask when selecting points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+msgid "Create only requested layers and categories"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+msgid "Assume that the dataset has same projection as the current location"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, c-format
 msgid "Input file <%s> does not exist"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
 #, c-format
-msgid "Unknown filter option <%s>"
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+msgid "ID layer is required to store attribute table"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:409
+#, c-format
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, c-format
 msgid "Unable to create new location <%s>"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:593
+#, c-format
+msgid "Scanning %llu points..."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:595
+#, c-format
+msgid "Scanning %lu points..."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, c-format
+msgid "%llu points imported (limit was %llu)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, c-format
+msgid "%llu points imported"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:732
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, c-format
+msgid "%llu input points were outside of the selected area"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
+#: ../vector/v.in.lidar/main.c:736
+#, c-format
+msgid "%llu input points were outside of the area specified by mask"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:738
 #, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
+msgid "%llu input points were filtered out by return number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:740
 #, c-format
-msgid "Unable open database <%s> by driver <%s>"
+msgid "%llu input points were filtered out by class number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:742
 #, c-format
-msgid "Scanning %d points..."
+msgid "%llu input points were filtered outsite the range for z coordinate"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "%d points imported"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:747
 #, c-format
-msgid "%d input points were not valid"
+msgid "%llu input points were skipped by count-based decimation"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:751
 #, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu points imported (limit was %d)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:755
 #, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu points imported"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:757
 #, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were not valid"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:759
+#, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:761
+#, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:767
+#, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:769
+#, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:772
+#, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+msgid "The rest of points was ignored"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Kursoria ei voida avata"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
 msgstr ""
 
 #: ../vector/v.external/main.c:55
@@ -11456,22 +12267,22 @@ msgid ""
 "PostGIS feature table."
 msgstr ""
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr ""
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, c-format
 msgid "Unable to delete '%s'"
 msgstr ""
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr ""
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, c-format
 msgid "Link to vector map <%s> created."
 msgstr ""
@@ -11480,11 +12291,11 @@ msgstr ""
 msgid "Name of input OGR or PostGIS data source"
 msgstr ""
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr ""
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -11492,22 +12303,26 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr ""
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 msgid "List available layers including feature type in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -11679,131 +12494,131 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 msgid "Do not make caps at the ends of polylines"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 msgid "Transfer categories and attributes"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 msgid "Illegal scale value"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 msgid "Buffering features..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 msgid "Cleaning buffers..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 msgid "Calculating centroids for all areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr ""
@@ -12064,34 +12879,42 @@ msgstr ""
 msgid "%d features written to '%s'."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 msgid "cost allocation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 msgid "Calculating costs from centers ..."
 msgstr ""
 
+#: ../vector/v.net.alloc/main.c:266
+msgid "Calculating costs to centers ..."
+msgstr ""
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -12142,7 +12965,7 @@ msgstr ""
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -12775,7 +13598,7 @@ msgstr ""
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -13060,44 +13883,53 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr ""
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 msgid "Region"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 msgid "Exclude attributes not linked to features"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr ""
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr ""
@@ -13134,43 +13966,47 @@ msgstr ""
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
-msgid "Use either length or vertices"
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
 msgstr ""
 
 #: ../vector/v.split/main.c:108
+msgid "Use either length or vertices"
+msgstr ""
+
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, c-format
 msgid "Unknown unit %s"
 msgstr ""
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 msgid "Can not get projection units"
 msgstr ""
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, c-format
 msgid "Length in map units: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, c-format
 msgid "Length in meters: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 msgid "Number of vertices must be at least 2"
 msgstr ""
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -13280,7 +14116,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr ""
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 msgid "Output feature type"
 msgstr ""
 
@@ -13374,10 +14212,13 @@ msgid "Writing out vector columns..."
 msgstr ""
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -13388,6 +14229,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 msgid "aggregation"
@@ -13533,8 +14375,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr ""
 
@@ -13601,6 +14444,122 @@ msgstr ""
 msgid "Counting points quadrats..."
 msgstr ""
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Paikka"
+
+#: ../vector/v.decimate/main.c:130
+msgid "Decimates a point cloud"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+msgid "Copies only the given number of points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:199
+msgid "Minimal difference of z values"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+msgid "Preserve only n points per grid cell"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+msgid "Only one point per cat in grid cell"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:232
+msgid "Use z in grid decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -13615,28 +14574,28 @@ msgstr ""
 msgid "Target location <%s> not found"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -13945,10 +14904,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr ""
 
-#: ../vector/v.univar/main.c:358
-msgid "Only numeric column type is supported"
-msgstr ""
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -14031,299 +14986,301 @@ msgid_plural "%d records updated."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+msgid "Name of OGR datasource to be imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 msgid "Minimum size of area to be imported (square meters)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 msgid "import area centroids as points"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 msgid "import area boundaries as lines"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 msgid "import lines as area boundaries"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 msgid "import points as centroids"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 msgid "Encoding value for attribute data"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 msgid "Name of column used for categories"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 msgid "Name of geometry column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 msgid "If not given, all geometry columns from the input are used"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 msgid "List supported OGR formats and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 msgid "List available OGR layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr ""
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 msgid "Perform projection check only and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 msgid "No OGR layers available"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, c-format
 msgid "Using temporary vector <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, c-format
 msgid "Key column '%s' not found"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, c-format
 msgid "Key column '%s' is not integer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, c-format
 msgid "%d %s without geometry skipped"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 msgid "Cleaning polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 msgid "Merging boundaries..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 msgid "Changing boundary dangles to lines..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 msgid "Changing boundary bridges to lines..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -14331,114 +15288,114 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 msgid "Import failed"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, c-format
 msgid "Unable to drop table: '%s'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -14638,6 +15595,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr ""
 
+#: ../vector/v.to.db/main.c:105
+#, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr ""
+
 #: ../vector/v.to.db/parse.c:36
 msgid "Layer number or name (write to)"
 msgstr ""
@@ -14785,19 +15747,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr ""
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr ""
 
@@ -14964,14 +15926,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr ""
@@ -15094,14 +16056,18 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+msgid "Create polyline from lines with same categories"
+msgstr ""
+
+#: ../vector/v.build.polylines/main.c:231
 #, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -15561,19 +16527,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -15587,6 +16558,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -15599,7 +16571,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -15741,6 +16713,7 @@ msgid "Unable to map image file"
 msgstr ""
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -15758,14 +16731,14 @@ msgstr ""
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -15803,6 +16776,49 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+msgid "Manages display frames on the user's graphics monitor."
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+msgid "Create a new frame if doesn't exist and select"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+msgid "Print name of current frame and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+msgid "Print names of all frames including 'at' position and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -15820,7 +16836,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -15833,7 +16849,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -15902,18 +16918,23 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -15928,6 +16949,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -16014,6 +17036,88 @@ msgstr ""
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+msgid "Basename of the new generated output maps"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+msgid "Register Null maps"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -16136,7 +17240,7 @@ msgstr ""
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 msgid "map management"
@@ -16148,8 +17252,8 @@ msgid "rename"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -16158,9 +17262,9 @@ msgid "input"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -16174,6 +17278,73 @@ msgstr ""
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+msgid "contour"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+msgid "Register empty vector maps"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+msgid "Do not create attribute tables"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 msgid "Lists registered maps of a space time raster dataset."
 msgstr ""
@@ -16181,7 +17352,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -16232,8 +17403,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -16337,71 +17509,41 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-msgid "Basename of the new generated output maps"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 msgid "Scale factor for input space time raster dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 msgid "Shift factor for input space time raster dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -16433,42 +17575,26 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
-msgid "Number of r.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-msgid "Register Null maps"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
+msgid "Number of r.mapcalc processes to run in parallel"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
@@ -16563,7 +17689,7 @@ msgid "multispectral"
 msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
-msgid "Name for output image"
+msgid "Name for output image (or text file for -t)"
 msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
@@ -16578,6 +17704,48 @@ msgstr ""
 msgid "Use gnuplot for display"
 msgstr ""
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+msgid "output to text file"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+msgid "Comma separated list of coordinates"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+msgid "Sort the maps by category"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+msgid "Number of r.what processes to run in parallel"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 msgid ""
 "Imports a space time vector dataset from a GRASS GIS specific archive file."
@@ -16608,28 +17776,8 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
-msgid "Extend location extents based on new dataset"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-msgid "Assume that the dataset has same projection as the current location"
+msgid "Extend location extents based on new dataset"
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
@@ -16804,6 +17952,18 @@ msgstr ""
 msgid "Output field separator"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr ""
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr ""
@@ -16894,8 +18054,14 @@ msgstr ""
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+msgid "time management"
+msgstr ""
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 msgid "Name of an existing space time dataset"
 msgstr ""
 
@@ -16904,7 +18070,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -16912,15 +18078,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -16960,7 +18126,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr ""
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr ""
 
@@ -17029,15 +18195,26 @@ msgstr ""
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr ""
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 msgid "inputs"
 msgstr ""
@@ -17109,12 +18286,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -17225,13 +18409,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -17241,12 +18424,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr ""
 
@@ -17260,7 +18443,7 @@ msgid "ASCII file containing input data"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr ""
 
@@ -17268,14 +18451,14 @@ msgstr ""
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr ""
 
@@ -17311,17 +18494,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -17356,10 +18539,6 @@ msgid ""
 "on the fly."
 msgstr ""
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-msgid "Name of OGR datasource to be imported"
-msgstr ""
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 msgid "Output vector map extent"
 msgstr ""
@@ -17452,7 +18631,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -17531,22 +18710,17 @@ msgstr ""
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 msgid "Extracts a subset of a space time vector dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 msgid "Register empty maps"
 msgstr ""
 
@@ -17649,26 +18823,26 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 msgid "Number of r.series processes to run in parallel"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 msgid ""
 "Performs spatio-temporal mapcalc expressions on temporally sampled maps of "
 "space time raster datasets."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 msgid "Basename for output raster maps"
 msgstr ""
@@ -17769,73 +18943,89 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
-msgid "Name of extension to install or remove"
+msgid "addons"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:7
-msgid "Name of toolbox (set of extensions) when -t flag is given"
+msgid "download"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
+msgid "Name of extension to install or remove"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
-msgid "Prefix where to install extension (ignored when flag -s is given)"
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
+msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:11
-msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:12
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
+msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:14
+msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
+msgid "List available extensions in the official GRASS GIS Addons repository"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 msgid "Install"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr ""
 
@@ -17943,10 +19133,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr ""
@@ -17993,6 +19179,51 @@ msgstr ""
 msgid "Test name"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+msgid "Name of attribute column to store value"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+msgid "Write raster values as z coordinate"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+msgid "Do not build vector topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -18053,6 +19284,15 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+msgid "Data type"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+msgid "Supported only for GTiff"
+msgstr ""
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr ""
@@ -18203,20 +19443,25 @@ msgid "Description of the space time dataset"
 msgstr ""
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr ""
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -18253,12 +19498,12 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -18334,7 +19579,7 @@ msgstr ""
 msgid "Neighborhood size"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr ""
 
@@ -18421,22 +19666,39 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr ""
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
-msgid "Estimate resolution only"
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
 msgstr ""
 
 #: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
+msgid "Estimate resolution only"
+msgstr ""
+
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 msgid "Optional"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr ""
 
@@ -18494,15 +19756,33 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 msgid "Name of vector map to be queried"
 msgstr ""
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+msgid "query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 msgid "Name of attribute column to be queried"
 msgstr ""
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr ""
 
@@ -18583,6 +19863,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -18595,10 +19876,14 @@ msgid "Sill value"
 msgstr ""
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 msgid "Name for output variance raster map"
 msgstr ""
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -18698,25 +19983,21 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 msgid "series"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-msgid "Sort the maps by category"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -18751,7 +20032,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -18764,7 +20045,7 @@ msgid "Radius of buffer in raster cells"
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr ""
 
@@ -18781,11 +20062,11 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 msgid "Number of interpolation processes to run in parallel"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -18807,7 +20088,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr ""
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -18833,6 +20114,15 @@ msgstr ""
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Valinta"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 msgid "Joins a database table to a vector map table."
 msgstr ""
@@ -18841,18 +20131,10 @@ msgstr ""
 msgid "Vector map to which to join other table"
 msgstr ""
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr ""
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -18877,15 +20159,15 @@ msgstr ""
 msgid "Imports space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 msgid "Set the current region from the last map that was imported"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 msgid "Link the raster files using r.external"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -18954,14 +20236,17 @@ msgstr ""
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -18992,11 +20277,11 @@ msgstr ""
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -19004,8 +20289,8 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr ""
 
@@ -19054,6 +20339,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr ""
@@ -19192,9 +20478,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -19220,7 +20507,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr ""
@@ -19281,6 +20571,125 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr ""
 
+#: ../raster3d/r3.flow/test_main.c:46
+msgid "Testing flow lines."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:91
+msgid "Please provide three 3D raster maps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "OGR tasoa <%s> ei löytynyt"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:210
+msgid "Name for vector map of flow lines"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:217
+msgid "Name for output flowaccumulation 3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:224
+msgid "Name for 3D raster sampled by flowlines"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "Oletus: paikan karttayksiköt"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+msgid "Unit of integration step"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+msgid "Integration"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:252
+msgid "Integration step in selected unit"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:253
+msgid "Default step is 0.25 cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:261
+msgid "Maximum number of steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:269
+msgid "Maximum error of integration"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+msgid "Create and fill attribute table"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+msgid "Error during reading seed vector map"
+msgstr ""
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr ""
@@ -19395,11 +20804,11 @@ msgstr ""
 msgid "3D raster map for which to modify null values"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -19423,7 +20832,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 msgid "null data"
 msgstr ""
 
@@ -19431,6 +20840,72 @@ msgstr ""
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+msgid "3D raster"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:127
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+msgid "Count of points per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:145
+msgid "Sum of values of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+msgid "3D raster map of proportional point count"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+msgid "Proportional output"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:169
+msgid "3D raster map of proportional sum of values"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+msgid "Subtract raster values from the z coordinates"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+msgid "Transform"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr ""
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -19481,13 +20956,13 @@ msgstr ""
 msgid "Update range"
 msgstr ""
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr ""
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr ""
@@ -19539,7 +21014,7 @@ msgstr ""
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 msgid "Error flushing tiles"
 msgstr ""
 
@@ -19888,7 +21363,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -19898,7 +21373,7 @@ msgstr ""
 msgid "Aggregate operation"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr ""
@@ -19927,6 +21402,32 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr ""
 
+#: ../raster3d/r3.gradient/main.c:44
+msgid "gradient"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:47
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:56
+msgid "Name for output 3D raster map(s)"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+msgid "Failed to allocate memory for blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:292
+msgid "Writing gradient 3D raster maps..."
+msgstr ""
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -20234,38 +21735,38 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -20539,13 +22040,13 @@ msgid "Unknown operation '%s'"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, c-format
 msgid "Option <%s> ignored"
 msgstr ""
@@ -20613,7 +22114,7 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, c-format
-msgid "<%s> already exists"
+msgid "<%s> already exists. File not copied."
 msgstr ""
 
 #: ../general/g.proj/datumtrans.c:47
@@ -20718,8 +22219,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -20966,9 +22467,9 @@ msgstr ""
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr ""
 
@@ -20980,15 +22481,15 @@ msgstr ""
 msgid "File name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -20997,7 +22498,7 @@ msgid "Remove base raster maps"
 msgstr ""
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr ""
@@ -21043,73 +22544,63 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr ""
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 msgid "Name of mapset to list (default: current search path)"
 msgstr ""
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr ""
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 msgid "'.' for current region; '*' for default region"
 msgstr ""
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr ""
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr ""
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, c-format
 msgid "Mapset <%s> does not exist"
 msgstr ""
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr ""
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr ""
@@ -21300,56 +22791,56 @@ msgstr ""
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -21553,38 +23044,58 @@ msgid "command line interface with GUI startup screen"
 msgstr ""
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+msgid "Name of workspace file to load on start-up"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -21879,10 +23390,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr ""
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr ""
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -22036,7 +23543,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr ""
 
@@ -22429,7 +23936,7 @@ msgid "Cannot get projection key values of current location"
 msgstr ""
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -22613,139 +24120,139 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr ""
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr ""
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 msgid "Name for output raster map (default: same as 'input')"
 msgstr ""
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 msgid "Resolution of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 msgid "List raster maps in input mapset and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr ""
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr ""
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr ""
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr ""
 
@@ -22795,12 +24302,6 @@ msgstr ""
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr ""
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -22826,22 +24327,22 @@ msgstr ""
 msgid "Raster map <%s> not found in current mapset"
 msgstr ""
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr ""
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr ""
 
@@ -23554,7 +25055,7 @@ msgstr ""
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, c-format
 msgid "%s cannot be 0"
 msgstr ""
@@ -23745,8 +25246,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr ""
@@ -23827,12 +25328,12 @@ msgstr ""
 msgid "Can't get cell header"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -24015,17 +25516,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr ""
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -24049,7 +25546,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr ""
 
@@ -24057,15 +25554,15 @@ msgstr ""
 msgid "Invalid vrange"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -24086,7 +25583,7 @@ msgid "Reading input data..."
 msgstr ""
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -24128,16 +25625,16 @@ msgstr ""
 msgid "Writing to output raster map..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -24285,10 +25782,6 @@ msgstr ""
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-msgid "Data type"
-msgstr ""
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -24804,102 +26297,107 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr ""
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 msgid "Name of raster map for which to edit null values"
 msgstr ""
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr ""
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr ""
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr ""
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr ""
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr ""
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr ""
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr ""
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr ""
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr ""
@@ -25290,79 +26788,164 @@ msgstr ""
 msgid "File <%s> created"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+msgid "File containing names of LAS input files"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:175
+msgid "Filter range for intensity values (min,max)"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:183
+msgid "Scale to apply to intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 msgid "Output raster resolution"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+msgid "Set computation region to match the new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Taulua '%s' ei ole olemassa"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, c-format
+msgid "Unknown filter option <%s>"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:433
+#, c-format
+msgid "Invalid %s"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:468
 #, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:700
-msgid "Reading data ..."
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:714
-msgid "Could not rewind input file"
+#: ../raster/r.in.lidar/main.c:548
+msgid "Reading data ..."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, c-format
+msgid "Cannot open file %s for reading"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:156
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 msgid "Name for distance output raster map"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 msgid "Name for value output raster map"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+msgid "Calculate distance to nearest NULL cell"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, c-format
 msgid "Unknown metric: '%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 msgid "Writing output raster maps..."
 msgstr ""
@@ -25492,7 +27075,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr ""
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr ""
@@ -25593,7 +27176,7 @@ msgid "There are no valid locations in the current region"
 msgstr ""
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -26124,7 +27707,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -26527,7 +28110,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr ""
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -26546,10 +28129,6 @@ msgstr ""
 msgid "Unable to write to temp file"
 msgstr ""
 
-#: ../raster/r.clump/clump.c:225
-msgid "Generating renumbering scheme..."
-msgstr ""
-
 #: ../raster/r.clump/clump.c:265
 msgid "Pass 2 of 2..."
 msgstr ""
@@ -26658,7 +28237,7 @@ msgid "Writing output raster map..."
 msgstr ""
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -26669,38 +28248,38 @@ msgstr ""
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 msgid "Creates watershed basins from a drainage direction map."
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 msgid "Name of input drainage direction map"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 msgid "Name for output watershed basin map"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 msgid "Coordinates of outlet point"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -26785,22 +28364,22 @@ msgid "Invalid map type"
 msgstr ""
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -26907,23 +28486,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -26931,8 +28510,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -27424,201 +29003,205 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 msgid "Inputs"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 msgid "Name of input depressions raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 msgid "Name of input raster map percent of disturbed land"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 msgid "Name of input raster map blocking overland surface flow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 msgid "Minimum size of exterior watershed basin"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 msgid "Name for output accumulation raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 msgid "Number of cells that drain through each cell"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+msgid "Stream power index a * tan(b)"
+msgstr ""
+
+#: ../raster/r.watershed/front/main.c:152
 msgid "Name for output drainage direction raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 msgid "Name for output basins raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 msgid "Name for output stream segments raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 msgid "Name for output half basins raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 msgid "Name for output slope length raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 msgid "Name for output slope steepness raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 msgid "The basin threshold must be a positive number."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -27626,19 +29209,27 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+msgid "Closing TCI and SPI maps"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 msgid "Closing TCI map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+msgid "Closing SPI map"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -27666,30 +29257,30 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 msgid "resample"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr ""
@@ -28064,7 +29655,7 @@ msgstr ""
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr ""
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr ""
@@ -28427,7 +30018,7 @@ msgid ""
 msgstr ""
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -28442,11 +30033,21 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 
+#: ../raster/r.univar/r.univar_main.c:123
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr ""
+
 #: ../raster/r.out.ascii/main.c:63
 msgid "Converts a raster map layer into a GRASS ASCII text file."
 msgstr ""
@@ -28707,32 +30308,32 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 msgid "Unable to find bounding box for lines"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -29003,31 +30604,11 @@ msgstr ""
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr ""
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr ""
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 msgid "Contour levels"
 msgstr ""
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr ""
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-
 #: ../raster/r.contour/main.c:140
 #, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -29577,49 +31158,49 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 msgid "Raster map calculator."
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 msgid "Expression"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 msgid "File containing expression(s) to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 msgid "Seed for rand() function"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+msgid "List input and output maps"
+msgstr ""
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 msgid "parse error"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr ""
@@ -29669,80 +31250,80 @@ msgstr ""
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr ""
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -29916,21 +31497,21 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -29966,14 +31547,6 @@ msgstr ""
 msgid "Band to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -29995,7 +31568,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr ""
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 msgid "Unable to get current working directory"
 msgstr ""
 
@@ -30013,7 +31586,7 @@ msgstr ""
 msgid "Reading band %d of %d..."
 msgstr ""
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr ""
@@ -30082,184 +31655,202 @@ msgstr ""
 msgid "Link to raster map <%s> created."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 msgid "Name of raster file to be imported"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 msgid "Band(s) to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 msgid "Name of GCPs target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 msgid "Offset to be added to band numbers"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
-msgid "File prefix for raster attribute tables"
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:154
-msgid "The band number and \".csv\" will be appended to the file prefix"
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+msgid "Name of the output file that contains the imported map names"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:171
+msgid "File prefix for raster attribute tables"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
+#: ../raster/r.in.gdal/main.c:172
+msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 msgid "Print number of bands and exit"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, c-format
 msgid "Unable to open datasource <%s>"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Indeksiä ei voida luoda:"
+
+#: ../raster/r.in.gdal/main.c:665
 #, c-format
 msgid "Unable to get raster band number %d"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, c-format
 msgid "Importing raster map <%s>..."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr ""
@@ -30372,7 +31963,7 @@ msgstr ""
 msgid "Writing topographic index map..."
 msgstr ""
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr ""
@@ -30466,33 +32057,33 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 msgid "patching"
 msgstr ""
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
 msgstr ""
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr ""
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr ""
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr ""
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr ""
@@ -30558,34 +32149,6 @@ msgstr ""
 msgid "Converts a raster map into a vector map."
 msgstr ""
 
-#: ../raster/r.to.vect/main.c:88
-msgid "Name of attribute column to store value"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-msgid "Write raster values as z coordinate"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-msgid "Do not build vector topology"
-msgstr ""
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -31053,10 +32616,6 @@ msgstr ""
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr ""
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr ""
@@ -31324,7 +32883,7 @@ msgstr ""
 msgid "Name for output raster map(s)"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr ""
 
@@ -31348,7 +32907,7 @@ msgstr ""
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, c-format
 msgid "Generating raster map <%s>..."
 msgstr ""
@@ -31662,7 +33221,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 msgid "landscape structure analysis"
 msgstr ""
@@ -31686,7 +33245,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr ""
@@ -31705,7 +33264,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 msgid "patch index"
 msgstr ""
 
@@ -31844,7 +33403,7 @@ msgstr ""
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr ""
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 
@@ -32006,11 +33565,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr ""
@@ -32213,21 +33772,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, c-format
+msgid "Using Linke constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:649
+#, c-format
+msgid "Using Linke map <%s>"
+msgstr ""
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, c-format
+msgid "Using albedo map <%s>"
+msgstr ""
+
+#: ../raster/r.sun/main.c:661
+#, c-format
+msgid "Using slope constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:664
+#, c-format
+msgid "Using slope map <%s>"
+msgstr ""
+
+#: ../raster/r.sun/main.c:669
+#, c-format
+msgid "Using aspect constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Kursoria ei voida avata"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -32251,76 +33850,84 @@ msgstr ""
 msgid "Print compression information and data type of input map(s)"
 msgstr ""
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr ""
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+msgid "same size"
+msgstr ""
+
+#: ../raster/r.compress/main.c:237
 #, c-format
 msgid "<%s> already uncompressed"
 msgstr ""
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, c-format
-msgid "<%s> already compressed"
+msgid "Uncompressing <%s>"
 msgstr ""
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
+msgid "Re-compressing <%s>"
 msgstr ""
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, c-format
+msgid "Compressing <%s>"
+msgstr ""
+
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -32352,50 +33959,50 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 msgid "kernel filter"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, c-format
 msgid "Both %s= and %s= required"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 msgid "At least one filter must be finite"
 msgstr ""
 
@@ -32783,19 +34390,23 @@ msgstr[1] ""
 msgid "Calculating %s"
 msgstr ""
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 msgid "autocorrelation"
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+msgid "Maximum number of cells to be created"
+msgstr ""
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -32929,7 +34540,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr ""
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr ""
 
@@ -33048,14 +34659,10 @@ msgid "Starting and ending coordinates"
 msgstr ""
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr ""
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr ""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -33083,8 +34690,8 @@ msgid "Name of monitor to start"
 msgstr ""
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -33140,45 +34747,62 @@ msgstr ""
 msgid "Print commands for currently selected monitor and exit"
 msgstr ""
 
-#: ../display/d.mon/main.c:117
-msgid "Do not automatically select when starting"
+#: ../display/d.mon/main.c:118
+msgid "Print path to support files of currently selected monitor and exit"
 msgstr ""
 
 #: ../display/d.mon/main.c:122
-msgid "Release and stop currently selected monitor and exit"
+msgid "Do not automatically select when starting"
 msgstr ""
 
 #: ../display/d.mon/main.c:127
-msgid "Disable true colors"
+msgid "Release and stop currently selected monitor and exit"
 msgstr ""
 
 #: ../display/d.mon/main.c:132
+msgid "Disable true colors"
+msgstr ""
+
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr ""
@@ -33188,58 +34812,72 @@ msgstr ""
 msgid "Monitor <%s> is not running"
 msgstr ""
 
-#: ../display/d.mon/stop.c:37
-msgid "Env file not found"
-msgstr ""
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Saraketta ei voida poistaa."
 
-#: ../display/d.mon/stop.c:55
-msgid "PID file not found"
-msgstr ""
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Saraketta ei voida poistaa."
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Indeksiä ei voida luoda:"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Saraketta ei voida poistaa."
+
+#: ../display/d.mon/start.c:82
 #, c-format
 msgid "Output file: %s"
 msgstr ""
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, c-format
 msgid "Monitor <%s> already running"
 msgstr ""
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, c-format
-msgid "Unable to create file '%s'"
+msgid "Starting monitor <%s>..."
 msgstr ""
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Indeksiä ei voida luoda:"
 
 #: ../display/d.mon/select.c:14
 #, c-format
 msgid "Monitor <%s> is already selected"
 msgstr ""
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 msgid "List of running monitors:"
 msgstr ""
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-msgid "Command file not found"
-msgstr ""
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Kursoria ei voida avata"
 
-#: ../display/d.mon/list.c:88
-msgid "Unable to read command file"
+#: ../display/d.mon/list.c:145
+#, c-format
+msgid "No support files found for monitor <%s>"
 msgstr ""
 
 #: ../display/d.erase/main.c:33
@@ -33343,25 +34981,42 @@ msgstr ""
 msgid "[%s]: illegal value specified"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 msgid "map annotations"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+msgid "Font settings"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -33369,7 +35024,7 @@ msgstr[0] ""
 msgstr[1] ""
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -33377,7 +35032,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -33448,10 +35103,6 @@ msgstr ""
 msgid "Colorize features according color definition column"
 msgstr ""
 
-#: ../display/d.vect/main.c:129
-msgid "Color definition in R:G:B form"
-msgstr ""
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -33461,7 +35112,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr ""
 
@@ -33976,35 +35627,35 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr ""
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 msgid "Displays information about the active display monitor."
 msgstr ""
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr ""
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -34244,14 +35895,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr ""
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr ""
@@ -34312,7 +35955,7 @@ msgstr ""
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr ""
 
@@ -34348,12 +35991,21 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+msgid "Create 3D charts"
+msgstr ""
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 msgid ""
 "Displays a legend for a 2D or 3D raster map in the active frame of the "
@@ -34394,13 +36046,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-msgid "Font settings"
-msgstr ""
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr ""
@@ -34480,11 +36126,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -34496,33 +36143,89 @@ msgstr ""
 msgid "North arrow style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 msgid "Fill color"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -34537,65 +36240,65 @@ msgstr ""
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 msgid "Color for drawing drawing grid"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 msgid "Color for drawing null values (X symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr ""
 
@@ -34851,55 +36554,41 @@ msgstr ""
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr ""
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr ""
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -34968,201 +36657,215 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr ""
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr ""
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Paikka"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, c-format
 msgid "Mapset:   %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, c-format
 msgid "Group:    %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, c-format
 msgid "Subgroup: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, c-format
 msgid "Result signature file: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, c-format
 msgid "Region%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, c-format
 msgid "Mask: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, c-format
 msgid "Cluster parameters%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -35444,8 +37147,8 @@ msgid "radiance"
 msgstr ""
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr ""
 
@@ -35794,349 +37497,393 @@ msgstr ""
 msgid "group <%s> references the following subgroups\n"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 msgid "land surface temperature"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 msgid "vegetation"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 msgid "Name for output QC type classification layer"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 msgid "Name of QC type to extract"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 msgid "mod09: Atmospheric Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -36327,7 +38074,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr ""
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr ""
@@ -36659,103 +38406,108 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+msgid "Error in reading data"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:50
+msgid "Error in creating segments"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:54
+msgid "Error in writing data"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:59
+#, c-format
+msgid "Number of segments created: %d"
+msgstr ""
+
+#: ../imagery/i.segment/watershed.c:19
+msgid "Watershed is not yet implemented"
+msgstr ""
+
+#: ../imagery/i.segment/write_output.c:31
+msgid "Writing out segment IDs..."
+msgstr ""
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, c-format
 msgid "Processing pass %d..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, c-format
 msgid "Candidate flag is already %s"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "set"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-msgid "Error in reading data"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:50
-msgid "Error in creating segments"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:54
-msgid "Error in writing data"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:59
-#, c-format
-msgid "Number of segments created: %d"
-msgstr ""
-
-#: ../imagery/i.segment/write_output.c:31
-msgid "Writing out segment IDs..."
-msgstr ""
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -36823,57 +38575,73 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 msgid "Unable to assign segmentation method"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 msgid "Invalid similarity method"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, c-format
 msgid "Option '%s' must be > 0"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, c-format
 msgid "Option '%s' must be <= 1"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, c-format
 msgid "Option '%s' must be >= 0"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 msgid "Seeds raster map not found"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 msgid "Invalid number of iterations, 100 will be used"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 msgid "Invalid number of MB, 300 will be used"
 msgstr ""
 
+#: ../imagery/i.segment/mean_shift.c:42
+msgid "Mean shift is not yet implemented"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -36932,7 +38700,7 @@ msgstr ""
 msgid "Name for output raster map (blue)"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -36982,7 +38750,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -37774,49 +39542,53 @@ msgstr ""
 msgid "Option '%s' is required for new exposure info"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 msgid "albedo"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 msgid "Computes broad band albedo from surface reflectance."
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 msgid "At least two raster maps are required"
 msgstr ""
 
@@ -38072,6 +39844,10 @@ msgstr ""
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
diff --git a/locale/po/grassmods_fr.po b/locale/po/grassmods_fr.po
index 6dc94b3..329be56 100644
--- a/locale/po/grassmods_fr.po
+++ b/locale/po/grassmods_fr.po
@@ -12,7 +12,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2014-01-01 11:35+0100\n"
 "Last-Translator: Sylvain Maillard <sylvain.maillard at gmail.com>\n"
 "Language-Team: Français <grass-translations at lists.osgeo.org>\n"
@@ -267,6 +267,7 @@ msgstr "raster <%s> non trouvé"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -518,6 +519,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Erreur de fermeture du fichier VTK-ASCII"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -664,30 +670,30 @@ msgstr "Impossible d'ouvrir la couche raster <%s>"
 msgid "Unable to open database:"
 msgstr "Impossible d'ouvrir la couche raster <%s>"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "La connexion à la base de données n'a pas été définie"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "ERREUR: <%s> existe déjà\n"
 
 # c-format
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "raster <%s> non trouvé"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -699,6 +705,11 @@ msgstr "Impossible de créer le texte"
 msgid "Unable grant on table:"
 msgstr "Impossible d'ouvrir le fichier de sortie"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Impossible de paramétrer la taille"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -832,7 +843,7 @@ msgstr "Impossible d'ouvrir la couche raster <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -912,17 +923,17 @@ msgstr "nom =%s\n"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Réglages"
 
@@ -934,7 +945,7 @@ msgstr "Masque: %s\n"
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "nom de la police"
+msgstr "Nom de test"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -957,39 +968,39 @@ msgstr "affiche les paramètres de connexion courants et quitte"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -1035,7 +1046,7 @@ msgstr "Liste tous les pilotes de base de données"
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1065,7 +1076,7 @@ msgstr "Affiche les attributs des vecteurs"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1167,10 +1178,10 @@ msgstr "Impossible d'ouvrir la couche raster <%s>"
 
 # c-format
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1379,11 +1390,11 @@ msgid "succeeded"
 msgstr "...réussi."
 
 # c-format
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Impossible d'ouvrir le fichier [%s] en lecture"
@@ -1421,10 +1432,10 @@ msgstr "Lancer une requête sur la couche grâce à l'option 'query'"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "format OGR"
@@ -1434,7 +1445,7 @@ msgstr "format OGR"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Centile à calculer (requiert le drapeau -e)"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1443,7 +1454,7 @@ msgstr "Centile à calculer (requiert le drapeau -e)"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Nom de la couche binaire à créer (utiliser output=- pour stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Ne pas inclure de nom de colonnes en sortie"
 
@@ -1452,7 +1463,7 @@ msgstr "Ne pas inclure de nom de colonnes en sortie"
 msgid "Describe query only (don't run it)"
 msgstr "uniquement décrire la requête (ne pas l'exécuter)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Sortie verticale (à la place d'horizontale)"
 
@@ -1503,6 +1514,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Fichier contenant les requêtes SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "ignore les erreurs SQL et poursuit"
 
@@ -1687,7 +1699,6 @@ msgstr "Faire pivoter le graphique de 90 degrés"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1816,7 +1827,7 @@ msgstr "Impossible de sélectionner des données dans la table"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1824,16 +1835,16 @@ msgstr "Impossible de sélectionner des données dans la table"
 msgid "Error in pj_do_proj"
 msgstr "Erreur dans pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 "Impossible d'obtenir les valeurs clefs de projection pour le Secteur courant"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1930,7 +1941,7 @@ msgstr "Impossible d'écrire les fichiers temporaires"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1979,7 +1990,7 @@ msgstr ""
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1992,26 +2003,27 @@ msgstr ""
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Impossible d'ouvrir la base de données %s avec le pilote %s"
@@ -2023,7 +2035,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Type de colonne (%s) non géré"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2191,13 +2204,13 @@ msgstr "impossible d'ouvrir le fichier temporaire d'étiquettes <%s>"
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2205,8 +2218,8 @@ msgstr "impossible d'ouvrir le fichier temporaire d'étiquettes <%s>"
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2250,10 +2263,11 @@ msgstr "Nombre de points d'interpolation"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2267,13 +2281,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2282,6 +2299,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2297,7 +2315,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2317,11 +2335,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2333,27 +2351,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2371,74 +2389,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2448,6 +2469,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2463,6 +2485,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2481,6 +2504,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2489,15 +2513,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2537,7 +2562,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr ""
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr ""
@@ -3109,69 +3134,70 @@ msgstr "couche vecteur <%s> introuvable"
 
 # c-format
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Impossible d'ouvrir la couche vecteur [%s]"
@@ -3239,12 +3265,13 @@ msgstr "Pas de points de départ"
 # c-format
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, fuzzy, c-format
 msgid "Unable to open file <%s>"
@@ -3381,7 +3408,7 @@ msgstr "Couche pour le coefficient x"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3546,7 +3573,7 @@ msgid "Area:"
 msgstr "Entité surfacique\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3562,7 +3589,7 @@ msgstr "Écriture des attributs..."
 msgid "No attribute table for layer %d"
 msgstr "Colonne(s) attributaire(s)"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3575,15 +3602,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Impossible d'ouvrir la base de données %s avec le pilote %s"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Impossible d'accorder des privilèges sur la table : %s"
@@ -3607,6 +3635,7 @@ msgid ""
 msgstr "Calcul des moyennes de classes..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3615,6 +3644,7 @@ msgid "extract"
 msgstr "Importation vecteur complète"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3625,10 +3655,10 @@ msgstr "Résolution"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Type de donnée vectorielle"
@@ -3652,12 +3682,11 @@ msgstr "Ne pas copier la table (voir aussi le paramètre 'new')"
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "Colonne(s) attributaire(s)"
@@ -3678,39 +3707,45 @@ msgstr "Position de référence"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3726,7 +3761,10 @@ msgstr "Position de référence"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3804,7 +3842,7 @@ msgstr "Entrée texte ignorée: %s"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3856,45 +3894,46 @@ msgid ""
 msgstr ""
 
 # c-format
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3939,11 +3978,11 @@ msgstr "Type de colonne non géré"
 msgid "Format <%s> does not support writing"
 msgstr "le format 'point' b'est pas géré par l'ancienne version"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -4099,9 +4138,9 @@ msgstr "Fichier ascii contenant les signatures spectrales"
 msgid "Name for output file where to save current settings"
 msgstr "Nom du fichier en sortie contenant le rapport final"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 #, fuzzy
 msgid "List supported formats and exit"
 msgstr "Lister les formats gérés et quitter"
@@ -4124,7 +4163,7 @@ msgstr "Jeu(x) de données à lister (par défaut le jeu de données courant)"
 msgid "Print current status in shell script style"
 msgstr "Produit les statistiques à la façon d'un script shell"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr ""
@@ -4134,7 +4173,8 @@ msgstr ""
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "2 couches doivent être spécifiées"
+msgstr ""
+"L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4142,18 +4182,18 @@ msgid "%s= must be specified"
 msgstr "2 couches doivent être spécifiées"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Lister les formats gérés en sor"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4164,49 +4204,49 @@ msgstr "Lister les formats gérés en sor"
 msgid "network"
 msgstr "Afficher l'index"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-#, fuzzy
-msgid "Arc type"
-msgstr "Type de diagramme"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 #, fuzzy
 msgid "Arc layer"
 msgstr "Requêter la couche"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+#, fuzzy
+msgid "Arc type"
+msgstr "Type de diagramme"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 #, fuzzy
 msgid "Node layer"
 msgstr "Requêter la couche"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 #, fuzzy
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
@@ -4214,22 +4254,23 @@ msgstr ""
 "Nom du fichier contenant les commandes graphiques, s'il n'y en a pas, les "
 "prendre à partirde la ligne de commande"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4241,10 +4282,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4257,51 +4299,87 @@ msgstr ""
 msgid "Cost"
 msgstr "Contraste"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "Nombre de colonnes"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "Distance maximale du point au réseau"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Pas de table."
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "La couche '%s' n'est pas disponible"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 #, fuzzy
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "%s ne fonctionne pas avec un Secteur latitude-longitude"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4311,10 +4389,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4332,8 +4410,8 @@ msgstr "%d points sans catégorie"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4363,22 +4441,22 @@ msgid "Wrong input format: %s"
 msgstr "Fausse entrée pour le multiplicateur: %s"
 
 # c-format
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%d points sans catégorie"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4388,18 +4466,18 @@ msgid "Cannot insert new record: %s"
 msgstr "Impossible d'insérer un nouvel enregistrement : %s"
 
 # c-format
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d erreurs de mise à jour"
 
 # c-format
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%d points sans catégorie"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4410,7 +4488,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4420,7 +4498,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "Couche vecteur à supprimer"
@@ -4474,17 +4552,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Ne pas afficher les codes de catégories"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, fuzzy, c-format
 msgid "Required parameter <%s> not set"
 msgstr "incidout demande de fixer le paramètre d'heure"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "ERREUR: <%s> existe déjà\n"
@@ -4792,6 +4870,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Fichier contenant les signatures initiales"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4812,12 +4891,15 @@ msgstr "Fichier contenant les signatures initiales"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4984,11 +5066,11 @@ msgstr "'layer' doit être > 0 pour 'where'."
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr ""
@@ -5131,9 +5213,9 @@ msgid "Remove existing color table"
 msgstr "Garder la table de couleurs existante"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5201,7 +5283,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5222,8 +5304,7 @@ msgstr ""
 "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
 "qu'un seul."
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5255,6 +5336,7 @@ msgstr ""
 
 # c-format
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Couche vecteur %s introuvable"
@@ -5282,7 +5364,7 @@ msgid "Color table <%s> not found"
 msgstr "fichier de cellules albedo <%s> non trouvé"
 
 # c-format
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5291,13 +5373,14 @@ msgstr "Impossible de créer la couche raster <%s>"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5332,8 +5415,9 @@ msgstr "Lecture du fichier %s..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5385,7 +5469,7 @@ msgid "Converting color rules into categories..."
 msgstr "Fichier ASCII conservant les coordonnées de transformation"
 
 # c-format
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Impossible d'ouvrir le fichier de cellules pour [%s]"
@@ -5447,6 +5531,7 @@ msgid "Point out of range"
 msgstr "Nombre de cadres de l'animation"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5455,15 +5540,17 @@ msgstr "Nombre de cadres de l'animation"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5557,14 +5644,15 @@ msgstr "Fichier en sortie de déviations de vecteurs points"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "couche de sortie"
@@ -5793,15 +5881,15 @@ msgstr "Méthode d'interpolation à utiliser"
 msgid "Input failed"
 msgstr "Echec de la saisie en entrée"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "Echec de la saisie en entrée"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Espace disque insuffisant -- impossible d'écrire les fichiers"
@@ -5851,9 +5939,9 @@ msgstr "Type de colonne (%s) non géré"
 msgid "Point without category"
 msgstr "%d points sans catégorie"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5885,7 +5973,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Résolution"
+msgstr "Traitement des entités surfaciques ainput..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5965,9 +6053,9 @@ msgstr "Erreur de fermeture du fichier VTK-ASCII"
 msgid "3D raster map <%s> created"
 msgstr "couche raster <%s> non trouvée"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5978,86 +6066,124 @@ msgstr "Impossible d'insérer une nouvelle ligne : %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Couche raster 3D à supprimer"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "couche vecteur des points de départ"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Distance maximale du point au réseau"
 
-#: ../vector/v.net.steiner/main.c:459
+# c-format
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Nombre de points en entrée : %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "Nom de colonne de catégorie"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+# c-format
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Nombre de points en entrée : %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "couche vecteur des points de départ"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Couche raster 3D à supprimer"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -6077,18 +6203,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Importer"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Afficher"
@@ -6125,9 +6253,9 @@ msgstr "Nom de la colonne contenant l'attribut w à interpoler"
 msgid "Name of column containing z coordinate"
 msgstr "Nom de la colonne contenant l'attribut w à interpoler"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Crée une sortie 3D"
@@ -6182,7 +6310,7 @@ msgstr ""
 
 # c-format
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Impossible d'ouvrir le curseur sélectionné : '%s'"
@@ -6201,7 +6329,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "Les colonnes x/y/z doivent être des entiers ou des doubles"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -6232,7 +6360,93 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d points  écrits dans la couche vecteur"
 msgstr[1] "%d points  écrits dans la couche vecteur"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+# c-format
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+#, fuzzy
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "Secteur : %s\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+#, fuzzy
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Tentez de générer un nouveau Secteur (location) avec le paramètre 'location' "
+"des données en entrée.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"Impossible de convertir l'information de projection de la couche de données "
+"au format GRASS pour vérification"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "affiche les paramètres de connexion courants et quitte"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+#, fuzzy
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"La projection des données en entrée et le Secteur (location) courant "
+"semblent correspondre.\n"
+"Poursuite de la procédure d'importation...\n"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "4 paramètres sont requis pour le paramètre 'spatial'"
+
+# c-format
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Etiquette date&heure invalide"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Type inconnu"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6255,7 +6469,7 @@ msgstr[1] "%d points  écrits dans la couche vecteur"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6264,7 +6478,7 @@ msgstr[1] "%d points  écrits dans la couche vecteur"
 msgid "statistics"
 msgstr "Statistiques de transition de classe."
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6951,8 +7165,8 @@ msgid "Operator '%s' is not supported for type line"
 msgstr "le format 'point' b'est pas géré par l'ancienne version"
 
 # c-format
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Impossible de créer la couche raster <%s>"
@@ -7015,14 +7229,14 @@ msgid "Breaking lines..."
 msgstr "Traitement des lignes..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "Suppression des centroïdes en doublons..."
 
 # c-format
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "Écriture %s..."
@@ -7032,12 +7246,12 @@ msgstr "Écriture %s..."
 msgid "Merging lines..."
 msgstr "Traitement des lignes..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 #, fuzzy
 msgid "Attaching islands..."
 msgstr "Rattachement des catégories...\n"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Impossible de calculer le centroïde de la surface"
 
@@ -7054,13 +7268,14 @@ msgstr "Écriture %s..."
 msgid "Attribute not found"
 msgstr "Colonne(s) attributaire(s)"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "Écrire les sommets de lignes."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Impossible d'insérer une nouvelle ligne : %s"
@@ -7137,83 +7352,84 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "couche vecteur <%s> introuvable"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Méthode d'échantillonnage"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Génère de façon aléatoire des couches vectorielles points GRASS 2D/3D"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "Nombre de points à créer"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Échec d'ouverture du fichier vectorielle."
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 #, fuzzy
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Hauteur z minimum (requiert le drapeau -z)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 #, fuzzy
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Hauteur z maximum (requiert le drapeau -z)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Nom de la colonne contenant l'attribut w à interpoler"
 
 # c-format
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Écriture %s..."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Type de la table de couleur"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Crée une sortie 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Calcul des moyennes de classes..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Nombre de points à créer"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
@@ -7221,36 +7437,37 @@ msgid ""
 msgstr ""
 
 # c-format
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d points  écrits dans la couche vecteur"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Nom de la couche vectorielle existante"
 
 # c-format
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
@@ -7258,7 +7475,7 @@ msgstr ""
 "La couche vectorielle de départ %s ne contient aucun point dans la région "
 "courante"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
@@ -7266,7 +7483,7 @@ msgstr ""
 "courante"
 
 # c-format
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "Écriture %s..."
@@ -7316,7 +7533,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Nom de(s) la couche(s) raster existante à requêter"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Nom du champ attributaire à utiliser pour les étiquettes"
@@ -7331,91 +7548,89 @@ msgid "Print categories and values instead of updating the database"
 msgstr "Afficher des valeurs moyennes au lieu d'intervalles"
 
 # c-format
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "Colonne <%s> non trouvée"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Type de colonne non géré"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Le type du raster est entier et le type de colonne est flottant"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Le type de raster est flottant et le type de colonne est entier, des données "
 "vont être perdues!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Lecture de la couche raster."
 
 # c-format
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "couche vectorielle en entrée introuvable <%s>"
 
 # c-format
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d points en dehors de la région courante"
 
 # c-format
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%d points sans catégorie"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
 # c-format
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d catégories chargées depuis la couche vecteur"
 
 # c-format
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d catégories en double dans la couche vecteur"
 
 # c-format
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d catégories chargées depuis la table"
 
 # c-format
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d catégories de la couche vecteur manquantes dans la table"
 
 # c-format
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d erreurs de mise à jour"
 
 # c-format
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d enregistrements mis à jour"
@@ -7423,14 +7638,14 @@ msgstr "%d enregistrements mis à jour"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Statistiques de transition de classe."
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7520,7 +7735,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "couche vecteur <%s> introuvable"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7581,6 +7796,159 @@ msgstr "Aucun enregistrement pour la catégorie (cat = %d)"
 msgid "%d records updated"
 msgstr "%d enregistrements mis à jour"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr ""
+"La connexion à la base de données n'a pas été définie pour la couche <%d>"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Type de colonne non géré"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+# c-format
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Aucun enregistrement pour la ligne (cat = %d)"
+
+# c-format
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Aucun enregistrement pour la ligne (cat = %d)"
+
+# c-format
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Colonne <%s> non trouvée"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Générer des points vectoriels comme points 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Convertit des fichiers vecteurs OGR dans GRASS. Pilotes disponibles:\n"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Code de couche"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%-5d catégories de la ligne lues\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Code de couche"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Code de couche"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Couche à laquelle ajouter la colonne"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Nom de la colonne (le type doit être numérique)"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "colonne(s)"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr ""
+"Nom de la colonne de définition de couleur (pour l'utilisation d'un drapeau -"
+"a)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "La colonne de définition de couleur n'est pas spécifiée."
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Impossible de lire cette couleur"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Échelle à appliquer aux données z"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Échelle à appliquer aux données z"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Ne pas modifier la région courante"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Pas de table."
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7621,6 +7989,13 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+# c-format
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Colonne <%s> non trouvée"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7654,24 +8029,30 @@ msgstr "Impossible d'ouvrir le fichier de cellules pour [%s]"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d points  écrits dans la couche vecteur"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, fuzzy, c-format
 msgid "Pass %d of %d:"
 msgstr "classe %d (%d)\n"
 
 # c-format
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "Impossible d'ouvrir la couche raster <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
 # c-format
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
@@ -7679,26 +8060,27 @@ msgstr ""
 "\n"
 "Écriture du nouveau fichier raster..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "Création des fichiers support pour %s..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7766,16 +8148,18 @@ msgstr "Fichier raster à utiliser comme surface"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "Mémoire insuffisante!"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Statistique de couches raster."
@@ -7821,7 +8205,7 @@ msgid "Unknown option '%s'"
 msgstr "Type inconnu"
 
 # c-format
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "Lecture du fichier %s..."
@@ -7841,14 +8225,19 @@ msgstr "Aucune colonne attributaire spécifiée"
 msgid "Get area %d failed"
 msgstr "Importation vecteur complète"
 
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Échec d'ouverture du fichier dig."
+
 # c-format
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "%d points sans catégorie"
 
 # c-format
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 #, fuzzy
 msgid "Area centroid without category"
 msgstr "%d points sans catégorie"
@@ -7880,12 +8269,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Nombre de colonnes"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "colonne(s)"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -8071,159 +8454,165 @@ msgid "Incompatible types"
 msgstr "Type de colonne inconnu"
 
 # c-format
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "impossible de créer la couche en sortie <%s>"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "Nom de la couche utilisée pour la teinte"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Nom de la couche binaire à créer (utiliser output=- pour stdout)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Distance maximale du point au réseau"
 
 # c-format
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Nombre de points en entrée : %d."
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "Nom de colonne de catégorie"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Écriture du nouveau fichier cats..."
 
 # c-format
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%d points sans catégorie"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Aucun enregistrement pour la ligne (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Destination impossible à atteindre\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
 # c-format
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Impossible d'ouvrir le fichier [%s] en lecture"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "Type de couche vecteur"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, fuzzy, c-format
 msgid "Iso cost %d: %f"
 msgstr "classe %d (%d)\n"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
 # c-format
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Nombre de points en entrée : %d."
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Calcul des moyennes de classes..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "Impossible de créer le segment de fichier %s"
@@ -8453,7 +8842,7 @@ msgstr ""
 "Chemin vers le fichier ASCII résultat ou nom du fichier vecteur ASCII si '-"
 "o' est défini"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr ""
@@ -8461,8 +8850,9 @@ msgstr ""
 "prendreles paramètres saisis en ligne de commande"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8486,9 +8876,13 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8553,7 +8947,7 @@ msgstr "Caractère de séparation de champs (en mode 'terse' seulement)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Nombre de chiffres significatifs (virgule flottante uniquement)"
 
@@ -8624,7 +9018,7 @@ msgstr "Impossible d'ouvrir la couche vecteur [%s]"
 
 # c-format
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8733,9 +9127,10 @@ msgstr "impossible d'ouvrir le fichier en entrée <%s>"
 
 # c-format
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "impossible de créer la sortie <%s>"
@@ -9356,7 +9751,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "couche %d"
@@ -9382,7 +9777,7 @@ msgid "Resolving conflicts..."
 msgstr "Suppression des centroïdes en doublons..."
 
 # c-format
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Écriture [%s]..."
@@ -9412,210 +9807,214 @@ msgid "Performs vector based generalization."
 msgstr "Nombre de points d'interpolation"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Nombre de points d'interpolation"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Nombre de points d'interpolation"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Nombre de points d'interpolation"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "Valeur aléatoire maximum"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "Paramètre de lissage"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Paramètre de lissage des splines"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Paramètre de tension des splines"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "Nombre de points d'interpolation"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Impossible de copier la table"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "Méthode inconnue <%s>"
 
 # c-format
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Colonne <%s> non trouvée"
 
 # c-format
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Impossible de créer la couche raster <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Rotation des données ... "
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "Nombre de points d'interpolation"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
 # c-format
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "Écriture [%s]..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Résolution"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9696,8 +10095,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Couleur du texte"
 
@@ -9710,13 +10109,13 @@ msgstr "Couleur du texte"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Couleurs"
@@ -9921,14 +10320,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Exporter les lignes en tant que polygones"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Suppression des centroïdes en doublons..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Suppression des centroïdes en doublons..."
@@ -9983,14 +10382,6 @@ msgstr "Lecture du fichier %s..."
 msgid "Constructing 3D hull..."
 msgstr "Traçage ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -10075,7 +10466,9 @@ msgstr "Nombre de points d'interpolation"
 msgid "Bicubic interpolation"
 msgstr "Nombre de points d'interpolation"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10504,6 +10897,203 @@ msgstr "Erreur de lecture du fichier cats de <%s>"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "write VTKHeader: Ecriture de l'en-tête de fichier VTK"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "%s : pas de données points trouvées"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "Raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d classes"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Séparation du cluster"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Nom du nouveau fichier vecteur binaire"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Distance maximale du point au réseau"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Nombre minimum de pixels dans une classe"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Séparation du cluster"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Le nombre de classes doit être < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Taille du voisinage"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Recherche des classes d'apprentissage..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+# c-format
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "%d points en dehors de la région courante"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Écriture du nouveau fichier cats..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s = %s -- doit être supérieur à zéro"
+
+# c-format
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Distance maximum entre les points en unités carte :%f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr ""
+"\n"
+"Aucune couche DXF trouvée!\n"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Distance maximale du point au réseau"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Écart-type"
+
+# c-format
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Distance maximum entre les points en unités carte :%f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Recherche le coût du chemin"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+"\n"
+"Résolution = %d; période = %d"
+
+# c-format
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "%d points en dehors de la région courante"
+
+# c-format
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Écriture %s..."
+
+# c-format
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Ecriture de la couche raster en sortie %s..."
+
+# c-format
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Lecture du fichier %s..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "%s : pas de données points trouvées"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%s : pas de données points trouvées"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%s : pas de données points trouvées"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10657,26 +11247,26 @@ msgstr "impossible de créer %s"
 msgid "Impossible to write to aux table"
 msgstr "impossible de créer %s"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Boîte à outil pour nettoyer la topologie vectorielle"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "impossible d'ouvrir le fichier vecteur <%s> dans <%s>"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d points  écrits vers la couche cible\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%-5d lignes lues et écrites vers la sortie\n"
@@ -10717,7 +11307,7 @@ msgstr "Nom de la couche vecteur 2D source"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10730,14 +11320,14 @@ msgstr "Nom de la couche vecteur 2D source"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10767,51 +11357,138 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Nom de la couche source"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Les coordonnées XY du/des foyer(s) initial(aux)"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 #, fuzzy
 msgid "Assign unique categories to new points"
 msgstr ""
 "Assignation de catégories uniques aux nouveaux points (opération=noeuds)"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "Type inconnu"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "couche vecteur des points d'arrivée"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Couleur de ligne"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "Type inconnu"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Impossible de lire la ligne %i\n"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Impossible d'insérer dans la table: %s"
+
+# c-format
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Impossible d'ouvrir la couche vecteur [%s]"
+
+# c-format
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Impossible de créer la couche raster <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "La table <%s> n'existe pas dans la base de données <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Le vecteur '%s' existe déjà."
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Le vecteur '%s' existe déjà."
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Impossible d'ouvrir la base de données %s avec le pilote %s"
+
+# c-format
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "impossible de créer la sortie <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Impossible de copier la table d'attributs vers la carte vecteur <%s>"
+
+# c-format
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "impossible de créer la sortie <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10948,7 +11625,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d catégories chargées depuis la table"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "Impossible de calculer le centroïde de la surface"
@@ -11070,7 +11747,7 @@ msgstr ""
 msgid "Key column type is not integer"
 msgstr "La clef primaire doit être un entier"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Impossible de sélectionner des données dans la table"
@@ -11950,7 +12627,7 @@ msgstr ""
 "Utiliser le format de fichier .prj de style ESRI (ne s'applique qu'aux "
 "sorties sous forme de SHAPE)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -12222,8 +12899,8 @@ msgstr "Secteur (location) de la couche source"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Variance de la somme"
@@ -12233,7 +12910,7 @@ msgstr "Variance de la somme"
 msgid "Mapset containing input vector map"
 msgstr "Nom de la couche vecteur 2D source"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Sauvegarder cadre graphique actif"
@@ -12243,7 +12920,7 @@ msgstr "Sauvegarder cadre graphique actif"
 msgid "Name of input vector map to re-project"
 msgstr "Nom de la couche raster source"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Chemin vers la base de données GRASS du Secteur source"
 
@@ -12258,8 +12935,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "Entité surfacique\n"
@@ -12293,17 +12970,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "couche raster en entrée"
@@ -12686,255 +13365,422 @@ msgstr ""
 "tableau: %s\n"
 "clé primaire : %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Convertit une couche vecteur binaire GRASS en la combinant avec d'autres "
 "couches vectorielles binaires."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "Nom de la couche en sortie où les erreurs seront écrites"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Ne construit pas de topologie en mode points"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "Ne pas créer de table attributaire"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 #, fuzzy
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 "Copie égalment la table attributaire. Seule la table de la couche 1 est "
 "prise en compte pour le moment"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Table manquante"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "Les clefs primaires sont différentes."
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr "Le nombre de colonnes est différent."
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 #, fuzzy
 msgid "Column names differ"
 msgstr "Les noms de colonne sont différents."
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "Les types de colonnes sont différents."
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "La longueur des colonnes de type caractère est différent."
 
 # c-format
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Clef primaire non trouvée"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "La couche de sortie n'est pas 3D."
 
 # c-format
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "impossible de créer la sortie <%s>"
 
 # c-format
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Écriture %s..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, fuzzy, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 "Erreur de lecture du fichier '%s'. Certaines données ne seront pas "
 "correctes\n"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Lecteur du fichier raster..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 #, fuzzy
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 "Les intersections aux limites doivent faire l'objet d'une opération de "
 "capture."
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 #, fuzzy
 msgid "Lines common between files will have to be edited"
 msgstr ""
 "Les lignes communes aux deux fichiers devront faire l'objet d'une session "
 "d'édition."
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 #, fuzzy
 msgid "The header information also may have to be edited"
 msgstr "Les informations d'en-tête de fichier devront être éditées."
 
 # c-format
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d enregistrements mis à jour"
 
 # c-format
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Impossible d'ouvrir le curseur sélectionné : '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Impossible de récupérer la ligne"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Type de colonne inconnu"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Impossible d'insérer un nouvel enregistrement : %s"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Convertit des fichiers vecteurs OGR dans GRASS. Pilotes disponibles:\n"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Fichier DXF source"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "Afficher seulement la région de la couche raster"
+msgid "Layer number to store return information as category"
+msgstr "Code de couche"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
 #, fuzzy
-msgid "Subregion"
-msgstr "Région\n"
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Couche à laquelle ajouter la colonne"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "Afficher seulement la région de la couche raster"
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 #, fuzzy
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 "Importer la sous-région seulement (xmin,ymin,xmax,ymax  - habituellement O,S,"
 "E,N)"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Nom du nouveau Secteur (location) à créer"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+#, fuzzy
+msgid "Filter range for z data (min,max)"
+msgstr "Rang des valeurs entières: min,max"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "données entières importées"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "données entières importées"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Afficher l'historique du raster à la place des infos générales"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Nom de la couche vecteur en sortie pour les points de cours d'eau"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
+msgid "Layer number or name for mask option"
+msgstr "Nom du nouveau fichier vecteur binaire"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "données entières importées"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Nom de fichier de signatures à utiliser pour la classification"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "données entières importées"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Importation des objets de la couche %d..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "%s=%s - nombre illégal de points d'interpolation"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Nom du nouveau Secteur (location) à créer"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Afficher l'historique du raster à la place des infos générales"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "Ne pas modifier la région courante"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "couche vecteur en entrée contenant les points d'apprentissage"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Étendre le Secteur actuel en fonction des données importés"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Titre du fichier raster de sortie"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Impossible d'obtenir les unités de projection pour le Secteur courant"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
 # c-format
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "La couche raster [%s] n'existe pas"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+# c-format
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Impossible de décrire la table %s"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Type inconnu"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Code de couche"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 #, fuzzy
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "4 paramètres sont requis pour le paramètre 'spatial'"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12942,130 +13788,187 @@ msgstr ""
 "Impossible de convertir la projection de la couche en entrée au format "
 "GRASS ; impossible de créer le nouveau Secteur"
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Impossible de créer la table : %s"
 
 # c-format
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "Secteur %s créé!"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
-msgstr ""
-"Impossible de convertir l'information de projection de la couche de données "
-"au format GRASS pour vérification"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Le vecteur '%s' existe déjà."
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Importation des objets de la couche %d..."
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Importation des objets de la couche %d..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d points chargés\n"
+
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d points chargés\n"
+
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "Coordonnées de la carte"
+
 # c-format
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-#, fuzzy
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "Secteur : %s\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d points en dehors du seuillage"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr ""
+# c-format
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d points en dehors du seuillage"
+
+# c-format
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d points en dehors du seuillage"
+
+# c-format
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d points en dehors du seuillage"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+# c-format
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d points en dehors du seuillage"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-#, fuzzy
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Tentez de générer un nouveau Secteur (location) avec le paramètre 'location' "
-"des données en entrée.\n"
+# c-format
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d points en dehors du seuillage"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-#, fuzzy
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"La projection des données en entrée et le Secteur (location) courant "
-"semblent correspondre.\n"
-"Poursuite de la procédure d'importation...\n"
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "%d points chargés\n"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Le vecteur '%s' existe déjà."
+msgid "%lu points imported"
+msgstr "%d points chargés\n"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Impossible d'ouvrir la base de données %s avec le pilote %s"
+msgid "%lu input points were not valid"
+msgstr "Coordonnées de la carte"
 
-#: ../vector/v.in.lidar/main.c:640
+# c-format
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Importation des objets de la couche %d..."
+msgid "%lu input points were outside of the selected area"
+msgstr "%d points en dehors du seuillage"
 
-#: ../vector/v.in.lidar/main.c:807
+# c-format
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d points imported"
-msgstr "%d points chargés\n"
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "%d points en dehors du seuillage"
 
-#: ../vector/v.in.lidar/main.c:810
+# c-format
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, fuzzy, c-format
-msgid "%d input points were not valid"
-msgstr "Coordonnées de la carte"
+msgid "%lu input points were filtered out by return number"
+msgstr "%d points en dehors du seuillage"
+
+# c-format
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d points en dehors du seuillage"
 
 # c-format
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d points en dehors du seuillage"
 
 # c-format
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d points en dehors du seuillage"
 
 # c-format
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d points en dehors du seuillage"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Coordonnées pour la requête"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+# c-format
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Impossible d'ouvrir la couche vecteur [%s]"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Impossible d'ouvrir la base de données %s avec le pilote %s"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -13075,24 +13978,24 @@ msgstr ""
 "Convertit une couche vecteur binaire GRASS en la combinant avec d'autres "
 "couches vectorielles binaires."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "La couche '%s' n'est pas disponible"
 
 # c-format
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Impossible d'effacer le fichier %s\n"
 
 # c-format
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "couche raster <%s> non trouvée"
@@ -13102,12 +14005,12 @@ msgstr "couche raster <%s> non trouvée"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Nom du fichier de sortie"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Fichier raster à importer"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -13119,24 +14022,28 @@ msgstr ""
 "\t\tShapefile ESRI : nom du shapefile\n"
 "\t\tFichier MapInfo : nom du fichier mapinfo"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Titre du fichier raster de sortie"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr "Lister les couches disponibles dans l'emplacement source et quitter"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Lister les couches disponibles dans l'emplacement source et quitter"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -13184,11 +14091,10 @@ msgstr ""
 "Impossible de convertir la projection de la couche en entrée au format "
 "GRASS ; impossible de créer le nouveau Secteur"
 
-# c-format
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Coordonnées invalides : %s %s"
+msgstr "Nombre de colonnes"
 
 #: ../vector/v.delaunay/main.c:88
 #, fuzzy
@@ -13340,154 +14246,154 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Ne pas afficher les codes de catégories"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Affiche les attributs des vecteurs"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "L'option échelle requiert une couche de magnitude"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' doit être >0 pour 'cats'."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "La tolérance a été réinitialisée à %g (en unités carte)"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Nom du fichier de sortie illégal"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "La tolérance en unités carte : %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Impossible de sélectionner des données dans la table"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
 # c-format
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Écriture %s..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, fuzzy, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "L'attribut est de taille invalide (%.3f) pour la catégorie %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "La tolérance en unités carte : %g"
 
 # c-format
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Écriture %s..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Écriture des attributs..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "Construction de l'index spatial ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "Rotation des données ... "
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Exporter les lignes en tant que polygones"
 
 # c-format
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Écriture %s..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Calcul des moyennes de classes..."
 
 # c-format
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Écriture %s..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Calcul des moyennes de classes..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Impossible de calculer le centroïde de la surface"
@@ -13770,37 +14676,46 @@ msgid "%d features written to '%s'."
 msgstr "%d points  écrits dans la couche vecteur"
 
 # c-format
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Secteur : %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
 # c-format
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Nombre de points en entrée : %d."
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Calcul des moyennes de classes..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Calcul des moyennes de classes..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13863,7 +14778,7 @@ msgstr "%s=%s - nombre illégal de points d'interpolation"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -14560,7 +15475,7 @@ msgstr "Pas d'enregistrement pour la catégorie '%d' dans la table"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14874,31 +15789,41 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "Affiche les attributs des vecteurs"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "Conditions WHERE de la requête SQL sans le mot clef 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Caractère de séparation vertical d'enregistrement en sortie"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Région\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Hauteur fixée pour les objets vecteurs 3D"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
@@ -14906,18 +15831,18 @@ msgid ""
 msgstr "impossible d'ouvrir le fichier vecteur <%s> dans <%s>"
 
 # c-format
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "Impossible d'ouvrir le curseur sélectionné : '%s'"
 
 # c-format
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "couche vectorielle d'entrée introuvable [%s]"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Ne pas afficher les codes de catégories"
@@ -14960,26 +15885,30 @@ msgstr "Nombre maximum de points dans un segment"
 msgid "Add new vertices, but do not split"
 msgstr "Écriture du nouveau fichier cats..."
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Écrire les sommets de lignes."
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Le paramètre de lissage doit être une valeur positive"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Type de colonne inconnu"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr ""
@@ -14987,23 +15916,23 @@ msgstr ""
 "courant"
 
 # c-format
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s ligne %s: %s"
 
 # c-format
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s ligne %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Le nombre de classes doit être < 256!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "Impossible d'écrire le fichier temporaire"
@@ -15131,7 +16060,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr "  Nombre maximum d'itérations: %d\n"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Type de donnée vectorielle"
@@ -15244,10 +16175,13 @@ msgid "Writing out vector columns..."
 msgstr "Écriture %s..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -15259,6 +16193,7 @@ msgstr "Importation vecteur complète"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -15422,8 +16357,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr "Décaler l'étiquette dans la direction y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "nom de la police"
 
@@ -15508,6 +16444,132 @@ msgstr "Recherche des classes d'apprentissage..."
 msgid "Counting points quadrats..."
 msgstr "Recherche des classes d'apprentissage..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Nom de fichier de signatures à utiliser pour la classification"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "%s : pas de données points trouvées"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "données entières importées"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "données entières importées"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "%s=%s - nombre illégal de points d'interpolation"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Valeur aléatoire maximum"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+# c-format
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "  Nombre maximum d'itérations: %d\n"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+# c-format
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "  Nombre maximum d'itérations: %d\n"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Écart-type"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -15523,30 +16585,30 @@ msgstr ""
 msgid "Target location <%s> not found"
 msgstr "région <%s> non trouvée"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "groupe [%s] ciblé dans le Secteur [%s], jeu de données [%s]\n"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "permission refusée"
 
 # c-format
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "%s non trouvé"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15916,11 +16978,6 @@ msgid " Database connection not defined for layer <%s>"
 msgstr ""
 "La connexion à la base de données n'a pas été définie pour la couche <%d>"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Type de colonne non géré"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -16021,17 +17078,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d enregistrements mis à jour"
 msgstr[1] "%d enregistrements mis à jour"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Convertit des fichiers vecteurs OGR dans GRASS. Pilotes disponibles:\n"
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "nom de la base de donnée"
+msgid "Name of OGR datasource to be imported"
+msgstr "Fichier raster à importer"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -16042,7 +17100,7 @@ msgstr ""
 "\t\t Shapefile ESRI : répertoire contenant des shapefiles\n"
 "\t\tFichier MapInfo : répertoire contenant des fichiers mapinfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 #, fuzzy
 msgid "OGR layer name. If not given, all available layers are imported"
@@ -16050,7 +17108,7 @@ msgstr ""
 "Couche vectorielle cible, si elle n'est pas indiquée, les couches "
 "disponibles seront seulement affichées"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -16061,12 +17119,12 @@ msgstr ""
 "\t\tShapefile ESRI : nom du shapefile\n"
 "\t\tFichier MapInfo : nom du fichier mapinfo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Valeur d'entrée : taille minimum de bassin versant"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 #, fuzzy
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
@@ -16074,44 +17132,44 @@ msgstr ""
 "entités plus petites et les îles sont ignorées. Elle doit être supérieure à "
 "snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "Titre du fichier raster de sortie"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Pas de points de départ"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Écriture %s..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Exporter les lignes en tant que polygones"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Suppression des centroïdes en doublons..."
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Seuil de capture pour les contours. -1 pour 'pas de capture'"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -16119,114 +17177,116 @@ msgstr ""
 "Liste de noms de colonnes à utiliser à la place des noms originaux, le "
 "premier correspondà la colonne de catégorie"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Erreur de lecture du fichier cats de <%s>"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Nom du champ attributaire à utiliser pour les étiquettes"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Nombre de colonnes"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "%-5d catégories du point lues\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Lister les formats gérés et quitter"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Lister les couches disponibles dans l'emplacement source et quitter"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Ne pas nettoyer les polygones (non recommandé)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Forcer l'écriture de valeurs entières"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Impossible d'obtenir les unités de projection pour le Secteur courant"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "affiche les paramètres de connexion courants et quitte"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
 # c-format
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Impossible d'ouvrir la couche raster <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "La position du curseur n'est pas gérée par le pilote MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "La couche '%s' n'est pas disponible"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr ""
@@ -16234,80 +17294,80 @@ msgstr ""
 "vectorielle"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Colonne <%s> non trouvée"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Distance de zone-tampon en unités carte."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Impossible de créer la couche raster <%s>"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Clef primaire <%s> non trouvée"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "La clef primaire doit être un entier"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Colonne <%s> non trouvée"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 "Ecriture de la colonne <%s> de longueur fixée à 40 caractères (possible "
 "troncature des données)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, fuzzy, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 "Ecriture de la colonne <%s> de longueur fixée à 40 caractères (possible "
 "troncature des données)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, fuzzy, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -16316,7 +17376,7 @@ msgstr ""
 "Largeur de la colonne '%s' fixée à 255 (non spécifiée par OGR), des chaînes "
 "risquent d'être tronquées"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, fuzzy, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
@@ -16324,55 +17384,55 @@ msgstr ""
 "troncature des données)"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Type de colonne (%s) non géré"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Importation des objets de la couche %d..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s sans géométrie"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Exporter les lignes en tant que polygones"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Rotation des données ... "
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Écriture %s..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Calcul des moyennes de classes..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -16384,113 +17444,113 @@ msgstr ""
 "entités sont liées à plus d'un tuple de la table attributaire. Le nombre "
 "d'objets de ces entités est stocké comme une catégorie de la couche %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d polygones en entrée\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, fuzzy, c-format
 msgid "%d input polygons"
 msgstr "%d polygones en entrée\n"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Écriture %s..."
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "%d points sans catégorie"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "%d points sans catégorie"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Seuil de capture pour les contours. -1 pour 'pas de capture'"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Echec de la saisie en entrée"
 
 # c-format
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Impossible d'ouvrir la couche raster <%s>"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr ""
@@ -16498,12 +17558,12 @@ msgstr ""
 "Information de projection mise à jour!\n"
 "\n"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -16746,6 +17806,12 @@ msgstr ""
 "La connexion à la base de données n'a pas été définie pour la couche <%d>. "
 "Utilisez d'abord v.db.connect."
 
+# c-format
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "fichier de cellules albedo <%s> non trouvé"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16922,19 +17988,19 @@ msgstr "L'option 'sides' (voisins) n'a de sens que pour des contours"
 msgid "Querying database... "
 msgstr "Lecture du fichier %s..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "Impossible de récupérer la ligne"
@@ -17140,14 +18206,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Le vecteur '%s' existe déjà."
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists"
 msgstr "ERREUR: <%s> existe déjà\n"
@@ -17292,8 +18358,13 @@ msgid "Assign multiple category numbers to polyline"
 msgstr ""
 "Assignation de catégories uniques aux nouveaux points (opération=noeuds)"
 
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Créer des points le long des lignes en entrée."
+
 # c-format
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
@@ -17301,7 +18372,7 @@ msgstr[0] "couche vectorielle en entrée introuvable <%s>"
 msgstr[1] "couche vectorielle en entrée introuvable <%s>"
 
 # c-format
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -17852,19 +18923,24 @@ msgstr "Etiquette date&heure invalide"
 # c-format
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17878,6 +18954,7 @@ msgstr "Etiquette date&heure invalide"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17890,7 +18967,7 @@ msgstr "Etiquette date&heure invalide"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -18057,6 +19134,7 @@ msgid "Unable to map image file"
 msgstr ""
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -18074,14 +19152,14 @@ msgstr ""
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -18122,6 +19200,58 @@ msgid "Using private colormap for DirectColor visual."
 msgstr ""
 "Utilisation d'une table de couleur privée pour la visualisation DirectColor."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Affiche une échelle graphique dans le moniteur GRASS"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Lister tous les moniteurs"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Créer le nouveau fichier s'il n'existe pas."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Supprimer tous les cadres graphiques et effacer l'écran"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Jeu(x) de données à lister (par défaut le jeu de données courant)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Afficher le nom du moniteur sélectionné"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+"Position de l'écran à partir de laquelle on va commencer à tracer le texte "
+"(en pourcentage, [0,0] est en bas à gauche)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18142,7 +19272,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -18155,7 +19285,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -18234,18 +19364,23 @@ msgstr ""
 "Charge les valeurs raster dans la table aux positions des points vecteurs"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -18260,6 +19395,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -18365,6 +19501,93 @@ msgstr "Pondération de la première couche pour le mélange couleur"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Convertit des couches rasters 3D en couches rasters 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Lister les couches raster de l'emplacement source et quitter"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Nom du nouveau fichier raster"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Nombre de copies à imprimer"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "couche raster d'entrée"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18505,7 +19728,7 @@ msgstr "Impossible d'ouvrir la base de données %s"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -18519,8 +19742,8 @@ msgid "rename"
 msgstr "nom =%s\n"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -18530,9 +19753,9 @@ msgid "input"
 msgstr "couche source"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -18548,6 +19771,78 @@ msgstr ""
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Fichier vecteur introuvable : %s"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Créer une couche vecteur GRASS avec les contours d'une couche raster GRASS."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Contraste"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Dénivelé entre les courbes de niveau"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Liste des courbes de niveaux"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Altitude minimale"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Altitude maximale"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Nombre de points minimal pour une courbe de niveau"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "couche raster d'entrée"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Ne pas créer de table attributaire"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -18556,7 +19851,7 @@ msgstr "Lister les couches raster de l'emplacement source et quitter"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -18616,8 +19911,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -18730,74 +20026,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Nom du nouveau fichier raster"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Nom de la couche raster à partir de laquelle calculer les statistiques"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Nom de la couche raster à partir de laquelle calculer les statistiques"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -18832,11 +20097,11 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Nom de la nouvelle base de données"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
@@ -18845,38 +20110,21 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster source"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Nombre de copies à imprimer"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "couche raster d'entrée"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18981,8 +20229,8 @@ msgstr "Multiplicateur"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Nom du fichier de sortie"
+msgid "Name for output image (or text file for -t)"
+msgstr "Nom du fichier en sortie (ne PAS ajouter l'extension)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18999,6 +20247,54 @@ msgstr "Etiquette avec coordonnées à la place d'un nombre"
 msgid "Use gnuplot for display"
 msgstr "Texte à afficher"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Sortie du fichier TIFF world"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Liste de valeurs séparées par des virgules. Exemple : 1.4,3.8,13"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Nom du fichier où stocker le résultat"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Impossible d'ouvrir la base de données %s"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Nombre de copies à imprimer"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "couche raster en sortie"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19031,32 +20327,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Étendre le Secteur actuel en fonction des données importés"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Impossible d'obtenir les unités de projection pour le Secteur courant"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -19251,6 +20525,20 @@ msgstr "Les nombres de cellules des tuiles devraient se superposer"
 msgid "Output field separator"
 msgstr "Séparateur de champ en sortie"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Convertit des couches rasters 3D en couches rasters 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Lister les couches raster de l'emplacement source et quitter"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Affiche la couche raster et sa légende sur le moniteur actif."
@@ -19355,8 +20643,15 @@ msgstr "Impossible d'ouvrir la base de données %s"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Nom de la nouvelle base de données"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "%s - nom illégal"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Nom d'une couche raster GRASS existante"
@@ -19369,7 +20664,7 @@ msgstr ""
 "couleurs; créer une couche *.mosaic"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -19378,15 +20673,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Nom de la nouvelle base de données"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -19438,7 +20733,7 @@ msgstr ""
 "Sauvegarder le moniteur actif en fichier graphique dans le répertoire home"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Nom du fichier de sortie"
 
@@ -19522,16 +20817,30 @@ msgstr "Nom de la couche source"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Titre du fichier raster de sortie"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+#, fuzzy
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+"r.mapcalculator - calcule une nouvelle couche raster à partir d'une "
+"expression r.mapcalc"
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Convertit des couches rasters 3D en couches rasters 2D"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -19608,12 +20917,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -19672,7 +20988,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Nom de la couche raster"
+msgstr "Nom d'une couche raster"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -19758,17 +21074,15 @@ msgstr ""
 "nouvelle valeur à affecter à la colonne (les valeurs varchar doivent être "
 "entre simples guillemets, par exemple : 'grass')"
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 #, fuzzy
 msgid "Redraws the content of currently selected monitor."
 msgstr "Afficher le nom du moniteur sélectionné"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Lister tous les moniteurs"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 msgid ""
 "Create a 3D raster map from an assemblage of many coordinates using "
@@ -19776,12 +21090,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "Produit les statistiques à la façon d'un script shell"
@@ -19797,7 +21111,7 @@ msgid "ASCII file containing input data"
 msgstr "Fichier ascii contenant les signatures spectrales"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "Statistique de couches raster."
@@ -19806,14 +21120,14 @@ msgstr "Statistique de couches raster."
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Statistique"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Type de stockage pour la couche raster créée"
 
@@ -19856,18 +21170,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Facteur d'échelle pour les valeurs de colonnes attributaires"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Pourcentage de la couche à garder en mémoire"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "Format de sortie pour la pente"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -19910,19 +21224,15 @@ msgid ""
 "on the fly."
 msgstr "Convertit des fichiers vecteurs OGR dans GRASS. Pilotes disponibles:\n"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Fichier raster à importer"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "couche raster des zones à problèmes"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Ajuster la région actuelle à la couche source"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -20028,7 +21338,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -20121,24 +21431,18 @@ msgstr "Lister les couches raster de l'emplacement source et quitter"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Nombre de copies à imprimer"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Nom d'une couche raster"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "couche raster d'entrée"
@@ -20261,17 +21565,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Nombre de points d'interpolation"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -20279,13 +21587,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Lister les couches raster de l'emplacement source et quitter"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-#, fuzzy
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-"r.mapcalculator - calcule une nouvelle couche raster à partir d'une "
-"expression r.mapcalc"
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -20414,78 +21715,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Nom du nouveau Secteur à créer"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Lister les couches disponibles et quitter"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Lister les couches disponibles et quitter"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Lister les couches disponibles et quitter"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "Allocation métrique"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "tables du système au lieu de tables utilisateurs"
@@ -20607,10 +21924,6 @@ msgstr ""
 "r.mapcalculator - calcule une nouvelle couche raster à partir d'une "
 "expression r.mapcalc"
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -20669,6 +21982,61 @@ msgstr ""
 msgid "Test name"
 msgstr "Nom de test"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Convertit des couches rasters 3D en couches rasters 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Nom du champ attributaire à utiliser pour les étiquettes"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+#, fuzzy
+msgid "Smooth corners of area features"
+msgstr "Lissage des angles"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Réhausser les valeurs de coordonnées z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Ecrit les valeurs rasters comme des coordonnées z. La table n'est pas créée. "
+"Pour le moment n'existe que pour les points."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Ne construit pas de topologie en mode points"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Utiliser les valeurs raster comme catégories à la place d'une séquence "
+"unique (uniquement pour les CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -20745,6 +22113,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Type de données"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Lister les formats gérés en sor"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -20929,20 +22308,26 @@ msgid "Description of the space time dataset"
 msgstr "Nom de la nouvelle base de données"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nom de la nouvelle base de données"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20986,13 +22371,13 @@ msgstr "Tranformation Tasseled Cap (Kauth Thomas) pour les données LANDSAT-TM"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Code de couche"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -21079,7 +22464,7 @@ msgstr "Lister les couches raster de l'emplacement source et quitter"
 msgid "Neighborhood size"
 msgstr "Taille du voisinage"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Nombre de points d'interpolation"
@@ -21184,24 +22569,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Résolution de la nouvelle couche"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Titre de la couche raster créée"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Métadonnées"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Résolution"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Nom du fichier de sortie <%s> illégal"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Ne pas optimiser par recadrage de la région"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Coordonnées du point germe"
@@ -21277,17 +22679,37 @@ msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 "Charge les valeurs vecteurs dans la table aux positions des points vecteurs"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "colonne(s)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Nom de la couche vecteur"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "colonne(s)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Nom du champ attributaire à utiliser pour les étiquettes"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Distance de zone-tampon en unités carte."
@@ -21382,6 +22804,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -21397,6 +22820,10 @@ msgstr ""
 "<%s> -- valeur illégale de min_size"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr ""
@@ -21405,7 +22832,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -21529,28 +22956,23 @@ msgstr ""
 "Calcule des statistiques univariées à partir des cellules non vides d'une "
 "couche raster."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "couche raster à échantillonner"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Impossible d'ouvrir la base de données %s"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Convertit des couches rasters 3D en couches rasters 2D"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Propager les valeurs NULL"
 
@@ -21592,7 +23014,7 @@ msgstr ""
 "cellule."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -21606,7 +23028,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Rayon du buffer(zone-tampon) exprimé en nombre de cellules raster"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Métrique"
 
@@ -21624,12 +23046,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Convertit des couches rasters 3D en couches rasters 2D"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Nombre de points d'interpolation"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -21657,7 +23079,7 @@ msgstr ""
 "l'interpolation par splines v.surf.rst"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -21685,6 +23107,19 @@ msgstr "Paramètre de lissage des splines"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+"Remplir les zones sans données des couches rasters en utilisant "
+"l'interpolation par splines v.surf.rst"
+
+# c-format
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Secteur : %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -21699,20 +23134,11 @@ msgstr ""
 "Nom de la couche de points vecteurs en entrée pour laquelle éditer la table "
 "attributaire"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Couche à laquelle ajouter la colonne"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "colonne(s)"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -21741,17 +23167,17 @@ msgstr "Nombre de lignes apparaissant dans la légende"
 msgid "Imports space time raster dataset."
 msgstr "Nom de la couche raster à partir de laquelle calculer les statistiques"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Ajuster la région actuelle à la couche source"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "couche raster <%s> non trouvée"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -21838,14 +23264,17 @@ msgstr "couche raster 3D <%s> non trouvée"
 # c-format
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -21879,11 +23308,11 @@ msgstr ""
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -21891,8 +23320,8 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "Erreur de lecture des cellules de données"
@@ -21947,6 +23376,7 @@ msgstr ""
 # c-format
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "Impossible de créer le fichier de cellules pour [%s]"
@@ -22101,9 +23531,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Couleur de la bordure"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -22129,7 +23560,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr ""
@@ -22199,6 +23633,150 @@ msgstr ""
 "Couche raster %i le nom de fichier %s existe déjà. Ce fichier va être "
 "écrasé!\n"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Calcul des moyennes de classes..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Veuillez indiquer trois couches g3d RGB"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "couche vecteur <%s> introuvable"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Calcul des moyennes de classes..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr ""
+"Nom de la couche de points vecteurs en entrée pour laquelle mettre à jour la "
+"table attributaire"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nom de la couche vecteur"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr ""
+"#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
+"Nom de la couche raster cible\n"
+"#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
+"Nom de la couche raster de sortie"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Fichier raster à importer"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+# c-format
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s ligne %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Nombre de points d'interpolation"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Largeur du courant (en mètres). Largeur de cellule raster par défaut"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "Méthode d'interpolation à utiliser"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Aucune couche de données spécifiée"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Nom de la base de données source"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Nombre maximum d'itération"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Nombre maximum d'itération"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Nombre de cellules entre les courants"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+# c-format
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Impossible de décrire la table %s"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Erreur de lecture de la couche Teinte"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -22341,11 +23919,11 @@ msgstr ""
 msgid "3D raster map for which to modify null values"
 msgstr "Nom de la couche raster 3D où modifier les valeurs nulles"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Liste de valeurs de cellules auxquelles assigner la valeur NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Valeur pour remplacer la valeur null"
 
@@ -22375,7 +23953,7 @@ msgstr ""
 "modifyNull (modification des valeurs nulles) : erreur dans la fermeture du "
 "fichier temporaire"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "couche raster en entrée"
@@ -22384,6 +23962,86 @@ msgstr "couche raster en entrée"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Créer de façon explicite le fichier bitmap 3D de valeurs NULL."
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "Valeur raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Créer des couches raster à partir de fichiers de données polygones/lignes "
+"dans le répertoire courant."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "couche vecteur des points de départ"
+
+# c-format
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "  Nombre maximum d'itérations: %d\n"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "couche raster 3D <%s> non trouvée"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+# c-format
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Écriture %s..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Nom de la couche raster 3D où modifier les valeurs nulles"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Réhausser les valeurs de coordonnées z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "Nombre de points d'interpolation"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Impossible d'écrire les fichiers temporaires"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -22444,13 +24102,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Intervalle de données en sortie"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Editer le fichier de catégorie de [%s]?"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, fuzzy, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Table de couleur de [%s] mise à jour à %s"
@@ -22509,7 +24167,7 @@ msgstr "Erreur de lecture de la couche Teinte"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Chargement des données... (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Erreur de fermeture du fichier VTK-ASCII"
@@ -22920,7 +24578,7 @@ msgstr ""
 "Valeurs de couches RASTER3D erronées! Les valeurs doivent être comprises "
 "entre 0 et 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -22930,7 +24588,7 @@ msgstr "Méthode inconnue <%s>"
 msgid "Aggregate operation"
 msgstr "Opération d'agrégation"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -22967,6 +24625,44 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Impossible d'allouer la mémoire-tampon des cellules"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Variance"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+"Combiner des couches rouges, vertes et bleues en une seule couche composite."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr ""
+"#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
+"Nom de la couche raster cible\n"
+"#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
+"Nom de la couche raster de sortie"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Taille du cache du pointeur"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Impossible d'allouer de la mémoire"
+
+# c-format
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Couche raster %i créée \n"
+
 # c-format
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
@@ -23309,38 +25005,38 @@ msgstr "Produit les statistiques à la façon d'un script shell"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -23661,14 +25357,14 @@ msgid "Unknown operation '%s'"
 msgstr "Type inconnu"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 # c-format
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Secteur %s créé!"
@@ -23748,8 +25444,8 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "ERREUR: <%s> existe déjà\n"
+msgid "<%s> already exists. File not copied."
+msgstr "ERREUR: <%s> existe déjà dans le jeu de données <%s>\n"
 
 # c-format
 #: ../general/g.proj/datumtrans.c:47
@@ -23869,8 +25565,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr "Modifier"
 
@@ -24150,9 +25846,9 @@ msgstr "Fichier de couches à importer"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Valeur raster"
@@ -24171,16 +25867,16 @@ msgstr ""
 "motif à recherche dans le nom de couche, doit être entre simples guillemets "
 "(par défaut: tous)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 #, fuzzy
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "utiliser une expression régulière à la place d'une wildcard"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 #, fuzzy
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "utiliser une expression régulière à la place d'une wildcard"
@@ -24192,7 +25888,7 @@ msgstr "couche raster de couverture"
 
 # c-format
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "impossible d'ouvrir <%s>"
@@ -24240,7 +25936,7 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
@@ -24249,85 +25945,71 @@ msgstr ""
 "Lister les fichiers de base de données GRASS disponibles du type spécifié "
 "par l'utilisateur vers la sortie standard."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr ""
 "motif à recherche dans le nom de couche, doit être entre simples guillemets "
 "(par défaut: tous)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 "motif à recherche dans le nom de couche, doit être entre simples guillemets "
 "(par défaut: tous)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "jeu de données à lister (par défaut : chemin de recherche courant)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Nom du jeu de données (par défaut : le jeu de données courant)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Définir la région actuelle à partir de la région spécifiée"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "Écrire uniquement le type de couche"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "Supprimer l'affichage des informations d'en-tête"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 #, fuzzy
 msgid "Verbose listing (also list map titles)"
 msgstr "Sortie détaillée (lister aussi les titres de couches)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-"les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-"qu'un seul."
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-"les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-"qu'un seul."
-
 # c-format
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "La couche raster [%s] n'existe pas"
 
 # c-format
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Impossible d'écrire la couche raster lac <%s>!"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "impossible d'ouvrir le fichier vecteur <%s> dans <%s>"
@@ -24548,52 +26230,52 @@ msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
 # c-format
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Police invalide : %s"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 "Impossible d'obtenir les informations de projection pour le Secteur courant"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Impossible d'obtenir les unités de projection pour le Secteur courant"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "Impossible de fixer les paramètres de projection longitude/latitude"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Erreur dans pj_do_proj (projection du couple de coordonnées en entrée)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -24602,7 +26284,7 @@ msgstr ""
 "possède pas deparamètres de transformation de datume. Essayez de lancer g."
 "setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -24827,38 +26509,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "fichier de cellules non trouvé\n"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Fichier raster à importer"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -25186,10 +26889,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Mon module raster de départ."
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr ""
-
 # c-format
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
@@ -25377,7 +27076,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 #, fuzzy
 msgid "Percent complete..."
 msgstr "Pourcentage effectué..."
@@ -25820,7 +27519,7 @@ msgstr ""
 
 # c-format
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -26019,173 +27718,173 @@ msgstr "ewres=%f"
 msgid "Writing new raster map..."
 msgstr "Couche raster %i créée \n"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 "Re-projeter une couche raster depuis un Secteur (location) vers le Secteur "
 "courant."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Secteur (location) de la couche source"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Nom de la couche vecteur 2D source"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "Nom de la couche raster source"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Titre du fichier raster de sortie"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Résolution de la nouvelle couche"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Lister les couches raster de l'emplacement source et quitter"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Lister les couches raster de l'emplacement source et quitter"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 "Affiche les paramètres de la région courante (à la façon d'un script shell)"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "couche d'entrée : emplacement des dépressions réelles"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 "Impossible d'obtenir les informations de projection pour le Secteur "
 "(location) courant"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr ""
 "Impossible d'obtenir les unités de projection pour le Secteur (location) "
 "courant"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 "Impossible d'obtenir les valeurs clefs de projection pour le Secteur "
 "(location) courant"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "groupe [%s] ciblé dans le Secteur [%s], jeu de données [%s]\n"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Le fichier vecteur [%s] n'est pas disponible"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr ""
 "Impossible d'obtenir les informations de projection pour le Secteur "
 "(location) courant"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr ""
 "Impossible d'obtenir les unités de projection pour le Secteur (location) "
 "courant"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr ""
 "Impossible d'obtenir les valeurs clefs de projection pour le Secteur "
 "(location) courant"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Impossible de travailler sur des données non projetées (secteur xy)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "groupe [%s] ciblé dans le Secteur [%s], jeu de données [%s]\n"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "couche source"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, fuzzy, c-format
 msgid "Cols: %d (%d)"
 msgstr "classe %d (%d)\n"
 
 # c-format
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, fuzzy, c-format
 msgid "Rows: %d (%d)"
 msgstr "lignes: %d"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr "Noeud %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Sud : %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr "Noeud %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr "Noeud %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "EO-res : %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "NS-res : %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 #, fuzzy
 msgid "Output:"
 msgstr "couche de sortie"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "Traçage ... "
@@ -26245,12 +27944,6 @@ msgstr ""
 "Permet la création et/ou la modification des fichiers de gestion des couches "
 "rasters"
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Titre de la couche raster créée"
-
 #: ../raster/r.support/main.c:81
 #, fuzzy
 msgid "Text to use for map data units"
@@ -26281,23 +27974,23 @@ msgstr "couche raster source"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "couche vecteur <%s> introuvable"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] est la reclassification d'une autre couche. Sortie."
 
 # c-format
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Écriture du nouveau fichier null de [%s]..."
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Suppression du fichier null pour [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Terminé."
 
@@ -27120,7 +28813,7 @@ msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
 # c-format
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s: Impossible d'ouvrir [%s]"
@@ -27349,8 +29042,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Editer le fichier de catégorie de [%s]?"
@@ -27440,12 +29133,12 @@ msgstr "Impossible de lire la ligne %i\n"
 msgid "Can't get cell header"
 msgstr "Impossible de l'en-tête de cellule"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS : lignes changées de %d vers %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS : colonnes changées de %d vers %d"
@@ -27648,18 +29341,13 @@ msgstr ""
 "Nombre de lignes d'en-tête à sauter au début du fichier source (écrit dans "
 "l'historique de la carte)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-#, fuzzy
-msgid "Filter range for z data (min,max)"
-msgstr "Rang des valeurs entières: min,max"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Échelle à appliquer aux données z"
 
@@ -27688,7 +29376,7 @@ msgid "Please specify a reasonable column number."
 msgstr "Veuillez spécifier une colonne z vraisemblable"
 
 # c-format
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "Etiquette date&heure invalide"
@@ -27699,15 +29387,15 @@ msgstr "Etiquette date&heure invalide"
 msgid "Invalid vrange"
 msgstr "Etiquette date&heure invalide"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -27732,7 +29420,7 @@ msgid "Reading input data..."
 msgstr "Lecture du fichier %s..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, fuzzy, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "classe %d (%d)\n"
@@ -27781,17 +29469,17 @@ msgid "Writing to output raster map..."
 msgstr "Ecriture de la couche raster en sortie %s..."
 
 # c-format
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "%d points en dehors de la région courante"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 #, fuzzy
 msgid "Scanning data ..."
 msgstr "Rotation des données ... "
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Intervalle :    min         max\n"
@@ -27958,11 +29646,6 @@ msgstr ""
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "Format SIG à écrire (sensible à la casse, voir aussi le drapeau -l)"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Type de données"
-
 #: ../raster/r.out.gdal/main.c:202
 #, fuzzy
 msgid "Creation option(s) to pass to the output format driver"
@@ -28555,106 +30238,111 @@ msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 "Avertissement, on ignore un point situé en dehors de la fenêtre : %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "Nom de la couche raster source"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Nom de la couche raster 3D où modifier les valeurs null"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "NE faire le travail que si la carte est en virgule flottante"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "Vérifier"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Ne faire le travail que si la carte est en valeurs entières"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 #, fuzzy
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Créer de façon explicite le fichier bitmap 3D de valeur-NULL"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 #, fuzzy
 msgid "Remove NULL-value bitmap file"
 msgstr "Créer de façon explicite le fichier bitmap 3D de valeur-NULL"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "couche vecteur <%s> introuvable"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "valeur illégale pour null"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Le vecteur '%s' existe déjà."
 
 # c-format
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "%s - impossible d'ouvrir le fichier raster"
 
 # c-format
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "%s - impossible d'ouvrir le fichier raster"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "couche vecteur des points de départ"
 
 # c-format
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Écriture du nouveau fichier null de [%s]..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "couche raster <%s> non trouvée"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Suppression du fichier null pour [%s]...\n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr ""
 "\n"
 "<%s> -- valeur illégale de min_size"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, fuzzy, c-format
 msgid "%s: illegal value spec"
 msgstr ""
@@ -28662,7 +30350,7 @@ msgstr ""
 "<%s> -- valeur illégale de min_size"
 
 # c-format
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Couche raster %i créée \n"
@@ -29032,7 +30720,7 @@ msgstr "Fichier ascii contenant les signatures spectrales"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Type de donnée vectorielle"
+msgstr "Titre du fichier raster de sortie"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -29121,62 +30809,141 @@ msgstr "Traçage ... "
 msgid "File <%s> created"
 msgstr "Secteur %s créé!"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Créer des couches raster à partir de fichiers de données polygones/lignes "
 "dans le répertoire courant."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Fichier contenant les requêtes SQL"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Rang des valeurs entières: min,max"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Échelle à appliquer aux données z"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Titre du fichier raster de sortie"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Ajuster l'emprise de la région sur cette couche raster"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+# c-format
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "La couche raster [%s] n'existe pas"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Type inconnu"
+
+# c-format
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Police invalide : %s"
+
 # c-format
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Secteur %s créé!"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Rotation des données ... "
 
 # c-format
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Impossible d'ouvrir le fichier ascii : [%s]"
-
-# c-format
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "Écriture %s..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+# c-format
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%d points en dehors de la région courante"
+
+# c-format
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Impossible d'ouvrir le fichier [%s] en lecture"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 "Produit une couche raster où les aires contiguës ont été agrandies d'une "
 "cellule."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Nom de la couche cible"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr ""
@@ -29185,38 +30952,51 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Distance maximum entre les points en unités carte."
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Distance maximale du point au réseau"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "2 couches doivent être spécifiées"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
 # c-format
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Métrique inconnue : [%s]"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Distance maximum entre les points en unités carte."
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Impossible d'écrire les fichiers temporaires"
 
 # c-format
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -29367,7 +31147,7 @@ msgstr "[%s] ne correspond pas à une couleur connue"
 msgid "Converting <%s>..."
 msgstr "Écriture [%s]..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "ERREUR: <%s> existe déjà\n"
@@ -29480,7 +31260,7 @@ msgstr "Points germes en dehors de la région courante"
 
 # c-format
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -30102,7 +31882,7 @@ msgstr "[%s] ne correspond pas à une couleur connue"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -30581,7 +32361,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Produit les statistiques à la façon d'un script shell"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -30603,12 +32383,6 @@ msgstr "Masque: %s\n"
 msgid "Unable to write to temp file"
 msgstr "Impossible d'écrire le fichier temporaire"
 
-# c-format
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Écriture %s..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -30732,7 +32506,7 @@ msgstr "Ecriture de la couche raster en sortie %s..."
 
 # c-format
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -30743,18 +32517,18 @@ msgstr "Couche raster %i créée \n"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Génère des statistiques zonales pour des couches rasters"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "couche raster à échantillonner"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr ""
@@ -30763,7 +32537,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr ""
@@ -30772,23 +32546,23 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Les coordonnées XY du/des foyer(s) initial(aux)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Coordonnées Est <%s> illégale"
 
 # c-format
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Coordonnée Nord <%s> illégale"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -30893,28 +32667,28 @@ msgid "Invalid map type"
 msgstr "Police invalide : %s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, fuzzy, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 "\n"
 "SECTION %d: Fermeture des couches."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, fuzzy, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 "\n"
 "SECTION %d: Détermination du bassin versant."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, fuzzy, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 "\n"
 "SECTION 1a (de %1d): Initialisation de la mémoire."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, fuzzy, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -31047,29 +32821,29 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 #, fuzzy
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 "\n"
 "SECTION 3: Accumulation du courant de surface.       Achevé (pourcentage):"
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 "\n"
 "SECTION 3: Accumulation du courant de surface.       Achevé (pourcentage):"
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -31077,8 +32851,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -31691,64 +33465,64 @@ msgstr ""
 "Tapez juste <entrée> à la question suivante s'il n'y a pas de couche "
 "contenant des éléments d'interruption de pente."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "couche source"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Nom de la couche raster source"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "couche d'entrée : quantité de ruissellement par cellule"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Nom de(s) (la) couche(s) raster(s) en entrée"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "couche d'entrée : terrain bloquant l'écoulement de surface, pour USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Valeur d'entrée : taille minimum de bassin versant"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 "Valeur d'entrée : longueur maximum d'un écoulement de surface, pour USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr ""
@@ -31757,18 +33531,23 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr ""
 "Couche de sortie : nombre de cellules qui s'écoulent dans d'autres cellules"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "couche d'indice topographique ln(a/tan(beta))"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "couche d'indice topographique ln(a/tan(beta))"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr ""
@@ -31777,7 +33556,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr ""
@@ -31786,7 +33565,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr ""
@@ -31795,7 +33574,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr ""
@@ -31804,12 +33583,12 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Couche de sortie : valeur unique pour chaque demi-bassin versant"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr ""
@@ -31818,14 +33597,14 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 "Couche de sortie : facteur de longueur de la pente et d'escarpement (LS) "
 "pour USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr ""
@@ -31834,41 +33613,41 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Couche de sortie : facteur d'escarpement (S) pour USLE "
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Facteur de conversion pour les valeurs Z"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "Mémoire maximale à allouer avec le drapeau -m (en MB)"
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Permet l'écoulement horizontal et vertical de l'eau"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Activer l'option de mémoire étendue : le calcul est lent"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
@@ -31876,39 +33655,39 @@ msgstr ""
 "Seulement nécessaire si les besoins de mémoire excèdent la RAM disponible ; "
 "voir le manuel pour calculer les besoins mémoire"
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 "Utiliser une accumulation d'écoulement positive même pour les sous-"
 "estimations manifestes"
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 "Voir le manuel pour une description détaillée de la sortie d'accumulation "
 "d'écoulement"
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 #, fuzzy
 msgid "Sorry, you must choose an output map."
 msgstr ""
 "\n"
 "Désolé, vous devez choisir une couche en sortie."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s = %s -- doit être supérieur à zéro"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -31921,17 +33700,17 @@ msgstr ""
 "ou 1s\n"
 "\tvous DEVEZ fournir une valeur pour le seuil du bassin (basin.threshold)."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Type de colonne non géré"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Le sous-processus a échoué avec le code de sortie %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -31942,23 +33721,23 @@ msgstr[1] ""
 "\n"
 "SECTION 1 démarrage: initialisation des variables. %d du total des sections."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
@@ -31971,22 +33750,32 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "couche raster de couverture"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "couche raster de couverture"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "couche raster de couverture"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "couche raster de couverture"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Calcul des moyennes de classes..."
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "couche raster de couverture"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "couche raster de couverture"
@@ -32021,33 +33810,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "couche raster à échantillonner"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Génère une couche raster montrant les sous-bassins versants."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 #, fuzzy
 msgid "Aggregation method"
 msgstr "Opération d'agrégation"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Impossible de lire la table de couleur %s"
@@ -32478,7 +34267,7 @@ msgstr ""
 "Impossible de construire une table en valeurs de gris pour les couches en "
 "valeurs flottantes"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - couleur demandée inconnue"
@@ -32901,7 +34690,7 @@ msgstr ""
 "couche raster."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -32916,13 +34705,28 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+# c-format
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "%d points en dehors de la région courante"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 "Calcule des statistiques univariées à partir des cellules non vides d'une "
 "couche raster."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr ""
+"les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+"qu'un seul."
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -33240,34 +35044,34 @@ msgstr ""
 "Les couches en entrée doivent être composées du même type de données : soit "
 "CELL, FCELL ou DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "Ne pas afficher les codes de catégories"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, fuzzy, c-format
 msgid "Pass number %d"
 msgstr "Code de couche"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Lignes %d étiquettées"
 msgstr[1] "Lignes %d étiquettées"
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 #, fuzzy
 msgid "Thinning completed successfully."
 msgstr "Transformée réussie."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -33587,32 +35391,12 @@ msgid "Produces a vector map of specified contours from a raster map."
 msgstr ""
 "Créer une couche vecteur GRASS avec les contours d'une couche raster GRASS."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Dénivelé entre les courbes de niveau"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Liste des courbes de niveaux"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Liste des courbes de niveaux"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Altitude minimale"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Altitude maximale"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Nombre de points minimal pour une courbe de niveau"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -34231,36 +36015,42 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Impossible de créer la couche raster %s"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Couche raster sur laquelle ajuster la région"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Valeur de la chaîne de bit"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Valeur de la chaîne de bit"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Fichier contenant les signatures initiales"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Germe pour une génération aléatoire de nimbre"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+# c-format
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Écriture %s..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
@@ -34268,21 +36058,17 @@ msgstr ""
 "qu'un seul."
 
 # c-format
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "%d erreurs de mise à jour"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "Type inconnu: %c"
@@ -34334,84 +36120,84 @@ msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
 # c-format
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Impossible de créer la couche raster <%s>"
 
 # c-format
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Impossible de créer la couche raster <%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Nombre invalide d'étapes: %s"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
 # c-format
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "Police invalide : %s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "Type inconnu"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Impossible de créer le segment de fichier %s"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
 # c-format
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Impossible d'ouvrir la couche raster <%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "Impossible de fermer la couche source"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -34613,7 +36399,7 @@ msgstr "Balayage avant terminé"
 msgid "Reverse sweep complete"
 msgstr "Balayage arrière terminé"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 #, fuzzy
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
@@ -34622,15 +36408,15 @@ msgstr ""
 "Impossible de convertir l'information de projection de la couche de données "
 "au format GRASS pour vérification"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "Le PROJ_INFO du jeu de données est : \n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 #, fuzzy
 msgid ""
 "Consider generating a new location from the input dataset using the "
@@ -34674,14 +36460,6 @@ msgstr ""
 msgid "Band to select (default is all bands)"
 msgstr "Bande à sélectionner (par défaut : tout sélectionner)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Métadonnées"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -34704,7 +36482,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "impossible de mettre à jour l'emprise de la région courante"
@@ -34724,7 +36502,7 @@ msgstr ""
 msgid "Reading band %d of %d..."
 msgstr "Lecture de la couche"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr ""
@@ -34793,27 +36571,27 @@ msgstr ""
 msgid "Link to raster map <%s> created."
 msgstr "couche raster <%s> non trouvée"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importer un fichier raster binaire."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Fichier raster à importer"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Bande à sélectionner (par défaut : tout sélectionner)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Nom du Secteur de destination du groupe d'images"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
@@ -34822,159 +36600,178 @@ msgstr ""
 "points de calage"
 
 # c-format
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Impossible de créer la couche raster %s"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Nom du raster d'altitudes en entrée [mètres]"
+
 # c-format
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Impossible de décrire la table %s"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 "Conserver les numéros de bande plutôt que d'utiliser les noms de couleur des "
 "bandes"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "affiche les tables et quitte"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "Vous devez indiquer la couche supérieure et la couche inférieure\n"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
 # c-format
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Impossible d'ouvrir la couche raster <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Lecteur du fichier raster..."
 
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Impossible d'ouvrir le fichier de signatures."
+
 # c-format
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Impossible de créer la couche raster %s"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Erreur de lecture du fichier cats de <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "Écriture du nouveau fichier cats..."
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, fuzzy, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "Paramètres de projection en entrée (style PROJ.4)"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "Paramètres de projection en sortie (style PROJ.4)"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, fuzzy, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Erreur dans pj_do_proj (projection du couple de coordonnées en entrée)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr ""
 "Impossible d'obtenir les valeurs clefs de projection pour le Secteur "
 "(location) courant"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr ""
 "Impossible d'obtenir les informations de projection pour le Secteur "
 "(location) courant"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr ""
 "Impossible d'obtenir les unités de projection pour le Secteur (location) "
 "courant"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr ""
@@ -34982,27 +36779,27 @@ msgstr ""
 "(location) courant"
 
 # c-format
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Couche raster %i créée \n"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Création des fichiers support pour %s..."
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "Création des fichiers support pour %s..."
 
 # c-format
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Impossible d'ouvrir le fichier de cellules pour [%s]"
@@ -35147,7 +36944,7 @@ msgid "Writing topographic index map..."
 msgstr "couche d'indice topographique ln(a/tan(beta))"
 
 # c-format
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Nombre de points en entrée : %d."
@@ -35252,12 +37049,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Afficher"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -35266,26 +37063,26 @@ msgstr ""
 "connues pour une (ou davantage) de couches raster afin de renseigner les "
 "zones de \"données nulles\" dans une autre couche raster"
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Nom des couches rasters à 'coller' ensemble"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Nom de la couche raster résultat"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 "Utiliser la valeur zéro (0) pour la transparence à la place de la valeur NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "Le nombre minimum de couches spécifiées en entrée est de deux."
 
 # c-format
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "impossible d'ouvrir le fichier pour %s"
@@ -35361,43 +37158,6 @@ msgstr "Tracer le relief"
 msgid "Converts a raster map into a vector map."
 msgstr "Convertit une couche raster en couche vectorielle"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Nom du champ attributaire à utiliser pour les étiquettes"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-#, fuzzy
-msgid "Smooth corners of area features"
-msgstr "Lissage des angles"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Utiliser les valeurs raster comme catégories à la place d'une séquence "
-"unique (uniquement pour les CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Réhausser les valeurs de coordonnées z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Ecrit les valeurs rasters comme des coordonnées z. La table n'est pas créée. "
-"Pour le moment n'existe que pour les points."
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Ne construit pas de topologie en mode points"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -35932,11 +37692,6 @@ msgstr "Taille du cache du pointeur"
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "couche raster en sortie"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -36234,7 +37989,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Distance maximale du point au réseau"
@@ -36261,7 +38016,7 @@ msgstr "Nombre maximum d'itération"
 msgid "Uniformly distributed cell values"
 msgstr "Valeurs de cellules uniformément distribuées"
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Lecteur du fichier raster..."
@@ -36608,7 +38363,7 @@ msgstr "Calcule un <simple> index sur un fichier raster"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -36634,7 +38389,7 @@ msgstr "Afficher"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -36656,7 +38411,7 @@ msgstr "Calcule des statistiques univariées à partir d'une couche raster GRASS
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Afficher"
@@ -36824,7 +38579,7 @@ msgstr "Impossible d'exécuter lseek\n"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Calcule un <simple> index sur un fichier raster"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "Calcule un <simple> index sur un fichier raster"
@@ -37000,12 +38755,12 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "Impossible de lire le fichier d'intervalle"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
 # c-format
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Impossible d'écrire la couche raster lac <%s>!"
@@ -37257,11 +39012,55 @@ msgstr "incidout demande de fixer le paramètre d'heure"
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Mode 2 : irradiation journalière cumulée pour un jour donné de l'année"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Utiliser les coordonnées du centre de la couche\n"
+
+# c-format
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Couche raster %i créée \n"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+# c-format
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Police invalide : %s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Utiliser les coordonnées du centre de la couche\n"
+
+# c-format
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Couche raster %i créée \n"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Utiliser les coordonnées du centre de la couche\n"
+
+# c-format
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Couche raster %i créée \n"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -37269,11 +39068,11 @@ msgstr ""
 "Si vous souhaitez économiser de la mémoire et utiliser les ombres, vous "
 "devez utiliser des horizons pré-calculés."
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -37299,76 +39098,85 @@ msgstr "Décompresser la couche"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Afficher l'information de projection au format WKT"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "couche vecteur <%s> introuvable"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "[%s] est une reclassification de [%s] - impossible d'éditer l'en-tête!"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "[%s] est une reclassification de [%s] - impossible d'éditer l'en-tête!"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] est une reclassification de [%s] - impossible d'éditer l'en-tête!"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Entité surfacique\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "Surface presque terminée."
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "Surface presque terminée."
+msgid "Uncompressing <%s>"
+msgstr "Valeur de la chaîne de bit"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Valeur de la chaîne de bit"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Valeur de la chaîne de bit"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] est une reclassification de [%s] - impossible d'éditer l'en-tête!"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "[%s] est une reclassification de [%s] - impossible d'éditer l'en-tête!"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -37402,53 +39210,53 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "raster <%s> non trouvé"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Type de donnée vectorielle"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Génère une couche raster montrant les sous-bassins versants."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
 
 # c-format
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Secteur %s créé!"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** <%s> a trop de signatures (le plafond est 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "2 couches doivent être spécifiées"
@@ -37901,22 +39709,28 @@ msgstr[1] "Calcul des moyennes de classes..."
 msgid "Calculating %s"
 msgstr "Calcul des moyennes de classes..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' doit être >0 pour 'cats'."
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Corrélation"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr ""
 "Générer des valeurs de cellules aléatoires ayant une interdépendance spatiale"
 
-#: ../raster/r.random.cells/main.c:67
+# c-format
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "  Nombre maximum d'itérations: %d\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -38071,7 +39885,7 @@ msgstr "Table manquante"
 msgid "Grid line width"
 msgstr "Epaisseur de ligne"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr "Couleur de la bordure"
@@ -38210,15 +40024,10 @@ msgid "Starting and ending coordinates"
 msgstr "Utiliser les coordonnées du centre de la couche\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Couleur de ligne"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "Couleur du texte"
-
 # c-format
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
@@ -38249,8 +40058,8 @@ msgid "Name of monitor to start"
 msgstr "Nom du moniteur graphique à démarrer"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -38312,49 +40121,67 @@ msgstr "Afficher le nom du moniteur sélectionné"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Afficher le nom du moniteur sélectionné"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Afficher le nom du moniteur sélectionné"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "Ne pas sélectionner automatiquement le moniteur au démarrage"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Désélectionner le moniteur actif"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Impossible de lire cette couleur"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Ouvrir le formulaire en mode édition"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 #, fuzzy
 msgid "Currently selected monitor:"
 msgstr "Désélectionner le moniteur actif"
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, fuzzy, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr "Ne pas ajouter à la liste des commandes dans le moniteur"
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "Pas de moniteur sélectionné"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Pas de moniteur sélectionné"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
@@ -38364,67 +40191,82 @@ msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
 msgid "Monitor <%s> is not running"
 msgstr "raster <%s> non trouvé"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "fichier de cellules non trouvé\n"
+# c-format
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "fichier de cellules non trouvé\n"
+# c-format
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Impossible d'ouvrir la couche raster <%s>"
+
+# c-format
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr ""
 "Couche raster %i le nom de fichier %s existe déjà. Ce fichier va être "
 "écrasé!\n"
 
-#: ../display/d.mon/start.c:61
+# c-format
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Impossible d'effacer le fichier %s\n"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "couche de sortie"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Pas de moniteur sélectionné"
 
 # c-format
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Impossible de créer le fichier de cellules pour [%s]"
+msgid "Starting monitor <%s>..."
+msgstr "Écriture %s..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Impossible de lire le fichier couleur"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Pas de moniteur sélectionné"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Lister tous les moniteurs"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "fichier de cellules non trouvé\n"
+# c-format
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Impossible d'ouvrir le fichier de cellules pour [%s]"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Impossible de lire le fichier couleur"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Ne pas ajouter à la liste des commandes dans le moniteur"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -38545,12 +40387,12 @@ msgstr ""
 "\n"
 "<%s> -- valeur illégale de min_size"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Affiche l'information topologique (déboguage)"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -38559,17 +40401,36 @@ msgstr ""
 "Superpose les valeurs de catégorie des cellules sur la couche raster "
 "affichée dans lemoniteur."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "couche vecteur des points de départ"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 "Choisir la couleur du texte en fonction de la valeur de couleur de la cellule"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Afficher également les paramètres 3D"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "Chemin du fichier VTK en sortie"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -38577,7 +40438,7 @@ msgstr[0] "Couleur de la bordure"
 msgstr[1] "Couleur de la bordure"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -38589,7 +40450,7 @@ msgstr ""
 "moniteur graphique risque d'être trop petites pour que le code de catégorie "
 "soit visible."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -38676,11 +40537,6 @@ msgstr ""
 "Nom de la colonne de définition de couleur (pour l'utilisation d'un drapeau -"
 "a)"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "La colonne de définition de couleur n'est pas spécifiée."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -38690,7 +40546,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Epaisseur de ligne"
 
@@ -39292,41 +41148,41 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Coordonnées invalides : %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Afficher les informations sur le moniteur actif"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 #, fuzzy
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Afficher le rectangle écran"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 #, fuzzy
 msgid "Display screen dimensions (width, height)"
 msgstr "Afficher les dimensions de l'écran"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 #, fuzzy
 msgid "Display active frame rectangle"
 msgstr "Afficher le rectangle écran"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Afficher les dimensions de l'écran"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "Afficher le rectangle écran"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -39601,15 +41457,6 @@ msgstr "Alignement du texte"
 msgid "Line spacing"
 msgstr "Espacement des lignes"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "Chemin du fichier VTK en sortie"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Fichier source"
@@ -39678,7 +41525,7 @@ msgstr "Type de diagramme"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "Type de diagramme"
@@ -39717,6 +41564,11 @@ msgstr "Centrer le diagramme en barres sur un point"
 msgid "Maximum value used for bar plot reference"
 msgstr "Valeur maximale utilisée pour le diagramme en barres"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Crée une sortie 3D"
+
 #: ../display/d.rgb/main.c:58
 #, fuzzy
 msgid ""
@@ -39726,6 +41578,11 @@ msgstr ""
 "Afficher trois couches rasters spécifiées par l'utilisateur comme calques "
 "rouge, vert, bleu superposés dans le moniteur actif."
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -39774,14 +41631,7 @@ msgstr ""
 "Utiliser un sous-ensemble de l'intervalle des valeurs de la carte pour la "
 "légende (min, max)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Afficher également les paramètres 3D"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -39883,11 +41733,12 @@ msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 "utilisation=%s hors de l'intervalle [%.3f, %.3f]. (étendre à l'intervalle= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Rien à dessiner! (pas de catégories liées aux étiquettes?)"
 
@@ -39901,37 +41752,93 @@ msgstr "Affiche une échelle graphique dans le moniteur GRASS"
 msgid "North arrow style"
 msgstr "Afficher seulement une flêche Nord"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Les coordonnées écran pour le coin supérieur gauche de l'étiquette ([0,0] "
 "est le coin supérieurgauche du cadre graphique)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Couleur de remplissage des entités surfaciques"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Affiche seulement une échelle graphique"
@@ -39949,7 +41856,7 @@ msgstr "Ligne du fichier raster introuvable\n"
 msgid "Could not read symbol \"%s\""
 msgstr "Impossible de lire <%s>"
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -39957,66 +41864,66 @@ msgstr ""
 "Tracer des flèches représentant la direction d'aspect des cellules pour une "
 "couche rastercontenant des données d'aspect."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Nom de la couche raster d'aspect à afficher"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Nom de la couche raster d'aspect existante"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Couleur utilisée pour tracer les flèches"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Couleur utilisée pour tracer les flèches"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Couleur pour tracer les X (valeurs Null)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Couleur pour afficher les informations manquantes"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Tracer une flèche sur chaque chaque énième cellule de la grille"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 "Couche raster contenant les valeurs utilisées pour la longueur des flèches"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Facteur d'échelle pour les flèches (cartes de magnitude)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "Valeur illégale pour le facteur d'échelle"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "Valeur illégale pour le facteur de saut"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "La magnitude n'est gérée que pour les couches GRASS d'aspect"
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 #, fuzzy
 msgid "Scale option requires magnitude_map"
 msgstr "L'option échelle requiert une couche de magnitude"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Problème de lecture du fichier d'intervalle de valeurs"
@@ -40309,61 +42216,46 @@ msgstr ""
 "matrice de séparation des classes\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "couche vecteur <%s> introuvable"
-
-# c-format
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "sous-groupe <%s> non trouvé"
-
 # c-format
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "La couche raster [%s] existe dans le groupe."
 
 # c-format
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "%s - couche raster non trouvée"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Le sous-groupe [%s] ne contient aucun fichier"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Le sous-groupe [%s] ne contient qu'un fichier"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Le sous-groupe doit avoir au moins 2 fichiers pour pouvoir exécuter %s"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Impossible d'ouvrir le fichier de signatures."
 
 # c-format
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, fuzzy, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "** <%s> a trop de signatures (le plafond est 255)"
@@ -40446,40 +42338,55 @@ msgstr "Nombre minimum de pixels dans une classe"
 msgid "Name for output file containing final report"
 msgstr "Nom du fichier en sortie contenant le rapport final"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "couche vecteur <%s> introuvable"
+
+# c-format
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "sous-groupe <%s> non trouvé"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 "\n"
 "<%s> -- nombre illégale de classes initiales"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 "\n"
 "<%s> -- valeur(s) illégale(s) d'intervalle d'échantillonnage"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Valeur d'itérations illégale (%s)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 "\n"
 "<%s> -- valeur illégale de convergence"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 "\n"
 "<%s> -- valeur illégale de séparation"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr ""
@@ -40487,12 +42394,12 @@ msgstr ""
 "<%s> -- valeur illégale de min_size"
 
 # c-format
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
@@ -40500,136 +42407,136 @@ msgstr ""
 "\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Secteur : %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Jeu de données : \t%s\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Groupe: %s\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Sous-groupe: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
 # c-format
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Fichier signature résultat : %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Région\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr " Nord: %-10.3f    Est: %-10.3f\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr " Sud: %-10.3f    Ouest: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Res:   %12.2f  Res:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr " Lignes:  %12d  Colonnes: %12d  Cellules: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Masque: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Paramètres du cluster\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr "  Nombre de classes initiales: \t%d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr "[à partir du fichier de signature %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "Taille minimum de classe :    \t%d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "Séparation minimum entre classes:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Pourcentage de convergence:           %f\n"
 
 # c-format
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "  Nombre maximum d'itérations: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "Intervalle d'échantillonnage en ligne: \t\t%d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "Intervalle d'échantillonnage en colonne: \t\t%d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Lecteur du fichier raster..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 #, fuzzy
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 "Mémoire insuffisante. Rééxécuter en choisissant un échantillon plus petit."
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Taille de l'échantillon : %d points\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 #, fuzzy
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
@@ -40637,7 +42544,7 @@ msgstr ""
 "Points échantillonnées insuffisants. Rééxécuter en choisissant un plus large "
 "échantillon."
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 #, fuzzy
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
@@ -40645,38 +42552,38 @@ msgstr ""
 "Echantillon insuffisant de points de données non-nuls. Vérifiez votre région "
 "courante (et le masque appliqué)"
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## résultats finaux #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d classes (convergence=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 "Impossible d'écrire le fichier de signature <%s> pour le groupe <%s>, sous-"
 "groupe <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 "\n"
 "#################### CLASSES ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d classes, %.2f%% points stables\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -41021,8 +42928,8 @@ msgid "radiance"
 msgstr "Variance"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Résolution"
@@ -41407,32 +43314,32 @@ msgstr "La couche raster [%s] n'existe pas"
 msgid "group <%s> references the following subgroups\n"
 msgstr "Le sous-groupe [%s] ne contient aucun fichier"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Nom du relief aléatoire à produire"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Résolution"
 
 # c-format
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Couche raster de terrain (MNT)"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Nom de la couche qui contiendra la surface fractale"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr ""
@@ -41441,330 +43348,374 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Nom de la couche source"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Nom de la couche raster plane à créer."
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "couche raster de direction à créer"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Nombre de cadres de l'animation"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "Nombre de cadres de l'animation"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -41988,7 +43939,7 @@ msgstr "Couche d'apprentissage de vérité terrain"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Nombre minimum de pixels dans une classe"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Nombre invalide d'étapes: %s"
@@ -42372,110 +44323,116 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Mémoire insuffisante"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Erreur de lecture de la couche Teinte"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Erreur lors de la lecture du fichier dbmscap\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Erreur de lecture des cellules de données"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Nombre de points à créer"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "région <%s> non trouvée"
+
+# c-format
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Écriture %s..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Traitement des entités surfaciques ainput..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 "La taille de la région est plus petite que minreg, rien n'a été affiché."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "le fichier dig_att existe déjà."
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Résolution"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Erreur de lecture de la couche Teinte"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Erreur lors de la lecture du fichier dbmscap\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Erreur de lecture des cellules de données"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Nombre de points à créer"
-
-# c-format
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Écriture %s..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -42553,71 +44510,88 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "2 couches doivent être spécifiées"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Impossible de fermer la couche de relief"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Police invalide : %s"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Secteur %s créé!"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Secteur %s créé!"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Secteur %s créé!"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s - couche raster non trouvée"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Création des couches rasters %i\n"
 
 # c-format
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "%s - couche raster non trouvée"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Nombre invalide d'étapes: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Nombre invalide d'étapes: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "région <%s> non trouvée"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -42710,7 +44684,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 "Nom de la couche raster de sortie"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -42770,7 +44744,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "%s - trop de fichiers patch. Seul(s) %d autorisé(s)"
@@ -43652,51 +45626,55 @@ msgstr "Groupe [%s] non trouvé"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Secteur %s créé!"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Echec de la saisie en entrée"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Nom de la couche en sortie"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Coordonnées pour la requête"
@@ -44011,6 +45989,10 @@ msgstr "Nombre de points d'interpolation"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 #, fuzzy
 msgid ""
@@ -44441,12 +46423,36 @@ msgstr "Titre du fichier raster de sortie"
 #~ "DATE)"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Impossible de créer le segment de fichier %s"
+#~ msgid "<%s> already exists"
+#~ msgstr "ERREUR: <%s> existe déjà\n"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Impossible de créer le segment de fichier %s"
+#~ msgid "<%s> already compressed"
+#~ msgstr "Surface presque terminée."
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "%s : pas de données points trouvées"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Couche à laquelle ajouter la colonne"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Couche à laquelle ajouter la colonne"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Code de couche"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Coordonnées du point germe"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Ne pas créer de table attributaire"
 
 #, fuzzy
 #~ msgid "time series"
@@ -44492,74 +46498,6 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgid "Number of quartals to use"
 #~ msgstr "Nombre de cadres de l'animation"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Nom du raster en entrée contenant les laltitudes [degrés décimaux]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Nom de la couche en entrée contenant les coûts de rugosité"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Couche raster en sortie pour le rayonnement diffus [W.m-2] (mode 1) ou "
-#~ "l'irradiation diffuse [Wh.m-2.day-1] (mode 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Couche raster en sortie pour le rayonnement réfléchi [W.m-2] (mode 1) ou "
-#~ "l'irradiation réfléchie [Wh.m-2.day-1] (mode 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Fichier raster en sortie pour le rayonnement solaire [W.m-2] (mode 1) ou "
-#~ "l'irradiation [Wh.m-2.day-1] (mode 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nom du fichier raster source"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nom de la couche raster d'altitude (mètres)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Couche raster en sortie pour le rayonnement réfléchi [W.m-2] (mode 1) ou "
-#~ "l'irradiation réfléchie [Wh.m-2.day-1] (mode 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Fichier raster en sortie pour le rayonnement solaire [W.m-2] (mode 1) ou "
-#~ "l'irradiation [Wh.m-2.day-1] (mode 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Nombre de points d'interpolation"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
-
 # c-format
 #~ msgid "Location: %s\n"
 #~ msgstr "Secteur : %s\n"
@@ -44579,24 +46517,29 @@ msgstr "Titre du fichier raster de sortie"
 #~ "%d classes, %.2f%% points stables\n"
 
 #, fuzzy
+#~ msgid "Subregion"
+#~ msgstr "Région\n"
+
+#, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Alignement du texte"
 
+# c-format
 #, fuzzy
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "région <%s> non trouvée"
+#~ msgid "Could not rewind input file"
+#~ msgstr "Impossible d'ouvrir le fichier ascii : [%s]"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "couche de sortie"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Nom d'une couche raster"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "couche d'indice topographique ln(a/tan(beta))"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "ERREUR: <%s> existe déjà dans le jeu de données <%s>\n"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Nom d'une couche raster"
+#~ msgid "output map <%s> exists"
+#~ msgstr "couche de sortie"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Longueur de page (défaut : %d lignes)"
@@ -44604,6 +46547,9 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Largeur de page (défaut : %d caractères)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
+
 #, fuzzy
 #~ msgid ""
 #~ "\n"
@@ -44631,6 +46577,14 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "[%s] non trouvé"
 
 #, fuzzy
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "région <%s> non trouvée"
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Ne pas tenir compte de la projection (utiliser celle du Secteur)"
+
+#, fuzzy
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -44648,6 +46602,30 @@ msgstr "Titre du fichier raster de sortie"
 #~ "Vous pouvez utiliser le drapeau -o de %s pour sauter cette vérification.\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Impossible de créer le segment de fichier %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "convertit toutes les anciennes couches vectorielles GRASS (versions "
+#~ "antérieures à 5.7) du jeu de données courant au format récent"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr ""
 #~ "Nom de la couche raster à partir de laquelle calculer les statistiques"
@@ -44683,16 +46661,8 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "Sauvegarder cadre graphique actif"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "ERREUR: <%s> existe déjà dans le jeu de données <%s>\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "convertit toutes les anciennes couches vectorielles GRASS (versions "
-#~ "antérieures à 5.7) du jeu de données courant au format récent"
+#~ msgid "OGR datasource name"
+#~ msgstr "nom de la base de donnée"
 
 #, fuzzy
 #~ msgid "No flag given"
@@ -44700,181 +46670,42 @@ msgstr "Titre du fichier raster de sortie"
 
 # c-format
 #, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Création des couches rasters %i\n"
-
-# c-format
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Impossible de lire <%s>"
-
-# c-format
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d catégories chargées depuis la table"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Veuillez spécifier une colonne z"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
-
-#, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Valeur invalide de scalex"
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Veuillez spécifier une colonne z"
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Veuillez spécifier une colonne z"
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Veuillez spécifier une colonne z"
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Veuillez spécifier une colonne z"
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
-
-#, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr ""
-#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
-#~ "qu'un seul."
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Impossible de créer le fichier de cellules pour [%s]"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
+#~ msgid "Env file not found"
+#~ msgstr "fichier de cellules non trouvé\n"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr ""
-#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
+#~ msgid "PID file not found"
+#~ msgstr "fichier de cellules non trouvé\n"
 
 #, fuzzy
-#~ msgid "No graphics device selected. Use d.mon to select graphics device."
-#~ msgstr "Aucune sortie graphique n'est sélectionnée"
+#~ msgid "Command file not found"
+#~ msgstr "fichier de cellules non trouvé\n"
 
+# c-format
 #, fuzzy
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Couleur du texte, une couleur GRASS standard ou triplet R:G:B"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Création des couches rasters %i\n"
 
 #, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "Afficher les données vectorielles GRASS dans le moniteur actif"
+#~ msgid "Name for output image"
+#~ msgstr "Nom du fichier de sortie"
 
+# c-format
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Couleur pour le texte de la carte"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Impossible de lire <%s>"
 
+# c-format
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Couleur pour tracer la grille ou aucune couleur (\"none\")"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d catégories chargées depuis la table"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr ""
 #~ "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 #~ "Nom de la couche raster cible\n"
@@ -44882,8 +46713,8 @@ msgstr "Titre du fichier raster de sortie"
 #~ "Nom de la couche raster de sortie"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Erreur de discrétisation en unités carte"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Donne aussi la distance maximum d'ESSAIMAGE DU FOYER"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -45035,7 +46866,7 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "Utilisez des crochets (type notation mathématique) dans la légende"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr ""
 #~ "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
 #~ "Nom de la couche raster cible\n"
@@ -45043,12 +46874,38 @@ msgstr "Titre du fichier raster de sortie"
 #~ "Nom de la couche raster de sortie"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Donne aussi la distance maximum d'ESSAIMAGE DU FOYER"
+#~ msgid "Default: input"
+#~ msgstr "Erreur de discrétisation en unités carte"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Afficher"
+#~ msgid "No graphics device selected. Use d.mon to select graphics device."
+#~ msgstr "Aucune sortie graphique n'est sélectionnée"
+
+#, fuzzy
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "Afficher les données vectorielles GRASS dans le moniteur actif"
+
+#, fuzzy
+#~ msgid "Text color or \"none\""
+#~ msgstr "Couleur du texte"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Couleur pour le texte de la carte"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Couleur pour tracer la grille ou aucune couleur (\"none\")"
+
+#, fuzzy
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Couleur du texte, une couleur GRASS standard ou triplet R:G:B"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "Type de couche vecteur"
 
 #, fuzzy
 #~ msgid ""
@@ -45057,27 +46914,56 @@ msgstr "Titre du fichier raster de sortie"
 #~ "Permet la création et/ou la modification des fichiers de gestion des "
 #~ "couches rasters"
 
-# c-format
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Échec d'ouverture du fichier dig."
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "le fichier dig_att n'existe pas."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Échec d'ouverture du fichier dig_att."
+
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Impossible de créer la couche raster <%s>"
+#~ msgid "Attaching categories..."
+#~ msgstr "Rattachement des catégories...\n"
+
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr ""
+#~ "Échec lors de l'attachement de l'attribut (catégorie %d) à la ligne."
 
-# c-format
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Impossible de créer le fichier de cellules pour [%s]"
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "ATTENTION: ligne %d libellé: %d correspond à un autre libellé: %d."
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Mémoire insuffisante pour az"
+#~ msgid "Writing new file..."
+#~ msgstr "Écriture du nouveau fichier...\n"
 
 #, fuzzy
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "SYSTEM_ERROR: OLD_T_NEW avec un mauvais type de code %x"
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "%-5d points et lignes écrits dans le fichier de sortie.\n"
 
 #, fuzzy
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "SYSTEM_ERROR: NEW_T_OLD Mauvais code de type %x"
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "%-5d centroïdes écrits dans le fichier de sortie.\n"
+
+#, fuzzy
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Import du fichier E00 en couche vectorielle"
+
+#, fuzzy
+#~ msgid "Endian of input vector map"
+#~ msgstr "Nom de la couche vecteur 2D source"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "Aucune étiquette de catégorie (dig_cats) trouvée, aucune table créée.\n"
+
+# c-format
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "impossible d'ouvrir le fichier dig_att <%s>\n"
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -45187,160 +47073,47 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "%-5d catégories lues en mémoire.\n"
 
 #, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "Aucune étiquette de catégorie (dig_cats) trouvée, aucune table créée.\n"
-
-# c-format
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "impossible d'ouvrir le fichier dig_att <%s>\n"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Échec d'ouverture du fichier dig."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "le fichier dig_att n'existe pas."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Échec d'ouverture du fichier dig_att."
-
-#, fuzzy
-#~ msgid "Attaching categories..."
-#~ msgstr "Rattachement des catégories...\n"
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr ""
-#~ "Échec lors de l'attachement de l'attribut (catégorie %d) à la ligne."
-
-#, fuzzy
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "ATTENTION: ligne %d libellé: %d correspond à un autre libellé: %d."
-
-#, fuzzy
-#~ msgid "Writing new file..."
-#~ msgstr "Écriture du nouveau fichier...\n"
-
-#, fuzzy
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "%-5d points et lignes écrits dans le fichier de sortie.\n"
-
-#, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "%-5d centroïdes écrits dans le fichier de sortie.\n"
-
-#, fuzzy
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Import du fichier E00 en couche vectorielle"
-
-#, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "Nom de la couche vecteur 2D source"
-
-#, fuzzy
-#~ msgid "Unknown raster map type"
-#~ msgstr "Écrire uniquement le type de couche"
-
-#, fuzzy
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Taille de l'étiquette (pixels)"
-
-#, fuzzy
-#~ msgid "Can't call bad function"
-#~ msgstr "Allocation métrique"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "SYSTEM_ERROR: OLD_T_NEW avec un mauvais type de code %x"
 
 #, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Erreur de lecture de la couche %s"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "SYSTEM_ERROR: NEW_T_OLD Mauvais code de type %x"
 
 #, fuzzy
 #~ msgid "One or more coordinates"
 #~ msgstr "Facteur d'échelle pour les coordonnées x"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Mémoire insuffisante pour adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Mémoire insuffisante pour ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Mémoire insuffisante pour adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Mémoire insuffisante pour adyy"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Mémoire insuffisante pour adxy"
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "Impossible de créer les données quad"
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "Impossible de créer la quadfunc"
-
-#~ msgid "Cannot create tree"
-#~ msgstr "Impossible de créer l'arborescence"
-
-#~ msgid "Cannot create tree info"
-#~ msgstr "Impossible de créer l'information d'arborescence"
-
-#~ msgid "sites"
-#~ msgstr "sites"
-
-#, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr ""
-#~ "Convertit le fichier GRASS ascii ou le fichier points en couche "
-#~ "vectorielle binaire"
-
 #, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "fichier 3dview <%s> non trouvé"
-
-#, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Echec pour définir le format du fichier de sites"
+#~ msgid "Name of elevation map"
+#~ msgstr "Nom de la couche raster d'altitude"
 
-#, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Impossible d'allouer de la mémoire pour les pointeurs de ligne"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Chaîne de caractère pour les cellules sans valeurs"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
 #~ msgstr ""
-#~ "\n"
-#~ "On transforme à présent le vecteur ...\n"
+#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
 
 # c-format
-#, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d points  écrits dans la couche vecteur"
-
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "nom de la couche utilisée pour l'intensité"
-
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Nom de la couche utilisée pour la saturation"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Métrique inconnue : [%s]"
 
 #, fuzzy
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "Importer les fichiers pays US-NGA GEOnet Names Server (GNS) dans une "
-#~ "couche de points vectoriels GRASS"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Erreur de lecture du fichier cats de <%s>"
 
 #, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Fichier GNS décompressé provenant de NGA (avec extension .txt)"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Erreur de lecture du fichier colr de <%s>"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Raster d'altitude pour extraire les valeurs de hauteur"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Chaîne de caractère pour les cellules sans valeur"
 
 #, fuzzy
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "Fichier raster ASCII à importer"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Utilitaire d'interpolation de reliefs pour couches raster."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -45359,16 +47132,18 @@ msgstr "Titre du fichier raster de sortie"
 #~ "représente l'altitude combinée avec une couche raster dont la valeur "
 #~ "correspond au coût de rugosité."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "nom de la couche utilisée pour l'intensité"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Nom de la couche utilisée pour la saturation"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Nom de la couche verte créée"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Nom de la couche bleue créée"
 
-#, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Utilitaire d'interpolation de reliefs pour couches raster."
-
 #~ msgid "Surface generation program."
 #~ msgstr "Programme de génération de relief."
 
@@ -45391,56 +47166,15 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr[0] "Interpolation de la couche raster <%s>... ligne %d ..."
 #~ msgstr[1] "Interpolation de la couche raster <%s>... ligne %d ..."
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "Projection lat/long non gérée pour le moment."
-
-# c-format
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Secteur : %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "Afficher l'index"
-
-#, fuzzy
-#~ msgid "Name of elevation map"
-#~ msgstr "Nom de la couche raster d'altitude"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Chaîne de caractère pour les cellules sans valeurs"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
-
-# c-format
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Métrique inconnue : [%s]"
-
-#, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Erreur de lecture du fichier cats de <%s>"
-
-#, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Erreur de lecture du fichier colr de <%s>"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Chaîne de caractère pour les cellules sans valeur"
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "Couche Z (altitude) en sortie"
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "couche d'aspect en sortie (ou fy)"
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "Projection lat/long non gérée pour le moment."
+
 #, fuzzy
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "Nom de la couche raster cible"
@@ -45470,15 +47204,24 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "Indicateur de valeur vide ('null')"
 
 #, fuzzy
-#~ msgid "High resolution panchromatic image"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
 #~ msgstr ""
-#~ "Transformée de Brovey pour fusionner les canaux multispectraux et "
-#~ "panchromatique à haute résolution"
+#~ "Importer les fichiers pays US-NGA GEOnet Names Server (GNS) dans une "
+#~ "couche de points vectoriels GRASS"
 
-# c-format
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "impossible d'ouvrir le fichier pour %s"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Fichier GNS décompressé provenant de NGA (avec extension .txt)"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Raster d'altitude pour extraire les valeurs de hauteur"
+
+#, fuzzy
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "Fichier raster ASCII à importer"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -45511,6 +47254,180 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "Titre du fichier raster de sortie"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Calcule des statistiques univariées à partir des cellules non vides d'une "
+#~ "couche raster."
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Couleur pour tracer la grille ou aucune couleur (\"none\")"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Couleur pour tracer la grille ou aucune couleur (\"none\")"
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Couleur pour afficher les informations manquantes"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Couleur pour tracer la grille ou aucune couleur (\"none\")"
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "%s va stocker ces valeurs à la place de la zone.\n"
+
+# c-format
+#, fuzzy
+#~ msgid "Invalid distance"
+#~ msgstr "Etiquette date&heure invalide"
+
+#~ msgid "Layer number"
+#~ msgstr "Code de couche"
+
+# c-format
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Secteur : %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "Afficher l'index"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Veuillez spécifier une colonne z"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Valeur invalide de scalex"
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
+
+#, fuzzy
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Veuillez spécifier une colonne z"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Veuillez spécifier une colonne z"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Veuillez spécifier une colonne z"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Veuillez spécifier une colonne z"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Afficher"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "L'une des options, soit texte soit -c, doit être sélectionnée."
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr ""
+#~ "Transformée de Brovey pour fusionner les canaux multispectraux et "
+#~ "panchromatique à haute résolution"
+
+# c-format
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "impossible d'ouvrir le fichier pour %s"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr ""
 #~ "#-#-#-#-#  grassmods_fr.po (grassmods_fr)  #-#-#-#-#\n"
@@ -45531,28 +47448,113 @@ msgstr "Titre du fichier raster de sortie"
 #~ msgstr "Aucune couche créée en sortie"
 
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr ""
-#~ "Calcule des statistiques univariées à partir des cellules non vides d'une "
-#~ "couche raster."
-
-#, fuzzy
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Couleur pour tracer la grille ou aucune couleur (\"none\")"
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "Construire l'histogramme sans afficher de détails"
 
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Mémoire insuffisante pour adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Mémoire insuffisante pour ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Mémoire insuffisante pour adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Mémoire insuffisante pour adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Mémoire insuffisante pour adxy"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Impossible de créer les données quad"
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Impossible de créer la quadfunc"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "Impossible de créer l'arborescence"
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "Impossible de créer l'information d'arborescence"
+
+# c-format
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "%s va stocker ces valeurs à la place de la zone.\n"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Impossible de créer le fichier de cellules pour [%s]"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Mémoire insuffisante pour az"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr ""
+#~ "les drapeaux -B & - C sont mutuellement exclusifs. Veuillez n'en choisir "
+#~ "qu'un seul."
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr ""
+#~ "L'une des options \"color\", \"rast\" OU \"rules\" DOIT être spécifiée!"
+
+#~ msgid "sites"
+#~ msgstr "sites"
+
+#, fuzzy
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr ""
+#~ "Convertit le fichier GRASS ascii ou le fichier points en couche "
+#~ "vectorielle binaire"
+
+#, fuzzy
+#~ msgid "Site file <%s> not found"
+#~ msgstr "fichier 3dview <%s> non trouvé"
+
+#, fuzzy
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Echec pour définir le format du fichier de sites"
+
+#, fuzzy
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Impossible d'allouer de la mémoire pour les pointeurs de ligne"
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr ""
+#~ "\n"
+#~ "On transforme à présent le vecteur ...\n"
 
 # c-format
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "Etiquette date&heure invalide"
+#~ msgid "%d sites written."
+#~ msgstr "%d points  écrits dans la couche vecteur"
 
-#~ msgid "Layer number"
-#~ msgstr "Code de couche"
+#, fuzzy
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Erreur de lecture de la couche %s"
+
+#, fuzzy
+#~ msgid "Can't call bad function"
+#~ msgstr "Allocation métrique"
+
+# c-format
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Impossible de créer la couche raster <%s>"
+
+#, fuzzy
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Taille de l'étiquette (pixels)"
+
+#, fuzzy
+#~ msgid "Unknown raster map type"
+#~ msgstr "Écrire uniquement le type de couche"
diff --git a/locale/po/grassmods_it.po b/locale/po/grassmods_it.po
index b36f4cd..2d0887f 100644
--- a/locale/po/grassmods_it.po
+++ b/locale/po/grassmods_it.po
@@ -14,7 +14,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_it\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-03-29 13:25+0100\n"
 "Last-Translator: Luca Delucchi <lucadeluge at gmail.com>\n"
 "Language-Team: Italian <grass-translations at lists.osgeo.org>\n"
@@ -258,6 +258,7 @@ msgstr "raster <%s> non trovato"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -492,6 +493,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr "Database SQLITE occupato, sto già attendendo da %d secondi..."
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Errore nella chiusura del file ascii"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -633,28 +639,28 @@ msgid "Unable to open database:"
 msgstr "Impossibile aprire il database: "
 
 # FINIRE
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 msgid "SQLite database connection is still busy"
 msgstr "La connessione al database SQLite è ancora impegnata"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> esiste già"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Non è possibile creare la tabella: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "Mapset <%s> non trovato"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -665,6 +671,11 @@ msgstr "Non è possibile creare l'indice"
 msgid "Unable grant on table:"
 msgstr "Impossibile copiare la tabella"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "impossibile aprire <%s>"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -795,7 +806,7 @@ msgstr "Impossibile aprire il database <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -874,17 +885,17 @@ msgstr "nome"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Impostazioni"
 
@@ -919,39 +930,39 @@ msgstr "Mostra i parametri della connessione in uso ed esce"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -994,7 +1005,7 @@ msgstr "Visualizza tutti i driver del database."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1024,7 +1035,7 @@ msgstr "Non riesco a descrivere la tabella"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1119,10 +1130,10 @@ msgid "Unable to open database <%s>"
 msgstr "Impossibile aprire il database <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1313,11 +1324,11 @@ msgstr "fallito"
 msgid "succeeded"
 msgstr "successo"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Impossibile aprire il file per <%s> per la scrittura"
@@ -1351,10 +1362,10 @@ msgstr "Nome colonna degli attributi da usare per l'opzione 'query'"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Formato"
 
@@ -1364,7 +1375,7 @@ msgid "Vertical record separator (requires -v flag)"
 msgstr "Percentuale da calcolare (richiede il flag -e)"
 
 # output/uscita
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1372,7 +1383,7 @@ msgstr "Percentuale da calcolare (richiede il flag -e)"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Nome per il file di output (se omesso o \"-\" l'uscita è sullo stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Non include i nomi delle colonne nell'output"
 
@@ -1380,7 +1391,7 @@ msgstr "Non include i nomi delle colonne nell'output"
 msgid "Describe query only (don't run it)"
 msgstr "Descrive solo la query (non la esegue)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Output verticale (invece che orizzontale)"
 
@@ -1433,6 +1444,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Nome del file contenente i comandi SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignora gli errori SQL e continua"
 
@@ -1604,7 +1616,6 @@ msgstr "Ruota diagramma di 90 gradi"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1727,7 +1738,7 @@ msgstr "Non riesco a caricare dati dalla tabella"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1735,9 +1746,9 @@ msgstr "Non riesco a caricare dati dalla tabella"
 msgid "Error in pj_do_proj"
 msgstr "Errore in pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
@@ -1745,7 +1756,7 @@ msgstr ""
 "attuale"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1835,7 +1846,7 @@ msgstr ""
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1881,7 +1892,7 @@ msgstr "Impossibile ottenere informazioni sul layer per la mappa vettoriale"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1894,26 +1905,27 @@ msgstr "Impossibile ottenere informazioni sul layer per la mappa vettoriale"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Impossibile aprire il database <%s> col driver <%s>"
@@ -1923,7 +1935,8 @@ msgid "Column type not supported (must be string)"
 msgstr ""
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2068,13 +2081,13 @@ msgstr ""
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2082,8 +2095,8 @@ msgstr ""
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2126,10 +2139,11 @@ msgstr "visualizzazione"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2143,13 +2157,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2158,6 +2175,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2173,7 +2191,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2193,11 +2211,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2209,27 +2227,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2247,74 +2265,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "raster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2324,6 +2345,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2339,6 +2361,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2357,6 +2380,7 @@ msgid "vector"
 msgstr "vettoriale"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2365,15 +2389,16 @@ msgstr "vettoriale"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2411,7 +2436,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Formato di output non supportato"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "File <%s> creato."
@@ -2966,69 +2991,70 @@ msgid "Vector map <%s> not found"
 msgstr "Mappa vettoriale <%s> non trovata"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Impossibile aprire la mappa vettoriale <%s>"
@@ -3092,12 +3118,13 @@ msgstr ""
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3224,7 +3251,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3387,7 +3414,7 @@ msgid "Area:"
 msgstr "Area\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Sto scrivendo gli attributi"
@@ -3402,7 +3429,7 @@ msgstr "Impossibile selezionare gli attributi per l'area %d"
 msgid "No attribute table for layer %d"
 msgstr "Non è stata trovata nessuna tabella degli attributi"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3415,15 +3442,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Impossibile aprire il database <%s> col driver <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Impossibile assegnare i privilegi sulla tabella <%s>"
@@ -3446,6 +3474,7 @@ msgid ""
 msgstr "Calcolo dei centroidi per le aree in corso..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3454,6 +3483,7 @@ msgid "extract"
 msgstr "File di input"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3464,10 +3494,10 @@ msgstr "Deseleziona"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Tipo di grafico"
@@ -3492,12 +3522,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Attributi"
 
@@ -3516,39 +3545,45 @@ msgstr "Selezione inversa"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3564,7 +3599,10 @@ msgstr "Selezione inversa"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3633,7 +3671,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3680,45 +3718,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3760,11 +3799,11 @@ msgstr "Formato <%s> non supportato"
 msgid "Format <%s> does not support writing"
 msgstr "Formato <%s> non supportato per la scrittura"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3915,9 +3954,9 @@ msgstr "Nome del file di input; o \"-\" per leggere dallo stdin"
 msgid "Name for output file where to save current settings"
 msgstr "Nome del file di output (senza aggiungere l'estensione)"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Elenca i formati supportati ed esce"
 
@@ -3939,7 +3978,7 @@ msgid "Print current status in shell script style"
 msgstr ""
 "Stampa le impostazioni della region corrente (in stile script per la shell)"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "I flag -g e -a sono mutualmente esclusivi"
@@ -3957,18 +3996,18 @@ msgstr ""
 "\"rules\"!"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Visualizza i formati supportati ed esci"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3979,68 +4018,69 @@ msgstr "Visualizza i formati supportati ed esci"
 msgid "network"
 msgstr "Mappa raster risultante"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Trova il percorso più breve in una rete vettoriale."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Tipo di arco"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Layer degli archi"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Tipo di arco"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "Layer dei nodi"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 "Nome del file contenente i punti d'inizio e di fine. Se non sono definiti "
 "legge dallo stdin"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Colonna costo direzione in avanti (o tutte) per gli archi (numero)"
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4052,10 +4092,11 @@ msgstr "Colonna costo direzione in avanti (o tutte) per gli archi (numero)"
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4067,29 +4108,29 @@ msgstr "Colonna costo direzione in avanti (o tutte) per gli archi (numero)"
 msgid "Cost"
 msgstr "Costo"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Colonna costo direzione indietro per gli archi (numero)"
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Colonna costo per i nodi (numero)"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "Distanza massima dalla rete"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4100,21 +4141,57 @@ msgstr ""
 "messaggio d'errore. Per velocizzare il processo è meglio tenere questo "
 "valore più basso possibile."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Nome del filtro file"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Layer/tabella"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "Usa il calcolo geodetico per le location longitudine-latitudine"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 "Disegna sull'output i segmenti originali di input, anziché rappresentare "
 "ogni  percorso con una linea."
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4123,10 +4200,10 @@ msgstr "La proiezione corrente non è longitudine-latitudine"
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4142,8 +4219,8 @@ msgstr "[%d] punti senza categoria (nfield: [%d])"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4172,23 +4249,23 @@ msgstr "Impossibile assegnare i privilegi sulla tabella <%s>"
 msgid "Wrong input format: %s"
 msgstr "Formato in input errato: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "Nessun punto con categoria [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 "Il punto con categoria [%d] non è raggiungibile dal punto con categoria [%d]"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "Il punto  %f,%f  non è raggiungibile dal punto %f,%f"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4197,17 +4274,17 @@ msgstr "Il punto  %f,%f  non è raggiungibile dal punto %f,%f"
 msgid "Cannot insert new record: %s"
 msgstr "Impossibile inserire il nuovo record: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] errori nel formato di input"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "[%d] punti della categoria data mancanti"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "%d destinazione(i) irraggiungibile (inclusi punti fuori della soglia)"
@@ -4218,7 +4295,7 @@ msgstr "%d destinazione(i) irraggiungibile (inclusi punti fuori della soglia)"
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4228,7 +4305,7 @@ msgstr "%d destinazione(i) irraggiungibile (inclusi punti fuori della soglia)"
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "vettore da rimuovere"
@@ -4284,17 +4361,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Impossibile ottenere la lista delle categorie <%s>"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Parametro richiesto <%s> non impostato"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "La mappa vettoriale <%s> esiste già"
@@ -4586,6 +4663,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Nome del file contenente i comandi SQL"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4606,12 +4684,15 @@ msgstr "Nome del file contenente i comandi SQL"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4770,11 +4851,11 @@ msgstr "Layer dev'essere > 0 per 'where'"
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Connessione al database non definita per il layer %d"
@@ -4910,9 +4991,9 @@ msgid "Remove existing color table"
 msgstr "Rimuove la tavola dei colori esistente"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr "Rimuove"
@@ -4974,7 +5055,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4992,8 +5073,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "I flag -g e -a sono mutualmente esclusivi"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5019,6 +5099,7 @@ msgid "Color table exists. Exiting."
 msgstr "La tabella dei colori esiste. Uscita."
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Mappa vettoriale <%s> non è 3D"
@@ -5044,7 +5125,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Tavola dei colori <%s> non trovata"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5053,13 +5134,14 @@ msgstr "Impossibile leggere la tavola dei colori per la mappa raster <%s>"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5090,8 +5172,9 @@ msgstr "Lettura degli elementi in corso ..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5136,7 +5219,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Scrittura del file dei colori in corso..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Impossibile usare la colonna <%s>"
@@ -5193,6 +5276,7 @@ msgid "Point out of range"
 msgstr "nessun punto da triangolare"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5201,15 +5285,17 @@ msgstr "nessun punto da triangolare"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5303,14 +5389,15 @@ msgstr "Visualizza il raster delle altezze dopo il riempimento"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Output"
 
@@ -5502,15 +5589,15 @@ msgstr "Metodo di interpolazione"
 msgid "Input failed"
 msgstr "Input non riuscito"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "fallito"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Spazio nel disco insufficiente -- impossibile scrivere i file"
@@ -5554,9 +5641,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Nessun punto con categoria [%d]"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5664,9 +5751,9 @@ msgstr "Errore nella chiusura del file ascii"
 msgid "3D raster map <%s> created"
 msgstr "Mappa raster <%s> creata."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5677,17 +5764,17 @@ msgstr "Impossibile inserire una nuova regola: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "impossibile aprire <%s>"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Crea un albero di Steiner per la rete e i punti scelti."
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5697,71 +5784,107 @@ msgstr ""
 "modulo viene utilizzato un algoritmo euristico, per cui il risultato può "
 "essere sub-ottimale"
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "Layer dei nodi (usato per i punti terminali)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Colonna dei costi per gli archi (per entrambe le direzioni)"
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 "Categorie dei punti sui punti terminali (il layer è specificato da nlayer)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Numero di punti di steiner (-1 per tutti quelli possibili)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "La tabella <%s> non esiste nel database <%s>"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Numero di città: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Terminali insufficienti (< 2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Numero di punti in input:%d"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Numero di punti di steiner (-1 per tutti quelli possibili)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "impossibile aprire <%s>"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5781,18 +5904,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Importa"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Stampa"
@@ -5823,9 +5948,9 @@ msgstr "Nome della colonna contenente le coordinate y"
 msgid "Name of column containing z coordinate"
 msgstr "Nome della colonna contenente le coordinate z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "Output 3D"
 
@@ -5876,7 +6001,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
@@ -5894,7 +6019,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "la colonna x/y/z deve essere di tipo intero o double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Copia degli attributi in corso ..."
@@ -5920,7 +6045,86 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "scritti %d punti nella mappa vettoriale"
 msgstr[1] "scritti %d punti nella mappa vettoriale"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"La proiezione del dataset sembra non corrispondere a quella della location "
+"corrente.\n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO è:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "Dataset importato PROJ_INFO è:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "La verifica della proiezione verrà ignorata"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"La proiezione del dataset di input e della location corrente sembrano "
+"corrispondere"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "Per il parametro 'spatial' sono richiesti 4 parametri"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Range z non valido"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Opzione '%s' sconosciuta"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5943,7 +6147,7 @@ msgstr[1] "scritti %d punti nella mappa vettoriale"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5951,7 +6155,7 @@ msgstr[1] "scritti %d punti nella mappa vettoriale"
 msgid "statistics"
 msgstr "statistiche"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6595,8 +6799,8 @@ msgstr "Tipo di colonna (%s) non supportata"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Non è possibile leggere la mappa vettoriale"
@@ -6653,12 +6857,12 @@ msgid "Breaking lines..."
 msgstr "Sto rompendo le linee"
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Rimozione dei duplicati in corso..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr ""
 
@@ -6667,11 +6871,11 @@ msgstr ""
 msgid "Merging lines..."
 msgstr "Creazione dei buffer attorno alle linee in corso..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Sto attaccando le isole..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Non è possibile calcolare il centroide dell'area"
 
@@ -6686,12 +6890,13 @@ msgstr "Sto interrogando la mappa vettoriale <%s>"
 msgid "Attribute not found"
 msgstr "Attributo non trovato"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Sto scrivendo i centroidi..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Impossibile inserire un nuovo record: '%s'"
@@ -6768,111 +6973,113 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "raster <%s> non trovato"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr ""
 "Genera una mappa GRASS 2D/3D di punti vettoriali disposti in posizioni "
 "casuali"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Numero di punti da creare"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Non riesco a trovare il file raster %s"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 "Minimo valore di altezza z (necessita del parametro -z o del nome di colonna)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 "Massimo valore di altezza z (necessita del parametro -z o del nome di "
 "colonna)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Nome della colonna contenente le coordinate x"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 msgid "Writes z values to column"
 msgstr ""
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Tipo di tabella colore"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Crea output 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Selezione degli elementi in corso..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Il numero di punti dev'essere > 0 (%d definiti)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d di %d elementi selezionati dalla mappa vettoriale <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Nome della mappa vettoriale esistente"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Non è possibile creare la tabella: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "La tabella dovrebbe contentere solo due colonne"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -6881,7 +7088,7 @@ msgstr ""
 "solo tipi di colonna INTEGER (numeri interi) e DOUBLE PRECISION (precisione "
 "doppia)"
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
@@ -6889,14 +7096,14 @@ msgstr ""
 "La mappa vettoriale di partenza <%s> non contiene punti nella regione "
 "corrente"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
 "La mappa vettoriale di partenza <%s> non contiene punti nella regione "
 "corrente"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Sto generando punti..."
 
@@ -6944,7 +7151,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Nome della mappa raster esistente da interrogare"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Colonna da aggiornare con il risultato della query"
@@ -6958,83 +7165,81 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Visualizza valori medi invece degli intervalli"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Colonna <%s> non trovata"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Colonna <%s> non trovata nella tabella <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Tipo di colonna non supportata"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Il raster è di tipo integer mentre la colonna è di tipo float"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Il raster è di tipo float mentre la colonna è di tipo integer, attenzione "
 "alla possibile perdita di dati!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Lettura degli elementi in corso ..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Non riesco a trovare il file raster %s"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d punti al di fuori della regione corrente non considerati"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "%d punti senza categoria non considerati"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 "Ho assegnato il valore 'NULL' agli ulteriori punti (%d) con categoria %d."
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d categorie caricate dal vettoriale"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d categorie duplicate nel vettoriale"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d categrie caricate dalla tabella"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d categorie dal vettoriale mancano nella tabella"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d errori di aggiornamento"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d record aggiornati"
@@ -7042,14 +7247,14 @@ msgstr "%d record aggiornati"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "raster, statistiche"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7141,7 +7346,7 @@ msgstr ""
 "La mappa vettoriale <%s> non è nel mapset dell'utente e non può essere "
 "aggiornata"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7199,6 +7404,150 @@ msgstr "Nessun record per la categoria [%d]"
 msgid "%d records updated"
 msgstr "%d record aggiornati"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Connessione al database non definita\n"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "driver pg: colonna '%s', di tipo %d non supportata"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Nessun record per la cat = %d"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Nessun record per la cat = %d"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Colonna <%s> non trovata"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Generare punti vettoriali come punti 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Converte vettore OGR in vettore GRASS"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Numero del layer (from)"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "Nome del raster"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Numero di layer"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Numero di layer"
+
+#: ../vector/v.out.lidar/main.c:517
+msgid "Layer number where RGB color is stored as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "La colonna dev'essere di tipo numerico"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Colonne"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Nome della colonna"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+msgid "Color definition in R:G:B form"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Non è possibile leggere il colore"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Scala da applicare ai dati z"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Scala da applicare ai dati z"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Limita l'importazione alla regione corrente"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Nome del filtro file"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7236,6 +7585,12 @@ msgstr "Errore nella colonna di definizione del colore (%s), con cat %d"
 msgid "Label column was not specified, no labels will be written"
 msgstr "Etichette di colonne non specificate, nessuna etichetta sarà scritta"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Colonna <%s> non trovata"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7266,45 +7621,52 @@ msgstr "Impossibile usare la colonna <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d di %d elementi selezionati dalla mappa vettoriale <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Passata %d di %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "Problema nel processare aree dal vettoriale <%s>, proseguo..."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "Problema nel processare linee dal vettoriale <%s>, proseguo..."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Scrittura della mappa raster in corso..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Creazione dei file di supporto per la mappa raster in corso..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "Il colore può essere aggiornato dal database solo se use=attr"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Aree convertite: %d of %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Punti/linee convertite: %d of %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7371,15 +7733,17 @@ msgstr ""
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Impossibile leggere la riga del raster"
@@ -7420,7 +7784,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Opzione '%s' sconosciuta"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Lettura delle aree in corso ..."
 
@@ -7438,11 +7802,16 @@ msgstr "Impossibile usare la colonna specificata"
 msgid "Get area %d failed"
 msgstr "Fallito ad ottenere l'area %d"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Fallito nell'importare file DXF!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr "Aree senza centroide (OK per isole)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Centroidi di area senza categoria"
 
@@ -7472,11 +7841,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Nome della colonna del grado di centralità (degree centrality)"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Colonne"
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr "Nome della colonna della closeness centrality (vicinanza) "
@@ -7647,25 +8011,25 @@ msgstr ""
 msgid "Incompatible types"
 msgstr "Tipi incopatibili"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr ""
 "Copiatura della tabella degli attributi sulla mappa di output non riuscita"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 "Crea un ciclo connettendo i nodi dati (TSP - problema del commesso "
 "viaggiatore)."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7673,79 +8037,85 @@ msgstr ""
 "Da notare che TSP è NP-hard, e in questo modulo viene utilizzato un "
 "algoritmo euristico per cui il ciclo creato può essere sub-ottimale"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr "Categorie dei punti ('città') sui nodi (il layer è definito da nlayer)"
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "Layer dei nodi (usato per le città)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Colonna costo direzione indietro per gli archi (numero)"
 
 # output/uscita
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Nome per il file di output (se omesso o \"-\" l'uscita è sullo stdout)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr "Categorie dei punti ('città') sui nodi (il layer è definito da nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "La tabella <%s> non esiste nel database <%s>"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Numero di città: [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Non ci sono abbastanza città (< 2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Sto creando centroidi...."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "Nessun punto con categoria [%d]"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Nessun record per il punto (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Il nodo di destinazione [%d] non è raggiungibile dal nodo [%d]"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 #, fuzzy
 msgid "Searching for the shortest cycle..."
 msgstr "ricerca del valore massimo di bit depth"
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Impossibile aprire il file per <%s> per la scrittura"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "linea"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Divide la rete in isolinee di costo."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7756,7 +8126,7 @@ msgstr ""
 "centro). l nodo definito come centro dev'essere aperto (costi >= 0). I costi "
 "del centro vengono utilizzati nel calcolo."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7765,49 +8135,49 @@ msgstr ""
 "Categorie dei centri (punti o nodi) ai quali dev'essere assegnata la rete, "
 "il layer per queste categorie è dato dall'opzione nlayer"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Costi per le isolinee"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Numero di centri: %d (nlayer %d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Calcolo dei costi dal centro %d in corso ..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 
@@ -8017,14 +8387,15 @@ msgstr "%d punti senza categoria non considerati"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Nome del file in output o del dispositivo GPS"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Se non è dato o '-' legge dallo standard input"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8048,9 +8419,13 @@ msgstr "Se non è dato o '-' legge dallo standard input"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8111,7 +8486,7 @@ msgstr "Separatore di campo (modalità punti)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Numero di cifre significative (solo valori a virgola mobile)"
 
@@ -8180,7 +8555,7 @@ msgstr ""
 "Impossibile ottenere informazioni sul layer per la mappa vettoriale <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8278,9 +8653,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Impossibile aprire il file di input <%s>. Errore %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Impossibile creare l'indice per la tabella <%s>, chiave <%s>"
@@ -8860,7 +9236,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Layer %d"
@@ -8881,7 +9257,7 @@ msgstr "Non è possibile calcolare la matrice inversa"
 msgid "Resolving conflicts..."
 msgstr "Risoluzione dei conflitti in corso ..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Mappa raster risultante"
@@ -8910,199 +9286,203 @@ msgid "Performs vector based generalization."
 msgstr "Generalizzazione vettoriale"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Generalizzazione vettoriale"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Algoritmo di interpolazione delle spline"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Generalizzazione vettoriale..."
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Numero di iterazioni"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Impossibile copiare gli attributi"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Metodo sconosciuto"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "raster <%s> non trovato"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Non è possibile creare la mappa vettoriale <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr "Generalizzazione vettoriale..."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Si sta usando la risoluzione [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9178,8 +9558,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Colore del testo"
 
@@ -9192,13 +9572,13 @@ msgstr "Colore del testo"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Colori"
@@ -9394,14 +9774,14 @@ msgstr "ricerca del valore massimo di bit depth"
 msgid "Cleaning output topology"
 msgstr "Strumento di pulizia"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Rimozione dei duplicati in corso..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Rimozione dei duplicati in corso..."
@@ -9452,14 +9832,6 @@ msgstr "Lettura delle aree in corso ..."
 msgid "Constructing 3D hull..."
 msgstr "Conversione in corso ..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9543,7 +9915,9 @@ msgstr ""
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9948,6 +10322,192 @@ msgstr "Errore nella lettura del valore dell'attributo '%s'"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "raster <%s> non trovato"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d raggruppato."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Specifica "
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Nome di un file vettoriale in output"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Distanza massima dalla rete"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Numero minimo di pixel in una classe"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Campo separatore in output"
+
+#: ../vector/v.cluster/main.c:127
+#, fuzzy
+msgid "Force 2D clustering"
+msgstr "Forza la rimozione"
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "Impossibile impostare il predeterminato livello del vettoriale aperto"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Nume di righe da tenere in memoria"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "%s = %s -- dev'essere maggiore di zero"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Sto disegnando ..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Utilizza la regione corrente"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Sto creando centroidi...."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s=%s - dev'essere un numero positivo"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Uso la massima distanza tra punti. %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Troppe categorie"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Distanza massima dal punto più vicino"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "Media = %.5lf"
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Deviazione standard"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Uso la massima distanza tra punti. %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Ricerca del percorso cost..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Non sono stati trovati punti di dati"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+msgid "Generating renumbering scheme..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Scrittura della mappa raster di output..."
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Mappa raster risultante"
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "raster <%s> non trovato"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "Trovate %d classi"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "Trovate %d classi"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10079,26 +10639,26 @@ msgstr ""
 msgid "Impossible to write to aux table"
 msgstr ""
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Esegue la manutenzione della rete."
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Esegue la manutenzione della rete."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "Impossibile aprire la mappa vettoriale <%s> al livello topologico %d"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d nuovi punti scritti all'output"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "Punti di blocco della mappa vettoriale"
@@ -10137,7 +10697,7 @@ msgstr "Nome della mappa di input"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10150,14 +10710,14 @@ msgstr "Nome della mappa di input"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Operazione da eseguire"
@@ -10186,48 +10746,133 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Trova il percorso più breve in una rete vettoriale."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 "Richiesto per l'operazione 'connect'. Connette i punti entro una data soglia."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Nomi di file di input"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Se non è dato o '-' legge dallo standard input"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Assegna un'unica categoria ai nuovi punti"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "Per l'operazione 'nodes'"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Mappa vettoriale dei punti di arrivo"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Tematismo di linee"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Operazione sconosciuta"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "Il valore di soglia dev'essere >= 0"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Non è possibile leggere l'input da <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Non è possibile inserire nella tabella : %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Impossibile aprire la mappa vettoriale <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Non è possibile creare la mappa vettoriale <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "La tabella <%s> non esiste nel database <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Il tematismo OGR <%s> è già esistente e verrà sovrascritto"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Il tematismo OGR <%s> è già esistente e verrà sovrascritto"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Impossibile aprire il database <%s> col driver <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Non è possibile creare la tabella <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr ""
+"Impossibile copiare la tabella degli attributi nella mappa vettoriale <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Non è possibile creare la tabella <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10359,7 +11004,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d categrie lette dalla mappa vettoriale (layer %d)"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "Non è possibile calcolare il centroide dell'area"
 
@@ -10469,7 +11114,7 @@ msgstr "Connessione al database non definita\n"
 msgid "Key column type is not integer"
 msgstr "Il formato della colonna chiave non è di tipo integer"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Non è possibile recuperare i dati dalla tabella <%s>"
@@ -11253,7 +11898,7 @@ msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 "Crea un output 3D se l'input è 3D  (applicato solo all'output Shapefile)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11509,8 +12154,8 @@ msgstr "Location contenente la mappa vettoriale di input"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr "Origine"
 
@@ -11518,7 +12163,7 @@ msgstr "Origine"
 msgid "Mapset containing input vector map"
 msgstr "Mapset contenente la mappa vettoriale di input"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Cambia il mapset corrente."
@@ -11528,7 +12173,7 @@ msgstr "Cambia il mapset corrente."
 msgid "Name of input vector map to re-project"
 msgstr "Nome della mappa raster di input da riproiettare"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Percorso al database GRASS della location di input"
 
@@ -11543,8 +12188,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr "Destinazione"
 
@@ -11574,17 +12219,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "Location di input e output non possono essere le stesse"
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Controllo della location <%s> mapset <%s>"
@@ -11953,222 +12600,389 @@ msgstr ""
 "Tabella: %s\n"
 "Colonna chiave: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "Importa un file raster binario in una mappa raster GRASS"
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Non costruire la topologia"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Copia anche la tabella degli attributi"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "Solo la tabella del layer 1 è attualmente supportata"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Tabella mancante"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Le colonne chiave sono differenti"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Il numero di colonne è differente"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "I nomi di colonna sono differenti"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "I tipi di colonna sono differenti"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Colonna chiave non trovata"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "La mappa di output non è 3D"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Non è possibile creare la tabella <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Sto disegnando ..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 "Errore nella lettura della mappa vettoriale <%s> - alcuni dati possono non "
 "essere corretti"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Creazione della topologia per la mappa vettoriale <%s> in corso..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr ""
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Impossibile aprire il cursore selezionato: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr ""
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Tipo di colonna sconosciuto"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Impossibile inserire un nuovo record: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "La verifica della proiezione verrà ignorata"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Converte vettore OGR in vettore GRASS"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "File di input"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Numero di layer"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Numero di layer"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Importa solamente la sottoregione"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Sottoregione"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Formato: xmin,ymin,xmax,ymax - di solito W,S,E,N"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Nome della nuova location da creare"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Range del filtro per valori z (min,max)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Vengono importati i valori interi"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Vengono importati i valori interi"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Nome della mappa vettoriale di punti sparsi di input"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Nome di un file vettoriale in output"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Vengono importati i valori interi"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Decorazione"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Vengono importati i valori interi"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Importazione dei punti in corso ..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> numero di punti non valido"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Nome della nuova location da creare"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "Stampa la cronologia del raster invece delle informazioni"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "Sovrascrive la proiezione del dataset (utilizza quella della location)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Limita l'importazione alla regione corrente"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Inserisci la mappa vettoriale contenente i punti"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr "Estende le dimensioni della regione basandosi sul nuovo dataset"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Impossibile scrivere le categorie per la mappa rster <%s>"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr "Sovrascrive la proiezione (usa la proiezione della location)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr ""
+"Non è possibile ottenere le unità  della proiezione della location attuale"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Gruppo <%s> non esiste"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Non crea la tabella degli attributi"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Opzione '%s' sconosciuta"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Numero del layer (from)"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 "Selezionare o il flag per la regione corrente o l'opzione spatial, non "
 "entrambi"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "Per il parametro 'spatial' sono richiesti 4 parametri"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12176,120 +12990,172 @@ msgstr ""
 "Non si è in grado di convertire la proiezione della mappa di input nel "
 "formato di GRASS; impossibile creare una nuova location."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Non è possibile creare la location: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Location <%s> creata"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "La mappa vettoriale <%s> esiste già e sarà sovrascritta"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "La verifica della proiezione verrà ignorata"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Importando punti ..."
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Importando punti ..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"La proiezione del dataset sembra non corrispondere a quella della location "
-"corrente.\n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO è:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d categorie duplicate nel vettoriale"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "Dataset importato PROJ_INFO è:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d categorie duplicate nel vettoriale"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"La proiezione del dataset di input e della location corrente sembrano "
-"corrispondere"
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "La mappa vettoriale <%s> esiste già e sarà sovrascritta"
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Non è possibile aprire il database <%s> col driver <%s>"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Importando punti ..."
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported (limit was %d)"
 msgstr "%d categorie duplicate nel vettoriale"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "%d categorie duplicate nel vettoriale"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were not valid"
 msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d punti esterni ai limiti"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d punti esterni ai limiti"
 
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d punti esterni ai limiti"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Gli ultimi %d punti saranno ignorati"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Impossibile aprire la mappa vettoriale <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Non è possibile aprire il database <%s> col driver <%s>"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12297,22 +13163,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "Importa un file raster binario in una mappa raster GRASS"
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Layer <%s> non disponibile"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Non riesco ad impostare user/password"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Impossibile creare il file <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "ERRORE: <%s> esiste già\n"
@@ -12322,12 +13188,12 @@ msgstr "ERRORE: <%s> esiste già\n"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Nome del file in output"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Il file raster da collegare"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12335,24 +13201,28 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Nome della mappa vettoriale di output (predefinito: input)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr "Elenca i tematismi disponibili nell'origine dati ed esce"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Visualizza i formati supportati ed esci"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12535,137 +13405,137 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Non mostrare i numeri della categoria"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Visualizza gli attributi della mappa vettoriale"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr "La distanza dev'essere > 0.0"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "La tolleranza è stata reimpostata a %g"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Lunghezza della pagina non valida"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "La tolleranza in unità di mappa = %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Non è possibile selezionare dati dalla tabella <%s>"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Creazione dei buffer attorno alle aree in corso ..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "La tolleranza in unità di mappa: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Creazione dei buffer attorno alle aree in corso ..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Nome mappa raster"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Sto creando parti della topologia..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr "Si sta rompendo i poligoni..."
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Calcolo dei centroidi per le aree in corso..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Generazione dell'elenco dei confini da cancellare in corso..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr "Cancellazione dei confini in corso..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr "Calcolo dei centroidi per le aree in corso..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Non è possibile calcolare il centroide per l'area %d"
@@ -12941,18 +13811,18 @@ msgstr "Nome del file in output"
 msgid "%d features written to '%s'."
 msgstr "%d elementi scritti in '%s'."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Location: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "Assegna sottoreti per i centri più vicini (direzione dal centro)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
@@ -12961,20 +13831,29 @@ msgstr ""
 "Il nodo definito come centro dev'essere aperto (costi >= 0). I costi del "
 "nodo centrale vengono utilizzati nel calcolo"
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Numero di centri: [%d] (nlayer: [%d])"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Calcolo dei costi dai centri in corso ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Calcolo dei costi dai centri in corso ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13035,7 +13914,7 @@ msgstr "Numero di punti per l'interpolazione"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13689,7 +14568,7 @@ msgstr "Nessun record nella tabella LR"
 msgid "More than one record in LR table"
 msgstr "Più di un record nella tabella LR"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -13982,46 +14861,57 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Visualizza gli attributi della mappa vettoriale"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+"Condizioni WHERE (to) di un'istruzione SQL senza la parola chiave 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Separatore di record per l'output verticale"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Regione\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Popola i valori del database da elementi vettoriali"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr ""
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Non è possibile aprire il cursore selezionato"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr ""
@@ -14062,46 +14952,50 @@ msgstr "Numero massimo di punti in un segmento"
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Sto disegnando ..."
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Tipo di colonna sconosciuto '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Nome della mappa di output"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s in %s: %s"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s in %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Nume di righe da tenere in memoria"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "Valore da scrivere per null"
@@ -14216,7 +15110,9 @@ msgstr "Angolo di rotazione (in gradi in senso antiorario)"
 msgid "Number of vertex points per grid cell"
 msgstr "Numero di byte per cella"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Tipo di elemento 'to'"
@@ -14316,10 +15212,13 @@ msgid "Writing out vector columns..."
 msgstr ""
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14331,6 +15230,7 @@ msgstr "File di input"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14480,8 +15380,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr "Offset delle etichette nella direzione y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Nome del font"
 
@@ -14558,6 +15459,130 @@ msgstr ""
 msgid "Counting points quadrats..."
 msgstr "Sto disegnando ..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Nome del file con il risultato della classificazione"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "raster <%s> non trovato"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Vengono importati i valori interi"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Vengono importati i valori interi"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> numero di punti non valido"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Valore random minimo"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Numero di byte per cella"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Numero di byte per cella"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Deviazione standard"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14573,28 +15598,28 @@ msgid "Target location <%s> not found"
 msgstr "Location di destinazione <%s> non trovata"
 
 # target: destinazione ?
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Mapset <%s> nella location target <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "permesso negato"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "non trovato"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "Eseguire i.target per il gruppo"
 
@@ -14932,11 +15957,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "Connessione al database non definita per il layer <%s>"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "driver pg: colonna '%s', di tipo %d non supportata"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -15024,16 +16044,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d record aggiornati"
 msgstr[1] "%d record aggiornati"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Converte vettore OGR in vettore GRASS"
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "Nome dell'origine dati OGR"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Il file raster da importare"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15043,14 +16065,14 @@ msgstr ""
 "\t\tESRI Shapefile: directory contenente gli shapefile\n"
 "\t\tMapInfo File: directory contenente i file mapinfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 "Nome del tematismo OGR. Se non viene definito vengono importati tutti i "
 "tematismi disponibili"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15060,52 +16082,52 @@ msgstr ""
 "\t\tESRI Shapefile: nome dello shapefile\n"
 "\t\tMapInfo File: nome del file mapinfo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Dimensione minima dell'area da importare (unità quadrate)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 "Le aree più piccole e le isole vengono ignorate. Devono essere maggiori di "
 "snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "Opzionalmente cambia il tipo di input predefinito"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Generare punti vettoriali come punti 3D"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 msgid "import area boundaries as lines"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Crea polilinee da linee o confini."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Sto scrivendo i centroidi..."
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Soglia di cattura (snap) per i confini"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' per nessuna cattura (snap)"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15113,242 +16135,245 @@ msgstr ""
 "Elenco di nomi di colonna da usare al posto dei nomi originali; il primo è "
 "usato per la colonna categoria"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Errore nella lettura del valore dell'attributo '%s'"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Nome della colonna usata come etichette di categoria del raster"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Nome della colonna del grado di centralità (degree centrality)"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Lette [%d] categorie di punti"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Visualizza i formati supportati ed esci"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Visualizza i formati supportati ed esci"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Non esegue la pulizia (clean) dei poligoni (non raccomandato)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Forza l'output usando valori interi"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr ""
+"Non è possibile ottenere le unità  della proiezione della location attuale"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Mostra i parametri della connessione in uso ed esce"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr "Inoltre aggiorna la regione predefinita nel mapset PERMANENT"
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Trasforma i nomi delle colonne in caratteri minuscoli"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Impossibile aprire l'origine dati <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Posizione del cursore non è supportata dal driver MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "file raster per la Vista%d"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr ""
 "Impossibile ottenere informazioni sul layer per la mappa vettoriale <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Colonna <%s> non trovata nella tabella <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Si sta usando il vettore temporaneo <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, c-format
 msgid "Key column '%s' not found"
 msgstr "Colonna chiave '%s' non trovata"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Il formato della colonna chiave non è di tipo integer"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Colonna <%s> non trovata nella tabella <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Tipo di colonna non supportato (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Sto disegnando ..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s senza geometria"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Si sta rompendo i poligoni..."
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Cancellazione dei confini in corso..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Cancellazione dei confini in corso..."
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Cancellazione dei confini in corso..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Calcolo dei centroidi per le aree in corso..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15356,115 +16381,115 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr "%d poligoni di input\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d poligoni di input"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Area totale: %G (%d aree)\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Area totale: %G (%d aree)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Area di sovrapposizione: %G (%d aree)\n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Area di sovrapposizione: %G (%d aree)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Aree senza categoria: %G (%d aree)\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Aree senza categoria: %G (%d aree)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Soglia di cattura (snap) per i confini"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Input non riuscito"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Impossibile eliminare la tabella: %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr "La regione predefinita per questa location è stata aggiornata"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr "La regione per questa location è stata aggiornata"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15684,6 +16709,11 @@ msgstr ""
 "Connessione al database non definita per il layer %d. Usare prima v.db."
 "connect"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Tavola dei colori <%s> non trovata"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -15843,19 +16873,19 @@ msgstr "L'opzione 'azimuth' si usa solo per le linee"
 msgid "Querying database... "
 msgstr "Interrogazione del database in corso..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr ""
 
@@ -16042,14 +17072,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Mappa raster <%s> già esistente. Sarà sovrascritta"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "La mappa raster <%s> esiste già"
@@ -16185,14 +17215,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Assegna un'unica categoria ai nuovi punti"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Crea linee parallele di un vettore lineare di input."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "%d linee o confini trovati nella mappa vettoriale  <%s@%s>"
 msgstr[1] "%d linee o confini trovati nella mappa vettoriale  <%s@%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16706,19 +17741,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16732,6 +17772,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16744,7 +17785,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -16898,6 +17939,7 @@ msgid "Unable to map image file"
 msgstr "Impossibile creare una mappa del file immagine"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -16915,14 +17957,14 @@ msgstr "Impossibile creare una mappa del file immagine"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16960,6 +18002,57 @@ msgstr "Non è possibile ottenere colori sufficienti."
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Mostra una barra di scala nel monitor dei grafici"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Mostra di tutti i monitor"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Crea il mapset se non ne esiste uno"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "mostra i parametri della connessione in uso ed esce"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Stampa il nome del monitor attualmente selezionato"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+"Posizione iniziale in cui il testo viene disegnato (percentuale, [0,0] è "
+"l'angolo basso a sinistra)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -16977,7 +18070,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -16990,7 +18083,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17067,18 +18160,23 @@ msgstr ""
 "puntuale"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17093,6 +18191,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17185,6 +18284,93 @@ msgstr ""
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Converte mappe raster 3D in mappe raster 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Nome di una mappa raster esistente"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Nome della mappa raster 3D in input"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Numero di classi da definire"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Mappe raster in input"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -17314,7 +18500,7 @@ msgstr "Crea un database vuoto"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17328,8 +18514,8 @@ msgid "rename"
 msgstr "nome"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17339,9 +18525,9 @@ msgid "input"
 msgstr "Input"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17355,6 +18541,79 @@ msgstr "Richiesto"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Ricostruisce la topologia in tutti i vettoriali nel mapset corrente."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Produce una mappa vettoriale di curve di livello in base a parametri "
+"specificati a partire da una mappa raster."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "isoipse"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Incremento fra le isoipse (equidistanza)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Lista delle isoipse"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Livello minimo delle isoipse"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Livello massimo delle isoipse"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Numero minimo di punti per una curva di livello (0 -> nessun limite)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Mappe raster in input"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Non crea la tabella degli attributi"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17363,7 +18622,7 @@ msgstr "Nome di una mappa raster esistente"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17420,8 +18679,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17528,74 +18788,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Nome della mappa raster 3D in input"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Nome del raster in output"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Nome del raster in output"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17630,47 +18859,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Nome del nuovo database"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Nome di due o più mappe raster di input"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Numero di classi da definire"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Mappe raster in input"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17770,8 +18982,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Nome del file in output"
+msgid "Name for output image (or text file for -t)"
+msgstr "Nome per il file immagine di output (senza estensione)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17788,6 +19000,53 @@ msgstr "Utilizza le coordinate della mappa invece delle coordinate xyz"
 msgid "Use gnuplot for display"
 msgstr "Non riesco ad aprire il cellfile per [%s]"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "File world di output"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Lista di valori separati da virgola"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Nome del file in output o del dispositivo GPS"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Crea un database vuoto"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Numero di classi da definire"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17819,31 +19078,9 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
-msgid "Extend location extents based on new dataset"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr "Sovrascrive la proiezione (usa la proiezione della location)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
+msgid "Extend location extents based on new dataset"
 msgstr ""
-"Non è possibile ottenere le unità  della proiezione della location attuale"
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
@@ -18029,6 +19266,20 @@ msgstr ""
 msgid "Output field separator"
 msgstr "Separatore di campo in output"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Converte mappe raster 3D in mappe raster 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Nome di una mappa raster esistente"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Visualizza una mappa raster e la sua legenda in una finestra grafica"
@@ -18128,8 +19379,15 @@ msgstr "Crea un database vuoto"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Nome del nuovo database"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "Nome del raster map in output"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Nome di una mappa raster esistente"
@@ -18139,7 +19397,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18148,15 +19406,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Nome del nuovo database"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18206,7 +19464,7 @@ msgstr ""
 "definito dall'utente"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Nome del file in output"
 
@@ -18286,16 +19544,28 @@ msgid "Name for output raster map (default: taken from input file internals)"
 msgstr ""
 "Nome per il raster di output (predefinito: prende dal file interno di input)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+#, fuzzy
+msgid "Spatio-temporal mapcalc expression"
+msgstr "Calcola una nuova mappa raster da un'espressione di r.mapcalc"
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Converte mappe raster 3D in mappe raster 2D"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18373,12 +19643,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18515,17 +19792,15 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 #, fuzzy
 msgid "Redraws the content of currently selected monitor."
 msgstr "Stampa il nome del monitor attualmente selezionato"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Mostra di tutti i monitor"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18536,12 +19811,12 @@ msgstr ""
 "univariate"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "In modalità scansione, stampa usando lo stile dello script di shell"
 
@@ -18557,7 +19832,7 @@ msgstr ""
 "File ASCII contenente i dati di input (o \"-\" per leggere dallo stdin)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Statistica da usare per i valori raster"
 
@@ -18565,14 +19840,14 @@ msgstr "Statistica da usare per i valori raster"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Statistica"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Tipo di dati memorizzati per la mappa raster risultante"
 
@@ -18613,17 +19888,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Scala da applicare ai dati z"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Percentuale di mappa da tenere in memoria"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "p-esimo percentile dei valori"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18667,19 +19942,15 @@ msgid ""
 "on the fly."
 msgstr "Converte vettore OGR in vettore GRASS"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Il file raster da importare"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Mappa vettoriale degli errori di output"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Allinea la regione corrente alla mappa raster di input"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18773,7 +20044,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -18859,24 +20130,18 @@ msgstr "Nome di una mappa raster esistente"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Numero di classi da definire"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Nome di una mappa raster esistente"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 msgid "Register empty maps"
 msgstr "Registra mappe vuote"
 
@@ -18993,17 +20258,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Numero di punti per l'interpolazione"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19011,11 +20280,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Nome di una mappa raster esistente"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-#, fuzzy
-msgid "Spatio-temporal mapcalc expression"
-msgstr "Calcola una nuova mappa raster da un'espressione di r.mapcalc"
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19133,81 +20397,98 @@ msgid "Maintains GRASS Addons extensions in local GRASS installation."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
+#, fuzzy
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 "Scarica, installa estensione dal repository degli Addons di GRASS nella "
 "installazione locale di GRASS oppure rimuove le estensioni installate."
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Nome dell'estensione da installare/rimuovere"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Elenca i moduli disponibili nel repository SVN Addons di GRASS "
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Visualizza i formati supportati ed esci"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Visualizza i formati supportati ed esci"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr "Installa nel sistema (bisogna avere i permessi di amministratore)"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "visualizzazione"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Tabelle di sistema invece che tabelle utente"
@@ -19324,10 +20605,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr "Calcola una nuova mappa raster da un'espressione di r.mapcalc"
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19386,6 +20663,59 @@ msgstr ""
 msgid "Test name"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Converte mappe raster 3D in mappe raster 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr ""
+"Nome della colonna della tabella degli attributi da utilizzare per le "
+"etichette"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Quale raster necessita una tabella dei colori"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Le statistiche estese attualmente sono supportate solo per punti/centroidi"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Non costruisce la topologia"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19458,6 +20788,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Tipo di grafico"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "il flag z è supportato solo per i punti"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19633,20 +20974,26 @@ msgid "Description of the space time dataset"
 msgstr "Nome del nuovo database"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nome del nuovo database"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19690,13 +21037,13 @@ msgstr "raster, trasformazione del colore"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Numero del layer"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19783,7 +21130,7 @@ msgstr "Nome di una mappa raster esistente"
 msgid "Neighborhood size"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Numero di punti per l'interpolazione"
@@ -19885,24 +21232,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Risoluzione della mappa di output"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Titolo della mappa raster risultante"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadati"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Alta risoluzione"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Nome del file di output"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr ""
 "Forza le mappe Lat/Lon per ricadere nelle coordinate geografiche (90N,S; "
@@ -19968,19 +21332,39 @@ msgstr ""
 "Carica valori di un vettoriale nella tabella degli attributi di un "
 "vettoriale puntuale"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "colonne: %d"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Nome della mappa vettoriale da modificare"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "colonne: %d"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr ""
 "Nome della colonna della tabella degli attributi da utilizzare per le "
 "etichette"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr ""
 
@@ -20067,6 +21451,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20080,11 +21465,15 @@ msgid "Sill value"
 msgstr "%s: specificazione di valore non consentita"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Nome della mappa raster di output delle esposizioni"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20197,28 +21586,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "Calcola le statistiche univariate per le celle non nulle di un raster"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "Mappa(e) raster da leggere"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Crea un database vuoto"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Converte mappe raster 3D in mappe raster 2D"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Propaga NULLI"
 
@@ -20257,7 +21641,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "Genera un raster con le aree continue aumentate di una cella."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20271,7 +21655,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Raggio del buffer nelle celle raster"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Misura"
 
@@ -20289,12 +21673,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Converte mappe raster 3D in mappe raster 2D"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Numero di punti per l'interpolazione"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20319,7 +21703,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr ""
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20347,6 +21731,17 @@ msgstr ""
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "Tempo usato per le iterazioni [minuti]"
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+"Interpolazione spline bicubica o bilineare con regolarizzazione Tykhonov"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Location: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20356,19 +21751,10 @@ msgstr "Permette di unire una tabella ad una tabella di una mappa vettoriale."
 msgid "Vector map to which to join other table"
 msgstr "Mappa vettoriale alla quale unire un'altra tabella"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr "Layer sul quale unire"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "colonne: %d"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20396,17 +21782,17 @@ msgstr "Unisce colonna nell'altra tabella"
 msgid "Imports space time raster dataset."
 msgstr "Aggiorna statistiche per un raster"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Allinea la regione corrente alla mappa raster di input"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Collegamento alla mappa raster <%s> creato"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20484,14 +21870,17 @@ msgstr "Mappa raster 3D <%s> non trovata"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20522,11 +21911,11 @@ msgstr "Non è possibile alloccare memoria per la stringa"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Non è possibile leggere l'intervallo dati della mappa raster <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Errore nella lettura del file della cronologia"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20534,8 +21923,8 @@ msgstr "Non è possibile chiudere la mappa raster 3D <%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Errore nella scrittura dei dati"
 
@@ -20588,6 +21977,7 @@ msgstr "L'output intero non supporta byte=8 in questa costruzione"
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Impossibile creare il file <%s>"
@@ -20739,9 +22129,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Colore del bordo"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20767,7 +22158,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Impossibile creare e risolvere il sistema di equazioni lineari"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Impossibile creare la mappa raster 3D <%s>"
@@ -20834,6 +22228,144 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Mappa raster %d Nome del file: %s già esistente. Sarà sovrascritto!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Selezione degli elementi in corso..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Fornire tre mappe raster 3D RGB"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Mappa vettoriale <%s> non trovata"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Calcolo delle direzioni di flusso in corso..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr ""
+"Nome della mappa vettoriale di punti della quale editare la tabella attributi"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nome della mappa vettoriale da modificare"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Nome di un file vettoriale in output"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Il file raster da collegare"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s in %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Numero di iterazioni"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr ""
+"Ampiezza del corso d'acqua (in metri). Il valore predefinito è l'ampiezza "
+"della cella del raster"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "Mostra il titolo del file raster"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Nessuna mappa raster specificata"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Il database predefinito non è impostato"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Numero massimo di righe da caricare"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Numero massimo di iterazioni"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Impossibile descrivere la tabella <%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Errore nella lettura dei dati"
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr "Genera statistiche sul volume per mappe raster 3D"
@@ -20965,11 +22497,11 @@ msgstr "impossibile chiudere il file ASCII"
 msgid "3D raster map for which to modify null values"
 msgstr "Mappa raster 3d della quale modificare i valori null"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Elenco dei valori raster da impostare a NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Valore con il quale rimpiazzare il valore null"
 
@@ -20993,7 +22525,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: non è posibile chiudere il file tmp"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "File di input"
@@ -21002,6 +22534,84 @@ msgstr "File di input"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Crea un raster da un assemblaggio di molte coordinate usando statistiche "
+"univariate"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Non indicizza punti per cella di raster"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Numero di byte per cella"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Mappa raster 3D <%s> non trovata"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Sto disegnando ..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Mappa raster 3d della quale modificare i valori null"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Quale raster necessita una tabella dei colori"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "Nome del raster"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Non è possibile creare il file temporaneo"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21057,13 +22667,13 @@ msgstr ""
 msgid "Update range"
 msgstr "L'intervallo dei dati in output"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Impossibile salvare la region <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "tabella delle categorie per [%s] impostata a %s"
@@ -21119,7 +22729,7 @@ msgstr "Errore nella lettura dei dati"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Caricamento dei dati ... (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Errore nella chiusura del file g3d"
@@ -21497,7 +23107,7 @@ msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 "Valori della mappa g3d errati! I valori devono essere compresi tra 0 e 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21507,7 +23117,7 @@ msgstr "Metodo <%s> sconosciuto"
 msgid "Aggregate operation"
 msgstr "Operazione di aggregazione"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr "Quantile da calcolare per method=quantile"
@@ -21539,6 +23149,37 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Impossibile allocare memoria"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "radianza"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "Combina raster rosso, verde e blu in un singolo raster"
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Nome della mappa/e raster di output"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Impossibile allocare memoria"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Scrittura della nuova mappa raster in corso..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -21878,38 +23519,38 @@ msgstr "Stampa in stile script per la shell (incluso numero di revisione SVN)"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22205,13 +23846,13 @@ msgid "Unknown operation '%s'"
 msgstr "Operatore sconosciuto"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr "ignorato\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Opzione <%s> richiesta!"
@@ -22283,9 +23924,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: sono gli stessi file, non è richiesto copiarli"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> esiste già"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> esiste già nel mapset <%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, c-format
@@ -22396,8 +24037,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr "Modifica"
 
@@ -22661,9 +24302,9 @@ msgstr "Il file raster da importare"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr ""
 
@@ -22676,15 +24317,15 @@ msgstr "Mapset <%s> aggiunto al percorso di ricerca"
 msgid "File name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -22694,7 +24335,7 @@ msgid "Remove base raster maps"
 msgstr "Rimuove le mappe di base"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Non riesco ad aprire il cellfile per [%s]"
@@ -22741,77 +24382,67 @@ msgstr "Rinomina i file degli elementi nel corrente mapset nel database"
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr ""
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr ""
 "Mapset del quale fornire la lista (predefinito: percorso di ricerca corrente)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Nome di un mapset (predefinito: corrente)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Imposta la region corrente alla region salvata"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "Stampa i tipi di dati"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr ""
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "Lista dettagliata (fornisce anche i titoli delle mappe)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Gruppo <%s> non esiste"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Non è possibile leggere l'intestazione della mappa raster <%s@%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Impossibile aprire la mappa vettoriale <%s> al livello topologico %d"
@@ -23018,37 +24649,37 @@ msgstr ""
 "Non è possibile cambiare la regione predefintia. Il mapset corrente non è "
 "<PERMANENT>"
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Input <%s=%s> non valido"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 "Non è possibile ottenere le informazioni sulla proiezione della location "
 "corrente"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 "Non è possibile ottenere le unità  della proiezione della location attuale"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Non è possibile aggiornare i parametri della proiezione lat/long"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
@@ -23056,17 +24687,17 @@ msgstr ""
 "Errore nell'esecuzione di 'pj do proj' (ovvero nella coppia di coordinate di "
 "proiezione in input)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23074,7 +24705,7 @@ msgstr ""
 "Output WGS84 impossible a causa dell'assenza di parametri di trasformazione "
 "del datum. Prova ad eseguire g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23290,38 +24921,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "File di celle non trovato"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Il file raster da importare"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23626,10 +25278,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Il mio primo modulo vettoriale"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "Impossibile impostare il predeterminato livello del vettoriale aperto"
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23806,7 +25454,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Percentuale completa..."
 
@@ -24218,7 +25866,7 @@ msgstr ""
 "corrente"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24404,153 +26052,153 @@ msgstr "ewres=%f"
 msgid "Writing new raster map..."
 msgstr "Scrittura della nuova mappa raster in corso..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Riproietta un raster da una location alla location corrente"
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr "Location contenente la mappa raster di input"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr "Mapset contenente la mappa raster di input"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Nome della mappa raster di input da riproiettare"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Nome per la mappa raster di output (predefinito: input)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Risoluzione della mappa di output"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Mostra mappe raster della location d input ed esci"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr "Location di input e output sono le stesse"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 "Impossibile ottenere informazioni sulla proiezione per la mappa raster di "
 "output"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr ""
 "Impossibile ottenere le unità della proiezione per la mappa raster di output"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 "Impossibile ottenere i valori chiave della proiezione per la mappa raster di "
 "output"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Mapset <%s> nella location di input <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Mappa raster <%s> nella location <%s> nel mapset <%s> non trovata"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr ""
 "Impossibile ottenere informazioni sulla proiezione per la mappa raster di "
 "input"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr ""
 "Impossibile ottenere le unità della proiezione per la mappa raster di input"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr ""
 "Impossibile ottenere i valori chiave della proiezione per la mappa raster di "
 "intput"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Impossibile lavorare con dati non proiettati (location xy)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "Mappa di input  <%s@%s> nella location <%s>:"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Input:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Colonne: %d  (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Righe: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Nord:  %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Sud: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Ovest:  %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Est:  %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "Risoluzione-EO: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "Risoluzione-NS: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Output:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Proiezione in corso ..."
 
@@ -24604,12 +26252,6 @@ msgstr ""
 "Consente la creazione o la modifica dei file di supporto di un tematismo "
 "raster"
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Titolo della mappa raster risultante"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Testo da usare per le unità dei dati della mappa"
@@ -24637,22 +26279,22 @@ msgstr "Nome del filtro file"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Mappa raster <%s> non trovata nel mapset corrente"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] è una riclassificazione di un'altra mappa. Sto uscendo."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Sto scrivendo un nuovo file null per [%s]..."
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Rimozione del file dei nulli per [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Fatto."
 
@@ -25426,7 +27068,7 @@ msgstr "Altezza (%d) dev'essere più grande di 1"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "[%s] non può essere trovato"
@@ -25636,8 +27278,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "Moltiplicatore di categoria e offset per $1 e per $2"
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Impossibile leggere il file delle categorie della mappa raster <%s@%s>"
@@ -25725,12 +27367,12 @@ msgstr "Non è possibile leggere l'input da <%s>"
 msgid "Can't get cell header"
 msgstr "Impossibile ottenere l'intestazione di cella"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS: righe cambiate da %d a %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: colonne cambiate da %d a %d"
@@ -25927,10 +27569,6 @@ msgstr ""
 "Numero di righe di intestazione da tralasciare all'inizio del file di input "
 "(modalità punti)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Range del filtro per valori z (min,max)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -25938,7 +27576,7 @@ msgstr "Range del filtro per valori z (min,max)"
 msgid "Advanced Input"
 msgstr "Avanzato"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Scala da applicare ai dati z"
 
@@ -25964,7 +27602,7 @@ msgstr "Scala da applicare ai dati z"
 msgid "Please specify a reasonable column number."
 msgstr "Specificare un numero di colonna ragionevole."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "Range z non valido"
 
@@ -25973,15 +27611,15 @@ msgstr "Range z non valido"
 msgid "Invalid vrange"
 msgstr "Est non valido"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "Impossibile calcolare il percentile senza l'opzione pth specificato!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "Impossibile calcolare il trimmed senza l'opzione trim specificato!"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26004,7 +27642,7 @@ msgid "Reading input data..."
 msgstr "Lettura dell'input in corso ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Passato #%d (di %d) ..."
@@ -26050,16 +27688,16 @@ msgstr "Coordinata y errata alla linea %lu colonna %d. <%s>"
 msgid "Writing to output raster map..."
 msgstr "Scrittura della mappa raster di output..."
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "Tovati %lu punti nella regione."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Scansione dei dati in corso ..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Campo di variazione:     min         max\n"
@@ -26223,11 +27861,6 @@ msgstr "Nome del file raster di output"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Tipo di grafico"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "Opzioni di creazione da passare al driver del formato di output"
@@ -26797,41 +28430,46 @@ msgstr "Coordinata y <%s> non valida"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Attenzione, ignorando punti fuori dalla finestra: %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Gestisce i valori NULL di una data mappa raster"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Raster3d del quale modificare il valore null"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Funzione solamente se la mappa è di valori decimali"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "Controlla"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Funzione solamente se la mappa è di valori interi"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Compie l'operazione solo se la mappa non ha un file bitmap NULL-value"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "Crea un file bitmap NULL-value che valida tutte celle di dati"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "Rimuove file bitmap NULL-value"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "Crea un file bitmap NULL-value che valida tutte celle di dati"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
@@ -26840,64 +28478,65 @@ msgstr ""
 "Raster <%s> è una mappa riclassificata di <%s@%s>. Considerare di generare "
 "una copia con r.mapcalc. Sta per uscire."
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "La mappa raster <%s> non è nel mapset <%s> dell'utente"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "%s è un'immissione non valida per null"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "La mappa raster <%s> ha già un file bitmap di valori nulli"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> è una mappa raster con valori interi (CELL)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> è un raster di interi (CELL). Utilizzando null=%d."
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> è una mappa raster con valori a virgola mobile"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr ""
 "Scrittura del nuovo file di valori nulli per la mappa raster <%s> in corso..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Mappa raster <%s> modificata."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr ""
 "Rimozione in corso del file di valori nulli per la mappa raster <%s>..."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: specificazione di valore non consentita"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Scrittura dei nuovi dati per la mappa raster <%s> in corso..."
@@ -27311,87 +28950,176 @@ msgstr "Conversione in corso ..."
 msgid "File <%s> created"
 msgstr "File <%s> creato"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Crea un raster da un assemblaggio di molte coordinate usando statistiche "
 "univariate"
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "File contenente le regole di ricodifica"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Range del filtro per valori z (min,max)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Scala da applicare ai dati z"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "É richiesta la mappa raster di output"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Imposta la regione da questa mappa raster"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Gruppo <%s> non esiste"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Opzione '%s' sconosciuta"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Mappa <%s> non valida"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Opzione <%s> richiesta!"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "Lettura dei dati in corso ..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Impossibile aprire il file di output <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Scrittura della mappa in corso ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "Tovati %lu punti nella regione."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Impossibile aprire il file '%s' per la lettura"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Genera un raster della distanza dagli elementi del layer di input"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Nome della mappa di output delle distanze"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Nome della mappa raster di output"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr "Distanza di output in metri invece che in unità di mappa"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Distanza massima dal punto più vicino"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "Dev'essere assegnato almeno un valore  di distance= e value="
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr "metric=geodesic è valido solo per lat/lon"
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Nome del raster"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Distanza di output in metri invece che in unità di mappa"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Impossibile creare il file temporaneo <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 msgid "Writing output raster maps..."
 msgstr "Scrittura della mappa raster di output..."
@@ -27529,7 +29257,7 @@ msgstr "[%s]: Questo colore non esiste"
 msgid "Converting <%s>..."
 msgstr "Conversione di <%s> in corso..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "La tipologia del raster <%s> non combacia"
@@ -27633,7 +29361,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Non ci sono location valide nella regione corrente"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28215,7 +29943,7 @@ msgstr "[%s]: Questo colore non esiste"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28641,7 +30369,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr ""
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28660,10 +30388,6 @@ msgstr "Passaggio 1 di 2..."
 msgid "Unable to write to temp file"
 msgstr "Impossibile scrivere in un file temporaneo"
 
-#: ../raster/r.clump/clump.c:225
-msgid "Generating renumbering scheme..."
-msgstr ""
-
 #: ../raster/r.clump/clump.c:265
 msgid "Pass 2 of 2..."
 msgstr "Passaggio 2 di 2..."
@@ -28783,7 +30507,7 @@ msgid "Writing output raster map..."
 msgstr "Scrittura della mappa raster di output..."
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -28794,42 +30518,42 @@ msgstr "Scrittura della mappa raster <%s> in corso..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr "direzione letta> %lf, vicini trovati: %i"
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Genera una mappa raster di sottobacini idrografici"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Nome della mappa raster di output"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Le coordinate E e N del punto/i di partenza"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Coordinate est <%s> non valida"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Coordinata nord <%s> non valida"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Attenzione, ignorando punti fuori dalla finestra: %.4f,%.4f"
@@ -28927,22 +30651,22 @@ msgid "Invalid map type"
 msgstr "Mappa <%s> non valida"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "SEZIONE %d: Chiudendo Mappe."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "SEZIONE %d: Determinazione del bacino idrografico."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "SEZIONE 1a (di %1d): Inizializando Memoria."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -29049,23 +30773,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "SEZIONE 3: Superficie del flusso di accumulazione con SFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr "MFD: proporzione cumulata del flusso di distribuzione non 1.0 ma %f"
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29073,8 +30797,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 #, fuzzy
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr "Mappa di output: direzione di drenaggio"
@@ -29654,149 +31378,154 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 msgid "Inputs"
 msgstr "Inputs"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Nome della mappa raster d'inserimento dati"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Nome di una mappa raster contenente una superfice di altezze"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Nome della mappe raster in input"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Nome di una mappa raster contenente una superfice di altezze"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Livello minimo di contorno"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Uso la massima distanza tra punti. %f"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Numero di livelli da utilizzare per ogni componente"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Nome della tabella in output"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Nome di un file vettoriale in output"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Fattore d convergenza per MFD (1-10)"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr "1 = flusso più divergente, 10 = flusso più convergente. Consigliato: 5"
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "Memoria massima da utilizzare con la flag -m (in MB)"
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr "SFD: direzione di flusso singola, MFD: direzione di flusso multipla"
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Consentire solo deflussi idrici orizzontali e verticali"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 "Abilita l'opzione per l'uso della memoria swap del disco. L'operazione è "
 "lenta"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
@@ -29804,76 +31533,76 @@ msgstr ""
 "Necessario solo se la richiesta di memoria supera la RAM disponibile: vedere "
 "il manuale per come calcolare il fabbisogno di memoria"
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 "Usare un'accumulazione di flusso positiva anche per le possibili sottostime"
 
 # FINIRE
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 "Si veda il manuale per una descrizione dettagliata dell'output "
 "dell'accumulazione di flusso"
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Spiacente, si deve scegliere una mappa di output"
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s=%s - dev'essere un numero positivo"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "driver pg: colonna '%s', di tipo %d non supportata"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Subprocesso non andato a buon fine con codice d'uscita %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] "SEZIONE 1: Inizializzando Variabili. %d sezioni totali."
 msgstr[1] "SEZIONE 1: Inizializzando Variabili. %d sezioni totali."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -29882,22 +31611,32 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "Mappa raster risultante"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Mappa raster risultante"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Mappa raster risultante"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Mappa raster risultante"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Mappa raster risultante"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Mappa raster risultante"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Mappa raster risultante"
@@ -29929,31 +31668,31 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "Mappa(e) raster da leggere"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Metodo aggregazione"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Peso secondo l'area (più lento)"
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Impossibile leggere la tavola dei colori per %s"
@@ -30356,7 +32095,7 @@ msgstr ""
 "La tavola dei colori 'grey.log' non è supportata dai raster con valori a "
 "virgola mobile"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "Richiesta di colore '%s' sconosciuta"
@@ -30739,7 +32478,7 @@ msgid ""
 msgstr "Calcola le statistiche univariate per le celle non nulle di un raster"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30754,11 +32493,25 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Utilizza la stessa risoluzione della map RASTER3D di input per la mappa "
+"output 2D, indipendentemente dalle impostazioni attuali della region"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "Calcola le statistiche univariate per le celle non nulle di un raster"
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "I flag -g e -a sono mutualmente esclusivi"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31039,33 +32792,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "Non è possibile trovare il carattere '%s'\n"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Eliminati %d  pixel "
 msgstr[1] "Eliminati %d  pixel "
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Assotigliamento completato con successo"
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 "Assotigliamento non completato, considera di incrementare il parametro "
@@ -31360,31 +33113,11 @@ msgstr ""
 "Produce una mappa vettoriale di curve di livello in base a parametri "
 "specificati a partire da una mappa raster."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Incremento fra le isoipse (equidistanza)"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 msgid "Contour levels"
 msgstr "Livelli delle isoipse"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Lista delle isoipse"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Livello minimo delle isoipse"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Livello massimo delle isoipse"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Numero minimo di punti per una curva di livello (0 -> nessun limite)"
-
 #: ../raster/r.contour/main.c:140
 #, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -31977,54 +33710,55 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Nome della mappa raster risultante"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Mappa(e) raster da leggere"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Codifica carattere"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "File contenente le direttive SQL"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Funzione kernel"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Sto disegnando ..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "I flag -g e -a sono mutualmente esclusivi"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "Parametri"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Tipo sconosciuto: %d"
@@ -32074,80 +33808,80 @@ msgstr "Errore sconosciuto per la funzione '%s'"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Non è possibile leggere il file dei colori per la mappa raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Non è possibile creare il btree per la mappa raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Modificatore della mappa non valido: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Variabile '%s' non definita"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Mappa <%s> non valida"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "Numero di argomenti (%d) non valido per l'operatore '%s'"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Non è possibile chiudere la mappa raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Non è possibile chiudere la mappa raster di output"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Funzioni note:"
@@ -32332,7 +34066,7 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
@@ -32340,15 +34074,15 @@ msgstr ""
 "Non è possibile convertire le informazioni sulla proiezione della mappa "
 "raster nel formato di GRASS per la verifica"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "PROJ_INFO della location è:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "PROJ_INFO del dataset è:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32390,14 +34124,6 @@ msgstr ""
 msgid "Band to select (default is all bands)"
 msgstr "Banda da selezionare (il valore predefinito è tutte)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadati"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32420,7 +34146,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Dev'essere fornita una delle opzione -h o rows= e cols="
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Non è possibile aggiornare la regione corrente"
@@ -32439,7 +34165,7 @@ msgstr "Il gruppo di immagini <%s> esite già e verrà sovrascritto."
 msgid "Reading band %d of %d..."
 msgstr "Lettura della mappa %s in corso ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "La banda (%d) selezionata non esiste"
@@ -32508,27 +34234,27 @@ msgstr "Creando i file di supporto per %s"
 msgid "Link to raster map <%s> created."
 msgstr "Collegamento alla mappa raster <%s> creato"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importa file raster binario in un raster GRASS"
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Il file raster da importare"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Banda da selezionare (il valore predefinito è tutte)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Nome della location di destinazione delle immagini"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
@@ -32536,67 +34262,82 @@ msgstr ""
 "Nome della location da cui leggere la proiezione per la trasformazione dei "
 "GPG"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Non è possibile ottenere la banda raster"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Nome della mappa raster di elevazione di input [metri]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Non crea la tabella degli attributi"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Sovrascrive la proiezione (usa la proiezione della location)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Usa i numeri delle bande invece che i nomi dei colori"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Mostra le tabelle ed esce"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 "Bisogna specificare una location d'origine differente da quella di output"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr "La flag '-l' funziona solo in location Lat/Lon"
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Il numero dei sottoinsiemi dev'essere uguale o maggiore di 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Impossibile aprire l'origine dati <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
@@ -32604,7 +34345,7 @@ msgid ""
 msgstr ""
 
 # flipped
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
@@ -32612,7 +34353,7 @@ msgstr ""
 "Il raster di input è capovolto  o ruotato - non può essere importato. Si può "
 "utilizzare 'gdalwarp' per trasformare la mappa col Nord in alto."
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
@@ -32622,95 +34363,100 @@ msgstr ""
 "certamente controllare bordi e risoluzione della mappa con r.info e "
 "reimpostarli con r.region prima di andare ulteriormente avanti."
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Si sta procedendo con l'importazione..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Impossibile aprire il file di firma"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Non è possibile ottenere la banda raster"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Si stanno copiando %d GCP nel file di punti per <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "I GCP hanno il seguente sistema di coordinate OpenGIS WKT:"
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Riproiezione della tabella dei GCP:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Proiezione di input per la tabella GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* Proiezione dell'output per la tabella GCP: %s "
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Errore in pj_do_proj (non è possibile riproiettare GCP %i)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr ""
 "Non è possibile tradurre i valori chiave di proiezione dei GCP di input"
 
 # target: ?
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr ""
 "Impossibile ottenere informazioni sulla proiezione della location target"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Impossibile ottene le unità della proiezione della location target"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr ""
 "Impossibile ottene i valori chiave della proiezione della location target"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Scrittura della mappa raster <%s> in corso..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr ""
 "Impostazione della tavola dei colori per il grigio per <%s>  (8 bit, intera "
 "gamma)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 "Impostazione della tavola dei colori per il grigio per <%s> (16 bit, gamma "
 "dell'immagine)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Non riesco ad aprire il cellfile per [%s]"
@@ -32836,7 +34582,7 @@ msgstr "Lettura della mappa di elevazione in corso..."
 msgid "Writing topographic index map..."
 msgstr ""
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Numero di punti in input:%d"
@@ -32935,12 +34681,12 @@ msgstr ""
 "Il volume è corretto solo se la profondità del lago (mappa raster del "
 "terreno) è in metri."
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Sto disegnando ..."
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -32949,23 +34695,23 @@ msgstr ""
 "conosciuti di uno o più tematismi per riempire le aree con \"nessun dato\" "
 "in un altro tematismo di mappa."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Nome dei raster da unire insieme"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Nome della mappa raster risultante"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Utilizzare zero (0) per trasparenza invece di NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Il numero minimo di mappe raster di input è due"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Creazione dei file di supporto per la mappa raster <%s>"
@@ -33038,41 +34784,6 @@ msgstr "Mappa(e) raster da leggere"
 msgid "Converts a raster map into a vector map."
 msgstr "Converte un raster in una mappa vettoriale."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr ""
-"Nome della colonna della tabella degli attributi da utilizzare per le "
-"etichette"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Quale raster necessita una tabella dei colori"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Le statistiche estese attualmente sono supportate solo per punti/centroidi"
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Non costruisce la topologia"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -33585,10 +35296,6 @@ msgstr ""
 msgid "Advanced"
 msgstr "Avanzato"
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr ""
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr "Mostra le etichette delle celle"
@@ -33876,7 +35583,7 @@ msgstr "Genera superfici casuali con dipendenza spatiale."
 msgid "Name for output raster map(s)"
 msgstr "Nome della mappa/e raster di output"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Distanza massima della correlazione spaziale (valore >= 0.0)"
 
@@ -33900,7 +35607,7 @@ msgstr ""
 msgid "Uniformly distributed cell values"
 msgstr "Valori delle celle distribuiti uniformemente"
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Generazione della mappa raster <%s> in corso..."
@@ -34239,7 +35946,7 @@ msgstr "Calcola l'indice di diversità di posizione dominante su un raster"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34265,7 +35972,7 @@ msgstr "Sto disegnando ..."
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "File di configurazione"
@@ -34284,7 +35991,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Sto disegnando ..."
@@ -34430,7 +36137,7 @@ msgstr ""
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Calcola l'indice di diversità di Shannon su una mappa raster"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 
@@ -34628,11 +36335,11 @@ msgid "Could not read maximum distance. Aborting."
 msgstr ""
 "Impossibile leggere la distanza massima. L'operazione verrà interrotta."
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr ""
@@ -34876,12 +36583,52 @@ msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 "Modalità 2: radiazione giornaliera integrata per un dato giorno dell'anno"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Costante di incremento della diffusione"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Scrittura della mappa raster <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Mappa <%s> non valida"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Si stanno utilizzando le coordinate del centro della mappa: %f %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Scrittura della mappa raster <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Si stanno utilizzando le coordinate del centro della mappa: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Scrittura della mappa raster <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 "Se si usa -s e nessun raster dell'orizzonte, il numpartitions dev'essere=1"
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -34889,11 +36636,11 @@ msgstr ""
 "Per risparmiare memoria e usare l'ombreggiatura si devono usare orizzonti "
 "precalcolati"
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr "Devono essere fornite entrambe le mappe latin e longin, oppure nessuna"
 
@@ -34919,84 +36666,95 @@ msgstr "Decomprime la mappa"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Stampa le informazioni sulla proiezione nello stile script shell"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "raster <%s> non trovato"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 "[%s] è un file di riclassificazione della mappa <%s> nel mapset <%s> - non "
 "può essere decompresso"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 "[%s] è un file di riclassificazione della mappa <%s> nel mapset <%s> - non "
 "può essere compresso"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] è una mappa collegata con GDAL - non può essere (de)compressa"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "FATTO: il file decompresso è %lu byte più piccolo"
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "FATTO: il file compresso è %lu byte più piccolo"
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "FATTO: il file decompresso è %lu byte più grande"
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "FATTO: il file compresso è %lu byte più grande"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "area"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] già decompresso"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] già compresso"
+msgid "Uncompressing <%s>"
+msgstr "Codifica carattere"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%s COMPRESS [%s]"
+msgid "Re-compressing <%s>"
+msgstr "Codifica carattere"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Codifica carattere"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] è una mappa collegata con GDAL - non può essere (de)compressa"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 "[%s] è un file di riclassificazione della mappa <%s> nel mapset <%s> - non "
 "può essere compresso"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35028,51 +36786,51 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "File <%s> non trovato"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Filtro"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Dev'essere fornita una delle opzione -h o rows= e cols="
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Opzione <%s> richiesta"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "file vettoriale da creare"
@@ -35494,20 +37252,25 @@ msgstr[1] "Calcolo dei centroidi per le aree in corso..."
 msgid "Calculating %s"
 msgstr "Non riesco a trovare il file raster %s"
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr "La distanza dev'essere >= 0.0"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Creazione"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Genera valori di celle casuali con dipendenza spaziale"
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Numero massimo di colonne da caricare"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35647,7 +37410,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr "Spessore della linea vettoriale"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Colore della griglia"
 
@@ -35770,14 +37533,10 @@ msgid "Starting and ending coordinates"
 msgstr ""
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Colore della linea"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Colore del testo o  \"none\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -35806,8 +37565,8 @@ msgid "Name of monitor to start"
 msgstr "Nome del monitor grafico da avviare"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -35869,49 +37628,67 @@ msgstr "Stampa il nome del monitor attualmente selezionato"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Stampa il nome del monitor attualmente selezionato"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Stampa il nome del monitor attualmente selezionato"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Stampa il nome del monitor attualmente selezionato"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Non è possibile leggere il colore"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Nome del file di output non valido"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 #, fuzzy
 msgid "Currently selected monitor:"
 msgstr "Stampa il nome del monitor attualmente selezionato"
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Nessun monitor selezionato"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Devono essere fornite sia l'opzione 'from_table' che 'select' "
@@ -35921,65 +37698,75 @@ msgstr "Devono essere fornite sia l'opzione 'from_table' che 'select' "
 msgid "Monitor <%s> is not running"
 msgstr "Errore - Il monitor '%s' non è avviato"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "File di celle non trovato"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Impossibile creare il file <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "File di celle non trovato"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "impossibile aprire <%s>"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Impossibile creare il file <%s>"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Il file '%s' esiste già e verrà sovrascritto."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Non riesco ad impostare user/password"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Mappa in output"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Errore - Il monitor '%s' non è avviato"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Impossibile creare il file <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Scrittura della mappa vettoriale <%s> in corso ..."
 
-#: ../display/d.mon/start.c:163
-#, fuzzy, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "Imposto il nome della mappa a <%s> che sovrascrive <%s>"
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Impossibile leggere il file dei colori"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Monitor <%s> è in uso da un altro utente"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Mostra di tutti i monitor"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 #, fuzzy
 msgid "No monitors running"
 msgstr "Errore - Il monitor '%s' non è avviato"
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "File di celle non trovato"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Non riesco ad aprire il cellfile per [%s]"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Impossibile leggere il file dei colori"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Non riesco a trovare il file raster %s"
 
 #: ../display/d.erase/main.c:33
 msgid ""
@@ -36086,12 +37873,12 @@ msgstr "Nome del raster map in output"
 msgid "[%s]: illegal value specified"
 msgstr "Nome del raster map in output"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Stampa solo il tipo di mappa raster"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -36100,16 +37887,34 @@ msgstr ""
 "Sovrappone i valori di categoria delle celle su un tematismo raster "
 "visualizzato sul monitor grafico"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Punti di partenza del file raster"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Nome del raster"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Percorso del file del font"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36117,7 +37922,7 @@ msgstr[0] "Colore della griglia"
 msgstr[1] "Colore della griglia"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36125,7 +37930,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36202,10 +38007,6 @@ msgstr "Colore di riempimento dell'area"
 msgid "Colorize features according color definition column"
 msgstr "Nome della colonna"
 
-#: ../display/d.vect/main.c:129
-msgid "Color definition in R:G:B form"
-msgstr ""
-
 #: ../display/d.vect/main.c:133
 #, fuzzy
 msgid "Colorize point or area features according to z-coordinate"
@@ -36216,7 +38017,7 @@ msgstr "Colora i poligoni in base a seconda dell'altezza z"
 msgid "Lines"
 msgstr "Linee"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Spessore di linea"
 
@@ -36764,39 +38565,39 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Utilizzando le coordinate del centro della mappa\n"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr ""
 "Seleziona il tipo di carattere con cui il testo deve essere rappresentato "
 "nel monitor grafico dell'utente."
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Mostra il rettangolo dello schermo (sinistra, destra, alto, basso)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Mostra le dimensioni dello schermo (larghezza, altezza)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Mostra il rettangolo di cornice attivo"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Mostra le dimensioni dello schermo (larghezza, altezza)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Mostra il rettangolo dello schermo della regione corrente"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 #, fuzzy
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr "Mostra le coordinate geografiche e la risoluzione dell'intero schermo"
@@ -37059,14 +38860,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Percorso del file del font"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "File di input"
@@ -37129,7 +38922,7 @@ msgstr "Tipo di grafico"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Proprietà del grafico"
 
@@ -37167,12 +38960,22 @@ msgstr "Centra la barra del grafico vicino a un punto dei dati"
 msgid "Maximum value used for bar plot reference"
 msgstr "Valore massimo usato per riferimento nel plot della barra"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Crea output 3D"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37215,14 +39018,7 @@ msgstr "Sottoinsieme"
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Nome del raster"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37304,11 +39100,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -37322,37 +39119,93 @@ msgstr "Mostra una barra di scala nel monitor dei grafici"
 msgid "North arrow style"
 msgstr "Colore della Freccia del Nord"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Le coordinate di schermo per l'angolo in alto a sinistra dell'etichetta "
 "([0,0] è il punto in alto a sinistra della cornice)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Colore del margine"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Disegna solo la barra della scala"
@@ -37369,68 +39222,68 @@ msgstr "Impossibile aprire la mappa %s"
 msgid "Could not read symbol \"%s\""
 msgstr "Non riesco a leggere da <%s>"
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Nome della mappa raster delle esposizioni da visualizzare"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "nessuno"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "nessuno"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 "Mappa raster che contiene i valori utilizzati per la lunghezza della freccia"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Valore per il fattore di scala non valido"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr ""
 
@@ -37708,55 +39561,41 @@ msgstr "File category per [%s] non disponibile"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Mappa raster <%s> non trovata nel mapset corrente"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Sottogruppo <%s> non trovato nel gruppo <%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "La mappa raster <%s> non esiste nel sottogruppo <%s>"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "Nessun raster trovato"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Il sottogruppo <%s> non ha nessuna mappa raster"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Il sottogruppo <%s> ha solo 1 mappa raster"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Il sottogruppo deve avere almeno 2 mappe raster"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Impossibile leggere il file di firma <%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s> ha troppe firme (il limite è 255)"
@@ -37829,207 +39668,221 @@ msgstr "Numero minimo di pixel in una classe"
 msgid "Name for output file containing final report"
 msgstr "Nome del file di output contenente il report finale"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Mappa raster <%s> non trovata nel mapset corrente"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Sottogruppo <%s> non trovato nel gruppo <%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Numero di classi iniziali non valido (%s)"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Valore(i) di intervalli campione non valido (%s)"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Valore di iterazioni non valido  (%s)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Valore di convergenza non valido  (%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Valore di separazione non valido (%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### CLUSTER (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Location: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:    %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Gruppo:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Sottogruppo: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Impossibile leggere il file di firma <%s>"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Regione\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Nord: %12.2f Est: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Sud: %12.2f Ovest:%12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Risoluzione: %12.2f Risoluzione: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Righe: %12d Colonne: %12d Celle: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Mapset:    %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Parametri"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " Numero di classi iniziali:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr " Numero massimo di iterazioni: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "Lettura dei raster in corso..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Dimensione delle etichette (in punti)"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "######## iterazione %d ###########\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 "#################### CLUSTER (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38343,8 +40196,8 @@ msgid "radiance"
 msgstr "radianza"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr "riflettanza"
 
@@ -38518,7 +40371,7 @@ msgstr "Fattore di scala per l'elevazione"
 #: ../imagery/i.landsat.toar/main.c:222
 msgid "Output at-sensor radiance instead of reflectance for all bands"
 msgstr ""
-"Dà in output la radianza al sensore invece che la riflettanza, per tutte le "
+"Dà in ouput la radianza al sensore invece che la riflettanza, per tutte le "
 "bande"
 
 #: ../imagery/i.landsat.toar/main.c:227
@@ -38710,358 +40563,403 @@ msgstr "Gruppo <%s> non esiste"
 msgid "group <%s> references the following subgroups\n"
 msgstr "Il sottogruppo <%s> non ha nessuna mappa raster"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 #, fuzzy
 msgid "imagery quality assessment"
 msgstr "immagini, gestione delle mappe"
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Nome della mappa raster"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Risoluzione"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Estrae parametri di controllo della qualità da layer MODIS QC."
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 msgid "Name for output QC type classification layer"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr "Nome del tipo di prodotto MODIS"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 msgid "Name of QC type to extract"
 msgstr "Nome del tipo di QC da estrarre"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Visualizza il raster della direzione"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 #, fuzzy
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr "Flag disponibile solo per prodotti MOD09Q1 @ 250m"
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 #, fuzzy
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr "Flag disponibile solo per prodotti MOD09A1s @ 500m"
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 #, fuzzy
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr "Flag disponibile solo per prodotti MOD11A2 @ 1Km"
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 #, fuzzy
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr "Flag disponibile solo per prodotti MOD11A2 @ 1Km"
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+#, fuzzy
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr "Flag disponibile solo per prodotti MOD09Q1 @ 250m"
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39258,7 +41156,7 @@ msgstr "Mappa di allenamento di verità al suolo"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Massimo numero di sotto-firme per ogni classe"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Numero di sotto-firme per classe non valido (%s)"
@@ -39609,111 +41507,117 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Fuori memoria massima"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+#, fuzzy
+msgid "object recognition"
+msgstr "Nome del raster"
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Errore nella lettura dei dati"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Sto disegnando ..."
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Errore nella scrittura dei dati"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Numero di punti da creare"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Operazione non implementata"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Sto disegnando ..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Eseguendo il primo passaggio..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 "La dimensione della regione è inferiore rispetto al valore di minreg, non "
 "verrà visualizzato nulla."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "Il file dig_att esiste già"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Deseleziona"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-#, fuzzy
-msgid "object recognition"
-msgstr "Nome del raster"
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Errore nella lettura dei dati"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Sto disegnando ..."
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Errore nella scrittura dei dati"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Numero di punti da creare"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Sto disegnando ..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -39787,63 +41691,80 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Il valore di soglia dev'essere >= 0"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Impossibile aprire la mappa di elevazione"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Metodo non valido: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Opzione <%s> richiesta!"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Opzione <%s> richiesta!"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Opzione <%s> richiesta!"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s: mappa raster di base non trovata"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Mappa raster risultante"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Una o più mappe raster di input non è stata trovata"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr " Numero massimo di iterazioni: %d\n"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 msgid "Invalid number of MB, 300 will be used"
 msgstr ""
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Operazione non implementata"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -39909,7 +41830,7 @@ msgstr "Nome del raster di output (verde)"
 msgid "Name for output raster map (blue)"
 msgstr "Nome del raster di output (blu)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -39961,7 +41882,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -40796,51 +42717,55 @@ msgstr "Gruppo [%s] non trovato"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Opzione <%s> richiesta"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "File di input"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Nome della mappa con il risultato"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Mostra il titolo del file raster"
@@ -41122,6 +43047,11 @@ msgstr "Nome del raster"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "Eseguire i.target per il gruppo"
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41514,13 +43444,37 @@ msgstr "Nome del raster di output (intensità)"
 msgid "Name for output raster map (saturation)"
 msgstr "Nome del raster di output (saturazione)"
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> esiste già"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Non è possibile impostare la proiezione"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] già compresso"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Non è possibile impostare la proiezione"
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "%s COMPRESS [%s]"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "raster <%s> non trovato"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Numero di layer"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Coordinate del punto seed"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr ""
+#~ "Stampa l'output sullo stdout, non aggiorna la tabella degli attributi"
 
 #, fuzzy
 #~ msgid "time series"
@@ -41566,107 +43520,49 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgid "Number of quartals to use"
 #~ msgstr "Numero di livelli di quantizzazione"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr ""
-#~ "Nome della mappa raster di input contenente le latitudini [gradi decimali]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr ""
-#~ "Nome della mappa raster di input contenente le longitudini [gradi "
-#~ "decimali]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Mappa raster di output della radiazione diffusa, istantanea [W.m-2] "
-#~ "(modalità 1) o cumulata [Wh.m-2.giorno-1] (modalità 2)"
+#~ msgid "Location: %s\n"
+#~ msgstr "Location: %s\n"
 
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Mappa raster di output della radiazione riflessa, istantanea [W.m-2] "
-#~ "(modalità 1) o cumulata [Wh.m-2.giorno-1] (modalità 2)"
+#~ msgid " %s\n"
+#~ msgstr " %s\n"
 
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Mappa raster di output della radiazione globale (totale), istantanea [W."
-#~ "m-2] (modalità 1) o cumulata [Wh.m-2.giorno-1] (modalità 2)"
+#~ msgid "Region\n"
+#~ msgstr "Regione\n"
 
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nome del file raster in input"
+#~ msgid "Subregion"
+#~ msgstr "Sottoregione"
 
 #, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nome del file raster in input"
+#~ msgid "Could not rewind input file"
+#~ msgstr "Impossibile aprire il file di output <%s>"
 
 #, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Mappa raster di output della radiazione riflessa, istantanea [W.m-2] "
-#~ "(modalità 1) o cumulata [Wh.m-2.giorno-1] (modalità 2)"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Nome della mappa raster"
 
 #, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
+#~ msgid "Raster map containing midflame wind velocitys (ft/min)"
 #~ msgstr ""
-#~ "Mappa raster di output della radiazione globale (totale), istantanea [W."
-#~ "m-2] (modalità 1) o cumulata [Wh.m-2.giorno-1] (modalità 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Numero di punti per l'interpolazione"
+#~ "Nome della mappa raster che contiene la griglia con le informazioni del "
+#~ "costo"
 
 #, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Sovrascrive la proiezione (usa la proiezione della location)"
-
-#~ msgid "Location: %s\n"
-#~ msgstr "Location: %s\n"
-
-#~ msgid " %s\n"
-#~ msgstr " %s\n"
-
-#~ msgid "Region\n"
-#~ msgstr "Regione\n"
-
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "option <%s>:<%s> esiste."
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> esiste già nel mapset <%s>"
 
 #, fuzzy
 #~ msgid "output map <%s> exists"
 #~ msgstr "Mappa in output"
 
-#, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Nome della tabella in output"
-
-#, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Nome della mappa raster"
-
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Lunghezza pagina (default: %d lines)"
 
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Larghezza pagina (default: %d caratteri)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Sovrascrive la proiezione (usa la proiezione della location)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -41690,6 +43586,13 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgid "[%s] not found"
 #~ msgstr "[%s] non trovato"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "option <%s>:<%s> esiste."
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr ""
+#~ "Sovrascrive la proiezione del dataset (utilizza quella della location)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.external to override this check and use the "
@@ -41699,6 +43602,18 @@ msgstr "Nome del raster di output (saturazione)"
 #~ "Si può utilizzare il flag -o a r.external per sovrascrivere questo "
 #~ "controllo e utilizzare la definizione della location per il dataset.\n"
 
+#, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Displays GRASS version info."
+#~ msgstr "Visualizza informazioni sulla versione e sul copyright"
+
 #~ msgid "Location name (not location path)"
 #~ msgstr "Nome della location (non il percorso della location)"
 
@@ -41709,6 +43624,17 @@ msgstr "Nome del raster di output (saturazione)"
 #~ "situata)"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Non è possibile impostare la proiezione"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Converte tutte le versioni più  vecchie delle mappe vettoriali di GRASS "
+#~ "del mapset corrente nel formato corrente"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Aggiorna i metadati della mappa vettoriale"
 
@@ -41744,119 +43670,58 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgid "No default DB driver defined"
 #~ msgstr "Il driver predefinito non è impostato"
 
+#~ msgid "OGR datasource name"
+#~ msgstr "Nome dell'origine dati OGR"
+
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s> esiste già nel mapset <%s>"
+#~ msgid "flowline"
+#~ msgstr "linea"
 
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
+#, fuzzy
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
 #~ msgstr ""
-#~ "Converte tutte le versioni più  vecchie delle mappe vettoriali di GRASS "
-#~ "del mapset corrente nel formato corrente"
+#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
+#~ "o \"rules\"!"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Nessun nome di mappa assegnato"
 
 #, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Impossibile leggere il file REF per il gruppo <%s>"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Impossibile creare il file <%s>"
 
 #, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d categrie caricate dalla tabella <%s>"
+#~ msgid "Starting monitor <%s> with env file '%s'"
+#~ msgstr "Imposto il nome della mappa a <%s> che sovrascrive <%s>"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Devono essere fornite sia l'opzione 'from_table' che 'select' "
+#~ msgid "Env file not found"
+#~ msgstr "File di celle non trovato"
 
 #, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+#~ msgid "PID file not found"
+#~ msgstr "File di celle non trovato"
 
 #, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+#~ msgid "Command file not found"
+#~ msgstr "File di celle non trovato"
 
 #, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Per piacere specificare la colonna delle z"
+#~ msgid "Name for output image"
+#~ msgstr "Nome del file in output"
 
 #, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Devono essere fornite sia l'opzione 'from_table' che 'select' "
-
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "weight= e -c sono mutuamente esclusivi"
-
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "weight= e gauss= sono mutuamente esclusivi"
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Per piacere specificare la colonna delle z"
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Per piacere specificare la colonna delle z"
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Per piacere specificare la colonna delle z"
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Per piacere specificare la colonna delle z"
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
-#~ "o \"rules\"!"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "O un nome di colore standard o una tripletta R:G:B"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Impossibile leggere il file REF per il gruppo <%s>"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Nome della mappa/e raster di output"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d categrie caricate dalla tabella <%s>"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Errore di discretizzazione in unità di mappa"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Nome di un file vettoriale in output"
 
 #~ msgid "Displays thematic vector map"
 #~ msgstr "Visualizza mappa vettoriale tematica"
@@ -41933,12 +43798,18 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgstr "Usa le parentesi con notazione matematica nella legenda"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Nome di un file vettoriale in output"
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Nome della mappa/e raster di output"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Visualizza"
+#~ msgid "Default: input"
+#~ msgstr "Errore di discretizzazione in unità di mappa"
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "Colore del testo o  \"none\""
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "O un nome di colore standard o una tripletta R:G:B"
 
 #, fuzzy
 #~ msgid ""
@@ -41947,17 +43818,26 @@ msgstr "Nome del raster di output (saturazione)"
 #~ "Consente la creazione o la modifica dei file di supporto di un tematismo "
 #~ "raster"
 
-#, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Non è possibile leggere la mappa vettoriale"
+#~ msgid "Attaching categories..."
+#~ msgstr "Assegnazione delle categorie in corso..."
 
-#, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Non è possibile creare la tabella: %s"
+#~ msgid "Writing new file..."
+#~ msgstr "Scrittura del nuovo file in corso..."
 
-#, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Memoria insufficiente"
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "Scritti [%d] punti e linee nel file di output."
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "Scritti [%d] centroidi nel file di output."
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importa vecchie versione di vettori GRASS"
+
+# FINIRE
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "Nessuna etichetta di categoria trovata (dig_cats), non è stata creata "
+#~ "nessuna tabella"
 
 #~ msgid "[%d] points read and written to output"
 #~ msgstr "[%d] punti letti e scritti sull'output"
@@ -41980,66 +43860,29 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgid "[%d] dead point categories skipped"
 #~ msgstr "[%d] punti senza categoria non considerati"
 
-# FINIRE
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "Nessuna etichetta di categoria trovata (dig_cats), non è stata creata "
-#~ "nessuna tabella"
-
-#~ msgid "Attaching categories..."
-#~ msgstr "Assegnazione delle categorie in corso..."
-
-#~ msgid "Writing new file..."
-#~ msgstr "Scrittura del nuovo file in corso..."
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "Scritti [%d] punti e linee nel file di output."
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "Scritti [%d] centroidi nel file di output."
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importa vecchie versione di vettori GRASS"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "Tipo di mappa raster sconosciuta"
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Dimensione della memoria cache (MiB)"
-
 #~ msgid "One or more coordinates"
 #~ msgstr "Una o più coordinate"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Memoria non sufficiente per adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Memoria non sufficiente per ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Memoria non sufficiente per adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Memoria non sufficiente per adyy"
+#~ msgid "Name of elevation map"
+#~ msgstr "Nome della mappa di elevazione"
 
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Memoria non sufficiente per adxy"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Stringa per rappresentare celle senza valore"
 
-#~ msgid "sites"
-#~ msgstr "siti"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Metrica sconosciute [%s]."
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Nome del layer da utilizzare per INTENSITÀ"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Errore nella lettura del file delle categorie per <%s>"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Nome del layer da utilizzare per SATURAZIONE"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Errore nella lettura del file dei colori per <%s>"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Nome della mappa/e raster per l'elevazione"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Stringa per rappresentare il valore della cella senza dati"
 
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "Tabella da esportare o stringa di connessione al Database"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Strumento  per l'interpolazione delle superfici di un raster"
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -42058,15 +43901,18 @@ msgstr "Nome del raster di output (saturazione)"
 #~ "rappresentano l'elevazione, combinata con un tematismo raster di input i "
 #~ "cui valori di categoria delle celle rappresentano il costo di attrito."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Nome del layer da utilizzare per INTENSITÀ"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Nome del layer da utilizzare per SATURAZIONE"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Nome del raster in output da utilizzare per il verde (GREEN)"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Nome del raster in output da utilizzare per il blu (BLUE)"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Strumento  per l'interpolazione delle superfici di un raster"
-
 #~ msgid "Surface generation program."
 #~ msgstr "Programma per la generazione di superfici"
 
@@ -42087,50 +43933,12 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgstr[0] "Interpolazione in corso della mappa raster <%s>... %d righe..."
 #~ msgstr[1] "Interpolazione in corso della mappa raster <%s>... %d righe..."
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "Proiezione lat/lon non supportata"
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Location: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "Mappa raster risultante"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "Nome della mappa di elevazione"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Stringa per rappresentare celle senza valore"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
-#~ "o \"rules\"!"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
-#~ "o \"rules\"!"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Metrica sconosciute [%s]."
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Errore nella lettura del file delle categorie per <%s>"
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Errore nella lettura del file dei colori per <%s>"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Stringa per rappresentare il valore della cella senza dati"
-
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "Mappa delle esposizioni (o fy) di output"
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "Proiezione lat/lon non supportata"
+
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "Prefisso per la mappa/e raster di output"
 
@@ -42158,8 +43966,11 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgstr "Non mostrare gli avvertimenti"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Campo separatore in output"
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Nome della mappa/e raster per l'elevazione"
+
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "Tabella da esportare o stringa di connessione al Database"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -42186,6 +43997,97 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgstr "Nome per la mappa raster di output (predefinito: input)"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Calcola le statistiche univariate per le celle non nulle di un raster"
+
+#~ msgid "Invalid distance"
+#~ msgstr "Distanza non valida"
+
+#~ msgid "Layer number"
+#~ msgstr "Numero del layer"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Location: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "Mappa raster risultante"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Per piacere specificare la colonna delle z"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Devono essere fornite sia l'opzione 'from_table' che 'select' "
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Per piacere specificare la colonna delle z"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Per piacere specificare la colonna delle z"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Per piacere specificare la colonna delle z"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Per piacere specificare la colonna delle z"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Visualizza"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Devono essere fornite sia l'opzione 'from_table' che 'select' "
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "weight= e -c sono mutuamente esclusivi"
+
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "weight= e gauss= sono mutuamente esclusivi"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Campo separatore in output"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Nome della mappa raster d'inserimento dati"
 
@@ -42197,15 +44099,68 @@ msgstr "Nome del raster di output (saturazione)"
 #~ msgid "No maps output"
 #~ msgstr "Nessuna mappa di output"
 
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Memoria non sufficiente per adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Memoria non sufficiente per ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Memoria non sufficiente per adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Memoria non sufficiente per adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Memoria non sufficiente per adxy"
+
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Non è possibile creare la tabella: %s"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Memoria insufficiente"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
 #~ msgstr ""
-#~ "Calcola le statistiche univariate per le celle non nulle di un raster"
+#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
+#~ "o \"rules\"!"
 
-#~ msgid "Invalid distance"
-#~ msgstr "Distanza non valida"
+#~ msgid "sites"
+#~ msgstr "siti"
 
-#~ msgid "Layer number"
-#~ msgstr "Numero del layer"
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Non è possibile leggere la mappa vettoriale"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Dimensione della memoria cache (MiB)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "Tipo di mappa raster sconosciuta"
+
+#, fuzzy
+#~ msgid "File '%s' already exists and will be overwritten"
+#~ msgstr "Il file '%s' esiste già e verrà sovrascritto."
+
+#, fuzzy
+#~ msgid "Flags -%c and -%c are mutually exclusive"
+#~ msgstr "I flag -g e -a sono mutualmente esclusivi"
+
+#, fuzzy
+#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
+#~ "o \"rules\"!"
+
+#, fuzzy
+#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Dev'essere specificato \"-i\" o \"-r\", o le opzioni \"color\", \"rast\" "
+#~ "o \"rules\"!"
diff --git a/locale/po/grassmods_ja.po b/locale/po/grassmods_ja.po
index 846f8db..b6c3179 100644
--- a/locale/po/grassmods_ja.po
+++ b/locale/po/grassmods_ja.po
@@ -13,7 +13,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_ja\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2012-03-08 17:49+0900\n"
 "Last-Translator: taniguchi <taniguti at apptec.co.jp>\n"
 "Language-Team: Japanese <grass-translations at lists.osgeo.org>\n"
@@ -256,6 +256,7 @@ msgstr "入力するファイル"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -491,6 +492,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "エラー:ASCIIファイルを閉じれません"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -630,28 +636,28 @@ msgstr "出力するファイル"
 msgid "Unable to open database:"
 msgstr "データベースを開けません:"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 msgid "SQLite database connection is still busy"
 msgstr "データベース接続は定義されていません"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> すでに存在します"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "表を作成できません: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "マップセット <%s> 見つかりませんでした"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -662,6 +668,11 @@ msgstr "索引を作成できません"
 msgid "Unable grant on table:"
 msgstr "表をコピーできません "
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "入力するファイル"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -792,7 +803,7 @@ msgstr "データベース <%s> を開けません"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -871,17 +882,17 @@ msgstr "名前"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "設定 "
 
@@ -893,7 +904,7 @@ msgstr "経過 %d...  "
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "フォント名"
+msgstr "テスト名"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -916,39 +927,39 @@ msgstr "現在の接続パラメータを出力して終了"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -993,7 +1004,7 @@ msgstr "全データベースドライバーのリスト"
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1023,7 +1034,7 @@ msgstr "���"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1115,10 +1126,10 @@ msgid "Unable to open database <%s>"
 msgstr "データベース <%s> を開けません"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1304,11 +1315,11 @@ msgstr "失敗しました"
 msgid "succeeded"
 msgstr "成功しました"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "ファイル <%s> を開けません"
@@ -1343,10 +1354,10 @@ msgstr "'query'オプションに使用される属性列名"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "フォーマット"
 
@@ -1355,7 +1366,7 @@ msgstr "フォーマット"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "出力鉛直レコード分離"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1363,7 +1374,7 @@ msgstr "出力鉛直レコード分離"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "出力ファイル名 (省略または \"-\" で標準出力)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "出力に列名は含めません"
 
@@ -1371,7 +1382,7 @@ msgstr "出力に列名は含めません"
 msgid "Describe query only (don't run it)"
 msgstr "検索クエリーのみを表示(実行しないでください)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "鉛直出力 (水平出力の代わりに)"
 
@@ -1422,6 +1433,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "SQL文を含むファイル名"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "SQLのエラーを無視し、続行  "
 
@@ -1595,7 +1607,6 @@ msgstr "出力を90度回転"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1718,7 +1729,7 @@ msgstr "テーブルからデータをロードできません"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1726,15 +1737,15 @@ msgstr "テーブルからデータをロードできません"
 msgid "Error in pj_do_proj"
 msgstr "pj_do_proj の誤差 "
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "現在のロケーションの投影キー値を取得できません"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1824,7 +1835,7 @@ msgstr "ポストスクリプト マスクの一時ファイルを作成でき
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1870,7 +1881,7 @@ msgstr "ベクトルマップのレイヤー情報を取得できません"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1883,26 +1894,27 @@ msgstr "ベクトルマップのレイヤー情報を取得できません"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "ドライバー <%s>ではデータベース <%s> が開けません"
@@ -1912,7 +1924,8 @@ msgid "Column type not supported (must be string)"
 msgstr "列の型がサポートされていません (文字列のはずです)  "
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2055,13 +2068,13 @@ msgstr "ポストスクリプト マスクの一時ファイルを開けませ
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2069,8 +2082,8 @@ msgstr "ポストスクリプト マスクの一時ファイルを開けませ
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2114,10 +2127,11 @@ msgstr "補間に用いる近傍点"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2131,13 +2145,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2146,6 +2163,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2161,7 +2179,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2181,11 +2199,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2197,27 +2215,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2235,74 +2253,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "ラスター"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2312,6 +2333,7 @@ msgstr "ラスター"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2327,6 +2349,7 @@ msgstr "ラスター"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2345,6 +2368,7 @@ msgid "vector"
 msgstr "ベクトル"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2353,15 +2377,16 @@ msgstr "ベクトル"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2399,7 +2424,7 @@ msgstr "視点の高さが指定されない場合の計算値 %.0f"
 msgid "Unsupported output format"
 msgstr "出力する形式はサポートされていません"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "ファイル <%s> が作成されました"
@@ -2965,69 +2990,70 @@ msgid "Vector map <%s> not found"
 msgstr "ベクトルマップ <%s> が見つかりません"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "ベクトルマップ <%s> を開けません"
@@ -3091,12 +3117,13 @@ msgstr "作動しているコントロールポイントはありません"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3223,7 +3250,7 @@ msgstr "x係数のマップ"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3389,7 +3416,7 @@ msgid "Area:"
 msgstr "エリア\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "属性を書き込んでいます"
@@ -3404,7 +3431,7 @@ msgstr "曲面 %d の地勢属性がありません"
 msgid "No attribute table for layer %d"
 msgstr "属性テーブルが必要です"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3417,15 +3444,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "ドライバー <%s>ではデータベース <%s> が開けません"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "テーブル <%s> に対する特権はありません"
@@ -3448,6 +3476,7 @@ msgid ""
 msgstr "centrality measures を計算しています..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3456,6 +3485,7 @@ msgid "extract"
 msgstr "対象マップ"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3466,10 +3496,10 @@ msgstr "選択"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "ファイルの種類"
@@ -3495,12 +3525,11 @@ msgstr "表をコピーしないでください ( '新しい' パラメーター
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "属性"
 
@@ -3519,39 +3548,45 @@ msgstr "逆選択"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3567,7 +3602,10 @@ msgstr "逆選択"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3639,7 +3677,7 @@ msgstr "無視されたテキストエントリー: %s  "
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3692,45 +3730,46 @@ msgstr ""
 "ランダムカテゴリー数は ユニーク \"%s\" フィーチャカテゴリー数 %d より大きいま"
 "たは等しい"
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3772,11 +3811,11 @@ msgstr "キーカラム"
 msgid "Format <%s> does not support writing"
 msgstr "対象マップ"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3930,9 +3969,9 @@ msgstr "入力するファイル名;(\"-\" で標準入力から読込) "
 msgid "Name for output file where to save current settings"
 msgstr "最終レポートを含む出力ファイル名"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "使用可能なフォーマットの一覧を表示して終了"
 
@@ -3954,7 +3993,7 @@ msgstr "現在のマップセットを表示 "
 msgid "Print current status in shell script style"
 msgstr "シェルスクリプトスタイルの統計を出力します"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "エラー 2029 "
@@ -3970,18 +4009,18 @@ msgid "%s= must be specified"
 msgstr "2つのレイヤーが指定されなくてはいけません"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "サポートされているフォーマット:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3992,66 +4031,67 @@ msgstr "サポートされているフォーマット:\n"
 msgid "network"
 msgstr "ガンマ"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "ベクトルネットワークの最短経路を探索"
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Arc タイプ"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Arc レイヤー"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Arc タイプ"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "ノードレイヤー"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr "始点と終点を含むファイル名.指定が無い場合は標準入力から読み込む"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Arc 前方/両方向 コスト列 (数)  "
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4063,10 +4103,11 @@ msgstr "Arc 前方/両方向 コスト列 (数)  "
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4078,29 +4119,29 @@ msgstr "Arc 前方/両方向 コスト列 (数)  "
 msgid "Cost"
 msgstr "コントラスト"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Arc 後方コスト列 (数)  "
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "ノードコスト列 (数)"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "ネットワークへの最大距離"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4110,21 +4151,57 @@ msgstr ""
 "つけることができずエラーメッセージを出力します.処理を高速にしたい場合,この"
 "値はできる限り小さくしてください"
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "テーブル"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "レイヤー/テーブル"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "緯度-経度ロケーションに測地線計算を使用します"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 "各経路を一つのラインとしてではなく, 出力をオリジナルの指定セグメントとして書"
 "き込む"
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4133,10 +4210,10 @@ msgstr "現在の投影は経度-緯度ではありません"
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4152,8 +4229,8 @@ msgstr "[%d] の,カテゴリー無しの点(nfield:[%d])"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4182,24 +4259,24 @@ msgstr "テーブルに許可を与えることができません <%s>"
 msgid "Wrong input format: %s"
 msgstr "不正な入力フォーマット: %s  "
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "カテゴリー付きのポイントがありません [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 "カテゴリー付きのポイント [%d] はカテゴリー付きのポイント [%d] から到達できま"
 "せん"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "ポイント %f,%f は ポイント %f,%f から到達できません"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4208,17 +4285,17 @@ msgstr "ポイント %f,%f は ポイント %f,%f から到達できません"
 msgid "Cannot insert new record: %s"
 msgstr "新規レコードがインサートできません: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] 指定フォーマットのエラー"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "[%d] の指定された,カテゴリーのポイントがありません"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "%d の目的地に到達できません (閾値外のポイントを含んでいます)  "
@@ -4229,7 +4306,7 @@ msgstr "%d の目的地に到達できません (閾値外のポイントを
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4239,7 +4316,7 @@ msgstr "%d の目的地に到達できません (閾値外のポイントを
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "対象マップ"
@@ -4293,17 +4370,17 @@ msgid "Unable to get category list <%s>"
 msgstr "カテゴリーリスト <%s> を取得できません"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "必須パラメータ <%s> がありません"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "ベクトルマップ <%s> は既に存在"
@@ -4607,6 +4684,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "初期シグネチャを含むファイル名"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4627,12 +4705,15 @@ msgstr "初期シグネチャを含むファイル名"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4793,11 +4874,11 @@ msgstr "where'  のときレイヤーは0より大きくなくてはいけませ
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "データベース接続はレイヤー %d に定義されていません"
@@ -4933,9 +5014,9 @@ msgid "Remove existing color table"
 msgstr "現在のカラーテーブルを削除"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr "ぶら下がりを削除"
@@ -4998,7 +5079,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5014,8 +5095,7 @@ msgstr "入力するファイル"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "エラー 2029 "
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5041,6 +5121,7 @@ msgid "Color table exists. Exiting."
 msgstr "カラーテーブルは存在します。終了しています。"
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "ベクトルマップ <%s> は 3D ではありません"
@@ -5066,7 +5147,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "ラスターマップ <%s> のカラーテーブルが見つかりません"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5075,13 +5156,14 @@ msgstr "ラスターマップ <%s> のカラーテーブルを読み込めませ
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5112,8 +5194,9 @@ msgstr "フィーチャーを読み込んでいます"
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5158,7 +5241,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "カラーファイルを書き込み中、、、"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "列 <%s> を使用できません"
@@ -5215,6 +5298,7 @@ msgid "Point out of range"
 msgstr "エッジ番号が範囲外です "
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5223,15 +5307,17 @@ msgstr "エッジ番号が範囲外です "
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5327,14 +5413,15 @@ msgstr "���"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "出力"
 
@@ -5465,7 +5552,7 @@ msgstr "az に 割り当てるメモリが足りません "
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "ファイルが作成できません <%s>"
+msgstr "表を作成できません: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5528,15 +5615,15 @@ msgstr "補間方法 "
 msgid "Input failed"
 msgstr "入力に失敗しました"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "%s の失敗"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "temp ファイルのサイズは %d バイトです"
@@ -5580,9 +5667,9 @@ msgstr "平滑化列の列の型はサポートされていません(整数か
 msgid "Point without category"
 msgstr "カテゴリー付きのポイントがありません [%d]"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5611,7 +5698,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "出力するファイル"
+msgstr "線に沿って点を補間"
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5690,9 +5777,9 @@ msgstr "エラー:ASCIIファイルを閉じれません"
 msgid "3D raster map <%s> created"
 msgstr "ラスターマップ <%s> が作成されました"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5703,17 +5790,17 @@ msgstr "新しい行: %s を挿入できません"
 msgid "Init costs from node %d"
 msgstr "ノード %d からの初期コスト"
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "入力するファイル"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "ネットワークまたは与えられた端末のシュタイナー木を作成"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5722,71 +5809,107 @@ msgstr ""
 "注意:このモジュール内で「最小シュタイナー木」 問題はNP困難でヒューリスティッ"
 "クアルゴリズムが使用されました.よってこの結果は参考です"
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "ノードレイヤー (端末に使用されます)  "
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Arcs' コスト列 (両方向)  "
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr "端末上のポイントのカテゴリー (レイヤーは nlayer で指定)  "
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Steiner ポイント数 (-1は全ての可能性)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "ネットワークへの最大距離"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "都市の数: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "端末が足りません (<2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "要求された Steiner ポイント数 > 可能な数"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "入力するポイント数:%d,"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr "ノードの端末 [%d] をノードの端末 [%d] へ連結できません"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr "[%d] (到達不能) ノードを Steiner ポイントの候補リストから除外"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "MST コスト = %f  "
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "[%d] を探索. Steiner ポイント"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 "ノード [%d] の Steiner ポイントが端末に追加されました (MST コスト = %f)  "
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "Steiner ポイントが見つかりません -> サイクルを離れます"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Steiner ポイント数 (-1は全ての可能性)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "MST コスト = %f  "
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5806,18 +5929,20 @@ msgstr "Steiner ポイントが見つかりません -> サイクルを離れま
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "入力するファイル"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "フォント"
@@ -5850,9 +5975,9 @@ msgstr "y座標を含む列名"
 msgid "Name of column containing z coordinate"
 msgstr "z座標を含む列名"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "3D出力"
 
@@ -5901,7 +6026,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "選択カーソルを開けません: '%s'"
@@ -5919,7 +6044,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "x/y/z 列は整数または倍精度でなければなりません  "
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "属性をコピーしています"
@@ -5945,7 +6070,85 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "ベクトルマップに書き込まれたポイント. %d  "
 msgstr[1] "ベクトルマップに書き込まれたポイント. %d  "
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"データセットの投影は現在のロケーションに適合していません.\n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO は:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "インポートしたデータセットの PROJ_INFOは次のとおり :\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"入力データセットから'ロケーション'パラメーターのある新しいロケーションを作成"
+"してください.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr "入力マップ投影情報をチェックのためGRASSフォーマットに変換できません"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "最優先の投影チェック"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "入力データセットと現在領域の投影は整合しているようです"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "「空間」パラメーターには4変数が必要"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "不正なZ座標範囲"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "不明なルールオプション:'%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5968,7 +6171,7 @@ msgstr[1] "ベクトルマップに書き込まれたポイント. %d  "
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5977,7 +6180,7 @@ msgstr[1] "ベクトルマップに書き込まれたポイント. %d  "
 msgid "statistics"
 msgstr "入力するファイル"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6613,8 +6816,8 @@ msgstr "列のタイプ (%s) はサポートされません"
 msgid "Operator '%s' is not supported for type line"
 msgstr "演算子 '%s' はライン種のサポートにありません"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "ベクトルマップを読み込めません"
@@ -6673,12 +6876,12 @@ msgid "Breaking lines..."
 msgstr "ラインを分断中、、、"
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "重複を削除中、、、"
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "ノードの境界をクリーニング中、、、"
 
@@ -6687,11 +6890,11 @@ msgstr "ノードの境界をクリーニング中、、、"
 msgid "Merging lines..."
 msgstr "ラインをバッファー中、、、"
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "島を添付しています、、、"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "エリアセントロイドを計算できません"
 
@@ -6706,12 +6909,13 @@ msgstr "ベクトルマップ <%s> を検索中、、、"
 msgid "Attribute not found"
 msgstr "属性が見つかりません"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "セントロイドを書き込み中、、、"
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "新しいレコード '%s' を挿入できません "
@@ -6790,107 +6994,109 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "���"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "���."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "作成するポイントの数"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "入力ベクトルのポイントを読み込み"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "最小の z ヘイト (zフラッグ または 列名が必要)  "
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "最大の z ヘイト (z フラッグ または 列名)  "
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "入力するファイル"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "ベクトル列を書き込み中、、、"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "カラーテーブルのタイプ"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "3D出力を作成します"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "フィーチャーを選択中、、、"
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "ポイントの数は > 0 でなければなりません (%d 与えられています)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d のフィーチャーが %d の中からベクトルマップ <%s> より選択されました "
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "存在するベクトルマップ名"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "表を作成できません: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "テーブルは2つ以上の列を含めません"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -6898,18 +7104,18 @@ msgstr ""
 "サポートされていない列型は作成されました. このモジュールは整数型と倍精度の列"
 "型のみサポートしています.  "
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "現在の領域内にベクトルマップ <%s> の始点がありません "
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "現在の領域内にベクトルマップ <%s> の始点がありません "
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "ポイントを作成しています "
 
@@ -6954,7 +7160,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "検索される,今あるラスターマップ名"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "検索結果に更新される列"
@@ -6968,80 +7174,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "間隔の代わりに平均値を出力"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "列 <%s> がありません"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "列 <%s> は表 <%s>に見つかりませんでした"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "この列の形式はサポートしていません"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "ラスターのタイプは整数,列のタイプは実数"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr "ラスターのタイプが実数,列のタイプが整数です,一部のデータが消失!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "フィーチャーを読み込んでいます"
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "%d 線 or 境界 found in ベクトルマップ <%s@%s>  "
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "現在の領域外にある %d のポイントがスキップされました"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "カテゴリーなしの %d のポイントがスキップされました"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "カテゴリー %d 以上のポイント(%d),値が'NULL'になります"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d のカテゴリーがベクトルからロードされました"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "ベクトルに %d のカテゴリーの重複があります"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d のカテゴリーがテーブルからロードされました"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "ベクトルの %d のカテゴリーがテーブル内にありません"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d アップデートエラー"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d 記録はアップデートされました"
@@ -7049,14 +7253,14 @@ msgstr "%d 記録はアップデートされました"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "ラスターマップ統計値をアップデートします "
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7146,7 +7350,7 @@ msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr ""
 "ベクトルマップ <%s> はユーザーマップセットにないためアップデートできません"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7204,6 +7408,152 @@ msgstr "カテゴリー付きのポイントがありません [%d]"
 msgid "%d records updated"
 msgstr "%d 記録はアップデートされました"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "データベース接続はレイヤー %d に定義されていません"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "キーカラム"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "値0も抽出対象にする"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "値0も抽出対象にする"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "列 <%s> がありません"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "3Dポイントとしてベクトルポイントを作成する"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "OGRベクトルレイヤーをGRASSベクトルマップに変換します."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "キーカラム"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld カテゴリー"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "キーカラム"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "キーカラム"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "列を追加するレイヤー"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "列は数字でなくてはいけません"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "列"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "カラー定義列の名前 ( -a フラッグとの使用)  "
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "カラー定義ファイル列は指定されていません"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "色を読み込めません"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "z データに指定する縮尺"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "z データに指定する縮尺"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "インポートをこの領域に限定します"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "テーブル"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7239,6 +7589,12 @@ msgstr "色指定列 (%s) にエラー(カテゴリー %d)"
 msgid "Label column was not specified, no labels will be written"
 msgstr "ラベル列が未指定です, ラベルは書き込まれません"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "列 <%s> がありません"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7268,45 +7624,52 @@ msgstr "列 <%s> を使用できません"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d のフィーチャーが %d の中からベクトルマップ <%s> より選択されました "
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr " %d の %d が通りました:  "
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "ベクトルマップ <%s> のエリアで問題を処理,集計中、、、"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "ベクトルマップ <%s> のラインで問題を処理,集計中、、、"
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "ラスターマップを書出.. "
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "ラスターマップをサポートするファイルを作成中..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "use=attr の時だけ,データベースを元に色が更新されます"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "エリアを変換:  %d の %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "ポイント/ラインを変換: %d の %d  "
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7367,16 +7730,18 @@ msgstr "曲面に用いるラスターファイル "
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "-m フラッグで使用する最大メモリ (MB)  "
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "ラスター値に使用する統計"
@@ -7417,7 +7782,7 @@ msgstr "列パラメーターは z 座標と組み合わせることはできま
 msgid "Unknown option '%s'"
 msgstr "不明なオプション '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "エリアを読み込んでいます"
 
@@ -7435,12 +7800,17 @@ msgstr "指定された列を使用できません"
 msgid "Get area %d failed"
 msgstr "エリア %d の取得に失敗しました"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "DXFファイルのインポートに失敗しました"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "セントロイドのないエリア (島は問題ありません)  "
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "カテゴリーなしの,エリアのセントロイド"
 
@@ -7471,11 +7841,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "列名"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "列"
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr "列名"
@@ -7650,23 +8015,23 @@ msgstr "に変換するフィーチャータイプ"
 msgid "Incompatible types"
 msgstr "不適合のタイプ"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr "出力マップに属性テーブルをコピーできませんでした"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 "与えられたノードを接続するサイクルを作成します (巡回セールスマン問題).  "
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7674,79 +8039,85 @@ msgstr ""
 "TSPはNP-hardです, 近似アルゴリズムはこのモジュールによって使用されており作成"
 "されたサイクルは最適ではないかもしれません"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+"ノードにおけるポイント ('都市') のカテゴリー(レイヤーはnlayerによって指定され"
+"ています)  "
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "ノードレイヤー (都市に使用)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Arc 後方コスト列 (数)  "
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "出力ファイル名 (省略または \"-\" で標準出力)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
-"ノードにおけるポイント ('都市') のカテゴリー(レイヤーはnlayerによって指定され"
-"ています)  "
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "ネットワークへの最大距離"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "都市の数: [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "都市が足りません (< 2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "セントロイドを作成中..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "カテゴリー付きのポイントがありません [%d]"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "ポイントの記録がありません (cat = %d)  "
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "目的地 ノード [%d] はノード [%d] から到達不能です  "
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "ファイル <%s> を開けません"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "ライン"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "コスト等値線によってネットを分割します.  "
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7756,7 +8127,7 @@ msgstr ""
 "Splits net to bands between コスト 等値線 (中心からの方向). 中心ノードを開い"
 "てください (コスト >= 0). 中心ノードは計算に使用されています.  "
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7765,50 +8136,50 @@ msgstr ""
 "ネットが割り当てられる中心のカテゴリー (ノード上のポイント), このカテゴリーの"
 "レイヤーは nlayer オプションによって与えられています"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "等値線のコスト "
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr "間違った iso コスト: %f  "
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr "Iso コスト: %f 以前より少ない"
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr "Isoコスト %d: %f  "
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 "コストは十分ではありません, 到達可能なものは全て最初の周波数帯に下がります"
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr "閉じられた ノード (コスト = -1) において中心は無視されました"
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "中心の数: %d (nlayer %d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr "選択されたnlayerに十分な中心ではありません. 何も分配されません.  "
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "中心からのコスト %d を計算しています"
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr "線分を取得できません、セグメントは一線ではありません"
 
@@ -8013,14 +8384,15 @@ msgstr "出力ファイルの上書き"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "出力ファイル名、GPSデバイス名"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "無い場合は標準入力から読み込む"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8044,9 +8416,13 @@ msgstr "無い場合は標準入力から読み込む"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8107,7 +8483,7 @@ msgstr "区切り(簡易表示のときのみ有効)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "小数点以下の有効桁数"
 
@@ -8170,7 +8546,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "ベクトルマップ <%s>  のレイヤー情報を取得できません"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8272,9 +8648,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "入力ファイル <%s> を開けません,エラー %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "テーブル <%s> 、キー <%s> のインデックスを作成できません"
@@ -8862,7 +9239,7 @@ msgstr ""
 "注意: 最初のクラスの最小を含んでいます\n"
 "\n"
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "レイヤー %d  "
@@ -8883,7 +9260,7 @@ msgstr "インバースマトリックスを計算できません"
 msgid "Resolving conflicts..."
 msgstr "コンフリクトを解決しています"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "���%s ..."
@@ -8914,199 +9291,202 @@ msgstr "補間に用いる近傍点"
 
 #: ../vector/v.generalize/main.c:100
 #, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "補間に用いる近傍点"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
-msgstr "%d ライン/境界線は過度な簡素化のため変更されていません"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
+msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "スプライン補間アルゴリズム"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "補間に用いる近傍点"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "一般化アルゴリズム"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "最大許容差値 "
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "Look-ahead パラメーター"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr "douglas_reduction' アルゴリズムの出力におけるポイントの割合  "
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr "最初のポイントに対して計算されたポイントのスライド"
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr "エルミート法における2つの連続するセグメント間の最小角度 "
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "ネットワーク一般化における度閾値"
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr "ネットワーク汎化における近接閾値  "
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "ネットワーク一般化におけるBetweeness 閾値"
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr "スネークアルファパラメーター"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr "スネークベータパラメーター"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "イテレーションの数"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "テーブルをコピーしない"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "未詳のメソッド"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "列 <%s> は表 <%s>に見つかりませんでした"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "ベクトルマップ <%s> を作成できません"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr "データを移動中... "
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr "ベクトルに基づく一般化"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr "属性は'where'オプションに必要とされます, テーブルをコピーしています"
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "一般化 (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "分解能を使用する [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "フォント '%s' はFreeType フォントではありません"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr "メソッド '%s' は前回のポイントを保存していません"
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "メソッド '%s' は前回のポイントを保存していません"
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr "地形を破損する可能性があるため,%d の境界が切り詰められませんでした"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr "%d ライン/境界線は過度な簡素化のため変更されていません"
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, fuzzy, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "選択したライン %s の頂点の数は %d から %d [%d%%] に減少されました"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr "減少"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr "変更"
 
@@ -9180,8 +9560,8 @@ msgstr "ポイントフィーチャーのアイコンサイズ (map-unitsにお
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "テキストの色 "
 
@@ -9194,13 +9574,13 @@ msgstr "テキストの色 "
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "色"
@@ -9394,14 +9774,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "クリーニングツール"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "ぶら下がりを削除"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "橋を削除"
@@ -9453,14 +9833,6 @@ msgstr "エリアを読み込んでいます"
 msgid "Constructing 3D hull..."
 msgstr "変換中 ...   "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9544,7 +9916,9 @@ msgstr "バイニリア補間"
 msgid "Bicubic interpolation"
 msgstr "倍キュービック補間"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Tykhonov 正規化パラメーター (スムージングに影響します)  "
 
@@ -9963,6 +10337,192 @@ msgstr "出力するファイル"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "VTKHeaderを書き込みます: Writing VTK-Header を書き込んでいます "
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "対象マップ"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "ラスター"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d のクランプ(塊)"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "クラスターセパレーション"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "���"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "ネットワークへの最大距離"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "クラスのピクセル最小値 "
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "クラスターセパレーション"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "既設のベクトル オープン レベルを設定できません"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "行数"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "近傍サイズは正の数でなければなりません"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "入力するファイル"
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "現在の設定を表示"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "セントロイドを作成中..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s=%s - 正の値であることが必要です  "
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "2点間の最大距離を使用: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "ラスターマップが見つかりません。"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "直近の2線間の最大距離 "
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "平均値 = %.5lf  "
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "標準偏差 "
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "2点間の最大距離を使用: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "コストパスを探す..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "nポイント = %d, n地形 = %d  "
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "ラインは見つかりませんでした, type=lineをスキップします  "
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "ポイントを作成しています "
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "ラスターマップ %s を出力しています "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "���%s ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "対象マップ"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%d クラスが見つかりました"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%d クラスが見つかりました"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10096,26 +10656,26 @@ msgstr "外部テーブルのアップデート不可能 "
 msgid "Impossible to write to aux table"
 msgstr "外部テーブルへの書き込み不可能"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "ネットワークメンテナンスを実行します"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "ネットワークメンテナンスを実行します"
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "ベクトルマップ <%s> をトポロジー水準 %d で開けません"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "出力ファイルの上書き"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "出力ファイルの上書き"
@@ -10154,7 +10714,7 @@ msgstr "���"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10167,14 +10727,14 @@ msgstr "���"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "実行するオペレーション"
@@ -10203,47 +10763,131 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "ベクトルネットワークの最短経路を探索"
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr "オペレーション '接続' に必要です. 与えられた閾値における接続点.  "
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "入力するファイル"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "始点の座標値"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "新しいポイントに一意的なカテゴリーを割り当ててください"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "操作'ノード'"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "終了ポイントベクトルマップ  "
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "ラインレイヤー"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "不明な操作"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "閾値は >= 0 でなければなりません  "
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr " <%s> から入力を読み込めません"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "表に挿入できません: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "ベクトルマップ <%s> を開けません"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "ベクトルマップ <%s> を作成できません"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "テーブル <%s> はデータベース <%s> 中にありません"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "ラスターマップ <%s> は存在します。上書きされます"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "ラスターマップ <%s> は存在します。上書きされます"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "ドライバー <%s>ではデータベース <%s> が開けません"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "表 <%s> を作成できません"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "属性テーブルをベクトルマップ <%s> へコピーできません"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "表 <%s> を作成できません"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10376,7 +11020,7 @@ msgid "Categories already exist in layer %d"
 msgstr "ベクトルマップ (layer %d) から読み取られたカテゴリー%d"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "エリアのセントロイドを計算できません"
 
@@ -10484,7 +11128,7 @@ msgstr ""
 msgid "Key column type is not integer"
 msgstr "キー列の型が整数値ではありません"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "表 <%s> からデータを取得できません"
@@ -11265,7 +11909,7 @@ msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 "ESRIスタイルの .prj フォーマットを使用 (シェープファイルの出力のみを要求)  "
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11518,8 +12162,8 @@ msgstr "指定したベクトルマップを含むロケーション"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr "曲面"
 
@@ -11527,7 +12171,7 @@ msgstr "曲面"
 msgid "Mapset containing input vector map"
 msgstr "指定したベクトルマップを含むマップセット"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "このフレーム名を出力します"
@@ -11537,7 +12181,7 @@ msgstr "このフレーム名を出力します"
 msgid "Name of input vector map to re-project"
 msgstr "再投影するラスターマップ名"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "データベース"
 
@@ -11552,8 +12196,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr "エリア"
 
@@ -11584,17 +12228,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "入力と出力で同一のロケーションは指定出来ません"
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "ロケーション <%s> マップセット <%s> を確認中"
@@ -11962,222 +12608,389 @@ msgstr ""
 "テーブル:%s\n"
 "キー列:%s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "複数のベクトルマップを合成し新しいマップを作成します"
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "指定したベクトルマップの境界ボックスが書き込まれるベクトルマップ名"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "トポロジー作成不可"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
-"ファイルを現在のファイルへ追加(現在のファイルへの上書きが有効であることが必"
-"要)"
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "属性の表もコピー"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "現在,レイヤー1の表だけがサポートされています"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+"ファイルを現在のファイルへ追加(現在のファイルへの上書きが有効であることが必"
+"要)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "表がありません"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "キー列が違います"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "列の数が違います"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "列名が違います"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "列の型が違います"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "文字の列長が違います"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "キー列が見つかりません"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "出力するマップは3Dではありません"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "表 <%s> を作成できません"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "入力するファイル"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 "エラー,ベクトルマップ <%s> を読み込み中 - 一部のデータが正しくないようです"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "ベクトルマップ <%s> の地形を構築中、、、"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "境界の交差が折れ曲がります"
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "ファイル間の共用ラインは編集されます"
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "ヘッダー情報は編集されます"
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d のベクトルマップを繋ぎ合わせました"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "選択したカーソルを開けません: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "行を取得できません"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "不明な列の型  "
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "新しい記録を挿入できません: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "最優先の投影チェック"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "OGRベクトルレイヤーをGRASSベクトルマップに変換します."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "入力するファイル"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "キーカラム"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "列を追加するレイヤー"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "小領域のみインポートします"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "小領域"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "フォーマット:xmin,ymin,xmax,ymax - 通常は西、南、東、北"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "作成するロケーション"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "z データのフィルターレンジ (min,max)  "
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "整数データをインポート"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 #, fuzzy
 msgid "Only import points of selected class(es)"
 msgstr "選択したカテゴリー番号の領域を塗りつぶす"
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "整数データをインポート"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "低密度ポイントの入力ベクトルマップ名  "
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "���"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "整数データをインポート"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "相関 "
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "整数データをインポート"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "ポイントをインポート中、、、"
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> 不正なポイント数"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "作成するロケーション"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "情報の代わりに履歴を出力します"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "データセット投影を再定義します (現在のロケーションの投影法を使用)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "インポートをこの領域に限定します"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "指定したベクトルマップは接点を含む"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr "新しいデータセットをもとにロケーションを拡張"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "出力ラスターマップ名"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "現在のロケーションの投影法を使用"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "現在のロケーションの投影ユニットを取得できません"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "対象マップ"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "出力するファイル"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "不明なルールオプション:'%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "キーカラム"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr "現在の範囲フラッグか空間オプションの片方だけを選択してください"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "「空間」パラメーターには4変数が必要"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12185,119 +12998,172 @@ msgstr ""
 "入力マップの投影をGRASSフォーマットに変換できません。新規のロケーションが作成"
 "できません"
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "ロケーションを作成できません: %s  "
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
-msgstr "入力マップ投影情報をチェックのためGRASSフォーマットに変換できません"
-
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "最優先の投影チェック"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "ベクトルマップ <%s> は既に存在し上書きされません"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"データセットの投影は現在のロケーションに適合していません.\n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO は:\n"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "ポイントをインポート中、、、"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "インポートしたデータセットの PROJ_INFOは次のとおり :\n"
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "ポイントをインポート中、、、"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"入力データセットから'ロケーション'パラメーターのある新しいロケーションを作成"
-"してください.\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "タイトル"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "入力データセットと現在領域の投影は整合しているようです"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "タイトル"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "ベクトルマップ <%s> は既に存在し上書きされません"
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d のポイントが閾値外"
 
-#: ../vector/v.in.lidar/main.c:606
-#, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "ドライバー <%s> でデータベース <%s> を開けません"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d のポイントが閾値外"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:736
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "ポイントをインポート中、、、"
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d のポイントが閾値外"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:738
 #, fuzzy, c-format
-msgid "%d points imported"
-msgstr "タイトル"
+msgid "%llu input points were filtered out by return number"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d のポイントが閾値外"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "%d input points were not valid"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "タイトル"
+
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "タイトル"
+
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were not valid"
 msgstr "%d のポイントが閾値外"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d のポイントが閾値外"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d のポイントが閾値外"
 
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d のポイントが閾値外"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "最後の %d ポイントは無視されます"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "ベクトルマップ <%s> を開けません"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "ドライバー <%s> でデータベース <%s> を開けません"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12305,22 +13171,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "複数のベクトルマップを合成し新しいマップを作成します"
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "レイヤー <%s> は利用できません"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "出力するファイル"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "ファイルが作成できません <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "ラスターマップ <%s> が作成されました"
@@ -12330,12 +13196,12 @@ msgstr "ラスターマップ <%s> が作成されました"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "出力テーブル名"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "リンクするラスターファイル"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12343,26 +13209,30 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "出力ラスターマップ名"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "指定可能なレイヤー一覧を表示して終了"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "指定可能なレイヤー一覧を表示して終了"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 #, fuzzy
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "フォーマット: レイヤー タイプ カウント 最小 最大"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12412,7 +13282,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "無効な順"
+msgstr "ノードコスト列"
 
 #: ../vector/v.delaunay/main.c:88
 msgid ""
@@ -12544,55 +13414,55 @@ msgstr "バッファーの多様性としての,理論上の弧とポリゴン
 msgid "Make outside corners straight"
 msgstr "外角をまっすぐにする"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "ポリラインの終点を頂点にしてはいけない"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "ベクトルマップ属性を出力します. "
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr "バッファー距離/短軸/角度/列のどれかを選択 "
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr "スケールオプションは magnitude_map を必要とします"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr "レイヤー' は > 0 でなければなりません"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "許容差は %g にリセットされました"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "不正な削除要求です"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "マップユニット中の許容差 = %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "表 <%s> からデータを選択できません"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
@@ -12600,83 +13470,83 @@ msgstr ""
 "チェックタイプオプションのバッファリングに利用可能なフィーチャはありませんそ"
 "して入力ベクトルのフィーチャは利用可能です"
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "エリアをバッファー中、、、"
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "属性が不正なサイズ (%.3f) です(カテゴリー %d )"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "マップユニット中の許容差: %g  "
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "エリアをバッファー中、、、"
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "出力するファイル"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "地形のパーツを構築中、、、"
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "境界を接合しています、、、"
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr "ポリゴンを解消"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "境界を切断しています、、、"
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr "ノードの境界をクリーニング中、、、"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "エリアのセントロイドを計算中..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr "削除する境界のリストを作成中、、、"
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr "境界を削除しています、、、"
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr "エリアのセントロイドを計算中..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "エリアのセントロイドを計算できません"
@@ -12950,18 +13820,18 @@ msgstr "出力するファイル"
 msgid "%d features written to '%s'."
 msgstr "%d のフィーチャーが '%s' へ書き込まれました"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "フォント"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "最近接の中心にサブネットを割り当てます (中心からみて).  "
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
@@ -12970,21 +13840,30 @@ msgstr ""
 "中心ノードは開かれなければなりません (コスト >= 0). 中心ノードのコストは計算"
 "に使用されています  "
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "中心の数: [%d] (nlayer: [%d])  "
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 #, fuzzy
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr "選択されたnlayerに十分な中心ではありません. 何も分配されません.  "
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "センターからコストを計算しています ...  "
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "センターからコストを計算しています ...  "
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13041,7 +13920,7 @@ msgstr "補間に用いる近傍点"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13711,7 +14590,7 @@ msgstr "LR表に記録がありません"
 msgid "More than one record in LR table"
 msgstr "一つ以上の記録が LR 表にあります"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14009,30 +14888,40 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr "地形を破損する可能性があるため,%d の境界が切り詰められませんでした"
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "ベクトルマップ属性を出力します. "
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "where' 句なしのSQL文のWHEREコンディション"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "出力鉛直レコード分離"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr "属性の代わりに選択されたベクトルフィーチャーの最小領域範囲を出力します"
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "領域\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "ベクトルフィーチャーからデータベース値を集めます. "
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
@@ -14041,16 +14930,16 @@ msgstr ""
 "ベクトルマップ <%s> をトポロジー水準で開けません. フラッグ '%c' はトポロジー"
 "水準を要求しています.  "
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "選択カーソルを開けません"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "エリア %d の境界線を取得できません  "
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "ライン %d の境界線を取得できません"
@@ -14093,46 +14982,50 @@ msgstr "単位セグメントあたりのデータ数の最大値"
 msgid "Add new vertices, but do not split"
 msgstr "入力するファイル"
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "入力するファイル"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "平滑化は正の値の必要があります"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "不明な列の型 '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "入力マップの投影単位を取得できません"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "長さ %f\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "長さ %f\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "行数"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "シグネチャファイル"
@@ -14249,7 +15142,9 @@ msgstr "回転角 (半時計回りの角度)"
 msgid "Number of vertex points per grid cell"
 msgstr "セル内の水平方向の頂点数"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "地物フィーチャ"
@@ -14349,10 +15244,13 @@ msgid "Writing out vector columns..."
 msgstr "ベクトル列を書き込み中、、、"
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14364,6 +15262,7 @@ msgstr "入力するファイル"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14516,8 +15415,9 @@ msgstr "配置"
 msgid "Offset label in y-direction"
 msgstr "ラベルを y 方向補正する"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "フォント名"
 
@@ -14587,6 +15487,130 @@ msgstr "区画を検索中、、、"
 msgid "Counting points quadrats..."
 msgstr "入力するファイル"
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "シグネチャファイル"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "対象マップ"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "整数データをインポート"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "整数データをインポート"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> 不正なポイント数"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "最大許容差値 "
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "セル内の水平方向の頂点数"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "セル内の水平方向の頂点数"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "標準偏差 "
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14601,28 +15625,28 @@ msgstr "グループのターゲット情報 <%s>が見つかりません"
 msgid "Target location <%s> not found"
 msgstr "ターゲットロケーション <%s> は見つかりません"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "マップセット <%s> (ターゲットロケーション <%s> )- "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "権限がありません"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "見つかりません"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "グループに i.targetを実行してください"
 
@@ -14964,11 +15988,6 @@ msgstr "%s はエリアの代わりにこれらの値を積算します。\n"
 msgid " Database connection not defined for layer <%s>"
 msgstr ""
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "キーカラム"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "キー/値の配列を並べ替えできません"
@@ -15054,16 +16073,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d 記録はアップデートされました"
 msgstr[1] "%d 記録はアップデートされました"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "OGRベクトルレイヤーをGRASSベクトルマップに変換します."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "OGRデータソース名 "
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "入力するファイル"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15073,12 +16094,12 @@ msgstr ""
 "\t\tESRIシェープファイル:ディレクトリはシェープファイルを含んでいます\n"
 "\t\tマップ情報ファイル:ディレクトリはマップ情報ファイルを含んでいます"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr "OGRレイヤー名、指定しない場合は利用可能な全てのレイヤーを取り込み"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15088,238 +16109,240 @@ msgstr ""
 "\t\tESRIシェープファイル:シェープファイル名\n"
 "\t\tマップ情報ファイル:マップ情報ファイル名"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "インポートできる区域の最小サイズ (平方ユニット)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr "小区域と島は無視されます.スナップ^2以上にしますか?"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "任意でデフォルトの入力タイプを変更してください"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "作動しているコントロールポイントはありません"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "ノードの境界をクリーニング中、、、"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "ラインまたは境界からポリラインを構築します"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "重複したエリアセントロイドを削除"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "接続とみなす境界要素間のスナップ"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "スナップ無しは'-1' "
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr "元の名前の代わりに使用される列名,1列目はカテゴリー行として使用"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "出力するファイル"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "ラスターカテゴリーラベルに使用される列名"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "列名"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "指定しない場合,指定されたマップ名が使われます"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "使用可能なマップセットの一覧表示"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "指定可能なレイヤー一覧を表示して終了"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "ポリゴンを消去しない(非推奨)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "強制的に整数で出力 "
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "現在のロケーションの投影ユニットを取得できません"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "現在の接続パラメータを出力して終了"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr "PERMANENTマップセットのデフォルト領域も更新します。"
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "行名を小文字に変換"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "データソース <%s> を開けません"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "カーソル位置が MySQL ドライバーにサポートされていません"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "データソースは %d レイヤーあります"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "��."
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "ベクトルマップ <%s>  のレイヤー情報を取得できません"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "列 <%s> は表 <%s>に見つかりませんでした"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "マップユニット %G のバッファー距離 "
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, c-format
 msgid "Using temporary vector <%s>"
 msgstr "ベクトルマップ <%s> を作成できません"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "入力するファイル"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "キー列の型が整数値ではありません"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "列 <%s> は表 <%s>に見つかりませんでした"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 "列<%s>を、固定長 %d 文字を使用して書き込んでいます (省略される可能性がありま"
 "す)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 "列<%s>を、固定長 %d 文字を使用して書き込んでいます (省略される可能性がありま"
 "す)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15328,58 +16351,58 @@ msgstr ""
 "列の幅は %s 255 に設定されています(OGRによって指定されていません), いくつかの"
 "ストリングは切断されるかもしれません!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 "列 %s を、固定長 %d 文字を使用して書き込んでいます(省略の可能性があります)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "列タイプはサポートされていません (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "マップ %d フィーチャーをインポートしています..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s ジオメトリなし"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "ポリゴンを解消"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "境界をスナップする (閾値 = %.3e):"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "境界を切断しています、、、"
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "境界ダングルをラインに変更します:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "境界ブリッジをラインに変更します:"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "centrality measures を計算しています..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15391,115 +16414,115 @@ msgstr ""
 "されています. それらのエリアのフィーチャの数はセントロイドとしてレイヤー %d "
 "に保存されています"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr "%d 入力ポリゴン\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d 入力ポリゴン"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "トータルエリア: %G (%d エリア)\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "トータルエリア: %G (%d エリア)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "重複するエリア: %G (%d エリア)\n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "重複するエリア: %G (%d エリア)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "カテゴリーのない領域: %G (%d areas)\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "カテゴリーのない領域: %G (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "接続とみなす境界要素間のスナップ"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "入力に失敗しました"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "表を外せません:%s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr "このロケーションのデフォルト領域が更新されました  "
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr "現在のマップセットの領域が更新されました"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15721,6 +16744,11 @@ msgstr ""
 "レイヤー %d に定義されていないデータベース接続. 初めに v.db.接続を使用してく"
 "ださい."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "ラスターマップ <%s> のカラーテーブルが見つかりません"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -15879,7 +16907,7 @@ msgstr "曲がりくねり' オプションはラインにのみ有効です  "
 msgid "Querying database... "
 msgstr "データベースを検索しています ... "
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
@@ -15888,12 +16916,12 @@ msgstr ""
 "クエリカテゴリーが多すぎたため (%d) クエリカテゴリー '0' (カテゴリーなし) の"
 "クエリは実行されませんでした. 後に報告された cat 0 の値は全て不正です.  "
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr "複数の検索結果、出力値はNULLにセットされています (カテゴリー [%d])  "
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "記録を取得できません "
 
@@ -16079,14 +17107,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr "ネットワークモードで結果に入力ポイントの数をかける"
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "ラスターマップ <%s> は存在します。上書きされます"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "ラスターマップ <%s> は既に存在します"
@@ -16223,14 +17251,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "新しいポイントに一意的なカテゴリーを割り当ててください"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "指定したベクトルラインに平行な線を作成"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "%d のラインまたは境界が、ベクトルマップ <%s@%s> 中にあります"
 msgstr[1] "%d のラインまたは境界が、ベクトルマップ <%s@%s> 中にあります"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16717,19 +17750,24 @@ msgstr "無効なタイムスタンプ"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16743,6 +17781,7 @@ msgstr "無効なタイムスタンプ"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16755,7 +17794,7 @@ msgstr "無効なタイムスタンプ"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -16909,6 +17948,7 @@ msgid "Unable to map image file"
 msgstr "画像ファイルをマップできません"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -16926,14 +17966,14 @@ msgstr "画像ファイルをマップできません"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16971,6 +18011,55 @@ msgstr "十分な色調が得られません"
 msgid "Using private colormap for DirectColor visual."
 msgstr "ダイレクトカラー表示に設定したカラーマップを使用します"
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "グラフィックモニターにバースケールを表示します"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "マップセットがない場合はマップセットを作成"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "全フレームを削除しスクリーンを消去します "
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "現在のマップセットを表示 "
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "現在の接続パラメータを出力して終了"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr "スクリーン座標のパーセンテージとしての設置 (0,0 は左下)  "
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -16989,7 +18078,7 @@ msgstr "複数波長と高解像度パンクロチャンネルを統合するBro
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17002,7 +18091,7 @@ msgstr "複数波長と高解像度パンクロチャンネルを統合するBro
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17077,18 +18166,23 @@ msgid ""
 msgstr "ベクトルポイントの位置のラスター値をテーブルへアップロード"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17103,6 +18197,7 @@ msgstr "ベクトルポイントの位置のラスター値をテーブルへア
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17197,6 +18292,93 @@ msgstr "カラー融合の最初のマップの重量パーセント"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "3Dラスターマップを"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "指定したロケーション中のベクトルマップをリストして終了"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "入力する3Dラスターマップ名"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "定義するクラスの数"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "ラスター入力マップ"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -17330,7 +18512,7 @@ msgstr "空のデータベースを作成する"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17344,8 +18526,8 @@ msgid "rename"
 msgstr "名前"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17355,9 +18537,9 @@ msgid "input"
 msgstr "入力 "
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17372,6 +18554,76 @@ msgstr "要求"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "現在のマップセットにある全ベクトルマップのトポロジーを復元する"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "ラスターマップから特定コンターのベクトルマップを作成する "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+msgid "contour"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "コンター間隔 "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "コンターレベルのリスト "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "最小コンターレベル "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "最大コンターレベル "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "コンターの作成に用いるデータ点の最少数(0 -> 制限なし) "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "ラスター入力マップ"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "属性テーブルを作成しないで下さい"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17380,7 +18632,7 @@ msgstr "指定したロケーション中のベクトルマップをリストし
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17439,8 +18691,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17551,74 +18804,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "入力する3Dラスターマップ名"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "偏差を出力するサイトファイル"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "偏差を出力するサイトファイル"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17653,47 +18875,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "新しいデータベース名"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "2つ以上の入力ラスターマップ名"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "定義するクラスの数"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "ラスター入力マップ"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17796,8 +19001,8 @@ msgstr "高さの強調"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "出力するファイル"
+msgid "Name for output image (or text file for -t)"
+msgstr "出力ファイル名(拡張を追加しないように)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17814,6 +19019,53 @@ msgstr "番号付けの代わりに座標をラベル付けする"
 msgid "Use gnuplot for display"
 msgstr "入力するファイル"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "TIFFワールドファイルを出力 "
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "値リストを区切るカンマ"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "レポートを保有する出力ファイルの名前"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "空のデータベースを作成する"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "定義するクラスの数"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr "メートル単位のみで出力 "
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17845,32 +19097,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "データセットをもとにロケーションを拡張"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "現在のロケーションの投影法を使用"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "現在のロケーションの投影ユニットを取得できません"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18057,6 +19287,20 @@ msgstr "セルタイル数は各方向と重複しているべきです"
 msgid "Output field separator"
 msgstr "フィールドセパレーターの出力"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "3Dラスターマップを"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "指定したロケーション中のベクトルマップをリストして終了"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "グラフィックウィンドウにラスターマップと凡例を表示します。"
@@ -18156,8 +19400,15 @@ msgstr "空のデータベースを作成する"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "新しいデータベース名"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "対象マップ"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "既存のラスターマップ名 "
@@ -18167,7 +19418,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18176,15 +19427,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "新しいデータベース名"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18231,7 +19482,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "ユーザー指定のカラーを用いて動作中のディスプレイの内容を消去します"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "出力するファイル"
 
@@ -18311,16 +19562,27 @@ msgstr "入力するファイル"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "出力ラスターマップ名"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "3Dラスターマップを"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18397,12 +19659,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18458,7 +19727,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "重ねるラスターマップ名"
+msgstr "2番目のラスターマップ名"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18528,13 +19797,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18545,12 +19813,12 @@ msgid ""
 msgstr "一変量の統計で,多くの座標の集合からラスタマップを作成"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "データ ファイルの範囲をスキャンして終了"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "スキャンモードで,シェルスクリプト形式で出力"
 
@@ -18565,7 +19833,7 @@ msgid "ASCII file containing input data"
 msgstr "入力データを含む ASCII ファイル (または \"-\" で標準入力から)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "ラスター値に使用する統計"
 
@@ -18573,14 +19841,14 @@ msgstr "ラスター値に使用する統計"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "統計量 "
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "保存形式 "
 
@@ -18620,17 +19888,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "高度列のスケールファクター値"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "メモリに残すマップの割合(%) "
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "pth の百分率値"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18674,19 +19942,15 @@ msgid ""
 "on the fly."
 msgstr "OGRベクトルレイヤーをGRASSベクトルマップに変換します."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "入力するファイル"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "ベクトルマップの誤差を出力"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "現在の領域を入力マップに揃えます"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18779,7 +20043,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -18866,24 +20130,18 @@ msgstr "指定したロケーション中のベクトルマップをリストし
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "定義するクラスの数"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "方位ラスターマップ名"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "ラスター入力マップ"
@@ -19001,17 +20259,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "補間に用いるポイント数"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19019,10 +20281,6 @@ msgid ""
 "space time raster datasets."
 msgstr "指定したロケーション中のベクトルマップをリストして終了"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19134,82 +20392,99 @@ msgid "Maintains GRASS Addons extensions in local GRASS installation."
 msgstr "ローカルGRASSインストールのGRASS拡張子を維持するツール"
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
+#, fuzzy
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 "GRASSアドオンSVNレポジトリからローカルGRASSインストールに拡張子をダウンロー"
 "ド,インストールまたはインストールされた拡張子を削除します"
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "インストール/削除する拡張子名"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
-msgstr "SVN アドオンリポジトリURL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
+msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "GRASSアドオンSVNリポジトリにある使用できるモジュールリスト"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "使用可能なマップセットの一覧表示"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "使用可能なマップセットの一覧表示"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 #, fuzzy
 msgid "List locally installed extensions"
 msgstr "拡張子をインストール先するプレフィックス"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr "システム全体をインストール(管理者権利を必要とする可能性があります)"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "ロケーション"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "ユーザーテーブルの代わりのシステムテーブル"
@@ -19326,10 +20601,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19386,6 +20657,59 @@ msgstr ""
 msgid "Test name"
 msgstr "テスト名"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "3Dラスターマップを"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "ラベルに使用する属性列名"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "エリアフィーチャの平坦なコーナー"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "z 座標のシフト値"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"ラスタ値をz座標として書き込む. テーブルは作成されていません. 現在はポイントの"
+"みサポートされています.  "
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "トポロジー作成不可"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"ユニークなシーケンスの代わりにラスター値をカテゴリーとして使用 (セル のみ)  "
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19459,6 +20783,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "ファイルの種類"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "zフラッグはポイントのみにサポートされています"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19631,20 +20966,26 @@ msgid "Description of the space time dataset"
 msgstr "新しいデータベース名"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "新しいデータベース名"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19688,13 +21029,13 @@ msgstr "LANDSAT-TM データ のTasseled Cap (Kauth Thomas)変換"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "レイヤー数"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19780,7 +21121,7 @@ msgstr "指定したロケーション中のベクトルマップをリストし
 msgid "Neighborhood size"
 msgstr "近傍サイズ"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "補間に用いるポイント数"
@@ -19884,24 +21225,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "出力マップの解像度 "
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "結果ラスターマップのタイトル"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "メタデータ"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "高解像度"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "出力するファイル"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "領域のトリミング最適化を行わない"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "地理座標におけるスクリーン位置"
 
@@ -19962,17 +21320,39 @@ msgstr "新旧の列名(旧、新)"
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "ベクトルポイントの位置のベクトル値テーブルへアップロード"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+#, fuzzy
+msgid "layer,column"
+msgstr "キーカラム"
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "更新するカラム1"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "編集するベクトルマップ名"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+#, fuzzy
+msgid "query_layer,query_column"
+msgstr "キーカラム"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "キーカラム"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "ラベルに使用する属性列名"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr "マップユニットの最大検索距離"
 
@@ -20060,6 +21440,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20073,11 +21454,15 @@ msgid "Sill value"
 msgstr "%s: 不正な値の定義"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "出力する傾斜方位ラスターマップ名"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20188,28 +21573,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "ラスターマップの非NULLセルから単変量統計を計算します"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "テストモード"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "空のデータベースを作成する"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "3Dラスターマップを"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "NULL値を伝搬する"
 
@@ -20246,7 +21626,7 @@ msgstr ""
 "一つのセルから拡大した近接エリアを持つラスターマップレイヤーを作成します "
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20260,7 +21640,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "ラスターセルのバッファ半径"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "メトリック"
 
@@ -20278,12 +21658,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "3Dラスターマップを"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "補間に用いるポイント数"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20311,7 +21691,7 @@ msgstr ""
 "る"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20339,6 +21719,16 @@ msgstr "スプラインスムージングパラメータ"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "繰返し間隔 [minutes]  "
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Tykhonov正規化に伴うバイキュービックまたはバイリニア スプライン補間.  "
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "ロケーション: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20348,20 +21738,10 @@ msgstr "テーブルのベクトルマップテーブルへの結合を許可す
 msgid "Vector map to which to join other table"
 msgstr "他のテーブルに結合するベクトルマップ"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-#, fuzzy
-msgid "layer,column"
-msgstr "キーカラム"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr "結合するレイヤー"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "更新するカラム1"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20389,17 +21769,17 @@ msgstr "カラーテーブルに表示する列の数"
 msgid "Imports space time raster dataset."
 msgstr "ラスターマップ統計値をアップデートします "
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "現在の領域を入力マップに揃えます"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "ラスターマップ <%s> が作成されました"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20476,14 +21856,17 @@ msgstr "3D ラスターマップ <%s> は見つかりませんでした"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20514,11 +21897,11 @@ msgstr "文字列を格納するメモリを割当できません"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "ラスターマップ <%s> の範囲を読み込めません"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "履歴ファイル読み込みエラー"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20526,8 +21909,8 @@ msgstr "3Dラスターマップ <%s> を閉じれません"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "データ書き込みエラー"
 
@@ -20579,6 +21962,7 @@ msgstr "このビルドにおいて整数出力はバイト=8をサポートし
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "ファイルが作成できません <%s>"
@@ -20740,9 +22124,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "The 型 of groundwater flow  "
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20770,7 +22155,10 @@ msgstr "ダイレクト cholesky ソルバーではスパース行列処理は
 msgid "Unable to create and solve the linear equation system"
 msgstr "線形方程式の作成や解を求めることができません"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "ラスターマップ <%s> が作成できません"
@@ -20836,6 +22224,142 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "ラスターマップ %d ファイル名: %s が存在します。上書きされます!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "等値線のコスト "
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "三つの3DグリッドRGBマップを用意してください"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "ベクトルマップ <%s> が見つかりません"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "流動方向を計算中 "
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "属性テーブルを編集するために指定したベクトルポイントマップ名"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "編集するベクトルマップ名"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "出力する傾斜方位ラスターマップ名"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "光沢度のラスターマップファイル名"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "長さ %f\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "イテレーションの数"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "水流幅 (メートル). デフォルトはラスターセル幅です  "
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "補間方法"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "ラスターマップが指定されていません"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "既定のデータベースが設定されていません"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "最大反復数"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "最大反復数"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "流線間のセル数 "
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "出力するファイル"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "色相データ読み込み中のエラー"
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr "ラスターマップにおいて統計解析を行います"
@@ -20966,11 +22490,11 @@ msgstr "ASCII ファイル <%s> を開けません"
 msgid "3D raster map for which to modify null values"
 msgstr "3DラスターマップのNULL値修正"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "NULL値をセットするセルの一覧"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "NULL値を置き換える値"
 
@@ -20994,7 +22518,7 @@ msgstr "modifyNull:全タイルフラッシングエラー"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: エラー 一時ファイルのクローズ"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "入力するファイル"
@@ -21003,6 +22527,82 @@ msgstr "入力するファイル"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "3D NULL-値のビットマップファイルの作成"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "ラスター"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "一変量の統計で,多くの座標の集合からラスタマップを作成"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "ラスターセルによるポイントのインデックスを行わない"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "セル内の水平方向の頂点数"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "3D ラスターマップ <%s> は見つかりませんでした"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "入力するファイル"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "3DラスターマップのNULL値修正"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "z 座標のシフト値"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "補間に用いる近傍点"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "一時ファイルが作成できません "
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21056,13 +22656,13 @@ msgstr ""
 msgid "Update range"
 msgstr "出力するデータの範囲 "
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "���"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "[%s] のカテゴリーテーブルを %s に設定"
@@ -21120,7 +22720,7 @@ msgstr "色相データ読み込み中のエラー"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "データをロードしています ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "3Dグリッドファイルを閉じる時にエラー"
@@ -21497,7 +23097,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "3Dラスターマップの値が正しくありません(値は 0 から 255 まで)!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21507,7 +23107,7 @@ msgstr "登録されてないメソッド <%s>"
 msgid "Aggregate operation"
 msgstr "集約演算"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr "エリアのセントロイドを計算できません"
@@ -21542,6 +23142,38 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "セルバッファーを確保できません"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "分散 "
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "赤、緑、青のラスターマップを一つのラスターマップに合成します"
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "出力ラスターマップ名"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "ポイントキャッシュのサイズ"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "メモリを割り当てられません"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "新しいラスターマップを書き込んでいます"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -21884,38 +23516,38 @@ msgstr "シェルスクリプト形式で表示"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22215,13 +23847,13 @@ msgid "Unknown operation '%s'"
 msgstr "不明な操作"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr "無視しました\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "ロケーション <%s> が作成されました"
@@ -22295,9 +23927,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: ファイルは同じです、 コピーは必要ありません"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> すでに存在します"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> はマップセット <%s> に既に存在します"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22410,8 +24042,8 @@ msgid ""
 "system"
 msgstr "入力座標システムにおけるデータ変換情報の強制オーバーライド"
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr "変更"
 
@@ -22676,9 +24308,9 @@ msgstr "入力するファイル"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "ラスター"
 
@@ -22692,15 +24324,15 @@ msgstr "マップ名検索パターン (デフォルト: 全て)"
 msgid "File name exclusion pattern (default: none)"
 msgstr "マップ名除外パターン (デフォルト: なし)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "ワイルドカードではなく通常の表現を使用してください"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "ワイルドカードの代わりに拡張された正規表現を使用してください"
 
@@ -22710,7 +24342,7 @@ msgid "Remove base raster maps"
 msgstr "ベースマップを取り除きます"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "入力するファイル"
@@ -22760,7 +24392,7 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
@@ -22768,73 +24400,63 @@ msgstr ""
 "標準出力へのユーザー指定されたデータタイプの現在使用できるGRASSデータベース"
 "ファイルの一覧を表示します "
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "マップ名検索パターン (デフォルト: 全て)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "マップ名除外パターン (デフォルト: なし)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "リストするマップセット(デフォルト=現在のマップセット) "
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 #, fuzzy
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 "オプションで新規マップセットを作成または指定されたロケーションで利用可能な"
 "マップセットをリストアップ"
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "対象マップセット(デフォルト=現在のマップセット) "
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "指定した領域から現在の領域を設定します"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "データータイプを出力します"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr "(マップセットを含む)完全なマップ名を入力"
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "ヒューマンリーダブルフォーマットでの pretty printing"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "説明つき表示のリスト(マップタイトルもリストします)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "エラー 2029 "
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "エラー 2029 "
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "グループ <%s> は存在しません"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "3D ラスターマップ <%s@%s> のヘッダーを読み込めません"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "ベクトルマップ <%s> を開けません(地形レベル %d )"
@@ -23034,44 +24656,44 @@ msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 "デフォルト領域を変更できません. このマップセットは <PERMANENT>ではありません."
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "不正な入力 <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "現在のロケーションの投影情報を取得できません"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "現在のロケーションの投影ユニットを取得できません"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "緯度/経度投影パラメーターをアップデートできません"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "pj_do_proj (入力座標ペアの投影) におけるエラー"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "すでに緯度/経度にあります. 代わりに -p flag を使用してください."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
@@ -23079,7 +24701,7 @@ msgstr ""
 "シンプルロケーションにいます、緯度/経度への投影はできません.  代わりに -p "
 "flag を使用してください"
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23087,7 +24709,7 @@ msgstr ""
 "このロケーションはデータ変換パラメーターを含んでいないため、WGS84 出力は出来"
 "ません. g.setproj を実行してみてください."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr "シンプルXYシステムから緯度/経度計算はできません"
 
@@ -23314,40 +24936,61 @@ msgid "command line interface with GUI startup screen"
 msgstr "列 <%s> がありません"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "入力するファイル"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:78
 #, fuzzy
 msgid "Update default user interface settings"
 msgstr "デフォルトのGUI設定をアップデートしてください"
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 #, fuzzy
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr "デフォルトのGUI設定のアップデート後にGUIを起動しないでください"
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s> は現在デフォルトGUIです  "
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23655,10 +25298,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "自分の最初のベクトルモジュール"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "既設のベクトル オープン レベルを設定できません"
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23823,7 +25462,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "完了率(%)"
 
@@ -24246,7 +25885,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "現在のロケーションの投影キー値を取得できません"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24437,144 +26076,144 @@ msgstr "東西の格子間隔=%f "
 msgid "Writing new raster map..."
 msgstr "新しいラスターマップを書き込んでいます"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "ラスターマップの投影変換を行います "
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr "指定したベクトルマップを含むロケーション"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr "指定したベクトルマップを含むマップセット"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "再投影するラスターマップ名"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "出力ラスターマップ名"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "出力マップの解像度 "
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "ロケーションのラスターマップ一覧"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "指定したロケーション中のベクトルマップをリストして終了"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "全てのマップ接続パラメーターをシェルスクリプト形式に出力して終了"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr "入力と出力で同一のロケーションは指定出来ません"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr "出力ラスターマップの投影情報を取得できません"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "出力ラスターマップの投影単位を取得できません"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr "出力ラスターマップの投影キー値を取得できません"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "マップセット <%s> <入力ロケーション <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr ""
 "ラスターマップ <%s> <ロケーション <%s> <マップセット <%s> が見つかりません"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "入力マップの投影情報を取得できません"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "入力マップの投影単位を取得できません"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "入力マップの投影キー値を取得できません"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "未投影のデータでは作業できません(xy location)  "
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "入力マップ  <%s@%s> (ロケーション <%s>) "
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "入力:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "列: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "行: %d (%d)  "
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "北: %f (%f)  "
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "南: %f (%f)  "
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "西: %f (%f)  "
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "東: %f (%f)  "
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "東西解像度: %f  "
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "南北解像度: %f  "
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "出力:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "投影中..."
 
@@ -24627,12 +26266,6 @@ msgstr "セグメントファイル書き込みのエラー"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr "ラスターマップレイヤーをサポートするファイルの作成(更新)を許可 "
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "結果ラスターマップのタイトル"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "マップデータの単位に使うテキスト "
@@ -24660,22 +26293,22 @@ msgstr "出力するファイル"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "ラスターマップ <%s> が現在ののマップセットにありません "
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] は別のマップの再分類, 終了中 "
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "[%s] のnullファイルを書き込み中   "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "[%s] の null ファイルを削除中.\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "完了 "
 
@@ -25469,7 +27102,7 @@ msgstr "高い方の値 (%d) は1以上である必要があります  "
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s 開けません %s"
@@ -25674,8 +27307,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "$1 と $2 のカテゴリー乗数とオフセットの2つのペア  "
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "ラスターマップのカテゴリーファイル <%s@%s> が読み込めません"
@@ -25760,12 +27393,12 @@ msgstr " <%s> から入力を読み込めません"
 msgid "Can't get cell header"
 msgstr "セルヘッダーを取得できません"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS: 行は %d から %d に変更しました  "
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: 列は %d から %d に変更しました  "
@@ -25959,10 +27592,6 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "入力ファイル先頭で読み込まない行数(ポイントモード)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "z データのフィルターレンジ (min,max)  "
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -25970,7 +27599,7 @@ msgstr "z データのフィルターレンジ (min,max)  "
 msgid "Advanced Input"
 msgstr "アドバンス "
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "z データに指定する縮尺"
 
@@ -25998,7 +27627,7 @@ msgstr "z データに指定する縮尺"
 msgid "Please specify a reasonable column number."
 msgstr "妥当な列番号を指定して下さい"
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "不正なZ座標範囲"
 
@@ -26007,15 +27636,15 @@ msgstr "不正なZ座標範囲"
 msgid "Invalid vrange"
 msgstr "不正なZ座標範囲"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "pth オプションの指定無しでは,百分率を計算できません!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "trim オプション無しでは,刈り込み平均を計算できません"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26038,7 +27667,7 @@ msgid "Reading input data..."
 msgstr "読込中 ... "
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "#%d (%d中) 経過...  "
@@ -26084,16 +27713,16 @@ msgstr "不正な y-座標 ライン %lu 列 %d. <%s>  "
 msgid "Writing to output raster map..."
 msgstr "ラスターマップ %s を出力しています "
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "%lu 箇所が領域内に見つかりました"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "データをスキャンしています..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "範囲:       最小        最大\n"
@@ -26256,11 +27885,6 @@ msgstr "出力ラスターファイル名"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "書き出すGISフォーマット(大文字小文字を区別、 -l フラッグの説明を参照)"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "ファイルの種類"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "ファイル作成に関するオプションを指定"
@@ -26811,41 +28435,46 @@ msgstr "不正なY座標 <%s> "
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "警告:ウィンドウ外のポイントを無視しました: %.4f,%.4f  "
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "ラスターマップのNULL値を管理する"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "3DラスターマップのNULL値修正"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "浮動小数点マップの時のみ実行"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "チェック"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "整数マップの時のみ実行"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "マップがNULL値ビットマップファイルを含まない時のみ実行"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "全てのデータセルを検査してNULL値ビットマップファイルを作成"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "NULL値ビットマップファイルを削除"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "全てのデータセルを検査してNULL値ビットマップファイルを作成"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
@@ -26854,62 +28483,63 @@ msgstr ""
 "ラスターマップ <%s> は マップ <%s@%s> の再分類.r.mapcalc と共にコピーを作成"
 "することを考慮して下さい.終了しています"
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "ラスターマップ <%s> はマップセット <%s> 中に存在しません"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "%s はNULL値に対して不正な入力値です"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "ラスタマップ <%s> は既にNULL値ビットマップ ファイルを持っています"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> は整数値ラスターマップです (CELL)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> は整数値ラスターマップです (CELL)  null=%d を使います"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> は浮動小数点値ラスターマップです"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "ラスターマップ <%s> 用にNULLファイルを作成しています..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "ラスターマップ <%s> は変更されています"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "ラスターマップ <%s> からNULLファイルを削除します .."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: 不正な値"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: 不正な値の定義"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "ラスターマップ  <%s> に対して新規データを書き込みます"
@@ -27236,7 +28866,7 @@ msgstr "入力するファイル名;(\"-\" で標準入力から読込) "
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "地物フィーチャ"
+msgstr "出力ラスターマップ・タイトル "
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27318,86 +28948,177 @@ msgstr "変換中...  "
 msgid "File <%s> created"
 msgstr "ファイル <%s> が作成されました"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr "一変量の統計で,多くの座標の集合からラスタマップを作成"
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "最コードルールを含むファイル"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "z データのフィルターレンジ (min,max)  "
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "z データに指定する縮尺"
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+"観測した <trim> パーセント(最小側)および <trim> パーセント(最大側) を廃棄"
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "出力ラスターマップ・タイトル "
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "ラスターマップに一致するよう領域を設定します"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "対象マップ"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "スキャン中,zrange は評価に取り込まれません"
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "不明なルールオプション:'%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "不正なマップ <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "データを読込中..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "出力ファイル <%s> を開けませんでした"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "マップを書出し中..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu 箇所が領域内に見つかりました"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "ファイル [%s] を読み込みに開けません"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "指定レイヤーで,フィーチャーへの距離のラスターマップレイヤーを作成"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "距離出力マップ名"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "出力ラスターマップ名"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "補間を行う2点間の最大距離"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "直近の2線間の最大距離 "
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "distance= と value= の少なくとも一つは必要です"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "不明なメトリック: [%s]  "
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "補間を行う2点間の最大距離"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "一時ファイル <%s> が作成出来ません"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27534,7 +29255,7 @@ msgstr "[%s]: そのような色はありません"
 msgid "Converting <%s>..."
 msgstr "%s を変換中... "
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "ラスター <%s> タイプは一致しません"
@@ -27637,7 +29358,7 @@ msgid "There are no valid locations in the current region"
 msgstr "現在の領域には有効なロケーションが存在しません"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28217,7 +29938,7 @@ msgstr "[%s]: そのような色はありません"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28647,7 +30368,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "シェルスクリプトスタイルの統計を出力します"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28669,11 +30390,6 @@ msgstr "経過 %d...  "
 msgid "Unable to write to temp file"
 msgstr "一時ファイルが作成できません "
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "ポイントを作成しています "
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -28791,7 +30507,7 @@ msgid "Writing output raster map..."
 msgstr "ラスターマップ %s を出力しています "
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -28802,43 +30518,43 @@ msgstr "ラスターマップ <%s> を書出し中..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "ラスターマップレイヤーのエリア統計を作成"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "分水界パス %d  "
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "出力する傾斜方位ラスターマップ名"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "出力ラスターマップ名"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "始点(東、西)のマップ座標値"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "無効な座標値(東) <%s> "
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "無効な座標値(北) <%s> "
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "警告:ウィンドウ外のポイントを無視しました: %.4f,%.4f  "
@@ -28935,22 +30651,22 @@ msgid "Invalid map type"
 msgstr "不正なマップ <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "セクション %d: マップを閉じます"
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "セクション %d: 分水定義"
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "セクション 1a (%1d中): メモリの初期化  "
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "セクション 1b (%1d中): マップ外の流量を決定する.  "
@@ -29059,24 +30775,24 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "セクション 3: SFDで表層流を累計する"
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "セクション 3: MFDで表層流を累計する"
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr "MFD: 流動分布の累積比率は 1.0 ではなく %f"
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, fuzzy, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29084,8 +30800,8 @@ msgid_plural ""
 msgstr[0] "MFD:  分布流動時に既に処理された* パス:  %d セルの %d"
 msgstr[1] "MFD:  分布流動時に既に処理された* パス:  %d セルの %d"
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29632,151 +31348,156 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "ブロッキングマップがない場合は、 <return> を押して、次の質問に答えます"
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "入力 "
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "入力ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "入力:1セルの流量を示すファイル "
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "入力するラスターマップ名(彩度)"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "入力:曲面流でブロック化した地形を示すファイル "
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "外側の分水域の最小セル数 "
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "表面流の最大長(単位:メートル)"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "出力する傾斜方位ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "出力:流れ出るセル数を示すファイル "
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "出力する傾斜方位ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "出力トポグラフィーのインデックスマップ"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "出力する傾斜方位ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "出力するファイル"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "出力する傾斜方位ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "出力するファイル"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "出力:半盆地のラベルファイル "
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "出力する傾斜ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "出力:傾斜長と傾斜勾配(LSファクター)を示すファイル "
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "出力する傾斜ラスターマップ名"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "出力:RUSLE用の傾斜勾配(Sファクター)を示すファイル "
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr "MFD (1-10)の収束変数"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr "1 = 最大分岐流動, 10 = 最大収束流動. 推奨: 5"
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "-m フラッグで使用する最大メモリ (MB)  "
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr "SFD: 単一流動方向, MFD: 多重流動方向"
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "水平及び鉛直な流れのみ処理 "
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "仮想メモリを使用 "
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
@@ -29784,73 +31505,73 @@ msgstr ""
 "メモリ要求が利用可能なRAMを越える場合のみ必要; メモリ要求の計算方法はマニュア"
 "ルを参照してください"
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr "低く見積もっても正の流動累積を使用"
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr "流動累積出力の詳細はマニュアルを見て下さい"
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "出力マップを選択して下さい"
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s=%s - 正の値であることが必要です  "
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "キーカラム"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "コード %d :サブプロセスに失敗しました"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] "セクション 1 開始: 変数の初期化 計 %d のセクション"
 msgstr[1] "セクション 1 開始: 変数の初期化 計 %d のセクション"
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 #, fuzzy
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr "使用される最大メモリーが3MBより少ないです。既定値の300MBにセットします"
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -29859,22 +31580,32 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "カバーマップ"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "カバーマップ"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "カバーマップ"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "カバーマップ"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "カバーマップ"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "カバーマップ"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "カバーマップ"
@@ -29906,32 +31637,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 #, fuzzy
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr "MFD:  分布流動時に既に処理された* パス:  %d セルの %d"
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "対象マップ"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "集約を用いてラスターマップレイヤーを粗いグリッドにサンプルし直します"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "集約メソッド"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "エリアによるウェート (より緩慢な)  "
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr " %s の色テーブルを読み込めません"
@@ -30335,7 +32066,7 @@ msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr ""
 "色テーブル 'grey.log' は浮動小数点値ラスターマップではサポートされていません"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "不明な色指定 '%s'"
@@ -30725,7 +32456,7 @@ msgid ""
 msgstr "ラスターマップの非NULLセルから単変量統計を計算します"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30740,11 +32471,25 @@ msgstr "ゾーニングに使用されたDラスターマップはCELLタイプ
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"現在の領域の設定とは無関係に、出力する2Dマップに入力3Dグリッドマップと同じ解"
+"像度を使います。"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "ラスターマップの非NULLセルから単変量統計を計算します"
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "入力= そしてソース= は相互排他的です"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31038,33 +32783,33 @@ msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 "入力マップは同じ型からでなければばりません. CELL, FCELL または DCELL!  "
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: ラインの bounding box を見つけられません"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "境界線:  l = %d, r = %d, t = %d, b = %d  "
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "パス回数 %d  "
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "削除された %d  ピクセル   "
 msgstr[1] "削除された %d  ピクセル   "
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "細線化は正常に終了しました"
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr "細線化は終了していません, '反復' パラメーターを増加してください.  "
 
@@ -31355,32 +33100,12 @@ msgstr ""
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "ラスターマップから特定コンターのベクトルマップを作成する "
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "コンター間隔 "
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "コンターレベルのリスト "
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "コンターレベルのリスト "
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "最小コンターレベル "
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "最大コンターレベル "
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "コンターの作成に用いるデータ点の最少数(0 -> 制限なし) "
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -31968,55 +33693,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "NULL値に代入する値"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "分解能を合わせるラスターマップ"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "対象マップ"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "対象マップ"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "推論規則ファイル"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "乱数発生のSeed"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "入力するファイル"
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "エラー 2029 "
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "セパレーション"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "計算中に浮動小数点エラーが発生しました"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "計算がオーバーフローしました"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "不明なタイプ: %d"
@@ -32066,80 +33792,80 @@ msgstr "関数 '%s' で不明なエラー"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "ラスターマップ <%s@%s> のカラーファイルを読み込めません"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "ラスターマップ <%s@%s> の btree を作成できません"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "不正なマップ指標: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "定義されていない変数です '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "不正なマップ <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "定義されていないファンクション '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "引数の数 (%d) が関数 (%s) 定義より少なすぎます"
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "引数の数 (%d) が関数 (%s) 定義より多すぎます"
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "不正なファンクション %s() の配列タイプ"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "関数 (%s) の内部エラーです"
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "引数の数 (%d) が操作 '%s' に対して不正です"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "Format_expression_prec: 不明なタイプです: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "ラスターマップ <%s@%s> を閉じれません"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "出力ラスターマップを閉じれません"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "既知の関数:"
@@ -32325,22 +34051,22 @@ msgstr "順走査が完了しました "
 msgid "Reverse sweep complete"
 msgstr "逆走査が完了しました "
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 "入力ラスターマップの投影情報をチェック用のGRASSフォーマットに変換できません"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "ロケーションの PROJ_INFO 情報は:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "データセットの PROJ_INFO 情報は:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32384,14 +34110,6 @@ msgstr "非ファイルGDAL データソース名"
 msgid "Band to select (default is all bands)"
 msgstr "選択するバンド(デフォルト:すべてのバンド)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "メタデータ"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32415,7 +34133,7 @@ msgstr "フォーマット: レイヤー タイプ カウント 最小
 msgid "%s= or %s= must be given"
 msgstr "\"-i\" か \"value=\" のどちらかが必要です"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "現在の領域をアップデートできません"
@@ -32434,7 +34152,7 @@ msgstr "画像グループ <%s> は存在します。上書きされます"
 msgid "Reading band %d of %d..."
 msgstr "マップ %s を読み込んでいます ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "選択されたバンド (%d) は存在しません"
@@ -32503,99 +34221,114 @@ msgstr "%s のサポートファイルを作成しています"
 msgid "Link to raster map <%s> created."
 msgstr "ラスターマップ <%s> が作成されました"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "バイナリーファイルをラスターマップとしてインポートします "
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "入力するファイル"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "選択するバンド(デフォルト:すべてのバンド)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "画像ターゲットロケーション名"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "投影に用いるロケーション"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "ラスターバンドを取得出来ません"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "入力する標高ラスターマップ名 "
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "出力するファイル"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "現在のロケーションの投影法を使用"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "バンド色名を使う代わりに、バンド番号を保持します"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "テーブルを出力して終了"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "出力ロケーションとは異なる目標ロケーションを指定してください"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr "-l'フラグは緯度/経度ロケーションでのみ動作します"
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "サブレンジの数は 1 以上出なければならない"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "データソース <%s> を開けません"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
@@ -32603,7 +34336,7 @@ msgstr ""
 "入力したラスターマップは回転していて入力できません。 'gdalwarp' を用いると"
 "マップをノースアップに変換できるでしょう"
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
@@ -32612,87 +34345,92 @@ msgstr ""
 "マップ境界線は地理座標に制限されています。次へ進む前にr.infoでマップ境界線と"
 "解像度を調べてr.regionでリセットします。"
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "インポートを続行します..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "シグネチャファイルが開けません"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "ラスターバンドを取得出来ません"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "ポイントファイルの %d GCPS を <%s> にコピーしています"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "GCPsは以下のオープンGIS WKT座標系を持っています:"
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "GCPsテーブルを再投影します:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* GCPテーブルの入力投影: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* GCPテーブルの出力投影: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "pj_do_proj 実行中にエラー(GCP %i を再投影できません)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "入力したGCPsの投影キー値を変換できません"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "ロケーションの投影情報を取得出来ません"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "ロケーションの投影単位を取得出来ません"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "ロケーションの投影キー値を取得出来ません"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "ラスターマップ <%s> を書出し中..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr " <%s>にグレー色テーブルを設定します(8bit, full range)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr " <%s>にグレー色テーブルを設定します(16bit, image range)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "入力するファイル"
@@ -32821,7 +34559,7 @@ msgstr "標高マップを読み込んでいます..."
 msgid "Writing topographic index map..."
 msgstr "トポグラフィーのインデックスマップを書き込んでいます..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "行数"
@@ -32920,12 +34658,12 @@ msgstr "湖水のボリューム %f 立方メートル"
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr "湖水深度 (地形ラスターマップ) がメートル法の場合のみボリュームを修正"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "ガンマ"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -32933,23 +34671,23 @@ msgstr ""
 "既知のカテゴリー値を用い、一つ以上のマップレイヤーから他のマップレーヤーの"
 "\"no data\"エリアを埋める合成ラスターマップレイヤーを作成します"
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "同時にパッチするラスターマップ名"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "出力するラスターマップ名"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "透過にNULL値の代わりに値0を使用 "
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "入力ラスターマップは最低二つ必要です"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "ラスターマップ <%s> のサポートファイルを作成します"
@@ -33024,41 +34762,6 @@ msgstr "ベクトル、補間"
 msgid "Converts a raster map into a vector map."
 msgstr "ラスターマップをベクトルマップレイヤーに変換します. "
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "ラベルに使用する属性列名"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "エリアフィーチャの平坦なコーナー"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"ユニークなシーケンスの代わりにラスター値をカテゴリーとして使用 (セル のみ)  "
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "z 座標のシフト値"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"ラスタ値をz座標として書き込む. テーブルは作成されていません. 現在はポイントの"
-"みサポートされています.  "
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "トポロジー作成不可"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -33580,10 +35283,6 @@ msgstr "ポイントキャッシュのサイズ"
 msgid "Advanced"
 msgstr "アドバンス "
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr "メートル単位のみで出力 "
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr "グリッドセルでカテゴリーラベルを表示します"
@@ -33879,7 +35578,7 @@ msgstr "空間依存ランダム曲面を作成"
 msgid "Name for output raster map(s)"
 msgstr "出力ラスターマップ名"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "許容されるポイントとラインとの最大距離"
 
@@ -33903,7 +35602,7 @@ msgstr "最大反復数"
 msgid "Uniformly distributed cell values"
 msgstr "均一に分布されたセル値"
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, c-format
 msgid "Generating raster map <%s>..."
 msgstr "ラスターマップ <%s> を書出し中..."
@@ -34240,7 +35939,7 @@ msgstr "ラスターマップ上の優占度の多様性インデックスを計
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34266,7 +35965,7 @@ msgstr "ガンマ"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "設定ファイル"
@@ -34285,7 +35984,7 @@ msgstr "ラスターマップ上のパッチエリアの標準偏差を計算"
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "ガンマ"
@@ -34431,7 +36130,7 @@ msgstr "lseek を作成できません"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "ラスターマップ上の,Shannon 多様性インデックスを計算"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "ラスターマップ上の,ピクセル属性インデックス平均を計算"
 
@@ -34613,11 +36312,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "最大距離を読み込めませんでした. 中断しています"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "出力するファイル"
@@ -34837,13 +36536,53 @@ msgstr "incidout' を使うには time パラメータの設定が必要です"
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "モード 2: 年間の指定日における統合デイリー照射"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "拡散増加定数  "
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "ラスターマップ <%s> を書出します。 "
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "不正なマップ <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "間違った iso コスト: %f  "
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "ラスターマップ <%s> を書出します。 "
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "現在の中心座標を使用: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "ラスターマップ <%s> を書出します。 "
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 "-s をホライズンラスターを用いずに使用するには、数値パーティション は1でなけ"
 "ればなりません"
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -34851,12 +36590,12 @@ msgstr ""
 "メモリを節約しながら陰影を使用するときは、予め計算済みのホライズンを使う必要"
 "があります"
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 "緯度/経度のロケーションの時は緯度ラスターまたは経度ラスターは影響しません"
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 "緯度および経度ラスターマップの両方を指定するか、どちらも指定しない必要があり"
@@ -34884,78 +36623,89 @@ msgstr "マップを解凍 "
 msgid "Print compression information and data type of input map(s)"
 msgstr "シェルスクリプト形式で表示"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "���"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "[%s] はマップセット <%s> 中のマップ <%s> の再分類 - 解凍できません  "
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "[%s] はマップセット <%s> 中のマップ <%s> の再分類 - 圧縮できません"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] はマップセット <%s> 中のマップ <%s> の再分類 - 解凍できません  "
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "完了: 解凍ファイルは %lu バイト削減"
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "完了: 圧縮ファイルは %lu バイト削減"
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "完了: 解凍ファイルは %lu バイト増加"
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "完了: 圧縮ファイルは %lu バイト増加"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "エリア"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] は解凍済み "
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] は圧縮済み "
+msgid "Uncompressing <%s>"
+msgstr "対象マップ"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%s 圧縮 [%s]  "
+msgid "Re-compressing <%s>"
+msgstr "対象マップ"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "ドロップしています <%s>  "
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] はマップセット <%s> 中のマップ <%s> の再分類 - 解凍できません  "
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "[%s] はマップセット <%s> 中のマップ <%s> の再分類 - 圧縮できません"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -34987,52 +36737,52 @@ msgstr "o_adev: 配列にデータがありません"
 msgid "Filter <%s> not found"
 msgstr "ファイル <%s> は見つかりませんでした"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "ファイル"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "集約を用いてラスターマップレイヤーを粗いグリッドにサンプルし直します"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "\"-i\" か \"value=\" のどちらかが必要です"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "少なくとも一つのオプションを %s から選択してください"
@@ -35453,20 +37203,25 @@ msgstr[1] "centrality measures を計算しています..."
 msgid "Calculating %s"
 msgstr "入力するファイル"
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr "レイヤー' は > 0 でなければなりません"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "相関 "
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "空間依存性を使用してランダムセル値を生成します"
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "ロードする列の最大数"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr "乱数シード (SEED_MIN >= value >= SEED_MAX) (デフォルト [random])"
 
@@ -35610,7 +37365,7 @@ msgstr "無効"
 msgid "Grid line width"
 msgstr "ベクトルライン幅"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "グリッドカラー"
 
@@ -35737,14 +37492,10 @@ msgid "Starting and ending coordinates"
 msgstr "座標を開始そして終了"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "ラインの色 "
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "テキストカラーまたは \"none\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -35773,8 +37524,8 @@ msgid "Name of monitor to start"
 msgstr "出力スクリプト名"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -35836,48 +37587,66 @@ msgstr "現在の接続パラメータを出力して終了"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "指定したロケーション中のベクトルマップをリストして終了"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "現在の接続パラメータを出力して終了"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "スタート時に自動的に選択しないでください"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "指定したロケーション中のベクトルマップをリストして終了"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "色を読み込めません"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "フォームを編集モードで開きます  "
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr "モニター <%s> はりリースされています"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "モニターが選択されていません"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "入力するファイル"
@@ -35887,64 +37656,74 @@ msgstr "入力するファイル"
 msgid "Monitor <%s> is not running"
 msgstr "ファイル <%s> は見つかりませんでした"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "3Dビューファイル <%s> は見つかりませんでした"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "ファイルが作成できません <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "ファイル %s が見つかりません"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "出力するファイル"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "ファイルが作成できません <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "ファイル '%s' は既に存在し上書きされます"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "出力するファイル"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "出力するファイル"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "ベクトルマップ <%s> は既に存在"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "ファイルが作成できません <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "ベクトルマップ <%s> を書き出しています..."
 
-#: ../display/d.mon/start.c:163
-#, fuzzy, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "マップ名前を <%s> をオーバーライドする <%s> に設定しています"
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "範囲ファイルが読み込めません"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "ベクトルマップ <%s> は既に存在"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "ポイント座標のリスト"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "列 <%s> がありません"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "入力するファイル"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "範囲ファイルが読み込めません"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "%d 線 or 境界 found in ベクトルマップ <%s@%s>  "
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36057,12 +37836,12 @@ msgstr "%s: 不正な値の定義"
 msgid "[%s]: illegal value specified"
 msgstr "%s: 不正な値の定義"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "モロデンスキー法によるシフト"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -36071,16 +37850,34 @@ msgstr ""
 "グラフィックモニターに表示されているラスターマップレイヤーにセルカテゴリー値"
 "を重ね合わせます"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "始点を示すラスターマップ"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "セルカラー値からテキストカラーを取得します"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "出力するファイル"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "フォントファイルへのパス"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr "テキスト符号化 (TrueTypeフォントにのみ適用可能)  "
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36088,7 +37885,7 @@ msgstr[0] "グリッドカラー"
 msgstr[1] "グリッドカラー"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36099,7 +37896,7 @@ msgstr ""
 "現在のウインドウ設定は大きすぎるかもしれません. グラフィックに表示されている"
 "セルはセルカテゴリー数を見えるようにするには小さすぎるかもしれません"
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36180,11 +37977,6 @@ msgstr "エリアの塗りつぶし色"
 msgid "Colorize features according color definition column"
 msgstr "カラー定義列の名前 ( -a フラッグとの使用)  "
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "カラー定義ファイル列は指定されていません"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36194,7 +37986,7 @@ msgstr ""
 msgid "Lines"
 msgstr "ライン"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "線幅"
 
@@ -36745,37 +38537,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Z座標値"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "作動しているディスプレイモニターについての情報を表示します"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "スクリーン長方形を表示します (左, 右, 上, 下)  "
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "スクリーンディメンションを表示します (幅, 高さ)  "
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "動作中のフレーム長方形を表示します"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "スクリーンディメンションを表示します (幅, 高さ)  "
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "この領域のスクリーン長方形を表示します"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 #, fuzzy
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr "全スクリーンの地理座標と解像度を表示します"
@@ -37044,14 +38836,6 @@ msgstr "テキスト揃え"
 msgid "Line spacing"
 msgstr "ラインスペース  "
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "フォントファイルへのパス"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr "テキスト符号化 (TrueTypeフォントにのみ適用可能)  "
-
 #: ../display/d.text/main.c:235
 #, fuzzy
 msgid "Input file"
@@ -37119,7 +38903,7 @@ msgstr "チャートタイプ"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "チャートプロパティー"
 
@@ -37155,6 +38939,11 @@ msgstr "棒グラフはをデータポイントを中心にしています"
 msgid "Maximum value used for bar plot reference"
 msgstr "バー図表参照に使用される最大値"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "3D出力を作成します"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
@@ -37163,6 +38952,11 @@ msgstr ""
 "ユーザー指定された3つのラスターマップレイヤーを、赤、緑、青のオーバーレイと"
 "して動作中のグラフィックフレームに表示します."
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37207,14 +39001,7 @@ msgstr "サブセット"
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "凡例にマップ範囲のサブセットを使用 (最小,最大)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "出力するファイル"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37302,11 +39089,12 @@ msgstr "カラー区域は実際のデータの上限を上回ります"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "使用=%s 範囲外 [%.3f, %.3f] (範囲で拡張= ?)  "
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "描くものがありませn! (ラベルのあるカテゴリーなし?) "
 
@@ -37320,35 +39108,91 @@ msgstr "グラフィックモニターにバースケールを表示します"
 msgid "North arrow style"
 msgstr "北矢印のみ描きます"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr "ラベルの左上コーナーのスクリーン座標 ([0,0] はフレームの左上です)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "ラインの色 "
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "スケールバーのみ描きます"
@@ -37365,7 +39209,7 @@ msgstr "マップを閉じれません"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -37373,62 +39217,62 @@ msgstr ""
 "アスペクトデータを含むラスターマップのセルアスペクト方向を表す矢印を作成しま"
 "す"
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "表示するラスター方位マップ名"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "存在するラスター方位マップのタイプ"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "矢印を描くカラー"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "矢印を描くカラー"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "X's 製図のカラー(Null値)  "
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "不明な情報表示のカラー"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "全ての北グリッドセルに矢印を描きます"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "矢印の長さに使用する値を含むラスターマップ"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "矢印のスケールファクター (マグニチュードマップ)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "スケールファクターの不正値"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "スキップファクターの不正値  "
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "マグニチュードは GRASS と コンパス方位マップのみサポートしています "
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr "スケールオプションは magnitude_map を必要とします"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "範囲ファイル読み込みのエラー"
 
@@ -37708,55 +39552,41 @@ msgstr ""
 "クラス可分性マトリックス\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "ラスターマップ <%s> が現在ののマップセットにありません "
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr " グループ <%s>内にサブグループ <%s> が見つかりません。"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "サブグループ <%s>にラスターマップ <%s>はありません。"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "ラスターマップが見つかりません。"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "サブグループ <%s> にラスターマップがありません。"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "サブグループ <%s> にラスターマップが1つしかありません。"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "サブグループに2つ以上のラスターマップが必要です。"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "シードシグネチャファイル <%s>が開けません"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "シグネチャファイルが読み取れません<%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s>にシグネチャがありすぎます (上限 255)  "
@@ -37833,200 +39663,214 @@ msgstr "クラスのピクセル最小値 "
 msgid "Name for output file containing final report"
 msgstr "最終レポートを含む出力ファイル名"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "ラスターマップ <%s> が現在ののマップセットにありません "
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr " グループ <%s>内にサブグループ <%s> が見つかりません。"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "無効な初期クラス数 (%s)"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "無効なサンプル区間の値(%s)"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "無効な反復値(%s>)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "無効な収束値(%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "無効な分離値(%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "無効な最小値(%s)"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "レポートファイルを作成できません <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### クラスター (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "ロケーション: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "マップセット:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "グループ:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "サブグループ: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "シグネチャファイルの結果: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "領域\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  北: %12.2f  東: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  南: %12.2f  東: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  解像度:   %12.2f  解像度:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  行:  %12d  列: %12d  セル: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "マスク: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "クラスターパラメータ\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr "初期クラス数:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [シグネチャファイルから %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "最小クラスサイズ:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "最小クラス分類:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr " 収束率:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr " 最大反復数: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "行サンプル区間:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "列サンプル区間:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "ラスターマップの読み込み中"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr "メモリ不足です。再試行し、より小さなサンプルサイズを選んでください。"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "サンプルサイズ: %d ポイント\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 "サンプルポイントが不十分です。再試行し、大きいサンプルサイズを選択してくださ"
 "い。"
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 "ゼロでないサンプルデータポイントが不十分です。現在の領域(とmask)を確認して"
 "ください。"
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## 最終結果 #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d クラス (収束=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 "グループ<%s>にシグネチャファイル<%s>が作成できません、サブグループ <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38034,12 +39878,12 @@ msgstr ""
 "\n"
 "#################### クラス ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d クラス, %.2f%% 安定ポイント\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38356,8 +40200,8 @@ msgid "radiance"
 msgstr "分散 "
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "選択"
@@ -38725,359 +40569,403 @@ msgstr "グループ <%s> は存在しません"
 msgid "group <%s> references the following subgroups\n"
 msgstr "サブグループ <%s> にラスターマップがありません。"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "入力するファイル"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "出力するファイル"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "出力するファイル"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "出力するファイル"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "偏差を出力するサイトファイル"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "入力レイヤー名"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "抽出する行数"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "出力に指数を使用"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "エッジ番号が範囲外です "
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "エッジ番号が範囲外です "
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39277,7 +41165,7 @@ msgstr "トレーニングマップ"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "クラスのサブシグネチャの最大値"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "無効なサブシグネチャ数 (%s)"
@@ -39630,108 +41518,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "メモリーが足りません"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "色相データ読み込み中のエラー"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "セグメントファイル書き込みのエラー"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "データ書き込みエラー"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "作成するポイントの数"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "演算は実行されませんでした"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "入力するファイル"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "エリアを処理中、、、"
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "領域サイズは最小領域より小さいです, 何も表示されていません.  "
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att ファイルは既に存在します"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "サブセット"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "色相データ読み込み中のエラー"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "セグメントファイル書き込みのエラー"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "データ書き込みエラー"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "作成するポイントの数"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "入力するファイル"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -39805,64 +41699,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "閾値は >= 0 でなければなりません  "
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "%s にセグメントファイルを書き込めません"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "無効なメソッドです: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s: ベースラスターマップは見つかりませんでした"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "カバーマップ"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "%s: ベースラスターマップは見つかりませんでした"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "ステップの不正な数: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "ステップの不正な数: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "演算は実行されませんでした"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -39927,7 +41838,7 @@ msgstr "出力するラスターマップ名(緑)"
 msgid "Name for output raster map (blue)"
 msgstr "出力するラスターマップ名(青)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -39979,7 +41890,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -40828,51 +42739,55 @@ msgstr "グループ<%s> は見つかりません"
 msgid "Option '%s' is required for new exposure info"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "入力するファイル"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "出力するファイル"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "タイトル"
@@ -41155,6 +43070,11 @@ msgstr "補間に用いる近傍点"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "グループに i.targetを実行してください"
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41557,13 +43477,53 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ "新しい列名とタイプ(タイプはデータベースの後部に依存しますが、VARCHAR(), "
 #~ "INT, DOUBLE PRECISION and DATEのすべてをサポートします)"
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> すでに存在します"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "投影をセットすることが出来ません"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] は圧縮済み "
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "投影をセットすることが出来ません"
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "%s 圧縮 [%s]  "
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "計算がオーバーフローしました"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "対象マップ"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "列を追加するレイヤー"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "列を追加するレイヤー"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "キーカラム"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "シードポイント座標"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "出力をstdoutに出力します, 属性テ-ブルは更新しないでください  "
+
+#, fuzzy
+#~ msgid ""
+#~ "Error map of all lines and boundaries not being generalized due to "
+#~ "topology issues or over-simplification"
+#~ msgstr "%d ライン/境界線は過度な簡素化のため変更されていません"
 
 #, fuzzy
 #~ msgid "time series"
@@ -41609,74 +43569,6 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgid "Number of quartals to use"
 #~ msgstr "区画数"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "フリクションコストを含む入力ラスターマップ名 "
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "フリクションコストを含む入力ラスターマップ名 "
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "拡散放射輝度 [W.m-2] (モード 1) または 照射ラスタ-マップ [Wh.m-2.day-1] "
-#~ "(モード 2) を出力"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "地表反射放射輝度 [W.m-2] (モード 1) または 照射ラスタ-マップ [Wh.m-2."
-#~ "day-1] (モード 2) を出力"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "合計放射輝度 [W.m-2] (モード 1)または放射輝度/照射ラスタ-マップ [Wh.m-2."
-#~ "day-1] (モード 2) を出力"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "入力するファイル"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "入力するファイル"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "地表反射放射輝度 [W.m-2] (モード 1) または 照射ラスタ-マップ [Wh.m-2."
-#~ "day-1] (モード 2) を出力"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "合計放射輝度 [W.m-2] (モード 1)または放射輝度/照射ラスタ-マップ [Wh.m-2."
-#~ "day-1] (モード 2) を出力"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "補間に用いるポイント数"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "現在のロケーションの投影法を使用"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "ロケーション: %s\n"
 
@@ -41693,31 +43585,41 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ "\n"
 #~ "%d クラス, %.2f%% 安定ポイント\n"
 
+#~ msgid "Subregion"
+#~ msgstr "小領域"
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "カテゴリーが増加"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "オプション <%s>: <%s> が存在します"
-
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "出力するファイル"
+#~ msgid "Could not rewind input file"
+#~ msgstr "出力ファイル <%s> を開けませんでした"
 
-#, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "出力トポグラフィーのインデックスマップ"
+#~ msgid "SVN Addons repository URL"
+#~ msgstr "SVN アドオンリポジトリURL"
 
 #, fuzzy
 #~ msgid "Name for basins raster map"
 #~ msgstr "基本ラスターマップ名"
 
+#, fuzzy
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "出力するファイル"
+
+#, fuzzy
+#~ msgid "output map <%s> exists"
+#~ msgstr "出力するファイル"
+
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "ページの長さ (デフォルト: %d ライン)"
 
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "ページ幅 (デフォルト: %d 文字)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "現在のロケーションの投影法を使用"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -41741,6 +43643,12 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgid "[%s] not found"
 #~ msgstr "[%s]が見つかりません "
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "オプション <%s>: <%s> が存在します"
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "データセット投影を再定義します (現在のロケーションの投影法を使用)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -41757,6 +43665,14 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ "このチェックをオーバーライドしデータセットにロケーション定義を使用するた"
 #~ "め r.external への -o フラッグ 使用が可能です.\n"
 
+#, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "エラー 2029 "
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "エラー 2029 "
+
 #~ msgid "Location name (not location path)"
 #~ msgstr "新しいロケーション名 (ロケーションパスではありません)  "
 
@@ -41766,6 +43682,17 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ "新しいGISDBASE (新しいロケーションのあるディレクトリーへのフルパス)  "
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "投影をセットすることが出来ません"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "現在のマップセット内のすべての前のGRASS < Ver5.7 ベクトルマップ を現在の"
+#~ "フォーマットに変換する"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "ベクトルマップのメタデータを更新"
 
@@ -41801,151 +43728,68 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgid "No default DB driver defined"
 #~ msgstr "既定のドライバーが設定されていません"
 
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "出力するファイル"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "現在のマップセット内のすべての前のGRASS < Ver5.7 ベクトルマップ を現在の"
-#~ "フォーマットに変換する"
+#~ msgid "OGR datasource name"
+#~ msgstr "OGRデータソース名 "
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "マップ名が与えられていません"
 
-#~ msgid "Renaming reclass maps"
-#~ msgstr "リクラスマップ名を変更しています"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "グループ <%s> のサブグループ<%s> のREFファイルが読み取れません"
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "カテゴリー %d がテーブル <%s> からロードされました"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "入力するファイル"
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "エラー 2029 "
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
-
 #, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "z 列を指定して下さい"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "ファイルが作成できません <%s>"
 
 #, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "入力するファイル"
+#~ msgid "Starting monitor <%s> with env file '%s'"
+#~ msgstr "マップ名前を <%s> をオーバーライドする <%s> に設定しています"
 
 #, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
+#~ msgid "Env file not found"
+#~ msgstr "3Dビューファイル <%s> は見つかりませんでした"
 
 #, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
-
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "ウェート= と -c は相互に排他的です"
-
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "weight= と gauss= オプションは同時には使えません"
+#~ msgid "PID file not found"
+#~ msgstr "ファイル %s が見つかりません"
 
 #, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "���� ����"
+#~ msgid "Command file not found"
+#~ msgstr "列 <%s> がありません"
 
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "z 列を指定して下さい"
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "z 列を指定して下さい"
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "入力= そしてソース= は相互排他的です"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "z 列を指定して下さい"
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "z 列を指定して下さい"
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "エラー 2029 "
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "エラー 2029 "
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "エラー 2029 "
+#~ msgid "Renaming reclass maps"
+#~ msgstr "リクラスマップ名を変更しています"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "エラー 2029 "
+#~ msgid "Name for output image"
+#~ msgstr "出力するファイル"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "入力するファイル"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "グループ <%s> のサブグループ<%s> のREFファイルが読み取れません"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "入力するファイル"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "標準色名またはR:G:B tripletのいずれか"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "カテゴリー %d がテーブル <%s> からロードされました"
 
 #~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
 #~ msgstr ""
-#~ "グラフィックモニターで作動中のフレームにおける主題ベクトルエリアマップを表"
-#~ "示  "
+#~ "増えるv.lidar.出力の修正. LIDARフィルタリングの3つのアルゴリズムの最後で"
+#~ "す.  "
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "テキストの色 "
+#~ msgid "Interpolation spline step value in east direction"
+#~ msgstr "東方向における補間スプラインステップ値"
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "グリッドのカラー, または \"なし\""
+#~ msgid "Interpolation spline step value in north direction"
+#~ msgstr "北方向における補間スプラインステップ値"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "出力ラスターマップ名"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "出力するファイル"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "マップ群中の離散化誤差"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "最大スポッティング距離も作成する"
 
 #~ msgid "Displays thematic vector map"
 #~ msgstr "主題ベクトルマップを表示"
@@ -42053,39 +43897,82 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgstr "凡例の数学表記角括弧を使用"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "出力するファイル"
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "出力ラスターマップ名"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "最大スポッティング距離も作成する"
+#~ msgid "Default: input"
+#~ msgstr "マップ群中の離散化誤差"
+
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr ""
+#~ "グラフィックモニターで作動中のフレームにおける主題ベクトルエリアマップを表"
+#~ "示  "
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "テキストカラーまたは \"none\""
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "表示"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "テキストの色 "
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "グリッドのカラー, または \"なし\""
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "標準色名またはR:G:B tripletのいずれか"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "ライン"
 
 #, fuzzy
 #~ msgid ""
 #~ "Allows creation and/or modification of raster3d map layer support files."
 #~ msgstr "ラスターマップレイヤーをサポートするファイルの作成(更新)を許可 "
 
-#, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "ベクトルマップを読み込めません"
+#~ msgid "Failed opening input dig file."
+#~ msgstr "指定されたdigファイルを開けません"
 
-#, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "表を作成できません: %s"
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "dig_att ファイルがありません"
 
-#, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "メモリーが足りません"
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "指定された dig_att ファイルを開けません"
 
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "OLD_T_NEW は不正な型のコードを取得しました [%x]  "
+#~ msgid "Attaching categories..."
+#~ msgstr "カテゴリーを添付中、、、"
 
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "NEW_T_OLD は不正な型のコードを取得しました [%x]  "
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "ラインへの属性(カテゴリー %d)の添付に失敗"
+
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "ライン %d ラベル: %d は別のラベル %d に適合"
+
+#~ msgid "Writing new file..."
+#~ msgstr "新しいファイルを書き込み中、、、"
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "[%d] のポイントとラインが出力ファイルに書き込まれました"
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "[%d] のセントロイドが出力ファイルに書き込まれました"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "旧バージョンのGRASSベクトルマップをインポート"
+
+#~ msgid "Endian of input vector map"
+#~ msgstr "入力するベクトルマップのエンディアン"
+
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "カテゴリーラベル (dig_cats) がありません.テーブルは作成されませんでした"
+
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "dig_cats ファイルを開けません"
 
 #~ msgid "Reading dig file..."
 #~ msgstr "dig ファイルを読み込み中、、、"
@@ -42169,184 +44056,39 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "[%d] のカテゴリーをメモリに読み込む"
 
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "カテゴリーラベル (dig_cats) がありません.テーブルは作成されませんでした"
-
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "dig_cats ファイルを開けません"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "指定されたdigファイルを開けません"
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "dig_att ファイルがありません"
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "指定された dig_att ファイルを開けません"
-
-#~ msgid "Attaching categories..."
-#~ msgstr "カテゴリーを添付中、、、"
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "ラインへの属性(カテゴリー %d)の添付に失敗"
-
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "ライン %d ラベル: %d は別のラベル %d に適合"
-
-#~ msgid "Writing new file..."
-#~ msgstr "新しいファイルを書き込み中、、、"
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "[%d] のポイントとラインが出力ファイルに書き込まれました"
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "[%d] のセントロイドが出力ファイルに書き込まれました"
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "旧バージョンのGRASSベクトルマップをインポート"
-
-#~ msgid "Endian of input vector map"
-#~ msgstr "入力するベクトルマップのエンディアン"
-
-#~ msgid "Interpolation spline step value in east direction"
-#~ msgstr "東方向における補間スプラインステップ値"
-
-#~ msgid "Interpolation spline step value in north direction"
-#~ msgstr "北方向における補間スプラインステップ値"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "不明なラスターマップのタイプ"
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "キャッシュサイズ (MiB)"
-
-#~ msgid "Can't call bad function"
-#~ msgstr "不正な関数を呼び出せません"
-
-#~ msgid "Bad arguments to pointfunc %s"
-#~ msgstr "pointfunc 内の不正な変数 %s"
-
-#~ msgid "No function defined to perform ``point %c point''"
-#~ msgstr "計算する関数の指定がありません ``ポイント %c ポイントt''  "
-
-#~ msgid "Performing 1 arg map function on map %s"
-#~ msgstr "マップ %s の 1変数マップ関数を実行"
-
-#~ msgid "Performing 2 arg map function on maps %s and %s"
-#~ msgstr "マップ %s と %s  の 2変数マップ 関数を実行"
-
-#~ msgid "Performing map %s + %s"
-#~ msgstr "マップ %s + %s を実行"
-
-#~ msgid "Can't call bad map-function"
-#~ msgstr "不正な map-function を呼び出せません"
-
-#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
-#~ msgstr "mapfunc %s 中の不正な変数 (argc = %d)  "
-
-#~ msgid "No function defined to perform map %c map"
-#~ msgstr " マップ %c マップ を実行する関数が指定されていません"
-
-#~ msgid "Can't call bad num-function"
-#~ msgstr "不正な num-function を呼び出せません"
-
-#~ msgid "Bad arguments to numfunc %s"
-#~ msgstr "numfunc の不正な変数 %s"
-
-#~ msgid "No function defined to perform ``number %c number''"
-#~ msgstr "計算する関数の指定がありません ``数値 %c 数値''  "
-
-#~ msgid "Can't call bad any-function"
-#~ msgstr "不正な any-function を呼び出せません"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "OLD_T_NEW は不正な型のコードを取得しました [%x]  "
 
-#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
-#~ msgstr "anyfunc %s 中の不正な変数 (argc = %d)  "
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "NEW_T_OLD は不正な型のコードを取得しました [%x]  "
 
 #~ msgid "One or more coordinates"
 #~ msgstr "1つまたはそれ以上の座標"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "adx  に 割り当てるメモリが足りません"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "ady  に 割り当てるメモリが足りません"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "adxx  に 割り当てるメモリが足りません"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "adyy  に 割り当てるメモリが足りません"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "adxy  に 割り当てるメモリが足りません"
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "quaddata を作成できません"
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "quadfunc を作成できません"
-
-#~ msgid "Cannot create tree"
-#~ msgstr "ツリーを作成できません"
-
-#~ msgid "Cannot create tree info"
-#~ msgstr "ツリー情報を作成できません"
-
-#~ msgid "sites"
-#~ msgstr "サイト"
-
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "GRASS site_lists ファイルをベクトルマップに変換します"
-
-#~ msgid "Site file <%s> not found"
-#~ msgstr "サイトファイル <%s> は見つかりませんでした"
-
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "site_list フォーマットを推測できません"
-
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "サイト構造を割り当てられませんでした"
-
-#~ msgid "Input format: dimension: %d strings: %d FP: %d"
-#~ msgstr "入力フォーマット: ディメンション: %d ストリング: %d FP: %d  "
-
-#~ msgid ""
-#~ "Floating point category values, using sequential integer for category"
-#~ msgstr "浮動小数点かエゴリー値, カテゴリーに一連の整数型を使用  "
-
-#~ msgid "No category values, using sequential integer for category"
-#~ msgstr "カテゴリー値がありません, カテゴリーに逐次整数を使用します"
-
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "サイトをベクトルポイントマップに転送しています "
+#~ msgid "Name of elevation map"
+#~ msgstr "標高マップ名"
 
-#~ msgid "%d sites written."
-#~ msgstr "%d サイトが書き込まれました.  "
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "データのないセルに代入する記号"
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "照度で使用するレイヤー名"
+#, fuzzy
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "入力するファイル"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "彩度で使用するレイヤー名"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "不明なメトリック: [%s]  "
 
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "US-NGA GEOnet Names Server (GNS) カントリーファイルをGRASSベクトルポイント"
-#~ "マップへインポート"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr " <%s> のカテゴリーファイルを読み込めません"
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "NGAから圧縮されていないGNSファイル (.txt 拡張子)  "
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "エラー: 色ファイル <%s> が読み込めません"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "標高のラスターマップ名"
+#~ msgid "String representing no data cell value"
+#~ msgstr "データのないセルに代入する記号 "
 
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "エクスポートされるかDB接続ストリングするテーブルファイル"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "ラスターマップの曲面補間ユーティリティー"
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -42360,15 +44102,18 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ "cell values represent friction cost."
 #~ msgstr "累積コストを表すラスターマップを作成します "
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "照度で使用するレイヤー名"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "彩度で使用するレイヤー名"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "緑色で使用するレイヤー名"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "青色で使用するレイヤー名"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "ラスターマップの曲面補間ユーティリティー"
-
 #~ msgid "Surface generation program."
 #~ msgstr "曲面生成プログラム"
 
@@ -42390,49 +44135,15 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgstr[0] "ラスターマップ <%s>... %d 行を補完中... "
 #~ msgstr[1] "ラスターマップ <%s>... %d 行を補完中... "
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "緯度/経度投影はこの時点ではサポートされていません.  "
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "フォント"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "ガンマ"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "標高マップ名"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "データのないセルに代入する記号"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "入力するファイル"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "入力するファイル"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "不明なメトリック: [%s]  "
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr " <%s> のカテゴリーファイルを読み込めません"
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "エラー: 色ファイル <%s> が読み込めません"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "データのないセルに代入する記号 "
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "標高を出力するファイル "
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "出力方位マップ (または fy)  "
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "緯度/経度投影はこの時点ではサポートされていません.  "
+
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "出力するラスターマップ のプレフィックス"
 
@@ -42462,13 +44173,23 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgid "Suppress warnings"
 #~ msgstr "警告(通知)を止める"
 
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr ""
+#~ "US-NGA GEOnet Names Server (GNS) カントリーファイルをGRASSベクトルポイント"
+#~ "マップへインポート"
+
 #, fuzzy
-#~ msgid "High resolution panchromatic image"
-#~ msgstr "複数波長と高解像度パンクロチャンネルを統合するBrovey変換"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "NGAから圧縮されていないGNSファイル (.txt 拡張子)  "
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "ニートライン"
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "標高のラスターマップ名"
+
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "エクスポートされるかDB接続ストリングするテーブルファイル"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -42490,6 +44211,142 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgstr "出力するラスターマップ (初期値: 入力タイル)"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr "ラスターマップの非NULLセルから単変量統計を計算します"
+
+#~ msgid "Data to be classified: column name or expression"
+#~ msgstr "分類されるデータ: 列名または表現  "
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "グリッドのカラー, または \"なし\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "グリッドのカラー, または \"なし\""
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "不明な情報表示のカラー"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "グリッドのカラー, または \"なし\""
+
+#~ msgid "Create grid of points instead of areas and centroids"
+#~ msgstr "エリアとセントロイドの代わりに格子点を作成"
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "エリアとセントロイドの代わりに格子点を作成"
+
+#~ msgid "Invalid distance"
+#~ msgstr "無効な距離"
+
+#~ msgid "Layer number"
+#~ msgstr "レイヤー数"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "フォント"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "ガンマ"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "入力= そしてソース= は相互排他的です"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "z 列を指定して下さい"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "エラー 2029 "
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "エラー 2029 "
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "���� ����"
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "入力= そしてソース= は相互排他的です"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "入力するファイル"
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "入力= そしてソース= は相互排他的です"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "入力= そしてソース= は相互排他的です"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "z 列を指定して下さい"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "z 列を指定して下さい"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "入力= そしてソース= は相互排他的です"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "z 列を指定して下さい"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "z 列を指定して下さい"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "表示"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "入力するファイル"
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "エラー 2029 "
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "入力= そしてソース= は相互排他的です"
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "ウェート= と -c は相互に排他的です"
+
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "weight= と gauss= オプションは同時には使えません"
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr "複数波長と高解像度パンクロチャンネルを統合するBrovey変換"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "ニートライン"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "入力ラスターマップ名"
 
@@ -42505,30 +44362,138 @@ msgstr "出力するラスターマップ名(彩度)"
 #~ msgid "No maps output"
 #~ msgstr "出力マップがありません"
 
-#, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr "ラスターマップの非NULLセルから単変量統計を計算します"
-
-#~ msgid "Data to be classified: column name or expression"
-#~ msgstr "分類されるデータ: 列名または表現  "
-
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "グリッドまたは \"none\" を描くカラー"
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "ヒストグラムを集合させます"
 
-#~ msgid "Create grid of points instead of areas and centroids"
-#~ msgstr "エリアとセントロイドの代わりに格子点を作成"
+#~ msgid "Not enough memory for adx"
+#~ msgstr "adx  に 割り当てるメモリが足りません"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "ady  に 割り当てるメモリが足りません"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "adxx  に 割り当てるメモリが足りません"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "adyy  に 割り当てるメモリが足りません"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "adxy  に 割り当てるメモリが足りません"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "quaddata を作成できません"
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "quadfunc を作成できません"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "ツリーを作成できません"
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "ツリー情報を作成できません"
 
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "エリアとセントロイドの代わりに格子点を作成"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "表を作成できません: %s"
 
-#~ msgid "Invalid distance"
-#~ msgstr "無効な距離"
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "メモリーが足りません"
 
-#~ msgid "Layer number"
-#~ msgstr "レイヤー数"
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "エラー 2029 "
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "入力するファイル"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "入力するファイル"
+
+#~ msgid "sites"
+#~ msgstr "サイト"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "GRASS site_lists ファイルをベクトルマップに変換します"
+
+#~ msgid "Site file <%s> not found"
+#~ msgstr "サイトファイル <%s> は見つかりませんでした"
+
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "site_list フォーマットを推測できません"
+
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "サイト構造を割り当てられませんでした"
+
+#~ msgid "Input format: dimension: %d strings: %d FP: %d"
+#~ msgstr "入力フォーマット: ディメンション: %d ストリング: %d FP: %d  "
+
+#~ msgid ""
+#~ "Floating point category values, using sequential integer for category"
+#~ msgstr "浮動小数点かエゴリー値, カテゴリーに一連の整数型を使用  "
+
+#~ msgid "No category values, using sequential integer for category"
+#~ msgstr "カテゴリー値がありません, カテゴリーに逐次整数を使用します"
+
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "サイトをベクトルポイントマップに転送しています "
+
+#~ msgid "%d sites written."
+#~ msgstr "%d サイトが書き込まれました.  "
+
+#~ msgid "Performing 1 arg map function on map %s"
+#~ msgstr "マップ %s の 1変数マップ関数を実行"
+
+#~ msgid "Performing 2 arg map function on maps %s and %s"
+#~ msgstr "マップ %s と %s  の 2変数マップ 関数を実行"
+
+#~ msgid "Performing map %s + %s"
+#~ msgstr "マップ %s + %s を実行"
+
+#~ msgid "Can't call bad map-function"
+#~ msgstr "不正な map-function を呼び出せません"
+
+#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
+#~ msgstr "mapfunc %s 中の不正な変数 (argc = %d)  "
+
+#~ msgid "No function defined to perform map %c map"
+#~ msgstr " マップ %c マップ を実行する関数が指定されていません"
+
+#~ msgid "Can't call bad num-function"
+#~ msgstr "不正な num-function を呼び出せません"
+
+#~ msgid "Bad arguments to numfunc %s"
+#~ msgstr "numfunc の不正な変数 %s"
+
+#~ msgid "No function defined to perform ``number %c number''"
+#~ msgstr "計算する関数の指定がありません ``数値 %c 数値''  "
+
+#~ msgid "No function defined to perform ``point %c point''"
+#~ msgstr "計算する関数の指定がありません ``ポイント %c ポイントt''  "
+
+#~ msgid "Can't call bad any-function"
+#~ msgstr "不正な any-function を呼び出せません"
+
+#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
+#~ msgstr "anyfunc %s 中の不正な変数 (argc = %d)  "
+
+#~ msgid "Can't call bad function"
+#~ msgstr "不正な関数を呼び出せません"
+
+#~ msgid "Bad arguments to pointfunc %s"
+#~ msgstr "pointfunc 内の不正な変数 %s"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "ベクトルマップを読み込めません"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "キャッシュサイズ (MiB)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "不明なラスターマップのタイプ"
diff --git a/locale/po/grassmods_ko.po b/locale/po/grassmods_ko.po
index 761cea2..3734907 100644
--- a/locale/po/grassmods_ko.po
+++ b/locale/po/grassmods_ko.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_ko\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2005-08-09 22:53-0500\n"
 "Last-Translator: Huidae Cho <grass4u at gmail.com>\n"
 "Language-Team: Korean <grass-translations at lists.osgeo.org>\n"
@@ -239,6 +239,7 @@ msgstr "출력할 격자지도"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -470,6 +471,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "출력할 격자지도"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -608,29 +614,29 @@ msgstr "출력할 격자지도"
 msgid "Unable to open database:"
 msgstr "출력할 격자지도"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "출력할 격자지도"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "출력할 격자지도"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "출력할 격자지도"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "출력할 격자지도"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -642,6 +648,11 @@ msgstr "출력할 격자지도"
 msgid "Unable grant on table:"
 msgstr "출력할 격자지도"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "출력할 격자지도"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -766,7 +777,7 @@ msgstr "출력할 격자지도"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -843,17 +854,17 @@ msgstr "이름변경"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "설정"
 
@@ -887,39 +898,39 @@ msgstr "출력할 격자지도"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -964,7 +975,7 @@ msgstr ""
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -994,7 +1005,7 @@ msgstr "출력할 격자지도"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1085,10 +1096,10 @@ msgid "Unable to open database <%s>"
 msgstr "출력할 격자지도"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1268,11 +1279,11 @@ msgstr ""
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "출력할 격자지도"
@@ -1306,10 +1317,10 @@ msgstr "출력할 격자지도"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr ""
 
@@ -1317,7 +1328,7 @@ msgstr ""
 msgid "Vertical record separator (requires -v flag)"
 msgstr ""
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1325,7 +1336,7 @@ msgstr ""
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr ""
 
@@ -1333,7 +1344,7 @@ msgstr ""
 msgid "Describe query only (don't run it)"
 msgstr ""
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr ""
 
@@ -1383,6 +1394,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "출력할 격자지도"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr ""
 
@@ -1548,7 +1560,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1667,7 +1678,7 @@ msgstr "출력할 격자지도"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1675,15 +1686,15 @@ msgstr "출력할 격자지도"
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1774,7 +1785,7 @@ msgstr ""
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1820,7 +1831,7 @@ msgstr ""
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1833,26 +1844,27 @@ msgstr ""
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "출력할 격자지도"
@@ -1862,7 +1874,8 @@ msgid "Column type not supported (must be string)"
 msgstr ""
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2003,13 +2016,13 @@ msgstr ""
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2017,8 +2030,8 @@ msgstr ""
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2061,10 +2074,11 @@ msgstr "시각화"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr "그래픽스"
@@ -2078,13 +2092,16 @@ msgstr "그래픽스"
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2093,6 +2110,7 @@ msgstr "그래픽스"
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2108,7 +2126,7 @@ msgstr "그래픽스"
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2128,11 +2146,11 @@ msgstr "그래픽스"
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2144,27 +2162,27 @@ msgstr "그래픽스"
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2182,74 +2200,77 @@ msgstr "그래픽스"
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "격자"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2259,6 +2280,7 @@ msgstr "격자"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2274,6 +2296,7 @@ msgstr "격자"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2292,6 +2315,7 @@ msgid "vector"
 msgstr "벡터"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2300,15 +2324,16 @@ msgstr "벡터"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2345,7 +2370,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "출력할 격자지도"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "출력할 격자지도"
@@ -2922,69 +2947,70 @@ msgid "Vector map <%s> not found"
 msgstr "출력할 격자지도"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "출력할 격자지도"
@@ -3045,12 +3071,13 @@ msgstr ""
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, fuzzy, c-format
 msgid "Unable to open file <%s>"
@@ -3175,7 +3202,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 msgid "distance"
 msgstr ""
@@ -3331,7 +3358,7 @@ msgid "Area:"
 msgstr ""
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "특성을 쓰고 있습니다..."
@@ -3346,7 +3373,7 @@ msgstr "출력할 격자지도"
 msgid "No attribute table for layer %d"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3359,15 +3386,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "출력할 격자지도"
@@ -3390,6 +3418,7 @@ msgid ""
 msgstr "출력할 격자지도"
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3398,6 +3427,7 @@ msgid "extract"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3408,10 +3438,10 @@ msgstr "출력할 격자지도"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 msgid "random"
 msgstr ""
 
@@ -3432,12 +3462,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "출력할 격자지도"
@@ -3457,39 +3486,45 @@ msgstr ""
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3505,7 +3540,10 @@ msgstr ""
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3576,7 +3614,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3623,45 +3661,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3703,11 +3742,11 @@ msgstr "출력할 격자지도"
 msgid "Format <%s> does not support writing"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3852,9 +3891,9 @@ msgstr "출력할 격자지도"
 msgid "Name for output file where to save current settings"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr ""
 
@@ -3875,7 +3914,7 @@ msgstr ""
 msgid "Print current status in shell script style"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "%s=와 %s=를 같이 지정할 수 없습니다"
@@ -3883,7 +3922,7 @@ msgstr "%s=와 %s=를 같이 지정할 수 없습니다"
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "출력할 격자지도"
+msgstr "출력할 래스터맵"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -3891,18 +3930,18 @@ msgid "%s= must be specified"
 msgstr "출력할 래스터맵"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3912,66 +3951,67 @@ msgstr "출력할 격자지도"
 msgid "network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr ""
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -3983,10 +4023,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -3998,48 +4039,83 @@ msgstr ""
 msgid "Cost"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "색상표"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+msgid "Layer with turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4048,10 +4124,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4067,8 +4143,8 @@ msgstr ""
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4097,22 +4173,22 @@ msgstr ""
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4121,17 +4197,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4142,7 +4218,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4152,7 +4228,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 msgid "geometry"
 msgstr "지형"
 
@@ -4203,17 +4279,17 @@ msgid "Unable to get category list <%s>"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr ""
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "출력할 격자지도"
@@ -4505,6 +4581,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4525,12 +4602,15 @@ msgstr "출력할 격자지도"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4687,11 +4767,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr ""
@@ -4825,9 +4905,9 @@ msgid "Remove existing color table"
 msgstr ""
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr ""
@@ -4889,7 +4969,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4905,8 +4985,7 @@ msgstr "출력할 래스터맵"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "%s=와 %s=를 같이 지정할 수 없습니다"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -4932,6 +5011,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "출력할 격자지도"
@@ -4957,7 +5037,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -4966,13 +5046,14 @@ msgstr "출력할 격자지도"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5003,8 +5084,9 @@ msgstr "피쳐를 읽는 중..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5050,7 +5132,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "출력할 격자지도"
@@ -5104,6 +5186,7 @@ msgid "Point out of range"
 msgstr ""
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5112,15 +5195,17 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5213,14 +5298,15 @@ msgstr "출력할 격자지도"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr ""
 
@@ -5413,14 +5499,14 @@ msgstr "출력할 격자지도"
 msgid "Input failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 msgid "Secpar_loop failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr ""
 
@@ -5462,9 +5548,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5572,9 +5658,9 @@ msgstr "출력할 격자지도"
 msgid "3D raster map <%s> created"
 msgstr "격자지도 <%s>를 생성했습니다."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5585,85 +5671,120 @@ msgstr ""
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "출력할 격자지도"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "출력할 격자지도"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5683,17 +5804,19 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr "들여오기"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "출력할 격자지도"
@@ -5724,9 +5847,9 @@ msgstr ""
 msgid "Name of column containing z coordinate"
 msgstr ""
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr ""
 
@@ -5773,7 +5896,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "출력할 격자지도"
@@ -5791,7 +5914,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -5819,7 +5942,81 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "점 %d개를 벡터지도에 저장했습니다. "
 msgstr[1] "점 %d개를 벡터지도에 저장했습니다. "
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "출력할 래스터맵"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5842,7 +6039,7 @@ msgstr[1] "점 %d개를 벡터지도에 저장했습니다. "
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5850,7 +6047,7 @@ msgstr[1] "점 %d개를 벡터지도에 저장했습니다. "
 msgid "statistics"
 msgstr "통계"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6454,8 +6651,8 @@ msgstr "출력할 격자지도"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "출력할 격자지도"
@@ -6515,12 +6712,12 @@ msgid "Breaking lines..."
 msgstr "선을 분해하는 중..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "중복을 지우는 중..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "정점에 있는 경계를 정리하는 중..."
 
@@ -6528,11 +6725,11 @@ msgstr "정점에 있는 경계를 정리하는 중..."
 msgid "Merging lines..."
 msgstr "선을 합치는 중..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "섬을 붙이는 중..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr ""
 
@@ -6548,12 +6745,13 @@ msgstr "벡터지도 <%s>를 검색하는 중..."
 msgid "Attribute not found"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "중심점을 쓰는 중..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "출력할 격자지도"
@@ -6629,125 +6827,127 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr ""
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "출력할 격자지도"
@@ -6793,7 +6993,7 @@ msgid "Name of existing raster map to be queried"
 msgstr ""
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "출력할 격자지도"
@@ -6806,80 +7006,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr ""
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "출력할 격자지도"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "출력할 격자지도"
@@ -6887,14 +7085,14 @@ msgstr "출력할 격자지도"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -6977,7 +7175,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7032,6 +7230,148 @@ msgstr ""
 msgid "%d records updated"
 msgstr ""
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "레이어 <%s>를 위한 데이타베이스 연결이 정의되지 않았습니다"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+msgid "Only numeric column type is supported"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "색상표"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7067,6 +7407,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7097,46 +7443,53 @@ msgstr "출력할 격자지도"
 msgid "No areas selected from vector map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "격자지도를 위한 지원파일을 생성합니다..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7197,15 +7550,17 @@ msgstr ""
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 msgid "Cache size for raster rows"
 msgstr ""
 
@@ -7244,7 +7599,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "출력할 격자지도"
@@ -7263,11 +7618,16 @@ msgstr ""
 msgid "Get area %d failed"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "%d개의 입력 다각형"
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr ""
 
@@ -7298,11 +7658,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr ""
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7476,153 +7831,159 @@ msgstr ""
 msgid "Incompatible types"
 msgstr ""
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 
@@ -7824,13 +8185,14 @@ msgstr ""
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 msgid "If not given or '-' then standard output"
 msgstr "지정하지 않거나 '-'이면 표준출력"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -7854,9 +8216,13 @@ msgstr "지정하지 않거나 '-'이면 표준출력"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -7917,7 +8283,7 @@ msgstr ""
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 
@@ -7981,7 +8347,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8083,9 +8449,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "출력할 격자지도"
@@ -8652,7 +9019,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -8677,7 +9044,7 @@ msgstr "출력할 격자지도"
 msgid "Resolving conflicts..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "출력할 격자지도"
@@ -8703,200 +9070,203 @@ msgid "Performs vector based generalization."
 msgstr ""
 
 #: ../vector/v.generalize/main.c:100
+msgid "Error map with failed generalizations"
+msgstr ""
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 msgid "Lang Simplification Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, c-format
 msgid "Using threshold: %g %s"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -8971,8 +9341,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "문자색상"
 
@@ -8985,13 +9355,13 @@ msgstr "문자색상"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9181,13 +9551,13 @@ msgstr "위상오류를 찾는 중..."
 msgid "Cleaning output topology"
 msgstr "출력 위상을 정리하는 중"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 msgid "Removing dangles..."
 msgstr "댕글을 지우는 중..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 msgid "Removing bridges..."
 msgstr "다리를 지우는 중..."
 
@@ -9238,14 +9608,6 @@ msgstr "출력할 격자지도"
 msgid "Constructing 3D hull..."
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9322,7 +9684,9 @@ msgstr ""
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9726,6 +10090,191 @@ msgstr "출력할 격자지도"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "격자"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+msgid "Not enough points in input, nothing to do"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+msgid "Estimating maximum distance ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, c-format
+msgid "Standard deviation: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, c-format
+msgid "Estimated maximum distance: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "출력할 격자지도"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -9863,25 +10412,25 @@ msgstr "출력할 격자지도"
 msgid "Impossible to write to aux table"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 msgid "network maintenance"
 msgstr ""
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "출력할 격자지도"
@@ -9920,7 +10469,7 @@ msgstr "출력할 격자지도"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -9933,14 +10482,14 @@ msgstr "출력할 격자지도"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -9970,46 +10519,129 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr ""
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr ""
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "출력할 격자지도"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10140,7 +10772,7 @@ msgid "Categories already exist in layer %d"
 msgstr "출력할 격자지도"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "면의 중심점을 계산하지 못 했습니다"
 
@@ -10247,7 +10879,7 @@ msgstr ""
 msgid "Key column type is not integer"
 msgstr ""
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "출력할 격자지도"
@@ -10976,7 +11608,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11231,8 +11863,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "출력할 격자지도"
@@ -11241,7 +11873,7 @@ msgstr "출력할 격자지도"
 msgid "Mapset containing input vector map"
 msgstr ""
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "출력할 격자지도"
@@ -11251,7 +11883,7 @@ msgstr "출력할 격자지도"
 msgid "Name of input vector map to re-project"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr ""
 
@@ -11266,8 +11898,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "출력할 격자지도"
@@ -11300,17 +11932,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "출력할 격자지도"
@@ -11643,354 +12277,575 @@ msgid ""
 "Key column: %s\n"
 msgstr ""
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr ""
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "벡터지도 <%s>를 위한 위상을 생성하고 있습니다..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr ""
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr ""
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr ""
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+#, fuzzy
+msgid "Over-riding projection check"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
-msgid "Import subregion only"
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+msgid "Import subregion only"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 msgid "If not specified, all points are imported"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
-msgid "Print LAS file info and exit"
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+msgid "Print LAS file info and exit"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "기본값: 범주 또는 간격으로 정렬"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-#, fuzzy
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:732
+#, c-format
+msgid "%llu input points were not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:734
+#, c-format
+msgid "%llu input points were outside of the selected area"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:736
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were outside of the area specified by mask"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
+#: ../vector/v.in.lidar/main.c:738
+#, c-format
+msgid "%llu input points were filtered out by return number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
+#: ../vector/v.in.lidar/main.c:740
+#, c-format
+msgid "%llu input points were filtered out by class number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:742
 #, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
+msgid "%llu input points were filtered outsite the range for z coordinate"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:606
-#, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "출력할 격자지도"
+#: ../vector/v.in.lidar/main.c:744
+#, c-format
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:747
+#, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "Scanning %d points..."
+msgid "%lu points imported (limit was %d)"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:757
+#, c-format
+msgid "%lu input points were not valid"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:759
 #, c-format
-msgid "%d input points were not valid"
+msgid "%lu input points were outside of the selected area"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:761
 #, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were filtered out by return number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
 #, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were filtered out by class number"
 msgstr ""
 
+#: ../vector/v.in.lidar/main.c:767
+#, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:769
+#, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:772
+#, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "출력할 격자지도"
+
 #: ../vector/v.external/main.c:55
 msgid ""
 "Creates a new pseudo-vector map as a link to an OGR-supported layer or a "
 "PostGIS feature table."
 msgstr ""
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "출력할 격자지도"
@@ -12000,12 +12855,12 @@ msgstr "출력할 격자지도"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12013,23 +12868,27 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 msgid "List available layers including feature type in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12208,143 +13067,143 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 msgid "Do not make caps at the ends of polylines"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr "다각형을 분해하는 중..."
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "경계를 분해하는 중"
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "출력할 격자지도"
@@ -12608,36 +13467,45 @@ msgstr "출력할 격자지도"
 msgid "%d features written to '%s'."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "출력할 격자지도"
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "출력할 격자지도"
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -12689,7 +13557,7 @@ msgstr "출력할 격자지도"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13333,7 +14201,7 @@ msgstr ""
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -13626,48 +14494,57 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "출력할 격자지도"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "출력할 격자지도"
@@ -13705,45 +14582,49 @@ msgstr ""
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
-msgid "Use either length or vertices"
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
 msgstr ""
 
 #: ../vector/v.split/main.c:108
+msgid "Use either length or vertices"
+msgstr ""
+
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, c-format
 msgid "Length in map units: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, c-format
 msgid "Length in meters: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -13858,7 +14739,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "출력할 격자지도"
@@ -13959,10 +14842,13 @@ msgid "Writing out vector columns..."
 msgstr "출력할 격자지도"
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -13973,6 +14859,7 @@ msgstr "대수"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 msgid "aggregation"
@@ -14121,8 +15008,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "글꼴이름"
 
@@ -14193,6 +15081,125 @@ msgstr "출력할 격자지도"
 msgid "Counting points quadrats..."
 msgstr "출력할 격자지도"
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+msgid "Copies only the given number of points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:199
+msgid "Minimal difference of z values"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.decimate/main.c:232
+msgid "Use z in grid decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14207,29 +15214,29 @@ msgstr ""
 msgid "Target location <%s> not found"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "출력할 격자지도"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -14556,10 +15563,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr ""
 
-#: ../vector/v.univar/main.c:358
-msgid "Only numeric column type is supported"
-msgstr ""
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -14643,311 +15646,315 @@ msgid_plural "%d records updated."
 msgstr[0] "출력할 격자지도"
 msgstr[1] "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr ""
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 msgid "Minimum size of area to be imported (square meters)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 msgid "If not given, all geometry columns from the input are used"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 msgid "List supported OGR formats and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 msgid "List available OGR layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "출력할 격자지도"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr "OGR 레이어 <%s>가 다각형을 포함하고 있는지 확인하는 중..."
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "피쳐 %d개를 들여오는 중 (OGR 레이어 <%s>)..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 msgid "Cleaning polygons"
 msgstr "다각형을 정리하는 중"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 msgid "Merging boundaries..."
 msgstr "경계를 합치는 중..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "OGR 레이어 <%s>를 위한 중심점을 찾는 중..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -14955,116 +15962,116 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr "%d개의 입력 다각형\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d개의 입력 다각형"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "총면적: %G (%d개의 면)\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "출력할 격자지도"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15274,6 +16281,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr ""
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "출력할 격자지도"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -15426,19 +16438,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr ""
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "출력할 격자지도"
@@ -15614,14 +16626,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "격자지도 <%s>가 이미 존재하지만 덮어 씁니다"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "격자지도 <%s>가 이미 존재합니다"
@@ -15744,14 +16756,18 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+msgid "Create polyline from lines with same categories"
+msgstr ""
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "출력할 격자지도"
 msgstr[1] "출력할 격자지도"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16228,19 +17244,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16254,6 +17275,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16266,7 +17288,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -16422,6 +17444,7 @@ msgid "Unable to map image file"
 msgstr "출력할 격자지도"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -16439,14 +17462,14 @@ msgstr "출력할 격자지도"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16484,6 +17507,52 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+msgid "Create a new frame if doesn't exist and select"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+msgid "Print names of all frames including 'at' position and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -16501,7 +17570,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -16514,7 +17583,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -16589,18 +17658,23 @@ msgid ""
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -16615,6 +17689,7 @@ msgstr "출력할 격자지도"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -16709,6 +17784,92 @@ msgstr "출력할 격자지도"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -16838,7 +17999,7 @@ msgstr "출력할 격자지도"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 msgid "map management"
@@ -16850,8 +18011,8 @@ msgid "rename"
 msgstr "이름변경"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -16860,9 +18021,9 @@ msgid "input"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -16877,6 +18038,76 @@ msgstr ""
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "출력할 격자지도"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+msgid "contour"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "출력할 격자지도"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -16885,7 +18116,7 @@ msgstr "출력할 격자지도"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr "목록"
 
@@ -16941,8 +18172,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17053,74 +18285,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "출력할 격자지도"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17155,44 +18356,27 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
-msgid "Number of r.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "출력할 격자지도"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
+msgid "Number of r.mapcalc processes to run in parallel"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
@@ -17292,7 +18476,7 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
+msgid "Name for output image (or text file for -t)"
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
@@ -17309,6 +18493,52 @@ msgstr ""
 msgid "Use gnuplot for display"
 msgstr "출력할 격자지도"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+msgid "Comma separated list of coordinates"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "보고서를 보관할 출력파일의 이름"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17340,31 +18570,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "출력할 격자지도"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -17546,6 +18755,20 @@ msgstr ""
 msgid "Output field separator"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "출력할 격자지도"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr ""
@@ -17644,8 +18867,15 @@ msgstr "출력할 격자지도"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "지도관리"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "출력할 격자지도"
@@ -17655,7 +18885,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -17664,15 +18894,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -17716,7 +18946,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr ""
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "출력파일 이름"
 
@@ -17796,16 +19026,27 @@ msgstr "출력할 격자지도"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "출력할 격자지도"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 msgid "inputs"
 msgstr ""
@@ -17880,12 +19121,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18009,16 +19257,14 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "출력할 격자지도"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 msgid ""
 "Create a 3D raster map from an assemblage of many coordinates using "
@@ -18026,12 +19272,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr ""
 
@@ -18046,7 +19292,7 @@ msgid "ASCII file containing input data"
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr ""
 
@@ -18054,14 +19300,14 @@ msgstr ""
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr ""
 
@@ -18099,17 +19345,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18147,19 +19393,15 @@ msgid ""
 "on the fly."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "출력할 격자지도"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18256,7 +19498,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -18343,23 +19585,18 @@ msgstr "출력할 격자지도"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "출력할 격자지도"
@@ -18474,17 +19711,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "출력할 격자지도"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18492,10 +19733,6 @@ msgid ""
 "space time raster datasets."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -18604,74 +19841,90 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
-msgid "List available extensions in the GRASS Addons SVN repository"
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 msgid "Install"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr ""
 
@@ -18786,10 +20039,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr ""
@@ -18843,6 +20092,55 @@ msgstr ""
 msgid "Test name"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -18909,6 +20207,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "출력할 격자지도"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr ""
@@ -19077,20 +20386,26 @@ msgid "Description of the space time dataset"
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19134,12 +20449,12 @@ msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19222,7 +20537,7 @@ msgstr "출력할 격자지도"
 msgid "Neighborhood size"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "출력할 격자지도"
@@ -19323,24 +20638,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr ""
 
@@ -19403,17 +20735,36 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr ""
 
@@ -19501,6 +20852,7 @@ msgstr "출력할 격자지도"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -19516,10 +20868,15 @@ msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -19630,27 +20987,22 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 msgid "series"
 msgstr "계열"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "출력할 격자지도"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -19685,7 +21037,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -19698,7 +21050,7 @@ msgid "Radius of buffer in raster cells"
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr ""
 
@@ -19716,12 +21068,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -19747,7 +21099,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "출력할 격자지도"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -19774,6 +21126,16 @@ msgstr ""
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "출력할 격자지도"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "출력할 격자지도"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -19784,19 +21146,11 @@ msgstr "출력할 격자지도"
 msgid "Vector map to which to join other table"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -19823,17 +21177,17 @@ msgstr "출력할 격자지도"
 msgid "Imports space time raster dataset."
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "출력할 격자지도"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -19908,14 +21262,17 @@ msgstr "출력할 격자지도"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -19946,11 +21303,11 @@ msgstr ""
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -19958,8 +21315,8 @@ msgstr "출력할 격자지도"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "출력할 격자지도"
@@ -20013,6 +21370,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "출력할 격자지도"
@@ -20160,9 +21518,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "지하수흐름"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20188,7 +21547,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "출력할 격자지도"
@@ -20250,6 +21612,139 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "출력할 격자지도"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in map units"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "기본값: 자동축척"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:253
+msgid "Default step is 0.25 cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "출력할 격자지도"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -20375,11 +21870,11 @@ msgstr "출력할 격자지도"
 msgid "3D raster map for which to modify null values"
 msgstr "출력할 격자지도"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -20404,7 +21899,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "출력할 격자지도"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "출력할 격자지도"
@@ -20413,6 +21908,82 @@ msgstr "출력할 격자지도"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "격자"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "출력할 격자지도"
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -20465,13 +22036,13 @@ msgstr ""
 msgid "Update range"
 msgstr ""
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr ""
@@ -20527,7 +22098,7 @@ msgstr "출력할 격자지도"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "출력할 격자지도"
@@ -20895,7 +22466,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -20905,7 +22476,7 @@ msgstr ""
 msgid "Aggregate operation"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -20937,6 +22508,36 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "출력할 격자지도"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.gradient/main.c:47
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "출력할 격자지도"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "출력할 격자지도"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -21265,38 +22866,38 @@ msgstr "출력할 격자지도"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -21583,13 +23184,13 @@ msgid "Unknown operation '%s'"
 msgstr "알려지지 않은 작업 '%s'"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr "-%c 플래그를 무시합니다"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, c-format
 msgid "Option <%s> ignored"
 msgstr "<%s> 옵션을 무시합니다"
@@ -21657,9 +23258,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: 파일이 똑같아서 복사할 필요가 없습니다"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s>가 이미 존재합니다"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s>가 지도세트 <%s> 안에 이미 존재합니다."
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -21767,8 +23368,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -22025,9 +23626,9 @@ msgstr "지도이름 제외패턴 (기본값: 없음)"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "패턴"
 
@@ -22041,15 +23642,15 @@ msgstr "지도이름 검색패턴"
 msgid "File name exclusion pattern (default: none)"
 msgstr "지도이름 제외패턴 (기본값: 없음)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "와일드카드 대신 기본 정규표현식을 사용합니다"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "와일드카드 대신 확장 정규표현식을 사용합니다"
 
@@ -22058,7 +23659,7 @@ msgid "Remove base raster maps"
 msgstr "기반 격자지도를 지웁니다"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "패턴 <%s>를 컴파일하지 못 했습니다"
@@ -22106,7 +23707,7 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
@@ -22114,69 +23715,59 @@ msgstr ""
 "선택적인 검색패턴을 이용해서 사용자가 지정한 자료형의 유효한 GRASS 데이타베이"
 "스 파일을 나열합니다."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "지도이름 검색패턴 (기본값: 모두)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "지도이름 제외패턴 (기본값: 없음)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 msgid "Name of mapset to list (default: current search path)"
 msgstr "나열할 지도세트의 이름 (기본값: 현재 검색경로)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr "현재 지도세트 '.'; 로케이션 안의 모든 지도세트 '*'"
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "출력할 격자지도"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "현재 지도세트 '.'; 로케이션 안의 모든 지도세트 '*'"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "자료형을 출력합니다"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr "지도세트를 포함한 완전한 지도이름을 출력합니다"
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "사람이 읽기 쉬운 양식으로 출력합니다"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "지도제목을 포함한 상세목록을 나열합니다"
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "-%c/-%c와 %s=를 같이 지정할 수 없습니다"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "-%c/-%c와 -%c를 같이 지정할 수 없습니다"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "출력할 격자지도"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "출력할 격자지도"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "출력할 격자지도"
@@ -22369,56 +23960,56 @@ msgstr ""
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -22629,40 +24220,61 @@ msgid "command line interface with GUI startup screen"
 msgstr "명령줄 인터페이스에만 적용"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
 msgstr "시작할 때 읽어 들일 작업공간 파일의 이름"
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr "기본 사용자설정을 갱신합니다"
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr "기본값"
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr "기본 사용자설정을 갱신한 뒤에는 GUI를 시작하지 마세요"
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s>가 이제 기본 GUI입니다"
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
+#, fuzzy, c-format
+msgid "Launching <%s> GUI, please wait..."
+msgstr "<%s> GUI를 배경프로세스에서 시작합니다. 기다려주세요..."
+
+#: ../general/g.gui/main.c:122
 #, c-format
 msgid "Launching <%s> GUI in the background, please wait..."
 msgstr "<%s> GUI를 배경프로세스에서 시작합니다. 기다려주세요..."
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
-msgstr ""
-
 #: ../general/g.access/set_perms.c:26
 msgid "Unable to change mapset permissions"
 msgstr "지도세트의 허가를 바꿀 수 없습니다"
@@ -22964,11 +24576,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr ""
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "출력할 격자지도"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23124,7 +24731,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr ""
 
@@ -23530,7 +25137,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "출력할 격자지도"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -23722,148 +25329,148 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr ""
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "출력할 격자지도"
@@ -23918,12 +25525,6 @@ msgstr "출력할 격자지도"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr ""
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -23949,22 +25550,22 @@ msgstr ""
 msgid "Raster map <%s> not found in current mapset"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr ""
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr ""
 
@@ -24711,7 +26312,7 @@ msgstr "출력할 격자지도"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "출력할 격자지도"
@@ -24917,8 +26518,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "출력할 격자지도"
@@ -25001,12 +26602,12 @@ msgstr ""
 msgid "Can't get cell header"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -25193,17 +26794,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr ""
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -25228,7 +26825,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr ""
 
@@ -25237,15 +26834,15 @@ msgstr ""
 msgid "Invalid vrange"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -25267,7 +26864,7 @@ msgid "Reading input data..."
 msgstr "출력할 격자지도"
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -25310,16 +26907,16 @@ msgstr "출력할 격자지도"
 msgid "Writing to output raster map..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -25476,11 +27073,6 @@ msgstr "출력할 격자지도"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "출력할 격자지도"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -26016,104 +27608,109 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr ""
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "출력할 격자지도"
@@ -26520,86 +28117,174 @@ msgstr ""
 msgid "File <%s> created"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.lidar/main.c:175
+msgid "Filter range for intensity values (min,max)"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
 #, fuzzy, c-format
-msgid "Option '%s' must be > 0.0"
+msgid "Unknown filter option <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.lidar/main.c:700
-#, fuzzy
-msgid "Reading data ..."
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.lidar/main.c:468
+#, fuzzy, c-format
+msgid "Option '%s' must be > 0.0"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.lidar/main.c:714
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
-msgid "Could not rewind input file"
+msgid "Reading data ..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, c-format
 msgid "Unknown metric: '%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -26736,7 +28421,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "출력할 격자지도"
@@ -26841,7 +28526,7 @@ msgid "There are no valid locations in the current region"
 msgstr ""
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -27397,7 +29082,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -27818,7 +29503,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "위상정보를 셸스크립트 형식으로 출력합니다"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -27839,11 +29524,6 @@ msgstr ""
 msgid "Unable to write to temp file"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "출력할 격자지도"
-
 #: ../raster/r.clump/clump.c:265
 msgid "Pass 2 of 2..."
 msgstr ""
@@ -27960,7 +29640,7 @@ msgid "Writing output raster map..."
 msgstr "출력할 격자지도"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -27971,42 +29651,42 @@ msgstr "출력할 격자지도"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -28094,22 +29774,22 @@ msgid "Invalid map type"
 msgstr "출력할 격자지도"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -28216,23 +29896,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -28240,8 +29920,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -28733,214 +30413,219 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 msgid "Inputs"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 msgid "Minimum size of exterior watershed basin"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "출력 위상색인 격자지도의 이름"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 msgid "The basin threshold must be a positive number."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -28948,20 +30633,30 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -28990,32 +30685,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr ""
@@ -29407,7 +31102,7 @@ msgstr "출력할 격자지도"
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr ""
@@ -29786,7 +31481,7 @@ msgid ""
 msgstr "출력할 격자지도"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -29801,11 +31496,23 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "-%c와 -%c를 같이 지정할 수 없습니다"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -30078,33 +31785,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -30381,31 +32088,11 @@ msgstr ""
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr ""
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr ""
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 msgid "Contour levels"
 msgstr ""
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr ""
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -30993,52 +32680,53 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 msgid "Seed for rand() function"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "-%c와 -%c를 같이 지정할 수 없습니다"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 msgid "parse error"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr ""
@@ -31088,81 +32776,81 @@ msgstr ""
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -31348,21 +33036,21 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -31401,14 +33089,6 @@ msgstr "출력할 격자지도"
 msgid "Band to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -31430,7 +33110,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "출력할 격자지도"
@@ -31449,7 +33129,7 @@ msgstr "출력할 격자지도"
 msgid "Reading band %d of %d..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr ""
@@ -31518,195 +33198,214 @@ msgstr "%s를 위한 지원파일을 생성합니다"
 msgid "Link to raster map <%s> created."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 msgid "Band(s) to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr ""
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "출력할 격자지도"
@@ -31830,7 +33529,7 @@ msgstr "출력할 격자지도"
 msgid "Writing topographic index map..."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "출력할 격자지도"
@@ -31928,34 +33627,34 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 msgid "patching"
 msgstr ""
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
 msgstr ""
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr ""
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 #, fuzzy
 msgid "Name for resultant raster map"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr ""
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "격자지도 <%s>를 위한 지원파일을 생성합니다"
@@ -32023,37 +33722,6 @@ msgstr "출력할 격자지도"
 msgid "Converts a raster map into a vector map."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "출력할 격자지도"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "출력할 격자지도"
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "출력할 격자지도"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -32552,10 +34220,6 @@ msgstr ""
 msgid "Advanced"
 msgstr "고급"
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr ""
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -32840,7 +34504,7 @@ msgstr ""
 msgid "Name for output raster map(s)"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr ""
 
@@ -32864,7 +34528,7 @@ msgstr ""
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "출력할 격자지도"
@@ -33192,7 +34856,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -33217,7 +34881,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr ""
@@ -33236,7 +34900,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 msgid "patch index"
 msgstr ""
 
@@ -33380,7 +35044,7 @@ msgstr ""
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr ""
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 
@@ -33546,11 +35210,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "출력할 격자지도"
@@ -33762,21 +35426,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -33802,76 +35506,85 @@ msgstr ""
 msgid "Print compression information and data type of input map(s)"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "계열"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "<%s>가 이미 존재합니다"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "<%s>가 이미 존재합니다"
+msgid "Uncompressing <%s>"
+msgstr "출력할 격자지도"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "출력할 격자지도"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "<%s>가 지도세트 <%s> 안에 이미 존재합니다."
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -33903,52 +35616,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "여과"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "출력할 격자지도"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "출력할 격자지도"
@@ -34359,20 +36072,25 @@ msgstr[1] "출력할 격자지도"
 msgid "Calculating %s"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "출력할 격자지도"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "출력할 격자지도"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -34508,7 +36226,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr "출력할 격자지도"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr ""
 
@@ -34628,14 +36346,10 @@ msgid "Starting and ending coordinates"
 msgstr ""
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr ""
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr ""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -34664,8 +36378,8 @@ msgid "Name of monitor to start"
 msgstr "출력할 격자지도"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -34724,47 +36438,65 @@ msgstr ""
 msgid "Print commands for currently selected monitor and exit"
 msgstr ""
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "출력할 격자지도"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "출력할 격자지도"
@@ -34774,62 +36506,72 @@ msgstr "출력할 격자지도"
 msgid "Monitor <%s> is not running"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
+msgstr "출력할 격자지도"
+
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "출력할 격자지도"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
+msgid "Starting monitor <%s>..."
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "출력할 격자지도"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 msgid "List of running monitors:"
 msgstr ""
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
 msgstr "출력할 격자지도"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
 msgstr "출력할 격자지도"
 
 #: ../display/d.erase/main.c:33
@@ -34935,26 +36677,43 @@ msgstr "출력할 격자지도"
 msgid "[%s]: illegal value specified"
 msgstr "출력할 격자지도"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "출력할 격자지도"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+msgid "Font settings"
+msgstr "글꼴설정"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "글꼴파일의 경로"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -34962,7 +36721,7 @@ msgstr[0] "출력할 격자지도"
 msgstr[1] "출력할 격자지도"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -34970,7 +36729,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -35046,11 +36805,6 @@ msgstr ""
 msgid "Colorize features according color definition column"
 msgstr "출력할 격자지도"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "출력할 격자지도"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -35060,7 +36814,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr ""
 
@@ -35592,36 +37346,36 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "출력할 격자지도"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "출력할 격자지도"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr ""
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -35865,14 +37619,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "글꼴파일의 경로"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "입력파일"
@@ -35934,7 +37680,7 @@ msgstr ""
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr ""
 
@@ -35970,12 +37716,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "출력할 격자지도"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -36018,13 +37774,7 @@ msgstr "부분집합"
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-msgid "Font settings"
-msgstr "글꼴설정"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr "글꼴크기"
@@ -36105,11 +37855,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -36122,34 +37873,90 @@ msgstr "출력할 격자지도"
 msgid "North arrow style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "출력할 격자지도"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -36164,65 +37971,65 @@ msgstr ""
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 msgid "Color for drawing drawing grid"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 msgid "Color for drawing null values (X symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "출력할 격자지도"
@@ -36491,56 +38298,42 @@ msgstr "출력할 격자지도"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -36613,202 +38406,216 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, c-format
 msgid "Mapset:   %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, c-format
 msgid "Group:    %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, c-format
 msgid "Subgroup: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, c-format
 msgid "Mask: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, c-format
 msgid "Cluster parameters%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -37108,8 +38915,8 @@ msgid "radiance"
 msgstr "출력할 격자지도"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "출력할 격자지도"
@@ -37470,354 +39277,398 @@ msgstr "출력할 격자지도"
 msgid "group <%s> references the following subgroups\n"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 msgid "mod09: Atmospheric Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -38019,7 +39870,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr ""
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "출력할 격자지도"
@@ -38375,108 +40226,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, c-format
 msgid "Candidate flag is already %s"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "출력할 격자지도"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -38550,62 +40407,79 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 msgid "Invalid similarity method"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 msgid "Invalid number of MB, 300 will be used"
 msgstr ""
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "출력할 격자지도"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -38675,7 +40549,7 @@ msgstr "출력할 격자지도"
 msgid "Name for output raster map (blue)"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -38727,7 +40601,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -39554,49 +41428,53 @@ msgstr "출력할 격자지도"
 msgid "Option '%s' is required for new exposure info"
 msgstr "출력할 격자지도"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 msgid "albedo"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 msgid "Computes broad band albedo from surface reflectance."
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "출력할 격자지도"
@@ -39876,6 +41754,10 @@ msgstr "출력할 격자지도"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -40265,111 +42147,91 @@ msgstr "출력할 격자지도"
 msgid "Name for output raster map (saturation)"
 msgstr "출력할 격자지도"
 
-#, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "출력할 격자지도"
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s>가 이미 존재합니다"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "출력할 격자지도"
-
-#, fuzzy
-#~ msgid "time series"
-#~ msgstr "계열"
+#~ msgid "<%s> already compressed"
+#~ msgstr "<%s>가 이미 존재합니다"
 
 #, fuzzy
-#~ msgid "Monthly minimum temperatures"
+#~ msgid "Grid-decimated point cloud"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Monthly minimum temperatures for 12 months"
+#~ msgid "Layer number where red color is stored as category"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Monthly maximum temperatures"
+#~ msgid "Layer number where blue color is stored as category"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Monthly maximum temperatures for 12 months"
+#~ msgid "Layer number to store number of returns as category"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Monthly average temperatures"
+#~ msgid "Store only the coordinates"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Monthly average temperatures for 12 months"
+#~ msgid "Do not add categories to points and do not create attribute table"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Prefix for output maps"
+#~ msgid "Monthly minimum temperatures"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Scale factor for input temperature"
+#~ msgid "Monthly minimum temperatures for 12 months"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Scale factor for output temperature"
+#~ msgid "Monthly maximum temperatures"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Number of quartals to use"
+#~ msgid "Monthly maximum temperatures for 12 months"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
+#~ msgid "Monthly average temperatures"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
+#~ msgid "Monthly average temperatures for 12 months"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
+#~ msgid "Prefix for output maps"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
+#~ msgid "Scale factor for input temperature"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
+#~ msgid "Scale factor for output temperature"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
+#~ msgid "Number of quartals to use"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
+#~ msgid "Could not rewind input file"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "로케이션의 투영설정을 대화식으로 재설정합니다."
-
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "옵션 <%s>: <%s>가 존재합니다."
-
-#, fuzzy
-#~ msgid "output map <%s> exists"
+#~ msgid "Name for basins raster map"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
+#~ msgid "output map <%s> exists"
 #~ msgstr "출력할 격자지도"
 
 #~ msgid "Page length (default: %d lines)"
@@ -40386,10 +42248,30 @@ msgstr "출력할 격자지도"
 #~ msgid "Output options"
 #~ msgstr "출력할 격자지도"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "옵션 <%s>: <%s>가 존재합니다."
+
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "-%c/-%c와 %s=를 같이 지정할 수 없습니다"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "-%c/-%c와 -%c를 같이 지정할 수 없습니다"
+
 #~ msgid "Default value: GRASS_GUI if defined otherwise wxpython"
 #~ msgstr "기본값: 정의되었을 경우 GRASS_GUI 아니면 wxpython"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "출력할 격자지도"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "출력할 격자지도"
+
+#, fuzzy
 #~ msgid ""
 #~ "Exports a vector map to a GPS receiver or file format supported by "
 #~ "GPSBabel."
@@ -40416,70 +42298,40 @@ msgstr "출력할 격자지도"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgid "Unable to create file '%s'"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
+#~ msgid "Env file not found"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Renaming reclass maps"
+#~ msgid "PID file not found"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
+#~ msgid "Command file not found"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Loading seeds from '%s'"
+#~ msgid "Renaming reclass maps"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "출력할 래스터맵"
-
-#, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "출력할 래스터맵"
+#~ msgid "Name for output image"
+#~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "출력할 래스터맵"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Loading seeds from '%s'"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "기본값"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "출력할 격자지도"
 
 #, fuzzy
 #~ msgid ""
@@ -40503,20 +42355,24 @@ msgstr "출력할 격자지도"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Display the "
+#~ msgid "Default: input"
+#~ msgstr "기본값"
+
+#, fuzzy
+#~ msgid "flowline"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "출력할 래스터맵"
+#~ msgid "Endian of input vector map"
+#~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "출력할 래스터맵"
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "출력할 격자지도"
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -40527,40 +42383,41 @@ msgstr "출력할 격자지도"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "출력할 격자지도"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "출력할 래스터맵"
 
 #, fuzzy
-#~ msgid "Endian of input vector map"
+#~ msgid "Error reading category file for <%s>"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "One or more coordinates"
+#~ msgid "Error in reading color file for <%s>"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgid "Surface interpolation utility for raster map."
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Site file <%s> not found"
+#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "출력할 격자지도"
+#~ msgid "Interpolating raster map <%s>... %d row... "
+#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
+#~ msgstr[0] "출력할 격자지도"
+#~ msgstr[1] "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Failed to allocate site structure"
+#~ msgid "Prefix for output raster map(s)"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "출력할 격자지도"
+#~ msgid "String to represent no data cell"
+#~ msgstr "자료 없는 셀값을 표현할 문자열"
 
-#, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "출력할 격자지도"
+#~ msgid "%s available in mapset <%s>:"
+#~ msgstr "지도세트 <%2$s> 안에 유효한 %1$s:"
 
 #~ msgid "gui"
 #~ msgstr "GUI"
@@ -40576,78 +42433,101 @@ msgstr "출력할 격자지도"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Create raster map from result (optional)"
+#~ msgid "The output type of the space time dataset"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
+#~ msgid "Type of the aggregation space time dataset, default is strds"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
+#~ msgid "Prefix for output raster maps (default: input)"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Interpolating raster map <%s>... %d row... "
-#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
-#~ msgstr[0] "출력할 격자지도"
-#~ msgstr[1] "출력할 격자지도"
-
-#, fuzzy
 #~ msgid "allocation"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgid "Please specify input= or file="
 #~ msgstr "출력할 래스터맵"
 
 #, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
+#~ msgid "Either -p or output= must be given"
 #~ msgstr "출력할 래스터맵"
 
 #, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "출력할 격자지도"
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "출력할 래스터맵"
 
 #, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "출력할 격자지도"
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "출력할 래스터맵"
 
 #, fuzzy
-#~ msgid "Prefix for output raster map(s)"
-#~ msgstr "출력할 격자지도"
+#~ msgid "Please specify input= or infile="
+#~ msgstr "출력할 래스터맵"
 
 #, fuzzy
-#~ msgid "String to represent no data cell"
-#~ msgstr "자료 없는 셀값을 표현할 문자열"
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "출력할 래스터맵"
 
-#~ msgid "%s available in mapset <%s>:"
-#~ msgstr "지도세트 <%2$s> 안에 유효한 %1$s:"
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "출력할 격자지도"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "출력할 래스터맵"
 
 #, fuzzy
 #~ msgid "High Pass Filter Options"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "The output type of the space time dataset"
+#~ msgid "Name of elevation raster map"
+#~ msgstr "입력 고도 격자지도의 이름"
+
+#, fuzzy
+#~ msgid "coordinates of the outlet (east,north)"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Type of the aggregation space time dataset, default is strds"
+#~ msgid "No maps output"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (default: input)"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "출력할 래스터맵"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "출력할 래스터맵"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "출력할 래스터맵"
+
+#, fuzzy
+#~ msgid "Converts a GRASS site_lists file into a vector map."
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "Name of elevation raster map"
-#~ msgstr "입력 고도 격자지도의 이름"
+#~ msgid "Site file <%s> not found"
+#~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "coordinates of the outlet (east,north)"
+#~ msgid "Unable to guess site_list format"
 #~ msgstr "출력할 격자지도"
 
 #, fuzzy
-#~ msgid "No maps output"
+#~ msgid "Transferring sites to vector point map..."
 #~ msgstr "출력할 격자지도"
+
+#, fuzzy
+#~ msgid "%d sites written."
+#~ msgstr "출력할 격자지도"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "출력할 래스터맵"
diff --git a/locale/po/grassmods_lv.po b/locale/po/grassmods_lv.po
index d3ba363..3e44964 100644
--- a/locale/po/grassmods_lv.po
+++ b/locale/po/grassmods_lv.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_lv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-03-08 13:28+0200\n"
 "Last-Translator: Māris Nartišs <mn at sungis.lv>\n"
 "Language-Team: Latvian <grass-translations at lists.osgeo.org>\n"
@@ -250,6 +250,7 @@ msgstr "rastrs <%s> nav atrasts"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -484,6 +485,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Kļūda atverot šūnu failu"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -623,29 +629,29 @@ msgstr "neiespējami atvērt <%s>"
 msgid "Unable to open database:"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Datubāzes konekcija nav definēta"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "rastrs <%s> nav atrasts"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -657,6 +663,11 @@ msgstr "neiespējami atjaunot robežas"
 msgid "Unable grant on table:"
 msgstr "Rastra izejas fails"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "neiespējami atvērt <%s>"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -787,7 +798,7 @@ msgstr "neiespējami atvērt <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -865,17 +876,17 @@ msgstr "pārdēvēt"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -910,39 +921,39 @@ msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -988,7 +999,7 @@ msgstr "Izvadīt visu datubāzu draiveru sarakstu."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1018,7 +1029,7 @@ msgstr "Nevajag taisīt atribūtu tabulu"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1119,10 +1130,10 @@ msgid "Unable to open database <%s>"
 msgstr "neiespējami atvērt <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1321,11 +1332,11 @@ msgstr "Aizvēršana neizdevās."
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
@@ -1361,10 +1372,10 @@ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "OGR formāts."
@@ -1373,7 +1384,7 @@ msgstr "OGR formāts."
 msgid "Vertical record separator (requires -v flag)"
 msgstr ""
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1382,7 +1393,7 @@ msgstr ""
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Name for output binary map (use out=- for stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 #, fuzzy
 msgid "Do not include column names in output"
 msgstr "neiekļaut kolonu vārdus izejas datos"
@@ -1392,7 +1403,7 @@ msgstr "neiekļaut kolonu vārdus izejas datos"
 msgid "Describe query only (don't run it)"
 msgstr "apraksti tikai pieprasījumu (query) - nedarbini to"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 #, fuzzy
 msgid "Vertical output (instead of horizontal)"
 msgstr "vertikālā izdruka(pretēji horizontālai)"
@@ -1443,6 +1454,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Ieejošā karte satur līnijas"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignorēt SQL kļūdas un turpināt"
 
@@ -1620,7 +1632,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1740,7 +1751,7 @@ msgstr "Nevar atlasīt datus no tabulas"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1748,15 +1759,15 @@ msgstr "Nevar atlasīt datus no tabulas"
 msgid "Error in pj_do_proj"
 msgstr "Kļūda iekš pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1852,7 +1863,7 @@ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1902,7 +1913,7 @@ msgstr "Vektorkartes nosaukums"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1915,26 +1926,27 @@ msgstr "Vektorkartes nosaukums"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nevar atvērt datubāzi  %s pēc adreses %s"
@@ -1945,7 +1957,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Kolonas tips nav atbalstīts"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2092,13 +2105,13 @@ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2106,8 +2119,8 @@ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2150,10 +2163,11 @@ msgstr "vizualizācija"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2167,13 +2181,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2182,6 +2199,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2197,7 +2215,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2217,11 +2235,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2233,27 +2251,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2271,74 +2289,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "rastrs"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2348,6 +2369,7 @@ msgstr "rastrs"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2363,6 +2385,7 @@ msgstr "rastrs"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2381,6 +2404,7 @@ msgid "vector"
 msgstr "vektors"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2389,15 +2413,16 @@ msgstr "vektors"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 msgid "raster3d"
@@ -2433,7 +2458,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Izvadīt atbalstītos formātus un tad iziet"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "Novietojums %s ir izveidots!"
@@ -3030,69 +3055,70 @@ msgid "Vector map <%s> not found"
 msgstr "vektora karte <%s> nav atrasta"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "neiespējami atvērt <%s>"
@@ -3157,12 +3183,13 @@ msgstr "rotēt/grozīt izdruku"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3289,7 +3316,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 msgid "distance"
 msgstr "attālums"
@@ -3448,7 +3475,7 @@ msgid "Area:"
 msgstr "Platība:"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3464,7 +3491,7 @@ msgstr "Nevar iatlasīt datus no tabulas"
 msgid "No attribute table for layer %d"
 msgstr "Draiveris %s nav atrasts"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3477,15 +3504,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Nevar atvērt datubāzi  %s pēc adreses %s"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Nevar piešķirt privilēģijas tabulai %s"
@@ -3508,6 +3536,7 @@ msgid ""
 msgstr "Kalkulējam ēnas no DEM..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3516,6 +3545,7 @@ msgid "extract"
 msgstr "vektora karte <%s> nav atrasta"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3526,10 +3556,10 @@ msgstr "Izšķirtspēja"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "No tipa"
@@ -3551,12 +3581,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "Nevajag taisīt atribūtu tabulu"
@@ -3576,39 +3605,45 @@ msgstr ""
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3624,7 +3659,10 @@ msgstr ""
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3695,7 +3733,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3743,45 +3781,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3825,11 +3864,11 @@ msgstr "Kolonas tips nav atbalstīts"
 msgid "Format <%s> does not support writing"
 msgstr "rastra karte [%s] nav atrasta"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3982,9 +4021,9 @@ msgstr "ASCII fails ar ievades datiem"
 msgid "Name for output file where to save current settings"
 msgstr "Vektorkartes nosaukums"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 #, fuzzy
 msgid "List supported formats and exit"
 msgstr "Izvadīt atbalstītos formātus un tad iziet"
@@ -4007,7 +4046,7 @@ msgstr "drukā tekošās karšu biblotēkas/mapset meklēšanas ceļu"
 msgid "Print current status in shell script style"
 msgstr "Drukāt statistiku komandrindas skripta stilā"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "2 līmeņiem jābūt norādītiem"
@@ -4023,18 +4062,18 @@ msgid "%s= must be specified"
 msgstr "2 līmeņiem jābūt norādītiem"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Izvadīt atbalstītos formātus un tad iziet"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4045,67 +4084,68 @@ msgstr "Izvadīt atbalstītos formātus un tad iziet"
 msgid "network"
 msgstr "Lasam dig failu... \n"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr "īsākais ceļš"
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-#, fuzzy
-msgid "Arc type"
-msgstr "datu tipi"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+#, fuzzy
+msgid "Arc type"
+msgstr "datu tipi"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4117,10 +4157,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4132,50 +4173,88 @@ msgstr ""
 msgid "Cost"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "atslēgas kolona"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "Maksimālā distance starp punktiem"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "DB tabula"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr ""
+"Līmenis: %d\n"
+"kategorija: %d\n"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4184,10 +4263,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4203,8 +4282,8 @@ msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4233,22 +4312,22 @@ msgstr "Nevar piešķirt privilēģijas tabulai %s"
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4257,17 +4336,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "Nevar izveidot jaunu rindu: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d papildinājuma/atjauninājuma kļūda\n"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4278,7 +4357,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4288,7 +4367,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "vektors, ģeometrija"
@@ -4342,17 +4421,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Nerādīt kategoriju nummurus"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr ""
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
@@ -4665,6 +4744,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Ieejošā karte satur līnijas"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4685,12 +4765,15 @@ msgstr "Ieejošā karte satur līnijas"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4854,11 +4937,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Datubāzes konekcija nav definēta"
@@ -4996,9 +5079,9 @@ msgid "Remove existing color table"
 msgstr "Saglabāt esošo krāsu tabulu"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr ""
@@ -5061,7 +5144,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5077,8 +5160,7 @@ msgstr "2 līmeņiem jābūt norādītiem"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5104,6 +5186,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "vektora karte <%s> nav atrasta"
@@ -5129,7 +5212,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "3d skata fails <%s> nav atrasts"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5138,13 +5221,14 @@ msgstr "Rastra kartes nosaukums"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5176,8 +5260,9 @@ msgstr "Drukā ... "
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5223,7 +5308,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
@@ -5278,6 +5363,7 @@ msgid "Point out of range"
 msgstr "Līniju skaits"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5286,15 +5372,17 @@ msgstr "Līniju skaits"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5387,14 +5475,15 @@ msgstr "Vektorkartes nosaukums"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "Izejas rastra kartes nosaukums"
@@ -5591,15 +5680,15 @@ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
 msgid "Input failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "Aizvēršana neizdevās."
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Nevar ierakstīt failus, jo nepietiek diska telpas"
@@ -5645,9 +5734,9 @@ msgstr "Kolonas tips nav atbalstīts"
 msgid "Point without category"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5755,9 +5844,9 @@ msgstr "Kļūda atverot šūnu failu"
 msgid "3D raster map <%s> created"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5768,85 +5857,128 @@ msgstr "Nevar izveidot jaunu rindu: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 msgid "steiner tree"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Vektorkartes nosaukums"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Maksimālā distance starp punktiem"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr ""
+"\n"
+"\n"
+"  Punktu skaits: %d\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "Atslēga (id) kolonas nosaukums"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr ""
+"\n"
+"\n"
+"  Punktu skaits: %d\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Vektorkartes nosaukums"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, c-format
+msgid "Steiner tree costs = %f"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5866,17 +5998,19 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr "importēt"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Drukāt"
@@ -5910,9 +6044,9 @@ msgstr "Rastra kartes nosaukums"
 msgid "Name of column containing z coordinate"
 msgstr "Rastra kartes nosaukums"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Pilns izvads"
@@ -5962,7 +6096,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
@@ -5981,7 +6115,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -6010,7 +6144,83 @@ msgstr[0] "%d punkti ierakstīti izejas kartē\n"
 msgstr[1] "%d punkti ierakstīti izejas kartē\n"
 msgstr[2] "%d punkti ierakstīti izejas kartē\n"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+#, fuzzy
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "nevar atvērt %s"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+#, fuzzy
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "nevar atvērt %s"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Ignorē projekciju pārbaudi."
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "Novietojums %s ir izveidots!"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "nederīgs reģions: %s"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Nezināms/nepazīstms tips"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6033,7 +6243,7 @@ msgstr[2] "%d punkti ierakstīti izejas kartē\n"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6042,7 +6252,7 @@ msgstr[2] "%d punkti ierakstīti izejas kartē\n"
 msgid "statistics"
 msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6684,8 +6894,8 @@ msgstr "Kolonas tips nav atbalstīts"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Rastra kartes nosaukums"
@@ -6747,13 +6957,13 @@ msgid "Breaking lines..."
 msgstr "Rakstu jaunu failu... \n"
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "Rakstu jaunu failu... \n"
@@ -6763,12 +6973,12 @@ msgstr "Rakstu jaunu failu... \n"
 msgid "Merging lines..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 #, fuzzy
 msgid "Attaching islands..."
 msgstr "Pievieno kategorijas...\n"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Nevar noteikt poligona centroīdu"
 
@@ -6784,13 +6994,14 @@ msgstr "Rakstu jaunu failu... \n"
 msgid "Attribute not found"
 msgstr "Draiveris %s nav atrasts"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "Rakstīt līniju virsotnes"
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Nevar izveidot jaunu rindu: %s"
@@ -6866,124 +7077,126 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Izejas vektora punktu kartes nosaukums"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Izveidojamo punktu skaits"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Neveiksme atverot ieejas dig ieejas failu"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Rastra kartes nosaukums"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Krāsu tabulas tips"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr ""
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Kalkulējam ēnas no DEM..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Punktu skaitam jābūt lielākam par 0 (%d doti)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Eksistējošas vektorkartes nosaukums"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "Rakstu jaunu failu... \n"
@@ -7030,7 +7243,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Izejas rastra kartes nosaukums"
@@ -7044,80 +7257,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "%d vektora kategorijas trūkst tabulā\n"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
+#: ../vector/v.what.rast/main.c:170
 #, fuzzy, c-format
-msgid "Column <%s> not found"
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Kolonas tips nav atbalstīts"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Drukā ... "
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Nevar atrast ieejas vektoru karti <%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, fuzzy, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d vektora kategorijas ielādētas\n"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d vektorā dubultojas kategorijas\n"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, fuzzy, c-format
 msgid "%d categories loaded from table"
 msgstr "%d kategorijas ielādētas no tabulas\n"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, fuzzy, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d vektora kategorijas trūkst tabulā\n"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, fuzzy, c-format
 msgid "%d update errors"
 msgstr "%d papildinājuma/atjauninājuma kļūda\n"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d ieraksti atjaunoti\n"
@@ -7125,14 +7336,14 @@ msgstr "%d ieraksti atjaunoti\n"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7218,7 +7429,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7276,6 +7487,153 @@ msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 msgid "%d records updated"
 msgstr "%d ieraksti atjaunoti\n"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Datubāzes konekcija nav definēta"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Kolonas tips nav atbalstīts"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Nav ieraksta priekš līnijas cat= %d"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Nav ieraksta priekš līnijas cat= %d"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "reģions <%s> nav atrasts"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Ieejošā karte satur līnijas"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Nevajag taisīt atribūtu tabulu"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%-5d līniju kategorijas nolasītas\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Slāņa numurs vai nosaukums"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Slāņa numurs vai nosaukums"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Nevajag taisīt atribūtu tabulu"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "vektora karte <%s> nav atrasta"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "kolona 2"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "atslēgas kolona"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Nav ieejas karte(s) norādīta."
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Lieto brīvi izvēlētas krāsas"
+
+#: ../vector/v.out.lidar/main.c:556
+#, fuzzy
+msgid "Column with green color"
+msgstr "Lieto brīvi izvēlētas krāsas"
+
+#: ../vector/v.out.lidar/main.c:562
+#, fuzzy
+msgid "Column with blue color"
+msgstr "Lieto brīvi izvēlētas krāsas"
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Sākuma punkts ir ārpus pašreizējā reģiona."
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "DB tabula"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7312,6 +7670,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, fuzzy, c-format
+msgid "Column <%s> not found"
+msgstr "reģions <%s> nav atrasts"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7342,47 +7706,54 @@ msgstr "Neiespējami atvērt šūnu failu[%s]"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, fuzzy, c-format
 msgid "Pass %d of %d:"
 msgstr "Gājiens: %d\n"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7447,15 +7818,17 @@ msgstr "Rastra karte ar virsmu"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Eksistējošas rastra kartes nosaukums"
@@ -7496,7 +7869,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "Drukā ... "
@@ -7516,12 +7889,17 @@ msgstr "Nav ieejas karte(s) norādīta."
 msgid "Get area %d failed"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Neveiksme atverot ieejas dig ieejas failu"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 #, fuzzy
 msgid "Area centroid without category"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
@@ -7553,12 +7931,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "atslēgas kolona"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "kolona 2"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7749,47 +8121,53 @@ msgstr ""
 msgid "Incompatible types"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "Līmeņa nosaukums kuru izmantos  HUE(krāsu niansēm)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Name for output binary map (use out=- for stdout)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Maksimālā distance starp punktiem"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr ""
@@ -7797,110 +8175,110 @@ msgstr ""
 "\n"
 "  Punktu skaits: %d\n"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "Atslēga (id) kolonas nosaukums"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Nav ieraksta priekš līnijas (cat= %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Galapunkts nesasniedzams\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 msgid "isolines"
 msgstr "izolīnijas"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 #, fuzzy
 msgid "Costs for isolines"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Kalkulējam ēnas no DEM..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "Nevar nolasīt faila informāciju"
@@ -8111,14 +8489,15 @@ msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "%-5d punkti nolasīti un ierakstīti izejā\n"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8142,9 +8521,13 @@ msgstr "%-5d punkti nolasīti un ierakstīti izejā\n"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8209,7 +8592,7 @@ msgstr "Lauku atdalītājs"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 
@@ -8274,7 +8657,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Vektorkartes nosaukums"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8378,9 +8761,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "neiespējami atvērt <%s>"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "neiespējami atvērt <%s>"
@@ -8966,7 +9350,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -8991,7 +9375,7 @@ msgstr "neiespējami atvērt <%s>"
 msgid "Resolving conflicts..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Rakstu jaunu failu... \n"
@@ -9018,205 +9402,209 @@ msgid "Performs vector based generalization."
 msgstr "Rakstu jaunu failu... \n"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "maksimālais ierāciju skaits"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "Līniju skaits"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Nevar nokopēt tabulu"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "Nezināma metode <%s>"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Rastra kartes nosaukums"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Drukā ... "
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Izšķirtspēja"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9295,8 +9683,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Teksta krāsa"
 
@@ -9309,13 +9697,13 @@ msgstr "Teksta krāsa"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Krāsas"
@@ -9513,14 +9901,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Tīrīšanas rīks"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Rakstu jaunu failu... \n"
@@ -9573,14 +9961,6 @@ msgstr "Drukā ... "
 msgid "Constructing 3D hull..."
 msgstr "Drukā ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9662,7 +10042,9 @@ msgstr "maksimālais ierāciju skaits"
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10072,6 +10454,193 @@ msgstr "Nevarēja atrast rastra failu %s"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Nekas nav atrasts.\n"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "Rastrs"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "reģions <%s> nav atrasts"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Nevarēja atrast rastra failu %s"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Eksistējošas vektorkartes nosaukums"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Maksimālā distance starp punktiem"
+
+#: ../vector/v.cluster/main.c:115
+msgid "Minimum number of points to create a cluster"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "Izejas vektora punktu kartes nosaukums"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Drukājamo kopiju sakits"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Apkārtnes izmērs šūnās"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Drukā ... "
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "Apkārtnes izmērs šūnās"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Maksimālā distance starp punktiem"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Rastra karte kura tiks pārkodēta"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Maksimālā distance starp punktiem"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Maksimālā distance starp punktiem kartes vienībās"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Maksimālā distance starp punktiem"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Drukā ... "
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Izejas rastra kartes nosaukums"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Lasa %s ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Nekas nav atrasts.\n"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "Ieejas fails"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "reģions <%s> nav atrasts"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "reģions <%s> nav atrasts"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10213,26 +10782,26 @@ msgstr "neiespējami atvērt <%s>"
 msgid "Impossible to write to aux table"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "nederīgs reģions: %s"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "nevar atvērt vektorfailu <%s> iekš <%s>"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%-5d līnijas nolasītas un ierakstītas izejā\n"
@@ -10271,7 +10840,7 @@ msgstr "Vektorkartes nosaukums"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10284,14 +10853,14 @@ msgstr "Vektorkartes nosaukums"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10321,48 +10890,131 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Datu bāzes faila nosaukums"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Neveiksme atverot ieejas dig ieejas failu"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Uz slāni"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "neiespējami atvērt <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Nevar izveidot ierakstu tabulā: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "neiespējami atvērt <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Rastra kartes nosaukums"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Pārkodēt rastra kartes."
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Izejas karte kurā tiks ierakstīti punkti"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Izejas karte kurā tiks ierakstīti punkti"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Nevar atvērt datubāzi  %s pēc adreses %s"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "neiespējami atvērt <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "neiespējami atvērt <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "neiespējami atvērt <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10496,7 +11148,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d kategorijas ielādētas no tabulas\n"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "Nevar noteikt laukuma centroīdu"
@@ -10618,7 +11270,7 @@ msgstr "Datubāzes konekcija nav definēta"
 msgid "Key column type is not integer"
 msgstr "Kolonas tips nav atbalstīts"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Nevar atlasīt datus no tabulas"
@@ -11387,7 +12039,7 @@ msgstr "Lietot ESRI stila .prj faila formātu (tikai taisot shapefile)"
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "Lietot ESRI stila .prj faila formātu (tikai taisot shapefile)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11652,8 +12304,8 @@ msgstr "Nevar atrast ieejas karti <%s>\n"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Nevarēja atrast rastra failu %s"
@@ -11663,7 +12315,7 @@ msgstr "Nevarēja atrast rastra failu %s"
 msgid "Mapset containing input vector map"
 msgstr "Vektorkartes nosaukums"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Tekošā reģiona nosaukums"
@@ -11673,7 +12325,7 @@ msgstr "Tekošā reģiona nosaukums"
 msgid "Name of input vector map to re-project"
 msgstr "Rastra kartes nosaukums"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr ""
 
@@ -11688,8 +12340,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "Laukums\n"
@@ -11722,17 +12374,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
@@ -12097,352 +12751,576 @@ msgstr ""
 "tabula: %s\n"
 "atslēgas kolona: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Izveido GRASS vektoru karti ar kontūrlīnijām norādītajai rastra kartei."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "Izejas karte kurā tiks ierakstīti punkti"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "vektors, topoloģija"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "Nevajag taisīt atribūtu tabulu"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "Atslēga (id) kolonas nosaukums"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr "Attēlojamā rastra karte"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 #, fuzzy
 msgid "Column names differ"
 msgstr "Atslēga (id) kolonas nosaukums"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "Atslēga (id) kolonas nosaukums"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "Attēlojamā rastra karte"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 #, fuzzy
 msgid "Key column not found"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Lasam dig_att failu...\n"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d ieraksti atjaunoti\n"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr ""
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 #, fuzzy
 msgid "Cannot fetch row"
 msgstr "Nevar ienest datus"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 #, fuzzy
 msgid "Unknown column type"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, fuzzy, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Nevar izveidot jaunu rindu: %s"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+#, fuzzy
+msgid "Over-riding projection check"
+msgstr "Ignorē projekciju pārbaudi."
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Ieejas fails"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "Drukāt tikai rastra kartes reģionu"
+msgid "Layer number to store return information as category"
+msgstr "Slāņa numurs vai nosaukums"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
 #, fuzzy
-msgid "Subregion"
-msgstr "Lasam dig failu... \n"
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Nevajag taisīt atribūtu tabulu"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "Drukāt tikai rastra kartes reģionu"
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Janveidojamā novietojuma nosaukums"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Importējamais rastra fails"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Importējamais rastra fails"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Eksistējošas rastra kartes nosaukums"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Izejas vektora punktu kartes nosaukums"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
+msgid "Layer number or name for mask option"
+msgstr "Eksistējošas vektorkartes nosaukums"
+
+#: ../vector/v.in.lidar/main.c:232
+#, fuzzy
+msgid "Do not import every n-th point"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Importējamais rastra fails"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Vienkāršajā režīmā"
+
+#: ../vector/v.in.lidar/main.c:242
+#, fuzzy
+msgid "Import only every n-th point"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Importējamais rastra fails"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+#, fuzzy
+msgid "Skip first n points"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+#, fuzzy
+msgid "Skips the given number of points at the beginning."
+msgstr "Nederīgs soļu skaits: %s"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "Nederīgs soļu skaits: %s"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Janveidojamā novietojuma nosaukums"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "Sākuma punkts ir ārpus pašreizējā reģiona."
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Ieejošā karte satur līnijas"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Paplašināt novietojuma apjomu pamatojoties uz jauno datu kopu"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Izvades rastra karte ar ezeru"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "%d punkti ierakstīti izejas kartē\n"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "rastra karte [%s] nav atrasta"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Nevajag taisīt atribūtu tabulu"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Nezināms/nepazīstms tips"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Nevajag taisīt atribūtu tabulu"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Nevar izveidot novietojumu: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Izejas karte kurā tiks ierakstīti punkti"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-#, fuzzy
-msgid "Over-riding projection check"
-msgstr "Ignorē projekciju pārbaudi."
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-#, fuzzy
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "nevar atvērt %s"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-#, fuzzy
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "nevar atvērt %s"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:738
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Izejas karte kurā tiks ierakstīti punkti"
+msgid "%llu input points were filtered out by return number"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:740
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Nevar atvērt datubāzi  %s pēc adreses %s"
+msgid "%llu input points were filtered out by class number"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:742
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Rakstu jaunu failu... \n"
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:744
+#, fuzzy, c-format
+msgid "%llu input points were skipped at the begging using offset"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were not valid"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered out by return number"
 msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were filtered out by class number"
 msgstr "%d punkti ielādēti\n"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d punkti ielādēti\n"
 
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d punkti ielādēti\n"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Vaicājuma koordinātes"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "neiespējami atvērt <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Nevar atvērt datubāzi  %s pēc adreses %s"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12451,22 +13329,22 @@ msgid ""
 msgstr ""
 "Izveido GRASS vektoru karti ar kontūrlīnijām norādītajai rastra kartei."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "rastra karte <%s> nav atrasta"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Nevar izveidot tabulu: %s"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "KĻŪDA: <%s> jau eksistē\n"
@@ -12476,12 +13354,12 @@ msgstr "KĻŪDA: <%s> jau eksistē\n"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Importējamais rastra fails"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12493,25 +13371,29 @@ msgstr ""
 "\t\tESRI Shapefile: faila nosaukums\n"
 "\t\tMapInfo fails: mapinfo faila nosaukums"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Izvades rastra karte ar ezeru"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12698,147 +13580,147 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Nerādīt kategoriju nummurus"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Drukāt tikai vektoru kartes reģionu"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Bufera izmērs kartes vienībās"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Nederīgs izvades faila nosaukums"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Bufera izmērs kartes vienībās"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Nevar atlasīt datus no tabulas"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Drukā ... "
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "Veidojam telpisko indeksu ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "Drukā ... "
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Eksportēt līnijas kā poligonus"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Kalkulējam ēnas no DEM..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Kalkulējam ēnas no DEM..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Nevar noteikt laukuma centroīdu"
@@ -13109,23 +13991,27 @@ msgstr "Izvades ACII faila nosaukums"
 msgid "%d features written to '%s'."
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "nevar atvērt %s"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
@@ -13133,15 +14019,20 @@ msgstr ""
 "\n"
 "  Punktu skaits: %d\n"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Kalkulējam ēnas no DEM..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Kalkulējam ēnas no DEM..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13195,7 +14086,7 @@ msgstr "%s - nederīgs nosaukums"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13876,7 +14767,7 @@ msgstr "%d ieraksti atlasīti no tabulas"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14177,48 +15068,57 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "Drukāt tikai vektoru kartes reģionu"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Lasam dig failu... \n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "nevar atvērt vektorfailu <%s> iekš <%s>"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Nevar atrast vektoru karti [%s]"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Nerādīt kategoriju nummurus"
@@ -14263,46 +15163,50 @@ msgstr "Maksimālais punktu skaits vienā segmentā"
 msgid "Add new vertices, but do not split"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Rakstīt līniju virsotnes"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s iekš %s: %s"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s iekš %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Drukājamo kopiju sakits"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
@@ -14422,7 +15326,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr "Līniju skaits"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 msgid "Output feature type"
 msgstr "Izvades objektu tips"
 
@@ -14527,10 +15433,13 @@ msgid "Writing out vector columns..."
 msgstr "Rakstu jaunu failu... \n"
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14542,6 +15451,7 @@ msgstr "vektora karte <%s> nav atrasta"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 msgid "aggregation"
@@ -14700,8 +15610,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Fonta nosaukums"
 
@@ -14773,6 +15684,134 @@ msgstr "Drukā ... "
 msgid "Counting points quadrats..."
 msgstr "Drukā ... "
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "maksimālais ierāciju skaits"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Nekas nav atrasts.\n"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Importējamais rastra fails"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+#, fuzzy
+msgid "Preserve only every n-th point"
+msgstr "Līniju skaits"
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Importējamais rastra fails"
+
+#: ../vector/v.decimate/main.c:191
+#, fuzzy
+msgid "Copy only n points"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "Nederīgs soļu skaits: %s"
+
+#: ../vector/v.decimate/main.c:199
+msgid "Minimal difference of z values"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Līniju skaits"
+
+#: ../vector/v.decimate/main.c:211
+#, fuzzy
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr "Līniju skaits"
+
+#: ../vector/v.decimate/main.c:216
+#, fuzzy
+msgid "Apply grid-based decimation"
+msgstr "Maksimālā distance starp punktiem kartes vienībās"
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Līniju skaits"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Maksimālā distance starp punktiem kartes vienībās"
+
+#: ../vector/v.decimate/main.c:238
+#, fuzzy
+msgid "Store only the coordinates, throw away categories"
+msgstr "Sākuma punkta koordinātes"
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14787,30 +15826,30 @@ msgstr "rastra karte <%s> nav atrasta"
 msgid "Target location <%s> not found"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "3d skata fails <%s> nav atrasts"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "permission denied"
 msgstr "Nevarēja atrast rastra failu %s"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15143,11 +16182,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "Datubāzes konekcija nav definēta"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Kolonas tips nav atbalstīts"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -15241,17 +16275,18 @@ msgstr[0] "%d ieraksti atjaunoti\n"
 msgstr[1] "%d ieraksti atjaunoti\n"
 msgstr[2] "%d ieraksti atjaunoti\n"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "datbāzes vārds"
+msgid "Name of OGR datasource to be imported"
+msgstr "Importējamais rastra fails"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15262,7 +16297,7 @@ msgstr ""
 "\t\tESRI Shapefile: mape ar failiem\n"
 "\t\tMapInfo fails: mape ar failiem"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 #, fuzzy
 msgid "OGR layer name. If not given, all available layers are imported"
@@ -15272,7 +16307,7 @@ msgstr ""
 "\t\tESRI Shapefile: faila nosaukums\n"
 "\t\tMapInfo fails: faila nosaukums"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15283,291 +16318,293 @@ msgstr ""
 "\t\tESRI Shapefile: faila nosaukums\n"
 "\t\tMapInfo fails: mapinfo faila nosaukums"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Ezera laukums %f kvadrātmetri"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "Izvades rastra karte ar ezeru"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "rotēt/grozīt izdruku"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Eksportēt līnijas kā poligonus"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Nevar noteikt laukuma centroīdu"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Drukā ... "
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Nevarēja atrast rastra failu %s"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "atslēgas kolona"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "%-5d punktu kategorijas nolasītas\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Izvadīt atbalstītos formātus un tad iziet"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "%d punkti ierakstīti izejas kartē\n"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "rastra karte <%s> nav atrasta"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Vektorkartes nosaukums"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Bufera izmērs kartes vienībās"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Rastra kartes nosaukums"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Atslēgas kolonna '%s' nav atrasta"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Kolonas tips nav atbalstīts"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Kolonas tips nav atbalstīts"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Eksportēt līnijas kā poligonus"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Drukā ... "
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Kalkulējam ēnas no DEM..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15575,116 +16612,116 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "%-5d mirušo/neizmantoto punktu kategorijas izlaistas\n"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Drukā ... "
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15905,6 +16942,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "Datubāzes konekcija nav definēta"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "3d skata fails <%s> nav atrasts"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16065,19 +17107,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr "Lasa %s ..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "Nevar ienest datus"
@@ -16261,14 +17303,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Izejas karte kurā tiks ierakstīti punkti"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
@@ -16399,7 +17441,12 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Izveidot punktus visā garumā ilīniju garumā"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
@@ -16407,7 +17454,7 @@ msgstr[0] "Nevar atrast ieejas vektoru karti <%s>"
 msgstr[1] "Nevar atrast ieejas vektoru karti <%s>"
 msgstr[2] "Nevar atrast ieejas vektoru karti <%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16920,19 +17967,24 @@ msgstr "nederīgs reģions: %s"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16946,6 +17998,7 @@ msgstr "nederīgs reģions: %s"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16958,7 +18011,7 @@ msgstr "nederīgs reģions: %s"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17121,6 +18174,7 @@ msgid "Unable to map image file"
 msgstr "Rastra izejas fails"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17138,14 +18192,14 @@ msgstr "Rastra izejas fails"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17184,6 +18238,53 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Izvēlies fontu kurš tiks parādīts lietotāja grafiskajā vidē."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr "rāmis"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Izveidot jaunu failu, ja neeksistē"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "drukā tekošās karšu biblotēkas/mapset meklēšanas ceļu"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -17201,7 +18302,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17214,7 +18315,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17289,18 +18390,23 @@ msgid ""
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17315,6 +18421,7 @@ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17408,6 +18515,93 @@ msgstr "Eksistējošas rastra kartes nosaukums"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Rastra kartes nosaukums"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Drukājamo kopiju sakits"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Rastra ievades kartes"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17541,7 +18735,7 @@ msgstr "Nevaratvērt datubāzi %s"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17554,8 +18748,8 @@ msgid "rename"
 msgstr "pārdēvēt"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17565,9 +18759,9 @@ msgid "input"
 msgstr "Ieejas fails"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17583,6 +18777,77 @@ msgstr "klusi"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Nevar atrast ieejas vektoru karti <%s>"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Izveido GRASS vektoru karti ar kontūrlīnijām norādītajai rastra kartei."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+msgid "contour"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Rastra ievades kartes"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Nevajag taisīt atribūtu tabulu"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17591,7 +18856,7 @@ msgstr "Eksistējošas rastra kartes nosaukums"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr "saraksts"
 
@@ -17647,8 +18912,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17761,74 +19027,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Rastra kartes nosaukums"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Ieejas rastra faila nosaukums"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Ieejas rastra faila nosaukums"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17864,47 +19099,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Datu bāzes faila nosaukums"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Ieejas rastra faila nosaukums"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Drukājamo kopiju sakits"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Rastra ievades kartes"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18005,7 +19223,7 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
+msgid "Name for output image (or text file for -t)"
 msgstr "Izejas rastra kartes nosaukums"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
@@ -18023,6 +19241,54 @@ msgstr "Lietojamās kartes centra koordinātes\n"
 msgid "Use gnuplot for display"
 msgstr "Neiespējami atvērt [%s]"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Izejas draivera nosaukums"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Komatu attdalīta vērtību liste: piem. 1.4,3.8,13"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Vektorkartes nosaukums"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Nevaratvērt datubāzi %s"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Drukājamo kopiju sakits"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Nogāžu slīpuma izvades rastra kartes nosaukums"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18054,32 +19320,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Paplašināt novietojuma apjomu pamatojoties uz jauno datu kopu"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "%d punkti ierakstīti izejas kartē\n"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18274,6 +19518,20 @@ msgstr "Attēlojamā rastra karte"
 msgid "Output field separator"
 msgstr "Izvades lauku atdalītājs"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 #, fuzzy
 msgid "Displays a raster map and its legend on a graphics window"
@@ -18375,8 +19633,15 @@ msgstr "Nevaratvērt datubāzi %s"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Datu bāzes faila nosaukums"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "%s - nederīgs nosaukums"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Eksistējošas rastra kartes nosaukums"
@@ -18386,7 +19651,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18395,15 +19660,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Datu bāzes faila nosaukums"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18450,7 +19715,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Izvēlies fontu kurš tiks parādīts lietotāja grafiskajā vidē."
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr ""
 
@@ -18531,16 +19796,27 @@ msgstr "Datu bāzes faila nosaukums"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Izvades rastra karte ar ezeru"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18617,12 +19893,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18747,13 +20030,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18763,12 +20045,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "Drukāt statistiku komandrindas skripta stilā"
@@ -18784,7 +20066,7 @@ msgid "ASCII file containing input data"
 msgstr "ASCII fails ar ievades datiem"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "Eksistējošas rastra kartes nosaukums"
@@ -18793,14 +20075,14 @@ msgstr "Eksistējošas rastra kartes nosaukums"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr ""
 
@@ -18839,18 +20121,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "%d kategorijas ielādētas no tabulas\n"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "Izejas karte kurā tiks ierakstīti punkti"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18890,11 +20172,6 @@ msgid ""
 "on the fly."
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Importējamais rastra fails"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
@@ -19003,7 +20280,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19089,24 +20366,18 @@ msgstr "Eksistējošas rastra kartes nosaukums"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Drukājamo kopiju sakits"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Rastra ievades kartes"
@@ -19223,17 +20494,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "%s - nederīgs nosaukums"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19241,10 +20516,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19356,78 +20627,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Jaunā novietojuma nosaukums"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "atubāzes atrašnās"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "sistēmas tabulas nevis lietotāja tabulas"
@@ -19544,10 +20831,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19603,6 +20886,55 @@ msgstr ""
 msgid "Test name"
 msgstr "Tabulas nosaukums"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Izejas rastra kartes nosaukums"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "vektors, topoloģija"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -19669,6 +21001,16 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+msgid "Data type"
+msgstr "Datu tips"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Izvadīt atbalstītos formātus un tad iziet"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr ""
@@ -19841,20 +21183,26 @@ msgid "Description of the space time dataset"
 msgstr "Datu bāzes faila nosaukums"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Datu bāzes faila nosaukums"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19898,12 +21246,12 @@ msgstr "Nevarēja atrast rastra failu %s"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19986,7 +21334,7 @@ msgstr "Eksistējošas rastra kartes nosaukums"
 msgid "Neighborhood size"
 msgstr "Apkārtnes izmērs šūnās"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "%s - nederīgs nosaukums"
@@ -20088,24 +21436,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Rastra kartes nosaukums"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Izšķirtspēja"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "izejas līmeņa nosaukums"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Konvertēt ģeocetrisko uz ģeogrāfiko koordināti. "
@@ -20178,17 +21543,38 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "kolona 2"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Vektorkartes nosaukums"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+#, fuzzy
+msgid "query_layer,query_column"
+msgstr "kolona 2"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "kolona 2"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Bufera izmērs kartes vienībās"
@@ -20278,6 +21664,7 @@ msgstr "Lasam dig failu... \n"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20293,10 +21680,15 @@ msgstr "%s - nederīgs nosaukums"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "Lasam dig failu... \n"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20407,28 +21799,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "Ģenerē rastra karšu platību statistiku."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "Attēlojamā rastra karte"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Nevaratvērt datubāzi %s"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -20464,7 +21851,7 @@ msgstr ""
 "Ģenerē rastra karti, kur vienlaidus apgabali ir palielināti par vienu šūnu."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20478,7 +21865,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Bufera zonas rādiuss rastra šūnās"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metriskā"
 
@@ -20496,12 +21883,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20527,7 +21914,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "Izejas rastra kartes nosaukums"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20556,6 +21943,16 @@ msgstr "Izejas rastra kartes nosaukums"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Izejas rastra kartes nosaukums"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "nevar atvērt %s"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20566,20 +21963,11 @@ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 msgid "Vector map to which to join other table"
 msgstr "Rastra karte, kuras histogramma tiks parādīta"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Nevajag taisīt atribūtu tabulu"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "kolona 2"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20608,17 +21996,17 @@ msgstr "Drukājamo kopiju sakits"
 msgid "Imports space time raster dataset."
 msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20695,14 +22083,17 @@ msgstr "rastra karte <%s> nav atrasta"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20733,11 +22124,11 @@ msgstr ""
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Nevar ierakstīt ezera rastra karti <%s>!"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20745,8 +22136,8 @@ msgstr "neiespējami atvērt <%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "Nevarēja atrast rastra failu %s"
@@ -20800,6 +22191,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
@@ -20949,9 +22341,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Malu krāsa"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20978,7 +22371,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Rastra kartes nosaukums"
@@ -21040,6 +22436,147 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Izejas karte kurā tiks ierakstīti punkti"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Kalkulējam ēnas no DEM..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "vektora karte <%s> nav atrasta"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Kalkulējam ēnas no DEM..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Rastra karte, kuras histogramma tiks parādīta"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Vektorkartes nosaukums"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Izejas rastra kartes nosaukums"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s iekš %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Līniju skaits"
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Nav ieejas karte(s) norādīta."
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Ieejas datubāzes nosaukums"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr ""
+"\n"
+"\n"
+"  Punktu skaits: %d\n"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr ""
+"\n"
+"\n"
+"  Punktu skaits: %d\n"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "drukājamo kopiju sakits"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Nevar aprakstīt tabulu %s"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Rezultējošās rastra kartes nosaukums"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21166,11 +22703,11 @@ msgstr "neiespējami atvērt <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "Rastra karte, kuras histogramma tiks parādīta"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -21195,7 +22732,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "Rastra izejas fails"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "vektora karte <%s> nav atrasta"
@@ -21204,6 +22741,82 @@ msgstr "vektora karte <%s> nav atrasta"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "rastrs"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Nederīgs soļu skaits: %s"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Līniju skaits"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "rastra karte <%s> nav atrasta"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Rastra karte, kuras histogramma tiks parādīta"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "Nevarēja atrast rastra failu %s"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -21256,13 +22869,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Atjaunināt diapazonu"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "nevar nolasīt reģionu <%s> pie <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, fuzzy, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Krāsu tabula [%s] uzstādīta uz %s"
@@ -21318,7 +22931,7 @@ msgstr "Rezultējošās rastra kartes nosaukums"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Kļūda atverot šūnu failu"
@@ -21691,7 +23304,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21701,7 +23314,7 @@ msgstr "Nezināma metode <%s>"
 msgid "Aggregate operation"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21738,6 +23351,36 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "vektora karte <%s> nav atrasta"
+
+#: ../raster3d/r3.gradient/main.c:47
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Izejas rastra kartes nosaukums"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Neizdevās piešķirt atmiņu rindu norādēm"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Eksistējošas rastra kartes nosaukums"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22073,38 +23716,38 @@ msgstr "Drukāt statistiku komandrindas skripta stilā"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22402,13 +24045,13 @@ msgid "Unknown operation '%s'"
 msgstr "Nezināms/nepazīstms tips"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Novietojums %s ir izveidots!"
@@ -22484,8 +24127,8 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "KĻŪDA: <%s> jau eksistē\n"
+msgid "<%s> already exists. File not copied."
+msgstr "neiespējami atvērt <%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22595,8 +24238,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -22858,9 +24501,9 @@ msgstr "Importējamais rastra fails"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "Šablons"
 
@@ -22872,15 +24515,15 @@ msgstr ""
 msgid "File name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -22890,7 +24533,7 @@ msgid "Remove base raster maps"
 msgstr "Atlasīt datus no datubāzes."
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Neiespējami atvērt šūnu failu[%s]"
@@ -22936,7 +24579,7 @@ msgstr "Pārsauc datubāzes elemtu failus lietotāja pašreizējā karšu biblot
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
@@ -22945,70 +24588,60 @@ msgstr ""
 "Izveido GRASS datubāzu failu sarkastu pēc lietotāja norādītiem datu tipiem "
 "lai standartizētu iegūtos datus"
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr ""
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "drukā tekošās karšu biblotēkas/mapset meklēšanas ceļu"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "drukā tekošās karšu biblotēkas/mapset meklēšanas ceļu"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 msgid "'.' for current region; '*' for default region"
 msgstr ""
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "Drukāt tikai rastra kartes tipu"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr ""
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "2 līmeņiem jābūt norādītiem"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "2 līmeņiem jābūt norādītiem"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "rastra karte [%s] nav atrasta"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Nevar ierakstīt ezera rastra karti <%s>!"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "nevar atvērt vektorfailu <%s> iekš <%s>"
@@ -23208,57 +24841,57 @@ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "nederīgs reģions: %s"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23483,38 +25116,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "reģions <%s> nav atrasts"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Importējamais rastra fails"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23822,11 +25476,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr ""
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "Izejas vektora punktu kartes nosaukums"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23987,7 +25636,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 #, fuzzy
 msgid "Percent complete..."
 msgstr "Pabeigts: "
@@ -24403,7 +26052,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24596,156 +26245,156 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Eksportēt GRASS rastru uz bināro masīvu."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Nevar atrast ieejas karti <%s>\n"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Vektorkartes nosaukums"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Izvades rastra karte ar ezeru"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "Ieejas karte: eksistējošu pazeminājumu atrašanās vietas"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "3d skata fails <%s> nav atrasts"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "rastra karte <%s> nav atrasta"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "3d skata fails <%s> nav atrasts"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "Ieejas fails"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, fuzzy, c-format
 msgid "Cols: %d (%d)"
 msgstr "Kļūda: %s\n"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, fuzzy, c-format
 msgid "Rows: %d (%d)"
 msgstr "Kļūda: %s\n"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr "Piezīme %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr "Piezīme %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr "Piezīme %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "Drukā ... "
@@ -24803,12 +26452,6 @@ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr ""
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -24836,22 +26479,22 @@ msgstr "Datu bāzes faila nosaukums"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, fuzzy, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 #, fuzzy
 msgid "Done."
 msgstr "Padarīts.\n"
@@ -25616,7 +27259,7 @@ msgstr "2 līmeņiem jābūt norādītiem"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "nevar atvērt %s"
@@ -25832,8 +27475,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "nevar nolasīt reģionu <%s> pie <%s>"
@@ -25918,12 +27561,12 @@ msgstr "neiespējami atvērt <%s>"
 msgid "Can't get cell header"
 msgstr "Nevar izveidot index"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -26113,17 +27756,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "Drukājamo kopiju sakits"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr ""
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26148,7 +27787,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "nederīgs reģions: %s"
@@ -26158,15 +27797,15 @@ msgstr "nederīgs reģions: %s"
 msgid "Invalid vrange"
 msgstr "nederīgs reģions: %s"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26188,7 +27827,7 @@ msgid "Reading input data..."
 msgstr "Lasa %s ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -26231,17 +27870,17 @@ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 msgid "Writing to output raster map..."
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 #, fuzzy
 msgid "Scanning data ..."
 msgstr "Drukā ... "
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -26401,10 +28040,6 @@ msgstr "Izejas rastra kartes nosaukums"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-msgid "Data type"
-msgstr "Datu tips"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -26943,104 +28578,109 @@ msgstr "Nederīga y koordināta <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Rastra karte, kuras histogramma tiks parādīta"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "izejas līmeņa nosaukums"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Izejas karte kurā tiks ierakstīti punkti"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "rastra karte <%s> nav atrasta"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, fuzzy, c-format
 msgid "%s: illegal value spec"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Eksistējošas rastra kartes nosaukums"
@@ -27459,89 +29099,178 @@ msgstr "Drukā ... "
 msgid "File <%s> created"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Neveiksme atverot ieejas dig_att failu"
+
+#: ../raster/r.in.lidar/main.c:175
+msgid "Filter range for intensity values (min,max)"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Summē visas rastra šūnu vērtības."
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Nav ieejas karte(s) norādīta."
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../raster/r.in.lidar/main.c:258
+#, fuzzy
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "rastra karte [%s] nav atrasta"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Nezināms/nepazīstms tips"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "nederīgs reģions: %s"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Drukā ... "
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "nevar atvērt vektorfailu <%s> iekš <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Neiespējami atvērt šūnu failu[%s]"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 "Ģenerē rastra karti, kur vienlaidus apgabali ir palielināti par vienu šūnu."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Maksimālā distance starp punktiem kartes vienībās"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Maksimālā distance starp punktiem"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Nenosakāms tips: %c"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Maksimālā distance starp punktiem kartes vienībās"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27683,7 +29412,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
@@ -27791,7 +29520,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Sākuma punkts ir ārpus pašreizējā reģiona."
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28374,7 +30103,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28808,7 +30537,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Drukāt statistiku komandrindas skripta stilā"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28831,11 +30560,6 @@ msgstr "Gājiens: %d\n"
 msgid "Unable to write to temp file"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Rakstu jaunu failu... \n"
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -28954,7 +30678,7 @@ msgid "Writing output raster map..."
 msgstr "Izejas rastra kartes nosaukums"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -28965,42 +30689,42 @@ msgstr "Eksistējošas rastra kartes nosaukums"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Ģenerē rastra karšu platību statistiku."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Vienu koordinātu pāri uz līniju, lūdzu"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "x koordināte"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Tukša ziemeļu koordināte norādīta!"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -29090,22 +30814,22 @@ msgid "Invalid map type"
 msgstr "nederīgs reģions: %s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -29212,23 +30936,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29237,8 +30961,8 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29730,195 +31454,200 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Ieejas fails"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Ieejas karte: vidējā virszemes plūssma uz šūnu"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Ieejas karte: reljefs, kas bloķē virszemes ūdens plūsmu, priekš USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 msgid "Minimum size of exterior watershed basin"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Ievades vērtība: maksimālais virszemes plūsmas garums, priekš USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Izvades karte: šūnu skaits, kas drenējas caur katru šūnu"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Nogāžu slīpuma izvades rastra kartes nosaukums"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Atļaut tikai horizontālu un vertikālu ūdens plūsmu"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Piedodiet, jums ir jāizvēlas izvades karte."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "Apkārtnes izmērs šūnās"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Kolonas tips nav atbalstīts"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -29926,23 +31655,23 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -29951,22 +31680,32 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Eksistējošas rastra kartes nosaukums"
@@ -29998,32 +31737,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "Attēlojamā rastra karte"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr ""
@@ -30431,7 +32170,7 @@ msgstr "Rastra kartes nosaukums"
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "Nezināms/nepazīstms tips"
@@ -30813,7 +32552,7 @@ msgid ""
 msgstr "Ģenerē rastra karšu platību statistiku."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30828,11 +32567,23 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "2 līmeņiem jābūt norādītiem"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31113,22 +32864,22 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "Nerādīt kategoriju nummurus"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, fuzzy, c-format
 msgid "Pass number %d"
 msgstr "Gājiens: %d\n"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
@@ -31136,11 +32887,11 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -31439,32 +33190,12 @@ msgid "Produces a vector map of specified contours from a raster map."
 msgstr ""
 "Izveido GRASS vektoru karti ar kontūrlīnijām norādītajai rastra kartei."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr ""
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Ūdens līmenis"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr ""
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32061,54 +33792,55 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Rastra karte no kuras tiks nolasīts profils"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Rakstuzīmju kodējums"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Neveiksme atverot ieejas dig_att failu"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "%d papildinājuma/atjauninājuma kļūda\n"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "Nenosakāms tips: %c"
@@ -32158,81 +33890,81 @@ msgstr "Nezināms/nepazīstms tips"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Nederīgs soļu skaits: %s"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "nederīgs reģions: %s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "Nezināms/nepazīstms tips"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Nevar izveidot tabulu: %s"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -32421,22 +34153,22 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr "Pabeigts: "
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 #, fuzzy
 msgid "Location PROJ_INFO is:\n"
 msgstr "nevar atvērt %s"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32475,14 +34207,6 @@ msgstr "Datu bāzes faila nosaukums"
 msgid "Band to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32505,7 +34229,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
@@ -32525,7 +34249,7 @@ msgstr "Izejas karte kurā tiks ierakstīti punkti"
 msgid "Reading band %d of %d..."
 msgstr "Lasam dig failu... \n"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "rastra karte <%s> nav atrasta"
@@ -32595,195 +34319,214 @@ msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
 msgid "Link to raster map <%s> created."
 msgstr "KĻŪDA: <%s> jau eksistē\n"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importē GDAL atbalstītu rastra failu kā jaunu rastra karti."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Importējamais rastra fails"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 msgid "Band(s) to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Importējamais rastra fails"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Nevajag taisīt atribūtu tabulu"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "izdrukāt tabulas un iziet"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Ignorē projekciju pārbaudi."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Neveiksme atverot ieejas dig_att failu"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Nevaratvērt datubāzi %s"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "%d punkti ierakstīti izejas kartē\n"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "%s: Nevarēja nolasīt krāsu tabulu priekš <%s@%s>"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "%s: Nevarēja nolasīt krāsu tabulu priekš <%s@%s>"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Neiespējami atvērt šūnu failu[%s]"
@@ -32907,7 +34650,7 @@ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
 msgid "Writing topographic index map..."
 msgstr "Rakstu jaunu failu... \n"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr ""
@@ -33023,36 +34766,36 @@ msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 "Uzmanību. Tilpums ir korekts tikai tad, ja dziļums (reljefa karte) ir metros"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Drukā ... "
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
 msgstr ""
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr ""
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 #, fuzzy
 msgid "Name for resultant raster map"
 msgstr "Rezultējošās rastra kartes nosaukums"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "Rastra kartes nosaukums"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
@@ -33123,37 +34866,6 @@ msgstr "Attēlojamā rastra karte"
 msgid "Converts a raster map into a vector map."
 msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Izejas rastra kartes nosaukums"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Rakstu jaunu failu... \n"
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "vektors, topoloģija"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -33665,11 +35377,6 @@ msgstr ""
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Nogāžu slīpuma izvades rastra kartes nosaukums"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -33958,7 +35665,7 @@ msgstr "Ģenerēt nejaušu virsmu(as) ar telpiskajām atkarībām."
 msgid "Name for output raster map(s)"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Maksimālā distance starp punktiem"
@@ -33988,7 +35695,7 @@ msgstr ""
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Eksistējošas rastra kartes nosaukums"
@@ -34323,7 +36030,7 @@ msgstr "Ieejas rastra faila nosaukums"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34349,7 +36056,7 @@ msgstr "Drukā ... "
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -34370,7 +36077,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Drukā ... "
@@ -34523,7 +36230,7 @@ msgstr "Nevar izveidot koku"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Ieejas rastra faila nosaukums"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "Ieejas rastra faila nosaukums"
@@ -34697,11 +36404,11 @@ msgstr "ziemeļi"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Nevarēja atrast rastra failu %s"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Nevar ierakstīt ezera rastra karti <%s>!"
@@ -34914,21 +36621,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Lietojamās kartes centra koordinātes\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster/r.sun/main.c:654
+#, fuzzy, c-format
+msgid "Using albedo constant: %lf"
+msgstr "Lietojamās kartes centra koordinātes\n"
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "nederīgs reģions: %s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Lietojamās kartes centra koordinātes\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Lietojamās kartes centra koordinātes\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Eksistējošas rastra kartes nosaukums"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -34954,76 +36701,89 @@ msgstr "Atarhivēt kartes"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Drukāt statistiku komandrindas skripta stilā"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "vektora karte <%s> nav atrasta"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, fuzzy, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "PABEIGTS: %sarhivētais fails ir %ld baitu%s mazāks"
 
-#: ../raster/r.compress/main.c:173
-#, fuzzy, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "PABEIGTS: %sarhivētais fails ir %ld baitu%s mazāks"
 
-#: ../raster/r.compress/main.c:177
-#, fuzzy, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "PABEIGTS: %sarhivētais fails ir %ld baitu%s lielāks"
 
-#: ../raster/r.compress/main.c:178
-#, fuzzy, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "PABEIGTS: %sarhivētais fails ir %ld baitu%s lielāks"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Laukums\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] jau atarhivēts"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] jau arhivēts"
+msgid "Uncompressing <%s>"
+msgstr "Rakstuzīmju kodējums"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Rakstuzīmju kodējums"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Rakstuzīmju kodējums"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "neiespējami atvērt <%s>"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35055,52 +36815,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "rastrs <%s> nav atrasts"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Ieejas fails"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "2 līmeņiem jābūt norādītiem"
@@ -35524,21 +37284,29 @@ msgstr[2] "Kalkulējam ēnas no DEM..."
 msgid "Calculating %s"
 msgstr "Kalkulējam ēnas no DEM..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Izšķirtspēja"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Ģenerē gadījuma rastra šūnas ar telpiski atkarīgām vērtībām."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr ""
+"\n"
+"\n"
+"  Punktu skaits: %d\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35680,7 +37448,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr "vektora karte <%s> nav atrasta"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Tīkla krāsa"
 
@@ -35801,15 +37569,10 @@ msgid "Starting and ending coordinates"
 msgstr "Lietojamās kartes centra koordinātes\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Līnijas krāsa"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "Teksta krāsa"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -35839,8 +37602,8 @@ msgid "Name of monitor to start"
 msgstr "Izejas rastra kartes nosaukums"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -35902,48 +37665,66 @@ msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Lieto brīvi izvēlētas krāsas"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "Izvēlētā grafiskā monitora nosaukums"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 #, fuzzy
 msgid "No monitor selected"
 msgstr "Izvēlētā grafiskā monitora nosaukums"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "2 līmeņiem jābūt norādītiem"
@@ -35953,64 +37734,74 @@ msgstr "2 līmeņiem jābūt norādītiem"
 msgid "Monitor <%s> is not running"
 msgstr "rastrs <%s> nav atrasts"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "3d skata fails <%s> nav atrasts"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "3d skata fails <%s> nav atrasts"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "neiespējami atvērt <%s>"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Izejas karte kurā tiks ierakstīti punkti"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Nevar izveidot tabulu: %s"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Izejas tabulas nosaukums"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
+msgid "Starting monitor <%s>..."
+msgstr "Rakstu jaunu failu... \n"
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Rastra izejas fails"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "KĻŪDA: <%s> jau eksistē\n"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Sākuma punkta koordinātes"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "reģions <%s> nav atrasts"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Neiespējami atvērt šūnu failu[%s]"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Rastra izejas fails"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Nevar atrast ieejas vektoru karti <%s>"
 
 #: ../display/d.erase/main.c:33
 msgid ""
@@ -36119,27 +37910,46 @@ msgstr "%s - nederīgs nosaukums"
 msgid "[%s]: illegal value specified"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "lietot molodensky transformāciju"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr "Izvēlies fontu kurš tiks parādīts lietotāja grafiskajā vidē."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Nevarēja atrast rastra failu %s"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "Esošā rastra faila nosaukums"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36148,7 +37958,7 @@ msgstr[1] "Malu krāsa"
 msgstr[2] "Malu krāsa"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36156,7 +37966,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36230,11 +38040,6 @@ msgstr "Laukuma aizpildījuma krāsa"
 msgid "Colorize features according color definition column"
 msgstr ""
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Nav ieejas karte(s) norādīta."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36244,7 +38049,7 @@ msgstr ""
 msgid "Lines"
 msgstr "Līnijas"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Līnijas platums"
 
@@ -36792,37 +38597,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "nederīgs reģions: %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Parādīt nulles šūnu unformāciju"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "Nevar izveidot index"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37071,15 +38876,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "Esošā rastra faila nosaukums"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Ieejas fails"
@@ -37145,7 +38941,7 @@ msgstr "datu tipi"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "datu tipi"
@@ -37184,12 +38980,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Vektorkartes nosaukums"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37232,14 +39038,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Nevarēja atrast rastra failu %s"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37322,11 +39121,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Nav ko zīmēt! (nav kategorijas ar uzrakstiem?)"
 
@@ -37340,33 +39140,89 @@ msgstr "Izvēlies fontu kurš tiks parādīts lietotāja grafiskajā vidē."
 msgid "North arrow style"
 msgstr "Malu krāsa"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 msgid "Fill color"
 msgstr "Azipildījuma krāsa"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -37382,72 +39238,72 @@ msgstr "Nevar atrast ieejas karti <%s>\n"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 #, fuzzy
 msgid "Name of raster aspect map to be displayed"
 msgstr "Attēlojamā rastra karte"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 #, fuzzy
 msgid "Type of existing raster aspect map"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Krāsa zīmējamajam tekstam"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Krāsa zīmējamajam tekstam"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Krāsa zīmējamajam tekstam"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "Ieejas fails"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Rastra izejas fails"
@@ -37731,57 +39587,43 @@ msgstr "krāsu fails priekš [%s] nav pieejams"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "vektora karte <%s> nav atrasta"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "reģions <%s> nav atrasts"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Pārkodēt rastra kartes."
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "Rastra karte kura tiks pārkodēta"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Nevarēja atrast rastra failu %s"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Ir jāievada kā minimums četri punkti %d"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Neveiksme atverot ieejas dig_att failu"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -37854,7 +39696,21 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr "Vektorkartes nosaukums"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "vektora karte <%s> nav atrasta"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "reģions <%s> nav atrasts"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
@@ -37862,111 +39718,111 @@ msgstr ""
 "\n"
 "  Punktu skaits: %d\n"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Ieejas fails"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Ieejas fails"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "%s - nederīgs nosaukums"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "nevar atvērt %s"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr ""
 "Līmenis: %d\n"
 "kategorija: %d\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Kļūda: %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Kļūda: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Nevarēja atrast rastra failu %s"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Lasam dig failu... \n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr " Z: %-10.3f    D: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr " A: %-10.3f    R: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr " A: %-10.3f    R: %-10.3f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr ""
 "Līmenis: %d\n"
 "kategorija: %d\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, fuzzy, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
@@ -37974,27 +39830,27 @@ msgstr ""
 "\n"
 "  Punktu skaits: %d\n"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr ""
@@ -38002,67 +39858,67 @@ msgstr ""
 "\n"
 "  Punktu skaits: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Lasam dig_att failu...\n"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Rastra kartes nosaukums"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38366,8 +40222,8 @@ msgid "radiance"
 msgstr "vektora karte <%s> nav atrasta"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Izšķirtspēja"
@@ -38735,359 +40591,403 @@ msgstr "rastra karte [%s] nav atrasta"
 msgid "group <%s> references the following subgroups\n"
 msgstr "reģions <%s> nav atrasts"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Izšķirtspēja"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Reljefa rastra karte (DEM)"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Jaunas rastra kartes nosaukums"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Ieejas rastra faila nosaukums"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Līniju skaits"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Eksistējošas rastra kartes nosaukums"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Zinātniskais formāts"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Līniju skaits"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "Līniju skaits"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39296,7 +41196,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Maksimālais punktu skaits vienā segmentā"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Nederīgs soļu skaits: %s"
@@ -39657,109 +41557,115 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Nav vairs operatīvās atmiņas!"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Rezultējošās rastra kartes nosaukums"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Nevarēja atrast rastra failu %s"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "drukājamo kopiju sakits"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "reģions <%s> nav atrasts"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Rakstu jaunu failu... \n"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Izveidot punktus visā garumā ilīniju garumā"
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 "Reģiona izmērs ir mazāks nekā ninimālais reģions, nekas nav parādīts.\n"
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att fails neeksistē"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Izšķirtspēja"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Rezultējošās rastra kartes nosaukums"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Nevarēja atrast rastra failu %s"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "drukājamo kopiju sakits"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Rakstu jaunu failu... \n"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -39833,64 +41739,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "2 līmeņiem jābūt norādītiem"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "nederīgs reģions: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "rastra karte <%s> nav atrasta"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Nevar izveidot tabulu: %s"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "rastra karte <%s> nav atrasta"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Nederīgs soļu skaits: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Nederīgs soļu skaits: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "reģions <%s> nav atrasts"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -39960,7 +41883,7 @@ msgstr "Izejas rastra kartes nosaukums"
 msgid "Name for output raster map (blue)"
 msgstr "Izejas rastra kartes nosaukums"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40012,7 +41935,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -40857,51 +42780,55 @@ msgstr "reģions <%s> nav atrasts"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Novietojums %s ir izveidots!"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Aizvēršana neizdevās."
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Rezultējošās rastra kartes nosaukums"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Nav ieejas karte(s) norādīta."
@@ -41186,6 +43113,10 @@ msgstr "Nevarēja atrast rastra failu %s"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41578,70 +43509,361 @@ msgid "Name for output raster map (saturation)"
 msgstr "Izvades rastra karte ar ezeru"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Nevar izveidot projekcijas failus: %s"
+#~ msgid "<%s> already exists"
+#~ msgstr "KĻŪDA: <%s> jau eksistē\n"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Nevar izveidot projekcijas failus: %s"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] jau arhivēts"
 
 #, fuzzy
-#~ msgid "Column type not supported (%s)"
-#~ msgstr "Kolonas tips nav atbalstīts"
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Nekas nav atrasts.\n"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Ieejošā karte satur līnijas"
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Nevajag taisīt atribūtu tabulu"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Nevajag taisīt atribūtu tabulu"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Slāņa numurs vai nosaukums"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Sākuma punkta koordinātes"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Nevajag taisīt atribūtu tabulu"
+
+#, fuzzy
+#~ msgid "Vector map profiling tool"
+#~ msgstr "vektora karte <%s> nav atrasta"
+
+#, fuzzy
+#~ msgid "Input filter"
+#~ msgstr "Ieejas fails"
+
+#, fuzzy
+#~ msgid "Coordinates for profiling line nodes"
+#~ msgstr "Vienu koordinātu pāri uz līniju, lūdzu"
+
+#, fuzzy
+#~ msgid "Profiling line"
+#~ msgstr "Izveidot punktus visā garumā ilīniju garumā"
+
+#, fuzzy
+#~ msgid "Buffer (tolerance) for points in map units"
+#~ msgstr "Bufera izmērs kartes vienībās"
+
+#, fuzzy
+#~ msgid "Output formating"
+#~ msgstr "Izejas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Number of significant digits"
+#~ msgstr "Līniju skaits"
+
+#, fuzzy
+#~ msgid "Use features only from specified layer"
+#~ msgstr "Drukāt saules pozīcijas apraskstu komandrindas skripta stilā"
+
+#, fuzzy
+#~ msgid "Name for profile line and buffer output map"
+#~ msgstr "Izejas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Profile line and buffer around it will be written"
+#~ msgstr "Izejas karte kurā tiks ierakstīti punkti"
+
+#, fuzzy
+#~ msgid "Do not print column names"
+#~ msgstr "Atslēga (id) kolonas nosaukums"
+
+#, fuzzy
+#~ msgid "Do not print 3D vector data (z values)"
+#~ msgstr "Nevajag taisīt atribūtu tabulu"
+
+#, fuzzy
+#~ msgid "Profiling line map"
+#~ msgstr "Izveidot punktus visā garumā ilīniju garumā"
+
+#, fuzzy
+#~ msgid "Vector map containing profiling line"
 #~ msgstr "Ieejošā karte satur līnijas"
 
 #, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Ieejas rastra faila nosaukums"
+#~ msgid "Profiling line map layer"
+#~ msgstr "Izveidot punktus visā garumā ilīniju garumā"
 
 #, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Ieejas rastra faila nosaukums"
+#~ msgid "Layer 0 not supported"
+#~ msgstr "Kolonas tips nav atbalstīts"
+
+#, fuzzy
+#~ msgid "<%s> is not a valid vector map name"
+#~ msgstr "izejas līmeņa nosaukums"
+
+#, fuzzy
+#~ msgid "At least profile start and end coordinates are required!"
+#~ msgstr "Vaicājuma koordinātes"
 
 #, fuzzy
 #~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr "Ieejas rastra faila nosaukums"
+#~ "No database connection defined for map <%s> layer %d, but WHERE condition "
+#~ "is provided"
+#~ msgstr "Datubāzes konekcija nav definēta"
+
+#, fuzzy
+#~ msgid "No features match Your query"
+#~ msgstr "Vektorkartes nosaukums"
+
+#, fuzzy
+#~ msgid "Unabale to get attribute data for cat %d"
+#~ msgstr "Nevar iatlasīt datus no tabulas"
+
+#, fuzzy
+#~ msgid "Unable to create 2D raster <%s>"
+#~ msgstr "Rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Unable to create 3D raster <%s>"
+#~ msgstr "Rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Error writing cell (%d,%d,%d) with value %f, nrows = %d"
+#~ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
+
+#, fuzzy
+#~ msgid "Unable to initialize G-submatrix..."
+#~ msgstr "Nevar atrast ieejas karti <%s>\n"
+
+#, fuzzy
+#~ msgid "Name of input vector points map"
+#~ msgstr "Vektorkartes nosaukums"
+
+#, fuzzy
+#~ msgid "File to write the report"
+#~ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
+
+#, fuzzy
+#~ msgid "Name for output 2D/3D raster map"
+#~ msgstr "Izejas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Vertical variogram function"
+#~ msgstr "Vertikālais mērogs"
+
+#, fuzzy
+#~ msgid "Attribute column containing input values for interpolation"
+#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
+
+#, fuzzy
+#~ msgid "Number of horizontal lags"
+#~ msgstr "Punktu skaits:"
+
+#, fuzzy
+#~ msgid "Report is being written to %s..."
+#~ msgstr "%d punkti ierakstīti izejas kartē\n"
 
 #, fuzzy
 #~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr "Ieejas rastra faila nosaukums"
+#~ "Number of vertical pieces must be at least 1. Default value will be "
+#~ "used..."
+#~ msgstr "Drukājamo kopiju sakits"
 
 #, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "%s - nederīgs nosaukums"
+#~ msgid "Please set up name of output layer..."
+#~ msgstr "Izejas rastra kartes nosaukums"
 
 #, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
+#~ msgid "Coordinates of point no. %d are zeros."
+#~ msgstr "Vienu koordinātu pāri uz līniju, lūdzu"
 
 #, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Neizdevās piešķirt atmiņu rindu norādēm"
+#~ msgid "Computing %s variogram properties..."
+#~ msgstr "Kalkulējam ēnas no DEM..."
 
 #, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgid "Anisotropy ratio must be greater than zero..."
 #~ msgstr "2 līmeņiem jābūt norādītiem"
 
 #, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
+#~ msgid "Error writing file"
+#~ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
+
+#, fuzzy
+#~ msgid "Error closing file..."
+#~ msgstr "Kļūda atverot šūnu failu"
+
+#, fuzzy
+#~ msgid "Unable to plot variogram"
+#~ msgstr "Neiespējami atvērt šūnu failu[%s]"
+
+#, fuzzy
+#~ msgid "Memory allocation failed..."
+#~ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
+
+#, fuzzy
+#~ msgid "Interpolating unknown values..."
+#~ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
+
+#, fuzzy
+#~ msgid "Error writing result into output layer..."
+#~ msgstr "Izejas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Reading values from attribute column <%s>..."
+#~ msgstr "Nevajag taisīt atribūtu tabulu"
+
+#, fuzzy
+#~ msgid "Reading coordinates..."
+#~ msgstr "Lasa %s ..."
+
+#, fuzzy
+#~ msgid "Error reading input coordinates z..."
+#~ msgstr "Lasa %s ..."
+
+#, fuzzy
+#~ msgid "%d features skipped, only points are accepted"
+#~ msgstr "Importējamais rastra fails"
+
+#, fuzzy
+#~ msgid "Unused points: %d (out of region)"
+#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
+
+#, fuzzy
+#~ msgid "Nothing to scan..."
+#~ msgstr "Nekas nav atrasts.\n"
+
+#, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
 #~ msgstr "2 līmeņiem jābūt norādītiem"
 
 #, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "2 līmeņiem jābūt norādītiem"
+
+#, fuzzy
+#~ msgid "Unpacks a vector map packed with v.pack."
+#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
+
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
+
+#, fuzzy
+#~ msgid "Unpacks a raster map packed with r.pack."
+#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
+
+#, fuzzy
+#~ msgid "%s: Error writing temporary file"
+#~ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
+
+#, fuzzy
+#~ msgid "Input options"
+#~ msgstr "nevar atvērt %s"
+
+#, fuzzy
+#~ msgid "Output options"
+#~ msgstr "Izejas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "reģions <%s> nav atrasts"
+
+#, fuzzy
+#~ msgid "output map <%s> exists"
+#~ msgstr "reģions <%s> nav atrasts"
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Neņemt vērā projekciju (izmantot pašreizējā novietojuma projekciju)"
+
+#, fuzzy
+#~ msgid "Could not rewind input file"
+#~ msgstr "nevar atvērt vektorfailu <%s> iekš <%s>"
+
+#, fuzzy
+#~ msgid "[%s] not found"
+#~ msgstr "<%s> nav atrasts"
+
+#, fuzzy
+#~ msgid "Topographic index ln(a / tan(b))"
+#~ msgstr "Izejas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "Name for basins raster map"
+#~ msgstr "Eksistējošas rastra kartes nosaukums"
+
+#, fuzzy
+#~ msgid "OGR datasource name"
+#~ msgstr "datbāzes vārds"
+
+#, fuzzy
+#~ msgid "Column type not supported (%s)"
+#~ msgstr "Kolonas tips nav atbalstīts"
+
+#, fuzzy
+#~ msgid "Subregion"
+#~ msgstr "Lasam dig failu... \n"
+
+#, fuzzy
+#~ msgid "Scanning %d points..."
+#~ msgstr "Rakstu jaunu failu... \n"
+
+#, fuzzy
+#~ msgid "%d points imported"
+#~ msgstr "%d punkti ielādēti\n"
+
+#, fuzzy
+#~ msgid "%d input points were not valid"
+#~ msgstr "%d punkti ielādēti\n"
+
+#, fuzzy
+#~ msgid "%d input points were outside of the selected area"
+#~ msgstr "%d punkti ielādēti\n"
+
+#, fuzzy
+#~ msgid "%d input points were filtered out by return number"
+#~ msgstr "%d punkti ielādēti\n"
+
+#, fuzzy
+#~ msgid "%d input points were filtered out by class number"
+#~ msgstr "%d punkti ielādēti\n"
+
+#, fuzzy
+#~ msgid "%d duplicate categories in vector"
+#~ msgstr "%d vektorā dubultojas kategorijas\n"
+
+#, fuzzy
+#~ msgid "Buffering failed"
+#~ msgstr "Lasam dig failu... \n"
+
+#, fuzzy
+#~ msgid "Location: %s\n"
+#~ msgstr "nevar atvērt %s"
+
+#, fuzzy
+#~ msgid " %s\n"
+#~ msgstr "%s"
+
+#, fuzzy
+#~ msgid "Region\n"
+#~ msgstr "Lasam dig failu... \n"
+
+#, fuzzy
+#~ msgid "Username to set for DB connection"
+#~ msgstr "Nevar izveidot projekcijas failus: %s"
+
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Nevar izveidot projekcijas failus: %s"
+
+#, fuzzy
 #~ msgid "time series"
 #~ msgstr "Attēlojamā rastra karte"
 
@@ -41686,28 +43908,8 @@ msgstr "Izvades rastra karte ar ezeru"
 #~ msgstr "Līniju skaits"
 
 #, fuzzy
-#~ msgid "Location: %s\n"
-#~ msgstr "nevar atvērt %s"
-
-#, fuzzy
-#~ msgid " %s\n"
-#~ msgstr "%s"
-
-#, fuzzy
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "reģions <%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "reģions <%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "neiespējami atvērt <%s>"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Lapas garums (pēc noklusējuma %d rindas)"
@@ -41716,24 +43918,10 @@ msgstr "Izvades rastra karte ar ezeru"
 #~ msgstr "Lapas platums (pēc noklusējuma %d simboli)"
 
 #, fuzzy
-#~ msgid "%s: Error writing temporary file"
-#~ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
-
-#, fuzzy
-#~ msgid "Input options"
-#~ msgstr "nevar atvērt %s"
-
-#, fuzzy
-#~ msgid "Output options"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "[%s] not found"
-#~ msgstr "<%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "Unpacks a vector map packed with v.pack."
-#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
 
 #~ msgid ""
 #~ "Exports a vector map to a GPS receiver or file format supported by "
@@ -41765,1126 +43953,26 @@ msgstr "Izvades rastra karte ar ezeru"
 #~ msgstr "Tekošā reģiona nosaukums"
 
 #, fuzzy
-#~ msgid "Create 3D charts"
-#~ msgstr "Vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "File <%s> already exists and will be overwritten"
-#~ msgstr "Izejas karte kurā tiks ierakstīti punkti"
-
-#, fuzzy
-#~ msgid "Starting monitor <%s>..."
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Unable to copy render command file"
-#~ msgstr "Rastra izejas fails"
-
-#, fuzzy
-#~ msgid "Unable to delete file <%s>"
-#~ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
-
-#, fuzzy
-#~ msgid "Unable to delete directory <%s>"
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Unable to read file <%s>"
-#~ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
-
-#, fuzzy
-#~ msgid "Unable to open file '%s'"
-#~ msgstr "Neiespējami atvērt šūnu failu[%s]"
-
-#, fuzzy
-#~ msgid "No support files found for monitor <%s>"
-#~ msgstr "Nevar atrast ieejas vektoru karti <%s>"
-
-#, fuzzy
-#~ msgid "Print path to support files of currently selected monitor and exit"
-#~ msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
-
-#, fuzzy
-#~ msgid "Unable to execute():"
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Error in sqlite3_exec():"
-#~ msgstr "Kļūda atverot šūnu failu"
-
-#, fuzzy
-#~ msgid "Name of workspace file to load on start-up"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid ""
-#~ "Apply temporal and spatial operations on space time raster datasets using "
-#~ "temporal raster algebra."
-#~ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "r.mapcalc expression for temporal and spatial analysis of space time "
-#~ "raster datasets"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Comma separated list of coordinates"
-#~ msgstr "Komatu attdalīta vērtību liste: piem. 1.4,3.8,13"
-
-#, fuzzy
-#~ msgid "Name for the output file or \"-\" in case stdout should be used"
-#~ msgstr "Vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "Number of r.what processes to run in parallel"
-#~ msgstr "Drukājamo kopiju sakits"
-
-#, fuzzy
-#~ msgid ""
-#~ "Assume that the dataset has the same projection as the current location"
-#~ msgstr "%d punkti ierakstīti izejas kartē\n"
-
-#, fuzzy
-#~ msgid "Manages display frames on the user's graphics monitor."
-#~ msgstr "Izvēlies fontu kurš tiks parādīts lietotāja grafiskajā vidē."
-
-#~ msgid "frame"
-#~ msgstr "rāmis"
-
-#, fuzzy
-#~ msgid "Create a new frame if doesn't exist and select"
-#~ msgstr "Izveidot jaunu failu, ja neeksistē"
-
-#, fuzzy
-#~ msgid "Print name of current frame and exit"
-#~ msgstr "drukā tekošās karšu biblotēkas/mapset meklēšanas ceļu"
-
-#, fuzzy
-#~ msgid "Print names of all frames including 'at' position and exit"
-#~ msgstr "izdrukāt tekošā pieslēguma parametrus un iziet"
-
-#, fuzzy
-#~ msgid ""
-#~ "Produces a space time vector dataset of specified contours from a space "
-#~ "time raster dataset."
-#~ msgstr ""
-#~ "Izveido GRASS vektoru karti ar kontūrlīnijām norādītajai rastra kartei."
-
-#, fuzzy
-#~ msgid "Register empty vector maps"
-#~ msgstr "Rastra ievades kartes"
-
-#, fuzzy
-#~ msgid "Do not create attribute tables"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid ""
-#~ "Apply temporal and spatial operations on space time 3D raster datasets "
-#~ "using temporal 3D raster algebra."
-#~ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Algebraic expression for temporal and spatial analysis of space time 3D "
-#~ "raster datasets"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts a space time raster dataset into a space time vector dataset"
-#~ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
-
-#, fuzzy
-#~ msgid "query_layer,query_column"
-#~ msgstr "kolona 2"
-
-#, fuzzy
-#~ msgid "query_column"
-#~ msgstr "kolona 2"
-
-#, fuzzy
-#~ msgid ""
-#~ "List available extensions in the official GRASS GIS Addons repository"
-#~ msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
-
-#, fuzzy
-#~ msgid ""
-#~ "List available extensions in the official GRASS GIS Addons repository "
-#~ "including module description"
-#~ msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
-
-#, fuzzy
-#~ msgid ""
-#~ "List available extensions in the official GRASS GIS Addons repository "
-#~ "(shell script style)"
-#~ msgstr "izveidot sarakstu ar visām pieejamajām karšu biblotēkām/mapsets"
-
-#, fuzzy
-#~ msgid "Aggregation type of the space time raster or 3D raster dataset"
-#~ msgstr "Datu bāzes faila nosaukums"
-
-#, fuzzy
-#~ msgid "Name for output image (or text file for -t)"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "output to text file"
-#~ msgstr "Izejas draivera nosaukums"
-
-#, fuzzy
-#~ msgid "Kappa value"
-#~ msgstr "Lasam dig failu... \n"
-
-#, fuzzy
-#~ msgid "Using Linke constant: %lf"
-#~ msgstr "Lietojamās kartes centra koordinātes\n"
-
-#, fuzzy
-#~ msgid "Using Linke map <%s>"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Using albedo constant: %lf"
-#~ msgstr "Lietojamās kartes centra koordinātes\n"
-
-#, fuzzy
-#~ msgid "Using albedo map <%s>"
-#~ msgstr "nederīgs reģions: %s"
-
-#, fuzzy
-#~ msgid "Using slope constant: %lf"
-#~ msgstr "Lietojamās kartes centra koordinātes\n"
-
-#, fuzzy
-#~ msgid "Using slope map <%s>"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Using aspect constant: %lf"
-#~ msgstr "Lietojamās kartes centra koordinātes\n"
-
-#, fuzzy
-#~ msgid "Using aspect map <%s>"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Closing TCI and SPI maps"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Closing SPI map"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Stream power index a * tan(b)"
-#~ msgstr "Nogāžu slīpuma izvades rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid ""
-#~ "Use the native resolution and extent of the raster map, instead of the "
-#~ "current region"
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "zones option and region flag -r are mutually exclusive"
-#~ msgstr "2 līmeņiem jābūt norādītiem"
-
-#, fuzzy
-#~ msgid "Calculate distance to nearest NULL cell"
-#~ msgstr "Maksimālā distance starp punktiem"
-
-#, fuzzy
-#~ msgid "List input and output maps"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Name of the output file that contains the imported map names"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid "Unable to open the map names output text file"
-#~ msgstr "Neveiksme atverot ieejas dig_att failu"
-
-#, fuzzy
-#~ msgid "Maximum number of cells to be created"
-#~ msgstr ""
-#~ "\n"
-#~ "\n"
-#~ "  Punktu skaits: %d\n"
+#~ msgid "No flag given"
+#~ msgstr "Nav norādīta karte"
 
 #, fuzzy
-#~ msgid "Cannot create temporary file with segments of a raster map"
+#~ msgid "Unable to create file '%s'"
 #~ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
 
 #, fuzzy
-#~ msgid "File containing names of LAS input files"
-#~ msgstr "Neveiksme atverot ieejas dig_att failu"
-
-#, fuzzy
-#~ msgid "Grid-decimated point cloud"
-#~ msgstr "Nekas nav atrasts.\n"
-
-#, fuzzy
-#~ msgid "Subtract raster values from the z coordinates"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Transform"
-#~ msgstr "Nevarēja atrast rastra failu %s"
-
-#, fuzzy
-#~ msgid "Set computation region to match the new raster map"
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid ""
-#~ "Set computation region to match the 2D extent and resolution of the newly "
-#~ "created new raster map"
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "File <%s> does not exist"
-#~ msgstr "rastra karte [%s] nav atrasta"
-
-#, fuzzy
-#~ msgid "Raster map <%s> created. %lu points from %d files found in region."
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "Raster map <%s> created. %lu points found in region."
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "Cannot open file %s for reading"
-#~ msgstr "Neiespējami atvērt šūnu failu[%s]"
-
-#, fuzzy
-#~ msgid "gradient"
-#~ msgstr "vektora karte <%s> nav atrasta"
-
-#, fuzzy
-#~ msgid "Name for output 3D raster map(s)"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Failed to allocate memory for blocks"
-#~ msgstr "Neizdevās piešķirt atmiņu rindu norādēm"
-
-#, fuzzy
-#~ msgid "Writing gradient 3D raster maps..."
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Please provide three 3D raster maps"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Vector seed map <%s> not found"
-#~ msgstr "vektora karte <%s> nav atrasta"
-
-#, fuzzy
-#~ msgid "Computes 3D flow lines and 3D flow accumulation."
-#~ msgstr "Kalkulējam ēnas no DEM..."
-
-#, fuzzy
-#~ msgid "Name of vector map with points from which flow lines are generated"
-#~ msgstr "Rastra karte, kuras histogramma tiks parādīta"
-
-#, fuzzy
-#~ msgid "Name for vector map of flow lines"
-#~ msgstr "Vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "Name for output flowaccumulation 3D raster"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Name for 3D raster sampled by flowlines"
-#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
-
-#, fuzzy
-#~ msgid "length in map units"
-#~ msgstr "%s iekš %s: %s"
-
-#, fuzzy
-#~ msgid "Unit of integration step"
-#~ msgstr "Līniju skaits"
-
-#, fuzzy
-#~ msgid "Integration"
-#~ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
-
-#, fuzzy
-#~ msgid "Integration step in selected unit"
-#~ msgstr "Nav ieejas karte(s) norādīta."
-
-#, fuzzy
-#~ msgid "Default step is 0.25 cell"
-#~ msgstr "Ieejas datubāzes nosaukums"
-
-#, fuzzy
-#~ msgid "Maximum number of steps"
-#~ msgstr ""
-#~ "\n"
-#~ "\n"
-#~ "  Punktu skaits: %d\n"
-
-#, fuzzy
-#~ msgid "Maximum error of integration"
-#~ msgstr ""
-#~ "\n"
-#~ "\n"
-#~ "  Punktu skaits: %d\n"
-
-#, fuzzy
-#~ msgid "Number of cells between flow lines in x, y and z direction"
-#~ msgstr "drukājamo kopiju sakits"
-
-#, fuzzy
-#~ msgid "Create and fill attribute table"
-#~ msgstr "Nevar aprakstīt tabulu %s"
-
-#, fuzzy
-#~ msgid "Error during reading seed vector map"
-#~ msgstr "Rezultējošās rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Testing flow lines."
-#~ msgstr "Kalkulējam ēnas no DEM..."
-
-#, fuzzy
-#~ msgid "Unable to insert data into turntable."
-#~ msgstr "Nevar izveidot ierakstu tabulā: %s"
-
-#, fuzzy
-#~ msgid "Unable to open vector map <%s>."
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Arc layer <%s> does not exist in map <%s>."
-#~ msgstr "Pārkodēt rastra kartes."
-
-#, fuzzy
-#~ msgid ""
-#~ "Layer <%s> already exist in map <%s>.\n"
-#~ "It will be overwritten by tlayer data."
-#~ msgstr "Izejas karte kurā tiks ierakstīti punkti"
-
-#, fuzzy
-#~ msgid ""
-#~ "Layer <%s> already exist in map <%s>.\n"
-#~ "It will be overwritten by tuclayer data."
-#~ msgstr "Izejas karte kurā tiks ierakstīti punkti"
-
-#, fuzzy
-#~ msgid "Unable to create vector map <%s>."
-#~ msgstr "Rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Unable to open database <%s> using driver <%s>"
-#~ msgstr "Nevar atvērt datubāzi  %s pēc adreses %s"
-
-#, fuzzy
-#~ msgid "Unable to create turntable <%s>."
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Unable to connect table <%s> to vector map <%s>."
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Unable to create index for column <%s> in table <%s>."
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Turntable"
-#~ msgstr "DB tabula"
-
-#, fuzzy
-#~ msgid "Turntable layer"
-#~ msgstr "Uz slāni"
-
-#, fuzzy
-#~ msgid "Layer with turntable"
-#~ msgstr ""
-#~ "Līmenis: %d\n"
-#~ "kategorija: %d\n"
-
-#, fuzzy
-#~ msgid "decimation"
-#~ msgstr "maksimālais ierāciju skaits"
-
-#, fuzzy
-#~ msgid "Decimates a point cloud"
-#~ msgstr "Nekas nav atrasts.\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "For example, 5 will import 80 percent of points. If not specified, all "
-#~ "points are copied"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid "Preserve only every n-th point"
-#~ msgstr "Līniju skaits"
-
-#, fuzzy
-#~ msgid ""
-#~ "For example, 4 will import 25 percent of points. If not specified, all "
-#~ "points are copied"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid "Skip first n points"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Skips the given number of points at the beginning."
-#~ msgstr "Nederīgs soļu skaits: %s"
-
-#, fuzzy
-#~ msgid "Copy only n points"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Copies only the given number of points"
-#~ msgstr "Nederīgs soļu skaits: %s"
-
-#, fuzzy
-#~ msgid "Preserve only n points per grid cell"
-#~ msgstr "Līniju skaits"
-
-#, fuzzy
-#~ msgid ""
-#~ "Preserves only the given number of points per grid cell in grid-based "
-#~ "decimation"
-#~ msgstr "Līniju skaits"
-
-#, fuzzy
-#~ msgid "Apply grid-based decimation"
-#~ msgstr "Maksimālā distance starp punktiem kartes vienībās"
-
-#, fuzzy
-#~ msgid "Only one point per cat in grid cell"
-#~ msgstr "Līniju skaits"
-
-#, fuzzy
-#~ msgid "Use z in grid decimation"
-#~ msgstr "Maksimālā distance starp punktiem kartes vienībās"
-
-#, fuzzy
-#~ msgid "Store only the coordinates, throw away categories"
-#~ msgstr "Sākuma punkta koordinātes"
-
-#, fuzzy
-#~ msgid "Invalid zrange <%s>"
-#~ msgstr "nederīgs reģions: %s"
-
-#, fuzzy
-#~ msgid "point cloud"
-#~ msgstr "Nekas nav atrasts.\n"
-
-#, fuzzy
-#~ msgid "cluster"
-#~ msgstr "Rastrs"
-
-#, fuzzy
-#~ msgid "clump"
-#~ msgstr "reģions <%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "Performs cluster identification."
-#~ msgstr "Nevarēja atrast rastra failu %s"
-
-#, fuzzy
-#~ msgid "Layer number or name for cluster ids"
-#~ msgstr "Eksistējošas vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "Maximum distance to neighbors"
-#~ msgstr "Maksimālā distance starp punktiem"
-
-#, fuzzy
-#~ msgid "Clustering method"
-#~ msgstr "cnevar atvērt nepieciešamo daļu faila priekš %s"
-
-#, fuzzy
-#~ msgid "Minimum number of points must be at least 2"
-#~ msgstr "Drukājamo kopiju sakits"
-
-#, fuzzy
-#~ msgid "Option %s must be positive"
-#~ msgstr "Apkārtnes izmērs šūnās"
-
-#, fuzzy
-#~ msgid "Counting input points ..."
-#~ msgstr "Drukā ... "
-
-#, fuzzy
-#~ msgid "Not enough points in input, nothing to do"
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "Creating search index ..."
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Option %s must be a positive number"
-#~ msgstr "Apkārtnes izmērs šūnās"
-
-#, fuzzy
-#~ msgid "Estimating maximum distance ..."
-#~ msgstr "Maksimālā distance starp punktiem"
-
-#, fuzzy
-#~ msgid "No neighbors found"
-#~ msgstr "Rastra karte kura tiks pārkodēta"
-
-#, fuzzy
-#~ msgid "Distance to the %d nearest neighbor:"
-#~ msgstr "Maksimālā distance starp punktiem"
-
-#, fuzzy
-#~ msgid "Standard deviation: %g"
-#~ msgstr "Maksimālā distance starp punktiem kartes vienībās"
-
-#, fuzzy
-#~ msgid "Estimated maximum distance: %g"
-#~ msgstr "Maksimālā distance starp punktiem"
-
-#, fuzzy
-#~ msgid "Building clusters ..."
-#~ msgstr "Drukā ... "
-
-#, fuzzy
-#~ msgid "No clusters found, adjust option %s"
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "Write out cluster ids ..."
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Loading points ..."
-#~ msgstr "Lasa %s ..."
-
-#, fuzzy
-#~ msgid "Not enough points found"
-#~ msgstr "Nekas nav atrasts.\n"
-
-#, fuzzy
-#~ msgid "Core density ..."
-#~ msgstr "Ieejas fails"
-
-#, fuzzy
-#~ msgid "%d clusters found"
-#~ msgstr "reģions <%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "%d outliers found"
-#~ msgstr "reģions <%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "4 values required for '%s' option"
-#~ msgstr "Novietojums %s ir izveidots!"
-
-#, fuzzy
-#~ msgid "Unknown return filter value <%s>"
-#~ msgstr "Nezināms/nepazīstms tips"
-
-#, fuzzy
-#~ msgid "Overriding projection check"
-#~ msgstr "Ignorē projekciju pārbaudi."
-
-#, fuzzy
-#~ msgid "Column <%s> not found in the table <%s>. Creating..."
-#~ msgstr "reģions <%s> nav atrasts"
-
-#, fuzzy
-#~ msgid "Category index for vector map <%s> is not sorted"
+#~ msgid "Env file not found"
 #~ msgstr "3d skata fails <%s> nav atrasts"
 
 #, fuzzy
-#~ msgid "Do not expect input with topology"
-#~ msgstr "vektors, topoloģija"
-
-#, fuzzy
-#~ msgid "Database connection not defined for layer <%d>"
-#~ msgstr "Datubāzes konekcija nav definēta"
-
-#, fuzzy
-#~ msgid "No record for cat = %d"
-#~ msgstr "Nav ieraksta priekš līnijas cat= %d"
-
-#, fuzzy
-#~ msgid "NULL value for cat = %d"
-#~ msgstr "Nav ieraksta priekš līnijas cat= %d"
+#~ msgid "PID file not found"
+#~ msgstr "3d skata fails <%s> nav atrasts"
 
 #, fuzzy
-#~ msgid "Column type is not numeric (type = %d, cat = %d"
+#~ msgid "Command file not found"
 #~ msgstr "reģions <%s> nav atrasts"
 
 #, fuzzy
-#~ msgid "Exports vector points as LAS point cloud"
-#~ msgstr "Ieejošā karte satur līnijas"
-
-#, fuzzy
-#~ msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
-#~ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
-
-#, fuzzy
-#~ msgid "Layer number to store generated point ID as category"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Categories"
-#~ msgstr "%-5d līniju kategorijas nolasītas\n"
-
-#, fuzzy
-#~ msgid "Layer number to store return number as category"
-#~ msgstr "Slāņa numurs vai nosaukums"
-
-#, fuzzy
-#~ msgid "Layer number to store class number as category"
-#~ msgstr "Slāņa numurs vai nosaukums"
-
-#, fuzzy
-#~ msgid "Layer number where RGB color is stored as category"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Layer number where red color is stored as category"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Layer number where blue color is stored as category"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Column with return number"
-#~ msgstr "vektora karte <%s> nav atrasta"
-
-#, fuzzy
-#~ msgid "RGB color definition column"
-#~ msgstr "atslēgas kolona"
-
-#, fuzzy
-#~ msgid "Column with red color"
-#~ msgstr "Lieto brīvi izvēlētas krāsas"
-
-#, fuzzy
-#~ msgid "Column with green color"
-#~ msgstr "Lieto brīvi izvēlētas krāsas"
-
-#, fuzzy
-#~ msgid "Column with blue color"
-#~ msgstr "Lieto brīvi izvēlētas krāsas"
-
-#, fuzzy
-#~ msgid "Limit export to the current region"
-#~ msgstr "Sākuma punkts ir ārpus pašreizējā reģiona."
-
-#, fuzzy
-#~ msgid "Ignore color table"
-#~ msgstr "DB tabula"
-
-#, fuzzy
-#~ msgid "Failed to open vector <%s>"
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid "Layer number to store number of returns as category"
-#~ msgstr "Slāņa numurs vai nosaukums"
-
-#, fuzzy
-#~ msgid "Layer number where RBG colors is stored as category"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Name of vector map with areas where the points should be imported"
-#~ msgstr "Izejas vektora punktu kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Layer number or name for mask option"
-#~ msgstr "Eksistējošas vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "Do not import every n-th point"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid ""
-#~ "For example, 5 will import 80 percent of points. If not specified, all "
-#~ "points are imported"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid "Decimation"
-#~ msgstr "Vienkāršajā režīmā"
-
-#, fuzzy
-#~ msgid "Import only every n-th point"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid ""
-#~ "For example, 4 will import 25 percent of points. If not specified, all "
-#~ "points are imported"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid "Import only n points"
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Imports only the given number of points"
-#~ msgstr "Nederīgs soļu skaits: %s"
-
-#, fuzzy
-#~ msgid "Invert mask when selecting points"
-#~ msgstr "Ieejošā karte satur līnijas"
-
-#, fuzzy
-#~ msgid "Store only the coordinates"
-#~ msgstr "Sākuma punkta koordinātes"
-
-#, fuzzy
-#~ msgid "Do not add categories to points and do not create attribute table"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Storing generated point IDs as categories in the layer %d"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Scanning %llu points..."
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "Scanning %lu points..."
-#~ msgstr "Rakstu jaunu failu... \n"
-
-#, fuzzy
-#~ msgid "%llu points imported (limit was %llu)"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu points imported"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were not valid"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were outside of the selected area"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were outside of the area specified by mask"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were filtered out by return number"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were filtered out by class number"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were filtered outsite the range for z coordinate"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were skipped at the begging using offset"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%llu input points were skipped by count-based decimation"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu points imported (limit was %d)"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu points imported"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were not valid"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were outside of the selected area"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were outside of the area specified by mask"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were filtered out by return number"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were filtered out by class number"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were filtered outsite the range for z coordinate"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were skipped at the begging using offset"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "%lu input points were skipped by count-based decimation"
-#~ msgstr "%d punkti ielādēti\n"
-
-#, fuzzy
-#~ msgid "The rest of points was ignored"
-#~ msgstr "Vaicājuma koordinātes"
-
-#, fuzzy
-#~ msgid "Vector map profiling tool"
-#~ msgstr "vektora karte <%s> nav atrasta"
-
-#, fuzzy
-#~ msgid "Input filter"
-#~ msgstr "Ieejas fails"
-
-#, fuzzy
-#~ msgid "Coordinates for profiling line nodes"
-#~ msgstr "Vienu koordinātu pāri uz līniju, lūdzu"
-
-#, fuzzy
-#~ msgid "Profiling line"
-#~ msgstr "Izveidot punktus visā garumā ilīniju garumā"
-
-#, fuzzy
-#~ msgid "Buffer (tolerance) for points in map units"
-#~ msgstr "Bufera izmērs kartes vienībās"
-
-#, fuzzy
-#~ msgid "Output formating"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Number of significant digits"
-#~ msgstr "Līniju skaits"
-
-#, fuzzy
-#~ msgid "Use features only from specified layer"
-#~ msgstr "Drukāt saules pozīcijas apraskstu komandrindas skripta stilā"
-
-#, fuzzy
-#~ msgid "Name for profile line and buffer output map"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Profile line and buffer around it will be written"
-#~ msgstr "Izejas karte kurā tiks ierakstīti punkti"
-
-#, fuzzy
-#~ msgid "Do not print column names"
-#~ msgstr "Atslēga (id) kolonas nosaukums"
-
-#, fuzzy
-#~ msgid "Do not print 3D vector data (z values)"
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Profiling line map"
-#~ msgstr "Izveidot punktus visā garumā ilīniju garumā"
-
-#, fuzzy
-#~ msgid "Vector map containing profiling line"
-#~ msgstr "Ieejošā karte satur līnijas"
-
-#, fuzzy
-#~ msgid "Profiling line map layer"
-#~ msgstr "Izveidot punktus visā garumā ilīniju garumā"
-
-#, fuzzy
-#~ msgid "Layer 0 not supported"
-#~ msgstr "Kolonas tips nav atbalstīts"
-
-#, fuzzy
-#~ msgid "<%s> is not a valid vector map name"
-#~ msgstr "izejas līmeņa nosaukums"
-
-#, fuzzy
-#~ msgid "At least profile start and end coordinates are required!"
-#~ msgstr "Vaicājuma koordinātes"
-
-#, fuzzy
-#~ msgid ""
-#~ "No database connection defined for map <%s> layer %d, but WHERE condition "
-#~ "is provided"
-#~ msgstr "Datubāzes konekcija nav definēta"
-
-#, fuzzy
-#~ msgid "No features match Your query"
-#~ msgstr "Vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "Unabale to get attribute data for cat %d"
-#~ msgstr "Nevar iatlasīt datus no tabulas"
-
-#, fuzzy
-#~ msgid "Unable to create 2D raster <%s>"
-#~ msgstr "Rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Unable to create 3D raster <%s>"
-#~ msgstr "Rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Error writing cell (%d,%d,%d) with value %f, nrows = %d"
-#~ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
-
-#, fuzzy
-#~ msgid "Unable to initialize G-submatrix..."
-#~ msgstr "Nevar atrast ieejas karti <%s>\n"
-
-#, fuzzy
-#~ msgid "3D raster"
-#~ msgstr "rastrs"
-
-#, fuzzy
-#~ msgid "Name of input vector points map"
-#~ msgstr "Vektorkartes nosaukums"
-
-#, fuzzy
-#~ msgid "File to write the report"
-#~ msgstr "Nav iespēju atvērt šūnu failu priekš[%s]"
-
-#, fuzzy
-#~ msgid "Name for output 2D/3D raster map"
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Vertical variogram function"
-#~ msgstr "Vertikālais mērogs"
-
-#, fuzzy
-#~ msgid "Attribute column containing input values for interpolation"
-#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
-
-#, fuzzy
-#~ msgid "Number of horizontal lags"
-#~ msgstr "Punktu skaits:"
-
-#, fuzzy
-#~ msgid "Report is being written to %s..."
-#~ msgstr "%d punkti ierakstīti izejas kartē\n"
-
-#, fuzzy
-#~ msgid ""
-#~ "Number of vertical pieces must be at least 1. Default value will be "
-#~ "used..."
-#~ msgstr "Drukājamo kopiju sakits"
-
-#, fuzzy
-#~ msgid "Please set up name of output layer..."
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Coordinates of point no. %d are zeros."
-#~ msgstr "Vienu koordinātu pāri uz līniju, lūdzu"
-
-#, fuzzy
-#~ msgid "Computing %s variogram properties..."
-#~ msgstr "Kalkulējam ēnas no DEM..."
-
-#, fuzzy
-#~ msgid "Anisotropy ratio must be greater than zero..."
-#~ msgstr "2 līmeņiem jābūt norādītiem"
-
-#, fuzzy
-#~ msgid "Error writing file"
-#~ msgstr "Kļūda meiģinot nolasīt dbmscap failu\n"
-
-#, fuzzy
-#~ msgid "Error closing file..."
-#~ msgstr "Kļūda atverot šūnu failu"
-
-#, fuzzy
-#~ msgid "Unable to plot variogram"
-#~ msgstr "Neiespējami atvērt šūnu failu[%s]"
-
-#, fuzzy
-#~ msgid "Memory allocation failed..."
-#~ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
-
-#, fuzzy
-#~ msgid "Interpolating unknown values..."
-#~ msgstr "nevar nolasīt līniju ieejas paaugstinājumu kartē "
-
-#, fuzzy
-#~ msgid "Error writing result into output layer..."
-#~ msgstr "Izejas rastra kartes nosaukums"
-
-#, fuzzy
-#~ msgid "Reading values from attribute column <%s>..."
-#~ msgstr "Nevajag taisīt atribūtu tabulu"
-
-#, fuzzy
-#~ msgid "Reading coordinates..."
-#~ msgstr "Lasa %s ..."
-
-#, fuzzy
-#~ msgid "Error reading input coordinates z..."
-#~ msgstr "Lasa %s ..."
-
-#, fuzzy
-#~ msgid "%d features skipped, only points are accepted"
-#~ msgstr "Importējamais rastra fails"
-
-#, fuzzy
-#~ msgid "Unused points: %d (out of region)"
-#~ msgstr "Drukāt tekošo reģionu pēc platuma/garuma"
-
-#, fuzzy
-#~ msgid "Nothing to scan..."
-#~ msgstr "Nekas nav atrasts.\n"
-
-#, fuzzy
-#~ msgid "Unpacks a raster map packed with r.pack."
-#~ msgstr "Izmantojamās rastra kartes nosaukums priekš <%s>"
-
-#, fuzzy
-#~ msgid "%d duplicate categories in vector"
-#~ msgstr "%d vektorā dubultojas kategorijas\n"
-
-#, fuzzy
-#~ msgid "Buffering failed"
-#~ msgstr "Lasam dig failu... \n"
-
-#, fuzzy
-#~ msgid "Region\n"
-#~ msgstr "Lasam dig failu... \n"
-
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "neiespējami atvērt <%s>"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Konvertē OGR vektorus uz GRASS vektoriem. Pieejamie draiveri:\n"
-
-#, fuzzy
-#~ msgid "No flag given"
-#~ msgstr "Nav norādīta karte"
-
-#, fuzzy
 #~ msgid "Renaming reclass maps"
 #~ msgstr "Pārkodēt rastra kartes."
 
@@ -42960,6 +44048,10 @@ msgstr "Izvades rastra karte ar ezeru"
 #~ msgstr "Izvēlies fontu kurš tiks parādīts lietotāja grafiskajā vidē."
 
 #, fuzzy
+#~ msgid "Text color or \"none\""
+#~ msgstr "Teksta krāsa"
+
+#, fuzzy
 #~ msgid "Color in GRASS format for drawing text"
 #~ msgstr "Krāsa zīmējamajam tekstam"
 
@@ -43209,10 +44301,6 @@ msgstr "Izvades rastra karte ar ezeru"
 #~ msgstr "Izejas rastra kartes nosaukums"
 
 #, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Eksistējošas rastra kartes nosaukums"
-
-#, fuzzy
 #~ msgid "Name of input raster map(s)"
 #~ msgstr "Rastra kartes nosaukums"
 
diff --git a/locale/po/grassmods_pl.po b/locale/po/grassmods_pl.po
index 4b3a485..79453e7 100644
--- a/locale/po/grassmods_pl.po
+++ b/locale/po/grassmods_pl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-07-16 12:26+0100\n"
 "Last-Translator: Milena Nowotarska <do.milenki * gmail.com>\n"
 "Language-Team: Polish <grass-translations at lists.osgeo.org>\n"
@@ -253,6 +253,7 @@ msgstr "MAPSET <%s> nie został znaleziony"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -487,6 +488,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Błąd podczas zamykania pliku ASCII"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -626,29 +632,29 @@ msgstr "Nie można otworzyć źródła danych OGR '%s'"
 msgid "Unable to open database:"
 msgstr "Nie można otworzyć bazy: <%s>"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Połączenie bazy danych nie zdefiniowane"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "BŁĄD: <%s> już istnieje\n"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Nie można utworzyć tabeli: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "MAPSET <%s> nie został znaleziony"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -659,6 +665,11 @@ msgstr "Nie można utworzyć indeksu"
 msgid "Unable grant on table:"
 msgstr "Nie można skopiować tabeli"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Nie można ustawić rozmiaru"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -789,7 +800,7 @@ msgstr "Nie można otworzyć bazy <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -867,17 +878,17 @@ msgstr "nazwa"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Ustawienia"
 
@@ -889,7 +900,7 @@ msgstr "Przebieg %d..."
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "nazwa czcionki"
+msgstr "Nazwa testu"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -912,39 +923,39 @@ msgstr "Wyświetl parametry bieżącego połączenia i wyjdź"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -987,7 +998,7 @@ msgstr "Wyświetl listę wszystkich sterowników bazy danych."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1017,7 +1028,7 @@ msgstr "Nie można opisać tabeli"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1110,10 +1121,10 @@ msgid "Unable to open database <%s>"
 msgstr "Nie można otworzyć bazy <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1299,11 +1310,11 @@ msgstr "nie powiodło się"
 msgid "succeeded"
 msgstr "...próba zakończona powodzeniem."
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Nie można otworzyć pliku <%s> do zapisu"
@@ -1340,10 +1351,10 @@ msgstr ""
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Format"
 
@@ -1352,7 +1363,7 @@ msgstr "Format"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Wyjściowy separator pionowy"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1360,7 +1371,7 @@ msgstr "Wyjściowy separator pionowy"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Nazwa pliku wyjściowego (w razie braku lub \"-\" wyjście do stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Nie uwzględniaj nazw kolumn w wyniku"
 
@@ -1368,7 +1379,7 @@ msgstr "Nie uwzględniaj nazw kolumn w wyniku"
 msgid "Describe query only (don't run it)"
 msgstr "Tylko opisz zapytanie (nie wykonuj go)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Wynik pionowy (zamiast poziomego)"
 
@@ -1417,6 +1428,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Plik zawierający wyrażenia SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignoruj błędy SQL i kontynuuj"
 
@@ -1596,7 +1608,6 @@ msgstr "Obróć wydruk o 90 stopni"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1719,7 +1730,7 @@ msgstr "Nie można załadować danych z tabeli"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1727,15 +1738,15 @@ msgstr "Nie można załadować danych z tabeli"
 msgid "Error in pj_do_proj"
 msgstr "Błąd w pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "Nie można pobrać kluczowych wartości projekcji bieżącej lokacji"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1831,7 +1842,7 @@ msgstr "Nie można utworzyć pliku tymczasowego"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1878,7 +1889,7 @@ msgstr "Nie można pobrać informacji o warstwie dla mapy wektorowej"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1891,26 +1902,27 @@ msgstr "Nie można pobrać informacji o warstwie dla mapy wektorowej"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Nie można otworzyć bazy danych <%s> za pomocą sterownika <%s>"
@@ -1920,7 +1932,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Ten typ kolumny nie jest obługiwany (musi być ciągiem)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2072,13 +2085,13 @@ msgstr "Nie można otworzyć tymczasowego pliku etykiet <%s>"
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2086,8 +2099,8 @@ msgstr "Nie można otworzyć tymczasowego pliku etykiet <%s>"
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2130,10 +2143,11 @@ msgstr "wizualizacja"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2147,13 +2161,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2162,6 +2179,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2177,7 +2195,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2197,11 +2215,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2213,27 +2231,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2251,74 +2269,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "raster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2328,6 +2349,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2343,6 +2365,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2361,6 +2384,7 @@ msgid "vector"
 msgstr "wektor"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2369,15 +2393,16 @@ msgstr "wektor"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2414,7 +2439,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Wyświetl listę wspieranych formatów wyjściowych"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Plik <%s> został utworzony"
@@ -2982,69 +3007,70 @@ msgid "Vector map <%s> not found"
 msgstr "Nie znaleziono mapy wektorowej <%s>"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nie można otworzyć mapy wektorowej <%s>"
@@ -3107,12 +3133,13 @@ msgstr "Brak aktywnych punktów kontrolnych"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3246,7 +3273,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3409,7 +3436,7 @@ msgid "Area:"
 msgstr "Poligon\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Zapisywanie atrybutów ..."
@@ -3424,7 +3451,7 @@ msgstr "Nir można wybrać atrybutów dla pola #%d"
 msgid "No attribute table for layer %d"
 msgstr "Kolumna(y) atrybutów"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3437,15 +3464,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Nie można otworzyć bazy danych <%s> za pomocą sterownika <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Nie można przydzielić uprawnień dla tabeli <%s>"
@@ -3468,6 +3496,7 @@ msgid ""
 msgstr "Obliczanie centroidów dla obszarów..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3476,6 +3505,7 @@ msgid "extract"
 msgstr "wektor do usunięcia"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3486,10 +3516,10 @@ msgstr "Odznacz"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Z"
@@ -3511,12 +3541,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Atrybuty"
 
@@ -3535,39 +3564,45 @@ msgstr "Odwróć selekcję"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3583,7 +3618,10 @@ msgstr "Odwróć selekcję"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3654,7 +3692,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3703,45 +3741,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3784,11 +3823,11 @@ msgstr "Typ kolumny nieobsługiwany"
 msgid "Format <%s> does not support writing"
 msgstr "Pozycja kursora nie jest obsługiwana przez sterownik MySQL"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3940,9 +3979,9 @@ msgid "Name for output file where to save current settings"
 msgstr ""
 "Nazwa wyjściowego pliku zawierającego matrycę błędów i współczynnika kappa"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Wyświetl listę wspieranych formatów i wyjdź"
 
@@ -3964,7 +4003,7 @@ msgstr "wypisz parametry bieżącego połączenia i wyjdź"
 msgid "Print current status in shell script style"
 msgstr "Wyświetl statystyki w stylu skryptu shell"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "-r i -e wzajemnie się wykluczają"
@@ -3972,7 +4011,7 @@ msgstr "-r i -e wzajemnie się wykluczają"
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Należy określić 2 warstwy"
+msgstr "Tekst powinien być wprowadzony lub użyte -c"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -3980,18 +4019,18 @@ msgid "%s= must be specified"
 msgstr "Należy podać 2 warstwy"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Obsługiwane formaty:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4002,48 +4041,48 @@ msgstr "Obsługiwane formaty:\n"
 msgid "network"
 msgstr "wyświetl indeks"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Znajduje najkrótszą trasę w sieci wektorowej."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Typ łuku"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 #, fuzzy
 msgid "Arc layer"
 msgstr "Warstwa zapytania"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Typ łuku"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 #, fuzzy
 msgid "Node layer"
 msgstr "Warstwa zapytania"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 #, fuzzy
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
@@ -4051,22 +4090,23 @@ msgstr ""
 "Nazwa pliku zawierającego procedury graficzne, jeśli brak czyta standardowe "
 "wejście"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4078,10 +4118,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4093,51 +4134,87 @@ msgstr ""
 msgid "Cost"
 msgstr "Koszt"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "Liczba kolumn"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "Maksymalna odległość"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Brak tabeli."
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Warstwa/tabela"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 #, fuzzy
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "%s nie działa w lokacjach o współrzędnych geograficznych"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4146,10 +4223,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4165,8 +4242,8 @@ msgstr "Edytować plik kategorii dla [%s]? "
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4195,22 +4272,22 @@ msgstr "Nie można otworzyć tabeli %s"
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "Edytować plik kategorii dla [%s]? "
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4219,17 +4296,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "Nie można wstawić nowego rekordu: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "Uaktualniono %d błędów"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4240,7 +4317,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4250,7 +4327,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "wektor do usunięcia"
@@ -4303,17 +4380,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Dla punktu #%d nie można wybrać atrybutów"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Wymagany parameter <%s> nie jest ustawiony"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "Raster <%s> już istnieje."
@@ -4620,6 +4697,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Plik zawierający wyrażenia SQL"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4640,12 +4718,15 @@ msgstr "Plik zawierający wyrażenia SQL"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4808,11 +4889,11 @@ msgstr "Warstwa musi być > 0 dla 'where'."
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Połączenie z bazą danych nie zostało zdefiniowane dla warstwy %d"
@@ -4949,9 +5030,9 @@ msgid "Remove existing color table"
 msgstr "Usuń istniejącą paletę kolorów"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr "Usuń"
@@ -5014,7 +5095,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5030,8 +5111,7 @@ msgstr "Tekst powinien być wprowadzony lub użyte -c"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "-r i -e wzajemnie się wykluczają"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5057,6 +5137,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Mapa werktorowa <%s> nie jest 3D"
@@ -5082,7 +5163,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "nie znaleziono mapy rastrowej <%s>"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5091,13 +5172,14 @@ msgstr "Nie można przeczytać tabeli kolorów mapy rastrowej <%s>"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5128,8 +5210,9 @@ msgstr "Wczytywanie obiektów..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5174,7 +5257,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Zaisywanie nowych plików...\n"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Nie można użyć kolumny <%s>"
@@ -5231,6 +5314,7 @@ msgid "Point out of range"
 msgstr "Numer krawędzi poza zakresem"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5239,15 +5323,17 @@ msgstr "Numer krawędzi poza zakresem"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5342,14 +5428,15 @@ msgstr "Wyjściowa mapa rastrowa ukształtowania powierzchni po wypełnieniu"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Wyjście"
 
@@ -5481,7 +5568,7 @@ msgstr "Niewystarczająca ilość pamięci dla az"
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "Nie można utworzyć pliku <%s>"
+msgstr "Nie można utworzyć tabeli: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5544,15 +5631,15 @@ msgstr "Metoda interpolacji która ma być użyta"
 msgid "Input failed"
 msgstr "Wykonanie nie powiodło się"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "%s nie powiodło się"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Zbyt mało wolnej przestrzeni dyskowej -- nie można zapisać plików"
@@ -5596,9 +5683,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Edytować plik kategorii dla [%s]? "
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5627,7 +5714,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Selekcja"
+msgstr "przetwarzanie poligonów..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5659,7 +5746,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:368
 #, fuzzy, c-format
 msgid "Mask raster map [%s] not found"
-msgstr "Nie znaleziono mapy rastrowej 3D <%s>"
+msgstr "nie znaleziono mapy rastrowej 3D <%s>"
 
 #: ../vector/v.vol.rst/user1.c:383
 #, fuzzy
@@ -5706,9 +5793,9 @@ msgstr "Błąd podczas zamykania pliku ASCII"
 msgid "3D raster map <%s> created"
 msgstr "Mapa rastrowa <%s> została utworzona."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5719,86 +5806,126 @@ msgstr "Nie można wstawić nowego wiersza: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "raster do usunięcia"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Plik rastrowy punktów początkowych"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Maksymalna odległość"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr ""
+"\n"
+"\n"
+"  Liczba punktów: %d\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "Niewystarczająca ilość pamięci dla az"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Plik rastrowy punktów początkowych"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Plik rastrowy punktów początkowych"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "raster do usunięcia"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+msgstr[2] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5818,18 +5945,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Import"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "punkt"
@@ -5862,9 +5991,9 @@ msgstr "Nazwa kolumny zawierającej współrzędną y"
 msgid "Name of column containing z coordinate"
 msgstr "Nazwa kolumny zawierającej współrzędną z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "Wyjście 3D"
 
@@ -5911,7 +6040,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Nie można otworzyć kursora wyboru: '%s'"
@@ -5929,7 +6058,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Kopiowanie atrybutów..."
@@ -5956,7 +6085,82 @@ msgstr[0] "Mapa wektorowa punktów końcowych"
 msgstr[1] "Mapa wektorowa punktów końcowych"
 msgstr[2] "Mapa wektorowa punktów końcowych"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+#, fuzzy
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr "Przeprojektuj mapę rastrową z danej lokacji do bieżącej lokacji."
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Wyświetl parametry bieżącego połączenia i wyjdź"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "Dla parametru 'przestrzennego' wymagane są 4 parametry"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Niewłaściwy zakres z"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Nieznany kolor: [%s]"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5979,7 +6183,7 @@ msgstr[2] "Mapa wektorowa punktów końcowych"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5988,7 +6192,7 @@ msgstr[2] "Mapa wektorowa punktów końcowych"
 msgid "statistics"
 msgstr "Statystyka"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6628,8 +6832,8 @@ msgstr "Typ kolumny (%s) nieobsługiwany"
 msgid "Operator '%s' is not supported for type line"
 msgstr "Pozycja kursora nie jest obsługiwana przez sterownik MySQL"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Nie można odczytać mapy wektorowej "
@@ -6689,12 +6893,12 @@ msgid "Breaking lines..."
 msgstr "Obracanie porządku danych..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Usuwanie duplikatów..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr ""
 
@@ -6703,11 +6907,11 @@ msgstr ""
 msgid "Merging lines..."
 msgstr "Buforowanie linii..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Dołączanie wysp ..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Nie można obliczyć centroidu obszaru"
 
@@ -6722,12 +6926,13 @@ msgstr "Odpytywanie mapy wektorowej <%s>..."
 msgid "Attribute not found"
 msgstr "Atrybutu nie znaleziono"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Zapisywanie centroidów ..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Nie można wprowadzić nowego rekordu: '%s'"
@@ -6804,127 +7009,129 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "nie znaleziono mapy wektorowej <%s>"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Metoda próbkowania"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "nazwa wejściowego pliku wektorowego"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Liczba punktów do utworzenia"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Mapa wektorowa punktów początkowych"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Nazwa mapy rastrowej będącej gridem z informacją o kosztach "
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Zapis do mapy ..."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Typ palety kolorów"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Utwórz plik wyjściowy 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Wybieranie obiektów..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Liczba punktów do wyznaczenia"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "Żadna czcionka nie została wybrana "
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Nazwa istniejącego pliku wektorowego"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Nie można utworzyć tabeli: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr ""
 "Startowa mapa wektorowa <%s> nie zawiera żadnych punktów w bieżącym regionie."
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
 "Startowa mapa wektorowa <%s> nie zawiera żadnych punktów w bieżącym regionie."
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Tworzenie punktów..."
 
@@ -6969,7 +7176,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Nazwa istniejącej mapy rastrowej do odpytania"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Nazwa kolumny atrubutów do stworzenia etykiet"
@@ -6983,80 +7190,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Wyświetl średnie wartości zamiast przedziałów"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Kolumna <%s> nie została znaleziona"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Kolumna <%s> nie została znaleziona w tabeli <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Typ kolumny nieobsługiwany"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Wczytywanie obiektów..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Nie można odnależć pliku wejściowego"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "Edytować plik kategorii dla [%s]? "
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "Wczytano %d kategorii z wektora"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d zdublowanych kategorii w wektorze"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "Wczytano %d kategorii z tabeli"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d kategorii z wektora brakuje w tabeli"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "Uaktualniono %d błędów"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "Uaktualniono %d rekordów"
@@ -7064,14 +7269,14 @@ msgstr "Uaktualniono %d rekordów"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "raster, statystyki"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7160,7 +7365,7 @@ msgstr ""
 "Mapy wektorowa <%s> nie znajduje się w mapsecie użytkownika i nie może być "
 "zaktualizowana"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7220,6 +7425,152 @@ msgstr "Brak rekordu dla categorii [%d]"
 msgid "%d records updated"
 msgstr "Uaktualniono %d rekordów"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Połączenie z bazą danych nie zostało zdefiniowane dla warstwy <%d>"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Ten typ kolumny nie jest obługiwany"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Brak rekordu dla cat = %d"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Brak rekordu dla cat = %d"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Kolumna <%s> nie została znaleziona"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Utwórz warstwę wektorową punktów jako punkty 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Konwertuje warstwy wektorowe OGR na wektorowe mapy GRASS."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Numer warstwy (z)"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "Uaktualniono %d błędów"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Liczba warstw (na)"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Liczba warstw (na)"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Liczba warstw (z)"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Kolumna musi to być numeryczna"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Kolumny"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Nazwa kolumny definicji koloru (do użycia z flagą -a)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Nie określono kolumny definicji koloru."
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Nie można odczytać koloru"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Współczynnik skali dla danych z"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Współczynnik skali dla danych z"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Ogranicz import do bieżącego regionu"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Brak tabeli."
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7257,6 +7608,12 @@ msgstr "Błąd w kolumnie definicji koloru (%s), obszar %d z kategorią %d"
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Kolumna <%s> nie została znaleziona"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7286,45 +7643,52 @@ msgstr "Nie można użyć kolumny <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "Żadna czcionka nie została wybrana "
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Przeszło %d z %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Zapis mapy rastrowej..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Tworzenie plików wsparcia dla mapy rastrowej..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Przekonwertowane obszary: %d z %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Przekonwertowane punkty/linie: %d z %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7386,15 +7750,17 @@ msgstr "Wartość rastra (dla use=val)"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Funkcje statystyczne dla wartości rastrowych"
@@ -7435,7 +7801,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Nieznana opcja '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Wczytywanie obszarów..."
 
@@ -7454,11 +7820,16 @@ msgstr "Nie określono kolumny atrybutów"
 msgid "Get area %d failed"
 msgstr "Nie można opisać tabeli"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Importowanie pliku DXF nie powidło się!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr "Obszar bez centroidu ( OK dla wysp)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Centroid obszaru bez kategorii"
 
@@ -7489,11 +7860,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Liczba kolumn"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Kolumny"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7678,47 +8044,53 @@ msgstr "Typ obiektu"
 msgid "Incompatible types"
 msgstr "Nieznany typ"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "Nie można skopiować elementów z mapy wektorowej [%s]"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "Nazwa warstwy która ma być użyta jako HUE"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Nazwa pliku wyjściowego (w razie braku lub \"-\" wyjście do stdout)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Maksymalna odległość"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr ""
@@ -7726,97 +8098,97 @@ msgstr ""
 "\n"
 "  Liczba punktów: %d\n"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr ""
 "\n"
 "Tworzenie nowego pliku wektorowego...\n"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "Edytować plik kategorii dla [%s]? "
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Brak rekordu dla cat = %d"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Cel (przeznaczenie) nieosiągalne\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 #, fuzzy
 msgid "Searching for the shortest cycle..."
 msgstr "poszukiwana najwyższa głębia kolorów (bitów)\n"
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Nie można otworzyć pliku <%s> do zapisu"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "linia"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Podziel sieć izoliniami kosztów."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Koszt dla izolinii"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
@@ -7824,17 +8196,17 @@ msgstr ""
 "\n"
 "  Liczba punktów: %d\n"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Obliczanie średniej klas ..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "Nie można opisać tabeli"
@@ -8042,14 +8414,15 @@ msgstr "Edytować plik kategorii dla [%s]? "
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Nazwa dla pliku wyjściowego"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Jeśli brak lub '-' czyta ze standardowego wejścia"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8073,9 +8446,13 @@ msgstr "Jeśli brak lub '-' czyta ze standardowego wejścia"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8137,7 +8514,7 @@ msgstr "Separator pól (tryb punktowy)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Liczba znaczących cyfr (tylko dane zmiennoprzecinkowe)"
 
@@ -8201,7 +8578,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Nie można pobrać informacji o warstwie dla mapy wektorowej <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8303,9 +8680,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Nie mozna otworzyć pliku wejściowego <%s@%s>."
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Nie można utworzyć indeksu dla tabeli <%s>, klucz <%s>"
@@ -8874,7 +9252,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Warstwa %d"
@@ -8895,7 +9273,7 @@ msgstr "Nie można obliczyć matrycy odwróconej"
 msgid "Resolving conflicts..."
 msgstr "Usuwanie konfliktów..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 msgid "generalization"
 msgstr "generalizacja"
 
@@ -8923,202 +9301,206 @@ msgid "Performs vector based generalization."
 msgstr "wekor, interpolacja"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "wekor, interpolacja"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Liczba punktów interpolacji"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 msgid "Network generalization"
 msgstr "Generalizacja sieci"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "Wartość próbki bitów"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "Parametr wygładzenia"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Parametr wygładzenia"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Parametr napiecia krzywej spline"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Liczba punktów interpolacji"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 msgid "Do not copy attributes"
 msgstr "Nie kopiuj atrybutów"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Nieznana metoda"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Kolumna <%s> nie została znaleziona w tabeli <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Nie można utworzyć mapy wektorowej <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr "Przesunięcie..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "wektor, interpolacja"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Generalizacja (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Rozdzielczość obrazu [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr "zredukowane"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr "zmienione"
 
@@ -9194,8 +9576,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Kolor tekstu"
 
@@ -9208,13 +9590,13 @@ msgstr "Kolor tekstu"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Kolory"
@@ -9414,14 +9796,14 @@ msgstr "poszukiwana najwyższa głębia kolorów (bitów)\n"
 msgid "Cleaning output topology"
 msgstr "Eksportuje linie jako poligony"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Usuwanie duplikatów..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "%5d usuniętych wierzchołków"
@@ -9474,14 +9856,6 @@ msgstr "Odczytywanie punktów..."
 msgid "Constructing 3D hull..."
 msgstr "Konwersja ..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9564,7 +9938,9 @@ msgstr "Liczba punktów interpolacji"
 msgid "Bicubic interpolation"
 msgstr "Liczba punktów interpolacji"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9975,6 +10351,196 @@ msgstr "Błąd podczas odczytywania pliku rastrowego [%s]."
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Nie znaleziono danych punktowych"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d klasy."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Rozłączenie klastrów"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Liczba warstw (mapa wektorowa A)"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Maksymalna odległość"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Minimalna liczba pikseli w klasie"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Rozłączenie klastrów"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Liczba klas musi być < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Rozmiar sąsiedztwa"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Obracanie danych..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr ""
+"\n"
+"Tworzenie nowego pliku wektorowego...\n"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "Rozmiar sąsiedztwa musi być dodatni"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Mapy dla obliczeń między klasowych odległości"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "raster 3D do usunięcia"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Jednostki odległości"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Odchylenie standardowe"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Maksymalna odległość pomiędzy punktami w jednostakch mapy."
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Znajdowanie ścieżki kosztu..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+"\n"
+"Rozdzielczość = %d; okres = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Tworzenie punktów..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Zapis wyjściowej mapy rastrowej %s..."
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Odczytywanie %s ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Nie znaleziono danych punktowych"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "znaleziono %d klas"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "znaleziono %d klas"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10119,26 +10685,26 @@ msgstr "Nie można otworzyć tabeli"
 msgid "Impossible to write to aux table"
 msgstr "Nie można otworzyć tabeli"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Utrzymanie sieci."
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Utrzymanie sieci."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "Nie można otworzyć mapy wektorowej [%s]"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "Nadpisz plik mapy wyjściowej"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "Nazwa wejściowego pliku wektorowego"
@@ -10177,7 +10743,7 @@ msgstr "Nazwa źródłowej mapy wektorowej (A)"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr "Łuki"
 
@@ -10189,14 +10755,14 @@ msgstr "Nazwa wejściowej mapy wektorowej (węzły)"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr "Węzły"
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Operacja do wykonania"
@@ -10225,46 +10791,131 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Znajduje najkrótszą trasę w sieci wektorowej."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Nazwa pliku wyjściowego"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr ""
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Wyjściowa mapa wektorowa punktów końcowych"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Warstwa liniowa"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Nieznana operacja"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Nie mozna otworzyć pliku wejściowego z<%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Nie można wstawić do tabeli: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Nie można otworzyć mapy wektorowej <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Nie można utworzyć mapy wektorowej <%s>"
+
+# kolejność %s ma chyba znaczenie -> zmiana wypacza sens
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Tabela <%s> nie istnieje w bazie danych <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Plik '%s' już istnieje i zostanie nadpisany."
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Plik '%s' już istnieje i zostanie nadpisany."
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Nie można otworzyć bazy danych <%s> za pomocą sterownika <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Nie można utworzyć tabeli <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Nie można skopiować tabeli atrybutów do mapy wektorowej <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Nie można utworzyć tabeli <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10397,7 +11048,7 @@ msgid "Categories already exist in layer %d"
 msgstr "Wczytano %d kategorii z mapy"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "Nie można obliczyć centroid powierzchni"
@@ -10512,7 +11163,7 @@ msgstr "Połączenie z bazą danych nie zostało zdefiniowane dla warstwy <%d>"
 msgid "Key column type is not integer"
 msgstr "Ten typ kolumny nie jest obługiwany"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Nie można odczytać danych z tabeli <%s>"
@@ -11267,7 +11918,7 @@ msgstr "Użyj formatu styl-ESRI (zastosowanie tylko do WKT)"
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "Użyj formatu styl-ESRI (zastosowanie tylko do WKT)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11530,8 +12181,8 @@ msgstr "Lokacja mapy wejściowej"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr "Źródło"
 
@@ -11539,7 +12190,7 @@ msgstr "Źródło"
 msgid "Mapset containing input vector map"
 msgstr "Mapset zawierający wejściową mapę wektorową "
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Wyświetl nazwę aktualnej ramki"
@@ -11549,7 +12200,7 @@ msgstr "Wyświetl nazwę aktualnej ramki"
 msgid "Name of input vector map to re-project"
 msgstr "Nazwa wejściowej mapy rastrowej do zmiany projekcji"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Ścieżka wejściowej lokacji w bazie danych GRASS"
 
@@ -11564,8 +12215,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr "Cel"
 
@@ -11596,17 +12247,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Sprawdzam lokację <%s> w mapsecie <%s>"
@@ -11969,340 +12622,562 @@ msgstr ""
 "Tabela: %s\n"
 "Kolumna z kluczem: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "Konwertuje mapę rastrową do warstwy wektorowej."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Nie korzystaj z topologii."
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "wektor, raster, tabela atrybutów"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Brakuje tabeli"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "Liczba kolumn"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Liczba kolumn różni się"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Nazwy kolumn różnią się"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Typy kolumn różnią się"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "Liczba kolumn"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Nie znaleziono kolumny klucza"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "Mapa wyjściowa nie jest 3D"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Nie można utworzyć tabeli <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Nie można odnaleźć mapy wektorowej [%s]"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Budowanie topologii dla mapy wektorowej <%s>..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 #, fuzzy
 msgid "The header information also may have to be edited"
 msgstr "Informacje o odwzorowaniu nie zostaną zaktualizowane."
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "Uaktualniono %d rekordów"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr ""
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Nie można odczytać wiersza"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Nieznany typ kolumny"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Nie można wstawić nowego rekordu: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Konwertuje warstwy wektorowe OGR na wektorowe mapy GRASS."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Plik wejściowy"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Liczba warstw (na)"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Liczba warstw (z)"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 #, fuzzy
 msgid "Import subregion only"
 msgstr "Wyświetl tylko region mapy rastrowej"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Podregion"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Nazwa lokacji która ma być utworzona"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Zakres filtra dla danych z: (min,max)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Wartości całkowite zostały zaimportowane"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Wartości całkowite zostały zaimportowane"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Wyświetl historię rastra zamiast informacji"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Nazwa wyjściowej wektorowej mapy punktów"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
+msgid "Layer number or name for mask option"
+msgstr "Liczba warstw (mapa wektorowa A)"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Wartości całkowite zostały zaimportowane"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Ozdobnik"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Wartości całkowite zostały zaimportowane"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "Niewłaściwa liczba przedziałów: %s"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Nazwa lokacji która ma być utworzona"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Wyświetl historię rastra zamiast informacji"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Ogranicz import do bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Mapa(y) wektorowa(e) zawierająca(e) punkt(y) startowy(e)"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Rozszerz zasięg lokacji opartej na nowych ustawieniach danych"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Nazwa dla wynikowej mapy rastrowej (override)"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Nie można pobrać jednostek projekcji bieżącej lokacji"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Grupa <%s>  nie istnieje"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Nie można opisać tabeli <%s>"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Nieznany kolor: [%s]"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Numer warstwy (z)"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "Dla parametru 'przestrzennego' wymagane są 4 parametry"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Nie można utworzyć lokacji: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-#, fuzzy
-msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
-msgstr "Przeprojektuj mapę rastrową z danej lokacji do bieżącej lokacji."
-
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Mapa wektorowa <%s> już istnieje i zostanie nadpisana"
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:606
-#, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Nie można otworzyć bazy danych <%s> przez sterownik <%s>"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:736
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Zapiywanie %s ..."
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:738
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%llu input points were filtered out by return number"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "%d input points were not valid"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:759
+#, fuzzy, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:761
+#, fuzzy, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered out by return number"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were filtered out by class number"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "Wyświetl ustawienia bieżącego regionu"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Kolumna(y) atrybutów"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Nie można otworzyć mapy wektorowej <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Nie można otworzyć bazy danych <%s> przez sterownik <%s>"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12311,22 +13186,22 @@ msgid ""
 msgstr ""
 "Tworzy nową warstwę wektorową jako link do warstwy OGR tylko do odczytu."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Warstwa <%s> jest niedostępna"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Nie można usunąć pliku %s\n"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Nie można utworzyć pliku <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Mapa rastrowa <%s> już istnieje"
@@ -12336,12 +13211,12 @@ msgstr "Mapa rastrowa <%s> już istnieje"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Nazwa dla pliku wyjściowego"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Plik rastrowy, który ma być podłączony"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12349,24 +13224,28 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Nazwa dla wynikowej mapy rastrowej (override)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Wyświetl dostępne warstwy i wyjdź"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12416,7 +13295,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Niewłaściwa kolejność"
+msgstr "Liczba kolumn"
 
 #: ../vector/v.delaunay/main.c:88
 #, fuzzy
@@ -12555,143 +13434,143 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr "Zewnętrzne rogi proste"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Bez nasady na końcach polilinii"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Wyświetla atrybuty mapy wektorowej."
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "opcja skalowania wymaga mapy_przewyższenia"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' musi być > 0 dla 'cats'."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Szerokość strefy w jednostkach mapy"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Niedozwolona długość strony "
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Szerokość strefy w jednostkach mapy"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Nie można wybrać danych z tabeli"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Buforowanie poligonów"
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, fuzzy, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Atrybut ma niewłaściwy rozmiar (%.3f) dla kategorii %d."
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Buforowanie poligonów"
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "raster, bufor"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "Budowanie indeksu przestrzennego ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "Obracanie danych..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Eksportuje linie jako poligony"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr "Czyszczenie granic na węzłach"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Obliczanie centroidów dla obszarów..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr "Usuwanie granic..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr "Obliczanie centroidów dla obszarów..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Nie można obliczyć centroid powierzchni"
@@ -12961,23 +13840,27 @@ msgstr "Nazwa dla pliku wyjściowego"
 msgid "%d features written to '%s'."
 msgstr "Edytować plik kategorii dla [%s]? "
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Lokacja: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
@@ -12985,15 +13868,20 @@ msgstr ""
 "\n"
 "  Liczba punktów: %d\n"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Obliczanie średniej klas ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Obliczanie średniej klas ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13050,7 +13938,7 @@ msgstr "Liczba punktów interpolacji"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13724,7 +14612,7 @@ msgstr "W tabeli brakuje rekordów dla kategorii '%d'"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14018,46 +14906,56 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Wyświetla atrybuty mapy wektorowej."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "Warunki WHERE polecenia SQL - bez 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Wyjściowy separator pionowy"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr "Wyświetl zakres wybranych obiektów zamiast atrybutów"
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Region\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Zmień typ elementów geometrycznych."
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "Nie można otworzyć mapy wektorowej [%s]"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Nie można otworzyć kursora wyboru"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Nie można odnaleźć pliku [%s]."
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Nie można wstawić do tabeli: %s"
@@ -14099,45 +14997,49 @@ msgstr "Maksymalna liczba punktów w odcinku "
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
-msgid "Use either length or vertices"
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
 msgstr ""
 
 #: ../vector/v.split/main.c:108
+msgid "Use either length or vertices"
+msgstr ""
+
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Nieznany typ kolumny '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Nie można pobrać jednostek projekcji bieżącej lokacji"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s w %s: %s"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s w %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Liczba klas musi być < 256!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "Nie można zapisać do pliku segmentu dla %s"
@@ -14258,7 +15160,9 @@ msgstr "Kąt obrotu w stopniach (kierunek przeciwny do ruchu wskazówek zegara)"
 msgid "Number of vertex points per grid cell"
 msgstr "Liczba punktów interpolacji"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Typ obiektu (na)"
@@ -14366,10 +15270,13 @@ msgid "Writing out vector columns..."
 msgstr "Zapis do mapy ..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14381,6 +15288,7 @@ msgstr "Nazwa mapy rastrowej"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14548,8 +15456,9 @@ msgstr "Położenie"
 msgid "Offset label in y-direction"
 msgstr "rzesunięcie etykiety w kierunku y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "nazwa czcionki"
 
@@ -14622,6 +15531,130 @@ msgstr "Obracanie danych..."
 msgid "Counting points quadrats..."
 msgstr "Obracanie danych..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Sygnatury które mają być użyte do klasyfikacji"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Nie znaleziono danych punktowych"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Wartości całkowite zostały zaimportowane"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Wartości całkowite zostały zaimportowane"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "Niewłaściwa liczba przedziałów: %s"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Wartość próbki bitów"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Liczba punktów interpolacji"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Liczba punktów interpolacji"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Odchylenie standardowe"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14636,28 +15669,28 @@ msgstr "Informacja o zakresie dla [%s] jest niedostępna"
 msgid "Target location <%s> not found"
 msgstr "nie znaleziono regionu <%s>"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "grupa [%s] załadowana do lokacji[%s], w mapsecie [%s]\n"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "odmowa dostępu"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "nie znaleziono"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -14997,11 +16030,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "Połączenie z bazą danych nie zostało zdefiniowane dla warstwy %d"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Ten typ kolumny nie jest obługiwany"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -15094,321 +16122,324 @@ msgstr[0] "Uaktualniono %d rekordów"
 msgstr[1] "Uaktualniono %d rekordów"
 msgstr[2] "Uaktualniono %d rekordów"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Konwertuje warstwy wektorowe OGR na wektorowe mapy GRASS."
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "nazwa bazy danych"
+msgid "Name of OGR datasource to be imported"
+msgstr "Plik rastrowy który ma być importowany"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 #, fuzzy
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr "Numer warstwy. Jesli -l, wszystkie warstwy są wyświetlane."
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Minimalna liczba pikseli w klasie"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "Wyjściowa mapa rastrowa"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Brak aktywnych punktów kontrolnych"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Tworzy polilinie z linii lub granic."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Nie można obliczyć centroid powierzchni"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Błąd podczas odczytywania pliku rastrowego [%s]."
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Nazwa kolumny z etykietami kategorii rastra"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Liczba kolumn"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Wczytano %d kategorii z mapy"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Wyświetl listę wspieranych formatów i wyjdź"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Wyświetl dostępne warstwy i wyjdź"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Wymuś zapis wartości całkowitoliczbowych"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Nie można pobrać jednostek projekcji bieżącej lokacji"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Wyświetl parametry bieżącego połączenia i wyjdź"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Nie można otworzyć źródła danych <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Pozycja kursora nie jest obsługiwana przez sterownik MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Warstwa <%s> jest niedostępna"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Nie można pobrać informacji o warstwie dla mapy wektorowej <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Kolumna <%s> nie została znaleziona w tabeli <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Szerokość strefy w jednostkach mapy"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Nie można utworzyć mapy wektorowej <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "nie znaleziono regionu <%s>"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Ten typ kolumny nie jest obługiwany"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Kolumna <%s> nie została znaleziona w tabeli <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Typ kolumny nieobsługiwany (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "Edytować plik kategorii dla [%s]? "
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Eksportuje linie jako poligony"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Obracanie danych..."
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Zapiywanie %s ..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Obliczanie centroidów dla obszarów..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15416,117 +16447,117 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Centroid obszaru bez kategorii"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Centroid obszaru bez kategorii"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Rozmiar sąsiedztwa musi być dodatni"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Wykonanie nie powiodło się"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Nie można usunąć tabeli: [%s]"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "Informacje o odwzorowaniu zostały uaktualnione!"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "<%s> jest już bieżącym mapsetem"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15744,6 +16775,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "Połączenie z bazą danych nie zostało zdefiniowane dla warstwy <%d>"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "nie znaleziono mapy rastrowej <%s>"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -15903,19 +16939,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr "Odpytywanie bazy danych..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "Nie można odczytać rekordu"
 
@@ -16096,14 +17132,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Mapa rastrowa <%s> już istnieje i zostanie nadpisana"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Mapa rastrowa <%s> już istnieje"
@@ -16231,7 +17267,12 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Tworzy linie równoległe do podanych linii wektorowych."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
@@ -16239,7 +17280,7 @@ msgstr[0] "Nie można odnależć pliku wejściowego"
 msgstr[1] "Nie można odnależć pliku wejściowego"
 msgstr[2] "Nie można odnależć pliku wejściowego"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16734,19 +17775,24 @@ msgstr "Niewłaściwy znacznik czasu"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16760,6 +17806,7 @@ msgstr "Niewłaściwy znacznik czasu"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16772,7 +17819,7 @@ msgstr "Niewłaściwy znacznik czasu"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -16932,6 +17979,7 @@ msgid "Unable to map image file"
 msgstr ""
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -16949,14 +17997,14 @@ msgstr ""
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16994,6 +18042,55 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Wyświetla podziałkę liniową na monitorze."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Utwórz mapset jeśli nie istnieje"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Usuń wszystkie ramki i wyczyść monitor"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "wypisz parametry bieżącego połączenia i wyjdź"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Wyświetl parametry bieżącego połączenia i wyjdź"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr "Lokacja jako procent współrzędnych okna (0,0 to dolny lewy róg)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17014,7 +18111,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17027,7 +18124,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17101,21 +18198,26 @@ msgstr ""
 msgid ""
 "Uploads space time raster dataset values at positions of vector points to "
 "the table."
-msgstr "Aktualizuj statystyki mapy rastrowej"
+msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17130,6 +18232,7 @@ msgstr "Aktualizuj statystyki mapy rastrowej"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17225,6 +18328,93 @@ msgstr ""
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Nazwa wejściowej mapy rastrowej 3D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Liczba klas do zdefiniowania"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Nie można zamknąć mapy wejściowej "
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17362,7 +18552,7 @@ msgstr "Tworzy pustą bazę danych."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17376,8 +18566,8 @@ msgid "rename"
 msgstr "nazwa"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17387,9 +18577,9 @@ msgid "input"
 msgstr "Wejście"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17404,6 +18594,77 @@ msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr ""
 "Przebudowuje topologię dla wszystkich map wektorowych w bieżącym mapsecie."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "Tworzy mapę wektorową izolinii na podstawie mapy rastrowej"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Kontrast"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Cięcie (interwał) izolinii"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Lista poziomów izolinii"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Minimalny poziom izolinii"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Maksymalny poziom izolinii"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Minimalna liczba punktów budujących izolinię (0 = bez ograniczenia)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Nie można zamknąć mapy wejściowej "
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Nie twórz tabeli atrubutów."
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17412,7 +18673,7 @@ msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17469,8 +18730,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17582,74 +18844,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Nazwa wejściowej mapy rastrowej 3D"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Nazwa wyjściowego pliku rastrowego"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Nazwa wyjściowego pliku rastrowego"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17684,47 +18915,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Nazwa pliku bazy danych"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Nazwa wejściowej mapy rastrowej"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Liczba klas do zdefiniowania"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Nie można zamknąć mapy wejściowej "
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17823,8 +19037,8 @@ msgstr "Mnożnik"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Nazwa dla pliku wyjściowego"
+msgid "Name for output image (or text file for -t)"
+msgstr "Nazwa wyjściowego pliku (bez rozszerzenia)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17841,6 +19055,53 @@ msgstr "Użyj współrzędnych mapy zamiast X, Y, Z"
 msgid "Use gnuplot for display"
 msgstr "Tekst który ma być wyświetlony"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "\"world file\" dla pliku wyjściowego"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Lista wartosci oddzielonych przecinkami"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Nazwa wyjściowego pliku raportu"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Tworzy pustą bazę danych."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Liczba klas do zdefiniowania"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17872,32 +19133,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Rozszerz zasięg lokacji opartej na nowych ustawieniach danych"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Nie można pobrać jednostek projekcji bieżącej lokacji"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18086,6 +19325,20 @@ msgstr "Liczba kafli powinna nakładać się we wszystkich kierunkach"
 msgid "Output field separator"
 msgstr "Wyjściowy separator pól"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Wyświetla mapę rastrową i jej legendę w oknie graficznym"
@@ -18186,8 +19439,15 @@ msgstr "Tworzy pustą bazę danych."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Nazwa pliku bazy danych"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "Nazwa mapy rastrowej"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Nazwa istniejącej mapy rastrowej"
@@ -18197,7 +19457,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18206,15 +19466,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Nazwa pliku bazy danych"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18263,7 +19523,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Wymaż zawartość aktywnej ramki podanym kolorem"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Nazwa dla pliku wyjściowego"
 
@@ -18343,16 +19603,27 @@ msgstr "Nazwa wejściowego pliku DXF"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Nazwa dla wynikowej mapy rastrowej (override)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18430,12 +19701,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18491,7 +19769,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Nazwa wejściowej mapy rastrowej"
+msgstr "Nazwa następnej mapy rastrowej"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18564,13 +19842,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18580,12 +19857,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "Skanuj plik danych w poszukiwaniu zakresu i wyjdź"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "W trybie skanowania, wyświetl informacje w stylu skryptu shell"
 
@@ -18600,7 +19877,7 @@ msgid "ASCII file containing input data"
 msgstr "Plik ASCII zawierający dane wejściowe (lub \"-\" aby wczytać z stdin)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Funkcje statystyczne dla wartości rastrowych"
 
@@ -18608,14 +19885,14 @@ msgstr "Funkcje statystyczne dla wartości rastrowych"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Statystyka"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Sposób zapisu wynikowej mapy rastrowej"
 
@@ -18657,17 +19934,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Współczynnik skali dla danych z"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Procent mapy przechowywanej w pamięci"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "pth percentyl wartości"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18710,19 +19987,15 @@ msgid ""
 "on the fly."
 msgstr "Konwertuje warstwy wektorowe OGR na wektorowe mapy GRASS."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Plik rastrowy który ma być importowany"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Wyjściowa mapa wektorowa błędów"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Wyrównaj bieżący region do mapy wejściowej"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18824,7 +20097,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -18914,24 +20187,18 @@ msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Liczba klas do zdefiniowania"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Nazwa bazoewj mapy rastrowej"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Nie można zamknąć mapy wejściowej "
@@ -19048,17 +20315,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Liczba punktów interpolacji"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19066,10 +20337,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19183,78 +20450,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Nazwa rozszerzenia do zainstalowania/odinstalowania"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Wyświetl dostępne moduły w repozytorium GRASS Addons SVN"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Wyświetl dostępne warstwy i wyjdź"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Wyświetl dostępne warstwy i wyjdź"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "wizualizacja"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Tabele systemowe zamiast tabel użytkownika"
@@ -19370,10 +20653,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19430,6 +20709,56 @@ msgstr ""
 msgid "Test name"
 msgstr "Nazwa testu"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Nazwa kolumny atrubutów do stworzenia etykiet"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Wygładzaj brzegi obiektów powierzchniowych"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Zapis do mapy ..."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr "Wyświetl listę wspieranych formatów wyjściowych"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Nie korzystaj z topologii."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19500,6 +20829,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "typ danych"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "flaga z działa tylko dla punktów"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19671,20 +21011,26 @@ msgid "Description of the space time dataset"
 msgstr "Nazwa pliku bazy danych"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nazwa pliku bazy danych"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19728,13 +21074,13 @@ msgstr "raster, transformacja kolorów"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Numer warstwy"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19818,7 +21164,7 @@ msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 msgid "Neighborhood size"
 msgstr "Rozmiar sąsiedztwa"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Liczba punktów interpolacji"
@@ -19923,24 +21269,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Rozdzielczość mapy wyjściowej"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Tutuł wyjściowej mapy rastrowej"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadane"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Dobra rozdzielczość"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Opcjonalnie wyświetl raster"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Nie wykonuj optymalizacji poprzez przycięcie do zasięgu regionu"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Współrzędne mapy"
@@ -20002,17 +21365,37 @@ msgstr "Stara i nowa nazwa kolumny (stara,nowa)"
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "Kolumny"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Nazwa mapy wektorowej do edycji"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Kolumny"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Nazwa kolumny atrubutów do stworzenia etykiet"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr "Maklsymalny zasięg zapytania w jednostkach mapy"
 
@@ -20101,6 +21484,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20114,11 +21498,15 @@ msgid "Sill value"
 msgstr "%s: niewłaściwa wartość"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20230,28 +21618,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "oblicza statystyki z mapy rastrowej GRASS"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "raster, serie"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Tworzy pustą bazę danych."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -20291,7 +21674,7 @@ msgstr ""
 "komórkę."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20305,7 +21688,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Promień bufora w jednostkach rastra"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Wratości metryczne"
 
@@ -20323,12 +21706,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Liczba punktów interpolacji"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20354,7 +21737,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "Zwiększenie rozdzielczości rastra z użyciem interpolacji. "
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20381,6 +21764,16 @@ msgstr "Parametr wygładzenia krzywej spline"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Zwiększenie rozdzielczości rastra z użyciem interpolacji. "
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Lokacja: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20391,20 +21784,11 @@ msgstr "Umożliwia połączenie tabeli do mapy wektorowej."
 msgid "Vector map to which to join other table"
 msgstr "Nazwa mapy rastrowej z której kopiujemy paletę kolorów"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Liczba warstw (na)"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "Kolumny"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20432,17 +21816,17 @@ msgstr "Liczba linii legendy"
 msgid "Imports space time raster dataset."
 msgstr "Aktualizuj statystyki mapy rastrowej"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Wyrównaj bieżący region do mapy wejściowej"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Mapa rastrowa <%s> już istnieje"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20518,14 +21902,17 @@ msgstr "Nie znaleziono mapy rastrowej 3D <%s>"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20556,11 +21943,11 @@ msgstr "Nie można przydzielić pamięci dla ciągu znaków"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Nie można odczytać zakresu danych mapy rastrowej 3D <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Błąd podczas odczytywania pliku historii"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20568,8 +21955,8 @@ msgstr "Nie można zamknąć mapy rastrowej 3D <%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Błąd zapisu danych"
 
@@ -20621,6 +22008,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Nie można utworzyć pliku <%s>"
@@ -20772,9 +22160,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Kolor granicy"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20803,7 +22192,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Nie można utworzyć i rozwiązać układu równań liniowych"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Nie można utworzyć mapy rastrowej 3D <%s>"
@@ -20869,6 +22261,142 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Raster map %i Filename: %s już istnieje i zostanie nadpisana!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Wybieranie obiektów..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Podaj 3 mapy rastrowe 3D RGB"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Nie znaleziono mapy wektorowej <%s>"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Obliczanie kierunków spływu..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Mapa rastrowa w której mają być wypełnione zera"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nazwa mapy wektorowej do edycji"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Nazwa mapy rastrowej która ma być użyta jako maska"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s w %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Liczba punktów interpolacji"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Domyślny sterownik nie jest ustawiony"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "wektor, interpolacja"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Nie określono mapy rastrowej"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Nie ma ustawionej domyślnej bazy danych"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Maksymalna liczba powtórzeń"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Maksymalna liczba powtórzeń"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Liczba kafli powinna nakładać się we wszystkich kierunkach"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Nie można opisać tabeli <%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Błąd podczas czytania danych"
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr "Obliczenia statystyk dla map rastrowych 3D."
@@ -21003,11 +22531,11 @@ msgstr "Nie mozna zamknąć pliku ASCII"
 msgid "3D raster map for which to modify null values"
 msgstr "Mapa rastrowa 3D, dla której mają być zmodyfikowane wartości NULL"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Lista wartości do ustawienia jako NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Wartość która ma zastąpić NULL"
 
@@ -21031,7 +22559,7 @@ msgstr "modifyNull: błąd podczas flush wszystkich kafelków"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: błąd podczas zamykania pliku tymczasowego"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "wektor, metadane"
@@ -21040,6 +22568,83 @@ msgstr "wektor, metadane"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Utwórz plik bitmapy wartości NULL 3D"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Import pliku ASCII z wielobokami, liniami lub punktami do mapy rastrowej."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Plik rastrowy punktów początkowych"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Liczba punktów interpolacji"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "nie znaleziono mapy rastrowej 3D <%s>"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Zapis do mapy ..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Mapa rastrowa 3D, dla której mają być zmodyfikowane wartości NULL"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Zapis do mapy ..."
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "wekor, interpolacja"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Nie można utworzyć pliku tymczasowego"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21097,13 +22702,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Wynikowy zakres danych"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, fuzzy, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Plik koloru dla [%s] nie jest dostępny"
@@ -21159,7 +22764,7 @@ msgstr "Błąd podczas czytania danych"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Odczyt danych... (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Błąd podczas zamykania mapy rastrowej 3D"
@@ -21537,7 +23142,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "Błędne wartości mapy rastrowej 3D! Powinny wynosić 0-255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21547,7 +23152,7 @@ msgstr "Nieznana metoda <%s>"
 msgid "Aggregate operation"
 msgstr "Operacja agregacji"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21584,6 +23189,37 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Nie można wyznaczyć stref buforowych dla rastra."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "promieniowanie"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "Łączy warstwy red, green i blue mapy w jedną rastrową kompozycję mapy."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Nazwa wyjściowej mapy rastrowej"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Nie można ulokować pamięci"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Zapisywanie nowej mapy rastrowej..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -21922,38 +23558,38 @@ msgstr "Wyświetl ustawienia bieżącego regionu (styl skryptu powłoki)"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22251,13 +23887,13 @@ msgid "Unknown operation '%s'"
 msgstr "Rozłączenie klastrów"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr "zignorowany\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Lokacja <%s> została stworzona"
@@ -22329,8 +23965,8 @@ msgstr "%s=%s,%s: pliki są identyczne, nie jest wymagana kopia\n"
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "BŁĄD: <%s> już istnieje\n"
+msgid "<%s> already exists. File not copied."
+msgstr "BŁĄD: <%s> już istnieje w mapsecie <%s>\n"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22448,8 +24084,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr "Zmodyfikuj"
 
@@ -22711,9 +24347,9 @@ msgstr "Lista warstw do importu"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "Klucz"
 
@@ -22727,15 +24363,15 @@ msgstr "Klucz wyszukiwania nazw map (domyślnie: każdy)"
 msgid "File name exclusion pattern (default: none)"
 msgstr "Klucz zawężający nazwy map (domyślnie: żaden)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "Użyj podstawowych wyrażeń regularnych zamiast symboli wieloznacznych"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "Użyj rozszerzonych wyrażeń regularnych zamiast symboli wieloznacznych"
 
@@ -22745,7 +24381,7 @@ msgid "Remove base raster maps"
 msgstr "Wierzchnia mapa rastrowa"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Nie można otworzyć pliku wejściowego <%s>."
@@ -22792,7 +24428,7 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
@@ -22800,70 +24436,60 @@ msgstr ""
 "Wyszukuje mapy w formatach wskazanych przez użytkownika oraz nazwach "
 "przefiltrowanych według zadanego klucza"
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "Klucz wyszukiwania nazw map (domyślnie: każdy)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "Klucz zawężający nazwy map (domyślnie: żaden)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Nazwa mapsetu (domyślnie: bieżący)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Nazwa mapsetu (domyślnie: bieżący)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Ustaw bieżący region z zapisanego regionu"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "Wyświetl rodzaje danych"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr "Wyświetl pełne nazwy map (wraz z mapsetem)"
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "Wyświetl w formacie przyjaznym dla użytkownika"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "Rozszerzona lista (podaje również nazwy map)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "-r i -e wzajemnie się wykluczają"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "-r i -e wzajemnie się wykluczają"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Grupa <%s>  nie istnieje"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Nie można otworzyć mapy wektorowej <%s> na oziomie topologicznym %d"
@@ -23075,50 +24701,50 @@ msgstr "Nie można zaktualizować bieżącego regionu"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Niewłaściwe dane wejściowe <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "Nie można pobrać informacji o projekcji bieżącej lokacji"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Nie można pobrać jednostek projekcji bieżącej lokacji"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Nie można zaktualizować parametrów projekcji lat/long"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Błąd w pj_do_proj (projekcja wejściowej pary współrzędnych"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23126,7 +24752,7 @@ msgstr ""
 "Utworzenie projekcji WGS84 nie było możliwe, lokacja nie posiada parametrów "
 "transformacji układu. Spróbuj uruchomić g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23343,38 +24969,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "Kolumna <%s> nie została znaleziona"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Plik rastrowy który ma być importowany"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s> jest teraz domyślnym GUI"
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23690,10 +25337,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Mój pierwszy moduł wektorowy"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr ""
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23865,7 +25508,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Procent wykonania ..."
 
@@ -24291,7 +25934,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Nie można pobrać kluczowych wartości projekcji bieżącej lokacji"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24483,153 +26126,153 @@ msgstr "rozdzielczość pozioma=%f"
 msgid "Writing new raster map..."
 msgstr "Zapisywanie nowej mapy rastrowej..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 "Zmienia projekcję mapy rastrowej z jednej lokacji do projekcji bieżącej "
 "lokacji."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr "Lokacja zawierająca wejściową mapę rastrową"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr "Mapset zawierający wejściową mapę rastrową "
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Nazwa wejściowej mapy rastrowej do zmiany projekcji"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Nazwa dla wynikowej mapy rastrowej (override)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Rozdzielczość mapy wyjściowej"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "wypisz parametry bieżącego połączenia i wyjdź"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr ""
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "Nie można pobrać informacji o odwzorowaniu mapy wyjściowej"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "Nie można pobrać jednostek odwzorowania mapy wyjściowej"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "Nie można pobrać kluczowych wartości projekcji bieżącej lokacji"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Plik wektorowy [%s] nie jest dostępny"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "Nie można pobrać informacji o projekcji bieżącej lokacji"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "Nie można pobrać jednostek projekcji bieżącej lokacji"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "Nie można pobrać kluczowych wartości projekcji bieżącej lokacji"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Wejście:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Kolumny: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Wiersze: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "północ: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "południe: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "zachód: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "wschód: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Wyjście:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Przetwarzanie ..."
 
@@ -24686,12 +26329,6 @@ msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 "Pozwala na tworzenie i/lub modyfikację plików wsparcia dla map rastrowych."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Tutuł wyjściowej mapy rastrowej"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Użyj tekstu jako jednostek danych mapy"
@@ -24720,22 +26357,22 @@ msgstr "Usuwanie pliku null "
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Mapa rastrowa <%s> nie została znaleziona w bieżącym mapsecie"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] jest przeklasyfikowaniem innej mapy. Proces zakończony."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Zapisywanie nowego pliku null dla [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Usuwanie pliku null dla [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Wykonano."
 
@@ -25503,7 +27140,7 @@ msgstr "wartość 'nsteps' musi być większa niż zero; i < lub = 255"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s Nie można otworzyć %s"
@@ -25707,8 +27344,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Nie można odczytać pliku kategorii mapy rastrowej <%s@%s>"
@@ -25799,12 +27436,12 @@ msgstr "Nie mozna otworzyć pliku wejściowego z<%s>"
 msgid "Can't get cell header"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -25993,10 +27630,6 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "Liczba linii legendy"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Zakres filtra dla danych z: (min,max)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -26004,7 +27637,7 @@ msgstr "Zakres filtra dla danych z: (min,max)"
 msgid "Advanced Input"
 msgstr "Zaawansowane"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Współczynnik skali dla danych z"
 
@@ -26031,7 +27664,7 @@ msgstr "Współczynnik skali dla danych z"
 msgid "Please specify a reasonable column number."
 msgstr "Wprowadź właściwy numer kolumny."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "Niewłaściwy zakres z"
 
@@ -26040,15 +27673,15 @@ msgstr "Niewłaściwy zakres z"
 msgid "Invalid vrange"
 msgstr "Niewłaściwy zakres z"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26070,7 +27703,7 @@ msgid "Reading input data..."
 msgstr "Odczytywanie %s ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Przebieg #%d (z %d)..."
@@ -26113,16 +27746,16 @@ msgstr "Nie mozna otworzyć pliku wejściowego <%s@%s>."
 msgid "Writing to output raster map..."
 msgstr "Zapis wyjściowej mapy rastrowej %s..."
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "%lu punktów znalezionych w regione."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Skanowanie danych..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Zakres:     min         max\n"
@@ -26275,11 +27908,6 @@ msgstr "Nazwa wyjściowej mapy rastrowej"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "format GIS do zapisania (zobacz także flaga -l)"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "typ danych"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -26827,103 +28455,108 @@ msgstr "Niedozwolona współrzędna Y <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "UWAGA: zignorowano punkty poza regionem: %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Zarządzanie wartościami NULL na mapach rastrowych."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Mapa rastrowa 3D, dla której mają być zmodyfikowane wartości NULL"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "Sprawdź"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Mapy rastrowa <%s> nie została znaleziona"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "Niedozwolona wartość dla współczynnika skalowego."
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Plik '%s' już istnieje i zostanie nadpisany."
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "%s - nie można otworzyć mapy rastrowej"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "%s - nie można otworzyć mapy rastrowej"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "Mapa rastrowa punktów początkowych"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Zapisywanie nowego pliku null dla [%s]... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Mapy rastrowa <%s> została zmodyfikowana."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Usuwanie pliku null dla [%s]...\n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: niewłaściwa wartość"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: niewłaściwa wartość"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Zapisywanie mapy rastrowej <%s>"
@@ -27254,7 +28887,7 @@ msgstr "Nazwa pliku wejściowego; lub \"-\" aby wczytać z stdin"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Typ obiektu (na)"
+msgstr "Tytuł wyjściowej mapy rastrowej"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27339,89 +28972,178 @@ msgstr "Konwersja..."
 msgid "File <%s> created"
 msgstr "Plik <%s> został utworzony"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Import pliku ASCII z wielobokami, liniami lub punktami do mapy rastrowej."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Plik zawierający wyrażenia SQL"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Zakres filtra dla danych z: (min,max)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Współczynnik skali dla danych z"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Tytuł wyjściowej mapy rastrowej"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Ustaw region aby dopasować do mapy rastrowej"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Grupa <%s>  nie istnieje"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Nieznany kolor: [%s]"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Niewłaściwa mapa %s"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "Wczytywanie danych..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Nie można otworzyć pliku wyjściowego <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Zapis do mapy ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu punktów znalezionych w regione."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Nie mozna otworzyć pliku [%s] do odczytu"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 "Tworzy warstwę mapy rastrowej obrazującą odległość do najbliższego obiektu."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Nazwa wynikowej mapy odległości"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Nazwa dla wynikowej mapy rastrowej "
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Maksymalna odległość pomiędzy punktami w jednostakch mapy."
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Jednostki odległości"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "Należy określić 2 warstwy"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Nieznana wartość metryczna: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Maksymalna odległość pomiędzy punktami w jednostakch mapy."
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Nie można utworzyć pliku tymczasowego  <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27558,7 +29280,7 @@ msgstr "[%s]: Nie ma takiego koloru"
 msgid "Converting <%s>..."
 msgstr "Konwersja <%s>..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "Nieodpowiedni typ <%s> mapy rastrowej"
@@ -27666,7 +29388,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Wyświetl ustawienia bieżącego regionu"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28257,7 +29979,7 @@ msgstr "[%s]: Nie ma takiego koloru"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28700,7 +30422,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Wyświetl statystyki w stylu skryptu shell"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28723,11 +30445,6 @@ msgstr "Przebieg %d..."
 msgid "Unable to write to temp file"
 msgstr "Nie można zapisać pliku tymczasowego"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Tworzenie punktów..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -28846,7 +30563,7 @@ msgid "Writing output raster map..."
 msgstr "Zapis wyjściowej mapy rastrowej %s..."
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -28857,43 +30574,43 @@ msgstr "Zapisywanie mapy rastrowej <%s>"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Tworzy mapę rastrową podzlewni."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "raster, serie"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Nazwa dla wynikowej mapy rastrowej "
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Współrzędne E i N punktu(ów) początkowego(wych)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Niedozwolona współrzędna E <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Niedozwolona współrzędna N <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "UWAGA: zignorowano punkty poza regionem: %.4f,%.4f"
@@ -28995,22 +30712,22 @@ msgid "Invalid map type"
 msgstr "Niewłaściwa mapa %s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -29118,23 +30835,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29143,8 +30860,8 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29640,197 +31357,202 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Wejście"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Nazwa wejściowej mapy rastrowej"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Mapa rastrowa zawierająca wartości użyte dla długości strzałek"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Nazwa wejściowej mapy rastrowej"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Nazwa istniejącej mapy rastrowej zawierającej powierzchnię terenu"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Minimalna liczba pikseli w klasie"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Szerokość strefy w jednostkach mapy"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr ""
 "Liczba komórek którymi część pokrywa się z innymi we wszystkich kierunkach"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Ustawianie okna graficznego"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej ekspozycji terenu"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej spadku"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Nazwa wyjściowej mapy rastrowej spadku"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "Rozmiar sąsiedztwa musi być dodatni"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Ten typ kolumny nie jest obsługiwany"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Podproces zawiódł z kodem wyjścia %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -29838,23 +31560,23 @@ msgstr[0] ""
 msgstr[1] ""
 msgstr[2] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -29862,20 +31584,30 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Oblicza biny"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Oblicza biny"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Oblicza biny"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -29905,32 +31637,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "raster, ponowne próbkowanie"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 "Próbkuje warstwę mapy rastrowej do grubszej siatki z użyciem agregacji."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Metoda agregacji"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Nie można odczytać palety kolorów dla %s"
@@ -30332,7 +32064,7 @@ msgstr ""
 "Nie można utworzyć palety kolorów szarości (grey.eq) dla mapy z danymi "
 "zmiennoprzecinkowymi"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - kolor nieznany"
@@ -30718,7 +32450,7 @@ msgid ""
 msgstr "oblicza statystyki z mapy rastrowej GRASS"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30733,11 +32465,25 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Dla map wyjściowych 2D użyj takiej samej rozdzielczości jak w mapach "
+"wejściowych 3D niezależnie od ustawień regionu"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "-r i -e wzajemnie się wykluczają"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31026,22 +32772,22 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "Nie można wstawić do tabeli: %s"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, fuzzy, c-format
 msgid "Pass number %d"
 msgstr "Liczba warstw"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
@@ -31049,12 +32795,12 @@ msgstr[0] "Zaetykietowano %d linii."
 msgstr[1] "Zaetykietowano %d linii."
 msgstr[2] "Zaetykietowano %d linii."
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 #, fuzzy
 msgid "Thinning completed successfully."
 msgstr "Transformacja zakończona z sukcesem."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -31346,32 +33092,12 @@ msgstr "Kontrast"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "Tworzy mapę wektorową izolinii na podstawie mapy rastrowej"
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Cięcie (interwał) izolinii"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Lista poziomów izolinii"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Lista poziomów izolinii"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Minimalny poziom izolinii"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Maksymalny poziom izolinii"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Minimalna liczba punktów budujących izolinię (0 = bez ograniczenia)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -31963,54 +33689,55 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Nie można utworzyć mapy rastrowej %s"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 msgid "Raster map calculator."
 msgstr "Kalkulator map rastrowych."
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Wartość próbki bitów"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Wartość próbki bitów"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Plik zawierający reguły klasyfikacji"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Rozdzielczość"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Zapis do mapy ..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "-r i -e wzajemnie się wykluczają"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "raster"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Nieznany typ: %d"
@@ -32060,80 +33787,80 @@ msgstr ""
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Nie można btree utworzyć mapy rastrowej <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Niewłaściwa mapa %s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Nie można zamknąć mapy rastrowej <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Nie można zamknąć wyjściowej mapy rastrowej"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -32316,22 +34043,22 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 #, fuzzy
 msgid "Location PROJ_INFO is:\n"
 msgstr "Lokacja: %s\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32371,14 +34098,6 @@ msgstr ""
 msgid "Band to select (default is all bands)"
 msgstr "Zaznacz pasmo (domyślnie: wszystkie pasma)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadane"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr "Odbij poziomo"
@@ -32401,7 +34120,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Tekst powinien być wprowadzony lub użyte -c"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Nie można zaktualizować bieżącego regionu"
@@ -32423,7 +34142,7 @@ msgstr "Plik '%s' już istnieje i zostanie nadpisany."
 msgid "Reading band %d of %d..."
 msgstr "Odczytywanie %s ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Mapa rastrowa [%s] nie istnieje"
@@ -32493,196 +34212,216 @@ msgstr "Tworzenie plików wsparcia dla %s"
 msgid "Link to raster map <%s> created."
 msgstr "Mapa rastrowa <%s> już istnieje"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Import binarnego pliku rastrowego do warstwy mapy rastrowej GRASS."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Plik rastrowy który ma być importowany"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Zaznacz pasmo (domyślnie: wszystkie pasma)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Nazwa docelowej lokacji obrazu"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 "Nazwa lokacji z której ma być odczytana projekcja dla transformacji GCP"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Nie można odczytać wiersza %d mapy rastrowej"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Nazwa wejściowej rastrowej mapy wysokości [metry]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Nie można opisać tabeli <%s>"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Zachowaj numery pasm zamiast używać nazw kolorów pasm"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Wyświetl tabele i zakończ"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Liczba podzakresu musi być >= 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Nie można otworzyć źródła danych <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr ""
 "\n"
 "Tworzenie nowego pliku wektorowego...\n"
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Nie można otworzyć pliku sygnatury."
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Nie można odczytać wiersza %d mapy rastrowej"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Błąd w odczycie pliku cats dla <%s>."
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "Nazwa istniejącego pliku wektorowego"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, fuzzy, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "Wyjściowe parametry projekcji (w stylu PROJ.4)"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "Wyjściowe parametry projekcji (w stylu PROJ.4)"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, fuzzy, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Błąd w pj_do_proj (projekcja wejściowej pary współrzędnych"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "Nie można przełożyć kluczowych wartości projekcji punktów GCPs"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "Nie można pobrać informacji o projekcji  lokacji docelowej"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Nie można pobrać jednostek projekcji docelowej lokacji"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "Nie można pobrać kluczowych wartości projekcji docelowej lokacji"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Zapisywanie mapy rastrowej <%s>"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Nie mozna otworzyć pliku wejściowego <%s@%s>."
@@ -32809,7 +34548,7 @@ msgstr "Wczytywanie mapy hipsometrycznej:"
 msgid "Writing topographic index map..."
 msgstr "Ustawianie okna graficznego"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Liczba punktów do wyznaczenia"
@@ -32907,12 +34646,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Wyświetl"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -32921,23 +34660,23 @@ msgstr ""
 "jednej (lub więcej) warstw(y) do wypełnienia obszarów \"no data\" w innej "
 "warstwie mapy."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Nazwy map rastrowych do złatania ('mozaikowania') ze sobą"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Nazwa dla wynikowego pliku rastrowego"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Uzyj zera (0) dla przeźroczystości zamiast NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Minimalna liczba wejściowych map rastrowych to dwa."
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "tworzenie plików wsparcia (support files) dla mapy rastrowej %s"
@@ -33011,38 +34750,6 @@ msgstr "raster, wysokość"
 msgid "Converts a raster map into a vector map."
 msgstr "Konwertuje mapę rastrową do warstwy wektorowej."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Nazwa kolumny atrubutów do stworzenia etykiet"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Wygładzaj brzegi obiektów powierzchniowych"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Zapis do mapy ..."
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr "Wyświetl listę wspieranych formatów wyjściowych"
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Nie korzystaj z topologii."
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -33554,10 +35261,6 @@ msgstr ""
 msgid "Advanced"
 msgstr "Zaawansowane"
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr ""
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -33847,7 +35550,7 @@ msgstr "Generuj przypadkowe powierzchnie z zależnościami przestrzennymi."
 msgid "Name for output raster map(s)"
 msgstr "Nazwa wyjściowej mapy rastrowej"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Jednostki odległości"
@@ -33873,7 +35576,7 @@ msgstr "Maksymalna liczba powtórzeń"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Zapisywanie mapy rastrowej <%s>"
@@ -34209,7 +35912,7 @@ msgstr "Oblicza dominance's diversity index z mapy rastrowej GRASS"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34235,7 +35938,7 @@ msgstr "Wyświetl"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Plik konfiguracyjny"
@@ -34254,7 +35957,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Wyświetl"
@@ -34400,7 +36103,7 @@ msgstr "Nie można utworzyć lseek"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Oblicza wskaźnik zróżnicowania Shannon'a z mapy rastrowej"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "oblicza statystyki z mapy rastrowej GRASS"
@@ -34575,11 +36278,11 @@ msgstr "północ=%f"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Nie można odczytać maksymalnej odległości. Przerywam."
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Nie można utworzyć mapy rastrowej <%s>"
@@ -34827,21 +36530,61 @@ msgstr "'incidout' wymaga ustawienia parametru czasu"
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Tryb 2: zintegrowane dzienne napromienienie dla danego dnia roku"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Korzystając ze współrzędnych środka mapy\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Zapis mapy rastrowej <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Niewłaściwa mapa %s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Korzystając ze współrzędnych środka mapy\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Zapis mapy rastrowej <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Korzystając ze współrzędnych środka mapy\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Zapis mapy rastrowej <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -34867,76 +36610,85 @@ msgstr "Dekompresja mapy"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Wyświetl ustawienia bieżącego regionu (styl skryptu powłoki)"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "nie znaleziono mapy wektorowej <%s>"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "[%s] jest przeklasyfikowaniem [%s w %s] - nie można edytować nagłówka!"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "[%s] jest przeklasyfikowaniem [%s w %s] - nie można edytować nagłówka!"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] jest przeklasyfikowaniem [%s w %s] - nie można edytować nagłówka!"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "poligon"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] zdekompresowano"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] skompresowano"
+msgid "Uncompressing <%s>"
+msgstr "Wartość próbki bitów"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Wartość próbki bitów"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Kasowanie <%s>"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] jest przeklasyfikowaniem [%s w %s] - nie można edytować nagłówka!"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "[%s] jest przeklasyfikowaniem [%s w %s] - nie można edytować nagłówka!"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -34969,54 +36721,54 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "plik <%s> nie został odnaleziony"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Filtr"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Generuje warstwę mapy rastrowej pokazującą działy wodne zlewni."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 #, fuzzy
 msgid "Filter radius (horizontal)"
 msgstr "Odbij poziomo"
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 #, fuzzy
 msgid "Filter radius (vertical)"
 msgstr "Odbij pionowo"
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Tekst powinien być wprowadzony lub użyte -c"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** <%s> posiada zbyt wiele sygnatur (ograniczenie do 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Należy określić 2 warstwy"
@@ -35443,20 +37195,25 @@ msgstr[2] "Obliczanie średniej klas ..."
 msgid "Calculating %s"
 msgstr "Przetwarzanie map ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr "Odległość musi być >= 0.0"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Korelacja"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Generuj przypadkowe wartości z zależnościami przestrzennymi."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Maksymalna liczba kolumn do wczytania"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35604,7 +37361,7 @@ msgstr "Wyłącz"
 msgid "Grid line width"
 msgstr "Szerokość linii"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Kolor siatki"
 
@@ -35731,14 +37488,10 @@ msgid "Starting and ending coordinates"
 msgstr "Współrzędne początku i końca"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Kolor linii"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Kolor tekstu lub \"none\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -35768,8 +37521,8 @@ msgid "Name of monitor to start"
 msgstr "Nazwa wyjściowego skryptu"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -35832,49 +37585,67 @@ msgstr "Wyświetl parametry bieżącego połączenia i wyjdź"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Wyświetl parametry bieżącego połączenia i wyjdź"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "Nie wybieraj automatycznie przy starcie"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Wyświetl listę plików rastrowych w wejściowej lokacji i wyjdź"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Nie można odczytać koloru"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Otwórz formę w trybie edycji"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "Żaden monitor nie został wybrany"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 #, fuzzy
 msgid "No monitor selected"
 msgstr "Żadna czcionka nie została wybrana "
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Tekst powinien być wprowadzony lub użyte -c"
@@ -35884,64 +37655,74 @@ msgstr "Tekst powinien być wprowadzony lub użyte -c"
 msgid "Monitor <%s> is not running"
 msgstr "plik <%s> nie został odnaleziony"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "nie znaleziono pliku <%s> widoku 3d "
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Nie można utworzyć pliku <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "plik nie został odnaleziony: %s"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Nie można otworzyć źródła danych OGR '%s'"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "Nie można utworzyć pliku <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Plik '%s' już istnieje i zostanie nadpisany."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Nie można usunąć pliku %s\n"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Mapa wyjściowa"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Raster <%s> już istnieje."
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Nie można utworzyć pliku <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Zapisuje mapę wektorową <%s>  ..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Nie można odczytać pliku zakresu"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Raster <%s> już istnieje."
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Współrzędne mapy"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Kolumna <%s> nie została znaleziona"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Nie mozna otworzyć pliku wejściowego <%s@%s>."
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Nie można odczytać pliku zakresu"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Nie można odnależć pliku wejściowego"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36049,12 +37830,12 @@ msgstr "%s: %s - niewłaściwa nazwa"
 msgid "[%s]: illegal value specified"
 msgstr "%s: %s - niewłaściwa nazwa"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "wekor, interpolacja"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -36063,16 +37844,34 @@ msgstr ""
 "Nakłada wartości kategorii rastra na warstwie rastrowej wyświetlonej na "
 "monitorze graficznym"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Plik rastrowy punktów początkowych"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Pobierz kolor dla tekstu z wartości koloru rastra"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Ustawienia"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Scieżka do pliku z fontami"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36081,7 +37880,7 @@ msgstr[1] "Kolor siatki"
 msgstr[2] "Kolor siatki"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36092,7 +37891,7 @@ msgstr ""
 "Bieżące ustawienia okna mogą być zbyt długie. Wyświetlane komórki mogą być "
 "za małe dla kategorii  "
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36175,11 +37974,6 @@ msgstr "Kolor wypełnienia poligonu"
 msgid "Colorize features according color definition column"
 msgstr "Nazwa kolumny definicji koloru (do użycia z flagą -a)"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Nie określono kolumny definicji koloru."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36189,7 +37983,7 @@ msgstr ""
 msgid "Lines"
 msgstr "Linie"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Szerokość linii"
 
@@ -36765,38 +38559,38 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Nieodpowiednie współrzędne <%s,%s>"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Wyświetl informacje na temat aktywnego monitora wyświetlania"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
 # współrzędne?
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Wyświetl prostokątny ekran (lewy, prawy, górny, dolny)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Wyświetl wymiary ekranu (szerokość, wysokość)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Wyświetl prostokątną aktywną ramkę"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Wyświetl wymiary ekranu (szerokość, wysokość)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Wyświetl prostokątny ekran bieżącego regionu"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37061,14 +38855,6 @@ msgstr "Wyrównanie tekstu"
 msgid "Line spacing"
 msgstr "Odstępy między liniami tekstu"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Scieżka do pliku z fontami"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Plik wejściowy"
@@ -37135,7 +38921,7 @@ msgstr "Typ wykresu"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Właściwości wykresu"
 
@@ -37173,12 +38959,22 @@ msgstr "Wyśrodkuj wykres słupkowy dookoła danego punktu wartości"
 msgid "Maximum value used for bar plot reference"
 msgstr "Maksymalna wartość uzyta dla współrzędnych wykresu słupkowego"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Utwórz plik wyjściowy 3D"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37222,14 +39018,7 @@ msgstr "Podzbiór"
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Użyj przedziału dla zakresu wartości mapy w legendzie (min, max)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Ustawienia"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr "Rozmiar czcionki"
@@ -37315,11 +39104,12 @@ msgstr "Zakres kolorów przewyższa górną granicę bieżących danych"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "użyj=%s poza zasięgiem [%.3f, %3f]. (rozszerz poprzez range= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Nic do pokazania! (brak kategorii z etykietami?)"
 
@@ -37333,37 +39123,93 @@ msgstr "Wyświetla podziałkę liniową na monitorze."
 msgid "North arrow style"
 msgstr "Rysuj tylko strzałkę północy"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Współrzędne ekranowe lewego-górnego rogu etykiety ([0,0] jest lewym-górnym "
 "rogiem ramki)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Kolor obramowania"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Rysuj tylko podziałkę liniową"
@@ -37380,7 +39226,7 @@ msgstr "Nie można odczytać rzędu rastra"
 msgid "Could not read symbol \"%s\""
 msgstr "Nie mozna odczytać <%s>"
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -37388,65 +39234,65 @@ msgstr ""
 "Wyświetla strzałki reprezentujące kierunek ekspozycji mapy "
 "rastrowejzawierającej informacje o ekspozycji"
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Nazwa wyświetanej rastrowej mapy ekspozycji"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Rodzaj istniejącej rastrowej mapy ekspozycji"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Kolor wyświetlanych strzałek"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Kolor wyświetlanych strzałek"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Kolor wyświetlanych X's (wartości zerowych Null)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Kolor wyświetlania nieznanych informacji"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Rysuj strzałkę co komórkę rastra w kierunku północnym"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Mapa rastrowa zawierająca wartości użyte dla długości strzałek"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Współczynnik skalowy dla strzałek (przewyższenie mapy)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Niedozwolona wartość dla współczynnika skali"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "Niedozwolona wartość dla współczynnika "
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 "Przewyższenie jest dostępne dla map w formacie GRASS i (compas aspect maps)"
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 #, fuzzy
 msgid "Scale option requires magnitude_map"
 msgstr "opcja skalowania wymaga mapy_przewyższenia"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Problem przy czytaniu pliku z zakresem wartości"
@@ -37732,55 +39578,41 @@ msgstr ""
 "matryca rozłączności klas\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Mapa rastrowa <%s> nie została znaleziona w bieżącym mapsecie"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "podgrupy <%s> nie znaleziono"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Mapa rastrowa <%s> nie istnieje w podgrupie <%s>"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "Nie znaleziono map rastrowych"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Podgrupa <%s> nie zawiera żadnych map rastrowych"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Podgrupa <%s> zawiera tylko 1 plik"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Aby kontynuować podrupa musi mieć przynajmniej 2 pliki"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Nie mozna otworzyć pliku wejściowego <%s@%s>."
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Nie można utworzyć pliku [%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, fuzzy, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "** <%s> posiada zbyt wiele sygnatur (ograniczenie do 255)"
@@ -37864,171 +39696,185 @@ msgid "Name for output file containing final report"
 msgstr ""
 "Nazwa wyjściowego pliku zawierającego matrycę błędów i współczynnika kappa"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Mapa rastrowa <%s> nie została znaleziona w bieżącym mapsecie"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "podgrupy <%s> nie znaleziono"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Niedozwolona liczba początkowych klas (%s)"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Niedozwolona wartość odstępów próbki (%s)"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Niedozwolona ilość powtórzeń (%s)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Niedozwolona wartość zbieżności (%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Niedozwolona wartość separacji (%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Niedozwolona wartość min_size (%s)"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Nie można utworzyć pliku raportu <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "################### KLASTER (%s) #####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Lokacja: %s"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Grupa:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Podgrupa: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Wynikowy plik sygnatur: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Region\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Północ: %12.2f Wschód: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "Południe: %12.2f Zachód: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Rozdzielczość:   %12.2f  Rozdzielczość:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Rzędy:  %12d  Kolumny: %12d  Komórki: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Maska: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Klastry parametrów\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr "Liczba początkowych klas:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [z pliku sygnatury %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr " Minimalny rozmiar klasy:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr " Minimalny odstęp klasy:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Procent zbieżności:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr " Maksymalna liczba powtórzeń: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr " poziomy odstęp próbkowania:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr " pionowy odstęp próbkowania:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Odczytywanie mapy rastrowej..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 "Zbyt mało pamięci. Uruchom program jeszcze raz i wybież mniejszy rozmiar "
 "próbki"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Rozmiar próbki: %d punkty\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 #, fuzzy
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
@@ -38036,7 +39882,7 @@ msgstr ""
 "Zbyt mało punktów próbki. Uruchom program jeszcze raz i wybież większy "
 "rozmiar próbki"
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 #, fuzzy
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
@@ -38044,24 +39890,24 @@ msgstr ""
 "Zbyt mało nie-zerowych próbkowych punktów danych. Spradź swój bieżcy region "
 "(i utwórz maskę)"
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## wynik końcowy #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d klasy (zbieżność=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Nie można zapisać pliku sygnatury <%s> dla grupy <%s>, podgrupy <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38069,12 +39915,12 @@ msgstr ""
 "\n"
 "#################### KLASY ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d klasy, %.2f%% punkty stabilne\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38390,8 +40236,8 @@ msgid "radiance"
 msgstr "promieniowanie"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr "odbicia"
 
@@ -38758,358 +40604,402 @@ msgstr "Grupa <%s>  nie istnieje"
 msgid "group <%s> references the following subgroups\n"
 msgstr "Podgrupa <%s> nie zawiera żadnych map rastrowych"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Wyświetl tylko region mapy rastrowej"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Selekcja"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Ekstrachuje parametry terenu z DEM."
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Nazwa wyjściowej mapy rastrowej z jeziorem"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Nazwa wejściowej warstwy"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Nazwa pliku QC do utworzenia"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Wyjściowa mapa rastrowa kierunków"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Numer krawędzi poza zakresem"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "Numer krawędzi poza zakresem"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39314,7 +41204,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Minimalna liczba pikseli w klasie"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Niedozwolona liczba pod-sygnatur (%s)"
@@ -39676,110 +41566,116 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Brak wolnej pamięci"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Błąd podczas czytania danych"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Błąd zapisu pliku mapy wynikowej!"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Błąd zapisu danych"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Liczba punktów do utworzenia"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "nie znaleziono regionu <%s>"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Zapis do mapy ..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "przetwarzanie poligonów..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 "Rozmiar obszaru jest mniejszy niż minimalny obszar(minreg), nic nie zostało "
 "wyświetlone."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "plik dig_att już istnieje"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Podzbiór"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Błąd podczas czytania danych"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Błąd zapisu pliku mapy wynikowej!"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Błąd zapisu danych"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Liczba punktów do utworzenia"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Zapis do mapy ..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -39854,64 +41750,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Należy określić 2 warstwy"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Nie można otworzyć mapy wysokości"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Nieprawidłowa metoda: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "Nie znaleziono bazowej mapy rastrowej <%s>"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "wejściowa mapa rastrowa"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Nie znaleziono jednej lub więcej map rastrowych"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Niewłaściwa liczba przedziałów: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Niewłaściwa liczba przedziałów: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "nie znaleziono regionu <%s>"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -39978,7 +41891,7 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (zielony)"
 msgid "Name for output raster map (blue)"
 msgstr "Nazwa dla wynikowej mapy rastrowej (niebieski)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40030,7 +41943,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "Zbyt wiele map wejściowych. Dozwolonych jest tylko %d"
@@ -40876,51 +42789,55 @@ msgstr "Grupy [%s] nie znaleziono"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Lokacja <%s> została stworzona"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "nie powiodło się"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Nazwa mapy wynikowej"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Tytuł wyjściowej mapy rastrowej"
@@ -41204,6 +43121,10 @@ msgstr "wekor, interpolacja"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41602,12 +43523,36 @@ msgid "Name for output raster map (saturation)"
 msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Nie można ustawić projekcji"
+#~ msgid "<%s> already exists"
+#~ msgstr "BŁĄD: <%s> już istnieje\n"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Nie można ustawić projekcji"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] skompresowano"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Nie znaleziono danych punktowych"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Liczba warstw (z)"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Liczba warstw (z)"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Liczba warstw (na)"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Podaj współrzędne punktu"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Nie twórz tabeli atrubutów."
 
 #, fuzzy
 #~ msgid "time series"
@@ -41653,74 +43598,6 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgid "Number of quartals to use"
 #~ msgstr "Liczba klatek"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Wejściowa mapa rastrowa kosztów tarcia"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Wejściowa mapa rastrowa kosztów tarcia"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Wynikowa mapa rozproszonego napromieniowania [W.m-2] (tryb 1) lub "
-#~ "napromienienia [Wh.m-2.day-1] (tryb 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Wynikowa mapa rastrowa odbitego przez ziemię napromieniowania [W.m-2] "
-#~ "(tryb 1 ) lub napromieniowania [Wh.m-2.day-1] (tryb 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Wyjściowy plik bezpośredniego napromieniowania [W.m-2] (tryb 1) lub "
-#~ "napromienienia [Wh.m-2.day-1] (tryb 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nazwa mapy rastrowej wysokości [m]"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nazwa wejściowej rastrowej mapy wysokości [metry]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Wynikowa mapa rastrowa odbitego przez ziemię napromieniowania [W.m-2] "
-#~ "(tryb 1 ) lub napromieniowania [Wh.m-2.day-1] (tryb 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Wyjściowy plik bezpośredniego napromieniowania [W.m-2] (tryb 1) lub "
-#~ "napromienienia [Wh.m-2.day-1] (tryb 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Liczba punktów interpolacji"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Lokacja: %s\n"
 
@@ -41737,24 +43614,28 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ "\n"
 #~ "%d klasy, %.2f%% punkty stałe\n"
 
+#~ msgid "Subregion"
+#~ msgstr "Podregion"
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Przyrost kategorii"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "opcja <%s>: <%s> istnieje."
+#, fuzzy
+#~ msgid "Could not rewind input file"
+#~ msgstr "Nie można otworzyć pliku wyjściowego <%s>"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Mapa wyjściowa"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Nazwa bazoewj mapy rastrowej"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Ustawianie okna graficznego"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "BŁĄD: <%s> już istnieje w mapsecie <%s>\n"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Nazwa bazoewj mapy rastrowej"
+#~ msgid "output map <%s> exists"
+#~ msgstr "Mapa wyjściowa"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Długość strony (domyślnie: %d lines)"
@@ -41762,6 +43643,9 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Szerokość strony (domyślnie: %d characters)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
+
 #, fuzzy
 #~ msgid "%s: Error writing temporary file"
 #~ msgstr "Błąd zapisu pliku mapy wynikowej!"
@@ -41777,6 +43661,21 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgid "[%s] not found"
 #~ msgstr "nie znaleziono [%s]"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "opcja <%s>: <%s> istnieje."
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Forsuj projekcję (użyj projekcji z lokacji)"
+
+#, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
 #~ msgid "Location name (not location path)"
 #~ msgstr "Nazwa lokacji (nie ścieżka do lokacji)"
 
@@ -41785,6 +43684,17 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr "Nowe GISDBASE (pełna ścieżka dostępu do nowej lokacji)"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Nie można ustawić projekcji"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Konwertuje starsze wersje wektorowych map GRASS-a w bieżącym mapsecie do "
+#~ "bieżącego formatu."
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Aktualizuje metadane mapy wektorowej."
 
@@ -41816,149 +43726,55 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr "Domyślny sterownik nie jest ustawiony"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "BŁĄD: <%s> już istnieje w mapsecie <%s>\n"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Konwertuje starsze wersje wektorowych map GRASS-a w bieżącym mapsecie do "
-#~ "bieżącego formatu."
+#~ msgid "OGR datasource name"
+#~ msgstr "nazwa bazy danych"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Nie podano nazwy mapy"
 
 #, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Wczytywanie mapy hipsometrycznej:"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Nie mozna odczytać <%s>"
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "Wczytano %d kategorii z tabeli <%s>"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Nie można utworzyć pliku <%s>"
 
 #, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Określ kolumnę z."
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Niedozwolona wartość dla współczynnika skalowego."
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Określ kolumnę z."
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Określ kolumnę z."
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Określ kolumnę z."
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Określ kolumnę z."
+#~ msgid "Env file not found"
+#~ msgstr "nie znaleziono pliku <%s> widoku 3d "
 
 #, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
+#~ msgid "PID file not found"
+#~ msgstr "plik nie został odnaleziony: %s"
 
 #, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
+#~ msgid "Command file not found"
+#~ msgstr "Kolumna <%s> nie została znaleziona"
 
 #, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Wczytywanie mapy hipsometrycznej:"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "-r i -e wzajemnie się wykluczają"
+#~ msgid "Name for output image"
+#~ msgstr "Nazwa dla pliku wyjściowego"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Nie mozna odczytać <%s>"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Albo standardowa nazwa koloru albo R:G:B"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "Wczytano %d kategorii z tabeli <%s>"
 
-#, fuzzy
 #~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
 #~ msgstr ""
-#~ "Wyświetla dane wektorowe GRASS w aktywnej ramce monitora graficznego."
-
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Kolor wyświetlanego tekstu"
-
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Kolor wyświetlanej siatki, lub \"none\""
+#~ "Koryguje rezultat modułu v.lidar.growing. Ostatni z trzech algorytmów "
+#~ "filtracji danych LiDAR."
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Nazwa wyjściowej mapy rastrowej"
-
-#, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Odległość położenia kamery (w jednostkach mapy)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Nazwa dla wynikowej mapy rastrowej "
 
 #~ msgid "Displays thematic vector map"
 #~ msgstr "Wyświetla tematyczną mapę wektorową"
@@ -41996,12 +43812,37 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr "Pliki"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Nazwa dla wynikowej mapy rastrowej "
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Nazwa wyjściowej mapy rastrowej"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Wyświetl"
+#~ msgid "Default: input"
+#~ msgstr "Odległość położenia kamery (w jednostkach mapy)"
+
+#, fuzzy
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr ""
+#~ "Wyświetla dane wektorowe GRASS w aktywnej ramce monitora graficznego."
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "Kolor tekstu lub \"none\""
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Kolor wyświetlanego tekstu"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Kolor wyświetlanej siatki, lub \"none\""
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Albo standardowa nazwa koloru albo R:G:B"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "linia"
 
 #, fuzzy
 #~ msgid ""
@@ -42009,17 +43850,29 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr ""
 #~ "Pozwala na tworzenie i/lub modyfikację plików wsparcia dla map rastrowych."
 
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "Plik dig_att nie istnieje."
+
+#~ msgid "Attaching categories..."
+#~ msgstr "Dołączanie kategorii..."
+
+#~ msgid "Writing new file..."
+#~ msgstr "Zaisywanie nowego pliku..."
+
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Nie można odczytać mapy wektorowej "
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "Nadpisz plik mapy wyjściowej"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importuje starsze wersje wektorowych map GRASS-a."
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Nie można utworzyć tabeli: %s"
+#~ msgid "Endian of input vector map"
+#~ msgstr "nazwa wejściowego pliku wektorowego"
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Niewystarczająca ilość pamięci."
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "Nie można otworzyć pliku dig_att <%s>\n"
 
 #~ msgid "Reading dig file..."
 #~ msgstr "Wczytywanie pliku dig..."
@@ -42066,114 +43919,34 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "Wczytano %d kategorii z mapy"
 
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "Nie można otworzyć pliku dig_att <%s>\n"
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "Plik dig_att nie istnieje."
-
-#~ msgid "Attaching categories..."
-#~ msgstr "Dołączanie kategorii..."
-
-#~ msgid "Writing new file..."
-#~ msgstr "Zaisywanie nowego pliku..."
-
-#, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "Nadpisz plik mapy wyjściowej"
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importuje starsze wersje wektorowych map GRASS-a."
-
-#, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "nazwa wejściowego pliku wektorowego"
-
-#, fuzzy
-#~ msgid "Unknown raster map type"
-#~ msgstr "Nieznany rodzaj mapy rastrowej"
-
-#, fuzzy
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Wielkość etykiety (w pikselach)"
-
-#, fuzzy
-#~ msgid "Can't call bad function"
-#~ msgstr "lokalizacja bazy danych"
-
-#, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Odczytywania mapy %s"
-
 #~ msgid "One or more coordinates"
 #~ msgstr "Jedna lub więcej współrzędnych"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Niewystarczająca ilość pamięci dla adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Niewystarczająca ilość pamięci dla ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Niewystarczająca ilość pamięci dla adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Niewystarczająca ilość pamięci dla adyy"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Niewystarczająca ilość pamięci dla adxy"
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "Nie można utworzyć quaddata"
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "Nie można utworzyć quadfunc"
-
-#~ msgid "Cannot create tree"
-#~ msgstr "Nie można utworzyć drzewa"
-
-#~ msgid "sites"
-#~ msgstr "punkty"
-
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Konwertuje plik site_lists GRASS do mapy wektorowej."
-
-#, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "nie znaleziono pliku <%s> widoku 3d "
-
-#, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Format pliku graficznego"
+#~ msgid "Name of elevation map"
+#~ msgstr "Nazwa mapy wysokości"
 
-#, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Nie można wyznaczyć stref buforowych dla rastra."
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Ciąg znaków reprezentujący komórki, w których jest brak danych"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "nazwa wejściowego pliku wektorowego"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Wejściowa mapa rastrowa intesywności (intensity)"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Nieznana wartość metryczna: [%s]."
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Wejściowa mapa rastrowa nasycenia (saturation)"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Błąd przy odczycie pliku kategorii dla <%s>"
 
 #, fuzzy
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr "Importuje starsze wersje wektorowych map GRASS-a"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Błąd w odczycie pliku colr dla <%s>."
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Nazwa wyjściowego pliku (nie dodawaj rozszerzenia)"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Ciąg znaków reprezentujący wartości NULL"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Nazwa map(y) rastrowych(ej) do wysokości"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Narzędzie interpolacji powierzchni dla map rastrowych."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -42190,15 +43963,18 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ "przemieszczania się pomiędzy położeniami na wejściowej warstwie rastrowej "
 #~ "wysokości oraz mapie rastrowej, której wartości reprezentują koszt tarcia."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Wejściowa mapa rastrowa intesywności (intensity)"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Wejściowa mapa rastrowa nasycenia (saturation)"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Wyjściowa mapa rastrowa zieleń (green)"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Wyjściowa mapa rastrowa niebieskości (blue)"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Narzędzie interpolacji powierzchni dla map rastrowych."
-
 #, fuzzy
 #~ msgid ""
 #~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
@@ -42216,50 +43992,15 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr[1] "Interpolowanie mapy rastrowej <%s>... %d wierszy..."
 #~ msgstr[2] "Interpolowanie mapy rastrowej <%s>... %d wierszy..."
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "Odwzorowanie lat/lon nie jest obsługiwane at this time."
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Lokacja: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "wyświetl indeks"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "Nazwa mapy wysokości"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Ciąg znaków reprezentujący komórki, w których jest brak danych"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Nieznana wartość metryczna: [%s]."
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Błąd przy odczycie pliku kategorii dla <%s>"
-
-#, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Błąd w odczycie pliku colr dla <%s>."
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Ciąg znaków reprezentujący wartości NULL"
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "wyjściowy plik wysokości -Z (mapy wysokości)"
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "Wyjściowa mapa ekspozycji (lub fy)"
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "Odwzorowanie lat/lon nie jest obsługiwane at this time."
+
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "Prefix dla wejściowej mapy(map) rastrowej"
 
@@ -42288,14 +44029,18 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr "Pomiń ostrzeżenia"
 
 #, fuzzy
-#~ msgid "High resolution panchromatic image"
-#~ msgstr ""
-#~ "Transformacja Brovey'a do integracji multispektralnych i wysokiej "
-#~ "rozdzielczości kanałów panchromatycznych."
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr "Importuje starsze wersje wektorowych map GRASS-a"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Korelacja"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Nazwa wyjściowego pliku (nie dodawaj rozszerzenia)"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Nazwa map(y) rastrowych(ej) do wysokości"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -42322,6 +44067,133 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgstr "Nazwa dla wynikowej mapy rastrowej (domyślna: input)"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr "oblicza statystyki z mapy rastrowej GRASS"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Kolor wyświetlanej siatki, lub \"none\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Kolor wyświetlanej siatki, lub \"none\""
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Kolor wyświetlania nieznanych informacji"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Kolor wyświetlanej siatki, lub \"none\""
+
+#, fuzzy
+#~ msgid "Invalid distance"
+#~ msgstr "Niewłaściwy przedział czasowy"
+
+#~ msgid "Layer number"
+#~ msgstr "Numer warstwy"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Lokacja: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "wyświetl indeks"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Określ kolumnę z."
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Niedozwolona wartość dla współczynnika skalowego."
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Określ kolumnę z."
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Określ kolumnę z."
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Określ kolumnę z."
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Określ kolumnę z."
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Wyświetl"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr ""
+#~ "Transformacja Brovey'a do integracji multispektralnych i wysokiej "
+#~ "rozdzielczości kanałów panchromatycznych."
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Korelacja"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Nazwa wejściowej mapy rastrowej"
 
@@ -42337,21 +44209,94 @@ msgstr "Nazwa dla wynikowej mapy rastrowej (saturation)"
 #~ msgid "No maps output"
 #~ msgstr "Brak mapy wyjściowej"
 
-#, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr "oblicza statystyki z mapy rastrowej GRASS"
-
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Kolor wyświetlanej siatki, lub \"none\""
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "Pobierz histogram niejawnie"
 
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Niewystarczająca ilość pamięci dla adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Niewystarczająca ilość pamięci dla ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Niewystarczająca ilość pamięci dla adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Niewystarczająca ilość pamięci dla adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Niewystarczająca ilość pamięci dla adxy"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Nie można utworzyć quaddata"
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Nie można utworzyć quadfunc"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "Nie można utworzyć drzewa"
+
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "Niewłaściwy przedział czasowy"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Nie można utworzyć tabeli: %s"
 
-#~ msgid "Layer number"
-#~ msgstr "Numer warstwy"
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Niewystarczająca ilość pamięci."
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "-r i -e wzajemnie się wykluczają"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "Tekst powinien być wprowadzony lub użyte -c"
+
+#~ msgid "sites"
+#~ msgstr "punkty"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Konwertuje plik site_lists GRASS do mapy wektorowej."
+
+#, fuzzy
+#~ msgid "Site file <%s> not found"
+#~ msgstr "nie znaleziono pliku <%s> widoku 3d "
+
+#, fuzzy
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Format pliku graficznego"
+
+#, fuzzy
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Nie można wyznaczyć stref buforowych dla rastra."
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "nazwa wejściowego pliku wektorowego"
+
+#, fuzzy
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Odczytywania mapy %s"
+
+#, fuzzy
+#~ msgid "Can't call bad function"
+#~ msgstr "lokalizacja bazy danych"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Nie można odczytać mapy wektorowej "
+
+#, fuzzy
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Wielkość etykiety (w pikselach)"
+
+#, fuzzy
+#~ msgid "Unknown raster map type"
+#~ msgstr "Nieznany rodzaj mapy rastrowej"
diff --git a/locale/po/grassmods_pt.po b/locale/po/grassmods_pt.po
index b8588ff..b46e767 100644
--- a/locale/po/grassmods_pt.po
+++ b/locale/po/grassmods_pt.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_pt\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2007-06-21 21:54-0300\n"
 "Last-Translator: Daniel de Castro Victoria <daniel dot victoria at gmail dot "
 "com>\n"
@@ -256,6 +256,7 @@ msgstr "raster <%s> n
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -491,6 +492,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Erro fechando arquivo VTK-ASCII"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -630,29 +636,29 @@ msgstr "N
 msgid "Unable to open database:"
 msgstr "N�o consegui abrir mapa raster <%s>"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Conex�o com banco de dados n�o definida"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "O vetor '%s' j� existe."
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "raster <%s> n�o encontrado"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -664,6 +670,11 @@ msgstr "N
 msgid "Unable grant on table:"
 msgstr "N�o consegui abrir arquivo de sa�da."
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "N�o consegui definir tamanho"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -794,7 +805,7 @@ msgstr "N
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -872,17 +883,17 @@ msgstr "nome=%s\n"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -894,7 +905,7 @@ msgstr "M
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "Nome da Fonte"
+msgstr "Nome da Tabela"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -917,39 +928,39 @@ msgstr "mostra os par
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -995,7 +1006,7 @@ msgstr "Lista todos os drivers de banco de dados."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1025,7 +1036,7 @@ msgstr "Mostra atributos do vetor"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1123,10 +1134,10 @@ msgid "Unable to open database <%s>"
 msgstr "N�o consegui abrir mapa raster <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1329,11 +1340,11 @@ msgstr "Entrada falhou"
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
@@ -1371,10 +1382,10 @@ msgstr "Coluna de pesquisa. Usada para a op
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "Formato OGR."
@@ -1384,7 +1395,7 @@ msgstr "Formato OGR."
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Delimitador vertical de registro na sa�da"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1393,7 +1404,7 @@ msgstr "Delimitador vertical de registro na sa
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Nome do mapa bin�rio de sa�da (use 'out=-' para sa�da padr�o)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "N�o incluir nomes das colunas na sa�da"
 
@@ -1402,7 +1413,7 @@ msgstr "N
 msgid "Describe query only (don't run it)"
 msgstr "apenas descrever a pesquisa (n�o executar)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Sa�da vertical (ao inv�s de horizontal)"
 
@@ -1453,6 +1464,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Arquivo contendo declara��es SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignorar erros SQL e continuar"
 
@@ -1632,7 +1644,6 @@ msgstr "Rotaciona 90 graus"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1753,7 +1764,7 @@ msgstr "N
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1761,15 +1772,15 @@ msgstr "N
 msgid "Error in pj_do_proj"
 msgstr "Erro em pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1865,7 +1876,7 @@ msgstr "N
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1911,7 +1922,7 @@ msgstr "N
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1924,26 +1935,27 @@ msgstr "N
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "N�o conseguir abrir banco de dados %s com driver %s"
@@ -1954,7 +1966,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Tipo da coluna n�o suportado (%s)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2106,13 +2119,13 @@ msgstr "N
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2120,8 +2133,8 @@ msgstr "N
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2165,10 +2178,11 @@ msgstr "N
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2182,13 +2196,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2197,6 +2214,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2212,7 +2230,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2232,11 +2250,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2248,27 +2266,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2286,74 +2304,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2363,6 +2384,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2378,6 +2400,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2396,6 +2419,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2404,15 +2428,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2452,7 +2477,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Mostra oso formatos suportados e encerra"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "Loca��o: %s\n"
@@ -3062,69 +3087,70 @@ msgid "Vector map <%s> not found"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
@@ -3190,12 +3216,13 @@ msgstr "N
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, fuzzy, c-format
 msgid "Unable to open file <%s>"
@@ -3331,7 +3358,7 @@ msgstr "Mapa"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3494,7 +3521,7 @@ msgid "Area:"
 msgstr "�rea\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3510,7 +3537,7 @@ msgstr "Escrevendo atributos ..."
 msgid "No attribute table for layer %d"
 msgstr "Coluna(s) de atributo(s)"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3523,15 +3550,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "N�o conseguir abrir banco de dados %s com driver %s"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "N�o posso dar privil�gios na tabela %s"
@@ -3554,6 +3582,7 @@ msgid ""
 msgstr "Calculando m�dias das classes ..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3562,6 +3591,7 @@ msgid "extract"
 msgstr "vetor, metadados"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3572,10 +3602,10 @@ msgstr "Resolu
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Tipo de fei��o"
@@ -3599,12 +3629,11 @@ msgstr "N
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "N�o criar tabela de atributo."
@@ -3625,39 +3654,45 @@ msgstr "Posi
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3673,7 +3708,10 @@ msgstr "Posi
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3748,7 +3786,7 @@ msgstr "Entrada de texto %s ignorada"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3796,45 +3834,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3878,11 +3917,11 @@ msgstr "Tipo da coluna n
 msgid "Format <%s> does not support writing"
 msgstr "formato 'point' n�o � suportado para vers�o antiga"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -4036,9 +4075,9 @@ msgstr "Arquivo ASCII contendo assinaturas espectrais"
 msgid "Name for output file where to save current settings"
 msgstr "Nome do arquivo de sa�da contendo a matriz de erro e capa"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 #, fuzzy
 msgid "List supported formats and exit"
 msgstr "Mostra oso formatos suportados e encerra"
@@ -4061,7 +4100,7 @@ msgstr "para padr
 msgid "Print current status in shell script style"
 msgstr "Mostra as estat�sticas em estilo shell script"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
@@ -4069,7 +4108,7 @@ msgstr "Op
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Duas camadas devem ser especificadas"
+msgstr "Um de!"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4077,18 +4116,18 @@ msgid "%s= must be specified"
 msgstr "Duas camadas devem ser especificadas"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Mostra oso formatos suportados e encerra"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4099,49 +4138,49 @@ msgstr "Mostra oso formatos suportados e encerra"
 msgid "network"
 msgstr "Exibir"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-#, fuzzy
-msgid "Arc type"
-msgstr "Tipo de fei��o"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 #, fuzzy
 msgid "Arc layer"
 msgstr "Consultar"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+#, fuzzy
+msgid "Arc type"
+msgstr "Tipo de fei��o"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 #, fuzzy
 msgid "Node layer"
 msgstr "Consultar"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 #, fuzzy
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
@@ -4149,22 +4188,23 @@ msgstr ""
 "Nome do arquivo contendo comandos gr�ficos, se n�o houver, l� da entrada "
 "padr�o"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4176,10 +4216,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4192,51 +4233,87 @@ msgstr ""
 msgid "Cost"
 msgstr "Contraste"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "N�mero de colunas"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "Dist�ncia m�xima do ponto para a rede"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Sem tabela"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Camada '%s' n�o dispon�vel"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 #, fuzzy
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "%s n�o funciona com uma loca��o lat-long"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4245,10 +4322,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4264,8 +4341,8 @@ msgstr "%d pontos sem categoria"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4294,22 +4371,22 @@ msgstr "N
 msgid "Wrong input format: %s"
 msgstr "Entrada errada para multiplicador: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4318,17 +4395,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "N�o consegui inserir novo registro: '%s'"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d atualizar erros"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4339,7 +4416,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4349,7 +4426,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "Arquivo vetorial para criar"
@@ -4403,17 +4480,17 @@ msgid "Unable to get category list <%s>"
 msgstr "N�o exibir n�meros de categorias"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, fuzzy, c-format
 msgid "Required parameter <%s> not set"
 msgstr "par�metro para"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "O vetor '%s' j� existe."
@@ -4709,6 +4786,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Arquivo contendo declara��es SQL"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4729,12 +4807,15 @@ msgstr "Arquivo contendo declara
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4900,11 +4981,11 @@ msgstr "camada deve ser > 0 para 'where'."
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Conex�o com banco de dados n�o definida para camada <%d>"
@@ -5047,9 +5128,9 @@ msgid "Remove existing color table"
 msgstr "Manter a tabela de cores existente"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5114,7 +5195,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5130,8 +5211,7 @@ msgstr "Um de!"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5157,6 +5237,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Mapa vetorial n�o � 3D"
@@ -5182,7 +5263,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Arquivo de c�lulas [%s] n�o encontrado"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5191,13 +5272,14 @@ msgstr "N
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5229,8 +5311,9 @@ msgstr "Rotacionando dados ... "
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5278,7 +5361,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Arquivo ASCII com as coordenadas de transforma��o"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "N�o consegui usar a coluna '%s'"
@@ -5333,6 +5416,7 @@ msgid "Point out of range"
 msgstr "N�mero de quadros"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5341,15 +5425,17 @@ msgstr "N
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5443,14 +5529,15 @@ msgstr "Nome do mapa de desvios para sa
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "Sa�da de mapa"
@@ -5650,15 +5737,15 @@ msgstr "M
 msgid "Input failed"
 msgstr "Entrada falhou"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "Entrada falhou"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Espa�o em disco insuficiente -- n�o posso escrever arquivos"
@@ -5708,9 +5795,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5739,7 +5826,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Resolu��o"
+msgstr "Processando �reas de entradaA ..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5818,9 +5905,9 @@ msgstr "Erro fechando arquivo VTK-ASCII"
 msgid "3D raster map <%s> created"
 msgstr "O vetor '%s' j� existe."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5831,86 +5918,122 @@ msgstr "N
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Arquivo raster bin�rio a importar"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Arquivo(s) de pontos vetoriais para sobrepor"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Dist�ncia m�xima do ponto para a rede"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "N�mero de pontos de entrada: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "Nome da coluna categoria"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "N�mero de pontos de entrada: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Arquivo(s) de pontos vetoriais para sobrepor"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Arquivo raster bin�rio a importar"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5930,18 +6053,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Importar"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Nome da Fonte"
@@ -5978,9 +6103,9 @@ msgstr "Nome da coluna de atributos com valores para interpolar (se >0 camada)"
 msgid "Name of column containing z coordinate"
 msgstr "Nome da coluna de atributos com valores para interpolar (se >0 camada)"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Criar sa�da 3D"
@@ -6031,7 +6156,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "N�o consegui abrir cursor de sele��o: '%s'"
@@ -6050,7 +6175,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "coluna x/y/x deve ser inteiro ou double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -6078,7 +6203,94 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d pontos escritos no vetor"
 msgstr[1] "%d pontos escritos no vetor"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+#, fuzzy
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Proje��o dos dados de entrada e loca��o atual parecem combinar.\n"
+"Continuando com a importa��o...\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+#, fuzzy
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "Loca��o: %s\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+#, fuzzy
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "Loca��o: %s\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+#, fuzzy
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Considere gerar uma nova loca��o com o par�metro 'location' do dado de "
+"entrada.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"N�o consegui converter a proje��o do mapa de entrada para o formato do GRASS "
+"para verifica��o"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Fonte"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+#, fuzzy
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"Proje��o dos dados de entrada e loca��o atual parecem combinar.\n"
+"Continuando com a importa��o...\n"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr " 4 par�metros s�o requeridos para o par�metro 'spatial'."
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Fonte inv�lida: %s"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Tipo desconhecido"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6101,7 +6313,7 @@ msgstr[1] "%d pontos escritos no vetor"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6110,7 +6322,7 @@ msgstr[1] "%d pontos escritos no vetor"
 msgid "statistics"
 msgstr "Estat�sticas de transi��o de classe."
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6771,8 +6983,8 @@ msgstr "Tipo da coluna n
 msgid "Operator '%s' is not supported for type line"
 msgstr "formato 'point' n�o � suportado para vers�o antiga"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "N�o consegui criar arquivo raster [%s]."
@@ -6835,13 +7047,13 @@ msgid "Breaking lines..."
 msgstr "processando."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "Escrevendo [%s]..."
@@ -6851,12 +7063,12 @@ msgstr "Escrevendo [%s]..."
 msgid "Merging lines..."
 msgstr "processando."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 #, fuzzy
 msgid "Attaching islands..."
 msgstr "Anexando categorias...\n"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "N�o consegui calcular �rea do centr�ide."
 
@@ -6872,13 +7084,14 @@ msgstr "Escrevendo [%s]..."
 msgid "Attribute not found"
 msgstr "Coluna(s) de atributo(s)"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "Escrever v�rtices da linha."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "N�o consegui inserir nova linha: %s"
@@ -6958,128 +7171,130 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "M�todo de amostragem"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Gera mapa de pontos 2D/3D do GRASS aleat�riamente."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "N�mero de pontos para criar"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Falha abrindo arquivo vetorial de entrada."
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 #, fuzzy
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Altura m�nima em z (op��o -z necess�ria)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 #, fuzzy
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Altura m�xima em z (op��o -z necess�ria)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Nome da coluna de atributos com valores para interpolar (se >0 camada)"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Tipo de tabela de cores"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Criar sa�da 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "N�mero de pontos para criar"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d pontos escritos no vetor"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Nome do mapa vetorial existente"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "mapear pontos em atual."
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "mapear pontos em atual."
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "Escrevendo [%s]..."
@@ -7127,7 +7342,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Nome de um mapa raster para pesquisar"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Nome da coluna de atributo para usar como r�tulos"
@@ -7141,82 +7356,80 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Imprime valores m�dios ao inv�s de intervalos"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Tipo de coluna n�o suportado"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Tipo do raster � inteiro e o tipo da coluna � 'float'"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Tipo do raster � 'float' e tipo da coluna � inteiro, alguns dados foram "
 "perdidos !!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Lendo dados do mapa ..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "N�o consegui encontrar o mapa de entrada <%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d pontos fora da regi�o atual."
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Mais pontos (%d) da categoria %d, valor ajustado para 'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d categorias carregadas do vetor"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d categorias duplicadas no vetor"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d categorias carregadas da tabela"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d categorias do vetor faltando na tabela"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d atualizar erros"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d registros atualizados"
@@ -7224,14 +7437,14 @@ msgstr "%d registros atualizados"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Nome do mapa raster que conter� os resultados"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7319,7 +7532,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7377,6 +7590,151 @@ msgstr "N
 msgid "%d records updated"
 msgstr "%d registros atualizados"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Conex�o com banco de dados n�o definida para camada <%d>"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "tipo de coluna n�o suportado"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Sem registros para cat = %d"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Sem registros para cat = %d"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Coluna <%s> n�o encontrada"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Gera pontos como pontos 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Camada n�mero"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%-5d categorias de linha lidas\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Camada n�mero"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Camada n�mero"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Camada para"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Nome da coluna (tipo deve ser num�rico)"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "coluna(s)"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Erro na defini��o de cor na coluna GRASSRGB, �rea %d com cat %d"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Coluna de defini��o das cores n�o definida."
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "N�o consegui ler arquivo de cores."
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "N�o atualizar a regi�o atual"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Sem tabela"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7413,6 +7771,12 @@ msgstr "Erro na defini
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Coluna <%s> n�o encontrada"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7443,47 +7807,54 @@ msgstr "N
 msgid "No areas selected from vector map <%s>"
 msgstr "%d pontos escritos no vetor"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, fuzzy, c-format
 msgid "Pass %d of %d:"
 msgstr "classe %d (%d)\n"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "N�o consegui processar �reas do mapa vetorial <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
 msgstr "Escrevendo novo arquivo...\n"
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "criando arquivos de suporte para %s"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7550,16 +7921,18 @@ msgstr "Arquivo raster para superf
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "Mem�ria Esgotada! (Out of Memory)"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Relat�rio de estat�sticas para mapas raster."
@@ -7602,7 +7975,7 @@ msgstr "Par
 msgid "Unknown option '%s'"
 msgstr "Tipo desconhecido"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "Rotacionando dados ... "
@@ -7621,12 +7994,17 @@ msgstr "N
 msgid "Get area %d failed"
 msgstr "Inporta��o de vetor incompleta"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Falha abrindo arquivo dig de entrada."
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "Centr�ide da �rea sem categoria"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Centr�ide da �rea sem categoria"
 
@@ -7657,12 +8035,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "N�mero de colunas"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "coluna(s)"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7842,155 +8214,161 @@ msgstr "Converter para o tipo de fei
 msgid "Incompatible types"
 msgstr "Tipo da coluna incompat�vel"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "Nome da camada a usar para MATIZ (HUE)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Nome do mapa bin�rio de sa�da (use 'out=-' para sa�da padr�o)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Dist�ncia m�xima do ponto para a rede"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "N�mero de pontos de entrada: %d."
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "Nome da coluna categoria"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "criando novo arquivo cats ..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Sem registros para o ponto (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "N�o � poss�vel chegar ao destino\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "Mapa vetorial n�o � 3D"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, fuzzy, c-format
 msgid "Iso cost %d: %f"
 msgstr "classe %d (%d)\n"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "N�mero de pontos de entrada: %d."
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "N�o consegui criar a tabela %s"
@@ -8206,7 +8584,7 @@ msgstr ""
 "Caminho para o arquivo ASCCI resultante ou nome do vetor ASCII se '-o' foi "
 "definido"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr ""
@@ -8214,8 +8592,9 @@ msgstr ""
 "entrada padr�o"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8239,9 +8618,13 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8306,7 +8689,7 @@ msgstr "Separador de Campos"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "N�mero de d�gitos significativos (apenas ponto flutuante)"
 
@@ -8374,7 +8757,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "N�o consegui abrir mapa vetorial <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8477,9 +8860,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "N�o consegui abrir arquivo de entrada <%s@%s>."
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "N�o consegui abrir arquivo de sa�da <%s>."
@@ -9077,7 +9461,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Camada %d"
@@ -9102,7 +9486,7 @@ msgstr "N
 msgid "Resolving conflicts..."
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Escrevendo [%s]..."
@@ -9132,207 +9516,211 @@ msgid "Performs vector based generalization."
 msgstr "N�mero de pontos de interpola��o"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "M�ximo valor aleat�rio"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "Par�metro de suaviza��o"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Par�metro de suaviza��o"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Par�metros de tens�o"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "N�o consegui copiar a tabela"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "M�trica desconhecida: [%s]."
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Rotacionando dados ... "
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Resolu��o"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9411,8 +9799,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Cor do Texto"
 
@@ -9425,13 +9813,13 @@ msgstr "Cor do Texto"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9631,14 +10019,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Removendo centr�ides duplicados ..."
@@ -9691,14 +10079,6 @@ msgstr "Rotacionando dados ... "
 msgid "Constructing 3D hull..."
 msgstr "Imprimindo ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9782,7 +10162,9 @@ msgstr "N
 msgid "Bicubic interpolation"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10203,6 +10585,195 @@ msgstr "Erro na leitura do arquivo de categorias para <%s>."
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: Escrevendo cabe�alho VTK"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "Valor do raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d classes."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Separa��o dos agrupamentos (clusters)"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Nome do arquivo vetor de entrada"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Dist�ncia m�xima do ponto para a rede"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "N�mero m�nimo de pixels numa classe"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Separa��o dos agrupamentos (clusters)"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "Nome do mapa de pontos de sa�da"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "N�mero de classes deve ser < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Tamanho da vizinhan�a"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Contando locais no quadrado..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "criando novo arquivo cats ..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "Suaviza��o deve ser um valor positivo"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Usando m�xima dist�ncia entre pontos: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "%d pontos escritos no vetor"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Dist�ncia m�xima do ponto para a rede"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Desvio padr�o"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Usando m�xima dist�ncia entre pontos: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Encontrando classes de treinamento..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+"\n"
+"Resolu��o = %d; per�odo = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Escrevendo [%s]..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Escrevendo arquivo raster %i\n"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "\rLendo arquivo [%s] ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%s: nenhum ponto de dados encontrado"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10347,26 +10918,26 @@ msgstr "Imposs
 msgid "Impossible to write to aux table"
 msgstr "Imposs�vel escrever na base de dados"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Vari�ncia"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "n�o consegui abrir arquivo de vetores <%s> em <%s>"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d pontos escrito no mapa de sa�da\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%-5d linhas lidas  e escritas na sa�da\n"
@@ -10405,7 +10976,7 @@ msgstr "Nome do mapa vetorial (2d) de entrada"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10418,14 +10989,14 @@ msgstr "Nome do mapa vetorial (2d) de entrada"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10455,50 +11026,133 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Nome de uma camada de entrada"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Obt�m coordenadas a partir da entrada padr�o"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 #, fuzzy
 msgid "Assign unique categories to new points"
 msgstr "Designar categorias �nicas para os novos pontos (opera��o = n�s)"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "Tipo desconhecido"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Mapa vetor dos pontos finais"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Cor da Linha"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "Tipo desconhecido"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "N�o consegui ler linha %i\n"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "N�o consigo inserir na tabela: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "N�o consegui abrir mapa raster [%s]."
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "N�o consegui criar arquivo raster [%s]."
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Tabela <%s> n�o existe no banco de dados <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "O vetor '%s' j� existe."
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "O vetor '%s' j� existe."
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "N�o conseguir abrir banco de dados %s com driver %s"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "N�o consegui abrir arquivo de sa�da <%s>."
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "N�o consegui abrir mapa raster [%s]."
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "N�o consegui abrir arquivo de sa�da <%s>."
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10632,7 +11286,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d dist�ncias lidas do mapa."
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "N�o consegui calcular �rea do centr�ide."
@@ -10750,7 +11404,7 @@ msgstr "Conex
 msgid "Key column type is not integer"
 msgstr "Coluna chave deve ser inteiro"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "N�o consegui selecionar dados da tabela"
@@ -11583,7 +12237,7 @@ msgstr "Usar estilo de arquivo .prj da ESRI (aplic
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "Usar estilo de arquivo .prj da ESRI (aplic�vel somente a sa�da SHAPE)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11848,8 +12502,8 @@ msgstr "Localiza
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Vari�ncia da soma"
@@ -11859,7 +12513,7 @@ msgstr "Vari
 msgid "Mapset containing input vector map"
 msgstr "Nome do mapa vetorial (2d) de entrada"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Salva quadro atual"
@@ -11869,7 +12523,7 @@ msgstr "Salva quadro atual"
 msgid "Name of input vector map to re-project"
 msgstr "Nome do Raster de entrada"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Caminho para o banco de dados GRASS da loca��o de entrada"
 
@@ -11884,8 +12538,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "�rea\n"
@@ -11918,17 +12572,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Mapa raster de entrada"
@@ -12297,241 +12953,408 @@ msgstr ""
 "tabela: %s\n"
 "coluna chave: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Converte um mapa vetorial bin�rio do GRASS pela combina��o de outros camadas "
 "de mapa vetorial."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "Mapa de sa�da no qual os erros ser�o gravados"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "N�o criar topologia (topology) no modo de pontos"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "N�o criar tabela de atributo."
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 #, fuzzy
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 "Tamb�m copiar tabela de atributos. Apenas a tabela da camada 1 � suportada "
 "atualmente"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Tabela faltando"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "Colunas chave diferem"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr "N�mero de colunas difere."
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 #, fuzzy
 msgid "Column names differ"
 msgstr "Nomes das colunas diferem."
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "Tipos das colunas diferem"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "Comprimento das colunas de texto difere"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Coluna chave n�o encontrada"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "Mapas de sa�da n�o � 3D."
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "N�o consegui abrir arquivo de sa�da <%s>."
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, fuzzy, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "Erro lendo arquivo '%s'. Alguns dados podem n�o estar corretos\n"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Lendo arquivo dig_att...\n"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 #, fuzzy
 msgid "Intersections at borders will have to be snapped"
 msgstr "Interse��es nas bordas ser�o ligadas."
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 #, fuzzy
 msgid "Lines common between files will have to be edited"
 msgstr "Linhas comuns aos arquivos ter�o que ser editadas."
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 #, fuzzy
 msgid "The header information also may have to be edited"
 msgstr "A informa��o do cabe�alho tamb�m pode ter que ser editada."
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d registros atualizados"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "N�o consegui abrir cursor de sele��o: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "N�o consegui obter linha"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Tipo da coluna desconhecido"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "N�o consegui inserir novo registro: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+#, fuzzy
+msgid "Over-riding projection check"
+msgstr "Fonte"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Arquivo de entrada DXF"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "Imprime apenas a regi�o do mapa raster"
+msgid "Layer number to store return information as category"
+msgstr "Camada n�mero"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
 #, fuzzy
-msgid "Subregion"
-msgstr "Regi�o\n"
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Camada para"
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "Imprime apenas a regi�o do mapa raster"
+
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 #, fuzzy
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Importar apenas subregi�o (xmin,ymin,xmax,ymaz  - normalmente W,S,E,N)"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Nome da nova loca��o a criar"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+#, fuzzy
+msgid "Filter range for z data (min,max)"
+msgstr "Intervalo de inteiro: min,max"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "valores inteiros s�o importados"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "valores inteiros s�o importados"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Mostra hist�rico do vetor ao inv�s de informa��es"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Nome do mapa de pontos de sa�da"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+msgid "Layer number or name for mask option"
+msgstr "Nome do arquivo vetor de entrada"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Correla��o"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Escrevendo [%s]..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Nome da nova loca��o a criar"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Mostra hist�rico do vetor ao inv�s de informa��es"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "N�o atualizar a regi�o atual"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Vetor de entrada com pontos de treinamento"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Estender loca��o baseado nos novos dados"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "T�tulo do raster de sa�da"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "N�o consegui unidades de proje��o da loca��o atual"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Mapa raster [%s] n�o encontrado"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "N�o criar tabela de atributo."
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Tipo desconhecido"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Camada n�mero"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 #, fuzzy
 msgid "4 parameters required for 'spatial' parameter"
 msgstr " 4 par�metros s�o requeridos para o par�metro 'spatial'."
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12539,129 +13362,172 @@ msgstr ""
 "N�o consegui converter a proje��o do mapa de entrada para o formato do "
 "GRASS, n�o posso criar nova loca��o."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "N�o consegui criar a tabela %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "Loca��o: %s\n"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "O vetor '%s' j� existe."
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"N�o consegui converter a proje��o do mapa de entrada para o formato do GRASS "
-"para verifica��o"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-#, fuzzy
-msgid "Over-riding projection check"
-msgstr "Fonte"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-#, fuzzy
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Escrevendo [%s]..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Proje��o dos dados de entrada e loca��o atual parecem combinar.\n"
-"Continuando com a importa��o...\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-#, fuzzy
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "Loca��o: %s\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d pontos carregados\n"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-#, fuzzy
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "Loca��o: %s\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d pontos carregados\n"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "Coordenadas de entrada n�o foram informadas"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-#, fuzzy
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Considere gerar uma nova loca��o com o par�metro 'location' do dado de "
-"entrada.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-#, fuzzy
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"Proje��o dos dados de entrada e loca��o atual parecem combinar.\n"
-"Continuando com a importa��o...\n"
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:738
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "O vetor '%s' j� existe."
+msgid "%llu input points were filtered out by return number"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:740
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "N�o conseguir abrir banco de dados %s com driver %s"
+msgid "%llu input points were filtered out by class number"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:742
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Escrevendo [%s]..."
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:744
+#, c-format
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
 msgstr "%d pontos carregados\n"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "%d input points were not valid"
+msgid "%lu points imported"
+msgstr "%d pontos carregados\n"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
 msgstr "Coordenadas de entrada n�o foram informadas"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were filtered out by return number"
 msgstr "%d pontos al�m do limite"
 
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Coordenadas para pesquisa"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "N�o consegui abrir mapa raster [%s]."
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "N�o conseguir abrir banco de dados %s com driver %s"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12671,22 +13537,22 @@ msgstr ""
 "Converte um mapa vetorial bin�rio do GRASS pela combina��o de outros camadas "
 "de mapa vetorial."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "Camada '%s' n�o dispon�vel"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "N�o consegui executar: %s"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "O vetor '%s' j� existe."
@@ -12696,12 +13562,12 @@ msgstr "O vetor '%s' j
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Nome do arquivo de sa�da"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Arquivo raster para importar"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12713,25 +13579,29 @@ msgstr ""
 "\t\tArquivo shape ESRI: nome do arquivo\n"
 "\t\tArquivo do MapInfo: nome do arquivo"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Lista camadas dispon�veis na fonte dos dados e finaliza"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Lista camadas dispon�veis na fonte dos dados e finaliza"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12781,7 +13651,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Coordenadas inv�lidas %s %s"
+msgstr "N�mero de colunas"
 
 #: ../vector/v.delaunay/main.c:88
 #, fuzzy
@@ -12928,148 +13798,148 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "N�o exibir n�meros de categorias"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Mostra atributos do vetor"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "Op��o escala requer 'magnitude_map'"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' deve ser > 0 para 'cats'."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "A toler�ncia foi reajustada para %g (unidades de mapa)"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Nome ilegal do arquivo de sa�da"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Toler�ncia em unidades de mapa: %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "N�o consegui selecionar dados da tabela"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, fuzzy, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Atributo tem tamanho inv�lido (%.3f) para a categoria %d."
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Toler�ncia em unidades de mapa: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Encontrando classes de treinamento..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "Construindo �ndice espacial ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "Rotacionando dados ... "
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "N�o consegui calcular �rea do centr�ide."
@@ -13345,36 +14215,45 @@ msgstr "Nome do arquivo de sa
 msgid "%d features written to '%s'."
 msgstr "%d pontos escritos no vetor"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Loca��o: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "N�mero de pontos de entrada: %d."
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Calculando m�dias das classes ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Calculando m�dias das classes ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13436,7 +14315,7 @@ msgstr "%s=%s - n
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -14120,7 +14999,7 @@ msgstr "Sem registro na tabela para categoria '%d'"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14432,48 +15311,58 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "Mostra atributos do vetor"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "de SQL instru��o palavra-chave"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Delimitador vertical de registro na sa�da"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Regi�o\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Altura fixa para objetos vetoriais 3D"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "n�o consegui abrir arquivo de vetores <%s> em <%s>"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "N�o consegui abrir cursor de sele��o"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "N�o encontrei linha com cat %s"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "N�o exibir n�meros de categorias"
@@ -14515,46 +15404,50 @@ msgstr "N
 msgid "Add new vertices, but do not split"
 msgstr "criando novo arquivo cats ..."
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Escrever v�rtices da linha"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Suaviza��o deve ser um valor positivo"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Tipo da coluna desconhecido"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s:em %s: %s"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s:em %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "N�mero de classes deve ser < 256!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
@@ -14677,7 +15570,9 @@ msgstr "
 msgid "Number of vertex points per grid cell"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Tipo de fei��o"
@@ -14781,10 +15676,13 @@ msgid "Writing out vector columns..."
 msgstr "Escrevendo [%s]..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14796,6 +15694,7 @@ msgstr "Inporta
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14959,8 +15858,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr "Deslocamento do r�tulo na dire��o Y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Nome da Fonte"
 
@@ -15039,6 +15939,130 @@ msgstr "Encontrando classes de treinamento..."
 msgid "Counting points quadrats..."
 msgstr "Contando locais no quadrado..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Assinaturas para usar na classifica��o"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "M�ximo valor aleat�rio"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Desvio padr�o"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -15053,29 +16077,29 @@ msgstr "Informa
 msgid "Target location <%s> not found"
 msgstr "regi�o <%s> n�o encontrada"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Grupo [%s] destinado para loca��o [%s], mapset [%s]\n"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "[%s] n�o encontrado."
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15429,11 +16453,6 @@ msgstr "de 
 msgid " Database connection not defined for layer <%s>"
 msgstr "Conex�o com banco de dados n�o definida para camada <%d>"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "tipo de coluna n�o suportado"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -15521,17 +16540,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d registros atualizados"
 msgstr[1] "%d registros atualizados"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "banco de dados"
+msgid "Name of OGR datasource to be imported"
+msgstr "Arquivo raster para importar"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15542,7 +16562,7 @@ msgstr ""
 "\t\tShapefile ESRI: diret�rio contendo shapefiles\n"
 "\t\tArquivo MapInfo: diret�rio contendo arquivos mapinfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 #, fuzzy
 msgid "OGR layer name. If not given, all available layers are imported"
@@ -15550,7 +16570,7 @@ msgstr ""
 "Vetor de sa�da, se n�o for fornecido, camadas dispon�veis ser�o apenas "
 "mostradas"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15561,55 +16581,55 @@ msgstr ""
 "\t\tArquivo shape ESRI: nome do arquivo\n"
 "\t\tArquivo do MapInfo: nome do arquivo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Mapa de entrada: tamanho m�nimo de bacias de drenagem exteriores"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 #, fuzzy
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 "Tamanho m�nimo da �rea a importar (unidades quadradas). �reas menores e "
 "ilhas ser�o ignoradas. Deve ser maior que snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "N�o pontos"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Limite de 'snap' para contornos. -1 para n�o haver snap"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15617,186 +16637,188 @@ msgstr ""
 "Lista de nomes de colunas para usar no lugar dos nomes originais, o primeiro "
 "ser� usado para a coluna categoria"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Erro na leitura do arquivo de categorias para <%s>."
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Nome da coluna de atributo para usar como r�tulos"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "N�mero de colunas"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "%-5d categorias de pontos lidas\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Mostra oso formatos suportados e encerra"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Lista camadas dispon�veis na fonte dos dados e finaliza"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "N�o limpar pol�gonos (opera��o n�o recomendada)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "For�ar sa�da de valores inteiros"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "N�o consegui unidades de proje��o da loca��o atual"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "mostra os par�metros de conex�o atuais e finaliza"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "N�o consegui abrir mapa raster <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Posi��o do cursor n�o � suportada pelo driver MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Camada '%s' n�o dispon�vel"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Dist�ncia do buffer (em unidades do mapa)"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Coluna chave '%s' n�o encontrada"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Coluna chave deve ser inteiro"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 "Escrevendo coluna <%s> com largura fixa de 40 caracteres (pode ser truncado)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, fuzzy, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 "Escrevendo coluna <%s> com largura fixa de 40 caracteres (pode ser truncado)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, fuzzy, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15805,58 +16827,58 @@ msgstr ""
 "Largura da coluna '%s' ajustada para 255 (n�o foi especificada pelo OGR), "
 "alguns textos podem ser truncados!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, fuzzy, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 "Escrevendo coluna <%s> com largura fixa de 40 caracteres (pode ser truncado)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Tipo da coluna n�o suportado (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Importanto fei��es do mapa %d..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s sem geometria"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Rotacionando dados ... "
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15868,117 +16890,117 @@ msgstr ""
 "linha na tabela de atributos. O n�mero de fei��es para essas �reas est� "
 "armazenado com categoria na camada %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d pol�gonos de entrada\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, fuzzy, c-format
 msgid "%d input polygons"
 msgstr "%d pol�gonos de entrada\n"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Centr�ide da �rea sem categoria"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Centr�ide da �rea sem categoria"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Limite de 'snap' para contornos. -1 para n�o haver snap"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Entrada falhou"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "n�o."
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "em"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -16209,6 +17231,11 @@ msgstr ""
 "Conex�o com banco de dados n�o definida para a camada [%d]. Execute v.db."
 "connect"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Arquivo de c�lulas [%s] n�o encontrado"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16379,19 +17406,19 @@ msgstr "A op
 msgid "Querying database... "
 msgstr "Procurando no banco de dados ..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "N�o consegui obter linha"
@@ -16584,14 +17611,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "O vetor '%s' j� existe."
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists"
 msgstr "O vetor '%s' j� existe."
@@ -16729,14 +17756,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Designar categorias �nicas para os novos pontos (opera��o = n�s)"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Cria pontos ao longo das linhas de entrada"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "N�o consegui encontrar o mapa de entrada <%s>"
 msgstr[1] "N�o consegui encontrar o mapa de entrada <%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -17263,19 +18295,24 @@ msgstr "Fonte inv
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17289,6 +18326,7 @@ msgstr "Fonte inv
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17301,7 +18339,7 @@ msgstr "Fonte inv
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17467,6 +18505,7 @@ msgid "Unable to map image file"
 msgstr "N�o consegui abrir arquivo de imagem"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17484,14 +18523,14 @@ msgstr "N
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17530,6 +18569,58 @@ msgstr "N
 msgid "Using private colormap for DirectColor visual."
 msgstr "Usando paleta de cores privativa para visual DirectColor."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Exibe escala gr�fica no monitor do GRASS"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Lista de curvas de n�vel"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Criar novo arquivo caso este n�o exista."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Remove todas os quadros e limpa a tela"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "para padr�o atual Pesquisa"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Mostra a extens�o da regi�o atual"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+"Posi��o da tela a partir da qual o texto ser� desenhado (porcentagem, [0,0] "
+"� o canto inferior direito)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17548,7 +18639,7 @@ msgstr "transformar para"
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17561,7 +18652,7 @@ msgstr "transformar para"
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17638,18 +18729,23 @@ msgstr ""
 "Atualizar na tabela os valores do raster nas posi��es dos pontos vetoriais"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17664,6 +18760,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17762,6 +18859,93 @@ msgstr "Porcentagem de mapear"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Converte um mapa raster 3D em mapas raster 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Nome do novo arquivo raster"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "N�mero de c�pias"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Mapa raster de entrada"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17899,7 +19083,7 @@ msgstr "<%s> criados na base de dados."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17913,8 +19097,8 @@ msgid "rename"
 msgstr "nome=%s\n"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17924,9 +19108,9 @@ msgid "input"
 msgstr "Mapa de entrada"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17942,6 +19126,79 @@ msgstr "quieto"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "N�o consegui encontrar o arquivo vetorial %s"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Produz um mapa vetorial bin�rio do GRASS, com as curvas especificadas a "
+"partir de uma camada raster do GRASS."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Contraste"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Incremento entre curvas de n�vel"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Lista de curvas de n�vel"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Curva de n�vel m�nima"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Curva de n�vel m�xima"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "N�mero m�nimo de pontos para uma curva de n�vel (0 -> sem limite)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Mapa raster de entrada"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "N�o criar tabela de atributo."
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17950,7 +19207,7 @@ msgstr "Mostra os arquivos raster na loca
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -18008,8 +19265,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -18125,74 +19383,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Nome do novo arquivo raster"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Nome do raster de sa�da"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Nome do raster de sa�da"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -18227,11 +19454,11 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Nome do novo arquivo raster."
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
@@ -18240,38 +19467,21 @@ msgstr ""
 "#-#-#-#-#  grassmods_pt_br.po (grassmods_pt_br)  #-#-#-#-#\n"
 "Nome do mapa raster de entrada"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "N�mero de c�pias"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Mapa raster de entrada"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18371,8 +19581,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Nome do arquivo de sa�da"
+msgid "Name for output image (or text file for -t)"
+msgstr "Nome de um arquivo para gravar a sa�da do relat�rio"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18389,6 +19599,54 @@ msgstr "Usar coordenadas do mapa ao inv
 msgid "Use gnuplot for display"
 msgstr "Texto para exibir"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Arquivo KeyFrame de sa�da"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Lista separada por v�rgulas, p.ex.: 1.4,3.8,13"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Nome de um arquivo para gravar a sa�da do relat�rio"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "<%s> criados na base de dados."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "N�mero de c�pias"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Mapa raster de sa�da"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18421,32 +19679,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Estender loca��o baseado nos novos dados"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "N�o consegui unidades de proje��o da loca��o atual"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18646,6 +19882,20 @@ msgstr "N
 msgid "Output field separator"
 msgstr "Separador de campo"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Converte um mapa raster 3D em mapas raster 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 #, fuzzy
 msgid "Displays a raster map and its legend on a graphics window"
@@ -18751,8 +20001,15 @@ msgstr "<%s> criados na base de dados."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Nome do novo arquivo raster."
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "%s=%s - nome ilegal"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Nome de um mapa raster existente"
@@ -18763,7 +20020,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr "acima para mapear"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18772,15 +20029,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Nome do novo arquivo raster."
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18831,7 +20088,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Substitui o conte�do do quadro ativo com a cor definida pelo usu�rio"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Nome do arquivo de sa�da"
 
@@ -18912,16 +20169,27 @@ msgstr "Nome de uma camada de entrada"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "T�tulo do raster de sa�da"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Converte um mapa raster 3D em mapas raster 2D"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18998,12 +20266,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -19135,17 +20410,15 @@ msgid ""
 "co1+col2)"
 msgstr "para para para em"
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 #, fuzzy
 msgid "Redraws the content of currently selected monitor."
 msgstr "Mostra a extens�o da regi�o atual"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Lista de curvas de n�vel"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 msgid ""
 "Create a 3D raster map from an assemblage of many coordinates using "
@@ -19153,12 +20426,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "Mostra as estat�sticas em estilo shell script"
@@ -19174,7 +20447,7 @@ msgid "ASCII file containing input data"
 msgstr "Arquivo ASCII contendo assinaturas espectrais"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "Relat�rio de estat�sticas para mapas raster."
@@ -19183,14 +20456,14 @@ msgstr "Relat
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Tipo de armazenamento para o mapa resultante"
 
@@ -19235,18 +20508,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Fator de escala para os valores da coluna de atributos"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Porcentagem do mapa para manter em mem�ria"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "Formato para relatar a declividade"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -19287,19 +20560,15 @@ msgid ""
 "on the fly."
 msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Arquivo raster para importar"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Gera um mapa das �reas problem�ticas"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Alinhar a regi�o atual pelo mapa de entrada"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19402,7 +20671,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19490,24 +20759,18 @@ msgstr "Mostra os arquivos raster na loca
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "N�mero de c�pias"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Nome do mapa raster"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Mapa raster de entrada"
@@ -19627,17 +20890,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "N�mero de pontos de interpola��o"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19645,10 +20912,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19769,78 +21032,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Nome da nova loca��o a criar"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Lista camadas dispon�veis e finaliza"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Lista camadas dispon�veis e finaliza"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Lista camadas dispon�veis e finaliza"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "local do banco de dados"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "tabelas do sistema ao inv�s de tabelas do usu�rio"
@@ -19959,10 +21238,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -20020,6 +21295,61 @@ msgstr "Teste banco de dados banco de dados."
 msgid "Test name"
 msgstr "Nome da Tabela"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Converte um mapa raster 3D em mapas raster 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Nome da coluna de atributo para usar como r�tulos"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+#, fuzzy
+msgid "Smooth corners of area features"
+msgstr "Cantos suaves"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Incremento para a coordenada Z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Escreve valores raster como coordenada z. N�o cria tabela. Atualmente s� "
+"suporta pontos."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "N�o criar topologia (topology) no modo de pontos"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Usa valores do raster como categorias em vez de uma seq��ncia �nica (apenas "
+"CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -20090,6 +21420,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Tipo de fei��o"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Mostra oso formatos suportados e encerra"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -20269,20 +21610,26 @@ msgid "Description of the space time dataset"
 msgstr "Nome do novo arquivo raster."
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nome do novo arquivo raster."
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20326,13 +21673,13 @@ msgstr "Altura fixa para objetos vetoriais 3D"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Camada n�mero"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20415,7 +21762,7 @@ msgstr "Mostra os arquivos raster na loca
 msgid "Neighborhood size"
 msgstr "Tamanho da vizinhan�a"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "N�mero de pontos de interpola��o"
@@ -20519,24 +21866,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Resolu��o do mapa de sa�da"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "T�tulo para o mapa resultante"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Resolu��o"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Nome ilegal do arquivo de sa�da"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "N�o executar otimiza��o do corte da regi��o"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Coordenadas do mapa"
@@ -20607,17 +21971,37 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "de pontos para"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "coluna(s)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Nome do mapa raster"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "coluna(s)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Nome da coluna de atributo para usar como r�tulos"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Dist�ncia do buffer (em unidades do mapa)"
@@ -20712,6 +22096,7 @@ msgstr "Valor do raster"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20727,10 +22112,15 @@ msgstr "Valor dos padr
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "Valor do raster"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20848,28 +22238,23 @@ msgid ""
 msgstr ""
 "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "Mapa raster a ser amostrado"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "<%s> criados na base de dados."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Converte um mapa raster 3D em mapas raster 2D"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Propagar NULL"
 
@@ -20908,7 +22293,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "Gera um mapa raster com �reas cont�guas acrescidas de uma c�lula"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20923,7 +22308,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Raio do buffer"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "M�trica"
 
@@ -20941,12 +22326,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Converte um mapa raster 3D em mapas raster 2D"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20972,7 +22357,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "em"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -21001,6 +22386,16 @@ msgstr "Par
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "em"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Loca��o: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -21011,20 +22406,11 @@ msgstr "atributo de mapear"
 msgid "Vector map to which to join other table"
 msgstr "N�o criar tabela de atributo."
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Camada para"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "coluna(s)"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -21053,17 +22439,17 @@ msgstr "N
 msgid "Imports space time raster dataset."
 msgstr "Nome do mapa raster que conter� os resultados"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Alinhar a regi�o atual pelo mapa de entrada"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "O vetor '%s' j� existe."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -21146,14 +22532,17 @@ msgstr "Mapa raster 3D <%s> n
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -21184,12 +22573,12 @@ msgstr "N
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "N�o consegui escrever em <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 #, fuzzy
 msgid "Error while reading history file"
 msgstr "Erro na leitura do arquivo de assinaturas."
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -21197,8 +22586,8 @@ msgstr "N
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "Erro lendo coringa."
@@ -21252,6 +22641,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "N�o consegui criar arquivo [%s]"
@@ -21404,9 +22794,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Cor da Borda"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21433,7 +22824,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
@@ -21498,6 +22892,141 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Varredura mapear"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Calculando m�dias das classes ..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "RGB"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "mapa vetorial <%s> n�o encontrado"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Calculando m�dias das classes ..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Nome do mapa de pontos vetorias para editar a tabela de atributos"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nome do mapa raster"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Nome do Raster de sa�da"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Nome do mapa raster que conter� os resultados"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s:em %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "M�todo de intepola��o a usar"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Mapa(s) de entrada n�o especificado(s)."
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Nome do banco de dados de entrada"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "N�mero de itera��es m�ximas"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "N�mero de itera��es m�ximas"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "N�mero de c�pias"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "N�o consegui descrever a tabela %s"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Erro na leitura do mapa raster de entrada."
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21631,11 +23160,11 @@ msgstr "N
 msgid "3D raster map for which to modify null values"
 msgstr "Mapa 3dcell para modificar valores nulos"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Lista de valores de c�lula para marcar como NULO"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "O valor que substitui o valor nulo"
 
@@ -21663,7 +23192,7 @@ msgstr "modifyNull: erro limpando mosaico."
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: erro fechando arquivo tmp"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "vetor, metadados"
@@ -21673,6 +23202,84 @@ msgstr "vetor, metadados"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Explicitamente cria o arquivo bitmap 3D com valores NULL"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "Valor do raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Cria mapas raster a partir de arquivos de linhas e pol�gonos ASCII no "
+"diret�rio atual."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Mapa raster dos pontos iniciais"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Mapa raster 3D <%s> n�o encontrado"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Escrevendo [%s]..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Mapa 3dcell para modificar valores nulos"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Incremento para a coordenada Z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "N�o consegui escrever o arquivo tempor�rio."
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21732,13 +23339,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Intervalo dos dados de sa�da"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Editar arquivo de categorias para [%s]?"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, fuzzy, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Arquivo de cores para [%s] atualizado."
@@ -21798,7 +23405,7 @@ msgstr "Erro na leitura do mapa raster de entrada."
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Erro fechando arquivo VTK-ASCII"
@@ -22196,7 +23803,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "Valores de mapa incorretos. Valores devem estar entre 0 e 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, fuzzy, c-format
 msgid "Unknown method <%s>"
@@ -22206,7 +23813,7 @@ msgstr "M
 msgid "Aggregate operation"
 msgstr "Agregar"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -22242,6 +23849,38 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "N�o consegui alocar buffer de c�lulas."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Vari�ncia"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "Combina camadas vermelhas, verdes e azuis numa �nica camada composta."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Nome do Raster de sa�da"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Tamanho do cache de pontos"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "N�o consegui alocar mem�ria."
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Escrevendo arquivo raster %i\n"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22587,38 +24226,38 @@ msgstr "Mostra as estat
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22916,13 +24555,13 @@ msgid "Unknown operation '%s'"
 msgstr "Tipo desconhecido"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Loca��o: %s\n"
@@ -22995,8 +24634,8 @@ msgstr "solicitado"
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "O vetor '%s' j� existe."
+msgid "<%s> already exists. File not copied."
+msgstr "em"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -23117,8 +24756,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -23385,9 +25024,9 @@ msgstr "Lista de camadas para importar"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Valor do raster"
@@ -23402,16 +25041,16 @@ msgstr "mapear Pesquisa padr
 msgid "File name exclusion pattern (default: none)"
 msgstr "mapear Pesquisa padr�o todos"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 #, fuzzy
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "de"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 #, fuzzy
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "de"
@@ -23422,7 +25061,7 @@ msgid "Remove base raster maps"
 msgstr "Mapa raster de cobertura"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
@@ -23468,82 +25107,72 @@ msgstr "em atual."
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr "Listas dispon�vel de para."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr "mapear Pesquisa padr�o todos"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr "mapear Pesquisa padr�o todos"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "para padr�o atual Pesquisa"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Nome de padr�o atual"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Definir regi�o atual pela regi�o designada"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "Imprime apenas o tipo do mapa raster"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "Suprimir impress�o de cabe�alho"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 #, fuzzy
 msgid "Verbose listing (also list map titles)"
 msgstr "mapear"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Mapa raster [%s] n�o encontrado"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "N�o consegui escrever em <%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "n�o consegui abrir arquivo de vetores <%s> em <%s>"
@@ -23760,51 +25389,51 @@ msgstr "N
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Fonte inv�lida: %s"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "N�o consegui ajustar par�metros de proje��o lat/long"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Erro em pj_do_proj (proje��o das coordenadas de entrada)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 #, fuzzy
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
@@ -23813,7 +25442,7 @@ msgstr ""
 "Sa�da WGS84 n�o � poss�vel pois esta loca��o n�o cont�m\n"
 "par�metros de transforma��o do .datum. Execute g.setproj"
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -24033,38 +25662,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Arquivo raster para importar"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -24383,11 +26033,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Meu primeiro m�dulo raster."
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "Nome do mapa de pontos de sa�da"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24561,7 +26206,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 #, fuzzy
 msgid "Percent complete..."
 msgstr "Porcentagem completada: "
@@ -24985,7 +26630,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -25193,157 +26838,157 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Reprojeta um mapa raster de uma loca��o para a loca��o atual."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Localiza��o do mapa de entrada"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Nome do mapa vetorial (2d) de entrada"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "Nome do Raster de entrada"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Resolu��o do mapa de sa�da"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Imprime a regi�o atual (no estilo de script em shell)"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "Mapa de Entrada: localiza��o das depress�es reais"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Grupo [%s] destinado para loca��o [%s], mapset [%s]\n"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Arquivo de vetores [%s] n�o est� dispon�vel"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "Grupo [%s] destinado para loca��o [%s], mapset [%s]\n"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "Mapa de entrada"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, fuzzy, c-format
 msgid "Cols: %d (%d)"
 msgstr "classe %d (%d)\n"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, fuzzy, c-format
 msgid "Rows: %d (%d)"
 msgstr "Grupo:    %s\n"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr "N� %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr "N� %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr "N� %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 #, fuzzy
 msgid "Output:"
 msgstr "Sa�da de mapa"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "Imprimindo ... "
@@ -25402,12 +27047,6 @@ msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 "Permite a cria��o e/ou modifica��o dos arquivos de suporte dos mapas raster"
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "T�tulo para o mapa resultante"
-
 #: ../raster/r.support/main.c:81
 #, fuzzy
 msgid "Text to use for map data units"
@@ -25438,22 +27077,22 @@ msgstr "Mapa raster de entrada"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] � uma reclassifica��o de outro mapa. Saindo."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Escrevendo novo arquivo de nulos para [%s]..."
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Apagando arquivo de nulos para [%s]   \n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Conclu�do."
 
@@ -26255,7 +27894,7 @@ msgstr "'layer' deve ser > 0 para 'cats'."
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "N�o consegui abrir o arquivo %s"
@@ -26476,8 +28115,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Editar arquivo de categorias para [%s]?"
@@ -26567,12 +28206,12 @@ msgstr "N
 msgid "Can't get cell header"
 msgstr "N�o consegui criar camada"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, fuzzy, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "Alterado para"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, fuzzy, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "Alterado para"
@@ -26769,18 +28408,13 @@ msgstr ""
 "N�mero de linhas do cabe�alho para pular no come�o do arquivo de entrada "
 "(escritas no hist�rico do mapa)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-#, fuzzy
-msgid "Filter range for z data (min,max)"
-msgstr "Intervalo de inteiro: min,max"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26809,7 +28443,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr "Especifique uma coluna z razo�vel."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "Fonte inv�lida: %s"
@@ -26819,15 +28453,15 @@ msgstr "Fonte inv
 msgid "Invalid vrange"
 msgstr "Fonte inv�lida: %s"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26849,7 +28483,7 @@ msgid "Reading input data..."
 msgstr "\rLendo arquivo [%s] ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, fuzzy, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "classe %d (%d)\n"
@@ -26892,17 +28526,17 @@ msgstr "N
 msgid "Writing to output raster map..."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "%d pontos fora da regi�o atual."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 #, fuzzy
 msgid "Scanning data ..."
 msgstr "Rotacionando dados ... "
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -27062,11 +28696,6 @@ msgstr "Nome do Raster de sa
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "para"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Tipo de fei��o"
-
 #: ../raster/r.out.gdal/main.c:202
 #, fuzzy
 msgid "Creation option(s) to pass to the output format driver"
@@ -27629,106 +29258,111 @@ msgstr "Coordenada Leste ilegal <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Aten��o fora"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "Nome do Raster de entrada"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Mapa 3dcell para modificar valores nulos"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 #, fuzzy
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Explicitamente cria o arquivo bitmap 3D com valores NULL"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 #, fuzzy
 msgid "Remove NULL-value bitmap file"
 msgstr "Explicitamente cria o arquivo bitmap 3D com valores NULL"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "valor ilegal para NULO"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "O vetor '%s' j� existe."
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "%s: ERRO n�o consegui abrir tempfile"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "%s: ERRO n�o consegui abrir tempfile"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "Mapa raster dos pontos iniciais"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Escrevendo novo arquivo de nulos para [%s]..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "mapa raster <%s> n�o encontrado"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Apagando arquivo de nulos para [%s]   \n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s=%s - nome ilegal"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, fuzzy, c-format
 msgid "%s: illegal value spec"
 msgstr "%s=%s - nome ilegal"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Escrevendo arquivo raster %i\n"
@@ -28072,7 +29706,7 @@ msgstr "Arquivo ASCII contendo assinaturas espectrais"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Tipo de fei��o"
+msgstr "T�tulo do raster de sa�da"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -28157,91 +29791,180 @@ msgstr "Imprimindo ... "
 msgid "File <%s> created"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Cria mapas raster a partir de arquivos de linhas e pol�gonos ASCII no "
 "diret�rio atual."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Arquivo contendo declara��es SQL"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Intervalo de inteiro: min,max"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Relat�rio de estat�sticas para mapas raster."
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Ajustar a regi�o coincidente com esse mapa raster"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Mapa raster [%s] n�o encontrado"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Tipo desconhecido"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Fonte inv�lida: %s"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Rotacionando dados ... "
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "N�o consegui abrir arquivo vetorial <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "Escrevendo [%s]..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Gera um mapa raster com �reas cont�guas acrescidas de uma c�lula"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Nome de uma camada de sa�da"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "M�xima dist�ncia entre pontos (em unidades do mapa)"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Dist�ncia m�xima do ponto para a rede"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "Duas camadas devem ser especificadas"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "M�trica desconhecida: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "M�xima dist�ncia entre pontos (em unidades do mapa)"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -28390,7 +30113,7 @@ msgstr "[%s]: cor n
 msgid "Converting <%s>..."
 msgstr "Escrevendo [%s]..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "O vetor '%s' j� existe."
@@ -28502,7 +30225,7 @@ msgid "There are no valid locations in the current region"
 msgstr "N�o atualizar a regi�o atual"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -29105,7 +30828,7 @@ msgstr "[%s]: cor n
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29565,7 +31288,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Mostra as estat�sticas em estilo shell script"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29587,11 +31310,6 @@ msgstr "M
 msgid "Unable to write to temp file"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Escrevendo [%s]..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29712,7 +31430,7 @@ msgid "Writing output raster map..."
 msgstr "Escrevendo arquivo raster %i\n"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -29723,42 +31441,42 @@ msgstr "Escrevendo arquivo raster %i\n"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Gera estat�sticas areais para os mapas raster."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Coordenadas N e E de um ponto de partida"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Coordenada Leste ilegal <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Coordenada norte ilegal <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Aten��o fora"
@@ -29851,24 +31569,24 @@ msgid "Invalid map type"
 msgstr "Fonte inv�lida: %s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, fuzzy, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "Fechando Mapas."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, fuzzy, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 "\n"
 "SE��O %d: Determina��o de divisores."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, fuzzy, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "de Mem�ria."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, fuzzy, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "de Por cento Concluir "
@@ -29981,25 +31699,25 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 #, fuzzy
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "Por cento:"
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "Por cento:"
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -30007,8 +31725,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -30566,185 +32284,190 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "<return> seguinte � Bloqueio mapear."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Mapa de entrada"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Nome do Raster de entrada"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Mapa de Entrada: quantidade de fluxo superficial por c�lula"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Nome dos mapas raster de entrada"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Mapa de entrada: terreno bloqueando fluxo superficial, para USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Mapa de entrada: tamanho m�nimo de bacias de drenagem exteriores"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Valor de entrada: comprimento m�ximo para fluxo superficial, para USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Mapa de sa�da: n�mero de c�lulas que drenam atrav�s de cada c�lula"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Mapa de sa�da: um valor �nico � dado para cada meia-bacia"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 "Sa�da de mapa: fator de comprimento do declive e declividade (LS) para USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Sa�da de mapa: fator de comprimento de declividade (S) para USLE"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Fator de convers�o para os valores de z"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Permitir apenas fluxo horizontal e vertical de �gua"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Habilita op��o de swap em disco: Opera��o � lenta"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 #, fuzzy
 msgid "Sorry, you must choose an output map."
 msgstr "mapear."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "Suaviza��o deve ser um valor positivo"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30755,17 +32478,17 @@ msgstr ""
 " fluxo\n"
 " limiar limiar."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Tipo da coluna n�o suportado"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -30776,23 +32499,23 @@ msgstr[1] ""
 "\n"
 "SE��O 1 iniciando: Inicializando vari�veis. %d se��es no total."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "de Por cento Concluir "
@@ -30802,22 +32525,32 @@ msgstr "de Por cento Concluir "
 msgid "Closing accumulation map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Mapa raster de cobertura"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Mapa raster de cobertura"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Mapa raster de cobertura"
@@ -30850,33 +32583,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "Mapa raster a ser amostrado"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Gera uma camada raster mostrando as sub-bacias de drenagem."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 #, fuzzy
 msgid "Aggregation method"
 msgstr "Agregar"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, fuzzy, c-format
 msgid "Unable to read color table for %s"
 msgstr "N�o consegui ler arquivo de cores."
@@ -31292,7 +33025,7 @@ msgstr "argumento val 
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "argumento val � necess�rio para mapas de ponto flutuante!"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - cor desconhecida\n"
@@ -31710,7 +33443,7 @@ msgstr ""
 "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31725,12 +33458,24 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -32032,34 +33777,34 @@ msgstr "Abrir mapear profundidade"
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "Mapas de entrada devem ser do mesmo tipo. CELL, FCELL ou DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "N�o exibir n�meros de categorias"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, fuzzy, c-format
 msgid "Pass number %d"
 msgstr "Camada n�mero"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Rotuladas %d linhas"
 msgstr[1] "Rotuladas %d linhas"
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 #, fuzzy
 msgid "Thinning completed successfully."
 msgstr "Transformada bem sucedida"
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -32371,32 +34116,12 @@ msgstr ""
 "Produz um mapa vetorial bin�rio do GRASS, com as curvas especificadas a "
 "partir de uma camada raster do GRASS."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Incremento entre curvas de n�vel"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Lista de curvas de n�vel"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Lista de curvas de n�vel"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Curva de n�vel m�nima"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Curva de n�vel m�xima"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "N�mero m�nimo de pontos para uma curva de n�vel (0 -> sem limite)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32990,55 +34715,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Mapa raster ao qual alinhar"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Arquivo cont�m assinaturas resultantes"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Semente para gera��o de n�mero aleat�rio"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Escrevendo [%s]..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "Par�metros do agrupamento\n"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "Tipo desconhecido: %c"
@@ -33088,81 +34814,81 @@ msgstr "Tipo desconhecido"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "N�mero inv�lido de passos: %s"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "Fonte inv�lida: %s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "Tipo desconhecido"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "N�o consegui criar a tabela %s"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "N�o consegui fechar mapa de entrada"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -33358,7 +35084,7 @@ msgstr "varredura avante completa"
 msgid "Reverse sweep complete"
 msgstr "varredura reversa completa"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 #, fuzzy
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
@@ -33367,16 +35093,16 @@ msgstr ""
 "N�o consegui converter a proje��o do mapa de entrada para o formato do GRASS "
 "para verifica��o"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 #, fuzzy
 msgid "Location PROJ_INFO is:\n"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 #, fuzzy
 msgid ""
 "Consider generating a new location from the input dataset using the "
@@ -33418,14 +35144,6 @@ msgstr "Nome do novo arquivo raster."
 msgid "Band to select (default is all bands)"
 msgstr "Banda selecionada (o padr�o s�o todas as bandas)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -33448,7 +35166,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "N�o consegui atualizar regi�o atual"
@@ -33468,7 +35186,7 @@ msgstr "O vetor '%s' j
 msgid "Reading band %d of %d..."
 msgstr "Lendo mapa"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Mapa raster [%s] n�o encontrado"
@@ -33538,198 +35256,217 @@ msgstr "criando arquivos de suporte para %s"
 msgid "Link to raster map <%s> created."
 msgstr "O vetor '%s' j� existe."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importar um arquivo raster bin�rio para uma camada raster do GRASS."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Arquivo raster para importar"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Banda selecionada (o padr�o s�o todas as bandas)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Nome de destino da loca��o da imagem"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "Nome da loca��o para leitura da proje��o para transforma��o dos GCPs"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Nome do arquivo raster de eleva��o para entrada (metros)"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "N�o criar tabela de atributo."
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Manter os n�meros das bandas em vez de usar os nomes das cores"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "mostra as tabelas e finaliza"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "para topo mapear"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "N�o consegui abrir mapa raster <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "criando novo arquivo cats ..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "N�o consegui abrir o arquivo de assinatura."
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Erro na leitura do arquivo de categorias para <%s>."
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "criando novo arquivo cats ..."
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, fuzzy, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "Entrada"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "Gera uma mapa de dire��es"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, fuzzy, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Erro em pj_do_proj (proje��o das coordenadas de entrada)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Criando arquivos de suporte para %s..."
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "Criando arquivos de suporte para %s..."
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
@@ -33860,7 +35597,7 @@ msgstr "Mapa de eleva
 msgid "Writing topographic index map..."
 msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "N�mero de pontos de entrada: %d."
@@ -33969,12 +35706,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Exibir"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33982,24 +35719,24 @@ msgstr ""
 "Cria um mapa raster composto, usando valores conhecidos de categorias de uma "
 "(ou mais) camada(s) para preencher �reas de \"no data\" em outra camada."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Nome dos mapas raster para emendar"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Nome do mapa raster resultante"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Usar zero (0) para transpar�ncia ao inv�s de NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "N�mero m�nimo de pixels numa classe"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "criando arquivos de suporte para %s"
@@ -34072,43 +35809,6 @@ msgstr "Tra
 msgid "Converts a raster map into a vector map."
 msgstr "Converte um mapa raster em uma camada de mapa vetorial."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Nome da coluna de atributo para usar como r�tulos"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-#, fuzzy
-msgid "Smooth corners of area features"
-msgstr "Cantos suaves"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Usa valores do raster como categorias em vez de uma seq��ncia �nica (apenas "
-"CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Incremento para a coordenada Z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Escreve valores raster como coordenada z. N�o cria tabela. Atualmente s� "
-"suporta pontos."
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "N�o criar topologia (topology) no modo de pontos"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -34637,11 +36337,6 @@ msgstr "Tamanho do cache de pontos"
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Mapa raster de sa�da"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34931,7 +36626,7 @@ msgstr "Gera superf
 msgid "Name for output raster map(s)"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Dist�ncia m�xima do ponto para a rede"
@@ -34958,7 +36653,7 @@ msgstr "N
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Lendo arquivo dig_att...\n"
@@ -35299,7 +36994,7 @@ msgstr "N
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -35325,7 +37020,7 @@ msgstr "Exibir"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -35348,7 +37043,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Exibir"
@@ -35505,7 +37200,7 @@ msgstr "N
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "N�o consegui fechar o novo mapa g3d"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "N�o consegui fechar o novo mapa g3d"
@@ -35679,11 +37374,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "N�o consegui ler arquivo de limite"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "N�o consegui escrever em <%s>"
@@ -35930,21 +37625,61 @@ msgstr "par
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Modo dia de ano"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Usando as coordenadas do centro do mapa\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Escrevendo arquivo raster %i\n"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Fonte inv�lida: %s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Usando as coordenadas do centro do mapa\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Escrevendo arquivo raster %i\n"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Usando as coordenadas do centro do mapa\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Escrevendo arquivo raster %i\n"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35970,81 +37705,90 @@ msgstr "Descompactar o mapa"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Mostra as estat�sticas em estilo shell script"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "mapa vetorial <%s> n�o encontrado"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "�rea\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "�rea j� conclu�da."
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "�rea j� conclu�da."
+msgid "Uncompressing <%s>"
+msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Valor dos padr�es de bits"
+
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -36078,52 +37822,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "raster <%s> n�o encontrado"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Tipo de fei��o"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Gera uma camada raster mostrando as sub-bacias de drenagem."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** <%s> tem assinaturas demais (limite � 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Duas camadas devem ser especificadas"
@@ -36569,21 +38313,26 @@ msgstr[1] "Calculando m
 msgid "Calculating %s"
 msgstr "Calculando m�dias das classes ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' deve ser > 0 para 'cats'."
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Correla��o"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Gera valores aleat�rios de c�lula com depend�ncia espacial."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "N�mero m�ximo de itera��es: %d\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -36732,7 +38481,7 @@ msgstr "Tabela faltando"
 msgid "Grid line width"
 msgstr "Largura da linha"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr "Cor da Borda"
@@ -36864,15 +38613,10 @@ msgid "Starting and ending coordinates"
 msgstr "Usando as coordenadas do centro do mapa\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Cor da Linha"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "Cor do Texto"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -36902,8 +38646,8 @@ msgid "Name of monitor to start"
 msgstr "Nome do mapa raster que conter� os resultados"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36965,49 +38709,67 @@ msgstr "Mostra a extens
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Mostra a extens�o da regi�o atual"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Mostra a extens�o da regi�o atual"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "N�o selecionar atumaticamente quando iniciar"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Libera o monitor selecionado atualmente"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "N�o consegui ler arquivo de cores."
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Abrir formul�rio em modo de edi��o"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 #, fuzzy
 msgid "Currently selected monitor:"
 msgstr "Libera o monitor selecionado atualmente"
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, fuzzy, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr "N�o adicionar � lista de comandos no monitor"
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
@@ -37017,64 +38779,74 @@ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 msgid "Monitor <%s> is not running"
 msgstr "raster <%s> n�o encontrado"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "Arquivo de c�lulas n�o encontrado\n"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Arquivo de c�lulas n�o encontrado\n"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "N�o consegui abrir mapa raster <%s>"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "N�o consegui criar arquivo [%s]"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "O vetor '%s' j� existe."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "N�o consegui executar: %s"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Sa�da de mapa"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "N�o consegui criar arquivo [%s]"
+msgid "Starting monitor <%s>..."
+msgstr "Escrevendo [%s]..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "N�o consegui ler arquivo de cores."
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Lista de curvas de n�vel"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Arquivo de c�lulas n�o encontrado\n"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "N�o consegui ler arquivo de cores."
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "N�o adicionar � lista de comandos no monitor"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -37189,12 +38961,12 @@ msgstr "%s=%s - nome ilegal"
 msgid "[%s]: illegal value specified"
 msgstr "%s=%s - nome ilegal"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Mostrar informa��o topol�gica (depura��o)"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -37203,16 +38975,35 @@ msgstr ""
 "Sobrep�e valores de categorias em um mapa raster no quadro ativo do monitor "
 "gr�fico."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Mapa raster dos pontos iniciais"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Usar cor do texto a partir da cor da c�lula"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Fonte"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "Nome do arquivo vetor resultante"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -37220,7 +39011,7 @@ msgstr[0] "Cor da Borda"
 msgstr[1] "Cor da Borda"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -37228,7 +39019,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr "atual defini��o C�lulas ativo c�lula para."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -37311,11 +39102,6 @@ msgstr "Cor de preenchimento"
 msgid "Colorize features according color definition column"
 msgstr "Erro na defini��o de cor na coluna GRASSRGB, �rea %d com cat %d"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Coluna de defini��o das cores n�o definida."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -37325,7 +39111,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Largura da linha"
 
@@ -37894,41 +39680,41 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Coordenadas inv�lidas %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Mostra informa��es sobre o monitor gr�fico atual"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 #, fuzzy
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Mostra ret�ngulo na tela"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 #, fuzzy
 msgid "Display screen dimensions (width, height)"
 msgstr "Mostra tamanho da tela"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 #, fuzzy
 msgid "Display active frame rectangle"
 msgstr "Mostra ret�ngulo na tela"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Mostra tamanho da tela"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "Mostra ret�ngulo na tela"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -38200,15 +39986,6 @@ msgstr "Alinhamento do texto"
 msgid "Line spacing"
 msgstr "Espa�amento entre linhas"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "Nome do arquivo vetor resultante"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Arquivo de entrada"
@@ -38275,7 +40052,7 @@ msgstr "Tipo de fei
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "Tipo de fei��o"
@@ -38318,6 +40095,11 @@ msgstr "Centralizar o gr
 msgid "Maximum value used for bar plot reference"
 msgstr "Maior valor usado como refer�ncia do gr�fico de barras"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Criar sa�da 3D"
+
 #: ../display/d.rgb/main.c:58
 #, fuzzy
 msgid ""
@@ -38327,6 +40109,11 @@ msgstr ""
 "Exibe tr�s mapas raster selecionados pelo usu�rio como bandas vermelha, "
 "verde e azul no quadro gr�fico atual"
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -38370,14 +40157,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Usar um subconjunto do intervalo do mapa para a legenda (min,m�x)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Fonte"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -38468,11 +40248,12 @@ msgstr "Intervalo de cores excede o limite superior dos dados"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "use=%s fora do intervalo [%.3f,%.3f]. (extender com 'range= ?')"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Nada a desenhar! (sem categorias com r�tulo?)"
 
@@ -38486,36 +40267,92 @@ msgstr "Exibe escala gr
 msgid "North arrow style"
 msgstr "Desenhar apenas a seta Norte"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Coordenadas em porcentagem do quadro ([0,0] � o canto superior esquerdo)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Cor da Linha"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Desenhar apenas a barra de escala"
@@ -38532,7 +40369,7 @@ msgstr "N
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -38540,65 +40377,65 @@ msgstr ""
 "Desenha setas representando a dire��o para mapas raster contendo dados de "
 "orienta��o."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Nome do mapa de orienta��o para exibi��o"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Tipo do mapa raster de orienta��o existente"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Cor para desenhar setas"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Cor para desenhar setas"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Cor para desenhas X's (valores nulos)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Cor para exibir informa��es desconhecidas"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Exibir seta a cada N-�sima c�lula da malha"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Mapa raster contendo valores do comprimento da seta"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Fator de escala para setas (mapa de magnitude)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "Valor ilegal para fator de escala"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "Valor ilegal de separa��o."
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "Magnitude � suportado somente para mapas de orienta��o do GRASS."
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 #, fuzzy
 msgid "Scale option requires magnitude_map"
 msgstr "Op��o escala requer 'magnitude_map'"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Erro lendo arquivo de limite."
@@ -38889,57 +40726,43 @@ msgstr ""
 "matriz de separabilidade de classes\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "mapa vetorial <%s> n�o encontrado"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "subrupo <%s> n�o encontrado"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Mapa raster [%s] existe no grupo."
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "Arquivo raster bin�rio a importar"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Subgrupo [%s] n�o possui nenhum arquivo"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Subgrupo [%s] s� cont�m 1 arquivo"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "O subgrupo deve conter ao menos 2 arquivos para executar %s"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "N�o consegui abrir o arquivo de assinatura."
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, fuzzy, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "** <%s> tem assinaturas demais (limite � 255)"
@@ -39021,181 +40844,195 @@ msgstr "N
 msgid "Name for output file containing final report"
 msgstr "Nome do arquivo de sa�da contendo a matriz de erro e capa"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "mapa vetorial <%s> n�o encontrado"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "subrupo <%s> n�o encontrado"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 "\n"
 "<%s> -- n�mero ilegal de classes iniciais"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 "\n"
 "<%s> -- valor(es) ilegal(is) de intervalo(s) de amostragem"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr ""
 "\n"
 "<%s> -- n�mero ilegal de itera��es"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 "\n"
 "<%s> -- valor ilegal de converg�ncia"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 "\n"
 "<%s> -- valor ilegal de separa��o"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "valor ilegal para NULO"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "################## AGRUPAMENTO (%s) ##################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Grupo:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Subgrupo: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Arquivo de assinatura resultante: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Regi�o\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Norte: %12.2f  Leste: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Sul: %12.2f  Oeste: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Res:   %12.2f  Res:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Linhas:  %12d  Cols: %12d  C�ls: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "M�scara: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Par�metros do agrupamento\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " N�mero de classes iniciais:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [do arquivo de assinatura %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "Tamanho m�nimo de classe:       %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "M�nima separa��o de classe:    %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Converg�ncia porcentual:         %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "N�mero m�ximo de itera��es: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "Intervalo de amostragem de linhas %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "Intervalo de amostragem nas colunas %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Lendo arquivo dig_att...\n"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 #, fuzzy
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 "Mem�ria Esgotada. Por favor execute novamente escolhendo uma amostra menor"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Tamanho da amostra: %d pontos\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 #, fuzzy
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
@@ -39203,7 +41040,7 @@ msgstr ""
 "Pontos da amostra insuficientes. Por favor execute novamente, escolhendo uma "
 "amostra maior"
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 #, fuzzy
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
@@ -39211,26 +41048,26 @@ msgstr ""
 "Pontos n�o-nulos insuficentes na amostra. Verifique sua regi�o atual (e "
 "m�scara)"
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## resultados finais #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d classes (converg�ncia=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 "N�o consegui escrever arquivo de assinatura <%s> para o grupo <%s>, subgrupo "
 "<%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -39238,12 +41075,12 @@ msgstr ""
 "\n"
 "#################### CLASSES ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d classes, %.2f%% pontos est�veis\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -39570,8 +41407,8 @@ msgid "radiance"
 msgstr "Vari�ncia"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Resolu��o"
@@ -39943,359 +41780,403 @@ msgstr "Mapa raster [%s] n
 msgid "group <%s> references the following subgroups\n"
 msgstr "Subgrupo [%s] n�o possui nenhum arquivo"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Nome da superf�cie aleat�ria a produzir"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Resolu��o"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Nome da camada raster da superf�cie fractal"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Nome do raster de sa�da"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Nome de uma camada de entrada"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Nome do mapa raster para ser reescalonado"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Gera uma mapa de dire��es"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "N�mero de quadros"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "N�mero de quadros"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -40520,7 +42401,7 @@ msgstr "Mapa de treinamento do solo real"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "N�mero m�nimo de pixels numa classe"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "N�mero inv�lido de passos: %s"
@@ -40891,108 +42772,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Mem�ria Esgotada! (Out of Memory)"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Erro na leitura do mapa raster de entrada."
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Erro tentando ler o arquivo dbmscap\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Erro lendo coringa."
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "N�mero de pontos para criar"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "regi�o <%s> n�o encontrada"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Escrevendo [%s]..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Processando �reas de entradaA ..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "O tamanho da regi�o � menor que minreg, nada a exibir."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "Arquivo dig_att j� existe."
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Resolu��o"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Erro na leitura do mapa raster de entrada."
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Erro tentando ler o arquivo dbmscap\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Erro lendo coringa."
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "N�mero de pontos para criar"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Escrevendo [%s]..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -41066,64 +42953,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Duas camadas devem ser especificadas"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Fonte inv�lida: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s: %s - mapa raster n�o encontrado"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Criando %i mapas raster\n"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "%s: %s - mapa raster n�o encontrado"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "N�mero inv�lido de passos: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "N�mero inv�lido de passos: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "regi�o <%s> n�o encontrada"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -41200,7 +43104,7 @@ msgstr "Nome do Raster de sa
 msgid "Name for output raster map (blue)"
 msgstr "Nome do Raster de sa�da"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -41256,7 +43160,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "corre��o"
@@ -42125,51 +44029,55 @@ msgstr ""
 msgid "Option '%s' is required for new exposure info"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Entrada falhou"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Nome do mapa resultante"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "T�tulo do raster de sa�da"
@@ -42463,6 +44371,10 @@ msgstr "N
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 #, fuzzy
 msgid ""
@@ -42876,12 +44788,36 @@ msgstr "T
 #~ msgstr "de tipos ativo banco de dados todos Suporte N�M.INT"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "N�o consegui criar a tabela %s"
+#~ msgid "<%s> already exists"
+#~ msgstr "O vetor '%s' j� existe."
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "N�o consegui criar a tabela %s"
+#~ msgid "<%s> already compressed"
+#~ msgstr "�rea j� conclu�da."
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "%s: nenhum ponto de dados encontrado"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Camada para"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Camada para"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Camada n�mero"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Coordenadas do mapa"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "N�o criar tabela de atributo."
 
 #, fuzzy
 #~ msgid "time series"
@@ -42927,74 +44863,6 @@ msgstr "T
 #~ msgid "Number of quartals to use"
 #~ msgstr "N�mero de quadros"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Nome do mapa raster existente contendo isolinhas"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Nome do mapa raster existente contendo isolinhas"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o difusa [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o refletida [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o do feixe [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nome do raster de entrada"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nome do arquivo raster de eleva��o para entrada (metros)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o refletida [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o do feixe [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "N�mero de pontos de interpola��o"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Loca��o: %s\n"
 
@@ -43012,24 +44880,28 @@ msgstr "T
 #~ "%d classes, %.2f%% pontos est�veis\n"
 
 #, fuzzy
+#~ msgid "Subregion"
+#~ msgstr "Regi�o\n"
+
+#, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Alinhamento do texto"
 
 #, fuzzy
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "regi�o <%s> n�o encontrada"
+#~ msgid "Could not rewind input file"
+#~ msgstr "N�o consegui abrir arquivo vetorial <%s>"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Sa�da de mapa"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Nome do mapa raster"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "em"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Nome do mapa raster"
+#~ msgid "output map <%s> exists"
+#~ msgstr "Sa�da de mapa"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Tamanho da p�gina (padr�o %d linhas)"
@@ -43037,6 +44909,9 @@ msgstr "T
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Largura da p�gina (padr�o: %d caracteres)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+
 #, fuzzy
 #~ msgid ""
 #~ "\n"
@@ -43062,6 +44937,14 @@ msgstr "T
 #~ msgstr "[%s] n�o encontrado."
 
 #, fuzzy
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "regi�o <%s> n�o encontrada"
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+
+#, fuzzy
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -43079,6 +44962,24 @@ msgstr "T
 #~ "Voc� pode usar a op��o -o para %s para ignorar esta verifica��o.\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "N�o consegui criar a tabela %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "todos em atual para atual"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Atualiza os metadados do mapa vetorial"
 
@@ -43113,166 +45014,52 @@ msgstr "T
 #~ msgstr "Salva quadro atual"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "em"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "todos em atual para atual"
+#~ msgid "OGR datasource name"
+#~ msgstr "banco de dados"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Mapa(s) de entrada n�o especificado(s)."
 
 #, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Criando %i mapas raster\n"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "N�o consegui ler arquivo REF para o subgrupo [%s] no grupo [%s]."
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d categorias carregadas da tabela"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
-
-#, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Valor ilegal para fator de escala"
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "N�o consegui criar arquivo [%s]"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+#~ msgid "Env file not found"
+#~ msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "Um de!"
+#~ msgid "PID file not found"
+#~ msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "Um de!"
-
-#, fuzzy
-#~ msgid "No graphics device selected. Use d.mon to select graphics device."
-#~ msgstr "Nenhum dispositivo gr�fico selecionado."
+#~ msgid "Command file not found"
+#~ msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #, fuzzy
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr ""
-#~ "Cor do texto, tanto uma cor padr�o do GRASS como uma triplete R:G:B "
-#~ "(separada por dois pontos)"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Criando %i mapas raster\n"
 
 #, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "Exibir dados vetoriais do GRASS no quadro ativo do monitor gr�fico"
+#~ msgid "Name for output image"
+#~ msgstr "Nome do arquivo de sa�da"
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Cor para desenhar texto"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "N�o consegui ler arquivo REF para o subgrupo [%s] no grupo [%s]."
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Cor para desenhar malhas, ou \"none\""
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d categorias carregadas da tabela"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr "Nome do Raster de sa�da"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "erro de discretiza��o em unidades de mapa"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Tamb�m calcular m�xima dist�ncia de avistamento"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -43398,16 +45185,44 @@ msgstr "T
 #~ msgstr "Uso colchetes em"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "Nome do Raster de sa�da"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Tamb�m calcular m�xima dist�ncia de avistamento"
+#~ msgid "Default: input"
+#~ msgstr "erro de discretiza��o em unidades de mapa"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Exibir"
+#~ msgid "No graphics device selected. Use d.mon to select graphics device."
+#~ msgstr "Nenhum dispositivo gr�fico selecionado."
+
+#, fuzzy
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "Exibir dados vetoriais do GRASS no quadro ativo do monitor gr�fico"
+
+#, fuzzy
+#~ msgid "Text color or \"none\""
+#~ msgstr "Cor do Texto"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Cor para desenhar texto"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
+
+#, fuzzy
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr ""
+#~ "Cor do texto, tanto uma cor padr�o do GRASS como uma triplete R:G:B "
+#~ "(separada por dois pontos)"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "Mapa vetorial n�o � 3D"
 
 #, fuzzy
 #~ msgid ""
@@ -43416,25 +45231,55 @@ msgstr "T
 #~ "Permite a cria��o e/ou modifica��o dos arquivos de suporte dos mapas "
 #~ "raster"
 
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Falha abrindo arquivo dig de entrada."
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "Arquivo dig_att n�o existe."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Falha abrindo arquivo dig_att."
+
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "N�o consegui criar arquivo raster [%s]."
+#~ msgid "Attaching categories..."
+#~ msgstr "Anexando categorias...\n"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "N�o consegui criar arquivo [%s]"
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "Falha ao atribuir um atributo (categoria %d) a uma linha."
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Mem�ria insuficiente para az"
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "ATENCION: linea %d etiqueta: %d corresponde a otra etiqueta: %d."
 
 #, fuzzy
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "ERRO_DO_SISTEMA: OLD_T_NEW recebeu um c�digo de tipo ruim %x"
+#~ msgid "Writing new file..."
+#~ msgstr "Escrevendo novo arquivo...\n"
 
 #, fuzzy
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "ERRO_DO_SISTEMA: NEW_T_OLD recebeu um c�digo de tipo ruim %x"
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "%-5d pontos e linhas escrito na sa�da.\n"
+
+#, fuzzy
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "%-5d centroides escritos en el archivo de salida.\n"
+
+#, fuzzy
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
+
+#, fuzzy
+#~ msgid "Endian of input vector map"
+#~ msgstr "Nome do mapa vetorial (2d) de entrada"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "R�tulos de categorias (dig_cats) n�o encontrados, tabela n�o foi criada.\n"
+
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "N�o consegui abrir arquivo dig_att ,%s>\n"
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -43544,133 +45389,139 @@ msgstr "T
 #~ msgstr "%-5d categorias lidas para a mem�ria\n"
 
 #, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "R�tulos de categorias (dig_cats) n�o encontrados, tabela n�o foi criada.\n"
-
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "N�o consegui abrir arquivo dig_att ,%s>\n"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Falha abrindo arquivo dig de entrada."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "Arquivo dig_att n�o existe."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Falha abrindo arquivo dig_att."
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "ERRO_DO_SISTEMA: OLD_T_NEW recebeu um c�digo de tipo ruim %x"
 
 #, fuzzy
-#~ msgid "Attaching categories..."
-#~ msgstr "Anexando categorias...\n"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "ERRO_DO_SISTEMA: NEW_T_OLD recebeu um c�digo de tipo ruim %x"
 
 #, fuzzy
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "Falha ao atribuir um atributo (categoria %d) a uma linha."
+#~ msgid "One or more coordinates"
+#~ msgstr "Fator de escala (\"scaling\") para coordenada x"
 
 #, fuzzy
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "ATENCION: linea %d etiqueta: %d corresponde a otra etiqueta: %d."
+#~ msgid "Name of elevation map"
+#~ msgstr "Nome do mapa raster de eleva��o"
 
-#, fuzzy
-#~ msgid "Writing new file..."
-#~ msgstr "Escrevendo novo arquivo...\n"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Texto para representar c�lula sem dados"
 
 #, fuzzy
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "%-5d pontos e linhas escrito na sa�da.\n"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Um de!"
 
-#, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "%-5d centroides escritos en el archivo de salida.\n"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "M�trica desconhecida: [%s]."
 
 #, fuzzy
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Erro na leitura do arquivo de categorias para <%s>."
 
 #, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "Nome do mapa vetorial (2d) de entrada"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "Tipo de mapa raster desconhecido"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Erro na leitura do arquivo 'colr' para <%s>."
 
-#, fuzzy
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Tamanho do r�tulo (pixels)"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Texto representando c�lulas sem valores de dados"
 
 #, fuzzy
-#~ msgid "Can't call bad function"
-#~ msgstr "local do banco de dados"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr ""
+#~ "Utilit�rio de interpola��o de superf�cies para camadas de mapas raster."
 
 #, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Erro lendo intervalo para [%s]"
+#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
+#~ msgstr "T�tulo do raster de sa�da"
 
 #, fuzzy
-#~ msgid "One or more coordinates"
-#~ msgstr "Fator de escala (\"scaling\") para coordenada x"
+#~ msgid ""
+#~ "Computes anisotropic cumulative cost of moving between different "
+#~ "geographic locations on an input elevation raster map whose cell category "
+#~ "values represent elevation combined with an input raster map layer whose "
+#~ "cell values represent friction cost."
+#~ msgstr ""
+#~ "Gera uma camada raster mostrando o custo cumulativo de movimento entre "
+#~ "diferentes localiza��es sobre um mapa raster de entrada cujos valores de "
+#~ "c�lula representam o custo."
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Mem�ria insuficiente para adx"
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Nome da camada a usar para INTENSIDADE"
 
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Mem�ria insuficiente para ady"
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Nome da camada a usar para SATURA��O"
 
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Mem�ria insuficiente para adxx"
+#~ msgid "Name of output layer to be used for GREEN"
+#~ msgstr "Nome da camada de sa�da a usar para VERDE"
 
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Mem�ria insuficiente para adyy"
+#~ msgid "Name of output layer to be used for BLUE"
+#~ msgstr "Nome da camada de sa�da a usar para AZUL"
 
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Mem�ria insuficiente para adxy"
+#~ msgid "Surface generation program."
+#~ msgstr "Programa para gera��o de superf�cies."
 
 #, fuzzy
-#~ msgid "Cannot create quaddata"
-#~ msgstr "N�o consegui criar quaddata"
+#~ msgid ""
+#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
+#~ msgstr ""
+#~ "Bancos de dados lat/long n�o s�o suportados por r.flow. Use 'r.watershed' "
+#~ "para calcular fluxo."
 
-#, fuzzy
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "N�o consegui criar quadfunc"
+#~ msgid "%s=%s - illegal number of interpolation points"
+#~ msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
 
-#~ msgid "Cannot create tree"
-#~ msgstr "N�o consegui criar �rvore"
+#~ msgid "%s: no data points found"
+#~ msgstr "%s: nenhum ponto de dados encontrado"
 
 #, fuzzy
-#~ msgid "Cannot create tree info"
-#~ msgstr "N�o consegui criar info da �rvore"
+#~ msgid "Interpolating raster map <%s>... %d row... "
+#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
+#~ msgstr[0] "Interpolando mapa raster <%s> ... %d linhas ..."
+#~ msgstr[1] "Interpolando mapa raster <%s> ... %d linhas ..."
 
 #, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Converte arquivo de pontos ou ASCII do GRASS para um vetor bin�rio."
+#~ msgid "Output z-file (elevation) map"
+#~ msgstr "Gerar arquivo de eleva��o"
 
 #, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "Arquivo 3dview  <%s> n�o encontrado"
+#~ msgid "Output aspect map (or fy)"
+#~ msgstr "Gera arquivo com a dire��o da encosta"
 
 #, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "para site"
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "n�o."
 
 #, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "N�o consegui alocar mem�ria para 'string'"
+#~ msgid "Prefix for output raster map(s)"
+#~ msgstr "Nome do mapa raster de sa�da"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "Transformando os vetores ..."
+#~ msgid "String to represent no data cell"
+#~ msgstr "Texto para representar c�lula sem dados"
+
+#~ msgid "Character to represent no data cell"
+#~ msgstr "Caractere para representa c�lula sem dados"
 
 #, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d pontos escritos no vetor"
+#~ msgid "Binary raster file to be imported"
+#~ msgstr "Arquivo raster para importar"
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Nome da camada a usar para INTENSIDADE"
+#~ msgid "Name of spread path raster map"
+#~ msgstr "Nome do mapa de caminho do espalhamento"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Nome da camada a usar para SATURA��O"
+#~ msgid "Run verbosely"
+#~ msgstr "Executar verbosamente"
+
+#, fuzzy
+#~ msgid "%s available in mapset <%s>:"
+#~ msgstr "Lista formatos dispon�veis e finaliza"
+
+#~ msgid "Null value indicator"
+#~ msgstr "Indicador de valor nulo"
+
+#, fuzzy
+#~ msgid "Suppress warnings"
+#~ msgstr "Suprimir p�ginas de cabe�alho"
 
 #, fuzzy
 #~ msgid ""
@@ -43691,56 +45542,62 @@ msgstr "T
 #~ msgstr "Arquivos raster ASCII para importar"
 
 #, fuzzy
-#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
-#~ msgstr "T�tulo do raster de sa�da"
+#~ msgid "Name of input raster map(s)"
+#~ msgstr "Nome do Raster de entrada"
 
 #, fuzzy
-#~ msgid ""
-#~ "Computes anisotropic cumulative cost of moving between different "
-#~ "geographic locations on an input elevation raster map whose cell category "
-#~ "values represent elevation combined with an input raster map layer whose "
-#~ "cell values represent friction cost."
-#~ msgstr ""
-#~ "Gera uma camada raster mostrando o custo cumulativo de movimento entre "
-#~ "diferentes localiza��es sobre um mapa raster de entrada cujos valores de "
-#~ "c�lula representam o custo."
+#~ msgid "The output type of the space time dataset"
+#~ msgstr "Nome do novo arquivo raster."
 
-#~ msgid "Name of output layer to be used for GREEN"
-#~ msgstr "Nome da camada de sa�da a usar para VERDE"
+#, fuzzy
+#~ msgid "Type of the aggregation space time dataset, default is strds"
+#~ msgstr "Nome do novo arquivo raster."
 
-#~ msgid "Name of output layer to be used for BLUE"
-#~ msgstr "Nome da camada de sa�da a usar para AZUL"
+#, fuzzy
+#~ msgid "Greater value option that sets the >= area size limit [hectares]"
+#~ msgstr "�rea"
 
 #, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
+#~ msgid "Prefix for output raster maps (default: input)"
+#~ msgstr "T�tulo do raster de sa�da"
+
+#, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
 #~ msgstr ""
-#~ "Utilit�rio de interpola��o de superf�cies para camadas de mapas raster."
+#~ "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
-#~ msgid "Surface generation program."
-#~ msgstr "Programa para gera��o de superf�cies."
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
 
 #, fuzzy
 #~ msgid ""
-#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
-#~ msgstr ""
-#~ "Bancos de dados lat/long n�o s�o suportados por r.flow. Use 'r.watershed' "
-#~ "para calcular fluxo."
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
 
-#~ msgid "%s=%s - illegal number of interpolation points"
-#~ msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Cor para exibir informa��es desconhecidas"
 
-#~ msgid "%s: no data points found"
-#~ msgstr "%s: nenhum ponto de dados encontrado"
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
 
 #, fuzzy
-#~ msgid "Interpolating raster map <%s>... %d row... "
-#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
-#~ msgstr[0] "Interpolando mapa raster <%s> ... %d linhas ..."
-#~ msgstr[1] "Interpolando mapa raster <%s> ... %d linhas ..."
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "de �rea"
 
 #, fuzzy
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "n�o."
+#~ msgid "Invalid distance"
+#~ msgstr "Fonte inv�lida: %s"
+
+#~ msgid "Layer number"
+#~ msgstr "Camada n�mero"
 
 #, fuzzy
 #~ msgid "allocation"
@@ -43751,101 +45608,100 @@ msgstr "T
 #~ msgstr "Exibir"
 
 #, fuzzy
-#~ msgid "Name of elevation map"
-#~ msgstr "Nome do mapa raster de eleva��o"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Texto para representar c�lula sem dados"
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "Um de!"
+#~ msgid "Please specify input= or file="
+#~ msgstr "Especifique a coluna z."
 
 #, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "Um de!"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "M�trica desconhecida: [%s]."
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Erro na leitura do arquivo de categorias para <%s>."
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Erro na leitura do arquivo 'colr' para <%s>."
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#~ msgid "String representing no data cell value"
-#~ msgstr "Texto representando c�lulas sem valores de dados"
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Valor ilegal para fator de escala"
 
 #, fuzzy
-#~ msgid "Output z-file (elevation) map"
-#~ msgstr "Gerar arquivo de eleva��o"
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Output aspect map (or fy)"
-#~ msgstr "Gera arquivo com a dire��o da encosta"
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 
 #, fuzzy
-#~ msgid "Prefix for output raster map(s)"
-#~ msgstr "Nome do mapa raster de sa�da"
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "String to represent no data cell"
-#~ msgstr "Texto para representar c�lula sem dados"
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#~ msgid "Character to represent no data cell"
-#~ msgstr "Caractere para representa c�lula sem dados"
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Binary raster file to be imported"
-#~ msgstr "Arquivo raster para importar"
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Especifique a coluna z."
 
-#~ msgid "Name of spread path raster map"
-#~ msgstr "Nome do mapa de caminho do espalhamento"
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Especifique a coluna z."
 
-#~ msgid "Run verbosely"
-#~ msgstr "Executar verbosamente"
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "%s available in mapset <%s>:"
-#~ msgstr "Lista formatos dispon�veis e finaliza"
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Especifique a coluna z."
 
-#~ msgid "Null value indicator"
-#~ msgstr "Indicador de valor nulo"
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Especifique a coluna z."
 
 #, fuzzy
-#~ msgid "Suppress warnings"
-#~ msgstr "Suprimir p�ginas de cabe�alho"
+#~ msgid "Display the "
+#~ msgstr "Exibir"
 
 #, fuzzy
-#~ msgid "High resolution panchromatic image"
-#~ msgstr "transformar para"
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Correla��o"
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Name of input raster map(s)"
-#~ msgstr "Nome do Raster de entrada"
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "The output type of the space time dataset"
-#~ msgstr "Nome do novo arquivo raster."
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Type of the aggregation space time dataset, default is strds"
-#~ msgstr "Nome do novo arquivo raster."
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Greater value option that sets the >= area size limit [hectares]"
-#~ msgstr "�rea"
+#~ msgid "High resolution panchromatic image"
+#~ msgstr "transformar para"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (default: input)"
-#~ msgstr "T�tulo do raster de sa�da"
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Correla��o"
 
 #, fuzzy
 #~ msgid "Name of elevation raster map"
@@ -43864,26 +45720,101 @@ msgstr "T
 #~ msgstr "Sem mapa de sa�da"
 
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr ""
-#~ "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
-
-#, fuzzy
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Cor para desenhar malhas, ou \"none\""
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "Computar o histograma em sil�ncia"
 
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Mem�ria insuficiente para adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Mem�ria insuficiente para ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Mem�ria insuficiente para adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Mem�ria insuficiente para adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Mem�ria insuficiente para adxy"
+
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "de �rea"
+#~ msgid "Cannot create quaddata"
+#~ msgstr "N�o consegui criar quaddata"
 
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "Fonte inv�lida: %s"
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "N�o consegui criar quadfunc"
 
-#~ msgid "Layer number"
-#~ msgstr "Camada n�mero"
+#~ msgid "Cannot create tree"
+#~ msgstr "N�o consegui criar �rvore"
+
+#, fuzzy
+#~ msgid "Cannot create tree info"
+#~ msgstr "N�o consegui criar info da �rvore"
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "N�o consegui criar arquivo [%s]"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Mem�ria insuficiente para az"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "Um de!"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "Um de!"
+
+#, fuzzy
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Converte arquivo de pontos ou ASCII do GRASS para um vetor bin�rio."
+
+#, fuzzy
+#~ msgid "Site file <%s> not found"
+#~ msgstr "Arquivo 3dview  <%s> n�o encontrado"
+
+#, fuzzy
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "para site"
+
+#, fuzzy
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "N�o consegui alocar mem�ria para 'string'"
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "Transformando os vetores ..."
+
+#, fuzzy
+#~ msgid "%d sites written."
+#~ msgstr "%d pontos escritos no vetor"
+
+#, fuzzy
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Erro lendo intervalo para [%s]"
+
+#, fuzzy
+#~ msgid "Can't call bad function"
+#~ msgstr "local do banco de dados"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "N�o consegui criar arquivo raster [%s]."
+
+#, fuzzy
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Tamanho do r�tulo (pixels)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "Tipo de mapa raster desconhecido"
diff --git a/locale/po/grassmods_pt_br.po b/locale/po/grassmods_pt_br.po
index e3df30e..5c2fbf8 100644
--- a/locale/po/grassmods_pt_br.po
+++ b/locale/po/grassmods_pt_br.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_pt_br\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2011-08-03 03:03-0300\n"
 "Last-Translator: Fred Ulisses Maranh�o <fred.maranhao at gmail.com>\n"
 "Language-Team: Brasilian Portuguese <grass-translations at lists.osgeo.org>\n"
@@ -256,6 +256,7 @@ msgstr "raster <%s> n
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -491,6 +492,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Erro fechando arquivo ascii"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -630,29 +636,29 @@ msgstr "N
 msgid "Unable to open database:"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Conex�o com banco de dados n�o definida"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "O vetor '%s' j� existe."
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "raster <%s> n�o encontrado"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -664,6 +670,11 @@ msgstr "N
 msgid "Unable grant on table:"
 msgstr "N�o consegui abrir arquivo de sa�da."
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "N�o consegui definir tamanho"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -794,7 +805,7 @@ msgstr "N
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -872,17 +883,17 @@ msgstr "nome=%s\n"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -894,7 +905,7 @@ msgstr "M
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "Nome da Fonte"
+msgstr "Nome da Tabela"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -917,39 +928,39 @@ msgstr "mostra os par
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -995,7 +1006,7 @@ msgstr "Lista todos os drivers de banco de dados."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1025,7 +1036,7 @@ msgstr "Mostra atributos do vetor"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1123,10 +1134,10 @@ msgid "Unable to open database <%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1329,11 +1340,11 @@ msgstr "Entrada falhou"
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "N�o consegui abrir o arquivo de c�lulas <%s>"
@@ -1371,10 +1382,10 @@ msgstr "Camada de pesquisa. Usada pela op
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "Formato OGR."
@@ -1384,7 +1395,7 @@ msgstr "Formato OGR."
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Delimitador vertical de registro na sa�da"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1393,7 +1404,7 @@ msgstr "Delimitador vertical de registro na sa
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Nome do mapa bin�rio de sa�da (use 'out=-' para sa�da padr�o)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "N�o incluir nomes das colunas na sa�da"
 
@@ -1402,7 +1413,7 @@ msgstr "N
 msgid "Describe query only (don't run it)"
 msgstr "apenas descrever a pesquisa (n�o executar)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Sa�da vertical (ao inv�s de horizontal)"
 
@@ -1453,6 +1464,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Arquivo contendo declara��es SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignorar erros SQL e continuar"
 
@@ -1632,7 +1644,6 @@ msgstr "Rotaciona 90 graus"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1753,7 +1764,7 @@ msgstr "N
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1761,15 +1772,15 @@ msgstr "N
 msgid "Error in pj_do_proj"
 msgstr "Erro em pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1865,7 +1876,7 @@ msgstr "N
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1912,7 +1923,7 @@ msgstr "N
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1925,26 +1936,27 @@ msgstr "N
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "N�o conseguir abrir banco de dados <%s> com driver <%s>"
@@ -1955,7 +1967,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Tipo da coluna n�o suportado (%s)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2107,13 +2120,13 @@ msgstr "N
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2121,8 +2134,8 @@ msgstr "N
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2166,10 +2179,11 @@ msgstr "N
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2183,13 +2197,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2198,6 +2215,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2213,7 +2231,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2233,11 +2251,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2249,27 +2267,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2287,74 +2305,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2364,6 +2385,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2379,6 +2401,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2397,6 +2420,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2405,15 +2429,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2453,7 +2478,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Mostra oso formatos suportados e encerra"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "Loca��o: %s\n"
@@ -3063,69 +3088,70 @@ msgid "Vector map <%s> not found"
 msgstr "Mapa vetorial <%s> n�o encontrado"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
@@ -3191,12 +3217,13 @@ msgstr "N
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3332,7 +3359,7 @@ msgstr "Mapa"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3495,7 +3522,7 @@ msgid "Area:"
 msgstr "�rea\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3511,7 +3538,7 @@ msgstr "N
 msgid "No attribute table for layer %d"
 msgstr "Coluna(s) de atributo(s)"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3524,15 +3551,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "N�o conseguir abrir banco de dados <%s> com driver <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "N�o posso dar privil�gios na tabela <%s>"
@@ -3555,6 +3583,7 @@ msgid ""
 msgstr "Calculando m�dias das classes ..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3563,6 +3592,7 @@ msgid "extract"
 msgstr "Inporta��o de vetor incompleta"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3573,10 +3603,10 @@ msgstr "Resolu
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Tipo de fei��o"
@@ -3599,12 +3629,11 @@ msgstr "N
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "N�o criar tabela de atributo."
@@ -3624,39 +3653,45 @@ msgstr "Sele
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3672,7 +3707,10 @@ msgstr "Sele
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3747,7 +3785,7 @@ msgstr "Entrada de texto %s ignorada"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3795,45 +3833,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3877,11 +3916,11 @@ msgstr "Tipo da coluna n
 msgid "Format <%s> does not support writing"
 msgstr "formato 'point' n�o � suportado para vers�o antiga"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -4035,9 +4074,9 @@ msgstr "Nome do arquivo de entrada; ou \"-\" para ler da stdin"
 msgid "Name for output file where to save current settings"
 msgstr "Nome do arquivo de sa�da contendo a matriz de erro e capa"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Mostra os formatos suportados e encerra"
 
@@ -4059,7 +4098,7 @@ msgstr "para padr
 msgid "Print current status in shell script style"
 msgstr "Mostra as estat�sticas em estilo shell script"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
@@ -4067,7 +4106,7 @@ msgstr "Op
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Duas camadas devem ser especificadas"
+msgstr "Um de!"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4075,18 +4114,18 @@ msgid "%s= must be specified"
 msgstr "Duas camadas devem ser especificadas"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Mostra oso formatos suportados e encerra"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4097,49 +4136,49 @@ msgstr "Mostra oso formatos suportados e encerra"
 msgid "network"
 msgstr "Exibir"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-#, fuzzy
-msgid "Arc type"
-msgstr "Tipo de fei��o"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 #, fuzzy
 msgid "Arc layer"
 msgstr "Consultar"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+#, fuzzy
+msgid "Arc type"
+msgstr "Tipo de fei��o"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 #, fuzzy
 msgid "Node layer"
 msgstr "Consultar"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 #, fuzzy
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
@@ -4147,22 +4186,23 @@ msgstr ""
 "Nome do arquivo contendo comandos gr�ficos, se n�o houver, l� da entrada "
 "padr�o"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4174,10 +4214,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4190,51 +4231,87 @@ msgstr ""
 msgid "Cost"
 msgstr "Contraste"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "N�mero de colunas"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "Dist�ncia m�xima do ponto para a rede"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Sem tabela"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Camada '%s' n�o dispon�vel"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 #, fuzzy
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "%s n�o funciona com uma loca��o lat-long"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4243,10 +4320,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4262,8 +4339,8 @@ msgstr "%d pontos sem categoria"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4292,22 +4369,22 @@ msgstr "N
 msgid "Wrong input format: %s"
 msgstr "Entrada errada para multiplicador: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4316,17 +4393,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "N�o consegui inserir novo registro: '%s'"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d atualizar erros"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4337,7 +4414,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4347,7 +4424,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "Arquivo vetorial para criar"
@@ -4401,17 +4478,17 @@ msgid "Unable to get category list <%s>"
 msgstr "N�o exibir n�meros de categorias"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "par�metro <%s> necess�rio n�o configurado"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "O vetor '%s' j� existe."
@@ -4706,6 +4783,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Arquivo contendo declara��es SQL"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4726,12 +4804,15 @@ msgstr "Arquivo contendo declara
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4897,11 +4978,11 @@ msgstr "camada deve ser > 0 para 'where'."
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Conex�o com banco de dados n�o definida para camada <%d>"
@@ -5044,9 +5125,9 @@ msgid "Remove existing color table"
 msgstr "Manter a tabela de cores existente"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5111,7 +5192,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5127,8 +5208,7 @@ msgstr "Um de!"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5154,6 +5234,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Mapa vetorial n�o � 3D"
@@ -5179,7 +5260,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Arquivo de c�lulas [%s] n�o encontrado"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5188,13 +5269,14 @@ msgstr "N
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5226,8 +5308,9 @@ msgstr "Rotacionando dados ... "
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5273,7 +5356,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Arquivo ASCII com as coordenadas de transforma��o"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "N�o consegui usar a coluna '%s'"
@@ -5328,6 +5411,7 @@ msgid "Point out of range"
 msgstr "N�mero de arestas fora do intervalo"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5336,15 +5420,17 @@ msgstr "N
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5438,14 +5524,15 @@ msgstr "Nome do mapa de desvios para sa
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "Sa�da de mapa"
@@ -5582,7 +5669,7 @@ msgstr "Mem
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "N�o consegui criar arquivo <%s>"
+msgstr "N�o consegui criar arquivo [%s]"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5645,15 +5732,15 @@ msgstr "M
 msgid "Input failed"
 msgstr "Entrada falhou"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "Entrada falhou"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Espa�o em disco insuficiente -- n�o posso escrever arquivos"
@@ -5703,9 +5790,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5734,7 +5821,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Resolu��o"
+msgstr "Processando �reas de entradaA ..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5766,7 +5853,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:368
 #, fuzzy, c-format
 msgid "Mask raster map [%s] not found"
-msgstr "Mapa raster 3d <%s> n�o encontrado"
+msgstr "Mapa raster 3D <%s> n�o encontrado"
 
 #: ../vector/v.vol.rst/user1.c:383
 #, fuzzy
@@ -5813,9 +5900,9 @@ msgstr "Erro fechando arquivo ascii"
 msgid "3D raster map <%s> created"
 msgstr "Mapa raster <%s> criado."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5826,86 +5913,122 @@ msgstr "N
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Arquivo raster bin�rio a importar"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Arquivo(s) de pontos vetoriais para \"overlay\""
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Dist�ncia m�xima do ponto para a rede"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "N�mero de pontos de entrada: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "Nome da coluna categoria"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "N�mero de pontos de entrada: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Arquivo(s) de pontos vetoriais para \"overlay\""
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Arquivo raster bin�rio a importar"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5925,18 +6048,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Importar"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Nome da Fonte"
@@ -5973,9 +6098,9 @@ msgstr "Nome da coluna de atributos com valores para interpolar (se >0 camada)"
 msgid "Name of column containing z coordinate"
 msgstr "Nome da coluna de atributos com valores para interpolar (se >0 camada)"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Criar sa�da 3D"
@@ -6026,7 +6151,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "N�o consegui abrir cursor de sele��o: '%s'"
@@ -6045,7 +6170,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "coluna x/y/x deve ser inteiro ou double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -6073,7 +6198,90 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d pontos escritos no vetor"
 msgstr[1] "%d pontos escritos no vetor"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Proje��o do conjunto de dados parece n�o combinar com a loca��o atual.\n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+#, fuzzy
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "Loca��o: %s\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "PROJ_INFO do conjunto de dados importado �:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+#, fuzzy
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Considere gerar uma nova loca��o com o par�metro 'location' do dado de "
+"entrada.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"N�o consegui converter a proje��o do mapa de entrada para o formato do GRASS "
+"para verifica��o"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Se sobrepondo � verifica��o da proje��o"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"Proje��o do conjunto de dados de entrada e loca��o atual parecem combinar"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr " 4 par�metros s�o requeridos para o par�metro 'spatial'."
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Fonte inv�lida: %s"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Tipo desconhecido"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6096,7 +6304,7 @@ msgstr[1] "%d pontos escritos no vetor"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6105,7 +6313,7 @@ msgstr[1] "%d pontos escritos no vetor"
 msgid "statistics"
 msgstr "Estat�sticas de transi��o de classe."
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6765,8 +6973,8 @@ msgstr "Tipo da coluna n
 msgid "Operator '%s' is not supported for type line"
 msgstr "formato 'point' n�o � suportado para vers�o antiga"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "N�o consegui criar arquivo raster [%s]."
@@ -6829,13 +7037,13 @@ msgid "Breaking lines..."
 msgstr "processando."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "Escrevendo [%s]..."
@@ -6845,11 +7053,11 @@ msgstr "Escrevendo [%s]..."
 msgid "Merging lines..."
 msgstr "processando."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Anexando ilhas..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "N�o consegui calcular �rea do centr�ide."
 
@@ -6865,13 +7073,14 @@ msgstr "Escrevendo [%s]..."
 msgid "Attribute not found"
 msgstr "Coluna(s) de atributo(s)"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "Escrever v�rtices da linha."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "N�o consegui inserir novo registro: '%s'"
@@ -6951,128 +7160,130 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "M�todo de amostragem"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Gera mapa de pontos 2D/3D do GRASS aleat�riamente."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "N�mero de pontos para criar"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Falha abrindo arquivo vetorial de entrada."
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 #, fuzzy
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Altura m�nima em z (op��o -z necess�ria)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 #, fuzzy
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Altura m�xima em z (op��o -z necess�ria)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Nome da coluna de atributos com valores para interpolar (se >0 camada)"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Tipo de tabela de cores"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Criar sa�da 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "N�mero de pontos para criar"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d pontos escritos no vetor"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Nome do mapa vetorial existente"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "Mapa vetorial inicial <%s> n�o cont�m pontos na regi�o atual"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "Mapa vetorial inicial <%s> n�o cont�m pontos na regi�o atual"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "Escrevendo [%s]..."
@@ -7120,7 +7331,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Nome de um mapa raster para pesquisar"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Nome da coluna de atributo para usar como r�tulos"
@@ -7134,82 +7345,80 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Imprime valores m�dios ao inv�s de intervalos"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Tipo de coluna n�o suportado"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Tipo do raster � inteiro e o tipo da coluna � 'float'"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Tipo do raster � 'float' e tipo da coluna � inteiro, alguns dados foram "
 "perdidos !!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Rotacionando dados ... "
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "N�o consegui encontrar o mapa de entrada <%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d pontos fora da regi�o atual."
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Mais pontos (%d) da categoria %d, valor ajustado para 'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d categorias carregadas do vetor"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d categorias duplicadas no vetor"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d categorias carregadas da tabela"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d categorias do vetor faltando na tabela"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d atualizar erros"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d registros atualizados"
@@ -7217,14 +7426,14 @@ msgstr "%d registros atualizados"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Nome do mapa raster que conter� os resultados"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7312,7 +7521,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7370,6 +7579,151 @@ msgstr "%d pontos sem categoria"
 msgid "%d records updated"
 msgstr "%d registros atualizados"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Conex�o com banco de dados n�o definida para camada <%d>"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "tipo de coluna n�o suportado"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Sem registros para cat = %d"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Sem registros para cat = %d"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Coluna <%s> n�o encontrada"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Gera pontos como pontos 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Camada n�mero"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%-5d categorias de linha lidas\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Camada n�mero"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Camada n�mero"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Camada para"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Nome da coluna (tipo deve ser num�rico)"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "coluna(s)"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Erro na defini��o de cor na coluna GRASSRGB, �rea %d com cat %d"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Coluna de defini��o das cores n�o definida."
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "N�o consegui ler arquivo de cores."
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "N�o atualizar a regi�o atual"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Sem tabela"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7407,6 +7761,12 @@ msgstr "Erro na defini
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Coluna <%s> n�o encontrada"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7437,46 +7797,53 @@ msgstr "N
 msgid "No areas selected from vector map <%s>"
 msgstr "%d pontos escritos no vetor"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, fuzzy, c-format
 msgid "Pass %d of %d:"
 msgstr "classe %d (%d)\n"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "N�o consegui processar �reas do mapa vetorial <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Escrevendo mapa raster..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "criando arquivos de suporte para %s"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7543,16 +7910,18 @@ msgstr "Arquivo raster para superf
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "Mem�ria Esgotada! (Out of Memory)"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Relat�rio de estat�sticas para mapas raster."
@@ -7595,7 +7964,7 @@ msgstr "Par
 msgid "Unknown option '%s'"
 msgstr "Tipo desconhecido"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "Rotacionando dados ... "
@@ -7615,12 +7984,17 @@ msgstr "Nenhuma coluna de atributos especificada"
 msgid "Get area %d failed"
 msgstr "Inporta��o de vetor incompleta"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Falha abrindo arquivo dig de entrada."
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 #, fuzzy
 msgid "Area centroid without category"
 msgstr "%d pontos sem categoria"
@@ -7652,12 +8026,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "N�mero de colunas"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "coluna(s)"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7839,155 +8207,161 @@ msgstr "Tipo de fei
 msgid "Incompatible types"
 msgstr "Tipo da coluna incompat�vel"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "Nome da camada a usar para MATIZ (HUE)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Nome do mapa bin�rio de sa�da (use 'out=-' para sa�da padr�o)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Dist�ncia m�xima do ponto para a rede"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "N�mero de pontos de entrada: %d."
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "Nome da coluna categoria"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "criando novo arquivo cats ..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Sem registros para a linha (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "N�o � poss�vel chegar ao destino\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "N�o consegui abrir o arquivo de c�lulas <%s>"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "Mapa vetorial n�o � 3D"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, fuzzy, c-format
 msgid "Iso cost %d: %f"
 msgstr "classe %d (%d)\n"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "N�mero de pontos de entrada: %d."
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "N�o consegui criar a tabela %s"
@@ -8203,7 +8577,7 @@ msgstr ""
 "Caminho para o arquivo ASCCI resultante ou nome do vetor ASCII se '-o' foi "
 "definido"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr ""
@@ -8211,8 +8585,9 @@ msgstr ""
 "entrada padr�o"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8236,9 +8611,13 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8303,7 +8682,7 @@ msgstr "Separador de Campos"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "N�mero de d�gitos significativos (apenas ponto flutuante)"
 
@@ -8371,7 +8750,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8474,9 +8853,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "N�o consegui abrir arquivo de entrada <%s@%s>."
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "N�o consegui criar �ndice para tabela <%s>, chave <%s>"
@@ -9074,7 +9454,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Camada %d"
@@ -9098,7 +9478,7 @@ msgstr "N
 msgid "Resolving conflicts..."
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Escrevendo [%s]..."
@@ -9128,207 +9508,211 @@ msgid "Performs vector based generalization."
 msgstr "N�mero de pontos de interpola��o"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "M�ximo valor aleat�rio"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "Par�metro de suaviza��o"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Par�metro de suaviza��o"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Par�metros de tens�o"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "N�o consegui copiar a tabela"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "M�trica desconhecida: [%s]."
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Rotacionando dados ... "
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Resolu��o"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9407,8 +9791,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Cor do Texto"
 
@@ -9421,13 +9805,13 @@ msgstr "Cor do Texto"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9627,14 +10011,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Removendo centr�ides duplicados ..."
@@ -9687,14 +10071,6 @@ msgstr "Rotacionando dados ... "
 msgid "Constructing 3D hull..."
 msgstr "Imprimindo ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9778,7 +10154,9 @@ msgstr "N
 msgid "Bicubic interpolation"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10199,6 +10577,195 @@ msgstr "Erro na leitura do arquivo de categorias para <%s>."
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: Escrevendo cabe�alho VTK"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "Valor do raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d classes."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Separa��o dos agrupamentos (clusters)"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Nome do arquivo vetor de entrada"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Dist�ncia m�xima do ponto para a rede"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "N�mero m�nimo de pixels numa classe"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Separa��o dos agrupamentos (clusters)"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "Nome do mapa de pontos de sa�da"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "N�mero de classes deve ser < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Tamanho da vizinhan�a"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Contando locais no quadrado..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "criando novo arquivo cats ..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "Suaviza��o deve ser um valor positivo"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Usando m�xima dist�ncia entre pontos: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "%-5d categorias de linha lidas\n"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Dist�ncia m�xima do ponto para a rede"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Desvio padr�o"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Usando m�xima dist�ncia entre pontos: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Encontrando classes de treinamento..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+"\n"
+"Resolu��o = %d; per�odo = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Escrevendo [%s]..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Escrevendo arquivo raster %i\n"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "\rLendo arquivo [%s] ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%s: nenhum ponto de dados encontrado"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10343,26 +10910,26 @@ msgstr "Imposs
 msgid "Impossible to write to aux table"
 msgstr "Imposs�vel escrever na base de dados"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Vari�ncia"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "n�o consegui abrir arquivo de vetores <%s> em <%s>"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d pontos escrito no mapa de sa�da\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%-5d linhas lidas  e escritas na sa�da\n"
@@ -10401,7 +10968,7 @@ msgstr "Nome do mapa vetorial (2d) de entrada"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10414,14 +10981,14 @@ msgstr "Nome do mapa vetorial (2d) de entrada"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10451,50 +11018,133 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Nome de uma camada de entrada"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Obt�m coordenadas a partir da \"entrada padr�o\" (stdin)"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 #, fuzzy
 msgid "Assign unique categories to new points"
 msgstr "Designar categorias �nicas para os novos pontos (opera��o = n�s)"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "Tipo desconhecido"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Mapa vetor dos pontos finais"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Cor da Linha"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "Tipo desconhecido"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "N�o consegui ler linha %i\n"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "N�o consigo inserir na tabela: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "N�o consegui abrir mapa raster [%s]."
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "N�o consegui criar arquivo raster [%s]."
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Tabela <%s> n�o existe no banco de dados <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "O vetor '%s' j� existe."
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "O vetor '%s' j� existe."
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "N�o conseguir abrir banco de dados <%s> com driver <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "N�o consegui abrir arquivo de sa�da <%s>."
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "N�o consegui abrir mapa raster [%s]."
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "N�o consegui abrir arquivo de sa�da <%s>."
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10628,7 +11278,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d dist�ncias lidas do mapa."
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "N�o consegui calcular �rea do centr�ide."
@@ -10746,7 +11396,7 @@ msgstr "Conex
 msgid "Key column type is not integer"
 msgstr "Coluna chave deve ser inteiro"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "N�o consegui selecionar dados da tabela"
@@ -11584,7 +12234,7 @@ msgstr "Usar estilo de arquivo .prj da ESRI (aplic
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "Usar estilo de arquivo .prj da ESRI (aplic�vel somente a sa�da SHAPE)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11849,8 +12499,8 @@ msgstr "Localiza
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Vari�ncia da soma"
@@ -11860,7 +12510,7 @@ msgstr "Vari
 msgid "Mapset containing input vector map"
 msgstr "Nome do mapa vetorial (2d) de entrada"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Salva quadro atual"
@@ -11870,7 +12520,7 @@ msgstr "Salva quadro atual"
 msgid "Name of input vector map to re-project"
 msgstr "Nome do Raster de entrada"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Caminho para o banco de dados GRASS da loca��o de entrada"
 
@@ -11885,8 +12535,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "�rea\n"
@@ -11919,17 +12569,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Mapa raster de entrada"
@@ -12303,241 +12955,407 @@ msgstr ""
 "tabela: %s\n"
 "coluna chave: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Converte um mapa vetorial bin�rio do GRASS pela combina��o de outros camadas "
 "de mapa vetorial."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "Mapa de sa�da no qual os erros ser�o gravados"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "N�o criar topologia (topology) no modo de pontos"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "N�o criar tabela de atributo."
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 #, fuzzy
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 "Tamb�m copiar tabela de atributos. Apenas a tabela da camada 1 � suportada "
 "atualmente"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Tabela faltando"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "Colunas chave diferem"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr "N�mero de colunas difere."
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 #, fuzzy
 msgid "Column names differ"
 msgstr "Nomes das colunas diferem."
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "Tipos das colunas diferem"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "Comprimento das colunas de texto difere"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Coluna chave n�o encontrada"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "Mapas de sa�da n�o � 3D."
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "N�o consegui abrir arquivo de sa�da <%s>."
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, fuzzy, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "Erro lendo arquivo '%s'. Alguns dados podem n�o estar corretos\n"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Lendo arquivo dig_att...\n"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 #, fuzzy
 msgid "Intersections at borders will have to be snapped"
 msgstr "Interse��es nas bordas ser�o ligadas."
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 #, fuzzy
 msgid "Lines common between files will have to be edited"
 msgstr "Linhas comuns aos arquivos ter�o que ser editadas."
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 #, fuzzy
 msgid "The header information also may have to be edited"
 msgstr "A informa��o do cabe�alho tamb�m pode ter que ser editada."
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d registros atualizados"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "N�o consegui abrir cursor de sele��o: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "N�o consegui obter linha"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Tipo da coluna desconhecido"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "N�o consegui inserir novo registro: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "Se sobrepondo � verifica��o da proje��o"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Arquivo de entrada"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "Imprime apenas a regi�o do mapa raster"
+msgid "Layer number to store return information as category"
+msgstr "Camada n�mero"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
 #, fuzzy
-msgid "Subregion"
-msgstr "Regi�o\n"
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Camada para"
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "Imprime apenas a regi�o do mapa raster"
+
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 #, fuzzy
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Importar apenas subregi�o (xmin,ymin,xmax,ymaz  - normalmente W,S,E,N)"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Nome da nova loca��o a criar"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+#, fuzzy
+msgid "Filter range for z data (min,max)"
+msgstr "Intervalo de inteiro: min,max"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "valores inteiros s�o importados"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "valores inteiros s�o importados"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Mostra hist�rico do vetor ao inv�s de informa��es"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Nome do mapa de pontos de sa�da"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+msgid "Layer number or name for mask option"
+msgstr "Nome do arquivo vetor de entrada"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Correla��o"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Escrevendo [%s]..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Nome da nova loca��o a criar"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Mostra hist�rico do vetor ao inv�s de informa��es"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "N�o atualizar a regi�o atual"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Vetor de entrada com pontos de treinamento"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Estender loca��o baseado no novo conjunto de dados"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "T�tulo do raster de sa�da"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "N�o consegui unidades de proje��o da loca��o atual"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Mapa raster [%s] n�o encontrado"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "N�o criar tabela de atributo."
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Tipo desconhecido"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Camada n�mero"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 #, fuzzy
 msgid "4 parameters required for 'spatial' parameter"
 msgstr " 4 par�metros s�o requeridos para o par�metro 'spatial'."
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12545,124 +13363,172 @@ msgstr ""
 "N�o consegui converter a proje��o do mapa de entrada para o formato do "
 "GRASS, n�o posso criar nova loca��o."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "N�o consegui criar a tabela %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Loca��o <%s> criada"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "O vetor '%s' j� existe."
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"N�o consegui converter a proje��o do mapa de entrada para o formato do GRASS "
-"para verifica��o"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "Se sobrepondo � verifica��o da proje��o"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Escrevendo [%s]..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Proje��o do conjunto de dados parece n�o combinar com a loca��o atual.\n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-#, fuzzy
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "Loca��o: %s\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d pontos carregados\n"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "PROJ_INFO do conjunto de dados importado �:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d pontos carregados\n"
+
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-#, fuzzy
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Considere gerar uma nova loca��o com o par�metro 'location' do dado de "
-"entrada.\n"
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"Proje��o do conjunto de dados de entrada e loca��o atual parecem combinar"
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "%d pontos carregados\n"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "O vetor '%s' j� existe."
+msgid "%lu points imported"
+msgstr "%d pontos carregados\n"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "N�o conseguir abrir banco de dados %s com driver %s"
+msgid "%lu input points were not valid"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Escrevendo [%s]..."
+msgid "%lu input points were outside of the selected area"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d points imported"
-msgstr "%d pontos carregados\n"
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d pontos al�m do limite"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d pontos al�m do limite"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d pontos al�m do limite"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Coordenadas para pesquisa"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "N�o consegui abrir mapa raster [%s]."
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "N�o conseguir abrir banco de dados %s com driver %s"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12672,22 +13538,22 @@ msgstr ""
 "Converte um mapa vetorial bin�rio do GRASS pela combina��o de outros camadas "
 "de mapa vetorial."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "Camada '%s' n�o dispon�vel"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "N�o consegui executar: %s"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "N�o consegui criar arquivo <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "O vetor '%s' j� existe."
@@ -12697,12 +13563,12 @@ msgstr "O vetor '%s' j
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Nome do arquivo de sa�da"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Arquivo raster para importar"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12714,25 +13580,29 @@ msgstr ""
 "\t\tArquivo shape ESRI: nome do arquivo\n"
 "\t\tArquivo do MapInfo: nome do arquivo"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Lista camadas dispon�veis na fonte dos dados e finaliza"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Lista camadas dispon�veis na fonte dos dados e finaliza"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12782,7 +13652,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Coordenadas inv�lidas %s %s"
+msgstr "N�mero de colunas"
 
 #: ../vector/v.delaunay/main.c:88
 #, fuzzy
@@ -12929,147 +13799,147 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "N�o exibir n�meros de categorias"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Mostra atributos do vetor"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "Op��o escala requer 'magnitude_map'"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' deve ser > 0 para 'cats'."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "A toler�ncia foi reajustada para %g (unidades de mapa)"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Nome ilegal do arquivo de sa�da"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Toler�ncia em unidades de mapa: %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "N�o consegui selecionar dados da tabela"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, fuzzy, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Atributo tem tamanho inv�lido (%.3f) para a categoria %d."
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Toler�ncia em unidades de mapa: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Encontrando classes de treinamento..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "Construindo �ndice espacial ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "Fazendo snap de fronteiras..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "Quebrando fronteiras..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Limpando fronteiras nos v�rtices"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Gerando lista de fronteiras que ser�o apagadas..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "N�o consegui calcular �rea do centr�ide."
@@ -13345,36 +14215,45 @@ msgstr "Nome do arquivo de sa
 msgid "%d features written to '%s'."
 msgstr "%d pontos escritos no vetor"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Loca��o: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "N�mero de pontos de entrada: %d."
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Calculando m�dias das classes ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Calculando m�dias das classes ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13436,7 +14315,7 @@ msgstr "%s=%s - n
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -14120,7 +14999,7 @@ msgstr "Sem registro na tabela para categoria '%d'"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14432,48 +15311,58 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "Mostra atributos do vetor"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "de SQL instru��o palavra-chave"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Delimitador vertical de registro na sa�da"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Regi�o\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Altura fixa para objetos vetoriais 3D"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "n�o consegui abrir arquivo de vetores <%s> em <%s>"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "N�o consegui abrir cursor de sele��o: '%s'"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "N�o encontrei mapset para %s"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "N�o exibir n�meros de categorias"
@@ -14514,46 +15403,50 @@ msgstr "N
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Escrever v�rtices da linha."
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Suaviza��o deve ser um valor positivo"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Tipo da coluna desconhecido"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s:em %s: %s"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s:em %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "N�mero de classes deve ser < 256!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
@@ -14677,7 +15570,9 @@ msgstr "
 msgid "Number of vertex points per grid cell"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Tipo de fei��o"
@@ -14781,10 +15676,13 @@ msgid "Writing out vector columns..."
 msgstr "Escrevendo [%s]..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14796,6 +15694,7 @@ msgstr "Inporta
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14961,8 +15860,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr "Deslocamento do r�tulo na dire��o Y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Nome da Fonte"
 
@@ -15041,6 +15941,130 @@ msgstr "Encontrando classes de treinamento..."
 msgid "Counting points quadrats..."
 msgstr "Contando locais no quadrado..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Assinaturas para usar na classifica��o"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "%s: nenhum ponto de dados encontrado"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "valores inteiros s�o importados"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "M�ximo valor aleat�rio"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Desvio padr�o"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -15055,28 +16079,28 @@ msgstr "Informa
 msgid "Target location <%s> not found"
 msgstr "regi�o <%s> n�o encontrada"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "conjunto de mapas <%s> na loca��o destino <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "n�o encontrado"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15429,11 +16453,6 @@ msgstr "de 
 msgid " Database connection not defined for layer <%s>"
 msgstr "Conex�o com banco de dados n�o definida para camada <%d>"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "tipo de coluna n�o suportado"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -15521,17 +16540,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d registros atualizados"
 msgstr[1] "%d registros atualizados"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "banco de dados"
+msgid "Name of OGR datasource to be imported"
+msgstr "Arquivo raster para importar"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15542,7 +16562,7 @@ msgstr ""
 "\t\tShapefile ESRI: diret�rio contendo shapefiles\n"
 "\t\tArquivo MapInfo: diret�rio contendo arquivos mapinfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 #, fuzzy
 msgid "OGR layer name. If not given, all available layers are imported"
@@ -15550,7 +16570,7 @@ msgstr ""
 "Vetor de sa�da, se n�o for fornecido, camadas dispon�veis ser�o apenas "
 "mostradas"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15561,55 +16581,55 @@ msgstr ""
 "\t\tArquivo shape ESRI: nome do arquivo\n"
 "\t\tArquivo do MapInfo: nome do arquivo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Mapa de entrada: tamanho m�nimo de bacias de drenagem exteriores"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 #, fuzzy
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 "Tamanho m�nimo da �rea a importar (unidades quadradas). �reas menores e "
 "ilhas ser�o ignoradas. Deve ser maior que snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "N�o pontos"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Limpando fronteiras nos v�rtices"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Removendo centr�ides duplicados ..."
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Limiar de 'snap' para fronteiras"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "-1 para n�o haver snap"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15617,186 +16637,188 @@ msgstr ""
 "Lista de nomes de colunas para usar no lugar dos nomes originais, o primeiro "
 "ser� usado para a coluna categoria"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Erro na leitura do arquivo de categorias para <%s>."
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Nome da coluna de atributo para usar como r�tulos"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "N�mero de colunas"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "%-5d categorias de pontos lidas\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Mostra oso formatos suportados e encerra"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Lista camadas dispon�veis na fonte dos dados e finaliza"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "N�o limpar pol�gonos (opera��o n�o recomendada)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "For�ar sa�da de valores inteiros"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "N�o consegui unidades de proje��o da loca��o atual"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "mostra os par�metros de conex�o atuais e finaliza"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Posi��o do cursor n�o � suportada pelo driver MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Camada '%s' n�o dispon�vel"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Dist�ncia de separa��o de fronteiras em unidades do mapa: %G"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Coluna chave '%s' n�o encontrada"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Coluna chave deve ser inteiro"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Coluna <%s> n�o encontrada"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 "Escrevendo coluna <%s> com largura fixa de 40 caracteres (pode ser truncado)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, fuzzy, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 "Escrevendo coluna <%s> com largura fixa de 40 caracteres (pode ser truncado)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, fuzzy, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15805,58 +16827,58 @@ msgstr ""
 "Largura da coluna '%s' ajustada para 255 (n�o foi especificada pelo OGR), "
 "alguns textos podem ser truncados!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, fuzzy, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 "Escrevendo coluna <%s> com largura fixa de 40 caracteres (pode ser truncado)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Tipo da coluna n�o suportado (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Importanto fei��es do mapa %d..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s sem geometria"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Exportar linhas como pol�gonos"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Fazendo snap de fronteiras..."
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Quebrando fronteiras..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Calculando m�dias das classes ..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15868,117 +16890,117 @@ msgstr ""
 "linha na tabela de atributos. O n�mero de fei��es para essas �reas est� "
 "armazenado com categoria na camada %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d pol�gonos de entrada\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, fuzzy, c-format
 msgid "%d input polygons"
 msgstr "%d pol�gonos de entrada\n"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Escrevendo [%s]..."
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "%d pontos sem categoria"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Limiar de 'snap' para fronteiras"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Entrada falhou"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "n�o."
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "em"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -16209,6 +17231,11 @@ msgstr ""
 "Conex�o com banco de dados n�o definida para a camada <%d>. Execute v.db."
 "connect."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Arquivo de c�lulas [%s] n�o encontrado"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16382,19 +17409,19 @@ msgstr "A op
 msgid "Querying database... "
 msgstr "\rLendo arquivo [%s] ..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "N�o consegui obter linha"
@@ -16587,14 +17614,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Mapa raster <%s> j� existe e ser� sobreescrito"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Mapa raster <%s> j� existe"
@@ -16732,14 +17759,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Designar categorias �nicas para os novos pontos (opera��o = n�s)"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Cria pontos ao longo das linhas de entrada"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "N�o consegui encontrar o mapa de entrada <%s>"
 msgstr[1] "N�o consegui encontrar o mapa de entrada <%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -17267,19 +18299,24 @@ msgstr "Fonte inv
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17293,6 +18330,7 @@ msgstr "Fonte inv
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17305,7 +18343,7 @@ msgstr "Fonte inv
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17471,6 +18509,7 @@ msgid "Unable to map image file"
 msgstr "N�o consegui abrir arquivo de imagem"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17488,14 +18527,14 @@ msgstr "N
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17534,6 +18573,58 @@ msgstr "N
 msgid "Using private colormap for DirectColor visual."
 msgstr "Usando paleta de cores privativa para visual DirectColor."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Exibe escala gr�fica no monitor do GRASS"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Lista todos os monitores"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Criar novo arquivo caso este n�o exista."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Remove todos os quadros e limpa a tela"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "para padr�o atual Pesquisa"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Mostra a extens�o da regi�o atual"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+"Posi��o da tela a partir da qual o texto ser� desenhado (porcentagem, [0,0] "
+"� o canto inferior direito)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17552,7 +18643,7 @@ msgstr "transformar para"
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17565,7 +18656,7 @@ msgstr "transformar para"
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17642,18 +18733,23 @@ msgstr ""
 "Atualizar na tabela os valores do raster nas posi��es dos pontos vetoriais"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17668,6 +18764,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17766,6 +18863,93 @@ msgstr "Porcentagem de mapear"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Converte um mapa raster 3D em mapas raster 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Nome do mapa raster 3D de entrada"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "N�mero de c�pias"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Mapa raster de entrada"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17903,7 +19087,7 @@ msgstr "<%s> criados na base de dados."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17917,8 +19101,8 @@ msgid "rename"
 msgstr "nome=%s\n"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17928,9 +19112,9 @@ msgid "input"
 msgstr "Mapa de entrada"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17946,6 +19130,79 @@ msgstr "quieto"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "N�o consegui encontrar o arquivo vetorial %s"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Produz um mapa vetorial dos contornos especificados a partir de um mapa "
+"raster."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Contraste"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Incremento entre curvas de n�vel"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Lista de curvas de n�vel"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Curva de n�vel m�nima"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Curva de n�vel m�xima"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "N�mero m�nimo de pontos para uma curva de n�vel (0 -> sem limite)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Mapa raster de entrada"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "N�o criar tabela de atributo."
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17954,7 +19211,7 @@ msgstr "Mostra os arquivos raster na loca
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -18012,8 +19269,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -18129,74 +19387,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Nome do mapa raster 3D de entrada"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Nome do raster de sa�da"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Nome do raster de sa�da"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -18231,11 +19458,11 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Nome do novo arquivo raster."
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
@@ -18244,38 +19471,21 @@ msgstr ""
 "#-#-#-#-#  grassmods_pt_br.po (grassmods_pt_br)  #-#-#-#-#\n"
 "Nome do mapa raster de entrada"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "N�mero de c�pias"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Mapa raster de entrada"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18375,8 +19585,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Nome do arquivo de sa�da"
+msgid "Name for output image (or text file for -t)"
+msgstr "Nome de um arquivo para gravar a sa�da do relat�rio"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18393,6 +19603,54 @@ msgstr "Usar coordenadas do mapa ao inv
 msgid "Use gnuplot for display"
 msgstr "Texto para exibir"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Arquivo world de sa�da"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Lista separada por v�rgulas, p.ex.: 1.4,3.8,13"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Nome de um arquivo para gravar a sa�da do relat�rio"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "<%s> criados na base de dados."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "N�mero de c�pias"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Mapa raster de sa�da"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18424,32 +19682,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Estender loca��o baseado no novo conjunto de dados"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "N�o consegui unidades de proje��o da loca��o atual"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18649,6 +19885,20 @@ msgstr "N
 msgid "Output field separator"
 msgstr "Separador de campo"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Converte um mapa raster 3D em mapas raster 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 #, fuzzy
 msgid "Displays a raster map and its legend on a graphics window"
@@ -18754,8 +20004,15 @@ msgstr "<%s> criados na base de dados."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Nome do novo arquivo raster."
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "%s=%s - nome ilegal"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Nome de um mapa raster existente"
@@ -18766,7 +20023,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr "acima para mapear"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18775,15 +20032,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Nome do novo arquivo raster."
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18834,7 +20091,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Substitui o conte�do do quadro ativo com a cor definida pelo usu�rio"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Nome do arquivo de sa�da"
 
@@ -18915,16 +20172,27 @@ msgstr "Nome de uma camada de entrada"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "T�tulo do raster de sa�da"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Converte um mapa raster 3D em mapas raster 2D"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -19001,12 +20269,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -19063,7 +20338,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Nome do mapa raster de cobertura"
+msgstr "Nome do mapa raster"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -19138,17 +20413,15 @@ msgid ""
 "co1+col2)"
 msgstr "para para para em"
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 #, fuzzy
 msgid "Redraws the content of currently selected monitor."
 msgstr "Mostra a extens�o da regi�o atual"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Lista todos os monitores"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 msgid ""
 "Create a 3D raster map from an assemblage of many coordinates using "
@@ -19156,12 +20429,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "Mostra as estat�sticas em estilo shell script"
@@ -19177,7 +20450,7 @@ msgid "ASCII file containing input data"
 msgstr "Arquivo ASCII contendo assinaturas espectrais"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "Relat�rio de estat�sticas para mapas raster."
@@ -19186,14 +20459,14 @@ msgstr "Relat
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Tipo de armazenamento para o mapa resultante"
 
@@ -19238,18 +20511,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Fator de escala para os valores da coluna de atributos"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Porcentagem do mapa para manter em mem�ria"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "Formato para relatar a declividade"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -19290,19 +20563,15 @@ msgid ""
 "on the fly."
 msgstr "Converte vetores OGR para GRASS. Drivers dispon�veis:\n"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Arquivo raster para importar"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Gera um mapa das �reas problem�ticas"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Alinhar a regi�o atual pelo mapa de entrada"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19405,7 +20674,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19493,24 +20762,18 @@ msgstr "Mostra os arquivos raster na loca
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "N�mero de c�pias"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Nome do mapa raster"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Mapa raster de entrada"
@@ -19630,17 +20893,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "N�mero de pontos de interpola��o"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19648,10 +20915,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19772,78 +21035,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Nome da nova loca��o a criar"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Lista camadas dispon�veis e finaliza"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Lista camadas dispon�veis e finaliza"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Lista camadas dispon�veis e finaliza"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "local do banco de dados"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "tabelas do sistema ao inv�s de tabelas do usu�rio"
@@ -19962,10 +21241,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -20023,6 +21298,61 @@ msgstr "Teste banco de dados banco de dados."
 msgid "Test name"
 msgstr "Nome da Tabela"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Converte um mapa raster 3D em mapas raster 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Nome da coluna de atributo para usar como r�tulos"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+#, fuzzy
+msgid "Smooth corners of area features"
+msgstr "Cantos suaves"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Incremento para a coordenada Z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Escreve valores raster como coordenada z. N�o cria tabela. Atualmente s� "
+"suporta pontos."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "N�o criar topologia (topology) no modo de pontos"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Usa valores do raster como categorias em vez de uma seq��ncia �nica (apenas "
+"CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -20093,6 +21423,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Tipo de fei��o"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Mostra oso formatos suportados e encerra"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -20272,20 +21613,26 @@ msgid "Description of the space time dataset"
 msgstr "Nome do novo arquivo raster."
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nome do novo arquivo raster."
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20329,13 +21676,13 @@ msgstr "Altura fixa para objetos vetoriais 3D"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Camada n�mero"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20418,7 +21765,7 @@ msgstr "Mostra os arquivos raster na loca
 msgid "Neighborhood size"
 msgstr "Tamanho da vizinhan�a"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "N�mero de pontos de interpola��o"
@@ -20522,24 +21869,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Resolu��o do mapa de sa�da"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "T�tulo para o mapa resultante"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadados"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Resolu��o"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Nome ilegal do arquivo de sa�da"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "N�o executar otimiza��o do corte da regi��o"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr ""
 "For�a mapas Lat/Lon a se ajustarem em coordenadas geogr�ficas (90N,S; 180E,W)"
@@ -20610,17 +21974,37 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "de pontos para"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "coluna(s)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Nome do mapa raster"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "coluna(s)"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Nome da coluna de atributo para usar como r�tulos"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Dist�ncia do buffer (em unidades do mapa)"
@@ -20715,6 +22099,7 @@ msgstr "Valor do raster"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20730,10 +22115,15 @@ msgstr "Valor dos padr
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "Valor do raster"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20851,28 +22241,23 @@ msgid ""
 msgstr ""
 "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "Mapa raster a ser amostrado"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "<%s> criados na base de dados."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Converte um mapa raster 3D em mapas raster 2D"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Propagar NULL"
 
@@ -20911,7 +22296,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "Gera um mapa raster com �reas cont�guas acrescidas de uma c�lula"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20926,7 +22311,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Raio do buffer"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "M�trica"
 
@@ -20944,12 +22329,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Converte um mapa raster 3D em mapas raster 2D"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "N�mero de pontos de interpola��o"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20975,7 +22360,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "em"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -21004,6 +22389,16 @@ msgstr "Par
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "em"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Loca��o: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -21014,20 +22409,11 @@ msgstr "atributo de mapear"
 msgid "Vector map to which to join other table"
 msgstr "N�o criar tabela de atributo."
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Camada para"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "coluna(s)"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -21056,17 +22442,17 @@ msgstr "N
 msgid "Imports space time raster dataset."
 msgstr "Nome do mapa raster que conter� os resultados"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Alinhar a regi�o atual pelo mapa de entrada"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "O vetor '%s' j� existe."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -21147,14 +22533,17 @@ msgstr "Mapa raster 3D <%s> n
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -21185,11 +22574,11 @@ msgstr "N
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "N�o consegui escrever em <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Erro na leitura do arquivo de hist�rico"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -21197,8 +22586,8 @@ msgstr "N
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Erro escrevendo dados"
 
@@ -21250,6 +22639,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "N�o consegui criar arquivo <%s>"
@@ -21403,9 +22793,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Cor da Borda"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21431,7 +22822,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "N�o consegui criar e resolver o sistema de equa��es lineares"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "N�o consegui criar mapa raster <%s>"
@@ -21501,6 +22895,141 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Nome de arquivo %d de mapa raster: %s j� existe. Ser� sobreescrito!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Calculando m�dias das classes ..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Favor fornecer tr�s mapas RGB g3d"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Mapa vetorial <%s> n�o encontrado"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Calculando dire��es do fluxo..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Nome do mapa de pontos vetorias para editar a tabela de atributos"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nome do mapa raster"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Nome do Raster de sa�da"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Nome do mapa raster que conter� os resultados"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s:em %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "M�todo de intepola��o a usar"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Mapa(s) de entrada n�o especificado(s)."
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Nome do banco de dados de entrada"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "N�mero de itera��es m�ximas"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "N�mero de itera��es m�ximas"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "N�mero de c�pias"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "N�o consegui descrever a tabela %s"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Erro na leitura de dados"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21639,11 +23168,11 @@ msgstr "N
 msgid "3D raster map for which to modify null values"
 msgstr "Mapa 3dcell para modificar valores nulos"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Lista de valores de c�lula para marcar como NULO"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "O valor que substitui o valor nulo"
 
@@ -21668,7 +23197,7 @@ msgstr "modifyNull: erro limpando todo o mosaico."
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: erro fechando arquivo tmp"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "Inporta��o de vetor incompleta"
@@ -21677,6 +23206,83 @@ msgstr "Inporta
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Explicitamente cria o arquivo bitmap 3D com valores NULL"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "Valor do raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Cria mapas raster a partir de arquivos de dados de pol�gono/linha/ponto."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Mapa raster dos pontos iniciais"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Mapa raster 3D <%s> n�o encontrado"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Escrevendo [%s]..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Mapa 3dcell para modificar valores nulos"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Incremento para a coordenada Z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "N�mero de pontos de interpola��o"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "N�o consegui criar arquivo tempor�rio"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21731,13 +23337,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Intervalo dos dados de sa�da"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Editar arquivo de categorias para [%s]?"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Tabela de cats para [%s] ajustada para %s"
@@ -21797,7 +23403,7 @@ msgstr "Erro na leitura de dados"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Carregando dados ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Erro fechando arquivo g3d"
@@ -22194,7 +23800,7 @@ msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 "Valores de mapa raster 3d incorretos! Valores devem estar entre 0 e 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, fuzzy, c-format
 msgid "Unknown method <%s>"
@@ -22204,7 +23810,7 @@ msgstr "M
 msgid "Aggregate operation"
 msgstr "Agregar"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -22240,6 +23846,38 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "N�o consegui alocar buffer de c�lulas."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Vari�ncia"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "Combina camadas vermelhas, verdes e azuis numa �nica camada composta."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Nome do Raster de sa�da"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Tamanho do cache de pontos"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "N�o consegui alocar mem�ria."
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Escrevendo arquivo raster %i\n"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22585,38 +24223,38 @@ msgstr "Mostra as estat
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22914,13 +24552,13 @@ msgid "Unknown operation '%s'"
 msgstr "Tipo desconhecido"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Loca��o: %s\n"
@@ -22993,8 +24631,8 @@ msgstr "solicitado"
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "O vetor '%s' j� existe."
+msgid "<%s> already exists. File not copied."
+msgstr "em"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -23115,8 +24753,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -23383,9 +25021,9 @@ msgstr "Lista de camadas para importar"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Valor do raster"
@@ -23400,16 +25038,16 @@ msgstr "mapear Pesquisa padr
 msgid "File name exclusion pattern (default: none)"
 msgstr "mapear Pesquisa padr�o todos"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 #, fuzzy
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "de"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 #, fuzzy
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "de"
@@ -23420,7 +25058,7 @@ msgid "Remove base raster maps"
 msgstr "Mapa raster de cobertura"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
@@ -23466,82 +25104,72 @@ msgstr "em atual."
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr "Listas dispon�vel de para."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr "mapear Pesquisa padr�o todos"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr "mapear Pesquisa padr�o todos"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "para padr�o atual Pesquisa"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Nome de padr�o atual"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Definir regi�o atual pela regi�o designada"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "Imprime apenas o tipo do mapa raster"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "Suprimir impress�o de cabe�alho"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 #, fuzzy
 msgid "Verbose listing (also list map titles)"
 msgstr "mapear"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Mapa raster [%s] n�o encontrado"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "N�o consegui escrever em <%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "n�o consegui abrir arquivo de vetores <%s> em <%s>"
@@ -23756,51 +25384,51 @@ msgstr "N
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Fonte inv�lida: %s"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "N�o consegui ajustar par�metros de proje��o lat/long"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Erro em pj_do_proj (proje��o das coordenadas de entrada)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 #, fuzzy
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
@@ -23809,7 +25437,7 @@ msgstr ""
 "Sa�da WGS84 n�o � poss�vel pois esta loca��o n�o cont�m\n"
 "par�metros de transforma��o do .datum. Execute g.setproj"
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -24034,38 +25662,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Arquivo raster para importar"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -24384,11 +26033,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Meu primeiro m�dulo raster."
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "Nome do mapa de pontos de sa�da"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24562,7 +26206,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 #, fuzzy
 msgid "Percent complete..."
 msgstr "Porcentagem completada: "
@@ -24986,7 +26630,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -25194,157 +26838,157 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Reprojeta um mapa raster de uma loca��o para a loca��o atual."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Localiza��o do mapa de entrada"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Nome do mapa vetorial (2d) de entrada"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "Nome do Raster de entrada"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Resolu��o do mapa de sa�da"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Mostra os arquivos raster na loca��o de entrada e encerra"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Imprime a regi�o atual (no estilo de script em shell)"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "Mapa de Entrada: localiza��o das depress�es reais"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Grupo [%s] destinado para loca��o [%s], mapset [%s]\n"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Arquivo de vetores [%s] n�o est� dispon�vel"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "N�o consegui informa��es de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "N�o consegui unidades de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "N�o obtive os valores de proje��o da loca��o atual"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "Grupo [%s] destinado para loca��o [%s], mapset [%s]\n"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "Mapa de entrada"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, fuzzy, c-format
 msgid "Cols: %d (%d)"
 msgstr "classe %d (%d)\n"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, fuzzy, c-format
 msgid "Rows: %d (%d)"
 msgstr "Grupo:    %s\n"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr "N� %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr "N� %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr "N� %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 #, fuzzy
 msgid "Output:"
 msgstr "Sa�da de mapa"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "Imprimindo ... "
@@ -25403,12 +27047,6 @@ msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 "Permite a cria��o e/ou modifica��o dos arquivos de suporte dos mapas raster"
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "T�tulo para o mapa resultante"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Texto para unidades dos dados do mapa"
@@ -25437,22 +27075,22 @@ msgstr "Mapa raster de entrada"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "mapa vetorial <%s> n�o encontrado no mapset atual"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] � uma reclassifica��o de outro mapa. Saindo."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Escrevendo novo arquivo de nulos para [%s]..."
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Apagando arquivo de nulos para [%s]   \n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Conclu�do."
 
@@ -26253,7 +27891,7 @@ msgstr "'%s' deve ser maior que zero; usando %s=255"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "N�o consegui abrir o arquivo %s"
@@ -26474,8 +28112,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "N�o consegui ler arquivo de categoria do mapa raster <%s@%s>"
@@ -26565,12 +28203,12 @@ msgstr "N
 msgid "Can't get cell header"
 msgstr "N�o consegui criar camada"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, fuzzy, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "Alterado para"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, fuzzy, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "Alterado para"
@@ -26765,18 +28403,13 @@ msgstr ""
 "N�mero de linhas do cabe�alho para pular no come�o do arquivo de entrada "
 "(escritas no hist�rico do mapa)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-#, fuzzy
-msgid "Filter range for z data (min,max)"
-msgstr "Intervalo de inteiro: min,max"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26805,7 +28438,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr "Especifique uma coluna z razo�vel."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "Fonte inv�lida: %s"
@@ -26815,15 +28448,15 @@ msgstr "Fonte inv
 msgid "Invalid vrange"
 msgstr "Fonte inv�lida: %s"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26845,7 +28478,7 @@ msgid "Reading input data..."
 msgstr "\rLendo arquivo [%s] ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Passagem #%d (de %d) ..."
@@ -26888,17 +28521,17 @@ msgstr "N
 msgid "Writing to output raster map..."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "%d pontos fora da regi�o atual."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 #, fuzzy
 msgid "Scanning data ..."
 msgstr "Rotacionando dados ... "
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -27058,11 +28691,6 @@ msgstr "Nome do Raster de sa
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "para"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Tipo de fei��o"
-
 #: ../raster/r.out.gdal/main.c:202
 #, fuzzy
 msgid "Creation option(s) to pass to the output format driver"
@@ -27622,106 +29250,111 @@ msgstr "Coordenada y <%s> ilegal"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Aten��o, ignorando ponto fora da janela: %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Gerencia valores NULL dos mapas raster dados."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Mapa 3dcell para modificar valores nulos"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Fazer o servi�o apenas se o mapa for decimal"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Fazer o servi�o apenas se o mapa for inteiro"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 #, fuzzy
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 "Fazer o servi�o apenas se o mapa n�o tiver um arquivo bitmap de valores nulos"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 #, fuzzy
 msgid "Remove NULL-value bitmap file"
 msgstr "Explicitamente cria o arquivo bitmap 3D com valores NULL"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "mapa vetorial <%s> n�o encontrado"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "valor ilegal para NULO"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "O vetor '%s' j� existe."
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "%s: ERRO n�o consegui abrir tempfile"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "%s: ERRO n�o consegui abrir tempfile"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "Mapa raster dos pontos iniciais"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Escrevendo novo arquivo de nulos para [%s]..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "mapa raster <%s> n�o encontrado"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Apagando arquivo de nulos para [%s]   \n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s=%s - nome ilegal"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: spec de valor ilegal"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Escrevendo arquivo raster %i\n"
@@ -28062,7 +29695,7 @@ msgstr "Nome do arquivo de entrada; ou \"-\" para ler da stdin"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Tipo de fei��o"
+msgstr "T�tulo do raster de sa�da"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -28146,90 +29779,179 @@ msgstr "Imprimindo ... "
 msgid "File <%s> created"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Cria mapas raster a partir de arquivos de dados de pol�gono/linha/ponto."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Arquivo contendo declara��es SQL"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Intervalo de inteiro: min,max"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Relat�rio de estat�sticas para mapas raster."
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "T�tulo do raster de sa�da"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Ajustar a regi�o coincidente com esse mapa raster"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Mapa raster [%s] n�o encontrado"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Tipo desconhecido"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Fonte inv�lida: %s"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Rotacionando dados ... "
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "N�o consegui abrir arquivo vetorial <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "Escrevendo [%s]..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%d pontos fora da regi�o atual."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Gera um mapa raster com �reas cont�guas acrescidas de uma c�lula"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Nome de uma camada de sa�da"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "M�xima dist�ncia entre pontos (em unidades do mapa)"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Dist�ncia m�xima do ponto para a rede"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "Duas camadas devem ser especificadas"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "M�trica desconhecida: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "M�xima dist�ncia entre pontos (em unidades do mapa)"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -28376,7 +30098,7 @@ msgstr "[%s]: cor n
 msgid "Converting <%s>..."
 msgstr "Convertendo <%s>..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "tipo do raster <%s> n�o combina"
@@ -28485,7 +30207,7 @@ msgid "There are no valid locations in the current region"
 msgstr "N�o existem loca��es v�lidas na regi�o atual"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -29080,7 +30802,7 @@ msgstr "[%s]: cor n
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29537,7 +31259,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Mostra as estat�sticas em estilo shell script"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29559,11 +31281,6 @@ msgstr "M
 msgid "Unable to write to temp file"
 msgstr "N�o consegui criar arquivo tempor�rio"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Escrevendo [%s]..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29681,7 +31398,7 @@ msgid "Writing output raster map..."
 msgstr "Escrevendo arquivo raster %i\n"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -29692,42 +31409,42 @@ msgstr "Escrevendo mapa raster <%s>..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Gera mapa raster de subbacias watershed."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Coordenadas N e E dos ponto(s) de partida"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Coordenada Leste ilegal <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Coordenada norte ilegal <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Aten��o, ignorando ponto fora da janela: %.4f,%.4f"
@@ -29822,24 +31539,24 @@ msgid "Invalid map type"
 msgstr "Fonte inv�lida: %s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, fuzzy, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "Fechando Mapas."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, fuzzy, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 "\n"
 "SE��O %d: Determina��o de divisores."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, fuzzy, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "de Mem�ria."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, fuzzy, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "de Por cento Concluir "
@@ -29952,25 +31669,25 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 #, fuzzy
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "Por cento:"
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "Por cento:"
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29978,8 +31695,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -30537,185 +32254,190 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "<return> seguinte � Bloqueio mapear."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Mapa de entrada"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Nome do Raster de entrada"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Mapa de Entrada: quantidade de fluxo superficial por c�lula"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Nome dos mapas raster de entrada"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Mapa de entrada: terreno bloqueando fluxo superficial, para USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Mapa de entrada: tamanho m�nimo de bacias de drenagem exteriores"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Valor de entrada: comprimento m�ximo para fluxo superficial, para USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Mapa de sa�da: n�mero de c�lulas que drenam atrav�s de cada c�lula"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Mapa de sa�da: um valor �nico � dado para cada meia-bacia"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 "Sa�da de mapa: fator de comprimento do declive e declividade (LS) para USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Sa�da de mapa: fator de comprimento de declividade (S) para USLE"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Fator de convers�o para os valores de z"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Permitir apenas fluxo horizontal e vertical de �gua"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Habilita op��o de swap em disco: Opera��o � lenta"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 #, fuzzy
 msgid "Sorry, you must choose an output map."
 msgstr "mapear."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "Suaviza��o deve ser um valor positivo"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30726,17 +32448,17 @@ msgstr ""
 " fluxo\n"
 " limiar limiar."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Tipo da coluna n�o suportado"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
@@ -30747,23 +32469,23 @@ msgstr[1] ""
 "\n"
 "SE��O 1 iniciando: Inicializando vari�veis. %d se��es no total."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "de Por cento Concluir "
@@ -30773,22 +32495,32 @@ msgstr "de Por cento Concluir "
 msgid "Closing accumulation map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Mapa raster de cobertura"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Mapa raster de cobertura"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Mapa raster de cobertura"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Mapa raster de cobertura"
@@ -30821,33 +32553,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "Mapa raster a ser amostrado"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Gera uma camada raster mostrando as sub-bacias de drenagem."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 #, fuzzy
 msgid "Aggregation method"
 msgstr "Agregar"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, fuzzy, c-format
 msgid "Unable to read color table for %s"
 msgstr "N�o consegui ler arquivo de cores."
@@ -31255,7 +32987,7 @@ msgstr "argumento val 
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "argumento val � necess�rio para mapas de ponto flutuante!"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - cor desconhecida\n"
@@ -31670,7 +33402,7 @@ msgstr ""
 "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31685,12 +33417,26 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Use a mesma resolu��o do mapa RASTER3D de entrada para os mapas 2d de sa�da, "
+"independente das cofigura��es da regi�o atual"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31991,34 +33737,34 @@ msgstr "Abrir mapear profundidade"
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "Mapas de entrada devem ser do mesmo tipo. CELL, FCELL ou DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "N�o exibir n�meros de categorias"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, fuzzy, c-format
 msgid "Pass number %d"
 msgstr "Camada n�mero"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Rotuladas %d linhas"
 msgstr[1] "Rotuladas %d linhas"
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 #, fuzzy
 msgid "Thinning completed successfully."
 msgstr "Transformada bem sucedida"
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -32329,32 +34075,12 @@ msgstr ""
 "Produz um mapa vetorial dos contornos especificados a partir de um mapa "
 "raster."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Incremento entre curvas de n�vel"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Lista de curvas de n�vel"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Lista de curvas de n�vel"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Curva de n�vel m�nima"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Curva de n�vel m�xima"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "N�mero m�nimo de pontos para uma curva de n�vel (0 -> sem limite)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32944,55 +34670,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Mapa raster ao qual alinhar"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Arquivo cont�m assinaturas resultantes"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Semente para gera��o de n�mero aleat�rio"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Escrevendo [%s]..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "Par�metros do agrupamento\n"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "Tipo desconhecido: %c"
@@ -33042,81 +34769,81 @@ msgstr "Tipo desconhecido"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "N�mero inv�lido de passos: %s"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "Fonte inv�lida: %s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "Tipo desconhecido"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "N�o consegui criar a tabela %s"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "N�o consegui fechar mapa de entrada"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -33312,7 +35039,7 @@ msgstr "varredura avante completa"
 msgid "Reverse sweep complete"
 msgstr "varredura reversa completa"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
@@ -33320,15 +35047,15 @@ msgstr ""
 "N�o consegui converter a proje��o do mapa raster de entrada para o formato "
 "do GRASS para verifica��o"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "Loca��o PROJ_INFO �:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "PROJ_INFO do conjunto de dados �:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -33369,14 +35096,6 @@ msgstr "Nome do novo arquivo raster."
 msgid "Band to select (default is all bands)"
 msgstr "Banda selecionada (o padr�o s�o todas as bandas)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadados"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -33399,7 +35118,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Ou -h ou rows= e cols= devem ser fornecidos"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "N�o consegui atualizar regi�o atual"
@@ -33418,7 +35137,7 @@ msgstr "O vetor '%s' j
 msgid "Reading band %d of %d..."
 msgstr "Lendo mapa"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Banda selecionada (%d) n�o existe"
@@ -33488,195 +35207,214 @@ msgstr "criando arquivos de suporte para %s"
 msgid "Link to raster map <%s> created."
 msgstr "O vetor '%s' j� existe."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Importar um arquivo raster bin�rio para uma camada raster do GRASS."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Arquivo raster para importar"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Banda selecionada (o padr�o s�o todas as bandas)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Nome de destino da loca��o da imagem"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "Nome da loca��o de onde ler a proje��o para transforma��o dos GCPs"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Nome do arquivo raster de eleva��o para entrada (metros)"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "N�o criar tabela de atributo."
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Manter os n�meros das bandas em vez de usar os nomes das cores"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "mostra as tabelas e finaliza"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "Voc� tem que especificar uma loca��o alvo diferente da loca��o sa�da"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "para topo mapear"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr "A op��o '-l' funciona apenas em loca��es Lat/Lon"
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Seguindo com a importa��o..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "N�o consegui abrir o arquivo de assinatura."
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "N�o consegui criar arquivo raster [%s]."
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Copiando %d GCPS em arquivo de pontos para <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Re-projetando tabela GCPs:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Proje��o de entrada para a tabela GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* Proje��o de sa�da para a tabela GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Erro em pj_do_proj (N�o posso re-projetar GCP %i)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "N�o consegui traduzir valores chave de proje��o das entradas GCPs"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "N�o consegui informa��es de proje��o da loca��o destino"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "N�o consegui unidades de proje��o da loca��o alvo"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "N�o obtive os valores chave de proje��o da loca��o alvo"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Escrevendo mapa raster <%s>..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr ""
 "Configurando tabela de cores cinza para <%s> (8bit, intervalo completo)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 "Configurando tabela de cores cinza para <%s> (16bit, intervalo de imagem)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
@@ -33807,7 +35545,7 @@ msgstr "Mapa de eleva
 msgid "Writing topographic index map..."
 msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "N�mero de pontos de entrada: %d."
@@ -33909,12 +35647,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Exibir"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33922,24 +35660,24 @@ msgstr ""
 "Cria um mapa raster composto, usando valores conhecidos de categorias de uma "
 "(ou mais) camada(s) para preencher �reas de \"no data\" em outra camada."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Nome dos mapas raster para emendar"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Nome do mapa raster resultante"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Usar zero (0) para transpar�ncia ao inv�s de NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "N�mero m�nimo de pixels numa classe"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "criando arquivos de suporte para %s"
@@ -34012,43 +35750,6 @@ msgstr "Tra
 msgid "Converts a raster map into a vector map."
 msgstr "Converte um mapa raster em uma camada de mapa vetorial."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Nome da coluna de atributo para usar como r�tulos"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-#, fuzzy
-msgid "Smooth corners of area features"
-msgstr "Cantos suaves"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Usa valores do raster como categorias em vez de uma seq��ncia �nica (apenas "
-"CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Incremento para a coordenada Z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Escreve valores raster como coordenada z. N�o cria tabela. Atualmente s� "
-"suporta pontos."
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "N�o criar topologia (topology) no modo de pontos"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -34576,11 +36277,6 @@ msgstr "Tamanho do cache de pontos"
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Mapa raster de sa�da"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34869,7 +36565,7 @@ msgstr "Gera superf
 msgid "Name for output raster map(s)"
 msgstr "Nome do Raster de sa�da"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Dist�ncia m�xima do ponto para a rede"
@@ -34896,7 +36592,7 @@ msgstr "N
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Lendo arquivo dig_att...\n"
@@ -35233,7 +36929,7 @@ msgstr "N
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -35259,7 +36955,7 @@ msgstr "Exibir"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -35282,7 +36978,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Exibir"
@@ -35439,7 +37135,7 @@ msgstr "N
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "N�o consegui fechar o novo mapa g3d"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "N�o consegui fechar o novo mapa g3d"
@@ -35613,11 +37309,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "N�o consegui ler arquivo de limite"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "N�o consegui escrever em <%s>"
@@ -35856,21 +37552,61 @@ msgstr "incidout precisa que o par
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Modo 2: irradia��o di�ria integrada para um dado dia do ano"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Usando as coordenadas do centro do mapa\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Escrevendo arquivo raster <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Fonte inv�lida: %s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Usando as coordenadas do centro do mapa\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Escrevendo arquivo raster <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Usando as coordenadas do centro do mapa\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Escrevendo arquivo raster <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35896,81 +37632,90 @@ msgstr "Descompactar o mapa"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Mostra as estat�sticas em estilo shell script"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "mapa vetorial <%s> n�o encontrado"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "�rea\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "�rea j� conclu�da."
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "�rea j� conclu�da."
+msgid "Uncompressing <%s>"
+msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Valor dos padr�es de bits"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Valor dos padr�es de bits"
+
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 "[%s] � uma reclassifica��o de [%s em %s] - n�o � poss�vel editar o cabe�alho!"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -36003,52 +37748,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "raster <%s> n�o encontrado"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Tipo de fei��o"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Gera uma camada raster mostrando as sub-bacias de drenagem."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Ou -h ou rows= e cols= devem ser fornecidos"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Loca��o: %s\n"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** <%s> tem assinaturas demais (limite � 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Duas camadas devem ser especificadas"
@@ -36493,21 +38238,26 @@ msgstr[1] "Calculando m
 msgid "Calculating %s"
 msgstr "Calculando m�dias das classes ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' deve ser > 0 para 'cats'."
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Correla��o"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Gera valores aleat�rios de c�lula com depend�ncia espacial."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "N�mero m�ximo de itera��es: %d\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -36656,7 +38406,7 @@ msgstr "Tabela faltando"
 msgid "Grid line width"
 msgstr "Largura da linha"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr "Cor da Borda"
@@ -36788,15 +38538,10 @@ msgid "Starting and ending coordinates"
 msgstr "Usando as coordenadas do centro do mapa\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Cor da Linha"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "Cor do Texto"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -36826,8 +38571,8 @@ msgid "Name of monitor to start"
 msgstr "Nome do monitor gr�fico que ser� iniciado"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36889,49 +38634,67 @@ msgstr "Mostra a extens
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Mostra a extens�o da regi�o atual"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Mostra a extens�o da regi�o atual"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "N�o selecionar automaticamente quando iniciar"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Libera o monitor selecionado atualmente"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "N�o consegui ler arquivo de cores."
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Abrir formul�rio em modo de edi��o"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 #, fuzzy
 msgid "Currently selected monitor:"
 msgstr "Libera o monitor selecionado atualmente"
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, fuzzy, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr "N�o adicionar � lista de comandos no monitor"
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
@@ -36941,64 +38704,74 @@ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 msgid "Monitor <%s> is not running"
 msgstr "raster <%s> n�o encontrado"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "Arquivo de c�lulas n�o encontrado\n"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "N�o consegui criar arquivo <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Arquivo de c�lulas n�o encontrado\n"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "N�o consegui abrir mapa raster [%s]."
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "N�o consegui criar arquivo <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "O vetor '%s' j� existe."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "N�o consegui executar: %s"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Sa�da de mapa"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "N�o consegui criar arquivo <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Escrevendo [%s]..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "N�o consegui ler arquivo de cores."
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Nenhum monitor selecionado"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Lista todos os monitores"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Arquivo de c�lulas n�o encontrado\n"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "N�o consegui abrir o arquivo de c�lulas [%s]"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "N�o consegui ler arquivo de cores."
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "N�o adicionar � lista de comandos no monitor"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -37113,12 +38886,12 @@ msgstr "%s=%s - nome ilegal"
 msgid "[%s]: illegal value specified"
 msgstr "%s=%s - nome ilegal"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Mostrar informa��o topol�gica (depura��o)"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -37127,16 +38900,35 @@ msgstr ""
 "Sobrep�e valores de categorias em um mapa raster no quadro ativo do monitor "
 "gr�fico."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Mapa raster dos pontos iniciais"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Usar cor do texto a partir da cor da c�lula"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Fonte"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "Nome do arquivo vetor resultante"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -37144,7 +38936,7 @@ msgstr[0] "Cor da Borda"
 msgstr[1] "Cor da Borda"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -37152,7 +38944,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr "atual defini��o C�lulas ativo c�lula para."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -37235,11 +39027,6 @@ msgstr "Cor de preenchimento"
 msgid "Colorize features according color definition column"
 msgstr "Erro na defini��o de cor na coluna GRASSRGB, �rea %d com cat %d"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Coluna de defini��o das cores n�o definida."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -37249,7 +39036,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Largura da linha"
 
@@ -37818,41 +39605,41 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Coordenadas inv�lidas %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Mostra informa��es sobre o monitor gr�fico atual"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 #, fuzzy
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Mostra ret�ngulo na tela"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 #, fuzzy
 msgid "Display screen dimensions (width, height)"
 msgstr "Mostra tamanho da tela"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 #, fuzzy
 msgid "Display active frame rectangle"
 msgstr "Mostra ret�ngulo na tela"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Mostra tamanho da tela"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "Mostra ret�ngulo na tela"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -38123,15 +39910,6 @@ msgstr "Alinhamento do texto"
 msgid "Line spacing"
 msgstr "Espa�amento entre linhas"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "Nome do arquivo vetor resultante"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Arquivo de entrada"
@@ -38198,7 +39976,7 @@ msgstr "Tipo de fei
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "Tipo de fei��o"
@@ -38241,6 +40019,11 @@ msgstr "Centralizar o gr
 msgid "Maximum value used for bar plot reference"
 msgstr "Maior valor usado como refer�ncia do gr�fico de barras"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Criar sa�da 3D"
+
 #: ../display/d.rgb/main.c:58
 #, fuzzy
 msgid ""
@@ -38250,6 +40033,11 @@ msgstr ""
 "Exibe tr�s mapas raster selecionados pelo usu�rio como bandas vermelha, "
 "verde e azul no quadro gr�fico atual"
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -38293,14 +40081,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Usar um subconjunto do intervalo do mapa para a legenda (min,m�x)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Fonte"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -38391,11 +40172,12 @@ msgstr "Intervalo de cores excede o limite superior dos dados"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "use=%s fora do intervalo [%.3f,%.3f]. (extender com 'range= ?')"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Nada a desenhar! (sem categorias com r�tulo?)"
 
@@ -38409,36 +40191,92 @@ msgstr "Exibe escala gr
 msgid "North arrow style"
 msgstr "Desenhar apenas a seta Norte"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Coordenadas em porcentagem do quadro ([0,0] � o canto superior esquerdo)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Cor da Linha"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Desenhar apenas a barra de escala"
@@ -38455,7 +40293,7 @@ msgstr "N
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -38463,65 +40301,65 @@ msgstr ""
 "Desenha setas representando a dire��o para mapas raster contendo dados de "
 "orienta��o."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Nome do mapa de orienta��o para exibi��o"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Tipo do mapa raster de orienta��o existente"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Cor para desenhar setas"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Cor para desenhar setas"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Cor para desenhas X's (valores nulos)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Cor para exibir informa��es desconhecidas"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Exibir seta a cada N-�sima c�lula da malha"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Mapa raster contendo valores do comprimento da seta"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Fator de escala para setas (mapa de magnitude)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "Valor ilegal para fator de escala"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "Valor ilegal de separa��o."
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "Magnitude � suportado somente para mapas de orienta��o do GRASS."
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 #, fuzzy
 msgid "Scale option requires magnitude_map"
 msgstr "Op��o escala requer 'magnitude_map'"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Erro lendo arquivo de limite."
@@ -38812,57 +40650,43 @@ msgstr ""
 "matriz de separabilidade de classes\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "mapa vetorial <%s> n�o encontrado no mapset atual"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "subrupo <%s> n�o encontrado"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Mapa raster [%s] existe no grupo."
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "Arquivo raster bin�rio a importar"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Subgrupo [%s] n�o possui nenhum arquivo"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Subgrupo [%s] s� cont�m 1 arquivo"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "O subgrupo deve conter ao menos 2 arquivos para executar %s"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "N�o consegui abrir o arquivo de assinatura."
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, fuzzy, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "** <%s> tem assinaturas demais (limite � 255)"
@@ -38944,181 +40768,195 @@ msgstr "N
 msgid "Name for output file containing final report"
 msgstr "Nome do arquivo de sa�da contendo a matriz de erro e capa"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "mapa vetorial <%s> n�o encontrado no mapset atual"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "subrupo <%s> n�o encontrado"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 "\n"
 "<%s> -- n�mero ilegal de classes iniciais"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 "\n"
 "<%s> -- valor(es) ilegal(is) de intervalo(s) de amostragem"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr ""
 "\n"
 "<%s> -- n�mero ilegal de itera��es"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 "\n"
 "<%s> -- valor ilegal de converg�ncia"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 "\n"
 "<%s> -- valor ilegal de separa��o"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "valor ilegal para NULO"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "N�o consegui criar arquivo [%s]"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "################## AGRUPAMENTO (%s) ##################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Grupo:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Subgrupo: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Arquivo de assinatura resultante: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Regi�o\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Norte: %12.2f  Leste: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Sul: %12.2f  Oeste: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Res:   %12.2f  Res:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Linhas:  %12d  Cols: %12d  C�ls: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "M�scara: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Par�metros do agrupamento\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " N�mero de classes iniciais:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [do arquivo de assinatura %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "Tamanho m�nimo de classe:       %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "M�nima separa��o de classe:    %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Converg�ncia porcentual:         %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "N�mero m�ximo de itera��es: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "Intervalo de amostragem de linhas %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "Intervalo de amostragem nas colunas %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Lendo arquivo dig_att...\n"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 #, fuzzy
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 "Mem�ria Esgotada. Por favor execute novamente escolhendo uma amostra menor"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Tamanho da amostra: %d pontos\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 #, fuzzy
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
@@ -39126,7 +40964,7 @@ msgstr ""
 "Pontos da amostra insuficientes. Por favor execute novamente, escolhendo uma "
 "amostra maior"
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 #, fuzzy
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
@@ -39134,26 +40972,26 @@ msgstr ""
 "Pontos n�o-nulos insuficentes na amostra. Verifique sua regi�o atual (e "
 "m�scara)"
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## resultados finais #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d classes (converg�ncia=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 "N�o consegui escrever arquivo de assinatura <%s> para o grupo <%s>, subgrupo "
 "<%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -39161,12 +40999,12 @@ msgstr ""
 "\n"
 "#################### CLASSES ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d classes, %.2f%% pontos est�veis\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -39493,8 +41331,8 @@ msgid "radiance"
 msgstr "Vari�ncia"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Resolu��o"
@@ -39866,359 +41704,403 @@ msgstr "Mapa raster [%s] n
 msgid "group <%s> references the following subgroups\n"
 msgstr "Subgrupo [%s] n�o possui nenhum arquivo"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Nome da superf�cie aleat�ria a produzir"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Resolu��o"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Escrevendo arquivo raster %i\n"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Nome da camada raster da superf�cie fractal"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Nome do raster de sa�da"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Nome de uma camada de entrada"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Nome do mapa raster para ser reescalonado"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Gera uma mapa de dire��es"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "N�mero de quadros"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "N�mero de quadros"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -40443,7 +42325,7 @@ msgstr "Mapa de treinamento do solo real"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "N�mero m�nimo de pixels numa classe"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "N�mero inv�lido de passos: %s"
@@ -40814,108 +42696,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Mem�ria Esgotada! (Out of Memory)"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Erro na leitura de dados"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Erro tentando ler o arquivo dbmscap\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Erro escrevendo dados"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "N�mero de pontos para criar"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "regi�o <%s> n�o encontrada"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Escrevendo [%s]..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Processando �reas de entradaA ..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "O tamanho da regi�o � menor que minreg, nada a exibir."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "Arquivo dig_att j� existe."
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Resolu��o"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Erro na leitura de dados"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Erro tentando ler o arquivo dbmscap\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Erro escrevendo dados"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "N�mero de pontos para criar"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Escrevendo [%s]..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40989,64 +42877,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Duas camadas devem ser especificadas"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "N�o consegui escrever o arquivo tempor�rio."
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Fonte inv�lida: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "%s: <%s> mapa raster n�o encontrado"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Criando %i mapas raster\n"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "%s: <%s> mapa raster n�o encontrado"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "N�mero inv�lido de passos: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "N�mero inv�lido de passos: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "regi�o <%s> n�o encontrada"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -41123,7 +43028,7 @@ msgstr "Nome do Raster de sa
 msgid "Name for output raster map (blue)"
 msgstr "Nome do Raster de sa�da"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -41179,7 +43084,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "corre��o"
@@ -42048,51 +43953,55 @@ msgstr ""
 msgid "Option '%s' is required for new exposure info"
 msgstr "Loca��o: %s\n"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Entrada falhou"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Nome do mapa resultante"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "T�tulo do raster de sa�da"
@@ -42386,6 +44295,10 @@ msgstr "N
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 #, fuzzy
 msgid ""
@@ -42799,12 +44712,36 @@ msgstr "T
 #~ msgstr "de tipos ativo banco de dados todos Suporte N�M.INT"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "N�o consegui criar a tabela %s"
+#~ msgid "<%s> already exists"
+#~ msgstr "O vetor '%s' j� existe."
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "N�o consegui criar a tabela %s"
+#~ msgid "<%s> already compressed"
+#~ msgstr "�rea j� conclu�da."
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "%s: nenhum ponto de dados encontrado"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Camada para"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Camada para"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Camada n�mero"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Coordenadas do ponto de origem"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "N�o criar tabela de atributo."
 
 #, fuzzy
 #~ msgid "time series"
@@ -42850,74 +44787,6 @@ msgstr "T
 #~ msgid "Number of quartals to use"
 #~ msgstr "N�mero de quadros"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Nome do mapa raster de entrada existente contendo isolinhas"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Nome do mapa raster de entrada existente contendo isolinhas"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o difusa [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o refletida [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o global (total) do feixe [W.m-2] (modo 1) ou arquivo "
-#~ "raster de irradia��o [Wh.m-2.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nome do raster de entrada"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nome do arquivo raster de eleva��o para entrada (metros)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o refletida [W.m-2] (modo 1) ou arquivo raster de "
-#~ "irradia��o [Wh.m�.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Sa�da de irradia��o global (total) do feixe [W.m-2] (modo 1) ou arquivo "
-#~ "raster de irradia��o [Wh.m-2.dia-1] (modo 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "N�mero de pontos de interpola��o"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Loca��o: %s\n"
 
@@ -42935,24 +44804,28 @@ msgstr "T
 #~ "%d classes, %.2f%% pontos est�veis\n"
 
 #, fuzzy
+#~ msgid "Subregion"
+#~ msgstr "Regi�o\n"
+
+#, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Alinhamento do texto"
 
 #, fuzzy
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "regi�o <%s> n�o encontrada"
+#~ msgid "Could not rewind input file"
+#~ msgstr "N�o consegui abrir arquivo vetorial <%s>"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Sa�da de mapa"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Nome do mapa raster"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Mapa de �ndice topogr�fico [ln(a/tanB)]"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "em"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Nome do mapa raster"
+#~ msgid "output map <%s> exists"
+#~ msgstr "Sa�da de mapa"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Tamanho da p�gina (padr�o %d linhas)"
@@ -42960,6 +44833,9 @@ msgstr "T
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Largura da p�gina (padr�o: %d caracteres)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -42985,6 +44861,14 @@ msgstr "T
 #~ msgstr "[%s] n�o encontrado."
 
 #, fuzzy
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "regi�o <%s> n�o encontrada"
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Sobrescrever proje��o (usar proje��o da loca��o)"
+
+#, fuzzy
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -43002,6 +44886,24 @@ msgstr "T
 #~ "Voc� pode usar a op��o -o para %s para ignorar esta verifica��o.\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "N�o consegui criar a tabela %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "todos em atual para atual"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Nome do mapa raster que conter� os resultados"
 
@@ -43036,162 +44938,52 @@ msgstr "T
 #~ msgstr "Salva quadro atual"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "em"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "todos em atual para atual"
+#~ msgid "OGR datasource name"
+#~ msgstr "banco de dados"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Mapa(s) de entrada n�o especificado(s)."
 
 #, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Criando %i mapas raster\n"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "N�o consegui ler arquivo REF para o subgrupo [%s] no grupo [%s]."
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d categorias carregadas da tabela"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Especifique a coluna z."
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "N�o consegui criar arquivo <%s>"
 
 #, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
+#~ msgid "Env file not found"
+#~ msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+#~ msgid "PID file not found"
+#~ msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+#~ msgid "Command file not found"
+#~ msgstr "Arquivo de c�lulas n�o encontrado\n"
 
 #, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Valor ilegal para fator de escala"
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Especifique a coluna z."
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "Um de!"
-
-#, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "Um de!"
-
-#, fuzzy
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr ""
-#~ "Cor do texto, tanto uma cor padr�o do GRASS como uma triplete R:G:B "
-#~ "(separada por dois pontos)"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Criando %i mapas raster\n"
 
 #, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "Exibir dados vetoriais do GRASS no quadro ativo do monitor gr�fico"
+#~ msgid "Name for output image"
+#~ msgstr "Nome do arquivo de sa�da"
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Cor para desenhar texto"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "N�o consegui ler arquivo REF para o subgrupo [%s] no grupo [%s]."
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Cor para desenhar malhas, ou \"none\""
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d categorias carregadas da tabela"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr "Nome do Raster de sa�da"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "erro de discretiza��o em unidades de mapa"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Tamb�m calcular m�xima dist�ncia de avistamento"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -43317,16 +45109,40 @@ msgstr "T
 #~ msgstr "Uso colchetes em"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "Nome do Raster de sa�da"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Tamb�m calcular m�xima dist�ncia de avistamento"
+#~ msgid "Default: input"
+#~ msgstr "erro de discretiza��o em unidades de mapa"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Exibir"
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "Exibir dados vetoriais do GRASS no quadro ativo do monitor gr�fico"
+
+#, fuzzy
+#~ msgid "Text color or \"none\""
+#~ msgstr "Cor do Texto"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Cor para desenhar texto"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
+
+#, fuzzy
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr ""
+#~ "Cor do texto, tanto uma cor padr�o do GRASS como uma triplete R:G:B "
+#~ "(separada por dois pontos)"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "Mapa vetorial n�o � 3D"
 
 #, fuzzy
 #~ msgid ""
@@ -43335,25 +45151,55 @@ msgstr "T
 #~ "Permite a cria��o e/ou modifica��o dos arquivos de suporte dos mapas "
 #~ "raster"
 
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Falha abrindo arquivo dig de entrada."
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "Arquivo dig_att n�o existe."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Falha abrindo arquivo dig_att."
+
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "N�o consegui criar arquivo raster [%s]."
+#~ msgid "Attaching categories..."
+#~ msgstr "Anexando categorias...\n"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "N�o consegui criar arquivo [%s]"
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "Falha ao atribuir um atributo (categoria %d) a uma linha."
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Mem�ria insuficiente para az"
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "ATENCION: linea %d etiqueta: %d corresponde a otra etiqueta: %d."
 
 #, fuzzy
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "ERRO_DO_SISTEMA: OLD_T_NEW recebeu um c�digo de tipo ruim %x"
+#~ msgid "Writing new file..."
+#~ msgstr "Escrevendo novo arquivo...\n"
 
 #, fuzzy
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "ERRO_DO_SISTEMA: NEW_T_OLD recebeu um c�digo de tipo ruim %x"
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "%-5d pontos e linhas escrito na sa�da.\n"
+
+#, fuzzy
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "%-5d centroides escritos en el archivo de salida.\n"
+
+#, fuzzy
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
+
+#, fuzzy
+#~ msgid "Endian of input vector map"
+#~ msgstr "Nome do mapa vetorial (2d) de entrada"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "R�tulos de categorias (dig_cats) n�o encontrados, tabela n�o foi criada.\n"
+
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "N�o consegui abrir arquivo dig_att ,%s>\n"
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -43463,134 +45309,136 @@ msgstr "T
 #~ msgstr "%-5d categorias lidas para a mem�ria\n"
 
 #, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "R�tulos de categorias (dig_cats) n�o encontrados, tabela n�o foi criada.\n"
-
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "N�o consegui abrir arquivo dig_att ,%s>\n"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Falha abrindo arquivo dig de entrada."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "Arquivo dig_att n�o existe."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Falha abrindo arquivo dig_att."
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "ERRO_DO_SISTEMA: OLD_T_NEW recebeu um c�digo de tipo ruim %x"
 
 #, fuzzy
-#~ msgid "Attaching categories..."
-#~ msgstr "Anexando categorias...\n"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "ERRO_DO_SISTEMA: NEW_T_OLD recebeu um c�digo de tipo ruim %x"
 
 #, fuzzy
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "Falha ao atribuir um atributo (categoria %d) a uma linha."
+#~ msgid "One or more coordinates"
+#~ msgstr "Fator de escala (\"scaling\") para coordenada x"
 
 #, fuzzy
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "ATENCION: linea %d etiqueta: %d corresponde a otra etiqueta: %d."
+#~ msgid "Name of elevation map"
+#~ msgstr "Nome do mapa raster de eleva��o"
 
-#, fuzzy
-#~ msgid "Writing new file..."
-#~ msgstr "Escrevendo novo arquivo...\n"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Texto para representar c�lula sem dados"
 
 #, fuzzy
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "%-5d pontos e linhas escrito na sa�da.\n"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Um de!"
 
-#, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "%-5d centroides escritos en el archivo de salida.\n"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "M�trica desconhecida: [%s]."
 
 #, fuzzy
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "N�o consegui obter informa��es de camada para o mapa vetorial"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Erro na leitura do arquivo de categorias para <%s>."
 
 #, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "Nome do mapa vetorial (2d) de entrada"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "Tipo de mapa raster desconhecido"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Erro na leitura do arquivo 'colr' para <%s>."
 
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Tamanho do cache (MiB)"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Texto representando c�lulas sem valores de dados"
 
-#, fuzzy
-#~ msgid "Can't call bad function"
-#~ msgstr "local do banco de dados"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Utilit�rio de interpola��o de superf�cies para mapas raster."
 
 #, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Erro lendo intervalo para [%s]"
+#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
+#~ msgstr "T�tulo do raster de sa�da"
 
 #, fuzzy
-#~ msgid "One or more coordinates"
-#~ msgstr "Fator de escala (\"scaling\") para coordenada x"
+#~ msgid ""
+#~ "Computes anisotropic cumulative cost of moving between different "
+#~ "geographic locations on an input elevation raster map whose cell category "
+#~ "values represent elevation combined with an input raster map layer whose "
+#~ "cell values represent friction cost."
+#~ msgstr ""
+#~ "Gera uma camada raster mostrando o custo cumulativo anisotropic de "
+#~ "movimento entre diferentes localiza��es sobre um mapa raster de entrada "
+#~ "cujos valores de c�lula representam o custo."
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Mem�ria insuficiente para adx"
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Nome da camada a usar para INTENSIDADE"
 
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Mem�ria insuficiente para ady"
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Nome da camada a usar para SATURA��O"
 
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Mem�ria insuficiente para adxx"
+#~ msgid "Name of output layer to be used for GREEN"
+#~ msgstr "Nome da camada de sa�da a usar para VERDE"
 
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Mem�ria insuficiente para adyy"
+#~ msgid "Name of output layer to be used for BLUE"
+#~ msgstr "Nome da camada de sa�da a usar para AZUL"
 
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Mem�ria insuficiente para adxy"
+#~ msgid "Surface generation program."
+#~ msgstr "Programa para gera��o de superf�cies."
 
 #, fuzzy
-#~ msgid "Cannot create quaddata"
-#~ msgstr "N�o consegui criar quaddata"
+#~ msgid ""
+#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
+#~ msgstr ""
+#~ "Bancos de dados lat/long n�o s�o suportados por r.flow. Use 'r.watershed' "
+#~ "para calcular fluxo."
 
-#, fuzzy
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "N�o consegui criar quadfunc"
+#~ msgid "%s=%s - illegal number of interpolation points"
+#~ msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
 
-#~ msgid "Cannot create tree"
-#~ msgstr "N�o consegui criar �rvore"
+#~ msgid "%s: no data points found"
+#~ msgstr "%s: nenhum ponto de dados encontrado"
 
 #, fuzzy
-#~ msgid "Cannot create tree info"
-#~ msgstr "N�o consegui criar info da �rvore"
+#~ msgid "Interpolating raster map <%s>... %d row... "
+#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
+#~ msgstr[0] "Interpolando mapa raster <%s> ... %d linhas ..."
+#~ msgstr[1] "Interpolando mapa raster <%s> ... %d linhas ..."
 
 #, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Converte arquivo de pontos ou ASCII do GRASS para um vetor bin�rio."
+#~ msgid "Output z-file (elevation) map"
+#~ msgstr "Gerar arquivo de eleva��o"
 
 #, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "Arquivo 3dview  <%s> n�o encontrado"
+#~ msgid "Output aspect map (or fy)"
+#~ msgstr "Gera arquivo com a dire��o da encosta"
 
 #, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "para site"
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "n�o."
 
 #, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "N�o consegui alocar mem�ria para 'string'"
+#~ msgid "Prefix for output raster map(s)"
+#~ msgstr "Nome do mapa raster de sa�da"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr ""
-#~ "\n"
-#~ "Transformando os vetores ...\n"
+#~ msgid "String to represent no data cell"
+#~ msgstr "Texto para representar c�lula sem dados"
+
+#~ msgid "Character to represent no data cell"
+#~ msgstr "Caractere para representa c�lula sem dados"
+
+#~ msgid "Binary raster file to be imported"
+#~ msgstr "Arquivo raster bin�rio para importar"
+
+#~ msgid "Name of spread path raster map"
+#~ msgstr "Nome do mapa de caminho do espalhamento"
+
+#~ msgid "Run verbosely"
+#~ msgstr "Executar verbosamente"
 
 #, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d pontos escritos no vetor"
+#~ msgid "%s available in mapset <%s>:"
+#~ msgstr "Lista formatos dispon�veis e finaliza"
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Nome da camada a usar para INTENSIDADE"
+#~ msgid "Null value indicator"
+#~ msgstr "Indicador de valor nulo"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Nome da camada a usar para SATURA��O"
+#, fuzzy
+#~ msgid "Suppress warnings"
+#~ msgstr "Suprimir p�ginas de cabe�alho"
 
 #, fuzzy
 #~ msgid ""
@@ -43611,54 +45459,62 @@ msgstr "T
 #~ msgstr "Arquivos raster ASCII para importar"
 
 #, fuzzy
-#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
-#~ msgstr "T�tulo do raster de sa�da"
+#~ msgid "Name of input raster map(s)"
+#~ msgstr "Nome do mapa raster de entrada"
 
 #, fuzzy
-#~ msgid ""
-#~ "Computes anisotropic cumulative cost of moving between different "
-#~ "geographic locations on an input elevation raster map whose cell category "
-#~ "values represent elevation combined with an input raster map layer whose "
-#~ "cell values represent friction cost."
-#~ msgstr ""
-#~ "Gera uma camada raster mostrando o custo cumulativo anisotropic de "
-#~ "movimento entre diferentes localiza��es sobre um mapa raster de entrada "
-#~ "cujos valores de c�lula representam o custo."
-
-#~ msgid "Name of output layer to be used for GREEN"
-#~ msgstr "Nome da camada de sa�da a usar para VERDE"
+#~ msgid "The output type of the space time dataset"
+#~ msgstr "Nome do novo arquivo raster."
 
-#~ msgid "Name of output layer to be used for BLUE"
-#~ msgstr "Nome da camada de sa�da a usar para AZUL"
+#, fuzzy
+#~ msgid "Type of the aggregation space time dataset, default is strds"
+#~ msgstr "Nome do novo arquivo raster."
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Utilit�rio de interpola��o de superf�cies para mapas raster."
+#, fuzzy
+#~ msgid "Greater value option that sets the >= area size limit [hectares]"
+#~ msgstr "�rea"
 
-#~ msgid "Surface generation program."
-#~ msgstr "Programa para gera��o de superf�cies."
+#, fuzzy
+#~ msgid "Prefix for output raster maps (default: input)"
+#~ msgstr "T�tulo do raster de sa�da"
 
 #, fuzzy
 #~ msgid ""
-#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
 #~ msgstr ""
-#~ "Bancos de dados lat/long n�o s�o suportados por r.flow. Use 'r.watershed' "
-#~ "para calcular fluxo."
+#~ "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
 
-#~ msgid "%s=%s - illegal number of interpolation points"
-#~ msgstr "%s=%s - n�mero de pontos de interpola��o ilegal"
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
 
-#~ msgid "%s: no data points found"
-#~ msgstr "%s: nenhum ponto de dados encontrado"
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
 
 #, fuzzy
-#~ msgid "Interpolating raster map <%s>... %d row... "
-#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
-#~ msgstr[0] "Interpolando mapa raster <%s> ... %d linhas ..."
-#~ msgstr[1] "Interpolando mapa raster <%s> ... %d linhas ..."
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Cor para exibir informa��es desconhecidas"
 
 #, fuzzy
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "n�o."
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Cor para desenhar malhas, ou \"none\""
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "de �rea"
+
+#, fuzzy
+#~ msgid "Invalid distance"
+#~ msgstr "Fonte inv�lida: %s"
+
+#~ msgid "Layer number"
+#~ msgstr "Camada n�mero"
 
 #, fuzzy
 #~ msgid "allocation"
@@ -43669,100 +45525,100 @@ msgstr "T
 #~ msgstr "Exibir"
 
 #, fuzzy
-#~ msgid "Name of elevation map"
-#~ msgstr "Nome do mapa raster de eleva��o"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Texto para representar c�lula sem dados"
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "Um de!"
+#~ msgid "Please specify input= or file="
+#~ msgstr "Especifique a coluna z."
 
 #, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "Um de!"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "M�trica desconhecida: [%s]."
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Erro na leitura do arquivo de categorias para <%s>."
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Erro na leitura do arquivo 'colr' para <%s>."
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#~ msgid "String representing no data cell value"
-#~ msgstr "Texto representando c�lulas sem valores de dados"
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Valor ilegal para fator de escala"
 
 #, fuzzy
-#~ msgid "Output z-file (elevation) map"
-#~ msgstr "Gerar arquivo de eleva��o"
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Output aspect map (or fy)"
-#~ msgstr "Gera arquivo com a dire��o da encosta"
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 
 #, fuzzy
-#~ msgid "Prefix for output raster map(s)"
-#~ msgstr "Nome do mapa raster de sa�da"
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "String to represent no data cell"
-#~ msgstr "Texto para representar c�lula sem dados"
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#~ msgid "Character to represent no data cell"
-#~ msgstr "Caractere para representa c�lula sem dados"
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
-#~ msgid "Binary raster file to be imported"
-#~ msgstr "Arquivo raster bin�rio para importar"
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Especifique a coluna z."
 
-#~ msgid "Name of spread path raster map"
-#~ msgstr "Nome do mapa de caminho do espalhamento"
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Especifique a coluna z."
 
-#~ msgid "Run verbosely"
-#~ msgstr "Executar verbosamente"
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "%s available in mapset <%s>:"
-#~ msgstr "Lista formatos dispon�veis e finaliza"
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Especifique a coluna z."
 
-#~ msgid "Null value indicator"
-#~ msgstr "Indicador de valor nulo"
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Especifique a coluna z."
 
 #, fuzzy
-#~ msgid "Suppress warnings"
-#~ msgstr "Suprimir p�ginas de cabe�alho"
+#~ msgid "Display the "
+#~ msgstr "Exibir"
 
 #, fuzzy
-#~ msgid "High resolution panchromatic image"
-#~ msgstr "transformar para"
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Pelo menos o texto ou '-c' devem ser fornecidos."
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Correla��o"
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Name of input raster map(s)"
-#~ msgstr "Nome do mapa raster de entrada"
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "The output type of the space time dataset"
-#~ msgstr "Nome do novo arquivo raster."
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Type of the aggregation space time dataset, default is strds"
-#~ msgstr "Nome do novo arquivo raster."
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
 
 #, fuzzy
-#~ msgid "Greater value option that sets the >= area size limit [hectares]"
-#~ msgstr "�rea"
+#~ msgid "High resolution panchromatic image"
+#~ msgstr "transformar para"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (default: input)"
-#~ msgstr "T�tulo do raster de sa�da"
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Correla��o"
 
 #, fuzzy
 #~ msgid "Name of elevation raster map"
@@ -43777,26 +45633,102 @@ msgstr "T
 #~ msgstr "Sem mapa de sa�da"
 
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr ""
-#~ "Calcula estat�sticas univariada das c�lulas n�o nulas de um mapa raster."
-
-#, fuzzy
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Cor para desenhar malhas, ou \"none\""
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "Computar o histograma em sil�ncia"
 
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Mem�ria insuficiente para adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Mem�ria insuficiente para ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Mem�ria insuficiente para adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Mem�ria insuficiente para adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Mem�ria insuficiente para adxy"
+
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "de �rea"
+#~ msgid "Cannot create quaddata"
+#~ msgstr "N�o consegui criar quaddata"
 
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "Fonte inv�lida: %s"
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "N�o consegui criar quadfunc"
 
-#~ msgid "Layer number"
-#~ msgstr "Camada n�mero"
+#~ msgid "Cannot create tree"
+#~ msgstr "N�o consegui criar �rvore"
+
+#, fuzzy
+#~ msgid "Cannot create tree info"
+#~ msgstr "N�o consegui criar info da �rvore"
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "N�o consegui criar arquivo [%s]"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Mem�ria insuficiente para az"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "Op��es -B e -C s�o mutuamente exclusivas. Escolha apenas uma."
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "Um de!"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "Um de!"
+
+#, fuzzy
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Converte arquivo de pontos ou ASCII do GRASS para um vetor bin�rio."
+
+#, fuzzy
+#~ msgid "Site file <%s> not found"
+#~ msgstr "Arquivo 3dview  <%s> n�o encontrado"
+
+#, fuzzy
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "para site"
+
+#, fuzzy
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "N�o consegui alocar mem�ria para 'string'"
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr ""
+#~ "\n"
+#~ "Transformando os vetores ...\n"
+
+#, fuzzy
+#~ msgid "%d sites written."
+#~ msgstr "%d pontos escritos no vetor"
+
+#, fuzzy
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Erro lendo intervalo para [%s]"
+
+#, fuzzy
+#~ msgid "Can't call bad function"
+#~ msgstr "local do banco de dados"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "N�o consegui criar arquivo raster [%s]."
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Tamanho do cache (MiB)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "Tipo de mapa raster desconhecido"
diff --git a/locale/po/grassmods_ro.po b/locale/po/grassmods_ro.po
index f52d353..ab90155 100644
--- a/locale/po/grassmods_ro.po
+++ b/locale/po/grassmods_ro.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_ro\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-07-17 22:14+0200\n"
 "Last-Translator: Andreea Marin <andreea.marin09 yahoo.com>\n"
 "Language-Team: GRASS Translation Team <grass-translations at lists.osgeo.org>\n"
@@ -222,6 +222,7 @@ msgstr ""
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -436,6 +437,10 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr "SQLITE db ocupată, deja așteptarea este de %d secunde..."
 
+#: ../db/drivers/sqlite/table.c:37
+msgid "Error in sqlite3_exec():"
+msgstr ""
+
 #: ../db/drivers/sqlite/fetch.c:72
 msgid "Unable to fetch:"
 msgstr ""
@@ -560,27 +565,27 @@ msgstr "Imposibil de creat arbore pentru harta raster <%s@%s>"
 msgid "Unable to open database:"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 msgid "SQLite database connection is still busy"
 msgstr "Conexiunea bazei de date SQLite este încă ocupată"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, c-format
 msgid "Database <%s> already exists"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 msgid "Unable to create database:"
 msgstr ""
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, c-format
 msgid "Database <%s> not found"
 msgstr ""
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -590,6 +595,11 @@ msgstr ""
 msgid "Unable grant on table:"
 msgstr ""
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Nu s-a putut obține rândul raster"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -702,7 +712,7 @@ msgstr ""
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -778,17 +788,17 @@ msgstr "Nume utilizator"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Setări"
 
@@ -822,39 +832,39 @@ msgstr "Printează parametrii conexiunii curente și ieși"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -896,7 +906,7 @@ msgstr "Listează toate driverele bazei de date."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -925,7 +935,7 @@ msgstr ""
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1015,10 +1025,10 @@ msgid "Unable to open database <%s>"
 msgstr "Imposibil de deschis baza de date <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1195,11 +1205,11 @@ msgstr "eșuat"
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr ""
@@ -1231,10 +1241,10 @@ msgstr ""
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Format"
 
@@ -1242,7 +1252,7 @@ msgstr "Format"
 msgid "Vertical record separator (requires -v flag)"
 msgstr ""
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1250,7 +1260,7 @@ msgstr ""
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr ""
 
@@ -1258,7 +1268,7 @@ msgstr ""
 msgid "Describe query only (don't run it)"
 msgstr ""
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr ""
 
@@ -1305,6 +1315,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr ""
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Ignoră erorile SQL și continuă"
 
@@ -1455,7 +1466,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 msgid "Output settings"
@@ -1568,7 +1578,7 @@ msgstr ""
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1576,15 +1586,15 @@ msgstr ""
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1670,7 +1680,7 @@ msgstr ""
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1712,7 +1722,7 @@ msgstr ""
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1725,26 +1735,27 @@ msgstr ""
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Imposibil de deschis baza de date <%s> cu driver-ul <%s>"
@@ -1754,7 +1765,8 @@ msgid "Column type not supported (must be string)"
 msgstr ""
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -1893,13 +1905,13 @@ msgstr ""
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -1907,8 +1919,8 @@ msgstr ""
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -1951,10 +1963,11 @@ msgstr ""
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -1968,13 +1981,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -1983,6 +1999,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -1998,7 +2015,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2018,11 +2035,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2034,27 +2051,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2072,74 +2089,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "raster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2149,6 +2169,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2164,6 +2185,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2182,6 +2204,7 @@ msgid "vector"
 msgstr "vector"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2190,15 +2213,16 @@ msgstr "vector"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 msgid "raster3d"
@@ -2232,7 +2256,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Format de ieșiere neacceptat"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Fișier <%s> creat."
@@ -2778,69 +2802,70 @@ msgid "Vector map <%s> not found"
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Imposibil de deschis harta vectorială <%s>"
@@ -2900,12 +2925,13 @@ msgstr "Nici un punct de control activ"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3023,7 +3049,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 msgid "distance"
 msgstr ""
@@ -3180,7 +3206,7 @@ msgid "Area:"
 msgstr ""
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr ""
@@ -3195,7 +3221,7 @@ msgstr ""
 msgid "No attribute table for layer %d"
 msgstr ""
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3208,15 +3234,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr ""
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr ""
@@ -3238,6 +3265,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3245,6 +3273,7 @@ msgid "extract"
 msgstr ""
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 msgid "select"
 msgstr ""
@@ -3254,10 +3283,10 @@ msgstr ""
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 msgid "random"
 msgstr ""
 
@@ -3278,12 +3307,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Atribute"
 
@@ -3302,39 +3330,45 @@ msgstr ""
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3350,7 +3384,10 @@ msgstr ""
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3419,7 +3456,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3466,45 +3503,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3546,11 +3584,11 @@ msgstr ""
 msgid "Format <%s> does not support writing"
 msgstr ""
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3691,9 +3729,9 @@ msgstr "Numele hărții vectoriale de intrare (A)"
 msgid "Name for output file where to save current settings"
 msgstr "Nume pentru fișierul nou PNG (utilizare de ieșire=- pentru stdout)"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr ""
 
@@ -3713,7 +3751,7 @@ msgstr ""
 msgid "Print current status in shell script style"
 msgstr ""
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Parametrii  -b & -c se exclud reciproc. Alege doar unul dintre ei."
@@ -3729,17 +3767,17 @@ msgid "%s= must be specified"
 msgstr "'%s' trebuie sa fie > 0 pentru '%s'"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 msgid "Supported formats:"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3749,66 +3787,67 @@ msgstr ""
 msgid "network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Găsește calea cea mai scurtă a unei rețele vectoriale."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr ""
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -3820,10 +3859,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -3835,48 +3875,82 @@ msgstr ""
 msgid "Cost"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+msgid "Turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+msgid "Layer with turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -3885,10 +3959,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -3904,8 +3978,8 @@ msgstr ""
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -3934,22 +4008,22 @@ msgstr ""
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -3958,17 +4032,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "Nu s-a putut insera o înregistrare nouă: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -3979,7 +4053,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -3989,7 +4063,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 msgid "geometry"
 msgstr ""
 
@@ -4043,17 +4117,17 @@ msgid "Unable to get category list <%s>"
 msgstr ""
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr ""
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr ""
@@ -4333,6 +4407,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr ""
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4353,12 +4428,15 @@ msgstr ""
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4514,11 +4592,11 @@ msgstr "Stratul trebuie să fie  > 0 pentru 'where'"
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Conexiunea bazei de date nu este definită pentru stratul %d"
@@ -4641,9 +4719,9 @@ msgid "Remove existing color table"
 msgstr ""
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 msgid "Remove"
 msgstr "Elimină"
@@ -4703,7 +4781,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4719,8 +4797,7 @@ msgstr "Nici o hartă raster de intrare specificată"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Parametrii  -b & -c se exclud reciproc. Alege doar unul dintre ei."
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -4746,6 +4823,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Harta vectorială <%s> nu este 3D"
@@ -4771,7 +4849,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr ""
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -4780,13 +4858,14 @@ msgstr ""
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -4816,8 +4895,9 @@ msgstr "Citirea trăsăturilor..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -4860,7 +4940,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr ""
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr ""
@@ -4912,6 +4992,7 @@ msgid "Point out of range"
 msgstr ""
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -4920,15 +5001,17 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5017,14 +5100,15 @@ msgstr ""
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Ieșiri"
 
@@ -5204,14 +5288,14 @@ msgstr ""
 msgid "Input failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 msgid "Secpar_loop failed"
 msgstr ""
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "Nu este suficient spațiu pe disc -- nu s-a putut scrie fișierele"
@@ -5254,9 +5338,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Trăsături omise fără categorie"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5314,7 +5398,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:368
 #, fuzzy, c-format
 msgid "Mask raster map [%s] not found"
-msgstr "harta raster 3D <%s> nu a fost găsită"
+msgstr "Harta raster 3D <%s> nu a fost găsită"
 
 #: ../vector/v.vol.rst/user1.c:383
 #, fuzzy
@@ -5361,9 +5445,9 @@ msgstr "Imposibil de deschis fișierul de ieșire <%s>"
 msgid "3D raster map <%s> created"
 msgstr "Harta raster <%s> creată."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5374,83 +5458,120 @@ msgstr ""
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 msgid "steiner tree"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Creaze un arbore Steiner pentru rețea și anumite terminale"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Număr de rânduri"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Număr de puncte pentru a fi creat(e)"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, c-format
+msgid "Steiner tree costs = %f"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5470,17 +5591,19 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 msgid "import"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 msgid "points"
 msgstr ""
 
@@ -5512,9 +5635,9 @@ msgstr ""
 msgid "Name of column containing z coordinate"
 msgstr ""
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "Ieșire 3D"
 
@@ -5560,7 +5683,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr ""
@@ -5578,7 +5701,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Copierea atributelor..."
@@ -5604,7 +5727,81 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "Importă fișier E00 într-o hartă vectorială."
 msgstr[1] "Importă fișier E00 într-o hartă vectorială."
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Printează parametrii conexiunii curente și ieși"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "Intrumentul %s necesită opțiunea %s"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Hartă nevalidă <%s>"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, c-format
+msgid "Unknown return filter value <%s>"
+msgstr ""
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5627,7 +5824,7 @@ msgstr[1] "Importă fișier E00 într-o hartă vectorială."
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5635,7 +5832,7 @@ msgstr[1] "Importă fișier E00 într-o hartă vectorială."
 msgid "statistics"
 msgstr ""
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6225,8 +6422,8 @@ msgstr ""
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Imposibil de creat fișierul temporar"
@@ -6283,12 +6480,12 @@ msgid "Breaking lines..."
 msgstr ""
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr ""
 
@@ -6296,11 +6493,11 @@ msgstr ""
 msgid "Merging lines..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr ""
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr ""
 
@@ -6315,12 +6512,13 @@ msgstr ""
 msgid "Attribute not found"
 msgstr "Atribut negăsit"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr ""
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr ""
@@ -6390,103 +6588,105 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr ""
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Generarea aleatorie a punctelor 2D/3D pe harta vectorială."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Număr de puncte pentru a fi creat(e)"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Nume pentru harta vectorială de ieșire"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Înălțimea z minimă (necesită parametrul z sau numele coloanei)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Înălțimea z maximă (necesită parametrul -z sau numele coloanei)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 msgid "Name of column for z values"
 msgstr ""
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 msgid "Writes z values to column"
 msgstr ""
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 msgid "Type of column for z values"
 msgstr ""
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr ""
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 msgid "Generate n points for each individual area"
 msgstr ""
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Numărul de puncte trebuie să fie > 0 (%d dat)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "Scrierea hărții vectoriale <%s> ..."
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr ""
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr ""
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "Tabelul trebuie să conțină doar două coloane"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -6494,18 +6694,18 @@ msgstr ""
 "Ați creat un tip de coloană nesuportat. Acest modul suportă doar coloane de "
 "tip INTEGER și cu DUBLĂ PRECIZIE."
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr ""
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Generarea punctelor..."
 
@@ -6547,7 +6747,7 @@ msgid "Name of existing raster map to be queried"
 msgstr ""
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 msgid "Name of attribute column to be updated with the query result"
 msgstr ""
 
@@ -6560,79 +6760,77 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "%d din categoriile existente în tabel"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr ""
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Regiunea <%s> nu a fost găsită"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Tip de coloană neacceptat"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 msgid "Reading features from vector map..."
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Scrierea hărții vectoriale <%s> ..."
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "Scrierea hărții vectoriale <%s> ..."
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, c-format
 msgid "%d records updated."
 msgstr ""
@@ -6640,13 +6838,13 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 msgid "univariate statistics"
 msgstr ""
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 msgid "zonal statistics"
 msgstr ""
@@ -6721,7 +6919,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr ""
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -6772,6 +6970,144 @@ msgstr ""
 msgid "%d records updated"
 msgstr ""
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Conexiunea bazei de date nu este definită pentru stratul %d"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Tip de coloană neacceptat"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Nici o înregistrare pentru linie (cat = %d)"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Nici o înregistrare pentru linie (cat = %d)"
+
+#: ../vector/v.out.lidar/main.c:196
+#, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Generează puncte vectoriale ca puncte 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+msgid "Layer number to store generated point ID as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld categorii"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Număr de strat (scrie în)"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Număr de strat (scrie în)"
+
+#: ../vector/v.out.lidar/main.c:517
+msgid "Layer number where RGB color is stored as category"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Coloana trebuie sa fie numerică"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Coloane"
+
+#: ../vector/v.out.lidar/main.c:543
+msgid "RGB color definition column"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+msgid "Color definition in R:G:B form"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Imposibil de actualizat regiunea curentă"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Imposibil de citit tabelul de culoare pentru %s"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -6807,6 +7143,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -6836,45 +7178,52 @@ msgstr ""
 msgid "No areas selected from vector map <%s>"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Scrierea hărții raster..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -6930,15 +7279,17 @@ msgstr ""
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 msgid "Cache size for raster rows"
 msgstr ""
 
@@ -6977,7 +7328,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Opțiunr necunoscută '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Citirea arealelor..."
 
@@ -6995,11 +7346,15 @@ msgstr ""
 msgid "Get area %d failed"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+msgid "Failed to plot polygon"
+msgstr ""
+
+#: ../vector/v.to.rast/do_areas.c:118
 msgid "Area without centroid (OK for island)"
 msgstr ""
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr ""
 
@@ -7029,11 +7384,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr ""
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Coloane"
-
 #: ../vector/v.net.centrality/main.c:154
 msgid "Name of closeness centrality column"
 msgstr ""
@@ -7198,151 +7548,156 @@ msgstr ""
 msgid "Incompatible types"
 msgstr ""
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 "Crearea de ciclu conectat la anumite noduri (Problema 'vânzătorului "
 "călător')."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+msgid "Point is not connected to the network"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, c-format
 msgid "Number of cities: %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 msgid "Creating cost cache..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, c-format
 msgid "No point at node %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, c-format
 msgid "No category for point at node %d"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 msgid "isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Desparte rețea în funcție de costul izoliniilor."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 
@@ -7539,13 +7894,14 @@ msgstr ""
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr ""
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 msgid "If not given or '-' then standard output"
 msgstr ""
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -7569,9 +7925,13 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -7631,7 +7991,7 @@ msgstr ""
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 
@@ -7689,7 +8049,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr ""
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -7791,9 +8151,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Imposibil de deschis fișierul de intrare <%s>. Eroare %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
@@ -8341,7 +8702,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -8362,7 +8723,7 @@ msgstr "Imposibil de calculat matricea inversă"
 msgid "Resolving conflicts..."
 msgstr "Rezolvarea conflictelor..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 msgid "generalization"
 msgstr ""
 
@@ -8387,200 +8748,201 @@ msgid "Performs vector based generalization."
 msgstr ""
 
 #: ../vector/v.generalize/main.c:100
-#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr ""
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
-"%d liniile/limitele nu au fost modificate din cauza supra-simplificării"
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 msgid "Lang Simplification Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 msgid "Network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Număr de iterații"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 msgid "Do not copy attributes"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Metodă necunoscută"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Scrierea hărții vectoriale <%s> ..."
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Imposibil de deschis harta vectorială <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 msgid "Displacement..."
 msgstr "Deplasare..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 msgid "Network generalization..."
 msgstr "Generalizarea rețelei..."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr "Atributele sunt necesare pentru opțiunea 'where', copierea tabelului"
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Generalizare (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Rezoluție fină"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "Metoda %s' nu a păstrat primul punct"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr "Metoda %s' nu a păstrat ultimul punct"
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 "%d limitele nu au fost modificate deoarece modificarea ar afecta topologia"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 "%d liniile/limitele nu au fost modificate din cauza supra-simplificării"
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr "redus"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr "modificat"
 
@@ -8652,8 +9014,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr ""
 
@@ -8666,13 +9028,13 @@ msgstr ""
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Culori"
@@ -8860,13 +9222,13 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr ""
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 msgid "Removing dangles..."
 msgstr ""
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 msgid "Removing bridges..."
 msgstr ""
 
@@ -8913,14 +9275,6 @@ msgstr ""
 msgid "Constructing 3D hull..."
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -8996,7 +9350,9 @@ msgstr ""
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9382,6 +9738,189 @@ msgstr ""
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "%s: datele punctuale nu au fost găsite"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "raster"
+
+#: ../vector/v.cluster/main.c:93
+msgid "clump"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Efectuează întreținerea rețelei."
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Număr de strat (scrie în)"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Distanța maximă sau -1 pentru nici o limită"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Număr de puncte pentru a fi creat(e)"
+
+#: ../vector/v.cluster/main.c:123
+msgid "Clustering method"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:127
+#, fuzzy
+msgid "Force 2D clustering"
+msgstr "Eliminare forțată"
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Număr de puncte pentru a fi creat(e)"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "'%s' trebuie sa fie > 0 pentru '%s'"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Încarca data..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+msgid "Not enough points in input, nothing to do"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Crează câteva fișiere temporare..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s=%s - trebuie să fie un număr pozitiv"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+msgid "Estimating maximum distance ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "%s: datele punctuale nu au fost găsite"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Deviația standard"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, c-format
+msgid "Estimated maximum distance: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Citirea hărții raster...."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, c-format
+msgid "No clusters found, adjust option %s"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Generarea punctelor..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Scrierea hărții..."
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Încarca data..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "%s: datele punctuale nu au fost găsite"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%s: datele punctuale nu au fost găsite"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%s: datele punctuale nu au fost găsite"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -9513,25 +10052,25 @@ msgstr ""
 msgid "Impossible to write to aux table"
 msgstr ""
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 msgid "network maintenance"
 msgstr ""
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Efectuează întreținerea rețelei."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr ""
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, c-format
 msgid "%d new points (nodes) written to output."
 msgstr ""
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr ""
@@ -9568,7 +10107,7 @@ msgstr ""
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -9580,14 +10119,14 @@ msgstr ""
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr ""
@@ -9616,44 +10155,127 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Găsește calea cea mai scurtă a unei rețele vectoriale."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 msgid "Name of input file"
 msgstr ""
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr ""
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 msgid "Snap points to network"
 msgstr ""
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+msgid "Turntable layer"
+msgstr ""
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr ""
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Imposibil de creat fișierul <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Imposibil de creat tabelul <%s>"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Imposibil de deschis harta vectorială <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Imposibil de deschis harta vectorială <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "<%s> deja există în mapset <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Harta raster <%s> există deja și va fi suprascrisă"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Harta raster <%s> există deja și va fi suprascrisă"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Imposibil de deschis baza de date <%s> cu driver-ul <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Imposibil de creat tabelul <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Imposibil de copiat tabela de atribute la harta vectorială <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Imposibil de creat tabelul <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -9780,7 +10402,7 @@ msgid "Categories already exist in layer %d"
 msgstr ""
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr ""
 
@@ -9886,7 +10508,7 @@ msgstr ""
 msgid "Key column type is not integer"
 msgstr ""
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr ""
@@ -10600,7 +11222,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -10845,8 +11467,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 msgid "Source"
 msgstr "Sursa"
 
@@ -10854,7 +11476,7 @@ msgstr "Sursa"
 msgid "Mapset containing input vector map"
 msgstr ""
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 msgid "Default: name of current mapset"
 msgstr ""
 
@@ -10862,7 +11484,7 @@ msgstr ""
 msgid "Name of input vector map to re-project"
 msgstr ""
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr ""
 
@@ -10877,8 +11499,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 msgid "Target"
 msgstr "Destinația"
 
@@ -10910,17 +11532,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Verifică locația <%s> mapset <%s>"
@@ -11278,324 +11902,541 @@ msgstr ""
 "Tabel %s\n"
 "Coloană primară: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+msgid "Do not expect input with topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
-msgid "Copy also attribute table"
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
 #: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
+msgid "Copy also attribute table"
+msgstr ""
+
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr ""
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr ""
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Imposibil de creat tabelul <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, c-format
 msgid "Patching vector map <%s>..."
 msgstr ""
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr ""
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr ""
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr ""
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr ""
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr ""
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 msgid "LAS input file"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Număr de strat (scrie în)"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Număr de strat (scrie în)"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Importă doar subregiunea"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Subregiune"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 msgid "If not specified, all points are imported"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
-msgid "Print LAS file info and exit"
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Fișier raster binar pentru a fi importat"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Număr de strat (scrie în)"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Conexiune"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+msgid "Import only n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> număr nevalid de puncte"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+msgid "Print LAS file info and exit"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+msgid "Invert mask when selecting points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 msgid "Extend region extents based on new dataset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "%ld categorii"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+msgid "Override projection check (use current location's projection)"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+msgid "Assume that the dataset has same projection as the current location"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, c-format
 msgid "Input file <%s> does not exist"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
 #, c-format
-msgid "Unknown filter option <%s>"
+msgid "-%c flag is not set but ID layer is not specified"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "vector, bază de date, tabel de atribute"
+
+#: ../vector/v.in.lidar/main.c:409
+#, c-format
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, c-format
 msgid "Unable to create new location <%s>"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Locația <%s> creată"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Harta vectorială <%s> există deja și va fi scrisă peste"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Generarea punctelor..."
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Generarea punctelor..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:724
+#, c-format
+msgid "%llu points imported (limit was %llu)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%s: datele punctuale nu au fost găsite"
+
+#: ../vector/v.in.lidar/main.c:732
+#, c-format
+msgid "%llu input points were not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:734
+#, c-format
+msgid "%llu input points were outside of the selected area"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
+#: ../vector/v.in.lidar/main.c:736
+#, c-format
+msgid "%llu input points were outside of the area specified by mask"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:738
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were filtered out by return number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
+#: ../vector/v.in.lidar/main.c:740
+#, c-format
+msgid "%llu input points were filtered out by class number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
+#: ../vector/v.in.lidar/main.c:742
+#, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Harta vectorială <%s> există deja și va fi scrisă peste"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:747
 #, c-format
-msgid "Unable open database <%s> by driver <%s>"
+msgid "%llu input points were skipped by count-based decimation"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:751
+#, c-format
+msgid "%lu points imported (limit was %d)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Generarea punctelor..."
+msgid "%lu points imported"
+msgstr "%s: datele punctuale nu au fost găsite"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:757
 #, c-format
-msgid "%d points imported"
+msgid "%lu input points were not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:759
 #, c-format
-msgid "%d input points were not valid"
+msgid "%lu input points were outside of the selected area"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:761
 #, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were filtered out by return number"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
 #, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were filtered out by class number"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:767
+#, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:769
+#, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:772
+#, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Numărul de puncte alocate"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Imposibil de deschis harta vectorială <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
 msgstr ""
 
 #: ../vector/v.external/main.c:55
@@ -11604,22 +12445,22 @@ msgid ""
 "PostGIS feature table."
 msgstr ""
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr ""
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, c-format
 msgid "Unable to delete '%s'"
 msgstr ""
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr ""
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, c-format
 msgid "Link to vector map <%s> created."
 msgstr ""
@@ -11628,11 +12469,11 @@ msgstr ""
 msgid "Name of input OGR or PostGIS data source"
 msgstr ""
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr ""
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -11640,22 +12481,26 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr ""
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 msgid "List available layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 msgid "List available layers including feature type in data source and exit"
 msgstr ""
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -11829,131 +12674,131 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 msgid "Do not make caps at the ends of polylines"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 msgid "Transfer categories and attributes"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 msgid "The tolerance must be > 0."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 msgid "Illegal scale value"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 msgid "Buffering features..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 msgid "Cleaning buffers..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 msgid "Breaking polygons..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 msgid "Cleaning boundaries at nodes"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 msgid "Calculating centroids for all areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr ""
@@ -12216,37 +13061,46 @@ msgstr ""
 msgid "%d features written to '%s'."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 msgid "cost allocation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 "Alocarea subrețelelor pentru cei mai apropiați centrii (direcție dinspre "
 "centru)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 msgid "Calculating costs from centers ..."
 msgstr ""
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Citirea hărții raster...."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -12301,7 +13155,7 @@ msgstr "%s=%s - număr ilegal de puncte de interpolare"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -12939,7 +13793,7 @@ msgstr ""
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -13225,44 +14079,53 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Printează aytibutele hărții vectoriale."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 msgid "Region"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 msgid "Exclude attributes not linked to features"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr ""
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr ""
@@ -13299,43 +14162,47 @@ msgstr ""
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
-msgid "Use either length or vertices"
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
 msgstr ""
 
 #: ../vector/v.split/main.c:108
+msgid "Use either length or vertices"
+msgstr ""
+
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, c-format
 msgid "Unknown unit %s"
 msgstr ""
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 msgid "Can not get projection units"
 msgstr ""
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, c-format
 msgid "Length in map units: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, c-format
 msgid "Length in meters: %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 msgid "Number of vertices must be at least 2"
 msgstr ""
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -13449,7 +14316,9 @@ msgstr ""
 msgid "Number of vertex points per grid cell"
 msgstr "Număr de iterații"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Tipul de ieșire"
@@ -13546,10 +14415,13 @@ msgid "Writing out vector columns..."
 msgstr ""
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -13560,6 +14432,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 msgid "aggregation"
@@ -13709,8 +14582,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr ""
 
@@ -13778,6 +14652,127 @@ msgstr ""
 msgid "Counting points quadrats..."
 msgstr ""
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Conexiune"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "%s: datele punctuale nu au fost găsite"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> număr nevalid de puncte"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Multiplicator pentru valorile Z"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Număr de iterații"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Număr de iterații"
+
+#: ../vector/v.decimate/main.c:232
+msgid "Use z in grid decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -13792,28 +14787,28 @@ msgstr ""
 msgid "Target location <%s> not found"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -14126,11 +15121,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr ""
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Tip de coloană neacceptat"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -14219,302 +15209,308 @@ msgid_plural "%d records updated."
 msgstr[0] "%d din înregistrările inserate"
 msgstr[1] "%d din înregistrările inserate"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr ""
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Fișier raster binar pentru a fi importat"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 msgid "Minimum size of area to be imported (square meters)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 msgid "import area centroids as points"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 msgid "import area boundaries as lines"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 msgid "import lines as area boundaries"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 msgid "import points as centroids"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 msgid "Snapping threshold for boundaries (map units)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 msgid "Encoding value for attribute data"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Numele coloanei de atribute folosită pentru înălțime"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Număr de coloane"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 msgid "If not given, all geometry columns from the input are used"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 msgid "List supported OGR formats and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 msgid "List available OGR layers in data source and exit"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr ""
+"Afectează accesul utilizatorului la datele existente în cadrul altor mapset-"
+"uri din locația curentă."
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Printează parametrii conexiunii curente și ieși"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Imposibil de deschis sursa de date <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 msgid "No OGR layers available"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Regiunea <%s> nu a fost găsită"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Folosirea vectorului temporar <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Regiunea <%s> nu a fost găsită"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, c-format
 msgid "Key column '%s' is not integer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, c-format
 msgid "%d %s without geometry skipped"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 msgid "Cleaning polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 msgid "Merging boundaries..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 msgid "Changing boundary dangles to lines..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 msgid "Changing boundary bridges to lines..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -14522,114 +15518,114 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, c-format
 msgid "Total area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 msgid "Import failed"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Nu s-a putut descrie tabelul<%s>"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 msgid "Region for the current mapset updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -14831,6 +15827,11 @@ msgstr ""
 "Conexiunea bazei de date nu este definită pentru stratul %d. Utilizați prima "
 "dată v.db.connect."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Harta vectorială <%s> nu este 3D"
+
 #: ../vector/v.to.db/parse.c:36
 msgid "Layer number or name (write to)"
 msgstr ""
@@ -14979,19 +15980,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr "Interogarea baza de date..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr ""
 
@@ -15163,14 +16164,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Harta raster <%s> există deja și va fi suprascrisă"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Harta raster <%s> există deja"
@@ -15293,14 +16294,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Crează linie paralelă cu liniile vectorului de intrare."
+
+#: ../vector/v.build.polylines/main.c:231
 #, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -15761,19 +16767,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -15787,6 +16798,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -15799,7 +16811,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -15941,6 +16953,7 @@ msgid "Unable to map image file"
 msgstr ""
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -15958,14 +16971,14 @@ msgstr ""
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16003,6 +17016,51 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+msgid "Manages display frames on the user's graphics monitor."
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Crează mapset în cazul în care acesta nu există"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Printează parametrii conexiunii curente și ieși"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+msgid "Print names of all frames including 'at' position and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -16020,7 +17078,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -16033,7 +17091,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -16109,18 +17167,23 @@ msgid ""
 msgstr "Încarcă valorile rasterului la poziția punctelor vectoriale din tabel."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -16135,6 +17198,7 @@ msgstr "Încarcă valorile rasterului la poziția punctelor vectoriale din tabel
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -16225,6 +17289,91 @@ msgstr ""
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Nume de ieșire pentru harta raster orientare "
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Nume de ieșire pentru harta raster orientare "
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Nu s-a putut închide harta"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+msgid "Register Null maps"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -16349,7 +17498,7 @@ msgstr ""
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 msgid "map management"
@@ -16361,8 +17510,8 @@ msgid "rename"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -16371,9 +17520,9 @@ msgid "input"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -16389,6 +17538,76 @@ msgstr ""
 "Reconstruiește topologie pentru toate hărțile vectoriale din mapset-ul "
 "curent."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "Produce harta vectorială a curbelor de nivel dintr-o hartă raster."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+msgid "contour"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Tipul trăsăturii (harta vectorială A)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Nu copiază tabelul"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 msgid "Lists registered maps of a space time raster dataset."
 msgstr ""
@@ -16396,7 +17615,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -16448,8 +17667,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -16557,73 +17777,42 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Nu s-a putut închide harta"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Nume de ieșire pentru harta raster orientare "
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 msgid "Shift factor for input space time raster dataset"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -16656,42 +17845,26 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Nume de ieșire pentru harta raster orientare "
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
-msgid "Number of r.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-msgid "Register Null maps"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
+msgid "Number of r.mapcalc processes to run in parallel"
 msgstr ""
 
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
@@ -16788,8 +17961,9 @@ msgid "multispectral"
 msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
-msgid "Name for output image"
-msgstr ""
+#, fuzzy
+msgid "Name for output image (or text file for -t)"
+msgstr "Numele stratului care va fi folosit pentru ROȘU"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 msgid "Graphics format for output file"
@@ -16803,6 +17977,48 @@ msgstr ""
 msgid "Use gnuplot for display"
 msgstr ""
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+msgid "output to text file"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+msgid "Comma separated list of coordinates"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+msgid "Sort the maps by category"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+msgid "Number of r.what processes to run in parallel"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+msgid "Output header row"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 msgid ""
 "Imports a space time vector dataset from a GRASS GIS specific archive file."
@@ -16833,28 +18049,8 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
-msgid "Extend location extents based on new dataset"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-msgid "Override projection check (use current location's projection)"
-msgstr ""
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-msgid "Assume that the dataset has same projection as the current location"
+msgid "Extend location extents based on new dataset"
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
@@ -17031,6 +18227,19 @@ msgstr ""
 msgid "Output field separator"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Nume de ieșire pentru harta raster orientare "
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr ""
@@ -17123,8 +18332,14 @@ msgstr ""
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+msgid "time management"
+msgstr ""
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 msgid "Name of an existing space time dataset"
 msgstr ""
 
@@ -17133,7 +18348,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -17141,15 +18356,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -17193,7 +18408,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr ""
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr ""
 
@@ -17267,15 +18482,26 @@ msgstr ""
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr ""
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 msgid "inputs"
 msgstr ""
@@ -17347,12 +18573,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -17470,13 +18703,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -17486,12 +18718,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr ""
 
@@ -17505,7 +18737,7 @@ msgid "ASCII file containing input data"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr ""
 
@@ -17513,14 +18745,14 @@ msgstr ""
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Statistici"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr ""
 
@@ -17556,17 +18788,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -17601,11 +18833,6 @@ msgid ""
 "on the fly."
 msgstr ""
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Fișier raster binar pentru a fi importat"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
@@ -17700,7 +18927,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -17782,22 +19009,17 @@ msgstr "Nume de ieșire pentru harta raster orientare "
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr ""
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 msgid "Extracts a subset of a space time vector dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 msgid "Register empty maps"
 msgstr ""
 
@@ -17902,26 +19124,26 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 msgid "Number of r.series processes to run in parallel"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 msgid ""
 "Performs spatio-temporal mapcalc expressions on temporally sampled maps of "
 "space time raster datasets."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -18028,73 +19250,89 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
-msgid "Name of extension to install or remove"
+msgid "addons"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:7
-msgid "Name of toolbox (set of extensions) when -t flag is given"
+msgid "download"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
+msgid "Name of extension to install or remove"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
-msgid "Prefix where to install extension (ignored when flag -s is given)"
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
+msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:11
-msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:12
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
+msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:14
+msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
+msgid "List available extensions in the official GRASS GIS Addons repository"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 msgid "Install"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr ""
 
@@ -18202,10 +19440,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr ""
@@ -18254,6 +19488,52 @@ msgstr ""
 msgid "Test name"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Convertește hartă vectorială în hartă raster (rasterizare)."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+msgid "Name of attribute column to store value"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+msgid "Write raster values as z coordinate"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+msgid "Do not build vector topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18318,6 +19598,15 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+msgid "Data type"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+msgid "Supported only for GTiff"
+msgstr ""
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr ""
@@ -18474,20 +19763,26 @@ msgid "Description of the space time dataset"
 msgstr ""
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Nume de ieșire pentru harta raster orientare "
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -18526,12 +19821,12 @@ msgstr "Transformarea Tasseled Cap (Kauth Thomas) pentru datele LANDSAT-TM"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -18549,7 +19844,7 @@ msgstr ""
 #: ../imagery/i.pca/main.c:85
 #, fuzzy
 msgid "Name for output basename raster map(s)"
-msgstr "Nume de ieșire pentru harta raster orientare "
+msgstr "Nume de ieșire pentru harta raster pantă "
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:9
 msgid "Satellite sensor"
@@ -18609,7 +19904,7 @@ msgstr ""
 msgid "Neighborhood size"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr ""
 
@@ -18700,23 +19995,40 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Numele pentru harta raster de ieșire nu este specificat"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Metadata"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Rezoluție fină"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 msgid "Optional"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr ""
 
@@ -18777,15 +20089,34 @@ msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 "Încarcă valorile vectorilor în pozițiile punctelor vectoriale din tabel."
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+msgid "column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 msgid "Name of vector map to be queried"
 msgstr ""
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Număr de coloane"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 msgid "Name of attribute column to be queried"
 msgstr ""
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr ""
 
@@ -18868,6 +20199,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -18880,11 +20212,15 @@ msgid "Sill value"
 msgstr ""
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Nume de ieșire pentru harta raster orientare "
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -18985,25 +20321,21 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 msgid "series"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-msgid "Sort the maps by category"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -19039,7 +20371,7 @@ msgstr ""
 "Generează o hartă raster cu areale continuu dezvoltate după o singură celulă."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -19052,7 +20384,7 @@ msgid "Radius of buffer in raster cells"
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metric"
 
@@ -19069,11 +20401,11 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 msgid "Number of interpolation processes to run in parallel"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -19098,7 +20430,7 @@ msgstr ""
 "Umple arealele fără date din harta raster folosind interpolarea spline."
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -19124,6 +20456,16 @@ msgstr ""
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Interpolare spline bicubică sau bilineară cu regularizare Tykhonov."
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Valoarea spline tension"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 msgid "Joins a database table to a vector map table."
 msgstr ""
@@ -19132,18 +20474,10 @@ msgstr ""
 msgid "Vector map to which to join other table"
 msgstr ""
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr ""
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-msgid "column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -19168,15 +20502,15 @@ msgstr ""
 msgid "Imports space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 msgid "Set the current region from the last map that was imported"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 msgid "Link the raster files using r.external"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -19210,7 +20544,7 @@ msgstr ""
 #: ../locale/scriptstrings/db.out.ogr_to_translate.c:8
 #, fuzzy
 msgid "Name for output table (default: input name)"
-msgstr "Nume de ieșire pentru harta raster orientare "
+msgstr "Nume pentru harta vectorială de intrare"
 
 #: ../raster3d/r3.timestamp/main.c:48
 msgid "Print/add/remove a timestamp for a 3D raster map"
@@ -19249,14 +20583,17 @@ msgstr ""
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -19287,11 +20624,11 @@ msgstr ""
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr ""
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -19299,8 +20636,8 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Eroare în scrierea datelor"
 
@@ -19349,6 +20686,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Imposibil de creat fișierul <%s>"
@@ -19488,9 +20826,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -19516,7 +20855,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr ""
@@ -19577,6 +20919,137 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr ""
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Procesarea liniilor..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Nu s-a putut închide harta"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Harta vectorială <%s> nu a fost găsită"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Nume pentru harta vectorială de ieșire"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Nume pentru harta vectorială de intrare"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Numele pentru harta raster de ieșire nu este specificat"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "Înălțimea punctului de vizualizare (în unități de hartă)"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Număr de iterații"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Driver-ul implicit nu este setat "
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+msgid "Integration"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:252
+msgid "Integration step in selected unit"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Baza de date implicită nu este setată"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Număr maxim de iterații"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Număr maxim de iterații"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Șterge tabela de atribute."
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Eroare în citirea datei"
+
 #: ../raster3d/r3.stats/main.c:51
 msgid "Generates volume statistics for 3D raster maps."
 msgstr "Generează statistici de volume pentru harta raster 3D."
@@ -19694,11 +21167,11 @@ msgstr ""
 msgid "3D raster map for which to modify null values"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -19722,7 +21195,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 msgid "null data"
 msgstr ""
 
@@ -19730,6 +21203,79 @@ msgstr ""
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Crează în mod explicit un fișier bitmap cu valorile 3D nule."
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Crează hartă raster dintr-un ansamblu de coordonate folosind statistici "
+"univariate."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Număr de iterații"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Număr de iterații"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Harta raster 3D <%s> nu a fost găsită"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+msgid "Proportional output"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:169
+msgid "3D raster map of proportional sum of values"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+msgid "Subtract raster values from the z coordinates"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+msgid "Transform"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr ""
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -19782,13 +21328,13 @@ msgstr ""
 msgid "Update range"
 msgstr ""
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr ""
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr ""
@@ -19840,7 +21386,7 @@ msgstr ""
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 msgid "Error flushing tiles"
 msgstr ""
 
@@ -20192,7 +21738,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -20202,7 +21748,7 @@ msgstr ""
 msgid "Aggregate operation"
 msgstr "Operațiune de agregare"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 msgid "Quantile to calculate for method=quantile"
 msgstr ""
@@ -20236,6 +21782,36 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr ""
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "radianță"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "Combină roșu, verde și albastru într-o singură hartă raster."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Nume de ieșire pentru harta raster pantă "
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+msgid "Failed to allocate memory for blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Scrierea unei hărți raster noi..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -20545,38 +22121,38 @@ msgstr ""
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -20853,13 +22429,13 @@ msgid "Unknown operation '%s'"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, c-format
 msgid "Option <%s> ignored"
 msgstr ""
@@ -20926,9 +22502,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: fișierele sunt la fel, nici o copiere nu este necesară"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> există deja"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> deja există în mapset <%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, c-format
@@ -21035,8 +22611,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -21287,9 +22863,9 @@ msgstr ""
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 msgid "Pattern"
 msgstr "Model"
 
@@ -21302,15 +22878,15 @@ msgstr "Mapset <%s> adăugat la calea de căutare"
 msgid "File name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -21319,7 +22895,7 @@ msgid "Remove base raster maps"
 msgstr ""
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr ""
@@ -21365,7 +22941,7 @@ msgstr "Redenumește fișierele de bază în mapsetul curent."
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
@@ -21373,70 +22949,60 @@ msgstr ""
 "Listează fișierele de bază disponibile GRASS specificate de utilizator "
 "folosind modulul de căutare."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr ""
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 msgid "Name of mapset to list (default: current search path)"
 msgstr ""
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 #, fuzzy
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 "Crează opțional un mapset nou sau liste cu mapset-uri valabile în locația "
 "dată."
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr ""
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 msgid "'.' for current region; '*' for default region"
 msgstr ""
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr ""
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr ""
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Mapset-ul <%s> nu a fost găsit"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Imposibil de citit antetul hărții raster 3D <%s@%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Imposibil de deschis harta vectorială <%s@%s>"
@@ -21629,44 +23195,44 @@ msgstr ""
 "Imposibil de modificat regiunea implicită. Mapsetul curent nu este "
 "<PERMANENT>."
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Intrare nevalidă <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Imposibil de actualizat parametrii proiecției lat/long"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "Sunteți deja în Lat/Long. Utilizați parametrul -p."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
@@ -21674,7 +23240,7 @@ msgstr ""
 "Sunteți într-o locație simplă XY, proiectarea în Lat/Lon nu este posibilă. "
 "Utilizați parametrul -p."
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -21682,7 +23248,7 @@ msgstr ""
 "Imposibil de proiectat datele în WGS84 atât timp cât locația nu conține "
 "parametrii de transformare a datumului. Încercați rularea g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr "Calcularea Lat/Long nu este posibilă în sistemul simplu XY"
 
@@ -21891,38 +23457,59 @@ msgid "command line interface with GUI startup screen"
 msgstr ""
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Fișier raster binar pentru a fi importat"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -22218,10 +23805,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr ""
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr ""
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -22387,7 +23970,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr ""
 
@@ -22781,7 +24364,7 @@ msgid "Cannot get projection key values of current location"
 msgstr ""
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -22966,141 +24549,141 @@ msgstr "evrez=%f"
 msgid "Writing new raster map..."
 msgstr "Scrierea unei hărți raster noi..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 msgid "Location containing input raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 msgid "Mapset containing input raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr ""
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 msgid "Name for output raster map (default: same as 'input')"
 msgstr ""
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 msgid "Resolution of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 msgid "List raster maps in input mapset and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 msgid "Print input map's bounds in the current projection and exit"
 msgstr ""
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr ""
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr ""
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Harta raster <%s> din locația <%s> , mapset <%s> nu a fost găsită"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr ""
 "Imposibil de obținut informații despre proiecție pentru harta de intrare"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "Imposibil de obținut unitățile proiecției pentru harta de intrare"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr ""
 "Imposibil de obținut valorile cheie ale proiecției pentru harta de intrare"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Imposibil de lucrat cu date neproiectate (locație xy)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr ""
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Intrare:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Coloane: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Rânduri: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Nord: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Sud: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Vest: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Est: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "EV-rez: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "NS-rez: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Ieșire:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Proiectare..."
 
@@ -23153,12 +24736,6 @@ msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 "Permite crearea și/sau modificarea fișierelor suport a hărților raster."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr ""
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -23184,22 +24761,22 @@ msgstr ""
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Harta raster <%s> nu a fost găsită în mapset-ul curent"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr ""
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr ""
 
@@ -23951,7 +25528,7 @@ msgstr "'%s' trebuie sa fie > 0 pentru '%s'"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "[%s] nu poate fi găsit!"
@@ -24148,8 +25725,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Imposibil de citit fișierul de categorii al hărții raster <%s@%s>"
@@ -24231,12 +25808,12 @@ msgstr ""
 msgid "Can't get cell header"
 msgstr "Nu se poate obține antetul celulei"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS: rânduri schimbate din %d în %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: coloane schimbate din %d în %d"
@@ -24422,17 +25999,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr ""
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -24456,7 +26029,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr ""
 
@@ -24464,15 +26037,15 @@ msgstr ""
 msgid "Invalid vrange"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -24494,7 +26067,7 @@ msgid "Reading input data..."
 msgstr "Încarca data..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -24537,16 +26110,16 @@ msgstr ""
 msgid "Writing to output raster map..."
 msgstr "Scrierea hărții raster..."
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -24696,10 +26269,6 @@ msgstr ""
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-msgid "Data type"
-msgstr ""
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -25221,102 +26790,107 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Gestionează valorile nule pentru o hartă raster dată."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 msgid "Name of raster map for which to edit null values"
 msgstr ""
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr "Verifică"
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr ""
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr ""
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr ""
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr ""
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr ""
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr ""
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Harta raster <%s> modificată."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr ""
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr ""
@@ -25709,86 +27283,171 @@ msgstr "Convertire..."
 msgid "File <%s> created"
 msgstr "Fișierul <%s> a fost creat"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Crează hartă raster dintr-un ansamblu de coordonate folosind statistici "
 "univariate."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+msgid "File containing names of LAS input files"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:175
+msgid "Filter range for intensity values (min,max)"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:183
+msgid "Scale to apply to intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Rezoluție grosieră"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+msgid "Set computation region to match the new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Mapset-ul <%s> nu a fost găsit"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, c-format
+msgid "Unknown filter option <%s>"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Hartă nevalidă <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "'%s' trebuie sa fie > 0 pentru '%s'"
 
-#: ../raster/r.in.lidar/main.c:700
-msgid "Reading data ..."
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:714
-msgid "Could not rewind input file"
+#: ../raster/r.in.lidar/main.c:548
+msgid "Reading data ..."
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "Harta raster <%s> nu a fost găsită în mapset-ul curent"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Imposbil de deschis fișierul <%s> pentru scriere"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 "Generează un strat raster pentru distanța dintre trăsături în stratul de "
 "intrare."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 msgid "Name for distance output raster map"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 msgid "Name for value output raster map"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 msgid "Output distances in meters instead of map units"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+msgid "Calculate distance to nearest NULL cell"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, c-format
 msgid "Unknown metric: '%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 msgid "Writing output raster maps..."
 msgstr ""
@@ -25920,7 +27579,7 @@ msgstr "[%s]: Nici o astfel de culoare"
 msgid "Converting <%s>..."
 msgstr "Convertire <%s>..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "Raster <%s>nepotrivire de tip"
@@ -26027,7 +27686,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Nu sunt locații valide în regiunea curentă"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -26582,7 +28241,7 @@ msgstr "[%s]: Nici o astfel de culoare"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -26994,7 +28653,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr ""
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -27016,11 +28675,6 @@ msgstr "Parolă"
 msgid "Unable to write to temp file"
 msgstr "Imposibil de deschis tempfile"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Generarea punctelor..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -27131,7 +28785,7 @@ msgid "Writing output raster map..."
 msgstr ""
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -27142,41 +28796,41 @@ msgstr ""
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Generează harta raster a subbazinelor hidrografice."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Numele rasterului sursă pentru altitudine "
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Nume de ieșire pentru harta raster orientare "
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 msgid "Coordinates of outlet point"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Coordonate nevalide: [%s]"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Coordonate nevalide: [%s]"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -27264,22 +28918,22 @@ msgid "Invalid map type"
 msgstr "Hartă nevalidă <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -27386,23 +29040,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -27410,8 +29064,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -27903,203 +29557,207 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 msgid "Inputs"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 msgid "Name of input depressions raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 msgid "Name of input raster map percent of disturbed land"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 msgid "Name of input raster map blocking overland surface flow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 msgid "Minimum size of exterior watershed basin"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 msgid "Name for output accumulation raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 msgid "Number of cells that drain through each cell"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Indexul topografic al hărții de ieșire"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+msgid "Stream power index a * tan(b)"
+msgstr ""
+
+#: ../raster/r.watershed/front/main.c:152
 msgid "Name for output drainage direction raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Nume de ieșire pentru harta raster orientare "
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 msgid "Name for output stream segments raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 msgid "Name for output half basins raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 msgid "Name for output slope length raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 msgid "Name for output slope steepness raster map"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 msgid "The basin threshold must be a positive number."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -28107,19 +29765,27 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+msgid "Closing TCI and SPI maps"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 msgid "Closing TCI map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+msgid "Closing SPI map"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -28147,31 +29813,31 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 msgid "resample"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 "Re-eșanționează straturi raster într-un grid mai grosier folosind agregarea."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Metoda de agregare"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Imposibil de citit tabelul de culoare pentru %s"
@@ -28548,7 +30214,7 @@ msgstr ""
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr ""
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr ""
@@ -28916,7 +30582,7 @@ msgid ""
 msgstr "Calculează statistici univariate din celule ne-nule ale hărții raster."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -28931,11 +30597,22 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "Calculează statistici univariate din celule ne-nule ale hărții raster."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Parametrii  -b & -c se exclud reciproc. Alege doar unul dintre ei."
+
 #: ../raster/r.out.ascii/main.c:63
 msgid "Converts a raster map layer into a GRASS ASCII text file."
 msgstr ""
@@ -29206,33 +30883,33 @@ msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 "Hărțile de intrare trebuie să fie de același tip. CELL, FCELL sau DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: Imposibil de găsit caseta de încadrare pentru linii"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Caseta de încadrare:  s = %d, d = %d, s = %d, j = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Pixeli șterși %d  "
 msgstr[1] "Pixeli șterși %d  "
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Subțiere finalizată cu succes."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 "Subțierea nu a fost finalizată, se consideră ca trebuie crescut parametrul "
@@ -29514,32 +31191,12 @@ msgstr ""
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "Produce harta vectorială a curbelor de nivel dintr-o hartă raster."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr ""
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Nivelul apei"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr ""
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr ""
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-
 #: ../raster/r.contour/main.c:140
 #, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -30117,50 +31774,50 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 msgid "Raster map calculator."
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 msgid "Expression"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 msgid "File containing expression(s) to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Funcția Kernel "
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+msgid "List input and output maps"
+msgstr ""
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "Parametrii  -b & -c se exclud reciproc. Alege doar unul dintre ei."
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 msgid "parse error"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Tip necunoscut: %d"
@@ -30210,80 +31867,80 @@ msgstr ""
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Imposibil de citit fișierul de culoare pentru harta raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Imposibil de creat arbore pentru harta raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Modificare hartă nevalidă: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Variabilă nedefinită '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Hartă nevalidă <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Funcție nedefinită '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Imposibil de închis harta raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Imposibil de închis harta raster de ieșire"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Funcție cunoscută:"
@@ -30458,21 +32115,21 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -30508,14 +32165,6 @@ msgstr ""
 msgid "Band to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Metadata"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -30537,7 +32186,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "%s=%s - trebuie să fie un număr pozitiv"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Imposibil de actualizat regiunea curentă"
@@ -30556,7 +32205,7 @@ msgstr ""
 msgid "Reading band %d of %d..."
 msgstr ""
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr ""
@@ -30625,186 +32274,205 @@ msgstr ""
 msgid "Link to raster map <%s> created."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 msgid "Name of raster file to be imported"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 msgid "Band(s) to select (default is all bands)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 msgid "Name of GCPs target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 msgid "Offset to be added to band numbers"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Numele fișierului care conține declarația SQL"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "vector, bază de date, tabel de atribute"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr ""
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Printează tabelele și ieși"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Imposibil de deschis sursa de date <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Încarca data..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Imposibil de deschis tempfile"
+
+#: ../raster/r.in.gdal/main.c:665
 #, c-format
 msgid "Unable to get raster band number %d"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Scrierea hărții raster <%s> ..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Imposibil de deschis fișierul <%s>"
@@ -30919,7 +32587,7 @@ msgstr "Citirea hărții de elevație..."
 msgid "Writing topographic index map..."
 msgstr "Scrierea indexului topografic al hărții..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr ""
@@ -31015,11 +32683,11 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 msgid "patching"
 msgstr ""
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -31028,23 +32696,23 @@ msgstr ""
 "de la unul (sau mai multe) straturi pentru a umple arealele cu \"no data\" "
 "într-o altă hartă."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr ""
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr ""
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr ""
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Citirea hărții raster <%s>..."
@@ -31113,34 +32781,6 @@ msgstr ""
 msgid "Converts a raster map into a vector map."
 msgstr ""
 
-#: ../raster/r.to.vect/main.c:88
-msgid "Name of attribute column to store value"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-msgid "Write raster values as z coordinate"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-msgid "Do not build vector topology"
-msgstr ""
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -31615,10 +33255,6 @@ msgstr ""
 msgid "Advanced"
 msgstr "Avansat"
 
-#: ../raster/r.what/main.c:141
-msgid "Output header row"
-msgstr ""
-
 #: ../raster/r.what/main.c:146
 msgid "Show the category labels of the grid cell(s)"
 msgstr ""
@@ -31888,7 +33524,7 @@ msgstr "Generează suprafețe aleatorii cu dependență spațială."
 msgid "Name for output raster map(s)"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr ""
 
@@ -31912,7 +33548,7 @@ msgstr ""
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, c-format
 msgid "Generating raster map <%s>..."
 msgstr ""
@@ -32236,7 +33872,7 @@ msgstr "Calculează indicele diversității dominante pe o hartă raster"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 msgid "landscape structure analysis"
 msgstr ""
@@ -32260,7 +33896,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr ""
@@ -32279,7 +33915,7 @@ msgstr "Calculează deviația standard a parcelei pe o hartă raster"
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 msgid "patch index"
 msgstr ""
 
@@ -32430,7 +34066,7 @@ msgstr ""
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Calculează indicele diversității Shannon pe o hartă raster"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 
@@ -32518,7 +34154,7 @@ msgstr ""
 #: ../raster/r.horizon/main.c:289 ../raster/r.horizon/main.c:305
 #, fuzzy
 msgid "Point mode"
-msgstr "Puncte"
+msgstr "%s: datele punctuale nu au fost găsite"
 
 #: ../raster/r.horizon/main.c:296 ../raster/r.sun/main.c:492
 msgid "Sampling distance step coefficient (0.5-1.5)"
@@ -32595,11 +34231,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr ""
@@ -32805,21 +34441,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, c-format
+msgid "Using Linke constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Scrierea hărții raster <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Hartă nevalidă <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, c-format
+msgid "Using slope constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Scrierea hărții raster <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, c-format
+msgid "Using aspect constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Scrierea hărții raster <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -32843,76 +34519,84 @@ msgstr ""
 msgid "Print compression information and data type of input map(s)"
 msgstr ""
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "Harta raster <%s> nu a fost găsită în mapset-ul curent"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
+msgstr ""
+
+#: ../raster/r.compress/main.c:221
+msgid "same size"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "<%s> există deja"
 
-#: ../raster/r.compress/main.c:200
-#, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "<%s> există deja"
+#: ../raster/r.compress/main.c:240
+#, c-format
+msgid "Uncompressing <%s>"
+msgstr ""
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
+msgid "Re-compressing <%s>"
 msgstr ""
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Convertire <%s>..."
+
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "<%s> deja există în mapset <%s>"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -32944,50 +34628,50 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 msgid "kernel filter"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Opțiunea <%s> este necesară"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 msgid "At least one filter must be finite"
 msgstr ""
 
@@ -33394,20 +35078,25 @@ msgstr[1] ""
 msgid "Calculating %s"
 msgstr ""
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 msgid "Distance must be >= 0.0"
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Corelație"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Generează aleator valorile celulelor cu dependență spațială."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Număr de puncte pentru a fi creat(e)"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -33541,7 +35230,7 @@ msgstr "Dezactivează"
 msgid "Grid line width"
 msgstr ""
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Culoarea gridului"
 
@@ -33661,14 +35350,10 @@ msgid "Starting and ending coordinates"
 msgstr ""
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Culoarea liniei"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr ""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -33696,8 +35381,8 @@ msgid "Name of monitor to start"
 msgstr ""
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -33753,46 +35438,63 @@ msgstr ""
 msgid "Print commands for currently selected monitor and exit"
 msgstr ""
 
-#: ../display/d.mon/main.c:117
-msgid "Do not automatically select when starting"
+#: ../display/d.mon/main.c:118
+msgid "Print path to support files of currently selected monitor and exit"
 msgstr ""
 
 #: ../display/d.mon/main.c:122
-msgid "Release and stop currently selected monitor and exit"
+msgid "Do not automatically select when starting"
 msgstr ""
 
 #: ../display/d.mon/main.c:127
-msgid "Disable true colors"
+msgid "Release and stop currently selected monitor and exit"
 msgstr ""
 
 #: ../display/d.mon/main.c:132
+msgid "Disable true colors"
+msgstr ""
+
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Nume de fișier ilegal"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr ""
@@ -33802,59 +35504,73 @@ msgstr ""
 msgid "Monitor <%s> is not running"
 msgstr ""
 
-#: ../display/d.mon/stop.c:37
-msgid "Env file not found"
-msgstr ""
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Imposibil de creat fișierul <%s>"
 
-#: ../display/d.mon/stop.c:55
-msgid "PID file not found"
-msgstr ""
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Imposibil de deschis harta vectorială <%s>"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "Imposibil de creat fișierul <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Harta raster <%s> există deja și va fi suprascrisă"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Imposibil de creat fișierul <%s>"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
-msgstr "Ieșire:"
+msgstr "Ieșiri"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, c-format
 msgid "Monitor <%s> already running"
 msgstr ""
 
-#: ../display/d.mon/start.c:132
-#, c-format
-msgid "Unable to create file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:140
+#, fuzzy, c-format
+msgid "Starting monitor <%s>..."
+msgstr "Scrierea hărții vectoriale <%s> ..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Imposibil de deschis tempfile"
 
 #: ../display/d.mon/select.c:14
 #, c-format
 msgid "Monitor <%s> is already selected"
 msgstr ""
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 msgid "List of running monitors:"
 msgstr ""
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-msgid "Command file not found"
-msgstr ""
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Imposibil de deschis fișierul <%s>"
 
-#: ../display/d.mon/list.c:88
-msgid "Unable to read command file"
-msgstr ""
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Citirea hărții raster <%s>..."
 
 #: ../display/d.erase/main.c:33
 msgid ""
@@ -33957,25 +35673,42 @@ msgstr ""
 msgid "[%s]: illegal value specified"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 msgid "map annotations"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+msgid "Font settings"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -33983,7 +35716,7 @@ msgstr[0] "Culoarea gridului"
 msgstr[1] "Culoarea gridului"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -33991,7 +35724,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -34062,10 +35795,6 @@ msgstr ""
 msgid "Colorize features according color definition column"
 msgstr ""
 
-#: ../display/d.vect/main.c:129
-msgid "Color definition in R:G:B form"
-msgstr ""
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -34075,7 +35804,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Lățimea liniei"
 
@@ -34591,35 +36320,35 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr ""
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 msgid "Displays information about the active display monitor."
 msgstr ""
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr ""
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -34865,14 +36594,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr ""
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr ""
@@ -34933,7 +36654,7 @@ msgstr ""
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr ""
 
@@ -34969,12 +36690,21 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+msgid "Create 3D charts"
+msgstr ""
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 msgid ""
 "Displays a legend for a 2D or 3D raster map in the active frame of the "
@@ -35015,13 +36745,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-msgid "Font settings"
-msgstr ""
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr ""
@@ -35101,11 +36825,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -35117,34 +36842,90 @@ msgstr ""
 msgid "North arrow style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Culoarea liniei"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -35159,65 +36940,65 @@ msgstr ""
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 msgid "Color for drawing drawing grid"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 msgid "Color for drawing null values (X symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr ""
 
@@ -35479,55 +37260,41 @@ msgstr ""
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr ""
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr ""
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -35598,201 +37365,215 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr ""
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr ""
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Locație: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Mapset:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Grup:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Subgrup: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, c-format
 msgid "Result signature file: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Regiune\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Nord: %12.2f  Est: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Sud: %12.2f  Vest: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Rez:   %12.2f  Rez:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Rânduri:  %12d  Coloane: %12d  Celule: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Mască: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Parametrii"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "Număr maxim de iterații"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -36080,8 +37861,8 @@ msgid "radiance"
 msgstr "radianță"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 msgid "reflectance"
 msgstr "reflectanță"
 
@@ -36431,350 +38212,394 @@ msgstr ""
 msgid "group <%s> references the following subgroups\n"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 msgid "land surface temperature"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 msgid "vegetation"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Extrage parametrii de control de calitate din stratele QC Modis."
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 msgid "Name for output QC type classification layer"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 msgid "Name of MODIS product type"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 msgid "Name of QC type to extract"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 msgid "mod09: Atmospheric Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -36968,7 +38793,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr ""
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr ""
@@ -37305,104 +39130,110 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+msgid "Error in reading data"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:50
+msgid "Error in creating segments"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:54
+msgid "Error in writing data"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:59
+#, c-format
+msgid "Number of segments created: %d"
+msgstr ""
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Operațiune neimplementată"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Scrierea hărții..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Procesarea liniilor..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, c-format
 msgid "Candidate flag is already %s"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "set"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-msgid "Error in reading data"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:50
-msgid "Error in creating segments"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:54
-msgid "Error in writing data"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:59
-#, c-format
-msgid "Number of segments created: %d"
-msgstr ""
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Scrierea hărții..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -37470,57 +39301,74 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 msgid "Unable to assign segmentation method"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 msgid "Invalid similarity method"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, c-format
 msgid "Option '%s' must be > 0"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, c-format
 msgid "Option '%s' must be <= 1"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, c-format
 msgid "Option '%s' must be >= 0"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 msgid "Seeds raster map not found"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 msgid "Invalid number of iterations, 100 will be used"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 msgid "Invalid number of MB, 300 will be used"
 msgstr ""
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Operațiune neimplementată"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -37582,7 +39430,7 @@ msgstr ""
 msgid "Name for output raster map (blue)"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -37632,7 +39480,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -38425,49 +40273,53 @@ msgstr "Grupul [%s] nu a fost găsit"
 msgid "Option '%s' is required for new exposure info"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 msgid "albedo"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 msgid "Computes broad band albedo from surface reflectance."
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 msgid "At least two raster maps are required"
 msgstr ""
 
@@ -38724,6 +40576,10 @@ msgstr ""
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -39087,64 +40943,74 @@ msgstr ""
 msgid "Name for output raster map (saturation)"
 msgstr ""
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> există deja"
+
 #, fuzzy
-#~ msgid "Prefix for output maps"
-#~ msgstr "Prefix pentru harta raster de ieșire"
+#~ msgid "<%s> already compressed"
+#~ msgstr "<%s> există deja"
 
 #, fuzzy
-#~ msgid "Scale factor for input temperature"
-#~ msgstr "Nume de ieșire pentru harta raster orientare "
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "%s: datele punctuale nu au fost găsite"
 
 #, fuzzy
-#~ msgid "Scale factor for output temperature"
-#~ msgstr "Imposibil de creat harta de ieșire"
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Număr de strat (scrie în)"
 
 #, fuzzy
-#~ msgid "Number of quartals to use"
-#~ msgstr "Număr de iterații"
+#~ msgid "Store only the coordinates"
+#~ msgstr "Una sau mai multe coordonate"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Numele hărții raster care conține netezirea"
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Nu copiază tabelul"
 
 #, fuzzy
 #~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Numele hărții raster care conține netezirea"
+#~ "Error map of all lines and boundaries not being generalized due to "
+#~ "topology issues or over-simplification"
+#~ msgstr ""
+#~ "%d liniile/limitele nu au fost modificate din cauza supra-simplificării"
 
 #, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nume de ieșire pentru harta raster pantă "
+#~ msgid "Prefix for output maps"
+#~ msgstr "Prefix pentru harta raster de ieșire"
 
 #, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Nume pentru harta vectorială de intrare"
+#~ msgid "Scale factor for input temperature"
+#~ msgstr "Nume de ieșire pentru harta raster orientare "
 
 #, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr "Indexul topografic al hărții de ieșire"
+#~ msgid "Scale factor for output temperature"
+#~ msgstr "Imposibil de creat harta de ieșire"
 
 #, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Restabilește interactiv parametrii proiecției locației."
+#~ msgid "Number of quartals to use"
+#~ msgstr "Număr de rânduri"
 
 #~ msgid " %s\n"
 #~ msgstr " %s\n"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "opțiunea <%s>: <%s> există."
+#~ msgid "Subregion"
+#~ msgstr "Subregiune"
 
 #~ msgid "%s: Error writing temporary file"
 #~ msgstr "%s: Eroare în scrierea fișierului temporar"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "opțiunea <%s>: <%s> există."
+
 #~ msgid "Location name (not location path)"
 #~ msgstr "Numele locației (nu calea locației)"
 
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Convertește toate hărțile vectoriale din versiunile vechi de GRASS din "
+#~ "mapset-ul curent în formatul actual."
+
 #~ msgid "Packs up a raster map and support files for copying."
 #~ msgstr "Împachetează harta raster și fișierele suport pentru copiere."
 
@@ -39156,26 +41022,29 @@ msgstr ""
 #~ msgstr "Despachetează o hartă raster, care a fost împachetatp cu r.pack."
 
 #~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
 #~ msgstr ""
-#~ "Convertește toate hărțile vectoriale din versiunile vechi de GRASS din "
-#~ "mapset-ul curent în formatul actual."
+#~ "Corectarea de ieșire cu v.lidar.growing. Acesta este ultimul din cei trei "
+#~ "algoritmi de filtrare pentru LIDAR."
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Nume de ieșire pentru harta raster orientare "
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Prefix pentru harta raster de ieșire"
 
 #~ msgid "Files"
 #~ msgstr "Fișiere"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Prefix pentru harta raster de ieșire"
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Nume de ieșire pentru harta raster pantă "
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Afișare"
+#~ msgid "flowline"
+#~ msgstr "linie"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importă hărți vectoriale realizate în versiuni mai vechi de GRASS."
 
 #~ msgid "Error: %s"
 #~ msgstr "Eroare: %s"
@@ -39183,29 +41052,12 @@ msgstr ""
 #~ msgid "Unknown type: %c"
 #~ msgstr "Tip necunoscut: %c"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importă hărți vectoriale realizate în versiuni mai vechi de GRASS."
-
-#~ msgid "One or more coordinates"
-#~ msgstr "Una sau mai multe coordonate"
-
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Memorie insuficientă pentru adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Memorie insuficientă pentru ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Memorie insuficientă pentru adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Memorie insuficientă pentru adyy"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Memorie insuficientă pentru adxy"
+#, fuzzy
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Nici o hartă raster de intrare specificată"
 
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Convertește un fișier cu liste de situri GRASS în hartă vectorială."
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Utilitate de interpolare a suprafeței pentru harta raster."
 
 #~ msgid "Name of layer to be used for INTENSITY"
 #~ msgstr "Numele stratului care va fi folosit pentru INTENSITATE"
@@ -39213,26 +41065,12 @@ msgstr ""
 #~ msgid "Name of layer to be used for SATURATION"
 #~ msgstr "Numele stratului care va fi folosit pentru SATURAȚIE"
 
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "Importă fișiere de țară US-NGA GEOnet Names Server (GNS) într-o hartă "
-#~ "vectorială punctuală GRASS."
-
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Numele hărții raster pentru elevație"
-
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Numele stratului care va fi folosit pentru VERDE"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Numele stratului care va fi folosit pentru ALBASTRU"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Utilitate de interpolare a suprafeței pentru harta raster."
-
 #~ msgid "Surface generation program."
 #~ msgstr "Program pentru generarea suprafeței."
 
@@ -39245,20 +41083,32 @@ msgstr ""
 #~ msgid "%s=%s - illegal number of interpolation points"
 #~ msgstr "%s=%s - număr ilegal de puncte de interpolare"
 
-#~ msgid "%s: no data points found"
-#~ msgstr "%s: datele punctuale nu au fost găsite"
-
 #, fuzzy
 #~ msgid "Interpolating raster map <%s>... %d row... "
 #~ msgid_plural "Interpolating raster map <%s>... %d rows... "
 #~ msgstr[0] "Interpolarea hărții raster <%s>... %d rânduri... "
 #~ msgstr[1] "Interpolarea hărții raster <%s>... %d rânduri... "
 
+#~ msgid "Output z-file (elevation) map"
+#~ msgstr "Stratul Z (altitudine) rezultat"
+
 #~ msgid "lat/lon projection not supported at this time."
 #~ msgstr "proiecția lat/lon nu este acceptată in acest moment."
 
-#~ msgid "Output z-file (elevation) map"
-#~ msgstr "Stratul Z (altitudine) rezultat"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr ""
+#~ "Importă fișiere de țară US-NGA GEOnet Names Server (GNS) într-o hartă "
+#~ "vectorială punctuală GRASS."
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Numele hărții raster pentru elevație"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Afișare"
 
 #, fuzzy
 #~ msgid "imagery, fusion, HPF, HPFA"
@@ -39271,3 +41121,21 @@ msgstr ""
 #, fuzzy
 #~ msgid "No maps output"
 #~ msgstr "Nici o hartă de ieșire"
+
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Memorie insuficientă pentru adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Memorie insuficientă pentru ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Memorie insuficientă pentru adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Memorie insuficientă pentru adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Memorie insuficientă pentru adxy"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Convertește un fișier cu liste de situri GRASS în hartă vectorială."
diff --git a/locale/po/grassmods_ru.po b/locale/po/grassmods_ru.po
index 0790730..d324715 100644
--- a/locale/po/grassmods_ru.po
+++ b/locale/po/grassmods_ru.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2009-05-15 00:23-0600\n"
 "Last-Translator: Maxim Dubinin <sim at gis-lab.info>\n"
 "Language-Team: Russian <grass-translations at lists.osgeo.org>\n"
@@ -249,6 +249,7 @@ msgstr "Набор <%s> не найден"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -483,6 +484,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Ошибка закрытия файла ASCII"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -622,29 +628,29 @@ msgstr "Невозможно открыть источник данных OGR '%
 msgid "Unable to open database:"
 msgstr "Невозможно открыть базу данных:"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Не определено соединение с базой данных"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> уже существует"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Невозможно создать таблицу: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "Набор <%s> не найден"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -655,6 +661,11 @@ msgstr "Невозможно создать индекс"
 msgid "Unable grant on table:"
 msgstr "Невозможно скопировать таблицу"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Невозможно установить размер"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -785,7 +796,7 @@ msgstr "Невозможно открыть базу данных <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -864,17 +875,17 @@ msgstr "имя"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Параметры"
 
@@ -886,7 +897,7 @@ msgstr "Проход %d..."
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "Имя шрифта"
+msgstr "Имя теста"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -909,39 +920,39 @@ msgstr "Отобразить текущие параметры подключе
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -986,7 +997,7 @@ msgstr "Список всех драйверов базы данных."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1016,7 +1027,7 @@ msgstr "вектор, атрибутивная таблица"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1110,10 +1121,10 @@ msgid "Unable to open database <%s>"
 msgstr "Невозможно открыть базу данных <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1302,11 +1313,11 @@ msgstr "прервано"
 msgid "succeeded"
 msgstr "...сделано."
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Невозможно открыть файл <%s> для записи "
@@ -1341,10 +1352,10 @@ msgstr "Для опции 'query' используется имя столбца
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Формат"
 
@@ -1353,7 +1364,7 @@ msgstr "Формат"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Отображать вертикальный разделитель записей"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1361,7 +1372,7 @@ msgstr "Отображать вертикальный разделитель з
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "Имя выходного файла (если не указано или '-' вывод в stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Не выводить названия столбцов"
 
@@ -1369,7 +1380,7 @@ msgstr "Не выводить названия столбцов"
 msgid "Describe query only (don't run it)"
 msgstr "Описание запроса (без исполнения)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Вертикальный вывод (вместо горизонтального)"
 
@@ -1419,6 +1430,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Название файла, содержащего SQL-операторы"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Пропустить ошибки SQL и продолжить"
 
@@ -1599,7 +1611,6 @@ msgstr "Повернуть диаграмму на 90 градусов"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1720,7 +1731,7 @@ msgstr "Невозможно загрузить данные из таблицы
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1728,15 +1739,15 @@ msgstr "Невозможно загрузить данные из таблицы
 msgid "Error in pj_do_proj"
 msgstr "Ошибка в pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "Невозможно получить значение параметров проекции для текущей области"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1831,7 +1842,7 @@ msgstr "Невозможно создать временный файл маск
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1877,7 +1888,7 @@ msgstr "Невозможно получить информацию о слое 
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1890,26 +1901,27 @@ msgstr "Невозможно получить информацию о слое 
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Невозможно открыть БД <%s> с помощью драйвера <%s>"
@@ -1919,7 +1931,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Тип поля не поддерживается (должен быть строковым)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2064,13 +2077,13 @@ msgstr "Невозможно открыть временный файл маск
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2078,8 +2091,8 @@ msgstr "Невозможно открыть временный файл маск
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2123,10 +2136,11 @@ msgstr "Эквализация гистограммы"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2140,13 +2154,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2155,6 +2172,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2170,7 +2188,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2190,11 +2208,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2206,27 +2224,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2244,74 +2262,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "растр"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2321,6 +2342,7 @@ msgstr "растр"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2336,6 +2358,7 @@ msgstr "растр"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2354,6 +2377,7 @@ msgid "vector"
 msgstr "вектор"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2362,15 +2386,16 @@ msgstr "вектор"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2409,7 +2434,7 @@ msgstr "Высота точки обзора не задана, использу
 msgid "Unsupported output format"
 msgstr "Неподдерживаемый выходной формат"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Файл <%s> создан."
@@ -2989,69 +3014,70 @@ msgid "Vector map <%s> not found"
 msgstr "Векторный слой <%s> не найден"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Невозможно открыть векторный слой <%s>"
@@ -3115,12 +3141,13 @@ msgstr "Нет активных контрольных точек"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3252,7 +3279,7 @@ msgstr "Слой для коэффициента x"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3417,7 +3444,7 @@ msgid "Area:"
 msgstr "Полигон\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Чтение атрибутов..."
@@ -3432,7 +3459,7 @@ msgstr "Отсутствует атрибут топографии для пов
 msgid "No attribute table for layer %d"
 msgstr "Необходима атрибутивная таблица"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3445,15 +3472,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Невозможно открыть БД <%s> с помощью драйвера <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Невозможно дать привилегии на таблицу <%s>"
@@ -3476,6 +3504,7 @@ msgid ""
 msgstr "Расчет центральных положений..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3484,6 +3513,7 @@ msgid "extract"
 msgstr "вектор, экспорт"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3494,10 +3524,10 @@ msgstr "Выбор"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Из"
@@ -3523,12 +3553,11 @@ msgstr "Не копировать таблицу (см. также параме
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Атрибуты"
 
@@ -3547,39 +3576,45 @@ msgstr "Обратить выделение"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3595,7 +3630,10 @@ msgstr "Обратить выделение"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3668,7 +3706,7 @@ msgstr "Игнорирован текст: %s"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3721,45 +3759,46 @@ msgstr ""
 "Число случайных категорий больше или равно числу уникальных \"%s\" категорий "
 "объектов %d"
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3801,11 +3840,11 @@ msgstr "Тип поля (%s) не поддерживается "
 msgid "Format <%s> does not support writing"
 msgstr "Драйвер<%s> не поддерживает создание растров"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3960,9 +3999,9 @@ msgstr "Имя исходного файла; или \"-\" для чтения 
 msgid "Name for output file where to save current settings"
 msgstr "Имя выходного файла, содержащего окончательный отчет"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Перечислить поддерживаемые форматы и выйти"
 
@@ -3985,7 +4024,7 @@ msgstr "Вывести путь поиска текущего набора"
 msgid "Print current status in shell script style"
 msgstr "Вывести статистику в стиле shell"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "-r и -e взаимоисключающиеся"
@@ -3993,7 +4032,9 @@ msgstr "-r и -e взаимоисключающиеся"
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Должны быть выбраны либо 'rules' либо 'col'"
+msgstr ""
+"Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
+"указано!"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4001,18 +4042,18 @@ msgid "%s= must be specified"
 msgstr "должны быть определены 2 слоя "
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Поддерживаемые форматы:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4023,68 +4064,69 @@ msgstr "Поддерживаемые форматы:\n"
 msgid "network"
 msgstr "вектор, создание сети."
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Найти кратчайший путь по векторной сети"
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Тип кривой"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Слой кривых"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Тип кривой"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "Слой узлов"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 "Имя файла, содержащего начальную и конечную точки. Если не задано, то "
 "читается из стандартного входа (stdin)"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4096,10 +4138,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4112,29 +4155,29 @@ msgstr ""
 msgid "Cost"
 msgstr "Контраст"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Столбец стоимостных дуг в обратном направлении (число)"
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Поле стоимости узлов (числовое)"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "Максимальное расстояние для сети"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4144,21 +4187,57 @@ msgstr ""
 "путь не может быть найден и выводится сообщение об ошибке. Для ускорения "
 "процесса указывайте как можно меньшие значения."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Нет таблицы"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Слой/таблица"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "Используйте геодезический калькулятор для точек с широтой-долготой"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 "Записать выходные данные как оригинальные входные сегменты, а не каждый путь "
 "в отдельной строке"
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4167,10 +4246,10 @@ msgstr "Текущая проекция не широта-долгота"
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4186,8 +4265,8 @@ msgstr "[%d] точек без категорий (nfield: [%d])"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4216,22 +4295,22 @@ msgstr "Невозможно выделить привилегии таблиц
 msgid "Wrong input format: %s"
 msgstr "Неверный исходный формат: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "Нет точек категории [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr "Точка категории [%d] недостижима из точки категории [%d]"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "Точка %f,%f недостижима из точки %f,%f"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4240,17 +4319,17 @@ msgstr "Точка %f,%f недостижима из точки %f,%f"
 msgid "Cannot insert new record: %s"
 msgstr "Невозможно вставить новую запись: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] ошибок исходного формата"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "пропущено [%d] точек заданной категории"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "%d пункт(ы) назначения недостижим (включая точки за границами порога)"
@@ -4261,7 +4340,7 @@ msgstr "%d пункт(ы) назначения недостижим (включ
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4271,7 +4350,7 @@ msgstr "%d пункт(ы) назначения недостижим (включ
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "вектор, геометрия"
@@ -4326,17 +4405,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Невозможно получить список категорий <%s>"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Не указан обязательный параметр <%s>"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "Векторный слой <%s> уже существует"
@@ -4639,6 +4718,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Название файла, содержащего исходные эталоны"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4659,12 +4739,15 @@ msgstr "Название файла, содержащего исходные э
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4826,11 +4909,11 @@ msgstr "Для 'where' количество слоев должно быть > 0
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Для слоя %d не определено соединение с базой данных"
@@ -4967,9 +5050,9 @@ msgid "Remove existing color table"
 msgstr "Удалить существующую цветовую таблицу"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5033,7 +5116,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5051,8 +5134,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "-r и -e взаимоисключающиеся"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5078,6 +5160,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Векторный слой <%s> не 3D"
@@ -5103,7 +5186,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Не найдена цветовая таблица растрового слоя <%s>"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5112,13 +5195,14 @@ msgstr "Невозможно прочитать таблицу цветов дл
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5149,8 +5233,9 @@ msgstr "Чтение объектов..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5195,7 +5280,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Запись цветового файла..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Невозможно использовать столбец <%s>"
@@ -5251,6 +5336,7 @@ msgid "Point out of range"
 msgstr "Число границ вне диапазона"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5259,15 +5345,17 @@ msgstr "Число границ вне диапазона"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5363,14 +5451,15 @@ msgstr "Выходной векторный точечный файл откло
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr " "
@@ -5508,7 +5597,7 @@ msgstr "Не хватает памяти для az"
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "Невозможно создать файл <%s>"
+msgstr "Невозможно создать таблицу: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5571,15 +5660,15 @@ msgstr "Метод интерполяции"
 msgid "Input failed"
 msgstr "Ввод прерван"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "прервано"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "%d байт на диске для временных файлов."
@@ -5628,9 +5717,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Нет точек категории [%d]"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5659,7 +5748,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Выбор"
+msgstr "Обработка полигонов..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5738,9 +5827,9 @@ msgstr "Ошибка закрытия файла ASCII"
 msgid "3D raster map <%s> created"
 msgstr "Растровый слой <%s> создан."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5751,17 +5840,17 @@ msgstr "Невозможно вставить новый ряд: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Удаляемые растры"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Создать дерево Стайнера для сети и заданных терминальных узлов"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5771,71 +5860,107 @@ msgstr ""
 "поэтому в этом модуле используется эвристический алгоритм, так что результат "
 "может быть субоптимальным"
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "Cлой узлов (используется для терминалов)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Поле стоимости пути (в обоих направлениях)"
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr "Категории точек терминальных узлов (слой задается nlayer)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Число точек стайнера (-1 для всех возможных)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Максимальное расстояние для сети"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Количество городов : [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Недостаточно терминалов (<2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "Запрашиваемое количество точек стайнера > чем возможное"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Количество исходных точек: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr "Терминальный узел [%d] невозможно соединить с терминальным узлом [%d]"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr "[%d] (недостижимо) узлы удалены из списка кандидатов в точки стайнера"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "MST стоимости = %f"
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "Поиск [%d]. Точка стайнера"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 "Точка стайнера в узле [%d] была добавлена в терминалах (MST стоимость = %f)"
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "Точка стайнера не найдена -> выход из цикла"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Число точек стайнера (-1 для всех возможных)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "MST стоимости = %f"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5855,18 +5980,20 @@ msgstr "Точка стайнера не найдена -> выход из ци
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Импорт"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "точка"
@@ -5899,9 +6026,9 @@ msgstr "Имя столбца, содержащего координату y"
 msgid "Name of column containing z coordinate"
 msgstr "Имя столбца, содержащего координату z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Создать выходной 3D слой"
@@ -5953,7 +6080,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Невозможно открыть курсор выбора: '%s'"
@@ -5971,7 +6098,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "столбец x/y/z должен быть целочисленным или double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Копирование атрибутов..."
@@ -5997,7 +6124,87 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d точек записано в векторный слой."
 msgstr[1] "%d точек записано в векторный слой."
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Проекция набора данных не соответствует текущей области.\n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "Импорт набора данных PROJ_INFO:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Рассмотреть создание новой области с параметром 'location' из исходного "
+"набора данных.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"Невозможно конвертировать информацию о проекции исходного слоя в формат "
+"GRASS для проверки"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Игнорирование проверки проекции"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "Проекция исходного набора данных и текущей области совпадают"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "4 параметра, требуемые для параметра 'spatial'"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "неверное значение смещения на восток"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Неизвестная опция правила: '%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6020,7 +6227,7 @@ msgstr[1] "%d точек записано в векторный слой."
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6029,7 +6236,7 @@ msgstr[1] "%d точек записано в векторный слой."
 msgid "statistics"
 msgstr "Статистика"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6675,8 +6882,8 @@ msgstr "Тип поля (%s) не поддерживается "
 msgid "Operator '%s' is not supported for type line"
 msgstr "Оператор '%s' не поддерживается для этого типа линий"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Невозможно прочитать векторный слой"
@@ -6735,12 +6942,12 @@ msgid "Breaking lines..."
 msgstr "Разбиение линий..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Удаление дубликатов..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "Очистка границ в узлах..."
 
@@ -6749,11 +6956,11 @@ msgstr "Очистка границ в узлах..."
 msgid "Merging lines..."
 msgstr "Буферизация линий..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Назначение островов..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Невозможно рассчитать центроид полигона"
 
@@ -6768,12 +6975,13 @@ msgstr "Запрос к векторному слою <%s>..."
 msgid "Attribute not found"
 msgstr "Атрибут не найден"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Запись центроидов..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Невозможно вставить новую запись: '%s'"
@@ -6853,108 +7061,110 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "вектор  "
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Метод получения значений"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Создание слоев со случайными 2D/3D точечками."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Число создаваемых точек"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Чтение исходного векторного слоя"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Минимальная высота z (требуется указать флаг -z или имя столбца)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Максимальная высота z (требуется указать флаг -z или имя столбца)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Имя столбца, содержащего координату x"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Запись данных Z в столбец вместо 3D вектора"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Тип цветовой таблицы"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Создать выходной 3D слой"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Выделение объектов..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Число точек должно быть > 0 (задано %d)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d из %d контуров выбрано из векторного слоя <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Имя существующего векторного слоя"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Невозможно создать таблицу: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "Таблица должна содержать только два столбца"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -6962,18 +7172,18 @@ msgstr ""
 "Вы создали столбец типа, который не поддерживается. Этот модуль поддерживает "
 "только типы INTEGER и DOUBLE PRECISION"
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "Начальный векторный слой <%s> не содержит точек в текущем регионе"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "Начальный векторный слой <%s> не содержит точек в текущем регионе"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Создание точек..."
 
@@ -7020,7 +7230,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Имя растрового слоя используемого для запроса"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Столбец, который будет обновлен по результату запроса"
@@ -7034,82 +7244,80 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "Печатать усредненные значения вместо интервалов"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Столбец <%s> не найден"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Столбец <%s> не найден в таблице <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Тип данных столбца не поддерживается"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Тип растра - целочисленный и тип поля - с плавающей запятой"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Тип растра - с плавающей запятой и тип поля - целочисленный, некоторые "
 "данные потеряны!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Чтение объектов..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "найдено %d линий или границ в векторном слое <%s@%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "Пропущено %d точек, находящихся за пределами данного региона"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "Пропущено %d точек, не имеющих категорий"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Больше точек (%d) категории %d, значение установлено в  'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d категорий загружено из вектора"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d повторяющихся категорий в векторе"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d категорий загружено из таблицы"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "в таблице отсутствуют %d категорий из вектора"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "найдено %d ошибок"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "обновлено %d записей"
@@ -7117,14 +7325,14 @@ msgstr "обновлено %d записей"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Обновление статистики растрового слоя"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7214,7 +7422,7 @@ msgstr ""
 "Векторный слой <%s> не входит в пользовательский набор и не может быть "
 "обновлен"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7272,6 +7480,152 @@ msgstr "Нет точек категории [%d]"
 msgid "%d records updated"
 msgstr "обновлено %d записей"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Для слоя %d не определено соединение с базой данных"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Тип данных столбца не поддерживается"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Нет записей для категории [%d]"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Нет записей для категории [%d]"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Столбец <%s> не найден"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Создать векторные точки как 3D-точки"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Конвертировать векторные слои OGR в векторные слои GRASS."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Номер слоя (из)"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld категории"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Номер слоя (в)"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Номер слоя (в)"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Слой к которому добавить столбец"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Тип поля должен быть числовым"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Столбцы"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Имя столбца определителя цвета (для использования с флагом -a)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Не указан столбец определения цвета"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Невозможно прочесть цвет"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Масштаб применяемый для данных z"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Масштаб применяемый для данных z"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Ограничить импорт текущим регионом"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Нет таблицы"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7308,6 +7662,12 @@ msgstr "Ошибка в столбце определителя цвета (%s)
 msgid "Label column was not specified, no labels will be written"
 msgstr "Столбец подписей не задан, подписи не созданы"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Столбец <%s> не найден"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7337,46 +7697,53 @@ msgstr "Невозможно использовать столбец <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d из %d контуров выбрано из векторного слоя <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Проход %d из %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 "Проблема с обработкой полигонов из векторного слоя <%s>, продолжение..."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "Проблема обработки линий векторного слоя <%s>, продолжаю..."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Запись растрового слоя..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Создание файлов поддержки для растрового слоя..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "Цвет может быть обновлен из базы данных только если use=attr"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Конвертировано полигонов: %d из %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Конвертировано точек/линий: %d из %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7440,16 +7807,18 @@ msgstr "Растровый файл поверхности"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "Максимальное количество памяти для использования с флагом -m (в MB)"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Статистика используемая для растровых значений"
@@ -7494,7 +7863,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Неизвестная опция '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Чтение полигонов..."
 
@@ -7512,12 +7881,17 @@ msgstr "Невозможно использовать указанное пол
 msgid "Get area %d failed"
 msgstr "Не удалось получить полигон %d"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Ошибка импорта файла DXF!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "Полигон без центроида (возможно для острова)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Центроид полигона без категории"
 
@@ -7548,11 +7922,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Имя столбца"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Столбцы"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7736,22 +8105,22 @@ msgstr "Выходной иип объекта после конвертиров
 msgid "Incompatible types"
 msgstr "Несовместимость типов"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr "Невозможно скопировать атрибутивную таблицу в выходной слой"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr "Связывание существующих узлов (Задача коммивояжера)."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7759,77 +8128,83 @@ msgstr ""
 "Заметьте, что TSP является NP-hard, в этом модуле используется эвристический "
 "алгоритм, и созданный цикл может быть субоптимальным"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr "Категории точек ('cities') в узлах (слой задается nlayer)"
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "Слой узлов (используется для городов)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Столбец стоимостных дуг в обратном направлении (число)"
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Имя выходного файла (если не указано или '-' вывод в stdout)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr "Категории точек ('cities') в узлах (слой задается nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Максимальное расстояние для сети"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Количество городов : [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Недостаточное количество городов (<2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Создание центроидов..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "Нет точек категории [%d]"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Отсутствует запись для точки (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Финальный узел [%d] недостижим из узла [%d]"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Невозможно открыть файл <%s> для записи "
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "линия"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Разделить сеть изолиниями стоимости."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7840,7 +8215,7 @@ msgstr ""
 "Центральный узел должен быть открыт (значение>=0). Цена в центральном узле "
 "используется при расчете."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7849,49 +8224,49 @@ msgstr ""
 "Категории центров (точек в узле), для которых будет выделена сеть, слой для "
 "этой категории задается опцией nlayer"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Стоимость для изолиний"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr "Iso стоимость %d: %f"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Количество центров: %d (nlayer: %d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr "Недостаточно центров для выбранного слоя. Ничего не будет назначено."
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Вычисление стоимостей от центра %d..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr "Невозможно получить сегмент линии, сегмент вне линии"
 
@@ -8101,14 +8476,15 @@ msgstr ""
 "Путь к выходному файлу ASCII или название вектора ASCII, если используется '-"
 "o' "
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Если не задано, то чтение производится со стандартного входа"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8132,9 +8508,13 @@ msgstr "Если не задано, то чтение производится 
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8196,7 +8576,7 @@ msgstr "Разделитель полей (точечный режим)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Количество значимых разрядов (только для чисел с плавающей точкой)"
 
@@ -8263,7 +8643,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Невозможно получить информацию о векторном слое <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8363,9 +8743,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Невозможно открыть исходный файл <%s>. Ошибка %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Невозможно создать индекс для таблицы <%s>, ключ <%s>"
@@ -8959,7 +9340,7 @@ msgstr ""
 "Замечение: Минимум первого класса включает\n"
 "\n"
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Слой %d"
@@ -8980,7 +9361,7 @@ msgstr "Невозможно рассчитать обратную матриц
 msgid "Resolving conflicts..."
 msgstr "Разрешение конфликтов..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Генерализация (%s)..."
@@ -9010,202 +9391,206 @@ msgid "Performs vector based generalization."
 msgstr "Векторная генерализация."
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Векторная генерализация."
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Алгоритм генерализации"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Векторная генерализация."
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "Алгоритм генерализации"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "Значение максимального расстояния"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "Параметр прогнозирования"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr "Процент точек в результате работы алгоритма 'douglas_reduction'"
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr "Смещение расчетной точки к исходной точке"
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 "Минимальный угол между двумя последовательными сегментами в методе Hermite"
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "Величина порога в генерализации сети"
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr "Порог близости в генерализации сети"
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "Порог промежуточности в генерализации сети"
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr "Параметр snakes-альфа"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr "Параметр snakes-бета"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Количество итераций"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Не копировать таблицу"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Неизвестный метод"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Столбец <%s> не найден в таблице <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Невозможно создать векторный слой <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Смещение данных..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "Векторная генерализация."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Генерализация (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Используется разрешение [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "Шрифт '%s' не является шрифтом FreeType\n"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "Шрифт '%s' не является шрифтом FreeType\n"
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, fuzzy, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr "%d границ не обрезано, так как это повредит топологию"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, fuzzy, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "Количество узлов было уменьшено с %d до %d [%d%%]"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 #, fuzzy
 msgid "changed"
 msgstr "Измененные строки"
@@ -9280,8 +9665,8 @@ msgstr "Размер иконки точечных объектов (в един
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Цвет текста"
 
@@ -9294,13 +9679,13 @@ msgstr "Цвет текста"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Цвета"
@@ -9496,14 +9881,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Инструмент очистки"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Удалить висящие узлы"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Удалить соединения"
@@ -9556,14 +9941,6 @@ msgstr "Чтение полигонов..."
 msgid "Constructing 3D hull..."
 msgstr "Преобразование..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9650,7 +10027,9 @@ msgstr "Билинейная интерполяция"
 msgid "Bicubic interpolation"
 msgstr "Бикубическая интерполяция"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 #, fuzzy
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Вес регуляризации Тихонова"
@@ -10073,6 +10452,193 @@ msgstr "Ошибка чтения файла ASCII: '%s'"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: Запись VTK-Header"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Не найдено ни одной точки с данными"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "растр"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d кластеров."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Разделение кластеров"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Номер слоя (векторный слой A)"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Максимальное расстояние для сети"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Минимальное количество пикселей в классе"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Разделение кластеров"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "Невозможно установить заданный уровень открытия вектора"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Число классов должно быть < 256"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Размер области соседства должен быть положительным"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Подсчет сайтов в квадратах..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Точки не найдены, пропуск type=point"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Создание центроидов..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s=%s - должно быть положительное число"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Используемое максимальное расстояние между точками: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Не найдено растровых слоев"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Максимальное расстояние до ближайшей линии"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "Среднее = %.5lf"
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Стандартное отклонение"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Используемое максимальное расстояние между точками: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Поиск стоимостного пути"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "npoints = %d, nterrain = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Линии не найдены, type=line пропущено"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Создание точек..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Запись выходного растрового слоя %s... "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Чтение ввода..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Не найдено ни одной точки с данными"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "вектор, плотность ядра"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "найдено %d классов"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "найдено %d классов"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10211,26 +10777,26 @@ msgstr "Невозможно обновление базы данных"
 msgid "Impossible to write to aux table"
 msgstr "Запись в базу данных невозможна "
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Выполнить обслуживание сети."
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Выполнить обслуживание сети."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "Невозможно открыть векторный слой <%s> на уровне топологии %d"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "в выходной файл записано %d точек"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%d объектов записано в '%s'."
@@ -10270,7 +10836,7 @@ msgstr "Имя исходного векторного слоя (A)"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr "Требуется для операции 'connect'. Соединяет точки в заданных пределах."
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10284,14 +10850,14 @@ msgstr "Имя исходного точечного векторного сло
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr "Необходимо для операции 'connect'"
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Выполняемая операция"
@@ -10320,47 +10886,131 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Найти кратчайший путь по векторной сети"
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr "Требуется для операции 'connect'. Соединяет точки в заданных пределах."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Имена исходных файлов"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Необходимо для операции 'connect'"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Присваивает уникальные категории новым точкам"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "Для операции 'nodes'"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Конец точечного векторного слоя"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Линейный слой"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Неизвестная операция"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "Значение порога должно быть >= 0"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Не могу прочесть данные из <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Невозможно вставить в таблицу: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Невозможно открыть векторный слой <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Невозможно создать векторный слой <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Таблица <%s> не существует в базе данных <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Растровый слой <%s> уже существует и будет перезаписан"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Растровый слой <%s> уже существует и будет перезаписан"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Невозможно открыть БД <%s> с помощью драйвера <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Невозможно создать таблицу: <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Невозможно скопировать атрибутивную таблицу в векторный слой <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Невозможно создать таблицу: <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10502,7 +11152,7 @@ msgid "Categories already exist in layer %d"
 msgstr "прочитано из слоя %d категорий (слой %d)"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "Невозможно рассчитать центроиды полигонов"
 
@@ -10614,7 +11264,7 @@ msgstr "Для слоя %d не определено соединение с б
 msgid "Key column type is not integer"
 msgstr "Тип ключевого поля не является целочисленным"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Невозможно выбрать записи из таблицы <%s>"
@@ -11421,7 +12071,7 @@ msgstr ""
 "Использовать формат файл .prj в стиле ESRI (применимо только к выводу в "
 "формате Shape)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11682,8 +12332,8 @@ msgstr "Область содержащая исходный векторный
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Поверхность"
@@ -11692,7 +12342,7 @@ msgstr "Поверхность"
 msgid "Mapset containing input vector map"
 msgstr "Набор, содержащий исходный векторный слой"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Вывести имя текущего фрейма"
@@ -11702,7 +12352,7 @@ msgstr "Вывести имя текущего фрейма"
 msgid "Name of input vector map to re-project"
 msgstr "Имя перепроецируемого растрового слоя"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Путь к базе данных GRASS исходной области"
 
@@ -11717,8 +12367,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "полигон"
@@ -11752,17 +12402,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "Исходная и выходная области могут не совпадать"
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Проверка области <%s> набор <%s>"
@@ -12130,13 +12782,13 @@ msgstr ""
 "Таблица: %s\n"
 "Ключевой столбец: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Создать новый векторный слой путем комбинирования других векторных слоев."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
@@ -12144,216 +12796,381 @@ msgstr ""
 "Имя результирующего векторного слоя, в котором находятся ограниченные наборы "
 "исходных векторных слов, записаны в"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Не создавать топологию"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
-"Добавить файлы к существующему (должна быть активирована опция переписывания "
-"существующих файлов)"
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Также копировать атрибутивную таблицу"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "Поддерживается только таблица слоя 1 "
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+"Добавить файлы к существующему (должна быть активирована опция переписывания "
+"существующих файлов)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Отсутствующая таблица"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Ключевые поля отличаются"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Количество полей не совпадает"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Имена полей отличаются"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Типы полей отличаются"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "Различная длина строковых полей"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Ключевое поле не найдено"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "Выходной слой не 3D"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Невозможно создать таблицу: <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Залатывание векторного слоя <%s@%s>..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 "Ошибка чтения векторного слоя <%s> - некоторые данные могут быть "
 "некорректными"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Построение топологии для векторного слоя  <%s>..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "Пересечения на границах должны прилепляться"
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "Общие строки между файлами должны быть отредактированы"
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "Информацию в заголовке также, вероятно, нужно отредактировать"
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "Залатано %d векторных слоев"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Невозможно открыть указатель выбора: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Невозможно получить строку"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Неизвестный тип поля"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Невозможно вставить новую запись: %s"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "Игнорирование проверки проекции"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Конвертировать векторные слои OGR в векторные слои GRASS."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Ввод прерван"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Номер слоя (в)"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Слой к которому добавить столбец"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Импортировать только субрегион"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Субрегион"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Формат: xmin,ymin,xmax,ymax - обычно З,Ю,В,С"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Название для создаваемой области"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Диапазон фильтра для данных z (минимум,максимум)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Импортированы целочисленные значения"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Импортированы целочисленные значения"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Вывести историю растра вместо информации"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Название исходного векторного слоя разреженных точек"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Номер слоя (векторный слой A)"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Импортированы целочисленные значения"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Корреляция"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Импортированы целочисленные значения"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
 msgstr ""
-"Использовать другую проекцию для набора данных (использовать проекцию "
-"области)"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Импорт точек... "
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> неверное количество точек"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Название для создаваемой области"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Вывести историю растра вместо информации"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Ограничить импорт текущим регионом"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Имя исходного точечного векторного слоя"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Расширить охват области на основе нового набора данных"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Имя выходного растрового слоя (по умолчанию: имя исходного)"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Игнорировать проекцию (использовать проекцию области)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Невозможно получить единицы проекции для текущей области"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Группа <%s> не существует"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Невозможно описать таблицу <%s>"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Неизвестная опция правила: '%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Номер слоя (из)"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 "Выбрать или параметр для текущего региона или пространственную опцию, но не "
 "оба одновременно"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "4 параметра, требуемые для параметра 'spatial'"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12361,121 +13178,172 @@ msgstr ""
 "Невозможно конвертировать проекцию исходного слоя в формат GRASS; невозможно "
 "создать новую область."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Невозможно создать область: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Область <%s> создана"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Векторный слой <%s> уже существует и будет перезаписан"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"Невозможно конвертировать информацию о проекции исходного слоя в формат "
-"GRASS для проверки"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "Игнорирование проверки проекции"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Импорт точек... "
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Импорт точек... "
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Проекция набора данных не соответствует текущей области.\n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "Загружено %d точек"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "Импорт набора данных PROJ_INFO:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "Загружено %d точек"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Рассмотреть создание новой области с параметром 'location' из исходного "
-"набора данных.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "Проекция исходного набора данных и текущей области совпадают"
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Векторный слой <%s> уже существует и будет перезаписан"
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Невозможно открыть БД <%s> с помощью драйвера <%s>"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Импорт точек... "
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported (limit was %d)"
 msgstr "Загружено %d точек"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "Загружено %d точек"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were not valid"
 msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d точек вне порога"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d точек вне порога"
 
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d точек вне порога"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Последняя %d точка (точки) будут игнорированы"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Невозможно открыть векторный слой <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Невозможно открыть БД <%s> с помощью драйвера <%s>"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12483,22 +13351,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "Создать новый вектор как ссылку (только для чтения) на слой OGR."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Слой < %s > недоступен"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr " "
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Невозможно создать файл <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Растровый слой <%s> создан."
@@ -12508,12 +13376,12 @@ msgstr "Растровый слой <%s> создан."
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Имя выходного файла"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Связываемый растровый файл"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12525,26 +13393,30 @@ msgstr ""
 "\t\tshape-файл ESRI: имя shape-файла\n"
 "\t\tФайл MapInfo: имя файла MapInfo"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Имя выходного растрового слоя (по умолчанию: имя исходного)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Вывести список доступных слоев в источнике данных и выйти"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Вывести список доступных слоев в источнике данных и выйти"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 #, fuzzy
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "Формат: тип слоя итоговое значение минимум максимум"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12594,7 +13466,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Неверный порядок"
+msgstr "Столбец стоимости узлов"
 
 #: ../vector/v.delaunay/main.c:88
 msgid ""
@@ -12735,144 +13607,144 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr "Выпрямить внешние углы"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Не показывать номера категорий"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Вывести атрибуты векторного слоя."
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "Опция масштаба требует magnitude_map"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' должен быть > 0"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Порог был сброшен в %g"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Неверный запрос на удаление"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Порог в единицах слоя = %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Невозможно выбрать данные из таблицы <%s>"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Буферизация полигонов..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Неправильный размер атрибута (%.3f) для категории %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Порог в единицах слоя: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Буферизация полигонов..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Буферизация линий..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Построение частей топологии..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "Прилипание границ..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Разрыв полигонов"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Разрыв границ..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Очистка границ в узлах..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Расчет центральных положений..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Очистка границ в узлах..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Разрыв границ..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Расчет центральных положений..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Невозможно рассчитать центроиды полигонов"
@@ -13152,18 +14024,18 @@ msgstr "Имя выходного файла"
 msgid "%d features written to '%s'."
 msgstr "%d объектов записано в '%s'."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Область: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "Выделить подсети для ближайших центров (направление от центра)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
@@ -13172,21 +14044,30 @@ msgstr ""
 "Центральный узел должен быть открыт (стоимость >=0). Цена в центральном узле "
 "используется при расчете."
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Количество центров: [%d] (nlayer: [%d])"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 #, fuzzy
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr "Недостаточно центров для выбранного слоя. Ничего не будет назначено."
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Вычисление стоимостей от центров ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Вычисление стоимостей от центров ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13245,7 +14126,7 @@ msgstr "%s=%s - неверное количество точек интерпо
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13924,7 +14805,7 @@ msgstr "Нет записей в таблице LR"
 msgid "More than one record in LR table"
 msgstr "Больше чем одна запись в таблице LR"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14224,32 +15105,42 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr "%d границ не обрезано, так как это повредит топологию"
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Вывести атрибуты векторного слоя."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "WHERE условия SQL команды не имеют ключевого слова 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Отображать вертикальный разделитель записей"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 "Вывести минимальный охват выбранных векторных объектов региона  вместо "
 "атрибутов"
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Регион\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Заполнить значения базы данных из векторных объектов."
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
@@ -14258,16 +15149,16 @@ msgstr ""
 "Невозможно открыть векторный слой <%s> на уровне топологии. Флаг '%c' "
 "требует уровень топологии."
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Невозможно открыть выбранный указатель"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Невозможно получить охват полигона %d"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Невозможно получить охват линии %d"
@@ -14308,46 +15199,50 @@ msgstr "Максимальное количество точек в сегмен
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Записать вертексы линий"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Сглаживание должно иметь положительное значение"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Неизвестный тип столбца '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Невозможно получить единицы проекции исходного слоя"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "     "
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "     "
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Число классов должно быть < 256"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -14473,7 +15368,9 @@ msgstr "Угол вращения (в градусах против часово
 msgid "Number of vertex points per grid cell"
 msgstr "Количество итераций \t= %d ячеек\n"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Тип объекта"
@@ -14573,10 +15470,13 @@ msgid "Writing out vector columns..."
 msgstr "Записываются столбцы вектора..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14588,6 +15488,7 @@ msgstr "растр, растровая алгебра"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14744,8 +15645,9 @@ msgstr "Размещение"
 msgid "Offset label in y-direction"
 msgstr "Смещение подписи по направлению y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Имя шрифта"
 
@@ -14817,6 +15719,130 @@ msgstr "Поиск квадратов..."
 msgid "Counting points quadrats..."
 msgstr "Подсчет сайтов в квадратах..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Классификация точек"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Не найдено ни одной точки с данными"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Импортированы целочисленные значения"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Импортированы целочисленные значения"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> неверное количество точек"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Значение максимального расстояния"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Количество итераций \t= %d ячеек\n"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Количество итераций \t= %d ячеек\n"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Стандартное отклонение"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14831,28 +15857,28 @@ msgstr "Отсутствует информация о цели для груп
 msgid "Target location <%s> not found"
 msgstr "Не найдена целевая область <%s>"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Набор слоев <%s> в целевой области <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "недостаточные права доступа"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "не найдено"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "Запустите i.target для группы."
 
@@ -15204,11 +16230,6 @@ msgstr "%s будет аккумулировать эти значение вм
 msgid " Database connection not defined for layer <%s>"
 msgstr "Для слоя %d не определено соединение с базой данных"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Тип данных столбца не поддерживается"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "Невозможно отсортировать массив ключей/значений"
@@ -15294,16 +16315,18 @@ msgid_plural "%d records updated."
 msgstr[0] "обновлено %d записей"
 msgstr[1] "обновлено %d записей"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Конвертировать векторные слои OGR в векторные слои GRASS."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "Имя источника данных OGR"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Импортируемый растровый файл"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15313,12 +16336,12 @@ msgstr ""
 "\t\tShape-файл ESRI: папка, содержащая shape-файлы\n"
 "\t\tФайл MapInfo: папка, содержащая файлы MapInfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr "Имя слоя OGR. Если не задано, импортируются все доступные слои"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15328,53 +16351,53 @@ msgstr ""
 "\t\tshape-файл ESRI: имя shape-файла\n"
 "\t\tФайл MapInfo: имя файла MapInfo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Минимальный размер импортируемой площади (в квадратных единицах)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 "Небольшие полигоны и острова игнорируются. Должны быть выше, чем порог "
 "прилипания^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "По выбору изменить исходный тип по умолчанию"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Нет активных контрольных точек"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Очистка границ в узлах..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Построить полилинии из линий или границ."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Удалить дублирующиеся центроиды полигонов"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Порог прилипания для границ"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' для отключения прилипания"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15382,186 +16405,188 @@ msgstr ""
 "Список имен полей, которые используются вместо оригинальных имен, первое "
 "используется для поля категорий"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Ошибка чтения файла ASCII: '%s'"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Имя поля используемого для подписей категорий растра"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Имя столбца"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Если имя не задано, то используется имя исходного слоя"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Перечислить поддерживаемые форматы и выйти"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Вывести список доступных слоев в источнике данных и выйти"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Не чистить полигоны (не рекомендуется)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Принуждение вывода целых значений"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Невозможно получить единицы проекции для текущей области"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Отобразить текущие параметры подключения и выйти"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Написать имена полей строчными буквами"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Невозможно открыть источник данных <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Позиция указателя не поддерживается драйвером MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "Источник данных содержит %d слоев:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Слой < %s > недоступен"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Невозможно получить информацию о векторном слое <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Столбец <%s> не найден в таблице <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Расстояние буферизации в единицах карты"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Невозможно создать векторный слой <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Ключевое поле  '%s' не найдено"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Тип ключевого поля не является целочисленным"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Столбец <%s> не найден в таблице <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 "Записать поле <%s> с фиксированной длиной %d знаков (может быть укорочено)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 "Записать поле <%s> с фиксированной длиной %d знаков (может быть укорочено)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15570,58 +16595,58 @@ msgstr ""
 "Ширина поля %s составляет 255 (не определена OGR), некоторые строки могут "
 "быть укороченны!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 "Записать поля %s с фиксированной длиной %d знаков (может быть укорочено)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Тип поля не поддерживается (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Импортирование %d объектов слоя..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s без геометрии"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Разрыв полигонов"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Замкнуть границы (порог = %.3e):"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Разрыв границ..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Преобразовать висячие границы в линии:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Преобразовать мосты границ в линии:"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Расчет центральных положений..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15633,117 +16658,117 @@ msgstr ""
 "в атрибутивной таблице. Количество объектов для таких полигонов хранится как "
 "категория в слое %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d исходных полигонов"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d исходных полигонов"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Общая площадь: %e (%d полигонов)"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Общая площадь: %e (%d полигонов)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Площадь перекрытия: %e (%d полигонов)"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Площадь перекрытия: %e (%d полигонов)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Полигоны без категорий: %e (%d полигонов)"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Полигоны без категорий: %e (%d полигонов)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Порог прилипания для границ"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Ввод прерван"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Невозможно удалить таблицу: %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "Информация о проекте обновлена!"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "<%s> уже является текущим набором"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15965,6 +16990,11 @@ msgstr ""
 "Для слоя %d не определено соединение с базой данных. Сначала используйте v."
 "db.connect."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Не найдена цветовая таблица растрового слоя <%s>"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16125,7 +17155,7 @@ msgstr "Опция 'sinuous' применима только к линиям"
 msgid "Querying database... "
 msgstr "Запрос к базе данных..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
@@ -16135,14 +17165,14 @@ msgstr ""
 "большого (%d) категорий запроса. Все результирующие значения для категории 0 "
 "неверны."
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 "Несколько результатов запроса, выходное значение установлено в NULL "
 "(категория [%d])"
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "Невозможно выбрать запись"
 
@@ -16332,14 +17362,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Растровый слой <%s> уже существует и будет перезаписан"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Растровый слой <%s> уже существует"
@@ -16476,14 +17506,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Присваивает уникальные категории новым точкам"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Создать параллельные линии для исходных линий."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "найдено %d линий или границ в векторном слое <%s@%s>"
 msgstr[1] "найдено %d линий или границ в векторном слое <%s@%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16995,19 +18030,24 @@ msgstr "Неправильная временная метка"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17021,6 +18061,7 @@ msgstr "Неправильная временная метка"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17033,7 +18074,7 @@ msgstr "Неправильная временная метка"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17197,6 +18238,7 @@ msgid "Unable to map image file"
 msgstr "Невозможно наложить файл изображения"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17214,14 +18256,14 @@ msgstr "Невозможно наложить файл изображения"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17259,6 +18301,55 @@ msgstr "Невозможно получить достаточно цветов.
 msgid "Using private colormap for DirectColor visual."
 msgstr "Использовать частную цветовую таблицу для визуализации DirectColor."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Показать колонку масштаба в графическом мониторе."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Создать набор, если не существует"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Удалить все фреймы и очистить экран"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Вывести путь поиска текущего набора"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Отобразить текущие параметры подключения и выйти"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr "Положение как процент координат экрана (0,0 - нижний левый угол)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17279,7 +18370,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17292,7 +18383,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17369,18 +18460,23 @@ msgid ""
 msgstr "Загрузить в таблицу значения растра в точках векторного слоя."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17395,6 +18491,7 @@ msgstr "Загрузить в таблицу значения растра в т
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17496,6 +18593,93 @@ msgstr "Процентный вес первого слоя для цветов
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Преобразовать 3D растровый слой в 2D растровый слой "
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Вывести список векторных слоев исходной области и выйти"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Название вводного 3D растрового слоя"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Число определяемых классов"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "исходные растровые слои"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -17631,7 +18815,7 @@ msgstr "Создать пустую базу данных."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17645,8 +18829,8 @@ msgid "rename"
 msgstr "имя"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17656,9 +18840,9 @@ msgid "input"
 msgstr "Вход"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17673,6 +18857,77 @@ msgstr "Запрос"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Перестроить топология для всех векторных слоев текущего набора."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "Создать векторный слой заданных изолиний из растрового слоя."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Контраст"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Шаг горизонталей"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Список уровней изолиний"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Минимальный уровень изолиний"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Максимальный уровень изолиний"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Минимальное количество точек в изолинии (0 -> бесконечность)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "исходные растровые слои"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Не создавать атрибутивную таблицу"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17681,7 +18936,7 @@ msgstr "Вывести список векторных слоев исходно
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17741,8 +18996,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17853,74 +19109,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Название вводного 3D растрового слоя"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Имя растрового слоя, содержащего результат классификации"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Имя растрового слоя, содержащего результат классификации"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17955,47 +19180,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Имя новой базы данных"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Название вводного растрового слоя"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Число определяемых классов"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "исходные растровые слои"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18100,8 +19308,8 @@ msgstr "изображения, растр, мультиспектральные
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Имя выходного файла"
+msgid "Name for output image (or text file for -t)"
+msgstr "Название для файла вывода (НЕ указывать расширение)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18118,6 +19326,54 @@ msgstr "подписать координатами вместо чисел"
 msgid "Use gnuplot for display"
 msgstr "Текст для отображения"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Выходной world файл TIFF "
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Список разделенный запятыми"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Имя выходного файла для отчёта"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Создать пустую базу данных."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Число определяемых классов"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Выходной растровый слой для тона"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18149,32 +19405,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Расширить охват области на основе нового набора данных"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Игнорировать проекцию (использовать проекцию области)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Невозможно получить единицы проекции для текущей области"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18365,6 +19599,20 @@ msgstr "Число ячеек должно пересекаться во все
 msgid "Output field separator"
 msgstr "Выходной разделитель полей"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Преобразовать 3D растровый слой в 2D растровый слой "
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Вывести список векторных слоев исходной области и выйти"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Показать растровый слой и его легенду в окне графики"
@@ -18467,8 +19715,15 @@ msgstr "Создать пустую базу данных."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Имя новой базы данных"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "общее, управление картой"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Имя существующего растрового слоя"
@@ -18481,7 +19736,7 @@ msgstr ""
 "mosaic"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18490,15 +19745,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Имя новой базы данных"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18549,7 +19804,7 @@ msgstr ""
 "Очистить содержимое активного фрейма дисплея и заполнить заданным цветом"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Имя выходного файла"
 
@@ -18629,16 +19884,27 @@ msgstr "Имена исходных файлов"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Имя выходного растрового слоя (по умолчанию: имя исходного)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Преобразовать 3D растровый слой в 2D растровый слой "
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18715,12 +19981,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18779,7 +20052,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Имя растрового слоя оверлея"
+msgstr "Имя второго растрового слоя"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18854,13 +20127,12 @@ msgstr ""
 "Значение используемое для обновления столбца (значения varchar должны быть в "
 "одиночных кавычках, например 'grass')"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18872,12 +20144,12 @@ msgstr ""
 "Создать растровый слой из набор координат используя одномерную статистику."
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "Сканировать файл данных для определения охвата и выйти"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "В режиме сканирования, выводить используя стиль скриптовой оболочки"
 
@@ -18892,7 +20164,7 @@ msgid "ASCII file containing input data"
 msgstr "ASCII файл содержащий исходные данные (или \"-\" для чтения из stdin)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Статистика используемая для растровых значений"
 
@@ -18900,14 +20172,14 @@ msgstr "Статистика используемая для растровых
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Статистика"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Тип данных для выходного растрового слоя"
 
@@ -18947,17 +20219,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Фактор масштабирования для значений атрибутивного поля"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Процент карты сохраняемый в памяти"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "p-тый перцентиль значений"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -19001,19 +20273,15 @@ msgid ""
 "on the fly."
 msgstr "Конвертировать векторные слои OGR в векторные слои GRASS."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Импортируемый растровый файл"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Выходной векторный слой ошибок"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Выравнивание текущего региона с исходным слоем"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19112,7 +20380,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19203,24 +20471,18 @@ msgstr "Вывести список векторных слоев исходно
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Число определяемых классов"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Название вдоль стороны растрового слоя"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "исходные растровые слои"
@@ -19339,17 +20601,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Количество точек интерполяции"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19357,10 +20623,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Вывести список векторных слоев исходной области и выйти"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19481,78 +20743,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Имя новой создаваемой области"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Вывести список доступных правил и выйти"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Вывести список доступных правил и выйти"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Вывести список доступных правил и выйти"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "Расчет среднего"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Системные таблицы вместо таблиц пользователя"
@@ -19672,10 +20950,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19734,6 +21008,60 @@ msgstr ""
 msgid "Test name"
 msgstr "Имя теста"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Преобразовать 3D растровый слой в 2D растровый слой "
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Имя атрибутивного столбца используемое для подписей"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Сгладить углы полигона"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Изменение значения для координаты z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Записать значения растра как z координаты. Таблица не создана. В настоящее "
+"время поддерживается только для точек."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Не создавать топологию"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Использовать значения растра как категории, а не уникальную "
+"последовательность (только CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19810,6 +21138,16 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+msgid "Data type"
+msgstr "Тип данных"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "z флаг поддерживается только для точек"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19984,20 +21322,26 @@ msgid "Description of the space time dataset"
 msgstr "Имя новой базы данных"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Имя новой базы данных"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20041,13 +21385,13 @@ msgstr "Трансформация Tasseled Cap (Kauth Thomas) для данны
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Номер слоя"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20133,7 +21477,7 @@ msgstr "Вывести список векторных слоев исходно
 msgid "Neighborhood size"
 msgstr "Размер области соседства"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Количество точек интерполяции"
@@ -20237,24 +21581,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Разрешение выходного слоя"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Название результирующего растрового слоя"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Метаданные"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Четкое разрешение"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Недопустимое имя выходного файла: <%s>"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Не выполнять оптимизацию обрезки региона"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Расположение экрана в географических координатах"
@@ -20320,17 +21681,37 @@ msgstr "Старое и новое имя столбца (старое,ново
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "Загрузка значений вектора в позициях векторных точек в таблицу."
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "Столбцы"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Имя векторного слоя для редактирования"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Столбцы"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Имя атрибутивного столбца используемое для подписей"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr "Максимальное расстояние запроса в единицах слоя "
 
@@ -20420,6 +21801,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20433,11 +21815,15 @@ msgid "Sill value"
 msgstr "%s: значение не соотвествует спецификации"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20552,28 +21938,23 @@ msgid ""
 msgstr ""
 "Рассчитать одномерную статистику используя не-нулевые ячейки растрового слоя"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "сайты"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Создать пустую базу данных."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Преобразовать 3D растровый слой в 2D растровый слой "
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Заполнить символами NULL"
 
@@ -20613,7 +21994,7 @@ msgstr ""
 "ячеек."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20627,7 +22008,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Радиус буфера растровых ячеек"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Метрика"
 
@@ -20645,12 +22026,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Преобразовать 3D растровый слой в 2D растровый слой "
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Количество точек интерполяции"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20678,7 +22059,7 @@ msgstr ""
 "surf.rst"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20706,6 +22087,18 @@ msgstr "Параметр сглаживания сплайна"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "Время для шагов [минуты]"
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+"Бикубическая или билинейная интерполяция сплайна с помощью регуляризации "
+"Тихонова."
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Область: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20715,20 +22108,11 @@ msgstr "Присоединить таблицу векторному слою."
 msgid "Vector map to which to join other table"
 msgstr "Векторный слой к которому присоединить другую таблицу"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Слой к которому добавить соединение"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "Столбцы"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20756,17 +22140,17 @@ msgstr "Число линий в легенде"
 msgid "Imports space time raster dataset."
 msgstr "Обновление статистики растрового слоя"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Выравнивание текущего региона с исходным слоем"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Растровый слой <%s> создан."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20843,14 +22227,17 @@ msgstr "3d растровый слой <%s> не найден"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20881,11 +22268,11 @@ msgstr "Невозможно выделить память для строки"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Невозможно прочитать диапазон растрового слоя <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Ошибка чтения файла истории"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20893,8 +22280,8 @@ msgstr "Невозможно закрыть растровый слой <%s@%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Ошибка записи данных"
 
@@ -20947,6 +22334,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Невозможно создать файл <%s>"
@@ -21111,9 +22499,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Тип потока подземных вод"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21144,7 +22533,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Невозможно создать и решить систему линейных уравнений"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Невозможно создать растровый слой <%s>"
@@ -21214,6 +22606,145 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Растровый слой %d Имя файла: %s уже существует. Будет перезаписан!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Стоимость для изолиний"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Пожалуйста, предоставьте значения g3d RGB слоев"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Векторный слой <%s> не найден"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Расчет направления стока..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr ""
+"Имя исходного точечного векторного слоя, у которого редактируется "
+"атрибутивная таблица"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Имя векторного слоя для редактирования"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Имя выходного растрового слоя экспозиции склонов"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Имя растрового слоя (слоев) для яркости"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "     "
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Количество итераций"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr ""
+"Ширина потока (в метрах). По умолчанию используется ширина растровой ячейки"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "вектор, интерполяция"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Не указан растровый слой"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "База данных по умолчанию не указана"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Максимальное количество итераций"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Максимальное количество итераций"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Количество ячеек между линиями стока"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Невозможно описать таблицу <%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Ошибка чтения слоя тона"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21353,11 +22884,11 @@ msgstr "Невозможно открыть файл ASCII <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "3d растровый слой для которого корректируются нулевые значения"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Список значений ячеек, которые будут установлены в NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Значение, которое заменит нулевое значение"
 
@@ -21382,7 +22913,7 @@ msgstr "modifyNull: ошибка сброса всех плиток"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: ошибка закрытия временного файла"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "растр, null данные"
@@ -21391,6 +22922,83 @@ msgstr "растр, null данные"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Создать полный 3D битмэп файл с NULL-значениями."
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "растр"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Создать растровый слой из набор координат используя одномерную статистику."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Не индексировать точки ячейкой растра"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Количество итераций \t= %d ячеек\n"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "3d растровый слой <%s> не найден"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Запись слоя..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "3d растровый слой для которого корректируются нулевые значения"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Изменение значения для координаты z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "вектор, трансформация"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Невозможно создать временный файл"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21445,13 +23053,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Диапазон выходных данных"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "Невозможно прочитать файл категорий растрового слоя <%s@%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "таблица категорий для [%s] установлена в %s"
@@ -21509,7 +23117,7 @@ msgstr "Ошибка чтения слоя тона"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Загрузка данных ... (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Ошибка закрытия g3d файла"
@@ -21905,7 +23513,7 @@ msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 "Неверные значения 3d растрового слоя! Значения должны быть между 0 и 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21915,7 +23523,7 @@ msgstr "Неизвестный метод <%s>"
 msgid "Aggregate operation"
 msgstr "Операция агрегации"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21951,6 +23559,40 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Невозможно выделить буферы ячеек."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Дисперсия"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+"Комбинировать красный, зеленый и синий слои в единый композитный растровый "
+"слой."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Имя выходного растрового слоя"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Размер точечного кэша"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Ошибка выделения памяти"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Запись нового растрового слоя..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22295,38 +23937,38 @@ msgstr "Вывести статистику в стиле shell"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22635,13 +24277,13 @@ msgid "Unknown operation '%s'"
 msgstr "Неизвестная операция"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr " игнорируется\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Область <%s> создана"
@@ -22715,9 +24357,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: файлы одинаковы, копирование не требуется"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> уже существует"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> уже существует в наборе слоев <%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22838,8 +24480,8 @@ msgid ""
 msgstr ""
 "Силовая замена параметров трансформации датума в исходной системе координат"
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -23103,9 +24745,9 @@ msgstr "Список импортируемых слоев"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Растр"
@@ -23120,15 +24762,15 @@ msgstr "Шаблон поиска слоев (по умолчанию: все)"
 msgid "File name exclusion pattern (default: none)"
 msgstr "Шаблон исключения слоев (по умолчанию: нет)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "Использовать простые регулярные выражения вместо групповых символов"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 "Использовать расширенные регулярные выражения вместо групповых символов"
@@ -23139,7 +24781,7 @@ msgid "Remove base raster maps"
 msgstr "Удалить базовые слои"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Не могу открыть файл <%s>"
@@ -23188,7 +24830,7 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
@@ -23197,70 +24839,60 @@ msgstr ""
 "Вывести список в стандартный вывод доступных файлов элементов базы данных "
 "GRASS указанного  пользователем типа."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "Шаблон поиска слоев (по умолчанию: все)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "Шаблон исключения слоев (по умолчанию: нет)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Набор для вывода списка (по умолчанию: текущий путь) "
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Имя набора (по умолчанию: текущий)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Установить расчетный регион равный региону с названием"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "Вывести типы данных"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "Красивый вывод в читабельном формате"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "Полный список (включает заголовки слоев)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "-r и -e взаимоисключающиеся"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "-r и -e взаимоисключающиеся"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Группа <%s> не существует"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Невозможно прочесть заголовок растрового 3D-слоя <%s@%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Невозможно открыть векторный слой <%s> на уровне топологии %d"
@@ -23466,44 +25098,44 @@ msgstr "Невозможно обновить текущий регион"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr "Невозможно изменить регион по умолчанию. Текущий набор не <PERMANENT>."
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Неверный ввод <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "Невозможно получить проекцию текущей области"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Невозможно получить единицы проекции для текущей области"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Невозможно обновить параметры географической проекции"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Ошибка в pj_do_proj (проекция исходной пары координат)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "Вы уже в Lat/Long. Используйте вместо этого параметр -p."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
@@ -23511,7 +25143,7 @@ msgstr ""
 "Вы в простой области XY, проектирование в Lat/Lon невозможно. Используйте "
 "параметр -p."
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23519,7 +25151,7 @@ msgstr ""
 "Вывод в WGS84 невозможен, так как эта область не содержит параметров "
 "трансформации. Попробуйте запустить g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr "Вычисления в Lat/Long невозможны в системе XY"
 
@@ -23743,40 +25375,61 @@ msgid "command line interface with GUI startup screen"
 msgstr "Столбец <%s> не найден"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Импортируемый растровый файл"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:78
 #, fuzzy
 msgid "Update default user interface settings"
 msgstr "Стандартные установки графического интерфейса обновлены"
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 #, fuzzy
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr "Стандартные установки графического интерфейса обновлены"
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s> теперь стандартный GUI"
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -24082,10 +25735,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Мой первый векторный модуль"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "Невозможно установить заданный уровень открытия вектора"
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24261,7 +25910,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Процентов завершено..."
 
@@ -24686,7 +26335,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Невозможно получить значение параметров проекции для текущей области"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24879,148 +26528,148 @@ msgstr "ewres=%f"
 msgid "Writing new raster map..."
 msgstr "Запись нового растрового слоя..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Перепроецирование растрового слоя в текущую область."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Область содержащая исходный векторный слой"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Набор, содержащий исходный векторный слой"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Имя перепроецируемого растрового слоя"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Имя выходного растрового слоя (по умолчанию: имя исходного)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Разрешение выходного слоя"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Вывести список растровых слоев исходной области и выйти"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Вывести список векторных слоев исходной области и выйти"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Вывести все параметры соединения слоя и выйти в стиле скрипта оболочки"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "Исходная и выходная области могут не совпадать"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr "Невозможно получить информацию о проекции выходного растрового слоя"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "Невозможно получить единицы проекции выходного растрового слоя"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr "Невозможно получить параметры проекции выходного растрового слоя"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Набор <%s> в исходной области <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Не найден растровый слой <%s> в области <%s> в наборе <%s>"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "Невозможно получить информацию о проекции исходного растрового слоя"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "Невозможно получить единицы проекции исходного слоя"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "Невозможно получить параметры проекции исходного растрового слоя"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Невозможно работать с неспроецированными данными (область xy)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "в <%s@%s> (область <%s>) ... %s"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Вход:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Столбцы: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Строки: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Север: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Юг: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Запад: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Восток: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "разрешение EW: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "разрешение NS: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Выход:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Проектирование..."
 
@@ -25074,12 +26723,6 @@ msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 "Позволяет создавать и/или изменять вспомогательные файлы растрового слоя"
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Название результирующего растрового слоя"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Текст используемый для единиц данных слоя"
@@ -25108,22 +26751,22 @@ msgstr "вектор"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Растровый слой <%s> не найден в текущем наборе"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] является реклассификацией другого слоя. Выход."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Запись нулевого файла для [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Удаляется нулевой файл для [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Готово."
 
@@ -25930,7 +27573,7 @@ msgstr "%s = %s -- должно быть больше нуля"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s Невозможно открыть %s"
@@ -26140,8 +27783,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "Две пары коэффициентов категорий и оффсетов, для $1 и $2"
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Невозможно прочитать файл категорий растрового слоя <%s@%s>"
@@ -26228,12 +27871,12 @@ msgstr "Не могу прочесть данные из <%s>"
 msgid "Can't get cell header"
 msgstr "Не могу получить заголовок ячейки"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS: строки изменены с %d на %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: столбцы изменены с %d на %d"
@@ -26426,10 +28069,6 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "Число строк заголовка в исходном файле (точечный режим)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Диапазон фильтра для данных z (минимум,максимум)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -26437,7 +28076,7 @@ msgstr "Диапазон фильтра для данных z (минимум,м
 msgid "Advanced Input"
 msgstr "Расширенный"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Масштаб применяемый для данных z"
 
@@ -26465,7 +28104,7 @@ msgstr "Масштаб применяемый для данных z"
 msgid "Please specify a reasonable column number."
 msgstr "Укажите правильный номер столбца."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "неверное значение смещения на восток"
@@ -26475,15 +28114,15 @@ msgstr "неверное значение смещения на восток"
 msgid "Invalid vrange"
 msgstr "неверное значение смещения на восток"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "Невозможно вычислить персентиль без заданной опции pth!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "Невозможно вычислить укороченное среднее без заданной опции trim!"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26506,7 +28145,7 @@ msgid "Reading input data..."
 msgstr "Чтение ввода..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Проход #%d (из %d) ..."
@@ -26552,16 +28191,16 @@ msgstr "Неправильная строка %lu координаты y сто
 msgid "Writing to output raster map..."
 msgstr "Запись выходного растрового слоя %s... "
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "%lu точек найдено в регионе."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Сканирование данных ..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Диапазон:     минимум         максимум\n"
@@ -26720,10 +28359,6 @@ msgstr "Имя для выходного растрового файла"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "GIS формат для записи (регистрозависимый, см. также параметр -l)"
 
-#: ../raster/r.out.gdal/main.c:192
-msgid "Data type"
-msgstr "Тип данных"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "Опции создания для драйвера выходного формата"
@@ -27275,103 +28910,109 @@ msgstr "Неверная y координата <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Предупреждение, точка вне окна игнорируется: %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Управление NULL-значениями заданного растрового слоя."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "3d растровый слой для которого корректируются нулевые значения"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Выполнить только если формат слоя с плавающей запятой"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Выполнить только если слой целочисленный"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Выполнить только если слой не имеет битмэп файла с NULL-значениями"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "Создание битмэп файла с NULL-значениями проверив всех ячейки данных"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "Удалить растрового файла битмэп с NULL-значениями"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "Создание битмэп файла с NULL-значениями проверив всех ячейки данных"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Растровый слой <%s> не найден в текущем наборе <%s>"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "%s - недопустимое значение для null"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Растровый слой <%s> уже имеет битмэп"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> целочисленное значение растра (CELL)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> целочисленное значение растра (CELL). Используется null=%d."
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> растровый слой с плавающей запятой"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Запись нулевого файла для растрового слоя <%s>... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Растровый слой <%s> изменен."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Удаляется нулевой файл для растрового слоя <%s>..."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: значение не соотвествует спецификации"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: значение не соотвествует спецификации"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Запись новых данных для растрового слоя <%s>..."
@@ -27705,7 +29346,7 @@ msgstr "Имя исходного файла; или \"-\" для чтения 
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Тип объекта"
+msgstr "Название выходного растра"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27787,88 +29428,179 @@ msgstr "Преобразование..."
 msgid "File <%s> created"
 msgstr "Файл <%s> создан"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Создать растровый слой из набор координат используя одномерную статистику."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Файл, содержащий правила перекодирования"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Диапазон фильтра для данных z (минимум,максимум)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Масштаб применяемый для данных z"
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+"Удалить <trim> процент наименьших и <trim> процент наибольших наблюдений"
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Название выходного растра"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Установить регион совпадающий с растровым слоем"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Группа <%s> не существует"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "zrange при сканировании учитываться не будет"
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Неизвестная опция правила: '%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Неправильный слой <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Область <%s> создана"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Чтение данных..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Невозможно открыть выходной файл <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Запись слоя ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu точек найдено в регионе."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Невозможно открыть файл [%s] для чтения"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Создать растровый слой с расстояниями до объектов в исходном слое"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Имя выходного слоя расстояний"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Имя выходного растрового слоя"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Максимальное расстояние между точками в единицах карты"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Максимальное расстояние до ближайшей линии"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "Должны быть указаны как минимум одни distance= и value="
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Неизвестная метрика: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Максимальное расстояние между точками в единицах карты"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Невозможно создать временный файл <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -28008,7 +29740,7 @@ msgstr "[%s]: Нет такого цвета"
 msgid "Converting <%s>..."
 msgstr "Преобразование %s..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "Растр <%s> несовпадение типа"
@@ -28117,7 +29849,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Нет подходящих точек в текущем регионе"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28712,7 +30444,7 @@ msgstr "[%s]: Нет такого цвета"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29154,7 +30886,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Вывести статистику в стиле shell"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29176,11 +30908,6 @@ msgstr "Проход %d..."
 msgid "Unable to write to temp file"
 msgstr "Невозможно создать временный файл"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Создание точек..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29298,7 +31025,7 @@ msgid "Writing output raster map..."
 msgstr "Запись выходного растрового слоя %s... "
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -29309,43 +31036,43 @@ msgstr "Запись растрового слоя <%s>..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Генерация статистики по площади для растровых слоев."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "wtrshed проход %d"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Имя выходного растрового слоя"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Координаты E и N начальной точки (точек)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Неверная восточная координата <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Неверная северная координата <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Предупреждение, точка вне окна игнорируется: %.4f,%.4f"
@@ -29446,22 +31173,22 @@ msgid "Invalid map type"
 msgstr "Неправильный слой <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "СЕКЦИЯ %d: Завершение слоев."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "СЕКЦИЯ %d: Определение водосбора."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "СЕКЦИЯ 1a (из %1d): Инициализация памяти."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "СЕКЦИЯ 1b (из %1d): Определение потока вне слоя."
@@ -29588,25 +31315,25 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 #, fuzzy
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "СЕКЦИЯ 3: Аккумуляция поверхностного стока."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "СЕКЦИЯ 3: Аккумуляция поверхностного стока."
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29614,8 +31341,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -30193,185 +31920,190 @@ msgstr ""
 "Нажмите <return> в ответ на следующий вопрос, если слой препятствий "
 "отсутствует."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Вход"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Название вводного растрового слоя"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Исходный слой: количество поверхностного стока на ячейку"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Имя исходного растрового слоя (насыщенность)  "
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Исходный слой: формы рельефа блокирующие поверхностный сток, для USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Исходное значение: минимальный размер внешнего водосборного бассейна"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Исходное значение: максимальная длина поверхностного стока, для USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Выходной слой: количество ячеек дренируемых через каждую ячейку"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Выходной слой топографического индекса"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Имя выходного растрового слоя экспозиции склонов"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Выходной слой: каждому полубассейну назначено уникальное значение"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Имя выходного растрового слоя крутизны склонов"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "Выходной слой: длина склона и крутизна  (LS) для USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Имя выходного растрового слоя крутизны склонов"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Выходной слой: крутизна склона (S) для USLE"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Коэффициент преобразования для z-значений"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "Максимальное количество памяти для использования с флагом -m (в MB)"
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Разрешить только горизонтальный и вертикальный сток"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 "Включите опцию свопинга дисковой памяти: Операция выполняется слишком "
 "медленно"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Вы должны выбрать выходной слой."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s=%s - должно быть положительное число"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30382,43 +32114,43 @@ msgstr ""
 "    basin, stream, half.basin, slope, or lS\n"
 "    параметр порога бассейна обязательно должен быть задан."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Область Lat/Long не поддерживается"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Подпроцесс завершился неудачно с кодом %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] "СЕКЦИЯ 1 начало: Инициализация переменных. всего %d секций."
 msgstr[1] "СЕКЦИЯ 1 начало: Инициализация переменных. всего %d секций."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 #, fuzzy
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 "Максимальное количество используемой памяти было меньше чем 3 MB, "
 "установлено по умолчанию = 300 MB."
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "СЕКЦИЯ 1b (из %1d): Определение потока вне слоя."
@@ -30428,21 +32160,31 @@ msgstr "СЕКЦИЯ 1b (из %1d): Определение потока вне 
 msgid "Closing accumulation map"
 msgstr "невозможно открыть новый слой аккумуляции"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Вычисление разделов"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Вычисление разделов"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Вычисление разделов"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Расчет направления стока..."
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -30473,32 +32215,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "растр, ресэмплинг"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 "Приведение растровых слоев карты к меньшему масштабу с помощью интерполяции."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Метод агрегации"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Вес согласно площади (медленнее)"
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Невозможно прочесть цветовую таблицу для <%s>"
@@ -30908,7 +32650,7 @@ msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr ""
 "Цветовая таблица 'grey.log' не поддерживается для растров с плавающей запятой"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "Неверный цвет '%s'"
@@ -31313,7 +33055,7 @@ msgstr ""
 "Рассчитать одномерную статистику используя не-нулевые ячейки растрового слоя"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31328,12 +33070,26 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Использовать такое же разрешение, как у входящего RASTER3D слоя, для "
+"выходных 2D слоев; независимо от параметров областей"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 "Рассчитать одномерную статистику используя не-нулевые ячейки растрового слоя"
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "input= и source= взаимоисключающие"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31635,33 +33391,33 @@ msgstr "Открыть растровый слой %s - один раз для 
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "Исходные слои должны быть одинакового типа. CELL, FCELL или DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: Невозможно найти охват для линий"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Охват:  l = %d, r = %d, t = %d, b = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "Проход номер %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Удалено %d пикселей "
 msgstr[1] "Удалено %d пикселей "
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Прореживание успешно выполнено."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 "Прореживание не завершено, попробуйте увеличить значение параметра "
@@ -31972,32 +33728,12 @@ msgstr "Контраст"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "Создать векторный слой заданных изолиний из растрового слоя."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Шаг горизонталей"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Список уровней изолиний"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Список уровней изолиний"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Минимальный уровень изолиний"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Максимальный уровень изолиний"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Минимальное количество точек в изолинии (0 -> бесконечность)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32606,55 +34342,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Невозможно создать и решить систему линейных уравнений"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Опорный растровый слой"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Значения излучения"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Значения излучения"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Файл, содержащий правила переклассификации"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Затравка для генератора случайных чисел"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Запись слоя..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "-r и -e взаимоисключающиеся"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "Ошибка параметра"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "Ошибка(и) во время вычислений с плавающей точкой"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "Возникло переполнение во время вычислений"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Неизвестный тип: %d"
@@ -32704,80 +34441,80 @@ msgstr "Неизвестная ошибка для функции  '%s'"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Невозможно прочитать цветовой файл для растрового слоя <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Невозможно создать btree для растрового слоя <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Неправильный модификатор слоя: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Неопределенная переменная '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Неправильный слой <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Неопределенная функция '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "Недостаточное количество аргументов (%d) для функции  %s()"
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "Слишком много аргументов (%d) для функции  %s()"
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Неверный тип аргумента для функции  %s() "
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "Внутренняя ошибка функции  %s()"
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "Неверное количество аргументов (%d) для оператора  '%s'"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "Format_expression_prec: неизвестный тип: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Невозможно закрыть растровый слой <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Невозможно закрыть выходной растровый слой"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Известные функции:"
@@ -32964,7 +34701,7 @@ msgstr "Прямая развертка завершена"
 msgid "Reverse sweep complete"
 msgstr "Обратная развертка завершена"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
@@ -32972,15 +34709,15 @@ msgstr ""
 "Невозможно конвертировать информацию о проекции исходного растрового слоя в "
 "формат GRASS для проверки"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "Размещение PROJ_INFO:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "Набор данных PROJ_INFO:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -33022,14 +34759,6 @@ msgstr "Имя не файлового источника данных GDAL"
 msgid "Band to select (default is all bands)"
 msgstr "Выбор канала (по умолчанию все каналы)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Метаданные"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -33053,7 +34782,7 @@ msgstr "Формат: тип слоя итоговое значение мини
 msgid "%s= or %s= must be given"
 msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Невозможно обновить текущий регион"
@@ -33072,7 +34801,7 @@ msgstr "Растровый слой <%s> уже существует и буде
 msgid "Reading band %d of %d..."
 msgstr "Чтение карты %s..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Выбранный канал (%d) не существует"
@@ -33141,100 +34870,115 @@ msgstr "Создание файлов поддержки для %s"
 msgid "Link to raster map <%s> created."
 msgstr "Растровый слой <%s> создан."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Импорт бинарного растрового файла в растровый слой GRASS."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Импортируемый растровый файл"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Выбор канала (по умолчанию все каналы)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Имя целевой области для изображений"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "Имя области для чтения проекции, не для трансформации GCP"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Невозможно получить канал растра"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Имя исходного растрового слоя высот [метры]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Невозможно описать таблицу <%s>"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Игнорировать проекцию (использовать проекцию области)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Сохранять номера каналов вместо использования имен цветов каналов"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Отобразить таблицы и выйти"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "Вы должны указать целевую область, отличную от выходной области"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "Необходимо задать верхний и нижний слой"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Число поддиапазонов должна быть равна или больше, чем 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Невозможно открыть источник данных <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 #, fuzzy
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
@@ -33243,95 +34987,100 @@ msgstr ""
 "Импорт невозможен, исходный растровый слой повёрнут. Можно использовать "
 "'gdalwarp' для трансформации слоя с ориентацией верха на север."
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Продолжение импорта..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Невозможно открыть файл эталонов"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Невозможно получить канал растра"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Копирование %d GCPS  в точечный файл для <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "GCP имеет следующую координатную систему OpenGIS WKT:"
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Перепроецирование таблицы GCPs:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Исходная проекция таблицы GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* Выходная проекция таблицы GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Ошибка в pj_do_proj (невозможно перепроектировать GCP %i)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "Невозможна трансляция ключевых значений проекции исходных GCP"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "Невозможно получить информацию о проекции целевой области"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Невозможно получить единицы проекции целевой области"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "Невозможно получить параметры проекции целевой области"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Запись растрового слоя <%s>..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Установка цветовой таблицы серого для <%s> (8-бит, полный диапазон)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr ""
 "Установка цветовой таблицы серого для <%s> (16-бит, диапазон изображения)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr " ."
@@ -33456,7 +35205,7 @@ msgstr "Чтение слоя высот..."
 msgid "Writing topographic index map..."
 msgstr "Запись топографического индексного слоя..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Количество исходных точек: %d."
@@ -33556,12 +35305,12 @@ msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 "Объем верен только если глубины озера (растровый слой рельефа) в метрах"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Показать индекс"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33569,23 +35318,23 @@ msgstr ""
 "Создать композитный растровый слой используя значения категорий ячеек из "
 "одного (или нескольких) слоев для заполнения значений 'no data' слоя."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Имена объединяемых растровых слоев"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Название результирующего растрового слоя"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Использовать ноль (0) вместо NULL для прозрачности"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Минимальное число исходных растровых слоев - два"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Создание файлов поддержки для растрового слоя <%s>"
@@ -33661,42 +35410,6 @@ msgstr "растр, высота"
 msgid "Converts a raster map into a vector map."
 msgstr "Конвертировать растровый слой в векторный слой."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Имя атрибутивного столбца используемое для подписей"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Сгладить углы полигона"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Использовать значения растра как категории, а не уникальную "
-"последовательность (только CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Изменение значения для координаты z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Записать значения растра как z координаты. Таблица не создана. В настоящее "
-"время поддерживается только для точек."
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Не создавать топологию"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -34227,11 +35940,6 @@ msgstr "Размер точечного кэша"
 msgid "Advanced"
 msgstr "Расширенный"
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Выходной растровый слой для тона"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34533,7 +36241,7 @@ msgstr "Сгенерировать случайные поверхности с
 msgid "Name for output raster map(s)"
 msgstr "Имя выходного растрового слоя"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Максимальное допустимое расстояние от точки до линии"
@@ -34560,7 +36268,7 @@ msgstr "Максимальное количество итераций"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Чтение растрового слоя <%s>..."
@@ -34906,7 +36614,7 @@ msgstr "Рассчитывает индекс доминантного разн
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34932,7 +36640,7 @@ msgstr "Показать индекс"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Файл конфигурации"
@@ -34951,7 +36659,7 @@ msgstr "Рассчитывает стандартное отклонение п
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Показать индекс"
@@ -35108,7 +36816,7 @@ msgstr "Невозможно произвести lseek"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Рассчитать индекс разнообразия Шеннона для растрового слоя"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "Рассчитывает индекс среднего значения пикселей растрового слоя"
 
@@ -35300,11 +37008,11 @@ msgstr "север=%f"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Невозможно прочитать максимальное расстояние. Выход"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Расчет слоя %01d из %01d (угол %lf, растровый слой <%s>)"
@@ -35554,13 +37262,53 @@ msgstr "incidout требует установленного параметра
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "Метод 2: общая дневная иррадиация для заданного дня года"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Константа увеличения диффузии"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Запись растрового слоя <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Неправильный слой <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Использование координат центра: %f %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Запись растрового слоя <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Использование координат центра: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Запись растрового слоя <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 "Если ипользуется -s и не используются растры горизонтов, numpartitions "
 "должен быть =1"
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -35568,11 +37316,11 @@ msgstr ""
 "Для экономии памяти и использования теней, нужно использовать горизонты "
 "расчитанные заранее."
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35598,86 +37346,97 @@ msgstr "Распаковать слоя"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Вывести статистику в стиле shell"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "вектор  "
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 "[%s] - файл переклассификации слоя <%s> в наборе <%s> - невозможно "
 "распаковать"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 "[%s] - файл переклассификации слоя <%s> в наборе <%s> - невозможно сжать"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 "[%s] - файл переклассификации слоя <%s> в наборе <%s> - невозможно "
 "распаковать"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "ВЫПОЛНЕНО: несжатый файл меньше на %lu байт "
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "ВЫПОЛНЕНО: сжатый файл меньше на %lu байт "
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "ВЫПОЛНЕНО: несжатый файл больше на %lu байт "
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "ВЫПОЛНЕНО: сжатый файл больше на %lu байт "
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "полигон"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] уже распаковано"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] уже сжато"
+msgid "Uncompressing <%s>"
+msgstr "Значения излучения"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%sСЖАТЬ [%s]"
+msgid "Re-compressing <%s>"
+msgstr "Значения излучения"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Удаление <%s>"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 "[%s] - файл переклассификации слоя <%s> в наборе <%s> - невозможно "
 "распаковать"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 "[%s] - файл переклассификации слоя <%s> в наборе <%s> - невозможно сжать"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35709,53 +37468,53 @@ msgstr "o_adev: нет данных в массиве"
 msgid "Filter <%s> not found"
 msgstr "Файл <%s> не найден"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "вектор, плотность ядра"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr ""
 "Приведение растровых слоев карты к меньшему масштабу с помощью интерполяции."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Область <%s> создана"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** слишком много эталонов в <%s> (максимум 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Должна быть указана как минимум одна опция из %s "
@@ -36180,22 +37939,27 @@ msgstr[1] "Расчет центральных положений..."
 msgid "Calculating %s"
 msgstr "Расчет слоев..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' должен быть > 0"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Корреляция"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr ""
 "Сгенерировать ячейки со случайными значениями и пространственной зависимостью"
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Максимальное количество загружаемых столбцов "
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -36338,7 +38102,7 @@ msgstr "Отключить"
 msgid "Grid line width"
 msgstr "Ширина векторной линии"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Цвет сетки"
 
@@ -36465,14 +38229,10 @@ msgid "Starting and ending coordinates"
 msgstr "Координаты начала и конца"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Цвет линии"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Цвет текста или \"none\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -36501,8 +38261,8 @@ msgid "Name of monitor to start"
 msgstr "Имя выходного скрипта"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36564,48 +38324,66 @@ msgstr "Отобразить текущие параметры подключе
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Вывести список векторных слоев исходной области и выйти"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Отобразить текущие параметры подключения и выйти"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "Не выбирать автоматически на старте"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Вывести список векторных слоев исходной области и выйти"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Невозможно прочесть цвет"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Открыть форму в режиме редактирования"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr "Монитор <%s> освобожден"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Монитор не выбран"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
@@ -36615,64 +38393,74 @@ msgstr "Должно быть указано либо  \"-i\" либо \"value=\
 msgid "Monitor <%s> is not running"
 msgstr "Файл <%s> не найден"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "файл 3dview <%s> не найден"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Невозможно создать файл <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Файл не найден: %s"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Невозможно открыть источник данных OGR '%s'"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Невозможно создать файл <%s>"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Файл '%s' уже существует и будет перезаписан."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr " "
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Тип вывода"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Векторный слой <%s> уже существует"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Невозможно создать файл <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Запись векторного слоя <%s> ..."
 
-#: ../display/d.mon/start.c:163
-#, fuzzy, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "Установка названия слоя <%s> которое отменит <%s>"
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Невозможно прочитать файл диапазона"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Векторный слой <%s> уже существует"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Список координат точек"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Столбец <%s> не найден"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr " ."
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Невозможно прочитать файл диапазона"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "найдено %d линий или границ в векторном слое <%s@%s>"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36787,12 +38575,12 @@ msgstr "%s: значение не соотвествует спецификац
 msgid "[%s]: illegal value specified"
 msgstr "%s: значение не соотвествует спецификации"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Выполнение log-преобразования"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -36801,16 +38589,34 @@ msgstr ""
 "Наложить значения категорий ячеек на растровый слой показанный в графическом "
 "мониторе."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Не индексировать точки ячейкой растра"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Получить цвет текста из значения цвета ячейки"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Параметры"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Путь к файлу шрифтов"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr "Кодировка текста (применимо только для шрифтов TrueType)"
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36818,7 +38624,7 @@ msgstr[0] "Цвет сетки"
 msgstr[1] "Цвет сетки"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36829,7 +38635,7 @@ msgstr ""
 "Слишком большой размер текущего окна. Ячейки показанные в окне графики могут "
 "быть слишком малы, чтобы был виден номер категории ячейки."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36912,11 +38718,6 @@ msgstr "Цвет заливки полигонов"
 msgid "Colorize features according color definition column"
 msgstr "Имя столбца определителя цвета (для использования с флагом -a)"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Не указан столбец определения цвета"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36926,7 +38727,7 @@ msgstr ""
 msgid "Lines"
 msgstr "Линии"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Ширина линии"
 
@@ -37488,37 +39289,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Некорректные координаты %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Показать информацию об активном дисплее монитора"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Показать прямоугольник экрана (лево, право, верх, низ)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Показать размеры экрана (ширина, высота)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Показать прямоугольник активного фрейма"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Показать размеры экрана (ширина, высота)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Показать прямоугольник текущего региона"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 #, fuzzy
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr "Показать координаты и разрешение всего экрана"
@@ -37793,14 +39594,6 @@ msgstr "Выравнивание текста"
 msgid "Line spacing"
 msgstr "Межстрочный интервал"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Путь к файлу шрифтов"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr "Кодировка текста (применимо только для шрифтов TrueType)"
-
 #: ../display/d.text/main.c:235
 #, fuzzy
 msgid "Input file"
@@ -37867,7 +39660,7 @@ msgstr "Тип диаграммы"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Свойства диаграммы"
 
@@ -37904,6 +39697,11 @@ msgid "Maximum value used for bar plot reference"
 msgstr ""
 "Максимальное значение используемое для относительной столбцовой диаграммы"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Создать выходной 3D слой"
+
 #: ../display/d.rgb/main.c:58
 #, fuzzy
 msgid ""
@@ -37913,6 +39711,11 @@ msgstr ""
 "Показать три растра заданных пользователем как красный, зеленый и синий слои "
 "в активном фрейме дисплея."
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37957,14 +39760,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Использовать часть диапазона слоя для легенды (мин, макс)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Параметры"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -38050,11 +39846,12 @@ msgstr "Цветовой диапазон превышает верхний пр
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "use=%s вне диапазона [%.3f, %.3f] (расширить с range= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Нечего отрисовывать! (нет категорий с подписями??)"
 
@@ -38068,37 +39865,93 @@ msgstr "Показать колонку масштаба в графическо
 msgid "North arrow style"
 msgstr "Показать только указатель на север"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 " Экранные координаты верхнего-левого угла подпии (([0,0] - верхний левый "
 "угол фрейма)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Цвет линии"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Показать только шкалу масштаба"
@@ -38115,7 +39968,7 @@ msgstr "Невозможно закрыть слой"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
@@ -38123,62 +39976,62 @@ msgstr ""
 "Создать стрелки показывающие экспозицию ячеек для растрового слоя с данными "
 "экспозиций."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Имя показываемого растрового слоя экспозиций"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Имя существующего растрового слоя экспозиций"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Цвет для отрисовки стрелок"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Цвет для отрисовки стрелок"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Цвет значений X (нулевые значения)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Цвет для неизвестной информации"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Рисовать стрелки каждую N-ную ячейку"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Растровый слой содержащий значения используемые для длины стрелки"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Коэффициент масштабирования для стрелок (слой магнитуд)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Неверное значение коэффициента масштабирования"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "Неправильное значение фактора пропуска"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "Магнитуда поддерживается только для слоев GRASS и экспозиций."
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr "Опция масштаба требует magnitude_map"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "Проблема чтения файла диапазона"
 
@@ -38463,55 +40316,41 @@ msgstr ""
 "матрица разделимости класса\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Растровый слой <%s> не найден в текущем наборе"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Подгруппа <%s> в группе <%s> не найдена"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Растровый слой <%s> не существует в подгруппе <%s>"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "Не найдено растровых слоев"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Подгруппа <%s> не содержит растровых слоев"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Подгруппа <%s> содержит только 1 растровый слой"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "В подгруппе должно быть минимум 2 растровых слоя"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Невозможно открыть файл эталонов-затравок <%s>"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Невозможно прочитать файл эталонов <%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s> содержит слишком много эталонов (максимум 255)"
@@ -38590,198 +40429,212 @@ msgstr "Минимальное количество пикселей в клас
 msgid "Name for output file containing final report"
 msgstr "Имя выходного файла, содержащего окончательный отчет"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Растровый слой <%s> не найден в текущем наборе"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Подгруппа <%s> в группе <%s> не найдена"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Неверное число исходных классов (%s)"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Неверное число интервалов сэмплирования (%s)"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Неверное число итераций (<%s>)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Неверное значение сходимости (%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Неверное значение разделения (%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Недопустимое значение min_size (%s)"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Невозможно создать файл отчета <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### Кластер (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Область: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Набор:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Группа:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Подгруппа: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Выходной файл эталонов: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Регион\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Север: %12.2f  Восток: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Юг: %12.2f  Запад: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Res:   %12.2f  Res:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Ряды:  %12d  Столбцы: %12d  Ячейки: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Маска: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Параметры кластера\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " Число начальных классов:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [из файла эталонов %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr " Минимальный размер класса:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr " Минимальное разделение класса:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr " Процент сходимости:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr " Максимальное число итераций: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr " Интервал получения значений по строкам:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr " Интервал получения значений по столбцам:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "Чтение растровых слоев..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr "Нет памяти. Запустите опять и выберите меньший размер выборки."
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Размер выборки: %d точек\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 "Недостаточно точек в выборке. Запустите опять и выберите больший размер "
 "выборки."
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 "Недостаточно не-нулевых точек выборки. Проверьте текущий регион (и маску)."
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## окончательные результаты #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d классов (сходимость=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Невозможно создать файл эталонов <%s> для группы <%s>, подгруппы <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38789,12 +40642,12 @@ msgstr ""
 "\n"
 "#################### КЛАССЫ ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d классов, %.2f%% стабильных точек\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -39110,8 +40963,8 @@ msgid "radiance"
 msgstr "Дисперсия"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Выбор"
@@ -39481,359 +41334,403 @@ msgstr "Группа <%s> не существует"
 msgid "group <%s> references the following subgroups\n"
 msgstr "Подгруппа <%s> не содержит растровых слоев"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Имя растрового слоя для поперечного сечения"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Выбор"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Извлечь параметры рельефа из ЦМР."
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Имя растрового слоя фрактальной поверхности "
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Имя растрового слоя, содержащего результат классификации"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Имя исходного слоя"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Имя создаваемой растровой плоскости"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Вывести растровый слой направлений"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Число границ вне диапазона"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "Число границ вне диапазона"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -40039,7 +41936,7 @@ msgstr "Слой тренировочных проверочных данных"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Максимальное количество суб-эталонов в любом классе"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Неправильное количество  суб-эталонов %s"
@@ -40397,108 +42294,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Недостаточно памяти"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Ошибка чтения слоя тона"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Ошибка записи файла сегмента"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Ошибка записи данных"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Число создаваемых точек"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Действие не реализовано"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Запись слоя..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Обработка полигонов..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "Размер региона меньше чем minreg, ничего не показано."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "Файл dig_att уже существует"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Выбор"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Ошибка чтения слоя тона"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Ошибка записи файла сегмента"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Ошибка записи данных"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Число создаваемых точек"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Запись слоя..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40572,64 +42475,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Значение порога должно быть >= 0"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Невозможна запись файла сегмента для %s"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Некорректный метод: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Область <%s> создана"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Область <%s> создана"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Область <%s> создана"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "Растровый слой <%s> не найден"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Слой шаблона должен быть бинарным слоем (с ячейками 0/1)"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Растровый слой <%s> не найден"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Неправильное число шагов: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Неправильное число шагов: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Действие не реализовано"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -40696,7 +42616,7 @@ msgstr "Имя выходного растрового слоя (зеленый)
 msgid "Name for output raster map (blue)"
 msgstr "Имя выходного растрового слоя (синий)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40748,7 +42668,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr " "
@@ -41602,51 +43522,55 @@ msgstr "Группа <%s> не найдена"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Область <%s> создана"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "прервано"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Имя растрового слоя фрактальной поверхности "
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Название выходного растра"
@@ -41933,6 +43857,11 @@ msgstr "вектор, трансформация"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "Запустите i.target для группы."
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -42337,13 +44266,47 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ "Имя и тип нового поля (полей) (типы зависят от базы данных, но все "
 #~ "поддерживают VARCHAR(), INT, DOUBLE and DATE)"
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> уже существует"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Невозможно установить проекцию"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] уже сжато"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Невозможно установить проекцию"
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "%sСЖАТЬ [%s]"
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "Возникло переполнение во время вычислений"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Не найдено ни одной точки с данными"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Слой к которому добавить столбец"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Слой к которому добавить столбец"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Номер слоя (в)"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Координаты затравки"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Вывод результата в stdout, без обновления атрибутивной таблицы"
 
 #, fuzzy
 #~ msgid "time series"
@@ -42389,76 +44352,6 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "Number of quartals to use"
 #~ msgstr "Количество квадратов"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr ""
-#~ "Имя исходного растрового слоя содержащего значения расходов на преодоление"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr ""
-#~ "Имя исходного растрового слоя содержащего значения расходов на преодоление"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Выходной растровый слой рассеянной освещенности [W.m-2] (метод 1) или "
-#~ "иррадиации [Wh.m-2.day-1] (метод 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Выходной растровый слой отражения освещения земной поверхностью [W.m-2] "
-#~ "(метод 1) или иррадиации [Wh.m-2.day-1] (метод 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Выходной растровый слой прямой освещенности [W.m-2] (метод 1) или "
-#~ "иррадиации  [Wh.m-2.day-1] (метод 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Имя растрового слоя высот [m]"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Имя исходного растрового слоя высот [метры]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Выходной растровый слой отражения освещения земной поверхностью [W.m-2] "
-#~ "(метод 1) или иррадиации [Wh.m-2.day-1] (метод 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Выходной растровый слой прямой освещенности [W.m-2] (метод 1) или "
-#~ "иррадиации  [Wh.m-2.day-1] (метод 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Количество точек интерполяции"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Игнорировать проекцию (использовать проекцию области)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Область: %s\n"
 
@@ -42475,24 +44368,28 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ "\n"
 #~ "%d классов, %.2f%% стабильных точек\n"
 
+#~ msgid "Subregion"
+#~ msgstr "Субрегион"
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Шаг номера категории"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "опция <%s>: <%s> существует."
+#, fuzzy
+#~ msgid "Could not rewind input file"
+#~ msgstr "Невозможно открыть выходной файл <%s>"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Выходной слой <%s> игнорирован"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Имя базового растрового слоя"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Выходной слой топографического индекса"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> уже существует в наборе слоев <%s>"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Имя базового растрового слоя"
+#~ msgid "output map <%s> exists"
+#~ msgstr "Выходной слой <%s> игнорирован"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Длина страницы (по умолчанию: %d линий)"
@@ -42500,6 +44397,9 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Ширина страницы (по умолчанию: %d символов)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Игнорировать проекцию (использовать проекцию области)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -42523,6 +44423,14 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "[%s] not found"
 #~ msgstr "[%s} не найден"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "опция <%s>: <%s> существует."
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr ""
+#~ "Использовать другую проекцию для набора данных (использовать проекцию "
+#~ "области)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -42541,6 +44449,14 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ "проверку и использовать определение области для набора данных.\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
 #~ msgid "Default value: GRASS_GUI if defined otherwise wxpython"
 #~ msgstr "Значение по умолчанию: GRASS_GUI если установлен, иначе - tcltk"
 
@@ -42553,6 +44469,18 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgstr "Новая GISDBASE (полный путь к каталогу с новой областью)"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Невозможно установить проекцию"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Конвертировать все старые слои GRASS < Ver5.7 в текущем наборе в текущий "
+#~ "формат"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Обновление метаданных векторного слоя."
 
@@ -42590,165 +44518,68 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "No default DB driver defined"
 #~ msgstr "Драйвер по умолчанию не указан"
 
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s> уже существует в наборе слоев <%s>"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Конвертировать все старые слои GRASS < Ver5.7 в текущем наборе в текущий "
-#~ "формат"
+#~ msgid "OGR datasource name"
+#~ msgstr "Имя источника данных OGR"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Не задано имя слоя"
 
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Переименование слоев переклассификации"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Невозможно прочитать файл REF для подгруппы <%s> в группе <%s>."
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d категорий загружено из таблицы <%s>"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "input= и source= взаимоисключающие"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Укажите столбец с координатами z"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
-
-#, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "input= и source= взаимоисключающие"
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "weight= и -c взаимоисключающие"
-
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "weight= и -c взаимоисключающие"
-
 #, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "weight= и -c взаимоисключающие"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Невозможно создать файл <%s>"
 
 #, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
+#~ msgid "Starting monitor <%s> with env file '%s'"
+#~ msgstr "Установка названия слоя <%s> которое отменит <%s>"
 
 #, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Неправильное значение для scalex"
+#~ msgid "Env file not found"
+#~ msgstr "файл 3dview <%s> не найден"
 
 #, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "input= и source= взаимоисключающие"
+#~ msgid "PID file not found"
+#~ msgstr "Файл не найден: %s"
 
 #, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "input= и source= взаимоисключающие"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Укажите столбец с координатами z"
+#~ msgid "Command file not found"
+#~ msgstr "Столбец <%s> не найден"
 
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Укажите столбец с координатами z"
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "input= и source= взаимоисключающие"
-
-#, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "input= и source= взаимоисключающие"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Укажите столбец с координатами z"
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Укажите столбец с координатами z"
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Переименование слоев переклассификации"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "-r и -e взаимоисключающиеся"
+#~ msgid "Name for output image"
+#~ msgstr "Имя выходного файла"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
-#~ "указано!"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Невозможно прочитать файл REF для подгруппы <%s> в группе <%s>."
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr ""
-#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
-#~ "указано!"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Либо стандратное название цвета, либо триплет R:G:B"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d категорий загружено из таблицы <%s>"
 
 #~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
 #~ msgstr ""
-#~ "Показать тематический векторный слой в активном фрейме графического "
-#~ "монитора."
+#~ "Исправление результата v.lidar.growing. Это последний из трех алгоритмов "
+#~ "для фильтрации LIDAR."
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Цвет для текста"
+#~ msgid "Interpolation spline step value in east direction"
+#~ msgstr "Значение шага интерполяции сплайна в восточном направлении"
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Цвет для сетки или 'none'"
+#~ msgid "Interpolation spline step value in north direction"
+#~ msgstr "Значение шага интерполяции сплайна в северном направлении"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Имя выходного растрового слоя"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Имя выходного растрового слоя (красный)"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Ошибка дискретизации в единицах слоя"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Также вычислять максимальную дистанцию обнаружения"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -42897,16 +44728,37 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgstr "Использовать математическое обозначение скобок в легенде "
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Имя выходного растрового слоя (красный)"
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Имя выходного растрового слоя"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Также вычислять максимальную дистанцию обнаружения"
+#~ msgid "Default: input"
+#~ msgstr "Ошибка дискретизации в единицах слоя"
+
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr ""
+#~ "Показать тематический векторный слой в активном фрейме графического "
+#~ "монитора."
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "Цвет текста или \"none\""
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Показать"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Цвет для текста"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Цвет для сетки или 'none'"
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Либо стандратное название цвета, либо триплет R:G:B"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "линия"
 
 #, fuzzy
 #~ msgid ""
@@ -42914,23 +44766,44 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgstr ""
 #~ "Позволяет создавать и/или изменять вспомогательные файлы растрового слоя"
 
-#, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Невозможно прочитать векторный слой"
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Ошибка открытия исходного файла dig."
 
-#, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Невозможно создать таблицу: %s"
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "Файл dig_att не существует."
 
-#, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Не хватает памяти."
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Ошибка открытия исходного файла dig_att."
 
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "OLD_T_NEW имеет неверный код типа [%x]"
+#~ msgid "Attaching categories..."
+#~ msgstr "Присоединение категорий..."
 
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "NEW_T_OLD имеет неверный код типа [%x]"
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "Ошибка назначения атрибута линии (категория %d)."
+
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "Линия %d подпись: %d соответствует другой подписи: %d."
+
+#~ msgid "Writing new file..."
+#~ msgstr "Запись нового файла..."
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "В выходной файл записано [%d] точек и линий."
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "В выходной файл записано [%d] центроидов."
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Импорт векторных слоев старых версий GRASS."
+
+#~ msgid "Endian of input vector map"
+#~ msgstr "Endian исходного векторного слоя"
+
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr "Не найдены подписи категорий (dig_cats), таблица не создана"
+
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "Невозможно открыть файл dig_cats"
 
 #~ msgid "Reading dig file..."
 #~ msgstr "Чтение файла dig..."
@@ -43015,187 +44888,41 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "в память прочитано [%d] категорий "
 
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr "Не найдены подписи категорий (dig_cats), таблица не создана"
-
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "Невозможно открыть файл dig_cats"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Ошибка открытия исходного файла dig."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "Файл dig_att не существует."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Ошибка открытия исходного файла dig_att."
-
-#~ msgid "Attaching categories..."
-#~ msgstr "Присоединение категорий..."
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "Ошибка назначения атрибута линии (категория %d)."
-
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "Линия %d подпись: %d соответствует другой подписи: %d."
-
-#~ msgid "Writing new file..."
-#~ msgstr "Запись нового файла..."
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "В выходной файл записано [%d] точек и линий."
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "В выходной файл записано [%d] центроидов."
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Импорт векторных слоев старых версий GRASS."
-
-#~ msgid "Endian of input vector map"
-#~ msgstr "Endian исходного векторного слоя"
-
-#~ msgid "Interpolation spline step value in east direction"
-#~ msgstr "Значение шага интерполяции сплайна в восточном направлении"
-
-#~ msgid "Interpolation spline step value in north direction"
-#~ msgstr "Значение шага интерполяции сплайна в северном направлении"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr " Неизвестный тип растрового слоя"
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Размер кэша (MiB)"
-
-#~ msgid "Can't call bad function"
-#~ msgstr "Невозможно вызвать 'плохую' функцию"
-
-#~ msgid "Bad arguments to pointfunc %s"
-#~ msgstr "Неправильные аргументы для pointfunc %s"
-
-#~ msgid "No function defined to perform ``point %c point''"
-#~ msgstr "Функция для операции ``point %c point'' не определена"
-
-#~ msgid "Performing 1 arg map function on map %s"
-#~ msgstr "Проведение 1 arg функции для слоя %s"
-
-#~ msgid "Performing 2 arg map function on maps %s and %s"
-#~ msgstr "Проведение 1 arg функции для слоя %s и %s"
-
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Выполнение %s + %s"
-
-#~ msgid "Can't call bad map-function"
-#~ msgstr "Невозможно вызвать 'плохую' функцию слоя"
-
-#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
-#~ msgstr "Неправильные аргументы для mapfunc %s (argc = %d)"
-
-#~ msgid "No function defined to perform map %c map"
-#~ msgstr "Функция для операции map %c map  не определена"
-
-#~ msgid "Can't call bad num-function"
-#~ msgstr "Невозможно вызвать 'плохую' num-функцию"
-
-#~ msgid "Bad arguments to numfunc %s"
-#~ msgstr "Неправильные аргументы для numfunc %s"
-
-#~ msgid "No function defined to perform ``number %c number''"
-#~ msgstr "Функция для операции ``number %c number''  не определена"
-
-#~ msgid "Can't call bad any-function"
-#~ msgstr "Невозможно вызвать 'плохую' any-функцию"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "OLD_T_NEW имеет неверный код типа [%x]"
 
-#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
-#~ msgstr "Неправильные аргументы для anyfunc %s (argc = %d)"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "NEW_T_OLD имеет неверный код типа [%x]"
 
 #~ msgid "One or more coordinates"
 #~ msgstr "Одна или более координат"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Не хватает памяти для adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Не хватает памяти для ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Не хватает памяти для adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Не хватает памяти для adyy"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Не хватает памяти для adxy"
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "Невозможно создать quaddata"
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "Невозможно создать quadfunc"
-
-#~ msgid "Cannot create tree"
-#~ msgstr "Невозможно создать дерево"
-
-#~ msgid "Cannot create tree info"
-#~ msgstr "Невозможно создать информацию о дереве"
-
-#~ msgid "sites"
-#~ msgstr "сайты"
-
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Конвертировать файл site_lists GRASS в векторный слой."
-
-#~ msgid "Site file <%s> not found"
-#~ msgstr "Сайт-файл <%s> не найден"
-
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Не удалось определить формат site_list файла"
-
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Не удалось определить структуру сайта"
-
-#~ msgid "Input format: dimension: %d strings: %d FP: %d"
-#~ msgstr "Исходный формат: размерность: %d строк: %d FP: %d"
+#~ msgid "Name of elevation map"
+#~ msgstr "Имя слоя высот"
 
-#~ msgid ""
-#~ "Floating point category values, using sequential integer for category"
-#~ msgstr ""
-#~ "Значения категорий с плавающей точкой, для которых испльзуется "
-#~ "последовательное целое"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Строка символов для отображения пустых ячеек"
 
-#~ msgid "No category values, using sequential integer for category"
+#, fuzzy
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
 #~ msgstr ""
-#~ "Отсутствуют значения категорий, для которых используется последовательное "
-#~ "целое"
-
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "Конвертирование сайтов в точечный векторный слой..."
-
-#~ msgid "%d sites written."
-#~ msgstr "Записано %d сайтов."
-
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Имя слоя, используемого для ИНТЕНСИВНОСТИ"
+#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
+#~ "указано!"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Имя слоя, используемого для НАСЫЩЕННОСТИ"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Неизвестная метрика: [%s]."
 
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "Импорт файлов стран US-NGA GEOnet Names Server (GNS) в точечный векторный "
-#~ "слой GRASS."
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Ошибка чтения файла категорий для <%s>"
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Несжатый файл GNS из NGA (с расширением .txt)"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Ошибка чтения цветового файла для <%s>"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Имя растрового слоя (слоев) для высоты"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Строка, обозначающая отсутствующие данные в ячейке"
 
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "Файл таблицы для экспорта или строка соединения с БД"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Утилита интерполяции поверхности для растровых слоев."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -43213,15 +44940,18 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ "значения ячеек которого представляют значения высот комбинированные со "
 #~ "значениями расходов на преодоление с другого растрового слоя."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Имя слоя, используемого для ИНТЕНСИВНОСТИ"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Имя слоя, используемого для НАСЫЩЕННОСТИ"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Имя выходного слоя используемого для ЗЕЛЁНОГО"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Имя выходного слоя используемого для СИНЕГО"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Утилита интерполяции поверхности для растровых слоев."
-
 #~ msgid "Surface generation program."
 #~ msgstr "Программа создания поверхности"
 
@@ -43243,53 +44973,15 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgstr[0] "Интерполирование растрового слоя <%s>... %d строк... "
 #~ msgstr[1] "Интерполирование растрового слоя <%s>... %d строк... "
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "Проекция lat/lon пока не поддерживается"
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Область: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "вектор, создание сети."
-
-#~ msgid "Name of elevation map"
-#~ msgstr "Имя слоя высот"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Строка символов для отображения пустых ячеек"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
-#~ "указано!"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
-#~ "указано!"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Неизвестная метрика: [%s]."
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Ошибка чтения файла категорий для <%s>"
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Ошибка чтения цветового файла для <%s>"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Строка, обозначающая отсутствующие данные в ячейке"
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "Выходной слой z (высоты)"
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "Выходной слой экспозиции склонов (или fy)"
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "Проекция lat/lon пока не поддерживается"
+
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "Префикс выходного растрового слоя (слоев)"
 
@@ -43319,15 +45011,23 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "Suppress warnings"
 #~ msgstr "Подавлять предупреждения"
 
-#, fuzzy
-#~ msgid "High resolution panchromatic image"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
 #~ msgstr ""
-#~ "Трансформация бруви для слияния мультиспектральных каналов и "
-#~ "панхроматических каналов высокого разрешения"
+#~ "Импорт файлов стран US-NGA GEOnet Names Server (GNS) в точечный векторный "
+#~ "слой GRASS."
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Создание"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Несжатый файл GNS из NGA (с расширением .txt)"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Имя растрового слоя (слоев) для высоты"
+
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "Файл таблицы для экспорта или строка соединения с БД"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -43352,6 +45052,155 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgstr "Имя выходного растрового слоя (по умолчанию: имя исходного)"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Рассчитать одномерную статистику используя не-нулевые ячейки растрового "
+#~ "слоя"
+
+#~ msgid "Data to be classified: column name or expression"
+#~ msgstr "Классифицируемые данные: имя поля или выражение"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Цвет для сетки или 'none'"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Цвет для сетки или 'none'"
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Цвет для неизвестной информации"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Цвет для сетки или 'none'"
+
+#~ msgid "Create grid of points instead of areas and centroids"
+#~ msgstr "Создать сеть точек вместо полигонов и центроидов"
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "Создать сеть точек вместо полигонов и центроидов"
+
+#~ msgid "Invalid distance"
+#~ msgstr "Неверное расстояние"
+
+#~ msgid "Layer number"
+#~ msgstr "Номер слоя"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Область: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "вектор, создание сети."
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "input= и source= взаимоисключающие"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Укажите столбец с координатами z"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Неправильное значение для scalex"
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "input= и source= взаимоисключающие"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
+
+#, fuzzy
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "input= и source= взаимоисключающие"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "input= и source= взаимоисключающие"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Укажите столбец с координатами z"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Укажите столбец с координатами z"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "input= и source= взаимоисключающие"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Укажите столбец с координатами z"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Укажите столбец с координатами z"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Показать"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Должно быть указано либо  \"-i\" либо \"value=\""
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "weight= и -c взаимоисключающие"
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "weight= и -c взаимоисключающие"
+
+#, fuzzy
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "weight= и -c взаимоисключающие"
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr ""
+#~ "Трансформация бруви для слияния мультиспектральных каналов и "
+#~ "панхроматических каналов высокого разрешения"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Создание"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Название вводного растрового слоя"
 
@@ -43367,32 +45216,146 @@ msgstr "Имя исходного растрового слоя (насыщен
 #~ msgid "No maps output"
 #~ msgstr "Нет слоя вывода"
 
+#~ msgid "Color for drawing grid or \"none\""
+#~ msgstr "Цвет для сетки или 'none'"
+
+#~ msgid "Gather the histogram quietly"
+#~ msgstr "Создать гистограмму в фоне"
+
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Не хватает памяти для adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Не хватает памяти для ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Не хватает памяти для adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Не хватает памяти для adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Не хватает памяти для adxy"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Невозможно создать quaddata"
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Невозможно создать quadfunc"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "Невозможно создать дерево"
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "Невозможно создать информацию о дереве"
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Невозможно создать таблицу: %s"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Не хватает памяти."
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "-r и -e взаимоисключающиеся"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
+#~ "указано!"
+
 #, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr ""
+#~ "Либо \"-i\" or \"-r\" либо \"color\", \"rast\" либо \"rules\" должно быть "
+#~ "указано!"
+
+#~ msgid "sites"
+#~ msgstr "сайты"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Конвертировать файл site_lists GRASS в векторный слой."
+
+#~ msgid "Site file <%s> not found"
+#~ msgstr "Сайт-файл <%s> не найден"
+
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Не удалось определить формат site_list файла"
+
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Не удалось определить структуру сайта"
+
+#~ msgid "Input format: dimension: %d strings: %d FP: %d"
+#~ msgstr "Исходный формат: размерность: %d строк: %d FP: %d"
+
 #~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
+#~ "Floating point category values, using sequential integer for category"
 #~ msgstr ""
-#~ "Рассчитать одномерную статистику используя не-нулевые ячейки растрового "
-#~ "слоя"
+#~ "Значения категорий с плавающей точкой, для которых испльзуется "
+#~ "последовательное целое"
 
-#~ msgid "Data to be classified: column name or expression"
-#~ msgstr "Классифицируемые данные: имя поля или выражение"
+#~ msgid "No category values, using sequential integer for category"
+#~ msgstr ""
+#~ "Отсутствуют значения категорий, для которых используется последовательное "
+#~ "целое"
 
-#~ msgid "Color for drawing grid or \"none\""
-#~ msgstr "Цвет для сетки или 'none'"
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "Конвертирование сайтов в точечный векторный слой..."
 
-#~ msgid "Gather the histogram quietly"
-#~ msgstr "Создать гистограмму в фоне"
+#~ msgid "%d sites written."
+#~ msgstr "Записано %d сайтов."
 
-#~ msgid "Create grid of points instead of areas and centroids"
-#~ msgstr "Создать сеть точек вместо полигонов и центроидов"
+#~ msgid "Performing 1 arg map function on map %s"
+#~ msgstr "Проведение 1 arg функции для слоя %s"
+
+#~ msgid "Performing 2 arg map function on maps %s and %s"
+#~ msgstr "Проведение 1 arg функции для слоя %s и %s"
+
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Выполнение %s + %s"
+
+#~ msgid "Can't call bad map-function"
+#~ msgstr "Невозможно вызвать 'плохую' функцию слоя"
+
+#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
+#~ msgstr "Неправильные аргументы для mapfunc %s (argc = %d)"
+
+#~ msgid "No function defined to perform map %c map"
+#~ msgstr "Функция для операции map %c map  не определена"
+
+#~ msgid "Can't call bad num-function"
+#~ msgstr "Невозможно вызвать 'плохую' num-функцию"
+
+#~ msgid "Bad arguments to numfunc %s"
+#~ msgstr "Неправильные аргументы для numfunc %s"
+
+#~ msgid "No function defined to perform ``number %c number''"
+#~ msgstr "Функция для операции ``number %c number''  не определена"
+
+#~ msgid "No function defined to perform ``point %c point''"
+#~ msgstr "Функция для операции ``point %c point'' не определена"
+
+#~ msgid "Can't call bad any-function"
+#~ msgstr "Невозможно вызвать 'плохую' any-функцию"
+
+#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
+#~ msgstr "Неправильные аргументы для anyfunc %s (argc = %d)"
+
+#~ msgid "Can't call bad function"
+#~ msgstr "Невозможно вызвать 'плохую' функцию"
+
+#~ msgid "Bad arguments to pointfunc %s"
+#~ msgstr "Неправильные аргументы для pointfunc %s"
 
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "Создать сеть точек вместо полигонов и центроидов"
+#~ msgid "Unable to create vector map"
+#~ msgstr "Невозможно прочитать векторный слой"
 
-#~ msgid "Invalid distance"
-#~ msgstr "Неверное расстояние"
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Размер кэша (MiB)"
 
-#~ msgid "Layer number"
-#~ msgstr "Номер слоя"
+#~ msgid "Unknown raster map type"
+#~ msgstr " Неизвестный тип растрового слоя"
diff --git a/locale/po/grassmods_sl.po b/locale/po/grassmods_sl.po
index 76f502f..f970c97 100644
--- a/locale/po/grassmods_sl.po
+++ b/locale/po/grassmods_sl.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_sl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2005-06-10 11:15+0200\n"
 "Last-Translator: Miha Staut <mihastaut at yahoo.co.uk>\n"
 "Language-Team: Sloven��ina <grass-translations at lists.osgeo.org>\n"
@@ -251,6 +251,7 @@ msgstr "Ne najdem rastrskega sloja <%s>"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -485,6 +486,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Nisem uspel odpreti vhodne datoteke."
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -624,29 +630,29 @@ msgstr "Ime izhodnega rastrskega sloja"
 msgid "Unable to open database:"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Povezava z bazo podatkov ni definirana\n"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "Ne najdem rastrskega sloja <%s>"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -658,6 +664,11 @@ msgstr "ne morem posodobiti meja"
 msgid "Unable grant on table:"
 msgstr "Ime izhodne datoteke"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "ne morem odpreti <%s>"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -788,7 +799,7 @@ msgstr "Ime izhodnega rastrskega sloja"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -866,17 +877,17 @@ msgstr "ime tabele"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -910,39 +921,39 @@ msgstr "Izpi
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -988,7 +999,7 @@ msgstr "Izpi
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1018,7 +1029,7 @@ msgstr "Izpi
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1117,10 +1128,10 @@ msgid "Unable to open database <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, fuzzy, c-format
@@ -1321,11 +1332,11 @@ msgstr "Vhodni sloj"
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Ne morem odpreti cellfile za [%s]"
@@ -1361,10 +1372,10 @@ msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "Izhodni sloj"
@@ -1374,7 +1385,7 @@ msgstr "Izhodni sloj"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "izpi�i znak za vertikalno razmejitev med enotami"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1384,7 +1395,7 @@ msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 "Ime izhodnega binarnega sloja (uporabi out=- za standardni izhod (stdout))"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 #, fuzzy
 msgid "Do not include column names in output"
 msgstr "izpis naj ne vsebuje imen kolon"
@@ -1394,7 +1405,7 @@ msgstr "izpis naj ne vsebuje imen kolon"
 msgid "Describe query only (don't run it)"
 msgstr "le opi�i poizvedbo (ne je pognati)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 #, fuzzy
 msgid "Vertical output (instead of horizontal)"
 msgstr "vertikalni izpis (namesto horizontalnega)"
@@ -1445,6 +1456,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Vhodni sloj vsebuje linije."
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 #, fuzzy
 msgid "Ignore SQL errors and continue"
 msgstr "prezri SQL napake in nadaljuj"
@@ -1622,7 +1634,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1744,7 +1755,7 @@ msgstr "Ne morem izbrati (select) podatkov iz tabele"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1752,15 +1763,15 @@ msgstr "Ne morem izbrati (select) podatkov iz tabele"
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr ""
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1858,7 +1869,7 @@ msgstr "Vrednost, ki bo prirejena NULL vrednosti"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1908,7 +1919,7 @@ msgstr "Vektorski sloj kon
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1921,26 +1932,27 @@ msgstr "Vektorski sloj kon
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Ne morem odpreti baze podatkov %s z gonilnikom %s"
@@ -1951,7 +1963,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Tip zapisa kolone ni podprt"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2098,13 +2111,13 @@ msgstr "ne morem odpreti razpona za datoteko %s"
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2112,8 +2125,8 @@ msgstr "ne morem odpreti razpona za datoteko %s"
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2157,10 +2170,11 @@ msgstr "
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2174,13 +2188,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2189,6 +2206,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2204,7 +2222,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2224,11 +2242,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2240,27 +2258,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2278,74 +2296,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2355,6 +2376,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2370,6 +2392,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2388,6 +2411,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2396,15 +2420,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2441,7 +2466,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Izpi�i podprte formate in kon�aj"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "ne morem odpreti %s"
@@ -3043,69 +3068,70 @@ msgid "Vector map <%s> not found"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
@@ -3170,12 +3196,13 @@ msgstr "Ime sloja, ki bo uporabljen za odtenek (HUE)"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, fuzzy, c-format
 msgid "Unable to open file <%s>"
@@ -3306,7 +3333,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3472,7 +3499,7 @@ msgid "Area:"
 msgstr "Obmo�je\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3488,7 +3515,7 @@ msgstr "Zapisujem novo datoteko...\n"
 msgid "No attribute table for layer %d"
 msgstr "Ne najdem rastrskega sloja <%s>"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3501,15 +3528,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Ne morem odpreti baze podatkov %s z gonilnikom %s"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Ne morem ti garantirati (grant) privilegijev nad tabelo %s"
@@ -3532,6 +3560,7 @@ msgid ""
 msgstr "Izra�unavam sence iz DMR..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3540,6 +3569,7 @@ msgid "extract"
 msgstr "Ime izhodne datoteke"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3550,10 +3580,10 @@ msgstr "Ne najdem vhodne datoteke %s\n"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Tip objektov"
@@ -3575,12 +3605,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "Ne ustvari tabele z atributi."
@@ -3601,39 +3630,45 @@ msgstr "Ni
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3649,7 +3684,10 @@ msgstr "Ni
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3721,7 +3759,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3768,45 +3806,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3850,11 +3889,11 @@ msgstr "Tip zapisa kolone ni podprt"
 msgid "Format <%s> does not support writing"
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -4003,9 +4042,9 @@ msgstr "Ne najdem vhodne datoteke %s\n"
 msgid "Name for output file where to save current settings"
 msgstr "Ime izhodne datoteke z matriko napak in parametrom kappa"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 #, fuzzy
 msgid "List supported formats and exit"
 msgstr "Izpi�i podprte formate in kon�aj"
@@ -4028,7 +4067,7 @@ msgstr "Izpi
 msgid "Print current status in shell script style"
 msgstr "Izpi�e vrednosti v stilu lupinskega skripta"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
@@ -4036,7 +4075,7 @@ msgstr "Uporabi
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "navedena morata biti 2 sloja"
+msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4044,18 +4083,18 @@ msgid "%s= must be specified"
 msgstr "navedena morata biti 2 sloja"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Izpi�i podprte formate in kon�aj"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4066,67 +4105,68 @@ msgstr "Izpi
 msgid "network"
 msgstr "Berem dig datoteko...\n"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-#, fuzzy
-msgid "Arc type"
-msgstr "Tip objektov"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+#, fuzzy
+msgid "Arc type"
+msgstr "Tip objektov"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4138,10 +4178,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4154,50 +4195,88 @@ msgstr ""
 msgid "Cost"
 msgstr "Kontrast"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr " �tevilo kolon\n"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Ime datoteke s filtrom"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr ""
+"polje: %d\n"
+"kategorija: %d\n"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4206,10 +4285,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4225,8 +4304,8 @@ msgstr "%-5d mrtvih kategorij to
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4255,22 +4334,22 @@ msgstr "Ne morem ti garantirati (grant) privilegijev nad tabelo %s"
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4279,17 +4358,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "Ne morem vstaviti nove vrstice: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d napak med posodabljanjem\n"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4300,7 +4379,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4310,7 +4389,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "Rastrski sloj, ki ga nameravate uvoziti"
@@ -4364,17 +4443,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Izpi�i etikete kategorij"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, fuzzy, c-format
 msgid "Required parameter <%s> not set"
 msgstr "ne najdem 3Dview datoteke <%s>"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "dig_att datoteka ne obstaja."
@@ -4670,6 +4749,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Vhodni sloj vsebuje linije."
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4690,12 +4770,15 @@ msgstr "Vhodni sloj vsebuje linije."
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4859,11 +4942,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Povezava z bazo podatkov ni definirana\n"
@@ -5003,9 +5086,9 @@ msgid "Remove existing color table"
 msgstr "Ohrani obstoje�o barvno paleto"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5070,7 +5153,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5086,8 +5169,7 @@ msgstr "Uporabi
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5113,6 +5195,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Ne najdem vhodnega vektorja <%s>"
@@ -5138,7 +5221,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "ne najdem 3Dview datoteke <%s>"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5147,13 +5230,14 @@ msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, fuzzy, c-format
 msgid "3D raster map <%s> not found"
@@ -5185,8 +5269,9 @@ msgstr "Ri
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5236,7 +5321,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Uporabljam koordinate sredi��a sloja\n"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Ne morem odpreti cellfile za [%s]"
@@ -5291,6 +5376,7 @@ msgid "Point out of range"
 msgstr " �tevilo vrstic\n"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5299,15 +5385,17 @@ msgstr " 
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5402,14 +5490,15 @@ msgstr "Izdelaj vi
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "Izhodni sloj"
@@ -5610,15 +5699,15 @@ msgstr "Interpolacijska metoda, ki jo 
 msgid "Input failed"
 msgstr "Vhodni sloj"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "Vhodni sloj"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr ""
 
@@ -5663,9 +5752,9 @@ msgstr "Tip zapisa kolone ni podprt"
 msgid "Point without category"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5694,7 +5783,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Ne najdem vhodne datoteke %s\n"
+msgstr "Ustvari to�ke vzdol� vhodnih linij."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5773,9 +5862,9 @@ msgstr "Nisem uspel odpreti vhodne datoteke."
 msgid "3D raster map <%s> created"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5786,86 +5875,128 @@ msgstr "Ne morem vstaviti nove vrstice: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Binarna rastrska datoteka, ki jo nameravate uvoziti"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Rastrski sloj za�etnih to�k"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr ""
+"\n"
+"\n"
+" �tevilo to�k: %d\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "Ime rastrskega sloja"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr ""
+"\n"
+"\n"
+" �tevilo to�k: %d\n"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Rastrski sloj za�etnih to�k"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Binarna rastrska datoteka, ki jo nameravate uvoziti"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5885,18 +6016,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Ime izhodne datoteke"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "ime tabele"
@@ -5931,9 +6064,9 @@ msgstr "Ime rastrskega sloja, ki vsebuje podatke o stro
 msgid "Name of column containing z coordinate"
 msgstr "Ime rastrskega sloja, ki vsebuje podatke o stro�ku premikanja"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "Prepi�i izhod"
@@ -5983,7 +6116,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Ne morem odpreti baze podatkov %s"
@@ -6002,7 +6135,7 @@ msgid "x/y/z column must be integer or double"
 msgstr ""
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -6030,7 +6163,89 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d to�k je bilo zapisanih na izhodno datoteko\n"
 msgstr[1] "%d to�k je bilo zapisanih na izhodno datoteko\n"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+#, fuzzy
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Transformira projekcijo rastrskega sloja iz ene \"location\" v trenutno "
+"\"location\""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+#, fuzzy
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "ne morem odpreti %s"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+#, fuzzy
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "ne morem odpreti %s"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Ne najdem vhodne datoteke %s\n"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+#, fuzzy
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"Transformira projekcijo rastrskega sloja iz ene \"location\" v trenutno "
+"\"location\""
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "ne morem odpreti %s"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "neveljavna regija: %s"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Nepoznan tip"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6053,7 +6268,7 @@ msgstr[1] "%d to
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6062,7 +6277,7 @@ msgstr[1] "%d to
 msgid "statistics"
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6707,8 +6922,8 @@ msgstr "Tip zapisa kolone ni podprt"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Ime izhodnega rastrskega sloja"
@@ -6769,13 +6984,13 @@ msgid "Breaking lines..."
 msgstr "Zapisujem novo datoteko...\n"
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "Zapisujem novo datoteko...\n"
@@ -6785,12 +7000,12 @@ msgstr "Zapisujem novo datoteko...\n"
 msgid "Merging lines..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 #, fuzzy
 msgid "Attaching islands..."
 msgstr "Pripajam kategorije...\n"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Ne morem izra�unati centroida obmo�ja."
 
@@ -6806,13 +7021,14 @@ msgstr "Zapisujem novo datoteko...\n"
 msgid "Attribute not found"
 msgstr "Ne najdem rastrskega sloja <%s>"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "Zapi�i vmesne to�ke v liniji."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Ne morem vstaviti nove vrstice: %s"
@@ -6890,126 +7106,128 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 msgid "sampling"
 msgstr ""
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Ime izhodnega vektorskega to�kovnega sloja"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "�tevilo �eljenih to�k"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Nisem uspel odpreti vhodne datoteke."
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr ""
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Ime rastrskega sloja, ki vsebuje podatke o stro�ku premikanja"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Tip barvne palete"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 #, fuzzy
 msgid "Create 3D output"
 msgstr "Prepi�i izhod"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Izra�unavam sence iz DMR..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "�tevilo �eljenih to�k"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d to�k je bilo zapisanih na izhodno datoteko\n"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Ime novega sloja"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "Uporabi trenutno regijo"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "Uporabi trenutno regijo"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "Zapisujem novo datoteko...\n"
@@ -7056,7 +7274,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Ime obstoje�ega rastrskega sloja(ev) za poizvedovanje"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
@@ -7070,80 +7288,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "sistemske tabele namesto uporabni�kih tabel"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
+#: ../vector/v.what.rast/main.c:170
 #, fuzzy, c-format
-msgid "Column <%s> not found"
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Tip zapisa kolone ni podprt"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Rekodira rastrske sloje"
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Ne morem najti vhodne datoteke <%s>\n"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "Uporabi trenutno regijo"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, fuzzy, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d kategorij nalo�enih iz vektorja\n"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d dvojnih kategorij v vektorju\n"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, fuzzy, c-format
 msgid "%d categories loaded from table"
 msgstr "%d kategorij nalo�enih iz tabele\n"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, fuzzy, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d kategorij iz vektorja manjka v tabeli\n"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, fuzzy, c-format
 msgid "%d update errors"
 msgstr "%d napak med posodabljanjem\n"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d enot je bilo posodobljenih\n"
@@ -7151,14 +7367,14 @@ msgstr "%d enot je bilo posodobljenih\n"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7246,7 +7462,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7302,6 +7518,150 @@ msgstr "Ne najdem vhodne datoteke %s\n"
 msgid "%d records updated"
 msgstr "%d enot je bilo posodobljenih\n"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Povezava z bazo podatkov ni definirana\n"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Tip zapisa kolone ni podprt"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Za vrstico (cat = %d) ni zapisa (record)<"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Za vrstico (cat = %d) ni zapisa (record)<"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "ne najdem regije <%s>"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Izvozi GRASS-ov rastrski sloj v binarni \"array\""
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%-5d kategorij linij prebranih\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Ne najdem vhodnega vektorja <%s>"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "ne najdem regije <%s>"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr " �tevilo kolon\n"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Dolo�ena ni bila nobena vhodna datoteka."
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Uporabi trenutno regijo"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Ime datoteke s filtrom"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7338,6 +7698,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, fuzzy, c-format
+msgid "Column <%s> not found"
+msgstr "ne najdem regije <%s>"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7368,47 +7734,54 @@ msgstr "Ne morem odpreti cellfile za [%s]"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d to�k je bilo zapisanih na izhodno datoteko\n"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "ne morem odpreti razpona za datoteko %s"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7475,15 +7848,17 @@ msgstr "Rastrski sloj za povr
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Izpi�e osnovne statistike za rastrske sloje"
@@ -7524,7 +7899,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Nepoznan tip"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "Ri�em ..."
@@ -7544,12 +7919,17 @@ msgstr "Dolo
 msgid "Get area %d failed"
 msgstr "Ime izhodne datoteke"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Nisem uspel odpreti vhodne datoteke."
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 #, fuzzy
 msgid "Area centroid without category"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
@@ -7581,12 +7961,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr " �tevilo kolon\n"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "ne najdem regije <%s>"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7768,48 +8142,54 @@ msgstr "Tip objektov"
 msgid "Incompatible types"
 msgstr "Nepoznan tip"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "Ime sloja, ki bo uporabljen za odtenek (HUE)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr ""
 "Ime izhodnega binarnega sloja (uporabi out=- za standardni izhod (stdout))"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr ""
@@ -7817,95 +8197,95 @@ msgstr ""
 "\n"
 " �tevilo to�k: %d\n"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "Ime rastrskega sloja"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Za vrstico (cat = %d) ni zapisa (record)<"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Destinacijo je nemogo�e dose�i\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr ""
@@ -7913,17 +8293,17 @@ msgstr ""
 "\n"
 " �tevilo to�k: %d\n"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Izra�unavam sence iz DMR..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "Ne morem ustvariti tabele: %s"
@@ -8134,14 +8514,15 @@ msgstr "%-5d mrtvih kategorij to
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Ime izhodne datoteke"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Ascii rastrski sloj, ki ga nameravate uvoziti"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8165,9 +8546,13 @@ msgstr "Ascii rastrski sloj, ki ga nameravate uvoziti"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8232,7 +8617,7 @@ msgstr "izpi
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "�tevilo decimalk (le za \"floating point\" podatke)"
 
@@ -8297,7 +8682,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8402,9 +8787,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "ne morem odpreti <%s>"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "ne morem odpreti <%s>"
@@ -8998,7 +9384,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr ""
@@ -9023,7 +9409,7 @@ msgstr "\"Mapset\" vhodnega rastrskega sloja"
 msgid "Resolving conflicts..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Zapisujem novo datoteko...\n"
@@ -9052,207 +9438,211 @@ msgid "Performs vector based generalization."
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "Najve�ja naklju�na vrednost"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "Zglajeni koti"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "Zglajeni koti"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "Zglajeni koti"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Ne morem kopirati tabele"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "Nepoznan tip: %c"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Ri�em ..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9333,8 +9723,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 #, fuzzy
 msgid "Text color"
 msgstr " privzeta barva\n"
@@ -9348,13 +9738,13 @@ msgstr " privzeta barva\n"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9554,14 +9944,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Ne morem izra�unati centroida obmo�ja."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Ne morem izra�unati centroida obmo�ja."
@@ -9614,14 +10004,6 @@ msgstr "Ri
 msgid "Constructing 3D hull..."
 msgstr "Ri�em ..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9703,7 +10085,9 @@ msgstr "
 msgid "Bicubic interpolation"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10117,6 +10501,193 @@ msgstr "Ne najdem vhodne datoteke %s\n"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Ni�esar nisem na�el.\n"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "Ime rastrskega sloja"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "Ne najdem rastrskega sloja <%s>"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Ime datoteke z rezultatom klasifikacije"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Ime izhodnega vektorskega sloja"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Najve�ja razdalja med to�kami in enotami karte."
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Korelacija"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "Ime izhodnega vektorskega to�kovnega sloja"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Velikost okolice (neighbourhood)"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Ri�em ..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Uporabi trenutno regijo"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "Velikost okolice (neighbourhood)"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Najve�ja razdalja med to�kami in enotami karte."
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Binarna rastrska datoteka, ki jo nameravate uvoziti"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Standardni odklon"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Najve�ja razdalja med to�kami in enotami karte."
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Ri�em ..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Uporabi trenutno regijo"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Berem dig datoteko...\n"
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Ni�esar nisem na�el.\n"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "Ne najdem rastrskega sloja <%s>"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "Ne najdem rastrskega sloja <%s>"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10261,26 +10832,26 @@ msgstr "ne morem odpreti <%s>"
 msgid "Impossible to write to aux table"
 msgstr "ne morem odpreti <%s>"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Varianca"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "ne morem odpreti vektorske datoteke <%s> v <%s>"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d to�k je bilo zapisanih na izhodno datoteko\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "%-5d linij prebranih in zapisanih na izhod\n"
@@ -10319,7 +10890,7 @@ msgstr "Ime vhodnega rastrskega sloja"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10332,14 +10903,14 @@ msgstr "Ime vhodnega rastrskega sloja"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10369,49 +10940,132 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Vhodni rastrski sloj"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "EASTING in NORTHING koordinate za�etne to�ke"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "Nepoznan tip"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Vektorski sloj kon�nih to�k"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr " nv barva\n"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "Nepoznan tip"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "ne morem odpreti <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Ne morem vnesti v tabelo: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Rastrski sloj kateremu naj se regija prilagodi"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Ime izhodnega vektorskega sloja"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Ime izhodnega vektorskega sloja"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Ne morem odpreti baze podatkov %s z gonilnikom %s"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "ne morem odpreti <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "ne morem odpreti <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10547,7 +11201,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d kategorij nalo�enih iz tabele\n"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "Ne morem izra�unati centroida obmo�ja."
@@ -10669,7 +11323,7 @@ msgstr "Povezava z bazo podatkov ni definirana\n"
 msgid "Key column type is not integer"
 msgstr "Tip zapisa kolone ni podprt"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Ne morem izbrati (select) podatkov iz tabele"
@@ -11423,7 +12077,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "Izpi�i v \"integer\" obliki"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11686,8 +12340,8 @@ msgstr "\"Location\" vhodnega sloja"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Ne najdem vhodne datoteke %s\n"
@@ -11697,7 +12351,7 @@ msgstr "Ne najdem vhodne datoteke %s\n"
 msgid "Mapset containing input vector map"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Uporabi nastavitve trenutne regije"
@@ -11707,7 +12361,7 @@ msgstr "Uporabi nastavitve trenutne regije"
 msgid "Name of input vector map to re-project"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Pot do GRASS baze podatkov (izpi�e se ob zagonu programa)"
 
@@ -11722,8 +12376,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "Obmo�je\n"
@@ -11756,17 +12410,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Vhodni rastrski sloj"
@@ -12113,355 +12769,570 @@ msgstr ""
 "tabela: %s\n"
 "kolona z identifikatorjem: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "Ime izhodnega vektorskega sloja"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Rastrski sloj, ki ga nameravate uvoziti"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "Ne ustvari tabele z atributi."
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr " �tevilo kolon\n"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr " �tevilo kolon\n"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr ""
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "Tip zapisa kolone ni podprt"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr " �tevilo kolon\n"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 #, fuzzy
 msgid "Key column not found"
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "Ime izhodnega sloja"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "ne morem odpreti <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Berem dig_att datoteko...\n"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d enot je bilo posodobljenih\n"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, fuzzy, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Ne morem odpreti baze podatkov %s"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 #, fuzzy
 msgid "Cannot fetch row"
 msgstr "Ne morem izpisati baz podatkov."
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 #, fuzzy
 msgid "Unknown column type"
 msgstr "Nepoznan tip"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, fuzzy, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Ne morem vstaviti nove vrstice: %s"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+#, fuzzy
+msgid "Over-riding projection check"
+msgstr "Ne najdem vhodne datoteke %s\n"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Vhodni sloj"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
+msgid "Layer number to store return information as category"
+msgstr "Ne ustvari tabele z atributi."
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
+
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Ime nove lokacije (location), ki bo ustvarjena"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Uvo�ene bodo vrednosti z zapisom \"integer\""
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Uvo�ene bodo vrednosti z zapisom \"integer\""
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Ime izhodnega vektorskega to�kovnega sloja"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
+msgid "Layer number or name for mask option"
+msgstr "Ime izhodnega vektorskega sloja"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Uvo�ene bodo vrednosti z zapisom \"integer\""
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Korelacija"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Uvo�ene bodo vrednosti z zapisom \"integer\""
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Ime nove lokacije (location), ki bo ustvarjena"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "Uporabi trenutno regijo"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Vhodni sloj vsebuje linije."
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Raz�iri obseg lokacije glede na nov \"dataset\""
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Naslov izhodnega rastrskega sloja"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "\"Location\" vhodnega sloja"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Nepoznan tip"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Ne ustvari tabele z atributi."
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Ne morem ustvariti tabele: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "ne morem odpreti %s"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Ime izhodnega vektorskega sloja"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-#, fuzzy
-msgid "Over-riding projection check"
-msgstr "Ne najdem vhodne datoteke %s\n"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-#, fuzzy
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Transformira projekcijo rastrskega sloja iz ene \"location\" v trenutno "
-"\"location\""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-#, fuzzy
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "ne morem odpreti %s"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-#, fuzzy
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "ne morem odpreti %s"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "nalo�enih je bilo %d to�k\n"
+
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "Y koordinata oziroma geografska �irina"
+
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "nalo�enih je bilo %d to�k\n"
+
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "nalo�enih je bilo %d to�k\n"
+
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "nalo�enih je bilo %d to�k\n"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "nalo�enih je bilo %d to�k\n"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-#, fuzzy
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"Transformira projekcijo rastrskega sloja iz ene \"location\" v trenutno "
-"\"location\""
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Ime izhodnega vektorskega sloja"
+msgid "%lu points imported"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Ne morem odpreti baze podatkov %s z gonilnikom %s"
+msgid "%lu input points were not valid"
+msgstr "Y koordinata oziroma geografska �irina"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Zapisujem novo datoteko...\n"
+msgid "%lu input points were outside of the selected area"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, fuzzy, c-format
-msgid "%d input points were not valid"
-msgstr "Y koordinata oziroma geografska �irina"
+msgid "%lu input points were filtered out by return number"
+msgstr "nalo�enih je bilo %d to�k\n"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "nalo�enih je bilo %d to�k\n"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "nalo�enih je bilo %d to�k\n"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Koordinate poizvedovanja"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Ne morem odpreti baze podatkov %s z gonilnikom %s"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12469,22 +13340,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "Ime rastrskega sloja"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Ne morem opisati tabele"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "dig_att datoteka ne obstaja."
@@ -12494,12 +13365,12 @@ msgstr "dig_att datoteka ne obstaja."
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Ime izhodne datoteke"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Rastrski sloj, ki ga nameravate uvoziti"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12507,25 +13378,29 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Naslov izhodnega rastrskega sloja"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12573,7 +13448,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "neveljavna regija: %s"
+msgstr " �tevilo kolon\n"
 
 #: ../vector/v.delaunay/main.c:88
 #, fuzzy
@@ -12715,147 +13590,147 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Izpi�i etikete kategorij"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Izpi�i etikete kategorij"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "navedena morata biti 2 sloja"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Ne morem izbrati (select) podatkov iz tabele"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Vhodni rastrski sloj"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "Gradim prostorski indeks ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "Ri�em ..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Izra�unavam sence iz DMR..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Izra�unavam sence iz DMR..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Ne morem izra�unati centroida obmo�ja."
@@ -13126,23 +14001,27 @@ msgstr "Ime izhodne datoteke"
 msgid "%d features written to '%s'."
 msgstr "%d to�k je bilo zapisanih na izhodno datoteko\n"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "ne morem odpreti %s"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr ""
@@ -13150,15 +14029,20 @@ msgstr ""
 "\n"
 " �tevilo to�k: %d\n"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Izra�unavam sence iz DMR..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Izra�unavam sence iz DMR..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13213,7 +14097,7 @@ msgstr "
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13893,7 +14777,7 @@ msgstr "Iz tabele je izbranih %d zapisov (records)"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14199,49 +15083,58 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "Izpi�i etikete kategorij"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 #, fuzzy
 msgid "Output vertical record separator"
 msgstr "izpi�i znak za vertikalno razmejitev med enotami"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Berem dig datoteko...\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "ne morem odpreti vektorske datoteke <%s> v <%s>"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "Ne morem odpreti baze podatkov %s"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Ne morem najti vhodne datoteke <%s>\n"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Izpi�i etikete kategorij"
@@ -14286,46 +15179,50 @@ msgstr "Najve
 msgid "Add new vertices, but do not split"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Zapi�i vmesne to�ke v liniji."
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, c-format
 msgid "Length must be positive but is %g"
 msgstr ""
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Nepoznan tip"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "\"Location\" vhodnega sloja"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s:linija %d:%s\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s:linija %d:%s\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "Vrednost, ki bo prirejena NULL vrednosti"
@@ -14446,7 +15343,9 @@ msgstr "Anizotropni kot (v stopinjah)"
 msgid "Number of vertex points per grid cell"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Tip objektov"
@@ -14550,10 +15449,13 @@ msgid "Writing out vector columns..."
 msgstr "Zapisujem novo datoteko...\n"
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14565,6 +15467,7 @@ msgstr "Ime izhodne datoteke"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14727,8 +15630,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 #, fuzzy
 msgid "Font name"
 msgstr "ime tabele"
@@ -14803,6 +15707,130 @@ msgstr "Ri
 msgid "Counting points quadrats..."
 msgstr "Ri�em ..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Ime datoteke z rezultatom klasifikacije"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Ni�esar nisem na�el.\n"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Uvo�ene bodo vrednosti z zapisom \"integer\""
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Uvo�ene bodo vrednosti z zapisom \"integer\""
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Najve�ja naklju�na vrednost"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Standardni odklon"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14817,29 +15845,29 @@ msgstr "Ime rastrskega sloja"
 msgid "Target location <%s> not found"
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "ne najdem 3Dview datoteke <%s>"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "Ne najdem rastrskega sloja <%s>"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15180,11 +16208,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "Povezava z bazo podatkov ni definirana\n"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Tip zapisa kolone ni podprt"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -15274,321 +16297,324 @@ msgid_plural "%d records updated."
 msgstr[0] "%d enot je bilo posodobljenih\n"
 msgstr[1] "%d enot je bilo posodobljenih\n"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "ime baze podatkov"
+msgid "Name of OGR datasource to be imported"
+msgstr "Rastrski sloj, ki ga nameravate uvoziti"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Vhodni sloj: najmanj�a velikost zunanjega pore�ja"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "Naslov izhodnega rastrskega sloja"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Ime sloja, ki bo uporabljen za odtenek (HUE)"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Ne morem izra�unati centroida obmo�ja."
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Ri�em ..."
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Ne najdem vhodne datoteke %s\n"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr " �tevilo kolon\n"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "%-5d kategorij to�k prebranih\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Izpi�i podprte formate in kon�aj"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Izpi�i v \"integer\" obliki"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "\"Location\" vhodnega sloja"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Izpi�i trenutne parametre povezave in kon�aj"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Ime rastrskega sloja"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Vektorski sloj kon�nih to�k"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Tip zapisa kolone ni podprt"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "ne najdem regije <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Tip zapisa kolone ni podprt"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Ri�em ..."
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Izra�unavam sence iz DMR..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15596,116 +16622,116 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, c-format
 msgid "%d input polygons\n"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "%-5d mrtvih kategorij to�k presko�enih\n"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Ri�em ..."
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Vhodni sloj"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15926,6 +16952,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "Povezava z bazo podatkov ni definirana\n"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "ne najdem 3Dview datoteke <%s>"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16087,19 +17118,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr "Berem dig datoteko...\n"
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "Ne morem izpisati baz podatkov."
@@ -16282,14 +17313,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Ime izhodnega vektorskega sloja"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists"
 msgstr "dig_att datoteka ne obstaja."
@@ -16418,14 +17449,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Ustvari to�ke vzdol� vhodnih linij."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "Ne morem najti vhodne datoteke <%s>\n"
 msgstr[1] "Ne morem najti vhodne datoteke <%s>\n"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16927,19 +17963,24 @@ msgstr "neveljavna regija: %s"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16953,6 +17994,7 @@ msgstr "neveljavna regija: %s"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16965,7 +18007,7 @@ msgstr "neveljavna regija: %s"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17129,6 +18171,7 @@ msgid "Unable to map image file"
 msgstr "Ime izhodne datoteke"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17146,14 +18189,14 @@ msgstr "Ime izhodne datoteke"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17192,6 +18235,54 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Izbere pisavo v kateri bo tekst zapisan na grafi�nem monitorju"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+#, fuzzy
+msgid "monitors"
+msgstr "Spisek vrednosti plastnic"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "dig_att datoteka ne obstaja."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Izpi�i trenutne parametre povezave in kon�aj"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -17209,7 +18300,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17222,7 +18313,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17294,21 +18385,26 @@ msgstr ""
 msgid ""
 "Uploads space time raster dataset values at positions of vector points to "
 "the table."
-msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
+msgstr "Preoblikuje rastrski sloj v vektorskega."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17323,6 +18419,7 @@ msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17418,6 +18515,93 @@ msgstr "Ime obstoje
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Preoblikuje rastrski sloj v vektorskega."
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Ime novega rastrskega sloja"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Vhodni rastrski sloj"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17564,7 +18748,7 @@ msgstr "Ne morem odpreti baze podatkov %s"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17578,8 +18762,8 @@ msgid "rename"
 msgstr "ime tabele"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17589,9 +18773,9 @@ msgid "input"
 msgstr "Vhodni sloj"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17607,6 +18791,81 @@ msgstr "tiho"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Ne najdem vhodne datoteke %s\n"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Izdela GRASS-ov binarni vektorski sloj plastnic iz GRASS-ovega rastrskega\n"
+" sloja."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Kontrast"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Razmak med sosednjima plastnicama"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+#, fuzzy
+msgid "List of contour levels"
+msgstr "Spisek vrednosti plastnic"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Najmanj�a vrednost plastnice"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Najve�ja vrednost plastnice"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+"Najmanj�e �tevilo to�k, ki bodo gradile linijo plastnice (od 0 do neskon�no)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Vhodni rastrski sloj"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Ne ustvari tabele z atributi."
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17615,7 +18874,7 @@ msgstr "Izpi
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17671,8 +18930,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17786,74 +19046,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Ime novega rastrskega sloja"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17888,47 +19117,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Ime novega rastrskega sloja."
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Vhodni rastrski sloj"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18031,8 +19243,8 @@ msgstr "Faktor mno
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Ime izhodne datoteke"
+msgid "Name for output image (or text file for -t)"
+msgstr "Ime izhodne datoteke, ki bo vsebovala poro�ilo"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18049,6 +19261,54 @@ msgstr "Uporabljam koordinate sredi
 msgid "Use gnuplot for display"
 msgstr "Ime izhodnega rastrskega sloja"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Naslov izhodnega rastrskega sloja"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Spisek vrednosti deljenih z vejico: npr. 1.4,3.8,13"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Ime izhodne datoteke, ki bo vsebovala poro�ilo"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Ne morem odpreti baze podatkov %s"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18081,32 +19341,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Raz�iri obseg lokacije glede na nov \"dataset\""
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "\"Location\" vhodnega sloja"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18304,6 +19542,20 @@ msgstr "
 msgid "Output field separator"
 msgstr "izpi�i znak razmejitve med polji"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Preoblikuje rastrski sloj v vektorskega."
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 #, fuzzy
 msgid "Displays a raster map and its legend on a graphics window"
@@ -18405,8 +19657,15 @@ msgstr "Ne morem odpreti baze podatkov %s"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Ime novega rastrskega sloja."
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Ime obstoje�ega rastrskega sloja"
@@ -18416,7 +19675,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18425,15 +19684,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Ime novega rastrskega sloja."
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18479,7 +19738,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Izbere pisavo v kateri bo tekst zapisan na grafi�nem monitorju"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Ime izhodne datoteke"
 
@@ -18560,16 +19819,27 @@ msgstr "Vhodni rastrski sloj"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Naslov izhodnega rastrskega sloja"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Preoblikuje rastrski sloj v vektorskega."
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18646,12 +19916,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18781,17 +20058,15 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.redraw_to_translate.c:1
 #, fuzzy
 msgid "Redraws the content of currently selected monitor."
 msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-#, fuzzy
-msgid "monitors"
-msgstr "Spisek vrednosti plastnic"
-
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
 msgid ""
 "Create a 3D raster map from an assemblage of many coordinates using "
@@ -18799,12 +20074,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "Izpi�e vrednosti v stilu lupinskega skripta"
@@ -18820,7 +20095,7 @@ msgid "ASCII file containing input data"
 msgstr "Ne najdem vhodne datoteke %s\n"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "Izpi�e osnovne statistike za rastrske sloje"
@@ -18829,14 +20104,14 @@ msgstr "Izpi
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 #, fuzzy
 msgid "Storage type for resultant raster map"
 msgstr "Tip zapisa izhodnega rastrskega sloja"
@@ -18876,18 +20151,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Uporabljam koordinate sredi��a sloja\n"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Dele� sloja, ki ga ohranjati v spominu ra�unalnika"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "Enote za naklon"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18927,19 +20202,15 @@ msgid ""
 "on the fly."
 msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Rastrski sloj, ki ga nameravate uvoziti"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Ime izhodnega rastrskega sloja problemati�nih obmo�ij"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19039,7 +20310,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19127,24 +20398,18 @@ msgstr "Izpi
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Ime rastrskega sloja"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Vhodni rastrski sloj"
@@ -19261,17 +20526,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19279,10 +20548,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19397,78 +20662,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Ime nove lokacije (location), ki bo ustvarjena"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Izpi�i podprte formate in kon�aj"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Izpi�i podprte formate in kon�aj"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Izpi�i podprte formate in kon�aj"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "lokacija baze podatkov"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "sistemske tabele namesto uporabni�kih tabel"
@@ -19585,10 +20866,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19644,6 +20921,59 @@ msgstr ""
 msgid "Test name"
 msgstr "ime tabele"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Preoblikuje rastrski sloj v vektorskega."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+#, fuzzy
+msgid "Smooth corners of area features"
+msgstr "Zglajeni koti"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Uporabljam koordinate sredi��a sloja\n"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr "Izpi�i podprte formate in kon�aj"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Rastrski sloj, ki ga nameravate uvoziti"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Za kategorije uporabi rastrske vrednosti namesto zaporedja edinstvenih "
+"�tevil (le za rastrski tip CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -19711,6 +21041,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Tip objektov"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Izpi�i podprte formate in kon�aj"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19888,20 +21229,26 @@ msgid "Description of the space time dataset"
 msgstr "Ime novega rastrskega sloja."
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Ime novega rastrskega sloja."
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19945,12 +21292,12 @@ msgstr "
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 msgid "Landsat"
 msgstr ""
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20033,7 +21380,7 @@ msgstr "Izpi
 msgid "Neighborhood size"
 msgstr "Velikost okolice (neighbourhood)"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
@@ -20136,24 +21483,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Resolucija izhodnega sloja"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Naslov izhodnega rastrskega sloja"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Ne odre�i uvo�ene karte po mejah regije"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Y koordinata oziroma geografska �irina"
@@ -20227,17 +21591,37 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "ne najdem regije <%s>"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "ne najdem regije <%s>"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
@@ -20328,6 +21712,7 @@ msgstr "Ime rastrskega sloja"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20343,10 +21728,15 @@ msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "Ime rastrskega sloja"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20463,28 +21853,23 @@ msgstr ""
 "Izra�una univariatne statisti�ne parametre za ne NULL celice rastrskega "
 "sloja."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "Rastrski sloj, ki ga �elite rekodirati"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Ne morem odpreti baze podatkov %s"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Preoblikuje rastrski sloj v vektorskega."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Raz�irjaj NULL vrednosti"
 
@@ -20525,7 +21910,7 @@ msgstr ""
 "celico"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20540,7 +21925,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Polmer bufferja"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metri�ni"
 
@@ -20559,12 +21944,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Preoblikuje rastrski sloj v vektorskega."
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20590,7 +21975,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "Izdela rastrski sloj, ki prikazuje razvodnice in podpovodja"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20619,6 +22004,16 @@ msgstr "Zglajeni koti"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Izdela rastrski sloj, ki prikazuje razvodnice in podpovodja"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "ne morem odpreti %s"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20629,20 +22024,11 @@ msgstr "Ime vhodnega rastrskega sloja"
 msgid "Vector map to which to join other table"
 msgstr "Ne ustvari tabele z atributi."
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Ne ustvari tabele z atributi."
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "ne najdem regije <%s>"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20671,17 +22057,17 @@ msgstr "
 msgid "Imports space time raster dataset."
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20761,14 +22147,17 @@ msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20800,12 +22189,12 @@ msgstr "Ne morem izra
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Ne morem odpreti baze podatkov %s"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 #, fuzzy
 msgid "Error while reading history file"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20813,8 +22202,8 @@ msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "Ne najdem vhodne datoteke %s\n"
@@ -20868,6 +22257,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "Ne morem odpreti cellfile za [%s]"
@@ -21019,9 +22409,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21048,7 +22439,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
@@ -21113,6 +22507,141 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Ime izhodnega vektorskega sloja"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Izra�unavam sence iz DMR..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Ime rastrskega sloja"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Ne najdem vhodnega vektorja <%s>"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Izra�unavam sence iz DMR..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Ne ustvari tabele z atributi."
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Ime vhodnega rastrskega sloja"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Ime rastrskega sloja, ki bo vseboval rezultate"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s:linija %d:%s\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "Interpolacijska metoda, ki jo �elite uporabiti"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Dolo�ena ni bila nobena vhodna datoteka."
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Vpi�i ime baze podatkov"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Ne morem opisati tabele"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Ime vhodnega rastrskega sloja"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21242,11 +22771,11 @@ msgstr "ne morem odpreti <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "Ime rastrskega sloja iz katerega kopirati barvno paleto"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr ""
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -21271,7 +22800,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "Ime izhodne datoteke"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "Ime izhodne datoteke"
@@ -21280,6 +22809,82 @@ msgstr "Ime izhodne datoteke"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "Ime rastrskega sloja"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "Ustvari rastrski sloj iz ascii poligon/linija datotek v trenutni mapi."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Rastrski sloj za�etnih to�k"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Ime rastrskega sloja iz katerega kopirati barvno paleto"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Uporabljam koordinate sredi��a sloja\n"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Vrednost, ki bo prirejena NULL vrednosti"
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -21334,13 +22939,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Novi razpon kategorij"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "ne morem prebrati regije <%s> v <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr ""
@@ -21398,7 +23003,7 @@ msgstr "Ime vhodnega rastrskega sloja"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Nisem uspel odpreti vhodne datoteke."
@@ -21777,7 +23382,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, fuzzy, c-format
 msgid "Unknown method <%s>"
@@ -21787,7 +23392,7 @@ msgstr "Nepoznan tip: %c"
 msgid "Aggregate operation"
 msgstr "Agregacijska operacija"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21824,6 +23429,37 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Ne morem odpreti baze podatkov %s"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Varianca"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "Kombinira rde�i, zeleni in modri sloj v enotni kompozitni sloj."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Ne morem izra�unati centroida obmo�ja."
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "izhodni rastrski sloj"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22171,38 +23807,38 @@ msgstr "Izpi
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22496,13 +24132,13 @@ msgid "Unknown operation '%s'"
 msgstr "Nepoznan tip"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "ne morem odpreti %s"
@@ -22574,8 +24210,8 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "dig_att datoteka ne obstaja."
+msgid "<%s> already exists. File not copied."
+msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22688,8 +24324,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -22953,9 +24589,9 @@ msgstr "Rastrski sloj, ki ga nameravate uvoziti"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Ime rastrskega sloja"
@@ -22970,15 +24606,15 @@ msgstr "Znak za separator na izhodu (privzet: tab)"
 msgid "File name exclusion pattern (default: none)"
 msgstr "Znak za separator na izhodu (privzet: tab)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -22988,7 +24624,7 @@ msgid "Remove base raster maps"
 msgstr "Pokrovni rastrski sloj"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Ne morem odpreti cellfile za [%s]"
@@ -23034,80 +24670,70 @@ msgstr "Ime izhodnega rastrskega sloja"
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr "Znak za separator na izhodu (privzet: tab)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr "Znak za separator na izhodu (privzet: tab)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Izpi�i trenutne parametre povezave in kon�aj"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Izpi�i trenutne parametre povezave in kon�aj"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Dolo�i trenutno regijo iz imenovane regije (named region)"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "Ne izpi�i vzglavja"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Ne morem odpreti baze podatkov %s"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "ne morem odpreti vektorske datoteke <%s> v <%s>"
@@ -23322,57 +24948,57 @@ msgstr "ne morem posodobiti meja"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "neveljavna regija: %s"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "ne morem posodobiti meja"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23596,38 +25222,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "ne najdem 3Dview datoteke <%s>"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Rastrski sloj, ki ga nameravate uvoziti"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23936,11 +25583,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Ime obstoje�ega rastrskega sloja."
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "Ime izhodnega vektorskega to�kovnega sloja"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24111,7 +25753,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr ""
 
@@ -24534,7 +26176,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Ime izhodnega sloja"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24730,159 +26372,159 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "izhodni rastrski sloj"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr ""
 "Transformira projekcijo rastrskega sloja iz ene \"location\" v trenutno "
 "\"location\""
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "\"Location\" vhodnega sloja"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Naslov izhodnega rastrskega sloja"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Resolucija izhodnega sloja"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Izpi�i rastrske sloje v vhodni \"location\" in kon�aj"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Izpi�e vrednosti v stilu lupinskega skripta"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "Vhodni sloj: lokacije pravih depresij"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "ne najdem 3Dview datoteke <%s>"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "\"Location\" vhodnega sloja"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "\"Location\" vhodnega sloja"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "ne najdem 3Dview datoteke <%s>"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "Vhodni sloj"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, fuzzy, c-format
 msgid "Cols: %d (%d)"
 msgstr "Napaka: %s\n"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, fuzzy, c-format
 msgid "Rows: %d (%d)"
 msgstr "Napaka: %s\n"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr "Vozel %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr "Vozel %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr "Vozel %d: %f %f\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 #, fuzzy
 msgid "Output:"
 msgstr "Izhodni sloj"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "Ri�em ..."
@@ -24940,12 +26582,6 @@ msgstr "Napaka pri branju dbmscap datoteke\n"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Naslov izhodnega rastrskega sloja"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr ""
@@ -24973,22 +26609,22 @@ msgstr "Ime datoteke s filtrom"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr ""
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, fuzzy, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr ""
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 #, fuzzy
 msgid "Done."
 msgstr "Narejeno.\n"
@@ -25755,7 +27391,7 @@ msgstr "navedena morata biti 2 sloja"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "ne morem odpreti %s"
@@ -25977,8 +27613,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "ne morem prebrati regije <%s> v <%s>"
@@ -26065,12 +27701,12 @@ msgstr "ne morem odpreti <%s>"
 msgid "Can't get cell header"
 msgstr "Ne morem ustvariti indeksa"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -26262,17 +27898,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "�tevilo ponovitev filtracije"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr ""
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26297,7 +27929,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "neveljavna regija: %s"
@@ -26307,15 +27939,15 @@ msgstr "neveljavna regija: %s"
 msgid "Invalid vrange"
 msgstr "neveljavna regija: %s"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26337,7 +27969,7 @@ msgid "Reading input data..."
 msgstr "Berem dig datoteko...\n"
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -26380,17 +28012,17 @@ msgstr "Ne morem odpreti cellfile za [%s]"
 msgid "Writing to output raster map..."
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "Uporabi trenutno regijo"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 #, fuzzy
 msgid "Scanning data ..."
 msgstr "Ri�em ..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -26549,11 +28181,6 @@ msgstr "Ime izhodnega rastrskega sloja"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Tip objektov"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -27108,104 +28735,109 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Ime rastrskega sloja iz katerega kopirati barvno paleto"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Ime izhodnega vektorskega sloja"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "ne morem odpreti razpona za datoteko %s"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "ne morem odpreti razpona za datoteko %s"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "Rastrski sloj za�etnih to�k"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "ne morem odpreti razpona za datoteko %s"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "izhodni rastrski sloj"
@@ -27544,7 +29176,7 @@ msgstr "Ne najdem vhodne datoteke %s\n"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Tip objektov"
+msgstr "Naslov izhodnega rastrskega sloja"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27629,91 +29261,179 @@ msgstr "Ri
 msgid "File <%s> created"
 msgstr "ne morem odpreti %s"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr "Ustvari rastrski sloj iz ascii poligon/linija datotek v trenutni mapi."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
+
+#: ../raster/r.in.lidar/main.c:175
+msgid "Filter range for intensity values (min,max)"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Izpi�e osnovne statistike za rastrske sloje"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Naslov izhodnega rastrskega sloja"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Dolo�i regijo tako, da bo enaka temu rastrskemu sloju"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Nepoznan tip"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "neveljavna regija: %s"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "ne morem odpreti %s"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Ri�em ..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Ne najdem vhodne datoteke %s\n"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "Uporabi trenutno regijo"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Ne morem odpreti cellfile za [%s]"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 "Izdela rastrski sloj z s sti�nimi (contiguous) obmo�ji pove�animi za eno "
 "celico"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Ime vhodnega sloja"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "navedena morata biti 2 sloja"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Nepoznan tip: %c"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Vrednost, ki bo prirejena NULL vrednosti"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27857,7 +29577,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "dig_att datoteka ne obstaja."
@@ -27969,7 +29689,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Uporabi trenutno regijo"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28576,7 +30296,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29043,7 +30763,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Izpi�e vrednosti v stilu lupinskega skripta"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29064,11 +30784,6 @@ msgstr ""
 msgid "Unable to write to temp file"
 msgstr "Vrednost, ki bo prirejena NULL vrednosti"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Zapisujem novo datoteko...\n"
-
 #: ../raster/r.clump/clump.c:265
 msgid "Pass 2 of 2..."
 msgstr ""
@@ -29188,7 +30903,7 @@ msgid "Writing output raster map..."
 msgstr "Ime izhodnega rastrskega sloja"
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -29199,42 +30914,42 @@ msgstr "izhodni rastrski sloj"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Izdela povr�inske statistike rastrskega(ih) sloja(ev)"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "EASTING in NORTHING koordinate za�etne to�ke"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Koordinata za sever je prazna!"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Koordinata za sever je prazna!"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -29328,22 +31043,22 @@ msgid "Invalid map type"
 msgstr "neveljavna regija: %s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -29450,23 +31165,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29474,8 +31189,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29972,226 +31687,231 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Vhodni sloj"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Vhodni sloj: koli�ina povr�inskega toka na celico"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Vhodni sloj: ovire povr�inskemu toku (za USLE)"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "Vhodni sloj: najmanj�a velikost zunanjega pore�ja"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Vhodni sloj: najve�ja dol�ina povr�inskega toka (za USLE)"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Izhodni sloj: �tevilo celic, ki se odvodnjavajo skozi vsako celico"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Rastrski sloj s topografskim indeksom"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Rastrski sloj s topografskim indeksom"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Izhodni sloj: vsaka polovica pore�ja pridobi edinstveno vrednost"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "Izhodni sloj: dol�ina pobo�ja (L faktor za USLE)"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Izhodni sloj: naklon pobo�ja (S faktor za USLE)"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Faktor spremembe z-vrednosti (v metre)"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Omogo�i le horizontalni in vertikalni vodni tok"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 #, fuzzy
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 "Omogo�i mo�nost raz�irjenega spomina \"extend memory\": Operacija je po�asna"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 #, fuzzy
 msgid "Sorry, you must choose an output map."
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "Velikost okolice (neighbourhood)"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Tip zapisa kolone ni podprt"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -30200,22 +31920,32 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "Pokrovni rastrski sloj"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Pokrovni rastrski sloj"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Pokrovni rastrski sloj"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Pokrovni rastrski sloj"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Pokrovni rastrski sloj"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Pokrovni rastrski sloj"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Pokrovni rastrski sloj"
@@ -30247,33 +31977,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "Rastrski sloj, ki ga �elite rekodirati"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Izdela rastrski sloj, ki prikazuje razvodnice in podpovodja"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 #, fuzzy
 msgid "Aggregation method"
 msgstr "Agregacijska operacija"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, fuzzy, c-format
 msgid "Unable to read color table for %s"
 msgstr "Ime rastrskega sloja"
@@ -30683,7 +32413,7 @@ msgstr "Ime izhodnega rastrskega sloja"
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - nepoznana barva\n"
@@ -31068,7 +32798,7 @@ msgstr ""
 "sloja."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31083,13 +32813,25 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "Uporabi trenutno regijo"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 "Izra�una univariatne statisti�ne parametre za ne NULL celice rastrskega "
 "sloja."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31379,33 +33121,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "Izpi�i etikete kategorij"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -31719,34 +33461,12 @@ msgstr ""
 "Izdela GRASS-ov binarni vektorski sloj plastnic iz GRASS-ovega rastrskega\n"
 " sloja."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Razmak med sosednjima plastnicama"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Spisek vrednosti plastnic"
 
-#: ../raster/r.contour/main.c:109
-#, fuzzy
-msgid "List of contour levels"
-msgstr "Spisek vrednosti plastnic"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Najmanj�a vrednost plastnice"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Najve�ja vrednost plastnice"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-"Najmanj�e �tevilo to�k, ki bodo gradile linijo plastnice (od 0 do neskon�no)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32340,54 +34060,55 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Rastrski sloj kateremu naj se regija prilagodi"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Kodni nabor"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Nepoznan tip"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "%d napak med posodabljanjem\n"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "Nepoznan tip: %c"
@@ -32437,81 +34158,81 @@ msgstr "Nepoznan tip"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Ime datoteke z referen�nimi razredi"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "neveljavna regija: %s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "Nepoznan tip"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Ne morem ustvariti tabele: %s"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "\"Mapset\" vhodnega rastrskega sloja"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -32704,22 +34425,22 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr "Ni� je nadmorska vi�ina"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 #, fuzzy
 msgid "Location PROJ_INFO is:\n"
 msgstr "ne morem odpreti %s"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32760,14 +34481,6 @@ msgstr "Ime novega rastrskega sloja."
 msgid "Band to select (default is all bands)"
 msgstr "Izbrani pas (privzeto: vsi pasovi)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32790,7 +34503,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "ne morem posodobiti meja"
@@ -32810,7 +34523,7 @@ msgstr "Ime izhodnega vektorskega sloja"
 msgid "Reading band %d of %d..."
 msgstr "Rastrski sloj nadmorskih vi�in"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
@@ -32880,27 +34593,27 @@ msgstr "ne morem odpreti razpona za datoteko %s"
 msgid "Link to raster map <%s> created."
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "Uvozi binarno rastrsko datoteko v GRASS-ov rastrski sloj."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Rastrski sloj, ki ga nameravate uvoziti"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Izbrani pas (privzeto: vsi pasovi)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
@@ -32908,171 +34621,190 @@ msgstr ""
 "Ime lokacije (location) iz katere naj povzamem projekcijo za GCP "
 "transformacijo"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Ime rastrskega sloja nadmorskih vi�in"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Ne ustvari tabele z atributi."
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Ohrani �tevila za imena pasov namesto imena barv"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "izpi�i tabele in kon�aj"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Berem dig_att datoteko...\n"
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Ne morem odpreti baze podatkov %s"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "Zapisujem novo datoteko...\n"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, fuzzy, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "Ime izhodnega rastrskega sloja smeri toka"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "Ime izhodnega rastrskega sloja smeri toka"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "\"Location\" vhodnega sloja"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "\"Location\" vhodnega sloja"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "Ime izhodnega sloja"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "izhodni rastrski sloj"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "Ime rastrskega sloja"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Ne morem odpreti cellfile za [%s]"
@@ -33205,7 +34937,7 @@ msgstr "Vhodni rastrski sloj"
 msgid "Writing topographic index map..."
 msgstr "Rastrski sloj s topografskim indeksom"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr ""
@@ -33312,12 +35044,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Ri�em ..."
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33327,24 +35059,24 @@ msgstr ""
 "da je spodnje le�e�i sloj viden le skozi NULL obmo�ja vi�je le�e�ega \n"
 "rastrskega sloja."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Imena rastrskih slojev, ki bodo zdru�eni"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Uporabi ni� (0) za prosojnost namesto NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "Ime vhodnega rastrskega sloja"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "ne morem odpreti razpona za datoteko %s"
@@ -33414,41 +35146,6 @@ msgstr "Ni
 msgid "Converts a raster map into a vector map."
 msgstr "Preoblikuje rastrski sloj v vektorskega."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-#, fuzzy
-msgid "Smooth corners of area features"
-msgstr "Zglajeni koti"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Za kategorije uporabi rastrske vrednosti namesto zaporedja edinstvenih "
-"�tevil (le za rastrski tip CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Uporabljam koordinate sredi��a sloja\n"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr "Izpi�i podprte formate in kon�aj"
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Rastrski sloj, ki ga nameravate uvoziti"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -33967,11 +35664,6 @@ msgstr ""
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Ime izhodnega rastrskega sloja"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34259,7 +35951,7 @@ msgstr "Izdela naklju
 msgid "Name for output raster map(s)"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "Najve�ja mo�na razdalja od to�k (v metrih)."
@@ -34286,7 +35978,7 @@ msgstr "
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "Berem dig_att datoteko...\n"
@@ -34630,7 +36322,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34656,7 +36348,7 @@ msgstr "Ri
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -34682,7 +36374,7 @@ msgstr ""
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Ri�em ..."
@@ -34852,7 +36544,7 @@ msgstr ""
 "Izra�una univariatne statisti�ne parametre za ne NULL celice rastrskega "
 "sloja."
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
@@ -35028,11 +36720,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "Ne najdem vhodne datoteke %s\n"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Ne morem odpreti baze podatkov %s"
@@ -35272,21 +36964,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Uporabljam koordinate sredi��a sloja\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "izhodni rastrski sloj"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "neveljavna regija: %s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Uporabljam koordinate sredi��a sloja\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "izhodni rastrski sloj"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Uporabljam koordinate sredi��a sloja\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "izhodni rastrski sloj"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35312,76 +37044,85 @@ msgstr "De-komprimiraj sloj"
 msgid "Print compression information and data type of input map(s)"
 msgstr "Izpi�e vrednosti v stilu lupinskega skripta"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "Ne najdem vhodnega vektorja <%s>"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Obmo�je\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "dig_att datoteka ne obstaja."
+msgid "Uncompressing <%s>"
+msgstr "Kodni nabor"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Kodni nabor"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Kodni nabor"
+
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "ne morem odpreti 3Dview datoteke <%s> v <%s>"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35416,52 +37157,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "Ne najdem rastrskega sloja <%s>"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Tip objektov"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Izdela rastrski sloj, ki prikazuje razvodnice in podpovodja"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "ne morem odpreti %s"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "navedena morata biti 2 sloja"
@@ -35894,21 +37635,29 @@ msgstr[1] "Izra
 msgid "Calculating %s"
 msgstr "Izra�unavam sence iz DMR..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "navedena morata biti 2 sloja"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Korelacija"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Izdela naklju�ne vrednosti celic s prostorsko odvisnostjo."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr ""
+"\n"
+"\n"
+" �tevilo to�k: %d\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -36054,7 +37803,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr "Ne najdem vhodnega vektorja <%s>"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr " nv barva\n"
@@ -36176,16 +37925,11 @@ msgid "Starting and ending coordinates"
 msgstr "Uporabljam koordinate sredi��a sloja\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 #, fuzzy
 msgid "Line color"
 msgstr " nv barva\n"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr " privzeta barva\n"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -36215,8 +37959,8 @@ msgid "Name of monitor to start"
 msgstr "Ime rastrskega sloja, ki bo vseboval rezultate"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36278,48 +38022,66 @@ msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr " �tevilo kolon\n"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 #, fuzzy
 msgid "Currently selected monitor:"
 msgstr "Prilagodi trenutno regijo z vhodnemu rastrskemu sloju"
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
@@ -36329,64 +38091,74 @@ msgstr "Uporabi
 msgid "Monitor <%s> is not running"
 msgstr "Ne najdem rastrskega sloja <%s>"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "ne najdem 3Dview datoteke <%s>"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "ne najdem 3Dview datoteke <%s>"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Ime izhodnega rastrskega sloja"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Ime izhodnega vektorskega sloja"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Ne morem opisati tabele"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Izhodni sloj"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Ne morem odpreti cellfile za [%s]"
+msgid "Starting monitor <%s>..."
+msgstr "Zapisujem novo datoteko...\n"
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Ime rastrskega sloja"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Spisek vrednosti plastnic"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "ne najdem 3Dview datoteke <%s>"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Ime rastrskega sloja"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Ne morem najti vhodne datoteke <%s>\n"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36498,28 +38270,47 @@ msgstr "navedena morata biti 2 sloja"
 msgid "[%s]: illegal value specified"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Izpi�i etikete kategorij"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr "Izbere pisavo v kateri bo tekst zapisan na grafi�nem monitorju"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Rastrski sloj za�etnih to�k"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Ne najdem vhodne datoteke %s\n"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "Ime izhodnega vektorskega sloja"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36527,7 +38318,7 @@ msgstr[0] " nv barva\n"
 msgstr[1] " nv barva\n"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36535,7 +38326,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36616,11 +38407,6 @@ msgstr " vrednost barva\n"
 msgid "Colorize features according color definition column"
 msgstr " �tevilo kolon\n"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Dolo�ena ni bila nobena vhodna datoteka."
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36630,7 +38416,7 @@ msgstr ""
 msgid "Lines"
 msgstr ""
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr ""
 
@@ -37182,37 +38968,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "neveljavna regija: %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Izpi�i informacije o vhodnem rastrskem sloju in kon�aj"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "Uporabi trenutno regijo"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37467,15 +39253,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "Ime izhodnega vektorskega sloja"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Vhodni sloj"
@@ -37541,7 +39318,7 @@ msgstr "Tip objektov"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "Tip objektov"
@@ -37580,12 +39357,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Prepi�i izhod"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37628,14 +39415,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Ne najdem vhodne datoteke %s\n"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37719,11 +39499,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -37737,34 +39518,90 @@ msgstr "Izbere pisavo v kateri bo tekst zapisan na grafi
 msgid "North arrow style"
 msgstr "Tip objektov"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr " nv barva\n"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -37780,72 +39617,72 @@ msgstr "Ne morem najti vhodne datoteke <%s>\n"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 #, fuzzy
 msgid "Name of raster aspect map to be displayed"
 msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 #, fuzzy
 msgid "Type of existing raster aspect map"
 msgstr "Ime obstoje�ega rastrskega sloja"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Ne morem izra�unati centroida obmo�ja."
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Ne morem izra�unati centroida obmo�ja."
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 #, fuzzy
 msgid "Raster map containing values used for arrow length"
 msgstr "Vhodni sloj vsebuje linije."
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "Vhodni sloj"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "Vhodni sloj"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "Ime izhodne datoteke"
@@ -38129,57 +39966,43 @@ msgstr "Rastrska(e) datoteka(e) za ogled %d"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Ne najdem vhodnega vektorja <%s>"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Ne najdem rastrskega sloja <%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Rastrski sloj kateremu naj se regija prilagodi"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "Binarna rastrska datoteka, ki jo nameravate uvoziti"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "ne najdem regije <%s>"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Ne najdem vhodne datoteke %s\n"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Vnesti mora� vsaj %d to�k."
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -38254,7 +40077,21 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr "Ime izhodne datoteke z matriko napak in parametrom kappa"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Ne najdem vhodnega vektorja <%s>"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Ne najdem rastrskega sloja <%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
@@ -38262,111 +40099,111 @@ msgstr ""
 "\n"
 " �tevilo to�k: %d\n"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "Vhodni sloj"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Vhodni sloj"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Vhodni sloj"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Vhodni sloj"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Vhodni sloj"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Ne morem odpreti cellfile za [%s]"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "ne morem odpreti %s"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr ""
 "polje: %d\n"
 "kategorija: %d\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Napaka: %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Napaka: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Ne najdem vhodne datoteke %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Berem dig datoteko...\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr ""
 "polje: %d\n"
 "kategorija: %d\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Zglajeni koti"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, fuzzy, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
@@ -38374,27 +40211,27 @@ msgstr ""
 "\n"
 " �tevilo to�k: %d\n"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr ""
@@ -38402,67 +40239,67 @@ msgstr ""
 "\n"
 " �tevilo to�k: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Berem dig_att datoteko...\n"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, c-format
 msgid "Sample size: %d points%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38767,8 +40604,8 @@ msgid "radiance"
 msgstr "Varianca"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Ne najdem vhodne datoteke %s\n"
@@ -39139,359 +40976,403 @@ msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 msgid "group <%s> references the following subgroups\n"
 msgstr "ne najdem regije <%s>"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Ime rastrskega sloja naklju�ne povr�ine, ki bo ustvarjen"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Ne najdem vhodne datoteke %s\n"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "izhodni rastrski sloj"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Ime rastrskega sloja fraktalne povr�ine"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Vhodni rastrski sloj"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Ime rastrskega sloja, ki bo reklasificiran"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Ime izhodnega rastrskega sloja smeri toka"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr " �tevilo vrstic\n"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr " �tevilo vrstic\n"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39698,7 +41579,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Ime datoteke z referen�nimi razredi"
@@ -40059,110 +41940,116 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Ne morem odpreti baze podatkov %s"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Ime vhodnega rastrskega sloja"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Napaka pri branju dbmscap datoteke\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Ne najdem vhodne datoteke %s\n"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "�tevilo �eljenih to�k"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "ne najdem regije <%s>"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Zapisujem novo datoteko...\n"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Ustvari to�ke vzdol� vhodnih linij."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 "Velikost regije je od najmanj�e regije (minreg), ne morem prikazati "
 "ni�esar.\n"
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att datoteka ne obstaja."
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Ne najdem vhodne datoteke %s\n"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Ime vhodnega rastrskega sloja"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Napaka pri branju dbmscap datoteke\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Ne najdem vhodne datoteke %s\n"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "�tevilo �eljenih to�k"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Zapisujem novo datoteko...\n"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40236,64 +42123,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "navedena morata biti 2 sloja"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Vrednost, ki bo prirejena NULL vrednosti"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "neveljavna regija: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "ne morem odpreti %s"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "ne morem odpreti %s"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "ne morem odpreti %s"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "izhodni rastrski sloj"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Ne najdem vhodnega rastrskega sloja <%s>."
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Ime datoteke z referen�nimi razredi"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Ime datoteke z referen�nimi razredi"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "ne najdem regije <%s>"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -40363,7 +42267,7 @@ msgstr "Ime izhodnega rastrskega sloja"
 msgid "Name for output raster map (blue)"
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40415,7 +42319,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -41265,51 +43169,55 @@ msgstr "ne najdem regije <%s>"
 msgid "Option '%s' is required for new exposure info"
 msgstr "ne morem odpreti %s"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Vhodni sloj"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Ime izhodnega rastrskega sloja"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Naslov izhodnega rastrskega sloja"
@@ -41595,6 +43503,10 @@ msgstr "
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41988,12 +43900,36 @@ msgid "Name for output raster map (saturation)"
 msgstr "Naslov izhodnega rastrskega sloja"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Ne morem ustvariti tabele: %s"
+#~ msgid "<%s> already exists"
+#~ msgstr "dig_att datoteka ne obstaja."
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Ne morem ustvariti tabele: %s"
+#~ msgid "<%s> already compressed"
+#~ msgstr "dig_att datoteka ne obstaja."
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Ni�esar nisem na�el.\n"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Ne ustvari tabele z atributi."
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Ne ustvari tabele z atributi."
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Ne ustvari tabele z atributi."
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Y koordinata oziroma geografska �irina"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Ne ustvari tabele z atributi."
 
 #, fuzzy
 #~ msgid "time series"
@@ -42040,58 +43976,6 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr " �tevilo vrstic\n"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Ime obstoje�ega rastrskega sloja s plastnicami"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Ime obstoje�ega rastrskega sloja s plastnicami"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr "Izhodni rastrski sloj energije difuzne radiacije"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr "Izhodni rastrski sloj energije difuzne radiacije"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Ime vhodnega rastrskega sloja"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Ime rastrskega sloja nadmorskih vi�in"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr "Ime vhodnega rastrskega sloja"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr "Izhodni rastrski sloj energije difuzne radiacije"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "�tevilo to�k najbli�jih to�k, ki bodo upo�tevane"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
-
-#, fuzzy
 #~ msgid "Location: %s\n"
 #~ msgstr "ne morem odpreti %s"
 
@@ -42100,20 +43984,20 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "%s"
 
 #, fuzzy
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "ne najdem regije <%s>"
+#~ msgid "Could not rewind input file"
+#~ msgstr "Ne najdem vhodne datoteke %s\n"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Izhodni sloj"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Ime rastrskega sloja"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Rastrski sloj s topografskim indeksom"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "Ime izhodnega rastrskega sloja"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Ime rastrskega sloja"
+#~ msgid "output map <%s> exists"
+#~ msgstr "Izhodni sloj"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Dol�ina strani (privzeto: %d vrstic)"
@@ -42121,6 +44005,9 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "�irina strani (privzeto: %d znakov)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
+
 #, fuzzy
 #~ msgid "%s: Error writing temporary file"
 #~ msgstr "Napaka pri branju dbmscap datoteke\n"
@@ -42138,6 +44025,24 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "Ne najdem rastrskega sloja <%s>"
 
 #, fuzzy
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "ne najdem regije <%s>"
+
+#, fuzzy
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Povozi projekcijo (uporabi projekcijo lokacije)"
+
+#, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Ne morem ustvariti tabele: %s"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Preoblikuje rastrski sloj v vektorskega."
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Ime rastrskega sloja, ki bo uporabljen za <%s>"
 
@@ -42172,94 +44077,50 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "Uporabi nastavitve trenutne regije"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "Ime izhodnega rastrskega sloja"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Preoblikuje rastrski sloj v vektorskega."
+#~ msgid "OGR datasource name"
+#~ msgstr "ime baze podatkov"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Dolo�ena ni bila nobena vhodna datoteka."
 
 #, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "izhodni rastrski sloj"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "ne morem prebrati regije <%s> v <%s>"
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d kategorij nalo�enih iz tabele\n"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Vhodni rastrski sloj"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Vhodni rastrski sloj"
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Vhodni rastrski sloj"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Vhodni rastrski sloj"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Ne morem odpreti cellfile za [%s]"
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Vhodni rastrski sloj"
+#~ msgid "Env file not found"
+#~ msgstr "ne najdem 3Dview datoteke <%s>"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+#~ msgid "PID file not found"
+#~ msgstr "ne najdem 3Dview datoteke <%s>"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+#~ msgid "Command file not found"
+#~ msgstr "ne najdem 3Dview datoteke <%s>"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "izhodni rastrski sloj"
 
 #, fuzzy
-#~ msgid "No graphics device selected. Use d.mon to select graphics device."
-#~ msgstr "Nobena grafi�na naprava ni izbrana"
+#~ msgid "Name for output image"
+#~ msgstr "Ime izhodne datoteke"
 
 #, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "Izbere pisavo v kateri bo tekst zapisan na grafi�nem monitorju"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "ne morem prebrati regije <%s> v <%s>"
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Izpi�i podprte formate in kon�aj"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d kategorij nalo�enih iz tabele\n"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr "Ime izhodnega rastrskega sloja"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Najve�ja razdalja med to�kami in enotami karte."
-
-#, fuzzy
 #~ msgid "Displays thematic vector map"
 #~ msgstr "Ime vhodnega rastrskega sloja"
 
@@ -42301,28 +44162,82 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "Metri�ni"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "Ime izhodnega rastrskega sloja"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Ri�em ..."
+#~ msgid "Default: input"
+#~ msgstr "Najve�ja razdalja med to�kami in enotami karte."
 
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Ime izhodnega rastrskega sloja"
+#~ msgid "No graphics device selected. Use d.mon to select graphics device."
+#~ msgstr "Nobena grafi�na naprava ni izbrana"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Ne morem odpreti cellfile za [%s]"
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "Izbere pisavo v kateri bo tekst zapisan na grafi�nem monitorju"
 
 #, fuzzy
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "SISTEMSKA_NAPAKA: OLD_T_NEW ima napa�no kodo za tip %x"
+#~ msgid "Text color or \"none\""
+#~ msgstr " privzeta barva\n"
 
 #, fuzzy
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "SISTEMSKA NAPAKA: OLD_T_NEW ima napa�no kodo za tip %x"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Izpi�i podprte formate in kon�aj"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "Ne najdem vhodnega vektorja <%s>"
+
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Nisem uspel odpreti vhodne datoteke."
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "dig_att datoteka ne obstaja."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
+
+#, fuzzy
+#~ msgid "Attaching categories..."
+#~ msgstr "Pripajam kategorije...\n"
+
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "Nisem uspel pripojiti atributa (kategorije %d) liniji."
+
+#, fuzzy
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "OPOZORILO: linija %d etiketa: %d je enaka drugi etiketi: %d."
+
+#, fuzzy
+#~ msgid "Writing new file..."
+#~ msgstr "Zapisujem novo datoteko...\n"
+
+#, fuzzy
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "%-5d to�k in linij zapisanih v izhodno datoteko.\n"
+
+#, fuzzy
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "%-5d centroidov zapisanih v izhodno datoteko.\n"
+
+#, fuzzy
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Ime vhodnega rastrskega sloja"
+
+#, fuzzy
+#~ msgid "Endian of input vector map"
+#~ msgstr "Ime vhodnega rastrskega sloja"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr "Ne najdem etiket (dig_cats), tabela ni bi bila ustvarjena.\n"
+
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "ne morem odpreti <%s>"
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -42432,130 +44347,48 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "%-5d kategorij prebranih v spomin.\n"
 
 #, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr "Ne najdem etiket (dig_cats), tabela ni bi bila ustvarjena.\n"
-
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "ne morem odpreti <%s>"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Nisem uspel odpreti vhodne datoteke."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "dig_att datoteka ne obstaja."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Nisem mogel odpreti vhodne datoteke dig_att."
-
-#, fuzzy
-#~ msgid "Attaching categories..."
-#~ msgstr "Pripajam kategorije...\n"
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "Nisem uspel pripojiti atributa (kategorije %d) liniji."
-
-#, fuzzy
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "OPOZORILO: linija %d etiketa: %d je enaka drugi etiketi: %d."
-
-#, fuzzy
-#~ msgid "Writing new file..."
-#~ msgstr "Zapisujem novo datoteko...\n"
-
-#, fuzzy
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "%-5d to�k in linij zapisanih v izhodno datoteko.\n"
-
-#, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "%-5d centroidov zapisanih v izhodno datoteko.\n"
-
-#, fuzzy
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Ime vhodnega rastrskega sloja"
-
-#, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "Ime vhodnega rastrskega sloja"
-
-#, fuzzy
-#~ msgid "Unknown raster map type"
-#~ msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
-
-#, fuzzy
-#~ msgid "Can't call bad function"
-#~ msgstr "lokacija baze podatkov"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "SISTEMSKA_NAPAKA: OLD_T_NEW ima napa�no kodo za tip %x"
 
 #, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Rastrski sloj nadmorskih vi�in"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "SISTEMSKA NAPAKA: OLD_T_NEW ima napa�no kodo za tip %x"
 
 #, fuzzy
 #~ msgid "One or more coordinates"
 #~ msgstr "Uporabljam koordinate sredi��a sloja\n"
 
 #, fuzzy
-#~ msgid "Cannot create quaddata"
-#~ msgstr "Ne morem ustvariti indeksa"
-
-#, fuzzy
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "Ne morem ustvariti indeksa"
+#~ msgid "Name of elevation map"
+#~ msgstr "Ime rastrskega sloja nadmorskih vi�in"
 
-#, fuzzy
-#~ msgid "Cannot create tree"
-#~ msgstr "Ne morem ustvariti indeksa"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Znak, ki naj predstavlja NULL celice"
 
 #, fuzzy
-#~ msgid "Cannot create tree info"
-#~ msgstr "Ne morem ustvariti indeksa"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
 
 #, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Preoblikuje rastrski sloj v vektorskega."
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Nepoznan tip: %c"
 
 #, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "ne najdem 3Dview datoteke <%s>"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Ne najdem vhodne datoteke %s\n"
 
 #, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Vhodni sloj"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "ne morem odpreti razpona za datoteko %s"
 
-#, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Ne morem izra�unati centroida obmo�ja."
+#~ msgid "String representing no data cell value"
+#~ msgstr "Znak, ki bo predstavljal NULL vrednosti"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
+#~ msgid "Surface interpolation utility for raster map."
 #~ msgstr ""
-#~ "\n"
-#~ "Spreminjam vektorje ... \n"
-
-#, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d to�k je bilo zapisanih na izhodno datoteko\n"
-
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Ime sloja, ki bo uporabljen za svetlost (INTENSITY)"
-
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Ime sloja, ki bo uporabljen za nasi�enost (SATURATION)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr "Ime vhodnega rastrskega sloja"
-
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Ime izhodne datoteke, ki bo vsebovala poro�ilo"
-
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Ime obstoje�ega rastrskega sloja"
+#~ "Interpolacija s pomo�jo obte�evanja glede na obratno razdaljo\n"
+#~ "(inverse distance weighting)"
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -42572,18 +44405,18 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ "razli�nimi geografskimi lokacijami po vhodnem rastrskem sloju katerega\n"
 #~ "vrednosti predstavljajo stro�ek."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Ime sloja, ki bo uporabljen za svetlost (INTENSITY)"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Ime sloja, ki bo uporabljen za nasi�enost (SATURATION)"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Ime izhodnega sloja, ki bo uporabljen za zeleno (GREEN)"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Ime izhodnega sloja, ki bo uporabljen za modro (BLUE)"
 
-#, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr ""
-#~ "Interpolacija s pomo�jo obte�evanja glede na obratno razdaljo\n"
-#~ "(inverse distance weighting)"
-
 #~ msgid "Surface generation program."
 #~ msgstr ""
 #~ "Modul zapolni rastrsko matriko z interpoliranimi vrednostmi iz mno�ice \n"
@@ -42601,44 +44434,6 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr[1] "izhodni rastrski sloj"
 
 #, fuzzy
-#~ msgid "allocation"
-#~ msgstr "ne morem odpreti %s"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "Berem dig datoteko...\n"
-
-#, fuzzy
-#~ msgid "Name of elevation map"
-#~ msgstr "Ime rastrskega sloja nadmorskih vi�in"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Znak, ki naj predstavlja NULL celice"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
-
-#, fuzzy
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Nepoznan tip: %c"
-
-#, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Ne najdem vhodne datoteke %s\n"
-
-#, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "ne morem odpreti razpona za datoteko %s"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Znak, ki bo predstavljal NULL vrednosti"
-
-#, fuzzy
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "Izdelaj z-sloj (nadmorsko vi�ino)"
 
@@ -42679,8 +44474,18 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "Ne izpi�i vzglavja"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Korelacija"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr "Ime vhodnega rastrskega sloja"
+
+#, fuzzy
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Ime izhodne datoteke, ki bo vsebovala poro�ilo"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Ime obstoje�ega rastrskega sloja"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -42699,6 +44504,72 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "Naslov izhodnega rastrskega sloja"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Izra�una univariatne statisti�ne parametre za ne NULL celice rastrskega "
+#~ "sloja."
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Izpi�i podprte formate in kon�aj"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Izpi�i podprte formate in kon�aj"
+
+#, fuzzy
+#~ msgid "Invalid distance"
+#~ msgstr "neveljavna regija: %s"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "ne morem odpreti %s"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "Berem dig datoteko...\n"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Vhodni rastrski sloj"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Vhodni rastrski sloj"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Vhodni rastrski sloj"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Vhodni rastrski sloj"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Vhodni rastrski sloj"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Ri�em ..."
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Korelacija"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Ime rastrskega sloja nadmorskih vi�in"
 
@@ -42715,13 +44586,75 @@ msgstr "Naslov izhodnega rastrskega sloja"
 #~ msgstr "Ime izhodnega sloja"
 
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Ne morem ustvariti indeksa"
+
+#, fuzzy
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Ne morem ustvariti indeksa"
+
+#, fuzzy
+#~ msgid "Cannot create tree"
+#~ msgstr "Ne morem ustvariti indeksa"
+
+#, fuzzy
+#~ msgid "Cannot create tree info"
+#~ msgstr "Ne morem ustvariti indeksa"
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Ne morem odpreti cellfile za [%s]"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "Uporabi� lahko ali 'from_table' ali 'select'"
+
+#, fuzzy
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Preoblikuje rastrski sloj v vektorskega."
+
+#, fuzzy
+#~ msgid "Site file <%s> not found"
+#~ msgstr "ne najdem 3Dview datoteke <%s>"
+
+#, fuzzy
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Vhodni sloj"
+
+#, fuzzy
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Ne morem izra�unati centroida obmo�ja."
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
 #~ msgstr ""
-#~ "Izra�una univariatne statisti�ne parametre za ne NULL celice rastrskega "
-#~ "sloja."
+#~ "\n"
+#~ "Spreminjam vektorje ... \n"
 
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "neveljavna regija: %s"
+#~ msgid "%d sites written."
+#~ msgstr "%d to�k je bilo zapisanih na izhodno datoteko\n"
+
+#, fuzzy
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Rastrski sloj nadmorskih vi�in"
+
+#, fuzzy
+#~ msgid "Can't call bad function"
+#~ msgstr "lokacija baze podatkov"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Ime izhodnega rastrskega sloja"
+
+#, fuzzy
+#~ msgid "Unknown raster map type"
+#~ msgstr "Izpi�i le tip podatkovnega zapisa rastrskega sloja"
diff --git a/locale/po/grassmods_th.po b/locale/po/grassmods_th.po
index 801be16..1187fcc 100644
--- a/locale/po/grassmods_th.po
+++ b/locale/po/grassmods_th.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_th\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2008-01-05 15:19+0700\n"
 "Last-Translator: man <mansv68 at yahoo.co.th>\n"
 "Language-Team: Thai <grass-translations at lists.osgeo.org>\n"
@@ -249,6 +249,7 @@ msgstr "ไม่พบ %s <%s>"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -483,6 +484,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "ผิดพลาดขณะปิด  ascii  ไฟล์ "
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -622,29 +628,29 @@ msgstr "ไม่สามารถเปิดแหล่งข้อมูล
 msgid "Unable to open database:"
 msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> ได้"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "การติดต่อกับฐานข้อมูล ไม่ถูกกำหนด"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> มีอยู่แล้ว"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "ไม่สามารถสร้างตาราง: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "ไม่พบ %s <%s>"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -655,6 +661,11 @@ msgstr "ไม่สามารถสร้าง ดัชนี ได้"
 msgid "Unable grant on table:"
 msgstr "ไม่สามารถคัดลอก ตาราง"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "ไม่สามารถกำหนดขนาด"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -785,7 +796,7 @@ msgstr "ไม่สามารถเปิดฐานข้อมูล <%s>
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -864,17 +875,17 @@ msgstr "ชื่อ"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "การกำหนด"
 
@@ -886,7 +897,7 @@ msgstr "ผ่าน: %d\n"
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "ชื่อแบบตัวอักษร"
+msgstr "ชื่อทดสอบ"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -909,39 +920,39 @@ msgstr "แสดง ตัวแปรการเชื่อมต่อ แ
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -986,7 +997,7 @@ msgstr "แสดงรายการ ตัวขับ ฐานข้อม
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1016,7 +1027,7 @@ msgstr "แผนที่เชิงเส้น, ตารางรายล
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1113,10 +1124,10 @@ msgid "Unable to open database <%s>"
 msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> ได้"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1303,11 +1314,11 @@ msgstr "นำเข้า ล้มเหลว"
 msgid "succeeded"
 msgstr "...สำเร็จ"
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "ไม่สามารถเปิดไฟล์ <%s> เพื่อเขียน"
@@ -1342,10 +1353,10 @@ msgstr "Column ที่ค้นหา. ใช้เงื่อนไข 'quer
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "รูปแบบ"
@@ -1355,7 +1366,7 @@ msgstr "รูปแบบ"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "ตัวแยกทางดิ่ง ของข้อมูลผลลัพธ์"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1363,7 +1374,7 @@ msgstr "ตัวแยกทางดิ่ง ของข้อมูลผ
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "ชื่อของไฟล์ผลลัพธ์ (ถ้าข้าม หรือใช้  \"-\" ให้ส่งออกไปที่ stdout)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "อย่ารวมชื่อ column ลงในผลลัพธ์"
 
@@ -1371,7 +1382,7 @@ msgstr "อย่ารวมชื่อ column ลงในผลลัพธ
 msgid "Describe query only (don't run it)"
 msgstr "อธิบายการค้นหาเท่านั้น  (ไม่ต้องทำงาน)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "ผลลัพธ์ทางดิ่ง (แทนที่จะเป็นทางราบl)"
 
@@ -1421,6 +1432,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "ชื่อของไฟล์ ที่ประกอบด้วยคำสั่ง SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "ยกเลิกข้อผิดพลาดของ SQL และดำเนินการต่อไป"
 
@@ -1601,7 +1613,6 @@ msgstr "หมุน plot 90 องศา"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1722,7 +1733,7 @@ msgstr "ไม่สามารถอ่านข้อมูลจากตา
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1730,15 +1741,15 @@ msgstr "ไม่สามารถอ่านข้อมูลจากตา
 msgid "Error in pj_do_proj"
 msgstr "ข้อผิดพลาดใน  pj_do_proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "ไม่สามารถอ่าน  ค่า key การฉายแผนที่ ของ ตำแหน่งปัจจุบัน"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1833,7 +1844,7 @@ msgstr "ไม่สามารถสร้าง ไฟล์ชั่วค
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1879,7 +1890,7 @@ msgstr "ไม่สามารถให้ข้อมูล ชั้นข
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1892,26 +1903,27 @@ msgstr "ไม่สามารถให้ข้อมูล ชั้นข
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> โดยตัวขับ <%s>"
@@ -1921,7 +1933,8 @@ msgid "Column type not supported (must be string)"
 msgstr "ชนิด Column ไม่รองรับ (ต้องเป็นตัวอักษร)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2064,13 +2077,13 @@ msgstr "ไมาสามารถเปิดไฟล์ ชั่วคร
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2078,8 +2091,8 @@ msgstr "ไมาสามารถเปิดไฟล์ ชั่วคร
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2122,10 +2135,11 @@ msgstr "การมองเห็น"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2139,13 +2153,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2154,6 +2171,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2169,7 +2187,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2189,11 +2207,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2205,27 +2223,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2243,74 +2261,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "แผนที่เชิงภาพ"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2320,6 +2341,7 @@ msgstr "แผนที่เชิงภาพ"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2335,6 +2357,7 @@ msgstr "แผนที่เชิงภาพ"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2353,6 +2376,7 @@ msgid "vector"
 msgstr "แผนที่เชิงเส้น"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2361,15 +2385,16 @@ msgstr "แผนที่เชิงเส้น"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2407,7 +2432,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "แสดงรายการ รูปแบบผลัพธ์ ที่สามารถส่งออกได้"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "ไฟล์ <%s> ถูกสร้าง"
@@ -3016,69 +3041,70 @@ msgid "Vector map <%s> not found"
 msgstr "แผนที่เชิงเส้น <%s> ไม่พบ"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "ไม่สามารถ เปิด แผนที่เชิงเส้น <%s>"
@@ -3144,12 +3170,13 @@ msgstr "ไม่มีจุดเริ่มต้น"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3281,7 +3308,7 @@ msgstr "แผนที่สำหรับ x coefficient"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3443,7 +3470,7 @@ msgid "Area:"
 msgstr "พื้นที่\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "กำลังเขียน รายละเอียด ..."
@@ -3458,7 +3485,7 @@ msgstr "ไม่สามารถเลือกรายละเอียด
 msgid "No attribute table for layer %d"
 msgstr "ไม่พบรายละเอียด"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3471,15 +3498,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> โดยตัวขับ <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "ไม่สามารถ grant privileges บนตาราง <%s>"
@@ -3502,6 +3530,7 @@ msgid ""
 msgstr "กำลังคำนวน Centrality measures ..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3510,6 +3539,7 @@ msgid "extract"
 msgstr "แผนที่เชิงภาพ, ส่งออก"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3520,10 +3550,10 @@ msgstr "ความละเอียด"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "From_map"
@@ -3547,12 +3577,11 @@ msgstr "ไม่ต้องคัดลอกตาราง (ดูที่
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "คัดลอกรายละเอียด"
@@ -3572,39 +3601,45 @@ msgstr "สลับที่เลือก"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3620,7 +3655,10 @@ msgstr "สลับที่เลือก"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3692,7 +3730,7 @@ msgstr "ยกเลิกการใส่ตัวอักษร: %s"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3740,45 +3778,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3821,11 +3860,11 @@ msgstr "ชนิดของ Column ไม่รองรับ"
 msgid "Format <%s> does not support writing"
 msgstr "ตัวขับ  <%s> ไม่รองรับการสร้าง แผนที่เชิงภาพ"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3980,9 +4019,9 @@ msgstr "ไฟล์ ASCII ที่มีข้อมูลที่จะน
 msgid "Name for output file where to save current settings"
 msgstr "ชื่อ สำหรับ ไฟล์ผลลัพธ์ ที่มี error matrix และ kappa"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "แสดงรายการ รูปแบบที่รองรับ และ ออก"
 
@@ -4005,7 +4044,7 @@ msgstr "แสดง search path ของชุดแผนที่"
 msgid "Print current status in shell script style"
 msgstr "แสดง  stats ในรูปแบบ shell script"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "weight= และ -c คือ mutually exclusive"
@@ -4013,7 +4052,9 @@ msgstr "weight= และ -c คือ mutually exclusive"
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "ต้องระบุค่า Threshold"
+msgstr ""
+"ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
+"\"rules\" !"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4021,18 +4062,18 @@ msgid "%s= must be specified"
 msgstr "จะต้องระบุ 2 ชั้นข้อมูล"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "แบบที่รองรับ:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4043,66 +4084,67 @@ msgstr "แบบที่รองรับ:\n"
 msgid "network"
 msgstr "แผนที่เชิงเส้น, networking"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "หา shortest path บน vector network."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "ชนิดเส้น"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "ชั้นข้อมูลเส้น"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "ชนิดเส้น"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "ชั้นข้อมูลจุด"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr "ชื่อของไฟล์ ที่มี จุดเริ่มต้น และ สิ้นสุด. ถ้าไม่ได้ระบุ,อ่านจาก stdin"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Arc forward/both direction(s) cost column (number)"
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4114,10 +4156,11 @@ msgstr "Arc forward/both direction(s) cost column (number)"
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4130,29 +4173,29 @@ msgstr "Arc forward/both direction(s) cost column (number)"
 msgid "Cost"
 msgstr "Contrast"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Arc backward direction cost column (number)"
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Node cost column (number)"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "ระยะมากสุด ถึง network"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4161,19 +4204,55 @@ msgstr ""
 "ถ้า จุดเริ่มต้น/สิ้นสุด ถูกกำหนดแบบ ค่าพิกัด.ถ้า จุดเริ่มต้น/สิ้นสุด อยู่นอก threshold, ไม่พบ path "
 "และจะแสดง error message. เพื่อจะให้การทำงานเร็วขึ้น, ใช้ค่าต่ำที่สุดเท่าที่จะเป็นไปได้."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "ไม่มี ตาราง"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "ชั้นข้อมูล / ตาราง"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "ใช้การคำนวน  geodesic สำหรับตำแหน่ง แลตติจูด-ลองติจูด"
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr "เขียนผลลัพธ์ เหมือนแบบ ที่นำเข้า,ไม่ใช่แต่ละ path ต่อ1 เส้น"
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4182,10 +4261,10 @@ msgstr "การฉายแผนที่ ที่ใช้ ไม่ใช
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4201,8 +4280,8 @@ msgstr "[%d] จุด ที่ไม่มีหมวดหมู่ (nfield:
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4231,22 +4310,22 @@ msgstr "ไม่สามารถ grant privileges บนตาราง <%s>"
 msgid "Wrong input format: %s"
 msgstr "รูปแบบนำเข้า ผิด: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "ไม่มีจุดที่มี หมวดหมู่ [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr "จุดที่มีหมวดหมู่ [%d] ไม่สามารถเข้าถึงได้ จากจุดที่มีหมวดหมู่ [%d]"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "จุด  %f,%f ไม่สามารถเข้าถึงได้ จากจุด  %f,%f"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4255,17 +4334,17 @@ msgstr "จุด  %f,%f ไม่สามารถเข้าถึงได
 msgid "Cannot insert new record: %s"
 msgstr "ไม่สามารถ แทรก ข้อมูล ใหม่: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] รูปแบบนำเข้า ผิด"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "[%d] จุดที่มีหมวดหมู่ หายไป"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "%d ปลายทาง ไม่สามารถเข้าถึงได้ (รวมถึงจุดที่อยู่นอก threshold)"
@@ -4276,7 +4355,7 @@ msgstr "%d ปลายทาง ไม่สามารถเข้าถึ
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4286,7 +4365,7 @@ msgstr "%d ปลายทาง ไม่สามารถเข้าถึ
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "แผนที่เชิงเส้น, geometry"
@@ -4341,17 +4420,17 @@ msgid "Unable to get category list <%s>"
 msgstr "ไม่สามารถกำหนด หมวกหมู่ %d บรรทัด %d"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "ตัวแปร <%s> ที่ต้องการ  ไม่ได้กำหนด"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้ว"
@@ -4648,6 +4727,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "ชื่อของไฟล์ ที่ประกอบด้วยคำสั่ง SQL"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4668,12 +4748,15 @@ msgstr "ชื่อของไฟล์ ที่ประกอบด้ว
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4834,11 +4917,11 @@ msgstr "ชั้นข้อมูลจะต้อง > 0 สำหรับ
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "การติดต่อฐานข้อมูลไม่ได้ถูกกำหนด ใน ชั้นข้อมูล %d"
@@ -4975,9 +5058,9 @@ msgid "Remove existing color table"
 msgstr "เอาตารางสีเดิมออก"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5042,7 +5125,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5060,8 +5143,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "weight= และ -c คือ mutually exclusive"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5087,6 +5169,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
@@ -5112,7 +5195,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "ไม่พบ แผนที่เชิงภาพ albedo <%s>"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5121,13 +5204,14 @@ msgstr "ไม่สามารถอ่าน ไฟล์สีสำหร
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5159,8 +5243,9 @@ msgstr "กำลังอ่านข้อมูล ..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5205,7 +5290,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "กำลังเขียน ไฟล์สี ..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "ไม่สามารถใช้ Column '%s'"
@@ -5260,6 +5345,7 @@ msgid "Point out of range"
 msgstr "จำนวน edge ไม่อยู่ในช่วง"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5268,15 +5354,17 @@ msgstr "จำนวน edge ไม่อยู่ในช่วง"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5372,14 +5460,15 @@ msgstr "ไฟล์ค่าจุดเบี่ยงเบน ผลลั
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "ผลลัพธ์:"
@@ -5511,7 +5600,7 @@ msgstr "หน่วยความจำไม่พอ สำหรับ az"
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "ไม่สามารถสร้างไฟล์ <%s>"
+msgstr "ไม่สามารถสร้างตาราง: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5574,15 +5663,15 @@ msgstr "วิธี Interpolation"
 msgid "Input failed"
 msgstr "นำเข้า ล้มเหลว"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "นำเข้า ล้มเหลว"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "%d bytes ของที่ว่างบน disk  สำหรับ ไฟล์ ชั่วคราว"
@@ -5626,9 +5715,9 @@ msgstr "ชนิด Column ของ Smooth ไม่รองรับ (จะ
 msgid "Point without category"
 msgstr "ไม่มีจุดที่มี หมวดหมู่ [%d]"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5657,7 +5746,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "ความละเอียด"
+msgstr "กำลังทำงาน  ainput areas  ..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5689,7 +5778,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:368
 #, fuzzy, c-format
 msgid "Mask raster map [%s] not found"
-msgstr "ไม่พบ แผนที่ความสูง 3 มิติ <%s>"
+msgstr "ไม่พบแผนที่เชิงภาพ 3D <%s>"
 
 #: ../vector/v.vol.rst/user1.c:383
 #, fuzzy
@@ -5736,9 +5825,9 @@ msgstr "ผิดพลาดขณะปิด  ascii  ไฟล์ "
 msgid "3D raster map <%s> created"
 msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้ว"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5749,17 +5838,17 @@ msgstr "ไม่สามารถแทรก  row: %s ใหม่ได้"
 msgid "Init costs from node %d"
 msgstr "Init costs จาก node %d"
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "ภาพ ที่จะเอาออก"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "สร้าง Steiner tree สำหรับ network และ  terminal ที่กำหนด"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5768,70 +5857,106 @@ msgstr ""
 "หมายเหตุ 'Minimum Steiner Tree'ปัญหาคือ NP-hard และ heuristic algorithm "
 "ใช้ในคำสั่งนี้ ดังนั้น ผล อาจได้จาก เงื่อนไขย่อย"
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "ชั้นข้อมูล Node  (ใช้สำหรับ terminals)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Column Arcs' cost  (สำหรับทั้งสองทิศทาง)"
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr "หมวดหมู่ของจุดบน  terminals (ชั้นข้อมูลระบุโดย nlayer)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "จำนวนของ จุด steiner (-1 สำหรับทั้งหมดที่เป็นไปได้)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "ระยะมากสุด ถึง network"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "ชื่อของเมือง: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Terminal ไม่พอ (< 2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "จำนวนที่ต้องการของ จุด Steiner  > มากกว่าที่เป็นไปได้"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "จำนวนของจุดที่จะนำเข้า: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr "Terminal ที่ node [%d] ไม่สามารถเชื่อม terminal ที่ node [%d]"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr "[%d] (ไม่สามารถเข้าถึง) nodes rเอาออกจากรายการของจุด Steiner ตัวเลือก"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "MST costs = %f"
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "ค้นหา [%d]. จุด Steiner"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr "จุด Steiner ที่ node [%d] ได้เพิ่มไปที่ terminals (MST costs = %f)"
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "ไม่พบจุด Steiner -> leaving cycle"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "จำนวนของ จุด steiner (-1 สำหรับทั้งหมดที่เป็นไปได้)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "MST costs = %f"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5851,18 +5976,20 @@ msgstr "ไม่พบจุด Steiner -> leaving cycle"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "นำเข้า"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "จุด"
@@ -5893,9 +6020,9 @@ msgstr "ชื่อของ column ที่มี ค่าพิกัด y"
 msgid "Name of column containing z coordinate"
 msgstr "ชื่อของ column ที่มี ค่าพิกัด z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "สร้างผลลัพธ์ 3มิติ"
@@ -5945,7 +6072,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "ไม่สามารถเปิด cursor ที่เลือก: '%s'"
@@ -5964,7 +6091,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "x/y/z column จะต้องเป็น integer หรือ double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -5991,7 +6118,85 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d จุด เขียนไปที่ แผนที่เชิงเส้น"
 msgstr[1] "%d จุด เขียนไปที่ แผนที่เชิงเส้น"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Projection ของชุดข้อมูล ไม่เข้ากับ ตำแหน่งปัจจุบัน \n"
+"\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO คือ:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "นำเข้า PROJ_INFO ของชุดข้อมูล  คือ:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+#, fuzzy
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr "สร้าง ตำแหน่งใหม่โดยใช้ ตัวแปร  'location' จาก ชุดแผนที่ที่นำเข้า.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"ไม่สามารถ แปลงข้อมูล  projection ของแผนที่ที่นำเข้า ไปสู่รูปแบบของ GRASS เพื่อตรวจสอบ"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "ยกเลิกการตรวจสอบ projection"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "Projection ของ ชุดข้อมูลที่นำเข้า และ ตำแหน่งปัจจุบัน เข้ากันได้"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "ต้องการ 4 ตัวแปร สำหรับ ตัวแปร  'spatial'"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "ค่าพิกัด ตะวันออก ไม่ถูกต้อง"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "ไม่ทราบเงื่อนไข '%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6014,7 +6219,7 @@ msgstr[1] "%d จุด เขียนไปที่ แผนที่เช
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6023,7 +6228,7 @@ msgstr[1] "%d จุด เขียนไปที่ แผนที่เช
 msgid "statistics"
 msgstr "แผนที่เชิงภาพ, สถิติ"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6677,8 +6882,8 @@ msgstr "ชนิดของ Column ไม่รองรับ"
 msgid "Operator '%s' is not supported for type line"
 msgstr "คำสั่ง '%s' ใช้ไม่ได้กับ ชนิดเส้น"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "ไม่สามารถอ่าน แผนที่เชิงเส้น"
@@ -6735,12 +6940,12 @@ msgid "Breaking lines..."
 msgstr "กำลังตัดเส้น ..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "กำลัง เอาที่ซ้ำออก"
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "กำลังสร้าง boundaries ที่ nodes ..."
 
@@ -6749,11 +6954,11 @@ msgstr "กำลังสร้าง boundaries ที่ nodes ..."
 msgid "Merging lines..."
 msgstr "กำลังตัดเส้น ..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "กำลังแนบ  islands ..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "ไม่สามารถ คำนวน จุดศูนย์ถ่วง ของพื้นที่"
 
@@ -6768,12 +6973,13 @@ msgstr "กำลังค้นหา แผนที่เชิงเส้
 msgid "Attribute not found"
 msgstr "ไม่พบรายละเอียด"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "กำลังเขียน จุดศูนย์ถ่วง ..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "ไม่สามารถแทรกข้อมูลใหม่: '%s'"
@@ -6851,127 +7057,129 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "ไม่พบแผนที่เชิงเส้น <%s> ในชุดแผนที่ปัจจุบัน"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "วิธี Sampling"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "สร้าง แผนที่เชิงเส้น 2มิติ/3มิติ แบบสุ่ม."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "จำนวนของจุดที่จะสร้าง"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "กำลังอ่านแผนที่ที่จะนำเข้า"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 #, fuzzy
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "ค่าความสูง z น้อยสุด  (ต้องการ -z)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 #, fuzzy
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "ค่าความสูง z มากสุด  (ต้องการ -z)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "ชื่อของ column ที่มี ค่าพิกัด x"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "กำลังเขียน  columns ..."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "ชนิดของตารางสี"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "สร้างผลลัพธ์ 3มิติ"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Collecting Stats..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "จำนวนจุดจะต้อง > 0 (%d ที่ให้)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d ของ %d ข้อมูลที่เลือกจากแผนที่เชิงเส้น <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "ชื่อของชั้นข้อมูลเชิงเส้น"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "ไม่สามารถสร้างตาราง: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "แผนที่เชิงเส้น เริ่มต้น <%s> จุดอยู่นอกขอบเขต"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "แผนที่เชิงเส้น เริ่มต้น <%s> จุดอยู่นอกขอบเขต"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "กำลังสร้าง จุด ..."
 
@@ -7016,7 +7224,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "ชื่อของแผนที่เชิงภาพที่จะถูกค้นหา"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Column ที่จะปรับปรุง ด้วยผลลัพธ์การค้นหา"
@@ -7030,81 +7238,79 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "แสดง ค่าเฉลี่ย แทน ค่าช่วง"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "ไม่พบ Column <%s>"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Column <%s> ไม่พบในตาราง <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "ชนิดของ Column ไม่รองรับ"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "ชนิดของแผนที่เชิงภาพ คือ integer และ ชนิดของ Column คือ float"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "ชนิดแผนที่เชิงภาพ คือ  float and ชนิดของ Column คือ integer, ข้อมูลบางส่วน หายไป!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "%d พบ เส้น หรือ ขอบเขต ใน แผนที่เชิงเส้น <%s@%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d จุด อยู่นอกขอบเขต ข้ามไป"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%d จุด ไม่มีหมวดหมู่ ข้ามไป"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "หลายจุด (%d) ของหมวดหมู่ %d, ค่าถูกกำหนดเป็น 'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d หมวดหมู่อ่านจากแผนที่เชิงเส้น"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d หมวดหมู่ซ้ำในข้อมูลเชิงเส้น"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d หมวดหมู่อ่านจากตาราง"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d หมวดหมู่ จากข้อมูลเชิงเส้นที่ หายไปในตาราง"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d ปรับปรุง ผิดพลาด"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d ข้อมูล ปรับปรุงแล้ว"
@@ -7112,14 +7318,14 @@ msgstr "%d ข้อมูล ปรับปรุงแล้ว"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7207,7 +7413,7 @@ msgstr "Column แรก จะจัดหมวดหมู่ ของ  'fro
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "แผนที่เชิงเส้น <%s> ไม่อยู่ในชุดแผนที่ของผู้ใช้ และไม่สามารถปรับปรุงได้"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7265,6 +7471,150 @@ msgstr "ไม่มีจุดที่มี หมวดหมู่ [%d]"
 msgid "%d records updated"
 msgstr "%d ข้อมูล ปรับปรุงแล้ว"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "การติดต่อฐานข้อมูลไม่ได้ถูกกำหนด ใน ชั้นข้อมูล %d"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "ชนิดของ Column ไม่รองรับ"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "ไม่มีข้อมูลหมวด  [%d]"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "ไม่มีข้อมูลหมวด  [%d]"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "ไม่พบ Column <%s>"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "สร้าง แผนที่เชิงเส้น แบบจุด 3 มิติ"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "แปลง ชั้นข้อมูลเชิงเส้น OGR ไปเป็น แผนที่เชิงเส้น GRASS"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "จำนวนชั้นข้อมูล"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld หมวดหมู่"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "จำนวนชั้นข้อมูล"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "จำนวนชั้นข้อมูล"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "ชั้นข้อมูลที่จะเพิ่ม column"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "ชื่อ Column (ชนิดต้องเป็นตัวเลข)"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Columns"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "ชื่อของ  column สี (สำหรับใช้กับ -a )"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "ไม่ได้ระบุ column สี"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "ไม่สามารถอ่านค่าสีได้"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "จำกัดการนำเข้า ภายในขอบเขตปัจจุบัน"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "ไม่มี ตาราง"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7300,6 +7650,12 @@ msgstr "ข้อผิดพลาดใน Column กำหนดสี (%s) 
 msgid "Label column was not specified, no labels will be written"
 msgstr "ไม่ได้ระบุ Column แถบข้อความ,ไม่มีการเขียน แถบข้อความ"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "ไม่พบ Column <%s>"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7330,46 +7686,53 @@ msgstr "ไม่สามารถใช้ Column '%s'"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d ของ %d ข้อมูลที่เลือกจากแผนที่เชิงเส้น <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "ผ่าน %d ของ %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "มีปัญหาในการทำงานกับ Areas จากแผนที่เชิงเส้น <%s>, ดำเนินการต่อ ..."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "มีปัญหาในการทำงานกับ Lines จากแผนที่เชิงเส้น <%s>, ดำเนินการต่อ ..."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "กำลังเขียน แผนที่เชิงภาพ..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "สร้าง support ไฟล์สำหรับ <%s>..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "ไม่สามารถปรับปรุงสี จาก ฐานข้อมูลถ้าใช้เพียง use=attr"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "แปลง Areas: %d of %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "แปลง จุด/เส้น: %d ของ %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7433,15 +7796,17 @@ msgstr "แผนที่เชิงภาพสำหรับ Surface"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "สถิติ ที่จะใช้กับค่า แผนที่เชิงภาพ"
@@ -7482,7 +7847,7 @@ msgstr "ตัวแปร Column  ไม่สามารถ ร่วมก
 msgid "Unknown option '%s'"
 msgstr "ไม่ทราบเงื่อนไข '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "กำลังอ่านข้อมูล ..."
@@ -7501,12 +7866,17 @@ msgstr "ไม่สามารถใช้ Column ที่ระบุ"
 msgid "Get area %d failed"
 msgstr "อ่าน area [%d] ล้มเหลว"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "การนำเข้า DXF ไฟล์ ล้มเหลว!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "Area ที่ไม่มีจุดศูนย์ถ่วง (อาจจะใช้ได้ถ้าเป็น island)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "จุดศูนย์ถ่วง Area ที่ไม่มี หมวดหมู่"
 
@@ -7537,11 +7907,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "ชื่อของ column"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Columns"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7724,23 +8089,23 @@ msgstr "ชนิดข้อมูลที่จะ แปลงไปเป
 msgid "Incompatible types"
 msgstr "ชนิดไม่เหมาะสม"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "ไม่สามารถคัดลอกจากแผนที่เชิงเส้น <%s>"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr "สร้าง วงกลมเชื่อมกับ node (ปัญหาการเดินทางของ salesman)."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7748,78 +8113,84 @@ msgstr ""
 "หมายเหตุ TSP คือ NP-hard, Heuristic algorithm ใช้โดยคำสั่งนี้ "
 "และสร้างวงกลมอาจจะเป็นเงื่อนไขย่อย"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr "หมวดหมู่ของจุด ('cities') บน node (ชั้นข้อมูลกำหนดโดย  nlayer)"
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "ชั้นข้อมูล Node  (ใช้ในเมือง)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Arc backward direction cost column (number)"
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "ชื่อของไฟล์ผลลัพธ์ (ถ้าข้าม หรือใช้  \"-\" ให้ส่งออกไปที่ stdout)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr "หมวดหมู่ของจุด ('cities') บน node (ชั้นข้อมูลกำหนดโดย  nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "ระยะมากสุด ถึง network"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "ชื่อของเมือง: [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "เมืองไม่พอ (< 2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "สร้าง จุดศูนย์ถ่วง"
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "ไม่มีจุดที่มี หมวดหมู่ [%d]"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "ไม่มีข้อมูลสำหรับจุด (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Node สิ้นสุด [%d] ไม่สามารถเข้าถึงได้จาก node [%d]"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "ไม่สามารถเปิดไฟล์ <%s> เพื่อเขียน"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "เส้น"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 #, fuzzy
 msgid "Splits net by cost isolines."
 msgstr "ตัด net โดย cost isolines"
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7829,7 +8200,7 @@ msgstr ""
 "ตัด net ที่ band ระหว่าง cost isoline  (ทิศทางจาก centre). Centre node จะต้องเปิด "
 "(costs >= 0). Costs ของ centre node จะใช้ในการคำนวน."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7838,49 +8209,49 @@ msgstr ""
 "หมวดหมู่ของ centres (จุดบน nodes) ที่ net จะกำหนด, ชั้นข้อมูลสำหรับหมวดหมู่ ได้จากเงื่อนไข "
 "nlayer"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Costs สำหรับ isolines"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr " iso cost ผิด: %f"
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr "Iso cost: %f น้อยกว่าก่อนหน้า"
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, fuzzy, c-format
 msgid "Iso cost %d: %f"
 msgstr "Iso cost [%d] : [%f]"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr "Costs ไม่พอ, ทุกอย่างที่เข้าถึงได้ล้มเหลวที่  band แรก"
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr "Centre ที่ node ปิด (costs = -1) ยกเลิก"
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "จำนวนของ centres: [%d] (nlayer: [%d])"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr "centres สำหรับชั้นข้อมูลที่เลือก. ไม่มีอะไรที่จะกำหนด."
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "การคำนวน costs จาก centres ..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr "ไม่สามารถอ่าน ชิ้นส่วน, ชิ้นส่วนไม่มีเส้น"
 
@@ -8087,14 +8458,15 @@ msgstr "ไม่มีข้อมูลถูกเลือก, ไม่ม
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Path ถึง ASCII ไฟล์ ผลลัพธ์ หรือ ชื่อแผนที่เชิงเส้น ASCII ถ้าใช้ '-o' "
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "ถ้าไมกำหนด ให้อ่านจาก standard input"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8118,9 +8490,13 @@ msgstr "ถ้าไมกำหนด ให้อ่านจาก standard i
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8183,7 +8559,7 @@ msgstr "ตัวคั่น Field  (โหมด จุด)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "จำนวนจุดทศนิยม (เฉพาะ floating point เท่านั้น)"
 
@@ -8249,7 +8625,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "ไม่สามารถอ่าน ข้อมูล จากชั้นข้อมูลเชิงเส้น <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8352,9 +8728,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "ไม่สามารถเปิด ไฟล์ ที่จะนำเข้า  <%s>"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "ไม่สามารถสร้างดัชนีสำหรับตาราง <%s>, key <%s>"
@@ -8949,7 +9326,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "ชั้นข้อมูล  %d"
@@ -8970,7 +9347,7 @@ msgstr "ไม่สามารถคำนวน  Inverse matrix"
 msgid "Resolving conflicts..."
 msgstr "กำลังแก้ไข ส่วนที่ขัดกัน"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "การสร้าง  (%s) ..."
@@ -9000,201 +9377,205 @@ msgid "Performs vector based generalization."
 msgstr "สร้างแผนที่เชิงเส้นฐาน"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "สร้างแผนที่เชิงเส้นฐาน"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "การสร้าง Algorithm"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "สร้างแผนที่เชิงเส้นฐาน"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "การสร้าง Algorithm"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "ค่า Tolerance มากสุด"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "ตัวแปร Look-ahead"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr "เปอร์เซ็นต์ของจุดในผลลัพธ์ของ 'douglas_reduction' algorithm"
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr "Slide ของ จุดที่คำนวน ไปที่ จุดตั้งต้น"
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr "มุมน้อยสุด ระหว่าง 2 Consecutive segments ในวิธี Hermite"
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "องศาของ  threshold ในการสร้าง Network"
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr "Closeness threshold ในการสร้าง Network"
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "Betweeness threshold ในการสร้าง Network"
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr "ตัวแปร Snakes alpha"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr "ตัวแปร Snakes beta"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "จำนวนของการวนซ้ำ"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "ไม่สามารถคัดลอก ตาราง"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "ไม่ทราบ วิธี"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Column <%s> ไม่พบในตาราง <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "ไม่สามารถ สร้าง แผนที่เชิงเส้น <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "การเอาข้อมูลออก: "
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "สร้างแผนที่เชิงเส้นฐาน"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "การสร้าง  (%s) ..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "ความละเอียด ที่ใช้! [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "แบบอักษร  '%s' ไม่ได้เป็นแบบ FreeType font\n"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "แบบอักษร  '%s' ไม่ได้เป็นแบบ FreeType font\n"
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, fuzzy, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr "%d boundaries ไม่ถูกทำให้ลดลง เพราะ การลดจะทำให้ topology เสียหาย"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, fuzzy, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "จำนวนของ จุดหัก ถูกลดจาก %d เหลือ %d [%d%%]"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 #, fuzzy
 msgid "changed"
 msgstr "Rows เปลี่ยนแปลง"
@@ -9269,8 +9650,8 @@ msgstr "ขนาด Icon ของ ข้อมูลจุด (ในหน่
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "สีตัวอักษร"
 
@@ -9283,13 +9664,13 @@ msgstr "สีตัวอักษร"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "สี"
@@ -9483,14 +9864,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "เครื่องมือ การ Cleaning"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "เอา dangles ออก"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "เอา bridges ออก"
@@ -9543,14 +9924,6 @@ msgstr "กำลังอ่านข้อมูล ..."
 msgid "Constructing 3D hull..."
 msgstr "กำลังแปลง ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9635,7 +10008,9 @@ msgstr "Bilinear interpolation"
 msgid "Bicubic interpolation"
 msgstr "Bicubic interpolation"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 #, fuzzy
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Tychonov regularization weight"
@@ -10055,6 +10430,194 @@ msgstr "ผิดพลาดขณะอ่าน ASCII ไฟล์: '%s'"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: กำลังเขียน VTK-Header"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "ไม่พบข้อมูลจุด"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "แผนที่เชิงภาพ"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d clumps"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "การแยกกลุ่ม"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "ชื่อของ แผนที่เชิงเส้นที่จะนำเข้า"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "ระยะมากสุด ถึง network"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "จำนวนน้อยสุดของ pixel ใน class"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "การแยกกลุ่ม"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "ไม่สามารถ เปิดแผนที่ จุดศูนย์ถ่วง"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "จำนวน classes จะต้อง < 256!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "ขนาด Neighborhood จะต้องป็น บวก"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "กำลังนับ sites ใน quadrats ..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "ไม่พบ จุด, ข้าม type=point"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "สร้าง จุดศูนย์ถ่วง"
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s = %s -- ต้องมากกว่า 0"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "ใช้ ระยะมากสุด ระหว่างจุด: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "ภาพ 3d ที่จะเอาออก"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "ระยะมากสุด ถึง เส้นที่ใกล้ที่สุด"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "ค่าเบี่ยงเบน มาตรฐาน"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "ใช้ ระยะมากสุด ระหว่างจุด: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "กำลังหา cost path"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "npoints = %d, nterrain = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "ไม่พบเส้น , ข้าม type=line"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "กำลังสร้าง จุด ..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "กำลังเขียน แผนที่เชิงภาพ %s... "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "กำลังอ่านข้อมูลเพื่อนำเข้า ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "ไม่พบข้อมูลจุด"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "แผนที่เชิงเส้น, kernel density"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "พบจุดตัด %d"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "พบจุดตัด %d"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10193,27 +10756,27 @@ msgstr "ไม่สามารถปรับปรุง ฐานข้อ
 msgid "Impossible to write to aux table"
 msgstr "ไม่สามารถเขียน ฐานข้อมูล"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "การบำรุงรักษา Network."
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 #, fuzzy
 msgid "Performs network maintenance."
 msgstr "การบำรุงรักษา Network."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "ไม่สามารถปิด แผนที่เชิงเส้น <%s> ที่ topology ระดับ %d"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d จุดใหม่ เขียนไปที่ผลลัพธ์"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "[%d] เส้นที่ อ่านและเขียน ไปที่ผลลัพธ์"
@@ -10253,7 +10816,7 @@ msgstr "ชื่อของ แผนที่เชิงเส้นที
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr "ต้องการการทำงาน  'connect'.เชื่อมจุดตาม threshold ที่กำหนด."
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10267,14 +10830,14 @@ msgstr "ชื่อของ แผนที่เชิงเส้น จุ
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr "ต้องการการทำงานสำหรับ  'connect'"
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "คำสั่งที่จะทำงาน"
@@ -10303,48 +10866,132 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "หา shortest path บน vector network."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr "ต้องการการทำงาน  'connect'.เชื่อมจุดตาม threshold ที่กำหนด."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "ชื่อของไฟล์ที่จะนำเข้า"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "ต้องการการทำงานสำหรับ  'connect'"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "ให้ค่า หมวดหมู่ที่ไม่ซ้ำ กับจุดใหม่"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "สำหรับการทำงาน  'nodes'"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "จุดสิ้นสุด ของแผนที่เชิงเส้น"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "ชั้นข้อมูลเส้น"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "การทำงาน ที่ไม่ทราบ"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "ค่า Threshold ต้อง >= 0"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "ไม่สามารถอ่านจาก <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "ไม่สามารถ แทรกลงในตาราง: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "ไม่สามารถ เปิด แผนที่เชิงเส้น <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "ไม่สามารถ สร้าง แผนที่เชิงเส้น <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "ตาราง <%s> ไม่มีอยู่ในฐานข้อมูล <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> โดยตัวขับ <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "ไม่สามารถสร้างตาราง <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "ไม่สามารถคัดลอกจากแผนที่เชิงเส้น <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "ไม่สามารถสร้างตาราง <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10476,7 +11123,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d หมวดหมู่ อ่านจากแผนที่"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "ไม่สามารถ คำนวน จุดศูนย์ถ่วง ของพื้นที่"
@@ -10591,7 +11238,7 @@ msgstr "การติดต่อฐานข้อมูลไม่ได้
 msgid "Key column type is not integer"
 msgstr "Key column จะต้องเป็น integer"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "ไม่สามารถ fetch ข้อมูลจากตาราง  <%s>"
@@ -11361,7 +12008,7 @@ msgstr "ใช้รูปแบบ ESRI-style .prj  (ใช้กับ Shapefi
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "ใช้รูปแบบ ESRI-style .prj  (ใช้กับ Shapefile ผลลัพธ์เท่านั้น)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11626,8 +12273,8 @@ msgstr "ตำแหน่ง ที่มี แผนที่เชิงเ
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Sum Variance"
@@ -11636,7 +12283,7 @@ msgstr "Sum Variance"
 msgid "Mapset containing input vector map"
 msgstr "ชุดแผนที่ที่มี แผนที่ที่จะนำเข้า"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "แสดงชื่อ ของกรอบ"
@@ -11646,7 +12293,7 @@ msgstr "แสดงชื่อ ของกรอบ"
 msgid "Name of input vector map to re-project"
 msgstr "ชื่อของแผนที่เชิงภาพที่จะ re-project"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Path ไปที่ฐานข้อมูล GRASS สำหรับตำแหน่งที่จะนำเข้า"
 
@@ -11661,8 +12308,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "Break"
@@ -11695,17 +12342,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "ไม่สามารถ นำเข้า และ ส่งออก ตำแหน่ง ที่เหมือนกัน"
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "กำลังตรวจสอบ ตำแหน่ง <%s>, ชุดแผนที่ <%s>:"
@@ -12070,219 +12719,386 @@ msgstr ""
 "ตาราง: %s\n"
 "Key Column: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "สร้างชั้นข้อมูลแผนที่เชิงเส้นใหม่ โดย รวมชั้นข้อมูลอื่น"
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "ชื่อสำหรับ แผนที่เชิงเส้นผลลัพธ์ ที่ ขอบเขตของ แผนที่เชิงเส้นผลลัพธ์ถูกเขียน"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
-msgstr "เพิ่ม ไฟล์ไปที่ ไฟล์ที่มีอยู่แล้ว  (ไฟล์ที่ถูกเขียนทับจะต้องทำงานได้)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "ไม่ต้องสร้าง topology"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "คัดลอก ตารางรายละเอียดด้วย"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "เฉพาะตารางของ ชั้นข้อมูลที่ 1 ที่จะรองรับ"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr "เพิ่ม ไฟล์ไปที่ ไฟล์ที่มีอยู่แล้ว  (ไฟล์ที่ถูกเขียนทับจะต้องทำงานได้)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "ตารางหายไป"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Key columns แตกต่าง"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "จำนวนของ Columns แตกต่าง"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "ชื่อ Column แตกต่าง"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "ชนิด Column แตกต่าง"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "ความยาวของ string columns แตกต่าง"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "ไม่พบ Key column"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "แผนที่ผลลัพธ์ มไใช่ 3มิติ"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "ไม่สามารถสร้างตาราง <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "การปรับปรุง แผนที่เชิงเส้น <%s@%s>..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "การอ่าน แผนที่เชิงเส้น <%s> ผิดพลาด - ข้อมูลบางส่วนอาจจะไม่ถูกต้อง"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "กำลังสร้าง Topology สำหรับแผนที่เชิงเส้น <%s> ..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "จุดตัดที่ขอบจะถูกดูด"
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "บรรทัดร่วมระหว่างไฟล์จะต้องถูกแก้ไข"
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "ข้อมูล Header จะต้องถูกแก้ไข"
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d จุดที่แผนที่เชิงเส้น ถูกปรับปรุง"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "ไม่สามารถเปิด cursor ที่เลือก: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "ไม่สามารถ fetch row"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "ไม่ทราบชนิด Column"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "ไม่สามารถแทรกข้อมูลใหม่: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "ยกเลิกการตรวจสอบ projection"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "แปลง ชั้นข้อมูลเชิงเส้น OGR ไปเป็น แผนที่เชิงเส้น GRASS"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "นำเข้า ล้มเหลว"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "จำนวนชั้นข้อมูล"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "ชั้นข้อมูลที่จะเพิ่ม column"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "นำเข้า ขอบเขตย่อย เท่านั้น"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "ขอบเขตย่อย "
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "รูปแบบ: xmin,ymin,xmax,ymax - ตามปกติใช้ W,S,E,N"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "ชื่อของ ตำแหน่ง ใหม่ ที่จะสร้าง"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "ช่วงการกรอง สำหรับข้อมูล  z  (น้อยสุด,มากสุด)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "ค่า Integer ถูกนำเข้า"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "ค่า Integer ถูกนำเข้า"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "ชื่อของ แผนที่เชิงเส้น นำเข้า ของ sparse points"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "ชื่อของ แผนที่เชิงเส้นที่จะนำเข้า"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "ค่า Integer ถูกนำเข้า"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Correlation"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "ค่า Integer ถูกนำเข้า"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "กำลังนำเข้า จุด ..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> จำนวนจุด ไม่ถูกต้อง"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "ชื่อของ ตำแหน่ง ใหม่ ที่จะสร้าง"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "แสดง ประวัติ ของ แผนที่เชิงภาพ"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "ยกเลิก projection ของชุดแผนที่ (ใช้ location's projection)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "จำกัดการนำเข้า ภายในขอบเขตปัจจุบัน"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "แผนที่เชิงเส้นนำเข้า ที่มี จุด"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "ขยาย ขอบเขต ของตำแหน่ง ในชุดข้อมูลใหม่"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่าตั้งต้น: input)"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "เขียนทับ Projection (ใช้ location's projection)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "ไม่สามารถอ่าน หน่วยการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "กลุ่ม <%s> ไม่มีอยู่"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "ไม่สามารถ อธิบายฐานข้อมูล <%s> ได้"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "ไม่ทราบเงื่อนไข '%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "จำนวนชั้นข้อมูล"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr "เลือก ขอบเขตปัจจุบัน หรือ เงื่อนไขด้านตำแหน่ง,อันใดอันหนึ่ง"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "ต้องการ 4 ตัวแปร สำหรับ ตัวแปร  'spatial'"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12290,119 +13106,172 @@ msgstr ""
 "ไม่สามารถแปลง projection ของแผนที่ที่จะนำเข้า ไปเป็นรูปแบบ GRASS; ไม่สามารถสร้าง "
 "ตำแหน่งใหม่ได้"
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "ไม่สามารถสร้าง location: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"ไม่สามารถ แปลงข้อมูล  projection ของแผนที่ที่นำเข้า ไปสู่รูปแบบของ GRASS เพื่อตรวจสอบ"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "ยกเลิกการตรวจสอบ projection"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "กำลังนำเข้า จุด ..."
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "กำลังนำเข้า จุด ..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Projection ของชุดข้อมูล ไม่เข้ากับ ตำแหน่งปัจจุบัน \n"
-"\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO คือ:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d จุดถูกอ่าน"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "นำเข้า PROJ_INFO ของชุดข้อมูล  คือ:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d จุดถูกอ่าน"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-#, fuzzy
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr "สร้าง ตำแหน่งใหม่โดยใช้ ตัวแปร  'location' จาก ชุดแผนที่ที่นำเข้า.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "Projection ของ ชุดข้อมูลที่นำเข้า และ ตำแหน่งปัจจุบัน เข้ากันได้"
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> โดยตัวขับ <%s>"
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "กำลังนำเข้า จุด ..."
+msgid "%lu points imported (limit was %d)"
+msgstr "%d จุดถูกอ่าน"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported"
 msgstr "%d จุดถูกอ่าน"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d จุด อยู่นอก threshold"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were filtered out by return number"
 msgstr "%d จุด อยู่นอก threshold"
 
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d จุด อยู่นอก threshold"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "%d จุดสุดท้ายจะถูกยกเลิก"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "ไม่สามารถ เปิด แผนที่เชิงเส้น <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "ไม่สามารถเปิดฐานข้อมูล <%s> โดยตัวขับ <%s>"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12410,22 +13279,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "สร้างแผนที่เชิงเส้นใหม่ แบบ อ่านอย่างเดียว เชื่อมกับ ชั้นข้อมูล OGR"
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "ชั้นข้อมูล <%s> ไม่สามารถใช้งานได้"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "ไม่สามารถเขียน ลบ %d"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "ไม่สามารถสร้างไฟล์ <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้ว"
@@ -12435,12 +13304,12 @@ msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้
 msgid "Name of input OGR or PostGIS data source"
 msgstr "ชื่อของ ตารางผลลัพธ์"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "ไฟล์แผนที่เชิงภาพที่จะนำเข้า"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12452,26 +13321,30 @@ msgstr ""
 "\t\tESRI Shapefile: directory ที่มี shapefiles\n"
 "\t\tMapInfo File: directory ที่มี mapinfo ไฟล์"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่าตั้งต้น: input)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "แสดงรายการ ชั้นข้อมูล ในแหล่งข้อมูล และ ออก"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "แสดงรายการ ชั้นข้อมูล ในแหล่งข้อมูล และ ออก"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 #, fuzzy
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "รูปแบบ: จำนวนชนิดของชั้นข้อมูล min max"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12521,7 +13394,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "ค่าพิกัดไม่ถูกต้อง"
+msgstr "cost column ของจุด"
 
 #: ../vector/v.delaunay/main.c:88
 msgid ""
@@ -12660,145 +13533,145 @@ msgstr "ระยะมากสุด ระหว่าง theoretical arc แ
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "ไม่ต้องแสดง ตัวเลข ของหมวดหมู่"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "แสดง รายละเอียด ของแผนที่เชิงภาพ"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "magnitude_map ต้องการ  Scale "
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' ต้อง > 0 สำหรับ 'cats'."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Toleranc ถูกกำหนดใหม่เป็น %g (หน่วยแผนที่)"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "คำร้องขอให้ลบ ไม่ถูกต้อง"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Tolerance ในหน่วยแผนที่: %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "ไม่สามารถเลือกข้อมูลจากตารางได้"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Extruding areas..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "รายละเอียด ผิด ขนาด(%.3f) สำหรับหมวดหมู่ %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Tolerance ในหน่วยแผนที่: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Extruding areas..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "buffers เส้น ... "
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "กำลังสร้าง ส่วนของ topology ..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "ดูดเข้าหา ขอบเขต ..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "ตัด polygons"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Breaking boundaries..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "กำลังสร้าง boundaries ที่ nodes ..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "กำลังคำนวน Centrality measures ..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "กำลังสร้าง boundaries ที่ nodes ..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Breaking boundaries..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "กำลังคำนวน Centrality measures ..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "ไม่สามารถ คำนวน จุดศูนย์ถ่วง ของพื้นที่"
@@ -13072,39 +13945,48 @@ msgstr "ชื่อของไฟล์ผลลัพธ์"
 msgid "%d features written to '%s'."
 msgstr "%ld bytes ไดเขียนไปที่ '%s'"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "ตำแหน่ง: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "กำหนด subnets สำหรับศูนย์กลางที่ใกล้ที่สุด (ทิศทางจาก ศูนย์กลาง)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr "Centre node จะต้องเปิด (costs >= 0). Costs ของ centre node ใช้ในการคำนวน"
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "จำนวนของ centres: [%d] (nlayer: [%d])"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 #, fuzzy
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr "centres สำหรับชั้นข้อมูลที่เลือก. ไม่มีอะไรที่จะกำหนด."
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "การคำนวน costs จาก centres ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "การคำนวน costs จาก centres ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13160,7 +14042,7 @@ msgstr "%s=%s - จำนวนจุดที่ใช้ทำ  interpolation
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13826,7 +14708,7 @@ msgstr "ไม่มีข้อมูลในตาราง  LR"
 msgid "More than one record in LR table"
 msgstr "มีข้อมูลมากกว่า 1 ในตาราง  LR"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14124,46 +15006,56 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr "%d boundaries ไม่ถูกทำให้ลดลง เพราะ การลดจะทำให้ topology เสียหาย"
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "แสดง รายละเอียด ของแผนที่เชิงภาพ"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "เงื่อนไข WHERE ของประโยค SQL ปราศจาก คำเฉพาะ 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "ตัวแยกทางดิ่ง ของข้อมูลผลลัพธ์"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "ขอบเขต\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "กำหนดค่าฐานข้อมูลจาก ข้อมูลเชิงเส้น"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "ไม่สามารถปิด แผนที่เชิงเส้น <%s> ที่ topology ระดับ %d"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "ไม่สามารถเปิด cursor ที่เลือก"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "%s: ไม่สามารถหา ขอบเขต สำหรับเส้น"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "%s: ไม่สามารถหา ขอบเขต สำหรับเส้น"
@@ -14204,46 +15096,50 @@ msgstr "จำนวนมากสุดของจุดในชิ้นส
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "เขียนจุดหักของเส้น"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "ค่า Smoothing จะต้องเป็น บวก"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "ไม่ทราบชนิดของ  Column  '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "ไม่สามารถอ่าน หน่วย projection สำหรับแผนที่ที่จะนำเข้า"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "ความยาว %f\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "ความยาว %f\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "จำนวน classes จะต้อง < 256!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -14366,7 +15262,9 @@ msgstr "มุมหมุน(หน่วยองศา ตามเข็ม
 msgid "Number of vertex points per grid cell"
 msgstr "จำนวนของการวนซ้ำ"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "ชนิดของข้อมูล"
@@ -14466,10 +15364,13 @@ msgid "Writing out vector columns..."
 msgstr "กำลังเขียน  columns ..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14481,6 +15382,7 @@ msgstr "แผนที่เชิงภาพ, แผนที่ algebra"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14636,8 +15538,9 @@ msgstr "ตำแหน่งการวางตัว"
 msgid "Offset label in y-direction"
 msgstr "ระยะร่น แถบข้อความ ในแนว y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "ชื่อแบบตัวอักษร"
 
@@ -14707,6 +15610,130 @@ msgstr "กำลังหา quadrats ..."
 msgid "Counting points quadrats..."
 msgstr "กำลังนับ sites ใน quadrats ..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "การจำแนก จุด"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "ไม่พบข้อมูลจุด"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "ค่า Integer ถูกนำเข้า"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "ค่า Integer ถูกนำเข้า"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> จำนวนจุด ไม่ถูกต้อง"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "ค่า Tolerance มากสุด"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "จำนวนของการวนซ้ำ"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "จำนวนของการวนซ้ำ"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "ค่าเบี่ยงเบน มาตรฐาน"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14721,28 +15748,28 @@ msgstr "ช่วง สำหรับ <%s> ใช้ไม่ได้"
 msgid "Target location <%s> not found"
 msgstr "ไม่พบขอบเขต <%s>"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "ชุดแผนที่  [%s] ใน ตำแหน่งเป้าหมาย [%s] - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "ไม่อนุญาติให้ทำ"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "ไม่พบ"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15088,11 +16115,6 @@ msgstr "%s จะต้องรวมค่านั้นๆ แทนพื
 msgid " Database connection not defined for layer <%s>"
 msgstr "การติดต่อฐานข้อมูลไม่ได้ถูกกำหนด ใน ชั้นข้อมูล %d"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "ชนิดของ Column ไม่รองรับ"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "ไม่สามารถ Sort กลุ่มของ key/value"
@@ -15178,16 +16200,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d ข้อมูล ปรับปรุงแล้ว"
 msgstr[1] "%d ข้อมูล ปรับปรุงแล้ว"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "แปลง ชั้นข้อมูลเชิงเส้น OGR ไปเป็น แผนที่เชิงเส้น GRASS"
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "ชื่อ แหล่งข้อมูล OGR"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "ไฟล์แผนที่เชิงภาพที่จะนำเข้า"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15197,12 +16221,12 @@ msgstr ""
 "\t\tESRI Shapefile: directory ที่มี shapefiles\n"
 "\t\tMapInfo File: directory ที่มี mapinfo ไฟล์"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr "ชื่อชั้นข้อมูล OGR. ถ้าไม่ได้กำหนด, ชั้นข้อมูลทั้งหมดจะถูกนำเข้า"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15212,235 +16236,237 @@ msgstr ""
 "\t\tESRI Shapefile: directory ที่มี shapefiles\n"
 "\t\tMapInfo File: directory ที่มี mapinfo ไฟล์"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "ขนาดน้อยสุดของ area ที่จะนำเข้า (หน่วย กำลัง 2)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr "Areas and islands ที่เล็กกว่า ถูกข้าม. ต้องใหญ่กว่า ระยะดูด^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "ทางเลือก เปลี่ยนแบบการนำเข้า ตั้งต้น"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "ไม่มีจุดเริ่มต้น"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "กำลังสร้าง boundaries ที่ nodes ..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "สร้าง  polylines จาก เส้น หรือ ขอบเขต"
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "เอา จุดศูนย์ถ่วงของ area ที่ ซ้ำออก"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "การดูด threshold สำหรับขอบเขต"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' สำหรับ ไม่มีการดูดเข้าหา"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr "รายการชื่อของ column ที่จะใช้แทนชื่อเดิม, ชื่อแรกใช้สำหรับ column หมวดหมู่"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "ผิดพลาดขณะอ่าน ASCII ไฟล์: '%s'"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "ชื่อของ Column ที่ใช้เป็น แถบข้อความของหมวดหมู่ป้าย ของแผนที่เชิงภาพ"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "ชื่อของ column"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "ถ้าไม่กำหนด จะใช้ชื่อของแผนที่นำเข้า"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "แสดงรายการ รูปแบบที่รองรับ และ ออก"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "แสดงรายการ ชั้นข้อมูล ในแหล่งข้อมูล และ ออก"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "ไม่ต้อง clean รูปปิด (ไม่แนะนำ)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "บังคับออกผลลัพธ์ แบบ  integer"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "ไม่สามารถอ่าน หน่วยการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "แสดง ตัวแปรการเชื่อมต่อ และ ออก."
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "เปลี่ยนชื่อ column ไปเป็น ตัวอักษรแบบเล็ก"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "ไม่สามารถเปิดแหล่งข้อมูล <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "ตำแหน่งตัวชี้ ไม่รองรับใน ตัวขับ MySQL"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "แหล่งข้อมูล มี %d ชั้นข้อมูล:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "ชั้นข้อมูล <%s> ไม่สามารถใช้งานได้"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "ไม่สามารถอ่าน ข้อมูล จากชั้นข้อมูลเชิงเส้น <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Column <%s> ไม่พบในตาราง <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "ระยะ Bufferในหน่วย ของแผนที่"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "ไม่สามารถ สร้าง แผนที่เชิงเส้น <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "ไม่พบ Key column '%s'"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Key column จะต้องเป็น integer"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Column <%s> ไม่พบในตาราง <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr "กำลังเขียน column <%s> ด้วยความยาวที่กำหนด %d ตัวอักษร (อาจจะตัดให้สั้นลง)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr "กำลังเขียน column <%s> ด้วยความยาวที่กำหนด %d ตัวอักษร (อาจจะตัดให้สั้นลง)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15449,57 +16475,57 @@ msgstr ""
 "ความกว้างสำหรับ column %s กำหนดเป็น 255 (ไม่ได้ระบุโดย OGR), "
 "บางตัวอักษรอาจจะถูกตัดให้สั้นลง!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr "กำลังเขียน column %s ด้วยความยาวที่กำหนด %d ตัวอักษร (อาจจะตัดให้สั้นลง)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "ชนิดของ Column ใช้ไม่ได้  (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "กำลังนำเข้าแผนที่ %d  ข้อมูล ..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s ไม่มี geometry"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "ตัด polygons"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "ดูด ขอบเขต (threshold = %.3e):"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Breaking boundaries..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "เปลี่ยน boundary dangles ไปเป็นเส้น:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "เปลี่ยน boundary bridges ไปเป็นเส้น:"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "กำลังคำนวน Centrality measures ..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15510,117 +16536,117 @@ msgstr ""
 "เชื่อมมากกว่า 1 row ในตารางรายละเอียด. จำนวนข้อมูลสำหรับ areas นั้นเก็บแบบ "
 "หมวดหมู่ในชั้นข้อมูล %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d รูปปิดที่นำเข้า"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d รูปปิดที่นำเข้า"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Area ทั้งหมด: %e (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Area ทั้งหมด: %e (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Area ที่มีการซ้อนทับกัน: %e (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Area ที่มีการซ้อนทับกัน: %e (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Area ที่ไม่มีหมวดหมู่: %e (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Area ที่ไม่มีหมวดหมู่: %e (%d areas)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "การดูด threshold สำหรับขอบเขต"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "นำเข้า ล้มเหลว"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "ไม่สามารถ drop ตาราง: %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "ข้อมูล Projection ถูกปรับปรุงแล้ว!"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "%s มีอยู่แล้วในชุดแผนที่"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15840,6 +16866,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "การเชื่อมต่อฐานข้อมูล ไม่ได้ถูกกำหนดสำหรับชั้นข้อมูล %d. ให้ใช้ v.db.connect ก่อน."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "ไม่พบ แผนที่เชิงภาพ albedo <%s>"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16003,7 +17034,7 @@ msgstr "เงื่อนไข 'sides' ใช้เฉพาะกับ ข
 msgid "Querying database... "
 msgstr "กำลังค้นหาฐานข้อมูล ... "
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
@@ -16012,12 +17043,12 @@ msgstr ""
 "ค้นหาหมวดหมู่  '0' (ไม่มีหมวดหมู่) จะไม่ทำงานเพราะว่ามีหมวดหมู่ที่ค้นหามากเกินไป (%d). "
 "ค่าทั้งหมดที่รายงานออกมาสำหรับ for cat 0 ไม่ถูกต้อง."
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr "การค้นหาได้หลายผลลัพธ์, ค่าผลลัพธ์จะถูกกำหนดเป็น NULL (หมวดหมู่ [%d])"
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "ไม่สามารถ fetch ข้อมูล"
 
@@ -16203,14 +17234,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้ว"
@@ -16347,14 +17378,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "ให้ค่า หมวดหมู่ที่ไม่ซ้ำ กับจุดใหม่"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "สร้างเส้นขนาน ไปที่ เส้นผลลัพธ์"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "%d พบ เส้น หรือ ขอบเขต ใน แผนที่เชิงเส้น <%s@%s>"
 msgstr[1] "%d พบ เส้น หรือ ขอบเขต ใน แผนที่เชิงเส้น <%s@%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16847,19 +17883,24 @@ msgstr "timestamp ไม่ถูกต้อง"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16873,6 +17914,7 @@ msgstr "timestamp ไม่ถูกต้อง"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16885,7 +17927,7 @@ msgstr "timestamp ไม่ถูกต้อง"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17045,6 +18087,7 @@ msgid "Unable to map image file"
 msgstr "ไม่สามารถ กำหนดแบบ ไฟล์ภาพ ได้"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17062,14 +18105,14 @@ msgstr "ไม่สามารถ กำหนดแบบ ไฟล์ภา
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17107,6 +18150,55 @@ msgstr "ไม่สามารถอ่าน  sufficient colors."
 msgid "Using private colormap for DirectColor visual."
 msgstr "การใช้ private colormap สำหรับ DirectColor visual."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "แสดง มาตราส่วนแบบแท่ง บนจอแสดงผล"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "สร้าง ชุดแผนที่ถ้า ยังไม่มี"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "เอากรอบทั้งหมดออก และลบหน้าจอ"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "แสดง search path ของชุดแผนที่"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "แสดง ตัวแปรการเชื่อมต่อ และ ออก."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr "ตำแหน่งแบบ เปอร์เซ็นต์ ของค่าพิกัดจอ (0,0 ซ้ายล่าง)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17126,7 +18218,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17139,7 +18231,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17215,18 +18307,23 @@ msgid ""
 msgstr "ส่งค่าของแผนที่เชิงภาพ ที่ตำแหน่ง ของ จุดเชิงเส้น ไปที่ตาราง."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17241,6 +18338,7 @@ msgstr "ส่งค่าของแผนที่เชิงภาพ ท
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17338,6 +18436,93 @@ msgstr "น้ำหนักเป็นเปอร์เซ็นต์ ข
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "แสดงรายการแผนที่เชิงเส้น ใน ตำแหน่งที่จะนำเข้า และออก"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "ชืาอของ แผนที่เชิงภาพ 3 มิติ"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "จำนวน ชุด ที่จะพิมพ์"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "แผนที่เชิงภาพที่จะนำเข้า"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -17470,7 +18655,7 @@ msgstr "สร้างฐานข้อมูลเปล่า"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17484,8 +18669,8 @@ msgid "rename"
 msgstr "ชื่อ"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17495,9 +18680,9 @@ msgid "input"
 msgstr "ใส่:"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17512,6 +18697,77 @@ msgstr "การร้องขอ"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "สร้าง  topology ใหม่ ทั้งหมดของแผนที่เชิงเส้นใน ชุดแผนที่ที่กำลังใช้งาน"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "สร้างชั้นข้อมูลเชิงเส้น จาก contour ของแผนที่เชิงภาพ"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Contrast"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "การเพิ่มค่าระดับของ contour"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "รายการ ค่าระดับ contour"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "ค่าระดับน้อยสุด contour"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "ค่าระดับมากสุด contour"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "จำนวนจุดน้อยสุดของเส้น contour (0 -> ไม่จำกัด)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "แผนที่เชิงภาพที่จะนำเข้า"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "ไม่ต้องสร้างตารางรายละเอียด"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17520,7 +18776,7 @@ msgstr "แสดงรายการแผนที่เชิงเส้น
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17578,8 +18834,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17690,74 +18947,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "ชืาอของ แผนที่เชิงภาพ 3 มิติ"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "ชื่อของ แผนที่เชิงภาพ ที่มี ผลลัพธ์ classification"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "ชื่อของ แผนที่เชิงภาพ ที่มี ผลลัพธ์ classification"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17792,47 +19018,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "ชื่อของฐานข้อมูลใหม่"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "ชื่อของแผนที่เชิงภาพ"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "จำนวน ชุด ที่จะพิมพ์"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "แผนที่เชิงภาพที่จะนำเข้า"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17933,8 +19142,8 @@ msgstr "ตัวคูณ"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "ชื่อของไฟล์ผลลัพธ์"
+msgid "Name for output image (or text file for -t)"
+msgstr "ชื่อของไฟล์ผลลัพธ์  (ไม่ต้องใส่ นามสกุล)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17951,6 +19160,54 @@ msgstr "แถบข้อความ ของค่าพิกัด แท
 msgid "Use gnuplot for display"
 msgstr "แสดง ตัวอักษร"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "TIFF world file ผลลัพธ์"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "คั่นค่ารายการด้วย Comma"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "ชื่อของไฟล์ รายงาน ผลลัพธ์"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "สร้างฐานข้อมูลเปล่า"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "จำนวน ชุด ที่จะพิมพ์"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "แผนที่เชิงเส้นผลลัพธ์ hue"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17982,32 +19239,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "ขยาย ขอบเขต ของตำแหน่ง ในชุดข้อมูลใหม่"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "เขียนทับ Projection (ใช้ location's projection)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "ไม่สามารถอ่าน หน่วยการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18193,6 +19428,20 @@ msgstr "จำนวน cells tile ที่จะซ้อนทับในแ
 msgid "Output field separator"
 msgstr "ตัวแยกของ field ผลลัพธ์"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "แสดงรายการแผนที่เชิงเส้น ใน ตำแหน่งที่จะนำเข้า และออก"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "แสดง แผนที่เชิงภาพ และ สัญลักษณ์ บนหน้าต่างแสดงผล"
@@ -18295,8 +19544,15 @@ msgstr "สร้างฐานข้อมูลเปล่า"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "ชื่อของฐานข้อมูลใหม่"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "สร้าง, การจัดการแผนที่"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "ชื่อของ แผนที่เชิงภาพ ที่มีอยู่"
@@ -18307,7 +19563,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr "ต่อภาพตั้งแต่ 4 ภาพ และ ขยาย colormap; สร้าง map *.mosaic"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18316,15 +19572,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "ชื่อของฐานข้อมูลใหม่"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18372,7 +19628,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "ลบ เนื้อหาของกรอบแสดงผล ด้วยสีที่กำหนด"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "ชื่อของไฟล์ผลลัพธ์"
 
@@ -18452,16 +19708,27 @@ msgstr "ชื่อของไฟล์ที่จะนำเข้า"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่าตั้งต้น: input)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18538,12 +19805,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18599,7 +19873,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "ชื่อของแผนที่เชิงภาพ cover"
+msgstr "ชื่อของแผนที่เชิงภาพ ที่ 2"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18671,13 +19945,12 @@ msgid ""
 "co1+col2)"
 msgstr "ค่าที่จะปรับปรุง  column ด้วย (ค่า varcharต้องใช้ single quotes, เช่น 'grass')"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18689,12 +19962,12 @@ msgstr ""
 "สร้าง แผนที่เชิงภาพ จาก การรวบรวม ของ ค่าพิกัดจำนวนมาก โดยใช้ Univariate Statistics"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "อ่านไฟล์ข้อมูล ของ ขอบเขต แล้ว ออก"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "ในโหมดการกาด, การแสดง ใช้แบบ script"
 
@@ -18710,7 +19983,7 @@ msgid "ASCII file containing input data"
 msgstr "ไฟล์ ASCII ที่มีข้อมูลที่จะนำเข้า (หรือ \"-\" เพื่ออ่านจาก stdin)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "สถิติ ที่จะใช้กับค่า แผนที่เชิงภาพ"
 
@@ -18718,14 +19991,14 @@ msgstr "สถิติ ที่จะใช้กับค่า แผนท
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "ชนิดที่จัดเก็บ สำหรับ แผนที่เชิงภาพ ผลลัพธ์"
 
@@ -18765,17 +20038,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "ตัวคูณมาตราส่วน สำหรับ ค่า ใน Column รายละเอียด"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "เปอร์เซ็นต์ของแผนที่ ที่จะจัดเก็บในหน่วยความจำ"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "pth เปอร์เซ็นต์ ของ ค่า"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18818,19 +20091,15 @@ msgid ""
 "on the fly."
 msgstr "แปลง ชั้นข้อมูลเชิงเส้น OGR ไปเป็น แผนที่เชิงเส้น GRASS"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "ไฟล์แผนที่เชิงภาพที่จะนำเข้า"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "แผนที่เชิงเส้นผลลัพธ์ สำหรับ ข้อผิดพลาด"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "ใช้ ขอบเขตปัจจุบันกับ แผนที่ที่จะนำเข้า"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18930,7 +20199,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19018,24 +20287,18 @@ msgstr "แสดงรายการแผนที่เชิงเส้น
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "จำนวน ชุด ที่จะพิมพ์"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "ชื่อของแผนที่เชิงภาพ aspect"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "แผนที่เชิงภาพที่จะนำเข้า"
@@ -19152,17 +20415,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "จำนวนจุด ของ interpolation"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19170,10 +20437,6 @@ msgid ""
 "space time raster datasets."
 msgstr "แสดงรายการแผนที่เชิงเส้น ใน ตำแหน่งที่จะนำเข้า และออก"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19288,78 +20551,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "ชื่อของ  location ใหม่ที่จะสร้าง"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "แสดงรายการ rule แล้วออก"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "แสดงรายการ rule แล้วออก"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "แสดงรายการ rule แล้วออก"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "การมองเห็น"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "ตารางของระบบ แทนที่จะใช้ ต่รางของผู้ใช้"
@@ -19475,10 +20754,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19533,6 +20808,56 @@ msgstr "ทดสอบ ตัวขับฐานข้อมูล, ฐาน
 msgid "Test name"
 msgstr "ชื่อทดสอบ"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "ชื่อของ column รายละเอียด ที่จะใช้สำหรับ แถบข้อความ"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Smooth corners ของ ข้อมูล พื้นที่"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "ค่าเลื่อนสำหรับ ค่าพิกัด z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr "เขียนค่าแผนที่เชิงภาพ เป็น ค่าพิกัด  z. ตารางไม่ได้ถูกสร้าง. ขณะนี้ทำงานกับ จุด เท่านั้น"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "ไม่ต้องสร้าง topology"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr "ใช้ ค่าแผนที่เชิงภาพ เป็น หมวดหมู่ แทน unique sequence (CELL เท่านั้น)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19605,6 +20930,16 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+msgid "Data type"
+msgstr "ชนิดข้อมูล"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "เงื่อนไข z ใช้ได้กับจุดเท่านั้น"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19780,20 +21115,26 @@ msgid "Description of the space time dataset"
 msgstr "ชื่อของฐานข้อมูลใหม่"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "ชื่อของฐานข้อมูลใหม่"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19837,13 +21178,13 @@ msgstr "Tasseled Cap (Kauth Thomas) การแปลงสำหรับข
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "จำนวนชั้นข้อมูล"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19928,7 +21269,7 @@ msgstr "แสดงรายการแผนที่เชิงเส้น
 msgid "Neighborhood size"
 msgstr "ขนาด Neighborhood"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "จำนวนจุด ของ interpolation"
@@ -20031,24 +21372,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "ความละเอียดของแผนที่ผลลัพธ์"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "ชื่อเรื่อง ของ แผนที่เชิงภาพ ผลลัพธ์"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "ความละเอียด ที่ใช้! [%g]"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "ชื่อไฟล์ ผลลัพธ์ <%s> ไม่ถูกต้อง"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "อย่าสร้าง ขอบเขตที่ cropping optimization"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "ตำแหน่งบนหน้าจอในหน่วย ค่าพิกัดภูมิศาสตร์"
@@ -20113,17 +21471,37 @@ msgstr "ชื่อ เก่าและใหม่ของ  column (เก
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "Uploads ค่าแผนที่เชิงเส้น ที่ตำแหน่งของจุด ไปที่ตาราง"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "Columns"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "ชื่อของ แผนที่เชิงเส้น ที่จะแก้ไข"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Columns"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "ชื่อของ column รายละเอียด ที่จะใช้สำหรับ แถบข้อความ"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "ระยะ Bufferในหน่วย ของแผนที่"
@@ -20214,6 +21592,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20227,11 +21606,15 @@ msgid "Sill value"
 msgstr "%s:ค่าที่กำหนด ไม่ถูกต้อง"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20348,28 +21731,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "คำนวน univariate statistics จาก non-null cells ของแผนที่เชิงภาพ"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "sites"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "สร้างฐานข้อมูลเปล่า"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Propagate NULLs"
 
@@ -20405,7 +21783,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "สร้าง ชั้นแผนที่เชิงภาพ ด้วย  contiguous areas grown ด้วย 1 cell"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20419,7 +21797,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "รัศมีของ buffer ใน cell เชิงภาพ"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metric"
 
@@ -20437,12 +21815,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "จำนวนจุด ของ interpolation"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20468,7 +21846,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "การเติม no-data areas ใน แผนที่เชิงภาพ ใช้ v.surf.rst splines interpolation"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20495,6 +21873,16 @@ msgstr "ตัวแปร Spline smoothing"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Bicubic หรือ bilinear spline interpolation กับ Tykhonov regularization."
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "ตำแหน่ง: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20504,19 +21892,10 @@ msgstr "ยอมให้เชื่อม ตาราง กับ ตาร
 msgid "Vector map to which to join other table"
 msgstr "แผนที่เชิงเส้นที่จะ เชื่อม กับตารางอื่น"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr "ชั้นข้อมูลที่จะเพิ่ม"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "Columns"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20544,17 +21923,17 @@ msgstr "จำนวนบรรทัดที่จะปรากฎ ใน 
 msgid "Imports space time raster dataset."
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "ใช้ ขอบเขตปัจจุบันกับ แผนที่ที่จะนำเข้า"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้ว"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20633,14 +22012,17 @@ msgstr "ไม่พบแผนที่เชิงภาพ 3D <%s>"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20671,11 +22053,11 @@ msgstr "ไม่สามารถ กำหนด หน่วยความ
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "ไม่สามารถอ่าน ช่วง fp สำหรับแผนที่เชิงภาพ <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "ผิดพลาดขณะ อ่านไฟล์ประวัติ"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20683,8 +22065,8 @@ msgstr "ไม่สามารถ ปิด แผนที่เชิงภ
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "ผิดพลาด ขณะเขียน ข้อมูล"
 
@@ -20737,6 +22119,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "ไม่สามารถสร้างไฟล์ <%s>"
@@ -20898,9 +22281,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "ชนิดของ groundwater flow"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20929,7 +22313,10 @@ msgstr "Direct cholesky solver ใช้งานไม่ได้กับ spa
 msgid "Unable to create and solve the linear equation system"
 msgstr "ไม่สามารถสร้าง และ แก้ปัญหา สมการเชิงเส้น"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "ไม่สามารถ สร้าง แผนที่เชิงภาพ <%s>"
@@ -20999,6 +22386,142 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "แผนที่เชิงภาพ %i Filename: %s มีอยู่แล้ว. จะถูกเขียนทับ!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Costs สำหรับ isolines"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "โปรดใส่ 3 แผนที่  g3d RGB"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "แผนที่เชิงเส้น <%s> ไม่พบ"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "กำลังคำนวน ค่าเฉลี่ยของ class ..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "ชื่อของ แผนที่เชิงเส้น จุด สำหรับ แก้ไขตารางรายละเอียด"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "ชื่อของ แผนที่เชิงเส้น ที่จะแก้ไข"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "ชื่อของชั้นข้อมูลเชิงภาพที่จะ เป็นผลลัพธ์"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "ความยาว %f\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "จำนวนของการวนซ้ำ"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "ความกว้างของ Stream  (หน่วย เมตร). ค่าตั้งต้น ความกว้างของ cell ภาพ"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "vector, interpolation"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "ไม่ได้ระบุ ข้อมูลแผนที่"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "ชื่อฐานข้อมูลที่จะนำเข้า"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "จำนวนมากสุด ของการวนซ้ำ"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "จำนวนมากสุด ของการวนซ้ำ"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "จำนวน cell ระหว่าง flowlines"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "ไม่สามารถ อธิบายฐานข้อมูล <%s> ได้"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "เกิดข้อผิดพลาด ขณะกำลังอ่านข้อมูล hue"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21130,11 +22653,11 @@ msgstr "ไม่สามารถเปิด ASCII ไฟล์ <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "แผนที่เชิงภาพ 3 มิติสำหรับ ปรับปรุง ค่า null"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "รายการของค่า cell ที่จะกำหนดเป็น NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "ค่าที่จะใช้แทน ค่า null โดย"
 
@@ -21159,7 +22682,7 @@ msgstr "modifyNull: ผิดพลาดขณะ flushing tiles ทั้ง
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: ผิดพลาดขณะปิด ไฟล์ชั่วคราว"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "แผนที่เชิงเส้น, metadata"
@@ -21168,6 +22691,83 @@ msgstr "แผนที่เชิงเส้น, metadata"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "สร้าง 3D NULL-value bitmap ไฟล์."
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "แผนที่เชิงภาพ"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"สร้าง แผนที่เชิงภาพ จาก การรวบรวม ของ ค่าพิกัดจำนวนมาก โดยใช้ Univariate Statistics"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "ไม่ต้องทำดัชนีจุด โดย  raster cell"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "จำนวนของการวนซ้ำ"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "ไม่พบแผนที่เชิงภาพ 3D <%s>"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "กำลังเขียน ใน แผนที่ ... "
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "แผนที่เชิงภาพ 3 มิติสำหรับ ปรับปรุง ค่า null"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "ค่าเลื่อนสำหรับ ค่าพิกัด z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "การแปลง, transformation"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "ไม่สามารถสร้าง ไฟล์ชั่วคราวได้"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21221,13 +22821,13 @@ msgstr ""
 msgid "Update range"
 msgstr "ช่วงข้อมูลที่จะส่งออก"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "ไม่สามารถอ่าน ไฟล์หมวดหมู่ของแผนที่เชิงภาพ <%s@%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "ตาราง cat สำหรับ  [%s] กำหนดเป็น %s"
@@ -21285,7 +22885,7 @@ msgstr "เกิดข้อผิดพลาด ขณะกำลังอ
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "กำลังอ่านข้อมูล ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "ผิดพลาดขณะปิดไฟล์ g3d"
@@ -21672,7 +23272,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "ค่าแผนที่เชิงภาพ 3 มิติ ผิด! ค่าต้องอยู่ในช่วง ระหว่าง 0 ถึง 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21682,7 +23282,7 @@ msgstr "วิธี ที่ไม่รู้จัก <%s>"
 msgid "Aggregate operation"
 msgstr "การทำงานคำสั่ง Aggregate"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21717,6 +23317,38 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "ไม่สามารถ ระบุ cell buffers ได้"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Variance"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "รวม ชั้นข้อมูลแผนที่ แดง, เขียว และน้ำเงิน ลงใน ชั้นข้อมูล composite"
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "ขนาดของ จุด ที่จะ cache"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "ไม่สามารถ กำหนดหน่วยความจำได้"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "กำลังเขียน แผนที่เชิงภาพ"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22057,38 +23689,38 @@ msgstr "แสดงแบบ shell script"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22394,13 +24026,13 @@ msgid "Unknown operation '%s'"
 msgstr "การทำงาน ที่ไม่ทราบ"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr "ข้าม\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Location %s ถูกสร้าง!"
@@ -22474,9 +24106,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s:ไฟล์เหมือนกัน, ไม่ต้องคัดลอก"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> มีอยู่แล้ว"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> มีอยู่แล้วในชุดแผนที่ <%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22594,8 +24226,8 @@ msgid ""
 "system"
 msgstr "บังคับใช้ ข้อมูล datum transformation ของระบบค่าพิกัดที่จะนำเข้า"
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -22857,9 +24489,9 @@ msgstr "รายการชั้นข้อมูลที่จะนำเ
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "แผนที่เชิงภาพ"
@@ -22874,16 +24506,16 @@ msgstr "รูปแบบการหาชื่อแผนที่ (ค่
 msgid "File name exclusion pattern (default: none)"
 msgstr "รูปแบบการหาชื่อแผนที่ (ค่าตั้งต้น: all)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 #, fuzzy
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "ใช้ regular expression แทน wildcard"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 #, fuzzy
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "ใช้ regular expression แทน wildcard"
@@ -22894,7 +24526,7 @@ msgid "Remove base raster maps"
 msgstr "เอา dangles ออก"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "ไม่สามารถเปิดไฟล์ <%s> ได้"
@@ -22940,80 +24572,70 @@ msgstr "เปลี่ยนชื่อไฟล์ชิ้นส่วนข
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr "แสดงรายการไฟล์ข้อมูลฐาน ของ GRASS ที่ผู้ใช้ระบุชนิดไปที่ standard output."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "รูปแบบการหาชื่อแผนที่ (ค่าตั้งต้น: all)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr "รูปแบบการหาชื่อแผนที่ (ค่าตั้งต้น: all)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "รายการ ชุดแผนที่ (ค่าตั้งต้น: path ค้นหาปัจจุบัน)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "ชื่อของชุดแผนที่ (ค่าตั้งต้น: ที่กำลังทำงานอยู่)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "กำหนด ขอบเขตปัจจุบัน จาก ชื่อของขอบเขต"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "แสดง ชนิดของ แผนที่เชิงภาพ"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "หยุดพิมพ์ ข้อมูลส่วนหัว"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "รายการแบบละเอียด (แสดงหัวข้อแผนที่ด้วย)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "weight= และ -c คือ mutually exclusive"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "weight= และ -c คือ mutually exclusive"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "กลุ่ม <%s> ไม่มีอยู่"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "ไม่สามารถอ่านส่วนหัว ของแผนที่เชิงภาพ 3D <%s@%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "ไม่สามารถเปิด แผนที่เชิงเส้น  <%s> ที่ระดับ  topological  %d"
@@ -23217,52 +24839,52 @@ msgstr "ไม่สามารถปรับปรุงขอบเขตป
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr "ไม่สามารถเปลี่ยนขอบเขตตั้งต้น ชุดแผนที่ปัจจุบันไม่ใช่ <PERMANENT>"
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "ข้อมูลที่จะนำเข้าไม่ถูกต้อง <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "ไม่สามารถอ่าน ข้อมูลการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "ไม่สามารถอ่าน หน่วยการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "ไม่สามารถปรับปรุง ตัวแปร แลต/ลอง ของ  projection ได้"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "ข้อผิดพลาดใน pj_do_proj (projection ของค่าพิกัดที่จะนำเข้า)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 #, fuzzy
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "คูณใช้ค่า แลต/ลอง อยู่แล้ว ให้ใช้  -p แทน"
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 #, fuzzy
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr "คุณใช้ ค่าตำแหน่ง xy(ไม่สามารถกำหนด  projection ได้, ให้ใช้  -p แทน)."
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23270,7 +24892,7 @@ msgstr ""
 "ไม่สามารถออกผลลัพธ์ WGS84 ได้ เพราะ  location ไม่มี datum transformation "
 "parameters. ลองใช้  g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23494,38 +25116,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "ไม่พบ Column <%s>"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "ไฟล์แผนที่เชิงภาพที่จะนำเข้า"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23845,11 +25488,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "My first vector module"
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "ไม่สามารถ เปิดแผนที่ จุดศูนย์ถ่วง"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24018,7 +25656,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "เปอร์เซ็นต์ที่เสร็จ..."
 
@@ -24439,7 +26077,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "ไม่สามารถอ่าน  ค่า key การฉายแผนที่ ของ ตำแหน่งปัจจุบัน"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24632,148 +26270,148 @@ msgstr "ewres=%f"
 msgid "Writing new raster map..."
 msgstr "กำลังเขียน แผนที่เชิงภาพ"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Re-projects แผนที่เชิงภาพ จาก ตำแหน่งที่เลือก ไปที่ ตำแหน่งปัจจุบัน"
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "ตำแหน่ง ที่มี แผนที่เชิงเส้น"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "ชุดแผนที่ที่มี แผนที่ที่จะนำเข้า"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "ชื่อของแผนที่เชิงภาพที่จะ re-project"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่าตั้งต้น: input)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "ความละเอียดของแผนที่ผลลัพธ์"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "รายการแผนที่เชิงภาพ ในตำแหน่งผลลัพธ์ และ ออก"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "แสดงรายการแผนที่เชิงเส้น ใน ตำแหน่งที่จะนำเข้า และออก"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "แสดง ตัวแปรของการติดต่อแผนที่ ทั้งหมด และ ออก ในแบบ shell script"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "ไม่สามารถ นำเข้า และ ส่งออก ตำแหน่ง ที่เหมือนกัน"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr "ไม่สามารถอ่าน ข้อมูล  projection ของ แผนที่ผลลัพธ์"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "ไม่สามารถอ่าน หน่วย  projection ของ แผนที่ผลลัพธ์"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr "ไม่สามารถอ่าน ค่า key  projection ของ แผนที่ผลลัพธ์"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "ชุดแผนที่ <%s> ในตำแหน่งที่จะนำเข้า <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "ไม่พบ แผนที่เชิงภาพ <%s> ในตำแหน่ง <%s> ในชุดแผนที่ <%s>"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "ไม่สามารถอ่าน ข้อมูล  projection สำหรับแผนที่ที่จะนำเข้า"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "ไม่สามารถอ่าน หน่วย projection สำหรับแผนที่ที่จะนำเข้า"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "ไม่สามารถอ่าน ค่า key  projection ของ แผนที่ที่จะนำเข้า"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "ไม่สามารถทำงานกับ ข้อมูล unprojected  (ตำแหน่ง xy)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "ชุดแผนที่ <%s> ในตำแหน่งที่จะนำเข้า <%s> - %s"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "ใส่:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Cols: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Rows: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "North: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "South: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "West: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "East: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "EW-res: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "NS-res: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "ผลลัพธ์:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Projecting..."
 
@@ -24826,12 +26464,6 @@ msgstr "ผิดพลาด ขณะเขียน ไฟล์ segment"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr "ยอมให้สร้าง และ/หรือ เปลี่ยนแปลง ไฟล์ support ของชั้นข้อมูลเชิงภาพ."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "ชื่อเรื่อง ของ แผนที่เชิงภาพ ผลลัพธ์"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "ตัวอักษรที่จะใช้ สำหรับหน่วยของแผนที่"
@@ -24860,22 +26492,22 @@ msgstr "ไม่สามารถเปิด signature ไฟล์"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "ไม่พบ แผนที่เชิงภาพ <%s> ในชุดแผนที่"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] คือ reclass ของแผนที่อื่น. กำลังออก."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "กำลังเขียน Null ไฟล์ใหม่ สำหรับ [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "กำลังเอา Null ไฟล์ สำหรับ[%s] ออก...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "เสร็จเรียบร้อย"
 
@@ -25662,7 +27294,7 @@ msgstr "%s = %s -- ต้องมากกว่า 0"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "ไม่สามารถเปิด %s"
@@ -25871,8 +27503,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "ตัวคูณและตัวชดเชย ของหมวดหมู่ 2 คู่, สำหรับ $1 และ $2"
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "ไม่สามารถอ่าน ไฟล์หมวดหมู่ของแผนที่เชิงภาพ <%s@%s>"
@@ -25956,12 +27588,12 @@ msgstr "ไม่สามารถอ่านจาก <%s>"
 msgid "Can't get cell header"
 msgstr "ไม่สามารถอ่าน ส่วนหัวของ cell"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "OOPS: rows เปลี่ยนจาก %d เป็น %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "OOPS: cols เปลี่ยนจาก %d เป็น %d"
@@ -26150,10 +27782,6 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "จำนวนของ บรรทัด header ที่จะข้าม ที่ด้านบนของ ไฟลืที่นำเข้า (โหมด จุด)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "ช่วงการกรอง สำหรับข้อมูล  z  (น้อยสุด,มากสุด)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -26161,7 +27789,7 @@ msgstr "ช่วงการกรอง สำหรับข้อมูล
 msgid "Advanced Input"
 msgstr "ขั้นสูง"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26188,7 +27816,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr "โปรดระบุ จำนวน column ที่ใช้ได้"
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "ค่าพิกัด ตะวันออก ไม่ถูกต้อง"
@@ -26198,15 +27826,15 @@ msgstr "ค่าพิกัด ตะวันออก ไม่ถูกต
 msgid "Invalid vrange"
 msgstr "ค่าพิกัด ตะวันออก ไม่ถูกต้อง"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr "ไม่สามารถคำนวน เปอร์เซ็นต์ โดยไม่ ระบุเงื่อนไข pth"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr "ไม่สามารถคำนวน  trimmed mean โดยไม่ ระบุเงื่อนไข trim"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26229,7 +27857,7 @@ msgid "Reading input data..."
 msgstr "กำลังอ่านข้อมูลเพื่อนำเข้า ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "ผ่าน #%d (ของ %d) ..."
@@ -26274,16 +27902,16 @@ msgstr "ค่าพิกัด y ไม่ดี  บรรทัดที่
 msgid "Writing to output raster map..."
 msgstr "กำลังเขียน แผนที่เชิงภาพ %s... "
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "พบ %d จุด ใน ขอบเขต"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "ช่วง:     น้อยสุด         มากสุด\n"
@@ -26440,10 +28068,6 @@ msgstr "ชื่อของแผนที่เชิงภาพผลลั
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "รูปแบบ GIS ที่จะเขียน (case sensitive, ดูตาม -l flag)"
 
-#: ../raster/r.out.gdal/main.c:192
-msgid "Data type"
-msgstr "ชนิดข้อมูล"
-
 #: ../raster/r.out.gdal/main.c:202
 #, fuzzy
 msgid "Creation option(s) to pass to the output format driver"
@@ -26985,104 +28609,110 @@ msgstr "ค่าพิกัด y ไม่ถูกต้อง <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "คำเตือน, ข้ามจุดที่อยู่นอกหน้าต่าง: %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "ชุดแผนที่ของ แผนที่เชิงภาพ ที่จะนำเข้า"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "แผนที่เชิงภาพ 3 มิติสำหรับ ปรับปรุง ค่า null"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "ถ้า แผนที่เป็น  floating-point ให้ทำงาน"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "ถ้า แผนที่เป็น  integer ให้ทำงาน"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "ถ้า แผนที่ไม่มี  NULL-value bitmap ไฟล์ ให้ทำงาน"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "สร้าง NULL-value bitmap ไฟล์ ที่สมเหตุสมผลของ ข้อมูล cell ทั้งหมด"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "เอา NULL-value bitmap ไฟล์ ออก"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "สร้าง NULL-value bitmap ไฟล์ ที่สมเหตุสมผลของ ข้อมูล cell ทั้งหมด"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "ไม่พบ แผนที่เชิงภาพ <%s> ในชุดแผนที่"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "ค่า สำหรับ null ไม่ถูกต้อง"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้วและจะถูกเขียนทับ"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "แผนที่เชิงภาพ Terrain (DEM)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "แผนที่เชิงภาพ Terrain (DEM)"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "จุดเริ่มต้น ของแผนที่เชิงภาพ"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "กำลังเขียน Null ไฟล์ใหม่ สำหรับ [%s]... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "แผนที่เชิงเส้น <%s> ไม่พบ"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "กำลังเอา Null ไฟล์ สำหรับ[%s] ออก...\n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s:ค่าที่กำหนด ไม่ถูกต้อง"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s:ค่าที่กำหนด ไม่ถูกต้อง"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "การเขียน แผนที่เชิงภาพ <%s>"
@@ -27412,7 +29042,7 @@ msgstr "ไฟล์ ASCII ที่มีข้อมูลที่จะน
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "ชนิดของข้อมูล"
+msgstr "ชื่อเรื่องแผนที่ผลลัพธ์"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27494,89 +29124,179 @@ msgstr "กำลังแปลง ..."
 msgid "File <%s> created"
 msgstr "ไฟล์ <%s> ถูกสร้าง"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "สร้าง แผนที่เชิงภาพ จาก การรวบรวม ของ ค่าพิกัดจำนวนมาก โดยใช้ Univariate Statistics"
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "ไฟล์ ที่มี recode rules"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "ช่วงการกรอง สำหรับข้อมูล  z  (น้อยสุด,มากสุด)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "สถิติ ที่จะใช้กับค่า แผนที่เชิงภาพ"
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr "ตัด <trim> เปอร์เซ็นต์ ของ ค่า เล็กสุด และ ใหญ่สุด ของค่า สังเกตุ"
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "ชื่อเรื่องแผนที่ผลลัพธ์"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "กำหนด ขอบเขต จากชั้นข้อมูลเชิงภาพ"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "กลุ่ม <%s> ไม่มีอยู่"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "zrange จะไม่ถูกใส่ใน account ระหว่างการอ่าน"
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "ไม่ทราบเงื่อนไข '%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "แผนที่ไม่ถูกต้อง <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "ไม่สามารถเปิดไฟล์ผลลัพธ์ <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "กำลังเขียน ไปที่ แผนที่ ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "พบ %d จุด ใน ขอบเขต"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "ไม่สามารถเปิดไฟล์  [%s] เพื่ออ่าน"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "สร้าง ชั้นแผนที่เชิงภาพ ด้วย  contiguous areas grown ด้วย 1 cell"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "ชื่อของชั้นข้อมูลที่จะส่งออก"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "ระยะมากสุดระหว่าง จุด ในหน่วยแผนที่"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "ระยะมากสุด ถึง เส้นที่ใกล้ที่สุด"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "อย่างน้อยต้องเลือก 1 เงื่อนไข จาก %s"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Metric ที่ไม่รู้จัก: [%s]"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "ระยะมากสุดระหว่าง จุด ในหน่วยแผนที่"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "ไม่สามารถสร้าง ไฟล์ชั่วคราว"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27715,7 +29435,7 @@ msgstr "[%s]: ไม่ใช่ค่าสี"
 msgid "Converting <%s>..."
 msgstr "กำลังแปลง  %s..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้ว"
@@ -27820,7 +29540,7 @@ msgid "There are no valid locations in the current region"
 msgstr "ไม่มี ตำแหน่ง ในขอบเขตปัจจุบัน"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28403,7 +30123,7 @@ msgstr "[%s]: ไม่ใช่ค่าสี"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28838,7 +30558,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "แสดง  stats ในรูปแบบ shell script"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28860,11 +30580,6 @@ msgstr "ผ่าน: %d\n"
 msgid "Unable to write to temp file"
 msgstr "ไม่สามารถสร้าง ไฟล์ชั่วคราวได้"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "กำลังสร้าง จุด ..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -28983,7 +30698,7 @@ msgid "Writing output raster map..."
 msgstr "กำลังเขียน แผนที่เชิงภาพ %s... "
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -28994,43 +30709,43 @@ msgstr "การเขียน แผนที่เชิงภาพ <%s>"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "สร้าง Area statistics สำหรับ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "wtrshed ผ่าน %d"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "ค่าพิกัด E และ N ของจุดเริ่มต้น"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "ค่าพิกัด ตะวันออก ไม่ถูกต้อง <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "ค่าพิกัด เหนือ ไม่ถูกต้อง <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "คำเตือน, ข้ามจุดที่อยู่นอกหน้าต่าง: %.4f,%.4f"
@@ -29123,22 +30838,22 @@ msgid "Invalid map type"
 msgstr "แผนที่ไม่ถูกต้อง <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "SECTION %d: กำลังปิดแผนที่."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "SECTION %d: Watershed determination."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "SECTION 1a (of %1d): Initiating Memory."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "SECTION 1b (of %1d): Determining Offmap Flow."
@@ -29264,25 +30979,25 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 #, fuzzy
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "SECTION 3: Accumulating Surface Flow."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "SECTION 3: Accumulating Surface Flow."
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29290,8 +31005,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29835,183 +31550,188 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "กด <return> ด้วยตัวมัน เพื่อคำถามต่อไป ถ้าไม่มี แผนที่ blocking"
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "ใส่:"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "ชื่อของแผนที่เชิงภาพ"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "แผนที่นำเข้า: ทั้งหมดของ overland flow ต่อ cell"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "ชื่อของแผนที่เชิงภาพ ที่จะนำเข้า"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "แผนที่นำเข้า: terrain ที่กั้น overland surface flow, สำหรับ USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "แผนที่นำเข้า: ขนาดเล็กสุดของ exterior watershed basin"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "แผนที่นำเข้า: ความยาวสุดของ  surface flow, สำหรับ USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "แผนทีผลลัพธ์: จำนวนของ cells ที่ drain  ผ่านแต่ละ cell"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "แผนที่ ดัชนี topographic ผลลัพธ์"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "แผนทีผลลัพธ์: แต่ละ half-basin ต้องมีค่าที่ไม่ซ้ำ"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "แผนทีผลลัพธ์: slope length และ steepness (LS) factor  สำหรับ USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "แผนทีผลลัพธ์: slope steepness (S) factor สำหรับ USLE"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "ตัวคูณการแปลง สำหรับ z-values"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "ยอมให้น้ำไหลตามแนว ราบ และ แนวดิ่ง"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "ใช้ disk swap memory: การทำงานช้า"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "เสียใจ, คุณต้องเลือกแผนที่ผลลัพธ์"
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s = %s -- ต้องมากกว่า 0"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30022,40 +31742,40 @@ msgstr ""
 "    basin, stream, half.basin, slope, หรือ lS\n"
 "    คุณต้องใส่ค่า สำหรับ ตัวแปร basin threshold."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "ไม่รองรับ ตำแหน่ง แลต/ลอง"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] "SECTION 1 กำลังเริ่มต้น: Initiating Variables. %d sections total."
 msgstr[1] "SECTION 1 กำลังเริ่มต้น: Initiating Variables. %d sections total."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "SECTION 1b (of %1d): Determining Offmap Flow."
@@ -30064,20 +31784,30 @@ msgstr "SECTION 1b (of %1d): Determining Offmap Flow."
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "กำลังนำเข้า จุด ..."
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "กำลังนำเข้า จุด ..."
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "กำลังนำเข้า จุด ..."
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -30108,32 +31838,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "แผนที่เชิงภาพ, resample"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Resamples ชั้นข้อมูลแผนที่เชิงภาพ โดยใช้ aggregation"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "วิธี  Aggregation"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Weight ตามพื้นที่  (ช้ากว่า)"
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "ไม่สามารถอ่าน ตารางสี  %s"
@@ -30531,7 +32261,7 @@ msgstr "ไม่สามารถสร้าง ตารางสีแบ
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "ไม่สามารถสร้าง ตารางสีแบบ grey.eq สำหรับ แผนที่ floating point"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "ไม่ทราบสี: [%s]"
@@ -30918,7 +32648,7 @@ msgid ""
 msgstr "คำนวน univariate statistics จาก non-null cells ของแผนที่เชิงภาพ"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30933,11 +32663,25 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"ใช้ความละเอียดเดียวกับ แผนที่ RASTER3D สำหรับ แผนที่ผลลัพธ์ 2 มิติ, "
+"โดยไม่ขึ้นอยู่กับการกำหนดขอบเขตปัจจุบัน"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "คำนวน univariate statistics จาก non-null cells ของแผนที่เชิงภาพ"
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "weight= และ -c คือ mutually exclusive"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31231,33 +32975,33 @@ msgstr "เปิดแผนที่เชิงภาพ  %s - ครั้
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "แผนที่ที่จะนำเข้าจะต้องเป็นชนิดเดียวกัน. CELL, FCELL หรือ DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: ไม่สามารถหา ขอบเขต สำหรับเส้น"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "ขอบเขต :  l = %d, r = %d, t = %d, b = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "จำนวน ที่ผ่าน %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "ลบแล้ว %d  pixels "
 msgstr[1] "ลบแล้ว %d  pixels "
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Thinning สำเร็จโดยสมบูรณ์"
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr "Thinning ไม่สำเร็จ, พิจราณาเพิ่มตัวแปร  'iterations'"
 
@@ -31553,32 +33297,12 @@ msgstr "Contrast"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "สร้างชั้นข้อมูลเชิงเส้น จาก contour ของแผนที่เชิงภาพ"
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "การเพิ่มค่าระดับของ contour"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "รายการ ค่าระดับ contour"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "รายการ ค่าระดับ contour"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "ค่าระดับน้อยสุด contour"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "ค่าระดับมากสุด contour"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "จำนวนจุดน้อยสุดของเส้น contour (0 -> ไม่จำกัด)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32186,55 +33910,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "ไม่สามารถสร้าง และ แก้ปัญหา สมการเชิงเส้น"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "แผนที่เชิงภาพ ที่จะวางตัว"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "ค่า Eigen:"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "ค่า Eigen:"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "ไฟล์ ที่มี reclass rules"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Seed สำหรับ การสร้างตัวเลขแบบสุ่ม"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "กำลังเขียน ใน แผนที่ ... "
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "weight= และ -c คือ mutually exclusive"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "ตัวแปร"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "การคำนวน ปรากฎว่า Floating point ผิดพลาด"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "การคำนวน ปรากฎว่า Overflow"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "ไม่ทราบชนิด: %d"
@@ -32284,80 +34009,80 @@ msgstr "ไม่ทราบข้อผิดพลาด สำหรับ
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "ไม่สามารถอ่าน ไฟล์สีสำหรับแผนที่เชิงภาพ <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "ไม่สามารถ สร้าง  btree สำหรับแผนที่เชิงภาพ <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "ตัวปรับปรุงแผนที่ ไม่ถูกต้อง: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "ตัวแปรไม่ได้ถูกกำหนด  '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "แผนที่ไม่ถูกต้อง <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "คำสั่ง ไม่ได้ถูกกำหนด  '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "ค่าตัวแปร น้อย เกินไป (%d) สำหรับ คำสั่ง %s()"
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "ค่าตัวแปร มาก เกินไป (%d) สำหรับ คำสั่ง %s()"
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "ชนิดตัวแปร ไม่ถูกต้อง สำหรับคำสั่ง %s()"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "ผิดพลาดภายใน สำหรับคำสั่ง %s()"
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "จำนวนตัวแปรไม่ถูกต้อง  (%d) สำหรับ operator '%s'"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "Format_expression_prec: ไม่ทราบชนิด: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "ไม่สามารถ ปิด แผนที่เชิงภาพ <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "ไม่สามารถ ปิด แผนที่เชิงภาพ ผลลัพธ์"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "คำสั่งที่รู้จัก:"
@@ -32544,7 +34269,7 @@ msgstr "Forward sweep เสร็จเรียบร้อย"
 msgid "Reverse sweep complete"
 msgstr "Reverse sweep เสร็จเรียบร้อย"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 #, fuzzy
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
@@ -32552,15 +34277,15 @@ msgid ""
 msgstr ""
 "ไม่สามารถ แปลงข้อมูล  projection ของแผนที่ที่นำเข้า ไปสู่รูปแบบของ GRASS เพื่อตรวจสอบ"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "PROJ_INFO ของ ตำแหน่ง  คือ:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "PROJ_INFO ของ ชุดข้อมูล  คือ:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -32602,14 +34327,6 @@ msgstr "ชื่อของฐานข้อมูลใหม่"
 msgid "Band to select (default is all bands)"
 msgstr "เลือก Band  (ค่าตั้งต้น: band ทั้งหมด)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32633,7 +34350,7 @@ msgstr "รูปแบบ: จำนวนชนิดของชั้นข
 msgid "%s= or %s= must be given"
 msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "ไม่สามารถปรับปรุงขอบเขตปัจจุบัน"
@@ -32653,7 +34370,7 @@ msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล
 msgid "Reading band %d of %d..."
 msgstr "กำลังอ่านแผนที่ %s ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "band ที่เลือกเลือก  (%d) ไม่มี\n"
@@ -32723,100 +34440,115 @@ msgstr "สร้าง support ไฟล์สำหรับ <%s>..."
 msgid "Link to raster map <%s> created."
 msgstr "แผนที่เชิงภาพ <%s> มีอยู่แล้ว"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "นำเข้า ไฟล์แผนที่เชิงภาพ binary ไปที่ ชั้นข้อมูลเชิงภาพ GRASS"
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "ไฟล์แผนที่เชิงภาพที่จะนำเข้า"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "เลือก Band  (ค่าตั้งต้น: band ทั้งหมด)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "ชื่อของ ตำแหน่ง ภาพเป้าหมาย"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "ชื่อของ ตำแหน่งที่ จะอ่าน projection สำหรับ GCPs transformation"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "ไม่สามารถอ่าน  band ภาพ"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "ชื่อของ แผนที่ความสูงเชิงภาพ ที่จะนำเข้า  [หน่วยเมตร]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "ไม่สามารถ อธิบายฐานข้อมูล <%s> ได้"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "เขียนทับ Projection (ใช้ location's projection)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "ใช้ จำนวน band แทนที่จะใช้ ชื่อสีของ band"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "แสดงตาราง แล้ว ออก"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "คุณต้องระบุตำแหน่งเป้าหมาย ให้แตกต่างจาก ตำแหน่ง ผลลัพธ์"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "คุณจะต้องระบุ แผนที่ บน และ ล่าง"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "จำนวนของ subrangesจะต้อง เท่ากับ หรือl มากกว่า 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "ไม่สามารถเปิดแหล่งข้อมูล <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 #, fuzzy
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
@@ -32825,99 +34557,104 @@ msgstr ""
 "แผนที่ที่จะนำเข้า มีการหมุน - ไม่สามารถนำเข้าได้. คุณต้องใช้  'gdalwarp' "
 "tเพื่อแปลงแผนที่ให้ไปตามทิศเหนือ"
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "กำลังเตรียม รายงาน ..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "ไม่สามารถเปิด signature ไฟล์"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "ไม่สามารถอ่าน  band ภาพ"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "การคัดลอก %d GCPS ในไฟล์ points สำหรับ %s"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "Re-projecting แผนที่เชิงเส้น ..."
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, fuzzy, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "ใส่ค่าตัวแปร projection  (แบบ PROJ.4)"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "ผลลัพธ์ตัวแปร  projection  (แบบ PROJ.4)"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, fuzzy, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "ผิดพลาดใน pj_do_proj (ไม่สามารถถ re-projection GCP %i)\n"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "ไม่สามารถอ่าน ค่า key  projection ของ แผนที่ที่จะนำเข้า"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "ไม่สามารถอ่าน ข้อมูลการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "ไม่สามารถอ่าน หน่วยการฉายแผนที่สำหรับ ตำแหน่งปัจจุบัน"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "ไม่สามารถอ่าน  ค่า key การฉายแผนที่ ของ ตำแหน่งปัจจุบัน"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "การเขียน แผนที่เชิงภาพ <%s>"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "สร้างตารางสีสำหรับ  <%s ใน %s>..."
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "สร้างตารางสีสำหรับ  <%s ใน %s>..."
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "ไม่สามารถเปิดไฟล์: <%s>"
@@ -33040,7 +34777,7 @@ msgstr "กำลังอ่าน แผนที่ความสูง"
 msgid "Writing topographic index map..."
 msgstr "กำลังเขียน แผนที่ ดัชนี topographic ..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "จำนวนของจุดที่จะนำเข้า: %d."
@@ -33145,12 +34882,12 @@ msgstr "ปริมาตร Lake  %f คิวบิกเมตร"
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr "ค่าจะใช้ได้ถ้า ความลึกของ lake  (แผนที่เชิงภาพ terrain) อยู่ในหน่วย เมตร"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "แสดง ดัชนี"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33158,25 +34895,25 @@ msgstr ""
 "สร้าง ชั้นข้อมูลแผนที่เชิงภาพ composite โดยใช้ ค่าหมวดหมู่ที่รู้จัก จาก หนึ่ง(หรือ มากกว่า) "
 "ชั้นแผนที่ เพื่อที่จะเติมในพื้นที่ของ \"no data\" ในชั้นแผนที่อื่น"
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "ขื่อขแงแผนที่เชิงภาพที่จะรวมเข้าด้วยกัน"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 #, fuzzy
 msgid "Name for resultant raster map"
 msgstr "ชื่อเรื่อง ของ แผนที่เชิงภาพ ผลลัพธ์"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "ใช้ 0 สำหรับ แบบโปร่งแสง แทน NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "จำนวนน้อยสุด ของแผนที่ที่จะนำเข้า คือ 2"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "สร้าง support ไฟล์สำหรับ <%s>..."
@@ -33250,38 +34987,6 @@ msgstr "แผนที่เชิงภาพ, ค่าระดับ"
 msgid "Converts a raster map into a vector map."
 msgstr "แปลงแผนที่เชิงภาพ ไปเป็น ชั้นข้อูลแผนที่เชิงเส้น"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "ชื่อของ column รายละเอียด ที่จะใช้สำหรับ แถบข้อความ"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Smooth corners ของ ข้อมูล พื้นที่"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr "ใช้ ค่าแผนที่เชิงภาพ เป็น หมวดหมู่ แทน unique sequence (CELL เท่านั้น)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "ค่าเลื่อนสำหรับ ค่าพิกัด z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr "เขียนค่าแผนที่เชิงภาพ เป็น ค่าพิกัด  z. ตารางไม่ได้ถูกสร้าง. ขณะนี้ทำงานกับ จุด เท่านั้น"
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "ไม่ต้องสร้าง topology"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -33801,11 +35506,6 @@ msgstr "ขนาดของ จุด ที่จะ cache"
 msgid "Advanced"
 msgstr "ขั้นสูง"
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "แผนที่เชิงเส้นผลลัพธ์ hue"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34106,7 +35806,7 @@ msgstr "สร้าง random random surface(s) ด้วย spatial dependence
 msgid "Name for output raster map(s)"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "ระยะมากสุด ของจุดไปถึงเส้นที่ยอมให้"
@@ -34133,7 +35833,7 @@ msgstr "จำนวนมากสุด ของการวนซ้ำ"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "กำลังอ่าน แผนที่เชิงภาพ <%s>..."
@@ -34470,7 +36170,7 @@ msgstr "คำนวน ดัชนี  dominance's diversity บน แผน
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34496,7 +36196,7 @@ msgstr "แสดง ดัชนี"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "ไฟล์ กำหนดค่าต่างๆ"
@@ -34515,7 +36215,7 @@ msgstr "คำนวน  standard deviation ของ patch บนแผนท
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "แสดง ดัชนี"
@@ -34662,7 +36362,7 @@ msgstr "ไม่สามารถสร้าง lseek"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "คำนวน ดัชนี Shannon's diversity บนแผนที่เชิงภาพ"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "คำนวน ดัชนี mean pixel attribute บนแผนที่เชิงภาพ"
 
@@ -34837,11 +36537,11 @@ msgstr "เหนือ=%f"
 msgid "Could not read maximum distance. Aborting."
 msgstr "ไม่สามารถอ่าน range ไฟล์"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "ไม่สามารถอ่าน ช่วง fp สำหรับแผนที่เชิงภาพ <%s>"
@@ -35081,21 +36781,61 @@ msgstr "incidout ต้องการตัวแปร time เพื่อก
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr "โหมด 2:integrated daily irradiation สำหรับ วันที่กำหนดของปี"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "ค่าเพิ่มคงที่ ของ การกระจัดกระจาย"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "กำลังเขียน แผนที่เชิงภาพ <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "แผนที่ไม่ถูกต้อง <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr " iso cost ผิด: %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "กำลังเขียน แผนที่เชิงภาพ <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "ใช้ค่าพิกัด จุดกลางแผนที่\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "กำลังเขียน แผนที่เชิงภาพ <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35121,78 +36861,89 @@ msgstr "ไม่บีบอัด แผนที่"
 msgid "Print compression information and data type of input map(s)"
 msgstr "แสดงแบบ shell script"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "ไม่พบแผนที่เชิงเส้น <%s> ในชุดแผนที่ปัจจุบัน"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "[%s] คือ reclass ไฟล์ ของแผนที่ <%s> ในชุดแผนที่ <%s> - ไม่สามารถคลายการบีบอัดได้"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "[%s] คือ reclass ไฟล์ ของแผนที่ <%s> ในชุดแผนที่ <%s> - ไม่สามารถบีบอัดได้"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] คือ reclass ไฟล์ ของแผนที่ <%s> ในชุดแผนที่ <%s> - ไม่สามารถคลายการบีบอัดได้"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "DONE: ไฟล์ที่คลายการบีบอัด คือ %lu bytes เล็กลง"
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "DONE: ไฟล์ที่บีบอัด คือ %lu bytes เล็กลง"
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "DONE: ไฟล์ที่คลายการบีบอัด คือ %lu bytes ใหญ่ขึ้น"
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "DONE: ไฟล์ที่บีบอัด คือ %lu bytes ใหญ่ขึ้น"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Break"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] คลายการบีบอัดแล้ว"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] บีบอัดแล้ว"
+msgid "Uncompressing <%s>"
+msgstr "ค่า Eigen:"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"%sCOMPRESS [%s]"
+msgid "Re-compressing <%s>"
+msgstr "ค่า Eigen:"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Dropping <%s>"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] คือ reclass ไฟล์ ของแผนที่ <%s> ในชุดแผนที่ <%s> - ไม่สามารถคลายการบีบอัดได้"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "[%s] คือ reclass ไฟล์ ของแผนที่ <%s> ในชุดแผนที่ <%s> - ไม่สามารถบีบอัดได้"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35224,52 +36975,52 @@ msgstr "o_adev: ไม่มีข้อมูลใน กลุ่มข้อ
 msgid "Filter <%s> not found"
 msgstr "ไม่พบไฟล์ <%s>"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "แผนที่เชิงเส้น, kernel density"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Resamples ชั้นข้อมูลแผนที่เชิงภาพ โดยใช้ aggregation"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** <%s> มี signatures มากเกินไป (จำกัดที่ 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "อย่างน้อยต้องเลือก 1 เงื่อนไข จาก %s"
@@ -35693,21 +37444,26 @@ msgstr[1] "กำลังคำนวน Centrality measures ..."
 msgid "Calculating %s"
 msgstr "กำลังคำนวนแผนที่ ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' ต้อง > 0 สำหรับ 'cats'."
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Correlation"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "สร้าง random cell values ด้วย spatial dependence."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "จำนวนมากสุดของ column ที่จะอ่าน"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35846,7 +37602,7 @@ msgstr "ตารางหายไป"
 msgid "Grid line width"
 msgstr "ความหนาของเส้น"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "สีเส้นกริด"
 
@@ -35975,15 +37731,10 @@ msgid "Starting and ending coordinates"
 msgstr "ค่าพิกัด จุดเริ่ม และ ปลายทาง"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "สีเส้น"
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "สีตัวอักษร"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -36012,8 +37763,8 @@ msgid "Name of monitor to start"
 msgstr "ชื่อของ  script ผลลัพธ์"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36075,48 +37826,66 @@ msgstr "แสดง ตัวแปรการเชื่อมต่อ แ
 msgid "Print commands for currently selected monitor and exit"
 msgstr "แสดงรายการแผนที่เชิงเส้น ใน ตำแหน่งที่จะนำเข้า และออก"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "แสดง ตัวแปรการเชื่อมต่อ และ ออก."
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "อย่าเลือกแบบ อัตโนมัติ เมื่อเริ่มต้นการทำงาน"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "แสดงรายการแผนที่เชิงเส้น ใน ตำแหน่งที่จะนำเข้า และออก"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "ไม่สามารถอ่านค่าสีได้"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "เปิด ฟอร์ม ในการแก้ไข"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr "ใช้จอแสดงผล <%s>"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "ไม่มีจอถูกเลือก"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
@@ -36126,64 +37895,74 @@ msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหน
 msgid "Monitor <%s> is not running"
 msgstr "ไม่พบไฟล์ <%s>"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "ไม่พบไฟล์ 3dview <%s>"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "ไม่สามารถสร้างไฟล์ <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "ไม่พบไฟล์: %s"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "ไม่สามารถเปิดแหล่งข้อมูล <%s>"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "ไม่สามารถสร้างไฟล์ <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "ไฟล์  '%s' มีอยู่แล้ว และจะถูกเขียนทับ"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "ไม่สามารถเขียน ลบ %d"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "ชนิดของผลลัพธ์"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้ว"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "ไม่สามารถสร้างไฟล์ <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "การเขียน แผนที่เชิงเส้น <%s>"
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "ไม่สามารถอ่าน range ไฟล์"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "แผนที่เชิงเส้น <%s> มีอยู่แล้ว"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "รายการของ ค่าพิกัด จุด"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "ไม่พบ Column <%s>"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "ไม่สามารถเปิดไฟล์: <%s>"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "ไม่สามารถอ่าน range ไฟล์"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "%d พบ เส้น หรือ ขอบเขต ใน แผนที่เชิงเส้น <%s@%s>"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36292,28 +38071,46 @@ msgstr "%s:ค่าที่กำหนด ไม่ถูกต้อง"
 msgid "[%s]: illegal value specified"
 msgstr "%s:ค่าที่กำหนด ไม่ถูกต้อง"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "กำลัง log transformation"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr "ซ้อน ค่าหมวด cell บนชั้นข้อมูลแผนที่เชิงภาพ ของจอแสดงผล"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "ไม่ต้องทำดัชนีจุด โดย  raster cell"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "ใช้ค่าสีตัวอักษร จากค่าสีของ cell"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "การกำหนด"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Path ถึงไฟล์ font"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36321,7 +38118,7 @@ msgstr[0] "สีเส้นกริด"
 msgstr[1] "สีเส้นกริด"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36332,7 +38129,7 @@ msgstr ""
 "การกำหนดค่า หน้าต่างที่กำลังทำงาน อาจจะใหญ่เกินไป การแสดง Cells บนหน้าต่างอาจจะเล็กมาก "
 "สำหรับ จำนวนหมวด cell ที่สามารถมองเห็น"
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36415,11 +38212,6 @@ msgstr "สีของรูปปิด"
 msgid "Colorize features according color definition column"
 msgstr "ชื่อของ  column สี (สำหรับใช้กับ -a )"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "ไม่ได้ระบุ column สี"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36429,7 +38221,7 @@ msgstr ""
 msgid "Lines"
 msgstr "เส้น"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "ความหนาของเส้น"
 
@@ -36973,37 +38765,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "ค่าพิกัด ไม่ถูกต้อง %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "แสดงข้อมูลของ หน้าจอที่แสดงผลอยู่"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "กรอบจอแสดง (ซ้าย, ขวา, บน, ล่าง)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "ขนาดจอแสดง กว้าง, สูง)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "แสดงกรอบที่กำลังทำงาน"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "ขนาดจอแสดง กว้าง, สูง)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "แสดงกรอบของ current region"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37265,14 +39057,6 @@ msgstr "การวางตัวของตัวอักษร"
 msgid "Line spacing"
 msgstr "ช่วงของเส้น"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Path ถึงไฟล์ font"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 #, fuzzy
 msgid "Input file"
@@ -37338,7 +39122,7 @@ msgstr "ชนิดแผนภูมิ"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "ชนิดแผนภูมิ"
@@ -37375,6 +39159,11 @@ msgstr "จุดกลางของแผนภูมิแท่ง รอ
 msgid "Maximum value used for bar plot reference"
 msgstr "ค่ามากสุดที่ใช้วาดแท่งอ้างอิง"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "สร้างผลลัพธ์ 3มิติ"
+
 #: ../display/d.rgb/main.c:58
 #, fuzzy
 msgid ""
@@ -37384,6 +39173,11 @@ msgstr ""
 "แสดงชั้นข้อมูลเชิงภาพ 3 ภาพ ที่ผู้ใช้กำหนดแบบ แดง, เขียว, และน้ำเงิน "
 "ซ้อนทับในกรอบแสดงผลที่กำลังทำงาน."
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37427,14 +39221,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "ใช้ กลุ่มย่อยของช่วงแผนที่สำหรับสัญลักษณ์ (น้อย,มาก)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "การกำหนด"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -37520,11 +39307,12 @@ msgstr "ช่วงสี เลยขอบบน ของข้อมูล
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "use=%s อยู่นอกช่วง [%.3f, %.3f]. (ขยายด้วยช่วง= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "ไม่มีอะไรจะวาด! (ไม่มี แถบข้อความหมวดหมู่?)"
 
@@ -37538,35 +39326,91 @@ msgstr "แสดง มาตราส่วนแบบแท่ง บนจ
 msgid "North arrow style"
 msgstr "วาดเฉพาะ ทิศเหนือลูกศร"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr "ค่าพิกัดจอ สำหรับมุมซ้ายบน แถบข้อความ ([0,0] ซ้ายบนของกรอบ)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "สีเส้น"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "วาดเฉพาะ มาตราส่วนแบบแท่ง"
@@ -37583,68 +39427,68 @@ msgstr "ไม่สามารถปิดแผนที่"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr "แสดงลูกศรแทน  cell aspect direction สำหรับ ภาพแผนที่ที่มีข้อมูล aspect"
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "ชื่อของภาพแผนที่ aspect ที่จะแสดง"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "ชนิดของ ภาพแผนที่  aspect"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "สีลูกศร สำหรับการวาด"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "สีลูกศร สำหรับการวาด"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "สี X's สำหรับการวาด  (ค่า Null)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "สีสำหรับ ข้อมูลที่ไม่ทราบ"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "วาดลูกศรทุกๆ Nth grid cell"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "ภาพแผนที่ประกอบด้วยค่าที่ใช้ระบุความยาวลูกศร"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Scale factor สำหรับลูกศร (magnitude map)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "ค่า  scale factor ไม่ถูกต้อง"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "ค่า  skip factor ไม่ถูกต้อง"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "Magnitude ใช้กับ GRASS และแผนที่ compass aspect เท่านั้น"
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr "magnitude_map ต้องการ  Scale "
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "มีปัญหาในการอ่าน ไฟล์  range"
 
@@ -37928,57 +39772,43 @@ msgstr ""
 "class separability matrix\n"
 "\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "ไม่พบ แผนที่เชิงภาพ <%s> ในชุดแผนที่"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "ไม่พบกลุ่มย่อย <%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "แผนที่เชิงภาพ [%s] มีอยู่แล้วในกลุ่ม"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "ภาพ 3d ที่จะเอาออก"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "กลุ่มย่อย [%s] ไม่มีไฟล์"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "กลุ่มย่อย [%s] มี 1 ไฟล์"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "กลุ่มย่อยต้องมีอย่างน้อย  2 ไฟล์เพื่อที่จะทำงาน %s"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "ไม่สามารถเปิด signature ไฟล์"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "ไม่สามารถ อ่าน ไฟล์ signature '%s'"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, fuzzy, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "** <%s> มี signatures มากเกินไป (จำกัดที่ 255)"
@@ -38056,209 +39886,223 @@ msgstr "จำนวนน้อยสุดของ pixel ใน class"
 msgid "Name for output file containing final report"
 msgstr "ชื่อ สำหรับ ไฟล์ผลลัพธ์ ที่มี error matrix และ kappa"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "ไม่พบ แผนที่เชิงภาพ <%s> ในชุดแผนที่"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "ไม่พบกลุ่มย่อย <%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 "\n"
 "<%s> -- จำนวนของ initial classes ไม่ถูกต้อง"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 "\n"
 "<%s> -- ค่าของ sample intervals ไม่ถูกต้อง"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr ""
 "\n"
 "<%s> -- ค่าของ การวนซ้ำ ไม่ถูกต้อง"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr ""
 "\n"
 "<%s> -- ค่าของ การลู่เข้า ไม่ถูกต้อง"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 "\n"
 "<%s> -- ค่าของ การแยก ไม่ถูกต้อง"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "ค่า สำหรับ null ไม่ถูกต้อง"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "ไม่สามารถสร้างไฟล์ <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### CLUSTER (%s) ####################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "ตำแหน่ง: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "ชุดแผนที่:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "กลุ่ม:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "กลุ่มย่อย:    %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "ไฟล์ผลลัพธ์ signature: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "ขอบเขต\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  เหนือ: %12.2f  ออก: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  ใต้: %12.2f  ตก: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Res:   %12.2f  Res:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Rows:  %12d  Cols: %12d  Cells: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Mask: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "ตัวแปร Cluster\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr "จำนวนของ classes เริ่มต้น:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [จากไฟล์ signature %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "ขนาดน้อยสุดของ class:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "การจำแนกน้อยสุดของ class:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "เปอร์เซ็นต์ การลู่เข้าหา:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "จำนวนรอบการวนซ้ำมากสุด: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr " ช่วงตัวอย่างทาง Row:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr " ช่วงตัวอย่างทาง  Col:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "กำลังอานแผนที่เชิงภาพ..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 #, fuzzy
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr "หน่วยความจำไม่พอ โปรดสั่งทำงานใหม่และเลือกขนาดตัวอย่างน้อยลง"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "ขนาดตัวอย่าง: %d จุด\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 #, fuzzy
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr "จุดตัวอย่างไม่พอ โปรดสั่งทำงานใหม่และเลือกขนาดตัวอย่างมากขึ้น"
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 #, fuzzy
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr "จุดตัวอย่างที่ค่าไม่เป็น 0 ไม่พอ  โปรดตรวสอบ ขอบเขต (และ mask)"
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## ผลลัพธ์สุดท้าย #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d classes (การลู่เข้า=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "ไม่สามารถเขียน ไฟล์  signature  <%s> สำหรับกลุ่ม <%s>, กลุ่มย่อย <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38266,12 +40110,12 @@ msgstr ""
 "\n"
 "#################### CLASSES ####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d classes, %.2f%% points stable\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38588,8 +40432,8 @@ msgid "radiance"
 msgstr "Variance"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "ความละเอียด"
@@ -38962,359 +40806,403 @@ msgstr "กลุ่ม <%s> ไม่มีอยู่"
 msgid "group <%s> references the following subgroups\n"
 msgstr "กลุ่มย่อย [%s] ไม่มีไฟล์"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "ชื่อของ แผนที่เชิงภาพ Surface สำหรับ Cross-Section"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "ความละเอียด"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "ตัวแปร Extracts terrain  สำหรับ  DEM"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "ชื่อของแผนที่เชิงภาพ fractal surface"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "ชื่อของ แผนที่เชิงภาพ ที่มี ผลลัพธ์ classification"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "ชื่อของชั้นข้อมูลที่จะนำเข้า"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "ชื่อของ แผนที่เชิงภาพ ระนาบ ที่จะถูกสร้าง"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "ออกผลลัพธ์ แผนที่เชิงภาพ direction"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "จำนวน edge ไม่อยู่ในช่วง"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "จำนวน edge ไม่อยู่ในช่วง"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39519,7 +41407,7 @@ msgstr "Ground truth training map"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "จำนวนน้อยสุดของ pixel ใน class"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "จำนวนขั้นไม่ถูกต้อง: %s"
@@ -39885,108 +41773,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "หน่วยความจำไม่พอ"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "เกิดข้อผิดพลาด ขณะกำลังอ่านข้อมูล hue"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "ผิดพลาด ขณะเขียน ไฟล์ segment"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "ผิดพลาด ขณะเขียน ข้อมูล"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "จำนวนของจุดที่จะสร้าง"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "การทำงาน ยังไม่มี"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "กำลังเขียน ใน แผนที่ ... "
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "กำลังทำงาน  ainput areas  ..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "ขนาดขอบเขต เล็กกว่า minreg, ไม่มีการแสดงผล"
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att ไฟล์มีอยู่แล้ว"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "ความละเอียด"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "เกิดข้อผิดพลาด ขณะกำลังอ่านข้อมูล hue"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "ผิดพลาด ขณะเขียน ไฟล์ segment"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "ผิดพลาด ขณะเขียน ข้อมูล"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "จำนวนของจุดที่จะสร้าง"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "กำลังเขียน ใน แผนที่ ... "
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40060,64 +41954,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "ค่า Threshold ต้อง >= 0"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "ไม่สามารถ เขียน  segment ไฟล์ สำหรับ %s"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "วิธี ไม่ถูกต้อง: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "ไม่พบ แผนที่เชิงภาพ"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "แผนที่ Pattern ควรจะเป็น แผนที่ binary 0/1 CELL"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "ไม่พบ แผนที่เชิงภาพ"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "จำนวนขั้นไม่ถูกต้อง: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "จำนวนขั้นไม่ถูกต้อง: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "การทำงาน ยังไม่มี"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -40188,7 +42099,7 @@ msgstr "ชื่อของแผนที่เชิงภาพผลลั
 msgid "Name for output raster map (blue)"
 msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40240,7 +42151,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -41095,51 +43006,55 @@ msgstr "ไม่พบกลุ่ม <%s>"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "นำเข้า ล้มเหลว"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "ชื่อของแผนที่ผลลัพธ์"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "ชื่อเรื่องแผนที่ผลลัพธ์"
@@ -41423,6 +43338,10 @@ msgstr "การแปลง, transformation"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 #, fuzzy
 msgid ""
@@ -41836,13 +43755,47 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ "ชื่อและชนิดของ column ใหม่ (ชนิดขึ้นอยู่กับ ฐานข้อมูล, แต่ต้องรองรับ VARCHAR(), INT, "
 #~ "DOUBLE และ DATE)"
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> มีอยู่แล้ว"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "ไม่สามารถกำหนด projection"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] บีบอัดแล้ว"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "ไม่สามารถกำหนด projection"
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "%sCOMPRESS [%s]"
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "การคำนวน ปรากฎว่า Overflow"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "ไม่พบข้อมูลจุด"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "ชั้นข้อมูลที่จะเพิ่ม column"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "ชั้นข้อมูลที่จะเพิ่ม column"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "จำนวนชั้นข้อมูล"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "ค่าพิกัดจุด Seed"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "แสดงผลลัพธ์ไปที่ stdout, อย่าปรับปรุง ตารางรายละเอียด"
 
 #, fuzzy
 #~ msgid "time series"
@@ -41888,74 +43841,6 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "Number of quartals to use"
 #~ msgstr "จำนวนของ quadrats"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "ชื่อของ แผนที่เชิงภาพ ที่จะนำเข้า และมี friction costs"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "ชื่อของ แผนที่เชิงภาพ ที่จะนำเข้า และมี friction costs"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "แผนที่ผลลัพธ์ Diffuse irradiance  [W.m-2] (โหมด 1) หรือแผนที่เชิงภาพ Irradiation  "
-#~ "[Wh.m-2.day-1] (โหมด 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "แผนที่ผลลัพธ์ Ground reflected irradiance  [W.m-2] (โหมด 1) หรือแผนที่เชิงภาพ "
-#~ "Irradiation  [Wh.m-2.day-1] (โหมด 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "ผลลัพธ์  beam irradiance [W.m-2] (โหมด 1) หรือ แผนที่เชิงภาพ  irradiation  [Wh."
-#~ "m-2.day-1] (โหมด 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "ชื่อของ แผนที่ความสูง เชิงภาพ"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "ชื่อของ แผนที่ความสูงเชิงภาพ ที่จะนำเข้า  [หน่วยเมตร]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "แผนที่ผลลัพธ์ Ground reflected irradiance  [W.m-2] (โหมด 1) หรือแผนที่เชิงภาพ "
-#~ "Irradiation  [Wh.m-2.day-1] (โหมด 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "ผลลัพธ์  beam irradiance [W.m-2] (โหมด 1) หรือ แผนที่เชิงภาพ  irradiation  [Wh."
-#~ "m-2.day-1] (โหมด 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "จำนวนจุด ของ interpolation"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "เขียนทับ Projection (ใช้ location's projection)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "ตำแหน่ง: %s\n"
 
@@ -41972,24 +43857,28 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ "\n"
 #~ "%d classes, %.2f%% points stable\n"
 
+#~ msgid "Subregion"
+#~ msgstr "ขอบเขตย่อย "
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "การเพิ่มขึ้นของ หมวดหมู่"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "เงื่อนไข <%s>: <%s> ออก."
+#, fuzzy
+#~ msgid "Could not rewind input file"
+#~ msgstr "ไม่สามารถเปิดไฟล์ผลลัพธ์ <%s>"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "ข้าม การส่งออกแผนที่ <%s>"
+#~ msgid "Name for basins raster map"
+#~ msgstr "ชื่อของแผนที่เชิงภาพ ฐาน"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "แผนที่ ดัชนี topographic ผลลัพธ์"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> มีอยู่แล้วในชุดแผนที่ <%s>"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "ชื่อของแผนที่เชิงภาพ ฐาน"
+#~ msgid "output map <%s> exists"
+#~ msgstr "ข้าม การส่งออกแผนที่ <%s>"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "ความยาว หน้า (ค่าตั้งต้น: %d บรรทัด)"
@@ -41997,6 +43886,9 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "ความกว้าง หน้า (ค่าตั้งต้น: %d ตัวอักษร)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "เขียนทับ Projection (ใช้ location's projection)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -42020,6 +43912,12 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "[%s] not found"
 #~ msgstr "[%s] ไม่พบ"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "เงื่อนไข <%s>: <%s> ออก."
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "ยกเลิก projection ของชุดแผนที่ (ใช้ location's projection)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -42038,6 +43936,14 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ "ตำแหน่ง สำหรับ ชุดข้อมูล\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
 #~ msgid "Location name (not location path)"
 #~ msgstr "ชื่อ LOCATION ใหม่ (ไม่ใช่ location path)"
 
@@ -42046,6 +43952,17 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgstr "New GISDBASE (path เต็ม ถึง directory ตรงตำแหน่ง new location)"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "ไม่สามารถกำหนด projection"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "แปลง แผนที่เชิงเส้นทั้งหมดของ GRASS < Ver5.7 ในชุดแผนที่ที่ใช้งานไปเป็น รูปแบบปัจจุบัน"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "ปรับปรุง metadata ของแผนที่เชิงเส้น."
 
@@ -42079,164 +43996,64 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "Default: path to the current GRASS database"
 #~ msgstr "แสดงชื่อ ของกรอบ"
 
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s> มีอยู่แล้วในชุดแผนที่ <%s>"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "แปลง แผนที่เชิงเส้นทั้งหมดของ GRASS < Ver5.7 ในชุดแผนที่ที่ใช้งานไปเป็น รูปแบบปัจจุบัน"
+#~ msgid "OGR datasource name"
+#~ msgstr "ชื่อ แหล่งข้อมูล OGR"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "ไม่ได้ระบุชื่อแผนที่"
 
-#~ msgid "Renaming reclass maps"
-#~ msgstr "กำลังเปลี่ยนชื่อ  reclass maps"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "ไม่สามารถอ่านไฟล์ REF ของกลุ่มย่อย [%s] ในกลุ่ม [%s]."
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d หมวดหมู่อ่านจากตาราง"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "โปรดระบุ z Column"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
-
-#, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "ค่า scalex ไม่ถูกต้อง"
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "โปรดระบุ z Column"
-
-#, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "โปรดระบุ z Column"
-
-#, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
 #, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
-
-#, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "โปรดระบุ z Column"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "ไม่สามารถสร้างไฟล์ <%s>"
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "โปรดระบุ z Column"
-
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
+#~ msgid "Env file not found"
+#~ msgstr "ไม่พบไฟล์ 3dview <%s>"
 
 #, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
+#~ msgid "PID file not found"
+#~ msgstr "ไม่พบไฟล์: %s"
 
 #, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
+#~ msgid "Command file not found"
+#~ msgstr "ไม่พบ Column <%s>"
 
-#, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "weight= และ -c คือ mutually exclusive"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "กำลังเปลี่ยนชื่อ  reclass maps"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
-#~ "\"rules\" !"
+#~ msgid "Name for output image"
+#~ msgstr "ชื่อของไฟล์ผลลัพธ์"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr ""
-#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
-#~ "\"rules\" !"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "ไม่สามารถอ่านไฟล์ REF ของกลุ่มย่อย [%s] ในกลุ่ม [%s]."
 
 #, fuzzy
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "สีตัวอักษณ, either สีมาตรฐานของ GRASS หรือ R:G:B triplet"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d หมวดหมู่อ่านจากตาราง"
 
-#, fuzzy
 #~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "แสดง ชั้นข้อมูลเชิงเส้นของ  GRASS ในกรอบที่กำลังทำงานบนจอแสดงผล"
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
+#~ msgstr ""
+#~ "Correction ของผลลัพธ์จาก v.lidar.growing . มันเป็นอันสุดท้าย ของ 3 algorithms "
+#~ "สำหรับ LIDAR filtering."
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "สีสำหรับวาดตัวอักษร"
+#~ msgid "Interpolation spline step value in east direction"
+#~ msgstr "ค่าขั้น ของ Interpolation spline ใน east direction"
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "สีสำหรับวาดกริด, หรือ \"none\""
+#~ msgid "Interpolation spline step value in north direction"
+#~ msgstr "ค่าขั้น ของ Interpolation spline ใน north direction"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Discretization error ในหน่วยแผนที่"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "สร้าง maximum SPOTTING distance"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -42366,39 +44183,84 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgstr "ใช้ปีกกาหมายเหตุ ในสัญลักษณ์"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "ชื่อของแผนที่เชิงภาพผลลัพธ์"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "สร้าง maximum SPOTTING distance"
+#~ msgid "Default: input"
+#~ msgstr "Discretization error ในหน่วยแผนที่"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "แสดง"
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "แสดง ชั้นข้อมูลเชิงเส้นของ  GRASS ในกรอบที่กำลังทำงานบนจอแสดงผล"
 
 #, fuzzy
-#~ msgid ""
-#~ "Allows creation and/or modification of raster3d map layer support files."
-#~ msgstr "ยอมให้สร้าง และ/หรือ เปลี่ยนแปลง ไฟล์ support ของชั้นข้อมูลเชิงภาพ."
+#~ msgid "Text color or \"none\""
+#~ msgstr "สีตัวอักษร"
 
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "ไม่สามารถอ่าน แผนที่เชิงเส้น"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "สีสำหรับวาดตัวอักษร"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "ไม่สามารถสร้างตาราง: %s"
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "สีสำหรับวาดกริด, หรือ \"none\""
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "หน่วยความจำไม่พอ สำหรับ az"
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "สีตัวอักษณ, either สีมาตรฐานของ GRASS หรือ R:G:B triplet"
 
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "OLD_T_NEW ได้รหัส ชนิด ที่ไม่เหมาะสม [%x]"
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "เส้น"
 
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "NEW_T_OLD ได้รหัส ชนิด ที่ไม่เหมาะสม [%x]"
+#, fuzzy
+#~ msgid ""
+#~ "Allows creation and/or modification of raster3d map layer support files."
+#~ msgstr "ยอมให้สร้าง และ/หรือ เปลี่ยนแปลง ไฟล์ support ของชั้นข้อมูลเชิงภาพ."
+
+#~ msgid "Failed opening input dig file."
+#~ msgstr "การเปิด dig ไฟล์ที่จะนำเข้า ล้มเหลว"
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "ไม่มี dig_att ไฟล์."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "การเปิด dig_att ไฟล์ที่จะนำเข้า ล้มเหลว"
+
+#~ msgid "Attaching categories..."
+#~ msgstr "กำลังแนบ หมวดหมู่ ..."
+
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "การแนบ รายละเอียด  (หมวดหมู่ %d) ไปที่เส้น ล้มเหลว."
+
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "เส้น %d แถบข้อความ: %d ตรงกับ แถบข้อความ อื่น: %d."
+
+#~ msgid "Writing new file..."
+#~ msgstr "กำลังเขียน ไฟล์ใหม่"
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "[%d] จุด และ เส้น ถูกเขียนไปที่ ไฟล์ผลลัพธ์"
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "[%d] จุดศูนย์ถ่วง ถูกเขียนไปที่ ไฟล์ผลลัพธ์"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "นำเข้า แผนที่เชิงเส้น รุ่นเก่า ของ GRASS"
+
+#~ msgid "Endian of input vector map"
+#~ msgstr "Endian ของแผนที่เชิงเส้นที่นำเข้า"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr "ไม่พบ แถบข้อความของหมวดหมู่  (dig_cats) , ไม่ได้สร้างตาราง.\n"
+
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "ไม่สามารถเปิด dig_att ไฟล์ <%s>\n"
 
 #~ msgid "Reading dig file..."
 #~ msgstr "กำลังอ่าน dig ไฟล์ ..."
@@ -42482,182 +44344,42 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "[%d] หมวดหมู่ อ่านไปไว้ที่หน่วยความจำ"
 
-#, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr "ไม่พบ แถบข้อความของหมวดหมู่  (dig_cats) , ไม่ได้สร้างตาราง.\n"
-
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "ไม่สามารถเปิด dig_att ไฟล์ <%s>\n"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "การเปิด dig ไฟล์ที่จะนำเข้า ล้มเหลว"
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "ไม่มี dig_att ไฟล์."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "การเปิด dig_att ไฟล์ที่จะนำเข้า ล้มเหลว"
-
-#~ msgid "Attaching categories..."
-#~ msgstr "กำลังแนบ หมวดหมู่ ..."
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "การแนบ รายละเอียด  (หมวดหมู่ %d) ไปที่เส้น ล้มเหลว."
-
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "เส้น %d แถบข้อความ: %d ตรงกับ แถบข้อความ อื่น: %d."
-
-#~ msgid "Writing new file..."
-#~ msgstr "กำลังเขียน ไฟล์ใหม่"
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "[%d] จุด และ เส้น ถูกเขียนไปที่ ไฟล์ผลลัพธ์"
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "[%d] จุดศูนย์ถ่วง ถูกเขียนไปที่ ไฟล์ผลลัพธ์"
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "นำเข้า แผนที่เชิงเส้น รุ่นเก่า ของ GRASS"
-
-#~ msgid "Endian of input vector map"
-#~ msgstr "Endian ของแผนที่เชิงเส้นที่นำเข้า"
-
-#~ msgid "Interpolation spline step value in east direction"
-#~ msgstr "ค่าขั้น ของ Interpolation spline ใน east direction"
-
-#~ msgid "Interpolation spline step value in north direction"
-#~ msgstr "ค่าขั้น ของ Interpolation spline ใน north direction"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "ไม่ทราบชนิดของ แผนที่เชิงภาพ"
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "ขนาด Cache (MiB)"
-
-#~ msgid "Can't call bad function"
-#~ msgstr "ไม่สามารถใช้ คำสั่ง ที่ไม่ดี"
-
-#~ msgid "Bad arguments to pointfunc %s"
-#~ msgstr "ตัวแปรไม่ดี ที่จะใช้กับ pointfunc %s"
-
-#~ msgid "No function defined to perform ``point %c point''"
-#~ msgstr "ไม่มีคำสั่งกำหนด ที่จะทำงาน ``point %c point''"
-
-#~ msgid "Performing 1 arg map function on map %s"
-#~ msgstr "การทำงานคำสั่งแผนที่ 1 ตัวแปร บน แผนที่   %s "
-
-#~ msgid "Performing 2 arg map function on maps %s and %s"
-#~ msgstr "การทำงานคำสั่งแผนที่ 2 ตัวแปร บน แผนที่   %s และ %s"
-
-#~ msgid "Performing map %s + %s"
-#~ msgstr "การทำงานคำสั่งแผนที่  %s + %s"
-
-#~ msgid "Can't call bad map-function"
-#~ msgstr "ไม่สามารถใช้คำสั่ง แผนที่ ที่ไม่ดี"
-
-#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
-#~ msgstr "ตัวแปรไม่ดี ที่จะใช้กับ mapfunc %s (argc = %d)"
-
-#~ msgid "No function defined to perform map %c map"
-#~ msgstr "ไม่มีคำสั่งกำหนด ที่จะทำงานแผนที่ %c แผนที่"
-
-#~ msgid "Can't call bad num-function"
-#~ msgstr "ไม่สามารถใช้ num-function ที่ไม่ดี"
-
-#~ msgid "Bad arguments to numfunc %s"
-#~ msgstr "ตัวแปรไม่ดี ที่จะใช้กับ  numfunc %s"
-
-#~ msgid "No function defined to perform ``number %c number''"
-#~ msgstr "ไม่มีคำสั่งกำหนด ที่จะทำงาน ``number %c number''"
-
-#~ msgid "Can't call bad any-function"
-#~ msgstr "ไม่สามารถ เรียก คำสั่งที่ไม่ดี"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "OLD_T_NEW ได้รหัส ชนิด ที่ไม่เหมาะสม [%x]"
 
-#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
-#~ msgstr "ตัวแปรไม่ดี ใช้กับ คำสั่งใดๆ %s (argc = %d)"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "NEW_T_OLD ได้รหัส ชนิด ที่ไม่เหมาะสม [%x]"
 
 #~ msgid "One or more coordinates"
 #~ msgstr "1 หรือมากกว่า ของ ค่าพิกัด"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "หน่วยความจำไม่พอ สำหรับ adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "หน่วยความจำไม่พอ สำหรับ ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "หน่วยความจำไม่พอ สำหรับ adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "หน่วยความจำไม่พอ สำหรับ adyy"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "หน่วยความจำไม่พอ สำหรับ adxy"
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "ไม่สามารถสร้าง Quaddata"
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "ไม่สามารถสร้าง Quadfunc"
-
-#~ msgid "Cannot create tree"
-#~ msgstr "ไม่สามารถสร้าง Tree"
-
-#~ msgid "Cannot create tree info"
-#~ msgstr "ไม่สามารถสร้าง Tree info"
-
-#~ msgid "sites"
-#~ msgstr "sites"
-
-#, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "แปลงแผนที่เชิงภาพ ไปเป็น ชั้นข้อูลแผนที่เชิงเส้น"
-
-#, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "ไม่พบไฟล์ 3dview <%s>"
-
-#, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "การเดา รูปแบบ site ไฟล์ ล้มเหลว"
-
-#, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "ไม่สามารถ ระบุ row buffer ที่จะนำเข้า"
+#~ msgid "Name of elevation map"
+#~ msgstr "ชื่อของ แผนที่ความสูง"
 
-#, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "ชื่อของ แผนที่เชิงเส้น จุด ที่จะนำเข้า"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "ตัวอักษร ที่ใช้แทน  no data cell"
 
 #, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d ข้อมูล เขียนแล้ว"
-
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "ชื่อชั้นข้อมูลที่จะใช้สำหรับ INTENSITY"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr ""
+#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
+#~ "\"rules\" !"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "ชื่อชั้นข้อมูลที่จะใช้สำหรับ SATURATION"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Metric ที่ไม่รู้จัก: [%s]"
 
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "นำเข้า US-NGA GEOnet Names Server (GNS)  country files ไปที่ "
-#~ "แผนที่เชิงเส้นแบบจุดของ GRASS"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "ข้อผิดพลาดขณะอ่านไฟล์ หมวด สำหรับ <%s>"
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "ไฟล์ GNS ไม่ได้บีบอัด จาก NGA (ด้วยนามสกุล .txt)"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "ข้อผิดพลาดขณะ อ่าน ไฟล์สี สำหรับ <%s>"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "ชื่อของแผนที่เชิงภาพ ที่ 1 ที่จะ บิดสี "
+#~ msgid "String representing no data cell value"
+#~ msgstr "ตัวอักษรที่ใช้แทน ข้อมูล cell ที่ไม่มีค่า"
 
 #, fuzzy
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "ไฟล์ตารางที่จะนำเข้า หรือ การเชื่อมต่อ  DB"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "เครื่องมือ Surface interpolation สำหรับ ชั้นข้อมูลแผนที่เชิงภาพ"
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -42674,16 +44396,18 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ "ระหว่าง ตำแหน่งภูมิศาสตร์ที่ต่างกัน บนชั้นข้อมูลแผนที่ความสูง เชิงภาพ ที่ ค่า หมวดหมู่ cell แทน "
 #~ "ความสูงที่รวมด้วย ชั้นข้อมูลแผนที่เชิงภาพ ที่ค่า cell แทน friction cost."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "ชื่อชั้นข้อมูลที่จะใช้สำหรับ INTENSITY"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "ชื่อชั้นข้อมูลที่จะใช้สำหรับ SATURATION"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "ชื่อของชั้นข้อมูลผลลัพธ์ที่ใช้สำหรับ เขียว"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "ชื่อของชั้นข้อมูลผลลัพธ์ที่ใช้สำหรับ น้ำเงิน"
 
-#, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "เครื่องมือ Surface interpolation สำหรับ ชั้นข้อมูลแผนที่เชิงภาพ"
-
 #~ msgid "Surface generation program."
 #~ msgstr "โปรแกรมสร้าง Surface"
 
@@ -42703,53 +44427,15 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgstr[0] "Interpolating แผนที่เชิงภาพ <%s>... %d rows... "
 #~ msgstr[1] "Interpolating แผนที่เชิงภาพ <%s>... %d rows... "
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "แลต/ลอง projection ยังใช้ไม่ได้ในตอนนี้"
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "ตำแหน่ง: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "แผนที่เชิงเส้น, networking"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "ชื่อของ แผนที่ความสูง"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "ตัวอักษร ที่ใช้แทน  no data cell"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
-#~ "\"rules\" !"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
-#~ "\"rules\" !"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Metric ที่ไม่รู้จัก: [%s]"
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "ข้อผิดพลาดขณะอ่านไฟล์ หมวด สำหรับ <%s>"
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "ข้อผิดพลาดขณะ อ่าน ไฟล์สี สำหรับ <%s>"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "ตัวอักษรที่ใช้แทน ข้อมูล cell ที่ไม่มีค่า"
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "ไฟล์ผลลัพธ์ แผนที่  z-file (ความสูง) "
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "ไฟล์ผลลัพธ์ แผนที่  aspect ( หรือ fy)"
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "แลต/ลอง projection ยังใช้ไม่ได้ในตอนนี้"
+
 #, fuzzy
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "คำนำหน้า สำหรับ แผนที่เชิงภาพ ผลลัพธ์"
@@ -42780,14 +44466,24 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "Suppress warnings"
 #~ msgstr "หยุดการเตือน"
 
-#, fuzzy
-#~ msgid "High resolution panchromatic image"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
 #~ msgstr ""
-#~ "การแปลงแบบ Brovey เพื่อรวม  multispectral และ high-res panchromatic channels"
+#~ "นำเข้า US-NGA GEOnet Names Server (GNS)  country files ไปที่ "
+#~ "แผนที่เชิงเส้นแบบจุดของ GRASS"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Correlation"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "ไฟล์ GNS ไม่ได้บีบอัด จาก NGA (ด้วยนามสกุล .txt)"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "ชื่อของแผนที่เชิงภาพ ที่ 1 ที่จะ บิดสี "
+
+#, fuzzy
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "ไฟล์ตารางที่จะนำเข้า หรือ การเชื่อมต่อ  DB"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -42810,6 +44506,146 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgstr "แผนที่เชิงภาพผลลัพธ์ (ค่าตั้งต้น: input tile)"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr "คำนวน univariate statistics จาก non-null cells ของแผนที่เชิงภาพ"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "สีสำหรับวาดกริด, หรือ \"none\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "สีสำหรับวาดกริด, หรือ \"none\""
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "สีสำหรับ ข้อมูลที่ไม่ทราบ"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "สีสำหรับวาดกริด, หรือ \"none\""
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "%s จะต้องรวมค่านั้นๆ แทนพื้นที่.\n"
+
+#~ msgid "Invalid distance"
+#~ msgstr "ระยะทาง ไม่ถูกต้อง"
+
+#~ msgid "Layer number"
+#~ msgstr "จำนวนชั้นข้อมูล"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "ตำแหน่ง: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "แผนที่เชิงเส้น, networking"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "โปรดระบุ z Column"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "ค่า scalex ไม่ถูกต้อง"
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
+
+#, fuzzy
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "โปรดระบุ z Column"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "โปรดระบุ z Column"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "โปรดระบุ z Column"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "โปรดระบุ z Column"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "แสดง"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "ใช้ \"-i\" หรือ \"value=\" จะต้องกำหนด"
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr ""
+#~ "การแปลงแบบ Brovey เพื่อรวม  multispectral และ high-res panchromatic channels"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Correlation"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "ชื่อของแผนที่เชิงภาพ"
 
@@ -42825,24 +44661,138 @@ msgstr "ชื่อของแผนที่ผลลัพธ์ (ค่า
 #~ msgid "No maps output"
 #~ msgstr "ไม่มีแผนที่ผลลัพธ์"
 
-#, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr "คำนวน univariate statistics จาก non-null cells ของแผนที่เชิงภาพ"
-
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "สีกรด สำหรับการวาด หรือ \"none\""
 
 #~ msgid "Gather the histogram quietly"
 #~ msgstr "จับกลุ่ม  histogram  แบบเงียบ"
 
+#~ msgid "Not enough memory for adx"
+#~ msgstr "หน่วยความจำไม่พอ สำหรับ adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "หน่วยความจำไม่พอ สำหรับ ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "หน่วยความจำไม่พอ สำหรับ adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "หน่วยความจำไม่พอ สำหรับ adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "หน่วยความจำไม่พอ สำหรับ adxy"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "ไม่สามารถสร้าง Quaddata"
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "ไม่สามารถสร้าง Quadfunc"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "ไม่สามารถสร้าง Tree"
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "ไม่สามารถสร้าง Tree info"
+
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "%s จะต้องรวมค่านั้นๆ แทนพื้นที่.\n"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "ไม่สามารถสร้างตาราง: %s"
 
-#~ msgid "Invalid distance"
-#~ msgstr "ระยะทาง ไม่ถูกต้อง"
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "หน่วยความจำไม่พอ สำหรับ az"
 
-#~ msgid "Layer number"
-#~ msgstr "จำนวนชั้นข้อมูล"
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "weight= และ -c คือ mutually exclusive"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
+#~ "\"rules\" !"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr ""
+#~ "ต้องระบุ 1 เงื่อนไข ของ \"-i\" or \"-r\" หรือ เงื่อนไข \"color\", \"rast\" or "
+#~ "\"rules\" !"
+
+#~ msgid "sites"
+#~ msgstr "sites"
+
+#, fuzzy
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "แปลงแผนที่เชิงภาพ ไปเป็น ชั้นข้อูลแผนที่เชิงเส้น"
+
+#, fuzzy
+#~ msgid "Site file <%s> not found"
+#~ msgstr "ไม่พบไฟล์ 3dview <%s>"
+
+#, fuzzy
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "การเดา รูปแบบ site ไฟล์ ล้มเหลว"
+
+#, fuzzy
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "ไม่สามารถ ระบุ row buffer ที่จะนำเข้า"
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "ชื่อของ แผนที่เชิงเส้น จุด ที่จะนำเข้า"
+
+#, fuzzy
+#~ msgid "%d sites written."
+#~ msgstr "%d ข้อมูล เขียนแล้ว"
+
+#~ msgid "Performing 1 arg map function on map %s"
+#~ msgstr "การทำงานคำสั่งแผนที่ 1 ตัวแปร บน แผนที่   %s "
+
+#~ msgid "Performing 2 arg map function on maps %s and %s"
+#~ msgstr "การทำงานคำสั่งแผนที่ 2 ตัวแปร บน แผนที่   %s และ %s"
+
+#~ msgid "Performing map %s + %s"
+#~ msgstr "การทำงานคำสั่งแผนที่  %s + %s"
+
+#~ msgid "Can't call bad map-function"
+#~ msgstr "ไม่สามารถใช้คำสั่ง แผนที่ ที่ไม่ดี"
+
+#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
+#~ msgstr "ตัวแปรไม่ดี ที่จะใช้กับ mapfunc %s (argc = %d)"
+
+#~ msgid "No function defined to perform map %c map"
+#~ msgstr "ไม่มีคำสั่งกำหนด ที่จะทำงานแผนที่ %c แผนที่"
+
+#~ msgid "Can't call bad num-function"
+#~ msgstr "ไม่สามารถใช้ num-function ที่ไม่ดี"
+
+#~ msgid "Bad arguments to numfunc %s"
+#~ msgstr "ตัวแปรไม่ดี ที่จะใช้กับ  numfunc %s"
+
+#~ msgid "No function defined to perform ``number %c number''"
+#~ msgstr "ไม่มีคำสั่งกำหนด ที่จะทำงาน ``number %c number''"
+
+#~ msgid "No function defined to perform ``point %c point''"
+#~ msgstr "ไม่มีคำสั่งกำหนด ที่จะทำงาน ``point %c point''"
+
+#~ msgid "Can't call bad any-function"
+#~ msgstr "ไม่สามารถ เรียก คำสั่งที่ไม่ดี"
+
+#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
+#~ msgstr "ตัวแปรไม่ดี ใช้กับ คำสั่งใดๆ %s (argc = %d)"
+
+#~ msgid "Can't call bad function"
+#~ msgstr "ไม่สามารถใช้ คำสั่ง ที่ไม่ดี"
+
+#~ msgid "Bad arguments to pointfunc %s"
+#~ msgstr "ตัวแปรไม่ดี ที่จะใช้กับ pointfunc %s"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "ไม่สามารถอ่าน แผนที่เชิงเส้น"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "ขนาด Cache (MiB)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "ไม่ทราบชนิดของ แผนที่เชิงภาพ"
diff --git a/locale/po/grassmods_tr.po b/locale/po/grassmods_tr.po
index bbf7649..e235ffe 100644
--- a/locale/po/grassmods_tr.po
+++ b/locale/po/grassmods_tr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_tr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2008-11-16 01:15+0200\n"
 "Last-Translator: Osman Yalçın YILMAZ <yilmazy at istanbul.edu.tr>\n"
 "Language-Team: Türkçe <grass-translations at lists.osgeo.org>\n"
@@ -251,6 +251,7 @@ msgstr "<%s> harita takımı bulunamadı"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -485,6 +486,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "ascii dosyayı kapamada hata"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -624,29 +630,29 @@ msgstr "'%s' OGR veri kaynağı açılamıyor"
 msgid "Unable to open database:"
 msgstr "<%s> veritabanı açılamıyor"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "genel, ayarlar"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> zaten mevcut"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Tablo oluşturulamıyor: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "<%s> harita takımı bulunamadı"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -657,6 +663,11 @@ msgstr "İndeks oluşturulamıyor"
 msgid "Unable grant on table:"
 msgstr "Tabloya kopyalanamıyor"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Yazıtipi boyutu ayarlanamıyor"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -787,7 +798,7 @@ msgstr "<%s> veritabanı açılamıyor"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -866,17 +877,17 @@ msgstr " vejetasyon indeksi adı"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Ayarlar"
 
@@ -888,7 +899,7 @@ msgstr "sınıf %-3d"
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "Yazıtipi adı"
+msgstr "Sınama adı"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -911,39 +922,39 @@ msgstr "Geçerli bağlantı parametrelerini yaz ve çık"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -988,7 +999,7 @@ msgstr "Tüm veritabanı sürücülerini listele."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1018,7 +1029,7 @@ msgstr "vektör, öznitelik tablosu"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1111,10 +1122,10 @@ msgid "Unable to open database <%s>"
 msgstr "<%s> veritabanı açılamıyor"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1299,11 +1310,11 @@ msgstr "Girdi hatalı"
 msgid "succeeded"
 msgstr "...başarıldı."
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "<%s> dosyası yazma için açılamıyor"
@@ -1338,10 +1349,10 @@ msgstr "'sorgu' seçeneği için kullanılacak öznitelik sütunu adı"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "Biçim"
@@ -1350,7 +1361,7 @@ msgstr "Biçim"
 msgid "Vertical record separator (requires -v flag)"
 msgstr ""
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1358,7 +1369,7 @@ msgstr ""
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Çıktıda sütun adlarını içerme"
 
@@ -1366,7 +1377,7 @@ msgstr "Çıktıda sütun adlarını içerme"
 msgid "Describe query only (don't run it)"
 msgstr "Sadece sorguyu tanımlar( çalıştırmaz) "
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Düşey çıktı (yatay yerine)"
 
@@ -1416,6 +1427,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "YSD ifadelerini içeren dosya adı"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "YSD hatalarını görmezden gel ve devam et"
 
@@ -1594,7 +1606,6 @@ msgstr "Çıktıyı 90 derece döndür"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1715,7 +1726,7 @@ msgstr "Tablodan veri yüklenemiyor"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1723,15 +1734,15 @@ msgstr "Tablodan veri yüklenemiyor"
 msgid "Error in pj_do_proj"
 msgstr "pj_do_proj'da hata"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "Geçerli proje için projeksiyon anahtar değerler elde edilemedi"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1826,7 +1837,7 @@ msgstr ""
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1872,7 +1883,7 @@ msgstr "Vektör haritanın katman bilgisi alınamıyor"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1885,26 +1896,27 @@ msgstr "Vektör haritanın katman bilgisi alınamıyor"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "<%s> sürücüsüyle <%s> veritabanı açılamıyor"
@@ -1914,7 +1926,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Sütun tipi desteklenmiyor (karakter olmalıdır)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2054,13 +2067,13 @@ msgstr ""
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2068,8 +2081,8 @@ msgstr ""
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2112,10 +2125,11 @@ msgstr "gösterim"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2129,13 +2143,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2144,6 +2161,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2159,7 +2177,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2179,11 +2197,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2195,27 +2213,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2233,74 +2251,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "raster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2310,6 +2331,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2325,6 +2347,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2343,6 +2366,7 @@ msgid "vector"
 msgstr "vektör"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2351,15 +2375,16 @@ msgstr "vektör"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2395,7 +2420,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Desteklenmeyen çıktı biçimleri"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "<%s> dosyası oluşturuldu."
@@ -2973,69 +2998,70 @@ msgid "Vector map <%s> not found"
 msgstr "<%s> vektör haritası bulunamadı"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "<%s> vektör haritası açılamıyor"
@@ -3099,12 +3125,13 @@ msgstr "Aktif kontrol noktası yok"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3233,7 +3260,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3392,7 +3419,7 @@ msgid "Area:"
 msgstr "Alan\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Öznitelikler yazılıyor..."
@@ -3407,7 +3434,7 @@ msgstr "%d alanı için öznitelik seçilemiyor"
 msgid "No attribute table for layer %d"
 msgstr "Öznitelik bulunamadı"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3420,15 +3447,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "<%s> sürücüsüyle <%s> veritabanı açılamıyor"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "<%s> tablosu üzerindeki yetkiler onaylanmadı"
@@ -3451,6 +3479,7 @@ msgid ""
 msgstr "Haritalar hesaplanıyor ..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3459,6 +3488,7 @@ msgid "extract"
 msgstr "vektör, dışa aktar"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3469,10 +3499,10 @@ msgstr "Çözünürlük"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Arc tipi"
@@ -3495,12 +3525,11 @@ msgstr "Tabloyu kopyalamayın (ayrıca 'new' parametreye bakın)"
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Öznitelikler"
 
@@ -3519,39 +3548,45 @@ msgstr ""
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3567,7 +3602,10 @@ msgstr ""
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3639,7 +3677,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3686,45 +3724,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3767,11 +3806,11 @@ msgstr "(%s) sütun tipi desteklenmiyor"
 msgid "Format <%s> does not support writing"
 msgstr "<%s> sürücüsü raster oluşturmayı desteklemiyor"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3922,9 +3961,9 @@ msgstr "Yeniden projeksiyonlanacak girdi raster harita adı"
 msgid "Name for output file where to save current settings"
 msgstr "Sonuç dokularını içeren dosya"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Desteklenen biçimleri yaz ve çık"
 
@@ -3947,7 +3986,7 @@ msgstr "Geçerli harita takımı arama yolunu yaz"
 msgid "Print current status in shell script style"
 msgstr "Kabuk betiği stilinde yazdır"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Ya harita takımı= veya -l kullanılmalı"
@@ -3955,7 +3994,7 @@ msgstr "Ya harita takımı= veya -l kullanılmalı"
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Ya 'kural' veya 'sütun' belirlenmeli"
+msgstr "Ya harita takımı= veya -l kullanılmalı"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -3963,18 +4002,18 @@ msgid "%s= must be specified"
 msgstr "2 katman belirlenmelidir"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Desteklenen biçimler:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -3985,66 +4024,67 @@ msgstr "Desteklenen biçimler:\n"
 msgid "network"
 msgstr "görüntü,şebeke"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Arc tipi"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Arc katmanı"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Arc tipi"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4056,10 +4096,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4072,48 +4113,84 @@ msgstr ""
 msgid "Cost"
 msgstr "Zıtlık"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Tablo yok"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Katman/tablo"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4122,10 +4199,10 @@ msgstr "Geçerli projeksiyon enlem-boylam değildir"
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4141,8 +4218,8 @@ msgstr ""
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4171,22 +4248,22 @@ msgstr "<%s> tablosu üzerindeki yetkiler onaylanmadı"
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "[%d] kategorisinde hiç nokta yok"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4195,17 +4272,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "Yeni kayıt girilemiyor: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] girdi biçim hatası"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4216,7 +4293,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4226,7 +4303,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "vektör, geometri"
@@ -4281,17 +4358,17 @@ msgid "Unable to get category list <%s>"
 msgstr "<%s> kategori listesi alınamıyor"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "İstenen <%s> parametresi ayarlanamadı"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "<%s> vektör haritası zaten mevcut"
@@ -4584,6 +4661,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "YSD ifadelerini içeren dosya adı"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4604,12 +4682,15 @@ msgstr "YSD ifadelerini içeren dosya adı"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4766,11 +4847,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "%d katmanının veritabanı bağlantısı belirlenmedi"
@@ -4908,9 +4989,9 @@ msgid "Remove existing color table"
 msgstr "Mevcut renk tablosunu uzaklaştır"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -4974,7 +5055,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -4990,8 +5071,7 @@ msgstr "Ya harita takımı= veya -l kullanılmalı"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Ya harita takımı= veya -l kullanılmalı"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5017,6 +5097,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "<%s> vektör haritası 3B değil"
@@ -5042,7 +5123,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "<%s> albedo hücre dosyası bulunamadı"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5051,13 +5132,14 @@ msgstr "<%s@%s> raster haritasının renk dosyası okunamıyor"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5089,8 +5171,9 @@ msgstr "Veri okunuyor..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5135,7 +5218,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Renk dosyası yazılıyor..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "<%s> sütunu kullanılamıyor"
@@ -5190,6 +5273,7 @@ msgid "Point out of range"
 msgstr "Kenar sayısı aralık dışında"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5198,15 +5282,17 @@ msgstr "Kenar sayısı aralık dışında"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5299,14 +5385,15 @@ msgstr "Çıktı vektör haritasının adı"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "Çıktı:"
@@ -5437,7 +5524,7 @@ msgstr "az için yetersiz hafıza"
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "<%s> dosyası oluşturulamıyor"
+msgstr "Tablo oluşturulamıyor: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5499,15 +5586,15 @@ msgstr "Enterpolasyon yöntemi"
 msgid "Input failed"
 msgstr "Girdi hatalı"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "Girdi hatalı"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 msgid "Not enough disk space--cannot write files"
 msgstr ""
 
@@ -5550,9 +5637,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "[%d] kategorisinde hiç nokta yok"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5581,7 +5668,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Çözünürlük"
+msgstr "a girdisi alanları işleniyor ..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5613,7 +5700,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:368
 #, fuzzy, c-format
 msgid "Mask raster map [%s] not found"
-msgstr "<%s> 3d raster haritası bulunamadı"
+msgstr "<%s> 3B raster haritası bulunamadı"
 
 #: ../vector/v.vol.rst/user1.c:383
 #, fuzzy
@@ -5660,9 +5747,9 @@ msgstr "ascii dosyayı kapamada hata"
 msgid "3D raster map <%s> created"
 msgstr "<%s> raster haritası zaten mevcut"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5673,85 +5760,121 @@ msgstr "Yeni satır girilemiyor: %s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Silinecek raster"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Çakıştırılacak vektör nokta dosya(lar) adı"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "<%s>  tablosu <%s> veritabanında yok"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Sehir sayısı: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Girdi nokta sayısı: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Çakıştırılacak vektör nokta dosya(lar) adı"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Silinecek raster"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5771,18 +5894,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "İçe aktar"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "Noktalar"
@@ -5814,9 +5939,9 @@ msgstr "y  koordinatı içeren sütun adı"
 msgid "Name of column containing z coordinate"
 msgstr "z koordinatı içeren sütun adı"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "çıktı"
@@ -5864,7 +5989,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Seçme imleci açılamıyor: '%s'"
@@ -5883,7 +6008,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "x/y/z sütunları tamsayı yada ondalık sayı olmalıdır"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -5910,7 +6035,81 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d nokta vektöre yazılıyor"
 msgstr[1] "%d nokta vektöre yazılıyor"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS MEVKİSİ PROJ_INFO su:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "İçe aktarılacak veri takımı PROJ_INFO su:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Geçerli bağlantı parametrelerini yaz ve çık"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "Girdi veri takımı ve geçerli mevkinin projeksiyonu eşleşiyor"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "'spatial' parametresi için 4 parametre gerekli"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Geçersiz doğu"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Bilinmeyen kural seçeneği: '%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -5933,7 +6132,7 @@ msgstr[1] "%d nokta vektöre yazılıyor"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -5942,7 +6141,7 @@ msgstr[1] "%d nokta vektöre yazılıyor"
 msgid "statistics"
 msgstr "raster, istatistikler"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6593,8 +6792,8 @@ msgstr "(%s) sütun tipi desteklenmiyor"
 msgid "Operator '%s' is not supported for type line"
 msgstr "'%s' işleticisi çizgi tipinde desteklenmiyor"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Vektör harita okunamıyor"
@@ -6651,12 +6850,12 @@ msgid "Breaking lines..."
 msgstr "Çizgiler kırılıyor..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Çift olanlar siliniyor..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "Düğümlerdeki sınırlar temizleniyor..."
 
@@ -6665,11 +6864,11 @@ msgstr "Düğümlerdeki sınırlar temizleniyor..."
 msgid "Merging lines..."
 msgstr "Çizgiler kırılıyor..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Adalar ekleniyor..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Alan merkezi hesaplanamadı"
 
@@ -6684,12 +6883,13 @@ msgstr "<%s> vektör haritası sorgulanıyor..."
 msgid "Attribute not found"
 msgstr "Öznitelik bulunamadı"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Alan merkezleri yazılıyor..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Yeni kayıt girilemiyor: '%s'"
@@ -6765,125 +6965,127 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "<%s> vektör haritası geçerli harita takımında bulunamadı"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Örnekleme metodu"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Rasgele 2D/3B vektör nokta haritası oluşturur."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "oluşturulacak nokta sayısı"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "Girdi vektör harita okunuyor"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "En küçük z yüksekliği (z flaması veya sütun adı gerekir)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "En büyük z yüksekliği (z flaması veya sütun adı gerekir)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "x koordinatı içeren sütun adı"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Vektör sütunlara yazılıyor..."
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Renk tablosu tipi"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "3B çıktı oluştur"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "İstatistikler hesaplanıyor..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr ""
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d den %d obje <%s> vektör haritasından seçildi"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Mevcut vektör haritanın adı"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Tablo oluşturulamıyor: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "<%s> başlangıç vektör haritası geçerli bölgede hiç nokta içermiyor"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "<%s> başlangıç vektör haritası geçerli bölgede hiç nokta içermiyor"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "noktalar oluşturuluyor..."
 
@@ -6930,7 +7132,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Sorgulanacak mevcut raster haritanın adı"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Sorgu sonucuyla güncellenecek sütun"
@@ -6944,81 +7146,79 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "%d kategori tabloda mevcut"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "<%s> sütunu nulunamıyor"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "<%s> sütunu <%s> tablosunda bulunamıyor"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Sütun tipi desteklenmiyor"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Raster tipi kayan nokta ve sütun tipi tamsayı"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr ""
 "Raster tipi kayan nokta ve sütun tipi tamsayı, bazı veriler kaybolabilir!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Veri okunuyor..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "%d çizgi veya sınır <%s@%s> vektör haritasında bulundu"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "Geçerli bölge dışındaki %d nokta atlandı"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "Kategorisi olmayan %d nokta atlandı"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr ""
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "Tablodan yüklenen %d kategorisi"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "vektörde %d tekrarlı kategori "
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "Tablodan yüklenen %d kategorisi"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "Vektörün %d kategorisi tabloda kayıp"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d güncelleme hatası"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d kayıt güncellendi"
@@ -7026,14 +7226,14 @@ msgstr "%d kayıt güncellendi"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Raster harita istatistiklerini güncelle"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7121,7 +7321,7 @@ msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr ""
 "<%s> vektör haritası kullanıcı harita takımında değil ve güncellenemiyor"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7179,6 +7379,150 @@ msgstr "[%d] kategorisinde hiç nokta yok"
 msgid "%d records updated"
 msgstr "%d kayıt güncellendi"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "%d katmanının veritabanı bağlantısı belirlenmedi"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Sütun tipi desteklenmiyor"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "[%d] kategorisi için kayıt yok"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "[%d] kategorisi için kayıt yok"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "<%s> sütunu nulunamıyor"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "3B nokta olarak vektör noktaları üret"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "OGR vektör katmanını GRASS vektör haritasına dönüştürür."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Katman numarası"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld kategori"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Katman numarası"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Katman numarası"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Sütun eklenecek katman"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Sütun adı (sayı tipinde olmalıdır)"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Sütunlar"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Renk tanım sütunu adı (-a bayrağı ile kullanmak için)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Renk tanım sütunu belirlenemedi"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "renk okunamıyor"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Geçerli bölgeyi yazdır"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Tablo yok"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7214,6 +7558,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "<%s> sütunu nulunamıyor"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7245,46 +7595,53 @@ msgstr "<%s> sütunu kullanılamıyor"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d den %d obje <%s> vektör haritasından seçildi"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Raster harita yazılıyor..."
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "<%s> için destek dosyaları oluşturuluyor"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Dönüştürülen alanlar: %d nin %d si"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Dönüştürülen noktalar/çizgiler: %d nin %d si"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7349,15 +7706,17 @@ msgstr "Yüzey için raster dosyası"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Raster değerler için kullanılacak istatistikler"
@@ -7398,7 +7757,7 @@ msgstr ""
 msgid "Unknown option '%s'"
 msgstr "Bilinmeyen seçim '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "Veri okunuyor..."
@@ -7417,12 +7776,17 @@ msgstr "Belirlenen sütun kullanılamaz"
 msgid "Get area %d failed"
 msgstr "%d alanı almada hata"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "DXF dosyasını içe aktarmada hata!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "Alan merkezi olmayan alan (adalar için sorun olmayabilir)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Kategorisiz alan merkezi"
 
@@ -7453,11 +7817,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Sütun adı"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Sütunlar"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7637,154 +7996,160 @@ msgstr ""
 msgid "Incompatible types"
 msgstr "Uygun olmayan tip"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "<%s> vektör haritasına öznitelik tablosu kopyalanamıyor"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Sütun adı"
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "Yeniden projeksiyonlanacak girdi raster harita adı"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "<%s>  tablosu <%s> veritabanında yok"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Sehir sayısı: [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Yetersiz şehir (<2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Alan merkezleri oluşturuluyor..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "[%d] kategorisinde hiç nokta yok"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Noktasının kaydı yok (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "<%s> dosyası yazma için açılamıyor"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "Çizgiler"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Sehir sayısı: [%d]"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "DEM'den gölgeler hesaplanıyor..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr ""
 
@@ -7990,14 +8355,15 @@ msgstr "Hiç obje seçilmedi, hiçbirşey düzenlenmeyecek"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "Çıktı dosya adı"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Girdiden %d nokta okundu"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8021,9 +8387,13 @@ msgstr "Girdiden %d nokta okundu"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8086,7 +8456,7 @@ msgstr "Alan ayracı (nokta modunda)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr ""
 
@@ -8150,7 +8520,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "<%s> vektör haritasının katman bilgisi alınamıyor"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8252,9 +8622,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "<%s> girdi dosyası açılamıyor"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr ""
@@ -8838,7 +9209,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "%d katmanı"
@@ -8859,7 +9230,7 @@ msgstr ""
 msgid "Resolving conflicts..."
 msgstr ""
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Genelleştirme (%s)..."
@@ -8889,201 +9260,205 @@ msgid "Performs vector based generalization."
 msgstr "Vektör tabanlı genelleştirme."
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Vektör tabanlı genelleştirme."
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Genelleştirme algoritması"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Vektör tabanlı genelleştirme."
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "Genelleştirme algoritması"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "İterasyon sayısı"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Tablo kopyalanamıyor"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Bilinmeyen yöntem"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "<%s> sütunu <%s> tablosunda bulunamıyor"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "<%s> vektör haritası oluşturulamıyor"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Lejandı çevir"
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "Vektör tabanlı genelleştirme."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Genelleştirme (%s)..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "[%g] çözünürlüğü kullanılıyor"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 #, fuzzy
 msgid "changed"
 msgstr "Satırlar değişti"
@@ -9158,8 +9533,8 @@ msgstr "Nokta objelerin sembol boyutu (harita birimlerinde)"
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Metin rengi"
 
@@ -9172,13 +9547,13 @@ msgstr "Metin rengi"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Renkler"
@@ -9371,14 +9746,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Temizleme aracı"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Çift olanlar siliniyor..."
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Köprüleri sil"
@@ -9431,14 +9806,6 @@ msgstr "Veri okunuyor..."
 msgid "Constructing 3D hull..."
 msgstr "Dönüştürülüyor..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9518,7 +9885,9 @@ msgstr ""
 msgid "Bicubic interpolation"
 msgstr ""
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -9928,6 +10297,192 @@ msgstr "'%s' ASCII dosyasını okumada hata"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Hiç veri noktası bulunamadı"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d sınıf."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Nokta sınıflandırma"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Girdi vektör haritasının adı"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "En yakın alanlar bulunuyor..."
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Sınıftaki minimum piksel sayısı"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Kümeleme parametreleri\n"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "Önceden belirlenen vektör açma katmanı ayarlanamıyor"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Sınıf sayısı <256 olmalıdır!"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Komşuluk boyutu pozitif olmalı"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Noktalar içe aktarılıyor..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Hiç nokta bulunamadı, atlanılan tip=nokta"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Alan merkezleri oluşturuluyor..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s = %s -- pozitif sayı olmalıdır"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Noktalar arasındaki en büyük mesafe kullanılarak: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Hiç raster harita kaldırılmadı"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Standart sapma"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Noktalar arasındaki en büyük mesafe kullanılarak: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "En yakın alanlar bulunuyor..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Hiç çizgi bulunmadı, atlanan tip=çizgi"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "noktalar oluşturuluyor..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Çıktı %s raster haritası yazılıyor... "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Girdiler okunuyor..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Hiç veri noktası bulunamadı"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%d sınıf."
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%d sınıf."
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10064,26 +10619,26 @@ msgstr "Veritabanını güncellemek imkansız"
 msgid "Impossible to write to aux table"
 msgstr "Veritabanına yazmak imkansız"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Varyans"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr ""
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d yeni nokta çıktı haritaya yazılıyor"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "[%d] çizgi okundu ve çıktıya yazıldı"
@@ -10122,7 +10677,7 @@ msgstr "Girdi vektör haritasının adı"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10135,14 +10690,14 @@ msgstr "Girdi vektör nokta haritasının adı"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Yapılacak işlem"
@@ -10171,47 +10726,130 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Girdi dosyası adı"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr ""
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Yeni noktalara benzersiz kategoriler ekle"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr ""
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Nokta vektör haritasını durdur"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Çizgi katman"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "Bilinmeyen işlem"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "Eşik değeri >=0 olmalı"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "<%s> den girdi okunamıyor"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Tabloya veri girilemiyor: %s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "<%s> vektör haritası açılamıyor"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "<%s> vektör haritası oluşturulamıyor"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "<%s>  tablosu <%s> veritabanında yok"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "<%s> raster haritası zaten mevcut ve üzerine yazılacak"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "<%s> raster haritası zaten mevcut ve üzerine yazılacak"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "<%s> sürücüsüyle <%s> veritabanı açılamıyor"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "<%s> tablosu oluşturulamıyor"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "<%s> vektör haritasına öznitelik tablosu kopyalanamıyor"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "<%s> tablosu oluşturulamıyor"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10343,7 +10981,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d kategori haritadan okundu"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "Alan merkezi hesaplanamadı"
 
@@ -10453,7 +11091,7 @@ msgstr "%d katmanının veritabanı bağlantısı belirlenmedi"
 msgid "Key column type is not integer"
 msgstr "Anahtar sütun tipi tamsayı değildir"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr ""
@@ -11180,7 +11818,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr ""
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11438,8 +12076,8 @@ msgstr "Girdi vektör haritasının mevkisi"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Kaynak tarihi:     %s"
@@ -11448,7 +12086,7 @@ msgstr "Kaynak tarihi:     %s"
 msgid "Mapset containing input vector map"
 msgstr "Girdi vektör haritasının harita takımı"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "Geçerli çerçevenin adını yazdır"
@@ -11458,7 +12096,7 @@ msgstr "Geçerli çerçevenin adını yazdır"
 msgid "Name of input vector map to re-project"
 msgstr "Yeniden projeksiyonlanacak girdi raster harita adı"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr ""
 
@@ -11473,8 +12111,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "Kır"
@@ -11506,17 +12144,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "<%s> mevkisi <%s> harita takımı kontrol ediliyor"
@@ -11879,335 +12519,559 @@ msgstr ""
 "tablo: %s\n"
 "anahtar sütun: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Diğer vektör harita katmanlarınını biraraya getirerek yeni vektör harita "
 "oluşturur."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr ""
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
-msgstr "dosyaları mevcut dosyaya ekle (mevcut dosyalara yazma aktif olmalıdır)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Topoloji oluşturma"
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Öznitelik tablosu da kopyala"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr "dosyaları mevcut dosyaya ekle (mevcut dosyalara yazma aktif olmalıdır)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Kayıp tablo"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Anahtar sütunlar farklı"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Sütun sayısı farklı"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Sütun adları farklı"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Sütun tipleri farklı"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "Karakter sütunlerın uzunluğu farklı"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Anahtar sütunu bulunamadı"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "Çıktı harita 3B değil"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "<%s> tablosu oluşturulamıyor"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "<%s> vektör haritası birleştiriliyor..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "<%s> vektör haritasını okumada hata - bazı veriler doğru olmayabilir"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "<%s> vektör haritasının topolojisi oluşturuluyor..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d vektör haritası birleştirildi"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Seçme imleci açılamıyor: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Satır alınamıyor"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Bilinmeyen sütun tipi"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Yeni satır girilemiyor: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "OGR vektör katmanını GRASS vektör haritasına dönüştürür."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Girdi dosya"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Katman numarası"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Sütun eklenecek katman"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Sadece alt bölgeyi içe aktar"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Alt bölge"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "oluşturulacak yeni mevki adı"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "z verisi süzme aralığı (en küçük, en büyük)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Tamsayı değerler içeri aktarıldı"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Tamsayı değerler içeri aktarıldı"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Mevcut vektör haritanın adı"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Girdi vektör haritasının adı"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Tamsayı değerler içeri aktarıldı"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "raster, yükselti"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Tamsayı değerler içeri aktarıldı"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Noktalar içe aktarılıyor..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> geçersiz sayıda nokta"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "oluşturulacak yeni mevki adı"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "Desteklenen biçimleri yaz ve çık"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "Veri takımı projeksiyonu üzerine yaz (mevkinin projeksiyonunu kullan)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Noktaları içeren girdi vektör haritası"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Mevki sınırlarını yeni verinin sınırlarına göre genişlet "
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Çıktı raster harita adı (varsayılan: input)"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Projeksiyonun üstüne yaz (mevkinin projeksiyonunu kullan)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Geçerli mevkinin projeksiyon birimleri alınamadı"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "<%s> grubu yok"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Öznitelik tablosu oluşturmayın"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Bilinmeyen kural seçeneği: '%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Katman numarası"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "'spatial' parametresi için 4 parametre gerekli"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Mevki oluşturulamıyor: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Noktalar içe aktarılıyor..."
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Noktalar içe aktarılıyor..."
+
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS MEVKİSİ PROJ_INFO su:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d nokta yüklendi"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "İçe aktarılacak veri takımı PROJ_INFO su:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d nokta yüklendi"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "Girdi veri takımı ve geçerli mevkinin projeksiyonu eşleşiyor"
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "<%s> vektör haritası zaten mevcut ve üzerine yazılacak"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "<%s> sürücüsüyle <%s> veritabanı açılamıyor"
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Noktalar içe aktarılıyor..."
+msgid "%lu points imported (limit was %d)"
+msgstr "%d nokta yüklendi"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:755
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported"
 msgstr "%d nokta yüklendi"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:759
+#, fuzzy, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:761
+#, fuzzy, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d nokta eşik dışında"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d nokta eşik dışında"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d nokta eşik dışında"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "Son %d nokta(lar) görmezden gelinecek"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "<%s> vektör haritası açılamıyor"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "<%s> sürücüsüyle <%s> veritabanı açılamıyor"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12215,22 +13079,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "OGR katmanına sadece okunabilir bağlı yeni vektör harita oluşturur."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "<%s> katmanı mevcut değil"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "%d çizgisi silinemiyor"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "<%s> dosyası oluşturulamıyor"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "<%s> raster haritası zaten mevcut"
@@ -12240,12 +13104,12 @@ msgstr "<%s> raster haritası zaten mevcut"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Çıktı tablo adı"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Bağlanacak raster dosya"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -12253,25 +13117,29 @@ msgid ""
 "\t\tPostGIS database: table name"
 msgstr ""
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Çıktı raster harita adı (varsayılan: input)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Veri kaynağındaki olası katmanları listele ve çık"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Veri kaynağındaki olası katmanları listele ve çık"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12319,7 +13187,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Geçersiz koordinatlar"
+msgstr "Sütunlar"
 
 #: ../vector/v.delaunay/main.c:88
 msgid ""
@@ -12456,144 +13324,144 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Kategori numaralarını gösterme"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "Vektör harita özniteliklerini yazdırır."
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 msgid "The bufcol option requires a valid layer."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'katman' >=0 olmalı"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "UTM zonu %d ye ayarlandı"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Geçersiz silme isteği"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Harita birimlerine göre tampon mesafesi"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Tablodan veri seçilemiyor"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "Alanlar çıkarılıyor..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Öznitelik uygun olmayan boyutta (%.3f) %d kategorisi için"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Alanlar çıkarılıyor..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Çizgi tamponları... "
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Topolojinin bir kısmı oluşturuluyor..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "Sınırlara yapışılıyor..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Poligonları kır"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Sınırlar kırılıyor..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Düğümlerdeki sınırlar temizleniyor..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Haritalar hesaplanıyor ..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Düğümlerdeki sınırlar temizleniyor..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "Sınırlar kırılıyor..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "Haritalar hesaplanıyor ..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Alan merkezi hesaplanamadı"
@@ -12861,36 +13729,45 @@ msgstr "Çıktı dosya adı"
 msgid "%d features written to '%s'."
 msgstr "%d obje '%s' vektörüne yazıldı."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Mevki: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Sehir sayısı: [%d]"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "DEM'den gölgeler hesaplanıyor..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "DEM'den gölgeler hesaplanıyor..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -12944,7 +13821,7 @@ msgstr "%s=%s - uygun olmayan sayıda enterpolasyon noktası"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13585,7 +14462,7 @@ msgstr "LR tablosunda kayıt yok"
 msgid "More than one record in LR table"
 msgstr "LR tablosunda birden fazla kayıt"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -13882,46 +14759,55 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "Vektör harita özniteliklerini yazdırır."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Bölge\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Sınır köprüleri tipini değiştir"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr ""
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Seçme imleci açılamıyor"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "%d alanının sınır kutusu alınamıyor"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "%d çizgisinin sınır kutusu alınamıyor"
@@ -13962,45 +14848,49 @@ msgstr "Parçadaki en fazla nokta sayısı"
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
-msgid "Use either length or vertices"
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
 msgstr ""
 
 #: ../vector/v.split/main.c:108
+msgid "Use either length or vertices"
+msgstr ""
+
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Düzgünleştirme pozitif değer olmalıdır"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Bilinmeyen sütun tipi '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Girdi haritanın projeksiyon birimleri alınamıyor"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "uzunluk %f\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "uzunluk %f\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Sınıf sayısı <256 olmalıdır!"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "%s için parça dosyası yazılamıyor"
@@ -14117,7 +15007,9 @@ msgstr "Döndürme açısı (derece olarak saat tersi yönünde)"
 msgid "Number of vertex points per grid cell"
 msgstr "Tekrarlanma sayısı \t= %d hücreler\n"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Obje tipi"
@@ -14217,10 +15109,13 @@ msgid "Writing out vector columns..."
 msgstr "Vektör sütunlara yazılıyor..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 msgid "algebra"
@@ -14231,6 +15126,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14381,8 +15277,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Yazıtipi adı"
 
@@ -14452,6 +15349,130 @@ msgstr ""
 msgid "Counting points quadrats..."
 msgstr "Noktalar içe aktarılıyor..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Nokta sınıflandırma"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Hiç veri noktası bulunamadı"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Tamsayı değerler içeri aktarıldı"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Tamsayı değerler içeri aktarıldı"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> geçersiz sayıda nokta"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "z-değerleri için çarpan"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Tekrarlanma sayısı \t= %d hücreler\n"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Tekrarlanma sayısı \t= %d hücreler\n"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Standart sapma"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14466,28 +15487,28 @@ msgstr "<%s> için aralık bilgisi mevcut değil"
 msgid "Target location <%s> not found"
 msgstr "<%s> bölgesi bulunamadı "
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "<%s> harita takımı <%s> hedef mevkisinde - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "erişim engellendi"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "bulunamadı"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -14823,11 +15844,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "%d katmanının veritabanı bağlantısı belirlenmedi"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Sütun tipi desteklenmiyor"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr ""
@@ -14915,318 +15931,322 @@ msgid_plural "%d records updated."
 msgstr[0] "%d kayıt güncellendi"
 msgstr[1] "%d kayıt güncellendi"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "OGR vektör katmanını GRASS vektör haritasına dönüştürür."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "OGR veri kaynağı adı"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "İçeri aktarılacak raster dosya"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
 "\t\tMapInfo File: directory containing mapinfo files"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr "OGR katman adı. Eğer hiç verilmezse, tüm olası katmanlar içe aktarılır"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
 "\t\tMapInfo File: mapinfo file name"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "İçe aktarılacak en küçük alan boyutu (kare biriminde)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "Seçimlik olarak varsayılan girdi tipini değiştir"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Aktif kontrol noktası yok"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Düğümlerdeki sınırlar temizleniyor..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Çizgi veya sınırlardan çoklu çizgi oluşturur."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Tekrarlı alan merkezlerini sil"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Sınırlar için yapışma eşiği"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "'%s' ASCII dosyasını okumada hata"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "raster kategori etiketleri olarak kullanılacak sütun adı"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Sütun adı"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "[%d] nokta kategorisi okundu"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Desteklenen biçimleri yaz ve çık"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Veri kaynağındaki olası katmanları listele ve çık"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Poligonları temizlemeyin (tavsiye edilmez)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 msgid "Force 2D output even if input is 3D"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Geçerli mevkinin projeksiyon birimleri alınamadı"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "Geçerli bağlantı parametrelerini yaz ve çık"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Sütun adlarını küçük harfli karakterlere dönüştür"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "<%s> veri kaynağı açılamıyor"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "Veri kaynağı %d katmanları içeriyor:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "<%s> katmanı mevcut değil"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "<%s> vektör haritasının katman bilgisi alınamıyor"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "<%s> sütunu <%s> tablosunda bulunamıyor"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Harita birimlerine göre tampon mesafesi"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "<%s> geçici dosyasını yazmada hata"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "%s anahtar sütunu bulunamadı"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Anahtar sütun tipi tamsayı değildir"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "<%s> sütunu <%s> tablosunda bulunamıyor"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "(%s) sütun tipi desteklenmiyor"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "%d haritası objeleri içe aktarılıyor..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s geometri yok"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Poligonları kır"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Sınırlara yapışılıyor..."
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Sınırlar kırılıyor..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Sınır köprülerini çizgilere dönüştür:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Sınır köprülerini çizgilere dönüştür:"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Haritalar hesaplanıyor ..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15234,117 +16254,117 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d girdi poligon"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d girdi poligon"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Toplam alan: %e (%d alan)"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Toplam alan: %e (%d alan)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Toplam alan: %e (%d alan)"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Toplam alan: %e (%d alan)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Kategorisi olmayan alanlar: %e (%d alan)"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Kategorisi olmayan alanlar: %e (%d alan)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Sınırlar için yapışma eşiği"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Girdi hatalı"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Tablo silinemiyor: %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "Projeksiyon bilgisi güncellendi!"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "Geçerli harita takımını değiştir."
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
 "to import 3D vector."
@@ -15561,6 +16581,11 @@ msgstr ""
 "%d katmanı için veritabanı bağlantısı belirlenmemiş. Önce v.db.connect'i "
 "kullanın."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "<%s> albedo hücre dosyası bulunamadı"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -15717,19 +16742,19 @@ msgstr ""
 msgid "Querying database... "
 msgstr "Veritabanı sorgulanıyor..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr ""
 
@@ -15907,14 +16932,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "<%s> raster haritası zaten mevcut ve üzerine yazılacak"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "<%s> raster haritası zaten mevcut"
@@ -16041,14 +17066,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Yeni noktalara benzersiz kategoriler ekle"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Girdi çizgilere paralel çizgiler oluştur"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "%d çizgi veya sınır <%s@%s> vektör haritasında bulundu"
 msgstr[1] "%d çizgi veya sınır <%s@%s> vektör haritasında bulundu"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16535,19 +17565,24 @@ msgstr "Geçersiz zaman damgası"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16561,6 +17596,7 @@ msgstr "Geçersiz zaman damgası"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16573,7 +17609,7 @@ msgstr "Geçersiz zaman damgası"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -16730,6 +17766,7 @@ msgid "Unable to map image file"
 msgstr "Görüntü dosyası haritalanamıyor"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -16747,14 +17784,14 @@ msgstr "Görüntü dosyası haritalanamıyor"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -16792,6 +17829,54 @@ msgstr "Yeterince renk alınamadı"
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Ölçek çubuğunu grafik ekranında gösterir."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Eğer yoksa yeni harita takımı oluştur"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Tüm çerçeveyi uzaklaştır ve ekranı sil"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "Geçerli harita takımı arama yolunu yaz"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "Geçerli bağlantı parametrelerini yaz ve çık"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -16809,7 +17894,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -16822,7 +17907,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -16899,18 +17984,23 @@ msgstr ""
 "yükler."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -16925,6 +18015,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17020,6 +18111,93 @@ msgstr "İlk raster haritanın adı"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "girdi mevkisindeki vektör haritaları listele ve çık"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Girdi 3B raster haritanın adı"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Belirlenecek sınıf sayısı"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "raster girdi haritalar"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 msgid ""
 "Creates raster plane map given dip (inclination), aspect (azimuth) and one "
@@ -17154,7 +18332,7 @@ msgstr "Boş veritabanı oluşturur."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17168,8 +18346,8 @@ msgid "rename"
 msgstr " vejetasyon indeksi adı"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17179,9 +18357,9 @@ msgid "input"
 msgstr "Girdi"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17197,6 +18375,79 @@ msgstr ""
 "Geçerli harita takımındaki tüm vektör haritaların topolojisini yeniden "
 "oluşturur."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Raster harita katmanından belirlenen eşyükselti eğrileri vektör harita "
+"katmanı üret."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Zıtlık"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Eşyükselti eğrileri aralığı"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Eşyükselti eğrileri listesi"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "En küçük eşyükselti eğrisi"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "En büyük eşyükselti eğrisi"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "raster girdi haritalar"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Öznitelik tablosu oluşturmayın"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17205,7 +18456,7 @@ msgstr "girdi mevkisindeki vektör haritaları listele ve çık"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17263,8 +18514,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17376,74 +18628,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Girdi 3B raster haritanın adı"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Çıktı QC tipi sınıflandırma katmanı adı"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Çıktı QC tipi sınıflandırma katmanı adı"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17478,47 +18699,30 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Yeni veritabanı adı"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr "Girdi raster haritası adı"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Belirlenecek sınıf sayısı"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "raster girdi haritalar"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17616,8 +18820,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Çıktı dosya adı"
+msgid "Name for output image (or text file for -t)"
+msgstr "Çıktı dosya adı (uzantısını eklemeyin)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -17634,6 +18838,54 @@ msgstr "xyz koordinatları yerine harita koordinatlarını kullan"
 msgid "Use gnuplot for display"
 msgstr "Görüntülenecek metin"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Çıktı TIFF koordinat dosyası"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Virgül ile ayrılmış değerler listesi"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Sonuç dokularını içeren dosya"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Boş veritabanı oluşturur."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Belirlenecek sınıf sayısı"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Çıktı eğim raster haritası"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17665,32 +18917,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Mevki sınırlarını yeni verinin sınırlarına göre genişlet "
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Projeksiyonun üstüne yaz (mevkinin projeksiyonunu kullan)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Geçerli mevkinin projeksiyon birimleri alınamadı"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -17882,6 +19112,20 @@ msgstr "Yeni bölgedeki sütun sayısı"
 msgid "Output field separator"
 msgstr "Çıktı alan ayracı"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "girdi mevkisindeki vektör haritaları listele ve çık"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "raster harita ve onun ölçek çubuğunu grafik ekranında gösterir."
@@ -17984,8 +19228,15 @@ msgstr "Boş veritabanı oluşturur."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Yeni veritabanı adı"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "genel , harita yönetimi"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Mevcut bir raster harita adı"
@@ -17995,7 +19246,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18004,15 +19255,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Yeni veritabanı adı"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18060,7 +19311,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "aktif görüntü çerçevesi içeriğini kullanıcı tanımlı renk ile silme"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Çıktı dosya adı"
 
@@ -18141,16 +19392,27 @@ msgstr "Girdi dosyası adı"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Çıktı raster harita adı (varsayılan: input)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18227,12 +19489,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18288,7 +19557,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Raster haritanın adı"
+msgstr "İkinci raster haritanın adı"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18360,13 +19629,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18376,12 +19644,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr ""
 
@@ -18396,7 +19664,7 @@ msgid "ASCII file containing input data"
 msgstr "Girdi vektör haritasının harita takımı"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Raster değerler için kullanılacak istatistikler"
 
@@ -18404,14 +19672,14 @@ msgstr "Raster değerler için kullanılacak istatistikler"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Sonuç harita depolama türü"
 
@@ -18451,17 +19719,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "z koordinatı için ölçek faktörü"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Hafızada tutulacak harita oranı"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18504,19 +19772,15 @@ msgid ""
 "on the fly."
 msgstr "OGR vektör katmanını GRASS vektör haritasına dönüştürür."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "İçeri aktarılacak raster dosya"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Sorunlu alanların vektör çıktı haritası"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Geçerli bölgeyi girdi haritaya göre uyarla"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -18616,7 +19880,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -18703,24 +19967,18 @@ msgstr "girdi mevkisindeki vektör haritaları listele ve çık"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Belirlenecek sınıf sayısı"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Raster bakı haritasının adı"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "raster girdi haritalar"
@@ -18837,17 +20095,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Enterpolasyon nokta sayısı"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18855,10 +20117,6 @@ msgid ""
 "space time raster datasets."
 msgstr "girdi mevkisindeki vektör haritaları listele ve çık"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -18978,78 +20236,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Oluşturulacak yeni mevkinin adı"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Kullanılabilir kuralları listele ve çık"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Kullanılabilir kuralları listele ve çık"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Kullanılabilir kuralları listele ve çık"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "gösterim"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Kullanıcı tabloları yerine sistem tabloları"
@@ -19166,10 +20440,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 msgid "Removes a vector feature from a vector map through attribute selection."
 msgstr ""
@@ -19223,6 +20493,55 @@ msgstr ""
 msgid "Test name"
 msgstr "Sınama adı"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Etiket için kullanılacak öznitelik sütunu adı"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Alan objelerinin köşelerini düzgünleştir"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "z koordinatı için kayıklık değeri"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Topoloji oluşturma"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19293,6 +20612,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "Çizelge tipi"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "Desteklenen biçimler:\n"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19468,20 +20798,26 @@ msgid "Description of the space time dataset"
 msgstr "Yeni veritabanı adı"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Yeni veritabanı adı"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19525,13 +20861,13 @@ msgstr "LANDSAT-4 için dönüşüm kurallarını kullan"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Katman numarası"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19615,7 +20951,7 @@ msgstr "girdi mevkisindeki vektör haritaları listele ve çık"
 msgid "Neighborhood size"
 msgstr "Komşuluk boyutu"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Enterpolasyon nokta sayısı"
@@ -19718,24 +21054,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Çıktı haritanın çözünürlüğü"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Sonuç haritanın başlığı"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Hassas çözünürlük"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Uygun olmayan çıktı dosya adı <%s>"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr ""
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Coğrafi koordinat olarak ekran konumu"
@@ -19800,17 +21153,37 @@ msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 "Vektör noktaların bulunduğu konumdaki vektör değerlerini tabloya yükler."
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "Sütunlar"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Düzenlenecek vektör haritanın adı"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Sütunlar"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Etiket için kullanılacak öznitelik sütunu adı"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 msgid "Maximum query distance in map units"
 msgstr "Harita birimlerine göre en büyük sorgu mesafesi"
 
@@ -19899,6 +21272,7 @@ msgstr "Raster değer"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -19914,10 +21288,15 @@ msgstr "ID değerleri"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "Raster değer"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20029,28 +21408,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "raster, seriler"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Boş veritabanı oluşturur."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -20085,7 +21459,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20098,7 +21472,7 @@ msgid "Radius of buffer in raster cells"
 msgstr ""
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Metrik"
 
@@ -20116,12 +21490,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Enterpolasyon nokta sayısı"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20149,7 +21523,7 @@ msgstr ""
 "yeniden örnekler"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20177,6 +21551,18 @@ msgstr "Eğri düzgünleştirme parametresi"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr ""
+"Raster harita katmanlarını ara değere göre hasaplama kullanarak daha hassas "
+"yeniden örnekler"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Mevki: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20186,19 +21572,10 @@ msgstr "Vektör harita tablosuna bir tablo bağlamayı sağlar."
 msgid "Vector map to which to join other table"
 msgstr "Diğer tabloya bağlanacak vektör harita"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 msgid "Layer where to join"
 msgstr "Bağlanacak katman"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "Sütunlar"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20226,17 +21603,17 @@ msgstr "Çıktı kopya sayısı"
 msgid "Imports space time raster dataset."
 msgstr "Raster harita istatistiklerini güncelle"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Geçerli bölgeyi girdi haritaya göre uyarla"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "<%s> raster haritası zaten mevcut"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20313,14 +21690,17 @@ msgstr "<%s> 3B raster haritası bulunamadı"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20351,11 +21731,11 @@ msgstr "Dizge için hafıza ayrılamıyor"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "<%s> raster haritasının kayar nokta aralığı okunamıyor"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Geçmiş dosyası okunurken hata"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20363,8 +21743,8 @@ msgstr "<%s@%s> raster haritası kapatılamıyor"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Veri yazmada hata"
 
@@ -20417,6 +21797,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "<%s> dosyası oluşturulamıyor"
@@ -20566,9 +21947,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Sınır rengi"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20594,7 +21976,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr ""
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "<%s> raster haritası oluşturulamıyor"
@@ -20657,6 +22042,142 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "'%s' dosyası zaten mevcut ve üzerine yazılacak."
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "İstatistikler hesaplanıyor..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "3d raster haritası kapatılamıyor"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "<%s> vektör haritası bulunamadı"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Haritalar hesaplanıyor ..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Öznitelik tablosu düzenlenecek nokta vektör haritasının adı"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Düzenlenecek vektör haritanın adı"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Çıktı bakı raster haritasının adı"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Maske için raster harita(lar) adı"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "uzunluk %f\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "İterasyon sayısı"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Varsayılan sürücü ayarlanmadı"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "raster, yükselti, enterpolasyon"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Hiç veri haritası belirlenmedi"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "Varsayılan veritabanı ayarlanamadı"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "En büyük iterasyon sayısı"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "En büyük iterasyon sayısı"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Yeni bölgedeki sütun sayısı"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "<%s> tablosu tanımlanamıyor"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Veri satırlarını okumada hata"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -20785,11 +22306,11 @@ msgstr "<%s>ASCII dosyası açılamıyor"
 msgid "3D raster map for which to modify null values"
 msgstr "Boş değer dosyası düzenlenecek raster harita "
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "BOŞ değer olarak atanacak hücre değerleri listesi"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr ""
 
@@ -20814,7 +22335,7 @@ msgstr ""
 msgid "modifyNull: Unable to close tmp file"
 msgstr "Geçici dosya açılamıyor."
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "vektör, değişim verisi"
@@ -20823,6 +22344,82 @@ msgstr "vektör, değişim verisi"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "ASCII poligon/çizgi/nokta veri dosyalarından raster harita oluşturur."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "        sütun sayısı"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Tekrarlanma sayısı \t= %d hücreler\n"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "<%s> 3B raster haritası bulunamadı"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Çıktı harita yazılıyor"
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "Boş değer dosyası düzenlenecek raster harita "
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "z koordinatı için kayıklık değeri"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "vectör, dönüştürme"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Geçici dosya oluşturulamıyor"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -20878,13 +22475,13 @@ msgstr ""
 msgid "Update range"
 msgstr "çıktı veri aralığı"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "<%s> raster haritasının kategori dosyası okunamıyor"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr " [%s] için kategori tablosu %s na ayarlandı"
@@ -20942,7 +22539,7 @@ msgstr "Veri satırlarını okumada hata"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Veri yükleniyor ...  (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "g3d dosyasını kapatmada hata"
@@ -21316,7 +22913,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr ""
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21326,7 +22923,7 @@ msgstr "<%s> bilinmeyen metod"
 msgid "Aggregate operation"
 msgstr "Bütünleştirme işlemi"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21359,6 +22956,39 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Hafıza ayrılamıyor"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Varyans"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+"Kırmızı, yeşil ve mavi harita katmanlarını tek bir karma raster harita "
+"katmanına birleştirir"
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Çıktı raster haritasının adı"
+
+#: ../raster3d/r3.gradient/main.c:63
+msgid "Size of blocks"
+msgstr ""
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Hafıza ayrılamıyor"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Yeni raster harita yazılıyor..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -21695,38 +23325,38 @@ msgstr "Kabuk betiği stilinde yazdır"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22029,13 +23659,13 @@ msgid "Unknown operation '%s'"
 msgstr "Bilinmeyen işlem"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr " vazgeçildi\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "< %s> Mevkisi oluşturuldu"
@@ -22109,9 +23739,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: dosyaları aynı, kopyalamaya gerek yok"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> zaten mevcut"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> zaten <%s> harita takımında mevcut"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22224,8 +23854,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 #, fuzzy
 msgid "Modify"
 msgstr "çeşitli"
@@ -22484,9 +24114,9 @@ msgstr "İçeri aktarılacak katmanların listesi"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Raster"
@@ -22500,15 +24130,15 @@ msgstr "<%s> harita takımı arama yoluna eklendi"
 msgid "File name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -22518,7 +24148,7 @@ msgid "Remove base raster maps"
 msgstr "Temel haritayı kaldır"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "<%s> açılamıyor."
@@ -22567,76 +24197,66 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr ""
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr ""
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Listelenecek harita takımı (varsayılan: geçerli arama yolu)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Harita takımı adı (varsayılan: geçerli)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Geçerli bölgeyi isimlendirilmiş bölgeden ayarla"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "Veri tipini yazdır"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr ""
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "<%s> grubu yok"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "<%s@%s> 3B raster haritası üstbilgisi okunamıyor"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "<%s> vektör haritası açılamıyor"
@@ -22841,56 +24461,56 @@ msgstr "Geçerli bçölge güncellenemiyor"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Geçersiz girdi <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "Geçerli mevkinin projeksiyon bilgisi alınamıyor"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Geçerli mevkinin projeksiyon birimleri alınamadı"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Enlem/Boylam parametreleri güncellenemedi"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr ""
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "Zaten enlem/boylam dasınız. Onun yerine -p bayrağını kullanın."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23108,38 +24728,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "<%s> sütunu nulunamıyor"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "İçeri aktarılacak raster dosya"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23445,10 +25086,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "İlk vektör modülüm"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "Önceden belirlenen vektör açma katmanı ayarlanamıyor"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -23610,7 +25247,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Tamamlanan yüzde..."
 
@@ -24028,7 +25665,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Geçerli proje için projeksiyon anahtar değerler elde edilemedi"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24218,147 +25855,147 @@ msgstr "d-b çözünürlüğü=%f"
 msgid "Writing new raster map..."
 msgstr "Yeni raster harita yazılıyor..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Verilen konumdaki vektör haritayı sorgular."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Girdi vektör haritasının mevkisi"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Girdi vektör haritasının harita takımı"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Yeniden projeksiyonlanacak girdi raster harita adı"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Çıktı raster harita adı (varsayılan: input)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Çıktı haritanın çözünürlüğü"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Girdi mevkisindeki raster haritaları listele ve çık"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Girdi mevkisindeki raster haritaları listele ve çık"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "Girdi mevkisindeki raster haritaları listele ve çık"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 msgid "Input and output locations are the same"
 msgstr ""
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr "Çıktı raster haritasının projeksiyon bilgisi alınamıyor"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "Çıktı raster haritasının projeksiyon birimleri alınamıyor"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr "Çıktı raster haritasının projeksiyon anahtar değerleri alınamıyor"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "<%s> - %s girdi mevkisindeki <%s> harita takımı"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "<%s> mevkisi <%s>harita takımındaki <%s> raster haritası bulunamadı"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "Girdi haritanın projeksiyon bilgisi alınamıyor"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "Girdi haritanın projeksiyon birimleri alınamıyor"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "Girdi haritanın projeksiyon anahtar değerleri alınamıyor"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Projeksiyonsuz veri (xy konumu) ile çalışılamıyor"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "<%s> - %s girdi mevkisindeki <%s> harita takımı"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Girdi:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Sütun: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Satır: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Kuzey: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Güney: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Batı: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Doğu: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "DB çözünürlüğü: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "KG çözünürlüğü: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Çıktı:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Projeksiyonlandırılıyor..."
 
@@ -24413,12 +26050,6 @@ msgstr ""
 "Raster harita katmanı destek dosyalarının oluşturulması ve/veya "
 "değiştirilmesine olanak tanır"
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Sonuç haritanın başlığı"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Harita veri birimleri için kullanılacak metin"
@@ -24445,22 +26076,22 @@ msgstr "Boş dosyayı sil"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "<%s> raster haritasıgeçerli harita takımında bulunamadı"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s], başka bir haritanın yeniden sınıflandırmasıdır. Çıkılıyor."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "[%s] için yeni boş değer dosyası yazılıyor..."
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "[%s] in boş değer dosyası siliniyor...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Yapıldı."
 
@@ -25225,7 +26856,7 @@ msgstr "%s = %s -- sıfırdan büyük olmalıdır"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s açılamıyor"
@@ -25424,8 +27055,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "<%s@%s> raster haritasının kategori dosyası okunamıyor"
@@ -25509,12 +27140,12 @@ msgstr "<%s> den girdi okunamıyor"
 msgid "Can't get cell header"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -25702,10 +27333,6 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "Çıktı kopya sayısı"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "z verisi süzme aralığı (en küçük, en büyük)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -25713,7 +27340,7 @@ msgstr "z verisi süzme aralığı (en küçük, en büyük)"
 msgid "Advanced Input"
 msgstr "Gelişmiş"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -25739,7 +27366,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "Geçersiz doğu"
@@ -25749,15 +27376,15 @@ msgstr "Geçersiz doğu"
 msgid "Invalid vrange"
 msgstr "Geçersiz doğu"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -25779,7 +27406,7 @@ msgid "Reading input data..."
 msgstr "Girdiler okunuyor..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -25822,16 +27449,16 @@ msgstr "<%d> sütununda ayrıştırılamayan enlem değeri: '%s'"
 msgid "Writing to output raster map..."
 msgstr "Çıktı %s raster haritası yazılıyor... "
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "Bölgede %lu nokta bulundu"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Veri taranıyor..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Aralık:     en küçük          en büyük\n"
@@ -25984,11 +27611,6 @@ msgstr "Çıktı raster haritasının adı"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "Çizelge tipi"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -26522,104 +28144,109 @@ msgstr "Uygun olmayan y koordinatı <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr ""
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "Girdi raster haritanın harita takımı"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "Boş değer dosyası düzenlenecek raster harita "
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "<%s> raster haritasıgeçerli harita takımında bulunamadı"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "Boş değer için uygun olmayan değer "
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "<%s> raster haritası zaten mevcut ve üzerine yazılacak"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "Arazi raster haritası (DEM)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "Arazi raster haritası (DEM)"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "Nokta raster haritası başlatılıyor"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "[%s] için yeni boş değer dosyası yazılıyor..."
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "<%s> raster haritası bulunamadı"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "[%s] in boş değer dosyası siliniyor...\n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s=%s -  uygun olmayan değer"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr ""
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "<%s> raster haritası yazılıyor..."
@@ -26949,7 +28576,7 @@ msgstr "Yeniden projeksiyonlanacak girdi raster harita adı"
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Obje tipi"
+msgstr "Çıktı raster harita başlığı"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27030,87 +28657,176 @@ msgstr "Dönüştürülüyor..."
 msgid "File <%s> created"
 msgstr "<%s> dosyası oluşturuldu"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr "ASCII poligon/çizgi/nokta veri dosyalarından raster harita oluşturur."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Yeniden kodlama kurallarını içeren dosya"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "z verisi süzme aralığı (en küçük, en büyük)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Raster değerlerin kaynağı"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Çıktı raster harita başlığı"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Bölgeyi bu raster haritanınkiyle eş olacak şekilde ayarla"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "<%s> grubu yok"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Bilinmeyen kural seçeneği: '%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Geçersiz harita <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "Veri okunuyor..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "<%s> çıktı dosyası açılamadı"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Haritaya yazılıyor ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "Bölgede %lu nokta bulundu"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr " [%s] dosyasını okunama için açmada hata"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "Raster harita katmanını ASCII metin dosyasına dönüştür"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Çıktı katmanı adı"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Çıktı raster haritasının adı"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Harita birimlerinde noktalar arasındaki en büyük uzaklık"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Eşik değeri içindeki tüm objelere  uzaklığı hesapla"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Bilinmeyen seçim '%s'"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Harita birimlerinde noktalar arasındaki en büyük uzaklık"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "<%s> geçici dosyası oluşturulamıyor"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27247,7 +28963,7 @@ msgstr "[%s]:Böyle bir renk yok"
 msgid "Converting <%s>..."
 msgstr "Dönüştürülüyor %s ..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "<%s> raster tipi uyumsuz"
@@ -27350,7 +29066,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Geçerli bölgede uygun mevki yok"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -27920,7 +29636,7 @@ msgstr "[%s]:Böyle bir renk yok"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28345,7 +30061,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "Kabuk betiği stilinde yazdır"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28367,11 +30083,6 @@ msgstr "sınıf %-3d"
 msgid "Unable to write to temp file"
 msgstr "Geçici dosya oluşturulamıyor"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "noktalar oluşturuluyor..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -28490,7 +30201,7 @@ msgid "Writing output raster map..."
 msgstr "Çıktı %s raster haritası yazılıyor... "
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -28501,42 +30212,42 @@ msgstr "<%s> raster haritası yazılıyor..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Raster harita katmanlarının alansal istatistiklerini oluştur"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Çıktı raster haritasının adı"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Başlangıç noktasının D ve K koordinatları"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Uygun olmayan doğu koordinatı <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "uygun olmayan kuzey koordinatı <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr ""
@@ -28626,22 +30337,22 @@ msgid "Invalid map type"
 msgstr "Geçersiz harita <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -28750,23 +30461,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -28774,8 +30485,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29271,220 +30982,225 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Girdi"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Girdi raster haritası adı"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Girdi yükselti raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Girdi raster harita(lar) adı"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Yükselti yüzeyini içeren raster haritanın adı"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "İçe aktarılacak en küçük alan boyutu (kare biriminde)"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "Harita birimlerine göre en büyük sorgu mesafesi"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Çıktı kopya sayısı"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Çıktı topoğrafik indeks haritası"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Çıktı bakı raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 msgid "Each half-basin is given a unique value"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Çıktı eğim raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Çıktı eğim raster haritasının adı"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 msgid "Slope steepness (S) factor for USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "z değerleri için dönüşüm faktörü"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Sadece yatay ve düşey su akışı olanaklıdır"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Üzgünüm, bir çıktı haritası seçmelisiniz."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s = %s -- pozitif sayı olmalıdır"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Enlem/Boylam mevki desteklenmiyor"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -29492,19 +31208,27 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+msgid "Closing TCI and SPI maps"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 msgid "Closing TCI map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+msgid "Closing SPI map"
+msgstr ""
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 msgid "Closing flow direction map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 msgid "Closing LS map"
 msgstr ""
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 msgid "Closing SL map"
 msgstr ""
 
@@ -29533,33 +31257,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "raster, yeniden örneklenecek"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr ""
 "Raster harita katmanlarını birleştirme kullanarak  daha kaba olarak yeniden "
 "örnekler"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Birleştirme yöntemi"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "%s için renk tablosu okunamıyor"
@@ -29958,7 +31682,7 @@ msgstr "Kayar nokta haritası için grey.eq renk tablosu yapılamıyor"
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "Kayar nokta haritası için grey.eq renk tablosu yapılamıyor"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "Bilinmeyen renk: [%s]"
@@ -30342,7 +32066,7 @@ msgid ""
 msgstr "Raster harita katmanlarının alansal istatistiklerini oluştur"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -30357,11 +32081,23 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "Kaynak noktası geçerli bölge dışındadır"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr ""
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Ya harita takımı= veya -l kullanılmalı"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -30637,33 +32373,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%d çizgisinin sınır kutusu alınamıyor"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Sınırlandırma kutusu:  l = %d, r = %d, t = %d, b = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "%d resim hücresi silindi"
 msgstr[1] "%d resim hücresi silindi"
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "İnceltme başarıyla tamamlandı."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -30956,32 +32692,12 @@ msgstr ""
 "Raster harita katmanından belirlenen eşyükselti eğrileri vektör harita "
 "katmanı üret."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Eşyükselti eğrileri aralığı"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Eşyükselti eğrileri listesi"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Eşyükselti eğrileri listesi"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "En küçük eşyükselti eğrisi"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "En büyük eşyükselti eğrisi"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr ""
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -31571,52 +33287,53 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 msgid "Raster map calculator."
 msgstr "Raster harita hesaplayıcı."
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 msgid "Expression to evaluate"
 msgstr "Değerlendirme için ifade"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Değerlendirme için ifade"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Değerlendirme için ifadeleri içeren dosya"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "Bilinen fonksiyonlar:"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Çıktı harita yazılıyor"
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 msgid "parse error"
 msgstr "ayrıştırma hatası"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "Hesaplamada kayar nokta hata(ları)sı oluştu"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "Hesaplamada taşma oluştu"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Bilinmeyen tip: %d"
@@ -31666,80 +33383,80 @@ msgstr "'%s' fonksiyonu için bilinmeyen hata"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "<%s@%s> raster haritasının renk dosyası okunamıyor"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "<%s@%s> raster haritası için btree oluşturulamıyor"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Belirlenemeyen değişken '%s'"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Geçersiz harita <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Belirlenemeyen fonksiyon '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "<%s@%s> raster haritası kapatılamıyor"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Çıktı raster haritası kapatılamıyor"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Bilinen fonksiyonlar:"
@@ -31923,21 +33640,21 @@ msgstr ""
 msgid "Reverse sweep complete"
 msgstr ""
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr ""
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "Mevki: PROJ_INFO:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "Veri takımı PROJ_INFO su:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -31976,14 +33693,6 @@ msgstr "dosya-olmayan GDAL veri kaynağı adı"
 msgid "Band to select (default is all bands)"
 msgstr "Seçilecek band (varsayılan tüm bandlardır)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32006,7 +33715,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "Ya harita takımı= veya -l kullanılmalı"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Geçerli bçölge güncellenemiyor"
@@ -32025,7 +33734,7 @@ msgstr "<%s> raster haritası zaten mevcut ve üzerine yazılacak"
 msgid "Reading band %d of %d..."
 msgstr "%s haritası okunuyor ..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Seçilen (%d) bandı yok"
@@ -32094,193 +33803,212 @@ msgstr "%s için destek dosyaları oluşturuluyor"
 msgid "Link to raster map <%s> created."
 msgstr "<%s> raster haritası zaten mevcut"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "İkili raster dosyasını GRASS raster harita katmanına dönüştür."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "İçeri aktarılacak raster dosya"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Seçilecek band (varsayılan tüm bandlardır)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Görüntü hedef mevkisi adı"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "Projeksiyon bilgisi okunacak coğrafi referanslı dosya adı"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Raster bandı alınamıyor"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Girdi raster yükselti haritası adı [metre]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Öznitelik tablosu oluşturmayın"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Projeksiyonun üstüne yaz (mevkinin projeksiyonunu kullan)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "Tabloları yaz ve çık"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "Alt ve üst haritayı belirlemelisiniz"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "<%s> veri kaynağı açılamıyor"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "<%s> girdi raster haritası okunuyor..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Doku dosyası açılamıyor"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Raster bandı alınamıyor"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "nokta dosyasındaki %d YKN <%s> için kopyalanıyor"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "YKN tablosu yeniden projeksiyonlandırılıyor:"
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "Hedef mevkinin projeksiyon bilgisi alınamıyor"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Hedef mevkinin projeksiyon birimleri alınamadı"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "Hedef mevkinin projeksiyon anahtar değerler elde edilemedi"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "<%s> raster haritası yazılıyor..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "<%s> için gri renk tablosu ayarlanıyor (8 bit, tam aralık)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "<%s> için gri renk tablosu ayarlanıyor (16 bit, tam aralık)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "<%s> dosyası açılamıyor"
@@ -32402,7 +34130,7 @@ msgstr "Yükselti haritası okunuyor..."
 msgid "Writing topographic index map..."
 msgstr "Topoğrafik indeks haritası yazılıyor..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Girdi nokta sayısı: %d."
@@ -32501,34 +34229,34 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "Görüntü indeksi"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
 msgstr ""
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr ""
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Sonuç raster haritanın adı"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr ""
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Girdi haritaları en küçük sayısı ikidir"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "<%s> için destek dosyaları oluşturuluyor"
@@ -32597,37 +34325,6 @@ msgstr "raster, yükselti"
 msgid "Converts a raster map into a vector map."
 msgstr "Raster haritayı vektör haritaya dönüştür"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Etiket için kullanılacak öznitelik sütunu adı"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Alan objelerinin köşelerini düzgünleştir"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "z koordinatı için kayıklık değeri"
-
-#: ../raster/r.to.vect/main.c:105
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Topoloji oluşturma"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -33129,11 +34826,6 @@ msgstr ""
 msgid "Advanced"
 msgstr "Gelişmiş"
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Çıktı eğim raster haritası"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -33419,7 +35111,7 @@ msgstr ""
 msgid "Name for output raster map(s)"
 msgstr "Çıktı raster haritasının adı"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr ""
 
@@ -33445,7 +35137,7 @@ msgstr "En büyük iterasyon sayısı"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "<%s raster haritası okunuyor..."
@@ -33778,7 +35470,7 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -33804,7 +35496,7 @@ msgstr "Görüntü indeksi"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Yapılandırma dosyası"
@@ -33823,7 +35515,7 @@ msgstr "Raster harita leke alanı standart sapmasını hesaplar"
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "Görüntü indeksi"
@@ -33969,7 +35661,7 @@ msgstr ""
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr ""
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 
@@ -34144,11 +35836,11 @@ msgstr "kuzey=%f"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Aralık değerleri dosyası okunamadı"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "<%s> raster haritasının kayar nokta aralığı okunamıyor"
@@ -34364,21 +36056,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Harita merkezi koordinatlarını kullan\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "<%s> raster haritası yazılıyor"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Geçersiz harita <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Harita merkezi koordinatlarını kullan\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "<%s> raster haritası yazılıyor"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Harita merkezi koordinatlarını kullan\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "<%s> raster haritası yazılıyor"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -34404,76 +36136,85 @@ msgstr ""
 msgid "Print compression information and data type of input map(s)"
 msgstr "Kabuk betiği stilinde yazdır"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "<%s> vektör haritası geçerli harita takımında bulunamadı"
+
+#: ../raster/r.compress/main.c:131
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "Kır"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] zaten sıkıştırıldı"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] zaten sıkıştırıldı"
+msgid "Uncompressing <%s>"
+msgstr "Değerlendirme için ifade"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "Değerlendirme için ifade"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Değerlendirme için ifade"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr " <%s> harita takımındaki [%s] etiket dosyası açılamıyor"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -34505,54 +36246,54 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "<%s> dosyası bulunamadı"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "Çizgiler"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr ""
 "Raster harita katmanlarını birleştirme kullanarak  daha kaba olarak yeniden "
 "örnekler"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Ya harita takımı= veya -l kullanılmalı"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "<%s> çok fazla dokuya sahip (sınır 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Bağlanacak raster dosya"
@@ -34963,21 +36704,26 @@ msgstr[1] "Haritalar hesaplanıyor ..."
 msgid "Calculating %s"
 msgstr "Haritalar hesaplanıyor ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'katman' >=0 olmalı"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Bağlantı"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr ""
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Yüklenecek en büyük sütun sayısı"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35118,7 +36864,7 @@ msgstr "Edilgenleştir"
 msgid "Grid line width"
 msgstr "Vektör çizgi genişliği"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Grid rengi"
 
@@ -35243,14 +36989,10 @@ msgid "Starting and ending coordinates"
 msgstr "Başlangıç ve bitiş koordinatları"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Çizgi rengi"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Metin rengi veya \"hiçbiri\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -35279,8 +37021,8 @@ msgid "Name of monitor to start"
 msgstr "Çıktı betikleyicisinin adı"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -35342,48 +37084,66 @@ msgstr "Geçerli bağlantı parametrelerini yaz ve çık"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Girdi mevkisindeki raster haritaları listele ve çık"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "Geçerli bağlantı parametrelerini yaz ve çık"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Girdi mevkisindeki raster haritaları listele ve çık"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "renk okunamıyor"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, fuzzy, c-format
 msgid "Monitor <%s> released"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 #, fuzzy
 msgid "No monitor selected"
 msgstr "Hiç yazıtipi seçilmedi"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Ya harita takımı= veya -l kullanılmalı"
@@ -35393,64 +37153,74 @@ msgstr "Ya harita takımı= veya -l kullanılmalı"
 msgid "Monitor <%s> is not running"
 msgstr "<%s> dosyası bulunamadı"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "<%s> 3dpencere dosyası bulunamadı"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "<%s> dosyası oluşturulamıyor"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Dosya bulunamadı: %s"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "'%s' OGR veri kaynağı açılamıyor"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "<%s> dosyası oluşturulamıyor"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "'%s' dosyası zaten mevcut ve üzerine yazılacak."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "%d çizgisi silinemiyor"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Çıktı tipi"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "<%s> vektör haritası zaten mevcut"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "<%s> dosyası oluşturulamıyor"
+msgid "Starting monitor <%s>..."
+msgstr "<%s> vektör haritası yazılıyor ..."
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Aralık dosyası okunamıyor"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "<%s> vektör haritası zaten mevcut"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Nokta koordinatları listesi"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "<%s> sütunu nulunamıyor"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "<%s> dosyası açılamıyor"
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Aralık dosyası okunamıyor"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "%d çizgi veya sınır <%s@%s> vektör haritasında bulundu"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -35557,27 +37327,45 @@ msgstr "Uygun olmayan süzgeç tipi belirlendi"
 msgid "[%s]: illegal value specified"
 msgstr "%s=%s -  uygun olmayan değer"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "vectör, dönüştürme"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr "Grafik ektanındaki aktif çerçevedeki raster harita için lejand göster"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 msgid "Align grids with raster cells"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Metin rengini hücre ren değerinden al"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Ayarlar"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "yazıtipi dosyası yolu"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -35585,7 +37373,7 @@ msgstr[0] "Grid rengi"
 msgstr[1] "Grid rengi"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -35593,7 +37381,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -35673,11 +37461,6 @@ msgstr "Alan doldurma rengi"
 msgid "Colorize features according color definition column"
 msgstr "Renk tanım sütunu adı (-a bayrağı ile kullanmak için)"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Renk tanım sütunu belirlenemedi"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -35687,7 +37470,7 @@ msgstr ""
 msgid "Lines"
 msgstr "Çizgiler"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Çizgi genişliği"
 
@@ -36224,37 +38007,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Geçersiz koordinatlar <%s,%s>"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Aktif görüntü ekranı ile ilgili bilgi göster"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Ekran dörtgenini göste (sol, sağ, üst,alt)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Ekran boyutlarını göster (genişlik, yükseklik)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Aktif çerçeve dörtgenini göster"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Ekran boyutlarını göster (genişlik, yükseklik)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Geçerli bölnenin çerçeve dörtgenini göster"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -36506,14 +38289,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr "Çizgi aralığı"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "yazıtipi dosyası yolu"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Girdi dosya"
@@ -36575,7 +38350,7 @@ msgstr "Çizelge tipi"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Çizelge özellikleri"
 
@@ -36611,12 +38386,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "3B çıktı oluştur"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -36659,14 +38444,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Lejand için harita düzeni altkümesi kullan(min,max)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Ayarlar"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -36750,11 +38528,12 @@ msgstr "Renk dizisi mevcut verinin üst limitini aşıyor"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Hiçbirşey çizilemiyor! (etiketli kategori mi yok?) "
 
@@ -36768,37 +38547,93 @@ msgstr "Ölçek çubuğunu grafik ekranında gösterir."
 msgid "North arrow style"
 msgstr "Sadece kuzey oku çiz"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Etiketin solüst köşe ekran koordinatları([0,0] çerçeve sol üst köşe "
 "koordinatı)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Çizgi rengi"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Sadece ölçek çubuğu çiz"
@@ -36815,68 +38650,68 @@ msgstr "Harita kapatılamıyor"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Görüntülenecek raster bakı haritası adı"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Mevcut raster bakı haritası tipi"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Kuzey oku rengi"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Kuzey oku rengi"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Kuzey oku rengi"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Belirsiz bilgiyi gösterme rengi"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Ok uzunluğunun değerlerini içeren raster harita"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Ölçek faktörü için uygun olmayan değer"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "Atlama faktörü için uygun olmayan değer"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "Aralık değerleri dosyası okunamada sorun"
 
@@ -37155,57 +38990,43 @@ msgstr "<%s> için aralık dosyası yok"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "<%s> raster haritasıgeçerli harita takımında bulunamadı"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "<%s> altgrubu bulunamadı"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "<%s> raster haritası <%s> altgrubunda değil"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "Hiç raster harita kaldırılmadı"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "[%s] altgrubunda hiç dosya yok"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "[%s] altgrubunda sadece 1 dosya var"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "%s i çalıştırmak için altgrup enazından iki dosyaya sahip olmalıdır"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Doku dosyası açılamıyor"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "[%s] doku dosyası okunamıyor"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, fuzzy, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s> çok fazla dokuya sahip (sınır 255)"
@@ -37278,50 +39099,64 @@ msgstr "Sınıftaki minimum piksel sayısı"
 msgid "Name for output file containing final report"
 msgstr "Sonuç dokularını içeren dosya"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "<%s> raster haritasıgeçerli harita takımında bulunamadı"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "<%s> altgrubu bulunamadı"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr ""
 "\n"
 "<%s> -- uygun olmayan başlangıç sınıfları"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr ""
 "\n"
 "<%s> -- uygun olmayan örnek aralığı değer(ler)i"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr ""
 "\n"
 "<%s> -- uygun olmayan iterasyon değeri"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Boş değer için uygun olmayan değer "
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr ""
 "\n"
 "<%s> -- uygun olmayan iterasyon değeri"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Boş değer için uygun olmayan değer "
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "<%s> geçici dosyası oluşturulamıyor"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
@@ -37329,129 +39164,129 @@ msgstr ""
 "\n"
 "#################### SINIFLAR ##################\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Mevki: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Harita takımı:  %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Grup:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Altgrup: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Sonuç doku dosyası: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Bölge\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Kuzey: %12.2f  Doğu: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Güney: %12.2f  Batı: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Güney: %12.2f  Batı: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Satır:  %12d  Sütun: %12d  Hücre: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Maske: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Kümeleme parametreleri\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr "Başlangıç sınıf sayısı:      %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [%s doku dosyasından]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr " Minimum sınıf boyutu:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr " Minimum sınıf boyutu:           %d\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr " Maksimum iterasyon sayısı: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "Raster harita okunuyor..."
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 #, fuzzy
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 "Hafıza yetersiz. Lütfen tekrar çalıştırın ve daha küçük örnek boyutu seçin"
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "Etiket boyutu (nokta olarak)"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 #, fuzzy
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
@@ -37459,30 +39294,30 @@ msgstr ""
 "Yeterince örnek noktası yok. Lütfen yeniden çalıştırın ve daha büyük örnek "
 "boyutu seçin"
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## final results #############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr ""
 "[%s] grubunun [%s] altgrubu içindeki [%s] doku dosyası oluşturulamıyor."
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -37490,12 +39325,12 @@ msgstr ""
 "\n"
 "#################### SINIFLAR ##################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d sınıf, %.2f%% nokta kararlı\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -37800,8 +39635,8 @@ msgid "radiance"
 msgstr "Varyans"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Kırmızı kanal yüzey yansıtma haritası adı"
@@ -38173,359 +40008,403 @@ msgstr "<%s> grubu yok"
 msgid "group <%s> references the following subgroups\n"
 msgstr "[%s] altgrubunda hiç dosya yok"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Raster temel haritanın adı"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Çözünürlük"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Kalite kontrol parametrelerini Modis QC katmanlarından çıkart"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Kırmızı kanal yüzey yansıtma haritası adı"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Çıktı QC tipi sınıflandırma katmanı adı"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Girdi katmanı adı"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 msgid "Name of QC type to extract"
 msgstr "Çıkartılacak QC tipi adı"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Raster yön çıktı haritası"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 #, fuzzy
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr "250m Modis ürünü için bant numarası=[1,2],500m=[1-7]"
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "bant sayısı izin verilen aralık dışında [1-7]"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "bant sayısı izin verilen aralık dışında [1-7]"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -38728,7 +40607,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Sınıftaki minimum piksel sayısı"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "uygun olmayan satır sayısı<%s> "
@@ -39088,108 +40967,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Hafıza almadı"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Veri satırlarını okumada hata"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Parça dosyasını yazmada hata"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Veri yazmada hata"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "oluşturulacak nokta sayısı"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "İşlem tamamlanmadı"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Çıktı harita yazılıyor"
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "a girdisi alanları işleniyor ..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att dosyası zaten mevcut"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Çözünürlük"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Veri satırlarını okumada hata"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Parça dosyasını yazmada hata"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Veri yazmada hata"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "oluşturulacak nokta sayısı"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Çıktı harita yazılıyor"
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -39263,63 +41148,80 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Eşik değeri >=0 olmalı"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "%s için parça dosyası yazılamıyor"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Geçersiz yöntem: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "Raster harita bulunamadı"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Temel harita tamsayı (CELL) harita olmalıdır"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Raster harita bulunamadı"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr " Maksimum iterasyon sayısı: %d\n"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 msgid "Invalid number of MB, 300 will be used"
 msgstr ""
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "İşlem tamamlanmadı"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -39390,7 +41292,7 @@ msgstr "Çıktı raster haritasının adı"
 msgid "Name for output raster map (blue)"
 msgstr "Çıktı raster haritasının adı"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -39442,7 +41344,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr ""
@@ -40294,55 +42196,60 @@ msgstr "<%s> grubu bulunamadı"
 msgid "Option '%s' is required for new exposure info"
 msgstr "< %s> Mevkisi oluşturuldu"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "Girdi hatalı"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Kırmızı kanal yüzey yansıtma haritası adı"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 #, fuzzy
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr "Aster (6 girdi bandı:1,3,5,6,8,9)"
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 #, fuzzy
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr "Aster (6 girdi bandı:1,3,5,6,8,9)"
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 #, fuzzy
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr "Aster (6 girdi bandı:1,3,5,6,8,9)"
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+#, fuzzy
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr "Aster (6 girdi bandı:1,3,5,6,8,9)"
+
+#: ../imagery/i.albedo/main.c:132
 #, fuzzy
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr "Aster (6 girdi bandı:1,3,5,6,8,9)"
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 msgid "At least two raster maps are required"
 msgstr "En azından iki raster harita gereklidir"
 
@@ -40622,6 +42529,10 @@ msgstr "vectör, dönüştürme"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 #, fuzzy
 msgid ""
@@ -41015,13 +42926,39 @@ msgstr "Çıktı raster haritasının adı"
 msgid "Name for output raster map (saturation)"
 msgstr "Çıktı raster harita adı (varsayılan: input)"
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> zaten mevcut"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Projeksiyon ayarlanamıyor"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] zaten sıkıştırıldı"
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "Hesaplamada taşma oluştu"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Projeksiyon ayarlanamıyor"
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Hiç veri noktası bulunamadı"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Sütun eklenecek katman"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Sütun eklenecek katman"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Katman numarası"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Kaynak noktası koordinatları"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "Öznitelik tablosu oluşturmayın"
 
 #, fuzzy
 #~ msgid "Calcuates bioclimatic indices."
@@ -41071,46 +43008,6 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "Number of quartals to use"
 #~ msgstr "Sıklık sayısı"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Çizgileri içeren girdi vektör haritasının adı"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Çizgileri içeren girdi vektör haritasının adı"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Yükselti raster haritasının adı [m]"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Girdi raster yükselti haritası adı [metre]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr "Yükselti raster haritasının adı [m]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr "Çıktı QC tipi sınıflandırma katmanı adı"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Enterpolasyon nokta sayısı"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Projeksiyonun üstüne yaz (mevkinin projeksiyonunu kullan)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Mevki: %s\n"
 
@@ -41120,30 +43017,37 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "Region\n"
 #~ msgstr "Bölge\n"
 
+#~ msgid "Subregion"
+#~ msgstr "Alt bölge"
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Kategori artışı"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "seçenek <%s>: <%s>mevcut."
-
-#~ msgid "output map <%s> exists"
-#~ msgstr "<%s> çıktı haritası mevcut"
-
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Çıktı topoğrafik indeks haritası"
+#~ msgid "Could not rewind input file"
+#~ msgstr "<%s> çıktı dosyası açılamadı"
 
 #, fuzzy
 #~ msgid "Name for basins raster map"
 #~ msgstr "Girdi raster haritası adı"
 
+#, fuzzy
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> zaten <%s> harita takımında mevcut"
+
+#~ msgid "output map <%s> exists"
+#~ msgstr "<%s> çıktı haritası mevcut"
+
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Sayfa uzunluğu (varsayılan: %d satır)"
 
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Sayfa genişliği (varsayılan: %d karakter)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Projeksiyonun üstüne yaz (mevkinin projeksiyonunu kullan)"
+
 #~ msgid "%s: Error writing temporary file"
 #~ msgstr "%s: Geçici dosyayı yazmada hata"
 
@@ -41158,11 +43062,28 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "[%s] not found"
 #~ msgstr "[%s] bulunamadı"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "seçenek <%s>: <%s>mevcut."
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr ""
+#~ "Veri takımı projeksiyonu üzerine yaz (mevkinin projeksiyonunu kullan)"
+
 #, fuzzy
 #~ msgid "Location name (not location path)"
 #~ msgstr "Yeni MEVKİ adı (mevki yolu değil)"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Projeksiyon ayarlanamıyor"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Eski GRASS sürümündeki vektör haritaları içe aktarır."
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Vektör harita değişim verisini günceller."
 
@@ -41200,100 +43121,52 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "No default DB driver defined"
 #~ msgstr "Varsayılan sürücü ayarlanmadı"
 
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s> zaten <%s> harita takımında mevcut"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Eski GRASS sürümündeki vektör haritaları içe aktarır."
+#~ msgid "OGR datasource name"
+#~ msgstr "OGR veri kaynağı adı"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Hiç harita adı verilmedi"
 
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Yeniden sınıflandırma haritaları yeniden adlandırılıyor"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr ""
-#~ "[%s] grubunun [%s] altgrubu içindeki [%s] doku dosyası oluşturulamıyor."
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d kategori <%s> tablosundan yüklendi"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Lütfen z sütununu belirleyin"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
-
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "kn aralığı için geçersiz değer= <%s>"
-
 #, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Lütfen z sütununu belirleyin"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "<%s> dosyası oluşturulamıyor"
 
 #, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Lütfen z sütununu belirleyin"
+#~ msgid "Env file not found"
+#~ msgstr "<%s> 3dpencere dosyası bulunamadı"
 
 #, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Lütfen z sütununu belirleyin"
+#~ msgid "PID file not found"
+#~ msgstr "Dosya bulunamadı: %s"
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Lütfen z sütununu belirleyin"
+#~ msgid "Command file not found"
+#~ msgstr "<%s> sütunu nulunamıyor"
 
-#, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Yeniden sınıflandırma haritaları yeniden adlandırılıyor"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Ya standart renk adı veya K:Y:M üçlemesi"
+#~ msgid "Name for output image"
+#~ msgstr "Çıktı dosya adı"
 
 #, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
+#~ msgid "Unable to read REF file for group <%s>"
 #~ msgstr ""
-#~ "Konusal vektör alan haritasını grafik ekrandaki aktif çerçevede göster."
-
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Yazı yazma rengi"
+#~ "[%s] grubunun [%s] altgrubu içindeki [%s] doku dosyası oluşturulamıyor."
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "grid rengi veya \"none\""
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d kategori <%s> tablosundan yüklendi"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr "Çıktı raster haritasının adı"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Varsayılan sürücü ayarlanmadı"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Ayrıca maksimum SPOTTING(yayılma) uzaklığını üretir"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -41359,16 +43232,37 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgstr "Çizgiler"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr "Çıktı raster haritasının adı"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Ayrıca maksimum SPOTTING(yayılma) uzaklığını üretir"
+#~ msgid "Default: input"
+#~ msgstr "Varsayılan sürücü ayarlanmadı"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Görüntü"
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr ""
+#~ "Konusal vektör alan haritasını grafik ekrandaki aktif çerçevede göster."
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "Metin rengi veya \"hiçbiri\""
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Yazı yazma rengi"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "grid rengi veya \"none\""
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Ya standart renk adı veya K:Y:M üçlemesi"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "Çizgiler"
 
 #, fuzzy
 #~ msgid ""
@@ -41377,17 +43271,33 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ "Raster harita katmanı destek dosyalarının oluşturulması ve/veya "
 #~ "değiştirilmesine olanak tanır"
 
-#, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Vektör harita okunamıyor"
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Girdi dig dosyasını açmada hata."
 
-#, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Tablo oluşturulamıyor: %s"
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "dig_att dosyası yok."
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Girdi dig_att dosyasını açmada hata."
+
+#~ msgid "Attaching categories..."
+#~ msgstr "Kategoriler ekleniyor..."
+
+#~ msgid "Writing new file..."
+#~ msgstr "Yeni dosya yazılıyor..."
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "[%d] nokta ve çizgi çıktı dosyasına yazıldı."
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "[%d] alan merkezi çıktı dosyasına yazıldı."
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Eski GRASS sürümündeki vektör haritaları içe aktarır."
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "az için yetersiz hafıza"
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "<%s> dig_att dosyası açılamıyor\n"
 
 #~ msgid "Reading dig file..."
 #~ msgstr "dig dosyası okunuyor..."
@@ -41461,88 +43371,28 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "[%d] kategori hafızaya alındı"
 
-#, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "<%s> dig_att dosyası açılamıyor\n"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Girdi dig dosyasını açmada hata."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "dig_att dosyası yok."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Girdi dig_att dosyasını açmada hata."
-
-#~ msgid "Attaching categories..."
-#~ msgstr "Kategoriler ekleniyor..."
-
-#~ msgid "Writing new file..."
-#~ msgstr "Yeni dosya yazılıyor..."
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "[%d] nokta ve çizgi çıktı dosyasına yazıldı."
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "[%d] alan merkezi çıktı dosyasına yazıldı."
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Eski GRASS sürümündeki vektör haritaları içe aktarır."
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "Bilinmeyen raster harita tipi"
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Önbellek boyutu (MiB)"
-
 #~ msgid "One or more coordinates"
 #~ msgstr "Bir veya daha fazla koordinat"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "adx  için yetersiz hafıza"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "ady için yetersiz hafıza"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "adxx için yetersiz hafıza"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "adyy için yetersiz hafıza"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "adxy için yetersiz hafıza"
-
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "GRASS nokta_listesi dosyasını vektör haritaya dönüştürür"
-
-#~ msgid "Site file <%s> not found"
-#~ msgstr "<%s> nokta dosyası bulunamadı"
+#~ msgid "Name of elevation map"
+#~ msgstr "Yükselti haritası adı"
 
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Nokta_listasi biçimini tahminde hata"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Hiçbir değer içermeyen hücreyi temsil eden karakter"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "Noktalar vektör nokta haritasına dönüştürülüyor..."
-
-#~ msgid "%d sites written."
-#~ msgstr "%d nokta yazıldı"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
+#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
 
-#, fuzzy
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "geonames.org ülke dosyalarını GRASS vektör nokta haritasını içe aktarır."
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "<%s> için kategori dosyasını okumada hata"
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Çıktı dosya adı (uzantısını eklemeyin)"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "<%s> için renk dosyasını okumada hata"
 
 #, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Yükselti için raster harita(lar) adı"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Raster harita katmanları için istatistikler raporlanıyor."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -41554,10 +43404,6 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "MAVİ(BLUE) için kullanılacak çıktı katman adı"
 
-#, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Raster harita katmanları için istatistikler raporlanıyor."
-
 #~ msgid "Surface generation program."
 #~ msgstr "Yüzey oluşturma programı"
 
@@ -41573,34 +43419,6 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgstr[0] "<%s> raster haritası enterpole ediliyor ... %d satır... "
 #~ msgstr[1] "<%s> raster haritası enterpole ediliyor ... %d satır... "
 
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Mevki: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "görüntü,şebeke"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "Yükselti haritası adı"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Hiçbir değer içermeyen hücreyi temsil eden karakter"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "<%s> için kategori dosyasını okumada hata"
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "<%s> için renk dosyasını okumada hata"
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "Çıktı z-dosyası (yükselti) haritası"
 
@@ -41623,8 +43441,19 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgstr "Kullanılabilir harita takımlarını listele"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Bütünleştirme işlemi"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr ""
+#~ "geonames.org ülke dosyalarını GRASS vektör nokta haritasını içe aktarır."
+
+#, fuzzy
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Çıktı dosya adı (uzantısını eklemeyin)"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Yükselti için raster harita(lar) adı"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -41643,6 +43472,79 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgstr "Çıktı raster harita (varsayılan: girdi)"
 
 #, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "grid rengi veya \"none\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "grid rengi veya \"none\""
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Belirsiz bilgiyi gösterme rengi"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "grid rengi veya \"none\""
+
+#~ msgid "Invalid distance"
+#~ msgstr "Geçersiz uzaklık"
+
+#~ msgid "Layer number"
+#~ msgstr "Katman numarası"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Mevki: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "görüntü,şebeke"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Lütfen z sütununu belirleyin"
+
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "kn aralığı için geçersiz değer= <%s>"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Lütfen z sütununu belirleyin"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Lütfen z sütununu belirleyin"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Lütfen z sütununu belirleyin"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Lütfen z sütununu belirleyin"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Görüntü"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Bütünleştirme işlemi"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Yükselti raster haritası adı"
 
@@ -41661,8 +43563,63 @@ msgstr "Çıktı raster harita adı (varsayılan: input)"
 #~ msgid "Color for drawing grid or \"none\""
 #~ msgstr "Grid veya \"none\" için renk"
 
-#~ msgid "Invalid distance"
-#~ msgstr "Geçersiz uzaklık"
+#~ msgid "Not enough memory for adx"
+#~ msgstr "adx  için yetersiz hafıza"
 
-#~ msgid "Layer number"
-#~ msgstr "Katman numarası"
+#~ msgid "Not enough memory for ady"
+#~ msgstr "ady için yetersiz hafıza"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "adxx için yetersiz hafıza"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "adyy için yetersiz hafıza"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "adxy için yetersiz hafıza"
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Tablo oluşturulamıyor: %s"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "az için yetersiz hafıza"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
+
+#, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "Ya harita takımı= veya -l kullanılmalı"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "GRASS nokta_listesi dosyasını vektör haritaya dönüştürür"
+
+#~ msgid "Site file <%s> not found"
+#~ msgstr "<%s> nokta dosyası bulunamadı"
+
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Nokta_listasi biçimini tahminde hata"
+
+#, fuzzy
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "Noktalar vektör nokta haritasına dönüştürülüyor..."
+
+#~ msgid "%d sites written."
+#~ msgstr "%d nokta yazıldı"
+
+#, fuzzy
+#~ msgid "Unable to create vector map"
+#~ msgstr "Vektör harita okunamıyor"
+
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Önbellek boyutu (MiB)"
+
+#~ msgid "Unknown raster map type"
+#~ msgstr "Bilinmeyen raster harita tipi"
diff --git a/locale/po/grassmods_vi.po b/locale/po/grassmods_vi.po
index 9601ba6..fb3cada 100644
--- a/locale/po/grassmods_vi.po
+++ b/locale/po/grassmods_vi.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_vi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2010-08-27 14:37+0700\n"
 "Last-Translator: \n"
 "Language-Team: Vietnamese <grass-translations at lists.osgeo.org>\n"
@@ -254,6 +254,7 @@ msgstr "Không tìm thấy bộ bản đồ <%s>"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -488,6 +489,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "Lỗi khi đang đóng tập tin ASCII"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -627,29 +633,29 @@ msgstr "Không thể mở nguồn dữ liệu OGR '%s'"
 msgid "Unable to open database:"
 msgstr "Không thể mở csdl:"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "Kết nối CSDL không được định nghĩa"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "<%s> đã có"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "Không thể tạo bảng: %s"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "Không tìm thấy bộ bản đồ <%s>"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 msgid "Unable to create index"
@@ -660,6 +666,11 @@ msgstr "Không thể tạo chỉ mục"
 msgid "Unable grant on table:"
 msgstr "Không thể chép bảng"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "Không thể thiết lập kích thước"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -790,7 +801,7 @@ msgstr "Không thể mở CSDL <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -869,17 +880,17 @@ msgstr "tên"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr "Các thiết lập"
 
@@ -891,7 +902,7 @@ msgstr "Số lần chạy qua %d..."
 #: ../db/db.login/main.c:75
 #, fuzzy
 msgid "Hostname"
-msgstr "Tên phông"
+msgstr "Kiểm tra tên"
 
 #: ../db/db.login/main.c:76 ../db/db.login/main.c:85
 msgid "Relevant only for pg and mysql driver"
@@ -914,39 +925,39 @@ msgstr "In ra các tham số kết nối hiện hành và thoát"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -991,7 +1002,7 @@ msgstr "Liệt kê tất cả các trình điều khiển CSDL."
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1021,7 +1032,7 @@ msgstr "vecotr, bảng thuộc tính"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1113,10 +1124,10 @@ msgid "Unable to open database <%s>"
 msgstr "Không thể mở CSDL <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1305,11 +1316,11 @@ msgstr "thất bại"
 msgid "succeeded"
 msgstr "... thành công."
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "Không thể mở tập tin <%s> để ghi"
@@ -1344,10 +1355,10 @@ msgstr "Tên của cột thuộc tính được dùng cho tùy chọn 'query'"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 msgid "Format"
 msgstr "Định dạng"
 
@@ -1356,7 +1367,7 @@ msgstr "Định dạng"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "Dấu phân cách bản ghi theo chiều đứng ở đầu ra"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1365,7 +1376,7 @@ msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr ""
 "Tên tập tin đầu ra (nếu bỏ qua hoặc \"-\" thì xuất ra đầu ra tiêu chuẩn)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "Không đưa  tên cột vào đầu ra"
 
@@ -1373,7 +1384,7 @@ msgstr "Không đưa  tên cột vào đầu ra"
 msgid "Describe query only (don't run it)"
 msgstr "Chỉ mô tả truy vấn (không chạy nó)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "Đầu ra theo chiều đứng (thay vì ngang)"
 
@@ -1423,6 +1434,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "Tên tập tin chứa các câu lệnh SQL"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "Bỏ qua các lỗi SQL và tiếp tục"
 
@@ -1605,7 +1617,6 @@ msgstr "Quay bản vẽ 90 độ"
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1726,7 +1737,7 @@ msgstr "Không thể nạp dữ liệu từ bảng"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1734,15 +1745,15 @@ msgstr "Không thể nạp dữ liệu từ bảng"
 msgid "Error in pj_do_proj"
 msgstr "Lỗi trong pj_do-proj"
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "Không thể lấy các giá trị chính về phép chiếu  của vị trí hiện tại"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1837,7 +1848,7 @@ msgstr "Không thể tạo tập tin mặt nạ PostScript tạm."
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, c-format
 msgid "Reading raster map <%s>..."
@@ -1883,7 +1894,7 @@ msgstr "Không thể lấy thông tin lớp của bản đồ vec-tơ"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1896,26 +1907,27 @@ msgstr "Không thể lấy thông tin lớp của bản đồ vec-tơ"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
@@ -1925,7 +1937,8 @@ msgid "Column type not supported (must be string)"
 msgstr "Kiểu cột không được hỗ trợ (phải là kiểu chuỗi)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2071,13 +2084,13 @@ msgstr "Không thể mở tập tin mặt nạ PostScript tạm thời."
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2085,8 +2098,8 @@ msgstr "Không thể mở tập tin mặt nạ PostScript tạm thời."
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2129,10 +2142,11 @@ msgstr "xem"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2146,13 +2160,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2161,6 +2178,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2176,7 +2194,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2196,11 +2214,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2212,27 +2230,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2250,74 +2268,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr "raster"
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2327,6 +2348,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2342,6 +2364,7 @@ msgstr "raster"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2360,6 +2383,7 @@ msgid "vector"
 msgstr "vector"
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2368,15 +2392,16 @@ msgstr "vector"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2416,7 +2441,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "Định dạng đầu ra không được hỗ trợ"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, c-format
 msgid "File <%s> created."
 msgstr "Tập tin <%s> được tạo ra!"
@@ -3000,69 +3025,70 @@ msgid "Vector map <%s> not found"
 msgstr "Không tìm thấy bản đồ vector <%s>"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "Không thể mở bản đồ vector <%s>"
@@ -3126,12 +3152,13 @@ msgstr "Không có các điểm khống chế được kích hoạt"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, c-format
 msgid "Unable to open file <%s>"
@@ -3264,7 +3291,7 @@ msgstr "Bản đồ dùng làm hệ số x"
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3429,7 +3456,7 @@ msgid "Area:"
 msgstr "Vùng\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 msgid "Writing attributes..."
 msgstr "Đang ghi các thuộc tính..."
@@ -3444,7 +3471,7 @@ msgstr "Thiếu thuộc tính tôpô cho bề mặt %d"
 msgid "No attribute table for layer %d"
 msgstr "Cần có bảng thuộc tính"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, c-format
 msgid "Unable to copy table <%s>"
@@ -3457,15 +3484,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "Không thể cấp các quyền ưu tiên cho bảng <%s>"
@@ -3488,6 +3516,7 @@ msgid ""
 msgstr "Đang tính trong tâm cho các vùng..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3496,6 +3525,7 @@ msgid "extract"
 msgstr "vec-tơ, trích xuất"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3506,10 +3536,10 @@ msgstr "Phép chọn"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "Từ"
@@ -3535,12 +3565,11 @@ msgstr "Đừng sao chép bảng (xem thêm tham số 'new')"
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 msgid "Attributes"
 msgstr "Thuộc tính"
 
@@ -3559,39 +3588,45 @@ msgstr "Đảo ngược phép chọn"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3607,7 +3642,10 @@ msgstr "Đảo ngược phép chọn"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3680,7 +3718,7 @@ msgstr "Mục văn bản bị bỏ qua: %s"
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3733,45 +3771,46 @@ msgstr ""
 "Số đếm phạm trù ngẫu nhiên lớn hơn hoặc bằng số lượng đơn trị \"%s\" phạm "
 "trù đối tượng đếm %d"
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3813,11 +3852,11 @@ msgstr "Kiểu của cột không được hỗ trợ"
 msgid "Format <%s> does not support writing"
 msgstr "định dạng 'point' không được hỗ trợ đối với phiên bản cũ"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3972,9 +4011,9 @@ msgstr "Tên tập tin đầu vào; hoặc nhập \"-\" để đọc từ đầu
 msgid "Name for output file where to save current settings"
 msgstr "Tên tập tin đầu ra chứa báo cáo cuối cùng"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 msgid "List supported formats and exit"
 msgstr "Liệt kê các định dạng được hỗ trợ và thoát"
 
@@ -3997,7 +4036,7 @@ msgstr "In ra đường dẫn tìm kiếm bộ bản đồ hiện tại"
 msgid "Print current status in shell script style"
 msgstr "In ra các thống kê ở dạng tập lệnh shell"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "Các cờ -s và -n loại bỏ nhau"
@@ -4005,7 +4044,8 @@ msgstr "Các cờ -s và -n loại bỏ nhau"
 #: ../vector/v.external.out/args.c:98
 #, fuzzy, c-format
 msgid "%s= or %s= must be specified"
-msgstr "Hoặc 'rules' hoặc 'col' phải được chỉ định"
+msgstr ""
+"Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ định!"
 
 #: ../vector/v.external.out/args.c:101
 #, fuzzy, c-format
@@ -4013,18 +4053,18 @@ msgid "%s= must be specified"
 msgstr "2 lớp phải được chỉ định"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "Các định dạng được hỗ trợ:\n"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4035,68 +4075,69 @@ msgstr "Các định dạng được hỗ trợ:\n"
 msgid "network"
 msgstr "vector, mạng lưới"
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr "Tìm đường dẫn ngắn nhất trên mạng lưới vec-tơ."
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-msgid "Arc type"
-msgstr "Kiểu cung (arc)"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr "Lớp cung (arc)"
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+msgid "Arc type"
+msgstr "Kiểu cung (arc)"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr "Lớp Nốt"
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 "Tên của tập tin chứa các điểm bắt đầu và kết thúc. Nếu không cung cấp, đọc "
 "từ đầu vào tiêu chuẩn"
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr "Cột chi phí của cung tới/cả hai hướng (số)"
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4108,10 +4149,11 @@ msgstr "Cột chi phí của cung tới/cả hai hướng (số)"
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4124,29 +4166,29 @@ msgstr "Cột chi phí của cung tới/cả hai hướng (số)"
 msgid "Cost"
 msgstr "Độ tương phản"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr "Cột chi phí của cung lui/cả hai hướng (số)"
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 msgid "Node cost column (number)"
 msgstr "Cột chi phí nốt (số)"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 msgid "Maximum distance to the network"
 msgstr "Khoảng cách lớn nhất đến mạng lưới"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
@@ -4156,21 +4198,57 @@ msgstr ""
 "kết thúc nằm ngoài ngưỡng, không tìm thấy đường dẫn và thông báo lỗi được in "
 "ra. Để tăng tốc quá trình, giữ giá trị này càng thấp càng tốt."
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "Không có bảng"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "Lớp/bảng"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr "Dùng tính toán đo đạc (geodesic) cho các vị trí kiểu kinh/vĩ độ."
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 "Ghi đầu ra ở dạng các đoạn đầu vào nguyên thủy, không phải dạng mỗi đường "
 "dẫn là một đường."
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4179,10 +4257,10 @@ msgstr "Phép chiếu hiện tại không phải là kinh-vĩ độ"
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4198,8 +4276,8 @@ msgstr "[%d] điểm không có phạm trù (nfield: [%d])"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4228,23 +4306,23 @@ msgstr "Không thể cấp các quyền ưu tiên cho bảng <%s>"
 msgid "Wrong input format: %s"
 msgstr "Định dạng đầu vào sai: %s"
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, c-format
 msgid "No point with category [%d]"
 msgstr "Không có điểm có phạm trù [%d]"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 "Điểm có phạm trù [%d] không chạm đến được tính từ điểm có phạm trù [%d]"
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr "Điểm %f,%f không chạm đến được từ điểm %f,%f"
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4253,17 +4331,17 @@ msgstr "Điểm %f,%f không chạm đến được từ điểm %f,%f"
 msgid "Cannot insert new record: %s"
 msgstr "Không thể chèn bản ghi mới: %s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, c-format
 msgid "[%d] input format errors"
 msgstr "[%d] lỗi định dạng đầu vào"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, c-format
 msgid "[%d] points of given category missing"
 msgstr "[%d] điểm của phạm trù cho trước bị thiếu"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr "%d đích không chạm đến được (tính cả các điểm nằm ngoài ngưỡng)"
@@ -4274,7 +4352,7 @@ msgstr "%d đích không chạm đến được (tính cả các điểm nằm n
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4284,7 +4362,7 @@ msgstr "%d đích không chạm đến được (tính cả các điểm nằm n
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "vector, hình học"
@@ -4339,17 +4417,17 @@ msgid "Unable to get category list <%s>"
 msgstr "Không thể lấy danh sách phạm trù <%s>"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, c-format
 msgid "Required parameter <%s> not set"
 msgstr "Tham số cần thiết <%s> không được thiết lập"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, c-format
 msgid "Vector map <%s> already exists"
 msgstr "Bản đồ vec-tơ <%s> đã có"
@@ -4652,6 +4730,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "Tên tập tin chứa các chữ ký khởi tạo"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4672,12 +4751,15 @@ msgstr "Tên tập tin chứa các chữ ký khởi tạo"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4839,11 +4921,11 @@ msgstr "Lớp phải > 0 đối với 'where'"
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "Kết nối CSDL không được định nghĩa cho lớp %d"
@@ -4981,9 +5063,9 @@ msgid "Remove existing color table"
 msgstr "Loại bỏ bảng màu hiện có"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5047,7 +5129,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, fuzzy, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5064,8 +5146,7 @@ msgstr ""
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "Các cờ -s và -n loại bỏ nhau"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, fuzzy, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5091,6 +5172,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "Bản đồ vec-tơ <%s> không phải kiểu 3D"
@@ -5116,7 +5198,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "Không tìm thấy bảng màu của bản đồ raster <%s>"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, c-format
@@ -5125,13 +5207,14 @@ msgstr "Không thể đọc bảng màu cho bản đồ raster <%s>"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5162,8 +5245,9 @@ msgstr "Đang đọc các đối tượng..."
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5208,7 +5292,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "Đang ghi tập tin màu..."
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "Không thể dùng cột <%s>"
@@ -5265,6 +5349,7 @@ msgid "Point out of range"
 msgstr "Số gờ nằm ngoài miền"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5273,15 +5358,17 @@ msgstr "Số gờ nằm ngoài miền"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5377,14 +5464,15 @@ msgstr "Tập tin điểm vector chứa các độ lệch ở đầu ra"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 msgid "Outputs"
 msgstr "Đầu ra"
 
@@ -5518,7 +5606,7 @@ msgstr "Không đủ bộ nhớ cho az"
 #: ../vector/v.surf.rst/main.c:524
 #, fuzzy, c-format
 msgid "Unable to create %s"
-msgstr "Không thể tạo tập tin <%s>"
+msgstr "Không thể tạo bảng: %s"
 
 #: ../vector/v.vol.rst/main.c:555
 #, fuzzy, c-format
@@ -5581,15 +5669,15 @@ msgstr "Phương pháp nội suy"
 msgid "Input failed"
 msgstr "Đầu vào thất bại"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "thất bại"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "%d byte trên đĩa để chứa các tập tin tạm."
@@ -5636,9 +5724,9 @@ msgstr ""
 msgid "Point without category"
 msgstr "Không có điểm có phạm trù [%d]"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, c-format
@@ -5667,7 +5755,7 @@ msgstr ""
 #: ../vector/v.vol.rst/user1.c:280
 #, fuzzy
 msgid "Zero segments!"
-msgstr "Phép chọn"
+msgstr "Đang xử lý các vùng..."
 
 #: ../vector/v.vol.rst/user1.c:311
 #, c-format
@@ -5746,9 +5834,9 @@ msgstr "Lỗi khi đang đóng tập tin ASCII"
 msgid "3D raster map <%s> created"
 msgstr "Bản đồ raster <%s> được tạo ra."
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5759,17 +5847,17 @@ msgstr "Không thể chèn hàng mới: %s"
 msgid "Init costs from node %d"
 msgstr "Chi phí init (khởi tạo) từ nốt %d"
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "Bản đồ raster 3d cần loại bỏ"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 #, fuzzy
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr "Tạo cây Steiner cho mạng lưới và các đầu cuối cho trước"
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 #, fuzzy
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
@@ -5778,44 +5866,56 @@ msgstr ""
 "Lưu ý rằng bài toán 'Cây Steiner Nhỏ nhất' là NP-hard và thuật toán tìm kiếm "
 "được sử dụng trong mô-đun này do vậy kết quả có thể không tối ưu"
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr "Lớp nốt (được dùng cho các đầu cuối)"
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr "Cột chi phí của các cung (dùng cho cả hai hướng)"
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 "Các phạm trù của các điểm trên các đầu cuối (lớp được chỉ định theo nlayer)"
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "Số lượng các điểm Steiner (nhập -1 dùng tất cả các điểm có thể)"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "Khoảng cách lớn nhất đến mạng lưới"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "Số lượng thành phố: [%d]"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 msgid "Not enough terminals (< 2)"
 msgstr "Không đủ số đầu cuối (< 2)"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr "Số lượng các điểm Steiner cần thiết lớn hơn số lượng có thể"
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "Số điểm đầu vào: %d."
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr "Đầu cuối tại nốt [%d] không thể kết nối được vào đầu cuối tại nốt [%d]"
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
@@ -5823,30 +5923,54 @@ msgstr ""
 "[%d] nốt (không chạm đến được) bị loại bỏ khỏi danh sách các ứng viên điểm "
 "Steiner"
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr "Các chi phí MST = %f"
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr "Tìm [%d]. Điểm Steiner"
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 "Điểm Steiner tại nốt [%d] đã được thêm vào các đầu cuối (các chi phí MST = "
 "%f)"
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr "Không tìm thấy điểm Steiner -> thoát khỏi chu kỳ"
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "Số lượng các điểm Steiner (nhập -1 dùng tất cả các điểm có thể)"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "Các chi phí MST = %f"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+msgstr[1] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5866,18 +5990,20 @@ msgstr "Không tìm thấy điểm Steiner -> thoát khỏi chu kỳ"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "Nhập"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "điểm"
@@ -5908,9 +6034,9 @@ msgstr "Tên của cột chứa tọa độ y"
 msgid "Name of column containing z coordinate"
 msgstr "Tên của cột chứa tọa độ z"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 msgid "3D output"
 msgstr "Đầu ra 3D"
 
@@ -5958,7 +6084,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "Không thể mở con trỏ chọn: '%s'"
@@ -5976,7 +6102,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "Cột x/y/z phải là kiểu số nguyên hoặc double"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 msgid "Copying attributes..."
 msgstr "Đang chép các thuộc tính..."
@@ -6002,7 +6128,86 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d điểm được ghi vào bản đồ vec-tơ."
 msgstr[1] "%d điểm được ghi vào bản đồ vec-tơ."
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"Phép chiếu của bộ dữ liệu và vị trí hiện tại không khớp nhau.\n"
+"
\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr "GRASS LOCATION PROJ_INFO là:\n"
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr "PROJ_INFO của dữ liệu nhập vào là:\n"
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr ""
+"Hãy cân nhắc việc tạo vị trí mới với tham số 'location' từ bộ dữ liệu đầu "
+"vào.\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr ""
+"Không thể đổi phép chiếu của bản đồ đầu vào thành định dạng GRASS để kiểm tra"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "Kiểm tra ghi đè phép chiếu"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+msgid "Projection of input dataset and current location appear to match"
+msgstr "Phép chiếu của bộ dữ liệu đầu vào và location hiện tại khớp nhau"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "4 tham số cần phải có cho tham số 'spatial'"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "Miền zrange không hợp lệ"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "Không hiểu tùy chọn quy tắc: '%s'"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6025,7 +6230,7 @@ msgstr[1] "%d điểm được ghi vào bản đồ vec-tơ."
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6034,7 +6239,7 @@ msgstr[1] "%d điểm được ghi vào bản đồ vec-tơ."
 msgid "statistics"
 msgstr "Thống kê"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6680,8 +6885,8 @@ msgstr "Kiểu của cột (%s) không được hỗ trợ"
 msgid "Operator '%s' is not supported for type line"
 msgstr "Toán tử '%s' không được hỗ trợ trong kiểu đường"
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "Không thể đọc bản đồ vec-tơ"
@@ -6740,12 +6945,12 @@ msgid "Breaking lines..."
 msgstr "Đang ngắt các đường..."
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 msgid "Removing duplicates..."
 msgstr "Loại bỏ các đối tượng lặp..."
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 msgid "Cleaning boundaries at nodes..."
 msgstr "Đang làm sạch ranh giới tại các nốt..."
 
@@ -6754,11 +6959,11 @@ msgstr "Đang làm sạch ranh giới tại các nốt..."
 msgid "Merging lines..."
 msgstr "Đang đệm các đường..."
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 msgid "Attaching islands..."
 msgstr "Đang gắn các đảo..."
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "Không thể tính toán trọng tâm vùng"
 
@@ -6773,12 +6978,13 @@ msgstr "Đang truy vấn bản đồ vec-tơ <%s>..."
 msgid "Attribute not found"
 msgstr "Không tìm thấy thuộc tính"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 msgid "Writing centroids..."
 msgstr "Đang ghi các trọng tâm..."
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "Không thể chèn bản ghi mới: '%s'"
@@ -6857,108 +7063,110 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "Không tìm thấy bản đồ vector <%s>"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "Phương pháp lấy mẫu"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "Tạo ngẫu nhiên một bản đồ điểm vector 2D/3D."
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 msgid "Number of points to be created"
 msgstr "Số lượng điểm cần tạo"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "đọc các điểm trong véc-tơ đầu vào"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "Chiều cao z nhỏ nhất (cần cờ -z hoặc tên cột)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "Chiều cao z lớn nhất (cần cờ -z hoặc tên cột)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "Tên của cột chứa thuộc tính w để nội suy"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "Ghi dữ liệu Z vào cột thay vì vào vec-tơ 3D"
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "Kiểu bảng màu"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "Tạo đầu ra 3D"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "Đang chọn các đối tượng..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "Số lượng điểm phải > 0 (bạn cho %d)"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d trong số %d đối tượng được chọn từ bản đồ vec-tơ <%s>"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "Tên của bản đồ vec-tơ hiện có"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, c-format
 msgid "Unable to create table: %s"
 msgstr "Không thể tạo bảng: %s"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr "Bảng chỉ được phép có hai cột"
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
@@ -6966,18 +7174,18 @@ msgstr ""
 "Bạn đã tạo kiểu cột không được hỗ trợ. Mô-đun này chỉ hỗ trợ các kiểu cột  "
 "INTEGER (số nguyên)
và DOUBLE PRECISION"
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "Bản đồ vector bắt đầu <%s> không chứa các điểm nằm trong vùng hiện tại"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "Bản đồ vector bắt đầu <%s> không chứa các điểm nằm trong vùng hiện tại"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 msgid "Generating points..."
 msgstr "Đang tạo các điểm..."
 
@@ -7022,7 +7230,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "Tên của bản đồ raster hiện có để truy vấn"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "Tên của cột thuộc tính dùng làm nhãn"
@@ -7036,80 +7244,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "In các giá trị được tính trung bình thay vì các khoảng chia đều"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
-msgstr "Không tìm thấy cột <%s>"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
+msgstr "Không tìm thấy cột <%s> trong bảng <%s>"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "Kiểu cột không được hỗ trợ"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "Kiểu raster là số nguyên và kiểu cột là float"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr "Kiểu raster là float và kiểu cột là số nguyên, một số dữ liệu bị mất!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "Đang đọc các đối tượng..."
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "Tìm thấy %d đường hoặc ranh giới trong bản đồ vec-tơ <%s@%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d điểm nằm ngoài vùng hiện tại bị bỏ qua"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, c-format
 msgid "%d points without category were skipped"
 msgstr "%d điểm không có phạm trù bị bỏ qua"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "Nhiều điểm (%d) có phạm trù %d, giá trị thiết lập thành 'NULL'"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d phạm trù được nạp từ dữ liệu vec-tơ"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "%d phạm trù lặp trong dữ liệu vec-tơ"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d phạm trù được nạp từ bảng"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "%d phạm trù từ dữ liệu vec-tơ bị thiếu trong bảng"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d lỗi cập nhật"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d bản ghi được cập nhật"
@@ -7117,14 +7323,14 @@ msgstr "%d bản ghi được cập nhật"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "Cập nhật thống kê của bản đồ raster"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7217,7 +7423,7 @@ msgstr ""
 "Bản đồ vec-tơ <%s> không ở trong bộ bản đồ của người dùng và không thể được "
 "cập nhật"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7275,6 +7481,152 @@ msgstr "Không có điểm có phạm trù [%d]"
 msgid "%d records updated"
 msgstr "%d bản ghi được cập nhật"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "Kết nối CSDL không được định nghĩa cho lớp <%d>"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "Kiểu của cột không được hỗ trợ"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "Không có bản ghi cho phạm trù cat = %d"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "Không có bản ghi cho phạm trù cat = %d"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "Không tìm thấy cột <%s>"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "Tạo các điểm vector dưới dạng điểm 3D"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "Đổi các lớp vec-tơ OGR thành bản đồ vec-tơ GRASS."
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "Lớp số (from)"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "%ld phạm trù"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "Lớp số (to)"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "Lớp số (to)"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "Lớp cần thêm cột vào"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "Cột phải có kiểu số"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+msgid "Columns"
+msgstr "Cột"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "Tên của cột định nghĩa màu (để dùng với cờ -a)"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+#, fuzzy
+msgid "Color definition in R:G:B form"
+msgstr "Cột định nghĩa màu không được chỉ định"
+
+#: ../vector/v.out.lidar/main.c:550
+#, fuzzy
+msgid "Column with red color"
+msgstr "Không thể đọc màu"
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+#, fuzzy
+msgid "Internal scale to apply to X and Y values"
+msgstr "Tỷ lệ áp dụng cho dữ liệu z"
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+#, fuzzy
+msgid "Internal scale to apply to z values"
+msgstr "Tỷ lệ áp dụng cho dữ liệu z"
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "Giới hạn nhập theo vùng hiện tại"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "Không có bảng"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, c-format
@@ -7310,6 +7662,12 @@ msgstr "Lỗi trong cột định nghĩa màu (%s), với cat %d"
 msgid "Label column was not specified, no labels will be written"
 msgstr "Cột nhãn không được chỉ định, nhãn sẽ không được ghi"
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "Không tìm thấy cột <%s>"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, c-format
 msgid "Column type (%s) not supported"
@@ -7340,45 +7698,52 @@ msgstr "Không thể dùng cột <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d trong số %d đối tượng được chọn từ bản đồ vec-tơ <%s>"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr "Số lần chạy %d trong số %d:"
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "Trục trặc khi xử lý các vùng từ bản đồ vec-tơ <%s>, tiếp tục..."
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr "Trục trặc khi xử lý các đường từ bản đồ vec-tơ <%s>, tiếp tục..."
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 msgid "Writing raster map..."
 msgstr "Đang ghi bản đồ raster... "
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 msgid "Creating support files for raster map..."
 msgstr "Đang tạo các tập tin hỗ trợ cho bản đồ raster..."
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr "Màu chỉ có thể được cập nhật từ CSDL khi nào use=attr"
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr "Số vùng đã được chuyển đổi: %d trong số %d"
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr "Số điểm/đường đã được chuyển đổi: %d trong số %d"
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7444,16 +7809,18 @@ msgstr "Tập tin raster dùng làm bề mặt"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 #, fuzzy
 msgid "Maximum memory to be used (in MB)"
 msgstr "Bộ nhớ lớn nhất cần dùng với cờ -m (theo MB)"
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "Phép thống kê dùng cho các giá trị raster"
@@ -7495,7 +7862,7 @@ msgstr "Tham số cột không thể phối hợp được với việc dùng t
 msgid "Unknown option '%s'"
 msgstr "Không hiểu tùy chọn '%s'"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 msgid "Reading areas..."
 msgstr "Đang đọc các vùng..."
 
@@ -7513,12 +7880,17 @@ msgstr "Không dùng được cột chỉ định"
 msgid "Get area %d failed"
 msgstr "Việc lấy vùng %d thất bại"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "Thất bại khi nhập tập tin DXF!"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "Vùng không có trọng tâm (có thể ổn đối với đảo)"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 msgid "Area centroid without category"
 msgstr "Trọng tâm của vùng không có phạm trù"
 
@@ -7549,11 +7921,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "Số cột"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-msgid "Columns"
-msgstr "Cột"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7735,24 +8102,24 @@ msgstr "Kiểu đối tượng chuyển đổi đến đó"
 msgid "Incompatible types"
 msgstr "Các kiểu không tương thích"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 msgid "Failed to copy attribute table to output map"
 msgstr "Thất bại không cheép được bảng thuộc tính vào bản đồ đầu ra"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 "Tạo một vòng tròn kết nối các nốt cho trước (Bài toán người bán hàng di "
 "chuyển)."
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
@@ -7760,80 +8127,86 @@ msgstr ""
 "Lưu ý rằng TSP là NP-hard, thuật toán tìm kiếm được mô-đun này sử dụng và "
 "vòng tròn được tạo ra có thể không tối ưu"
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+"Các phạm trù của các điểm ('các thành phố') trên các nốt (lớp được chỉ định "
+"bằng nlayer)"
+
+#: ../vector/v.net.salesman/main.c:162
 msgid "Node layer (used for cities)"
 msgstr "Lớp nốt (dùng chỉ các thành phố)"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 #, fuzzy
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr "Cột chi phí của cung lui/cả hai hướng (số)"
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr ""
 "Tên tập tin đầu ra (nếu bỏ qua hoặc \"-\" thì xuất ra đầu ra tiêu chuẩn)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
-"Các phạm trù của các điểm ('các thành phố') trên các nốt (lớp được chỉ định "
-"bằng nlayer)"
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "Khoảng cách lớn nhất đến mạng lưới"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "Số lượng thành phố: [%d]"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 msgid "Not enough cities (< 2)"
 msgstr "Không đủ số thành phố (< 2)"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "Đang tạo các trọng tâm..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "Không có điểm có phạm trù [%d]"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "Không có bản ghi cho điểm (cat = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "Nốt đích [%d] không thể chạm đến được tính từ nốt [%d]"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "Không thể mở tập tin <%s> để ghi"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "đường"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr "Tách mạng lưới bằng các đường cùng giá trị."
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 #, fuzzy
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
@@ -7844,7 +8217,7 @@ msgstr ""
 "tâm ra). Nốt trung tâm phải mở (chi phí >= 0). Chi phí của nốt trung tâm "
 "được dùng trong tính toán."
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 #, fuzzy
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
@@ -7853,49 +8226,49 @@ msgstr ""
 "Phạm trù của các tâm (các điểm trên các nốt) mà mạng lưới sẽ được cấp phát "
 "vào đó, lớp dùng cho các phạm trù này do tùy chọn nlayer cung cấp"
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr "Chi phí cho các đường cùng giá trị"
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr "Chi phí iso sai: %f"
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr "Chi phí iso: %f ít hơn trước đó"
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr "Chi phí iso %d: %f"
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr "Không đủ chi phí, mọi đối tượng chạm đến đều thuộc băng đầu tiên"
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr "Tâm tại nốt bị đóng (chi phí = -1) bỏ qua"
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "Số lượng ta6m: %d (nlayer %d)"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr "Không đủ các tâm dùng cho nlayer được chọn. Không có gì được cấp phát."
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "Đang tính các chi phí từ tâm %d...."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 msgid "Cannot get line segment, segment out of line"
 msgstr "Không thể lấy đoạn của đường, đoạn nằm ngoài đường"
 
@@ -8105,14 +8478,15 @@ msgstr ""
 "Đường dẫn đến tập tin ASCII tạo thành hoặc tên vector ASCII nếu cờ '-o' được "
 "định nghĩa"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "Nếu không cung cấp, đọc từ đầu vào tiêu chuẩn"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8136,9 +8510,13 @@ msgstr "Nếu không cung cấp, đọc từ đầu vào tiêu chuẩn"
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8200,7 +8578,7 @@ msgstr "Dấu phân cách trường (chế độ điểm)"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "Số chữ số có ý nghĩa (chỉ áp dụng cho dấu chấm động)"
 
@@ -8265,7 +8643,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "Không thể lấy thông tin lớp của bản đồ  vec-tơ <%s>"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8365,9 +8743,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "Không thể mở tập tin đầu vào <%s>. Lỗi %d: %s"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "Không thể tạo chỉ mục cho bảng <%s>, khoá <%s>"
@@ -8959,7 +9338,7 @@ msgstr ""
 "
Ghi chú: Giá trị nhỏ nhất của lớp đầu tiên đang được đưa vào\n"
 "
\n"
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "Lớp %d"
@@ -8980,7 +9359,7 @@ msgstr "Không thể tạo ma trận nghịch đảo"
 msgid "Resolving conflicts..."
 msgstr "Đang giải quyết các mâu thuẫn..."
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "Tổng quát hoá (%s) ..."
@@ -9010,201 +9389,205 @@ msgid "Performs vector based generalization."
 msgstr "Phép tổng quát hoá dựa trên vec-tơ."
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "Phép tổng quát hoá dựa trên vec-tơ."
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "Thuật toán nội suy spline"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "Phép tổng quát hoá dựa trên vec-tơ."
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr "Thuật toán tổng quát hoá"
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 msgid "Maximal tolerance value"
 msgstr "Giá trị dung sai lớn nhất"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 msgid "Look-ahead parameter"
 msgstr "Tham số tìm tới trước"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr "Phần trăm các điểm trong đầu ra của thuật toán 'douglas_reduction'"
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr "Trượt điểm được tính về phía điểm gốc"
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr "Góc nhỏ nhất giữa hai đoạn liền nhau trong phương pháp Hermite"
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr "Ngưỡng độ trong phép tổng quát hoá mạng lưới"
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr "Ngưỡng độ gần trong phép tổng quát hoá mạng lưới"
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr "Ngưỡng độ ở giữa trong phép tổng quát hoá mạng lưới"
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 msgid "Snakes alpha parameter"
 msgstr "Tham số alpha snakes"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 msgid "Snakes beta parameter"
 msgstr "Tham số beta snakes"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 msgid "Number of iterations"
 msgstr "Số lần chạy lặp"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "Không chép bảng"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 msgid "Unknown method"
 msgstr "Phương pháp không biết"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "Không tìm thấy cột <%s> trong bảng <%s>"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "Không thể tạo bản đồ vec-tơ <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "Đang dời dữ liệu..."
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "Phép tổng quát hoá dựa trên vec-tơ."
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, c-format
 msgid "Generalization (%s)..."
 msgstr "Tổng quát hoá (%s) ..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "Dùng độ phân giải [%g]"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr "Phông '%s' không phải là kiểu phông FreeType\n"
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, fuzzy, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr "Phông '%s' không phải là kiểu phông FreeType\n"
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, fuzzy, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr "%d ranh giới không bị cắt bỏ vì việc này làm hỏng tôpô"
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, fuzzy, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr "Số lượng đỉnh được giảm bớt từ %d xuống %d [%d%%]"
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 #, fuzzy
 msgid "changed"
 msgstr "Các hàng bị thay đổi"
@@ -9279,8 +9662,8 @@ msgstr "Cỡ biểu tượng của các đối tượng điểm (tính theo đơ
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "Màu chữ"
 
@@ -9293,13 +9676,13 @@ msgstr "Màu chữ"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr "Màu"
@@ -9494,14 +9877,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "Công cụ làm sạch"
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "Loại bỏ các đoạn thừa"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "Loại bỏ cầu"
@@ -9554,14 +9937,6 @@ msgstr "Đang đọc các vùng..."
 msgid "Constructing 3D hull..."
 msgstr "Đang chuyển đổi..."
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 #, fuzzy
 msgid ""
@@ -9647,7 +10022,9 @@ msgstr "Phép nội suy song tuyến tính"
 msgid "Bicubic interpolation"
 msgstr "Phép nội suy bậc ba"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr "Tham số của phép chính quy hóa Tykhonov (ảnh hưởng đến độ trơn)"
 
@@ -10067,6 +10444,193 @@ msgstr "Lỗi khi đang đọc tập tin ASCII: '%s'"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr "writeVTKHeader: Đang ghi VTK-Header"
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "Không tìm thấy các điểm dữ liệu"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "raster"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%d khối gộp."
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "Sự phân biệt nhóm"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "Số lớp (bản đồ vec-tơ A)"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "Khoảng cách lớn nhất đến mạng lưới"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "Số điểm ảnh tối thiểu trong một lớp"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "Sự phân biệt nhóm"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+msgid "Unable to set predetermined vector open level"
+msgstr "Không thể thiết lập cấp mở vec-tơ đã định trước"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "Số lớp phải < 256"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "Kích thước vùng lân cận phải dương"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "Đang đếm các địa điểm trong các mẫu ô vuông..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "Không tìm thấy điểm, bỏ qua type=point"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "Đang tạo các trọng tâm..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "%s = %s - phải là một số dương"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "Dùng khoảng cách lớn nhất giữa các điểm: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "Không tìm thấy các bản đồ raster"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "Khoảng cách tối đa đến đường gần nhất"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, fuzzy, c-format
+msgid "Mean: %g"
+msgstr "Trung bình = %.5lf"
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "Độ lệch chuẩn"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "Dùng khoảng cách lớn nhất giữa các điểm: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "Đang tìm đường dẫn chi phí..."
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, fuzzy, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr "npoints = %d, nterrain = %d"
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "Không tìm thấy đường, bỏ qua type=line"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "Đang tạo các điểm..."
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "Đang ghi bản đồ raster đầu ra %s..."
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "Đang đọc các đầu vào..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "Không tìm thấy các điểm dữ liệu"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+#, fuzzy
+msgid "Core density ..."
+msgstr "vector, mật độ nhân"
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "tìm thấy %d lớp"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "tìm thấy %d lớp"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10199,26 +10763,26 @@ msgstr "Không thể nào cập nhật được bảng phụ (aux table)"
 msgid "Impossible to write to aux table"
 msgstr "Không thể nào ghi được vào bảng phụ (aux table)"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "Thực hiện phép bảo trì mạng lưới."
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr "Thực hiện phép bảo trì mạng lưới."
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "Không thể mở bản đồ vec-tơ <%s> ở tôpô cấp %d"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d điểm mới được ghi vào đầu ra"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "[%d] đường được đọc và ghi vào đầu ra"
@@ -10260,7 +10824,7 @@ msgstr ""
 "Cần có đối với lệnh 'connect' (kết nối). Kết nối các điểm theo ngưỡng được "
 "cho."
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10274,14 +10838,14 @@ msgstr "Tên của bản đồ vector điểm đầu vào"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr "Cần có đối với lệnh 'connect' (kết nối)"
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 msgid "Operation to be performed"
 msgstr "Tác vụ cần thực hiện"
@@ -10310,49 +10874,133 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+#, fuzzy
+msgid "create turntable on vector network"
+msgstr "Tìm đường dẫn ngắn nhất trên mạng lưới vec-tơ."
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 "Cần có đối với lệnh 'connect' (kết nối). Kết nối các điểm theo ngưỡng được "
 "cho."
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "Tên các tập tin đầu vào"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "Cần có đối với lệnh 'connect' (kết nối)"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr "Gán các phạm trù đơn trị cho các điểm mới"
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 msgid "For operation 'nodes'"
 msgstr "Đối với lệnh 'nodes' (các nốt)"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "Bản đồ vec-tơ chứa các điểm kết thúc"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr "Lớp đường"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 msgid "Unknown operation"
 msgstr "Lệnh không biết"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr "Giá trị ngưỡng phải >=0"
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "Không thể đọc đầu vào từ <%s>"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "Không thể chèn vào bảng: '%s'"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "Không thể mở bản đồ vector <%s>"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "Không thể tạo bản đồ vec-tơ <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "Bảng <%s> không có trong CSDL <%s>"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "Bản đồ raster <%s> đã có và sẽ bị ghi đè"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "Bản đồ raster <%s> đã có và sẽ bị ghi đè"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "Không thể tạo bảng <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "Không thể chép bảng thuộc tính vào bản đồ vec-tơ <%s>"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "Không thể tạo bảng <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10496,7 +11144,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d phạm trù được đọc từ bản đồ vec-tơ (lớp %d)"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 msgid "Unable to calculate area centroid"
 msgstr "Không thể tính toán trọng tâm vùng"
 
@@ -10606,7 +11254,7 @@ msgstr "Kết nối CSDL không được định nghĩa cho lớp <%d>"
 msgid "Key column type is not integer"
 msgstr "Cột khoá không phải là số nguyên"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "Không thể lấy dữ liệu từ bảng <%s>"
@@ -11428,7 +12076,7 @@ msgstr ""
 "Dùng định dạng tập tin .prj kiểu ESRI (chỉ áp dụng cho đầu ra định dạng "
 "shapefile)"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11687,8 +12335,8 @@ msgstr "Vị trí chứa bản đồ vector đầu vào"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "Bề mặt"
@@ -11697,7 +12345,7 @@ msgstr "Bề mặt"
 msgid "Mapset containing input vector map"
 msgstr "Bộ bản đồ chứa bản đồ vector đầu vào"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "In ra tên của khung hiện tại"
@@ -11707,7 +12355,7 @@ msgstr "In ra tên của khung hiện tại"
 msgid "Name of input vector map to re-project"
 msgstr "Tên bản đồ raster đầu vào để quy chiếu"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "Đường dẫn tới CSDL GRASS của vị trí đầu vào"
 
@@ -11722,8 +12370,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "vùng"
@@ -11756,17 +12404,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr "Vị trí đầu vào và đầu ra không thể giống nhau"
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "Đang kiểm tra vị trí <%s>, bộ bản đồ <%s>"
@@ -12134,13 +12784,13 @@ msgstr ""
 "Bảng: %s\n"
 "Cột khoá: %s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr ""
 "Tạo một lớp bản đồ vec-tơ mới bằng cách tổ hợp các lớp bản đồ vec-tơ khác."
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
@@ -12148,212 +12798,379 @@ msgstr ""
 "Tên của bản đồ vec-tơ đầu ra nơi các khung bao của các bản đồ vec-tơ đầu vào "
 "được ghi vào đó"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "Không xây dựng tôpô"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
 msgstr ""
-"Gắn các tập tin vào tập tin hiện có (việc ghi đè các tập tin phải được kích "
-"hoạt)"
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 msgid "Copy also attribute table"
 msgstr "Chép cả bảng thuộc tính"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr "Hiện tại chỉ có bảng thuộc tính của lớp 1 được hỗ trợ"
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+"Gắn các tập tin vào tập tin hiện có (việc ghi đè các tập tin phải được kích "
+"hoạt)"
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr "Bảng bị thiếu"
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 msgid "Key columns differ"
 msgstr "Các cột khoá khác nhau"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 msgid "Number of columns differ"
 msgstr "Số lượng cột khoá khác nhau"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 msgid "Column names differ"
 msgstr "Tên các cột khác nhau"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 msgid "Column types differ"
 msgstr "Kiểu các cột khác nhau"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 msgid "Length of string columns differ"
 msgstr "Chiều dài các cột kiểu chuỗi khác nhau"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 msgid "Key column not found"
 msgstr "Không tìm thấy cột khoá"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 msgid "The output map is not 3D"
 msgstr "Bản đồ đầu ra không phải 3D"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, c-format
 msgid "Unable to create table <%s>"
 msgstr "Không thể tạo bảng <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "Đang ghi bản đồ..."
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr "Lỗi đọc bản đồ vec-tơ <%s> - một số dữ liệu có thể không đúng"
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "Đang xây dựng tôpô cho bản đồ vec-tơ <%s>..."
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr "Giao điểm tại các biên sẽ phải được bắt dính vào nhau"
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr "Các đường chung giữa các tập tin sẽ phải được hiệu chỉnh"
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 msgid "The header information also may have to be edited"
 msgstr "Thông tin header cũng có thể phải được hiệu chỉnh."
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, c-format
 msgid "%d vector maps patched"
 msgstr "%d bản đồ vec-tơ được vá"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "Không thể mở con trỏ chọn: '%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 msgid "Cannot fetch row"
 msgstr "Không thể lấy hàng"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 msgid "Unknown column type"
 msgstr "Kiểu cột không biết"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "Không thể chèn bản ghi mới: '%s'"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+msgid "Over-riding projection check"
+msgstr "Kiểm tra ghi đè phép chiếu"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "Đổi các lớp vec-tơ OGR thành bản đồ vec-tơ GRASS."
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "Tập tin đầu vào"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
+#, fuzzy
+msgid "Layer number to store return information as category"
+msgstr "Lớp số (to)"
+
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "Lớp cần thêm cột vào"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
 msgid "Import subregion only"
 msgstr "Chỉ nhập vùng con"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
-msgstr "Vùng con"
-
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "Định dạng: xmin,ymin,xmax,ymax  - thường là T,N,Đ,B"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "Tên của vị trí mới cần tạo"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+msgid "Filter range for z data (min,max)"
+msgstr "Miền giá trị lọc cho dữ liệu z (min,max)"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "Các giá trị số nguyên được nhập vào"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "Các giá trị số nguyên được nhập vào"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
+#, fuzzy
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "Tên của bản đồ vec-tơ đầu vào chứa các điểm thưa thớt"
+
+#: ../vector/v.in.lidar/main.c:224
+#, fuzzy
+msgid "Layer number or name for mask option"
+msgstr "Số lớp (bản đồ vec-tơ A)"
+
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "Các giá trị số nguyên được nhập vào"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "Tương quan"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "Các giá trị số nguyên được nhập vào"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "Đang nhập các điểm..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "<%s=%s> số lượng điểm không hợp lệ"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "Tên của vị trí mới cần tạo"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
 #, fuzzy
 msgid "Print LAS file info and exit"
 msgstr "Chỉ in ra lịch sử thay vì thông tin"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
-msgid "Override dataset projection (use location's projection)"
-msgstr "Ghi đè phép chiếu của dữ liệu (dùng phép chiếu của vị trí)"
-
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 msgid "Limit import to the current region"
 msgstr "Giới hạn nhập theo vùng hiện tại"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "Bản đồ vec-tơ đầu vào chứa các điểm"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "Mở rộng phạm vi của vị trí dựa trên bộ dữ liệu mới"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "Tên của bản đồ raster đầu ra (mặc định: tên đầu vào)"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "Ghi đè phép chiếu (dùng phép chiếu của vị trí)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "Không thể lấy đơn vị phép chiếu của vị trí hiện tại"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "Nhóm <%s> không tồn tại"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "Không thể mô tả bảng <%s >"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "Không hiểu tùy chọn quy tắc: '%s'"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "Lớp số (from)"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 "Hoặc là chọn cờ vùng hiện tại hoặc chọn tùy chọn spatial (không gian), không "
 "được chọn cả hai"
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "4 tham số cần phải có cho tham số 'spatial'"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
@@ -12361,120 +13178,172 @@ msgstr ""
 "Không thể đổi phép chiếu của bản đồ đầu vào thành định dạng GRASS; không thể "
 "tạo vị trí mới."
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "Không thể tạo vị trí: %s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, c-format
 msgid "Location <%s> created"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
+
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"Không thể đổi phép chiếu của bản đồ đầu vào thành định dạng GRASS để kiểm tra"
 
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-msgid "Over-riding projection check"
-msgstr "Kiểm tra ghi đè phép chiếu"
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "Đang nhập các điểm..."
+
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "Đang nhập các điểm..."
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
-"Phép chiếu của bộ dữ liệu và vị trí hiện tại không khớp nhau.\n"
-"
\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr "GRASS LOCATION PROJ_INFO là:\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "%d điểm đã nạp"
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr "PROJ_INFO của dữ liệu nhập vào là:\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "%d điểm đã nạp"
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
-msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:732
+#, fuzzy, c-format
+msgid "%llu input points were not valid"
+msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr ""
-"Hãy cân nhắc việc tạo vị trí mới với tham số 'location' từ bộ dữ liệu đầu "
-"vào.\n"
+#: ../vector/v.in.lidar/main.c:734
+#, fuzzy, c-format
+msgid "%llu input points were outside of the selected area"
+msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-msgid "Projection of input dataset and current location appear to match"
-msgstr "Phép chiếu của bộ dữ liệu đầu vào và location hiện tại khớp nhau"
+#: ../vector/v.in.lidar/main.c:736
+#, fuzzy, c-format
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
-#, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "Bản đồ vec-tơ <%s> đã có và sẽ bị ghi đè"
+#: ../vector/v.in.lidar/main.c:738
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by return number"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
+msgid "%llu input points were skipped at the begging using offset"
+msgstr ""
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:747
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "Đang nhập các điểm..."
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:751
 #, fuzzy, c-format
-msgid "%d points imported"
+msgid "%lu points imported (limit was %d)"
 msgstr "%d điểm đã nạp"
 
-#: ../vector/v.in.lidar/main.c:810
-#, c-format
-msgid "%d input points were not valid"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "%d điểm đã nạp"
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:757
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were not valid"
 msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:759
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were outside of the selected area"
 msgstr "%d điểm nằm ngoài ngưỡng"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:761
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were outside of the area specified by mask"
 msgstr "%d điểm nằm ngoài ngưỡng"
 
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:767
+#, fuzzy, c-format
+msgid "%lu input points were filtered outsite the range for z coordinate"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:769
+#, fuzzy, c-format
+msgid "%lu input points were skipped at the begging using offset"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:772
+#, fuzzy, c-format
+msgid "%lu input points were skipped by count-based decimation"
+msgstr "%d điểm nằm ngoài ngưỡng"
+
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "%d điểm cuối cùng sẽ bị bỏ"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "Không thể mở bản đồ vector <%s>"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "Không thể mở CSDL <%s> bằng trình điều khiển <%s>"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12482,22 +13351,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "Tạo một vec-tơ mới dưới dạng liên kết chỉ-đọc vào lớp OGR."
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, c-format
 msgid "Layer <%s> not available"
 msgstr "Lớp <%s> không dùng được"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "Không thể thực thi: %s"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "Không thể tạo tập tin <%s>"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "Bản đồ raster <%s> được tạo ra."
@@ -12507,12 +13376,12 @@ msgstr "Bản đồ raster <%s> được tạo ra."
 msgid "Name of input OGR or PostGIS data source"
 msgstr "Tên cho tập tin đầu ra"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "Tập tin raster cần liên kết"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12524,26 +13393,30 @@ msgstr ""
 "
\t\tESRI Shapefile: tên tập tin shape\n"
 "\t\tMapInfo File: tên tập tin mapinfo"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "Tên của bản đồ raster đầu ra (mặc định: tên đầu vào)"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "Liệt kê các lớp hiện có trong nguồn dữ liệu và thoát"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "Liệt kê các lớp hiện có trong nguồn dữ liệu và thoát"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 #, fuzzy
 msgid "Format: layer name,type,projection check,geometry"
 msgstr "Định dạng: lớp kiểu đếm nhỏ_nhất lớn_nhất"
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12593,7 +13466,7 @@ msgstr ""
 #: ../vector/v.external/list.c:316
 #, fuzzy, c-format
 msgid "Invalid geometry column %d"
-msgstr "Bậc không hợp lệ"
+msgstr "Cột chi phí nốt"
 
 #: ../vector/v.delaunay/main.c:88
 msgid ""
@@ -12730,142 +13603,142 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr "Làm cho các góc ngoài cùng thẳng"
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 #, fuzzy
 msgid "Do not make caps at the ends of polylines"
 msgstr "Không tạo chóp (cap) ở đầu các đường"
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "In ra các thuộc tính của bản đồ vec-tơ."
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 "Chọn khoảng cách đệm/khoảng cách nhỏ/góc hoặc cột, không được chọn cả hai."
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "Tùy chọn tỷ lệ đòi hỏi phải có magnitude_map"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "'layer' phải > 0 đối với 'cats'."
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, c-format
 msgid "The tolerance was reset to %g"
 msgstr "Dung sai được thiết lập lại thành %g"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "Yêu cầu xoá không hợp lệ"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, c-format
 msgid "The tolerance in map units = %g"
 msgstr "Dung sai tính theo đơn vị bản đồ = %g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "Không thể chọn dữ liệu từ bảng <%s>"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 msgid "Buffering areas..."
 msgstr "Đang đệm các vùng..."
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "Thuộc tính có kích cỡ không hợp lệ (%.3f) đối với phạm trù %d"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "Dung sai tính theo đơn vị bản đồ: %g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "Đang đệm các vùng..."
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "Đệm đường..."
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 msgid "Building parts of topology..."
 msgstr "Đang xây dựng lại các phần của tôpô..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 msgid "Snapping boundaries..."
 msgstr "Đang bắt dính các ranh giới..."
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "Ngắt các vùng"
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 msgid "Breaking boundaries..."
 msgstr "Đang ngắt các ranh giới..."
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "Đang làm sạch ranh giới tại các nốt..."
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "Đang tính trong tâm cho các vùng..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 msgid "Generating list of boundaries to be deleted..."
 msgstr "Đang tạo danh sách các ranh giới cần xoá..."
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 msgid "Deleting boundaries..."
 msgstr "Đang xoá các ranh giới..."
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 msgid "Calculating centroids for areas..."
 msgstr "Đang tính trong tâm cho các vùng..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "Không thể tính toán trọng tâm vùng"
@@ -13143,18 +14016,18 @@ msgstr "Tên cho tập tin đầu ra"
 msgid "%d features written to '%s'."
 msgstr "%d đối tượng được ghi vào '%s'."
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "Vị trí: %s\n"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 #, fuzzy
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr "Cấp phát các mạng lưới con cho các tâm gần nhất (hướng từ tâm)."
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 #, fuzzy
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
@@ -13163,21 +14036,30 @@ msgstr ""
 "Nốt trung tâm phải mở (chi phí >=0). Các chi phí của nốt trung tâm được dùng "
 "trong tính toán"
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "Số lượng tâm: [%d] (nlayer: [%d])"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 #, fuzzy
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr "Không đủ các tâm dùng cho nlayer được chọn. Không có gì được cấp phát."
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "Đang tính các chi phí từ các tâm ..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "Đang tính các chi phí từ các tâm ..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13237,7 +14119,7 @@ msgstr "%s=%s - số lượng điểm nội suy không hợp lệ"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13918,7 +14800,7 @@ msgstr "Không có bản ghi trong bảng LR"
 msgid "More than one record in LR table"
 msgstr "Có nhiều hơn một bản ghi trong bảng LR"
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14219,48 +15101,58 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr "%d ranh giới không bị cắt bỏ vì việc này làm hỏng tôpô"
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 msgid "Prints vector map attributes."
 msgstr "In ra các thuộc tính của bản đồ vec-tơ."
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+#, fuzzy
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr "Các điều kiện WHERE của câu lệnh SQL không có từ khóa 'where'"
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "Dấu phân cách bản ghi theo chiều đứng ở đầu ra"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 "In ra phạm vi vùng nhỏ nhất của các đối tượng vec-tơ được chọn thay vì thuộc "
 "tính"
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "Vùng\n"
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "Tạo ra các giá trị cho CSDL từ các đối tượng vec-tơ."
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "Không thể mở bản đồ vector <%s> ở cấp tôpô. Cờ '%c' đòi hỏi cấp tôpô."
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 msgid "Unable to open select cursor"
 msgstr "Không thể mở con trỏ chọn"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "Không thể lấy khung bao quanh của vùng %d"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "Không thể lấy khung bao quanh của đường %d"
@@ -14302,46 +15194,50 @@ msgstr "Số lượng điểm tối đa trong một đoạn"
 msgid "Add new vertices, but do not split"
 msgstr "Đang tạo tập tin cats mới..."
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "Ghi đỉnh của đường"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "Hệ số làm trơn phải là giá trị dương"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "Kiểu cột không biết '%s'"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "Không thể lấy đơn vị phép chiếu của bản đồ đầu vào"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "%s trong %s: %s"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "%s trong %s: %s"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "Số lớp phải < 256"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr ""
@@ -14462,7 +15358,9 @@ msgstr "Góc xoay (tính theo độ ngược chiều kim đồng hồ)"
 msgid "Number of vertex points per grid cell"
 msgstr "Số lượng lần chạy lặp \t= %d ô\n"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "Kiểu đối tượng"
@@ -14562,10 +15460,13 @@ msgid "Writing out vector columns..."
 msgstr "Đang ghi ra các cột vec-tơ..."
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14577,6 +15478,7 @@ msgstr "raster, đại số bản đồ"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14734,8 +15636,9 @@ msgstr "Nơi_đặt"
 msgid "Offset label in y-direction"
 msgstr "Độ dịch nhãn theo hướng y"
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr "Tên phông"
 
@@ -14807,6 +15710,130 @@ msgstr "Đang tìm các mẫu ô vuông..."
 msgid "Counting points quadrats..."
 msgstr "Đang đếm các địa điểm trong các mẫu ô vuông..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "Phép phân loại điểm"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "Không tìm thấy các điểm dữ liệu"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "Các giá trị số nguyên được nhập vào"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "Các giá trị số nguyên được nhập vào"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "<%s=%s> số lượng điểm không hợp lệ"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "Giá trị dung sai lớn nhất"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "Số lượng lần chạy lặp \t= %d ô\n"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "Số lượng lần chạy lặp \t= %d ô\n"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "Độ lệch chuẩn"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14821,28 +15848,28 @@ msgstr "Thông tin đích cho nhóm <%s> bị thiếu"
 msgid "Target location <%s> not found"
 msgstr "Không tìm thấy vị trí đích <%s>"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "Bộ bản đồ <%s> trong vị trí đích <%s> - "
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr "quyền bị từ chối"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "not found"
 msgstr "không tìm thấy"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr "Vui lòng chạy i.target cho nhóm."
 
@@ -15193,11 +16220,6 @@ msgstr "%s sẽ tích lũy những giá trị này thay vì tính diện tích.\
 msgid " Database connection not defined for layer <%s>"
 msgstr "Kết nối CSDL không được định nghĩa cho lớp <%d>"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "Kiểu của cột không được hỗ trợ"
-
 #: ../vector/v.univar/main.c:652
 msgid "Cannot sort the key/value array"
 msgstr "Không thể xếp thứ tự mảng khoá/giá trị"
@@ -15283,16 +16305,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d bản ghi được cập nhật"
 msgstr[1] "%d bản ghi được cập nhật"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "Đổi các lớp vec-tơ OGR thành bản đồ vec-tơ GRASS."
 
-#: ../vector/v.in.ogr/main.c:142
-msgid "OGR datasource name"
-msgstr "Tên nguồn dữ liệu OGR"
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
+#, fuzzy
+msgid "Name of OGR datasource to be imported"
+msgstr "Tập tin raster cần nhập"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: directory containing shapefiles\n"
@@ -15302,14 +16326,14 @@ msgstr ""
 "
\t\tESRI Shapefile: thư mục chứa các tập tin shape\n"
 "\t\tMapInfo File: thư mục chứa các tập tin mapinfo"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 msgid "OGR layer name. If not given, all available layers are imported"
 msgstr ""
 "Tên lớp OGR, nếu không được cung cấp, tất cả các lớp dùng được đều được nhập "
 "vào"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 msgid ""
 "Examples:\n"
 "\t\tESRI Shapefile: shapefile name\n"
@@ -15319,51 +16343,51 @@ msgstr ""
 "
\t\tESRI Shapefile: tên tập tin shape\n"
 "\t\tMapInfo File: tên tập tin mapinfo"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "Kích thước nhỏ nhất của vùng cần nhập (đơn vị vuông)"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr "Những vùng nhỏ hơn và các đảo bị bỏ qua. Phải lớn hơn snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 msgid "Optionally change default input type"
 msgstr "Tùy chọn thay đổi kiểu đầu vào mặc định"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "Không có các điểm khống chế được kích hoạt"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "Đang làm sạch ranh giới tại các nốt..."
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "Xây dựng các đường từ các đường thẳng hoặc ranh giới."
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "Loại bỏ các trọng tâm vùng bị lặp"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "Ngưỡng bắt điểm đối với ranh giới"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr "'-1' là không bắt điểm"
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
@@ -15371,184 +16395,186 @@ msgstr ""
 "Danh sách tên các cột cần dùng thay vì các tên nguyên thủy, cột đầu tiên "
 "được dùng làm cột phạm trù"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "Lỗi khi đang đọc tập tin ASCII: '%s'"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "Tên của cột dùng làm nhãn phạm trù raster"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "Số cột"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "Nếu không được cung cấp, tên của bản đồ đầu vào được sử dụng"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "Liệt kê các định dạng được hỗ trợ và thoát"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "Liệt kê các lớp hiện có trong nguồn dữ liệu và thoát"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "Không làm sạch các đa giác (không khuyến cáo)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "Buộc đầu ra là các giá trị nguyên"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "Không thể lấy đơn vị phép chiếu của vị trí hiện tại"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "In ra các tham số kết nối hiện hành và thoát"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr "Thay đổi tên các cột thành ký tự thường"
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, c-format
 msgid "Unable to open data source <%s>"
 msgstr "Không thể mở nguồn dữ liệu <%s>"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "Vị trí con trỏ không được trình điều khiển MySQL hỗ trợ"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, fuzzy, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr "Nguồn dữ liệu chứa %d lớp:"
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "Lớp <%s> không dùng được"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "Không thể lấy thông tin lớp của bản đồ  vec-tơ <%s>"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "Không tìm thấy cột <%s> trong bảng <%s>"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "Khoảng cách đệm tính theo đơn vị bản đồ"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "Không thể tạo bản đồ vec-tơ <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "Không tìm thấy cột key '%s'"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "Cột khoá không phải là số nguyên"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "Không tìm thấy cột <%s> trong bảng <%s>"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr "Đang ghi cột <%s> với chiều dài cố định %d ký tự (có thể bị cắt bớt)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr "Đang ghi cột <%s> với chiều dài cố định %d ký tự (có thể bị cắt bớt)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
@@ -15557,57 +16583,57 @@ msgstr ""
 "Chiều rộng của cột %s được thiết lập là 255 (không phải do OGR chỉ định), "
 "một số chuỗi có thể bị cắt bớt!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr "Đang ghi cột %s với chiều dài cố định %d ký tự (có thể bị cắt bớt)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "Kiểu cột không được hỗ trợ (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "Đang nhập bản đồ, %d đối tượng..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s không có hình học"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "Ngắt các vùng"
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "Bắt dính các ranh giới (ngưỡng = %.3e):"
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "Đang ngắt các ranh giới..."
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "Thay đổi các đoạn thừa của ranh giới thành đường:"
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "Thay đổi các cầu ranh giới thành đường:"
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "Đang tính trong tâm cho các vùng..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15619,117 +16645,117 @@ msgstr ""
 "1 hàng trong bảng thuộc tính. Số đối tượng cho những vùng đó được lưu thành "
 "phạm trù trong lớp %d"
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d đa giác đầu vào"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, c-format
 msgid "%d input polygons"
 msgstr "%d đa giác đầu vào"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "Tổng diện tích: %e (%d vùng)"
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "Tổng diện tích: %e (%d vùng)"
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "Diện tích chồng: %e (%d vùng)"
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "Diện tích chồng: %e (%d vùng)"
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "Diện tích không có phạm trù: %e (%d vùng)"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "Diện tích không có phạm trù: %e (%d vùng)"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "Ngưỡng bắt điểm đối với ranh giới"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "Đầu vào thất bại"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "Không thể bỏ bảng: %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 #, fuzzy
 msgid "Default region for this location updated"
 msgstr "Thông tin phép chiếu được cập nhật!"
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "<%s> đã là bộ bản đồ hiện tại"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15954,6 +16980,11 @@ msgstr ""
 "Kết nối CSDL không được định nghĩa cho lớp %d. Trước hết hãy chạy v.db."
 "connect."
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "Không tìm thấy bảng màu của bản đồ raster <%s>"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16116,7 +17147,7 @@ msgstr "Tùy chọn 'sinuous' chỉ có ý nghĩa đối với các đường"
 msgid "Querying database... "
 msgstr "Đang truy vấn CSDL..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
@@ -16126,14 +17157,14 @@ msgstr ""
 "quá nhiều phạm trù truy vấn (%d). Tất cả các giá trị báo cáo sau đó về cat 0 "
 "đều không hợp lệ."
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 "Ra nhiều kết quả truy vấn, giá trị đầu ra được thiết lập thành NULL (phạm "
 "trù [%d])"
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 msgid "Unable to fetch record"
 msgstr "Không thể lấy bản ghi"
 
@@ -16319,14 +17350,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "Bản đồ raster <%s> đã có và sẽ bị ghi đè"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, c-format
 msgid "Raster map <%s> already exists"
 msgstr "Bản đồ raster <%s> đã có"
@@ -16463,14 +17494,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr "Gán các phạm trù đơn trị cho các điểm mới"
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "Tạo đường song song với các đường vec-tơ đầu vào."
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "Tìm thấy %d đường hoặc ranh giới trong bản đồ vec-tơ <%s@%s>"
 msgstr[1] "Tìm thấy %d đường hoặc ranh giới trong bản đồ vec-tơ <%s@%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16977,19 +18013,24 @@ msgstr "Đánh dấu thời gian không hợp lệ"
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -17003,6 +18044,7 @@ msgstr "Đánh dấu thời gian không hợp lệ"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -17015,7 +18057,7 @@ msgstr "Đánh dấu thời gian không hợp lệ"
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17178,6 +18220,7 @@ msgid "Unable to map image file"
 msgstr "Không thể mở tập tin ảnh"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17195,14 +18238,14 @@ msgstr "Không thể mở tập tin ảnh"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17240,6 +18283,55 @@ msgstr "Không thể lấy đủ màu"
 msgid "Using private colormap for DirectColor visual."
 msgstr "Dùng bản đồ màu riêng cho việc xem DirectColor."
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "Trình bày một thước tỷ lệ trên màn hình đồ họa."
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "Tạo bộ bản đồ nếu nó không tồn tại"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+#, fuzzy
+msgid "Remove all frames, erase the screen and exit"
+msgstr "Loại bỏ tất cả các khung và xóa màn hình"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "In ra đường dẫn tìm kiếm bộ bản đồ hiện tại"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "In ra các tham số kết nối hiện hành và thoát"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+#, fuzzy
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr "Vị trí đặt ở dạng phần trăm của tọa độ màn hình (0,0 là góc dưới trái)"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17260,7 +18352,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17273,7 +18365,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17350,18 +18442,23 @@ msgid ""
 msgstr "Nạp các giá trị raster tại vị trí của các điểm vec-tơ vào bảng."
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17376,6 +18473,7 @@ msgstr "Nạp các giá trị raster tại vị trí của các điểm vec-tơ
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17475,6 +18573,93 @@ msgstr "Trọng số phần trăm của bản đồ thứ nhất dùng cho phép
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "Đổi bản đồ raster 3D thành bản đồ raster 2D"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "Tên của bản đồ raster 3D đầu vào"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "Số lượng lớp cần định nghĩa"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "Bản đồ raster đầu vào"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17613,7 +18798,7 @@ msgstr "Tạo một CSDL rỗng."
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17627,8 +18812,8 @@ msgid "rename"
 msgstr "tên"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17638,9 +18823,9 @@ msgid "input"
 msgstr "Đầu vào"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17656,6 +18841,79 @@ msgstr "Yêu_cầu"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "Kann die Vektordatei %s nicht finden."
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr ""
+"Tạo một bản đồ vec-tơ GRASS với các đường bình độ được chỉ định từ một lớp "
+"bản đồ raster."
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "Độ tương phản"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "Khoảng tăng dần giữa các cấp bình độ"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "Danh sách các cấp bình độ"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "Cấp đường bình độ nhỏ nhất"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "Cấp đường bình độ lớn nhất"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "Số điểm nhỏ nhất cho một đường bình độ (0 -> không hạn chế)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "Bản đồ raster đầu vào"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "Không tạo bảng thuộc tính"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17664,7 +18922,7 @@ msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17723,8 +18981,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17836,74 +19095,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "Tên của bản đồ raster 3D đầu vào"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "Tên tập tin địa điểm đi chuyển (walker site) đầu ra"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "Tên tập tin địa điểm đi chuyển (walker site) đầu ra"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17938,11 +19166,11 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "Tên của CSDL mới"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
@@ -17951,38 +19179,21 @@ msgstr ""
 "#-#-#-#-#  grassmods_vi.po (grassmods_vi)  #-#-#-#-#\n"
 "Tên bản đồ raster đầu vào"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "Số lượng lớp cần định nghĩa"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "Bản đồ raster đầu vào"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -18086,8 +19297,8 @@ msgstr "Hệ số nhân"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "Tên cho tập tin đầu ra"
+msgid "Name for output image (or text file for -t)"
+msgstr "Tên của tập tin đầu ra (đừng thêm đuôi mở rộng)"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18104,6 +19315,54 @@ msgstr "nhãn bằng tọa độ thay vì đánh số"
 msgid "Use gnuplot for display"
 msgstr "Chữ cần trình bày"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "Xuất ra tập tin world TIFF"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "Danh sách giá trị, cách nhau bởi dấu phẩy"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "Tên của tập tin đầu ra lưu giữ báo cáo"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "Tạo một CSDL rỗng."
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "Số lượng lớp cần định nghĩa"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "Bản đồ raster đầu ra"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18135,32 +19394,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "Mở rộng phạm vi của vị trí dựa trên bộ dữ liệu mới"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "Ghi đè phép chiếu (dùng phép chiếu của vị trí)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "Không thể lấy đơn vị phép chiếu của vị trí hiện tại"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18351,6 +19588,20 @@ msgstr "Số ô chồng nhau theo mỗi hướng"
 msgid "Output field separator"
 msgstr "Dấu phân cách trường đầu ra"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "Đổi bản đồ raster 3D thành bản đồ raster 2D"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 msgid "Displays a raster map and its legend on a graphics window"
 msgstr "Trình bày một bản đồ raster và chú giải của nó trên một cửa sổ đồ họa"
@@ -18454,8 +19705,15 @@ msgstr "Tạo một CSDL rỗng."
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "Tên của CSDL mới"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "tổng quát, quản lý bản đồ"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "Tên bản đồ raster hiện có"
@@ -18466,7 +19724,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr "Ghép khảm tối đa 4 ảnh và mở rộng bản đồ màu; tạo map*.mosaic"
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18475,15 +19733,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "Tên của CSDL mới"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18533,7 +19791,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "Xóa nội dung khung hiển thị kích hoạt bằng mầu do người dùng chọn"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "Tên cho tập tin đầu ra"
 
@@ -18615,16 +19873,27 @@ msgstr "Tên các tập tin đầu vào"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "Tên của bản đồ raster đầu ra (mặc định: tên đầu vào)"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "Đổi bản đồ raster 3D thành bản đồ raster 2D"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18701,12 +19970,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18762,7 +20038,7 @@ msgstr ""
 #: ../locale/scriptstrings/r.shade_to_translate.c:10
 #, fuzzy
 msgid "Name of shaded raster map"
-msgstr "Tên của bản đồ raster lớp phủ"
+msgstr "Tên của bản đồ raster thứ hai"
 
 #: ../locale/scriptstrings/r.shade_to_translate.c:11
 #: ../locale/scriptstrings/d.shade_to_translate.c:10
@@ -18841,13 +20117,12 @@ msgstr ""
 "giá trị mới cần gán cho cột (các giá trị varchar (biến ký tự) phải ở dạng "
 "trích dẫn trong dấu nháy đơn, ví dụ : 'grass')"
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18860,12 +20135,12 @@ msgstr ""
 "biến."
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr "Quét tập tin dữ liệu để lấy phạm vi và thoát"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 msgid "In scan mode, print using shell script style"
 msgstr "Ở chế độ quét, in bằng cách dùng dạng tập lệnh shell"
 
@@ -18882,7 +20157,7 @@ msgstr ""
 "chuẩn)"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 msgid "Statistic to use for raster values"
 msgstr "Phép thống kê dùng cho các giá trị raster"
 
@@ -18890,14 +20165,14 @@ msgstr "Phép thống kê dùng cho các giá trị raster"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr "Thống kê"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "Kiểu lưu trữ cho bản đồ raster kết quả"
 
@@ -18937,17 +20212,17 @@ msgid "Scaling factor to apply to value column data"
 msgstr "Hệ số tỷ lệ dùng cho các giá trị của cột thuộc tính"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "Phần trăm bản đồ được giữ trong bộ nhớ"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 msgid "pth percentile of the values"
 msgstr "Số phần trăm pth của các giá trị"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18992,19 +20267,15 @@ msgid ""
 "on the fly."
 msgstr "Đổi các lớp vec-tơ OGR thành bản đồ vec-tơ GRASS."
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "Tập tin raster cần nhập"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "Bản đồ vec-tơ đầu ra dùng để lưu lỗi"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "Canh thẳng vùng hiện tại theo bản đồ đầu vào"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19102,7 +20373,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19193,24 +20464,18 @@ msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "Số lượng lớp cần định nghĩa"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "Tên của bản đồ raster"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "Bản đồ raster đầu vào"
@@ -19333,17 +20598,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "Số lượng các điểm nội suy"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19351,10 +20620,6 @@ msgid ""
 "space time raster datasets."
 msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19477,78 +20742,94 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "Tên của vị trí mới cần tạo"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "Liệt kê các quy tắc và thoát"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "Liệt kê các quy tắc và thoát"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "Liệt kê các quy tắc và thoát"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 #, fuzzy
 msgid "Install"
 msgstr "xem"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "Các bảng hệ thống thay vì các bảng người dùng"
@@ -19666,10 +20947,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19726,6 +21003,60 @@ msgstr ""
 msgid "Test name"
 msgstr "Kiểm tra tên"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "Đổi bản đồ raster 3D thành bản đồ raster 2D"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "Tên của cột thuộc tính dùng làm nhãn"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+msgid "Smooth corners of area features"
+msgstr "Làm trơn các góc của các đối tượng vùng"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "Giá trị dịch chuyển đối với các tọa độ z"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr ""
+"Ghi các giá trị raster thành tọa độ z. Bảng không được tạo ra. Hiện tại chỉ "
+"hỗ trợ cho dữ liệu điểm."
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "Không xây dựng tôpô"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr ""
+"Dùng các giá trị raster làm phạm trù thay vì dùng trình tự không trùng (chỉ "
+"áp dụng cho CELL)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19802,6 +21133,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "kiểu dữ liệu"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "cờ z chỉ được hỗ trợ với điểm"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 #, fuzzy
 msgid "Displays the manual pages of GRASS modules."
@@ -19985,20 +21327,26 @@ msgid "Description of the space time dataset"
 msgstr "Tên của CSDL mới"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "Tên của CSDL mới"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -20042,13 +21390,13 @@ msgstr "Phép chuyển đổi Tasseled Cap (Kauth Thomas) cho các dữ liệu L
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "Lớp số"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -20132,7 +21480,7 @@ msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát
 msgid "Neighborhood size"
 msgstr "Kích thước vùng lân cận"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "Số lượng các điểm nội suy"
@@ -20237,24 +21585,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "Độ phân giải cuủa bản đồ đầu ra"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "Tiêu đề cho bản đồ raster kết quả"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr "Mô tả dữ liệu"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "Độ phân giải mịn"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "Tên tập tin đầu ra không hợp lệ <%s>"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "Không thực hiện việc tối ưu hóa kiểu xén vùng"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "Vị trí màn hình theo tọa độ địa lý"
@@ -20327,17 +21692,37 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr "Tải vào bảng các giá trị vector tại vị trí của các điểm vector"
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "Cột"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "Tên của bản đồ vec-tơ cần chỉnh sửa"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "Cột"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "Tên của cột thuộc tính dùng làm nhãn"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "Khoảng cách đệm tính theo đơn vị bản đồ"
@@ -20428,6 +21813,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20441,11 +21827,15 @@ msgid "Sill value"
 msgstr "%s: giá trị chỉ định không hợp lệ"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
+msgid "Kappa value"
+msgstr ""
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
 #, fuzzy
 msgid "Name for output variance raster map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20563,28 +21953,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "Tính toán thống kê một biến từ các ô không rỗng của một bản đồ raster."
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "địa điểm"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "Tạo một CSDL rỗng."
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "Đổi bản đồ raster 3D thành bản đồ raster 2D"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr "Truyền các giá trị NULL"
 
@@ -20623,7 +22008,7 @@ msgstr ""
 "Tạo một lớp bản đồ raster với các vùng liền nhau được làm lớn lên từ một ô."
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20637,7 +22022,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "Bán kính của vùng đệm tính theo ô raster"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "Hệ mét"
 
@@ -20655,12 +22040,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "Đổi bản đồ raster 3D thành bản đồ raster 2D"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "Số lượng các điểm nội suy"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20688,7 +22073,7 @@ msgstr ""
 "đường spline v.surf.rst"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20716,6 +22101,16 @@ msgstr "Tham số làm trơn của đường spline"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr "Thời gian dùng cho các vòng lặp [phút]"
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "Nội suy spline bậc ba hoặc song tuyến với phép chính quy hóa Tykhonov."
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "Vị trí: %s\n"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20726,20 +22121,11 @@ msgstr "loại bỏ bảng thuộc tính hiện tại của một bản đồ ve
 msgid "Vector map to which to join other table"
 msgstr "bản đồ vector cần chỉnh sửa bảng thuộc tính"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "Lớp cần thêm cột vào"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "Cột"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20768,17 +22154,17 @@ msgstr "Số cột xuất hiện trong bảng màu"
 msgid "Imports space time raster dataset."
 msgstr "Cập nhật thống kê của bản đồ raster"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "Canh thẳng vùng hiện tại theo bản đồ đầu vào"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "Bản đồ raster <%s> được tạo ra."
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20858,14 +22244,17 @@ msgstr "Không tìm thấy bản đồ raster 3D <%s>"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20896,11 +22285,11 @@ msgstr "Không thể cấp phát bộ nhớ cho chuỗi "
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "Không thể đọc miền của bản đồ raster <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 msgid "Error while reading history file"
 msgstr "Lỗi khi đang đọc tập tin lịch sử"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20908,8 +22297,8 @@ msgstr "Không thể đóng bản đồ raster <%s@%s>"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 msgid "Error writing data"
 msgstr "Lỗi khi đang ghi dữ liệu"
 
@@ -20962,6 +22351,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, c-format
 msgid "Unable to create file <%s>"
 msgstr "Không thể tạo tập tin <%s>"
@@ -21124,9 +22514,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "Kiểu dòng chảy nước ngầm"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -21156,7 +22547,10 @@ msgstr "Trình giải Cholesky trực tiếp không làm việc với các ma tr
 msgid "Unable to create and solve the linear equation system"
 msgstr "Không thể tạo và giải hệ phương trình tuyến tính"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "Không thể tạo bản đồ raster <%s>"
@@ -21226,6 +22620,142 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "Bản đồ raster %d Filename: %s đã có. Sẽ bị ghi đè!"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "Chi phí cho các đường cùng giá trị"
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "Vui lòng cung cấp ba bản đồ g3d RGB"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "Không tìm thấy bản đồ vector <%s>"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "Đang tính hướng dòng chảy..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "Tên của bản đồ điểm vec-tơ đầu vào để biên tập bảng thuộc tính"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "Tên của bản đồ vec-tơ cần chỉnh sửa"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr "Tên của bản đồ raster hướng đầu ra"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "Tên của các bản đồ raster dùng cho độ bóng"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "%s trong %s: %s"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "Số lần chạy lặp"
+
+#: ../raster3d/r3.flow/main.c:244
+#, fuzzy
+msgid "Default unit is cell"
+msgstr "Chiều rộng của suối (theo mét). Mặc định là chiều rộng của ô raster"
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "Phương pháp nội suy"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "Không có bản đồ raster nào được chỉ định"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "CSDL mặc định không được thiết lập"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "Số lần chạy lặp tối đa"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "Số lần chạy lặp tối đa"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "Số lượng ô giữa các đường dòng chảy"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "Không thể mô tả bảng <%s >"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "Lỗi khi đọc dữ liệu 'hue' (màu sắc)"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21365,11 +22895,11 @@ msgstr "Không thể mở tập tin ASCII <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "bản đồ raster 3d để thay đổi các giá trị rỗng"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "Danh sách các giá trị ô cần được thiết lập thành NULL"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "Giá trị dùng để thay thế cho giá trị rỗng theo"
 
@@ -21394,7 +22924,7 @@ msgstr "modifyNull: lỗi khi đang đổ tất cả các chồng xếp"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "modifyNull: lỗi khi đang đóng tập tin tạm"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "raster, dữ liệu rỗng"
@@ -21403,6 +22933,84 @@ msgstr "raster, dữ liệu rỗng"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr "Tạo ra rõ rệt tập tin bitmap có giá trị NULL kiểu 3D"
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "raster"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr ""
+"Tạo một bản đồ raster từ sự tập hợp nhiều tọa độ bằng các dùng thống kê một "
+"biến."
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "Không đánh chỉ mục các điểm theo ô raster"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "Số lượng lần chạy lặp \t= %d ô\n"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "Không tìm thấy bản đồ raster 3D <%s>"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "Đang ghi bản đồ..."
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "bản đồ raster 3d để thay đổi các giá trị rỗng"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "Giá trị dịch chuyển đối với các tọa độ z"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "vector, chuyển đổi"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "Không thể tạo tập tin tạm"
+
 #: ../raster3d/r3.support/main.c:52
 #, fuzzy
 msgid ""
@@ -21457,13 +23065,13 @@ msgstr ""
 msgid "Update range"
 msgstr "Miền dữ liệu đầu ra"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "không thể ghi tập tin phạm trù cho <%s>"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "Bảng phạm trù cho [%s] được thiết lập thành %s"
@@ -21521,7 +23129,7 @@ msgstr "Lỗi khi đọc dữ liệu 'hue' (màu sắc)"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr "Đang nạp dữ liệu ... (%dx%dx%d)"
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "Lỗi khi đang đóng tập tin g3d"
@@ -21916,7 +23524,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "Các giá trị bản đồ 3d sai! Phải ở trong khoảng 0 đến 255!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21926,7 +23534,7 @@ msgstr "Phương pháp không biết <%s>"
 msgid "Aggregate operation"
 msgstr "Phép toán tổ hợp"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21963,6 +23571,39 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "Không thể cấp phát các vùng đệm cell."
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "Phương sai "
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr ""
+"Kết hợp các bản đồ raster đỏ, lục, và xanh thành một bản đồ tổ hợp duy nhất."
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr "Tên của bản đồ raster đầu ra"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "Kích thước của bộ nhớ đệm kiểu điểm (point cache)"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "Không thể cấp phát bộ nhớ"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "Đang ghi bản đồ raster mới..."
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22306,38 +23947,38 @@ msgstr "In ra ở dạng tập lệnh shell"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22639,13 +24280,13 @@ msgid "Unknown operation '%s'"
 msgstr "Lệnh không biết"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, fuzzy, c-format
 msgid "Flag -%c ignored"
 msgstr "bỏ qua\n"
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "Vị trí <%s> được tạo ra"
@@ -22719,9 +24360,9 @@ msgid "%s=%s,%s: files are the same, no copy required"
 msgstr "%s=%s,%s: các tập tin giống nhau, không cần sao chép"
 
 #: ../general/g.copy/main.c:76
-#, c-format
-msgid "<%s> already exists"
-msgstr "<%s> đã có"
+#, fuzzy, c-format
+msgid "<%s> already exists. File not copied."
+msgstr "<%s> đã có trong bộ bản đồ <%s>"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22840,8 +24481,8 @@ msgid ""
 msgstr ""
 "Buộc ghi đè thông tin chuyển đổi mốc tọa độ chuẩn trong hệ toạ độ đầu vào"
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -23106,9 +24747,9 @@ msgstr "Danh sách các lớp cần nhập"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "Raster"
@@ -23123,15 +24764,15 @@ msgstr "Kiểu tìm kiếm tên bản đồ (mặc định: tất cả)"
 msgid "File name exclusion pattern (default: none)"
 msgstr "Kiểu tên bản đồ loại ra (mặc định: không)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr "Dùng biểu thức quy tắc cơ bản thay vì các ký tự đại diện"
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr "Dùng biểu thức quy tắc mở rộng thay vì các ký tự đại diện"
 
@@ -23141,7 +24782,7 @@ msgid "Remove base raster maps"
 msgstr "Loại bỏ các bản đồ cơ sở"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "Không thể mở tập tin cell [%s]."
@@ -23191,7 +24832,7 @@ msgstr ""
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 #, fuzzy
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
@@ -23200,70 +24841,60 @@ msgstr ""
 "Liệt kê các tập tin CSDL GRASS dùng được có kiểu dữ liệu do người dùng chỉ "
 "định tại đầu ra tiêu chuẩn."
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 msgid "Map name search pattern (default: all)"
 msgstr "Kiểu tìm kiếm tên bản đồ (mặc định: tất cả)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 msgid "Map name exclusion pattern (default: none)"
 msgstr "Kiểu tên bản đồ loại ra (mặc định: không)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "Bộ bản đồ cần liệt kê (mặc định: đường dẫn tìm kiếm hiện tại)"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "Tên của một bộ bản đồ (mặc định: hiện tại)"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "Thiết lập vùng hiện tại theo vùng đã đặt tên"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 msgid "Print data types"
 msgstr "In ra kiểu dữ liệu"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 msgid "Pretty printing in human readable format"
 msgstr "In ra ở dạng đẹp mà người xem có thể đọc được"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr "Liệt kê đầy đủ (liệt kê cả tựa đề bản đồ)"
 
-#: ../general/g.list/main.c:182
-#, fuzzy, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr "Các cờ -s và -n loại bỏ nhau"
-
-#: ../general/g.list/main.c:187
-#, fuzzy, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr "Các cờ -s và -n loại bỏ nhau"
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "Nhóm <%s> không tồn tại"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "Không thể đọc tiêu đề (header) của bản đồ raster 3D <%s@%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "Không thể mở bản đồ vec-tơ <%s> ở cấp tôpô %d "
@@ -23472,44 +25103,44 @@ msgstr ""
 "Không thể thay đổi vùng mặc định. Bộ bản đồ hiện tại không phải là "
 "<PERMANENT>."
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "Đầu vào không hợp lệ <%s=%s>"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "Không thể lấy thông tin phép chiếu của vị trí hiện tại"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "Không thể lấy đơn vị phép chiếu của vị trí hiện tại"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 msgid "Unable to update lat/long projection parameters"
 msgstr "Không thể cập nhật các tham số phép chiếu vĩ/kinh độ"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "Lỗi trong pj_do_proj (phép chiếu của cặp tọa độ đầu vào)"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr "Bạn hiện đã ở trong hệ Vĩ/Kinh độ. Thay vào đó hãy dùng cờ -p."
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
@@ -23517,7 +25148,7 @@ msgstr ""
 "Bạn ở trong vị trí kiểu XY đơn giản, phép chiếu sang Vĩ/Kinh độ không thực "
 "hiện được. Thay vào đó hãy dùng cờ -p."
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
@@ -23525,7 +25156,7 @@ msgstr ""
 "Đầu ra WGS84 không thể được vì vị trí này không chứa các tham số chuyển đổi "
 "mốc tọa độ chuẩn. Hãy thử chạy g.setproj."
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 "Các tính toán Vĩ/Kinh độ không thể thực hiện được từ một hệ XY đơn giản"
@@ -23752,40 +25383,61 @@ msgid "command line interface with GUI startup screen"
 msgstr "Không tìm thấy cột <%s>"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "Tập tin raster cần nhập"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
+msgstr ""
+
+#: ../general/g.gui/main.c:78
 #, fuzzy
 msgid "Update default user interface settings"
 msgstr "Cập nhật thiết lập GUI mặc định"
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 #, fuzzy
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr "Không khởi động GDĐH sau khi cập nhật thiết lập GDĐH mặc định"
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr "<%s> bây giờ thành GUI mặc định"
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -24098,10 +25750,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "Module vec-tơ đầu tiên của tôi"
 
-#: ../doc/vector/v.example/main.c:81
-msgid "Unable to set predetermined vector open level"
-msgstr "Không thể thiết lập cấp mở vec-tơ đã định trước"
-
 #: ../doc/vector/v.example/main.c:170
 #, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24267,7 +25915,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 msgid "Percent complete..."
 msgstr "Phần trăm hoàn tất..."
 
@@ -24687,7 +26335,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "Không thể lấy các giá trị chính về phép chiếu  của vị trí hiện tại"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24880,150 +26528,150 @@ msgstr "ewres (độ p.giải đt)=%f"
 msgid "Writing new raster map..."
 msgstr "Đang ghi bản đồ raster mới..."
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "Quy chiếu lại một bản đồ raster từ một ví trí đến vị trí hiện tại."
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "Vị trí chứa bản đồ vector đầu vào"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "Bộ bản đồ chứa bản đồ vector đầu vào"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 msgid "Name of input raster map to re-project"
 msgstr "Tên bản đồ raster đầu vào để quy chiếu"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "Tên của bản đồ raster đầu ra (mặc định: tên đầu vào)"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "Độ phân giải cuủa bản đồ đầu ra"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "Liệt kê các bản đồ raster trong vị trí đầu vào và thoát"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "In vùng địa lý hiện tại (kiểu tập lệnh shell)"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "Vị trí đầu vào và đầu ra không thể giống nhau"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 msgid "Unable to get projection info of output raster map"
 msgstr "Không thể lấy thông tin phép chiếu của bản đồ raster đầu ra"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 msgid "Unable to get projection units of output raster map"
 msgstr "Không thể lấy đơn vị phép chiếu của bản đồ raster đầu ra"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 msgid "Unable to get projection key values of output raster map"
 msgstr ""
 "Không thể lấy các giá trị quan trọng về phép chiếu của bản đồ raster đầu ra"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "Bộ bản đồ <%s> trong vị trí đầu vào <%s> - %s"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr ""
 "Không tìm thấy bản đồ raster <%s> trong vị trí <%s> trong bộ bản đồ <%s>"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 msgid "Unable to get projection info of input map"
 msgstr "Không thể lấy thông tin phép chiếu của bản đồ đầu vào"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 msgid "Unable to get projection units of input map"
 msgstr "Không thể lấy đơn vị phép chiếu của bản đồ đầu vào"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 msgid "Unable to get projection key values of input map"
 msgstr "Không thể lấy các giá trị quan trọng về phép chiếu của bản đồ đầu vào"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr "Không thể làm việc với dữ liệu không quy chiếu (vị trí kiểu xy)"
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "vào <%s@%s> (vị trí <%s>) ... %s"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 msgid "Input:"
 msgstr "Đầu vào:"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, c-format
 msgid "Cols: %d (%d)"
 msgstr "Cột: %d (%d)"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr "Hàng: %d (%d)"
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, c-format
 msgid "North: %f (%f)"
 msgstr "Bắc: %f (%f)"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr "Nam: %f (%f)"
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, c-format
 msgid "West: %f (%f)"
 msgstr "Tây: %f (%f)"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, c-format
 msgid "East: %f (%f)"
 msgstr "Đông: %f (%f)"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr "Độ p.giải ĐT: %f"
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr "Độ p.giải BN: %f"
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 msgid "Output:"
 msgstr "Đầu ra:"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 msgid "Projecting..."
 msgstr "Đang quy chiếu..."
 
@@ -25077,12 +26725,6 @@ msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 "Cho phép tạo và/hoặc thay đổi các tập tin hỗ trợ của lớp bản đồ raster."
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "Tiêu đề cho bản đồ raster kết quả"
-
 #: ../raster/r.support/main.c:81
 msgid "Text to use for map data units"
 msgstr "Nội dung dùng cho đơn vị dữ liệu của bản đồ"
@@ -25112,22 +26754,22 @@ msgstr "Tập tin raster đầu vào"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ hiện tại"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] là sự phân loại lại của một bản đồ khác. Đang thoát."
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "Ghi đang ghi tập tin null cho [%s]... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "Đang loại bỏ tập tin null cho [%s]...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "Xong."
 
@@ -25926,7 +27568,7 @@ msgstr "%s = %s -- phải lớn hơn 0"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "%s Không thể mở %s"
@@ -26134,8 +27776,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr "Hai cặp hệ số phạm trù và các độ dịch, dùng cho $1 và $2"
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "Không thể đọc tập tin phạm trù của bản đồ raster <%s@%s>"
@@ -26221,12 +27863,12 @@ msgstr "Không thể đọc đầu vào từ <%s>"
 msgid "Can't get cell header"
 msgstr "Không thể lấy header của ô"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr "ÔI: các hàng bị thay đổi từ %d thành %d"
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr "ÔI: các cột bị thay đổi từ %d thành %d"
@@ -26422,10 +28064,6 @@ msgid "Number of header lines to skip at top of input file"
 msgstr ""
 "Số dòng header bỏ qua ở phần trên cùng của tập tin đầu vào (chế độ điểm)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-msgid "Filter range for z data (min,max)"
-msgstr "Miền giá trị lọc cho dữ liệu z (min,max)"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
@@ -26433,7 +28071,7 @@ msgstr "Miền giá trị lọc cho dữ liệu z (min,max)"
 msgid "Advanced Input"
 msgstr "Nâng cao"
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr "Tỷ lệ áp dụng cho dữ liệu z"
 
@@ -26461,7 +28099,7 @@ msgstr "Tỷ lệ áp dụng cho dữ liệu z"
 msgid "Please specify a reasonable column number."
 msgstr "Vui lòng chỉ định số thứ tự cột hợp lý."
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 msgid "Invalid zrange"
 msgstr "Miền zrange không hợp lệ"
 
@@ -26470,18 +28108,18 @@ msgstr "Miền zrange không hợp lệ"
 msgid "Invalid vrange"
 msgstr "Miền zrange không hợp lệ"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 "Không thể tính toán số phần trăm mà không có tùy chọn pth được chỉ định!"
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 "Không thể tính toán trị trung bình bị cắt bớt nếu tùy chọn trim không được "
 "chỉ định!"
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26505,7 +28143,7 @@ msgid "Reading input data..."
 msgstr "Đang đọc các đầu vào..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr "Số lần chạy qua #%d (của %d)..."
@@ -26551,16 +28189,16 @@ msgstr "Dòng tọa độ y tồi %lu cột %d. <%s>"
 msgid "Writing to output raster map..."
 msgstr "Đang ghi bản đồ raster đầu ra %s..."
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, c-format
 msgid "%lu points found in region."
 msgstr "%lu điểm tìm thấy trong vùng."
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr "Đang quét dữ liệu..."
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr "Miền:     tối thiểu       tối đa\n"
@@ -26725,11 +28363,6 @@ msgstr "Tên của tập tin raster đầu ra"
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr "Định dạng GIS cần ghi (phân biệt chữ hoa/thường, xem thêm cờ -l)"
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "kiểu dữ liệu"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr "Các tùy chọn tạo để truyền đến trình điều khiển định dạng đầu ra"
@@ -27284,41 +28917,46 @@ msgstr "Tọa độ y không hợp lệ <%s>"
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "Cảnh báo, bỏ qua các điểm nằm ngoài cửa sổ: %.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 msgid "Manages NULL-values of given raster map."
 msgstr "Quản lý các giá trị NULL của một bản đồ raster cho trước."
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "bản đồ raster 3d để thay đổi các giá trị rỗng"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr "Chỉ thực hiện nếu bản đồ thuộc kiểu dấu chấm động"
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr "Chỉ thực hiện nếu bản đồ thuộc kiểu số nguyên"
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr "Chỉ thực hiện nếu bản đồ không có tập tin bitmap giá trị NULL"
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr "Tạo tập tin bitmap giá trị NULL xác thực tất cả các ô dữ liệu"
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr "Loại bỏ tập tin bitmap giá trị NULL"
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+#, fuzzy
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr "Tạo tập tin bitmap giá trị NULL xác thực tất cả các ô dữ liệu"
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
@@ -27327,62 +28965,63 @@ msgstr ""
 "Bản đồ raster <%s> là phân loại lại của bản đồ <%s@%s>. Cân nhắc việc tạo "
 "một bản sao bằng r.mapcalc. Đang thoát."
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "Bản đồ raster <%s> không ở trong bộ bản đồ <%s> của bạn"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, c-format
 msgid "%s is illegal entry for null"
 msgstr "%s là mục không hợp lệ dùng cho null"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "Bản đồ raster <%s> đã có một tập tin bitmap null"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "<%s> là bản đồ raster kiểu số nguyên (CELL)"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "<%s> là bản đồ raster kiểu số nguyên (CELL). Dùng null=%d."
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "<%s> là bản đồ raster kiểu dấu chấm động"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "Ghi đang ghi tập tin null mới cho bản đồ raster <%s>... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, c-format
 msgid "Raster map <%s> modified."
 msgstr "Bản đồ raster <%s> được thay đổi."
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "Đang loại bỏ tập tin null của bản đồ raster <%s>..."
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s: %s: giá trị chỉ định không hợp lệ"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, c-format
 msgid "%s: illegal value spec"
 msgstr "%s: giá trị chỉ định không hợp lệ"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "Đang ghi dữ liệu mới cho bản đồ raster <%s>..."
@@ -27716,7 +29355,7 @@ msgstr "Tên tập tin đầu vào; hoặc nhập \"-\" để đọc từ đầu
 #: ../raster/r.in.poly/main.c:56
 #, fuzzy
 msgid "Output raster type"
-msgstr "Kiểu đối tượng"
+msgstr "Tiêu đề bản đồ raster đầu ra"
 
 #: ../raster/r.in.poly/main.c:64
 #, fuzzy
@@ -27798,89 +29437,181 @@ msgstr "Đang đổi..."
 msgid "File <%s> created"
 msgstr "Tập tin <%s> được tạo ra"
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr ""
 "Tạo một bản đồ raster từ sự tập hợp nhiều tọa độ bằng các dùng thống kê một "
 "biến."
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "Tập tin chứa các quy tắc mã hoá"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "Miền giá trị lọc cho dữ liệu z (min,max)"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "Tỷ lệ áp dụng cho dữ liệu z"
+
+#: ../raster/r.in.lidar/main.c:209
+#, fuzzy
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+"Bỏ <trim> phần trăm các quan sát nhỏ nhất và <trim> phần trăm các quan sát "
+"lớn nhất"
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "Tiêu đề của tập tin raster đầu ra"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "Thiết lập vùng khớp với bản đồ raster sau"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "Nhóm <%s> không tồn tại"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr "miền giá trị z (zrange) sẽ không được xem xét trong quá trình quét"
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "Không hiểu tùy chọn quy tắc: '%s'"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "Bản đồ không hợp lệ <%s>"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 msgid "Reading data ..."
 msgstr "Đang đọc dữ liệu ..."
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "Không thể mở tập tin đầu ra <%s>."
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 msgid "Writing to map ..."
 msgstr "Đang ghi bản đồ..."
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%lu điểm tìm thấy trong vùng."
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "Không thể mở tập tin [%s] để đọc"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr ""
 "Tạo một lớp bản đồ raster về khoảng cách đến các đối tượng trong lớp đầu vào."
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "Tên của bản đồ khoảng cách đầu ra"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr "Tên của bản đồ raster đầu ra"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "Khoảng cách lớn nhất giữa các điểm tính theo đơn vị bản đồ."
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "Khoảng cách tối đa đến đường gần nhất"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 msgid "At least one of distance= and value= must be given"
 msgstr "Ít nhất một trong hai 'distance=' và 'value=' phải được cung cấp"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "Hệ mét không biết: [%s]."
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "Khoảng cách lớn nhất giữa các điểm tính theo đơn vị bản đồ."
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "Không thể tạo tập tin tạm <%s>"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -28022,7 +29753,7 @@ msgstr "[%s]: Không có màu như vậy"
 msgid "Converting <%s>..."
 msgstr "Đang chuyển đổi %s ..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "Kiểu raster <%s> không khớp"
@@ -28129,7 +29860,7 @@ msgid "There are no valid locations in the current region"
 msgstr "Không có các vị trí hợp lệ trong vùng hiện tại"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28722,7 +30453,7 @@ msgstr "[%s]: Không có màu như vậy"
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -29166,7 +30897,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "In ra các thống kê ở dạng tập lệnh shell"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -29188,11 +30919,6 @@ msgstr "Số lần chạy qua %d..."
 msgid "Unable to write to temp file"
 msgstr "Không thể tạo tập tin tạm"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "Đang tạo các điểm..."
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29310,7 +31036,7 @@ msgid "Writing output raster map..."
 msgstr "Đang ghi bản đồ raster đầu ra %s..."
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, c-format
 msgid "Writing raster map <%s>..."
@@ -29321,43 +31047,43 @@ msgstr "Đang ghi bản đồ raster <%s>..."
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "Tạo thống kê diện tích cho các lớp bản đồ raster."
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 #, fuzzy
 msgid "watershed"
 msgstr "Chạy qua wtrshed (đường chia nước) %d"
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr "Tên của bản đồ raster đầu ra"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "Tọa độ của (các) điểm bắt đầu (Đ,B)"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "Tọa độ đông không hợp lệ <%s>"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "Tọa độ bắc không hợp lệ <%s>"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "Cảnh báo, bỏ qua các điểm nằm ngoài cửa sổ: %.4f,%.4f"
@@ -29456,22 +31182,22 @@ msgid "Invalid map type"
 msgstr "Bản đồ không hợp lệ <%s>"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr "PHẦN %d: Đang đóng các bản đồ."
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr "PHẦN %d: Xác định đường chia nước."
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr "PHẦN 1a (của %1d): Đang khởi tạo bộ nhớ."
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr "PHẦN 1b (của %1d): Đang xác định Dòng chảy ra khỏi Bản đồ."
@@ -29599,24 +31325,24 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr "PHẦN 3: Dòng chảy bề mặt tích luỹ với SFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 #, fuzzy
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr "PHẦN 3: Dòng chảy bề mặt tích lũy với MFD."
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr "MFD: tỷ lệ tích luỹ của phân bố dòng chảy không phải là 1,0 mà là %f"
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, fuzzy, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29624,8 +31350,8 @@ msgid_plural ""
 msgstr[0] "MFD: Một đường dẫn * được xử lý khi phân bố dòng chảy: %d của %d ô"
 msgstr[1] "MFD: Một đường dẫn * được xử lý khi phân bố dòng chảy: %d của %d ô"
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -30206,153 +31932,158 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr "Bấm ENTER để chuyển đến câu hỏi tiếp nếu không có bản đồ chặn."
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "Đầu vào"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "Tên bản đồ raster đầu vào"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "Bản đồ đầu vào: Lượng chảy tràn trên một ô"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "Tên của bản đồ raster đầu vào (độ bão hoà)"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "Bản đồ đầu vào:khối địa hình chặn dòng chảy tràn bề mặt, dùng cho USLE"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr ""
 "Giá trị đầu vào: kích thước nhỏ nhất của lưu vực đường chia nước phía ngoài"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr ""
 "Giá trị đầu vào: Độ dài lớn nhất của các dòng chảy bề mặt, dùng cho USLE"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "Bản đồ đầu ra: Số lượng ô tháo nước qua mỗi ô"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr "Bản đồ chỉ mục địa hình ln(a/tanB)"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "Bản đồ chỉ mục địa hình ln(a/tanB)"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr "Tên của bản đồ raster hướng đầu ra"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "Bản đồ đầu ra: mỗi nửa lưu vực sẽ được cung cấp một giá trị duy nhất"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr "Tên của bản đồ raster độ dốc đầu ra"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "Bản đồ đầu ra: chiều dài triền dốc và hệ số độ dốc (LS) dùng cho USLE"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr "Tên của bản đồ raster độ dốc đầu ra"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "Bản đồ đầu ra: hệ số độ dốc của triền dốc (S) dùng cho USLE "
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 msgid "Convergence factor for MFD (1-10)"
 msgstr "Hệ số chuyển đổi cho MFD (1-10)"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr "1 = dòng chảy phân tán nhất, 10 = dòng chảy hội tụ nhất. Khuyến cáo: 5"
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr "Bộ nhớ lớn nhất cần dùng với cờ -m (theo MB)"
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr "SFD: dòng chảy một hướng, MFD: dòng chảy nhiều hướng"
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "Chỉ cho phép các dòng nước chảy ngang và đứng"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "Bật tùy chọn hoán đổi bộ nhớ: Lệnh sẽ chạy chậm"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
@@ -30360,32 +32091,32 @@ msgstr ""
 "Chỉ cần hiết nếu yêu cầu bộ nhớ vượt quá RAM; xem tài liệu hướng dẫn cách "
 "tính nhu cầu bộ nhớ"
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr "Dùng tích luỹ dòng chảy dương cho cả các giá trị ước lượng có thể thấp"
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr "Xem hướng dẫn để biết mô tả chi tiết đầu ra tích luỹ dòng chảy"
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 msgid "Sorry, you must choose an output map."
 msgstr "Xin lỗi, bạn phải chọn một bản đồ đầu ra nào đó."
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "%s = %s - phải là một số dương"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 #, fuzzy
 msgid ""
 "Sorry, if any of the following options are set:\n"
@@ -30396,42 +32127,42 @@ msgstr ""
 "    basin, stream, half.basin, slope, hay lS\n"
 "    thì bạn PHẢI cung cấp một giá trị cho tham số ngưỡng lưu vực."
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "Vị trí kiểu Vĩ/Kinh độ không được hỗ trợ"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr "Tiến trình con thất bại với mã thoát %d"
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, fuzzy, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] "PHẦN 1 đang bắt đầu: Đang khởi tạo các biến. %d số phần tổng cộng."
 msgstr[1] "PHẦN 1 đang bắt đầu: Đang khởi tạo các biến. %d số phần tổng cộng."
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 #, fuzzy
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 "Bộ nhớ lớn nhất cần dùng nhỏ hơn 3 MB, thiết lập thành mặc định = 300 MB."
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 #, fuzzy
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr "PHẦN 1b (của %1d): Đang xác định Dòng chảy ra khỏi Bản đồ."
@@ -30441,22 +32172,32 @@ msgstr "PHẦN 1b (của %1d): Đang xác định Dòng chảy ra khỏi Bản 
 msgid "Closing accumulation map"
 msgstr "Đóng bản đồ raster g3d\n"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "Đóng bản đồ raster g3d\n"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "Đóng bản đồ raster g3d\n"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "Đóng bản đồ raster g3d\n"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "Đang tính hướng dòng chảy..."
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "Đóng bản đồ raster g3d\n"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "Đóng bản đồ raster g3d\n"
@@ -30489,32 +32230,32 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 #, fuzzy
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr "MFD: Một đường dẫn * được xử lý khi phân bố dòng chảy: %d của %d ô"
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "raster, lấy mẫu lại"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "Lấy mẫu lại các lớp bản đồ raster ra lưới thô hơn bằng cách gộp."
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 msgid "Aggregation method"
 msgstr "Phương pháp gộp"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr "Trọng số theo diện tích (chậm hơn)"
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, c-format
 msgid "Unable to read color table for %s"
 msgstr "Không thể đọc bảng màu của %s"
@@ -30923,7 +32664,7 @@ msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr ""
 "Bảng màu grey.log không được hỗ trợ đối với bản đồ raster kiểu dấu chấm động"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, c-format
 msgid "Unknown color request '%s'"
 msgstr "Yêu cầu màu không biết '%s'"
@@ -31318,7 +33059,7 @@ msgid ""
 msgstr "Tính toán thống kê một biến từ các ô không rỗng của một bản đồ raster."
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31333,11 +33074,25 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr ""
+"Dùng cùng độ phân giải với bản đồ RASTER3D đầu vào cho các bản đồ 2D đầu ra, "
+"không phụ thuộc vào thiết lập vùng hiện tại."
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "Tính toán thống kê một biến từ các ô không rỗng của một bản đồ raster."
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "Hai tham số input= và source= loại bỏ nhau"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31634,33 +33389,33 @@ msgstr "Mở bản đồ raster %s - một lần cho mỗi độ sâu (%d/%d)"
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr "Các bản đồ đầu vào phải có cùng kiểu. CELL, FCELL hay DCELL!"
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "%s: Không thể tìm thấy khung bao dùng cho các đường"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr "Khung bao:  l (trái) = %d, r (phải) = %d, t (trên) = %d, b (dưới) = %d"
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, c-format
 msgid "Pass number %d"
 msgstr "Số lần chạy qua %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, fuzzy, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] "Đã xoá %d điểm ảnh"
 msgstr[1] "Đã xoá %d điểm ảnh"
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr "Việc làm mảnh hoàn tất thành công."
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 "Việc làm mảnh không hoàn tất, cân nhắc việc tăng tham số 'iterations' (số "
@@ -31974,32 +33729,12 @@ msgstr ""
 "Tạo một bản đồ vec-tơ GRASS với các đường bình độ được chỉ định từ một lớp "
 "bản đồ raster."
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "Khoảng tăng dần giữa các cấp bình độ"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "Danh sách các cấp bình độ"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "Danh sách các cấp bình độ"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "Cấp đường bình độ nhỏ nhất"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "Cấp đường bình độ lớn nhất"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "Số điểm nhỏ nhất cho một đường bình độ (0 -> không hạn chế)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32605,55 +34340,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "Không thể tạo và giải hệ phương trình tuyến tính"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "Bản đồ raster để canh thẳng theo"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "Giá trị kiểu bit"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "Giá trị kiểu bit"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "Tập tin chứa các chữ ký khởi tạo"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "'Hạt gieo' để sinh số ngẫu nhiên"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "Đang ghi bản đồ..."
+
+#: ../raster/r.mapcalc/main.c:121
 #, fuzzy, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr "Các cờ -s và -n loại bỏ nhau"
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "raster"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr "(Các) lỗi dấu chấm động xảy ra trong tính toán"
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr "Tràn bộ nhớ xảy ra trong quá trình tính toán"
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, c-format
 msgid "Unknown type: %d"
 msgstr "Kiểu không hiểu: %d"
@@ -32703,80 +34439,80 @@ msgstr "Lỗi không biết đối với hàm '%s'"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "Không thể đọc tập tin màu của bản đồ raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "Không thể tạo btree cho bản đồ raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "Bộ chỉnh bản đồ không hợp lệ: '%c'"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr "Biến '%s' không được định nghĩa"
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, c-format
 msgid "Invalid map <%s>"
 msgstr "Bản đồ không hợp lệ <%s>"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, c-format
 msgid "Undefined function '%s'"
 msgstr "Hàm không được định nghĩa '%s'"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr "Quá ít đối số (%d) cho hàm %s()"
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr "Quá nhiều đối số (%d) cho hàm %s()"
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "Các kiểu đối số không hợp lệ đối với hàm %s()"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr "Lỗi nội tại đối với hàm %s()"
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr "Số lượng đối số không hợp lệ (%d) đối với toán tử '%s'"
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr "Format_expression_prec: kiểu không biết: %d"
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "Không thể đóng bản đồ raster <%s@%s>"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 msgid "Unable to close output raster map"
 msgstr "Không thể đóng bản đồ raster đầu ra"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr "Các hàm đã biết:"
@@ -32962,7 +34698,7 @@ msgstr "Việc quét tới hoàn tất"
 msgid "Reverse sweep complete"
 msgstr "Việc quét lui hoàn tất"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
@@ -32970,15 +34706,15 @@ msgstr ""
 "Không thể đổi thông tin phép chiếu của bản đồ raster đầu vào thành định dạng "
 "GRASS để kiểm tra"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr "Vị trí PROJ_INFO là:\n"
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr "Bộ dữ liệu PROJ_INFO là:\n"
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 msgid ""
 "Consider generating a new location from the input dataset using the "
 "'location' parameter.\n"
@@ -33021,14 +34757,6 @@ msgstr "Tên của nguồn dữ liệu GDAL phi-tập-tin"
 msgid "Band to select (default is all bands)"
 msgstr "Băng cần chọn (mặc định là tất cả các băng)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr "Mô tả dữ liệu"
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -33052,7 +34780,7 @@ msgstr "Định dạng: lớp kiểu đếm nhỏ_nhất lớn_nhất"
 msgid "%s= or %s= must be given"
 msgstr "Hoặc \"-i\" hoặc \"value=\" phải được cung cấp"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "Không thể cập nhật vùng hiện tại"
@@ -33071,7 +34799,7 @@ msgstr "Nhóm ảnh <%s> đã có và sẽ bị ghi đè."
 msgid "Reading band %d of %d..."
 msgstr "Đang đọc bản đồ %s..."
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "Băng được chọn (%d) không tồn tại"
@@ -33140,102 +34868,117 @@ msgstr "Đang tạo các tập tin hỗ trợ cho %s"
 msgid "Link to raster map <%s> created."
 msgstr "Bản đồ raster <%s> được tạo ra."
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr ""
 "Nhập một tập tin raster nhị phân vào thành một lớp bản đồ raster GRASS."
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "Tập tin raster cần nhập"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "Băng cần chọn (mặc định là tất cả các băng)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "Tên của vị trí đích cho ảnh"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr ""
 "Tên của vị trí để đọc phép chiếu dùng cho việc chuyển đổi các điểm khống chế"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "Không thể lấy bằng raster"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "Tên của bản đồ raster độ cao đầu vào [mét]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "Không thể mô tả bảng <%s >"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "Ghi đè phép chiếu (dùng phép chiếu của vị trí)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "Giữ số hiệu băng thay vì sử dụng tên màu của băng"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "In ra các bảng và thoát"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr "Bạn phải chỉ định một vị trí đích khác với vị trí đầu ra"
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 #, fuzzy
 msgid "You need to specify valid location name."
 msgstr "Bạn phải chỉ định bản đồ trên cùng và dưới cùng"
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+#, fuzzy
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr "Số lượng miền phụ phải bằng hoặc lớn hơn 1"
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "Không thể mở nguồn dữ liệu <%s>"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 #, fuzzy
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
@@ -33244,94 +34987,99 @@ msgstr ""
 "Bản đồ raster đầu vào bị xoay - không thể nhập được. Bạn có thể dùng "
 "'gdalwarp' để chuyển bản đồ thành Bắc hướng lên trên."
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "Đang tiến hành nhập..."
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "Không thể mở tập tin chữ ký"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "Không thể lấy bằng raster"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "Đang chép %d GCP trong tập tin điểm cho <%s>"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr "Các GCP có Hệ Tọa độ WKT OpenGIS sau: "
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 msgid "Re-projecting GCPs table:"
 msgstr "Đang quy chiếu lại bảng GCP: "
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "* Phép chiếu đầu vào dùng cho bảng GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "* Phép chiếu đầu ra dùng cho bảng GCP: %s"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "Lỗi trong pj_do_proj (không thể quy chiếu lại GCP %i)"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "Không thể dịch các giá trị chính của phép chiếu trong các GCP đầu vào"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 msgid "Unable to get projection info of target location"
 msgstr "Không thể lấy thông tin phép chiếu của vị trí đích"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 msgid "Unable to get projection units of target location"
 msgstr "Không thể lấy đơn vị phép chiếu của vị trí đích"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 msgid "Unable to get projection key values of target location"
 msgstr "Không thể lấy các giá trị chính của phép chiếu của vị trí đích"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "Đang ghi bản đồ raster <%s>..."
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "Thiết lập bảng màu thang xám cho <%s> (8 bit, miền đầy đủ)"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "Thiết lập bảng màu thang xám cho <%s> (16 bit, miền theo ảnh)"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "Không thể mở tập tin cell [%s]."
@@ -33458,7 +35206,7 @@ msgstr "Đang đọc bản đồ độ cao..."
 msgid "Writing topographic index map..."
 msgstr "Đang ghi bản đồ chỉ mục địa hình..."
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "Số điểm đầu vào: %d."
@@ -33557,12 +35305,12 @@ msgstr "Thể tích hồ là %f mét khối"
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr "Thể tích chỉ đúng nếu độ sâu hồ (bản đồ raster địa hình) tính bằng mét"
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "trình bày chỉ mục"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33571,23 +35319,23 @@ msgstr ""
 "từ một (hoặc nhiều) lớp bản đồ để lấp đầy những vùng \"no data\" (không có "
 "dữ liệu) trong một lớp bản đồ khác."
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "Tên các bản đồ raster được 'vá' với nhau"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "Tên của bản đồ raster kết quả"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "Dùng zero (0) để chỉ sự trong suốt thay vì dùng NULL"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 msgid "The minimum number of input raster maps is two"
 msgstr "Số lượng các bản đồ đầu vào ít nhất là 2"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "Đang tạo các tập tin hỗ trợ cho bản đồ raster <%s>"
@@ -33664,42 +35412,6 @@ msgstr "raster, độ cao"
 msgid "Converts a raster map into a vector map."
 msgstr "Đổi một bản đồ raster thành một lớp bản đồ vec-tơ."
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "Tên của cột thuộc tính dùng làm nhãn"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-msgid "Smooth corners of area features"
-msgstr "Làm trơn các góc của các đối tượng vùng"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr ""
-"Dùng các giá trị raster làm phạm trù thay vì dùng trình tự không trùng (chỉ "
-"áp dụng cho CELL)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "Giá trị dịch chuyển đối với các tọa độ z"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr ""
-"Ghi các giá trị raster thành tọa độ z. Bảng không được tạo ra. Hiện tại chỉ "
-"hỗ trợ cho dữ liệu điểm."
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "Không xây dựng tôpô"
-
 #: ../raster/r.to.vect/main.c:112
 #, fuzzy
 msgid "Recommended for massive point conversion"
@@ -34235,11 +35947,6 @@ msgstr "Kích thước của bộ nhớ đệm kiểu điểm (point cache)"
 msgid "Advanced"
 msgstr "Nâng cao"
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "Bản đồ raster đầu ra"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34546,7 +36253,7 @@ msgstr "Tạo ra (các) bề mặt ngẫu nhiên có sự phụ thuộc vào kh
 msgid "Name for output raster map(s)"
 msgstr "Tên của bản đồ raster đầu ra"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "khoảng cách lớn nhất từ điểm đến mạng lưới"
@@ -34573,7 +36280,7 @@ msgstr "Số lần chạy lặp tối đa"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr ""
@@ -34918,7 +36625,7 @@ msgstr "Tính toán chỉ mục đa dạng ưu thế trên một bản đồ ras
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34944,7 +36651,7 @@ msgstr "trình bày chỉ mục"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 msgid "Configuration file"
 msgstr "Tập tin cấu hình"
@@ -34963,7 +36670,7 @@ msgstr "Tính toán độ lệch chuẩn của diện tích vá trên một bả
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "trình bày chỉ mục"
@@ -35119,7 +36826,7 @@ msgstr "Không thể tạo lseek"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "Tính toán chỉ mục đa dạng Shannon trên một bản đồ raster"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr ""
 "Tính toán chỉ mục thuộc tính điểm ảnh trung bình trên một bản đồ raster"
@@ -35313,11 +37020,11 @@ msgstr "bắc=%f"
 msgid "Could not read maximum distance. Aborting."
 msgstr "Không thể đọc khoảng cách lớn nhất. Đang bỏ."
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "Đang ttính bản đồ %01d trong %01d (góc %lf, bản đồ raster <%s>)"
@@ -35562,12 +37269,52 @@ msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 "Chế độ 2: bức xạ tích hợp hàng ngày đối với một ngày chọn trước trong năm"
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "Hằng số tăng độ khếch tán"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "Đang ghi bản đồ raster <%s>"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "Bản đồ không hợp lệ <%s>"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "Chi phí iso sai: %f"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "Đang ghi bản đồ raster <%s>"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "Sử dụng tọa độ tâm bản đồ: %f %f"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "Đang ghi bản đồ raster <%s>"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 "Nếu bạn dùng -s và không có các raster chân trời, numpartitions phải =1"
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
@@ -35575,11 +37322,11 @@ msgstr ""
 "Nếu bạn muốn tiết kiệm bộ nhớ và dùng các bóng đổ, bạn phải dùng các chân "
 "trời đã được tính toán trước."
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35605,88 +37352,99 @@ msgstr "Giải nén bản đồ"
 msgid "Print compression information and data type of input map(s)"
 msgstr "In ra ở dạng tập lệnh shell"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "Không tìm thấy bản đồ vector <%s>"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr ""
 "[%s] là phép phân loại lại của bản đồ <%s> trong bộ bản đồ <%s> - không thể "
 "giải nén"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr ""
 "[%s] là phép phân loại lại của bản đồ <%s> trong bộ bản đồ <%s> - không thể "
 "nén"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr ""
 "[%s] là phép phân loại lại của bản đồ <%s> trong bộ bản đồ <%s> - không thể "
 "giải nén"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr "XONG: tập tin không nén có ít hơn %lu byte"
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr "XONG: tập tin nén có ít hơn %lu byte"
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+#, fuzzy
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr "XONG: tập tin không nén có nhiều hơn %lu byte"
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+#, fuzzy
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr "XONG: tập tin nén có nhiều hơn %lu byte"
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "vùng"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] đã giải nén"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] đã được nén"
+msgid "Uncompressing <%s>"
+msgstr "Giá trị kiểu bit"
 
-#: ../raster/r.compress/main.c:204
+#: ../raster/r.compress/main.c:248
 #, fuzzy, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
-"\n"
-"
%sNÉN [%s]"
+msgid "Re-compressing <%s>"
+msgstr "Giá trị kiểu bit"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "Đang bỏ <%s>"
+
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr ""
 "[%s] là phép phân loại lại của bản đồ <%s> trong bộ bản đồ <%s> - không thể "
 "giải nén"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr ""
 "[%s] là phép phân loại lại của bản đồ <%s> trong bộ bản đồ <%s> - không thể "
 "nén"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35718,52 +37476,52 @@ msgstr "o_adev: Không có dữ liệu trong mảng"
 msgid "Filter <%s> not found"
 msgstr "Không tìm thấy tập tin <%s>"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "vector, mật độ nhân"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "Lấy mẫu lại các lớp bản đồ raster ra lưới thô hơn bằng cách gộp."
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "Hoặc \"-i\" hoặc \"value=\" phải được cung cấp"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, fuzzy, c-format
 msgid "Too many filters (max: %d)"
 msgstr "** <%s> có quá nhiều chữ ký (giới hạn là 255)"
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "Ít nhất là một tùy chọn từ %s phải được chỉ định"
@@ -36192,21 +37950,26 @@ msgstr[1] "Đang tính các số đo độ trung tâm..."
 msgid "Calculating %s"
 msgstr "Đang tính toán các bản đồ ..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "'layer' phải > 0 đối với 'cats'."
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "Tương quan"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "Tạo các giá trị cell ngẫu nhiên có sự phụ thuộc không gian."
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "Số lần lặp lớn nhất: %d\n"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -36353,7 +38116,7 @@ msgstr "Tắt"
 msgid "Grid line width"
 msgstr "Chiều dày đường vec-tơ"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 msgid "Grid color"
 msgstr "Màu lưới"
 
@@ -36480,14 +38243,10 @@ msgid "Starting and ending coordinates"
 msgstr "Tọa độ bắt đầu và kết thúc"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr "Màu đường"
 
-#: ../display/d.rhumbline/main.c:62
-msgid "Text color or \"none\""
-msgstr "Màu chữ hoặc \"none\""
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, c-format
 msgid "Location is not %s"
@@ -36516,8 +38275,8 @@ msgid "Name of monitor to start"
 msgstr "Tên của tập lệnh đầu ra"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36579,48 +38338,66 @@ msgstr "In ra các tham số kết nối hiện hành và thoát"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "In ra các tham số kết nối hiện hành và thoát"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr "Không chọn tự động khi khởi động"
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "Liệt kê các tập tin vec-tơ trong vị trí đầu vào và thoát"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "Không thể đọc màu"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 #, fuzzy
 msgid "Open output file in update mode"
 msgstr "Mở biểu mẫu ở chế độ chỉnh sửa"
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr "Màn hình <%s> được giải phóng"
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr "Không có màn hình nào được chọn"
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "Hoặc là phải nhập chữ hoặc phải dùng cờ -c"
@@ -36630,64 +38407,74 @@ msgstr "Hoặc là phải nhập chữ hoặc phải dùng cờ -c"
 msgid "Monitor <%s> is not running"
 msgstr "Không tìm thấy tập tin <%s>"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "Không tìm thấy tập tin 3dview <%s>"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "Không thể tạo tập tin <%s>"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "Không tìm thấy tập tin: %s"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "Không thể mở nguồn dữ liệu OGR '%s'"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/stop.c:75
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "Unable to read file <%s>"
+msgstr "Không thể tạo tập tin <%s>"
+
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
+#, fuzzy, c-format
+msgid "File <%s> already exists and will be overwritten"
 msgstr "Tập tin '%s' đã có và sẽ bị ghi đè."
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "Không thể thực thi: %s"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "Bản đồ đầu ra"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "Bản đồ vec-tơ <%s> đã có"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "Không thể tạo tập tin <%s>"
+msgid "Starting monitor <%s>..."
+msgstr "Đang ghi bản đồ vec-tơ <%s>..."
 
-#: ../display/d.mon/start.c:163
-#, fuzzy, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr "Thiết lập tên bản đồ thành <%s>, nó ghi đè <%s>"
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "Không thể đọc tập tin miền"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "Bản đồ vec-tơ <%s> đã có"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "Danh cách các tọa độ điểm"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "Không tìm thấy cột <%s>"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
+msgstr "Không thể mở tập tin cell [%s]."
 
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
-msgstr "Không thể đọc tập tin miền"
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "Tìm thấy %d đường hoặc ranh giới trong bản đồ vec-tơ <%s@%s>"
 
 #: ../display/d.erase/main.c:33
 #, fuzzy
@@ -36801,12 +38588,12 @@ msgstr "%s: giá trị chỉ định không hợp lệ"
 msgid "[%s]: illegal value specified"
 msgstr "%s: giá trị chỉ định không hợp lệ"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "Đang thực hiện chuyển đổi log"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
@@ -36815,16 +38602,34 @@ msgstr ""
 "Chồng các giá trị phạm trù ô trên một lớp bản đồ raster được trình bày trên "
 "màn hình đồ họa."
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "Không đánh chỉ mục các điểm theo ô raster"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr "Lấy màu chữ từ giá trị màu của ô"
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "Các thiết lập"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+msgid "Path to font file"
+msgstr "Đường dẫn đến tập tin phông chữ"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr "Mã hoá chữ (chỉ áp dụng cho các phông TrueType)"
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36832,7 +38637,7 @@ msgstr[0] "Màu lưới"
 msgstr[1] "Màu lưới"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, fuzzy, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36843,7 +38648,7 @@ msgstr ""
 "Thiết lập cửa sổ hiện tại của bạn có thể quá lớn. Các ô được trình bày trên "
 "cửa sổ đồ họa của bạn có thể quá nhỏ để có thể nhìn thấy con số phạm trù ô."
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36926,11 +38731,6 @@ msgstr "Màu để tô vùng"
 msgid "Colorize features according color definition column"
 msgstr "Tên của cột định nghĩa màu (để dùng với cờ -a)"
 
-#: ../display/d.vect/main.c:129
-#, fuzzy
-msgid "Color definition in R:G:B form"
-msgstr "Cột định nghĩa màu không được chỉ định"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr ""
@@ -36940,7 +38740,7 @@ msgstr ""
 msgid "Lines"
 msgstr "Đường"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "Chiều dày đường"
 
@@ -37502,37 +39302,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "Các tọa độ không hợp lệ %s %s"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "Trình bày thông tin về màn hình trình bày kích hoạt"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr "Trình bày hình chữ nhật màn hình (trái, phải, trên, dưới)"
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr "Trình bày kích thước màn hình (rộng, cao)"
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr "Trình bày hình chữ nhật của khung kích hoạt"
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 #, fuzzy
 msgid "Display frame dimensions (width, height)"
 msgstr "Trình bày kích thước màn hình (rộng, cao)"
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 msgid "Display screen rectangle of current region"
 msgstr "Trình bày hình chữ nhật màn hình của vùng hiện tại"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 #, fuzzy
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr "Trình bày tọa độ địa lý và độ phân giải của toàn màn hình"
@@ -37804,14 +39604,6 @@ msgstr "Canh thẳng chữ"
 msgid "Line spacing"
 msgstr "Khoảng cách dòng"
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-msgid "Path to font file"
-msgstr "Đường dẫn đến tập tin phông chữ"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr "Mã hoá chữ (chỉ áp dụng cho các phông TrueType)"
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "Tập tin đầu vào"
@@ -37878,7 +39670,7 @@ msgstr "Kiểu biểu đồ"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 msgid "Chart properties"
 msgstr "Tính chất của biểu đồ"
 
@@ -37916,6 +39708,11 @@ msgstr "Tâm biểu đồ cột quanh một điểm dữ liệu"
 msgid "Maximum value used for bar plot reference"
 msgstr "Giá trị lớn nhất được dùng để tham chiếu vẽ biểu đồ cột"
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "Tạo đầu ra 3D"
+
 #: ../display/d.rgb/main.c:58
 #, fuzzy
 msgid ""
@@ -37925,6 +39722,11 @@ msgstr ""
 "Trình bày ba lớp bản đồ raster do người dùng chỉ định ở dạng các lớp chồng "
 "đỏ, lục và xanh trong khung đồ họa kích hoạt."
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37970,14 +39772,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr "Dùng tập con của miền bản đồ làm chú giải (min,max)"
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "Các thiết lập"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 #, fuzzy
 msgid "Font size"
@@ -38061,11 +39856,12 @@ msgstr "Khoảng màu vượt ra ngoài cận trên của dữ liệu thực"
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr "use=%s ngoài miền [%.3f,%.3f] (mở rộng với miền= ?)"
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr "Không có gì để vẽ! (không có các phạm trù có nhãn?)"
 
@@ -38079,36 +39875,92 @@ msgstr "Trình bày một thước tỷ lệ trên màn hình đồ họa."
 msgid "North arrow style"
 msgstr "Chỉ vẽ mũi tên chỉ hướng bắc"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 #, fuzzy
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 "Tọa độ màn hình cho góc trên trái của nhãn ([0,0] là góc trên trái của khung)"
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr "Màu đường"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 #, fuzzy
 msgid "Draw the symbol without text"
 msgstr "Chỉ vẽ thước tỷ lệ"
@@ -38125,69 +39977,69 @@ msgstr "Không thể đóng bản đồ"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 "Vẽ các mũi tên biểu thị hướng của ô cho một bản đồ raster chứa dữ liệu hướng."
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr "Tên của bản đồ hướng raster cần trình bày"
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr "Kiểu của bản đồ hướng raster hiện có"
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr "Màu để vẽ các mũi tên"
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 #, fuzzy
 msgid "Color for drawing drawing grid"
 msgstr "Màu để vẽ các mũi tên"
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 #, fuzzy
 msgid "Color for drawing null values (X symbol)"
 msgstr "Màu để vẽ chữ X (các giá trị rỗng)"
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 #, fuzzy
 msgid "Color for showing unknown information (? symbol)"
 msgstr "Màu để hiển thị thông tin không biết"
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr "Vẽ mũi tên cách nhau N ô lưới"
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr "Bản đồ raster chứa các giá trị dùng cho chiều dài mũi tên"
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr "Hệ số tỷ lệ cho các mũi tên (bản đồ độ lớn)"
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 msgid "Illegal value for scale factor"
 msgstr "Giá trị hệ số tỷ lệ không hợp lệ"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 msgid "Illegal value for skip factor"
 msgstr "Giá trị dùng cho hệ số bỏ qua không hợp lệ"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr "Độ lớn chỉ được hỗ trợ trong các bản đồ GRASS và bản đồ hướng la bàn."
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 msgid "Scale option requires magnitude_map"
 msgstr "Tùy chọn tỷ lệ đòi hỏi phải có magnitude_map"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 msgid "Problem reading range file"
 msgstr "Trục trặc khi đọc tập tin miền"
 
@@ -38470,55 +40322,41 @@ msgstr ""
 "ma trận tách biệt lớp\n"
 "
\n"
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ hiện tại"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "Không tìm thấy nhóm phụ <%s> thuộc nhóm <%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "Bản đồ raster <%s> không có trong nhóm phụ <%s>"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 msgid "No raster maps found"
 msgstr "Không tìm thấy các bản đồ raster"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "Nhóm phụ <%s> không có bản đồ raster nào"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "Nhóm phụ <%s> chỉ có 1 bản đồ raster"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "Nhóm phụ phải có ít nhất 2 bản đồ raster"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "Không thể mở tập tin chữ ký gieo hạt <%s>"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "Không thể đọc tập tin chữ ký <%s>"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr "<%s> có quá nhiều chữ ký (giới hạn là 255)"
@@ -38595,196 +40433,210 @@ msgstr "Số điểm ảnh tối thiểu trong một lớp"
 msgid "Name for output file containing final report"
 msgstr "Tên tập tin đầu ra chứa báo cáo cuối cùng"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "Không tìm thấy bản đồ raster <%s> trong bộ bản đồ hiện tại"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "Không tìm thấy nhóm phụ <%s> thuộc nhóm <%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "Số nhóm khởi tạo không hợp lệ (%s)"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "(Các) giá trị của các khoảng thu mẫu không hợp lệ (%s)"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "Giá trị các lần lặp không hợp lệ (%s)"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "Giá trị hội tụ không hợp lệ (%s)"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "Giá trị tách không hợp lệ (%s)"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "Giá trị min_size không hợp lệ (%s)"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, c-format
 msgid "Unable to create report file <%s>"
 msgstr "Không thể tạo tập tin báo cáo <%s>"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, fuzzy, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 "#################### GỘP NHÓM (%s) ###################\n"
 "\n"
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "Vị trí: %s\n"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "Bộ bản đồ:   %s\n"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, fuzzy, c-format
 msgid "Group:    %s%s"
 msgstr "Nhóm:    %s\n"
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, fuzzy, c-format
 msgid "Subgroup: %s%s"
 msgstr "Nhóm phụ: %s\n"
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "Tập tin chữ ký kết quả: %s\n"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "Vùng\n"
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, fuzzy, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr "  Bắc: %12.2f  Đông: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, fuzzy, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr "  Nam: %12.2f  Tây: %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, fuzzy, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr "  Độ ph.giải:   %12.2f  Độ ph.giải:  %12.2f\n"
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, fuzzy, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr "  Hàng:  %12d  Cột: %12d  ô: %d\n"
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "Mặt nạ: %s\n"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "Các tham số gộp nhóm\n"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr " Số lớp khởi tạo:    %d"
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr " [từ tập tin chữ ký %s]"
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, fuzzy, c-format
 msgid " Minimum class size:           %d%s"
 msgstr "K.thước lớp nhỏ nhất:           %d\n"
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, fuzzy, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr "Sự phân tách lớp nhỏ nhất:     %f\n"
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, fuzzy, c-format
 msgid " Percent convergence:          %f%s"
 msgstr "Phần trăm hội tụ:          %f\n"
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "Số lần lặp lớn nhất: %d\n"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, fuzzy, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr "Khoảng thu mẫu theo hàng:        %d\n"
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, fuzzy, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr "Khoảng thu mẫu theo cột:        %d\n"
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 msgid "Reading raster maps..."
 msgstr "Đang đọc các bản raster... "
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr "Hết bộ nhớ. Vui lòng chạy lại và chọn kích thước mẫu nhỏ hơn."
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "K.thước mẫu: %d điểm\n"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr "Không đủ điểm mẫu. Vui lòng chạy lại và chọn k.thước mẫu lớn hơn."
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 "Không đủ các điểm dữ liệu khác 0. Kiểm tra vùng hiện tại (và cả mặt nạ)."
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, fuzzy, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 "\n"
 "########## kết quả sau cùng ############\n"
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, fuzzy, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr "%d nhóm (hội tụ=%.1f%%)\n"
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "Không thể tạo tập tin chữ ký <%s> cho nhóm <%s>, nhóm phụ <%s>"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, fuzzy, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
@@ -38792,12 +40644,12 @@ msgstr ""
 "\n"
 "#################### CÁC LỚP####################\n"
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, fuzzy, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr "%d lớp, %.2f%% điểm ổn định\n"
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, fuzzy, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -39113,8 +40965,8 @@ msgid "radiance"
 msgstr "Phương sai "
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "Phép chọn"
@@ -39483,359 +41335,403 @@ msgstr "Nhóm <%s> không tồn tại"
 msgid "group <%s> references the following subgroups\n"
 msgstr "Nhóm phụ <%s> không có bản đồ raster nào"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "Tên của bề mặt ngẫu nhiên cần tạo"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "Phép chọn"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "Bản đồ raster địa hình (DEM)"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "Tên của lớp raster mặt phân dạng"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "Tên tập tin địa điểm đi chuyển (walker site) đầu ra"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "Tên của lớp đầu vào"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "Tên của bản đồ mặt (plane) raster cần tạo."
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "Bản đồ raster hướng đầu ra"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 #, fuzzy
 msgid "Band number out of allowed range [1-2]"
 msgstr "Số gờ nằm ngoài miền"
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 #, fuzzy
 msgid "Band number out of allowed range [1-7]"
 msgstr "Số gờ nằm ngoài miền"
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -40040,7 +41936,7 @@ msgstr "Bản đồ hướng dẫn kiểm chứng ngoài thực tế"
 msgid "Maximum number of sub-signatures in any class"
 msgstr "Số chữ ký phụ lớn nhất trong bất kỳ lớp nào"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "Số lượng chữ ký phụ không hợp lệ (%s)"
@@ -40396,108 +42292,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "Hết bộ nhớ"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "Lỗi khi đọc dữ liệu 'hue' (màu sắc)"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "Lỗi ghi tập tin phân đoạn (segment)"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "Lỗi khi đang ghi dữ liệu"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "Số lượng điểm cần tạo"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "Lệnh không được thực hiện"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "Đang ghi bản đồ..."
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "Đang xử lý các vùng..."
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, fuzzy, c-format
 msgid "Region size is larger than 2: %d"
 msgstr "Kích thước vùng nhỏ hơn minreg, không có gì được trình bày."
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "tập tin dig_att đã có"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "Phép chọn"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "Lỗi khi đọc dữ liệu 'hue' (màu sắc)"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "Lỗi ghi tập tin phân đoạn (segment)"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "Lỗi khi đang ghi dữ liệu"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "Số lượng điểm cần tạo"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "Đang ghi bản đồ..."
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40571,64 +42473,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "Giá trị ngưỡng phải >=0"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "Không thể ghi tập tin phân đoạn cho %s"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "Phương pháp không hợp lệ: %s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "Không tìm thấy bản đồ raster"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "Đang tạo các bản đồ raster %i\n"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "Không tìm thấy bản đồ raster"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "Số bước không hợp lệ: %s"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "Số bước không hợp lệ: %s"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "Lệnh không được thực hiện"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 #, fuzzy
 msgid "Computes evaporative fraction and root zone soil moisture."
@@ -40695,7 +42614,7 @@ msgstr "Tên của bản đồ raster đầu ra (lục)"
 msgid "Name for output raster map (blue)"
 msgstr "Tên của bản đồ raster đầu ra (xanh)"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40747,7 +42666,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "%s - quá nhiều tập tin 'vá'. Chỉ được phép %d tập tin"
@@ -41602,51 +43521,55 @@ msgstr "Không tìm thấy nhóm <%s>"
 msgid "Option '%s' is required for new exposure info"
 msgstr "Vị trí <%s> được tạo ra"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "thất bại"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "Tên bản đồ kết quả"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "Tiêu đề của tập tin raster đầu ra"
@@ -41930,6 +43853,11 @@ msgstr "vector, chuyển đổi"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+#, fuzzy
+msgid "Please run i.target for group "
+msgstr "Vui lòng chạy i.target cho nhóm."
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -42335,13 +44263,48 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ "(backend), nhưng tất cả đều hỗ trợ các định dạng VARCHAR(), INT, DOUBLE "
 #~ "và DATE)"
 
+#~ msgid "<%s> already exists"
+#~ msgstr "<%s> đã có"
+
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "Không thể thiết lập phép chiếu"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] đã được nén"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "Không thể thiết lập phép chiếu"
+#~ msgid ""
+#~ "\n"
+#~ "%sCOMPRESS <%s>"
+#~ msgstr ""
+#~ "\n"
+#~ "
%sNÉN [%s]"
+
+#~ msgid "Overflow occurred in the calculation"
+#~ msgstr "Tràn bộ nhớ xảy ra trong quá trình tính toán"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "Không tìm thấy các điểm dữ liệu"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "Lớp cần thêm cột vào"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "Lớp cần thêm cột vào"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "Lớp số (to)"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "Tọa độ điểm 'gieo'"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr ""
+#~ "In đầu ra tại stdout (đầu ra tiêu chuẩn), không cập nhật bảng thuộc tính"
 
 #, fuzzy
 #~ msgid "time series"
@@ -42387,74 +44350,6 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgid "Number of quartals to use"
 #~ msgstr "Số mẫu ô vuông"
 
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Tên bản đồ raster đầu vào chứa các chi phí va chạm"
-
-#, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "Tên bản đồ raster đầu vào chứa các chi phí va chạm"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Bức xạ khếch tán đầu ra [W.m-2] (chế độ 1) hay tập tin raster bức xạ [Wh."
-#~ "m-2.ngày-1] (chế độ 2) "
-
-#, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Bức xạ phản chiếu mặt đất đầu ra [W.m-2] (chế độ 1) hoặc bản đồ raster "
-#~ "bức xạ [Wh.m-2.ngày-1] (kiểu 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Bức xạ chiếu sáng toàn cục đầu ra [W.m-2] (chế độ 1) hoặc bản đồ raster "
-#~ "bức xạ [Wh.m-2.ngày-1] (chế độ 2)"
-
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Tên của bản đồ raster độ cao [m]"
-
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "Tên của bản đồ raster độ cao đầu vào [mét]"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "Bức xạ phản chiếu mặt đất đầu ra [W.m-2] (chế độ 1) hoặc bản đồ raster "
-#~ "bức xạ [Wh.m-2.ngày-1] (kiểu 2)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "Bức xạ chiếu sáng toàn cục đầu ra [W.m-2] (chế độ 1) hoặc bản đồ raster "
-#~ "bức xạ [Wh.m-2.ngày-1] (chế độ 2)"
-
-#, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "Số lượng các điểm nội suy"
-
-#, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "Ghi đè phép chiếu (dùng phép chiếu của vị trí)"
-
 #~ msgid "Location: %s\n"
 #~ msgstr "Vị trí: %s\n"
 
@@ -42471,24 +44366,28 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ "\n"
 #~ "%d lớp, %.2f%% điểm ổn định\n"
 
+#~ msgid "Subregion"
+#~ msgstr "Vùng con"
+
 #, fuzzy
 #~ msgid "Time increment"
 #~ msgstr "Số gia phạm trù"
 
-#~ msgid "option <%s>: <%s> exists."
-#~ msgstr "tùy chọn <%s>:<%s> đã có."
+#, fuzzy
+#~ msgid "Could not rewind input file"
+#~ msgstr "Không thể mở tập tin đầu ra <%s>."
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "Bản đồ đầu ra"
+#~ msgid "Name for basins raster map"
+#~ msgstr "Tên của bản đồ raster gốc"
 
 #, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "Bản đồ chỉ mục địa hình ln(a/tanB)"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "<%s> đã có trong bộ bản đồ <%s>"
 
 #, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "Tên của bản đồ raster gốc"
+#~ msgid "output map <%s> exists"
+#~ msgstr "Bản đồ đầu ra"
 
 #~ msgid "Page length (default: %d lines)"
 #~ msgstr "Độ dài trang (mặc định: %d dòng)"
@@ -42496,6 +44395,9 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgid "Page width (default: %d characters)"
 #~ msgstr "Độ rộng trang (mặc định: %d ký tự)"
 
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "Ghi đè phép chiếu (dùng phép chiếu của vị trí)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to r.in.gdal to override this check and use the "
@@ -42519,6 +44421,12 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgid "[%s] not found"
 #~ msgstr "Không tìm thấy [%s]"
 
+#~ msgid "option <%s>: <%s> exists."
+#~ msgstr "tùy chọn <%s>:<%s> đã có."
+
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "Ghi đè phép chiếu của dữ liệu (dùng phép chiếu của vị trí)"
+
 #~ msgid ""
 #~ "\n"
 #~ "You can use the -o flag to %s to override this projection check.\n"
@@ -42536,6 +44444,14 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ "nghĩa vị trí do bộ dữ liệu.\n"
 
 #, fuzzy
+#~ msgid "-%c/-%c and %s= are mutually exclusive"
+#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "-%c/-%c and -%c/-%c are mutually exclusive"
+#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+
+#, fuzzy
 #~ msgid "Location name (not location path)"
 #~ msgstr "Tên của VỊ TRÍ mới (không phải đường dẫn vị trí)"
 
@@ -42544,6 +44460,18 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgstr "GISDBASE mới (đường dẫn đầy đủ đến thư mục chứa vị trí mới)"
 
 #, fuzzy
+#~ msgid "Password to set for DB connection"
+#~ msgstr "Không thể thiết lập phép chiếu"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "đổi tất cả các bản đồ vector GRASS kiểu cũ < 5.7 trong bộ bản đồ hiện tại "
+#~ "thành định dạng hiện tại"
+
+#, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Cập nhật mô tả dữ liệu của bản đồ vec-tơ"
 
@@ -42581,165 +44509,68 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgid "No default DB driver defined"
 #~ msgstr "Trình điều khiển mặc định không được thiết lập"
 
-#, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "<%s> đã có trong bộ bản đồ <%s>"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "đổi tất cả các bản đồ vector GRASS kiểu cũ < 5.7 trong bộ bản đồ hiện tại "
-#~ "thành định dạng hiện tại"
+#~ msgid "OGR datasource name"
+#~ msgstr "Tên nguồn dữ liệu OGR"
 
 #, fuzzy
 #~ msgid "No flag given"
 #~ msgstr "Tên bản đồ không được cung cấp"
 
-#~ msgid "Renaming reclass maps"
-#~ msgstr "Đang đặt lại tên các bản đồ phân loại lại"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "Không thể đọc tập tin REF của nhóm phụ <%s> trong nhóm <%s>"
-
-#, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d phạm trù được nạp từ bảng <%s>"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "Hoặc là phải nhập chữ hoặc phải dùng cờ -c"
-
-#, fuzzy
-#~ msgid "Option <%s> and <%s> are mutually exclusive"
-#~ msgstr "Các cờ -s và -n loại bỏ nhau"
-
-#, fuzzy
-#~ msgid "input= and file= are mutually exclusive"
-#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "Vui lòng chỉ định cột z"
-
-#, fuzzy
-#~ msgid "Either -p or output= must be given"
-#~ msgstr "Hoặc là phải nhập chữ hoặc phải dùng cờ -c"
-
-#, fuzzy
-#~ msgid "-p and output= are mutually exclusive"
-#~ msgstr "Các cờ -B và -C loại bỏ nhau. Chỉ chọn một mà thôi."
-
-#, fuzzy
-#~ msgid "file= and expression= are mutually exclusive"
-#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
-
-#, fuzzy
-#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
-#~ msgstr "'weight=' và '-c' loại bỏ lẫn nhau"
-
-#~ msgid "weight= and -c are mutually exclusive"
-#~ msgstr "'weight=' và '-c' loại bỏ lẫn nhau"
-
-#, fuzzy
-#~ msgid "weight= and gauss= are mutually exclusive"
-#~ msgstr "'weight=' và '-c' loại bỏ lẫn nhau"
-
-#, fuzzy
-#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
-#~ msgstr "Các cờ -B và -C loại bỏ nhau. Chỉ chọn một mà thôi."
-
-#, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "Giá trị scalex không hợp lệ"
-
-#, fuzzy
-#~ msgid "output= and outfile= are mutually exclusive"
-#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
-
-#, fuzzy
-#~ msgid "samplingpos= and outfile= are mutually exclusive"
-#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
-
 #, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "Vui lòng chỉ định cột z"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "Không thể tạo tập tin <%s>"
 
 #, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "Vui lòng chỉ định cột z"
+#~ msgid "Starting monitor <%s> with env file '%s'"
+#~ msgstr "Thiết lập tên bản đồ thành <%s>, nó ghi đè <%s>"
 
 #, fuzzy
-#~ msgid "input= and infile= are mutually exclusive"
-#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+#~ msgid "Env file not found"
+#~ msgstr "Không tìm thấy tập tin 3dview <%s>"
 
 #, fuzzy
-#~ msgid "datapos= and infile= are mutually exclusive"
-#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+#~ msgid "PID file not found"
+#~ msgstr "Không tìm thấy tập tin: %s"
 
 #, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "Vui lòng chỉ định cột z"
-
-#, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "Vui lòng chỉ định cột z"
+#~ msgid "Command file not found"
+#~ msgstr "Không tìm thấy cột <%s>"
 
-#, fuzzy
-#~ msgid "Options <%s> and <%s> are mutually exclusive"
-#~ msgstr "Các cờ -s và -n loại bỏ nhau"
-
-#, fuzzy
-#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
-#~ msgstr "Các cờ -s và -n loại bỏ nhau"
-
-#, fuzzy
-#~ msgid "Flags -%c and -%c are mutually exclusive"
-#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "Đang đặt lại tên các bản đồ phân loại lại"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+#~ msgid "Name for output image"
+#~ msgstr "Tên cho tập tin đầu ra"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
-#~ "định!"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "Không thể đọc tập tin REF của nhóm phụ <%s> trong nhóm <%s>"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr ""
-#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
-#~ "định!"
-
-#~ msgid "Either a standard color name or R:G:B triplet"
-#~ msgstr "Hoặc là một màu chuẩn của GRASS, hoặc bộ ba R:G:B"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d phạm trù được nạp từ bảng <%s>"
 
 #~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
+#~ "Correction of the v.lidar.growing output. It is the last of the three "
+#~ "algorithms for LIDAR filtering."
 #~ msgstr ""
-#~ "Trình bày bản đồ chủ đề vec-tơ kiểu vùng trong khung kích hoạt trên màn "
-#~ "hình đồ họa."
+#~ "Hiệu chỉnh của đầu ra v.lidar.growing. Đây là bước cuối cùng trong ba "
+#~ "thuật toán của phép lọc LIDAR."
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "Màu đễ vẽ chữ"
+#~ msgid "Interpolation spline step value in east direction"
+#~ msgstr "Giá trị bước spline nội suy theo hướng đông"
 
-#, fuzzy
-#~ msgid "Color in GRASS format for drawing grid, or \"none\""
-#~ msgstr "Màu dùng để vẽ lưới, hoặc \"none\""
+#~ msgid "Interpolation spline step value in north direction"
+#~ msgstr "Giá trị bước spline nội suy theo hướng bắc"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
-#~ msgstr "Tên của bản đồ raster đầu ra"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgstr "Tên của bản đồ raster đầu ra (đỏ)"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "Sai số rời rạc tính theo đơn vị bản đồ"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "Tạo ra cả khoảng cách PHÁT HIỆN lớn nhất"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -42885,16 +44716,37 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgstr "Dùng cách ghi kiểu toán học trong chú giải"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
-#~ msgstr "Tên của bản đồ raster đầu ra (đỏ)"
+#~ msgid "Name of output basename raster map(s)"
+#~ msgstr "Tên của bản đồ raster đầu ra"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "Tạo ra cả khoảng cách PHÁT HIỆN lớn nhất"
+#~ msgid "Default: input"
+#~ msgstr "Sai số rời rạc tính theo đơn vị bản đồ"
+
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr ""
+#~ "Trình bày bản đồ chủ đề vec-tơ kiểu vùng trong khung kích hoạt trên màn "
+#~ "hình đồ họa."
+
+#~ msgid "Text color or \"none\""
+#~ msgstr "Màu chữ hoặc \"none\""
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "Trình bày"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "Màu đễ vẽ chữ"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid, or \"none\""
+#~ msgstr "Màu dùng để vẽ lưới, hoặc \"none\""
+
+#~ msgid "Either a standard color name or R:G:B triplet"
+#~ msgstr "Hoặc là một màu chuẩn của GRASS, hoặc bộ ba R:G:B"
+
+#, fuzzy
+#~ msgid "flowline"
+#~ msgstr "đường"
 
 #, fuzzy
 #~ msgid ""
@@ -42902,23 +44754,45 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgstr ""
 #~ "Cho phép tạo và/hoặc thay đổi các tập tin hỗ trợ của lớp bản đồ raster."
 
-#, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "Không thể đọc bản đồ vec-tơ"
+#~ msgid "Failed opening input dig file."
+#~ msgstr "Thất bại trong việc mở tập tin dig đầu vào."
 
-#, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "Không thể tạo bảng: %s"
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "Tập tin dig_att không tồn tại."
 
-#, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "Không đủ bộ nhớ"
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "Thất bại trong việc mở tập tin dig_att."
 
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "OLD_T_NEW có mã kiểu tồi [%x]"
+#~ msgid "Attaching categories..."
+#~ msgstr "Đang gắn các phạm trù..."
 
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "NEW_T_OLD có mã kiểu tồi [%x]"
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "Thất bại trong việc gắn một thuộc tính (phạm trù %d) vào một đường."
+
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "Đường %d nhãn: %d khớp với nhãn khác: %d."
+
+#~ msgid "Writing new file..."
+#~ msgstr "Đang ghi tập tin mới..."
+
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "[%d] điểm và đường được ghi vào tập tin đầu ra."
+
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "[%d] trọng tâm được ghi vào tập tin đầu ra."
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Nhập tập tin vec-tơ GRASS kiểu cũ."
+
+#~ msgid "Endian of input vector map"
+#~ msgstr "'Endian' của bản đồ vector đầu vào"
+
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr ""
+#~ "Không tìm thấy các nhãn phạm trù (dig_cats), bảng không được tạo ra."
+
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "Không thể mở tập tin dig_att"
 
 #~ msgid "Reading dig file..."
 #~ msgstr "Đang đọc tập tin dig..."
@@ -43003,189 +44877,41 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgid "[%d] categories read into memory"
 #~ msgstr "[%d] phạm trù được đọc vào bộ nhớ"
 
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr ""
-#~ "Không tìm thấy các nhãn phạm trù (dig_cats), bảng không được tạo ra."
-
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "Không thể mở tập tin dig_att"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "Thất bại trong việc mở tập tin dig đầu vào."
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "Tập tin dig_att không tồn tại."
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "Thất bại trong việc mở tập tin dig_att."
-
-#~ msgid "Attaching categories..."
-#~ msgstr "Đang gắn các phạm trù..."
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "Thất bại trong việc gắn một thuộc tính (phạm trù %d) vào một đường."
-
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "Đường %d nhãn: %d khớp với nhãn khác: %d."
-
-#~ msgid "Writing new file..."
-#~ msgstr "Đang ghi tập tin mới..."
-
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "[%d] điểm và đường được ghi vào tập tin đầu ra."
-
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "[%d] trọng tâm được ghi vào tập tin đầu ra."
-
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Nhập tập tin vec-tơ GRASS kiểu cũ."
-
-#~ msgid "Endian of input vector map"
-#~ msgstr "'Endian' của bản đồ vector đầu vào"
-
-#~ msgid "Interpolation spline step value in east direction"
-#~ msgstr "Giá trị bước spline nội suy theo hướng đông"
-
-#~ msgid "Interpolation spline step value in north direction"
-#~ msgstr "Giá trị bước spline nội suy theo hướng bắc"
-
-#~ msgid "Unknown raster map type"
-#~ msgstr "Không hiểu kiểu bản đồ raster"
-
-#~ msgid "Cache size (MiB)"
-#~ msgstr "Kích thước đệm cache (MiB)"
-
-#~ msgid "Can't call bad function"
-#~ msgstr "Không thể gọi một hàm tồi"
-
-#~ msgid "Bad arguments to pointfunc %s"
-#~ msgstr "Các đối số tồi cho hàm điểm (pointfunc) %s"
-
-#~ msgid "No function defined to perform ``point %c point''"
-#~ msgstr "Không có hàm nào được định nghĩa để thực hiện ``điểm %c điểm''"
-
-#~ msgid "Performing 1 arg map function on map %s"
-#~ msgstr "Đang thực hiện hàm bản đồ đối số 1 trên bản đồ %s"
-
-#~ msgid "Performing 2 arg map function on maps %s and %s"
-#~ msgstr "Đang thực hiện hàm bản đồ đối số 2 trên bản đồ %s và %s"
-
-#~ msgid "Performing map %s + %s"
-#~ msgstr "Đang thực hiện bản đồ %s + %s"
-
-#~ msgid "Can't call bad map-function"
-#~ msgstr "Không thể gọi một hàm bản đồ tồi"
-
-#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
-#~ msgstr "Các đối số tồi đối với hàm bản đồ %s (mapfunc) (argc = %d)"
-
-#~ msgid "No function defined to perform map %c map"
-#~ msgstr "Không có hàm nào được định nghĩa để thực hiện bản_đồ %c bản_đồ"
-
-#~ msgid "Can't call bad num-function"
-#~ msgstr "Không thể gọi hàm num tồi"
-
-#~ msgid "Bad arguments to numfunc %s"
-#~ msgstr "Các đối số tồi cho hàm num (numfunc) %s"
-
-#~ msgid "No function defined to perform ``number %c number''"
-#~ msgstr "Không có hàm nào được định nghĩa để thực hiện ``số %c số''"
-
-#~ msgid "Can't call bad any-function"
-#~ msgstr "Không thể gọi một hàm bất kỳ tồi"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "OLD_T_NEW có mã kiểu tồi [%x]"
 
-#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
-#~ msgstr "Các đối số tồi cho hàm bất kỳ anyfunc %s (argc = %d)"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "NEW_T_OLD có mã kiểu tồi [%x]"
 
 #~ msgid "One or more coordinates"
 #~ msgstr "Một hoặc nhiều tọa độ"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "Không đủ bộ nhớ cho adx"
-
-#~ msgid "Not enough memory for ady"
-#~ msgstr "Không đủ bộ nhớ cho ady"
-
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "Không đủ bộ nhớ cho adxx"
-
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "Không đủ bộ nhớ cho adyy"
-
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "Không đủ bộ nhớ cho adxy"
-
-#~ msgid "Cannot create quaddata"
-#~ msgstr "Không thể tạo quaddata."
-
-#~ msgid "Cannot create quadfunc"
-#~ msgstr "Không thể tạo quadfunc."
-
-#~ msgid "Cannot create tree"
-#~ msgstr "Không thể tạo cây (tree)."
-
-#~ msgid "Cannot create tree info"
-#~ msgstr "Không thể tạo thông tin cây (tree info)."
-
-#~ msgid "sites"
-#~ msgstr "địa điểm"
-
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Đổi một tập tin site_lists của GRASS thành một bản đồ  vec-tơ."
-
-#~ msgid "Site file <%s> not found"
-#~ msgstr "Không tìm thấy tập tin địa điểm <%s>"
-
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "Không thể đoán định dạng site_list"
-
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "Thất bại trong việc cấp phát cấu trúc địa điểm"
-
-#~ msgid "Input format: dimension: %d strings: %d FP: %d"
-#~ msgstr "Kích thước định dạng đầu vào %d chuỗi: %d FP: %d"
+#~ msgid "Name of elevation map"
+#~ msgstr "Tên của bản đồ độ cao"
 
-#~ msgid ""
-#~ "Floating point category values, using sequential integer for category"
-#~ msgstr ""
-#~ "Các giá trị phạm trù kiểu dấu chấm động, dùng số nguyên liên tục cho phạm "
-#~ "trù"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "Chuỗi ký tự đại diện cho ô không có giá trị"
 
-#~ msgid "No category values, using sequential integer for category"
+#, fuzzy
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
 #~ msgstr ""
-#~ "Không có các giá trị phạm trù , dùng số nguyên liên tục cho phạm trù"
-
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr "Đang chuyển các địa điểm vào bản đồ điểm vec-tơ..."
-
-#~ msgid "%d sites written."
-#~ msgstr "%d địa điểm được ghi."
-
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "Tên của lớp dùng làm INTENSITY (cường độ)"
+#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
+#~ "định!"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "Tên của lớp dùng làm SATURATION (độ bão hòa)"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "Hệ mét không biết: [%s]."
 
-#, fuzzy
-#~ msgid ""
-#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
-#~ "vector points map."
-#~ msgstr ""
-#~ "Nhập các tập tin quốc gia US-NGA GEOnet Names Server (GNS) vào một bản đồ "
-#~ "vector GRASS kiểu điểm"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "Lỗi khi đang đọc tập tin phạm trù của <%s>"
 
-#, fuzzy
-#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
-#~ msgstr "Tập tin GNS không nén từ NGA (với đuôi mở rộng .txt)"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "Lỗi khi đang đọc tập tin màu của <%s>"
 
-#, fuzzy
-#~ msgid "Create raster map from result (optional)"
-#~ msgstr "Tên của các bản đồ raster dùng cho độ cao"
+#~ msgid "String representing no data cell value"
+#~ msgstr "Chuỗi biểu thị cho các giá trị ô không có dữ liệu"
 
-#, fuzzy
-#~ msgid "Table file to be exported or DB connection string"
-#~ msgstr "Tập tin raster ascii cần nhập"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Tiện ích nội suy bề mặt dùng cho bản đồ raster."
 
 #, fuzzy
 #~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
@@ -43204,15 +44930,18 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ "với một lớp bản đồ raster độ cao đầu vào chứa các giá trị ô biểu thị chi "
 #~ "phí va chạm."
 
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "Tên của lớp dùng làm INTENSITY (cường độ)"
+
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "Tên của lớp dùng làm SATURATION (độ bão hòa)"
+
 #~ msgid "Name of output layer to be used for GREEN"
 #~ msgstr "Tên của lớp đầu ra dùng làm LỤC"
 
 #~ msgid "Name of output layer to be used for BLUE"
 #~ msgstr "Tên của lớp đầu ra dùng làm XANH"
 
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Tiện ích nội suy bề mặt dùng cho bản đồ raster."
-
 #~ msgid "Surface generation program."
 #~ msgstr "Chương trình tạo bề mặt."
 
@@ -43234,53 +44963,15 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgstr[0] "Đang nội suy bản đồ raster <%s> ... %d hàng ... "
 #~ msgstr[1] "Đang nội suy bản đồ raster <%s> ... %d hàng ... "
 
-#~ msgid "lat/lon projection not supported at this time."
-#~ msgstr "Hiện nay phép chiếu vĩ/kinh độ không được hỗ trợ."
-
-#, fuzzy
-#~ msgid "allocation"
-#~ msgstr "Vị trí: %s\n"
-
-#, fuzzy
-#~ msgid "networking"
-#~ msgstr "vector, mạng lưới"
-
-#~ msgid "Name of elevation map"
-#~ msgstr "Tên của bản đồ độ cao"
-
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "Chuỗi ký tự đại diện cho ô không có giá trị"
-
-#, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
-#~ "định!"
-
-#, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr ""
-#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
-#~ "định!"
-
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "Hệ mét không biết: [%s]."
-
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "Lỗi khi đang đọc tập tin phạm trù của <%s>"
-
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "Lỗi khi đang đọc tập tin màu của <%s>"
-
-#~ msgid "String representing no data cell value"
-#~ msgstr "Chuỗi biểu thị cho các giá trị ô không có dữ liệu"
-
 #~ msgid "Output z-file (elevation) map"
 #~ msgstr "Bản đồ tập tin z đầu ra (độ cao)"
 
 #~ msgid "Output aspect map (or fy)"
 #~ msgstr "Bản đồ hướng (hay fy) đầu ra"
 
+#~ msgid "lat/lon projection not supported at this time."
+#~ msgstr "Hiện nay phép chiếu vĩ/kinh độ không được hỗ trợ."
+
 #~ msgid "Prefix for output raster map(s)"
 #~ msgstr "Tiền tố dùng cho (các) bản đồ raster đầu ra"
 
@@ -43311,14 +45002,24 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgstr "Chặn cảnh báo"
 
 #, fuzzy
-#~ msgid "High resolution panchromatic image"
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
 #~ msgstr ""
-#~ "Chuyển đổi Brovey để nhập các kênh đa phổ và toàn sắc độ phân giải cao "
-#~ "với nhau"
+#~ "Nhập các tập tin quốc gia US-NGA GEOnet Names Server (GNS) vào một bản đồ "
+#~ "vector GRASS kiểu điểm"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "Tương quan"
+#~ msgid "Name of input uncompressed GNS file from NGA (with .txt extension)"
+#~ msgstr "Tập tin GNS không nén từ NGA (với đuôi mở rộng .txt)"
+
+#, fuzzy
+#~ msgid "Create raster map from result (optional)"
+#~ msgstr "Tên của các bản đồ raster dùng cho độ cao"
+
+#, fuzzy
+#~ msgid "Table file to be exported or DB connection string"
+#~ msgstr "Tập tin raster ascii cần nhập"
 
 #, fuzzy
 #~ msgid "Name of input raster map(s)"
@@ -43343,6 +45044,154 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgstr "Bản đồ raster đầu ra (mặc định: tiêu đề đầu vào)"
 
 #, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Tính toán thống kê một biến từ các ô không rỗng của một bản đồ raster."
+
+#~ msgid "Data to be classified: column name or expression"
+#~ msgstr "Dữ liệu cần phân loại: tên cột hoặc biểu thức"
+
+#, fuzzy
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "Màu dùng để vẽ lưới, hoặc \"none\""
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for drawing null values (X symbol) or \"none\" not "
+#~ "drawing"
+#~ msgstr "Màu dùng để vẽ lưới, hoặc \"none\""
+
+#, fuzzy
+#~ msgid "Color for showing unknown information or \"none\""
+#~ msgstr "Màu để hiển thị thông tin không biết"
+
+#, fuzzy
+#~ msgid ""
+#~ "Color in GRASS format for showing unknown information (? symbol) or \"none"
+#~ "\" not showing"
+#~ msgstr "Màu dùng để vẽ lưới, hoặc \"none\""
+
+#~ msgid "Create grid of points instead of areas and centroids"
+#~ msgstr "Tạo một lưới gồm các điểm thay vì các vùng và các trọng tâm"
+
+#, fuzzy
+#~ msgid "Create grid as lines, instead of areas"
+#~ msgstr "Tạo một lưới gồm các điểm thay vì các vùng và các trọng tâm"
+
+#~ msgid "Invalid distance"
+#~ msgstr "Khoảng cách không hợp lệ"
+
+#~ msgid "Layer number"
+#~ msgstr "Lớp số"
+
+#, fuzzy
+#~ msgid "allocation"
+#~ msgstr "Vị trí: %s\n"
+
+#, fuzzy
+#~ msgid "networking"
+#~ msgstr "vector, mạng lưới"
+
+#, fuzzy
+#~ msgid "input= and file= are mutually exclusive"
+#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "Please specify input= or file="
+#~ msgstr "Vui lòng chỉ định cột z"
+
+#, fuzzy
+#~ msgid "Options <%s> and <%s> are mutually exclusive"
+#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "Options <%s>, <%s>, and <%s> are mutually exclusive"
+#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "-t, -r, rules=, basemap= and fprange= are mutually exclusive"
+#~ msgstr "Các cờ -B và -C loại bỏ nhau. Chỉ chọn một mà thôi."
+
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "Giá trị scalex không hợp lệ"
+
+#, fuzzy
+#~ msgid "file= and expression= are mutually exclusive"
+#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "Either -p or output= must be given"
+#~ msgstr "Hoặc là phải nhập chữ hoặc phải dùng cờ -c"
+
+#, fuzzy
+#~ msgid "-p and output= are mutually exclusive"
+#~ msgstr "Các cờ -B và -C loại bỏ nhau. Chỉ chọn một mà thôi."
+
+#, fuzzy
+#~ msgid "output= and outfile= are mutually exclusive"
+#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "samplingpos= and outfile= are mutually exclusive"
+#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "Vui lòng chỉ định cột z"
+
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "Vui lòng chỉ định cột z"
+
+#, fuzzy
+#~ msgid "datapos= and infile= are mutually exclusive"
+#~ msgstr "Hai tham số input= và source= loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "Please specify input= or infile="
+#~ msgstr "Vui lòng chỉ định cột z"
+
+#, fuzzy
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "Vui lòng chỉ định cột z"
+
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "Trình bày"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "Hoặc là phải nhập chữ hoặc phải dùng cờ -c"
+
+#, fuzzy
+#~ msgid "Option <%s> and <%s> are mutually exclusive"
+#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "radius= and x_radius=/y_radius= are mutually exclusive"
+#~ msgstr "'weight=' và '-c' loại bỏ lẫn nhau"
+
+#~ msgid "weight= and -c are mutually exclusive"
+#~ msgstr "'weight=' và '-c' loại bỏ lẫn nhau"
+
+#, fuzzy
+#~ msgid "weight= and gauss= are mutually exclusive"
+#~ msgstr "'weight=' và '-c' loại bỏ lẫn nhau"
+
+#, fuzzy
+#~ msgid "High resolution panchromatic image"
+#~ msgstr ""
+#~ "Chuyển đổi Brovey để nhập các kênh đa phổ và toàn sắc độ phân giải cao "
+#~ "với nhau"
+
+#, fuzzy
+#~ msgid "High Pass Filter Options"
+#~ msgstr "Tương quan"
+
+#, fuzzy
 #~ msgid "Name of elevation raster map"
 #~ msgstr "Tên bản đồ raster đầu vào"
 
@@ -43358,31 +45207,145 @@ msgstr "Tên của bản đồ raster đầu ra (độ bão hoà)"
 #~ msgid "No maps output"
 #~ msgstr "Không có bản đồ đầu ra"
 
+#~ msgid "Color for drawing grid or \"none\""
+#~ msgstr "Màu để vẽ lưới hoặc \"none\""
+
+#~ msgid "Gather the histogram quietly"
+#~ msgstr "Thu thập thông tin vẽ biểu đồ tần số một cách im lặng"
+
+#~ msgid "Not enough memory for adx"
+#~ msgstr "Không đủ bộ nhớ cho adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "Không đủ bộ nhớ cho ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "Không đủ bộ nhớ cho adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "Không đủ bộ nhớ cho adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "Không đủ bộ nhớ cho adxy"
+
+#~ msgid "Cannot create quaddata"
+#~ msgstr "Không thể tạo quaddata."
+
+#~ msgid "Cannot create quadfunc"
+#~ msgstr "Không thể tạo quadfunc."
+
+#~ msgid "Cannot create tree"
+#~ msgstr "Không thể tạo cây (tree)."
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "Không thể tạo thông tin cây (tree info)."
+
+#, fuzzy
+#~ msgid "Unable To create table: %s"
+#~ msgstr "Không thể tạo bảng: %s"
+
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "Không đủ bộ nhớ"
+
+#, fuzzy
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "Các cờ -s và -n loại bỏ nhau"
+
+#, fuzzy
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr ""
+#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
+#~ "định!"
+
 #, fuzzy
+#~ msgid "Option <%s> must be specified"
+#~ msgstr ""
+#~ "Một trong các tùy chọn \"color\", \"rast\" OR \"rules\" PHẢI được chỉ "
+#~ "định!"
+
+#~ msgid "sites"
+#~ msgstr "địa điểm"
+
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "Đổi một tập tin site_lists của GRASS thành một bản đồ  vec-tơ."
+
+#~ msgid "Site file <%s> not found"
+#~ msgstr "Không tìm thấy tập tin địa điểm <%s>"
+
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "Không thể đoán định dạng site_list"
+
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "Thất bại trong việc cấp phát cấu trúc địa điểm"
+
+#~ msgid "Input format: dimension: %d strings: %d FP: %d"
+#~ msgstr "Kích thước định dạng đầu vào %d chuỗi: %d FP: %d"
+
 #~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
+#~ "Floating point category values, using sequential integer for category"
 #~ msgstr ""
-#~ "Tính toán thống kê một biến từ các ô không rỗng của một bản đồ raster."
+#~ "Các giá trị phạm trù kiểu dấu chấm động, dùng số nguyên liên tục cho phạm "
+#~ "trù"
 
-#~ msgid "Data to be classified: column name or expression"
-#~ msgstr "Dữ liệu cần phân loại: tên cột hoặc biểu thức"
+#~ msgid "No category values, using sequential integer for category"
+#~ msgstr ""
+#~ "Không có các giá trị phạm trù , dùng số nguyên liên tục cho phạm trù"
 
-#~ msgid "Color for drawing grid or \"none\""
-#~ msgstr "Màu để vẽ lưới hoặc \"none\""
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr "Đang chuyển các địa điểm vào bản đồ điểm vec-tơ..."
 
-#~ msgid "Gather the histogram quietly"
-#~ msgstr "Thu thập thông tin vẽ biểu đồ tần số một cách im lặng"
+#~ msgid "%d sites written."
+#~ msgstr "%d địa điểm được ghi."
 
-#~ msgid "Create grid of points instead of areas and centroids"
-#~ msgstr "Tạo một lưới gồm các điểm thay vì các vùng và các trọng tâm"
+#~ msgid "Performing 1 arg map function on map %s"
+#~ msgstr "Đang thực hiện hàm bản đồ đối số 1 trên bản đồ %s"
+
+#~ msgid "Performing 2 arg map function on maps %s and %s"
+#~ msgstr "Đang thực hiện hàm bản đồ đối số 2 trên bản đồ %s và %s"
+
+#~ msgid "Performing map %s + %s"
+#~ msgstr "Đang thực hiện bản đồ %s + %s"
+
+#~ msgid "Can't call bad map-function"
+#~ msgstr "Không thể gọi một hàm bản đồ tồi"
+
+#~ msgid "Bad arguments to mapfunc %s (argc = %d)"
+#~ msgstr "Các đối số tồi đối với hàm bản đồ %s (mapfunc) (argc = %d)"
+
+#~ msgid "No function defined to perform map %c map"
+#~ msgstr "Không có hàm nào được định nghĩa để thực hiện bản_đồ %c bản_đồ"
+
+#~ msgid "Can't call bad num-function"
+#~ msgstr "Không thể gọi hàm num tồi"
+
+#~ msgid "Bad arguments to numfunc %s"
+#~ msgstr "Các đối số tồi cho hàm num (numfunc) %s"
+
+#~ msgid "No function defined to perform ``number %c number''"
+#~ msgstr "Không có hàm nào được định nghĩa để thực hiện ``số %c số''"
+
+#~ msgid "No function defined to perform ``point %c point''"
+#~ msgstr "Không có hàm nào được định nghĩa để thực hiện ``điểm %c điểm''"
+
+#~ msgid "Can't call bad any-function"
+#~ msgstr "Không thể gọi một hàm bất kỳ tồi"
+
+#~ msgid "Bad arguments to anyfunc %s (argc = %d)"
+#~ msgstr "Các đối số tồi cho hàm bất kỳ anyfunc %s (argc = %d)"
+
+#~ msgid "Can't call bad function"
+#~ msgstr "Không thể gọi một hàm tồi"
+
+#~ msgid "Bad arguments to pointfunc %s"
+#~ msgstr "Các đối số tồi cho hàm điểm (pointfunc) %s"
 
 #, fuzzy
-#~ msgid "Create grid as lines, instead of areas"
-#~ msgstr "Tạo một lưới gồm các điểm thay vì các vùng và các trọng tâm"
+#~ msgid "Unable to create vector map"
+#~ msgstr "Không thể đọc bản đồ vec-tơ"
 
-#~ msgid "Invalid distance"
-#~ msgstr "Khoảng cách không hợp lệ"
+#~ msgid "Cache size (MiB)"
+#~ msgstr "Kích thước đệm cache (MiB)"
 
-#~ msgid "Layer number"
-#~ msgstr "Lớp số"
+#~ msgid "Unknown raster map type"
+#~ msgstr "Không hiểu kiểu bản đồ raster"
diff --git a/locale/po/grassmods_zh.po b/locale/po/grassmods_zh.po
index 805512f..90e367e 100644
--- a/locale/po/grassmods_zh.po
+++ b/locale/po/grassmods_zh.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grassmods_zh\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-03-07 10:48-0600\n"
 "Last-Translator: Shulin Yang <shulin.yang.9 at gmail.com>\n"
 "Language-Team: Simplified Chinese <translations at grass.itc.it>\n"
@@ -245,6 +245,7 @@ msgstr "未找到栅格图<%s>"
 #: ../db/drivers/ogr/execute.c:69 ../vector/v.colors/scan_attr.c:35
 #: ../vector/v.in.db/main.c:187 ../vector/v.to.3d/trans3.c:65
 #: ../vector/v.to.3d/trans2.c:63 ../vector/v.vect.stats/main.c:395
+#: ../vector/v.out.lidar/main.c:118 ../vector/v.out.lidar/main.c:155
 #: ../vector/v.colors.out/make_colors.c:42 ../vector/v.distance/main.c:477
 #: ../vector/v.distance/main.c:518 ../vector/v.reclass/main.c:145
 #: ../vector/v.db.connect/main.c:289 ../vector/v.transform/trans_digit.c:101
@@ -479,6 +480,11 @@ msgstr ""
 msgid "Busy SQLITE db, already waiting for %d seconds..."
 msgstr ""
 
+#: ../db/drivers/sqlite/table.c:37
+#, fuzzy
+msgid "Error in sqlite3_exec():"
+msgstr "关闭 VTK-ASCII 文件时发生错误"
+
 #: ../db/drivers/sqlite/fetch.c:72
 #, fuzzy
 msgid "Unable to fetch:"
@@ -618,29 +624,29 @@ msgstr "无法创建栅格地图 %s"
 msgid "Unable to open database:"
 msgstr "无法打开数据库 <%s>"
 
-#: ../db/drivers/sqlite/db.c:131
+#: ../db/drivers/sqlite/db.c:134
 #, fuzzy
 msgid "SQLite database connection is still busy"
 msgstr "数据库连接未定义"
 
-#: ../db/drivers/sqlite/db.c:152
+#: ../db/drivers/sqlite/db.c:155
 #, fuzzy, c-format
 msgid "Database <%s> already exists"
 msgstr "dig_att文件不存在。"
 
-#: ../db/drivers/sqlite/db.c:159
+#: ../db/drivers/sqlite/db.c:162
 #, fuzzy
 msgid "Unable to create database:"
 msgstr "无法创建文件 [%s]"
 
-#: ../db/drivers/sqlite/db.c:183
+#: ../db/drivers/sqlite/db.c:186
 #, fuzzy, c-format
 msgid "Database <%s> not found"
 msgstr "未找到栅格图<%s>"
 
 #: ../db/drivers/postgres/index.c:59 ../vector/v.extract/copy_tab.c:124
-#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:256
-#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:311
+#: ../vector/v.overlay/main.c:585 ../vector/v.random/main.c:257
+#: ../vector/v.select/copy_tabs.c:82 ../vector/v.patch/main.c:326
 #: ../vector/v.mkgrid/main.c:345 ../vector/v.mkgrid/main.c:403
 #: ../raster/r.random/random.c:253 ../raster/r.to.vect/main.c:226
 #, fuzzy
@@ -652,6 +658,11 @@ msgstr "无法创建文件 [%s]"
 msgid "Unable grant on table:"
 msgstr "无法打开输出文件 <%s>"
 
+#: ../db/drivers/postgres/table.c:37
+#, fuzzy
+msgid "Unable to execute():"
+msgstr "无法从表中选取数据"
+
 #: ../db/drivers/postgres/fetch.c:166
 msgid "Unable to scan timestamp (no idea how to process time zone):"
 msgstr ""
@@ -776,7 +787,7 @@ msgstr "无法打开数据库 <%s>"
 #: ../db/db.columns/main.c:99 ../db/db.select/main.c:265
 #: ../db/db.execute/main.c:125 ../vector/v.in.db/main.c:54
 #: ../vector/v.vect.stats/main.c:130 ../vector/v.distance/main.c:92
-#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:55
+#: ../vector/v.db.connect/main.c:54 ../vector/v.db.select/main.c:56
 #: ../vector/v.to.db/main.c:38 ../temporal/t.connect/main.c:34
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:5
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:4
@@ -854,17 +865,17 @@ msgstr "表名称"
 #: ../raster/r.resamp.rst/main.c:240 ../display/d.mon/main.c:70
 #: ../display/d.mon/main.c:78 ../display/d.mon/main.c:86
 #: ../display/d.mon/main.c:92 ../display/d.mon/main.c:98
-#: ../display/d.mon/main.c:128 ../display/d.mon/main.c:134
-#: ../imagery/i.cluster/main.c:103 ../imagery/i.cluster/main.c:120
-#: ../imagery/i.cluster/main.c:128 ../imagery/i.cluster/main.c:137
-#: ../imagery/i.cluster/main.c:145 ../imagery/i.cluster/main.c:153
-#: ../imagery/i.landsat.toar/main.c:160 ../imagery/i.landsat.toar/main.c:169
-#: ../imagery/i.landsat.toar/main.c:179 ../imagery/i.landsat.toar/main.c:188
-#: ../imagery/i.landsat.toar/main.c:209 ../imagery/i.segment/parse_args.c:42
-#: ../imagery/i.segment/parse_args.c:51 ../imagery/i.segment/parse_args.c:62
-#: ../imagery/i.segment/parse_args.c:73 ../imagery/i.segment/parse_args.c:83
-#: ../imagery/i.segment/parse_args.c:102 ../imagery/i.segment/parse_args.c:129
-#: ../imagery/i.segment/parse_args.c:135
+#: ../display/d.mon/main.c:133 ../display/d.mon/main.c:139
+#: ../display/d.mon/main.c:145 ../imagery/i.cluster/main.c:103
+#: ../imagery/i.cluster/main.c:120 ../imagery/i.cluster/main.c:128
+#: ../imagery/i.cluster/main.c:137 ../imagery/i.cluster/main.c:145
+#: ../imagery/i.cluster/main.c:153 ../imagery/i.landsat.toar/main.c:160
+#: ../imagery/i.landsat.toar/main.c:169 ../imagery/i.landsat.toar/main.c:179
+#: ../imagery/i.landsat.toar/main.c:188 ../imagery/i.landsat.toar/main.c:209
+#: ../imagery/i.segment/parse_args.c:42 ../imagery/i.segment/parse_args.c:51
+#: ../imagery/i.segment/parse_args.c:62 ../imagery/i.segment/parse_args.c:73
+#: ../imagery/i.segment/parse_args.c:83 ../imagery/i.segment/parse_args.c:102
+#: ../imagery/i.segment/parse_args.c:129 ../imagery/i.segment/parse_args.c:135
 msgid "Settings"
 msgstr ""
 
@@ -899,39 +910,39 @@ msgstr "打印当前的连接参数并退出"
 #: ../vector/v.info/parse.c:41 ../vector/v.info/parse.c:46
 #: ../vector/v.what/main.c:89 ../vector/v.what/main.c:94
 #: ../vector/v.what/main.c:99 ../vector/v.what/main.c:104
-#: ../vector/v.external/args.c:41 ../vector/v.external/args.c:47
-#: ../vector/v.external/args.c:55 ../vector/v.db.connect/main.c:84
+#: ../vector/v.external/args.c:43 ../vector/v.external/args.c:49
+#: ../vector/v.external/args.c:57 ../vector/v.db.connect/main.c:84
 #: ../vector/v.db.connect/main.c:89 ../vector/v.db.connect/main.c:96
-#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:252
-#: ../vector/v.in.ogr/main.c:258 ../vector/v.to.db/parse.c:116
+#: ../vector/v.db.connect/main.c:103 ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:263 ../vector/v.to.db/parse.c:116
 #: ../vector/v.to.db/parse.c:121 ../vector/v.to.db/parse.c:127
 #: ../vector/v.to.db/parse.c:133 ../temporal/t.connect/main.c:43
-#: ../locale/scriptstrings/g.extension_to_translate.c:13
-#: ../locale/scriptstrings/g.extension_to_translate.c:15
-#: ../locale/scriptstrings/g.extension_to_translate.c:17
-#: ../locale/scriptstrings/g.extension_to_translate.c:19
+#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:22
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:18
 #: ../general/g.mapsets/main.c:87 ../general/g.mapsets/main.c:92
 #: ../general/g.mapsets/main.c:98 ../general/g.proj/main.c:80
 #: ../general/g.proj/main.c:86 ../general/g.proj/main.c:92
 #: ../general/g.proj/main.c:98 ../general/g.proj/main.c:104
 #: ../general/g.proj/main.c:115 ../general/g.proj/main.c:120
-#: ../general/g.list/main.c:128 ../general/g.list/main.c:139
-#: ../general/g.list/main.c:161 ../general/g.list/main.c:166
-#: ../general/g.list/main.c:171 ../general/g.list/main.c:176
+#: ../general/g.list/main.c:104 ../general/g.list/main.c:115
+#: ../general/g.list/main.c:137 ../general/g.list/main.c:142
+#: ../general/g.list/main.c:147 ../general/g.list/main.c:152
 #: ../general/g.region/main.c:84 ../general/g.region/main.c:90
 #: ../general/g.region/main.c:95 ../general/g.region/main.c:101
 #: ../general/g.region/main.c:107 ../general/g.region/main.c:113
 #: ../general/g.region/main.c:119 ../general/g.region/main.c:127
 #: ../general/g.region/main.c:132 ../general/g.region/main.c:138
 #: ../general/g.region/main.c:143 ../general/g.mapset/main.c:76
-#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:203
-#: ../raster/r.proj/main.c:213 ../raster/r.proj/main.c:219
+#: ../general/g.mapset/main.c:82 ../raster/r.proj/main.c:204
+#: ../raster/r.proj/main.c:214 ../raster/r.proj/main.c:220
 #: ../raster/r.out.gdal/main.c:142 ../raster/r.colors/edit_colors.c:128
 #: ../raster/r.external.out/main.c:272 ../raster/r.external.out/main.c:283
 #: ../raster/r.sunmask/main.c:232 ../raster/r.sunmask/main.c:238
 #: ../raster/r.external/main.c:96 ../raster/r.external/main.c:124
-#: ../raster/r.in.gdal/main.c:178 ../raster/r.what/main.c:120
+#: ../raster/r.in.gdal/main.c:198 ../raster/r.what/main.c:120
 #: ../raster/r.what/main.c:128 ../raster/r.what/main.c:142
 #: ../raster/r.what/main.c:147 ../raster/r.what/main.c:152
 #: ../raster/r.what/main.c:157 ../display/d.mon/main.c:103
@@ -976,7 +987,7 @@ msgstr "列出所有的数据库驱动。"
 #: ../db/db.select/main.c:266 ../db/db.execute/main.c:126
 #: ../vector/v.what.rast/main.c:76 ../vector/v.vect.stats/main.c:129
 #: ../vector/v.distance/main.c:93 ../vector/v.class/main.c:47
-#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:54
+#: ../vector/v.db.connect/main.c:53 ../vector/v.db.select/main.c:55
 #: ../vector/v.univar/main.c:95 ../vector/v.what.rast3/main.c:69
 #: ../vector/v.to.db/main.c:37 ../temporal/t.connect/main.c:35
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:7
@@ -1006,7 +1017,7 @@ msgstr "打印矢量的属性"
 #: ../db/db.databases/main.c:97 ../db/db.dropdb/main.c:73
 #: ../db/db.select/main.c:267 ../db/db.execute/main.c:127
 #: ../db/db.execute/main.c:134 ../db/db.execute/main.c:140
-#: ../vector/v.db.select/main.c:56
+#: ../vector/v.db.select/main.c:57
 msgid "SQL"
 msgstr ""
 
@@ -1103,10 +1114,10 @@ msgid "Unable to open database <%s>"
 msgstr "无法打开数据库 <%s>"
 
 #: ../db/db.describe/main.c:67 ../db/db.columns/main.c:62
-#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:269
+#: ../vector/v.info/print.c:152 ../vector/v.random/main.c:270
 #: ../vector/v.out.svg/main.c:165 ../vector/v.out.vtk/writeVTK.c:655
 #: ../vector/v.reclass/main.c:193 ../vector/v.out.ogr/main.c:640
-#: ../vector/v.patch/main.c:147 ../vector/v.patch/main.c:187
+#: ../vector/v.patch/main.c:162 ../vector/v.patch/main.c:202
 #: ../vector/v.db.connect/main.c:228 ../vector/v.out.postgis/table.c:41
 #: ../vector/v.in.ascii/main.c:429 ../doc/vector/v.example/main.c:137
 #, c-format
@@ -1293,11 +1304,11 @@ msgstr "输入失败"
 msgid "succeeded"
 msgstr ""
 
-#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:117
+#: ../db/db.select/main.c:142 ../vector/v.db.select/main.c:126
 #: ../raster/r.regression.line/main.c:77 ../raster/r.stats/main.c:227
 #: ../raster/r.regression.multi/main.c:169
 #: ../raster/r.univar/r3.univar_main.c:128
-#: ../raster/r.univar/r.univar_main.c:121 ../raster/r.what/main.c:170
+#: ../raster/r.univar/r.univar_main.c:129 ../raster/r.what/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file <%s> for writing"
 msgstr "无法找到文件 [%s]。"
@@ -1333,10 +1344,10 @@ msgstr "查询图层。用于 'query' 选项。"
 
 #: ../db/db.select/main.c:227 ../db/db.select/main.c:233
 #: ../db/db.select/main.c:236 ../db/db.select/main.c:246
-#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:71
-#: ../vector/v.db.select/main.c:77 ../vector/v.db.select/main.c:80
-#: ../vector/v.db.select/main.c:97 ../vector/v.db.select/main.c:102
-#: ../general/g.gisenv/main.c:93 ../general/g.gisenv/main.c:98
+#: ../db/db.select/main.c:256 ../vector/v.db.select/main.c:85
+#: ../vector/v.db.select/main.c:88 ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:111 ../general/g.gisenv/main.c:93
+#: ../general/g.gisenv/main.c:98
 #, fuzzy
 msgid "Format"
 msgstr "OGR 格式"
@@ -1346,7 +1357,7 @@ msgstr "OGR 格式"
 msgid "Vertical record separator (requires -v flag)"
 msgstr "输出的垂直方向的记录分隔符"
 
-#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:86
+#: ../db/db.select/main.c:241 ../vector/v.db.select/main.c:95
 #: ../locale/scriptstrings/i.oif_to_translate.c:5
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:6
 #: ../raster/r.stats/main.c:119 ../raster/r.univar/r3.univar_main.c:42
@@ -1355,7 +1366,7 @@ msgstr "输出的垂直方向的记录分隔符"
 msgid "Name for output file (if omitted or \"-\" output to stdout)"
 msgstr "输出的二进制地图的名称 (output=- 用于标准输出)"
 
-#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:96
+#: ../db/db.select/main.c:245 ../vector/v.db.select/main.c:105
 msgid "Do not include column names in output"
 msgstr "在输出中不包含字段名称"
 
@@ -1363,7 +1374,7 @@ msgstr "在输出中不包含字段名称"
 msgid "Describe query only (don't run it)"
 msgstr "仅描述查询(不运行它)"
 
-#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:101
+#: ../db/db.select/main.c:255 ../vector/v.db.select/main.c:110
 msgid "Vertical output (instead of horizontal)"
 msgstr "垂直输出 (而不是水平)"
 
@@ -1413,6 +1424,7 @@ msgid "Name of file containing SQL statement(s)"
 msgstr "包含SQL语句的文件名"
 
 #: ../db/db.execute/main.c:160
+#: ../locale/scriptstrings/v.in.geonames_to_translate.c:6
 msgid "Ignore SQL errors and continue"
 msgstr "忽略SQL错误并继续"
 
@@ -1584,7 +1596,6 @@ msgstr ""
 #: ../locale/scriptstrings/r.unpack_to_translate.c:10
 #: ../locale/scriptstrings/v.unpack_to_translate.c:8
 #: ../locale/scriptstrings/v.unpack_to_translate.c:11
-#: ../locale/scriptstrings/v.unpack_to_translate.c:12
 #: ../raster/r.univar/r.univar_main.c:42 ../raster/r.kappa/main.c:90
 #: ../raster/r.kappa/main.c:98
 #, fuzzy
@@ -1705,7 +1716,7 @@ msgstr "无法从表中选取数据"
 #: ../ps/ps.map/do_geogrid.c:412 ../ps/ps.map/do_geogrid.c:418
 #: ../ps/ps.map/do_geogrid.c:422 ../ps/ps.map/do_geogrid.c:430
 #: ../ps/ps.map/do_geogrid.c:434 ../raster/r.latlong/main.c:133
-#: ../raster/r.horizon/main.c:840 ../raster/r.horizon/main.c:858
+#: ../raster/r.horizon/main.c:846 ../raster/r.horizon/main.c:864
 #: ../display/d.grid/plot.c:201 ../display/d.grid/plot.c:207
 #: ../display/d.grid/plot.c:260 ../display/d.grid/plot.c:266
 #: ../display/d.grid/plot.c:430 ../display/d.grid/plot.c:446
@@ -1713,15 +1724,15 @@ msgstr "无法从表中选取数据"
 msgid "Error in pj_do_proj"
 msgstr ""
 
-#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:253
-#: ../general/g.region/printwindow.c:509 ../general/g.region/printwindow.c:628
-#: ../raster/r.horizon/main.c:532 ../raster/r.sun/main.c:736
+#: ../ps/ps.map/do_geogrid.c:272 ../general/g.region/printwindow.c:242
+#: ../general/g.region/printwindow.c:498 ../general/g.region/printwindow.c:617
+#: ../raster/r.horizon/main.c:538 ../raster/r.sun/main.c:753
 #: ../display/d.grid/plot.c:349 ../display/d.where/main.c:113
 msgid "Can't get projection key values of current location"
 msgstr "无法获得当前区域的投影参数"
 
 #: ../ps/ps.map/do_geogrid.c:278 ../raster/r.latlong/main.c:114
-#: ../raster/r.horizon/main.c:542 ../raster/r.sun/main.c:746
+#: ../raster/r.horizon/main.c:548 ../raster/r.sun/main.c:763
 #: ../display/d.grid/plot.c:356 ../display/d.grid/plot.c:383
 #: ../display/d.where/main.c:120 ../display/d.where/main.c:146
 msgid "Unable to set up lat/long projection parameters"
@@ -1816,7 +1827,7 @@ msgstr "无法创建文件 [%s]"
 #: ../raster/r.series.accumulate/main.c:284
 #: ../raster/r.series.accumulate/main.c:292
 #: ../raster/r.series.accumulate/main.c:300
-#: ../raster/r.grow.distance/main.c:264 ../raster/r.out.mpeg/main.c:286
+#: ../raster/r.grow.distance/main.c:278 ../raster/r.out.mpeg/main.c:286
 #: ../raster/r.surf.idw/main.c:713
 #, fuzzy, c-format
 msgid "Reading raster map <%s>..."
@@ -1863,7 +1874,7 @@ msgstr "无法获得矢量地图的图层信息"
 #: ../vector/v.in.db/main.c:302 ../vector/v.kcv/main.c:126
 #: ../vector/v.info/print.c:147 ../vector/v.to.3d/trans3.c:57
 #: ../vector/v.to.3d/trans2.c:55 ../vector/v.overlay/main.c:239
-#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:236
+#: ../vector/v.overlay/main.c:406 ../vector/v.random/main.c:237
 #: ../vector/v.what.rast/main.c:144 ../vector/v.to.rast/support.c:132
 #: ../vector/v.to.rast/support.c:294 ../vector/v.to.rast/support.c:447
 #: ../vector/v.to.rast/vect2rast.c:60 ../vector/v.net.centrality/main.c:246
@@ -1876,26 +1887,27 @@ msgstr "无法获得矢量地图的图层信息"
 #: ../vector/v.surf.bspline/main.c:378 ../vector/v.surf.bspline/crosscorr.c:123
 #: ../vector/v.out.vtk/writeVTK.c:649 ../vector/v.reclass/main.c:133
 #: ../vector/v.surf.rst/main.c:587 ../vector/v.out.ogr/main.c:635
-#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:139
-#: ../vector/v.patch/main.c:171 ../vector/v.patch/main.c:292
-#: ../vector/v.patch/main.c:374 ../vector/v.buffer/main.c:418
+#: ../vector/v.net.distance/main.c:279 ../vector/v.patch/main.c:154
+#: ../vector/v.patch/main.c:186 ../vector/v.patch/main.c:307
+#: ../vector/v.patch/main.c:389 ../vector/v.buffer/main.c:417
 #: ../vector/v.normal/main.c:122 ../vector/v.db.connect/main.c:223
 #: ../vector/v.db.connect/main.c:331 ../vector/v.surf.idw/read_sites.c:55
 #: ../vector/v.transform/trans_digit.c:40 ../vector/v.net.allpairs/main.c:166
 #: ../vector/v.lrs/v.lrs.create/main.c:296
-#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:168
+#: ../vector/v.lrs/v.lrs.create/main.c:305 ../vector/v.db.select/main.c:177
 #: ../vector/v.mkgrid/main.c:277 ../vector/v.label/main.c:278
 #: ../vector/v.extrude/main.c:229 ../vector/v.sample/main.c:179
-#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1170
+#: ../vector/v.what.rast3/main.c:126 ../vector/v.in.ogr/main.c:1143
 #: ../vector/v.in.dxf/write_vect.c:211 ../vector/v.net.timetable/main.c:93
 #: ../vector/v.to.db/query.c:89 ../vector/v.to.db/update.c:46
 #: ../vector/v.to.points/main.c:167 ../vector/v.to.rast3/main.c:84
 #: ../vector/v.out.postgis/table.c:34 ../vector/v.in.ascii/main.c:342
-#: ../vector/v.net.flow/main.c:169 ../doc/vector/v.example/main.c:131
-#: ../raster/r.volume/main.c:243 ../raster/r.random/random.c:73
-#: ../raster/r.contour/main.c:172 ../raster/r.to.vect/main.c:180
-#: ../display/d.vect/shape.c:44 ../display/d.vect/attr.c:43
-#: ../display/d.vect.thematic/plot1.c:111 ../display/d.vect.chart/plot.c:43
+#: ../vector/v.net.flow/main.c:169 ../raster3d/r3.flow/main.c:46
+#: ../doc/vector/v.example/main.c:131 ../raster/r.volume/main.c:243
+#: ../raster/r.random/random.c:73 ../raster/r.contour/main.c:172
+#: ../raster/r.to.vect/main.c:180 ../display/d.vect/shape.c:44
+#: ../display/d.vect/attr.c:43 ../display/d.vect.thematic/plot1.c:111
+#: ../display/d.vect.chart/plot.c:44
 #, fuzzy, c-format
 msgid "Unable to open database <%s> by driver <%s>"
 msgstr "无法打开数据库%s,通过驱动%s"
@@ -1906,7 +1918,8 @@ msgid "Column type not supported (must be string)"
 msgstr "字段类型不支持 (%s)"
 
 #: ../ps/ps.map/catval.c:66 ../ps/ps.map/catval.c:131 ../ps/ps.map/catval.c:198
-#: ../vector/v.vol.rst/user1.c:112 ../vector/v.class/main.c:132
+#: ../vector/v.vol.rst/user1.c:112 ../vector/v.out.lidar/main.c:132
+#: ../vector/v.out.lidar/main.c:167 ../vector/v.class/main.c:132
 #: ../vector/v.surf.bspline/main.c:392 ../vector/v.normal/main.c:134
 #: ../vector/v.surf.idw/read_sites.c:68 ../vector/v.sample/main.c:152
 #: ../vector/v.univar/main.c:366 ../vector/v.to.rast3/main.c:95
@@ -2052,13 +2065,13 @@ msgstr "无法打开临时标签文件 <%s>"
 #: ../raster/r.coin/main.c:123 ../raster/r.category/main.c:119
 #: ../raster/r.category/main.c:140 ../raster/r.walk/main.c:435
 #: ../raster/r.walk/main.c:440 ../raster/r.walk/main.c:801
-#: ../raster/r.null/main.c:121 ../raster/r.reclass/main.c:79
+#: ../raster/r.null/main.c:128 ../raster/r.reclass/main.c:79
 #: ../raster/r.report/parse.c:273 ../raster/r.carve/main.c:165
 #: ../raster/r.colors/edit_colors.c:393 ../raster/r.cross/main.c:106
-#: ../raster/r.univar/r.univar_main.c:216 ../raster/r.flow/io.c:65
+#: ../raster/r.univar/r.univar_main.c:234 ../raster/r.flow/io.c:65
 #: ../raster/r.flow/io.c:242 ../raster/r.stream.extract/main.c:174
 #: ../raster/r.stream.extract/main.c:178 ../raster/r.stream.extract/main.c:183
-#: ../raster/r.mapcalc/map.c:515 ../raster/r.tile/main.c:86
+#: ../raster/r.mapcalc/map.c:517 ../raster/r.tile/main.c:86
 #: ../raster/r.kappa/main.c:150 ../raster/r.kappa/stats.c:33
 #: ../raster/r.kappa/stats.c:38 ../raster/r.sim/simlib/output.c:363
 #: ../raster/r.sim/simlib/output.c:372 ../raster/r.sim/simlib/output.c:403
@@ -2066,8 +2079,8 @@ msgstr "无法打开临时标签文件 <%s>"
 #: ../raster/r.sim/simlib/output.c:475 ../raster/r.sim/simlib/output.c:497
 #: ../raster/r.sim/simlib/output.c:541 ../raster/r.sim/simlib/output.c:583
 #: ../raster/r.sim/simlib/output.c:755 ../raster/r.distance/parse.c:72
-#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:117
-#: ../raster/r.compress/main.c:257 ../raster/r.cost/main.c:350
+#: ../raster/r.distance/parse.c:81 ../raster/r.compress/main.c:121
+#: ../raster/r.compress/main.c:301 ../raster/r.cost/main.c:350
 #: ../raster/r.cost/main.c:665 ../raster/r.info/main.c:103
 #: ../imagery/i.pca/main.c:139 ../imagery/i.gensigset/parse.c:44
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:155
@@ -2111,10 +2124,11 @@ msgstr "插值点的数量"
 
 #: ../misc/m.nviz.image/main.c:51 ../misc/m.nviz.script/main.c:70
 #: ../visualization/ximgview/main.c:291
+#: ../locale/scriptstrings/d.frame_to_translate.c:3
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:3
 #: ../locale/scriptstrings/d.redraw_to_translate.c:3 ../display/d.mon/main.c:39
 #: ../display/d.erase/main.c:30 ../display/d.rast/main.c:54
-#: ../display/d.vect/main.c:71 ../display/d.info/main.c:32
+#: ../display/d.vect/main.c:71 ../display/d.info/main.c:35
 #: ../display/d.his/main.c:63 ../display/d.rgb/main.c:54
 msgid "graphics"
 msgstr ""
@@ -2128,13 +2142,16 @@ msgstr ""
 #: ../locale/scriptstrings/r.plane_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:4
 #: ../locale/scriptstrings/i.spectral_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:4
 #: ../locale/scriptstrings/r.in.wms_to_translate.c:2
 #: ../locale/scriptstrings/r.tileset_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:4
 #: ../locale/scriptstrings/r.rgb_to_translate.c:2
 #: ../locale/scriptstrings/r.unpack_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:4
@@ -2143,6 +2160,7 @@ msgstr ""
 #: ../locale/scriptstrings/d.correlate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:4
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:4
@@ -2158,7 +2176,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.krige_to_translate.c:4
 #: ../locale/scriptstrings/r.mask_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:4
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
 #: ../locale/scriptstrings/r.buffer.lowmem_to_translate.c:3
 #: ../locale/scriptstrings/r.grow_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:4
@@ -2178,11 +2196,11 @@ msgstr ""
 #: ../raster/r.series.interp/main.c:64 ../raster/r.in.xyz/main.c:158
 #: ../raster/r.out.gdal/main.c:136 ../raster/r.in.gridatb/main.c:45
 #: ../raster/r.mode/main.c:54 ../raster/r.walk/main.c:178
-#: ../raster/r.null/main.c:59 ../raster/r.timestamp/main.c:35
+#: ../raster/r.null/main.c:60 ../raster/r.timestamp/main.c:35
 #: ../raster/r.latlong/main.c:56 ../raster/r.quant/main.c:47
 #: ../raster/r.reclass/main.c:50 ../raster/r.in.poly/main.c:34
-#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:169
-#: ../raster/r.grow.distance/main.c:151 ../raster/r.regression.line/main.c:46
+#: ../raster/r.out.ppm/main.c:54 ../raster/r.in.lidar/main.c:106
+#: ../raster/r.grow.distance/main.c:152 ../raster/r.regression.line/main.c:46
 #: ../raster/r.what.color/main.c:88 ../raster/r.describe/main.c:54
 #: ../raster/r.out.png/main.c:112 ../raster/r.covar/main.c:51
 #: ../raster/r.random/main.c:51 ../raster/r.report/main.c:67
@@ -2194,27 +2212,27 @@ msgstr ""
 #: ../raster/r.out.mat/main.c:62 ../raster/r.rescale.eq/main.c:52
 #: ../raster/r.recode/main.c:48 ../raster/r.surf.gauss/main.c:38
 #: ../raster/r.clump/main.c:51 ../raster/r.drain/main.c:109
-#: ../raster/r.water.outlet/main.c:56 ../raster/r.stats/main.c:106
-#: ../raster/r.watershed/front/main.c:72 ../raster/r.resamp.stats/main.c:256
+#: ../raster/r.water.outlet/main.c:57 ../raster/r.stats/main.c:106
+#: ../raster/r.watershed/front/main.c:73 ../raster/r.resamp.stats/main.c:258
 #: ../raster/r.surf.area/main.c:76 ../raster/r.regression.multi/main.c:128
 #: ../raster/r.carve/main.c:74 ../raster/r.mfilter/main.c:56
 #: ../raster/r.colors/edit_colors.c:63 ../raster/r.usler/main.c:52
 #: ../raster/r.out.vtk/main.c:59 ../raster/r.composite/main.c:72
 #: ../raster/r.external.out/main.c:235 ../raster/r.spreadpath/main.c:88
-#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:100
+#: ../raster/r.cross/main.c:69 ../raster/r.univar/r.univar_main.c:104
 #: ../raster/r.out.ascii/main.c:59 ../raster/r.flow/main.c:421
 #: ../raster/r.circle/main.c:51 ../raster/r.to.rast3/main.c:197
 #: ../raster/r.thin/main.c:57 ../raster/r.resamp.interp/main.c:76
 #: ../raster/r.series/main.c:137 ../raster/r.sunmask/main.c:116
 #: ../raster/r.contour/main.c:87 ../raster/r.stream.extract/main.c:76
-#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:115
+#: ../raster/r.solute.transport/main.c:229 ../raster/r.mapcalc/main.c:69
 #: ../raster/r.resample/main.c:54 ../raster/r.tile/main.c:43
 #: ../raster/r.region/main.c:51 ../raster/r.stats.zonal/main.c:101
 #: ../raster/r.support.stats/main.c:38 ../raster/r.basins.fill/main.c:54
-#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:87
+#: ../raster/r.external/main.c:57 ../raster/r.in.gdal/main.c:90
 #: ../raster/r.kappa/main.c:68 ../raster/r.uslek/main.c:53
 #: ../raster/r.topidx/main.c:39 ../raster/r.lake/main.c:150
-#: ../raster/r.patch/main.c:55 ../raster/r.surf.idw/main.c:104
+#: ../raster/r.patch/main.c:58 ../raster/r.surf.idw/main.c:104
 #: ../raster/r.to.vect/main.c:70 ../raster/r.sim/r.sim.sediment/main.c:112
 #: ../raster/r.sim/r.sim.water/main.c:113 ../raster/r.out.ppm3/main.c:57
 #: ../raster/r.out.pov/main.c:121 ../raster/r.surf.fractal/main.c:38
@@ -2232,74 +2250,77 @@ msgstr ""
 #: ../raster/r.li/r.li.richness/richness.c:43
 #: ../raster/r.li/r.li.padcv/padcv.c:53 ../raster/r.li/r.li.shape/main.c:49
 #: ../raster/r.li/r.li.mps/mps.c:52 ../raster/r.li/r.li.patchnum/main.c:50
-#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:43
+#: ../raster/r.li/r.li.shannon/shannon.c:46 ../raster/r.li/r.li.mpa/mpa.c:44
 #: ../raster/r.li/r.li.pielou/pielou.c:46 ../raster/r.horizon/main.c:180
 #: ../raster/r.sun/main.c:239 ../raster/r.compress/main.c:64
-#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:384
+#: ../raster/r.statistics/main.c:55 ../raster/r.resamp.filter/main.c:389
 #: ../raster/r.neighbors/main.c:167 ../raster/r.cost/main.c:140
 #: ../raster/r.info/main.c:69 ../raster/r.resamp.rst/main.c:148
-#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:45
-#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:78
-#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:97
+#: ../raster/r.texture/main.c:101 ../raster/r.random.cells/main.c:47
+#: ../display/d.rast/main.c:55 ../display/d.rast.num/main.c:79
+#: ../display/d.rgb/main.c:55 ../display/d.rast.arrow/main.c:99
 #: ../display/d.profile/main.c:193 ../display/d.colortable/main.c:61
 msgid "raster"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:53 ../misc/m.nviz.script/main.c:73
 #: ../vector/v.extract/main.c:77 ../vector/v.external.out/main.c:43
-#: ../vector/v.net.path/main.c:40 ../vector/v.edit/main.c:54
+#: ../vector/v.net.path/main.c:42 ../vector/v.edit/main.c:54
 #: ../vector/v.colors/main.c:55 ../vector/v.vol.rst/main.c:235
-#: ../vector/v.net.steiner/main.c:345 ../vector/v.in.db/main.c:52
+#: ../vector/v.net.steiner/main.c:346 ../vector/v.in.db/main.c:52
 #: ../vector/v.kcv/main.c:55 ../vector/v.net.visibility/main.c:45
 #: ../vector/v.info/main.c:37 ../vector/v.info/print.c:424
 #: ../vector/v.to.3d/main.c:36 ../vector/v.overlay/main.c:62
-#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:96
+#: ../vector/v.build/main.c:36 ../vector/v.random/main.c:97
 #: ../vector/v.what.rast/main.c:71 ../vector/v.vect.stats/main.c:128
-#: ../vector/v.to.rast/main.c:44 ../vector/v.net.centrality/main.c:96
-#: ../vector/v.segment/main.c:60 ../vector/v.type/main.c:38
-#: ../vector/v.net.salesman/main.c:126 ../vector/v.net.iso/main.c:71
-#: ../vector/v.out.svg/main.c:77 ../vector/v.net.connectivity/main.c:52
-#: ../vector/v.out.ascii/main.c:47 ../vector/v.colors.out/main.c:49
-#: ../vector/v.net.components/main.c:72 ../vector/v.in.dwg/main.c:82
-#: ../vector/v.select/main.c:48 ../vector/v.distance/main.c:90
-#: ../vector/v.parallel/main.c:49 ../vector/v.class/main.c:45
-#: ../vector/v.generalize/main.c:76 ../vector/v.in.region/main.c:41
-#: ../vector/v.label.sa/main.c:38 ../vector/v.voronoi/main.c:123
-#: ../vector/v.hull/main.c:52 ../vector/v.surf.bspline/main.c:91
-#: ../vector/v.net.bridge/main.c:47 ../vector/v.drape/main.c:56
-#: ../vector/v.out.vtk/main.c:47 ../vector/v.lidar.edgedetection/main.c:72
-#: ../vector/v.net/main.c:45 ../vector/v.category/main.c:75
+#: ../vector/v.out.lidar/main.c:471 ../vector/v.to.rast/main.c:44
+#: ../vector/v.net.centrality/main.c:96 ../vector/v.segment/main.c:60
+#: ../vector/v.type/main.c:38 ../vector/v.net.salesman/main.c:127
+#: ../vector/v.net.iso/main.c:72 ../vector/v.out.svg/main.c:77
+#: ../vector/v.net.connectivity/main.c:52 ../vector/v.out.ascii/main.c:47
+#: ../vector/v.colors.out/main.c:49 ../vector/v.net.components/main.c:72
+#: ../vector/v.in.dwg/main.c:82 ../vector/v.select/main.c:48
+#: ../vector/v.distance/main.c:90 ../vector/v.parallel/main.c:49
+#: ../vector/v.class/main.c:45 ../vector/v.generalize/main.c:76
+#: ../vector/v.in.region/main.c:41 ../vector/v.label.sa/main.c:38
+#: ../vector/v.voronoi/main.c:123 ../vector/v.hull/main.c:52
+#: ../vector/v.surf.bspline/main.c:91 ../vector/v.net.bridge/main.c:47
+#: ../vector/v.drape/main.c:56 ../vector/v.out.vtk/main.c:47
+#: ../vector/v.cluster/main.c:90 ../vector/v.lidar.edgedetection/main.c:72
+#: ../vector/v.net/main.c:47 ../vector/v.category/main.c:75
 #: ../vector/v.reclass/main.c:67 ../vector/v.surf.rst/main.c:141
 #: ../vector/v.perturb/main.c:62 ../vector/v.out.ogr/main.c:81
 #: ../vector/v.out.pov/main.c:46 ../vector/v.net.distance/main.c:66
 #: ../vector/v.outlier/main.c:69 ../vector/v.proj/main.c:67
 #: ../vector/v.support/main.c:39 ../vector/v.what/main.c:60
-#: ../vector/v.patch/main.c:68 ../vector/v.in.lidar/main.c:156
+#: ../vector/v.patch/main.c:69 ../vector/v.in.lidar/main.c:135
 #: ../vector/v.external/main.c:50 ../vector/v.delaunay/main.c:85
 #: ../vector/v.buffer/main.c:221 ../vector/v.normal/main.c:72
 #: ../vector/v.db.connect/main.c:52 ../vector/v.out.dxf/main.c:56
-#: ../vector/v.net.alloc/main.c:62 ../vector/v.surf.idw/main.c:87
+#: ../vector/v.net.alloc/main.c:57 ../vector/v.surf.idw/main.c:87
 #: ../vector/v.transform/main.c:69 ../vector/v.net.allpairs/main.c:61
 #: ../vector/v.lrs/v.lrs.segment/main.c:71
 #: ../vector/v.lrs/v.lrs.where/main.c:57
 #: ../vector/v.lrs/v.lrs.create/main.c:121
 #: ../vector/v.lrs/v.lrs.label/main.c:102 ../vector/v.clean/main.c:51
-#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:53
+#: ../vector/v.clean/test/topocheck.c:42 ../vector/v.db.select/main.c:54
 #: ../vector/v.net.spanningtree/main.c:46 ../vector/v.split/main.c:54
 #: ../vector/v.lidar.growing/main.c:75 ../vector/v.mkgrid/main.c:70
 #: ../vector/v.neighbors/main.c:50 ../vector/v.lidar.correction/main.c:68
 #: ../vector/v.label/main.c:59 ../vector/v.qcount/main.c:60
-#: ../vector/v.rectify/main.c:70 ../vector/v.extrude/main.c:67
-#: ../vector/v.sample/main.c:75 ../vector/v.univar/main.c:92
-#: ../vector/v.what.rast3/main.c:64 ../vector/v.in.ogr/main.c:133
-#: ../vector/v.in.dxf/main.c:64 ../vector/v.net.timetable/main.c:260
-#: ../vector/v.to.db/main.c:36 ../vector/v.kernel/main.c:109
-#: ../vector/v.build.polylines/main.c:111 ../vector/v.to.points/main.c:53
-#: ../vector/v.to.rast3/main.c:48 ../vector/v.out.postgis/main.c:44
-#: ../vector/v.in.ascii/main.c:68 ../vector/v.timestamp/main.c:35
-#: ../vector/v.net.flow/main.c:58 ../visualization/ximgview/main.c:293
+#: ../vector/v.decimate/main.c:123 ../vector/v.rectify/main.c:70
+#: ../vector/v.extrude/main.c:67 ../vector/v.sample/main.c:75
+#: ../vector/v.univar/main.c:92 ../vector/v.what.rast3/main.c:64
+#: ../vector/v.in.ogr/main.c:135 ../vector/v.in.dxf/main.c:64
+#: ../vector/v.net.timetable/main.c:260 ../vector/v.to.db/main.c:36
+#: ../vector/v.kernel/main.c:109 ../vector/v.build.polylines/main.c:111
+#: ../vector/v.to.points/main.c:53 ../vector/v.to.rast3/main.c:48
+#: ../vector/v.out.postgis/main.c:44 ../vector/v.in.ascii/main.c:68
+#: ../vector/v.timestamp/main.c:35 ../vector/v.net.flow/main.c:58
+#: ../visualization/ximgview/main.c:293
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/v.build.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:5
 #: ../locale/scriptstrings/v.report_to_translate.c:2
 #: ../locale/scriptstrings/v.in.e00_to_translate.c:2
 #: ../locale/scriptstrings/v.in.wfs_to_translate.c:2
@@ -2309,6 +2330,7 @@ msgstr ""
 #: ../locale/scriptstrings/v.dissolve_to_translate.c:2
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:2
 #: ../locale/scriptstrings/v.db.droptable_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:4
 #: ../locale/scriptstrings/v.db.update_to_translate.c:2
 #: ../locale/scriptstrings/v.unpack_to_translate.c:2
@@ -2324,6 +2346,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:4
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:2
 #: ../locale/scriptstrings/v.db.reconnect.all_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:5
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:3
 #: ../locale/scriptstrings/v.db.univar_to_translate.c:2
 #: ../locale/scriptstrings/v.in.geonames_to_translate.c:2
@@ -2342,6 +2365,7 @@ msgid "vector"
 msgstr ""
 
 #: ../misc/m.nviz.image/main.c:54 ../misc/m.nviz.script/main.c:72
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:4
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:4
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:2
@@ -2350,15 +2374,16 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:4
 #: ../raster3d/r3.timestamp/main.c:43 ../raster3d/r3.info/main.c:75
 #: ../raster3d/r3.out.bin/main.c:205 ../raster3d/r3.gwflow/main.c:159
-#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.stats/main.c:48
+#: ../raster3d/r3.to.rast/main.c:206 ../raster3d/r3.flow/test_main.c:43
+#: ../raster3d/r3.flow/main.c:179 ../raster3d/r3.stats/main.c:48
 #: ../raster3d/r3.cross.rast/main.c:228 ../raster3d/r3.in.v5d/main.c:178
 #: ../raster3d/r3.in.ascii/main.c:313 ../raster3d/r3.null/main.c:186
 #: ../raster3d/r3.support/main.c:49 ../raster3d/r3.out.ascii/main.c:302
 #: ../raster3d/r3.in.bin/main.c:252 ../raster3d/r3.out.v5d/main.c:284
 #: ../raster3d/r3.mask/main.c:133 ../raster3d/r3.out.vtk/main.c:376
-#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.out.netcdf/main.c:586
-#: ../raster3d/r3.retile/main.c:96 ../raster3d/r3.mkdspf/main.c:79
-#: ../raster/r.colors.out/raster3d_main.c:46
+#: ../raster3d/r3.neighbors/main.c:208 ../raster3d/r3.gradient/main.c:43
+#: ../raster3d/r3.out.netcdf/main.c:586 ../raster3d/r3.retile/main.c:96
+#: ../raster3d/r3.mkdspf/main.c:79 ../raster/r.colors.out/raster3d_main.c:46
 #: ../raster/r.to.rast3elev/main.c:363 ../raster/r.colors/edit_colors.c:59
 #: ../raster/r.univar/r3.univar_main.c:98
 #, fuzzy
@@ -2396,7 +2421,7 @@ msgstr ""
 msgid "Unsupported output format"
 msgstr "列出支持的格式然后退出"
 
-#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:339
+#: ../misc/m.nviz.image/main.c:241 ../imagery/i.cluster/main.c:354
 #, fuzzy, c-format
 msgid "File <%s> created."
 msgstr "位置名称"
@@ -3000,69 +3025,70 @@ msgid "Vector map <%s> not found"
 msgstr "未发现矢量地图<%s>"
 
 #: ../misc/m.nviz.image/vector.c:280 ../vector/v.extract/main.c:191
-#: ../vector/v.net.path/main.c:133 ../vector/v.edit/main.c:168
+#: ../vector/v.net.path/main.c:158 ../vector/v.edit/main.c:168
 #: ../vector/v.edit/main.c:240 ../vector/v.colors/main.c:263
-#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:431
+#: ../vector/v.vol.rst/main.c:560 ../vector/v.net.steiner/main.c:432
 #: ../vector/v.net.visibility/main.c:73 ../vector/v.net.visibility/main.c:82
 #: ../vector/v.info/main.c:60 ../vector/v.to.3d/main.c:72
 #: ../vector/v.overlay/main.c:181 ../vector/v.build/main.c:118
-#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:197
+#: ../vector/v.build/main.c:128 ../vector/v.random/main.c:198
 #: ../vector/v.what.rast/main.c:131 ../vector/v.vect.stats/main.c:246
-#: ../vector/v.vect.stats/main.c:257 ../vector/v.to.rast/support.c:123
-#: ../vector/v.to.rast/support.c:282 ../vector/v.to.rast/support.c:434
-#: ../vector/v.to.rast/vect2rast.c:39 ../vector/v.net.centrality/main.c:209
-#: ../vector/v.segment/main.c:108 ../vector/v.type/main.c:131
-#: ../vector/v.net.salesman/main.c:224 ../vector/v.net.iso/main.c:187
-#: ../vector/v.out.svg/main.c:139 ../vector/v.net.connectivity/main.c:130
-#: ../vector/v.out.ascii/main.c:87 ../vector/v.out.ascii/main.c:94
-#: ../vector/v.colors.out/scan_cats.c:20
+#: ../vector/v.vect.stats/main.c:257 ../vector/v.out.lidar/main.c:609
+#: ../vector/v.to.rast/support.c:123 ../vector/v.to.rast/support.c:282
+#: ../vector/v.to.rast/support.c:434 ../vector/v.to.rast/vect2rast.c:39
+#: ../vector/v.net.centrality/main.c:209 ../vector/v.segment/main.c:108
+#: ../vector/v.type/main.c:131 ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.iso/main.c:211 ../vector/v.out.svg/main.c:139
+#: ../vector/v.net.connectivity/main.c:130 ../vector/v.out.ascii/main.c:87
+#: ../vector/v.out.ascii/main.c:94 ../vector/v.colors.out/scan_cats.c:20
 #: ../vector/v.colors.out/make_colors.c:23
 #: ../vector/v.net.components/main.c:148 ../vector/v.select/main.c:108
 #: ../vector/v.distance/main.c:310 ../vector/v.distance/main.c:332
 #: ../vector/v.parallel/main.c:148 ../vector/v.class/main.c:102
-#: ../vector/v.generalize/main.c:323 ../vector/v.label.sa/labels.c:58
+#: ../vector/v.generalize/main.c:325 ../vector/v.label.sa/labels.c:58
 #: ../vector/v.voronoi/main.c:196 ../vector/v.hull/main.c:87
 #: ../vector/v.net.bridge/main.c:118 ../vector/v.drape/main.c:143
-#: ../vector/v.lidar.edgedetection/main.c:219 ../vector/v.net/main.c:66
-#: ../vector/v.net/main.c:90 ../vector/v.reclass/main.c:113
-#: ../vector/v.surf.rst/main.c:528 ../vector/v.surf.rst/main.c:632
-#: ../vector/v.perturb/main.c:147 ../vector/v.perturb/main.c:172
-#: ../vector/v.out.ogr/main.c:129 ../vector/v.out.pov/main.c:97
-#: ../vector/v.net.distance/main.c:192 ../vector/v.proj/main.c:231
-#: ../vector/v.support/main.c:130 ../vector/v.patch/main.c:114
-#: ../vector/v.patch/main.c:130 ../vector/v.patch/main.c:160
-#: ../vector/v.patch/main.c:257 ../vector/v.patch/main.c:338
-#: ../vector/v.external/main.c:193 ../vector/v.delaunay/main.c:120
-#: ../vector/v.buffer/main.c:339 ../vector/v.normal/main.c:110
-#: ../vector/v.db.connect/main.c:154 ../vector/v.out.dxf/main.c:80
-#: ../vector/v.net.alloc/main.c:146 ../vector/v.surf.idw/read_sites.c:29
-#: ../vector/v.transform/main.c:178 ../vector/v.net.allpairs/main.c:130
-#: ../vector/v.lrs/v.lrs.segment/main.c:144
+#: ../vector/v.cluster/main.c:147 ../vector/v.lidar.edgedetection/main.c:219
+#: ../vector/v.net/main.c:68 ../vector/v.net/main.c:92
+#: ../vector/v.reclass/main.c:113 ../vector/v.surf.rst/main.c:528
+#: ../vector/v.surf.rst/main.c:632 ../vector/v.perturb/main.c:147
+#: ../vector/v.perturb/main.c:172 ../vector/v.out.ogr/main.c:129
+#: ../vector/v.out.pov/main.c:97 ../vector/v.net.distance/main.c:192
+#: ../vector/v.proj/main.c:231 ../vector/v.support/main.c:130
+#: ../vector/v.patch/main.c:127 ../vector/v.patch/main.c:145
+#: ../vector/v.patch/main.c:175 ../vector/v.patch/main.c:272
+#: ../vector/v.patch/main.c:353 ../vector/v.external/main.c:180
+#: ../vector/v.delaunay/main.c:120 ../vector/v.buffer/main.c:338
+#: ../vector/v.normal/main.c:110 ../vector/v.db.connect/main.c:154
+#: ../vector/v.out.dxf/main.c:80 ../vector/v.net.alloc/main.c:174
+#: ../vector/v.surf.idw/read_sites.c:29 ../vector/v.transform/main.c:178
+#: ../vector/v.net.allpairs/main.c:130 ../vector/v.lrs/v.lrs.segment/main.c:144
 #: ../vector/v.lrs/v.lrs.where/main.c:131
 #: ../vector/v.lrs/v.lrs.where/main.c:140
 #: ../vector/v.lrs/v.lrs.create/main.c:254
 #: ../vector/v.lrs/v.lrs.create/main.c:263
 #: ../vector/v.lrs/v.lrs.label/main.c:272 ../vector/v.clean/main.c:283
 #: ../vector/v.clean/test/topocheck.c:67 ../vector/v.clean/test/topocheck.c:87
-#: ../vector/v.db.select/main.c:155 ../vector/v.net.spanningtree/main.c:101
-#: ../vector/v.split/main.c:164 ../vector/v.lidar.growing/main.c:138
+#: ../vector/v.db.select/main.c:164 ../vector/v.net.spanningtree/main.c:101
+#: ../vector/v.split/main.c:172 ../vector/v.lidar.growing/main.c:138
 #: ../vector/v.lidar.growing/main.c:142 ../vector/v.neighbors/main.c:88
 #: ../vector/v.lidar.correction/main.c:186 ../vector/v.label/main.c:268
-#: ../vector/v.qcount/main.c:101 ../vector/v.rectify/main.c:148
-#: ../vector/v.extrude/main.c:190 ../vector/v.sample/main.c:124
-#: ../vector/v.univar/main.c:158 ../vector/v.what.rast3/main.c:114
-#: ../vector/v.net.timetable/main.c:353 ../vector/v.to.db/main.c:59
-#: ../vector/v.kernel/main.c:319 ../vector/v.kernel/main.c:332
-#: ../vector/v.build.polylines/main.c:151 ../vector/v.to.points/main.c:121
-#: ../vector/v.to.rast3/main.c:73 ../vector/v.out.postgis/main.c:100
-#: ../vector/v.net.flow/main.c:143 ../general/manage/lister/vector.c:32
+#: ../vector/v.qcount/main.c:101 ../vector/v.decimate/main.c:270
+#: ../vector/v.rectify/main.c:148 ../vector/v.extrude/main.c:190
+#: ../vector/v.sample/main.c:124 ../vector/v.univar/main.c:158
+#: ../vector/v.what.rast3/main.c:114 ../vector/v.net.timetable/main.c:353
+#: ../vector/v.to.db/main.c:59 ../vector/v.kernel/main.c:319
+#: ../vector/v.kernel/main.c:332 ../vector/v.build.polylines/main.c:152
+#: ../vector/v.to.points/main.c:121 ../vector/v.to.rast3/main.c:73
+#: ../vector/v.out.postgis/main.c:100 ../vector/v.net.flow/main.c:143
+#: ../raster3d/r3.flow/main.c:411 ../general/manage/lister/vector.c:32
 #: ../doc/vector/v.example/main.c:87 ../raster/r.walk/main.c:673
 #: ../raster/r.walk/main.c:742 ../raster/r.random/support.c:63
 #: ../raster/r.drain/main.c:268 ../raster/r.carve/main.c:162
 #: ../raster/r.region/main.c:170 ../raster/r.sim/simlib/observation_points.c:41
 #: ../raster/r.what/main.c:236 ../raster/r.cost/main.c:533
 #: ../raster/r.cost/main.c:606 ../display/d.extract/main.c:103
-#: ../display/d.vect.chart/main.c:240 ../display/d.path/main.c:185
+#: ../display/d.vect.chart/main.c:246 ../display/d.path/main.c:185
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s>"
 msgstr "无法找到矢量地图 [%s]"
@@ -3127,12 +3153,13 @@ msgstr "没有起始点"
 
 #: ../misc/m.transform/main.c:276 ../misc/m.nviz.script/main.c:202
 #: ../vector/v.edit/main.c:79 ../vector/v.out.ascii/main.c:125
-#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:98
-#: ../general/g.pnmcomp/main.c:242 ../general/g.pnmcomp/main.c:259
-#: ../raster/r.category/main.c:173 ../raster/r.in.lidar/main.c:314
+#: ../vector/v.out.vtk/main.c:173 ../vector/v.net/main.c:100
+#: ../raster3d/r3.in.lidar/main.c:217 ../general/g.pnmcomp/main.c:242
+#: ../general/g.pnmcomp/main.c:259 ../raster/r.category/main.c:173
+#: ../raster/r.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:586
 #: ../raster/r.profile/main.c:175 ../raster/r.recode/main.c:90
 #: ../raster/r.out.ascii/main.c:157 ../raster/r.out.ppm3/main.c:133
-#: ../raster/r.horizon/main.c:385
+#: ../raster/r.horizon/main.c:385 ../display/d.mon/stop.c:66
 #: ../imagery/i.ortho.photo/i.ortho.transform/main.c:348
 #, fuzzy, c-format
 msgid "Unable to open file <%s>"
@@ -3260,7 +3287,7 @@ msgstr ""
 
 #: ../misc/m.cogo/main.c:226 ../vector/v.distance/main.c:91
 #: ../locale/scriptstrings/r.grow_to_translate.c:3
-#: ../raster/r.grow.distance/main.c:152 ../raster/r.distance/main.c:40
+#: ../raster/r.grow.distance/main.c:153 ../raster/r.distance/main.c:40
 #: ../display/d.rhumbline/main.c:45 ../display/d.geodesic/main.c:47
 #, fuzzy
 msgid "distance"
@@ -3422,7 +3449,7 @@ msgid "Area:"
 msgstr "面\n"
 
 #: ../vector/v.extract/copy_tab.c:57 ../vector/v.select/copy_tabs.c:17
-#: ../vector/v.generalize/misc.c:124 ../vector/v.voronoi/main.c:384
+#: ../vector/v.generalize/misc.c:134 ../vector/v.voronoi/main.c:384
 #: ../raster/r.contour/main.c:203
 #, fuzzy
 msgid "Writing attributes..."
@@ -3438,7 +3465,7 @@ msgstr "无法为面 #%d 选择属性"
 msgid "No attribute table for layer %d"
 msgstr "属性字段"
 
-#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:174
+#: ../vector/v.extract/copy_tab.c:108 ../vector/v.generalize/misc.c:184
 #: ../vector/v.to.points/main.c:155
 #, fuzzy, c-format
 msgid "Unable to copy table <%s>"
@@ -3451,15 +3478,16 @@ msgid "Unable to open database <%s> with driver <%s>"
 msgstr "无法打开数据库%s,通过驱动%s"
 
 #: ../vector/v.extract/copy_tab.c:129 ../vector/v.overlay/main.c:590
-#: ../vector/v.random/main.c:262 ../vector/v.in.dwg/main.c:249
+#: ../vector/v.random/main.c:263 ../vector/v.in.dwg/main.c:249
 #: ../vector/v.select/copy_tabs.c:85 ../vector/v.distance/main.c:1361
-#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:316
-#: ../vector/v.in.lidar/main.c:623 ../vector/v.mkgrid/main.c:349
+#: ../vector/v.reclass/main.c:327 ../vector/v.patch/main.c:331
+#: ../vector/v.in.lidar/attributes.c:144 ../vector/v.mkgrid/main.c:349
 #: ../vector/v.mkgrid/main.c:407 ../vector/v.sample/main.c:197
-#: ../vector/v.in.ogr/main.c:1184 ../vector/v.in.dxf/write_vect.c:238
+#: ../vector/v.in.ogr/main.c:1157 ../vector/v.in.dxf/write_vect.c:238
 #: ../vector/v.to.points/main.c:192 ../vector/v.in.ascii/main.c:417
-#: ../raster/r.random/random.c:257 ../raster/r.contour/main.c:193
-#: ../raster/r.stream.extract/close.c:196 ../raster/r.to.vect/main.c:231
+#: ../raster3d/r3.flow/main.c:72 ../raster/r.random/random.c:257
+#: ../raster/r.contour/main.c:193 ../raster/r.stream.extract/close.c:196
+#: ../raster/r.to.vect/main.c:231
 #, fuzzy, c-format
 msgid "Unable to grant privileges on table <%s>"
 msgstr "无法为表%s授予权限"
@@ -3482,6 +3510,7 @@ msgid ""
 msgstr "通过DEM计算阴影..."
 
 #: ../vector/v.extract/main.c:78 ../vector/v.outlier/main.c:71
+#: ../vector/v.decimate/main.c:127
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:3
@@ -3490,6 +3519,7 @@ msgid "extract"
 msgstr "矢量导入完成"
 
 #: ../vector/v.extract/main.c:79 ../vector/v.outlier/main.c:72
+#: ../vector/v.decimate/main.c:128
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:6
 #, fuzzy
 msgid "select"
@@ -3500,10 +3530,10 @@ msgstr "无法获取栅格行\n"
 msgid "dissolve"
 msgstr ""
 
-#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:99
+#: ../vector/v.extract/main.c:81 ../vector/v.random/main.c:100
 #: ../vector/v.perturb/main.c:65 ../raster/r.surf.random/main.c:38
 #: ../raster/r.random/main.c:54 ../raster/r.surf.gauss/main.c:40
-#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:47
+#: ../raster/r.random.surface/main.c:59 ../raster/r.random.cells/main.c:49
 #, fuzzy
 msgid "random"
 msgstr "要素类型"
@@ -3525,12 +3555,11 @@ msgstr ""
 #: ../vector/v.extract/main.c:93 ../vector/v.extract/main.c:145
 #: ../vector/v.overlay/main.c:132 ../vector/v.overlay/main.c:142
 #: ../vector/v.to.rast/main.c:88 ../vector/v.to.rast/main.c:94
-#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:241
-#: ../vector/v.in.lidar/main.c:209 ../vector/v.buffer/main.c:308
-#: ../vector/v.in.ogr/main.c:221 ../vector/v.in.ogr/main.c:231
-#: ../vector/v.in.ogr/main.c:241 ../vector/v.in.ogr/main.c:274
-#: ../vector/v.in.ogr/main.c:304 ../raster/r.to.vect/main.c:100
-#: ../raster/r.to.vect/main.c:107
+#: ../vector/v.to.rast/main.c:100 ../vector/v.generalize/main.c:243
+#: ../vector/v.buffer/main.c:307 ../vector/v.in.ogr/main.c:226
+#: ../vector/v.in.ogr/main.c:236 ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:279 ../vector/v.in.ogr/main.c:311
+#: ../raster/r.to.vect/main.c:100 ../raster/r.to.vect/main.c:107
 #, fuzzy
 msgid "Attributes"
 msgstr "无法创建属性表"
@@ -3551,39 +3580,45 @@ msgstr "反向清扫完成"
 #: ../vector/v.edit/args.c:146 ../vector/v.edit/args.c:164
 #: ../vector/v.edit/args.c:199 ../vector/v.in.db/main.c:94
 #: ../vector/v.to.3d/args.c:19 ../vector/v.to.3d/args.c:25
-#: ../vector/v.random/main.c:115 ../vector/v.random/main.c:118
-#: ../vector/v.random/main.c:121 ../vector/v.random/main.c:124
-#: ../vector/v.to.rast/main.c:57 ../vector/v.to.rast/main.c:60
-#: ../vector/v.to.rast/main.c:63 ../vector/v.net.centrality/main.c:121
-#: ../vector/v.net.centrality/main.c:123 ../vector/v.out.ascii/args.c:24
-#: ../vector/v.out.ascii/args.c:28 ../vector/v.out.ascii/args.c:43
-#: ../vector/v.out.ascii/args.c:46 ../vector/v.select/args.c:18
-#: ../vector/v.select/args.c:24 ../vector/v.select/args.c:33
-#: ../vector/v.select/args.c:39 ../vector/v.select/args.c:106
-#: ../vector/v.generalize/main.c:92 ../vector/v.generalize/main.c:229
-#: ../vector/v.generalize/main.c:232 ../vector/v.drape/main.c:67
-#: ../vector/v.drape/main.c:70 ../vector/v.drape/main.c:73
-#: ../vector/v.drape/main.c:78 ../vector/v.category/main.c:85
-#: ../vector/v.category/main.c:89 ../vector/v.category/main.c:93
-#: ../vector/v.reclass/main.c:77 ../vector/v.reclass/main.c:82
-#: ../vector/v.surf.rst/main.c:172 ../vector/v.surf.rst/main.c:184
-#: ../vector/v.out.ogr/args.c:12 ../vector/v.out.ogr/args.c:22
-#: ../vector/v.out.ogr/args.c:104 ../vector/v.buffer/main.c:235
-#: ../vector/v.buffer/main.c:238 ../vector/v.buffer/main.c:241
-#: ../vector/v.buffer/main.c:246 ../vector/v.net.allpairs/main.c:75
-#: ../vector/v.net.allpairs/main.c:81 ../vector/v.net.allpairs/main.c:84
-#: ../vector/v.net.allpairs/main.c:87 ../vector/v.clean/main.c:61
-#: ../vector/v.clean/main.c:64 ../vector/v.db.select/main.c:62
-#: ../vector/v.db.select/main.c:65 ../vector/v.db.select/main.c:68
-#: ../vector/v.db.select/main.c:107 ../vector/v.extrude/main.c:84
+#: ../vector/v.random/main.c:116 ../vector/v.random/main.c:119
+#: ../vector/v.random/main.c:122 ../vector/v.random/main.c:125
+#: ../vector/v.out.lidar/main.c:487 ../vector/v.out.lidar/main.c:491
+#: ../vector/v.out.lidar/main.c:588 ../vector/v.to.rast/main.c:57
+#: ../vector/v.to.rast/main.c:60 ../vector/v.to.rast/main.c:63
+#: ../vector/v.net.centrality/main.c:121 ../vector/v.net.centrality/main.c:123
+#: ../vector/v.out.ascii/args.c:24 ../vector/v.out.ascii/args.c:28
+#: ../vector/v.out.ascii/args.c:43 ../vector/v.out.ascii/args.c:46
+#: ../vector/v.select/args.c:18 ../vector/v.select/args.c:24
+#: ../vector/v.select/args.c:33 ../vector/v.select/args.c:39
+#: ../vector/v.select/args.c:106 ../vector/v.generalize/main.c:92
+#: ../vector/v.generalize/main.c:231 ../vector/v.generalize/main.c:234
+#: ../vector/v.drape/main.c:67 ../vector/v.drape/main.c:70
+#: ../vector/v.drape/main.c:73 ../vector/v.drape/main.c:78
+#: ../vector/v.category/main.c:85 ../vector/v.category/main.c:89
+#: ../vector/v.category/main.c:93 ../vector/v.reclass/main.c:77
+#: ../vector/v.reclass/main.c:82 ../vector/v.surf.rst/main.c:172
+#: ../vector/v.surf.rst/main.c:184 ../vector/v.out.ogr/args.c:12
+#: ../vector/v.out.ogr/args.c:22 ../vector/v.out.ogr/args.c:104
+#: ../vector/v.in.lidar/main.c:184 ../vector/v.in.lidar/main.c:194
+#: ../vector/v.in.lidar/main.c:203 ../vector/v.in.lidar/main.c:213
+#: ../vector/v.in.lidar/main.c:220 ../vector/v.in.lidar/main.c:225
+#: ../vector/v.in.lidar/main.c:280 ../vector/v.in.lidar/main.c:286
+#: ../vector/v.buffer/main.c:235 ../vector/v.buffer/main.c:238
+#: ../vector/v.buffer/main.c:241 ../vector/v.buffer/main.c:246
+#: ../vector/v.net.allpairs/main.c:75 ../vector/v.net.allpairs/main.c:81
+#: ../vector/v.net.allpairs/main.c:84 ../vector/v.net.allpairs/main.c:87
+#: ../vector/v.clean/main.c:61 ../vector/v.clean/main.c:64
+#: ../vector/v.db.select/main.c:64 ../vector/v.db.select/main.c:67
+#: ../vector/v.db.select/main.c:70 ../vector/v.db.select/main.c:76
+#: ../vector/v.db.select/main.c:116 ../vector/v.decimate/main.c:147
+#: ../vector/v.decimate/main.c:150 ../vector/v.extrude/main.c:84
 #: ../vector/v.extrude/main.c:87 ../vector/v.extrude/main.c:90
-#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:157
-#: ../vector/v.in.ogr/main.c:170 ../vector/v.in.ogr/main.c:175
-#: ../vector/v.in.ogr/main.c:184 ../vector/v.in.ogr/main.c:200
-#: ../vector/v.in.ogr/main.c:247 ../vector/v.in.ogr/main.c:290
-#: ../vector/v.to.db/parse.c:45 ../vector/v.to.points/main.c:67
-#: ../vector/v.to.points/main.c:71 ../vector/v.out.postgis/args.c:15
-#: ../vector/v.out.postgis/args.c:19
+#: ../vector/v.extrude/main.c:95 ../vector/v.in.ogr/main.c:174
+#: ../vector/v.in.ogr/main.c:179 ../vector/v.in.ogr/main.c:188
+#: ../vector/v.in.ogr/main.c:204 ../vector/v.in.ogr/main.c:252
+#: ../vector/v.in.ogr/main.c:297 ../vector/v.to.db/parse.c:45
+#: ../vector/v.to.points/main.c:67 ../vector/v.to.points/main.c:71
+#: ../vector/v.out.postgis/args.c:15 ../vector/v.out.postgis/args.c:19
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:10
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:11
@@ -3599,7 +3634,10 @@ msgstr "反向清扫完成"
 #: ../locale/scriptstrings/t.list_to_translate.c:8
 #: ../locale/scriptstrings/t.list_to_translate.c:14
 #: ../locale/scriptstrings/t.list_to_translate.c:15
+#: ../raster3d/r3.in.lidar/main.c:182 ../raster3d/r3.in.lidar/main.c:192
 #: ../raster/r.category/main.c:62 ../raster/r.category/main.c:71
+#: ../raster/r.in.lidar/main.c:160 ../raster/r.in.lidar/main.c:176
+#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:239
 #: ../display/d.rast/main.c:70 ../display/d.rast/main.c:87
 #: ../display/d.vect/main.c:80 ../display/d.vect/main.c:105
 #: ../display/d.vect/main.c:108 ../display/d.vect/main.c:111
@@ -3672,7 +3710,7 @@ msgstr ""
 #: ../vector/v.to.3d/trans3.c:51 ../vector/v.to.3d/trans2.c:49
 #: ../vector/v.to.rast/vect2rast.c:55 ../vector/v.colors.out/make_colors.c:31
 #: ../vector/v.distance/main.c:459 ../vector/v.distance/main.c:540
-#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:162
+#: ../vector/v.db.connect/main.c:213 ../vector/v.db.select/main.c:171
 #: ../vector/v.to.rast3/main.c:80
 #, fuzzy, c-format
 msgid "Database connection not defined for layer <%s>"
@@ -3720,45 +3758,46 @@ msgid ""
 "%d"
 msgstr ""
 
-#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:137
+#: ../vector/v.extract/main.c:346 ../vector/v.net.path/main.c:167
 #: ../vector/v.edit/main.c:105 ../vector/v.edit/main.c:120
 #: ../vector/v.vol.rst/main.c:580 ../vector/v.vol.rst/main.c:583
-#: ../vector/v.net.steiner/main.c:602 ../vector/v.in.db/main.c:151
+#: ../vector/v.net.steiner/main.c:607 ../vector/v.in.db/main.c:151
 #: ../vector/v.net.visibility/main.c:77 ../vector/v.to.3d/main.c:87
 #: ../vector/v.overlay/main.c:213 ../vector/v.build/main.c:154
-#: ../vector/v.random/main.c:225 ../vector/v.net.centrality/main.c:215
-#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:492
-#: ../vector/v.net.iso/main.c:285 ../vector/v.net.connectivity/main.c:136
+#: ../vector/v.random/main.c:226 ../vector/v.net.centrality/main.c:215
+#: ../vector/v.segment/main.c:114 ../vector/v.net.salesman/main.c:551
+#: ../vector/v.net.iso/main.c:374 ../vector/v.net.connectivity/main.c:136
 #: ../vector/v.net.components/main.c:154 ../vector/v.in.dwg/main.c:200
 #: ../vector/v.select/main.c:125 ../vector/v.distance/main.c:356
-#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:334
+#: ../vector/v.parallel/main.c:153 ../vector/v.generalize/main.c:336
 #: ../vector/v.in.region/main.c:75 ../vector/v.voronoi/main.c:215
 #: ../vector/v.hull/main.c:121 ../vector/v.surf.bspline/main.c:347
 #: ../vector/v.net.bridge/main.c:124 ../vector/v.drape/main.c:158
-#: ../vector/v.lidar.edgedetection/main.c:241 ../vector/v.reclass/main.c:117
-#: ../vector/v.surf.rst/main.c:567 ../vector/v.surf.rst/main.c:570
-#: ../vector/v.surf.rst/main.c:726 ../vector/v.perturb/main.c:153
-#: ../vector/v.net.distance/main.c:198 ../vector/v.outlier/main.c:224
-#: ../vector/v.outlier/main.c:229 ../vector/v.outlier/main.c:235
-#: ../vector/v.proj/main.c:374 ../vector/v.patch/main.c:266
-#: ../vector/v.patch/main.c:271 ../vector/v.in.lidar/main.c:502
-#: ../vector/v.external/main.c:148 ../vector/v.delaunay/main.c:126
-#: ../vector/v.buffer/main.c:392 ../vector/v.net.alloc/main.c:248
-#: ../vector/v.transform/main.c:246 ../vector/v.net.allpairs/main.c:136
-#: ../vector/v.lrs/v.lrs.segment/main.c:148
+#: ../vector/v.cluster/main.c:207 ../vector/v.lidar.edgedetection/main.c:241
+#: ../vector/v.reclass/main.c:117 ../vector/v.surf.rst/main.c:567
+#: ../vector/v.surf.rst/main.c:570 ../vector/v.surf.rst/main.c:726
+#: ../vector/v.perturb/main.c:153 ../vector/v.net.distance/main.c:198
+#: ../vector/v.outlier/main.c:224 ../vector/v.outlier/main.c:229
+#: ../vector/v.outlier/main.c:235 ../vector/v.proj/main.c:374
+#: ../vector/v.patch/main.c:281 ../vector/v.patch/main.c:286
+#: ../vector/v.in.lidar/main.c:539 ../vector/v.external/main.c:135
+#: ../vector/v.delaunay/main.c:126 ../vector/v.buffer/main.c:391
+#: ../vector/v.net.alloc/main.c:273 ../vector/v.transform/main.c:246
+#: ../vector/v.net.allpairs/main.c:136 ../vector/v.lrs/v.lrs.segment/main.c:148
 #: ../vector/v.lrs/v.lrs.create/main.c:267
 #: ../vector/v.lrs/v.lrs.create/main.c:273
 #: ../vector/v.lrs/v.lrs.label/main.c:276 ../vector/v.clean/main.c:288
 #: ../vector/v.clean/main.c:295 ../vector/v.net.spanningtree/main.c:107
-#: ../vector/v.split/main.c:169 ../vector/v.mkgrid/main.c:263
+#: ../vector/v.split/main.c:177 ../vector/v.mkgrid/main.c:263
 #: ../vector/v.lidar.correction/main.c:209
 #: ../vector/v.lidar.correction/main.c:215 ../vector/v.qcount/main.c:127
-#: ../vector/v.rectify/main.c:214 ../vector/v.extrude/main.c:196
-#: ../vector/v.sample/main.c:162 ../vector/v.in.ogr/main.c:947
-#: ../vector/v.in.dxf/main.c:144 ../vector/v.net.timetable/main.c:359
-#: ../vector/v.kernel/main.c:338 ../vector/v.build.polylines/main.c:156
-#: ../vector/v.to.points/main.c:129 ../vector/v.in.ascii/main.c:247
-#: ../vector/v.net.flow/main.c:149 ../vector/v.net.flow/main.c:155
+#: ../vector/v.decimate/main.c:389 ../vector/v.rectify/main.c:214
+#: ../vector/v.extrude/main.c:196 ../vector/v.sample/main.c:162
+#: ../vector/v.in.ogr/main.c:920 ../vector/v.in.dxf/main.c:144
+#: ../vector/v.net.timetable/main.c:359 ../vector/v.kernel/main.c:338
+#: ../vector/v.build.polylines/main.c:157 ../vector/v.to.points/main.c:129
+#: ../vector/v.in.ascii/main.c:247 ../vector/v.net.flow/main.c:149
+#: ../vector/v.net.flow/main.c:155 ../raster3d/r3.flow/main.c:396
 #: ../doc/vector/v.example/main.c:98 ../raster/r.volume/main.c:155
 #: ../raster/r.random/random.c:63 ../raster/r.drain/main.c:197
 #: ../raster/r.carve/vect.c:32 ../raster/r.flow/io.c:178
@@ -3802,11 +3841,11 @@ msgstr "字段类型不支持"
 msgid "Format <%s> does not support writing"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../vector/v.external.out/main.c:44 ../vector/v.out.svg/main.c:78
-#: ../vector/v.out.ascii/main.c:48 ../vector/v.colors.out/main.c:51
-#: ../vector/v.out.vtk/main.c:48 ../vector/v.out.ogr/main.c:82
-#: ../vector/v.out.pov/main.c:47 ../vector/v.out.dxf/main.c:57
-#: ../vector/v.out.postgis/main.c:45
+#: ../vector/v.external.out/main.c:44 ../vector/v.out.lidar/main.c:472
+#: ../vector/v.out.svg/main.c:78 ../vector/v.out.ascii/main.c:48
+#: ../vector/v.colors.out/main.c:51 ../vector/v.out.vtk/main.c:48
+#: ../vector/v.out.ogr/main.c:82 ../vector/v.out.pov/main.c:47
+#: ../vector/v.out.dxf/main.c:57 ../vector/v.out.postgis/main.c:45
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:3
 #: ../locale/scriptstrings/d.out.file_to_translate.c:3
 #: ../locale/scriptstrings/d.to.rast_to_translate.c:3
@@ -3959,9 +3998,9 @@ msgstr "导入的ASCII栅格文件"
 msgid "Name for output file where to save current settings"
 msgstr "包含错误矩阵和K曲线的输出文件的名称"
 
-#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:40
+#: ../vector/v.external.out/args.c:62 ../vector/v.external/args.c:42
 #: ../raster/r.external.out/main.c:271 ../raster/r.external/main.c:95
-#: ../raster/r.in.gdal/main.c:177
+#: ../raster/r.in.gdal/main.c:197
 #, fuzzy
 msgid "List supported formats and exit"
 msgstr "列出支持的格式然后退出"
@@ -3984,7 +4023,7 @@ msgstr "打印当前连接参数并退出"
 msgid "Print current status in shell script style"
 msgstr "以shell脚本的样式输出统计值"
 
-#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:432
+#: ../vector/v.external.out/args.c:90 ../raster/r.resamp.filter/main.c:437
 #, fuzzy, c-format
 msgid "%s= and %s=/%s= are mutually exclusive"
 msgstr "必须指定'from_table'或'select'选项。"
@@ -4000,18 +4039,18 @@ msgid "%s= must be specified"
 msgstr "必须指定两个图层"
 
 #: ../vector/v.external.out/list.c:102 ../vector/v.external/list.c:94
-#: ../vector/v.in.ogr/main.c:326 ../raster/r.external/list.c:23
-#: ../raster/r.in.gdal/main.c:254
+#: ../vector/v.in.ogr/main.c:334 ../raster/r.external/list.c:23
+#: ../raster/r.in.gdal/main.c:288
 #, fuzzy
 msgid "Supported formats:"
 msgstr "列出支持的格式然后退出"
 
-#: ../vector/v.net.path/main.c:41 ../vector/v.net.steiner/main.c:346
+#: ../vector/v.net.path/main.c:43 ../vector/v.net.steiner/main.c:347
 #: ../vector/v.net.visibility/main.c:46 ../vector/v.net.centrality/main.c:97
-#: ../vector/v.net.salesman/main.c:127 ../vector/v.net.iso/main.c:72
+#: ../vector/v.net.salesman/main.c:128 ../vector/v.net.iso/main.c:73
 #: ../vector/v.net.connectivity/main.c:53 ../vector/v.net.components/main.c:73
-#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:46
-#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:63
+#: ../vector/v.net.bridge/main.c:48 ../vector/v.net/main.c:48
+#: ../vector/v.net.distance/main.c:67 ../vector/v.net.alloc/main.c:58
 #: ../vector/v.net.allpairs/main.c:62 ../vector/v.lrs/v.lrs.segment/main.c:73
 #: ../vector/v.lrs/v.lrs.where/main.c:59
 #: ../vector/v.lrs/v.lrs.create/main.c:123
@@ -4022,67 +4061,68 @@ msgstr "列出支持的格式然后退出"
 msgid "network"
 msgstr "读取 %s ..."
 
-#: ../vector/v.net.path/main.c:42 ../vector/v.net.visibility/main.c:47
+#: ../vector/v.net.path/main.c:44 ../vector/v.net.visibility/main.c:47
 #: ../vector/v.net.distance/main.c:68 ../vector/v.net.allpairs/main.c:63
 #: ../vector/v.net.timetable/main.c:262 ../display/d.geodesic/main.c:49
 #: ../display/d.path/main.c:50
 msgid "shortest path"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:43
+#: ../vector/v.net.path/main.c:45
 msgid "Finds shortest path on vector network."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:51 ../vector/v.net.steiner/main.c:362
-#: ../vector/v.net.salesman/main.c:146 ../vector/v.net.iso/main.c:92
-#: ../vector/v.net.distance/main.c:89 ../vector/v.net.alloc/main.c:84
-#: ../display/d.path/main.c:60
-#, fuzzy
-msgid "Arc type"
-msgstr "要素类型"
-
-#: ../vector/v.net.path/main.c:56 ../vector/v.net.steiner/main.c:367
-#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:140
-#: ../vector/v.net.iso/main.c:86 ../vector/v.net.connectivity/main.c:64
+#: ../vector/v.net.path/main.c:54 ../vector/v.net.steiner/main.c:368
+#: ../vector/v.net.centrality/main.c:109 ../vector/v.net.salesman/main.c:149
+#: ../vector/v.net.iso/main.c:104 ../vector/v.net.connectivity/main.c:64
 #: ../vector/v.net.components/main.c:84 ../vector/v.net.bridge/main.c:60
-#: ../vector/v.net/args.c:55 ../vector/v.net.distance/main.c:82
-#: ../vector/v.net.alloc/main.c:78 ../vector/v.net.allpairs/main.c:74
+#: ../vector/v.net/args.c:56 ../vector/v.net.distance/main.c:82
+#: ../vector/v.net.alloc/main.c:91 ../vector/v.net.allpairs/main.c:74
 #: ../vector/v.net.spanningtree/main.c:59 ../vector/v.net.timetable/main.c:274
 #: ../vector/v.net.flow/main.c:70 ../display/d.path/main.c:70
 msgid "Arc layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:61 ../vector/v.net.centrality/main.c:115
-#: ../vector/v.net.iso/main.c:97 ../vector/v.net.connectivity/main.c:70
+#: ../vector/v.net.path/main.c:61 ../vector/v.net.steiner/main.c:363
+#: ../vector/v.net.salesman/main.c:156 ../vector/v.net.iso/main.c:111
+#: ../vector/v.net/args.c:63 ../vector/v.net.distance/main.c:89
+#: ../vector/v.net.alloc/main.c:98 ../display/d.path/main.c:60
+#, fuzzy
+msgid "Arc type"
+msgstr "要素类型"
+
+#: ../vector/v.net.path/main.c:67 ../vector/v.net.centrality/main.c:115
+#: ../vector/v.net.iso/main.c:117 ../vector/v.net.connectivity/main.c:70
 #: ../vector/v.net.components/main.c:90 ../vector/v.net.bridge/main.c:66
-#: ../vector/v.net/args.c:62 ../vector/v.net.distance/main.c:95
-#: ../vector/v.net.alloc/main.c:89 ../vector/v.net.allpairs/main.c:80
+#: ../vector/v.net/args.c:70 ../vector/v.net.distance/main.c:95
+#: ../vector/v.net.alloc/main.c:104 ../vector/v.net.allpairs/main.c:80
 #: ../vector/v.net.spanningtree/main.c:65 ../vector/v.net.timetable/main.c:280
 #: ../vector/v.net.flow/main.c:76 ../display/d.path/main.c:75
 msgid "Node layer"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:66
+#: ../vector/v.net.path/main.c:72
 msgid ""
 "Name of file containing start and end points. If not given, read from stdin"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:73 ../vector/v.net.centrality/main.c:129
-#: ../vector/v.net.salesman/main.c:157 ../vector/v.net.iso/main.c:102
+#: ../vector/v.net.path/main.c:79 ../vector/v.net.centrality/main.c:129
+#: ../vector/v.net.salesman/main.c:168 ../vector/v.net.iso/main.c:122
 #: ../vector/v.net.connectivity/main.c:77 ../vector/v.net.components/main.c:97
 #: ../vector/v.net.bridge/main.c:73 ../vector/v.net.distance/main.c:141
-#: ../vector/v.net.alloc/main.c:95 ../vector/v.net.allpairs/main.c:93
+#: ../vector/v.net.alloc/main.c:110 ../vector/v.net.allpairs/main.c:93
 #: ../vector/v.net.spanningtree/main.c:72 ../vector/v.net.timetable/main.c:288
 #: ../vector/v.net.flow/main.c:90 ../display/d.path/main.c:81
 msgid "Arc forward/both direction(s) cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:74 ../vector/v.net.path/main.c:81
-#: ../vector/v.net.path/main.c:88 ../vector/v.net.centrality/main.c:110
+#: ../vector/v.net.path/main.c:80 ../vector/v.net.path/main.c:87
+#: ../vector/v.net.path/main.c:94 ../vector/v.net.centrality/main.c:110
 #: ../vector/v.net.centrality/main.c:116 ../vector/v.net.centrality/main.c:130
 #: ../vector/v.net.centrality/main.c:136 ../vector/v.net.centrality/main.c:143
-#: ../vector/v.net.iso/main.c:103 ../vector/v.net.iso/main.c:108
-#: ../vector/v.net.iso/main.c:113 ../vector/v.net.connectivity/main.c:65
+#: ../vector/v.net.salesman/main.c:169 ../vector/v.net.salesman/main.c:177
+#: ../vector/v.net.iso/main.c:123 ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:133 ../vector/v.net.connectivity/main.c:65
 #: ../vector/v.net.connectivity/main.c:71
 #: ../vector/v.net.connectivity/main.c:78
 #: ../vector/v.net.connectivity/main.c:84
@@ -4094,10 +4134,11 @@ msgstr ""
 #: ../vector/v.net.bridge/main.c:87 ../vector/v.net.distance/main.c:83
 #: ../vector/v.net.distance/main.c:90 ../vector/v.net.distance/main.c:96
 #: ../vector/v.net.distance/main.c:142 ../vector/v.net.distance/main.c:148
-#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:96
-#: ../vector/v.net.alloc/main.c:103 ../vector/v.net.alloc/main.c:110
-#: ../vector/v.net.allpairs/main.c:94 ../vector/v.net.allpairs/main.c:100
-#: ../vector/v.net.allpairs/main.c:107 ../vector/v.net.spanningtree/main.c:60
+#: ../vector/v.net.distance/main.c:154 ../vector/v.net.alloc/main.c:77
+#: ../vector/v.net.alloc/main.c:111 ../vector/v.net.alloc/main.c:118
+#: ../vector/v.net.alloc/main.c:125 ../vector/v.net.allpairs/main.c:94
+#: ../vector/v.net.allpairs/main.c:100 ../vector/v.net.allpairs/main.c:107
+#: ../vector/v.net.spanningtree/main.c:60
 #: ../vector/v.net.spanningtree/main.c:66
 #: ../vector/v.net.spanningtree/main.c:73
 #: ../vector/v.net.spanningtree/main.c:79 ../vector/v.net.timetable/main.c:275
@@ -4110,50 +4151,86 @@ msgstr ""
 msgid "Cost"
 msgstr "对比"
 
-#: ../vector/v.net.path/main.c:80 ../vector/v.net.centrality/main.c:135
-#: ../vector/v.net.iso/main.c:107 ../vector/v.net.connectivity/main.c:83
+#: ../vector/v.net.path/main.c:86 ../vector/v.net.centrality/main.c:135
+#: ../vector/v.net.iso/main.c:127 ../vector/v.net.connectivity/main.c:83
 #: ../vector/v.net.components/main.c:103 ../vector/v.net.bridge/main.c:79
-#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:102
+#: ../vector/v.net.distance/main.c:147 ../vector/v.net.alloc/main.c:117
 #: ../vector/v.net.allpairs/main.c:99 ../vector/v.net.timetable/main.c:295
 #: ../vector/v.net.flow/main.c:96 ../display/d.path/main.c:87
 msgid "Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:87 ../vector/v.net.centrality/main.c:142
-#: ../vector/v.net.iso/main.c:112 ../vector/v.net.connectivity/main.c:91
+#: ../vector/v.net.path/main.c:93 ../vector/v.net.centrality/main.c:142
+#: ../vector/v.net.iso/main.c:132 ../vector/v.net.connectivity/main.c:91
 #: ../vector/v.net.components/main.c:110 ../vector/v.net.bridge/main.c:86
-#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:109
+#: ../vector/v.net.distance/main.c:153 ../vector/v.net.alloc/main.c:124
 #: ../vector/v.net.allpairs/main.c:106 ../vector/v.net.spanningtree/main.c:78
 #: ../vector/v.net.timetable/main.c:302 ../vector/v.net.flow/main.c:102
 #, fuzzy
 msgid "Node cost column (number)"
 msgstr "列数"
 
-#: ../vector/v.net.path/main.c:95
+#: ../vector/v.net.path/main.c:101
 #, fuzzy
 msgid "Maximum distance to the network"
 msgstr "点到网络的最小距离"
 
-#: ../vector/v.net.path/main.c:96
+#: ../vector/v.net.path/main.c:102
 msgid ""
 "If start/end are given as coordinates. If start/end point is outside this "
 "threshold, the path is not found and error message is printed. To speed up "
 "the process, keep this value as low as possible."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:105 ../vector/v.net.steiner/main.c:397
-#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:180
-#: ../vector/v.net.iso/main.c:133 ../vector/v.net.distance/main.c:159
-#: ../vector/v.net.alloc/main.c:123 ../vector/v.net.allpairs/main.c:112
+#: ../vector/v.net.path/main.c:110 ../vector/v.net.salesman/main.c:181
+#: ../vector/v.net.iso/main.c:137 ../vector/v.net.alloc/main.c:129
+msgid "Use turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:111 ../vector/v.net.path/main.c:119
+#: ../vector/v.net.path/main.c:127 ../vector/v.net.salesman/main.c:182
+#: ../vector/v.net.salesman/main.c:189 ../vector/v.net.salesman/main.c:196
+#: ../vector/v.net.iso/main.c:138 ../vector/v.net.iso/main.c:146
+#: ../vector/v.net.iso/main.c:154 ../vector/v.net/args.c:64
+#: ../vector/v.net/args.c:111 ../vector/v.net/args.c:123
+#: ../vector/v.net.alloc/main.c:130 ../vector/v.net.alloc/main.c:138
+#: ../vector/v.net.alloc/main.c:146
+#, fuzzy
+msgid "Turntable"
+msgstr "栅格图的名称"
+
+#: ../vector/v.net.path/main.c:116 ../vector/v.net.salesman/main.c:187
+#: ../vector/v.net.iso/main.c:143 ../vector/v.net.alloc/main.c:135
+#, fuzzy
+msgid "Layer with turntable"
+msgstr "图层 '%s' 不可用"
+
+#: ../vector/v.net.path/main.c:118 ../vector/v.net.path/main.c:126
+#: ../vector/v.net.salesman/main.c:188 ../vector/v.net.salesman/main.c:195
+#: ../vector/v.net.iso/main.c:145 ../vector/v.net.iso/main.c:153
+#: ../vector/v.net.alloc/main.c:137 ../vector/v.net.alloc/main.c:145
+msgid "Relevant only with -t flag"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:124 ../vector/v.net.salesman/main.c:194
+#: ../vector/v.net.iso/main.c:151 ../vector/v.net/args.c:114
+#: ../vector/v.net.alloc/main.c:143
+msgid "Layer with unique categories used in turntable"
+msgstr ""
+
+#: ../vector/v.net.path/main.c:132 ../vector/v.net.steiner/main.c:398
+#: ../vector/v.net.centrality/main.c:188 ../vector/v.net.salesman/main.c:208
+#: ../vector/v.net.iso/main.c:159 ../vector/v.net.distance/main.c:159
+#: ../vector/v.net.alloc/main.c:151 ../vector/v.net.allpairs/main.c:112
 #: ../vector/v.net.spanningtree/main.c:84 ../display/d.path/main.c:122
 msgid "Use geodesic calculation for longitude-latitude locations"
 msgstr ""
 
-#: ../vector/v.net.path/main.c:109 ../vector/v.net.distance/main.c:165
+#: ../vector/v.net.path/main.c:136 ../vector/v.net.distance/main.c:165
 msgid "Write output as original input segments, not each path as one line."
 msgstr ""
 
-#: ../vector/v.net.path/main.c:123 ../vector/v.net.centrality/main.c:222
+#: ../vector/v.net.path/main.c:148 ../vector/v.net.centrality/main.c:222
 #: ../vector/v.net.distance/main.c:205 ../vector/v.net.allpairs/main.c:142
 #: ../vector/v.net.spanningtree/main.c:113 ../display/d.path/main.c:178
 msgid "The current projection is not longitude-latitude"
@@ -4162,10 +4239,10 @@ msgstr ""
 #: ../vector/v.net.path/path.c:49 ../vector/v.segment/main.c:98
 #: ../vector/v.lrs/v.lrs.segment/main.c:133 ../raster3d/r3.support/main.c:167
 #: ../general/g.cairocomp/main.c:46 ../raster/r.in.mat/main.c:125
-#: ../raster/r.support/main.c:180 ../raster/r.series.accumulate/main.c:221
-#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:53
+#: ../raster/r.support/main.c:182 ../raster/r.series.accumulate/main.c:221
+#: ../raster/r.topmodel/file_io.c:28 ../raster/r.topmodel/file_io.c:136
 #: ../raster/r.topmodel/file_io.c:161 ../raster/r.in.xyz/main.c:548
-#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:94
+#: ../raster/r.series/main.c:223 ../raster/r.mapcalc/main.c:48
 #: ../display/d.linegraph/main.c:205 ../display/d.linegraph/main.c:221
 #: ../display/d.linegraph/main.c:361 ../display/d.where/main.c:163
 #: ../display/d.text/main.c:364
@@ -4181,8 +4258,8 @@ msgstr "%d 个点没有类别,将被忽略"
 #: ../vector/v.net.path/path.c:109 ../vector/v.overlay/main.c:580
 #: ../vector/v.net.centrality/main.c:266 ../vector/v.net.components/main.c:190
 #: ../vector/v.in.dwg/main.c:240 ../vector/v.distance/main.c:1356
-#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/main.c:612
-#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1177
+#: ../vector/v.net.distance/main.c:291 ../vector/v.in.lidar/attributes.c:135
+#: ../vector/v.net.allpairs/main.c:179 ../vector/v.in.ogr/main.c:1150
 #: ../vector/v.net.timetable/main.c:103 ../vector/v.to.points/main.c:182
 #: ../vector/v.net.flow/main.c:181 ../raster/r.contour/main.c:183
 #: ../raster/r.stream.extract/close.c:188
@@ -4211,22 +4288,22 @@ msgstr "无法为表%s授予权限"
 msgid "Wrong input format: %s"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:188
+#: ../vector/v.net.path/path.c:168 ../vector/v.net.path/path.c:190
 #, fuzzy, c-format
 msgid "No point with category [%d]"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.net.path/path.c:209
+#: ../vector/v.net.path/path.c:220
 #, c-format
 msgid "Point with category [%d] is not reachable from point with category [%d]"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:266
+#: ../vector/v.net.path/path.c:288
 #, c-format
 msgid "Point %f,%f is not reachable from point %f,%f"
 msgstr ""
 
-#: ../vector/v.net.path/path.c:312 ../vector/v.net.centrality/main.c:69
+#: ../vector/v.net.path/path.c:334 ../vector/v.net.centrality/main.c:69
 #: ../vector/v.net.components/main.c:39 ../vector/v.net.distance/main.c:363
 #: ../vector/v.net.allpairs/main.c:271 ../vector/v.net.timetable/main.c:134
 #: ../vector/v.net.timetable/main.c:156 ../vector/v.net.flow/main.c:262
@@ -4235,17 +4312,17 @@ msgstr ""
 msgid "Cannot insert new record: %s"
 msgstr "无法插入新行:%s"
 
-#: ../vector/v.net.path/path.c:330
+#: ../vector/v.net.path/path.c:352
 #, fuzzy, c-format
 msgid "[%d] input format errors"
 msgstr "%d 条记录更新时发生错误"
 
-#: ../vector/v.net.path/path.c:332
+#: ../vector/v.net.path/path.c:354
 #, fuzzy, c-format
 msgid "[%d] points of given category missing"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.net.path/path.c:334
+#: ../vector/v.net.path/path.c:356
 #, c-format
 msgid "%d destination(s) unreachable (including points out of threshold)"
 msgstr ""
@@ -4256,7 +4333,7 @@ msgstr ""
 #: ../vector/v.select/main.c:49 ../vector/v.parallel/main.c:50
 #: ../vector/v.in.region/main.c:42 ../vector/v.voronoi/main.c:124
 #: ../vector/v.hull/main.c:53 ../vector/v.drape/main.c:57
-#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:69
+#: ../vector/v.perturb/main.c:63 ../vector/v.patch/main.c:70
 #: ../vector/v.delaunay/main.c:86 ../vector/v.buffer/main.c:225
 #: ../vector/v.transform/main.c:71 ../vector/v.clean/main.c:53
 #: ../vector/v.split/main.c:55 ../vector/v.mkgrid/main.c:71
@@ -4266,7 +4343,7 @@ msgstr ""
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:3
 #: ../locale/scriptstrings/v.to.lines_to_translate.c:3
 #: ../raster/r.circle/main.c:53 ../raster/r.thin/main.c:58
-#: ../raster/r.patch/main.c:56 ../raster/r.to.vect/main.c:72
+#: ../raster/r.patch/main.c:59 ../raster/r.to.vect/main.c:72
 #, fuzzy
 msgid "geometry"
 msgstr "将要创建的矢量文件"
@@ -4319,17 +4396,17 @@ msgid "Unable to get category list <%s>"
 msgstr "无法打开 ascii 文件 [%s]"
 
 #: ../vector/v.edit/main.c:87 ../vector/v.what.rast/main.c:121
-#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:119
-#: ../vector/v.net/args.c:125 ../vector/v.net/args.c:131
-#: ../vector/v.net/args.c:135 ../vector/v.net/args.c:145
-#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:118
-#: ../vector/v.in.ogr/main.c:345 ../raster/r.proj/main.c:299
+#: ../vector/v.select/main.c:89 ../vector/v.net/args.c:152
+#: ../vector/v.net/args.c:159 ../vector/v.net/args.c:165
+#: ../vector/v.net/args.c:169 ../vector/v.net/args.c:179
+#: ../vector/v.proj/main.c:200 ../vector/v.external/main.c:105
+#: ../vector/v.in.ogr/main.c:353 ../raster/r.proj/main.c:300
 #, fuzzy, c-format
 msgid "Required parameter <%s> not set"
 msgstr "需要的 g3d 文件未找到"
 
-#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:492
-#: ../vector/v.in.ogr/main.c:530 ../vector/v.kernel/main.c:230
+#: ../vector/v.edit/main.c:97 ../vector/v.in.lidar/main.c:529
+#: ../vector/v.in.ogr/main.c:503 ../vector/v.kernel/main.c:230
 #, fuzzy, c-format
 msgid "Vector map <%s> already exists"
 msgstr "dig_att文件不存在。"
@@ -4624,6 +4701,7 @@ msgid "Name of file containing data in GRASS ASCII vector format"
 msgstr "包含SQL语句的文件名"
 
 #: ../vector/v.edit/args.c:90 ../vector/v.edit/args.c:209
+#: ../vector/v.in.ogr/main.c:160
 #: ../locale/scriptstrings/i.spectral_to_translate.c:6
 #: ../locale/scriptstrings/i.spectral_to_translate.c:7
 #: ../locale/scriptstrings/i.spectral_to_translate.c:8
@@ -4644,12 +4722,15 @@ msgstr "包含SQL语句的文件名"
 #: ../locale/scriptstrings/t.remove_to_translate.c:11
 #: ../locale/scriptstrings/r.import_to_translate.c:6
 #: ../locale/scriptstrings/r.import_to_translate.c:8
+#: ../raster3d/r3.flow/main.c:188 ../raster3d/r3.flow/main.c:195
+#: ../raster3d/r3.flow/main.c:205 ../raster3d/r3.in.lidar/main.c:134
 #: ../raster/r.spread/main.c:125 ../raster/r.spread/main.c:139
 #: ../raster/r.spread/main.c:151 ../raster/r.spread/main.c:164
 #: ../raster/r.spread/main.c:177 ../raster/r.spread/main.c:189
 #: ../raster/r.spread/main.c:201 ../raster/r.in.xyz/main.c:192
 #: ../raster/r.in.xyz/main.c:201 ../raster/r.in.xyz/main.c:209
 #: ../raster/r.in.xyz/main.c:220 ../raster/r.in.xyz/main.c:230
+#: ../raster/r.in.lidar/main.c:116 ../raster/r.in.lidar/main.c:127
 #: ../raster/r.external/main.c:66 ../raster/r.external/main.c:74
 #: ../raster/r.external/main.c:83 ../raster/r.sim/r.sim.sediment/main.c:156
 #: ../raster/r.sim/r.sim.sediment/main.c:164
@@ -4813,11 +4894,11 @@ msgstr ""
 #: ../vector/v.vect.stats/main.c:295 ../vector/v.vect.stats/main.c:371
 #: ../vector/v.to.rast/support.c:127 ../vector/v.to.rast/support.c:286
 #: ../vector/v.to.rast/support.c:439 ../vector/v.distance/main.c:493
-#: ../vector/v.generalize/misc.c:160 ../vector/v.surf.bspline/crosscorr.c:114
-#: ../vector/v.buffer/main.c:413 ../vector/v.extrude/main.c:224
+#: ../vector/v.generalize/misc.c:170 ../vector/v.surf.bspline/crosscorr.c:114
+#: ../vector/v.buffer/main.c:412 ../vector/v.extrude/main.c:224
 #: ../vector/v.univar/main.c:229 ../vector/v.what.rast3/main.c:120
 #: ../doc/vector/v.example/main.c:105 ../display/d.vect/shape.c:38
-#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:37
+#: ../display/d.vect.thematic/plot1.c:105 ../display/d.vect.chart/plot.c:38
 #, fuzzy, c-format
 msgid "Database connection not defined for layer %d"
 msgstr "数据库连接未定义"
@@ -4956,9 +5037,9 @@ msgid "Remove existing color table"
 msgstr "保留已有的色彩表"
 
 #: ../vector/v.colors/main.c:123
-#: ../locale/scriptstrings/g.extension_to_translate.c:27
+#: ../locale/scriptstrings/g.extension_to_translate.c:30
 #: ../locale/scriptstrings/t.rast.colors_to_translate.c:15
-#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:107
+#: ../locale/scriptstrings/r.mask_to_translate.c:20 ../raster/r.null/main.c:108
 #: ../raster/r.colors/edit_colors.c:116
 #, fuzzy
 msgid "Remove"
@@ -5023,7 +5104,7 @@ msgstr ""
 #: ../vector/v.colors/main.c:207 ../raster/r.series.accumulate/main.c:206
 #: ../raster/r.series.interp/main.c:118 ../raster/r.series.interp/main.c:122
 #: ../raster/r.series.interp/main.c:134 ../raster/r.series.interp/main.c:138
-#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:159
+#: ../raster/r.series/main.c:204 ../raster/r.mapcalc/main.c:117
 #: ../raster/r.external/main.c:159 ../raster/r.neighbors/main.c:266
 #, c-format
 msgid "%s= and %s= are mutually exclusive"
@@ -5039,8 +5120,7 @@ msgstr "必须指定'from_table'或'select'选项。"
 msgid "%s=, %s= and %s= are mutually exclusive"
 msgstr "必须指定'from_table'或'select'选项。"
 
-#: ../vector/v.colors/main.c:226 ../general/g.list/main.c:192
-#: ../general/g.list/main.c:196 ../raster/r.out.bin/main.c:379
+#: ../vector/v.colors/main.c:226 ../raster/r.out.bin/main.c:379
 #: ../raster/r.in.bin/main.c:462
 #, c-format
 msgid "-%c and -%c are mutually exclusive"
@@ -5066,6 +5146,7 @@ msgid "Color table exists. Exiting."
 msgstr ""
 
 #: ../vector/v.colors/main.c:267 ../vector/v.to.rast/vect2rast.c:48
+#: ../raster3d/r3.flow/main.c:414
 #, fuzzy, c-format
 msgid "Vector map <%s> is not 3D"
 msgstr "矢量地图 %s - 未发现"
@@ -5091,7 +5172,7 @@ msgstr ""
 msgid "Color table <%s> not found"
 msgstr "未找到栅格图<%s>"
 
-#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:369
+#: ../vector/v.colors/main.c:316 ../raster/r.grow.distance/main.c:384
 #: ../raster/r.colors.out/raster_main.c:69 ../raster/r.fill.dir/main.c:150
 #: ../raster/r.colors/edit_colors.c:396
 #, fuzzy, c-format
@@ -5100,13 +5181,14 @@ msgstr "无法为色彩条读取颜色"
 
 #: ../vector/v.colors/main.c:320 ../raster3d/r3.timestamp/main.c:72
 #: ../raster3d/r3.out.bin/main.c:299 ../raster3d/r3.to.rast/main.c:222
-#: ../raster3d/r3.stats/main.c:96 ../raster3d/r3.cross.rast/main.c:245
-#: ../raster3d/r3.null/main.c:103 ../raster3d/r3.support/main.c:135
-#: ../raster3d/r3.out.ascii/main.c:326 ../raster3d/r3.out.v5d/main.c:307
-#: ../raster3d/r3.mask/main.c:58 ../raster3d/r3.out.vtk/main.c:142
-#: ../raster3d/r3.neighbors/main.c:229 ../raster3d/r3.out.netcdf/main.c:600
-#: ../raster3d/r3.retile/main.c:113 ../general/g.region/main.c:444
-#: ../raster/r.colors/edit_colors.c:400 ../raster/r.univar/r3.univar_main.c:144
+#: ../raster3d/r3.flow/main.c:87 ../raster3d/r3.stats/main.c:96
+#: ../raster3d/r3.cross.rast/main.c:245 ../raster3d/r3.null/main.c:103
+#: ../raster3d/r3.support/main.c:135 ../raster3d/r3.out.ascii/main.c:326
+#: ../raster3d/r3.out.v5d/main.c:307 ../raster3d/r3.mask/main.c:58
+#: ../raster3d/r3.out.vtk/main.c:142 ../raster3d/r3.neighbors/main.c:229
+#: ../raster3d/r3.out.netcdf/main.c:600 ../raster3d/r3.retile/main.c:113
+#: ../general/g.region/main.c:444 ../raster/r.colors/edit_colors.c:400
+#: ../raster/r.univar/r3.univar_main.c:144
 #: ../raster/r.univar/r3.univar_main.c:182
 #, c-format
 msgid "3D raster map <%s> not found"
@@ -5138,8 +5220,9 @@ msgstr "读取地图"
 #: ../vector/v.colors/scan_z.c:36 ../vector/v.colors/scan_cats.c:24
 #: ../vector/v.vol.rst/user1.c:140 ../vector/v.info/level1.c:37
 #: ../vector/v.to.3d/trans3.c:85 ../vector/v.to.3d/trans2.c:84
-#: ../vector/v.colors.out/scan_cats.c:32 ../vector/v.label.sa/labels.c:141
-#: ../vector/v.perturb/main.c:181 ../vector/v.label/main.c:293
+#: ../vector/v.out.lidar/main.c:732 ../vector/v.colors.out/scan_cats.c:32
+#: ../vector/v.label.sa/labels.c:141 ../vector/v.perturb/main.c:181
+#: ../vector/v.label/main.c:293 ../vector/v.decimate/main.c:404
 #: ../raster/r.walk/main.c:688 ../raster/r.walk/main.c:754
 #: ../raster/r.drain/main.c:283 ../raster/r.cost/main.c:548
 #: ../raster/r.cost/main.c:618 ../display/d.vect/dir.c:30
@@ -5185,7 +5268,7 @@ msgstr ""
 msgid "Converting color rules into categories..."
 msgstr "写入新文件...\n"
 
-#: ../vector/v.colors/write_rgb.c:37
+#: ../vector/v.colors/write_rgb.c:37 ../vector/v.what.rast/main.c:177
 #, fuzzy, c-format
 msgid "Unable to add column <%s> to table <%s>"
 msgstr "无法打开输出文件 <%s>"
@@ -5240,6 +5323,7 @@ msgid "Point out of range"
 msgstr "指定点的数量"
 
 #: ../vector/v.vol.rst/main.c:236 ../vector/v.to.rast3/main.c:50
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:5
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:4
@@ -5248,15 +5332,17 @@ msgstr "指定点的数量"
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:5
 #: ../raster3d/r3.timestamp/main.c:46 ../raster3d/r3.info/main.c:77
 #: ../raster3d/r3.out.bin/main.c:207 ../raster3d/r3.gwflow/main.c:161
-#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.stats/main.c:50
+#: ../raster3d/r3.to.rast/main.c:209 ../raster3d/r3.flow/test_main.c:45
+#: ../raster3d/r3.flow/main.c:181 ../raster3d/r3.stats/main.c:50
 #: ../raster3d/r3.cross.rast/main.c:231 ../raster3d/r3.in.v5d/main.c:180
 #: ../raster3d/r3.in.ascii/main.c:315 ../raster3d/r3.null/main.c:188
 #: ../raster3d/r3.support/main.c:51 ../raster3d/r3.out.ascii/main.c:304
 #: ../raster3d/r3.in.bin/main.c:254 ../raster3d/r3.out.v5d/main.c:286
 #: ../raster3d/r3.mask/main.c:135 ../raster3d/r3.out.vtk/main.c:378
-#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.out.netcdf/main.c:589
-#: ../raster3d/r3.retile/main.c:98 ../raster3d/r3.mkdspf/main.c:81
-#: ../raster/r.to.rast3elev/main.c:364 ../raster/r.to.rast3/main.c:199
+#: ../raster3d/r3.neighbors/main.c:210 ../raster3d/r3.gradient/main.c:45
+#: ../raster3d/r3.out.netcdf/main.c:589 ../raster3d/r3.retile/main.c:98
+#: ../raster3d/r3.mkdspf/main.c:81 ../raster/r.to.rast3elev/main.c:364
+#: ../raster/r.to.rast3/main.c:199
 msgid "voxel"
 msgstr ""
 
@@ -5350,14 +5436,15 @@ msgstr "输出矢量点文件的偏差"
 #: ../raster/r.slope.aspect/main.c:204 ../raster/r.slope.aspect/main.c:211
 #: ../raster/r.slope.aspect/main.c:218 ../raster/r.slope.aspect/main.c:225
 #: ../raster/r.slope.aspect/main.c:232 ../raster/r.slope.aspect/main.c:239
-#: ../raster/r.watershed/front/main.c:133
-#: ../raster/r.watershed/front/main.c:140
-#: ../raster/r.watershed/front/main.c:146
-#: ../raster/r.watershed/front/main.c:152
-#: ../raster/r.watershed/front/main.c:158
+#: ../raster/r.watershed/front/main.c:134
+#: ../raster/r.watershed/front/main.c:141
+#: ../raster/r.watershed/front/main.c:148
+#: ../raster/r.watershed/front/main.c:154
+#: ../raster/r.watershed/front/main.c:160
 #: ../raster/r.watershed/front/main.c:166
 #: ../raster/r.watershed/front/main.c:174
-#: ../raster/r.watershed/front/main.c:181
+#: ../raster/r.watershed/front/main.c:182
+#: ../raster/r.watershed/front/main.c:189
 #, fuzzy
 msgid "Outputs"
 msgstr "输出图"
@@ -5572,15 +5659,15 @@ msgstr "使用的插值方法"
 msgid "Input failed"
 msgstr "输入失败"
 
-#: ../vector/v.vol.rst/user3.c:549
+#: ../vector/v.vol.rst/user3.c:548
 #, fuzzy
 msgid "Secpar_loop failed"
 msgstr "输入失败"
 
-#: ../vector/v.vol.rst/user3.c:589 ../vector/v.vol.rst/user3.c:600
-#: ../vector/v.vol.rst/user3.c:611 ../vector/v.vol.rst/user3.c:622
-#: ../vector/v.vol.rst/user3.c:633 ../vector/v.vol.rst/user3.c:644
-#: ../vector/v.vol.rst/user3.c:655 ../vector/v.vol.rst/user3.c:666
+#: ../vector/v.vol.rst/user3.c:588 ../vector/v.vol.rst/user3.c:599
+#: ../vector/v.vol.rst/user3.c:610 ../vector/v.vol.rst/user3.c:621
+#: ../vector/v.vol.rst/user3.c:632 ../vector/v.vol.rst/user3.c:643
+#: ../vector/v.vol.rst/user3.c:654 ../vector/v.vol.rst/user3.c:665
 #, fuzzy
 msgid "Not enough disk space--cannot write files"
 msgstr "磁盘空间不足 -- 无法写入文件"
@@ -5626,9 +5713,9 @@ msgstr "字段类型不支持 (%s)"
 msgid "Point without category"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:598
-#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:527
-#: ../vector/v.buffer/main.c:629 ../vector/v.label/main.c:325
+#: ../vector/v.vol.rst/user1.c:172 ../vector/v.what.rast/main.c:609
+#: ../vector/v.label.sa/labels.c:166 ../vector/v.buffer/main.c:526
+#: ../vector/v.buffer/main.c:628 ../vector/v.label/main.c:325
 #: ../vector/v.sample/main.c:226 ../vector/v.sample/main.c:234
 #: ../vector/v.what.rast3/main.c:272
 #, fuzzy, c-format
@@ -5736,9 +5823,9 @@ msgstr "关闭 VTK-ASCII 文件时发生错误"
 msgid "3D raster map <%s> created"
 msgstr "dig_att文件不存在。"
 
-#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:467
-#: ../vector/v.random/main.c:587 ../vector/v.in.lidar/main.c:784
-#: ../vector/v.in.ogr/main.c:1319 ../raster/r.volume/main.c:296
+#: ../vector/v.vol.rst/vector.c:80 ../vector/v.random/main.c:468
+#: ../vector/v.random/main.c:588 ../vector/v.in.lidar/attributes.c:240
+#: ../vector/v.in.ogr/main.c:1292 ../raster/r.volume/main.c:296
 #: ../raster/r.to.vect/areas_io.c:377 ../raster/r.to.vect/util.c:157
 #, c-format
 msgid "Cannot insert new row: %s"
@@ -5749,86 +5836,121 @@ msgstr "无法插入新行:%s"
 msgid "Init costs from node %d"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:347
+#: ../vector/v.net.steiner/main.c:348
 #, fuzzy
 msgid "steiner tree"
 msgstr "将要导入的二进制栅格文件"
 
-#: ../vector/v.net.steiner/main.c:349
+#: ../vector/v.net.steiner/main.c:350
 msgid "Creates Steiner tree for the network and given terminals."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:351
+#: ../vector/v.net.steiner/main.c:352
 msgid ""
 "Note that 'Minimum Steiner Tree' problem is NP-hard and heuristic algorithm "
 "is used in this module so the result may be sub optimal."
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:372
+#: ../vector/v.net.steiner/main.c:373
 msgid "Node layer (used for terminals)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:378
+#: ../vector/v.net.steiner/main.c:379
 msgid "Arcs' cost column (for both directions)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:384
+#: ../vector/v.net.steiner/main.c:385
 msgid "Categories of points on terminals (layer is specified by nlayer)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:392
+#: ../vector/v.net.steiner/main.c:393
 #, fuzzy
 msgid "Number of Steiner points (-1 for all possible)"
 msgstr "起始点栅格文件"
 
-#: ../vector/v.net.steiner/main.c:445 ../vector/v.net.salesman/main.c:242
-#: ../vector/v.net.iso/main.c:205 ../vector/v.net.alloc/main.c:169
-#, fuzzy
-msgid "Point is not connected to the network"
+#: ../vector/v.net.steiner/main.c:448
+#, fuzzy, c-format
+msgid "Point is not connected to the network (cat=%d)"
 msgstr "点到网络的最小距离"
 
-#: ../vector/v.net.steiner/main.c:459
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:458
+#, fuzzy, c-format
+msgid "Number of terminals: %d\n"
+msgstr "输入点的数目:%d"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:462
 #, fuzzy
 msgid "Not enough terminals (< 2)"
 msgstr "类别字段的名称"
 
-#: ../vector/v.net.steiner/main.c:465
+#: ../vector/v.net.steiner/main.c:469
 msgid "Requested number of Steiner points > than possible"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:517
+#: ../vector/v.net.steiner/main.c:475
+#, fuzzy, c-format
+msgid "Number of Steiner points set to %d\n"
+msgstr "输入点的数目:%d"
+
+#. GTC Terminal refers to an Steiner tree endpoint
+#: ../vector/v.net.steiner/main.c:522
 #, c-format
 msgid "Terminal at node [%d] cannot be connected to terminal at node [%d]"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:533
+#: ../vector/v.net.steiner/main.c:538
 #, c-format
 msgid ""
 "[%d] (not reachable) nodes removed from list of Steiner point candidates"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:538
+#: ../vector/v.net.steiner/main.c:543
 #, c-format
 msgid "MST costs = %f"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:544
+#: ../vector/v.net.steiner/main.c:549
 #, c-format
 msgid "Search for [%d]. Steiner point"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:565
+#: ../vector/v.net.steiner/main.c:570
 #, c-format
 msgid "Steiner point at node [%d] was added to terminals (MST costs = %f)"
 msgstr ""
 
-#: ../vector/v.net.steiner/main.c:577
+#: ../vector/v.net.steiner/main.c:582
 msgid "No Steiner point found -> leaving cycle"
 msgstr ""
 
+#: ../vector/v.net.steiner/main.c:587
+#, fuzzy, c-format
+msgid "Number of added Steiner points: %d (theoretic max is %d).\n"
+msgstr "起始点栅格文件"
+
+#: ../vector/v.net.steiner/main.c:598
+#, c-format
+msgid ""
+"Spanning tree costs on complet graph = %f\n"
+"(may be higher than resulting Steiner tree costs!!!)"
+msgstr ""
+
+#: ../vector/v.net.steiner/main.c:603
+#, fuzzy, c-format
+msgid "Steiner tree costs = %f"
+msgstr "将要导入的二进制栅格文件"
+
+#: ../vector/v.net.steiner/main.c:656
+#, c-format
+msgid "A Steiner tree with %d arc has been built"
+msgid_plural "A Steiner tree with %d arcs has been built"
+msgstr[0] ""
+
 #: ../vector/v.in.db/main.c:53 ../vector/v.in.dwg/main.c:83
-#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:157
-#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:134
+#: ../vector/v.proj/main.c:70 ../vector/v.in.lidar/main.c:136
+#: ../vector/v.external/main.c:51 ../vector/v.in.ogr/main.c:136
 #: ../vector/v.in.dxf/main.c:65 ../vector/v.in.ascii/main.c:69
 #: ../locale/scriptstrings/r.in.aster_to_translate.c:3
 #: ../locale/scriptstrings/i.in.spotvgt_to_translate.c:3
@@ -5848,18 +5970,20 @@ msgstr ""
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:3
 #: ../raster3d/r3.in.v5d/main.c:179 ../raster3d/r3.in.ascii/main.c:314
-#: ../raster3d/r3.in.bin/main.c:253 ../raster/r.in.png/main.c:520
-#: ../raster/r.in.mat/main.c:92 ../raster/r.in.ascii/main.c:70
+#: ../raster3d/r3.in.lidar/main.c:125 ../raster3d/r3.in.bin/main.c:253
+#: ../raster/r.in.png/main.c:520 ../raster/r.in.mat/main.c:92
+#: ../raster/r.proj/main.c:147 ../raster/r.in.ascii/main.c:70
 #: ../raster/r.in.xyz/main.c:159 ../raster/r.in.gridatb/main.c:46
-#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:170
-#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:88
+#: ../raster/r.in.poly/main.c:35 ../raster/r.in.lidar/main.c:107
+#: ../raster/r.external/main.c:58 ../raster/r.in.gdal/main.c:91
 #: ../raster/r.in.bin/main.c:258
 #, fuzzy
 msgid "import"
 msgstr "矢量导入完成"
 
 #: ../vector/v.in.db/main.c:55 ../vector/v.kcv/main.c:57
-#: ../vector/v.normal/main.c:74
+#: ../vector/v.out.lidar/main.c:474 ../vector/v.normal/main.c:74
+#: ../vector/v.decimate/main.c:129
 #, fuzzy
 msgid "points"
 msgstr "矢量地图 %s - 未发现"
@@ -5894,9 +6018,9 @@ msgstr "用于内插的包含 w 属性的字段名称"
 msgid "Name of column containing z coordinate"
 msgstr "用于内插的包含 w 属性的字段名称"
 
-#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:133
-#: ../vector/v.random/main.c:142 ../vector/v.random/main.c:155
-#: ../vector/v.random/main.c:165 ../vector/v.random/main.c:170
+#: ../vector/v.in.db/main.c:85 ../vector/v.random/main.c:134
+#: ../vector/v.random/main.c:143 ../vector/v.random/main.c:156
+#: ../vector/v.random/main.c:166 ../vector/v.random/main.c:171
 #, fuzzy
 msgid "3D output"
 msgstr "创建 3D 输出"
@@ -5946,7 +6070,7 @@ msgid ""
 msgstr ""
 
 #: ../vector/v.in.db/main.c:225 ../display/d.vect/attr.c:110
-#: ../display/d.vect.chart/plot.c:85
+#: ../display/d.vect.chart/plot.c:86
 #, fuzzy, c-format
 msgid "Unable to open select cursor: '%s'"
 msgstr "无法打开选择游标:'%s'"
@@ -5965,7 +6089,7 @@ msgid "x/y/z column must be integer or double"
 msgstr "x/y/z 字段必须是整型或双精度的"
 
 #: ../vector/v.in.db/main.c:282 ../vector/v.to.3d/main.c:96
-#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:150
+#: ../vector/v.to.3d/main.c:117 ../vector/v.net/main.c:156
 #: ../vector/v.transform/main.c:282
 #, fuzzy
 msgid "Copying attributes..."
@@ -5993,7 +6117,88 @@ msgid_plural "%d points written to vector map."
 msgstr[0] "%d 个点写入矢量文件"
 msgstr[1] "%d 个点写入矢量文件"
 
-#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:98
+#: ../vector/v.in.pdal/projection.c:31 ../vector/v.in.lidar/projection.c:32
+#: ../vector/v.in.ogr/main.c:627 ../raster/r.in.lidar/projection.c:34
+#: ../raster/r.external/proj.c:42 ../raster/r.in.gdal/main.c:479
+#, fuzzy
+msgid ""
+"Projection of dataset does not appear to match current location.\n"
+"\n"
+msgstr ""
+"输入数据集的投影和当前区域相匹配。\n"
+"继续导入...\n"
+
+#: ../vector/v.in.pdal/projection.c:37 ../vector/v.in.lidar/projection.c:38
+#: ../vector/v.in.ogr/main.c:633 ../raster/r.in.lidar/projection.c:40
+msgid "GRASS LOCATION PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:46 ../vector/v.in.pdal/projection.c:52
+#: ../vector/v.in.lidar/projection.c:47 ../vector/v.in.lidar/projection.c:53
+#: ../vector/v.in.ogr/main.c:643 ../vector/v.in.ogr/main.c:650
+#: ../raster/r.in.lidar/projection.c:49 ../raster/r.in.lidar/projection.c:55
+#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:531
+msgid "Import dataset PROJ_INFO is:\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:88 ../vector/v.in.lidar/projection.c:89
+#: ../vector/v.in.ogr/main.c:689 ../raster/r.in.lidar/projection.c:91
+#: ../raster/r.external/proj.c:107 ../raster/r.in.gdal/main.c:549
+#, c-format
+msgid ""
+"\n"
+"In case of no significant differences in the projection definitions, use the "
+"-o flag to ignore them and use current location definition.\n"
+msgstr ""
+
+#: ../vector/v.in.pdal/projection.c:92 ../vector/v.in.lidar/projection.c:93
+#: ../vector/v.in.ogr/main.c:693 ../raster/r.in.lidar/projection.c:95
+#, fuzzy
+msgid ""
+"Consider generating a new location with 'location' parameter from input data "
+"set.\n"
+msgstr "考虑用 'location' 参数从输入的数据集创建新的区域。\n"
+
+#: ../vector/v.in.pdal/projection.c:110 ../vector/v.in.pdal/projection.c:156
+#: ../vector/v.in.pdal/projection.c:189 ../vector/v.in.lidar/projection.c:111
+#: ../vector/v.in.ogr/main.c:603 ../raster/r.in.lidar/projection.c:113
+msgid ""
+"Unable to convert input map projection information to GRASS format for "
+"checking"
+msgstr "不能将输入地图的投影信息转换为 GRASS 格式来检查"
+
+#: ../vector/v.in.pdal/projection.c:125
+#, fuzzy
+msgid "Overriding projection check"
+msgstr "无法获取栅格行\n"
+
+#: ../vector/v.in.pdal/projection.c:137 ../vector/v.in.lidar/projection.c:137
+#: ../vector/v.in.ogr/main.c:708 ../raster/r.in.lidar/projection.c:139
+#: ../raster/r.external/proj.c:116 ../raster/r.in.gdal/main.c:569
+#, fuzzy
+msgid "Projection of input dataset and current location appear to match"
+msgstr ""
+"输入数据集的投影和当前区域相匹配。\n"
+"继续导入...\n"
+
+#: ../vector/v.in.pdal/filters.c:46
+#, fuzzy, c-format
+msgid "4 values required for '%s' option"
+msgstr "'spatial' 选项需要 4 个参数。"
+
+#: ../vector/v.in.pdal/filters.c:68 ../vector/v.in.lidar/main.c:419
+#: ../vector/v.decimate/main.c:292
+#, fuzzy, c-format
+msgid "Invalid zrange <%s>"
+msgstr "无效的区域:%s"
+
+#: ../vector/v.in.pdal/filters.c:95 ../vector/v.in.lidar/filters.c:36
+#: ../raster3d/r3.in.lidar/filters.c:35
+#, fuzzy, c-format
+msgid "Unknown return filter value <%s>"
+msgstr "未知的类型"
+
+#: ../vector/v.kcv/main.c:56 ../vector/v.random/main.c:99
 #: ../vector/v.class/main.c:48 ../vector/v.perturb/main.c:64
 #: ../vector/v.outlier/main.c:70 ../vector/v.normal/main.c:73
 #: ../vector/v.neighbors/main.c:52 ../vector/v.qcount/main.c:61
@@ -6016,7 +6221,7 @@ msgstr[1] "%d 个点写入矢量文件"
 #: ../raster/r.stats/main.c:107 ../raster/r.surf.area/main.c:78
 #: ../raster/r.regression.multi/main.c:129 ../raster/r.mfilter/main.c:58
 #: ../raster/r.cross/main.c:70 ../raster/r.univar/r3.univar_main.c:99
-#: ../raster/r.univar/r.univar_main.c:101 ../raster/r.stats.zonal/main.c:102
+#: ../raster/r.univar/r.univar_main.c:105 ../raster/r.stats.zonal/main.c:102
 #: ../raster/r.support.stats/main.c:39 ../raster/r.kappa/main.c:69
 #: ../raster/r.quantile/main.c:257 ../raster/r.statistics/main.c:56
 #: ../raster/r.neighbors/main.c:169 ../raster/r.texture/main.c:103
@@ -6025,7 +6230,7 @@ msgstr[1] "%d 个点写入矢量文件"
 msgid "statistics"
 msgstr "包含结果的栅格图的名称"
 
-#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:100
+#: ../vector/v.kcv/main.c:58 ../vector/v.random/main.c:101
 #: ../vector/v.perturb/main.c:66 ../vector/v.normal/main.c:75
 #: ../vector/v.mkgrid/main.c:73 ../vector/v.qcount/main.c:62
 #, fuzzy
@@ -6673,8 +6878,8 @@ msgstr "字段类型不支持"
 msgid "Operator '%s' is not supported for type line"
 msgstr ""
 
-#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:401
-#: ../vector/v.in.ogr/main.c:958
+#: ../vector/v.overlay/main.c:220 ../vector/v.buffer/main.c:400
+#: ../vector/v.in.ogr/main.c:931
 #, fuzzy
 msgid "Unable to create temporary vector map"
 msgstr "不能创建输出地图 <%s>"
@@ -6735,13 +6940,13 @@ msgid "Breaking lines..."
 msgstr "写入 %s ... "
 
 #: ../vector/v.overlay/area_area.c:113 ../vector/v.delaunay/main.c:144
-#: ../vector/v.buffer/main.c:742 ../vector/v.buffer/main.c:749
-#: ../vector/v.in.ogr/main.c:1384 ../vector/v.in.ogr/main.c:1398
+#: ../vector/v.buffer/main.c:741 ../vector/v.buffer/main.c:748
+#: ../vector/v.in.ogr/main.c:1357 ../vector/v.in.ogr/main.c:1371
 #, fuzzy
 msgid "Removing duplicates..."
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1402
+#: ../vector/v.overlay/area_area.c:116 ../vector/v.in.ogr/main.c:1375
 #, fuzzy
 msgid "Cleaning boundaries at nodes..."
 msgstr "写入 %s ... "
@@ -6751,12 +6956,12 @@ msgstr "写入 %s ... "
 msgid "Merging lines..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:766
+#: ../vector/v.overlay/area_area.c:158 ../vector/v.buffer/main.c:765
 #, fuzzy
 msgid "Attaching islands..."
 msgstr "分类...\n"
 
-#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:787
+#: ../vector/v.overlay/area_area.c:171 ../vector/v.buffer/main.c:786
 msgid "Cannot calculate area centroid"
 msgstr "无法计算面的质心"
 
@@ -6772,13 +6977,14 @@ msgstr "写入 %s ... "
 msgid "Attribute not found"
 msgstr "属性字段"
 
-#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1513
+#: ../vector/v.overlay/area_area.c:218 ../vector/v.in.ogr/main.c:1486
 #, fuzzy
 msgid "Writing centroids..."
 msgstr "写入线的结点"
 
 #: ../vector/v.overlay/area_area.c:345 ../vector/v.overlay/line_area.c:410
-#: ../vector/v.to.points/write.c:52 ../raster/r.contour/main.c:216
+#: ../vector/v.to.points/write.c:52 ../raster3d/r3.flow/flowline.c:60
+#: ../raster/r.contour/main.c:216
 #, fuzzy, c-format
 msgid "Unable to insert new record: '%s'"
 msgstr "无法插入新行:%s"
@@ -6856,128 +7062,130 @@ msgstr ""
 msgid "Vector map <%s> is not in current mapset"
 msgstr "未发现矢量地图<%s>"
 
-#: ../vector/v.random/main.c:97 ../vector/v.what.rast/main.c:72
+#: ../vector/v.random/main.c:98 ../vector/v.what.rast/main.c:72
 #: ../vector/v.drape/main.c:58 ../vector/v.extrude/main.c:69
 #: ../vector/v.sample/main.c:76 ../vector/v.what.rast3/main.c:65
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:3
 #: ../locale/scriptstrings/t.sample_to_translate.c:3
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:3
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:3
-#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:46
+#: ../raster/r.random/main.c:52 ../raster/r.random.cells/main.c:48
 #: ../display/d.where/main.c:44
 #, fuzzy
 msgid "sampling"
 msgstr "采样方法"
 
-#: ../vector/v.random/main.c:101
+#: ../vector/v.random/main.c:102
 #, fuzzy
 msgid "Generates random 2D/3D vector points."
 msgstr "随机生成一个 2D/3D GRASS 矢量点地图"
 
-#: ../vector/v.random/main.c:109
+#: ../vector/v.random/main.c:110
 #, fuzzy
 msgid "Number of points to be created"
 msgstr "将要创建的点的数目"
 
-#: ../vector/v.random/main.c:114
+#: ../vector/v.random/main.c:115
 #, fuzzy
 msgid "Restrict points to areas in input vector"
 msgstr "无法打开输入的dig文件。"
 
-#: ../vector/v.random/main.c:131
+#: ../vector/v.random/main.c:132
 #, fuzzy
 msgid "Minimum z height (needs -z flag or column name)"
 msgstr "最小的 z 值 (需要 -z 标记)"
 
-#: ../vector/v.random/main.c:140
+#: ../vector/v.random/main.c:141
 #, fuzzy
 msgid "Maximum z height (needs -z flag or column name)"
 msgstr "最大的 z 值 (需要 -z 标记)"
 
-#: ../vector/v.random/main.c:149
+#: ../vector/v.random/main.c:150
 msgid ""
 "The seed to initialize the random generator. If not set the process ID is "
 "used"
 msgstr ""
 
-#: ../vector/v.random/main.c:152
+#: ../vector/v.random/main.c:153
 #, fuzzy
 msgid "Name of column for z values"
 msgstr "用于内插的包含 w 属性的字段名称"
 
-#: ../vector/v.random/main.c:154
+#: ../vector/v.random/main.c:155
 #, fuzzy
 msgid "Writes z values to column"
 msgstr "写入 %s ... "
 
-#: ../vector/v.random/main.c:162
+#: ../vector/v.random/main.c:163
 #, fuzzy
 msgid "Type of column for z values"
 msgstr "色彩表类型"
 
-#: ../vector/v.random/main.c:169
+#: ../vector/v.random/main.c:170
 msgid "Create 3D output"
 msgstr "创建 3D 输出"
 
-#: ../vector/v.random/main.c:174
+#: ../vector/v.random/main.c:175
 #, fuzzy
 msgid "Generate n points for each individual area"
 msgstr "通过DEM计算阴影..."
 
-#: ../vector/v.random/main.c:188
+#: ../vector/v.random/main.c:189
 #, fuzzy, c-format
 msgid "Number of points must be > 0 (%d given)"
 msgstr "将要创建的点的数目"
 
-#: ../vector/v.random/main.c:204 ../vector/v.drape/main.c:150
-#: ../vector/v.buffer/main.c:349
+#: ../vector/v.random/main.c:205 ../vector/v.drape/main.c:150
+#: ../vector/v.buffer/main.c:348
 #, c-format
 msgid ""
 "Invalid layer number (%d). Parameter '%s' or '%s' specified, assuming layer "
 "'1'."
 msgstr ""
 
-#: ../vector/v.random/main.c:214
+#: ../vector/v.random/main.c:215
 #, fuzzy, c-format
 msgid "No areas in vector map <%s>"
 msgstr "%d 个点写入矢量文件"
 
-#: ../vector/v.random/main.c:219
+#: ../vector/v.random/main.c:220
 #, fuzzy, c-format
 msgid "The <-%c> flag requires an input vector with areas"
 msgstr "得到的 3D 矢量地图的名称"
 
-#: ../vector/v.random/main.c:250 ../vector/v.lrs/v.lrs.create/main.c:338
+#: ../vector/v.random/main.c:251 ../vector/v.lrs/v.lrs.create/main.c:338
 #: ../vector/v.mkgrid/main.c:341 ../vector/v.mkgrid/main.c:399
 #: ../vector/v.in.dxf/write_vect.c:233 ../vector/v.in.ascii/main.c:409
-#: ../raster/r.volume/main.c:260 ../raster/r.to.vect/main.c:222
+#: ../raster3d/r3.flow/main.c:64 ../raster/r.volume/main.c:260
+#: ../raster/r.to.vect/main.c:222
 #, fuzzy, c-format
 msgid "Unable to create table: %s"
 msgstr "无法创建文件 [%s]"
 
-#: ../vector/v.random/main.c:273
+#: ../vector/v.random/main.c:274
 msgid "Table should contain only two columns"
 msgstr ""
 
-#: ../vector/v.random/main.c:282
+#: ../vector/v.random/main.c:283
 msgid ""
 "You have created unsupported column type. This module supports only INTEGER "
 "and DOUBLE PRECISION column types."
 msgstr ""
 
-#: ../vector/v.random/main.c:345
+#: ../vector/v.random/main.c:346
 #, fuzzy, c-format
 msgid ""
 "Selected areas in input vector <%s> do not overlap with the current region"
 msgstr "起始矢量地图 %s 在当前范围之外"
 
-#: ../vector/v.random/main.c:357
+#: ../vector/v.random/main.c:358
 #, fuzzy, c-format
 msgid "Input vector <%s> does not overlap with the current region"
 msgstr "起始矢量地图 %s 在当前范围之外"
 
-#: ../vector/v.random/main.c:382
+#: ../vector/v.random/main.c:383
 #, fuzzy
 msgid "Generating points..."
 msgstr "写入 %s ... "
@@ -7023,7 +7231,7 @@ msgid "Name of existing raster map to be queried"
 msgstr "需要查询的已有栅格地图的名称"
 
 #: ../vector/v.what.rast/main.c:98 ../vector/v.what.rast3/main.c:87
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
 #, fuzzy
 msgid "Name of attribute column to be updated with the query result"
 msgstr "用来创建标签的属性字段的名称"
@@ -7037,80 +7245,78 @@ msgstr ""
 msgid "Print categories and values instead of updating the database"
 msgstr "打印平均值而不是间隔值"
 
-#: ../vector/v.what.rast/main.c:170 ../vector/v.to.rast/support.c:318
-#: ../vector/v.to.rast/support.c:471 ../vector/v.to.rast/vect2rast.c:69
-#: ../vector/v.what.rast3/main.c:141
-#, c-format
-msgid "Column <%s> not found"
+#: ../vector/v.what.rast/main.c:170
+#, fuzzy, c-format
+msgid "Column <%s> not found in the table <%s>. Creating..."
 msgstr "字段 <%s> 未找到"
 
-#: ../vector/v.what.rast/main.c:173 ../vector/v.class/main.c:129
+#: ../vector/v.what.rast/main.c:183 ../vector/v.class/main.c:129
 #: ../vector/v.surf.bspline/main.c:389 ../vector/v.surf.bspline/crosscorr.c:133
-#: ../vector/v.buffer/main.c:435 ../vector/v.surf.idw/read_sites.c:65
+#: ../vector/v.buffer/main.c:434 ../vector/v.surf.idw/read_sites.c:65
 #: ../vector/v.sample/main.c:240 ../vector/v.to.rast3/main.c:99
 msgid "Column type not supported"
 msgstr "列的类型不支持"
 
-#: ../vector/v.what.rast/main.c:176
+#: ../vector/v.what.rast/main.c:186
 msgid "Raster type is integer and column type is float"
 msgstr "栅格类型是整型,而字段类型是浮点型"
 
-#: ../vector/v.what.rast/main.c:179
+#: ../vector/v.what.rast/main.c:189
 msgid "Raster type is float and column type is integer, some data lost!!"
 msgstr "栅格类型是浮点型,而字段类型是整型,某些数据丢失!!"
 
-#: ../vector/v.what.rast/main.c:195 ../vector/v.what.rast3/main.c:158
+#: ../vector/v.what.rast/main.c:206 ../vector/v.what.rast3/main.c:158
 #, fuzzy
 msgid "Reading features from vector map..."
 msgstr "读取地图"
 
-#: ../vector/v.what.rast/main.c:246
+#: ../vector/v.what.rast/main.c:257
 #, fuzzy, c-format
 msgid "No features of type (%s) found in vector map <%s>"
 msgstr "无法找到输入的矢量地图 <%s>"
 
-#: ../vector/v.what.rast/main.c:270
+#: ../vector/v.what.rast/main.c:281
 #, fuzzy, c-format
 msgid "%d points outside current region were skipped"
 msgstr "%d 个点在当前范围之外,将被忽略"
 
-#: ../vector/v.what.rast/main.c:274
+#: ../vector/v.what.rast/main.c:285
 #, fuzzy, c-format
 msgid "%d points without category were skipped"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.what.rast/main.c:545 ../vector/v.what.rast/main.c:585
+#: ../vector/v.what.rast/main.c:556 ../vector/v.what.rast/main.c:596
 #, fuzzy, c-format
 msgid "Multiple points (%d) of category %d, value set to 'NULL'"
 msgstr "更多的点 (%d) [类别为 %d],其值设置为 'NULL'·"
 
-#: ../vector/v.what.rast/main.c:653
+#: ../vector/v.what.rast/main.c:664
 #, c-format
 msgid "%d categories loaded from vector"
 msgstr "%d 个类别从矢量中加载"
 
-#: ../vector/v.what.rast/main.c:655
+#: ../vector/v.what.rast/main.c:666
 #, fuzzy, c-format
 msgid "%d duplicate categories in vector map <%s>"
 msgstr "矢量中有 %d 个重复的类别"
 
-#: ../vector/v.what.rast/main.c:659
+#: ../vector/v.what.rast/main.c:670
 #, c-format
 msgid "%d categories loaded from table"
 msgstr "%d 个类别从表中加载"
 
-#: ../vector/v.what.rast/main.c:660
+#: ../vector/v.what.rast/main.c:671
 #, c-format
 msgid "%d categories from vector missing in table"
 msgstr "矢量中的 %d 个类别在表中缺失"
 
-#: ../vector/v.what.rast/main.c:663 ../vector/v.vect.stats/main.c:710
+#: ../vector/v.what.rast/main.c:674 ../vector/v.vect.stats/main.c:710
 #: ../vector/v.distance/main.c:1670
 #, c-format
 msgid "%d update errors"
 msgstr "%d 条记录更新时发生错误"
 
-#: ../vector/v.what.rast/main.c:665 ../vector/v.distance/main.c:1672
+#: ../vector/v.what.rast/main.c:676 ../vector/v.distance/main.c:1672
 #, fuzzy, c-format
 msgid "%d records updated."
 msgstr "%d 条记录被更新"
@@ -7118,14 +7324,14 @@ msgstr "%d 条记录被更新"
 #: ../vector/v.vect.stats/main.c:131 ../vector/v.univar/main.c:94
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:5
 #: ../raster/r.univar/r3.univar_main.c:100
-#: ../raster/r.univar/r.univar_main.c:102
+#: ../raster/r.univar/r.univar_main.c:106
 #, fuzzy
 msgid "univariate statistics"
 msgstr "包含结果的栅格图的名称"
 
 #: ../vector/v.vect.stats/main.c:132
 #: ../locale/scriptstrings/v.rast.stats_to_translate.c:6
-#: ../raster/r.univar/r.univar_main.c:103 ../raster/r.stats.zonal/main.c:103
+#: ../raster/r.univar/r.univar_main.c:107 ../raster/r.stats.zonal/main.c:103
 #: ../raster/r.statistics/main.c:57
 #, fuzzy
 msgid "zonal statistics"
@@ -7212,7 +7418,7 @@ msgstr ""
 msgid "Vector map <%s> is not in user mapset and cannot be updated"
 msgstr "未发现矢量地图<%s>"
 
-#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:236
+#: ../vector/v.vect.stats/main.c:268 ../raster/r.proj/main.c:237
 #: ../raster/r.stats.zonal/main.c:165 ../raster/r.statistics/main.c:118
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:152
 #: ../imagery/i.rectify/main.c:172
@@ -7270,6 +7476,149 @@ msgstr "%d 个点没有类别,将被忽略"
 msgid "%d records updated"
 msgstr "%d 条记录被更新"
 
+#: ../vector/v.out.lidar/main.c:77
+#, fuzzy, c-format
+msgid "Database connection not defined for layer <%d>"
+msgstr "数据库连接未定义"
+
+#: ../vector/v.out.lidar/main.c:121 ../vector/v.out.lidar/main.c:158
+#: ../vector/v.univar/main.c:358
+#, fuzzy
+msgid "Only numeric column type is supported"
+msgstr "列的类型不支持"
+
+#: ../vector/v.out.lidar/main.c:123
+msgid "Double values will be converted to integers"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:184
+#, fuzzy, c-format
+msgid "No record for cat = %d"
+msgstr "类别 = %d 没有记录"
+
+#: ../vector/v.out.lidar/main.c:187
+#, fuzzy, c-format
+msgid "NULL value for cat = %d"
+msgstr "类别 = %d 没有记录"
+
+#: ../vector/v.out.lidar/main.c:196
+#, fuzzy, c-format
+msgid "Column type is not numeric (type = %d, cat = %d"
+msgstr "字段 <%s> 未找到"
+
+#: ../vector/v.out.lidar/main.c:473 ../vector/v.surf.bspline/main.c:94
+#: ../vector/v.lidar.edgedetection/main.c:73 ../vector/v.in.lidar/main.c:137
+#: ../vector/v.lidar.growing/main.c:76 ../vector/v.lidar.correction/main.c:69
+#: ../vector/v.decimate/main.c:124
+#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
+#: ../raster3d/r3.in.lidar/main.c:126 ../raster/r.in.xyz/main.c:163
+#: ../raster/r.in.lidar/main.c:108
+msgid "LIDAR"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:475
+#, fuzzy
+msgid "Exports vector points as LAS point cloud"
+msgstr "将矢量点作为3D点生成"
+
+#: ../vector/v.out.lidar/main.c:476
+#, fuzzy
+msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS"
+msgstr "将GRASS矢量图层转化为GRASS栅格图层。"
+
+#: ../vector/v.out.lidar/main.c:496 ../vector/v.in.lidar/main.c:148
+#, fuzzy
+msgid "Layer number to store generated point ID as category"
+msgstr "图层 %d"
+
+#: ../vector/v.out.lidar/main.c:498 ../vector/v.out.lidar/main.c:505
+#: ../vector/v.out.lidar/main.c:512 ../vector/v.out.lidar/main.c:519
+#: ../vector/v.in.lidar/main.c:151 ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/main.c:167 ../vector/v.in.lidar/main.c:175
+#, fuzzy
+msgid "Categories"
+msgstr "读取%-5d个线类别\n"
+
+#: ../vector/v.out.lidar/main.c:503
+#, fuzzy
+msgid "Layer number to store return number as category"
+msgstr "图层 %d"
+
+#: ../vector/v.out.lidar/main.c:510 ../vector/v.in.lidar/main.c:164
+#, fuzzy
+msgid "Layer number to store class number as category"
+msgstr "图层 %d"
+
+#: ../vector/v.out.lidar/main.c:517
+#, fuzzy
+msgid "Layer number where RGB color is stored as category"
+msgstr "无法创建属性表"
+
+#: ../vector/v.out.lidar/main.c:525 ../vector/v.out.lidar/main.c:531
+#: ../vector/v.out.lidar/main.c:537
+#, fuzzy
+msgid "Column with return number"
+msgstr "x/y/z 字段必须是整型或双精度的"
+
+#: ../vector/v.out.lidar/main.c:527 ../vector/v.out.lidar/main.c:533
+#: ../vector/v.out.lidar/main.c:539 ../vector/v.out.lidar/main.c:546
+#: ../vector/v.out.lidar/main.c:552 ../vector/v.out.lidar/main.c:558
+#: ../vector/v.out.lidar/main.c:564 ../vector/v.net.centrality/main.c:149
+#: ../vector/v.net.centrality/main.c:155 ../vector/v.net.centrality/main.c:161
+#: ../vector/v.net.centrality/main.c:167
+#, fuzzy
+msgid "Columns"
+msgstr "列名"
+
+#: ../vector/v.out.lidar/main.c:543
+#, fuzzy
+msgid "RGB color definition column"
+msgstr "列数"
+
+#: ../vector/v.out.lidar/main.c:544 ../display/d.vect/main.c:129
+msgid "Color definition in R:G:B form"
+msgstr "用R:G:B形式定义颜色"
+
+#: ../vector/v.out.lidar/main.c:550
+msgid "Column with red color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:556
+msgid "Column with green color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:562
+msgid "Column with blue color"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:571
+msgid "Internal scale to apply to X and Y values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:572 ../vector/v.out.lidar/main.c:582
+msgid ""
+"This scale does not change the values itself but only how precisely they are "
+"stored, for example 0.01 will preserve two decimal places"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:581
+msgid "Internal scale to apply to z values"
+msgstr ""
+
+#: ../vector/v.out.lidar/main.c:589
+#, fuzzy
+msgid "Limit export to the current region"
+msgstr "不更新当前区域"
+
+#: ../vector/v.out.lidar/main.c:593
+#, fuzzy
+msgid "Ignore color table"
+msgstr "栅格图的名称"
+
+#: ../vector/v.out.lidar/main.c:595
+msgid "Ignore color table even when set and not other options are present"
+msgstr ""
+
 #: ../vector/v.to.rast/support.c:142 ../vector/v.to.rast/support.c:301
 #: ../vector/v.to.rast/support.c:454
 #, fuzzy, c-format
@@ -7306,6 +7655,12 @@ msgstr ""
 msgid "Label column was not specified, no labels will be written"
 msgstr ""
 
+#: ../vector/v.to.rast/support.c:318 ../vector/v.to.rast/support.c:471
+#: ../vector/v.to.rast/vect2rast.c:69 ../vector/v.what.rast3/main.c:141
+#, c-format
+msgid "Column <%s> not found"
+msgstr "字段 <%s> 未找到"
+
 #: ../vector/v.to.rast/support.c:353 ../vector/v.to.rast/support.c:500
 #, fuzzy, c-format
 msgid "Column type (%s) not supported"
@@ -7336,47 +7691,54 @@ msgstr "无法打开输出文件 <%s>"
 msgid "No areas selected from vector map <%s>"
 msgstr "%d 个点写入矢量文件"
 
-#: ../vector/v.to.rast/vect2rast.c:147
+#: ../vector/v.to.rast/vect2rast.c:137
+msgid ""
+"Area conversion and line densification are mutually exclusive, disabling "
+"line densification."
+msgstr ""
+
+#: ../vector/v.to.rast/vect2rast.c:152
 #, c-format
 msgid "Pass %d of %d:"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:155
+#: ../vector/v.to.rast/vect2rast.c:160
 #, fuzzy, c-format
 msgid "Problem processing areas from vector map <%s>, continuing..."
 msgstr "无法创建栅格地图 %s"
 
-#: ../vector/v.to.rast/vect2rast.c:167
+#: ../vector/v.to.rast/vect2rast.c:172
 #, c-format
 msgid "Problem processing lines from vector map <%s>, continuing..."
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:174 ../raster/r.in.poly/poly2rast.c:81
+#: ../vector/v.to.rast/vect2rast.c:179 ../raster/r.in.poly/poly2rast.c:81
 #: ../raster/r.carve/raster.c:33
 #, fuzzy
 msgid "Writing raster map..."
 msgstr "写入新文件...\n"
 
-#: ../vector/v.to.rast/vect2rast.c:192
+#: ../vector/v.to.rast/vect2rast.c:197
 #, fuzzy
 msgid "Creating support files for raster map..."
 msgstr "为 %s 创建支持文件"
 
-#: ../vector/v.to.rast/vect2rast.c:199
+#: ../vector/v.to.rast/vect2rast.c:204
 msgid "Color can be updated from database only if use=attr"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:219
+#: ../vector/v.to.rast/vect2rast.c:229
 #, c-format
 msgid "Converted areas: %d of %d"
 msgstr ""
 
-#: ../vector/v.to.rast/vect2rast.c:222
+#: ../vector/v.to.rast/vect2rast.c:236
 #, c-format
 msgid "Converted points/lines: %d of %d"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:45 ../vector/v.to.rast3/main.c:49
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:3
 #: ../locale/scriptstrings/r.out.xyz_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:3
 #: ../raster3d/r3.to.rast/main.c:207 ../raster3d/r3.in.ascii/main.c:316
@@ -7441,15 +7803,17 @@ msgstr "栅格表面文件"
 
 #: ../vector/v.to.rast/main.c:116 ../vector/v.surf.bspline/main.c:194
 #: ../locale/scriptstrings/r.import_to_translate.c:9
-#: ../raster/r.proj/main.c:190 ../raster/r.stream.extract/main.c:141
-#: ../raster/r.in.gdal/main.c:113 ../raster/r.resamp.bspline/main.c:151
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:141
+#: ../raster/r.in.gdal/main.c:116 ../raster/r.resamp.bspline/main.c:151
 msgid "Maximum memory to be used (in MB)"
 msgstr ""
 
 #: ../vector/v.to.rast/main.c:117 ../vector/v.surf.bspline/main.c:195
 #: ../locale/scriptstrings/r.import_to_translate.c:10
-#: ../raster/r.proj/main.c:191 ../raster/r.stream.extract/main.c:142
-#: ../raster/r.in.gdal/main.c:114 ../raster/r.resamp.bspline/main.c:152
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../raster/r.proj/main.c:192 ../raster/r.stream.extract/main.c:142
+#: ../raster/r.in.gdal/main.c:117 ../raster/r.resamp.bspline/main.c:152
 #, fuzzy
 msgid "Cache size for raster rows"
 msgstr "报告栅格图层的统计数据"
@@ -7490,7 +7854,7 @@ msgstr "列参数不能与z坐标同时使用"
 msgid "Unknown option '%s'"
 msgstr "未知的类型"
 
-#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:28
+#: ../vector/v.to.rast/do_areas.c:34 ../vector/v.to.db/areas.c:27
 #, fuzzy
 msgid "Reading areas..."
 msgstr "读取地图"
@@ -7510,12 +7874,17 @@ msgstr "没有指定数据地图"
 msgid "Get area %d failed"
 msgstr "矢量导入完成"
 
-#: ../vector/v.to.rast/do_areas.c:117
+#: ../vector/v.to.rast/do_areas.c:84
+#, fuzzy
+msgid "Failed to plot polygon"
+msgstr "无法打开输入的dig文件。"
+
+#: ../vector/v.to.rast/do_areas.c:118
 #, fuzzy
 msgid "Area without centroid (OK for island)"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.to.rast/do_areas.c:127
+#: ../vector/v.to.rast/do_areas.c:128
 #, fuzzy
 msgid "Area centroid without category"
 msgstr "%d 个点没有类别,将被忽略"
@@ -7547,12 +7916,6 @@ msgstr ""
 msgid "Name of degree centrality column"
 msgstr "列数"
 
-#: ../vector/v.net.centrality/main.c:149 ../vector/v.net.centrality/main.c:155
-#: ../vector/v.net.centrality/main.c:161 ../vector/v.net.centrality/main.c:167
-#, fuzzy
-msgid "Columns"
-msgstr "列名"
-
 #: ../vector/v.net.centrality/main.c:154
 #, fuzzy
 msgid "Name of closeness centrality column"
@@ -7735,155 +8098,161 @@ msgstr "要素类型"
 msgid "Incompatible types"
 msgstr "未知的类型"
 
-#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:152
+#: ../vector/v.type/main.c:155 ../vector/v.net/main.c:158
 #: ../vector/v.category/main.c:761 ../vector/v.proj/main.c:497
 #: ../vector/v.transform/main.c:284 ../vector/v.rectify/main.c:276
-#: ../vector/v.build.polylines/main.c:242
+#: ../vector/v.build.polylines/main.c:243
 #, fuzzy
 msgid "Failed to copy attribute table to output map"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../vector/v.net.salesman/main.c:128
+#: ../vector/v.net.salesman/main.c:129
 msgid "salesman"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:130
+#: ../vector/v.net.salesman/main.c:131
 msgid "Creates a cycle connecting given nodes (Traveling salesman problem)."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:132
+#: ../vector/v.net.salesman/main.c:133
 msgid ""
 "Note that TSP is NP-hard, heuristic algorithm is used by this module and "
 "created cycle may be sub optimal"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:151
+#: ../vector/v.net.salesman/main.c:142
+msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
+msgstr ""
+
+#: ../vector/v.net.salesman/main.c:162
 #, fuzzy
 msgid "Node layer (used for cities)"
 msgstr "色调图层的名称"
 
-#: ../vector/v.net.salesman/main.c:163
+#: ../vector/v.net.salesman/main.c:176
 msgid "EXPERIMENTAL: Arc backward direction cost column (number)"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:169
+#: ../vector/v.net.salesman/main.c:203
 #, fuzzy
 msgid "Name for output file holding node sequence (\"-\" for stdout)"
 msgstr "输出的二进制地图的名称 (output=- 用于标准输出)"
 
-#: ../vector/v.net.salesman/main.c:174
-msgid "Categories of points ('cities') on nodes (layer is specified by nlayer)"
-msgstr ""
+#: ../vector/v.net.salesman/main.c:277 ../vector/v.net.iso/main.c:241
+#: ../vector/v.net.alloc/main.c:212
+#, fuzzy
+msgid "Point is not connected to the network"
+msgstr "点到网络的最小距离"
 
-#: ../vector/v.net.salesman/main.c:250
+#: ../vector/v.net.salesman/main.c:286
 #, fuzzy, c-format
 msgid "Number of cities: %d"
 msgstr "输入点的数目:%d"
 
-#: ../vector/v.net.salesman/main.c:252
+#: ../vector/v.net.salesman/main.c:288
 #, fuzzy
 msgid "Not enough cities (< 2)"
 msgstr "类别字段的名称"
 
-#: ../vector/v.net.salesman/main.c:288
+#: ../vector/v.net.salesman/main.c:328
 #, fuzzy
 msgid "Creating cost cache..."
 msgstr "创建一些临时文件 ..."
 
-#: ../vector/v.net.salesman/main.c:309 ../vector/v.net.salesman/main.c:319
+#: ../vector/v.net.salesman/main.c:357 ../vector/v.net.salesman/main.c:371
 #, fuzzy, c-format
 msgid "No point at node %d"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.net.salesman/main.c:313 ../vector/v.net.salesman/main.c:323
+#: ../vector/v.net.salesman/main.c:361 ../vector/v.net.salesman/main.c:375
 #, fuzzy, c-format
 msgid "No category for point at node %d"
 msgstr "没有线记录(类别 = %d)"
 
-#: ../vector/v.net.salesman/main.c:325
+#: ../vector/v.net.salesman/main.c:378
 #, fuzzy, c-format
 msgid "Destination node [cat %d] is unreachable from node [cat %d]"
 msgstr "目的地无法到达\n"
 
-#: ../vector/v.net.salesman/main.c:368
+#: ../vector/v.net.salesman/main.c:421
 msgid "Searching for the shortest cycle..."
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:496
+#: ../vector/v.net.salesman/main.c:555
 #, c-format
 msgid "Cycle with total cost %.3f"
 msgstr ""
 
-#: ../vector/v.net.salesman/main.c:521 ../vector/v.rectify/main.c:170
+#: ../vector/v.net.salesman/main.c:580 ../vector/v.rectify/main.c:170
 #, fuzzy, c-format
 msgid "Unable to open file '%s' for writing"
 msgstr "无法找到文件 [%s]。"
 
-#: ../vector/v.net.iso/main.c:73
+#: ../vector/v.net.iso/main.c:74
 #, fuzzy
 msgid "isolines"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../vector/v.net.iso/main.c:74
+#: ../vector/v.net.iso/main.c:75
 msgid "Splits net by cost isolines."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:77
+#: ../vector/v.net.iso/main.c:78
 msgid ""
 "Splits net to bands between cost isolines (direction from center). Center "
 "node must be opened (costs >= 0). Costs of center node are used in "
 "calculation."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:119 ../vector/v.net.alloc/main.c:116
+#: ../vector/v.net.iso/main.c:89 ../vector/v.net.alloc/main.c:83
 msgid ""
 "Categories of centers (points on nodes) to which net will be allocated, "
 "layer for this categories is given by nlayer option"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:128
+#: ../vector/v.net.iso/main.c:98
 msgid "Costs for isolines"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:165
+#: ../vector/v.net.iso/main.c:189
 #, c-format
 msgid "Wrong iso cost: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:168
+#: ../vector/v.net.iso/main.c:192
 #, c-format
 msgid "Iso cost: %f less than previous"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:170
+#: ../vector/v.net.iso/main.c:194
 #, c-format
 msgid "Iso cost %d: %f"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:177
+#: ../vector/v.net.iso/main.c:202
 msgid "Not enough costs, everything reachable falls to first band"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:213
+#: ../vector/v.net.iso/main.c:249
 msgid "Centre at closed node (costs = -1) ignored"
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:231
+#: ../vector/v.net.iso/main.c:267
 #, fuzzy, c-format
 msgid "Number of centres: %d (nlayer %d)"
 msgstr "输入点的数目:%d"
 
-#: ../vector/v.net.iso/main.c:234
+#: ../vector/v.net.iso/main.c:271
 msgid "Not enough centres for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.iso/main.c:254
+#: ../vector/v.net.iso/main.c:301
 #, fuzzy, c-format
 msgid "Calculating costs from centre %d..."
 msgstr "通过DEM计算阴影..."
 
-#: ../vector/v.net.iso/main.c:517 ../vector/v.net.alloc/main.c:351
-#: ../vector/v.net.alloc/main.c:362
+#: ../vector/v.net.iso/main.c:618 ../vector/v.net.alloc/main.c:394
+#: ../vector/v.net.alloc/main.c:406
 #, fuzzy
 msgid "Cannot get line segment, segment out of line"
 msgstr "无法创建表:%s"
@@ -8093,14 +8462,15 @@ msgstr "%d 个点没有类别,将被忽略"
 msgid "Name for output ASCII file or ASCII vector name if '-o' is defined"
 msgstr "输出文件的名称"
 
-#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:138
+#: ../vector/v.out.ascii/args.c:33 ../general/g.list/main.c:114
 #, fuzzy
 msgid "If not given or '-' then standard output"
 msgstr "如果不指定从标准输入读取,ASCII 文件将被转化为二进制矢量文件"
 
 #: ../vector/v.out.ascii/args.c:35 ../vector/v.out.ascii/args.c:81
-#: ../vector/v.in.ogr/main.c:161 ../vector/v.in.ogr/main.c:265
-#: ../vector/v.in.ogr/main.c:271
+#: ../vector/v.in.ogr/main.c:165 ../vector/v.in.ogr/main.c:220
+#: ../vector/v.in.ogr/main.c:270 ../vector/v.in.ogr/main.c:276
+#: ../vector/v.in.ogr/main.c:318
 #: ../locale/scriptstrings/i.spectral_to_translate.c:10
 #: ../locale/scriptstrings/i.spectral_to_translate.c:12
 #: ../locale/scriptstrings/v.import_to_translate.c:10
@@ -8124,9 +8494,13 @@ msgstr "如果不指定从标准输入读取,ASCII 文件将被转化为二进
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:8
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:10
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:13
-#: ../raster/r.spread/main.c:277 ../raster/r.spread/main.c:289
-#: ../raster/r.spread/main.c:301 ../raster/r.grow.distance/main.c:163
-#: ../raster/r.grow.distance/main.c:169
+#: ../raster3d/r3.flow/main.c:211 ../raster3d/r3.flow/main.c:218
+#: ../raster3d/r3.in.lidar/main.c:140 ../raster3d/r3.in.lidar/main.c:146
+#: ../raster3d/r3.in.lidar/main.c:152 ../raster/r.spread/main.c:277
+#: ../raster/r.spread/main.c:289 ../raster/r.spread/main.c:301
+#: ../raster/r.in.lidar/main.c:120 ../raster/r.in.lidar/main.c:220
+#: ../raster/r.in.lidar/main.c:251 ../raster/r.in.lidar/main.c:260
+#: ../raster/r.grow.distance/main.c:164 ../raster/r.grow.distance/main.c:170
 #: ../raster/r.sim/r.sim.sediment/main.c:177
 #: ../raster/r.sim/r.sim.sediment/main.c:184
 #: ../raster/r.sim/r.sim.sediment/main.c:191
@@ -8190,7 +8564,7 @@ msgstr "字段分隔符"
 
 #: ../vector/v.out.ascii/args.c:75 ../vector/v.out.vtk/main.c:70
 #: ../raster3d/r3.out.vtk/parameters.c:107 ../raster/r.out.vtk/parameters.c:98
-#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:103
+#: ../raster/r.out.ascii/main.c:79 ../display/d.rast.num/main.c:104
 msgid "Number of significant digits (floating point only)"
 msgstr "有意义数字的位数(只用于浮点型)"
 
@@ -8255,7 +8629,7 @@ msgid "No color table defined for vector map <%s>"
 msgstr "无法获得矢量地图的图层信息"
 
 #: ../vector/v.colors.out/main.c:103 ../raster3d/r3.support/main.c:153
-#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:166
+#: ../general/g.cairocomp/main.c:66 ../raster/r.support/main.c:168
 #: ../raster/r.out.png/main.c:205 ../raster/r.colors.out/raster_main.c:79
 #: ../raster/r.colors.out/raster3d_main.c:80 ../raster/r.out.vrml/main.c:131
 #: ../raster/r.out.mat/main.c:91 ../raster/r.out.pov/main.c:173
@@ -8360,9 +8734,10 @@ msgid "Unable to open input file <%s>. Error %d: %s"
 msgstr "无法打开输入文件 <%s@%s>"
 
 #: ../vector/v.in.dwg/main.c:244 ../vector/v.reclass/main.c:322
-#: ../vector/v.in.lidar/main.c:617 ../vector/v.in.ogr/main.c:1703
+#: ../vector/v.in.lidar/attributes.c:139 ../vector/v.in.ogr/main.c:1677
 #: ../vector/v.in.dxf/write_vect.c:241 ../vector/v.to.points/main.c:187
-#: ../vector/v.in.ascii/main.c:517 ../raster/r.contour/main.c:188
+#: ../vector/v.in.ascii/main.c:517 ../raster3d/r3.flow/main.c:67
+#: ../raster/r.contour/main.c:188
 #, fuzzy, c-format
 msgid "Unable to create index for table <%s>, key <%s>"
 msgstr "不能创建输出地图 <%s>"
@@ -8953,7 +9328,7 @@ msgid ""
 "\n"
 msgstr ""
 
-#: ../vector/v.generalize/misc.c:156
+#: ../vector/v.generalize/misc.c:166
 #, c-format
 msgid "Layer %d"
 msgstr "图层 %d"
@@ -8978,7 +9353,7 @@ msgstr "无法关闭输入地图"
 msgid "Resolving conflicts..."
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../vector/v.generalize/main.c:77
+#: ../vector/v.generalize/main.c:77 ../vector/v.decimate/main.c:125
 #, fuzzy
 msgid "generalization"
 msgstr "读取 %s ..."
@@ -9007,207 +9382,211 @@ msgid "Performs vector based generalization."
 msgstr "插值点的数量"
 
 #: ../vector/v.generalize/main.c:100
+#, fuzzy
+msgid "Error map with failed generalizations"
+msgstr "插值点的数量"
+
+#: ../vector/v.generalize/main.c:102
 msgid ""
-"Error map of all lines and boundaries not being generalized due to topology "
-"issues or over-simplification"
+"Lines and boundaries causing errors (collapsed to a point or topology errors)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:124
+#: ../vector/v.generalize/main.c:126
 msgid "Douglas-Peucker Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:125
+#: ../vector/v.generalize/main.c:127
 msgid "Douglas-Peucker Algorithm with reduction parameter"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:126
+#: ../vector/v.generalize/main.c:128
 #, fuzzy
 msgid "Lang Simplification Algorithm"
 msgstr "插值点的数量"
 
-#: ../vector/v.generalize/main.c:127
+#: ../vector/v.generalize/main.c:129
 msgid "Vertex Reduction Algorithm eliminates points close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:128
+#: ../vector/v.generalize/main.c:130
 msgid "Reumann-Witkam Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:129
+#: ../vector/v.generalize/main.c:131
 msgid "Boyle's Forward-Looking Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:130
+#: ../vector/v.generalize/main.c:132
 msgid "McMaster's Sliding Averaging Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:131
+#: ../vector/v.generalize/main.c:133
 msgid "McMaster's Distance-Weighting Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:132
+#: ../vector/v.generalize/main.c:134
 msgid "Chaiken's Algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:133
+#: ../vector/v.generalize/main.c:135
 msgid "Interpolation by Cubic Hermite Splines"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:134
+#: ../vector/v.generalize/main.c:136
 msgid "Snakes method for line smoothing"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:135
+#: ../vector/v.generalize/main.c:137
 #, fuzzy
 msgid "Network generalization"
 msgstr "插值点的数量"
 
-#: ../vector/v.generalize/main.c:136
+#: ../vector/v.generalize/main.c:138
 msgid "Displacement of lines close to each other"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:139
+#: ../vector/v.generalize/main.c:141
 msgid "Generalization algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:146
+#: ../vector/v.generalize/main.c:148
 #, fuzzy
 msgid "Maximal tolerance value"
 msgstr "最大随机值"
 
-#: ../vector/v.generalize/main.c:153
+#: ../vector/v.generalize/main.c:155
 #, fuzzy
 msgid "Look-ahead parameter"
 msgstr "平滑参数"
 
-#: ../vector/v.generalize/main.c:162
+#: ../vector/v.generalize/main.c:164
 msgid "Percentage of the points in the output of 'douglas_reduction' algorithm"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:171
+#: ../vector/v.generalize/main.c:173
 msgid "Slide of computed point toward the original point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:180
+#: ../vector/v.generalize/main.c:182
 msgid "Minimum angle between two consecutive segments in Hermite method"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:188
+#: ../vector/v.generalize/main.c:190
 msgid "Degree threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:197
+#: ../vector/v.generalize/main.c:199
 msgid "Closeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:205
+#: ../vector/v.generalize/main.c:207
 msgid "Betweeness threshold in network generalization"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:212
+#: ../vector/v.generalize/main.c:214
 #, fuzzy
 msgid "Snakes alpha parameter"
 msgstr "平滑参数"
 
-#: ../vector/v.generalize/main.c:219
+#: ../vector/v.generalize/main.c:221
 #, fuzzy
 msgid "Snakes beta parameter"
 msgstr "平滑参数"
 
-#: ../vector/v.generalize/main.c:226
+#: ../vector/v.generalize/main.c:228
 #, fuzzy
 msgid "Number of iterations"
 msgstr "插值点的数量"
 
-#: ../vector/v.generalize/main.c:236
+#: ../vector/v.generalize/main.c:238
 msgid "Disable loop support"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:237
+#: ../vector/v.generalize/main.c:239
 msgid "Do not modify end points of lines forming a closed loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:240
+#: ../vector/v.generalize/main.c:242
 #, fuzzy
 msgid "Do not copy attributes"
 msgstr "无法拷贝表"
 
-#: ../vector/v.generalize/main.c:294
+#: ../vector/v.generalize/main.c:296
 #, fuzzy
 msgid "Unknown method"
 msgstr "未知的方法 <%s>"
 
-#: ../vector/v.generalize/main.c:326
+#: ../vector/v.generalize/main.c:328
 #, fuzzy, c-format
 msgid "No lines found in input map <%s>"
 msgstr "字段 <%s> 未找到"
 
-#: ../vector/v.generalize/main.c:340
+#: ../vector/v.generalize/main.c:342
 #, fuzzy, c-format
 msgid "Unable to create error vector map <%s>"
 msgstr "不能创建输出地图 <%s>"
 
-#: ../vector/v.generalize/main.c:360
+#: ../vector/v.generalize/main.c:362
 #, fuzzy
 msgid "Displacement..."
 msgstr "读取地图"
 
-#: ../vector/v.generalize/main.c:369
+#: ../vector/v.generalize/main.c:371
 #, fuzzy
 msgid "Network generalization..."
 msgstr "插值点的数量"
 
-#: ../vector/v.generalize/main.c:384
+#: ../vector/v.generalize/main.c:386
 msgid "Attributes are needed for 'where' option, copying table"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:401
+#: ../vector/v.generalize/main.c:402
 #, fuzzy, c-format
 msgid "Generalization (%s)..."
 msgstr "读取 %s ..."
 
-#: ../vector/v.generalize/main.c:402
+#: ../vector/v.generalize/main.c:403
 #, fuzzy, c-format
 msgid "Using threshold: %g %s"
 msgstr "非法的输出文件名"
 
-#: ../vector/v.generalize/main.c:533
+#: ../vector/v.generalize/main.c:523
 #, c-format
 msgid "Method '%s' did not preserve first point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:538
+#: ../vector/v.generalize/main.c:528
 #, c-format
 msgid "Method '%s' did not preserve last point"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:545
+#: ../vector/v.generalize/main.c:535
 #, c-format
 msgid "Method '%s' did not preserve loop"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:577
+#: ../vector/v.generalize/main.c:567
 #, c-format
 msgid ""
 "%d boundaries were not modified because modification would damage topology"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:580
+#: ../vector/v.generalize/main.c:570
 #, c-format
 msgid "%d lines/boundaries were not modified due to over-simplification"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:601
+#: ../vector/v.generalize/main.c:591
 #, c-format
 msgid ""
 "Number of vertices for selected features %s from %d to %d (%d%% remaining)"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "reduced"
 msgstr ""
 
-#: ../vector/v.generalize/main.c:602
+#: ../vector/v.generalize/main.c:592
 msgid "changed"
 msgstr ""
 
@@ -9285,8 +9664,8 @@ msgstr ""
 
 #: ../vector/v.label.sa/main.c:98 ../vector/v.lrs/v.lrs.label/main.c:193
 #: ../vector/v.label/main.c:151 ../display/d.grid/main.c:103
-#: ../display/d.geodesic/main.c:66 ../display/d.rast.num/main.c:87
-#: ../display/d.legend/main.c:161
+#: ../display/d.rhumbline/main.c:62 ../display/d.geodesic/main.c:66
+#: ../display/d.rast.num/main.c:88 ../display/d.legend/main.c:161
 msgid "Text color"
 msgstr "文本颜色"
 
@@ -9299,13 +9678,13 @@ msgstr "文本颜色"
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:11
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:13
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:15
-#: ../display/d.rast.num/main.c:88 ../display/d.rast.num/main.c:94
-#: ../display/d.rast.num/main.c:112 ../display/d.vect/main.c:117
+#: ../display/d.rast.num/main.c:89 ../display/d.rast.num/main.c:95
+#: ../display/d.rast.num/main.c:113 ../display/d.vect/main.c:117
 #: ../display/d.vect/main.c:123 ../display/d.vect/main.c:127
 #: ../display/d.vect/main.c:134 ../display/d.vect/main.c:279
-#: ../display/d.northarrow/main.c:66 ../display/d.northarrow/main.c:72
-#: ../display/d.rast.arrow/main.c:117 ../display/d.rast.arrow/main.c:123
-#: ../display/d.rast.arrow/main.c:129 ../display/d.rast.arrow/main.c:135
+#: ../display/d.northarrow/main.c:95 ../display/d.northarrow/main.c:101
+#: ../display/d.rast.arrow/main.c:119 ../display/d.rast.arrow/main.c:125
+#: ../display/d.rast.arrow/main.c:131 ../display/d.rast.arrow/main.c:137
 #: ../display/d.barscale/main.c:113 ../display/d.barscale/main.c:119
 msgid "Colors"
 msgstr ""
@@ -9503,14 +9882,14 @@ msgstr ""
 msgid "Cleaning output topology"
 msgstr "写入 %s ... "
 
-#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:760
-#: ../vector/v.in.ogr/main.c:1418
+#: ../vector/v.voronoi/clean_topo.c:87 ../vector/v.buffer/main.c:759
+#: ../vector/v.in.ogr/main.c:1391
 #, fuzzy
 msgid "Removing dangles..."
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:763
-#: ../vector/v.in.ogr/main.c:1433
+#: ../vector/v.voronoi/clean_topo.c:89 ../vector/v.buffer/main.c:762
+#: ../vector/v.in.ogr/main.c:1406
 #, fuzzy
 msgid "Removing bridges..."
 msgstr "移除 [%s] 的空文件...\n"
@@ -9563,14 +9942,6 @@ msgstr "读取地图"
 msgid "Constructing 3D hull..."
 msgstr "绘制 ... "
 
-#: ../vector/v.surf.bspline/main.c:94 ../vector/v.lidar.edgedetection/main.c:73
-#: ../vector/v.in.lidar/main.c:158 ../vector/v.lidar.growing/main.c:76
-#: ../vector/v.lidar.correction/main.c:69
-#: ../locale/scriptstrings/r3.in.xyz_to_translate.c:5
-#: ../raster/r.in.xyz/main.c:163 ../raster/r.in.lidar/main.c:171
-msgid "LIDAR"
-msgstr ""
-
 #: ../vector/v.surf.bspline/main.c:96
 msgid ""
 "Performs bicubic or bilinear spline interpolation with Tykhonov "
@@ -9652,7 +10023,9 @@ msgstr "插值点的数量"
 msgid "Bicubic interpolation"
 msgstr "插值点的数量"
 
-#: ../vector/v.surf.bspline/main.c:177 ../raster/r.resamp.bspline/main.c:132
+#: ../vector/v.surf.bspline/main.c:177
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:16
+#: ../raster/r.resamp.bspline/main.c:132
 msgid "Tykhonov regularization parameter (affects smoothing)"
 msgstr ""
 
@@ -10065,6 +10438,193 @@ msgstr "为 <%s> 读取类别文件时发生错误。"
 msgid "writeVTKHeader: Writing VTK-Header"
 msgstr ""
 
+#: ../vector/v.cluster/main.c:91
+#, fuzzy
+msgid "point cloud"
+msgstr "未找到任何记录。\n"
+
+#: ../vector/v.cluster/main.c:92
+#, fuzzy
+msgid "cluster"
+msgstr "栅格值"
+
+#: ../vector/v.cluster/main.c:93
+#, fuzzy
+msgid "clump"
+msgstr "%s - 未发现"
+
+#: ../vector/v.cluster/main.c:94
+#, fuzzy
+msgid "Performs cluster identification."
+msgstr "分类结果的文件名称"
+
+#: ../vector/v.cluster/main.c:102
+#, fuzzy
+msgid "Layer number or name for cluster ids"
+msgstr "输入矢量文件的名称"
+
+#: ../vector/v.cluster/main.c:109
+#, fuzzy
+msgid "Maximum distance to neighbors"
+msgstr "点到网络的最小距离"
+
+#: ../vector/v.cluster/main.c:115
+#, fuzzy
+msgid "Minimum number of points to create a cluster"
+msgstr "一个片断最多所能包含的点数"
+
+#: ../vector/v.cluster/main.c:123
+#, fuzzy
+msgid "Clustering method"
+msgstr "相关性"
+
+#: ../vector/v.cluster/main.c:127
+msgid "Force 2D clustering"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:144 ../doc/vector/v.example/main.c:81
+#, fuzzy
+msgid "Unable to set predetermined vector open level"
+msgstr "无法打开矢量质心点地图。"
+
+#: ../vector/v.cluster/main.c:165
+#, fuzzy
+msgid "Minimum number of points must be at least 2"
+msgstr "打印的份数"
+
+#: ../vector/v.cluster/main.c:173
+#, fuzzy, c-format
+msgid "Option %s must be positive"
+msgstr "邻域大小"
+
+#: ../vector/v.cluster/main.c:186
+#, fuzzy
+msgid "Counting input points ..."
+msgstr "读取 %s ..."
+
+#: ../vector/v.cluster/main.c:192
+#, c-format
+msgid "Layer %d is not empty, choose another layer"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:199
+#, fuzzy
+msgid "Not enough points in input, nothing to do"
+msgstr "%d 个点在当前范围之外,将被忽略"
+
+#: ../vector/v.cluster/main.c:216
+#, fuzzy
+msgid "Creating search index ..."
+msgstr "创建一些临时文件 ..."
+
+#: ../vector/v.cluster/main.c:251 ../vector/v.cluster/main.c:456
+#: ../vector/v.cluster/main.c:706
+#, fuzzy, c-format
+msgid "Option %s must be a positive number"
+msgstr "nsteps 必须大于 0,使用 nsteps=255"
+
+#: ../vector/v.cluster/main.c:260 ../vector/v.cluster/main.c:465
+#, fuzzy
+msgid "Estimating maximum distance ..."
+msgstr "点间的最大距离: %f"
+
+#: ../vector/v.cluster/main.c:291 ../vector/v.cluster/main.c:496
+#, fuzzy
+msgid "No neighbors found"
+msgstr "将要导入的二进制栅格文件"
+
+#: ../vector/v.cluster/main.c:301 ../vector/v.cluster/main.c:506
+#, fuzzy, c-format
+msgid "Distance to the %d nearest neighbor:"
+msgstr "点到网络的最小距离"
+
+#: ../vector/v.cluster/main.c:302 ../vector/v.cluster/main.c:507
+#, c-format
+msgid "Min: %g, max: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:303 ../vector/v.cluster/main.c:508
+#, c-format
+msgid "Mean: %g"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:304 ../vector/v.cluster/main.c:509
+#, fuzzy, c-format
+msgid "Standard deviation: %g"
+msgstr "标准偏差"
+
+#: ../vector/v.cluster/main.c:306 ../vector/v.cluster/main.c:511
+#, fuzzy, c-format
+msgid "Estimated maximum distance: %g"
+msgstr "点间的最大距离: %f"
+
+#: ../vector/v.cluster/main.c:310 ../vector/v.cluster/main.c:515
+#: ../vector/v.cluster/main.c:928 ../vector/v.cluster/main.c:1089
+#, fuzzy
+msgid "Building clusters ..."
+msgstr "寻找路径"
+
+#: ../vector/v.cluster/main.c:352 ../vector/v.cluster/main.c:560
+#, c-format
+msgid "nlines: %d, nclusters: %d"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:396 ../vector/v.cluster/main.c:605
+#, fuzzy, c-format
+msgid "No clusters found, adjust option %s"
+msgstr "%d 个点在当前范围之外,将被忽略"
+
+#: ../vector/v.cluster/main.c:404 ../vector/v.cluster/main.c:613
+#: ../vector/v.cluster/main.c:970 ../raster/r.clump/clump.c:225
+#, fuzzy
+msgid "Generating renumbering scheme..."
+msgstr "写入 %s ... "
+
+#: ../vector/v.cluster/main.c:432 ../vector/v.cluster/main.c:647
+#: ../vector/v.cluster/main.c:826 ../vector/v.cluster/main.c:998
+#: ../vector/v.cluster/main.c:1152
+#, fuzzy
+msgid "Write out cluster ids ..."
+msgstr "输出栅格地图 %s ... "
+
+#: ../vector/v.cluster/main.c:710
+#, fuzzy
+msgid "Loading points ..."
+msgstr "读取 %s ..."
+
+#: ../vector/v.cluster/main.c:734 ../vector/v.cluster/main.c:878
+msgid "Reachability network ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:746 ../vector/v.cluster/main.c:779
+#: ../vector/v.cluster/main.c:888 ../vector/v.cluster/main.c:1066
+#: ../vector/v.cluster/main.c:1100 ../vector/v.cluster/main.c:1137
+#, fuzzy
+msgid "Not enough points found"
+msgstr "未找到任何记录。\n"
+
+#: ../vector/v.cluster/main.c:807
+msgid "Set cluster ids ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:909
+msgid "Neighbor point's core dist is -1"
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1054
+msgid "Core density ..."
+msgstr ""
+
+#: ../vector/v.cluster/main.c:1178
+#, fuzzy, c-format
+msgid "%d clusters found"
+msgstr "%s - 未发现"
+
+#: ../vector/v.cluster/main.c:1179
+#, fuzzy, c-format
+msgid "%d outliers found"
+msgstr "%s - 未发现"
+
 #: ../vector/v.lidar.edgedetection/main.c:74 ../imagery/i.zc/main.c:53
 msgid "edges"
 msgstr ""
@@ -10207,26 +10767,26 @@ msgstr "无法创建 %s"
 msgid "Impossible to write to aux table"
 msgstr "无法创建 %s"
 
-#: ../vector/v.net/main.c:47
+#: ../vector/v.net/main.c:49
 #, fuzzy
 msgid "network maintenance"
 msgstr "变化"
 
-#: ../vector/v.net/main.c:48
+#: ../vector/v.net/main.c:50
 msgid "Performs network maintenance."
 msgstr ""
 
-#: ../vector/v.net/main.c:119
+#: ../vector/v.net/main.c:122
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s> at topology level %d"
 msgstr "无法打开矢量文件<%s>在<%s>中"
 
-#: ../vector/v.net/main.c:135
+#: ../vector/v.net/main.c:139
 #, fuzzy, c-format
 msgid "%d new points (nodes) written to output."
 msgstr "%d个点写入输出地图\n"
 
-#: ../vector/v.net/main.c:146
+#: ../vector/v.net/main.c:151
 #, fuzzy, c-format
 msgid "%d lines (network arcs) written to output."
 msgstr "读取%-5d条线并写入输出文件\n"
@@ -10265,7 +10825,7 @@ msgstr "输入的 2D 矢量地图的名称"
 msgid "Required for operation 'nodes', 'connect', 'report' and 'nreport'"
 msgstr ""
 
-#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:56
+#: ../vector/v.net/args.c:17 ../vector/v.net/args.c:57
 msgid "Arcs"
 msgstr ""
 
@@ -10278,14 +10838,14 @@ msgstr "输入的 2D 矢量地图的名称"
 msgid "Required for operation 'connect' and 'arcs'"
 msgstr ""
 
-#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:63
-#: ../vector/v.net/args.c:85 ../vector/v.net/args.c:92
+#: ../vector/v.net/args.c:25 ../vector/v.net/args.c:71
+#: ../vector/v.net/args.c:93 ../vector/v.net/args.c:100
 msgid "Nodes"
 msgstr ""
 
 #: ../vector/v.net/args.c:36
 #: ../locale/scriptstrings/g.extension.all_to_translate.c:6
-#: ../locale/scriptstrings/g.extension_to_translate.c:8
+#: ../locale/scriptstrings/g.extension_to_translate.c:10
 #: ../general/g.mapsets/main.c:81
 #, fuzzy
 msgid "Operation to be performed"
@@ -10315,49 +10875,132 @@ msgid ""
 "print to standard output {point_category line_category[,line_category...]}"
 msgstr ""
 
-#: ../vector/v.net/args.c:72
+#: ../vector/v.net/args.c:50
+msgid "create turntable on vector network"
+msgstr ""
+
+#: ../vector/v.net/args.c:80
 msgid "Required for operation 'connect'. Connect points in given threshold."
 msgstr ""
 
-#: ../vector/v.net/args.c:76
+#: ../vector/v.net/args.c:84
 #, fuzzy
 msgid "Name of input file"
 msgstr "输入图层的名称"
 
-#: ../vector/v.net/args.c:78
+#: ../vector/v.net/args.c:86
 #, fuzzy
 msgid "Required for operation 'arcs' ('-' for standard input)"
 msgstr "地图东向和北向格网坐标的起点"
 
-#: ../vector/v.net/args.c:83
+#: ../vector/v.net/args.c:91
 msgid "Assign unique categories to new points"
 msgstr ""
 
-#: ../vector/v.net/args.c:84
+#: ../vector/v.net/args.c:92
 #, fuzzy
 msgid "For operation 'nodes'"
 msgstr "未知的类型"
 
-#: ../vector/v.net/args.c:89
+#: ../vector/v.net/args.c:97
 #, fuzzy
 msgid "Snap points to network"
 msgstr "终止点矢量图"
 
-#: ../vector/v.net/args.c:91
+#: ../vector/v.net/args.c:99
 msgid ""
 "For operation 'connect'. By default, a new line from the point to the "
 "network is created."
 msgstr ""
 
-#: ../vector/v.net/args.c:114
+#: ../vector/v.net/args.c:103
+#, fuzzy
+msgid "Turntable layer"
+msgstr " nv color\n"
+
+#: ../vector/v.net/args.c:106
+msgid ""
+"Layer where turntable will be attached. Format: layer number[/layer name]."
+"Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:117
+msgid ""
+"Layer with unique categories for every line in arc_layer and point on every "
+"node.  The categories are used in turntable. Format: layer number[/layer "
+"name]. Required for operation 'turntable'."
+msgstr ""
+
+#: ../vector/v.net/args.c:146
 #, fuzzy
 msgid "Unknown operation"
 msgstr "未知的类型"
 
-#: ../vector/v.net/args.c:141
+#: ../vector/v.net/args.c:175
 msgid "Threshold value must be >= 0"
 msgstr ""
 
+#: ../vector/v.net/turntable.c:326 ../vector/v.net/turntable.c:346
+#: ../vector/v.net/turntable.c:366 ../vector/v.net/turntable.c:487
+#: ../vector/v.net/turntable.c:554
+#, fuzzy, c-format
+msgid "Unable to read line from <%s>."
+msgstr "无法读取行 %i\n"
+
+#: ../vector/v.net/turntable.c:448 ../vector/v.net/turntable.c:523
+#, fuzzy
+msgid "Unable to insert data into turntable."
+msgstr "无法向表中插入新记录:%s"
+
+#: ../vector/v.net/turntable.c:637
+#, fuzzy, c-format
+msgid "Unable to open vector map <%s>."
+msgstr "无法找到矢量地图 [%s]"
+
+#: ../vector/v.net/turntable.c:642
+#, fuzzy, c-format
+msgid "Unable to create vector map <%s>."
+msgstr "不能创建输出地图 <%s>"
+
+#: ../vector/v.net/turntable.c:655
+#, fuzzy, c-format
+msgid "Arc layer <%s> does not exist in map <%s>."
+msgstr "包含结果的栅格图的名称"
+
+#: ../vector/v.net/turntable.c:660
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tlayer data."
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+
+#: ../vector/v.net/turntable.c:665
+#, fuzzy, c-format
+msgid ""
+"Layer <%s> already exist in map <%s>.\n"
+"It will be overwritten by tuclayer data."
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+
+#: ../vector/v.net/turntable.c:700
+#, fuzzy, c-format
+msgid "Unable to open database <%s> using driver <%s>"
+msgstr "无法打开数据库%s,通过驱动%s"
+
+#: ../vector/v.net/turntable.c:715
+#, fuzzy, c-format
+msgid "Unable to create turntable <%s>."
+msgstr "不能创建输出地图 <%s>"
+
+#: ../vector/v.net/turntable.c:722
+#, fuzzy, c-format
+msgid "Unable to connect table <%s> to vector map <%s>."
+msgstr "无法找到矢量地图 [%s]"
+
+#: ../vector/v.net/turntable.c:727
+#, fuzzy, c-format
+msgid "Unable to create index for column <%s> in table <%s>."
+msgstr "不能创建输出地图 <%s>"
+
 #: ../vector/v.net/report.c:37
 #, c-format
 msgid "Line %d has no category"
@@ -10491,7 +11134,7 @@ msgid "Categories already exist in layer %d"
 msgstr "%d 个类别从表中加载"
 
 #: ../vector/v.category/main.c:364 ../vector/v.delaunay/main.c:172
-#: ../vector/v.in.ogr/main.c:1455
+#: ../vector/v.in.ogr/main.c:1428
 #, fuzzy
 msgid "Unable to calculate area centroid"
 msgstr "无法计算面的质心"
@@ -10609,7 +11252,7 @@ msgstr "数据库连接未定义"
 msgid "Key column type is not integer"
 msgstr "类别字段不是整型"
 
-#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:211
+#: ../vector/v.reclass/main.c:267 ../vector/v.db.select/main.c:229
 #, fuzzy, c-format
 msgid "Unable to fetch data from table <%s>"
 msgstr "无法从表中选取数据"
@@ -11385,7 +12028,7 @@ msgstr ""
 msgid "Force 2D output even if input is 3D (applies to Shapefile output only)"
 msgstr "强制输出整型值"
 
-#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:270
+#: ../vector/v.out.ogr/args.c:116 ../vector/v.in.ogr/main.c:275
 #: ../vector/v.out.postgis/args.c:78
 msgid "Useful if input is 3D but all z coordinates are identical"
 msgstr ""
@@ -11647,8 +12290,8 @@ msgstr "输入地图的区域"
 
 #: ../vector/v.proj/main.c:78 ../vector/v.proj/main.c:83
 #: ../vector/v.proj/main.c:89 ../vector/v.net.flow/main.c:108
-#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:153
-#: ../raster/r.proj/main.c:158 ../raster/r.proj/main.c:163
+#: ../vector/v.net.flow/main.c:114 ../raster/r.proj/main.c:154
+#: ../raster/r.proj/main.c:159 ../raster/r.proj/main.c:164
 #, fuzzy
 msgid "Source"
 msgstr "变化的总和"
@@ -11658,7 +12301,7 @@ msgstr "变化的总和"
 msgid "Mapset containing input vector map"
 msgstr "输入的 2D 矢量地图的名称"
 
-#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:157
+#: ../vector/v.proj/main.c:82 ../raster/r.proj/main.c:158
 #, fuzzy
 msgid "Default: name of current mapset"
 msgstr "从当前区域设置"
@@ -11668,7 +12311,7 @@ msgstr "从当前区域设置"
 msgid "Name of input vector map to re-project"
 msgstr "输入栅格图的名称"
 
-#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:166
+#: ../vector/v.proj/main.c:92 ../raster/r.proj/main.c:167
 msgid "Path to GRASS database of input location"
 msgstr "输入区域的GRASS数据库路径"
 
@@ -11683,8 +12326,8 @@ msgstr ""
 
 #: ../vector/v.proj/main.c:101 ../vector/v.proj/main.c:106
 #: ../vector/v.proj/main.c:118 ../vector/v.proj/main.c:125
-#: ../raster/r.proj/main.c:171 ../raster/r.proj/main.c:182
-#: ../raster/r.proj/main.c:198
+#: ../raster/r.proj/main.c:172 ../raster/r.proj/main.c:183
+#: ../raster/r.proj/main.c:199
 #, fuzzy
 msgid "Target"
 msgstr "面\n"
@@ -11717,17 +12360,19 @@ msgstr ""
 msgid "Disable wrapping to -180,180 for latlon output"
 msgstr ""
 
-#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:141
-#: ../raster/r.proj/main.c:244 ../display/d.mon/start.c:38
+#: ../vector/v.proj/main.c:144 ../vector/v.external/main.c:128
+#: ../raster/r.proj/main.c:245 ../display/d.mon/start.c:51
+#: ../imagery/i.cluster/main.c:179 ../imagery/i.gensigset/parse.c:57
+#: ../imagery/i.gensig/parse.c:50
 #, c-format
 msgid "option <%s>: <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:251
+#: ../vector/v.proj/main.c:159 ../raster/r.proj/main.c:252
 msgid "Input and output locations can not be the same"
 msgstr ""
 
-#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:287
+#: ../vector/v.proj/main.c:183 ../raster/r.proj/main.c:288
 #, fuzzy, c-format
 msgid "Checking location <%s> mapset <%s>"
 msgstr "输入的栅格图"
@@ -12071,358 +12716,575 @@ msgstr ""
 "表:%s\n"
 "关键列:%s\n"
 
-#: ../vector/v.patch/main.c:70
+#: ../vector/v.patch/main.c:71
 #, fuzzy
 msgid "Creates a new vector map by combining other vector maps."
 msgstr "将GRASS矢量图层转化为GRASS栅格图层。"
 
-#: ../vector/v.patch/main.c:81
+#: ../vector/v.patch/main.c:82
 #, fuzzy
 msgid ""
 "Name for output vector map where bounding boxes of input vector maps are "
 "written to"
 msgstr "用来存放错误信息的输出地图的名称"
 
-#: ../vector/v.patch/main.c:85
-msgid ""
-"Append files to existing file (overwriting existing files must be activated)"
+#: ../vector/v.patch/main.c:86
+#, fuzzy
+msgid "Do not expect input with topology"
+msgstr "点模式下不建立拓扑"
+
+#: ../vector/v.patch/main.c:88
+msgid "Applicable when input is points without topology"
 msgstr ""
 
-#: ../vector/v.patch/main.c:90
+#: ../vector/v.patch/main.c:92
+msgid "Expect z coordinate even when not using topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:94
+msgid "Applicable when input is points with z coordinate but without topology"
+msgstr ""
+
+#: ../vector/v.patch/main.c:98
 #, fuzzy
 msgid "Copy also attribute table"
 msgstr "无法创建属性表"
 
-#: ../vector/v.patch/main.c:92
+#: ../vector/v.patch/main.c:100
 msgid "Only the table of layer 1 is currently supported"
 msgstr ""
 
-#: ../vector/v.patch/main.c:199
+#: ../vector/v.patch/main.c:104
+msgid ""
+"Append files to existing file (overwriting existing files must be activated)"
+msgstr ""
+
+#: ../vector/v.patch/main.c:214
 msgid "Missing table"
 msgstr ""
 
-#: ../vector/v.patch/main.c:203
+#: ../vector/v.patch/main.c:218
 #, fuzzy
 msgid "Key columns differ"
 msgstr "y 字段的名称"
 
-#: ../vector/v.patch/main.c:209
+#: ../vector/v.patch/main.c:224
 #, fuzzy
 msgid "Number of columns differ"
 msgstr "列数"
 
-#: ../vector/v.patch/main.c:221
+#: ../vector/v.patch/main.c:236
 #, fuzzy
 msgid "Column names differ"
 msgstr "列名"
 
-#: ../vector/v.patch/main.c:229
+#: ../vector/v.patch/main.c:244
 #, fuzzy
 msgid "Column types differ"
 msgstr "列名"
 
-#: ../vector/v.patch/main.c:234
+#: ../vector/v.patch/main.c:249
 #, fuzzy
 msgid "Length of string columns differ"
 msgstr "列数"
 
-#: ../vector/v.patch/main.c:248
+#: ../vector/v.patch/main.c:263
 #, fuzzy
 msgid "Key column not found"
 msgstr "关键字段 '%s' 未找到"
 
-#: ../vector/v.patch/main.c:260
+#: ../vector/v.patch/main.c:275
 #, fuzzy
 msgid "The output map is not 3D"
 msgstr "没有输出地图"
 
-#: ../vector/v.patch/main.c:305 ../vector/v.sample/main.c:190
+#: ../vector/v.patch/main.c:320 ../vector/v.sample/main.c:190
 #, fuzzy, c-format
 msgid "Unable to create table <%s>"
 msgstr "不能创建输出地图 <%s>"
 
-#: ../vector/v.patch/main.c:332
+#: ../vector/v.patch/main.c:347
 #, fuzzy, c-format
 msgid "Patching vector map <%s>..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.patch/main.c:356
+#: ../vector/v.patch/main.c:371
 #, c-format
 msgid "Error reading vector map <%s> - some data may not be correct"
 msgstr ""
 
-#: ../vector/v.patch/main.c:409
+#: ../vector/v.patch/main.c:424
 #, fuzzy, c-format
 msgid "Building topology for vector map <%s>..."
 msgstr "矢量文件读取错误"
 
-#: ../vector/v.patch/main.c:415
+#: ../vector/v.patch/main.c:430
 msgid "Intersections at borders will have to be snapped"
 msgstr ""
 
-#: ../vector/v.patch/main.c:416
+#: ../vector/v.patch/main.c:431
 msgid "Lines common between files will have to be edited"
 msgstr ""
 
-#: ../vector/v.patch/main.c:417
+#: ../vector/v.patch/main.c:432
 #, fuzzy
 msgid "The header information also may have to be edited"
 msgstr "范围信息无效 (请运行 r.support)"
 
-#: ../vector/v.patch/main.c:419
+#: ../vector/v.patch/main.c:434
 #, fuzzy, c-format
 msgid "%d vector maps patched"
 msgstr "%d 条记录被更新"
 
-#: ../vector/v.patch/main.c:442
+#: ../vector/v.patch/main.c:457
 #, c-format
 msgid "Cannot open select cursor: '%s'"
 msgstr "无法打开选择游标:'%s'"
 
-#: ../vector/v.patch/main.c:454
+#: ../vector/v.patch/main.c:469
 #, fuzzy
 msgid "Cannot fetch row"
 msgstr "无法获取数据"
 
-#: ../vector/v.patch/main.c:504
+#: ../vector/v.patch/main.c:519
 #, fuzzy
 msgid "Unknown column type"
 msgstr "未知的类型"
 
-#: ../vector/v.patch/main.c:512
+#: ../vector/v.patch/main.c:527
 #, fuzzy, c-format
 msgid "Cannot insert new record: '%s'"
 msgstr "无法插入新行:%s"
 
-#: ../vector/v.in.lidar/main.c:159
+#: ../vector/v.in.lidar/projection.c:126 ../vector/v.in.ogr/main.c:618
+#: ../raster/r.in.lidar/projection.c:128 ../raster/r.external/proj.c:34
+#: ../raster/r.in.gdal/main.c:469
+#, fuzzy
+msgid "Over-riding projection check"
+msgstr "无法获取栅格行\n"
+
+#: ../vector/v.in.lidar/main.c:48
+#, c-format
+msgid ""
+"Values of %s and %s are the same. All categories would be stored only in "
+"layer number <%d>"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:138
 #, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
 msgstr "将GRASS矢量图层转化为GRASS栅格图层。"
 
-#: ../vector/v.in.lidar/main.c:162 ../raster/r.in.lidar/main.c:176
+#: ../vector/v.in.lidar/main.c:141 ../raster3d/r3.in.lidar/main.c:131
+#: ../raster/r.in.lidar/main.c:114
 #, fuzzy
 msgid "LAS input file"
 msgstr "输入文件"
 
-#: ../vector/v.in.lidar/main.c:163 ../raster/r.in.lidar/main.c:177
+#: ../vector/v.in.lidar/main.c:142 ../raster/r.in.lidar/main.c:115
+#: ../raster/r.in.lidar/main.c:125
 msgid "LiDAR input files in LAS format (*.las or *.laz)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:173 ../vector/v.in.ogr/main.c:169
+#: ../vector/v.in.lidar/main.c:149
+msgid "Set to 1 by default, use -c to not store it"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:156
 #, fuzzy
-msgid "Import subregion only"
-msgstr "只打印栅格图的区域"
+msgid "Layer number to store return information as category"
+msgstr "图层 %d"
 
-#: ../vector/v.in.lidar/main.c:174 ../vector/v.in.lidar/main.c:218
-msgid "Subregion"
+#: ../vector/v.in.lidar/main.c:157 ../vector/v.in.lidar/main.c:165
+#: ../vector/v.in.lidar/main.c:173
+msgid "Leave empty to not store it"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:176 ../vector/v.in.ogr/main.c:172
+#: ../vector/v.in.lidar/main.c:172
+#, fuzzy
+msgid "Layer number where RBG colors are stored as category"
+msgstr "无法创建属性表"
+
+#: ../vector/v.in.lidar/main.c:183 ../vector/v.in.ogr/main.c:173
+#, fuzzy
+msgid "Import subregion only"
+msgstr "只打印栅格图的区域"
+
+#: ../vector/v.in.lidar/main.c:186 ../vector/v.in.ogr/main.c:176
 #, fuzzy
 msgid "Format: xmin,ymin,xmax,ymax - usually W,S,E,N"
 msgstr "只导入子区域 (xmin,ymin,xmax,ymax  - 通常为 W,S,E,N)"
 
-#: ../vector/v.in.lidar/main.c:182 ../vector/v.in.ogr/main.c:214
-#: ../raster/r.in.gdal/main.c:146
-msgid "Name for new location to create"
-msgstr "将要创建的新区域的名称"
+#: ../vector/v.in.lidar/main.c:193 ../vector/v.decimate/main.c:146
+#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:159
+#, fuzzy
+msgid "Filter range for z data (min,max)"
+msgstr "整数范围:min,max"
 
-#: ../vector/v.in.lidar/main.c:189 ../raster/r.in.lidar/main.c:251
+#: ../vector/v.in.lidar/main.c:200 ../raster3d/r3.in.lidar/main.c:179
+#: ../raster/r.in.lidar/main.c:226
 msgid "Only import points of selected return type"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:190 ../raster/r.in.lidar/main.c:252
+#: ../vector/v.in.lidar/main.c:201 ../raster3d/r3.in.lidar/main.c:180
+#: ../raster/r.in.lidar/main.c:227
 #, fuzzy
 msgid "If not specified, all points are imported"
 msgstr "导入的整数值"
 
-#: ../vector/v.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:260
+#: ../vector/v.in.lidar/main.c:210 ../raster3d/r3.in.lidar/main.c:189
+#: ../raster/r.in.lidar/main.c:236
 msgid "Only import points of selected class(es)"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:199 ../raster/r.in.lidar/main.c:261
+#: ../vector/v.in.lidar/main.c:211 ../raster3d/r3.in.lidar/main.c:190
+#: ../raster/r.in.lidar/main.c:237
 #, fuzzy
 msgid ""
 "Input is comma separated integers. If not specified, all points are imported."
 msgstr "导入的整数值"
 
-#: ../vector/v.in.lidar/main.c:205 ../raster/r.in.lidar/main.c:267
+#: ../vector/v.in.lidar/main.c:218
+msgid "Areas where to import points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:219
 #, fuzzy
-msgid "Print LAS file info and exit"
-msgstr "打印栅格历史信息"
+msgid "Name of vector map with areas where the points should be imported"
+msgstr "输出矢量点图的名称"
 
-#: ../vector/v.in.lidar/main.c:214 ../vector/v.in.ogr/main.c:279
-#: ../raster/r.in.lidar/main.c:278
+#: ../vector/v.in.lidar/main.c:224
 #, fuzzy
-msgid "Override dataset projection (use location's projection)"
-msgstr "覆盖投影(使用区域的投影)"
+msgid "Layer number or name for mask option"
+msgstr "输入矢量文件的名称"
 
-#: ../vector/v.in.lidar/main.c:219 ../vector/v.in.ogr/main.c:291
+#: ../vector/v.in.lidar/main.c:232
+msgid "Do not import every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:233
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are imported"
+msgstr "导入的整数值"
+
+#: ../vector/v.in.lidar/main.c:235 ../vector/v.in.lidar/main.c:245
+#: ../vector/v.in.lidar/main.c:254 ../vector/v.in.lidar/main.c:263
+#, fuzzy
+msgid "Decimation"
+msgstr "相关性"
+
+#: ../vector/v.in.lidar/main.c:242
+msgid "Import only every n-th point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:243
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are imported"
+msgstr "导入的整数值"
+
+#: ../vector/v.in.lidar/main.c:252 ../vector/v.decimate/main.c:181
+msgid "Skip first n points"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:253 ../vector/v.decimate/main.c:183
+msgid "Skips the given number of points at the beginning."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:261
+#, fuzzy
+msgid "Import only n points"
+msgstr "导入地图 %d 的要素..."
+
+#: ../vector/v.in.lidar/main.c:262
+#, fuzzy
+msgid "Imports only the given number of points"
+msgstr "%s=%s - 非法的内插点数"
+
+#: ../vector/v.in.lidar/main.c:269 ../vector/v.in.ogr/main.c:218
+#: ../raster/r.in.gdal/main.c:164
+msgid "Name for new location to create"
+msgstr "将要创建的新区域的名称"
+
+#: ../vector/v.in.lidar/main.c:275 ../raster/r.in.lidar/main.c:244
+#, fuzzy
+msgid "Print LAS file info and exit"
+msgstr "打印栅格历史信息"
+
+#: ../vector/v.in.lidar/main.c:281 ../vector/v.in.ogr/main.c:298
 #, fuzzy
 msgid "Limit import to the current region"
 msgstr "不更新当前区域"
 
-#: ../vector/v.in.lidar/main.c:224 ../vector/v.in.ogr/main.c:296
-#: ../raster/r.in.lidar/main.c:273 ../raster/r.external/main.c:108
-#: ../raster/r.in.gdal/main.c:171
+#: ../vector/v.in.lidar/main.c:285
+#, fuzzy
+msgid "Invert mask when selecting points"
+msgstr "包含线的输入地图"
+
+#: ../vector/v.in.lidar/main.c:291 ../vector/v.in.ogr/main.c:303
+#: ../raster/r.in.lidar/main.c:250 ../raster/r.external/main.c:108
+#: ../raster/r.in.gdal/main.c:191
 #, fuzzy
 msgid "Extend region extents based on new dataset"
 msgstr "基于新的数据集扩展区域的范围"
 
-#: ../vector/v.in.lidar/main.c:229 ../vector/v.in.ogr/main.c:309
+#: ../vector/v.in.lidar/main.c:294 ../vector/v.in.lidar/main.c:302
+#: ../vector/v.in.lidar/main.c:305 ../vector/v.decimate/main.c:241
+#: ../vector/v.decimate/main.c:244
+msgid "Speed"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:299
+msgid "Do not automatically add unique ID as category to each point"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:301
+#, fuzzy
+msgid "Create only requested layers and categories"
+msgstr "输出栅格文件的标题"
+
+#: ../vector/v.in.lidar/main.c:310 ../vector/v.in.ogr/main.c:284
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
+#: ../locale/scriptstrings/r.unpack_to_translate.c:8
+#: ../locale/scriptstrings/v.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:31
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../raster/r.in.lidar/main.c:265 ../raster/r.external/main.c:102
+#: ../raster/r.in.gdal/main.c:178
+#, fuzzy
+msgid "Override projection check (use current location's projection)"
+msgstr "覆盖投影(使用区域的投影)"
+
+#: ../vector/v.in.lidar/main.c:312
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
+#: ../locale/scriptstrings/r.unpack_to_translate.c:9
+#: ../locale/scriptstrings/v.unpack_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:18
+#: ../raster/r.in.lidar/main.c:267 ../raster/r.external/main.c:104
+#: ../raster/r.in.gdal/main.c:180
+#, fuzzy
+msgid "Assume that the dataset has same projection as the current location"
+msgstr "无法获得当前区域的投影单位"
+
+#: ../vector/v.in.lidar/main.c:317 ../vector/v.in.ogr/main.c:316
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the vector data."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:245 ../raster/r.in.lidar/main.c:309
+#: ../vector/v.in.lidar/main.c:338 ../raster/r.in.lidar/main.c:341
 #, fuzzy, c-format
 msgid "Input file <%s> does not exist"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../vector/v.in.lidar/main.c:252 ../raster/r.in.lidar/main.c:319
+#: ../vector/v.in.lidar/main.c:345 ../raster/r.in.lidar/main.c:348
 #, c-format
 msgid "Input file <%s> is not a LAS LiDAR point cloud"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:292 ../raster/r.in.lidar/main.c:346
+#: ../vector/v.in.lidar/main.c:399
+#, c-format
+msgid "-%c flag is not set but ID layer is not specified"
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:400
+#, fuzzy
+msgid "ID layer is required to store attribute table"
+msgstr "无法创建属性表"
+
+#: ../vector/v.in.lidar/main.c:409
 #, fuzzy, c-format
-msgid "Unknown filter option <%s>"
-msgstr "未知的类型"
+msgid ""
+"Storing generated point IDs as categories in the layer <%d>, consequently no "
+"more than %d points can be imported"
+msgstr "图层 %d"
 
-#: ../vector/v.in.lidar/main.c:297 ../vector/v.in.ogr/main.c:747
+#: ../vector/v.in.lidar/main.c:434 ../vector/v.in.ogr/main.c:720
 msgid "Select either the current region flag or the spatial option, not both"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:325 ../vector/v.in.ogr/main.c:805
+#: ../vector/v.in.lidar/main.c:462 ../vector/v.in.ogr/main.c:778
 #, fuzzy
 msgid "4 parameters required for 'spatial' parameter"
 msgstr "'spatial' 选项需要 4 个参数。"
 
-#: ../vector/v.in.lidar/main.c:354 ../vector/v.in.ogr/main.c:602
-#: ../raster/r.in.gdal/main.c:396 ../raster/r.in.gdal/main.c:764
+#: ../vector/v.in.lidar/main.c:491 ../vector/v.in.ogr/main.c:575
+#: ../raster/r.in.gdal/main.c:430 ../raster/r.in.gdal/main.c:819
 msgid ""
 "Unable to convert input map projection to GRASS format; cannot create new "
 "location."
 msgstr "不能将输入地图的投影转换为 GRASS 格式,无法创建新的区域。"
 
-#: ../vector/v.in.lidar/main.c:360 ../vector/v.in.ogr/main.c:608
-#: ../raster/r.in.gdal/main.c:402 ../raster/r.in.gdal/main.c:788
+#: ../vector/v.in.lidar/main.c:497 ../vector/v.in.ogr/main.c:581
+#: ../raster/r.in.gdal/main.c:436 ../raster/r.in.gdal/main.c:843
 #, fuzzy, c-format
 msgid "Unable to create new location <%s>"
 msgstr "无法创建表:%s"
 
-#: ../vector/v.in.lidar/main.c:363 ../vector/v.in.ogr/main.c:611
-#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:405
-#: ../raster/r.in.gdal/main.c:794
+#: ../vector/v.in.lidar/main.c:500 ../vector/v.in.ogr/main.c:584
+#: ../general/g.proj/create.c:15 ../raster/r.in.gdal/main.c:439
+#: ../raster/r.in.gdal/main.c:849
 #, fuzzy, c-format
 msgid "Location <%s> created"
 msgstr "位置名称"
 
-#: ../vector/v.in.lidar/main.c:382 ../vector/v.in.ogr/main.c:630
-#: ../raster/r.in.lidar/main.c:361
-msgid ""
-"Unable to convert input map projection information to GRASS format for "
-"checking"
-msgstr "不能将输入地图的投影信息转换为 GRASS 格式来检查"
-
-#: ../vector/v.in.lidar/main.c:397 ../vector/v.in.ogr/main.c:645
-#: ../raster/r.in.lidar/main.c:376 ../raster/r.external/proj.c:34
-#: ../raster/r.in.gdal/main.c:435
-#, fuzzy
-msgid "Over-riding projection check"
-msgstr "无法获取栅格行\n"
+#: ../vector/v.in.lidar/main.c:526 ../vector/v.kernel/main.c:227
+#, fuzzy, c-format
+msgid "Vector map <%s> already exists and will be overwritten"
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../vector/v.in.lidar/main.c:406 ../vector/v.in.ogr/main.c:654
-#: ../raster/r.in.lidar/main.c:385 ../raster/r.external/proj.c:42
-#: ../raster/r.in.gdal/main.c:445
-#, fuzzy
-msgid ""
-"Projection of dataset does not appear to match current location.\n"
-"\n"
+#: ../vector/v.in.lidar/main.c:589 ../vector/v.decimate/main.c:342
+msgid "Settings for count-based decimation are not valid"
 msgstr ""
-"输入数据集的投影和当前区域相匹配。\n"
-"继续导入...\n"
 
-#: ../vector/v.in.lidar/main.c:412 ../vector/v.in.ogr/main.c:660
-#: ../raster/r.in.lidar/main.c:391
-msgid "GRASS LOCATION PROJ_INFO is:\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:593
+#, fuzzy, c-format
+msgid "Scanning %llu points..."
+msgstr "导入地图 %d 的要素..."
 
-#: ../vector/v.in.lidar/main.c:422 ../vector/v.in.lidar/main.c:429
-#: ../vector/v.in.ogr/main.c:670 ../vector/v.in.ogr/main.c:677
-#: ../raster/r.in.lidar/main.c:401 ../raster/r.in.lidar/main.c:408
-#: ../raster/r.external/proj.c:85 ../raster/r.in.gdal/main.c:497
-msgid "Import dataset PROJ_INFO is:\n"
-msgstr ""
+#: ../vector/v.in.lidar/main.c:595
+#, fuzzy, c-format
+msgid "Scanning %lu points..."
+msgstr "导入地图 %d 的要素..."
 
-#: ../vector/v.in.lidar/main.c:468 ../vector/v.in.ogr/main.c:716
-#: ../raster/r.in.lidar/main.c:447 ../raster/r.external/proj.c:107
-#: ../raster/r.in.gdal/main.c:515
-#, c-format
+#: ../vector/v.in.lidar/main.c:718
 msgid ""
-"\n"
-"In case of no significant differences in the projection definitions, use the "
-"-o flag to ignore them and use current location definition.\n"
+"The underlying libLAS library is at its limits. Previously reported counts "
+"might have been distorted. However, the import itself should be unaffected."
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:473 ../vector/v.in.ogr/main.c:720
-#: ../raster/r.in.lidar/main.c:451
-#, fuzzy
-msgid ""
-"Consider generating a new location with 'location' parameter from input data "
-"set.\n"
-msgstr "考虑用 'location' 参数从输入的数据集创建新的区域。\n"
+#: ../vector/v.in.lidar/main.c:724
+#, fuzzy, c-format
+msgid "%llu points imported (limit was %llu)"
+msgstr "载入%d个点\n"
 
-#: ../vector/v.in.lidar/main.c:478 ../vector/v.in.ogr/main.c:735
-#: ../raster/r.in.lidar/main.c:456 ../raster/r.external/proj.c:116
-#: ../raster/r.in.gdal/main.c:535
-#, fuzzy
-msgid "Projection of input dataset and current location appear to match"
-msgstr ""
-"输入数据集的投影和当前区域相匹配。\n"
-"继续导入...\n"
+#: ../vector/v.in.lidar/main.c:729
+#, fuzzy, c-format
+msgid "%llu points imported"
+msgstr "载入%d个点\n"
 
-#: ../vector/v.in.lidar/main.c:489 ../vector/v.kernel/main.c:227
+#: ../vector/v.in.lidar/main.c:732
 #, fuzzy, c-format
-msgid "Vector map <%s> already exists and will be overwritten"
-msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+msgid "%llu input points were not valid"
+msgstr "%d 个点超出范围"
 
-#: ../vector/v.in.lidar/main.c:606
+#: ../vector/v.in.lidar/main.c:734
 #, fuzzy, c-format
-msgid "Unable open database <%s> by driver <%s>"
-msgstr "无法打开数据库%s,通过驱动%s"
+msgid "%llu input points were outside of the selected area"
+msgstr "%d 个点超出范围"
 
-#: ../vector/v.in.lidar/main.c:640
+#: ../vector/v.in.lidar/main.c:736
 #, fuzzy, c-format
-msgid "Scanning %d points..."
-msgstr "导入地图 %d 的要素..."
+msgid "%llu input points were outside of the area specified by mask"
+msgstr "%d 个点超出范围"
 
-#: ../vector/v.in.lidar/main.c:807
+#: ../vector/v.in.lidar/main.c:738
 #, fuzzy, c-format
-msgid "%d points imported"
-msgstr "载入%d个点\n"
+msgid "%llu input points were filtered out by return number"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:740
+#, fuzzy, c-format
+msgid "%llu input points were filtered out by class number"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:742
+#, fuzzy, c-format
+msgid "%llu input points were filtered outsite the range for z coordinate"
+msgstr "%d 个点超出范围"
 
-#: ../vector/v.in.lidar/main.c:810
+#: ../vector/v.in.lidar/main.c:744
 #, c-format
-msgid "%d input points were not valid"
+msgid "%llu input points were skipped at the begging using offset"
 msgstr ""
 
-#: ../vector/v.in.lidar/main.c:812
+#: ../vector/v.in.lidar/main.c:747
+#, fuzzy, c-format
+msgid "%llu input points were skipped by count-based decimation"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:751
+#, fuzzy, c-format
+msgid "%lu points imported (limit was %d)"
+msgstr "载入%d个点\n"
+
+#: ../vector/v.in.lidar/main.c:755
+#, fuzzy, c-format
+msgid "%lu points imported"
+msgstr "载入%d个点\n"
+
+#: ../vector/v.in.lidar/main.c:757
+#, fuzzy, c-format
+msgid "%lu input points were not valid"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:759
+#, fuzzy, c-format
+msgid "%lu input points were outside of the selected area"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:761
+#, fuzzy, c-format
+msgid "%lu input points were outside of the area specified by mask"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:763 ../raster3d/r3.in.lidar/main.c:395
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by return number"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:765 ../raster3d/r3.in.lidar/main.c:397
+#, fuzzy, c-format
+msgid "%lu input points were filtered out by class number"
+msgstr "%d 个点超出范围"
+
+#: ../vector/v.in.lidar/main.c:767
 #, fuzzy, c-format
-msgid "%d input points were outside of the selected area"
+msgid "%lu input points were filtered outsite the range for z coordinate"
 msgstr "%d 个点超出范围"
 
-#: ../vector/v.in.lidar/main.c:814
+#: ../vector/v.in.lidar/main.c:769
 #, fuzzy, c-format
-msgid "%d input points were filtered out by return number"
+msgid "%lu input points were skipped at the begging using offset"
 msgstr "%d 个点超出范围"
 
-#: ../vector/v.in.lidar/main.c:816
+#: ../vector/v.in.lidar/main.c:772
 #, fuzzy, c-format
-msgid "%d input points were filtered out by class number"
+msgid "%lu input points were skipped by count-based decimation"
 msgstr "%d 个点超出范围"
 
+#: ../vector/v.in.lidar/main.c:774
+msgid ""
+"Accuracy of the printed point counts might be limited by your computer "
+"architecture."
+msgstr ""
+
+#: ../vector/v.in.lidar/main.c:777
+#, fuzzy
+msgid "The rest of points was ignored"
+msgstr "要查询的坐标"
+
+#: ../vector/v.in.lidar/main.c:780
+#, c-format
+msgid ""
+"Maximum number of categories reached (%d). Import ended prematurely. Try to "
+"import without using category as an ID."
+msgstr ""
+
+#: ../vector/v.in.lidar/vector_mask.c:20
+#, fuzzy, c-format
+msgid "Failed to open vector <%s>"
+msgstr "无法找到矢量地图 [%s]"
+
+#: ../vector/v.in.lidar/attributes.c:129
+#, fuzzy, c-format
+msgid "Unable open database <%s> by driver <%s>"
+msgstr "无法打开数据库%s,通过驱动%s"
+
 #: ../vector/v.external/main.c:55
 #, fuzzy
 msgid ""
@@ -12430,22 +13292,22 @@ msgid ""
 "PostGIS feature table."
 msgstr "将GRASS矢量图层转化为GRASS栅格图层。"
 
-#: ../vector/v.external/main.c:135 ../vector/v.in.ogr/main.c:506
+#: ../vector/v.external/main.c:122 ../vector/v.in.ogr/main.c:479
 #, fuzzy, c-format
 msgid "Layer <%s> not available"
 msgstr "图层 '%s' 不可用"
 
-#: ../vector/v.external/main.c:160
+#: ../vector/v.external/main.c:147
 #, fuzzy, c-format
 msgid "Unable to delete '%s'"
 msgstr "无法描述表 %s"
 
-#: ../vector/v.external/main.c:167
+#: ../vector/v.external/main.c:154
 #, fuzzy, c-format
 msgid "Unable to create file '%s/%s'"
 msgstr "无法创建文件 [%s]"
 
-#: ../vector/v.external/main.c:198
+#: ../vector/v.external/main.c:185
 #, fuzzy, c-format
 msgid "Link to vector map <%s> created."
 msgstr "dig_att文件不存在。"
@@ -12455,12 +13317,12 @@ msgstr "dig_att文件不存在。"
 msgid "Name of input OGR or PostGIS data source"
 msgstr "输出文件的名称"
 
-#: ../vector/v.external/args.c:26
+#: ../vector/v.external/args.c:27
 #, fuzzy
 msgid "Name of OGR layer or PostGIS feature table to be linked"
 msgstr "将要导入的栅格文件"
 
-#: ../vector/v.external/args.c:27
+#: ../vector/v.external/args.c:28
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -12472,25 +13334,29 @@ msgstr ""
 "\t\tESRI Shapefile:shapefile 的名称\n"
 "\t\tMapInfo File:mapinfo 文件名称"
 
-#: ../vector/v.external/args.c:36
+#: ../vector/v.external/args.c:38
 #, fuzzy
 msgid "Name for output GRASS vector map (default: input layer)"
 msgstr "输出栅格文件的标题"
 
-#: ../vector/v.external/args.c:46
+#: ../vector/v.external/args.c:48
 #, fuzzy
 msgid "List available layers in data source and exit"
 msgstr "列出数据源中可用的图层并退出"
 
-#: ../vector/v.external/args.c:52
+#: ../vector/v.external/args.c:54
 #, fuzzy
 msgid "List available layers including feature type in data source and exit"
 msgstr "列出数据源中可用的图层并退出"
 
-#: ../vector/v.external/args.c:54
+#: ../vector/v.external/args.c:56
 msgid "Format: layer name,type,projection check,geometry"
 msgstr ""
 
+#: ../vector/v.external/dsn.c:21 ../vector/v.in.ogr/dsn.c:21
+msgid "Invalid connection string (dbname missing)"
+msgstr ""
+
 #: ../vector/v.external/list.c:111
 msgid "GRASS is not compiled with PostgreSQL support"
 msgstr ""
@@ -12678,147 +13544,147 @@ msgstr ""
 msgid "Make outside corners straight"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:303
+#: ../vector/v.buffer/main.c:302
 msgid "Do not make caps at the ends of polylines"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:307
+#: ../vector/v.buffer/main.c:306
 #, fuzzy
 msgid "Transfer categories and attributes"
 msgstr "打印矢量的属性"
 
-#: ../vector/v.buffer/main.c:327
+#: ../vector/v.buffer/main.c:326
 msgid ""
 "Note: In latitude-longitude coordinate system specify distances in degree "
 "unit"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:331
+#: ../vector/v.buffer/main.c:330
 msgid "Select a buffer distance/minordistance/angle or column, but not both."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:360
+#: ../vector/v.buffer/main.c:359
 #, fuzzy
 msgid "The bufcol option requires a valid layer."
 msgstr "该选项需要一个字段"
 
-#: ../vector/v.buffer/main.c:364
+#: ../vector/v.buffer/main.c:363
 #, fuzzy
 msgid "The tolerance must be > 0."
 msgstr "必须指定两个图层"
 
-#: ../vector/v.buffer/main.c:367
+#: ../vector/v.buffer/main.c:366
 #, fuzzy, c-format
 msgid "The tolerance was reset to %g"
 msgstr "容限重置为 %g (地图单位)"
 
-#: ../vector/v.buffer/main.c:371
+#: ../vector/v.buffer/main.c:370
 #, fuzzy
 msgid "Illegal scale value"
 msgstr "非法的输出文件名"
 
-#: ../vector/v.buffer/main.c:388
+#: ../vector/v.buffer/main.c:387
 #, fuzzy, c-format
 msgid "The tolerance in map units = %g"
 msgstr "容限 (地图单位):%g"
 
-#: ../vector/v.buffer/main.c:429
+#: ../vector/v.buffer/main.c:428
 #, fuzzy, c-format
 msgid "Unable to select data from table <%s>"
 msgstr "无法从表中选取数据"
 
-#: ../vector/v.buffer/main.c:465
+#: ../vector/v.buffer/main.c:464
 msgid ""
 "No features available for buffering. Check type option and features "
 "available in the input vector."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:482
+#: ../vector/v.buffer/main.c:481
 #, c-format
 msgid "Flags -%c/%c ignored by this version, GEOS >= 3.3 is required"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:487
+#: ../vector/v.buffer/main.c:486
 msgid ""
 "Negative distances for internal buffers are not supported and converted to "
 "positive values."
 msgstr ""
 
-#: ../vector/v.buffer/main.c:497
+#: ../vector/v.buffer/main.c:496
 #, fuzzy
 msgid "Buffering areas..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:533 ../vector/v.buffer/main.c:635
+#: ../vector/v.buffer/main.c:532 ../vector/v.buffer/main.c:634
 #, fuzzy, c-format
 msgid "Attribute is of invalid size (%.3f) for category %d"
 msgstr "类别 %d 的属性大小无效 (%.3f)"
 
-#: ../vector/v.buffer/main.c:547 ../vector/v.buffer/main.c:653
+#: ../vector/v.buffer/main.c:546 ../vector/v.buffer/main.c:652
 #, c-format
 msgid "The tolerance in map units: %g"
 msgstr "容限 (地图单位):%g"
 
-#: ../vector/v.buffer/main.c:593
+#: ../vector/v.buffer/main.c:592
 #, fuzzy
 msgid "Buffering features..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:596 ../vector/v.buffer/main.c:645
+#: ../vector/v.buffer/main.c:595 ../vector/v.buffer/main.c:644
 msgid "Negative distances are only supported for areas"
 msgstr ""
 
-#: ../vector/v.buffer/main.c:719
+#: ../vector/v.buffer/main.c:718
 #, fuzzy
 msgid "Cleaning buffers..."
 msgstr "栅格输入文件"
 
-#: ../vector/v.buffer/main.c:722
+#: ../vector/v.buffer/main.c:721
 #, fuzzy
 msgid "Building parts of topology..."
 msgstr "建立空间索引..."
 
-#: ../vector/v.buffer/main.c:736
+#: ../vector/v.buffer/main.c:735
 #, fuzzy
 msgid "Snapping boundaries..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:739 ../vector/v.in.ogr/main.c:1379
+#: ../vector/v.buffer/main.c:738 ../vector/v.in.ogr/main.c:1352
 #, fuzzy
 msgid "Breaking polygons..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:746 ../vector/v.in.ogr/main.c:1394
+#: ../vector/v.buffer/main.c:745 ../vector/v.in.ogr/main.c:1367
 #, fuzzy
 msgid "Breaking boundaries..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:752
+#: ../vector/v.buffer/main.c:751
 #, fuzzy
 msgid "Cleaning boundaries at nodes"
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:773
+#: ../vector/v.buffer/main.c:772
 #, fuzzy
 msgid "Calculating centroids for all areas..."
 msgstr "通过DEM计算阴影..."
 
-#: ../vector/v.buffer/main.c:804
+#: ../vector/v.buffer/main.c:803
 #, fuzzy
 msgid "Generating list of boundaries to be deleted..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:837
+#: ../vector/v.buffer/main.c:836
 #, fuzzy
 msgid "Deleting boundaries..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.buffer/main.c:869
+#: ../vector/v.buffer/main.c:868
 #, fuzzy
 msgid "Calculating centroids for areas..."
 msgstr "通过DEM计算阴影..."
 
-#: ../vector/v.buffer/main.c:882
+#: ../vector/v.buffer/main.c:881
 #, fuzzy, c-format
 msgid "Unable to calculate centroid for area %d"
 msgstr "无法计算面的质心"
@@ -13088,36 +13954,45 @@ msgstr "输出文件的名称"
 msgid "%d features written to '%s'."
 msgstr "%d 个点写入矢量文件"
 
-#: ../vector/v.net.alloc/main.c:64 ../raster/r.walk/main.c:181
+#: ../vector/v.net.alloc/main.c:59 ../raster/r.walk/main.c:181
 #: ../raster/r.cost/main.c:143
 #, fuzzy
 msgid "cost allocation"
 msgstr "位置名称"
 
-#: ../vector/v.net.alloc/main.c:66
+#: ../vector/v.net.alloc/main.c:61
 msgid "Allocates subnets for nearest centers (direction from center)."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:68
+#: ../vector/v.net.alloc/main.c:63
 msgid ""
 "center node must be opened (costs >= 0). Costs of center node are used in "
 "calculation"
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:195
+#: ../vector/v.net.alloc/main.c:76
+msgid "Use costs from centers or costs to centers"
+msgstr ""
+
+#: ../vector/v.net.alloc/main.c:238
 #, fuzzy, c-format
 msgid "Number of centers: [%d] (nlayer: [%d])"
 msgstr "输入点的数目:%d"
 
-#: ../vector/v.net.alloc/main.c:198
+#: ../vector/v.net.alloc/main.c:241
 msgid "Not enough centers for selected nlayer. Nothing will be allocated."
 msgstr ""
 
-#: ../vector/v.net.alloc/main.c:209
+#: ../vector/v.net.alloc/main.c:256 ../vector/v.net.alloc/main.c:262
 #, fuzzy
 msgid "Calculating costs from centers ..."
 msgstr "通过DEM计算阴影..."
 
+#: ../vector/v.net.alloc/main.c:266
+#, fuzzy
+msgid "Calculating costs to centers ..."
+msgstr "通过DEM计算阴影..."
+
 #: ../vector/v.surf.idw/main.c:90 ../raster/r.surf.idw/main.c:107
 msgid "IDW"
 msgstr ""
@@ -13175,7 +14050,7 @@ msgstr "%s=%s - 非法的内插点数"
 #. GTC Count of window rows
 #: ../vector/v.surf.idw/main.c:259 ../vector/v.kernel/main.c:303
 #: ../raster/r.thin/io.c:105 ../raster/r.thin/io.c:172
-#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:176
+#: ../raster/r.thin/io.c:181 ../display/d.rast.num/main.c:199
 #, c-format
 msgid "%d row"
 msgid_plural "%d rows"
@@ -13854,7 +14729,7 @@ msgstr "在表中没有类别为 '%d' 的记录"
 msgid "More than one record in LR table"
 msgstr ""
 
-#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../vector/v.clean/main.c:54 ../locale/scriptstrings/t.snap_to_translate.c:4
 msgid "snapping"
 msgstr ""
 
@@ -14158,48 +15033,57 @@ msgstr ""
 msgid "%d boundaries not pruned because pruning would damage topology"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:57
+#: ../vector/v.db.select/main.c:58
 #, fuzzy
 msgid "Prints vector map attributes."
 msgstr "打印矢量的属性"
 
+#: ../vector/v.db.select/main.c:61 ../vector/v.db.select/main.c:79
+#: ../vector/v.db.select/main.c:93
+msgid "Main"
+msgstr ""
+
 #: ../vector/v.db.select/main.c:75
+msgid "GROUP BY conditions of SQL statement without 'group by' keyword"
+msgstr ""
+
+#: ../vector/v.db.select/main.c:83
 msgid "Output vertical record separator"
 msgstr "输出的垂直方向的记录分隔符"
 
-#: ../vector/v.db.select/main.c:91
+#: ../vector/v.db.select/main.c:100
 msgid ""
 "Print minimal region extent of selected vector features instead of attributes"
 msgstr ""
 
-#: ../vector/v.db.select/main.c:92
+#: ../vector/v.db.select/main.c:101
 #, fuzzy
 msgid "Region"
 msgstr "读取 %s ..."
 
-#: ../vector/v.db.select/main.c:106
+#: ../vector/v.db.select/main.c:115
 #, fuzzy
 msgid "Exclude attributes not linked to features"
 msgstr "3D 矢量对象的固定高度"
 
-#: ../vector/v.db.select/main.c:148
+#: ../vector/v.db.select/main.c:157
 #, fuzzy, c-format
 msgid ""
 "Unable to open vector map <%s> at topology level. Flag '%c' requires "
 "topology level."
 msgstr "无法打开矢量文件<%s>在<%s>中"
 
-#: ../vector/v.db.select/main.c:190
+#: ../vector/v.db.select/main.c:208
 #, fuzzy
 msgid "Unable to open select cursor"
 msgstr "无法打开选择游标:'%s'"
 
-#: ../vector/v.db.select/main.c:268
+#: ../vector/v.db.select/main.c:286
 #, fuzzy, c-format
 msgid "Unable to get bounding box of area %d"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../vector/v.db.select/main.c:274
+#: ../vector/v.db.select/main.c:292
 #, fuzzy, c-format
 msgid "Unable to get bounding box of line %d"
 msgstr "无法打开 ascii 文件 [%s]"
@@ -14240,46 +15124,50 @@ msgstr "一个片断最多所能包含的点数"
 msgid "Add new vertices, but do not split"
 msgstr ""
 
-#: ../vector/v.split/main.c:94
+#: ../vector/v.split/main.c:94 ../vector/v.split/main.c:99
 msgid "Applies only to 'length' option"
 msgstr ""
 
-#: ../vector/v.split/main.c:101
+#: ../vector/v.split/main.c:98
+msgid "Force segments to be exactly of given length, except for last one"
+msgstr ""
+
+#: ../vector/v.split/main.c:108
 #, fuzzy
 msgid "Use either length or vertices"
 msgstr "写入线的结点"
 
-#: ../vector/v.split/main.c:108
+#: ../vector/v.split/main.c:115
 #, fuzzy, c-format
 msgid "Length must be positive but is %g"
 msgstr "平滑必须使用正值"
 
-#: ../vector/v.split/main.c:124
+#: ../vector/v.split/main.c:131
 #, fuzzy, c-format
 msgid "Unknown unit %s"
 msgstr "未知的类型"
 
-#: ../vector/v.split/main.c:142
+#: ../vector/v.split/main.c:149
 #, fuzzy
 msgid "Can not get projection units"
 msgstr "无法获得当前区域的投影单位"
 
-#: ../vector/v.split/main.c:149
+#: ../vector/v.split/main.c:156
 #, fuzzy, c-format
 msgid "Length in map units: %g"
 msgstr "长度%f\n"
 
-#: ../vector/v.split/main.c:151
+#: ../vector/v.split/main.c:158
 #, fuzzy, c-format
 msgid "Length in meters: %g"
 msgstr "长度%f\n"
 
-#: ../vector/v.split/main.c:157
+#: ../vector/v.split/main.c:164
 #, fuzzy
 msgid "Number of vertices must be at least 2"
 msgstr "打印的份数"
 
-#: ../vector/v.split/main.c:235
+#: ../vector/v.split/main.c:250
 #, fuzzy, c-format
 msgid "Unable to make line segment: %f - %f (line length = %f)"
 msgstr "无法创建文件 [%s]"
@@ -14400,7 +15288,9 @@ msgstr "各向异性角度 (度,从东开始逆时针方向计算)"
 msgid "Number of vertex points per grid cell"
 msgstr "插值点的数量"
 
-#: ../vector/v.mkgrid/main.c:135 ../raster/r.to.vect/main.c:81
+#: ../vector/v.mkgrid/main.c:135
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:7
+#: ../raster/r.to.vect/main.c:81
 #, fuzzy
 msgid "Output feature type"
 msgstr "要素类型"
@@ -14504,10 +15394,13 @@ msgid "Writing out vector columns..."
 msgstr "写入 %s ... "
 
 #: ../vector/v.neighbors/main.c:51
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:3
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:3
 #: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:3
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:209 ../raster/r.mode/main.c:56
-#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:116
+#: ../raster/r.mfilter/main.c:57 ../raster/r.mapcalc/main.c:70
 #: ../raster/r.quantile/main.c:256 ../raster/r.neighbors/main.c:168
 #: ../raster/r.texture/main.c:102
 #, fuzzy
@@ -14519,6 +15412,7 @@ msgstr "矢量导入完成"
 #: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:3
 #: ../locale/scriptstrings/r.reclass.area_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
 #: ../raster3d/r3.neighbors/main.c:212 ../raster/r.in.xyz/main.c:161
 #: ../raster/r.series/main.c:138 ../raster/r.neighbors/main.c:170
 #, fuzzy
@@ -14678,8 +15572,9 @@ msgstr ""
 msgid "Offset label in y-direction"
 msgstr ""
 
-#: ../vector/v.label/main.c:122 ../display/d.vect/main.c:236
-#: ../display/d.text/main.c:218 ../display/d.legend/main.c:168
+#: ../vector/v.label/main.c:122 ../display/d.rast.num/main.c:119
+#: ../display/d.vect/main.c:236 ../display/d.text/main.c:218
+#: ../display/d.legend/main.c:168
 msgid "Font name"
 msgstr ""
 
@@ -14756,6 +15651,130 @@ msgstr "读取 %s ..."
 msgid "Counting points quadrats..."
 msgstr "读取 %s ..."
 
+#: ../vector/v.decimate/main.c:126
+#, fuzzy
+msgid "decimation"
+msgstr "分类结果的文件名称"
+
+#: ../vector/v.decimate/main.c:130
+#, fuzzy
+msgid "Decimates a point cloud"
+msgstr "未找到任何记录。\n"
+
+#: ../vector/v.decimate/main.c:131
+msgid ""
+"Copies points from one vector to another while applying different decimations"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:159
+msgid "Throw away every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:161
+#, fuzzy
+msgid ""
+"For example, 5 will import 80 percent of points. If not specified, all "
+"points are copied"
+msgstr "导入的整数值"
+
+#: ../vector/v.decimate/main.c:163 ../vector/v.decimate/main.c:174
+#: ../vector/v.decimate/main.c:184 ../vector/v.decimate/main.c:193
+msgid "Count"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:170
+msgid "Preserve only every n-th point"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:172
+#, fuzzy
+msgid ""
+"For example, 4 will import 25 percent of points. If not specified, all "
+"points are copied"
+msgstr "导入的整数值"
+
+#: ../vector/v.decimate/main.c:191
+msgid "Copy only n points"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:192
+#, fuzzy
+msgid "Copies only the given number of points"
+msgstr "%s=%s - 非法的内插点数"
+
+#: ../vector/v.decimate/main.c:199
+#, fuzzy
+msgid "Minimal difference of z values"
+msgstr "最大随机值"
+
+#: ../vector/v.decimate/main.c:201
+msgid "Minimal difference between z values in grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:202 ../vector/v.decimate/main.c:212
+#: ../vector/v.decimate/main.c:217 ../vector/v.decimate/main.c:223
+#: ../vector/v.decimate/main.c:228 ../vector/v.decimate/main.c:233
+msgid "Grid"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:209
+#, fuzzy
+msgid "Preserve only n points per grid cell"
+msgstr "插值点的数量"
+
+#: ../vector/v.decimate/main.c:211
+msgid ""
+"Preserves only the given number of points per grid cell in grid-based "
+"decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:216
+msgid "Apply grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:222
+msgid "Use only first point in grid cell during grid-based decimation"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:227
+#, fuzzy
+msgid "Only one point per cat in grid cell"
+msgstr "插值点的数量"
+
+#: ../vector/v.decimate/main.c:232
+#, fuzzy
+msgid "Use z in grid decimation"
+msgstr "标准偏差"
+
+#: ../vector/v.decimate/main.c:238
+msgid "Store only the coordinates, throw away categories"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:240
+msgid "Do not story any categories even if they are present in input data"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:274
+#, c-format
+msgid ""
+"Input layer must be set to a particular layer, not <%s>, when using <%s> "
+"option or <-%c> flag"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:316
+msgid "Cannot use z for decimation, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:318
+msgid "Cannot select by z range, input is not 3D"
+msgstr ""
+
+#: ../vector/v.decimate/main.c:348
+msgid ""
+"Settings for count-based decimation would cause it to do nothing and no "
+"other options has been set."
+msgstr ""
+
 #: ../vector/v.rectify/target.c:18
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:13
 #: ../imagery/i.rectify/target.c:14
@@ -14770,29 +15789,29 @@ msgstr "范围信息无效 (请运行 r.support)"
 msgid "Target location <%s> not found"
 msgstr "未发现区域<%s>"
 
-#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:892
+#: ../vector/v.rectify/target.c:40 ../raster/r.in.gdal/main.c:947
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:31
 #: ../imagery/i.rectify/target.c:32
 #, fuzzy, c-format
 msgid "Mapset <%s> in target location <%s> - "
 msgstr "未发现输入的矢量"
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:280
-#: ../raster/r.in.gdal/main.c:894
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
+#: ../raster/r.in.gdal/main.c:949
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 msgid "permission denied"
 msgstr ""
 
-#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:281
-#: ../raster/r.in.gdal/main.c:895
+#: ../vector/v.rectify/target.c:41 ../raster/r.proj/main.c:282
+#: ../raster/r.in.gdal/main.c:950
 #: ../imagery/i.ortho.photo/i.ortho.rectify/target.c:32
 #: ../imagery/i.rectify/target.c:33
 #, fuzzy
 msgid "not found"
 msgstr "%s - 未发现"
 
-#: ../vector/v.rectify/target.c:43 ../imagery/i.rectify/target.c:35
+#: ../vector/v.rectify/target.c:43
 msgid "Please run i.target for group."
 msgstr ""
 
@@ -15130,11 +16149,6 @@ msgstr ""
 msgid " Database connection not defined for layer <%s>"
 msgstr "数据库连接未定义"
 
-#: ../vector/v.univar/main.c:358
-#, fuzzy
-msgid "Only numeric column type is supported"
-msgstr "列的类型不支持"
-
 #: ../vector/v.univar/main.c:652
 #, fuzzy
 msgid "Cannot sort the key/value array"
@@ -15220,17 +16234,18 @@ msgid_plural "%d records updated."
 msgstr[0] "%d 条记录被更新"
 msgstr[1] "%d 条记录被更新"
 
-#: ../vector/v.in.ogr/main.c:136
+#: ../vector/v.in.ogr/main.c:138
 #, fuzzy
 msgid "Imports vector data into a GRASS vector map using OGR library."
 msgstr "将GRASS矢量图层转化为GRASS栅格图层。"
 
-#: ../vector/v.in.ogr/main.c:142
+#: ../vector/v.in.ogr/main.c:144
+#: ../locale/scriptstrings/v.import_to_translate.c:5
 #, fuzzy
-msgid "OGR datasource name"
-msgstr "数据库名称"
+msgid "Name of OGR datasource to be imported"
+msgstr "将要导入的栅格文件"
 
-#: ../vector/v.in.ogr/main.c:143
+#: ../vector/v.in.ogr/main.c:145
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15241,7 +16256,7 @@ msgstr ""
 "\t\tESRI Shapefile:包含 shapefiles 的目录\n"
 "\t\tMapInfo File:包含 mapinfo 文件的目录"
 
-#: ../vector/v.in.ogr/main.c:153
+#: ../vector/v.in.ogr/main.c:156
 #: ../locale/scriptstrings/v.import_to_translate.c:7
 #, fuzzy
 msgid "OGR layer name. If not given, all available layers are imported"
@@ -15250,7 +16265,7 @@ msgstr ""
 "\t\tESRI Shapefile:shapefile 名称\n"
 "\t\tMapInfo File:mapinfo 文件名"
 
-#: ../vector/v.in.ogr/main.c:155
+#: ../vector/v.in.ogr/main.c:158
 #, fuzzy
 msgid ""
 "Examples:\n"
@@ -15261,293 +16276,295 @@ msgstr ""
 "\t\tESRI Shapefile:shapefile 的名称\n"
 "\t\tMapInfo File:mapinfo 文件名称"
 
-#: ../vector/v.in.ogr/main.c:183
+#: ../vector/v.in.ogr/main.c:187
 #, fuzzy
 msgid "Minimum size of area to be imported (square meters)"
 msgstr "输入值:外流域的最小值"
 
-#: ../vector/v.in.ogr/main.c:185
+#: ../vector/v.in.ogr/main.c:189
 #, fuzzy
 msgid "Smaller areas and islands are ignored. Should be greater than snap^2"
 msgstr "导入的最小的面 (平方单位)。更小的面和岛会被忽略。应该大于 snap^2"
 
-#: ../vector/v.in.ogr/main.c:191
+#: ../vector/v.in.ogr/main.c:195
 #, fuzzy
 msgid "Optionally change default input type"
 msgstr "输出栅格文件的标题"
 
-#: ../vector/v.in.ogr/main.c:195
+#: ../vector/v.in.ogr/main.c:199
 #, fuzzy
 msgid "import area centroids as points"
 msgstr "没有起始点"
 
-#: ../vector/v.in.ogr/main.c:196
+#: ../vector/v.in.ogr/main.c:200
 #, fuzzy
 msgid "import area boundaries as lines"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:197
+#: ../vector/v.in.ogr/main.c:201
 #, fuzzy
 msgid "import lines as area boundaries"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:198
+#: ../vector/v.in.ogr/main.c:202
 #, fuzzy
 msgid "import points as centroids"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../vector/v.in.ogr/main.c:207
+#: ../vector/v.in.ogr/main.c:211
 #: ../locale/scriptstrings/v.import_to_translate.c:17
 #, fuzzy
 msgid "Snapping threshold for boundaries (map units)"
 msgstr "边界的捕捉容限。 -1 表示不捕捉"
 
-#: ../vector/v.in.ogr/main.c:208
+#: ../vector/v.in.ogr/main.c:212
 #: ../locale/scriptstrings/v.import_to_translate.c:18
 msgid "'-1' for no snap"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:219
+#: ../vector/v.in.ogr/main.c:224
 msgid ""
 "List of column names to be used instead of original names, first is used for "
 "category column"
 msgstr "列出使用的字段名称,而不是原始名称,第一个用于类别字段"
 
-#: ../vector/v.in.ogr/main.c:228
+#: ../vector/v.in.ogr/main.c:233
 #: ../locale/scriptstrings/v.import_to_translate.c:14
 #: ../locale/scriptstrings/db.in.ogr_to_translate.c:11
 #, fuzzy
 msgid "Encoding value for attribute data"
 msgstr "为 <%s> 读取类别文件时发生错误。"
 
-#: ../vector/v.in.ogr/main.c:230
+#: ../vector/v.in.ogr/main.c:235
 #: ../locale/scriptstrings/v.import_to_translate.c:15
 msgid "Overrides encoding interpretation, useful when importing ESRI Shapefile"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:238
+#: ../vector/v.in.ogr/main.c:243
 #, fuzzy
 msgid "Name of column used for categories"
 msgstr "用来创建标签的属性字段的名称"
 
-#: ../vector/v.in.ogr/main.c:240
+#: ../vector/v.in.ogr/main.c:245
 msgid ""
 "If not given, categories are generated as unique values and stored in 'cat' "
 "column"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:245
+#: ../vector/v.in.ogr/main.c:250
 #, fuzzy
 msgid "Name of geometry column"
 msgstr "列数"
 
-#: ../vector/v.in.ogr/main.c:246
+#: ../vector/v.in.ogr/main.c:251
 #, fuzzy
 msgid "If not given, all geometry columns from the input are used"
 msgstr "读取%-5d个点类别\n"
 
-#: ../vector/v.in.ogr/main.c:251
+#: ../vector/v.in.ogr/main.c:256
 #: ../locale/scriptstrings/v.import_to_translate.c:25
 #, fuzzy
 msgid "List supported OGR formats and exit"
 msgstr "列出支持的格式然后退出"
 
-#: ../vector/v.in.ogr/main.c:257
+#: ../vector/v.in.ogr/main.c:262
 #: ../locale/scriptstrings/v.import_to_translate.c:26
 #, fuzzy
 msgid "List available OGR layers in data source and exit"
 msgstr "列出数据源中可用的图层并退出"
 
-#: ../vector/v.in.ogr/main.c:264
+#: ../vector/v.in.ogr/main.c:269
 msgid "Do not clean polygons (not recommended)"
 msgstr "不清理多边形 (不推荐)"
 
-#: ../vector/v.in.ogr/main.c:269
+#: ../vector/v.in.ogr/main.c:274
 #, fuzzy
 msgid "Force 2D output even if input is 3D"
 msgstr "强制输出整型值"
 
-#: ../vector/v.in.ogr/main.c:284 ../raster/r.in.gdal/main.c:165
+#: ../vector/v.in.ogr/main.c:286
+#: ../locale/scriptstrings/v.import_to_translate.c:28
+#: ../locale/scriptstrings/r.import_to_translate.c:32
+#, fuzzy
+msgid "Assume that the dataset has the same projection as the current location"
+msgstr "无法获得当前区域的投影单位"
+
+#: ../vector/v.in.ogr/main.c:291 ../raster/r.in.gdal/main.c:185
 #, fuzzy
 msgid "Perform projection check only and exit"
 msgstr "打印当前的连接参数并退出"
 
-#: ../vector/v.in.ogr/main.c:298 ../raster/r.external/main.c:109
-#: ../raster/r.in.gdal/main.c:173
+#: ../vector/v.in.ogr/main.c:305 ../raster/r.external/main.c:109
+#: ../raster/r.in.gdal/main.c:193
 msgid "Also updates the default region if in the PERMANENT mapset"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:303
+#: ../vector/v.in.ogr/main.c:310
 msgid "Change column names to lowercase characters"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:366
-msgid ""
-"Database not defined, please check default  connection settings by db.connect"
-msgstr ""
-
-#: ../vector/v.in.ogr/main.c:435
+#: ../vector/v.in.ogr/main.c:408
 #, fuzzy, c-format
 msgid "Unable to open data source <%s>"
 msgstr "无法创建栅格地图 %s"
 
-#: ../vector/v.in.ogr/main.c:440
+#: ../vector/v.in.ogr/main.c:413
 #, c-format
 msgid ""
 "Option <%s> will be ignored. OGR doesn't support it for selected format (%s)."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:445
+#: ../vector/v.in.ogr/main.c:418
 #, c-format
 msgid ""
 "Option <%s> will be ignored. Multiple geometry fields are supported by GDAL "
 ">= 1.11"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:458
+#: ../vector/v.in.ogr/main.c:431
 #, fuzzy, c-format
 msgid "Encoding value not supported by OGR driver <%s>"
 msgstr "游标位置不被MySQL驱动器支持"
 
-#: ../vector/v.in.ogr/main.c:467
+#: ../vector/v.in.ogr/main.c:440
 #, c-format
 msgid "Data source <%s> (format '%s') contains %d layers:"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:522
+#: ../vector/v.in.ogr/main.c:495
 #, fuzzy
 msgid "No OGR layers available"
 msgstr "图层 '%s' 不可用"
 
-#: ../vector/v.in.ogr/main.c:525
+#: ../vector/v.in.ogr/main.c:498
 #, fuzzy, c-format
 msgid "All available OGR layers will be imported into vector map <%s>"
 msgstr "无法获得矢量地图的图层信息"
 
-#: ../vector/v.in.ogr/main.c:548 ../vector/v.in.ogr/main.c:884
+#: ../vector/v.in.ogr/main.c:521 ../vector/v.in.ogr/main.c:857
 #, fuzzy, c-format
 msgid "Geometry column <%s> not found in OGR layer <%s>"
 msgstr "字段 <%s> 未找到"
 
-#: ../vector/v.in.ogr/main.c:749
+#: ../vector/v.in.ogr/main.c:722
 msgid "The region flag is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:759
+#: ../vector/v.in.ogr/main.c:732
 msgid "The current region does not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:786
+#: ../vector/v.in.ogr/main.c:759
 msgid "The 'spatial' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:817
+#: ../vector/v.in.ogr/main.c:790
 msgid ""
 "The 'spatial' parameters do not overlap with OGR input. Nothing to import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:851
+#: ../vector/v.in.ogr/main.c:824
 msgid "The 'where' option is applied only to the first OGR layer"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:894
+#: ../vector/v.in.ogr/main.c:867
 #, c-format
 msgid "Check if OGR layer <%s> contains polygons..."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:930
+#: ../vector/v.in.ogr/main.c:903
 #, fuzzy, c-format
 msgid "Boundary splitting distance in map units: %G"
 msgstr "缓冲区距离 (地图单位)"
 
-#: ../vector/v.in.ogr/main.c:960
+#: ../vector/v.in.ogr/main.c:933
 #, fuzzy, c-format
 msgid "Using temporary vector <%s>"
 msgstr "不能创建输出地图 <%s>"
 
-#: ../vector/v.in.ogr/main.c:996
+#: ../vector/v.in.ogr/main.c:969
 #, fuzzy, c-format
 msgid "Key column '%s' not found"
 msgstr "关键字段 '%s' 未找到"
 
-#: ../vector/v.in.ogr/main.c:1008
+#: ../vector/v.in.ogr/main.c:981
 #, fuzzy, c-format
 msgid "Key column '%s' is not integer"
 msgstr "类别字段不是整型"
 
-#: ../vector/v.in.ogr/main.c:1073
+#: ../vector/v.in.ogr/main.c:1046
 #, fuzzy, c-format
 msgid "Column name <%s> renamed to <%s>"
 msgstr "字段 <%s> 未找到"
 
-#: ../vector/v.in.ogr/main.c:1103
+#: ../vector/v.in.ogr/main.c:1076
 #, fuzzy, c-format
 msgid "Writing column <%s> with integer 64 as integer 32"
 msgstr "以定长的 40 个字符写入字段 <%s> (可能会被截取)"
 
-#: ../vector/v.in.ogr/main.c:1116
+#: ../vector/v.in.ogr/main.c:1089
 #, fuzzy, c-format
 msgid "Writing column <%s> with fixed length %d chars (may be truncated)"
 msgstr "以定长的 40 个字符写入字段 <%s> (可能会被截取)"
 
-#: ../vector/v.in.ogr/main.c:1139
+#: ../vector/v.in.ogr/main.c:1112
 #, fuzzy, c-format
 msgid ""
 "Width for column %s set to 255 (was not specified by OGR), some strings may "
 "be truncated!"
 msgstr "字段 '%s' 的长度设置为 255 (不是 OGR 指定的),某些字符串可能会被截取!"
 
-#: ../vector/v.in.ogr/main.c:1151
+#: ../vector/v.in.ogr/main.c:1124
 #, fuzzy, c-format
 msgid "Writing column %s with fixed length %d chars (may be truncated)"
 msgstr "以定长的 40 个字符写入字段 <%s> (可能会被截取)"
 
-#: ../vector/v.in.ogr/main.c:1155
+#: ../vector/v.in.ogr/main.c:1128
 #, fuzzy, c-format
 msgid "Column type (Ogr_ftype: %d) not supported (Ogr_fieldname: %s)"
 msgstr "字段类型不支持 (%s)"
 
-#: ../vector/v.in.ogr/main.c:1196
+#: ../vector/v.in.ogr/main.c:1169
 #, fuzzy, c-format
 msgid "Importing %d features (OGR layer <%s>)..."
 msgstr "导入地图 %d 的要素..."
 
-#: ../vector/v.in.ogr/main.c:1334
+#: ../vector/v.in.ogr/main.c:1307
 #, fuzzy, c-format
 msgid "%d %s without geometry skipped"
 msgstr "%d %s 没有几何形状"
 
-#: ../vector/v.in.ogr/main.c:1361
+#: ../vector/v.in.ogr/main.c:1334
 #, fuzzy
 msgid "Cleaning polygons"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1365
+#: ../vector/v.in.ogr/main.c:1338
 #, fuzzy, c-format
 msgid "Snapping boundaries (threshold = %.3e)..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1409
+#: ../vector/v.in.ogr/main.c:1382
 #, fuzzy
 msgid "Merging boundaries..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1414
+#: ../vector/v.in.ogr/main.c:1387
 #, fuzzy
 msgid "Changing boundary dangles to lines..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1427
+#: ../vector/v.in.ogr/main.c:1400
 #, fuzzy
 msgid "Changing boundary bridges to lines..."
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1471
+#: ../vector/v.in.ogr/main.c:1444
 #, fuzzy, c-format
 msgid "Finding centroids for OGR layer <%s>..."
 msgstr "通过DEM计算阴影..."
 
-#: ../vector/v.in.ogr/main.c:1556
+#: ../vector/v.in.ogr/main.c:1529
 #, c-format
 msgid ""
 "%d areas represent more (overlapping) features, because polygons overlap in "
@@ -15555,116 +16572,116 @@ msgid ""
 "The number of features for those areas is stored as category in layer %d"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1566
+#: ../vector/v.in.ogr/main.c:1539
 #, fuzzy, c-format
 msgid "%d input polygons\n"
 msgstr "%d 个输入多边形\n"
 
-#: ../vector/v.in.ogr/main.c:1567
+#: ../vector/v.in.ogr/main.c:1540
 #, fuzzy, c-format
 msgid "%d input polygons"
 msgstr "%d 个输入多边形\n"
 
-#: ../vector/v.in.ogr/main.c:1570
+#: ../vector/v.in.ogr/main.c:1543
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)\n"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1571
+#: ../vector/v.in.ogr/main.c:1544
 #, fuzzy, c-format
 msgid "Total area: %G (%d areas)"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1574
+#: ../vector/v.in.ogr/main.c:1547
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)\n"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1577
+#: ../vector/v.in.ogr/main.c:1550
 #, fuzzy, c-format
 msgid "Overlapping area: %G (%d areas)"
 msgstr "写入 %s ... "
 
-#: ../vector/v.in.ogr/main.c:1582
+#: ../vector/v.in.ogr/main.c:1555
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)\n"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.in.ogr/main.c:1585
+#: ../vector/v.in.ogr/main.c:1558
 #, fuzzy, c-format
 msgid "Area without category: %G (%d areas)"
 msgstr "%d 个点没有类别,将被忽略"
 
-#: ../vector/v.in.ogr/main.c:1656
+#: ../vector/v.in.ogr/main.c:1629
 msgid "Some input polygons are overlapping each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1630
 msgid "If overlapping is not desired, the data need to be cleaned."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1660 ../vector/v.in.ogr/main.c:1689
+#: ../vector/v.in.ogr/main.c:1633 ../vector/v.in.ogr/main.c:1662
 msgid "The input could be cleaned by snapping vertices to each other."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1661 ../vector/v.in.ogr/main.c:1684
-#: ../vector/v.in.ogr/main.c:1690
+#: ../vector/v.in.ogr/main.c:1634 ../vector/v.in.ogr/main.c:1657
+#: ../vector/v.in.ogr/main.c:1663
 #, c-format
 msgid "Estimated range of snapping threshold: [%g, %g]"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1665
+#: ../vector/v.in.ogr/main.c:1638
 #, c-format
 msgid "Try to import again, snapping with at least %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1669
+#: ../vector/v.in.ogr/main.c:1642
 #, c-format
 msgid "Try to import again, snapping with %g: 'snap=%g'"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1673 ../vector/v.in.ogr/main.c:1686
+#: ../vector/v.in.ogr/main.c:1646 ../vector/v.in.ogr/main.c:1659
 msgid "Manual cleaning may be needed."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1677
+#: ../vector/v.in.ogr/main.c:1650
 #, c-format
 msgid "%d input polygons got lost during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1680
+#: ../vector/v.in.ogr/main.c:1653
 #, c-format
 msgid "%d additional areas where created during import."
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1683
+#: ../vector/v.in.ogr/main.c:1656
 #, fuzzy, c-format
 msgid "The snapping threshold %g might be too large."
 msgstr "边界的捕捉容限。 -1 表示不捕捉"
 
-#: ../vector/v.in.ogr/main.c:1699 ../vector/v.in.ascii/main.c:546
+#: ../vector/v.in.ogr/main.c:1672 ../vector/v.in.ascii/main.c:546
 #: ../vector/v.in.ascii/main.c:549
 #, fuzzy
 msgid "Import failed"
 msgstr "输入失败"
 
-#: ../vector/v.in.ogr/main.c:1710
+#: ../vector/v.in.ogr/main.c:1685
 #, fuzzy, c-format
 msgid "Unable to drop table: '%s'"
 msgstr "无法创建栅格地图 %s"
 
-#: ../vector/v.in.ogr/main.c:1742 ../raster/r.external/window.c:93
-#: ../raster/r.in.gdal/main.c:837
+#: ../vector/v.in.ogr/main.c:1719 ../raster/r.external/window.c:93
+#: ../raster/r.in.gdal/main.c:892
 msgid "Default region for this location updated"
 msgstr ""
 
-#: ../vector/v.in.ogr/main.c:1745 ../raster/r.external/window.c:96
-#: ../raster/r.in.gdal/main.c:840
+#: ../vector/v.in.ogr/main.c:1722 ../raster/r.external/window.c:96
+#: ../raster/r.in.gdal/main.c:895
 #, fuzzy
 msgid "Region for the current mapset updated"
 msgstr "无法创建栅格地图 %s"
 
-#: ../vector/v.in.ogr/main.c:1749
+#: ../vector/v.in.ogr/main.c:1726
 #, fuzzy
 msgid ""
 "Input data contains 3D features. Created vector is 2D only, disable -2 flag "
@@ -15884,6 +16901,11 @@ msgstr ""
 msgid "Database connection not defined for layer %d. Use v.db.connect first."
 msgstr "图层 <%d> 的数据库连接未定义。请先使用 v.db.connect"
 
+#: ../vector/v.to.db/main.c:105
+#, fuzzy, c-format
+msgid "Category index for vector map <%s> is not sorted"
+msgstr "未找到栅格图<%s>"
+
 #: ../vector/v.to.db/parse.c:36
 #, fuzzy
 msgid "Layer number or name (write to)"
@@ -16051,19 +17073,19 @@ msgstr "'sides' 选项只用于边界"
 msgid "Querying database... "
 msgstr "读取 %s ..."
 
-#: ../vector/v.to.db/query.c:108
+#: ../vector/v.to.db/query.c:109
 #, c-format
 msgid ""
 "Query for category '0' (no category) was not executed because of too many "
 "(%d) query categories. All later reported values for cat 0 are not valid."
 msgstr ""
 
-#: ../vector/v.to.db/query.c:145
+#: ../vector/v.to.db/query.c:146
 #, c-format
 msgid "Multiple query results, output value set to NULL (category [%d])"
 msgstr ""
 
-#: ../vector/v.to.db/query.c:152
+#: ../vector/v.to.db/query.c:153
 #, fuzzy
 msgid "Unable to fetch record"
 msgstr "无法获取数据"
@@ -16250,14 +17272,14 @@ msgid "In network mode, multiply the result by number of input points"
 msgstr ""
 
 #: ../vector/v.kernel/main.c:236 ../raster/r.relief/main.c:194
-#: ../raster/r.in.gdal/main.c:312 ../raster/r.in.gdal/main.c:644
+#: ../raster/r.in.gdal/main.c:346 ../raster/r.in.gdal/main.c:693
 #: ../imagery/i.landsat.toar/main.c:549
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists and will be overwritten"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
 #: ../vector/v.kernel/main.c:239 ../raster/r.relief/main.c:197
-#: ../raster/r.in.gdal/main.c:315 ../raster/r.in.gdal/main.c:647
+#: ../raster/r.in.gdal/main.c:349 ../raster/r.in.gdal/main.c:696
 #, fuzzy, c-format
 msgid "Raster map <%s> already exists"
 msgstr "dig_att文件不存在。"
@@ -16389,14 +17411,19 @@ msgstr ""
 msgid "Assign multiple category numbers to polyline"
 msgstr ""
 
-#: ../vector/v.build.polylines/main.c:230
+#: ../vector/v.build.polylines/main.c:135
+#, fuzzy
+msgid "Create polyline from lines with same categories"
+msgstr "沿着输入的线创建点。"
+
+#: ../vector/v.build.polylines/main.c:231
 #, fuzzy, c-format
 msgid "%d line or boundaries found in input vector map"
 msgid_plural "%d lines or boundaries found in input vector map"
 msgstr[0] "无法找到输入的矢量地图 <%s>"
 msgstr[1] "无法找到输入的矢量地图 <%s>"
 
-#: ../vector/v.build.polylines/main.c:234
+#: ../vector/v.build.polylines/main.c:235
 #, fuzzy, c-format
 msgid "%d polyline stored in output vector map"
 msgid_plural "%d polylines stored in output vector map"
@@ -16904,19 +17931,24 @@ msgstr ""
 
 #: ../vector/v.timestamp/main.c:38
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:5
 #: ../locale/scriptstrings/t.rename_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:7
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:4
-#: ../locale/scriptstrings/t.shift_to_translate.c:4
-#: ../locale/scriptstrings/t.merge_to_translate.c:4
+#: ../locale/scriptstrings/t.snap_to_translate.c:5
+#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:5
 #: ../locale/scriptstrings/t.sample_to_translate.c:4
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.univar_to_translate.c:6
@@ -16930,6 +17962,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:5
 #: ../locale/scriptstrings/t.register_to_translate.c:5
 #: ../locale/scriptstrings/t.select_to_translate.c:4
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:5
 #: ../locale/scriptstrings/t.remove_to_translate.c:5
@@ -16942,7 +17975,7 @@ msgstr ""
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:5
 #: ../locale/scriptstrings/t.info_to_translate.c:5
 #: ../locale/scriptstrings/t.rast.to.rast3_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:5
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:6
 #: ../locale/scriptstrings/t.rast.import_to_translate.c:5
@@ -17105,6 +18138,7 @@ msgid "Unable to map image file"
 msgstr "无法打开输出文件 <%s>"
 
 #: ../visualization/ximgview/main.c:290
+#: ../locale/scriptstrings/d.frame_to_translate.c:2
 #: ../locale/scriptstrings/wxpyimgview_to_translate.c:2
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:2
 #: ../locale/scriptstrings/d.out.file_to_translate.c:2
@@ -17122,14 +18156,14 @@ msgstr "无法打开输出文件 <%s>"
 #: ../display/d.grid/main.c:51 ../display/d.rhumbline/main.c:44
 #: ../display/d.mon/main.c:38 ../display/d.erase/main.c:29
 #: ../display/d.font/main.c:45 ../display/d.geodesic/main.c:46
-#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:76
+#: ../display/d.rast/main.c:53 ../display/d.rast.num/main.c:77
 #: ../display/d.vect/main.c:70 ../display/d.histogram/main.c:83
 #: ../display/d.linegraph/main.c:119 ../display/d.extract/main.c:49
-#: ../display/d.where/main.c:43 ../display/d.info/main.c:31
+#: ../display/d.where/main.c:43 ../display/d.info/main.c:34
 #: ../display/d.his/main.c:62 ../display/d.vect.thematic/main.c:78
 #: ../display/d.text/main.c:138 ../display/d.vect.chart/main.c:63
 #: ../display/d.rgb/main.c:53 ../display/d.legend/main.c:85
-#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:95
+#: ../display/d.northarrow/main.c:42 ../display/d.rast.arrow/main.c:97
 #: ../display/d.profile/main.c:191 ../display/d.barscale/main.c:54
 #: ../display/d.path/main.c:48 ../display/d.fontlist/main.c:45
 #: ../display/d.colorlist/main.c:35 ../display/d.title/main.c:49
@@ -17168,6 +18202,53 @@ msgstr ""
 msgid "Using private colormap for DirectColor visual."
 msgstr ""
 
+#: ../locale/scriptstrings/d.frame_to_translate.c:1
+#, fuzzy
+msgid "Manages display frames on the user's graphics monitor."
+msgstr "选择字体,该字体用于图形监视器上文本的显示。"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:4
+#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
+#: ../display/d.erase/main.c:31 ../display/d.info/main.c:36
+msgid "monitors"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:5
+msgid "frame"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:6
+#, fuzzy
+msgid "Create a new frame if doesn't exist and select"
+msgstr "dig_att文件不存在。"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:7
+msgid "Remove all frames, erase the screen and exit"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:8
+#, fuzzy
+msgid "Print name of current frame and exit"
+msgstr "打印当前连接参数并退出"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:9
+#, fuzzy
+msgid "Print names of all frames including 'at' position and exit"
+msgstr "打印当前的连接参数并退出"
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:10
+msgid "Frame to be selected or created (if -c flag is given)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:11
+msgid ""
+"Screen coordinates in percent where to place the frame (0,0 is lower-left)"
+msgstr ""
+
+#: ../locale/scriptstrings/d.frame_to_translate.c:12
+msgid "Implies only when -c or --overwrite flag is given"
+msgstr ""
+
 #: ../locale/scriptstrings/i.pansharpen_to_translate.c:1
 msgid ""
 "Image fusion algorithms to sharpen multispectral with high-res panchromatic "
@@ -17185,7 +18266,7 @@ msgstr ""
 #: ../imagery/i.cluster/main.c:75 ../imagery/i.eb.netrad/main.c:56
 #: ../imagery/i.eb.hsebal01/main.c:104 ../imagery/i.target/main.c:45
 #: ../imagery/i.landsat.toar/main.c:70 ../imagery/i.group/main.c:52
-#: ../imagery/i.modis.qc/main.c:138 ../imagery/i.zc/main.c:52
+#: ../imagery/i.modis.qc/main.c:149 ../imagery/i.zc/main.c:52
 #: ../imagery/i.pca/main.c:72 ../imagery/i.gensigset/main.c:40
 #: ../imagery/i.emissivity/main.c:44 ../imagery/i.fft/main.c:78
 #: ../imagery/i.eb.eta/main.c:42 ../imagery/i.smap/main.c:38
@@ -17198,7 +18279,7 @@ msgstr ""
 #: ../imagery/i.ortho.photo/i.ortho.camera/main.c:56
 #: ../imagery/i.ortho.photo/i.ortho.elev/main.c:63
 #: ../imagery/i.ortho.photo/i.ortho.init/main.c:47
-#: ../imagery/i.albedo/main.c:88 ../imagery/i.evapo.pt/main.c:66
+#: ../imagery/i.albedo/main.c:95 ../imagery/i.evapo.pt/main.c:66
 #: ../imagery/i.biomass/main.c:50 ../imagery/i.eb.soilheatflux/main.c:49
 #: ../imagery/i.evapo.time/main.c:77 ../imagery/i.cca/main.c:84
 #: ../imagery/i.evapo.pm/main.c:58 ../imagery/i.rectify/main.c:99
@@ -17270,21 +18351,26 @@ msgstr ""
 msgid ""
 "Uploads space time raster dataset values at positions of vector points to "
 "the table."
-msgstr "包含结果的栅格图的名称"
+msgstr "将 3D 栅格图转化为 2D 栅格图"
 
 #: ../locale/scriptstrings/v.what.strds_to_translate.c:3
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.univar_to_translate.c:2
 #: ../locale/scriptstrings/t.rename_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.observe.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.vect.db.select_to_translate.c:2
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:2
 #: ../locale/scriptstrings/t.snap_to_translate.c:2
 #: ../locale/scriptstrings/t.shift_to_translate.c:2
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:2
 #: ../locale/scriptstrings/t.merge_to_translate.c:2
 #: ../locale/scriptstrings/t.sample_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:2
@@ -17299,6 +18385,7 @@ msgstr "包含结果的栅格图的名称"
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:2
 #: ../locale/scriptstrings/t.register_to_translate.c:2
 #: ../locale/scriptstrings/t.select_to_translate.c:2
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.export_to_translate.c:2
 #: ../locale/scriptstrings/t.rast.extract_to_translate.c:2
 #: ../locale/scriptstrings/t.remove_to_translate.c:2
@@ -17394,6 +18481,93 @@ msgstr "需要查询的已有栅格地图的名称"
 msgid "Combine resulting R,G,B layers into single output map"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time 3D raster datasets using "
+"temporal 3D raster algebra."
+msgstr "将 3D 栅格图转化为 2D 栅格图"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:7
+#, fuzzy
+msgid ""
+"Algebraic expression for temporal and spatial analysis of space time 3D "
+"raster datasets"
+msgstr "列出输入区域内的栅格文件并退出"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
+#, fuzzy
+msgid "Basename of the new generated output maps"
+msgstr "输入栅格图的名称"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
+msgid ""
+"A numerical suffix separated by an underscore will be attached to create a "
+"unique identifier"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
+#, fuzzy
+msgid "Number of r3.mapcalc processes to run in parallel"
+msgstr "打印的份数"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:9
+#: ../locale/scriptstrings/t.select_to_translate.c:8
+msgid "Activate spatial topology"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:11
+#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:12
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:11
+#, fuzzy
+msgid "Register Null maps"
+msgstr "输入的栅格图"
+
+#: ../locale/scriptstrings/t.rast3d.algebra_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:12
+msgid "Use granularity sampling instead of the temporal topology approach"
+msgstr ""
+
 #: ../locale/scriptstrings/r.plane_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -17529,7 +18703,7 @@ msgstr "创建一个空数据库"
 #: ../general/g.filename/main.c:40 ../general/g.findfile/main.c:39
 #: ../general/g.dirseps/main.c:35 ../general/g.rename/main.c:46
 #: ../general/g.findetc/main.c:29 ../general/g.copy/main.c:42
-#: ../general/g.remove/main.c:70 ../general/g.list/main.c:90
+#: ../general/g.remove/main.c:70 ../general/g.list/main.c:66
 #: ../general/g.access/main.c:38 ../raster/r.compress/main.c:65
 #: ../imagery/i.target/main.c:46 ../imagery/i.group/main.c:53
 #, fuzzy
@@ -17543,8 +18717,8 @@ msgid "rename"
 msgstr "表名称"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:6
-#: ../locale/scriptstrings/t.snap_to_translate.c:6
-#: ../locale/scriptstrings/t.shift_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:7
+#: ../locale/scriptstrings/t.shift_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:5
 #: ../locale/scriptstrings/t.support_to_translate.c:6
 #: ../locale/scriptstrings/t.topology_to_translate.c:5
@@ -17554,9 +18728,9 @@ msgid "input"
 msgstr "输入地图"
 
 #: ../locale/scriptstrings/t.rename_to_translate.c:7
-#: ../locale/scriptstrings/t.snap_to_translate.c:7
-#: ../locale/scriptstrings/t.shift_to_translate.c:7
-#: ../locale/scriptstrings/t.merge_to_translate.c:6
+#: ../locale/scriptstrings/t.snap_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.merge_to_translate.c:7
 #: ../locale/scriptstrings/t.sample_to_translate.c:6
 #: ../locale/scriptstrings/t.sample_to_translate.c:7
 #: ../locale/scriptstrings/t.select_to_translate.c:6
@@ -17572,6 +18746,77 @@ msgstr "安静模式"
 msgid "Rebuilds topology on all vector maps in the current mapset."
 msgstr "未找到矢量文件 %s"
 
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:1
+#, fuzzy
+msgid ""
+"Produces a space time vector dataset of specified contours from a space time "
+"raster dataset."
+msgstr "从GRASS栅格图层生成有特定等高线的GRASS矢量地图。"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:3
+#, fuzzy
+msgid "contour"
+msgstr "对比"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
+msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'num' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:10
+#: ../raster/r.contour/main.c:101
+msgid "Increment between contour levels"
+msgstr "等高线级数间的增量"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:11
+#: ../raster/r.contour/main.c:109
+msgid "List of contour levels"
+msgstr "等高线级数的列表"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:12
+#: ../raster/r.contour/main.c:116
+msgid "Minimum contour level"
+msgstr "最低等高线的级数"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:13
+#: ../raster/r.contour/main.c:123
+msgid "Maximum contour level"
+msgstr "最高等高线的级数"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:14
+#: ../raster/r.contour/main.c:132
+msgid "Minimum number of points for a contour line (0 -> no limit)"
+msgstr "一条等高线应有的最少点数(0为无限制)"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:15
+msgid ""
+"Number of r.contour processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:13
+#, fuzzy
+msgid "Register empty vector maps"
+msgstr "输入的栅格图"
+
+#: ../locale/scriptstrings/t.rast.contour_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:14
+#, fuzzy
+msgid "Do not create attribute tables"
+msgstr "无法创建属性表"
+
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:1
 #, fuzzy
 msgid "Lists registered maps of a space time raster dataset."
@@ -17580,7 +18825,7 @@ msgstr "列出输入区域内的栅格文件并退出"
 #: ../locale/scriptstrings/t.rast.list_to_translate.c:5
 #: ../locale/scriptstrings/t.rast3d.list_to_translate.c:4
 #: ../locale/scriptstrings/t.vect.list_to_translate.c:5
-#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:91
+#: ../locale/scriptstrings/t.list_to_translate.c:4 ../general/g.list/main.c:67
 msgid "list"
 msgstr ""
 
@@ -17636,8 +18881,9 @@ msgid "RGB"
 msgstr ""
 
 #: ../locale/scriptstrings/i.colors.enhance_to_translate.c:4
-#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.aster.toar/main.c:102
-#: ../imagery/i.landsat.acca/main.c:108 ../imagery/i.albedo/main.c:91
+#: ../imagery/i.landsat.toar/main.c:76 ../imagery/i.modis.qc/main.c:154
+#: ../imagery/i.aster.toar/main.c:102 ../imagery/i.landsat.acca/main.c:108
+#: ../imagery/i.albedo/main.c:98
 msgid "satellite"
 msgstr ""
 
@@ -17751,74 +18997,43 @@ msgstr ""
 msgid "The granularity for accumulation '1 day'"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:13
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:14
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:6
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:6
-#, fuzzy
-msgid "Basename of the new generated output maps"
-msgstr "输入栅格图的名称"
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:15
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:8
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:7
-msgid ""
-"A numerical suffix separated by an underscore will be attached to create a "
-"unique identifier"
-msgstr ""
-
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:15
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
 msgid ""
 "Use these limits in case lower and/or upper input  space time raster "
-"datasets are not defined"
+"datasets are not defined or contain NULL values"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:16
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
 #, fuzzy
 msgid "Scale factor for input space time raster dataset"
 msgstr "输出栅格文件的名称"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
 #, fuzzy
 msgid "Shift factor for input space time raster dataset"
 msgstr "输出栅格文件的名称"
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
 msgid ""
 "This method will be applied to compute the accumulative values from the "
 "input maps in a single granule"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
 msgid ""
 "Growing Degree Days or Winkler indices; Mean: sum(input maps)/(number of "
 "input maps); Biologically Effective Degree Days; Huglin Heliothermal index"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:20
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
 msgid ""
 "Register empty maps in the output space time raster dataset, otherwise they "
 "will be deleted"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:21
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:19
+#: ../locale/scriptstrings/t.rast.accumulate_to_translate.c:22
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:20
 msgid "Reverse time direction in cyclic accumulation"
 msgstr ""
 
@@ -17853,11 +19068,11 @@ msgstr ""
 msgid "Type of the aggregation space time dataset"
 msgstr "新的栅格文件的名称"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
 #: ../locale/scriptstrings/t.vect.what.strds_to_translate.c:8
 #: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:7
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
 #, fuzzy
 msgid "Aggregate operation to be performed on the raster maps"
 msgstr ""
@@ -17866,38 +19081,21 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输入栅格图的名称"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
 msgid ""
 "Offset that is used to create the output map ids, output map id is generated "
 "as: basename_ (count + offset)"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:9
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:9
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
 #, fuzzy
 msgid "Number of r.mapcalc processes to run in parallel"
 msgstr "打印的份数"
 
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:13
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:11
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.extract_to_translate.c:10
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:10
-#, fuzzy
-msgid "Register Null maps"
-msgstr "输入的栅格图"
-
-#: ../locale/scriptstrings/t.rast.aggregate.ds_to_translate.c:14
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
-msgid ""
-"Use start time - truncated according to granularity - as suffix (overrides "
-"offset option)"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.out.vtk_to_translate.c:1
 #, fuzzy
 msgid "Exports space time raster dataset as VTK time series."
@@ -17995,8 +19193,8 @@ msgstr ""
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:9
 #, fuzzy
-msgid "Name for output image"
-msgstr "输出文件的名称"
+msgid "Name for output image (or text file for -t)"
+msgstr "输出报告的名称"
 
 #: ../locale/scriptstrings/i.spectral_to_translate.c:11
 #, fuzzy
@@ -18013,6 +19211,54 @@ msgstr "使用地图坐标而不是 xyz 坐标"
 msgid "Use gnuplot for display"
 msgstr "无法关闭输入地图"
 
+#: ../locale/scriptstrings/i.spectral_to_translate.c:15
+#, fuzzy
+msgid "output to text file"
+msgstr "输出的坡面栅格文件"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:1
+msgid ""
+"Sample a space time raster dataset at specific vector point coordinates and "
+"write the output to stdout using different layouts"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:6
+#, fuzzy
+msgid "Comma separated list of coordinates"
+msgstr "以逗号分隔值的列表:如1.4,3.8,13"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:7
+#, fuzzy
+msgid "Name for the output file or \"-\" in case stdout should be used"
+msgstr "输出报告的名称"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#, fuzzy
+msgid "Sort the maps by category"
+msgstr "创建一个空数据库"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:9
+msgid ""
+"The layout of the output. One point per row (row), one point per column "
+"(col), all timsteps in one row (timerow)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:10
+#, fuzzy
+msgid "Number of r.what processes to run in parallel"
+msgstr "打印的份数"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:11
+#: ../raster/r.what/main.c:141
+#, fuzzy
+msgid "Output header row"
+msgstr "输出的栅格图"
+
+#: ../locale/scriptstrings/t.rast.what_to_translate.c:12
+msgid "Use stdin as input and ignore coordinates and point option"
+msgstr ""
+
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -18044,32 +19290,10 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:12
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
 msgid "Extend location extents based on new dataset"
 msgstr "基于新的数据集扩展区域的范围"
 
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:13
-#: ../locale/scriptstrings/r.unpack_to_translate.c:8
-#: ../locale/scriptstrings/v.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.import_to_translate.c:27
-#: ../locale/scriptstrings/r.import_to_translate.c:29
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
-#: ../raster/r.external/main.c:102
-#, fuzzy
-msgid "Override projection check (use current location's projection)"
-msgstr "覆盖投影(使用区域的投影)"
-
-#: ../locale/scriptstrings/t.vect.import_to_translate.c:14
-#: ../locale/scriptstrings/r.unpack_to_translate.c:9
-#: ../locale/scriptstrings/v.unpack_to_translate.c:10
-#: ../locale/scriptstrings/v.import_to_translate.c:28
-#: ../locale/scriptstrings/r.import_to_translate.c:30
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:16
-#: ../raster/r.external/main.c:104
-#, fuzzy
-msgid "Assume that the dataset has same projection as the current location"
-msgstr "无法获得当前区域的投影单位"
-
 #: ../locale/scriptstrings/t.vect.import_to_translate.c:15
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
@@ -18270,6 +19494,20 @@ msgstr "每部分的等级数"
 msgid "Output field separator"
 msgstr "输出字段分隔符"
 
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:1
+#, fuzzy
+msgid ""
+"Apply temporal and spatial operations on space time raster datasets using "
+"temporal raster algebra."
+msgstr "将 3D 栅格图转化为 2D 栅格图"
+
+#: ../locale/scriptstrings/t.rast.algebra_to_translate.c:6
+#, fuzzy
+msgid ""
+"r.mapcalc expression for temporal and spatial analysis of space time raster "
+"datasets"
+msgstr "列出输入区域内的栅格文件并退出"
+
 #: ../locale/scriptstrings/d.rast.leg_to_translate.c:1
 #, fuzzy
 msgid "Displays a raster map and its legend on a graphics window"
@@ -18371,8 +19609,15 @@ msgstr "创建一个空数据库"
 msgid "Snaps temporally the maps of a space time dataset."
 msgstr "新的栅格文件的名称"
 
-#: ../locale/scriptstrings/t.snap_to_translate.c:5
-#: ../locale/scriptstrings/t.shift_to_translate.c:5
+#: ../locale/scriptstrings/t.snap_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.merge_to_translate.c:3
+#, fuzzy
+msgid "time management"
+msgstr "%s - 非法的名称"
+
+#: ../locale/scriptstrings/t.snap_to_translate.c:6
+#: ../locale/scriptstrings/t.shift_to_translate.c:6
 #, fuzzy
 msgid "Name of an existing space time dataset"
 msgstr "已有栅格地图的名称"
@@ -18382,7 +19627,7 @@ msgid "Mosaics several images and extends colormap."
 msgstr ""
 
 #: ../locale/scriptstrings/i.image.mosaic_to_translate.c:4
-#: ../raster/r.patch/main.c:57
+#: ../raster/r.patch/main.c:60
 msgid "mosaicking"
 msgstr ""
 
@@ -18391,15 +19636,15 @@ msgstr ""
 msgid "Shifts temporally the maps of a space time dataset."
 msgstr "新的栅格文件的名称"
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:3
+#: ../locale/scriptstrings/t.shift_to_translate.c:4
 msgid "shift"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:8
+#: ../locale/scriptstrings/t.shift_to_translate.c:9
 msgid "Shift granularity"
 msgstr ""
 
-#: ../locale/scriptstrings/t.shift_to_translate.c:9
+#: ../locale/scriptstrings/t.shift_to_translate.c:10
 msgid ""
 "Format absolute time: \"x years, x months, x weeks, x days, x hours, x "
 "minutes, x seconds\", relative time is of type integer"
@@ -18446,7 +19691,7 @@ msgid "Saves the contents of the active display monitor to a graphics file."
 msgstr "选择字体,该字体用于图形监视器上文本的显示。"
 
 #: ../locale/scriptstrings/d.out.file_to_translate.c:4
-#: ../general/g.list/main.c:137 ../raster/r.topmodel/main.c:72
+#: ../general/g.list/main.c:113 ../raster/r.topmodel/main.c:72
 msgid "Name for output file"
 msgstr "输出文件的名称"
 
@@ -18527,16 +19772,27 @@ msgstr "输入图层的名称"
 msgid "Name for output raster map (default: taken from input file internals)"
 msgstr "输出栅格文件的标题"
 
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:1
+msgid ""
+"Apply temporal and spatial oeprations on space time vector datasets using "
+"temporal vector algebra."
+msgstr ""
+
+#: ../locale/scriptstrings/t.vect.algebra_to_translate.c:6
+#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
+msgid "Spatio-temporal mapcalc expression"
+msgstr ""
+
 #: ../locale/scriptstrings/t.merge_to_translate.c:1
 #, fuzzy
 msgid "Merges several space time datasets into a single space time dataset."
 msgstr "将 3D 栅格图转化为 2D 栅格图"
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:3 ../raster/r.patch/main.c:58
+#: ../locale/scriptstrings/t.merge_to_translate.c:4 ../raster/r.patch/main.c:61
 msgid "merge"
 msgstr ""
 
-#: ../locale/scriptstrings/t.merge_to_translate.c:5
+#: ../locale/scriptstrings/t.merge_to_translate.c:6
 #: ../locale/scriptstrings/t.remove_to_translate.c:8
 #, fuzzy
 msgid "inputs"
@@ -18613,12 +19869,19 @@ msgstr ""
 
 #: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:16
 msgid ""
+"Suffix to add at basename: set 'gran' for granularity, 'time' for the full "
+"time format, 'count' for numerical suffix with a specific number of digits "
+"(default %05)"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+msgid ""
 "The minimum and maximum value of the occurrence of accumulated values, these "
 "values will be used if the min/max space time raster datasets are not "
 "specified"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.accdetect_to_translate.c:18
 msgid ""
 "The user defined values that indicate start, intermediate and end status in "
 "the indicator output space time raster dataset"
@@ -18744,13 +20007,12 @@ msgid ""
 "co1+col2)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:1
-msgid "Redraws the content of currently selected monitor."
+#: ../locale/scriptstrings/v.db.update_to_translate.c:8
+msgid "Name of SQLite extension file for extra functions (SQLite backend only)"
 msgstr ""
 
-#: ../locale/scriptstrings/d.redraw_to_translate.c:4 ../display/d.mon/main.c:40
-#: ../display/d.erase/main.c:31 ../display/d.info/main.c:33
-msgid "monitors"
+#: ../locale/scriptstrings/d.redraw_to_translate.c:1
+msgid "Redraws the content of currently selected monitor."
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:1
@@ -18760,12 +20022,12 @@ msgid ""
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:6
-#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:282
+#: ../raster/r.in.xyz/main.c:302 ../raster/r.in.lidar/main.c:271
 msgid "Scan data file for extent then exit"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:7
-#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:288
+#: ../raster/r.in.xyz/main.c:307 ../raster/r.in.lidar/main.c:277
 #, fuzzy
 msgid "In scan mode, print using shell script style"
 msgstr "以shell脚本的样式输出统计值"
@@ -18781,7 +20043,7 @@ msgid "ASCII file containing input data"
 msgstr "导入的ASCII栅格文件"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:11
-#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:185
+#: ../raster/r.in.xyz/main.c:177 ../raster/r.in.lidar/main.c:133
 #, fuzzy
 msgid "Statistic to use for raster values"
 msgstr "报告栅格图层的统计数据"
@@ -18790,14 +20052,14 @@ msgstr "报告栅格图层的统计数据"
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:28
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:30
 #: ../raster/r.in.xyz/main.c:181 ../raster/r.in.xyz/main.c:289
-#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:189
-#: ../raster/r.in.lidar/main.c:229 ../raster/r.in.lidar/main.c:238
+#: ../raster/r.in.xyz/main.c:298 ../raster/r.in.lidar/main.c:137
+#: ../raster/r.in.lidar/main.c:202 ../raster/r.in.lidar/main.c:212
 msgid "Statistic"
 msgstr ""
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:13
 #: ../raster/r.in.ascii/main.c:88 ../raster/r.in.xyz/main.c:189
-#: ../raster/r.in.lidar/main.c:197
+#: ../raster/r.in.lidar/main.c:145
 msgid "Storage type for resultant raster map"
 msgstr "转换后的栅格图的存储类型"
 
@@ -18838,18 +20100,18 @@ msgid "Scaling factor to apply to value column data"
 msgstr "属性字段值的比例因子"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:26
-#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:219
+#: ../raster/r.in.xyz/main.c:279 ../raster/r.in.lidar/main.c:192
 msgid "Percent of map to keep in memory"
 msgstr "载入内存的地图的百分比"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:27
-#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:228
+#: ../raster/r.in.xyz/main.c:288 ../raster/r.in.lidar/main.c:201
 #, fuzzy
 msgid "pth percentile of the values"
 msgstr "表达坡度的格式"
 
 #: ../locale/scriptstrings/r3.in.xyz_to_translate.c:29
-#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:237
+#: ../raster/r.in.xyz/main.c:297 ../raster/r.in.lidar/main.c:211
 msgid ""
 "Discard <trim> percent of the smallest and <trim> percent of the largest "
 "observations"
@@ -18889,19 +20151,15 @@ msgid ""
 "on the fly."
 msgstr "将GRASS矢量图层转化为GRASS栅格图层。"
 
-#: ../locale/scriptstrings/v.import_to_translate.c:5
-#, fuzzy
-msgid "Name of OGR datasource to be imported"
-msgstr "将要导入的栅格文件"
-
 #: ../locale/scriptstrings/v.import_to_translate.c:11
 #, fuzzy
 msgid "Output vector map extent"
 msgstr "输出的有问题区域的栅格图"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:12
+#, fuzzy
 msgid "input;extent of input map;region;extent of current region"
-msgstr ""
+msgstr "将当前区域对齐到输入的地图上"
 
 #: ../locale/scriptstrings/v.import_to_translate.c:20
 #: ../locale/scriptstrings/v.import_to_translate.c:22
@@ -19002,7 +20260,7 @@ msgstr ""
 #: ../general/g.findetc/main.c:28 ../general/g.mapsets/main.c:63
 #: ../general/g.copy/main.c:41 ../general/g.proj/main.c:64
 #: ../general/g.pnmcomp/main.c:282 ../general/g.mkfontcap/main.c:71
-#: ../general/g.remove/main.c:69 ../general/g.list/main.c:89
+#: ../general/g.remove/main.c:69 ../general/g.list/main.c:65
 #: ../general/g.region/main.c:63 ../general/g.mapset/main.c:49
 #: ../general/g.gisenv/main.c:43 ../general/g.tempfile/main.c:38
 #: ../general/g.gui/main.c:39 ../general/g.access/main.c:37
@@ -19088,24 +20346,18 @@ msgstr "列出输入区域内的栅格文件并退出"
 msgid "r3.mapcalc expression applied to each time step of the sampled data"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast3d.mapcalc_to_translate.c:10
-#: ../locale/scriptstrings/t.rast3d.extract_to_translate.c:9
-#, fuzzy
-msgid "Number of r3.mapcalc processes to run in parallel"
-msgstr "打印的份数"
-
 #: ../locale/scriptstrings/t.vect.extract_to_translate.c:1
 #, fuzzy
 msgid "Extracts a subset of a space time vector dataset."
 msgstr "栅格图的名称"
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:8
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
 msgid ""
 "The number of v.extract processes to run in parallel. Use only if database "
 "backend is used which supports concurrent writing"
 msgstr ""
 
-#: ../locale/scriptstrings/t.vect.extract_to_translate.c:9
+#: ../locale/scriptstrings/t.vect.extract_to_translate.c:10
 #, fuzzy
 msgid "Register empty maps"
 msgstr "输入的栅格图"
@@ -19222,17 +20474,21 @@ msgid ""
 "underscore will be attached to create a unique identifier"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:9
 msgid ""
 "Aggregation granularity, format absolute time \"x years, x months, x weeks, "
 "x days, x hours, x minutes, x seconds\" or an integer value for relative time"
 msgstr ""
 
-#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:11
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:12
 #, fuzzy
 msgid "Number of r.series processes to run in parallel"
 msgstr "插值点的数量"
 
+#: ../locale/scriptstrings/t.rast.aggregate_to_translate.c:13
+msgid "The maximum number of open files allowed for each r.series process"
+msgstr ""
+
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:1
 #, fuzzy
 msgid ""
@@ -19240,10 +20496,6 @@ msgid ""
 "space time raster datasets."
 msgstr "列出输入区域内的栅格文件并退出"
 
-#: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:6
-msgid "Spatio-temporal mapcalc expression"
-msgstr ""
-
 #: ../locale/scriptstrings/t.rast.mapcalc_to_translate.c:7
 #, fuzzy
 msgid "Basename for output raster maps"
@@ -19362,77 +20614,93 @@ msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:2
 msgid ""
-"Downloads, installs extensions from GRASS Addons SVN repository into local "
-"GRASS installation or removes installed extensions."
+"Downloads and installs extensions from GRASS Addons repository or other "
+"source into the local GRASS installation or removes installed extensions."
 msgstr ""
 
 #: ../locale/scriptstrings/g.extension_to_translate.c:6
+msgid "addons"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:7
+msgid "download"
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:8
 #, fuzzy
 msgid "Name of extension to install or remove"
 msgstr "将要创建的新区域的名称"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:7
+#: ../locale/scriptstrings/g.extension_to_translate.c:9
 msgid "Name of toolbox (set of extensions) when -t flag is given"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:9
-msgid "SVN Addons repository URL"
+#: ../locale/scriptstrings/g.extension_to_translate.c:11
+msgid ""
+"URL or directory to get the extension from (supported only on Linux and Mac)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:10
+#: ../locale/scriptstrings/g.extension_to_translate.c:12
+msgid ""
+"The official repository is used by default. User can specify a ZIP file, "
+"directory or a repository on common hosting services. If not identified, "
+"Subversion repository is assumed. See manual for all options."
+msgstr ""
+
+#: ../locale/scriptstrings/g.extension_to_translate.c:13
 msgid "Prefix where to install extension (ignored when flag -s is given)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:11
+#: ../locale/scriptstrings/g.extension_to_translate.c:14
 msgid "Set the proxy with: \"http=<value>,ftp=<value>\""
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:12
+#: ../locale/scriptstrings/g.extension_to_translate.c:15
 #, fuzzy
-msgid "List available extensions in the GRASS Addons SVN repository"
+msgid "List available extensions in the official GRASS GIS Addons repository"
 msgstr "列出可用的格式并退出"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:14
+#: ../locale/scriptstrings/g.extension_to_translate.c:17
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository including "
-"module description"
+"List available extensions in the official GRASS GIS Addons repository "
+"including module description"
 msgstr "列出可用的格式并退出"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:16
+#: ../locale/scriptstrings/g.extension_to_translate.c:19
 #, fuzzy
 msgid ""
-"List available extensions in the GRASS Addons SVN repository (shell script "
-"style)"
+"List available extensions in the official GRASS GIS Addons repository (shell "
+"script style)"
 msgstr "列出可用的格式并退出"
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:18
+#: ../locale/scriptstrings/g.extension_to_translate.c:21
 msgid "List locally installed extensions"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:20
+#: ../locale/scriptstrings/g.extension_to_translate.c:23
 msgid "Install system-wide (may need system administrator rights)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:21
-#: ../locale/scriptstrings/g.extension_to_translate.c:23
-#: ../locale/scriptstrings/g.extension_to_translate.c:25
+#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:28
 msgid "Install"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:22
+#: ../locale/scriptstrings/g.extension_to_translate.c:25
 msgid "Download source code and exit"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:24
+#: ../locale/scriptstrings/g.extension_to_translate.c:27
 msgid "Do not install new extension, just compile it"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:26
+#: ../locale/scriptstrings/g.extension_to_translate.c:29
 msgid "Force removal when uninstalling extension (operation=remove)"
 msgstr ""
 
-#: ../locale/scriptstrings/g.extension_to_translate.c:28
+#: ../locale/scriptstrings/g.extension_to_translate.c:31
 #, fuzzy
 msgid "Operate on toolboxes instead of single modules (experimental)"
 msgstr "系统表而不是用户表"
@@ -19549,10 +20817,6 @@ msgstr ""
 msgid "The temporal mapcalc expression"
 msgstr ""
 
-#: ../locale/scriptstrings/t.select_to_translate.c:8
-msgid "Activate spatial topology"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.droprow_to_translate.c:1
 #, fuzzy
 msgid "Removes a vector feature from a vector map through attribute selection."
@@ -19608,6 +20872,57 @@ msgstr ""
 msgid "Test name"
 msgstr "表名称"
 
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:1
+#, fuzzy
+msgid "Converts a space time raster dataset into a space time vector dataset"
+msgstr "将 3D 栅格图转化为 2D 栅格图"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:11
+#: ../raster/r.to.vect/main.c:88
+#, fuzzy
+msgid "Name of attribute column to store value"
+msgstr "用来创建标签的属性字段的名称"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:12
+msgid ""
+"Number of r.to.vect processes to run in parallel, more than 1 process works "
+"only in conjunction with flag -t"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:15
+#: ../raster/r.to.vect/main.c:94
+#, fuzzy
+msgid "Smooth corners of area features"
+msgstr "平滑转角"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:16
+#: ../raster/r.to.vect/main.c:104
+#, fuzzy
+msgid "Write raster values as z coordinate"
+msgstr "z 坐标的偏移值"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:17
+#: ../raster/r.to.vect/main.c:105
+#, fuzzy
+msgid "Table is not created. Currently supported only for points."
+msgstr "栅格值作为 z 坐标写入。表没有创建。目前只支持点"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:18
+#: ../raster/r.to.vect/main.c:111
+#, fuzzy
+msgid "Do not build vector topology"
+msgstr "点模式下不建立拓扑"
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:19
+#: ../raster/r.to.vect/main.c:89
+msgid "Name must be SQL compliant"
+msgstr ""
+
+#: ../locale/scriptstrings/t.rast.to.vect_to_translate.c:20
+#: ../raster/r.to.vect/main.c:99
+msgid "Use raster values as categories instead of unique sequence (CELL only)"
+msgstr "使用栅格值作为类别,而不使用独立值(只对栅格单元)"
+
 #: ../locale/scriptstrings/d.what.vect_to_translate.c:1
 msgid ""
 "Allows the user to interactively query vector map layers at user-selected "
@@ -19675,6 +20990,17 @@ msgid ""
 "r.pack"
 msgstr ""
 
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:11
+#: ../raster/r.out.gdal/main.c:192
+#, fuzzy
+msgid "Data type"
+msgstr "要素类型"
+
+#: ../locale/scriptstrings/t.rast.export_to_translate.c:12
+#, fuzzy
+msgid "Supported only for GTiff"
+msgstr "列出支持的格式然后退出"
+
 #: ../locale/scriptstrings/g.manual_to_translate.c:1
 msgid "Displays the manual pages of GRASS modules."
 msgstr ""
@@ -19845,20 +21171,26 @@ msgid "Description of the space time dataset"
 msgstr "新的栅格文件的名称"
 
 #: ../locale/scriptstrings/t.support_to_translate.c:10
+#, fuzzy
+msgid "Aggregation type of the space time raster or 3D raster dataset"
+msgstr "新的栅格文件的名称"
+
+#: ../locale/scriptstrings/t.support_to_translate.c:11
 msgid ""
 "Update the metadata information and spatial extent of registered maps from "
 "the GRASS spatial database"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:11
+#: ../locale/scriptstrings/t.support_to_translate.c:12
 msgid ""
 "Check for removed maps and delete them from the temporal database and all "
 "effected space time datasets"
 msgstr ""
 
-#: ../locale/scriptstrings/t.support_to_translate.c:12
+#: ../locale/scriptstrings/t.support_to_translate.c:13
 msgid ""
-"Update metadata information, temporal and spatial extent from registered maps"
+"Update metadata information, temporal and spatial extent from registered "
+"maps based on database entries."
 msgstr ""
 
 #: ../locale/scriptstrings/t.vect.export_to_translate.c:1
@@ -19902,13 +21234,13 @@ msgstr "3D 矢量对象的固定高度"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:4
 #: ../imagery/i.landsat.toar/main.c:77 ../imagery/i.landsat.acca/main.c:109
-#: ../imagery/i.albedo/main.c:92
+#: ../imagery/i.albedo/main.c:99
 #, fuzzy
 msgid "Landsat"
 msgstr "图层 %d"
 
 #: ../locale/scriptstrings/i.tasscap_to_translate.c:5
-#: ../imagery/i.modis.qc/main.c:143 ../imagery/i.albedo/main.c:95
+#: ../imagery/i.modis.qc/main.c:155 ../imagery/i.albedo/main.c:102
 msgid "MODIS"
 msgstr ""
 
@@ -19995,7 +21327,7 @@ msgstr "列出输入区域内的栅格文件并退出"
 msgid "Neighborhood size"
 msgstr "邻域大小"
 
-#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:10
+#: ../locale/scriptstrings/t.rast.neighbors_to_translate.c:11
 #, fuzzy
 msgid "Number of r.neighbor processes to run in parallel"
 msgstr "插值点的数量"
@@ -20098,24 +21430,41 @@ msgid "Resolution of output raster map (use with option resolution=value)"
 msgstr "输出地图的分辨率"
 
 #: ../locale/scriptstrings/r.import_to_translate.c:24
+#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
+#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
+#: ../raster/r.in.gdal/main.c:133 ../raster/r.in.bin/main.c:298
+msgid "Title for resultant raster map"
+msgstr "结果栅格图的标题"
+
+#: ../locale/scriptstrings/r.import_to_translate.c:25
+#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:134
+#: ../raster/r.in.gdal/main.c:143 ../raster/r.in.gdal/main.c:152
+#: ../raster/r.in.gdal/main.c:158 ../imagery/i.landsat.toar/main.c:94
+#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
+#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
+#: ../imagery/i.landsat.toar/main.c:152
+msgid "Metadata"
+msgstr ""
+
+#: ../locale/scriptstrings/r.import_to_translate.c:26
 #, fuzzy
 msgid "Estimate resolution only"
 msgstr "非法的输出文件名"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:25
 #: ../locale/scriptstrings/r.import_to_translate.c:27
+#: ../locale/scriptstrings/r.import_to_translate.c:29
 #: ../raster/r.horizon/main.c:278 ../raster/r.horizon/main.c:297
 #, fuzzy
 msgid "Optional"
 msgstr "非法的输出文件名"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:26
-#: ../raster/r.proj/main.c:207
+#: ../locale/scriptstrings/r.import_to_translate.c:28
+#: ../raster/r.proj/main.c:208
 msgid "Do not perform region cropping optimization"
 msgstr "不执行区域的裁切优化"
 
-#: ../locale/scriptstrings/r.import_to_translate.c:28
-#: ../raster/r.in.gdal/main.c:184
+#: ../locale/scriptstrings/r.import_to_translate.c:30
+#: ../raster/r.in.gdal/main.c:204
 #, fuzzy
 msgid "Force Lat/Lon maps to fit into geographic coordinates (90N,S; 180E,W)"
 msgstr "地图北向格网坐标"
@@ -20180,17 +21529,37 @@ msgstr ""
 msgid "Uploads vector values at positions of vector points to the table."
 msgstr ""
 
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:9
+#: ../locale/scriptstrings/v.db.join_to_translate.c:6
+msgid "layer,column"
+msgstr ""
+
 #: ../locale/scriptstrings/v.what.vect_to_translate.c:10
+#: ../locale/scriptstrings/v.db.join_to_translate.c:8
+#, fuzzy
+msgid "column"
+msgstr "列名"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
 #, fuzzy
 msgid "Name of vector map to be queried"
 msgstr "输入的 2D 矢量地图的名称"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:11
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:13
+msgid "query_layer,query_column"
+msgstr ""
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:14
+#, fuzzy
+msgid "query_column"
+msgstr "列名"
+
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:15
 #, fuzzy
 msgid "Name of attribute column to be queried"
 msgstr "用来创建标签的属性字段的名称"
 
-#: ../locale/scriptstrings/v.what.vect_to_translate.c:12
+#: ../locale/scriptstrings/v.what.vect_to_translate.c:16
 #, fuzzy
 msgid "Maximum query distance in map units"
 msgstr "缓冲区距离 (地图单位)"
@@ -20282,6 +21651,7 @@ msgstr "栅格值"
 #: ../locale/scriptstrings/v.krige_to_translate.c:16
 #: ../locale/scriptstrings/v.krige_to_translate.c:18
 #: ../locale/scriptstrings/v.krige_to_translate.c:20
+#: ../locale/scriptstrings/v.krige_to_translate.c:22
 msgid "Automatically fixed if not set"
 msgstr ""
 
@@ -20297,6 +21667,11 @@ msgstr "比特模式的值"
 
 #: ../locale/scriptstrings/v.krige_to_translate.c:21
 #, fuzzy
+msgid "Kappa value"
+msgstr "栅格值"
+
+#: ../locale/scriptstrings/v.krige_to_translate.c:23
+#, fuzzy
 msgid "Name for output variance raster map"
 msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
@@ -20304,7 +21679,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../locale/scriptstrings/v.krige_to_translate.c:22
+#: ../locale/scriptstrings/v.krige_to_translate.c:24
 msgid "If omitted, will be <input name>_kriging.var"
 msgstr ""
 
@@ -20419,28 +21794,23 @@ msgid ""
 "of raster maps in a space time raster dataset."
 msgstr "计算栅格地图中非空像元的一元统计值"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:3
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:4
 #: ../raster/r.series.accumulate/main.c:81 ../raster/r.series.interp/main.c:65
 #: ../raster/r.series/main.c:139
 #, fuzzy
 msgid "series"
 msgstr "将要查询的栅格地图"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:7
-#, fuzzy
-msgid "Sort the maps by category"
-msgstr "创建一个空数据库"
-
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
 #, fuzzy
 msgid ""
 "Do not assign the space time raster dataset start and end time to the output "
 "map"
 msgstr "将 3D 栅格图转化为 2D 栅格图"
 
-#: ../locale/scriptstrings/t.rast.series_to_translate.c:9
-#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:283
-#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:425
+#: ../locale/scriptstrings/t.rast.series_to_translate.c:10
+#: ../raster/r.series.accumulate/main.c:159 ../raster/r.resamp.stats/main.c:285
+#: ../raster/r.series/main.c:187 ../raster/r.resamp.filter/main.c:430
 msgid "Propagate NULLs"
 msgstr ""
 
@@ -20477,7 +21847,7 @@ msgid "Generates a raster map layer with contiguous areas grown by one cell."
 msgstr "生成一个栅格图层包含一个像元增长所形成的连续区域。"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:4
-#: ../raster/r.grow.distance/main.c:153
+#: ../raster/r.grow.distance/main.c:154
 msgid "proximity"
 msgstr ""
 
@@ -20492,7 +21862,7 @@ msgid "Radius of buffer in raster cells"
 msgstr "缓冲区半径"
 
 #: ../locale/scriptstrings/r.grow_to_translate.c:7
-#: ../raster/r.grow.distance/main.c:175
+#: ../raster/r.grow.distance/main.c:176
 msgid "Metric"
 msgstr "量度"
 
@@ -20510,12 +21880,12 @@ msgid ""
 "Replaces gaps in a space time raster dataset with interpolated raster maps."
 msgstr "将 3D 栅格图转化为 2D 栅格图"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:8
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
 #, fuzzy
 msgid "Number of interpolation processes to run in parallel"
 msgstr "插值点的数量"
 
-#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:9
+#: ../locale/scriptstrings/t.rast.gapfill_to_translate.c:10
 msgid ""
 "Assign the space time raster dataset start and end time to the output map"
 msgstr ""
@@ -20541,7 +21911,7 @@ msgid "Fills no-data areas in raster maps using spline interpolation."
 msgstr "生成一个栅格图层,显示一个流域的子流域"
 
 #: ../locale/scriptstrings/r.fillnulls_to_translate.c:5
-#: ../raster/r.proj/main.c:181
+#: ../raster/r.proj/main.c:182
 #: ../imagery/i.ortho.photo/i.ortho.rectify/main.c:127
 #: ../imagery/i.rectify/main.c:148
 msgid "Interpolation method to use"
@@ -20570,6 +21940,16 @@ msgstr "平滑参数"
 msgid "Width of hole edge used for interpolation (in cells)"
 msgstr ""
 
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:17
+#, fuzzy
+msgid "Used in bilinear and bicubic spline interpolation"
+msgstr "生成一个栅格图层,显示一个流域的子流域"
+
+#: ../locale/scriptstrings/r.fillnulls_to_translate.c:18
+#, fuzzy
+msgid "Spline options"
+msgstr "字段类型不支持"
+
 #: ../locale/scriptstrings/v.db.join_to_translate.c:1
 #, fuzzy
 msgid "Joins a database table to a vector map table."
@@ -20580,20 +21960,11 @@ msgstr "输入的 2D 矢量地图的名称"
 msgid "Vector map to which to join other table"
 msgstr "需要编辑属性表的输入矢量点地图的名称"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:6
-msgid "layer,column"
-msgstr ""
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:7
 #, fuzzy
 msgid "Layer where to join"
 msgstr "无法创建属性表"
 
-#: ../locale/scriptstrings/v.db.join_to_translate.c:8
-#, fuzzy
-msgid "column"
-msgstr "列名"
-
 #: ../locale/scriptstrings/v.db.join_to_translate.c:9
 msgid "Identifier column (e.g.: cat) in the vector table to be used for join"
 msgstr ""
@@ -20622,17 +21993,17 @@ msgstr "重复过滤的次数"
 msgid "Imports space time raster dataset."
 msgstr "包含结果的栅格图的名称"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:12
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:14
 #, fuzzy
 msgid "Set the current region from the last map that was imported"
 msgstr "将当前区域对齐到输入的地图上"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:13
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:15
 #, fuzzy
 msgid "Link the raster files using r.external"
 msgstr "dig_att文件不存在。"
 
-#: ../locale/scriptstrings/t.rast.import_to_translate.c:17
+#: ../locale/scriptstrings/t.rast.import_to_translate.c:19
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the space time raster datasets."
@@ -20711,14 +22082,17 @@ msgstr "未找到3D栅格图<%s>"
 
 #: ../raster3d/r3.info/main.c:110 ../raster3d/r3.out.bin/main.c:314
 #: ../raster3d/r3.to.rast/main.c:237 ../raster3d/r3.to.rast/main.c:261
-#: ../raster3d/r3.stats/main.c:103 ../raster3d/r3.cross.rast/main.c:279
-#: ../raster3d/r3.null/main.c:110 ../raster3d/r3.out.ascii/main.c:339
-#: ../raster3d/r3.out.v5d/main.c:312 ../raster3d/r3.mask/main.c:64
-#: ../raster3d/r3.out.vtk/main.c:207 ../raster3d/r3.out.vtk/main.c:292
-#: ../raster3d/r3.out.vtk/main.c:513 ../raster3d/r3.neighbors/main.c:266
-#: ../raster3d/r3.neighbors/main.c:275 ../raster3d/r3.out.netcdf/main.c:617
-#: ../raster3d/r3.retile/main.c:127 ../raster3d/r3.mkdspf/main.c:168
-#: ../raster/r.univar/r3.univar_main.c:151
+#: ../raster3d/r3.flow/test_main.c:83 ../raster3d/r3.flow/main.c:118
+#: ../raster3d/r3.flow/main.c:132 ../raster3d/r3.flow/main.c:373
+#: ../raster3d/r3.flow/main.c:385 ../raster3d/r3.stats/main.c:103
+#: ../raster3d/r3.cross.rast/main.c:279 ../raster3d/r3.null/main.c:110
+#: ../raster3d/r3.out.ascii/main.c:339 ../raster3d/r3.out.v5d/main.c:312
+#: ../raster3d/r3.mask/main.c:64 ../raster3d/r3.out.vtk/main.c:207
+#: ../raster3d/r3.out.vtk/main.c:292 ../raster3d/r3.out.vtk/main.c:513
+#: ../raster3d/r3.neighbors/main.c:266 ../raster3d/r3.neighbors/main.c:275
+#: ../raster3d/r3.gradient/main.c:113 ../raster3d/r3.gradient/main.c:122
+#: ../raster3d/r3.out.netcdf/main.c:617 ../raster3d/r3.retile/main.c:127
+#: ../raster3d/r3.mkdspf/main.c:168 ../raster/r.univar/r3.univar_main.c:151
 #: ../raster/r.univar/r3.univar_main.c:189
 #, fuzzy, c-format
 msgid "Unable to open 3D raster map <%s>"
@@ -20749,12 +22123,12 @@ msgstr "无法为字符串分配内存"
 msgid "Unable to read range of 3D raster map <%s>"
 msgstr "无法写入 <%s>"
 
-#: ../raster3d/r3.info/main.c:476
+#: ../raster3d/r3.info/main.c:492
 #, fuzzy
 msgid "Error while reading history file"
 msgstr "读取栅格文件 [%s] 时发生错误。"
 
-#: ../raster3d/r3.info/main.c:483 ../raster3d/r3.cross.rast/main.c:343
+#: ../raster3d/r3.info/main.c:499 ../raster3d/r3.cross.rast/main.c:343
 #: ../raster3d/r3.null/main.c:169 ../raster3d/r3.out.vtk/errorHandling.c:65
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map <%s>"
@@ -20762,8 +22136,8 @@ msgstr "无法创建栅格地图 %s"
 
 #: ../raster3d/r3.out.bin/main.c:113 ../raster/r.out.bin/main.c:53
 #: ../raster/r.out.bin/main.c:62 ../raster/r.out.bin/main.c:470
-#: ../raster/r.mapcalc/map3.c:126 ../raster/r.mapcalc/map3.c:140
-#: ../raster/r.mapcalc/map3.c:154
+#: ../raster/r.mapcalc/map3.c:128 ../raster/r.mapcalc/map3.c:142
+#: ../raster/r.mapcalc/map3.c:156
 #, fuzzy
 msgid "Error writing data"
 msgstr "读取地图 %s 时发生错误"
@@ -20817,6 +22191,7 @@ msgstr ""
 
 #: ../raster3d/r3.out.bin/main.c:321 ../raster/r.out.bin/main.c:144
 #: ../raster/r.out.bin/main.c:228 ../raster/r.out.bin/main.c:414
+#: ../display/d.mon/start.c:168 ../display/d.mon/start.c:207
 #, fuzzy, c-format
 msgid "Unable to create file <%s>"
 msgstr "无法创建文件 [%s]"
@@ -20969,9 +22344,10 @@ msgstr ""
 msgid "groundwater flow"
 msgstr "边框颜色"
 
-#: ../raster3d/r3.gwflow/main.c:162 ../raster/r.topmodel/main.c:52
+#: ../raster3d/r3.gwflow/main.c:162 ../raster3d/r3.flow/test_main.c:44
+#: ../raster3d/r3.flow/main.c:180 ../raster/r.topmodel/main.c:52
 #: ../raster/r.fill.dir/main.c:87 ../raster/r.drain/main.c:110
-#: ../raster/r.water.outlet/main.c:57 ../raster/r.watershed/front/main.c:73
+#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
 #: ../raster/r.carve/main.c:75 ../raster/r.usler/main.c:53
 #: ../raster/r.flow/main.c:422 ../raster/r.stream.extract/main.c:77
 #: ../raster/r.solute.transport/main.c:230 ../raster/r.basins.fill/main.c:55
@@ -20998,7 +22374,10 @@ msgstr ""
 msgid "Unable to create and solve the linear equation system"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster3d/r3.gwflow/main.c:365
+#: ../raster3d/r3.gwflow/main.c:365 ../raster3d/r3.in.lidar/main.c:268
+#: ../raster3d/r3.in.lidar/main.c:275 ../raster3d/r3.in.lidar/main.c:281
+#: ../raster3d/r3.in.lidar/main.c:288 ../raster3d/r3.in.lidar/main.c:295
+#: ../raster3d/r3.in.lidar/main.c:301 ../raster3d/r3.in.lidar/main.c:307
 #, fuzzy, c-format
 msgid "Unable to create 3D raster map <%s>"
 msgstr "无法创建栅格地图 %s"
@@ -21061,6 +22440,145 @@ msgid ""
 "Raster map %d Filename: %s already exists. Use the flag --o to overwrite."
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
+#: ../raster3d/r3.flow/test_main.c:46
+#, fuzzy
+msgid "Testing flow lines."
+msgstr "通过DEM计算阴影..."
+
+#: ../raster3d/r3.flow/main.c:91
+#, fuzzy
+msgid "Please provide three 3D raster maps"
+msgstr "G3d 栅格地图的名称"
+
+#: ../raster3d/r3.flow/main.c:98
+#, fuzzy, c-format
+msgid "Vector seed map <%s> not found"
+msgstr "未发现矢量地图<%s>"
+
+#: ../raster3d/r3.flow/main.c:147
+msgid "init_flowaccum: error in Rast3d_put_float"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:183
+#, fuzzy
+msgid "Computes 3D flow lines and 3D flow accumulation."
+msgstr "通过DEM计算阴影..."
+
+#: ../raster3d/r3.flow/main.c:193
+msgid ""
+"Names of three 3D raster maps describing x, y, z components of vector field"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:200
+msgid ""
+"If no map is provided, flow lines are generated from each cell of the input "
+"3D raster"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:203
+#, fuzzy
+msgid "Name of vector map with points from which flow lines are generated"
+msgstr "需要编辑属性表的输入矢量点地图的名称"
+
+#: ../raster3d/r3.flow/main.c:210
+#, fuzzy
+msgid "Name for vector map of flow lines"
+msgstr "输入的 2D 矢量地图的名称"
+
+#: ../raster3d/r3.flow/main.c:217
+#, fuzzy
+msgid "Name for output flowaccumulation 3D raster"
+msgstr ""
+"#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
+"输出栅格图的名称\n"
+"#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
+"输出栅格文件的名称"
+
+#: ../raster3d/r3.flow/main.c:224
+#, fuzzy
+msgid "Name for 3D raster sampled by flowlines"
+msgstr "包含结果的栅格图的名称"
+
+#: ../raster3d/r3.flow/main.c:226
+msgid ""
+"Values of this 3D raster will be stored as attributes of flowlines segments"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:240
+msgid "elapsed time"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:241
+#, fuzzy
+msgid "length in map units"
+msgstr "长度%f\n"
+
+#: ../raster3d/r3.flow/main.c:241
+msgid "length in cells (voxels)"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:243
+#, fuzzy
+msgid "Unit of integration step"
+msgstr "插值点的数量"
+
+#: ../raster3d/r3.flow/main.c:244
+msgid "Default unit is cell"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:245 ../raster3d/r3.flow/main.c:254
+#: ../raster3d/r3.flow/main.c:262 ../raster3d/r3.flow/main.c:272
+#, fuzzy
+msgid "Integration"
+msgstr "使用的插值方法"
+
+#: ../raster3d/r3.flow/main.c:252
+#, fuzzy
+msgid "Integration step in selected unit"
+msgstr "没有指定数据地图"
+
+#: ../raster3d/r3.flow/main.c:253
+#, fuzzy
+msgid "Default step is 0.25 cell"
+msgstr "输入的数据库名称"
+
+#: ../raster3d/r3.flow/main.c:261
+#, fuzzy
+msgid "Maximum number of steps"
+msgstr "列数"
+
+#: ../raster3d/r3.flow/main.c:269
+#, fuzzy
+msgid "Maximum error of integration"
+msgstr "插值点的数量"
+
+#: ../raster3d/r3.flow/main.c:270
+msgid "Influences step, increase maximum error to allow bigger steps"
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:280
+#, fuzzy
+msgid "Number of cells between flow lines in x, y and z direction"
+msgstr "打印的份数"
+
+#: ../raster3d/r3.flow/main.c:289
+msgid "Compute flowlines upstream, downstream or in both direction."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:294
+#, fuzzy
+msgid "Create and fill attribute table"
+msgstr "无法描述表 <%s>"
+
+#: ../raster3d/r3.flow/main.c:349
+msgid "Please provide 3 integer values for skip option."
+msgstr ""
+
+#: ../raster3d/r3.flow/main.c:441
+#, fuzzy
+msgid "Error during reading seed vector map"
+msgstr "读取地图 %s 时发生错误"
+
 #: ../raster3d/r3.stats/main.c:51
 #, fuzzy
 msgid "Generates volume statistics for 3D raster maps."
@@ -21190,11 +22708,11 @@ msgstr "无法打开输出文件 <%s>"
 msgid "3D raster map for which to modify null values"
 msgstr "需要修改空值的 3dcell 地图"
 
-#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:72
+#: ../raster3d/r3.null/main.c:63 ../raster/r.null/main.c:73
 msgid "List of cell values to be set to NULL"
 msgstr "列出的像元值被设置为空值"
 
-#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:80
+#: ../raster3d/r3.null/main.c:70 ../raster/r.null/main.c:81
 msgid "The value to replace the null value by"
 msgstr "替换空值的值"
 
@@ -21222,7 +22740,7 @@ msgstr "修改空值:关闭临时文件时发生错误"
 msgid "modifyNull: Unable to close tmp file"
 msgstr "修改空值:关闭临时文件时发生错误"
 
-#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:60
+#: ../raster3d/r3.null/main.c:187 ../raster/r.null/main.c:61
 #, fuzzy
 msgid "null data"
 msgstr "矢量导入完成"
@@ -21231,6 +22749,82 @@ msgstr "矢量导入完成"
 msgid "Explicitly create the 3D NULL-value bitmap file."
 msgstr ""
 
+#: ../raster3d/r3.in.lidar/main.c:124
+#, fuzzy
+msgid "3D raster"
+msgstr "栅格值"
+
+#: ../raster3d/r3.in.lidar/main.c:127
+#, fuzzy
+msgid "Creates a 3D raster map from LAS LiDAR points"
+msgstr "以当前目录中的ASCII格式的(多边形/线形)数据文件来创建栅格地图。"
+
+#: ../raster3d/r3.in.lidar/main.c:133
+msgid "LiDAR input file in LAS format (*.las or *.laz)"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:139
+#, fuzzy
+msgid "Count of points per cell"
+msgstr "起始点栅格文件"
+
+#: ../raster3d/r3.in.lidar/main.c:145
+#, fuzzy
+msgid "Sum of values of point intensities per cell"
+msgstr "插值点的数量"
+
+#: ../raster3d/r3.in.lidar/main.c:151
+msgid "Mean of point intensities per cell"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:159
+#, fuzzy
+msgid "3D raster map of proportional point count"
+msgstr "未找到3D栅格图<%s>"
+
+#: ../raster3d/r3.in.lidar/main.c:161
+msgid "Point count per 3D cell divided by point count per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:163 ../raster3d/r3.in.lidar/main.c:173
+#, fuzzy
+msgid "Proportional output"
+msgstr "写入 %s ... "
+
+#: ../raster3d/r3.in.lidar/main.c:169
+#, fuzzy
+msgid "3D raster map of proportional sum of values"
+msgstr "需要修改空值的 3dcell 地图"
+
+#: ../raster3d/r3.in.lidar/main.c:171
+msgid "Sum of values per 3D cell divided by sum of values per vertical column"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:198 ../raster/r.in.lidar/main.c:150
+#, fuzzy
+msgid "Subtract raster values from the z coordinates"
+msgstr "z 坐标的偏移值"
+
+#: ../raster3d/r3.in.lidar/main.c:200 ../raster/r.in.lidar/main.c:151
+msgid "The scale for z is applied beforehand, the filter afterwards"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/main.c:201 ../raster/r.in.lidar/main.c:152
+#: ../raster/r.in.lidar/main.c:168 ../raster/r.in.lidar/main.c:184
+#, fuzzy
+msgid "Transform"
+msgstr "插值点的数量"
+
+#: ../raster3d/r3.in.lidar/main.c:206 ../raster/r.in.lidar/main.c:292
+msgid "Use base raster actual resolution instead of computational region"
+msgstr ""
+
+#: ../raster3d/r3.in.lidar/rast_segment.c:40
+#: ../raster/r.in.lidar/rast_segment.c:40
+#, fuzzy
+msgid "Cannot create temporary file with segments of a raster map"
+msgstr "无法创建文件 [%s]"
+
 #: ../raster3d/r3.support/main.c:52
 msgid ""
 "Allows creation and/or modification of 3D raster map layer support files."
@@ -21285,13 +22879,13 @@ msgstr ""
 msgid "Update range"
 msgstr "输出数据的范围"
 
-#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:249
+#: ../raster3d/r3.support/main.c:248 ../raster/r.support/main.c:251
 #: ../raster/r.statistics/main.c:110 ../display/d.title/main.c:110
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s>"
 msgstr "编辑 [%s] 的类别文件?"
 
-#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:253
+#: ../raster3d/r3.support/main.c:252 ../raster/r.support/main.c:255
 #, fuzzy, c-format
 msgid "cats table for [%s] set to %s"
 msgstr "[%s] 的色彩表已更新。"
@@ -21351,7 +22945,7 @@ msgstr "读取地图 %s 时发生错误"
 msgid "Loading %s data with %i  bytes ...  (%dx%dx%d)"
 msgstr ""
 
-#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:309
+#: ../raster3d/r3.in.bin/main.c:202 ../raster3d/r3.neighbors/main.c:311
 #, fuzzy
 msgid "Error flushing tiles"
 msgstr "关闭 VTK-ASCII 文件时发生错误"
@@ -21734,7 +23328,7 @@ msgstr ""
 msgid "Wrong 3D raster map values! Values should in between 0 and 255!"
 msgstr "错误的地图值!地图值必须在 0 至 255 之间!\n"
 
-#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:296
+#: ../raster3d/r3.neighbors/main.c:94 ../raster/r.resamp.stats/main.c:298
 #: ../raster/r.series/main.c:104 ../raster/r.neighbors/main.c:102
 #, c-format
 msgid "Unknown method <%s>"
@@ -21744,7 +23338,7 @@ msgstr "未知的方法 <%s>"
 msgid "Aggregate operation"
 msgstr "聚合操作"
 
-#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:277
+#: ../raster3d/r3.neighbors/main.c:127 ../raster/r.resamp.stats/main.c:279
 #: ../raster/r.series/main.c:168 ../raster/r.neighbors/main.c:239
 #, fuzzy
 msgid "Quantile to calculate for method=quantile"
@@ -21780,6 +23374,42 @@ msgstr ""
 msgid "Unable to allocate buffer"
 msgstr "无法打开选择游标:'%s'"
 
+#: ../raster3d/r3.gradient/main.c:44
+#, fuzzy
+msgid "gradient"
+msgstr "变化"
+
+#: ../raster3d/r3.gradient/main.c:47
+#, fuzzy
+msgid ""
+"Computes gradient of a 3D raster map and outputs gradient components as "
+"three 3D raster maps."
+msgstr "将红、绿、蓝图层合并为一个复合图层"
+
+#: ../raster3d/r3.gradient/main.c:56
+#, fuzzy
+msgid "Name for output 3D raster map(s)"
+msgstr ""
+"#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
+"输出栅格图的名称\n"
+"#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
+"输出栅格文件的名称"
+
+#: ../raster3d/r3.gradient/main.c:63
+#, fuzzy
+msgid "Size of blocks"
+msgstr "点的缓存的大小"
+
+#: ../raster3d/r3.gradient/main.c:130
+#, fuzzy
+msgid "Failed to allocate memory for blocks"
+msgstr "无法为字符串分配内存"
+
+#: ../raster3d/r3.gradient/main.c:292
+#, fuzzy
+msgid "Writing gradient 3D raster maps..."
+msgstr "写入栅格地图 %i\n"
+
 #: ../raster3d/r3.out.netcdf/main.c:81
 #, fuzzy, c-format
 msgid "Unable to close 3D raster map while catching error: %s"
@@ -22121,38 +23751,38 @@ msgstr "以shell脚本的样式输出统计值"
 msgid "Shell"
 msgstr ""
 
-#: ../general/g.version/main.c:171
+#: ../general/g.version/main.c:172
 #, c-format
 msgid ""
 "Cannot determine GRASS libgis version and date number. The GRASS build might "
 "be broken. Report this to developers or packagers.\n"
 msgstr ""
 
-#: ../general/g.version/main.c:178
+#: ../general/g.version/main.c:179
 msgid ""
 "GRASS GIS libgis version and date number don't have the expected format. "
 "Trying to print the original strings..."
 msgstr ""
 
-#: ../general/g.version/main.c:180
+#: ../general/g.version/main.c:181
 #, c-format
 msgid "GIS_H_VERSION=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:181
+#: ../general/g.version/main.c:182
 #, c-format
 msgid "GIS_H_DATE=\"%s\""
 msgstr ""
 
-#: ../general/g.version/main.c:211
+#: ../general/g.version/main.c:212
 msgid "GRASS not compiled with GDAL/OGR support"
 msgstr ""
 
-#: ../general/g.version/main.c:222
+#: ../general/g.version/main.c:223
 msgid "GRASS not compiled with GEOS support"
 msgstr ""
 
-#: ../general/g.version/main.c:233
+#: ../general/g.version/main.c:234
 msgid "GRASS not compiled with SQLite support"
 msgstr ""
 
@@ -22450,13 +24080,13 @@ msgid "Unknown operation '%s'"
 msgstr "未知的类型"
 
 #: ../general/g.mapsets/main.c:136 ../general/g.mapsets/main.c:138
-#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:141
+#: ../general/g.mapsets/main.c:148 ../display/d.mon/main.c:157
 #, c-format
 msgid "Flag -%c ignored"
 msgstr ""
 
 #: ../general/g.mapsets/main.c:140 ../general/g.mapsets/main.c:150
-#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:183
+#: ../general/g.mapsets/main.c:158 ../display/d.mon/main.c:202
 #, fuzzy, c-format
 msgid "Option <%s> ignored"
 msgstr "位置名称"
@@ -22528,8 +24158,8 @@ msgstr ""
 
 #: ../general/g.copy/main.c:76
 #, fuzzy, c-format
-msgid "<%s> already exists"
-msgstr "dig_att文件不存在。"
+msgid "<%s> already exists. File not copied."
+msgstr "无法创建栅格地图 %s"
 
 #: ../general/g.proj/datumtrans.c:47
 #, fuzzy, c-format
@@ -22641,8 +24271,8 @@ msgid ""
 "system"
 msgstr ""
 
-#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:73
-#: ../raster/r.null/main.c:81
+#: ../general/g.proj/main.c:193 ../raster/r.null/main.c:74
+#: ../raster/r.null/main.c:82
 msgid "Modify"
 msgstr ""
 
@@ -22904,9 +24534,9 @@ msgstr "将要导入的栅格文件"
 #: ../general/g.remove/main.c:100 ../general/g.remove/main.c:106
 #: ../general/g.remove/main.c:112 ../general/g.remove/main.c:117
 #: ../general/g.remove/main.c:123 ../general/g.remove/main.c:129
-#: ../general/g.list/main.c:110 ../general/g.list/main.c:118
-#: ../general/g.list/main.c:144 ../general/g.list/main.c:150
-#: ../general/g.list/main.c:156
+#: ../general/g.list/main.c:86 ../general/g.list/main.c:94
+#: ../general/g.list/main.c:120 ../general/g.list/main.c:126
+#: ../general/g.list/main.c:132
 #, fuzzy
 msgid "Pattern"
 msgstr "栅格值"
@@ -22921,15 +24551,15 @@ msgstr "输出分隔符(默认:tab)"
 msgid "File name exclusion pattern (default: none)"
 msgstr "输出分隔符(默认:tab)"
 
-#: ../general/g.remove/main.c:116 ../general/g.list/main.c:143
+#: ../general/g.remove/main.c:116 ../general/g.list/main.c:119
 msgid "Ignore case"
 msgstr ""
 
-#: ../general/g.remove/main.c:122 ../general/g.list/main.c:149
+#: ../general/g.remove/main.c:122 ../general/g.list/main.c:125
 msgid "Use basic regular expressions instead of wildcards"
 msgstr ""
 
-#: ../general/g.remove/main.c:128 ../general/g.list/main.c:155
+#: ../general/g.remove/main.c:128 ../general/g.list/main.c:131
 msgid "Use extended regular expressions instead of wildcards"
 msgstr ""
 
@@ -22939,7 +24569,7 @@ msgid "Remove base raster maps"
 msgstr "叠加栅格图"
 
 #: ../general/g.remove/main.c:178 ../general/g.remove/main.c:202
-#: ../general/g.list/main.c:220 ../general/g.list/main.c:247
+#: ../general/g.list/main.c:184 ../general/g.list/main.c:211
 #, fuzzy, c-format
 msgid "Unable to compile pattern <%s>"
 msgstr "无法打开输出文件 <%s>"
@@ -22985,80 +24615,70 @@ msgstr "无法创建栅格地图 %s"
 msgid "Illegal filenames not allowed in the name or ignore option."
 msgstr ""
 
-#: ../general/g.list/main.c:93
+#: ../general/g.list/main.c:69
 msgid ""
 "Lists available GRASS data base files of the user-specified data type "
 "optionally using the search pattern."
 msgstr ""
 
-#: ../general/g.list/main.c:109
+#: ../general/g.list/main.c:85
 #, fuzzy
 msgid "Map name search pattern (default: all)"
 msgstr "输出分隔符(默认:tab)"
 
-#: ../general/g.list/main.c:117
+#: ../general/g.list/main.c:93
 #, fuzzy
 msgid "Map name exclusion pattern (default: none)"
 msgstr "输出分隔符(默认:tab)"
 
-#: ../general/g.list/main.c:123
+#: ../general/g.list/main.c:99
 #, fuzzy
 msgid "Name of mapset to list (default: current search path)"
 msgstr "打印当前连接参数并退出"
 
-#: ../general/g.list/main.c:125
+#: ../general/g.list/main.c:101
 msgid "'.' for current mapset; '*' for all mapsets in location"
 msgstr ""
 
-#: ../general/g.list/main.c:131
+#: ../general/g.list/main.c:107
 #, fuzzy
 msgid "Name of saved region for map search (default: not restricted)"
 msgstr "打印当前连接参数并退出"
 
-#: ../general/g.list/main.c:133
+#: ../general/g.list/main.c:109
 #, fuzzy
 msgid "'.' for current region; '*' for default region"
 msgstr "从指定的区域设置当前区域"
 
-#: ../general/g.list/main.c:160
+#: ../general/g.list/main.c:136
 #, fuzzy
 msgid "Print data types"
 msgstr "只打印栅格图的类型"
 
-#: ../general/g.list/main.c:165
+#: ../general/g.list/main.c:141
 msgid "Print fully-qualified map names (including mapsets)"
 msgstr ""
 
-#: ../general/g.list/main.c:170
+#: ../general/g.list/main.c:146
 #, fuzzy
 msgid "Pretty printing in human readable format"
 msgstr "禁止打印头信息"
 
-#: ../general/g.list/main.c:175
+#: ../general/g.list/main.c:151
 msgid "Verbose listing (also list map titles)"
 msgstr ""
 
-#: ../general/g.list/main.c:182
-#, c-format
-msgid "-%c/-%c and %s= are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:187
-#, c-format
-msgid "-%c/-%c and -%c/-%c are mutually exclusive"
-msgstr ""
-
-#: ../general/g.list/main.c:304
+#: ../general/g.list/main.c:268
 #, fuzzy, c-format
 msgid "Mapset <%s> does not exist"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../general/g.list/main.c:514 ../general/g.region/main.c:447
+#: ../general/g.list/list.c:123 ../general/g.region/main.c:447
 #, fuzzy, c-format
 msgid "Unable to read header of 3D raster map <%s@%s>"
 msgstr "无法写入 <%s>"
 
-#: ../general/g.list/main.c:522
+#: ../general/g.list/list.c:131
 #, fuzzy, c-format
 msgid "Unable to open vector map <%s@%s> on topological level"
 msgstr "无法打开矢量文件<%s>在<%s>中"
@@ -23269,58 +24889,58 @@ msgstr "无法更新当前区域"
 msgid "Unable to change default region. The current mapset is not <PERMANENT>."
 msgstr ""
 
-#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:611
+#: ../general/g.region/main.c:791 ../raster/r.in.lidar/main.c:465
 #, fuzzy, c-format
 msgid "Invalid input <%s=%s>"
 msgstr "无效的区域:%s"
 
-#: ../general/g.region/printwindow.c:247 ../general/g.region/printwindow.c:503
-#: ../general/g.region/printwindow.c:622 ../raster/r.horizon/main.c:525
-#: ../raster/r.sun/main.c:728 ../display/d.where/main.c:107
+#: ../general/g.region/printwindow.c:236 ../general/g.region/printwindow.c:492
+#: ../general/g.region/printwindow.c:611 ../raster/r.horizon/main.c:531
+#: ../raster/r.sun/main.c:745 ../display/d.where/main.c:107
 msgid "Can't get projection info of current location"
 msgstr "无法获得当前区域的投影信息"
 
-#: ../general/g.region/printwindow.c:250 ../general/g.region/printwindow.c:506
-#: ../general/g.region/printwindow.c:625 ../raster/r.horizon/main.c:528
-#: ../raster/r.sun/main.c:732 ../display/d.where/main.c:110
+#: ../general/g.region/printwindow.c:239 ../general/g.region/printwindow.c:495
+#: ../general/g.region/printwindow.c:614 ../raster/r.horizon/main.c:534
+#: ../raster/r.sun/main.c:749 ../display/d.where/main.c:110
 msgid "Can't get projection units of current location"
 msgstr "无法获得当前区域的投影单位"
 
-#: ../general/g.region/printwindow.c:263 ../general/g.region/printwindow.c:516
-#: ../general/g.region/printwindow.c:647 ../raster/r.sunhours/main.c:232
+#: ../general/g.region/printwindow.c:252 ../general/g.region/printwindow.c:505
+#: ../general/g.region/printwindow.c:636 ../raster/r.sunhours/main.c:232
 #, fuzzy
 msgid "Unable to update lat/long projection parameters"
 msgstr "无法设置经纬度投影的参数"
 
-#: ../general/g.region/printwindow.c:281 ../general/g.region/printwindow.c:289
-#: ../general/g.region/printwindow.c:297 ../general/g.region/printwindow.c:305
-#: ../general/g.region/printwindow.c:534 ../general/g.region/printwindow.c:542
-#: ../general/g.region/printwindow.c:550 ../general/g.region/printwindow.c:558
-#: ../general/g.region/printwindow.c:676 ../general/g.region/printwindow.c:684
-#: ../general/g.region/printwindow.c:692 ../general/g.region/printwindow.c:700
+#: ../general/g.region/printwindow.c:270 ../general/g.region/printwindow.c:278
+#: ../general/g.region/printwindow.c:286 ../general/g.region/printwindow.c:294
+#: ../general/g.region/printwindow.c:523 ../general/g.region/printwindow.c:531
+#: ../general/g.region/printwindow.c:539 ../general/g.region/printwindow.c:547
+#: ../general/g.region/printwindow.c:665 ../general/g.region/printwindow.c:673
+#: ../general/g.region/printwindow.c:681 ../general/g.region/printwindow.c:689
 #: ../raster/r.sunhours/main.c:296 ../raster/r.sunhours/main.c:391
 #: ../raster/r.sunmask/g_solposition.c:127
 msgid "Error in pj_do_proj (projection of input coordinate pair)"
 msgstr "pj_do_proj (输入坐标对的投影) 有错误"
 
-#: ../general/g.region/printwindow.c:410
+#: ../general/g.region/printwindow.c:399
 msgid "You are already in Lat/Long. Use the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:412
+#: ../general/g.region/printwindow.c:401
 msgid ""
 "You are in a simple XY location, projection to Lat/Lon is not possible. Use "
 "the -p flag instead."
 msgstr ""
 
-#: ../general/g.region/printwindow.c:637
+#: ../general/g.region/printwindow.c:626
 msgid ""
 "WGS84 output not possible as this location does not contain datum "
 "transformation parameters. Try running g.setproj."
 msgstr ""
 "无法使用 WGS84 来输出,因为该区域不包含基准面转换参数。尝试运行 g.setproj。"
 
-#: ../general/g.region/printwindow.c:783
+#: ../general/g.region/printwindow.c:772
 msgid "Lat/Long calculations are not possible from a simple XY system"
 msgstr ""
 
@@ -23540,38 +25160,59 @@ msgid "command line interface with GUI startup screen"
 msgstr "字段 <%s> 未找到"
 
 #: ../general/g.gui/main.c:66
-msgid "Name of workspace file to load on start-up (valid only for wxGUI)"
+#, fuzzy
+msgid "Name of workspace file to load on start-up"
+msgstr "将要导入的栅格文件"
+
+#: ../general/g.gui/main.c:67
+msgid "This is valid only for wxGUI (wxpython)"
+msgstr ""
+
+#: ../general/g.gui/main.c:71
+msgid "Start GUI in the foreground"
+msgstr ""
+
+#: ../general/g.gui/main.c:72
+msgid ""
+"By default the GUI starts in the background and control is immediately "
+"returned to the caller. When GUI runs in foregreound, it blocks the command "
+"line"
 msgstr ""
 
-#: ../general/g.gui/main.c:70
+#: ../general/g.gui/main.c:78
 msgid "Update default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:71 ../general/g.gui/main.c:77
+#: ../general/g.gui/main.c:79 ../general/g.gui/main.c:85
 msgid "Default"
 msgstr ""
 
-#: ../general/g.gui/main.c:76
+#: ../general/g.gui/main.c:84
 msgid "Do not launch GUI after updating the default user interface settings"
 msgstr ""
 
-#: ../general/g.gui/main.c:87
+#: ../general/g.gui/main.c:95
 #, c-format
 msgid "<%s> is now the default GUI"
 msgstr ""
 
-#: ../general/g.gui/main.c:93
+#: ../general/g.gui/main.c:101
 #, c-format
 msgid "Nothing to do. For setting up <%s> as default UI use -%c flag."
 msgstr ""
 
-#: ../general/g.gui/main.c:98
+#: ../general/g.gui/main.c:108
+msgid "Your installation doesn't include GUI, exiting."
+msgstr ""
+
+#: ../general/g.gui/main.c:111
 #, c-format
-msgid "Launching <%s> GUI in the background, please wait..."
+msgid "Launching <%s> GUI, please wait..."
 msgstr ""
 
-#: ../general/g.gui/main.c:101
-msgid "Your installation doesn't include GUI, exiting."
+#: ../general/g.gui/main.c:122
+#, c-format
+msgid "Launching <%s> GUI in the background, please wait..."
 msgstr ""
 
 #: ../general/g.access/set_perms.c:26
@@ -23885,11 +25526,6 @@ msgstr ""
 msgid "My first vector module"
 msgstr "我的第一个栅格模块。"
 
-#: ../doc/vector/v.example/main.c:81
-#, fuzzy
-msgid "Unable to set predetermined vector open level"
-msgstr "无法打开矢量质心点地图。"
-
 #: ../doc/vector/v.example/main.c:170
 #, fuzzy, c-format
 msgid "Unable to get attribute data for cat %d"
@@ -24060,7 +25696,7 @@ msgstr ""
 
 #: ../raster/r.slope.aspect/main.c:545 ../raster/r.series.accumulate/main.c:318
 #: ../raster/r.series.interp/main.c:339 ../raster/r.relief/main.c:316
-#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:129
+#: ../raster/r.series/main.c:386 ../raster/r.patch/main.c:132
 #, fuzzy
 msgid "Percent complete..."
 msgstr "已完成 ... "
@@ -24481,7 +26117,7 @@ msgid "Cannot get projection key values of current location"
 msgstr "无法获得当前区域的投影参数"
 
 #: ../raster/r.sunhours/main.c:324 ../raster/r.sunhours/main.c:335
-#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:594
+#: ../raster/r.sunhours/main.c:346 ../raster/r.mapcalc/map3.c:606
 #: ../imagery/i.landsat.toar/main.c:567 ../imagery/i.landsat.acca/tools.c:136
 #: ../imagery/i.landsat.acca/algorithm.c:234
 #: ../imagery/i.landsat.acca/algorithm.c:388
@@ -24675,157 +26311,157 @@ msgstr ""
 msgid "Writing new raster map..."
 msgstr "写入栅格地图 %i\n"
 
-#: ../raster/r.proj/main.c:148
+#: ../raster/r.proj/main.c:149
 #, fuzzy
 msgid "Re-projects a raster map from given location to the current location."
 msgstr "将栅格图从一个区域重投影到当前区域"
 
-#: ../raster/r.proj/main.c:152
+#: ../raster/r.proj/main.c:153
 #, fuzzy
 msgid "Location containing input raster map"
 msgstr "输入地图的区域"
 
-#: ../raster/r.proj/main.c:156
+#: ../raster/r.proj/main.c:157
 #, fuzzy
 msgid "Mapset containing input raster map"
 msgstr "输入的 2D 矢量地图的名称"
 
-#: ../raster/r.proj/main.c:161
+#: ../raster/r.proj/main.c:162
 #, fuzzy
 msgid "Name of input raster map to re-project"
 msgstr "输入栅格图的名称"
 
-#: ../raster/r.proj/main.c:170
+#: ../raster/r.proj/main.c:171
 #, fuzzy
 msgid "Name for output raster map (default: same as 'input')"
 msgstr "输出栅格文件的标题"
 
-#: ../raster/r.proj/main.c:197
+#: ../raster/r.proj/main.c:198
 #, fuzzy
 msgid "Resolution of output raster map"
 msgstr "输出地图的分辨率"
 
-#: ../raster/r.proj/main.c:202
+#: ../raster/r.proj/main.c:203
 #, fuzzy
 msgid "List raster maps in input mapset and exit"
 msgstr "列出输入区域内的栅格文件并退出"
 
-#: ../raster/r.proj/main.c:212
+#: ../raster/r.proj/main.c:213
 #, fuzzy
 msgid "Print input map's bounds in the current projection and exit"
 msgstr "列出输入区域内的栅格文件并退出"
 
-#: ../raster/r.proj/main.c:218
+#: ../raster/r.proj/main.c:219
 #, fuzzy
 msgid ""
 "Print input map's bounds in the current projection and exit (shell style)"
 msgstr "打印当前区域(shell脚本样式)"
 
-#: ../raster/r.proj/main.c:253
+#: ../raster/r.proj/main.c:254
 #, fuzzy
 msgid "Input and output locations are the same"
 msgstr "输入地图:洼地的位置"
 
-#: ../raster/r.proj/main.c:263
+#: ../raster/r.proj/main.c:264
 #, fuzzy
 msgid "Unable to get projection info of output raster map"
 msgstr "无法获得当前区域的投影信息"
 
-#: ../raster/r.proj/main.c:266
+#: ../raster/r.proj/main.c:267
 #, fuzzy
 msgid "Unable to get projection units of output raster map"
 msgstr "无法获得当前区域的投影单位"
 
-#: ../raster/r.proj/main.c:269
+#: ../raster/r.proj/main.c:270
 #, fuzzy
 msgid "Unable to get projection key values of output raster map"
 msgstr "无法获得当前区域的投影参数"
 
-#: ../raster/r.proj/main.c:278
+#: ../raster/r.proj/main.c:279
 #, fuzzy, c-format
 msgid "Mapset <%s> in input location <%s> - %s"
 msgstr "未发现输入的矢量"
 
-#: ../raster/r.proj/main.c:302
+#: ../raster/r.proj/main.c:303
 #, fuzzy, c-format
 msgid "Raster map <%s> in location <%s> in mapset <%s> not found"
 msgstr "矢量文件 [%s] 不可用"
 
-#: ../raster/r.proj/main.c:310
+#: ../raster/r.proj/main.c:311
 #, fuzzy
 msgid "Unable to get projection info of input map"
 msgstr "无法获得当前区域的投影信息"
 
-#: ../raster/r.proj/main.c:313
+#: ../raster/r.proj/main.c:314
 #, fuzzy
 msgid "Unable to get projection units of input map"
 msgstr "无法获得当前区域的投影单位"
 
-#: ../raster/r.proj/main.c:316
+#: ../raster/r.proj/main.c:317
 #, fuzzy
 msgid "Unable to get projection key values of input map"
 msgstr "无法获得当前区域的投影参数"
 
-#: ../raster/r.proj/main.c:331
+#: ../raster/r.proj/main.c:332
 msgid "Unable to work with unprojected data (xy location)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:350
+#: ../raster/r.proj/main.c:351
 #, fuzzy, c-format
 msgid "Input map <%s@%s> in location <%s>:"
 msgstr "未发现输入的矢量"
 
-#: ../raster/r.proj/main.c:442
+#: ../raster/r.proj/main.c:443
 #, fuzzy
 msgid "Input:"
 msgstr "输入地图"
 
-#: ../raster/r.proj/main.c:443 ../raster/r.proj/main.c:454
+#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
 #, fuzzy, c-format
 msgid "Cols: %d (%d)"
 msgstr "列名"
 
-#: ../raster/r.proj/main.c:444 ../raster/r.proj/main.c:455
+#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
 #, c-format
 msgid "Rows: %d (%d)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:445 ../raster/r.proj/main.c:456
+#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
 #, fuzzy, c-format
 msgid "North: %f (%f)"
 msgstr "节点%d:%f %f\n"
 
-#: ../raster/r.proj/main.c:446 ../raster/r.proj/main.c:457
+#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
 #, c-format
 msgid "South: %f (%f)"
 msgstr ""
 
-#: ../raster/r.proj/main.c:447 ../raster/r.proj/main.c:458
+#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
 #, fuzzy, c-format
 msgid "West: %f (%f)"
 msgstr "节点%d:%f %f\n"
 
-#: ../raster/r.proj/main.c:448 ../raster/r.proj/main.c:459
+#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
 #, fuzzy, c-format
 msgid "East: %f (%f)"
 msgstr "节点%d:%f %f\n"
 
-#: ../raster/r.proj/main.c:449 ../raster/r.proj/main.c:460
+#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
 #, c-format
 msgid "EW-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:450 ../raster/r.proj/main.c:461
+#: ../raster/r.proj/main.c:451 ../raster/r.proj/main.c:462
 #, c-format
 msgid "NS-res: %f"
 msgstr ""
 
-#: ../raster/r.proj/main.c:453
+#: ../raster/r.proj/main.c:454
 #, fuzzy
 msgid "Output:"
 msgstr "输出图"
 
-#: ../raster/r.proj/main.c:490
+#: ../raster/r.proj/main.c:491
 #, fuzzy
 msgid "Projecting..."
 msgstr "绘制 ... "
@@ -24883,12 +26519,6 @@ msgstr "尝试读取dbmscap文件失败\n"
 msgid "Allows creation and/or modification of raster map layer support files."
 msgstr ""
 
-#: ../raster/r.support/main.c:67 ../raster/r.in.ascii/main.c:96
-#: ../raster/r.in.poly/main.c:50 ../raster/r.external/main.c:90
-#: ../raster/r.in.gdal/main.c:130 ../raster/r.in.bin/main.c:298
-msgid "Title for resultant raster map"
-msgstr "结果栅格图的标题"
-
 #: ../raster/r.support/main.c:81
 #, fuzzy
 msgid "Text to use for map data units"
@@ -24919,22 +26549,22 @@ msgstr "过滤器文件的名称"
 msgid "Raster map <%s> not found in current mapset"
 msgstr "未发现矢量地图<%s>"
 
-#: ../raster/r.support/main.c:277 ../raster/r.support/main.c:305
+#: ../raster/r.support/main.c:279 ../raster/r.support/main.c:307
 #, c-format
 msgid "[%s] is a reclass of another map. Exiting."
 msgstr "[%s] 是其它地图的重分类。退出。"
 
-#: ../raster/r.support/main.c:288
+#: ../raster/r.support/main.c:291
 #, c-format
 msgid "Writing new null file for [%s]... "
 msgstr "为 [%s] 写入新的空文件... "
 
-#: ../raster/r.support/main.c:309
+#: ../raster/r.support/main.c:311
 #, c-format
 msgid "Removing null file for [%s]...\n"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../raster/r.support/main.c:316
+#: ../raster/r.support/main.c:318
 msgid "Done."
 msgstr "完成。"
 
@@ -25720,7 +27350,7 @@ msgstr "nsteps 必须大于 0,使用 nsteps=255"
 msgid "Ignoring %s because %s is not specified"
 msgstr ""
 
-#: ../raster/r.topmodel/file_io.c:81
+#: ../raster/r.topmodel/file_io.c:56
 #, fuzzy, c-format
 msgid "%s cannot be 0"
 msgstr "无法打开 %s"
@@ -25937,8 +27567,8 @@ msgid "Two pairs of category multiplier and offsets, for $1 and $2"
 msgstr ""
 
 #: ../raster/r.category/main.c:148 ../raster/r.category/main.c:230
-#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:231
-#: ../raster/r.mapcalc/map3.c:188
+#: ../raster/r.report/parse.c:294 ../raster/r.mapcalc/map.c:233
+#: ../raster/r.mapcalc/map3.c:190
 #, fuzzy, c-format
 msgid "Unable to read category file of raster map <%s@%s>"
 msgstr "编辑 [%s] 的类别文件?"
@@ -26026,12 +27656,12 @@ msgstr "无法读取行 %i\n"
 msgid "Can't get cell header"
 msgstr "无法创建图层"
 
-#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:648
+#: ../raster/r.in.ascii/main.c:191 ../raster/r.horizon/main.c:654
 #, c-format
 msgid "OOPS: rows changed from %d to %d"
 msgstr ""
 
-#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:652
+#: ../raster/r.in.ascii/main.c:194 ../raster/r.horizon/main.c:658
 #, c-format
 msgid "OOPS: cols changed from %d to %d"
 msgstr ""
@@ -26223,18 +27853,13 @@ msgstr ""
 msgid "Number of header lines to skip at top of input file"
 msgstr "输入文件的开头需要忽略的行数 (写入地图历史信息)"
 
-#: ../raster/r.in.xyz/main.c:237 ../raster/r.in.lidar/main.c:204
-#, fuzzy
-msgid "Filter range for z data (min,max)"
-msgstr "整数范围:min,max"
-
 #: ../raster/r.in.xyz/main.c:238 ../raster/r.in.xyz/main.c:246
 #: ../raster/r.in.xyz/main.c:255 ../raster/r.in.xyz/main.c:263
 #: ../raster/r.in.xyz/main.c:271
 msgid "Advanced Input"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:211
+#: ../raster/r.in.xyz/main.c:245 ../raster/r.in.lidar/main.c:167
 msgid "Scale to apply to z data"
 msgstr ""
 
@@ -26261,7 +27886,7 @@ msgstr ""
 msgid "Please specify a reasonable column number."
 msgstr "请指定合理的 z 字段。"
 
-#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:467
+#: ../raster/r.in.xyz/main.c:349 ../raster/r.in.lidar/main.c:419
 #, fuzzy
 msgid "Invalid zrange"
 msgstr "无效的区域:%s"
@@ -26271,15 +27896,15 @@ msgstr "无效的区域:%s"
 msgid "Invalid vrange"
 msgstr "无效的区域:%s"
 
-#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/main.c:560
+#: ../raster/r.in.xyz/main.c:449 ../raster/r.in.lidar/point_binning.c:205
 msgid "Unable to calculate percentile without the pth option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/main.c:572
+#: ../raster/r.in.xyz/main.c:461 ../raster/r.in.lidar/point_binning.c:217
 msgid "Unable to calculate trimmed mean without the trim option specified!"
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:502 ../raster/r.in.lidar/main.c:655
+#: ../raster/r.in.xyz/main.c:502
 #, c-format
 msgid ""
 "Unable to process the hole map at once. Please set the %s option to some "
@@ -26301,7 +27926,7 @@ msgid "Reading input data..."
 msgstr "读取 %s ..."
 
 #: ../raster/r.in.xyz/main.c:611 ../raster/r.in.poly/poly2rast.c:56
-#: ../raster/r.in.lidar/main.c:709
+#: ../raster/r.in.lidar/main.c:556
 #, c-format
 msgid "Pass #%d (of %d) ..."
 msgstr ""
@@ -26344,16 +27969,16 @@ msgstr "无法找到文件 [%s]。"
 msgid "Writing to output raster map..."
 msgstr "输出栅格地图 %s ... "
 
-#: ../raster/r.in.xyz/main.c:1144 ../raster/r.in.lidar/main.c:1236
+#: ../raster/r.in.xyz/main.c:1144
 #, fuzzy, c-format
 msgid "%lu points found in region."
 msgstr "%d 个点在当前范围之外,将被忽略"
 
-#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/main.c:1328
+#: ../raster/r.in.xyz/main.c:1173 ../raster/r.in.lidar/info.c:108
 msgid "Scanning data ..."
 msgstr ""
 
-#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/main.c:1370
+#: ../raster/r.in.xyz/main.c:1279 ../raster/r.in.lidar/info.c:150
 #, c-format
 msgid "Range:     min         max\n"
 msgstr ""
@@ -26516,11 +28141,6 @@ msgstr ""
 msgid "Raster data format to write (case sensitive, see also -l flag)"
 msgstr ""
 
-#: ../raster/r.out.gdal/main.c:192
-#, fuzzy
-msgid "Data type"
-msgstr "要素类型"
-
 #: ../raster/r.out.gdal/main.c:202
 msgid "Creation option(s) to pass to the output format driver"
 msgstr ""
@@ -27069,104 +28689,109 @@ msgstr ""
 msgid "Warning, ignoring point outside window: %g, %g"
 msgstr "警告,忽略窗口外的点:%.4f,%.4f"
 
-#: ../raster/r.null/main.c:61
+#: ../raster/r.null/main.c:62
 #, fuzzy
 msgid "Manages NULL-values of given raster map."
 msgstr "输入栅格图的名称"
 
-#: ../raster/r.null/main.c:64
+#: ../raster/r.null/main.c:65
 #, fuzzy
 msgid "Name of raster map for which to edit null values"
 msgstr "需要修改空值的 3dcell 地图"
 
-#: ../raster/r.null/main.c:85
+#: ../raster/r.null/main.c:86
 msgid "Only do the work if the map is floating-point"
 msgstr ""
 
-#: ../raster/r.null/main.c:86 ../raster/r.null/main.c:91
-#: ../raster/r.null/main.c:97
+#: ../raster/r.null/main.c:87 ../raster/r.null/main.c:92
+#: ../raster/r.null/main.c:98
 msgid "Check"
 msgstr ""
 
-#: ../raster/r.null/main.c:90
+#: ../raster/r.null/main.c:91
 msgid "Only do the work if the map is integer"
 msgstr ""
 
-#: ../raster/r.null/main.c:96
+#: ../raster/r.null/main.c:97
 msgid "Only do the work if the map doesn't have a NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:102
+#: ../raster/r.null/main.c:103
 msgid "Create NULL-value bitmap file validating all data cells"
 msgstr ""
 
-#: ../raster/r.null/main.c:106
+#: ../raster/r.null/main.c:107
 msgid "Remove NULL-value bitmap file"
 msgstr ""
 
-#: ../raster/r.null/main.c:125
+#: ../raster/r.null/main.c:113
+msgid "Re-create NULL-value bitmap file (to compress or uncompress)"
+msgstr ""
+
+#: ../raster/r.null/main.c:132
 #, c-format
 msgid ""
 "Raster map <%s> is a reclass of map <%s@%s>. Consider to generate a copy "
 "with r.mapcalc. Exiting."
 msgstr ""
 
-#: ../raster/r.null/main.c:131
+#: ../raster/r.null/main.c:138
 #, fuzzy, c-format
 msgid "Raster map <%s> is not in your mapset <%s>"
 msgstr "未发现矢量地图<%s>"
 
-#: ../raster/r.null/main.c:138
+#: ../raster/r.null/main.c:145
 #, fuzzy, c-format
 msgid "%s is illegal entry for null"
 msgstr "非法的空值"
 
-#: ../raster/r.null/main.c:145
+#: ../raster/r.null/main.c:152
 #, fuzzy, c-format
 msgid "Raster map <%s> already has a null bitmap file"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../raster/r.null/main.c:149
+#: ../raster/r.null/main.c:156
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL)"
 msgstr "%s - 无法打开栅格文件"
 
-#: ../raster/r.null/main.c:153
+#: ../raster/r.null/main.c:160
 #, fuzzy, c-format
 msgid "<%s> is integer raster map (CELL). Using null=%d."
 msgstr "%s - 无法打开栅格文件"
 
-#: ../raster/r.null/main.c:159
+#: ../raster/r.null/main.c:166
 #, fuzzy, c-format
 msgid "<%s> is floating pointing raster map"
 msgstr "起始点栅格文件"
 
-#: ../raster/r.null/main.c:175
+#: ../raster/r.null/main.c:183 ../raster/r.null/main.c:208
 #, fuzzy, c-format
 msgid "Writing new null file for raster map <%s>..."
 msgstr "为 [%s] 写入新的空文件... "
 
-#: ../raster/r.null/main.c:185 ../raster/r.null/main.c:198
+#: ../raster/r.null/main.c:193 ../raster/r.null/main.c:220
+#: ../raster/r.null/main.c:234
 #, fuzzy, c-format
 msgid "Raster map <%s> modified."
 msgstr "未找到栅格图<%s>"
 
-#: ../raster/r.null/main.c:192
+#: ../raster/r.null/main.c:227
 #, fuzzy, c-format
 msgid "Removing null file for raster map <%s>..."
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../raster/r.null/main.c:262
+#: ../raster/r.null/main.c:298
 #, fuzzy, c-format
 msgid "%s: %s: illegal value spec"
 msgstr "%s - 非法的名称"
 
-#: ../raster/r.null/main.c:264
+#: ../raster/r.null/main.c:300
 #, fuzzy, c-format
 msgid "%s: illegal value spec"
 msgstr "%s - 非法的名称"
 
-#: ../raster/r.null/main.c:325
+#: ../raster/r.null/main.c:361
 #, fuzzy, c-format
 msgid "Writing new data for raster map <%s>..."
 msgstr "写入栅格地图 %i\n"
@@ -27588,55 +29213,131 @@ msgstr "绘制 ... "
 msgid "File <%s> created"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:173
+#: ../raster/r.in.lidar/main.c:110
 #, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
 msgstr "以当前目录中的ASCII格式的(多边形/线形)数据文件来创建栅格地图。"
 
-#: ../raster/r.in.lidar/main.c:245
+#: ../raster/r.in.lidar/main.c:124
+#, fuzzy
+msgid "File containing names of LAS input files"
+msgstr "无法打开输入的dig_att文件。"
+
+#: ../raster/r.in.lidar/main.c:175
+#, fuzzy
+msgid "Filter range for intensity values (min,max)"
+msgstr "整数范围:min,max"
+
+#: ../raster/r.in.lidar/main.c:183
+#, fuzzy
+msgid "Scale to apply to intensity values"
+msgstr "报告栅格图层的统计数据"
+
+#: ../raster/r.in.lidar/main.c:209
+msgid "Discard given percentage of the smallest and largest values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:219
 #, fuzzy
 msgid "Output raster resolution"
 msgstr "输出栅格文件的标题"
 
-#: ../raster/r.in.lidar/main.c:293
+#: ../raster/r.in.lidar/main.c:256
+#, fuzzy
+msgid "Set computation region to match the new raster map"
+msgstr "设置区域以匹配这个栅格图"
+
+#: ../raster/r.in.lidar/main.c:258
+msgid ""
+"Set computation region to match the 2D extent and resolution of the newly "
+"created new raster map"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:282
 msgid "Import intensity values rather than z values"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:593
+#: ../raster/r.in.lidar/main.c:287
+msgid "Use z values for filtering, but import intensity values"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:301
+#, c-format
+msgid "Flag %c makes sense only with %s option or -%c flag"
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:311
+#, fuzzy, c-format
+msgid "File <%s> does not exist"
+msgstr "栅格地图 [%s] 未发现"
+
+#: ../raster/r.in.lidar/main.c:328
 msgid "zrange will not be taken into account during scan"
 msgstr ""
 
-#: ../raster/r.in.lidar/main.c:614
+#: ../raster/r.in.lidar/main.c:365
+msgid ""
+"First file's projection checked, checking projection of the other files..."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:403
+#, fuzzy, c-format
+msgid "Unknown filter option <%s>"
+msgstr "未知的类型"
+
+#: ../raster/r.in.lidar/main.c:433
+#, fuzzy, c-format
+msgid "Invalid %s"
+msgstr "无效的区域:%s"
+
+#: ../raster/r.in.lidar/main.c:468
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0.0"
 msgstr "位置名称"
 
-#: ../raster/r.in.lidar/main.c:700
+#: ../raster/r.in.lidar/main.c:536
+#, c-format
+msgid ""
+"Unable to process the hole map at once. Please set the '%s' option to some "
+"value lower than 100."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:548
 #, fuzzy
 msgid "Reading data ..."
 msgstr "读取地图"
 
-#: ../raster/r.in.lidar/main.c:714
-#, fuzzy
-msgid "Could not rewind input file"
-msgstr "无法打开矢量文件 <%s>"
-
-#: ../raster/r.in.lidar/main.c:890
+#: ../raster/r.in.lidar/main.c:690
 #, fuzzy
 msgid "Writing to map ..."
 msgstr "写入 %s ... "
 
-#: ../raster/r.grow.distance/main.c:155
+#: ../raster/r.in.lidar/main.c:728
+#, c-format
+msgid "Raster map <%s> created. %lu points from %d files found in region."
+msgstr ""
+
+#: ../raster/r.in.lidar/main.c:733
+#, fuzzy, c-format
+msgid "Raster map <%s> created. %lu points found in region."
+msgstr "%d 个点在当前范围之外,将被忽略"
+
+#: ../raster/r.in.lidar/string_list.c:34
+#, fuzzy, c-format
+msgid "Cannot open file %s for reading"
+msgstr "无法找到文件 [%s]。"
+
+#: ../raster/r.grow.distance/main.c:156
 #, fuzzy
 msgid "Generates a raster map containing distances to nearest raster features."
 msgstr "生成一个栅格图层包含一个像元增长所形成的连续区域。"
 
-#: ../raster/r.grow.distance/main.c:162
+#: ../raster/r.grow.distance/main.c:163
 #, fuzzy
 msgid "Name for distance output raster map"
 msgstr "输出图层的名称"
 
-#: ../raster/r.grow.distance/main.c:168
+#: ../raster/r.grow.distance/main.c:169
 #, fuzzy
 msgid "Name for value output raster map"
 msgstr ""
@@ -27645,36 +29346,49 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.grow.distance/main.c:181
+#: ../raster/r.grow.distance/main.c:182
 #, fuzzy
 msgid "Output distances in meters instead of map units"
 msgstr "点间的最大距离"
 
-#: ../raster/r.grow.distance/main.c:191
+#: ../raster/r.grow.distance/main.c:186
+#, fuzzy
+msgid "Calculate distance to nearest NULL cell"
+msgstr "点到网络的最小距离"
+
+#: ../raster/r.grow.distance/main.c:197
+msgid "Distance output is required for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:199
+msgid "Value output is meaningless for distance to NULL cells"
+msgstr ""
+
+#: ../raster/r.grow.distance/main.c:205
 #, fuzzy
 msgid "At least one of distance= and value= must be given"
 msgstr "必须指定两个图层"
 
-#: ../raster/r.grow.distance/main.c:206
+#: ../raster/r.grow.distance/main.c:220
 msgid "metric=geodesic is only valid for lat/lon"
 msgstr ""
 
-#: ../raster/r.grow.distance/main.c:212
+#: ../raster/r.grow.distance/main.c:226
 #, fuzzy, c-format
 msgid "Unknown metric: '%s'"
 msgstr "未知的量度:[%s]"
 
-#: ../raster/r.grow.distance/main.c:217
+#: ../raster/r.grow.distance/main.c:231
 #, fuzzy, c-format
 msgid "Output distance in meters for lat/lon is only possible with '%s=%s'"
 msgstr "点间的最大距离"
 
-#: ../raster/r.grow.distance/main.c:237
+#: ../raster/r.grow.distance/main.c:251
 #, fuzzy, c-format
 msgid "Unable to create temporary file <%s>"
 msgstr "无法创建文件 [%s]"
 
-#: ../raster/r.grow.distance/main.c:312 ../raster/r.fill.dir/main.c:250
+#: ../raster/r.grow.distance/main.c:327 ../raster/r.fill.dir/main.c:250
 #: ../raster/r.stream.extract/close.c:248
 #, fuzzy
 msgid "Writing output raster maps..."
@@ -27818,7 +29532,7 @@ msgstr ""
 msgid "Converting <%s>..."
 msgstr "读取 %s ..."
 
-#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:183
+#: ../raster/r.out.png/main.c:272 ../raster/r.univar/r.univar_main.c:201
 #, fuzzy, c-format
 msgid "Raster <%s> type mismatch"
 msgstr "dig_att文件不存在。"
@@ -27926,7 +29640,7 @@ msgid "There are no valid locations in the current region"
 msgstr "%d 个点在当前范围之外,将被忽略"
 
 #: ../raster/r.random/random.c:43 ../raster/r.random/random.c:47
-#: ../raster/r.mapcalc/map3.c:515 ../imagery/i.landsat.toar/main.c:407
+#: ../raster/r.mapcalc/map3.c:517 ../imagery/i.landsat.toar/main.c:407
 #: ../imagery/i.landsat.toar/main.c:545 ../imagery/i.landsat.acca/main.c:57
 #: ../imagery/i.landsat.acca/tools.c:126
 #: ../imagery/i.landsat.acca/algorithm.c:380
@@ -28523,7 +30237,7 @@ msgstr ""
 
 #: ../raster/r.his/main.c:167 ../raster/r.his/main.c:183
 #: ../raster/r.his/main.c:201 ../raster/r.out.ppm3/main.c:115
-#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:222
+#: ../display/d.rast/display.c:23 ../display/d.rast.num/main.c:253
 #: ../display/d.histogram/main.c:171 ../display/d.his/main.c:139
 #: ../display/d.his/main.c:156 ../display/d.his/main.c:174
 #: ../display/d.rgb/main.c:99 ../display/d.legend/main.c:297
@@ -28975,7 +30689,7 @@ msgstr ""
 msgid "Print only the number of clumps in shell script style"
 msgstr "以shell脚本的样式输出统计值"
 
-#: ../raster/r.clump/main.c:122
+#: ../raster/r.clump/main.c:125
 #, fuzzy, c-format
 msgid "%d clump."
 msgid_plural "%d clumps."
@@ -28997,11 +30711,6 @@ msgstr "图层 %d"
 msgid "Unable to write to temp file"
 msgstr "无法创建文件 [%s]"
 
-#: ../raster/r.clump/clump.c:225
-#, fuzzy
-msgid "Generating renumbering scheme..."
-msgstr "写入 %s ... "
-
 #: ../raster/r.clump/clump.c:265
 #, fuzzy
 msgid "Pass 2 of 2..."
@@ -29120,7 +30829,7 @@ msgid "Writing output raster map..."
 msgstr "输出栅格地图 %s ... "
 
 #: ../raster/r.drain/main.c:519 ../raster/r.composite/main.c:191
-#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:134
+#: ../raster/r.random.surface/save.c:98 ../raster/r.random.cells/indep.c:139
 #: ../imagery/i.ifft/main.c:207
 #, fuzzy, c-format
 msgid "Writing raster map <%s>..."
@@ -29131,17 +30840,17 @@ msgstr "写入栅格地图 %i\n"
 msgid "direction read: %lf, neighbour found: %i"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:55
+#: ../raster/r.water.outlet/main.c:56
 #, fuzzy
 msgid "Creates watershed basins from a drainage direction map."
 msgstr "为栅格图层生成区域统计值。"
 
-#: ../raster/r.water.outlet/main.c:58 ../raster/r.watershed/front/main.c:74
+#: ../raster/r.water.outlet/main.c:59 ../raster/r.watershed/front/main.c:75
 #: ../raster/r.basins.fill/main.c:56
 msgid "watershed"
 msgstr ""
 
-#: ../raster/r.water.outlet/main.c:61
+#: ../raster/r.water.outlet/main.c:62
 #, fuzzy
 msgid "Name of input drainage direction map"
 msgstr ""
@@ -29150,7 +30859,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.water.outlet/main.c:64
+#: ../raster/r.water.outlet/main.c:65
 #, fuzzy
 msgid "Name for output watershed basin map"
 msgstr ""
@@ -29159,22 +30868,22 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.water.outlet/main.c:67
+#: ../raster/r.water.outlet/main.c:68
 #, fuzzy
 msgid "Coordinates of outlet point"
 msgstr "地图东向和北向格网坐标的起点"
 
-#: ../raster/r.water.outlet/main.c:80
+#: ../raster/r.water.outlet/main.c:81
 #, fuzzy, c-format
 msgid "Illegal east coordinate '%s'"
 msgstr "使用地图中心点坐标\n"
 
-#: ../raster/r.water.outlet/main.c:82
+#: ../raster/r.water.outlet/main.c:83
 #, fuzzy, c-format
 msgid "Illegal north coordinate '%s'"
 msgstr "地图北向格网坐标"
 
-#: ../raster/r.water.outlet/main.c:87
+#: ../raster/r.water.outlet/main.c:88
 #, fuzzy, c-format
 msgid "Ignoring point outside computation region: %.4f,%.4f"
 msgstr "警告,忽略窗口外的点:%.4f,%.4f"
@@ -29267,22 +30976,22 @@ msgid "Invalid map type"
 msgstr "无效的区域:%s"
 
 #: ../raster/r.watershed/ram/main.c:82 ../raster/r.watershed/ram/main.c:98
-#: ../raster/r.watershed/seg/main.c:90 ../raster/r.watershed/seg/main.c:105
+#: ../raster/r.watershed/seg/main.c:92 ../raster/r.watershed/seg/main.c:107
 #, c-format
 msgid "SECTION %d: Closing Maps."
 msgstr ""
 
-#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:103
+#: ../raster/r.watershed/ram/main.c:96 ../raster/r.watershed/seg/main.c:105
 #, c-format
 msgid "SECTION %d: Watershed determination."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:118
+#: ../raster/r.watershed/ram/init_vars.c:121
 #, c-format
 msgid "SECTION 1a (of %1d): Initiating Memory."
 msgstr ""
 
-#: ../raster/r.watershed/ram/init_vars.c:299
+#: ../raster/r.watershed/ram/init_vars.c:311
 #, c-format
 msgid "SECTION 1b (of %1d): Determining Offmap Flow."
 msgstr ""
@@ -29389,23 +31098,23 @@ msgid "flat cell escaped in adjustment"
 msgstr ""
 
 #: ../raster/r.watershed/ram/do_cum.c:114
-#: ../raster/r.watershed/seg/do_cum.c:118
+#: ../raster/r.watershed/seg/do_cum.c:119
 msgid "SECTION 3: Accumulating Surface Flow with SFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:274
-#: ../raster/r.watershed/seg/do_cum.c:289
+#: ../raster/r.watershed/ram/do_cum.c:276
+#: ../raster/r.watershed/seg/do_cum.c:293
 msgid "SECTION 3a: Accumulating Surface Flow with MFD."
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:441
-#: ../raster/r.watershed/seg/do_cum.c:483
+#: ../raster/r.watershed/ram/do_cum.c:443
+#: ../raster/r.watershed/seg/do_cum.c:487
 #: ../raster/r.stream.extract/streams.c:336
 #, c-format
 msgid "MFD: cumulative proportion of flow distribution not 1.0 but %f"
 msgstr ""
 
-#: ../raster/r.watershed/ram/do_cum.c:478
+#: ../raster/r.watershed/ram/do_cum.c:480
 #, c-format
 msgid "MFD: A * path already processed when distributing flow: %d of %d cell"
 msgid_plural ""
@@ -29413,8 +31122,8 @@ msgid_plural ""
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/ram/do_cum.c:484
-#: ../raster/r.watershed/seg/do_cum.c:531
+#: ../raster/r.watershed/ram/do_cum.c:486
+#: ../raster/r.watershed/seg/do_cum.c:533
 msgid "SECTION 3b: Adjusting drainage directions."
 msgstr ""
 
@@ -29911,63 +31620,63 @@ msgid ""
 "Hit <return> by itself for the next question if there is no blocking map."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:75
+#: ../raster/r.watershed/front/main.c:76
 msgid "Calculates hydrological parameters and RUSLE factors."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:78 ../raster/r.watershed/front/main.c:85
-#: ../raster/r.watershed/front/main.c:91 ../raster/r.watershed/front/main.c:98
-#: ../raster/r.watershed/front/main.c:107
-#: ../raster/r.watershed/front/main.c:115
-#: ../raster/r.watershed/front/main.c:124
+#: ../raster/r.watershed/front/main.c:79 ../raster/r.watershed/front/main.c:86
+#: ../raster/r.watershed/front/main.c:92 ../raster/r.watershed/front/main.c:99
+#: ../raster/r.watershed/front/main.c:108
+#: ../raster/r.watershed/front/main.c:116
+#: ../raster/r.watershed/front/main.c:125
 #, fuzzy
 msgid "Inputs"
 msgstr "输入地图"
 
-#: ../raster/r.watershed/front/main.c:82
+#: ../raster/r.watershed/front/main.c:83
 #, fuzzy
 msgid "Name of input depressions raster map"
 msgstr "输入栅格图的名称"
 
-#: ../raster/r.watershed/front/main.c:83
+#: ../raster/r.watershed/front/main.c:84
 msgid "All non-NULL and non-zero cells are considered as real depressions"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:89
+#: ../raster/r.watershed/front/main.c:90
 #, fuzzy
 msgid "Name of input raster representing amount of overland flow per cell"
 msgstr "输入地图:每个像元的陆上径流量"
 
-#: ../raster/r.watershed/front/main.c:95
+#: ../raster/r.watershed/front/main.c:96
 #, fuzzy
 msgid "Name of input raster map percent of disturbed land"
 msgstr "输入栅格图的名称"
 
-#: ../raster/r.watershed/front/main.c:96 ../raster/r.watershed/front/main.c:121
+#: ../raster/r.watershed/front/main.c:97 ../raster/r.watershed/front/main.c:122
 msgid "For USLE"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:103
+#: ../raster/r.watershed/front/main.c:104
 #, fuzzy
 msgid "Name of input raster map blocking overland surface flow"
 msgstr "输入地图:地表径流的地形阻断(用于USLE)"
 
-#: ../raster/r.watershed/front/main.c:105
+#: ../raster/r.watershed/front/main.c:106
 msgid ""
 "For USLE. All non-NULL and non-zero cells are considered as blocking terrain."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:112
+#: ../raster/r.watershed/front/main.c:113
 #, fuzzy
 msgid "Minimum size of exterior watershed basin"
 msgstr "输入值:外流域的最小值"
 
-#: ../raster/r.watershed/front/main.c:120
+#: ../raster/r.watershed/front/main.c:121
 #, fuzzy
 msgid "Maximum length of surface flow in map units"
 msgstr "输入值:地表径流的最大长度(用于USLE)"
 
-#: ../raster/r.watershed/front/main.c:129
+#: ../raster/r.watershed/front/main.c:130
 #, fuzzy
 msgid "Name for output accumulation raster map"
 msgstr ""
@@ -29976,12 +31685,12 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:131
+#: ../raster/r.watershed/front/main.c:132
 #, fuzzy
 msgid "Number of cells that drain through each cell"
 msgstr "输出地图:流经的像元数"
 
-#: ../raster/r.watershed/front/main.c:138
+#: ../raster/r.watershed/front/main.c:139
 #, fuzzy
 msgid "Name for output topographic index ln(a / tan(b)) map"
 msgstr ""
@@ -29990,7 +31699,12 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:144
+#: ../raster/r.watershed/front/main.c:146
+#, fuzzy
+msgid "Stream power index a * tan(b)"
+msgstr "地形索引ln(a/tanB)图"
+
+#: ../raster/r.watershed/front/main.c:152
 #, fuzzy
 msgid "Name for output drainage direction raster map"
 msgstr ""
@@ -29999,7 +31713,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:150
+#: ../raster/r.watershed/front/main.c:158
 #, fuzzy
 msgid "Name for output basins raster map"
 msgstr ""
@@ -30008,7 +31722,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:156
+#: ../raster/r.watershed/front/main.c:164
 #, fuzzy
 msgid "Name for output stream segments raster map"
 msgstr ""
@@ -30017,7 +31731,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:162
+#: ../raster/r.watershed/front/main.c:170
 #, fuzzy
 msgid "Name for output half basins raster map"
 msgstr ""
@@ -30026,12 +31740,12 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:164
+#: ../raster/r.watershed/front/main.c:172
 #, fuzzy
 msgid "Each half-basin is given a unique value"
 msgstr "输出地图:每半个流域给一个唯一值"
 
-#: ../raster/r.watershed/front/main.c:170
+#: ../raster/r.watershed/front/main.c:178
 #, fuzzy
 msgid "Name for output slope length raster map"
 msgstr ""
@@ -30040,12 +31754,12 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:172
+#: ../raster/r.watershed/front/main.c:180
 #, fuzzy
 msgid "Slope length and steepness (LS) factor for USLE"
 msgstr "输出地图:坡长和坡度(LS)因素(用于USLE)"
 
-#: ../raster/r.watershed/front/main.c:178
+#: ../raster/r.watershed/front/main.c:186
 #, fuzzy
 msgid "Name for output slope steepness raster map"
 msgstr ""
@@ -30054,113 +31768,113 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.watershed/front/main.c:179
+#: ../raster/r.watershed/front/main.c:187
 #, fuzzy
 msgid "Slope steepness (S) factor for USLE"
 msgstr "输出地图:坡度因素(S)(用于USLE)"
 
-#: ../raster/r.watershed/front/main.c:188
+#: ../raster/r.watershed/front/main.c:196
 #, fuzzy
 msgid "Convergence factor for MFD (1-10)"
 msgstr "z值的转换因子"
 
-#: ../raster/r.watershed/front/main.c:190
+#: ../raster/r.watershed/front/main.c:198
 msgid "1 = most diverging flow, 10 = most converging flow. Recommended: 5"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:197
+#: ../raster/r.watershed/front/main.c:205
 msgid "Maximum memory to be used with -m flag (in MB)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:201
+#: ../raster/r.watershed/front/main.c:209
 msgid "SFD (D8) flow (default is MFD)"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:203
+#: ../raster/r.watershed/front/main.c:211
 msgid "SFD: single flow direction, MFD: multiple flow direction"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:208
+#: ../raster/r.watershed/front/main.c:216
 msgid "Allow only horizontal and vertical flow of water"
 msgstr "只允许垂直和水平流动"
 
-#: ../raster/r.watershed/front/main.c:213
+#: ../raster/r.watershed/front/main.c:221
 msgid "Enable disk swap memory option: Operation is slow"
 msgstr "启用磁盘交换内存选项:操作将会变慢"
 
-#: ../raster/r.watershed/front/main.c:215
+#: ../raster/r.watershed/front/main.c:223
 msgid ""
 "Only needed if memory requirements exceed available RAM; see manual on how "
 "to calculate memory requirements"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:220
+#: ../raster/r.watershed/front/main.c:228
 msgid "Use positive flow accumulation even for likely underestimates"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:222
+#: ../raster/r.watershed/front/main.c:230
 msgid "See manual for a detailed description of flow accumulation output"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:227
+#: ../raster/r.watershed/front/main.c:235
 msgid "Beautify flat areas"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:229
+#: ../raster/r.watershed/front/main.c:237
 msgid "Flow direction in flat areas is modified to look prettier"
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:245
+#: ../raster/r.watershed/front/main.c:253
 #, fuzzy
 msgid "Sorry, you must choose an output map."
 msgstr "无法关闭输出地图"
 
-#: ../raster/r.watershed/front/main.c:251
+#: ../raster/r.watershed/front/main.c:259
 #, fuzzy
 msgid "The basin threshold must be a positive number."
 msgstr "nsteps 必须大于 0,使用 nsteps=255"
 
-#: ../raster/r.watershed/front/main.c:267
+#: ../raster/r.watershed/front/main.c:275
 msgid ""
 "Sorry, if any of the following options are set:\n"
 "    basin, stream, half_basin, length_slope, or slope_steepness\n"
 "    you MUST provide a value for the basin threshold parameter."
 msgstr ""
 
-#: ../raster/r.watershed/front/main.c:294
+#: ../raster/r.watershed/front/main.c:302
 #, fuzzy
 msgid "Beautify flat areas is not yet supported for disk swap mode"
 msgstr "字段类型不支持"
 
-#: ../raster/r.watershed/front/main.c:321
+#: ../raster/r.watershed/front/main.c:332
 #, c-format
 msgid "Subprocess failed with exit code %d"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:132
+#: ../raster/r.watershed/seg/init_vars.c:139
 #, c-format
 msgid "SECTION 1 beginning: Initiating Variables. %d section total."
 msgid_plural "SECTION 1 beginning: Initiating Variables. %d sections total."
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.watershed/seg/init_vars.c:168
+#: ../raster/r.watershed/seg/init_vars.c:175
 msgid "Maximum memory to be used was smaller than 3 MB, set to 3 MB."
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:245
+#: ../raster/r.watershed/seg/init_vars.c:252
 #: ../raster/r.stream.extract/main.c:319
 #, c-format
 msgid "Will need up to %.2f MB of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:247
+#: ../raster/r.watershed/seg/init_vars.c:254
 #: ../raster/r.stream.extract/main.c:321
 #, c-format
 msgid "Will need up to %.2f GB (%.0f MB) of disk space"
 msgstr ""
 
-#: ../raster/r.watershed/seg/init_vars.c:457
+#: ../raster/r.watershed/seg/init_vars.c:470
 msgid "SECTION 1b: Determining Offmap Flow."
 msgstr ""
 
@@ -30169,22 +31883,32 @@ msgstr ""
 msgid "Closing accumulation map"
 msgstr "叠加栅格图"
 
-#: ../raster/r.watershed/seg/close_maps.c:132
+#: ../raster/r.watershed/seg/close_maps.c:136
+#, fuzzy
+msgid "Closing TCI and SPI maps"
+msgstr "叠加栅格图"
+
+#: ../raster/r.watershed/seg/close_maps.c:138
 #, fuzzy
 msgid "Closing TCI map"
 msgstr "叠加栅格图"
 
-#: ../raster/r.watershed/seg/close_maps.c:214
+#: ../raster/r.watershed/seg/close_maps.c:140
+#, fuzzy
+msgid "Closing SPI map"
+msgstr "叠加栅格图"
+
+#: ../raster/r.watershed/seg/close_maps.c:300
 #, fuzzy
 msgid "Closing flow direction map"
 msgstr "叠加栅格图"
 
-#: ../raster/r.watershed/seg/close_maps.c:241
+#: ../raster/r.watershed/seg/close_maps.c:327
 #, fuzzy
 msgid "Closing LS map"
 msgstr "叠加栅格图"
 
-#: ../raster/r.watershed/seg/close_maps.c:246
+#: ../raster/r.watershed/seg/close_maps.c:332
 #, fuzzy
 msgid "Closing SL map"
 msgstr "叠加栅格图"
@@ -30216,33 +31940,33 @@ msgstr ""
 msgid "bug in A* Search: doer %"
 msgstr ""
 
-#: ../raster/r.watershed/seg/do_cum.c:527
+#: ../raster/r.watershed/seg/do_cum.c:529
 msgid "MFD: A * path already processed when distributing flow: %d of %"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:257 ../raster/r.resamp.interp/main.c:77
+#: ../raster/r.resamp.stats/main.c:259 ../raster/r.resamp.interp/main.c:77
 #: ../raster/r.resample/main.c:55 ../raster/r.resamp.bspline/main.c:82
-#: ../raster/r.resamp.filter/main.c:385 ../raster/r.resamp.rst/main.c:149
+#: ../raster/r.resamp.filter/main.c:390 ../raster/r.resamp.rst/main.c:149
 #, fuzzy
 msgid "resample"
 msgstr "将要查询的栅格地图"
 
-#: ../raster/r.resamp.stats/main.c:259
+#: ../raster/r.resamp.stats/main.c:261
 #, fuzzy
 msgid "Resamples raster map layers to a coarser grid using aggregation."
 msgstr "生成一个栅格图层,显示一个流域的子流域"
 
-#: ../raster/r.resamp.stats/main.c:269
+#: ../raster/r.resamp.stats/main.c:271
 #, fuzzy
 msgid "Aggregation method"
 msgstr "聚合操作"
 
-#: ../raster/r.resamp.stats/main.c:287
+#: ../raster/r.resamp.stats/main.c:289
 msgid "Weight according to area (slower)"
 msgstr ""
 
-#: ../raster/r.resamp.stats/main.c:370 ../raster/r.resamp.interp/main.c:353
-#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:556
+#: ../raster/r.resamp.stats/main.c:389 ../raster/r.resamp.interp/main.c:370
+#: ../raster/r.tile/main.c:200 ../raster/r.resamp.filter/main.c:578
 #, fuzzy, c-format
 msgid "Unable to read color table for %s"
 msgstr "无法为色彩条读取颜色"
@@ -30649,7 +32373,7 @@ msgstr "浮点型地图需要 vals 变量!"
 msgid "Color table 'grey.log' is not supported for floating point %s map"
 msgstr "浮点型地图需要 vals 变量!"
 
-#: ../raster/r.colors/edit_colors.c:376
+#: ../raster/r.colors/edit_colors.c:376 ../imagery/i.vi/main.c:543
 #, fuzzy, c-format
 msgid "Unknown color request '%s'"
 msgstr "%s - 未知的颜色\n"
@@ -31035,7 +32759,7 @@ msgid ""
 msgstr "计算栅格地图中非空像元的一元统计值"
 
 #: ../raster/r.univar/r3.univar_main.c:105
-#: ../raster/r.univar/r.univar_main.c:108
+#: ../raster/r.univar/r.univar_main.c:112
 msgid ""
 "Statistics include number of cells counted, minimum and maximum cell values, "
 "range, arithmetic mean, population variance, standard deviation, coefficient "
@@ -31050,11 +32774,23 @@ msgstr ""
 msgid "Extended"
 msgstr ""
 
-#: ../raster/r.univar/r.univar_main.c:106
+#: ../raster/r.univar/r.univar_main.c:76
+#, fuzzy
+msgid ""
+"Use the native resolution and extent of the raster map, instead of the "
+"current region"
+msgstr "%d 个点在当前范围之外,将被忽略"
+
+#: ../raster/r.univar/r.univar_main.c:110
 msgid ""
 "Calculates univariate statistics from the non-null cells of a raster map."
 msgstr "计算栅格地图中非空像元的一元统计值"
 
+#: ../raster/r.univar/r.univar_main.c:123
+#, fuzzy
+msgid "zones option and region flag -r are mutually exclusive"
+msgstr "必须指定'from_table'或'select'选项。"
+
 #: ../raster/r.out.ascii/main.c:63
 #, fuzzy
 msgid "Converts a raster map layer into a GRASS ASCII text file."
@@ -31341,33 +33077,33 @@ msgstr ""
 msgid "Input maps have to be from the same type. CELL, FCELL or DCELL!"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:68
+#: ../raster/r.thin/thin_lines.c:67
 #, fuzzy
 msgid "Unable to find bounding box for lines"
 msgstr "无法打开 ascii 文件 [%s]"
 
-#: ../raster/r.thin/thin_lines.c:70
+#: ../raster/r.thin/thin_lines.c:69
 #, c-format
 msgid "Bounding box:  l = %d, r = %d, t = %d, b = %d"
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:117
+#: ../raster/r.thin/thin_lines.c:116
 #, fuzzy, c-format
 msgid "Pass number %d"
 msgstr "图层 %d"
 
-#: ../raster/r.thin/thin_lines.c:168
+#: ../raster/r.thin/thin_lines.c:167
 #, c-format
 msgid "Deleted %d pixel"
 msgid_plural "Deleted %d pixels"
 msgstr[0] ""
 msgstr[1] ""
 
-#: ../raster/r.thin/thin_lines.c:172
+#: ../raster/r.thin/thin_lines.c:171
 msgid "Thinning completed successfully."
 msgstr ""
 
-#: ../raster/r.thin/thin_lines.c:174
+#: ../raster/r.thin/thin_lines.c:173
 msgid "Thinning not completed, consider to increase 'iterations' parameter."
 msgstr ""
 
@@ -31666,32 +33402,12 @@ msgstr "对比"
 msgid "Produces a vector map of specified contours from a raster map."
 msgstr "从GRASS栅格图层生成有特定等高线的GRASS矢量地图。"
 
-#: ../raster/r.contour/main.c:101
-msgid "Increment between contour levels"
-msgstr "等高线级数间的增量"
-
 #: ../raster/r.contour/main.c:102 ../raster/r.contour/main.c:110
 #: ../raster/r.contour/main.c:117 ../raster/r.contour/main.c:124
 #, fuzzy
 msgid "Contour levels"
 msgstr "等高线级数的列表"
 
-#: ../raster/r.contour/main.c:109
-msgid "List of contour levels"
-msgstr "等高线级数的列表"
-
-#: ../raster/r.contour/main.c:116
-msgid "Minimum contour level"
-msgstr "最低等高线的级数"
-
-#: ../raster/r.contour/main.c:123
-msgid "Maximum contour level"
-msgstr "最高等高线的级数"
-
-#: ../raster/r.contour/main.c:132
-msgid "Minimum number of points for a contour line (0 -> no limit)"
-msgstr "一条等高线应有的最少点数(0为无限制)"
-
 #: ../raster/r.contour/main.c:140
 #, fuzzy, c-format
 msgid "Neither <%s> nor <%s> option must be specified"
@@ -32296,55 +34012,56 @@ msgstr ""
 msgid "Could not create and solve the linear equation system"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster/r.mapcalc/main.c:117
+#: ../raster/r.mapcalc/main.c:71
 #, fuzzy
 msgid "Raster map calculator."
 msgstr "用来对齐的栅格图"
 
-#: ../raster/r.mapcalc/main.c:124
+#: ../raster/r.mapcalc/main.c:78
 #, fuzzy
 msgid "Expression to evaluate"
 msgstr "比特模式的值"
 
-#: ../raster/r.mapcalc/main.c:125 ../raster/r.mapcalc/main.c:131
+#: ../raster/r.mapcalc/main.c:79 ../raster/r.mapcalc/main.c:85
 #, fuzzy
 msgid "Expression"
 msgstr "比特模式的值"
 
-#: ../raster/r.mapcalc/main.c:130
+#: ../raster/r.mapcalc/main.c:84
 #, fuzzy
 msgid "File containing expression(s) to evaluate"
 msgstr "无法打开输入的dig_att文件。"
 
-#: ../raster/r.mapcalc/main.c:137
+#: ../raster/r.mapcalc/main.c:91
 #, fuzzy
 msgid "Seed for rand() function"
 msgstr "未知的类型"
 
-#: ../raster/r.mapcalc/main.c:141
+#: ../raster/r.mapcalc/main.c:95
 msgid "Generate random seed (result is non-deterministic)"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:163
+#: ../raster/r.mapcalc/main.c:99
+#, fuzzy
+msgid "List input and output maps"
+msgstr "写入 %s ... "
+
+#: ../raster/r.mapcalc/main.c:121
 #, c-format
 msgid "%s= and -%c are mutually exclusive"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:174
+#: ../raster/r.mapcalc/main.c:132
 #, fuzzy
 msgid "parse error"
 msgstr "%d 条记录更新时发生错误"
 
-#: ../raster/r.mapcalc/main.c:196
+#: ../raster/r.mapcalc/main.c:159
 msgid "Floating point error(s) occurred in the calculation"
 msgstr ""
 
-#: ../raster/r.mapcalc/main.c:201
-msgid "Overflow occurred in the calculation"
-msgstr ""
-
 #: ../raster/r.mapcalc/evaluate.c:94 ../raster/r.mapcalc/evaluate.c:234
-#: ../raster/r.mapcalc/map.c:422 ../raster/r.mapcalc/map3.c:351
+#: ../raster/r.mapcalc/map.c:424 ../raster/r.mapcalc/map3.c:353
 #, fuzzy, c-format
 msgid "Unknown type: %d"
 msgstr "未知的类型:%c"
@@ -32394,81 +34111,81 @@ msgstr "未知的类型"
 msgid "output map <%s> exists. To overwrite, use the --overwrite flag"
 msgstr ""
 
-#: ../raster/r.mapcalc/map.c:222 ../raster/r.mapcalc/map3.c:179
+#: ../raster/r.mapcalc/map.c:224 ../raster/r.mapcalc/map3.c:181
 #, fuzzy, c-format
 msgid "Unable to read color file for raster map <%s@%s>"
 msgstr "无法为色彩条读取颜色"
 
-#: ../raster/r.mapcalc/map.c:235 ../raster/r.mapcalc/map3.c:192
+#: ../raster/r.mapcalc/map.c:237 ../raster/r.mapcalc/map3.c:194
 #, fuzzy, c-format
 msgid "Unable to create btree for raster map <%s@%s>"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster/r.mapcalc/map.c:284 ../raster/r.mapcalc/map.c:491
-#: ../raster/r.mapcalc/map.c:532 ../raster/r.mapcalc/map.c:630
-#: ../raster/r.mapcalc/expression.c:353 ../raster/r.mapcalc/map3.c:237
-#: ../raster/r.mapcalc/map3.c:421 ../raster/r.mapcalc/map3.c:466
-#: ../raster/r.mapcalc/map3.c:563
+#: ../raster/r.mapcalc/map.c:286 ../raster/r.mapcalc/map.c:493
+#: ../raster/r.mapcalc/map.c:534 ../raster/r.mapcalc/map.c:632
+#: ../raster/r.mapcalc/expression.c:357 ../raster/r.mapcalc/map3.c:239
+#: ../raster/r.mapcalc/map3.c:423 ../raster/r.mapcalc/map3.c:468
+#: ../raster/r.mapcalc/map3.c:565
 #, fuzzy, c-format
 msgid "Invalid map modifier: '%c'"
 msgstr "面:%d  岛的数量:%d\n"
 
-#: ../raster/r.mapcalc/expression.c:202
+#: ../raster/r.mapcalc/expression.c:206
 #, c-format
 msgid "Undefined variable '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:217
+#: ../raster/r.mapcalc/expression.c:221
 #, fuzzy, c-format
 msgid "Invalid map <%s>"
 msgstr "无效的区域:%s"
 
-#: ../raster/r.mapcalc/expression.c:258
+#: ../raster/r.mapcalc/expression.c:262
 #, fuzzy, c-format
 msgid "Undefined function '%s'"
 msgstr "未知的类型"
 
-#: ../raster/r.mapcalc/expression.c:263
+#: ../raster/r.mapcalc/expression.c:267
 #, c-format
 msgid "Too few arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:267
+#: ../raster/r.mapcalc/expression.c:271
 #, c-format
 msgid "Too many arguments (%d) to function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:271
+#: ../raster/r.mapcalc/expression.c:275
 #, fuzzy, c-format
 msgid "Incorrect argument types to function %s()"
 msgstr "无法创建表:%s"
 
-#: ../raster/r.mapcalc/expression.c:274
+#: ../raster/r.mapcalc/expression.c:278
 #, c-format
 msgid "Internal error for function %s()"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:449
+#: ../raster/r.mapcalc/expression.c:453
 #, c-format
 msgid "Illegal number of arguments (%d) for operator '%s'"
 msgstr ""
 
-#: ../raster/r.mapcalc/expression.c:489
+#: ../raster/r.mapcalc/expression.c:493
 #, c-format
 msgid "Format_expression_prec: unknown type: %d"
 msgstr ""
 
-#: ../raster/r.mapcalc/map3.c:370
+#: ../raster/r.mapcalc/map3.c:372
 #, fuzzy, c-format
 msgid "Unable to close raster map <%s@%s>"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster/r.mapcalc/map3.c:619
+#: ../raster/r.mapcalc/map3.c:631
 #, fuzzy
 msgid "Unable to close output raster map"
 msgstr "无法关闭输入地图"
 
-#: ../raster/r.mapcalc/function.c:100
+#: ../raster/r.mapcalc/function.c:33
 #, c-format
 msgid "Known functions:"
 msgstr ""
@@ -32663,22 +34380,22 @@ msgstr "正向清扫完成"
 msgid "Reverse sweep complete"
 msgstr "反向清扫完成"
 
-#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:417
+#: ../raster/r.external/proj.c:18 ../raster/r.in.gdal/main.c:451
 #, fuzzy
 msgid ""
 "Unable to convert input raster map projection information to GRASS format "
 "for checking"
 msgstr "不能将输入地图的投影信息转换为 GRASS 格式来检查"
 
-#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:450
+#: ../raster/r.external/proj.c:47 ../raster/r.in.gdal/main.c:484
 msgid "Location PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:461
+#: ../raster/r.external/proj.c:58 ../raster/r.in.gdal/main.c:495
 msgid "Dataset PROJ_INFO is:\n"
 msgstr ""
 
-#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:519
+#: ../raster/r.external/proj.c:111 ../raster/r.in.gdal/main.c:553
 #, fuzzy
 msgid ""
 "Consider generating a new location from the input dataset using the "
@@ -32718,14 +34435,6 @@ msgstr "新的栅格文件的名称"
 msgid "Band to select (default is all bands)"
 msgstr "选择波段(默认选择所有波段)"
 
-#: ../raster/r.external/main.c:91 ../raster/r.in.gdal/main.c:131
-#: ../raster/r.in.gdal/main.c:140 ../imagery/i.landsat.toar/main.c:94
-#: ../imagery/i.landsat.toar/main.c:116 ../imagery/i.landsat.toar/main.c:126
-#: ../imagery/i.landsat.toar/main.c:135 ../imagery/i.landsat.toar/main.c:143
-#: ../imagery/i.landsat.toar/main.c:152
-msgid "Metadata"
-msgstr ""
-
 #: ../raster/r.external/main.c:113
 msgid "Flip horizontally"
 msgstr ""
@@ -32748,7 +34457,7 @@ msgstr ""
 msgid "%s= or %s= must be given"
 msgstr "必须指定'from_table'或'select'选项。"
 
-#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:54
+#: ../raster/r.external/main.c:166 ../display/d.mon/start.c:75
 #, fuzzy
 msgid "Unable to get current working directory"
 msgstr "无法更新当前区域"
@@ -32767,7 +34476,7 @@ msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 msgid "Reading band %d of %d..."
 msgstr "读取地图"
 
-#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:575
+#: ../raster/r.external/main.c:214 ../raster/r.in.gdal/main.c:609
 #, fuzzy, c-format
 msgid "Selected band (%d) does not exist"
 msgstr "栅格地图 [%s] 未发现"
@@ -32837,197 +34546,216 @@ msgstr "为 %s 创建支持文件"
 msgid "Link to raster map <%s> created."
 msgstr "dig_att文件不存在。"
 
-#: ../raster/r.in.gdal/main.c:90
+#: ../raster/r.in.gdal/main.c:93
 #, fuzzy
 msgid "Imports raster data into a GRASS raster map using GDAL library."
 msgstr "将二进制栅格文件导入到GRASS栅格图层中。"
 
-#: ../raster/r.in.gdal/main.c:96
+#: ../raster/r.in.gdal/main.c:99
 #, fuzzy
 msgid "Name of raster file to be imported"
 msgstr "将要导入的栅格文件"
 
-#: ../raster/r.in.gdal/main.c:105
+#: ../raster/r.in.gdal/main.c:108
 #, fuzzy
 msgid "Band(s) to select (default is all bands)"
 msgstr "选择波段(默认选择所有波段)"
 
-#: ../raster/r.in.gdal/main.c:120
+#: ../raster/r.in.gdal/main.c:123
 #, fuzzy
 msgid "Name of GCPs target location"
 msgstr "将要创建的新区域的名称"
 
-#: ../raster/r.in.gdal/main.c:122
+#: ../raster/r.in.gdal/main.c:125
 #, fuzzy
 msgid ""
 "Name of location to create or to read projection from for GCPs transformation"
 msgstr "区域的名称,从该位置读取用于GCP转换的投影信息"
 
-#: ../raster/r.in.gdal/main.c:138
+#: ../raster/r.in.gdal/main.c:141
 #, fuzzy
 msgid "Offset to be added to band numbers"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster/r.in.gdal/main.c:139
+#: ../raster/r.in.gdal/main.c:142
 msgid "If 0, no offset is added and the first band is 1"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:153
+#: ../raster/r.in.gdal/main.c:150
+msgid ""
+"Zero-padding of band number by filling with leading zeros up to given number"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:151
+msgid "If 0, length will be adjusted to 'offset' number without leading zeros"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:157
+#, fuzzy
+msgid "Name of the output file that contains the imported map names"
+msgstr "输入的高程栅格图的名称[米]"
+
+#: ../raster/r.in.gdal/main.c:171
 #, fuzzy
 msgid "File prefix for raster attribute tables"
 msgstr "无法创建属性表"
 
-#: ../raster/r.in.gdal/main.c:154
+#: ../raster/r.in.gdal/main.c:172
 msgid "The band number and \".csv\" will be appended to the file prefix"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:160
-msgid "Override projection (use location's projection)"
-msgstr "覆盖投影(使用区域的投影)"
-
-#: ../raster/r.in.gdal/main.c:189
+#: ../raster/r.in.gdal/main.c:209
 msgid "Keep band numbers instead of using band color names"
 msgstr "使用波段数,而不使用波段的颜色名称"
 
-#: ../raster/r.in.gdal/main.c:194
+#: ../raster/r.in.gdal/main.c:214
 msgid ""
 "Create the location specified by the \"location\" parameter and exit. Do not "
 "import the raster file."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:199
+#: ../raster/r.in.gdal/main.c:219
 #, fuzzy
 msgid "Print number of bands and exit"
 msgstr "打印表并退出"
 
-#: ../raster/r.in.gdal/main.c:225
+#: ../raster/r.in.gdal/main.c:247
 msgid "You have to specify a target location different from output location"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:229
+#: ../raster/r.in.gdal/main.c:251
 msgid "You need to specify valid location name."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:233
+#: ../raster/r.in.gdal/main.c:255
 msgid "The '-l' flag only works in Lat/Lon locations"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:243
+#: ../raster/r.in.gdal/main.c:258
+msgid "The number of digits for band numbering must be equal or greater than 0"
+msgstr ""
+
+#: ../raster/r.in.gdal/main.c:277
 #, c-format
 msgid "Using memory cache size: %.1f MiB"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:285
+#: ../raster/r.in.gdal/main.c:319
 #, fuzzy, c-format
 msgid "Unable to open datasource <%s>"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster/r.in.gdal/main.c:296
+#: ../raster/r.in.gdal/main.c:330
 #, c-format
 msgid ""
 "Input seems to be NOAA/AVHRR data which needs to be georeferenced with thin "
 "plate spline transformation (%s or %s)."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:335
+#: ../raster/r.in.gdal/main.c:369
 msgid ""
 "Input raster map is flipped or rotated - cannot import. You may use "
 "'gdalwarp' to transform the map to North-up."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:376
+#: ../raster/r.in.gdal/main.c:410
 msgid ""
 "Map bounds have been constrained to geographic coordinates. You will almost "
 "certainly want to check map bounds and resolution with r.info and reset them "
 "with r.region before going any further."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:543
+#: ../raster/r.in.gdal/main.c:577
 #, fuzzy, c-format
 msgid "Proceeding with import of %d raster bands..."
 msgstr "读取栅格文件 [%s] 时发生错误。"
 
-#: ../raster/r.in.gdal/main.c:616
+#: ../raster/r.in.gdal/main.c:634
+#, fuzzy
+msgid "Unable to open the map names output text file"
+msgstr "无法创建文件 [%s]"
+
+#: ../raster/r.in.gdal/main.c:665
 #, fuzzy, c-format
 msgid "Unable to get raster band number %d"
 msgstr "无法创建栅格地图 %s"
 
-#: ../raster/r.in.gdal/main.c:687
+#: ../raster/r.in.gdal/main.c:742
 #, fuzzy, c-format
 msgid "Copying %d GCPS in points file for <%s>"
 msgstr "为 <%s> 读取类别文件时发生错误。"
 
-#: ../raster/r.in.gdal/main.c:695
+#: ../raster/r.in.gdal/main.c:750
 msgid "GCPs have the following OpenGIS WKT Coordinate System:"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:718
+#: ../raster/r.in.gdal/main.c:773
 #, fuzzy
 msgid "Re-projecting GCPs table:"
 msgstr "创建一些临时文件 ..."
 
-#: ../raster/r.in.gdal/main.c:719
+#: ../raster/r.in.gdal/main.c:774
 #, fuzzy, c-format
 msgid "* Input projection for GCP table: %s"
 msgstr "输出的流向栅格图"
 
-#: ../raster/r.in.gdal/main.c:721
+#: ../raster/r.in.gdal/main.c:776
 #, fuzzy, c-format
 msgid "* Output projection for GCP table: %s"
 msgstr "输出的流向栅格图"
 
-#: ../raster/r.in.gdal/main.c:742
+#: ../raster/r.in.gdal/main.c:797
 #, fuzzy, c-format
 msgid "Error in pj_do_proj (can't re-projection GCP %i)"
 msgstr "pj_do_proj (输入坐标对的投影) 有错误"
 
-#: ../raster/r.in.gdal/main.c:797
+#: ../raster/r.in.gdal/main.c:852
 #, c-format
 msgid ""
 "The target for the output group <%s> has been set to location <%s>, mapset "
 "<PERMANENT>."
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:868
+#: ../raster/r.in.gdal/main.c:923
 #, fuzzy
 msgid "Unable to translate projection key values of input GCPs"
 msgstr "无法获得当前区域的投影参数"
 
-#: ../raster/r.in.gdal/main.c:884
+#: ../raster/r.in.gdal/main.c:939
 #, fuzzy
 msgid "Unable to get projection info of target location"
 msgstr "无法获得当前区域的投影信息"
 
-#: ../raster/r.in.gdal/main.c:886
+#: ../raster/r.in.gdal/main.c:941
 #, fuzzy
 msgid "Unable to get projection units of target location"
 msgstr "无法获得当前区域的投影单位"
 
-#: ../raster/r.in.gdal/main.c:888
+#: ../raster/r.in.gdal/main.c:943
 #, fuzzy
 msgid "Unable to get projection key values of target location"
 msgstr "无法获得当前区域的投影参数"
 
-#: ../raster/r.in.gdal/main.c:927
+#: ../raster/r.in.gdal/main.c:982
 #, fuzzy, c-format
 msgid "Importing raster map <%s>..."
 msgstr "写入栅格地图 %i\n"
 
-#: ../raster/r.in.gdal/main.c:1322 ../raster/r.in.gdal/main.c:1379
+#: ../raster/r.in.gdal/main.c:1377 ../raster/r.in.gdal/main.c:1434
 msgid "Inconsistent color rules in RAT"
 msgstr ""
 
-#: ../raster/r.in.gdal/main.c:1436
+#: ../raster/r.in.gdal/main.c:1491
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (8bit, full range)"
 msgstr "为<%s在%s中>创建颜色表"
 
-#: ../raster/r.in.gdal/main.c:1450
+#: ../raster/r.in.gdal/main.c:1505
 #, fuzzy, c-format
 msgid "Setting grey color table for <%s> (16bit, image range)"
 msgstr "为<%s在%s中>创建颜色表"
 
-#: ../raster/r.in.gdal/main.c:1552
+#: ../raster/r.in.gdal/main.c:1607
 #, fuzzy, c-format
 msgid "Unable to open file <%s>: %s."
 msgstr "无法打开输出文件 <%s>"
@@ -33159,7 +34887,7 @@ msgstr "高程图"
 msgid "Writing topographic index map..."
 msgstr "地形索引ln(a/tanB)图"
 
-#: ../raster/r.topidx/topidx.c:277
+#: ../raster/r.topidx/topidx.c:272
 #, fuzzy, c-format
 msgid "Number of sinks or boundaries: %d"
 msgstr "输入点的数目:%d"
@@ -33264,12 +34992,12 @@ msgstr ""
 msgid "Volume is correct only if lake depth (terrain raster map) is in meters"
 msgstr ""
 
-#: ../raster/r.patch/main.c:59
+#: ../raster/r.patch/main.c:62
 #, fuzzy
 msgid "patching"
 msgstr "无法创建索引"
 
-#: ../raster/r.patch/main.c:61
+#: ../raster/r.patch/main.c:64
 msgid ""
 "Creates a composite raster map layer by using known category values from one "
 "(or more) map layer(s) to fill in areas of \"no data\" in another map layer."
@@ -33277,24 +35005,24 @@ msgstr ""
 "使用一个(或多个)图层已知的类别值来填充另一个图层的无数据区域,生成一幅合成"
 "栅格图层。"
 
-#: ../raster/r.patch/main.c:68
+#: ../raster/r.patch/main.c:71
 msgid "Name of raster maps to be patched together"
 msgstr "补丁栅格地图的名称"
 
-#: ../raster/r.patch/main.c:71
+#: ../raster/r.patch/main.c:74
 msgid "Name for resultant raster map"
 msgstr "结果栅格图的名称"
 
-#: ../raster/r.patch/main.c:78
+#: ../raster/r.patch/main.c:81
 msgid "Use zero (0) for transparency instead of NULL"
 msgstr "透明使用零值而不是空值"
 
-#: ../raster/r.patch/main.c:92
+#: ../raster/r.patch/main.c:95
 #, fuzzy
 msgid "The minimum number of input raster maps is two"
 msgstr "指定输入地图的数目最小值是 2"
 
-#: ../raster/r.patch/main.c:167
+#: ../raster/r.patch/main.c:170
 #, fuzzy, c-format
 msgid "Creating support files for raster map <%s>..."
 msgstr "为 %s 创建支持文件"
@@ -33364,39 +35092,6 @@ msgstr "栅格高程文件的名称"
 msgid "Converts a raster map into a vector map."
 msgstr "将栅格图转化为矢量图层。"
 
-#: ../raster/r.to.vect/main.c:88
-#, fuzzy
-msgid "Name of attribute column to store value"
-msgstr "用来创建标签的属性字段的名称"
-
-#: ../raster/r.to.vect/main.c:89
-msgid "Name must be SQL compliant"
-msgstr ""
-
-#: ../raster/r.to.vect/main.c:94
-#, fuzzy
-msgid "Smooth corners of area features"
-msgstr "平滑转角"
-
-#: ../raster/r.to.vect/main.c:99
-msgid "Use raster values as categories instead of unique sequence (CELL only)"
-msgstr "使用栅格值作为类别,而不使用独立值(只对栅格单元)"
-
-#: ../raster/r.to.vect/main.c:104
-#, fuzzy
-msgid "Write raster values as z coordinate"
-msgstr "z 坐标的偏移值"
-
-#: ../raster/r.to.vect/main.c:105
-#, fuzzy
-msgid "Table is not created. Currently supported only for points."
-msgstr "栅格值作为 z 坐标写入。表没有创建。目前只支持点"
-
-#: ../raster/r.to.vect/main.c:111
-#, fuzzy
-msgid "Do not build vector topology"
-msgstr "点模式下不建立拓扑"
-
 #: ../raster/r.to.vect/main.c:112
 msgid "Recommended for massive point conversion"
 msgstr ""
@@ -33917,11 +35612,6 @@ msgstr "点的缓存的大小"
 msgid "Advanced"
 msgstr ""
 
-#: ../raster/r.what/main.c:141
-#, fuzzy
-msgid "Output header row"
-msgstr "输出的栅格图"
-
 #: ../raster/r.what/main.c:146
 #, fuzzy
 msgid "Show the category labels of the grid cell(s)"
@@ -34213,7 +35903,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:60
+#: ../raster/r.random.surface/main.c:77 ../raster/r.random.cells/main.c:62
 #, fuzzy
 msgid "Maximum distance of spatial correlation (value >= 0.0)"
 msgstr "点到网络的最小距离"
@@ -34240,7 +35930,7 @@ msgstr "插值点的数量"
 msgid "Uniformly distributed cell values"
 msgstr ""
 
-#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:89
+#: ../raster/r.random.surface/main.c:128 ../raster/r.random.cells/init.c:96
 #, fuzzy, c-format
 msgid "Generating raster map <%s>..."
 msgstr "读取栅格文件 [%s] 时发生错误。"
@@ -34577,7 +36267,7 @@ msgstr "无法关闭新的 g3d 地图"
 #: ../raster/r.li/r.li.richness/richness.c:44
 #: ../raster/r.li/r.li.padcv/padcv.c:54 ../raster/r.li/r.li.shape/main.c:50
 #: ../raster/r.li/r.li.mps/mps.c:53 ../raster/r.li/r.li.patchnum/main.c:51
-#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:44
+#: ../raster/r.li/r.li.shannon/shannon.c:47 ../raster/r.li/r.li.mpa/mpa.c:45
 #: ../raster/r.li/r.li.pielou/pielou.c:47
 #, fuzzy
 msgid "landscape structure analysis"
@@ -34603,7 +36293,7 @@ msgstr "驱动名称"
 #: ../raster/r.li/r.li.richness/richness.c:53
 #: ../raster/r.li/r.li.padcv/padcv.c:62 ../raster/r.li/r.li.shape/main.c:59
 #: ../raster/r.li/r.li.mps/mps.c:62 ../raster/r.li/r.li.patchnum/main.c:59
-#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:52
+#: ../raster/r.li/r.li.shannon/shannon.c:56 ../raster/r.li/r.li.mpa/mpa.c:53
 #: ../raster/r.li/r.li.pielou/pielou.c:56
 #, fuzzy
 msgid "Configuration file"
@@ -34625,7 +36315,7 @@ msgstr "计算栅格地图中非空像元的一元统计值"
 #: ../raster/r.li/r.li.edgedensity/edgedensity.c:50
 #: ../raster/r.li/r.li.cwed/cwed.c:56 ../raster/r.li/r.li.padcv/padcv.c:55
 #: ../raster/r.li/r.li.shape/main.c:51 ../raster/r.li/r.li.mps/mps.c:54
-#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:45
+#: ../raster/r.li/r.li.patchnum/main.c:52 ../raster/r.li/r.li.mpa/mpa.c:46
 #, fuzzy
 msgid "patch index"
 msgstr "无法创建索引"
@@ -34781,7 +36471,7 @@ msgstr "无法创建树"
 msgid "Calculates Shannon's diversity index on a raster map"
 msgstr "无法关闭新的 g3d 地图"
 
-#: ../raster/r.li/r.li.mpa/mpa.c:42
+#: ../raster/r.li/r.li.mpa/mpa.c:43
 #, fuzzy
 msgid "Calculates mean pixel attribute index on a raster map"
 msgstr "无法关闭新的 g3d 地图"
@@ -34953,11 +36643,11 @@ msgstr ""
 msgid "Could not read maximum distance. Aborting."
 msgstr "无法读取范围文件"
 
-#: ../raster/r.horizon/main.c:478
+#: ../raster/r.horizon/main.c:484
 msgid "The distance value must be 0.5-1.5. Aborting."
 msgstr ""
 
-#: ../raster/r.horizon/main.c:1168
+#: ../raster/r.horizon/main.c:1174
 #, fuzzy, c-format
 msgid "Calculating map %01d of %01d (angle %.2f, raster map <%s>)"
 msgstr "无法写入 <%s>"
@@ -35176,21 +36866,61 @@ msgstr ""
 msgid "Mode 2: integrated daily irradiation for a given day of the year"
 msgstr ""
 
-#: ../raster/r.sun/main.c:670
+#: ../raster/r.sun/main.c:647
+#, fuzzy, c-format
+msgid "Using Linke constant: %lf"
+msgstr "使用地图中心点坐标\n"
+
+#: ../raster/r.sun/main.c:649
+#, fuzzy, c-format
+msgid "Using Linke map <%s>"
+msgstr "写入栅格地图 %i\n"
+
+#: ../raster/r.sun/main.c:654
+#, c-format
+msgid "Using albedo constant: %lf"
+msgstr ""
+
+#: ../raster/r.sun/main.c:656
+#, fuzzy, c-format
+msgid "Using albedo map <%s>"
+msgstr "无效的区域:%s"
+
+#: ../raster/r.sun/main.c:661
+#, fuzzy, c-format
+msgid "Using slope constant: %lf"
+msgstr "使用地图中心点坐标\n"
+
+#: ../raster/r.sun/main.c:664
+#, fuzzy, c-format
+msgid "Using slope map <%s>"
+msgstr "写入栅格地图 %i\n"
+
+#: ../raster/r.sun/main.c:669
+#, fuzzy, c-format
+msgid "Using aspect constant: %lf"
+msgstr "使用地图中心点坐标\n"
+
+#: ../raster/r.sun/main.c:672
+#, fuzzy, c-format
+msgid "Using aspect map <%s>"
+msgstr "写入栅格地图 %i\n"
+
+#: ../raster/r.sun/main.c:687
 msgid "If you use -s and no horizon rasters, numpartitions must be =1"
 msgstr ""
 
-#: ../raster/r.sun/main.c:683
+#: ../raster/r.sun/main.c:700
 msgid ""
 "If you want to save memory and to use shadows, you must use pre-calculated "
 "horizons."
 msgstr ""
 
-#: ../raster/r.sun/main.c:750
+#: ../raster/r.sun/main.c:767
 msgid "latin and longin raster maps have no effect when in a Lat/Lon location"
 msgstr ""
 
-#: ../raster/r.sun/main.c:755
+#: ../raster/r.sun/main.c:772
 msgid "Both latin and longin raster maps must be given, or neither"
 msgstr ""
 
@@ -35216,76 +36946,85 @@ msgstr "不压缩地图"
 msgid "Print compression information and data type of input map(s)"
 msgstr "以shell脚本的样式输出统计值"
 
-#: ../raster/r.compress/main.c:123
+#: ../raster/r.compress/main.c:125 ../raster/r.compress/main.c:305
+#, fuzzy, c-format
+msgid "Raster map <%s> is not in the current mapset"
+msgstr "未发现矢量地图<%s>"
+
+#: ../raster/r.compress/main.c:131
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't uncompress"
 msgstr "[%s] 是 [%s (在 %s 中)] 的一个重分类 - 无法编辑文件头!"
 
-#: ../raster/r.compress/main.c:125
+#: ../raster/r.compress/main.c:133
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s> - can't compress"
 msgstr "[%s] 是 [%s (在 %s 中)] 的一个重分类 - 无法编辑文件头!"
 
-#: ../raster/r.compress/main.c:130
+#: ../raster/r.compress/main.c:138
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map - can't (un)compress"
 msgstr "[%s] 是 [%s (在 %s 中)] 的一个重分类 - 无法编辑文件头!"
 
-#: ../raster/r.compress/main.c:172
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:212
+msgid "DONE: uncompressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:173
-#, c-format
-msgid "DONE: compressed file is %lu bytes smaller"
+#: ../raster/r.compress/main.c:213
+msgid "DONE: compressed file is %lu %s (%.2f%) smaller"
 msgstr ""
 
-#: ../raster/r.compress/main.c:177
-#, c-format
-msgid "DONE: uncompressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:217
+msgid "DONE: uncompressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:178
-#, c-format
-msgid "DONE: compressed file is %lu bytes bigger"
+#: ../raster/r.compress/main.c:218
+msgid "DONE: compressed file is %lu %s (%.2f%) larger"
 msgstr ""
 
-#: ../raster/r.compress/main.c:196
+#: ../raster/r.compress/main.c:221
+#, fuzzy
+msgid "same size"
+msgstr "面\n"
+
+#: ../raster/r.compress/main.c:237
 #, fuzzy, c-format
 msgid "<%s> already uncompressed"
 msgstr "[%s] 将要被压缩。是吗?"
 
-#: ../raster/r.compress/main.c:200
+#: ../raster/r.compress/main.c:240
 #, fuzzy, c-format
-msgid "<%s> already compressed"
-msgstr "[%s] 将要被压缩。是吗?"
+msgid "Uncompressing <%s>"
+msgstr "比特模式的值"
 
-#: ../raster/r.compress/main.c:204
-#, c-format
-msgid ""
-"\n"
-"%sCOMPRESS <%s>"
-msgstr ""
+#: ../raster/r.compress/main.c:248
+#, fuzzy, c-format
+msgid "Re-compressing <%s>"
+msgstr "比特模式的值"
+
+#: ../raster/r.compress/main.c:251
+#, fuzzy, c-format
+msgid "Compressing <%s>"
+msgstr "比特模式的值"
 
-#: ../raster/r.compress/main.c:261 ../raster/r.compress/main.c:276
+#: ../raster/r.compress/main.c:309
 #, fuzzy, c-format
 msgid "<%s> is a GDAL-linked map"
 msgstr "[%s] 是 [%s (在 %s 中)] 的一个重分类 - 无法编辑文件头!"
 
-#: ../raster/r.compress/main.c:270
+#: ../raster/r.compress/main.c:313
 #, fuzzy, c-format
 msgid "<%s> is a reclass file of map <%s> in mapset <%s>"
 msgstr "[%s] 是 [%s (在 %s 中)] 的一个重分类 - 无法编辑文件头!"
 
-#: ../raster/r.compress/main.c:286
+#: ../raster/r.compress/main.c:332
 #, c-format
-msgid "<%s> is uncompressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is uncompressed (method %i: %s). Data type: %s"
 msgstr ""
 
-#: ../raster/r.compress/main.c:293
+#: ../raster/r.compress/main.c:339
 #, c-format
-msgid "<%s> is compressed (level %i: %s). Data type: <%s>"
+msgid "<%s> is compressed (method %i: %s). Data type: %s"
 msgstr ""
 
 #: ../raster/r.statistics/main.c:59
@@ -35319,52 +37058,52 @@ msgstr ""
 msgid "Filter <%s> not found"
 msgstr "未找到栅格图<%s>"
 
-#: ../raster/r.resamp.filter/main.c:386
+#: ../raster/r.resamp.filter/main.c:391
 #, fuzzy
 msgid "kernel filter"
 msgstr "要素类型"
 
-#: ../raster/r.resamp.filter/main.c:388
+#: ../raster/r.resamp.filter/main.c:393
 #, fuzzy
 msgid "Resamples raster map layers using an analytic kernel."
 msgstr "生成一个栅格图层,显示一个流域的子流域"
 
-#: ../raster/r.resamp.filter/main.c:399
+#: ../raster/r.resamp.filter/main.c:404
 msgid "Filter kernel(s)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:407
+#: ../raster/r.resamp.filter/main.c:412
 msgid "Filter radius"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:414
+#: ../raster/r.resamp.filter/main.c:419
 msgid "Filter radius (horizontal)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:421
+#: ../raster/r.resamp.filter/main.c:426
 msgid "Filter radius (vertical)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:437
+#: ../raster/r.resamp.filter/main.c:442
 #, fuzzy, c-format
 msgid "Either %s= or %s=/%s= required"
 msgstr "必须指定'from_table'或'select'选项。"
 
-#: ../raster/r.resamp.filter/main.c:440
+#: ../raster/r.resamp.filter/main.c:445
 #, fuzzy, c-format
 msgid "Both %s= and %s= required"
 msgstr "位置名称"
 
-#: ../raster/r.resamp.filter/main.c:463
+#: ../raster/r.resamp.filter/main.c:468
 msgid "Differing number of values for filter= and [xy_]radius="
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:466
+#: ../raster/r.resamp.filter/main.c:471
 #, c-format
 msgid "Too many filters (max: %d)"
 msgstr ""
 
-#: ../raster/r.resamp.filter/main.c:484
+#: ../raster/r.resamp.filter/main.c:489
 #, fuzzy
 msgid "At least one filter must be finite"
 msgstr "必须指定两个图层"
@@ -35804,21 +37543,26 @@ msgstr[1] "通过DEM计算阴影..."
 msgid "Calculating %s"
 msgstr "通过DEM计算阴影..."
 
-#: ../raster/r.random.cells/init.c:70
+#: ../raster/r.random.cells/init.c:77
 #, fuzzy
 msgid "Distance must be >= 0.0"
 msgstr "必须指定两个图层"
 
-#: ../raster/r.random.cells/main.c:48
+#: ../raster/r.random.cells/main.c:50
 #, fuzzy
 msgid "autocorrelation"
 msgstr "相关性"
 
-#: ../raster/r.random.cells/main.c:50
+#: ../raster/r.random.cells/main.c:52
 msgid "Generates random cell values with spatial dependence."
 msgstr "根据空间依赖性产生随机的像元值"
 
-#: ../raster/r.random.cells/main.c:67
+#: ../raster/r.random.cells/main.c:70
+#, fuzzy
+msgid "Maximum number of cells to be created"
+msgstr "列数"
+
+#: ../raster/r.random.cells/main.c:77
 msgid "Random seed (SEED_MIN >= value >= SEED_MAX) (default [random])"
 msgstr ""
 
@@ -35955,7 +37699,7 @@ msgstr ""
 msgid "Grid line width"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:93
+#: ../display/d.grid/main.c:92 ../display/d.rast.num/main.c:94
 #, fuzzy
 msgid "Grid color"
 msgstr "边框颜色"
@@ -36079,15 +37823,10 @@ msgid "Starting and ending coordinates"
 msgstr "使用地图中心点坐标\n"
 
 #: ../display/d.rhumbline/main.c:57 ../display/d.geodesic/main.c:62
-#: ../display/d.northarrow/main.c:65
+#: ../display/d.northarrow/main.c:94
 msgid "Line color"
 msgstr ""
 
-#: ../display/d.rhumbline/main.c:62
-#, fuzzy
-msgid "Text color or \"none\""
-msgstr "文本颜色"
-
 #: ../display/d.rhumbline/main.c:75 ../display/d.geodesic/main.c:78
 #, fuzzy, c-format
 msgid "Location is not %s"
@@ -36117,8 +37856,8 @@ msgid "Name of monitor to start"
 msgstr "将要创建的新区域的名称"
 
 #: ../display/d.mon/main.c:48 ../display/d.mon/main.c:55
-#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:118
-#: ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:62 ../display/d.mon/main.c:123
+#: ../display/d.mon/main.c:128
 msgid "Manage"
 msgstr ""
 
@@ -36180,47 +37919,65 @@ msgstr "打印当前的连接参数并退出"
 msgid "Print commands for currently selected monitor and exit"
 msgstr "列出输入区域内的栅格文件并退出"
 
-#: ../display/d.mon/main.c:117
+#: ../display/d.mon/main.c:118
+#, fuzzy
+msgid "Print path to support files of currently selected monitor and exit"
+msgstr "打印当前的连接参数并退出"
+
+#: ../display/d.mon/main.c:122
 msgid "Do not automatically select when starting"
 msgstr ""
 
-#: ../display/d.mon/main.c:122
+#: ../display/d.mon/main.c:127
 #, fuzzy
 msgid "Release and stop currently selected monitor and exit"
 msgstr "列出输入区域内的栅格文件并退出"
 
-#: ../display/d.mon/main.c:127
+#: ../display/d.mon/main.c:132
 #, fuzzy
 msgid "Disable true colors"
 msgstr "无法为色彩条读取颜色"
 
-#: ../display/d.mon/main.c:132
+#: ../display/d.mon/main.c:137
 msgid "Open output file in update mode"
 msgstr ""
 
-#: ../display/d.mon/main.c:133
+#: ../display/d.mon/main.c:138
 msgid "Requires --overwrite flag"
 msgstr ""
 
-#: ../display/d.mon/main.c:145
+#: ../display/d.mon/main.c:143
+msgid "Launch light-weight wx monitor without toolbars and statusbar"
+msgstr ""
+
+#: ../display/d.mon/main.c:144
+msgid "Requires 'start=wx0-7'"
+msgstr ""
+
+#: ../display/d.mon/main.c:151
+#, c-format
+msgid "Flag -%c has effect only for wx monitors (%s=wx0-7)"
+msgstr ""
+
+#: ../display/d.mon/main.c:161
 msgid "Currently selected monitor:"
 msgstr ""
 
-#: ../display/d.mon/main.c:149
+#: ../display/d.mon/main.c:165
 #, c-format
 msgid "List of commands for monitor <%s>:"
 msgstr ""
 
-#: ../display/d.mon/main.c:154
+#: ../display/d.mon/main.c:173
 #, c-format
 msgid "Monitor <%s> released"
 msgstr ""
 
-#: ../display/d.mon/main.c:159
+#: ../display/d.mon/main.c:178
 msgid "No monitor selected"
 msgstr ""
 
-#: ../display/d.mon/main.c:178
+#: ../display/d.mon/main.c:197
 #, fuzzy, c-format
 msgid "Either <%s>, <%s> or <%s> must be given"
 msgstr "必须指定'from_table'或'select'选项。"
@@ -36230,65 +37987,75 @@ msgstr "必须指定'from_table'或'select'选项。"
 msgid "Monitor <%s> is not running"
 msgstr "未找到栅格图<%s>"
 
-#: ../display/d.mon/stop.c:37
-#, fuzzy
-msgid "Env file not found"
-msgstr "未找到3D视图文件<%s>"
+#: ../display/d.mon/stop.c:41
+#, fuzzy, c-format
+msgid "Unable to delete file <%s>"
+msgstr "无法创建文件 [%s]"
 
-#: ../display/d.mon/stop.c:55
-#, fuzzy
-msgid "PID file not found"
-msgstr "像元文件未发现\n"
+#: ../display/d.mon/stop.c:46
+#, fuzzy, c-format
+msgid "Unable to delete directory <%s>"
+msgstr "无法创建栅格地图 %s"
+
+#: ../display/d.mon/stop.c:75
+#, fuzzy, c-format
+msgid "Unable to read file <%s>"
+msgstr "无法创建文件 [%s]"
 
-#: ../display/d.mon/start.c:32
+#: ../display/d.mon/start.c:45 ../display/d.mon/start.c:63
 #, fuzzy, c-format
-msgid "File '%s' already exists and will be overwritten"
+msgid "File <%s> already exists and will be overwritten"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../display/d.mon/start.c:61
+#: ../display/d.mon/start.c:65
+#, fuzzy, c-format
+msgid "Unable to delete <%s>"
+msgstr "无法描述表 %s"
+
+#: ../display/d.mon/start.c:82
 #, fuzzy, c-format
 msgid "Output file: %s"
 msgstr "输出图"
 
-#: ../display/d.mon/start.c:119
+#: ../display/d.mon/start.c:137
 #, fuzzy, c-format
 msgid "Monitor <%s> already running"
 msgstr "dig_att文件不存在。"
 
-#: ../display/d.mon/start.c:132
+#: ../display/d.mon/start.c:140
 #, fuzzy, c-format
-msgid "Unable to create file '%s'"
-msgstr "无法创建文件 [%s]"
+msgid "Starting monitor <%s>..."
+msgstr "写入 %s ... "
 
-#: ../display/d.mon/start.c:163
-#, c-format
-msgid "Starting monitor <%s> with env file '%s'"
-msgstr ""
+#: ../display/d.mon/start.c:156
+#, fuzzy
+msgid "Unable to copy render command file"
+msgstr "无法打开输出文件 <%s>"
 
 #: ../display/d.mon/select.c:14
 #, fuzzy, c-format
 msgid "Monitor <%s> is already selected"
 msgstr "dig_att文件不存在。"
 
-#: ../display/d.mon/list.c:47
+#: ../display/d.mon/list.c:80
 #, fuzzy
 msgid "List of running monitors:"
 msgstr "地图北向格网坐标"
 
-#: ../display/d.mon/list.c:49
+#: ../display/d.mon/list.c:82
 msgid "No monitors running"
 msgstr ""
 
-#: ../display/d.mon/list.c:84
-#, fuzzy
-msgid "Command file not found"
-msgstr "字段 <%s> 未找到"
-
-#: ../display/d.mon/list.c:88
-#, fuzzy
-msgid "Unable to read command file"
+#: ../display/d.mon/list.c:116
+#, fuzzy, c-format
+msgid "Unable to open file '%s'"
 msgstr "无法打开输出文件 <%s>"
 
+#: ../display/d.mon/list.c:145
+#, fuzzy, c-format
+msgid "No support files found for monitor <%s>"
+msgstr "无法找到输入的矢量地图 <%s>"
+
 #: ../display/d.erase/main.c:33
 msgid ""
 "Erases the contents of the active graphics display frame with user defined "
@@ -36398,28 +38165,47 @@ msgstr "%s - 非法的名称"
 msgid "[%s]: illegal value specified"
 msgstr "%s - 非法的名称"
 
-#: ../display/d.rast.num/main.c:77 ../display/d.rast.arrow/main.c:96
+#: ../display/d.rast.num/main.c:78 ../display/d.rast.arrow/main.c:98
 #, fuzzy
 msgid "map annotations"
 msgstr "打印矢量的属性"
 
-#: ../display/d.rast.num/main.c:80
+#: ../display/d.rast.num/main.c:81
 #, fuzzy
 msgid ""
 "Overlays cell category values on a raster map displayed in the active "
 "graphics frame."
 msgstr "选择字体,该字体用于图形监视器上文本的显示。"
 
-#: ../display/d.rast.num/main.c:107 ../display/d.rast.arrow/main.c:162
+#: ../display/d.rast.num/main.c:108 ../display/d.rast.arrow/main.c:164
 #, fuzzy
 msgid "Align grids with raster cells"
 msgstr "起始点栅格文件"
 
-#: ../display/d.rast.num/main.c:111
+#: ../display/d.rast.num/main.c:112
 msgid "Get text color from cell color value"
 msgstr ""
 
-#: ../display/d.rast.num/main.c:177
+#: ../display/d.rast.num/main.c:120 ../display/d.rast.num/main.c:127
+#: ../display/d.rast.num/main.c:135 ../display/d.legend/main.c:162
+#: ../display/d.legend/main.c:169 ../display/d.legend/main.c:178
+#: ../display/d.legend/main.c:185 ../display/d.legend/main.c:193
+#, fuzzy
+msgid "Font settings"
+msgstr "无法获取栅格行\n"
+
+#: ../display/d.rast.num/main.c:125 ../display/d.text/main.c:223
+#: ../display/d.legend/main.c:183
+#, fuzzy
+msgid "Path to font file"
+msgstr "结果矢量文件的名称"
+
+#: ../display/d.rast.num/main.c:134 ../display/d.text/main.c:231
+#: ../display/d.legend/main.c:192
+msgid "Text encoding (only applicable to TrueType fonts)"
+msgstr ""
+
+#: ../display/d.rast.num/main.c:200
 #, fuzzy, c-format
 msgid "%d col"
 msgid_plural "%d cols"
@@ -36427,7 +38213,7 @@ msgstr[0] "边框颜色"
 msgstr[1] "边框颜色"
 
 #. GTC %s will be replaced by strings "X rows" and "Y cols"
-#: ../display/d.rast.num/main.c:179
+#: ../display/d.rast.num/main.c:202
 #, c-format
 msgid ""
 "Current region size: %s X %s\n"
@@ -36435,7 +38221,7 @@ msgid ""
 "graphics window may be too small for cell category number to be visible."
 msgstr ""
 
-#: ../display/d.rast.num/main.c:189
+#: ../display/d.rast.num/main.c:212
 msgid "Aborting (region larger then 200 rows X 200 cols is not allowed)"
 msgstr ""
 
@@ -36508,10 +38294,6 @@ msgstr "填充色"
 msgid "Colorize features according color definition column"
 msgstr "根据颜色字段设置要素颜色"
 
-#: ../display/d.vect/main.c:129
-msgid "Color definition in R:G:B form"
-msgstr "用R:G:B形式定义颜色"
-
 #: ../display/d.vect/main.c:133
 msgid "Colorize point or area features according to z-coordinate"
 msgstr "根据z坐标定义点或面积要素颜色"
@@ -36521,7 +38303,7 @@ msgstr "根据z坐标定义点或面积要素颜色"
 msgid "Lines"
 msgstr "线条"
 
-#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:78
+#: ../display/d.vect/main.c:142 ../display/d.northarrow/main.c:107
 msgid "Line width"
 msgstr "线宽"
 
@@ -37059,37 +38841,37 @@ msgstr ""
 msgid "Invalid coordinates <%s,%s>"
 msgstr "地图北向格网坐标"
 
-#: ../display/d.info/main.c:35
+#: ../display/d.info/main.c:38
 #, fuzzy
 msgid "Displays information about the active display monitor."
 msgstr "输出用户指定的栅格图的基本信息"
 
-#: ../display/d.info/main.c:37
+#: ../display/d.info/main.c:40
 msgid "Display monitors are maintained by d.mon."
 msgstr ""
 
-#: ../display/d.info/main.c:42
+#: ../display/d.info/main.c:45
 msgid "Display screen rectangle (left, right, top, bottom)"
 msgstr ""
 
-#: ../display/d.info/main.c:46
+#: ../display/d.info/main.c:49
 msgid "Display screen dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:50
+#: ../display/d.info/main.c:53
 msgid "Display active frame rectangle"
 msgstr ""
 
-#: ../display/d.info/main.c:54
+#: ../display/d.info/main.c:57
 msgid "Display frame dimensions (width, height)"
 msgstr ""
 
-#: ../display/d.info/main.c:58
+#: ../display/d.info/main.c:61
 #, fuzzy
 msgid "Display screen rectangle of current region"
 msgstr "使用当前的区域"
 
-#: ../display/d.info/main.c:63
+#: ../display/d.info/main.c:66
 msgid "Display geographic coordinates and resolution of entire frame"
 msgstr ""
 
@@ -37344,15 +39126,6 @@ msgstr ""
 msgid "Line spacing"
 msgstr ""
 
-#: ../display/d.text/main.c:223 ../display/d.legend/main.c:183
-#, fuzzy
-msgid "Path to font file"
-msgstr "结果矢量文件的名称"
-
-#: ../display/d.text/main.c:231 ../display/d.legend/main.c:192
-msgid "Text encoding (only applicable to TrueType fonts)"
-msgstr ""
-
 #: ../display/d.text/main.c:235
 msgid "Input file"
 msgstr "输入文件"
@@ -37418,7 +39191,7 @@ msgstr "要素类型"
 #: ../display/d.vect.chart/main.c:87 ../display/d.vect.chart/main.c:97
 #: ../display/d.vect.chart/main.c:105 ../display/d.vect.chart/main.c:112
 #: ../display/d.vect.chart/main.c:117 ../display/d.vect.chart/main.c:123
-#: ../display/d.vect.chart/main.c:129
+#: ../display/d.vect.chart/main.c:129 ../display/d.vect.chart/main.c:148
 #, fuzzy
 msgid "Chart properties"
 msgstr "要素类型"
@@ -37457,12 +39230,22 @@ msgstr ""
 msgid "Maximum value used for bar plot reference"
 msgstr ""
 
+#: ../display/d.vect.chart/main.c:147
+#, fuzzy
+msgid "Create 3D charts"
+msgstr "创建 3D 输出"
+
 #: ../display/d.rgb/main.c:58
 msgid ""
 "Displays three user-specified raster maps as red, green, and blue overlays "
 "in the active graphics frame."
 msgstr ""
 
+#: ../display/d.legend/histogram.c:108
+msgid ""
+"Histogram constrained by range not yet implemented for categorical rasters"
+msgstr ""
+
 #: ../display/d.legend/main.c:89
 #, fuzzy
 msgid ""
@@ -37505,14 +39288,7 @@ msgstr ""
 msgid "Use a subset of the map range for the legend (min,max)"
 msgstr ""
 
-#: ../display/d.legend/main.c:162 ../display/d.legend/main.c:169
-#: ../display/d.legend/main.c:178 ../display/d.legend/main.c:185
-#: ../display/d.legend/main.c:193
-#, fuzzy
-msgid "Font settings"
-msgstr "无法获取栅格行\n"
-
-#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:86
+#: ../display/d.legend/main.c:176 ../display/d.northarrow/main.c:115
 #: ../display/d.barscale/main.c:134
 msgid "Font size"
 msgstr ""
@@ -37593,11 +39369,12 @@ msgstr ""
 msgid "use=%s out of range [%.3f, %.3f] (extend with range= ?)"
 msgstr ""
 
-#: ../display/d.legend/main.c:842
-msgid "Histogram constrained by range not yet implemented"
+#: ../display/d.legend/main.c:859
+msgid ""
+"Histogram plotting not implemented for categorical legends. Use the '-s' flag"
 msgstr ""
 
-#: ../display/d.legend/main.c:1019
+#: ../display/d.legend/main.c:1026
 msgid "Nothing to draw! (no categories with labels?)"
 msgstr ""
 
@@ -37611,34 +39388,90 @@ msgstr "选择字体,该字体用于图形监视器上文本的显示。"
 msgid "North arrow style"
 msgstr "边框颜色"
 
-#: ../display/d.northarrow/main.c:51 ../display/d.barscale/main.c:74
+#: ../display/d.northarrow/main.c:65
+msgid "Two color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:66
+msgid "Two color arrowhead with circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:67
+msgid "Narrow with blending N"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:68
+msgid "Long with small arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:69
+msgid "Inverted narrow inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:70
+msgid "Triangle and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:71
+msgid "Arrowhead and N inside a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:72
+msgid "Tall half convex arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:73
+msgid "Tall half concave arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:74
+msgid "Thin arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:75
+msgid "Fat arrow in a circle"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:76
+msgid "One color arrowhead"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:77
+msgid "Fancy compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:78
+msgid "Basic compass"
+msgstr ""
+
+#: ../display/d.northarrow/main.c:80 ../display/d.barscale/main.c:74
 msgid "Style"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:61 ../display/d.barscale/main.c:108
+#: ../display/d.northarrow/main.c:90 ../display/d.barscale/main.c:108
 msgid "Screen coordinates of the rectangle's top-left corner"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:62 ../display/d.barscale/main.c:109
+#: ../display/d.northarrow/main.c:91 ../display/d.barscale/main.c:109
 msgid "(0,0) is lower-left of the display frame"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:70
+#: ../display/d.northarrow/main.c:99
 #, fuzzy
 msgid "Fill color"
 msgstr " nv color\n"
 
-#: ../display/d.northarrow/main.c:71
+#: ../display/d.northarrow/main.c:100
 msgid "black"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:87 ../display/d.northarrow/main.c:92
+#: ../display/d.northarrow/main.c:116 ../display/d.northarrow/main.c:121
 #: ../display/d.barscale/main.c:65 ../display/d.barscale/main.c:126
 #: ../display/d.barscale/main.c:135
 msgid "Text"
 msgstr ""
 
-#: ../display/d.northarrow/main.c:91
+#: ../display/d.northarrow/main.c:120
 msgid "Draw the symbol without text"
 msgstr ""
 
@@ -37654,68 +39487,68 @@ msgstr "无法关闭地图"
 msgid "Could not read symbol \"%s\""
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:99
+#: ../display/d.rast.arrow/main.c:101
 msgid ""
 "Draws arrows representing cell aspect direction for a raster map containing "
 "aspect data."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:103
+#: ../display/d.rast.arrow/main.c:105
 msgid "Name of raster aspect map to be displayed"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:111
+#: ../display/d.rast.arrow/main.c:113
 msgid "Type of existing raster aspect map"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:116
+#: ../display/d.rast.arrow/main.c:118
 msgid "Color for drawing arrows"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:122
+#: ../display/d.rast.arrow/main.c:124
 msgid "Color for drawing drawing grid"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:128
+#: ../display/d.rast.arrow/main.c:130
 msgid "Color for drawing null values (X symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:134
+#: ../display/d.rast.arrow/main.c:136
 msgid "Color for showing unknown information (? symbol)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:142
+#: ../display/d.rast.arrow/main.c:144
 msgid "Draw arrow every Nth grid cell"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:151
+#: ../display/d.rast.arrow/main.c:153
 msgid "Raster map containing values used for arrow length"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:158
+#: ../display/d.rast.arrow/main.c:160
 msgid "Scale factor for arrows (magnitude map)"
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:206
+#: ../display/d.rast.arrow/main.c:210
 #, fuzzy
 msgid "Illegal value for scale factor"
 msgstr "非法的空值"
 
-#: ../display/d.rast.arrow/main.c:210
+#: ../display/d.rast.arrow/main.c:214
 #, fuzzy
 msgid "Illegal value for skip factor"
 msgstr "非法的空值"
 
-#: ../display/d.rast.arrow/main.c:215
+#: ../display/d.rast.arrow/main.c:219
 msgid "Magnitude is only supported for GRASS and compass aspect maps."
 msgstr ""
 
-#: ../display/d.rast.arrow/main.c:220
+#: ../display/d.rast.arrow/main.c:224
 #, fuzzy
 msgid "Scale option requires magnitude_map"
 msgstr "该选项需要一个字段"
 
-#: ../display/d.rast.arrow/main.c:271
+#: ../display/d.rast.arrow/main.c:275
 #, fuzzy
 msgid "Problem reading range file"
 msgstr "无法打开输出文件 <%s>"
@@ -37998,57 +39831,43 @@ msgstr "[%s] 的类别文件无效"
 msgid "%sclass separability matrix%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/open_files.c:18 ../imagery/i.gensigset/parse.c:47
-#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
-#: ../imagery/i.gensig/parse.c:41
-#, fuzzy, c-format
-msgid "Group <%s> not found in current mapset"
-msgstr "未发现矢量地图<%s>"
-
-#: ../imagery/i.cluster/open_files.c:22 ../imagery/i.gensigset/parse.c:50
-#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
-#: ../imagery/i.gensig/parse.c:44
-#, fuzzy, c-format
-msgid "Subgroup <%s> in group <%s> not found"
-msgstr "未发现区域<%s>"
-
-#: ../imagery/i.cluster/open_files.c:34
+#: ../imagery/i.cluster/open_files.c:24
 #, fuzzy, c-format
 msgid "Raster map <%s> do not exists in subgroup <%s>"
 msgstr "包含结果的栅格图的名称"
 
-#: ../imagery/i.cluster/open_files.c:39
+#: ../imagery/i.cluster/open_files.c:29
 #, fuzzy
 msgid "No raster maps found"
 msgstr "将要导入的二进制栅格文件"
 
-#: ../imagery/i.cluster/open_files.c:43
+#: ../imagery/i.cluster/open_files.c:33
 #, fuzzy, c-format
 msgid "Subgroup <%s> doesn't have any raster maps"
 msgstr "%s - 无法打开栅格文件"
 
-#: ../imagery/i.cluster/open_files.c:46
+#: ../imagery/i.cluster/open_files.c:36
 #, fuzzy, c-format
 msgid "Subgroup <%s> only has 1 raster map"
 msgstr "%s - 无法打开栅格文件"
 
-#: ../imagery/i.cluster/open_files.c:47
+#: ../imagery/i.cluster/open_files.c:37
 #, fuzzy
 msgid "Subgroup must have at least 2 raster maps"
 msgstr "无法关闭输出地图"
 
-#: ../imagery/i.cluster/open_files.c:64
+#: ../imagery/i.cluster/open_files.c:54
 #, fuzzy, c-format
 msgid "Unable to open seed signature file <%s>"
 msgstr "无法打开输入文件 <%s@%s>"
 
-#: ../imagery/i.cluster/open_files.c:70 ../imagery/i.smap/read_sig.c:23
+#: ../imagery/i.cluster/open_files.c:60 ../imagery/i.smap/read_sig.c:23
 #: ../imagery/i.maxlik/open.c:53
 #, fuzzy, c-format
 msgid "Unable to read signature file <%s>"
 msgstr "无法创建文件 [%s]"
 
-#: ../imagery/i.cluster/open_files.c:74 ../imagery/i.maxlik/open.c:57
+#: ../imagery/i.cluster/open_files.c:64 ../imagery/i.maxlik/open.c:57
 #, c-format
 msgid "<%s> has too many signatures (limit is 255)"
 msgstr ""
@@ -38121,202 +39940,216 @@ msgstr ""
 msgid "Name for output file containing final report"
 msgstr "包含错误矩阵和K曲线的输出文件的名称"
 
-#: ../imagery/i.cluster/main.c:177
+#: ../imagery/i.cluster/main.c:169 ../imagery/i.gensigset/parse.c:47
+#: ../imagery/i.smap/parse.c:61 ../imagery/i.maxlik/open.c:17
+#: ../imagery/i.gensig/parse.c:41
+#, fuzzy, c-format
+msgid "Group <%s> not found in current mapset"
+msgstr "未发现矢量地图<%s>"
+
+#: ../imagery/i.cluster/main.c:172 ../imagery/i.gensigset/parse.c:50
+#: ../imagery/i.smap/parse.c:64 ../imagery/i.maxlik/open.c:20
+#: ../imagery/i.gensig/parse.c:44
+#, fuzzy, c-format
+msgid "Subgroup <%s> in group <%s> not found"
+msgstr "未发现区域<%s>"
+
+#: ../imagery/i.cluster/main.c:192
 #, fuzzy, c-format
 msgid "Illegal number of initial classes (%s)"
 msgstr "面:%d  岛的数量:%d\n"
 
-#: ../imagery/i.cluster/main.c:188
+#: ../imagery/i.cluster/main.c:203
 #, fuzzy, c-format
 msgid "Illegal value(s) of sample intervals (%s)"
 msgstr "非法的空值"
 
-#: ../imagery/i.cluster/main.c:202
+#: ../imagery/i.cluster/main.c:217
 #, fuzzy, c-format
 msgid "Illegal value of iterations (%s)"
 msgstr "非法的空值"
 
-#: ../imagery/i.cluster/main.c:208
+#: ../imagery/i.cluster/main.c:223
 #, fuzzy, c-format
 msgid "Illegal value of convergence (%s)"
 msgstr "非法的空值"
 
-#: ../imagery/i.cluster/main.c:213
+#: ../imagery/i.cluster/main.c:228
 #, fuzzy, c-format
 msgid "Illegal value of separation (%s)"
 msgstr "非法的空值"
 
-#: ../imagery/i.cluster/main.c:218
+#: ../imagery/i.cluster/main.c:233
 #, fuzzy, c-format
 msgid "Illegal value of min_size (%s)"
 msgstr "非法的空值"
 
-#: ../imagery/i.cluster/main.c:227
+#: ../imagery/i.cluster/main.c:242
 #, fuzzy, c-format
 msgid "Unable to create report file <%s>"
 msgstr "无法创建文件 [%s]"
 
-#: ../imagery/i.cluster/main.c:235
+#: ../imagery/i.cluster/main.c:250
 #, c-format
 msgid "#################### CLUSTER (%s) ####################%s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:237
+#: ../imagery/i.cluster/main.c:252
 #, fuzzy, c-format
 msgid "Location: %s%s"
 msgstr "位置名称"
 
-#: ../imagery/i.cluster/main.c:238
+#: ../imagery/i.cluster/main.c:253
 #, fuzzy, c-format
 msgid "Mapset:   %s%s"
 msgstr "图层 %d"
 
-#: ../imagery/i.cluster/main.c:239
+#: ../imagery/i.cluster/main.c:254
 #, c-format
 msgid "Group:    %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:240
+#: ../imagery/i.cluster/main.c:255
 #, c-format
 msgid "Subgroup: %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:242
+#: ../imagery/i.cluster/main.c:257
 #, c-format
 msgid " %s%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:245
+#: ../imagery/i.cluster/main.c:260
 #, fuzzy, c-format
 msgid "Result signature file: %s%s"
 msgstr "无法创建文件 [%s]"
 
-#: ../imagery/i.cluster/main.c:247
+#: ../imagery/i.cluster/main.c:262
 #, fuzzy, c-format
 msgid "Region%s"
 msgstr "读取 %s ..."
 
-#: ../imagery/i.cluster/main.c:248
+#: ../imagery/i.cluster/main.c:263
 #, c-format
 msgid "  North: %12.2f  East: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:250
+#: ../imagery/i.cluster/main.c:265
 #, c-format
 msgid "  South: %12.2f  West: %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:252
+#: ../imagery/i.cluster/main.c:267
 #, c-format
 msgid "  Res:   %12.2f  Res:  %12.2f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:254
+#: ../imagery/i.cluster/main.c:269
 #, c-format
 msgid "  Rows:  %12d  Cols: %12d  Cells: %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:256
+#: ../imagery/i.cluster/main.c:271
 #, fuzzy, c-format
 msgid "Mask: %s%s"
 msgstr "图层 %d"
 
-#: ../imagery/i.cluster/main.c:258
+#: ../imagery/i.cluster/main.c:273
 #, fuzzy, c-format
 msgid "Cluster parameters%s"
 msgstr "平滑参数"
 
-#: ../imagery/i.cluster/main.c:259
+#: ../imagery/i.cluster/main.c:274
 #, c-format
 msgid " Number of initial classes:    %d"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:261
+#: ../imagery/i.cluster/main.c:276
 #, c-format
 msgid " [from signature file %s]"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:263
+#: ../imagery/i.cluster/main.c:278
 #, c-format
 msgid " Minimum class size:           %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:264
+#: ../imagery/i.cluster/main.c:279
 #, c-format
 msgid " Minimum class separation:     %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:265
+#: ../imagery/i.cluster/main.c:280
 #, c-format
 msgid " Percent convergence:          %f%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:266
+#: ../imagery/i.cluster/main.c:281
 #, fuzzy, c-format
 msgid " Maximum number of iterations: %d%s"
 msgstr "插值点的数量"
 
-#: ../imagery/i.cluster/main.c:268
+#: ../imagery/i.cluster/main.c:283
 #, c-format
 msgid " Row sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:269
+#: ../imagery/i.cluster/main.c:284
 #, c-format
 msgid " Col sampling interval:        %d%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:278 ../imagery/i.gensigset/read_data.c:22
+#: ../imagery/i.cluster/main.c:293 ../imagery/i.gensigset/read_data.c:22
 #: ../imagery/i.ifft/main.c:141
 #, fuzzy
 msgid "Reading raster maps..."
 msgstr "读取栅格文件 [%s] 时发生错误。"
 
-#: ../imagery/i.cluster/main.c:288
+#: ../imagery/i.cluster/main.c:303
 msgid "Out of Memory. Please run again and choose a smaller sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:294
+#: ../imagery/i.cluster/main.c:309
 #, fuzzy, c-format
 msgid "Sample size: %d points%s"
 msgstr "标签大小 (点)"
 
-#: ../imagery/i.cluster/main.c:297
+#: ../imagery/i.cluster/main.c:312
 msgid ""
 "Not enough sample points. Please run again and choose a larger sample size."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:301
+#: ../imagery/i.cluster/main.c:316
 msgid ""
 "Not enough non-zero sample data points. Check your current region (and mask)."
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:314
+#: ../imagery/i.cluster/main.c:329
 #, c-format
 msgid "%s########## final results #############%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:315
+#: ../imagery/i.cluster/main.c:330
 #, c-format
 msgid "%d classes (convergence=%.1f%%)%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:326
+#: ../imagery/i.cluster/main.c:341
 #, fuzzy, c-format
 msgid "Unable to create signature file <%s> for group <%s>, subsgroup <%s>"
 msgstr "无法创建栅格地图 %s"
 
-#: ../imagery/i.cluster/main.c:331
+#: ../imagery/i.cluster/main.c:346
 #, c-format
 msgid "%s%s#################### CLASSES ####################%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:333
+#: ../imagery/i.cluster/main.c:348
 #, c-format
 msgid "%s%d classes, %.2f%% points stable%s"
 msgstr ""
 
-#: ../imagery/i.cluster/main.c:335
+#: ../imagery/i.cluster/main.c:350
 #, c-format
 msgid "%s######## CLUSTER END (%s) ########%s"
 msgstr ""
@@ -38635,8 +40468,8 @@ msgid "radiance"
 msgstr "变化"
 
 #: ../imagery/i.landsat.toar/main.c:73 ../imagery/i.landsat.toar/main.c:580
-#: ../imagery/i.modis.qc/main.c:140 ../imagery/i.aster.toar/main.c:100
-#: ../imagery/i.albedo/main.c:90
+#: ../imagery/i.modis.qc/main.c:151 ../imagery/i.aster.toar/main.c:100
+#: ../imagery/i.albedo/main.c:97
 #, fuzzy
 msgid "reflectance"
 msgstr "无法获取栅格行\n"
@@ -39010,357 +40843,401 @@ msgstr "栅格地图 [%s] 未发现"
 msgid "group <%s> references the following subgroups\n"
 msgstr "%s - 无法打开栅格文件"
 
-#: ../imagery/i.modis.qc/main.c:139
+#: ../imagery/i.modis.qc/main.c:150
 msgid "imagery quality assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:141
+#: ../imagery/i.modis.qc/main.c:152
 #, fuzzy
 msgid "land surface temperature"
 msgstr "将要产生的随机表面的名称"
 
-#: ../imagery/i.modis.qc/main.c:142
+#: ../imagery/i.modis.qc/main.c:153
 #, fuzzy
 msgid "vegetation"
 msgstr "无法获取栅格行\n"
 
-#: ../imagery/i.modis.qc/main.c:145
+#: ../imagery/i.modis.qc/main.c:157
 #, fuzzy
 msgid "Extracts quality control parameters from MODIS QC layers."
 msgstr "写入栅格地图 %i\n"
 
-#: ../imagery/i.modis.qc/main.c:150
+#: ../imagery/i.modis.qc/main.c:162
 #, fuzzy
 msgid "Name of input surface reflectance QC layer [bit array]"
 msgstr "不规则表面栅格图层的名称"
 
-#: ../imagery/i.modis.qc/main.c:155
+#: ../imagery/i.modis.qc/main.c:167
 #, fuzzy
 msgid "Name for output QC type classification layer"
 msgstr "输出栅格文件的名称"
 
-#: ../imagery/i.modis.qc/main.c:161
+#: ../imagery/i.modis.qc/main.c:173
 #, fuzzy
 msgid "Name of MODIS product type"
 msgstr "输入图层的名称"
 
-#: ../imagery/i.modis.qc/main.c:175
+#: ../imagery/i.modis.qc/main.c:188
 msgid "surf. refl. 250m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:176
+#: ../imagery/i.modis.qc/main.c:189
 msgid "surf. refl. 500m 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:177
+#: ../imagery/i.modis.qc/main.c:190
 msgid "surf. refl. 500m 8-days, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:178
+#: ../imagery/i.modis.qc/main.c:191
 msgid "surf. refl. 5000m daily"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:179
+#: ../imagery/i.modis.qc/main.c:192
 msgid "surf. refl. 5000m daily, State QA"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:180
+#: ../imagery/i.modis.qc/main.c:193
 msgid "surf. refl. 5000m daily, Internal Climatology"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:181
+#: ../imagery/i.modis.qc/main.c:194
 msgid "LST 1km daily (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:182
+#: ../imagery/i.modis.qc/main.c:195
 msgid "LST 1km 8-days (Day/Night)"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:183
+#: ../imagery/i.modis.qc/main.c:196
 msgid "VI 1km 16-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:184
+#: ../imagery/i.modis.qc/main.c:197
 msgid "Brdf-Albedo Quality (Ancillary SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:185
+#: ../imagery/i.modis.qc/main.c:198
 msgid "Brdf-Albedo Quality (BRDF SDS) 1km 8-days"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:194
+#: ../imagery/i.modis.qc/main.c:199
+msgid "VI 250m 16-days"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:208
 #, fuzzy
 msgid "Name of QC type to extract"
 msgstr "将要调整的栅格地图的名称"
 
-#: ../imagery/i.modis.qc/main.c:249
+#: ../imagery/i.modis.qc/main.c:272
 msgid "mod09: Adjacency Correction"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:250
+#: ../imagery/i.modis.qc/main.c:273
 #, fuzzy
 msgid "mod09: Atmospheric Correction"
 msgstr "输出的流向栅格图"
 
-#: ../imagery/i.modis.qc/main.c:251
+#: ../imagery/i.modis.qc/main.c:274
 msgid "mod09: Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:252
+#: ../imagery/i.modis.qc/main.c:275
 msgid "mod09: Band-Wise Data Quality Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:253
+#: ../imagery/i.modis.qc/main.c:276
 msgid "mod09: 250m Band is at Different Orbit than 500m"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:254
+#: ../imagery/i.modis.qc/main.c:277
 msgid "mod09: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:255
+#: ../imagery/i.modis.qc/main.c:278
 msgid "mod11A1: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:256
+#: ../imagery/i.modis.qc/main.c:279
 msgid "mod11A1: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:257
+#: ../imagery/i.modis.qc/main.c:280
 msgid "mod11A1: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:258
+#: ../imagery/i.modis.qc/main.c:281
 msgid "mod11A1: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:259
+#: ../imagery/i.modis.qc/main.c:282
 msgid "mod11A2: Detailed Quality Indications"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:260
+#: ../imagery/i.modis.qc/main.c:283
 msgid "mod11A2: Average Emissivity Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:261
+#: ../imagery/i.modis.qc/main.c:284
 msgid "mod11A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:262
+#: ../imagery/i.modis.qc/main.c:285
 msgid "mod11A2: Average LST Error Classes"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:263
+#: ../imagery/i.modis.qc/main.c:286
 msgid "mod09*s: StateQA Aerosol Quantity"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:264
+#: ../imagery/i.modis.qc/main.c:287
 msgid "mod09*s: StateQA BRDF Correction Performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:265
+#: ../imagery/i.modis.qc/main.c:288
 msgid "mod09*s: StateQA Cirrus Detected"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:266
+#: ../imagery/i.modis.qc/main.c:289
 msgid "mod09*s: StateQA Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:267
+#: ../imagery/i.modis.qc/main.c:290
 msgid "mod09*s: StateQA Cloud State"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:268
+#: ../imagery/i.modis.qc/main.c:291
 msgid "mod09*s: StateQA Internal Cloud Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:269
+#: ../imagery/i.modis.qc/main.c:292
 msgid "mod09*s: StateQA Internal Fire Algorithm"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:270
+#: ../imagery/i.modis.qc/main.c:293
 msgid "mod09*s: StateQA Internal Snow Mask"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:271
+#: ../imagery/i.modis.qc/main.c:294
 msgid "mod09*s: StateQA Land Water"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:272
+#: ../imagery/i.modis.qc/main.c:295
 msgid "mod09*s: StateQA mod35 Snow Ice"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:273
+#: ../imagery/i.modis.qc/main.c:296
 msgid "mod09*s: StateQA Pixel Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:274
+#: ../imagery/i.modis.qc/main.c:297
 msgid "mod09*i: Internal CM: Cloudy"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:275
+#: ../imagery/i.modis.qc/main.c:298
 msgid "mod09*i: Internal CM: Clear"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:276
+#: ../imagery/i.modis.qc/main.c:299
 msgid "mod09*i: Internal CM: High Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:277
+#: ../imagery/i.modis.qc/main.c:300
 msgid "mod09*i: Internal CM: Low Clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:278
+#: ../imagery/i.modis.qc/main.c:301
 msgid "mod09*i: Internal CM: Snow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:279
+#: ../imagery/i.modis.qc/main.c:302
 msgid "mod09*i: Internal CM: Fire"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:280
+#: ../imagery/i.modis.qc/main.c:303
 msgid "mod09*i: Internal CM: Sun Glint"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:281
+#: ../imagery/i.modis.qc/main.c:304
 msgid "mod09*i: Internal CM: Dust"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:282
+#: ../imagery/i.modis.qc/main.c:305
 msgid "mod09*i: Internal CM: Cloud Shadow"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:283
+#: ../imagery/i.modis.qc/main.c:306
 msgid "mod09*i: Internal CM: Pixel is Adjacent to Cloud"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:284
+#: ../imagery/i.modis.qc/main.c:307
 msgid "mod09*i: Internal CM: Cirrus"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:285
+#: ../imagery/i.modis.qc/main.c:308
 msgid "mod09*i: Internal CM: Pan Flag"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:286
+#: ../imagery/i.modis.qc/main.c:309
 msgid "mod09*i: Internal CM: Criteria for Aerosol Retrieval"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:287
+#: ../imagery/i.modis.qc/main.c:310
 msgid "mod09*i: Internal CM: AOT (aerosol optical depth) has clim. val."
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:288
+#: ../imagery/i.modis.qc/main.c:311
 msgid "mod13A2: MODIS Land General Quality Assessment"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:289
+#: ../imagery/i.modis.qc/main.c:312
 msgid "mod13A2: Quality estimation of the pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:290
+#: ../imagery/i.modis.qc/main.c:313
 msgid "mod13A2: Quantity range of Aerosol"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:291
+#: ../imagery/i.modis.qc/main.c:314
 msgid "mod13A2: if pixel is a cloud neighbour"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:292
+#: ../imagery/i.modis.qc/main.c:315
 msgid "mod13A2: if BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:293
+#: ../imagery/i.modis.qc/main.c:316
 msgid "mod13A2: if pixel mixed with clouds"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:294
+#: ../imagery/i.modis.qc/main.c:317
 msgid "mod13A2: separate land from various water objects"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:295
+#: ../imagery/i.modis.qc/main.c:318
 msgid "mod13A2: if snow/ice present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:296
+#: ../imagery/i.modis.qc/main.c:319
 msgid "mod13A2: if shadow is present in pixel"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:297 ../imagery/i.modis.qc/main.c:298
-#: ../imagery/i.modis.qc/main.c:299
+#: ../imagery/i.modis.qc/main.c:320 ../imagery/i.modis.qc/main.c:321
+#: ../imagery/i.modis.qc/main.c:322
 msgid "mcd43B2: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:300
+#: ../imagery/i.modis.qc/main.c:323
 msgid "mcd43B2q: Quality of BRDF correction performed"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:310
+#: ../imagery/i.modis.qc/main.c:324
+msgid "mod13Q1: MODIS Land General Quality Assessment"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:325
+msgid "mod13Q1: Quality estimation of the pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:326
+msgid "mod13Q1: Quantity range of Aerosol"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:327
+msgid "mod13Q1: if pixel is a cloud neighbour"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:328
+msgid "mod13Q1: if BRDF correction performed"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:329
+msgid "mod13Q1: if pixel mixed with clouds"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:330
+msgid "mod13Q1: separate land from various water objects"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:331
+msgid "mod13Q1: if snow/ice present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:332
+msgid "mod13Q1: if shadow is present in pixel"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:342
 msgid ""
 "Band number of MODIS product (mod09Q1=[1,2],mod09A1=[1-7],m[o/"
 "y]d09CMG=[1-7], mcd43B2q=[1-7])"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:314
+#: ../imagery/i.modis.qc/main.c:346
 msgid "Band 1: Red"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:315
+#: ../imagery/i.modis.qc/main.c:347
 msgid "Band 2: NIR"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:316
+#: ../imagery/i.modis.qc/main.c:348
 msgid "Band 3: Blue"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:317
+#: ../imagery/i.modis.qc/main.c:349
 msgid "Band 4: Green"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:318
+#: ../imagery/i.modis.qc/main.c:350
 msgid "Band 5: SWIR 1"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:319
+#: ../imagery/i.modis.qc/main.c:351
 msgid "Band 6: SWIR 2"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:320
+#: ../imagery/i.modis.qc/main.c:352
 msgid "Band 7: SWIR 3"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:339
+#: ../imagery/i.modis.qc/main.c:371
 msgid "This bit flag is only available for MOD09Q1 @ 250m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:343
+#: ../imagery/i.modis.qc/main.c:375
 msgid "Band number out of allowed range [1-2]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:345 ../imagery/i.modis.qc/main.c:347
-#: ../imagery/i.modis.qc/main.c:349 ../imagery/i.modis.qc/main.c:351
-#: ../imagery/i.modis.qc/main.c:353 ../imagery/i.modis.qc/main.c:355
-#: ../imagery/i.modis.qc/main.c:410
+#: ../imagery/i.modis.qc/main.c:377 ../imagery/i.modis.qc/main.c:379
+#: ../imagery/i.modis.qc/main.c:381 ../imagery/i.modis.qc/main.c:383
+#: ../imagery/i.modis.qc/main.c:385 ../imagery/i.modis.qc/main.c:387
+#: ../imagery/i.modis.qc/main.c:442
 msgid "Band number out of allowed range [1-7]"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:357
+#: ../imagery/i.modis.qc/main.c:389
 msgid "mod09Q1 product only has 2 bands"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:393
+#: ../imagery/i.modis.qc/main.c:425
 msgid "This bit flag is only available for mod09CMGi @ 5000m products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:400
+#: ../imagery/i.modis.qc/main.c:432
 msgid "This bit flag is only available for MOD13A2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:406
+#: ../imagery/i.modis.qc/main.c:438
 msgid "This bit flag is only available for MCD43B2 @ 1km products"
 msgstr ""
 
-#: ../imagery/i.modis.qc/main.c:694
+#: ../imagery/i.modis.qc/main.c:449
+msgid "This bit flag is only available for MOD13Q1 @ 250m products"
+msgstr ""
+
+#: ../imagery/i.modis.qc/main.c:763
 msgid "Unknown names and/or combination, please check spelling"
 msgstr ""
 
@@ -39573,7 +41450,7 @@ msgstr ""
 msgid "Maximum number of sub-signatures in any class"
 msgstr "一个片断最多所能包含的点数"
 
-#: ../imagery/i.gensigset/parse.c:54
+#: ../imagery/i.gensigset/parse.c:63
 #, fuzzy, c-format
 msgid "Illegal number of sub-signatures (%s)"
 msgstr "面:%d  岛的数量:%d\n"
@@ -39932,108 +41809,114 @@ msgstr ""
 msgid "rclist out of memory"
 msgstr "无法打开选择游标"
 
-#: ../imagery/i.segment/create_isegs.c:244
+#: ../imagery/i.segment/main.c:38
+msgid "object recognition"
+msgstr ""
+
+#: ../imagery/i.segment/main.c:40
+msgid "Identifies segments (objects) from imagery data."
+msgstr ""
+
+#: ../imagery/i.segment/main.c:46
+#, fuzzy
+msgid "Error in reading data"
+msgstr "读取地图 %s 时发生错误"
+
+#: ../imagery/i.segment/main.c:50
+#, fuzzy
+msgid "Error in creating segments"
+msgstr "尝试读取dbmscap文件失败\n"
+
+#: ../imagery/i.segment/main.c:54
+#, fuzzy
+msgid "Error in writing data"
+msgstr "读取地图 %s 时发生错误"
+
+#: ../imagery/i.segment/main.c:59
+#, fuzzy, c-format
+msgid "Number of segments created: %d"
+msgstr "将要创建的点的数目"
+
+#: ../imagery/i.segment/watershed.c:19
+#, fuzzy
+msgid "Watershed is not yet implemented"
+msgstr "未发现区域<%s>"
+
+#: ../imagery/i.segment/write_output.c:31
+#, fuzzy
+msgid "Writing out segment IDs..."
+msgstr "写入 %s ... "
+
+#: ../imagery/i.segment/write_output.c:124
+msgid "Writing out goodness of fit"
+msgstr ""
+
+#: ../imagery/i.segment/region_growing.c:167
+#: ../imagery/i.segment/mean_shift.c:59
 #, fuzzy, c-format
 msgid "Processing pass %d..."
 msgstr "绘制 ... "
 
-#: ../imagery/i.segment/create_isegs.c:522
+#: ../imagery/i.segment/region_growing.c:445
 #, c-format
 msgid ""
 "Segmentation processes stopped at %d due to reaching max iteration limit, "
 "more merges may be possible"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:524
+#: ../imagery/i.segment/region_growing.c:447
 #, c-format
 msgid "Segmentation converged after %d iterations"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:532
+#: ../imagery/i.segment/region_growing.c:455
 #, c-format
 msgid "Merging segments smaller than %d cells..."
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1075
+#: ../imagery/i.segment/region_growing.c:892
 #, c-format
 msgid "Region stats should go in tree, %d >= %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1082
+#: ../imagery/i.segment/region_growing.c:899
 msgid "Region ids are different"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1086
+#: ../imagery/i.segment/region_growing.c:903
 msgid "Region consists of only one cell, nothing to update"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1130
-#: ../imagery/i.segment/create_isegs.c:1555
+#: ../imagery/i.segment/region_growing.c:947
+#: ../imagery/i.segment/region_growing.c:1371
 #, c-format
 msgid "Region size is larger than 2: %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1197
+#: ../imagery/i.segment/region_growing.c:1014
 #, c-format
 msgid "Region size is %d, should be %d"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy, c-format
 msgid "Candidate flag is already %s"
 msgstr "dig_att文件不存在。"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 #, fuzzy
 msgid "set"
 msgstr "无法获取栅格行\n"
 
-#: ../imagery/i.segment/create_isegs.c:1420
+#: ../imagery/i.segment/region_growing.c:1236
 msgid "unset"
 msgstr ""
 
-#: ../imagery/i.segment/create_isegs.c:1640
+#: ../imagery/i.segment/region_growing.c:1456
 #, c-format
 msgid "Region of size %d should be in search tree"
 msgstr ""
 
-#: ../imagery/i.segment/main.c:38
-msgid "object recognition"
-msgstr ""
-
-#: ../imagery/i.segment/main.c:40
-msgid "Identifies segments (objects) from imagery data."
-msgstr ""
-
-#: ../imagery/i.segment/main.c:46
-#, fuzzy
-msgid "Error in reading data"
-msgstr "读取地图 %s 时发生错误"
-
-#: ../imagery/i.segment/main.c:50
-#, fuzzy
-msgid "Error in creating segments"
-msgstr "尝试读取dbmscap文件失败\n"
-
-#: ../imagery/i.segment/main.c:54
-#, fuzzy
-msgid "Error in writing data"
-msgstr "读取地图 %s 时发生错误"
-
-#: ../imagery/i.segment/main.c:59
-#, fuzzy, c-format
-msgid "Number of segments created: %d"
-msgstr "将要创建的点的数目"
-
-#: ../imagery/i.segment/write_output.c:31
-#, fuzzy
-msgid "Writing out segment IDs..."
-msgstr "写入 %s ... "
-
-#: ../imagery/i.segment/write_output.c:124
-msgid "Writing out goodness of fit"
-msgstr ""
-
 #: ../imagery/i.segment/parse_args.c:30
 msgid "Difference threshold between 0 and 1"
 msgstr ""
@@ -40107,64 +41990,81 @@ msgstr ""
 msgid "Threshold should be > 0 and < 1"
 msgstr "必须指定两个图层"
 
-#: ../imagery/i.segment/parse_args.c:159
+#: ../imagery/i.segment/parse_args.c:169
 #, fuzzy
 msgid "Unable to assign segmentation method"
 msgstr "无法创建文件 [%s]"
 
-#: ../imagery/i.segment/parse_args.c:169
+#: ../imagery/i.segment/parse_args.c:179
 #, fuzzy
 msgid "Invalid similarity method"
 msgstr "无效的区域:%s"
 
-#: ../imagery/i.segment/parse_args.c:175
+#: ../imagery/i.segment/parse_args.c:185
 #, fuzzy, c-format
 msgid "Option '%s' must be > 0"
 msgstr "位置名称"
 
-#: ../imagery/i.segment/parse_args.c:177 ../imagery/i.segment/parse_args.c:182
+#: ../imagery/i.segment/parse_args.c:187 ../imagery/i.segment/parse_args.c:192
 #, fuzzy, c-format
 msgid "Option '%s' must be <= 1"
 msgstr "位置名称"
 
-#: ../imagery/i.segment/parse_args.c:180
+#: ../imagery/i.segment/parse_args.c:190
 #, fuzzy, c-format
 msgid "Option '%s' must be >= 0"
 msgstr "位置名称"
 
-#: ../imagery/i.segment/parse_args.c:208
+#: ../imagery/i.segment/parse_args.c:218
 #, fuzzy
 msgid "Seeds raster map not found"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../imagery/i.segment/parse_args.c:212
+#: ../imagery/i.segment/parse_args.c:222
 #, fuzzy
 msgid "Seeeds raster map must be CELL type (integers)"
 msgstr "创建 %i 栅格地图\n"
 
-#: ../imagery/i.segment/parse_args.c:222
+#: ../imagery/i.segment/parse_args.c:232
 #, fuzzy
 msgid "Segmentation constraint/boundary raster map not found"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../imagery/i.segment/parse_args.c:226
+#: ../imagery/i.segment/parse_args.c:236
 msgid "Segmentation constraint raster map must be CELL type (integers)"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:241
+#: ../imagery/i.segment/parse_args.c:251
 msgid "Invalid output raster name for goodness of fit"
 msgstr ""
 
-#: ../imagery/i.segment/parse_args.c:249
+#: ../imagery/i.segment/parse_args.c:259
 #, fuzzy
 msgid "Invalid number of iterations, 100 will be used"
 msgstr "面:%d  岛的数量:%d\n"
 
-#: ../imagery/i.segment/parse_args.c:259
+#: ../imagery/i.segment/parse_args.c:269
 #, fuzzy
 msgid "Invalid number of MB, 300 will be used"
 msgstr "面:%d  岛的数量:%d\n"
 
+#: ../imagery/i.segment/mean_shift.c:42
+#, fuzzy
+msgid "Mean shift is not yet implemented"
+msgstr "未发现区域<%s>"
+
+#: ../imagery/i.segment/mean_shift.c:106
+#, c-format
+msgid ""
+"Mean shift stopped at %d due to reaching max iteration limit, more changes "
+"may be possible"
+msgstr ""
+
+#: ../imagery/i.segment/mean_shift.c:108
+#, c-format
+msgid "Mean shift converged after %d iterations"
+msgstr ""
+
 #: ../imagery/i.eb.evapfr/main.c:53
 msgid "Computes evaporative fraction and root zone soil moisture."
 msgstr ""
@@ -40254,7 +42154,7 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:93
+#: ../imagery/i.aster.toar/main.c:103 ../imagery/i.albedo/main.c:100
 msgid "ASTER"
 msgstr ""
 
@@ -40314,7 +42214,7 @@ msgstr ""
 msgid "SWIR is Low Gain 2"
 msgstr ""
 
-#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:155
+#: ../imagery/i.aster.toar/main.c:230 ../imagery/i.albedo/main.c:167
 #, fuzzy, c-format
 msgid "Too many input maps. Only %d allowed."
 msgstr "%s - 补丁文件太多。只允许 %d"
@@ -41180,51 +43080,55 @@ msgstr "未发现区域<%s>"
 msgid "Option '%s' is required for new exposure info"
 msgstr "位置名称"
 
-#: ../imagery/i.albedo/main.c:89
+#: ../imagery/i.albedo/main.c:96
 #, fuzzy
 msgid "albedo"
 msgstr "输入失败"
 
-#: ../imagery/i.albedo/main.c:94
+#: ../imagery/i.albedo/main.c:101
 msgid "AVHRR"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:96
+#: ../imagery/i.albedo/main.c:103
 #, fuzzy
 msgid "Computes broad band albedo from surface reflectance."
 msgstr "结果图的名称"
 
-#: ../imagery/i.albedo/main.c:109
+#: ../imagery/i.albedo/main.c:116
 msgid "MODIS (7 input bands:1,2,3,4,5,6,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:113
+#: ../imagery/i.albedo/main.c:120
 msgid "NOAA AVHRR (2 input bands:1,2)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:117
+#: ../imagery/i.albedo/main.c:124
 msgid "Landsat 5+7 (6 input bands:1,2,3,4,5,7)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:121
+#: ../imagery/i.albedo/main.c:128
+msgid "Landsat 8 (7 input bands:1,2,3,4,5,6,7)"
+msgstr ""
+
+#: ../imagery/i.albedo/main.c:132
 msgid "ASTER (6 input bands:1,3,5,6,8,9)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:125
+#: ../imagery/i.albedo/main.c:136
 msgid "Aggressive mode (Landsat)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:127 ../imagery/i.albedo/main.c:134
+#: ../imagery/i.albedo/main.c:138 ../imagery/i.albedo/main.c:145
 msgid ""
 "Albedo dry run to calculate some water to beach/sand/desert stretching, a "
 "kind of simple atmospheric correction"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:132
+#: ../imagery/i.albedo/main.c:143
 msgid "Soft mode (MODIS)"
 msgstr ""
 
-#: ../imagery/i.albedo/main.c:169
+#: ../imagery/i.albedo/main.c:181
 #, fuzzy
 msgid "At least two raster maps are required"
 msgstr "输出栅格文件的标题"
@@ -41525,6 +43429,10 @@ msgstr "插值点的数量"
 msgid "Use Night-time"
 msgstr ""
 
+#: ../imagery/i.rectify/target.c:36
+msgid "Please run i.target for group "
+msgstr ""
+
 #: ../imagery/i.rectify/main.c:102
 msgid ""
 "Rectifies an image by computing a coordinate transformation for each pixel "
@@ -41924,12 +43832,36 @@ msgid "Name for output raster map (saturation)"
 msgstr "输出栅格文件的标题"
 
 #, fuzzy
-#~ msgid "Username to set for DB connection"
-#~ msgstr "无法创建表:%s"
+#~ msgid "<%s> already exists"
+#~ msgstr "dig_att文件不存在。"
 
 #, fuzzy
-#~ msgid "Password to set for DB connection"
-#~ msgstr "无法创建表:%s"
+#~ msgid "<%s> already compressed"
+#~ msgstr "[%s] 将要被压缩。是吗?"
+
+#, fuzzy
+#~ msgid "Grid-decimated point cloud"
+#~ msgstr "未找到任何记录。\n"
+
+#, fuzzy
+#~ msgid "Layer number where red color is stored as category"
+#~ msgstr "无法创建属性表"
+
+#, fuzzy
+#~ msgid "Layer number where blue color is stored as category"
+#~ msgstr "无法创建属性表"
+
+#, fuzzy
+#~ msgid "Layer number to store number of returns as category"
+#~ msgstr "图层 %d"
+
+#, fuzzy
+#~ msgid "Store only the coordinates"
+#~ msgstr "地图北向格网坐标"
+
+#, fuzzy
+#~ msgid "Do not add categories to points and do not create attribute table"
+#~ msgstr "无法创建属性表"
 
 #, fuzzy
 #~ msgid "time series"
@@ -41976,100 +43908,67 @@ msgstr "输出栅格文件的标题"
 #~ msgstr "行数"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing latitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "输入纬度的栅格图的名称 [十进制度]"
+#~ msgid "Could not rewind input file"
+#~ msgstr "无法打开矢量文件 <%s>"
 
 #, fuzzy
-#~ msgid ""
-#~ "Name of input raster map containing longitudes (if projection undefined) "
-#~ "[decimal degrees]"
-#~ msgstr "包含等高线的栅格图名称"
+#~ msgid "Name for basins raster map"
+#~ msgstr "栅格图的名称"
 
 #, fuzzy
-#~ msgid ""
-#~ "Output diffuse irradiation raster map cumulated for the whole period of "
-#~ "time [Wh.m-2.day-1]"
-#~ msgstr "输出的散射辐照度[W.m-2] (mode 1)或辐射栅格图[Wh.m-2.day-1] (mode 2)"
+#~ msgid "Raster map containing midflame wind velocitys (ft/min)"
+#~ msgstr "包含midflame风速(英尺/分钟)的栅格图的名称"
 
 #, fuzzy
-#~ msgid ""
-#~ "Output ground reflected irradiation raster map cumulated for the whole "
-#~ "period of time [Wh.m-2.day-1]"
-#~ msgstr ""
-#~ "输出的地面反射辐照度[W.m-2] (mode 1)或辐射的栅格文件[Wh.m-2.day-1] (mode "
-#~ "2)"
+#~ msgid "Raster map <%s> already exists in mapset <%s>"
+#~ msgstr "无法创建栅格地图 %s"
 
 #, fuzzy
-#~ msgid ""
-#~ "Output global (total) irradiance/irradiation raster map cumulated for the "
-#~ "whole period of time [Wh.m-2.day-1]"
-#~ msgstr "输出的辐照度[W.m-2] (mode 1)或辐射的栅格文件[Wh.m-2.day-1] (mode 2)"
+#~ msgid "output map <%s> exists"
+#~ msgstr "输出图"
 
-#, fuzzy
-#~ msgid "Base name for output beam irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "输入栅格文件的名称"
+#~ msgid "Page length (default: %d lines)"
+#~ msgstr "页面长度(默认:%d行)"
 
-#, fuzzy
-#~ msgid "Base name for output diffuse irradiation raster maps [Wh.m-2.day-1]"
-#~ msgstr "输入的高程栅格图的名称[米]"
+#~ msgid "Page width (default: %d characters)"
+#~ msgstr "页面宽度(默认:%d字符)"
 
-#, fuzzy
-#~ msgid ""
-#~ "Base name for output ground reflected irradiation raster maps [Wh.m-2."
-#~ "day-1]"
-#~ msgstr ""
-#~ "输出的地面反射辐照度[W.m-2] (mode 1)或辐射的栅格文件[Wh.m-2.day-1] (mode "
-#~ "2)"
+#~ msgid "Override projection (use location's projection)"
+#~ msgstr "覆盖投影(使用区域的投影)"
 
 #, fuzzy
-#~ msgid ""
-#~ "Base name for output global (total) irradiance/irradiation raster maps "
-#~ "[Wh.m-2.day-1]"
-#~ msgstr "输出的辐照度[W.m-2] (mode 1)或辐射的栅格文件[Wh.m-2.day-1] (mode 2)"
+#~ msgid "%s: Error writing temporary file"
+#~ msgstr "尝试读取dbmscap文件失败\n"
 
 #, fuzzy
-#~ msgid "Number of r.sun processes to run in parallel"
-#~ msgstr "插值点的数量"
+#~ msgid "Input options"
+#~ msgstr "字段类型不支持"
 
 #, fuzzy
-#~ msgid "Override projection check (use location's projection)"
-#~ msgstr "覆盖投影(使用区域的投影)"
+#~ msgid "Output options"
+#~ msgstr "输出图"
 
 #, fuzzy
 #~ msgid "option <%s>: <%s> exists."
 #~ msgstr "未发现区域<%s>"
 
 #, fuzzy
-#~ msgid "output map <%s> exists"
-#~ msgstr "输出图"
-
-#, fuzzy
-#~ msgid "Topographic index ln(a / tan(b))"
-#~ msgstr "地形索引ln(a/tanB)图"
-
-#, fuzzy
-#~ msgid "Name for basins raster map"
-#~ msgstr "栅格图的名称"
-
-#~ msgid "Page length (default: %d lines)"
-#~ msgstr "页面长度(默认:%d行)"
-
-#~ msgid "Page width (default: %d characters)"
-#~ msgstr "页面宽度(默认:%d字符)"
+#~ msgid "Override dataset projection (use location's projection)"
+#~ msgstr "覆盖投影(使用区域的投影)"
 
 #, fuzzy
-#~ msgid "%s: Error writing temporary file"
-#~ msgstr "尝试读取dbmscap文件失败\n"
+#~ msgid "Displays GRASS version info."
+#~ msgstr "未知的类型"
 
 #, fuzzy
-#~ msgid "Input options"
-#~ msgstr "字段类型不支持"
+#~ msgid "Password to set for DB connection"
+#~ msgstr "无法创建表:%s"
 
 #, fuzzy
-#~ msgid "Output options"
-#~ msgstr "输出图"
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "将栅格图转化为矢量图层。"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -42106,87 +44005,59 @@ msgstr "输出栅格文件的标题"
 #~ msgstr "从当前区域设置"
 
 #, fuzzy
-#~ msgid "Raster map <%s> already exists in mapset <%s>"
-#~ msgstr "无法创建栅格地图 %s"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "将栅格图转化为矢量图层。"
-
-#, fuzzy
-#~ msgid "No flag given"
-#~ msgstr "没有指定数据地图"
-
-#, fuzzy
-#~ msgid "Renaming reclass maps"
-#~ msgstr "创建 %i 栅格地图\n"
-
-#, fuzzy
-#~ msgid "Unable to read REF file for group <%s>"
-#~ msgstr "编辑 [%s] 的类别文件?"
+#~ msgid "OGR datasource name"
+#~ msgstr "数据库名称"
 
 #, fuzzy
-#~ msgid "Loading seeds from '%s'"
-#~ msgstr "%d 个类别从表中加载"
-
-#, fuzzy
-#~ msgid "One of options <%s> or <%s> must be given"
-#~ msgstr "必须指定'from_table'或'select'选项。"
-
-#, fuzzy
-#~ msgid "Please specify input= or file="
-#~ msgstr "请指定 z 字段。"
+#~ msgid "flowline"
+#~ msgstr "矢量地图 %s - 未发现"
 
 #, fuzzy
-#~ msgid "Either -p or output= must be given"
+#~ msgid "One of -%c, %s=, %s= or %s= must be specified"
 #~ msgstr "必须指定'from_table'或'select'选项。"
 
 #, fuzzy
-#~ msgid "invalid value for fprange= <%s>"
-#~ msgstr "%s:无法为 [%s] 读取范围"
+#~ msgid "Color in GRASS format for drawing grid or \"none\" not drawing"
+#~ msgstr "列出支持的格式然后退出"
 
 #, fuzzy
-#~ msgid "Please specify output= or outfile="
-#~ msgstr "请指定 z 字段。"
+#~ msgid "No flag given"
+#~ msgstr "没有指定数据地图"
 
 #, fuzzy
-#~ msgid "Please specify output= and samplingpos="
-#~ msgstr "请指定 z 字段。"
+#~ msgid "Unable to create file '%s'"
+#~ msgstr "无法创建文件 [%s]"
 
 #, fuzzy
-#~ msgid "Please specify input= or infile="
-#~ msgstr "请指定 z 字段。"
+#~ msgid "Env file not found"
+#~ msgstr "未找到3D视图文件<%s>"
 
 #, fuzzy
-#~ msgid "Please specify input= and datapos="
-#~ msgstr "请指定 z 字段。"
+#~ msgid "PID file not found"
+#~ msgstr "像元文件未发现\n"
 
 #, fuzzy
-#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
-#~ msgstr "必须指定'from_table'或'select'选项。"
+#~ msgid "Command file not found"
+#~ msgstr "字段 <%s> 未找到"
 
 #, fuzzy
-#~ msgid "One of options <%s> or <%s> must be specified"
-#~ msgstr "必须指定'from_table'或'select'选项。"
+#~ msgid "Renaming reclass maps"
+#~ msgstr "创建 %i 栅格地图\n"
 
 #, fuzzy
-#~ msgid "Option <%s> must be specified"
-#~ msgstr "必须指定'from_table'或'select'选项。"
+#~ msgid "Name for output image"
+#~ msgstr "输出文件的名称"
 
 #, fuzzy
-#~ msgid ""
-#~ "Displays a thematic vector area map in the active frame on the graphics "
-#~ "monitor."
-#~ msgstr "选择字体,该字体用于图形监视器上文本的显示。"
+#~ msgid "Unable to read REF file for group <%s>"
+#~ msgstr "编辑 [%s] 的类别文件?"
 
 #, fuzzy
-#~ msgid "Color in GRASS format for drawing text"
-#~ msgstr "列出支持的格式然后退出"
+#~ msgid "Loading seeds from '%s'"
+#~ msgstr "%d 个类别从表中加载"
 
 #, fuzzy
-#~ msgid "Name of output basename raster map(s)"
+#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
 #~ msgstr ""
 #~ "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 #~ "输出栅格图的名称\n"
@@ -42194,8 +44065,8 @@ msgstr "输出栅格文件的标题"
 #~ "输出栅格文件的名称"
 
 #, fuzzy
-#~ msgid "Default: input"
-#~ msgstr "离散化错误 (地图单位)"
+#~ msgid "Also produce maximum spotting distance"
+#~ msgstr "同时生成最大的测定点距离"
 
 #, fuzzy
 #~ msgid "Displays thematic vector map"
@@ -42255,7 +44126,7 @@ msgstr "输出栅格文件的标题"
 #~ msgstr "量度"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (.base, .max, .maxdir, .spotdist)"
+#~ msgid "Name of output basename raster map(s)"
 #~ msgstr ""
 #~ "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 #~ "输出栅格图的名称\n"
@@ -42263,32 +44134,70 @@ msgstr "输出栅格文件的标题"
 #~ "输出栅格文件的名称"
 
 #, fuzzy
-#~ msgid "Also produce maximum spotting distance"
-#~ msgstr "同时生成最大的测定点距离"
+#~ msgid "Default: input"
+#~ msgstr "离散化错误 (地图单位)"
 
 #, fuzzy
-#~ msgid "Display the "
-#~ msgstr "读取地图"
+#~ msgid ""
+#~ "Displays a thematic vector area map in the active frame on the graphics "
+#~ "monitor."
+#~ msgstr "选择字体,该字体用于图形监视器上文本的显示。"
 
 #, fuzzy
-#~ msgid "Unable to create vector map"
-#~ msgstr "不能创建输出地图 <%s>"
+#~ msgid "Text color or \"none\""
+#~ msgstr "文本颜色"
 
 #, fuzzy
-#~ msgid "Unable To create table: %s"
-#~ msgstr "无法创建文件 [%s]"
+#~ msgid "Color in GRASS format for drawing text"
+#~ msgstr "列出支持的格式然后退出"
+
+#~ msgid "Failed opening input dig file."
+#~ msgstr "无法打开输入的dig文件。"
+
+#~ msgid "dig_att file doesn't exist."
+#~ msgstr "dig_att文件不存在。"
+
+#~ msgid "Failed opening input dig_att file."
+#~ msgstr "无法打开输入的dig_att文件。"
 
 #, fuzzy
-#~ msgid "Not enough memory"
-#~ msgstr "没有足够的内存用于 az"
+#~ msgid "Attaching categories..."
+#~ msgstr "分类...\n"
+
+#~ msgid "Failed to attach an attribute (category %d) to a line."
+#~ msgstr "无法为线添加属性(类别%d)。"
 
 #, fuzzy
-#~ msgid "OLD_T_NEW Got a bad type code [%x]"
-#~ msgstr "系统错误:OLD_T_NEW得到一个错误的类型代码%x"
+#~ msgid "Line %d label: %d matched another label: %d."
+#~ msgstr "警告:线%d的标签:%d与以知标签:%d相同。"
 
 #, fuzzy
-#~ msgid "NEW_T_OLD Got a bad type code [%x]"
-#~ msgstr "系统错误:NEW_T_OLD得到一个错误的类型代码%x"
+#~ msgid "Writing new file..."
+#~ msgstr "写入新文件...\n"
+
+#, fuzzy
+#~ msgid "[%d] points and lines written to output file."
+#~ msgstr "%-5d个点和线写入输出文件。\n"
+
+#, fuzzy
+#~ msgid "[%d] centroids written to output file."
+#~ msgstr "%-5d个质心写入输出文件。\n"
+
+#, fuzzy
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "输入的 2D 矢量地图的名称"
+
+#, fuzzy
+#~ msgid "Endian of input vector map"
+#~ msgstr "输入的 2D 矢量地图的名称"
+
+#, fuzzy
+#~ msgid "No category labels (dig_cats) found, no table created"
+#~ msgstr "未发现类别标签(dig_cats),不创建任何表。\n"
+
+#, fuzzy
+#~ msgid "Unable to open dig_cats file"
+#~ msgstr "无法打开输出文件 <%s>"
 
 #, fuzzy
 #~ msgid "Reading dig file..."
@@ -42397,117 +44306,116 @@ msgstr "输出栅格文件的标题"
 #~ msgstr "%-5d个类别读入内存。\n"
 
 #, fuzzy
-#~ msgid "No category labels (dig_cats) found, no table created"
-#~ msgstr "未发现类别标签(dig_cats),不创建任何表。\n"
+#~ msgid "OLD_T_NEW Got a bad type code [%x]"
+#~ msgstr "系统错误:OLD_T_NEW得到一个错误的类型代码%x"
 
 #, fuzzy
-#~ msgid "Unable to open dig_cats file"
-#~ msgstr "无法打开输出文件 <%s>"
-
-#~ msgid "Failed opening input dig file."
-#~ msgstr "无法打开输入的dig文件。"
-
-#~ msgid "dig_att file doesn't exist."
-#~ msgstr "dig_att文件不存在。"
-
-#~ msgid "Failed opening input dig_att file."
-#~ msgstr "无法打开输入的dig_att文件。"
+#~ msgid "NEW_T_OLD Got a bad type code [%x]"
+#~ msgstr "系统错误:NEW_T_OLD得到一个错误的类型代码%x"
 
 #, fuzzy
-#~ msgid "Attaching categories..."
-#~ msgstr "分类...\n"
-
-#~ msgid "Failed to attach an attribute (category %d) to a line."
-#~ msgstr "无法为线添加属性(类别%d)。"
+#~ msgid "One or more coordinates"
+#~ msgstr "z 坐标的偏移值"
 
 #, fuzzy
-#~ msgid "Line %d label: %d matched another label: %d."
-#~ msgstr "警告:线%d的标签:%d与以知标签:%d相同。"
+#~ msgid "Name of elevation map"
+#~ msgstr "高程栅格图的名称"
 
-#, fuzzy
-#~ msgid "Writing new file..."
-#~ msgstr "写入新文件...\n"
+#~ msgid "Char string to represent no data cell"
+#~ msgstr "表示无数据像元的字符串"
 
-#, fuzzy
-#~ msgid "[%d] points and lines written to output file."
-#~ msgstr "%-5d个点和线写入输出文件。\n"
+#~ msgid "Unknown metric: [%s]."
+#~ msgstr "未知的量度:[%s]"
 
 #, fuzzy
-#~ msgid "[%d] centroids written to output file."
-#~ msgstr "%-5d个质心写入输出文件。\n"
+#~ msgid "Error reading category file for <%s>"
+#~ msgstr "为 <%s> 读取类别文件时发生错误。"
 
 #, fuzzy
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "输入的 2D 矢量地图的名称"
+#~ msgid "Error in reading color file for <%s>"
+#~ msgstr "为 <%s> 读取色彩文件时发生错误。"
 
-#, fuzzy
-#~ msgid "Endian of input vector map"
-#~ msgstr "输入的 2D 矢量地图的名称"
+#~ msgid "String representing no data cell value"
+#~ msgstr "代表无数据像元值的字符串"
 
 #, fuzzy
-#~ msgid "Unknown raster map type"
-#~ msgstr "只打印栅格图的类型"
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "栅格图层的表面插值工具。"
 
 #, fuzzy
-#~ msgid "Performing map %s + %s"
-#~ msgstr "读取地图 %s 时发生错误"
+#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
+#~ msgstr "输出栅格文件的标题"
 
 #, fuzzy
-#~ msgid "One or more coordinates"
-#~ msgstr "z 坐标的偏移值"
+#~ msgid ""
+#~ "Computes anisotropic cumulative cost of moving between different "
+#~ "geographic locations on an input elevation raster map whose cell category "
+#~ "values represent elevation combined with an input raster map layer whose "
+#~ "cell values represent friction cost."
+#~ msgstr ""
+#~ "输出一个栅格图层来显示在输入栅格图上不同位置间移动时的累计成本,输入栅格图"
+#~ "的像元类别值表示成本。"
 
-#~ msgid "Not enough memory for adx"
-#~ msgstr "没有足够的内存用于 adx"
+#~ msgid "Name of layer to be used for INTENSITY"
+#~ msgstr "亮度图层的名称"
 
-#~ msgid "Not enough memory for ady"
-#~ msgstr "没有足够的内存用于 ady"
+#~ msgid "Name of layer to be used for SATURATION"
+#~ msgstr "饱和度图层的名称"
 
-#~ msgid "Not enough memory for adxx"
-#~ msgstr "没有足够的内存用于 adxx"
+#~ msgid "Name of output layer to be used for GREEN"
+#~ msgstr "输出的绿色图层的名称"
 
-#~ msgid "Not enough memory for adyy"
-#~ msgstr "没有足够的内存用于 adyy"
+#~ msgid "Name of output layer to be used for BLUE"
+#~ msgstr "输出的蓝色图层的名称"
 
-#~ msgid "Not enough memory for adxy"
-#~ msgstr "没有足够的内存用于 adxy"
+#~ msgid "Surface generation program."
+#~ msgstr "表面生成程序。"
 
-#~ msgid "Cannot create tree"
-#~ msgstr "无法创建树"
+#, fuzzy
+#~ msgid ""
+#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
+#~ msgstr "r.flow 不支持经纬度数据库。请使用 'r.watershed' 计算流的积聚。"
 
-#~ msgid "Cannot create tree info"
-#~ msgstr "无法创建树的信息"
+#~ msgid "%s=%s - illegal number of interpolation points"
+#~ msgstr "%s=%s - 非法的内插点数"
 
 #, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "将栅格图转化为矢量图层。"
+#~ msgid "Interpolating raster map <%s>... %d row... "
+#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
+#~ msgstr[0] "内插栅格图 <%s> ... %d 行 ... "
+#~ msgstr[1] "内插栅格图 <%s> ... %d 行 ... "
 
 #, fuzzy
-#~ msgid "Site file <%s> not found"
-#~ msgstr "未找到3D视图文件<%s>"
+#~ msgid "Prefix for output raster map(s)"
+#~ msgstr "输出栅格图的名称"
 
 #, fuzzy
-#~ msgid "Unable to guess site_list format"
-#~ msgstr "输入文件"
+#~ msgid "String to represent no data cell"
+#~ msgstr "表示无数据像元的字符串"
 
-#, fuzzy
-#~ msgid "Failed to allocate site structure"
-#~ msgstr "无法为字符串分配内存"
+#~ msgid "Character to represent no data cell"
+#~ msgstr "用来表示无数据像元的字符"
 
 #, fuzzy
-#~ msgid "Transferring sites to vector point map..."
-#~ msgstr ""
-#~ "\n"
-#~ "现在开始转换矢量...\n"
+#~ msgid "Binary raster file to be imported"
+#~ msgstr "将要导入的栅格文件"
+
+#~ msgid "Name of spread path raster map"
+#~ msgstr "蔓延路径栅格图的名称"
+
+#~ msgid "Run verbosely"
+#~ msgstr "以详细模式运行"
 
 #, fuzzy
-#~ msgid "%d sites written."
-#~ msgstr "%d 个点写入矢量文件"
+#~ msgid "%s available in mapset <%s>:"
+#~ msgstr "列出可用的格式并退出"
 
-#~ msgid "Name of layer to be used for INTENSITY"
-#~ msgstr "亮度图层的名称"
+#~ msgid "Null value indicator"
+#~ msgstr "空值指示符"
 
-#~ msgid "Name of layer to be used for SATURATION"
-#~ msgstr "饱和度图层的名称"
+#, fuzzy
+#~ msgid "Suppress warnings"
+#~ msgstr "禁止页眉"
 
 #, fuzzy
 #~ msgid ""
@@ -42524,45 +44432,34 @@ msgstr "输出栅格文件的标题"
 #~ msgstr "需要查询的已有栅格地图的名称"
 
 #, fuzzy
-#~ msgid "Outputs a raster map showing the anisotropic cumulative cost."
-#~ msgstr "输出栅格文件的标题"
+#~ msgid "Name of input raster map(s)"
+#~ msgstr "输入栅格图的名称"
 
 #, fuzzy
-#~ msgid ""
-#~ "Computes anisotropic cumulative cost of moving between different "
-#~ "geographic locations on an input elevation raster map whose cell category "
-#~ "values represent elevation combined with an input raster map layer whose "
-#~ "cell values represent friction cost."
-#~ msgstr ""
-#~ "输出一个栅格图层来显示在输入栅格图上不同位置间移动时的累计成本,输入栅格图"
-#~ "的像元类别值表示成本。"
-
-#~ msgid "Name of output layer to be used for GREEN"
-#~ msgstr "输出的绿色图层的名称"
-
-#~ msgid "Name of output layer to be used for BLUE"
-#~ msgstr "输出的蓝色图层的名称"
+#~ msgid "The output type of the space time dataset"
+#~ msgstr "新的栅格文件的名称"
 
 #, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "栅格图层的表面插值工具。"
+#~ msgid "Type of the aggregation space time dataset, default is strds"
+#~ msgstr "新的栅格文件的名称"
 
-#~ msgid "Surface generation program."
-#~ msgstr "表面生成程序。"
+#, fuzzy
+#~ msgid "Prefix for output raster maps (default: input)"
+#~ msgstr "输出栅格文件的标题"
 
 #, fuzzy
 #~ msgid ""
-#~ "Lat/long databases not supported by r.surf.idw2. Use r.surf.idw instead!"
-#~ msgstr "r.flow 不支持经纬度数据库。请使用 'r.watershed' 计算流的积聚。"
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr "计算栅格地图中非空像元的一元统计值"
 
-#~ msgid "%s=%s - illegal number of interpolation points"
-#~ msgstr "%s=%s - 非法的内插点数"
+#, fuzzy
+#~ msgid "Invalid distance"
+#~ msgstr "地图北向格网坐标"
 
 #, fuzzy
-#~ msgid "Interpolating raster map <%s>... %d row... "
-#~ msgid_plural "Interpolating raster map <%s>... %d rows... "
-#~ msgstr[0] "内插栅格图 <%s> ... %d 行 ... "
-#~ msgstr[1] "内插栅格图 <%s> ... %d 行 ... "
+#~ msgid "Layer number"
+#~ msgstr "图层 %d"
 
 #, fuzzy
 #~ msgid "allocation"
@@ -42573,108 +44470,144 @@ msgstr "输出栅格文件的标题"
 #~ msgstr "读取 %s ..."
 
 #, fuzzy
-#~ msgid "Name of elevation map"
-#~ msgstr "高程栅格图的名称"
+#~ msgid "Please specify input= or file="
+#~ msgstr "请指定 z 字段。"
 
-#~ msgid "Char string to represent no data cell"
-#~ msgstr "表示无数据像元的字符串"
+#, fuzzy
+#~ msgid "invalid value for fprange= <%s>"
+#~ msgstr "%s:无法为 [%s] 读取范围"
 
 #, fuzzy
-#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgid "Either -p or output= must be given"
 #~ msgstr "必须指定'from_table'或'select'选项。"
 
 #, fuzzy
-#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
-#~ msgstr "必须指定'from_table'或'select'选项。"
+#~ msgid "Please specify output= or outfile="
+#~ msgstr "请指定 z 字段。"
 
-#~ msgid "Unknown metric: [%s]."
-#~ msgstr "未知的量度:[%s]"
+#, fuzzy
+#~ msgid "Please specify output= and samplingpos="
+#~ msgstr "请指定 z 字段。"
 
 #, fuzzy
-#~ msgid "Error reading category file for <%s>"
-#~ msgstr "为 <%s> 读取类别文件时发生错误。"
+#~ msgid "Please specify input= or infile="
+#~ msgstr "请指定 z 字段。"
 
 #, fuzzy
-#~ msgid "Error in reading color file for <%s>"
-#~ msgstr "为 <%s> 读取色彩文件时发生错误。"
+#~ msgid "Please specify input= and datapos="
+#~ msgstr "请指定 z 字段。"
 
-#~ msgid "String representing no data cell value"
-#~ msgstr "代表无数据像元值的字符串"
+#, fuzzy
+#~ msgid "Display the "
+#~ msgstr "读取地图"
 
 #, fuzzy
-#~ msgid "Prefix for output raster map(s)"
-#~ msgstr "输出栅格图的名称"
+#~ msgid "One of options <%s> or <%s> must be given"
+#~ msgstr "必须指定'from_table'或'select'选项。"
 
 #, fuzzy
-#~ msgid "String to represent no data cell"
-#~ msgstr "表示无数据像元的字符串"
+#~ msgid "High Pass Filter Options"
+#~ msgstr "相关性"
 
-#~ msgid "Character to represent no data cell"
-#~ msgstr "用来表示无数据像元的字符"
+#, fuzzy
+#~ msgid "Name of elevation raster map"
+#~ msgstr "高程栅格图的名称"
 
 #, fuzzy
-#~ msgid "Binary raster file to be imported"
-#~ msgstr "将要导入的栅格文件"
+#~ msgid "coordinates of the outlet (east,north)"
+#~ msgstr "地图东向和北向格网坐标的起点"
 
-#~ msgid "Name of spread path raster map"
-#~ msgstr "蔓延路径栅格图的名称"
+#, fuzzy
+#~ msgid "No maps output"
+#~ msgstr "没有输出地图"
 
-#~ msgid "Run verbosely"
-#~ msgstr "以详细模式运行"
+#~ msgid "Not enough memory for adx"
+#~ msgstr "没有足够的内存用于 adx"
+
+#~ msgid "Not enough memory for ady"
+#~ msgstr "没有足够的内存用于 ady"
+
+#~ msgid "Not enough memory for adxx"
+#~ msgstr "没有足够的内存用于 adxx"
+
+#~ msgid "Not enough memory for adyy"
+#~ msgstr "没有足够的内存用于 adyy"
+
+#~ msgid "Not enough memory for adxy"
+#~ msgstr "没有足够的内存用于 adxy"
+
+#~ msgid "Cannot create tree"
+#~ msgstr "无法创建树"
+
+#~ msgid "Cannot create tree info"
+#~ msgstr "无法创建树的信息"
 
 #, fuzzy
-#~ msgid "%s available in mapset <%s>:"
-#~ msgstr "列出可用的格式并退出"
+#~ msgid "Unable To create table: %s"
+#~ msgstr "无法创建文件 [%s]"
 
-#~ msgid "Null value indicator"
-#~ msgstr "空值指示符"
+#, fuzzy
+#~ msgid "Not enough memory"
+#~ msgstr "没有足够的内存用于 az"
 
 #, fuzzy
-#~ msgid "Suppress warnings"
-#~ msgstr "禁止页眉"
+#~ msgid "Options <%s/%s> and <%s> are mutually exclusive"
+#~ msgstr "必须指定'from_table'或'select'选项。"
 
 #, fuzzy
-#~ msgid "High Pass Filter Options"
-#~ msgstr "相关性"
+#~ msgid "One of options <%s> or <%s> must be specified"
+#~ msgstr "必须指定'from_table'或'select'选项。"
 
 #, fuzzy
-#~ msgid "Name of input raster map(s)"
-#~ msgstr "输入栅格图的名称"
+#~ msgid "Option <%s> must be specified"
+#~ msgstr "必须指定'from_table'或'select'选项。"
 
 #, fuzzy
-#~ msgid "The output type of the space time dataset"
-#~ msgstr "新的栅格文件的名称"
+#~ msgid "Converts a GRASS site_lists file into a vector map."
+#~ msgstr "将栅格图转化为矢量图层。"
 
 #, fuzzy
-#~ msgid "Type of the aggregation space time dataset, default is strds"
-#~ msgstr "新的栅格文件的名称"
+#~ msgid "Site file <%s> not found"
+#~ msgstr "未找到3D视图文件<%s>"
 
 #, fuzzy
-#~ msgid "Prefix for output raster maps (default: input)"
-#~ msgstr "输出栅格文件的标题"
+#~ msgid "Unable to guess site_list format"
+#~ msgstr "输入文件"
 
 #, fuzzy
-#~ msgid "Name of elevation raster map"
-#~ msgstr "高程栅格图的名称"
+#~ msgid "Failed to allocate site structure"
+#~ msgstr "无法为字符串分配内存"
 
 #, fuzzy
-#~ msgid "coordinates of the outlet (east,north)"
-#~ msgstr "地图东向和北向格网坐标的起点"
+#~ msgid "Transferring sites to vector point map..."
+#~ msgstr ""
+#~ "\n"
+#~ "现在开始转换矢量...\n"
 
 #, fuzzy
-#~ msgid "No maps output"
-#~ msgstr "没有输出地图"
+#~ msgid "%d sites written."
+#~ msgstr "%d 个点写入矢量文件"
 
 #, fuzzy
-#~ msgid ""
-#~ "Calculates univariate statistics from the non-null cells for each "
-#~ "registered raster3d map of a space time raster3d dataset."
-#~ msgstr "计算栅格地图中非空像元的一元统计值"
+#~ msgid "Performing map %s + %s"
+#~ msgstr "读取地图 %s 时发生错误"
 
 #, fuzzy
-#~ msgid "Invalid distance"
-#~ msgstr "地图北向格网坐标"
+#~ msgid "Unable to create vector map"
+#~ msgstr "不能创建输出地图 <%s>"
 
 #, fuzzy
-#~ msgid "Layer number"
-#~ msgstr "图层 %d"
+#~ msgid "Unknown raster map type"
+#~ msgstr "只打印栅格图的类型"
+
+#, fuzzy
+#~ msgid "File '%s' already exists and will be overwritten"
+#~ msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+
+#, fuzzy
+#~ msgid "Option <%s> or <%s> must be specified"
+#~ msgstr "必须指定'from_table'或'select'选项。"
+
+#, fuzzy
+#~ msgid "One of -%c or options <%s>, <%s> or <%s> must be specified"
+#~ msgstr "必须指定'from_table'或'select'选项。"
diff --git a/locale/po/grasswxpy_cs.po b/locale/po/grasswxpy_cs.po
index cbfd49e..0c5d49f 100644
--- a/locale/po/grasswxpy_cs.po
+++ b/locale/po/grasswxpy_cs.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_cs\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-04-09 18:58+0200\n"
 "Last-Translator: Jan Trochta <j.trochta at gmail.com>\n"
 "Language-Team: cs at li.org\n"
@@ -21,23 +21,23 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.8.4\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Vyberte adresář databáze GRASS GISu"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Vyberte lokaci GRASSu"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Vyberte mapset GRASSu"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "Adresář databáze GRASS GISu obsahuje lokaci."
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -46,7 +46,7 @@ msgstr ""
 "(kartografické zobrazení). Jedna lokace může představovat jeden projekt. "
 "Lokace obsahuje mapsety."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
@@ -54,29 +54,29 @@ msgstr ""
 "Mapset obsahuje gisová data, která se mohou vztahovat k určitému projektu, "
 "úkolu v rámci projektu, subregionu nebo uživateli."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Spustit sezení &GRASSu"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Procházet"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "No&vý"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "Vytvořit nový mapset ve vybrané lokaci"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "N&ová"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
@@ -85,122 +85,122 @@ msgstr ""
 "vytvořena, se spustí sezení GRASSu."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Př&ejmenovat"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Přejmenovat vybranou lokaci"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "O&dstranit"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Odstranit vybranou lokaci"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "Pře&jmenovat"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Přejmenovat vybraný mapset"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "Od&stranit"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Odstranit vybraný mapset"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Spuštění GRASS GISu %s %s"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Spustit sezení GRASSu"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Chyba"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "Nelze nastavit GRASS databázi. Zkontrolujte nastavení."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "CHYBA: Lokace <%s> nebyla nalezena\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "CHYBA: Mapset <%s> nebyl nalezen\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Chyba: {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "Importovat data?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Přejete si vytvořit nový mapset?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Vytvořit nový mapset"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Lokace <%s> vytvořena"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "Přejete si nyní nastavit výchozí nastavení regionu a jeho rozlišení?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
@@ -209,14 +209,14 @@ msgstr ""
 "Import <%(name)s> selhal.\n"
 "Důvod: %(msg)s"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -226,7 +226,7 @@ msgstr ""
 "\n"
 " Tento mapset nemůže být přejmenován."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -237,12 +237,12 @@ msgstr ""
 "\n"
 "Vložte nové jméno:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Zpráva"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -253,7 +253,7 @@ msgstr ""
 "\n"
 "Mapset <%s> již existuje v location."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -264,7 +264,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -275,7 +275,7 @@ msgstr ""
 "\n"
 "Lokace <%s> již v adresáři databáze GRASSu existuje."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -286,7 +286,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -296,7 +296,7 @@ msgstr ""
 "\n"
 "Tento mapset nemůže být smazán."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -308,11 +308,11 @@ msgstr ""
 "\n"
 "VŠECHNY MAPY tohoto mapsetu budou NENÁVRATNĚ SMAZÁNY!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Nelze odstranit mapset"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -323,41 +323,41 @@ msgstr ""
 "\n"
 "VŠECHNY MAPY této lokace budou NENÁVRATNĚ SMAZÁNY!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Nelze odstranit lokaci"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "Nelze nastavit GRASS databázi. Zkontrolujte nastavení."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Cesta '%s' neexistuje."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Zvolit adresář GRASS dat"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Vložte jméno nové mapsetu:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Mapset <%s> již existuje."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -366,17 +366,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Přejmenovat vybraný mapset"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Nelze vytvořit nový mapset: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -395,11 +395,11 @@ msgstr ""
 "Přejete si odstranit .gislock (k této operaci potřebujete příslušné "
 "oprávnění) a pokračovat?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -411,7 +411,7 @@ msgstr ""
 "Pokud je opravdu spuštěno jiné sezení GRASSu, můžete tímto poškodit data. "
 "Podívejte se radši ještě do správce procesů..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -422,7 +422,7 @@ msgstr ""
 "\n"
 "Detaily: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
@@ -431,11 +431,11 @@ msgstr ""
 "Název <%(name)s> není platným názvem lokace nebo mapsetu. Používejte pouze "
 "znaky ASCII kromě %(chars)s a mezery."
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Neplatný název"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -464,189 +464,189 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Nástrojová lišta pro georektifikaci"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Nastavení digitalizace"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr "Náhled kompozice okna"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Cílový displej"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 #, fuzzy
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Přizpůsobit cílový displej zdrojovému"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 #, fuzzy
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Přizpůsobit zdrojový displej cílovému"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Zobrazit celý region"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Zobrazit celý region"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Import vektorové mapy"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nelze otevřít vektorovou vrstvu <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Nebylo zvoleno nic pro extrahování."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr "Analýza selhala."
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Soubor již existuje"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Je potřeba nejméně %d vlicovacích bodů. Operace zrušena."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histogram"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Vektorové body"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -655,609 +655,610 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Rastrová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Načítá se rastrová vrstva <%s>..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Načítám rastrovou mapu"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Vybrat skupinu:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Vytvořit/upravit skupinu..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Vybrat skupinu:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Vybrat skupinu:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Vybrat skupinu:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Jméno Mapsetu:"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Jméno rastrové mapy:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Jméno vektorové mapy:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Klasifikace obrazových dat"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Klasifikace obrazových dat"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Barva"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Přiblížit na vybranou mapu"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Uložit výraz do souboru"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Vložte jméno nové mapsetu:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Import binárního souboru"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Export do obrazu"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Název nové vektorové mapy:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr "Exportovat atributovou tabulku"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Exportuje atributové tabulky v různých formátech."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Vektorová vrstva <%s> již existuje. Přejete si ji přepsat?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr "Vektor <%s> existuje"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Změnit úroveň průhlednosti"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Uložit výraz do souboru"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Odstranit vybranou vrstvu"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Export do obrazu"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Přidat vrstvu RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Upozornění"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Náhled"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr " / Přiblížit na mapu"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Přidat rastrovou vrstvu"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS Mapové okno: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Není co zobrazit (prázdná mapa). Operace ukončena."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Vyberte název souboru pro uložení obrázku (není potřeba zadávat příponu)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "Nebyla vybrána žádná vektorová mapa pro dotazování."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Vybrat rastrovou mapu:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Jméno rastrové mapy:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Jméno rastrové mapy:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Zpátky na 2D zobrazení"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Zpátky na 2D zobrazení"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Zavřít"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Kategorie (sloupec %s) chybí."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Nastavení serveru"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Hrubý:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Hrubý:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Barva:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Index ostrosti"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Šířka linie:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Velikost:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Dotazovat rastrovou/vektorovou vrstvu"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Dotazovat vybranou rastrovou/vektorovou vrstvu"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Uložit model"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Zvolte EPSG kód"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Spravovat Vlicovací body (GCP)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "Seznam vlicovacích bodů (GCP)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "Zdrojový displej"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "Cílový displej"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "Panel nástrojů vlicovacích bodů"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Správa panelu nástrojů vlicovacích bodů"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Nastavení stránky"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Náhled tisku"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Tisk okna"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Přiblížit na výpočetní region (nastaven pomocí g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Přiblížit na výchozí region"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Přiblížit na uložený region"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Nastavit výpočetní region podle aktuálního okna"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Uložit aktuální okno jako pojmenovaný region"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Jdi na vlicovací bod č."
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Povolený rozsah:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "RMS (střední kvadratická) chyba"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Dopředná: %(forw)s, Zpětná: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Nastavení georektifikace"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Nastavení georektifikace zrušeno"
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Vybrat typ mapy a lokaci/mapset"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Typ mapy pro georektifikaci"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "rastr"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vektor"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Vybrat zdrojovou lokaci:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Vybrat zdrojový mapset:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Před vybráním mapsetu musíte vybrat platnou lokaci"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "Abyste mohli pokračovat, musíte vybrat platnou lokaci a mapset"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Vybrat obrazovou/mapovou skupinu pro georektifikaci"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Vybrat skupinu:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "vytvořit skupinu pokud žádná neexistuje"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Přidat vektorovou vrstvu do skupiny...."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Přípona pro výstupní mapy:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Musíte vybrat platnou skupinu obrazů/map pokud chcete dále pokračovat"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Musíte vložit příponu k mapě pokud chcete dále pokračovat"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Vyberte mapy zobrazené pro vytvoření vlicovacích bodů"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Vyberte zdrojovou mapu k zobrazení:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Vyberte cílovou mapu k zobrazení:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Vyberte cílovou mapu k zobrazení:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Abyste mohli pokračovat, musíte vybrat zdrojovou mapu"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, fuzzy, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1266,28 +1267,28 @@ msgstr ""
 "ŽÁdná mapa ve skupine <%s>. \n"
 "Prosím upravte skupinu nebo vyberte jinou."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Spravovat Vlicovací body (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Je potřeba nejméně %d vlicovacích bodů. Operace zrušena."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "zdroj"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "cíl"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Nastavit souřadnice vlicovacím bodům"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1300,28 +1301,28 @@ msgstr ""
 "Východ: %(coor0)s \n"
 "Sever: %(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Zapisování souboru POINTS selhalo"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "soubor POINTS byl uložen pro skupinu <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Čtení souboru POINTS selhalo"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1336,38 +1337,38 @@ msgstr ""
 "7+ bodů je potřeba pro georektifikaci 2. řádu,\n"
 "10+ bodů je potřeba pro georektifikaci 3. řádu."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rektifikuji obrazy. prosím počkejte..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "transformuji <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rektifikuji obrazy. prosím počkejte..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Georektifikace vektorové mapy <%s< selhala"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "Nastavení správce vlicovacích bodů"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Ukončit Správce GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Uložit vlicovací body (GCP)?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 #, fuzzy
 msgid ""
 "Could not calculate RMS Error.\n"
@@ -1376,7 +1377,7 @@ msgstr ""
 "Nelze spočítat RMS chybu. \n"
 "Možná chyba s g.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 #, fuzzy
 msgid ""
 "Could not calculate new extends.\n"
@@ -1385,119 +1386,119 @@ msgstr ""
 "Nelze spočítat nový rozsah. \n"
 "možná chyba s g.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Přizpůsobit zdrojový displej cílovému"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Přizpůsobit cílový displej zdrojovému"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "použít"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "V souřadnice zdroje "
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "S souřadnice zdroje"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "Cílová V souřadnice"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "Cílová S souřadnice"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Dopředná chyba"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Zpětná chyba"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Vytvořit skupinu vektorových map"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Vybrat vektorovou mapu pro přidání do skupiny:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Upravit vlicovací body"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Vlicovací bod (GCP) číslo"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "Zdroj V:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "Cílová V souřadnice:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "Zdroj S:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "Cílová S souřadnice:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Použít změny jen pro toto sezení"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Použít změny a uložit je do souboru s uživatelským nastavením (jako výchozí "
 "pro další sezení)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Zavřít dialog "
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Symbolika"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Zvýraznit pouze bod s největší RMS"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Zvýraznit RMS chybu > M + SO * faktor:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1507,66 +1508,66 @@ msgstr ""
 "průměr + směrodatná odchylka * daný faktor. \n"
 "Doporučené hodnoty faktoru jsou mezi 1 a 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Nastavení symbolu"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Barva pro vysokou RMS chybu:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Barva pro vybraný vlicovací bod:"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Barva pro nevybraný vlicovací bod:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Zobrazit nepoužívané vlicovací body"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Velikost symbolu:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Rektifikace"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Vybrat metodu georektifikace pro rastrovou vrstvu"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "georektifikace 1. řádu"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "georektifikace 2. řádu"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "georektifikace 3.řádu"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Vyberte vstupní vektorovou mapu:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "Spojit s výpočetním regionem v cílové lokaci"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "Prahová hodnota RMS musí být > 0"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1574,39 +1575,39 @@ msgstr ""
 "Prahová hodnota RMS je < 1 \n"
 "Příliš mnoho bodů může být zvýrazněno"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Nastavení Správce vlicovacích bodů uloženo do souboru '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Vektorová digitalizace"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Vektorová digitalizace není dostupná"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Nová vektorová mapa <%s> byla vytvořena"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1614,255 +1615,255 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Aktualizovat kategorie"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Nebyla vybrána žádná vektorová mapa pro editaci."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Dialog přiřazení Z souřadnice jako popisku"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Nastavení digitalizace"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Použít změny pro toto sezení"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "Zavřít dialog a uložit uživatelské nastavení"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Zavřít dialog a ignorovat změny"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Obecné"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Zobrazit"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Šířka linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Přichycení"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Práh pro přichycení"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "pixelů obrazovky"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "mapových jednotek"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Přichytávat také k opěrným bodům"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Práh přichycení je %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Vybrat vektorový prvek"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Zvolit prahovou hodnotu"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Vybrat jenom prvky uvnitř vyznačené oblasti"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 "Jako výchozí jsou vybrány všchny prvky, které zasahují do vyznačené oblasti"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Zkontrolovat zdvojené prvky"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Přidat novou hranici"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Rozdělit linie na průsečících"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "DIgitalizovat novou plochu"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Uložit změny"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Uložit změny při ukončení"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Nástroj pro dotazování"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Vybrat nástroj pro dotazování"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Vybrat myší"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "délka"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Vybrat linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "kratší než"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "delší než"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "přívěsek"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Vybrat dangles"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atributy"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Digitalizovat nový prvek"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Přidat nový záznam do atributové tabulky"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Vrstva"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Kategorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Mód"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Použít další"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Číslo kategorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Mód kategorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Manuálně"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Žádná kategorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Odstranit existující prvek(y)"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Odstranit záznam s tabulky"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Atributy geometrie prvku"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "plocha"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "Obvod"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
@@ -1870,112 +1871,112 @@ msgstr ""
 "Poznámka: Tato nastavení jsou uložena v souboru pracovní plochy, ne v "
 "nastavení vektorové digitalizace."
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Digitalizovat nový segment linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Digitalizovat novou linii/hranici"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Zvýraznění"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Zvýraznění (zdvojené prvky)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Bod"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Hranice (nikoliv plocha)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Hranice (jedna plocha)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Hranice (dvě plochy)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centroid (uvnitř plochy)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroid (mimo plochu)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroid (duplicitní uvnitř plochy)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Uzel (jedna linie)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Uzel (dvě linie)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Opěrný bod"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Plocha (uzavřené hranice + centroid)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Směr"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Zakázat přichycení"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr "Práh přichycení je %(value).1f %(units)s (podle výpočetního regionu)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Nastavení digitizéru uloženo do souboru <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "Nastavení digitalizace"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Nebyla vybrána žádná vektorová mapa pro editaci."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1983,79 +1984,79 @@ msgid ""
 "Reason: %s"
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Je potřeba nejméně %d vlicovacích bodů. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Typ prvku:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Vytvořit body podél linií"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Seznam kategorií - klikněte pravým tlačítkem pro vymazání"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Přidat novou kategorii"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Uložit změny"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignoruj změny a zavři dialog"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Uložit změny a zavřít"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "ID prvku:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2066,253 +2067,253 @@ msgstr ""
 "Identifikátor vrstvy a kategorie musí být celé číslo.\n"
 "Identifikátor vrstvy navíc větší než nula."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Odstranit vybrané"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Odstranit vše"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Znovu načíst"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Nelze modifikovat vektorovou mapu."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d linií vybráno pro označení z souřadnice"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Nastavit hodnotu"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Počáteční hodnota"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Krok"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Seznam zdvojených prvků"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "ID prvku"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Vrstva (Kategorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Přidat nový bod"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Levé: nový bod"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Přidat novou linii"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "Levé: nový bod; Ctrl+levé: zpět poslední bod; Pravé: uzavřít linii"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Přidat novou hranici"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Přidat nový centroid"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr "Digitalizovat novou plochu (hranice bez kategorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Vytvořit mnohonásobné linie z linií a hranic."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Levé: Vybrat; Střední: zrušit výběr; Pravé: Potvrzení výběru"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Odstranit vybrané body, linie, hranice nebo centroidy"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr "Odstranit vybrané plochy"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Zobrazit/aktualizovat atributy"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Levé: Vybrat"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Zobrazit/aktualizovat kategorie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Otočit vybrané linie/hranice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Spojit vybrané linie/hranice (pouze na uzlech)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Přemístit opěrný bod"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Přejmenovat vybraný mapset"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Ukončit digitalizaci"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Ukončit digitalizaci a uložit změny"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Manuál vektorové digitalizace"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Zobrazit manuál vektorové digitalizace"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Další nástroje (kopírovat, otočit, spojit, atd.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Zpět"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Zpět předchozí změny"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr "Znovu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Zpět předchozí změny"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Rozdělit vybrané linie/hranice na průsečíku"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Spojit vybrané linie/hranice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Kopírovat kategorie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Kopírovat prvky z podkladové vektorové mapy"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Zobrazit atributy"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Konverze typů vektorových prvků"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Otočit vybrané linie/hranice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Připojit vybrané linie/hranice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Spojit vybrané linie/hranice (pouze na uzlech)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "rozdělit linii/hranici"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Dotazovat prvky"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Přiřazení Z souřadnice pro popisky u 3D linií"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Vybrat vektorovou mapu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Vektorová mapa není 3D. Operace ukončena."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Vybrat vektorovou mapu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2321,63 +2322,64 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr "Chyba digitalizace"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Prosím počkejte, otevírá se vektorová mapa <%s> pro editaci..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr "Vektorová digitalizace"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Chcete uložit změny do vektorové mapy <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Uložit změny?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Prosím počkejte, zavírám a buduji topologii pro vektorovou mapu <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Zavřít dialog při ukončení"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Nová vektorová mapa"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr "Měření ukončeno"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2386,182 +2388,202 @@ msgstr ""
 "Klikněte levým tlačítkem myši a posunujte myš pro měření vzdálenosti. "
 "%sDvojklik smaže předchozí měření."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Měření vzdálenosti"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Měření vzdálenosti:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segment"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "celková vzdálenost"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "azimut"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr "stupňů (po směru od severu podle mapy)"
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr "Měření plochy:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr "Plocha: {area} {unit}\n"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr "legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr "měřítko"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr "směrová růžice"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' zkopírováno do schránky"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Panel nástrojů vlicovacích bodů"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' zkopírováno do schránky"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+#, fuzzy
+msgid "Hide statusbar"
+msgstr "Ukázat nastavení"
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Ukázat nastavení"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Překrýt další vrstvou"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Série rastrových map"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Prosím čekejte, exportuji obrázek..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Přiblížit na uložený region"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 msgid "Set compulational region from named region"
 msgstr "Nastavit výpočetní region podle pojmenovaného regionu"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Region <%s> nebyl nalezen. Operace ukončena."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Uložit rozsah okna do souboru regionu"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 msgid "Save computational region to region file"
 msgstr "Uložit výpočetní region do souboru regionu"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Upozornění"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "Zobr. výpoč. region"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Test"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Písmo:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Nastavit písmo"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2569,164 +2591,527 @@ msgstr ""
 "Přesuňte myší (v módu ukazatele) na novou pozici.\n"
 "Dvojklik pro změnu nastavení."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
-msgstr "GRASS GIS grafické modelování"
-
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "Modelování"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Prvky"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "Proměnné"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "%s <%s> již v aktuálním mapsetu existuje. Přejete si ji přepsat?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr "Editor Pythonu"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Přepsat?"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Výstup příkazů"
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "Název lokace GRASSu:"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Přejmenovat"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Přejmenovat mapset"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Vyhodnocuji model..."
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "Překresluji model..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "Chcete uložit změny v modelu?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr "Chcete uložit současné nastavení do souboru modelu?"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Nebyla vybrána žádná vektorová mapa pro editaci."
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Ukončit Grafické modelování"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "Kopírovat tabulku"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Smazat dočasná data"
+msgid "Failed to copy map: new map has the same name"
+msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Chcete trvale odstranit data? %s"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "%s <%s> již v aktuálním mapsetu existuje. Přejete si ji přepsat?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "Smazat dočasná data"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Spouštím modul"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
-msgstr " %d map bylo smazáno ze současného mapsetu"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "Spojit s výpočetním regionem v cílové lokaci"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"Současný model není prázdný. Přejete si uložit aktuální nastavení do souboru "
-"modelu?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "Vytvořit nový model?"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "Odstranit mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr "Vyberte model ze souboru"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Smazat"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "GRASS soubor modulu (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "odstranit zdvojené prvky"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
-msgstr "%(items)d prvků (%(actions)d akcí) načteno do modelu"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Displej"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "Soubor s modelem <%s> již existuje. Přejete si tento soubor přepsat?"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "Uložit model"
+#: ../gui/wxpython/datacatalog/tree.py:809
+#, fuzzy
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "Soubor <%s> byl uložen"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "Zobr. výpoč. region"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr "Vybrat soubor pro uložení aktuálního modelu"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr " %d map bylo smazáno ze současného mapsetu"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "Model je prázdný. Není co vyhodnotit."
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Kopírovat"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Vyhodnocuji model..."
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "&Rastr"
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Zobrazit mapu"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "&Vytvořit mapset"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3D rastrový mapový kalkulátor"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3D rastrový mapový kalkulátor"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
-"Model není platný.\n"
-"\n"
-"%s"
-
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "Model je platný"
+"Současná location je <%(loc)s>.\n"
+"Současný mapset je <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Model exported to <%s>"
-msgstr "Model exportován do <%s>"
+msgid "Current mapset is <%s>."
+msgstr "Současný mapset je <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
-msgid "Comment:"
-msgstr "Komentář:"
+#: ../gui/wxpython/datacatalog/catalog.py:33
+#, fuzzy
+msgid "Data catalog"
+msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
-msgid "Add comment"
-msgstr "Přidat komentář"
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Název lokace GRASSu:"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Klikněte pro nastavení vrstev "
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Hledat modul"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Prosím vyberte čistící nástroj, který chcete posunout dolů"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Chcete uložit změny v modelu?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Uložit změny"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Nelze vytvořit profil rastrové mapy."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Nelze vytvořit vektorovou mapu <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Vykreslit"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Vytvořit novou tabulku barev pro rastrovou mapu"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Vytvořit novou vektorovou mapu"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+msgid "Name for new raster map:"
+msgstr "Název nové rastrové vrstvy:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Vybrat vektorovou mapu"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Jméno rastrové mapy:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Počítám index tvaru rastrové mapy"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"Vektorová mapa <%s> již existuje v současném mapsetu. Přejete si tuto mapu "
+"přepsat?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+msgid "Digitize area"
+msgstr "DIgitalizovat plochu"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+msgid "Digitize line"
+msgstr "Digitalizovat linii"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+msgid "Digitize point"
+msgstr "Digitalizovat bod"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Překrývat rastrové mapy"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+msgid "Quit raster digitizer"
+msgstr "Ukončit digitalizaci rastru"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Vybrat rastrovou mapu:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Hodnoty buňky"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Šířka:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "rastrová mapa"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr "GRASS GIS grafické modelování"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "Modelování"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Prvky"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "Proměnné"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr "Editor Pythonu"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Výstup příkazů"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "Překresluji model..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "Chcete uložit změny v modelu?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr "Chcete uložit současné nastavení do souboru modelu?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Ukončit Grafické modelování"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Smazat dočasná data"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Chcete trvale odstranit data? %s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "Smazat dočasná data"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr " %d map bylo smazáno ze současného mapsetu"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"Současný model není prázdný. Přejete si uložit aktuální nastavení do souboru "
+"modelu?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "Vytvořit nový model?"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr "Vyberte model ze souboru"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "GRASS soubor modulu (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr "%(items)d prvků (%(actions)d akcí) načteno do modelu"
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "Soubor s modelem <%s> již existuje. Přejete si tento soubor přepsat?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "Uložit model"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "Soubor <%s> byl uložen"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr "Vybrat soubor pro uložení aktuálního modelu"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "Model je prázdný. Není co vyhodnotit."
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Vyhodnocuji model..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"Model není platný.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "Model je platný"
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr "Model exportován do <%s>"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+msgid "Comment:"
+msgstr "Komentář:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+msgid "Add comment"
+msgstr "Přidat komentář"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "wxGUI Grafické modelování"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2737,384 +3122,382 @@ msgstr ""
 "Čtení souboru modelu <%s> selhalo. \n"
 "Neplatný soubor, nelze parsovat XML dokument."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "Prosím čekejte, načítám model..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "Zápis aktuálního nastavení do souboru modelu selhalo."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Nelze otevřít soubor <%s> pro zápis."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Odstranit"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Zakázat"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Povolit"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr "Nastavit popisek"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr "Nastavit komentář"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Přidat vlicovací bod"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Odstranit vlicovací bod"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "přechodné"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Vlastnosti"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "Popisek:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Seznam proměnných - klikněte pravým tlačítkem pro vymazání"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Jméno"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Datový typ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "výchozí hodnota"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Popis"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Přidat novou proměnnou"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Ukazatel"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "desetinné číslo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "řetězec"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "region"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "soubor"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Přidat novou proměnnou do modelu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Seznam prvků - pravým klikem smažete"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Popisek"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr "Ve smyčce"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parametry"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Příkazy"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Skript Pythonu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Spustit"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Spustit skript Pythonu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Uložit skript Pythonu do souboru"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Nelze se přepnout do mapsetu <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Vyberte soubor k uložení"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Skript Pythonu (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Soubor <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Uložit soubor"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Nastavení modelování"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Vlastnosti prvku"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Zakázané:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Platné"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Neplatné:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Běží:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Velikost tvaru"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Šířka:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Výška:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Data"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Typ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Rastr:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "3D rastr:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Vektor:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabulka"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Smyčka"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Příkazy"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Vlastnosti modelu"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadata"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Příkazy"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Povolit přepsání existujících souborů"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Přijmout vlastnosti"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Název:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Popis:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autoři:"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "model"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Skript vytvořen pomocí wxGUi grafického modelování."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Přidat novou proměnnou"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Spouštím modul"
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Model je prázdný. Není co spustit."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3125,89 +3508,89 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Spustit modul?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 #, fuzzy
 msgid "Variables below not defined:"
 msgstr "Podmínka: nedefinována"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Rastrové mapy"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "3D rastrové mapy"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Vektorové mapy"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "neznámý"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<nedefinováno>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Podmínka:"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Podmínka: nedefinována"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Parametry modelu"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Smazat dočasná data"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Vlastnosti dat"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "Přidat do modelu příkaz GRASSu"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3217,7 +3600,7 @@ msgstr ""
 "\n"
 "Nelze přidat novou akci do modelu."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3228,46 +3611,46 @@ msgstr ""
 "\n"
 "Nelze přidat novou akci do modelu."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Vlastnosti dat"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Na"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "Data"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Příkaz:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Volitelné"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 #, fuzzy
 msgid ""
 "No relevant option found.\n"
@@ -3277,68 +3660,68 @@ msgstr ""
 "\n"
 "Nelze přidat novou akci do modelu."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Podmínka"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Vlastnosti smyčky"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Seznam prvků ve smyčce"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "Vlastnosti If-else"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Seznam prvků v bloku 'if' "
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Seznam prvků v bloku 'else' "
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Proměnná <%s> již v modelu existuje. přidání proměnné selhalo."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Přejete si odstranit všechny proměnné z modelu?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Smazat proměnné"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Ne"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Budiž"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3347,136 +3730,136 @@ msgstr ""
 "Nelze otevřít soubor\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "Rozlišení nemůže být 0"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "GRASS GIS grafické modelování"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Vytváření PDF..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Vytváření náhledu..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF vytvořeno"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3484,155 +3867,155 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "Soubor PostScriptu vytvořen"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Náhled tisku"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Náhled není k dispozici"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Náhled vytvořen"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Uložit soubor jako"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Definujte parametry pro %s projekci"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr "Náhled vytvoříte stisknutím tlačítka s ikonou zeleného trojúhelníku."
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 #, fuzzy
 msgid "wxGUI Cartographic Composer"
 msgstr "wxGUI Grafické modelování"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr "MĚŘÍTKO"
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr "SMĚROVÁ RŮŽICE"
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "popisky:"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "palec"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "bod"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "centimetr"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "milimetr"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "metry"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "kilometry"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "stopy"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "míle"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "námořní míle"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "pixel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "metr"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "stupeň"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Nelze načíst rastrovou mapu"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Jednotky:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3640,32 +4023,32 @@ msgstr ""
 "Pozice levého horního rohu\n"
 "od levého horního okraje papíru"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Pozice:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Vlastnosti dat"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Nastavit souřadnice vlicovacím bodům"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3673,648 +4056,648 @@ msgstr ""
 "Pozice od levého horního\n"
 "okraje papíru"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Velikost písma:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Vyberte barvu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Zavřít dialog a uložit změny"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Jednotky"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Formát"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Šířka:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Výška"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Výška"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Horní"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Spodní"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "Neplatný region"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Velikost obrazu"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Bod"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Analýza charakteristik krajiny"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "volitelné"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "Nastavení serveru"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "Aktualizovat nastavení"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "Měřítko mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "Mapová projekce"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "Přiblížit na vybranou mapu"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "Zvětšit podle uloženého regionu"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Výběr vrstvy"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Vrstva:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Region"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Měřítko a střed vrstvy"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Střed:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "V:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "S:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Měřítko:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Maximální rozlišení vrstvy (DPI):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Rámeček"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "barva rámečku"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "šířka rámečku (v bodech):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Rastrová vrstva"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "rastrová mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "rastrová mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "rastr:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Přidat mapu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "body"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "linie"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "plochy"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Datový typ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Přidat"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Vyčistit vektorovou mapu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Smazat"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Vlastnosti"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Nastavení rastru"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Nastavení vektorů"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Vlastnosti"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Typ prvku"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "centroidy"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "hranice"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Databázové spojení není definováno v DB souboru."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "Odstranit vrstvu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Maska"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Zabalit všechny kromě aktuální mapset"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Barva"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "linie"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Šířka:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Soubor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "barva sítě"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "vyberte barvu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Pravidla pro barvy"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "styl linie"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "symbol"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "Soubor WTK:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Procházet"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "Zadejte název souboru nebo zvolte soubor po klepnutí na Procházet"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Vyberte soubor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr " Velikost"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "velikost"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Odstranit všechny sloupce"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Změnit měřítko"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Odstranit všechny sloupce"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Šířka linie (v pixelech):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Interaktivně editovat hodnoty kategorií"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "styl linie"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "hrubý styl:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "Vyberte soubor"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "astra"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Vyberte vstupní soubor"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Šířka linie (v pixelech):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Legenda rastru"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Zobrazit legendu rastru"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Zdrojový rastr"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "aktuální rastr"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "vybrat rastr"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Typ legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Rozšířené nastavení legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "rozmezí"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Legenda vektoru"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Zobrazit legendu vektoru"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Zdrojové vektorové vrstvy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Zvolte vektorové vrstvy a jejich pořadí v legendě"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Vektorová vrstva"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Upravit popisek"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "nakreslit rámeček okolo legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Velikost a pozice"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Pozice"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "Ponecháte-li pole prázdné, použijí se výchozí hodnoty."
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4322,400 +4705,391 @@ msgstr ""
 "Šířka barevného symbolu (u linií)\n"
 "před textem legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Sloupce:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "Sloupce"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Nastavení písma"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "rastrová data"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Nastavení serveru"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Nastavení barev"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "použít barvu rámečku:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "použít barvu pozadí:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Nepodporované jednotky"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Délka:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "Délka měřítka je zadána v mapových jednotkách"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "Výška měřítka odpovídá skutečné výšce na papíru"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "výchozí"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Styl"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Typ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Počet částí:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Popsat každé"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "části"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "průhledné pozadí textu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "Není určena délka měřítka"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Vložte text:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Efekty pro text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "pozadí textu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "zvýraznění"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "rámeček textu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Posun"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "vodorovně (body):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "svisle (body):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Levé: nový bod"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Otočení textu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "otočit text (proti směru hodinových ručiček)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "Neby zadán žádný text!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Obrázek"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Vyberte adresář:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Vyberte adresář s obrázky"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr "Poznámka: podporován je pouze formát EPS"
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Měřítko a otočení"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Úhel otočení (stupně):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Otočení proti směru hodinových ručiček ve stupních"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "Emise"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "Nelze načíst soubor %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "Nebyl vybrán žádný obrázek"
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Směrová růžice"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Nastavení směrové růžice"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "symbol"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Vybrat myší"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr "Barva obrysu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "Průhledný"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Barva výplně:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Velikost a otočení"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Velikost (body):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Velikost symbolu v bodech"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Nastavení obdélníku"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Nastavení linie"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Šířka linie v bodech"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "vektorové popisky"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Vytvořit výstupní PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Vytvořit výstupní PDF"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "Zvětšit podle výchozího regionu"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Smazat vybraný objekt"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Zobrazit náhled"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 #, fuzzy
 msgid "Quit Cartographic Composer"
 msgstr "Ukončit Grafické modelování"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Přidat mapové prvky"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Měřítko"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Obdélník"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 msgid "Add overlays"
 msgstr "Přidat překryvy"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Přidat popisky"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr "Přidat jednoduchou grafiku: body"
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr "Přidat jednoduchou grafiku: linie"
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr "Přidat jednoduchou grafiku: obdélníky"
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Správce atributových tabulek GRASS GISu - "
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4724,141 +5098,135 @@ msgstr ""
 "Databázové nastavení není pro vektorovou mapu <%s> definováno v souboru DB. "
 "Toto nastavení můžete provést v panelu 'Správa vrstev'."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Prosím čekejte, načítají se atributová data..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Procházet data"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Správa tabulek"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Správa vrstev"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Zavřít Správce atributových tabulek"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Odstranit vybraný mapset"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Znovu načíst atributová data (pouze vybraná vrstva)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Počet nahraných záznamů: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Databázové spojení"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Dotaz"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Nastavit SQL příkaz jako výchozí"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Použít příkaz SQL ve správci atributových tabulek"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Zavřít dialog "
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Sloupce"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Hodnoty"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Získat všechny hodnoty"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Získat vzorek"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr "Přejít na:"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Zavřít dialog při souhlasu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "GRASS SQL pomocník (%(type)s): vektorová mapa<%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Ověřit"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Ověřit SQL příkaz"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "SQL příkaz nebyl ověřen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "SQL příkaz není platný"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4869,42 +5237,42 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "SQL příkaz je platný"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Akce"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "SQL příkaz není platný"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "SQL příkaz je platný"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Načítám data..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
@@ -4913,34 +5281,34 @@ msgstr ""
 "Atributová tabulka <%s> nebyla nalezena. Pro vytvoření tabulky se přepněte "
 "do záložky Správa tabulek'."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Sloupec <%(column)s> nebyl v tabulce <%(table)s> nalezen."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Lze zobrazit pouze 256 sloupců."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Sloupec <%(column)s> nebyl v tabulce <%(table)s> nalezen."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Limit 100000 záznamů překročen."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Neznámá hodnota"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr "Nelze překódovat hodnotu. Změňte kódování v nastavení GUI ('Atributy')"
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4953,200 +5321,200 @@ msgstr ""
 "\n"
 "Detaily: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Seřadit vzestupně"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "seřadit sestupně"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Spočítat (pouze číselné sloupce)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Mapový kalkulátor"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Základní statistiky 3D pixelu (voxel)"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Přidat nový sloupec"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Velikost plochy"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Délka linie"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Délka obvodu plochy"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Počet prvků pro každou kategorii"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "styl linie"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Azimut linie"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Přidat nový sloupec"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 "Nelze přidat sloupec do atributové tabulky. Nebyl zadáno jméno sloupce."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Sloupec <%(column)s> již v tabulce <%(table)s> existuje."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Atributová data - editace/správa záznamů pravé tlačítko myši"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabulka"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Dotaz SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Jednoduchý"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "použít SELECT a znovu načíst data"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "SQL Pomocník"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "SQL Pomocník"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Editovat vybraný záznam"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Vložit nový záznam"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Smazat vybrané záznamy"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Smazat všechny záznamy"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Vybrat vše"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Zrušit výběr"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Zvýraznit vybrané prvky"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Zvýraznit vybrané prvky a přiblížit"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Extrahovat vybrané prvky"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Odstranit zvolené prvky"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Modifikovat existující záznam"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Hodnota '%(value)s' musí být vložena jako %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Nelze modifikovat existující záznam."
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Záznam kategorie %d již v atributové tabulce existuje."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Kategorie (sloupec %s) chybí."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Nelze vložit nový záznam."
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5155,11 +5523,11 @@ msgstr ""
 "Vybrané záznamy dat (%d) budou natrvalo smazány z tabulky. Přejete si je "
 "smazat?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Smazat záznamy"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5168,15 +5536,15 @@ msgstr ""
 "Všechny záznamy dat (%d) budou natrvalo smazány z tabulky. přejete se je "
 "smazat?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Nebylo zvoleno nic pro extrahování."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Není co smazat"
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5187,7 +5555,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5200,32 +5568,32 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabulka <%s> - klikněte pravým tlačítkem pro vymazání sloupce"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Sloupce"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "délka"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Přejmenovat sloupec"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Nelze přejmenovat sloupec. Nebyl zadáno jméno sloupce."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5234,7 +5602,7 @@ msgstr ""
 "Nelze přejmenovat sloupec <%(column)s>. Sloupec <%(columnTo)s> již v tabulce "
 "<%(table)s> existuje."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5243,15 +5611,15 @@ msgstr ""
 "Nelze přejmenovat sloupec. Sloupec <%(column)s> v tabulce <%(table)s> "
 "neexistuje."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Odstranit zvolený sloupec"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Odstranit všechny sloupce"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5260,11 +5628,11 @@ msgstr ""
 "Vybraný sloupec '%s' bude NAVŽDY odstraněn z tabulky. Chcete tento sloupec "
 "smazat?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Odstranit sloupec"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5275,102 +5643,102 @@ msgstr ""
 "%s\n"
 "budou NAVŽDY odstraněny z tabulky. Chcete smazat tyto sloupce?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Seznam vrstev"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Odstranit také připojenou atributovou tabulku (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Název sloupce"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Datová délka"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Ovladač"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Databáze"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Klíč"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Přidat vrstvu"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Popis vrstvy"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Sloupec s klíčem"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Vložit záznam pro každou kategorii v tabulce"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Je potřeba přidat kategorie pomocí modulu v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Popis tabulky"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Název tabulky"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "Vytvořit &tabulku"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "Přid&at vrstvu"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "Nastavit výc&hozí"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Odstranit vrstvu"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Vrstva k odstranění"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Odstranit mapovou vrstvu"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Upravit vrstvu"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Upravit vrstvu"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5378,20 +5746,20 @@ msgstr ""
 "Nelze získat seznam tabulek.\n"
 "Prosím použijte db.connect pro nastavení parametrů databáze."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Nelze vytvořit novou atributovou tabulku. Nebyl zadán název tabulky nebo "
 "sloupec s klíčem."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 "Nelze vytvořit novou atributovou tabulku. Tabulka <%s> již existuje v "
 "databázi."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5400,41 +5768,41 @@ msgstr ""
 "Nelze přidat novou vrstvu k vektorové mapě <%(vector)s>. Vrstva %(layer)d "
 "již existuje."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Základní statistiky 3D pixelu (voxel)"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Kopírovat příkaz do schránky (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Nelze provést nastavení '%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 msgid "Unable to calculte standard deviation."
 msgstr "Nelze vypočítat směrodatnou odchylku."
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Základní statistiky 3D pixelu (voxel)"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5442,11 +5810,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Správce atributových tabulek GRASS GISu"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5455,197 +5823,198 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Vytvořit tabulku?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Zavřít dialog při zápis"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Nenalezeny žádné atributy"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Modifikovat atributy"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Změnit atributy"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Zobrazit atributy"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "Znovu &nahrát"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Zapsat"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Hodnota '%(value)s' musí být vložena jako %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Neznámý"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Nelze načíst téma ikonek..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2D zobrazení"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3D zobrazení"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 msgid "No workspace file selected."
 msgstr "Nebyl vybrán soubor pracovní plochy."
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr "Soubor %s nebyl nalezen"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Kvantizace"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Nebylo zvoleno nic pro extrahování."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Rektifikuji obrazy. prosím počkejte..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Rektifikuji obrazy. prosím počkejte..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr "Nástroj pro animace GRASS GISu"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr "Načítání dat"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5654,625 +6023,625 @@ msgstr ""
 "Čtení souboru pracovní plochy <%s> selhalo. \n"
 "Neplatný soubor, nelze parsovat XML dokument."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Nastavení 3D zobrazení bylo uloženo do souboru <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Přidat připojené vrstvy do stromu vrstev"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Vytvořit z databáze"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Odstranit mapovou vrstvu"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Přepsat?"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Jednoduchý"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Rozlišení:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Mód kategorie"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Nastavit volby"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "zobrazit"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "Soubor již existuje"
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Kvantizace"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Kvantizace"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Rozšířené"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Seznam tabulek"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Autorská práva"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "podle barvy"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "podle barvy"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Vyberte WTK soubor"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "styl linie"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Najít modul"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Nastavit volby"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Vlastnosti 3D zobrazení"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr "Soubor pracovní plochy:"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Paramentr nebyl nalezen: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Uložit region:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Načíst region:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "hodnoty"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Vytvořit z databáze"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Seznam rozšíření"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Upravit vlicovací body"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Kvantizace"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Dekorace"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "MPEG-1 export"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Časové razítko"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Přidat obrázek"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Přidat text"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Nastavení písma"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Vzorové body profilu"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Velikost obrazu"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Vyberte soubor"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Nastavit velikost obrazu"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr "SWF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "MPEG-1 export"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Předpona souboru:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Kvantizace"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Formát souboru:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Adresář:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Vyberte vstupní adresář"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Vyberte soubor DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Vyberte soubor k uložení"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Vyberte soubor DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "Soubor WTK:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr "Další volby:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "Soubor nebyl nalezen."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Export vektorové mapy"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "%s soubor chybí"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Časové razítko"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Vytvořit z databáze"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Dotazování rastrové vrstvy"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Vyčistit vektorovou mapu"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Dotazování rastrové vrstvy"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Import vektorových dat"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Vstupní data"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Vybrat rastrovou mapu:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Prosím vyberte čistící nástroj, který chcete posunout dolů"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 msgid "Animation Tool settings"
 msgstr "Nastavení nástroje pro animace"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Barva pozadí:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Barva pozadí:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Barva pozadí:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Časové razítko"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Dotaz na vektorovou mapu"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Neplatné:"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Změnit mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Zastavit"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pozastavit"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Přidat mapu stínovaného reliéfu"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Vložena neplatná hodnota. Operace zrušena."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr "Upravit bod"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Síťová analýza"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6280,48 +6649,48 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr " %d map bylo smazáno ze současného mapsetu"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Georektifikace vektorové mapy <%s< selhala"
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr "Vektorová vrstva s výsledkem analýzy neexistuje."
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6329,435 +6698,436 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Nelze nastavit "
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Přepsat?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Mapové vrstvy"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Přidat vrstvu"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Správa vrstev"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Upravit nebo vypsat kategorie"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Vybrat %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "Odstraní existující atributovou tabulu z vektorové mapy."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "typ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "topologie"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Počáteční bod"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Koncový bod"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "nový bod"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Číselný sloupec:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr "Nejkratší cesta %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Koncový bod"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr "Problém obchodního cestujícího %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr "Maximální tok %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Jméno zdroje"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Ukázat body"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "vytvoří Steinerův strom pro síť a zadané terminály"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Přepsat?"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Nástroj pro analýzu vektorové sítě GRASS GISu"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 msgid "Point list toolbar"
 msgstr "Nástrojová lišta Seznam bodů"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr "Nástrojová lišta Analýza"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr "Body pro analýzu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr "Nastavení analýzy:"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Body"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr "Maximální vzdálenost bodu od sítě:"
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Linie toku"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Výstup"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parametry"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 msgid "Add vector map into layer tree"
 msgstr "Přidat vektorovou vrstvu do stromu vrstev"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr "Vstupní tabulky"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr "Výsledné tabulky"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr "Načítání tabulek..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Načítám data..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 msgid "Input vector map does not exist."
 msgstr "Vstupní vektorová mapa neexistuje."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr "Analyzování..."
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Nastavení"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr "Výpočet uzlů..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 msgid "Other settings"
 msgstr "Ostatní nastavení"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr "Styl bodu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr "Styl výsledku analýzy:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Tabulka barev"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr "Invertovat barvy %s:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr "Barva linie:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr "Barva nepoužitého bodu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr "Barva vybraného bodu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr "Velikost bodu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr "Šířka bodu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr "Práh pro přichycení v pixelech:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr "Maximální počet výsledků v historii:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Nová vektorová mapa <%s> byla vytvořena"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr "Uložit výsledek analýzy"
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr "Vložit body z mapového okna"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr "Aktivovat přichytávání na uzly"
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr "Přidat nový bod"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 msgid "Delete selected point"
 msgstr "Odstranit vybraný bod"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr "Provést analýzu"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr "Přejít na předchozí výsledek analýzy"
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr "Přejít na další výsledek analýzy"
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr "Zobrazit výsledek analýzy"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr "Uložit dočasný výsledek"
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr "Nastavení analýzy vektorové sítě"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Zobrazit manuál"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr "Dostupné analýzy"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Vykreslit"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Zapnout/vypnout automatické překreslování"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Zobr. výpoč. region"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Zobrazit meze výpočetního regionu "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6768,16 +7138,16 @@ msgstr ""
 "výpočetní region bude zobrazen jako červený rámeček uvnitř zobrazeného "
 "regionu."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Mód displeje"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -6786,16 +7156,16 @@ msgstr ""
 "Nastavit zobrazené rozlišení jako výpočetní. Vychozí hodnota pro nová mapová "
 "okna může být upravena v okně 'Uživatelské nastavení grafického prostředí'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Rozlišení okna"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Nastavit zobrazené rozlišení jako výpočetní "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6803,11 +7173,11 @@ msgstr ""
 "Nastavit zobrazené rozlišení jako výpočetní. Vychozí hodnota pro nová mapová "
 "okna může být upravena v okně 'Uživatelské nastavení grafického prostředí'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Měřítko mapy"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
@@ -6815,33 +7185,33 @@ msgstr ""
 "Kvůli tomu, že má každý jinak nastaven monitor a rozlišení, nejsou tyto "
 "hodnoty skutečnými měřítky mapy, ale měly by se jim rozumně blížit."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Přejít na"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Kartografické zobrazení není definováno (zkontrolujte nastavení)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Chyba kartografického zobrazení (zkontrolujte nastavení)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Kartografické zobrazení"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Použít definované kartografické zobrazení"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
@@ -6849,45 +7219,45 @@ msgstr ""
 "Změní kartografické zobrazení souřadnic zobrazených ve stavovém řádku. "
 "Kartografické zobrazení lze definovat v nastavení GUI (karta 'Mapové okno')"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASKA"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Geometrie okna"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Souřadnice"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Rozsah"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr "Výpočetní region"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Mapové okno"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "Spustit GRASS seanci"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS Mapové okno: %(id)d - Location: %(loc)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6898,12 +7268,12 @@ msgstr ""
 "\n"
 "Detaily: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Nástrojová lištavektorové digitalizace"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6918,220 +7288,240 @@ msgstr ""
 "\n"
 "Detaily: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Spouštím 3D zobrazení..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Prosím čekejte, načítám data..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Prosím čekejte, načítám data..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "Zpátky na 2D zobrazení"
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Digitalizovat"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Nebyla vybrána žádná vektorová mapa pro editaci."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Přidat vrstvu s textem"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr "Nastavit výpočetní region podle aktuálního okna"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 msgid "Set computational region extent interactively"
 msgstr "Nastavit výpočetní region interaktivně"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 msgid "Set computational region from named region"
 msgstr "Nastavit výpočetní region podle pojmenovaného regionu"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr "Uložit výpočetní region jako pojmenovaný region"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Nástrojová lištavektorové digitalizace"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Měřítko mapy"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "zobrazit"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Nepodporovaný typ vrstvy '%s'"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Spustit nový displej"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, python-format
+msgid "Unable to create file <%s>"
+msgstr "Nelze vytvořit soubor <%s>"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Spustit nový displej"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
+msgid "Select vector feature(s)"
+msgstr "Vybrat vektorové prvky"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+msgid "Select features interactively from vector map"
+msgstr "Vybrat interaktivně prvky z vektorové vrstvy"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
 msgid "Show/hide scale bar"
 msgstr "Zobrazit/skrýt měřítko"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Zobrazit/skrýt legendu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr "Zobrazit/skrýt směrovou růžici"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analýza mapy"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Měření, profily, histogramy, ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Měření vzdálenosti"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr "Měření plochy"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profil mapy povrchu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Vytvořit histogram obrazu nebo rastrového souboru"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Vytvořit histogram rastrové vrstvy"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr "Analýza vektorové sítě"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Otočit 3D scénu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Táhnutím myší otáčet 3D scénu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "Režim průletu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 "Táhněte myší, podržením Ctrl změníte režim, podržením Shiftu zvětšíte "
 "rychlost"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Přiblížení kliknutím myší"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Oddálení kliknutím myší"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Režim 3D zobrazení není k dispozici"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Důvody: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Vektorová digitalizace není dostupná"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -7141,146 +7531,150 @@ msgstr ""
 "to brzy změní). Prosím kontrolujte nové verze GRASS GIS. Zatím můžete použít "
 "modul \"v.digit\" z nabídky vytvořit vektor."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+msgid "Raster digitizer"
+msgstr "Rastrová digitalizace"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Přejmenovat lokaci"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Přejmenovat lokaci"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Vytvořit RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Vytvořit novou location?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Přejmenovat"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Přejmenovat lokaci"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Upravit vlicovací body"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Přejmenovat lokaci"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Přejete si založit GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Vytvořit novou location?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Přejmenovat lokaci"
@@ -7290,329 +7684,329 @@ msgstr "Přejmenovat lokaci"
 msgid "Create new configuration file for r.li modules"
 msgstr "Vytvořit novou tabulku barev na základě pravidel"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Přejete si založit GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Vytvořit novou location?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Průvodce vytvořením location byl zavřen. Location nebyla vytvořena."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Vybrat typ mapy a location/mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Jméno pro nově vytvářenou %s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Rastrová map pro přepsání:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Vektorová mapa pro reklasifikaci:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Vektorová mapa pro reklasifikaci:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Odstranit mapovou vrstvu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Ukázat nastavení"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Parametry terénu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Regiony"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Vzorové body profilu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Pohybující se okno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Georektifikovat rastrové a vektorové mapy"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Vyberte soubor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Přejete si založit GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Chcete uložit změny do vektorové mapy <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Vybrat vektorový prvek"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Panel nástrojů vlicovacích bodů"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Pohybující se okno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Vybrat vektorovou mapu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Šířka:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Jméno rastrové mapy:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "tématická mapa s grafem"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Vzorové body profilu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Pohybující se okno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7620,187 +8014,201 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Shrnutí"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr "Název rastru:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr "Název vektoru:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr "Typ regionu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Typ mapové vrstvy:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Hranice regionu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Jméno Mapsetu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Šířka:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Velikost fontu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Vzdálenost k prvkům"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Jméno prvku:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Číselný sloupec:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Vymazat veškerý text ze shellu"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Jednoduchý"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Rastrová nebo vektorová vrstva <%s> nebyla nalezena"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Rastrová vrstva <%s> přidána"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Vektorová vrstva <%s> přidána"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Správce vrstev GRASS GISu %s"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "Pracovní oblast"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "Nástrojová lišta pro správu mapy"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Nástrojová lištavektorové digitalizace"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Nástrojová lišta pro 3D zobrazení"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Přejmenovat mapové okno"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Mapové vrstvy"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Vrstvy"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Příkazová konzole"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "Hledat moduly"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "Moduly"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Shell Pythonu"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7808,37 +8216,28 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "Přepnout na novou lokaci?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Současná location je <%(loc)s>.\n"
-"Současný mapset je <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Vybrat model ke spuštění"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Chcete uložit změny pracovní plochy?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Chcete uložit současné nastavení do souboru pracovní plochy?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Zavřít mapové okno %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -7847,148 +8246,146 @@ msgstr ""
 "Příkaz '%s' ještě nebyl implementován do WxGUI. Zkuste jej přidat jako "
 "vrstvu příkazů."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "Vybraná mapová vrstva není vektor."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Přebuduje topologii všech vektorových map v současném mapsetu."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Vybrat soubor se skriptem"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Skript Pythonu (*.py)|*.py|Skript Bashe (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Soubor skriptu '%s' neexistuje. Operace zrušena."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Nastavit region"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Neplatná hodnota souřadnice. Operace zrušena."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Spouštím script  '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Současný mapset je <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Změnit pracovní prostřední GRASSu"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Vyberte vstupní adresář"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Vyberte vstupní adresář"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "Informace o systému"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Verze GRASSu"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr "neznámá verze"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
 msgstr "Revize SVN GRASSu:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
 msgstr "Datum sestavení"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+#, fuzzy
+msgid "Build platform"
 msgstr "Platforma sestavení"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Platforma"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -7996,59 +8393,59 @@ msgstr ""
 "Pracovní plocha není prázdná. Přejete si uložit aktuální nastavení do "
 "souboru pracovního plochy?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Vytvořit novou pracovní plochu?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Zvolit soubor pracovní plochy"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "Soubor pracovní plochy GRASSu (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Prosím čekejte, pracovní plocha se načítá..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Vyberte soubor GRC k načtení"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Starý soubor pracovní plochy GRASSu (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Vybrat soubor pro uložení aktuální pracovní plochy"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Soubor pracovní plochy <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Uložit pracovní plochu"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "Zápis aktuálního nastavení do souboru pracovní plochy selhalo."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Zadejte nový název:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS {version} Mapové okno: {name} - Lokace: {loc}"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8056,37 +8453,37 @@ msgid ""
 "Reason: %s"
 msgstr "Nelze načíst téma ikonek..."
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Nelze vložit nový záznam."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Nelze vložit nový záznam."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "Přidat připojené vrstvy do stromu vrstev"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Nepodporovaný typ mapové vrstvy '%s'"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "průhlednost:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8097,56 +8494,53 @@ msgstr ""
 "%s\n"
 "ze seznamu vrstev?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "Přejete si odstranit vybranou mapovou vrstvu ze stromu vrstev?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Odstranit mapovou vrstvu"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Ukončit GRASS GUI"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Spustit GRASS seanci"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Import rastrových dat"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Připojit externí rastrová data"
 
@@ -8161,12 +8555,14 @@ msgid "Set raster output format"
 msgstr "Nastavit výstupní formát rastrů"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Import vektorových dat"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Připojit externí vektorová data"
 
@@ -8188,7 +8584,7 @@ msgstr "Importovat data z WMS serveru"
 msgid "Add command layer"
 msgstr "Přidat vrstvu s příkazem"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Ukončit"
@@ -8239,8 +8635,8 @@ msgid "Add rhumbline layer"
 msgstr "Přidat vrstvu s rovnoběžkami"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Přidat 3D rastrovou vrstvu"
 
@@ -8263,287 +8659,278 @@ msgstr "Vyhodnocuji model..."
 msgid "Background vector map"
 msgstr "Spojit vektorové mapy"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Mapové vrstvy"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Změnit úroveň průhlednosti"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "Vlastnosti 3D zobrazení"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Přiblížit na vybranou vrstvu"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Nastavit výpočetní region podle vybrané vrstvy"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr "Export do běžných formátů"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr "Export do PostGISu"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Vytvořit RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr "Vytvořit kopii v aktuálním mapsetu"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Nastavit tabulku barev"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Zobrazit atributová data"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Spustit editaci"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Ukončit editaci"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Vytvořit/znovu sestavit topologii"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Přiblížit na vybranou vrstvu (ignorovat NULL hodnoty)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+msgid "Set color table interactively"
+msgstr "Nastavit tabulku barev interaktivně"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Univariantní statistika rastrové vrstvy"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 msgid "Report raster statistics"
 msgstr "Vypsat statistiku rastru"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "Odstranit vybranou vrstvu"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Nelze vytvořit profil rastrové mapy."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "3D rastrová mapa"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Nepodporovaný typ mapové vrstvy <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Vložte jméno nové mapsetu:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Vytvořit kopii %s <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "%s <%s> již v aktuálním mapsetu existuje. Přejete si ji přepsat?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Přepsat?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Nelze vytvořit kopii <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Nelze vytvořit kopii <%s>. Mapset <%s> není aktuálním mapsetem."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Nelze zobrazit histogram rastrové vrstvy. Nebyl určen název vrstvy."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Nastavit průhlednost <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Skupina vrstev:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Klikněte pro nastavení vrstev "
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(dvojklik pro nastavení vlastností)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Prosím čekejte, aktualizuji data..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Spustit nové mapové okno"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Vytvořit novou pracovní plochu (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Otevřít existující soubor pracovní plochy (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Uložit pracovní plochu do souboru (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Přidat více rastrových nebo vektorových vrstev (Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Přidat rastrovou vrstvu (Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Přidat různé rastrové vrstvy (RGB, HIS, stínovaný reliéf...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Přidat vektorovou vrstvu (Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Přidat různé vektorové vrstvy (tématickou, graf...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr "Přidat vrstvu webové služby (WMS, WMTS, NASA OnEarth)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Přidat skupinu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr "Přidat různé překryvy"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Odstranit vybranou mapovou vrstvu ze stromu vrstev"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importovat/připojit rastrová nebo vektorová data"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Rastrový mapový kalkulátor"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Grafické modelování"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Georektifikace"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr "Spustit uživatelem definovaný skript"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "Nastavení grafického prostředí (GUI)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Manuál GRASSu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr "Editovat vybranou vektorovou vrstvu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr "Zobrazit atributová data pro vybranou vektorovou vrstvu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Vytvořit příkaz pro m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "Nastavení 3D zobrazení"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Ukázat /schovat nastavení 3D zobrazení"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Zobrazit manuálové stránky pro 3D zobrazení"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8555,634 +8942,642 @@ msgstr ""
 "stránku Numeric Python (http://numpy.scipy.org), kde naleznete další "
 "informace o stažení a instalaci."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Analýza profilu"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profil"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Vzdálenost (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Vzdálenost podél transektu"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Hodnoty buňky"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Hodnoty rastrové mapy"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Musíte zakreslit transekt profilu do mapového okna."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nebylo zvoleno nic pro profilování"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 #, fuzzy
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr "Cesta a předpona (k jménu rastru) pro uložení hodnot profilu... "
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "tečkou oddělené hodnoty (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Přepsat soubor?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Nelze otevřít soubor <%s> pro zápis."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "Souhrnná statistika spojených buněk (po použití r.clump)"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Hodnoty rastrové mapy"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Není co uložit"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Vybrat rastrovou mapu 1 (vyžadováno):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Hodnoty rastrové mapy"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Detaily:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Vypíše statistiky pro rastrové vrstvy."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Vy/pře-kreslit profil"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Vykreslit transekt profilu v mapovém okně "
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Nastavit volby"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Základní statistiky 3D pixelu (voxel)"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "Uložit profilová data do souboru csv"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "Ukončit nástroj pro digitalizaci"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Levé: nový bod"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Nastavení písma"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Nastavení písma"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Tento prvek ještě není funkční"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "Ve vývoji"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "GRASS GIS HIstogram obrazu nebo rastrové mapy"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Hodnoty buňky"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Vytvořit histogram obrazu nebo rastrového souboru"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "GRASS GIS HIstogram obrazu nebo rastrové mapy"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Hodnoty rastrové mapy"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Plocha"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Vypíše statistiky pro rastrové vrstvy."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Rastrová map pro profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Rastrová map pro profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Rastrová map pro profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Kopírovat"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Kopírovat příkaz do schránky (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s' zkopírováno do schránky"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Vybrat rastrovou mapu 2 (volitelné):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "GRASS GIS HIstogram obrazu nebo rastrové mapy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Vybrat rastrovou mapu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Vybrat skupinu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr " %d map bylo smazáno ze současného mapsetu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Nadpis profilu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Velikost písma nadpisu (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "Popisek osy X:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Popisek osy Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Velikost písma popisků (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Písmo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Styl:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Váha:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Použít změny pro současné sezení a zavřít dialogové okno"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Nastavení profilu uloženo do souboru '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Nastavit výpočetní region podle vybrané mapy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Barva linie"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Nastavení značek segmentů transektu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "Vektorové body"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Nastavení osy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X osa"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y osa"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Styl:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Volitelné minimum"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Volitelné maximum"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Logaritmické měřítko"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Nastavení legendy a mřížky"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Barva mřížky"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Zobrazit mřížku"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Velikost písma legendy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Zobrazit legendu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Nastavení profilu uloženo do souboru '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "GRASS GIS HIstogram obrazu nebo rastrové mapy"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
 msgstr "Neplatný region"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Atributový sloupec:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
 msgstr "Vybrat vektorový prvek"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Vykreslit"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Nápověda"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Neplatný region"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Vektorová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Mód kategorie"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Časové razítko"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Neplatný region"
+msgid "Seed point outside the current region"
+msgstr "Vytvořit plochu pokrývající aktuální region"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Neplatný region"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Neplatný region"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Neplatný region"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Import vektorových dat"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Import rastrových dat"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Soubor"
 
@@ -9190,8 +9585,8 @@ msgstr "&Soubor"
 msgid "Workspace"
 msgstr "Pracovní plocha"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Nový"
 
@@ -9199,7 +9594,7 @@ msgstr "Nový"
 msgid "Create new workspace"
 msgstr "Vytvořit novou pracovní plochu"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Otevřít"
 
@@ -9207,12 +9602,12 @@ msgstr "Otevřít"
 msgid "Load workspace from file"
 msgstr "Načíst soubor pracovní plochy"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Uložit"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Uložit jako"
 
@@ -9233,7 +9628,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Načíst mapové vrstvy ze souboru GRD do stromu vrstev"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Mapové okno"
 
@@ -9262,7 +9657,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Přidat více rastrových nebo vektorových vrstev do aktuálního okna"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr "Přidat vrstvu webové služby"
 
@@ -10001,23 +10396,23 @@ msgstr "Převod volume na řadu rastrových vrstev"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Převede 3D rastrové mapy na 2D rastrové mapy"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georektifikace"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Správa vlicovacích bodů pro georektifikaci"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Grafické modelování"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Spustit grafické modelování"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Spustit model"
 
@@ -10058,17 +10453,17 @@ msgstr ""
 "Jednoduchý nástroj pro převod zaměření a měření vzdáleností do souřadnic a "
 "naopak."
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 #, fuzzy
 msgid "Launch Cartographic Composer"
 msgstr "Spustit grafické modelování"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Typ mapové vrstvy:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Spustit skript"
@@ -10081,7 +10476,7 @@ msgstr "Spustit skript"
 msgid "Launches script file."
 msgstr "Spouštím soubor se skriptem."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 msgid "Close GUI"
 msgstr "Zavřít grafické prostředí"
 
@@ -10089,8 +10484,8 @@ msgstr "Zavřít grafické prostředí"
 msgid "Quit wxGUI session."
 msgstr "Ukončit sezení wxGUI."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 msgid "Quit GRASS GIS"
 msgstr "Ukončit GRASS GIS"
 
@@ -10098,7 +10493,7 @@ msgstr "Ukončit GRASS GIS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr "Ukončit sezení wxGUI a shell GRASSu."
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "&Nastavení"
 
@@ -10275,7 +10670,7 @@ msgstr "Seznam rozšíření"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Správa rozšíření GRASS"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Vlastnosti"
 
@@ -11421,7 +11816,7 @@ msgid ""
 msgstr "Vytvoří rastrovou mapu vzdáleností k prvkům ve vstupní mapě."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Rovinná plocha"
 
@@ -11696,8 +12091,8 @@ msgid "Develop vector map"
 msgstr "Vytvořit vektorovou mapu"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Vytvořit novou vektorovou mapu"
 
@@ -12652,12 +13047,12 @@ msgstr ""
 "cluster, i.class nebo i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Interaktivní vstup pro řízenou klasifikaci"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -13774,27 +14169,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Nástrojová lišta pro správu mapy"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Zobrazit meze výpočetního regionu "
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
 msgstr "GRASS GIS HIstogram obrazu nebo rastrové mapy"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Zobrazit meze výpočetního regionu "
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "Ná&pověda"
 
@@ -13821,7 +14220,7 @@ msgid "Prints system information"
 msgstr "Informace o databázi"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "O GIS GRASS"
 
@@ -13833,278 +14232,286 @@ msgstr "Import, export a připojení dat"
 msgid "Attribute table manager"
 msgstr "Správce atributových tabulek"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Vytvořit nový model"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Načíst model ze souboru"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Uložit model do souboru"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Zavřít soubor modelu"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Export do obrazu"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Export modelu do obrázku"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Export do Pythonu"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Export modelu do skriptu Pythonu"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Ukončit modelování"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Zavřít okno modelování"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Modelování"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Přidat příkaz"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Přidat do modelu akci (příkaz GRASSu)"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Přidat data"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Přidat data do modelu"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Definovat vztah"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Definovat vztah mezi daty a akcemi"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Přidat smyčku"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 #, fuzzy
 msgid "Adds loop (series) to model"
 msgstr "Přidat smyčku do modelu"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Přidat podmínku"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Přidá podmínky (if/else) do modelu"
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr "Přidá do modelu komentář"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Odstranit prvek"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Odstranit data/akce z modelu"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Vlastnosti modelu (jméno, účel, atd.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Smazat dočasná data"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Smazat průběžná data definovaná v modelu"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Spustit celý model"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Vyhodnotit model"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Vyhodnotit celý model"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Zobrazit manuálové HTML stránky Grafického modelování"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "O grafickém modelování"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Zobrazit informace o Grafickém modelování"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Export do obrazu"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "Exportovat do PostScriptu"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Exportovat do PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Spustit skript"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Ukončit Grafické modelování"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "&Vložit"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Přidat rastrovou vrstvu"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr "Přidat nebo upravit rastrovou vrstvu"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr "Přidat nebo upravit vektorovou vrstvu"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "Legenda mapy"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr "Přidat nebo upravit legendu rastrů a vektorů"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Přidat mapové prvky"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr "Přidat nebo upravit měřítko"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Přidat směrovou růžici"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Zobrazit manuálové HTML stránky Grafického modelování"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Ukončit Grafické modelování"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Zobrazit informace o Grafickém modelování"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Klikněte zde pro zobrazení vyhledávacího modulu"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Klikněte zde pro skrytí vyhledávacího modulu"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Příkazový řádek"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Okno s výstupem"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Vyčistit obsah okna s výstupem"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Vyčistit obsah příkazového řádku"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Uložit obsah okna s výstupem do souboru"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Zrušit běžící příkaz"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Logaritmické měřítko"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Uložit soubor jako..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Textové soubory"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Soubory"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14112,12 +14519,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr "Výstup příkazů uložen do '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14125,96 +14532,133 @@ msgid ""
 "Details: %(error)s"
 msgstr "Nelze nastavit zoom podle vektorové mapy <%s>."
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Výstup příkazů"
 
-#: ../gui/wxpython/gui_core/menu.py:142
-#, fuzzy
-msgid "Double-click or Ctrl-Enter to run selected module"
-msgstr "Nabídka (dvojklikem spustíte příkaz)"
+#: ../gui/wxpython/gui_core/vselect.py:48
+msgid "category"
+msgstr "kategorie"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/vselect.py:73
+msgid "Select features"
+msgstr "Vybrat prvky"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
 #, fuzzy
-msgid "Run selected module from the tree"
-msgstr "Spustit vybraný příkaz"
+msgid "Create a new map"
+msgstr "Vytvořit nový mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
-msgid "User settings"
-msgstr "Uživatelské nastavení"
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Vektorová mapa není 3D. Operace ukončena."
 
-#: ../gui/wxpython/gui_core/preferences.py:80
-msgid "Set to default"
-msgstr "Nastavit na výchozí nastavení"
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Nelze vytvořit vektorovou mapu <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Nebyla vybrána žádná mapová vrstva"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Nová vektorová mapa <%s> byla vytvořena"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Nelze vytvořit vektorovou mapu <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
+#, fuzzy
+msgid "Double-click or Ctrl-Enter to run selected module"
+msgstr "Nabídka (dvojklikem spustíte příkaz)"
+
+#: ../gui/wxpython/gui_core/menu.py:171
+#, fuzzy
+msgid "Run selected module from the tree"
+msgstr "Spustit vybraný příkaz"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:59
+msgid "User settings"
+msgstr "Uživatelské nastavení"
+
+#: ../gui/wxpython/gui_core/preferences.py:83
+msgid "Set to default"
+msgstr "Nastavit na výchozí nastavení"
+
+#: ../gui/wxpython/gui_core/preferences.py:91
 msgid "Revert settings to default"
 msgstr "Vrátit nastavení na výchozí"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr "Použít změny pouze pro současné sezení a zavřít"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr "Uložit pouze pro toto sezení"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Nastavení jsou použita, ale nejsou uložena"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Klíčový sloupec nemůže obsahovat prázdný řetězec."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Nastavení grafického prostředí (GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Nastavení Správce vrstev"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Zeptat se při odstraňování mapy ze stromu vrstev"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Zeptat se při ukončení wxGUI nebo při zavírání mapového okna"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Skrýt kartu '%s' (vyžaduje restart GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Hledat modul"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
-msgstr ""
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
+msgstr "Automaticky kopírovat vybraný text do schránky (na kartě Konzole)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Nastavení pracovní plochy"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Zachovat pozici mapových oken"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Zachovat pozici okna Správce vrstev"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Uložit aktuální nastavení oken jako výchozí"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14222,196 +14666,189 @@ msgstr ""
 "Uložit aktuální pozici a velikost okna Správa vrstev a mapový displej a "
 "použít jako výchozí při příštích sezeních."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Vzhled"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Písmo pro výstup příkazů:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Nastavení jazyka"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Zvolte jazyk (vyžaduje nastavení uložit a restartovat GRASS):"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Nastavení vzhledu"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Seznam prvků"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Styl menu (vyžaduje uložit nastavení a restartovat GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Výška okna pro výběr mapy (v pixelech):"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Téma ikonek (vyžaduje restart GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr "Styl dialogu pro moduly:"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Mapové okno"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Výchozí písmo pro GRASS monitory:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Výchozí nastavení displeje"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Ovladač displeje:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Výchozí zobrazení na stavové liště:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Zapnout/vypnout automatické vykreslování"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Povolit automatické přiblížení na vybranou mapovou vrstvu"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Akce pro kolečko myši:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Vyberte vstupní adresář"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "Rozšířené nastavení okna"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "Moduly"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr "Nastavení dialogu pro moduly"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr "Zavřít dialog při úspěšném ukončení modulu"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Přidat vytvořenou mapu do stromu vrstev"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Povolit interaktivní vstup"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Úroveň upovídanosti příkazů:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Vrstvy"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr "Výchozí nastavení rastrů"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Neprůhledné buňky s prázdnou hodnotou"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Výchozí tabulka barev"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr "Výchozí nastavení vektorů"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Zobrazit:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Barva prvku:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Průhledný"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Barva výplně plochy:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Symbol:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Šířka linie (v pixelech):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr "Automaticky zvýraznit vybrané prvky v mapovém okně"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Datový prohlížeč"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Dvojklik levým tlačítkem myši:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Kódování atributů (např. utf-8, ascii, iso8859-1, Windows-1250):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Zeptat se při odstraňování dat z tabulky"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Vytvořit tabulku"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Sloupec s klíčem:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Nastavení kartografického zobrazení ve stavového řádku"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14423,20 +14860,20 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Kód EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Řetězec Proj.4 (vyžadováno):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "Soubor s kódy EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -14444,61 +14881,72 @@ msgstr ""
 "Načíst kódy EPSG (buďte trpěliví), vložit kód EPSG nebo vložit přímo řetězec "
 "Proj.4."
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "&Načíst kódy EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Formát souřadnic"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Správa kartografických zobrazení"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Přesnost:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Nelze načíst seznam kódů EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Nelze přečíst kódy EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Kód EPSG %s nebyl nalezen"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Vybrat výchozí písmo"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Vybrat výchozí písmo"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Vybrat písmo:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Kódování znaků:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Jednoduchý"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Správa přístupu do mapsetů"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14512,259 +14960,345 @@ msgstr ""
 " - Můžete zapisovat pouze do současného mapsetu.\n"
 " - Můžete zapisovat pouze do mapsetu, který vlastníte."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Vlastník"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Výsledky dotazu"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 "Po kliknutí pravým tlačítkem lze vybrané hodnoty zkopírovat do schránky."
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Prvek"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Hodnota"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr "Kopírovat vše do schránky"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr "Přesměrovat do konzole"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr "Kopírovat ze sloupce '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr "Kopírovat vybrané řádky"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr "Kopírovat '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr "Kopírovat řádek"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr "Výsledky dotazu:"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr "východní, severní"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "Nic nenalezeno"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d modulů odpovídá"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Nastavení serveru"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Odstranit vybraný mapset"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Načíst nastavení:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "Nahrát"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Nastavení <%s> nebylo nalezeno."
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Uložit nastavení"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Nastavení <%s> již existuje. Přejete si toto nastavení přepsat?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "Nastavení není definováno. Operace byla zrušena."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "Nastavení nelze uložit"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+msgid "Open file"
+msgstr "Otevřít soubor"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Definujte parametry pro '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr "Otevřít (Ctrl+O)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr "Uložit (Ctrl+S)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+msgid "Run (Ctrl+R)"
+msgstr "Spustit (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Kvantizace"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Definujte parametry pro '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Zavři toto okno bez spuštění příkazu (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Spustit příkaz (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Kopírovat příkaz jako řetězec do schránky"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Ukázat manuálovou stránku příkazu (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Přidat vytvořenou mapu do stromu vrstev"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Zavřít dialog při ukončení"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' zkopírováno do schránky"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Požadováno"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Volitelné"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "Parametrizace v modelu"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[mnohonásobné]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "platný rozsah"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Vybrat %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "&Nahrát"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Přejmenovat lokaci"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Uložit jako"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr "Uložit obsah do souboru pro pozdější použití"
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr "nebo zadejte hodnoty přímo:"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Adresář"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "ID vrstvy"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Název vrstvy"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr "Kartografické zobrazení odpovídá"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manuálová stránka"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Není co uložit"
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14772,46 +15306,46 @@ msgid ""
 "Reason: %s"
 msgstr "Nelze načíst téma ikonek..."
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Není co uložit"
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Uložit soubor jako..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Chyba v %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Nelze spustit příkaz %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: parametr '%(key)s' není dostupný"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Vybrat GRASS location a mapset"
 
@@ -14820,52 +15354,52 @@ msgstr "Vybrat GRASS location a mapset"
 msgid "Location or mapset is not defined."
 msgstr "Výpočet odtoku pro velké rastry."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Název lokace GRASSu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Název mapsetu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Vybrat mapset v lokaci GRASSu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "Chybí název mapsetu."
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr "Chybí název vektorové vrstvy."
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Vyvořit atributovou tabulku"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr "Chybí název nové vektorové vrstvy."
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Název nové vektorové mapy:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -14874,513 +15408,401 @@ msgstr ""
 "Vektorová mapa <%s> již existuje v současném mapsetu. Přejete si tuto mapu "
 "přepsat?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Načíst region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Uložit region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Vytvořit/upravit skupinu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Uložit změny a zavřít"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "Aplikovat změny pro tuto seanci"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Zavřít dialog při souhlasu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "astra"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Seznam map:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr "Přejete si odstranit vybranou mapovou vrstvu ze stromu vrstev?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "Přidat připojené vrstvy do stromu vrstev"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "Uložit změny"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, fuzzy, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Georektifikace vektorové mapy <%s< selhala"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "3D rastr"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "Typ mapové vrstvy:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Vybrat přepínač"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Hromadný import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Seznam rastrových vrstev"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr "Seznam vektorových vrstev"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr "Seznam %s vrstev"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr "vybrat vše (zrušit výběr) po kliknutí pravým tlačítkem"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "ID vrstvy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Název vrstvy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr "Název pro výstupní vrstvu GRASSu (lze upravit)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr "Kartografické zobrazení odpovídá"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Volby"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importovat vybrané vrstvy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Přidat importované vrstvy do stromu vrstev"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Přidat importované vrstvy do stromu vrstev"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Připojit"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Připojit vybrané vrstvy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Nelze vytvořit profil rastrové mapy."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr "Určete výstupní formát vektorových dat"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr "Určete výstupní formát rastrových dat"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Ignoruj změny a zavři dialog"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Nebyla vybrána žádná mapová vrstva"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Import DXF vrstev"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Vyberte soubor DXF pro import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Nebyla vybrána žádná mapová vrstva"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Nastavit průhlednost mapové vrstvy"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "Neprůhledný"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Nastavit velikost obrázku"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Velikost obrázku"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Šablona:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Mapové okno"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr "SQL příkaz"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Symboly"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Velikost symbolu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Velikost symbolu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Informace"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Autorská práva"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licence"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autoři"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Přispěvatelé"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Zvláštní přispěvatelé"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Překladatelé"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr "Stav překladu"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Oficiální stránky GRASSu:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr "Revize kódu"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr "Datum sestavení"
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Jazyk"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "%s soubor chybí"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "Linie:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Země"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "Soubor <%s> nebyl nalezen."
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Další"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Předchozí"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr "Nástrojová lišta"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' zkopírováno do schránky"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' zkopírováno do schránky"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Přejete si odstranit vybranou mapovou vrstvu ze stromu vrstev?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Skupina vrstev:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Přejete si odstranit vybranou mapovou vrstvu ze stromu vrstev?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Vrstva"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Přejete si odstranit vybranou mapovou vrstvu ze stromu vrstev?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Vlastnosti vrstvy"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Změnit úroveň průhlednosti"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Změnit úroveň průhlednosti"
@@ -15478,714 +15900,731 @@ msgstr "Umístit na mapu prvky jako měřítko a legendu"
 msgid "Create histogram with d.histogram"
 msgstr "Vytvořit histogram pomocí d.histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Vybrat mapy pro zobrazení"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Prvek nelze vybrat"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Typ"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Nastavení výstupu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Nastavení zdroje"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+msgid "Source input"
+msgstr "Zdroj vstupu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Uložit"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Soubor"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protokol"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Typ výstupu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Typ zdroje"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Všechny soubory"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "Soubory ZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "Soubory GZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "Soubory TAR"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "Soubory TARGZ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Soubor:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Vyberte soubor pro import"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Vyberte vstupní adresář"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "výraz"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Vyberte soubor"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "Typ prvku:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Dotazovat prvky"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Vytvořit/znovu sestavit topologii"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Možnosti vytvoření:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Formát:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protokol:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr "Nejsou k dispozici žádná nastavení"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Osvětlení"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Vektorová mapa <%s> nebyla nalezena."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Vektorová mapa není 3D. Operace ukončena."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "GRASS GIS HIstogram obrazu nebo rastrové mapy"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Vybrat zdrojový mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Mapset: %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Měřítko mapy"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Časové razítko"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Vytvořit/znovu sestavit topologii"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Obnovit výchozí nastavení"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Požadováno"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Seznam vrstev"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Vybrat projekci"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Rozšířené nastavení"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Překrývat rastrové mapy"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Kód projekce:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Převzorkování (změna rozlišení) metodou nejbližšího souseda"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Lineární regrese"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Vyberte vstupní vektorovou mapu:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Definujte parametry pro '"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Nelze provést nastavení '%s'"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Dotaz na vektorovou mapu"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Přidat připojené vrstvy do stromu vrstev"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Vybrat zdrojový mapset:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Vybrat zdrojovou location:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Vrstva"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "styl"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Přidat smyčku"
+msgid "Add default"
+msgstr "Výchozí"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Nastavení serveru"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Server:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Spojení "
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Připojit k serveru"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Rozšířené nastavení"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Rozšířené nastavení"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr "Nastavení Správce vrstev"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Jméno výstupní vektorové mapy"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Přejmenovat"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "Model exportován do <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Nelze vytvořit vektorovou mapu <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Přidat připojené vrstvy do stromu vrstev"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Vlastnosti vrstvy"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Název výstupní rastrové mapy:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Nastavit region"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Načíst region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Nastavit zobrazené rozlišení jako výpočetní "
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Nastavit výpočetní region podle aktuálního zobrazení"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Vložit existující %s"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Načíst region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Odstranit mapovou vrstvu"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Odstranit vybranou vrstvu"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr " %d map bylo smazáno ze současného mapsetu"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Soubor již existuje"
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Nová vektorová mapa <%s> byla vytvořena"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Načítám data..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Nelze nastavit "
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Zavřít dialog "
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Zavřít dialog "
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Atributový dotaz"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Vybrat vektorovou mapu:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Exportovat barevnou tabulku"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Vyberte soubor GRC k načtení"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Nahrát"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "Vyberte soubor k uložení"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "&Nastavení"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Uložit barevnou tabulku do souboru"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Uložit barevnou tabulku do souboru"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Uložit barevnou tabulku do souboru"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Reset na výchozí pohled"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Výchozí tabulka barev"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr "Neplatná hodnota pravidla '%s'. nelze použít barevnou tabulka."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Vytvořit novou tabulku barev pro rastrovou mapu"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Vložte hodnoty rastrových kategorií nebo procenta"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 "Vložte hodnoty rastrových kategorií nebo procenta (%(range)s = %(min)d-"
 "%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "Vytvořit novou tabulku barev pro vektorovou mapu"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "Vložte hodnoty rastrových kategorií nebo procenta"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Atributový dotaz"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Vybrat vektorovou mapu"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Vrstva:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Atributový sloupec:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Sloupec s RGB hodnotami:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "Sloupec s RGB hodnotami:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Odstranit všechny sloupce"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Konverze řady rastrových vrstev na volume"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "Načíst model ze souboru"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Vyjmout atributovou tabulku."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Exportovat barevnou tabulku"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16194,12 +16633,12 @@ msgstr ""
 "Databázové nastavení není pro vektorovou mapu <%s> definováno v souboru DB. "
 "Toto nastavení můžete provést v panelu 'Správa vrstev'."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "Databázové spojení"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
@@ -16208,592 +16647,742 @@ msgstr ""
 "Vybraná vrstva <%(map)s> se v aktuálním mapsetu <%(mapset)s> nenachází. "
 "Atributovou tabulku nelze editovat."
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "Sloupec %s již existuje"
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Prosím čekejte, načítají se data z atributové tabulky..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 "Vložte hodnoty vektorových atributů nebo rozmezí hodnot (n, nebo n1 až n2)"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 "Vložte hodnoty vektorových atributů nebo rozmezí hodnot (n, nebo n1 až n2)"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Prosím vyberte čistící nástroj, který chcete posunout dolů"
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS GIS rastrový mapový kalkulátor"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS GIS 3D rastrový mapový kalkulátor"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "mapcalc formule"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operátory"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operandy"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "výraz"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Uložit výraz do souboru"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Načíst výraz ze souboru"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "exponent"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dělení"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "sečíst"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "odečíst"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "násobit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "posun doleva"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "posun doprava"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "více než"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "více než nebo rovno"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "méně než"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "méně než nebo rovno"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "rovno"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "není rovno"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 #, fuzzy
 msgid "one's complement"
 msgstr "Zobr. výpoč. region"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NOT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "Logické AND"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "logické AND (ignoruje NULL hodnoty)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "logické OR"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "logické OR (ignoruje NULL hodnoty)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "Volitelné"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Jméno pro nově vytvářenou %s"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Název nově vytvářené rastrové vrstvy"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Vložit existující 3D rastrovou vrstvu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Vložit existující rastrovou vrstvu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Vložit funkci mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr "Vytvořit náhodný seed pro rand()"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr "Seed:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr "Celočíselný seed pro funkci rand()"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Přidat vytvořenou rastrovou mapu do stromu vrstev"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Musíte vložit jméno nově vytvářené mapy"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Musíte vložit mapcalc formuli pro vytvoření nové mapy"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Vyberte jméno souboru pro uložení výrazu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "Soubor s výrazem (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Vyberte soubor pro načtení výrazu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' zkopírováno do schránky"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 #, fuzzy
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Stáhnout & instalovat nové rozšíření z GRASS Addons"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Repozitář"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Sesznam prvků - pryvým klikem smažete"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Volby"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Stáhnout"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr "Stáhnout seznam dostupných modulů z GRASS Addons SVN repozitáře"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Instalovat"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "Instalovat vybrané GRASS moduly"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 #, fuzzy
 msgid "Extension not defined"
 msgstr "Podmínka: nedefinována"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr "Stahuji seznam modulů z GRASS Addons SVN (buďte trpěliví prosím).."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Seznam rozšíření"
+
+#: ../gui/wxpython/modules/extensions.py:238
 #, fuzzy
 msgid "Install"
 msgstr "&Instalovat"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr "Zobrazit manuálovou stránku"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Nelze provést nastavení '%s'"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Správa rozšíření GRASS"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Seznam rozšíření"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "&Instalovat"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Správa rozšíření GRASS"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "&Instalovat"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
+#, fuzzy
+msgid "Reinstall selected Addons extensions"
+msgstr "Správa rozšíření GRASS"
+
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Odstranit opěrný bod"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "výraz"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Hromadný import"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Seznam rastrových vrstev"
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr "Seznam vektorových vrstev"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr "Seznam %s vrstev"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr "vybrat vše (zrušit výběr) po kliknutí pravým tlačítkem"
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr "Název pro výstupní vrstvu GRASSu (lze upravit)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Import"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importovat vybrané vrstvy"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Nastavení zdroje"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Nastavení písma"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Přidat importované vrstvy do stromu vrstev"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Přidat importované vrstvy do stromu vrstev"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Připojit"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Připojit vybrané vrstvy"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Nelze vytvořit profil rastrové mapy."
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr "Určete výstupní formát vektorových dat"
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr "Určete výstupní formát rastrových dat"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Ignoruj změny a zavři dialog"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Nebyla vybrána žádná mapová vrstva"
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Import DXF vrstev"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Vyberte soubor DXF pro import"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Nebyla vybrána žádná mapová vrstva"
+
+#: ../gui/wxpython/modules/import_export.py:836
 #, fuzzy
-msgid "Reinstall selected Addons extensions"
-msgstr "Správa rozšíření GRASS"
+msgid "Reprojection"
+msgstr "Kartografické zobrazení"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
+msgid "Name for output GRASS map"
+msgstr "Název pro výstupní vrstvu GRASSu (lze upravit)"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Odstranit opěrný bod"
+msgid "Layers to be reprojected"
+msgstr "Vrstva k odstranění"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "výraz"
+msgid "Reproject selected layers"
+msgstr "Importovat vybrané vrstvy"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Nenalezena knihovna GRASS-Python."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Vstupní data"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "bodová data:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Číselný sloupec:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Krigování"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Název výstupní rastrové mapy:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Exportovat také mapu rozdílu:"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "modul Krigování"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Připraven."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Přizpůsobení variogramu"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Vykreslit variogram"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Techniky krigování"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Velikost bloku:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Automatické přizpůsobení variogramu"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Model:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Na vývoji se pracuje! Zatím žádnou funkci nemá."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Nástroj pro histogramy GRASS GISu (d.histogram)"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Vybrat písmo pro text histogramu"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Nastavit vektorový čistící nástroj"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "přerušit linie/hranice"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "odstranit zdvojené prvky"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "Odstranit přívěsky"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "Změní přívěsky hranic na linie"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "odstranit mosty"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "Změnit mosty na linie"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "spojit linie/hranice"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "Odstranit duplicitní centroidy v ploše"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "rozdělí polygony"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "prořezat linie/hranice"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "Odstranit malé plochy"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "Odstranit linie/hranice nulové délky"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Vybrat čistící nástroj a nastavit prahovou hodnotu"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Vyberte vstupní vektorovou mapu:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Typ prvku:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Vybrat výstupní vektorovou mapu:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Kopírovat příkaz do schránky (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "linie"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "hranice"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "centroid"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "povrch"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. čistící nástroj odstraněn, bude ignorováno"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Prosím vyberte čistící nástroj pro odstranění"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. čistící nástroj byl posunut nahoru"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "První čistící nástroj již nejde posunout výš"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr "Prosím vyberte čistící nástroj pro posun nahoru"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. čistící nástroj posunut dolů"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "Poslední čistící nástroj již nejde posunout dolů"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "Prosím vyberte čistící nástroj, který chcete posunout dolů"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "čistící nástroj: '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "Prahová hodnota pro %(num)s.nástroj '%(tool)s': %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Jméno vektorové mapy:"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Název nové vektorové mapy:"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Zvolit prahovou hodnotu"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, fuzzy, python-format
 msgid "'%s' not defined"
 msgstr "<nedefinováno>"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16801,20 +17390,20 @@ msgid ""
 "%s"
 msgstr "Nebyla vybrána žádná mapová vrstva. Operace ukončena."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Spustit vybrané čistící nástroje...."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Příkaz pro čištění vektoru byl zkopírován do schránky"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Nelze otevřít soubor pracovní plochy <%s> pro čtení."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16827,74 +17416,98 @@ msgstr ""
 "\n"
 "Počet vynechaných linií: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "řádek: %d"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: typ vrstvy <%(type)s> není ještě podporován"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Příkaz ukončen"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Detaily:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Nepodporovaný typ mapové vrstvy '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Chyba: vykreslování selhalo"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Vykreslit"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Načítám data..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Vykreslit"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr "Vykresluje se..."
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Zvětšit podle výchozího regionu"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr "Chyba: Nelze otevřít '%(file)s'. Důvod: %(ret)s. wxGUI končí.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Neplatná hodnota: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Nelze přiblížit na rastrovou vrstvu <%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Detaily:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Nelze přiblížit na vektorovou vrstvu <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Nelze přiblížit na 3D rastrovou vrstvu <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 #, fuzzy
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
@@ -16903,114 +17516,85 @@ msgstr ""
 "Nelze získat současný geografický region. wxGUI se ukončuje. Prosím spusťte "
 "ručně g.region  pro nápravu problému. "
 
-#: ../gui/wxpython/core/render.py:987
-#, fuzzy, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "Chyba: vykreslování selhalo"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Nelze vykreslit mapovou vrstvu <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Nelze vykreslit překrytí <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Načítám data..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Vykreslit"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr "Vykresluje se..."
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Neznámý"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Nelze modifikovat existující záznam."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Volitelné maximum"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Nová vektorová mapa <%s> byla vytvořena"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Nelze otevřít  '%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Nelze otevřít soubor <%s> pro zápis."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Duplicitní atributy"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Nelze načíst seznam EPSG kódů: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17019,176 +17603,181 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Soubor nebyl nalezen."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr "Data jsou ponechána v nevhodném stavu a mohou být porušena"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Příkaz přerušen"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Příkaz ukončen"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Důvod"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Vykonání příkazu selhalo:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Chyba:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Nelze vykonat příkaz: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Zlom segmentu"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "bod"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Kvantizace"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Zabalit všechny kromě PERMANENT a aktuální mapset"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Zabalit všechny kromě PERMANENT mapset"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Zabalit všechny kromě aktuální mapset"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Zabalit všechny"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Rozbalit všechny"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Zobrazit vybrané"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Seznam tabulek"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Přiblížit a změnit střed"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Zvětšit podle uloženého regionu"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Nic"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "rám"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "koule"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "krychle"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamant"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "astra"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Nelze provést nastavení '%s'"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17199,12 +17788,12 @@ msgstr ""
 "       Detaily: %(detail)s\n"
 "       řádek: '%(line)s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "Nelze modifikovat existující záznam."
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17215,274 +17804,301 @@ msgstr ""
 "\n"
 "Detaily: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Nelze nastavit "
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Nelze provést nastavení '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Definujte adresář databáze GRASSu a název lokace"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Adresář GIS dat:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Lokace projektu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Název adresáře lokace v adresáři s daty GRASSu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Název lokace"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Neplatný název lokace"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Vybrat adresář s daty GRASSu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Lokace již v adresáři databáze GRASSu existuje."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Nelze vytvořit lokaci"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Zvolte způsob vytvoření nové lokace"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Zvolit EPSG kód souřadnicového referenčního systému"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 "Načíst kartografické zobrazení a datum z již georeferencovaného souboru"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 "Načíst kartografické zobrazení a datum ze souboru typu Well Known Text "
 "(WKT) .prj"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Zvolit parametry souřadnicového systému ze seznamu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "Určit kartografické zobrazení a datum s použitím PROJ.4 parametrů"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Vytvořit obecný kartézský souřadnicový systém (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Jednoduchý"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Rozšířené"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Vybrat kartografické zobrazení"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Kód"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Kód kartografického zobrazení:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Vyhledat v popisu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Nelze načíst seznam: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Vyberte parametry kartografického zobrazení"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Vybrat geodetické datum nebo elipsoid (další strana)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datum související s daným vybraným elipsoidem"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Pouze elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Musíte vložit hodnoty pro %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Definujte parametry kartografického zobrazení %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Specifikovat geodetické datum"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Kód datumu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Vyberte elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Databáze"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Kód elipsoidu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Zvolte georeferencovaný soubor"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Georeferencovaný soubor:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Soubor WTK:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Zvolte kód EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Cesta k souboru s kódy EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Vyberte soubor s kódy EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
-msgstr "Nelze načíst seznam kódů EPSG: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+msgid "Choose IAU Code"
+msgstr "Zvolte kód IAU"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
+msgstr "Cesta k souboru s kódy IAU:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+msgid "IAU code:"
+msgstr "Kód IAU:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+msgid "Choose IAU codes file"
+msgstr "Zvolte soubor s kódy IAU"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
+msgstr "Nelze načíst seznam kódů IAU: %s"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Zvolte metodu nebo specifikujte parametry georeference"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Vložte PROJ.4 parametry:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Je vyžadováno datum transformace"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Adresář databáze GRASSu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Název lokace:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Popis lokace:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projekce:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Definice PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Přejete si založit lokaci GRASSu <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Vytvořit novou lokaci?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definujte novou lokaci GRASSu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17493,15 +18109,15 @@ msgstr ""
 "\n"
 "Detaily: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Průvodce vytvořením lokace byl zavřen. Lokace nebyla vytvořena."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Nelze vytvořit novou lokaci"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17510,234 +18126,238 @@ msgstr ""
 "Lokace <%(loc)s> bude vytvořena v adresáři s GIS daty <%(dir)s>. Je potřeba "
 "změnit výchozí adresář s GIS daty na úvodní obrazovce GRASSu."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Nový adresář GIS dat"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Kód EPSG chybí."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+msgid "IAU code missing."
+msgstr "Kód IAU chybí."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Soubor <%s> nebyl nalezen."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Nastavit výchozí region a jeho rozlišení"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "Nastavit &region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Zvolena neplatná lokace."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Neplatný region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Klikněte zde pro zobrazení 3D nastavení"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Klikněte zde pro skrytí 3D nastavení"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Řádky: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Sloupce: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Buňky: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Hloubka: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3D buňky: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Rozlišení H-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Sever"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Západ"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Východ"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Jih"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Rozlišení S-J"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Rozlišení V-Z"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Neplatná hodnota: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Vyberte transformaci datumu"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Vyberte ze seznamu transformací datumu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Východ"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Sever"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Výška"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Jméno zdroje"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "Výška mapy povrchu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "Barva mapy povrchu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "XY vzdálenost od předchozího"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "XYZ vzdálenost od předchozího"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Vzdálenost podél transektu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Vzdálenost podél transektu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "Žádný bod na povrchu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Načítám rastrovou mapu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Načítám 3D rastrovou mapu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "selhalo"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Nepodporovaný typ vrstvy '%s'"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Nelze načíst rastrovou mapu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Nelze načíst 3D rastrovou mapu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3D rastrová mapa"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "načteno "
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Načítání vektorové mapy '%(name)s' %(type)s selhalo"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Nelze načíst vektorovou mapu <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Vektorová mapa <%(name)s> (%(type)s) úspěšně načtena"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Vektorová bodová vrstva nenalezena (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Nelze nastavit vlastnosti datové vrstvy (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17748,46 +18368,46 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "konstantní#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Zobrazení"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analýza"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animace"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Nastavení zobrazení"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspektiva:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "Nakloní rovinu povrchu vzhledem k vodorovné poloze"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Naklonění:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
@@ -17795,23 +18415,23 @@ msgstr ""
 "Nastaví výšku pohledu nad povrchem (úhel pohledu se automaticky přizpůsobí, "
 "aby se zachoval střed pohledu)"
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr "Nastaví relativní výšku prvků nad rovinou povrchu"
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Převýšení:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Pohled:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "zde"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
@@ -17819,19 +18439,19 @@ msgstr ""
 "Umožní vybrat bod povrchu, který se stane novým středem pohledu. Klepněte na "
 "toto tlačítko a poté na povrch."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "střed"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Obnoví původní, výchozí střed pohledu"
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "shora"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
@@ -17839,19 +18459,19 @@ msgstr ""
 "Nastaví pohled přímo nad místo středu scény. Tento pohled shora je "
 "orientován přibližně severojižně."
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "obnovit"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Obnoví výchozí pohled"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Vzhled obrázku"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
@@ -17860,218 +18480,218 @@ msgstr ""
 "plynulého pohybu, je vhodné použít režim průletu (nástrojová lišta mapového "
 "okna)."
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Zaznamenat"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Přehrát"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Celkový počet snímků:"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "Snímková frekvence (FPS):"
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "Snímky jsou zaznamenávány s danou frekvencí (FPS)."
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Uložit posloupnost obrázků"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Zvolte adresář pro obrázky"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr "Budou vytvořeny názvy souborů jako predpona_1.ppm, predpona_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Povrch"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Konstantní povrch"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vektor"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Osvětlení"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "Okraj"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr "Roviny řezu"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Režim:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "hrubý"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "jemný"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "oba"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Stínování:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "ploché"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "Gouraudovo"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Nastavit všechny"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Použít vykreslovací nastavení pro všechny načtené povrchy"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Hrubý režim:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "rozlišení:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "styl:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "síť"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "povrch"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr "Změnit barvu sítě"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Jemný režim:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Vlastnosti povrchu"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Průhlednost"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Jasnost"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "mapa"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "zrušit"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "konstantní"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Změní souřadnice x, y a z pro pozici aktuálního povrchu"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Obnovit"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Obnoví výchozí pozici"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "Aktivní rovina řezu:"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "průhledné"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr "horní barva"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr "dolní barva"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "smíšené"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "stínované"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "Vodorovně X:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "Nastaví pro aktuální rovinu řezu souřadnici X"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Vodorovně Y:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "Nastaví pro aktuální rovinu řezu souřadnici Y"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr "Otočí aktuální rovinu řezu kolem svislé osy"
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr "Otočí aktuální rovinu řezu kolem vodorovné osy"
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
@@ -18079,440 +18699,440 @@ msgstr ""
 "Nataví pro aktuální rovinu řezu souřadnici Z (má význam pouze tehdy, není-li "
 "naklonění 0)"
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr "Jemné rozlišení:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Hodnota:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Průhlednost:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Zobrazit vektorové linie"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Vektorové linie"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Linie:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "šířka:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "barva:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr "použít barvu pro tematické mapování"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr "použít šířku pro tematické mapování"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr "Nastavit volby..."
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "na povrchu:"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr "jako 3D"
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Výška nad povrchem:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Zobrazit vektorové body"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Vektorové body"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Ikona:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr "použít velikost pro tematické mapování"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "Isopovrch"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Rozlišení:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Seznam Isopovrchů"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Zobrazit světelný model"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Umístění zdroje světla"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Nastaví výšku světla"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Barva světla a intenzita"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Jas:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Nastaví jas světla"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Ambientní:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Nastaví ambientní světlo"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "Hrany s okrajem"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "S && Z"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "S && V"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "J && Z"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "J && V"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr "Výška okraje ze spodní strany"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "Délka růžice (v mapových jednotkách):"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Barva růžice:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Umístit růžici"
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Délka měřítka (v mapových jednotkách):"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Barva měřítka:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr "Umístit nové měřítko"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr "Přejete si zaznamenat novou animaci, aniž byste uložili předchozí?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "Animace již existuje"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "Nebyla zadána předpona souboru."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "Adresář %s neexistuje."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Atributy isopovrchu"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Hodnota isopovrchu"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Duplicitní atributy"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "Z"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "J"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "V"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "SZ"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "SV"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "JV"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "JZ"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Úroveň"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Seznam zdvojených prvků"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr "Měřítko %d"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Žádná"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Vektorové mapa je 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Vektorová mapa je 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d prvků (%(points)d bodů)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "na povrchu"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "rozmezí"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Sever"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Jih"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Detekce hran"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Sever"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Výška:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Východ"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Spodní"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr "Upraví vzdálenost a směr k bodu pohledu."
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr "Nastaví směr světla. Směr světla změníte klepnutím a přetažením bodu."
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "3D rastrová mapa <%s> nebyla nalezena."
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 msgid "3D view default settings"
 msgstr "Výchozí nastavení 3D zobrazení"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr "Vrátit nastavení na výchozí, změny se nepoužijí"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "hodnota:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "krok:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Pozice:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Otočení:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr "Průlet"
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Přemístit opěrný bod"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Světlo"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr "barva sítě:"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Značka:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Nastavení 3D zobrazení bylo uloženo do souboru <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18522,7 +19142,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18534,23 +19154,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18558,7 +19178,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18569,31 +19189,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18608,68 +19228,68 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Nástrojová lišta pro georektifikaci"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Vektorové body"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Přejmenovat sloupec"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Zobrazit mřížku"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Žádná kategorie"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Žádná kategorie"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Export rastrové mapy"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Nastavit průhlednost <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -18679,228 +19299,539 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Přiblížit na uložený region"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Přidat 3D rastrovou mapu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Nebyla vybrána žádná mapová vrstva"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr " %d map bylo smazáno ze současného mapsetu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Soubor regionu <%s> již existuje. Přejete si tento soubor přepsat?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Nová vektorová mapa <%s> byla vytvořena"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Barva pro vybraný vlicovací bod:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Zvolit barvu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Vyberte cílovou mapu k zobrazení:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Vybrat myší"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Nastavení osy"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Vybrat rastrovou mapu 3 (volitelné):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Georektifikace vektorové mapy <%s< selhala"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Přidat 3D rastrovou mapu"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Vyberte cílovou mapu k zobrazení:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Rastrová map pro profil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Klasifikace obrazových dat"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Dotazovat vybranou rastrovou/vektorovou mapu"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Přejete si odstranit vybranou mapovou vrstvu ze stromu vrstev?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Přidat nový opěrný bod"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Obrátit výběr"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Přemístit opěrný bod"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Přemístit opěrný bod"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Odstranit opěrný bod"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Odstranit opěrný bod"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Přidat vrstvu s popisky"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Přejmenovat vybraný mapset"
 
-#, fuzzy
-#~ msgid "Hide all toolbars"
-#~ msgstr "Panel nástrojů vlicovacích bodů"
+#~ msgid "Unsupported units"
+#~ msgstr "Nepodporované jednotky"
 
 #, fuzzy
-#~ msgid "Show all toolbars"
-#~ msgstr "'%s' zkopírováno do schránky"
+#~ msgid "Select IAU code of spatial reference system"
+#~ msgstr "Zvolit EPSG kód souřadnicového referenčního systému"
 
 #, fuzzy
-#~ msgid "Failed to copy layer: invalid type."
+#~ msgid "Failed to copy map: invalid map type ({} vs. {})."
 #~ msgstr "Nelze načíst seznam EPSG kódů: %s"
 
 #, fuzzy
-#~ msgid "Deleting"
-#~ msgstr "Smazat"
+#~ msgid ""
+#~ "Failed to copy map: action is allowed only within the current mapset."
+#~ msgstr " %d map bylo smazáno ze současného mapsetu"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Přejete si založit GRASS location <%s>?"
 
 #, fuzzy
-#~ msgid "Displaying"
+#~ msgid "&Display"
 #~ msgstr "Displej"
+
+#~ msgid "Map layers"
+#~ msgstr "Mapové vrstvy"
+
+#~ msgid "Search modules"
+#~ msgstr "Hledat moduly"
+
+#, fuzzy
+#~ msgid "Temporary map '%s' with result "
+#~ msgstr "Soubor již existuje"
+
+#, fuzzy
+#~ msgid "Vector map %s already exists. "
+#~ msgstr "Soubor již existuje"
+
+#, fuzzy
+#~ msgid "Temporary map %s  already exists.\n"
+#~ msgstr "Soubor již existuje"
+
+#, fuzzy
+#~ msgid "Temporary map '%s' was changed outside "
+#~ msgstr "Soubor již existuje"
+
+#~ msgid "Exit GUI"
+#~ msgstr "Konec grafického prostředí"
+
+#~ msgid "Invalid input data"
+#~ msgstr "Neplatná vstupní data"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "3D mód není k dispozici"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Vyhodnocuji model..."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Přejmenovat"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Kopírovat tabulku"
+
+#, fuzzy
+#~ msgid "List raster3D dataset maps"
+#~ msgstr "Připojit rastrová data"
+
+#, fuzzy
+#~ msgid "Extract subset of raster3D dataset"
+#~ msgstr "Import rastrových dat"
+
+#, fuzzy
+#~ msgid "Raster3D calculations"
+#~ msgstr "3D rastrový kalkulátor"
+
+#, fuzzy
+#~ msgid "Univariate raster3D dataset statistics"
+#~ msgstr "Univariantní statistika rastrové vrstvy"
+
+#~ msgid "Repository"
+#~ msgstr "Repozitář"
+
+#, fuzzy
+#~ msgid "Unpacks a vector map packed with v.pack."
+#~ msgstr "Aktualizuje matadata vektorové vrstvy."
+
+#~ msgid "Multiple import formats using OGR"
+#~ msgstr "Import různých formátů pomocí OGR"
+
+#, fuzzy
+#~ msgid "Common export formats using OGR"
+#~ msgstr "Export do běžných formátů"
+
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Nelze vykreslit mapovou vrstvu <%s>."
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Nelze vykreslit překrytí <%s>."
+
+#~ msgid "Digitize"
+#~ msgstr "Digitalizovat"
+
+#, fuzzy
+#~ msgid "Add default servers"
+#~ msgstr "Přidat smyčku"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr ""
+#~ "Nastavit výpočetní region podle podle vybrané mapy (ignoruje NULL hodnoty)"
+
+#~ msgid "Load settings:"
+#~ msgstr "Načíst nastavení:"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Přidat připojené vrstvy do stromu vrstev"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Přidat importované vrstvy do stromu vrstev"
+
+#~ msgid "Multiple GPS export formats using GPSBabel"
+#~ msgstr "Export různých formátů GPS pomocí GPSBabel"
+
+#, fuzzy
+#~ msgid ""
+#~ "Exports a vector map to a GPS receiver or file format supported by "
+#~ "GPSBabel."
+#~ msgstr ""
+#~ "Exportuje vektorovou mapu do GPS přijímače nebo do formátu, který "
+#~ "podporuje GPSBabel."
+
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Import starého vektorového formátu GRASS"
+
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Import starého vektorového formátu GRASS (všechny mapy)"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Převede starou verzi GRASS vektoru (< 5.7) do současného formátu"
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "GPSBabel GPS import"
+
+#~ msgid "GEOnet import"
+#~ msgstr "GEOnet import"
+
+#~ msgid "IDW from raster points (alternate method for sparse points)"
+#~ msgstr ""
+#~ "Interpolace IDW z rastrových bodů (alternativní metoda pro malý počet "
+#~ "bodů)"
+
+#~ msgid "Create optimally placed labels"
+#~ msgstr "Vytvořit optimálně umístěné popisky"
+
+#~ msgid "Bit pattern comparison "
+#~ msgstr "Korelace (bit pattern comparsion) pro ID pixelů s nízkou kvalitou"
+
+#, fuzzy
+#~ msgid "Data file <%(name)s> imported successfully."
+#~ msgstr "Vektorová mapa <%(name)s> (%(type)s) úspěšně načtena"
+
+#, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Správce atributových dat"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Vybrat zdrojový mapset:"
+
+#~ msgid "Choose project location and mapset"
+#~ msgstr "Vybrat lokaci a mapset projektu"
+
+#~ msgid "Manage"
+#~ msgstr "Spravovat"
+
+#, fuzzy
+#~ msgid ""
+#~ "Welcome to GRASS GIS %s%s\n"
+#~ "The world's leading open source GIS"
+#~ msgstr ""
+#~ "Vítejte v GRASS GIS %s\n"
+#~ "Vedoucím open source GIS"
+
+#~ msgid ""
+#~ "Select an existing project location and mapset\n"
+#~ "or define a new location"
+#~ msgstr ""
+#~ "Vyberte existující lokaci projektu nebo mapset\n"
+#~ "nebo definujte novou lokaci"
+
+#~ msgid ""
+#~ "Project location\n"
+#~ "(projection/coordinate system)"
+#~ msgstr ""
+#~ "Lokace projektu\n"
+#~ "(projekce/souřadnicový systém)"
+
+#~ msgid ""
+#~ "Accessible mapsets\n"
+#~ "(directories of GIS files)"
+#~ msgstr ""
+#~ "Přístupné mapsety\n"
+#~ "(adresáře GIS dat)"
+
+#~ msgid "Define new location"
+#~ msgstr "Definovat novou lokaci"
+
+#~ msgid ""
+#~ "Rename/delete selected\n"
+#~ "mapset or location"
+#~ msgstr ""
+#~ "Přejmenovat/odstranit vybraný\n"
+#~ "mapset nebo lokaci"
+
+#~ msgid "Start &GRASS"
+#~ msgstr "Spustit &GRASS"
+
+#~ msgid "&Location wizard"
+#~ msgstr "&Průvodce vytvořením location"
+
+#~ msgid "Rename mapset"
+#~ msgstr "Přejmenovat mapset"
+
+#~ msgid "Rename location"
+#~ msgstr "Přejmenovat lokaci"
+
+#~ msgid "Delete mapset"
+#~ msgstr "Odstranit mapset"
+
+#~ msgid "Delete location"
+#~ msgstr "Odstranit lokaci"
+
+#~ msgid "Welcome to GRASS GIS"
+#~ msgstr "Vítejte v GRASS GIS"
+
+#, fuzzy
+#~ msgid "Warning: "
+#~ msgstr "Upozornění"
+
+#, fuzzy
+#~ msgid "No GRASS location found in '%s'."
+#~ msgstr "Vybrat GRASS location a mapset"
+
+#~ msgid "Starting GRASS for the first time"
+#~ msgstr "Spuštění GIS GRASS poprvé"
+
+#, fuzzy
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Vytvořit rastrovou mapu"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importuje starší verze GRASS vektorových map."
+
+#~ msgid "Vector to volume"
+#~ msgstr "Převod vektorové vrstvy na volume"
+
+#~ msgid "Sites to vector"
+#~ msgstr "Vytvoření vektorové vrstvy z bodů (sites, GRASS 5.x)"
+
+#, fuzzy
+#~ msgid "Raster map calculator."
+#~ msgstr "3D rastrový kalkulátor"
+
+#~ msgid "V&olumes"
+#~ msgstr "&3D rastr"
+
+#~ msgid "Develop volumes"
+#~ msgstr "Vytvořit 3D rastrové mapy"
+
+#~ msgid "3D Mask"
+#~ msgstr "3D Maska"
+
+#~ msgid "Volume calculator"
+#~ msgstr "3D mapový kalkulátor"
+
+#~ msgid "Basic volume metadata"
+#~ msgstr "Základní metadata 3D rastrové vrstvy"
+
+#~ msgid "Voxel statistics"
+#~ msgstr "Základní statistiky 3D pixelu (voxel)"
+
+#~ msgid "Volume"
+#~ msgstr "3D rastr"
+
+#~ msgid ""
+#~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
+#~ "vector points map."
+#~ msgstr ""
+#~ "Importuje US-NGA GEOnet jmenný server (GNS) soubory o státech do "
+#~ "vektorové bodové mapy mapy GRASSu"
+
+#, fuzzy
+#~ msgid ""
+#~ "Outputs a raster map showing the anisotropic cumulative cost. Computes "
+#~ "anisotropic cumulative cost of moving between different geographic "
+#~ "locations on an input elevation raster map whose cell category values "
+#~ "represent elevation combined with an input raster map layer whose cell "
+#~ "values represent friction cost."
+#~ msgstr ""
+#~ "Vytvoří rastrovou mapu obsahující anizotropické kumulativní náklady "
+#~ "pohybumezi různými geografickými polohami po vstupní rastrové mapě s "
+#~ "výškou, jejížhodnoty buněk reprezentují výšku kombinovanou s další mapou, "
+#~ "jejíž hodnoty reprezentují frikční povrch."
+
+#~ msgid "Surface interpolation utility for raster map."
+#~ msgstr "Nástroj pro interpolaci povrchů rastrových map."
+
+#~ msgid "Surface generation program."
+#~ msgstr "Tvorba povrchu"
+
+#~ msgid "Compares bit patterns with a raster map."
+#~ msgstr "Porovnává bitové vzory s rastrovou mapou."
+
+#, fuzzy
+#~ msgid ""
+#~ "Calculates univariate statistics from the non-null cells for each "
+#~ "registered raster3d map of a space time raster3d dataset."
+#~ msgstr ""
+#~ "Spočítá univariantní statistiku z ne-nullových 3D buněk 3D rastrové "
+#~ "vrstvy."
diff --git a/locale/po/grasswxpy_de.po b/locale/po/grasswxpy_de.po
index 4b6462d..8d6a274 100644
--- a/locale/po/grasswxpy_de.po
+++ b/locale/po/grasswxpy_de.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_de\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-01-14 15:50+0100\n"
 "Last-Translator: Markus Neteler <neteler at osgeo.org>\n"
 "Language-Team: German <grass-translations at lists.osgeo.org>\n"
@@ -22,23 +22,23 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.5.4\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Wählen Sie das GRASS GIS Datenverzeichnis"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Wählen Sie die GRASS Location"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Wählen Sie ein GRASS Mapset"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "Das GRASS GIS Datenverzeichnis enthält Locations."
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -47,7 +47,7 @@ msgstr ""
 "(Projektion). Eine Location kann ein Projekt sein. Eine Location enthält "
 "Mapsets."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
@@ -55,20 +55,20 @@ msgstr ""
 "Ein Mapset enthält GIS-Daten eines Projektes, einer Aufgabe in einem "
 "Projekt, einer Unterregion oder eines Nutzers."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Starte &GRASS Sitzung"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Blättern"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "&Neu"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -76,11 +76,11 @@ msgstr ""
 "in ausgewählter Location"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "N&eu"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 #, fuzzy
 msgid ""
 "Create a new location using location wizard. After location is created "
@@ -90,135 +90,135 @@ msgstr ""
 "Location wird GRASS gestartet."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Umbenennen"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Ausgewählte Location umbenennen"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "&Löschen"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Ausgewählte Location löschen"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Umbenennen"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Ausgewähltes Mapset umbenennen"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "Löschen"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Ausgewähltes Mapset löschen"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS %s Ebenen-Manager"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Betrete GRASS Sitzung"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Fehler"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 "Kann die GRASS Datenbank nicht setzten. Bitte überprüfen Sie ihre lokalen "
 "Einstellungen."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "FEHLER: Location <%s> nicht gefunden."
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "FEHLER: Mapset <%s> nicht gefunden."
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Fehlerhafte Zeile in GISRC Datei (%s):%s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Fehler: "
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, fuzzy, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 "Möchten Sie die Location anhand der Datenquelle <%(name)s> erzeugen? Die "
 "Standardregion wird auf Grundlage der importierten Karte erstellt."
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Importiere Daten"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Möchten Sie ein neues Mapset anlegen?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Neues Mapset erstellen"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Location <%s> erstellt."
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "Möchten Sie nun die Ausdehnung und Auflösung der Standardregion eingeben?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "Georektifizieren der Vektorkarte <%s> fehlgeschlagen."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, fuzzy, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
@@ -227,7 +227,7 @@ msgstr ""
 "Möchten Sie die Location anhand der Datenquelle <%(name)s> erzeugen? Die "
 "Standardregion wird auf Grundlage der importierten Karte erstellt."
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -238,7 +238,7 @@ msgstr ""
 "\n"
 "Dieses Mapset kann nicht umbenannt werden."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -249,12 +249,12 @@ msgstr ""
 "\n"
 "Geben Sie den neuen Namen ein:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Nachricht"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -265,7 +265,7 @@ msgstr ""
 "\n"
 "Das Mapset <%s> existiert bereits in der Location."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -276,7 +276,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -287,7 +287,7 @@ msgstr ""
 "\n"
 "Die Location <%s> existiert bereits in der GRASS Datenbank."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -298,7 +298,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -309,7 +309,7 @@ msgstr ""
 "\n"
 "Dieses Mapset kann nicht gelöscht werden."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -322,11 +322,11 @@ msgstr ""
 "\n"
 "ALLE KARTEN in diesem Mapset werden UNWIDERRUFLICH GELÖSCHT!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Kann Mapset nicht löschen"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -337,43 +337,43 @@ msgstr ""
 "\n"
 "ALLE KARTEN dieser Location werden UNWIDERRUFLICH GELÖSCHT!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Kann Location niht löschen"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 "Kann die GRASS Datenbank nicht setzten. Bitte überprüfen Sie ihre lokalen "
 "Einstellungen."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Verzeichnis %s existiert nicht."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Wählen Sie das GIS-Datenverzeichnis"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Geben Sie ein Namen für das neue Mapset ein:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Das Mapset <%s> existiert bereits."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -382,17 +382,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Ausgewähltes Mapset umbenennen"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Kann neues Mapset '%s' nicht erstellen"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -411,11 +411,11 @@ msgstr ""
 "Wollen Sie versuchen .gislock zu löschen (Sie brauchen entsprechende Rechte "
 "für diese Operation) und Fortzufahren?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "Lock-Datei gefunden."
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -428,7 +428,7 @@ msgstr ""
 "Weitermachen hier Ihre Daten beschädigen. Überprüfen Sie sicherheitshalber "
 "die Prozesstabelle..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -439,7 +439,7 @@ msgstr ""
 "\n"
 "Einzelheiten: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
@@ -448,11 +448,11 @@ msgstr ""
 "Der Name <%(name)s> ist kein gültiger Name für Locations oder Mapsets. Bitte "
 "verwenden Sie nur ASCII-Zeichen ohne %(chars)s und Leerzeichen."
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "ungültiger Name"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -481,189 +481,189 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Werkzeugleiste Georektifizierung"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Werkzeugleiste Karte"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Werkzeugleiste Extras"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Werkzeugleiste Verschiedenes"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Digitalisierungsfehler"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Kartenfenster drucken"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Ziel-Anzeige"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 #, fuzzy
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Passe Ziel- an Quell-Anzeige an"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 #, fuzzy
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Passe Quell- an Ziel-Anzeige an"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Region anzeigen"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Region anzeigen"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importiere Vektorkarte"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Kann die Vektorkarte <%s> nicht erstellen."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Kann die Vektorkarte <%s> nicht erstellen."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Nichts zu extrahieren."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Kann die Vektorkarte <%s> nicht erstellen."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr "Analyse fehlgeschlagen."
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Es wurde kein Kartenebene ausgewählt"
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Die Datei existiert bereits."
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Keine Kartenebene selektiert. Breche die Operation ab."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Objekt-ID %d kann nicht gelesen werden. Operation abgebrochen."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Keine Kartenebene selektiert. Breche die Operation ab."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Objekt-ID %d als tot markiert. Operation abgebrochen."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Histogramme"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Vektorpunkte"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -672,605 +672,606 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr "Keine Klasse ausgewählt"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Keine Gruppe ausgewählt."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Karte <%s> nicht gefunden."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Karte <%s> nicht gefunden."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Rasterkarte <%s> nicht gefunden"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Vektorkarte <%s> nicht gefunden"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Lade Rasterkarte <%s>..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Lade Rasterkarte <%s>..."
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Wählen Sie eine Gruppe:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Erzeuge/bearbeite Gruppe..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Wählen Sie eine Gruppe:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Wählen Sie eine Gruppe:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Wählen Sie eine Gruppe:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Karte <%s> nicht gefunden."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Keine offenen Änderungen in Gruppe <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Name der Mapset:"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Name der Rasterkarte:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Name der Vektorkarte:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Bild klassifizieren"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "Klassen"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr "Klassenname"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Farbe"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Auf die selektierten Karten zoomen"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Speichere Ausdruck in Datei"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Geben Sie ein Namen für das neue Mapset ein:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Binärdatei importieren"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Exportiere in Bild"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Name der neuen Vektorkarte:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Erzeuge Attributtabelle"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Importiere Attributtabellen in verschiedene Formate."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr "Vektorkarte <%s> vorhanden"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr "Transparenz einstellen"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Speichere Ausdruck in Datei"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Selektierte Ebenen löschen"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Exportiere in Bild"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "RGB-Karte hinzufügen"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr "Training"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Vorschau"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr "Bestimme Kartenfenster für "
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr " / Zoom auf Karte"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Rasterkarte hinzufügen"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS Kartenfenster: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Werkzeugleiste Karte"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Werkzeugleiste Verschiedenes"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr "Karte <%s> nicht gefunden."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Karte <%s> nicht gefunden."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Keine Daten zu rendern (leere Karte). Berechnung abgebrochen."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Wähle einen Dateinamen, um Bild zu speichern (Anfügen einer Extension nicht "
 "erforderlich)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "Es wurde keine Raster- oder Vektorkarte für die Abfrage ausgewählt."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Selektiere Rasterkarte:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Name der Rasterkarte:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Name der Rasterkarte:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Wechsle zu 2D-Ansicht zurück"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Wechsle zu 2D-Ansicht zurück"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Schließen"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Kategorie (Spalte %s) fehlt."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Karteneinstellungen"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr "Spiegel-Modus"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Spiegel-Modus"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Farbe:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Shape Größe"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Linienbreite:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Größe:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Werkzeuge"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Abfrage von Raster-/Vektorkarte(n)"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Abfrage von selektierten Raster-/Vektorkarte(n)"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr "Wisch-Modus"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Wählen Sie einen EPSG Code"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Orientierung"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "GRASS GIS Passpunkte (GCPs) verwalten"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "GCP-Liste"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "Quell-Anzeige"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "Ziel-Anzeige"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "Werkzeugleiste GCP Ansicht"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Werkzeugleiste GCP Manager"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Seiteneinstellungen"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Druckvorschau"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Kartenfenster drucken"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Auf den Arbeitsbereich zoomen (mit g.region definiert)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Auf die Standardregion zoomen"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Auf die gespeicherte Region zoomen"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Größe des Kartenfensters in benannter Region speichern"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Gehe zu GCP mit der Nummer"
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Gültiger Wertebereich:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "RMS-Fehler"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Forward: %(forw)s, Backward: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Setup für Georektifizierung"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Setup der Georektifizierung abgebrochen."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Wählen Sie einen Kartentyp und Location/Mapset"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Kartentyp der georektifiziert wird"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "Raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "Vektor"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Wählen Sie die Quell-Location:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Wählen Sie die Quell-Mapset:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 "Sie müssen zuerst eine gültige Location wählen, bevor Sie ein Mapset wählen "
 "können."
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 "Sie müssen zuerst eine gültige Location und Mapset wählen, um fortzufahren."
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Wählen Sie die zugeorektifizierende Gruppe Bilder/Karten"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Wählen Sie eine Gruppe:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Erzeuge eine Gruppe, wenn keine existiert"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Füge Vektorkarte zu der Gruppe hinzu..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Erweiterung für Ausgabekarten:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 "Sie müssen eine gültige Gruppe von Bildern/Karten wählen, um fortzufahren."
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Sie müssen eine Kartennamenerweiterung eingeben, um fortzufahren."
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 "Wählen Sie eine darzustellende Karte für Erzeugung von Passpunkten (GCP)."
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Wählen Sie darzustellende Ausgangskarte:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr "Wählen Sie darzustellende Rasterzielkarte:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr "Wählen Sie darzustellende Vektorzielkarte:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Sie müssen ein gültiges Bild wählen, um fortfahren zu können"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1279,28 +1280,28 @@ msgstr ""
 "Keine Karten in ausgewählter Gruppe <%s>. \n"
 "Bitte bearbeiten Sie die Gruppe oder wählen Sie eine andere aus."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Verwalte Ground Control Points (GCPs)"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Mindestens %d GCPs erfortdert. Operation abgebrochen."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "Quelle"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "Ziel"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Setze GCP-Koordinaten"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1313,28 +1314,28 @@ msgstr ""
 "Ost: %(coor0)s \n"
 "Nord: %(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Schreiben der POINTS-Datei fehlgeschlagen"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "POINTS-Datei gespeichert für Gruppe <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "Quell-Fenster nicht definiert"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "Ziel-Fenster nicht definiert"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Lesen der POINTS-Datei fehlgeschlagen"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1349,38 +1350,38 @@ msgstr ""
 "7+ Punkte für 2. Ordnung und\n"
 "10+ Punkte für 3. Ordnung."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rektifiziere Bilder, bitte warten"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformiere <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rektifiziere Bilder, bitte warten"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Georektifizieren der Vektorkarte <%s> fehlgeschlagen."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "GCP Manager-Einstellungen"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Verlasse GCP Manager"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Speichere Ground Control Points (GCPs)"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 #, fuzzy
 msgid ""
 "Could not calculate RMS Error.\n"
@@ -1389,7 +1390,7 @@ msgstr ""
 "Could not calculate RMS Error. \n"
 "Possible error with g.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 #, fuzzy
 msgid ""
 "Could not calculate new extends.\n"
@@ -1398,118 +1399,118 @@ msgstr ""
 "Konnte neue Ausdehnung nicht berechnen. \n"
 "Möglicher Fehler bei g.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Passe Quell- an Ziel-Anzeige an"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Passe Ziel- an Quell-Anzeige an"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "verwende"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "Quelle E"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "Quelle N"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "Ziel E"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "Ziel N"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Vorwärts-Fehler"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Rückwärts-Fehler"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Ungültige Koordinate. Operation abgebrochen."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Erzeuge Vektorkarten Gruppe"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Wählen Sie Vektorkarte(n) für die Gruppe:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Editiere GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Ground Control Point Nummer"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "Quelle E:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "Ziel E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "Quelle N:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "Ziel N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Wende Änderungen auf aktuelle Sitzung an"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Wende Änderungen an und speichere sie in den Benutzereinstellungen (Standard "
 "für die nächste Sitzung)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Dialog schließen"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Symbologie"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Hebe nur den höchsten RMS-Fehler hervor"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Hebe RMS-Fehler > M + SD * factor hervor:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1519,64 +1520,64 @@ msgstr ""
 "mean + standard deviation * factor hervor. \n"
 "Empfohlene Werte für diesen Faktor liegen zwischen 1 und 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Symbol-Einstellungen"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Farbe für hohen RMS-Fehler:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Farbe für ausgewählte GCPs:"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Farbe für nicht verwendete GCPs:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Zeige nicht verwendete GCPs an"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Symbolgröße:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Georektifizierung"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "Wählen Sie die Rektifizierungsordnung"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "1. Ordnung"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "2. Ordnung"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "3. Ordnung"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Selektiere Inperolationsmethode:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "nur den Arbeitsbereich in Ziel-Location überführen"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "RMS-Schwellenwert muss > 0 sein"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1584,39 +1585,39 @@ msgstr ""
 "RMS Schwellenwertfaktor ist < 1\n"
 "Zuviele Punkte könnten hervorgehoben werden"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "GCP Manager-Einstellungen in Datei '%s' gespeichert."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Vektor-Digitalisierung"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Vektordigitalisierer nicht vorhanden"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Vektorkarte <%s> nicht in aktueller Mapset gefunden"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Neue Vektorkarte <%s> erzeugt"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht erstellen."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1627,257 +1628,257 @@ msgstr ""
 "den Digitizer erforderlich. Wollen Sie die Topologie erneuern (benötigt "
 "einige Zeit) und die Vektorkarte dann zum Bearbeiten öffnen?"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Topologie fehlt"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Aktualisiere die Kategorien"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Keine Vektorkarte zum bearbeiten ausgewählt."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr "Nix zu tun. Wählen Sie ein Werkzeug aus der Editor Werkzeugleiste."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Dialog \"Z-Bulk-Label\""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Digitalisier-Einstellungen"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Wende Änderungen in dieser Sitzung an"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 "Beende den Dialog und speichere die Änderungen in Datei mit "
 "Benutzereinstellungen"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Schließe den Dialog und ignoriere die Änderungen"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Allgemein"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Fenster"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Linienbreite"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Fangen"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Fangtoleranz"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "Bildschirmpixel"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "Karteneinheiten"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Fange auch an Vertices"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Fangtoleranz ist %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Selektiere Vektorobjekte"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Schwellwert für Selektion"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Selektiere nur Objekte innerhalb der Auswahlbox"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 "Standardmäßig sind alle Objekte selektiert die von der Auswahlbox "
 "geschnitten werden "
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Überprüfe auf Doppelte"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Neue Grenze digitalisieren"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Teile Linien an Kreuzungen"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr "Digitalisiere Flächen"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Änderungen speichern"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Änderungen beim Beenden speichern"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Abfrage-Werkzeug"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Wählen Sie ein Abfrage-Werkzeug"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Mittels Rechteck selektieren"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "Länge"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Selektiere Linien"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "kürzer als"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "länger als"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "Überstand (dangle)"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Selektiere Überstände (dangles)"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Attribute"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Digitalisiere neues Objekt"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Neuen Datensatz der Tabelle hinzufügen"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Ebene"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Kategorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Modus"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Nächster zu verwendender"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Kategorienummer"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Kategorie-Modus"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Handbuchseiteneintrag"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Keine Kategorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Lösche existierende Objekte"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Lösche Datensatz aus Tabelle"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Geometrie Attribute"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "Fläche"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "Umfang"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
@@ -1885,111 +1886,111 @@ msgstr ""
 "Beachte: Diese Einstellungen werden im Workspace und nicht in den "
 "Einstellungen für die Vektordigitalisierung gespeichert."
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Neues Liniensegment digitalisieren"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Neue Linie/Grenze digitalisieren"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Hervorheben"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Hervorheben (Doppelte)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Punkt"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Grenze (keine Fläche)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Grenze (eine Fläche)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Grenze (zwei Flächen)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Zentroid (in einer Fläche)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Zentroid (außerhalb einer Fläche)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Zentroid (doppelt in einer Fläche)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Knoten (eine Linie)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Knoten (zwei Linien)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Fläche (geschlossene Grenze + Zentroid)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Richtung"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Fangen ausgeschaltet"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "Fangtoleranz ist %(value).1f %(units)s (basiert auf Auflösung des "
 "Arbeitsbereichs)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Vektordigitalisiereinstellungen wurden in der Datei <%s> gespeichert."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Digitalisierungsfehler"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "Keine Vektorkarte für Bearbeitung geöffnet."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1997,22 +1998,22 @@ msgid ""
 "Reason: %s"
 msgstr "Schreiben eines neuen Objektes fehlgeschlagen. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Lesen des Objekte-ID %d fehlgeschlagen. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Datenbankverbindung %d ist nicht vorhanden. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Kann Datenbanktreiber <%s> nicht starten. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
@@ -2020,57 +2021,57 @@ msgstr ""
 "Kann Datenbank <%(db)s> nicht mit Treiber <%(driver)s> öffnen. Operation "
 "abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "SQL Abfrage '%s' kann nicht ausgeführt werden. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Objekt-ID %d als tot markiert. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Nicht unterstützter Objekttyp %d. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Unbekannter Objekttyp '%s'"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "Nicht genügend Punkte für Linie"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Liste der Kategorien - Rechtsklick um zu Löschen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Neue Kategorie hinzufügen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Änderungen anwenden"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Änderungen ignorieren und Dialog schließen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Änderungen anwenden und Dialog schließen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Objekt ID:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2081,258 +2082,258 @@ msgstr ""
 "Layer und Kategorie Nummern müssen integer sein.\n"
 "Layer Nummern müssen größer als Null sein."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Selektierte löschen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Alle löschen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Erneut Laden"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Kann die Vektorkarte nicht aktualisieren."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d Linien ausgewählt für die Z Massenbeschriftung."
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Wert setzen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Startwert"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Schrittweite"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Liste der Doppelten"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Objekt ID"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Layer (Kategorien)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Neuen Punkt digitalisieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Links: neuer Punkt"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Neue Linie digitalisieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Links: neuer Punkt; Ctrl+Links: letzten Punkt zurücknehmen; Rechts: Linie "
 "beenden"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Neue Grenze digitalisieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "neues Zentroid digitalisieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 "Neue Fläche digitalisieren (Flächengrenzen ohne Kategorie und einem Zentroid "
 "mit Kategorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Erstellt Poly-Linien aus Linien und Grenzen."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Links: Selektieren; Ctrl+Links: Selektion aufheben; Rechts: Bestätigen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Fange selektierte Linien/Grenzen (nur an Knoten)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Selektierte Datensätze löschen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Zeige/Aktualisiere Attribute"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Links: Selektieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Zeige/Aktualisiere Kategorien"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Drehe selektierte Linien/Grenzen um"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Fange selektierte Linien/Grenzen (nur an Knoten)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Verschiebe Vertex"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Ausgewähltes Mapset umbenennen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Beende Vektor-Digitalisierung"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Verlasse Digitizer und speichere Änderungen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Vektordigitalisierer Handbuch"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Handbuch des Vektoreditors anzeigen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Zusätzliche Werkzeuge (Kopieren, Umdrehen, Verbinden, etc.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Rückgängig"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Vorherige Änderungen rückgängig"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Vorherige Änderungen rückgängig machen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Teile selektierte Linien/Grenzen an Kreuzung"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Verbinde selektierte Linien/Grenzen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Kategorien kopieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Kopiere Objekt aus der (Hintergrund-) Vektorkarte."
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Attribute kopieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Objekttyp-Konvertierungen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Drehe selektierte Linien/Grenzen um"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Führe selektierte Linien/Grenzen zusammen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Fange selektierte Linien/Grenzen (nur an Knoten)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Trenne Linie/Grenze"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Feature abfragen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Z Massenbeschriftung von 3D Linien"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Vektorkarte selektieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Vektorkarte ist nicht 3D. Breche die Operation ab."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Vektorkarte selektieren"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, fuzzy, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2344,66 +2345,67 @@ msgstr ""
 "den Digitizer erforderlich. Wollen Sie die Topologie erneuern (benötigt "
 "einige Zeit) und die Vektorkarte dann zum Bearbeiten öffnen?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Vektordigitalisier Fehler"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Bitte warten Sie, ich öffne die Vektorkarte <%s> zum Editieren..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Nicht unterstützter Objekttyp %d. Operation abgebrochen."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Vektordigitalisierer Handbuch"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Wollen Sie die Änderungen in der Vektorkarte <%s> speichern?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Änderungen speichern?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Bitte warten Sie, ich erneuere die Topologie schließe die Vektorkarte <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Bearbeitung der Vektorkarte <%s> erfolgreich abgeschlossen"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Neue Vektorkarte"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Messe Strecke"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2412,15 +2414,15 @@ msgstr ""
 "Klicken und ziehen mit der linken Maustaste um zu messen.%sDoppelklick mit "
 "der linken Maustaste, um zu Löschen."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Messe Strecke"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Messe Strecke:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, fuzzy, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
@@ -2429,171 +2431,190 @@ msgstr ""
 "Geodäsische Distanz wird von diesem Tool nicht unterstützt.\n"
 "Grund: %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "Segment"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "gesamte Distanz"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "Richtung"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr "Grad (im Uhrzeigersinn von Gitternord)"
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Messe Strecke:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Legende"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Maßstabsbalken"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Nordpfeil hinzufügen"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Werkzeugleiste GCP Ansicht"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' in die Zwischenablage kopiert"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Einstellungen anzeigen"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Füge mehrere Vektorkarten hinzu"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Rasterlegende"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Bitte warten,  Bild wird exportiert..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Auf die Ausdehnung der gespeicherten Region vergrößern"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Region <%s> nicht gefunden. Berechnung abgebrochen."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Ausdehnung des Kartenfensters als benannte Region speichern"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Warnung"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Zeige Textobjekte"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr "Text:"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotation:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Schriftart:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Schrift"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2601,164 +2622,535 @@ msgstr ""
 "Ziehe Sie den Text mit der Maus im Zeiger-Modus in die gewünschte Position.\n"
 "Doppelklick ändert die Einstellung."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
-msgstr "GRASS GIS Graphical Modeler"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Lesen der Anweisungen fehlgeschlagen %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "Modell"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Lesen der Anweisungen fehlgeschlagen %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Objekte"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+"Die Vektorkarte <%s> existiert bereits im aktuellen Mapset. Wollen Sie diese "
+"überschreiben?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "Variablen"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Überschreiben?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr "Python Editor"
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "Wählen Sie GRASS-Location und Mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Befehlsausgabe"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr "Python Skript enthält lokale Änderungen."
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Umbenennen"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr "Python Skript ist aktuell"
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Mapset umbenennen"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Überprüfe Modell..."
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "Stelle Modell neu dar..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "Wollen Sie die Änderungen im Modell speichern?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr "Wollen sie die aktuellen Einstellungen in eine Modell-Datei speichern?"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Keine Vektorkarte zum bearbeiten ausgewählt."
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Grafischen Modellierer beenden"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "Tabelle kopieren"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
-msgid "No intermediate data to delete."
-msgstr "Keine temporären Daten zu löschen."
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Kann Datei %s nicht lesen."
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Wollen sie die Daten dauerhaft löschen?%s"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr ""
+"Die Vektorkarte <%s> existiert bereits im aktuellen Mapset. Wollen Sie diese "
+"überschreiben?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "Lösche temporäre Daten?"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Modell wird ausgeführt..."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "nur den Arbeitsbereich in Ziel-Location überführen"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"Aktuelles Modell ist nicht leer. Wollen sie die aktuellen Einstellungen in "
-"eine Modell-Datei speichern?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "Neues Modell erstellen?"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "Mapset löschen"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr "Auswahl der Modell-Datei"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Löschen"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "GRASS Model File (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "entferne Duplikate"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
-msgstr "%(items)d items (%(actions)d actions) in Modell geladen"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Fenster"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
-"Modell-Datei <%s> existiert bereits. Wollen Sie diese Datei überschreiben?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "Speichere Modell"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "Datei <%s> gespeichert"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "Einserkomplement"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr "Wählen Sie eine Datei, um das aktuelle Modell zu speichern"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "Modell ist leer. Nichts zu überprüfen."
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Kopieren"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Überprüfe Modell..."
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "&Raster"
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Karte anzeigen"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Mapset"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3D Raster Map Calculator"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3D Raster Map Calculator"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
-"Modell ist nicht gültig.\n"
-"\n"
-"%s"
-
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "Modell ist gültig."
+"Aktuelle Location ist <%(loc)s>.\n"
+"Aktuelles Mapset ist <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Model exported to <%s>"
-msgstr "Modell exportiert in <%s>"
+msgid "Current mapset is <%s>."
+msgstr "Aktuelles Mapset ist <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
-msgid "Comment:"
-msgstr "Kommentar:"
+#: ../gui/wxpython/datacatalog/catalog.py:33
+#, fuzzy
+msgid "Data catalog"
+msgstr "Datenauswahl"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Name der GRASS Location:"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Klicke um Ebenen-Einstellungen zu ändern."
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Suchmodul"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Bitte, erzeugen Sie zunächst ein Kartenausschnitt"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Wollen Sie die Änderungen im Modell speichern?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Änderungen speichern"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Kann das Profil der Rasterkarte nicht erstellen."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Kann die Vektorkarte <%s> nicht erstellen."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Rendern..."
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Erstelle eine neue Farbtabelle für Rasterkarten"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Erzeuge neue Vektorkarte"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Name der Rasterkarte:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Vektorkarte selektieren"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Name der Rasterkarte:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Berechnet den Form-Index einer Rasterkarte."
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"Die Vektorkarte <%s> existiert bereits im aktuellen Mapset. Wollen Sie diese "
+"überschreiben?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitalisiere Flächen"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Neue Linie digitalisieren"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Neuen Punkt digitalisieren"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Rasterkarten packen"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Beende Vektor-Digitalisierung"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Selektiere Rasterkarte:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Zellenwerte"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Breite:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "Keine Rasterkarte"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr "GRASS GIS Graphical Modeler"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "Modell"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Objekte"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "Variablen"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr "Python Editor"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Befehlsausgabe"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr "Python Skript enthält lokale Änderungen."
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr "Python Skript ist aktuell"
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "Stelle Modell neu dar..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "Wollen Sie die Änderungen im Modell speichern?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr "Wollen sie die aktuellen Einstellungen in eine Modell-Datei speichern?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Grafischen Modellierer beenden"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+msgid "No intermediate data to delete."
+msgstr "Keine temporären Daten zu löschen."
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Wollen sie die Daten dauerhaft löschen?%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "Lösche temporäre Daten?"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"Aktuelles Modell ist nicht leer. Wollen sie die aktuellen Einstellungen in "
+"eine Modell-Datei speichern?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "Neues Modell erstellen?"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr "Auswahl der Modell-Datei"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "GRASS Model File (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr "%(items)d items (%(actions)d actions) in Modell geladen"
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+"Modell-Datei <%s> existiert bereits. Wollen Sie diese Datei überschreiben?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "Speichere Modell"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "Datei <%s> gespeichert"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr "Wählen Sie eine Datei, um das aktuelle Modell zu speichern"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "Modell ist leer. Nichts zu überprüfen."
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Überprüfe Modell..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"Modell ist nicht gültig.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "Modell ist gültig."
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr "Modell exportiert in <%s>"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+msgid "Comment:"
+msgstr "Kommentar:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
 msgid "Add comment"
 msgstr "Kommentar hinzufügen"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "wxGUI Grafischen Modellierer"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2771,190 +3163,191 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "Bitte warten Sie, lade Modell..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr ""
 "Das Schreiben der aktuellen Einstellungen in die Modell-Datei nicht "
 "erfolgreich."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Kann die Datei <%s> nicht zum Schreiben öffnen."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Entfernen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Ausschalten"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Aktiviere"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr "Beschriftung setzen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr "Kommentar erstellen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Füge Kontrollpunkt hinzu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Entferne Kontrollpunkt"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "Temporär"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Eigenschaften"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "Beschriftung:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Liste von Variablen - Rechtsklick für Löschen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Name"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Datentyp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Standardwert"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Beschreibung"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Neue Variable hinzufügen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "Integer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "Fließkomma"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "Zeichenkette"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "Region"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "Datei"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Neue Variable zu Modell hinzufügen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Liste von Elementen - Rechtsklick für Löschen"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Label"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr "In Schleife"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parameter"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Befehle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Kein Bild selektiert."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Python-Skript"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Los"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Starte Python-Skript"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Speichere Python-Skript in Datei"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2962,29 +3355,35 @@ msgstr ""
 "Aktualisiere Python-Skript auf Grundlage des Modells.\n"
 "Alle lokalen Änderungen im Skript werden überschrieben."
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Kann das Python Skript '%s' nicht starten"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Wählen Sie die zu speichernde Datei"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Pythont Skript (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Datei <%s> existiert bereits. Wollen Sie die Datei überschreiben?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Speichere Datei"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
@@ -2992,167 +3391,158 @@ msgstr ""
 "Python-Skript wurde lokal geändert. Aktualisierung wird die Änderungen "
 "überschreiben. Wollen Sie wirklich fortfahren?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Update"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Modeler-Einstellungen"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Eintragseigenschaften"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Deaktiviert:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Gültig:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Ungültig:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Berechnung:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Shape Größe"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Breite:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Höhe:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Daten"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Typ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "3D Raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Vektor:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabelle"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Schleife"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr "Kommentar"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Modell-Eigenschaften"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadaten"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Befehle"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Erlaube, dass Ausgabedateien existierende Dateien überschreiben"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Wende Eigenschaften an"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Name:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Beschreibung:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autor(en):"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "Modell"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Skript erzeugt durch den wxGUI  Grafischen Modellierer."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "undefinierte Variable '%s'"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Modell wird ausgeführt..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Modell ist leer. Nichts auszuführen."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3163,86 +3553,86 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Ausführen des Modells?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr "Folgende Variablen sind nicht definiert:"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Rasterkarten"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "3D Rasterkarten"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Vektorkarten"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "unbekannt"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<nicht definiert>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Bedingung:"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Bedingung: nicht definiert"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Modellparameter"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr "Lösche temporäre Daten, wenn fertig."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Dateneigenschaften"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Name des Elements:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "Art des Elements:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "Füge GRASS Kommando zu Modell hinzu"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3252,7 +3642,7 @@ msgstr ""
 "\n"
 "Hinzufügen einer neuen Aktion zu Modell nicht möglich."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3263,32 +3653,32 @@ msgstr ""
 "\n"
 "Hinzufügen einer neuen Aktion zu Modell nicht möglich."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Beziehungseigenschaften"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "Von"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Nach"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Daten: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Befehl:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Option:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3296,7 +3686,7 @@ msgstr ""
 "Relation beginnt nicht mit einem Daten-Dings.\n"
 "Kann Relation nicht hinzufügen."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3304,7 +3694,7 @@ msgstr ""
 "Relation zeigt nicht auf GRASS Befehl.\n"
 "Kann die Relation nicht hinzufügen."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3312,69 +3702,69 @@ msgstr ""
 "Keine relevante Option gefunden.\n"
 "Kann Relation nicht hinzufügen."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Bedingung"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Loop-Eigenschaften"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Liste von Elementen im Loop"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Serien"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "Definieren Sie eine Karten-Serie als Bedingung für die Schleife"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "Definiert eine Karten-Serie"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "If-Else-Eigenschaften"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Liste von Objekte im 'if'-Block"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Liste von Objekte im 'else'-Block"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 "Variable <%s> ist im Modell bereits vorhanden. Hinzufügen nicht erfolgreich."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Wollen sie alle Variablen aus dem Modell löschen?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Lösche Variablen"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Nein"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Ja"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3383,12 +3773,12 @@ msgstr ""
 "Kann Datei nicht öffnen\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "Datei mit Anweisungen wird mit folgender Region geladen: %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
@@ -3397,23 +3787,23 @@ msgstr ""
 "Region kann nicht gesetzt werden\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "Kann Anweisungen nicht lesen %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3422,7 +3812,7 @@ msgstr ""
 "Maßstab hat sich geändert, alter Wert: %(old)s\n"
 "neuer Wert: %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
@@ -3431,7 +3821,7 @@ msgstr ""
 "Lesen der Anweisungen fehlgeschlagen %s.\n"
 "Verwende 1:25000 Notation."
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3441,7 +3831,7 @@ msgstr ""
 "%(old2)s\n"
 "neuer Wert: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3451,7 +3841,7 @@ msgstr ""
 "%(old2)s\n"
 "neuer Wert: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3460,13 +3850,13 @@ msgstr ""
 "Lesen der Anweisungen fehlgeschlagen  %(file)s.\n"
 "Unbekanntes Format %(for)s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "Lesen der Anweisungen fehlgeschlagen %s."
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
@@ -3475,8 +3865,8 @@ msgstr ""
 "Zeichen in der Position %s werden nicht von der Zeichenkodierung ISO-8859-1 "
 "(Latin 1), welche vom Modul benötigt wird, unterstützt."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
@@ -3484,18 +3874,18 @@ msgstr ""
 "Nicht alle Zeichen werden von der Zeichenkodierung ISO-8859-1 (Latin 1), "
 "welche von dem Modul ps.map benötigt wird."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 "Lesen der Anweisungen %(inst)s fehlgeschlagen: Datei %(file)s nicht gefunden."
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "GRASS GIS Graphical Modeler"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
@@ -3503,39 +3893,39 @@ msgstr ""
 "Die \"Python Imaging Library\" ist nicht vorhanden.\n"
 "Die \"Vorschau\"-Funktion wird nicht funktionieren."
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 "Das Programm ps2pdf ist nicht vorhanden. Bitte installieren Sie es um PDFs "
 "zu erzeugen."
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Erzeuge PDF..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "Erzeuge PostScript..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Erzeuge Vorschau..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "Ps.map beendet mit Rückgabewert %s"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "%(prg)s beendet mit Rückgabewert %(code)s"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF erzeugt"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3547,154 +3937,154 @@ msgstr ""
 "\n"
 " %s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "PostScript-Datei erzeugt."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr "Erzeuge Vorschau. Ein Moment bitte."
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Vorschau nicht verfügbar"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 #, fuzzy
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr "Vorschau ist vermutlich wegen fehlendem Ghostscript nicht verfügbar."
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr "Bitte folgen Sie den Anweisungen im GRASS Trac Wiki."
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Vorschau erzeugt"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Speichere Datei als..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr "Kann Datei %s nicht lesen."
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "Bitte, erzeugen Sie zunächst ein Kartenausschnitt"
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Maßstab ist für diese Projektion nicht geeignet"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 "Bitte klicken Sie auf den Button mit dem grünen Dreieck um Vorschau zu "
 "erzeugen."
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "wxGUI Kartenlayout"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr "KARTENRAHMEN"
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr "RASTERLEGENDE"
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr "VEKTORLEGENDE"
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr "KARTENINFORMATION"
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr "MASSSTABSBALKEN"
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr "BILD"
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr "NORD PFEIL"
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "Anklicken und verschieben, um Größe zu verändern"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "Beschriftungen:"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "Inch"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "Punkt"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "Zentimeter"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "Millimeter"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "Meter"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "Kilometer"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "Fuß"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "Meile"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "Nautische Meile"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "Pixel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "Meter"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "Grad"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "Kann `ps.map -b` nicht ausführen"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Einheiten:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3702,29 +4092,29 @@ msgstr ""
 "Position der oberen linken Ecke\n"
 "von der oberen linken Kante des Papiers."
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "Position ist angegeben:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr "bezogen auf Papier"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "in Kartenkoordinaten"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3732,184 +4122,182 @@ msgstr ""
 "Position von der oberen linken\n"
 "Ecke des Papiers"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Schriftgröße:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Wählen Sie die Farbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Schließe den Dialog und wende Änderungen an"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Einheiten"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Format"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientierung"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Breite"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Höhe"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Links"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Rechts"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Oben"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Unten"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr "Buchstaben sind nicht erlaubt!"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Ungültige Eingabe"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Papierformat"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Ränder"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Hochformat"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Querformat"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "angepasst"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Karteneinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Kartenrahmeneinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Kartenrahmen"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Kartenrahmenoptionen:"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "Passe Ausschnitt auf die selektierte Karte an"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "Passe Ausschnitt auf gespeichert Region an"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "Passe Ausschnitt auf aktuelle Region an"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "fester Maßstab und Kartenmittelpunkt"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Kartenauswahl"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Karte:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Region:"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Maßstab und Zentrum"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Zentrum:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "O:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Maßstab:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Max. Kartenauflösung (dpi):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Rand"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "Zeichne einen Rahmen um den Kartenausschnitt"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "Randfarbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "Randbreite (in Punkt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3917,416 +4305,418 @@ msgstr ""
 "Region wurde so gesetzt, dass sie zu dieser Karte passt.\n"
 "Raster- oder Vektorkarten müssen später hinzugefügt werden."
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "Auswahl der Region"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "Keine Karte ausgewählt!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "Keine Region ausgewählt!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "Ungültiger Maßstab oder Kartenmitte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Rasterkarte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "Wählen Sie eine Rasterkarte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "Keine Rasterkarte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Karte hinzufügen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "Punkte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "Linien"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "Flächen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "Datentyp"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Hinzufügen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "Vektorkarten verwalten"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr "Die oberste Vektorkarte überlagert die anderen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "Hoch"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "Runter"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Löschen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "Eigenschaften..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "Rasterkarteneinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "Vektorkarteneinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "%s Eigenschaften"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "Datenauswahl"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Objektart"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "Zentroide"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "Flächengrenzen"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "Layerauswahl"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Datenbankverbindung ist nicht definiert in der DB-Datei."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "Wählen Sie ein Layer:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "Liste der Kategorien (z.B. 1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Maske"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "Nutze aktuelle Maske"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "Farben"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "Umrandung"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "Zeichne Umrandung"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "Breite (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "Füllung"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "Füllfarbe"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "Wählen Sie die Farbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "Farbwert aus Vektorkartentabellen-Spalte:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "Kein Effekt durch Füllfarbe aus der Tabellenspalte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "Linienfarbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "Größe und Stil"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "Symbol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "EPS-Datei:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Blättern"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "Geben Sie den Dateinamen ein oder verwenden Sie den Dateibrowser"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Wählen Sie eine Datei"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Größe"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "Größe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "Größe aus Vektorkartentabellen-Spalte:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "Maßstab:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "Rotation"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "rotiere Symbole:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "Gegenuhrzeigersinn in Grad:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "von Vektorkartentabellen-Spalte:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "Setze breite (in Punkt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "Multipliziere Breite mit Kategoriewert"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Liniestil"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "Wählen Sie einen Linienstil:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "Wählen Sie ein Linienende:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "Muster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "Verwende Muster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "Wählen Sie die Muster-Datei:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "Liniebreite (in pt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "Skalierungsfaktor für Muster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Rasterlegende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Zeige Rasterlegende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Eingaberasterkarte"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "aktuelle Rasterkarte"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "Selektiere Raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s: Typ %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Legendentyp"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "diskrete Legende (kategorische Karten)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "Farbgradienten-Legende (Fließkomma-Karte)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Fortgeschrittene Legendeneinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "Zeichne \"no data\" box"
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "Zeichne Ticks über die Farbtabelle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "Wertebereich"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Vektorlegende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Zeige Vektorlegende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Eingangsvektorkarten"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Wähle Vektorkarten und ihre Reihenfolge in der Legende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Vektorkarte"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Label editieren"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "Zeichne einen Rahmen um die Legende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Größe und Position"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Position"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "Lassen Sie das Feld leer, um Standardwerte zu verwenden"
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4334,15 +4724,15 @@ msgstr ""
 "Breite der Farbprobe (für Linien)\n"
 "vor dem Legendentext"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Spalten:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "Spaltenbreite:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
@@ -4350,186 +4740,174 @@ msgstr ""
 "Spaltenabstand zwischen den linken Rändern\n"
 "zweier Spalten einer mehrspaltigen Legende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Schrifteinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "Editiere Legendenlabel:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "Keine Rasterkarte ausgewählt!"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "Kein Raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr "Karteneinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Farb Einstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "verwende Randfarbe"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "verwende Hintergrundfarbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"Einheiten der aktuellen Projektion werden nicht unterstützt.\n"
-"Es wird stattdessen Meter verwendet!"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Nicht unterstützte Einheiten"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Länge:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "Länge des Maßstabsbalken in Karteneinheiten"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "Höhe des Maßstabsbalken in realer Höhe auf dem Papier"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "Standard"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Stil"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Typ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Anzahl der Segmente:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Beschrifte jede"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "Segmente"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "transparenter Texthintergrund"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "Länge der Maßstabsleiste nicht definiert"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Geben Sie Text ein:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Texteinstellungen"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "Texthintergrundfarbe"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "hervorheben"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "Textrand"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Offset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "horizontal (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "vertikal (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr " Referenzpunkt"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Textrotation"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "Textrotation (Gegenuhrzeigersinn)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "Kein Text eingegeben!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Bild"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Wählen Sie ein Verzeichnis:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Wählen Sie ein Verzeichnis mit Bildern"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr "Anmerkung: Nur EPS-Format."
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Maßstab und Drehung"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Drehungswinkel (Grad):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Gegen den Uhrzeigersinn in Grad"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
@@ -4537,42 +4915,42 @@ msgstr ""
 "PIL\n"
 "fehlt"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "Kann Datei %s nicht lesen."
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "Größe: %(width)s x %(height)s pts"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "Kein Bild selektiert."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Nordpfeil"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Einstellungen für Nordpfeil"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr "Konvergenz berechnen"
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr "Symbol"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr "Symbol auswählen:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
@@ -4580,153 +4958,154 @@ msgstr ""
 "Anmerkung: Gewähltes Symbol wird im Entwurfs-Modus\n"
 "nicht angezeigt (nur in der Vorschau)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr "Umrandungsfarbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "transparent"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Füllfarbe:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Größe und Drehung"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Größe (pt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Symbolgröße in Punkt"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Einstellungen für Rechteck"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Einstellungen für Linien"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Linienbreite in Punkten"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "Vektorbeschriftung"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "Erzeuge Textdatei mit Anweisungen zur Kartographie"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "Lade Textdatei mit Anweisungen zur Kartographie"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Erzeuge PostScript-Ausgabe"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Erzeuge PDF-Ausgabe"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Papiergröße, Ränder und Ausrichtung angeben"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Volle Ausdehnung"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Auf die Gesamtausdehnung zoomen"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Anklicken und verschieben, um Kartenrahmen zu platzieren"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Lösche ausgewähltes Objekt"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Vorschau anzeigen"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "Kartenlayout beenden"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "Karteninformation"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legende"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Maßstabsbalken"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Rechteck"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Füge mehrere Vektorkarten hinzu"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Beschriftungen hinzufügen"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS GIS Attributtabellen Manager"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr "READONLY - "
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4736,142 +5115,136 @@ msgstr ""
 "definiert. Sie können eine neue Verbindung in dem Register 'Layer verwalten' "
 "definieren."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Bitte warten Sie, ich lade Attributdaten..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Daten durchblättern"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Tabellen verwalten"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Layer verwalten"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Schließe Attributtabellen Manager"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Lösche ausgewähltes Einstellungen"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Neuladen der Attributdaten (nur ausgewählte Ebene)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Anzahl geladener Datensätze: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Datenbankverbindung"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Abfrage"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Setzte SQL Statement auf Standardwert"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Schließe Attributtabellen Manager"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Dialog schließen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Spalten"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr "Interaktive Eingabe"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Werte"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Alle Werte bekommen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Beispiel abfragen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Gehe zu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Schließe den Dialog beim Anwenden"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "GRASS SQL Editor (%(type)s): Vektorkarte <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Beispiel: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Überprüfen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "SQL-Ausdruck überprüfen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "SQL-Ausdruck nicht überprüft"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "SQL-Ausdruck ist nicht gültig"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4882,41 +5255,41 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "SQL-Ausdruck ist gültig"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr "Funktionen"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "SQL-Ausdruck ist nicht gültig"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "SQL-Ausdruck ist gültig"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Lade Daten..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
@@ -4925,35 +5298,35 @@ msgstr ""
 "Attributtabelle <%s> nicht gefunden. Um die Tabelle zu erstellen wechseln "
 "Sie in das Register 'Layer verwalten'."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Spalte <%(column)s> nicht gefunden in der Tabelle <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Kann nur 256 Spalten anzeigen."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Nicht übereinstimmende Spaltenanzahl in der Tabelle <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr "Anzeigelimit: 100000 Datensätze. "
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Unbekannter Wert"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 "Kann den Wert nicht dekodieren. Stellen Sie die Kodierung in den GUI "
 "Einstellungen ('Attribute') ein."
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4967,174 +5340,174 @@ msgstr ""
 "\n"
 "Einzelheiten: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Sortierung aufsteigend"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Sortierung absteigend"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Berechne (nur numerische Spalten)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Kartenrechner"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Statistik"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Spalte hinzufügen"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Flächengröße"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Linienlänge"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr "Kompaktheit einer Fläche"
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr "Fraktale Dimension der Flächengrenze"
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Umfang einer Fläche"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Anzahl Objekte je Kategorie"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr "Steilheit der 3D-Linie"
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr "Liniensinuosität"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Linien-Azimuth"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Spalte hinzufügen"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 "Kann Die Spalte der Tabelle nicht hinzufügen. Es wurde kein Spaltenname "
 "definiert."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Spalte <%(column)s> existiert bereits in der Tabelle <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Attributdaten - Rechtsklick um Datensätze zu verwalten/editieren"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabelle"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr " (nur Lesen)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "SQL Abfrage"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Einfach"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Wende SELECT-Ausdruck an und lade Datensätze erneut"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "SQL Editor"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "SQL Editor"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Ausgewählten Datensatz editieren"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Neuen Datensatz einfügen"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Selektierte Datensätze löschen"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Alle Datensätze löschen"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Alle selektieren"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Alle Selektierungen aufheben"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Selektierte Objekte hervorheben"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Selektierte Objekte hervorheben und zoomen"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Selektierte Objekte extrahieren"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Selektierte Objekte löschen"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Aktualisiere existierenden Datensatz"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Der Wert '%(value)s' muss als %(type)s eingegeben werden."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
@@ -5143,17 +5516,17 @@ msgstr ""
 "Kann existierenden Datensatz nicht aktualisieren.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Datensatz mit der Kategorie %d existiert bereits in der Tabelle."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Kategorie (Spalte %s) fehlt."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -5162,7 +5535,7 @@ msgstr ""
 "Kann neuen Datensatz nicht einfügen.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5171,11 +5544,11 @@ msgstr ""
 "Selektierte Datensätze (%d) werden unwiderruflich aus der Tabelle gelöscht. "
 "Wollen Sie diese Datensätze löschen?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Datensätze löschen"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5184,15 +5557,15 @@ msgstr ""
 "Alle Datensätze (%d) werden unwiderruflich aus der Tabelle gelöscht. Wollen "
 "Sie diese Datensätze löschen?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Nichts zu extrahieren."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Nichts zu löschen."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5203,7 +5576,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5216,30 +5589,30 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabelle <%s> - Rechtsklick um Spalte(n) zu löschen"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Spalte"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Länge"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Spalte umbenennen"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Kann Spalte nicht umbenennen. Kein Spaltenname angegeben."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5248,7 +5621,7 @@ msgstr ""
 "Kann die Spalte <%(column)s> nicht in <%(columnTo)s> umbenennen. Spalte "
 "existiert bereits in der Tabelle <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5257,15 +5630,15 @@ msgstr ""
 "Kann die Spalte nicht umbenennen. Die Spalte <%(column)s> existiert nicht in "
 "der Tabelle <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Lösche selektierte Spalten"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Lösche alle Spalten"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5274,11 +5647,11 @@ msgstr ""
 "Selektierte Spalte '%s' wird unwiderruflich aus der Tabelle gelöscht. Wollen "
 "Sie diese Spalte löschen?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Lösche Spalte(n)"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5290,101 +5663,101 @@ msgstr ""
 "werden unwiderruflich aus der Tabelle gelöscht. Wollen Sie diese Spalten "
 "löschen?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Liste der Layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Lösche auch die verbundene Attributtabelle (%s)."
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Spaltenname"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Datenlänge"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Treiber"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Datenbank"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Schlüsselspalte"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Layer hinzufügen"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Layerbeschreibung"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Schlüsselspalte"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Füge neuen Datensatz für jede Kategorie in die Tabelle ein."
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Sie müssen Kategorien mit dem Modul v.category hinzufügen."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Tabellenbeschreibung"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Name der Tabelle"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Tabelle erzeugen"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Layer hinzufügen"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Standard einstellen"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Entferne Kartenebene"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Zu löschende Ebene"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "&Entferne Kartenebene"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Layer ändern"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Layer ändern"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5392,20 +5765,20 @@ msgstr ""
 "Kann die Liste der Tabellen nicht bekommen.\n"
 "Bitte verwenden Sie db.connect um die Datenbank Parameter einzurichten."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Kann keine neue Tabelle anlegen. Tabellenname oder Name der Schlüsselspalte "
 "fehlen."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 "Kann neue Tabelle nicht anlegen. Die Tabelle <%s> existiert bereits in der "
 "Datenbank."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5414,42 +5787,42 @@ msgstr ""
 "Kann der Vektorkarte <%(vector)s> keinen neuen Layer hinzufügen. Der Layer "
 "%(layer)d existiert bereits."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Voxel-Statistik"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Kopiere Regressions-Parameter in die Zwischenablage (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Kann Einstellungen nicht speichern."
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Kann neue Location nicht anlegen"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Voxel-Statistik"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5457,11 +5830,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "GRASS GIS Attributtabellen Manager"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5474,200 +5847,201 @@ msgstr ""
 "Möchten Sie eine neue Attributtabelle und einen Link zur Vektorkarte <%s>  "
 "erzeugen?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Tabelle erzeugen?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Schließe den Dialog beim Absenden"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Keine Attribute gefunden"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Attribute aktualisieren"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Attribute definieren"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Attribute anzeigen"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Erneut Laden"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Senden"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 "Spalte <%(col)s>: Wert '%(value)s' muss als %(type)s eingegeben werden."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "unbekannt"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Kann das Symbol-Design nicht laden..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2D Ansicht"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3D Ansicht"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Keine Karte ausgewählt!"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Schließe Workspace-Datei"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "Datei <%s> nicht gefunden."
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Animation"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Kann Datei %s nicht lesen."
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Nichts zu extrahieren."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Rektifiziere Bilder, bitte warten"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Rektifiziere Bilder, bitte warten"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Animation"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Werkzeugleiste Karte"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Lade Daten..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Einstellungen <%s> nicht gefunden"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5676,620 +6050,620 @@ msgstr ""
 "Lesen der Workspace-Datei <%s> fehlgeschlagen.\n"
 "Ungültige Datei, Parsen des XML-Dokumentes nicht möglich."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Einstellungen für 3D-Ansicht gespeichert in Datei <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Selektierte Kartenebenen der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Erzeugt eine leere Datenbank."
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Entferne Kartenebene"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Entferne Kartenebene"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Verzeichnis %s nicht gefunden."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Einfach"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Frame rate (FPS):"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Kategorie-Modus"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 #, fuzzy
 msgid "Time unit:"
 msgstr "Karteneinheiten"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Einstellungen vornehmen"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr "Jahr"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr "Monat"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "Fenster"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr "Stunden"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr "Minute"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr "Sekunde"
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "Die Datei existiert bereits."
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "animation"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "animation"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Fortgeschritten"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Tabellen auflisten"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Copyright"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "nach Farbe"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "nach Farbe"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Wählen Sie eine WKT-Datei"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Größe und Position"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Feiner Modus:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Einstellungen vornehmen"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Einstellungen für die 3D-Darstellung"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Projekt"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Parameter nicht gefunden: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Speichere Region:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Lade Region:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "Wert:"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Erzeugt eine leere Datenbank."
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Liste der Erweiterungen"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Editiere GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "animation"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Dekorationen"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Export"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Zeitstempel"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Bild hinzufügen"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Text hinzufügen"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr "Schrifteinstellungen:"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Transekt-Stichprobe"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr "Bilddatei:"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Wählen Sie eine Datei"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr "Bildsequenz"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "Animiertes GIF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr "SWF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr "Export nach:"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Datei-Präfix:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "animation"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Dateiformat:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Verzeichnis:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr "Wählen Sie ein Verzeichnis für Export"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr "GIF Datei:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Wählen Sie die zu speichernde Datei"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr "SWF Datei:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr "AVI Datei:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr "Video codec:"
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Erzeugungsoptionen:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr "Datei %s nicht gefunden."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr "Verzeichnis %s nicht gefunden."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Exportiere Vektorkarte"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "%s Datei fehlt"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr "Zeitstempel"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Erzeuge aus Datenbank"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Rasterkarten abfragen"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Vektorkarten verwalten"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Rasterkarten abfragen"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Importiere Vektordaten"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Eingabe-Daten"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Selektiere Rasterkarte:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Bitte, erzeugen Sie zunächst ein Kartenausschnitt"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Animation"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Hintergrundfarbe: "
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "verwende Hintergrundfarbe:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "verwende Hintergrundfarbe:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Zeitstempel"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Koordinatenformat"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Ungültig:"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Wechsle Mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 #, fuzzy
 msgid "Play back"
 msgstr "Abspielen"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Stopp"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pause"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr "Wiederhole"
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Schummerungskarte hinzufügen"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Ungültige Koordinate eingegeben. Operation abgebrochen."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr "Editiere Punkt"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Netzwerkanalyse"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6297,49 +6671,49 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Überschreibe Karte"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Erzeugen der neuen Gruppe <%s> ist fehlgeschlagen."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 #, fuzzy
 msgid "Vector map with analysis result does not exist."
 msgstr "Verzeichnis %s existiert nicht."
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6347,449 +6721,450 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Kann nicht setzen"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr "Überschreibe Karte"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Verzeichnis %s existiert nicht."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Vektorkarte <%s> nicht gefunden"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Kartenebenen"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Layer hinzufügen"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Layer verwalten"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Verwalten oder Berichten von Kategorien"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Wählen Sie %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "Entfernt eine existierende Attributtabelle einer Vektorkarte."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "Typ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "Topologie"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Startpunkt"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Endpunkt"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "neuer Punkt"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr "Bogen"
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Numerische Spalte:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "Knoten"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Kürzester Pfad"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Endpunkt"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Traveling-Salesman-Problematik"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, fuzzy, python-format
 msgid "Maximum flow %s"
 msgstr "Maximaler Fluss"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr "Punkt der Quelle"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Punkte anzeigen"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Erzeuge 'Steiner Tree' für das Netzwerk und die gegebenen Stationen."
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Entferne Kartenebene"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "GRASS Profilanalyse Werkzeug"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Werkzeugleiste GCP Ansicht"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Werkzeugleiste GCP Ansicht"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Netzwerkanalyse"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Achseneinstellungen"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Punkte"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 msgid "Iso lines:"
 msgstr "Isolinien:"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Ergebnis"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parameter"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Erzeugte Karte der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr "Eingabetabellen"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr "Ergebnistabellen"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr "Lade Tabellen..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Lade Tabellen..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Verzeichnis %s existiert nicht."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr "Analysiere..."
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Einstellungen"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "Modell wird ausgeführt..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Raster Einstellungen"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr "Punktstil:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Farbtabellen"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Geben Sie Farbregeln ein"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr "Linienfarbe:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr "Farbe für nicht verwendeten Punkt:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr "Farbe für ausgewählten Punkt:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr "Punktgröße:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr "Punktbreite:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Schwellwert für Snapping"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Neue Vektorkarte <%s> erzeugt"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Kartenfenster"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Füge Kontrollpunkt hinzu"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Ausgewählte Location löschen"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Reliefanalyse"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Linien anzeigen"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Vektorkarteneinstellungen"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Zeige Handbuchseiten"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Traveling-Salesman-Problematik"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Rendern"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Auto-Rendering ein-/ausschalten"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Arbeitsbereich anzeigen"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Zeige den Arbeitsbereich"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6799,16 +7174,16 @@ msgstr ""
 "als blaues Rechteck im Arbeitsbereich und den Arbeitsbereich als rotes "
 "Rechteck im Kartenfenster."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Anzeige-Modus"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr "Richte Ausdehnung der Region an Fenstergröße aus"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6816,18 +7191,18 @@ msgstr ""
 "Richte Arbeitsbereich am Kartenfenster aus. Standardwert für neue "
 "Kartenfenster kann in 'GUI Einstellungen' definiert werden."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Auflösung des Kartenfensters"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 "Beschränke die Auflösung des Kartenfensters auf die Einstellungen des "
 "Arbeitsbereichs."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6836,11 +7211,11 @@ msgstr ""
 "Arbeitsbereichs. Standardwert für neue Kartenfenster kann in 'GUI "
 "Einstellungen' definiert werden. "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Kartenmaßstab"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
@@ -6848,33 +7223,33 @@ msgstr ""
 "Da die Bildschirmauflösungen an jedem Arbeitsplatz unterschiedlich sind, "
 "können die Maßstabsangaben nicht exakt sein. Die Größenordnung wird stimmen."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Gehe zu"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Projektion nicht definiert (überprüfe Einstellungen)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Fehler in der Projektion (überprüfen sie die Einstellungen)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Projektion"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Verwende definierte Projektion"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
@@ -6882,46 +7257,46 @@ msgstr ""
 "Umprojezierte Koordinaten in der Statusleiste angezeigt. Die Projektion kann "
 "in GUI Einstellungen (Reiter 'Projektion') definiert werden."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASK"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Geometrie anzeigen"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Koordinaten"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Ausdehnung"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Auf den Arbeitsbereich zoomen (mit g.region definiert)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Kartenfenster"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "FEHLER: Kann die GRASS-Version nicht bestimmen. Einzelheiten: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS Kartenfenster: %(id)d  - Location: %(loc)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6932,11 +7307,11 @@ msgstr ""
 "\n"
 "Details: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "Werkzeugleiste Vektordigitalisierung"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6952,108 +7327,114 @@ msgstr ""
 "\n"
 "Einzelheiten: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Starte 3D-Ansichtsmodus..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Bitte warten Sie, ich lade Daten..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr "Bitte warten Sie, entlade Daten..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr "Wechsle zu 2D-Ansicht zurück..."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Digitalisieren"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr "Keine Kartenebene selektiert. Breche die Operation ab."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Vektorkarte <%s> für Bearbeitung geöffnet - übersprungen."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Text-Ebene hinzufügen"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Auf den Arbeitsbereich zoomen (mit g.region definiert)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Werkzeugleiste Vektordigitalisierung"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr "GRASS Modul '%s' nicht gefunden. Kann Kartenfenster nicht starten."
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Kartenrahmen"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Kartenfenster"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -7061,118 +7442,133 @@ msgstr ""
 "Es ist ein Problem beim Drucken aufgetreten.\n"
 "Möglicherweise sind ihre Druckereinstellungen nicht korrekt."
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Nicht unterstützte Einheiten"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Kann die EPGS codes nicht lesen: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr "Starte Kartenfenster <%s>..."
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Kann Datei '%s' nicht erzeugen.\n"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Schließe Kartenfenster <%s>..."
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Selektiere Vektorobjekte"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Georeferenzieren von Raster- und Vektorkarten"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Maßstab und Nordpfeil anzeigen/verbergen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Legende anzeigen/verbergen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Maßstab und Nordpfeil anzeigen/verbergen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Karte analysieren"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Messen, Profil, Histogramm"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Strecken messen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Strecken messen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Zuprofilierende Oberflächenkarte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Erzeuge Scatterplot von Rasterkarten"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Erzeuge Histogramm einer Rasterkarte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Netzwerkanalyse"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Rotiere 3D Szene"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "3D Szene mit der Maus rotieren"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "Fly-through Modus"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 "Mit der Maus verschieben. Strg-Taste ändert den Modus und Umschalttaste "
 "beschleunigt."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Maus-Klick zum herein zomen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Maus-Klick zum heraus zoomen"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "3D Ansicht nicht verfügbar"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Grund: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Vektordigitalisierer nicht vorhanden"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -7183,145 +7579,150 @@ msgstr ""
 "auf aktualisierte Versionen von GRASS. In der Zwischenzeit können Sie \"v."
 "digit\" aus dem Menü \"Vektor\" - \"Vektorkarten pflegen\" verwenden."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Beende Vektor-Digitalisierung"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Location umbenennen"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Location umbenennen"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "Erzeuge"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Neue Location erzeugen?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Umbenennen"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Location umbenennen"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Editiere GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Location umbenennen"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Möchten Sie die GRASS Location <%s> erzeugen?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Neue Location erzeugen?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Location umbenennen"
@@ -7331,331 +7732,331 @@ msgstr "Location umbenennen"
 msgid "Create new configuration file for r.li modules"
 msgstr "Erzeuge neue Farbtabelle mittels Farbregeln"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Möchten Sie die GRASS Location <%s> erzeugen?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Neue Location erzeugen?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 "Location-Assistent wurde abgebrochen. Die Location wurde nicht erzeugt."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Wähle Karten für Darstellung"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Name für neu zu erzeugende 3D Rasterkarte"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Zu rekodierende Rasterkarte:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Zu reklassifizierende Vektorkarte:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Zu reklassifizierende Vektorkarte:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Entferne Kartenebene"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Lade Einstellungen:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Reliefparameter"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Regionen"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Karteneinheiten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Moving window"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Georeferenzieren von Raster- und Vektorkarten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Wählen Sie eine Datei"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Anzahl der Segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Möchten Sie ein neues Mapset anlegen?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Wollen Sie die Änderungen in der Vektorkarte <%s> speichern?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Farbe auswählen"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Selektiere Vektorfeature"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Werkzeugleiste GCP Ansicht"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Moving window"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "Ausgwähltes Kartenlayer ist keine Vektorkarte."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Vektorkarte selektieren"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr "Kreis"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Breite:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Name der Rasterkarte:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "thematische Diagramme"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Gesamtzahl Frames:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Karteneinheiten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Moving window"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Anzahl der Segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Anzahl der Segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Farbe auswählen"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7663,185 +8064,200 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Farbe auswählen"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Zusammenfassung"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Rasterkarte:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Vektorlinien"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Region:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Typ der Kartenebene:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Grenzen der Region"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Art des Elements:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Name der Mapset:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Breite:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Schriftgröße:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Anzahl der Segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Distanz zum Objekt"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Anzahl der Segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Numerische Spalte:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Willkommen in der wxGUI interaktiven Python Shell %s"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Geben Sie %s für mehr GRASS Skripting Information ein."
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Geben Sie %s ein, um Raster oder Vektor der Baumstruktur hinzuzufügen."
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Lösche allen Text in der Shell"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Einfach"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Raster- oder Vektorkarte <%s> nicht gefunden"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Rasterkarte <%s> hinzugefügt"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Vektorkarte <%s> hinzugefügt"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS %s Ebenen-Manager"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Werkzeugleiste Workspace"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Werkzeugleiste Daten"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Werkzeugleiste Extras"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Werkzeugleiste Vektor"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr "Werkzeugleiste 3D-Ansicht"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Kartenfenster umbenennen"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Kartenebenen"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Ebenen"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Befehlszeile"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "Suche Befehle"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+#, fuzzy
+msgid "Modules"
+msgstr "Modul"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Python Shell"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7852,38 +8268,29 @@ msgstr ""
 "\n"
 "Wollen Sie in die neue Location wechseln?"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "In die neue Location wechseln?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Aktuelle Location ist <%(loc)s>.\n"
-"Aktuelles Mapset ist <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Wähle auszuführendes Modell"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Wollen Sie die Änderungen im Projekt speichern?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 "Wollen Sie die aktuellen Einstellungen in einer Projektdatei speichern?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Schließe Kartenfenster %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -7892,35 +8299,35 @@ msgstr ""
 "Befehl '%s' wurde noch nicht im wxGUI implementiert. Versuchen Sie es als "
 "Befehlsebene hinzuzufügen."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "Ausgwähltes Kartenlayer ist keine Vektorkarte."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Sie können nur Vektorkarten des aktuellen Mapsets editieren."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Wähle auszuführendes Skript"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Python Skript (*.py)|*.py|Bash Skript (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Skript-Datei '%s' ist nicht vorhanden. Berechnung wurde abgebrochen."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
@@ -7929,15 +8336,15 @@ msgstr ""
 "Skript <%s> ist nicht ausführbar. Wollen Sie die Berechtigung der Datei "
 "ändern (Sie müssen dafür Eigentümer der Datei sein)?"
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr "Berechtigung bestimmen?"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr "Kann die Berechtigungen nicht ändern. Operation abgebrochen."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
@@ -7946,95 +8353,92 @@ msgstr ""
 "Verzeichnis '%s' ist nicht im GRASS_ADDON_PATH. Möchten Sie das Verzeichnis "
 "zum GRASS_ADDON_PATH hinzufügen?"
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr "Pfad zu den Erweiterungen anpassen?"
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Starten des Skriptes '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Keine Location/Mapset angegeben. Breche die Operation ab."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr "Kein Mapset angegeben. Breche die Operation ab."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Aktuelles Mapset ist <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Ändern der Arbeitsumgebung "
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Wählen Sie ein Verzeichnis:"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Wählen Sie das Eingabe-Verzeichnis"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "System Info"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "GRASS Version"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Unbekannter Wert"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
 msgstr "GRASS SVN Revision"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
 msgstr "Erstellungsdatum"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
+#: ../gui/wxpython/lmgr/frame.py:1222
 #, fuzzy
-msgid "Build Platform"
+msgid "Build platform"
 msgstr "Platform"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Platform"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -8042,60 +8446,60 @@ msgstr ""
 "Aktuelles Projekt ist nicht leer. Wollen Sie die aktuellen Einstellungen in "
 "einer Projektdatei speichern?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Neues Projekt erstellen?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Wählen Sie eine Projektdatei"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "GRASS Workspace File (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Bitte warten Sie, ich lade das Projekt..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Wählen Sie die zu ladende GRC-Datei"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Alter GRASS Workspace File (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Wählen Sie eine Datei, um das aktuelle Projekt zu speichern"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Projektdatei <%s> existiert bereits. Wollen Sie die Datei überschreiben?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Speichere Projekt"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 "Schreiben der aktuellen Einstellungen in die Workspace-Datei fehlgeschlagen."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Geben Sie neuen Namen ein:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS %(version) Kartenfenster: %(name)s  - Location: %(loc)s"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8103,26 +8507,26 @@ msgid ""
 "Reason: %s"
 msgstr "Kann das Symbol-Design nicht laden. Grund: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Kann den neuen Datensatz nicht einfügen."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Kann den neuen Datensatz nicht einfügen."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Selektierte Kartenebenen der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Nicht unterstützter Kartenebenentyp <%s>."
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
@@ -8130,11 +8534,11 @@ msgstr ""
 "Zellwerte können nur für Regionen mit weniger als 10000 Zellen angezeigt "
 "werden."
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "Transparenz:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8145,29 +8549,25 @@ msgstr ""
 "%s\n"
 "aus der Baumstruktur entfernen?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "Wollen Sie die selektierten Kartenebene(n) aus der Baumstruktur entfernen?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Entferne Kartenebene"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "GRASS GUI schließen"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "FEHLER: Kann die GRASS-Version nicht bestimmen. Einzelheiten: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr "Keine Kartenebene selektiert. Breche die Operation ab."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
@@ -8177,27 +8577,29 @@ msgstr ""
 "überein. Wir schlagen vor, dass Sie das Kartenfenster auf den Arbeitsbereich "
 "beschränken. Wollen Sie die Auflösung beschränken?"
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr "Kartenfenster auf Arbeitsbereich beschränken?"
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Importiere Rasterdaten"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Einbindung externer Rasterdaten"
 
@@ -8211,12 +8613,14 @@ msgid "Set raster output format"
 msgstr "Bestimme Format für Raster-Ausgabe"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Importiere Vektordaten"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Einbindung externer Vektordaten"
 
@@ -8238,7 +8642,7 @@ msgstr "Iportiere Daten von einem WMS-Server"
 msgid "Add command layer"
 msgstr "Befehlsebene hinzufügen"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Beenden"
@@ -8288,8 +8692,8 @@ msgid "Add rhumbline layer"
 msgstr "Ebene mit Rhumblinie hinzufügen"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "3D Rasterkarte hinzufügen"
 
@@ -8312,128 +8716,124 @@ msgstr "Überprüfe Modell..."
 msgid "Background vector map"
 msgstr "Patche Vektorkarten"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Kartenebenen"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Transparenz ändern"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "Einstellungen für die 3D-Darstellung"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Auf die selektierten Karten zoomen"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Arbeitsbereich auf Grundlage selektierter Karte setzen"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Exportiere Vektorkarte"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Exportiere Modell als Python-Skript"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Erzeuge"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Farbtabelle setzen"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Attributdaten anzeigen"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Beginne mit Editieren"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Beende das Editieren"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Topologie erzeugen/wiederherstellen"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Zoome auf die selektierten Karten (ignoriere NULLwerte)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "oder gebe Werte interaktiv ein"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogramm"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Univariate Statistiken"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Bericht und Statistiken"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "Selektierte Ebenen löschen"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Kann das Profil der Rasterkarte nicht erstellen."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, fuzzy, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-"Der Name <%(name)s> ist kein gültiger Name für Locations. Bitte verwenden "
-"Sie nur ASCII-Zeichen ohne %(chars)s und Leerzeichen."
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "3D Rasterkarte"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Nicht unterstützter Kartenebenentyp <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Geben Sie ein Namen für das neue Mapset ein:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Transparenz von <%s> festlegen"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
@@ -8441,171 +8841,165 @@ msgstr ""
 "Die Vektorkarte <%s> existiert bereits im aktuellen Mapset. Wollen Sie diese "
 "überschreiben?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Überschreiben?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Vektorkarte <%s> nicht in aktueller Mapset gefunden"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 "Kann das Histogramm der Rasterkarte nicht anzeigen. Kein Kartenname "
 "angegeben."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Transparenz von <%s> festlegen"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Ebenen-Gruppe:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Klicke um Ebenen-Einstellungen zu ändern."
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(Doppelklick um Eigenschaften zu definieren)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Bitte warten Sie, aktualisiere Daten..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Starte neues Kartenfenster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Erzeuge neuen Workspace (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Öffne bestehende Workspace-Datei (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Speicher aktuelle Workspace-Datei (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Mehrere Raster- oder Vektorkarten hinzufügen (Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Rasterkarte hinzufügen (Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Verschiedene Rasterkartenlayer hinzufügen (RGB, HIS, shaded relief...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Vektorkarten hinzufügen (Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Verschiedene Vektorkarten hinzufügen (thematisch, Diagramm...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Ebenen-Gruppe hinzufügen"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Füge mehrere Vektorkarten hinzu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Entferne selektierte Kartenebene(n) aus der Baumstruktur"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importiere/Verlinke Raster- oder Vektordaten"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Rasterkartenrechner"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Grafischer Modellierer"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Georektifizieren"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Kartenlayout"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Starte Skript"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "GUI Einstellungen"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "GRASS Handbuch"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Ausgewählten Datensatz editieren"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Neuladen der Attributdaten (nur ausgewählte Ebene)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Erzeuge Befehl für m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 "Erzeugt den Befehl für m.nviz.image auf der Grundlage der aktuellen "
 "Einstellungen"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr "Einstellungen der 3D-Ansicht"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr "Einstellungsdialog für 3D Ansicht anzeigen"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr "Zeige Handbuch für 3D Ansicht"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8617,57 +9011,57 @@ msgstr ""
 "Distribution). Gehe zur Numeric Python Website (http://numpy.scipy.org), um "
 "den Quellcode oder Binaries zu erhalten."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "GRASS Profilanalyse Werkzeug"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profil von"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Distanz (%s) "
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Distanz entlang Transekt"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Zellenwerte"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr "Nicht alle Punkte des Profils liegen im Arbeitsbereich."
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Rasterwerte"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 "Sie müssen ein Transekt im Kartenfenster zeichnen, um ein Profil zu erhalten."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nichts zu profilieren"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr "Wählen Sie ein Präfix für Datei(n) um Profilwerte zu speichern..."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "Kommagetrennte Werte (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Datei überschreiben?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
@@ -8676,7 +9070,7 @@ msgstr ""
 "Kann die Datei <%s> nicht zum Schreiben öffnen.\n"
 "Grund: %s"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
@@ -8685,552 +9079,560 @@ msgstr ""
 "%d Dateien erzeugt:\n"
 "%s"
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr "Keine Dateien erzeugt."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr "Statistiken für Profile"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Rasterwerte"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr "Nichts anzuzeigen."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Wähle Rasterkarte 1 (erfordert):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Rasterwerte"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ": %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Gibt statistische Werte für eine Rasterkarte aus."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr "Zeichne Grafik"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 "Zeichne ein Transekt in das Kartenfenster, für das ein Profil erstellt wird"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr "Grafik-Einstellungen"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr "Grafik Statistiken"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Speicher Profiledaten in csv-Datei"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr "Beende Grafik-Werkzeug"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr "Linke Maustaste am Punkt: "
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Texteinstellungen"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr "Grafik Einstellungen"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Dieses Funktion ist noch nicht implementiert."
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "Unter Bearbeitung"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "GRASS GIS Histogramm Werkzeug (d.histogram)"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "Histogramm von"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr "Zellenanzahl"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogramm von %s"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Erzeuge Histogramm einer Rasterkarte"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "GRASS GIS Histogramm eines Bildes oder Rasterkarte"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Rasterwerte"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Fläche"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Gibt statistische Werte für eine Rasterkarte aus."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr "Wählen Sie Rasterkarten für Profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr "Wählen Sie Rasterkarten für Profil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Wähle zu profilierende Rasterkarte"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "&Kopieren"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Kopiere Regressions-Parameter in die Zwischenablage (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr "Regressions-Parameter in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Wähle Rasterkarte 2 (optional):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "GRASS GIS Histogramm eines Bildes oder Rasterkarte"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Selektiere Rasterkarte:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Wählen Sie eine Gruppe:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr "Histogrammtyp"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Profiltitel:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Titelschriftgröße (Punkt):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "X-Achsenbeschriftung:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Y-Achsenbeschriftung:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Schriftgröße für Beschriftung (Punkt):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Schriftfamilie:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Stil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Stärke:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Wende Änderungen auf aktuelle Sitzung an und schließe Dialog"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Grafik Textgrößen in Datei '%s' gespeichert."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr "Es wurde kein Karte oder Gruppe zum plotten ausgewählt"
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr "Karte/Bild geplottet"
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr "Einstellungen für selektierte Karte"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Linienfarbe"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Transektsegmentmarkereinstellungen"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr "Scatterplot-Punkte"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Achseneinstellungen"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X-Achse"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y-Achse"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Maßstab"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 "Automatische Achsenskalierung, benutzerdefiniertes max und min oder Maßstab "
 "nach Wertebereich der Daten (min)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Benutzer Min"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Benutzer Max"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "log. Skala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Gitternetz- und Legenden-Einstellungen"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Gitternetz Farbe"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Gitternetz anzeigen"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Schriftgröße der Legende"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Legende anzeigen"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Plot-Einstellungen in der Datei '%s' gespeichert."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "GRASS GIS Histogramm Werkzeug (d.histogram)"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Rasterkarteneinstellungen"
+msgstr "Ungültige Eingabe"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Attributspalte:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Wähle Rasterkarte 3 (optional):"
+msgstr "Selektiere Vektorobjekte"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Zeichne"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Hilfe"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Ungültige Eingabe"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Vektorkarte <%s> nicht in aktueller Mapset gefunden"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr ""
 "\n"
 "++ Lasse gwflow Integrations-Tests laufen++"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Zeitstempel"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Ungültige Eingabe"
+msgid "Seed point outside the current region"
+msgstr "Erzeuge Fläche aus aktueller Region"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Ungültige Eingabe"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Ungültige Eingabe"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Ungültige Eingabe"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Importiere Vektordaten"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Importiere Rasterdaten"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Datei"
 
@@ -9238,8 +9640,8 @@ msgstr "&Datei"
 msgid "Workspace"
 msgstr "Projekt"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Neu"
 
@@ -9247,7 +9649,7 @@ msgstr "Neu"
 msgid "Create new workspace"
 msgstr "Erzeuge neues Projekt"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Öffnen"
 
@@ -9255,12 +9657,12 @@ msgstr "Öffnen"
 msgid "Load workspace from file"
 msgstr "Lade Projekt aus einer Datei"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Speichern"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Speichern unter"
 
@@ -9281,7 +9683,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Lade Kartenebenen aus GRC-Datei in Baumstruktur"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Kartenfenster"
 
@@ -9311,7 +9713,7 @@ msgstr ""
 "Mehrere Raster- oder Vektorkarten zum aktuellen Kartenfenster hinzufügen"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Ebene mit Gitternetz hinzufügen"
@@ -10044,23 +10446,23 @@ msgstr "Volumen zu Raster-Serie"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Konvertiert 3D Rasterkarten in 2D Rasterkarten."
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georektifizieren"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Verwalte Ground Control Points für Georeferenzierung"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Grafischer Modellierer"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Starte den Grafischen Modellierer"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Start des Modells"
 
@@ -10102,16 +10504,16 @@ msgstr ""
 "Eine einfache Anwendung zur Konvertierung von Richtung und Entfernung in "
 "Koordinaten und umgekehrt."
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Starte Kartenlayout"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Typ der Kartenebene:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Starte Skript"
@@ -10124,7 +10526,7 @@ msgstr "Starte Skript"
 msgid "Launches script file."
 msgstr "Starte Skript-Datei."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Schließen"
@@ -10134,8 +10536,8 @@ msgstr "Schließen"
 msgid "Quit wxGUI session."
 msgstr "Beende wxGUI-Session."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "GRASS GUI schließen"
@@ -10144,7 +10546,7 @@ msgstr "GRASS GUI schließen"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "&Einstellungen"
 
@@ -10321,7 +10723,7 @@ msgstr "Aktualisiert installierte Erweiterungen"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Entfernen einer installierten Erweiterung aus den GRASS Addons."
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Einstellungen"
 
@@ -11471,7 +11873,7 @@ msgstr ""
 "Erzeugt eine Rasterkarte mit Distanzen zu Featuren in der Eingabekarte."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Ebene"
 
@@ -11750,8 +12152,8 @@ msgid "Develop vector map"
 msgstr "Vektorkarten pflegen"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Erzeuge neue Vektorkarte"
 
@@ -12701,14 +13103,14 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr ""
 "Interaktive Eingabe für eine überwachte Klassifikation (benötigt Xterm)."
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -13848,27 +14250,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Werkzeugleiste Karte"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Zeige den Arbeitsbereich"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Kategorie-Modus"
+msgstr "GRASS GIS Histogramm Werkzeug (d.histogram)"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Zeige den Arbeitsbereich"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "&Hilfe"
 
@@ -13894,7 +14300,7 @@ msgid "Prints system information"
 msgstr "Gibt Systeminformationen aus."
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Über GRASS GIS"
 
@@ -13908,255 +14314,263 @@ msgstr "Importiere Vektordaten"
 msgid "Attribute table manager"
 msgstr "Attributtabellen Manager"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Neues Modell erstellen"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Lade Modell aus einer Datei"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Speichere Modell in Datei"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Schließe Modell-Datei"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Exportiere in Bild"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Exportiere Modell als Bild"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Exportiere in Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Exportiere Modell als Python-Skript"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Beende Modeler"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Schließe Modeler-Fenster"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Modell"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Befehlsebene hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Füge Aktion (GRASS Modul) zu Modell hinzu"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Füge Daten hinzu"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Füge Daten-Objekt zu Modell hinzu"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Definiere Beziehung"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Definiere Beziehung zwischen Daten und Aktionen"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "Schleife / Serie hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "Füge Schleife (Serien) zum Modell"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Bedingung hinzufügen"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Füge Bedingung (if/else) zu Modell hinzu"
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Füge Bedingung (if/else) zu Modell hinzu"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Entferne Objekt"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Entferne Aktion/Daten aus Modell"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Modell-Eigenschaften (Name, Verwendungszweck, etc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Lösche temporäre Daten"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Lösche im Modell als temporär definierte Daten"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Starte gesamtes Modell"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Überprüfung des Modells"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Überprüfe gesamtes Modell"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Zeige HTML-Handbuchseite des Grafischen Modellierers"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Über den Grafischen Modellierer"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Zeige Information über den Grafischen Modellierer an"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Kann Anweisungen nicht lesen %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Exportiere in Bild"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "Exportiere nach PostScript"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Export nach PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Starte Skript"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Kartenlayout"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 #, fuzzy
 msgid "&Insert"
 msgstr "&Installiere"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Zeichne einen Rahmen um den Kartenausschnitt"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Rasterkarte hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "Vektorkarte hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Legende hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Georeferenzieren von Raster- und Vektorkarten"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Karteninformation hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Maßstab hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Nordpfeil hinzufügen"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Zeige HTML-Handbuchseite des Grafischen Modellierers"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Kartenlayout beenden"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Zeige Information über den Grafischen Modellierer an"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Klicken Sie hier, um Suchmodul einzublenden"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Klicken Sie hier, um Suchmodul auszublenden"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Befehlsausgabe"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Ausgabefenster"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Leere Ausgabefenster"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Leere Befehlsausgabe"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Speiche Ausgabefenster in Datei"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Breche laufenden Befehl ab"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr "log. Datei"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
@@ -14164,28 +14578,28 @@ msgstr ""
 "Umschalten, um ausgeführte Befehle in Datei zu speichern. Inhalt wird beim "
 "Ausschalten gespeichert."
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Speichere Datei als..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Textdateien"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Dateien"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14196,12 +14610,12 @@ msgstr ""
 "\n"
 "Einzelheiten: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr "Befehlsausgabe gespeichert in '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14212,101 +14626,141 @@ msgstr ""
 "\n"
 "Einzelheiten: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr "Befehlslog gespeichert in '%s'"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Kategorie"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Selektiere Vektorobjekte"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Neues Mapset erstellen"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Vektorkarte ist nicht 3D. Breche die Operation ab."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Kann die Vektorkarte <%s> nicht öffnen."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Keine Karte ausgewählt!"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Neue Vektorkarte <%s> erzeugt"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Kann die Vektorkarte <%s> nicht erstellen."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 #, fuzzy
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Baumstruktur (Doppelklick, um einen Befehl auszuführen)"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Führe den ausgewählten Befehl aus"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Benutzereinstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Auf Standardwerte setzten"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Kehre zu den Standardeinstellungen zurück und wende die Änderungen an"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Wende Änderungen auf aktuelle Sitzung an und schließe Dialog"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Wende Änderungen in dieser Sitzung an"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Einstellungen bei aktueller Session angewendet, aber nicht gespeichert"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Die Schlüsselspalte kann kein leerer Zeichenkette sein."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "GUI Einstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Einstellungen des Layer Manager"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Frage vor dem Entfernen einer Kartenebenen aus der Baumstruktur"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Frage vor dem Schließen des wxGUIs oder eines Fensters."
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Verstecke Reiter '%s' (benötigt GUI-Neustart)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Suchmodul"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 "Kopiere selektierten Text automatisch in die Zwischenablage (in der "
 "Kommandozeile)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Workspace Einstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Positionieren der Kartenfenster unterdrücken"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Positionieren des Layer Managers unterdrücken"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Speichere das aktuelle Fensterlayout als Standard"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14314,202 +14768,194 @@ msgstr ""
 "Speichere die aktuelle Position und Größe des 'Layer Manager'-Fensters und "
 "der geöffneten Kartenfenster als Standardwerte für die nächste Sitzung."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Erscheinung"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Schriftart für Befehlsausgabe:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Spracheinstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Sprachwahl (Änderungen speichern und GRASS neustarten):"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Erscheinungsbild"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Liste der Elemente:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Menü-Stil (benötigt speichern und GUI-Neustart):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Höhe des Kartenauswahl-Popup-Fensters (In Pixel):"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Symbol-Design (benötigt GUI-Neustart):"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Befehlsdialog"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Kartenfenster"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Standard Schrift für GRASS Fenster:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Standard Fenstereinstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Fenster-Treiber:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Modus der Statuszeile:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Auto-Rendering einschalten"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Aktiviere Auto-Zooming auf selektierte Kartenlayer"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Mausrad Aktion:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr "Mausrad Richtung:"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "Fortgeschrittene Anzeigeneinstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr "Tiefenpuffer der 3D Ansicht (mögliche Werte sind 16, 24, 32):"
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "Modul"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Einstellungen für Befehle"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Schließe Dialog, wenn Befehl erfolgreich ausgeführt"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Erzeugte Karte der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Erlaube interaktive Eingabe"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Gesprächigkeitsstufe:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Ebenen"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Standard Fenstereinstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Mache NULL-Zellen transparent"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Standard-Farbtabelle"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Vektor Einstellungen"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Fenster:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Objektfarbe:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Transparent"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Füllfarbe:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Symbol:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Liniebreite (in Pixel):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Selektierte Objekte hervorheben und zoomen"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Daten-Browser"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Doppelklick mit linker Maustaste:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Encoding (z.B. utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Frage vor dem Löschen von Datensätzen aus einer Tabelle"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Erzeuge Tabelle"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Schlüsselspalte:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Einstellungen für Projektions-Statusleiste"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14527,20 +14973,20 @@ msgstr ""
 "Location. Aktiviere die Projektion-Checkbox im Drop down-Menue am unteren "
 "Ende des Map Display-Fensters.\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "EPSG Code:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Proj.4 string (erforderlich):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "EPSG Datei:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -14548,61 +14994,72 @@ msgstr ""
 "Lade EPSG-Codes. Eingabe des EPSG-Code oder direkte Eingabe des Proj.4-"
 "String."
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "&Lade EPSG Codes"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Koordinatenformat"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Projektionen verwalten"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Genauigkeit:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Kann die EPGS codes nicht lesen: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Kann die EPGS codes nicht lesen: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "EPSG Code <%s> nicht gefunden"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Wählen Sie Standard Schrift"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Wählen Sie Standard Schrift"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Wählen Sie eine Schrift"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Zeichenkodierung:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Beispiel: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Zugangsrechte der Mapsets verwalten"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14617,174 +15074,245 @@ msgstr ""
 "    - Sie können nur in der selektierten Mapset speichern.\n"
 "    - Sie können nur in den Mapsets schreiben, die Ihnen gehören."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Eigentümer"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Abfrageergebnisse"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Objekt"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Wert"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Selektieren Sie eine Spalte"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Lade Größe aus Spalte:"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Lösche selektierte Spalten"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Kopieren"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Tabelle kopieren"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Abfrageergebnisse"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Test auf Normalverteilung"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "Nichts gefunden"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr " (...)"
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, fuzzy, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+"Der Name <%(name)s> ist kein gültiger Name für Locations. Bitte verwenden "
+"Sie nur ASCII-Zeichen ohne %(chars)s und Leerzeichen."
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 #, fuzzy
 msgid "Fulltext search"
 msgstr "Volle Ausdehnung"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 #, fuzzy
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr "Finde Modul - (Enter-Taste für nächsten Treffer)"
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d Module stimmen überein"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Speichere aktuelle Einstellungen"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr "Lösche ausgewähltes Einstellungen"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Lade Einstellungen:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "Lade"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Einstellungen <%s> nicht gefunden"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Speichere Einstellungen"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "Name nicht angegeben, Einstellungen werden nicht gespeichert."
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 "Einstellung <%s> existiert bereits. Wollen Sie die Einstellungen "
 "überschreiben?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "Keine Einstellungen angegeben. Operation abgebrochen."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "Kann Einstellungen nicht speichern."
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Speichere Datei"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Geben Sie Parameter an für '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Führe den Befehl aus (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Animation"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Geben Sie Parameter an für '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Schließe dieses Fenster ohne den Befehl auszuführen (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Führe den Befehl aus (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Kopiere die aktuelle Befehlszeile in die Zwischenablage"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Zeige die Handbuchseite des Befehls an (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Erzeugte Karte(n) der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Schließe den Dialog beim Beenden"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
@@ -14792,93 +15320,112 @@ msgstr ""
 "Schließe Dialog, wenn Befehl erfolgreich ausgeführt. Ändere dies in den "
 "Einstellungen (Reiter 'Befehle')."
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Erfordert"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Optional"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "Parametrisiert im Modell"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[mehrere]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "gültiger Wertebereich"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Wählen Sie eine Farbe"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Wählen Sie %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "&Lade"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Location umbenennen"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Speichern unter"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "oder gebe Werte interaktiv ein"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Verzeichnis"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Layer id"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Name der Ebene"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr "Projektionsübereinstimmung"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Handbuch"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr "Nichts zu laden."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14886,45 +15433,45 @@ msgid ""
 "Reason: %s"
 msgstr "Kann das Symbol-Design nicht laden. Grund: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Nichts zu speichern."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Speichere Eingabe als..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Keine Karte ausgewählt!"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Fehler in %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Kann den Befehl '%s' nicht interpretieren"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: Parameter '%(key)s' nicht vorhanden"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Wählen Sie GRASS-Location und Mapset"
 
@@ -14933,46 +15480,46 @@ msgstr "Wählen Sie GRASS-Location und Mapset"
 msgid "Location or mapset is not defined."
 msgstr "Location oder Mapset fehlt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Name der GRASS Location:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Name der Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Wählen Sie ein Mapset der GRASS Location"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "Name der Mapset fehlt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Name der neuen Vektorkarte fehlt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Erzeuge Attributtabelle"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr "Name der neuen Vektorkarte fehlt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Name der neuen Vektorkarte:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Kann die Vektorkarte <%s> nicht erstellen."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
@@ -14981,7 +15528,7 @@ msgstr ""
 "Ungültige oder leere Schlüsselspalte.\n"
 "Kann die Vektorkarte <%s> nicht erstellen."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -14990,509 +15537,395 @@ msgstr ""
 "Die Vektorkarte <%s> existiert bereits im aktuellen Mapset. Wollen Sie diese "
 "überschreiben?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Lade Region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Speichere Region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr "Erzeuge oder editiere Gruppe"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr "Änderungen auf selektierte Gruppe anwenden und Dialog schließen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr "Änderungen auf selektierte Gruppe anwenden"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr "Schließe den Dialog, Änderungen werden nicht angewendet"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 #, fuzzy
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 "Selektieren Sie zu editierenden die Gruppe oder geben Sie einen Namen für "
 "eine neue Gruppe ein:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 #, fuzzy
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 "Selektieren Sie zu editierenden die Gruppe oder geben Sie einen Namen für "
 "eine neue Gruppe ein:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr "Muster:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Liste der Karten:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr "Selektieren Sie Kartenebenen und fügen Sie diese zur Liste."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr "Entferne selektiere Ebene(n) von der Liste."
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr "Selektierte Kartenebenen der Gruppe hinzufügen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr "Gruppe <%s> wurde geändert. Wollen Sie die Änderungen anwenden?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr "Nicht durchgeführte Änderungen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, fuzzy, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr "Gruppe <%s> wurde geändert. Wollen Sie die Änderungen anwenden?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Keine Rasterkarte ausgewählt!"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr "Keine offenen Änderungen in Gruppe <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr "Gruppe <%s> wurde erfolgreich erzeugt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr "Gruppe <%s> wurde erfolgreich geändert."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Erzeugen der neuen Gruppe <%s> ist fehlgeschlagen."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr "Änderungen der Gruppe <%s> ist fehlgeschlagen."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr "Keine Gruppe ausgewählt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Keine Gruppe ausgewählt."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr "Verwenden Sie vollständige Kartennamen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "3D Raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Kartentyp:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Umschalter auswählen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Invertiere Auswahl"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Dynamische Serien (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Mehrfach-Import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Liste der Rasterlayer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr "Liste der Vektorlayer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr " Liste von %s Ebenen"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Layer id"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Name der Ebene"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Name für GRASS Karte (editierbar)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr "Projektionsübereinstimmung"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Optionen"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importiere ausgewählte Ebenen"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Importierte Ebenen der Baumstruktur hinzufügen"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Importierte Ebenen der Baumstruktur hinzufügen"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Link"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Binde ausgewählte Ebenen ein"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "Keine Kartenebene selektiert. Operation abgebrochen."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Kann das Profil der Rasterkarte nicht erstellen."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Massen-Import von Vektordaten"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "Massen-Import von Rasterdaten"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Änderungen ignorieren und Dialog schließen"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Keine Karte ausgewählt!"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Importiere DXF-Layer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Wählen Sie zu importierende DXF-Datei"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Es wurde kein Kartenebene ausgewählt"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Bestimme die Transparenz der Kartenebene"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "deckend"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Setze Bildgröße"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Bildgröße"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Vorlage:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS SQL Abfragewerkzeug"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr " SQL-Ausdruck"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Symbole"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Symbolverzeichnis:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Symbolname:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Info"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Lizenz"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotation"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autoren"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Mitwirkende"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Weitere Mitwirkende"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Übersetzer"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Übersetzer"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Offizielle GRASS Webseite:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "GIS Library Revision:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr "Erstellungsdatum"
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Sprache"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "%s Datei fehlt"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Fehler beim Lesen der Datei '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Linien:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "Email"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Land"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr "Nation"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "Datei <%s> nicht gefunden"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Weiter"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Vorhergend"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Werkzeugleiste Karte"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Entferne selektiere Ebene(n) von der Liste."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Ebenen-Gruppe:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Entferne selektiere Ebene(n) von der Liste."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Layer id"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Entferne selektiere Ebene(n) von der Liste."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Layer Eigenschaften"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Transparenz ändern"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Transparenz ändern"
@@ -15592,695 +16025,713 @@ msgstr "Bringe Elemente wie Maßstab und Nordpfeil auf die Karte.  "
 msgid "Create histogram with d.histogram"
 msgstr "Erzeuge Histogramm mit d.histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Wähle Karten für Darstellung"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Nicht auswählbare Elemente"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr "Typ: "
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelect: ungültiges Objekt: %s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Einstellungen für Ausgabe"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Einstellungen für Quelle"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Punkt der Quelle"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr "nativ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Datei"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protokoll"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Ausgabe Typ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Typ der Quelle"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Alle Dateien"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "ZIP Dateien"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "GZIP Dateien"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "TAR Dateien"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "TARGZ Dateien"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Datei:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Wählen Sie zu importierende Datei"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Wählen Sie das Eingabe-Verzeichnis"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Erweiterung:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Wählen die Datei"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr "Objekttyp:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Feature abfragen"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Topologie"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Erzeugungsoptionen:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Format:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protokoll:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Vorschau nicht verfügbar"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 #, fuzzy
 msgid "No data source defined, settings are not saved."
 msgstr "Name nicht angegeben, Einstellungen werden nicht gespeichert."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr "Polygon"
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Keine Kartenebene selektiert. Operation abgebrochen."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Verzeichnis %s existiert nicht."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Vektorkarte ist nicht 3D. Breche die Operation ab."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "GRASS GIS Histogramm Werkzeug (d.histogram)"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Wählen Sie die Quell-Mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Kartenrahmen"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Zeitstempel"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Topologie erzeugen/wiederherstellen"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Standardeinstellungen wiederherstellen"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Erfordert"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Liste der Layer"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Wählen Sie eine Projektion"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Fortgeschrittene Legendeneinstellungen"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Karten überlagern"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Projektionscode:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Resamplen mittels Nearest-Neighbor"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Lineare Regression"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Selektiere Inperolationsmethode:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr "Kubische Splinesinterpolation"
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Geben Sie Parameter an für '"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Kann die Einstellungsdatei <%s> nicht lesen\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Koordinatenformat"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Selektierte Kartenebenen der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Wählen Sie die Quell-Mapset:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Wählen Sie die Quell-Location:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Ebene"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "Stil"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Schleife / Serie hinzufügen"
+msgid "Add default"
+msgstr "Standard"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Server-Einstellungen"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Server:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Verbinde"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Verbinde zu Server"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Fortgeschrittene Legendeneinstellungen"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Fortgeschrittene Legendeneinstellungen"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Einstellungen des Layer Manager"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Name der Ebene"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Umbenennen"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Passwort:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "Modell exportiert in <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Kann die Vektorkarte <%s> nicht öffnen."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Selektierte Kartenebenen der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Layer Eigenschaften"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "&Anwenden"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Name für Ausgaberasterkarte:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Region definieren"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Lade Region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 #, fuzzy
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr ""
 "Beschränke die Auflösung des Kartenfensters auf die Einstellungen des "
 "Arbeitsbereichs."
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Arbeitsbereich auf Grundlage des Kartenfensters setzen"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Füge existierende Rasterkarte ein"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Lade Region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "&Entferne Kartenebene"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Selektierte Ebenen löschen"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Die Datei existiert bereits."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Verzeichnis %s existiert nicht."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Lade Daten..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Kann nicht setzen"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "Alle selektieren"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "Alle deselektieren"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr "Geben Sie Attributwerte ein"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr "Ungültiges Farbformat. Verwenden Sie das Format '0:0:0'"
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Selektiere Vektorkarte:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr "Importiere/Exportiere Farbtabelle:"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr "Wählen Sie die Datei mit Farbtabelle"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Lade"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr "Geben Sie den Dateinamen ein oder verwenden Sie den Dateibrowser"
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Wählen Sie die Datei, um Farbtabelle zu speichern"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr "Geben Sie den Dateinamen ein oder verwenden Sie den Dateibrowser"
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "&Einstellungen"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Speichere Farbtabelle in Datei"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr "Lade Farbtabelle aus Datei:"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr "Speichere Farbtabelle in Datei:"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr "Zurücksetzen auf Standardtabelle"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr "Vorschau der Karte anzeigen (Ausdehnung des Kartenfensters)"
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr "Keine gültigen Farbregeln angegeben."
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr "Farbtabelle hat ungültiges Format"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr "Ungültiger Wert der Regel '%s'. Kann Farbtabelle nicht anwenden."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Erstelle eine neue Farbtabelle für Rasterkarten"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Gib Rasterkategoriewerte oder Prozent ein"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "Floating point-Wertebereich"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 "Gib Rasterkategoriewerte oder Prozent (%(range)s = %(min)d-%(max)d) ein"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr "Neue Farbregeln für Vektorkarten erzeugen"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr "Geben Sie Attributwerte oder Prozentzahlen ein:"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr "Geben Sie Attributwerte ein:"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr "Selektieren Sie eine Spalte"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Layer:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Attributspalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr "Lade Farbe aus Spalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr "Speiche Farbe in Spalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr "Lade Größe aus Spalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr "Speichere Größe in Spalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr "Lade Breite aus Spalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr "Speichere Breite in Spalte:"
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr "Verwende Farb-Spalte statt der Farbtabelle:"
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Füge GRASSRGB-Spalte zu der Attributtabelle hinzu."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr "Im- bzw. Exportiere Farbtabelle"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16289,11 +16740,11 @@ msgstr ""
 "Die Datenbankverbindung der Vektorkarte <%s> ist nicht in der DB-Datei "
 "definiert. Möchten Sie eine neue Verbindung anlegen?"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr "Keine Datenbankverbindungen definiert"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
@@ -16302,16 +16753,16 @@ msgstr ""
 "Die selektierte Karte <%(map)s> ist nicht im aktuellen Mapset <%(mapset)s>. "
 "Attributtabelle kann nicht geändert werden."
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "Die Spalte %s existiert bereits."
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Bitte warten Sie, lade Daten aus der Attributtabelle..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
@@ -16321,315 +16772,324 @@ msgstr ""
 "lange dauern und könnte dazu führen, dass der Computer einfriert. Wollen Sie "
 "fortfahren?"
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Zu viele Zeilen"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Geben Sie Attributwerte oder Prozentzahlen %s ein:"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Geben Sie Attributwerte %s ein:"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr "Bitte wählen Sie eine Spalte zum Speichern der Werte."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "Keine Farbe angegeben. Breche die Operation ab."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS GIS Rasterkartenrechner"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS GIS 3D Raster Map Calculator"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "mapcalc Ausdruck"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operatoren"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operanden"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Ausdruck"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Speichere Ausdruck in Datei"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Lade ausdruck aus Datei"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "Exponent"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dividiere"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "addiere"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "subtrahiere"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "modulus"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "multipliziere"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "links Verschiebung"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "rechts Verschiebung"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "rechts Verschiebung (vorzeichenlos)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "größer als"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "größer als oder gleich"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "kleiner als"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "kleiner als oder gleich"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "gleich"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "ungleich"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "Einserkomplement"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NICHT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "bitweises UND"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "bitweises ODER"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "logisches UND"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "logisches UND (ignoriert NULL)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "logisches ODER"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "logisches ODER (ignoriert NULL)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "bedingt"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Name für neu zu erzeugende 3D Rasterkarte"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Name für neu zu erzeugende 3D Rasterkarte"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Füge existierende 3D Rasterkarte ein"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Füge existierende Rasterkarte ein"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Füge mapcalc-Funktion ein"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Erzeuge zufällige Punkte"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Erzeugte Karte der Baumstruktur hinzufügen"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr "Sie müssen einen Namen für die zu erzeugenden Rasterkarte eingeben."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 "Sie müssen ein Ausdruck eingeben, um eine neue Rasterkarte zu erzeugen."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Wählen Sie einen Dateinamen, um den Ausdruck zu speichern"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "Terminus-Datei (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Wählen Sie einen Dateinamen, um den Ausdruck zu laden"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Abruf und Installation einer neuen Erweiterung aus den GRASS Addons"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Liste von Elementen - Rechtsklick für Löschen"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Optionen"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Abrufen"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr "Abruf der Modulliste vom GRASS-Addons SVN-Repository"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Installiere"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "Installiere ausgewählte Add-on-GRASS-Module"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "Erweiterung nicht definiert"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr "Rufe Modulliste von GRASS-Addons SVN ab (etwas Geduld)..."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Erweiterungen (Addons)"
+
+#: ../gui/wxpython/modules/extensions.py:238
 #, fuzzy
 msgid "Install"
 msgstr "&Installiere"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Zeige Handbuchseiten"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Kann Einstellungen nicht speichern."
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Entferne Add-ons-Erweiterungen"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "Liste der installierten Erweiterungen"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "&Installiere"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Deinstalliere ausgewählte Add-ons-Erweiterungen"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "&Installiere"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Deinstalliere ausgewählte Add-ons-Erweiterungen"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr "Keine Erweiterung zum Entfernen ausgewählt. Breche die Operation ab."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -16637,252 +17097,395 @@ msgid ""
 "\n"
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
-"Liste der zu löschenden Dateien:\n"
-"%(files)s\n"
-"\n"
-"Wollen Sie wirklich die <%(ext)s> Erweiterung löschen?"
+"Liste der zu löschenden Dateien:\n"
+"%(files)s\n"
+"\n"
+"Wollen Sie wirklich die <%(ext)s> Erweiterung löschen?"
+
+#: ../gui/wxpython/modules/extensions.py:493
+msgid "Remove extension"
+msgstr "Entferne Erweiterung"
+
+#: ../gui/wxpython/modules/extensions.py:526
+msgid "Extension"
+msgstr "Erweiterung"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Mehrfach-Import"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Liste der Rasterlayer"
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr "Liste der Vektorlayer"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr " Liste von %s Ebenen"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Name für GRASS Karte (editierbar)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Import"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importiere ausgewählte Ebenen"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Einstellungen für Quelle"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Schrifteinstellungen"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Importierte Ebenen der Baumstruktur hinzufügen"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Importierte Ebenen der Baumstruktur hinzufügen"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Link"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Binde ausgewählte Ebenen ein"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "Keine Kartenebene selektiert. Operation abgebrochen."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Kann das Profil der Rasterkarte nicht erstellen."
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Massen-Import von Vektordaten"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Massen-Import von Rasterdaten"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Änderungen ignorieren und Dialog schließen"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Keine Karte ausgewählt!"
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Importiere DXF-Layer"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Wählen Sie zu importierende DXF-Datei"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Es wurde kein Kartenebene ausgewählt"
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projektion"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Name für GRASS Karte (editierbar)"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
-msgid "Remove extension"
-msgstr "Entferne Erweiterung"
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Zu löschende Ebene"
 
-#: ../gui/wxpython/modules/extensions.py:464
-msgid "Extension"
-msgstr "Erweiterung"
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Importiere ausgewählte Ebenen"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Keine GRASS-Python library gefunden."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Eingabe-Daten"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Punkt-Datensatz:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Numerische Spalte:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Name für Ausgaberasterkarte:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Exportiere auch Varianz-Karte: "
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Kriging Modul"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Fertig."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Variogram fitting"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Stelle Variogram dar"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Kriging-Methoden"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Blockgröße:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Auto-fit-Variogram"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Modell:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Work in progress! Keine Funktionalität vorhanden."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "GRASS GIS Histogramm Werkzeug (d.histogram)"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Wähle Font für Text im Histogramm"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Einstellen der Vektor-Cleaning-Tools"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "Breche Linien/Flächengrenzen"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "entferne Duplikate"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "entferne Überstände (dangles)"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "Ändere Überstände von Flächengrenzen zu Linien"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "Entferne Brücken"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "Ändere Brücken zu Linien"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "Fange Linien/Flächengrenzen"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "entferne doppelte Flächenzentroide"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "breche Polygone"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "Putze Linien/Flächengrenzen"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "Entferne kleine Flächen"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "Entferne Linien/Flächengrenze mit Länge 0"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "entferne spitze Winkel an Knoten"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Wähle Cleaning-Werkzeuge und setze Schwellenwerte"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Selektiere Input-Vektorkarte:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Objekttyp: "
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Selektiere Vektorkarte für Ausgabe:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Kopiere die aktuelle Befehlszeile in die Zwischenablage (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "Linie"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "Flächengrenze"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "Zentroid"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "Face"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. Cleaning Werkzeug entfernt, wird ignoriert"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Wählen sie ein Cleaning-Werkzeug zum Entfernen aus"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. Vektor-Cleaning-Tool nach oben gereiht"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "1. Cleaning Werkzeug kann nicht nach oben verschoben werden"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr ""
 "Wählen sie ein Vektor-Cleaning-Tool aus, um es weiter nach oben zu reihen"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. Cleaning-Werkzeug abwärts verschoben"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "Letztes Cleaning-Werkzeug kann nicht nach unten verschoben werden"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 "Bitte wählen Sie ein Cleaning-Werkzeug aus, um es nach unten zu verschieben"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "Cleaning tool: '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "Schwellenwert für %(num)s. Werkzeug '%(tool)s': %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr "Name der Eingabe-Vektorkarte"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr "Name der Ausgabe-Vektorkarte"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Schwellwert"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr "'%s' nicht definiert"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16893,21 +17496,21 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Führe ausgewählte Cleaning-Bearbeitungen aus..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 "Befehl zum Säubern von Vektordaten wurden in die Zwischenablage kopiert"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Kann die Datei <%s> nicht zum Lesen öffnen."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16921,43 +17524,66 @@ msgstr ""
 "\n"
 "Anzahl übersprungener Zeilen: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " Zeile %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: Layertyp <%(type)s> wird nicht unterstützt"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr "Befehl '%s' fehlgeschlagen\n"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Einzelheiten: %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Nicht unterstützter Kartenebenentyp '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "FEHLER: Rendering fehlgeschlagen. Details: %s"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Rendern"
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr "Lade Daten herunter"
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Rendern"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr "Rendern..."
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Auf die Standardregion zoomen"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 "Fehler: Unable to open '%(file)s'. Begründung: %(ret)s. wxGUI exited.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
@@ -16966,32 +17592,32 @@ msgstr ""
 "\n"
 "FEHLER: Kann WIND Datei nicht lesen: %s\n"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Ungültige Kartengröße %d, %d\n"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Kann nicht auf die Rasterkarte <%s> zoomen."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Einzelheiten:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Kann nicht auf die Vektorkarte <%s> zoomen."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Kann nicht auf die Rasterkarte <%s> zoomen."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
@@ -17000,96 +17626,68 @@ msgstr ""
 "Schließen von wxGUI. Führen Sie bitte g.region manuell aus, um das Problem "
 "zu beheben."
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "FEHLER: Rendering fehlgeschlagen. Details: %s"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Kann die Kartenebene <%s> nicht rendern."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Kann die Überlagerung <%s> nicht rendern."
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr "Lade Daten herunter"
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Rendern"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr "Rendern..."
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Unbekannter Tag"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Kann Einstellungsverzeichnis nicht erzeugen"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Werkzeuge"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Vektorkarte <%(map)s>: %(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Öffnen von '%s' nicht erfolgreich"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "FEHLER: Kann die GRASS-Version nicht bestimmen. Einzelheiten: %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Kann Datei '%s' nicht öffnen.\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
@@ -17098,17 +17696,17 @@ msgstr ""
 "%s: Zeilen übersprungen - kann '%s' nicht interpretieren\n"
 "Grund: %s\n"
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Doppelter Schlüssel: %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Kann Datei '%s' nicht erzeugen.\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17122,177 +17720,182 @@ msgstr ""
 "Option <%(opt)s>: Das Lesen von der Standardeingabe wird vom wxGUI nicht "
 "unterstützt"
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Datei <%s> nicht gefunden."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d Sek"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d Min %(sec)d Sek"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 "Daten wurden in einem inkonsistenten Zustand zurückgelassen und können "
 "beschädigt sein"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Befehl abgebrochen"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Befehl ausgeführt"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Ursache"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Ausführung fehlgeschlagen:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Fehler: "
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Kann den Befehl '%s' nicht ausführen."
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Segment break"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Punkt"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr "animation"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Alle einklappen außer PERMANENT und Aktuelles"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Alle einklappen außer PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Alle einklappen außer Aktuelles"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Alle einklappen"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Alle ausklappen"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Ausgewählte anzeigen"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "Klassisch (nur Beschriftung)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "Kombiniert (Beschriftungen und Modulnamen)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 #, fuzzy
 msgid "Expert (module names only)"
 msgstr "Professionell (nur Modulnamen)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Tabellen auflisten"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Zoomen und zentrieren"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr "Auf die Mausposition zoomen"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Nichts"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "Vorwärts Scrollen um herein zu zoomen"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "Rückwärts Scrollen um heraus zu zoomen"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "Box"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "Kugel"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "Würfel"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "Raute"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "Stern"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "Kreisel"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "Histogramm"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr "Kreis"
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Kann die Einstellungsdatei <%s> nicht lesen\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17304,11 +17907,11 @@ msgstr ""
 "\t\tEinzelheiten: %(detail)s\n"
 "\t\tZeile: '%(line)s'\n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "Kann Einstellungsverzeichnis nicht erzeugen"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17319,48 +17922,48 @@ msgstr ""
 "\n"
 "Einzelheiten: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Kann nicht setzen"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Kann die Einstellungen '%s' nicht parsen."
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 "Wählen Sie die GRASS-Datenbank \n"
 "und den Namen der Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "GIS-Daten Verzeichnis:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Projekt-Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Name der Location im GIS-Datenverzeichnis"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Location-Titel"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "Location-Titel (optional, Sie können dieses Feld leer lassen)."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
@@ -17369,24 +17972,24 @@ msgstr ""
 "Der Name <%(name)s> ist kein gültiger Name für Locations. Bitte verwenden "
 "Sie nur ASCII-Zeichen ohne %(chars)s und Leerzeichen."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Ungültiger Location-Name"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Wählen Sie das GRASS-Daten Verzeichnis:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Die Location existiert bereits in der GRASS Datenbank."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Kann die Location nicht erzeugen"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
@@ -17394,187 +17997,218 @@ msgstr ""
 "Der Titel der Location ist auf eine Zeile und 256 Zeichen beschränkt. Der "
 "Rest des Textes wird ignoriert."
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Wählen Sie eine Methode, um die neue Location zu erzeugen"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Wählen Sie den EPSG-Code des Koordinatensystem"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 "Einlesen von Projektions- und Datumsinformationen aus georeferenzierter Datei"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 "Lese Projektions- und Datumsinformationen aus Well Known Text (WKT) .prj-"
 "Datei"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Wählen Sie das Koordinatensystem aus einer Liste"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 "Angabe von Projektions- und Datumsinformationen über anwendungsspezifische "
 "PROJ.4 Parameter"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Erzeuge ein generisches kartesisches Koordinatensystem (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Einfach"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Fortgeschritten"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Wählen Sie eine Projektion"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Code"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Projektionscode:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Suche in der Beschreibung:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Kann die Liste nicht lesen: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Wählen Sie eine Projektion"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Wählen Sie Datum oder Ellipsoid (nächste Seite)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datum mit zugehörigem Ellipsoiden"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Nur Ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Sie müssen einen Wert für %s eingeben."
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Geben Sie Parameter an für die %s Projektion "
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Spezifizieren Sie das geodätische Datum"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Datumscode:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Spezifizieren Sie das Ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Datenbank"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Ellipsoidcode:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Wählen Sie eine georeferenzierte Datei"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Georenferenzierte Datei:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "Wähle die Well Known Text (WKT) .prj Datei aus"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr "WKT .prj Datei:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Wählen Sie einen EPSG Code"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Pfad zu der Datei mit EPSG Codes:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Wählen Sie eine Datei mit EPSG-Codes"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Wählen Sie einen EPSG Code"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Pfad zu der Datei mit EPSG Codes:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "EPSG Code:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Wählen Sie eine Datei mit EPSG-Codes"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Kann die EPGS codes nicht lesen: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 "Wählen Sie eine Methode, um die Parameter der Georeferenzierung zuwählen"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Geben Sie den PROJ.4-Zeichenkette ein:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Datum-Transformation ist erforderlich."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "GRASS Datenbank:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Name der Location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Location-Titel:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projektion:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
@@ -17582,20 +18216,20 @@ msgstr ""
 "PROJ.4 Definition:\n"
 " (non-definitive)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Möchten Sie die GRASS Location <%s> erzeugen?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Neue Location erzeugen?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definieren Sie eine neue GRASS Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17606,16 +18240,16 @@ msgstr ""
 "\n"
 "Details: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 "Location-Assistent wurde abgebrochen. Die Location wurde nicht erzeugt."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Kann neue Location nicht anlegen"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17624,116 +18258,121 @@ msgstr ""
 "Die Location <%(loc)s> wird im GIS-Verzeichnis <%(dir)s> angelegt. Sie "
 "müssen das Standard GIS-Verzeichnis auf dem GRASS Startbildschirm anpassen."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Neues GIS-Verzeichnis:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "EPSG Code fehlt"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "EPSG Code fehlt"
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Datei <%s> nicht gefunden."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Setzen Sie Ausdehnung und Auflösung der Standardregion"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Setze Region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Ungültige Location gewählt."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Ungültige Region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Klicken Sie hier, um 3D Einstellungen anzuzeigen"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Klicken Sie hier, um 3D Einstellungen zu verbergen"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Zeilen: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Spalten: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Zellen: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Tiefe: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3D Zellen: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Vertikale Auflösung"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Norden"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Westen"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Osten"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Süden"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "N-S Auflösung"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "O-W Auflösung"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Ungültiger Wert: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Wählen Sie eine Datumstransformation"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Wählen Sie von der Liste der Datumstransformationen"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
@@ -17742,7 +18381,7 @@ msgstr ""
 "Tiefenpuffers in den GUI-Einstellungen > Map Display > Fortgeschritten und "
 "erneuter GUI-Start."
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
@@ -17750,109 +18389,109 @@ msgid ""
 msgstr ""
 "Bild ist zu groß. Ihr OpenGL unterstützt maximal Texturen der Größe %d px."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Ostwert"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Nordwert"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Höhe"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr "Name der Oberfläche"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "Rasteroberflächenhöhe"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "Rasteroberflächenfarbe"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "XY-Distanz vom vorhergehenden"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "XYZ-Distanz vom vorhergehenden"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr "Distanz entlang Oberfläche"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr "Distanz entlang überhöhter Oberfläche"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "Kein Punkt auf der Oberfläche"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Lade Rasterkarte"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Lade 3D Rasterkarte"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "fehlgeschlagen"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Nicht unterstützter Layertyp '%s'"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Kann Rasterkarte nicht entfernen"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Kann 3D Rasterkarte nicht entfernen"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3D Rasterkarte"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "erfolgreich entfernt"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Laden der Vektorkarte <%(name)s> (%(type)s) fehlgeschlagen"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Kann die Vektorkarte <%(name)s> (%(type)s) nicht entfernen"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Vektorkarte <%(name)s> (%(type)s) erfolgreich entfernt"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Vektor-Punktebene nicht gefunden (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Kann die Eigenschaften der Datenebene (id=%d) nicht setzen."
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17863,46 +18502,46 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "konstant#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Ansicht"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analyse"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animation"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Kontrollansicht"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr "Pass die Distanz und die Perspektive des Blickpunktes an"
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspektive:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "Neigt die Oberfläche aus der Horizontalen"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Neigung:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
@@ -17910,23 +18549,23 @@ msgstr ""
 "Passt die Höhe des Blickpunktes über der Oberfläche an (der Blickwinkel wird "
 "automatisch adjustiert, um das Bildzentrum zu erhalten) "
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr "Passt die relative Höhe der Objekte über der Oberfläche an"
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Z-Überh:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Ansicht:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "hier"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
@@ -17934,19 +18573,19 @@ msgstr ""
 "Erlaubt Ihnen ein neues Zentrum der Ansicht zu wählen. Klicken Sie zunächst "
 "auf den Button und dann auf die Oberfläche."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "Zentrum"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Setzt die Ansicht auf die Standardwerte zurück."
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "oben"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
@@ -17954,19 +18593,19 @@ msgstr ""
 "Ansicht direkt von oben über dem Zentrum. Die Ansicht ist ungefähr in Nord-"
 "Süd-Richtung."
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "Zurücksetzen"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Zurücksetzen auf Standardansicht"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Erscheinungsbild"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
@@ -17975,219 +18614,219 @@ msgstr ""
 "verändern. Es ist empfehlenswert den fly-through Modus zu verwenden um "
 "flüssige Bewegungen zu erhalten."
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Aufnehmen"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Abspielen"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Gesamtzahl Frames:"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "Frame rate (FPS):"
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "Frames werden mit der angegebenen Frequenz (FPS) aufgenommen. "
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Speichere die Bildsequenz"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Wählen Sie ein Verzeichnis für Bilder"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 "Erzeugte Dateinamen haben folgendes Muster: prefix_1.ppm, prefix_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Oberfläche"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "konstante Oberfläche"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vektor"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Beleuchtung"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "Randzone"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr "Schnittebenen"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Modus:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "grob"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "fein"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "beides"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Schummerung:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "flach"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Alle setzen"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Verwende Zeichenvorschriften für alle geladenen Oberflächen"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Grober Modus:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "Auflösung:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "Stil:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "Gitternetz"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "Oberfläche"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr "Gitterfarbe ändern"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Feiner Modus:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Oberflächen-Attribute"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Transparenz"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Glanz"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "Karte"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "zurücksetzen"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "konstant"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Ändert die x,y und z Position der aktuellen Oberfläche"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Zurücksetzen"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Zurücksetzen auf Standardposition"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "Aktive Schnittfläche:"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "Leeren"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr "Oberflächenfarbe"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr "Unterflächenfarbe"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "Mischen"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "Schummerung"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "Horizontales X:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "Bestimmt die X-Koordinate der aktuellen Schnittfläche"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Horizontales Y:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "Bestimmt die Y-Koordinate der aktuellen Schnittfläche"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr "Rotiert die aktuelle Schnittfläche um die vertikale Achse"
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr "Rotiert die aktuelle Schnittfläche um die horizontale Achse"
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
@@ -18195,354 +18834,354 @@ msgstr ""
 "Bestimmt die Z-Koordinate der aktuellen Schnittfläche (nur sinnvoll wenn die "
 "Neigung nicht 0 ist)"
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr "Feine Auflösung:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Wert:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Transparenz:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Zeige Vektorlinien"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Vektorlinien"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Linie:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "Breite:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "Farbe:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 #, fuzzy
 msgid "use color for thematic mapping"
 msgstr "Klassifiziert Attributdaten, z.B. für thematische Karten."
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 #, fuzzy
 msgid "use width for thematic mapping"
 msgstr "Klassifiziert Attributdaten, z.B. für thematische Karten."
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Einstellungen vornehmen"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "auf Oberfläche(n):"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr "in 3D"
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Höhe über Oberfläche:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Vektorpunkte anzeigen"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Vektorpunkte"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Symbol:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 #, fuzzy
 msgid "use size for thematic mapping"
 msgstr "Klassifiziert Attributdaten, z.B. für thematische Karten."
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "Iso-Oberflächen"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr "Schnitte"
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Auflösung:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Liste der Iso-Oberflächen"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Zeige Licht-Modell"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Position der Lichtquelle"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Passe Höhe des Lichts an"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Lichtfarbe und -intensität"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Helligkeit:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Passe die Helligkeit des Lichts an"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Lichtwärme:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Passe die Lichtwärme an"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "Kanten mit Randzone"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "N && W"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "N && O"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "S && W"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "S && O"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr "Höhe der Randzone von unten:"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "Pfeillänge (in Karteneinheiten):"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Pfeilfarbe:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Nordpfeil platzieren"
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Länge des Maßstabsbalken (in Karteneinheiten):"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Farbe des Maßstabsbalken:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Maßstab hinzufügen"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 "Wollen Sie eine neue Animation aufzeichnen ohne die vorherige zu speichern?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "Die Animation existiert bereits."
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "Kein Datei-Präfix angegeben."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "Verzeichnis %s existiert nicht."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Isoflächen Attribute"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr "Normale Richtung umschalten"
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Isoflächen Wert"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr "Attribute der Schnitte"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr "Schnitt parallel zu Achse:"
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "W"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "NW"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "NO"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "SO"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "SW"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Level"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr "Liste der Schnitte"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, fuzzy, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr "Schnitt parallel zu Achse:"
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr "Schnitt parallel zu"
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Maßstab hinzufügen"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Nichts"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Vektorkarte ist 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Vektorkarte ist 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d Objekte (%(points)d points)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "auf Oberfläche"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "Wertebereich:"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Nördliche Kante:"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Südliche Kante:"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Westliche Kante:"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Östliche Kante:"
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr "Nordwert (Y):"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Höhe (Z):"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr "Ostwert (X):"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr "Untere Kante:"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr "Obere Kante:"
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr "Passt Entfernung und Richtung des Betrachters an"
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
@@ -18550,84 +19189,84 @@ msgstr ""
 "Passt die Richtung der Beleuchtung an. Verschieben Sie die Scheibe um die "
 "Richtung zu ändern."
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "3D-Rasterkarte <%s> nicht gefunden"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Einstellungen der 3D-Ansicht"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 "Kehre zu den Standardeinstellungen zurück und wende die Änderungen nicht an"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "Wert:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "Schrittweite:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Position:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Drehung:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr "Fly-through"
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr "Schiebe exag:"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr "Drehe exag:"
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Licht"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr "Gitterfarbe:"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marker:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Einstellungen für 3D-Ansicht gespeichert in Datei <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Keine Karte ausgewählt!"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18637,7 +19276,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18649,23 +19288,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Keine Rasterkarte ausgewählt!"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18673,7 +19312,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18684,31 +19323,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18723,68 +19362,68 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Werkzeugleiste Georektifizierung"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Vektorpunkte"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Spalte umbenennen"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Farbe auswählen"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Gitternetz anzeigen"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Keine Kategorie"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Keine Kategorie"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Exportiere Rasterkarte"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Transparenz von <%s> festlegen"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -18794,212 +19433,232 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Auf die Ausdehnung der gespeicherten Region vergrößern"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Rasterkarte hinzufügen"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Keine Rasterkarte ausgewählt!"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "%d Karte aus dem aktuellen Mapset gelöscht"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Die Regions-Datei <%s> existiert? Soll sie überschrieben werden?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Vektorkarte <%s> vorhanden"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Farbe auswählen"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Farbe für ausgewählte GCPs:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Farbe auswählen"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Wählen Sie darzustellende Zielkarte:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Symbol auswählen:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Achseneinstellungen"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Wähle Rasterkarte 3 (optional):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Erzeugen der neuen Gruppe <%s> ist fehlgeschlagen."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Rasterkarte hinzufügen"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Wählen Sie darzustellende Zielkarte:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Wähle zu profilierende Rasterkarte"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Bild klassifizieren"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Abfrage von selektierten Raster-/Vektorkarte(n)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Entferne selektiere Ebene(n) von der Liste."
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Neuen Vertex hinzufügen"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Objektauswahl"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Verschiebe Vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Verschiebe Vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Entferne Vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Entferne Vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Beschriftungen hinzufügen"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Ausgewähltes Mapset umbenennen"
 
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "Einheiten der aktuellen Projektion werden nicht unterstützt.\n"
+#~ "Es wird stattdessen Meter verwendet!"
+
+#~ msgid "Unsupported units"
+#~ msgstr "Nicht unterstützte Einheiten"
+
+#~ msgid "Map layers"
+#~ msgstr "Kartenebenen"
+
+#~ msgid "Search modules"
+#~ msgstr "Suche Befehle"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Möchten Sie ein neues Mapset anlegen?"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "Die Datei existiert bereits."
@@ -19020,6 +19679,26 @@ msgstr "Ausgewähltes Mapset umbenennen"
 #~ msgstr "GUI schließen"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Ungültige Eingabe"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Vorschau nicht verfügbar"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Überprüfe Modell..."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Umbenennen"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Tabelle kopieren"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Liste der Rasterlayer"
 
@@ -19035,23 +19714,41 @@ msgstr "Ausgewähltes Mapset umbenennen"
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "Univariate Statistiken"
 
-#~ msgid "Add condition"
-#~ msgstr "Bedingung hinzufügen"
+#~ msgid "Repository"
+#~ msgstr "Repository"
 
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Füge Bedingung (if/else) zu Modell hinzu"
+#~ msgid "Load settings:"
+#~ msgstr "Lade Einstellungen:"
 
-#, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Importierte Ebenen der Baumstruktur hinzufügen"
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Kann die Kartenebene <%s> nicht rendern."
 
-#, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Importierte Ebenen der Baumstruktur hinzufügen"
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Kann die Überlagerung <%s> nicht rendern."
 
 #~ msgid "Unpacks a raster map packed with r.pack."
 #~ msgstr "Dekomprimiert eine Rasterkarte zusammengepackt mit r.pack."
 
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Import alter GRASS Vektordaten"
+
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Import alter GRASS Vektordaten (alle Karten)"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Konvertiere alle alten GRASS Vektorkarten des aktuellen Mapsets in "
+#~ "aktuelles Format."
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "Importiere Datentabelle"
+
+#~ msgid "GEOnet import"
+#~ msgstr "GEOnet Import"
+
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Dekomprimiert eine Rasterkarte zusammengepackt mit r.pack."
@@ -19080,31 +19777,6 @@ msgstr "Ausgewähltes Mapset umbenennen"
 #~ msgid "Common export formats using OGR"
 #~ msgstr "Häufige Exportformate via OGR"
 
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr ""
-#~ "Arbeitsbereich auf Grundlage selektierter Karte setzen (ignoriere "
-#~ "NULLwerte)"
-
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Import alter GRASS Vektordaten"
-
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Import alter GRASS Vektordaten (alle Karten)"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Konvertiere alle alten GRASS Vektorkarten des aktuellen Mapsets in "
-#~ "aktuelles Format."
-
-#, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Importiere Datentabelle"
-
-#~ msgid "GEOnet import"
-#~ msgstr "GEOnet Import"
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr "IDW aus Rasterpunkten (alternative Methode für dünngesäte Punkte)"
 
@@ -19115,113 +19787,22 @@ msgstr "Ausgewähltes Mapset umbenennen"
 #~ msgstr "vergleiche Bitmuster"
 
 #, fuzzy
-#~ msgid "Data file <%(name)s> imported successfully."
-#~ msgstr "Vektorkarte <%(name)s> (%(type)s) erfolgreich entfernt"
-
-#~ msgid "Volume"
-#~ msgstr "Volumen"
-
-#~ msgid "Choose project location and mapset"
-#~ msgstr "Wählen Sie Projekt-Location und Mapset"
-
-#~ msgid "Manage"
-#~ msgstr "Verwalten"
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Attributtabellen Manager"
 
 #, fuzzy
-#~ msgid ""
-#~ "Welcome to GRASS GIS %s%s\n"
-#~ "The world's leading open source GIS"
-#~ msgstr ""
-#~ "Willkommen in GRASS GIS %s\n"
-#~ "Das weltweit führende Open Source GIS"
-
-#~ msgid ""
-#~ "Select an existing project location and mapset\n"
-#~ "or define a new location"
-#~ msgstr ""
-#~ "Wählen Sie eine existierende Projekt-Location und ein Mapset\n"
-#~ "oder definieren Sie eine neue Location."
-
-#~ msgid ""
-#~ "Project location\n"
-#~ "(projection/coordinate system)"
-#~ msgstr ""
-#~ "Projekt-Location\n"
-#~ "(Projektion/Koordinatensystem)"
-
-#~ msgid ""
-#~ "Accessible mapsets\n"
-#~ "(directories of GIS files)"
-#~ msgstr ""
-#~ "Verfügbare Mapsets\n"
-#~ "(Verzeichnis mit GIS-Dateien)"
-
-#~ msgid "Define new location"
-#~ msgstr "Definiere neue Location"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Wählen Sie die Quell-Mapset:"
 
-#~ msgid ""
-#~ "Rename/delete selected\n"
-#~ "mapset or location"
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
 #~ msgstr ""
-#~ "Umbenennen/Löschen ausgewählter\n"
-#~ "Mapsets oder Locations"
-
-#~ msgid "Start &GRASS"
-#~ msgstr "Starte &GRASS"
-
-#~ msgid "&Create mapset"
-#~ msgstr "&Mapset erstellen"
-
-#~ msgid "&Location wizard"
-#~ msgstr "&Location-Assistent"
-
-#~ msgid "Rename mapset"
-#~ msgstr "Mapset umbenennen"
-
-#~ msgid "Rename location"
-#~ msgstr "Location umbenennen"
-
-#~ msgid "Delete mapset"
-#~ msgstr "Mapset löschen"
-
-#~ msgid "Delete location"
-#~ msgstr "Location löschen"
-
-#~ msgid "Welcome to GRASS GIS"
-#~ msgstr "Willkommen in GRASS GIS"
-
-#, fuzzy
-#~ msgid "Warning: "
-#~ msgstr "Warnung"
+#~ "Arbeitsbereich auf Grundlage selektierter Karte setzen (ignoriere "
+#~ "NULLwerte)"
 
 #, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "Wählen Sie GRASS-Location und Mapset"
-
-#~ msgid "Starting GRASS for the first time"
-#~ msgstr "Starte GRASS zum ersten Mal"
-
-#~ msgid "Vector to volume"
-#~ msgstr "Vektor zu Volumen"
+#~ msgid "Data file <%(name)s> imported successfully."
+#~ msgstr "Vektorkarte <%(name)s> (%(type)s) erfolgreich entfernt"
 
 #, fuzzy
-#~ msgid "Raster map calculator."
-#~ msgstr "3D Rasterkartenrechner"
-
-#~ msgid "V&olumes"
-#~ msgstr "&Volumen"
-
-#~ msgid "Develop volumes"
-#~ msgstr "Volumen pflegen"
-
-#~ msgid "3D Mask"
-#~ msgstr "3D Maske"
-
-#~ msgid "Volume calculator"
-#~ msgstr "Volumenrechner"
-
-#~ msgid "Basic volume metadata"
-#~ msgstr "Grundlegende Volumen-Metadaten"
-
-#~ msgid "Voxel statistics"
-#~ msgstr "Voxel-Statistik"
+#~ msgid "Add default servers"
+#~ msgstr "Schleife / Serie hinzufügen"
diff --git a/locale/po/grasswxpy_el.po b/locale/po/grasswxpy_el.po
index ffb1463..7495a7b 100644
--- a/locale/po/grasswxpy_el.po
+++ b/locale/po/grasswxpy_el.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_el\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-02-07 20:23+0200\n"
 "Last-Translator: Nikos Ves <vesnikos at gmail.com>\n"
 "Language-Team: Greek <grass-translations at lists.osgeo.org>\n"
@@ -17,206 +17,206 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.5.4\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Εκκίνηση &GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr ""
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Διαγραφή"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Διαγραφή επιλεγμένης Τοποθεσίας"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "Μετεονομασ&ία"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr ""
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Διαγραφή"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Διαγραγή επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Εμφάνιση εγχειρίδιου διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Σφάλμα"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "Ο κωδικός EPSG %s δεν βρέθηκε"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Σφάλμα:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Εισαγωγή δεδομένων"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο μοντέλο;"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Η Τοποθεσία <%s> δημιουργήθηκε"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "Θέλετε να θέσετε τα προεπιλεγμένα όρια και ανάλυση της Τοποθεσίας;"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -224,12 +224,12 @@ msgid ""
 "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Μήνυμα"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -237,7 +237,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -245,7 +245,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -253,7 +253,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -261,14 +261,14 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -277,11 +277,11 @@ msgid ""
 "ALL MAPS included in this mapset will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Αδυναμία διαγραφής Τοποθεσίας"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -289,40 +289,40 @@ msgid ""
 "ALL MAPS included in this location will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Αδυναμία διαγραφής επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Επιλογή φακέλου δεδομένων GIS "
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -331,16 +331,16 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -352,11 +352,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -369,7 +369,7 @@ msgstr ""
 "αυτή μπορεί να διαφθείρει τα δεδομένά. Ελέγξτε ακόμια μια φορά της ενεργές "
 "διεργασίες για να είστε σίγουροι..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -377,19 +377,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "Άκυρο:"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -407,172 +407,172 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Εργαλειοθήκη Χάρτη"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 msgid "Display synchronization ON"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Αδυναμία ανάγνωσης της λίστας : %s"
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Το αρχείο υπάρχει."
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 msgid "Scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -581,604 +581,605 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Φόρτωση raster χάρτη"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Φόρτωση raster χάρτη"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Δημιουργία/τροποποίηση ομάδος..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Όνομα raster χάρτη:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Όνομα raster χάρτη:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Όνομα διανυσματικού χάρτη:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Χρώμα"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Εισαγωγή αρχείου ESRI e00 σε διανυσματικό χάρτη."
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Εισαγωγή αρχείου ESRI e00 σε διανυσματικό χάρτη."
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Εργαλειοθήκη Misc"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 msgid "Select raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 msgid "Name of top/left raster map:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 msgid "Name of bottom/right raster map:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Αλλαγή στην νέα Περιοχή;"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Απλή"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Κλεισιμο"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Χρώμα:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Μέγεθος:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Εργαλεία"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Πρόσθετο Εύρεσης"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Επιλογή EPGS κωδικού:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 msgid "Switch orientation"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Πήγαινε στο GCP Νο."
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Έγκυρα Όρια:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "Σφάλμα RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Επιλογή ομάδας:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Δημιουργία ομάδος αν δεν υπάρχει"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Προσθήκη διανύσματικού χάρτη στην ομάδα"
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Διαχείριση φωτοσταθερών σημείων"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "πηγή"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "στόχος"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1187,28 +1188,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1218,261 +1219,261 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Αποθήκευση φωτοσταθερών σημείων;"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "αρχικό Α"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "αρχικό Β"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "τελικό Α"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "τελικό Β"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Φωτοσταθερό Νου:"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Κλείσιμο διαλόγου"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "1ης τάξης"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "2ης Τάξης"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "3ης Τάξης"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Επιλογή μεθόδους παρεμβολής:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Εμφάνιση εγχειρίδιου διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Εγχειρίδιο διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1480,362 +1481,362 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Επιλογές ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Γενικά"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Πάχος γραμμής"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "μονάδες χάρτη"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Ψηφιοποίηση νέας γραμμής"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "ψηφιοποίηση"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Αποθήκευση αλλαγών"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Αποθήκευση αλλαγών κατά την έξοδο"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "μήκος"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "μικρότερο από"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "μεγαλύτερο από"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Επίπεδο"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Κατηγορία"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Αριθμός κατηγορίας"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "περιοχή"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "περίμετρος"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Επισήμανση"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Επισήμανση (διπλών)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Κόμβος"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Κατεύθυνση"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Σφάλμα ψηφιοποίησης"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1843,78 +1844,78 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Λίστα κατηγοριών - δεξί κλικ για διαγραφή"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Εισαγωγή νέας κατηγορίας"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Εφαρμογή μετατροπών"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Εφαρμογή αλλαγών και κλείσιμο διαλόγου"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1922,250 +1923,250 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Διαγραφή επιλεγμένου"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Διαγραφή όλων"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Επαναφόρτηση"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Βήμα"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Αριστερά: νέο σημείο"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Ψηφιοποίηση νέας γραμμής"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Προσθήκη νέας μεταβλητής στο μοντέλο"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Διαγραφή επιλεγμένων εγγραφών"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Αριστερά: Επιλογή"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Μετακίνηση κόμβου"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Έξοδος απο τον ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Έξοδος απο τον ψηφιοποιητή και αποθήκευση των αλλαγών"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Εγχειρίδιο διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Εμφάνιση εγχειρίδιου διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Αναίρεση"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Αναίρεση προηγούμενων μεταβολών"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Αντιγραφή κατηγοριών"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Ο διανυσματικός χάρτης δεν είναι 3D. Η ενέργεια ακυρώθηκε."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2174,804 +2175,1179 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Σφάλμα ψηφιοποίησης"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 "Παρακαλώ περιμένετε, άνοιγμα του διανυσματικού χάρτη <%s> προς επεξεργασία..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Εγχειρίδιο διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Αποθήκευση αλλαγών;"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "H eπεξεργασία του διανυσματικού χάρτη <%s> ολοκληρώθηκε με επιτυχία."
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Νέος διανυσματικός χαρτης"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 #, fuzzy
 msgid "Measuring distance"
 msgstr "Μέτρηση απόστασης"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 #, fuzzy
 msgid "Measuring distance:"
 msgstr "Μέτρηση απόστασης"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "Τμήμα"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "Συνολικη απόσταση"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "κατεύθυνση"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Προσθήκη λεζάντας"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Κλίμακα"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Βοράς"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Εργαλειοθήκη εργαλείων"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "Εργαλειοθήκη εργαλείων"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Εμφανιση εγχειριδιου"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Προσθήκη λεζάντας"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr " "
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Αποθήκευση Python script σε αρχείο"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Προσοχή"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Περιστροφή:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "Μοντέλο"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Αντικείμενα"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "Μεταβλητές"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Αντικατάσταση;"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:314
+msgid "GRASS locations in {}"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Μετονομασία"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Μετονομασία"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
-msgstr "Επανασχεδίαση μοντέλου..."
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Επικαιροποίησημοντέλου...."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο μοντέλο;"
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Επανασχεδίαση μοντέλου..."
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Κλείσιμο Graphical Manager"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
-msgid "No intermediate data to delete."
-msgstr "Δεν υπάρχουν ενδιάμεσα αρχεία προς διαγραφή"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "Αντιγραφή"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Θέλετε να διαγράψετε οριστικά τα αρχεία;%s"
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "Διαγραφή ενδιάμεσων τιμών;"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Εκτέλεση μοντέλου..."
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "Δημιουργεία νέα μοντέλου;"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "Διαγραφή όλων"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr "Επιλογή αρχείου μοντέλου"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Διαγραφή"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "Αρχείο Μοντέλου GRASS  (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:782
+msgid "g.remove completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Εμφάνηση γεωμετρίας"
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "Το αρχείο Μοντέλου <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση;"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "Το αρχείο <%s> αποθηκεύτηκε"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr "Επιλέξτε το αρχείο που θα αποθηκευτεί το μοντέλο"
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Αντιγραφή"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "Το μοντέλο είναι κενό. Τίποτα προς επικαιροποίηση."
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "aster"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Επικαιροποίησημοντέλου...."
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Εμφάνηση γεωμετρίας"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/tree.py:954
+msgid "&Switch mapset"
 msgstr ""
-"Το Μοντέλο είναι άκυρο.\n"
-"\n"
-"%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "Το Μοντέλο είναι έγκυρο."
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "Επιλογή φακέλου δεδομένων GIS "
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Επιλογή φακέλου δεδομένων GIS "
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
-msgid "Model exported to <%s>"
-msgstr "Το μονέλο εξάχθηκε στο <%s>"
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
+"Η τρέχουσα Τοποθεσία ειναι <%(loc)s>.\n"
+"Η τρέχουσα Συλλογή Χαρτών είναι η <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
-#, fuzzy
-msgid "Comment:"
-msgstr "Εντολές:"
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Add comment"
-msgstr "Προσθήκη στήλης"
+msgid "Data catalog"
+msgstr "Μήκος δεδομένων"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+msgid "Reload GRASS locations"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
-msgstr "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, fuzzy, python-format
-msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
-"Αποτυχία ανάγνωσης αρχείου μοντέλου <%s>.\n"
-" Άγνωστο αρχείο, αδυναμία ανάλυσης εγράφου XML."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
-msgid "Please wait, loading model..."
-msgstr "Παρακαλώ περιμένετε, φόρτωση μοντέλων..."
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Πρόσθετο Εύρεσης"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Όνομα εξαγώμενου χάρτη raster"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο μοντέλο;"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Αποθήκευση αλλαγών"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Ανάλυση"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+msgid "Failed to set default color table for edited raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Όνομα raster χάρτη:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Όνομα raster χάρτη:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Επιλεξτε διανυσματικό χάρτη"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Όνομα raster χάρτη:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Προσθήκη επιπέδου χάρτη Raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "ψηφιοποίηση"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Ψηφιοποίηση νέας γραμμής"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "ψηφιοποίηση"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "3D raster χάρτης"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Έξοδος απο τον ψηφιοποιητή"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Επιλεξτε διανυσματικό χάρτη"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Εμφάνιση όλων των τιμών"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Πλάτος: "
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "3D raster χάρτης"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "Μοντέλο"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Αντικείμενα"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "Μεταβλητές"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "Επανασχεδίαση μοντέλου..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο μοντέλο;"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Κλείσιμο Graphical Manager"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+msgid "No intermediate data to delete."
+msgstr "Δεν υπάρχουν ενδιάμεσα αρχεία προς διαγραφή"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Θέλετε να διαγράψετε οριστικά τα αρχεία;%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "Διαγραφή ενδιάμεσων τιμών;"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "Δημιουργεία νέα μοντέλου;"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr "Επιλογή αρχείου μοντέλου"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "Αρχείο Μοντέλου GRASS  (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "Το αρχείο Μοντέλου <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση;"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "Το αρχείο <%s> αποθηκεύτηκε"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr "Επιλέξτε το αρχείο που θα αποθηκευτεί το μοντέλο"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "Το μοντέλο είναι κενό. Τίποτα προς επικαιροποίηση."
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Επικαιροποίησημοντέλου...."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"Το Μοντέλο είναι άκυρο.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "Το Μοντέλο είναι έγκυρο."
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr "Το μονέλο εξάχθηκε στο <%s>"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Εντολές:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Προσθήκη στήλης"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr "wxGUI Graphical Modeler"
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, fuzzy, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+"Αποτυχία ανάγνωσης αρχείου μοντέλου <%s>.\n"
+" Άγνωστο αρχείο, αδυναμία ανάλυσης εγράφου XML."
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
+msgid "Please wait, loading model..."
+msgstr "Παρακαλώ περιμένετε, φόρτωση μοντέλων..."
+
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Αφαίρεση"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Απενεργοποίηση"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Ενεργοποίηση"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Διανυσματικές γραμμές"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Επιλογή Χρώματος"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Ιδιότητες"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Λίστα μεταβλητών - δεξί κλικ για διαγραφή"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Όνομα"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Τύπος δεδομένων"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Προκαθορισμένη τιμή"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Περιγραφή"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Προσθήκη νέας μεταβλητής"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "integer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "float"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "αρχείο"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Προσθήκη νέας μεταβλητής στο μοντέλο"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "loop"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Παράμετροι"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Εντολή"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Python script"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Εκτέλεση Python Script"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Αποθήκευση Python script σε αρχείο"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Αδυναμία εκτέλεσης Python Script. %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Επιλογή αρχείου για αποθήκευση"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Python script (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Αποθηκευση αρχείου"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Ανανέωση"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Απενεργοποιημένο"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Έγκυρο:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Άκυρο:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Εκτέλεση:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Πλάτος: "
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Ύψος:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Δεδομένα"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Τύπος"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "3D rasterQ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Διανυσματικό:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Πίνακας"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 #, fuzzy
 msgid "Loop"
 msgstr "Loop"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Εντολή"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Μεταδεδομένα"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Εντολές"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Όνομα"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Περιγραφή:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Συγγραφέας(-είς)"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "μοντέλο"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Το script δημιουργήθηκε απο το wxGUI Graphical Modeler."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "απροσδιόριστη μεταβλητή '%s'"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Εκτέλεση μοντέλου..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Το μοντέλο είναι κενό. Δεν υπάρχει τίποτα προς εκτέλεση."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -2982,94 +3358,94 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Εκτέλεση μοντέλου;"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Χάρτες raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "3D raster χάρτες"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "άγνωστο"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Παράμετροι μοντέλου"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Ιδιότητες Δεδομένου"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Όνομα αντικειμένου"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 #, fuzzy
 msgid "Add GRASS command to the model"
 msgstr "Προσθήκη νέου εγραλείου GRASS στο μοντέλο"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3080,32 +3456,32 @@ msgstr ""
 "\n"
 "Αδύνατον να προστεθεί η εντολή στο μοντέλο."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Ιδιότητες σχέσης"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "Από"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Σε"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Δεδομένα: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Εντολές:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Επιλογές"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3113,7 +3489,7 @@ msgstr ""
 "Η σχέση δεν ξεκιναει με δεδομένα.\n"
 "Αδύναμια προσθήκης εντολής."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3121,151 +3497,151 @@ msgstr ""
 "Η σχέση δεν δείχνει σε εντολή του GRASS.\n"
 "Αδύναμια προσθήκης εντολής."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Όροι"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Σειρά"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "If-else ιδιότητες"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 "Η μεταβλητή <%s> ήδη υπάρχει στο μοντέλο. Η προσθήκη μεταβλητής απέτυχε."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Διαγραφή μεταβλητών"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Όχι"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Ναί"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, fuzzy, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
@@ -3274,60 +3650,60 @@ msgstr ""
 "Οι χαρακτήρες στην θέση %s δεν υποστητίζονται απο την κωδκοποίηση ISO-8859-1 "
 "(Latin 1) η οποία απαιτείται απο μερικά εργαλεία "
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Δεν έχει δοθεί πρόθεμα."
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3335,1310 +3711,1295 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Δεν έχει δοθεί πρόθεμα."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "Εγχειρίδιο διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "εκατοστό"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Ιδιότητες σχέσης"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Μέγεθος γραμματοσειράς:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Επιλογή χρώματος:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Κέντρο:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "'Ορια"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "Χρώμα ορίων:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "Πλάτος ορίων (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Χάρτης raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "περιοχών"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Διαγραφή"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Μάσκα"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "επιλογή χρώματος:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "σύμβολο:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Επιλογή αρχείου"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "μεγεθος"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Διανυσματικός Χάρτης"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Θέση"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Εισαγωγή κειμένου:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Επιλέξτε ενα φάκελο :"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Επιλογή φακέλου για για τις εικόνες"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "διαφάνια"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "Διανυσματικές γραμμές"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Κλίμακα"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 msgid "Reload currently selected attribute data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Αριθμών φορτωμένων εγραφών: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Σύνδεση σε βάση δεδομένων"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Ερώτημα"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Εφαρμογή δήλωσης SQL και κλείσιμο του διαλόγου"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Κλείσιμο του διαλόγου"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Στήλες"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Τιμές"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Εμφάνιση όλων των τιμών"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Εμφάνιση δείγματος"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Πήγαινε στο"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Κλείσιμο του διαλόγου στην εφαρμογή"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Παράδειγμα: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Επαλήθευση"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 #, fuzzy
 msgid "Verify SQL statement"
 msgstr "Επαλήθευση SQL δήλωσης"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "Η δήλωση SQL δεν είναι έγκυρη"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4649,73 +5010,73 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "Η δήλωση SQL είναι έγκυρη"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Φόρτωση δεδομένων..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Γίνεται η προβολή μόνω 256 σειρών."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Όριο 100000 εγραφών."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Άγνωστη τιμη"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4724,188 +5085,188 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Υπολογισμός (μόνο αριθμικές στήλες)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Στατιστικά"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Προσθήκη στήλης"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Μέγεθος περιοχής"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Μήκος γραμμής"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Μήκος περιμέτρου μιας περιοχής"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Καμπυλότητα γραμμής"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Αζιμούθειο γραμμής"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Πίνακας"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr "(μονο για ανάγνωση)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "ερώτηση SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Απλή"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Εισαγωγή νέας εγραφής"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Διαγραφή επιλεγμένων εγγραφών"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Διαγραφή όλων των εγγραφών"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Επιλογή όλων"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Αποεπιλογή όλων"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Επισήμανση επιλεγμένων εγγραφών"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -4914,33 +5275,33 @@ msgstr ""
 "Αδυναμία εισαγωγής νέων εγγραφών.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Διαγραφή εγγραφών"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Τίποτα προς εξαγωγή/"
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Τίποτα προς διαγραφή"
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4948,7 +5309,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4957,63 +5318,63 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Πίνακας <%s> - δεξί-κλικ για την διαγραφή στηλης(-ών)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Στηλη"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Μήκος"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Μετονομασία στήλης"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5021,166 +5382,166 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Λίστα επιπέδων"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Όνομα στήλης"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Μήκος δεδομένων"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Οδηγός"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Βάση Δεδομένων"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Κλειδί"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Περιγραφή επιπέδου"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Στήλη κλειδίου"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Περιγραφή πίνακα"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Όνομα πίνακα"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "Δημιουργ&ία πίνακα"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "Δημιουργ&ία επιπέδου"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Αφαίρεση επιπέδου"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Επίπεδο προς αφαίρεση"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Μετατροπή επιπέδου"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Γενικές στατιστικές"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Αδυναμία δημιουργίας φακέλου ρυθμίσεων"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Αδυναμία δημιουργίας φακέλου ρυθμίσεων"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Γενικές στατιστικές"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5189,811 +5550,812 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Δημιουργία πίνακα;"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Άγνωστο"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2D προβολή"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3D προβολή"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 msgid "No animation name selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Κλείσιμο της επιφάνειας εργασίας"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Τίποτα προς εξαγωγή/"
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Φόρτωση δεδομένων..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Ο 3D raster χάρτης <%s> δεν βρέθηκε"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
 "Invalid file, unable to parse XML document."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Οι επιλογες της 3D προβολής αποθηκεύτηκαν στο αρχείο <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Απλή"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Ρυθμός καρέ (FPS) : "
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 #, fuzzy
 msgid "Time unit:"
 msgstr "μονάδες χάρτη"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Επιλογές δημιουργίας:"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Εισαγωγή νέας κατηγορίας"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 msgid "Edit animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Περίπλοκη"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Copyright"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Επιλογή αρχείου WTK "
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Θέση:"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Παράμετροι μοντέλου"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Επιφάνεια εργασίας"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Επιλέξτε ενα φάκελο :"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "τιμη:"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Λίστα επεκτάσεων"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Εξαγωγή"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 msgid "Add time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Προσθήκη επιπέδου κειμένου"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "επιλογές GUI"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Διαστασεις εικονας"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Επιλογή αρχείου"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Αποθήκευση σειράς εικόνων : "
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "ΝΔ"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Εξαγωγή"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Πρόθεμα αρχείου"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Εισαγωγή νέας κατηγορίας"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Φορμάτ αρχείου: "
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "Φάκελος"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Επιλέξτε έναν φάκελο για τις εικόνες"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Αρχείο EPSG:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Επιλογή αρχείου για αποθήκευση"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Αρχειο WKT: "
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "Αρχειο WKT: "
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Επιλογές δημιουργίας:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "Ο χάρτης <%s> δεν βρέθηκε."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 msgid "Export directory is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "%s αρχείο λείπει"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "3D raster χάρτες"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Νέος διανυσματικός χαρτης"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "3D raster χάρτες"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Βασικά διανυσματικά δεδομένα"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Τύπος δεδομένων"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Χρώμα φόντου : "
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Χρώμα φόντου : "
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Χρώμα φόντου : "
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Φορματ συντενταγμένων"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Άκυρο:"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 msgid "Change animation speed"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 #, fuzzy
 msgid "Play back"
 msgstr "Αναπαραγωγή"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Σταμάτημα"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Παύση"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Δεν έχει επιλεχθεί κανένας επίπεδο. Η διεργασία ακυρώθηκε."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6001,48 +6363,48 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Αντικατάσταση;"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 #, fuzzy
 msgid "Vector map with analysis result does not exist."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6050,574 +6412,575 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Αντικατάσταση;"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Ο διανυσματικός χάρτης είναι 3D"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Επίπεδα χαρτη"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Τύπος δεδομένων"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Αριστερά: νέο σημείο"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Στήλη κλειδιού:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Εργαλειοθήκη εργαλείων"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Εργαλειοθήκη εργαλείων"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Διανυσματικές γραμμές"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Έξοδος"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Παράμετροι"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Προσθήκη επιπέδοθυ διανύσματικού χάρτη"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Χρωματικοί πίνακες"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Φόρτωση δεδομένων..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Φόρτωση δεδομένων..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Ανάλυση"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Επιλογές"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "Εκτέλεση μοντέλου..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "στύλ:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Χρωματικοί πίνακες"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Χρώμα ορίων:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Χρώμα γραμμής"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Κοντινότερα σημεία"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Μέγεθος γραμματοσειράς:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Πάχος γραμμής"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Μέγεθος γραμμής (σε pixel)"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Νέος διανυσματικός χαρτης"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Αριστερά: νέο σημείο"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Διαγραφή επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Επιλογές διανύσματος"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Εμφανιση εγχειριδιου"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Κλίμακα χάρτη"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Πήγαινε στο"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Προβολή"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Χρησιμοποιήσε καθορισμένη προβολή"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "ΜΑΣΚΑ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Εμφάνηση γεωμετρίας"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Συντεταγμένες"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Όρια"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Υπολγ. Περιοχή"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "ΣΦΑΛΜΑ: Αδυναμία προσδιορισμού εκδοσης του GRASS. Πληροφορίες: %s "
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6626,11 +6989,11 @@ msgstr ""
 "Αδυναμία εισαγωγής νέων εγγραφών.\n"
 "%s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6640,361 +7003,387 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "ψηφιοποίηση"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Προσθήκη επιπέδου κειμένου"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr " "
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Υπολγ. Περιοχή"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr " "
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr " "
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Σφάλμα ψηφιοποίησης"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Επίπεδα χαρτη"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Αδυναμία δημιουργίας αρχείου '%s'\n"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr ""
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Επιλεξτε διανυσματικό χάρτη"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Επιλεξτε διανυσματικό χάρτη"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Κλίμακα"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "Εμφάνηση υπομνήματος"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Ανάλυση χάρτη"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Μέτρηση απόστασης"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Μέτρηση απόστασης"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Λόγος: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Έξοδος απο τον ψηφιοποιητή"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Δημιοιυργία RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Μετονομασία"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Προβολή"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr ""
 
@@ -7002,314 +7391,314 @@ msgstr ""
 msgid "Create new configuration file for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 msgid "Create new r.li configuration file?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 msgid "Name for new configuration file to create"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Προσθήκη επιπέδοθυ διανύσματικού χάρτη στην ενεργή προβολή"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Επίπεδα χαρτη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Επιλογές διανύσματος"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 msgid "Insert sampling frame parameter"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 msgid "Insert sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "μονάδες χάρτη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Επιλογή αρχείου"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Συνολικός αριθμός καρέ :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο μοντέλο;"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Χρώμα κλίμακας:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Εργαλειοθήκη εργαλείων"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 msgid "Draw sampling regions"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 msgid "Draw sample region "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Πλάτος: "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Όνομα raster χάρτη:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "θεματικοί χάρτες"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Συνολικός αριθμός καρέ :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "μονάδες χάρτη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "μονάδες χάρτη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 msgid "Number of sampling area to draw:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "μονάδες χάρτη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Χρώμα κλίμακας:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7317,179 +7706,192 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Χρώμα κλίμακας:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Περίληψη"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Διανυσματικές γραμμές"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Όνομα raster χάρτη:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Πλάτος: "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Μέγεθος γραμματοσειράς:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Συνολικός αριθμός καρέ :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 msgid "Number column strates:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
-msgid "Delete all text from the shell"
+#: ../gui/wxpython/lmgr/pyshell.py:54
+msgid "Delete all text from the shell"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Απλή"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Ο raster χάρτης <%s> δεν βρέθηκε"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Ο raster χάρτης <%s> προστέθηκε"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Ο διανυσματικός χάρτης <%s> προστέθηκε"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Εμφάνιση εγχειρίδιου διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Εργαλειοθήκη Επιφάνειας Εργασίας"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Εργαλειοθήκη εργαλείων"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Εργαλειοθήκη δυανυσμάτων"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Επίπεδα χαρτη"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Κονσόλα Εντολών"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-#, fuzzy
-msgid "Search modules"
-msgstr "Πρόσθετο Εύρεσης"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Τερματικό Python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7500,241 +7902,229 @@ msgstr ""
 "\n"
 "Θέλετε να γίνει αλλαγή στην νέα Τοποθεσία;"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "Αλλαγή στην νέα Περιοχή;"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Η τρέχουσα Τοποθεσία ειναι <%(loc)s>.\n"
-"Η τρέχουσα Συλλογή Χαρτών είναι η <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Επιλογή μοντέλων για επεξεργασία"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Θέλετε να αποθηκεύσετε της αλλαγές στην Επιφάνεια Εργασίας;"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 "Θέλετε να αποθηκεύσετε τις τρέχουσες επιλογες στο αρχείο της Επιφάνεια "
 "Εργασίας;"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Επιλέξτε ενα φάκελο :"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "Πληροφορίες Συστήματος"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Έκδωση GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Άγνωστη τιμη"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
 msgstr "Aναθεώρηση GRASS SVN "
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Πλατφόρμα"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
+#: ../gui/wxpython/lmgr/frame.py:1222
 #, fuzzy
-msgid "Build Platform"
+msgid "Build platform"
 msgstr "Πλατφόρμα"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Πλατφόρμα"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Επιλέξτε αρχείο Επιφάνειας εργασίας"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Παρακαλώ περιμένετε, φορτώνεται η Επιφάνεια Εργασίας..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Το αρχείο <%s> Επιφάνειας Εργασίας υπάρχει. Θέλετε να γίνει αντικατάσταση "
 "του αρχείο;"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Εισαγωγή νέου ονόματος:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7742,40 +8132,40 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr ""
 "Αδυναμία εισαγωγής νέων εγγραφών.\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr ""
 "Αδυναμία εισαγωγής νέων εγγραφών.\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "διαύγεια"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7783,55 +8173,53 @@ msgid ""
 "from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Έξοδος απο GRASS GUI"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "ΣΦΑΛΜΑ: Αδυναμία προσδιορισμού εκδοσης του GRASS. Πληροφορίες: %s "
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Εισαγωγή raster δεδομένων"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr ""
 
@@ -7845,12 +8233,14 @@ msgid "Set raster output format"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr ""
 
@@ -7872,7 +8262,7 @@ msgstr ""
 msgid "Add command layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Έξοδος"
@@ -7922,8 +8312,8 @@ msgid "Add rhumbline layer"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr ""
 
@@ -7946,290 +8336,282 @@ msgstr "Επικαιροποίησημοντέλου...."
 msgid "Background vector map"
 msgstr "Νέος διανυσματικός χαρτης"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Βασικά διανυσματικά δεδομένα"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Εξαγωγή"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Δημιοιυργία RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Υπολγ. Περιοχή"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Ιστογραμμα"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Γενικές στατιστικές"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Προφίλ"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "3D raster χάρτης"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Αντικατάσταση;"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Αδυναμία ανάγνωσης της λίστας : %s"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 "Αδύνατη η εμφάνιση ιστογράμματος raster χάρτη. Δεν έχει οριστεί χάρτης."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(Διπλό κλικ για να οριστούν οι ιδιότητες)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Παρακαλώ περιμένετε. γίνεται ενημέρωση ..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Προσθήκη επιπέδου χάρτη Raster (Ctrl + Shift + R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Προσθήκη επιπέδοθυ διανύσματικού χάρτη (Ctrl + Shift + V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Χαρτογραφική Σύνθεση"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "επιλογές GUI"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Εγχειρίδιο GRASS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8242,605 +8624,613 @@ msgstr ""
 "εγκατάσταση καθώς και του πηγαίου κώδικα, απευθυνθήτε στην ιστοσελίδα της "
 "Numpy (http://numpy.scipy.org)."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Προφίλ του"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Απόσταση (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "Αντικατάσταση;"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Αδυναμία ανοίγματος αρχείου <%s> προς ανάγνωση."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Δεν έχει δοθεί πρόθεμα."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Τίποτα προς διαγραφή"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Απαιτείται τουλαχιστον ένας raster χάρτης "
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Σειρά raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Όνομα raster χάρτη:"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "Αντιγραφ&ή"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Τίτλος προφίλ:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "ταμπέλα άξονα-Χ "
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "ταμπέλα άξονα-Υ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Μέγεθος ταμπλέλας (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Οικογένεια γραμματοσειράς:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Στύλ:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Οι επιλογές αποθηκεύτηκαν στο αρχείο '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Διαγραγή επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Χρώμα γραμμής"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Χ-Άξονας"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Υ-Άξονας"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Κλίμακα"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Λογαριθμική κλίμακα"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Εμφάνηση υπομνήματος"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
+#, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr ""
+msgstr "Άκυρο:"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Χρώμα κλίμακας:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
 msgstr "Επιλεξτε διανυσματικό χάρτη"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Σχεδίαση"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Άκυρο:"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Υπολγ. Περιοχή"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-#, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Άκυρο:"
+#: ../gui/wxpython/tplot/frame.py:724
+msgid "Seed point outside the current region"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Άκυρο:"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Άκυρο:"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Άκυρο:"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Βασικά διανυσματικά δεδομένα"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Αρχείο"
 
@@ -8848,8 +9238,8 @@ msgstr "&Αρχείο"
 msgid "Workspace"
 msgstr "Επιφάνεια εργασίας"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Νέο"
 
@@ -8857,7 +9247,7 @@ msgstr "Νέο"
 msgid "Create new workspace"
 msgstr "Δημιουργία νέας Επιφάνειας Εργασίας"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Αν&οιγμα"
 
@@ -8865,12 +9255,12 @@ msgstr "Αν&οιγμα"
 msgid "Load workspace from file"
 msgstr "Φόρτωση Επιφάνειας Εργασίας απο αρχείο"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Αποθήκευση"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Αποθήκευση ως"
 
@@ -8891,7 +9281,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr ""
 
@@ -8920,7 +9310,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
@@ -9575,23 +9965,23 @@ msgstr "Λίστα επιπέδων"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -9629,15 +10019,15 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr ""
 
@@ -9649,7 +10039,7 @@ msgstr ""
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Κλεισιμο"
@@ -9659,8 +10049,8 @@ msgstr "Κλεισιμο"
 msgid "Quit wxGUI session."
 msgstr "Έξοδος απο GRASS GUI"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Έξοδος απο GRASS GUI"
@@ -9669,7 +10059,7 @@ msgstr "Έξοδος απο GRASS GUI"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr ""
 
@@ -9834,7 +10224,7 @@ msgstr "Λίστα επεκτάσεων"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr ""
 
@@ -10845,7 +11235,7 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Επίπεδο"
 
@@ -11091,8 +11481,8 @@ msgid "Develop vector map"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr ""
 
@@ -11946,12 +12336,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -12256,7 +12646,7 @@ msgstr "3D raster"
 #: ../gui/wxpython/menustrings.py:827 ../gui/wxpython/menustrings.py:1734
 #, fuzzy
 msgid "Develop 3D raster map"
-msgstr "3D raster χάρτης"
+msgstr "3D raster"
 
 #: ../gui/wxpython/menustrings.py:828 ../gui/wxpython/menustrings.py:1735
 msgid "Manage 3D NULL values"
@@ -13001,25 +13391,30 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
+#, fuzzy
 msgid "Temporal plot tool"
-msgstr ""
+msgstr "Εργαλειοθήκη Δεδομένων"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Εμφάνιση όλων των τιμών"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr ""
 
@@ -13044,7 +13439,7 @@ msgid "Prints system information"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Σχετικα με το GRASS GIS"
 
@@ -13058,278 +13453,286 @@ msgstr "Βασικά διανυσματικά δεδομένα"
 msgid "Attribute table manager"
 msgstr "Εφαρμογή δήλωσης SQL και κλείσιμο του διαλόγου"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Προσθήκη όρου (if/else) στο μοντέλο"
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Προσθήκη όρου (if/else) στο μοντέλο"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Σχετικά για τον Graphical Modeler"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "H εκτέλεση απέτυχε:"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Εξαγωγή"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Εξαγωγή"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Χαρτογραφική Σύνθεση"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Φόρτωση raster χάρτη"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "Προσθήκη επιπέδοθυ διανύσματικού χάρτη"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Προσθήκη λεζάντας"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Χαρτογραφική Σύνθεση"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Χαρτογραφική Σύνθεση"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Τερματισμός εκτελούμενης εντολης"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Λογαριθμική κλίμακα"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Αποθήκευση σρχείου ως..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Αρχεία κειμένου"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Αρχεία"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13337,12 +13740,12 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13350,295 +13753,327 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Οι επιλογές αποθηκεύτηκαν στο αρχείο '%s'."
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Κατηγορία"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Επιλοφή γραμματοσηράς"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Όνομα raster χάρτη:"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Ο διανυσματικός χάρτης δεν είναι 3D. Η ενέργεια ακυρώθηκε."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Διαγραφή επιλεγμένου"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Ο διανυσματικός χάρτης <%s> προστέθηκε"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Αδυναμία διαγραφής διανυσματικού χάρτη"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Επιλογές Χρήστη"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Επαναφορά στην αρχική προβολή"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Η στήλη κλειδιού δενμπορεί να είναι άδεια."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Επιλογές GUI"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 #, fuzzy
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Ερώτηση κατά την εξοδο του wxGIU ή στο κλείσιμο μιας οθόνης"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Πρόσθετο Εύρεσης"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Εμφάνηση"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Επιλογή γλώσσας (απαιτείται αποθήκευση και επανεκίνηση του GRASS)"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Ενέργεια ροδέλας ποντικίου:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "H eπεξεργασία του διανυσματικού χάρτη <%s> ολοκληρώθηκε με επιτυχία."
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Προκαθορισμένος χρωματικός πίνακας"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Διαφάνια"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Μέγεθος γραμμής (σε pixel)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Επισήμανση επιλεγμένων εγγραφών"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Δημιουργία πίνακα"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Στήλη κλειδιού:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -13650,20 +14085,20 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Κωδικός EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Proj.4 ορισμός (απαιτείται)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "Αρχείο EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -13671,61 +14106,72 @@ msgstr ""
 "Φόρτωση κωδικών EPSG (αναμείνατε), εισάγετε κωδικό EPSG ή απευθείας ορισμό "
 "Proj.4 "
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "Φ&όρτωση κωδικών EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Φορματ συντενταγμένων"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Προβολές LL"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Ακρίβεια:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Αδυναμία ανάγνωσης των EPGS κωδικών: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Αδυναμία ανάγνωσης κωδικών EPSG : %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Ο κωδικός EPSG %s δεν βρέθηκε"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Επαναφορά στην αρχική θέση"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Επιλογή γραμματοσειράς:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Κωδικοποίηση χαρακτήρων:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Παράδειγμα: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -13734,260 +14180,348 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Τιμη;"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "%Εισαγωγή επιλεγμένων επιπέδων."
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Αντιγραφή"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Διανυσματικές γραμμές"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Τεστ κανονικότητας"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Καμία Εύρεση"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Προφίλ"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+msgid "Load:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Αποθηκευση αρχείου"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Εισάγετε παραμέτρους για '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Εκτέλεση της εντολής (Ctrl +R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Εργαλειοθήκη Δεδομένων"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Εισάγετε παραμέτρους για '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Κλείσιμο αυτού του παραθύρου δίχως να εκτελεστεί η εντολή (Ctrl +Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Εκτέλεση της εντολής (Ctrl +R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Απαιτούμενο"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Προερετικό"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[πολλαπλό]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "Εγκυρα όριο"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Επιλογή Χρώματος"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο διανυσματικό αρχείο <%s>;"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Αποθήκευση ως"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Φάκελος"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "ID επιπέδου"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Όνομα επιπέδου"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Προβολή"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Εγχειρίδιο"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -13995,45 +14529,45 @@ msgid ""
 "Reason: %s"
 msgstr "Αδυναμία ανοίγματος αρχείου <%s> προς ανάγνωση."
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Διαγραφή επιλεγμένου"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr ""
 
@@ -14042,553 +14576,440 @@ msgstr ""
 msgid "Location or mapset is not defined."
 msgstr "Ο διανυσματικός χάρτης είναι 3D"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Όνομα διανυσματικού χάρτη:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Όνομα διανυσματικού χάρτη:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Λίστα χαρτών:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "3D raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Τύπος χάρτη:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Συλλογή χαρτών:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Αντιστροφή επιλογής"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Πολλαπλή εισαγωγή"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Λίστα επιπέδων"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Λίστα επιπέδων"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "Λίστα απο %s επίπεδα"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "ID επιπέδου"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Όνομα επιπέδου"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Προβολή"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Επιλογές"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Εισαγωγή"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "%Εισαγωγή επιλεγμένων επιπέδων."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Προσθήκη επιπέδοθυ διανύσματικού χάρτη"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "Δεν έχει επιλεχθεί κανένας επίπεδο. Η διεργασία ακυρώθηκε."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Διαγραφή επιλεγμένου"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Εισαγωγή DXF επιπέδου"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Επιλογή αρχείου DXF προς εξαγωγή"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Προσθήκη επιπέδου χάρτη Raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "αδιαφάνεια"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Διαστασεις εικονας"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Σύμβολα"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Φάκελος συμβόλων"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Όνομα συμβόλων"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Περί"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Περιστροφή:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Συγγραφείς"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Συντελεστές"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Μεταφραστές"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Επίσημη σελίδα GRASS:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "SVN Έκδοση "
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Γλώσσα"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "%s αρχείο λείπει"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Σφάλμα κατα την ανάγνωση του αρχείου '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Γραμμές:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Χώρα"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "Eπ&όμενο"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "Προηγο&ύμενο"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Εργαλειοθήκη Χάρτη"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Επίπεδο"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "%Εισαγωγή επιλεγμένων επιπέδων."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "ID επιπέδου"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "%Εισαγωγή επιλεγμένων επιπέδων."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "If-else ιδιότητες"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "διαύγεια"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr ""
 
@@ -14687,1266 +15108,1434 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr "Δημιουργεία ιστογράματος με το d.histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 msgid "Select graphics tool"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Τύπος"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr ""
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Αρχείο"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Πρωτόκολλο"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Όλα τα αρχεία"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Όλα τα αρχεία"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Όλα τα αρχεία"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Όλα τα αρχεία"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Όλα τα αρχεία"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Αρχείο:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Επιλογή αρχείου προς εισαγωγή"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Επιλογή Αρχείου"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 msgid "simple features"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Επιλογές δημιουργίας:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Φορμά:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Πρωτόκολλο:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Εγχειρίδιο διανυσματικού ψηφιοποιητή"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Δεν έχει επιλεχθεί κανένας επίπεδο. Η διεργασία ακυρώθηκε."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Ο φάκελος %s δεν υπάρχει,"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Ο διανυσματικός χάρτης δεν είναι 3D. Η ενέργεια ακυρώθηκε."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Εργαλειοθήκη Δεδομένων"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Εισαγωγή raster δεδομένων"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Συλλογή χαρτών:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Επίπεδα χαρτη"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Παράδειγμα: %s"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Απαιτούμενο"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Λίστα επιπέδων"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Επιλογή προβολής"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Κωδικός Προβολής:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Γραμμική συσχέτιση"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Επιλογή μεθόδους παρεμβολής:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Εισάγετε παραμέτρους για '"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Αδυναμία ανάγνωσης αρχείου ρυθμίσεων:  <%s>\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Φορματ συντενταγμένων"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Το επιλεγμένο επίπεδο χάρτη δεν είναι διανυσματικό."
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Επιλογή προβολής"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Επίπεδο"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "στύλ:"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
+msgid "Add default"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 msgid "Show advanced connection settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 msgid "Hide advanced connection settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Όνομα επιπέδου"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Μετονομασία"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "Το μονέλο εξάχθηκε στο <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Αδυναμία ανάγνωσης της λίστας : %s"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "If-else ιδιότητες"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Όνομα εξαγώμενου χάρτη raster"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Εξαγωγή"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Επιλέξτε ενα φάκελο :"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr " "
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Αντικατάσταση;"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Επιλέξτε ενα φάκελο :"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Αποθηκευση αρχείου"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "%d χάρτες διαγράφηκαν απο τη ενεργή Συλογή Χαρτών"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Το αρχείο υπάρχει."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Φόρτωση δεδομένων..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Αδυναμία διαγραφής Τοποθεσίας"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "Επιλογή όλων"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr "Επιλογή αρχείου για φόρτωση χρωμάτων"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Επιλογή αρχείου για αποθήκευση χρωματισμών"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 msgid "&Set"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Εξαγωγή χρωματικών κανόνων"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Πάρα πολλές εγγραφές"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "Δεν έχει οριστεί χρωματική στήλη. Η ενέργεια απέτυχε."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Δημιουργία απο τυχαία σημεία"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
-#, python-brace-format
-msgid "'{cmd}' copied to clipboard"
+#: ../gui/wxpython/modules/mcalc_builder.py:757
+#, python-brace-format
+msgid "'{cmd}' copied to clipboard"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:41
+msgid "Fetch & install extension from GRASS Addons"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:61
+#, fuzzy
+msgid "List of extensions - double-click to install"
+msgstr "Λίστα κατηγοριών - δεξί κλικ για διαγραφή"
+
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Επιλογές"
+
+#: ../gui/wxpython/modules/extensions.py:113
+msgid "&Fetch"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:114
+msgid "Fetch list of available modules from GRASS Addons SVN repository"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:118
+msgid "&Install"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:120
+msgid "Install selected add-ons GRASS module"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:123
+msgid "Show g.extension manual page"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:187
+msgid "Extension not defined"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:211
+msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Λίστα επεκτάσεων"
+
+#: ../gui/wxpython/modules/extensions.py:238
+msgid "Install"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:243
+#, fuzzy
+msgid "Show manual page"
+msgstr "Εμφανιση εγχειριδιου"
+
+#: ../gui/wxpython/modules/extensions.py:343
+#, fuzzy, python-format
+msgid "Unable to load extensions. %s"
+msgstr "Λίστα επεκτάσεων"
+
+#: ../gui/wxpython/modules/extensions.py:389
+#, fuzzy
+msgid "Manage installed GRASS Addons extensions"
+msgstr "Λίστα επεκτάσεων"
+
+#: ../gui/wxpython/modules/extensions.py:405
+msgid "List of installed extensions"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:413
+msgid "Uninstall"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:415
+#, fuzzy
+msgid "Uninstall selected Addons extensions"
+msgstr "Λίστα επεκτάσεων"
+
+#: ../gui/wxpython/modules/extensions.py:419
+msgid "Reinstall"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:421
+#, fuzzy
+msgid "Reinstall selected Addons extensions"
+msgstr "Λίστα επεκτάσεων"
+
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Δεν έχει επιλεχθεί κανένας επίπεδο. Η διεργασία ακυρώθηκε."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+msgid "Remove extension"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:526
+msgid "Extension"
+msgstr "Επέκταση"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Πολλαπλή εισαγωγή"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Λίστα επιπέδων"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Λίστα επιπέδων"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "Λίστα απο %s επίπεδα"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:40
-msgid "Fetch & install extension from GRASS Addons"
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Εισαγωγή"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "%Εισαγωγή επιλεγμένων επιπέδων."
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Αποθήκη"
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "επιλογές GUI"
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
 #, fuzzy
-msgid "List of extensions - double-click to install"
-msgstr "Λίστα κατηγοριών - δεξί κλικ για διαγραφή"
+msgid "Add linked layers into layer tree"
+msgstr "Προσθήκη επιπέδοθυ διανύσματικού χάρτη"
 
-#: ../gui/wxpython/modules/extensions.py:95
-msgid "&Fetch"
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
-msgid "Fetch list of available modules from GRASS Addons SVN repository"
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
-msgid "&Install"
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
-msgid "Install selected add-ons GRASS module"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "Δεν έχει επιλεχθεί κανένας επίπεδο. Η διεργασία ακυρώθηκε."
 
-#: ../gui/wxpython/modules/extensions.py:104
-msgid "Show g.extension manual page"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
 
-#: ../gui/wxpython/modules/extensions.py:168
-msgid "Extension not defined"
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
-msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
-msgid "Install"
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
-#, fuzzy
-msgid "Show manual page"
-msgstr "Εμφανιση εγχειριδιου"
-
-#: ../gui/wxpython/modules/extensions.py:315
-#, fuzzy, python-format
-msgid "Unable to load extensions. %s"
-msgstr "Λίστα επεκτάσεων"
-
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/import_export.py:707
 #, fuzzy
-msgid "Manage installed GRASS Addons extensions"
-msgstr "Λίστα επεκτάσεων"
+msgid "No data source selected."
+msgstr "Διαγραφή επιλεγμένου"
 
-#: ../gui/wxpython/modules/extensions.py:365
-msgid "List of installed extensions"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Εισαγωγή DXF επιπέδου"
 
-#: ../gui/wxpython/modules/extensions.py:370
-msgid "Uninstall"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Επιλογή αρχείου DXF προς εξαγωγή"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/import_export.py:758
 #, fuzzy
-msgid "Uninstall selected Addons extensions"
-msgstr "Λίστα επεκτάσεων"
-
-#: ../gui/wxpython/modules/extensions.py:372
-msgid "Reinstall"
-msgstr ""
+msgid "No layers selected."
+msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/import_export.py:836
 #, fuzzy
-msgid "Reinstall selected Addons extensions"
-msgstr "Λίστα επεκτάσεων"
+msgid "Reprojection"
+msgstr "Προβολή"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Δεν έχει επιλεχθεί κανένας επίπεδο. Η διεργασία ακυρώθηκε."
+msgid "Name for output GRASS map"
+msgstr "Όνομα εξαγώμενου χάρτη raster"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
-msgid "Remove extension"
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Επίπεδο προς αφαίρεση"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
-msgid "Extension"
-msgstr "Επέκταση"
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "%Εισαγωγή επιλεγμένων επιπέδων."
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Όνομα εξαγώμενου χάρτη raster"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Έτοιμο."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Εργασίες σε εξέλιξη! Δεν παρέχεται καμία λειτουργικοτητα."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "κεντροειδές"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Όρια"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -15954,20 +16543,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Αδυναμία ανοίγματος αρχείου <%s> προς ανάγνωση."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -15976,185 +16565,180 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "Γραμμή %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Λεπτομέριες %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Προσθήκη επιπέδου χάρτη Raster"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Προσθήκη επιπέδου χάρτη Raster"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Φόρτωση δεδομένων..."
+
+#: ../gui/wxpython/core/render.py:643
+msgid "Rendering & "
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Αδυναμία δημιουργίας αρχείου '%s'\n"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Λεπτομέριες:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Δεν ήταν δυνατή η δημιουργεία προφίλ για τον raster χάρτη."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Φόρτωση δεδομένων..."
-
-#: ../gui/wxpython/core/render.py:1386
-msgid "Rendering & "
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr ""
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Άγνωστη τιμη"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Αδυναμία δημιουργίας φακέλου ρυθμίσεων"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Εργαλεία"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
-msgstr ""
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
+msgstr "Αδύνατον να ανοιχτεί το αρχείο '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "ΣΦΑΛΜΑ: Αδυναμία προσδιορισμού εκδοσης του GRASS. Πληροφορίες: %s "
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Αδύνατον να ανοιχτεί το αρχείο '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Διπλό κλειδί: %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Αδυναμία δημιουργίας αρχείου '%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16163,172 +16747,177 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Ο χάρτης <%s> δεν βρέθηκε."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d δεύτερα"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d λεπ %(sec)d δευτ"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Λόγος"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "H εκτέλεση απέτυχε:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Σφάλμα:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Αδυναμία εκτέλεσης εντολής: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 msgid "Data point"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Συμπτυξη όλων εκτός του PERMANENT και του τρέχοντος"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Συμπτυξη όλων εκτός του PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Συμπτυξη όλων εκτός του τρέχοντος"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Συμπτυξη όλων"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Επέκταση όλων"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 msgid "List left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Τίποτα"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "Κουτί"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "σφαίρα"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "κύβος"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "διαμάντι"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "aster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "Ιστόγραμμα"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Αδυναμία ανάγνωσης αρχείου ρυθμίσεων:  <%s>\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -16336,11 +16925,11 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "Αδυναμία δημιουργίας φακέλου ρυθμίσεων"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -16348,270 +16937,300 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Η Τοποθεσία <%s> δημιουργήθηκε"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Απλή"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Περίπλοκη"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Επιλογή προβολής"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Κωδικός"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Κωδικός Προβολής:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Ευρεση στην περιγραφή;"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Αδυναμία ανάγνωσης της λίστας : %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Επιλογή παραμέτρων προβολής:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Επιλογή Datum η ελλειψοειδούς (επόμενη σελίδα)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datums με συσχετικά ελλειψοειδεί"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Ελλειψοειδεί μόν"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "ελλειψοειδή"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Κωδικός Datum: "
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Αρχειο WKT: "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Επιλογή EPGS κωδικού:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Επιλογή αρχείου κοδικών EPSG "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Επιλογή EPGS κωδικού:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Κωδικός EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Επιλογή αρχείου κοδικών EPSG "
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Αδυναμία ανάγνωσης των EPGS κωδικών: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Προβολή"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -16619,247 +17238,252 @@ msgid ""
 "Details: %(err)s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Δεν υπάρχει ο κωδικός EPSG."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Δεν υπάρχει ο κωδικός EPSG."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Γραμμές: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Στήλες: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Κελιά: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Βάθος: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Βοράς"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Δύση"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Ανατολή"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Νότος"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Ανάλυση Β-Ν"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Ανάλυση Α-Δ"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Φόρτωση raster χάρτη"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Φόρτωση 3D raster χάρτη"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "απέτυχε"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3D raster χάρτη"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "επιτυχής απεφόρτωση"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Η φορτωση του διανυσματικού χάρτη <%(name)s> (%(type)s) απέτυχε."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 "Δεν ήταν δυνατή η φόρτωση του  του διανυσματικού χάρτη <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Ο διανυσματικός χάρτης <%(name)s> (%(type)s) απεφορτώθηκε επιτυχώς."
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -16867,756 +17491,756 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "σταθερή#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Προβολή"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Ανάλυση"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "κλίση:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 #, fuzzy
 msgid "Z-exag:"
 msgstr "Ζ-"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "εδώ"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "κέντρο"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Επαναφορά της προβολής στην αρχική προκαθορισμένη θέση "
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "κατακόρυφο"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "επαναφορά"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Επαναφορά στην αρχική προβολή"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Εγραφή"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Αναπαραγωγή"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Συνολικός αριθμός καρέ :"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "Ρυθμός καρέ (FPS) : "
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "Τα καρέ εγράφονται με την δεδομένη συχνότητα (FPS)."
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Αποθήκευση σειράς εικόνων : "
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Επιλέξτε έναν φάκελο για τις εικόνες"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 "Τα παραγωμενα αρχεία θα μοιάζουν κάπως έτσι : prefix_1.ppm, prefix_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Επιφάνια"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Συνεχόμενη επιφάνεια"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Δυάνυσματικού"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Φωτισμός"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Σκίαση :"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "επίπεδο"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "ανάλυση: "
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "στύλ:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Διαυγεια"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "χάρτης"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "σταθερά"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 #, fuzzy
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Αλλαγή των x,y και z συντεταγμένων της επιφάνειας"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Επαναφορά"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Επαναφορά στην αρχική θέση"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "εκκαθάριση"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "Μίξη"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "Οριζόντεο Χ:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Οριζόντιο Υ:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Τιμη;"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Διαύγεια"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Διανυσματικές γραμμές"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Γραμμή:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "πλάτος:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "χρώμα:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Ύψος πάνω απο την επιφάνεια;"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Προβολή διανυσματικών σημείων"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Διανυσματικά σημεία"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Εικονίδιο:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Ανάλυση:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "Β && Δ"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "Β && Α"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "Ν && Δ"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "Ν && Α"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Μήκος κλίμακας (σε μονάδες χάρτη)"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Χρώμα κλίμακας:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "Δεν έχει δοθεί πρόθεμα."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "Ο φάκελος %s δεν υπάρχει,"
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "Δ"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "Β"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "Ν"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "Α"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "ΒΔ"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "ΒΑ"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "ΝΑ"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "ΝΔ"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Επίπεδο"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "ανένα"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Ο διανυσματικός χάρτης είναι 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Ο διανυσματικός χάρτης είναι 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "Συνεχόμενη επιφάνεια"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "όριο:"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Βόριο όριο:"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Νότιο όριο:"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Δυτικό όριο:"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Ανατολικό όριο:"
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Υψόμετρο(Ζ)"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Ο 3D raster χάρτης <%s> δεν βρέθηκε"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Επιλογές 3D απεικόνισης"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 "Επαναφέρει τις επιλογές στις προεπιλεγμένες, δεν εφαρμόζει τις όποιες "
 "αλλαγές."
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "τιμη:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "βήμα:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Θέση:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Περιστροφή:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Φωτισμός"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z: "
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Οι επιλογες της 3D προβολής αποθηκεύτηκαν στο αρχείο <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Διαγραφή επιλεγμένου"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -17626,7 +18250,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -17638,23 +18262,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -17662,7 +18286,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -17673,31 +18297,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -17709,64 +18333,64 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "Η φορτωση του διανυσματικού χάρτη <%(name)s> (%(type)s) απέτυχε."
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 msgid "scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Μετονομασία στήλης"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Επιλογή Χρώματος"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Εισαγωγή νέας κατηγορίας"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Εξαγωγή χρωματικών κανόνων"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -17776,203 +18400,214 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Αριστερά: νέο σημείο"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Προσθήκη επιπέδου χάρτη Raster"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Το αρχείο <%s> υπάρχει. Θέλετε να γίνει αντικατάσταση του αρχείου;"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Σειρά raster"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Επιλογή μεθόδους παρεμβολής:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Κοντινότερα σημεία"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Χρώμα κλίμακας:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Επιλογή ομάδας:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Επιλογή γραμματοσειράς:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Ρυθμίσεις raster"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Αριστερά: νέο σημείο"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Εισαγωγή νέου κόμβου"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Διαγραφή επιλεγμένης Τοποθεσίας"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Μετακίνηση κόμβου"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Μετακίνηση κόμβου"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Απομάκρυνση κόμβου"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Απομάκρυνση κόμβου"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Προσθήκη επιπέδου"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 
+#~ msgid "Map layers"
+#~ msgstr "Επίπεδα χαρτη"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "Πρόσθετο Εύρεσης"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Θέλετε να αποθηκευσετε τις αλλαγές στο μοντέλο;"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "Το αρχείο υπάρχει."
@@ -17993,6 +18628,26 @@ msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 #~ msgstr "Έξοδος απο το GUI"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Άκυρο:"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Εγχειρίδιο διανυσματικού ψηφιοποιητή"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Επικαιροποίησημοντέλου...."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Μετονομασία"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Διανυσματικές γραμμές"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Λίστα επιπέδων"
 
@@ -18004,22 +18659,27 @@ msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 #~ msgid "Raster3D calculations"
 #~ msgstr "Raster map calculator"
 
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Προσθήκη όρου (if/else) στο μοντέλο"
-
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr " "
+#~ msgid "Repository"
+#~ msgstr "Αποθήκη"
 
 #~ msgid "GEOnet import"
 #~ msgstr "Εισαγωγή GEOnet"
 
 #, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Εφαρμογή δήλωσης SQL και κλείσιμο του διαλόγου"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Εισαγωγή raster δεδομένων"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr " "
+
+#, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "Ο διανυσματικός χάρτης <%(name)s> (%(type)s) απεφορτώθηκε επιτυχώς."
 
-#~ msgid "Volume"
-#~ msgstr "Όγκος"
-
 #, fuzzy
 #~ msgid ""
 #~ "Welcome to GRASS GIS %s%s\n"
@@ -18041,6 +18701,5 @@ msgstr "Μετονομασία επιλεγμένης Τοποθεσίας"
 #~ msgid "3D Mask"
 #~ msgstr "3D μάσκα"
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Εφαρμογή δήλωσης SQL και κλείσιμο του διαλόγου"
+#~ msgid "Volume"
+#~ msgstr "Όγκος"
diff --git a/locale/po/grasswxpy_es.po b/locale/po/grasswxpy_es.po
index 9c5ba51..f185921 100644
--- a/locale/po/grasswxpy_es.po
+++ b/locale/po/grasswxpy_es.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_es\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-07-13 18:51-0500\n"
 "Last-Translator: \n"
 "Language-Team: Spanish <grass-translations at lists.osgeo.org>\n"
@@ -23,173 +23,173 @@ msgstr ""
 "X-Generator: Lokalize 1.5\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Seleccionar directorio de base de datos de GRASS GIS"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Seleccionar Localización GRASS"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Seleccionar Directorio de mapas de GRASS"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "Directorio de bases de datos de GRASS GIS que contiene Localizaciones."
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid "All data in one Location is in the same  coordinate reference system (projection). One Location can be one project. Location contains Mapsets."
 msgstr "Todos los datos de una misma Localización están en el mismo sistema de coordenadas de referencia. Una Locación puede ser un proyecto. La localización contiene Directorios de mapas."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid "Mapset contains GIS data related to one project, task within one project, subregion or user."
 msgstr "El Directorio de mapas contiene los datos SIG relacionados con un proyecto, tarea dentro de un proyecto, subregión o usuario."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Iniciar sesión de &GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Explorar"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "&Nuevo"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "Crear un nuevo Directorio de mapas en la Localización seleccionada"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "N&uevo"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid "Create a new location using location wizard. After location is created successfully, GRASS session is started."
 msgstr "Crear una nueva localización usando el asistente de localizaciones. Luego de que la localización haya sido creada de manera exitosa, se iniciará una sesión de GRASS."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Ren&ombrar"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Renombrar Localización seleccionada"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "Bo&rrar"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Borrar Localización seleccionada"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Renombrar"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Renombrar el Directorio de mapas"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "&Borrar"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Borrar Directorio de mapas"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS %s startup%s"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Ingrese sesión de GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Error"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "No se puede establecer la base de datos de GRASS. Revise la configuración local."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "ERROR: No se encuentra la Localización <%s>\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "ERROR: Directorio de mapas <%s> no encontrado\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Línea no válida en archivo GISRC (%s):%s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Error: {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr "¿Quiere importar <%(name)s> a la Localización recientemente creada?"
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "¿Importar datos?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "¿Quiere crear un nuevo Directorio de mapas?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Crear nuevo Directorio de mapas"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "¡Localización <%s> creada!"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "¿Quiere establecer la extensión y resolución de la región predeterminada ahora?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
@@ -198,12 +198,12 @@ msgstr ""
 "No ha sido posible realizar la importación de <%(name)s> .\n"
 "Razón: %(msg)s"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid "Data file <%(name)s> imported successfully. The location's default region was set from this imported map."
 msgstr "Archivo de datos <%(name)s> importado exitosamente. La región predeterminada de la Localización fue definida a partir del mapa importado."
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -213,7 +213,7 @@ msgstr ""
 "\n"
 "Este Directorio de mapas no puede ser renombrado."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -224,12 +224,12 @@ msgstr ""
 "\n"
 "Introduzca un nombre nuevo:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Mensaje"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -240,7 +240,7 @@ msgstr ""
 "\n"
 "El Directorio de mapas <%s> ya existe en la Localización."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -251,7 +251,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -262,7 +262,7 @@ msgstr ""
 "\n"
 "La Localización <%s> ya existe in la base de datos de GRASS."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -273,7 +273,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -283,7 +283,7 @@ msgstr ""
 "\n"
 "Este Directorio de mapas no puede ser eliminado."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <%(location)s>?\n"
@@ -294,11 +294,11 @@ msgstr ""
 "\n"
 "¡TODOS LOS MAPAS incluidos en este Directorio de mapas serán ELIMINADOS DE FORMA PERMENENTE!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "No es posible eliminar el Directorio de mapas"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -309,38 +309,38 @@ msgstr ""
 "\n"
 "¡TODOS LOS MAPAS incluidos en esta Localización serán SUPRIMIDOS DE MANERA PERMANENTE!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "No se puede eliminar la Localización"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "Error de Unicode detectado. Revise su configuración local. Detalles: {}"
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid "No GRASS Location found in '%s'. Create a new Location or choose different GRASS database directory."
 msgstr "No se encontró ninguna Localización GRASS en '%s'. Crear nueva Localización o escoger un directorio diferente de bases de datos GRASS."
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Ruta '%s' no existe."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Seleccionar Dicrectorio de Datos SIG"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Escriba el nombre para el nuevo Directorio de mapas:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "El Directo de mapas <%s> ya existe."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please consider to use another name for your mapset.\n"
@@ -351,16 +351,16 @@ msgstr ""
 "\n"
 "¿Está realmente seguro que quiere crear este Directorio de mapas?"
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr "Nombre de Directorio de mapas reservado"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "No ha sido posible crear el nuevo Directorio de mapas: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -377,11 +377,11 @@ msgstr ""
 "\n"
 "¿Quiere remover el .gislock (necesita permiso para esta operación) y continuar?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "Archivo de bloqueo (lock) encontrado"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -391,7 +391,7 @@ msgstr ""
 "\n"
 "Al hacer esto puede corromper tus dato si está corriendo otra sesión de GRASS. Revisa de nuevo en el administrador de tareas solo para estar seguro..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -402,16 +402,16 @@ msgstr ""
 "\n"
 "Detalles: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid "Name <%(name)s> is not a valid name for location or mapset. Please use only ASCII characters excluding %(chars)s and space."
 msgstr "Nombre <%(name)s> no es válido para Localización o Directorio de mapas. Por favor use solo caracteres ASCII excluyendo %(chars)s y espacio."
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Nombre no válido"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid "GRASS needs a directory (GRASS database) in which to store its data. Create one now if you have not already done so. A popular choice is \"grassdata\", located in your home directory. Press Browse button to select the directory."
 msgstr "GRASS necesita un directorio donde almacenar sus datos (base de datos GRASS). Por favor cree uno si todavía no lo ha hecho. Una elección popular es \"grassdata\", ubicado en su directorio home. Presione el botón Explorar para seleccionar el directorio."
 
@@ -429,127 +429,127 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Herramienta de clasificación supervisada de GRASS GIS"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Barra de herramientas de mapa."
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr "Barra de herramientas de IClass"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr "Barra de herramientas miscelanea de IClass"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr "Barra de herramientas de digitalización"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr "Gráficas"
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr "Pantalla de previsualización"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr "Pantalla de áreas de entrenamiento"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Ajustar pantalla previsualización a la pantalla de áreas de entrenamiento"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Ajustar pantalla previsualización a la pantalla de áreas de entrenamiento"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 msgid "Display synchronization ON"
 msgstr "Sincronización de pantalla activada"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr "Sincronización de pantalla desactivada"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr "Se perderán todos los cambios. ¿Quiere continuar?"
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importar mapa vectorial"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "No hay áreas en el mapa vectorial <%s>.\n"
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr "El mapa vectorial <%s> contiene puntos o líneas, estos elementos son ignorados."
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "No se puede abrir mapa vectorial <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "No se pueden copiar elementos vectoriales desde <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 msgid "Unable to open temporary vector map"
 msgstr "No se puede abrir el mapa vectorial temporal"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr "No hay áreas de entrenamiento que exportar."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr "%d áreas de entrenamiento (%d clases) exportadas a mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr "No se pudo crear el mapa vectorial temporal."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr "Categoría %s sin área. Se saltará dicha categoría."
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr "Falló el análisis."
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr "resultados"
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr "No se ha seleccionado ningún grupo de imágenes."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid "Due to recent changes in classes, signatures can be outdated and should be recalculated. Do you still want to continue?"
 msgstr "Debido a cambios recientes en las clases, las firmas pueden ser obsoletas y deben ser recalculadas. ¿Aún quiere continuar?"
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr "Firmas obsoletas"
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
@@ -558,40 +558,40 @@ msgstr ""
 "Ya existe un archivo de firmas de nombre %s.\n"
 "¿Desea reemplazarlo?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "El archivo ya existe"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr "No se ha seleccionado ningún grupo de imágenes. Operación cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid "Group <%(group)s> does not have enough files (it has %(files)d files). Operation canceled."
 msgstr "El grupo <%(group)s> no tiene suficientes archivos (tiene %(files)d archivos). Operación cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr "No se ha dado ningún área. Operación cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Los elementos están fuera de las capas ráster. Operación cancelada."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Histogramas"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr "Gráficas de coincidencia"
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 msgid "Scatter plots"
 msgstr "Gráficas de dispersión"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -604,11 +604,11 @@ msgstr ""
 "Razón: No es posible importar los paquetes necesarios para la gráfica de dispersión.\n"
 "%s"
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid "You are trying to create a training area outside the computational region. Please, use g.region to set the appropriate region first."
 msgstr "Está tratando de crear un área de entrenamiento fuera de la región computacional. Por favor, use g.region para definir primero una región apropiada."
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
@@ -618,81 +618,81 @@ msgstr ""
 "\n"
 "Aún no hay clase, ¿quiere crear una?"
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr "No se ha seleccionado ninguna clase"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr "Se necesita el nombre del subgrupo"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, python-format
 msgid "Group <%s> not found"
 msgstr "Grupo <%s> no encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Subgrupo <%s> no encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Mapa ráster <%s> no encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Mapa vectorial <%s> no encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Cargando mapa ráster <%s>..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, python-format
 msgid "Loading training map <%s>..."
 msgstr "Cargando mapa de entrenamiento <%s>..."
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr "Seleccionar grupo de imágenes"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Crear/editar grupo..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr "Falta el nombre del grupo de imágenes."
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr "Nombre del grupo de imágenes:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 msgid "Name of imagery subgroup:"
 msgstr "Nombre del subgrupo de imágenes:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr "Por favor seleccione un subgrupo."
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "El subgrupo <%s> no fue encontrado en el grupo <%s>"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
@@ -701,7 +701,7 @@ msgstr ""
 "No se encontraron datos en el subgrupo <%s> del grupo <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
@@ -710,465 +710,466 @@ msgstr ""
 "No se encontraron datos en el grupo <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr "Falta el nombre del mapa."
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Mapa del mapa ráster:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Nombre del mapa vectorial:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr "Administrador de clases"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "Clases"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr "Nombre de la clase"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Color"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr "Por favor use solo caracteres ASCII."
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr "Acercar a las áreas de entrenamiento de la clase seleccionada"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr "Guardar archivo de las firmas"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr "Escriba el nombre de archivo de firmas:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr "Ruta del archivo de las firmas:"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr "Exportar áreas de entrenamiento"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr "Introduzca el nombre del nuevo mapa vectorial:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr "Exportar tabla de atributos"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr "Exporta tabla de atributos que contiene la información estadística calculada"
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Mapa vectorial <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr "Mapa vectorial <%s> existe"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr "Definir el nivel de opacidad"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr "Correr el análisis, actualizar el histograma y las gráficas de coincidencia"
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr "Guardar archivo de las firmas para i.maxlik"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 msgid "Remove selected map layer"
 msgstr "Eliminar capa de mapa seleccionado"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 msgid "Export training areas to vector map"
 msgstr "Exportar áreas de entrenamiento a mapa vectorial"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 msgid "Import training areas from vector map"
 msgstr "Importar áreas de entrenamiento de mapa vectorial"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Añadir capa de mapa RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr "Entrenamiento"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Vista previa"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr "Establecer lienzo del mapa para"
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr "/ Acercar al mapa"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr "desviación estandar"
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Añadir mapa ráster"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr "Ventana de visualización móvil de mapas GRASS GIS"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr "Barra de herramientas principal"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Barra de herramientas de Miselanea"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr "Mapa <%s> no encontrado."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Mapa <%s> no encontrado."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Nada a renderizar (mapa vacío). Operación cancelada."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr "Seleccionar un nombre de archivo para guardar la imagen (no es necesario añadir la extensión)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "No se ha seleccionado ningún mapa ráster o vectorial para ser consultado."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 msgid "Select raster maps"
 msgstr "Seleccionar mapas ráster"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 msgid "Name of top/left raster map:"
 msgstr "Nombre de mapa ráster superior/izquierdo:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 msgid "Name of bottom/right raster map:"
 msgstr "Nombre de mapa ráster superior/derecho:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr "Cambiar a modo avanzado"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr "Cancelar"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr "Cambiar a modo simple"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Cerrar"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr "Nombre del primer mapa está ausente."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr "Falta nombre del segundo mapa."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 msgid "Map Swipe settings"
 msgstr "Configuraciones de la ventana de visualización móvil de mapas"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr "Modo espejo"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr "Seguir cursor"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Color:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr "Forma:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Grosor de línea:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Tamaño:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Herramientas"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr "Quitar Ventana de visualización móvil"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Consultar mapa(s) ráster/vectorial"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Consultar mapa(s) seleccionado(s) ráster/vectorial"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr "Modo ventana móvil"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 msgid "Choose view mode"
 msgstr "Escoger modo de visualización"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 msgid "Switch orientation"
 msgstr "Cambiar orientación"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr "Cambiar mapas"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Administrador GRASS SIG de Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "Lista GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "Barra de herramientas de visualización de GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Barra de herramientas del admintrador de puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Configuración de página"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Vista previa de impresión"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Imprimir visualización"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Acercamiento a la región de cálculo (definida mediante g.region)."
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Acercamiento a la región predeterminada"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Acercamiento a una región guardada"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Establecer la región de cálculo desde la visualización"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Guardar la geometría de la visualización a la región nombrada"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Ir a GCP número"
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Intervalo válido:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "Error RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Adelante: %(forw)s, Hacia atrás:%(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Configuración para la georrectificación"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Cancelada la configuración de la georrectificación."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Seleccionar tipo de mapa y Locación/Directorio de mapas"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Tipo de mapa a georrectificar"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "ráster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vector"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Seleccionar Localización de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Seleccionar Directorio de mapas de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Debe seleccionar una Localización válida antes que un Directorio de mapas"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "Debe seleccionar una Localización y un Directorio de mapas válidos para poder continuar"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Seleccionar un grupo de imágenes / mapas a georrectificar."
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Crear grupo si no existe ninguno"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Añadir mapa vectorial al grupo..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Extensión para los mapas de salida:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Debe seleccionar un grupo de imágenes / mapas válido para continuar."
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Debe introducir una extensión del nombre del mapa para continuar."
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Seleccionar mapas a visualizar para crear los puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Seleccionar el mapa fuente a visualizar:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr "Seleccionar mapa ráster objetivo a visualizar:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr "Seleccionar mapa vectorial objetivo a visualizar:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Debe seleccionar mapa fuente para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1177,28 +1178,28 @@ msgstr ""
 "No hay mapas en el grupo seleccionado <%s>.\n"
 "Por favor editar grupo o seleccionar otro grupo."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Administrar puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Se necesitan al menos %d puntos de control (GCP). Operación cancelada."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "fuente"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "destino"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Establecer coordenadas GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1211,28 +1212,28 @@ msgstr ""
 "Este: %(coor0)s \n"
 "Norte: %(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Falló la escritura del archivo de PUNTOS"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Archivo de PUNTOS guardado para grupo <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "mapwin de entrada no definido"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "mapwin de salida no definido"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Falló la lectura del archivo de PUNTOS"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification method (order: %d).\n"
@@ -1245,38 +1246,38 @@ msgstr ""
 "6+ puntos para 2o orden, y\n"
 "10+ puntos para 3er orden."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rectificando imágenes, por favor espere..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformando <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rectificando mapa vectorial <%s>, por favor espere..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "La Georrectificación del mapa vectorial <%s>  ha fallado."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "Configuraciones del Administrador de puntos de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Salir del Administrador de puntos de control sobre el terreno GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Guardar puntos de control sobre ell terreno?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
@@ -1284,7 +1285,7 @@ msgstr ""
 "No se pudo calcular Error RMS.\n"
 "Posible error con m.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
@@ -1292,115 +1293,115 @@ msgstr ""
 "No se pudieron calcular nuevas extensiones.\n"
 "Posible error con m.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Ajustar vista de entrada a vista de salida"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Ajustar vista de salida a vista de entrada"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "utilizar"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "fuente E"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "Fuente N"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "objetivo E"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "objetivo N"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Error siguiente"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Error anterior"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Valor de coordenada no válido. Operación cancelada."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Crear nuevo grupo de mapas vectoriales"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Seleccionar mapa(s) vectorial(es) para añadir al grupo:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Editar puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "No. Punto de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "fuente E:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "objetivo E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "fuente N:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "objetivo N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Aplicar cambios para la sesión actual"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid "Apply and save changes to user settings file (default for next sessions)"
 msgstr "Aplicar y guardar los cambios en el archivo de configuración del usuario (predeterminado para las próximas sesiones)."
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Cerrar cuadro de diálogo"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Simbología"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Sólo destacar error RMS más alto"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Destacar error RMS > factor M + SD *:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1410,64 +1411,64 @@ msgstr ""
 "media + desviación estandard * factor facilitado. \n"
 "Los valores recomendados para este factor están entre 1 y 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Configuración de símbolos"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Color para un error RMS elevado:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Color para el GCP seleccionado"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Color para los GCPs no utilizados:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Mostrar GCPs no utilizados"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Tamaño del símbolo:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Rectificación"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "Seleccionar orden de rectificación"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "Primer orden"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "Segundo orden"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "Tercer orden"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Seleccionar método de interpolación:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "Recorta la visualización a la región de cálculo en la Localización de destino"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "Factor RMS umbral debe ser> 0"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1475,391 +1476,391 @@ msgstr ""
 "El factor RMS umbral es < 1\n"
 "Se tendrían que destacar demasiados puntos"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Configuraciones del Administrador GCP guardadas en el archivo '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Digitalizador vectorial de GRASS GIS"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Digitalizador vectorial no disponible. %s"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, python-format
 msgid "Vector map <%s> not found in current mapset. New vector map can be created by providing '-c' flag."
 msgstr "Mapa vectorial <%s> no encontrado en el Directorio de mapas actual. Se puede crear un nuevo mapa vectorial con la bandera '-c'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Se ha creado el nuevo mapa vectorial <%s>"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "No se puede crear nuevo mapa vectorial <%s>"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid "Topology for vector map <%s> is not available. Topology is required by digitizer. Do you want to rebuild topology (takes some time) and open the vector map for editing?"
 msgstr "La topología para el mapa vectorial <%s> no está disponible. La topología es requerida por el digitalizador. Quiere reconstruir la topología (tarda un tiempo) y abrir el mapa vectorial para editar?"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Topologia no encontrada"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Actualizar categorías"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "No se ha seleccionado algún mapa vectorial para su edición."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr "Nada por hacer. Escoja la herramienta apropiada de la barra de digitalización."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Dialogo de etiquetado de bloque Z"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Configuración de la digitalización"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Aplicar cambios para esta sesión"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "Cerrar el cuadro de diálogo y guardar los cambios al archivo de configuraciones de usuario"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Cerrar el diálogo e ignorar los cambios"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "General"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Visualización"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Ajustando"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Umbral de ajuste"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "pixeles de la pantalla"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "unidades de mapa"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Ajustar también al vértice"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "El umbral de ajuste es %(value).1f %(units)s."
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Seleccione elementos vectoriales"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Seleccione umbral"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Seleccione únicamente, los objetos espaciales localizados dentro del recuadro frontera."
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid "By default are selected all features overlapping selection bounding box "
 msgstr "De forma predeterminada, se han seleccionan todos los objetos espaciales que se superponen al cuadro delimitador de selección."
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Revisar duplicados"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr "Digitalizar nueva líneas/bordes"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Dividir líneas en la intrersección"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr "Digitalizar áreas"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr "Cierre el contorno (cerrar en el nodo de inicio)"
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Guardar los cambios"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Guardar cambios al salir"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Herramienta de consultas"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Seleccione la herramienta de consulta"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Seleccionar mediante recuadro"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "longitud"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Seleccionar líneas"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "más corto que"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "más largo que"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "dangle"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atributos"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Digitalizar nuevo elemento"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Añadir nuevo registro a la tabla"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Capa"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Categoría"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Modo"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Siguiente a utilizar"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Número de categoría"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Modo de categoría"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Entrada manual"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Sin categoría"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Borrar elemento(s) existente(s)"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Borrar registro de la tabla"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Atributos de geometría"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "área"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "perímetro"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid "Note: These settings are stored in the workspace not in the vector digitizer preferences."
 msgstr "Nota: Estas configuraciones se guardan en el Entorno de trabajo no en las preferencias del digitalizador vectorial."
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Digitalizar nuevo segmento de línea"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Digitalizar nueva línea/contorno"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Resaltar"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Resaltar (duplicados)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Punto"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Línea"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Contorno (no incluye el área)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Contorno (un área)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Contorno (dos áreas)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centroide (dentro de área)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroide (fuera de área)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroide (duplicado en área)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Nodo (una línea)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Nodo (dos líneas)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vértice"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Área (contorno cerrada + centroide)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Dirección"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Ajuste deshabilitado"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr "El umbral de ajuste es %(value).1f %(units)s (basado en la resolución comp.)."
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Los ajustes del digitalizador de vectores se han guardado en el archivo <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Error de Digitalización"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "No se puede abrir mapa vectorial <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "No hay un mapa vectorial abierto para realizar edición"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1870,77 +1871,77 @@ msgstr ""
 "\n"
 "Razón: %s"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Falló la lectura del elemento id %d. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Enlace a la base de datos %d no disponible. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "No es posible iniciar el controlador <%s> de la base de datos. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "El driver <%(driver)s> no puede abrir la base de datos <%(db)s>. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "No es posible ejecutar la consulta SQL '%s'. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "El elemento id %d está marcado como fallecido. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Tipo de elemento %d no soportado. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Tipo de elemento '%s' desconocido"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "No hay suficientes puntos para una línea"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Lista de categorías - haga clic derecho para eliminar"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Añadir nueva categoría"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Aplicar cambios"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignorar los cambios y cerrar el cuadro de diálogo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Aplicar los cambios y cerrar el cuadro de diálogo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Id del elemento:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1951,244 +1952,244 @@ msgstr ""
 "El número de capa y categoría debe ser un entero.\n"
 "El número de capa debe ser mayor que cero."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Borrar lo seleccionado"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Borrar todo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Recargar"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "No es posible actualizar el mapa vectorial."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d líneas seleccionadas para el etiquetado de bloque z"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Definir valor"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Valor de inicio"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Paso"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Lista de duplicados"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Identificador de elemento"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Capa (Categorías)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr "Herramienta de selección de área/contorno/centroide"
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Digitalizar nuevo punto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Izquierda: nuevo punto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Digitalizar nueva línea"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "Izquierda: nuevo punto; Ctrl+Izquierda: deshacer último punto; Derecha: cerrar la línea"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Digitalizar nuevo contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Digitalizar nuevo centroide"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr "Digitalizar nueva área (cotorno sin categoría)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr "Añadir vértice a línea o contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Izquierda: Seleccionar;  Ctrl+Izquierda: Deseleccionar; Derecha: Confirmar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Borrar punto(s), línea(s), contorno(s) o centroide(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr "Borrar áreas seleccionada(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Visualizar/actualizar atributos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Izquierda: seleccionar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Visualizar/actualizar categorías"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 msgid "Edit selected line/boundary"
 msgstr "Editar línea/contorno seleccionado"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Mover punto(s), línea(s), contorno(s) o centroide(s) seleccionados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr "Mover vértices seleccionados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 msgid "Remove selected vertex"
 msgstr "Remover vértice seleccionado"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Salir del digitalizador"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Salir del digitalizador y guardar cambios"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Manual del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Mostrar el manual del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Herramientas adicionales (copiar, invertir, conectar, etc.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Deshacer"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Deshacer cambios anteriores"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr "Rehacer"
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr "Rehacer cambios anteriores"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Separa las líneas/bordes en la intersección"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Conectar las líneas / fronteras seleccionadas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Copiar categorías"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Copiar elementos del mapa vectorial ubicado en segundo plano"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Copiar atributos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Conversión del tipo de elemento"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Invertir las líneas o fronteras seleccionadas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Combina las líneas o fronteras seleccionadas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Ajustar las líneas / fronteras seleccionadas (únicamente a los nodos)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Dividir línea/contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Consultar elementos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Etiquetado en bloque Z de líneas 3D"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 msgid "Select background vector map"
 msgstr "Seleccionar mapa vectorial de fondo"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "El mapa de vectores no es tridimensional (3D). Operación cancelada."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Seleccionar un mapa vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by digitizer.\n"
@@ -2197,74 +2198,75 @@ msgstr ""
 "La topología para el mapa vectorial <%s> no está disponible. La topología es requerida por el digitalizador.\n"
 "¿Quiere reconstruir la topología (tarda algún tiempo) y abrir el mapa vectorial para editar?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr "Error del digitalizador"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Por favor, espere, abriendo el mapa vectorial <% s> para su edición ..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Tipo de elemento '%(type)s' no soportado. No se puede editar capa OGR <%(layer)s>."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr "Digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "¿Desea guardar los cambios en el mapa vectorial <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "¿Guardar los cambios?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "Por favor espere, cerrando y reconstruyendo la topología del mapa vectorial <% s> ..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "La edición del mapa vectorial <%s> ha finalizado correctamente"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Nuevo mapa vectorial"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr "La propiedad no existe: %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr "Medición terminada"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid "Click and drag with left mouse button to measure.%sDouble click with left button to clear."
 msgstr "Pulse y arrastre con el botón izquierdo del ratón para medir. %s . Haga doble clic izquierdo para limpiar."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Midiendo distancia."
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Midiendo distancia:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
@@ -2273,132 +2275,151 @@ msgstr ""
 "La distancia geodésica no está disponible.\n"
 "Razón: %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segmento"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "distancia total"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "rumbo"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr "grados (a favor de las manecillas del reloj partiendo del norte)"
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr "Midiendo distancia:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr "No se reconocieron las medidas, falló la medición."
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr "Área: {area} {unit}\n"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr "leyenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr "barra de escala"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr "flecha al norte"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr "Copiar coordenadas al portapapeles"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Barra de herramientas de visualización de GCP"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' copiado al portapapeles."
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Mostrar configuración."
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Esconder {overlay}"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 msgid "Resize legend"
 msgstr "Redimensionar la leyenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Por favor espere, exportando imagen..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr "No ha sido posible dibujar gráficas registradas. Se les quitó el registro a las gráficas."
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Acercamiento a la extensión de la región guardada (zoom to saved...)"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 msgid "Set compulational region from named region"
 msgstr "Definir región computacional desde la región nombrada"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Región <%s> no encontrada. Operación cancelada."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Guardar la extensión de la visualización a un archivo de configuración de región."
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 msgid "Save computational region to region file"
 msgstr "Guardar región computacional a un archivo de región"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Aviso"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
@@ -2406,32 +2427,32 @@ msgstr ""
 "Por favor instale Python Imaging Library (PIL)\n"
 "para un mejor control de leyendas y otras decoraciones."
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Mostrar objeto de texto"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr "Texto:"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Fuente:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Establecer  tipo de letra"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2439,351 +2460,702 @@ msgstr ""
 "Arrastrar texto con el ratón en modo puntero a la posición.\n"
 "Doble pulsación para cambiar las opciones."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
-msgstr "Modelador Gráfico GRASS GIS"
-
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "Modelo"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "No se pudo leer la instrucción %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Ítems"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "No se pudo leer la instrucción %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "Variables"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid "Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want to overwrite it?"
+msgstr "El archivo vectorial <%s> ya existe en el directorio de mapas de usuario actual (Mapset) ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr "Editor de Python"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "¿Sobreescribir?"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Salida del comando"
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "Seleccionar localización GRASS y directorio de mapas"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr "Script de python contiene modificaciones locales"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid "Map <{layer}> marked for copying. You can paste it to the current mapset <{mapset}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr "Script de Python está actualizado"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Cambiar el nombre."
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
-msgstr "Redibujando modelo..."
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Cambiar nombre del directorio de mapas seleccionado (Mapset)."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "Desea guardar los cambios en el modelo?"
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Validando modelo..."
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr "Desea almacenar las actuales configuraciones del modelo en el archivo del modelo?"
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Redibujando modelo..."
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Salir del Modelador Gráfico"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:318
-msgid "No intermediate data to delete."
-msgstr "Sin datos intermedios que eliminar."
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "No se ha seleccionado algún mapa vectorial para su edición."
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Desea eliminar los datos permanentemente?%s"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "Copiar tabla."
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "Eliminar datos intermedios?"
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Falló la lectura del archivo %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "Mapas %d eliminados del Directorio de mapas actual"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid "Map <{map}> already exists in the current mapset. Do you want to overwrite it?"
+msgstr "El archivo vectorial <%s> ya existe en el directorio de mapas de usuario actual (Mapset) ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
-msgid "Current model is not empty. Do you want to store current settings to model file?"
-msgstr "El modelo actual no está vacío. Quiere almacenar las configuraciones actuales en el archivo del modelo?"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Calculando nodos..."
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "¿Crear nuevo modelo?"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr "Escoger archivo del modelo"
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "Recorta la visualización a la región de cálculo en la locación de destino."
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "Archivo de Modelo GRASS (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid "Do you really want to delete map <{m}> of type <{etype}> from mapset <{mapset}> in location <{loc}>?"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
-msgstr "%(items)d items (%(actions)d actions) cargados en el modelo"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "Borrar el directorio de mapas seleccionado (Mapset)."
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "El archivo del modelo <%s> ya existe. Quiere sobrescribirlo?"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Borrar."
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "Guardar modelo"
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "eliminar dublicados"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "Archivo <%s> guardado"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Mostrar."
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr "Seleccione el archivo donde guardar el modelo actual"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "El modelo no es válido. Nada que validar."
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Validando modelo..."
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "complemento de un"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr ""
-"El modelo no es válido.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "El mapa puede ser creado solo en el directorio de mapas actual"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "El modelo es válido."
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Copiar."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
-#, python-format
-msgid "Model exported to <%s>"
-msgstr "Modelo exportado a <%s>"
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "&Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
-msgid "Comment:"
-msgstr "Comentario:"
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
-msgid "Add comment"
-msgstr "Añadir comentario"
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Cambiar mapas"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
-msgstr "Contenido vacío. Nada que añadir al modelo."
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "Calculadora de Mapas Raster SIG GRASS 3D"
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
-msgstr "Modelador Gráfico wxGUI"
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Calculadora de Mapas Raster SIG GRASS 3D"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
-"La lectura del archivo del modelo <%s> ha fallado.\n"
-"Archivo no válido, no es posible parsear el documento XML.\n"
-"\n"
-"%s"
-
-#: ../gui/wxpython/gmodeler/frame.py:887
-msgid "Please wait, loading model..."
-msgstr "Por favor espere, cargando modelo..."
-
-#: ../gui/wxpython/gmodeler/frame.py:953
-msgid "Writing current settings to model file failed."
-msgstr "La escritura de las configuraciones actuales en el archivo del modelo ha fallado."
+"La Localización actual es <%(loc)s>.\n"
+"El actual Directorio de mapas es <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Unable to open file <%s> for writing."
-msgstr "No es posible abrir el archivo <%s> para escribir."
+msgid "Current mapset is <%s>."
+msgstr "El Directorio de mapas actual es <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
-#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
-msgid "Remove"
-msgstr "Remover"
+#: ../gui/wxpython/datacatalog/catalog.py:33
+#, fuzzy
+msgid "Data catalog"
+msgstr "Selección de datos"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
-msgid "Disable"
-msgstr "Inhabilitar"
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Nombre de la localización GRASS:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
-msgid "Enable"
-msgstr "Habilitar"
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
-msgid "Set label"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Pulse aquí para editar la configuración de la capa."
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Buscar módulo"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid "Type to search database by map type or name. Use prefix 'r:', 'v:' and 'r3:'to show only raster, vector or 3D raster data, respectively. Use Python regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Por favor, crear primero el marco del mapa."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Desea guardar los cambios en el modelo?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Guardar los cambios."
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "No se puede crear el perfil del mapa raster."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Renderizar"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Crear nueva tabla de colores para el mapa raster usando reglas de color."
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Crear nuevo mapa vectorial."
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Mapa del mapa raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Seleccionar un mapa vectorial."
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Mapa del mapa raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Calcula el índice de forma en un mapa raster."
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid "Raster map <%s> already exists in the current mapset. Do you want to overwrite it?"
+msgstr "El archivo vectorial <%s> ya existe en el directorio de mapas de usuario actual (Mapset) ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitalizar"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Digitalizar nueva línea."
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Digitalizar nuevo punto."
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Une mapas raster (patch)."
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Salir del digitalizador"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Seleccionar mapa raster:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Valores de celda."
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid "Width of currently digitized line or diameter of a digitized point in map units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Anchura:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "no hay mapa raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr "Modelador Gráfico GRASS GIS"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "Modelo"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Ítems"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "Variables"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr "Editor de Python"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Salida del comando"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr "Script de python contiene modificaciones locales"
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr "Script de Python está actualizado"
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "Redibujando modelo..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "Desea guardar los cambios en el modelo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr "Desea almacenar las actuales configuraciones del modelo en el archivo del modelo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Salir del Modelador Gráfico"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+msgid "No intermediate data to delete."
+msgstr "Sin datos intermedios que eliminar."
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Desea eliminar los datos permanentemente?%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "Eliminar datos intermedios?"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "Mapas %d eliminados del Directorio de mapas actual"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid "Current model is not empty. Do you want to store current settings to model file?"
+msgstr "El modelo actual no está vacío. Quiere almacenar las configuraciones actuales en el archivo del modelo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "¿Crear nuevo modelo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr "Escoger archivo del modelo"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "Archivo de Modelo GRASS (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr "%(items)d items (%(actions)d actions) cargados en el modelo"
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "El archivo del modelo <%s> ya existe. Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "Guardar modelo"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "Archivo <%s> guardado"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr "Seleccione el archivo donde guardar el modelo actual"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "El modelo no es válido. Nada que validar."
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Validando modelo..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"El modelo no es válido.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "El modelo es válido."
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr "Modelo exportado a <%s>"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+msgid "Comment:"
+msgstr "Comentario:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+msgid "Add comment"
+msgstr "Añadir comentario"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr "Contenido vacío. Nada que añadir al modelo."
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr "Modelador Gráfico wxGUI"
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+"La lectura del archivo del modelo <%s> ha fallado.\n"
+"Archivo no válido, no es posible parsear el documento XML.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
+msgid "Please wait, loading model..."
+msgstr "Por favor espere, cargando modelo..."
+
+#: ../gui/wxpython/gmodeler/frame.py:1073
+msgid "Writing current settings to model file failed."
+msgstr "La escritura de las configuraciones actuales en el archivo del modelo ha fallado."
+
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
+#, python-format
+msgid "Unable to open file <%s> for writing."
+msgstr "No es posible abrir el archivo <%s> para escribir."
+
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
+#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
+msgid "Remove"
+msgstr "Remover"
+
+#: ../gui/wxpython/gmodeler/frame.py:1448
+msgid "Disable"
+msgstr "Inhabilitar"
+
+#: ../gui/wxpython/gmodeler/frame.py:1454
+msgid "Enable"
+msgstr "Habilitar"
+
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
+msgid "Set label"
 msgstr "Definir etiqueta"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr "Definir comentario"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Añadir punto de control"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Eliminar punto de control"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "Intermedio"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Propiedades"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "Etiqueta:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Lista de variables - derecha- clic para eliminar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Nombre"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Tipo de dato"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Valor predeterminado"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Descripción"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Añadir nueva variable"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "entero"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "flotante"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "string"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "región"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "Directorio de mapas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "archivo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr "dir"
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Añadir nueva variable al modelo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Lista deítems -derecha-click para eliminar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Etiqueta"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr "En bucle (loop)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 msgid "Parameterized"
 msgstr "Parametrizado"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 msgid "No items to selected."
 msgstr "No se ha seleccionado ningún elemento."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Script de Python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Ejecutar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Correr script de python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Guardar script de python en archivo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2791,192 +3163,189 @@ msgstr ""
 "Refrescar script de Python basado en el modelo.\n"
 "Descartará todos los cambios locales."
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "No se puede lanzar script de Python. %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Escoger archivo a guardar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Script Python (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "El archivo <%s> ya existe. Quiere sobrescribir este archivo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Guardar archivo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid "Python script is locally modificated. Refresh will discard all changes. Do you really want to continue?"
 msgstr "El script de Python fue modificado localmente. Al refrescar se descartarán todos los cambios. ¿Realmente quiere continuar?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Actualizar"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Configuraciones del modelador"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Propiedades del elemento"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Inhabilitado:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Válido:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "No válido:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Ejecutando:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Tamaño de la forma"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Anchura:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Altitud:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Datos"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tipo."
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Ráster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "Ráster 3D:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Vectorial:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 msgid "Table:"
 msgstr "Tabla:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Bucle (loop)"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr "Comentario"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Propiedades del modelo"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadatos."
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Comandos"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Permitir que los archivos de salida sobrescriban archivos existentes"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Aplicar propiedades"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Nombre:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Descripción:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autor(es):"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "modelo"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Scrip generado por el Modelador Gráfico wxGUI."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "Variable '%s' no definida"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Ejecutando modelo..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "El modelo está vacío. No hay nada que ejecutar."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -2987,86 +3356,86 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Ejecutar modelo?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr "Las siguientes variables no están definidas:"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Mapas ráster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "Mapas ráster 3D"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Mapas vectoriales"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "Desconocido"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<no definido>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Condición:"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Condición: no definida"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr "vacío"
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Parámetros del modelo"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr "Eliminar datos intermedios cuando termine"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Propiedades de los datos"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Nombre del elemento:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "Tipo de elemento:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "Añadir comando GRASS al modelo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr "Etiquetar y comentar"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3076,7 +3445,7 @@ msgstr ""
 "\n"
 "No es posible añadir nueva acción al modelo."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3087,44 +3456,44 @@ msgstr ""
 "\n"
 "No es posible añadir una nueva acción al modelo."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Propiedades de las relaciones"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "Desde"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Hacia"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Datos: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Comando:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Opción:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3132,68 +3501,68 @@ msgstr ""
 "No se encontró opción relevante.\n"
 "No es posible añadir relación."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Condición"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Propiedades del bucle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Lista de ítems en el bucle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Series"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "Definir serie de mapas como condición para el bucle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "Definir serie de mapas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "Propiedades If-else"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Lista de ítems en el bloque 'if'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Lista de ítems en el bloque 'else'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "La variable <%s> ya existe en el modelo. Ha fallado añadir la variable."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Desea eliminar todas las variables del modelo?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Eliminar variables"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "No"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Sí"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3202,12 +3571,12 @@ msgstr ""
 "No es posible abrir el archivo\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "El archivo de instrucciones se cargará con la siguiente región: %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
@@ -3216,23 +3585,23 @@ msgstr ""
 "La región no se puede establecer\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "No se pudo leer la instrucción %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3241,7 +3610,7 @@ msgstr ""
 "La escala ha cambiado, valor anterior: %(old)s\n"
 "valor nuevo: %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
@@ -3250,7 +3619,7 @@ msgstr ""
 "No se pudo leer instrucción %s.\n"
 "Use la notación 1:25000."
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3259,7 +3628,7 @@ msgstr ""
 "La posición del marco del mapa ha cambiado, valor antiguo: %(old1)s %(old2)s\n"
 "value nuevo: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3268,7 +3637,7 @@ msgstr ""
 "El tamaño del marco ha cambiado, valor antiguo: %(old1)s %(old2)s\n"
 "valor nuevo: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3277,32 +3646,32 @@ msgstr ""
 "No se pudo leer instrucción %(file)s.\n"
 "Formato desconocido %(for)s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "No se pudo leer la instrucción %s."
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding which is required by module ps.map."
 msgstr "Los caracteres en la posición %s no están soportados por ISO-8859-1 (Latin 1) codificación que es requerida poe el módulo ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is required by module ps.map."
 msgstr "No todos los caracteres están soportados por la codificación ISO-8859-1 (Latin 1) que es requerida por el módulo ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "No se pudo leer instrucción %(inst)s: archivo %(file)s no encontrado."
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Diseñador cartográfico GRASS GIS"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
@@ -3310,37 +3679,37 @@ msgstr ""
 "La Librería de Tratamiento de Imágenes para Python no está disponible.\n"
 "La funcionalidad 'Vista previa' no funcionará."
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr "El programa ps2pdf no está disponible. Por favor instálelo primero para crear PDF."
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Generando PDF..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "Generando PostScript..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Generando vista previa..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "Ps.map salió con código de retorno %s"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "%(prg)s salió con código de retorno  %(code)s"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF generado"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3351,149 +3720,149 @@ msgstr ""
 "\n"
 " %s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "Archivo PostScript generado"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr "Generando vista previa, por favor espere"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Vista previa no disponible"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid "Preview is not available probably because Ghostscript is not installed or not on PATH."
 msgstr "Vista previa no disponible probablemente por que Ghostscript no esté instalado o no esté en RUTA."
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr "Por favor sigue las instrucciones que están en el GRASS Trac Wiki."
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Vista previa generada"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Guardar archivo como"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr "No se pudo leer el archivo %s."
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "Por favor, crear primero el marco del mapa."
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "La barra de escala no es adecuada para esta proyección"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr "Presione el botón con el icóno de triángulo verde para generar una vista previa."
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "Diseñador cartográfico wxGUI"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr "MARCO DE MAPA"
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr "LEYENDA DE RÁSTER"
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr "LEYENDA DE VECTORIAL"
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr "INFORMACIÓN DEL MAPA"
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr "BARRA DE ESCALA"
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr "IMAGEN"
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr "FLECHA NORTE"
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "Clicar y arrastrar para cambiar el tamaño del objeto"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "etiquetas:"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "pulgada"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "punto"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "centímetro"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "milímetro"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "metros"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "kilómetros"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "pies"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "millas"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "millas naúticas"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "pixel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "metros"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "grados"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "No es posible ejecutar `ps.map -b`"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Unidades:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3501,29 +3870,29 @@ msgstr ""
 "Posición de la esquina superior izquierda\n"
 "desde el borde superior izquierdo del papel"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "Se da posición:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr "relativo al papel"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "por coordenadas de mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3531,184 +3900,182 @@ msgstr ""
 "Posición desde el borde superior izquierdo\n"
 "del papel"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Tamaño de fuente:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Escoger color:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Cerrar cuadro de  diálogo y aplicar los cambios"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Unidades"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Formato"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientación"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Anchura"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Altura"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Izquierda"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Derecha"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Superior"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Inferior"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr "¡No se permite literal!"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Entrada no válida"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Tamaño de página"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Márgenes"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Vertical"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Horizontal"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "personalizar"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Configuraciones del mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Configuraciones del marco del mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Marco del mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Opciones del marco del mapa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "ajustar marco para que coincida con el marco seleccionado "
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "ajustar marco para que coincida con la región guardada"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "ajustar el marco para que coincida con la región computacional actual"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "escala fija y centro del mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Selección de mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Mapa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Región:"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Escala de mapa y centro"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Centro:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Escala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Resolución máxima del mapa (dpi):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Borde"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "dibujar borde alrededor del marco del mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "Color de borde:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "Ancho de borde (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3716,416 +4083,418 @@ msgstr ""
 "La región se establece para que coincida con este mapa,\n"
 "el mapa ráster o vectorial debe agregarse más tarde"
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "Selección de la región"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "¡No se ha seleccionado ningún mapa!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "¡No se ha seleccionado ninguna región!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "¡Escala o centro del mapa incorrectos!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Mapa ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "Escoger mapa ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "no hay mapa ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "ráster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Añadir mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "puntos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "líneas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "áreas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Añadir"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "Administrar mapas vectoriales"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr "El mapa vectorial superior se superpone a los otros"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "Arriba"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "Abajo"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Borrar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "Propiedades..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "Configuraciones de mapa ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "Configuraciones de mapa vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "%s propiedades"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "Selección de datos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Tipo de elemento"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "centroides"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "contornos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "Selección de capa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "La conexión a la base de datos no se encuentra definida en el archivo de BD."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "Seleccionar capa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "lista de categorías (por ejemplo 1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Máscara"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "Utilizar máscara actual"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "Colores"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "Contorno"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "dibujar línea externa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "Anchura (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "Llenar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "rellenar color"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "escoger color:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "color de la columna de la tabla del mapa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "No hay efecto de color de relleno de la columna de la tabla"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "Color de las líneas:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "Tamaño y estilo"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "símbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "archivo eps:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Explorar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "Escribir el nombre de archivo o clicar navegar para escoger archivo"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Escoger un archivo"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Tamaño"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "tamaño:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "tamaño de la columna de la tabla del mapa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "escala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "Rotación"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "girar símbolos:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "sentido antihorario en grados:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "de la columna de la tabla del mapa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "Establecer anchura (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "multiplicar anchura por el valor de la categoría"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Estilo de línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "Escoger estilo de línea:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "Seleccionar extremo de línea:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "Patrón:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "utilizar patrón:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "Selección archivo patrón:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "patrón de ancho de línea (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "patrón de factor de escala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Leyenda ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Mostrar leyenda ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Ráster fuente"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "ráster actual"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "seleccionar ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s: tipo %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Tipo de leyenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "leyenda discreta (mapas categóricos)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "gradiente de color de la leyenda contínuo (mapa de coma flotante)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Configuraciones avanzada de leyenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "dibujar caja  \"sin datos\""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "dibujar marcas a lo largo de la tabla de colores"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "intervalo"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Leyenda vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Mostrar leyenda vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Fuente de mapas vectoriales"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Escoger mapas vectoriales y su orden en la leyenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Mapa vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Editar etiqueta"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "dibujar borde alrededor de la leyenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Tamaño y posición"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Posición"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "Dejar vacío el campo de edición, para utilizar los valores por defecto."
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4133,15 +4502,15 @@ msgstr ""
 "Ancho del símbolo de color (para líneas)\n"
 "delante del texto de la leyenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Columnas:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "extensión de la columna:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
@@ -4149,186 +4518,174 @@ msgstr ""
 "Distancia de separación de columna entre los bordes izquierdos\n"
 "de dos columnas en un leyenda multicolumna"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Configuración de tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "Editar etiqueta de leyenda:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "¡No hay ningún mapa ráster seleciconado!"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "No hay ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr "Configuraciones Mapinfo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Configuraciones de color"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "utilizar color de borde:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "utilizar color de fondo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"No se soportan las unidades de la proyección actual,\n"
-"se utilizarán metros!"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Unidades no soportadas"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Longitud:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "La longitud de la barra de escala se facilita en las unidades del mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "La altura de la barra de escala es la altura real en el papel"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "predeterminado"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Estilo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Tipo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Número de segmentos:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Etiquetar cada"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "segmentos"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "fondo del texto transparente"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "La longitud de la barra de escala no está definida"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Texto"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Introducir texto:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Efectos del texto"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "texto de fondo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "destacar"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "borde del texto"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Offset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "horizontal (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "vertical (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr "Punto de referencia"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Rotación del texto"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "girar texto (sentido antihorario)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "No se ha entrado ningún texto!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Imagen"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Seleccionar un directorio:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Seleccionar un directorio con imágenes:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr "Nota: solo está soportado el formato EPS"
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Escala y rotación"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Ángulo de rotación (grados):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Rotación en el sentido contrario al de las manecillas del reloj en grados"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
@@ -4336,42 +4693,42 @@ msgstr ""
 "PIL\n"
 "faltante"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "No se puede leer el archivo %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "tamaño: %(width)s x %(height)s pts"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "No se ha seleccionado ninguna imagen."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Flecha de Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Configuración de la flecha de Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr "Calcular convergencia"
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr "Símbolo"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr "Símbolo seleccionado:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
@@ -4379,285 +4736,281 @@ msgstr ""
 "Nota: símbolo seleccionado no se visualizará\n"
 "en el modo borrador (solo en el modo de vista previa)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr "Color de línea:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "transparente"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Color de relleno:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Tamaño y rotación"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Tamaño (pt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Tamaño del símbolo en puntos:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Configuración del rectángulo"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Configuración de línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Anchura de línea en puntos"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 msgid "Vector labels"
 msgstr "Etiquetas de vectoriales"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr "Archivo de etiquetas debe ser creado anteriormente con el módulo v.label"
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr "Puede seleccionar múltiples archivos de leyenda."
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "Generar archivo de texto con las intrucciones de cartografía"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "Cargar archivo de texto con instrucciones de cartografía"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Generar PostScript de salida"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Generar PDF de salida"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Especificar tamaño de papel, márgenes y orientación"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Extensión completa"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Zoom a toda la extensión"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Clicar y arrastrar para situar el marco del mapa"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Eliminar objeto seleccionado"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Mostrar vista previa"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "Salir del diseñador cartográfico"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "información del mapa"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Leyenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Barra de escala"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Rectángulo"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 msgid "Add overlays"
 msgstr "Añadir superposiciones"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Añadir etiquetas"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr "Añadir gráfica simple: puntos"
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr "Añadir gráfica simple: líneas"
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr "Añadir gráfica simple: rectángulos"
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Administrador de tabla de atributos de GRASS GIS -"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr "SOLO LECTURA-"
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid "Database connection for vector map <%s> is not defined in DB file. You can define new connection in 'Manage layers' tab."
 msgstr "No se ha definido en el archivo DB, la conexión a la base de datos para el mapa vectorial <%s>. Puede definir una nueva conexión en la pestaña \"Administración de capas\"."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Por favor espere, cargando datos del atributo."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Explorar datos"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Administrar tablas"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Administrar capas"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Cerrar el administrador de tabla de atributos"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 msgid "Reload currently selected attribute data"
 msgstr "Recargar tabla de atributos seleccionada actualmente"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Recargar todos los datos de atributos (eliminar selección actual)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Cantida de registros cargados: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid "Failed to query vector map <{map}>. Check database settings and topology."
-msgstr "No se pudo consultar el mapa vectorial <{map}>. Cheque la configuración de la base de datos y la topología."
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Conexión a la base de datos"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Consulta"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Establecer la sentencia SQL como predeterminada"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Aplicar sentencia SQL en el administrador de tabla de atributos"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Cerrar el cuadro de diálogo"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Columnas."
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr "Inserción interactiva"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Valores"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Obtener todos los valores"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Obtener una muestra"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr "Obtener los primeros 256 valores únicos como muestra"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr "Ir a:"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Cerrar el cuadro de diálogo al aplicar"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Constructor SQL GRASS (%(type)s): - <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr "Columna a mostrar (cláusula SELECT)"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr "Restricción para la búsqueda (claúsula WHERE)"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Ejemplo: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Verificar"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Verificar la sentencia SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "sentencia SQL no verificada"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "La sentencia SQL no es válida"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4668,70 +5021,70 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "La sentencia SQL es válida"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr "Columna a definir (cláusula SET)"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr "Calcular valor de la columna a definir"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr "Funciones"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr "La sentencia SQL no fue aplicada"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr "La sentencia SQL fue aplicada"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr "El controlador Dbf no soporta el uso de funciones de SQL."
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Cargando datos..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid "Attribute table <%s> not found. For creating the table switch to 'Manage layers' tab."
 msgstr "Tabla de atributos <% s> no ha sido encontrada. Para crear la tabla cambie a la pestaña \"Administrar capas\"."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "No se ha encontrado la columna <%(column)s> en la tabla <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Solo puede mostrar 256 columnas."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "La cantidad de columnas en la tabla es inconsistente <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr "Límite de visualización: 100000 registros."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Valor desconocido"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr "No se puede decodificar el valor. Determine la codificación en las preferencias ( 'Atributos') de la interfaz gráfica de usuario GUI."
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert value '%(val)s' in key column (%(key)s) to integer.\n"
@@ -4742,170 +5095,170 @@ msgstr ""
 "\n"
 "Detalles: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Ordenar de forma ascendente"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Ordenar de forma descendente"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Calcular (solo columnas numéricas)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr "Calculadora de campos"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Estadísticas"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Añadir columna"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Tamaño de área"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Longitud de línea"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr "Compactación de un área"
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr "Dimensión fractal de los contornos que definen un polígono"
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Longitud del perímetro de un área"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Cantidad de elementos para cada categoría"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr "Pendiente de la línea 3D"
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr "Sinuosidad de línea"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Línea de azimut"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr "Añadir columna a la tabla <%s>"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "No es posible añadir la columna a la tabla. No se ha definido el nombre de la columna."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "La columna <%(column)s> ya existe en la tabla <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Datos del atributo - haga click derecho para editar/administrar los registros"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabla"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr "(solo lectura)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Consulta SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Simple"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Aplicar la instrucción SELECT y recargar los registros de datos"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr "Constructor"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Constructor SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Editar registro seleccionado"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Insertar un nuevo registro"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Borrar registro(s) seleccionado(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Borrar todos los registros"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Seleccionar todo"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Deseleccionar todo"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Resaltar los elementos seleccionados"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Resaltar el(los) objeto(s) espacial(es) seleccionados y acercar (zoom)."
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Extraer elementos seleccionados"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Borrar elementos seleccionados"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Actualizar un registro existente"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Los valores '%(value)s' necesitan ser capturados como %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
@@ -4914,17 +5267,17 @@ msgstr ""
 "No fue posible actualizar el registro existente.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "En la tabla, ya existe un registro %d con ese número de categoría."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Falta el número de categoría (en la columna %s)."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -4933,29 +5286,29 @@ msgstr ""
 "No fue posible insertar un nuevo registro.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid "Selected data records (%d) will be permanently deleted from table. Do you want to delete them?"
 msgstr "Los registros seleccionados (%d) serán borrados permanentemente de la tabla. ¿Desea eliminarlos?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Borrar todos los registros"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid "All data records (%d) will be permanently deleted from table. Do you want to delete them?"
 msgstr "Todos los registros (%d) serán borrados de la tabla permanentemente. ¿Desea eliminarlos?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "No hay algo para extraer."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "No hay nada para eliminar."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4966,7 +5319,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4979,57 +5332,57 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabla <%s> - haga clic derecho para eliminar la(s) columnas."
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Columna"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Longitud"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Renombrar columna"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "No es posible renombrar la columna. No se ha definido un nombre de columna."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already exists in the table <%(table)s>."
 msgstr "No es posible renombrar la columna  <%(column)s> como <%(columnTo)s>. por que la columna ya existe en la tabla <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid "Unable to rename column. Column <%(column)s> doesn't exist in the table <%(table)s>."
 msgstr "No es posible renombrar la columna  <%(column)s> , por que la columna no existe en la tabla <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Eliminar las columnas seleccionadas"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "columnas"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid "Selected %s will PERMANENTLY removed from table. Do you want to drop the column?"
 msgstr "Seleccionado %s será eliminado PERMANENTEMENTE de la tabla. ¿Quiere eliminarla la columna?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Eliminar columna(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5040,101 +5393,101 @@ msgstr ""
 "%s\n"
 "se eliminaran PERMANENTEMENTE de la tabla. Quiere eliminar las columnas?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Lista de capas."
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Eliminar tambien la tabla ligada de atributos (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Nombre de columna"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Longitud de dato"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Manejador"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Base de datos"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Llave"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Añadir capa"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Descripción de capa"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Columna clave."
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Inserte un registro para cada categoría en la tabla."
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Necesita añadir categorías mediante el módulo v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Descripción de la tabla"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Nombre de la tabla"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Crear tabla"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Añadir capa"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Establecer predeterminado"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Eliminar capa"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Capa a eliminar"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "&Eliminar capa"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modificar capa"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modificar capa"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5142,60 +5495,60 @@ msgstr ""
 "No es posible obtener una lista de las tablas.\n"
 "Por favor utilice db.connect para establecer los parámetros de la conexión a la base de datos."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr "No ha sido posible crear la nueva tabla. Faltan el nombre de la tabla o el nombre de la columna clave."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "No ha sido posible crear la nueva tabla <%s> por que esta ya existe en la base de datos."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already exists."
 msgstr "No ha sido posible añadir la nueva capa al mapa vectorial <%(vector)s>. la capa %(layer)d ya existe."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 msgid "Field statistics"
 msgstr "Calculadora de campos"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Copiar estadísticas al portapapeles (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr "Las estadísticas no están soportadas para tablas DBF."
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 msgid "Unable to calculte statistics."
 msgstr "No es posible calcular estadísticas."
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr "No se pueden calcular las estadísticas. Número de líneas %d inválido (debe ser %d)."
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 msgid "Unable to calculte standard deviation."
 msgstr "No es posible calcular desviación estándar."
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr "Calculadora de campos <%s>"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "Cargando datos de atributos para el mapa vectorial <%s>..."
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Administrador de tabla de atributos de GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5206,182 +5559,183 @@ msgstr ""
 "\n"
 "¿Quiere crear una nueva tabla y definir un enlace al mapa vectorial <%s>?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "¿Crear tabla?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Cerrar el cuadro de diálogo después de seleccionarlas opciones"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "No se han encontrado atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Actualizar atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Definir atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Visualizar atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Recargar"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Enviar"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Columna <%(col)s>: Valor '%(value)s' necesita ser capturado como %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Desconocido"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr "Conjunto de íconos '%s' desconocido, usando predenterminado 'grass'...\n"
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "No se puede cargar el tema de iconos. Razón: %s. Saliendo de wxGUI..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "Vista 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Vista 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 msgid "No animation name selected."
 msgstr "Nombre de animación seleccionado."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 msgid "No workspace file selected."
 msgstr "No se seleccionó archivo de Entorno de trabajo."
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr "Archivo %s no encontrado"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr "Animación %d"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr "El número máximo de animaciones es %s."
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid "More animations are using one window. Please select different window for each animation."
 msgstr "Más animaciones está usando una ventana. Por favor seleccione una ventana diferente para cada animación."
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr "No se pudo mostrar la leyenda."
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr "La catidad de mapas es inconsistente, por favor revise el dato de entrada."
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr "No hay animación que exportar."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr "Preparando exportación, por favor espere..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr "%(from)s %(dash)s %(to)s"
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr "%(start)s %(unit)s"
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr "Exportando animación, por favor espere..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr "Herramienta de animación de GRASS GIS"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr "Barra de herramientas de animación"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr "Cargando datos"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr " ({c} fuera de {p})"
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr "a %(to)s"
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Conjunto de datos espacio temporales <%s> no encontrado."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr "La cantidad de mapas en el conjunto de datos espacio temporales tiene que ser el mismo."
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid "The temporal type (absolute/relative) of space-time datasets has to be the same."
 msgstr "El tipo temporal (absoluto/relativo) de conjutos de datos espacio temporales tiene que ser el mismo."
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid "The map type (point/interval) of space-time datasets has to be the same."
 msgstr "El tipo de mapa (punto/intervalo) de conjuntos de mapas espacio temporales tiene que ser el mismo."
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid "The temporal extents of maps in space-time datasets have to be the same."
 msgstr "La extensión temporal de los mapas en el conjunto de datos espacio temporales tiene que ser la misma."
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr "La cantidad de mapas a animar tiene que ser el mismo para cada serie de mapas."
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid "The number of maps to animate has to be the same as the number of maps in temporal dataset."
 msgstr "La cantidad de mapas a animar tiene que ser el miemos que el número de mapas en conjunto de datos espacio temporales."
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5390,155 +5744,155 @@ msgstr ""
 "La lectura del archivo del Entorno de trabajo <%s> falló.\n"
 "Archivo inválido, no se puede parsear el documento XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "No hay información de visualización 3d en el Entorno de trabajo <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 msgid "Please add only one layer in the list."
 msgstr "Por favor añadir solo una capa en la lista."
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 msgid "No map series nor space-time dataset is added."
 msgstr "No se han añadido series de mapas ni conjuntos de datos espacio temporales."
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 msgid "Rendering map layers"
 msgstr "Renderizando capas de mapas"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 msgid "Overlaying map layers"
 msgstr "Superponer capas de mapas"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Directorio {t} no removido."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid "It is not allowed to display data with different temporal types (absolute and relative)."
 msgstr "No está permitido visualizar datos con diferentes tipos de tiempos (absoluto y relativo)."
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr "No está permitido visualizar datos con unidades diferentes (%s)."
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid "You are going to display data with different temporal types of maps (interval and point). It is recommended to use data of one temporal type to avoid confusion."
 msgstr "Va a visualizar datos con diferentes tipos de mapas temporales (intervalo y punto). Se recomienda usar datos de un solo tipo para evitar confusiones."
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr "Topología de conjunto de datos espacio temporales %s no es válida."
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr "%s=, %s=, %s= y %s= son mutuamente excluyentes."
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr "Ajustar velocidad de la animación"
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr "Modo simple"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 msgid "Frame duration:"
 msgstr "Duración de cuadro:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr "ms"
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr "Modo temporal"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr "Unidad de tiempo:"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 msgid "Duration of time unit:"
 msgstr "Duración de unidad de tiempo:"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr "año"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr "mes"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr "día"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr "hora"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr "minuto"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr "segundo"
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr "La velocidad de la animación es demasiado alta."
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 msgid "Add new animation"
 msgstr "Añadir nueva animación"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 msgid "Edit animation"
 msgstr "Editar animación"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Avanzado"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr "arriba a la izquierda"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr "arriba a la derecha"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr "abajo a la izquierda"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr "abajo a la derecha"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr "Seleccionar vista 2D o 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 msgid "Window position:"
 msgstr "Posición de la ventana:"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr "Modo de visualización:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
@@ -5546,197 +5900,197 @@ msgstr ""
 "Para animación 3D, por favor seleccione solo un conjunto de datos espacio temporales\n"
 "o una serie de capas de mapas."
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 msgid "3D view parameters"
 msgstr "Parámetros de la visualización 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr "Archivo de Entorno de trabajo:"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr "Escojer archivo Entorno de trabajo para importar parámetros de vista 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr "Parámetro para animación:"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr "Animar cambio de región (solo en vista 2D)"
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 msgid "Start region:"
 msgstr "Región inicial:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 msgid "End region:"
 msgstr "Región final:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 msgid "Zoom value:"
 msgstr "Valor de acercamiento:"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr "Distancias N-S/E-W en unidades de mapa usadas para reducir gradualmente la región."
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr "Norte-Sur:"
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr "Este-Oeste:"
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr "Solo se acepta una de serie o conjunto de datos espacio temporales en el modo 3D."
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 msgid "No map series or space-time dataset added."
 msgstr "No se han añadido series de mapas o conjuntos de datos espacio temporales."
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr "La información de la región no está completa"
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr "Añadir, editar o eliminar animaciones"
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 msgid "List of animations"
 msgstr "Lista de animaciones"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr "Editar"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr "La cantidad máxima de animaciones es %d."
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr "Exportar animación"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Decoraciones"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Exportar"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 msgid "Add time stamp"
 msgstr "Añadir marca de tiempo"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Añadir imagen"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Añadir texto"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr "Añadir marca temporal"
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr "Añadir imagen o texto de decoración por uno de los botones de arriba."
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr "Configuración de tipo de letra:"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr "Texto de muestra"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr "Archivo de imagen:"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 msgid "Choose image file"
 msgstr "Escoger archivo de imagen"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr "Posición como porcentaje de coordenadas de la pantalla (X: 0, Y: 0 es arriba a la izquierda):"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr "secuencia de imágenes"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "GIF animado"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr "SWF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr "Exportar a:"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Prefijo del archivo:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr "animación_"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Formato del archivo:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Directorio:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr "Seleccionar directorio para exportación"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr "Archivo GIF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 msgid "Choose file to save animation"
 msgstr "Escoger archivo donde guardar animación"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr "Archivo SWF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
@@ -5746,200 +6100,200 @@ msgstr ""
 "Por favor instálelo primero y asegúrese que\n"
 "esté en la variable RUTA."
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr "Archivo AVI:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr "Codec de video:"
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr "Opciones adicionales:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. Options depend on ffmpeg version."
 msgstr "Considere el añadir '-sameq' o '-qscale 1' si no está satisfecho con la calidad del video.Las opciones dependen de la versión ffmpeg."
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr "Velocidad de cuadros actual: %.2f fps"
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr "Archivo %s no encontrado."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr "Falta archivo de imagen de decoración."
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr "Directorio %s no encontrado."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 msgid "Export directory is missing."
 msgstr "Falta directorio para exportación."
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr "Falta archivo de exportación"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr "Marca de tiempo"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 msgid "Add space-time dataset layer"
 msgstr "Añadir capa de conjunto de datos espacio temporales"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 msgid "Multiple raster maps"
 msgstr "Múltiples mapas ráster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 msgid "Multiple vector maps"
 msgstr "Múltiples mapas vectoriales"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 msgid "Multiple 3D raster maps"
 msgstr "Múltiples mapas ráster 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 msgid "Space time raster dataset"
 msgstr "Conjunto de datos ráster espacio temporales"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 msgid "Space time vector dataset"
 msgstr "Conjunto de datos vectoriales espacio temporales"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 msgid "Space time 3D raster dataset"
 msgstr "Conjunto de datos raster 3D espacio temporales"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 msgid "Input data type:"
 msgstr "Tipo de datos de entrada:"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 msgid "Select raster/vector maps."
 msgstr "Seleccionar mapas ráster/vectoriales."
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr "Por favor primero seleccione mapas o conjuntos de datos"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 msgid "Animation Tool settings"
 msgstr "Configuración de herramienta de Animación"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Color de fondo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr "Cantidad de procesos paralelos:"
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 msgid "Text foreground color:"
 msgstr "Color de frente del texto:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 msgid "Text background color:"
 msgstr "Color de fondo del texto:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr "Tiempo"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 msgid "Absolute time format:"
 msgstr "Formato de tiempo absoluto:"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid "Click and then press key up or down to preview different date and time formats. Type custom format string."
 msgstr "Haga click y presione las teclas arriba o abajo para previsualizar diferentes formatos de fecha y hora. Ingrese texto de formato personalizado."
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr "Conozca más acerca de las opciones de formato"
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr "Visualizar instancias sin datos"
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid "When animating instant-based data which have irregular timestamps you can display 'no data frame' (checked option) or keep last frame."
 msgstr "Cuando se anima datos basados en instantes que tienen marcas de tiempo irregulares puede visualizar 'cuadros sin datos' (opción marcada) o dejar el último cuadro."
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr "No válido"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 msgid "Change animation speed"
 msgstr "Cambiar velocidad de la animación"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr "Reproducir hacia adelante"
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr "Reproducir hacia atrás"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Detener"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pausa"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr "Repetir"
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr "Reproducir hacia adelante y hacia atrás"
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr "Añadir, editar o remover animación"
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr "Añadir conjunto de datos espacio temporales o series de capas de mapas"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr "Añadir conjunto de datos espacio temporales o series de capas de mapas para animación"
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Valor insertado no válido. Operación cancelada."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr "Editar punto"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 msgid "Unable to perform analysis."
 msgstr "No se puede realizar el análisis."
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis tool.\n"
@@ -5948,45 +6302,45 @@ msgstr ""
 "Mapa temporal '%s' con el resultado fue cambiado por fuera de la herramienta de análisis de redes vectoriales.\n"
 "Es posible que el resultado mostrado no corresponda con el resultado original del análisis."
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr "Resultados modificados fuera"
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 msgid "Map can be created only in current mapset"
 msgstr "El mapa puede ser creado solo en el Directorio de mapas actual"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "El mapa vectorial %s ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 msgid "Overwrite vector map"
 msgstr "Sobreescribir mapa vectorial"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr "Mapa vectorial con los resultados del análisis no existe."
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr "Mapa puede ser guardado solo en el Directorio de mapas actual"
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr "Por favor escoja '%s' y '%s' puntos."
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr "Por favor escoja al menos dos puntos."
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis tool.\n"
@@ -5995,11 +6349,11 @@ msgstr ""
 "Mapa de entrada '%s' para análisis fue cambiado por fuera de la herramienta de análisis de redes vectoriales.\n"
 "Es posible que La columna de topología no corresponda con la situación modificada."
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr "Entrada modificada fuera"
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
@@ -6008,20 +6362,20 @@ msgstr ""
 "Mapa temporal %s ya existe.\n"
 "¿Quiere continuar el análisis y sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 msgid "Unable to use ctypes. \n"
 msgstr "No es posible usar ctypes. \n"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
@@ -6030,497 +6384,498 @@ msgstr ""
 "Mapa temporal '%s' fue cambiado fuera de la herramienta de análisis vectorial.\n"
 "¿Quiere realmente activar snapping y sobreescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr "Sobreescribir mapa"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr "Módulo <%s> no soporta costos de vueltas."
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Mapa vectorial '%s' no existe."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 msgid "Vector map was not chosen."
 msgstr "No se escogió mapa vectorial."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 msgid "arc layer"
 msgstr "capa arc"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 msgid "node layer"
 msgstr "capa de  nodos"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Administrar capas."
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr "%s '%s' escogido no existe en mapa vectorial '%s'.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr "Seleccionar %s existente.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid "Chosen column '%s' does not exist in attribute table of layer '%s' of vector map '%s'.\n"
 msgstr "La columna '%s' seleccionada no existe en la tabla de atributos de la capa '%s' del mapa vectorial '%s'.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "tipo"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "topología"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Punto de inicio"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Punto final"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "nuevo punto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr "arco"
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 msgid "Node cost column:"
 msgstr "Columna de costo de nodos:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "nodo"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr "Camino más corto %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Punto final"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr "Representante de comercio %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr "Flujo máximo %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr "Punto de origen"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr "Punto de llegada"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr "Subredes para centros más cercanos %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Crea un árbol de Steiner para la red y terminales dadas %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr "Distancia más corta vía la red %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr "Isolíneas de costo %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 msgid "Overwrite map layer"
 msgstr "Sobreescribir capa de mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Herramienta de GRASS GIS para Analisis redes"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Barra de herramientas de visualización de GCP"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr "Barra de herramientas de análisis"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr "Puntos para el análisis:"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr "Configuración de análisis:"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Puntos"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr "Distancia máxima del punto a la red:"
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 msgid "Iso lines:"
 msgstr "Isolíneas:"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Salida."
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parámetros"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 msgid "Add vector map into layer tree"
 msgstr "Añadir el mapa vectorial al árbol de capas"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr "Tabla de entrada"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr "Tablas resultantes"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr "Cargando tablas..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Cargando datos."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 msgid "Input vector map does not exist."
 msgstr "Mapa vectorial de entrada no existe."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr "Analizando..."
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Configuración"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr "Calculando nodos..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 msgid "Other settings"
 msgstr "Otras configuraciones"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr "Estilo de punto:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr "Estilo de los resultados del análisis:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, python-format
 msgid "Color table style %s:"
 msgstr "Estilo de la tablas de color %s:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr "Invertir colores %s:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr "Color de línea:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr "Color para los puntos no utilizados:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr "Color para punto de inicio/desde/fuente/usado:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr "Color para puntos de término/a/destino:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr "Color para los puntos seleccionados:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr "Tamaño del punto:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr "Anchura del punto:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Umbral de ajuste."
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr "Cantidad máxima de resultados en la historia:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Se ha creado el nuevo mapa vectorial <%s>"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr "Guardar resultados del análisis"
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr "Editar costos de vueltas en intersecciones"
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr "Definir costo global de vuelta"
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr "Insertar puntos a partir del Visualizador de Mapas"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr "Activar modo de edición para vueltas"
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr "Activar modo de edición global para vueltas"
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr "Añadir nuevo punto"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 msgid "Delete selected point"
 msgstr "Borrar punto seleccionado"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr "Ejecutar el análisis"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr "Ir a resultado anterior del análisis"
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr "Ir a resultado siguiente del análisis"
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr "Mostrar resultados del análisis"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr "Guardar resultado temporal"
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr "Configuraciones del análisis vectorial de redes"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Mostrar manual"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr "Análisis disponibles"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Renderizar"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Activar/desactivar renderizado automático"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Mostrar la región computacional"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Mostrar la extensión de cálculo"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid "Show/hide computational region extent (set with g.region). Display region drawn as a blue box inside the computational region, computational region inside a display region as a red box)."
 msgstr "Mostrar / ocultar la extensión de la región de cálculo (definida mediante g.region). La región de visualización se muestra como un cuadro de color azul dentro de la región de cálculo, el área de cálculo se muestra como un cuadro rojo."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Modo de visualización"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr "Alinear extensión de la región basado en el tamaño del visualizador"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid "Align region extent based on display size from center point. Default value for new map displays can be set up in 'User GUI settings' dialog."
 msgstr "Aliear extensión de la región basado en el tamaño del visualizador a partir del punto central. El valor predeterminado de la nueva visualización de mapas puede ser definida en el cuadro diálogo 'Configuración de la GUI'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Mostrar resolución"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Restringir la resolución de pantalla a la configuración de cálculo"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid "Constrain display resolution to computational region settings. Default value for new map displays can be set up in 'User GUI settings' dialog."
 msgstr "Restringir la resolución de pantalla a la configuración de la región de cálculo. El valor predeterminado para mostrar el nuevo mapa, se puede configurar en el diálogo 'Configuración de la interfaz gráfica de usuario'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Escala de mapa"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid "As everyone's monitors and resolutions are set differently these values are not true map scales, but should get you into the right neighborhood."
 msgstr "Debido a que cada monitor y resolución están definidos de modo diferente estos valores no son verdaderas escales en el mapa, pero deben llevarte al vecindario correcto."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Ir a"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Proyección no definida (comprobar la configuración)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Error en la proyección (comprobar configuraciones)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Proyección"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Utilizar proyección definida"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid "Reproject coordinates displayed in the statusbar. Projection can be defined in GUI preferences dialog (tab 'Projection')"
 msgstr "Reproyectar las coordenadas mostradas en la barra de estado. La proyección se puede definir en el diálogo de preferencias de la GUI (pestaña 'Proyección')"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MÁSCARA"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Mostrar geometría"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Extensión"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr "Región computacional"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "Visualización de mapas - SIG GRASS"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr "No es posible obtener la versión de GRASS\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS %(version)s Visualizador de mapas: %(id)s - Localización: %(loc)s@%(mapset)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6529,11 +6884,11 @@ msgstr ""
 "No es posible iniciar el digitalizador vectorial wxGUI.\n"
 "Detalles: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "Barra de herramientas del Digitalizador vectorial"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6548,103 +6903,109 @@ msgstr ""
 "\n"
 "Detalles: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Iniciando modo de vista 3D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr "Por favor espere, descargando datos..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr "Volver al modo de vista 2D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Digitalizar"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr "No se ha seleccionado ninguna capa de mapa. Operación cancelada."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr "d.to.rast solo puede ser usado en el modo 2D."
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr "No se pudo correr d.to.rast:\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Mapa vectorial <%s> abierto para edición -saltado."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr "No se pudo consultar mapa(s) <{maps}>. Revise base la configuración de la base de datos y topología."
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Añadir capa de texto"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr "Definir región computacional a partir de la visualización"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 msgid "Set computational region extent interactively"
 msgstr "Definir extensión de la región computacional de manera interactiva"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 msgid "Set computational region from named region"
 msgstr "Establecer región computacional desde región nombrada"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr "Guardar región computacional con nombre"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Barra de herramientas del Digitalizador vectorial"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr "Módulo GRASS '%s' no encontrado. No es posible abrir la ventana de visualización del mapa."
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Marco del mapa"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Vista del mapa"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr "Valor desconocido %s de parámetro de prueba."
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -6652,173 +7013,193 @@ msgstr ""
 "Hubo un problema al imprimir.\n"
 "¿Quizás la actual impresora no está configurada correctamente?"
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr "Comando %s no soportado."
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "No se puede leer cmdfile '%(cmd)s'. Detalles: %(det)s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr "Iniciar visualización de mapa <%s>..."
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Falló la lectura del archivo %s."
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Detener visualización de mapa <%s>..."
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
+#, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Seleccione los objetos espaciales vectoriales."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Georrectifica mapas raster y vectoriales."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
 msgid "Show/hide scale bar"
 msgstr "Mostrar/ocultar barra de escala"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Mostrar/ocultar leyenda"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr "Mostrar/ocultar flecha de Norte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analizar mapa"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Medir, realizar perfiles, realizar histogramas..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Medir distancia"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr "Medir área"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Mapa de perfil de superficie"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Crear gráfica de dispersión bivariada de mapas ráster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Crear histograma de mapa ráster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr "Herramienta vectorial de análisis de redes"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Rotar escena 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Arrastrar con el ratón para rotar escena 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "Modo volar a través"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr "Arrastrar ratón, mantenga presionado Ctrl para modo distinto o Shift para acelerar"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Pulsar con el ratón para acercar"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Hacer click con el ratón para alejarse"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Modo de vista 3D no disponible"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Razón: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Digitalizador vectorial no disponible"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid "Note that the wxGUI's vector digitizer is currently disabled (hopefully this will be fixed soon). Please keep an eye out for updated versions of GRASS. In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr "Tenga en cuenta que el digitalizador vectorial wxGUI's se encuentra actualmente deshabilitado (se espera que se solucione pronto). Por favor esté alerta a versiones actualizadas de GRASS. De mientras puede utilizar \"v.digit\" del menú Develop Vector"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Salir del digitalizador"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr "El archivo ráster %s ya existe, por favor cambie el nombre"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr "Mapa ráster no creado. Por favor de nuevo la región."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr "Mapa ráster no creado. Dibuje otra vez la región."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr "Dibujar marco de muestreo"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr "Arrastre el marco muestral haciendo click y arrastrando"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr "Dibujar rectángulo de muestreo"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr "Dibuje el rectángulo de muestreo haciendo click y arrastrando"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr "Dibujar círculo de muestreo"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr "Dibujar el radio de los circulos de muestreo haciendo click y arrastrando"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr "Dibujar unidades de muestreo"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr "Dibujar región de muestreo por polígono. Doble click derecho para concluir"
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 msgid "Modify the configuration file"
 msgstr "Cambiar el archivo de configuración"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Ver y modificar el archivo de configuración '{name}'"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
@@ -6827,68 +7208,68 @@ msgstr ""
 "¿Está seguro de que quiere modificar el archivo de configuración r.li {name}?\n"
 "Puede romper el archivo de configuración..."
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr "AVISO"
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr "Configuración de GRASS GIS para módulos r.li"
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr "Archivo de configuración de áreas muestrales disponible"
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr "Remover archivo de configuración"
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "Crear"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr "Crear un archivo de configuración nuevo"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Renombrar"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr "Renombrar un archivo de configuración"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr "Ver/Editar"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 msgid "View and edit a configuration file"
 msgstr "Ver y editar un archivo de configuración"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "¿Quiere remover archivo de configuración <%s> de r.li?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 msgid "Remove new r.li configuration file?"
 msgstr "¿Remover nuevo archivo de configuración de r.li?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr "Debe seleccionar un archivo de configuración"
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid "Set the new name for %s \"                                            \"configuration file"
 msgstr "Definir el nuevo nombre para %s \" \"archivo de configuración"
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr "Renombrar archivo de configuración"
 
@@ -6896,112 +7277,112 @@ msgstr "Renombrar archivo de configuración"
 msgid "Create new configuration file for r.li modules"
 msgstr "Crear nuevo archivo de configuración para módulos r.li"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "¿Quiere crear archivo de configuración <%s> de r.li?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 msgid "Create new r.li configuration file?"
 msgstr "¿Crear nuevo archivo de configuración de r.li?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Asistente de r.li.setup cancelado. Archivo de configuración no creado."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr "Seleccionar mapas y definir nombre"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 msgid "Name for new configuration file to create"
 msgstr "Nombre de nuevo archivo de configuración a crear"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr "Mapa ráster a utilizar para seleccionar áreas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr "Mapa vectorial a utilizar para seleccionar áreas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 msgid "Vector map layer to use to select areas"
 msgstr "Capa de mapa vectorial a usar para seleccionar áreas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr "Definir región muestral (región para analizar)"
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Remover la capa de mapa."
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 msgid "Keyboard setting"
 msgstr "Configuraciones del teclado"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr "Dibujar marco de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr "El archivo de configuración %s ya existe, por favor cambie el nombre"
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr "Vectorial %s no encontrado, por favor seleccione otro vectorial"
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr "Vectorial %s no contiene áreas, por favor seleccione otro vectorial"
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr "Vectorial %s no tiene tablas conectadas, por favor seleccione otro vectorial"
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 msgid "Insert sampling frame parameter"
 msgstr "Insertar parámetro de marco muestral"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr "Columna de la esquina superior izquierda"
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr "Fila de la esquina superior izquierda"
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr "Longitud de fila del marco de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 msgid "Insert sampling areas"
 msgstr "Insertar áreas muestrales"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Regiones"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr "Unidades muestrales"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Ventana movil"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
@@ -7009,355 +7390,369 @@ msgstr ""
 "Seleccionar áreas desde el\n"
 "mapa vectorial superpuesto"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 msgid "Choose a method"
 msgstr "Escoger un método"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr "Usar teclado para ingresar área de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr "Use el ratón para dibujar áreas de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr "Esta opción aún no está soportada"
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 msgid "Number of regions to draw:"
 msgstr "Cantidad de regiones a dibujar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "¿Quiere sobreescribir los mapas temporales existentes si es que hay?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 msgid "Do you want to check vector areas?"
 msgstr "¿Quiere revisar las áreas vectoriales?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 msgid "Select if use area by area"
 msgstr "Seleccionar si quiere usar área por área"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr "Se usarán todos los elementos"
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr "Analizando todos los elementos vectoriales..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 msgid "Analysing vector"
 msgstr "Analizando vector"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr "Se están analizando todos los elementos."
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr "Sucedió un error"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 msgid "Draw sampling regions"
 msgstr "Dibuje regiones de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 msgid "Draw sample region "
 msgstr "Dibuje la región de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr "Dibujar región para ventanas móviles"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr "Seleccione unidades de muestreo desde el teclado"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 msgid "Select type of shape"
 msgstr "Seleccionar tipo de forma"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr "Círculo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 msgid "Width size (in cells)?"
 msgstr "¿Anchura (en celdas)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr "¿Tamaño de radio (en metros)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr "¿Anchura (en celdas)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 msgid "Name of the circle mask"
 msgstr "Nombre de la máscara circular"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr "Seleccione el método de distribución de unidades de muestreo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr "Aleatorio que no se sobrelape"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr "Sistemático continuo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr "Aleatorio estratificado"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr "Sistemático no continuo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr "Centrado sobre los sitios"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr "¿Qué cantidad de unidades de muestreo se van a utilizar?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 msgid "Insert number of row strates"
 msgstr "Inserte la cantidad de estratos de filas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr "Inserte la cantidad de estratos de columnas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr "Insertar distancia entre unidades"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 msgid "Set sample units"
 msgstr "Definir unidades muestrales"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr "Establecer ventanas móviles"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 msgid "Draw sampling units"
 msgstr "Dibujar unidades muestrales"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 msgid "Number of sampling area to draw:"
 msgstr "Cantidad de áreas muestrales a dibujar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr "Dibujar muestra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr "Seleccione áreas muestrales"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr "¿Esta área está bien?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 msgid "Select sample area "
 msgstr "Seleccione área muestral"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid "The raster map <%s> already exists. Please remove or rename the maps with the prefix '%s' or select the option to overwrite existing maps"
 msgstr "El mapa ráster <%s> ya existe. Por favor remueva o renombre los mapas con el prefijo '%s' o seleccione la opción de sobreescribir mapas existentes"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr "El polígono parece tener 0 áreas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 msgid "Select sample area 1 of "
 msgstr "Seleccionada área muestral 1 de"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Resumen"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr "Nombre del archivo de configuración:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr "Nombre de ráster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr "Nombre de vectorial:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr "Tipo de región:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr "Tipo de área muestral:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Contornos de región."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr "Tipo de forma:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr "Tamaño del radio:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 msgid "Name circle mask:"
 msgstr "Nombre la máscara circular:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 msgid "Width size:"
 msgstr "Anchura:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 msgid "Height size:"
 msgstr "Anchura:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr "Método de distribución:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr "Cantidad de unidades muestrales:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr "Distancia entre unidades:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 msgid "Number row strates:"
 msgstr "Número de estratos de filas:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 msgid "Number column strates:"
 msgstr "Columna estratos de columnas:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Bienvenido a la Consola de comandos Interactiva de Python wxGUI %s"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Escribir %s para más información relacionada con el scripting de GRASS."
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Escriba %s para añadir vectorial o ráster al árbol de capas."
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Eliminar todo el texto de la consola de comandos UNIX"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Simple."
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Mapa ráster o vectorial <%s> no encontrado"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Mapa ráster <%s> añadido"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Mapa vectorial <%s> añadido"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Administrador de capas de GRASS GIS %s"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Barra de herramientas del Entorno de trabajo"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Barra de herramientas de datos"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Barra de herramientas "
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Barra de herramientas de vectoriales"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr "Barra de herramientas de la vista 3D"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Renombrar visualizador de mapas"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Capas de mapas"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Capas"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Consola de comandos"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "Buscar módulos"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "Módulos"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Consola de comandos Python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7368,107 +7763,93 @@ msgstr ""
 "\n"
 "¿Quiere cambiar a nueva Localización?"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "¿Cambiar a nueva Localización?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"La Localización actual es <%(loc)s>.\n"
-"El actual Directorio de mapas es <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Seleccionar modelo a ejecutar"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "¿Desea guardar los cambios en el Entorno de trabajo?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "¿Desea guardar la configuración actual en un archivo de Entorno de trabajo?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Cerrar visualizador de mapas %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid "Command '%s' not yet implemented in the WxGUI. Try adding it as a command layer instead."
 msgstr "El comando '%s' no está implementado todavía en WxGUI. Intentar añadirlo como capa de comando."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "La capa del mapa seleccionado no es vectorial."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Solo se permiten editar mapas vectoriales del Directorio de mapas actual."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Seleccionar archivo script a ejecutar"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Script Python  (*.py)|*.py|Script Bash (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid "Due to the limitations of your operating system, the script path cannot contain certain non-ascii characters. Please rename the script or move it to a different location."
 msgstr "Debido a limitaciones de su sistema operativo, la ruta del script no puede contener ciertos caracteres no-ascii. Por favor renombre el script o muévalo a una ubicación distinta."
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "El  script '%s' no existe. Operación cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid "Script <%s> is not executable. Do you want to set the permissions that allows you to run this script (note that you must be the owner of the file)?"
 msgstr "El script <%s> no es ejecutable. ¿Quieres establecer los permisos que te permitan correr este script (debes ser el propietario del archivo)?"
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr "¿Establecer permiso?"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr "No ha sido posible definir permiso. Operación cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this directory to GRASS_ADDON_PATH?"
 msgstr "Directorio '%s' no está definido en GRASS_ADDON_PATH. ¿Quiere añadir este directorio a GRASS_ADDON_PATH?"
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr "¿Actualizar ruta de Addons?"
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Lanzando script '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr "No se ha dado ninguna Localización/Directorio de mapas. Operación cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr "No se ha seleccionado ningún Directorio de mapas. Operación cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "El Directorio de mapas actual es <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
@@ -7477,114 +7858,116 @@ msgstr ""
 "Entorno de trabajo cambiado a:\n"
 "\"%s\""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr "Cambiar entorno de trabajo actual para esta GUI."
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 msgid "Usage: cd [directory]"
 msgstr "Uso: cd [directory]"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr "Sin parámetros abre un cuadro de diálogo."
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid "If ~ (tilde) is present as the first directory on the path, it is replaced by user's home directory."
 msgstr "Si ~ (tilde) está presente como el primer directorio en la ruta, será reemplazada por el directorio home del usuario."
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr "Más de un parámetro dado."
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr "Seleccionar un directorio trabajo"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "Información del sistema"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Versión de GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr "versión desconocida"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
-msgstr "Revisión SVN de GRASS"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
+msgstr "Revisión de Librería SIG:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr "Construir fecha"
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Constructor SQL."
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
-msgstr "Construir plataforma"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
+msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Plataforma"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid "Current workspace is not empty. Do you want to store current settings to workspace file?"
 msgstr "El Entorno de trabajo actual no está vacía. ¿Desea guardar los ajustes actuales en un archivo de Entorno de trabajo?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "¿Crear un nuevo Entorno de trabajo?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Seleccione Entorno de trabajo"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "Archivo de Entorno de trabajo GRASS  (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Por favor espere, cargando Entorno de trabajo..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Seleccione archivo GRC a cargar"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Antiguo archivo de Entorno de trabajo de GRASS (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Seleccione archivo donde guardar la configuración del Entorno de trabajo actual"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr "El archivo de Entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Guardar Entorno de trabajo"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "La escritura de las configuraciones actuales al archivo del Entorno de trabajo ha fallado."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Escriba una nuevo nombre:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS {version} Visualizador de mapas: {name} - Localización: {loc}"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7595,32 +7978,32 @@ msgstr ""
 "\n"
 "Razón: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 msgid "Unable to start Timeline Tool."
 msgstr "No ha sido posible iniciar Herramienta de línea de tiempo."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 msgid "Unable to start Temporal Plot Tool."
 msgstr "No es posible iniciar Herramienta de gráfica temporal."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Añadir capas de mapa seleccionadas al árbol de capas"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Tipo de capa de mapa no soportada <%s>."
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid "Note that cell values can only be displayed for regions of less than 10,000 cells."
 msgstr "Note que los valores de las celdas solo pueden ser visualizados para regiones con menos de 10,000 celdas."
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "opacidad:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7631,49 +8014,47 @@ msgstr ""
 "%s\n"
 " del árbol de capas?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "¿Desea remover la(s) capa(s) de mapa seleccionada(s) del árbol de capas?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Remover la capa de mapa"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Cerrar la Interfaz gráfica de usuario GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "No fue posible salir de la línea de comandos de GRASS: PID desconocido"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr "No se ha seleccionado ninguna capa de mapa. Operación cancelada."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid "Display resolution is currently not constrained to computational settings. It's suggested to constrain map to region geometry. Do you want to constrain the resolution?"
 msgstr "La resolución del visualizador no está constreñida a la configuración computacional. Se sugiere constreñir el mapa a la región geométrica. ¿Quiere constreñir la resolución?"
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr "¿Constreñir mapa a la región geométrica?"
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Importar datos ráster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Enlazar datos ráster externos"
 
@@ -7687,12 +8068,14 @@ msgid "Set raster output format"
 msgstr "Definir formato de raster de sálida"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Importar datos vectoriales"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Enlazar datos vectoriales externos"
 
@@ -7713,7 +8096,7 @@ msgstr "Importar datos de servidor WMS"
 msgid "Add command layer"
 msgstr "Añadir capa de comandos"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Salir"
@@ -7763,8 +8146,8 @@ msgid "Add rhumbline layer"
 msgstr "Añadir capa de Línea de rumbo de navegación o loxódromo (loxodrome)."
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Añadir capa de mapa ráster 3D"
 
@@ -7784,332 +8167,326 @@ msgstr "Modo de edición"
 msgid "Background vector map"
 msgstr "Mapa vectorial de fondo"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Capas de mapas"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Cambiar nivel de opacidad"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "Propiedades de la vista 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Acercamiento al mapa o mapas seleccionados"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Establecer la región de cálculo a partir del (los) mapa(s) seleccionado(s)."
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr "Formatos comunes de exportación"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr "Exportar PostGIS"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 msgid "Create pack"
 msgstr "Crear paquete"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr "Hacer una copia en el Directorio de mapas actual"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Establecer la tabla de color"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Muestra los datos del atributo"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Comenzar edición"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Terminar la edición"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Reconstruir topología"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Acercamiento al (los) mapa(s) seleccionado(s) (se ignoraran los valores nulos)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "o introducir los valores interactivamente"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histograma"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Estadísticas univariadas de ráster"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 msgid "Report raster statistics"
 msgstr "Reportar estadísticas de ráster"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Perfil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr "Guardar capa de servicio web"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "No se puede crear el perfil del mapa ráster."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid "Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII characters excluding %(chars)s and space."
-msgstr "Nombre <%(name)s> no es válido para un mapa de GRASS. Por favor use solamente caracteres ASCII excluyendo %(chars)s y espacio."
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "Mapa ráster 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Tipo de mapa no soportado <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Escriba el nombre para el nuevo %s en el Directorio de mapas actual:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Hacer una copia de %s <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "%s <%s> ya existe en el Directorio de mapas actual. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "¿Sobreescribir?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "No fue posible hacer una copia de <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "No fue posible hacer una copia de <%s>. El Directorio de mapas <%s> no es el Directorio de mapas actual."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "No es posible mostrar el histograma del mapa ráster. No se definió ningún nombre de mapa."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Definir opacidad de <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Grupo de capas:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Pulse aquí para editar la configuración de la capa"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(haga doble clic para establecer las propiedades)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Por favor espere, actualizando datos..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Iniciar nueva visualización de mapa"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Crear nuevo Entorno de trabajo (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Abrir archivo de Entorno de trabajo existente (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Guardar Entorno de trabajo actual a archivo (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Añadir varias capas de mapas ráster o vectoriales (Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Añadir capa de mapa ráster (Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Añadir diversas capas de mapas ráster (RGB, HIS, relieve sombreado...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Añadir capa de mapa vectorial (Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Añadir varias capas  de mapa vectoriales (temáticas, tablas...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr "Añadir servicio web de capas (WMS, WMTS, NASA OnEarth)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Añadir grupo"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr "Añadir varias superposiciones"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Eliminar capa(s) de mapa(s) seleccionadas del árbol de visualización"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importar/enlazar datos ráster o vectoriales"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Calculadora de mapas ráster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Modelador Gráfico"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Georrectificador"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Diseñador cartográfico"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr "Lanzar script definido por el usuario"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "Configuración de la GUI"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Manual de GRASS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr "Editar mapa vectorial seleccionado"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr "Mostrar atributos del mapa vectorial seleccionado"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Generar comando para m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr "Generar comando para m.nviz.image basado en el estado actual"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr "Configuraciones de modo de vista 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr "Mostrar cuadro de diálogo de configuraciones del modo de visualización 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr "Mostrar manual de modo de visualización 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid "This module requires the NumPy module, which could not be imported. It probably is not installed (it's not part of the standard Python distribution). See the Numeric Python site (http://numpy.scipy.org) for information on downloading source or binaries."
 msgstr "Este módulo requiere el módulo NumP, que no pudo ser importado. Probablemente no está instalado (no es parte de la distibución estándar de Python). Ver el site Numérico de Python (http://numpy.scipy.org) para más información sobre la fuente de descarga o binarios."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "Herramienta GRASS para Análisis de Perfil"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Perfil de"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Distancia (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Distancia a lo largo de un transecto"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Valores de celda"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr "No todos los puntos del perfil están dentro de la región computacional."
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Valores del ráster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Para crear el perfil, debe dibujar un transecto en la ventana de presentación de los mapas ."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "No hay algo que perfilar"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr "Escoger prefijo para archivo(s) donde se guardarán los valores del perfil..."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "Valor separado por comas (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "¿Sobreescribir archivo?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
@@ -8118,7 +8495,7 @@ msgstr ""
 "No es posible abrir el archivo <%s> para escribir.\n"
 "Razones: %s"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
@@ -8127,55 +8504,55 @@ msgstr ""
 "%d archivos creados:\n"
 "%s"
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr "No se generaron archivos."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr "Estadísticas para perfil(es)"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr "Herramienta de gráfica de dispersión bivariada de GRASS"
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr "Gráfica de dispersión bivariada"
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr "Valores de las celdas ráster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr "Nada que graficar."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 msgid "At least 2 raster maps must be specified"
 msgstr "Al menos 2 mapas ráster deben ser especificados"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr "Gráfica de dispersión bivariada de"
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr "Valores de las celdas ráster <%s>"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ": %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Regresión para gráfica(s) de dispersión"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
@@ -8184,464 +8561,472 @@ msgstr ""
 "Ecuación de regresión de mapa ráster <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr "Dibujar/redibujar gráfica"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Para procesar el trazo del perfil, dibuje el transecto en la ventana de despliegue del mapa."
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr "Opciones de gráfica"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr "Estadísticas de gráfica"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Guardar datos del perfil en archivo CSV"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr "Salir de la herramienta de gráfica"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Configuración del texto"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr "Configuración la gráfica"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Este elemento todavía no es funcional"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "En construcción"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Herramienta para histogramas de GRASS GIS"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "Histograma de"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr "Conteo de celdas"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histograma del grupo de imágenes <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Crear histograma de mapa ráster <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 msgid "Histogram of selected raster maps"
 msgstr "Histograma de mapas ráster seleccionados"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr "Valores de celdas ráster %s"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr "Porcetaje del total de celdas"
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Área"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr "Estadísticas para mapa(s) de los que se hicieron los histogramas"
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Estadísticas para mapa ráster <%s>"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr "Seleccione el mapas ráster para perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr "Seleccione el mapa(s) ráster para perfil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Seleccione pares de mapas ráster para gráfica de dispersión"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr "Seleccionar pares de mapas ráster para las gráficas de dispersión bivariadas:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "C&opiar"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Copiar las estadísticas de la regresión al portapapeles (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr "Estadísticas de la regresión copiadas al portapapeles"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr "Seleccione un mapa ráster o grupo de imágenes para histograma"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr "Histograma de un solo mapa ráster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr "Histogramas del grupo de imágenes"
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Seleccionar mapa ráster:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr "Seleccionar grupo de imágenes:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr "Tipo de histograma"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr "El grupo seleccionado debe estar en el Directorio de mapas actual"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Título del perfil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Tamaño del tipo de letra del título (puntos):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "Etiqueta X-axis:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Etiqueta del eje Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Tamaño del tipo de letra de la etiqueta (puntos):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Familia de fuentes:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Peso:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Aplicar cambios para la sesión actual y cerrar diálogo"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "La configuración ha sido guardada en el archivo '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "No se ha seleccionado alguna capa de mapas."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr "Mapa/imagen graficada"
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr "Configuración para el mapa seleccionado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Color de línea"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Configuración de los marcadores del segmento de transecto."
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr "Puntos de la gráfica de dispersión"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Configuración de ejes"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Eje X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Eje Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Escala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr "Escalamiento automático de los ejes, cambiar máximo y mínimo, o que la escala sea igual al rango de los datos (min)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Mínimo personalizado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Máximo personalizado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 #, fuzzy
 msgid "Log scale"
 msgstr "Rescalar"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Configuración avanzada"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Color de la rejilla."
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Mostrar rejilla"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Tamaño de fuente de la leyenda."
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Mostrar la leyenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "La configuración del perfil ha sido guardada en el archivo '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package to be installed. {}"
 msgstr "La herramienta de gráfica temporal necesita que el paquete \"matplotlib\" (mathplotlib-python) esté instalado. {}"
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Herramienta de GRASS GIS de gráfica temporal"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 msgid "Raster temporal dataset (strds)"
 msgstr "Conjunto de datos ráster temporales (strds)"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr "Coordenadas X y Y separadas por comas:"
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr "Las coordenadas pueden ser obtenidas por ejemplo haciendo click derecho en el visualizador de mapas."
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr "STRDS"
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
-msgstr "Datos vectoriales temporales  (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 msgid "Select attribute column"
 msgstr "Seleccionar columna de atributos"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 msgid "Select category of vector(s)"
 msgstr "Seleccionar categoría de vectorial(es)"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr "STVDS"
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Dibujar"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Ayuda"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+msgid "Invalid input coordinates"
+msgstr "Coordenadas de entrada no válidas"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Conjunto de datos <%s> no encontrado en base de datos temporal"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid "Datasets have different temporal type (absolute x relative), which is not allowed."
 msgstr "Conjuntos de datos tienen diferente tipo de tiempo (absoluto x relativo), lo cual no está permitido."
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr "Los conjuntos de datos tienen diferentes unidades de tiempo lo cual no está permitido."
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr "La categoría {ca} no está en el mapa vectorial {ma} y será usada"
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid "Both coordinates and categories are set, coordinates will be used. The use categories remove text from coordinate form"
 msgstr "Se definieron tanto las coordenadas como las categorías, se usarán las coordenadas. El uso de categorías elimina el texto de coordenada de"
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr "Con conjunto de datos vectoriales temporales debe seleccionar una columna de atributos"
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr "La cantidad de capas vectoriales y mapas en el conjunto de datos vectoriales es distinta"
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr "No hay conexión entre el mapa vectorial {vmap} y la capa {la}"
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr "Problemas al obtener los datos del conjunto de datos ráster temporal. Lista de valores vacía."
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, python-format
 msgid "Temporal resolution: %s"
 msgstr "Resolución temporal: %s"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr "Tiempo [%s]"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr "Formato de coordenadas incorrecto, debería ser: x,y"
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-msgid "Invalid input coordinates"
-msgstr "Coordenadas de entrada no válidas"
+#: ../gui/wxpython/tplot/frame.py:724
+#, fuzzy
+msgid "Seed point outside the current region"
+msgstr "Generar área para la región actual."
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 msgid "Invalid input raster dataset"
 msgstr "Conjunto de datos ráster de entrada no válidos"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 msgid "Invalid input vector dataset"
 msgstr "Conjunto de datos vectoriales de entrada no válidos"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr "Por favor especifique un conjunto de datos espacio temporales <%s>."
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr "El nombre del conjunto de datos es ambiguo"
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 msgid "Invalid input temporal dataset"
 msgstr "Conjunto de datos temporales de entrada no válidos"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr "Conjuntos de datos tienen una cantidad diferente de valores"
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Conjunto de datos ráster espacio temporales: %s"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Conjunto de datos vectoriales espacio temporales: %s"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Conjunto de datos ráster 3D espacio temporales: %s"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr "Valor para {date} es {val}"
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr "Presionar Del para desechar."
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr "Con stvds debe definir opción 'attr'"
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid "With stvds it is not possible to use 'coordinates' and 'cats' options together"
 msgstr "Con stvds no es posible usar opciones 'coordinates' y 'cats' al mismo tiempo"
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr "Con stvds debe usar opción 'coordinates' o 'cats'"
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Archivo"
 
@@ -8649,8 +9034,8 @@ msgstr "&Archivo"
 msgid "Workspace"
 msgstr "Entorno de trabajo"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Nuevo"
 
@@ -8658,7 +9043,7 @@ msgstr "Nuevo"
 msgid "Create new workspace"
 msgstr "Crear nuevo archivo de Entorno de trabajo"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Abrir"
 
@@ -8666,12 +9051,12 @@ msgstr "Abrir"
 msgid "Load workspace from file"
 msgstr "Cargar archivo de Entorno de trabajo desde archivo"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Guardar"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Guardar cómo"
 
@@ -8692,7 +9077,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Cargar capas de mapa desde el archivo GRC en el árbol de capas."
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Vista del mapa"
 
@@ -8721,7 +9106,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Añadir diversas capas de mapa ráster o vectoriales a la vista actual"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr "Añadir capa de servicio web"
 
@@ -9339,23 +9724,23 @@ msgstr "Ráster 3D a series ráster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Convierte mapas ráster 3D en mapas ráster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georrectificar"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Administra los Puntos de Control sobre el Terreno para Georectificación"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Lanzar modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Ejecutar modelo"
 
@@ -9389,15 +9774,15 @@ msgstr "Rumbo/distancia a coordenadas"
 msgid "A simple utility for converting bearing and distance measurements to coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr "Una utilería simple para convertir medidas de rumbo y distancia a coordenadas y viceversa. Asume sistema de coordenadas cartesinas"
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Lanzar diseñador  cartográfico"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr "Ventana de visualización móvil"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr "Lanzar Ventana de visualización móvil"
 
@@ -9409,7 +9794,7 @@ msgstr "Lanzar script"
 msgid "Launches script file."
 msgstr "Lanza un archivo script."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 msgid "Close GUI"
 msgstr "Cerrar GUI"
 
@@ -9417,8 +9802,8 @@ msgstr "Cerrar GUI"
 msgid "Quit wxGUI session."
 msgstr "Salir de la sesión wxGUI."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 msgid "Quit GRASS GIS"
 msgstr "Salir de GRASS GIS"
 
@@ -9426,7 +9811,7 @@ msgstr "Salir de GRASS GIS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr "Quitar sesión wxGUI y salir de consola de comandos de GRASS."
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "&Configuraciones"
 
@@ -9578,7 +9963,7 @@ msgstr "Administrar extensiones instaladas"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Actualiza o remueve Complemento(s) de extensión instalados."
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Preferencias"
 
@@ -10470,7 +10855,7 @@ msgid "Generates a raster map using gaussian random number generator. Mean and s
 msgstr "Genera mapa ráster usando un generador gausiano de números aleatorio. La media y desviación estandar de las desviaciones gausianas pueden ser expresadas por el usuario."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Plano"
 
@@ -10686,8 +11071,8 @@ msgid "Develop vector map"
 msgstr "Elaborar mapa vectorial"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Crear nuevo mapa vectorial"
 
@@ -11462,12 +11847,12 @@ msgid "Classifies the cell spectral reflectances in imagery data. Classification
 msgstr "Clasifica el espectro de reflectancia de la celda de un grupo de imágenes. La clasificación está basada en la información de la firma espectral generada por i.cluster, g.gui.iclass o i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Entrada interactiva para clasificación supervisada"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid "Generates spectral signatures by allowing the user to outline training areas."
 msgstr "Genera firmas espectrales permitiendo al usuario delimitar áreas de entrenamiento."
 
@@ -12389,23 +12774,27 @@ msgid "GUI tools"
 msgstr "Herramientas de GUI"
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 msgid "Timeline tool"
 msgstr "Herramienta de linea de tiempo"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr "Graficar extensión temporal."
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 msgid "Temporal plot tool"
 msgstr "Herramienta de gráfica temporal"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 msgid "Plot temporal values."
 msgstr "Graficar valores temporales."
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "&Ayuda"
 
@@ -12430,7 +12819,7 @@ msgid "Prints system information"
 msgstr "Mostrar información del sistema"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Acerca de GRASS GIS"
 
@@ -12442,265 +12831,273 @@ msgstr "Importar, exportar y enlazar datos"
 msgid "Attribute table manager"
 msgstr "Administrador de tabla de atributos"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Crear nuevo modelo"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Cargar modelo del archivo"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Guardar modelo al archivo"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Cerrar el archivo del modelo"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Exportar a imagen"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Exportar modelo a imagen"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Exportar a Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Exportar modelo a script Python"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Salir del modelador"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Cerrar la ventana del modelador"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Modelo"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Añadir comando"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Añadir acción (módulo GRASS) al modelo"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Añadir datos"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Añadir ítem de datos al modelo"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Definir relación"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Definir relación entre datos y elementos de acción"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "Añadir bucle / series"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "Añade bucle (series) al modelo"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Añadir condición"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Añade condición (if/else) para modelar"
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr "Añade comentario al modelo"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Eliminar ítem"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Eliminar acción/datos del modelo"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Características del modelo (nombre, propósito, etc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Borrar datos intermedios"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Eliminar datos intermedios definidos en el modelo"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Ejecutar todo el modelo"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Validar modelo"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Validar el modelo entero"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Mostrar las páginas HTML de manuel del Modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Acerca del Modelador Gráfico"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Mostrar información del Modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr "Cargar archivo de instrucciones"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr "Exportar archivo de instrucciones"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "Exportar a PostScript"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Exportar a PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr "Lanzar cuadro de díalogo de ps.map"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr "Cerra el diseñador cartográfico"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "&Insertar"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 msgid "Add or edit map frame"
 msgstr "Añadir o editar marco del mapa"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr "Añadir o editar mapa ráster"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr "Añadir o editar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "Leyenda del mapa"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr "Añadir o editar leyenda ráster o vectorial"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr "Añadir o editar información del mapa"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr "Añadir o editar barra de escala"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Añadir flecha al norte"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Mostrar las páginas del manual HTML del Diseñador cartográfico"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr "Acerca del diseñador cartográfico"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr "Mostrar información acerca del Diseñador cartográfico"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Pulse aquí para mostrar el módulo del motor de búsqueda"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Pulse aquí para ocultar el módulo del motor de búsqueda"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Linea de comandos"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Ventana de salida"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Limpiar contenido de la ventana de salida"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Limpiar contenido de linea de comandos"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Salvar contenido de ventana de salida en el archivo"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Abortar comando en ejecución"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Rescalar"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid "Toggle to save list of executed commands into a file; content saved when switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Guardar archivo como..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Archivos de texto"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Archivos"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -12711,12 +13108,12 @@ msgstr ""
 "\n"
 "Detalles: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr "Salida del comando guardada en '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -12727,286 +13124,319 @@ msgstr ""
 "\n"
 "Detalles: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Salida de la orden."
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Categoría"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Seleccione los objetos espaciales vectoriales."
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Crear un nuevo directorio de mapas de usuario (mapset)."
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "El mapa de vectores no es tridimensional (3D). Operación cancelada."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "No se puede abrir mapa vectorial <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "No se ha seleccionado ningún mapa!"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Se ha creado el nuevo mapa vectorial <%s>"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Doble click o Ctrl-Enter para ejecutar módulo seleccionado"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 msgid "Run selected module from the tree"
 msgstr "Ejecutar comando seleccionado del árbol"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Configuración del usuario"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Establecer como predeterminado"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 msgid "Revert settings to default"
 msgstr "Revertir la configuración la predeterminada"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr "Aplicar cambios para la sesión actual y cerrar"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr "Guardar solamente para esta sesión"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Configuración aplicada a la actual sesión pero no guardada"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "La columna de clave no puede contener una cadena vacía."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Configuración de la GUI"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Configuración del Administrador de capas"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Preguntar cuando se elimine una capa de mapa del árbol de capas"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Preguntar cuando se abandone la interfaz gráfica de usuario wx o se cierre la ventana."
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Ocultar pestaña '%s'  (requiere reiniciar la GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Buscar módulo"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr "Copiar automáticamente el texto seleccionado en el portapapeles (en la consola de Comandos)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Configuración del Entorno de trabajo"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Suprimir el posicionamiento de la(s) ventana(s) de visualización de mapas"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Suprimir el posicionamiento de la ventana del administrador de capas"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Guardar parámetros de visualización de la ventana actual como predeterminados"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid "Save current position and size of Layer Manager window and opened Map Display window(s) and use as default for next sessions."
 msgstr "Guardar la posición y tamaño actuales, tanto de la ventana del Administrador de capas, como de la(s) de visualización de mapas abiertas y utilizar como ajustes predeterminados para próximas sesiones."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Apariencia"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Fuente para salida de comando:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Configuración de lenguaje"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Escoger idioma (es necesario guardar y reiniciar GRASS):"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Configuración de la presentación"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Lista de elementos:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Estilo del menú (requiere guardar y reiniciar la GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Altura de la ventana emergente de la selección del mapa (en pixeles)"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Tema de íconos (requiere reiniciar la GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr "Estilo de diálogo de módulos:"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Visualización del Mapa"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Tipo de letra predeterminado para las ventanas de GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Ajustes predeterminados de pantalla"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Manejador de pantalla:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Modo de la barra de estado:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Habilitar auto renderizado"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Permitir zoom automático a la capa de mapa seleccionada"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Acción de la rueda del ratón:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr "Dirección de la rueda del ratón:"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "Configuraciones avanzada de visualización"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr "Visualizar buffer de profundad 3D (valores posibles son 16, 24, 32):"
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "Módulos"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr "Configuración del cuadro de diálogo de módulos"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr "Cerrar el cuadro de diálogo cuando el módulo haya finalizado con éxito"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Añadir el mapa creado al árbol de capas"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Permite entrada interactiva"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Nivel de detalle:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Capas"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr "Configuraciones predeterminadas para ráster"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Hacer opacas las celdas nulas"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Tabla de colores predeterminada"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr "Configuraciones predeterminadas para vectoriales"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Visualizador:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Color del elemento:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Color de relleno para el área:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Ancho de línea (en pixeles):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr "Resaltar automáticamente en el visualizador de mapas los elementos seleccionados"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Explorador de datos"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Doble click izquierdo del ratón:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Codificación (por ejemplo, UTF-8, ASCII, iso8859-1, KOI8-R):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Preguntar al eliminar registro(s) de datos de tabla"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Crear tabla"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Columna clave:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Configuración de la barra de estado de las proyecciones"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the Map Display\n"
@@ -13020,76 +13450,87 @@ msgstr ""
 "proyección de la Localización en ningún modo. Debe marcar el cuadro de Proyección del \n"
 "menú desplegable de la parte inferior de la ventana del visualizador de mapas.\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Código EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Proj.4 string (requerido):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "archivo EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string directly."
 msgstr "Cargar códigos EPSG (sea paciente), entrar código EPSG o insertar Proj.4 string directamente."
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "&Cargar código EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Formato de coordenadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 msgid "Lat/long projections"
 msgstr "Proyecciones Lat/long"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Precisión:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "No se pueden leer los códigos EPSG: %s ."
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "No se pueden leer los códigos EPSG: %s "
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Código EPSG %s no encontrado"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Seleccionar la fuente predeterminada para la pantalla."
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr "No se pudo definir el tipo de letra para el monitor. Pruebe otro tipo."
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 msgid "Select default output font"
 msgstr "Seleccionar la fuente predeterminada de salida"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Seleccione el tipo de letra:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Codificación de caracteres:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Ejemplo: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Administrar acceso a los Directorios de mapas"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -13103,249 +13544,336 @@ msgstr ""
 "   -Solo puede crear en el Directorio de mapas actual.\n"
 "   -Solo puede crear en los Directorios de mapas que posee."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Directorio de mapas"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Propietario"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Resultados de la consulta"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr "Click derecho para copiar valores seleccionados al portapapeles."
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Elemento"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Valor"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr "Copiar todo al portapapeles"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr "Redireccionar a consola"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr "Copiar desde la columna '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr "Copiar líneas seleccionadas"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr "Copiar '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr "Copiar línea"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr "Resultados de la consulta:"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr " "
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr "este, norte"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "No se ha encontrado nada"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr " (...)"
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid "Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII characters excluding %(chars)s and space."
+msgstr "Nombre <%(name)s> no es válido para un mapa de GRASS. Por favor use solamente caracteres ASCII excluyendo %(chars)s y espacio."
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr "Búsqueda de texto completo"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr "Escriba para buscar en todos los módulos. Presione Enter para la siguiente opción encontrada."
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr "Buscando, por favor ingrese más letras."
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d módulos corresponden"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Perfil."
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Guardar configuración actual"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr "Borrar configuraciones seleccionadas actualmente"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Cargar configuraciones:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "&Cargar"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Configuración <%s> no encontradas"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Guardar configuraciones"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "Nombre no facilitado, no se han guardado las configuraciones."
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "La configuración <%s> ya existe. ¿Quiere sobrescribir la configuración?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "No hay configuraciones definidas. Operación cancelada."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "No es posible guardar configuraciones"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Guardar archivo"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Introducir parámetros para '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Ejecutar el comando (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Cuantificación."
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Introducir parámetros para '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Cerrar esta ventana sin ejecutar el comando (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Ejecutar el comando (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Copiar la cadena del comando actual al portapapeles"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Mostrar página del manual que describe el comando (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Añadir el mapa(s) creado al árbol de capas"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Cerrar el cuadro de diálogo al finalizar"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid "Close dialog when command is successfully finished. Change this settings in Preferences dialog ('Command' tab)."
 msgstr "Cerrar el cuadro de diálogo cuando la comanda haya finalizado exitosamente. Cambiar esta configuración en el diálogo Preferencias ('Command' tab)."
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' copiado al portapapeles"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Requerido"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "Parametrizado en el modelo"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr "Esta opción es requerida"
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[múltiple]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "intervalo válido"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr "Mostrar representación gráfica de la extensión temporal del conjunto(s) de datos."
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Seleccionar color"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Seleccionar %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "&Cargar"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 msgid "Load and edit content of a file"
 msgstr "Cargar y editar el contenido de un archivo"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr "&Guardar cómo"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr "Guardar contenido en un archivo para uso posterior"
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr "o introducir los valores directamente:"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid "Enter file content directly instead of specifying a file. Temporary file will be automatically created."
 msgstr "Ingrese contenido de archivo directamente en vez de especificar un archivo. Se creará automáticamente un archivo temporal."
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Directorio"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Id de capa"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Nombre de capa"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Proyección"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manual"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr "Nada que cargar."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -13356,44 +13884,44 @@ msgstr ""
 "\n"
 "Razón: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Nada que guardar."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Guardar entrada como..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr "No se dio ningún conjunto de datos."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Error en %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "No se puede parsear la comanda '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: parámetro '%(key)s' no disponible"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr "Intente definir variables GRASS_ADDON_PATH o GRASS_ADDON_BASE."
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr "Elemento requerido no está definido."
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Seleccionar Localización GRASS y Directorio de mapas"
 
@@ -13401,525 +13929,418 @@ msgstr "Seleccionar Localización GRASS y Directorio de mapas"
 msgid "Location or mapset is not defined."
 msgstr "No se ha definido la Localización o el Directorio de mapas."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Nombre de la Localización GRASS:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Nombre del Directorio de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Seleccionar Directorio de mapas en Localización GRASS"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "Falta el nombre del nombre del Directorio de mapas."
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr "Falta el nombre del mapa vectorial."
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Crear tabla de atributos"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr "Falta el nombre para el nuevo mapa vectorial."
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid "Vector map <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "El archivo vectorial <%s> ya existe en el Directorio de mapas actual ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Cargar encuadre de región:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Guardar región:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid "Name cannot begin with '.' and must not contain space, quotes, '/', ''', '@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr "El nombre no puede iniciar con '.' y no debe contener espacios, comillas,  '/', ''', '@', ',', '=', '*', o cualquier otro caracter no alfanumérico"
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr "Crear o editar grupos de imágenes"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr "Aplicar cambios al grupo seleccionado y cerrar el cuadro de diálogo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr "Aplicar cambios a grupo seleccionado"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr "Cerrar el cuadro de diálogo, cambios no aplicados"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid "Put here a regular expression. Characters '.*' stand for anything, character '^' stands for the beginning and '$' for the end."
 msgstr "Poner una expresión regular. Caracter '.*' significa cualquier cosa, caracter '^' significa inicio y '$' término."
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr "Seleccionar grupo existente o ingresar nombre de nuevo grupo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr "Editar/crear subgrupo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr "Seleccionar subgrupo existente o ingresar nombre de nuevo subgrupo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr "Patrón:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Lista de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr "Seleccionar capas de mapas y añadirlos a la lista."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr "Remover de la lista las capa(s) seleccionadas."
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr "Revisar mapas de grupo a ser incluidas en subgrupo."
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr "Añadir mapa seleccionado al grupo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr "El grupo <%s> no fue cambiado, ¿quiere aplicar los cambios?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr "Cambios no aplicados"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr "El subgrupo <%s> no fue cambiado, ¿quiere aplicar los cambios?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 msgid "No raster maps selected."
 msgstr "No hay ningún mapa ráster seleccionado."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr "No hay cambios que aplicar al grupo <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr "El grupo <%s> fue creado exitosamente."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr "El grupo <%s> fue cambiado exitosamente."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Crear grupo nuevo <%s> ha fallado."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr "Falló el cambio de grupo <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr "No se ha seleccionado ningún grupo."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr "No se ha seleccionado ningún subgrupo."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr "Usar nombres  completos de los mapas"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "Ráster 3D"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Tipo de mapa:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Seleccionar palanca"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Invertir selección"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Series dinámicas (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Importación múltiple"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Lista de capas ráster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr "Lista de capas vectoriales"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr "Lista de %s capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr "click derecho para (des)seleccionar todo"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Id de capa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Nombre de capa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr "Nombre del mapa GRASS de salida (editable)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Proyección"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Opciones"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr "Codificación"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Importar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importar las capas seleccionadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-msgid "Add linked layers into layer tree"
-msgstr "Añadir las capas enlazadas al árbol de capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Añadir las capas importadas al árbol de capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Liga"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Ligar las capas seleccionadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "No se han seleccionado capas. Operación cancelada."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-msgid "Unable to determine number of raster bands"
-msgstr "No se puede determinar el número de bandas ráster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr "Definir formato de salida para datos vectoriales"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr "Definir formato de salida para datos ráster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr "Definir formato externo y cerrar cuadro de diálogo"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr "No se ha seleccionado ningún origen de datos"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Importar capas de mapas DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Seleccionar archivo DXF a importar:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-msgid "No layers selected."
-msgstr "No hay capas seleccionadas."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Establecer opacidad de la capa de mapa"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "opaco"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Establecer tamaño de imagen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Tamaño de imagen"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Plantilla:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr "Utilidad de GRASS GIS para Sentencia SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr " Sentencia SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Símbolos"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Directorio del símbolo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Nombre del símbolo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr "¿Quiere salir de GRASS incluyendo la línea de comandos o solamente cerrar la GUI?"
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Información"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Derechos de Autor"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licencia"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 msgid "Citation"
 msgstr "Forma de citar"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autores"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Contribuyentes"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Contribuyentes extra"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Traductores"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr "Estatus de la traducción"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Sitio oficial de GRASS:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr "Revisión de código"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr "Construir fecha"
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Idioma"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "falta archivo %s"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid "Unable to provide citation suggestion, see GRASS GIS website instead. The error was: {}"
 msgstr "No se puede proveer sugerencia de forma de citar, por favor vea el sitio web de GRASS GIS. El error fue: {}"
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Error leyendo el archivo '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Líneas:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "Correo electrónico"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "País"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr "Nación"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr "   %d traducido"
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr "   %d fuzzy"
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr "   %d no traducido"
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr "%d traducido"
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "Archivo <%s> no encontrado"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Siguiente"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Previo"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr "Barra de herramientas"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "Copiar nombres de mapas al portapapeles (de arriba hacia abajo)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "Copiar nombres de mapas al portapapeles (de abajo hacia arriba)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 msgid "Remove selected map(s) from list"
 msgstr "Remover mapa(s) seleccionados de la lista"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 msgid "Layer up"
 msgstr "Subir capa"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 msgid "Move selected layer(s) up"
 msgstr "Mover capa(s) seleccionadas hacia arriba"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 msgid "Layer down"
 msgstr "Bajar capa"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 msgid "Move selected layer(s) down"
 msgstr "Mover capa(s) seleccionadas hacia abajo"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 msgid "Edit layer properties"
 msgstr "Editar propiedades de la capa"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 msgid "Change opacity"
 msgstr "Cambiar la opacidad"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr "Cambiar opacidad de la capa"
 
@@ -14015,11 +14436,11 @@ msgstr "Sobreponer elementos como escala y leyenda al mapa"
 msgid "Create histogram with d.histogram"
 msgstr "Crear histograma con d.histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 msgid "Select graphics tool"
 msgstr "Seleccionar herramienta de gráficos"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
@@ -14028,205 +14449,221 @@ msgstr ""
 "No se puede importar pyGRASS: %s\n"
 "Algunas funcionalidades no serán accesibles"
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Elemento no seleccionable"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr "Tipo:"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelect: item no válido: %s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Configuraciones de salida"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Configuración de fuente"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Tipo de fuente"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr "Nativo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Archivo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protocolo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Tipo de salida"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Tipo de fuente"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "todos los archivos"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "Archivos ZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "Archivos GZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "Archivos TAR"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "Archivos TARGZ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Archivo:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Seleccionar archivo a importar"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Seleccionar directorio de entrada de datos hacia GRASS:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Extensión:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Escoger archivo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr "Tipo de elemento:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 msgid "simple features"
 msgstr "elementos simples"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr "topológico"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Opciones de creación:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Formato:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protocolo:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr "No hay configuraciones disponibles"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 #, fuzzy
 msgid "No data source defined, settings are not saved."
 msgstr "Nombre no facilitado, no se han guardado las configuraciones."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Iluminación"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr "Polígono"
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "No se ha seleccionado ninguna capa de mapa. Operación cancelada."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Mapa vectorial de entrada no existe."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid "Input vector map <%s> and selected map <%s> in layer manager are different. Operation canceled."
+msgstr "El mapa de vectores no es tridimensional (3D). Operación cancelada."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be installed. {}"
 msgstr "La herramienta de línea de tiempo necesita que el paquete \"matplotlib\" (mathplotlib-python) esté instalado. {}"
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 msgid "GRASS GIS Timeline Tool"
 msgstr "Herramienta de línea de tiempo de GRASS GIS"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr "Extensión de gráfica espacio temporal 3D"
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr "Gráfica 3D de extensión espacio temporal (matplotlib >=1.0.0)"
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 msgid "Select space time dataset(s):"
 msgstr "Seleccionar conjunto de dato(s) espacio temporales:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr "El conjunto de datos <{name}> está vacío"
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr "X [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr "Y [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Directorio de mapas: %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr "Nombre de mapa: %s"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr "Tiempo de inicio: %s"
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, python-format
 msgid "End time: %s"
 msgstr "Tiempo de finalización: %s"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr "AVISO: topología inválida"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
@@ -14234,116 +14671,117 @@ msgstr ""
 "\n"
 "Presione Del para desechar."
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Restaurar ajustes preseleccionados."
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 msgid "Request"
 msgstr "Requerido"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 msgid "List of layers "
 msgstr "Lista de capas"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 msgid "Source projection:"
 msgstr "Proyección de fuente:"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Configuraciones avanzada de leyenda"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr "Orden de capas en ráster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 msgid "Reprojection method:"
 msgstr "Método de reproyección:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr "Vecino más cercano"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 msgid "Linear interpolation"
 msgstr "Interpolación lineal"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 msgid "Cubic interpolation"
 msgstr "Interpolación cúbica"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr "Interpolación spline cúbica"
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr "Número máximo de columnas a solicitar al servidor cada vez:"
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr "Número máximo de filas a solicitar al servidor cada vez:"
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr "Parámetros adicionales de la búsqueda para el servidor:"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "No es posible leer el archivo de configuración <%s>\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 msgid "Source image format"
 msgstr "Formato de imagen de entrada"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr "Seleccionar capa en lista de capas.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr "Seleccionar formato de imagen de entrada.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr "Escoger nombre de capa de salida.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr "capa"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "estilo"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
-msgid "Add default servers"
-msgstr "Añadir servidores predeterminados"
+#: ../gui/wxpython/web_services/widgets.py:1154
+#, fuzzy
+msgid "Add default"
+msgstr "Preseleccionado."
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
@@ -14352,641 +14790,650 @@ msgstr ""
 "Servidor definido por el usuario igual al servidor predeterminado <%s> que ya existe.\n"
 "Se conservará el servidor definido por el usuario"
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Configuraciones del servidor"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Servidor:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Conectar"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Conectar al servidor"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 msgid "Show advanced connection settings"
 msgstr "Mostrar configuraciones avanzadas de conexión"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 msgid "Hide advanced connection settings"
 msgstr "Ocultar configuraciones avanzadas de conexión"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr "Configuración de Administrador de capas"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 msgid "Output layer name:"
 msgstr "Nombre de capa de salida:"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "Nombre de usuario:"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Contraseña:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr "Conectando a <%s>..."
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr "Servicios web disponibles"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr "Conectado a <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, python-format
 msgid "Unable to connect to <%s>"
 msgstr "No es posible connectar a <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Añadir servicio de capas wev seleccionado como una capa en el árbol de capas"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr "Propiedades de capa de servicio web"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "&Aplicar"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 msgid "Name for output raster map:"
 msgstr "Nombre para mapa ráster de salida:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 msgid "Export region"
 msgstr "Exportar región"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 msgid "Named region"
 msgstr "Región nombrada"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr "La extensión y resolución están basadas en la geometría del visualizador de mapas."
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr "Extensión y resolución están basadas en la región computacional."
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 msgid "Extent and resolution are based on named region."
 msgstr "Extensión y resolución están basadas en la región nombrada."
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 msgid "Overwrite existing raster map"
 msgstr "Sobreescribir mapa ráster existente"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 msgid "Choose named region:"
 msgstr "Escoger región nombrada:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr "&Guardar capa"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 msgid "Save web service layer as raster map"
 msgstr "Guardar capa de servicio web como mapa ráster"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr "Falta ráster de salida."
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr "Mapa de salida puede ser añadido solamente al Directorio de mapas actual."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr "El mapa de salida <%s> ya existe"
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, python-format
 msgid "Region <%s> does not exist."
 msgstr "La región <%s> no existe."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 msgid "Downloading data..."
 msgstr "Descargando datos..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Imposible de establecer."
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "Revisar todo"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "Limpiar todo"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr "Ingrese valores de los atributos vectoriales"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr "Formato de color incorrecto. Use el formato de color '0:0:0'"
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr "Importar o exportar tabla de colores:"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr "Escoger archivo para cargar tabla de colores"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Cargar"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr "Escribir el nombre de archivo o de click para escoger archivo cargar la tabla de colores"
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Escoger archivo donde guardar tabla de colores"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr "Escribir el nombre de archivo o de click para escoger archivo y guardar la tabla de colores"
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 msgid "&Set"
 msgstr "&Establecer"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 msgid "Load color table:"
 msgstr "Cargar tabla de colores:"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr "Cargar tabla de colores de archivo:"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr "Guardar tabla de colores en el archivo:"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr "Recargar tabla predeterminada"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr "Mostrar vista previa del mapa (se usará la extensión actual del visualizador de mapas)."
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr "No es válida la regla de colores dada."
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "El archivo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr "Formato de tabla de colores no válido"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr "Valor de la regla no correcto '%s'. No es posible aplicar la tabla de colores."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Crear nueva tabla de colores para mapa ráster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Ingresar valores de categoría ráster o porcentajes"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "intervalo fp"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr "Ingresar valores de categoría ráster o porcentajes (%(range)s = %(min)d-%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr "Crear nueva regla de colores para mapa vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr "Ingrese valores de los atributos vectoriales o porcentajes:"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr "Ingrese valores de los atributos vectoriales:"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr "Seleccionar columnas de vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Capa:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Columna de atributo:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr "Cargar colores de la columna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr "Guardar color en la columna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr "Cargar tamaño desde la columna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr "Guardar tamaño en la columna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr "Cargar anchura de la columna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr "Guardar anchura en la columna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr "Usar columna de color en lugar de tabla de colores:"
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Añade columna GRASSRGB a la tabla de atributos actual."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr "Importar o exportar tabla de colores"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid "Database connection for vector map <%s> is not defined in DB file.  Do you want to create and connect new attribute table?"
 msgstr "Conexión a base de datos para mapa vectorial <%s> no está definida en archivo DB. ¿Quieres crear y conectar nueva tabla de atributos?"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr "No hay conexiones definidas a bases de datos"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute table cannot be edited."
 msgstr "El mapa seleccionado <%(map)s> no está en el Directorio de mapas actual <%(mapset)s>. La tabla de atributos no puede ser editada."
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "Columna %s ya existe."
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Por favor espere, cargando datos de la tabla de atributos..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid "Number of loaded records reached %d, displaying all the records will be time-consuming and may lead to computer freezing, do you still want to continue?"
 msgstr "La cantidad de registros cargados ha llegado a %d, el mostrar todos los registros será tardado y puede provocar que la computadora se trabe, ¿quieres continuar de todas maneras?"
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Demasiados registros"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Ingrese valores de los atributos vectoriales o porcentajes %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Ingrese valores de los atributos vectoriales %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr "Por favor seleccione una columna en la cual guardar los valores."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "No hay una columna de colores definida. Operación cancelada."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr "Mapeo temático para mapa vectorial en vista 3D"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "Calculadora de mapas ráster GRASS GIS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "Calculadora de mapas ráster 3D GRASS GIS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "sentencia mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operadores"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operandos"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Expresión"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Guardar expresión a archivo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Cargar expresión del archivo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "exponente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dividir"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "añadir"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "restar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "modelo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "multiplicar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "desplazamiento a la izquierda"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "desplazamiento a la derecha"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "desplazamiento a la derecha (no signado)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "más grande que"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "mayor o igual que"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "menos que "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "menos que o igual a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "igual a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "no es igual a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "complemento de un"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NO"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "a nivel de bits I"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "a nivel de bits O"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "Y lógica"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "Y lógica (ignora NULOs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "O lógica"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "O lógica (ignora NULos)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "condicional"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Nombre para el nuevo mapa ráster 3D a crear"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Nombre para el nuevo mapa ráster a crear"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Insertar el mapa ráster 3D existente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Insertar mapa ráster existente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Insertar función mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr "Generar semilla aleatoria para rand()"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr "Raiz:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr "número entero para semilla de la función rand()"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Añadir mapa ráster creado en el árbol de capas"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr "Debe introducir el nombre del nuevo mapa ráster a crear."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr "Debe introducir una expresión para crear un nuevo mapa ráster."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Seleccione un nombre de archivo para guardar la expresión"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "Archivo de expresión (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Seleccione un nombre de archivo para cargar la expresión"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'{cmd}' copiado al portapapeles"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Buscar & instalar extensión de Complementos GRASS"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Repositorio"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr "Lista extensiones - doble click para instalar"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Opciones"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Buscar"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr "Buscar lista de módulos disponibles en los complementos del repositorio SVN de GRASS"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Instalar"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "Instalar los complementos seleccionados en el módulo de GRASS"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr "Mostrar página de manual de g.extension"
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "Extensión no definida"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr "Obteniendo lista de módulos de complementos SVN de GRASS (sea paciente)..."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Lista de extensiones"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr "Instalar"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr "Mostrar página del manual"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, python-format
 msgid "Unable to load extensions. %s"
 msgstr "No es posible cargar extensiones. %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Administrar complementos de extensión instalados"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "Lista de extensiones instaladas"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 msgid "Uninstall"
 msgstr "Desinstalar"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 msgid "Uninstall selected Addons extensions"
 msgstr "Desinstalar complementos de extensión seleccionados"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr "Reinstalar"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 msgid "Reinstall selected Addons extensions"
 msgstr "Reinstalar complementos de extensión seleccionados"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 msgid "No extension selected. Operation canceled."
 msgstr "No se ha seleccionado ninguna extensión. Operación cancelada."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -14999,245 +15446,378 @@ msgstr ""
 "\n"
 "¿Quiere realmente remover extensión <%(ext)s>?"
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr "Eliminar extensión"
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 msgid "Extension"
 msgstr "Extensión"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Importación múltiple"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Lista de capas ráster"
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr "Lista de capas vectoriales"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr "Lista de %s capas"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr "click derecho para (des)seleccionar todo"
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr "Nombre del mapa GRASS de salida (editable)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Importar"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importar las capas seleccionadas"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Configuración de fuente"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Configuración de tipo de letra."
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+msgid "Add linked layers into layer tree"
+msgstr "Añadir las capas enlazadas al árbol de capas"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Añadir las capas importadas al árbol de capas"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Liga"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Ligar las capas seleccionadas"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "No se han seleccionado capas. Operación cancelada."
+
+#: ../gui/wxpython/modules/import_export.py:431
+msgid "Unable to determine number of raster bands"
+msgstr "No se puede determinar el número de bandas ráster"
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr "Definir formato de salida para datos vectoriales"
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr "Definir formato de salida para datos ráster"
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr "Definir formato externo y cerrar cuadro de diálogo"
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr "No se ha seleccionado ningún origen de datos"
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Importar capas de mapas DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Seleccionar archivo DXF a importar:"
+
+#: ../gui/wxpython/modules/import_export.py:758
+msgid "No layers selected."
+msgstr "No hay capas seleccionadas."
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Proyección"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Nombre del mapa GRASS."
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid "Projection of following layers do not match with projection of current location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Capa a eliminar"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Importar las capas seleccionadas."
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "No se ha encontrado librería GRASS-python."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Datos de entrada"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Conjunto de datos de puntos:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Columna numérica:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Nombre para el nuevo mapa ráster de salida:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Exportar también varianza del mapa:"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Módulo Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Listo."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Variograma apropiado"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Trazar/actualizar variograma"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Técnicas Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Tamaño del bloque:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Ajuste automático de variograma"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Modelo:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Trabajo realizándose! No se facilita funcionalidad."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Herramienta de Histograma de GRASS GIS (d.histogram)"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Seleccione la fuente para el texto del histograma"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Establecer herramientas vectoriales de limpieza"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "Líneas de ruptura/contornos"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "eliminar dublicados"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "eliminar dangles"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "cambiar dangles de los contornos por líneas"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "eliminar puentes"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "cambiar puentes a líneas"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "snap líneas/contornos"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "eliminar centroides del área dublicados"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "romper polígonos"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "podar líneas/contornos"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "eliminar áreas pequeñas"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "eliminar líneas/contornos de longitud cero"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "eliminar ángulos pequeños en los nodos"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Escoger herramientas de limpieza y los umbrales establecidos"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Seleccionar mapa vectorial de entrada:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Tipo de elemento:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Seleccionar mapa vectorial de salida:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Copiar la cadena del comando actual al portapapeles (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "línea"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "contorno"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "centroide"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "cara"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. herramienta de limipieza eliminada, será ignorada"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Por favor seleccione una herramienta de limpieza a eliminar"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. herramienta de limpiez subida"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "1. la herramienta de limpieza no se puede subir"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr "Por favor seleccione una herramienta de limpieza para subir"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. herramienta de limpieza bajada"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "La última herramienta de limpieza no se puede bajar"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "Por favor selecciona una herramienta de limpieza a bajar"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "herramienta de limpieza:'%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "Umbral para %(num)s. herramienta '%(tool)s': %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr "Nombre de mapa vectorial de entrada"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr "Nombre de mapa vectorial de salida"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Umbral"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr "'%s' no definido"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -15247,20 +15827,20 @@ msgstr ""
 "Algunos parámetros no definidos. Operación cancelada. \n"
 "%s"
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Ejecutando operaciones de limpieza seleccionadas..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Comanda de limpieza vectorial copiada al portapapeles"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "No es posible abrir el archivo <%s> para su lectura."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -15273,41 +15853,63 @@ msgstr ""
 "\n"
 "Cantida de línea(s) omitida(s): %(line) d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " fila %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: tipo de capa <%(type)s> no soportado"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr "Comando '%s' falló\n"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Detalles: %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Tipo de capa de mapa no soportada '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "ERROR: Falló el renderizado"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Renderizar"
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr "Descargando datos"
+
+#: ../gui/wxpython/core/render.py:643
+msgid "Rendering & "
+msgstr "Renderizando &"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr "Renderizando..."
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr "Tratando de recuperar de la región predeterminada..."
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr "Error: No se puede abrir '%(file)s'. Razón: %(ret)s. wxGUI salió.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
@@ -15316,121 +15918,94 @@ msgstr ""
 "\n"
 "ERROR: No se puede leer archivo WIND: %s\n"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Tamaño de mapa no válido %d,%d\n"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "No ha sido posible realizar acercamiento al mapa ráster <%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Detalles:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "No se puede realizar un zoom al mapa vectorial <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "No ha sido posible realizar acercamiento al mapa ráster 3D <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid "Unable to get current geographic extent. Force quiting wxGUI. Please manually run g.region to fix the problem."
 msgstr "No ha sido posible obtener la extensión geográfica actual. Se forza el abandono de la wxGUI. Por favor ejecute manualmente g.region para solucionar el problema."
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "ERROR: Falló el renderizado. Detalles: %s"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "No se ha podido renderizar capa de mapa <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "No se ha podido realizar la presentación de la superposición <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr "Descargando datos"
-
-#: ../gui/wxpython/core/render.py:1386
-msgid "Rendering & "
-msgstr "Renderizando &"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr "Renderizando..."
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Tag desconocido"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 msgid "Unable to create toolboxes directory."
 msgstr "No es posible crear directorio de cajas de herramientas."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr "Cajas de herramientas personalizadas"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr "No se ha podido obtener la lista de complementos por que falló g.extension."
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr "Complementos"
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr "Error de sintaxis: %s"
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Mapa vectorial <%(map)s>: %(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
-msgstr "no se pudo abrir '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
+msgstr "falló al abrir '%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "ERROR: No ha sido posible determinar la versión de GRASS. Detalles %s "
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "No ha sido posible abrir archivo '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
@@ -15439,17 +16014,17 @@ msgstr ""
 "%s: línea saltada - no ha sido posible parsear '%s'\n"
 "Razón: %s\n"
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Llave duplicada: %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "No ha sido crear archivo '%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -15462,173 +16037,178 @@ msgstr ""
 "\n"
 "Opción <%(opt)s>: lectura de la entrada estandar no está soportada por la wxGUI"
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Archivo <%s> no encontrado."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d segundos"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d mínimo %(sec)d segundos"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr "Por favor note que los datos se han dejado en un estado inconsistente y podrían encontrarse corruptos"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Comando abortado"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Comando finalizado"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Razón"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "La ejecución ha fallado:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Error:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "No se puede ejecutar el comando: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "punto"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr "animación"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Ocultar todos excepto los conjuntos de mapas PERMANENT y actual."
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Ocultar todos excepto el conjunto de mapas PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Ocultar todos excepto el conjunto de mapas actual"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Ocultar todos los conjuntos de mapas"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Expandir todo"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Mostrar lo seleccionado"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "Clásico (sólo etiquetas)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "Combinado (etiquetas y nombres de módulos)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr "Experto (sólo nombres de los módulos)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr "Verde elegante"
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Enlistar tablas"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Acercar y recentrar"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr "Acercar al cursor del ratón"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Nada"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "Mover hacia adelante para acercar"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "Mover hacia atrás para acercar"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "caja"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "esfera"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cubo"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamante"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "asterisco"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "giroscópo"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "Histograma"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr "cruz"
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr "círculo"
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "No es posible leer el archivo de configuración <%s>\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -15639,11 +16219,11 @@ msgstr ""
 "\t\tDetalles: %(detail)s\n"
 "\t\tLínea: '%(line)s'\n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "No es posible crear directorio de configuración"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -15654,246 +16234,277 @@ msgstr ""
 "\n"
 "Detales: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Imposible de establecer"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "No es posible parsear configuración '%s '"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Definir base de datos de GRASS y nombre de Localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Directorio de datos de SIG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Localización del proyecto"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Nombre de directorio de Localización en el Directorio de datos SIG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Nombre de la Localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "Título opcional de la Localización, puede dejar este campo en blanco."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid "Name <%(name)s> is not a valid name for location. Please use only ASCII characters excluding %(chars)s and space."
 msgstr "Nombre <%(name)s> no es válido para Localización o Directorio de mapas. Por favor use solo caracteres ASCII excluyendo %(chars)s y espacio."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Nombre de la Localización no válido"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Seleccionar directorio de datos de GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "La Localización ya existe en la base de datos de GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "No se puede crear la Localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid "Title of the location is limited only to one line and 256 characters. The rest of the text will be ignored."
 msgstr "El título de la Localización está limitado a una línea y 256 caracteres. El resto del texto será ignorado."
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Seleccione el método para crear una nueva Localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Seleccione el código EPSG del sistema de referencia espacial"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr "Leer la configuración de proyección y datum de un archivo de datos georreferenciado"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "Leer términos de proyección y datum de un archivo .prj Well Known Text (WKT)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Seleccione de una lista los parámetros del sistema de coordenadas"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "Especifique la configuración de proyección y datum utilizando parámetros PROJ.4 personalizados"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Crear un sistema de coordenadas cartesiano genérico (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Simple."
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Avanzado."
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Seleccionar la proyección"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Código"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Código de la proyección:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Buscar en la descripción:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "No se puede leer la lista: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Seleccionar parámetros de proyección"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Seleccionar datum o elipsoide (página siguiente)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Seleccionar datum con elipsoide asociado"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Solamente Elipsoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Tienes que entrar un valor para %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Introduzca los parámetros para la proyección %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Especificar datum geodésico"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Código del datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Especificar elipsoide:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Base de datos."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr "Cuerpos planetarios"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Código del elipsoide:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Seleccionar archivo georreferenciado"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Archivo georreferenciado:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "Seleccionar archivo Well Known Text (WKT) .prj"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr "Archivo WKT .prj:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Seleccionar código EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Ruta al archivo de códigos EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Seleccionar archivo de códigos EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
-msgstr "No se pueden leer los códigos EPSG: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Seleccionar código EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Ruta al archivo de códigos EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Código EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Seleccionar archivo de códigos EPSG."
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
+msgstr "No se pueden leer los códigos EPSG: %s ."
+
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Seleccionar método para especificar los parámetros de georreferenciación"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Introduzca la cadena de parámetros PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Se requiere una transformación del datum."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Base de datos de GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Nombre de la Localización:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Título de la Localización:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Proyección:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
@@ -15901,20 +16512,20 @@ msgstr ""
 "Definición PROJ.4:\n"
 "(no-definitiva)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "¿Quiere crear la Localización GRASS <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "¿Crear una nueva Localización?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definir nueva Localización GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -15925,240 +16536,245 @@ msgstr ""
 "\n"
 "Detalles: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Se ha cancelado el asistente de Localizaciones. La Localización no ha sido creada."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "No se puede crear la nueva Localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will need to change the default GIS data directory in the GRASS startup screen."
 msgstr "La Localización <%(loc)s> se creará en el directorio de datos SIG <%(dir)s>. Necesitará cambiar el directorio de datos SIG predeterminado en la pantalla de inicio de GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Nuevo directorio de datos de SIG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Falta el código EPSG."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Falta el código EPSG."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Archivo <%s> no encontrado."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Establecer la extensión y resolución de la región predeterminada"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Establecer región"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Se ha seleccionado una Localización no válida."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Región no válida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Pulse aquí para mostrar la configuración 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Pulse aquí para ocultar la configuración 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Filas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Columnas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Celdas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Profundidad: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Celdas 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Resolución del espacio entre los límites superior e inferior"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Norte"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Oeste"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Este"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Sur"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Resolución N-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Resolución E-O"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Valor no válido: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Seleccionar transformación de datum"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Seleccione de la lista de transformaciones de datum"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid "Opening 3D view was not successful. Please try to change the value of depth buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr "La ejecución de la visualización 3D no ha sido exitosa. Por favor trate de cambiar el valor de profundidad del buffer en el cuadro de diálogo de la GUI en menú Configuración > Visualizador de mapas > Avanzado y reiniciar GUI."
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid "Image is too large, your OpenGL implementation supports maximum texture size %d px."
 msgstr "La imagen es demasiado grande, tu implementación OpenGL soporta un tamaño de textura máximo de %d px."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Hacia el Este"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Hacia el Norte"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Elevación"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr "Nombre de mapa de superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "Superficie de elevación del mapa"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "Color del mapa de superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "Distancia XY de la anterior"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "Distancia XYZ de la anterior"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr "Distancia a lo largo de la superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr "Distancia a lo largo de exag. superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "No hay puntos en la superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Cargando mapa ráster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Cargando mapa ráster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "falló"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Tipo de capa '%s' no soportado"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "No ha sido posible descargar mapa ráster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "No ha sido posible descargar mapa ráster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "Mapa ráster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "exitosamente descargado"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Ha fallado la carga del mapa vectorial <%(name)s> (%(type)s)."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "No ha sido posible descargar el mapa vectorial<%(name)s> (%(type)s)."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "El mapa vectorial <%(name)s> (%(type)s) ha sido exitosamente descargado."
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "No se ha encontrado la capa de puntos vectoriales (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "No es posible establecer las propiedades de los datos de la capa (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -16169,740 +16785,740 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "constante#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Visualización"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Análisis"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animación"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Control de Vista"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr "Ajustar la distancia y perspectiva angular del puto de vista de la imagen"
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspectiva:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "Inclina el plano de la superficie desde la horizontal"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Inclinación:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid "Adjusts the viewing height above the surface (angle of view automatically adjusts to maintain the same center of view)"
 msgstr "Ajustar el punto de vista sobre la superficie (el ángulo de vista se ajusta automáticamente para mantener el centro de la vista)"
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr "Ajustar altura relativa de los elementos sobre el plano de la superficie"
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Exageración Z:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Mirar:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "aquí"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid "Allows you to select a point on the surface that becomes the new center of view. Click on the button and then on the surface."
 msgstr "Permite seleccionar el puto en la superficie que se volverá el nuevo centro de la vista. Haga click e el botón y luego en la superficie."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "centro"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Reiniciar la visualización al centro de visualización predeterminado original"
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "superior"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid "Sets the viewer directly over the scene's center position. This top view orients approximately north south."
 msgstr "Definir la vista directamente sobre el centro de la posición de la escena. Esta vista desde arriba se orienta aproximadamente de norte a sur."
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "reiniciar"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Reiniciar a la visualización predeterminada"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Presentación de la imagen"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid "Press 'Record' button and start changing the view. It is recommended to use fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr "Presione el botón 'Grabar' e comience a cambiar la vista. Se recomienda usar el modo de Volar hacia (Barra de herramientas del visualizador de mapas) para lograr un movimiento suave."
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Grabar"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Reproducir"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Cantidad total de cuadros:"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "Velocidad de cuadro (FPS):"
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "Los cuadros son grabados con una frecuencia dada (FPS)."
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Guardar secuencia de imágenes"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Seleccione un directorio para imágenes"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr "Nombres de archivos generados se verán así: prefijo_1.ppm, prefijo_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Superficie"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Superficie constante"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vectorial"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Iluminación"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "Margen"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr "Planos de corte"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Modo:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "grueso"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "fino"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "ambos"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Sombreado:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "plano"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Seleccionar todo"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Utilizar ajustes de dibujo para todas las superficies cargadas"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Modo grueso:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "resolución"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "estilo:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "alambre"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "superficie"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "color del alambre"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Modo fino:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Atributos de superficie"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Transparencia"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Brillantez"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "mapa"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "no establecer"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "constante"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Cambiar la posición x, y, z de la superficie actual"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Reiniciar"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Reiniciar a la posición predeterminada"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "Activar planos de corte:"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "limpiar"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr "color superior"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr "color inferior"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "mezclar"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "sombreado"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "X horizontal:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "Definir la coordenada X del plano de corte actual"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Y horizontal:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "Definir la coordenada Y del plano de corte actual"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr "Rotar el plano de corte actual sobre el eje vertical"
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr "Rotar el plano de corte actual sobre el eje horizontal"
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid "Sets the Z coordinate of the current cutting plane (only meaningful when tilt is not 0)"
 msgstr "Definir la coordenada Z del plano de corte actual (solo es significativo si el ladeo no es 0)"
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr "Resolución fina:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Valor:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Transparencia:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Mostrar líneas vectoriales"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Líneas vectoriales"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Línea:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "ancho:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "color:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr "usar color para mapeo temático"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr "usar anchura para mapeo temático"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr "Definir opciones..."
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "en superficie(s):"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr "en 3D"
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Altura sobre la superficie:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Mostrar puntos vectoriales"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Puntos vectoriales"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Ícono:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr "usar tamaño para mapeo temático"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "Isosuperficies"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Resolución:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Lista de isosuperficies"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Mostrar modelo de luz"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Posición de la fuente de luz"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Ajusta la altura de la luz"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Color e intensidad"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Brillo:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Ajusta el brillo de la luz"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Ambiente:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Ajusta la luz ambiental"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "Bordes con margen"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "N && O"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "N && E"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "S && O"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "S && E"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr "Elevación del margen desde abajo"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "Longitud de la flecha (en unidades del mapa):"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Color de la flecha:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Colocar flecha"
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Longitud de la barra de escala (en unidades del mapa):"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Color de la barra de escala:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr "Añadir nueva barra de escala"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr "¿Quiere grabar una nueva animación sin guardar la anterior?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "La animación ya existe"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "No se dio ningún prefijo para los archivos."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "El directorio %s no existe."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Atributos de isosuperficies"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Valor de isosuperficie"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Duplicar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "NO"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "NE"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "SE"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "SO"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Nivel"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Lista de duplicados."
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr "Nivel {level}"
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr "Barra de escala %d"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Ninguno"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "El mapa vectorial es 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "El mapa vectorial es 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d elementos (%(points)d puntos)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "en superficie"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "intervalo:"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Borde Norte:"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Borde Sur:"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Borde Oeste:"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Borde Este:"
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr "Hacia el Norte (Y):"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Altitud (Z):"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr "Hacia el Este (X):"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr "Borde inferior:"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr "Borde superior:"
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr "Ajusta la distancia y dirección del punto de vista de la imagen"
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid "Adjusts the light direction. Click and drag the puck to change the light direction."
 msgstr "Ajustar la dirección de la luz. Da clic y arrastra el disco para cambiar la dirección de la luz."
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "mapa ráster 3d <%s> no encontrado"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 msgid "3D view default settings"
 msgstr "Configuraciones predeterminadas de visualización 3D"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr "Revertir los ajustes a los predeterminados, los cambios no son aplicados"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "valor:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "paso:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Posición:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Giro:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr "Volar a través"
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr "Mover exageración:"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr "Exageración del giro:"
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Iluminación"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "color del alambre"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marcador:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Las configuraciones de la vista 3D se han guardado en el archivo <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "No se ha seleccionado ningún mapa!"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -16915,7 +17531,7 @@ msgstr ""
 "\n"
 "Puede reducir el número de celdas en la región actual usando el comando <g.region>."
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than recommended threshold <%d>.\n"
@@ -16930,20 +17546,20 @@ msgstr ""
 "\n"
 "¿Quiere continuar usando la herramienta interactiva de gráfica de dispersión con esta región?"
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid "Scatter plot with same band combination (regardless x y order) is already displayed."
 msgstr "Ya hay una gráfica de dispersión con la misma combinación de bandas (independientemente del orden x y)."
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr "Banda <%s> no es de tipo CELL (entero).\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 msgid "Scatter plot cannot be added.\n"
 msgstr "No se puede añadir gráfica de dispersión.\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -16952,7 +17568,7 @@ msgstr ""
 "La gráfica de dispersión no puede ser añadida.\n"
 "El rango del múltiplo de bandas <%s:%d * %s:%d = %d> es mayor al límite máximo <%d>.\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended limit <%d>.\n"
@@ -16964,7 +17580,7 @@ msgstr ""
 "Es fuertemente recomendado reducir la extensión del rago de las bandas (p. ej. usando r.rescale) por debajo del límite recomendado.\n"
 "¿Quiere realmente añadir esta gráfica de dispersión?"
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
@@ -16974,7 +17590,7 @@ msgstr ""
 "\n"
 "Aún no hay ninguna clase, ¿quiere crear una?"
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
@@ -16983,17 +17599,17 @@ msgstr ""
 "Ocurrió un error mientras se hacía el cálculo de la categoría de la gráfica de dispersión:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr "Exportar gráfica de dispersión ráster de clases <%s>"
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr "Gráfica de dispersión ráster de clases <%s> exportada a mapa ráster  <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -17006,60 +17622,60 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "Ha fallado la carga librería ctypes"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Herramienta de GRASS GIS para gráfica de dispersión interactiva"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 msgid "scatter plot"
 msgstr "gráfica de dispersión"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr "Se ha alcanzado el número máximo de categorías."
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr "Renombrar clase"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 msgid "Set color"
 msgstr "Elegir color"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr "Ocultar"
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr "Mover hasta arriba"
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr "Mover hasta abajo"
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 msgid "Move category up"
 msgstr "Mover categoría arriba"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr "Mover categoría abajo"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 msgid "Export class raster"
 msgstr "Exportar ráster de clases"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Cambiar opacidad de la clase <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr "Nombre vacío insertado."
 
@@ -17067,95 +17683,95 @@ msgstr "Nombre vacío insertado."
 msgid "The Scatterplot Tool needs the \"matplotlib\" (python-matplotlib) package to be installed. {}"
 msgstr "La herramienta de gráfica de dispersión necesita que el paquete \"matplotlib\" (mathplotlib-python) esté instalado. {}"
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Acercamiento a la extensión de la región guardada (zoom to saved...)"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 msgid "Add scatter plots"
 msgstr "Añadir gráficas de dispersión"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr "eje x:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr "eje y:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr "Bandas a añadir a las graficas de dispersión (x,y):"
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 msgid "No scatter plots selected."
 msgstr "No hay gráficas de dispersión seleccionadas."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr "Seleccionar ambas bandas x e y"
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr "Bandas seleccionadas deben ser diferentes."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid "Scatter plot with same bands combination (regardless x y order) has been already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Mapa ráster <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr "Ráster <%s> existe"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr "Mostrar elipses de confianza"
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 msgid "Selection polygon color:"
 msgstr "Seleccionar color de polígono:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr "Color de vértice de polígono seleccionado:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 msgid "Selected area color:"
 msgstr "Color de área seleccionada:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 msgid "Selected area opacity:"
 msgstr "Seleccionar opacidad de área:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 msgid "Selection style:"
 msgstr "Seleccionar estilo:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 msgid "Ellipses settings:"
 msgstr "Configuración de elipses:"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr "Seleccione categoría para editar."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr "Falló el cálculo de la gráfica de dispersión."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr "Falló archivo de condiciones para parchar categoría ráster."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
@@ -17164,7 +17780,7 @@ msgstr ""
 "Falló v.build:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
@@ -17173,81 +17789,151 @@ msgstr ""
 "Falló v.to.rast:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 msgid "Add scatter plot"
 msgstr "Añadir gráfica de dispersión"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr "Seleccionar área con polígono"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Seleccione el mapa raster a perfilar."
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr "Modo de acercamiento para gráficas de dispersión (botón derecho del ratón, rueda)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid "Zoom to scatter plot data extend mode (click on scatter plot for zooming to extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr "Mostrar/ocultar administrador de clases"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr "Incluir áreas seleccionadas a clase"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr "Excluir áreas seleccionadas de la clase"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Añadir nuevo vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 msgid "Create selection polygon"
 msgstr "Crear polígono de selección"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr "Añadir nuevo vértice entre el último y el primer punto del contorno"
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 msgid "Move boundary vertex"
 msgstr "Mover vértice de contorno"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Eliminar vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 msgid "Remove boundary vertex"
 msgstr "Eliminar vértice de contorno"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr "Remover polígono (click en la gráfica de dispersión para remover su polígono)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 msgid "Add class"
 msgstr "Añadir clase"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 msgid "Remove selected class"
 msgstr "Remover clase seleccionada"
+
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "No se soportan las unidades de la proyección actual,\n"
+#~ "se utilizarán metros!"
+
+#~ msgid "Unsupported units"
+#~ msgstr "Unidades no soportadas"
+
+#~ msgid "Failed to query vector map <{map}>. Check database settings and topology."
+#~ msgstr "No se pudo consultar el mapa vectorial <{map}>. Cheque la configuración de la base de datos y la topología."
+
+#~ msgid "Digitize"
+#~ msgstr "Digitalizar"
+
+#~ msgid "Map layers"
+#~ msgstr "Capas de mapas"
+
+#~ msgid "Command console"
+#~ msgstr "Consola de comandos"
+
+#~ msgid "Search modules"
+#~ msgstr "Buscar módulos"
+
+#~ msgid "Python shell"
+#~ msgstr "Consola de comandos Python"
+
+#~ msgid "GRASS SVN Revision"
+#~ msgstr "Revisión SVN de GRASS"
+
+#~ msgid "Build Platform"
+#~ msgstr "Construir plataforma"
+
+#~ msgid "Vector temporal dataset (strds)"
+#~ msgstr "Datos vectoriales temporales  (strds)"
+
+#~ msgid "Search module"
+#~ msgstr "Buscar módulo"
+
+#~ msgid "Automatically copy selected text to clipboard (in Command console)"
+#~ msgstr "Copiar automáticamente el texto seleccionado en el portapapeles (en la consola de Comandos)"
+
+#~ msgid "Load settings:"
+#~ msgstr "Cargar configuraciones:"
+
+#~ msgid "Encoding"
+#~ msgstr "Codificación"
+
+#~ msgid "Add default servers"
+#~ msgstr "Añadir servidores predeterminados"
+
+#~ msgid "Repository"
+#~ msgstr "Repositorio"
+
+#~ msgid "ERROR: Rendering failed. Details: %s"
+#~ msgstr "ERROR: Falló el renderizado. Detalles: %s"
+
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "No se ha podido renderizar capa de mapa <%s>."
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "No se ha podido realizar la presentación de la superposición <%s>."
+
+#~ msgid "failed to open '%s'"
+#~ msgstr "no se pudo abrir '%s'"
+
+#~ msgid "Unable to read EPGS codes: %s"
+#~ msgstr "No se pueden leer los códigos EPSG: %s"
diff --git a/locale/po/grasswxpy_fi.po b/locale/po/grasswxpy_fi.po
index bbc26d4..2d2ef57 100644
--- a/locale/po/grasswxpy_fi.po
+++ b/locale/po/grasswxpy_fi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_fi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-08-17 22:18+0300\n"
 "Last-Translator: Kari Salovaara <kari.salovaara at pp1.inet.fi>\n"
 "Language-Team: Finnish <grass-translations at lists.osgeo.org>\n"
@@ -18,23 +18,23 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Lokalize 1.5\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Valitse GRASS GIS tietokannan hakemisto"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Valitse GRASS Paikka"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Valitse GRASS Karttajoukko"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "GRASS GIS tietokanta hakemisto sisältää Paikat."
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -43,7 +43,7 @@ msgstr ""
 "(projektiossa). Yksi Paikka voi olla yksi projekti. Paikka sisältää "
 "Karttajoukot."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
@@ -51,172 +51,172 @@ msgstr ""
 "Karttajoukko sisältää GIS tiedot jotka liittyvät yhteen projektiin. "
 "tehtävään yhdessä projektissa, seutuun tai käyttäjään."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Käynnistä &GRASS istunto"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr ""
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "Luo uusi Karttajoukko valittuun Paikkaan"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Nimeä uudelleen valittu paikka"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Poista valittu paikka"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Nimeä uudelleen valittu karttajoukko"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Poista valittu karttajoukko"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Anna GRASS istunto"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Virhe"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "VIRHE: Paikkaa <%s> ei löydy\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "VIRHE: Karttajoukkoa <%s> ei löydy\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Virhe: {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Haluatko luoda uuden karttajoukon?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Luo uusi karttajoukko"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Paikka <%s> luotu"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -227,12 +227,12 @@ msgstr ""
 "\n"
 "Anna uusi nimi:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Viesti"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -240,7 +240,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -248,7 +248,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -256,7 +256,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -264,14 +264,14 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -280,11 +280,11 @@ msgid ""
 "ALL MAPS included in this mapset will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -292,40 +292,40 @@ msgid ""
 "ALL MAPS included in this location will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -334,16 +334,16 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -355,11 +355,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -367,7 +367,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -375,18 +375,18 @@ msgid ""
 "Details: %(reason)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -404,171 +404,171 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 msgid "Display synchronization ON"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 msgid "Unable to open temporary vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr "tulokset"
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Histogrammit"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 msgid "Scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -577,594 +577,595 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, python-format
 msgid "Group <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, python-format
 msgid "Subgroup <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, python-format
 msgid "Loading training map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 msgid "Name of imagery subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Väri"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 msgid "Remove selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 msgid "Export training areas to vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 msgid "Import training areas from vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 msgid "Select raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 msgid "Name of top/left raster map:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 msgid "Name of bottom/right raster map:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr "Peruuta"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Sulje"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 msgid "Map Swipe settings"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Työkalut"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 msgid "Choose view mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 msgid "Switch orientation"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "rasteri"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vektori"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1173,28 +1174,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1204,260 +1205,260 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "käytä"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 msgid "GRASS GIS Vector Digitizer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, python-format
 msgid "Vector digitizer not available. %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1465,360 +1466,360 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "karttayksiköt"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Kyselyn työkalu"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Valitse kyselyn työkalu"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Valitse laatikolla"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "pituus"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Valitse viivat"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Taso"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Luokka"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Tila"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "alue"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "kehä"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Piste"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Viiva"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Suunta"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Toiminto peruutettiin."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1826,78 +1827,78 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1905,244 +1906,244 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Poista valitut"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Poista kaikki"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Lataa uudelleen"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Vektorikarttaa ei voida päivittää."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Aseta arvo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Askel"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 msgid "Edit selected line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 msgid "Remove selected vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 msgid "Select background vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2151,778 +2152,1128 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+msgid "Hide toolbars"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "Näytä vektoriviivat"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+msgid "Show statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, python-brace-format
 msgid "Hide {overlay}"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 msgid "Resize legend"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 msgid "Set compulational region from named region"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 msgid "Save computational region to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Varoitus"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, python-brace-format
+msgid "Failed to read maps from location <{l}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "Paikka <%s> luotu"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
+#: ../gui/wxpython/datacatalog/tree.py:314
+msgid "GRASS locations in {}"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+msgid "New name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Nimeä luokka uudelleen"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, python-brace-format
+msgid "Editing {name}"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
+#: ../gui/wxpython/datacatalog/tree.py:652
+msgid "No map selected for copying."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
+#: ../gui/wxpython/datacatalog/tree.py:659
+msgid "Copy map"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Vektorikarttaa ei voida päivittää."
+
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "Paikka <%s> luotu"
+
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, python-brace-format
+msgid "Copying <{name}>..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:318
-msgid "No intermediate data to delete."
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid ""
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "Poista kaikki"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, python-brace-format
+msgid "Deleting {name}..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
-msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+#: ../gui/wxpython/datacatalog/tree.py:782
+msgid "g.remove completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, python-brace-format
+msgid "Displaying {name}..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:835
+msgid "Maps can be copied only to current mapset"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "rasteri"
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+msgid "&Display layer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
+#: ../gui/wxpython/datacatalog/tree.py:954
+msgid "&Switch mapset"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
+#: ../gui/wxpython/datacatalog/frame.py:36
+msgid "GRASS GIS Data Catalog"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
+#: ../gui/wxpython/datacatalog/frame.py:66
+msgid "Close GRASS GIS Data Catalog"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
-#, python-format
-msgid "Model exported to <%s>"
+#: ../gui/wxpython/datacatalog/catalog.py:33
+msgid "Data catalog"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
-msgid "Comment:"
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "2. Valitse GRASS Paikka"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
-msgid "Add comment"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, python-format
+#: ../gui/wxpython/datacatalog/toolbars.py:56
 msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:887
-msgid "Please wait, loading model..."
+#: ../gui/wxpython/rdigit/controller.py:123
+msgid "Please select first the raster map"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:953
-msgid "Writing current settings to model file failed."
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
-#, python-format
-msgid "Unable to open file <%s> for writing."
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
-#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
-msgid "Remove"
-msgstr ""
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Haluatko luoda uuden karttajoukon?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
-msgid "Disable"
+#: ../gui/wxpython/rdigit/controller.py:304
+msgid "Save raster map changes"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
-msgid "Enable"
+#: ../gui/wxpython/rdigit/controller.py:378
+msgid "Failed to create backup copy of edited raster map."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
-msgid "Set label"
-msgstr ""
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Vektorikarttaa ei voida päivittää."
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
-msgid "Set comment"
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+msgid "Rasterizing..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
-msgid "Add control point"
+#: ../gui/wxpython/rdigit/controller.py:556
+msgid "Failed to set default color table for edited raster map"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
-msgid "Remove control point"
-msgstr ""
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Luo uusi karttajoukko"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
-msgid "Intermediate"
+#: ../gui/wxpython/rdigit/dialogs.py:53
+msgid "Name for new raster map:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
-msgid "Properties"
+#: ../gui/wxpython/rdigit/dialogs.py:58
+msgid "Optionally select background raster map:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
-msgid "Label:"
+#: ../gui/wxpython/rdigit/dialogs.py:62
+msgid "New raster map type:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
-msgid "List of variables - right-click to delete"
+#: ../gui/wxpython/rdigit/dialogs.py:92
+msgid "Please specify name for a new raster map"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
-msgid "Name"
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
-msgid "Data type"
+#: ../gui/wxpython/rdigit/toolbars.py:27
+msgid "Digitize area"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
-msgid "Default value"
+#: ../gui/wxpython/rdigit/toolbars.py:29
+msgid "Digitize line"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
-msgid "Description"
+#: ../gui/wxpython/rdigit/toolbars.py:31
+msgid "Digitize point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
-msgid "Add new variable"
-msgstr ""
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Tallenna nimellä"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
-msgid "integer"
+#: ../gui/wxpython/rdigit/toolbars.py:34
+msgid "Quit raster digitizer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
-msgid "float"
-msgstr ""
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Poista valittu karttajoukko"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
-msgid "string"
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
-msgid "region"
-msgstr ""
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Aseta arvo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
-msgid "mapset"
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
-msgid "file"
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
-msgid "dir"
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "rasteri"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
-msgid "Add new variable to the model"
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
-msgid "List of items - right-click to delete"
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
-msgid "Label"
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-msgid "In loop"
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+msgid "No intermediate data to delete."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+msgid "Comment:"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+msgid "Add comment"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
+msgid "Please wait, loading model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1073
+msgid "Writing current settings to model file failed."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
+#, python-format
+msgid "Unable to open file <%s> for writing."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
+#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
+msgid "Remove"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1448
+msgid "Disable"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1454
+msgid "Enable"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
+msgid "Set label"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
+msgid "Set comment"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1478
+msgid "Add control point"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1485
+msgid "Remove control point"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1497
+msgid "Intermediate"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
+msgid "Properties"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
+msgid "Label:"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1630
+msgid "List of variables - right-click to delete"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
+msgid "Name"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
+msgid "Data type"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
+msgid "Default value"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
+msgid "Description"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1643
+msgid "Add new variable"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1647
+msgid "integer"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1648
+msgid "float"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1649
+msgid "string"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1652
+msgid "region"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1653
+msgid "mapset"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
+msgid "file"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1655
+msgid "dir"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1662
+msgid "Add new variable to the model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1785
+msgid "List of items - right-click to delete"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
+msgid "Label"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1791
+msgid "In loop"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1792
 msgid "Parameterized"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 msgid "No items to selected."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr ""
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 msgid "Table:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -2930,93 +3281,93 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3024,246 +3375,246 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3271,1302 +3622,1287 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 msgid "Vector labels"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 msgid "Add overlays"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 msgid "Reload currently selected attribute data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4574,72 +4910,72 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4648,220 +4984,220 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4869,7 +5205,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4878,63 +5214,63 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -4942,163 +5278,163 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 msgid "Field statistics"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 msgid "Unable to calculte statistics."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 msgid "Unable to calculte standard deviation."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5107,752 +5443,753 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 msgid "No animation name selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 msgid "No workspace file selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, python-format
 msgid "Space time dataset <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
 "Invalid file, unable to parse XML document."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 msgid "Please add only one layer in the list."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 msgid "No map series nor space-time dataset is added."
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 msgid "Rendering map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 msgid "Overlaying map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, python-brace-format
 msgid "Directory {t} not removed."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 msgid "Frame duration:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 msgid "Duration of time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 msgid "Add new animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 msgid "Edit animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 msgid "Window position:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 msgid "3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 msgid "Start region:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 msgid "End region:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 msgid "Zoom value:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 msgid "No map series or space-time dataset added."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 msgid "List of animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 msgid "Add time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 msgid "Choose image file"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 msgid "Choose file to save animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 msgid "Export directory is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 msgid "Add space-time dataset layer"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 msgid "Multiple raster maps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 msgid "Multiple vector maps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 msgid "Multiple 3D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 msgid "Space time raster dataset"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 msgid "Space time vector dataset"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 msgid "Space time 3D raster dataset"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 msgid "Input data type:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 msgid "Select raster/vector maps."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 msgid "Animation Tool settings"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 msgid "Text foreground color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 msgid "Text background color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 msgid "Absolute time format:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 msgid "Change animation speed"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 msgid "Unable to perform analysis."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -5860,45 +6197,45 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 msgid "Map can be created only in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
-#, python-format
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
+#, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
-msgstr ""
+msgstr "Paikka <%s> luotu"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 msgid "Overwrite vector map"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -5906,548 +6243,549 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 msgid "Unable to use ctypes. \n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, python-format
 msgid "Vector map '%s' does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 msgid "Vector map was not chosen."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 msgid "arc layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 msgid "node layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 msgid "turntable layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 msgid "Node cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 msgid "Overwrite map layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 msgid "Point list toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 msgid "Iso lines:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 msgid "Add vector map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 msgid "Creating turntable..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 msgid "Input vector map does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 msgid "Other settings"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, python-format
 msgid "Color table style %s:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 msgid "New vector map with turntable"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 msgid "Delete selected point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6457,348 +6795,370 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 msgid "Set computational region extent interactively"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 msgid "Set computational region from named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+msgid "Raster Digitizer Toolbar"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 msgid "Map display test"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, python-format
+msgid "Unable to create file <%s>"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr ""
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
+msgid "Select vector feature(s)"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+msgid "Select features interactively from vector map"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
 msgid "Show/hide scale bar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+msgid "Raster digitizer"
+msgstr ""
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 msgid "Modify the configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 msgid "View and edit a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 msgid "Remove new r.li configuration file?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr ""
 
@@ -6806,294 +7166,294 @@ msgstr ""
 msgid "Create new configuration file for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 msgid "Create new r.li configuration file?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 msgid "Name for new configuration file to create"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 msgid "Vector map layer to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 msgid "Whole map layer"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 msgid "Keyboard setting"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 msgid "Insert sampling frame parameter"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 msgid "Insert sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 msgid "Choose a method"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 msgid "Number of regions to draw:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 msgid "Do you want to check vector areas?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 msgid "Select if use area by area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 msgid "Analysing vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 msgid "Draw sampling regions"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 msgid "Draw sample region "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 msgid "Select type of shape"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 msgid "Width size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 msgid "Name of the circle mask"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 msgid "Insert number of row strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 msgid "Set sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 msgid "Draw sampling units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 msgid "Number of sampling area to draw:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 msgid "Select sample area "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7101,171 +7461,182 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 msgid "Select sample area 1 of "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 msgid "Name circle mask:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 msgid "Width size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 msgid "Height size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 msgid "Number row strates:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 msgid "Number column strates:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+msgid "Simple &editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+msgid "Console"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+msgid "Python"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7273,232 +7644,220 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 msgid "Usage: cd [directory]"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+msgid "GRASS SVN revision"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7506,34 +7865,34 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 msgid "Unable to start Timeline Tool."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 msgid "Unable to start Temporal Plot Tool."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7541,54 +7900,52 @@ msgid ""
 "from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr ""
 
@@ -7602,12 +7959,14 @@ msgid "Set raster output format"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr ""
 
@@ -7628,7 +7987,7 @@ msgstr ""
 msgid "Add command layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr ""
@@ -7678,8 +8037,8 @@ msgid "Add rhumbline layer"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr ""
 
@@ -7699,282 +8058,273 @@ msgstr ""
 msgid "Background vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 msgid "Create pack"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+msgid "Set color table interactively"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 msgid "Report raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -7982,592 +8332,599 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 msgid "At least 2 raster maps must be specified"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 msgid "Histogram of selected raster maps"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 msgid "Raster temporal dataset (strds)"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 msgid "Select attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 msgid "Select category of vector(s)"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+msgid "Invalid input coordinates"
+msgstr ""
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, python-format
 msgid "Temporal resolution: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-msgid "Invalid input coordinates"
+#: ../gui/wxpython/tplot/frame.py:724
+msgid "Seed point outside the current region"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 msgid "Invalid input raster dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 msgid "Invalid input vector dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 msgid "Invalid input temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, python-format
 msgid "Space time raster dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, python-format
 msgid "Space time vector dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Tiedosto"
 
@@ -8575,8 +8932,8 @@ msgstr "&Tiedosto"
 msgid "Workspace"
 msgstr "Työtila"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Uusi"
 
@@ -8584,7 +8941,7 @@ msgstr "Uusi"
 msgid "Create new workspace"
 msgstr "Luo uusi työtila"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Avaa"
 
@@ -8592,12 +8949,12 @@ msgstr "Avaa"
 msgid "Load workspace from file"
 msgstr "Lataa työtila tiedostosta"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Tallenna"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Tallenna nimellä"
 
@@ -8618,7 +8975,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Karttanäyttö"
 
@@ -8647,7 +9004,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr ""
 
@@ -9281,23 +9638,23 @@ msgstr ""
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -9335,15 +9692,15 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr ""
 
@@ -9355,7 +9712,7 @@ msgstr ""
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Sulje"
@@ -9364,8 +9721,8 @@ msgstr "Sulje"
 msgid "Quit wxGUI session."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 msgid "Quit GRASS GIS"
 msgstr ""
 
@@ -9373,7 +9730,7 @@ msgstr ""
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr ""
 
@@ -9536,7 +9893,7 @@ msgstr ""
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr ""
 
@@ -10541,7 +10898,7 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr ""
 
@@ -10783,8 +11140,8 @@ msgid "Develop vector map"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr ""
 
@@ -11626,12 +11983,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -12618,23 +12975,27 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 msgid "Timeline tool"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 msgid "Temporal plot tool"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 msgid "Plot temporal values."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr ""
 
@@ -12659,7 +13020,7 @@ msgid "Prints system information"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr ""
 
@@ -12671,266 +13032,274 @@ msgstr ""
 msgid "Attribute table manager"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 msgid "Add or edit map frame"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -12938,12 +13307,12 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -12951,288 +13320,320 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Luokka"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Valitse viivat"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Luo uusi karttajoukko"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Vektorikarttaa ei voida päivittää."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Poista valitut"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Paikka <%s> luotu"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Vektorikarttaa ei voida päivittää."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 msgid "Run selected module from the tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 msgid "Revert settings to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -13244,78 +13645,87 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 msgid "Lat/long projections"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+msgid "Unable to read EPGS codes: {}"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 msgid "Select default output font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+msgid "Example"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -13324,253 +13734,338 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "ZIP tiedostot"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr ""
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "Lataa"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Avaa"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+msgid "Set parameters for the script"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+msgid "Run (Ctrl+R)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+msgid "GRASS GIS Simple Python Editor"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 msgid "Load and edit content of a file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -13578,44 +14073,44 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr ""
 
@@ -13623,532 +14118,426 @@ msgstr ""
 msgid "Location or mapset is not defined."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 msgid "No raster maps selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-msgid "Add linked layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-msgid "Unable to determine number of raster bands"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-msgid "No layers selected."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 msgid "Citation"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 msgid "Remove selected map(s) from list"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 msgid "Layer up"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 msgid "Move selected layer(s) up"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 msgid "Layer down"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 msgid "Move selected layer(s) down"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 msgid "Edit layer properties"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 msgid "Change opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr ""
 
@@ -14244,974 +14633,998 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 msgid "Select graphics tool"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+msgid "Source input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Tiedosto"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Kaikki tiedostot"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "ZIP tiedostot"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "GZIP tiedostot"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "TAR tiedostot"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "TARGZ tiedostot"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Tiedosto:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 msgid "simple features"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
-msgid "No settings available"
+#: ../gui/wxpython/gui_core/gselect.py:1823
+msgid "No settings available"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
+msgid "No data source defined, settings are not saved."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/gselect.py:2327
+msgid "LineString"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/gselect.py:2327
+msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
-msgid "No data source defined, settings are not saved."
+#: ../gui/wxpython/gui_core/gselect.py:2546
+msgid "No vector map selected in layer manager. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
-msgid "LineString"
+#: ../gui/wxpython/gui_core/gselect.py:2559
+msgid "Input vector map is not selected"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
-msgid "Polygon"
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 msgid "GRASS GIS Timeline Tool"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 msgid "Select space time dataset(s):"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr "X [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr "Y [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Karttajoukko: %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr "Kartan nimi: %s"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, python-format
 msgid "End time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 msgid " Requested data settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 msgid "Request"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 msgid "List of layers "
 msgstr "Tasojen lista"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 msgid "Source projection:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 msgid "Advanced request settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 msgid "Reprojection method:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 msgid "Linear interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 msgid "Cubic interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 msgid "Source image format"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 msgid "Select source projection.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr "taso"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "tyyli"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
-msgid "Add default servers"
+#: ../gui/wxpython/web_services/widgets.py:1154
+msgid "Add default"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Palvelin:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Yhdistä palvelimeen"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 msgid "Show advanced connection settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 msgid "Hide advanced connection settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 msgid "Output layer name:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "Käyttäjänimi:"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Salasana:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr "Yhdistetään <%s> ..."
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr "Yhdistetty <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, python-format
 msgid "Unable to connect to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 msgid "Name for output raster map:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 msgid "Export region"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 msgid "Named region"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 msgid "Extent and resolution are based on named region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 msgid "Overwrite existing raster map"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 msgid "Choose named region:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 msgid "Save web service layer as raster map"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, python-format
 msgid "Region <%s> does not exist."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 msgid "Downloading data..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 msgid "Unable to fetch data.\n"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Lataa"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 msgid "&Set"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 msgid "Load color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Taso:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "mapcalc lauseke"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operaattorit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operandit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Lauseke"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Tallenna lauseke tiedostoon"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Lataa lauseke tiedostosta"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "eksponentti"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "jaa"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "lisää"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "vähennä"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "modulus"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "kerro"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Etäkirjasto"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, python-format
+msgid "%d extensions loaded"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr "Asenna"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr "Näytä käsikirjan sivu"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, python-format
 msgid "Unable to load extensions. %s"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 msgid "Manage installed GRASS Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 msgid "Uninstall"
 msgstr "Poista asennus"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 msgid "Uninstall selected Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr "Asenna uudelleen"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 msgid "Reinstall selected Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 msgid "No extension selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -15220,245 +15633,377 @@ msgid ""
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 msgid "Extension"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:145
+msgid "Import settings"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+msgid "Add linked layers into layer tree"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:431
+msgid "Unable to determine number of raster bands"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:758
+msgid "No layers selected."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projektio:"
+
+#: ../gui/wxpython/modules/import_export.py:848
+msgid "Name for output GRASS map"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+msgid "Layers to be reprojected"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Nimeä uudelleen valittu karttajoukko"
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Valmis."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -15466,20 +16011,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -15488,182 +16033,175 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, python-format
+msgid "Rendering failed: %s"
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:602
+msgid "Rendering aborted"
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:643
+msgid "Rendering & "
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1386
-msgid "Rendering & "
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr ""
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 msgid "Unable to create toolboxes directory."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+msgid "failed to open '{}'"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -15672,172 +16210,177 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "VIRHE: Karttajoukkoa <%s> ei löydy\n"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 msgid "Data point"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 msgid "List left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -15845,11 +16388,11 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -15857,268 +16400,292 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+msgid "Simple methods:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+msgid "Advanced methods:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+msgid "Choose IAU Code"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+msgid "IAU code:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+msgid "Choose IAU codes file"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+msgid "Unable to read IAU codes: {}"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "GRASS Tietokanta:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Paikan Nimi:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Paikan Otsikko:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projektio:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Luo uusi Paikka?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Määrittele uusi GRASS Paikka"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -16126,246 +16693,250 @@ msgid ""
 "Details: %(err)s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+msgid "IAU code missing."
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Pohjoinen"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Länsi"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Itä"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Etelä"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -16373,748 +16944,748 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Arvo:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Läpinäkyvyys:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Näytä vektoriviivat"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Vektoriviivat"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Viiva:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "leveys:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "väri:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr "kuin 3D"
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Ikoni:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 msgid "3D view default settings"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 msgid "No data set."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -17124,7 +17695,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -17136,22 +17707,22 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 msgid "Scatter plot cannot be added.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -17159,7 +17730,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -17170,31 +17741,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -17205,60 +17776,60 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 msgid "scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr "Nimeä luokka uudelleen"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 msgid "Set color"
 msgstr "Aseta väri"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr "Piilota"
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "Näytä"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 msgid "Move category up"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 msgid "Export class raster"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -17268,185 +17839,192 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 msgid "Add scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr "x akseli:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr "y akseli:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 msgid "No scatter plots selected."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 msgid "Selection polygon color:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 msgid "Selected area color:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 msgid "Selected area opacity:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 msgid "Selection style:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 msgid "Ellipses settings:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 msgid "Add scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 msgid "Create selection polygon"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 msgid "Move boundary vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 msgid "Remove boundary vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 msgid "Add class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 msgid "Remove selected class"
 msgstr ""
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Haluatko luoda uuden karttajoukon?"
+
+#~ msgid "Repository"
+#~ msgstr "Etäkirjasto"
diff --git a/locale/po/grasswxpy_fr.po b/locale/po/grasswxpy_fr.po
index 69f466c..c1e8728 100644
--- a/locale/po/grasswxpy_fr.po
+++ b/locale/po/grasswxpy_fr.po
@@ -9,7 +9,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_fr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-12-13 20:04+0100\n"
 "Last-Translator: Sylvain Maillard <sylvain.maillard at gmail.com>\n"
 "Language-Team: français <grass-translations at lists.osgeo.org>\n"
@@ -20,23 +20,23 @@ msgstr ""
 "X-Generator: Poedit 1.8.5\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Choisir le répertoire des données de GRASS GIS"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Choisir un Secteur"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Choisir un jeu de cartes"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "La base de donnée GRASS contient les secteurs."
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -45,7 +45,7 @@ msgstr ""
 "coordonnées (projection). Un Secteur peut être un projet. Le Secteur "
 "contient des Jeux de données."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
@@ -53,29 +53,29 @@ msgstr ""
 "Les jeux de cartescontiennent les données SIG relatives au projet, tâche "
 "dans un projet, sous-région ou utilisateur."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Démarrer GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "Parcourir"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "&Nouveau"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "Créer un nouveau jeu de cartes dans le secteur choisi"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "N&ouveau"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
@@ -84,126 +84,126 @@ msgstr ""
 "créé, la session GRASS sera lancée."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Ren&ommer"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Renommer le secteur sélectionné"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "Effacer"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Effacer le secteur sélectionné"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Renommer"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Renommer le jeu de cartes sélectionné"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "&Effacer"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Effacer le jeu de cartes sélectionné"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "SIG GRASS %s démarrage %s"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Démarrer une session GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Erreur"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 "Impossible de définir la base de données GRASS. Vérifiez vos paramètres de "
 "langue."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "ERREUR : Secteur <%s> non trouvé\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "ERREUR : Jeu de cartes <%s> non trouvé\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Ligne invalide dans le fichier GISRC (%s) : %s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Erreur : {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr "Voulez-vous importer <%(name)s> dans le nouveau secteur ?"
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "Importer les données ?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Voulez-vous créer un nouveau jeux de données ?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Créer un nouveau jeu de cartes"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Secteur <%s> créé"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "Voulez-vous définir les limites et la résolution la région par défaut "
 "maintenant ?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
@@ -212,7 +212,7 @@ msgstr ""
 "L'import de <%(name)s> a échoué.\n"
 "Raison : %(msg)s"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
@@ -221,7 +221,7 @@ msgstr ""
 "Fichier de données <%(name)s> correctement importé. La région par défaut a "
 "été définie à partir de la carte importée."
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -232,7 +232,7 @@ msgstr ""
 "\n"
 "Ce jeu de cartes ne peut être renommé."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -243,12 +243,12 @@ msgstr ""
 "\n"
 "Entrer le nouveau nom :"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Message"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -259,7 +259,7 @@ msgstr ""
 "\n"
 "Le jeu de cartes <%s> existe déjà dans ce secteur."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -270,7 +270,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -281,7 +281,7 @@ msgstr ""
 "\n"
 "Le secteur <%s> existe déjà dans la base de données GRASS."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -292,7 +292,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -303,7 +303,7 @@ msgstr ""
 "\n"
 "Ce jeu de cartes ne peut être supprimé."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -317,11 +317,11 @@ msgstr ""
 "TOUTES LES CARTES incluses dans ce jeu de cartes seront DÉFINITIVEMENT "
 "SUPPRIMÉES !"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Impossible d'effacer le jeu de cartes"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -332,18 +332,18 @@ msgstr ""
 "\n"
 "TOUTES LES CARTES incluses dans ce secteur seront DÉFINITIVEMENT SUPPRIMÉES !"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Impossible d'effacer le secteur"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 "Impossible de définir la base de données GRASS. Vérifiez vos paramètres de "
 "langue."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
@@ -352,25 +352,25 @@ msgstr ""
 "Pas de Secteur GRASS trouvé dans '%s'. Créez un nouveau Secteur ou "
 "choisissez un autre dossier de base de données GRASS."
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Le chemin %s n'existe pas."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Choisir le répertoire de données SIG"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Entrer le nom du nouveau jeu de cartes :"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Le jeux de cartes <%s> existe déjà."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -383,16 +383,16 @@ msgstr ""
 "\n"
 "Êtes-vous sûr de vouloir créer ce jeu de cartes ?"
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr "Nom de jeu de cartes réservé"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Impossible de créer le nouveau jeu de cartes : %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -411,11 +411,11 @@ msgstr ""
 "Souhaitez-vous essayer de supprimer .gislock (notez qu'il vous faut disposer "
 "de droits pour cette opération) et continuer ?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "Ficher de verrouillage détecté"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -427,7 +427,7 @@ msgstr ""
 "Si vous avez une autre session GRASS en cours, vous risquez de corrompre vos "
 "données. Vérifiez dans votre gestionnaire de tâches pour en être sûr ..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -438,7 +438,7 @@ msgstr ""
 "\n"
 "Détails : %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
@@ -448,11 +448,11 @@ msgstr ""
 "cartes. Merci de n'utiliser que des caractères ASCII sans %(chars)s ni "
 "espaces."
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Nom invalide"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -476,122 +476,122 @@ msgstr ""
 "Échec du chargement de la librairie d'imagerie.\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "SIG GRASS Outil de classification supervisée"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Barre d'outils pour les cartes"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr "Barre d'outils IClass"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr "Outil de numérisation"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr "Fenêre d'aperçu"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr "Affichage des zones d'entrainement"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Ajuster la fenêtre de zones d'entrainement à la fenêtre d'aperçu"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Ajuster la fenêtre d'aperçu à la fenêtre de zones d'entrainement"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 msgid "Display synchronization ON"
 msgstr "Synchronisation de l'affichage ON"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr "Synchronisation de l'affichage OFF"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr "Toutes les modifications seront perdues. Voulez-vous continuer ?"
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importer une carte vecteur"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Pas de surfaces dans la carte vecteur <%s>.\n"
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 "La carte vecteur <%s> contient des points ou des lignes, ces entités seront "
 "ignorés."
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Impossible d'ouvrir la carte vecteur <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Impossible de copier l'entité vectorielle depuis <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 msgid "Unable to open temporary vector map"
 msgstr "Impossible d'ouvrir la carte vecteur temporaire."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr "Pas de zones d'entrainement à exporter."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 "%d zones d'entrainement (%d classes) exportées vers la carte vecteur <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr "Échec de création de la carte vecteurtemporaire."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr "Pas de zones dans la catégorie %s. Catégorie sautée."
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr "Échec de l'analyse."
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr "résultats"
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr "Pas de groupe d'images sélectionné."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
@@ -599,11 +599,11 @@ msgstr ""
 "Suite à un changement récent dans les classes, les signatures peuvent être "
 "obsolètes et doivent être recalculées. Voulez-vous continuer ?"
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr "Signatures obsolètes"
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
@@ -612,15 +612,15 @@ msgstr ""
 "Un fichier de signature appelé <%s> existe déjà.\n"
 "Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Le fichier existe déjà"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr "Pas de groupe d'images sélectionné. Opération annulée."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
@@ -629,30 +629,30 @@ msgstr ""
 "Le groupe <%(group)s> ne contien pas suffisament de fichiers (il y a "
 "%(files)d fichiers). Opération annulée."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr "Pas de zones données. Opération annulée."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 "Les entités vectorielles sont en dehors de la couche raster. Opération "
 "annulée."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Histogrammes"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr "Points de concordance"
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Nuage de points"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -666,7 +666,7 @@ msgstr ""
 "pooints.\n"
 "%s"
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
@@ -675,7 +675,7 @@ msgstr ""
 "de calcul. Merci de commencer par utiliser g.region pour définir la région "
 "appropriée."
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
@@ -686,81 +686,81 @@ msgstr ""
 "\n"
 "Il n'y a pas encore de classes, voulez-vous en créer une ?"
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr "Pas de classe sélectionnée"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr "Nom du sous-groupe requis"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, python-format
 msgid "Group <%s> not found"
 msgstr "Groupe <%s> non trouvé"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Sous-groupe <%s> non trouvé"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Carte raster <%s> non trouvée"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Carte vectorielle <%s> non trouvée"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Chargement de la carte raster <%s> ..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, python-format
 msgid "Loading training map <%s>..."
 msgstr "Chargement de la carte d'entrainement <%s> ..."
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr "Sélectionner un groupe d'images :"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Créer/éditer un groupe ..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr "Le nom du groupe d'images est manquant."
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr "Nom du groupe d'images :"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 msgid "Name of imagery subgroup:"
 msgstr "Nom du sous-groupe :"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr "Merci de choisir un sous-groupe."
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Sous-groupe <%s> non trouvé dans le groupe <%s>"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
@@ -769,7 +769,7 @@ msgstr ""
 "Pas de données trouvées dans le sous-groupe <%s> du groupe <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
@@ -778,479 +778,480 @@ msgstr ""
 "Pas de données trouvées dans le groupe <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr "Nom de la carte manquant."
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Nom de la carte raster :"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Nom de la carte vecteur :"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr "Gestionnaire de classes"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "Classes"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr "Nom de la classe"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Couleur"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr "Merci de n'utiliser que des caractères ASCII."
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr "Zoomer sur les zones d'entrainement de la classe sélectionnée"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr "Enregistrer le fichier de signatures"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr "Entrer le nom du fichier de signatures :"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr "Chemin du fichier de signatures :"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr "Exporter les zones d'entrainement"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr "Nom de la nouvelle carte vecteur :"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr "Exporter la table d'attributs"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr "Exporter la table d'attributs contenant les données de statistiques"
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Le fichier région <%s> existe déjà. Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr "La carte vecteur <%s> existe"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr "Définir le niveau d'opacité"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 "Lancer l'analyse, mettre à jour l'histogramme et les points de concordance"
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr "Enregistrer l'expression dans un fichier"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 msgid "Remove selected map layer"
 msgstr "Supprimer la couche sélectionnée"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 msgid "Export training areas to vector map"
 msgstr "Exporter les zones d'entrainement vers une carte vecteur"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 msgid "Import training areas from vector map"
 msgstr "Importer les zones d'entrainement depuis une carte vecteur"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Ajouter une couche RVB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr "Training"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Aperçu"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr "Définir la trame de carte pour"
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr "/ Zoomer sur la carte"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr "écart type"
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Ajouter une carte raster"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr "Barre d'outils principale"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Barre d'outils divers"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr "Carte <%s> non trouvée. "
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Carte <%s> non trouvée."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Rien à afficher (carte vide). Opération annulée."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Choisissez un nom de fichier pour enregistrer l'image (extension non "
 "nécessaire)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 "Pas de carte rater ou couche de carte vecteur sélectionnée pour "
 "interrogation."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 msgid "Select raster maps"
 msgstr "Sélectionner les cartes raster"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 msgid "Name of top/left raster map:"
 msgstr "Nom de la carte raster haut/gauche :"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 msgid "Name of bottom/right raster map:"
 msgstr "Nom de la carte raster bas/droite :"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr "Basculer vers le mode avancé"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr "Annuler"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr "Basculer vers le mode simple"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Fermer"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr "Le nom de la première carte est manquant."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr "Le nom de la deuxième carte est manquant."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 msgid "Map Swipe settings"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Mode miroir"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Curseur miroir"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Couleur :"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr "Forme :"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Épaisseur de ligne :"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Taille :"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Outils"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Interroger une (des) carte(s) raster ou vecteur"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Interroge la (les) carte(s) 'raster' ou vectorielle(s) sélectionnées"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 msgid "Choose view mode"
 msgstr "Choisir le mode de vue"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 msgid "Switch orientation"
 msgstr "inverser l'orientation"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr "Inverser les cartes"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Gestion des points de contrôle"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "Liste des points de contrôle"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "Affichage source"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "Affichage cible"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "Barre d'outil d'affichage des points de contrôle"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Barre d'outils du gestionnaire de points de contrôle"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Mise en page"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Aperçu avant impression"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Imprimer l'écran"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Zoomer sur la région de calcul (définie avec g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Zoom sur la région par défaut"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Zoom sur la région enregistrée"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Définir la région calculée à partir de celle de l'écran"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Enregistrer la géométrie de l'écran dans un nom de région"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Aller au point d'amer no."
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Plage de validité :"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "Erreur RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Prograde : %(forw)s, Rétrograde: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "paramétrage de la géo-rectification"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Paramétrage de la géo-rectification annulée."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Choisir le type de carte, le secteur et le jeu de cartes"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Type de carte à géo-rectifier"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vecteur"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Choisir le secteur source : "
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Choisir le jeu de cartes source :"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 "Vous devez sélectionner un secteur valide avant de sélectionner un jeu de "
 "cartes"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 "Vous devez sélectionner un secteur et un jeu de cartes valides pour pouvoir "
 "continuer"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Choisir un groupe d'images/cartes à géo-rectifier"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Choisir un groupe :"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Créer un groupe si aucun n'existe"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Ajouter une carte vecteur au groupe ..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Suffixe pour les cartes en sortie :"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 "Vous devez sélectionner un groupe d'images ou de cartes valides pour pouvoir "
 "continuer"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Vous devez entrer un suffixe au nom de la carte pour pouvoir continuer"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 "Sélectionner les cartes à afficher pour la création des points de contrôle"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Sélectionner la carte source à afficher :"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr "Sélectionner la carte raster cible à afficher :"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr "Sélectionner la carte vecteur cible à afficher :"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Vous devez choisir une carte source pour pouvoir continuer"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1259,28 +1260,28 @@ msgstr ""
 "Pas de cartes dans le groupe sélectionné <%s>.\n"
 "Merci d'éditer le groupe ou de sélectionner un autre groupe."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Gérer les points d'amer"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Un minimum de %d PCS est requis. Opération annulée."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "source"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "cible"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Définir les coordonnées des points de contrôle"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1293,28 +1294,28 @@ msgstr ""
 "Est: %(coor0)s \n"
 "Nord: %(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Échec de l'écriture du fichier POINTS"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Fichier POINTS enregistré pour le groupe <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "fenêtre source non définie"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "fenêtre destination non définie"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Lecture du fichier POINTS impossible"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1329,38 +1330,38 @@ msgstr ""
 "6 points ou + nécessaires pour le 2ème ordre, et\n"
 "10 points ou + nécessaires pour le 3ème ordre."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rectification des images en cours, merci de patienter ..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformation de <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rectification de la carte vectorielle <%s>, merci de patienter ..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Échec du géoréférencement de la carte vecteur <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "Paramètres du gestionnaire de points de contrôle"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Quitter le gestionnaire de points d'amer"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Enregistrer les points de contrôle ?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
@@ -1368,7 +1369,7 @@ msgstr ""
 "Impossible de calculer l'erreur RMS.\n"
 "Possible erreur avec m.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
@@ -1376,118 +1377,118 @@ msgstr ""
 "Impossible de calculer la nouvelle emprise.\n"
 "Possible erreur avec m.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Ajuster l'affichage source à l'affichage cible"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Ajuster l'affichage cible à l'affichage source"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "utiliser"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "E source"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "N source"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "E cible"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "N cible"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Erreur suivante"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Erreur précédente"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Valeur de coordonnées non valide. Opération annulée."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Créer un nouveau groupe de cartes vectorielles"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Sélectionner carte(s) vecteur à ajouter au groupe :"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Modifier les points de contrôle"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Point de contrôle no."
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "E source :"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "E cible :"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "N cible :"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "N cible"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Appliquer les changements pour la session courante"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Appliquer et enregistrer les modifications des paramètres utilisateur "
 "(valeurs par défaut pour la prochaine session)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Fermer la boîte de dialogue"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Symbologie"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Surligner seulement la plus haute RMS"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Surligner erreur RMS > M + V*facteur"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1497,64 +1498,64 @@ msgstr ""
 "moyenne + variance*facteur donné. \n"
 "Les valeurs recommandées pour ce facteur se situent entre 1 et 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Paramètres des symboles"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Couleur pour erreur RMS élevée :"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Couleur pour les points de contrôle sélectionnés :"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Couleur pour les points de contrôle non utilisés :"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Montrer les points de contrôle non utilisés"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Taille de symbole :"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Rectification"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "Sélectionner l'ordre de la rectification"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "1er ordre"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "2ème ordre"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "3ème ordre"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Sélectionner la méthode d'interpolation :"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "Circoncire à la région de calcul dans le secteur cible"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "Le seuil RMS doit être positif"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1562,23 +1563,23 @@ msgstr ""
 "Le facteur de seuil RMS est < 1\n"
 "Trop de points doivent être surlignés"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr ""
 "Paramètres du gestionnaire de points de contrôle enregistrés dans le fichier "
 "'%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 msgid "GRASS GIS Vector Digitizer"
 msgstr "SIG GRASS Numérisation de vecteur"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "La numérisation de vecteur n'est pas disponible. %s"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
@@ -1587,17 +1588,17 @@ msgstr ""
 "Carte vectorielle <%s> non trouvée dans le jeux de données courant. Un "
 "nouvelle carte vectorielle peut être crée en fournissant le paramètre '-c'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Nouvelle carte vecteur <%s> créée"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Impossible de créer la nouvelle carte vecteur <%s>"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1608,258 +1609,258 @@ msgstr ""
 "est requise pour la digitalisation. Voulez-vous reconstruire la topologie "
 "(peut prendre du temps) et ouvrir la carte vecteur pour édition ?"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Topologie absente"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Mettre à jour les catégories"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Aucune carte vecteur sélectionnée pour édition."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 "Pas d'action. Choisissez l'outil approprié depuis la barre d'outil de "
 "numérisation."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Boîte de dialogue étiquetage en masse d'altitude"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Paramètres de numérisation"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Appliquer les modifications pour cette session"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 "Fermer la boîte de dialogue et enregistrer les modifications dans le fichier "
 "de paramètres utilisateur"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Fermer la boîte de dialogue et ignorer les changements"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Général"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Affichage"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Épaisseur de ligne"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Magnétisme"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Seuil de magnétisme"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "pixels écran"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "Unités de carte"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Magnétiser aussi les vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Le seuil de magnétisme vaut %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Sélectionner les entités vectorielles"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Seuil de sélection"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Ne sélectionner que les entités contenues dans la boîte de sélection"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 "Par défaut sont sélectionnées toutes les entités chevauchent la boîte de "
 "sélection"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Vérifier les doublons"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr "Numériser des lignes/contours"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Couper les lignes aux intersections"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr "Numériser une nouvelle surface"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr "Fermer le contour (accrocher au noeud de départ)."
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Enregistrer les modifications"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Enregistrer les modifications à la sortie"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Outil de requête"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Choisir l'outil de requête"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Sélection par boîte"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "longueur"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Sélectionner des lignes"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "Plus court que"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "plus long que"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "pendant"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Sélection des pendants"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Attributs"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Numériser une nouvelle entité"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Ajouter un enregistrement à la table"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Couche"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Catégorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Mode"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Suivant à utiliser"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Numéro de catégorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Mode catégorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Entrée manuelle"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Pas de catégorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Supprimer l'(les) entité(s) existante(s)"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Supprimer l'enregistrement de la table"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Attributs géométriques"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "surface"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "périmètre"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
@@ -1867,111 +1868,111 @@ msgstr ""
 "Note : ces paramètres sont stockés dans l'espace de travail, et non dans les "
 "préférences du module de numérisation."
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Numériser une nouvelle ligne"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Numériser un nouveau contour"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Mise en surbrillance"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Colorer (doublons)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Point"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Ligne"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Contour (pas de surface)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Contour (une surface)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Contour (deux surfaces)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centroïde (dans une surface)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroïde (hors d'une surface)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroïde (doublon dans une surface)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Nœud (une ligne)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Nœud (deux lignes)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Surface (contour fermé + centroïde)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Direction"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Magnétisme désactivé"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "Le seuil de magnétisme vaut %(value).1f %(units)s (fondé sur la résolution "
 "calculée)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Paramètres du module de numérisation enregistrés dans le fichier <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Erreur de numérisation"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Impossible d'ouvrir la carte vecteur <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "Pas de carte vecteur sélectionnée pour édition."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1982,23 +1983,23 @@ msgstr ""
 "\n"
 "Raison: %s"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Échec de lecture de l'entité d'id %d. Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Liaison avec la base de données %d non disponible. Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 "Impossible de démarrer le pilote de base de données <%s>. Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
@@ -2006,57 +2007,57 @@ msgstr ""
 "Impossible d'ouvrir la base de données <%(db)s> avec le pilote <"
 "%(driver)s> . Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Impossible d'exécuter la requête SQL '%s'. Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "L'entité d'id %d est marquée comme morte. Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Type d'entité %d non pris en charge. Opération annulée."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Type d'entité '%s' inconnu"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "Pas assez de points pour créer une ligne"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Liste des catégories - clic droit pour supprimer"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Ajouter une catégorie"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Appliquer les changements"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignorer les modifications et fermer la boîte de dialogue"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Appliquer les modifications et fermer la boîte de dialogue"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Id de l'entité :"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2067,250 +2068,250 @@ msgstr ""
 "Les numéros de couche et de catégorie doivent être des nombres entiers.\n"
 "Le numéro de couche doit être supérieur à zéro."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Supprimer la sélection"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Supprimer tout"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Recharger"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Impossible de mettre à jour la carte vecteur."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d lignes sélectionnées pour l'étiquetage en masse d'altitude"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Fixer la valeur"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Valeur de départ"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Pas"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Liste de doublons"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Id de l'entité"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Couche (Catégories)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr "Sélectionner l'outil polygone/contour/centroïde"
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Numériser un nouveau point"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Gauche : nouveau point"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Numériser une nouvelle ligne"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Gauche : nouveau point ; Ctrl+gauche : annuler le dernier point ; Droite : "
 "fermer la ligne"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Numériser un nouveau contour"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Numériser un nouveau centroïde"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr "Numériser une nouvelle surface (contour sans catégorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr "Ajouter un nouveau sommet à la ligne ou au contour"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr ""
 "Gauche : Sélectionner ; Ctrl+Gauche : Dé-sélectionner : Droite : Confirmer"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 "Supprimer le(s) point(s), ligne(s), contour(s) ou centroïde(s) sélectionné(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr "Supprimer la surface sélectionné(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Afficher/mettre à jour les attributs"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Gauche : Sélectionner "
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Afficher/mettre à jour les catégories"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 msgid "Edit selected line/boundary"
 msgstr "Modifier les lignes/contours sélectionné(e)s"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 "Déplacer le(s) point(s), ligne(s), contour(s) ou centroïde(s) sélectionné(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr "Déplacer le sommet sélectionné"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 msgid "Remove selected vertex"
 msgstr "Supprimer le sommet sélectionné"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Quitter l'outil d'édition"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Quitter le numériseur et enregistrer les modifications"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Manuel de numérisation vectorielle"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Afficher le manuel de la numérisation vectorielle"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Outils additionnels (copier, retourner, connecter, ...)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Annuler"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Annuler les changements précédents"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr "Refaire"
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr "Refaire les changements précédents"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Couper les lignes/contours sélectionné(e)s aux intersections"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Connecter les lignes/contours sélectionné(e)s"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Copier les catégories"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Copier les entités depuis une carte vecteur (d'arrière-plan)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Copier les attributs"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Conversion de type d'entités"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Retourner les lignes/contours sélectionné(e)s"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Fusionner les lignes/contours sélectionné(e)s"
 
 # À défaut de mieux, je traduis snap ou snapping par magnétisme, magnétiser. Ouvert à d'autres suggestions...
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Magnétiser les lignes/contours sélectionné(e)s (seulement aux nœuds)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Couper une ligne/limite"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Interroger des entités"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "étiquetage d'altitude en masse de lignes 3D"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 msgid "Select background vector map"
 msgstr "Sélectionner la carte vectorielle de fond"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "La carte vecteur n'est pas 3D. Opération annulée."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Sélectionner une carte vecteur"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2323,16 +2324,16 @@ msgstr ""
 "Voulez-vous reconstruire la topologie (peut prendre du temps) et ouvrir la "
 "carte vecteur pour édition ?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr "Erreur de numérisation"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Merci d'attendre, ouverture de la carte vecteur <%s> pour édition..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
@@ -2340,49 +2341,50 @@ msgstr ""
 "Type d'entité '%(type)s' non prise en charge. Impossible de modifier la "
 "couche OGR <%(layer)s>."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr "Numérisation de vecteur"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Souhaitez-vous enregistrer les modifications de carte vecteur <%s> ?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Enregistrer les modifications ?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Merci de patienter, fermeture et reconstruction de la topologie de la carte "
 "vecteur <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Édition de la carte vecteur <%s> terminée avec succès"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Nouvelle carte vecteur"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr "La propriété n'existe pas : %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr "Mesure terminée"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2391,15 +2393,15 @@ msgstr ""
 "Cliquer et glisser avec le bouton gauche de la souris pour mesurer. %s "
 "Double-cliquer avec le bouton gauche pour annuler."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Mesure de la distance"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Mesure de la distance :"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
@@ -2408,132 +2410,148 @@ msgstr ""
 "Le calcul de laa distance géodésique n'est pas disponible.\n"
 "Raison : %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segment"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "distance totale"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "gisement"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr "degrés (sens horaire)"
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr "Mesure du polygone :"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr "Unité non reconnue, la mesure a échoué."
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr "Surface : {area} {unit}\n"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr "légende"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr "barre d'échelle"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr "flèche nord"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr "'Copier les coordonnées dans le presse-papier"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+msgid "Hide toolbars"
+msgstr "Cacher les barres d'outils"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+msgid "Show toolbars"
+msgstr "Afficher les barres d'outils"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr "Cacher la barre de status"
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+msgid "Show statusbar"
+msgstr "Afficher la barre de status"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Cacher {overlay}"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 msgid "Resize legend"
 msgstr "Redimensionner la légende"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Merci de patienter, export de l'image en cours ..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Zoomer sur les limites de la région enregistrée"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 msgid "Set compulational region from named region"
 msgstr "Définir la région de calcul à partir d'une région enregistrée"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Région <%s> non trouvée. Opération annulée."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Enregistrer les limites d'affichage dans un fichier de région"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 msgid "Save computational region to region file"
 msgstr "Enregistrer la région de calcul vers un fichier de région"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Le fichier région <%s> existe déjà. Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Attention"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
@@ -2541,32 +2559,32 @@ msgstr ""
 "Merci d'installer la librairie Pyhton Imaging Library (PIL)\n"
 "pour un meilleur contrôle de la légende et des décorations."
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Montrer l'objet texte"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr "Texte :"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotation :"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Police :"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Définir la police"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2574,75 +2592,432 @@ msgstr ""
 "Glisser le texte avec la souris en mode pointeur.\n"
 "Double-clic pour modifier les options."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Impossible de lire les jeux de cartes du secteur {l}."
+
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Impossible de lire les cartes du secteur {l}."
+
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+"La carte raster <%s> existe déjà dans le jeu de cartes courant.  Voulez-vous "
+"l'écraser ?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Écraser ?"
+
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "Choisir un secteur GRASS et un jeu de cartes"
+
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
+"Couche {layer} copiée dans le presse-papier; Vous pouvez la coller dans le "
+"jeux de cartes sélectionné."
+
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+msgid "New name"
+msgstr "Nouveau nom"
+
+#: ../gui/wxpython/datacatalog/tree.py:599
+msgid "Rename map"
+msgstr "Renommer la carte"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, python-brace-format
+msgid "Editing {name}"
+msgstr "Édition de {name}"
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Renommage de {name} ..."
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Aucune carte vecteur sélectionnée pour édition."
+
+#: ../gui/wxpython/datacatalog/tree.py:659
+msgid "Copy map"
+msgstr "Copier la carte"
+
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Couche non copiée : la nouvelle couche a le même nom"
+
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr ""
+"%s <%s> existe déjà dans le jeu de cartes courant. Voulez-vous l'écraser ?"
+
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Copie de {name} ..."
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr ""
+"Échec de copie de la couche : cette action est autorisée uniquement dans le "
+"même secteur."
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid ""
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:765
+msgid "Delete map"
+msgstr "Supprimer la carte"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Suppression de {name} ..."
+
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "supprimer les doublons"
+
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Affichage de {name} ..."
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+"Échec d'affichage de la couche : pas dans le jeu de données courant ou "
+"couche invalide"
+
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "complément à 1"
+
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "Une carte ne peut être crée que dans le jeu de cartes courant"
+
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
+msgstr "&Copier"
+
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "&Coller"
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Afficher la carte"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Inverser les cartes"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "Fermer le catalogue de données du SIG GRASS"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Fermer le catalogue de données du SIG GRASS"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
+#, python-format
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
+"Le secteur courant est <%(loc)s>.\n"
+"Le jeu de cartes courant est <%(mapset)s>."
+
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr "Le jeux de cartes actuel est <%s>."
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
+msgid "Data catalog"
+msgstr "Catalogue de données"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Nom du secteur GRASS :"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Cliquer pour modifier les paramètres de couche"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Rechercher un module"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+msgid "Please select first the raster map"
+msgstr "Merci de commencer par sélectionner la carte raster"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr "Clic droit pour terminer la surface"
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr "Clic droit pour terminer la ligne"
+
+#: ../gui/wxpython/rdigit/controller.py:303
+msgid "Do you want to save changes?"
+msgstr "Voulez-vous enregistrer les modifications ?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+msgid "Save raster map changes"
+msgstr "Enregistrer les modifications de la carte raster"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+msgid "Failed to create backup copy of edited raster map."
+msgstr ""
+"Échec de création de la copie de sauvegarde de la carte raster en "
+"modification."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+msgid "Failed to create new raster map."
+msgstr "Échec de création de la nouvelle carte raster."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Générer (l'affichage)"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+msgid "Failed to set default color table for edited raster map"
+msgstr ""
+"Échec de définition de la table de couleur par défaut pour la carte raster "
+"modifiée"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+msgid "Create new raster map"
+msgstr "Créer un nouvelle carte raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+msgid "Name for new raster map:"
+msgstr "Nom de la nouvelle carte raster :"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+msgid "Optionally select background raster map:"
+msgstr "Sélectionner une carte raster de fond (optionnel) :"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+msgid "New raster map type:"
+msgstr "Type de la nouvelle carte raster :"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+msgid "Please specify name for a new raster map"
+msgstr "Merci d'indiquer un nom pour la nouvelle carte raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"La carte raster <%s> existe déjà dans le jeu de cartes courant.  Voulez-vous "
+"l'écraser ?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+msgid "Digitize area"
+msgstr "Numériser une surface"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+msgid "Digitize line"
+msgstr "Numériser une ligne"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+msgid "Digitize point"
+msgstr "Numériser un point"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+msgid "Save raster map"
+msgstr "Enregistrer la carte raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+msgid "Quit raster digitizer"
+msgstr "Quitter l'outil d'édition raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+msgid "Select raster map"
+msgstr "Sélectionner une carte raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr "Définir la couleur de dessin (pas la couleur des cellules du raster)"
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+msgid "Cell value:"
+msgstr "Valeurs de cellule :"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+"Largeur de la ligne en cours de numérisation ou diamètre d'un point en "
+"unités de carte."
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Largeur :"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+msgid "New raster map"
+msgstr "Nouvelle carte raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
 msgid "GRASS GIS Graphical Modeler"
 msgstr "Modeleur Graphique de GRASS"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
+#: ../gui/wxpython/gmodeler/frame.py:146
 msgid "Model"
 msgstr "Modèle"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
+#: ../gui/wxpython/gmodeler/frame.py:149
 msgid "Items"
 msgstr "Objets"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
 msgid "Variables"
 msgstr "Variables"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
+#: ../gui/wxpython/gmodeler/frame.py:157
 msgid "Python editor"
 msgstr "Éditeur Python"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
 msgid "Command output"
 msgstr "Messages de la commande"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
+#: ../gui/wxpython/gmodeler/frame.py:243
 msgid "Python script contains local modifications"
 msgstr "Le script Python contient des modifications locales"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
 msgid "Python script is up-to-date"
 msgstr "Le script Python est à jour"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
+#: ../gui/wxpython/gmodeler/frame.py:262
 msgid "Redrawing model..."
 msgstr "Redessine le modèle ..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/gmodeler/frame.py:298
 msgid "Do you want to save changes in the model?"
 msgstr "Voulez-vous enregistrer les modifications du modèle ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/gmodeler/frame.py:300
 msgid "Do you want to store current model settings to model file?"
 msgstr ""
 "Voulez-vous enregistrer les paramètres du modèle courants dans un fichier ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
+#: ../gui/wxpython/gmodeler/frame.py:306
 msgid "Quit Graphical Modeler"
 msgstr "Quitter le Modeleur Graphique"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/gmodeler/frame.py:360
 msgid "No intermediate data to delete."
 msgstr "Pas de données intermédiaires à supprimer."
 
-#: ../gui/wxpython/gmodeler/frame.py:322
+#: ../gui/wxpython/gmodeler/frame.py:366
 #, python-format
 msgid "Do you want to permanently delete data?%s"
 msgstr "Voulez vous supprimer les données définitivement ? %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
+#: ../gui/wxpython/gmodeler/frame.py:368
 msgid "Delete intermediate data?"
 msgstr "Supprimer les donnés inntermédiaires ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
+#: ../gui/wxpython/gmodeler/frame.py:385
 #, python-format
 msgid "%d maps deleted from current mapset"
 msgstr "%d cartes supprimées du jeu de cartes courant"
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
 msgid ""
 "Current model is not empty. Do you want to store current settings to model "
 "file?"
@@ -2650,52 +3025,52 @@ msgstr ""
 "Le modèle courant n'est pas vide. Voulez-vous enregistrer les paramètres "
 "courants dans un fichier ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
 msgid "Create new model?"
 msgstr "Créer un nouveau modèle ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/gmodeler/frame.py:443
 msgid "Choose model file"
 msgstr "Choisir le fichier de modèle"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
 msgid "GRASS Model File (*.gxm)|*.gxm"
 msgstr "Ficher modèle GRASS (*.gxm)|*.gxm"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
+#: ../gui/wxpython/gmodeler/frame.py:466
 #, python-format
 msgid "%(items)d items (%(actions)d actions) loaded into model"
 msgstr "%(items)d objets (%(actions)d actions) chargés dans le modèle"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
 #, python-format
 msgid "Model file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Le fichier de modèle <%s> existe déjà. Voulez-vous écraser ce fichier ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
 msgid "Save model"
 msgstr "Enregistrer le modèle"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
 #, python-format
 msgid "File <%s> saved"
 msgstr "Fichier <%s> enregistré"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/gmodeler/frame.py:503
 msgid "Choose file to save current model"
 msgstr "Choisir le fichier où enregistrer le modèle courant"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
+#: ../gui/wxpython/gmodeler/frame.py:604
 msgid "Model is empty. Nothing to validate."
 msgstr "Le modèle est vide. Rien à valider."
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
 msgid "Validating model..."
 msgstr "Validation du modèle ..."
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/gmodeler/frame.py:614
 #, python-format
 msgid ""
 "Model is not valid.\n"
@@ -2706,33 +3081,33 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
+#: ../gui/wxpython/gmodeler/frame.py:618
 msgid "Model is valid."
 msgstr "Le modèle est valide."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
 #, python-format
 msgid "Model exported to <%s>"
 msgstr "Modèle exporté vers <%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
 msgid "Comment:"
 msgstr "Commentaire :"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
 msgid "Add comment"
 msgstr "Ajouter un commentaire"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr "Commentaire vide. Rien à ajouter au modèle."
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "Modeleur graphique wxGUI"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2745,187 +3120,188 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "Merci de patienter, modèle en cours de chargement ..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "Échec de l'écriture des paramètres courant dans le fichier de modèle."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Impossible d'ouvrir le fichier <%s> en écriture."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Supprimer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Désactiver"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Activer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr "Définir l'étiquette"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr "Définir le commentaire"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Ajouter un point de contrôle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Supprimer un point de contrôle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "Intermédiaire"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Propriétés"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "Étiquette :"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Liste de variables - clic-droit pour supprimer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Nom"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Type de données"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Valeur par défaut"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Description"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Ajouter une nouvelle variable"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "entier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "flottant"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "chaîne de caractères"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "région"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "jeu de cartes"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "fichier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Ajouter une nouvelle variable au modèle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Liste d'objets - clic-droit pour supprimer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Étiquette"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr "Dans la boucle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Paramètres"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Commande"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 msgid "No items to selected."
 msgstr "Pas d'objets sélectionnés."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Script Python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "Exécute&r"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Exécuter le script python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Enregistrer le script python dans un fichier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2933,29 +3309,35 @@ msgstr ""
 "Actualiser le script Python basé sur le modèle.\n"
 "Ceci écrasera toutes les modifications manuelles."
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Impossible d'exécuter le script Python. %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Choisir le fichier à enregistrer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Script Python (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Le fichier <%s> existe déjà. Voulez-vous écraser ce fichier ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Enegistrer le fichier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
@@ -2963,167 +3345,158 @@ msgstr ""
 "Le script Python a été modifié manuellement. La mise à jour écrasera toutes "
 "les modifications. Voulez-vous vraiment continuer ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Mettre à jour"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Paramètres du modeleur"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Propriétés de l'objet"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Désactivé :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Valide :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Non valide :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Exécution :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Taille de la forme"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Largeur :"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Hauteur :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Données"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Type"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Raster :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "Carte raster 3D :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Carte vectorielle :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Table"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Boucle"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr "Commentaire"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Propriétés du modèle"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Métadonnée"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Commandes"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Permettre au fichier de sortie d'écraser les fichiers existants"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Appliquer les propriétés"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Nom :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Description :"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Auteur(s) :"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "modèle"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Script généré par le Modeleur Graphique wxGUI."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "variable '%s' non définie"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Modèle en cours d'exécution ..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Le modèle est vide. Rien à exécuter."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3134,87 +3507,87 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Exécuter le modèle ?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr "Les variables suivantes ne sont pas définies :"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Cartes raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "Cartes raster 3D"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Carte vectorielle"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "inconnu"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<non défini>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Condition :"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Condition : non définie"
 
 # Explicite dans sa forme anglaise, la dénomination d'un boucle si-sinon me paraît peu pertinente...
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Paramètres du modèle"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr "Supprimer les données intermédiaires"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Propriétés des données"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Nom de l'élément :"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "Type d'élément :"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "Ajouter une commande GRASS au modèle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr "Étiquette et commentaire"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3224,7 +3597,7 @@ msgstr ""
 "\n"
 "Impossible d'ajouter la nouvelle action au modèle."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3235,32 +3608,32 @@ msgstr ""
 "\n"
 "Impossible d'ajouter la nouvelle action au modèle."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Propriétés de la relation"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "De"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "En"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Données : %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Commande :"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Option :"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3268,7 +3641,7 @@ msgstr ""
 "La relation ne commence pas par un objet de données.\n"
 "Impossible d'ajouter la relation."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3276,7 +3649,7 @@ msgstr ""
 "La relation ne pointe pas vers une commande GRASS.\n"
 "Impossible d'ajouter la relation."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3284,68 +3657,68 @@ msgstr ""
 "Pas d'option pertinente trouvée.\n"
 "Impossible d'ajouter la relation."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Contition"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Paramètres de la boucle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Liste des objets dans la boucle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Séries"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "Définir une série de cartes comme condition pour la boucle"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "Définir une série de cartes"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "Propriétés if-else"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Liste des objets dans le bloc 'if'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Liste des objets dans le bloc 'else'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Échec : la variable <%s> existe déjà dans le modèle."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Voulez-vous supprimer toutes les variables du modèle ?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Supprimer les variables"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Non"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Oui"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3354,12 +3727,12 @@ msgstr ""
 "Impossible d'ouvrir le fichier\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "Le fichier d'instruction sera chargé avec la région suivante : %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
@@ -3368,23 +3741,23 @@ msgstr ""
 "La région ne peut pas être fixée\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "Impossible de lire les instructions %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3393,7 +3766,7 @@ msgstr ""
 "L'échelle a changé, ancienne valeur : %(old)s\n"
 "nouvelle valeur : %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
@@ -3402,7 +3775,7 @@ msgstr ""
 "Échec à la lecture de l'instruction %s.\n"
 "Utiliser la notation 1:25000."
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3411,7 +3784,7 @@ msgstr ""
 "La position du cadre de carte a changé, ancienne valeur : %(old1)s %(old2)s\n"
 "nouvelle valeur : %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3420,7 +3793,7 @@ msgstr ""
 "La taille du cadre de carte a changé, ancienne valeur : %(old1)s %(old2)s\n"
 "nouvelle valeur : %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3429,13 +3802,13 @@ msgstr ""
 "Impossible de lire les instructions %(file)s.\n"
 "Format %(for)s inconnu"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "Impossible de lire les instructions %s."
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
@@ -3444,8 +3817,8 @@ msgstr ""
 "Les caractères en position %s ne sont pas pris en charge par l'encodage "
 "ISO-8859-1 (Latin 1) requis pour le module ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
@@ -3453,17 +3826,17 @@ msgstr ""
 "Tous les caractères ne sont pas supportés par l'encodage ISO-8859-1 (Latin "
 "1) requis pour le module ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 "Échec à la lecture de l'instruction %(inst)s : fichier %(file)s non trouvé."
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr "SIG GRASS Composeur de carte"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
@@ -3471,39 +3844,39 @@ msgstr ""
 "La bibliothèque d'imagerie Python n'est pas disponible.\n"
 " La fonction d'aperçu ne fonctionnera pas."
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 "Le programme ps2pdf n'est pas disponible. Merci de l'installer pour "
 "permettre la création de fichiers PDF."
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Génération du PDF en cours ..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "Génération du fichier PostScript..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Génération de l'aperçu en cours ..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "La commande ps.map a retourné le code de sortie %s"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "%(prg)s s'est terminé avec le code de sortie %(code)s"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF généré"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3515,19 +3888,19 @@ msgstr ""
 "\n"
 " %s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "Fichier PostScript généré"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr "Génération de l'aperçu en cours ..."
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Aperçu non disponible"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
@@ -3535,134 +3908,134 @@ msgstr ""
 "L'aperçu n'est pas disponible, probablement parce que Ghostscript n'ets pas "
 "installé ou pas dans le PATH."
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr "Merci de suivre les instructions sur le Wiki du Trac GRASS."
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Aperçu généré"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Enregistrer le fichier sous"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr "Impossible de lire le fichier %s."
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "Merci de créer d'abord le cadre de carte."
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "La barre d'échelle n'est pas adaptée à cette projection"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr "Cliquer sur le bouton avec un triangle vert pour générer l'aperçu."
 
 # Le terme composeur en français désigne normalement le composeur-titreur (qui effectue les titrages/sous-titrages cinématographiques)
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "Composeur de cartes wxGUI"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr "CADRE DE CARTE"
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr "LÉGENDE RASTER"
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr "LÉGENDE VECTEUR"
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr "INFO DE CARTE"
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr "BARRE ÉCHELLE"
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr "IMAGE"
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr "FLÈCHE NORD"
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "Cliquez-déposez pour redimensionner l'objet"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "étiquettes :"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "Pouce"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "point"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "centimètre"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "milliimètre"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "mètres"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "kilomètre"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "pied"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "mile"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "miles nautiques"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "pixel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "mètre"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "degré"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "Impossible d'exécuter `ps.map -b`"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Unités :"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3670,29 +4043,29 @@ msgstr ""
 "Position du coin supérieur gauche\n"
 "depuis le bord supérieur gauche de la page"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X :"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y :"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "La position est données :"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr "par rapport au papier"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "par coordonnées cartographiques"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3700,185 +4073,183 @@ msgstr ""
 "Position par rapport à la bordure\n"
 "supérieure gauche du papier"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Taille du texte :"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Choisir la couleur :"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Appliquer les changements et fermer la boite de dialogue"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Unités"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Format"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientation"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Largeur"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Hauteur"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Gauche"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Droit"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Sommet"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Base"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr "Textuel non permis !"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Entrée non valide"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Taille de la page"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Marges"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Portrait"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Paysage"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "Personnalisé"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Paramètres de carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Paramètres du cadre de carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Fenêtre de cartes"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Options de cadre de carte :"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "Ajuster le cadre sur la carte sélectionnée"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "Ajuster le cadre sur la région enregistrée"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "Ajuster le cadre sur la région de calcul"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "échelle fixe et center de la carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Sélection de la carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Carte :"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Région :"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Échelle de la carte et centre"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Centre :"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E :"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N :"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Échelle"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
 # À l'usage je penseque l'utilisateur est plus familier de la notation "dpi" plutôt que de sa forme française "ppp".
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Résolution max de carte (dpi)"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Bordure"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "dessiner une limite autour de la trame de carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "couleur de bordure :"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "largeur de limite (pts) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3886,419 +4257,421 @@ msgstr ""
 "La région est définie pour correspondre à cette carte,\n"
 "la carte raster ou vecteur doit être ajouter plus tard"
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "Sélection de la région"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "Pas de carte sélectionnée !"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "Pas de région sélectionnée !"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "Échelle ou centre de carte non valide !"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "Choisir une carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "pas de carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "carte raster :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Ajouter une carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "points"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "lignes"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "surfaces"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "Type de données"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Ajouter"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "Gérer les cartes vecteur"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr "La carte la plus haute recouvre les autres"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "Haut"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "Bas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Supprimer"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr " Propriétés ..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "Paramètres de carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "Paramètres de carte vecteur"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "Propriétés de %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "Sélection des données"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Type d'entité"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "centroïdes"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "contours"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "Sélectionner la couche"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 "La connexion à la base de données n'est pas définie dans le fichier DB."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "Sélectionner la couche :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "liste de catégories (par ex. 1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Masque"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "Utiliser le masque courant"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "Couleurs"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "Contour"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "dessiner le contour"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "Largeur (pts) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "Remplir"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "remplir par la couleur"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "choisir la couleur :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "couleur depuis la colonne :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "Pas d'effet de remplissage de couleur depuis la colonne"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "Couleur des lignes :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "Taille et style"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "symbole :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "fichier eps :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Parcourir"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 "Taper un nom de fichier ou cliquer sur Parcourir pour choisir un fichier"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Choisir un fichier"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Taille"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "taille :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "taille depuis la colonne :"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "échelle :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "Rotation"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "rotation des symboles :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "sens anti-horaire en degrés :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "depuis un champ attributaire de la carte :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "Définir la largeur (pts) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "modifier la largeur depuis une valeur de catégorie"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Style de ligne"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "Choisir le style de ligne :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "Choisir les chapeaux de ligne :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "Modèle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "utiliser le motif :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "Choisir un fichier de motif :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "épaisseur de ligne du motif (pts) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "facteur d'échelle du motif :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Légende de la carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Afficher la légende de la carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Carte raster source"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "carte raster actuelle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "sélectionner la carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s : type %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Type de légende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "légende discrète (carte avec catégories)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "légende en gradient de couleurs continues (carte en nombre flottants)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Paramètres avancés de légende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "afficher la boite \"pas de données\""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "afficher l'échelle de la table de couleur"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "plage"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Légende du vecteur"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Afficher la légende des vecteurs"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Carte vectorielle source"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Choisir les cartes vecteur et leur ordre dans la légende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Carte vectorielle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Modifier les étiquettes"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "dessiner une bordure autour de la légende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Taille et position"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Position"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 "Laisser vide le champ d'édition afin d'utiliser les valeurs par défaut."
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4306,202 +4679,190 @@ msgstr ""
 "Largeur du symbole de couleur (pour les lignes)\n"
 "en face du texte de la légende"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Colonnes :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "largeur de colonne :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr "Espacement de colonne entre le limite"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Paramètres de police"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "Éditer l'étiquette de légende :"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "Pas de carte raster sélectionnée !"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "pas de carte raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Paramètres des informations de carte"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Paramètres de couleur"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "utiliser la couleur de bordure :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "utiliser la couleur d'arrière-plan :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"Les unités de la projection courante ne sont pas prises en charge,\n"
-"le mètre sera utilisé !"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Unités non prises en charge"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Longueur :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "La longueur de barre d'échelle est donnée en unités de cartes"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "La hauteur de barre d'échelle est la hauteur réelle sur le papier"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "défaut"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Style"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Type :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Nombre de segments :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Étiqueter tout"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "segments"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "arrière-plan de texte transparent"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "La longueur de barre d'échelle n'est pas définie"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Texte"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Entrez le texte :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Effets de texte"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "arrière-plan de texte"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "surligner"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "bordure du texte"
 
 # Je pense que l'anglicisme "offset" est une forme concise et explicite qui convient.
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Offset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "horizontal (pts) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "vertical (pts) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr " Point de référence"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Rotation du texte"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "pivoter le texte (sens anti-horaire)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "Pas de texte saisi !"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Image"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Choisir un répertoire :"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Choisir un répertoire avec des images"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr "Note : seul le format EPS est supporté"
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Échelle et rotation"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Angle de rotation (deg) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Rotation anti-horaire en degrés"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
@@ -4509,42 +4870,42 @@ msgstr ""
 "PIL\n"
 "manquant"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "Impossible de lire le fichier %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "taille : %(width)s x %(height)s pts"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "Pas d'image sélectionnée."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Flèche du Nord"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Paramètres de la flèche nord"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr "Calculer la convergence"
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr "symbole"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr "Sélectionner le symbole :"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
@@ -4552,154 +4913,155 @@ msgstr ""
 "Note : le symbol sélectionné n'est pas affiché\n"
 "en mode brouillon (seulement en mode aperçu"
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr "Couleur de mise en valeur:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "transparent"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Remplir par la couleur"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Taille et rotation"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Taille (pt) :"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Taille de symbole en points"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Paramètres du rectangle"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Paramètres de ligne"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Épaisseur de ligne en points :"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 msgid "Vector labels"
 msgstr "Étiquettes vecteur"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr "Fichier d'étiquettes créé auparavant par le module v.label"
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr "Vous pouvez sélectionner plusieurs fichiers d'étiquettes."
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "Générer un fichier texte comportant des instructions de cartographie"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "Charger un fichier texte comportant des instructions de cartographie"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Générer une sortie PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Générer une sortie PDF"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Spécifier format du papier, marges et orientation"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Emprise complète"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Zoomer sur l'emprise complète"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Cliquer déposer pour positionner le cadre de carte"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Supprimer l'objet sélectionné"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Afficher l'aperçu"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "Quitter le Composeur de cartes"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "Informations sur la carte"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Légende"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Barre d'échelle"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Rectangle"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Ajouter une couche"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Ajouter des étiquettes"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 #, fuzzy
 msgid "Add simple graphics: points"
 msgstr "Ajouter un graphique simple : points"
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 #, fuzzy
 msgid "Add simple graphics: lines"
 msgstr "Ajouter un graphique simple : lignes"
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 #, fuzzy
 msgid "Add simple graphics: rectangles"
 msgstr "Ajouter un graphique simple : rectangles"
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Gestionnaire des tables d'attributs"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr "LECTURE SEULE - "
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4709,142 +5071,134 @@ msgstr ""
 "la carte vecteur <%s>. Vous pouvez définir une nouvelle connexion dans "
 "l'onglet 'Gérer les couches'."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Patientez, chargement des données attributaires .."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Parcourir les données"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Gérer les tables"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Gérer les couches"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Fermer le gestionnaire de table attributaire"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 msgid "Reload currently selected attribute data"
 msgstr "Recharger les données attributaires actuellement sélectionnées"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 "Recharger toutes les données attributaires (annule la sélection actuelle) "
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Nombre d’enregistrements chargés : %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-"Échec de requête de la carte vecteur <{map}>. Vérifiez les paramètres de la "
-"base de données et la topologie."
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Connexion base de données"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Requête"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Régler l'expre"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr ""
 "Appliquer l'expression SQL dans le gestionnaire des tables attributaires"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Fermer la boîte de dialogue"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Colonnes"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr "Insertion interactive"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Valeurs"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Toutes les valeurs"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Échantillon"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr "Obtenir les 256 premières valeurs unique comme échantillon"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr "Aller à :"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Fermer la boîte de dialogue après validation"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Constructeur SQL (%(type)s) - <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr "Colonne à afficher (clause SELECT)"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr "Contrainte pour la requête (clause WHERE)"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Exemple : %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Vérifier"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Vérifier l'expression SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "Expression SQL non vérifiée"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "L'expression SQL n'est pas valide"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4855,39 +5209,39 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "L'expression SQL est valide"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr "Colonne à définir (clause SET)"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr "Calculer la valeur de colonne à définir"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr "Fonctions"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr "L'expression SQL n'a pas été appliquée"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr "L'expression SQL a été appliquée"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr "Le driver Dbf ne supporte pas l'usage de fonctions SQL."
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Chargement des données ..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
@@ -4896,36 +5250,36 @@ msgstr ""
 "Table d'attributs <%s> non trouvée. Pour créer la table passer à l'onglet "
 "'Gérer les couches'."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Colonne <%(column)s> non trouvée dans la table <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Ne peut afficher que 256 colonnes."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Nombre de colonnes invalide dans la table <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr "Limite d'affichage : 100000 enregistrements."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Valeur inconnue"
 
 # Conserver le sigle GUI me semble plus clair pour l'utilisateur que sa traduction française (IGU) peu voire pas usitée.
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 "Valeur impossible à décoder. Fixer l'encodage dans les préférences du GUI "
 "('Attributs')"
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4939,171 +5293,171 @@ msgstr ""
 "\n"
 "Détails: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Tri ascendant"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Tri descendant"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Calculer (seulement les colonnes numériques)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr "Calculatrice de champs"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Statistiques"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Ajouter une colonne"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Aire de la surface"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Longueur de ligne"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr "Compacité d'une surface"
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr "Dimension fractale d'un contour définissant un polygone"
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Périmètre d'une surface"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Nombre d'entités pour chaque catégorie"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr "Raideur de pente d'une ligne 3D"
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr "Sinuosité d'une ligne"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Azimuth de la ligne"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr "Ajouter la colonne à la table <%s>"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Impossible d'ajouter la colonne à la table. Nom de colonne non défini."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "La colonne <%(column)s> existe déjà dans la table <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 "Données attributaires - clic droit pour éditer/gérer les enregistrements"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Table"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr " (lecture seule)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Requête SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Simple"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Appliquer l'expression SELECT et recharger les enregistrements"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr "Constructeur"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Constructeur SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Éditer les enregistrements sélectionnés"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Insérer un nouvel enregistrement"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Supprimer l'(les) enregistrement(s) sélectionné(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Supprimer tous les enregistrements"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Tout sélectionner"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Tout dé-sélectionner"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Surligner les entités sélectionnées"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Surligner et zoomer sur les entités sélectionnées"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Extraire les entités sélectionnées"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Supprimer les entités sélectionnées"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Mettre à jour un enregistrement existant"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "La valeur '%(value)s' demande à être entrée comme %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
@@ -5112,18 +5466,18 @@ msgstr ""
 "Impossible de mettre à jour l'enregistrement existant.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 "L'enregistrement portant la catégorie numéro %d existe déjà dans la table."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Le numéro de catégorie (colonne %s) est manquant."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -5132,7 +5486,7 @@ msgstr ""
 "Impossible d'insérer le nouvel enregistrement.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5141,11 +5495,11 @@ msgstr ""
 "Les enregistrements sélectionnés (%d) vont être définitivement supprimés de "
 "la table. Souhaitez-vous les supprimer ?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Supprimer les enregistrements"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5154,15 +5508,15 @@ msgstr ""
 "Tous les enregistrements (%d) seront définitivement supprimés de la table. "
 "Souhaitez-vous les supprimer ?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Rien à extraire"
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Rien à supprimer."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5173,7 +5527,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5186,30 +5540,30 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Table<%s> - clic droit pour supprimer la(les) colonne(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Colonne"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Longueur"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Renommer une colonne"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Impossible de renommer la colonne. Pas de nom de colonne défini."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5218,7 +5572,7 @@ msgstr ""
 "Impossible de renommer la colonne <%(column)s> en <%(columnTo)s>. La colonne "
 "existe déjà dans la table <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5227,15 +5581,15 @@ msgstr ""
 "Impossible de renommer la colonne. La colonnes<%(column)s> n'existe pas dans "
 "la table <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Supprimer les colonnes sélectionnées"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Supprimer toutes les colonnes"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5244,11 +5598,11 @@ msgstr ""
 "La colonne sélectionnée %s sera DÉFINITIVEMENT supprimée de la table. "
 "Souhaitez-vous supprimer cette colonne ?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Supprimer la(les) colonne(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5260,101 +5614,101 @@ msgstr ""
 "seront DÉFINITIVEMENT supprimées de la table. Souhaitez-vous supprimer ces "
 "colonnes ?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Liste de couches"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Supprimer également la table attributaire liée (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Nom de colonne"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Taille de la donnée"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Pilote"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Base de données"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Clé"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Ajouter une couche"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Description de couche"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Colonne clé"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Insérer un enregistrement pour chaque catégorie dans la table"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Il vous faut ajouter des catégories via le module v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Description de table"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Nom de la table"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Créer une table"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Ajouter une couche"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "Fixer par défaut"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Enlever une couche"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Couche à supprimer"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "Enlever la couche"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modifier une couche"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modifier la couche"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5362,20 +5716,20 @@ msgstr ""
 "Impossible d'obtenir la liste des tables.\n"
 "Merci d'utiliser db.connect pour fixer les paramètres de base de donnée."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Impossible de créer la nouvelle table. Il manque le nom de la table ou de la "
 "colonne clé."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 "Impossible de créer la nouvelle table. La table <%s> existe déjà dans la "
 "base."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5384,23 +5738,23 @@ msgstr ""
 "Impossible d'ajouter la nouvelle couche à la carte vecteur <%(vector)s>. La "
 "couche %(layer)d existe déjà."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 msgid "Field statistics"
 msgstr "Statistiques de champs"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Copier les statistiques dans le presse-papier (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr "Les statistiques ne sont pas suportées pour les tables DBF."
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 msgid "Unable to calculte statistics."
 msgstr "Impossible de calculer les statistiques"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
@@ -5408,25 +5762,25 @@ msgstr ""
 "Impossible de calculer les statistiques. Nombre de lignes %d invalides "
 "(devrait être %d)."
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 msgid "Unable to calculte standard deviation."
 msgstr "Impossible de calculer l'écart-type."
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr "Statistiques de champs <%s>"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "chargement des données attributaires <%s> ..."
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Gestionnaire des tables d'attributs GRASS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5439,98 +5793,99 @@ msgstr ""
 "Voulez-vous créer une nouvelle table attributaire et la lier au vecteur <"
 "%s> ?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Créer la table ?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Fermer la boîte de dialogue après validation"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Aucun attribut trouvé"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Mettre à jour les attributs"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Définir les attributs"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Afficher les attributs"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Recharger"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Soumettre"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 "Colonne<%(col)s> : La valeur '%(value)s' doit être entrée comme %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Inconnu"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 "Jeu d'icônes '%s' inconnu, utilisation du jeu par defaut 'grass\" ...\n"
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 "Impossible de charger les icône du thème. Raison : %s. Arrêt de wxGUI ..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "Vue 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Vue 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Pas de nom défini pour l'animation."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 msgid "No workspace file selected."
 msgstr "Pas de fichier d'espace de travail sélectionné."
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr "Fichier %s non trouvé"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr "Animation %d"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr "Le nombre maximal d'animations est %s."
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
@@ -5538,71 +5893,71 @@ msgstr ""
 "Plusieurs animations utilisent la même fenêtre. Merci de sélectionner une "
 "fenêtre différente pour chaque animation."
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr "L'affichage de la légende à échoué."
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr "Nombre de cartes inconsistent, vérifiez les données d'entrée."
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr "Pas d'animation à exporter."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr "Préparation de l'export, merci de patienter ..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr "%(from)s %(dash)s %(to)s"
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr "%(start)s %(unit)s"
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr "Export de l'animation, merci de patienter ..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr "SIG GRASS Outil d'animations"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr "Barre d'outils d'animation"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr "Chargement des données"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr " ({c} en dehors de {p})"
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr "vers %(to)s"
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Jeu de données temporel <%s> non trouvé."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr "Le nombre de cartes des jeux de données temporels doiit être le même."
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
@@ -5610,26 +5965,26 @@ msgstr ""
 "Le type temporel (absolut/relatif) des jeux de données temporels doit être "
 "le même."
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 "Le type de carte (ponctuel/intervalle) des jeux de donénes temporels doit "
 "être le même."
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 "L'étendue temporelle des cartes des jeux de données temporels doit être la "
 "même."
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 "Le nombre de cartes à animer doit être le même pour chaque série de cartes."
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
@@ -5637,7 +5992,7 @@ msgstr ""
 "Le nombre de cartes à animer doit être le même que le nombre de cartes dans "
 "le jeu de données temporel."
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5646,36 +6001,36 @@ msgstr ""
 "Lecture du fichier d'environnement <%s> impossible.\n"
 "Fichier non valide, impossible d'analyser le document XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Pas d'information de vue 3D dans le fichier d'espace de travail <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 msgid "Please add only one layer in the list."
 msgstr "Merci de n'ajouter qu'une seule couche dans la liste."
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Pas de séries de carte ou de jeux de données temporels ajoutés."
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Rendu des couches"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Superposition des couches"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Répertoire {t} non supprimé."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
@@ -5683,13 +6038,13 @@ msgstr ""
 "Il n'est pas permis d'afficher des données avec des types temporels "
 "différents (absolu et reatif)."
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 "Il n'est pas permis d'afficher des donénes avec des unités différentes (%s)."
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
@@ -5699,118 +6054,118 @@ msgstr ""
 "temporelles différents (intervalle et ponctuel). Il est recommandé "
 "d'utiliser un seul tye temporel pour éviter la confusion."
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr "La topologie du jeux de données temporel %s est invalide."
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr "%s=, %s=, %s= et %s= sont mutuellement exclusifs."
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr "Ajuster la vitesse de l'animation"
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr "Mode simple"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Durée d'une frame :"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr "ms"
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Mode temporel"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr "Unité de temps :"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 msgid "Duration of time unit:"
 msgstr "Durée d'une unité de temps :"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr "année"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr "mois"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr "jour"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr "heure"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr "minute"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr "seconde"
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr "La vitesse d'animation est trop rapide."
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 msgid "Add new animation"
 msgstr "Ajouter une nouvelle animation"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 msgid "Edit animation"
 msgstr "Modifier l'animation"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Élaborée"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr "en haut à gauche"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr "en haut à droite"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr "en bas à gauche"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr "en bas à droite"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr "Sélectionner la vue 2d ou 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 msgid "Window position:"
 msgstr "Position de la fenêtre :"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr "Mode de vue :"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
@@ -5819,204 +6174,204 @@ msgstr ""
 "temporel\n"
 "ou une série de cartes."
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Modifier les options"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 msgid "3D view parameters"
 msgstr " Paramètres de vue 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr "Fichier d'espace de travail :"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 "Choisir le fichier d'espace de travail pour l'import des paramètres de vue 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr "Paramètre d'animation :"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr "Animer le changement de région (vue 2D uniquement)"
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 msgid "Start region:"
 msgstr "Région de départ :"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 msgid "End region:"
 msgstr "Région d'arrivée :"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 msgid "Zoom value:"
 msgstr "Valeur de zoom :"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 "Distances N-S/E-O en unité de carte pour réduire graduellement la région."
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr "N-S :"
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr "E-O :"
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 "Seulement une série ou jeu de données temporel est accepté dans le mode 3D."
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Pas de séries de carte ou de jeux de données temporels ajoutés."
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr "Les informations sur la région sont incomplètes"
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr "Ajouter, modifier ou supprimer des animations"
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 msgid "List of animations"
 msgstr "Liste des animations"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr "Modifier"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr "Le nombre maximum d'animations est %d."
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr "Exporter l'animation"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Décorations"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Exporter"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Date et heure"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Ajouter une image"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Ajouter du texte"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr "Paramètres de police :"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr "Échantillon de texte"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr "Fichier image :"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 msgid "Choose image file"
 msgstr "Choisir un fichier image"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 "Positionnement en pourcentage des coordonnées de l'écran (X : 0, Y : 0 est "
 "en haut à gauche) :"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr "Séquence d'images"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "GIF animé"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr "SWF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr "Exporter vers :"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Préfix :"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr "animation_"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Format de fichier :"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Répertoire :"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr "Choisir un dossier pour l'export"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr "Fichier GIF :"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 msgid "Choose file to save animation"
 msgstr "Choisir le fichier où enregistrer l'animation"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr "Fichier SWF :"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
@@ -6026,19 +6381,19 @@ msgstr ""
 "vérifier\n"
 "qu'il ets dans le PATH."
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr "Fichier AVI :"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr "Codec vidéo :"
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr "Options supplémentaires :"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
@@ -6046,114 +6401,114 @@ msgstr ""
 "Ajouter '-sameq' ou '-qscale 1' si vous n'êtes pas satisfaits de la qualité "
 "de la vidéo. Les options dépendent de la version de ffmpeg."
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr "Taux de rafraichissement actuel : %.2f fps"
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr "Fichier %s non trouvé."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr "Dossier %s non trouvé."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 msgid "Export directory is missing."
 msgstr "Le dossier d'export ets manquant."
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr "Le fichier d'export est manquant."
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Date et heure"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 msgid "Add space-time dataset layer"
 msgstr "Ajouter une couche de données temporelles"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 msgid "Multiple raster maps"
 msgstr "Plusieurs cartes raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 msgid "Multiple vector maps"
 msgstr "Plusieurs cartes vecteur"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 msgid "Multiple 3D raster maps"
 msgstr "Plusieurs cartes raster 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 msgid "Space time raster dataset"
 msgstr "Jeu de données raster temporel"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 msgid "Space time vector dataset"
 msgstr "Jeu de données vecteur temporel"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 msgid "Space time 3D raster dataset"
 msgstr "Ajouter un je de données raster 3D temporel"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 msgid "Input data type:"
 msgstr "Type de données d'entrée :"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 msgid "Select raster/vector maps."
 msgstr "Sélectionner des cartes raster/vecteur."
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr "Merci de commencer par sélectionner des cartes ou un jeu de données."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 msgid "Animation Tool settings"
 msgstr "Paramètres de l'outil d'animation"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Couleur d'arrière-plan :"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr "Nombre de processus parallèles :"
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 msgid "Text foreground color:"
 msgstr "Couleur du texte de premier plan :"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 msgid "Text background color:"
 msgstr "Couleur du texte d'arrière-plan :"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Date et heure"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Format de date absolue :"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 #, fuzzy
 msgid ""
 "Click and then press key up or down to preview different date and time "
@@ -6162,16 +6517,16 @@ msgstr ""
 "Cliquez et appuyer sur les touches haut et bas pour voir différents formats "
 "de date et heure."
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr "Plus d'infos sur les options de formattage."
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 #, fuzzy
 msgid "Display instances with no data"
 msgstr "Afficher les instances sans données"
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 #, fuzzy
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
@@ -6181,66 +6536,66 @@ msgstr ""
 "vous pouvez afficher 'pas d'image' (option cochée) ou garder la dernière "
 "image."
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr "Invalide"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 msgid "Change animation speed"
 msgstr "Modifier la vitesse de l'animation"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr "Avancer"
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 #, fuzzy
 msgid "Play back"
 msgstr "Lecture"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Stop"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pause"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr "Répéter"
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr "Lire en avant et en arrière"
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr "Ajouter, modifier et supprimer l'animation"
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr "Ajouter un jeu de données temporel ou une série de cartes"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 "Ajouter un jeu de données temporel ou une série de cartes pour l'animation"
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Valeur insérée non valide. Opération annulée."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr "Modifier le point"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 msgid "Unable to perform analysis."
 msgstr "Impossible d'effectuer l'analyse."
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6251,45 +6606,45 @@ msgstr ""
 "l'outil d'analyse de réseau vectoriel.\n"
 "Les résultats affichés peuvent ne pas correspondre aux résultats d'origine."
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr "Résultat modifié manuellement"
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 msgid "Map can be created only in current mapset"
 msgstr "Une carte ne peut être crée que dans le jeu de cartes courant"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Le carte vectorielle <%s> existe déjà. Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 msgid "Overwrite vector map"
 msgstr "Écraser la carte vecteur"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr "La carte vecteur avec le résultat d'analyse n'existe pas."
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr "La carte ne peut être enregistrée que dans le jeux de cartes courant"
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr "Merci de choisir les points '%s' et '%s'."
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr "Merci de choisir au moins deux points."
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6300,11 +6655,11 @@ msgstr ""
 "d'analyse de réseau vectoriel.\n"
 "La colonne de topologie peut ne pas correspondre à la situation modifiée."
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr "Entrée modifiée manuellement"
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
@@ -6313,20 +6668,20 @@ msgstr ""
 "La carte temporaire %s existe déja.\n"
 "Voulez-vous continuer l'analyse et l'écraser ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 msgid "Unable to use ctypes. \n"
 msgstr "Impossible d'utiliser ctypes. \n"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr "Le magnétisme ne peut pas être activé."
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr "Voulez-vous vraiment activer le magnétisme et l'écraser ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
@@ -6336,51 +6691,51 @@ msgstr ""
 "vectorielle.\n"
 "Voulez-vous vraiment activer le magnétisme et l'écraser ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr "Écraser la carte ?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "La carte vectorielle '%s' n'existe pas."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 msgid "Vector map was not chosen."
 msgstr "Carte vectorielle non sélectionnée."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 msgid "arc layer"
 msgstr "couche d'arc"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 msgid "node layer"
 msgstr "couche de noeud"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 msgid "turntable layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr "couche de catégories uniques"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr "La %s '%s' choisie n'existe pas dans la carte vecteur '%s'.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr "Choisir %s. \n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6389,342 +6744,343 @@ msgstr ""
 "La colonne choisie '%s' n'existe pas dans la table d'attributs de la couche "
 "'%s' de la carte vectorielle '%s'.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "type"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "topologie"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Point de départ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Point d'arrivée"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "nouveau point"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr "arc"
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 msgid "Node cost column:"
 msgstr "Colonne de coût des noeuds : "
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "noeud"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr "Plus court chemin %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Point d'arrivée"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr "Analyse de type \"représentant commercial\" %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr "Écoulement maximal %s"
 
 # "source" au sens de la source d'une rivière
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr "Point de source"
 
 # "Perte" = "disparition" d'une rivière dans le sous-sol
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr "Point de perte"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr "Sous-réseau pour le centre le plus proche %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Créer l'arbre de Steiner pour le réseau et les points terminaux %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr "Plus courte distance via le réseau %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr "Isoligne de coût %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 msgid "Overwrite map layer"
 msgstr "Écraser la carte"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Outil d'analyse de réseau vectoriel"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 msgid "Point list toolbar"
 msgstr "Barre d'outil des points"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr "Barre d'outil d'analyse"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr "Points à analyser :"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr "Paramètres d'analyses :"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Points"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr "Distance maximale d'un point du réseau :"
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 msgid "Iso lines:"
 msgstr "Isolignes :"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Sortie"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Paramètres"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 msgid "Add vector map into layer tree"
 msgstr "Ajouter la carte dans l'arborescence des couches"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr "Tables en entrée"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr "Tables de résultats"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr "Tables en cours de chargement ..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 msgid "Creating turntable..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 msgid "Input vector map does not exist."
 msgstr "La couche vecteur entrée n'existe pas."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr "Analyse en cours ..."
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Paramètres"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr "Analyse des noeuds en cours ..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 msgid "Other settings"
 msgstr "Autres paramètres"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr "Style de point :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr "Style du résultat de l'analyse :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, python-format
 msgid "Color table style %s:"
 msgstr "Style de table de couleurs %s :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr "Inverser les couleurs %s :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr "Couleur de ligne :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr "Couleur pour les points non utilisés :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr "Couleur des points de Départ/De/Source/Utilisés :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 #, fuzzy
 msgid "Color for End/To/Sink point:"
 msgstr "Couleurs des points de Fin/Vers/Destination :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr "Couleur pour les points sélectionnés :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr "Taille du texte :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr "Épaisseur du point :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr "Seuil de magnétisme en pixels :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr "Nombre maximal de résulats dans l'historique :"
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 msgid "New vector map with turntable"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr "Enregistrer le résultat de l'analyse"
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr "Ajouter un point depuis la fenêtre de carte"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr "Activer l'accroche des noeuds"
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr "Ajouter un nouveau point"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 msgid "Delete selected point"
 msgstr "Supprime le point sélectionné"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr "Exécuter l'analyse"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr "Aller au résultat d'analyse précédent"
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr "Aller au résultat d'analyse suivant"
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr "Afficher le résultat de l'analyse"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr "Enregistrer le résultat temporaire"
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr "Paramètres d'analyses de réseau"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Afficher le manuel"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr "Analyses disponibles"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Générer (l'affichage)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Activer/désactiver le rendu automatique"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Afficher l'étendue"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Afficher les limites de calculs"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6735,16 +7091,16 @@ msgstr ""
 "région de calcul, région de calcul comme rectangle rouge à l'intérieur de la "
 "région de l'affichage."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Mode d'affichage"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr "Aligner l'étendue de la région sur la taille de l'affichage"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6753,16 +7109,16 @@ msgstr ""
 "central. La valeur par défaut pour les nouveaux affichages peut être définie "
 "dans la boîte de dialogue 'Paramètres de l'interface utilisateur'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Résolution de l'affichage"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Contraindre la résolution d'affichage aux paramètres de calculs"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6771,11 +7127,11 @@ msgstr ""
 "La valeur par défaut pour les nouveaux affichages de cartes peut être "
 "définie dans la boîte de dialogue 'Paramètres de l'interface utilisateur'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Échelle de la carte"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
@@ -6784,33 +7140,33 @@ msgstr ""
 "différemment, ces valeurs ne sont pas des échelles réelles mais restent "
 "proches de la réalité."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Aller à"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Projection non définie (vérifiez les paramètres)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Erreur dans la projection (vérifiez les paramètres)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Projection"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Utiliser une projection définie"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
@@ -6819,38 +7175,38 @@ msgstr ""
 "peut être définie dans les préférences de l'interface utilisateur (onglet "
 "'Affichage de la carte')"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASK"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Afficher la géométrie"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Coordonnées"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Etendue"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr "Région calculée"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "SIG GRASS - Moniteur d'affichage des cartes"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr "Impossible de déterminer la version de GRASS\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
@@ -6858,7 +7214,7 @@ msgstr ""
 "SIG GRASS %(version)s - Fenêtre de cartes : %(id)s - Secteur : %(loc)s@"
 "%(mapset)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6867,11 +7223,11 @@ msgstr ""
 "Impossible de démarrer l'outil wxGUI de numérisation de vecteur.\n"
 "Détails: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "Barre d'outils de numérisation de vecteur"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6886,41 +7242,42 @@ msgstr ""
 "\n"
 "Détails : %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Démarrage du mode vue 3D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Patientez, chargement des données ..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr "Patientez, dé-chargement des données ..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr "Retour à la vue 2D ..."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Numériser"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr "Aucune ccouche sélectionnée. Opération annulée."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr "d.to.rast ne peut être utilisé qu'en mode 2D."
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr "La lancement de d.to.rast a échoué :\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Carte vectorielle <%s> ouverte pour édition - sautée."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
@@ -6928,64 +7285,68 @@ msgstr ""
 "L'interrogation de la carte vecteur <{maps}> a échoué. Vérifier les "
 "paramètres de base de données et de topologie."
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Ajouter une couche de texte"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr "Définir la région calculée à partir de celle de l'écran"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 msgid "Set computational region extent interactively"
 msgstr "Définir l'emprise de la région de calcul de manière interactive"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 msgid "Set computational region from named region"
 msgstr "Définir la région calculée depuis un nom de région"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr "Enregistrer la région calculée vers un nom de région"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+msgid "Raster Digitizer Toolbar"
+msgstr "Barre d'outils de numérisation de raster"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 "Module GRASS '%s' introuvable. Impossible de démarrer la fenêtre d'affichage "
 "des cartes."
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr "Test du cadre de la fenêtre de cartes"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 msgid "Map display test"
 msgstr "Test de l'affichage des cartes"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr "Cadre test pour la fenêtre de carte de l'API"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr "Cadre test pour la fenêtre de carte de mesure de distance"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr "Cadre test pour la fenêtre de carte de l'outil de profile"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr "Cadre test pour la fenêtre de carte rlisetup"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr "Valeur %s inconnue pour le paramètre test."
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -6993,115 +7354,132 @@ msgstr ""
 "Problème lors de l'impression.\n"
 "Peut-être que votre imprimante n'est pas configurée correctement ?"
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr "Commande %s non prise en charge."
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 "Impossible de lire le fichier de commandes '%(cmd)s'. Détails : %(det)s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr "Lancement d'un nouvel affichage <%s>..."
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, python-format
+msgid "Unable to create file <%s>"
+msgstr "Impossible de créer le fichier <%s>"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Arrêt de l'affichage <%s>..."
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
+#, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Sélectionner des objets vectoriels"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr ""
+"Sélectionner des zones depuis\n"
+"la carte vecteur superposée"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
 msgid "Show/hide scale bar"
 msgstr "Afficher/cacher l'échelle"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Afficher/cacher la légende"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr "Afficher/cacher la direction du nord"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analyser une carte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Mesures, profilage, histogrammes, ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Mesurer une distance"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr "Mesurer une surface"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profiler la carte de surface"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Créer un nuage de points bivarié de la carte raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Créer un histogramme de carte raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr "Outil d'analyse de réseau vecteur"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Faire pivoter la scène 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Déplacer avec la souris pour faire pivoter la scène 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "Mode survol"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 "Déplacer avec la souris, appuyer sur Ctrl pour les différents modes, ou Maj "
 "pour accélérer"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Cliquez pour zoomer"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Cliquez pour dé-zoomer"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Vue 3D non disponible"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Raison : %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "La numérisation de vector n'est pas disponible"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -7112,67 +7490,71 @@ msgstr ""
 "les mises à jour de GRASS. En attendant, vous pouvez utiliser le module \"v."
 "digit\", accessible depuis le menu Vecteur."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+msgid "Raster digitizer"
+msgstr "Numérisation de raster"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr "Le fichier raster %s existe déjà, merci de modifier le nom"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr "Carte raster non créée. Merci de redessiner la région."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr "Carte raster non créée, redessiner la région."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr "Dessiner le cadre d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr "Dessiner le cadre d'échantillonage par cliquer-déplacer"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr "Dessiner un rectangle d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr "Dessiner un rectangle d'échantillonage par cliquer-déplacer"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr "Dessiner un cercle d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr "Dessiner le rayon du cercle d'échantillonage par cliquer-déplacer"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr "Dessiner la région d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 "Dessiner la région d'échantillonage avec un polygone. Double-clic droit pour "
 "terminer"
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 msgid "Modify the configuration file"
 msgstr "Modifier le fichier de configuration"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Voir et modifier le fichier de configuration '{name}'"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
@@ -7182,63 +7564,63 @@ msgstr ""
 "{name} ?\n"
 "Vous risquez de casser la configuration ..."
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr "ATTENTION"
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr "Initialisation des modules r.li"
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr "Fichiers de configuration de zones d'échantillonage disponibles"
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr "Supprimer un fichier de configuration"
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "Créer"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr "Créer un nouveau fichier de configuration"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Renommer"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr "Renommer le fichier de configuration"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr "Voir/Modifier"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 msgid "View and edit a configuration file"
 msgstr "Voir et modifier le fichier de configuration"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Voulez-vous supprimer le fichier de configuration de r.li <%s> ?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 msgid "Remove new r.li configuration file?"
 msgstr "Supprimer le nouveau fichier de configuration de r.li ?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr "Vous avez sélectionné un fichier de configuration"
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
@@ -7247,7 +7629,7 @@ msgstr ""
 "Définir le nouveau nom pour le fichier de configuration %s "
 "\"                                            \""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr "Renommer le fichier de configuration"
 
@@ -7255,116 +7637,116 @@ msgstr "Renommer le fichier de configuration"
 msgid "Create new configuration file for r.li modules"
 msgstr "Créer une nouveau fichier de configuration pour les modules r.li"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Voulez-vous créer le fichier de configuration de r.li <%s> ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 msgid "Create new r.li configuration file?"
 msgstr "Créer un nouveau fichier de configuration pour r.li ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 "Assistant de r.li interrompu. Le fichier de configuration n'a pas été créé."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr "Sélectionner des cartes et définir le nom"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 msgid "Name for new configuration file to create"
 msgstr "Nom du nouveau fichier de configuration à créer"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr "Carte raster à utiliser pour sélectionner les zones"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr "Carte vectorielle à utiliser pour sélectionner les zones"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 msgid "Vector map layer to use to select areas"
 msgstr "Couche vectorielle à utiliser pour sélectionner les zones"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr "Définir la région d'échantillonage (région à analyser)"
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 msgid "Whole map layer"
 msgstr "Carte entière"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 msgid "Keyboard setting"
 msgstr "Paramètres de clavier"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr "Dessiner le cadre d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr "Le fichier de configuration %s existe déjà, merci de modifier le nom."
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 "Le vecteur %s n'a pas été trouvé, merci de sélectionner un autre vecteur"
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 "L vecteur %s n'a pas de polygones, merci de sélectionner un autre vecteur"
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 "Le vecteur %s n'a pas de table connectée, merci de sélectionner un autre "
 "vecteur"
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 msgid "Insert sampling frame parameter"
 msgstr "Ajouter les paramètres du cadre d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr "Colonne du coin en haut à gauche"
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr "Ligne du coin en haut à gauche"
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr "Nombre de lignes du cadre d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 msgid "Insert sampling areas"
 msgstr "Ajouter des zones d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Régions"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr "Unités des échantillons"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Fenêtre mouvante"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
@@ -7372,184 +7754,184 @@ msgstr ""
 "Sélectionner des zones depuis\n"
 "la carte vecteur superposée"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 msgid "Choose a method"
 msgstr "Choisir une méthode"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr "Utiliser le clavier pour entrer la zone d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr "Utiliser la souris pour dessiner la zone d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr "Cette option n'est pas encore supportée"
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 msgid "Number of regions to draw:"
 msgstr "Nombre de régions à dessiner :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Voulez-vous écraser les cartes temporelles si elles existent ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 msgid "Do you want to check vector areas?"
 msgstr "Voulez-vous vérifier les zones ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 msgid "Select if use area by area"
 msgstr "Sélectionner si utilisation zone par zone"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr "Toutes les entités vont être utilisées"
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr "Analyse de toutes les entités ..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 msgid "Analysing vector"
 msgstr "Analyse du vecteur"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr "Toutes les entités ont été analysées."
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr "Une erreur s'est produite"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 msgid "Draw sampling regions"
 msgstr "Dessiner les régions d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 msgid "Draw sample region "
 msgstr "dessiner la région d'échantillon"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr "Dessiner la région de fenêtre mouvante"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr "Sélectionner les unités d'échantillonage depuis le clavier"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 msgid "Select type of shape"
 msgstr "Sélectionner le type de forme"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr "Cercle"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 msgid "Width size (in cells)?"
 msgstr "Largeur (en nombre de cellules) ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr "Rayon (en mètres) ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr "Hauteur (en cellules) ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 msgid "Name of the circle mask"
 msgstr "Nom du cercle de masque"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr "Sélectionner le mode de distribution des échantillons"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr "Aléatoire sans recouvrement"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr "systématiquement contigüs"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr "Aléatoire stratifié"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr "Systématiquement non contigüs"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr "Centrés sur sites"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr "Nombre d'échantillons à utiliser ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 msgid "Insert number of row strates"
 msgstr "Nombre de lignes"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr "nombre de colonnes"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr "Distance entre les échantillons"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 msgid "Set sample units"
 msgstr "Définir les unités des échantillons"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr "Définir la fenêtre mouvante"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 msgid "Draw sampling units"
 msgstr "Dessiner les unités d'échantillonnage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 msgid "Number of sampling area to draw:"
 msgstr "Nombre de zones d'échantillonage à dessiner :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr "Dessiner l'échantillon"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr "Sélectionner la zone d'échantillonage"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr "Est-ce que cette zone est ok ?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 msgid "Select sample area "
 msgstr "Sélectionner la zone d'échantillon"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7560,171 +7942,185 @@ msgstr ""
 "cartes avec le préfix '%s' ou de sélectionner l'option pour écraser les "
 "cartes existantes."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr "Le polygone semble avoir 0 surface"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 msgid "Select sample area 1 of "
 msgstr "Sélectionner la zone d'échantillon 1 de "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Résumé"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr "Nom du fichier de configuration :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr "Nom du raster :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr "Nom du vecteur"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr "Type de région :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr "Type de zone d'échantillonage :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr "Contours de région manuels :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr "Type de forme :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr "Taille du rayon :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 msgid "Name circle mask:"
 msgstr "Nom du cercle de masque :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 msgid "Width size:"
 msgstr "Largeur :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 msgid "Height size:"
 msgstr "Hauteur :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr "Métode de distribution :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr "Nombre d'échantillons :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr "Distance entre les objets :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 msgid "Number row strates:"
 msgstr "Nombre de lignes :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 msgid "Number column strates:"
 msgstr "Nombre de colonnes : "
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Bienvenue dans la console Python interactive wxGUI %s"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Taper %s pour plus d'informations relatives aux scripts GRASS."
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Taper %s pour ajouter des cartes raster ou vecteur à l'arborescence."
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Effacer tout le texte de la console"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Mode simple"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Carte raster ou vecteur <%s> non trouvée"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Carte raster <%s> ajoutée"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Carte vectorielle <%s> ajoutée"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS %s - Gestionnaire des couches"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Barre d'outils de l'espace de travail"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Barre d'outils des données"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Barre d'outils des outils"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Barre d'outils des vecteurs"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr "Barre d'outils de vue 3D"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Renommer la fenêtre de carte"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
 msgstr "Couches"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Console de commande"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "Rechercher un module"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "Modules"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Console Python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7735,37 +8131,28 @@ msgstr ""
 "\n"
 "Voulez-vous entrer dans le nouveau secteur ?"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "Changer pour le nouveau secteur ?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Le secteur courant est <%(loc)s>.\n"
-"Le jeu de cartes courant est <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Choisir un modèle à exécuter"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Voulez-vous enregistrer les modfications de l'espace de travail ?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Voulez-vous enregistrer les paramètres actuels dans un fichier ?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Fermer la fenêtre de carte %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -7774,25 +8161,25 @@ msgstr ""
 "La commande '%s' n'est pas encore implantée dans wxGUI. Essayez plutôt de "
 "l'ajouter en tant que couche de commande."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "La couche sélectionnée n'est pas un vecteur."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 "L'édition n'est permise que pour des cartes vectorielles du jeux de cartes "
 "actuel."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Choisir un script à exécuter"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Script Python (*.py)|*.py|Bash script (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
@@ -7802,12 +8189,12 @@ msgstr ""
 "contenir certains caractères non-ascii. Merci de renommer le script ou de le "
 "déplacer dans un endroit différent."
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Le fichier de script '%s' n'existe pas. Opération annulée."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
@@ -7816,15 +8203,15 @@ msgstr ""
 "Le script <%s> n'est pas exécutable. Voulez-vous définir les permissions "
 "d'exécution du script (vous devez être l'utilisateur propriétaire) ?"
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr "Définir les permissions ?"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr "Impossible de définir les permissions. Opération annulée."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
@@ -7833,29 +8220,24 @@ msgstr ""
 "Le dossier '%s' n'est pas définit dans GRASS_ADDON_PATH. Voulez-vous ajouter "
 "ce dossier à GRASS_ADDON_PATH ?"
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr "Mettre à jour le chemin des extentions ?"
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Lancement du script '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Aucun secteur/jeux de carte sélectionné. Opération annulée."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr "Aucun jeux de carte sélectionné. Opération annulée."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Le jeux de cartes actuel est <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
@@ -7864,19 +8246,19 @@ msgstr ""
 "Dossier d travail modifié pour :\n"
 "\"%s\""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr "Modifier le dossier de travail pour cette Interface Graphique."
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 msgid "Usage: cd [directory]"
 msgstr "Utilisation : cd [dossier]"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr "Sans paramètre, ouvre une boiite de dialogue."
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
@@ -7884,44 +8266,43 @@ msgstr ""
 "Si ~ (tilde) est présent comme premier dossier du chemin, il sera remplacé "
 "par le dossier utilisateur."
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr "PLus d'un paramètre fourni."
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr "Choisir un dossier de travail"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "Information système"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Version de GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr "version inconnue"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
-msgstr "Version SVN :"
+#: ../gui/wxpython/lmgr/frame.py:1218
+msgid "GRASS SVN revision"
+msgstr "Version SVN:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr "Date de compilation"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-#, fuzzy
-msgid "Build Platform"
-msgstr "Plateforme"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
+msgstr "Plateforme de compilation"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Plateforme"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -7929,59 +8310,59 @@ msgstr ""
 "L'espace de travail n'est pas vide. Voulez-vous enregistrer les paramètres "
 "actuels dans un fichier ?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Créer un nouvel espace de travail ?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Choisir un fichier d'environnement de travail"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "Fichier d'espace de travail GRASS (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Patientez, chargement de l'environnement de travail ..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Choisir un fichier GRC à charger"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Ancien fichier d'espace de travail GRASS (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Choisir le fichier où enregistrer l'environnement de travail courant"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Le fichier d'environnement <%s> existe déjà. Voulez-vous écraser ce fichier ?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Enregistrer l'espace de travail"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "Échec d'écriture des paramètres de l'espace de travail courant."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Entrer le nouveau nom :"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS {version} - Fenêtre de carte : {name} - Secteur : {loc}"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7992,26 +8373,26 @@ msgstr ""
 "\n"
 "Raison : %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Impossible de démarrer l'outil Temporel"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Impossible de démarrer l'outil d'affichage temporel"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Ajouter les cartes sélectionnées dans l'arborescence des couches"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Type de couche <%s> non pris en charge"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
@@ -8019,11 +8400,11 @@ msgstr ""
 "A noter que les valeurs des cellules ne peuvent être affichées que pour les "
 "régions de moins de 10 000 cellules."
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "opacité :"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8034,30 +8415,26 @@ msgstr ""
 "%s\n"
 "de l'arborescence des couches ?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "Voulez-vous retirer la(les) carte(s) sélectionnée(s) de l'arborescence des "
 "couches ?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Enlever la carte"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Quitter l'interface graphique GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Impossible de déterminer la version de GRASS\n"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr "Aucune ccouche sélectionnée. Opération annulée."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
@@ -8067,18 +8444,18 @@ msgstr ""
 "la région de calculs. Il est suggéré de contraindre les cartes aux limites "
 "de la région. Voulez-vous contraindre la résolution ?"
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr "Restreindre la carte aux limites de la région ?"
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 "Impossible d'analyser le fichier XML des outils utilisateur. Chargement du "
 "menu principal par défaut."
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
@@ -8086,12 +8463,14 @@ msgstr ""
 "l'arbre des modules par défaut."
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Importer une carte raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Lier une carte raster externe"
 
@@ -8105,12 +8484,14 @@ msgid "Set raster output format"
 msgstr "Sélectionner le format de sortie raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Importer des données vectorielles"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Lier des données vectorielles externes"
 
@@ -8131,7 +8512,7 @@ msgstr "Importer des données depuis un serveur WMS"
 msgid "Add command layer"
 msgstr "Ajouter une couche de commande"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Quitter"
@@ -8181,8 +8562,8 @@ msgid "Add rhumbline layer"
 msgstr "Ajouter une couche loxodrome (ligne de direction constante)"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Ajouter une carte raster 3D"
 
@@ -8202,295 +8583,284 @@ msgstr "Mode édition"
 msgid "Background vector map"
 msgstr "Carte vecteur d'arrière-plan"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Couches de cartes"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Changer le niveau d'opacité"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr " Paramètres de la vue 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Zoomer sur la(les) carte(s) sélectionnée(s)"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 "Définir la région calculée à partir de la(des) carte(s) sélectionnée(s)"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr "Exporter vers des formats standards"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr "Exporter vers PostGIS"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 msgid "Create pack"
 msgstr "Créer un pack"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr "Faire une copie dans le jeu de cartes courant"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Définir une table de couleur"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Montrer les attributs"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Commencer l'édition"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Arrêter l'édition"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Reconstruire la topologie"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Zoomer sur la(les) carte(s) sélectionnée(s) (ignore les valeurs NULL)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Gérer les règles de couleur de manière interactive"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogramme"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Statistiques raster univariées"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Compte-rendu de statistiques raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr "Enregistrer la couche web service"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Impossible de créer le profil de carte raster."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-"Le nom <%(name)s> n'est pas un nom valide pour une carte GRASS. Merci de "
-"n'utiliser que des caractères ASCII à l'exclusion de %(chars)s et des "
-"espaces."
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "Carte raster 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Type de couche <%s> non pris en charge"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Entrer le nom pour le nouveau %s dans le jeux de cartes courant :"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Faire une copie de %s <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr ""
 "%s <%s> existe déjà dans le jeu de cartes courant. Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Écraser ?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Impossible de faire une copie de <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr ""
 "Impossible de faire une copie de <%s>. Le jeu de cartes <%s> n'est pas le "
 "jeu de cartes courant."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 "Impossible d'afficher l'histogramme de carte raster. Pas de nom de carte "
 "définit."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Régler l'opacité de <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Groupe de couches :"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Cliquer pour modifier les paramètres de couche"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(double clic pour régler les propriétés)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Merci d'attendre, mise à jour des données..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Lancer un nouvel affichage de cartes"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Créer un nouvel espace de travail (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Ouvrir un fichier d'espace de travail (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Enregistrer l'espace de travail actuel dans un fichier (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Ajouter diverses cartes raster ou vecteur (Ctrl+Maj+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Ajouter une carte raster (CTRL+Maj+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Ajouter diverses cartes raster (RVB,TSV, relief ombré, ...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Ajouter une carte vecteur (Ctrl+Maj+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Ajouter diverses cartes vectorielles (thématique, graphique, ...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr "Ajouter une couche web service (WMS, WMTS, NASA OnEarth)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Ajouter un groupe"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Ajouter une couche"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr ""
 "Supprimer la(les) carte(s) sélectionnée(s) de l'arborescence des couches"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importer/Lier des données raster ou vecteur"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Calculatrice raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Modeleur graphique"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Géorectifier"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Composeur de cartes"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr "Lancer un script"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "Paramètres de l'interface graphique"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Manuel de GRASS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr "Modifier la carte vectorielle sélectionnés"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr ""
 "Montrer les données attributaires pour la carte vectorielle sélectionnée"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Générer la commande pour m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr "Générer la commande pour m.nviz.image à partir de l'état actuel"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr "Paramètres de vue 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr "Afficher les boites de dialogue des paramètres de vue 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr "Afficher le manuel de la vue 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8502,57 +8872,57 @@ msgstr ""
 "Python). Voir le site Numeric Python (http://numpy.scipy.org) pour "
 "télécharger les binaires ou le code source."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "Outil d'analyse de profil GRASS"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profil de"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Distance (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Distance le long du transect"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Valeurs de cellule"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr "Les points du profil ne sont pas tous dans la région de calcul."
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Valeurs raster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Vous devez dessiner un transect dans la fenêtre d'affichage de cartes."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Rien à profiler"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 "Choisir le préfixe des fichiers où enregistrer les valeurs du profil ..."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "Valeurs séparées par des virgules (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Écraser le fichier ?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
@@ -8561,7 +8931,7 @@ msgstr ""
 "Impossible d'ouvrir le fichier <%s> en écriture.\n"
 "Raison: %s"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
@@ -8570,55 +8940,55 @@ msgstr ""
 "%d fichiers crées : \n"
 "%s"
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr "Pas de fichier généré."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr "Statistiques du profil"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr "Outil de nuage de points bivarié"
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr "Nuage de points bivarié"
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr "Valeurs de cellules raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr "Rien à tracer."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 msgid "At least 2 raster maps must be specified"
 msgstr "Au moins 2 cartes raster doivent être spécifiées"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr "Nuage de points bivarié de"
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr "Valeurs de cellules du raster <%s>"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ": %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Statistiques de régression pour le nuage de points"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
@@ -8627,291 +8997,291 @@ msgstr ""
 "Équation de régression pour la carte raster <%(rast1)s> vs. <%(rast2)s> :\n"
 "\n"
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr "Trace/retrace le graphique"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Dessiner la ligne de transect sur la carte à profiler"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr "Options de graphique"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr "Statistiques du graphique"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Enregistrer les données de profil dans un fichier CSV"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr "Quitter l'outil de graphique"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr "Clic gauche sur le point :"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Paramètres de texte"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr "Paramètres de graphique"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Cette fonction n'est encore utilisable"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "En construction"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Outil d'histogramme"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "Histogramme de"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr "Nombre de cellules"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogramme du groupe d'image <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Histogramme de la carte raster <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 msgid "Histogram of selected raster maps"
 msgstr "Histogramme des cartes raster sélectionnées"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr "Valeurs de cellules de raster %s"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr "Pourcentage du total des cellules"
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Surface"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr "Statistiques pour la(les) carte(s) avec histogramme"
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Statistique pour la carte raster <%s>"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr "Sélectionner la carte raster à profiler"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr "Sélectionner la(es) carte(s) raster à profiler :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Sélectionner les cartes raster pour les nuages de points"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr "Sélectionner les cartes raster pour les nuages de points bivariés :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "C&opier"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Copier les statistiques de régression dans le presse-papier (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr "Statistiques de régression copiées dans le presse-papier"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr "Sélectionner la carte raster ou le groupe d'images pour l'histogramme"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr "Histogramme d'un seul raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr "Histogramme du groupe d'images"
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Sélectionner une carte raster :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr "Choisir le groupe d'image :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr "Type d'histogramme"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr "Le groupe sélectionné doit être dans le jeu de cartes courant"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Titre du profil :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Taille de caractère du titre (pts) :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "Étiquette de l'axe d'abscisse :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Étiquette de l'axe d'ordonnée :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Taille de caractère d'étiquette (pts) :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Famille de caractère :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Style :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 #, fuzzy
 msgid "Weight:"
 msgstr "Graisse :"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 "Appliquer les changements pour la session courante et fermer la boite de "
 "dialogue"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Tailles de texte du graphique enregistrées dans le fichier '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr "Pas de carte ou d'image sélectionné pour le graphique."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr "Carte/image tracée"
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr "Paramètres pour la carte sélectionnée"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Couleur de ligne"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Paramètre de marqueur de segment du profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr "Nuage de points"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Paramètres des axes"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Axe des abscisses"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Axe des ordonnées"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Échelle"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 "Échelle de l'axe automatique, min et max personnalisés, ou échelle "
 "correspondant à la plage de données (min)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Minimum personnalisé"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Maximum personnalisé"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Échelle log"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Paramètres de grille et de légende"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Couleur de grille"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Afficher la grille"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Taille de caractère de la légende"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Afficher la légende"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Paramètres de graphique enregistrés dans le fichier '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 #, fuzzy
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
@@ -8920,67 +9290,74 @@ msgstr ""
 "L'outil temporel nécessite que le paquet \"matplotlib\" (python-matplotlib) "
 "soit installé."
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Outil d'affichage "
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
 msgstr "Jeux de données temporel en entrée non valide"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr "coordonnées X et Y séparées par des virgules :"
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 "Les coordonnées peuvent être obtenues par exemple par un clic-droit dans la "
 "fenêtre de cartes."
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-#, fuzzy
-msgid "Vector temporal dataset (strds)"
-msgstr "Jeux de données temporel en entrée non valide"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 msgid "Select attribute column"
 msgstr "Sélectionner la colonne d'attribut"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
 msgstr "Sélectionner la catégorie du vecteur"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Dessiner"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Aide"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+msgid "Invalid input coordinates"
+msgstr "Coordonnées en entrée non valides"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Jeux de données <%s> non trouvé dans la base temporelle"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
@@ -8988,132 +9365,132 @@ msgstr ""
 "Les jeux de données ont des types temporels (absolut x relatif) différents, "
 "ce qui n'ets pas permis. "
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 "Les jeux de données ont des unités de temps différentes, ce qui n'est pas "
 "permis."
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr "Pas de connexion entre la carte vecteur {vmap} et la couche {la}"
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, python-format
 msgid "Temporal resolution: %s"
 msgstr "Résolution temporelle : %s"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Date [%s]"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 #, fuzzy
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr "Format de coordonnées incorrect , devrait être : x,y"
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-msgid "Invalid input coordinates"
-msgstr "Coordonnées en entrée non valides"
+#: ../gui/wxpython/tplot/frame.py:724
+#, fuzzy
+msgid "Seed point outside the current region"
+msgstr "Générer une surface pour la région courante"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 msgid "Invalid input raster dataset"
 msgstr "Jeux de données raster en entrée non valide"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 msgid "Invalid input vector dataset"
 msgstr "Jeux de données vecteur en entrée non valide"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr "Merci d'indiquer le jeu de donnée temporel <%s>."
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr "Nom de jeu de données ambigü"
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Jeux de données temporel en entrée non valide"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr "Les jeux de données ont des nombres de valeurs différents"
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Jeux de données raster temporel : %s"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Jeux de données vecteur temporel : %s"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Jeux de données raster 3D temporel : %s"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr "La valeur pour {date} est {val}"
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr "Appuyer sur Suppr pour annuler."
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Fichier"
 
@@ -9121,8 +9498,8 @@ msgstr "&Fichier"
 msgid "Workspace"
 msgstr "Espace de travail"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Nouveau"
 
@@ -9130,7 +9507,7 @@ msgstr "Nouveau"
 msgid "Create new workspace"
 msgstr "Créer un nouvel espace de travail"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Ouvrir"
 
@@ -9138,12 +9515,12 @@ msgstr "Ouvrir"
 msgid "Load workspace from file"
 msgstr "Charger un espace de travail depuis un fichier"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Enregistrer"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Enregistrer sous"
 
@@ -9164,7 +9541,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Charger des cartes depuis un fichier GRC"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Affichage des cartes"
 
@@ -9193,7 +9570,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Ajouter plusieurs cartes raster ou vecteur à l'affichage actuel"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr "Ajouter une couche web service"
 
@@ -9876,23 +10253,23 @@ msgstr "Raster 3D vers série de raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Convertir des cartes raster 3D en cartes raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Géorectifier"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Gérer les points de contrôle au sol pour la géorectification"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Modeleur graphique"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Lancer le modeleur graphique"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Exécuter un modèle"
 
@@ -9935,16 +10312,16 @@ msgstr ""
 "vers des coordonnées et vice-versa. Présume un système de coordonnées "
 "cartésien"
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Lancer le Composeur de cartes"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Type de carte :"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Lancer un script"
@@ -9957,7 +10334,7 @@ msgstr "Lancer un script"
 msgid "Launches script file."
 msgstr "Lancer un fichier de script."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Fermer"
@@ -9967,8 +10344,8 @@ msgstr "Fermer"
 msgid "Quit wxGUI session."
 msgstr "Quitter la session wxGUI."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Quitter l'interface graphique GRASS"
@@ -9977,7 +10354,7 @@ msgstr "Quitter l'interface graphique GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "Paramètres"
 
@@ -10159,7 +10536,7 @@ msgstr "Gérer les extensions installées"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Mettre à jour ou supprimer les extensions GRASS AddOns."
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Préférences"
 
@@ -11326,7 +11703,7 @@ msgstr ""
 "indiqués par l'utilisateur."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Plan"
 
@@ -11599,8 +11976,8 @@ msgid "Develop vector map"
 msgstr "Travailler sur une carte vecteur"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Créer un nouvelle carte vecteur"
 
@@ -12546,12 +12923,12 @@ msgstr ""
 "générées soit par i.cluster, g.gui.iclass, ou i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Entrée interactive pour la  classification supervisée"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -13682,27 +14059,31 @@ msgid "GUI tools"
 msgstr "Outils d'interface graphique"
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Barre d'outils temporelle"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Afficher l'emprise temporelle."
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
 msgstr "Outil d'affichage temporel"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Afficher les valeurs temporelles."
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "&Aide"
 
@@ -13728,7 +14109,7 @@ msgid "Prints system information"
 msgstr "Afficher les informations système"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Au sujet du SIG GRASS"
 
@@ -13740,240 +14121,248 @@ msgstr "Importer, exporter et lier les données"
 msgid "Attribute table manager"
 msgstr "Gestionnaire de table attributaire"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Créer un nouveau modèle"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Charger le modèle depuis un fichier"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Enregistrer le modèle dans un fichier"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Fermer le fichier de modèle"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Exporter en image"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Exporter le modèle vers une image"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Exporter en Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Exporter le modèle dans un script Python"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Quitter le Modeleur"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Fermer la fenêtre du modeleur"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Modèle"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Ajouter une commande"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Ajouter une action (commande GRASS) au modèle"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Ajouter des données"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Ajouter un objet données au modèle"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Définir une relation"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Définir la relation entre les objets données et action"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "Ajouter une boucle / série"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "Ajouter une boucle (série) au modèle"
 
-#: ../gui/wxpython/menustrings.py:1960
-msgid "Adds comment to model"
-msgstr "Ajouter un commentaire au modèle"
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Ajouter une condition"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Ajouter une condition (if/else) au modèle"
+
+#: ../gui/wxpython/menustrings.py:1966
+msgid "Adds comment to model"
+msgstr "Ajouter un commentaire au modèle"
+
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Supprimer un objet"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Supprimer une action/donnée du modèle"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Propriétés du modèle (name, objectif, etc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Supprimer les données intermédiaires"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Supprimer les données intermédiaires définies dans le modèle"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Exécuter le modèle complet"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Valider le modèle"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Valider le modèle complet"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Afficher les pages HTML du manuel du modeleur graphique"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "À propos du Modeleur Graphique"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Afficher les informations concernant le Modeleur Graphique"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr "Charger un fichier d'instructions"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr "Exporter un fichier d'instructions"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "Exporter en PostScript"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Exporter en PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr "Lancer la boite de dialogue ps.map"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr "Fermer le Composeur de cartes"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "&Insérer"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Ajouter ou modifier une trame de carte"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr "Ajouter ou modifier une carte raster"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr "Ajouter ou modifier une carte vecteur"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "Légende de la carte"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr "Ajouter ou modifier la légende du raster ou vecteur"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr "Ajouter ou modifier les informations sur la carte"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr "Ajouter ou modifier une barre d'échelle"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Ajouter une flèche nord"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Afficher les pages HTML du manuel du Composeur de cartes"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr "À propos du Composeur de cartes"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr "Afficher les informations concernant le Composeur de cartes"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Cliquer ici pour afficher le moteur de recherche de modules"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Cliquer ici pour cacher le moteur de recherche de module"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Messages de la commande"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Fenêtre de sortie"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Effacer les messages de sortie"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Effacer les commandes"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Enregistrer le contenu de la fenêtre de sortie dans un fichier"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Annuler la commande en cours"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr "Fichier &Log"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
@@ -13981,28 +14370,28 @@ msgstr ""
 "Basculer l'enregistrement de la liste des commandes exécutées dans le "
 "fichier; le contenu est enregistré lorsque désactivé."
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Enregistrer le fichier sous ..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Fichiers de texte"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Fichiers"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14013,12 +14402,12 @@ msgstr ""
 "\n"
 "Détails: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr "Sortie de la commande enregistrée dans '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14029,97 +14418,137 @@ msgstr ""
 "\n"
 "Détails: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr "Historique des commandes enregistré dans '%s'"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+msgid "category"
+msgstr "catégorie"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+msgid "Select features"
+msgstr "Sélectionner des objets"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+msgid "Create a new map"
+msgstr "Créer une nouvelle carte"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr ""
+"L'affichage de la carte sélectionnée <%s> a été désactivé. Opération annulée."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Échec d'interrogation de la carte vecteur <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+msgid "No features selected"
+msgstr "Pas d'objets sélectionnée."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, python-format
+msgid "Vector map <%s> was created"
+msgstr "La carte vecteur <%s> a créée"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr ""
+"Impossible de créer la nouvelle carte vecteur.\n"
+"\n"
+"Raison: %s"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Double-clic ou Ctrl+Entrée pour exécuter le module sélectionné"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 msgid "Run selected module from the tree"
 msgstr "Exécuter le module sélectionné depuis l'arborescence"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Paramètres utilisateur"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Définir par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 msgid "Revert settings to default"
 msgstr "Revenir aux paramètres par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr "Appliquer les changements pour la session courante et fermer"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr "Appliquer pour cette session uniquement"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Paramètres appliqués à la session courante mais non enregistrés"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "La colonne clé ne peut contenir de chaîne vide."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Paramètres de l'interface utilisateur"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Paramètres du gestionnaire de couches"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Demander lors de la suppression d'une couche de l'arborescence"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "En quittant wxGUI ou l'affichage des cartes, demander confirmation"
 
 # Conserver le sigle GUI me semble plus clair pour l'utilisateur que sa traduction française (IGU) peu voire pas usitée.
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Cacher l'onglet '%s' (requiert le redémarrage du GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Rechercher un module"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 "Copier automatiquement le texte dans le bloc-notes (dans la console de "
 "commande)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Paramètres de l'espace de travail"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Oublier le positionnement de la (des) fenêtre(s) d'affichage de carte"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Oublier le positionnement de la fenêtre de gestionnaire de couches"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Enregistrer la configuration de fenêtre actuelle comme défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14128,198 +14557,191 @@ msgstr ""
 "de couches et de la (des) fenêtre(s) d'affichage de carte ; utiliser par "
 "défaut pour les sessions suivantes."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Apparence"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Police pour la sortie commandes :"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Paramètres de langue"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Choisir une langue (validez et redémarrez GRASS) :"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Paramètres d'apparence"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Liste d'éléments :"
 
 # Conserver le sigle GUI me semble plus clair pour l'utilisateur que sa traduction française (IGU) peu voire pas usitée.
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Style de menu (requiert le redémarrage de l'interface graphique)"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Hauteur de fenêtre popup de sélection de carte (en pixels) :"
 
 # Conserver le sigle GUI me semble plus clair pour l'utilisateur que sa traduction française (IGU) peu voire pas usitée.
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Thème d'icônes (requiert le redémarrage du GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr "Style des boîtes de dialogue des modules"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Fenêtre de carte"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Police par défaut pour les affichages GRASS :"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Paramètres d'affichage par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Pilote d'affichage :"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Mode de la barre de statut :"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Activer le rendu automatique"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Activer le zoom automatique sur la carte sélectionnée"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Action de la molette de la souris :"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr "Sens de défilement de la souris :"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "Paramètres avancés d'affichage"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr "Taille du tampon d'affichage 3D (valeurs possibles 16, 24, 32) :"
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "Modules"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr "Paramètres des fenêtres de modules"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr "Fermer la boîte de dialogue après l'exécution de la commande"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Ajouter la carte créée dans l'arborescence des couches"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Autoriser les entrées interactives"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Niveau de verbosité :"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Couches"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr "Paramètres raster par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Rendre les cellules vides opaque"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Table de couleur par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr "Paramètres vecteur par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Afficher :"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Couleur de l'entité :"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Transparent"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Couleur de remplissage :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Symbole :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Largeur de ligne (en pixels) :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 "Surligner automatiquement les entités sélectionnées dans la fenêtre de cartes"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Navigateur de données"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Double clic gauche :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Encodage (p. ex. utf-8, ascii, iso 8859-1, koi8-r) :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Demander à la suppression d'enregistrement(s) d'une table"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Créer une table"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Colonne clé :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Paramètres de la barre de statut de projection"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14339,20 +14761,20 @@ msgstr ""
 "menu déroulant\n"
 " en bas de la fenêtre de carte.\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Code EPSG : "
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Chaîne Proj.4 (requise) :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "Fichier EPSG :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -14360,62 +14782,73 @@ msgstr ""
 "Charger les codes EPSG (patience), entrer le code EPSG ou insérer la chaîne "
 "Proj.4 directement."
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "Charger les codes EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Format des coordonnées"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 msgid "Lat/long projections"
 msgstr "Projections lat/long"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Précision :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Impossible de lire les codes EPSG : %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Impossible de lire les codes EPSG : %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Code EPSG %s non trouvé"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Sélectionner la police d'affichage par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 "Impossible de définir la police de caractères par défaut. Essayez une police "
 "de caractère différente."
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Sélectionner la police d'affichage par défaut"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Sélectionner une police :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Encodage de caractère :"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Exemple : %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Gérer l'accès aux jeux de cartes"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14429,167 +14862,238 @@ msgstr ""
 "    - Vous pouvez seulement écrire dans le jeu de cartes courant.\n"
 "    - Vous pouvez seulement écrire dans le jeu de cartes qui vous appartient."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Jeu de cartes"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Propriétaire"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Résultats de la requête"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 "Clic droit pour copier les valeurs sélectionnées vers le presse-papier."
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Entité"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Valeur"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr "Tout copier dans le presse-papier"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr "Rediriger vers la console"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr "Copier depuis la colonne '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr "Copier les lignes sélectionnées"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr "Copier '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr "Copier la ligne"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr "Résuluats de la requête :"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr " "
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr "est, nord"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "Aucun résultat"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr " (...)"
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+"Le nom <%(name)s> n'est pas un nom valide pour une carte GRASS. Merci de "
+"n'utiliser que des caractères ASCII à l'exclusion de %(chars)s et des "
+"espaces."
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr "Recherche plein texte"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 "Taper pour rechercher dans tous les modules. Appuyer sur Entrer pour la "
 "prochaine concordance."
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr "Recherche, merci de taper plus de caractères."
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d modules correspondent"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Enregistrer les paramètres courants"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr "Supprimer les paramètres actuellement sélectionnés"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Charger les paramètres :"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+msgid "Load:"
+msgstr "Charger :"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Paramètres <%s> non trouvés"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Enregistrer les paramètres"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "Pas de nom fourni, paramètres non enregistrés."
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Les paramètres <%s> existent déjà. Voulez-vous les écraser ?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "Pas de paramètres définis. Opération annulée."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "Impossible d'enregistrer les paramètres"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Enegistrer le fichier"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Entrer les paramètres pour '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Exécuter la commande (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "SIG GRASS Outil d'animations"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Entrer les paramètres pour '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Fermer la fenêtre sans exécuter la commande (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Exécuter la commande (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Copier la chaîne de commande dans le presse-papier"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Afficher la page de manuel pour la commande (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Ajouter la carte créée dans l'arborescence des couches"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Fermer la boîte de dialogue après exécution"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
@@ -14597,73 +15101,74 @@ msgstr ""
 "Fermer la fenêtre de dialogue quand la commande se termine avec succès. "
 "Modifier ce paramètre dans les Préférences (onglet 'Commande')."
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' copié dans le presse-papier"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Requis"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Optionnel"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "Paramètré dans le modèle"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr "Cette option est requise"
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[multiple]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "plage de validité"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 "Afficher une représentation graphique de l'emprise temporelle du jeu de "
 "données."
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Choisir la couleur"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Choisir %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "Charger"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 msgid "Load and edit content of a file"
 msgstr "Charger et modifier un fichier"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr "Enregi&strer sous"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr "Enregistrer le contenue dans un fichier pour une utilisation future."
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr "ou entrer les valeurs manuellement :"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
@@ -14671,20 +15176,38 @@ msgstr ""
 "Entrez le contenu directement au lieu de spécifier un fichier. Un fichier "
 "temporaire sera créé automatiquement."
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Répertoire"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Identifiant de couche"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Nom de la couche"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr "Concordance des projections"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manuel"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr "Rien à charger."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14695,44 +15218,44 @@ msgstr ""
 "\n"
 "Raison : %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Rien à enregistrer."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Enregistrer le fichier sous ..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr "Pas de jeu de données précisé"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Erreur dans %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Impossible d'interpréter la commande '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s : paramètre '%(key)s' non disponible"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr "Essayez de définir les variables GRASS_ADDON_PATH ou GRASS_ADDON_BASE."
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr "L'objet requis n'est pas défini."
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Choisir un secteur GRASS et un jeu de cartes"
 
@@ -14740,45 +15263,45 @@ msgstr "Choisir un secteur GRASS et un jeu de cartes"
 msgid "Location or mapset is not defined."
 msgstr "Le secteur ou le jeux de donnée ne sont pas définis."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Nom du secteur GRASS :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Nom du jeu de cartes :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Choisir le jeu de cartes dans le secteur GRASS"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "Nom du jeu de cartes manquant."
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr "Nom de la carte vectorielle manquant."
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Créer la table d'attributs"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr "Nom de la nouvelle carte vectorielle manquant."
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Nom pour la nouvelle carte vecteur :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Impossible de créer la carte vecteur <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
@@ -14787,7 +15310,7 @@ msgstr ""
 "Colonne clé non valide ou vide.\n"
 "Impossible de créer la carte vecteur <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -14796,15 +15319,15 @@ msgstr ""
 "La carte vecteur <%s> existe déjà dans le jeu de cartes courant. Voulez-vous "
 "l'écraser ?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Charger une région :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Enregistrer une région :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
@@ -14813,25 +15336,25 @@ msgstr ""
 "guillemets, '/', ''', '@', ',', '=', '*', ou tout autre caractère non alpha-"
 "numérique."
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr "Créer/éditer un groupe d'images"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr "Appliquer les modifications et fermer la boîte de dialogue"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr "Appliquer les modifications"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 "Fermer la boîte de dialogue, les modifications ne seront pas appliquées"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
@@ -14839,449 +15362,343 @@ msgstr ""
 "Mettez ici une expression régulière. Le caratère '.*' correspond à n'importe "
 "quoi, le caractère '^' correspond au début et '$' à la fin."
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr "Sélectionner un groupe existant ou entrez le nom d'un nouveau groupe :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr "Modifier/créer un sous-groupe"
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 "Sélectionner un sous-groupe existant ou entrez le nom d'un nouveau sous-"
 "groupe :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr "Modèle :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Liste des cartes :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr "Sélectionner la couche et l'ajouter à la liste"
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr "Suprimer la(les) couche(s) sélectionnée(s) de la liste."
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr "Vérifier les cartes du groupe à inclure dans le sous-groupe."
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr "Ajouter les couches sélectionnées dans le groupe"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 "Le groupe <%s> a été modifié, voulez-vous enregistrer les modifications ?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr "Modifications non appliquées"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 "Le sous-groupe <%s> a été modifié, voulez-vous enregistrer les "
 "modifications ?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 msgid "No raster maps selected."
 msgstr "Pas de cartes raster sélectionnées."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr "Pas de modifications à appliquer au groupe <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr "Le groupe <%s> a été créé."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr "Le groupe <%s> a été modifié."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "La création du nouveau groupe <%s> a échoué."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr "La modification du groupe <%s> a échoué."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr "Pas de groupe sélectionné."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr "Pas de sous-groupe sélectionné."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr "Utilisez un nom de carte complet"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "Carte raster 3D"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Type de carte :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Interrupteur de sélection"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Jeu de cartes :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Inverser la sélection"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Série dynamique (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Import multiple"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Liste des couches raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr "Liste des couches vecteurs"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr "Liste des couches %s"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr "ckic droit pour (dé)sélectionenr tout"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Identifiant de couche"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Nom de la couche"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr "Nom de la sortie de carte GRASS (mode édition)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr "Concordance des projections"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Options"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr "Encodage"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Importer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importer les couches sélectionnées"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-msgid "Add linked layers into layer tree"
-msgstr "Ajouter les couches liées dans l'arborescence des couches"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Ajouter les couches importées dans l'arborescence des couches"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Lien"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Lier les couches sélectionnées"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "Aucune couche sélectionnée. Opération annulée."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-msgid "Unable to determine number of raster bands"
-msgstr "Impossible de déterminer le nombre de bandes du raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr "Définir le format de sortie pour la carte vectorielle"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr "Définir le format de sortie pour les données raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr "Définir un format externe et fermer la boite de dialogue"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr "Pas de source de données sélectionnée."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Importer des couches DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Choisir le fichier DXF à importer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-msgid "No layers selected."
-msgstr "Pas de couches sélectionnées."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Ajuster la transparence de la carte"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "opaque"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Fixer la taille de l'image"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Taille de l'image"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Gabarit :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr "Utilitaire de requêtes SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr " Clause SQL "
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Symboles"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Répertoire des symboles :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Nom du symbole :"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Info"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licence"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotation"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Auteurs"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Contributeurs"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Contributeurs supplémentaires"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Traducteurs"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr "État de la traduction"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Site officiel de GRASS :"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr "Version du code"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr "Date de compilation"
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Langue"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "fichier %s manquant"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Erreur à la lecture du fichier '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Lignes :"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "Courriel"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "MPays"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr "Nationalité"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr "   %d traduit"
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr "   %d flou"
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr "   %d non traduit"
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr "%d traduit"
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "Fichier <%s> non trouvé"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Suivant"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Précédent"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr "Barre d'outils"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "Copier les noms des cartes dans le presse-papier (de haut en bas)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "Copier les noms des cartes dans le presse-papier (de bas en haut)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 msgid "Remove selected map(s) from list"
 msgstr "Suprimer la(les) couche(s) sélectionnée(s) de la liste"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 msgid "Layer up"
 msgstr "Monter la couche"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 msgid "Move selected layer(s) up"
 msgstr "Faire monter la(les) couche(s) sélectionnée(s) dans la liste"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 msgid "Layer down"
 msgstr "Descendre la couche"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 msgid "Move selected layer(s) down"
 msgstr "Faire descendre la(les) couche(s) sélectionnée(s) dans la liste"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 msgid "Edit layer properties"
 msgstr "Modifier la propriétés de la couche"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 msgid "Change opacity"
 msgstr "Modifier l'opacité"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr "Modifier l'opacité de la couche"
 
@@ -15379,11 +15796,11 @@ msgstr "Superposer des éléments sur la carte tels que échelle et légende"
 msgid "Create histogram with d.histogram"
 msgstr "Créer un histogramme avec d.histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 msgid "Select graphics tool"
 msgstr "Sélectionner l'outil de graphiques"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
@@ -15392,137 +15809,158 @@ msgstr ""
 "Impossible d'importer pyGRASS : %s\n"
 "Certaines fonctionnalités ne seront pas accessibles"
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Pas d'élément sélectionnable"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr "Type : "
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelect : objet %s invalide"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Paramètres de sortie"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Paramètres de la source"
+# "source" au sens de la source d'une rivière
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Point de source"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr "Natif"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Fichier"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protocole"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Type de la sortie"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Type de la source"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Tous les fichiers"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "Fichier ZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "Fichiers GZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "Fichiers TAR"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "Fichiers TARGZ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Fichier :"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Choisir un fichier à importer"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Choisir le répertoire d'entrée"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Extension :"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Choisir un fichier"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr "Type d'entité :"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 msgid "simple features"
 msgstr "entités simples"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr "topologiques"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Options de création :"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Format :"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protocole :"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr "Pas de paramètres disponibles"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 "Pas de source de données définie, les paramètres ne sont pas enregistrés."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr "Ligne"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr "Polygone"
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr ""
+"Pas de carte vecteur sélectionnée dans le gestionnaire de couches. Opération "
+"annulée."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+msgid "Input vector map is not selected"
+msgstr "La couche vecteur en entrée n'est pas sélectionnée"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr ""
+"La carte vecteur <%s> en entrée et la carte <%s> sélectionnée dans le "
+"gestionnaire de couches sont différentes . Opération annulée."
+
+#: ../gui/wxpython/timeline/frame.py:39
 #, fuzzy
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
@@ -15531,73 +15969,73 @@ msgstr ""
 "L'outil temporel nécessite que le paquet \"matplotlib\" (python-matplotlib) "
 "soit installé."
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "SIG GRASS Outil temporel"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 #, fuzzy
 msgid "3D plot of spatio-temporal extents"
 msgstr "Affichage 3D de l'emprise temporelle"
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Choisir le jeux de données temporel :"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr "X [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr "Y [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Jeu de données : %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr "Nom de la carte : %s"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr "Temps de départ : %s"
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, python-format
 msgid "End time: %s"
 msgstr "Heure de fin : %s"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr "ATTENTION : topologie invalide"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
@@ -15605,67 +16043,67 @@ msgstr ""
 "\n"
 "Appuyer sur Suppr pour annuler."
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 msgid " Requested data settings "
 msgstr "Paramètres de données demandées"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 msgid "Request"
 msgstr "Requête"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 msgid "List of layers "
 msgstr "Liste des couches "
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 msgid "Source projection:"
 msgstr "Projection source :"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 msgid "Advanced request settings"
 msgstr "Paramètres de requêtes avancées"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr "Ordre des couches dans le raster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 msgid "Reprojection method:"
 msgstr "Méthode de reprojection :"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr "Plus proche voisin"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 msgid "Linear interpolation"
 msgstr "Interpolation linéaire"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 msgid "Cubic interpolation"
 msgstr "Interpolation cubique"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr "Interpolation spline cubique"
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr "Nombre maximal de colonnes à demander au serveur en unse seule fois :"
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr "Nombre maximal de ligne à demander au serveur en unse seule fois :"
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr "Ne pas demander les données transparentes"
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr "Paramètres supplémentaires de requête pour le serveur :"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
@@ -15674,7 +16112,7 @@ msgstr ""
 "Impossible de télécharger le fichier de capacités %s\n"
 "depuis <%s> :\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
@@ -15684,39 +16122,40 @@ msgstr ""
 "depuis <%s> :\n"
 "%s\n"
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 msgid "Source image format"
 msgstr "Format de l'image source"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr "Sélectionner la couche.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr "Sélectionner le format de l'image source.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 msgid "Select source projection.\n"
 msgstr "Sélectionner la projection source.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr "Choisir le nom de la couche de sorte.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr "couche"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "style"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
-msgid "Add default servers"
-msgstr "Ajouter les serveurs par défaut"
+#: ../gui/wxpython/web_services/widgets.py:1154
+#, fuzzy
+msgid "Add default"
+msgstr "défaut"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
@@ -15726,328 +16165,328 @@ msgstr ""
 "serveur par défaut <%s>.\n"
 "On garde le serveur défini par l'utilisateur."
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Paramètres du serveur "
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Serveur :"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Connecter"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Se connecter au serveur"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 msgid "Show advanced connection settings"
 msgstr "Afficher les paramètres avancés de connexion"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 msgid "Hide advanced connection settings"
 msgstr "Cacher les paramètres avancés de connexion"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr "Paramètres du gestionnaire de couches "
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 msgid "Output layer name:"
 msgstr "Nom de la couche en sortie :"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "Nom d'utilisateur :"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Mot de passe:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr "Connexion à <%s> ..."
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr "Services web disponibles"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr "Connecté à <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Impossible de se connecter à <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr ""
 "Ajouter les couches web service sélectionnées dans l'arborescence des couches"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr " Propriétés de la couche web service"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "&Appliquer"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 msgid "Name for output raster map:"
 msgstr "Nom pour la carte raster en sortie : "
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 msgid "Export region"
 msgstr "Exporter une région"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 msgid "Named region"
 msgstr "Région nommée :"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 "L'emprise et la résolution sont basés sur la géométrie de l'écran "
 "d'affichage."
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr "L'emprise et la résolution sont basées sur la région de calcul."
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 msgid "Extent and resolution are based on named region."
 msgstr "L'emprise et la résolution sont basées sur la région enregistrée."
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 msgid "Overwrite existing raster map"
 msgstr "Écraser la carte raster existante"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 msgid "Choose named region:"
 msgstr "Choisir une région :"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr "Enregi&strer la couche"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 msgid "Save web service layer as raster map"
 msgstr "Enregistrer la couche web service comme carte raster"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr "Raster de sortie manquant."
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr "La carte ne peut être ajoutée qu'au jeu de cartes courant."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr "La carte <%s> existe déjà."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, python-format
 msgid "Region <%s> does not exist."
 msgstr "La région <%s> n'existe pas."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 msgid "Downloading data..."
 msgstr "Téléchargement des données ..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 msgid "Unable to fetch data.\n"
 msgstr "Impossible de récupérer les données.\n"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "(Dé)cocher tout"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "Effacer tout"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr "Entrer les valeurs d'attributs"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr "Mauvais format de couleur. Utiliser le format '0:0:0'"
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Sélectionner une carte vecteur :"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr "Importer ou exporter la table de couleurs :"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr "Choisir le fichier de table de couleur à charger"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Charger"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 "Entrer un nom de fichier ou cliquer sur Parcourir pour charger une table de "
 "couleur"
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Choisir le fichier à enregistrer"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 "Entrer un nom de fichier ou cliquer sur Parcourir pour enregistrer une table "
 "de couleur"
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Définir"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 msgid "Load color table:"
 msgstr "Charger la table de couleur :"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr "Charger la table de couleur depuis un fichier :"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr "Enregistrer la table de couleur dans le fichier :"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr "Recharger la table par défaut"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 "Affiche un aperçu de la carte (l'étendue de la fenêtre de cartes actuelle "
 "sera utilisée)."
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr "Pas de règle de couleur valide."
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Le fichier région <%s> existe déjà. Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr "Format de table de couleur invalide"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 "Valeur '%s' de règle non valide. Impossible d'appliquer la table de couleur."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Créer une nouvelle table de couleur pour une carte raster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Entrer les valeurs de catégories ou les pourcentages"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "Plage de nombres flottants"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 "Saisir les valeurs de catégorie ou le pourcentage (%(range)s = %(min)d-"
 "%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr "Créer une nouvelle règle de couleur pour une carte vecteur"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr "Entrer les valeurs d'attributs ou les pourcentages :"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr "Entrer les valeurs d'attributs :"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr "Sélectionner les colonnes"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Couche :"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Colonne d'attribut :"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr "Charger les couleurs depuis la colonne :"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr "Enregistrer les couleurs dans la colonne :"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr "Charger la taille depuis la colonne :"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr "Entregistrer la taille dans la colonne :"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr "Charger l'épaisseur depuis la colonne :"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr "Enregistrer l'épaisseur dans la colonne :"
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr "Utiliser la colonne de couleur à la place de la table de couleur :"
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Ajouter la colonne GRASSRGV à la table d'attributs."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr "Importer ou exporter la table de couleurs"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16057,11 +16496,11 @@ msgstr ""
 "définie dans le fichier DB. Voulez-vous créer et connecter une nouvelle "
 "table d'attributs ?"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr "Pas de connexion à une base de données définie"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
@@ -16070,16 +16509,16 @@ msgstr ""
 "La carte sélectionnée <%(map)s> n'est pas dans le jeux de cartes courant <"
 "%(mapset)s>. La table d'attributs ne peut pas être modifiée."
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "La colonne %s existe déjà."
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Patientez, chargement des données attributaires .."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
@@ -16089,308 +16528,317 @@ msgstr ""
 "serait très long et peut provoquer un gel de l'ordinateur. Voulez-vous "
 "continuer ?"
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Trop d'enregistrements"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Saisir les valeurs d'attributs ou les pourcentages %s :"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Saisir les valeurs d'attributs %s :"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr "Sélectionner la colonne où enregistrer les valeurs."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "Pas de colonne de couleur définie. Opération annulée"
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr "Carte thématique pour la carte vecteur dans la vue 3D"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "Calculateur GRASS de carte raster"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "Calculateur de carte raster 3D GRASS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "Instruction mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Opérateurs"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Opérandes"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Expression"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Enregistrer l'expression dans un fichier"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Charger une expression depuis un fichier"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "exposant"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "diviser"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "additionner "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "soustraire"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "modulo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "multiplier"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "décalage à gauche"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "décalage à droite"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "décalage à droite (non signé)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "supérieur à"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "supérieur ou égal à"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "inférieur à"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "inférieur ou égal à"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "égal à"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "différent de"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "complément à 1"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NOT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "AND bit à bit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "OR bit à bit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "AND logique"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "AND logique (ignore les NULLs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "OR logique"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "OR logique (ignore les NULLs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "Conditionnel"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Nom de la nouvelle carte raster 3D à créer"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Nom de la nouvelle carte raster à créer"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Insérer une carte raster 3D existante"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Insérer une carte raster existante"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "insérer une fonction mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr "Générer une graine aléatoire pour rand()"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr "Graine :"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr "Graine en entier pour la fonction rand()"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Ajouter la carte raster créée dans l'arborescence des couches"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr "Vous devez entrer le nom de la nouvelle carte à créer."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr "Vous devez entrer une expression pour créer une nouvelle carte."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Choisir un nom de fichier où enregistrer l'expression"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "Fichier de formule (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Choisir un fichier pour charger une formule"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'{cmd}' copiée dans le presse-papier"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Récupérer et installer des extension depuis le dépôt GRASS AddOns"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Dépôt"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr "Dépôt (laisser vide pour utiliser l'officiel)"
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr "Liste des extensions - double-clic pour installer"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Options"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "Récupérer"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 "Récupérer la liste des modules disponibles depuis le dépôt svn des GRASS "
 "AddOns"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Installer"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "Installer les modules GRASS AddOns sélectionnés"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr "Afficher les pages de manuel de g.extension"
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "Extension non définie"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 "Récupération de la liste des modules à partir du svn GRASS AddOns (soyez "
 "patient)..."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, python-format
+msgid "%d extensions loaded"
+msgstr "%d extentions chargées"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr "Installer"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr "Afficher le manuel"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Impossible de charger les extensions. %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Gérer les extensions GRASS Addons installées"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "Liste des extensions installées"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 msgid "Uninstall"
 msgstr "Désinstaller"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 msgid "Uninstall selected Addons extensions"
 msgstr "Désinstaller les extensions sélectionnées"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr "Réinstaller"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 msgid "Reinstall selected Addons extensions"
 msgstr "Résinstaller les extensions sélectionnées"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 msgid "No extension selected. Operation canceled."
 msgstr "Pas d'extension sélectionnée. Opération annulée."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -16403,246 +16851,381 @@ msgstr ""
 "\n"
 "Souhaitez-vous vraiment supprimer les extensions <%(ext)s> ?"
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr "Supprimer une extenion"
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 msgid "Extension"
 msgstr "Extension"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Import multiple"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Liste des couches raster"
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr "Liste des couches vecteurs"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr "Liste des couches %s"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr "ckic droit pour (dé)sélectionenr tout"
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr "Nom de la sortie de carte GRASS (mode édition)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Importer"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importer les couches sélectionnées"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Paramètres de la source"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Paramètres de police"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+msgid "Add linked layers into layer tree"
+msgstr "Ajouter les couches liées dans l'arborescence des couches"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Ajouter les couches importées dans l'arborescence des couches"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Lien"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Lier les couches sélectionnées"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "Aucune couche sélectionnée. Opération annulée."
+
+#: ../gui/wxpython/modules/import_export.py:431
+msgid "Unable to determine number of raster bands"
+msgstr "Impossible de déterminer le nombre de bandes du raster"
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr "Définir le format de sortie pour la carte vectorielle"
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr "Définir le format de sortie pour les données raster"
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr "Définir un format externe et fermer la boite de dialogue"
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr "Pas de source de données sélectionnée."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Importer des couches DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Choisir le fichier DXF à importer"
+
+#: ../gui/wxpython/modules/import_export.py:758
+msgid "No layers selected."
+msgstr "Pas de couches sélectionnées."
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projection"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Nom de la sortie de carte GRASS (mode édition)"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Couche à supprimer"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Importer les couches sélectionnées"
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Librairie GRASS-python non trouvée."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Données en entrée"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Jeux de points :"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Colonne numérique : "
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Krigeage"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Nom pour la carte raster en sortie : "
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Exporter également la carte de variance :"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Module de krigeage"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Prêt."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Ajustement du variogramme"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Dessiner/rafraîchir le variogramme"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr " : "
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "techniques de krigeage"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Taille de block : "
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Ajustement automatique du variogramme"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Modèle : "
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Travail en cours ! aucune fonction disponible."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Histogramme GRASS"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Sélectionner la police pour le texte d'histogramme"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Configurer les outils de nettoyage vectoriel"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "couper une ligne / un contour"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "supprimer les doublons"
 
 # J'opte pour les termes lignes/nœuds pendant(e)s lorsque je rencontre le terme dangling
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "Supprimer les pendants"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "Convertir les contours pendants en lignes"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "Supprimer les connexions"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "Convertir les ponts en lignes"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "Magnétiser lignes/contours"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "Supprimer les doublons de centroïdes de surface"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "casser les polygones"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "Élaguer lignes/contours"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "supprimer les petites surfaces"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "Éliminer les lignes/contours de longueur zéro"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "Éliminer les petits angles aigus au droit des nœuds"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Choisir les outils de nettoyage et fixer les seuils"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Sélectionner la carte vecteur en entrée :"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Type d'entité :"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Sélectionner la carte vecteur en sortie :"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Copier la commande courante dans le presse-papier [Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "ligne"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "contour"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr " centroïde"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "face"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. outil de nettoyage ôté, sera ignoré"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Merci de sélectionner un outil de nettoyage à supprimer"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. outil de nettoyage monté"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "1. L'outil de nettoyage ne peut pas être monté"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr "Merci de sélectionnerun outil de nettoyage à faire monter"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. outil de nettoyage descendu"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "Le dernier outil de nettoyage ne peut pas être descendu"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "Merci de sélectionner un outil de nettoyage à faire descendre"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "outil de nettoyage : '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "Seuil pour %(num)s. outil '%(tool)s' : %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr "Nom de la carte vecteur en entrée"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr "Nom de la carte vecteur en sortie"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Seuil"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr "'%s' non défini"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16653,20 +17236,20 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Exécution des opérations de nettoyage sélectionnées..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Commande de nettoyage du vecteur copiée dans le presse-papier"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Impossible d'ouvrir le fichier <%s> en lecture."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16680,42 +17263,65 @@ msgstr ""
 "\n"
 "Nombre de lignes sautées : %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "ligne %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: le type de couche <%(type)s> n'est pas pris en charge"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr "La commande '%s' a échoué\n"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Détails : %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Type de couche '%s' non pris en charge"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, python-format
+msgid "Rendering failed: %s"
+msgstr "Le rendu a échoué : %s"
+
+#: ../gui/wxpython/core/render.py:602
+msgid "Rendering aborted"
+msgstr "Annulation du rendu"
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr "Téléchargement des données ..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Générer (l'affichage)"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Générer (l'affichage)"
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr "Essai de récupération depuis la région par défaut ..."
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 "Erreur : impossible d'ouvrir '%(file)s'. Raison : %(ret)s. Sortie de wxGUI.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
@@ -16724,32 +17330,32 @@ msgstr ""
 "\n"
 "ERREUR : Impossible de lire le fichier WIND : %s\n"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Taille non valide %d,%d\n"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Impossible de zoomer sur la carte raster : %s"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Détails :"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Impossible de zoomer sur la carte vecteur <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Impossible de zoomer sur la carte raster 3d <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
@@ -16757,98 +17363,69 @@ msgstr ""
 "Impossible d'obtenir l’extension géographique courante. Sortie forcée de "
 "wxGUI. Merci d'exécuter manuellement g.region pour résoudre ce problème."
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "ERREUR : le rendu a échoué. Détails : %s"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Impossible de générer l'aperçu de la carte <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Impossible de générer l'aperçu de la superposition <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr "Téléchargement des données ..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Générer (l'affichage)"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Générer (l'affichage)"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr "Étiquette inconnue %s"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 "Impossible d'analyser le fichier XML des barres d'outils utilisateur. "
 "Chargement du fichier par défaut."
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 msgid "Unable to create toolboxes directory."
 msgstr "Impossible de créer le dossier des boites à outils."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr "Boites à outils personnalisées"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 "La liste des extensions ne peut pas être obtenu car g.extension a échoué."
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr "Extensions"
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr "erreur de syntaxe : %s"
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Carte vectorielle <%(map)s> : %(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Échec à l'ouverture de '%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "ERREUR : impossible de déterminer la version de GRASS. Détails : %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Impossible d'ouvrir le fichier '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
@@ -16857,17 +17434,17 @@ msgstr ""
 "%s : ligne sautée - impossible de lire '%s'\n"
 "Raison : %s\n"
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Paramètre en double : %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Impossible de créer le fichier '%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16881,175 +17458,180 @@ msgstr ""
 "Option <%(opt)s> : la lecture depuis l'entrée standard n'est pas prise en "
 "charge par wxGUI"
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Fichier <%s> non trouvé."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d sec"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d min %(sec)d sec"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 "Veuillez noter que les données sont laissées dans un état inconsitant et "
 "peuvent être corrompues"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "La commande s'est interrompue"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "La commande s'est terminée"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Raison"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "L'exécution a échoué :"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Erreur :"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Impossible d'exécuter la commande : '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Fin de segment"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "point"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr "animation"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Réduire tout sauf PERMANENT et actuel"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Réduire tout sauf PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Réduire tout sauf actuel"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Réduire tout"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Étendre tout"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Afficher sélection"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "Classique (étiquettes uniquement)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "Combiné (étiquettes et noms de modules)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr "Expert (noms de modules seuls)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 msgid "List left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Zoom et recentre"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr "Zoom sur la souris"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Aucune action"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "Molette avant pour zoomer"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "Molette arrière pour zoomer"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "boite"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "sphère"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cube"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamant"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "étoile"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "roue"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "histogramme"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr "croix"
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr "cercle"
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Impossible de lire le fichier de paramètres <%s>\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17060,11 +17642,11 @@ msgstr ""
 "\t\tDétails: %(detail)s\n"
 "\t\tLigne: '%(line)s'\n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "Impossible de créer le dossier de paramètres"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17075,16 +17657,16 @@ msgstr ""
 "\n"
 "Détails : %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Impossible de définir "
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Impossible de lire la configuration '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 #, fuzzy
 msgid ""
 "Unable to load GDAL Python bindings.\n"
@@ -17093,31 +17675,31 @@ msgstr ""
 "Impossible de charger le bindings GDAL pour Python.\n"
 "Les couches WMS ne peuvent pas être affichées sans le bindings\n"
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Définir la base de données de GRASS et le nom du secteur"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Répertoire des données SIG :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Secteur du projet"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Nom du répertoire du secteur dans le dossier GIS DATA"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Titre du secteur"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "Titre de secteur optionnel, vous pouvez laisser ce champ vide."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
@@ -17127,24 +17709,24 @@ msgstr ""
 "n'utiliser que des caractères ASCII à l'exclusion de %(chars)s et des "
 "espaces."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Non de secteur invalide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Choisir le répertoire des données de GRASS :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Le secteur existe déjà dans la base de données GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Impossible de créer le secteur"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
@@ -17152,180 +17734,211 @@ msgstr ""
 "Le titre du secteur est limité à une ligne et 256 caractères. Le reste du "
 "texte sera ignoré."
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Définir le nouveau système de coordonnées"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Sélectionner le code EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr "Lire depuis un fichier géoréférencé"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "Lire depuis un fichier WKT .prj"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Sélectionner les paramètres depuis une liste"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "Paramètres PROJ.4 personnalisés"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Système de coordonnées cartésiennes (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Mode simple"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Élaborée"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Choisir la projection"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Code"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Code de la projection "
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Rechercher dans la description :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Impossible de lire la liste : %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Choisir les paramètres de projection"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Sélectionner le datum ou l'ellipsoïde (page suivante)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datum et ellipsoïde associé"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Ellipsoïde uniquement"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Vous devez entrer une valeur pour %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Entrez les paramètres pour la projection %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Spécifier les données géodésiques"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Ellipsoïde"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Code des données :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Spécifier l'ellipsoïde"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr "Coordonnées terrestres"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr "Corps planétaire"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Code de l'ellipsoïde : "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Sélectionner un fichier géo-référencé"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Fichier géo-référencé : "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "Sélectionner le fichier Well Known Text (WKT) .prj"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr "Fichier WKT .prj :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Choisir le code EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Chemin vers le fichier de codes EPSG : "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Choisir un fichier de codes EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Choisir le code EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Chemin vers le fichier de codes EPSG : "
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Code EPSG : "
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Choisir un fichier de codes EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Impossible de lire les codes EPSG : %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Choisir la méthode pour définir les paramètres de géo-référencement"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Entrer la chaîne de paramètres PROJ.4 :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Transformation par datum requise."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Base de données GRASS :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Nom du secteur : "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Titre du secteur :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projection :"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
@@ -17333,20 +17946,20 @@ msgstr ""
 "Définition PROJ.4 :\n"
 " (temporaire)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Voulez-vous créer le secteur GRASS <%s> ?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Créer un nouveau secteur ?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Définir un nouveau secteur GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17357,15 +17970,15 @@ msgstr ""
 "\n"
 "Détails: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Assistant de création de secteur interrompu. Secteur non créé."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Impossible de créer le nouveau secteur"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17375,116 +17988,121 @@ msgstr ""
 "faudra changer le répertoire SIG par défaut dans l'écran de démarrage de "
 "GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Nouveau répertoire de données SIG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Code EPSG manquant."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Code EPSG manquant."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Fichier <%s> non trouvé."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Définir les limites et la résolution de la région par défaut"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Définir la région"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Secteur sélectionné non valide."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Région non valide"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Cliquer ici pour voir les paramètres 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Cliquer ici pour cacher les paramètres 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Lignes : %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Colonnes : %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Cellules : %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Profondeur :%d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Cellules 3D : %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Résolution verticale "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Nord"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Ouest"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Est"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Sud"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Résolution Nord-Sud"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Résolution Est-Ouest"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Valeur non valide : %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Sélectionner le datum de transformation"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Sélectionner parmi une liste de datums de transformation"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
@@ -17493,7 +18111,7 @@ msgstr ""
 "d'affichage dans Paramètres > Préférences > onglet Fenêtre de carte > "
 "Paramètres d'affichage avancés puis redémarrer l'interface."
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
@@ -17503,110 +18121,110 @@ msgstr ""
 "texture d'un maximum de %d pixels."
 
 # Easting et Northing sont ici traduits resp. Abscisse et Ordonnée, désignant plutôt des valeurs numériques que des directions cardinales.
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Abscisse"
 
 # Easting et Northing sont ici traduits resp. Abscisse et Ordonnée, désignant plutôt des valeurs numériques que des directions cardinales.
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Ordonnée"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Altitude"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr "Nom de la carte de surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "Hauteur de la carte de surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "Couleur de la carte de surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "Distance XY du précédent"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "Distance XYZ du précédent"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr "Distance le long de la surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr "Distance le long de la surface exag."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "Pas de point sur la surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Chargement de la carte raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Chargement de la carte raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "échoué"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Type de couche '%s' non pris en charge"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Impossible de décharger la carte raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Impossible de décharger la carte raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "Carte raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "Déchargement réussi"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Le chargement de la carte vecteur<%(name)s> (%(type)s) a échoué"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Impossible de décharger la carte vecteur <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Déchargement de la carte vecteur <%(name)s> (%(type)s) réussi"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Carte vecteur ponctuelle non trouvée (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Impossible de régler les propriétés de la couche de données (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17617,47 +18235,47 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "constante#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Vue"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analyses"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animation"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Contrôles de la vue"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 "Ajuster la distance et l'angle de perspective de l'image au point de vue"
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspective :"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "Penche la surface par rapport à l'horizontale"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Inclinaison :"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
@@ -17665,23 +18283,23 @@ msgstr ""
 "Ajuster la hauteur de vue (l'angle de vue s'ajuste automatiquement pour "
 "garder le même centre de la vue)"
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr "Ajuster la hauteur relative des entités au dessus de la surface"
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Exagération verticale :"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Orienter vers :"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "curseur"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
@@ -17689,19 +18307,19 @@ msgstr ""
 "Permet de sélectionner un point sur la surface qui deviendra le nouveau "
 "centre de la vue. Cliquer sur le bouton puis sur la surface."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "centre"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Rétablir le centre de la vue par défaut"
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "nord"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
@@ -17709,19 +18327,19 @@ msgstr ""
 "Définir la vue directement au dessus du centre de la scène. Cette vue du "
 "haut est orientée approximativement nord-sud."
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "par défaut"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Revenir à la vue par défaut"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Apparence de l'image"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
@@ -17730,220 +18348,220 @@ msgstr ""
 "recommandé d'utiliser le mode survol (barre d'outils d'affichage) pour "
 "obtenir un déplacement fluide."
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Enregistrer"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Lecture"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Nombre total d'images :"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "Taux de rafraichissement (FPS) :"
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "Les images sont enregistrées à la fréquence donnée (FPS)."
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Enregistrer la séquence d'image"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Choisir un répertoire pour les images"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 "Les noms de fichiers générés ressembleront à ceci : prefix_1.ppm, prefix_2."
 "ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Surface"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Surface constante"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vecteur"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Éclairage"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "Frange"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr "Plans de coupe"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Mode :"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "grossier"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "fin"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "les deux"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Ombrage :"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "plat"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Définir pour tous"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Utiliser les paramètres de rendu pour toutes les surfaces chargées"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Mode grossier :"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "résolution :"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "style :"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "fil de fer"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "surface"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr "Couleur du fil"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Mode fin :"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Attributs pour les surfaces"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Transparence"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Luminosité"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "carte"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "non défini"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "constante"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Modifier les positions x, y et z de la surface actuelle"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Remise à zéro"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Revenir à la position par défaut"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "Activer les plans de coupe :"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "effacer"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr "couleur du dessus"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr "couleur du fond"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "hachures"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "ombré"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "H horizontal :"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "Définir la coordonnée X du plan de coupe"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Y horizontal :"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "Définir la coordonnée Y du plan de coupe"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr "Effectue une rotation sur l'axe vertical du plan de coupe"
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr "Effectue une rotation sur l'axe horizontal du plan de coupe"
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
@@ -17951,354 +18569,354 @@ msgstr ""
 "Définit la coordonnée Z du plan de coupe actuel (n'a de sens que si "
 "l'inclinaison n'est pas à 0)"
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr "Résolution fine :"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Valeur :"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Transparence :"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Montrer les lignes vectorielles"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Lignes vectorielles"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Ligne :"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "largeur :"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "couleur :"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr "utiliser la couleur pour la carte thématique"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr "utiliser la largeur pour la carte thématique"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr "Définir les options ..."
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "sur la surface :"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr "en 3D"
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Hauteur au-dessus de la surface :"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Afficher les points vectoriels"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Points vectoriels"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Icône :"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr "utiiser la taille pour la carte thématique"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "iso-surfaces"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr "tranche"
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Résolution :"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 #, fuzzy
 msgid "Draw wire box"
 msgstr "Dessiner la boite en fil de fer"
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Liste des iso-surfaces"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Montrer le modèle d'illumination"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Position de la source de lumière"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Ajuster la hauteur de la source de lumière"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Couleur et intensité de la lumière"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Luminosité :"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Ajuster la luminosité de la lumière"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Ambiante :"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Ajuster la lumière ambiante"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "Bordures avec frange"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "N && O"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "N && E"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "S && O"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "S && E"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr "Altitude de la frange depuis le fond :"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "Longueur de la flèche (en unité de carte) :"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Couleur de la flèche :"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Positionner la flèche"
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Longueur de la barre d'échelle (en unités de carte) : "
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Couleur de la barre d'échelle :"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr "Positionner une nouvelle barre d'échelle"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 "Voulez-vous enregistrer une nouvelle animation sans enregistrer la "
 "précédente ?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "L'animation existe déjà"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "Pas de préfix de fichier."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "Le répertoire %s n'existe pas."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Attributs de l'iso-surface"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr "Changer la direction normale"
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Valeur de l'iso-surface"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr "Attributs des tranches"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr "Tranches parallèles à l'axe :"
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "NO"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "NE"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "SE"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "SO"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Niveau"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr "Liste des tranches"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr "Niveau {level}"
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr "Tranche parallèle à {axis}"
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr "Tranches parallèles à"
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr "Barre d'échelle %d"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Aucun"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Carte vectorielle en 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Carte vectorielle en 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d entités (%(points)d points)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "sur la surface"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "plage :"
 
 # Easting et Northing sont ici traduits resp. Abscisse et Ordonnée, désignant plutôt des valeurs numériques que des directions cardinales.
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Limite nord :"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Limite sud :"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Limite ouest :"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Limite est :"
 
 # Easting et Northing sont ici traduits resp. Abscisse et Ordonnée, désignant plutôt des valeurs numériques que des directions cardinales.
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr "Ordonnée (Y) :"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Hauteur (Z) :"
 
 # Easting et Northing sont ici traduits resp. Abscisse et Ordonnée, désignant plutôt des valeurs numériques que des directions cardinales.
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr "Abscisse (X) :"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr "Limite basse :"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr "Limite haute :"
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr "Ajuster la distance et la direction au point de vue"
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
@@ -18306,82 +18924,82 @@ msgstr ""
 "Ajuster la direction de la lumière. Cliquez et déplacez le point pour "
 "changer l'origine de la lumière."
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "carte raster 3d <%s> non trouvée"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 msgid "3D view default settings"
 msgstr "Paramètres par défaut de vue 3D"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 "Revenir aux paramètres par défaut, les changements ne seront pas appliqués"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "valeur :"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "pas :"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Position :"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x :"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Basculer :"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr "Survol"
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr "Exagération du déplacement"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr "Exagération des virages"
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Lumière"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z : "
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr "couleur du fil :"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marqueur :"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Paramètres de vue 3D enregistrés dans le fichier <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 msgid "No data set."
 msgstr "Pas de données définies."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18397,7 +19015,7 @@ msgstr ""
 "Vous pouvez diminuer le nombre de cellules de la région avec la commande <g."
 "region>."
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18417,7 +19035,7 @@ msgstr ""
 "Voulez-vous continuer à utiliser l'outil interactif de nuages de points avec "
 "cette région ?"
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
@@ -18425,16 +19043,16 @@ msgstr ""
 "Un nuage de points avec la même combinaison de bandes (indépendament de "
 "l'ordre x y) est déjà affiché."
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr "La bande <%s> n'est pas de type CELL (entier).\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 msgid "Scatter plot cannot be added.\n"
 msgstr "Le nuage de point ne peut pas être ajouté.\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18445,7 +19063,7 @@ msgstr ""
 "La multiplication des plages de bandes <%s:%d * %s:%d = %d> est supérieure à "
 "la limite maximale <%d>.\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18462,7 +19080,7 @@ msgstr ""
 "\n"
 "Voulez-vous vraiment ajouter ce nuage de poitns ?"
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
@@ -18473,7 +19091,7 @@ msgstr ""
 "\n"
 "Il n'y a pas encore de classe, voulez-vous en créer une ?"
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
@@ -18482,17 +19100,17 @@ msgstr ""
 "Une erreur est survenue lors du calcul de la catégorie du nuage de points :\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr "Export du nuage de points des classes de raster <%s>"
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr "Nuage de points de la classe <%s> exporté vers la carte raster <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18505,61 +19123,61 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "Échec du chargement de la librairie ctypes"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Barre d'outils interactive de nuages de points"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "nuage de points"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr "La limite maximale du nombre de catégories a été atteinte."
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr "Renommer une classe"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 msgid "Set color"
 msgstr "Définir une couleur"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr "Cacher"
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "Afficher"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr "Déplacer en haut"
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr "Déplacer en bas"
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 msgid "Move category up"
 msgstr "Faire monter la catégorie"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr "Faire descendre la catégorie"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 msgid "Export class raster"
 msgstr "Exporter la class raster"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Modifier l'opacité de la classe <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr "Un nom vide a été inséré."
 
@@ -18572,40 +19190,40 @@ msgstr ""
 "L'outil temporel nécessite que le paquet \"matplotlib\" (python-matplotlib) "
 "soit installé."
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr "Zoomer sur l'étendue du nuage de points"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 msgid "Add scatter plots"
 msgstr "Ajouter des nuages de points"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr "axe x :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr "axe y :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 #, fuzzy
 msgid "Bands of scatter plots to be added (x y):"
 msgstr "Bandes à ajouter au nuage de points (x y) :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 msgid "No scatter plots selected."
 msgstr "Pas de nuage de points sélectionné."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr "Sélectionner les bandes x et y."
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr "Les bandes sélectionnées doivent être différentes."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
@@ -18613,59 +19231,59 @@ msgstr ""
 "Un nuage de points avec la même combinaison de bandes (indépendament de "
 "l'ordre x y) a déjà été ajouté à la liste."
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "La carte raster <%s> existe déjà. Voulez-vous l'écraser ?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr "Le raster <%s> existe"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 #, fuzzy
 msgid "Show confidence ellipses"
 msgstr "Afficher les ellipses de confiance"
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 msgid "Selection polygon color:"
 msgstr "Couleur de polygone :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr "Couleur des sommets du polygone de sélection :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 msgid "Selected area color:"
 msgstr "Couleur de la surface :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 msgid "Selected area opacity:"
 msgstr "Opacité des surfaces sélectionnées :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 msgid "Selection style:"
 msgstr "Style de la sélection :"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 msgid "Ellipses settings:"
 msgstr "Paramètres des ellipses :"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr "Sélectionner la catégorie à modifier."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr "Le calcul du nuage de points a échoué."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
@@ -18674,7 +19292,7 @@ msgstr ""
 "v.build a échoué :\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
@@ -18683,23 +19301,23 @@ msgstr ""
 "v.to.rast a échoué :\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 msgid "Add scatter plot"
 msgstr "Ajouter un nuage de points"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr "Sélectionner une zone par un polygone"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr "Mode déplacer"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr "Mode zoom pour les nuages de points (bouton de souris gauche, molette)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
@@ -18707,64 +19325,64 @@ msgstr ""
 "Mode de zoom sur l'emprise des données du nuage de points (cliquer sur le "
 "nuage de points pour zoomer sur l'emprise)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr "Afficher/cacher le gestionnaire de classes"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr "Inclure la zone sélectionnée à la classe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr "Exclure la zone sélectionnée de la classe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Ajouter un nouveau sommet"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr "Ajouter un nouveau sommet au polygone de contours du nuage de points"
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 msgid "Create selection polygon"
 msgstr "Créer un polygone de sélection"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 "Ajouter un nouveau sommet entre le dernier et le premier point du contour"
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Déplacer un sommet"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 msgid "Move boundary vertex"
 msgstr "Déplacer un sommet du contour"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Supprimer un sommet"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 msgid "Remove boundary vertex"
 msgstr "Supprimer un sommet du contour"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 "Supprimer le polygone (cliquer sur le nuage de points pour supprimer son "
 "polygone)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 msgid "Add class"
 msgstr "Ajouter une classe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 msgid "Remove selected class"
 msgstr "Supprimer la classe sélectionnée"
 
@@ -18775,6 +19393,42 @@ msgstr "Supprimer la classe sélectionnée"
 #~ "Impossible d'importer matplotlib (essayez de l'inastaller).\n"
 #~ "%s"
 
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "Les unités de la projection courante ne sont pas prises en charge,\n"
+#~ "le mètre sera utilisé !"
+
+#~ msgid "Unsupported units"
+#~ msgstr "Unités non prises en charge"
+
+#~ msgid "Map layers"
+#~ msgstr "Couches"
+
+#~ msgid "Search modules"
+#~ msgstr "Rechercher un module"
+
+#~ msgid ""
+#~ "Failed to query vector map <{map}>. Check database settings and topology."
+#~ msgstr ""
+#~ "Échec de requête de la carte vecteur <{map}>. Vérifiez les paramètres de "
+#~ "la base de données et la topologie."
+
+#, fuzzy
+#~ msgid "GRASS GIS Data Catalog (experimetal)"
+#~ msgstr "SIG GRASS - Catalogue de données (expérimental)"
+
+#, fuzzy
+#~ msgid "Failed to copy map: invalid map type ({} vs. {})."
+#~ msgstr "Échec de copie de la couche : type invalide."
+
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Voulez-vous vraiment supprimer la carte <{m}> ?"
+
+#~ msgid "Encoding"
+#~ msgstr "Encodage"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "La carte <%s> existe déjà."
@@ -18798,14 +19452,24 @@ msgstr "Supprimer la classe sélectionnée"
 #~ msgid "Exit GUI"
 #~ msgstr "Quitter l'interface graphique"
 
-#~ msgid "Creates a topographic index raster map from an elevation raster map."
-#~ msgstr ""
-#~ "Créer une carte d'index topographique à partir d'une carte raster "
-#~ "d'altitudes."
+#~ msgid "Invalid input data"
+#~ msgstr "Données d'entrée non valides"
 
 #, fuzzy
-#~ msgid "Extract subset of raster3D dataset"
-#~ msgstr "Extraire une partie du jeu de données raster3D"
+#~ msgid "No mapsets readable"
+#~ msgstr "Pas de jeux de cartes accessible"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Modification"
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Renommer"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Copie"
 
 #~ msgid "Raster3D calculations"
 #~ msgstr "Calculatrice raster 3D"
@@ -18813,73 +19477,50 @@ msgstr "Supprimer la classe sélectionnée"
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "Statistiques univariées raster3D"
 
-#~ msgid "Add condition"
-#~ msgstr "Ajouter une condition"
-
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Ajouter une condition (if/else) au modèle"
+#~ msgid ""
+#~ "WARNING: Some addons failed when loading. Please consider to update your "
+#~ "addons by running 'g.extension.all -f'.\n"
+#~ msgstr ""
+#~ "ATTENTION : le chargement de certaines extensions à échoué. Merci de "
+#~ "mettre à jour vos extensions en lançant 'g.extension.all -f'.\n"
 
-#~ msgid "Invalid input data"
-#~ msgstr "Données d'entrée non valides"
+#~ msgid "Repository"
+#~ msgstr "Dépôt"
 
-#~ msgid "Hide all toolbars"
-#~ msgstr "Cacher toutes les barres d'outils"
+#~ msgid "Load settings:"
+#~ msgstr "Charger les paramètres :"
 
-#~ msgid "Show all toolbars"
-#~ msgstr "Afficher toutes les barres d'outils"
+#~ msgid "1:"
+#~ msgstr "1:"
 
-#~ msgid "Deleting"
-#~ msgstr "Supprimer"
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Impossible de générer l'aperçu de la carte <%s>."
 
-#, fuzzy
-#~ msgid "Displaying"
-#~ msgstr "Affichage"
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Impossible de générer l'aperçu de la superposition <%s>."
 
-#~ msgid "Reload attribute data (selected layer only)"
-#~ msgstr ""
-#~ "Recharger les données attributaires (couche sélectionnée seulement) "
+#~ msgid "Unpacks a raster map packed with r.pack."
+#~ msgstr "Dépaqueter une carte raster empaquetée avec r.pack."
 
-#~ msgid "Preview is not available probably due to missing Ghostscript."
-#~ msgstr ""
-#~ "L'aperçu n'est pas disponible, probablement parce qu'il manque "
-#~ "Ghostscript."
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Importer une carte vecteur d'une ancienne version de GRASS"
 
-#~ msgid ""
-#~ "Thins non-zero cells that denote linear features in a raster map layer."
+#~ msgid "Historical GRASS vector import (all maps)"
 #~ msgstr ""
-#~ "Réduit les cellules non vides qui définissent une entité linéaire dans "
-#~ "une couche raster."
-
-#~ msgid "Flow computation for massive grids (float version)."
-#~ msgstr "Calcul des flux pour une grille massive (version nombre flottants)."
-
-#~ msgid "Incorrect format of coordinates, should be: x,y"
-#~ msgstr "Format de coordonnées incorrect , devrait être : x,y"
-
-#~ msgid "Datasets have different number ofvalues"
-#~ msgstr "Les jeux de données ont des nombres de valeurs différents"
+#~ "Import de cartes vecteurs ancienne version de GRASS (toutes les cartes)"
 
 #~ msgid ""
-#~ "WARNING: Some addons failed when loading. Please consider to update your "
-#~ "addons by running 'g.extension.all -f'.\n"
-#~ msgstr ""
-#~ "ATTENTION : le chargement de certaines extensions à échoué. Merci de "
-#~ "mettre à jour vos extensions en lançant 'g.extension.all -f'.\n"
-
-#~ msgid "this might not work for multiple bands"
-#~ msgstr "Ceci peut ne pas fonctionner pour des bandes multiples"
-
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
 #~ msgstr ""
-#~ "Ajouter les couches liées dans l'arborescence des couches ({mightNotWork})"
+#~ "Convertir toutes les cartes vectorielles en ancien format GRASS du jeux "
+#~ "de cartes courant vers le nouveau format."
 
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr ""
-#~ "Ajouter les couches importées dans l'arborescence des couches "
-#~ "({mightNotWork})"
+#~ msgid "GPS data import"
+#~ msgstr "Importer des données GPS"
 
-#~ msgid "Unpacks a raster map packed with r.pack."
-#~ msgstr "Dépaqueter une carte raster empaquetée avec r.pack."
+#~ msgid "GEOnet import"
+#~ msgstr "Importer depuis GEOnet"
 
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Dépaqueter une carte vecteur empaquetée avec v.pack."
@@ -18907,31 +19548,6 @@ msgstr "Supprimer la classe sélectionnée"
 #~ msgid "Common export formats using OGR"
 #~ msgstr "Exporter vers des formats communs avec OGR"
 
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr ""
-#~ "Définir la région de calcul à partir de la(des) carte(s) sélectionnée(s) "
-#~ "(ignore les NULLs)"
-
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Importer une carte vecteur d'une ancienne version de GRASS"
-
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr ""
-#~ "Import de cartes vecteurs ancienne version de GRASS (toutes les cartes)"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Convertir toutes les cartes vectorielles en ancien format GRASS du jeux "
-#~ "de cartes courant vers le nouveau format."
-
-#~ msgid "GPS data import"
-#~ msgstr "Importer des données GPS"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Importer depuis GEOnet"
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr ""
 #~ "IDW depuis des points raster (méthode alternative pour points clairsemés)"
@@ -18942,206 +19558,20 @@ msgstr "Supprimer la classe sélectionnée"
 #~ msgid "Bit pattern comparison "
 #~ msgstr "Comparaison bit à bit"
 
-#~ msgid "Data file <%(name)s> imported successfully."
-#~ msgstr "L'import du fichier <%(name)s> a réussit."
-
-#~ msgid "category"
-#~ msgstr "catégorie"
-
-#~ msgid "Select features"
-#~ msgstr "Sélectionner des objets"
-
-#~ msgid "Create a new map"
-#~ msgstr "Créer une nouvelle carte"
-
-#~ msgid ""
-#~ "Selected map <%s> has been disabled for rendering. Operation canceled."
-#~ msgstr ""
-#~ "L'affichage de la carte sélectionnée <%s> a été désactivé. Opération "
-#~ "annulée."
-
-#, fuzzy
-#~ msgid "Failed to query vector map(s) <%s>."
-#~ msgstr "Échec d'interrogation de la carte vecteur <%s>."
-
-#~ msgid "No features selected"
-#~ msgstr "Pas d'objets sélectionnée."
-
-#~ msgid "Vector map <%s> was created"
-#~ msgstr "La carte vecteur <%s> a créée"
-
-#~ msgid ""
-#~ "Unable to create a new vector map.\n"
-#~ "\n"
-#~ "Reason: %s"
-#~ msgstr ""
-#~ "Impossible de créer la nouvelle carte vecteur.\n"
-#~ "\n"
-#~ "Raison: %s"
-
-#~ msgid "1:"
-#~ msgstr "1:"
-
 #~ msgid "Launches graphical attribute table manager."
 #~ msgstr "Lances le gestionnaire graphique de table attributaire"
 
-#~ msgid "Show statusbar"
-#~ msgstr "Afficher la barre de status"
-
-#, fuzzy
-#~ msgid "Select vector feature(s)"
-#~ msgstr "Sélectionner des objets vectoriels"
-
-#, fuzzy
-#~ msgid "Select features interactively from vector map"
-#~ msgstr ""
-#~ "Sélectionner des zones depuis\n"
-#~ "la carte vecteur superposée"
-
-#~ msgid "Raster digitizer"
-#~ msgstr "Numérisation de raster"
-
-#~ msgid "Unable to create file <%s>"
-#~ msgstr "Impossible de créer le fichier <%s>"
-
-#~ msgid "Raster Digitizer Toolbar"
-#~ msgstr "Barre d'outils de numérisation de raster"
-
 #~ msgid "Total number of frames:"
 #~ msgstr "Nombre total d'images:"
 
-#~ msgid "Please select first the raster map"
-#~ msgstr "Merci de commencer par sélectionner la carte raster"
-
-#~ msgid "Do you want to save changes?"
-#~ msgstr "Voulez-vous enregistrer les modifications ?"
-
-#~ msgid "Save raster map changes"
-#~ msgstr "Enregistrer les modifications de la carte raster"
-
-#~ msgid "Failed to create backup copy of edited raster map."
-#~ msgstr ""
-#~ "Échec de création de la copie de sauvegarde de la carte raster en "
-#~ "modification."
-
-#~ msgid "Failed to create new raster map."
-#~ msgstr "Échec de création de la nouvelle carte raster."
-
-#, fuzzy
-#~ msgid "Rasterizing..."
-#~ msgstr "Générer (l'affichage)"
-
-#~ msgid "Failed to set default color table for edited raster map"
-#~ msgstr ""
-#~ "Échec de définition de la table de couleur par défaut pour la carte "
-#~ "raster modifiée"
-
-#~ msgid "Digitize area"
-#~ msgstr "Numériser une surface"
-
-#~ msgid "Digitize line"
-#~ msgstr "Numériser une ligne"
-
-#~ msgid "Digitize point"
-#~ msgstr "Numériser un point"
-
-#~ msgid "Save raster map"
-#~ msgstr "Enregistrer la carte raster"
-
-#~ msgid "Quit raster digitizer"
-#~ msgstr "Quitter l'outil d'édition raster"
-
-#~ msgid "Select raster map"
-#~ msgstr "Sélectionner une carte raster"
-
-#~ msgid "Cell value:"
-#~ msgstr "Valeurs de cellule :"
-
-#~ msgid "New raster map"
-#~ msgstr "Nouvelle carte raster"
-
-#~ msgid "Create new raster map"
-#~ msgstr "Créer un nouvelle carte raster"
-
-#~ msgid "Name for new raster map:"
-#~ msgstr "Nom de la nouvelle carte raster :"
-
-#~ msgid "Optionally select background raster map:"
-#~ msgstr "Sélectionner une carte raster de fond (optionnel) :"
-
-#~ msgid "New raster map type:"
-#~ msgstr "Type de la nouvelle carte raster :"
-
-#~ msgid "Please specify name for a new raster map"
-#~ msgstr "Merci d'indiquer un nom pour la nouvelle carte raster"
-
-#~ msgid ""
-#~ "Raster map <%s> already exists in the current mapset. Do you want to "
-#~ "overwrite it?"
-#~ msgstr ""
-#~ "La carte raster <%s> existe déjà dans le jeu de cartes courant.  Voulez-"
-#~ "vous l'écraser ?"
-
 #, fuzzy
 #~ msgid "Select space time raster dataset(s):"
 #~ msgstr "Choisir le jeu de données temporel :"
 
-#~ msgid "Data catalog"
-#~ msgstr "Catalogue de données"
-
-#~ msgid "GRASS SVN revision"
-#~ msgstr "Version SVN:"
-
-#~ msgid "Build date"
-#~ msgstr "Date de compilation"
-
-#~ msgid "Build platform"
-#~ msgstr "Plateforme de compilation"
-
-#, fuzzy
-#~ msgid "No mapsets readable"
-#~ msgstr "Pas de jeux de cartes accessible"
-
-#~ msgid "New name"
-#~ msgstr "Nouveau nom"
-
-#~ msgid "Rename map"
-#~ msgstr "Renommer la carte"
-
-#, fuzzy
-#~ msgid "Editing"
-#~ msgstr "Modification"
-
-#, fuzzy
-#~ msgid "Renaming"
-#~ msgstr "Renommer"
-
-#~ msgid "Failed to copy layer: invalid type."
-#~ msgstr "Échec de copie de la couche : type invalide."
-
-#~ msgid "Copy map"
-#~ msgstr "Copier la carte"
-
-#, fuzzy
-#~ msgid "Copying"
-#~ msgstr "Copie"
-
-#~ msgid "Do you really want to delete map <{m}>?"
-#~ msgstr "Voulez-vous vraiment supprimer la carte <{m}> ?"
-
-#~ msgid "Delete map"
-#~ msgstr "Supprimer la carte"
-
-#~ msgid "&Copy"
-#~ msgstr "&Copier"
-
-#, fuzzy
-#~ msgid "&Paste"
-#~ msgstr "&Coller"
-
-#, fuzzy
-#~ msgid "&Display layer"
-#~ msgstr "Afficher la carte"
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr ""
+#~ "Définir la région de calcul à partir de la(des) carte(s) sélectionnée(s) "
+#~ "(ignore les NULLs)"
 
 #~ msgid ""
 #~ "Do you want to import <%(name)s> to the newly created location? The "
@@ -19150,114 +19580,33 @@ msgstr "Supprimer la classe sélectionnée"
 #~ "Voulez-vous importer <%(name)s> dans le nouveau secteur ? La région par "
 #~ "défaut sera alignée sur la carte importée."
 
-#~ msgid "Row lenght of sampling frame"
-#~ msgstr "Nombre de lignes du cadre d'échantillonage"
-
-#~ msgid "Hide statusbar"
-#~ msgstr "Cacher la barre de status"
-
-#~ msgid "Right click to finish area"
-#~ msgstr "Clic droit pour terminer la surface"
-
-#~ msgid "Right click to finish line"
-#~ msgstr "Clic droit pour terminer la ligne"
-
-#~ msgid "Set drawing color (not raster cell color)"
-#~ msgstr ""
-#~ "Définir la couleur de dessin (pas la couleur des cellules du raster)"
-
-#~ msgid "Layer was not copied: new layer has the same name"
-#~ msgstr "Couche non copiée : la nouvelle couche a le même nom"
-
-#~ msgid ""
-#~ "Failed to copy layer: action is allowed only within the same location."
-#~ msgstr ""
-#~ "Échec de copie de la couche : cette action est autorisée uniquement dans "
-#~ "le même secteur."
-
-#~ msgid "Failed to display layer: not in current mapset or invalid layer"
-#~ msgstr ""
-#~ "Échec d'affichage de la couche : pas dans le jeu de données courant ou "
-#~ "couche invalide"
-
-#~ msgid "Hide toolbars"
-#~ msgstr "Cacher les barres d'outils"
-
-#~ msgid "Show toolbars"
-#~ msgstr "Afficher les barres d'outils"
-
-#~ msgid "Failed to read mapsets from location {l}."
-#~ msgstr "Impossible de lire les jeux de cartes du secteur {l}."
-
-#~ msgid "Failed to read maps from location {l}."
-#~ msgstr "Impossible de lire les cartes du secteur {l}."
-
-#~ msgid ""
-#~ "Layer {layer} copied to clipboard.You can paste it to selected mapset."
-#~ msgstr ""
-#~ "Couche {layer} copiée dans le presse-papier; Vous pouvez la coller dans "
-#~ "le jeux de cartes sélectionné."
-
-#~ msgid "Editing {name}"
-#~ msgstr "Édition de {name}"
-
-#~ msgid "Renaming {name}..."
-#~ msgstr "Renommage de {name} ..."
-
-#~ msgid "Copying {name}..."
-#~ msgstr "Copie de {name} ..."
-
-#~ msgid "Deleting {name}..."
-#~ msgstr "Suppression de {name} ..."
-
-#~ msgid "Displaying {name}..."
-#~ msgstr "Affichage de {name} ..."
+#~ msgid "Data file <%(name)s> imported successfully."
+#~ msgstr "L'import du fichier <%(name)s> a réussit."
 
-#, fuzzy
-#~ msgid "GRASS GIS Data Catalog (experimetal)"
-#~ msgstr "SIG GRASS - Catalogue de données (expérimental)"
+#~ msgid "Add default servers"
+#~ msgstr "Ajouter les serveurs par défaut"
 
-#, fuzzy
-#~ msgid "Close GRASS GIS Data Catalog"
-#~ msgstr "Fermer le catalogue de données du SIG GRASS"
+#~ msgid "this might not work for multiple bands"
+#~ msgstr "Ceci peut ne pas fonctionner pour des bandes multiples"
 
-#~ msgid ""
-#~ "Width of currently digitized line or diameter of a digitized point in map "
-#~ "units."
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
 #~ msgstr ""
-#~ "Largeur de la ligne en cours de numérisation ou diamètre d'un point en "
-#~ "unités de carte."
-
-#~ msgid "Load:"
-#~ msgstr "Charger :"
+#~ "Ajouter les couches liées dans l'arborescence des couches ({mightNotWork})"
 
-#~ msgid "No vector map selected in layer manager. Operation canceled."
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
 #~ msgstr ""
-#~ "Pas de carte vecteur sélectionnée dans le gestionnaire de couches. "
-#~ "Opération annulée."
+#~ "Ajouter les couches importées dans l'arborescence des couches "
+#~ "({mightNotWork})"
 
-#~ msgid "Input vector map is not selected"
-#~ msgstr "La couche vecteur en entrée n'est pas sélectionnée"
+#~ msgid "Digitize"
+#~ msgstr "Numériser"
 
-#~ msgid ""
-#~ "Input vector map <%s> and selected map <%s> in layer manager are "
-#~ "different. Operation canceled."
-#~ msgstr ""
-#~ "La carte vecteur <%s> en entrée et la carte <%s> sélectionnée dans le "
-#~ "gestionnaire de couches sont différentes . Opération annulée."
+#~ msgid "GRASS SVN Revision"
+#~ msgstr "Version SVN :"
 
 #, fuzzy
-#~ msgid "Add default"
-#~ msgstr "défaut"
-
-#~ msgid "Repository (leave empty to use the official one)"
-#~ msgstr "Dépôt (laisser vide pour utiliser l'officiel)"
-
-#~ msgid "%d extensions loaded"
-#~ msgstr "%d extentions chargées"
+#~ msgid "Build Platform"
+#~ msgstr "Plateforme"
 
-#~ msgid "Rendering failed: %s"
-#~ msgstr "Le rendu a échoué : %s"
-
-#~ msgid "Rendering aborted"
-#~ msgstr "Annulation du rendu"
+#~ msgid "Row lenght of sampling frame"
+#~ msgstr "Nombre de lignes du cadre d'échantillonage"
diff --git a/locale/po/grasswxpy_id.po b/locale/po/grasswxpy_id.po
index e9ebe35..04ad9ec 100644
--- a/locale/po/grasswxpy_id.po
+++ b/locale/po/grasswxpy_id.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_id\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2009-04-10 21:13+0700\n"
 "Last-Translator: Firman Hadi <jalmiburung at gmail.com>\n"
 "Language-Team: deutsch <grass-translations at lists.osgeo.org>\n"
@@ -20,53 +20,53 @@ msgstr ""
 "X-Poedit-Language: Indonesian\n"
 "X-Poedit-Country: INDONESIA\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Pilih tipe peta dan location/mapset"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "Pilih location dan mapset proyek"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Masuk ke sesi GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "Jelajah "
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -74,159 +74,159 @@ msgstr ""
 "dalam location terpilih"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Ubah nama location terpilih"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Hapus "
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Hapus location terpilih"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Ubah nama"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Ubah nama mapset terpilih"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Hapus "
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Hapus mapset terpilih"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS Attribute Table Manager"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Masuk ke sesi GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Kesalahan "
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "ERROR: Location <%s> tidak ada"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Kesalahan "
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "Apakah Anda hendak membuat GRASS location <%s>?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Buat mapset baru"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Location <%s> telah dibuat"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "Apakah Anda hendak menset batas dan resolusi dari region standar sekarang?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "Penambahan fitur baru untuk peta vektor <%s> gagal."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, fuzzy, python-format
 msgid ""
 "Current name: %s\n"
@@ -236,12 +236,12 @@ msgstr ""
 "Nama saat ini: %s\n"
 "Masukkan nama baru:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Pesan"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -251,7 +251,7 @@ msgstr ""
 "Tidak dapat membuat sebuah tabel baru. Nama tabel atau nama kolom kunci "
 "tidak dapat ditemukan "
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -259,7 +259,7 @@ msgid ""
 "%s"
 msgstr "Tidak dapat merubah nama mapset"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -269,7 +269,7 @@ msgstr ""
 "Tidak dapat membuat sebuah tabel baru. Nama tabel atau nama kolom kunci "
 "tidak dapat ditemukan "
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -277,14 +277,14 @@ msgid ""
 "%s"
 msgstr "Tidak dapat merubah nama location"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -297,11 +297,11 @@ msgstr ""
 "\n"
 "SEMUA PETA termasuk yang ada di dalam mapset akan DIHAPUS SECARA PERMANEN!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Tidak dapat menghapus mapset"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -313,41 +313,41 @@ msgstr ""
 "SEMUA PETA termasuk yang ada di dalam location ini akan DIHAPUS SECARA "
 "PERMANEN!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Tidak dapat menghapus location"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "Pilih Direktori Data SIG:"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Masukkan nama untuk mapset baru:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -356,17 +356,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Ubah nama mapset terpilih"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Tidak mampu membuat mapset baru: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -378,12 +378,12 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 #, fuzzy
 msgid "Lock file found"
 msgstr "berkas tidak ditemukan"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -391,7 +391,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -399,19 +399,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "Tidak dapat melakukan perbesar peta vektor <%s>."
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "Region tidak valid"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -436,190 +436,190 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Toolbar Georektifikasi"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Pengaturan digitasi"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Cetak tampilan"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Hapus tampilan"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Tampilan region"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Tampilan region"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 #, fuzzy
 msgid "Import vector map"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Analisis LIDAR"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Paling tidak dibutuhkan %d GCP. Operasi dibatalkan."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histogram"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -628,666 +628,667 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Buat/edit grup ..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Klasifikasi citra"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Klasifikasi citra"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Warna"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Perbesaran sesuai peta terpilih "
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Masukkan nama untuk mapset baru:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Simpan berkas sebagai ..."
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Perlihatkan tabel atribut"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Impor tabel atribut dalam beragam format."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Ubah tingkat opasitas"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Hapus layer terpilih"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "Tambahkan layer RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Peringatan"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 #, fuzzy
 msgid "Preview"
 msgstr "Tampilan cetak"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Perbesaran sesuai peta terpilih "
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS Map Display: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, fuzzy, python-format
 msgid "Map <%s> not found."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 #, fuzzy
 msgid "No raster or vector map layer selected for querying."
 msgstr "Tidak ada peta vektor terpilih untuk kueri."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Buat location baru?"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Sederhana"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 #, fuzzy
 msgid "Close"
 msgstr "Kode"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Nomor kategori (kolom %s) tidak ada."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Warna: "
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Indeks bentuk "
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "Lebar garis"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 #, fuzzy
 msgid "Size:"
 msgstr "Ukuran"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 #, fuzzy
 msgid "Query raster/vector map(s)"
 msgstr "Kueri peta vektor/raster terpilih"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Kueri peta vektor/raster terpilih"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Garis"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Pilih Kode EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Ground Control Points"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "Daftar "
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "Hapus tampilan"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Hapus tampilan"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "Tampilkan peta"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 #, fuzzy
 msgid "GCP Manager toolbar"
 msgstr "Kelola warna"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Pengaturan halaman"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Tampilan cetak"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Cetak tampilan"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Perbesaran ke computational region (g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Perbesaran sesuai dengan region standar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Perbesaran sesuai dengan region tersimpan"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Simpan geometri tampilan ke region tertentu"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "Kesalahan RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Pengaturan untuk georektifikasi"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Pengaturan georektifikasi dibatalkan."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Pilih tipe peta dan location/mapset"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Tipe peta untuk georektifikasi"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vektor "
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Pilih sumber location:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Pilih sumber mapset:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 "Anda harus memilih sebuah location yang valid sebelum memilih mapset tertentu"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 "Anda harus memilih sebuah location dan mapset yang valid untuk melanjutkan"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Pilih grup image/map untuk georektifikasi"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Buat grup jika tidak ada"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 #, fuzzy
 msgid "Add vector map to group..."
 msgstr "Tambahkan layer peta vektor"
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Ekstensi untuk peta output:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 "Anda harus memilih sebuah grup image/map yang valid untuk dapat melanjutkan"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Anda harus memasukkan nama ekstensi peta untuk dapat melanjutkan"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 #, fuzzy
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 "Pilih image/peta untuk ditampilkan dalam pembuatan ground control point (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "Pilih sumber mapset:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Pilih peta raster untuk dibuat profil"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Pilih peta raster untuk dibuat profil"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 #, fuzzy
 msgid "You must select a source map in order to continue"
 msgstr "Anda harus memilih image/peta yang valid untuk dapat melanjutkan"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 #, fuzzy
 msgid "Manage Ground Control Points"
 msgstr "Ground Control Points"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Paling tidak dibutuhkan %d GCP. Operasi dibatalkan."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 #, fuzzy
 msgid "source"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "Konversi koordinat "
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1296,28 +1297,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Penulisan berkas POINTS gagal"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, fuzzy, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Berkas POINTS berhasil disimpan"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Pembacaan berkas POINTS gagal"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1332,285 +1333,285 @@ msgstr ""
 "6+ titik diperlukan untuk Orde 2, dan\n"
 "10+ titik diperlukan untuk Orde 3."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 #, fuzzy
 msgid "Rectifying images, please wait..."
 msgstr "Rektifikasi citra atau raster"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformasi citra"
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rektifikasi citra atau raster"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, fuzzy, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Penambahan fitur baru untuk peta vektor <%s> gagal."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "Pengaturan Layer Maager"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "Pengaturan GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "Grup target"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "Grup target"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Forward error"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Backward error"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 #, fuzzy
 msgid "Create vector map group"
 msgstr "Buat peta vektor baru"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 #, fuzzy
 msgid "Select vector map(s) to add to group:"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Edit GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 #, fuzzy
 msgid "Ground Control Point No."
 msgstr "Ground Control Point"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Terapkan perubahan untuk sesi saat ini"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Terapkan dan simpan perubahan ke berkas pengaturan milik pengguna (standar "
 "untuk sesi berikutnya)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 #, fuzzy
 msgid "Close dialog"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Simbolisasi"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Pengaturan simbol"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "Bersihkan GCP terpilih"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "Aturan warna "
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "Garis aliran "
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "Pengaturan simbol"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "Toolbar Georektifikasi"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Pilih metoda rektifikasi untuk raster "
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "Orde 1 "
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "Orde 2 "
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "Orde 3 "
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 #, fuzzy
 msgid "clip to computational region in target location"
 msgstr "Perbesaran ke computational region (g.region)"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Pengaturan profil disimpan ke dalam berkas '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, fuzzy, python-format
 msgid "New vector map <%s> created"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1618,372 +1619,372 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Perbaharui kategori"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Tidak ada peta vektor yang dipilih untuk diubah."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Dialog pelabelan Z"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Pengaturan digitasi"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Terapkan perubahan untuk sesi ini"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 "Tutup dialog dan simpan perubahan ke dalam berkas pengaturan milik pengguna"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Tutup dialog dan abaikan perubahan"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Umum"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Tampilan"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Lebar garis"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Snapping"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Batas snapping"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Snap juga ke vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Batasan snapping adalah %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Pilih fitur vektor"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Pilih batas"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Periksa untuk duplikasi"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Digitasi batas baru "
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 #, fuzzy
 msgid "Break lines at intersection"
 msgstr "Potong garis pada interseksi"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Digitasi garis baru "
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Simpan perubahan saat keluar"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Alat kueri"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Pilih tool kueri"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Pilih dengan kotak"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "panjang"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "lebih pendek dari"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "lebih jauh dari"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "dangle"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Pilih dangle"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atribut"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Digitasi fitur baru"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Tambahkan rekap baru ke dalam tabel"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Layer"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Kategori"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Mode"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Selanjutnya yang akan digunakan"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Nomor kategori"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Mode kategori"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Input manual"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Tidak ada kategori"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Hapus fitur yang ada"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Hapus rekap dari tabel"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "Kueri dengan atribut"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "Parameter"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "Digitasi garis baru "
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "Digitasi batas baru "
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Menyorot"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Menyorot (duplikat)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Titik "
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Garis"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Batas (bukan area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Batas (satu area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Batas (dua area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centroid (dalam area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroid (di luar area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroid (duplikasi dalam area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Simpul (satu garis)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Simpul (dua garis)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Area (batas tertutup + centroid)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Arah"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 #, fuzzy
 msgid "Snapping disabled"
 msgstr "Batas snapping"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, fuzzy, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr "Batasan snapping adalah %(value).1f%(units)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Pengaturan digitasi vektor disimpan ke dalam berkas <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "Pengaturan digitasi"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Tidak ada peta vektor yang dipilih untuk diubah."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1991,83 +1992,83 @@ msgid ""
 "Reason: %s"
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Paling tidak dibutuhkan %d GCP. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Buat titik sepanjang garis"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 #, fuzzy
 msgid "List of categories - right-click to delete"
 msgstr "Tabel %s - klik-kanan untuk menghapus rekaman"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Tambahkan kategori baru"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 #, fuzzy
 msgid "Apply changes"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 #, fuzzy
 msgid "Apply changes and close dialog"
 msgstr "Terapkan perubahan untuk sesi ini"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 #, fuzzy
 msgid "Feature id:"
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2078,264 +2079,264 @@ msgstr ""
 "Layer dan kategori harus integer.\n"
 "Nomor layer harus lebih besar dari nol."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Hapus yang terpilih"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Hapus semua"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Muat-ulang"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Tidak berhasil memperbaharui peta vektor."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d garis dipilih untuk pelabelan z"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Tetapkan nilai"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Nilai awal"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Tahapan"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Daftar duplikasi"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Layer (Kategori)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Digitasi titik baru "
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Klik kiri: titik baru"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Digitasi garis baru "
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Klik kiri: titik baru; Klik tengah: gagalkan titik terakhir; Klik kanan: "
 "tutup garis"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Digitasi batas baru "
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Digitasi centroid baru "
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Digitasi batas baru "
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Bangun polyline dari garis atau batas."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Klik kiri: Pilih; Klik tengah: Tidak jadi pilih; Klik kanan: Tetapkan"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Tarik garis/batas terpilih (hanya ke simpul)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Hapus rekap terpilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Tampilkan/ubah atribut"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Klik kiri: Pilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Tampilkan/ubah kategori"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Balikkan garis/batas terpilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Tarik garis/batas terpilih (hanya ke simpul)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Pindahkan vertex "
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Ubah nama mapset terpilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Perkakas tambahan (salin, putar, hubungkan, dsb.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Gagalkan"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Gagalkan perubahan sebelumnya"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Gagalkan perubahan sebelumnya"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Potong garis/batas terpilih pada interseksi"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Hubungkan garis/batas terpilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Salin kategori "
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Salin fitur dari peta vektor (background)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Tampilkan atribut"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Konversi tipe fitur"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Balikkan garis/batas terpilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Gabungkan garis/batas terpilih"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Tarik garis/batas terpilih (hanya ke simpul)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Pecah garis/batas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 #, fuzzy
 msgid "Query features"
 msgstr "Fitur terdekat"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Pelabelan Z dari garis 3D"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 #, fuzzy
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2344,65 +2345,66 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Pengaturan digitasi"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, fuzzy, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Tidak ada peta vektor yang dipilih untuk diubah."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Simpan perubahan?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, fuzzy, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "Tool untuk membersihkan topologi peta vektor."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Pengukuran jarak"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2411,194 +2413,213 @@ msgstr ""
 "Klik dan geser dengan tombol kiri tetikus untuk mengukur.%sKlik ganda dengan "
 "tombol kiri untuk membersihkan."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Pengukuran jarak"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Pengukuran jarak:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "Legenda"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "Pengukuran jarak"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Peringatan"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Pengukuran jarak:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Tambahkan skala garis dan arah utara"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Tampilkan peta"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' berhasil disalin ke clipboard"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Perlihatkan pengaturan "
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Tambahkan overlay label grid atau vektor"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Seri raster"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Tampilan ke batas region tersimpan"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Paling tidak dibutuhkan %d GCP. Operasi dibatalkan."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 #, fuzzy
 msgid "Save display extents to region file"
 msgstr "Simpan geometri tampilan ke region tertentu"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Peringatan"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "Tampilkan batas luar komputasi"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Tes"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "Tema ikon:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Tentukan jenis huruf"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2606,608 +2627,968 @@ msgstr ""
 "Tarik teks dengan tetikus dalam mode pointer ke dalam posisi.\n"
 "Klik-ganda untuk merubah pilihan"
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "Bantuan GRASS GIS GUI"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-#, fuzzy
-msgid "Model"
-msgstr "Mode"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Variables"
-msgstr "Volume"
+msgid "GRASS locations in {}"
+msgstr "Pilih location dan mapset proyek"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Output perintah"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Ubah nama "
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-#, fuzzy
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-#, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:652
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr ""
-"Workspace tidak kosong. Apakah Anda hendak menyimpan pengaturan saat ini ke "
-"berkas workspace?"
+msgid "No map selected for copying."
+msgstr "Tidak ada peta vektor yang dipilih untuk diubah."
 
-#: ../gui/wxpython/gmodeler/frame.py:264
+#: ../gui/wxpython/datacatalog/tree.py:659
 #, fuzzy
-msgid "Quit Graphical Modeler"
-msgstr "Bantuan GRASS GIS GUI"
+msgid "Copy map"
+msgstr "Salin tabel"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Hapus yang tersaring"
+msgid "Failed to copy map: new map has the same name"
+msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-#, fuzzy
-msgid "Delete intermediate data?"
-msgstr "Hapus yang tersaring"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Tampilan"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
 #, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "Perbesaran ke computational region (g.region)"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"Workspace tidak kosong. Apakah Anda hendak menyimpan pengaturan saat ini ke "
-"berkas workspace?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "Buat mapset baru"
+msgid "Delete map"
+msgstr "Hapus mapset"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Hapus "
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "Pilih berkas kode EPSG"
+msgid "g.remove completed"
+msgstr "Periksa untuk duplikasi"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Tampilan"
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "Berkas Workspace <%s> sudah ada. Anda ingin menimpanya?"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "Tampilkan batas luar komputasi"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/tree.py:835
 #, fuzzy
-msgid "Save model"
-msgstr "Mode kategori"
+msgid "Maps can be copied only to current mapset"
+msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, fuzzy, python-format
-msgid "File <%s> saved"
-msgstr "Berkas POINTS <%s> berhasil disimpan"
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Salin "
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "Pilih berkas untuk menyimpan workspace saat ini"
+msgid "&Paste"
+msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Tampilkan peta"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/datacatalog/tree.py:954
 #, fuzzy
-msgid "Validating model..."
-msgstr "Rentang yang valid"
+msgid "&Switch mapset"
+msgstr "Buat mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr ""
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "Kalkulator Peta GRASS %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr ""
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Kalkulator Peta GRASS %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
-msgid "Model exported to <%s>"
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, fuzzy, python-format
+msgid "Current mapset is <%s>."
+msgstr "Ubah mapset saat ini."
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "Perintah"
+msgid "Data catalog"
+msgstr "Potongan melintang"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "Tambahkan layer perintah"
+msgid "Reload GRASS locations"
+msgstr "Definisikan GRASS Location baru"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, fuzzy, python-format
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Klik di sini untuk menyembunyikan pengaturan 3D"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
 msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
 msgstr ""
-"Gagal dalam pembacaan berkas workspace <%s>. Berkas tidak valid, tidak mampu "
-"membaca dokumen XML."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Tool untuk membersihkan topologi peta vektor."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Simpan perubahan"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Tidak mampu membuat profil dari peta raster."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Render"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Buat tabel warna baru menggunakan color rules"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Buat peta vektor baru"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Peta raster hasil kode-ulang:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Pilih peta vektor"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Peta raster hasil kode-ulang:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Menghitung indeks bentuk pada sebuah peta raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitasi garis baru "
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Digitasi garis baru "
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Digitasi titik baru "
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Gabungkan peta raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Toolbar digitasi vektor"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Peta raster hasil kode-ulang:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Nilai sel"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Lebar:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "Peta raster:"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "Bantuan GRASS GIS GUI"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "Mode"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "Volume"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Output perintah"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+#, fuzzy
+msgid "Redrawing model..."
+msgstr "Rentang yang valid"
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr ""
+"Workspace tidak kosong. Apakah Anda hendak menyimpan pengaturan saat ini ke "
+"berkas workspace?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+#, fuzzy
+msgid "Quit Graphical Modeler"
+msgstr "Bantuan GRASS GIS GUI"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Hapus yang tersaring"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "Hapus yang tersaring"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"Workspace tidak kosong. Apakah Anda hendak menyimpan pengaturan saat ini ke "
+"berkas workspace?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "Buat mapset baru"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "Pilih berkas kode EPSG"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "Berkas Workspace <%s> sudah ada. Anda ingin menimpanya?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "Mode kategori"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, fuzzy, python-format
+msgid "File <%s> saved"
+msgstr "Berkas POINTS <%s> berhasil disimpan"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "Pilih berkas untuk menyimpan workspace saat ini"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+#, fuzzy
+msgid "Validating model..."
+msgstr "Rentang yang valid"
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Perintah"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Tambahkan layer perintah"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, fuzzy, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+"Gagal dalam pembacaan berkas workspace <%s>. Berkas tidak valid, tidak mampu "
+"membaca dokumen XML."
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
 #, fuzzy
 msgid "Please wait, loading model..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 #, fuzzy
 msgid "Writing current settings to model file failed."
 msgstr "Penulisan pengaturan saat ini ke berkas workspace gagal (%s)."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Tidak mampu membuka berkas <%s> untuk dibaca."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Hapus"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "Daftar tabel"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "Tabel"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Tambahkan label"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Tentukan jenis huruf"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "Ground Control Point"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "Hilangkan outlier dalam titik"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Layer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 #, fuzzy
 msgid "List of variables - right-click to delete"
 msgstr "Tabel %s - klik-kanan untuk menghapus rekaman"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 #, fuzzy
 msgid "Name"
 msgstr "Ubah nama "
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Tipe data"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "Tetapkan nilai"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Deskripsi"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "Tambahkan sebuah vertex baru"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Pointer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 #, fuzzy
 msgid "string"
 msgstr "Tiling "
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Region "
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "Profil"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 #, fuzzy
 msgid "List of items - right-click to delete"
 msgstr "Tabel %s - klik-kanan untuk menghapus rekaman"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "Layer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parameter"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Perintah"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "Deskripsi layer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Jalankan"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "Deskripsi layer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Berkas Workspace <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "Simpan berkas sebagai ..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "Daftar tabel"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "Nilai tidak valid: %s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "Indeks bentuk "
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Lebar:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 #, fuzzy
 msgid "Height:"
 msgstr "Berat:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "Basisdata"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tipe"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "Vektor"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabel"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Perintah"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadata"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "Perintah"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Ijinkan berkas output untuk menimpa berkas yang ada"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 #, fuzzy
 msgid "Name:"
 msgstr "Ubah nama "
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "Deskripsi"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 #, fuzzy
 msgid "model"
 msgstr "Mode"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 #, fuzzy
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Hasilkan informasi dasar tentang sebuah layer peta raster."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Tambahkan sebuah vertex baru"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3215,102 +3596,102 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "tidak diketahui"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "Opsional"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "Parameter medan"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Hapus yang tersaring"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 #, fuzzy
 msgid "Name of element:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3318,262 +3699,262 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Ke"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "Deil:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Perintah"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Opsional"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "Opsional"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "Daftar kategori"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, fuzzy, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 "Tidak dapat membuat sebuah tabel baru. Nama tabel atau nama kolom kunci "
 "tidak dapat ditemukan "
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "Hapus semua"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 #, fuzzy
 msgid "No"
 msgstr "N:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "Tidak mampu membuka berkas <%s> untuk dibaca."
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Bantuan GRASS GIS GUI"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "Tampilan cetak"
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3581,1324 +3962,1315 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Tampilan cetak"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "Simpan berkas sebagai ..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Masukkan parameter untuk"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Tambahkan label"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "Titik "
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "Render"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "Parameter"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "Parameter"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "Parameter"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "Barat"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Berkas"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "Render"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 #, fuzzy
 msgid "degree"
 msgstr "Vertex"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Tidak berhasil memperbaharui peta vektor."
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 #, fuzzy
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 #, fuzzy
 msgid "Y:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Konversi koordinat "
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "Tema ikon:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 #, fuzzy
 msgid "Close dialog and apply changes"
 msgstr "Tutup dialog dan abaikan perubahan"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Lebar:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 #, fuzzy
 msgid "Height"
 msgstr "Berat:"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Penyorotan"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Atas"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Bawah"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "Region tidak valid"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Pengaturan halaman"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Titik "
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Analisis lansekap"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 #, fuzzy
 msgid "custom"
 msgstr "Bebas min."
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "Pengaturan raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "Skala peta"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "Pengaturan proyeksi"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "Perbesaran sesuai peta terpilih "
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "Perbesaran sesuai dengan region tersimpan"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 #, fuzzy
 msgid "fit frame to match current computational region"
 msgstr "Perbesaran ke computational region (g.region)"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "Pengaturan proyeksi"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Region "
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "Skala peta"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 #, fuzzy
 msgid "Center:"
 msgstr "Render"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 #, fuzzy
 msgid "E:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 #, fuzzy
 msgid "N:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Gaya:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "Orde 1 "
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 #, fuzzy
 msgid "border width (pts):"
 msgstr "Lebar garis (dalam piksel)"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Potongan melintang"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 #, fuzzy
 msgid "Raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "Tambahkan grup layer"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "Titik "
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "Garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Tipe data"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Bersihkan peta vektor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Hapus "
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Pengaturan raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Potongan melintang"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "Tambahkan centroid"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "Edit garis/batas "
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Potongan melintang"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Koneksi basisdata tidak didefinisikan dalam berkas DB"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Mask"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Tutup workspace saat ini"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Warna"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "Garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Lebar:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Berkas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Aturan warna "
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "Simbolisasi"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "Berkas WKT:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Jelajah "
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Ukuran"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "Ukuran"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Hapus semua kolom"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Skala-ulang "
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Hapus semua kolom"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Lebar garis (dalam piksel)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Mengubah nilai kategori secara interaktif "
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Lebar garis (dalam piksel)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "Seri raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "Tampilkan legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "Nama kolom"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "Vektor ke raster "
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "Tampilkan legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "Pengaturan lebih lanjut"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "Garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "Tumpang-susun peta vektor"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 #, fuzzy
 msgid "Vector map"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "Tambahkan label"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 #, fuzzy
 msgid "Position"
 msgstr "Deskripsi"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "Volume"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "Tambah kolom"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Jenis huruf"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "Background peta vektor"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "panjang"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr "&Tentukan standar"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Gaya"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "Tipe"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "Tes"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Masukkan teks:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "Menyorot"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "Orde 1 "
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Klik kiri: titik baru"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "Citra"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "Skala dan arah Utara"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "Skala dan arah Utara"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "Perlihatkan pengaturan "
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "Simbolisasi"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Pilih dengan kotak"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 #, fuzzy
 msgid "transparent"
 msgstr "Transparans"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "Skala dan arah Utara"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "Ukuran"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Pengaturan simbol"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "Ubah pengaturan "
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "Ubah pengaturan "
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "Lebar garis (dalam piksel)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "label vektor"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 #, fuzzy
 msgid "Generate PostScript output"
 msgstr "Utilitas output peta dalam bentuk cetak PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 #, fuzzy
 msgid "Generate PDF output"
 msgstr "Hasilkan titik"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "Perbesaran sesuai dengan region standar"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "Hapus location terpilih"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "Tampilkan grid"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 #, fuzzy
 msgid "Quit Cartographic Composer"
 msgstr "Bantuan GRASS GIS GUI"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Tambahkan legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "Pilih dangle"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Tambahkan overlay label grid atau vektor"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Tambahkan label"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS GIS Attribute Table Manager"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4907,154 +5279,148 @@ msgstr ""
 "Koneksi basisdata ke peta vektor <%s> tidak didefinisikan dalam berkas DB. "
 "Anda dapat mendefinisikan sebuah koneksi baru dalam tab 'Kelola layer'."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Jelajah data"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Kelola tabel"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Kelola layer"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 #, fuzzy
 msgid "Close Attribute Table Manager"
 msgstr "Attribute Table Manager"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Hapus mapset terpilih"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Jumlah rekap yang dimuat: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Koneksi basis data"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Kueri"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 #, fuzzy
 msgid "Set SQL statement to default"
 msgstr "Kembalikan aturan ke standar"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Attribute Table Manager"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 #, fuzzy
 msgid "Close the dialog"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 #, fuzzy
 msgid "Columns"
 msgstr "Volume"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Potongan melintang"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 #, fuzzy
 msgid "Values"
 msgstr "Volume"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 #, fuzzy
 msgid "Get all values"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 #, fuzzy
 msgid "Get sample"
 msgstr "Tetapkan nilai"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Ekspor MPEG-1"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 #, fuzzy
 msgid "Close dialog on apply"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 #, fuzzy
 msgid "Verify"
 msgstr "Georektifikasi "
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 #, fuzzy
 msgid "Verify SQL statement"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 #, fuzzy
 msgid "SQL statement not verified"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 #, fuzzy
 msgid "SQL statement is not valid"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -5062,78 +5428,78 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 #, fuzzy
 msgid "SQL statement is valid"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Arah"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Menampilkan data..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, fuzzy, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Kolom <%(column)> sudah ada di dalam tabel <%(table)>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Hanya dapat menampilkan 256 kolom."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Kolom <%(column)> sudah ada di dalam tabel <%(table)>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Batasi hingga 100000 rekap"
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 #, fuzzy
 msgid "Unknown value"
 msgstr "tidak diketahui"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, fuzzy, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5146,208 +5512,208 @@ msgstr ""
 "\n"
 "Detil: %s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 #, fuzzy
 msgid "Sort ascending"
 msgstr "Mulai edit"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 #, fuzzy
 msgid "Sort descending"
 msgstr "Mulai edit"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Kalkulator peta "
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Statistik umum"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Tambah kolom"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "panjang"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "Lebar garis"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Tambah kolom"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 "Tidak mampu menambah kolom ke dalam tabel. Tidak ada nama kolom yang "
 "diberikan."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Kolom <%(column)s> sudah ada di dalam tabel <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Data atribut - klik-kanan untuk edit/kelola rekap"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Kueri SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Sederhana"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Terapkan pernyataan SELECT dan tampilkan ulang rekap data"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Pembuat SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Pembuat SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Edit rekap terpilih"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Masukkan rekap baru "
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Hapus rekap terpilih"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Hapus semua rekap"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Pilih semua"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Tidak-pilih semua"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 #, fuzzy
 msgid "Highlight selected features"
 msgstr "Digitasi fitur garis"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 #, fuzzy
 msgid "Extract selected features"
 msgstr "Ekstrak yang terpilih"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 #, fuzzy
 msgid "Delete selected features"
 msgstr "Hapus layer terpilih"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Perbaharui rekap yang sudah ada"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, fuzzy, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Nilai casting '%(value)' ke %(tipe) gagal."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Tidak dapat memperbaharui rekaman yang ada."
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Rekap dengan nomor kategori %d sudah ada di dalam tabel."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Nomor kategori (kolom %s) tidak ada."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Tidak dapat memasukkan rekap baru"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5356,11 +5722,11 @@ msgstr ""
 "Rekaman data terpilih (%d) akan dihapus secara permanen dari tabel. Anda "
 "benar-benar ingin menghapusnya?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Hapus rekap"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5369,16 +5735,16 @@ msgstr ""
 "Semua rekaman data (%d) akan dihapus secara permanen dari tabel. Apakah Anda "
 "benar-benar ingin menghapusnya?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 #, fuzzy
 msgid "Nothing to delete."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, fuzzy, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5389,7 +5755,7 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, fuzzy, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5401,32 +5767,32 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, fuzzy, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabel %s - klik-kanan untuk menghapus rekaman"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Volume"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "panjang"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Ubah nama kolom"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Tidak mampu merubah kolom. Tidak ada nama kolom seperti yang diminta."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5435,7 +5801,7 @@ msgstr ""
 "Tidak mampu merubah nama kolom <%(column)s> ke <%(columnTo)s>. Kolom sudah "
 "ada dalam tabel <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5444,15 +5810,15 @@ msgstr ""
 "Tidak mampu merubah nama kolom. Kolom <%(column)s> tidak ada di dalam tabel <"
 "%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Hapus kolom terpilih"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Hapus semua kolom"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5461,12 +5827,12 @@ msgstr ""
 "Rekaman data terpilih (%d) akan dihapus secara permanen dari tabel. Anda "
 "benar-benar ingin menghapusnya?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 #, fuzzy
 msgid "Drop column(s)"
 msgstr "Hapus semua kolom"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, fuzzy, python-format
 msgid ""
 "Selected columns\n"
@@ -5476,124 +5842,124 @@ msgstr ""
 "Rekaman data terpilih (%d) akan dihapus secara permanen dari tabel. Anda "
 "benar-benar ingin menghapusnya?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Daftar layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Hapus juga tabel atribut terpaut (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Nama kolom"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Panjang data"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Driver"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Basisdata"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Kunci"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Deskripsi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Kolom kunci"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Deskripsi tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Nama tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Buat tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Tambahkan layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Tentukan standar"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "Layer yang akan dihapus"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 #, fuzzy
 msgid "Modify layer"
 msgstr "&Modifikasi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modifikasi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Tidak dapat membuat sebuah tabel baru. Nama tabel atau nama kolom kunci "
 "tidak dapat ditemukan "
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, fuzzy, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 "Tidak dapat membuat sebuah tabel baru. Nama tabel atau nama kolom kunci "
 "tidak dapat ditemukan "
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, fuzzy, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5602,42 +5968,42 @@ msgstr ""
 "Tidak dapat menambahkan sebuah layer baru pada peta vektor <%(vektor)s>. "
 "Layer %(layer)d sudah ada."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Statistik umum"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Salin perintah saat ini ke clipboard"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Tidak mampu mengeset"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Tidak mampu membuat location baru"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Statistik umum"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5645,11 +6011,11 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "GRASS GIS Attribute Table Manager"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5658,203 +6024,204 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "&Buat tabel"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Tutup dialog saat submit"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 #, fuzzy
 msgid "No attributes found"
 msgstr "Perlihatkan data atribut"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Perbaharui atribut"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Ubah atribut"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Tampilkan atribut"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Muat-ulang"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Submit"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Nilai casting '%(value)' ke %(tipe) gagal."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 #, fuzzy
 msgid "Unknown"
 msgstr "tidak diketahui"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "ikon ikon."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "berkas tidak ditemukan"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Rektifikasi citra atau raster"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Rektifikasi citra atau raster"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Menampilkan data..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, fuzzy, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5863,634 +6230,634 @@ msgstr ""
 "Gagal dalam pembacaan berkas workspace <%s>. Berkas tidak valid, tidak mampu "
 "membaca dokumen XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Pengesetan disimpan pada berkas '%s'."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Hasilkan dari basisdata"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Sederhana"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Resolusi Atas-Bawah"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Mode kategori"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Pilihan pengaturan"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Lebih lanjut"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Daftar tabel"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Salin "
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "Y coord"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "Y coord"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Pilih berkas WKT"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Garis"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Pilihan pengaturan"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Workspace "
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Kelola informasi kategori"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Simpan region:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Muat region:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "Volume"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Hasilkan dari basisdata"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Daftar kategori"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Edit GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "Deskripsi"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "Ekspor MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Catatan waktu"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Tambahkan grup layer"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Tambahkan layer teks"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Jenis huruf"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Transek cuplikan"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Pengaturan halaman"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Ekspor MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "Koordinat"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "Arah"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Kode EPSG:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Berkas WKT:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "Berkas WKT:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Pilihan pengaturan"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "berkas tidak ditemukan"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "Kode EPSG tidak ada."
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Catatan waktu"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Hasilkan dari basisdata"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Tumpang-susun peta raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Bersihkan peta vektor"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Tumpang-susun peta raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Impor peta vektor "
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Tipe data"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Tool untuk membersihkan topologi peta vektor."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 #, fuzzy
 msgid "Background color:"
 msgstr "Background peta vektor"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Background peta vektor"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Background peta vektor"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Catatan waktu"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Koordinat"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Nilai tidak valid: %s"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Buat mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Tambahkan layer peta relief berbayang"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "Titik "
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Analisis jaringan"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6498,48 +6865,48 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Tumpang-susun peta raster"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Penambahan fitur baru untuk peta vektor <%s> gagal."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6547,89 +6914,89 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Tidak mampu mengeset"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Tumpang-susun peta raster"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Layer peta"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Kelola layer"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Kelola atau laporkan kategori"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Pilih %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6638,380 +7005,381 @@ msgstr ""
 "Ubah nama sebuah kolom dari tabel atribut yang terhubung ke satu peta vektor "
 "tertentu."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Tipe data"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Buat/bangun-ulang topologi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "Titik "
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Titik "
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Klik kiri: titik baru"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Kolom kunci"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Jalur terdekat"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "Titik "
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Analisis traveling salesman"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Nama kolom"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Perlihatkan pengaturan "
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Analisis profil"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Tampilkan peta"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Tampilkan peta"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Analisis jaringan"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Pengaturan axis"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Titik "
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Garis aliran "
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Output "
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parameter"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Daftar tabel"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Daftar tabel"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Menampilkan data..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Menampilkan data..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analisis LIDAR"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Pengaturan"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Pengaturan raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Tabel warna "
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Konversi koordinat "
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Aturan warna "
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Bersihkan GCP terpilih"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Tema ikon:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Lebar garis"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Batas snapping"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Tampilan"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Ground Control Point"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Hapus location terpilih"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Analisis medan"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Garis aliran "
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "Peta bayangan "
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Analisis traveling salesman"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Render"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Hidupkan/matikan render otomatis"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Tampilkan batas luar komputasi"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Tampilkan batas komputasi"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -7022,16 +7390,16 @@ msgstr ""
 "komputasi, region komputasi di dalam region display sebagai sebuah kotak "
 "merah)."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Mode tampilan"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -7040,17 +7408,17 @@ msgstr ""
 "Batas resolusi display sesuai pengaturan region komputasi. Nilai standar "
 "untuk tampilan peta baru dapat diatur di dalam dialog 'User GUI setting'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "Tampilan region"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Batas resolusi display sesuai pengaturan komputasi"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -7058,102 +7426,102 @@ msgstr ""
 "Batas resolusi display sesuai pengaturan region komputasi. Nilai standar "
 "untuk tampilan peta baru dapat diatur di dalam dialog 'User GUI setting'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Skala peta"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "Pilih proyeksi"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Geometri tampilan"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Koordinat"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Batas luar"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Perbesaran ke computational region (g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Map display"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "Masuk ke sesi GRASS"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS Map Display: "
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "Tidak dapat memasukkan rekap baru"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7163,380 +7531,406 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 #, fuzzy
 msgid "Starting 3D view mode..."
 msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 #, fuzzy
 msgid "Please wait, loading data..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
 #, fuzzy
-msgid "Digitize"
-msgstr "Digitasi garis baru "
+msgid "No map layer selected. Operation canceled."
+msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Tidak ada peta vektor yang dipilih untuk diubah."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Tambahkan layer teks"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Perbesaran ke computational region (g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Toolbar digitasi vektor"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Skala peta"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Tampilan"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Tidak dapat melakukan render layer peta <%s>."
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Tidak dapat membaca kode EPSG: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Mulai tampilan baru"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Tidak dapat membaca daftar: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Mulai tampilan baru"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Pilih fitur vektor"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Tampilkan/sembunyikan skala dan arah Utara"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Tampilkan/sembunyikan legenda"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Tampilkan/sembunyikan skala dan arah Utara"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analisa peta"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Pengukuran jarak"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Pengukuran jarak"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profil peta permukaan"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Buat tabel warna baru menggunakan color rules"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Analisis jaringan"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Tarik dengan tetikus untuk menggeser "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "Tarik atau klik tetikus untuk memperbesar "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "Tarik atau klik tetikus untuk memperkecil "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, fuzzy, python-format
 msgid "Reason: %s"
 msgstr "Region "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 #, fuzzy
 msgid "Vector digitizer not available"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Toolbar digitasi vektor"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Ubah nama location"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Ubah nama location"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Buat RGB "
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Buat location baru?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Ubah nama "
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Ubah nama location"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Edit GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Ubah nama location"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Apakah Anda hendak membuat GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Buat location baru?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Ubah nama location"
@@ -7546,330 +7940,330 @@ msgstr "Ubah nama location"
 msgid "Create new configuration file for r.li modules"
 msgstr "Editor konfigurasi untuk r.li.'index'"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Apakah Anda hendak membuat GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Buat location baru?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Location wizard dibatalkan. Location tidak dibuat."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Pilih tipe peta dan location/mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Pengaturan raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Perlihatkan pengaturan "
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Parameter medan"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Region "
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Transek cuplikan"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Window bergerak "
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Apakah Anda hendak membuat GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Kelola warna citra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Pilih fitur vektor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Tampilkan peta"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Window bergerak "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Lebar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "diagram tematik"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Transek cuplikan"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Window bergerak "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Kelola warna citra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7877,192 +8271,205 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Kelola warna citra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Ringkasan"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Region "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Batas region"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Lebar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Tema ikon:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Fitur terdekat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Kolom kunci"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Sederhana"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS Attribute Table Manager"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "Workspace "
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "Tampilan"
 
-#: ../gui/wxpython/lmgr/frame.py:293
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
 #, fuzzy
-msgid "Map layers"
-msgstr "Layer peta"
+msgid "Layers"
+msgstr "Layer"
 
-#: ../gui/wxpython/lmgr/frame.py:304
+#: ../gui/wxpython/lmgr/frame.py:339
 #, fuzzy
-msgid "Command console"
+msgid "Console"
 msgstr "Perintah berhasil dijalankan (%d detik)"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
+msgstr "Deskripsi layer"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -8070,192 +8477,181 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "Buat location baru?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 #, fuzzy
 msgid "Choose model to run"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 #, fuzzy
 msgid "Do you want to save changes in the workspace?"
 msgstr "Apakah Anda ingin menyimpan perubahan dalam peta vektor <%s>?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 #, fuzzy
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 "Workspace tidak kosong. Apakah Anda hendak menyimpan pengaturan saat ini ke "
 "berkas workspace?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "GRASS GIS Map Display: "
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Set region"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Nilai koordinat tidak valid. Operasi dibatalkan."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, fuzzy, python-format
-msgid "Current mapset is <%s>."
-msgstr "Ubah mapset saat ini."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Ubah lingkungan kerja "
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "Masuk ke sesi GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "tidak diketahui"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Pembuat SQL"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 #, fuzzy
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
@@ -8264,61 +8660,61 @@ msgstr ""
 "Workspace tidak kosong. Apakah Anda hendak menyimpan pengaturan saat ini ke "
 "berkas workspace?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 #, fuzzy
 msgid "Create new workspace?"
 msgstr "Buat sebuah berkas workspace baru"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Silakan tunggu, sedang memuat workspace ..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Pilih berkas untuk menyimpan workspace saat ini"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr "Berkas Workspace <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Simpan workspace"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 #, fuzzy
 msgid "Writing current settings to workspace file failed."
 msgstr "Penulisan pengaturan saat ini ke berkas workspace gagal (%s)."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "Masukkan nama untuk mapset baru:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS Map Display: "
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8326,37 +8722,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Tidak dapat memasukkan rekap baru"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Tidak dapat memasukkan rekap baru"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Tidak dapat melakukan render layer peta <%s>."
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, fuzzy, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8364,59 +8760,56 @@ msgid ""
 "from layer tree?"
 msgstr "Apakah Anda hendak menghapus layer peta <%s> dari layer tree?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 #, fuzzy
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 #, fuzzy
 msgid "Quit GRASS GUI"
 msgstr "Tentang GRASS GIS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Masuk ke sesi GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 #, fuzzy
 msgid "Import raster data"
 msgstr "Impor peta raster "
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 #, fuzzy
 msgid "Link external raster data"
 msgstr "Tidak berhasil memperbaharui peta vektor."
@@ -8433,13 +8826,15 @@ msgid "Set raster output format"
 msgstr "Pilih jenis huruf"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 #, fuzzy
 msgid "Import vector data"
 msgstr "Impor peta vektor "
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 #, fuzzy
 msgid "Link external vector data"
 msgstr "Tidak berhasil memperbaharui peta vektor."
@@ -8464,7 +8859,7 @@ msgstr "Unduh dan impor data dari server WMS."
 msgid "Add command layer"
 msgstr "Tambahkan layer perintah"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Keluar "
@@ -8518,8 +8913,8 @@ msgid "Add rhumbline layer"
 msgstr "Tambahkan sebuah layer rhumbline"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "Tambahkan layer peta raster"
@@ -8543,323 +8938,315 @@ msgstr "Rentang yang valid"
 msgid "Background vector map"
 msgstr "Gabungkan peta vektor"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Layer peta"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Ubah tingkat opasitas"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 #, fuzzy
 msgid "Zoom to selected map(s)"
 msgstr "Perbesaran sesuai peta terpilih "
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 #, fuzzy
 msgid "Set computational region from selected map(s)"
 msgstr "Tentukan region komputasi dari peta terpilih"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Buat RGB "
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 #, fuzzy
 msgid "Set color table"
 msgstr "Tabel warna "
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Perlihatkan data atribut"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Mulai edit"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Stop edit"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 #, fuzzy
 msgid "Rebuild topology"
 msgstr "Buat/bangun-ulang topologi"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 #, fuzzy
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Perbesar ke peta terpilih (abaikan NULL)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Pengkodean-ulang secara interaktif "
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Statistik raster univariat"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Laporan dan statistik."
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Tidak mampu membuat profil dari peta raster."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Tidak dapat melakukan render layer peta <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Masukkan nama untuk mapset baru:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Tidak mampu menampilkan histogram dari peta raster."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Grup layer:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 #, fuzzy
 msgid "Click to edit layer settings"
 msgstr "Klik di sini untuk menyembunyikan pengaturan 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(klik ganda untuk menentuk karakteristik)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 #, fuzzy
 msgid "Please wait, updating data..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 #, fuzzy
 msgid "Start new map display"
 msgstr "Mulai tampilan baru"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Buat sebuah berkas workspace baru"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 #, fuzzy
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Buka berkas workspace yang telah ada "
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 #, fuzzy
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Tambahkan layer peta raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Tambahkan layer peta raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 #, fuzzy
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Tambahkan layer peta raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Tambahkan layer peta vektor"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Tambahkan layer peta vektor"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "Tambahkan grup layer"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Tambahkan overlay label grid atau vektor"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 #, fuzzy
 msgid "Import/link raster or vector data"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "Kalkulator peta raster 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 #, fuzzy
 msgid "Graphical Modeler"
 msgstr "Bantuan GRASS GIS GUI"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Georektifikasi "
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Deskripsi layer"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "Pengaturan GUI User"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "Peta bayangan "
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Edit rekap terpilih"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Perlihatkan data atribut"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "Hasilkan garis kontur"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 #, fuzzy
 msgid "Generate command for m.nviz.image based on current state"
 msgstr "Hasilkan garis kontur"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Perlihatkan pengaturan "
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Perlihatkan pengaturan "
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8867,639 +9254,647 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Analisis profil"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profil dari"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Jarak (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Jarak sepanjang transek"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Nilai raster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 "Anda harus menggambar sebuah transet untuk membuat profil di dalam window "
 "map display."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Tidak ada yang dapat dibuat profil"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Tidak mampu membuka berkas <%s> untuk dibaca."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "Statistik untuk sel yang berkelompok (clumped cells)"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Nilai raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Pilih peta raster 1 (diperlukan):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Nilai raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Deil:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Statistik laporan untuk layer peta raster."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Gambar/gambar-ulang profil"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Gambar transek dalam jendela tampilan peta untuk membuat profil"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Pilihan pengaturan"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Statistik umum"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "Simpan tampilan ke dalam berkas PNG"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Klik kiri: titik baru"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Jenis huruf"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Nilai raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Statistik laporan untuk layer peta raster."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Pilih peta raster untuk dibuat profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Pilih peta raster untuk dibuat profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Pilih peta raster untuk dibuat profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Salin "
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Salin perintah saat ini ke clipboard"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Pilih peta raster 2 (opsional):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 #, fuzzy
 msgid "Select raster map:"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Judul profil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Ukuran huruf judul (points):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 #, fuzzy
 msgid "X-axis label:"
 msgstr "Label Y-axis:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Label Y-axis:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Ukuran huruf label (points):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Jenis huruf:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Gaya:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Berat:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 #, fuzzy
 msgid "Apply changes for the current session and close dialog"
 msgstr "Terapkan perubahan untuk sesi saat ini"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Pengaturan profil disimpan ke dalam berkas '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Tentukan region komputasi dari peta terpilih"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Pengaturan penanda segmen transek"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Pengaturan axis"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X-Axis"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y-Axis"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Gaya:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Bebas min."
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Bebas maks."
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Skala log"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Pengaturan grid dan legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Warna grid"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Tampilkan grid"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Ukuran huruf legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Tampilkan legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Pengaturan profil disimpan ke dalam berkas '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Pengaturan raster"
+msgstr "Region tidak valid"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Atribut"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Pilih peta raster 3 (opsional):"
+msgstr "Pilih fitur vektor"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 #, fuzzy
 msgid "Help"
 msgstr "Bantuan"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Region tidak valid"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Mode kategori"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Catatan waktu"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Region tidak valid"
+msgid "Seed point outside the current region"
+msgstr "Hasilkan area untuk region saat ini"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Region tidak valid"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Region tidak valid"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Region tidak valid"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Impor peta vektor "
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 #, fuzzy
 msgid "&File"
 msgstr "Berkas"
@@ -9508,8 +9903,8 @@ msgstr "Berkas"
 msgid "Workspace"
 msgstr "Workspace "
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr ""
 
@@ -9518,7 +9913,7 @@ msgstr ""
 msgid "Create new workspace"
 msgstr "Buat sebuah berkas workspace baru"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr ""
 
@@ -9527,13 +9922,13 @@ msgstr ""
 msgid "Load workspace from file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 #, fuzzy
 msgid "Save"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 #, fuzzy
 msgid "Save as"
 msgstr "Simpan perubahan"
@@ -9558,7 +9953,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "Tampilan"
@@ -9593,7 +9988,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Tambahkan layer peta raster"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Tambahkan layer grid"
@@ -10356,24 +10751,24 @@ msgstr "Volume ke rangkaian raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Ubah peta raster 3D ke peta raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georektifikasi "
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 #, fuzzy
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Ground Control Points"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -10413,16 +10808,16 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Tipe layer peta:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Deskripsi layer"
@@ -10437,7 +10832,7 @@ msgstr "Deskripsi layer"
 msgid "Launches script file."
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Kode"
@@ -10447,8 +10842,8 @@ msgstr "Kode"
 msgid "Quit wxGUI session."
 msgstr "Keluar GUI"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Tentang GRASS GIS"
@@ -10457,7 +10852,7 @@ msgstr "Tentang GRASS GIS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "Pengaturan"
@@ -10645,7 +11040,7 @@ msgstr "Daftar kategori"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Pengaturan proyeksi"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Pilihan pengaturan"
 
@@ -11801,7 +12196,7 @@ msgstr ""
 "dari satu sel."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Planimetrik"
 
@@ -12082,8 +12477,8 @@ msgid "Develop vector map"
 msgstr "Pembangunan peta vektor"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Buat peta vektor baru"
 
@@ -13030,13 +13425,13 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr "Input klaster untuk klasifikasi tak-terbimbing"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -14176,27 +14571,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Map Toolbar"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Tampilkan batas komputasi"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Mode kategori"
+msgstr "Buat histogram dari berkas citra atau raster"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Tampilkan batas komputasi"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "Bantuan"
@@ -14226,7 +14625,7 @@ msgid "Prints system information"
 msgstr "Informasi basisdata"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Tentang GRASS GIS"
 
@@ -14240,310 +14639,319 @@ msgstr "Impor peta vektor "
 msgid "Attribute table manager"
 msgstr "Attribute Table Manager"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "Buat mapset baru"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 #, fuzzy
 msgid "Load model from file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 #, fuzzy
 msgid "Export model to image"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 #, fuzzy
 msgid "Close modeler window"
 msgstr "Window bergerak "
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "Mode"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "Tambahkan layer perintah"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "Definisikan location baru"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Tambahkan grup layer"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "Tambah kolom"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Tambahkan layer perintah"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "Hapus tabel"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 #, fuzzy
 msgid "Remove action/data from model"
 msgstr "Hasilkan dari basisdata"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "Hapus yang tersaring"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Tampilkan halaman manual HTML dari GRASS"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "Hasilkan informasi dasar tentang sebuah layer peta raster."
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Ekspor MPEG-1"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Deskripsi layer"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Bantuan GRASS GIS GUI"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Tambahkan layer peta raster"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "Ekspor peta vektor "
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Tambahkan legenda"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Tambah kolom"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Tambahkan skala garis dan arah utara"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Tampilkan halaman manual HTML dari GRASS"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Bantuan GRASS GIS GUI"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Hasilkan informasi dasar tentang sebuah layer peta raster."
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 #, fuzzy
 msgid "Click here to show search module engine"
 msgstr "Klik di sini untuk menampilkan pengaturan 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 #, fuzzy
 msgid "Click here to hide search module engine"
 msgstr "Klik di sini untuk menyembunyikan pengaturan 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "Output perintah"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "Output "
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "Output perintah"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "Batalkan perintah yang sedang berjalan"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Skala log"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Simpan berkas sebagai ..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Berkas"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14551,12 +14959,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "Tidak dapat membaca kode EPSG: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Output perintah"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14564,101 +14972,140 @@ msgid ""
 "Details: %(error)s"
 msgstr "Tidak dapat melakukan perbesar peta vektor <%s>."
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Output perintah"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Kategori"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Pilih fitur vektor"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Buat mapset baru"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Tidak ada layer peta yang dipilih untuk kueri."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Peta vektor baru"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Jalankan perintah"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "Pengaturan GUI User"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Kembalikan aturan ke standar"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Kembalikan pengaturan ke standar dan terapkan perubahan"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Terapkan perubahan untuk sesi saat ini"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Terapkan perubahan untuk sesi ini"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "Pengaturan GUI User"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Pengaturan Layer Maager"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Konfirmasi ketika menghapus layer peta dari layer tree"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "Pengaturan raster"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Suppress positioning Map Display Window(s)"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Suppress positioning Layer Manager window"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Simpan layout window saat ini sebagai standar"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14666,221 +15113,213 @@ msgstr ""
 "Simpan posisi dan ukuran window Layer Manager saat ini dan window Map "
 "Display yang dibuka dan gunakan sebagai standar untuk sesi berikutnya."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "Output perintah"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "Ubah pengaturan "
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "Pengaturan lebih lanjut"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Daftar elemen:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Pengaturan dialog perintah"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "Tampilan"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Jenis huruf standar untuk tampilan GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Pengaturan tampilan standar"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Driver tampilan:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Mode statusbar:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Jalankan rendering otomatis"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Tidak dapat memperbesar ke peta raster <%s>"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Pengaturan lebih lanjut"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Pengaturan dialog perintah"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 #, fuzzy
 msgid "Add created map into layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Pengkodean-ulang secara interaktif "
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Level verbosity:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-#, fuzzy
-msgid "Layers"
-msgstr "Layer"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Pengaturan tampilan standar"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "Tabel warna "
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Pengaturan teks"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 #, fuzzy
 msgid "Display:"
 msgstr "Tampilan"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Transparans"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "Simbolisasi"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 #, fuzzy
 msgid "Line width (in pixels):"
 msgstr "Lebar garis (dalam piksel)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Digitasi fitur garis"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Penjelajah data"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 #, fuzzy
 msgid "Left mouse double click:"
 msgstr "Klik kiri ganda"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Konfirmasi ketika menghapus rekap data data dari tabel"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 #, fuzzy
 msgid "Create table"
 msgstr "&Buat tabel"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 #, fuzzy
 msgid "Key column:"
 msgstr "Kolom kunci"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 #, fuzzy
 msgid "Projection statusbar settings"
 msgstr "Pengaturan teks profil"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14892,86 +15331,97 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Kode EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "Kode EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 #, fuzzy
 msgid "&Load EPSG codes"
 msgstr "Kode EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "Koordinat"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Pengaturan proyeksi"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 #, fuzzy
 msgid "Precision:"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Tidak dapat membaca kode EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Tidak dapat membaca kode EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "ERROR: Location <%s> tidak ada"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Pilih jenis huruf tampilan standar"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Pilih jenis huruf tampilan standar"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 #, fuzzy
 msgid "Select font:"
 msgstr "Pilih jenis huruf"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Sederhana"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "Ubah mapset saat ini."
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 #, fuzzy
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
@@ -14984,282 +15434,372 @@ msgstr ""
 "menyembunyikannya.%Catatan: PERMANEN dan mapset saat ini akan selalu dapat "
 "diakses."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Pemilik"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Tumpang-susun peta raster"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Volume"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Hapus semua kolom"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Hapus kolom terpilih"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Salin "
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Salin tabel"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Tumpang-susun peta raster"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Tes kenormalan"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Hapus mapset terpilih"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Perlihatkan pengaturan "
+msgid "Load:"
+msgstr "Memuat"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Berkas Workspace <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "Tidak mampu mengeset"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Simpan berkas sebagai ..."
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Masukkan parameter untuk"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Jalankan perintah"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Kuantisasi "
+
+#: ../gui/wxpython/gui_core/forms.py:543
 #, fuzzy
 msgid "Enter parameters for '"
 msgstr "Masukkan parameter untuk"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 #, fuzzy
 msgid "Run the command (Ctrl+R)"
 msgstr "Jalankan perintah"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 #, fuzzy
 msgid "Copy the current command string to the clipboard"
 msgstr "Salin perintah saat ini ke clipboard"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Tampilkan halaman manual dari perintah"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Dibutuhkan"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Opsional"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Parameter tidak ditemukan: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[berganda]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Pilih warna"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Pilih %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 #, fuzzy
 msgid "&Load"
 msgstr "Memuat"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Ubah nama location"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Pengkodean-ulang secara interaktif "
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 #, fuzzy
 msgid "Directory"
 msgstr "Arah"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "Layer"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+#, fuzzy
+msgid "Layer name"
+msgstr "Nama tabel"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Proyeksi:"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manual"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -15267,47 +15807,47 @@ msgid ""
 "Reason: %s"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "Tidak ada yang dapat diekstrak."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Simpan berkas sebagai ..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, fuzzy, python-format
 msgid "Error in %s"
 msgstr "Kesalahan "
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Tidak dapat menganalisis kesalahan perintah %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "Pilih location dan mapset proyek"
@@ -15317,605 +15857,478 @@ msgstr "Pilih location dan mapset proyek"
 msgid "Location or mapset is not defined."
 msgstr "Komputasi aliran untuk grid masif (versi float)."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "Definisikan GRASS Location baru"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "Pilih tipe peta dan location/mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 #, fuzzy
 msgid "Create attribute table"
 msgstr "Perlihatkan tabel atribut"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Muat region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Simpan region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Buat/edit grup"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Terapkan perubahan untuk sesi ini"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "Terapkan perubahan untuk sesi ini"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Kembalikan pengaturan ke standar dan terapkan perubahan"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Daftar peta:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
-msgstr "Tampilkan layer peta ke dalam layer tree"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1059
-#, python-format
-msgid "Group <%s> was changed, do you want to apply changes?"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
-#, fuzzy
-msgid "Unapplied changes"
-msgstr "Simpan perubahan"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1071
-#, python-format
-msgid "Subgroup <%s> was changed, do you want to apply changes?"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1127
-#, fuzzy
-msgid "No raster maps selected."
-msgstr "Tidak ada layer peta yang dipilih untuk kueri."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1156
-#, python-format
-msgid "No changes to apply in group <%s>."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1159
-#, python-format
-msgid "Group <%s> was successfully created."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1161
-#, python-format
-msgid "Group <%s> was successfully changed."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1164
-#, fuzzy, python-format
-msgid "Creating of new group <%s> failed."
-msgstr "Penambahan fitur baru untuk peta vektor <%s> gagal."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1166
-#, python-format
-msgid "Changing of group <%s> failed."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1204
-#, fuzzy
-msgid "No group selected."
-msgstr "Tidak ada layer peta yang dipilih untuk kueri."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1210
-#, fuzzy
-msgid "No subgroup selected."
-msgstr "Tidak ada layer peta yang dipilih untuk kueri."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1313
-msgid "Use fully-qualified map names"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
-#, fuzzy
-msgid "3D raster"
-msgstr "raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1339
-#, fuzzy
-msgid "Map type:"
-msgstr "Tipe layer peta:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1354
-#, fuzzy
-msgid "Select toggle"
-msgstr "Pilih dangle"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1361
-msgid "Mapset:"
-msgstr "Mapset:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1447
-#, fuzzy
-msgid "Invert selection"
-msgstr "Potongan melintang"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1582
-#, python-format
-msgid "Dynamic series (%s)"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-#, fuzzy
-msgid "Multiple import"
-msgstr "Impor WMS"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Daftar layer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Daftar layer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "Daftar layer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "Layer"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-#, fuzzy
-msgid "Layer name"
-msgstr "Nama tabel"
+msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Nama untuk peta vektor baru:"
+#: ../gui/wxpython/gui_core/dialogs.py:1172
+#, python-format
+msgid "Group <%s> was changed, do you want to apply changes?"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1637
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
-msgid "Projection match"
-msgstr "Proyeksi:"
+msgid "Unapplied changes"
+msgstr "Simpan perubahan"
+
+#: ../gui/wxpython/gui_core/dialogs.py:1188
+#, python-format
+msgid "Subgroup <%s> was changed, do you want to apply changes?"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
-msgid "Options"
-msgstr "Opsional"
+msgid "No raster maps selected."
+msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
+#: ../gui/wxpython/gui_core/dialogs.py:1274
+#, python-format
+msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
+#: ../gui/wxpython/gui_core/dialogs.py:1277
+#, python-format
+msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-#, fuzzy
-msgid "Import selected layers"
-msgstr "Hapus layer terpilih"
+#: ../gui/wxpython/gui_core/dialogs.py:1279
+#, python-format
+msgid "Group <%s> was successfully changed."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Tampilkan layer peta ke dalam layer tree"
+#: ../gui/wxpython/gui_core/dialogs.py:1282
+#, fuzzy, python-format
+msgid "Creating of new group <%s> failed."
+msgstr "Penambahan fitur baru untuk peta vektor <%s> gagal."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-#, fuzzy
-msgid "Add imported layers into layer tree"
-msgstr "Tampilkan layer peta ke dalam layer tree"
+#: ../gui/wxpython/gui_core/dialogs.py:1284
+#, python-format
+msgid "Changing of group <%s> failed."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1901
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
-msgid "&Link"
-msgstr "Garis"
+msgid "No group selected."
+msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1902
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
-msgid "Link selected layers"
-msgstr "Modifikasi layer terpilih"
+msgid "No subgroup selected."
+msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+#: ../gui/wxpython/gui_core/dialogs.py:1434
+msgid "Use fully-qualified map names"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1968
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Tidak mampu membuat profil dari peta raster."
+msgid "3D raster"
+msgstr "raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2048
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
-msgid "Define output format for vector data"
-msgstr "Impor peta vektor "
+msgid "Map type:"
+msgstr "Tipe layer peta:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2050
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
-msgid "Define output format for raster data"
-msgstr "Impor peta vektor "
+msgid "Select toggle"
+msgstr "Pilih dangle"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Terapkan perubahan untuk sesi ini"
+#: ../gui/wxpython/gui_core/dialogs.py:1482
+msgid "Mapset:"
+msgstr "Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2110
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
-msgid "No data source selected."
-msgstr "Tidak ada layer peta yang dipilih untuk kueri."
+msgid "Invert selection"
+msgstr "Potongan melintang"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
+#: ../gui/wxpython/gui_core/dialogs.py:1718
+#, python-format
+msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-#, fuzzy
-msgid "Choose DXF file to import"
-msgstr "Pilih berkas GRC untuk dimuat"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Tidak ada layer peta yang dipilih untuk kueri."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 #, fuzzy
 msgid "Set Map Layer Opacity"
 msgstr "Tipe layer peta:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "Pengaturan halaman"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Map display"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "Simbolisasi"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Pengaturan simbol"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Pengaturan simbol"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 #, fuzzy
 msgid "Copyright"
 msgstr "Salin "
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 #, fuzzy
 msgid "License"
 msgstr "Garis"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "Atribut"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "Atribut"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "Transparans"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Transparans"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 #, fuzzy
 msgid "Language"
 msgstr "Kelola"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, fuzzy, python-format
 msgid "%s file missing"
 msgstr "Kode EPSG tidak ada."
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "Garis"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Rotasi:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "berkas tidak ditemukan"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 #, fuzzy
 msgid "&Next"
 msgstr "&Keluar"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "Tampilan cetak"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Map Toolbar"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Grup layer:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Layer"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Ubah tingkat opasitas"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Ubah tingkat opasitas"
@@ -16022,742 +16435,759 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr "Skala-ulang dengan histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Pilih jenis huruf tampilan standar"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "Hapus kolom terpilih"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Tipe"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "Pengaturan raster"
+msgid "Source input"
+msgstr "Nama kolom"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Simpan perubahan"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Berkas"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "Output "
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 #, fuzzy
 msgid "All files"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Nilai sel"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 #, fuzzy
 msgid "File:"
 msgstr "Berkas"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 #, fuzzy
 msgid "Choose input directory"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 #, fuzzy
 msgid "Choose file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Fitur terdekat"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Buat/bangun-ulang topologi"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "Pilihan pengaturan"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 #, fuzzy
 msgid "Protocol:"
 msgstr "Kode proyeksi:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Toolbar digitasi vektor"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Penyorotan"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "ERROR: Mapset <%s> tidak ada"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Pilih sumber mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Skala peta"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Catatan waktu"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Buat/bangun-ulang topologi"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Pengaturan raster"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Dibutuhkan"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Daftar layer"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Pilih proyeksi"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Pengaturan lebih lanjut"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Tumpang-susunkan raster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Kode proyeksi:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Cuplik-ulang dengan tetangga-terdekat "
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Regresi linier "
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Masukkan parameter untuk"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Tidak dapat menganalisis kesalahan perintah %s"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Koordinat"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Pilih sumber mapset:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Pilih sumber location:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Layer"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Gaya"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Tambahkan grup layer"
+msgid "Add default"
+msgstr "&Tentukan standar"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 #, fuzzy
 msgid "Server:"
 msgstr "Driver"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 #, fuzzy
 msgid "&Connect"
 msgstr "Koneksikan"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Pengaturan lebih lanjut"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Pengaturan lebih lanjut"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Pengaturan Layer Maager"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Nama tabel"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Ubah nama "
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Set region"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Muat region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Batas resolusi display sesuai pengaturan komputasi"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Set region komputasi berdasarkan tampilan"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "timpa berkas yang ada"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Muat region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Tambahkan layer grid"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Menampilkan data..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Tidak mampu mengeset"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Tutup dialog di akhir perintah"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Kueri data atribut vektor"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 #, fuzzy
 msgid "Select vector map:"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Tabel warna "
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 #, fuzzy
 msgid "Load"
 msgstr "Memuat"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Pengaturan"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Kembalikan aturan ke standar"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Tabel warna "
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 #, fuzzy
 msgid "Create new color table for raster map"
 msgstr "Buat tabel warna baru menggunakan color rules"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "Mengubah nilai kategori secara interaktif "
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "Rentang yang valid"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "Buat tabel warna baru menggunakan color rules"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "Mengubah nilai kategori secara interaktif "
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Kueri data atribut vektor"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 #, fuzzy
 msgid "Layer:"
 msgstr "Layer"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 #, fuzzy
 msgid "Attribute column:"
 msgstr "Atribut"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Hapus semua kolom"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Serangkaian raster ke dalam volume"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Hapus juga tabel atribut terpaut (%s)"
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Tabel warna "
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16766,648 +17196,811 @@ msgstr ""
 "Koneksi basisdata ke peta vektor <%s> tidak didefinisikan dalam berkas DB. "
 "Anda dapat mendefinisikan sebuah koneksi baru dalam tab 'Kelola layer'."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "Koneksi vektor basisdata"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "Silakan tunggu, sedang menampilkan data atribut ..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Mengubah nilai kategori secara interaktif "
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Kueri data atribut vektor"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Tool untuk membersihkan topologi peta vektor."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "Kalkulator Peta GRASS %s"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "Kalkulator Peta GRASS %s"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 #, fuzzy
 msgid "mapcalc statement"
 msgstr "Pernyataan SQL"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 #, fuzzy
 msgid "Operators"
 msgstr "Transparans"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 #, fuzzy
 msgid "Expression"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "Simpan workspace ke dalam berkas"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "Pilih berkas workspace"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 #, fuzzy
 msgid "subtract"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 #, fuzzy
 msgid "multiply"
 msgstr "[berganda]"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 #, fuzzy
 msgid "greater than"
 msgstr "lebih pendek dari"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 #, fuzzy
 msgid "greater than or equal to"
 msgstr "Buat/bangun-ulang topologi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 #, fuzzy
 msgid "less than"
 msgstr "lebih jauh dari"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 #, fuzzy
 msgid "one's complement"
 msgstr "Tampilkan batas luar komputasi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "Opsional"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "timpa berkas yang ada"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "timpa berkas yang ada"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 #, fuzzy
 msgid "Insert mapcalc function"
 msgstr "Potongan melintang"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Hasilkan titik acak"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "Tampilkan layer peta ke dalam layer tree"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Anda harus memasukkan nama ekstensi peta untuk dapat melanjutkan"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Anda harus memasukkan nama ekstensi peta untuk dapat melanjutkan"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 #, fuzzy
 msgid "Expression file (*)|*"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "Pilih berkas GRC untuk dimuat"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' berhasil disalin ke clipboard"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Tabel %s - klik-kanan untuk menghapus rekaman"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "Opsional"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Daftar kategori"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Peta bayangan "
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Tidak mampu mengeset"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Pengaturan proyeksi"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Daftar kategori"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "Daftar kategori"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Pengaturan proyeksi"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
+#, fuzzy
+msgid "Reinstall selected Addons extensions"
+msgstr "Pengaturan proyeksi"
+
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Hapus vertex "
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "Proyeksi:"
+
+#: ../gui/wxpython/modules/import_export.py:45
+#, fuzzy
+msgid "Multiple import"
+msgstr "Impor WMS"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Daftar layer"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Daftar layer"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "Daftar layer"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Nama untuk peta vektor baru:"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+#, fuzzy
+msgid "Import selected layers"
+msgstr "Hapus layer terpilih"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "Pengaturan raster"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Jenis huruf"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Tampilkan layer peta ke dalam layer tree"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+#, fuzzy
+msgid "Add imported layers into layer tree"
+msgstr "Tampilkan layer peta ke dalam layer tree"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+#, fuzzy
+msgid "&Link"
+msgstr "Garis"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+#, fuzzy
+msgid "Link selected layers"
+msgstr "Modifikasi layer terpilih"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Tidak mampu membuat profil dari peta raster."
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Impor peta vektor "
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Impor peta vektor "
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Terapkan perubahan untuk sesi ini"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Tidak ada layer peta yang dipilih untuk kueri."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:729
+#, fuzzy
+msgid "Choose DXF file to import"
+msgstr "Pilih berkas GRC untuk dimuat"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Tidak ada layer peta yang dipilih untuk kueri."
+
+#: ../gui/wxpython/modules/import_export.py:836
 #, fuzzy
-msgid "Reinstall selected Addons extensions"
-msgstr "Pengaturan proyeksi"
+msgid "Reprojection"
+msgstr "Proyeksi:"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
+msgid "Name for output GRASS map"
+msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Hapus vertex "
+msgid "Layers to be reprojected"
+msgstr "Layer yang akan dihapus"
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "Proyeksi:"
+msgid "Reproject selected layers"
+msgstr "Hapus layer terpilih"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 #, fuzzy
 msgid "Numeric column:"
 msgstr "Kolom kunci"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 #, fuzzy
 msgid "Kriging"
 msgstr "Tiling "
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 #, fuzzy
 msgid "Name for the output raster map:"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "Ekspor peta raster "
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 #, fuzzy
 msgid "Ready."
 msgstr "Muat-ulang"
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 #, fuzzy
 msgid ":"
 msgstr "X:"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 #, fuzzy
 msgid "Block size:"
 msgstr "Tema ikon:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 #, fuzzy
 msgid "Model: "
 msgstr "Mode"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Buat histogram dari berkas citra atau raster"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 #, fuzzy
 msgid "Set up vector cleaning tools"
 msgstr "Pilih fitur vektor"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Gabungkan garis/batas terpilih"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "Periksa untuk duplikasi"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "Pilih dangle"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "Hapus tabel"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "Balikkan garis/batas terpilih"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "Balikkan garis/batas terpilih"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "Hapus layer peta"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "Potong garis/batas terpilih pada interseksi"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "ID Fitur"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 #, fuzzy
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Salin perintah saat ini ke clipboard"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 #, fuzzy
 msgid "line"
 msgstr "Garis"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "Edit garis/batas "
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "Tambahkan centroid"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 #, fuzzy
 msgid "face"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Tool untuk membersihkan topologi peta vektor."
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Tool untuk membersihkan topologi peta vektor."
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Nama untuk peta vektor baru:"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Pilih batas"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -17415,20 +18008,20 @@ msgid ""
 "%s"
 msgstr "Tidak ada layer peta terpilih. Operasi digagalkan."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Tidak mampu membuka berkas <%s> untuk dibaca."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, fuzzy, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -17441,188 +18034,183 @@ msgstr ""
 "\n"
 "Jumlah baris yang diabaikan: %d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " baris %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, fuzzy, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: type layer<%(type)s> belum didukung."
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Perintah berhasil dijalankan (%d detik)"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Deil:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, fuzzy, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Tidak dapat melakukan render layer peta <%s>."
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Hapus layer peta"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Menampilkan data..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Perbesaran sesuai dengan region standar"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Nilai tidak valid: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Tidak dapat memperbesar ke peta raster <%s>"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Deil:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Tidak dapat memperbesar ke peta raster <%s>"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Tidak dapat melakukan render layer peta <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Tidak dapat merender overlay <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Menampilkan data..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Render"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Render"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "tidak diketahui"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Tidak dapat memperbaharui rekaman yang ada."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Bebas maks."
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/core/utils.py:558
-#, fuzzy, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Tidak dapat membuka berkas"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Tidak mampu membuka berkas <%s> untuk dibaca."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Perbaharui atribut"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17631,17 +18219,22 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "berkas tidak ditemukan"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 #, fuzzy
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
@@ -17649,168 +18242,168 @@ msgstr ""
 "Harap dicatat bahwa data dibiarkan dalam tahap inkonsisten dan bisa menjadi "
 "rusak"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Perintah dibatalkan"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 #, fuzzy
 msgid "Command finished"
 msgstr "Perintah berhasil dijalankan (%d detik)"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 #, fuzzy
 msgid "Reason"
 msgstr "Region "
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Eksekusi gagal:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 #, fuzzy
 msgid "Error: "
 msgstr "Kesalahan "
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, fuzzy, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Tidak dapat menganalisis kesalahan perintah %s"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Segment break"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Titik "
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Putus semua kecuali PERMANENT dan current"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Putuskan semua kecuali PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 #, fuzzy
 msgid "Collapse all except current"
 msgstr "Putus semua kecuali PERMANENT dan current"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Tutup semua"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Kembangkan semua"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Tampilkan yang terpilih"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Daftar tabel"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Perbesaran sesuai dengan region tersimpan"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "Utara"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 #, fuzzy
 msgid "aster"
 msgstr "raster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 #, fuzzy
 msgid "histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Tidak dapat menganalisis kesalahan perintah %s"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17821,12 +18414,12 @@ msgstr ""
 "Detil: %s\n"
 "Garis: '%s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "Tidak dapat memperbaharui rekaman yang ada."
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, fuzzy, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17837,282 +18430,313 @@ msgstr ""
 "\n"
 "Detil: %s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Tidak mampu mengeset"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Tidak dapat menganalisis kesalahan perintah %s"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Definisikan basisdata GRASS dan Nama Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Direktori Data GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Project Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Pilih Direktori Data SIG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Nama Location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "Location yang dipilih tidak valid."
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Location sudah ada dalam basisdata GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Tidak bisa membuat location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Silakan pilih metoda untuk membuat sebuah location baru"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 #, fuzzy
 msgid "Select EPSG code of spatial reference system"
 msgstr "Pilih kode EPSG dari sistem koordinat"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 #, fuzzy
 msgid "Select coordinate system parameters from a list"
 msgstr "Pilih sistem koordinat"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Gunakan sistem koordinat XY"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Sederhana"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Lebih lanjut"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Pilih proyeksi"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Kode"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Kode proyeksi:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Cari dalam deskripsi:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Tidak dapat membaca daftar: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 #, fuzzy
 msgid "Choose projection parameters"
 msgstr "Pilih proyeksi"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 #, fuzzy
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Pilih datum dengan ellipsoid terkait"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 #, fuzzy
 msgid "Datum with associated ellipsoid"
 msgstr "Pilih datum dengan ellipsoid terkait"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 #, fuzzy
 msgid "Ellipsoid only"
 msgstr "Ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, fuzzy, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Masukkan parameter untuk"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Tentukan datum geodetik"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Kode datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Tentukan ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Basisdata"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Kode ellipsoid:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Pilih berkas georeferensi"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Berkas georeferensi:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Berkas WKT:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Pilih Kode EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Path ke berkas kode EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Pilih berkas kode EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Pilih Kode EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Path ke berkas kode EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Kode EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Pilih berkas kode EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Tidak dapat membaca kode EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Pilih metoda untuk menentukan parameter georeferensi"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Masukkan karakter parameter PROJ.4"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Transformasi datum dibutuhkan."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Basisdata GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Nama Location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Nama Location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Definisi PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Apakah Anda hendak membuat GRASS location <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Buat location baru?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definisikan GRASS Location baru"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, fuzzy, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -18121,262 +18745,267 @@ msgid ""
 msgstr ""
 "Tidak mampu membuat location baru. Location <%s> tidak berhasil dibuat."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Location wizard dibatalkan. Location tidak dibuat."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Tidak mampu membuat location baru"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 #, fuzzy
 msgid "New GIS data directory"
 msgstr "Direktori Data GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Kode EPSG tidak ada."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Kode EPSG tidak ada."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "berkas tidak ditemukan"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Tentukan batas dan resolusi dari region standar"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Tentukan region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Location yang dipilih tidak valid."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Region tidak valid"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Klik di sini untuk menampilkan pengaturan 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Klik di sini untuk menyembunyikan pengaturan 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Baris: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Kolom: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Sel: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Kedalaman: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Sel 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Resolusi Atas-Bawah"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Utara"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Barat"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Timur"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Selatan"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Resolusi Utara - Selatan"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Resolusi Timur - Barat"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Nilai tidak valid: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Pilih transformasi datum"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 #, fuzzy
 msgid "Select from list of datum transformations"
 msgstr "Daftar transformasi datum"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 #, fuzzy
 msgid "Easting"
 msgstr "Timur"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "Utara"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Nama kolom"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "Program pembentukan permukaan dari kontur raster."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Kelola warna citra"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Jarak sepanjang transek"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Jarak sepanjang transek"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 #, fuzzy
 msgid "Loading raster map"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 #, fuzzy
 msgid "Loading 3d raster map"
 msgstr "Peta raster hasil kode-ulang:"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 #, fuzzy
 msgid "failed"
 msgstr "Profil"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 #, fuzzy
 msgid "Unable to unload raster map"
 msgstr "Tidak berhasil memperbaharui peta vektor."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 #, fuzzy
 msgid "Unable to unload 3d raster map"
 msgstr "Tidak dapat memperbesar ke peta raster <%s>"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 #, fuzzy
 msgid "3d raster map"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, fuzzy, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Nilai casting '%(value)' ke %(tipe) gagal."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, fuzzy, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Tidak bisa membuat sebuah peta vektor baru <%s>."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -18384,836 +19013,836 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "Analisis LIDAR"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "Kuantisasi "
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 #, fuzzy
 msgid "Perspective:"
 msgstr "Karakteristik"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "Vertex"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "Render"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 #, fuzzy
 msgid "top"
 msgstr "Atas"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "Barat"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 #, fuzzy
 msgid "Reset to default view"
 msgstr "Kembalikan aturan ke standar"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Render"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "Ubah nama mapset"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "Pilih direktori data GRASS:"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 #, fuzzy
 msgid "Surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 #, fuzzy
 msgid "Vector"
 msgstr "Vektor"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 #, fuzzy
 msgid "Lighting"
 msgstr "Penyorotan"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 #, fuzzy
 msgid "Fringe"
 msgstr "Garis"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 #, fuzzy
 msgid "Mode:"
 msgstr "Mode"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 #, fuzzy
 msgid "fine"
 msgstr "Garis"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 #, fuzzy
 msgid "both"
 msgstr "Utara"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 #, fuzzy
 msgid "Shading:"
 msgstr "Snapping"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 #, fuzzy
 msgid "Set to all"
 msgstr "Kembalikan aturan ke standar"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "Bentuk garis"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "Resolusi Atas-Bawah"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Gaya"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 #, fuzzy
 msgid "surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "Garis"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 #, fuzzy
 msgid "Surface attributes"
 msgstr "Ubah atribut"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 #, fuzzy
 msgid "Transparency"
 msgstr "Transparans"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 #, fuzzy
 msgid "Reset"
 msgstr "Barat"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "Kembalikan aturan ke standar"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "Y coord"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "Y coord"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "Resolusi Atas-Bawah"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "Volume"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "Transparans"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 #, fuzzy
 msgid "Show vector lines"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 #, fuzzy
 msgid "Vector lines"
 msgstr "Pilih garis"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "Garis"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 #, fuzzy
 msgid "width:"
 msgstr "Lebar:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 #, fuzzy
 msgid "color:"
 msgstr "Warna: "
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Pilihan pengaturan"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 #, fuzzy
 msgid "Show vector points"
 msgstr "IDW dari peta vektor"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 #, fuzzy
 msgid "Vector points"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 #, fuzzy
 msgid "Icon:"
 msgstr "Tema ikon:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 #, fuzzy
 msgid "isosurfaces"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 #, fuzzy
 msgid "Resolution:"
 msgstr "Resolusi Atas-Bawah"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 #, fuzzy
 msgid "List of isosurfaces"
 msgstr "Daftar layer"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "Garis aliran "
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "Pilih sumber location:"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 #, fuzzy
 msgid "Brightness:"
 msgstr "Keragaman"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "Kelola warna citra"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 #, fuzzy
 msgid "Isosurface attributes"
 msgstr "Ubah atribut"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "Ubah atribut"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Perbaharui atribut"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 #, fuzzy
 msgid "N"
 msgstr "N:"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 #, fuzzy
 msgid "E"
 msgstr "E:"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "N:"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "N:"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "E:"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Daftar duplikasi"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Tambahkan layer"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "Garis"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Utara"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Selatan"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Deteksi tepian"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Utara"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Berat:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Timur"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Bawah"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "ERROR: Mapset <%s> tidak ada"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Pengaturan umum"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "Kembalikan pengaturan ke standar dan terapkan perubahan"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "Volume"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "Tahapan"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 #, fuzzy
 msgid "Position:"
 msgstr "Proyeksi:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 #, fuzzy
 msgid "Twist:"
 msgstr "Daftar "
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Pindahkan vertex "
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "Penyorotan"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "Warna garis"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 #, fuzzy
 msgid "Marker:"
 msgstr "Layer"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Pengesetan disimpan pada berkas '%s'."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -19223,7 +19852,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -19235,23 +19864,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -19259,7 +19888,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -19270,31 +19899,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -19309,68 +19938,68 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Toolbar Georektifikasi"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Titik perturbasi"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Ubah nama kolom"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Y coord"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Tampilkan grid"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Tidak ada kategori"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Tidak ada kategori"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Impor peta raster "
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Ubah tingkat opasitas"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -19380,213 +20009,221 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Tampilan ke batas region tersimpan"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Tidak ada layer peta yang dipilih untuk kueri."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "Hapus berkas elemen basis data dari mapset saat ini milik pengguna."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Berkas region <%s> sudah ada. Anda ingin menimpanya?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Peta vektor baru"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Pilih peta vektor"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Bersihkan GCP terpilih"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Kelola warna citra"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Pilih grup:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Pilih dengan kotak"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Pengaturan axis"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Pilih peta raster 3 (opsional):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Penambahan fitur baru untuk peta vektor <%s> gagal."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Peta raster:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Pilih jenis huruf tampilan standar"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Pilih peta raster untuk dibuat profil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Klasifikasi citra"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Kueri peta vektor/raster terpilih"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Apakah Anda hendak menghapus layer peta terpilih dari layer tree?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Tambahkan sebuah vertex baru"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Potongan melintang"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Pindahkan vertex "
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Pindahkan vertex "
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Hapus vertex "
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Hapus vertex "
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Tambahkan label"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Ubah nama mapset terpilih"
 
 #, fuzzy
+#~ msgid "Map layers"
+#~ msgstr "Layer peta"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Apakah Anda hendak membuat GRASS location <%s>?"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "ERROR: Mapset <%s> tidak ada"
 
@@ -19599,6 +20236,26 @@ msgstr "Ubah nama mapset terpilih"
 #~ msgstr "Keluar GUI"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Region tidak valid"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Toolbar digitasi vektor"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Rentang yang valid"
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Ubah nama "
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Salin tabel"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Daftar layer"
 
@@ -19615,16 +20272,35 @@ msgstr "Ubah nama mapset terpilih"
 #~ msgstr "Statistik raster univariat"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "Tambah kolom"
+#~ msgid "Load settings:"
+#~ msgstr "Perlihatkan pengaturan "
+
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Tidak dapat melakukan render layer peta <%s>."
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Tidak dapat merender overlay <%s>."
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Tampilkan layer peta ke dalam layer tree"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Impor vektor GRASS versi lama"
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Tampilkan layer peta ke dalam layer tree"
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Impor vektor GRASS versi lama"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Impor peta vektor GRASS versi lama."
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "Impor GPSBabel GPS"
+
+#~ msgid "GEOnet import"
+#~ msgstr "Impor GEOnet"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -19648,40 +20324,27 @@ msgstr "Ubah nama mapset terpilih"
 #~ msgstr "Ekspor beragam format dengan OGR"
 
 #, fuzzy
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "Tentukan region komputasi dari peta terpilih (abaikan NULL)"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Impor vektor GRASS versi lama"
+#~ msgid "Create optimally placed labels"
+#~ msgstr "Buat label"
 
-#, fuzzy
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Impor vektor GRASS versi lama"
+#~ msgid "Bit pattern comparison "
+#~ msgstr "Perbandingan pola bit "
 
 #, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Impor peta vektor GRASS versi lama."
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Attribute Table Manager"
 
 #, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Impor GPSBabel GPS"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Impor GEOnet"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Pilih sumber mapset:"
 
 #, fuzzy
-#~ msgid "Create optimally placed labels"
-#~ msgstr "Buat label"
-
-#~ msgid "Bit pattern comparison "
-#~ msgstr "Perbandingan pola bit "
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "Tentukan region komputasi dari peta terpilih (abaikan NULL)"
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "Volume"
+#~ msgid "Add default servers"
+#~ msgstr "Tambahkan grup layer"
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "Pilih location dan mapset proyek"
@@ -19733,10 +20396,6 @@ msgstr "Ubah nama mapset terpilih"
 #~ msgstr "Jalankan GRASS"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "Buat mapset"
-
-#, fuzzy
 #~ msgid "&Location wizard"
 #~ msgstr "Location wizard"
 
@@ -19760,12 +20419,26 @@ msgstr "Ubah nama mapset terpilih"
 #~ msgstr "Peringatan"
 
 #, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "Pilih location dan mapset proyek"
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Bangun peta raster"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Tampilkan layer peta ke dalam layer tree"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Tampilkan layer peta ke dalam layer tree"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Impor peta vektor GRASS versi lama."
 
 #~ msgid "Vector to volume"
 #~ msgstr "Vektor ke volume "
 
+#~ msgid "Sites to vector"
+#~ msgstr "Titik ke vektor "
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "Kalkulator peta raster 3D"
@@ -19791,11 +20464,9 @@ msgstr "Ubah nama mapset terpilih"
 #~ msgid "Voxel statistics"
 #~ msgstr "Statistik umum"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Impor peta vektor GRASS versi lama."
-
-#~ msgid "Sites to vector"
-#~ msgstr "Titik ke vektor "
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Volume"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -19838,5 +20509,5 @@ msgstr "Ubah nama mapset terpilih"
 #~ "null."
 
 #, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Attribute Table Manager"
+#~ msgid "Digitize"
+#~ msgstr "Digitasi garis baru "
diff --git a/locale/po/grasswxpy_it.po b/locale/po/grasswxpy_it.po
index 8c65ff5..4ff77b3 100644
--- a/locale/po/grasswxpy_it.po
+++ b/locale/po/grasswxpy_it.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_it\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2015-03-29 10:08+0100\n"
 "Last-Translator: Luca Delucchi <lucadeluge at gmail.com>\n"
 "Language-Team: Italian <grass-translations at lists.osgeo.org>\n"
@@ -19,23 +19,23 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Poedit 1.6.10\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Scegli la cartella dei dati GRASS GIS"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Seleziona GRASS location"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Seleziona mapset di GRASS"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "La directory del database di GRASS GIS contiene Location.  "
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -44,7 +44,7 @@ msgstr ""
 "(proiezione). Una Location può essere un progetto. Location contiene i "
 "Mapset."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
@@ -52,29 +52,29 @@ msgstr ""
 "Il Mapset contiene i dati GIS relativi a un progetto, attività divisi per "
 "progetto, sottoregione o utente."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Avvia sessione di GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Naviga"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "&Nuovo"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "Crea un nuovo Mapset nella Location selezionata"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "N&uovo"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
@@ -83,125 +83,125 @@ msgstr ""
 "sarà creata correttamente, la sessione di GRASS sarà avviata."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Ri&nomina"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Rinomina la location selezionata"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "E&limina"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Elimina la location selezionata"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Rinomina"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Rinomina il mapset selezionato"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "&Elimina"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Elimina il mapset selezionato"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Avvio%s di GRASS GIS %s"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Entra nella sessione di GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Errore"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 "Impossibile impostare il database di GRASS. Controlla le tue impostazioni "
 "locali."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "ERROR: Location <%s> non trovata\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "ERROR: Mapset <%s> non trovato\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Linea non valida nel file GISRC (%s): %s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Errore: {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr "Vuoi importare <%(name)s> nella nuova location creata?"
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "Importare dati?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Si vuole creare un nuovo mapset?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Crea un nuovo mapset"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Location <%s> creata!"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "Vuoi impostare l'estensione e la risoluzione della region di default ora?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
@@ -210,7 +210,7 @@ msgstr ""
 "Importazione di <%(name)s> fallita.\n"
 "Motivazione: %(msg)s"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
@@ -219,7 +219,7 @@ msgstr ""
 "Il file dei dati <%(name)s> è stato importato correttamente. La regione di "
 "default della location è stata impostata dalla mappa importata."
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -229,7 +229,7 @@ msgstr ""
 "\n"
 "Questo mapset non può essere rinominato."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -240,12 +240,12 @@ msgstr ""
 "\n"
 "Inserisci il nuovo nome:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Messaggio"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -256,7 +256,7 @@ msgstr ""
 "\n"
 "Il mapset <%s> esiste già nella location."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -267,7 +267,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -278,7 +278,7 @@ msgstr ""
 "\n"
 "La location <%s> esiste già nel database di GRASS"
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -289,7 +289,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -299,7 +299,7 @@ msgstr ""
 "\n"
 "Questo mapset non può essere cancellato."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -312,11 +312,11 @@ msgstr ""
 "\n"
 "TUTTE LE MAPPE incluse in questo mapset saranno ELIMINATE DEFINITIVAMENTE!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Impossibile eliminare il mapset"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -327,18 +327,18 @@ msgstr ""
 "\n"
 "TUTTE LE MAPPE incluse in questo mapset saranno ELIMINATE DEFINITIVAMENTE!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Impossibile eliminare la location"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 "Impossibile impostare il database di GRASS. Controlla le tue impostazioni "
 "locali."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
@@ -347,25 +347,25 @@ msgstr ""
 "Nessuna Location di GRASS trovata in '%s'. Creare una nuova Location o "
 "scegliere una differente directory del database di GRASS "
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "La directory '%s' non esiste."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Selezionare cartella del database GIS"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Inserisci il nome per il nuovo mapset:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Il Mapset <%s> esiste già."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -378,16 +378,16 @@ msgstr ""
 "\n"
 "Siete realmente sicuri che volete creare questo mapset? "
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr "Nome del mapset riservato"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Impossibile creare il nuovo mapset: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -406,11 +406,11 @@ msgstr ""
 "Vuoi rimuovere .gislock (bisogna avere il permesso per questa operazione) e "
 "continuare?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "Lock file trovato"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -422,7 +422,7 @@ msgstr ""
 "Se si sta eseguendo un'altra sessione di GRASS si potrebbero corrompere i "
 "vostri dati. Controllate il gestore dei processi per essere sicuri..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -433,7 +433,7 @@ msgstr ""
 "\n"
 "Dettagli: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
@@ -442,11 +442,11 @@ msgstr ""
 "Il nome <%(name)s> non è un nome valido per Location o Mapset. Utilizzare "
 "solo carattere ASCII escludendo %(chars)s e spazi"
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Nome invalido"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -470,129 +470,129 @@ msgstr ""
 "Caricamento della librerie di immagini fallito.\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Barra degli strumenti della mappa"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr "Barra degli strumenti della digitalizzazione"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr "Anteprima display"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr "Visualizza aree di training"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 msgid "Display synchronization ON"
 msgstr "Sincronizzazione del display ON"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr "Sincronizzazione del display OFF"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr "Tutti i cambiamenti saranno persi. Si vuole continuare?"
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importa mappa vettoriale"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Nessuna area nel vettoriale <%s>.\n"
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Impossibile aprire vettoriale <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Impossibile copiare gli elementi del vettoriale da<%s>"
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 msgid "Unable to open temporary vector map"
 msgstr "Impossibile aprire il vettoriale temporaneo"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr "Nessuna area di training da esportare."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr "Creazione del vettoriale temporaneo fallito."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr "Analisi fallita"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr "risultati"
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr "Nessuno gruppo di immagini selezionato."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
@@ -601,44 +601,44 @@ msgstr ""
 "Il file della signature denomito %s esiste già.\n"
 "Si vuole sovrascrivere?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Il file esiste già"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr "Nessun gruppo di immagini selezionato. Operazione cancellata."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr "Nessun'area selezionata. Operazione cancellata."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 "Gli elementi del vettoriale sono al di fuori del raster. Operazione "
 "cancellata."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Istogrammi"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 msgid "Scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -647,94 +647,94 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr "Nessuna classe selezionata"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr "Nome del sotto gruppo richiesto"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, python-format
 msgid "Group <%s> not found"
 msgstr "Gruppo <%s> non trovato"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Sotto gruppo <%s> non trovato"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Raster <%s> non trovato"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Vettoriale <%s> non trovato."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Caricando raster <%s>..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, python-format
 msgid "Loading training map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr "Seleziona gruppo di immagini"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Crea/modifica gruppo..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr "Nome del gruppo di immagini mancante."
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr "Nome del gruppo di immagini:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 msgid "Name of imagery subgroup:"
 msgstr "Nome del sotto gruppo di immagini:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr "Scegliere un sottogruppo."
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Sotto gruppo <%s> non trovato nel gruppo <%s>"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
@@ -743,7 +743,7 @@ msgstr ""
 "Nessun dato trovato nel sottogruppo <%s> del gruppo <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
@@ -752,471 +752,472 @@ msgstr ""
 "Nessun dato nel gruppo <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr "Manca il nome della mappa."
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Nome del raster:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Nome del vettoriale:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr "Gestore di classi"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "Classi"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr "Nome della classe"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Colore"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr "Usare solo caratteri ASCII"
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr "Inserire il nome del nuovo vettoriale:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr "Esporta tabella degli attributi"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr ""
 "Esporta tabella degli attributi contenente i dati delle statistiche calcolate"
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Vettoriale <%s> esiste già. Si vuole sovrascriverlo?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr "Vettoriale <%s> esiste"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr "Imposta il livello di opacità"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 msgid "Remove selected map layer"
 msgstr "Elimina il layer selezionato"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 msgid "Export training areas to vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 msgid "Import training areas from vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Aggiungi RGB layer"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Anteprima"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr "Imposta l'area di mappa per"
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr "/ Zoom alla mappa"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Aggiungi raster"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS Map Swipe "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr "Barra degli strumenti principale"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Barra degli strumenti generale"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr "Mappa <%s> non trovata."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Mappa <%s> non trovata."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Niente da visualizzare (mappa vuota). Operazione cancellata"
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Scegli il nome del file dove salvare l'immagine (non bisogna aggiungere "
 "l'estensione)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 "Nessun raster o mappa vettoriale selezionata per interrogazione del layer."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 msgid "Select raster maps"
 msgstr "Seleziona mappe raster"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 msgid "Name of top/left raster map:"
 msgstr "Nome del raster alto/sinistra:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 msgid "Name of bottom/right raster map:"
 msgstr "Nome del raster basso/destra:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr "Passa alla modalità avanzata"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr "Cancella"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr "Passa alla modalità semplice"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Chiudi"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr "Nome della prima mappa è mancante."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr "Il nome della secondo mappa manca."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 msgid "Map Swipe settings"
 msgstr "Impostazioni Map Swipe"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr "Modalità specchio"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Colore:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr "Forma:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Grandezza linea:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Dimensione:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Strumenti"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr "Esci dal Map Swipe"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Interroga raster/vettoriale"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Interroga raster/vettoriale selezionate"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr "Modalità swipe"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 msgid "Choose view mode"
 msgstr "Scegli modalità di vista"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 msgid "Switch orientation"
 msgstr "Inverti orientamento"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr "Inverti mappe"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "GRASS GIS Gestore Punti di Controllo sul Terreno"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "Lista GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "Visualizza sorgente"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "Visualizza targer"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "Barra degli strumenti Visualizzatore GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Barra degli strumente Gestore GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Impostazione della pagina"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Anteprima di stampa"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Stampa il display"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Zoom alla regione computazionale (impostata con g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Zoom alla region di default"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Zoom alla region salvata"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Imposta la regione computazionale dal display"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Salva le geometrie del display alla regione denominata"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Vai al GCP No."
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Range valido:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "Errore RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Successivo: %(forw)s, Precedente: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Impostazioni per la georettifica"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Impostazioni per la georettifica cancellate."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Seleziona il tipo di mappa e location/mapset"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Tipo della mappa da georettificare"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vettoriale"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Seleziona location di partenza"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Seleziona mapset di partenza"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Devi selezionare una location valida prima di selezionare un mapset"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "Devi selezionare una location e un mapset validi per continuare"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Seleziona immagine/gruppo di immagini da georettificare"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Seleziona gruppo:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Crea gruppo se non esiste"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Aggiungi mappa vettoriale al gruppo..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Estensione per la mappa di output"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Devi selezionare un immagine/gruppo di immagini validi per continuare"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Per poter continuare devi inserire il nome dell'estensione della mappa"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 "Seleziona mappa da visualizzare per creare i punti di controllo sul terreno "
 "(GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Seleziona mappa sorgente da visualizzare:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr "Seleziona raster target da visualizzare:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr "Seleziona vettoriale target da visualizzare:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Devi selezionare una mappa sorgente per continuare"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1225,28 +1226,28 @@ msgstr ""
 "Nessuna mappa nel gruppo <%s> selezionato. \n"
 "Editare il gruppo o selezionarne un altro."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Gestione Punti di Controllo sul Terreno"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Sono richiesti almeno %d GCPs. Operazione cancellata."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "sorgente"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "destinazione"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Imposta coordinate GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1259,28 +1260,28 @@ msgstr ""
 "Est: %(coor0)s \n"
 "Nord:%(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Scrittura del file POINTS fallita"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "File POINTS salvato per il group <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "sorgente del mapwin non definita"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "destinazione del mapwin non definita"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Lettura file POINTS fallita"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1295,38 +1296,38 @@ msgstr ""
 "6+ punti per II ordine, e\n"
 "10+ punti per III ordine."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rettifica immagine, attendere..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Sto trasformando <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rettifica vettoriale <%s>, attendere..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Georettifica della mappa vettoriale <%s> fallita"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "Impostazione del Gestore GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Esci dal manager GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Salva punti di controllo sul terreno?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
@@ -1334,7 +1335,7 @@ msgstr ""
 "Non è possibile calcolare l'errore RMS.\n"
 "Possibile un errore con m.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
@@ -1342,116 +1343,116 @@ msgstr ""
 "Non è possibile calcolare la nuova estensione.\n"
 "Possibile un errore con m.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Aggiusta il display di sorgente al display del destinazione"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Aggiusta il display di destinazione al display del sorgente"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "usare"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "sorgente E"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "sorgente N"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "destinazione E"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "destinazione N"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Errore successivo"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Errore precedente"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Valore della coordinate invalido. Operazione cancellata."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Crea gruppo vettoriale"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Seleziona mappa/e vettoriale/i da aggiungere al gruppo:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Modifica GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Punto di controllo sul terreno."
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "sorgente E:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "destinazione E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "sorgente N:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "destinazione N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Applica i cambiamenti per la sessione corrente"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr "Applica e salva cambiamenti per le impostazione per l'utente"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Chiudi dialogo"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Simbologia"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Evidenzia solo gli errori con scarto quadratico medio più elevato"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Evidenzia gli errori dello scarto quadratico medio > M + SD * fattore:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1462,64 +1463,64 @@ msgstr ""
 "media + deviazione standard * fattore assegnato.\n"
 "Valori raccomandati per questo fattore sono compresi tra 1 e 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Impostazioni dei simboli"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Coloro per l'errore dello scarto quadratico medio errore:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Colore per GCP selezionati:"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Colore per GCP non selezionati:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Mostra GCPs non usati"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Dimensione dei simboli:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Rettificazione"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "Seleziona l'ordine di rettificazione"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "I grado"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "II grado"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "III grado"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Seleziona metodo di interpolazione:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "adatta la regione computazionale nella location di destinazione"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "La soglia del fattore dello scarto quadratico medio dev'essere > 0"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1527,21 +1528,21 @@ msgstr ""
 "La soglia del fattore dello scarto quadratico è < 1\n"
 "Troppi punti potrebbero essere evidenziati"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Impostazione del Gestore GCP salvate nel file '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 msgid "GRASS GIS Vector Digitizer"
 msgstr "GRASS GIS Digitalizzatore vettoriale"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Digitalizzatore vettoriale non disponibile. %s"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
@@ -1550,17 +1551,17 @@ msgstr ""
 "Vettoriale <%s> non trovato nel mapset corrente. Un nuovo vettoriale può "
 "essere creato utilizzando l'opzione '-c'"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Nuova mappa vettoriale <%s> creata"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Impossibile creare mappa vettoriale <%s>"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1571,257 +1572,257 @@ msgstr ""
 "dal digitalizzatore. Vuoi ricostruire la topologia (richiede più tempo) e "
 "aprire il vettoriale per l'editing?"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Topologia mancante"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Aggiorna categorie"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Nessuna mappa vettoriale selezionate per l'editing"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 "Niente da fare. Scegliere lo strumento appropriato dalla barra degli "
 "strumenti del digitalizzatore."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Impostazione della digitalizzazione"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Applica cambiamenti per questa sessione"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 "Chiudi dialogo e salva cambiamenti nel file per le impostazione dell'utente "
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Chiudi e ignora i cambiamenti"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Generale"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Visualizza"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Grandezza linea"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Snap"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Soglia di snap"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "pixels dello schermo"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "unità della mappa"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Snap ai vertici"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "La soglia di snap è %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Selezione elemento vettoriale"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Seleziona soglia"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Seleziona solo elementi all'interno della bounding box di selezione"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 "Di default sono selezionati tutti gli elementi sovrapposti alla bounding box "
 "di selezione"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Controlla duplicati"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr "Digitalizza linee/confini"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Spezza linee all'intersezione"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr "Digitalizza aree"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Salva cambiamenti"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Salva cambiamenti in uscite"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Strumento interrogazione"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Scegli strumento di interrogazione"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Seleziona con box"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "lunghezza"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Selezione linee"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "più corto di"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "più lungo di"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "dangle"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Seleziona sporgenze"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Attributi"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Digitalizza nuovo elemento"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Aggiungi record nella tabella"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Layer"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Modalità"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Prossimo da usare"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Numero di categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Tipologia di categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Inserisci manualmente"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Nessuna categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Elimina elemento/i esistente/i"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Elimina record dalla tabella"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Attributi della geometria"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "area"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "perimetro"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
@@ -1829,111 +1830,111 @@ msgstr ""
 "Nota: Queste impostazioni sono salvate nell'ambiente di lavoro e non nelle "
 "preferenze del digitalizzatore di vettori."
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Digitalizza un nuovo segmento lineare"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Digitalizza una nuova linea/boundary"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Evidenziato"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Evidenzia (duplicati)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Punto"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Linea"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Confine (no area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Confine (un'area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Confine (due aree)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centrode (in area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centrode (fuori area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroide (duplicato in area)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Nodo (una linea)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Node (due linee)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vertice"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Area (confine chiuso + centroide)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Direzione"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Snap disabilitato"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "La soglia di snap è %(value).1f %(units)s (basata sulla risoluzione "
 "computazionale)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Impostazione del digitalizzatore dei vettori salvato nel file <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Errore nella digitalizzazione"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Impossibile aprire vettoriale <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "Nessuno vettoriale aperto per l'editing."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1944,23 +1945,23 @@ msgstr ""
 "\n"
 "Motivazione: %s"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Lettura dell'elemento con id %d fallita. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Connessione al database %d non disponibile. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 "Impossibile avviare il driver del database <%s>. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
@@ -1968,57 +1969,57 @@ msgstr ""
 "Impossibile aprire database <%(db)s> con il driver <%(driver)s>. Operazione "
 "cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Impossibile eseguire la query SQL '%s'. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Elemento con id %d è marcato come morto. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Tipologia dell'elemento %d non supportata. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Tipologia dell'elemento '%s' sconosciuta"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "Non ci sono abbastanza punti per linea"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Lista delle categorie - clicca tasto destro per eliminare"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Aggiungi nuova categoria"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Applica cambiamenti"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignora cambiamenti e chiudi dialogo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Applica cambiamenti e chiudi dialogo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Feature id:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2029,246 +2030,246 @@ msgstr ""
 "Numero di layer e categoria dev'essere intero.\n"
 "Numero di layer dev'essere maggiore di zero"
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Elimina selezionato"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Elimina tutto"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Ricarica"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Impossibile aggiornare mappa vettoriale."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d linee selezionate per etichettatura di massa"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Imposta valore"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Valore iniziale"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Step"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Lista dei duplicati"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Id dell'elemento"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Layer (Categorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr "Strumento per la selezione di area/confine/centroide"
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Digitalizza un nuovo punto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Sinistro: nuovo punto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Digitalizza una nuova linea"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Sinistro: nuovo punto; Ctrl+Sinistro: torna all'ultimo punto; Destro: chiudi "
 "linea"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Digitalizza un nuovo boundary"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Digitalizza un nuovo centroide"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr "Digitalizza nuova area (confine senza categoria)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr "Aggiungi nuovo vertice a linee o confini"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Sinistro: Seleziona; Ctrl+Sinistro: Deseleziona; Destro: Conferma"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Elimina punti, linee, confini, centroidi selezionati"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr "Elimina le aree selezionate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Visualizza/aggiorna attributi"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Sinistro: Seleziona"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Visualizza/aggiorna categorie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 msgid "Edit selected line/boundary"
 msgstr "Modifica la linea/confine selezionato"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Muove i punti, linee,  perimetri o centroidi selezionati"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr "Muovi vertice selezionato"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 msgid "Remove selected vertex"
 msgstr "Rimuove il vertice selezionato"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Esci dal digitalizzatore"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Esci dal digitalizzatore e salva i cambiamenti"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Manuale del Digitalizzatore Vettoriale"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Visualizza il manuale del Digitalizzatore Vettoriale"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Strumenti addizionali (copia, flip, connessione, ecc.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Indietro"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Indietro al cambiamento precedente"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr "Indietro al cambiamento precedente"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Spezza le linee/aree selezionate all'intersezione"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Connetti linee/aree selezionate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Copia categorie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Copia elemento dalla mappa vettoriale (in background)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Copia attributi"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Conversione tipologia dell'elemento"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Inverti le linee/confini selezionati"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Unisci le linee/aree selezionate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Scollega linee/perimetri selezionati (solo nei nodi)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Dividi linea/confine"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Interroga elemento"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Etichetta Z-bulk delle linee 3D"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 msgid "Select background vector map"
 msgstr "Seleziona sfondo per la mappa vettoriale"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "La mappa vettoriale non è 3D. Operazione cancellata."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Seleziona mappa vettoriale"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2281,18 +2282,18 @@ msgstr ""
 "Vuoi ricostruire la topologia (richiede un po' di tempo) e aprire il "
 "vettoriale per l'editing?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr "Errore nella digitalizzatore"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 "Per favore aspettare, sta caricando la mappa vettoriale <%s> per "
 "l'editing...."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
@@ -2300,49 +2301,50 @@ msgstr ""
 "Tipologia dell'elemento '%(type)s' non supportata. Impossibile modificare il "
 "layer OGR <%(layer)s>."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr "Digitalizzatore vettoriale"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Vuoi salvare i cambiamenti nella mappa vettoriale <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Salva cambiamenti?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Per favore aspettare, si sta chiudendo e si sta ricostruendo la topologia "
 "della mappa vettoriale <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Editing del vettoriale <%s> è finito correttamente"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Nuova mappa vettoriale"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr "Misurazione finita"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2351,15 +2353,15 @@ msgstr ""
 "Clicca e trascina con il bottone sinistro del mouse per misurare. %sDoppio "
 "click con il bottone sinistro per cancellare"
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Misura distanza"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Misura distanza:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
@@ -2368,132 +2370,150 @@ msgstr ""
 "La distanza geodesica non è ancora disponibile.\n"
 "Ragione: %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segmento"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "Distanza totale"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "orientamento"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr "Misura area:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr "Unità non riconosciute, misurazione fallita."
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr "Area: {area} {unit}\n"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr "legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr "barra della scala"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr "freccia del nord"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr "Coordinate copiate negli appunti"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Nascondi tutte le barre degli strumenti"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "Visualizza tutte le barre degli strumenti"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr "Nascondi barra dello stato"
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+msgid "Show statusbar"
+msgstr "Mostra barra dello stato"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Nascondi {overlay}"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 msgid "Resize legend"
 msgstr "Ridimensiona legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Per favore aspettare, esportando immagine..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Zoom all'estensione della regione salvata"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 msgid "Set compulational region from named region"
 msgstr "Imposta la regione computazionale dalla regione salvata"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Region <%s> non trovata. Operazione cancellata"
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Salva l'estensione del display in un file"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 msgid "Save computational region to region file"
 msgstr "Salva la ragione computazionale in un file"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Il file della regione <%s> esiste gi?. Vuoi sovrascriverlo?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Attenzione"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
@@ -2501,32 +2521,32 @@ msgstr ""
 "Installare Python Imaging Library (PIL)\n"
 "per un miglior controllo della legenda e altre decorazioni."
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Mostra oggetto testuale"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr "Testo:"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotazione:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Font:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Imposta font"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2534,74 +2554,413 @@ msgstr ""
 "Trascina il testo con il mouse in modalità puntatore per posizionarlo.\n"
 "Dai un doppio clic per modificare le opzioni."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Impossibile leggere l'istruzione %s"
+
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Impossibile leggere l'istruzione %s"
+
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+"Il raster <%s> esiste già nel corrente mapset. Si vuole sovrascriverlo?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Sovrascrivi?"
+
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "Seleziona location e mapset di GRASS"
+
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+msgid "New name"
+msgstr "Nuovo nome"
+
+#: ../gui/wxpython/datacatalog/tree.py:599
+msgid "Rename map"
+msgstr "Rinomina mappa"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Modalità di editing"
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Si sta ridisegnando il modello...."
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Nessuna mappa vettoriale selezionate per l'editing"
+
+#: ../gui/wxpython/datacatalog/tree.py:659
+msgid "Copy map"
+msgstr "Copia mappa"
+
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Impossibile copiare il layer: tipologia non valida."
+
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "%s <%s> esiste già nel corrente mapset. Si vuole sovrascriverlo?"
+
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Elaborando i nodi..."
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "adatta la regione computazionale nella location di destinazione"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid ""
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:765
+msgid "Delete map"
+msgstr "Elimina mappa"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Eliminando"
+
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "rimuove duplicati"
+
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Visualizzando"
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "Mostra regione computazionale"
+
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "Le mappe possono essere create solo nel mapset corrente"
+
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
+msgstr "&Copia"
+
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+msgid "&Paste"
+msgstr "&Incolla"
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+msgid "&Display layer"
+msgstr "&Visualizza layer"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Inverti mappe"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS GIS Calcolatore per Raster 3D Map Algebra"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS GIS Calcolatore per Raster 3D Map Algebra"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
+#, python-format
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
+"Location corrente è <%(loc)s>.\n"
+"Mapset corrente è <%(mapset)s>."
+
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr "Mapset corrente è <%s>"
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
+msgid "Data catalog"
+msgstr "Catalogo dei dati"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Nome della GRASS location"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Clicca per editare le impostazione del layer"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Cerca modulo"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+msgid "Please select first the raster map"
+msgstr "Selezionare prima il raster"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+msgid "Do you want to save changes?"
+msgstr "Si vuole salvare i cambiamenti?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+msgid "Save raster map changes"
+msgstr "Salva cambiamenti del raster"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+msgid "Failed to create backup copy of edited raster map."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:397
+msgid "Failed to create new raster map."
+msgstr "Impossibile creare nuovo raster."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+msgid "Rasterizing..."
+msgstr "Rasterizzando..."
+
+#: ../gui/wxpython/rdigit/controller.py:556
+msgid "Failed to set default color table for edited raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+msgid "Create new raster map"
+msgstr "Crea nuovo raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+msgid "Name for new raster map:"
+msgstr "Nome del nuovo raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+msgid "Optionally select background raster map:"
+msgstr "Eventualmente seleziona lo sfondo del raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+msgid "New raster map type:"
+msgstr "Tipologia del nuovo raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+msgid "Please specify name for a new raster map"
+msgstr "Specificare il nome del nuovo raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"Il raster <%s> esiste già nel corrente mapset. Si vuole sovrascriverlo?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+msgid "Digitize area"
+msgstr "Digitalizza area"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+msgid "Digitize line"
+msgstr "Digitalizza linea"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+msgid "Digitize point"
+msgstr "Digitalizza punto"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+msgid "Save raster map"
+msgstr "Salva raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+msgid "Quit raster digitizer"
+msgstr "Esci dal digitalizzatore raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+msgid "Select raster map"
+msgstr "Seleziona raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+msgid "Cell value:"
+msgstr "Valori della cella:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Larghezza:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+msgid "New raster map"
+msgstr "Nuovo raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
 msgid "GRASS GIS Graphical Modeler"
 msgstr "GRASS GIS Modeler Grafico"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
+#: ../gui/wxpython/gmodeler/frame.py:146
 msgid "Model"
 msgstr "Modello"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
+#: ../gui/wxpython/gmodeler/frame.py:149
 msgid "Items"
 msgstr "Elementi"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
 msgid "Variables"
 msgstr "Variabile"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
+#: ../gui/wxpython/gmodeler/frame.py:157
 msgid "Python editor"
 msgstr "Editor Python"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
 msgid "Command output"
 msgstr "output del comando"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
+#: ../gui/wxpython/gmodeler/frame.py:243
 msgid "Python script contains local modifications"
 msgstr "Lo script Python contiene modifiche locali"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
 msgid "Python script is up-to-date"
 msgstr "Lo script Python è aggiornato"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
+#: ../gui/wxpython/gmodeler/frame.py:262
 msgid "Redrawing model..."
 msgstr "Si sta ridisegnando il modello...."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/gmodeler/frame.py:298
 msgid "Do you want to save changes in the model?"
 msgstr "Vuoi salvare i cambiamenti nel modello?"
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/gmodeler/frame.py:300
 msgid "Do you want to store current model settings to model file?"
 msgstr "Vuoi salvare le impostazioni del modello correnti in un file?"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
+#: ../gui/wxpython/gmodeler/frame.py:306
 msgid "Quit Graphical Modeler"
 msgstr "Esci dal Modellizzatore Grafico"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/gmodeler/frame.py:360
 msgid "No intermediate data to delete."
 msgstr "Nessun dato intermediario da eliminare."
 
-#: ../gui/wxpython/gmodeler/frame.py:322
+#: ../gui/wxpython/gmodeler/frame.py:366
 #, python-format
 msgid "Do you want to permanently delete data?%s"
 msgstr "Vuoi eliminare permanentemente i dati?%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
+#: ../gui/wxpython/gmodeler/frame.py:368
 msgid "Delete intermediate data?"
 msgstr "Elimina dati intermediari?"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
+#: ../gui/wxpython/gmodeler/frame.py:385
 #, python-format
 msgid "%d maps deleted from current mapset"
 msgstr "%d mappe eliminate dal mapset attuale"
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
 msgid ""
 "Current model is not empty. Do you want to store current settings to model "
 "file?"
@@ -2609,51 +2968,51 @@ msgstr ""
 "Il modello corrente non è vuoto. Vuoi salvare le impostazioni correnti in un "
 "file?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
 msgid "Create new model?"
 msgstr "Crea un nuovo modelo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/gmodeler/frame.py:443
 msgid "Choose model file"
 msgstr "Scegli file del modello"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
 msgid "GRASS Model File (*.gxm)|*.gxm"
 msgstr "FIle del modello di GRASS (*.gxm)|*.gxm"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
+#: ../gui/wxpython/gmodeler/frame.py:466
 #, python-format
 msgid "%(items)d items (%(actions)d actions) loaded into model"
 msgstr "%(items)d elementi (%(actions)d actions) caricati nel modello"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
 #, python-format
 msgid "Model file <%s> already exists. Do you want to overwrite this file?"
 msgstr "Il file del modello <%s> esiste già. Vuoi sovrascrivvere questo file?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
 msgid "Save model"
 msgstr "Salva modello"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
 #, python-format
 msgid "File <%s> saved"
 msgstr "File <%s> salvato"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/gmodeler/frame.py:503
 msgid "Choose file to save current model"
 msgstr "Scegli il file dove salvare il modello attuale"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
+#: ../gui/wxpython/gmodeler/frame.py:604
 msgid "Model is empty. Nothing to validate."
 msgstr "Il modello è vuoto. Niente da validare."
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
 msgid "Validating model..."
 msgstr "Si sta validando il modello..."
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/gmodeler/frame.py:614
 #, python-format
 msgid ""
 "Model is not valid.\n"
@@ -2664,33 +3023,33 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
+#: ../gui/wxpython/gmodeler/frame.py:618
 msgid "Model is valid."
 msgstr "Il modello è valido"
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
 #, python-format
 msgid "Model exported to <%s>"
 msgstr "Il modello esportato a <%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
 msgid "Comment:"
 msgstr "Nota:"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
 msgid "Add comment"
 msgstr "Aggiungi nota"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr "Commento vuoto. Niente da aggiungere al modello."
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "Modellizzatore Grafico wxGUI"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2703,187 +3062,188 @@ msgstr ""
 "\n"
 " %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "Per favore aspettare, caricamento modello..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "Scrittura delle impostazioni correnti nel file del modello fallita."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Impossibile aprile il file <%s> per scriverlo."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Rimuovi"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Disattiva"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Attiva"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr "Imposta etichetta"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr "Imposta commento"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Aggiungi Punto di controllo sul terreno"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Rimuovi punti di controllo sul terreno"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "Intermedio"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Proprietà"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "Etichetta:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Lista delle variabili - click-destro per eliminare"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Nome"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Tipo dei dati"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Valore di default"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Descrizione"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Aggiungi nuova variabile"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "intero"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "float"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "stringa"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "regione"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "file"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Aggiungi nuova variabile al modello"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Lista degli elementi - click-destro per eliminare"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Etichetta"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parametri"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 msgid "No items to selected."
 msgstr "Nessuna elemento selezionata."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Python script"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Esegui"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Esegui script python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Salva lo script python in un file"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2891,29 +3251,35 @@ msgstr ""
 "Aggiorna lo script Python basato sul modello.\n"
 "Le modifiche locali saranno scartate."
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Impossibile lanciare lo script Python. %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Scegli il file da salvare"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Python script (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Il file <%s> esiste già. Vuoi sovrascrivvere questo file?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Salva file"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
@@ -2921,167 +3287,158 @@ msgstr ""
 "Lo script Python è modificato localmente. Aggiornando saranno scartate tutte "
 "le modifiche. Vuoi continuare comunque?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Aggiorna"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Impostazione del Modellizzatore"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Proprietà dell'oggetto"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Disabilitato:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Valido:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Invalido:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Eseguendo:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Dimensione dello shape"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Larghezza:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Altezza:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Dati"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tipe"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "Raster 3D:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Vettoriale:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabella"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Ciclo"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr "Nota"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Proprietà del modello"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadati"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Comandi"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Permetti al file di output di sovrascrivere file esistenti"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Applica proprietà"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Nome:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Descrizione:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autore(i):"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "modello"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Script generato dal Modellizzatore Grafico wxGUI"
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "variabile non definita '%s'"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Si sta eseguendo il modello..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Il modello è vuoto. Niente da eseguire."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3092,86 +3449,86 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Eseguire modello?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr "Le seguenti variabili non sono definite:"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Mappe raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "Mappe raster 3D"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Mappe Vettoriali"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "sconosciuto"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<non definito>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Condizione:"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Condizione: non definito"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Parametri del modello"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr "Elimina dati intermediari quando finito"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Proprietà dei dati"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Nome dell'elemento:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "Tipologia dell'elemento:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "Aggiungi comando di GRASS al modello"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr "Etichetta e commento"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3181,7 +3538,7 @@ msgstr ""
 "\n"
 "Impossibile aggiungere la nuova azione al modello."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3192,32 +3549,32 @@ msgstr ""
 "\n"
 "Impossibile aggiungere la nuova azione al modello."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Proprietà della relazione"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "Da"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "A"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Data: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Comando:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Opzione:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3225,7 +3582,7 @@ msgstr ""
 "La relazione non incomincia con un dato.\n"
 "Impossibile aggiungere la relazione."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3233,7 +3590,7 @@ msgstr ""
 "La relazione non punta ad un comando di GRASS.\n"
 "Impossibile aggiungere la relazione."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3241,69 +3598,69 @@ msgstr ""
 "Nessuna rilevante opzione trovata.\n"
 "Impossibile aggiungere la relazione."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Condizione"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Proprietà del ciclo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Lista degli elementi nel ciclo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Serie"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "Definisce serie di mappe come condizione per il ciclo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "Definisce serie di mappe"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "Proprietà if-else"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Lista degli elementi nel blocco 'if'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Lista degli elementi nel blocco 'else'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 "La variabile <%s> esiste già nel modello. Aggiunta della variabile fallita."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Vuoi rimuove tutte le variabili dal modello?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Elimina variabili"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "No"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Si"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3312,12 +3669,12 @@ msgstr ""
 "Impossibile aprile il file\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "File delle istruzione sarà caricato con la seguente regione: %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
@@ -3326,23 +3683,23 @@ msgstr ""
 "La regione non può essere impostata\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "Impossibile leggere l'istruzione %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3351,7 +3708,7 @@ msgstr ""
 "La scala è stata cambiata, vecchio valore: %(old)s\n"
 "nuovo valore: %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
@@ -3360,7 +3717,7 @@ msgstr ""
 "Lettura delle istruzioni fallita %s.\n"
 "Usare 1:25000."
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3370,7 +3727,7 @@ msgstr ""
 "%(old2)s\n"
 "nuovi valori: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3380,7 +3737,7 @@ msgstr ""
 "%(old1)s %(old2)s\n"
 "nuovi valori: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3389,13 +3746,13 @@ msgstr ""
 "Impossibile leggere l'istruzione %(file)s.\n"
 "Formato sconosciuto %(for)s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "Impossibile leggere l'istruzione %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
@@ -3404,8 +3761,8 @@ msgstr ""
 "Caratteri alla posizione %s non sono supportate dalla codifica ISO-8859-1 "
 "(Latin 1) che è richiesta dal modulo ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
@@ -3413,17 +3770,17 @@ msgstr ""
 "Non tutti i caratteri sono supportati dalla codifica ISO-8859-1 (Latin 1) "
 "che è richiesto dal modulo ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 "Non riesco a leggere l'istruzione %(inst)s: file %(file)s non trovato/i"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr "GRASS GIS Compositore Cartografico"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
@@ -3431,37 +3788,37 @@ msgstr ""
 "Python Imaging Library non è disponibile.\n"
 "La 'Anteprima' non funzionerà."
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr "Il programma ps2pdf non è disponibile. Installarlo per creare PDF"
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Generando PDF..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "Generando PostScript..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Generando anteprima..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "Ps.map terminato con il seguente codice di output %s"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "%(prg)s è terminato con il codice di ritorno %(code)s"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF generato"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3472,19 +3829,19 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "File PostScript generato"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr "Generando anteprima, attendere prego"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Anteprima non disponibile"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 #, fuzzy
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
@@ -3492,134 +3849,134 @@ msgid ""
 msgstr ""
 "Anteprima non disponibile probabilmente a causa di Ghostscript mancante."
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr "Seguire le istruzioni riportate nel GRASS Trac Wiki."
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Anteprima generata"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Salva file come"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr "Impossibile leggere il file %s."
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "Creare prima la cornice della mappa"
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "La barra della scala non è appropriata per questa proiezione"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 "Premere il bottone con l'icona del triangolo verde per genereare l'anteprima."
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "Compositore Cartografico wxGUI"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "Clicca e trascina per ridimensionare l'oggetto"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "etichette:"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "pollice"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "punto"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "centimetro"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "millimetro"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "metri"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "chilometri"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "piede"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "miglie"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "miglio nautico"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "pixel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "metro"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "grado"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "Impossibile eseguire `ps.map -b`"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Unità:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3627,29 +3984,29 @@ msgstr ""
 "Posizione dell'angolo in alto a sinistra\n"
 "dal angolo in alto a sinistra del foglio"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "Posizione se specificata:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr "relativo al foglio"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "attraverso le coordinate della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3657,184 +4014,182 @@ msgstr ""
 "Posizione dall'angolo in alto a sinistra\n"
 "del foglio"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Dimensione del font:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Scegli colore:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Chiudi finestra e applica i cambiamenti"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Unità"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Formato"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientamento"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Larghezza"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Altezza"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Sinistra"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Destra"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Alto"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Basso"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr "Testuale non è permesso!"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Input invalido"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Dimensione della pagina"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Margini"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Orizzontale"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Territorio"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "personalizzato"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Impostazioni della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Impostazioni della cornice della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Cornice della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Opzioni della cornice della mappa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "Adatta la cornice per corrispondere alla mappa selezionata"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "Adatta la cornice per corrispondere alla regione salvata"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "Adatta la cornice per combaciare con la regione computazionale attuale"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "Scala e centro della mappa fissi"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Seleziona la mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Mappa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Regione:"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Scala della mappa e centro"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Centro:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Scala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Risoluzione massima della mappa (dpi):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Bordo"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "disegna bordo intorno alla cornice della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "colore del bordo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "Larghezza del bordo (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3842,419 +4197,421 @@ msgstr ""
 "La regione è impostata per combaciare questa mappa,\n"
 "rester o vettoriali devono essere aggiunti dopo"
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "Selezione della regione"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "Nessuno mappa selezionata!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "Nessuna regione selezionato"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "Scala o centro della mappa invalido!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Mappa Raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "Scegli mappa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "nessuna mappa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Aggiungi mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "punti"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "linee"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "aree"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "Tipo dei dati"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Aggiungi"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "Gestisci vettoriali"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 "La mappa vettoriale più in alto nella lista delle mappe si sovrappone alle "
 "altre"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "Su"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "Giù"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Elimina"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "Proprietà..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "Impostazioni raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "Impostazioni vettoriali"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "%s proprietà"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "Selezione dati"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Tipologia delle feature"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "centroidi"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "confini"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "Selezione del layer"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "La connessione al database non è definito nel DB file"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "Seleziona layer:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "lista di categorie (esempio 1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Mask"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "Usa la maschera corrente"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "Colori"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "Contorno"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "disegna linee esterna"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "Larghezza (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "Riempimento"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "Colore del riempimento"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "Scegli colore:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "colore dalla colonna della tabella della mappa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 "Nessun modifica per il colore di riempimento dalla colonna della tabella"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "Colore delle linee:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "Dimensione e stile"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "simbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "eps file:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Naviga"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "Scrivi il nome del file o clicca su naviga per scegliere un file"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Scegli un file"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Dimensione"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "dimensione:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "dimensione per la colonna della tabella della mappa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "scala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "Rotazione"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "simboli ruotati:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "senso orario in gradi:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "dalla colonna della tabella della mappa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "Imposta larghezza (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "Multiple larghezza dal valore della categoria"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Stile della linea"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "Scegli stile della linea:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "Scegli fine della linea:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "Stile"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "usa stile:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "Scegli file dello stile:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "dimensione della linea dello stile (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "fattore di scala dello stile:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Legenda dei raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Mostra legenda raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Sorgente raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "raster corrente"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "seleziona raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s: tipologia %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Tipologia della legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "Legenda discreta (mappe categoriali)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "Legenda con gradiente colori continui (mappe decimali)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Impostazioni avanzate della legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "disegna rettangolo \"no data\""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "spuntare all'interno della tabella"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "intervallo"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Legenda dei vettoriali"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Mostra legenda vettoriale"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Sorgente vettoriale"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Scegli vettoriali e ordinali nella legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Mappa vettoriale"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Modifica etichetta"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "disegna bordo intorno alla legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Dimensione e posizione"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Posizione"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "Lascia il campo editato vuoto, usare i valori di default."
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4262,15 +4619,15 @@ msgstr ""
 "Larghezza del simbolo colorato (per le linee)\n"
 "davanti al testo della legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Colonne:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "ampiezza colonne:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
@@ -4278,186 +4635,174 @@ msgstr ""
 "La distanza che separa la colonna tra l'angolo sinistro\n"
 "di due colonne in una legenda multicolonna"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Impostazioni del font"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "Edita l'etichetta della legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "Nessuno raster selezionato!"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "Nessun raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr "Impostazioni delle informazioni della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Impostazioni del colore"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "usa colore del bordo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "usa colore dello sfondo: "
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"Le unità dell'attuale proiezione non sono supportate,\n"
-" saranno usati i metri"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Unità non supportate"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Lunghezza:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "La lunghezza della barra della scale è impostata in unità della mappa"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "L'altezza della barra della scale è la reale altezza nel foglio"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "default"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Stile"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Tipologia:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Numero dei segmenti:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Aggiungi a tutto le etichette"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "segmenti"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "testo di sfondo trasparente"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "La lunghezza della barra della scale non è definita"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Testo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Inserisci testo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Effetti del testo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "testo di sfondo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "evidenziato"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "bordo del testo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Offset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "orizzontale (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "verticale (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr "Punto di riferimento"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Rotazione del testo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "ruota testo (senso orario)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "Nessun testo inserito!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Immagine"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Scegli una directory:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Scegli una directory con immagini"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Scala e ruota"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Angolo di rotazione (gradi):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Rotazione senso antiorario in gradi"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
@@ -4465,191 +4810,192 @@ msgstr ""
 "PIL\n"
 "mancante"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "Impossibile leggere il file %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "dimensione: %(width)s x %(height)s pts"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "Nessuna immagine selezionata."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Freccia del nord"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Impostazioni Freccia del Nord"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr "Calcola convergenza"
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr "Simbolo"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr "Seleziona simbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "trasparenza"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Colore riempimento:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Dimensione e rotazione"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Dimensione (pt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Dimensione del simbolo in punti"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Impostazioni rettangolo"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Impostazioni linea"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Larghezza linea in punti"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 msgid "Vector labels"
 msgstr "Etichette vettoriali"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "Genera file di testo con le istruzione per la stampa"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "Carica file di testo con le istruzione per la stampa"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Genera output PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Genera output PDF"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Specifica dimensione del foglio, margini e orientazione"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Estensione massima"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Zoom all'estensione massima"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Clicca e muovi per posizionare il "
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Deselezionare oggetto"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Mostre preview"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "Esci dal Compositore Cartografico"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "Informazioni mappa"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Barra della scala"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Rettangolo"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 msgid "Add overlays"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Aggiungi etichette"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS GIS Gestore Tabella degli Attributi -"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr "SOLA LETTURA -"
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4658,142 +5004,134 @@ msgstr ""
 "La connessione al databse per la mappa vettoriale <%s> non è definito nel DB "
 "file. Puoi definire una nuova connessione nel tab 'Gestisci layers'"
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Attendere, caricamento attributi..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Naviga dati"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Gestione delle tabelle"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Gestione dei layer"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Chiude Gestore Tabella degli Attributi"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Elimina le impostazioni selezionate attualmente"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Ricarica i dati degli attributi (solo layer selezionato)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Numero di record caricati: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-"Interrogazione del vettoriale <{map}> fallita. Controllare le impostazioni "
-"del database e la topologia."
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Connessione al database"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Interroga"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Imposta istruzione SQL a quella di default"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Applica istruzione SQL nel Gestore Tabella degli Attributi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Chiudi il dialogo"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Colonne"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr "Inserimento interattivo"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Valori"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Ottieni tutti i valori"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Ottieni un esempio"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr "Ottiene i primi 256 valori unici come campioni"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr "Vai a:"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Chiudi dialogo dopo l'invio"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "GRASS SQL Builder (%(type)s) - <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Esempio: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Verifica"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Verifica istruzione SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "Istruzione SQL non verificata"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "Istruzione SQL non valida"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4804,74 +5142,74 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "Istruzione SQL valida"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr "Calcola il valore della colonna da impostare"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr "Funzioni"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr "Istruzione SQL non è stata applicata"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr "Istruzione SQL applicata"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr "Il driver DBF non supporta l'utilizzo di funzioni SQL."
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Caricamento dati..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr "Tabella degli attributi <%s> non trovata. Per creare la tabella "
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Colonna <%(column)s> non trovata nella tabella <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Si può visualizzare solo 256 colonne"
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Numero di colonne inconsistente nella tabella <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr "Limite di visualizzazione: 100000 record."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Valore sconosciuto"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 "Impossibile decodificare valore. Imposta codifica nelle preferenze della GUI "
 "('Attributi')."
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4885,172 +5223,172 @@ msgstr ""
 "\n"
 "Dettagli: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Ordina in ordine decrescente"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Ordina in modo decrescente"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Calcola (solo colonne numeriche)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Statistiche"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Aggiungi colonna"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Dimensione dell'area"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Lunghezza della linea"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr "Densità di un'area"
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr "Dimensione frattale di un perimetro definendo un poligono"
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Lunghezza del perimetro di un'area"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Numero di elementi per ogni categoria"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr "Pendenza della linea 3D"
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr "Sinuosità della linea"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Azimuth della linea"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr "Aggiungi colonna alla tabella <%s>"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 "Impossibile aggiungere la colonna alla tabella. Nessun nome della colonna "
 "definito."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "La colonna <%(column)s> esiste già nella tabella <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Attributi dei dati - clicca col destro per editera/gestire i record"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabella"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr "(sola lettura)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Query SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Semplice"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Applica l'istruzione SELECT e ricarica i record dei dati"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Generatore SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Edita il record selezionato"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Inserisci nuovo record"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Elimina i record selezionati"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Elimina tutti i record"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Seleziona tutto"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Deseleziona tutto"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Evidenza elementi selezionati"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Evidenza elementi selezionati e fare zoom"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Estrai features selezionate"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Elimina features selezionate"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Aggiorna i record esistenti"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Valore '%(value)s' dev'essere inserito come %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
@@ -5059,17 +5397,17 @@ msgstr ""
 "Impossibile aggiornare i record esistenti.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Record con numero di categoria %d esiste già nella tabella"
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Il numero di categorie (colonne %s) mancano"
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -5078,7 +5416,7 @@ msgstr ""
 "Impossibile inserire nuovo record.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5087,11 +5425,11 @@ msgstr ""
 "I record (%d) selezionati saranno permanentemente eliminati della tabella. "
 "Vuoi eliminarli?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Elimina record"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5100,15 +5438,15 @@ msgstr ""
 "Tutti i record (%d) saranno permanentemente eliminati della tabella. Vuoi "
 "eliminarli?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Niente da estrarre"
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Niente da eliminare"
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5119,7 +5457,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5132,30 +5470,30 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabella <%s> - clicca col destro per eliminare la colonna"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Colonna"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Lunghezza"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Rinomina colonna"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Impossibile rinominare colonna. Nessun nome della colonna definito"
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5164,7 +5502,7 @@ msgstr ""
 "Impossibile rinominare colonna <%(column)s> in <%(columnTo)s>. La colonna "
 "esiste già nella tabella <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5173,15 +5511,15 @@ msgstr ""
 "Impossibile rinominare la colonna. La colonna <%(column)s> non esiste nella "
 "tabelle <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Cancella la colonna selezionata"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Cancella tutte le colonne"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5190,11 +5528,11 @@ msgstr ""
 "La selezione %s sarà permanentemente eliminata della tabella. Vuoi eliminara "
 "la colonna?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Cancella colonna(e)"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5205,101 +5543,101 @@ msgstr ""
 "%s\n"
 "saranno PERMANENTEMENTE eliminate della tabella. Vuoi eliminarle?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Lista dei layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Elimina anche la tabella degli attributi linkate (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Nome della colonna"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Lunghezza dei dati"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Driver"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Database"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Chiave"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Aggiungi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Descrizione dei layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Chiave della colonna"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Inserire record per ogni categoria nella tabella"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Bisogna aggiungere le categorie col modulo v.category"
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Descrizione della tabella"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Nome della tabella"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Crea tabella"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Aggiungi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Impostazioni di default"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Rimuovi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Layer da eliminare"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "&Rimuovi layer"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modifica layer"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modifica layer"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5307,19 +5645,19 @@ msgstr ""
 "Impossibile restituire la lista delle tabelle.\n"
 "Per favore usare db.connect per settare i parametri dei database."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Impossibile creare nuova tabella. Il nome della tabella o il nome della "
 "colonna manca"
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 "Impossibile creare nuova tabella. La tabella <%s> esiste già nel database"
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5328,23 +5666,23 @@ msgstr ""
 "Impossibile aggiungere un nuovo layer alla mappa vettoriale <%(vector)s> Il "
 "layer %(layer)d esiste gi?"
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 msgid "Field statistics"
 msgstr "Statistiche del campo"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Copia le statistiche negli appunti (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr "Statistiche non è supportato per le tabelle DBF."
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 msgid "Unable to calculte statistics."
 msgstr "Impossibile calcolare le statistiche."
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
@@ -5352,25 +5690,25 @@ msgstr ""
 "Impossibile calcolare le statistiche. Numero non valido di linee %d "
 "(dovrebbe essere %d)."
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 msgid "Unable to calculte standard deviation."
 msgstr "Impossibile calcolare la deviazione standard."
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr "Statistiche del campo <%s>"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "Caricando gli attributi per il vettoriale <%s> ..."
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "GRASS GIS Gestore Tabella degli Attributi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5382,192 +5720,193 @@ msgstr ""
 "Vuoi creare una nuova tabella di attributi e definire un link alla mappa "
 "vettoriale <%s>?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Creare tabella?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Chiudi dialogo dopo l'invio"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Nessun attributo trovato"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Aggiornamento attributi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Definisci attributi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Visualizza attributi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Ricarica"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Invia"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 "Colonna <%(col)s>: Valore '%(value)s' dev'essere inserito come %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Sconosciuto"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 "Impossibile caricare il tema delle icone. Motivazione: %s. Esce da wxGUI..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "Vista 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Vista 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 msgid "No animation name selected."
 msgstr "Nessun nome per l'animazione  selezionato."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 msgid "No workspace file selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr "File %s non trovato."
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr "Animazione %d"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr "Numero massimo di animazioni è %s."
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr "Impossibile visualizzare la legenda."
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr "Numero inconsistente di mappe, controllare i dati di input. "
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr "Nessuna animazione da esportare"
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr "Si sta preparando l'esportazione, attendere..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr "%(from)s %(dash)s %(to)s"
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr "%(start)s %(unit)s"
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr "Esportando l'animazione, attendere..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr "GRASS GIS Strumento Animazione"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr "Barra degli strumenti per l'animazione"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr "Caricamento dati"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr " ({c} fuori di {p})"
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr "a %(to)s"
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Dataset spazio temporale <%s> non trovato."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5576,357 +5915,357 @@ msgstr ""
 "Lettura file dell'ambiente di lavoro <%s> fallita.\n"
 "File invalido, impossibile parsare il documento XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 msgid "Please add only one layer in the list."
 msgstr "Aggiungere solo un layer nella lista."
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 msgid "No map series nor space-time dataset is added."
 msgstr ""
 "Non è stato aggiunta nessuna serie di mappe o dataset spazio temporali."
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 msgid "Rendering map layers"
 msgstr "Visualizzando i layers"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 msgid "Overlaying map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Directory {t} non rimossa."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr "La topologia del dataset spazio temporale %s non è valida."
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr "Modificare la velocità dell'animazione"
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr "Modalità semplice"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 msgid "Frame duration:"
 msgstr "Durata del frame:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr "Unità tempo:"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 msgid "Duration of time unit:"
 msgstr "Durata dell'unità del tempo:"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr "anno"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr "mese"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr "giorno"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr "ora"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr "minuto"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr "secondo"
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr "La velocità dell'animazione è troppo alto."
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 msgid "Add new animation"
 msgstr "Aggiungi nuova animazione"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 msgid "Edit animation"
 msgstr "Modifica animazione"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Avanzato"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr "Alto sinistro"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr "Alto destra"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr "Basso sinistro"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr "basso destra"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr "Seleziona visuale 2D o 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 msgid "Window position:"
 msgstr "Posizione della finistra"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr "Modalità di visualizzazione"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Imposta opzioni"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 msgid "3D view parameters"
 msgstr "Parametri della visualizzazione 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr "Parametro dell'animazione:"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 msgid "Start region:"
 msgstr "Regione di partenza:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 msgid "End region:"
 msgstr "Regione di arrivo:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 msgid "Zoom value:"
 msgstr "valore di zoom:"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr "N-S:"
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr "E-O:"
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 msgid "No map series or space-time dataset added."
 msgstr "Nessuna serie di mappe o dataset spazio temporale aggiunto."
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr "Le informazioni della regione non sono complete"
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr "Aggiunge, modifica o rimuove animazioni"
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 msgid "List of animations"
 msgstr "Lista delle animazioni"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr "Modifica"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr "Numero massimo di animazioni è %d."
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr "Esporta animazione"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Decorazioni"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Esporta"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 msgid "Add time stamp"
 msgstr "Aggiunge timestamp"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Aggiungi immagine"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Aggiungi testo"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr "Impostazioni del font:"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr "Testo di esempio"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr "File dell'immagine:"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 msgid "Choose image file"
 msgstr "Scegli un file d'immagine"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr "sequenza di immagini"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "GIF animato"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr "SWF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr "Esporta a:"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Prefisso del file:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr "animazione_"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Formato del file:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Cartella:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr "Scegli una directory per l'esportazione"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr "File GIF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 msgid "Choose file to save animation"
 msgstr "Scegli il file dove salvare l'animazione"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr "File SWF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
@@ -5936,209 +6275,209 @@ msgstr ""
 "Installarlo ed essere sicuri che\n"
 "si trovi nel PATH."
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr "File AVI:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr "Codifica video:"
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr "Opzioni addizionali:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr "File %s non trovato."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr "DIrectory %s non trovata."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 msgid "Export directory is missing."
 msgstr "Manca la directory di esportazione."
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr "Manca il file per l'esportazione"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 msgid "Add space-time dataset layer"
 msgstr "Aggiungi un dataset spazio temporale"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 msgid "Multiple raster maps"
 msgstr "Molteplici mappe raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 msgid "Multiple vector maps"
 msgstr "Molteplici mappe vettoriali"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 msgid "Multiple 3D raster maps"
 msgstr "Molteplici mappe raster 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 msgid "Space time raster dataset"
 msgstr "Dataset spazio temporale raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 msgid "Space time vector dataset"
 msgstr "Dataset spazio temporale vettoriale"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 msgid "Space time 3D raster dataset"
 msgstr "Dataset spazio temporale raster 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 msgid "Input data type:"
 msgstr "Tipologia di dati di input:"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 msgid "Select raster/vector maps."
 msgstr "Seleziona mappe raster/vettoriali:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr "Prima selezionare mappe o dataset."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 msgid "Animation Tool settings"
 msgstr "Impostazioni strumento animazione"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Colore sfondo: "
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "usa colore dello sfondo: "
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "usa colore dello sfondo: "
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 msgid "Absolute time format:"
 msgstr "Formato assoluto del tempo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr "Invalido"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 msgid "Change animation speed"
 msgstr "Cambia la velocità dell'animazione"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Ferma"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pausa"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr "Aggiunge, modifica o rimuove animazione"
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr "Aggiungi un dataset spazio temporali o una serie di mappe"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 "Aggiunge un dataset spazio temporale o una serie di mappe per l'animazione"
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Valore inserito invalido. Operazione cancellata."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr "Modifica punto"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 msgid "Unable to perform analysis."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6148,45 +6487,45 @@ msgstr ""
 "La mappa temporanea %s esiste già.\n"
 "Si vuole continuare e  sovrascriverla?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 msgid "Map can be created only in current mapset"
 msgstr "Le mappe possono essere create solo nel mapset corrente"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Il vettoriale %s esiste già. Si vuole sovrascriverlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 msgid "Overwrite vector map"
 msgstr "Sovrascrivere vettoriale"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr "Creazione della tabella delle svolte fallita."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr "Scegliere il punto '%s' e '%s'."
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr "Scegliere almeno due punti"
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6196,11 +6535,11 @@ msgstr ""
 "La mappa temporanea %s esiste già.\n"
 "Si vuole continuare e  sovrascriverla?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
@@ -6209,20 +6548,20 @@ msgstr ""
 "La mappa temporanea %s esiste già.\n"
 "Si vuole continuare e  sovrascriverla?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 msgid "Unable to use ctypes. \n"
 msgstr "Impossibile usare ctypes. \n"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
@@ -6231,51 +6570,51 @@ msgstr ""
 "La mappa temporanea %s esiste già.\n"
 "Si vuole continuare e  sovrascriverla?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr "Sovrascrivi mappa"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Il vettoriale '%s' non esiste."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 msgid "Vector map was not chosen."
 msgstr "Vettoriale non è stato scelto."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 msgid "arc layer"
 msgstr "Layer degli archi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 msgid "node layer"
 msgstr "Layer dei nodi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 msgid "turntable layer"
 msgstr "Layer con la tabella delle svolte"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr "Layer delle categorie uniche"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr "Scegli l'esistente %s.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6284,339 +6623,340 @@ msgstr ""
 "La colonna scelta %s non esiste nella tabella degli attributi del layer '%s' "
 "del vettoriale '%s'.\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "tipologia"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "topologia"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Punto iniziale"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Punto finale"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "nuovo punto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr "arco"
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 msgid "Node cost column:"
 msgstr "Colonna dei costi per i nodi:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "nodo"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr "Percorso più breve %s "
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Punto finale"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr "Commesso viaggiatore %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr "Portata massima %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr "Punto di partenza"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Crea albero di Streiner per la rete e i punti scelti %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 msgid "Overwrite map layer"
 msgstr "Sovrascrivere layer"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr " "
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 msgid "Point list toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Punti"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr "Distanza massima dei punti dalla rete:"
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 msgid "Iso lines:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Uscita"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parametri"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 msgid "Add vector map into layer tree"
 msgstr "Aggiungi il vettoriale nel layer tree"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr "Tabelle di input"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr "Tabelle con i risultati"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr "Caricamento tabelle..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 msgid "Creating turntable..."
 msgstr "Creando la tabella delle svolte..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 msgid "Input vector map does not exist."
 msgstr "Il vettoriale di input non esiste."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr "Analizzando..."
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Impostazioni"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr "Elaborando i nodi..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 msgid "Other settings"
 msgstr "Altre impostazioni"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr "Stile del punto:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, python-format
 msgid "Color table style %s:"
 msgstr "Tabella dei colori dello stle %s:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr "Inverti colori %s:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr "Colore della linea:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr "Colore per i punti non utilizzati:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr "Colore per punti selezionati:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr "Dimensione del punto:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr "Grandezza del punto:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr "Soglia di snap in pixels:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr "Numero massimo di risultati nella cronologia"
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 msgid "New vector map with turntable"
 msgstr "Nuova mappa vettoriale  con la tabelle delle svolte"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr "Salva il risultato dell'analisi"
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr "Inserisci punti dal Map DIsplay"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr "Attivare lo snap ai nodi"
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr "Aggiungi nuovo punto"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 msgid "Delete selected point"
 msgstr "Elimina il punto selezionato"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr "Esegui analisi"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr "Vai al precedente risultato delle analisi"
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr "Vai al prossimo risultato delle analisi"
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr "Visualizza il risultato delle analisi"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr "Salva il risultato temporaneo"
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr "Impostazioni dell'analisi di reti vettoriali."
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Mostra manuale"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr "Analisi disponibili"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Visualizza"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Abilita/disabilita auto-visualizzazione"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Mostra regione computazionale"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Mostra l'estensione computazionale"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6626,33 +6966,33 @@ msgstr ""
 "region). Visualizza in blu la regione interna alla regione computazionale, "
 "in rosso la regione esterna)."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Modalità di visualizzazione"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr "Allinea l'estensione della regione basata sulla dimensione del display"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Risoluzione del display"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 "Forza la risoluzione del display all'impostazione della regione "
 "computazionale"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6661,43 +7001,43 @@ msgstr ""
 "computazionale. Il valore di default della nuova mappa visualizzata può "
 "essere impostato nella finestra  di dialogo 'Impostazioni GUI utente'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Scala mappa"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Vai a"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Proiezione non definita (controlla le impostazioni)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Errore nella proiezione (controlla le impostazioni)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Proiezione"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Usa proiezione definita"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
@@ -6705,45 +7045,45 @@ msgstr ""
 "Riproietta le coordinate visualizzate nella barra di stato. La proiezione "
 "può essere definita nella GUI preferenze (tab 'Proiezione')"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASK"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Visualizza geometrie"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Coordinate"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Estensione"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr "Regione computazionale"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Map display"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr "Impossibile ottenere la versione di GRASS\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 "GRASS GIS %(version)s Map Display: %(id)s  - Location: %(loc)s@%(mapset)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6752,11 +7092,11 @@ msgstr ""
 "Impossibile avviare il digitalizzatore vettoriale wxGUI.\n"
 "Motivazione: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "Barra degli strumenti per il digitalizzatore vettoriale"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6771,104 +7111,109 @@ msgstr ""
 "\n"
 "Dettagli: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Avviando la visualizzazione 3D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Per favore aspettare, caricamento dei dati..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr "Per favore aspettare, scaricamento dei dati..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr "Ritorna alla modalità di visualizzazione 2D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Digitalizza"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr "Nessun layer selezionato. Operazione cancellata."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr "d.to.rast può essere usato solo in modalità 2D."
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr "Impossibile eseguire d.to.rast:\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Vettoriale <%s> aperto per l'editing - saltato."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Aggiungi livello testo"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr "Imposta la regione computazionale dall'estensione del display"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 msgid "Set computational region extent interactively"
 msgstr "Imposta la region computazionale interattivamente"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 msgid "Set computational region from named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+msgid "Raster Digitizer Toolbar"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 "Comando di GRASS %s non trovato. Impossibile avviare la finestra per "
 "visualizzare mappe"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 msgid "Map display test"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -6876,114 +7221,129 @@ msgstr ""
 "C'è un problema di stampa.\n"
 "La stampante è impostata correttamente?"
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr "Comando non supportato %s."
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr "Avvia nuovo map display <%s>..."
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Impossibile creare il file '%s'\n"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Ferma map display <%s>..."
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
+#, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Selezione elemento vettoriale"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Seleziona mappe raster/vettoriali:"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
 msgid "Show/hide scale bar"
 msgstr "Mostra/nascondi barra della scala"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Mostra/nascondi legenda"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr "Mostra/nascondi freccia del nord"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analizza mappa"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Misurazione, profili, istogrammi, ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Misura distanza"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr "Misura area"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profilo della mappa della superfice"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Crea istogramma di raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr "Strumento per l'analisi di reti vettoriali"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Ruota la scena 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Trascina col mouse per ruotare la scena 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 "Trascina col mouse, tieni pigiato Ctrl per modi differenti o Shift per "
 "accelerare"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Clicca col mouse per effetuare zoom"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Clicca col mouse per diminuire lo zoom"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Visualizzazione 3D non disponibile"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Motivazione: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Digitalizzatore vettoriale non disponibile"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -6993,65 +7353,69 @@ msgstr ""
 "aggiustato). Controllare per le versioni di GRASS più aggiornate. Comunque "
 "si può usera \"v.digit\" dal menu Sviluppo Vettoriale."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+msgid "Raster digitizer"
+msgstr "Digitalizzatore raster"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr "Il raster %s esiste già, cambiare nome"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr "Raster non creato. Ridisegnare la regione."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr "Raster non creato. Ridisegnare la regione nuovamente."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr "Disegna un frame di campionamento"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr "Disegna un rettangolo di campionamento"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr "Disegna un cerchio di campionamento"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr "Disegna una regione di campionamento"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 msgid "Modify the configuration file"
 msgstr "Modifica il file di configurazione"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Visualizza e modifica il file di configurazione '{name}'"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
@@ -7060,70 +7424,70 @@ msgstr ""
 "Si è sicuri di volere modificare il file di configurazione di r.li {name}?\n"
 "Potreste danneggiare il file di configurazione..."
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr "ATTENZIONE"
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr "Rimuove un file di configurazione"
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "Crea"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr "Crea un nuovo file di configurazione"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Rinomina"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr "Rinomina un file di configurazione"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr "Visualizza/Modifica"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 msgid "View and edit a configuration file"
 msgstr "Visualizza e modifica il file di configurazione"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Vuoi rimuovere il file di configurazione di r.li <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 msgid "Remove new r.li configuration file?"
 msgstr "Rimuovere il file di configurazione di r.li <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr "Bisogna selezionare un file di configurazione"
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr "Rinomina file di configurazione"
 
@@ -7131,112 +7495,112 @@ msgstr "Rinomina file di configurazione"
 msgid "Create new configuration file for r.li modules"
 msgstr "Crea un nuovo file di configurazione per i moduli r.li"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Vuoi creare lil file di configurazione di r.li <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 msgid "Create new r.li configuration file?"
 msgstr "Crea un nuovo file di configurazione di r.li?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "r.li.setup wizard cancellato. File di configurazione non creato."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr "Seleziona mappe e definire il nome"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 msgid "Name for new configuration file to create"
 msgstr "Nome per il nuovo file di configurazione da creare"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr "Raster da utilizzare per selezionare le aree"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr "Vettoriale da utilizzare per selezionare le aree"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 msgid "Vector map layer to use to select areas"
 msgstr "Vettoriale da utilizzare per selezionare le aree"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 msgid "Whole map layer"
 msgstr "Intera mappa"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 msgid "Keyboard setting"
 msgstr "Impostazioni dalla tastiera"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr "Il file di configurazione %s esiste già, cambiare nome"
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr "Il vettoriale %s non è stato trovato, selezionare un altro vettoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr "Il vettoriale %s non ha aree, selezionare un altro vettoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 "Il vettoriale %s non ha tabelle connesse, selezionare un altro vettoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 msgid "Insert sampling frame parameter"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 msgid "Insert sampling areas"
 msgstr "Inserire le aree di campionamento"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Regioni"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Muovi finestra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
@@ -7244,184 +7608,184 @@ msgstr ""
 "Seleziona le aree dal\n"
 "vettoriale di overlay"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 msgid "Choose a method"
 msgstr "Scegli un metodo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr "Usa la tastiera per inserire l'area di campionamento"
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr "Usa il mouse per inserire l'area di campionamento"
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr "Questa opzione non è ancora supportata"
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 msgid "Number of regions to draw:"
 msgstr "Numero delle regioni da disegnare:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 msgid "Do you want to check vector areas?"
 msgstr "Vuoi controllare le aree del vettoriale?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 msgid "Select if use area by area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr "Tutti gli elementi saranno utilizzati"
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr "Analizzando tutti gli elementi del vettoriale..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 msgid "Analysing vector"
 msgstr "Analizzando il vettoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr "Tutti gli elementi sono stati analizzati"
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr "È accaduto un errore"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 msgid "Draw sampling regions"
 msgstr "Disegna le regioni di campionamento"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 msgid "Draw sample region "
 msgstr "Disegna regione campione"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr "DIsegna la finestra per la regione mobile"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr "Selezione le unità campione usando la tastiera"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 msgid "Select type of shape"
 msgstr "Selezionare la tipologia della forma"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr "Cerchio"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 msgid "Width size (in cells)?"
 msgstr "Dimensione larghezza (in celle)?:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr "Dimensione del raggio (in metri)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr "Dimensione dell'altezza (in celle)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 msgid "Name of the circle mask"
 msgstr "Nome della maschera tonda:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 msgid "Insert number of row strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 msgid "Set sample units"
 msgstr "Imposta unità campioni"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr "Imposta la finestra mobile"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 msgid "Draw sampling units"
 msgstr "Disegna le unità di campionamento"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 msgid "Number of sampling area to draw:"
 msgstr "Numero di aree campione da disegnare:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr "Disegna campioni"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr "Seleziona aree campioni"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr "Va bene quest'area?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 msgid "Select sample area "
 msgstr "Seleziona area campione"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7431,171 +7795,185 @@ msgstr ""
 "Il raster <%s> esiste già. Rimuove o rinominare le mappe con il prefisso "
 "'%s' o selezionare l'opzione per sovrascrivere le mappe esistenti"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr "Il poligono sembra avere 0 aree"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 msgid "Select sample area 1 of "
 msgstr "Seleziona area campione 1 di "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Sommario"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr "Nome del file di configurazione"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr "Nome del raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr "Nome del vettoriale:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr "Tipologia della regione:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr "Valori della regione da tastiera"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr "Tipologia della forma:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr "Dimensione del raggio:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 msgid "Name circle mask:"
 msgstr "Nome della maschera tonda:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 msgid "Width size:"
 msgstr "Dimensione larghezza:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 msgid "Height size:"
 msgstr "Dimensione altezza:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr "Metodo di distribuzione:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr "Numero di unità di campionamento:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr "Distanza tra le unità:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 msgid "Number row strates:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 msgid "Number column strates:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Benvenuto nella shell interattiva Python wxGUI %s"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Digita %s per maggiori informazioni sullo scripting di GRASS."
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Digita %s per aggiungere raster o vettoriali all'albero dei layer"
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Elimina tutto il testo dalla shell"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Modalità semplice"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Raster o vettoriale <%s> non trovato"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Raster <%s> aggiunto"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Vettoriale <%s> aggiunto"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS %s Layer Manager"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Barra degli strumenti dello spazio di lavoro"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Barra degli strumenti dei dati"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Barra degli strumenti degli strumenti"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Barra degli  strumenti vettoriale"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr "Barra degli strumenti di visualizzazione 3D"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Rinomina Map Display"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
 msgstr "Layer"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Console dei programmi"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "Cerca moduli"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "Moduli"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Console python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7606,37 +7984,28 @@ msgstr ""
 "\n"
 "Volete spostarvi nella nuova location?"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "Spostarsi nella nuova location?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Location corrente è <%(loc)s>.\n"
-"Mapset corrente è <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Scegli il modello da eseguire"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Vuoi salvare i cambiamenti nell'ambiente di lavoro?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Vuoi salvare le impostazioni correnti in un file d'ambiente di lavoro?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Chiudi map display %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -7645,35 +8014,35 @@ msgstr ""
 "Comando '%s' non è ancora implementato nella WxGUI. Piuttosto prova "
 "utilizzando la barra dei comandi.  "
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "La mappa selezionata non è vettoriale"
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Le modifiche sono permesse solo per i vettoriali nell'attuale mapset."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Scegli file script da eseguire"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Il file di script '%s' non esiste. Operazione cancellata."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
@@ -7682,15 +8051,15 @@ msgstr ""
 "Lo script <%s> non è eseguibile. Volete impostare i permessi per permettervi "
 "di eseguire questo script (dovete essere i proprietari del file)?"
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr "Imposta permesso?"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr "Impossibile impostare i permessi. Operazione cancellata."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
@@ -7699,29 +8068,24 @@ msgstr ""
 "La directory '%s' non è definita nel GRASS_ADDON_PATH. Volete aggiungere "
 "questa directory al GRASS_ADDON_PATH?"
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr "Aggiornare il percorso degli Addons?"
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Si sta lanciando lo script '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Nessuna location/mapset forniro. Operazione cancellata"
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr "Nessun mapset fornito. Operazione cancellata"
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Mapset corrente è <%s>"
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
@@ -7730,61 +8094,63 @@ msgstr ""
 "La directory di lavoro cambiata a:\n"
 "\"%s\""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr "Cambia ambiente di lavoro per questa GUI."
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 msgid "Usage: cd [directory]"
 msgstr "Utilizzo: cd [directory]"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr "Senza parametri apre una finestra."
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr "Scegli una directory di lavoro"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "Informazioni di sistema"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Versione di GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr "Versione sconosciuta"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
 msgstr "Revisione SVN GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1222
+#, fuzzy
+msgid "Build platform"
+msgstr "Piattaforma"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Piattaforma"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -7792,62 +8158,62 @@ msgstr ""
 "L'ambiente di lavoro corrente non è vuoto. Vuoi salvare le impostazioni "
 "correnti in un file d'ambiente di lavoro?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Creare nuovo ambiente di lavoro?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Scegli il file dell'ambiente di lavoro"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "FIle ambiente di lavoro di GRASS (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Attendere, sto caricando l'ambiente di lavoro..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Scegli il file GRC da caricare"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Vecchi file d'ambiente di lavoro di GRASS (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Scegli il file dove salvare il corrente ambiente di lavoro"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Il file dell'ambiente di lavoro <%s> esiste già. Vuoi sovrascrivvere questo "
 "file?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Salva ambiente di lavoro"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 "Scrittura delle impostazioni correnti nel file dell'ambiente di lavoro "
 "fallita."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Inserisci nuovo nome:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS {version} Map Display: {name}  - Location: {loc}"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7858,25 +8224,25 @@ msgstr ""
 "\n"
 "Motivo: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 msgid "Unable to start Timeline Tool."
 msgstr "Impossibile avviare lo strumento Timeline."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Impossibile avviare lo strumento Timeline."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Aggiungi layers selezionato nel layer tree"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Tipologia della mappa <%s> non supportata."
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
@@ -7884,11 +8250,11 @@ msgstr ""
 "I valori della cella possono essere visualizzati solo per regioni da meno di "
 "10000 celle. "
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "opacità:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7896,55 +8262,53 @@ msgid ""
 "from layer tree?"
 msgstr "Vuoi rimuovere i layer %s dal layer tree"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "Vuoi rimuove i layer selezionati dal layer tree"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Rimuovi layer"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Esci dalla GUI di GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Impossibile ottenere la versione di GRASS\n"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr "Nessun layer selezionato. Operazione cancellata."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Importa mappa raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Collega a un raster esterno"
 
@@ -7958,12 +8322,14 @@ msgid "Set raster output format"
 msgstr "Imposta il formato di output per i raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Importa mappa vettoriale"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Collega a un vettoriale esterno"
 
@@ -7984,7 +8350,7 @@ msgstr "Importa dati da un server WMS"
 msgid "Add command layer"
 msgstr "Aggiungi livello comando"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Esci"
@@ -8034,8 +8400,8 @@ msgid "Add rhumbline layer"
 msgstr "Aggiungi layer di linee lossodromiche"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Aggiunge un layer raster 3D"
 
@@ -8055,286 +8421,276 @@ msgstr "Modalità di editing"
 msgid "Background vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Layer"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Cambia il livello di opacità"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "Proprieta della visualizzazione 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Zoom alla mappa selezionata"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Imposta la regione computazionale dalla/e mappa/e selezionata/e"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr "Esporta formati comuni"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr "Esporta PostGIS"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 msgid "Create pack"
 msgstr "Crea pacchetto"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr "Fare una copia nel mapset attuale"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Imposta la tabella di colore"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Mostra gli attributi dei dati"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Incomincia l'editing"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Ferma l'editing"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Ricrea topologia"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Zoom alla/e mappa/e selezionata/e (ignore i NULLS)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Gestisci interattivamente le regole di colore"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Istogramma"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Statistiche univariate raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 msgid "Report raster statistics"
 msgstr "Statistiche del raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profilo"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Impossibile creare profilo del raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-"Il nome <%(name)s> non è un nome valido per mappa di GRASS. Utilizzare solo "
-"carattere ASCII escludendo %(chars)s e spazi"
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "Raster 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Tipologia della mappa <%s> non supportata"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Inserisci il nome per il nuovo %s nell'attuale mapset:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Copiare %s <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "%s <%s> esiste già nel corrente mapset. Si vuole sovrascriverlo?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Sovrascrivi?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Impossibile copiare <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Impossibile copiare <%s>. Mapset <%s> non mapset corrente."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 "Impossibile visualizzare l'istogramma del raster. Nessun nome della mappa "
 "definito."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Imposta opacità <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Gruppo di layer:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Clicca per editare le impostazione del layer"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(doppio click per impostare le propriet?)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Per favore aspettare, aggiornamento dei dati..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Avvia nuovo display"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Crea nuovo ambiente di lavoro (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Apri un esistente file d'ambiente di lavoro (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Salva corrente ambiente di lavoro in un file (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Aggiungi diversi layer raster o vettoriali (Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Aggiungi layer raster (Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Aggiungi diversi layer raster (RGB, HIS, rilievi ombreggiati...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Aggiungi layer vettoriale (Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Aggiungi diversi layer vettoriali (tematici, grafici...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr "Aggiungi layer da servizi web (WMS, WMTS, NASA OnEarth)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Aggiungi un gruppo"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Rimuove i layer selezionati dal layer tree"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importa/connetti dati raster/vettoriali"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Calcolatore per raster map algebra"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Modellizzatore Grafico"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Georettificatore"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Compositore Cartografico"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr "Lancia script definiti dall'utente"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "Impostazioni dell'interfaccia grafica"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Manuale di GRASS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr "Modifica il vettoriale selezionato"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr "Mostra i dati degli attributi per il vettoriale selezionato"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Genera comando per m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr "Genera il comando per m.nviz.image basato sullo stato corrente"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr "Impostazioni della modalità di visualizzazione 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr "Mostra la finestra delle impostazioni della visualizzazione 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr "Mostra il manuale della visualizzazione 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8346,57 +8702,57 @@ msgstr ""
 "Python). Controlla il sito di Numeric Python (http://numpy.scipy.org) per "
 "maggiori informazione sul download del sorgente o dei binari."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "GRASS Strumento Analisi di profilo"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profilo di"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Distanza (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Distanza lungo il transetto"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Valori della cella"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr "Non tutti i punti del profilo cadono dentro la regione computazionale."
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Valori del raster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 "Devi disegnare un transetto per il profilo nella finestra di visualizzazione."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nessun elemento per creare il profilo"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr "Scegliere il prefisso per il file dove salvare i valori del profilo..."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "Comma separated value (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Sovrascrivere il file?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
@@ -8405,7 +8761,7 @@ msgstr ""
 "Impossibile aprile il file <%s> per scriverlo.\n"
 "Motivazione: %s"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
@@ -8414,540 +8770,542 @@ msgstr ""
 "%d files creati:\n"
 "%s"
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr "Nessun file generato."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr "Statistiche del profilo(i)"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr "Valori delle celle del raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr "Niente da disegnare."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 msgid "At least 2 raster maps must be specified"
 msgstr "Almeno due raster devono essere specificati"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr "Raster <%s> valori delle celle"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ": %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Traccia un transetto nella mappa a schermo per eseguire il profilo"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Salva il profilo in un file CSV"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Impostazioni del testo"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Questa feature non è ancora stata implementata"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "In costruzione"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr "GRASS GIS Strumento Istogramma"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "Istogramma di"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr "Conteggio delle celle"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Istogramma del gruppo di immagini <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Istogramma del raster <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 msgid "Histogram of selected raster maps"
 msgstr "Istogramma dei raster selezionati"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr "Valori delle celle raster %s"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr "Percentuale di tutte le celle"
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Area"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Statistiche per il raster <%s>"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr "Seleziona raster per creare il profilo"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr "Seleziona raster per creare il profilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Seleziona coppia di raster per grafico di dispersione"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "C&opia"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr "Seleziona raster o gruppo di immagini per l'istogramma"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr "Istogramma di un singolo raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Seleziona raster:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr "Seleziona gruppo di immagini:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr "Topologia di istogramma"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr "Il gruppo selezionato dev'essere nel mapset attuale"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Titolo del profilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Dimensione del font del titolo (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "label dell'asse X:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "label dell'asse Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Dimensione del font delle etichette (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Famiglia dei font:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Stile:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Larghezza:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Applica i cambiamenti per la sessione corrente e chiudi la finestra"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr "Nessuna mappa o gruppi di immagini selezionate da disegnare."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr "Impostazione per la mappa selezionata"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Colore della linea"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Opzioni di evidenziazione del segmento del transetto"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Impostazioni delle assi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Asse X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Asse Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Scala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Personalizza min"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Personalizza max"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Log della scala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Impostazioni della griglia e legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Colore della griglia"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Mostra griglie"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Dimensione del font della legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Mostra legend"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
-#, fuzzy
+#: ../gui/wxpython/tplot/frame.py:97
 msgid "GRASS GIS Temporal Plot Tool"
-msgstr "GRASS GIS Strumento Timeline"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
 msgstr "Registra mappe in un dataset"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Colonna degli attributi:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Seleziona la categoria per l'editing"
+msgstr "Selezione elemento vettoriale"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Disegna"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Aiuto"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+msgid "Invalid input coordinates"
+msgstr "Coordinati di input invalido"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Dataset <%s> non trovato nel database temporale."
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
-#, fuzzy, python-format
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
+#, python-format
 msgid "Temporal resolution: %s"
-msgstr "Aggregazione temporale"
+msgstr "Risoluzione temporale: %s"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr "Tempo [%s]"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Dati di input invalido"
+msgid "Seed point outside the current region"
+msgstr "Genera area per la regione corrente"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Dati di input invalido"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
-msgstr "Dati di input invalido"
+msgstr "Coordinati di input invalido"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
-#, fuzzy
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 msgid "Invalid input temporal dataset"
-msgstr "Dati di input invalido"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Dataset spazio temporale raster: %s"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Dataset spazio temporale vettoriale: %s"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Dataset spazio temporale raster 3D: %s"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
-#, fuzzy
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
-"\n"
-"Premere Del per cancellare."
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&File"
 
@@ -8955,8 +9313,8 @@ msgstr "&File"
 msgid "Workspace"
 msgstr "Ambiente di lavoro"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Nuovo"
 
@@ -8964,7 +9322,7 @@ msgstr "Nuovo"
 msgid "Create new workspace"
 msgstr "Crea una nuova area di lavoro"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Apri"
 
@@ -8972,12 +9330,12 @@ msgstr "Apri"
 msgid "Load workspace from file"
 msgstr "Carica l'area di lavoro dal file"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Salva"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Salva come"
 
@@ -8998,7 +9356,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Carica layers da file GRC al layer tree"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Visualizzatore delle mappe"
 
@@ -9027,7 +9385,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Aggiungi diversi layer raster o vettoriali all'attuale display"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr "Aggiungi layer da servizi web"
 
@@ -9163,11 +9521,8 @@ msgid "LAS LiDAR points import"
 msgstr "Importa punti LAS LiDAR"
 
 #: ../gui/wxpython/menustrings.py:58 ../gui/wxpython/menustrings.py:1045
-#, fuzzy
 msgid "Creates a raster map from LAS LiDAR points using univariate statistics."
-msgstr ""
-"Crea un raster da un assemblaggio di molte coordinate usando statistiche "
-"univariate."
+msgstr "Crea un raster da punti LAS LiDAR usando statistiche univariate"
 
 #: ../gui/wxpython/menustrings.py:60 ../gui/wxpython/menustrings.py:1047
 #, fuzzy
@@ -9262,9 +9617,9 @@ msgid "Imports Mapgen or Matlab-ASCII vector maps into GRASS."
 msgstr "Importa vettoriali Mapgen o Matlab-ASCII in GRASS."
 
 #: ../gui/wxpython/menustrings.py:83 ../gui/wxpython/menustrings.py:1070
-#, fuzzy
 msgid "Converts LAS LiDAR point clouds to a GRASS vector map with libLAS."
-msgstr "Converte layer vettoriali in vettori GRASS usando OGR."
+msgstr ""
+"Converte nuvole di punti LAS LiDAR in un vettoriale GRASS usando libLAS."
 
 #: ../gui/wxpython/menustrings.py:85 ../gui/wxpython/menustrings.py:1072
 #, fuzzy
@@ -9695,23 +10050,23 @@ msgstr "Da raster 3D a serie di raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Converte raster 3D in raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georettifica"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Gestione dei Punti di controllo sul terreno per la georettifica"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Modellizzatore Grafico"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Avvia Modellizzatore Grafico"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Esegui modello"
 
@@ -9752,15 +10107,15 @@ msgstr ""
 "coordinate e vice versa. Si suppone lavorare in un sistema di coordinate "
 "cartesiane"
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Avvia Compositore Cartografico"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr "Map Swipe"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr "Avvia Map Swipe"
 
@@ -9772,7 +10127,7 @@ msgstr "Lancia script"
 msgid "Launches script file."
 msgstr "Lancia script"
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Chiudi"
@@ -9782,8 +10137,8 @@ msgstr "Chiudi"
 msgid "Quit wxGUI session."
 msgstr "Esci dalle sessione di GRASS wxGUI."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Esci dalla GUI di GRASS"
@@ -9792,7 +10147,7 @@ msgstr "Esci dalla GUI di GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "&Impostazioni"
 
@@ -9958,7 +10313,7 @@ msgstr "Gestisci estensioni installate"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Aggiorna o rimuove l'estensione degli GRASS AddOns installata."
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Preferenze"
 
@@ -11041,7 +11396,7 @@ msgid ""
 msgstr "Genera un raster della distanza dagli elementi del layer di input"
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Piano"
 
@@ -11312,8 +11667,8 @@ msgid "Develop vector map"
 msgstr "Sviluppa vettoriale"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Crea nuova mappa vettoriale"
 
@@ -12223,12 +12578,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Input interattivo per classificazione controllata"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -13283,25 +13638,29 @@ msgid "GUI tools"
 msgstr "Strumenti grafici"
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 msgid "Timeline tool"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr "Disegna l'estensione temporale."
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
 msgstr "Campionamento temporale"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
-msgstr "Disegna l'estensione temporale."
+msgstr "Disegna i valori temporali"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "&Aiuto"
 
@@ -13326,7 +13685,7 @@ msgid "Prints system information"
 msgstr "Stampa informazione del sistema"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Informazioni su GRASS GIS"
 
@@ -13338,266 +13697,274 @@ msgstr "Importa, esporta e collega dati"
 msgid "Attribute table manager"
 msgstr "Gestore Tabella degli Attributi"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Crea un nuovo modello"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Carica modello dal file"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Salva modello in un file"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Chiudi file del modello"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Esporta a immagine"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Esporta modello ad un'immagine"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Esporta a Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Esporta modello in un script Python"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Esci dal Modellizzatore"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Chiudi la finestra del Modellizzatore"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Modello"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Aggiungi comando"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Aggiungi azione (comando di GRASS) al modello"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Aggiungi dati"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Aggiungi dati al modello"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Definisci relazione"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Definisci relazione tra dato e azione"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "Aggiungi ciclo / serie"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "Aggiungi ciclo (serie) al modello"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Aggiungi condizione"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Aggiungi condizione (if/else) al modello"
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr "Aggiungi commento al modello"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Rimuovi elemento"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Elimina azione/dati dal modello"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Proprietà del modello (nome, scopo, ecc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Elimina dati intermediari"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Elimina i dati intermedi definiti nel modello"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Esegui il modello per intero"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Valida modello"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Valida il modello per intero"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Visualizza le pagine HTML del manuale del Modellizzatore Grafico"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Informazione sul Modellizzatore Grafico"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Visualizza informazioni sul Modellizzatore Grafico"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr "Carica file delle istruzioni"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr "Esporta file delle istruzioni"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "Esporta in PostScript"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Esporta in PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr "Avvia la finestra di ps.map"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr "Chiudi il Compositore Cartografico"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "&Inserisci"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 msgid "Add or edit map frame"
 msgstr "Aggiungi o modifica la cornice della mappa"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr "Aggiungi o modifica raster"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr "Aggiungi o modifica vettoriale"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr "Aggiungi o modifica legenda raster e vettoriale"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr "Aggiungi o modifica informazioni della mappa"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr "Aggiungi o modifica barra della scala"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Aggiungi freccia del nord"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Visualizza le pagine HTML del manuale del Compositore Cartografico"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr "Informazioni sul Compositore Cartografico"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr "Visualizza informazioni sul Compositore Cartografico"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Clicca qui per visualizzare il modulo di ricerca"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Clicca qui per nascondere il modulo di ricerca"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Prompt dei comandi"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Finestra di output"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Pulisci il contenuto della finestra di output"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Salva il contenuto della finestra nel file"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Ferma l'esecuzione del comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr "&Log file"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Salva file come..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "File di testo"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "File"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13608,12 +13975,12 @@ msgstr ""
 "\n"
 "Dettagli: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr "Output dei comandi salvati in '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13624,96 +13991,136 @@ msgstr ""
 "\n"
 "Dettagli: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr "Output dei comandi salvati in '%s'"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Categoria"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Selezione elemento vettoriale"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Crea un nuovo mapset"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "La mappa vettoriale non è 3D. Operazione cancellata."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Impossibile aprire vettoriale <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Nessuna sorgente di dati selezionata."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Nuova mappa vettoriale <%s> creata"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Impossibile creare mappa vettoriale <%s>"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Doppio click o Ctrl-Enter per eseguire il modulo selezionato"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 msgid "Run selected module from the tree"
 msgstr "Esegui il modulo selezionato dall'albero dei comandi"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Impostazioni dell'utente"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Imposta default"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 msgid "Revert settings to default"
 msgstr "Ritorna alle impostazioni di default"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr "Applica i cambiamenti solo per la sessione corrente e chiudi"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr "Salva solo per questa sessione"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Impostazioni applicate alla sessione corrente ma non salvate"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "La chiave primaria non può essere una stringa vuota"
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Impostazioni dell'interfaccia grafica"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Impostazione del Layer Manager"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Chiedi quando si sta rimuovendo un layer dal layer tree"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Chiedi quando si sta chiudendo wxGUI o un display"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Nascondi la scheda '%s' (richiede riavvio dell'interfaccia grafica)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Cerca modulo"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 "Copia automaticamente il testo selezionato nella memoria (nella console dei "
 "comandi)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Impostazioni dell'ambiente di lavoro"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Salva il layout corrente della finestra come default"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -13721,198 +14128,191 @@ msgstr ""
 "Salva la posizione e dimensione correnti della finestra Layer Manager e le "
 "finestre Map Display aperte e usa come default per la prossima sessione"
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Aspetto"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Font per output del comando:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Impostazioni lingua"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Scegli linguaggio (richiesto per salvare e far ripartire GRASS)"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Impostazioni dell'aspetto"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Lista degli elementi:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 "Stile del menu (richiede di salvare e riavviare l'interfaccia grafica):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Altezza della finestra della selezione della mappa (in pixel):"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Tema delle icone (richiede riavvio dell'interfaccia grafica)"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Visualizzatore di mappe"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Font di default per i display di GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Impostazioni di default del display"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Visualizza driver:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Barra di stato:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Attiva auto-rendering"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Attiva auto-zoom al layer selezionato."
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Azione della rotella del mouse:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "Impostazioni avanzate del display"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "Moduli"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr "Impostazioni finestre del modulo"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr "Chiudi dialogo quando il modulo è finito correttamente"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Aggiungi la mappa creata nel layer tree"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Permetti input interattivo"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Livello di verbosità:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Layer"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr "Impostazioni per i raster di default"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Rendi celle nulle opache"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Tabella dei colori di default"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr "Impostazioni per i vettoriali di default"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Visualizza:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Colore dell'elemento:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Trasparente"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Colore riempimento dell'area:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Simbolo:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Larghezza linea (in pixel):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 "Evidenzia automaticamente gli elementi selezionati nel visualizzatore di "
 "mappe"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Naviga nei dati"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Doppio click tasto sinistro:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Codifica (es utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Chiedi quando si sta eliminando record(s) dalla tabella"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Crea tabella"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Chiave della colonna:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Impostazioni della proiezione nella barra di stato"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -13924,20 +14324,20 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "codice EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Stringa Proj.4 (richiesto):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "File EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -13945,60 +14345,71 @@ msgstr ""
 "Carica codici EPSG (essere pazienzi), inserisci codice EPSG o direttamente "
 "una stringa Proj.4"
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "&Carica codici EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Formato delle coordinate"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 msgid "Lat/long projections"
 msgstr "Proiezioni Lat/long"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Precisione:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Impossibile leggere i codici EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Impossibile leggere codici EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Codice EPSG %s non trovato"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Seleziona il font di default"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Seleziona il font di default"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Seleziona font:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Codifica dei caratteri:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Esempio: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Gestisci l'accesso ai mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14012,165 +14423,236 @@ msgstr ""
 "    - Puoi scrivere solo nel mapset corrente.\n"
 "    - Puoi scrivere solo nei tuoi mapset."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Proprietario"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Risultato dell'interrogazione"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 "Cliccare con il tasto destro per copiare i valori selezionati negli appunti. "
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Elemento"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Valore"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr "Copia tutto negli appunti"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr "Ridireziona alla console"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr "Copia dalla colonna '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr "Copia le linee selezionate"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr "Copia '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr "Copia linea"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr "Risultato dell'interrogazione:"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr "est, nord"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "Non è stato trovato nulla"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr " (...)"
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+"Il nome <%(name)s> non è un nome valido per mappa di GRASS. Utilizzare solo "
+"carattere ASCII escludendo %(chars)s e spazi"
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr "Ricerca testo completo"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr "Digita per cercare in tutti i moduli. Premere Enter per il prossimo."
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr "Cercando, si prega di digitare più caratteri."
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d moduli che combaciano"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profilo"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Salva le impostazioni attuali"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr "Elimina le impostazioni selezionate attualmente"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Impostazioni locali:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "Carica"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Impostazioni <%s> non trovato"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Salva impostazioni"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "Nome non inserito, impostazioni non salvate"
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Impostazioni <%s> esiste già. Vuoi sovrascrivvere le impostazioni?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "Nessuna impostazione è definita. Operazione cancellata."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "Impossibile salvare le impostazioni"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Salva file"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Inserisci parametro per '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Esegui il commando (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "GRASS GIS Strumento Animazione"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Inserisci parametro per '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Chiudi finestra senza eseguire il comando (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Esegui il commando (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Copia la seguente stringa di comando negli appunti"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Mostra la pagine del manuale del comando (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Aggiungi la mappa(e) creata nel layer tree"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Chiudi dialogo alla fine"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
@@ -14178,73 +14660,74 @@ msgstr ""
 "Chiudi la finestra quando il comando è finito correttamente. Cambia questa "
 "impostazione nella finestra Preferenze (colonna 'Comandi')"
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' copiato negli appunti"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Richiesto"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Opzionale"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "Parametrizzato nel modello"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr "Questa opzione è richiesta"
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[multiplo]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "Range valido"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 "Mostra la rappresentazione grafica dell'estensione temporale di uno o più "
 "dataset. "
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Seleziona colore"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Scegli %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "&Carica"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 msgid "Load and edit content of a file"
 msgstr "Carica e modifica contenuto di un file"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr "&Salva come"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr "Salva il contenuto in un file per ulteriori utilizzi"
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr "o inserisci interattivamente i valori:"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
@@ -14252,20 +14735,38 @@ msgstr ""
 "Inserire direttamente il contenuto del file invece di specificare un file. "
 "Un file temporaneo sarà automaticamente creato. "
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Cartella"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Layer id"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Layer name"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr "La proiezione corrisponde"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manuale"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr "Niente da caricare."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14276,44 +14777,44 @@ msgstr ""
 "\n"
 "Ragione: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Niente da salvare."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Salva input come..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr "Nessuna dataset selezionata."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Errore in %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Impossibile analizzare il comando '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: parametro '%(key)s' non disponibile"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr "Prova di impostare la variabile GRASS_ADDON_PATH o GRASS_ADDON_BASE"
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr "L'oggetto richiesto non è impostato."
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Seleziona location e mapset di GRASS"
 
@@ -14321,45 +14822,45 @@ msgstr "Seleziona location e mapset di GRASS"
 msgid "Location or mapset is not defined."
 msgstr "Location o mapset non definito."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Nome della GRASS location"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Nome del mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Seleziona mapset nella GRASS location"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "Manca il nome del mapset."
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr "Manca il nome della mappa vettoriale."
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Crea tabella degli attributi"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr "Manca il nome per la nuova mappa vettoriale."
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Nome per la nuova mappa vettoriale:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Impossibile creare mappa vettoriale <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
@@ -14368,7 +14869,7 @@ msgstr ""
 "Chiave della colonna vuota o invalida.\n"
 "Impossibile creare mappa vettoriale <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -14376,15 +14877,15 @@ msgid ""
 msgstr ""
 "La mappa vettoriale <%s> esiste già nel corrente mapset. Vuoi sovrascriverlo?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Carica region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Salva region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
@@ -14392,24 +14893,24 @@ msgstr ""
 "Il nome non può iniziare con '.' e non deve contenere spazi, virgole, '/', "
 "''', '@', ',', '=', '*', e tutti i caratteri non alfanumerici."
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr "Crea o modifica gruppi di immagini"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr "Applica cambiamenti al gruppo selezionato e chiudi finestra"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr "Applica cambiamenti al gruppo selezionato"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr "Chiudi finestra, cambiamenti non saranno applicati"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
@@ -14417,449 +14918,341 @@ msgstr ""
 "Inserire qui un'espressione regolare. I caratteri '.*' stanno per tutto, il "
 "carattere '^' sta per inizio e '$' per fine."
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 "Seleziona il gruppo che vuoi editare o inserisci il nome del nuovo gruppo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr "Modica/crea sottogruppo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 "Seleziona il sotto gruppo che vuoi editare o inserisci il nome del nuovo "
 "sotto gruppo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Lista delle mappe:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr "Seleziona layers della mappa e aggiungili alla lista."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr "Rimuove i layer selezionati dalla lista."
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr "Controlla le mappe del gruppo da essere incluse nel sottogruppo."
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr "Aggiungi i layer selezionati nel gruppo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr "Il gruppo <%s> è cambiato, vuoi applicare le modifiche?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr "Non applicare i cambi"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr "Il sotto gruppo <%s> è cambiato, vuoi applicare le modifiche?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 msgid "No raster maps selected."
 msgstr "Nessuno raster selezionato."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr "Nessun cambiamento da applicare al gruppo <%s>"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr "Gruppo <%s> è stato creato con successo."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr "Gruppo <%s> è stato cambiato con successo."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Creazione del nuovo gruppo <%s> fallita."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr "La modifica del gruppo <%s> è fallita."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr "Nessuno gruppo selezionato."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr "Nessuno sotto gruppo selezionato."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "Raster 3D"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Tipologia della mappa:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Seleziona interuttore"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Inverti selezione"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Serie dinamiche (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Importazione multiplo"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Lista dei layer raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr "Lista dei layer vettoriali"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr "Lista dei layers %s"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr "tasto destro per (de)selezionare tutto"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Layer id"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Layer name"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr "Nome per la mappa GRASS di output (editabile)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr "La proiezione corrisponde"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Opzioni"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Importa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importa layer selezionati"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Aggiungi i layer importati nel layer tree"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Aggiungi i layer importati nel layer tree"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Link"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Link layer selezionato"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "Nessun layer selezionato. Operazione cancellata."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Impossibile creare profilo del raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr "Definire il formato di output per i vettoriali"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr "Definire il formato di output per i raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr "Imposta il formato esterno e chiudi dialogo"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr "Nessuna sorgente di dati selezionata."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Importa layers DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Scegli file DXF da importare"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-msgid "No layers selected."
-msgstr "Nessuno layer selezionato."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Imposta l'opacità del layer"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "opaco"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Imposta dimensione dell'immagine"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Dimensione dell'immagine"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Template:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr " Istruzione SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Simboli"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Directory del simbolo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Nome del simbolo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Info"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Copyright"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licenza"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotazione"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autori"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Contributori"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Contributori extra"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Traduttori"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr "Stato della traduzione"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Sito ufficiale di GRASS"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr "Revisione del codice"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Linguaggio"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "File %s mancante"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Errore leggendo il file '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Linee:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Stato"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr "Nazione"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr "   %d tradotte"
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr "   %d non corrette"
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr "   %d non tradotte"
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr "%d tradotte"
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "File <%s> non trovato"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Prosegui"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Precedente"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr "Barra degli strumenti"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "Copia i nomi delle mappe negli appunti (dall'altro verso il basso)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "Copia i nomi delle mappe negli appunti (dal basso verso l'alto)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 msgid "Remove selected map(s) from list"
 msgstr "Rimuove i layer selezionati dalla lista"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 msgid "Layer up"
 msgstr "Layer su"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 msgid "Move selected layer(s) up"
 msgstr "Muove i layer selezionati in su."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 msgid "Layer down"
 msgstr "Layer giù"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 msgid "Move selected layer(s) down"
 msgstr "Muove i layer selezionati in giù."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 msgid "Edit layer properties"
 msgstr "Modifica le proprietà del layer"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 msgid "Change opacity"
 msgstr "Cambia opacità"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr "Cambia opacità del layer"
 
@@ -14956,11 +15349,11 @@ msgstr "Sovrapponi elementi come scala e legenda sulla mappa"
 msgid "Create histogram with d.histogram"
 msgstr "Crea istogramma con d.histogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 msgid "Select graphics tool"
 msgstr "Seleziona strumento grafico"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
@@ -14969,205 +15362,223 @@ msgstr ""
 "Impossibile importare pyGRASS: %s\n"
 "Alcune funzionalità non sarà accessibile"
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Elemento non selezionabile"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr "Tipologia:"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelect: elemento invalido: %s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Impostazioni degli output"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Impostazioni delle sorgenti"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Punto di partenza"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr "Nativo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "File"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protocollo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Tipologia di output"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Tipo di sorgente"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Tutti i file"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "Files ZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "Files GZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "Files TAR"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "Files TARGZ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "File:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Scegli file da importare"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Scegli cartella di input"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Estensione:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Scegli file:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr "Tipologia delle feature:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 msgid "simple features"
 msgstr "features semplici"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr "topologico"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Creazione delle opzioni:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Formato:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protocollo:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr "Nessuna impostazione disponibile"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr "Nessuna sorgente dei dati definita, impostazioni non salvate."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr "LineString"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr "Poligono"
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Nessun layer selezionato. Operazione cancellata."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Il vettoriale di input non esiste."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "La mappa vettoriale non è 3D. Operazione cancellata."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 msgid "GRASS GIS Timeline Tool"
 msgstr "GRASS GIS Strumento Timeline"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 msgid "Select space time dataset(s):"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr "X [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr "Y [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Mapset: %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr "Nome della mappa: %s"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr "Tempo inizio: %s"
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, python-format
 msgid "End time: %s"
 msgstr "Tempo fine: %s"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr "ATTENZIONE: topologia non valida"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
@@ -15175,67 +15586,67 @@ msgstr ""
 "\n"
 "Premere Del per cancellare."
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 msgid " Requested data settings "
 msgstr " Impostazioni dei dati richiesti"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 msgid "Request"
 msgstr "Richiesta"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 msgid "List of layers "
 msgstr "Lista dei layer"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 msgid "Source projection:"
 msgstr "Proiezione della sorgente:"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 msgid "Advanced request settings"
 msgstr "Impostazioni avanzate della richiesta"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 msgid "Reprojection method:"
 msgstr "Metodo della proiezione:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr "Punti più vicini"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 msgid "Linear interpolation"
 msgstr "Interpolazione lineare"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 msgid "Cubic interpolation"
 msgstr "interpolazione cubica"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr "Parametri addizionali per l'interrogazione del server:"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
@@ -15244,371 +15655,372 @@ msgstr ""
 "Impossibile scaricare %s il file delle capabilities\n"
 "da <%s>:\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 msgid "Source image format"
 msgstr "Formato dell'immagine sorgente"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr "Aggiungi layers selezionato nella lista dei layer.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr "Seleziona il formato dell'immagine della sorgente.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 msgid "Select source projection.\n"
 msgstr "Seleziona la proiezione della sorgente.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr "layer"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "Stile"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
-msgid "Add default servers"
-msgstr "Aggiungi server di default"
+#: ../gui/wxpython/web_services/widgets.py:1154
+#, fuzzy
+msgid "Add default"
+msgstr "default"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Impostazioni server"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Server:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Connetti"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Connetti al server"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 msgid "Show advanced connection settings"
 msgstr "Mostra impostazioni avanzate della connessione"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 msgid "Hide advanced connection settings"
 msgstr "Nasconde le impostazioni avanzare della connessione"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr "Impostazioni del Layer Manager"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 msgid "Output layer name:"
 msgstr "Nome del layer di output:"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "Nome utente:"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Password:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr "Connettendo a <%s>..."
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr "Servizi web disponibili"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr "Connesso a <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Impossibile connettersi a <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr ""
 "Aggiunge il layer selezionato del servizio web con layer nell'albero dei "
 "layer"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "&Applica"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 msgid "Name for output raster map:"
 msgstr "Nome per la mappa raster di output:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 msgid "Export region"
 msgstr "Esporta region"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 msgid "Named region"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr "Estensione e risoluzione sono basate sulla regione computazionale"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 msgid "Extent and resolution are based on named region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 msgid "Overwrite existing raster map"
 msgstr "Sovrascrive il raster esistente"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 msgid "Choose named region:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr "&Save layer"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 msgid "Save web service layer as raster map"
 msgstr "Salva il layer del servizio web come raster"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr "Raster di output mancante."
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr "La mappa di output può essere aggiunta solo al mapset corrente."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr "La mappa di output <%s> esiste già."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, python-format
 msgid "Region <%s> does not exist."
 msgstr "La regione <%s> non esiste."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 msgid "Downloading data..."
 msgstr "Scaricamento dati..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 msgid "Unable to fetch data.\n"
 msgstr "Impossibile ottenere i dati.\n"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "Controlla tutto"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "Pulisci tutto"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr "Inserisci valori degli attributi per il vettoriale"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr "Formato colore errato. Usa il formato  '0:0:0'"
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Seleziona mappa vettoriale:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr "Importa o esporta tabella dei colori:"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr "Scegli il file dal quale caricare la tabella dei colori"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Carica"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 "Scrivi il nome del file o clicca per scegliere un file e carica la tabella "
 "dei colori"
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Scegli il file in cui salvare la tabella dei colori"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 "Scrivi il nome del file o clicca per scegliere un file e salvare la tabella "
 "dei colori"
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 msgid "&Set"
 msgstr "&Impostazioni"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 msgid "Load color table:"
 msgstr "Carica tabella dei colori:"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr "Carica tabella dei colori dal file:"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr "Salva tabella dei colori nel file:"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr "Ricarica la tabella di default"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Il file della regione <%s> esiste gi?. Vuoi sovrascriverlo?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr "Formato della tabella dei colori invalido"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 "Valore della regola '%s' invalido. Impossibile applicare la tabella dei "
 "colori."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Crea nuova tavola dei colori per raster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Inserisci valore o percentuale nella categoria del raster"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "intervallo fp"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 "Inserisci valore o percentuale nella categoria del raster (%(range)s = "
 "%(min)d-%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr "Crea nuove regole per i colori del vettoriale"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr "Inserisci valori dell'attributo del vettoriale o percentuali:"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr "Inserisci valori degli attributi del vettoriale:"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr "Seleziona colonne del vettoriale"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Livello:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Colonna degli attributi:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr "Carica colore dalla colonna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr "Salva colore alla colonna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr "Carica dimensione dalla colonna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr "Salva dimensione alla colonna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr "Carica larghezza dalla colonna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr "Salva larghezza nella colonna:"
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr "Usa una colonna dei colori invece della tabella dei colori:"
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Aggiungi colonna GRASSRGB alla tabella degli attributi attuale."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr "Importa o esporta tabella dei colori"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -15617,582 +16029,728 @@ msgstr ""
 "La connessione al databse per il vettoriale <%s> non è definito nel DB file. "
 "Vuoi creare e connettere una nuova tabella degli attributi?"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr "Nessuna connessione al database definita"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "La colonna %s esiste già."
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Attendere, caricamento dei dati dalla tabella degli attributi..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Troppi record"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Inserisci il valore o la percentuale dell'attributo del vettore %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Inserisci il valore dell'attributo del vettore %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr "Selezionare la colonna dove salvare i valori."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "Nessuna colonna dei colori definita. Operazione cancellata"
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS GIS Calcolatore per Raster Map Algebra"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS GIS Calcolatore per Raster 3D Map Algebra"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "istruzione mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operatori"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operandi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Espressione"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Salva espressione in un file"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Carica espressione dal file"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "esponente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dividi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "somma"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "sottrai"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "modulo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "moltiplica"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "sposta a sinistra"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "sposta a destra"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "sposta a destra (unsigned)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "maggiore di"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "Crea o ricrea topologia"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "minore di"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "minore o uguale a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "uguale a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "non uguale a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "Mostra regione computazionale"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NOT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "AND logico"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "AND logico (ignora NULLs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "OR logico"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "OR logico (ignora NULLs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "opzionale"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Nome per il nuovo raster 3D da creare"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Nome per il nuovo raster da creare"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Inserisci raster 3D esistente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Inserisci raster esistente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Inserisci funzione mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Aggiungi la raster creata nel layer tree"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr "Bisogna inserire il nome della nuova mappa da creare."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr "Bisogna inserire un'istruzione per creare una nuova mappa."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Scegli un nome per salvara l'espressione"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "File espressione (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Scegliere il nome di un file per caricare l'espressione"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'{cmd}' copiato negli appunti"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Trova e installa estensione dai GRASS Addons"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr "Lista delle estensioni - doppio click per installare"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Opzioni"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Trova"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr "Trova lista dei moduli disponibile dal repository svn GRASS Addons"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Installa"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "Installa il modulo GRASS add-ons selezionato"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr "Visualizza la pagina del manuale di g.extension"
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "Estensione non definito"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr "Controllando la lista dei moduli dal SVN GRASS-Addons (attendere)..."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Estensioni (addons) aggiuntive"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr "Installa"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr "Mostra pagina del manuale"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Impossibile caricare l'estensione. %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Gestisce le estensioni degli GRASS Addons installate"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "Lista delle estensioni installate"
 
-#: ../gui/wxpython/modules/extensions.py:370
-msgid "Uninstall"
-msgstr "Disinstalla"
+#: ../gui/wxpython/modules/extensions.py:413
+msgid "Uninstall"
+msgstr "Disinstalla"
+
+#: ../gui/wxpython/modules/extensions.py:415
+msgid "Uninstall selected Addons extensions"
+msgstr "Disinstalla l'estensioni selezionata"
+
+#: ../gui/wxpython/modules/extensions.py:419
+msgid "Reinstall"
+msgstr "Reinstalla"
+
+#: ../gui/wxpython/modules/extensions.py:421
+msgid "Reinstall selected Addons extensions"
+msgstr "Reisinstalla l'estensioni selezionata"
+
+#: ../gui/wxpython/modules/extensions.py:462
+msgid "No extension selected. Operation canceled."
+msgstr "Nessuna estensione selezionata. Operazione cancellata"
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+"Lista dei file da rimuovere:\n"
+"%(files)s\n"
+"\n"
+"Si vuole realmente rimuove l'estensione <%(ext)s>?"
+
+#: ../gui/wxpython/modules/extensions.py:493
+msgid "Remove extension"
+msgstr "Rimuovi estensione"
+
+#: ../gui/wxpython/modules/extensions.py:526
+msgid "Extension"
+msgstr "Estensione"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Importazione multiplo"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Lista dei layer raster"
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr "Lista dei layer vettoriali"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr "Lista dei layers %s"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr "tasto destro per (de)selezionare tutto"
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr "Nome per la mappa GRASS di output (editabile)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Importa"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importa layer selezionati"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Impostazioni delle sorgenti"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Impostazioni del font"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Aggiungi i layer importati nel layer tree"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Aggiungi i layer importati nel layer tree"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Link"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Link layer selezionato"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "Nessun layer selezionato. Operazione cancellata."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Impossibile creare profilo del raster"
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr "Definire il formato di output per i vettoriali"
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr "Definire il formato di output per i raster"
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr "Imposta il formato esterno e chiudi dialogo"
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr "Nessuna sorgente di dati selezionata."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Importa layers DXF"
 
-#: ../gui/wxpython/modules/extensions.py:371
-msgid "Uninstall selected Addons extensions"
-msgstr "Disinstalla l'estensioni selezionata"
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Scegli file DXF da importare"
 
-#: ../gui/wxpython/modules/extensions.py:372
-msgid "Reinstall"
-msgstr "Reinstalla"
+#: ../gui/wxpython/modules/import_export.py:758
+msgid "No layers selected."
+msgstr "Nessuno layer selezionato."
 
-#: ../gui/wxpython/modules/extensions.py:373
-msgid "Reinstall selected Addons extensions"
-msgstr "Reisinstalla l'estensioni selezionata"
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Proiezione"
 
-#: ../gui/wxpython/modules/extensions.py:410
-msgid "No extension selected. Operation canceled."
-msgstr "Nessuna estensione selezionata. Operazione cancellata"
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Nome per la mappa GRASS di output (editabile)"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
-"Lista dei file da rimuovere:\n"
-"%(files)s\n"
-"\n"
-"Si vuole realmente rimuove l'estensione <%(ext)s>?"
 
-#: ../gui/wxpython/modules/extensions.py:433
-msgid "Remove extension"
-msgstr "Rimuovi estensione"
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Layer da eliminare"
 
-#: ../gui/wxpython/modules/extensions.py:464
-msgid "Extension"
-msgstr "Estensione"
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Importa layer selezionati"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Nessuna librerie GRASS-python trovata."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Dati di input"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Dataset puntuale:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Colonna numerica:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Nome per la mappa raster di output:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Esporta mappa della varianza come: "
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Modulo Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Pronto."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Ottimizzazione del variogramma"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Traccia/aggiorna variogramma"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Tecniche di Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Dimensione del blocco:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Auto ottimizzazione del variogramma"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Modello:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Lavori in corso! Non esiste ancora la funzione."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "GRASS GIS Strumento Istogramma (d.histogram)"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Seleziona il tipo di carattere per il testo dell'istogramma"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Imposta gli strumenti di pulizia vettoriale"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "rompe linee/aree"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "rimuove duplicati"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "rimuove sporgenze"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "cambia sporgenze dei confini a linee"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "rimuove ponti"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "cambia ponti in linee"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "unisce linee/aree"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "Rimuove i centroidi duplicati"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "Separa poligoni"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "ridurre linee/aree"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "rimuove aree piccole"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "rimuove linee/aree con lunghezza zero"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "rimuovo piccoli angoli ai nodi"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Scegli gli strumenti di pulizia e imposta le soglie"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Seleziona vettoriale di input:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Tipologia delle feature:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Seleziona vettoriale di output:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Copia la seguente stringa di comando negli appunti (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "linea"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "area"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "centroide"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "superficie"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. strumento di pulizia rimosso, sarà ignorato"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Seleziona uno strumento di pulizia per rimuovere"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. strumento di pulizia spostato sopra"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "1. strumento di pulizia non può essere mosso sopra"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr "Seleziona uno strumento di pulizia da muovere sopra"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. strumento di pulizia da muovere sotto"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "L'ultimo strumento di pulizia non può essere mosso sotto"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "Selezionare uno strumento di pulizia da muovere sotto"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "strumento di pulizia: '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "Soglia per %(num)s. strumento '%(tool)s': %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr "Nome del vettoriale di input"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr "Nome per il vettoriale di output"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Soglia"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr "'%s' non definito"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16203,20 +16761,20 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Operazione di pulizia selezionate in esecuzione..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Comando di pulizia vettoriale copiato negli appunti"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Impossibile aprile il file <%s> per leggerlo"
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16230,43 +16788,65 @@ msgstr ""
 "\n"
 "Numero delle linee saltate: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "riga %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: la tipologia di layer <%(type)s> non è supportata"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr "Comando '%s' fallito\n"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Dettagli: %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Layer '%s' non supportato"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "ERRORE: Rendering fallito. Dettagli: %s"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Visualizzazione &"
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr "Scaricamento dati"
+
+#: ../gui/wxpython/core/render.py:643
+msgid "Rendering & "
+msgstr "Visualizzazione &"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr "Visualizzazione..."
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 "Errore: Impossibile aprire '%(file)s'. Motivazione: %(ret)s. Usciti da "
 "wxGUI.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
@@ -16275,32 +16855,32 @@ msgstr ""
 "\n"
 "ERRORE: Impossibile leggere il file WIND: %s\n"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Dimensione mappa non valida: %d,%d\n"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Impossibile zoomare al raster <%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Dettagli:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Impossibile zoomare al vettoriale <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Impossibile fare zoom al raster 3d <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
@@ -16308,93 +16888,66 @@ msgstr ""
 "Impossibile ottenere l'estensione geografica attuale. Uscita forzata da "
 "wxGUI. Per favore eseguire manualmente g.region per risolvere il problema"
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "ERRORE: Rendering fallito. Dettagli: %s"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Impossibile visualizzare layer <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Impossibile visualizzare <%s> sovrapposto"
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr "Scaricamento dati"
-
-#: ../gui/wxpython/core/render.py:1386
-msgid "Rendering & "
-msgstr "Visualizzazione &"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr "Visualizzazione..."
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr "Etichetta sconosciuta %s"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 msgid "Unable to create toolboxes directory."
 msgstr "Impossibile creare la directory dei toolboxes"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr "Errore di sintassi: %s"
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Vettoriale <%(map)s>:%(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Impossibile aprire '%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "ERRORE: Impossibile determinare la versione di GRASS. Dettagli: %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Impossibile aprile il file '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
@@ -16403,17 +16956,17 @@ msgstr ""
 "%s: linea saltata - impossibile leggere '%s'\n"
 "Ragione: %s\n"
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Chiave duplicata: %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Impossibile creare il file '%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16426,173 +16979,178 @@ msgstr ""
 "\n"
 "Opzioni <%(opt)s>: la lettura dallo standard input non è supportata da wxGUI"
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "File <%s> non trovato."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d sec"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d min %(sec)d sec"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 "Attenzione notare che i dati sono inconistenti e possono essere corrotti"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Comando interrotto"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Comando terminato"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Motivo"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Esecuzione fallita:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Errore:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Impossibile eseguire il comando '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Rompi segmento"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 msgid "Data point"
 msgstr "Dati puntuali"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr "animazione"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Collassa tutto eccetto PERMANENT e il corrente"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Collassa tutto eccetto PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Collassa tutto eccetto corrente"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Collassa tutto"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Espandi tutto"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Visualizza i selezionati"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "Classico (solo descrizione)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "Combinata (descrizione e nome dei moduli)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr "Avanzato (solo nome dei moduli)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 msgid "List left"
 msgstr "Lista sinistra"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Zooma e ricentra"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Niente"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "Ruota in avanti per aumentare lo zoom"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "Ruota indietro per aumentare lo zoom"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "box"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "sfera"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cubo "
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamante"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "aster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "istogramma"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Impossibile leggere il file delle impostazioni <%s>\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -16603,11 +17161,11 @@ msgstr ""
 "\t\tDettagli: %(detail)s\n"
 "\t\tLinea: '%(line)s'\n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "Impossibile creare la directory delle impostazioni"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -16617,16 +17175,16 @@ msgstr ""
 "Scrittura delle impostazione nel file <%(file)s> fallita.<br> <br> Dettagli: "
 "%(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Impossibile da settare"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Impossibile analizzare le impostazioni '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
@@ -16634,31 +17192,31 @@ msgstr ""
 "Impossibile caricare i bindings Python di GDAL.\n"
 "I layers WMS non possono essere visualizzati senza i bindings.\n"
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Definisci il nome del GRASS Database e della Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Cartella del Database GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Location del progetto"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Nome della location nella directory GIS Data"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Nome della Location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "Titolo della location opzionale, si può lasciare questo campo bianco."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
@@ -16667,24 +17225,24 @@ msgstr ""
 "Il nome <%(name)s> non è un nome valido per la location. Si prega di usare "
 "solo caratteri ASCII %(chars)s and spazi."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Nome della location non valido"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Scegli la cartella dei dati GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "La location esiste già nel Database GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Impossibile creare la location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
@@ -16692,180 +17250,211 @@ msgstr ""
 "Il titolo della location è limitato ad una sola linea e 256 caratteri. Il "
 "resto del testo sarà ignorato"
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Scegli il metodo per creare una nuova location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Seleziona il codice EPSG del sistema di coordinate"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr "Leggi proiezioni e datum da un file georiferito"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "Leggi proiezione e datum da un Well Known Text (WKT) .prj file"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Seleziona il sistema di coordinate da una lista"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "Specifica proiezione e datum utilizzando parametri PROJ.4"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Crea un sistema di coordinate cartesiane generico (XY) "
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Modalità semplice"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Avanzato"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Scegli la proiezione"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Codice"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Codice della proiezione:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Cerca nella descrizione:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Impossibile leggere la lista: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Scegli i parametri della proiezione"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Seleziona datum con elissoide associato (prossima pagina)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datum con elissoide associato"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Solo Elissoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "È necessario inserire un valore per %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Inserisci parametro per la proiezione %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Specifica il datum geodetico"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elissoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Codice del datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Specifica l'elissoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Codice dell'elissoide:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Seleziona file georeferenziato"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "File georeferenziato:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "Seleziona il file .prj Well Known Text (WKT)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr "File WTK .prj:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Scegli codice EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Percorso al file dei codici EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Scegli file dei codici EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Scegli codice EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Percorso al file dei codici EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "codice EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Scegli file dei codici EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Impossibile leggere i codici EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Scegli metodo per specificare i parametri di georeferenziazione"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Inserisci la stringa dei parametri PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Trasformazione del datum richiesta."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Database di GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Nome della Location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Nome della Location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Proiezione:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
@@ -16873,20 +17462,20 @@ msgstr ""
 "Definizione PROJ.4:\n"
 " (non-definitivo)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Vuoi creare la GRASS location <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Crea nuova location?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definisci la nuova GRASS location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -16897,15 +17486,15 @@ msgstr ""
 "\n"
 "Dettagli: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Location wizard cancellato. Location non creato"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Impossibile creare nuova location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -16914,122 +17503,127 @@ msgstr ""
 "Location <%(loc)s> sarà creata nella cartella dei dati GIS <%(dir)s>. Dovrai "
 "cambiare la cartella dei dati GIS nella schermata di avvio di GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Nuova cartella del Database GIS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Codice EPSG mancante."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Codice EPSG mancante."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "File <%s> non trovato."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Imposta l'estensione e la risoluzione della region di default"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Imposta region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Location selezionata non valida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Region non valida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Clicca qui per mostrare le impostazioni 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Clicca qui per nascondere le impostazioni 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Righe: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Colonne: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Celle: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Profondità: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Celle 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Risoluzione alto-basso"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Nord"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Ovest"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Est"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Sud"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "risoluzione N-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "risoluzione E-O"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Valore non valido: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Seleziona trasformazione datum"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Seleziona dalla lista dei datum"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
@@ -17038,109 +17632,109 @@ msgstr ""
 "L'immagine è troppo grossa, l'implementazione del tuo OpenGL supporta una "
 "dimensione massima della texture di  %d px."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Est"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Nord"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Elevazione"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "Mappa dell'elevazione della superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "Mappa del colore della superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "Distanza XY dal precedente"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "Distanza XYZ dal precendente"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr "Distanza lungo la superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr "Distanza lungo exag.surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "Nessun punto sulla superficie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Sto caricando raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Sto caricando raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "fallito"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Layer '%s' non supportato"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Impossibile caricare raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Impossibile caricare raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "Raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "Caricato con successo"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Caricamento vettore <%(name)s> (%(type)s) fallito"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Impossibile caricare vettoriale <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Vettoriale <%(name)s> (%(type)s) caricato con successo"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Vettoriale puntuale non trovato (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Impossibile impostare proprietà del layer (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17151,46 +17745,46 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "costante#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Vista"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analisi"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animazione"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Vista di controllo"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr "Regola la distanza e la prospettiva angolare del punto di vista"
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Prospettiva:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "Ruota il piano della superficie dall'orizzontale"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Rotazione:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
@@ -17198,23 +17792,23 @@ msgstr ""
 "Regola l'altezza della vista dalla superficie (l'angolo di visione è "
 "regolato automaticamente per mantenere lo stesso centro della vista)"
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "esagerazione verticale"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Vista:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "qui"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
@@ -17222,254 +17816,254 @@ msgstr ""
 "Permette di selezionare un punto sulla superficie che diventa il nuovo "
 "centro della vista. Clicca sul bottone e poi sulla superficie."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "centro"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Reimposta la vista all'impostazione di default del centro della vista."
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "sopra"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "resetta"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Resetta alla visualizzazione di default"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Aspetto dell'Immagine"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Registra"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Esegui"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Numero totali di frame :"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Salva sequenza di immagini"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Scegli una directory per le immagini"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr "I file generati saranno chiamati come: prefix_1.ppm, prefix_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Superficie"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Superficie costante"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vettoriale"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Evidenziazione"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "Bordo"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr "Piani di taglio"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Tipologia:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "scabro"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "liscio"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "entrambi"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Ombreggiatura:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "piano"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Imposta a tutti"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Usa impostazioni di disegno per tutte le superfici caricate"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Modalità grezza:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "risoluzione:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "stile:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "linea"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "superficie"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr "Cambia colore della linea"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Modalità fine:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Attributi della superficie"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Trasparenza"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Luminosità"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "mappa"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "deseleziona"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "costante"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Cambia la posizione x, y e z delle superficie corrente"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Resetta"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Resetta alla posizione di default"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "Piano di taglio attivo:"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "cancella"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "ombreggiato"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "X orizzontale:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "Imposta la coordinata X del corrente piano di taglio"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Y orizzontale:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "Imposta la coordinata Y del corrente piano di taglio"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
@@ -17477,348 +18071,348 @@ msgstr ""
 "Imposta la coordinata Z del corrente piano di taglio (significativo solo se "
 "l'inclinazione non è 0)"
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Valore:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Trasparenza:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Mostra le linee vettoriale"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Linee vettoriali"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Linea:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "larghezza:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "colore:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr "usa colore per mappe tematiche"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr "usa la larghezza per mappe tematiche"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr "Imposta opzioni..."
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "sulla superficie:"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr "come 3D"
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Altezza sulla superficie:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Mostra punti vettoriali"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Punti vettoriale"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Icona:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr "usa la dimensione per "
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "isosuperfici"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Risoluzione:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Lista delle isosuperfici"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Mostra il modello leggero"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Posizione della luce"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Regola l'altezza della luce"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Colore e intensità della luce"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Luminosità:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Regola la luminosità"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Ambiente:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Regola la luce ambiente"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "Vertici con bordo"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "N && O"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "N && E"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "S && O"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "S && E"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr "Altezza del bordo dalla base:"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "La lunghezza della freccia (in unità della mappa):"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Colore della freccia:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Posiziona freccia"
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Lunghezza della barra della scala (in unità della mappa): "
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Colore della barra della scala:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr "Aggiungi nuova barra della scala"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr "Vuoi registrare una nuova animazione senza salvare la precedente?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "Animazione già esistente"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "Nessun prefisso del file passato."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "La directory %s non esiste."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Attributi delle isosuperfici"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Valore isosuperfici"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "NO"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "NE"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "SE"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "SO"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Livello"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr "Barra della scala %d"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Nessuno"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Mappa vettoriale è 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Mappa vettoriale è 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d elementi (%(points)d points)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "sulla superficie"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "intervallo:"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Vertice nord:"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Vertice sud:"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Vertice ovest:"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Bordo a est:"
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr "Nord (Y)"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Altezza (Z):"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr "Est (X)"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr "Vertice basso:"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr "Bordo superiore:"
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr "Regola distanza e direzione del punto di vista"
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
@@ -17826,82 +18420,82 @@ msgstr ""
 "Regola la direzione della luce. Clicca e trascina il dischetto per cambiare "
 "la direzione della luce."
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Raster 3D <%s> non trovato"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 msgid "3D view default settings"
 msgstr "Impostazioni di default della visualizzazione 3D"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 "Ripristina le impostazioni di default, le modifiche non verranno salvate."
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "valore:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "step:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Posizione:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Curva:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Luca"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Evidenzia:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Impostazioni visualizzazione 3D salvate nel file <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 msgid "No data set."
 msgstr "Nessun dato impostato."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -17917,7 +18511,7 @@ msgstr ""
 "È possibile ridurre il numero di celle nella regione corrente usando il "
 "comando <g.region>."
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -17937,22 +18531,22 @@ msgstr ""
 "Si vuole continuare usando lo strumento Scatter Plot interattivo con questa "
 "regione?"
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr "La banda <%s> non è di tipologia CELL (interi).\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 msgid "Scatter plot cannot be added.\n"
 msgstr "Scatter plot non può essere aggiunto.\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -17963,7 +18557,7 @@ msgstr ""
 "Diversi intervalli delle bande <%s:%d * %s:%d = %d> è più alto che il limite "
 "massimo <%d>.\n"
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -17974,7 +18568,7 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
@@ -17985,7 +18579,7 @@ msgstr ""
 "\n"
 "Non ci sono ancora classi, se ne vuole creare una?"
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
@@ -17995,17 +18589,17 @@ msgstr ""
 "plot:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr "Esporta la classe raster <%s> dello scatter plot"
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr "La classe raster <%s> dello scatter plot esportata nel raster <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18019,60 +18613,60 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "Caricamento librerie ctypes fallito"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 msgid "scatter plot"
 msgstr "scatter plot"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr "Limite massimo del numero di categorie è stato raggiunto."
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr "Rinomina classe"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 msgid "Set color"
 msgstr "Imposta colore"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr "Nascondere"
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "Mostra"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr "Spostare in alto"
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr "Spostare in basso"
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 msgid "Move category up"
 msgstr "Muove categoria in su"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr "Muove categoria in giù"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 msgid "Export class raster"
 msgstr "Esporta classe raster"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr "cambia opacità della classe <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr "È stato inserito un nome vuoto."
 
@@ -18082,96 +18676,96 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr "Zoom all'estensione dello scatter plot"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 msgid "Add scatter plots"
 msgstr "Aggiungi scatter plots"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr "asse x:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr "asse y:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr "Bande dello scatter plot da aggiungere (x y):"
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 msgid "No scatter plots selected."
 msgstr "Nessuno scatter plot selezionato."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr "Seleziona entrambe le bande x e y."
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr "Le bande selezionate devono essere differenti."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Il raster <%s> esiste già. Vuoi sovrascriverlo?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr "Raster <%s> esiste"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 msgid "Selection polygon color:"
 msgstr "Seleziona colore del poligono:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr "Colore per i vertici del poligono selezionati:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 msgid "Selected area color:"
 msgstr "Seleziona colore area:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 msgid "Selected area opacity:"
 msgstr "Seleziona l'opacità dell'area:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 msgid "Selection style:"
 msgstr "Seleziona stile:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 msgid "Ellipses settings:"
 msgstr "Impostazioni delle ellissi:"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr "Seleziona la categoria per l'editing"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr "Elaborazione dello sctter plot fallita."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
@@ -18180,7 +18774,7 @@ msgstr ""
 "v.build fallito:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
@@ -18189,85 +18783,85 @@ msgstr ""
 "v.to.rast fallito:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 msgid "Add scatter plot"
 msgstr "Aggiungi scatter plot"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr "Seleziona area con poligono"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr "Modalità sposta per lo scatter plot"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 "Modalità zoom per lo scatter plot (bottone sinistro del mouse, rotella)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr "Visualizza/nascondi il manager delle classi"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr "Include l'area selezionata alla classe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr "Esclude l'area selezionata dalla classe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Aggiungi nuovo vertice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr "Aggiungi nuovo vertice al contorno del poligono per lo scatter plot"
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 msgid "Create selection polygon"
 msgstr "Crea poligono di selezione"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr "Aggiungi nuovo vertice tra il primo e l'ultimo punto del contorno"
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Muovi vertici"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 msgid "Move boundary vertex"
 msgstr "Muovi vertice del confine"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Rimuovi vertici"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 msgid "Remove boundary vertex"
 msgstr "Rimuove vertice del confine"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 "Rimuove poligono (cliccare sullo scatter plot per rimuovere il suo poligono)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 msgid "Add class"
 msgstr "Aggiungi classe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 msgid "Remove selected class"
 msgstr "Rimuove la classe selezionata"
 
@@ -18278,6 +18872,31 @@ msgstr "Rimuove la classe selezionata"
 #~ "Impossibile importare matplotlib (provare ad installarlo).\n"
 #~ "%s"
 
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "Le unità dell'attuale proiezione non sono supportate,\n"
+#~ " saranno usati i metri"
+
+#~ msgid "Unsupported units"
+#~ msgstr "Unità non supportate"
+
+#~ msgid "Map layers"
+#~ msgstr "Layer"
+
+#~ msgid "Search modules"
+#~ msgstr "Cerca moduli"
+
+#~ msgid ""
+#~ "Failed to query vector map <{map}>. Check database settings and topology."
+#~ msgstr ""
+#~ "Interrogazione del vettoriale <{map}> fallita. Controllare le "
+#~ "impostazioni del database e la topologia."
+
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Vuoi eliminare la mappa < {m} >?"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "La mappa di output <%s> esiste già."
@@ -18297,6 +18916,22 @@ msgstr "Rimuove la classe selezionata"
 #~ msgid "Exit GUI"
 #~ msgstr "Esci dalla GUI"
 
+#~ msgid "Invalid input data"
+#~ msgstr "Dati di input invalido"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Nessuna impostazione disponibile"
+
+#~ msgid "Editing"
+#~ msgstr "Modificando"
+
+#~ msgid "Renaming"
+#~ msgstr "Rinominando"
+
+#~ msgid "Copying"
+#~ msgstr "Copiando"
+
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Mostra mappe di un dataset raster 3D"
 
@@ -18309,48 +18944,21 @@ msgstr "Rimuove la classe selezionata"
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "Statistiche univariate del dataset raster 3D"
 
-#~ msgid "Add condition"
-#~ msgstr "Aggiungi condizione"
-
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Aggiungi condizione (if/else) al modello"
+#~ msgid "Repository"
+#~ msgstr "Repository"
 
-#~ msgid "this might not work for multiple bands"
-#~ msgstr "questo potrebbe non funzionare per più bande"
+#~ msgid "Load settings:"
+#~ msgstr "Impostazioni locali:"
 
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Aggiungi layers linkato nel layer tree ({mightNotWork})"
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Impossibile visualizzare layer <%s>."
 
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Aggiungi i layer importati nel layer tree ({mightNotWork})"
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Impossibile visualizzare <%s> sovrapposto"
 
 #~ msgid "Unpacks a raster map packed with r.pack."
 #~ msgstr "Estrai un raster compresso con r.pack"
 
-#~ msgid "Unpacks a vector map packed with v.pack."
-#~ msgstr "Estrai un vettoriale impacchettato con v.pack."
-
-#~ msgid "Multiple import formats using OGR"
-#~ msgstr "Importa diversi formati utilizzando OGR"
-
-#~ msgid "Multiple GPS export formats using GPSBabel"
-#~ msgstr "Esporta in diversi formati GPS usando GPSBabel"
-
-#~ msgid ""
-#~ "Exports a vector map to a GPS receiver or file format supported by "
-#~ "GPSBabel."
-#~ msgstr ""
-#~ "Esporta un vettoriale in un GPS o un file con un formato supportato da "
-#~ "GPSBabel."
-
-#~ msgid "Common export formats using OGR"
-#~ msgstr "Esporta diversi formati usando OGR"
-
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr ""
-#~ "Imposta la regione computazionale dalla/e mappa/e selezionata/e (ignora "
-#~ "nulli)"
-
 #~ msgid "Historical GRASS vector import"
 #~ msgstr "Import vecchi GRASS vector"
 
@@ -18370,6 +18978,25 @@ msgstr "Rimuove la classe selezionata"
 #~ msgid "GEOnet import"
 #~ msgstr "Importa GEONET"
 
+#~ msgid "Unpacks a vector map packed with v.pack."
+#~ msgstr "Estrai un vettoriale impacchettato con v.pack."
+
+#~ msgid "Multiple import formats using OGR"
+#~ msgstr "Importa diversi formati utilizzando OGR"
+
+#~ msgid "Multiple GPS export formats using GPSBabel"
+#~ msgstr "Esporta in diversi formati GPS usando GPSBabel"
+
+#~ msgid ""
+#~ "Exports a vector map to a GPS receiver or file format supported by "
+#~ "GPSBabel."
+#~ msgstr ""
+#~ "Esporta un vettoriale in un GPS o un file con un formato supportato da "
+#~ "GPSBabel."
+
+#~ msgid "Common export formats using OGR"
+#~ msgstr "Esporta diversi formati usando OGR"
+
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr "IDW per punti raster (metodo alternativo per punti sparsi)"
 
@@ -18379,5 +19006,32 @@ msgstr "Rimuove la classe selezionata"
 #~ msgid "Bit pattern comparison "
 #~ msgstr "Controllo dei bit pattern"
 
+#, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Gestore Tabella degli Attributi"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr ""
+#~ "Imposta la regione computazionale dalla/e mappa/e selezionata/e (ignora "
+#~ "nulli)"
+
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "File dei dati <%(name)s> importato con successo."
+
+#~ msgid "Add default servers"
+#~ msgstr "Aggiungi server di default"
+
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Aggiungi layers linkato nel layer tree ({mightNotWork})"
+
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Aggiungi i layer importati nel layer tree ({mightNotWork})"
+
+#~ msgid "Digitize"
+#~ msgstr "Digitalizza"
+
+#~ msgid "GRASS SVN Revision"
+#~ msgstr "Revisione SVN GRASS"
+
+#~ msgid "this might not work for multiple bands"
+#~ msgstr "questo potrebbe non funzionare per più bande"
diff --git a/locale/po/grasswxpy_ja.po b/locale/po/grasswxpy_ja.po
index bad8408..3ef946e 100644
--- a/locale/po/grasswxpy_ja.po
+++ b/locale/po/grasswxpy_ja.po
@@ -11,7 +11,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_ja\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2012-03-08 17:45+0900\n"
 "Last-Translator: taniguchi <taniguti at apptec.co.jp>\n"
 "Language-Team: Japanese <grass-translations at lists.osgeo.org>\n"
@@ -23,52 +23,52 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Bookmarks: 595,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "GRASSデータディレクトリの選択:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "GRASSロケーションからマップセット選択"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "GRASSのロケーションとマップセットを選択"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "GRASSを実行する"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "参照(&B)"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -76,151 +76,151 @@ msgstr ""
 "(選択したロケーション内)"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "選択したロケーション名を変更する "
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "削除 "
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "選択ロケーションを削除する"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "名前変更(&R)"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "選択したマップセット名を変更する "
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "削除 "
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "マップセットを削除"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS レイヤーマネージャー "
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "GRASSを実行する"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "エラー "
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "GRASSデータベースをセット出来ません 設定をチェックして下さい"
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "エラー: ロケーション <%s> がありません "
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "エラー: マップセット <%s> がありません "
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "エラー:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "GRASS ロケーションを作成しますか <%s>?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "新しいマップセットの作成 "
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "ロケーション <%s> が作成されました"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "デフォルト領域と解像度をセットしますか?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "ベクトルマップ<%s> の幾何補正に失敗しました"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -230,7 +230,7 @@ msgstr ""
 "\n"
 "このマップセットの名前は変更できません."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -241,12 +241,12 @@ msgstr ""
 "\n"
 "新しい名前:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "メッセージ "
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -257,7 +257,7 @@ msgstr ""
 "\n"
 "マップセット <%s> はすでにロケーション内に存在します."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -268,7 +268,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -279,7 +279,7 @@ msgstr ""
 "\n"
 "ロケーション <%s> はすでにGRASSデータベース内に存在します."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -290,7 +290,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -300,7 +300,7 @@ msgstr ""
 "\n"
 "このマップセットの名前は削除できません."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -312,11 +312,11 @@ msgstr ""
 "\n"
 "マップセットに含まれるマップは全て削除されます!  "
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "マップセットを削除できません "
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -327,41 +327,41 @@ msgstr ""
 "\n"
 "このロケーションに含まれるすべてのマップが削除されます"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "ロケーションを作成できません"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "GRASSデータベースをセット出来ません 設定をチェックして下さい"
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "GISデータディレクトリの選択"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "新しいマップセット名:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, fuzzy, python-format
 msgid "Mapset <%s> already exists."
 msgstr "ファイルはすでに存在します"
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -370,17 +370,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "選択したマップセット名を変更する "
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "マップセットの作成ができません: %s "
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -398,11 +398,11 @@ msgstr ""
 "\n"
 " .gislock ファイルを削除して継続を試みますか (この操作には権限が必要です)?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "ロックファイルが見つかりました"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -414,7 +414,7 @@ msgstr ""
 "他にGRASSのセッションが動作中であれば、データを破損する可能性があります。タス"
 "クマネージャにて再度確認してください..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -425,19 +425,19 @@ msgstr ""
 "\n"
 "詳細: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "間違った領域"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -465,191 +465,191 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "幾何補正ツールバー "
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "デジタイザーエラー"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "画面を出力 "
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "ターゲット表示"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 #, fuzzy
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "ターゲットからソースへの表示を調整する"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 #, fuzzy
 msgid "Adjust Preview display to Training Area Display"
 msgstr "ソースからターゲットへの表示を調整する"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "領域表示"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "領域表示"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "ベクトルマップのインポート "
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "ベクトルマップがオープンできません <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "ベクトルマップがオープンできません <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "抽出するものがありません"
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "分析 "
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "ファイルはすでに存在します"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "フィーチャーID %d 読み込みエラー 処理がキャンセルされました"
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "フィーチャーID %d は利用不可です 処理がキャンセルされました"
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "ヒストグラム"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "ベクトルポイント"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -658,607 +658,608 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "ラスターマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "ラスターマップをロード"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "ラスターマップをロード"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "グループ選択:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "グループを作成/編集..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "グループ選択:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "グループ選択:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "グループ選択:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "マップセット名:"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "ラスターマップ名:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "ベクトルマップ名:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "画像分類 "
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "画像分類 "
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "カラー"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "選択したマップのズーム"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "式をファイルに保存"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "新しいマップセット名:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "バイナリーファイルのインポート "
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "イメージにエキスポート"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "新しいベクトルマップ名:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "属性テーブル作成"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "属性テーブルを別のフォーマットにエクスポート "
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "新しいベクトルマップ <%s> が作成されました"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "不透明度レベルの変更 "
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "式をファイルに保存"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "選択レイヤーの削除 "
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "イメージにエキスポート"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "RGBレイヤー追加 "
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "警告"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "プレビュー "
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr "マップキャンバスをセット"
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr " / マップのズーム"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "3Dラスターマップ追加 "
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS マップ ディスプレイ:"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "表示するものがありません (マップは空です). 処理はキャンセルされました."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr "保存するイメージのファイル名選択(拡張子を追加する必要はありません)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "検索のためのラスターまたはベクトルマップレイヤーが選択されていません"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "ラスターマップの選択:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "ラスターマップ名:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "ラスターマップ名:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "2Dビューモードへ戻る"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "2Dビューモードへ戻る"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "閉じる "
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "カテゴリー番号 (列 %s)がありません"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "一般設定"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "粗い:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "粗い:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "カラー:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "形状サイズ"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "線幅:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "サイズ:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "ラスター/ベクトルマップの検索"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "選択したラスター/ベクトルマップの検索"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "見つかったモジュール"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "EPSGコードの選択"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "回転:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "GRASS GIS マネージャーGCP(地上基準点)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "GCPリスト "
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "ソース表示"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "ターゲット表示"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "GCP表示ツールバー"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "GCP管理ツールバー"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "ページセットアップ "
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "印刷プレビュー "
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "画面を出力 "
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "解析領域でズーム (g.regionで設定)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "デフォルト領域でズーム"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "保存領域でズーム"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "ジオメトリを領域名を付けて保存"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "GCP No. へ進む"
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "有効範囲:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "RMSエラー"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "前進: %(forw)s, 後退: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "幾何補正のセットアップ"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "幾何補正のセットアップをキャンセルしました"
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "マップタイプとロケーション/マップセットの選択"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "幾何補正するマップタイプ"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "ラスター"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "ベクトル"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "元のロケーションの選択:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "元のマップセットの選択:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "マップセットを選択する前に有効なロケーションを選択する必要があります"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "有効なロケーションとマップセットを選択する必要があります"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "幾何補正を行う画像/マップ グループの選択"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "グループ選択:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "無い場合はグループを作成"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "グループにベクトルマップを追加..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "マップ出力の拡張子:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "有効な画像/マップ グループを選択する必要があります"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "マップ名の拡張子を入力する必要があります"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "測量基準点 (GCP) 作成の為に表示するマップを選択"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "表示するソースマップを選択:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "表示するターゲットマップを選択:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "表示するターゲットマップを選択:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "続行するには、ソースマップを選択する必要があります"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1267,28 +1268,28 @@ msgstr ""
 "選択されたグループにマップはありません <%s>.\n"
 "グループを編集するか別のグループを選択してください."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "GCP(地上基準点)管理"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "少なくとも %d GCP(地上基準点)が必要です 処理はキャンセルされました"
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "ソース"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "ターゲット"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "GCP座標設定"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1301,28 +1302,28 @@ msgstr ""
 "東: %(coor0)s \n"
 "北: %(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "ポイントファイル書き込みが失敗しました"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "グループのPOINTSファイル保存 <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "mapwinのソースが定義されていません"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "mapwinのターゲットが定義されていません"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "ポイントファイル読み込みが失敗しました"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1336,161 +1337,161 @@ msgstr ""
 "第2選択では6点以上\n"
 "第3選択では10点以上"
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "画像補正中, しばらくお待ちください..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "変換 <%s>...  "
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "画像補正中, しばらくお待ちください..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "ベクトルマップ<%s> の幾何補正に失敗しました"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "GCPマネージャー設定"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "GCPマネージャー終了"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "GCP(地上基準点)を保存しますか?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "ソースからターゲットへの表示を調整する"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "ターゲットからソースへの表示を調整する"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "使用"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "ソース E"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "ソース N"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "ターゲット E"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "ターゲット N"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "上位のエラー "
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "下位のエラー "
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "座標系が間違っています 処理がキャンセルされました"
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "ベクトルマップグループの作成"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "グループに追加するベクトルマップ:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "GCPの修正 "
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "GCP(地上基準点) No."
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "ソース E:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "ターゲット 東:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "ソース N:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "ターゲット 北:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "現在のセッションに変更を適用する"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "ユーザー設定ファイルに変更情報を保存(次のセッションのデフォルトになります)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "ダイアログを閉じる"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "シンボロジー"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "最大RMSエラーのみハイライト"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "ハイライト RMS エラー > M + SD * 要素:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1503,64 +1504,64 @@ msgstr ""
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "シンボルの設定 "
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "高RMSエラーの色:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "選択されたGCPの色:"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "選択解除されたGCPの色:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "未使用のGCPを表示"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "シンボルサイズ:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "補正"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "補正方法の選択"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "第1選択"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "第2選択"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "第3選択"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "補間方法の選択:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "対象ロケーション内の計算領域をクリップ"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "RMSしきい値係数は > 0 でなければならない"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1568,39 +1569,39 @@ msgstr ""
 "RMS しきい値係数は < 1\n"
 "あまりにも多くのポイントが強調表示される可能性があります"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "GCP管理情報をファイルに保存 '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "ベクトルデジタイザエラー"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "ベクトルデジタイザは利用できません"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "新しいベクトルマップ <%s> が作成されました"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1611,254 +1612,254 @@ msgstr ""
 "必要です. トポロジーを再構築し(時間がかかります)、編集のためベクトルマップ"
 "を開きますか?"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "トポロジーが有りません"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "カテゴリーの更新 "
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "更新するためのベクトルマップが選択されていません"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Z軸ラベル設定ダイアログ "
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "デジタイズの設定"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "現在のセッションに変更を適用する"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "ユーザー設定ファイルを変更し、ダイアログを閉じる"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "変更を行わずにダイアログを閉じる"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "一般"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "表示"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "線幅"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "スナップ"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "コンターのしきい値"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "仮面解像度"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "マップ単位"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "頂点と共にスナップ  "
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "スナップのしきい値は %(value).1f %(units)s  "
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "ベクトルフィーチャ選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "しきい値選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "領域指定範囲の中でフィーチャを選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr "デフォルトでは領域が重複している部分に存在するフィーチャが選択されます"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "重複のチェック"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "境界をデジタイズ "
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "交差部分でラインを分割"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "フィーチャをデジタイズ"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "変更を保存"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "保存終了"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "クエリツール"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "クエリツールの選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "矩形で選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "長さ"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "ライン選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "より短い"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "より長い"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "ダングル"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "ダングル選択"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "属性"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "フィーチャをデジタイズ"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "テーブルに新しいレコードを追加"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "レイヤー"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "カテゴリー"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "モード"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "次のを使用"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "カテゴリー番号"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "カテゴリーモード"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "手動入力"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "カテゴリーなし"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "既存のフィーチャを削除 "
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "テーブルからレコードを削除"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "ジオメトリ属性"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "エリア"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "周辺"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
@@ -1866,114 +1867,114 @@ msgstr ""
 "備考: これらの設定は、ベクトルデジタイザ優先でなくワークスペースに保存されて"
 "います"
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "ラインをデジタイズ "
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "境界をデジタイズ "
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "ハイライト"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "ハイライト(重複)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "ライン"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "境界(エリアなし)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "境界(1エリア)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "境界(2エリア)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "セントロイド(エリア)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "セントロイド(エリア外)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "セントロイド(重複エリア) "
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "ノード(1ライン)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "ノード(2ライン)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "頂点"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "エリア (閉空間 +セントロイド)  "
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "方向"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "スナップ出来ません"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "スナップのしきい値はs %(value).1f %(units)s (comp. resolutionを元にしていま"
 "す)  "
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "ベクトルデジタイザー設定をファイルに保存 <%s>.  "
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "デジタイザーエラー"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "ベクトルマップがオープンできません <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "修正するベクトルマップがありません."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "処理はキャンセルされました "
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1981,22 +1982,22 @@ msgid ""
 "Reason: %s"
 msgstr "新しいフィーチャーの書き込みに失敗しました 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "フィーチャーID %d 読み込みエラー 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "データベースリンク %d が使用できません 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "データベースドライバ <%s> が開始できません 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
@@ -2004,58 +2005,58 @@ msgstr ""
 "データベース <%(db)s> を <%(driver)s> のドライバでオープンできませんでした。"
 "キャンセルされました。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "SQLクエリ '%s' が実行できません 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "フィーチャーID %d は利用不可です 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr ""
 "サポートされていないフィーチャー形式 %d です 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "不明なフィーチャー形式 '%s'"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "線分として構成できない点列"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "カテゴリー一覧 右クリックで削除"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "新しいカテゴリーの追加"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "変更を保存する"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "変更を行わずにダイアログを閉じる"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "変更してダイアログを閉じる "
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "フィーチャID:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2066,258 +2067,258 @@ msgstr ""
 "レイヤー、カテゴリー番号は整数で無ければなりません.\n"
 "レイヤー番号は0以上の整数で無ければなりません"
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "削除選択"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "全てを削除"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "リロード"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "ベクタマップをアップデート出来ません"
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "Z軸ラベル設定のため %d 行選択されました"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "値の設定"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "初期値"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "ステップ"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "重複一覧"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "フィーチャID"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "レイヤー(カテゴリー)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "ポイントをデジタイズ "
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "左: 新規ポイント "
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "ラインをデジタイズ "
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "Left: 新規ポイント; Ctrl+Left: 最後の点取り消し; Right: ラインを閉じる"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "境界をデジタイズ "
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "セントロイドをデジタイズ "
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 "新しいエリアをデジタイズ(カテゴリなしの境界線とカテゴリを含む1つのセントロイ"
 "ドの作成)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "線分や境界線からポリラインを作成"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Left:選択; Ctrl+Left: 選択解除; Right: 確認"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "選択したライン/境界(ノーののみ)をスナップ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "選択レコードの削除"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "属性の表示/更新 "
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "左:選択 "
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "カテゴリーの表示/更新 "
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "選択したライン/境界を反転"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "選択したライン/境界(ノーののみ)をスナップ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "頂点の移動 "
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "選択したマップセット名を変更する "
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "デジタイザー終了"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "保存してデジタイズを終了"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "ベクトルデジタイザエラー"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "ベクトルデジタイザエラー"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "追加ツール(コピー、フリップ、コネクト、etc.) "
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "取り消し "
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "やり直し "
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "やり直し "
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "選択したライン/境界を交点で分割"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "選択したライン/境界を接続"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "カテゴリーコピー "
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "(背景の)ベクトルマップからフィーチャをコピー"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "属性表示"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "フィーチャタイプ変換"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "選択したライン/境界を反転"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "選択したライン/境界をマージ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "選択したライン/境界(ノーののみ)をスナップ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "ライン/境界の分割 "
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "フィーチャの検索"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "3DラインのZ軸ラベル設定"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "ベクトルマップの選択"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "ベクトルマップは3Dではありません 処理はキャンセルされました"
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "ベクトルマップの選択"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, fuzzy, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2329,82 +2330,83 @@ msgstr ""
 "必要です. トポロジーを再構築し(時間がかかります)、編集のためベクトルマップ"
 "を開きますか?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "ベクトルデジタイザエラー"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "しばらくお待ちください ベクトルマップ <%s> を開いています..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "座標系が間違っています 処理がキャンセルされました"
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "ベクトルデジタイザエラー"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "ベクトルマップ <%s> を変更しますか?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "変更を保存しますか?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "しばらくお待ちください ベクトルマップ <%s> のトポロジ再構成を行いファイルを閉"
 "じています... "
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "ベクトルマップ <%s> の修正は成城に終了しました"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "新しいベクトルマップ"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "計測距離 "
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr "左ボタンでドラッグすると距離計測 %s左ボタンダブルクリックでクリア "
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "計測距離 "
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "計測距離:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, fuzzy, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
@@ -2413,172 +2415,191 @@ msgstr ""
 "測地距離はこのツールではまだサポートされていません.\n"
 "理由: %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "セグメント"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "総距離"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "動作"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "計測距離:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "凡例"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "縮尺と方位を追加 "
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "GCP表示ツールバー"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "%s' クリップボードにコピーしました"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "設定情報 "
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "ベクターマップレイヤーの追加 "
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "ラスターシリーズ "
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "しばらくお待ちください, イメージエクスポート中..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "保存領域をズーム"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "領域 <%s> が見つかりません.処理はキャンセルされました."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "表示範囲を領域ファイルに保存"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "警告"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "編集範囲表示"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "テキスト "
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "回転:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "フォント:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "フォント設定"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2586,169 +2607,534 @@ msgstr ""
 "テキストの位置をマウスでドラッグ\n"
 "ダブルクリックでオプション変更 "
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "GRASSのヘルプ "
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "モデル"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "アイテム"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "ベクトルマップ <%s> は既に存在します。上書きしますか?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "変数"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "上書きしますか?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Python editor"
-msgstr "Pythonシェル"
-
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "コマンド出力 "
+msgid "GRASS locations in {}"
+msgstr "GRASSのロケーションとマップセットを選択"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "名前変更 "
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "マップセット名変更"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "検証モデル..."
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "モデル再描画..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "モデルの変更を保存しますか? "
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr "現在のモデルの設定をファイルに保存しますか?  "
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "更新するためのベクトルマップが選択されていません"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "描画モデラーを終了"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "テーブルコピー"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "中間データ削除"
+msgid "Failed to copy map: new map has the same name"
+msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "データを完全に消去しますか?%s"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "ベクトルマップ <%s> は既に存在します。上書きしますか?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "中間データを削除しますか?"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "モデル実行中..."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "現在のマップセットから %d 個のデータを削除"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "対象ロケーション内の計算領域をクリップ"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"現在のワークスペースは空ではありません.ワークスペースに現在の設定を適用しま"
-"すか?  "
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "新しいモデルを作成しますか?"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "マップセットを削除"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr "モデルファイル選択"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "削除 "
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "GRASS モデル ファイル (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "重複を削除"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "表示"
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
-"%(items)d 個のアイテムが (%(actions)d actions) モデル内にロードされました"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "モデルファイル <%s> は既に存在します.上書きしてよろしいですか?  "
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "モデル保存"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "一の補数"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "ファイル <%s> が保存されました"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "現在のマップセットから %d 個のデータを削除"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr "現在のモデルを保存するファイルを選択"
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "コピー "
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "モデルはからです. 検証できません."
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "ラスター(&R)"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "検証モデル..."
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "マップ表示 "
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "マップセットの作成(&C)"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3Dラスターマップカリキュレータ"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3Dラスターマップカリキュレータ"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
-"モデルが有効ではありません\n"
-"\n"
-"%s "
-
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "モデルは有効です"
+"現在のロケーションは <%(loc)s>.\n"
+"現在のマップセットは <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Model exported to <%s>"
-msgstr "モデルのエクスポート <%s>"
+msgid "Current mapset is <%s>."
+msgstr "現在のマップセットは <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "コマンド:"
+msgid "Data catalog"
+msgstr "断面図"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "コマンドレイヤー追加 "
+msgid "Reload GRASS locations"
+msgstr "GRASSロケーショ名:"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "クリックでレイヤー設定の編集 "
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "検索モジュール"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "先にマップフレームを作成してください"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "モデルの変更を保存しますか? "
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "変更を保存"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "ラスターマップの断面を作成できません "
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "ベクトルマップを作れません <%s>"
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "レンダリング "
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "ラスターマップ用カラーテーブルを作成"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "新しいベクトルマップ "
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "ラスターマップ名:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "ベクトルマップの選択"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "ラスターマップ名:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "ラスターマップで形状係数を解析"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "ベクトルマップ <%s> は既に存在します。上書きしますか?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "フィーチャをデジタイズ"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "ラインをデジタイズ "
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "ポイントをデジタイズ "
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "ラスターマップの重ね合せ "
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "デジタイザー終了"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "ラスターマップの選択:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "セル値"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "幅:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "ラスターマップ"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "GRASSのヘルプ "
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "モデル"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "アイテム"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "変数"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+#, fuzzy
+msgid "Python editor"
+msgstr "Pythonシェル"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "コマンド出力 "
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "モデル再描画..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "モデルの変更を保存しますか? "
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr "現在のモデルの設定をファイルに保存しますか?  "
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "描画モデラーを終了"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "中間データ削除"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "データを完全に消去しますか?%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "中間データを削除しますか?"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "現在のマップセットから %d 個のデータを削除"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"現在のワークスペースは空ではありません.ワークスペースに現在の設定を適用しま"
+"すか?  "
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "新しいモデルを作成しますか?"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr "モデルファイル選択"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "GRASS モデル ファイル (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+"%(items)d 個のアイテムが (%(actions)d actions) モデル内にロードされました"
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "モデルファイル <%s> は既に存在します.上書きしてよろしいですか?  "
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "モデル保存"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "ファイル <%s> が保存されました"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr "現在のモデルを保存するファイルを選択"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "モデルはからです. 検証できません."
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "検証モデル..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"モデルが有効ではありません\n"
+"\n"
+"%s "
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "モデルは有効です"
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr "モデルのエクスポート <%s>"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "コマンド:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "コマンドレイヤー追加 "
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
 msgstr "wxGUI グラフィカルモデラー"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2759,393 +3145,391 @@ msgstr ""
 "モデルファイル <%s> が読み込みできません.\n"
 "間違ったファイル,XMLドキュメントを解析できません."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "しばらくお待ちください,モデルロード中..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "現在の設定をモデルファイルへの出力に失敗しました"
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "書き込み用ファイル <%s> がオープン出来ません"
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "削除 "
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "不可"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "可能"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "ラベル追加 "
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "フォント設定"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "CP(基準点)追加"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "CP(基準点)削除"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "中間"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "プロパティ "
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "ラベル "
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "カテゴリー一覧 右クリックで削除"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "名前"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "データタイプ "
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "デフォルト値"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "説明 "
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "新しい変数追加"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "整数"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "実数"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "文字列"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "領域"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "マップセット"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "プロファイル"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "モデルに新しい変数を追加します"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "項目リスト - 右クリックで削除"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "ラベル "
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "ループ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "コマンド"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "Python スクリプト (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "実行(&R)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "スクリプト実行"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "現在のワークスペースを保存 "
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "マップセット <%s> への変更はできません."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "保存するファイル選択"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Python スクリプト (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "ファイル <%s> は既に存在します.上書きしてよろしいですか?  "
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "ファイル保存"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "モデラー設定"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "アイテムのプロパティ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "不可:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "有効:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "無効:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "実行中:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "形状サイズ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "幅:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "高さ:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "データ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "タイプ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "ラスター:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "3Dラスター:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "ベクトル:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "テーブル"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "ループ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "コマンド"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "モデルプロパティ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "メタデータ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "コマンド"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "既存のファイルに上書きする"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "プロパティ適用"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "名前:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "概要:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "著者:"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "モデル"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "スクリプトはwxGUIモデラーで作成されます"
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "新しい変数追加"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "モデル実行中..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "モデルは空です. 実行できません."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3156,89 +3540,89 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "モデルを実行しますか"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 #, fuzzy
 msgid "Variables below not defined:"
 msgstr "mapwinのターゲットが定義されていません"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "ラスターマップ"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "3Dラスターマップ"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "ベクトルマップ"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "不明"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<定義されていません>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "条件: "
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "条件:定義されていない"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "モデルパラメータ "
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "中間データ削除"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "データプロパティ"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "エレメント名:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "凡例表示"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 #, fuzzy
 msgid "Add GRASS command to the model"
 msgstr "モデルにアクション(GRASSモジュール)を追加"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3248,7 +3632,7 @@ msgstr ""
 "\n"
 "モデルに新しい動作を追加できません."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3259,32 +3643,32 @@ msgstr ""
 "\n"
 "モデルに新しい動作は追加できません."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "レイヤープロパティ"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "から"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "To"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "データベース %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "コマンド:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "オプション"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3292,7 +3676,7 @@ msgstr ""
 "リレーションはデータアイテムから始められません.\n"
 "リレーションを追加できません."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3300,7 +3684,7 @@ msgstr ""
 "リレーションはGRASSコマンドを示しません.\n"
 "リレーションを追加できません."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3308,103 +3692,103 @@ msgstr ""
 "関連性のあるオプションは見つかりません.\n"
 "リレーションを追加できません."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "条件"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "ループプロパティ"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "ループの中の項目リスト"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "if - else文のプロパティ"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "if'ブロック内の項目リスト"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "else'ブロック内の項目リスト"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "変数 <%s> はすでにモデルに存在します. 変数の追加に失敗しました."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "モデルから全ての変数を削除しますか?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "変数を削除"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "いいえ"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "はい"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "ファイル <%s> がオープン出来ません"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "命令ファイルは次の領域で読み込まれます: %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "領域をセットできません%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3413,7 +3797,7 @@ msgstr ""
 "スケールは変更しました, old value: %(old)s\n"
 "new value: %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
@@ -3422,7 +3806,7 @@ msgstr ""
 "命令の読み込みに失敗しました %s.\n"
 "1:25000 表記を使用."
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3431,7 +3815,7 @@ msgstr ""
 "マップフレームの位置は変更しました, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3440,7 +3824,7 @@ msgstr ""
 "マップフレームのサイズは変更しました, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3449,13 +3833,13 @@ msgstr ""
 "%(file)s の指示が読み込めませんでした\n"
 "不明なフォーマット %(for)s "
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
@@ -3464,8 +3848,8 @@ msgstr ""
 "位置%sの文字はモジュールps.mapに必要なISO-8859-1(Latin 1)エンコーディングに"
 "よってサポートされていません."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
@@ -3473,17 +3857,17 @@ msgstr ""
 "モジュールps.mapに必要なISO-8859-1(Latin 1)エンコーディングによってサポート"
 "されていない文字もあります."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "GRASSのヘルプ "
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
@@ -3491,38 +3875,38 @@ msgstr ""
 "Python画像ライブラリは利用できません.\n"
 "'プレビュー' 機能は動作しません."
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr "ps2pdfのプログラムが利用できません。PDF作成"
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "一般設定"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "ポストスクリプトを作成しています..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "印刷プレビュー "
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "Ps.map はリターンコード %s で終了しました"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, fuzzy, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "ps2pdf はリターンコード %s で終了しました"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "プレビューが作成されました"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3533,155 +3917,155 @@ msgstr ""
 "\n"
 " %s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "プレビューが作成されました"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "印刷プレビュー "
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "3Dビューモードは使用できません"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "プレビューが作成されました"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "名前を付けて保存する..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "先にマップフレームを作成してください"
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "投影法 %s のパラメータを入力 "
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "wxGUIカートグラフィックコンポーザー"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "クリックそれからドラッグをしてオブジェクトのサイズを変更する"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "ラベル追加 "
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "インチ"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "リセット"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "ファイル "
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "海里"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "ピクセル"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "Dツリー"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "ラスターマップをアンロード出来ません"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "単位:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3689,30 +4073,30 @@ msgstr ""
 "左上角の位置\n"
 "用紙の左上端から"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "位置:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "用紙と相対的"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "座標変換 "
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3720,184 +4104,182 @@ msgstr ""
 "左上からの位置\n"
 "用紙の端"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "フォントサイズ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "ディレクトリ選択:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "変更を行わずにダイアログを閉じる"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "単位"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "フォーマット"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "回転:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "幅"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "高さ"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "左"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "右"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "上"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "下"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr "文字は許可されていません!"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "間違った領域"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "アイコンサイズ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "余白"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "ポイント"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "景観分析 "
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "慣例"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "一般設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "ラスター設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "縮尺"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "投影法の管理 "
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "選択したマップのズーム"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "保存領域でズーム"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "現在の算定領域にフレームを合わせます"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "固定スケールとマップ中心"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "投影法の管理 "
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "マップセット:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "領域"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "縮尺"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "レンダリング "
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:  "
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N: "
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "スタイル:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "マップ最大解像度 (dpi):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "第1選択"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "マップフレームの周囲に境界線を描きます"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "境界色:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "線幅(ピクセル):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3905,416 +4287,418 @@ msgstr ""
 "領域はこのマップに合うように設定されています,\n"
 "ラスターまたはベクトルマップは後で追加しなければなりません"
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "断面図"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "無効なスケールまたはマップ中心!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "ラスターマップ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "ラスターマップ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "ラスターマップ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "ラスター:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "レイヤーグループ追加 "
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "ポイント"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "ライン"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "エリア"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "データタイプ "
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "加算"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "ベクトルマップの消去"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr "一番上のベクトルマップはその他と重なります"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "上"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "下"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "削除 "
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "プロパティ "
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "ラスター設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "ベクトル設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "%s プロパティ "
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "断面図"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "フィーチャタイプ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "セントロイド"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "境界"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "断面図"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "DBファイルに接続設定が定義されていません"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "レイヤー削除"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "カテゴリのリスト(例、1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "マスク "
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "現在のマップセット以外を除去"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "カラー"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "航程線 "
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "輪郭を描く"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "幅:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "ファイル "
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "ワイヤー色:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "ディレクトリ選択:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "マップテーブル列からのカラー:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "テーブル列からの塗りつぶしカラーに対する効果はありません"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "カラールール"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "ラインスタイル"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "シンボル:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "WKTファイル:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "参照 "
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "ファイル名を入力またはブラウザをクリックしてファイルを選択"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "DXFファイル選択:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "サイズ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "サイズ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "全列を消去"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "再スケール"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "回転:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "シンボルを回転:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "度で反時計回りに"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "全列を消去"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "線幅(ピクセル):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "対話形式でカテゴリー値を編集"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "ラインスタイル"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "粗密型:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "DXFファイル選択:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "アスター"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "パターン使用:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "線幅(ピクセル):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "パターンスケールファクター"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "ラスターシリーズ "
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "凡例表示"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "列名"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "ベクトル → ラスター "
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "ラスターマップの選択:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s: タイプ %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "凡例表示"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "離散凡例(カテゴリマップ)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "連続カラーグラデーション凡例(浮動小数点マップ)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "詳細設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "\"no data\" ボックスを描く"
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "カラーテーブル全体にチェックマークを描く"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "範囲"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "ベクトルライン"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "ベクトルライン表示"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "ベクトルマップの重ね合せ "
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "ベクトルマップと凡例での順序を選択"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "ベクトルマップ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "ラベル追加 "
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "凡例の周りに罫線を引く"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "サイズと位置"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "位置 "
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "編集フィールドを空にしてデフォルト値を使用"
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4322,15 +4706,15 @@ msgstr ""
 "カラーシンボル(ライン用)の幅\n"
 "凡例テキストの前"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "列"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "列"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
@@ -4338,402 +4722,391 @@ msgstr ""
 "左端の間での列分離距離\n"
 "複数列凡例の2列の"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "フォント設定 "
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "凡例ラベルを編集:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "ラスター"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "一般設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "一般設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "使用| X 座標 "
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "背景色:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"現在の投影の単位はサポートされていません,\n"
-" メートルが使用されます!"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "サポートしていないレイヤーのタイプ '%s'"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "長さ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "縮尺バーの長さはマップの単位で指定されています"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "用紙上の縮尺バーの高さは実際の高ささす"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "デフォルト"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "スタイル"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "タイプ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "すべてにラベルを付ける"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "凡例"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "透明なテキスト背景"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "スケールバーの長さは定義されていません"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "テキスト "
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "テキスト入力:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "テキスト設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "テキスト背景"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "ハイライト"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "第1選択"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "オフセット"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "水平な(pts)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "垂直な(pts)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr "左: 新規ポイント "
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "テキスト設定"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "テキスト回転(反時計回り)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "テキストは入力されていません!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "画像 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "スケールと方位"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "回転:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "発光度"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "スケールと方位"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "設定情報 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "シンボル"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "矩形で選択"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "ライン色"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "透過 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "ワイヤー色:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "サイズと位置"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "サイズ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "シンボルサイズ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "設定変更 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "設定変更 "
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "線幅(ピクセル):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "ベクトルラベル"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "マッピング命令を含むテキストファイルを作成"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "マッピング命令を含むテキストファイルの読み込み"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "ポストスクリプト出力ユーティリティ "
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "ポイントの作成"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "用紙のサイズ、余白、方向を指定"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "全範囲"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "デフォルト領域でズーム"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "マップフレームを配置する場所へクリックしてドラッグする"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "選択ロケーションを削除する"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "グリッド表示"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "カートグラフィックコンポーザーを終了する"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "マップエレメント追加 "
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "凡例"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "ダングル選択"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "ベクターマップレイヤーの追加 "
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "ラベル追加 "
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS GIS 属性テーブルマネージャー "
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4742,143 +5115,137 @@ msgstr ""
 "ベクトルマップ <%s> はDB接続の定義がされていません 接続の設定は レイヤー管"
 "理' タブで行ってください"
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "しばらくお待ちください 属性データをロード中... "
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "データブラウザ"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "テーブル管理"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "レイヤー管理"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "属性テーブルマネージャーを閉じる"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "マップセットを削除"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "属性デ-タを再ロード (選択されたレイヤーのみ)  "
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "ロードされたレコード数: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "データベース接続"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "検索"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "SQL文をデフォルトに設定"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "属性テーブルマネージャーを閉じる"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "ダイアログを閉じる"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "列"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "選択の反転"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "値"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "すべての値を取得"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "サンプルを取得"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "進む"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "実行してダイアログを閉じる"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "GRASS SQL ビルダー (%(type)s): ベクトルマップ <%(map)s>  "
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "例: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "確認"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "SQL文の確認"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "SQL文が有効ではありません"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "SQL文が有効ではありません"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4889,42 +5256,42 @@ msgstr ""
 "\n"
 "%s "
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "SQL文は有効です"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "動作"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "SQL文が有効ではありません"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "SQL文は有効です"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "データ ロード中... "
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
@@ -4933,36 +5300,36 @@ msgstr ""
 "属性テ-ブル <%s>が見つかりません 作成するためには 'レイヤー管理' タブで行って"
 "ください"
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "列 <%(column)s>がテーブル <%(table)s>には見つかりません"
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "256列までしか表示出来ません"
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "列 <%(column)s>がテーブル <%(table)s>には見つかりません"
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "最大 100000 レコード"
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "不明な値"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 "値をデコードすることができません。 GUIの設定で、エンコーディング設定 ('属性')"
 "してください"
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4975,197 +5342,197 @@ msgstr ""
 "\n"
 "詳細: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "昇順で並び替え"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "降順で並び替え"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "計算(数値のカラムのみ)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "マップカリキュレータ"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "3Dグリッド統計"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "列追加"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "エリア サイズ"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "ライン長"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr "領域のコンパクト化"
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr "ポリゴンを定義する境界のフラクタル次元"
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "アリアの境界長"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "各カテゴリのフューチャーの数"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr "3Dラインのスロープ勾配線"
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr "ライン湾曲"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "ライン方位"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "列追加"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "列をテーブルに追加出来ません 列名が定義されていません"
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "既に列 <%(column)s>はテーブル <%(table)s>に存在します"
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "属性デ-タ - 右クリックで レコードの編集/マージ"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "テーブル"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "SQL検索"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "シンプル"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "SELECT文を実行しデータレコードを再ロード"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "SQLビルダー"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "SQLビルダー"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "選択レコードの修正"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "新規レコードの挿入"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "選択レコードの削除"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "全レコード削除"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "すべて選択"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "全選択解除"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "選択したフィーチャの強調表示"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "選択したフィーチャの強調表示しズーム"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "選択したフィーチャを抽出"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "選択されたフィーチャを削除 "
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "既存レコードの更新"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "値 '%(value)s' は %(type)s として入力しなければなりません"
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "既存レコードの更新ができません"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "カテゴリー番号 %d は既にテーブルに登録されています"
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "カテゴリー番号 (列 %s)がありません"
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "新しいレコードを挿入出来ません"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5174,11 +5541,11 @@ msgstr ""
 "選択したレコード (%d) は、テーブルから完全に消去されます  削除してよろしいで"
 "すか?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "レコード削除"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5187,15 +5554,15 @@ msgstr ""
 "全てのレコード (%d) は、テーブルから完全に消去されます  削除してよろしいです"
 "か?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "抽出するものがありません"
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "削除するものがありません"
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5206,7 +5573,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5219,30 +5586,30 @@ msgstr ""
 "\n"
 "%s  "
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "テーブル <%s> - 右クリックで列を削除"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "列"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "長さ"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "列名称変更"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "列名を変更ができません 列名が定義されていません"
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5251,7 +5618,7 @@ msgstr ""
 "列名を <%(column)s> から <%(columnTo)s> へ変更出来ません テーブル <"
 "%(table)s>  に既に定義されています"
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5260,15 +5627,15 @@ msgstr ""
 "列名を変更することができません  列 <%(column)s>はテーブル <%(table)s> には存"
 "在しません"
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "選択した列を消去"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "全列を消去"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5277,11 +5644,11 @@ msgstr ""
 "選択したレコード (%s) は、テーブルから完全に消去されます  削除してよろしいで"
 "すか?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "カラム消去"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5292,101 +5659,101 @@ msgstr ""
 "%s\n"
 "は完全にテーブルから消去されます カラムを消去してよろしいですか?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "レイヤ一覧  "
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "属性テーブルにリンクされているものを消去 (%s)  "
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "列名"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "データ長"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "ドライバ"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "データベース "
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "キー"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "レイヤー説明"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "キー列"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "テーブルの各々のカテゴリーにレコードを追加"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "v.category でカテゴリーを追加する必要があります"
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "テーブル説明"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "テーブル名"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "テーブル作成(&C)"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "レイヤー追加(&A)"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "デフォルト設定(&S)"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "レイヤー消去"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "消去するレイヤー"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "レイヤー削除(&R)"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "レイヤー変更"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "レイヤー変更(&M)"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5394,18 +5761,18 @@ msgstr ""
 "テーブル一覧を取得出来ません\n"
 "DBパラメータをセットするため db.connect を使用してください"
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "新しいテーブルを作成することができません  テーブル名またはキー列名がありませ"
 "ん"
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "新しいテーブルは作成出来ません テーブル <%s> は既に存在します"
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5414,42 +5781,42 @@ msgstr ""
 "ベクトルマップ<%(vector)s>に新しいレイヤーを追加することはできません .レイ"
 "ヤー %(layer)dは既に存在します"
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "3Dグリッド統計"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "クリップボードに現在のコマンド設定をコピー (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "コマンドを解析することができません %s"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "新しいロケーションは作成できません"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "3Dグリッド統計"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5457,11 +5824,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "GRASS GIS 属性テーブルマネージャー "
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5470,200 +5837,201 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "テーブル作成"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "実行してダイアログを閉じる"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "属性が見つかりません"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "属性の更新"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "属性定義"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "属性表示"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "リロード(&R)"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "実行(&S)"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "値 '%(value)s' は %(type)s として入力しなければなりません"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "不明"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "アイコンテーマがロード出来ません... "
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2Dビュー "
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3D表示"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "ワークスペースファイルを閉じる"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "ファイル <%s> が見つかりません"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "抽出するものがありません"
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "画像補正中, しばらくお待ちください..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "画像補正中, しばらくお待ちください..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "データ ロード中... "
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5672,635 +6040,635 @@ msgstr ""
 "ワークスペースファイル <%s> 読み込み失敗しました.\n"
 "不正なファイルです, XMドキュメントを解析できません."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "3D表示設定がファイルに保存されました <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "レイヤーツリーにレイヤーを追加 "
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "ベクトル."
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "マップレイヤーの削除 "
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "マップレイヤーの削除 "
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "シンプル"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "解像度:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "カテゴリーモード"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 #, fuzzy
 msgid "Time unit:"
 msgstr "マップ単位"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "オプションのセット "
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "表示"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "ファイルはすでに存在します"
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "アドバンス"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "テーブル一覧"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "コピーライト "
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "カラーで"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "カラーで"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "WKTファイルの選択"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "サイズと位置"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "見つかったモジュール"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "オプションのセット "
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "3D表示プロパティ"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "ワークスペース "
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "パラメータがありません: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "領域保存:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "ロードする領域: "
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "値"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "ベクトル."
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "拡張子リスト"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "GCPの修正 "
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "説明 "
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "エクスポート "
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "タイムスタンプ "
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "レイヤーグループ追加 "
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "テキストレイヤー追加 "
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "フォント設定 "
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "サンプル横断面"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "イメージサイズ"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "DXFファイル選択:"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "イメージサイズの設定"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "西"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "エクスポート "
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "フォーマット:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "ディレクトリ:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "DXFファイル選択:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "保存するファイル選択"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "DXFファイル選択:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "WKTファイル:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "オプションのセット "
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "ファイル <%s> が見つかりません"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "ベクトルマップのエクスポート "
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "%s ファイルがありません"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "タイムスタンプ "
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "データベースから作成"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "ラスターマップの検索 "
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "ベクトルマップの消去"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "ラスターマップの検索 "
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "ベクトルデータのインポート "
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "入力データ"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "ラスターマップの選択:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "先にマップフレームを作成してください"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "量子化 "
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "背景色:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "背景色:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "背景色:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "タイムスタンプ "
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "座標フォーマット"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "無効:"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "マップセットの変更"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 #, fuzzy
 msgid "Stop"
 msgstr "ストップ(&S)"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "シェーディングマップレイヤー追加 "
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "座標系が間違っています 処理がキャンセルされました"
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "ネットワーク解析 "
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6308,48 +6676,48 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "現在のマップセットから %d 個のデータを削除"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "上書きしますか?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "ベクトルマップ<%s> の幾何補正に失敗しました"
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6357,469 +6725,470 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "設定できません"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "上書きしますか?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "マップレイヤー"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "レイヤー管理"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "カテゴリーの管理と出力"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "選択 %s "
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "ベクトルマップ属性テーブルを消去"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "データタイプ "
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "トポロジーの再ビルド"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "左: 新規ポイント "
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "数値列:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "最短経路"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "巡回セールスマン問題 "
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, fuzzy, python-format
 msgid "Maximum flow %s"
 msgstr "最大流量"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "ソースタイプ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "ポイントを表示"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "定義されたポイントとネットワークからシュタイナーツリーを作成"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "マップレイヤーの削除 "
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "GRASSプロファイル解析ツール"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "GCP表示ツールバー"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "GCP表示ツールバー"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "ネットワーク解析 "
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "軸設定"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "ポイント"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "流線 "
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "出力 "
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "パラメータ"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "レイヤーツリーに作成したマップを追加"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "入力データ"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "テーブル一覧"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "データ ロード中... "
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "データ ロード中... "
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "分析 "
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "設定 "
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "モデル実行中..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "ラスター設定"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "ラインスタイル"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "カラーテーブル "
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "座標変換 "
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "ライン色"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "選択解除されたGCPの色:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "選択されたGCPの色:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "フォントサイズ:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "線幅:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "コンターのしきい値"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "新しいベクトルマップ <%s> が作成されました"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "マップディスプレイ"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "CP(基準点)追加"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "選択ロケーションを削除する"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "地形解析 "
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "ラインを表示"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "ベクトル設定"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "陰影図 "
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "巡回セールスマン問題 "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "レンダリング "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "オートレンダリング 許可/禁止 "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "編集範囲表示"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "計算範囲表示"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6828,16 +7197,16 @@ msgstr ""
 "(g.regionで設定された)解析領域境界の表示/非表示 解析領域は青で表示、表示領域"
 "は赤で表示 "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "表示モード"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -6846,17 +7215,17 @@ msgstr ""
 "計算を行うための表示解像度を設定 デフォルト値は 「ユーザーGUI設定」 ダイアロ"
 "グでセットできます "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "領域表示"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "計算を行うための表示解像度を設定 "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6864,88 +7233,88 @@ msgstr ""
 "計算を行うための表示解像度を設定 デフォルト値は 「ユーザーGUI設定」 ダイアロ"
 "グでセットできます "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "縮尺"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "進む"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "投影法が定義されていません(設定をチェック)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "投影法エラー(設定をチェック)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "投影法"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "定義された投影法を使用"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "マスク "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "ジオメトリ表示"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "座標"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "範囲"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "解析領域でズーム (g.regionで設定)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - マップ ディスプレイ "
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "エラー: GRASSバージョンを決定できません. 詳細Details: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS マップ表示: %(id)d  - ロケーション: %(loc)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6956,11 +7325,11 @@ msgstr ""
 "\n"
 "詳細: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "ベクトルデジタイザーツールバー "
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6975,231 +7344,253 @@ msgstr ""
 "\n"
 "詳細: %s "
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "3D ビューモード スタート..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "しばらくお待ちください ロード中... "
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "しばらくお待ちください ロード中... "
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "2Dビューモードへ戻る"
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "デジタイズ"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "更新するためのベクトルマップ <%s> が選択されていません"
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "テキストレイヤー追加 "
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "解析領域でズーム (g.regionで設定)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "ベクトルデジタイザーツールバー "
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 "GRASS モジュール '%s'が見つかりません. マップディスプレイモードをスタートでき"
 "ません."
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "縮尺"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "マップディスプレイ"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "サポートしていないレイヤーのタイプ '%s'"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "新規マップ表示開始 "
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr " EPGSコードが読めません: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "新規マップ表示開始 "
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "ベクトルフィーチャ選択"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "ラスターマップとベクトルマップの幾何補正 "
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "スケールと方位 表示/非表示"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "凡例 表示/非表示"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "スケールと方位 表示/非表示"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "マップの分析 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "計測, プロファイル, ヒストグラム, ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "距離の測定 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "距離の測定 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "横断表層マップ"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "ネットワーク解析 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "マウスのドラッグでパン "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "マウスのドラッグで拡大表示 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "マウスのドラッグで縮小表示 "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "3Dビューモードは使用できません"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "理由: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "ベクトルデジタイザは利用できません"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -7209,146 +7600,151 @@ msgstr ""
 "う). GRASSのアップデートされたバージョンに注意してください. それまではベクト"
 "ル作成メニューから\"v.digit\"を使用できます"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "デジタイザー終了"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "ロケーション名の変更"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "ロケーション名の変更"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "RGB 作成 "
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "新しいロケーションを作成しますか?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "名前変更 "
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "ロケーション名の変更"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "GCPの修正 "
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "ロケーション名の変更"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "GRASS ロケーションを作成しますか <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "新しいロケーションを作成しますか?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "ロケーション名の変更"
@@ -7358,332 +7754,332 @@ msgstr "ロケーション名の変更"
 msgid "Create new configuration file for r.li modules"
 msgstr "カラールールを使用して新しいカラーテーブルを作成"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "GRASS ロケーションを作成しますか <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "新しいロケーションを作成しますか?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 "ロケーションウイザードはキャンセルされました。ロケーションは作成されません"
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "マップタイプとロケーション/マップセットの選択"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "新しいラスターマップ名:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "記録するラスターマップ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "再分類するベクトルマップ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "再分類するベクトルマップ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "マップレイヤーの削除 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "ロードする設定:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "地形パラメータ "
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "領域"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "マップ単位"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "ウィンドウを移動 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "ラスターマップとベクトルマップの幾何補正 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "DXFファイル選択:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "GRASS ロケーションを作成しますか <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "ベクトルマップ <%s> を変更しますか?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "カラーの選択 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "ベクトルフィーチャ選択"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "GCP表示ツールバー"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "ウィンドウを移動 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "選択した地図はベクトルではありません."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "ベクトルマップの選択"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "幅:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "ラスターマップ名:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "主題グラフ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "マップ単位"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "ウィンドウを移動 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "カラーの選択 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7691,188 +8087,202 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "カラーの選択 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "要約"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "ラスターマップ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "ベクトルライン"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "領域"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "マップレイヤータイプ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "領域境界 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "凡例表示"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "マップセット名:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "幅:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "フォントサイズ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "フィーチャの距離 "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "数値列:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "wxGUI対話式Pythonシェル%sへようこそ"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "%sを入力してGRASSスクリプト関連のさらに詳しい情報を得る"
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "%sを入力してラスターまたはベクトルをレイヤーツリーに追加する"
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "シェルから全てのテキストを削除する"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "シンプル"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "新しいベクトルマップ <%s> が作成されました"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS レイヤーマネージャー "
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "ワークスペース ツールバー"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "データツールバー "
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "ベクトルツールバー "
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "3Dビューツールバー"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "マップディスプレイ"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "マップレイヤー"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "レイヤー"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "コマンドコンソール"
 
-#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
 #, fuzzy
-msgid "Search modules"
-msgstr "検索モジュール"
+msgid "Modules"
+msgstr "コード "
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Pythonシェル"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7880,38 +8290,29 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "新しいロケーションを作成しますか?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"現在のロケーションは <%(loc)s>.\n"
-"現在のマップセットは <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "実行するモデルの選択"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "ワークスペースの変更を保存しますか? "
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "ワークスペースファイルの設定を保存しますか?  "
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "マップ画面を閉じる %d  "
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -7920,150 +8321,146 @@ msgstr ""
 "コマンド '%s' はまだGUIで実装されていません. コマンドラインより実行してくださ"
 "い."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "選択した地図はベクトルではありません."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "編集は、現在のマップセットからベクトルマップにのみ許可されています"
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "実行するスクリプトファイルの選択"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Python スクリプト (*.py)|*.py|Bash スクリプト (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "スクリプトファイル '%s' は存在しません. 処理はキャンセルされました."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "領域設定"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "SQLクエリ '%s' が実行できません 処理がキャンセルされました"
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "スクリプト実行 '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "現在のマップセットは <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "作業環境を変更する "
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "GRASSを実行する"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "不明な値"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "GIS ライブラリ  "
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "SQLビルダー"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -8071,60 +8468,60 @@ msgstr ""
 "現在のワークスペースは空ではありません.ワークスペースに現在の設定を適用しま"
 "すか?  "
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "新しいワークスペースを作成? "
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "ワークスペースファイルの選択 "
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "GRASS ワークスペースファイル (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "しばらくお待ちください.ワークスペースロード中... "
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "ロードする GRC ファイルの選択 "
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "旧 GRASS ワークスペースファイル (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "現在のワークスペースをファイルに保存 "
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "ワークスペースファイル <%s> は既に存在します.上書きしてよろしいですか?  "
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "ワークスペース保存 "
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "現在のワークスペースの設定を書きこむことができませんでした."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "新しいマップセット名:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS マップ表示: %(id)d  - ロケーション: %(loc)s"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8132,36 +8529,36 @@ msgid ""
 "Reason: %s"
 msgstr "アイコンテーマがロード出来ません 理由: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "新しいレコードを挿入出来ません"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "新しいレコードを挿入出来ません"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "レイヤーツリーにレイヤーを追加 "
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "未サポートレイヤータイプ '%s'"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "不透明度:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8172,56 +8569,53 @@ msgstr ""
 "%s\n"
 " レイヤーツリーから削除しますか?  "
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "マップレイヤーの削除 "
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "GRASS GUI 終了 "
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "エラー: GRASSバージョンを決定できません. 詳細Details: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "ラスターデータのインポート "
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "外部ラスターデータへのリンク"
 
@@ -8237,12 +8631,14 @@ msgid "Set raster output format"
 msgstr "出力フォントの選択 "
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "ベクトルデータのインポート "
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "外部ベクトルデータへのリンク"
 
@@ -8265,7 +8661,7 @@ msgstr "WMSサーバーからデータをインポート "
 msgid "Add command layer"
 msgstr "コマンドレイヤー追加 "
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "終了 "
@@ -8315,8 +8711,8 @@ msgid "Add rhumbline layer"
 msgstr "航程線レイヤー追加 "
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "3Dラスターマップレイヤー追加"
 
@@ -8339,301 +8735,293 @@ msgstr "検証モデル..."
 msgid "Background vector map"
 msgstr "ベクトルマップのパッチ"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "マップレイヤー"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "不透明度レベルの変更 "
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "3D表示プロパティ"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "選択したマップのズーム"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "マップから計算領域をセット "
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "ベクトルマップのエクスポート "
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Pythonスクリプトでモデルを出力"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "RGB 作成 "
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "現在のマップセットから %d 個のデータを削除"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "カラーテーブルのセット"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "属性データを表示 "
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "編集開始 "
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "編集終了 "
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "トポロジーの再ビルド"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "選択したマップのズーム (未選択は不可) "
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "または対話的に値を入力します"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "ヒストグラム"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "単変量ラスター統計"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "レポートと統計"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "プロファイル"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "選択レイヤーの削除 "
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "ラスターマップの断面を作成できません "
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "3Dラスターマップ"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "未サポートレイヤータイプ '%s'"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "新しいマップセット名:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "不透明度のセット <%s> "
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "ベクトルマップ <%s> は既に存在します。上書きしますか?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "上書きしますか?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "ベクトルマップがオープンできません <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "ラスターマップのヒストグラムを表示できません "
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "不透明度のセット <%s> "
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "レイヤーグループ: "
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "クリックでレイヤー設定の編集 "
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(ダブルクリックでプロパティの設定) "
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "データの更新中 しばらくお待ちください... "
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "新規マップ表示開始 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "新しいワークスペース作成 (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "既存のワークスペースファイルを開く (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "現在のワークスペースをファイルに保存 (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "ラスターマップの追加 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "ラスターマップの追加 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "様々なラスターマップレイヤー追加 (RGB, HIS, 陰影..)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "ベクトルマップレイヤー追加 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "様々なベクトルマップレイヤー追加 (主題図, チャート...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "グループ追加 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "ベクターマップレイヤーの追加 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "ラスターマップのインポート "
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "ラスターマップカリキュレータ"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "描画モデラー"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr " 幾何補正処理 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "カートグラフィックコンポーザー"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "スクリプト実行"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "GUI設定"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "陰影図 "
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "選択レコードの修正"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "属性デ-タを再ロード (選択されたレイヤーのみ)  "
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "画像のヒストグラムを作成"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "3D表示設定"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "3Dビューモード設定ダイアログ 表示/非表示"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "3Dビューモード設定ダイアログ 表示/非表示"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8645,633 +9033,641 @@ msgstr ""
 "はバイナリのダウンロードに関する情報は数値Pythonのサイト(http://numpy.scipy."
 "org)を参照してください"
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "GRASSプロファイル解析ツール"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "断面"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "距離 (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "横断面に沿った距離"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "セル値"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "ラスター値"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "マップを表示するために横断面を設定する必要があります"
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "断面がありません"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 #, fuzzy
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr "プロファイルの値を保存する、(ラスタ名の).パスとプレフィックス.."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "カンマ区切り値 (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "上書きしますか?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "書き込み用ファイル <%s> がオープン出来ません"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "プレビューが作成されました"
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "クランプセルによる統計解析"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "ラスター値"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "保存するものがありません"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "ラスターマップ1 選択(必須):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "ラスター値"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "データベース %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "ラスターマップに関する一連のレポートを作成"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "断面 表示/再表示"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "マップの横断面を表示 "
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "オプションのセット "
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "3Dグリッド統計"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "プロファイルデータをCSVファイルに保存"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "終了 "
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "左: 新規ポイント "
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "テキスト設定"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "フォント設定 "
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "このフュチャーはまだ機能していません"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "工事中"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "ヒストグラム"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "セル値"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "ヒストグラム"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "ラスター値"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "別名で保存 "
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "ラスターマップに関する一連のレポートを作成"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "ラスターマップの断面を作成できません "
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "ラスターマップの断面を作成できません "
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "ラスターマップの断面を作成できません "
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "コピー(&o)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "クリップボードに現在のコマンド設定をコピー (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "ラスターマップ2 選択(オプション):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "ラスターマップの選択:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "グループ選択:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "ヒストグラム"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "現在のマップセットから %d 個のデータを削除"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "断面図タイトル:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "タイトルフォントサイズ (ポイント):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "X-軸ラベル:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Y-軸ラベル:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "ラベルフォントサイズ (ポイント):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "フォントグループ:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "スタイル:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "太さ:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "現在のセッションの変更を適用し、ダイアログを閉じる"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "断面図設定をファイルに保存 '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "マップから計算領域をセット "
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "ライン色"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "横断面定義マーク設定"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "ベクトルポイント"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "軸設定"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X-軸"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y-軸"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "スタイル:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "ユーザ定義最小値"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "ユーザ定義最大値"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "対数縮尺"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "グリッド 凡例 設定"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "グリッド色"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "グリッド表示"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "凡例フォントサイズ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "凡例表示"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "断面図設定をファイルに保存 '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "ラスター設定"
+msgstr "間違った領域"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "属性列:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "ラスターマップ3 選択(オプション):"
+msgstr "ベクトルフィーチャ選択"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "描画"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "ヘルプ "
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "間違った領域"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "ベクトルマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "カテゴリーモード"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "タイムスタンプ "
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "間違った領域"
+msgid "Seed point outside the current region"
+msgstr "現在の領域からエリアを作成"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "間違った領域"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "間違った領域"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "間違った領域"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "ベクトルデータのインポート "
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "ラスターデータのインポート "
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "ファイル(&F)"
 
@@ -9279,8 +9675,8 @@ msgstr "ファイル(&F)"
 msgid "Workspace"
 msgstr "ワークスペース "
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "新規 "
 
@@ -9288,7 +9684,7 @@ msgstr "新規 "
 msgid "Create new workspace"
 msgstr "ワークスペース新規作成 "
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "開く"
 
@@ -9296,12 +9692,12 @@ msgstr "開く"
 msgid "Load workspace from file"
 msgstr "ファイルからワークスペースをロード "
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "保存 "
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "別名で保存 "
 
@@ -9322,7 +9718,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "GRC ファイルからマップレイヤーをレイヤーツリーにロード "
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "マップディスプレイ"
 
@@ -9351,7 +9747,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "ラスターマップの追加 "
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "グリッドレイヤー追加 "
@@ -10063,23 +10459,23 @@ msgstr "ボリューム → ラスターシリーズ "
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "3Dラスターマップから2Dラスターマップへ変換"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr " 幾何補正処理 "
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "幾何補正の為のGCP(地上基準点)管理"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "描画モデラー"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "描画モデラー起動"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "モデル実行"
 
@@ -10119,16 +10515,16 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr "座標と方向&距離間の変換ユーティリティ "
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "カートグラフィックコンポーザーを起動する"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "マップレイヤータイプ:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "スクリプト実行"
@@ -10141,7 +10537,7 @@ msgstr "スクリプト実行"
 msgid "Launches script file."
 msgstr "スクリプトファイル起動."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "閉じる "
@@ -10151,8 +10547,8 @@ msgstr "閉じる "
 msgid "Quit wxGUI session."
 msgstr "wxGUIセッション終了"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "GRASS GUI 終了 "
@@ -10161,7 +10557,7 @@ msgstr "GRASS GUI 終了 "
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "設定(&S)"
 
@@ -10336,7 +10732,7 @@ msgstr "インストールされたアドオンを更新する"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "インストールされたGRASSアドオンを削除する"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "GUI設定 "
 
@@ -11422,7 +11818,7 @@ msgid ""
 msgstr "フィーチャへの入力レイヤーからの距離をラスターマップに作成 "
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "平面 "
 
@@ -11685,8 +12081,8 @@ msgid "Develop vector map"
 msgstr "ベクトルマップの作成 "
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "新しいベクトルマップ "
 
@@ -12597,13 +12993,13 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr "入力 の"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -13704,27 +14100,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "マップツールバー "
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "計算範囲表示"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "カテゴリーモード"
+msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "計算範囲表示"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "ヘルプ(&H)"
 
@@ -13751,7 +14151,7 @@ msgid "Prints system information"
 msgstr "データベース情報"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "GRASS GIS について "
 
@@ -13765,296 +14165,304 @@ msgstr "ベクトルデータのインポート "
 msgid "Attribute table manager"
 msgstr "属性テーブルマネージャー"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "新しいモデルの作成 "
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "ファイルからモデルをロード "
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "モデルをファイルに保存"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "モデルファイルを閉じる"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "イメージにエキスポート"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "モデルをイメージにエクスポート"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Pythonにエキスポート"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Pythonスクリプトでモデルを出力"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "モデラー終了"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "モデラーウィンドウを閉じる"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "モデル(&M)"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "コマンドレイヤー追加 "
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 #, fuzzy
 msgid "Add action (GRASS command) to model"
 msgstr "モデルにアクション(GRASSモジュール)を追加"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "データ追加"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "モデルにデータアイテムを追加"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "連携定義"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "データとアクションアイテムの関連付けを定義"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "ループ追加 "
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 #, fuzzy
 msgid "Adds loop (series) to model"
 msgstr "モデルに(for)ループ追加"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "条件追加"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "モデルに(if/else)条件追加"
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "モデルに(if/else)条件追加"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "アイテム削除"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "モデルからアクション/データ消去"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "モデルプロパティ(名前,目的,etc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "中間データ削除"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "モデル内に定義された中間データ削除"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "全体モデル実行"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "モデル検証"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "全体モデル検証"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "画像モデラーのHTMLマニュアルを表示"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "描画モデラーについて"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "画像モデラーに関する情報表示"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "イメージにエキスポート"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Pythonスクリプトでモデルを出力"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "エクスポート "
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "スクリプト実行"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "カートグラフィックコンポーザー"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 #, fuzzy
 msgid "&Insert"
 msgstr "インストール(&I)"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "マップフレームの周囲に境界線を描きます"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "3Dラスターマップ追加 "
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "ベクトル"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "凡例追加 "
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "ラスターマップのインポート "
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "マップエレメント追加 "
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "縮尺と方位を追加 "
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "画像モデラーのHTMLマニュアルを表示"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "カートグラフィックコンポーザーを終了する"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "画像モデラーに関する情報表示"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "クリックで検索モジュールエンジン表示"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "クリックで検索モジュールエンジン非表示"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "コマンド出力 "
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "出力 "
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "コマンド出力 "
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "コマンドの実行を中止します"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "対数縮尺"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "名前を付けて保存する..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "テキスト設定"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "ファイル "
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14062,12 +14470,12 @@ msgid ""
 "Details: %(error)s"
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "コマンド出力 "
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14078,100 +14486,140 @@ msgstr ""
 "\n"
 "詳細: %(reason)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "コマンド出力 "
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "カテゴリー"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "ベクトルフィーチャ選択"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "新しいマップセットの作成 "
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "ベクトルマップは3Dではありません 処理はキャンセルされました"
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "ベクトルマップがオープンできません <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "マップレイヤーが選択されていません "
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "新しいベクトルマップ <%s> が作成されました"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "ベクトルマップを作れません <%s>"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 #, fuzzy
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "メニュー (ダブルクリックでコマンド実行)"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "選択コマンド実行"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "ユーザー設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "デフォルトに設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "デフォルトの設定に戻し,設定を保存"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "現在のセッションの変更を適用し、ダイアログを閉じる"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "現在のセッションに変更を適用する"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "設定は、現在のセッションに適用されますが、保存はされません"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "キー列は空白にはできません"
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "GUI設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "レイヤーマネージャー設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "レイヤツリーからマップレイヤーを削除する時に問い合わせる"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "wxGUIの終了または画面を閉じる時に問い合わせる"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "%s'タブを隠す(GUIの再起動が必要です)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "検索モジュール"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 "選択したテキストを自動的にクリップボードへコピーする(コマンドコンソール)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "ワークスペース設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "マップ表示画面の位置を制限する"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "レイヤーマネージャー画面の位置を制限する"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "現在のの画面レイアウトをデフォルトとして保存"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14179,208 +14627,200 @@ msgstr ""
 "現在のレイヤマネージャー画面とマップ表示画面の位置とサイズを保存し、次のセッ"
 "ションからデフォルトとして使用"
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "外観"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "コマンド出力のフォント:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "設定変更 "
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "詳細設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "エレメントリスト:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "マップ選択ポップアップウィンドウの高さ(ピクセル)"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "アイコンテーマ(GUIの再起動が必要です)"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "コマンドダイアログ"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "マップディスプレイ"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "GRASS表示のデフォルトフォント:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "デフォルト画面設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "ディスプレイドライバ:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "ステータスバーモード:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "自動レンダリングを有効にする"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "選択したマップレイヤーでオートズームを有効にする"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "詳細設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "コード "
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "コマンドダイアログ設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "コマンドが正常終了したときにダイアログを閉じる"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "レイヤーツリーに作成したマップを追加"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "対話形式の入力を許可"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "冗長レベル:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "レイヤー"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "デフォルト画面設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "デフォルトカラーテーブル"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "ベクトル設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "表示:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "ワイヤー色"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "透過 "
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "ワイヤー色:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "シンボル:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "線幅(ピクセル):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "選択したフィーチャの強調表示しズーム"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "データブラウザ"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "左ボタンダブルクリック:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "エンコード(例  utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "テーブルからデータレコードを削除するときは問い合わせる"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "テーブル作成"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "キー列:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "投影法ステータスバー設定"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14392,81 +14832,92 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "EPSGコード:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Proj.4文字列(必須):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "EPSGファイル:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 "ESPGコードの読み込み、ESPGコードの入力またはProj4ストリングを直接挿入する"
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "EPSGコードのロード(&L)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "座標フォーマット"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "投影法の管理 "
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "精度:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr " EPGSコードが読めません: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "EPSGコードが読めません: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "EPSGコード %s が見つかりません"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "デフォルトディスプレイフォントの選択"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "デフォルトディスプレイフォントの選択"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "フォントの選択:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "文字エンコーディング:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "例: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "マップセットへのアクセスを管理"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14480,178 +14931,247 @@ msgstr ""
 "    - 現在のマップセットのみ書き込み可能.\n"
 "    - 自分が所有しているマップセットのみ書き込み可能."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "マップセット"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "所有者"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "ラスターマップの検索 "
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "フィーチャID"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "値"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "ベクトルマップの選択"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "全列を消去"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "選択した列を消去"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "コピー "
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "テーブルコピー"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "ラスターマップの検索 "
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "正規性検定"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "削除するものがありません"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 #, fuzzy
 msgid "Fulltext search"
 msgstr "全範囲"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d 個のモジュールが一致しました"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "プロファイル"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "設定保存"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "マップセットを削除"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "ロードする設定:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "ロード"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "マップ <%s> が見つかりません "
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "設定保存"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "名前が指定されていません, 設定は保存されません."
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "ファイル <%s> は既に存在します.上書きしてよろしいですか?  "
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "コマンドを解析することができません %s"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "ファイル保存"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "パラメータを入力してください '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "コマンド実行 (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "量子化 "
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "パラメータを入力してください '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "コマンドを実行せずに画面を閉じる (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "コマンド実行 (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "クリップボードに現在のコマンド文をコピー"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "コマンドのマニュアルページを表示 (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "レイヤーツリーに作成したマップを追加"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "終了時にダイアログを閉じる"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
@@ -14659,94 +15179,114 @@ msgstr ""
 "コマンドが成功した場合はダイアログを閉じます. ダイアログ('コマンド'タブ)で"
 "この設定を変更します."
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "必須"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "オプション"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "モデルのパラメータ化"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[複数] "
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "有効範囲 "
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "カラー選択 "
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "選択 %s "
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "ロード(&L)"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "ロケーション名の変更"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "別名で保存 "
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "または対話的に値を入力します"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
-msgid "Directory"
-msgstr "ディレクトリ"
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
+msgid "Directory"
+msgstr "ディレクトリ"
+
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "レイヤーID"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "レイヤー名"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "投影法"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "マニュアル "
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "保存するものがありません"
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14754,46 +15294,46 @@ msgid ""
 "Reason: %s"
 msgstr "アイコンテーマがロード出来ません 理由: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "保存するものがありません"
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "名前を付けて保存する..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "%s でエラー "
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "コマンドを解析することができません '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: パラメーター '%(key)s' は利用できません"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "GRASSのロケーションとマップセットを選択"
 
@@ -14802,48 +15342,48 @@ msgstr "GRASSのロケーションとマップセットを選択"
 msgid "Location or mapset is not defined."
 msgstr "スケールバーの長さは定義されていません"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "GRASSロケーショ名:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "マップセット名:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "GRASSロケーションからマップセット選択"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "マップセット名:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "新しいベクトルマップ名:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "属性テーブル作成"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "新しいベクトルマップ名:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "新しいベクトルマップ名:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
@@ -14852,532 +15392,414 @@ msgstr ""
 "不正もしくは空のキー項目\n"
 "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr "ベクトルマップ <%s> は既に存在します。上書きしますか?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "ロードする領域: "
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "領域保存:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "グループの作成/修正"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "変更してダイアログを閉じる "
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "現在のセッションに変更を適用する"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "実行してダイアログを閉じる"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "アスター"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "マップ一覧:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 #, fuzzy
 msgid "Select map layers and add them to the list."
 msgstr "選択した地図はベクトルではありません."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "レイヤーツリーにレイヤーを追加 "
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "変更を保存する"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, fuzzy, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "ベクトルマップ<%s> の幾何補正に失敗しました"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "3Dラスター:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "マップレイヤータイプ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "トグル選択"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "マップセット:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "選択の反転"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "複数インポート"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "レイヤ一覧  "
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "レイヤ一覧  "
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "%s レイヤ一覧"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "レイヤーID"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "レイヤー名"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "マップ名"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "投影法"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "オプション"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "インポート(&I)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "選択レイヤーをインポート"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "レイヤーツリーにインポートレイヤーを追加 "
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "レイヤーツリーにインポートレイヤーを追加 "
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "リンク(&L)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "選択レイヤーのリンク"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "ラスターマップの断面を作成できません "
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "ベクトルマップのインポート "
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "ラスターマップのインポート "
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "変更を行わずにダイアログを閉じる"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "マップレイヤーが選択されていません "
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "DXFレイヤーのインポート "
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "インポートするDXFファイルを選択"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "マップレイヤーが選択されていません "
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "レイヤーの透過度設定"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "不透明"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "イメージサイズの設定"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "イメージサイズ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "テンプレート:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - マップ ディスプレイ "
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "SQL文"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "シンボル"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "シンボルサイズ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "シンボルサイズ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "情報 "
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "コピーライト "
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "ライセンス "
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "回転:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "著者 "
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "貢献者たち"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "属性"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "翻訳"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "翻訳"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "公式 GRASS サイト:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "GIS ライブラリ  "
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "言語"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "%s ファイルがありません"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "ファイル '%s'読み込み時のエラー"
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "ライン"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "国"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "回転:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "ファイル <%s> が見つかりません"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "次(&N)"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "前(&P)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "マップツールバー "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "レイヤーグループ: "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "レイヤーID"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "レイヤープロパティ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "不透明度レベルの変更 "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "不透明度レベルの変更 "
@@ -15478,724 +15900,741 @@ msgstr "縮尺と凡例をマップに重ねて表示 "
 msgid "Create histogram with d.histogram"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "デフォルトディスプレイフォントの選択"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "選択可能な要素ではない"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "タイプ"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelect: 無効な項目: %s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "一般設定"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "ラスター設定"
+msgid "Source input"
+msgstr "ソースタイプ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "保存 "
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "ファイル "
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "プロトコル"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "出力 "
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "ソースタイプ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "全ファイル"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "全ファイル"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "全ファイル"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "全ファイル"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "全ファイル"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "ファイル:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "インポートするファイルを選択"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "発光度"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "ファイルを選択"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "フィーチャID:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "フィーチャの検索"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "トポロジーの再ビルド"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "オプションのセット "
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "フォーマット:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "プロトコル:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "3Dビューモードは使用できません"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 #, fuzzy
 msgid "No data source defined, settings are not saved."
 msgstr "名前が指定されていません, 設定は保存されません."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "強調表示"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "ベクトルマップ <%s> が見つかりません"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "ベクトルマップは3Dではありません 処理はキャンセルされました"
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "元のマップセットの選択:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "マップセット:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "縮尺"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "タイムスタンプ "
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "トポロジーの再ビルド"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "デフォルト設定に戻す"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "必須"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "レイヤ一覧  "
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "投影法の選択 "
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "詳細設定"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "ラスターマップの重ね合せ "
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "投影コード: "
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "近傍情報を利用した再サンプリング "
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "線形回帰"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "補間方法の選択:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "パラメータを入力してください '"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "コマンドを解析することができません %s\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "座標フォーマット"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "レイヤーツリーにレイヤーを追加 "
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "元のマップセットの選択:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "元のロケーションの選択:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "レイヤー"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "スタイル"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "ループ追加 "
+msgid "Add default"
+msgstr "デフォルト"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "サーバー設定"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "サーバー:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "接続(&C)"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "サーバーに接続"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "詳細設定"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "詳細設定"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "レイヤーマネージャー設定"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "ベクトル"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "名前変更 "
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "モデルのエクスポート <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "ベクトルマップがオープンできません <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "レイヤーツリーにレイヤーを追加 "
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "レイヤープロパティ"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "適用(&A)"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "出力するラスターマップ名:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "領域設定"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "ロードする領域: "
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "計算を行うための表示解像度を設定 "
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "表示域からの解析領域を設定"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "挿入する既存ラスターマップ名"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "ロードする領域: "
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "レイヤー削除(&R)"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "選択レイヤーの削除 "
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "現在のマップセットから %d 個のデータを削除"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "ファイルはすでに存在します"
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "新しいベクトルマップ <%s> が作成されました"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "データ ロード中... "
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "設定できません"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "ダイアログを閉じる"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "ダイアログを閉じる"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "ベクトル属性データの検索"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "ベクトルマップの選択:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "カラーテーブルのセット"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "ロードする GRC ファイルの選択 "
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "ロード"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "ロードする GRC ファイルの選択 "
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "設定(&S)"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "現在のワークスペースを保存 "
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "現在のワークスペースを保存 "
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "現在のワークスペースを保存 "
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "デフォルトビューのリセット"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "カラーテーブルのセット"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr "ルールの値が違います '%s'. カラーテーブルに適用できません."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "ラスターマップ用カラーテーブルを作成"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "ラスターカテゴリー値またはパーセントの入力 "
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "有効範囲 "
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr "ラスターカテゴリー値または範囲の入力 (%(range)s = %(min)d-%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "ベクトルマップ用カラーテーブルを作成"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "ベクトルの属性値または範囲(NまたはN1~N2)を入力"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "ベクトル属性データの検索"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "ベクトルマップの選択"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "レイヤー:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "属性列:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "RGB色の列:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "RGB色の列:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "全列を消去"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "ラスターシリーズ → ボリューム"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "ファイルからワークスペースをロード "
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "属性テーブルの削除"
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "カラーテーブルのセット"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16204,351 +16643,360 @@ msgstr ""
 "ベクトルマップ <%s> はDB接続の定義がされていません 接続の設定は レイヤー管"
 "理' タブで行ってください"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "データベース接続"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr "ベクトルマップ <%s> は既に存在します。上書きしますか?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "しばらくお待ちください 属性データをロード中... "
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "ベクトルの属性値または範囲(NまたはN1~N2)を入力"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "ベクトルの属性値または範囲(NまたはN1~N2)を入力"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "ベクトルマップのトポロジーの編集ツールキット"
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS GISラスターマップカリキュレータ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS GIS 3Dラスターマップカリキュレータ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "mapcalcステートメント"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "演算子"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "演算数"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "式"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "式をファイルに保存"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "式をファイルからロード"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "指数"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "分割"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "加算"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "減算"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "モジュール"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "乗算"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "左シフト"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "右シフト"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "右シフト(符号なし)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "より大きい"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "より大きいまたは等しい"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "より小さい"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "より小さいか等しい"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "等しい"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "等しくない"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "一の補数"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NOT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "ビット積"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "ビット論理和"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "論理積"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "論理積(NULL値を無視する)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "論理和"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "論理和(NULL値を無視する)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "条件"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "新しい3Dラスターマップ名:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "新しいラスターマップ名:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "挿入する既存3Dラスターマップ名"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "挿入する既存ラスターマップ名"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "挿入する演算関数"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "ランダムなポイントを作成"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "レイヤーツリーに作成したラスターマップを追加"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "作成するマップの名前を入力する必要があります"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 "新しいマップを作成するためのmapcalcステートメントを入力する必要があります"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "式を保存するための名前を選択"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "式名 (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "ロードする式のファイル名を選択"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' クリップボードにコピーしました"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "GRASSアドオンからエクステンションを取得&インストール"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "リポジトリ"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "項目リスト - 右クリックで削除"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "オプション"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "取得(&F)"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr "GRASSのアドオンSVNリポジトリから利用可能なモジュールの参照リスト"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "インストール(&I)"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "選択されたアドオンGRASSモジュールのインストール"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "拡張子は定義されていません"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 "GRASSアドオンのSVN(患者が)からモジュールのリストを取得中(お待ちください)..."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "拡張子リスト"
+
+#: ../gui/wxpython/modules/extensions.py:238
 #, fuzzy
 msgid "Install"
 msgstr "インストール(&I)"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "陰影図 "
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "コマンドを解析することができません %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "GRASS アドオンGRASSモジュールのアンインストール"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "インストールされたアドオンGRASSモジュールの一覧"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "アンインストール(&U)"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "選択されたアドオンGRASSモジュールのアンインストール"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "インストール(&I)"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "選択されたアドオンGRASSモジュールのアンインストール"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr ""
 "削除するアドオンGRASSモジュールが選択されていません 処理はキャンセルされまし"
 "た "
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -16556,254 +17004,401 @@ msgid ""
 "\n"
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
-"削除されるファイル一覧:\n"
-"%(files)s\n"
-"\n"
-"これらの拡張機能 <%(ext)s> を本当に削除しますか?"
+"削除されるファイル一覧:\n"
+"%(files)s\n"
+"\n"
+"これらの拡張機能 <%(ext)s> を本当に削除しますか?"
+
+#: ../gui/wxpython/modules/extensions.py:493
+msgid "Remove extension"
+msgstr "拡張機能の削除 "
+
+#: ../gui/wxpython/modules/extensions.py:526
+msgid "Extension"
+msgstr "拡張機能"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "複数インポート"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "レイヤ一覧  "
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "レイヤ一覧  "
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "%s レイヤ一覧"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "マップ名"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "インポート(&I)"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "選択レイヤーをインポート"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "ラスター設定"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "フォント設定 "
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "レイヤーツリーにインポートレイヤーを追加 "
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "レイヤーツリーにインポートレイヤーを追加 "
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "リンク(&L)"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "選択レイヤーのリンク"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "ラスターマップの断面を作成できません "
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "ベクトルマップのインポート "
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "ラスターマップのインポート "
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "変更を行わずにダイアログを閉じる"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "マップレイヤーが選択されていません "
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "DXFレイヤーのインポート "
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "インポートするDXFファイルを選択"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "マップレイヤーが選択されていません "
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "投影法"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "マップ名"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
-msgid "Remove extension"
-msgstr "拡張機能の削除 "
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "消去するレイヤー"
 
-#: ../gui/wxpython/modules/extensions.py:464
-msgid "Extension"
-msgstr "拡張機能"
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "選択レイヤーをインポート"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "GRASS-python ライブラリーが見つかりません."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "入力データ"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "点データセット:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "数値列:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "クリギング"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "出力するラスターマップ名:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "分散マップと同様にエクスポート: "
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "クリギングモジュール"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "用意."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "バリオグラム推定"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "バリオグラムによる表示/再表示"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":  "
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "クリギング技法"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "ブロックサイズ:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "バリオグラムによる自動配分"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "モデル:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "作業中です! 他の機能は動作しません."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "画像/ラスタ-ファイルのヒストグラム作成 "
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "ヒストグラム用のフォント選択"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "ベクトルクリーニングツール設定"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "ライン/境界を分割"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "重複を削除"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "ダングル削除"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "境界の突き出しをラインに変換"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "接続点削除"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "接続点をラインに変更"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "ライン/境界を切取る(snap)"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "重複したエリア中心を消去"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "ポリゴン分割"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "ライン/境界を取払う(prune)"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "狭小エリア削除"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "長さ0のライン/境界を削除"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "角度の小さいノード群を消去"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "クリーニングツールの選択としきい値のセット"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "入力ベクトルマップ選択:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "フィーチャタイプ:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "出力ベクトルマップ選択:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "クリップボードに現在のコマンド設定をコピー (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "ライン"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "境界"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "セントロイド"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "表層"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. クリーニングツールは削除されたか, 無視されます"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "削除するクリーニングツールを選択してください"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. クリーニングツールを上に移動"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "1. クリーニングツールは、上に移動することはできません"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr "上に移動するクリーニングツールを選択してください"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. クリーニングツールは下へ移動されました"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "最後のクリーニングツールは、下に移動することはできません"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "下に移動するクリーニングツールを選択してください"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "クリーニングツール: '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "しきい値 %(num)s. ツール '%(tool)s': %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "ベクトルマップ名:"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "新しいベクトルマップ名:"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "しきい値選択"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, fuzzy, python-format
 msgid "'%s' not defined"
 msgstr "<定義されていません>"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16811,20 +17406,20 @@ msgid ""
 "%s"
 msgstr "マップレイヤーが選択されていません 処理はキャンセルされました "
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "選択したクリーニング処理を実行..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "ベクトルクリーニングコマンドをクリップボードにコピー"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "ファイル <%s> がオープン出来ません"
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16837,74 +17432,99 @@ msgstr ""
 "\n"
 "スキップされた行数: %(line)d  "
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " 行 %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>:レイヤータイプ <%(type)s>はサポートされていません"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "コマンド終了"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "詳細:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "未サポートレイヤータイプ '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "マップレイヤーの削除 "
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "レンダリング "
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "データ ロード中... "
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "レンダリング "
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "レンダリング "
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "デフォルト領域でズーム"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr "エラー: オープンできません '%(file)s'. 理由: %(ret)s. wxGUI 終了.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "間違った値: %s "
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "ラスターマップ <%s> をズーム出来ません"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "詳細:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "ベクトルマップを作れません <%s>"
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "ラスターマップ <%s> をズーム出来ません"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
@@ -16912,115 +17532,85 @@ msgstr ""
 "現在の地理的範囲を取得することができません。wxGUIを強制終了します。手動でg."
 "regionを実行し問題を解決してください"
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "マップレイヤー <%s> をレンダリング出来ません"
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "<%s> をレンダーオーバーレイできません"
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "データ ロード中... "
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "レンダリング "
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "レンダリング "
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "不明なタグ"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "既存レコードの更新ができません"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "ユーザ定義最大値"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "ベクトルマップ <%(map)s>: %(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "%s' がオープンできません"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "エラー: GRASSバージョンを決定できません. 詳細Details: %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "ファイル <%s> がオープン出来ません"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "重複する属性"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17033,178 +17623,183 @@ msgstr ""
 "\n"
 "オプション <%(opt)s>: wxGUIでは標準入力からの読込はサポートされていません"
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "ファイル <%s> が見つかりません"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr "データが矛盾した状態か破損して残っていますので注意してください"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "コマンド中止"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "コマンド終了"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "理由"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "実行失敗:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "エラー:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "コマンドが実行できません: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "セグメント中断"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "ポイント"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "量子化 "
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "PERMANENT と 現在のマップセット以外を除去"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "PERMANENT以外を除去"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "現在のマップセット以外を除去"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "すべてを除去"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "全てを展開"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "表示選択"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "クラシック(ラベルのみ)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "組み合わせ(ラベルとモジュール名)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 #, fuzzy
 msgid "Expert (module names only)"
 msgstr "プロフェッショナル(モジュール名のみ)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "テーブル一覧"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "保存領域でズーム"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "北方向"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "ボックス"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "球"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "立方体"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "菱形"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "アスター"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "ジャイロ"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "ヒストグラム"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "コマンドを解析することができません %s\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17215,11 +17810,11 @@ msgstr ""
 "\t\t詳細: %(detail)s\n"
 "\t\t行: '%(line)s' \n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "既存レコードの更新ができません"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17230,73 +17825,73 @@ msgstr ""
 "\n"
 "詳細: %(detail)s "
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "設定できません"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "コマンドを解析することができません '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "データベースとロケーション名の設定 "
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "GISデータディレクトリ:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "プロジェクトロケーション "
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "GISデータディレクトリの選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "ロケーションタイトル:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "ロケーションの選択が間違っています"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "GRASSデータディレクトリの選択:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "データベースにロケーションはすでに存在しています "
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "ロケーションを作成できません"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
@@ -17304,204 +17899,235 @@ msgstr ""
 "ロケーションのタイトルは1ラインと256文字に制限されています. あとのテキストは"
 "無視されます"
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "新しいロケーションの作成方法を選択 "
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "EPSGコードを指定"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr "地理参照ファイルを選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 #, fuzzy
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "WKTまたはPRJファイルを選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "パラメータをリストから選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "PRJ.4パラメータ入力"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "XY平面空間指定"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "シンプル"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "アドバンス"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "投影法の選択 "
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "コード "
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "投影コード: "
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "説明文を検索: "
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "リストが読ません: %s "
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "投影パラメータを選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "データムまたは楕円体の選択 (次のページ) "
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "楕円体に関連づけられたデータム "
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "楕円体のみ "
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "%s の値を入力してください"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "投影法 %s のパラメータを入力 "
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "測地系データムの定義 "
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "楕円体"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "データムコード:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "楕円体定義"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "データベース "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "楕円体コード:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "地理参照ファイルの選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "地理参照ファイル:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "WKTファイル:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "EPSGコードの選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "EPSGコードファイルのパス:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "EPSGコードファイルの選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "EPSGコードの選択"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "EPSGコードファイルのパス:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "EPSGコード:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "EPSGコードファイルの選択"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr " EPGSコードが読めません: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "地理参照パラメータの定義方法の選択"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "PROJ.4パラメータの入力:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "データムの変換が必要です."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "GRASSデータベース:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "ロケーション名:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "ロケーションタイトル:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "投影法:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "PROJ.4 定義:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "GRASS ロケーションを作成しますか <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "新しいロケーションを作成しますか?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "新しいロケーション定義"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17512,16 +18138,16 @@ msgstr ""
 "\n"
 "詳細: %(err)s "
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 "ロケーションウイザードはキャンセルされました。ロケーションは作成されません"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "新しいロケーションは作成できません"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17530,232 +18156,237 @@ msgstr ""
 "ロケーション <%(loc)s> がディレクトリ<%(dir)s>に作成されます 必要ならばGRASS"
 "のスタートアップ画面でデフォルトディレクトリを変更してください"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "新しいGISデータディレクトリ"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "EPSGコードがありません"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "EPSGコードがありません"
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "ファイル <%s> が見つかりません"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "デフォルト領域と解像度をセット"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "領域設定(&S)"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "ロケーションの選択が間違っています"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "間違った領域"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "3D設定を表示"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "3D設定を非表示 "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "行: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "列: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "セル: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "深さ: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3D セル: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "上-下 解像度 "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "北"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "西"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "東"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "南"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "北-南 解像度"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "東-西 解像度 "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "間違った値: %s "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "データム変換方法の選択"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "データム変換方法を一覧表から選択"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "東方向"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "北方向"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "標高"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "列名"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "表層マップ標高"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "表層マップカラー"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "以前の所からXYの距離"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "以前の所からXYZの距離"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr "表層間の距離"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr "横断面に沿った距離"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "表層にポイントが有りません"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "ラスターマップをロード"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "3Dラスターマップをロード"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "失敗しました"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "サポートしていないレイヤーのタイプ '%s'"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "ラスターマップをアンロード出来ません"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "3Dラスターマップをアンロード出来ません"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3Dラスターマップ"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "アンロード成功"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "ベクトルマップ <%(name)s> (%(type)s)のロードを失敗しました"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "ベクトルマップ <%(name)s> (%(type)s)  をロードすることができません"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "ベクトルマップ <%(name)s> (%(type)s) がアンロードされました"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "ベクトルポイントレイヤーが見つかりません (ID=%d)  "
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "データレイヤーの属性をセット出来ません (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17766,807 +18397,807 @@ msgstr ""
 "\n"
 "%s  "
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 #, fuzzy
 msgid "constant#"
 msgstr "定数"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "ビュー"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "分析 "
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "量子化 "
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "コントロールビュー"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "視角:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Z-鉛直:  "
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 #, fuzzy
 msgid "Look:"
 msgstr "視線: "
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "球"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "レンダリング "
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "上"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "リセット"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "デフォルトビューのリセット"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "外観イメージ"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "記録"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "マップセット名変更"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 #, fuzzy
 msgid "Save image sequence"
 msgstr "イメージサイズの設定"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "入力ディレクトリ選択 "
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "曲面"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "表層断面図 "
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "ベクトル"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "照明"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "フリンジ"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "モード:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "粗い "
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "細かい"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "両方"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "シェーディング: "
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "フラット "
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "グロー "
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "全てにセット"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "ロードされた全曲面に描画設定を適用"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "粗い:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "解像度:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "スタイル"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "ワイヤー "
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "曲面"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "ワイヤー色"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "見つかったモジュール"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "曲面属性 "
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "透明度"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "光沢度"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "マップ"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "解除"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "定数"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "リセット"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "デフォルトビューのリセット"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "カラー"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "カラーで"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 #, fuzzy
 msgid "Horizontal X:"
 msgstr "水平角度 "
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 #, fuzzy
 msgid "Horizontal Y:"
 msgstr "水平角度 "
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "解像度:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "値"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "透明度"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "ベクトルライン表示"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "ベクトルライン"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "ライン:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "幅:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "カラー:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 #, fuzzy
 msgid "use color for thematic mapping"
 msgstr "主題図作成等の属性データの分類"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 #, fuzzy
 msgid "use width for thematic mapping"
 msgstr "主題図作成等の属性データの分類"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "オプションのセット "
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "表層"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "表層からの高さ:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "ベクトルポイント表示"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "ベクトルポイント"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "アイコン:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 #, fuzzy
 msgid "use size for thematic mapping"
 msgstr "主題図作成等の属性データの分類"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "等位面"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "解像度:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "等位面リスト "
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "光モデル表示"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "光源位置"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "光の色と強調"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "明るさ:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "周囲:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "フリンジ付きエッジ"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "北 && 西"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "北 && 東"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "南 && 西"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "南 && 東"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr "底部からフリンジの標高:"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "境界色:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "使用| X 座標 "
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 #, fuzzy
 msgid "Animation already axists"
 msgstr "ファイルはすでに存在します"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "等位面属性 "
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "等位面属性 "
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "重複する属性"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "西"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "北"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "南"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "東"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "西"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "北"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "南"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 #, fuzzy
 msgid "SW"
 msgstr "西"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "レベル: "
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "重複一覧"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "レイヤー追加"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "ベクトルマップは3Dです"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "ベクトルマップは2Dです"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d フィーチャー (%(points)d ポイント)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "表層"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "範囲"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "北方向"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "南"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "エッジ検出"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "北方向"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "高さ:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "東方向"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "下"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "3Dラスターマップ <%s> が見つかりません"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "3D表示設定"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "デフォルトの設定に戻し,設定を保存"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "値"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "(ステップ): "
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "位置:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr ":  "
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "ツイスト:  "
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "頂点の移動 "
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "右"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr ":  "
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "ワイヤー色"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "マーカー:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "3D表示設定がファイルに保存されました <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18576,7 +19207,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18588,23 +19219,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18612,7 +19243,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18623,31 +19254,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18662,68 +19293,68 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "幾何補正ツールバー "
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "ベクトルポイント"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "列名称変更"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "カラーの選択 "
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "グリッド表示"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "カテゴリーなし"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "カテゴリーなし"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "ラスターマップのエクスポート "
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "不透明度のセット <%s> "
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -18733,212 +19364,233 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "保存領域をズーム"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "3Dラスターマップ追加 "
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "マップレイヤーが選択されていません "
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "現在のマップセットから %d 個のデータを削除"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "領域<%s>がすでに存在します。上書きしてよろしいですか? "
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "新しいベクトルマップ <%s> が作成されました"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "カラーの選択 "
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "選択されたGCPの色:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "カラーの選択 "
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "表示するターゲットマップを選択:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "矩形で選択"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "軸設定"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "ラスターマップ3 選択(オプション):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "ベクトルマップ<%s> の幾何補正に失敗しました"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "3Dラスターマップ追加 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "表示するターゲットマップを選択:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "ラスターマップの断面を作成できません "
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "画像分類 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "選択したラスター/ベクトルマップの検索"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "レイヤーツリーから選択したマップレイヤーを削除しますか?  "
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "新しい頂点を追加 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "フィーチャーの選択"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "頂点の移動 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "頂点の移動 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "頂点の削除 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "頂点の削除 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "ラベル追加 "
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "選択したマップセット名を変更する "
 
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "現在の投影の単位はサポートされていません,\n"
+#~ " メートルが使用されます!"
+
+#~ msgid "Unsupported units"
+#~ msgstr "サポートしていないレイヤーのタイプ '%s'"
+
+#~ msgid "Map layers"
+#~ msgstr "マップレイヤー"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "検索モジュール"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "GRASS ロケーションを作成しますか <%s>?"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "ファイルはすでに存在します"
@@ -18959,6 +19611,26 @@ msgstr "選択したマップセット名を変更する "
 #~ msgstr "GUI 終了 "
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "間違った領域"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "3Dビューモードは使用できません"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "検証モデル..."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "名前変更 "
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "テーブルコピー"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "レイヤ一覧  "
 
@@ -18974,19 +19646,35 @@ msgstr "選択したマップセット名を変更する "
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "単変量ラスター統計"
 
-#~ msgid "Add condition"
-#~ msgstr "条件追加"
+#~ msgid "Repository"
+#~ msgstr "リポジトリ"
 
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "モデルに(if/else)条件追加"
+#~ msgid "Load settings:"
+#~ msgstr "ロードする設定:"
 
-#, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "レイヤーツリーにレイヤーを追加 "
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "マップレイヤー <%s> をレンダリング出来ません"
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "<%s> をレンダーオーバーレイできません"
+
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "旧GRASSベクトルのインポート "
+
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "旧GRASSベクトルのインポート(全てのマップ)"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "旧GRASSフォーマットベクトルマップインポート "
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "レイヤーツリーにインポートレイヤーを追加 "
+#~ msgid "GPS data import"
+#~ msgstr "GPSBabelのインポート "
+
+#~ msgid "GEOnet import"
+#~ msgstr "GEOnetのインポート "
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -19008,27 +19696,6 @@ msgstr "選択したマップセット名を変更する "
 #~ msgid "Common export formats using OGR"
 #~ msgstr "OGRを使用した一般的エクスポートフォーマット"
 
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "選択したマップから計算領域をセット (未選択は不可) "
-
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "旧GRASSベクトルのインポート "
-
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "旧GRASSベクトルのインポート(全てのマップ)"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "旧GRASSフォーマットベクトルマップインポート "
-
-#, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "GPSBabelのインポート "
-
-#~ msgid "GEOnet import"
-#~ msgstr "GEOnetのインポート "
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr "ラスターポイントの加重平均補間 (まばらなポイントの代替方法)  "
 
@@ -19039,11 +19706,23 @@ msgstr "選択したマップセット名を変更する "
 #~ msgstr "ビットパタ-ン比較"
 
 #, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "属性テーブルマネージャー"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "元のマップセットの選択:"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "選択したマップから計算領域をセット (未選択は不可) "
+
+#, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "ベクトルマップ <%(name)s> (%(type)s) がアンロードされました"
 
-#~ msgid "Volume"
-#~ msgstr "ボリューム"
+#, fuzzy
+#~ msgid "Add default servers"
+#~ msgstr "ループ追加 "
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "プロジェクトのロケーションとマップセットを選択"
@@ -19093,9 +19772,6 @@ msgstr "選択したマップセット名を変更する "
 #~ msgid "Start &GRASS"
 #~ msgstr "GRASSの起動(&G)"
 
-#~ msgid "&Create mapset"
-#~ msgstr "マップセットの作成(&C)"
-
 #~ msgid "&Location wizard"
 #~ msgstr "ロケーションウィザード(&L)"
 
@@ -19118,16 +19794,30 @@ msgstr "選択したマップセット名を変更する "
 #~ msgid "Warning: "
 #~ msgstr "警告"
 
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "GRASSのロケーションとマップセットを選択"
-
 #~ msgid "Starting GRASS for the first time"
 #~ msgstr "GRASSの初回実行"
 
+#, fuzzy
+#~ msgid "Develop 3D rasters"
+#~ msgstr "ラスターマップの作成"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "レイヤーツリーにレイヤーを追加 "
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "レイヤーツリーにインポートレイヤーを追加 "
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "旧GRASSフォーマットベクトルマップインポート "
+
 #~ msgid "Vector to volume"
 #~ msgstr "ベクトル → ボリューム "
 
+#~ msgid "Sites to vector"
+#~ msgstr "サイト → ベクトル "
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "3Dラスターマップカリキュレータ"
@@ -19150,11 +19840,8 @@ msgstr "選択したマップセット名を変更する "
 #~ msgid "Voxel statistics"
 #~ msgstr "3Dグリッド統計"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "旧GRASSフォーマットベクトルマップインポート "
-
-#~ msgid "Sites to vector"
-#~ msgstr "サイト → ベクトル "
+#~ msgid "Volume"
+#~ msgstr "ボリューム"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -19190,6 +19877,5 @@ msgstr "選択したマップセット名を変更する "
 #~ "registered raster3d map of a space time raster3d dataset."
 #~ msgstr "3Dラスターマップの非-NULLセルから単変量統計解析を行う"
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "属性テーブルマネージャー"
+#~ msgid "Digitize"
+#~ msgstr "デジタイズ"
diff --git a/locale/po/grasswxpy_ko.po b/locale/po/grasswxpy_ko.po
index 021034a..11977df 100644
--- a/locale/po/grasswxpy_ko.po
+++ b/locale/po/grasswxpy_ko.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_ko\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2014-05-03 16:44-0400\n"
 "Last-Translator: Huidae Cho <grass4u at gmail.com>\n"
 "Language-Team: Korean <grass-translations at lists.osgeo.org>\n"
@@ -17,200 +17,200 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr ""
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr ""
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr ""
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr ""
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr ""
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -218,12 +218,12 @@ msgid ""
 "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -231,7 +231,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -239,7 +239,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -247,7 +247,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -255,14 +255,14 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -271,11 +271,11 @@ msgid ""
 "ALL MAPS included in this mapset will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -283,40 +283,40 @@ msgid ""
 "ALL MAPS included in this location will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -325,16 +325,16 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -346,11 +346,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -358,7 +358,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -366,18 +366,18 @@ msgid ""
 "Details: %(reason)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -395,171 +395,171 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 msgid "Display synchronization ON"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 msgid "Unable to open temporary vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 msgid "Scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -568,594 +568,595 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, python-format
 msgid "Group <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, python-format
 msgid "Subgroup <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, python-format
 msgid "Loading training map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 msgid "Name of imagery subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 msgid "Remove selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 msgid "Export training areas to vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 msgid "Import training areas from vector map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 msgid "Select raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 msgid "Name of top/left raster map:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 msgid "Name of bottom/right raster map:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 msgid "Map Swipe settings"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 msgid "Choose view mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 msgid "Switch orientation"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1164,28 +1165,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1195,260 +1196,260 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 msgid "GRASS GIS Vector Digitizer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, python-format
 msgid "Vector digitizer not available. %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1456,360 +1457,360 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1817,78 +1818,78 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1896,244 +1897,244 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 msgid "Edit selected line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 msgid "Remove selected vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 msgid "Select background vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2142,363 +2143,702 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+msgid "Hide toolbars"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+msgid "Show toolbars"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+msgid "Show statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, python-brace-format
 msgid "Hide {overlay}"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 msgid "Resize legend"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 msgid "Set compulational region from named region"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 msgid "Save computational region to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:314
+msgid "GRASS locations in {}"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+msgid "New name"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:599
+msgid "Rename map"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, python-brace-format
+msgid "Editing {name}"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:652
+msgid "No map selected for copying."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:659
+msgid "Copy map"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:670
+msgid "Failed to copy map: new map has the same name"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, python-brace-format
+msgid "Copying <{name}>..."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid ""
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:765
+msgid "Delete map"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, python-brace-format
+msgid "Deleting {name}..."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:782
+msgid "g.remove completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, python-brace-format
+msgid "Displaying {name}..."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:835
+msgid "Maps can be copied only to current mapset"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+msgid "&Paste"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+msgid "&Display layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+msgid "&Switch mapset"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+msgid "GRASS GIS Data Catalog"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+msgid "Close GRASS GIS Data Catalog"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
+#, python-format
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
+msgid "Data catalog"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+msgid "Reload GRASS locations"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+msgid "Please select first the raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+msgid "Do you want to save changes?"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:304
+msgid "Save raster map changes"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:378
+msgid "Failed to create backup copy of edited raster map."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:397
+msgid "Failed to create new raster map."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+msgid "Rasterizing..."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:556
+msgid "Failed to set default color table for edited raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+msgid "Create new raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+msgid "Name for new raster map:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+msgid "Optionally select background raster map:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+msgid "New raster map type:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+msgid "Please specify name for a new raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+msgid "Digitize area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+msgid "Digitize line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+msgid "Digitize point"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+msgid "Save raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+msgid "Quit raster digitizer"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+msgid "Select raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+msgid "Cell value:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+msgid "New raster map"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:65
 msgid "GRASS GIS Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:128
+#: ../gui/wxpython/gmodeler/frame.py:146
 msgid "Model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:129
+#: ../gui/wxpython/gmodeler/frame.py:149
 msgid "Items"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
 msgid "Variables"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:131
+#: ../gui/wxpython/gmodeler/frame.py:157
 msgid "Python editor"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
 msgid "Command output"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:201
+#: ../gui/wxpython/gmodeler/frame.py:243
 msgid "Python script contains local modifications"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
 msgid "Python script is up-to-date"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:220
+#: ../gui/wxpython/gmodeler/frame.py:262
 msgid "Redrawing model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/gmodeler/frame.py:298
 msgid "Do you want to save changes in the model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/gmodeler/frame.py:300
 msgid "Do you want to store current model settings to model file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:264
+#: ../gui/wxpython/gmodeler/frame.py:306
 msgid "Quit Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/gmodeler/frame.py:360
 msgid "No intermediate data to delete."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:322
+#: ../gui/wxpython/gmodeler/frame.py:366
 #, python-format
 msgid "Do you want to permanently delete data?%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:323
+#: ../gui/wxpython/gmodeler/frame.py:368
 msgid "Delete intermediate data?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:340
+#: ../gui/wxpython/gmodeler/frame.py:385
 #, python-format
 msgid "%d maps deleted from current mapset"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
 msgid ""
 "Current model is not empty. Do you want to store current settings to model "
 "file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
 msgid "Create new model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/gmodeler/frame.py:443
 msgid "Choose model file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
 msgid "GRASS Model File (*.gxm)|*.gxm"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
+#: ../gui/wxpython/gmodeler/frame.py:466
 #, python-format
 msgid "%(items)d items (%(actions)d actions) loaded into model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
 #, python-format
 msgid "Model file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
 msgid "Save model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
 #, python-format
 msgid "File <%s> saved"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/gmodeler/frame.py:503
 msgid "Choose file to save current model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:533
+#: ../gui/wxpython/gmodeler/frame.py:604
 msgid "Model is empty. Nothing to validate."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
 msgid "Validating model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/gmodeler/frame.py:614
 #, python-format
 msgid ""
 "Model is not valid.\n"
@@ -2506,33 +2846,33 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:546
+#: ../gui/wxpython/gmodeler/frame.py:618
 msgid "Model is valid."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
 #, python-format
 msgid "Model exported to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
 msgid "Comment:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
 msgid "Add comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2541,379 +2881,377 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 msgid "Parameterized"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 msgid "No items to selected."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr ""
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 msgid "Table:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -2921,93 +3259,93 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3015,246 +3353,246 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3262,1302 +3600,1287 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 msgid "Vector labels"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 msgid "Add overlays"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 msgid "Reload currently selected attribute data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4565,72 +4888,72 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4639,220 +4962,220 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4860,7 +5183,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4869,63 +5192,63 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -4933,163 +5256,163 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 msgid "Field statistics"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 msgid "Unable to calculte statistics."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 msgid "Unable to calculte standard deviation."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5098,752 +5421,753 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 msgid "No animation name selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 msgid "No workspace file selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, python-format
 msgid "Space time dataset <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
 "Invalid file, unable to parse XML document."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 msgid "Please add only one layer in the list."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 msgid "No map series nor space-time dataset is added."
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 msgid "Rendering map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 msgid "Overlaying map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, python-brace-format
 msgid "Directory {t} not removed."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 msgid "Frame duration:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 msgid "Duration of time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 msgid "Add new animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 msgid "Edit animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 msgid "Window position:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 msgid "3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 msgid "Start region:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 msgid "End region:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 msgid "Zoom value:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 msgid "No map series or space-time dataset added."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 msgid "List of animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 msgid "Add time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 msgid "Choose image file"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 msgid "Choose file to save animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 msgid "Export directory is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 msgid "Add space-time dataset layer"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 msgid "Multiple raster maps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 msgid "Multiple vector maps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 msgid "Multiple 3D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 msgid "Space time raster dataset"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 msgid "Space time vector dataset"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 msgid "Space time 3D raster dataset"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 msgid "Input data type:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 msgid "Select raster/vector maps."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 msgid "Animation Tool settings"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 msgid "Text foreground color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 msgid "Text background color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 msgid "Absolute time format:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 msgid "Change animation speed"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 msgid "Invalid value inserted. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 msgid "Unable to perform analysis."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -5851,45 +6175,45 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 msgid "Map can be created only in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 msgid "Overwrite vector map"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -5897,548 +6221,549 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 msgid "Unable to use ctypes. \n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, python-format
 msgid "Vector map '%s' does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 msgid "Vector map was not chosen."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 msgid "arc layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 msgid "node layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 msgid "turntable layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 msgid "Node cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 msgid "Overwrite map layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 msgid "Point list toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 msgid "Iso lines:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 msgid "Add vector map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 msgid "Input tables"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 msgid "Result tables"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 msgid "Creating turntable..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 msgid "Input vector map does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 msgid "Other settings"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 msgid "Point style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, python-format
 msgid "Color table style %s:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 msgid "Point size:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 msgid "New vector map with turntable"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 msgid "Delete selected point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6448,348 +6773,370 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 msgid "Set computational region extent interactively"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 msgid "Set computational region from named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+msgid "Raster Digitizer Toolbar"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 msgid "Map display test"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, python-format
+msgid "Unable to create file <%s>"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr ""
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
+msgid "Select vector feature(s)"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+msgid "Select features interactively from vector map"
+msgstr ""
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
 msgid "Show/hide scale bar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+msgid "Raster digitizer"
+msgstr ""
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 msgid "Modify the configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 msgid "View and edit a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 msgid "Remove new r.li configuration file?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr ""
 
@@ -6797,294 +7144,294 @@ msgstr ""
 msgid "Create new configuration file for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 msgid "Create new r.li configuration file?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 msgid "Name for new configuration file to create"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 msgid "Vector map layer to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 msgid "Whole map layer"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 msgid "Keyboard setting"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 msgid "Insert sampling frame parameter"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 msgid "Insert sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 msgid "Choose a method"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 msgid "Number of regions to draw:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 msgid "Do you want to check vector areas?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 msgid "Select if use area by area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 msgid "Analysing vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 msgid "Draw sampling regions"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 msgid "Draw sample region "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 msgid "Select type of shape"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 msgid "Width size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 msgid "Name of the circle mask"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 msgid "Insert number of row strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 msgid "Set sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 msgid "Draw sampling units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 msgid "Number of sampling area to draw:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 msgid "Select sample area "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7092,171 +7439,182 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 msgid "Select sample area 1 of "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 msgid "Name circle mask:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 msgid "Width size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 msgid "Height size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 msgid "Number row strates:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 msgid "Number column strates:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+msgid "Simple &editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+msgid "Console"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+msgid "Python"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7264,232 +7622,220 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 msgid "Usage: cd [directory]"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+msgid "GRASS SVN revision"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7497,34 +7843,34 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 msgid "Unable to start Timeline Tool."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 msgid "Unable to start Temporal Plot Tool."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7532,54 +7878,52 @@ msgid ""
 "from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr ""
 
@@ -7593,12 +7937,14 @@ msgid "Set raster output format"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr ""
 
@@ -7619,7 +7965,7 @@ msgstr ""
 msgid "Add command layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr ""
@@ -7669,8 +8015,8 @@ msgid "Add rhumbline layer"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr ""
 
@@ -7690,282 +8036,273 @@ msgstr ""
 msgid "Background vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 msgid "Create pack"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+msgid "Set color table interactively"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 msgid "Report raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -7973,592 +8310,599 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 msgid "At least 2 raster maps must be specified"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 msgid "Histogram of selected raster maps"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 msgid "Raster temporal dataset (strds)"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 msgid "Select attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 msgid "Select category of vector(s)"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+msgid "Invalid input coordinates"
+msgstr ""
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, python-format
 msgid "Temporal resolution: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-msgid "Invalid input coordinates"
+#: ../gui/wxpython/tplot/frame.py:724
+msgid "Seed point outside the current region"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 msgid "Invalid input raster dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 msgid "Invalid input vector dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 msgid "Invalid input temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, python-format
 msgid "Space time raster dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, python-format
 msgid "Space time vector dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr ""
 
@@ -8566,8 +8910,8 @@ msgstr ""
 msgid "Workspace"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr ""
 
@@ -8575,7 +8919,7 @@ msgstr ""
 msgid "Create new workspace"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr ""
 
@@ -8583,12 +8927,12 @@ msgstr ""
 msgid "Load workspace from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr ""
 
@@ -8609,7 +8953,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr ""
 
@@ -8638,7 +8982,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr ""
 
@@ -9272,23 +9616,23 @@ msgstr ""
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -9326,15 +9670,15 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr ""
 
@@ -9346,7 +9690,7 @@ msgstr ""
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 msgid "Close GUI"
 msgstr ""
 
@@ -9354,8 +9698,8 @@ msgstr ""
 msgid "Quit wxGUI session."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 msgid "Quit GRASS GIS"
 msgstr ""
 
@@ -9363,7 +9707,7 @@ msgstr ""
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr ""
 
@@ -9526,7 +9870,7 @@ msgstr ""
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr ""
 
@@ -10531,7 +10875,7 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr ""
 
@@ -10773,8 +11117,8 @@ msgid "Develop vector map"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr ""
 
@@ -11616,12 +11960,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -12608,23 +12952,27 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 msgid "Timeline tool"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 msgid "Temporal plot tool"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 msgid "Plot temporal values."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr ""
 
@@ -12649,7 +12997,7 @@ msgid "Prints system information"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr ""
 
@@ -12661,266 +13009,274 @@ msgstr ""
 msgid "Attribute table manager"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 msgid "Add or edit map frame"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -12928,12 +13284,12 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -12941,288 +13297,316 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+msgid "category"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+msgid "Select features"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+msgid "Create a new map"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+msgid "No features selected"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, python-format
+msgid "Vector map <%s> was created"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 msgid "Run selected module from the tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 msgid "Revert settings to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -13234,78 +13618,87 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 msgid "Lat/long projections"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+msgid "Unable to read EPGS codes: {}"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 msgid "Select default output font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+msgid "Example"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -13314,253 +13707,335 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+msgid "Profiles"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+msgid "Load:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+msgid "Open file"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+msgid "Set parameters for the script"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+msgid "Run (Ctrl+R)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+msgid "GRASS GIS Simple Python Editor"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 msgid "Load and edit content of a file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -13568,44 +14043,44 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr ""
 
@@ -13613,532 +14088,426 @@ msgstr ""
 msgid "Location or mapset is not defined."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 msgid "No raster maps selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-msgid "Add linked layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-msgid "Unable to determine number of raster bands"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-msgid "No layers selected."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 msgid "Citation"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 msgid "Remove selected map(s) from list"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 msgid "Layer up"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 msgid "Move selected layer(s) up"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 msgid "Layer down"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 msgid "Move selected layer(s) down"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 msgid "Edit layer properties"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 msgid "Change opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr ""
 
@@ -14234,974 +14603,998 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 msgid "Select graphics tool"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+msgid "Source input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 msgid "simple features"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+msgid "Input vector map is not selected"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 msgid "GRASS GIS Timeline Tool"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 msgid "Select space time dataset(s):"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, python-format
 msgid "End time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 msgid " Requested data settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 msgid "Request"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 msgid "List of layers "
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 msgid "Source projection:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 msgid "Advanced request settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 msgid "Reprojection method:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 msgid "Linear interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 msgid "Cubic interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 msgid "Source image format"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 msgid "Select source projection.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:1088
-msgid "Add default servers"
+#: ../gui/wxpython/web_services/widgets.py:1154
+msgid "Add default"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 msgid "Show advanced connection settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 msgid "Hide advanced connection settings"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 msgid "Output layer name:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, python-format
 msgid "Unable to connect to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 msgid "Name for output raster map:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 msgid "Export region"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 msgid "Named region"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 msgid "Extent and resolution are based on named region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 msgid "Overwrite existing raster map"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 msgid "Choose named region:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 msgid "Save web service layer as raster map"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, python-format
 msgid "Region <%s> does not exist."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 msgid "Downloading data..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 msgid "Unable to fetch data.\n"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 msgid "&Set"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 msgid "Load color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, python-format
+msgid "%d extensions loaded"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, python-format
 msgid "Unable to load extensions. %s"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 msgid "Manage installed GRASS Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 msgid "Uninstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 msgid "Uninstall selected Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 msgid "Reinstall selected Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 msgid "No extension selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -15210,245 +15603,375 @@ msgid ""
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 msgid "Extension"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:145
+msgid "Import settings"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+msgid "Add linked layers into layer tree"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:431
+msgid "Unable to determine number of raster bands"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:758
+msgid "No layers selected."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:836
+msgid "Reprojection"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:848
+msgid "Name for output GRASS map"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+msgid "Layers to be reprojected"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+msgid "Reproject selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -15456,20 +15979,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -15478,182 +16001,175 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, python-format
+msgid "Rendering failed: %s"
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:602
+msgid "Rendering aborted"
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:643
+msgid "Rendering & "
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1386
-msgid "Rendering & "
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr ""
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 msgid "Unable to create toolboxes directory."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+msgid "failed to open '{}'"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -15662,172 +16178,177 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, python-format
+msgid "Module <%s> not found."
+msgstr ""
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 msgid "Data point"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 msgid "List left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -15835,11 +16356,11 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -15847,268 +16368,292 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+msgid "Simple methods:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+msgid "Advanced methods:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+msgid "Choose IAU Code"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+msgid "IAU code:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+msgid "Choose IAU codes file"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+msgid "Unable to read IAU codes: {}"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -16116,246 +16661,250 @@ msgid ""
 "Details: %(err)s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+msgid "IAU code missing."
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -16363,748 +16912,748 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 msgid "3D view default settings"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 msgid "No data set."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -17114,7 +17663,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -17126,22 +17675,22 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 msgid "Scatter plot cannot be added.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -17149,7 +17698,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -17160,31 +17709,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -17195,60 +17744,60 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 msgid "scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 msgid "Set color"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 msgid "Move category up"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 msgid "Export class raster"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -17258,185 +17807,185 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 msgid "Add scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 msgid "No scatter plots selected."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 msgid "Selection polygon color:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 msgid "Selected area color:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 msgid "Selected area opacity:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 msgid "Selection style:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 msgid "Ellipses settings:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 msgid "Add scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 msgid "Create selection polygon"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 msgid "Move boundary vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 msgid "Remove boundary vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 msgid "Add class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 msgid "Remove selected class"
 msgstr ""
diff --git a/locale/po/grasswxpy_lv.po b/locale/po/grasswxpy_lv.po
index 45ae5b5..4ee5ff3 100644
--- a/locale/po/grasswxpy_lv.po
+++ b/locale/po/grasswxpy_lv.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_lv\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-01-24 11:27+0200\n"
 "Last-Translator: Maris Nartiss <maris.kde at gmail.com>\n"
 "Language-Team: Latvian <grass-translations at lists.osgeo.org>\n"
@@ -20,23 +20,23 @@ msgstr ""
 "Plural-Forms:  nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n != 0 ? 1 : "
 "2);\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Izvēlieties GRASS GIS datubāzes mapi"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Izvēlieties GRASS novietojumu"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Izvēlieties GRASS karšu kopu"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "GRASS GIS datubāze satur novietojumus"
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -44,7 +44,7 @@ msgstr ""
 "Visi dati vienā novietojumā ir vienā koordinātu sistēmā (projekcijā). Viens "
 "novietojums var būt viens projekts. Novietojums satur ir karšu kopas."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
@@ -52,29 +52,29 @@ msgstr ""
 "Karšu kopa satur ĢIS datus, kas ir saistīti ar vienu projektu vai ar vienu "
 "projekta uzdevumu, apakšreģionu vai lietotāju."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Sākt &GRASS sesiju"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Pārlūkot"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "&Jauna"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "Izveidot jaunu karšu kopu izvēlētajā novietojumā"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "Ja&uns"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
@@ -83,145 +83,145 @@ msgstr ""
 "darba sesiju."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Pārs&aukt"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Pārsaukt izvēlēto novietojumu"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "&Dzēs&t"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Dzēst izvēlēto novietojumu"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Pārsaukt"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Pārsaukt izvēlēto karšu kopu"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "&Dzēst"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Dzēst izvēlēto karšu kopu"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS %s palaišana %s"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Sākt GRASS sesiju"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Kļūda"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 "Nav iespējams iestatīt GRASS datubāzi. Pārbaudiet lokāles iestatījumus."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "KĻŪDA: Novietojums <%s> nav atrasts\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "KĻŪDA: Karšu kopa <%s> nav atrasta\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Nederīga rinda GISRC failā (%s): %s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Kļūda: {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, fuzzy, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 "Nav iespējams iestatīt GRASS datubāzi. Pārbaudiet lokāles iestatījumus."
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "Importēt datus?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Izveidot jaunu karšu kopu"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Novietojums <%s> ir izveidots"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -232,12 +232,12 @@ msgstr ""
 "\n"
 "Jaunais nosaukums:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Paziņojums"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -245,7 +245,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -253,7 +253,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -261,7 +261,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -269,14 +269,14 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -285,11 +285,11 @@ msgid ""
 "ALL MAPS included in this mapset will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Nav iespējams dzēst karšu kopu"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -297,42 +297,42 @@ msgid ""
 "ALL MAPS included in this location will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Nav iespējams dzēst novietojumu"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 "Nav iespējams iestatīt GRASS datubāzi. Pārbaudiet lokāles iestatījumus."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Ceļš '%s' neeksistē."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Izvēlieties ĢIS datu mapi"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Karšu kopa <%s> jau eksistē."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -341,16 +341,16 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 msgid "Reserved mapset name"
 msgstr "Rezervēts karšu kopas nosaukums"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -362,11 +362,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -374,7 +374,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -382,18 +382,18 @@ msgid ""
 "Details: %(reason)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Nederīgs nosaukums"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -411,173 +411,173 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Kartes rīkjosla"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 msgid "Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 msgid "Training Areas Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Attēlot reģionu"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 msgid "Display synchronization OFF"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importēt vektrdatu karti"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nav iespējams dzēst karšu kopu"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Jaunās vektoru kartes nosaukums:"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 msgid "Failed to create temporary vector map."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Fails jau eksistē"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 msgid "No imagery group selected. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Histogrammas"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 msgid "Scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -586,608 +586,609 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Karte <%s> nav atrasta."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Karte <%s> nav atrasta."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "<%s> rastra kartes leģenda"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Datu ielāde..."
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Rastra kartes nosaukums:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Karšu kopas nosaukums:"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Rastra kartes nosaukums:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Vektordatu kartes nosaukums:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "Klases"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr "Klašu nosaukumi"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr "Eksportēt atribūtu tabulu"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Pārsaukt izvēlēto karšu kopu"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Priekšskatījums"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS kartes ekrāns: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr "Galvenā rīkjosla"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Dažādu rīku rīkjosla"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Karte <%s> nav atrasta."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Karte <%s> nav atrasta."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "3D rastra kartes"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Rastra kartes nosaukums:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Rastra kartes nosaukums:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Aizvērt"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Kartes iestatījumi"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Krāsa:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Līnijas platums:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Rīki"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 #, fuzzy
 msgid "Quit Map Swipe"
 msgstr "Kartes skats"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Vaicājums rastra/vektoru kartei"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Ekrāna režīms"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 msgid "Choose view mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Orientācija"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Kartes skats"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Drukas priekšskatījums"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Derīgs diapazons:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "rastrs"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vektors"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 msgid "Select target raster map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 msgid "Select target vector map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1196,28 +1197,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1227,260 +1228,260 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "izmantot"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Aizvērt dialogu"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Simboloģija"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Simbola izmērs:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 msgid "GRASS GIS Vector Digitizer"
 msgstr "GRASS GIS vektoru digitizētājs"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "GRASS GIS slāņu pārvaldnieks"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1488,360 +1489,360 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Nav topoloģijas"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Ignorēt izmaiņas un aizvērt dialogu"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Vispārēji"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Rādīt"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Līnijas platums"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Pielipšana"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Pielipšanas attālums"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "ekrāna pikseļos"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "kartes vienībās"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr "Digitizēt līnijas/robežas"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr "Digitizēt poligonus"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Saglabāt izmaiņas"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Saglabāt izmaiņas izejot"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Vaicājumu rīks"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "garums"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Izvēlēties līnijas"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "īsāks par"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "garāks par"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atribūti"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Digitizēt jaunu objektu"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Slānis"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Kategorija"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Režīms"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Lietot kā nākamo"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Kategorijas numurs"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Kategoriju režīms"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Manuāla ievade"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Nav kategorijas"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Ģeometrijas atribūti"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "laukums"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "perimetrs"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Digitizēt jaunu līnijas segmentu"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Digitizēt jaunu līniju/robežu"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Izgaismot"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Punkts"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Līnija"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Robeža (bez poligona)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Robeža (divi poligoni)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroīds (ārpus poligona)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Mezgls (viena līnija)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Mezgls (divas līnijas)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Virsotne"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Poligons (noslēgta robeža + centroīds)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Virziens"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Digitizēšanas kļūda"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Nav iespējams atvērt vektordatu karti <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Darbība ir atcelta."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1849,78 +1850,78 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Nebija iespējams nolasīt objektu id %d. Darbība ir atcelta."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Nebija iespējams izpildīt SQL izteikumu '%s'. Darbība ir atcelta."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Neatbalstīts datu tips %d. Darbība atcelta."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Pievienot jaunu kategoriju"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Pielietot izmaiņas"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignorēt izmaiņas un aizvērt dialogu"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Pielietot izmaiņas un aizvērt dialogu"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Objekta id:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1928,249 +1929,249 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Dzēst izvēlēto"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Dzēst visu"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Pārlādēt"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Iestatīt vērtību"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Sākotnējā vērtība"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Solis"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Objekta ID"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Digitizēt jaunu punktu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Kreisais: jauns punkts"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Digitizēt jaunu līniju"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Digitizēt jaunu robežu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Digitizēt jaunu centroīdu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Digitizēt jaunu robežu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 msgid "Delete selected area(s)"
 msgstr "Dzēst izvēlētos poligonus"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Attēlot/atjaunināt atribūtus"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Kreisais: izvēlēties"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Attēlot/atjaunināt kategorijas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Rediģēt līniju/robežu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr "Pārvietot izvēlēto virsotni"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Dzēst virsotni"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Iziet no digitizētāja"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "GRASS GIS slāņu pārvaldnieks"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Atdarīt"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr "Pārdarīt"
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Kopēt kategorijas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Kopēt atribūtus"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Izveidot jaunu vektordatu karti"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Izvēlieties vektordatu karti"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2179,789 +2180,1163 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr "Digitizētāja kļūda"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr "Vektoru digitizēšana"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Saglabāt izmaiņas?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Jauna vektoru karte"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr "Īpašība %s neeksistē"
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Attāluma mērīšana"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Attāluma mērīšana"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 #, fuzzy
 msgid "Measuring distance:"
 msgstr "Attāluma mērīšana"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segments"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "kopējais garums"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Attāluma mērīšana"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr "leģenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr "mērogjosla"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr "ziemeļu bulta"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr "Kopēt koordinātas uz starpliktuvi"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Analīze"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "Kopēt koordinātas uz starpliktuvi"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+#, fuzzy
+msgid "Hide statusbar"
+msgstr "Rādīt iestatījumus"
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Rādīt iestatījumus"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, python-brace-format
 msgid "Hide {overlay}"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Rastra leģenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Brīdinājums"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Rādīt teksta objektu"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr "Teksts:"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Fonts:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Iestatīt fontu"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
-msgstr "GRASS GIS grafiskais modelētājs"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "Modelis"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Vienumi"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+"Pašreizējā karšu kopā rastra karte <%s> jau eksistē. Vai vēlies to "
+"pārrakstīt?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "Mainīgie"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Pārrakstīt?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr "Python redaktors"
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "GRASS novietojuma nosaukums:"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Komandas izvade"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr "Python skripts satur lokālas izmaiņas"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+msgid "New name"
+msgstr "Jauns nosaukums"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+msgid "Rename map"
+msgstr "Pārsaukt karti"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
-msgstr "Pārzīmē modeli..."
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, python-brace-format
+msgid "Editing {name}"
+msgstr "Rediģē {name}"
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "Vai vēlaties saglabāt modeļa izmaiņas?"
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Pārsauc {name}..."
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, fuzzy, python-brace-format
+msgid "{cmd} -- completed"
+msgstr "-- pabeigts"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Iziet no grafiskā modelētāja"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Kategorijas numurs"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
-msgid "No intermediate data to delete."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:659
+msgid "Copy map"
+msgstr "Kopēt karti"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Nebija iespējams izveidot jaunu rastra karti."
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
 msgstr ""
+"Pašreizējā karšu kopā rastra karte <%s> jau eksistē. Vai vēlies to "
+"pārrakstīt?"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Kopē {name}..."
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+#, fuzzy
+msgid "g.copy completed"
+msgstr "-- pabeigts"
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "Veidot jaunu modeli?"
+#: ../gui/wxpython/datacatalog/tree.py:765
+msgid "Delete map"
+msgstr "Dzēst karti"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Dzēš {name}..."
+
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "-- pabeigts"
+
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Attēlo {name}..."
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:835
+msgid "Maps can be copied only to current mapset"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "Saglabāt modeli"
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
+msgstr "&Kopēt"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+msgid "&Paste"
+msgstr "&Ielīmēt"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:936
+msgid "&Display layer"
+msgstr "&Attēlot slāni"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "karšu kopa"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Validē modeli..."
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3D rastra kalkulators"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS GIS 3D rastra kalkulators"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr "Modelis nav korekts. %s"
-
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "Modelis ir korekts."
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Model exported to <%s>"
+msgid "Current mapset is <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
-msgid "Comment:"
-msgstr "Komentārs:"
+#: ../gui/wxpython/datacatalog/catalog.py:33
+msgid "Data catalog"
+msgstr "Datu katalogs"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
-msgid "Add comment"
-msgstr "Pievienot komentāru"
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "GRASS novietojuma nosaukums:"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
-msgstr "wxGUI grafiskais modelētājs"
-
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, python-format
-msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:887
-msgid "Please wait, loading model..."
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:953
-msgid "Writing current settings to model file failed."
-msgstr ""
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Meklēt moduli"
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
-#, python-format
-msgid "Unable to open file <%s> for writing."
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
-#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
-msgid "Remove"
-msgstr "Noņemt"
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "3D rastra kartes"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
-msgid "Disable"
-msgstr "Atslēgt"
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr "Labais klikšķis, lai pabeigtu poligonu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
-msgid "Enable"
-msgstr "Ieslēgt"
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr "Labais klikšķis, lai pabeigtu līniju"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
-msgid "Set label"
-msgstr "Iestatīt birku"
+#: ../gui/wxpython/rdigit/controller.py:303
+msgid "Do you want to save changes?"
+msgstr "Vai vēlies saglabāt izmaiņas?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
-msgid "Set comment"
-msgstr "Iestatīt komentāru"
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Saglabāt izmaiņas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
-msgid "Add control point"
-msgstr ""
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Nebija iespējams izveidot jaunu rastra karti."
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
-msgid "Remove control point"
-msgstr ""
+#: ../gui/wxpython/rdigit/controller.py:397
+msgid "Failed to create new raster map."
+msgstr "Nebija iespējams izveidot jaunu rastra karti."
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
-msgid "Intermediate"
-msgstr ""
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Zīmēt"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Nebija iespējams izveidot jaunu rastra karti."
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Izveidot jaunu vektordatu karti"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Rastra kartes nosaukums:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Izveidot jaunu vektordatu karti"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Rastra kartes nosaukums:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Jaunveidojamās rastra kartes nosaukums"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"Pašreizējā karšu kopā rastra karte <%s> jau eksistē. Vai vēlies to "
+"pārrakstīt?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitizēt jaunu līniju"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Digitizēt jaunu līniju"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Digitizēt jaunu punktu"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Sapakot rastra karti"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Iziet no modelētāja"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "3D rastra kartes"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+msgid "Cell value:"
+msgstr "Šūnu vērtība:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Platums:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "3D rastra karte"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr "GRASS GIS grafiskais modelētājs"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "Modelis"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Vienumi"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "Mainīgie"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr "Python redaktors"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Komandas izvade"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr "Python skripts satur lokālas izmaiņas"
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "Pārzīmē modeli..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "Vai vēlaties saglabāt modeļa izmaiņas?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Iziet no grafiskā modelētāja"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+msgid "No intermediate data to delete."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "Veidot jaunu modeli?"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "Saglabāt modeli"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Validē modeli..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr "Modelis nav korekts. %s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "Modelis ir korekts."
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+msgid "Comment:"
+msgstr "Komentārs:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+msgid "Add comment"
+msgstr "Pievienot komentāru"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr "wxGUI grafiskais modelētājs"
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
+msgid "Please wait, loading model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1073
+msgid "Writing current settings to model file failed."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
+#, python-format
+msgid "Unable to open file <%s> for writing."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
+#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
+msgid "Remove"
+msgstr "Noņemt"
+
+#: ../gui/wxpython/gmodeler/frame.py:1448
+msgid "Disable"
+msgstr "Atslēgt"
+
+#: ../gui/wxpython/gmodeler/frame.py:1454
+msgid "Enable"
+msgstr "Ieslēgt"
+
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
+msgid "Set label"
+msgstr "Iestatīt birku"
+
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
+msgid "Set comment"
+msgstr "Iestatīt komentāru"
+
+#: ../gui/wxpython/gmodeler/frame.py:1478
+msgid "Add control point"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1485
+msgid "Remove control point"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1497
+msgid "Intermediate"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Īpašības"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Birka"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Nosaukums"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Datu tips"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Noklusējuma vērtība"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Apraksts"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "vesels skaitlis"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "daļskaitlis"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "teksts"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "reģions"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "karšu kopa"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "fails"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Birka"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "cilpa"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parametri"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Komanda"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Tuvināt līdz izvēlētajām kartēm"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Darbināt"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Atjaunināt"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Modelētāja iestatījumi"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Vienuma īpašības"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Atslēgts:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Derīgs:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Nederīgs:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Darbojas:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Platums:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Augstums:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Dati"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tips"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Rastrs:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "3D rastrs:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Vektori:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabula"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Cilpa"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr "Komentārs"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Modeļa īpašības"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadati"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Komandas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Nosaukums:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Apraksts:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autors:"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -2969,93 +3344,93 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Rastra kartes"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "3D rastra kartes"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "nezināms"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<nav definēts>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Nosacījums: "
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Nosacījums: nav definēts"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Datu īpašības"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Elementa nosaukums:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3063,111 +3438,111 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "No"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Uz"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Dati: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Komanda:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Dzēst mainīgos"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Nē"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Jā"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3176,135 +3551,135 @@ msgstr ""
 "Nevar atvērt failu\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3312,1312 +3687,1294 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Birka"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "metrs"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Mērvienības:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Fonta izmērs:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Izvēlieties krāsu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Pielietot izmaiņas un aizvērt dialogu"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Mērvienības"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Formāts"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientācija"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Platums"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Augstums"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Pa kreisi"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Pa labi"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Augšā"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Lejā"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Nederīga ievade"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Lapas izmērs"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Malas"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Portrets"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Ainava"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "pielāgots"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Kartes iestatījumi"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Kartes rāmja iestatījumi"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Kartes izvēle"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Karte:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Reģions:"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Kartes mērogs un centrs"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Centrs:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Mērogs:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Rāmis"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "zīmēt rāmi apkārt kartes skatam"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "rāmja krāsa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "rāmja platums (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Pievienot"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "Pārsaukt kartes skatu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Dzēst"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "Īpašības..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Pārlūkot"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Līnijas stils"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Rastra leģenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Rādīt rastra leģendu"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Leģendas tips"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "diapazons"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Vektoru leģenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Vektoru karte"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Rediģēt birku"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "zīmēt rāmi apkārt leģendai"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 #, fuzzy
 msgid "Size and position"
 msgstr "Novietojums un izmērs"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Novietojums"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Kolonas:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Fontu iestatījumi"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "lietot rāmja krāsu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
+#: ../gui/wxpython/psmap/dialogs.py:4842
+msgid "Length:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
+#: ../gui/wxpython/psmap/dialogs.py:4848
+msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3470
-msgid "Length:"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3474
-msgid "Scalebar length is given in map units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Teksts"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "3D skata īpašības"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "teksta rāmis"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Teksta rotēšana"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Attēls"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Kategorijas numurs"
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Ziemeļu bulta"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Ziemeļu bultas iestatījumi"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "caurspīdīgs"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "Vektoru karte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "Kartes informācija"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Leģenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Mērogjosla"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Taisnstūris"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Pievienot slāni"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Pievienot uzrakstus"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS GIS atribūtu tabulas pārvaldnieks - "
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr "TIKAI LASĀMS - "
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Uzgaidiet, kamēr notiek atribūtu datu ielāde..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Pārlūkot datus"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Pārvaldīt tabulas"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Pārvaldīt slāņus"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Aizvērt atribūtu tabulas pārvaldnieku"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Izveidot atribūtu tabulu"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, fuzzy, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-"SQL izteiksme ir nederīga.\n"
-"\n"
-"%s"
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Datubāzes savienojums"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Vaicājums"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Aizvērt atribūtu tabulas pārvaldnieku"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Aizvērt dialogu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Kolonas"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Vērtības"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Saņemt visas vērtības"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Paņemt paraugu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr "Iet uz:"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Aizvērt dialogu, kad izmaiņas tiek pielietotas"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Paraugs: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Pārbaudīt"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "SQL izteikums nav derīgs"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4628,73 +4985,73 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "SQL izteiksme ir derīga"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr "Funkcijas"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr "SQL izteikums netika pielietots"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "SQL izteiksme ir derīga"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Datu ielāde..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Nezināma vērtība"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4703,221 +5060,221 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Kārtot augoši"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Kārtot dilstoši"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr "Lauka kalkulators"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Statistika"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Pievienot kolonu"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Laukuma platība"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Līnijas garums"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Līnijas azimuts"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabula"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr " (tikai lasīšanai)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "SQL vaicājums"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Vienkārši"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "SQL veidotājs"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "SQL veidotājs"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Izvēlēties visu"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Dzēst ierakstus"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4925,7 +5282,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -4934,63 +5291,63 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Kolona"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Garums"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -4998,167 +5355,167 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Slāņu saraksts"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Kolonas nosaukums"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Datu graums"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Dzinējs"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Datubāze"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Atslēga"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Pievienot slāni"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Slāņa apraksts"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Atslēgas kolona"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Tabulas nosaukums"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "I&zveidot tabulu"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Pievienot slāni"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "Iestatīt &noklusējuma"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Noņemt slāni"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Noņemamais slānis"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "&Noņemt slāni"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modificēt slāni"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modificēt slāni"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Lauka statistika <%s>"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Kopēt koordinātas uz starpliktuvi"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "&Labi"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Nav iespējams dzēst novietojumu"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr "Lauka statistika <%s>"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "GRASS GIS atribūtu tabulas pārvaldnieks"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5169,784 +5526,785 @@ msgstr ""
 "Atribūtu tabula nav atrasta. Vai vēlaties izveidot jaunu atribūtu tabulu un "
 "piesaistīt to vektordatu kartei <%s>?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Izveidot tabulu?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Aizvērt dialogu pēc vērtības ierakstīšanas"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Atribūti nav atrasti"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Atjaunināt atribūtus"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Definēt atribūtus"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Attēlot atribūtus"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "Pā&rlādēt"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "Ap&stiprināt"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Nezināms"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2D skats"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3D skats"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 msgid "No animation name selected."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Aizvērt darbtelpas failu"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr "Fails %s nav atrasts"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr "Animācija %d"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 msgid "GRASS GIS Animation tool"
 msgstr "GRASS GIS animācijas rīks"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr "Animācijas rīkjosla"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr "Datu ielāde"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, python-format
 msgid "Space time dataset <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
 "Invalid file, unable to parse XML document."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 msgid "Please add only one layer in the list."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 msgid "No map series nor space-time dataset is added."
 msgstr ""
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 msgid "Rendering map layers"
 msgstr "Zīmē kartes slāņus"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 msgid "Overlaying map layers"
 msgstr "Pārklāj kartes slāņus"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Mape {t} nav dzēsta."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Vienkārši"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Pārsaukt novietojumu"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 msgid "Duration of time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Animācija"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Animācija"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Paplašināti"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 msgid "top left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Autortiesības"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 msgid "bottom left"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 msgid "bottom right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Novietojums un izmērs"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 msgid "View mode:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Mainīt iestatījumus"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Darbtelpa"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 msgid "Start region:"
 msgstr "Sākuma reģions:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Ielādēt reģionu:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "Tālināt"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 msgid "No map series or space-time dataset added."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Karšu saraksts:"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Animācija"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Dekorācijas"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Eksportēt"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 msgid "Add time stamp"
 msgstr "Pievienot laika zīmogu"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Pievienot attēlu"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Pievienot tekstu"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr "Fonta iestatījumi:"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr "Parauga teksts"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 msgid "Image file:"
 msgstr "Attēla fails:"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 msgid "Choose image file"
 msgstr "Izvēlies attēla failu"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr "Novietojums kā % no ekrāna koordinātēm (X:0 Y:0 ir augšā pa kreisi):"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "image sequence"
 msgstr "attēlu virkne"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "animēts GIF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "WFS"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr "Eksportēt uz:"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Faila prefikss:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr "animacija_"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Faila formāts:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Mape:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 msgid "Choose directory for export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "EPSG fails:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 msgid "Choose file to save animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "WKT fails:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "WKT fails:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 msgid "Additional options:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr "Fails %s nav atrasts."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, python-format
 msgid "Directory %s not found."
 msgstr "Mape %s nav atrasta."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Eksportēt vektrodatus"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Pievienot rastra karti"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "3D rastra kartes"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Jauna vektoru karte"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "3D rastra kartes"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Vektordatu importēšana"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Importēt 3D rastra datus"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Ievades dati"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Asu iestatījumi"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Fona krāsa:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Fona krāsa:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Fona krāsa:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr "Laiks"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 msgid "Absolute time format:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr "Nederīgs"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Mainīt karšu kopu"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Darbība ir atcelta."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 msgid "Edit point"
 msgstr "Rediģēt punktu"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 msgid "Unable to perform analysis."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -5954,46 +6312,46 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 msgid "Map can be created only in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Karšu kopa <%s> jau eksistē."
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Jauna vektoru karte"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6001,574 +6359,575 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Karšu kopa <%s> jau eksistē."
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Nav iespējams dzēst karšu kopu"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Pārrakstīt?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, python-format
 msgid "Vector map '%s' does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 msgid "Vector map was not chosen."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Kartes slāņi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Pievienot slāni"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Pārvaldīt slāņus"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 msgid "unique categories layer"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "tips"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "topoloģija"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Sākuma punkts"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Beigu punkts"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "jauns punkts"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Skaitliska kolona:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "mezgls"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Beigu punkts"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Vektoru punktus"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 msgid "Sink point"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Pievienot rastra karti"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "GRASS GIS vektordatu tīkla analīzes rīks"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 msgid "Point list toolbar"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 msgid "Analysis toolbar"
 msgstr "Analīzes rīkjosla"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 msgid "Analysis settings:"
 msgstr "Analīzes iestatījumi:"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Punkti"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Rindas:"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Izvade"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parametri"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Pievienot izveidoto karti slāņu sarakstam"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Ievades dati"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Krāsu tabulas"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Datu ielāde..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Izveidot tabulu?"
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Īpašība %s neeksistē"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analīze"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Iestatījumi"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Rastra iestatījumi"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Līnijas stils"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Krāsu tabulas"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Pārvaldīt krāsas"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Līnijas krāsa"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Tuvināt līdz izvēlētajām kartēm"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Fonta izmērs:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Līnijas platums"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Līnijas platums (pikseļos):"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Jauna vektoru karte"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 msgid "Insert points from Map Display"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr "Pievienot jaunu punktu"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Dzēst izvēlēto novietojumu"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 msgid "Vector network analysis settings"
 msgstr "Vektordatu tīkla analīzes iestatījumi"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Rādīt pamācību"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Zīmēt"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Ekrāna režīms"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Kartes mērogs"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Iet uz"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Projekcija"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASKA"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Koordinātes"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Apjoms"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - kartes skats"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6578,362 +6937,386 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Startē 3D skata režīmu..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Datu ielāde. Lūdzu uzgaidiet...."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-#, fuzzy
-msgid "Digitize"
-msgstr "Digitizēt jaunu līniju"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, fuzzy, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr "Neizdevās izpildīt vaicājumu vektordatu kartei <%s>."
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Pievienot teksta slāni"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Digitizēt jaunu punktu"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Kartes skats"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr "Neatbalstīta komanda %s."
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, python-format
+msgid "Unable to create file <%s>"
+msgstr "Nebija iespējams izveidot failu <%s>"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr ""
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Ziemeļu bulta"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Ziemeļu bulta"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analizēt karti"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Mērīšana, profilēšana, histogrammu veidošana..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Mērīt attālumu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr "Mērīt platību"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profilēt rastra karti"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Izveidot rastra kartes histogrammu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr "Vektordatu tīkla analīzes rīks"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Rotēt 3D scēnu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+msgid "Raster digitizer"
+msgstr "Rastra digitizēšana"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Attēlot reģionu"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Pārsaukt novietojumu"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Pārsaukt novietojumu"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "Izveidot"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Izveidot jaunu novietojumu?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Pārsaukt"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr "Pārsaukt konfigurācijas failu"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr "Skatīt/rediģēt"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Pārsaukt novietojumu"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Izveidot jaunu novietojumu?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr "Pārsaukt konfigurācijas failu"
 
@@ -6941,314 +7324,314 @@ msgstr "Pārsaukt konfigurācijas failu"
 msgid "Create new configuration file for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Izveidot jaunu novietojumu?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Jaunveidojamās rastra kartes nosaukums"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 msgid "Raster map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 msgid "Vector map to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 msgid "Vector map layer to use to select areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Kartes slāņi"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Vektoru iestatījumi"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Ievietot eksistējošu 3D rastra karti"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 #, fuzzy
 msgid "Row length of sampling frame"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Reģioni"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr "Parauga vienības"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Izvēlieties ĢIS datu mapi"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 msgid "Number of regions to draw:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 msgid "Do you want to check vector areas?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Analīze"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Attēlot reģionu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 msgid "Select type of shape"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Platums:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 #, fuzzy
 msgid "What radius size (in meters)?"
 msgstr "Platums:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 #, fuzzy
 msgid "Height size (in cells)?"
 msgstr "Platums:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Rastra kartes nosaukums:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 msgid "Insert number of row strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 msgid "Set sample units"
 msgstr "Iestatīt parauga vienības"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 msgid "Draw sampling units"
 msgstr "Zīmēt parauga vienības"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Rastra datu importēšana"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7256,181 +7639,195 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Kopsavilkums"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Rastrs:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Vektori:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Reģions:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Leģendas tips"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Karšu kopas nosaukums:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Platums:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Fonta izmērs:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 msgid "Number sampling units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 msgid "Number row strates:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Skaitliska kolona:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Vienkārši"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS slāņu pārvaldnieks"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Rīki"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Kartes slāņi"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Slāņi"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Komandu konsole"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "Meklēt moduļus"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "Moduļi"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Python čaula"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7438,233 +7835,223 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Aizvērt kartes skatu %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 msgid "Changes current working directory for this GUI."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 msgid "Usage: cd [directory]"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 msgid "Choose a working directory"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "GRASS versija"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr "nezināma versija"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "SVN revīzija:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr "Būvējuma datums"
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "SQL veidotājs"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1222
+#, fuzzy
+msgid "Build platform"
+msgstr "SQL veidotājs"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Saglabāt darbtelpu"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Ievadiet jauno nosaukumu:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7672,35 +8059,35 @@ msgid ""
 "Reason: %s"
 msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 msgid "Unable to start Timeline Tool."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "GRASS GIS histogrammu veidošanas rīks"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7708,55 +8095,53 @@ msgid ""
 "from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Iziet no GRASS GUI"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Sākt GRASS sesiju"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Importēt rastra datus"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr ""
 
@@ -7770,12 +8155,14 @@ msgid "Set raster output format"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Importēt vektordatus"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr ""
 
@@ -7797,7 +8184,7 @@ msgstr ""
 msgid "Add command layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Iziet"
@@ -7847,8 +8234,8 @@ msgid "Add rhumbline layer"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr ""
 
@@ -7870,290 +8257,282 @@ msgstr "Krīginga modulis"
 msgid "Background vector map"
 msgstr "Vektoru kartes slāņi"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Kartes slāņi"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Tuvināt līdz izvēlētajām kartēm"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Eksportēt vektrodatus"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Eksportēt"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Izveidot tabulu?"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Rādīt atribūtu datus"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Sākt rediģēt"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Tuvināt līdz aprēķinu reģionam"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogramma"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Atskaites un statistika"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profilēt"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "3D rastra karte"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Pārrakstīt?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Slāņu grupa:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Pārsaukt izvēlēto karšu kopu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "GRASS rokasgrāmata"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Jauna vektoru karte"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Rādīt atribūtu datus"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Rādīt pamācību"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8161,604 +8540,610 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "GRASS GIS profilu analizēšanas rīks"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profils"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Attālums (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Šūnu vērtības"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Rastra vērtības"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nav ko profilēt"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Pārrakstīt failu?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Nekas"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 msgid "At least 2 raster maps must be specified"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr "<%s> rastra šūnu vērtības"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ": %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Teksta iestatījumi"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr "GRASS GIS histogrammu veidošanas rīks"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "Histogramma"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr "Šūnu skaits"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Attēlu grupas <%s> histogramma"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Rastra kartes <%s> histogramma"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Izveidot rastra kartes histogrammu"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Platība"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "K&opēt"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr "Histogrammas tips"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Profila virsraksts:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "X ass nosaukums:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Y ass nosaukums:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Uzrakstu fonta izmērs (punktos):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Fontu saime:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Stils:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Svars:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Pārsaukt izvēlēto karšu kopu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Līnijas krāsa"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 msgid "Scatterplot points"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Asu iestatījumi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X ass"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y ass"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Mērogs"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Logaritmiskā skala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Tīkla un leģendas iestatījumi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Tīkla krāsa"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Rādīt tīklu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Leģendas fonta izmērs"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Rādīt leģendu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "GRASS GIS histogrammu veidošanas rīks"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
 msgstr "Nederīga ievade"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-#, fuzzy
-msgid "Vector temporal dataset (strds)"
-msgstr "Nederīga ievade"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
 msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Zīmēt"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Palīdzība"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Nederīga ievade"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, python-format
 msgid "Temporal resolution: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-#, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Nederīga ievade"
+#: ../gui/wxpython/tplot/frame.py:724
+msgid "Seed point outside the current region"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Nederīga ievade"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Nederīga ievade"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Nederīga ievade"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, python-format
 msgid "Space time raster dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, python-format
 msgid "Space time vector dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Fails"
 
@@ -8766,8 +9151,8 @@ msgstr "&Fails"
 msgid "Workspace"
 msgstr "Darbtelpa"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Jauns"
 
@@ -8775,7 +9160,7 @@ msgstr "Jauns"
 msgid "Create new workspace"
 msgstr "Izveidot jaunu darbtelpu"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Atvērt"
 
@@ -8783,12 +9168,12 @@ msgstr "Atvērt"
 msgid "Load workspace from file"
 msgstr "Ielādēt darbtelpu no faila"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Saglabāt"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Saglabāt kā"
 
@@ -8809,7 +9194,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Kartes skats"
 
@@ -8838,7 +9223,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Pievienot rastra karti"
@@ -9480,23 +9865,23 @@ msgstr "Atskaites un statistika"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Ģeoreferencēt"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Grafiskais modelētājs"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Darbināt modeli"
 
@@ -9534,15 +9919,15 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Kartogrāfisko salikumu veidotājs"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr "Rādīt blakus"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr ""
 
@@ -9554,7 +9939,7 @@ msgstr "Darbināt skriptu"
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 msgid "Close GUI"
 msgstr "Aizvērt grafisko vidi"
 
@@ -9563,8 +9948,8 @@ msgstr "Aizvērt grafisko vidi"
 msgid "Quit wxGUI session."
 msgstr "Iziet no wxGUI sesijas."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 msgid "Quit GRASS GIS"
 msgstr "Iziet no GRASS GIS"
 
@@ -9572,7 +9957,7 @@ msgstr "Iziet no GRASS GIS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr "Iziet no wxGUI sesijas un GRASS čaulas."
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "Ie&statījumi"
 
@@ -9736,7 +10121,7 @@ msgstr "Pārvaldīt tabulas"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Iestatījumi"
 
@@ -10747,7 +11132,7 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr ""
 
@@ -10992,8 +11377,8 @@ msgid "Develop vector map"
 msgstr "Izveidot vektordatu karti"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Izveidot jaunu vektordatu karti"
 
@@ -11836,12 +12221,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -12860,27 +13245,31 @@ msgid "GUI tools"
 msgstr "GUI rīki"
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "GRASS GIS histogrammu veidošanas rīks"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Saņemt visas vērtības"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
 msgstr "GRASS GIS histogrammu veidošanas rīks"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Saņemt visas vērtības"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "&Palīdzība"
 
@@ -12905,7 +13294,7 @@ msgid "Prints system information"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Par GRASS GIS"
 
@@ -12919,272 +13308,280 @@ msgstr "Vektordatu importēšana"
 msgid "Attribute table manager"
 msgstr "Atribūtu tabulas pārvaldnieks"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Aizvērt modeļa failu"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Eksportēt kā attēlu"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Eksportē modeli kā attēlu"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Eksportēt kā Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Eksportē modeli kā Python skriptu"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Iziet no modelētāja"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Aizver modelēšanas logu"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Modelis"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Pievienot datus"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Validēt modeli"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Novietojuma nosaukums"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Eksportēt atribūtu tabulu"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Eksportēt kā PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "&Ievietot"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Pievienot rastra karti"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Eksportēt rastra karti"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "Jauna vektoru karte"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "Kartes leģenda"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Pievienot izveidoto rastra karti projekta slāņu sarakstam"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Pievienot ziemeļu bultu"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Komandrinda"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Izvades logs"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Notīrīt izvades loga saturu"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Notīrīt komandrindas ievades saturu"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Saglabāt loga izvadi failā"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Pārtraukt strādājošo komandu"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr "Žurnā&la fails"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Saglabāt failu kā..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Teksta faili"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Faili"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13192,12 +13589,12 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13205,293 +13602,324 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+msgid "category"
+msgstr "kategorija"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Izveidot jaunu karšu kopu"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Neizdevās izpildīt vaicājumu vektordatu kartei <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Kategorijas numurs"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, python-format
+msgid "Vector map <%s> was created"
+msgstr "Vektordatu karte <%s> ir izveidota"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Nebija iespējams izveidot jaunu vektordatu karti. Iemesls: %s"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 msgid "Run selected module from the tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Lietotāja iestatījumi"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Iestatīt noklusējuma"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "perimetrs"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Saglabāt izteiksmi failā"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Grafiskās vides iestatījumi"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Slāņu pārvaldnieka iestatījumi"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Meklēt moduli"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Darbtelpas iestatījumi"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Izskats"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Valodas iestatījumi"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Izskata iestatījumi"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Elementu saraksts:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Kartes skats"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Mainīt iestatījumus"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "Moduļi"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Mainīt iestatījumus"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Aizvērt dialogu, kad komandas izpilde ir pabeigta sekmīgi"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Pievienot izveidoto karti slāņu sarakstam"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Slāņi"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Attēlot:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Caurspīdīgs"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Poligona aizpildījuma krāsa:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Simbols:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Līnijas platums (pikseļos):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Datu pārlūks"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Izveidot tabulu"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Atslēgas kolona:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -13503,80 +13931,91 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "EPSG kods:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "EPSG fails:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "Ie&lādēt EPSG kodus"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Projekcija"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Precizitāte:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Nav iespējams dzēst karšu kopu"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Izvēlieties fontu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Paraugs: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -13585,255 +14024,341 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Karšu kopa"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Īpašnieks"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Vaicājuma rezultāti"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr "Labais klikšķis, lai kopētu izvēlētās vērtības."
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Objekts"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Vērtība"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr "Kopēt visu uz starpliktuvi"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr "Pārsūtīt uz konsoli"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr "Kopēt izvēlētās rindas"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr "Kopēt '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr "Kopēt rindu"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr "Vaicājuma rezultāti:"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "Nekas nav atrasts"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profilēt"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Saglabāt pašreizējos iestatījumus"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Fonta iestatījumi:"
+msgid "Load:"
+msgstr "Ielādēt"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Saglabāt iestatījumus"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Teksta faili"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+msgid "Set parameters for the script"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+msgid "Run (Ctrl+R)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "GRASS GIS animācijas rīks"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Aizvērt dialogu, kad darbs ir pabeigts"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Obligāti"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Izvēles"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[daudzvērtību]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "derīgs diapazons"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Izvēlieties krāsu"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Izvēlieties %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "Ie&lādēt"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Pārsaukt novietojumu"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr "&Saglabāt kā"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Mape"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Slāņa id"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Slāņa nosaukums"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Projekcija"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Rokasgrāmata"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -13841,44 +14366,44 @@ msgid ""
 "Reason: %s"
 msgstr "Nav iespējams ielādēt failu. Iemesls: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Saglabāt ievadi kā..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Kļūda iekš %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr ""
 
@@ -13887,552 +14412,442 @@ msgstr ""
 msgid "Location or mapset is not defined."
 msgstr "Nosacījums: nav definēts"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "GRASS novietojuma nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Karšu kopas nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Karšu kopas nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Vektoru kartes nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Izveidot atribūtu tabulu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Jaunās vektoru kartes nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Jaunās vektoru kartes nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Ielādēt reģionu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Saglabāt reģionu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr "Šablons:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Karšu saraksts:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Pievienot rastra karti"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "3D rastrs"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Kartes tips:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Pielipšana"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Karšu kopa:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Pretēja izvēle"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Dinamiskās sērijas (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Importēt vairākus"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Rastra slāņu saraksts"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Slāņu saraksts"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr "%s slāņu saraksts"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Slāņa id"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Slāņa nosaukums"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "GRASS kartes nosaukums (rediģējams)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Projekcija"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Opcijas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Importēt"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Pievienot izveidoto karti slāņu sarakstam"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Saite"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Saitēt izvēlētos slāņus"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-msgid "Unable to determine number of raster bands"
-msgstr "Nebija iespējams noteikt rastra kanālu skaitu"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Importēt DXF slāņus"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-msgid "No layers selected."
-msgstr "Nav izvēlēti slāņi."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Iestatīt kartes slāņa caurspīdīgumu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "necaurspīdīgs"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Iestatīt attēla izmēru"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Attēla izmērs"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Šablons:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS SQL vaicājumu utilīta"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr " SQL izteikums "
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Simboli"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Simbola mape:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Simbola nosaukums:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 "Vai tiešām vēlaties iziet no GRASS GIS (ieskaitot komandrindu) vai arī tikai "
 "aizvērt grafisko vidi?"
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Informācija"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Autortiesības"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licence"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Orientācija"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autori"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Līdzstrādnieki"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Papildus palīgi"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Tulkotāji"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr "Tulkošanas statuss"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Oficiālā GRASS GIS lapa:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr "Koda revīzija"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr "Būvējuma datums"
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Valoda"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "%s fails iztrūkst"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Kļūda nolasot failu '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Rindas:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-pasts"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Valsts"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr "Valoda"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr "   %d iztulkots"
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr "   %d neskaidrs"
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr "   %d netulkots"
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr "%d tulkots"
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "Fails <%s> nav atrasts"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Nākamais"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Iepriekšējais"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr "Rīkjosla"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "Kopēt koordinātas uz starpliktuvi"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "Kopēt koordinātas uz starpliktuvi"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Pārsaukt izvēlēto karšu kopu"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Slāņu grupa:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Saitēt izvēlētos slāņus"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Slāņa ID"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Saitēt izvēlētos slāņus"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Vienuma īpašības"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Mainīt karšu kopu"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Pārvaldīt slāņus"
@@ -14531,1013 +14946,1040 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Izvēlēties visu"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr "Tips: "
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Izvades iestatījumi"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Avota iestatījumi"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Vektoru punktus"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Fails"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protokols"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Izvades tips"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Avota tips"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Visi faili"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "ZIP faili"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "GZIP faili"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "TAR faili"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "TARGZ faili"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Fails:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Izvēlieties importējamo  failu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Izvēlieties ievades mapi"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Paplašinājums:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Izvēlieties failu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr "Objekta tips:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Dzēst objektu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "loģiskais VAI"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Izveides parametri:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Formāts:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protokols:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr "Iestatījumi nav pieejami"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr "Poligons"
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Darbība ir atcelta."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Īpašība %s neeksistē"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Darbība ir atcelta."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "GRASS GIS histogrammu veidošanas rīks"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 msgid "Select space time dataset(s):"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Karšu kopa: %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr "Kartes nosaukums: %s"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr "Sākuma laiks: %s"
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, python-format
 msgid "End time: %s"
 msgstr "Beigu laiks: %s"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Rastra iestatījumi"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Obilgāti"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Slāņu saraksts"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Projekcija:"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Tīkla un leģendas iestatījumi"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Projekcijas kods:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Meklēt pēc apraksta:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 msgid "Cubic interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Pievienot vairākas rastra vai vektoru kartes"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 msgid "Source image format"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Dzēst izvēlēto novietojumu"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr "slānis"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "stils"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
+msgid "Add default"
 msgstr "Pievienot datus"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr " Servera iestatījumi "
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Serveris:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Pieslēgties"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Saglabāt pašreizējos iestatījumus"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Tīkla un leģendas iestatījumi"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Slāņu pārvaldnieka iestatījumi"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Slāņa nosaukums"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "Lietotājvārds:"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Parole:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Pievienot izveidoto rastra karti projekta slāņu sarakstam"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "&Pielietot"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&Labi"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Rastra kartes nosaukums:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Iestatīt reģionu"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Ielādēt reģionu:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 #, fuzzy
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Tuvināt līdz aprēķinu reģionam"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Ievietot eksistējošu rastra karti"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Ielādēt reģionu:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr "&Saglabāt slāni"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 msgid "Save web service layer as raster map"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Karšu kopa <%s> jau eksistē."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Īpašība %s neeksistē"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Datu ielāde..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Nav iespējams dzēst karšu kopu"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Ielādēt"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Ie&statījumi"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Krāsu tabulas"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Karšu kopa <%s> jau eksistē."
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Slānis:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Krāsu tabulas"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Pārāk daudz ierakstu"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS GIS rastra kalkulators"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS GIS 3D rastra kalkulators"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "mapcalc izteiksme"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operatori"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operandi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Izteiksme"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Saglabāt izteiksmi failā"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Ielādēt izteiksmi no faila"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "eksponente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dalīt"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "atņemt"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "reizināt"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "lielāks par"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "lielāks vai vienāds"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "mazāks par"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "mazāks vai vienāds"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "vienāds"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "nav vienāds"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NE"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "loģiskais UN"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "loģiskais VAI"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Jaunveidojamās 3D rastra kartes nosaukums"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Jaunveidojamās rastra kartes nosaukums"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Ievietot eksistējošu 3D rastra karti"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Ievietot eksistējošu rastra karti"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Ievietot mapcalc funkciju"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Pievienot izveidoto rastra karti projekta slāņu sarakstam"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr "Ir nepieciešams norādīt jaunveidojamās rastra kartes nosaukumu."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "Kopēt koordinātas uz starpliktuvi"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Repozitorijs"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Opcijas"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Saņemt"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Instalēt"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, python-format
+msgid "%d extensions loaded"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:238
 #, fuzzy
 msgid "Install"
 msgstr "&Instalēt"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Rādīt pamācību"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, python-format
 msgid "Unable to load extensions. %s"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 msgid "Manage installed GRASS Addons extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "&Instalēt"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Pārsaukt izvēlēto novietojumu"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "&Instalēt"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Pārsaukt izvēlēto novietojumu"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr "Darbība ir atcelta."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -15546,246 +15988,384 @@ msgid ""
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 msgid "Extension"
 msgstr "Paplašinājums"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Importēt vairākus"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Rastra slāņu saraksts"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Slāņu saraksts"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr "%s slāņu saraksts"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "GRASS kartes nosaukums (rediģējams)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Importēt"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Avota iestatījumi"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Fontu iestatījumi"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Pievienot izveidoto karti slāņu sarakstam"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Saite"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Saitēt izvēlētos slāņus"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:431
+msgid "Unable to determine number of raster bands"
+msgstr "Nebija iespējams noteikt rastra kanālu skaitu"
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Importēt DXF slāņus"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:758
+msgid "No layers selected."
+msgstr "Nav izvēlēti slāņi."
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projekcija"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "GRASS kartes nosaukums (rediģējams)"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Noņemamais slānis"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Pārsaukt izvēlēto karšu kopu"
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Ievades dati"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Punktu datu kopa:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Skaitliska kolona:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Krīgings"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Krīginga modulis"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Gatavs."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Bloka izmērs:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Modelis: "
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Digitizēt jaunu līniju/robežu"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr " Objekta tips: "
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "līnija"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "robeža"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "centroīds"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "fasete"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -15793,20 +16373,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -15815,185 +16395,180 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Pārzīmēt visus kartes slāņus"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Zīmēt"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Datu ielāde..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Zīmēt"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Zīmēt"
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Nederīgs kartes izmērs %d,%d\n"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Detaļas:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, fuzzy, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Nav iespējams atvērt vektordatu karti <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, fuzzy, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Nav iespējams atvērt vektordatu karti <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Datu ielāde..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Zīmēt"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Zīmēt"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr "Nezināma birka %s"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 msgid "Unable to create toolboxes directory."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr "Paplašinājumi"
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, fuzzy, python-format
 msgid "Syntax error: %s"
 msgstr "Sākuma laiks: %s"
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
-msgstr ""
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
+msgstr "Nav iespējams atvērt failu '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Nav iespējams atvērt failu '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Nav iespējams izveidot failu '%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16002,174 +16577,179 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, python-format
+msgid "Module <%s> not found."
+msgstr "Modulis <%s> nav atrasts."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d sek"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Komanda pārtraukta"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Komanda izpildīta"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Iemesls"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Izpilde nesekmīga:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Kļūda: "
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Nebija iespējams izpildīt komandu: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 msgid "Data point"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Sakļaut visu"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Izplest visu"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 #, fuzzy
 msgid "Display selected"
 msgstr "Kategorijas numurs"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Parādīt"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Nekas"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -16177,11 +16757,11 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -16189,269 +16769,299 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "GIS datu mape:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Projekta novietojums"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Izvēlieties ĢIS datu mapi"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Novietojuma virsraksts"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Nederīgs novietojuma nosaukums"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Vienkārši"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Paplašināti"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Kods"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Projekcijas kods:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Meklēt pēc apraksta:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsoīds"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Elipsoīda kods:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Ģeoreferencēts fails:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr "WKT .prj fails:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Izvēlieties ĢIS datu mapi"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "EPSG kods:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Aizvērt modeļa failu"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
+msgstr "Nav iespējams dzēst karšu kopu"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "GRASS datubāze:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Novietojuma nosaukums:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Novietojuma virsraksts:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projekcija:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Izveidot jaunu novietojumu?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -16459,246 +17069,251 @@ msgid ""
 "Details: %(err)s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "%s fails iztrūkst"
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Fails <%s> nav atrasts."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Iestatīt reģionu"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Nederīgs reģions"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Rindas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Kolonas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Šūnas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Dziļums: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3D šūnas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Ziemeļi"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Rietumi"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Austrumi"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Dienvidi"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Z-D izšķirtspēja"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "A-R izšķirtspēja"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Nederīga vērtība: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -16706,752 +17321,752 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Skats"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analīze"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animācija"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspektīva:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Virsma"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vektors"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Apgaismojums"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Režīms:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "rupjš"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "smalks"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "abi"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Vektoru punktus"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Ikona:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Izšķirtspēja:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 #, fuzzy
 msgid "Ambient:"
 msgstr "Komanda:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "Z"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "ZA"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "DR"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Līmenis"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, python-format
 msgid "Scalebar %d"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Nav"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "Virsma"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Mainīt iestatījumus"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Punktu datu kopa:"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -17461,7 +18076,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -17473,22 +18088,22 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 msgid "Scatter plot cannot be added.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -17496,7 +18111,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -17507,31 +18122,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -17542,63 +18157,63 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 msgid "scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr "Pārsaukt klasi"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Līnijas krāsa"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr "Slēpt"
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "Rādīt"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr "Pārvietot uz augšu"
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr "Pārvietot uz apakšu"
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Pievienot jaunu kategoriju"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Eksportēt rastra karti"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -17608,198 +18223,198 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Tuvināt līdz izvēlētajām kartēm"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 msgid "Add scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 msgid "No scatter plots selected."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr "Rastra karte <%s> jau eksistē"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 msgid "Selection polygon color:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Objekta krāsa:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 msgid "Selected area opacity:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Izvēlēties fontu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Asu iestatījumi"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 msgid "Select category for editing."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Pievienot rastru"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 msgid "Select area with polygon"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Ziemeļu bulta"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Pievienot virsotni"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Izveidot jaunu novietojumu?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 #, fuzzy
 msgid "Move vertex"
 msgstr "Dzēst virsotni"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Pārvietot virsotni"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Dzēst virsotni"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Dzēst virsotni"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Pievienot slāni"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Pārsaukt izvēlēto karšu kopu"
@@ -17811,235 +18426,47 @@ msgstr "Pārsaukt izvēlēto karšu kopu"
 #~ "Nebija iespējams importēt matplotlib. To ir nepieciešams instalēt.\n"
 #~ "%s"
 
-#~ msgid "Exit GUI"
-#~ msgstr "Iziet no GUI"
+#~ msgid "Map layers"
+#~ msgstr "Kartes slāņi"
 
-#, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Pievienot izveidoto karti slāņu sarakstam"
+#~ msgid "Search modules"
+#~ msgstr "Meklēt moduļus"
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Pievienot izveidoto karti slāņu sarakstam"
-
-#~ msgid "GPS data import"
-#~ msgstr "GPS datu imports"
-
-#~ msgid "Volume"
-#~ msgstr "Tilpums"
-
-#~ msgid "Choose project location and mapset"
-#~ msgstr "Izvēlieties projekta novietojumu un karšu kopu"
-
-#~ msgid "Manage"
-#~ msgstr "Pārvaldīt"
+#~ msgid "Vector temporal dataset (strds)"
+#~ msgstr "Nederīga ievade"
 
 #, fuzzy
 #~ msgid ""
-#~ "Welcome to GRASS GIS %s%s\n"
-#~ "The world's leading open source GIS"
-#~ msgstr ""
-#~ "Laipni lūdzam GRASS GIS %s\n"
-#~ "Pasaules vadošajā brīvajā ĢIS"
-
-#~ msgid ""
-#~ "Select an existing project location and mapset\n"
-#~ "or define a new location"
-#~ msgstr ""
-#~ "Izvēlieties eksistējošu novietojumu un karšu kopu\n"
-#~ "vai arī definējiet jaunu novietojumu"
-
-#~ msgid ""
-#~ "Project location\n"
-#~ "(projection/coordinate system)"
-#~ msgstr ""
-#~ "Projekta novietojums\n"
-#~ "(projekcija/koordinātu sistēma)"
-
-#~ msgid ""
-#~ "Accessible mapsets\n"
-#~ "(directories of GIS files)"
-#~ msgstr ""
-#~ "Pieejamās karšu kopas\n"
-#~ "(mapes ar ĢIS failiem)"
-
-#~ msgid "Define new location"
-#~ msgstr "Definēt jaunu novietojumu"
-
-#~ msgid ""
-#~ "Rename/delete selected\n"
-#~ "mapset or location"
+#~ "Failed to query vector map <{map}>. Check database settings and topology."
 #~ msgstr ""
-#~ "Pārsaukt vai dzēst izvēlēto\n"
-#~ "novietojumu vai karšu kopu"
-
-#~ msgid "Start &GRASS"
-#~ msgstr "Startēt &GRASS"
-
-#~ msgid "&Create mapset"
-#~ msgstr "Izveidot &karšu kopu"
-
-#~ msgid "&Location wizard"
-#~ msgstr "&Novietojuma vednis"
-
-#~ msgid "Rename mapset"
-#~ msgstr "Pārsaukt karšu kopu"
-
-#~ msgid "Rename location"
-#~ msgstr "Pārsaukt novietojumu"
-
-#~ msgid "Delete mapset"
-#~ msgstr "Dzēst karšu kopu"
-
-#~ msgid "Delete location"
-#~ msgstr "Dzēst novietojumu"
-
-#~ msgid "Welcome to GRASS GIS"
-#~ msgstr "Laipni lūdzam GRASS GIS"
-
-#, fuzzy
-#~ msgid "Warning: "
-#~ msgstr "Brīdinājums"
-
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "GRASS novietojuma nosaukums:"
-
-#~ msgid "V&olumes"
-#~ msgstr "&Tilpumi"
-
-#~ msgid "3D Mask"
-#~ msgstr "3D maska"
-
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Atribūtu tabulas pārvaldnieks"
-
-#, fuzzy
-#~ msgid "Hide all toolbars"
-#~ msgstr "Analīze"
-
-#, fuzzy
-#~ msgid "Show all toolbars"
-#~ msgstr "Kopēt koordinātas uz starpliktuvi"
-
-#, fuzzy
-#~ msgid "ESRI ASCII grid import"
-#~ msgstr "ASCII tīkla imports"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts an ESRI ARC/INFO ascii raster file (GRID) into a GRASS raster "
-#~ "map."
-#~ msgstr "Rastra datu importēšana"
-
-#, fuzzy
-#~ msgid "ESRI ASCII grid export"
-#~ msgstr "ASCII tīkla imports"
-
-#, fuzzy
-#~ msgid "TIFF export"
-#~ msgstr "DXF eksports"
-
-#, fuzzy
-#~ msgid "List filtered"
-#~ msgstr "Slāņu saraksts"
-
-#, fuzzy
-#~ msgid "Delete filtered"
-#~ msgstr "Dzēst ierakstus"
-
-#, fuzzy
-#~ msgid "Vector to volume"
-#~ msgstr "Vektori:"
-
-#, fuzzy
-#~ msgid "Sites to vector"
-#~ msgstr "Izvēlieties vektordatu karti"
-
-#, fuzzy
-#~ msgid "Converts a GRASS site_lists file into a vector map."
-#~ msgstr "Rastra datu importēšana"
+#~ "SQL izteiksme ir nederīga.\n"
+#~ "\n"
+#~ "%s"
 
 #, fuzzy
-#~ msgid "Raster map calculator."
+#~ msgid "GRASS GIS Data Catalog (experimetal)"
 #~ msgstr "GRASS GIS 3D rastra kalkulators"
 
 #, fuzzy
-#~ msgid "Raster series"
-#~ msgstr "Rastra karte <%s> jau eksistē"
-
-#, fuzzy
-#~ msgid "Visibility [DEPRECATED]"
-#~ msgstr "Redzamība"
-
-#, fuzzy
-#~ msgid "Horton's statistics"
-#~ msgstr "Atskaites un statistika"
-
-#, fuzzy
-#~ msgid "Analyze landscape"
-#~ msgstr "Analizēt karti"
-
-#, fuzzy
-#~ msgid "Analyze patches"
-#~ msgstr "Analizēt karti"
-
-#, fuzzy
-#~ msgid "Surface interpolation utility for raster map."
-#~ msgstr "Ievietot eksistējošu 3D rastra karti"
-
-#, fuzzy
-#~ msgid "Compares bit patterns with a raster map."
-#~ msgstr "Izveidot rastra kartes histogrammu"
-
-#, fuzzy
-#~ msgid "Develop volumes"
-#~ msgstr "Izveidot vektordatu karti"
-
-#, fuzzy
-#~ msgid "Volume calculator"
-#~ msgstr "Lauka kalkulators"
-
-#, fuzzy
-#~ msgid "Basic volume metadata"
-#~ msgstr "Rastra pamata metadati"
-
-#, fuzzy
-#~ msgid "Voxel statistics"
-#~ msgstr "Vispārēja statistika"
-
-#, fuzzy
-#~ msgid "Width size (in cells) ?"
-#~ msgstr "Platums:"
-
-#, fuzzy
-#~ msgid "Height size (in cells) ?"
-#~ msgstr "Platums:"
-
-#, fuzzy
-#~ msgid "What radius size (in meters) ?"
-#~ msgstr "Platums:"
-
-#, fuzzy
-#~ msgid "Develop 3D rasters"
-#~ msgstr "Veidot rastra karti"
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
 
 #, fuzzy
-#~ msgid "Temporary map '%s' with result "
-#~ msgstr "Karšu kopa <%s> jau eksistē."
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Rastra datu importēšana"
 
 #, fuzzy
-#~ msgid "Vector map %s already exists. "
-#~ msgstr "Karšu kopa <%s> jau eksistē."
+#~ msgid "Invalid input data"
+#~ msgstr "Nederīga ievade"
 
 #, fuzzy
-#~ msgid "Temporary map %s  already exists.\n"
-#~ msgstr "Karšu kopa <%s> jau eksistē."
+#~ msgid "Multiple import formats using OGR"
+#~ msgstr "Importēt vairākus"
 
 #, fuzzy
-#~ msgid "Temporary map '%s' was changed outside "
-#~ msgstr "Karšu kopa <%s> jau eksistē."
+#~ msgid "Common export formats using OGR"
+#~ msgstr "Biežāk lietotie formāti"
 
 #, fuzzy
 #~ msgid "List raster3D dataset maps"
@@ -18050,12 +18477,8 @@ msgstr "Pārsaukt izvēlēto karšu kopu"
 #~ msgstr "Rastra aprēķini"
 
 #, fuzzy
-#~ msgid "Invalid input data"
-#~ msgstr "Nederīga ievade"
-
-#, fuzzy
-#~ msgid "Select space time raster dataset(s):"
-#~ msgstr "Rastra datu importēšana"
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "Tuvināt līdz aprēķinu reģionam"
 
 #, fuzzy
 #~ msgid "No mapsets readable"
@@ -18081,296 +18504,34 @@ msgstr "Pārsaukt izvēlēto karšu kopu"
 #~ msgid "Displaying"
 #~ msgstr "Rādīt"
 
-#~ msgid "Data catalog"
-#~ msgstr "Datu katalogs"
-
-#, fuzzy
-#~ msgid "GRASS SVN revision"
-#~ msgstr "SVN revīzija:"
-
-#, fuzzy
-#~ msgid "Build date"
-#~ msgstr "SQL veidotājs"
-
-#, fuzzy
-#~ msgid "Build platform"
-#~ msgstr "SQL veidotājs"
-
-#~ msgid "New name"
-#~ msgstr "Jauns nosaukums"
-
-#~ msgid "Rename map"
-#~ msgstr "Pārsaukt karti"
-
-#~ msgid "Copy map"
-#~ msgstr "Kopēt karti"
-
-#, fuzzy
-#~ msgid "Do you really want to delete map <{m}>?"
-#~ msgstr "Nav iespējams izveidot jaunu karšu kopu: %s"
-
-#~ msgid "Delete map"
-#~ msgstr "Dzēst karti"
-
-#~ msgid "&Copy"
-#~ msgstr "&Kopēt"
-
-#~ msgid "&Paste"
-#~ msgstr "&Ielīmēt"
-
-#~ msgid "&Display layer"
-#~ msgstr "&Attēlot slāni"
-
-#~ msgid "category"
-#~ msgstr "kategorija"
-
-#, fuzzy
-#~ msgid "Select features"
-#~ msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
-
-#, fuzzy
-#~ msgid "Create a new map"
-#~ msgstr "Izveidot jaunu karšu kopu"
-
-#~ msgid "Failed to query vector map(s) <%s>."
-#~ msgstr "Neizdevās izpildīt vaicājumu vektordatu kartei <%s>."
-
-#, fuzzy
-#~ msgid "No features selected"
-#~ msgstr "Kategorijas numurs"
-
-#~ msgid "Vector map <%s> was created"
-#~ msgstr "Vektordatu karte <%s> ir izveidota"
-
-#~ msgid ""
-#~ "Unable to create a new vector map.\n"
-#~ "\n"
-#~ "Reason: %s"
-#~ msgstr "Nebija iespējams izveidot jaunu vektordatu karti. Iemesls: %s"
-
-#, fuzzy
-#~ msgid "Hide statusbar"
-#~ msgstr "Rādīt iestatījumus"
-
-#, fuzzy
-#~ msgid "Show statusbar"
-#~ msgstr "Rādīt iestatījumus"
-
-#, fuzzy
-#~ msgid "Digitize area"
-#~ msgstr "Digitizēt jaunu līniju"
-
-#, fuzzy
-#~ msgid "Digitize line"
-#~ msgstr "Digitizēt jaunu līniju"
-
-#, fuzzy
-#~ msgid "Digitize point"
-#~ msgstr "Digitizēt jaunu punktu"
-
-#, fuzzy
-#~ msgid "Save raster map"
-#~ msgstr "Sapakot rastra karti"
-
-#, fuzzy
-#~ msgid "Quit raster digitizer"
-#~ msgstr "Iziet no modelētāja"
-
-#, fuzzy
-#~ msgid "Select raster map"
-#~ msgstr "3D rastra kartes"
-
-#~ msgid "Cell value:"
-#~ msgstr "Šūnu vērtība:"
-
 #, fuzzy
-#~ msgid "New raster map"
-#~ msgstr "3D rastra karte"
-
-#, fuzzy
-#~ msgid "Create new raster map"
-#~ msgstr "Izveidot jaunu vektordatu karti"
-
-#, fuzzy
-#~ msgid "Name for new raster map:"
-#~ msgstr "Rastra kartes nosaukums:"
-
-#, fuzzy
-#~ msgid "Optionally select background raster map:"
-#~ msgstr "Izveidot jaunu vektordatu karti"
-
-#, fuzzy
-#~ msgid "New raster map type:"
-#~ msgstr "Rastra kartes nosaukums:"
-
-#, fuzzy
-#~ msgid "Please specify name for a new raster map"
-#~ msgstr "Jaunveidojamās rastra kartes nosaukums"
-
-#~ msgid ""
-#~ "Raster map <%s> already exists in the current mapset. Do you want to "
-#~ "overwrite it?"
-#~ msgstr ""
-#~ "Pašreizējā karšu kopā rastra karte <%s> jau eksistē. Vai vēlies to "
-#~ "pārrakstīt?"
-
-#, fuzzy
-#~ msgid "Please select first the raster map"
-#~ msgstr "3D rastra kartes"
-
-#~ msgid "Right click to finish area"
-#~ msgstr "Labais klikšķis, lai pabeigtu poligonu"
-
-#~ msgid "Right click to finish line"
-#~ msgstr "Labais klikšķis, lai pabeigtu līniju"
-
-#~ msgid "Do you want to save changes?"
-#~ msgstr "Vai vēlies saglabāt izmaiņas?"
-
-#, fuzzy
-#~ msgid "Save raster map changes"
-#~ msgstr "Saglabāt izmaiņas"
-
-#, fuzzy
-#~ msgid "Failed to create backup copy of edited raster map."
-#~ msgstr "Nebija iespējams izveidot jaunu rastra karti."
-
-#~ msgid "Failed to create new raster map."
-#~ msgstr "Nebija iespējams izveidot jaunu rastra karti."
-
-#, fuzzy
-#~ msgid "Rasterizing..."
-#~ msgstr "Zīmēt"
-
-#, fuzzy
-#~ msgid "Failed to set default color table for edited raster map"
-#~ msgstr "Nebija iespējams izveidot jaunu rastra karti."
-
-#, fuzzy
-#~ msgid "Select features interactively from vector map"
-#~ msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
-
-#~ msgid "Raster digitizer"
-#~ msgstr "Rastra digitizēšana"
-
-#~ msgid "Unable to create file <%s>"
-#~ msgstr "Nebija iespējams izveidot failu <%s>"
-
-#, fuzzy
-#~ msgid "Raster Digitizer Toolbar"
-#~ msgstr "Digitizēt jaunu punktu"
-
-#~ msgid "Module <%s> not found."
-#~ msgstr "Modulis <%s> nav atrasts."
-
-#, fuzzy
-#~ msgid "Rendering failed: %s"
-#~ msgstr "Pārzīmēt visus kartes slāņus"
-
-#, fuzzy
-#~ msgid "Rendering aborted"
-#~ msgstr "Zīmēt"
-
-#, fuzzy
-#~ msgid "No vector map selected in layer manager. Operation canceled."
-#~ msgstr "Darbība ir atcelta."
-
-#, fuzzy
-#~ msgid "Input vector map is not selected"
-#~ msgstr "Īpašība %s neeksistē"
-
-#, fuzzy
-#~ msgid "Load:"
-#~ msgstr "Ielādēt"
-
-#, fuzzy
-#~ msgid "Set color table interactively"
-#~ msgstr "Tuvināt līdz aprēķinu reģionam"
-
-#, fuzzy
-#~ msgid "Select vector feature(s)"
-#~ msgstr "Vaicājums izvēlētajai rastra/vektoru kartei"
-
-#, fuzzy
-#~ msgid "Hide toolbars"
-#~ msgstr "Analīze"
-
-#, fuzzy
-#~ msgid "Show toolbars"
-#~ msgstr "Kopēt koordinātas uz starpliktuvi"
-
-#, fuzzy
-#~ msgid "Reprojection"
-#~ msgstr "Projekcija"
-
-#, fuzzy
-#~ msgid "Name for output GRASS map"
-#~ msgstr "GRASS kartes nosaukums (rediģējams)"
-
-#, fuzzy
-#~ msgid "Reproject selected layers"
-#~ msgstr "Pārsaukt izvēlēto karšu kopu"
-
-#, fuzzy
-#~ msgid "Add default"
+#~ msgid "Add default servers"
 #~ msgstr "Pievienot datus"
 
 #, fuzzy
-#~ msgid "Close GRASS GIS Data Catalog"
-#~ msgstr "GRASS GIS 3D rastra kalkulators"
-
-#~ msgid "Editing {name}"
-#~ msgstr "Rediģē {name}"
-
-#~ msgid "Renaming {name}..."
-#~ msgstr "Pārsauc {name}..."
-
-#~ msgid " -- completed"
-#~ msgstr "-- pabeigts"
-
-#~ msgid "Copying {name}..."
-#~ msgstr "Kopē {name}..."
-
-#~ msgid "Deleting {name}..."
-#~ msgstr "Dzēš {name}..."
-
-#~ msgid "Displaying {name}..."
-#~ msgstr "Attēlo {name}..."
-
-#, fuzzy
-#~ msgid "Import settings"
-#~ msgstr "Fontu iestatījumi"
-
-#, fuzzy
-#~ msgid "Layers to be reprojected"
-#~ msgstr "Noņemamais slānis"
-
-#, fuzzy
-#~ msgid "GRASS GIS Data Catalog (experimetal)"
-#~ msgstr "GRASS GIS 3D rastra kalkulators"
+#~ msgid "Load settings:"
+#~ msgstr "Fonta iestatījumi:"
 
 #, fuzzy
-#~ msgid "Source input"
-#~ msgstr "Vektoru punktus"
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Nav iespējams atvērt vektordatu karti <%s>."
 
 #, fuzzy
-#~ msgid ""
-#~ "Input vector map <%s> and selected map <%s> in layer manager are "
-#~ "different. Operation canceled."
-#~ msgstr "Darbība ir atcelta."
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Nav iespējams atvērt vektordatu karti <%s>."
 
 #, fuzzy
-#~ msgid "Profiles"
-#~ msgstr "Profilēt"
+#~ msgid "Temporary map '%s' with result "
+#~ msgstr "Karšu kopa <%s> jau eksistē."
 
 #, fuzzy
-#~ msgid "Multiple import formats using OGR"
-#~ msgstr "Importēt vairākus"
+#~ msgid "Vector map %s already exists. "
+#~ msgstr "Karšu kopa <%s> jau eksistē."
 
 #, fuzzy
-#~ msgid "Common export formats using OGR"
-#~ msgstr "Biežāk lietotie formāti"
+#~ msgid "Temporary map %s  already exists.\n"
+#~ msgstr "Karšu kopa <%s> jau eksistē."
 
 #, fuzzy
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "Tuvināt līdz aprēķinu reģionam"
+#~ msgid "Temporary map '%s' was changed outside "
+#~ msgstr "Karšu kopa <%s> jau eksistē."
diff --git a/locale/po/grasswxpy_ml.po b/locale/po/grasswxpy_ml.po
index 7fe4c13..4eaf8fe 100644
--- a/locale/po/grasswxpy_ml.po
+++ b/locale/po/grasswxpy_ml.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_ml\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Mohammed Rashad <rashadkm at gmail.com>\n"
 "Language-Team: Malayalam <grass-translations at lists.osgeo.org>\n"
@@ -18,201 +18,201 @@ msgstr ""
 "X-Poedit-Language: Malayalam\n"
 "X-Poedit-Country: INDIA\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr ""
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr "തിരഞ്ഞെടുത്ത ലെക്കെഷനിൽ പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "തിരഞ്ഞെടുത്ത ലൊക്കെഷൻ എടുത്തുകളയുക"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "നാമം മാറ്റുക"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് പേർ മാറ്റുക"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "തെറ്റ്"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "ഗ്രാസ്സ് ഡേറ്റബേസ് നോക്കുന്നതിൽ പിശക്. നിങ്ങളുടെ സജ്ജീകരണം പരിശോഡിക്കുക."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "തെറ്റ്: ലൊക്കെഷൻ <%s> കണ്മാനില്ല"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "തെറ്റ്: മാപ്പ്സെറ്റ് <%s> കണ്മാനില്ല"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "തെറ്റ്:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -222,7 +222,7 @@ msgstr ""
 "\n"
 "ഈ മപ്സെറ്റിന്റെ പേർ മാറ്റാനും പറ്റില്ല"
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -233,12 +233,12 @@ msgstr ""
 "\n"
 "പുതിയ പേർ:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "സന്ദേശം"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -249,7 +249,7 @@ msgstr ""
 "\n"
 "മാപ്പ്സെറ്റ് <%s> ലൊക്കെഷനിൽ ഉണ്ട്"
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -260,7 +260,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -271,7 +271,7 @@ msgstr ""
 "\n"
 "ലൊക്കെഷൻ <%s> ഗ്രാസ്സിൽ ഉണ്ട്"
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -282,7 +282,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -292,7 +292,7 @@ msgstr ""
 "\n"
 "ഈ മാപ്പ്സെറ്റ് കളയാൻ പറ്റില്ല"
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -305,11 +305,11 @@ msgstr ""
 "\n"
 "എല്ലാ മാപ്പുകളും സ്തിരമയി എടുത്തുകളയുന്നതാണ്!!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "മാപ്പ്സെറ്റ് എടുത്തുകളയാൻ പറ്റുനില്ല"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -320,42 +320,42 @@ msgstr ""
 "\n"
 "എല്ലാ മാപ്പുകളും സ്തിരമയി എടുത്തുകളയുന്നതാണ്!!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "ലൊക്കെഷൻ എടുത്തുകളയാൻ പറ്റുനില്ല"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "ഗ്രാസ്സ് ഡേറ്റബേസ് നോക്കുന്നതിൽ പിശക്. നിങ്ങളുടെ സജ്ജീകരണം പരിശോഡിക്കുക."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "പുതിയ മാപ്പ്സെറ്റിൻടേ പേർ എഴുതുക"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -364,17 +364,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് പേർ മാറ്റുക"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -386,11 +386,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -398,7 +398,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -406,19 +406,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -437,188 +437,188 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr " പ്രദർശന സ്ഥലം കടലാസിലേക്ക് അച്ചടിക്കുക"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 #, fuzzy
 msgid "Import vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 msgid "Analysis failed."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -627,641 +627,642 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "ഗ്രൂപ്പ് ഉണ്ടാക്കുകയൊ/ മിരുത്തുകയൊ ചെയ്യുക..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "ലെയറിന്റെ പേർ"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "പുതിയ മാപ്പ്സെറ്റിൻടേ പേർ എഴുതുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "പുതിയ മാപ്പ്സെറ്റിൻടേ പേർ എഴുതുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "ആട്രിബൂട്ട് പട്ടിക കാണിക്കുക"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 msgid "Export attribute table containing computed statistical data"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "തിരഞ്ഞെടുത്ത ലെയെർ എടുത്തു കളയുക"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "RGB ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 msgid "/ Zoom to map"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "3D റസ്റ്റർ മാപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "പുറത്ത് കടക്കുക"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "അടയ്ക്കുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "വർക്സ്പേസ് ഫയൽ അടയ്ക്കുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "വർക്സ്പേസ് ഫയൽ അടയ്ക്കുക"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "നിറം:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 #, fuzzy
 msgid "Size:"
 msgstr "വലുപ്പം"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr ""
 "തിരഞ്ഞെടുത്ത രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr " പ്രദർശന സ്ഥലം കടലാസിലേക്ക് അച്ചടിക്കുക"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "RMS തെറ്റ്"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1270,28 +1271,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1301,267 +1302,267 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "ജിയൊരെക്റ്റിഫയരിന്റ് സജ്ജീകരണം ഫയലിലേക്ക് ശേഖരിച്ചു '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1569,365 +1570,365 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "പുതിയ അതിർത്തി ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "പുതിയ വര ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "പുതിയ വര ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "പുതിയ അതിർത്തി ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1935,78 +1936,78 @@ msgid ""
 "Reason: %s"
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2014,256 +2015,256 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "പുതിയ ബിന്ധു ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "എടത്: പുതിയ ബിന്ദു"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "പുതിയ വര ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "എടത്: പുതിയ ബിന്ധു; നടുക്ക്: മുമ്പ് വരച്ച ബിന്ധു മയിച്ചു കളയുക; വലത്: വര നിറുത്തുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "പുതിയ അതിർത്തി ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "പുതിയ നടു ബിന്ധു ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "പുതിയ അതിർത്തി ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "എടത്: തിരഞ്ഞെടുക്കുക; നടുക്ക്: തിരഞ്ഞെടുത്തത് മാറ്റുക; വലത്: ഉറപ്പ് വരുത്തുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "ഫീച്ചറുകൾ കാണിക്കുകയൊ/മാറ്റം വരുത്തുകയൊ ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "എടത്: തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "കാറ്റഗറികൾ കാണിക്കുകയൊ/മാറ്റം വരുത്തുകയൊ ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "ലൈനൊ/അതിർത്തിയൊ മാറ്റം വരുത്തുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "അഗ്രം നീക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് പേർ മാറ്റുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "ഡിജിറ്റൈസേഷനിൽ നിന്നും പുറത്ത് വരിക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "കൂടുതൽ ഉള്ള വഴികൾ (പകർത്തുക,ഞൊട്ടുക,യോജിപ്പിക്കുക,മുതലായവ.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "പഴയ അവസ്ഥയിലേക്ക് വരിക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "മുൻപ് വരുത്തിയ മാറ്റങ്ങൾ ഇല്ലാതാക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "മുൻപ് വരുത്തിയ മാറ്റങ്ങൾ ഇല്ലാതാക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "കാറ്റഗറിയുടെ പതിപ്പ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "കാറ്റഗറിയുടെ പതിപ്പ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "ലൈനൊ/അതിർത്തിയൊ വിഘടിപിക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2272,835 +2273,1212 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "പുതിയ വര ഡിജിറ്റൈസ് ചെയ്യുക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "ഡിജിറ്റൈസേഷനിൽ നിന്നും പുറത്ത് വരിക"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 #, fuzzy
 msgid "Measuring distance"
 msgstr "ദൂരം അളക്കുക"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 #, fuzzy
 msgid "Measuring distance:"
 msgstr "ദൂരം അളക്കുക"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "പുരാവ്രിത്തം"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "ദൂരം അളക്കുക"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "പുരാവ്രിത്തം"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "ജിയൊഡെസിക്ക് ലൈൻ ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "റസ്റ്റർ ഫ്ലോ ആരൊകൾ ചേർക്കുക"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "സജ്ജീകരണം കാണിക്കുക"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "ഗ്രിഡ് അല്ലെങ്കിൽ മേലെ വയ്ക്കുന്ന വെക്റ്റർ ലേബെൽ ചേർക്കുക"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "പുരാവ്രിത്തം ചേർക്കുക"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "ദയവായി കാത്ത് നിൽക്കുക. മാത്രിക തുടങ്ങുന്നു..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "പുറത്ത് കടക്കുക"
-
-#: ../gui/wxpython/gmodeler/frame.py:128
-#, fuzzy
-msgid "Model"
-msgstr "മാത്രിക:"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "ലെയറിന്റെ പേർ"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
+#: ../gui/wxpython/datacatalog/tree.py:599
 #, fuzzy
-msgid "Redrawing model..."
+msgid "Rename map"
+msgstr "മാപ്പ്സെറ്റ് പേർ മാറ്റാൻ മാറ്റുക"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "ഓടുന്ന മാത്രിക..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-#, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "വർക്സ്പേസിലെ വിവരങ്ങൾ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:652
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr "വർക്സ്പേസിലെ രംഗസജ്ജീകരണം ഫയലിൽ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+msgid "No map selected for copying."
+msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
+msgid "Failed to copy map: new map has the same name"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "വർക്സ്പേസിലെ വിവരങ്ങൾ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "ഓടുന്ന മാത്രിക..."
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
-#, fuzzy
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"നിലവിലുള്ള വർക്സ്പേസിൽ ഒന്നുമില്ല. വർക്സ്പേസിലെ രംഗസജ്ജീകരണം മറ്റൊരു ഫയലിൽ സംഭരിച്ചുവെക്കുക "
-"വെക്കണമൊ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+msgid "Delete map"
+msgstr "മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "സജ്ജീകരണം"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
+msgid "g.remove completed"
+msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "ഗ്രാസ്സ് മൊഡൽ ഫയൽ (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/tree.py:835
 #, fuzzy
-msgid "Save model"
-msgstr "മാത്രിക തുടങ്ങുക"
+msgid "Maps can be copied only to current mapset"
+msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "നിലവിലുള്ള വർക്സ്പേസ് സംഭരിച്ചുവെക്കുകുവനുള്ള ഫയൽ തിരഞെടുക്കുക"
+msgid "&Paste"
+msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "ഗ്രാസ്സ് മാപ്പ് ഗണനയന്ത്രം"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "ഗ്രാസ്സ് മാപ്പ് ഗണനയന്ത്രം"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr ""
-
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
+"എപ്പൊളത്തെ ലൊക്കെഷൻ <%(loc)s.\n"
+" എപ്പൊളത്തെ മാപ്പ്സെറ്റ് <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Model exported to <%s>"
-msgstr ""
+msgid "Current mapset is <%s>."
+msgstr "നിലവിലുള്ള മാപ്പ്സെറ്റാൺ <%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
+msgid "Data catalog"
+msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "കമ്മാൺട് ലെയെർ ചേർക്കുക"
+msgid "Reload GRASS locations"
+msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, fuzzy, python-format
-msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
 msgstr ""
-"ഈ വർക്ക്സ്പെസ് ഫയൽ വായികാൻ സാദിക്കുന്നില്ല <%(file)s>.\n"
-"XML ഫയൽ വയിക്കുന്നത്തിൽ പിശക് <%(file)s. \n"
-"\n"
-"%(err)s"
-
-#: ../gui/wxpython/gmodeler/frame.py:887
-msgid "Please wait, loading model..."
-msgstr "ദയവായി കാത്ത് നിൽക്കുക. മാത്രിക തുടങ്ങുന്നു..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/datacatalog/toolbars.py:54
 #, fuzzy
-msgid "Writing current settings to model file failed."
-msgstr "വർക്സ്പേസിലെ രംഗസജ്ജീകരണം മറ്റുനതിൽ പിശക് (%s)"
+msgid "Search:"
+msgstr "മൊട്യൂൾ തിരയുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "വർക്സ്പേസിലെ വിവരങ്ങൾ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+msgid "Rasterizing..."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:556
+msgid "Failed to set default color table for edited raster map"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "തിരഞ്ഞെടുത്ത ലെയെർ എടുത്തു കളയുക"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "പുതിയ വര ഡിജിറ്റൈസ് ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "പുതിയ വര ഡിജിറ്റൈസ് ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "പുതിയ ബിന്ധു ഡിജിറ്റൈസ് ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "ഡിജിറ്റൈസേഷനിൽ നിന്നും പുറത്ത് വരിക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "ഒരുഭാഗം മാത്രം ചെറുതാക്കുക"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "പുറത്ത് കടക്കുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "മാത്രിക:"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+#, fuzzy
+msgid "Redrawing model..."
+msgstr "ഓടുന്ന മാത്രിക..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "വർക്സ്പേസിലെ വിവരങ്ങൾ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr "വർക്സ്പേസിലെ രംഗസജ്ജീകരണം ഫയലിൽ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "വർക്സ്പേസിലെ വിവരങ്ങൾ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"നിലവിലുള്ള വർക്സ്പേസിൽ ഒന്നുമില്ല. വർക്സ്പേസിലെ രംഗസജ്ജീകരണം മറ്റൊരു ഫയലിൽ സംഭരിച്ചുവെക്കുക "
+"വെക്കണമൊ?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "ഗ്രാസ്സ് മൊഡൽ ഫയൽ (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "മാത്രിക തുടങ്ങുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "നിലവിലുള്ള വർക്സ്പേസ് സംഭരിച്ചുവെക്കുകുവനുള്ള ഫയൽ തിരഞെടുക്കുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "കമ്മാൺട് ലെയെർ ചേർക്കുക"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, fuzzy, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+"ഈ വർക്ക്സ്പെസ് ഫയൽ വായികാൻ സാദിക്കുന്നില്ല <%(file)s>.\n"
+"XML ഫയൽ വയിക്കുന്നത്തിൽ പിശക് <%(file)s. \n"
+"\n"
+"%(err)s"
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
+msgid "Please wait, loading model..."
+msgstr "ദയവായി കാത്ത് നിൽക്കുക. മാത്രിക തുടങ്ങുന്നു..."
+
+#: ../gui/wxpython/gmodeler/frame.py:1073
+#, fuzzy
+msgid "Writing current settings to model file failed."
+msgstr "വർക്സ്പേസിലെ രംഗസജ്ജീകരണം മറ്റുനതിൽ പിശക് (%s)"
+
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "വർക്സ്പേസ് ഫയൽ തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr ""
 "ഒരു പ്രവൃത്തിയെയോ ഒരു പ്രസ്താവനയെയോ സൂചിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന വാക്കോ ചിഹ്നങ്ങളോ ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr ""
 "ഒരു പ്രവൃത്തിയെയോ ഒരു പ്രസ്താവനയെയോ സൂചിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന വാക്കോ ചിഹ്നങ്ങളോ ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "പുതിയ അഗ്രം ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "മാപ്പ്സെറ്റ്"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 msgid "Parameterized"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "ഓടുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 #, fuzzy
 msgid "Valid:"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr ""
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "മാത്രിക"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 msgid "Table:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 #, fuzzy
 msgid "model"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "പുതിയ അഗ്രം ചേർക്കുക"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "ഓടുന്ന മാത്രിക..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3111,100 +3489,100 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "മാത്രിക തുടങ്ങണൊ?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 #, fuzzy
 msgid "Name of element:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3212,256 +3590,256 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "ഫീച്ചറുകൾ കളയുക"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "വർക്സ്പേസ് ഫയൽ തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "പുറത്ത് കടക്കുക"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3469,1404 +3847,1389 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr ""
 "ഒരു പ്രവൃത്തിയെയോ ഒരു പ്രസ്താവനയെയോ സൂചിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന വാക്കോ ചിഹ്നങ്ങളോ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "ഫയൽ"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 #, fuzzy
 msgid "Height"
 msgstr "കനം:"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "കനം:"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "അപഗ്രഥനത്തിൻമേലുള്ള വഴികൾ"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് പേർ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "മാപ്പ്സെറ്റ്:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "മാത്രിക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "ലൈനൊ/അതിർത്തിയൊ മാറ്റം വരുത്തുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "നിറം:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "ഫയൽ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "വലുപ്പം"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "വലുപ്പം"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "മാപ്പുകൾ മറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "പുരാവ്രിത്തം ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "3D റസ്റ്റർ മാപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "പുരാവ്രിത്തിന്റെയും ഗ്രിഡിന്റെയും സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "നടത്തിപ്പ് "
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 #, fuzzy
 msgid "Vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr ""
 "ഒരു പ്രവൃത്തിയെയോ ഒരു പ്രസ്താവനയെയോ സൂചിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന വാക്കോ ചിഹ്നങ്ങളോ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "3D റസ്റ്റർ മാപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "മാത്രിക"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "പുരാവ്രിത്തം"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "എടത്: പുതിയ ബിന്ദു"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "ലൊക്കെഷൻ എടുത്തുകളയുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "പ്രസന്നമായ "
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "വലുപ്പം"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "എടത്: പുതിയ ബിന്ദു"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "തിരഞ്ഞെടുത്ത ലൊക്കെഷൻ എടുത്തുകളയുക"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "ഗ്രിഡ് കാണിക്കുക"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "മാപ്പിലെക്ക് കാര്യങൾ ചെർക്കുക"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "പുരാവ്രിത്തം"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "ജിയൊഡെസിക്ക് ലൈൻ ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "ഗ്രിഡ് അല്ലെങ്കിൽ മേലെ വയ്ക്കുന്ന വെക്റ്റർ ലേബെൽ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr ""
 "ഒരു പ്രവൃത്തിയെയോ ഒരു പ്രസ്താവനയെയോ സൂചിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന വാക്കോ ചിഹ്നങ്ങളോ ചേർക്കുക"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "ദയവായി കാത്ത് നിൽക്കുക."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "പൊകുക"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4874,73 +5237,73 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 msgid "SQL statement was not applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 msgid "SQL statement applied"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4949,189 +5312,189 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -5141,33 +5504,33 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5175,7 +5538,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5184,64 +5547,64 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5249,169 +5612,169 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "ലെയറിന്റെ പേർ"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, python-format
 msgid "Field statistics <%s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5420,198 +5783,199 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "ഫീച്ചറുകൾ കാണിക്കുകയൊ/മാറ്റം വരുത്തുകയൊ ചെയ്യുക"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "വർക്സ്പേസ് ഫയൽ അടയ്ക്കുക"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "ദയവായി കാത്ത് നിൽക്കുക. മാത്രിക തുടങ്ങുന്നു..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, fuzzy, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5622,622 +5986,622 @@ msgstr ""
 "\n"
 "%(err)s"
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "ജിയൊരെക്റ്റിഫയരിന്റ് സജ്ജീകരണം ഫയലിലേക്ക് ശേഖരിച്ചു '%s'."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "വർക്സ്പേസ്"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 msgid "Parameter for animation:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "ഒരുഭാഗം മാത്രം ചെറുതാക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "റ്റെക്സ്റ്റ് ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "ഫയൽ:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "ഫയൽ:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "നിക്ഷേപിക്കപ്പെട്ട ഡാറ്റാ"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 msgid "Please select maps or dataset first."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "ഷേഡട് റിലീഫ് മാപ്പ് ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6245,47 +6609,47 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6293,577 +6657,578 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "കാറ്റഗറിയുടെ പതിപ്പ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "തിരഞ്ഞെടുക്കുക %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "എടത്: പുതിയ ബിന്ദു"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 msgid "Points for analysis:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "അച്ചുതണ്ടിന്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "ഉത്പന്നം"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "നിക്ഷേപിക്കപ്പെട്ട ഡാറ്റാ"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "ഫീച്ചറുകൾ കളയുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 msgid "Loading tables..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 msgid "Analysing..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "സജ്ജീകരണം"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "ഓടുന്ന മാത്രിക..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 msgid "Point width:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "എടത്: പുതിയ ബിന്ദു"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "തിരഞ്ഞെടുത്ത ലൊക്കെഷൻ എടുത്തുകളയുക"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 msgid "Execute analysis"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "പൊകുക"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "അപഗ്രഥനത്തിൻമേലുള്ള വഴികൾ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "വിപുലത"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6873,11 +7238,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6887,375 +7252,402 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 #, fuzzy
 msgid "Starting 3D view mode..."
 msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "ദയവായി കാത്ത് നിൽക്കുക. മാത്രിക തുടങ്ങുന്നു..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr ""
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "റ്റെക്സ്റ്റ് ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 msgid "Save computational region to named region"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "മാപ്പ് ലയെറുകൾ"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "ജിയൊഡെസിക്ക് ലൈൻ ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "റസ്റ്റർ ഫ്ലോ ആരൊകൾ ചേർക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "മാപ്പ് അപഗ്രഥിക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "ദൂരം അളക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "ദൂരം അളക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "ഉപരിത്തില മാപ്പ് അപഗ്രഥനം ചെയ്യുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 msgid "Vector network analysis tool"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "മറ്റുവാൻ വേണ്ടി മൗസിന്‍റെ ഒരു ബട്ടണ്‍ അമര്‍ത്തിപ്പിടിച്ചുകൊണ്ട് ചലിപ്പിക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "വലുതക്കുവാൻ വേണ്ടി മൗസിന്‍റെ ഒരു ബട്ടണ്‍ അമര്‍ത്തിപ്പിടിച്ചുകൊണ്ട് ചലിപ്പിക്കുക "
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "ചെറുതാക്കുവാൻ വേണ്ടി മൗസിന്‍റെ ഒരു ബട്ടണ്‍ അമര്‍ത്തിപ്പിടിച്ചുകൊണ്ട് ചലിപ്പിക്കുക"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "ഡിജിറ്റൈസേഷനിൽ നിന്നും പുറത്ത് വരിക"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
@@ -7264,323 +7656,323 @@ msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റ
 msgid "Create new configuration file for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7588,188 +7980,200 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "ലെയറിന്റെ പേർ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 msgid "Distance between units:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "മാത്രിക തുടങ്ങുക"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "വർക്സ്പേസ്"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-#, fuzzy
-msgid "Map layers"
-msgstr "മാപ്പ് ലയെറുകൾ"
-
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
-msgstr "ആജ്നയുടെ ഉത്തരം വരുന്ന സ്ഥലം"
-
 #: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "ലയെറുകൾ"
+
+#: ../gui/wxpython/lmgr/frame.py:339
 #, fuzzy
-msgid "Search modules"
-msgstr "മൊട്യൂൾ തിരയുക"
+msgid "Console"
+msgstr "ആജ്നയുടെ ഉത്തരം വരുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
+msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
+
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7777,186 +8181,173 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"എപ്പൊളത്തെ ലൊക്കെഷൻ <%(loc)s.\n"
-" എപ്പൊളത്തെ മാപ്പ്സെറ്റ് <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "വർക്സ്പേസിലെ വിവരങ്ങൾ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "വർക്സ്പേസിലെ രംഗസജ്ജീകരണം ഫയലിൽ സംഭരിച്ചുവെക്കുക വെക്കണമൊ ?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "മാപ്പ് പ്രദർശിപിച്ചിരിക്കുന്ന സ്ഥലം അടയ്ക്കുക %d"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ '%s' കണ്മാനില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "നിലവിലുള്ള മാപ്പ്സെറ്റാൺ <%s>"
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
+msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -7964,61 +8355,61 @@ msgstr ""
 "നിലവിലുള്ള വർക്സ്പേസിൽ ഒന്നുമില്ല. വർക്സ്പേസിലെ രംഗസജ്ജീകരണം മറ്റൊരു ഫയലിൽ സംഭരിച്ചുവെക്കുക "
 "വെക്കണമൊ?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "പുതിയ വർക്സ്പേസ് ഉണ്ടാക്കണമൊ?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "വർക്സ്പേസ് തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 #, fuzzy
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "പഴയ ഗ്രാസ്സ് വർക്ക്സ്പെസ് ഫയൽ (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "ദയവായി ക്ഷമിക്കുക. വർക്സ്പേസ് തുടങ്ങുന്നു..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "പഴയ ഗ്രാസ്സ് വർക്ക്സ്പെസ് ഫയൽ (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "നിലവിലുള്ള വർക്സ്പേസ് സംഭരിച്ചുവെക്കുകുവനുള്ള ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 #, fuzzy
 msgid "Writing current settings to workspace file failed."
 msgstr "വർക്സ്പേസിലെ രംഗസജ്ജീകരണം മറ്റുനതിൽ പിശക് (%s)"
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "പുതിയ മാപ്പ്സെറ്റിൻടേ പേർ എഴുതുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8026,7 +8417,7 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr ""
@@ -8034,7 +8425,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr ""
@@ -8042,27 +8433,27 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8073,56 +8464,53 @@ msgstr ""
 "%s \n"
 "മാപ്പ് ട്രീയിൽ നിന്നും മാറ്റണമൊ?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "പുറത്ത് കടക്കുക"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 #, fuzzy
 msgid "Link external raster data"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
@@ -8139,12 +8527,14 @@ msgid "Set raster output format"
 msgstr "അക്ഷരം തിരഞ്ഞെടുക്കുക"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 #, fuzzy
 msgid "Link external vector data"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
@@ -8168,7 +8558,7 @@ msgstr ""
 msgid "Add command layer"
 msgstr "കമ്മാൺട് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "പുറത്തു കടക്കുക"
@@ -8222,8 +8612,8 @@ msgid "Add rhumbline layer"
 msgstr "റമ്പ് ലൈൻ ലയെർ ചേർക്കുക"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
@@ -8247,311 +8637,303 @@ msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
 msgid "Background vector map"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "തിരഞ്ഞെടുത്ത ലെയെർ എടുത്തു കളയുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "പുതിയ മാപ്പ്സെറ്റിൻടേ പേർ എഴുതുക"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 #, fuzzy
 msgid "Start new map display"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "പുതിയ വർക്സ്പേസ് ഉണ്ടാക്കുക(Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "നിലവിലുള്ള വർക്സ്പേസ് തുറക്കുക(Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "എപ്പെളത്തെ വർക്സ്പേസ് ശേഖരിച്ച് വയ്ക്കുക(Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "വെക്റ്റർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "വെക്റ്റർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "ഗ്രിഡ് അല്ലെങ്കിൽ മേലെ വയ്ക്കുന്ന വെക്റ്റർ ലേബെൽ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 #, fuzzy
 msgid "Import/link raster or vector data"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 #, fuzzy
 msgid "Graphical Modeler"
 msgstr "പുറത്ത് കടക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "ആട്രിബൂട്ട് പട്ടിക കാണിക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8559,618 +8941,625 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "വർക്സ്പേസ് ഫയൽ തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "റസ്റ്റർ സെലിന്റെ എണം ചേർക്കുക"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "റസ്റ്റർ സെലിന്റെ എണം ചേർക്കുക"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "വിശദ വിവരങ്ങൾ:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "അപഗ്രഥനം വരക്കുകയൊ/വീണ്ടും വരക്കുകയൊ ചെയ്യുക."
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "അപഗ്രഥനത്തിൻമേലുള്ള വഴികൾ"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "ഡിസ്പ്ലേ ഗ്രഫിക്സ് ഫയലിൽ ശേഖരിച്ച് വയ്ക്കുക"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "എടത്: പുതിയ ബിന്ദു"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "റസ്റ്റർ സെലിന്റെ എണം ചേർക്കുക"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "ഗ്രൂപ്പ് തിരഞെടുക്കുക:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "കനം:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "ജിയൊരെക്റ്റിഫയരിന്റ് സജ്ജീകരണം ഫയലിലേക്ക് ശേഖരിച്ചു '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് പേർ മാറ്റുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "അച്ചുതണ്ടിന്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "പുരാവ്രിത്തിന്റെയും ഗ്രിഡിന്റെയും സജ്ജീകരണം"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "ഗ്രിഡ് കാണിക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "ജിയൊരെക്റ്റിഫയരിന്റ് സജ്ജീകരണം ഫയലിലേക്ക് ശേഖരിച്ചു '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "GUI സജ്ജീകരണം"
+msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "ഫീച്ചറുകൾ കാണിക്കുകയൊ/മാറ്റം വരുത്തുകയൊ ചെയ്യുക"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
+msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "സഹായം"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
-#, fuzzy
-msgid "Invalid input coordinates"
-msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
+#: ../gui/wxpython/tplot/frame.py:724
+msgid "Seed point outside the current region"
+msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "ഫയൽ"
 
@@ -9178,8 +9567,8 @@ msgstr "ഫയൽ"
 msgid "Workspace"
 msgstr "വർക്സ്പേസ്"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "പുതിയത്"
 
@@ -9187,7 +9576,7 @@ msgstr "പുതിയത്"
 msgid "Create new workspace"
 msgstr "പുതിയ വർക്സ്പേസ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "തുറക്കുക"
 
@@ -9195,12 +9584,12 @@ msgstr "തുറക്കുക"
 msgid "Load workspace from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr ""
 
@@ -9221,7 +9610,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
@@ -9256,7 +9645,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "ഗ്രിഡ് ലയെർ ചേർക്കുക"
@@ -9926,23 +10315,23 @@ msgstr "ലെയറുകളുടെ പട്ടിക"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "മാത്രിക തുടങ്ങുക"
 
@@ -9981,16 +10370,16 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
@@ -10005,7 +10394,7 @@ msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന
 msgid "Launches script file."
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "അടയ്ക്കുക"
@@ -10015,8 +10404,8 @@ msgstr "അടയ്ക്കുക"
 msgid "Quit wxGUI session."
 msgstr "ഗ്രാസ്സിലെക്കു കയറുക"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "പുറത്ത് കടക്കുക"
@@ -10025,7 +10414,7 @@ msgstr "പുറത്ത് കടക്കുക"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "സജ്ജീകരണം"
 
@@ -10199,7 +10588,7 @@ msgstr "ലെയറുകളുടെ പട്ടിക"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr ""
 
@@ -11213,7 +11602,7 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr ""
 
@@ -11460,8 +11849,8 @@ msgid "Develop vector map"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr ""
 
@@ -12312,12 +12701,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -13369,24 +13758,29 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
+#, fuzzy
 msgid "Temporal plot tool"
-msgstr ""
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 msgid "Plot temporal values."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "സഹായം"
@@ -13414,7 +13808,7 @@ msgid "Prints system information"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr ""
 
@@ -13428,304 +13822,313 @@ msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറ
 msgid "Attribute table manager"
 msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "വർക്സ്പേസ് ഫയൽ അടയ്ക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 #, fuzzy
 msgid "Quit modeler"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 #, fuzzy
 msgid "Close modeler window"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "മാത്രിക:"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "കമ്മാൺട് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "ഐച്ഛിക"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "കമ്മാൺട് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "അഗ്രം എടുത്തു കളയുക"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 #, fuzzy
 msgid "Run entire model"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 #, fuzzy
 msgid "Validate model"
 msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 #, fuzzy
 msgid "Validate entire model"
 msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "സ്ക്രിപ്റ്റ് ഫയൽ തുടങ്ങുന്നു '%s'..."
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "പുറത്ത് കടക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "3D റസ്റ്റർ മാപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "വെക്റ്റർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "പുരാവ്രിത്തം ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "മാപ്പിലെക്ക് കാര്യങൾ ചെർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "ജിയൊഡെസിക്ക് ലൈൻ ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "റസ്റ്റർ ഫ്ലോ ആരൊകൾ ചേർക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "പുറത്ത് കടക്കുക"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "ഫയൽ"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13733,12 +14136,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13746,308 +14149,340 @@ msgid ""
 "Details: %(error)s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "കാറ്റഗറിയുടെ പതിപ്പ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "ഫീച്ചറുകൾ കളയുക"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "മാപ്പ് <%s> കണ്മനില്ല"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "ആജ്ന നടപക്കുക(Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "മൊട്യൂൾ തിരയുക"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "ആജ്ഞയുടെ ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "മൂലകത്തിന്റെ പട്ടിക"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "ആജ്നയുടെ ഉത്തരം വരുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "മാപ്പ് മായിച്ചു കളയുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "പുരാവ്രിത്തിന്റെയും ഗ്രിഡിന്റെയും സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "ലയെറുകൾ"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "പ്രസന്നമായ "
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14059,82 +14494,92 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "ഫയൽ:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "തെറ്റ്: ലൊക്കെഷൻ <%s> കണ്മാനില്ല"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "അക്ഷരം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+msgid "Example"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14143,268 +14588,355 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "മാപ്പ്സെറ്റ്"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "ഉടമസ്ഥൻ"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 msgid "east, north"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-#, fuzzy
-msgid "Load settings:"
-msgstr "സജ്ജീകരണം കാണിക്കുക"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+msgid "Load:"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+msgid "Set parameters for the script"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "ആജ്ന നടപക്കുക(Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "ഐച്ഛിക"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "ആജ്ന നടപക്കുക(Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "ആജ്ന നടപക്കുക(Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "ആവശ്യമായത്"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[അനേകം]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "തിരഞ്ഞെടുക്കുക %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 msgid "or enter values directly:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "ലയെറുകൾ"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "ലെയറിന്റെ പേർ"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "അപഗ്രഥനത്തിൻമേലുള്ള വഴികൾ"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "ഹസ്തവിഷയകമായ"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14412,46 +14944,46 @@ msgid ""
 "Reason: %s"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "തെറ്റ് %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
@@ -14461,577 +14993,458 @@ msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷന
 msgid "Location or mapset is not defined."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "ഗ്രൂപ്പ് ഉണ്ടാക്കുകയൊ/ മിരുത്തുകയൊ ചെയ്യുക..."
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "മാപ്പുകൾ മറ്റുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "മാപ്പിന്റെ പട്ടിക:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "മാപ്പ്സെറ്റ്:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
 msgid "Invert selection"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "ലെയറുകളുടെ പട്ടിക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "ലെയറുകളുടെ പട്ടിക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "ലെയറുകളുടെ %s പട്ടിക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "ലയെറുകൾ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "ലെയറിന്റെ പേർ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "അപഗ്രഥനത്തിൻമേലുള്ള വഴികൾ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-#, fuzzy
-msgid "Options"
-msgstr "ഐച്ഛിക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "തിരഞ്ഞെടുക്കപെട്ട ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "അതാര്യമായ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "അറിയിപ്പ്"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "പ്രസന്നമായ "
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "പ്രസന്നമായ "
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "ലയെറുകൾ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "ലയെറുകൾ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
@@ -15135,1330 +15548,1503 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "മാത്രിക"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
+msgid "Source input"
+msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "ഫയൽ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "ഉത്പന്നം"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "തന്നിരിക്കുന്ന വിവരങ്ങൾ ഹാര്‍ഡ് ഡിസ്കിൽ രേഖപ്പെടുത്തി സംഭരിച്ചുവെക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "ഫയൽ:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "വിപുലത"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "ഫീച്ചറുകൾ കളയുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "പുരാവ്രിത്തം കാണിക്കുക"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "മാപ്പ് <%s> കണ്മനില്ല"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "മാപ്പ്സെറ്റ്:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "മാപ്പ് ലയെറുകൾ"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "GUI സജ്ജീകരണം"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "ആവശ്യമായത്"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "ലയെറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "പുരാവ്രിത്തിന്റെയും ഗ്രിഡിന്റെയും സജ്ജീകരണം"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "ലയെറുകൾ"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
+msgid "Add default"
 msgstr "ലെയെർ ഗ്രൂപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "പൊതുവായ സജ്ജീകരണം"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "പുരാവ്രിത്തിന്റെയും ഗ്രിഡിന്റെയും സജ്ജീകരണം"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "പുരാവ്രിത്തിന്റെയും ഗ്രിഡിന്റെയും സജ്ജീകരണം"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "സജ്ജീകരണം മാറ്റുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "ലെയറിന്റെ പേർ"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "ലെയറിന്റെ പേർ"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "തിരഞ്ഞെടുത്ത ലെയെർ എടുത്തു കളയുക"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "ദയവായി കാത്ത് നിൽക്കുക. മാത്രിക തുടങ്ങുന്നു..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "മാപ്പ്സെറ്റ് എടുത്തുകളയാൻ പറ്റുനില്ല"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "അടയ്ക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "അടയ്ക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "ആട്രിബൂട്ട് പട്ടിക കാണിക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "സജ്ജീകരണം"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "ആട്രിബൂട്ട് പട്ടിക കാണിക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "ദയവായി കാത്ത് നിൽക്കുക."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "ഗ്രാസ്സ് മാപ്പ് ഗണനയന്ത്രം"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "ഗ്രാസ്സ് മാപ്പ് ഗണനയന്ത്രം"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 #, fuzzy
 msgid "Operands"
 msgstr "തുറക്കുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "വർക്സ്പേസ് സംഭരിച്ചു വെക്കുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 #, fuzzy
 msgid "add"
 msgstr "ചേർക്കുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 #, fuzzy
 msgid "multiply"
 msgstr "[അനേകം]"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:95
-msgid "&Fetch"
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "ഐച്ഛിക"
+
+#: ../gui/wxpython/modules/extensions.py:113
+msgid "&Fetch"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:114
+msgid "Fetch list of available modules from GRASS Addons SVN repository"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:118
+msgid "&Install"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:120
+msgid "Install selected add-ons GRASS module"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:123
+msgid "Show g.extension manual page"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:187
+msgid "Extension not defined"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:211
+msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/extensions.py:238
+msgid "Install"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:243
+#, fuzzy
+msgid "Show manual page"
+msgstr "സജ്ജീകരണം കാണിക്കുക"
+
+#: ../gui/wxpython/modules/extensions.py:343
+#, fuzzy, python-format
+msgid "Unable to load extensions. %s"
+msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
+
+#: ../gui/wxpython/modules/extensions.py:389
+#, fuzzy
+msgid "Manage installed GRASS Addons extensions"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/extensions.py:405
+#, fuzzy
+msgid "List of installed extensions"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/extensions.py:413
+#, fuzzy
+msgid "Uninstall"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/extensions.py:415
+#, fuzzy
+msgid "Uninstall selected Addons extensions"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/extensions.py:419
+msgid "Reinstall"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:421
+#, fuzzy
+msgid "Reinstall selected Addons extensions"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "അഗ്രം എടുത്തു കളയുക"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "വിപുലത"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "ലെയറുകളുടെ പട്ടിക"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "ലെയറുകളുടെ %s പട്ടിക"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
-msgid "Fetch list of available modules from GRASS Addons SVN repository"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/extensions.py:100
-msgid "&Install"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "ഉപയോഗിക്കുന്ന ആളുടെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/modules/extensions.py:101
-msgid "Install selected add-ons GRASS module"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/modules/extensions.py:104
-msgid "Show g.extension manual page"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
 
-#: ../gui/wxpython/modules/extensions.py:168
-msgid "Extension not defined"
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
-msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
-msgid "Install"
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
 #, fuzzy
-msgid "Show manual page"
-msgstr "സജ്ജീകരണം കാണിക്കുക"
-
-#: ../gui/wxpython/modules/extensions.py:315
-#, fuzzy, python-format
-msgid "Unable to load extensions. %s"
-msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
+msgid "No layers selected. Operation canceled."
+msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/import_export.py:431
 #, fuzzy
-msgid "Manage installed GRASS Addons extensions"
-msgstr "ലെയറുകളുടെ പട്ടിക"
+msgid "Unable to determine number of raster bands"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/import_export.py:640
 #, fuzzy
-msgid "List of installed extensions"
-msgstr "ലെയറുകളുടെ പട്ടിക"
+msgid "Define output format for vector data"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/import_export.py:642
 #, fuzzy
-msgid "Uninstall"
-msgstr "ലെയറുകളുടെ പട്ടിക"
+msgid "Define output format for raster data"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:707
 #, fuzzy
-msgid "Uninstall selected Addons extensions"
-msgstr "ലെയറുകളുടെ പട്ടിക"
+msgid "No data source selected."
+msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/modules/extensions.py:372
-msgid "Reinstall"
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/import_export.py:758
 #, fuzzy
-msgid "Reinstall selected Addons extensions"
-msgstr "ലെയറുകളുടെ പട്ടിക"
+msgid "No layers selected."
+msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/import_export.py:836
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
+msgid "Reprojection"
+msgstr "അപഗ്രഥനത്തിൻമേലുള്ള വഴികൾ"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "അഗ്രം എടുത്തു കളയുക"
+msgid "Layers to be reprojected"
+msgstr "ലെയറിന്റെ പേർ"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "വിപുലത"
+msgid "Reproject selected layers"
+msgstr "തിരഞ്ഞെടുക്കപെട്ട ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "പയ്തണ്ണ് ഗ്രന്ഥശാല കാന്മനില്ല"
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "നിക്ഷേപിക്കപ്പെട്ട ഡാറ്റാ"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 #, fuzzy
 msgid "Name for the output raster map:"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "തയ്യാർ."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 #, fuzzy
 msgid "Block size:"
 msgstr "അടയാളത്തിന്റ്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "മാത്രിക:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "ലൈനൊ/അതിർത്തിയൊ മാറ്റം വരുത്തുക"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "ലൈനൊ/അതിർത്തിയൊ വിഘടിപിക്കുക"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 #, fuzzy
 msgid "remove duplicate area centroids"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "ലൈനൊ/അതിർത്തിയൊ വിഘടിപിക്കുക"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 #, fuzzy
 msgid "remove small angles at nodes"
 msgstr "മാപ്പ് ലയെർ കളയുക"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "ലൈനൊ/അതിർത്തിയൊ മാറ്റം വരുത്തുക"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16466,20 +17052,20 @@ msgid ""
 "%s"
 msgstr "മപ്പ് ലയരുകളൊന്നും തിരഞ്ഞെടുക്കപ്പെട്ടിട്ടില്ല. ആജ്ഞ തിരസ്കരിക്കപെട്ടു."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16488,184 +17074,179 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "ആജ്നയുടെ ഉത്തരം വരുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "വിശദ വിവരങ്ങൾ:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "മാപ്പ് ലയെർ കളയുക"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "മാപ്പ് വീണ്ടും പ്രദർശിപിക്കുക"
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "മാപ്പ് വീണ്ടും പ്രദർശിപിക്കുക"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "വിശദ വിവരങ്ങൾ:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "മാപ്പ്സെറ്റിലെക്ക് മാറാൻ കഴിയുനില്ല <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "മാപ്പ് വീണ്ടും പ്രദർശിപിക്കുക"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr ""
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
-msgstr ""
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
+msgstr "വർക്സ്പേസ് ഫയൽ തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "വർക്സ്പേസ് ഫയൽ തുറക്കാൻ പറ്റുനില്ല <%s>"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16674,175 +17255,180 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "മാപ്പ് <%s> കണ്മനില്ല"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "തെറ്റ്:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "പെട്ടി"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -16850,12 +17436,12 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -16863,272 +17449,300 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "ആജ്ഞ നടപ്പാക്കുന്നതിൽ പാളിച: '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "പ്രൊജെക്റ്റ് ഇരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "മാത്രിക തുടങ്ങുക"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+msgid "Advanced methods:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "ഫയൽ:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "തുറക്കെണ്ട GRC ഫയൽ തിരഞെടുക്കുക"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+msgid "IAU code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "ഫയൽ തിരഞ്ഞെടുക്കുക"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
+msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17136,246 +17750,250 @@ msgid ""
 "Details: %(err)s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+msgid "IAU code missing."
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, fuzzy, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17383,779 +18001,779 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "ഐച്ഛിക"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "മാപ്പ്സെറ്റിന്റെ പേർ:"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "ജിസ് ഡാറ്റാ അടങ്ങിയിരിക്കുന്ന സ്ഥലം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "വർക്സ്പേസ് ഫയൽ അടയ്ക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "മാപ്പ് അവതരിപിച്ചിരിക്കുന്ന സ്ഥലം"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "മാത്രിക തുടങ്ങുക"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "നിറം:"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "തുടാങ്ങാനുള്ള മാത്രിക തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "പുതിയ ലൊക്കെഷൻ എഴുതുക"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "പ്രസന്നമായ "
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 #, fuzzy
 msgid "color:"
 msgstr "നിറം:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "സജ്ജീകരണം"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "ജിയൊഡെസിക്ക് ലൈൻ ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "ഫീച്ചറുകൾ കാണിക്കുകയൊ/മാറ്റം വരുത്തുകയൊ ചെയ്യുക"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "ലെയറുകളുടെ പട്ടിക"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "ജിയൊഡെസിക്ക് ലൈൻ ലയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "ഉപരിത്തില മാപ്പ് അപഗ്രഥനം ചെയ്യുക"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "നടത്തിപ്പ് "
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "കനം:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "അഗ്രം നീക്കുക"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "കനം:"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "ഗ്രിഡിന്റെ നിറം"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "ജിയൊരെക്റ്റിഫയരിന്റ് സജ്ജീകരണം ഫയലിലേക്ക് ശേഖരിച്ചു '%s'."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18165,7 +18783,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18177,23 +18795,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18201,7 +18819,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18212,31 +18830,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18247,67 +18865,67 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "ലൊക്കെഷന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "സജ്ജീകരണം കാണിക്കുക"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "മാപ്പ്സെറ്റ് പേർ മാറ്റാൻ മാറ്റുക"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "ഗ്രിഡ് കാണിക്കുക"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "കാറ്റഗറിയുടെ പതിപ്പ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 msgid "Move category down"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട raster ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -18317,210 +18935,222 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "3D റസ്റ്റർ മാപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "ഈ പേരിലുള്ള വർക്സ്പേസ്<%s> നിലവുണ്ട്. നിങ്ങൾക്ക് ഇതിൽ തന്നെ സംഭരിച്ചു വെക്കണമൊ?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 msgid "Color of selection polygon vertex:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "നിറം തിരഞ്ഞെടുക്കുക"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "അച്ചുതണ്ടിന്റെ സജ്ജീകരണം"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "3D റസ്റ്റർ മാപ്പ് ചേർക്കുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "പുതിയ പ്രദർശന സ്ഥലം ഉണ്ടാക്കുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr ""
 "തിരഞ്ഞെടുത്ത രസറ്ററൊ വെക്റ്ററൊ മപ്പുകളുടെ വിവരങ്ങള്‍ക്കായി ഒരു ഡേറ്റാബേസില്‍ അന്വേഷണം നടത്തുന്നത് "
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "തിരഞ്ഞെടുക്കപെട്ട മാപ്പ് ലയെറുകൾ കളയണമൊ?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "പുതിയ അഗ്രം ചേർക്കുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "ലൊക്കെഷൻ പേർ മാറ്റുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "അഗ്രം നീക്കുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "അഗ്രം നീക്കുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "അഗ്രം എടുത്തു കളയുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "അഗ്രം എടുത്തു കളയുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr ""
 "ഒരു പ്രവൃത്തിയെയോ ഒരു പ്രസ്താവനയെയോ സൂചിപ്പിക്കാന്‍ ഉപയോഗിക്കുന്ന വാക്കോ ചിഹ്നങ്ങളോ ചേർക്കുക"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ് പേർ മാറ്റുക"
 
 #, fuzzy
+#~ msgid "Map layers"
+#~ msgstr "മാപ്പ് ലയെറുകൾ"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "മൊട്യൂൾ തിരയുക"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "പുതിയ മാപ്പ്സെറ്റ് ഉണ്ടാക്കാൻ പറ്റുനില്ല: %s"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "മാപ്പ് <%s> കണ്മനില്ല"
 
@@ -18532,6 +19162,26 @@ msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ
 #~ msgstr "പുറത്തു കടക്കുക"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "ധര്‍മ്മ്യമായ അണിയണിയായി നിറുത്തുക"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "പുരാവ്രിത്തം കാണിക്കുക"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "മാത്രിക പരിശൊദിക്കുന്നു.."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "നാമം മാറ്റുക"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "സജ്ജീകരണം കാണിക്കുക"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "ലെയറുകളുടെ പട്ടിക"
 
@@ -18544,20 +19194,20 @@ msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ
 #~ msgstr "രാസ്റ്റെർ മാപ്പ് ലെയെർ ചേർക്കുക"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "ഐച്ഛിക"
+#~ msgid "Load settings:"
+#~ msgstr "സജ്ജീകരണം കാണിക്കുക"
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
+#~ msgid "Common export formats using OGR"
+#~ msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
 
 #, fuzzy
-#~ msgid "Common export formats using OGR"
-#~ msgstr "തിരഞ്ഞെടുക്കപെട്ട vector ലയെറുകളെ ഇറക്കുമതി ചെയ്യുക"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "മാപ്പ്സെറ്റിന്റ്റെ ഉറവിടം തിരഞെടുക്കുക"
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
@@ -18604,29 +19254,28 @@ msgstr "തിരഞ്ഞെടുത്ത മാപ്പ്സെറ്റ
 #~ msgid "Start &GRASS"
 #~ msgstr "തുടങ്ങുക"
 
-#, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "മാപ്പ്സെറ്റ് ഉണ്ടാക്കുക"
-
 #~ msgid "Rename mapset"
 #~ msgstr "മാപ്പ്സെറ്റ് പേർ മാറ്റാൻ മാറ്റുക"
 
 #~ msgid "Rename location"
 #~ msgstr "ലൊക്കെഷൻ പേർ മാറ്റാൻ മാറ്റുക"
 
+#~ msgid "Delete mapset"
+#~ msgstr "മാപ്പ്സെറ്റ് എടുത്തുകളയുക"
+
 #~ msgid "Delete location"
 #~ msgstr "ലൊക്കെഷൻ എടുത്തുകളയുക"
 
 #~ msgid "Welcome to GRASS GIS"
 #~ msgstr "ഗ്രാസ്സ് ജിസ്സിലെക്ക് സ്വാഗതം"
 
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "പ്രൊജക്റ്റിന്റെ ലൊക്കെഷനും മാപ്പ്സെറ്റും തിരഞ്ഞെടുക്കുക"
-
 #~ msgid "Starting GRASS for the first time"
 #~ msgstr "ഗ്രാസ്സ് ആദ്യമായി തുടങ്ങുക"
 
 #, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "ലയെർ നടത്തിപ്പുകാരൻ"
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "ലയറുകൾ ലയെർ മാനെജരിലെക്കു വരുത്തുക"
diff --git a/locale/po/grasswxpy_pl.po b/locale/po/grasswxpy_pl.po
index d8b6c41..a24e3ce 100644
--- a/locale/po/grasswxpy_pl.po
+++ b/locale/po/grasswxpy_pl.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_pl\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2016-08-28 22:34+0200\n"
 "Last-Translator: Milena Nowotarska <do.milenki * gmail.com>\n"
 "Language-Team: Polish <grass-translations at lists.osgeo.org>\n"
@@ -19,175 +19,176 @@ msgstr ""
 "X-Generator: Poedit 1.8.8\n"
 "X-Poedit-Bookmarks: 977,-1,-1,-1,-1,-1,-1,-1,-1,-1\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. Wybierz katalog danych GRASS-a:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. Wybierz lokacją GRASS"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. Wybierz mapset GRASS-a"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "Ścieżka bazy danych GRASS GIS zawiera Lokacje."
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid "All data in one Location is in the same  coordinate reference system (projection). One Location can be one project. Location contains Mapsets."
 msgstr "Wszystkie dane w Lokacji mają ten sam układ współrzędnych Jedna Lokacja może być jednym projektem. Lokacja zawiera Mapsty."
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid "Mapset contains GIS data related to one project, task within one project, subregion or user."
 msgstr "Mapset zawiera dane GIS należące do jednego projektu, zadania w projekcie, podregionu lub użytkownika."
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "Rozpocznij sesję &GRASS-a"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Przeglądaj"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "&Nowy"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr ""
 "Utwórz nowy Mapset\n"
 "w wybranej Lokacji"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "No&wa"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid "Create a new location using location wizard. After location is created successfully, GRASS session is started."
 msgstr "Utwórz Lokację za pomocą kreatora Lokacji. Po utworzeniu Lokacji, rozpocznie się sesja GRASS."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "Zmień n&azwę"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Zmień nazwę wybranej lokacji"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "Us&uń"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Usuń wybraną lokację"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Zmień nazwę"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Zmień nazwę wybranego mapsetu"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "&Usuń"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Usuń wybrany mapset"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Menadżer warstw GRASS GIS"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Rozpocznij sesję GRASS-a"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446
+#: ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Błąd"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "Nie można ustawić bazy danych GRASS. Sprawdź ustawienia locale."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "BŁĄD: Lokacja <%s> nie została znaleziona\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "BŁĄD: Mapset <%s> nie został znaleziony\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Niepoprawna linia w pliku GISRC(%s):%s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "Błąd: {text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr "Czy chcesz zaimportować <%(name)s> do nowo utworzonej Lokacji?"
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "Zaimportować dane?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Czy chcesz utworzyć  nowy Mapset?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Utwórz nowy mapset"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Lokacja <%s> została utworzona"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "Czy chcesz teraz zdefiniować zakres i rozdzielczość regionu?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
@@ -196,19 +197,19 @@ msgstr ""
 "Import<%(name)s> nie powiódł się.\n"
 "Powód: %(msg)s"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid "Data file <%(name)s> imported successfully. The location's default region was set from this imported map."
 msgstr "Plik <%(name)s> został pomyślnie zaimportowany. Domyślny region Lokacji został ustawiony do zaimportowanej mapy."
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr "Mapset <PERMANENT> jest potrzebny do utworzenia prawidłowej lokacji GRASS.\\n \\n Nazwy tego mapsetu to nie można zmienić."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -218,12 +219,12 @@ msgstr ""
 "Bieżąca nazwa: %s\n"
 "Wprowadź nową nazwę:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Wiadomość"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -234,7 +235,7 @@ msgstr ""
 "\n"
 "Mapset <%s> już istnieje w lokacji."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -245,7 +246,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -256,7 +257,7 @@ msgstr ""
 "\n"
 "Lokacja <%s> już istnieje w bazie danych GRASS."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -267,7 +268,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -277,7 +278,7 @@ msgstr ""
 " \n"
 " Tego mapsetu nie można usunąć."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <%(location)s>?\n"
@@ -288,11 +289,11 @@ msgstr ""
 "\n"
 "WSZYSTKIE MAPY zawarte w tym mapsecie będą NIEODWRACALNIE USUNIĘTE!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Nie można usunąć mapsetu"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -303,39 +304,39 @@ msgstr ""
 "\n"
 "WSZYSTKIE MAPY zawarte w tej lokacji będą NIEODWRACALNIE USUNIĘTE!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Nie można usunąć lokacji"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "Nie można ustawić bazy danych GRASS. Sprawdź ustawienia locale."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid "No GRASS Location found in '%s'. Create a new Location or choose different GRASS database directory."
 msgstr "Nie znaleziono Lokacji GRASS w '%s'. Utwórz nową lokację lub wybierz inną ścieżkę bazy danych GRASS."
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Katalog %s nie istnieje."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Wybierz katalog danych GIS"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Wpisz nazwę nowego mapsetu:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Plik <%s> już istnieje."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please consider to use another name for your mapset.\n"
@@ -346,17 +347,17 @@ msgstr ""
 "\n"
 "Czy na pewno chcesz utworzyć ten Mapset?"
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Zmień nazwę wybranego mapset"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Nie można utworzyć nowego mapsetu: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -373,11 +374,11 @@ msgstr ""
 "\n"
 "Czy chcesz spróbować usunąć .gislock (zauważ, że musisz mieć uprawnienia do tej operacji) i kontynuować?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "Znaleziono plik blokady"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -387,7 +388,7 @@ msgstr ""
 "\n"
 "Jeśli jest otwarta inna sesja GRASS, dane mogą zostać uszkodzone podczas tej operacji. Sprawdź ponownie w menadżerze procesów, aby się upewnić..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -398,16 +399,16 @@ msgstr ""
 "\n"
 "Szczegóły: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid "Name <%(name)s> is not a valid name for location or mapset. Please use only ASCII characters excluding %(chars)s and space."
 msgstr "Nazwa <%(name)s> jest nieprawidłowa dla lokacji lub mapsetu. Użyj tylko znaków ASCII, bez %(chars)s i spacji."
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Nieprawidłowa nazwa"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid "GRASS needs a directory (GRASS database) in which to store its data. Create one now if you have not already done so. A popular choice is \"grassdata\", located in your home directory. Press Browse button to select the directory."
 msgstr "GRASS potrzebuje katalogu, do przechowywania danych. Załóż go teraz, jeśli nie zostało to zrobione. Zwykle jest to \"grassdata\", znajdujący się w katalogu domowym."
@@ -426,140 +427,140 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Wystąpił problem z wczytaniem motywu ikon. Powód: %s"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Lista narzędzi mapy"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Pasek narzędzi"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Narzędzia różne"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 msgid "Digitization Toolbar"
 msgstr "Narzędzia digitalizacji"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr "Wydruki"
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Drukuj zawartość okna"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Ekran docelowy"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 #, fuzzy
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Dopasuj docelowe wyświetlanie do źródłowego"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 #, fuzzy
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Dopasuj źródłowe wyświetlanie do docelowego"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Rozdzielczość obrazu"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Rozdzielczość obrazu"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr "Wszystkie zmiany zostaną utracone. Czy chcesz kontynuować?"
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importuj mapę wektorową"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Nie można utworzyć mapy wektorowej <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr "Mapa wektorowa <%s> zawiera punkty lub linie, te obiekty są ignorowane."
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nie można otworzyć mapy wektorowej <%s>"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Nie można otworzyć mapy wektorowej <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Nie można utworzyć mapy wektorowej."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Nic do wyodrębnienia."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Nie można utworzyć mapy wektorowej."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Analiza nie powiodła się."
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr "wyniki"
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 msgid "No imagery group selected."
 msgstr "Nie wybrano grupy zobrazowań."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid "Due to recent changes in classes, signatures can be outdated and should be recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
@@ -568,42 +569,42 @@ msgstr ""
 "Plik sygnatury <%s> już istnieje. \n"
 "Chcesz go nadpisać?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Plik już istnieje"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Nie została wybrana żadna warstwa mapy. Operacja przerwana"
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid "Group <%(group)s> does not have enough files (it has %(files)d files). Operation canceled."
 msgstr "Odczytanie id obiektu id%d nie powiodło się. Operacja przerwana."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr "Nie podano obszarów. Operacja przerwana."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Obiekty wektorowe znajdują się poza warstwami wektorowymi. Operacja przerwana."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 msgid "Histograms"
 msgstr "Histogramy"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Punkty wektorowe"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -612,93 +613,93 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid "You are trying to create a training area outside the computational region. Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70
-#: ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76
+#: ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr "Nie wybrano klasy"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 msgid "Name of subgroup required"
 msgstr "Wymagana nazwa podgrupy"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Mapa <%s> nie odnaleziona."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Mapa <%s> nie odnaleziona."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Mapa rastrowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Mapa wektorowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Wczytywanie mapy rastrowej <%s>..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, python-format
 msgid "Loading training map <%s>..."
 msgstr "Wczytywanie mapy treningowej <%s>..."
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 msgid "Select imagery group"
 msgstr "Wybierz grupę zobrazowań"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Utwórz/edytuj grupę..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 msgid "Name of imagery group is missing."
 msgstr "Brak nazwy grupy zobrazowań."
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 msgid "Name of imagery group:"
 msgstr "Nazwa grupy zobrazowań:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 msgid "Name of imagery subgroup:"
 msgstr "Nazwa podgrupy zobrazowań:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr "Wybierz podgrupę."
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Mapa <%s> nie odnaleziona w grupie <%s>"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
@@ -707,499 +708,500 @@ msgstr ""
 "Brak danych w podgrupie <%s> grupy <%s>.\n"
 "."
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Nie znaleziono danych w grupie <%s>.."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 msgid "Name of map is missing."
 msgstr "Brak nazwy mapy."
 
-#: ../gui/wxpython/iclass/dialogs.py:239
-#: ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257
+#: ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Nazwa mapy rastrowej:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241
-#: ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259
+#: ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Nazwa mapy wektorowej:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Klasyfikacja obrazu"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "Klasy"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 msgid "Class name"
 msgstr "Nazwa klasy"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Kolor"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Powiększ do wybranych map"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 msgid "Save signature file"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 msgid "Signature file path:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 msgid "Export training areas"
 msgstr "Eksportuj obszary treningowe"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 msgid "Enter name of new vector map:"
 msgstr "Wprowadź nazwę nowej mapy wektorowej:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 msgid "Export attribute table"
 msgstr "Eksportuj tabelę atrybutów"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Eksportuje tabele atrybutów w różnych formatach."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, python-format
 msgid "Vector <%s> exists"
 msgstr "Mapa wektorowa <%s> istnieje"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Zmień poziom przezroczystości"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 msgid "Save signature file for i.maxlik"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Usuń zaznaczoną warstwę"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Nic do wyodrębnienia."
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Nic do wyodrębnienia."
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Dodaj warstwę RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr "Uczenie się"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Podgląd"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr "Ustaw obszar mapy dla "
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr " / Powiększ do zasięgu mapy"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Dodaj mapę rastrową"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "Okno Mapy GRASS GIS: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287
-#: ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303
+#: ../gui/wxpython/animation/frame.py:160
 msgid "Main Toolbar"
 msgstr "Główny pasek narzędzi"
 
-#: ../gui/wxpython/mapswipe/frame.py:299
-#: ../gui/wxpython/animation/frame.py:167 ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315
+#: ../gui/wxpython/animation/frame.py:182 ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Narzędzia różne"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, python-format
 msgid "Map <%s> not found. "
 msgstr "Mapa <%s> nie została odnaleziona."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Mapa <%s> nie odnaleziona."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Nie ma nic do przerysowania (mapa jest pusta). Operacja przerwana"
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr "Wybierz nazwę pliku aby zapisać obraz (nie trzeba dodawać rozszerzenia)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "Nie wybrano warstwy rastrowej ani wektorowej do zapytania."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Wybierz mapę rastrową:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Nazwa mapy rastrowej:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Nazwa mapy rastrowej:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Czy przełączyć na nową lokację?"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr "Anuluj"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Proste"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Zamknij"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr "Brakuje nazwy pierwszej mapy."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Brakuje numeru kategorii (kolumna %s)."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Ustawienia mapy"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Niskiej jakości:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Niskiej jakości:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Kolor:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Szerokość linii:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Rozmiar:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Narzędzia"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Odpytaj mapy rastrowe/wektorowe"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Odpytaj wybrane mapy rastrowe/wektorowe"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Wysokiej jakości:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Wybierz kod EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Orientacja"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr "Przełącz mapy"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Zarządzanie Terenowymi Punktami Kontrolnymi (GCP)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "Lista GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "Ekran źródłowy"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "Ekran docelowy"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Narzędzia menadżera GCP"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979
-#: ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Ustawienia strony"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Podgląd wydruku"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Drukuj zawartość okna"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Przybliż do regionu obliczeniowego (ustawionego przez g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Powiększ do domyślnego regionu"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Powiększ do zapisanego regionu"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Zapisz geometrię bieżącego wyświetlania jako region"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Idź do GCP nr"
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Właściwy zakres:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "Błąd RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Do przodu: %(forw)s, Do tyłu: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Ustawienia georektyfikacji"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Anulowano ustawienia georektyfikacji."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Wybierz typ mapy i lokację/mapset"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Rodzaj mapy do georektyfikacji"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "wektor"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Wybierz źródłową lokację:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Wybierz źródłowy mapset:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Musisz wskazać właściwą lokację przed wybraniem mapsetu"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "Musisz wskazać właściwą lokację i mapset aby kontynuować."
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Wybierz grupę zobrazowań/map do georektyfikacji"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Wybierz grupę:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Utwórz grupę, jeśli żadna nie istnieje"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Dodaj warstwę wektorową do grupy..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Rozszerzenie wyjściowych map:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Musisz wskazać właściwą grupę zobrazowań/map aby kontynuować"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Musisz wpisać nazwę rozszerzenia mapy aby kontynuować"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Wybierz zobrazowanie/mapę do wyświetlenia w oknie wskazywania GCP"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Wybierz mapę źródłową do wyświetlenia:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Wybierz mapę docelową do wyświetlenia:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Wybierz mapę docelową do wyświetlenia:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Musisz wskazać źródłową mapę aby kontynuować"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1208,28 +1210,28 @@ msgstr ""
 "Brak map w wybranej grupie <%s>.\n"
 "Edytuj grupę lub wybierz inną."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Zarządzaj Terenowymi Punktami Kontrolnymi (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Co najmniej %d punktów GCP jest niezbędne. Operacja przerwana."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "źródło"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "cel"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Podaj współrzędne GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1238,28 +1240,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Zapisywanie pliku POINTS nie powiodło się"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Zbiór POINTS został zapisany dla grupy <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "nie zdefiniowano źródłowego mapwin"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "nie zdefiniowano docelowego mapwin"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Odczytanie pliku POINTS nie powiodło się"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification method (order: %d).\n"
@@ -1272,617 +1274,617 @@ msgstr ""
 "6+ punktów potrzeba do georektyfikacji 2. rzędu,\n"
 "10+ punktów potrzeba do georektyfikacji 3. rzędu"
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rektyfikacja rastra, poczekaj..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Przekształcanie <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rektyfikacja rastra <%s>, poczekaj..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Georektyfikacja mapy wektorowej <%s> nie powiodła się"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "Ustawienia menadżera GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Zamknij menadżera GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Czy zapisać punkty kontrolne (GCP)?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Dopasuj źródłowe wyświetlanie do docelowego"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Dopasuj docelowe wyświetlanie do źródłowego"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "użyj"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "źródłowy E"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "źródłowy N"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "docelowy E"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "docelowy N"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Następny błąd"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Poprzedni błąd"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Niewłaściwa wartość współrzędnych. Operacja przerwana."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Utwórz grupę map wektorowych"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Wybierz mapy wektorowe, które dodać do grupy:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Edytuj GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Terenowy Punkt Kontrolny GCP nr"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "źródłowy E:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "docelowy E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "źródłowy N:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "docelowy N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690
-#: ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Zatwierdź zmiany dla bieżącej sesji"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695
-#: ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835
+#: ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid "Apply and save changes to user settings file (default for next sessions)"
 msgstr "Zatwierdź zmiany bieżącej sesji do pliku ustawień użytkownika (domyślne dla następnej sesji)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Zamknij okno dialogu"
 
-#: ../gui/wxpython/gcp/manager.py:2433
-#: ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Sposób wyświetlania"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Podświetlaj tylko największy błąd RMS"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Podświetl błąd RMS > M + SD * współczynnik:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Ustawienia symbolu"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Kolor dużego błędu RMS:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Kolor wybranego GCP:"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Kolor nie używanego GCP:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Pokaż nie używane punkty GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Rozmiar symbolu:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Rektyfikacja"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "Wybierz metodę ponownego próbkowania rastra"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "georektyfikacja 1. rzędu"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "georektyfikacja 2. rzędu"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "georektyfikacja 3. rzędu"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Wybierz metodę interpolacji:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "przytnij do regionu obliczeniowego w lokacji docelowej"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Ustawienia menadżera GCP zapisano w pliku '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Digitizer"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Narzędzia digitalizacji nie są dostępne. %s"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid "Vector map <%s> not found in current mapset. New vector map can be created by providing '-c' flag."
 msgstr "Mapa wektorowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Nowa mapa wektorowa <%s> została utworzona"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Nie można utworzyć mapy wektorowej <%s>"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid "Topology for vector map <%s> is not available. Topology is required by digitizer. Do you want to rebuild topology (takes some time) and open the vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Brakuje topologii"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Aktualizuj kategorie"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Żadna mapa wektorowa nie została wybrana do edycji."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Ustawienia digitalizacji"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Zastosuj zmiany dla bieżącej sesji"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "Zamknij okno i zapisz zmiany w pliku ustawień użytkownika"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Zamknij okno bez zapisywania zmian"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Ogólne"
 
-#: ../gui/wxpython/vdigit/preferences.py:131
-#: ../gui/wxpython/nviz/tools.py:1296 ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/nviz/tools.py:1573 ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Ekran"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Szerokość linii"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Przyciąganie"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Próg przyciągania"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "piksele ekranowe"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "jednostki mapy"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Przyciągaj także do węzła"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Próg przyciągania jest %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Wybierz obiekty wektorowe"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Wybierz próg"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Wybierz obiekty znajdujące się wewnątrz obszaru zaznaczenia"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid "By default are selected all features overlapping selection bounding box "
 msgstr "Domyślnie są wybrane wszystkie obiekty nachodzące na prostokąt wyboru"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Szukaj powtórzeń"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 msgid "Digitize lines/boundaries"
 msgstr "Wektoryzuj linie/granice"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Rozłącz linie na przecięciach"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 msgid "Digitize areas"
 msgstr "Wektoryzuj poligony"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr "Zamknij granicę (dowiąż do punktu początkowego)"
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Zapisz zmiany"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Zapisz zmiany przy wyjściu"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Narzędzie zapytań"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Wybierz narzędzie zapytań"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Wybierz prostokątem"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "długość"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Wybierz linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "krótszy niż"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "dłuższy niż"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "wiszący"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Wybierz wiszące"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atrybuty"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Wektoryzuj nowy obiekt"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Dodaj nowy rekord do tabeli"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Warstwa"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Kategoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Tryb"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Następny"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Numer kategorii"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Tryb kategorii"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Wpisz ręcznie"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Żadna kategoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Usuń istniejący(e) obiekt(y)"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Usuń rekord z tabeli"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Wybór za pomocą atrybutów"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "obszar"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "obwód"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid "Note: These settings are stored in the workspace not in the vector digitizer preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Wektoryzuj nowy segment linii"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Wektoryzuj nową linię/granicę"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Podświetl"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Podświetl (duplikaty)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Punkt"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Linia"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Granica (bez obszaru/poligonu)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Granica (jeden obszar/poligon)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Granica (dwa obszary/poligony)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centroid (w obszarze)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroid (poza obszarem)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroid (duplikat w obszarze)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Węzeł (jedna linia)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Węzeł (dwie linie)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Węzeł"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Poligon (zamknięta granica + centroid)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Kierunek"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Przyciąganie wyłączone "
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Ustawienia digitizera zapisano w pliku <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Błąd digitalizacji"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Nie można otworzyć mapy wektorowej <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "Żadna mapa wektorowa nie została wybrana do edycji."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1890,77 +1892,77 @@ msgid ""
 "Reason: %s"
 msgstr "Zapisanie nowego obiektu nie powiodło się. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Odczytanie id obiektu %d nie powiodło się. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Link bazy danych %d nie jest dostępny. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Nie można uruchomić sterownika bazy danych <%s>. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Nie można otworzyć bazy danych <%(db)s> za pomocą sterownika <%(driver)s>. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Nie można wykonać zapytania SQL '%s'. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Co najmniej jeden %d punkt GCP jest niezbędzny. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Niewłaściwa wartość współrzędnych. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Nieznany typ obiektu '%s'"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "Za mało punktów, aby utworzyć linię"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Lista kategorii - kliknij prawym by usunąć"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Dodaj nową kategorię"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Zastosuj zmiany"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignoruj zmiany i zamknij dialog"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Zastosuj zmiany i zamknij okno"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "ID obiektu:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1971,494 +1973,512 @@ msgstr ""
 "Numer warstwy i kategorii musi być liczbą całkowitą.\n"
 "Numer warstwy musi być liczbą większą od zera."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Usuń wybrane"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Usuń wszystkie"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Przeładuj"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Nie można zmodyfikować mapy wektorowej."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Ustaw wartość"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Wartość początkowa"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Krok"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Lista duplikatów"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "ID obiektu"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Warstwa (Kategorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Wektoryzuj nowy punkt"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Lewy: nowy punkt"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Wektoryzuj nową linię"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "Lewy: nowy punkt; Środkowy: usuń ostatni punkt; Prawy: zakończ linię"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Wektoryzuj nową granicę"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Wektoryzuj nowy centroid"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Wektoryzuj nowy poligon (kompozycję granic bez kategorii i jednego centroidu z kategorią)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 msgid "Add new vertex to line or boundary"
 msgstr "Dodaj nowy werteks do linii lub granic"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Lewy: Wybierz; Środkowy: Usuń selekcję; Prawy: Zatwierdź"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Przyciągaj wybrane linie/granice (tylko do węzłów)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Usuń wybrane rekordy"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Wyświetl/aktualizuj atrybuty"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Lewy: Wybierz"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Wyświetl/aktualizuj kategorie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 msgid "Edit selected line/boundary"
 msgstr "Edytuj wybrane linie/granice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Przyciągaj wybrane linie/granice (tylko do węzłów)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 msgid "Move selected vertex"
 msgstr "Przesuń wybrany werteks"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 msgid "Remove selected vertex"
 msgstr "Usuń wybrany werteks"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Wyjdź z digitizera"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Wyjdź z digitizera i zapisz zmiany"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Podręcznik digitizera"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Pokaż podręcznik digitizera"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Narzędzia dodatkowe (kopiuj, przerzuć, połącz itp.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184
+#: ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Cofnij"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Cofnij zmiany"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr "Powtórz"
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Cofnij zmiany"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Rozdziel wybrane linie/granice na przecięciu"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Dołącz wybrane linie/granice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Kopiuj kategorie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Kopiuj obiekty z (podkładowej) mapy wektorowej"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Kopiuj atrybuty"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Konwersja typów obiektów"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Odbij wybrane linie/granice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Połącz wybrane linie/granice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Przyciągaj wybrane linie/granice (tylko do węzłów)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Rozdziel linie/granice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Odpytaj obiekty"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Wybierz mapę wektorową"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Mapa wektorowa nie jest mapą 3D. Operacja przerwana."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Wybierz mapę wektorową"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by digitizer.\n"
 "Do you want to rebuild topology (takes some time) and open the vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 msgid "Digitizer error"
 msgstr "Błąd digitizera"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Proszę czekać, otwieram mapę wektorową <%s> do edycji..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 msgid "Vector digitizer"
 msgstr "Narzędzia wektoryzacji"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Czy chcesz zapisać zmiany na mapie wektorowej <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Zapisać zmiany?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "Proszę czekać, zamyka i przebudowuje topologię mapy wektorowej <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Edycja mapy wektorowej <%s> zakończona powodzeniem"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Nowa mapa wektorowa"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr "Pomiar zakończony"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid "Click and drag with left mouse button to measure.%sDouble click with left button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Pomiar odległości"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Pomiar odległości:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segment"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "całkowita odległość"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Kierunek"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr "Pomiar obszaru:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr "Nie rozpoznano jednostek, pomiar nie powiódł się."
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr "Obszar: {area} {unit}\n"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 msgid "legend"
 msgstr "legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 msgid "scale bar"
 msgstr "podziałka liniowa"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr "strzałka północy"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr "Kopiuj współrzędne do schowka"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+msgid "Hide toolbars"
+msgstr "Ukryj paski narzędzi"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+msgid "Show toolbars"
+msgstr "Pokaż paski narzędzi"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr "Ukryj pasek stanu"
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+msgid "Show statusbar"
+msgstr "Pokaż pasek stanu"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Dodaj warstwę tematyczną"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Legenda rastra"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Proszę czekać, trwa eksportowanie obrazu..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Przybliż do zapisanego regionu"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Nie znaleziono regionu <%s>. Operacja przerwana."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Zapisz zakres widoku jako region"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Plik regionu <%s> już istnieje.Chcesz go nadpisać?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807
-#: ../gui/wxpython/core/workspace.py:1350 ../gui/wxpython/core/gcmd.py:140
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964
+#: ../gui/wxpython/core/workspace.py:1529 ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Uwaga"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Pokaż obiekt tekstowy"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 msgid "Text:"
 msgstr "Tekst:"
 
-#: ../gui/wxpython/mapwin/decorations.py:354
-#: ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396
+#: ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotacja:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Czcionka:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Ustaw czcionkę"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2466,126 +2486,443 @@ msgstr ""
 "Przeciągnij tekst myszą (tryb wskaźnika) do nowego położenia.\n"
 "Dwuklik dla zmiany opcji."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Nie można przeczytać Mapsetów z Lokacji <{l}>."
+
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Nie można przeczytać Mapsetu z Lokacji <{l}>."
+
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid "Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want to overwrite it?"
+msgstr "Mapa wektorowa <%s> już istnieje w bieżącym mapsecie. Chcesz ją nadpisać?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104
+#: ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Nadpisać?"
+
+#: ../gui/wxpython/datacatalog/tree.py:314
+msgid "GRASS locations in {}"
+msgstr "Lokacje GRASS-a w {}"
+
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid "Map <{layer}> marked for copying. You can paste it to the current mapset <{mapset}>."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+msgid "New name"
+msgstr "Nowa nazwa"
+
+#: ../gui/wxpython/datacatalog/tree.py:599
+msgid "Rename map"
+msgstr "Zmień nazwę mapy"
+
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, python-brace-format
+msgid "Editing {name}"
+msgstr "Edycja {name}..."
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Zmiana nazwy mapy <{name}>..."
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr "{cmd} -- zakończone"
+
+#: ../gui/wxpython/datacatalog/tree.py:652
+msgid "No map selected for copying."
+msgstr "NIe wybrano mapy wektorowej do skopiowania."
+
+#: ../gui/wxpython/datacatalog/tree.py:659
+msgid "Copy map"
+msgstr "Kopiuj mapę"
+
+#: ../gui/wxpython/datacatalog/tree.py:670
+msgid "Failed to copy map: new map has the same name"
+msgstr "Nie można skopiować mapy: nowa mapa ma tę samą nazwę"
+
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, python-brace-format
+msgid "Map <{map}> already exists in the current mapset. Do you want to overwrite it?"
+msgstr "Mapa<{map}> już istnieje w bieżącym Mapsecie. Chcesz ją nadpisać?"
+
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Kopiowanie <{name}>..."
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "NIe można skopiować mapy: akcja jest możliwa tylko w tej samej lokacji."
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid "Do you really want to delete map <{m}> of type <{etype}> from mapset <{mapset}> in location <{loc}>?"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:765
+msgid "Delete map"
+msgstr "Usuń mapę"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Usuwanie {name}..."
+
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "usuń duplikaty"
+
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Wyświetlanie {name}..."
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
+msgstr "Przenoszenie map nie jest zaimplementowane"
+
+#: ../gui/wxpython/datacatalog/tree.py:835
+msgid "Maps can be copied only to current mapset"
+msgstr "Można kopiować mapy tylko do bieżącego Mapsetu"
+
+#: ../gui/wxpython/datacatalog/tree.py:910
+msgid "&Copy"
+msgstr "&Kopiuj"
+
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+msgid "&Paste"
+msgstr "&Wklej"
+
+#: ../gui/wxpython/datacatalog/tree.py:936
+msgid "&Display layer"
+msgstr "&Wyświetl warstwę"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+msgid "&Switch mapset"
+msgstr "&Przełącz Mapset"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+msgid "GRASS GIS Data Catalog"
+msgstr "Katalog danych GRASS GIS"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Zamknij katalog danych GRASS GIS"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
+#, python-format
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
+"Bieżąca lokacja to <%(loc)s>.\n"
+"Bieżący mapset to <%(mapset)s>."
+
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr "Bieżący mapset to <%s>."
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
+msgid "Data catalog"
+msgstr "Katalog danych"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+msgid "Reload GRASS locations"
+msgstr "Przeładuj lokacje GRASS-a"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr "Przeładuj tylko bieżący Mapset GRASS-a"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Kliknij by edytować ustawienia warstwy"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
+msgstr "Znajdź:"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid "Type to search database by map type or name. Use prefix 'r:', 'v:' and 'r3:'to show only raster, vector or 3D raster data, respectively. Use Python regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Utwórz najpierw ramkę mapy."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr "Zamknij obszar prawoklikiem"
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr "Zakończ linię prawoklikiem"
+
+#: ../gui/wxpython/rdigit/controller.py:303
+msgid "Do you want to save changes?"
+msgstr "Czy chcesz zapisać zmiany?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+msgid "Save raster map changes"
+msgstr "Zapisz zmiany mapy rastrowej"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Nie można utworzyć profilu dla mapy rastrowej."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+msgid "Failed to create new raster map."
+msgstr "Nie można utworzyć mapy rastrowej."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+msgid "Rasterizing..."
+msgstr "Rasteryzacja...."
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Utwórz nową tabelę kolorów dla mapy rastrowej"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+msgid "Create new raster map"
+msgstr "Utwórz nową mapę rastrową"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+msgid "Name for new raster map:"
+msgstr "Nazwa nowej mapy rastrowej:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Wybierz mapę wektorową"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+msgid "New raster map type:"
+msgstr "Typ nowej mapy rastrowej:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Oblicza wskaźnik kształtu z mapy rastrowej"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid "Raster map <%s> already exists in the current mapset. Do you want to overwrite it?"
+msgstr "Mapa wektorowa <%s> już istnieje w bieżącym mapsecie. Chcesz ją nadpisać?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+msgid "Digitize area"
+msgstr "Wektoryzuj obszar"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+msgid "Digitize line"
+msgstr "Wektoryzuj linię"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+msgid "Digitize point"
+msgstr "Wektoryzuj punkt"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+msgid "Save raster map"
+msgstr "Zapisz mapę rastrową"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+msgid "Quit raster digitizer"
+msgstr "Wyjdź z digitizera"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+msgid "Select raster map"
+msgstr "Wybierz mapę rastrową"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr "Ustaw kolor rysowania (nie kolor komórki)"
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+msgid "Cell value:"
+msgstr "Wartości komórki:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid "Width of currently digitized line or diameter of a digitized point in map units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Szerokość:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+msgid "New raster map"
+msgstr "Nowa mapa rastrowa"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
 msgid "GRASS GIS Graphical Modeler"
 msgstr "Graficzny modeler GRASS GIS"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
+#: ../gui/wxpython/gmodeler/frame.py:146
 msgid "Model"
 msgstr "Model"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
+#: ../gui/wxpython/gmodeler/frame.py:149
 msgid "Items"
 msgstr "Obiekty"
 
-#: ../gui/wxpython/gmodeler/frame.py:130
-#: ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/gmodeler/frame.py:153
+#: ../gui/wxpython/gmodeler/model.py:2854
 msgid "Variables"
 msgstr "Zmienne"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
+#: ../gui/wxpython/gmodeler/frame.py:157
 msgid "Python editor"
 msgstr "Konsola Pythona"
 
-#: ../gui/wxpython/gmodeler/frame.py:132
-#: ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
+#: ../gui/wxpython/gmodeler/frame.py:161
+#: ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
 msgid "Command output"
 msgstr "Wynik polecenia"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
+#: ../gui/wxpython/gmodeler/frame.py:243
 msgid "Python script contains local modifications"
 msgstr "Skrypt pythona zawiera zmiany"
 
-#: ../gui/wxpython/gmodeler/frame.py:203
-#: ../gui/wxpython/gmodeler/frame.py:1832
+#: ../gui/wxpython/gmodeler/frame.py:245
+#: ../gui/wxpython/gmodeler/frame.py:2044
 msgid "Python script is up-to-date"
 msgstr "Skrypt pythona jest aktualny"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
+#: ../gui/wxpython/gmodeler/frame.py:262
 msgid "Redrawing model..."
 msgstr "Przerysowywanie modelu..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/gmodeler/frame.py:298
 msgid "Do you want to save changes in the model?"
 msgstr "Czy chcesz zapisać zmiany w modelu?"
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/gmodeler/frame.py:300
 #, fuzzy
 msgid "Do you want to store current model settings to model file?"
 msgstr "Czy chcesz zapisać bieżące ustawienia w pliku projektu?"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
+#: ../gui/wxpython/gmodeler/frame.py:306
 msgid "Quit Graphical Modeler"
 msgstr "Wyjdź z modelera"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/gmodeler/frame.py:360
 msgid "No intermediate data to delete."
 msgstr "Brak danych tymczasowych do usunięcia"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
+#: ../gui/wxpython/gmodeler/frame.py:366
 #, python-format
 msgid "Do you want to permanently delete data?%s"
 msgstr "Czy chcesz całkwicie usunąć dane?%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
+#: ../gui/wxpython/gmodeler/frame.py:368
 msgid "Delete intermediate data?"
 msgstr "Usunać dane tymczasowe?"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
+#: ../gui/wxpython/gmodeler/frame.py:385
 #, python-format
 msgid "%d maps deleted from current mapset"
 msgstr "%d map usunięto z bieżącego mapsetu"
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
 msgid "Current model is not empty. Do you want to store current settings to model file?"
 msgstr "Bieżący model nie jest pusty. Czy chcesz zapisać bieżące ustawienia do pliku modelu?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
 msgid "Create new model?"
 msgstr "Utworzyć nowy model?"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/gmodeler/frame.py:443
 msgid "Choose model file"
 msgstr "Wybierz plik modelu"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
 msgid "GRASS Model File (*.gxm)|*.gxm"
 msgstr "Plik modelu GRASS (*.gxm)|*.gxm"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
+#: ../gui/wxpython/gmodeler/frame.py:466
 #, python-format
 msgid "%(items)d items (%(actions)d actions) loaded into model"
 msgstr "%(items)d obiektów (%(actions)d akcji) wczytano do modelu"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
 #, python-format
 msgid "Model file <%s> already exists. Do you want to overwrite this file?"
 msgstr "Plik modelu <%s> już istnieje. Chcesz go nadpisać?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
 msgid "Save model"
 msgstr "Zapisuje model."
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
 #, python-format
 msgid "File <%s> saved"
 msgstr "Zbiór <%s> został zapisany"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/gmodeler/frame.py:503
 msgid "Choose file to save current model"
 msgstr "Wybierz plik, w którym zapisać bieżący model"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
+#: ../gui/wxpython/gmodeler/frame.py:604
 msgid "Model is empty. Nothing to validate."
 msgstr "Model jest pusty. Nie można go sprawdzić."
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
 msgid "Validating model..."
 msgstr "Sprawdzanie modelu..."
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/gmodeler/frame.py:614
 #, python-format
 msgid ""
 "Model is not valid.\n"
@@ -2596,34 +2933,34 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
+#: ../gui/wxpython/gmodeler/frame.py:618
 msgid "Model is valid."
 msgstr "Model jest poprawny."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
 #, python-format
 msgid "Model exported to <%s>"
 msgstr "Wyeksportowano model do <%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:745
-#: ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/gmodeler/frame.py:829
+#: ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
 msgid "Comment:"
 msgstr "Komentarz:"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
 msgid "Add comment"
 msgstr "Dodaj komentarz"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "Graficzny modeler wxGUI"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2632,190 +2969,191 @@ msgid ""
 "%s"
 msgstr "Odczyt pliku projektu <%s> nie powiódł się. Plik uszkodzony, nie można przeanalizować dokumentu XML."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "Proszę czekać, wczytywanie modelu..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "Zapis bieżących ustawień do pliku modelu  nie powiódł się."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Nie można otworzyć piku<%s> do zapisu."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Usuń"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Wyłącz"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Włącz"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr "Ustaw etykietę"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 msgid "Set comment"
 msgstr "Ustaw komentarz"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Dodaj punkt kontrolny"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Usuń punkt kontrolny"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "Pośrednie"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336
-#: ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511
+#: ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Właściwości"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "Etykieta:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Lista zmiennych - kliknij prawym by usunąć"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Nazwa"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Typ danych"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Wartość domyślna"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Opis"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Dodaj nową zmienną"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "liczba całkowita"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "zmiennoprzecinkowe"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "tekstowe"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 msgid "region"
 msgstr "region"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "plik"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Dodaj nową zmienną do modelu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Lista obiektów - kliknij prawym by usunąć"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Etykieta"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr "W pętli"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parametry"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Polecenie"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Nie wybrano zobrazowania."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Skrypt pythona"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Uruchom"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Uruchom skrypt pythona"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Zapisz skrypt pythona do pliku"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2823,194 +3161,190 @@ msgstr ""
 "Odśwież skrypt pythona bazując na modelu.\n"
 "Pominięte zostaną zmiany lokalne."
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Nie można uruchomić skryptu pythona. <%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Wybierz plik do zapisania"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Skrypt pythona (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771
-#: ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981
+#: ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Plik projektu <%s> już istnieje. Chcesz go nadpisać?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Zapisz plik"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid "Python script is locally modificated. Refresh will discard all changes. Do you really want to continue?"
 msgstr "Skrypt pythona jest miejscami zmieniony. Odświeżenie odrzuci zmiany. Czy chcesz odrzucić zmiany?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Aktualizuj"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Ustawienia modelera"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Właściwości elementu"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Wyłączony:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Właściwy:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Niewłaściwy:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Uruchomiony:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Rozmiar kształtu"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Szerokość:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Wysokość:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204
-#: ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Dane"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Typ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "Raster 3D:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Wektor:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 msgid "Table:"
 msgstr "Tabela:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Pętla"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 msgid "Comment"
 msgstr "Komentarz"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Właściwości modelu"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadane"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Polecenia"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Pozwól na nadpisanie istniejących plików przez pliki wyjściowe"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Zastosuj właściwości"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Nazwa:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Opis:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autor(zy):"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "model"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Skrypt wygenerowany przez Graficzny Modeler wxGUI."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "niezdefiniowana zmienna '%s'"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Model jest wykonywany..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Model jest pusty. Nie można go uruchomić."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3021,86 +3355,86 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Uruchomić model?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr "Poniższe zmienne nie są zdefiniowane:"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Mapy rastrowe"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "Mapy rastrowe 3D"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Mapy wektorowe"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175
-#: ../gui/wxpython/gui_core/ghelp.py:213 ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229
+#: ../gui/wxpython/gui_core/ghelp.py:227 ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "nieznany"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<nie zdefiniowany>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Warunek:"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Warunek: nie zdefiniowany"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr "pusty"
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Parametry modelu"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr "Usuń dane przejściowe na zakończeniu"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Właściwości danych"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Nazwa elementu:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "Typ elementu:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "Dodaj polecenie GRASS) do modelu"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr "Etykieta i komentarz"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3110,7 +3444,7 @@ msgstr ""
 "\n"
 "Nie można dodać nowej akcji do modelu."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3121,32 +3455,32 @@ msgstr ""
 "\n"
 "Nie można dodać nowej akcji do modelu."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Właściwości relacji"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "Z"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Na"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Dane: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Komenda:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Opcja:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3154,7 +3488,7 @@ msgstr ""
 "Relacja nie zaczyna się od obiektu danych.\n"
 "Nie można dodać relacji."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3162,7 +3496,7 @@ msgstr ""
 "Erlacja nie wskazuje polecenia GRASS.\n"
 "Nie można dodać relacji."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3170,68 +3504,68 @@ msgstr ""
 "Nie znaleziono właściwej opcji.\n"
 "Nie można dodać relacji."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Warunek"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Właściwości pętli"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Lista obiektów w pętli"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Serie"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "Definiowanie serri map jako warunku pętli"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "Zdefiuj serię map"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "Właściwości if-else"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Lista obiektów w bloku 'if'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Lista obiektów w bloku 'else'"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, fuzzy, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Nie można utworzyć nowej tabeli. Tabela <%s> już istnieje w bazie danych."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Czy chcesz usunąć z modelu wszystkie zmienne?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Usuń zmienne"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Nie"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Tak"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3240,12 +3574,12 @@ msgstr ""
 "Nie można otworzyć pliku\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "Plik instrukcji zostanie wczytany z regionem: %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
@@ -3254,23 +3588,23 @@ msgstr ""
 "Region nie może zostać ustawiony\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "Nie można przeczytać instrukcji %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3279,14 +3613,14 @@ msgstr ""
 "Zmieniła się skala, poprzednia wartość: %(old)s\n"
 "nowa wartość: %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3295,7 +3629,7 @@ msgstr ""
 "Zmieniła się pozycja ramki mapy, poprzednia wartość: %(old1)s %(old2)s\n"
 "nowa wartość: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3304,7 +3638,7 @@ msgstr ""
 "Zmienił się rozmiar ramki mapy, poprzednia wartość: %(old1)s %(old2)s\n"
 "nowa wartość: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3313,69 +3647,69 @@ msgstr ""
 "Nie można przeczytać  instrukcji %(file)s.\n"
 "Nieznany format %(for)s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "Nie można przeczytać instrukcji %s."
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding which is required by module ps.map."
 msgstr "Znaki w pozycji %s nie są obsługiwanie przez kodowanie ISO-8859-1 (Latin 1), które jest wymagane w module ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is required by module ps.map."
 msgstr "Nie wszystkie znaki są obsługiwane przez kodowanie ISO-8859-1 (Latin 1), które jest wymagane w module ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Nie można przeczytać pliku instrukcji %(inst)s: plik %(file)s nie został znaleziony."
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Graficzny modeler GRASS GIS"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr "Program ps2pdf nie jest dostępny. Zainstaluj go, by utworzyć PDF."
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Tworzenie PDF..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "Tworzenie pliku PostScript..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Tworzenie podglądu wydruku..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "Ps.map został zamknięty z kodem powrotu %s"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "%(prg)s został zamknięty z kodem powrotu %(code)s"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF został utworzony"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3386,150 +3720,150 @@ msgstr ""
 "\n"
 " %s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "PostScript został utworzony"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr "Tworzenie podglądu, proszę czekać"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Podgląd niedostępny"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 #, fuzzy
 msgid "Preview is not available probably because Ghostscript is not installed or not on PATH."
 msgstr "Podgląd nie jest dostępny prawdopodobnie z powodu brakującego Ghostscript."
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr "Postępuj zgdnie z instrukcjami na GRASS Trac Wiki."
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Podgląd wygenerowany"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Zapisz plik jako"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr "Nie można przeczytać pliku %s."
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "Utwórz najpierw ramkę mapy."
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Pasek skali nie jest odpowiedni dla tej projekcji"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr "Naciśnij przycisk z ikoną zielonego trójkąta, aby zobaczyć podgląd."
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "Kompozytor wydruków wxGUI"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr "RAMKA MAPY"
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr "LEGENDA MAP RASTROWYCH"
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr "LEGENDA MAP WEKTOROWYCH"
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr "INFORMACJE O MAPIE"
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr "PASEK SKALI"
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr "ZOBRAZOWANIE"
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr "STRZAŁKA PÓŁNOCY"
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "Kliknij i przeciągnij aby zmienić rozmiar obiektu"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "etykiety:"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "cal"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "punkt"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "centymetr"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "milimetr"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "metry"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "kilometry"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "stopy"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "mile"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "mile morskie"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "piksel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "metr"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "stopień"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "Nie można uruchomić `ps.map -b`"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Jednostki:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3537,29 +3871,29 @@ msgstr ""
 "Płożenie lewego górnego rogu\n"
 "od lewego górnego rogu papieru"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "Położenie:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 msgid "relative to paper"
 msgstr "w relacji do papieru"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "z użyciem współrzędnych mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3567,840 +3901,832 @@ msgstr ""
 "Pozycja od lewej górnej\n"
 "krawędzi papieru"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Rozmiar czcionki:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Wybierz kolor:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Zastosuj zmiany i zamknij okno"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Jednostki"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Format"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientacja"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Szerokość"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Wysokość"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Lewy"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Prawy"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Góra"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Dół"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Niewłaściwe dane wejściowe"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Rozmiar strony"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Marginesy"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Pionowo"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Poziomo"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "użytkownika"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Ustawienia mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Ustawienia ramki mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Ramka mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Opcje ramki mapy:"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "dopasuj ramkę do wybranych map"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "dopasuj ramkę do zapisanego regionu"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "dopasuj ramkę do bieżącego regionu obliczeniowego"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "ustalona skala i środek mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Wybór map"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Mapa:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Region:"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Skala i środek mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Wypośrodkowanie:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Skala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Maksymalna rozdzielczość mapy (dpi):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Obramowanie"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "rysuj obramowanie wokół ramki mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "kolor obramowania:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "szerokość obramowania (w punktach):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "Wybór regionu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "Nie wybrano mapy!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "Nie wybrano regionu!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "Niewłaściwa skala lub środek mapy!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526
+#: ../gui/wxpython/lmgr/layertree.py:1015 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/nviz/mapwindow.py:1769 ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Mapa rastrowa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "Wybierz mapę rastrową"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "brak mapy rastrowej"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Dodaj mapę"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "punkty"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "linie"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "obszary"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "Typ danych"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Dodaj"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "Zarządzanie mapami wektorowymi"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr "Mapa wektorowa leżąca najwyżej przesłania pozostałe"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "W górę"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "W dół"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Usuń"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "Właściwości..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "Ustawienia mapy rastrowej"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "Ustawienia mapy wektorowej"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "%s właściwości"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "Wybór danych"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162
+#: ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Typ obiektu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "centroidy"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "granice"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "Wybór warstw"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Połączenie z bazą danych nie zostało zdefiniowane w pliku bazy."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "Wybierz warstwę:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "lista kategorii (e.g. 1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Maska"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "Użyj bieżącej maski"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "Kolory"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "Obramowanie"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "rysuj obrys"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "Szerokość (pkt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "Wypełnienie"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "kolor wypełnienia"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "wybierz kolor:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "kolor z kolumny tabeli mapy:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "Brak efektu wypełnienia kolorem z kolumny tabeli"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "Kolor linii:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "Rozmiar i styl"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "symbol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "plik eps:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Przeglądaj"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "Wpisz nazwę pliku lub wybierz plik z dysku"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Wybierz plik"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838
+#: ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Wielkość"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "rozmiar:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "rozmiar z kolumny tabeli mapy:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "skala:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "Obrót"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "obróć symbole:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "zgodnie ze wskazówkami zegara w stopniach"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "z kolumny tabeli mapy:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "Ustaw szerokość (w punktach):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "pomnóż szerokość przez wartości kategorii"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Styl linii"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "Wybierz styl linii:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "Wybierz zalończenie linii:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "Deseń"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "zastosuj deseń:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "Wybierz plik desenia:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "szerokość linii desenia (w punktach):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "współczynnik skali desenia:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Legenda rastra"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Pokaż legendę rastra"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Raster źródłowy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "bieżący raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "wybierz raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s: typ %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Rodzaj legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "legenda dyskretna (mapy kategorii)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "legenda z ciągłym gradientem koloru (mapy zmiennopozycyjne)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Zaawansowane ustawienia legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "uwzględnij \"no data\" "
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "rysuj znaczniki w tabeli kolorów"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "zakres"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Legenda wektorowa"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Pokaż legendę warstw wektorowych"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Źródłowe mapy wektorowe"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Wybierz mapy wektorowe i ich kolejność w legendzie"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630
+#: ../gui/wxpython/lmgr/layertree.py:1019 ../gui/wxpython/menustrings.py:2004
+#: ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Mapa wektorowa"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Edytuj etykietę"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "rysuj ramkę wokół legendy"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Rozmiar i pozycja"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Pozycja"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "Aby użyć wartości domyślnych, pozostaw puste pole edycji."
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Kolumny:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "odstęp kolumn:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Ustawienia czcionki"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "Edytuj etykietę legendy:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "Nie wybrano mapy rastrowej!"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "Brak rastra"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr "Ustawienia Mapinfo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Ustawienia kolorów"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "użyj koloru obramowania:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "użyj koloru tła:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"Jednostki bieżącej projekcji nie są obsługiwane,\n"
-" zostaną użyte metry!"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Nieobsługiwane jednostki"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Długość:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "Długość podziałki jest podana w jednostkach mapy"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "Wysokość podziałki jest jej realną wysokością na papierze"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "domyślny"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928
+#: ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Styl"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Typ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Liczba segmentów:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Etykietuj wszystko"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "segmenty"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "przezroczyste tło tekstu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "Długość podziałki nie jest zdefiniowana"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Tekst"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Wpisz tekst:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Efekty tekstu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "tło tekstu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "uwydatnienie"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "obramowanie tekstu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Przesunięcie"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "poziome (pkt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "pionowe (pkt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr "Punkt referencyjny"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Rotacja tekstu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "obróć tekst (odwrotnie do wskazówek zegara)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "Nie wprowadzono tekstu!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Zobrazowanie"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Wybierz ścieżkę:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Wybierz katalog ze zobrazowaniami"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr "Uwaga: Tylko format EPS jest obsługiwany"
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Skala i Obrót"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Kąt obrotu (w stopniach):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Rotacja w stopniach przeciwnie do ruchu wskazówek zegara"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "Emisja"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "Nie można przeczytać pliku %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "rozmiar: %(width)s x %(height)s pkt"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "Nie wybrano zobrazowania."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Strzałka północy"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Ustawienia strzałki północy"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr "Symbol"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr "Wybierz symbol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
@@ -4408,289 +4734,285 @@ msgstr ""
 "Uwaga: Wybrany symbol nie jest wyświetlany\n"
 "w trybie rysunku (tylko w tyrybie podglądu)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr "Kolor obrysu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "przezroczysty"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Kolor wypełnienia:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Rozmiar i obrót"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Rozmiar (w punktach):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Rozmiar symbolu w punktach"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Ustawienia prostokąta"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Ustawienia linii"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Szerokość linii w punktach"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 msgid "Vector labels"
 msgstr "Wektorowe etykiety"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "Utwórz plik tekstowy z instrukcjami mapy"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "Wczytaj plik tekstowy z instrukcjami mapy"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Utwórz plik PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Utwórz PDF"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Ustaw rozmiar i orientację papieru, marginesy"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Pełen zasięg"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Powiększ do pełnego zasięgu"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Kliknij i przeciągnij aby umieścić ramkę mapy"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Usuń wybrany obiekt"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "&Pokaż podgląd"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "Wyjdź z kompozytora wydruków"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "Informacje o mapie"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Podziałka liniowa"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Prostokąt"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Dodaj warstwę tematyczną"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Dodaj warstwę z etykietami"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr "Dodaj proste grafiki: punkty"
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr "Dodaj proste grafiki: linie"
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr "Dodaj proste grafiki: prostokąty"
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Menadżer Tabeli Atrybutów GRASS GIS -"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr "tylko do odczytu -"
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid "Database connection for vector map <%s> is not defined in DB file. You can define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Proszę czekać, trwa wczytywanie danych atrybutowych..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Wyszukaj dane"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Menadżer tabeli"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Menadżer warstw"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Zamknij Menadżera Tabeli Atrybutów"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Usuń wybrane ustawienia"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Przeładuj dane atrybutowe (tylko zaznaczoną warstwę)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Liczba wczytanych obiektów: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid "Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Połączenia bazy danych"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Zapytania"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Przywrócenie domyślnego wyrażenia SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Zamknij Menadżera Tabeli Atrybutów"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Zamknij okno dialogowe"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Kolumny"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 msgid "Interactive insertion"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Wartości"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Pobierz wszystkie wartości"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Pobierz próbkę"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 msgid "Go to:"
 msgstr "Idź do:"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Zamknij okno po wykonaniu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "GRASS SQL Builder (%(type)s): map wektorowych <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Przykład: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Sprawdź"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Sprawdź zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "Nie sprawdzone zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "Niepoprawne zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4701,73 +5023,73 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "Poprawne zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 msgid "Functions"
 msgstr "Funkcje"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Niepoprawne zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Poprawne zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Wczytywanie danych..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid "Attribute table <%s> not found. For creating the table switch to 'Manage layers' tab."
 msgstr "Nie znaleziono tabeli atrybutów <%s>. Aby utworzyć tabelę, przejdź do zakładki 'Zarządzanie warstwami'."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Kolumna <%(column)s> nie została znaleziona w tabeli <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Można wyświetlić tylko 256 kolumn."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Kolumna <%(column)s> nie została znaleziona w tabeli <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Limit 100000 rekordów."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Nieznana wartość"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr "Nie można odszyfrować wartości. Ustaw kodowanie w preferencjach GUI (\"Atrybuty\")."
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert value '%(val)s' in key column (%(key)s) to integer.\n"
@@ -4778,172 +5100,172 @@ msgstr ""
 "\n"
 "Szczegóły: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Sortuj rosnąco"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Sortuj malejąco"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Oblicz (tylko numeryczne kolumny)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 msgid "Field calculator"
 msgstr "Kalkulator pól"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Statystyki"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Dodaj kolumnę"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Rozmiar obszaru"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Długość linii"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Liczba obiektów dla każdej z kategorii"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Styl linii"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Azymut linii"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, python-format
 msgid "Add column to table <%s>"
 msgstr "Dodaj kolumnę do tabeli <%s>"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Nie można dodać kolumny do tabeli. Nie podano nazwy kolumny."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Kolumna <%(column)s> już istnieje w tabeli <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Dane atrybutowe - kliknij prawym by edytować/zarządzać rekordami"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr "(tylko do odczytu)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Zapytanie SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Proste"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Zastosowanie instrukcji SELECT i ponowne wczytanie rekordów danych"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Pomocnik SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Pomocnik SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Edytuje wybrany rekord"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Wprowadź nowy rekord"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Usuń wybrane rekordy"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Usuń wszystkie rekordy"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Wybierz wszystkie"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Usuń selekcję"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Podświetl wybrane obiekty"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Podświetl wybrane obiekty i przybliż"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Wybierz zaznaczone obiekty"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Usuń zaznaczone obiekty"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Modyfikuj istniejący rekord"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Wartość '%(value)s' musi być wprowadzana jako  %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
@@ -4952,17 +5274,17 @@ msgstr ""
 "Nie można zmodyfikować istniejącego rekordu.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Wiersz z numerem kategorii %d już istnieje w tabeli."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Brakuje numeru kategorii (kolumna %s)."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -4971,29 +5293,29 @@ msgstr ""
 "Nie można wprowadzić nowego rekordu.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid "Selected data records (%d) will be permanently deleted from table. Do you want to delete them?"
 msgstr "Wybrane rekordy (%d) zostaną całkowicie usunięte z tabeli. Chcesz je wykasować?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Usuń rekordy"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid "All data records (%d) will be permanently deleted from table. Do you want to delete them?"
 msgstr "Wszystkie rekordy (%d) zostaną całkowicie usunięte z tabeli. Chcesz je wykasować?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Nic do wyodrębnienia."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Nie wskazano nic do usunięcia."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5004,7 +5326,7 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5017,57 +5339,57 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabela <%s> - kliknij prawym by usunąć kolumnę(y)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Kolumna"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Szerokość"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Zmień nazwę kolumny"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Nie można zmienić nazwy kolumny. Nie zdefiniowano nazwy kolumny."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already exists in the table <%(table)s>."
 msgstr "Nie można zmienić nazwy kolumny <%(column)s> na <%(columnTo)s>. Kolumna już istnieje w tabeli <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid "Unable to rename column. Column <%(column)s> doesn't exist in the table <%(table)s>."
 msgstr "Nie można zmienić nazwy kolumny. Kolumna <%(column)s> nie istnieje w tabeli <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Usuń wybraną kolumnę"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Usuń wszystkie kolumny"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid "Selected %s will PERMANENTLY removed from table. Do you want to drop the column?"
 msgstr "Wybrane kolumny '%s' zostaną całkowicie usunięte z tabeli. Chcesz je wykasować?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Usuń kolumny"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5078,101 +5400,101 @@ msgstr ""
 " %s\n"
 " zostaną całkowicie usunięte z tabeli. Chcesz je wykasować?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Lista warstw"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Odłącz także podłączoną tabelę atrybutów (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Nazwa kolumny"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Długość pola"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Sterownik"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Baza danych"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Klucz"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Dodaj warstwę"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Opis warstwy"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Kolumna z kluczem"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Wprowadź do tabeli wartości dla wszystkich kategorii"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Dodaj kategorie za pomocą modułu v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Opis tabeli"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Nazwa tabeli"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Tworzenie tabeli"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Dodaj warstwę"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Ustaw domyślne"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Usuń warstwę"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Warstwa do usunięcia"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "&Usuń warstwę"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modyfikuj warstwę"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modyfikuj warstwę"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5180,55 +5502,55 @@ msgstr ""
 "Nie można uzyskać listy tabel.\n"
 "Aby ustawić parametry bazy danych użyj db.connect."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr "Nie można utworzyć nowej tabeli. Brakuje nazwy tabeli lub nazwy kolumny przechowującej klucz."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "Nie można utworzyć nowej tabeli. Tabela <%s> już istnieje w bazie danych."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already exists."
 msgstr "Nie można dodać nowej warstwy do mapy wektorowej <%(vector)s>. Warstwa %(layer)d już istnieje."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Statystyki 3D"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Kopiuj bieżącą komendę do schowka (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Nie można zapisać ustawień"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Nie udało się utworzyć nowej lokacji"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Statystyki 3D"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5236,11 +5558,11 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Menadżer Tabeli Atrybutów GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5248,190 +5570,190 @@ msgid ""
 "Do you want to create a new attribute table and defined a link to vector map <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Czy utworzyć tabelę?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Zamknij dialog po zatwierdzeniu"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Nie znaleziono atrybutów."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Modyfikuj atrybuty"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Zdefiniuj atrybuty"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Wyświetl atrybuty"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Przeładuj"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Zatwierdź"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Wartość '%(value)s' musi być wprowadzana jako  %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Nieznany"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Jest problem z wczytaniem motywu ikon..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82
-#: ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "widok 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46
+#: ../gui/wxpython/mapdisp/toolbars.py:102 ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "widok 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Nie wybrano mapy!"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Zamknij plik projektu"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, python-format
 msgid "File %s not found"
 msgstr "Plik %s nie został odnaleziony"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, python-format
 msgid "Animation %d"
 msgstr "Animacja %d"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid "More animations are using one window. Please select different window for each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Nie można przeczytać pliku %s."
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Nic do wyodrębnienia."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Rektyfikacja rastra, poczekaj..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Rektyfikacja rastra, poczekaj..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Animacja"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 msgid "Animation Toolbar"
 msgstr "Pasek narzędzi animacji"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 msgid "Loading data"
 msgstr "Wczytywanie danych"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, fuzzy, python-format
 msgid "to %(to)s"
 msgstr "Na"
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Ustawienia <%s> nie odnalezione"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid "The temporal type (absolute/relative) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid "The number of maps to animate has to be the same as the number of maps in temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5440,1217 +5762,1217 @@ msgstr ""
 "Odczyt pliku projektu <%s> nie powiódł się.\n"
 "Plik uszkodzony, nie można przeanalizować dokumentu XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Ustawienia widoku 3D zapisano w pliku <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Dodaj wybrane warstwy do listy warstw"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Tworzy pustą bazę danych."
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Usuń warstwę mapy"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Usuń warstwę mapy"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Mapa wektorowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid "It is not allowed to display data with different temporal types (absolute and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid "You are going to display data with different temporal types of maps (interval and point). It is recommended to use data of one temporal type to avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr "%s=, %s=, %s= i %s=wzajemnie się wykluczają"
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr "Dostosuj prędkość animacji"
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr "Tryb zwykły"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "rozdzielczość:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr "ms"
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Tryb kategorii"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr "Jednostki czasu:"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Opcje tworzenia:"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr "rok"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr "miesiąc"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr "dzień"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr "godzina"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr "minuta"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr "sekunda"
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "Animacja już istnieje"
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 msgid "Add new animation"
 msgstr "Dodaj nową animację"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "animacja"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Zaawansowane"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Lista tabel"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Prawa autorskie"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "dolny kolor"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "dolny kolor"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr "Wybierz widok 2D lub 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Rozmiar i pozycja"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Wysokiej jakości:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Ustaw opcje"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Właściwości widoku 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Projekt"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Nie znaleziono parametru: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Zapisz region:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Wybierz region:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "wartość:"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr "N-S:"
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr "E-W:"
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Tworzy pustą bazę danych."
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Lista wtyczek"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Edytuj GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 msgid "Export animation"
 msgstr "Eksportuj animację"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Dekoracje"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Eksportuj"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Znacznik czasu"
 
-#: ../gui/wxpython/animation/dialogs.py:811
-#: ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987
+#: ../gui/wxpython/menustrings.py:2015
 msgid "Add image"
 msgstr "Dodaj obraz"
 
-#: ../gui/wxpython/animation/dialogs.py:811
-#: ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987
+#: ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Dodaj tekst"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 msgid "Font settings:"
 msgstr "Ustawienia czcionki:"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Próbkuj wartości wzdłuż przecięć"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Rozmiar obrazu"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Wybierz plik"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Zapisz sekwencję obrazów"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "animowany GIF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "SW"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 msgid "Export to:"
 msgstr "Eksportuj do:"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Prefix pliku:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 msgid "animation_"
 msgstr "animacja_"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Format pliku:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Katalog:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Wybierz katalog dla obrazów"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 msgid "GIF file:"
 msgstr "plik GIF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Wybierz plik do zapisania"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 msgid "SWF file:"
 msgstr "plik SWF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 msgid "AVI file:"
 msgstr "plik AVI:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Opcje tworzenia:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, python-format
 msgid "File %s not found."
 msgstr "Plik %s nie został odnaleziony."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Mapa wektorowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Eksport mapy wektorowej"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "Brak pliku %s"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr "Znacznik czasu"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Import danych rastrowych"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Odpytaj mapy rastrowe"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Zarządzanie mapami wektorowymi"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Odpytaj mapy rastrowe"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Import danych rastrowych"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Import danych wektorowych"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Import danych rastrowych"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Dane wejściowe"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Wybierz mapę rastrową:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Utwórz najpierw ramkę mapy."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Animacja"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Kolor tła:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr "Liczba procesów równoległych:"
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "użyj koloru tła:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "użyj koloru tła:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr "Czas"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Format współrzędnych"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid "Click and then press key up or down to preview different date and time formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr "Dowiedz się więcej na temat opcji formatowania"
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid "When animating instant-based data which have irregular timestamps you can display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 msgid "Invalid"
 msgstr "Niewłaściwy"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Zmień mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr "Odtwórz"
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr "Odtwórz wstecz"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Stop"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pauza"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr "Powtórz"
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr "Odtwórz do przodu i wstecz"
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr "Dodaj, edytuj lub usuń animację"
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Dodaj warstwę cieniowanego reliefu"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Niewłaściwa wartość współrzędnych. Operacja przerwana."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "punkt"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Analizy sieciowe"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis tool.\n"
 "Showed result may not correspond original analysis result."
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "%d map usunięto z bieżącego mapsetu"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Tworzenie nowej grupy <%s> nie powiodło się."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 #, fuzzy
 msgid "Vector map with analysis result does not exist."
 msgstr "Katalog %s nie istnieje."
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis tool.\n"
 "Topology column may not correspond to changed situation."
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Nie można ustawić"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Nadpisać?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Katalog %s nie istnieje."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Mapa wektorowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Warstwy mapy"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Dodaj warstwę"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Menadżer warstw"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Zarządzaj lub twórz raport kategorii"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Wybierz %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid "Chosen column '%s' does not exist in attribute table of layer '%s' of vector map '%s'.\n"
 msgstr "Usuwa kolumnę w tabeli atrybutów mapy wektorowej."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
+#: ../gui/wxpython/gui_core/vselect.py:49
 msgid "type"
 msgstr "typ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr "topologia"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 msgid "Start point"
 msgstr "Punkt początkowy"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 msgid "End Point"
 msgstr "Punkt końcowy"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 msgid "new point"
 msgstr "nowy punkt"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Kolumna numeryczna:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "węzeł"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, python-format
 msgid "Shortest path %s"
 msgstr "Najkrótsza trasa %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 msgid "End point"
 msgstr "Punkt końcowy"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr "Analizy komiwojażera %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr "Maksymalny przepływ %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 msgid "Source point"
 msgstr "Punkt źródła"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Pokaż punkty"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 msgid "Overwrite map layer"
 msgstr "Nadpisz warstwę mapy"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Analiza profilu"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Pasek narzędzi"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Pasek narzędzi"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Analizy sieciowe"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Ustawienia osi"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 msgid "Points"
 msgstr "Punkty"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Linie spływu"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Wyjście"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parametry"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Dodaj utworzoną mapę do listy warstw"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Dane wejściowe"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Lista tabel"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Wczytywanie danych..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Wczytywanie danych..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Katalog %s nie istnieje."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analiza"
 
-#: ../gui/wxpython/vnet/dialogs.py:870
-#: ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44
-#: ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Ustawienia"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "Model jest wykonywany..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Ustawienia rastra"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Styl linii"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Tabele kolorów"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, python-format
 msgid "Invert colors %s:"
 msgstr "Odwróć kolory %s:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 msgid "Line color:"
 msgstr "Kolor linii:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 msgid "Color for unused point:"
 msgstr "Kolor nie używanego punktu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 msgid "Color for selected point:"
 msgstr "Kolor wybranego punktu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Rozmiar czcionki:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Szerokość linii:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Próg przyciągania"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Nowa mapa wektorowa <%s> została utworzona"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Okno Mapy"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 msgid "Add new point"
 msgstr "Dodaj nowy punkt"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Usuń wybraną lokację"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Analizy sieciowe"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Pokaż linie"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Ustawienia mapy wektorowej"
 
-#: ../gui/wxpython/vnet/toolbars.py:121
+#: ../gui/wxpython/vnet/toolbars.py:137
 #: ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Pokaż podręcznik"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 msgid "Availiable analyses"
 msgstr "Dostępne analizy"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Renderuj"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Włącz/wyłącz automatyczne odświeżanie"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Pokaż bieżący region"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Pokaż zakres regionu obliczeniowego"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid "Show/hide computational region extent (set with g.region). Display region drawn as a blue box inside the computational region, computational region inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Tryb wyświetlania"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid "Align region extent based on display size from center point. Default value for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Rozdzielczość wyświetlania"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Ogranicz rozdzielczość wyświetlania do ustawień regionu obliczeniowego"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid "Constrain display resolution to computational region settings. Default value for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Skala mapy"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid "As everyone's monitors and resolutions are set differently these values are not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Idź do"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Nie zdefiniowano układu współrzędnych (sprawdź ustawienia)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Błąd w projekcji (sprawdź ustawienia)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Odwzorowanie"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Wybierz zdefiniowane odwzorowanie"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid "Reproject coordinates displayed in the statusbar. Projection can be defined in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASKA"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Geometria wyświetlania"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Współrzędne"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Zakres"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Przybliż do regionu obliczeniowego (ustawionego przez g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Okno mapy"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 msgid "Unable to get GRASS version\n"
 msgstr "Nie można ustalić wersji GRASS-a\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "Okno Mapy GRASS GIS:  %(id)d  - lokacja: %(loc)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6659,11 +6981,11 @@ msgstr ""
 "Nie można wprowadzić nowego rekordu.\n"
 "%s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "Narzędzia wektoryzacji"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6676,357 +6998,383 @@ msgstr ""
 "\n"
 "Szczegóły: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Uruchamianie trybu 3D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Proszę czekać, ładuję dane..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr "Proszę czekać, odłączanie danych..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr "Przełączanie do trybu 2D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Wektoryzuj"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr "Nie została wybrana żadna warstwa mapy. Operacja przerwana."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Żadna mapa wektorowa nie została wybrana do edycji."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253
-#: ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350
+#: ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Dodaj warstwę tekstową"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 msgid "Set computational region extent from display"
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Przybliż do regionu obliczeniowego (ustawionego przez g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Narzędzia wektoryzacji"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr "Nie znaleziono modułu '%s'. Nie można uruchomić okna wyświetlania mapy."
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Ramka mapy"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Wyświetl mapę"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Nieobsługiwane jednostki"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr "Otwieranie okna mapy <%s>..."
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Nie można utworzyć pliku '%s'\n"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Zamykanie okna mapy <%s>..."
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Wybierz obiekty wektorowe"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Nie można utworzyć mapy wektorowej."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Podziałka liniowa"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "Pokaż legendę"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Dodaj strzałkę północy"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analiza mapy"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Pomiary, profile, histogramy, ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Pomiar odległości"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Pomiar odległości"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profil terenu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Utwórz histogram obrazu lub pliku rastrowego"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Utwórz histogram obrazu lub pliku rastrowego"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Narzędzie wektorowych analiz sieciowych"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Przeciągnij myszą by obracać sceną 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "Tryb nalotu"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Kliknij myszą by powiększyć"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Kliknij myszą by pomniejszyć"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Tryb 3D nie jest dostępny"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Powód: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Narzędzia digitalizacji nie jest dostępne"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid "Note that the wxGUI's vector digitizer is currently disabled (hopefully this will be fixed soon). Please keep an eye out for updated versions of GRASS. In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr "Digitizer wxGUI jest obecnie wyłączony (miejmy nadzieję, że niedługo uda nam się go naprawić). Śledź aktualizacje GRASS-a. Do tego czasu można używać \"v.digit\" z menu Wektor > Tworzenie mapy wektorowej."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Wyjdź z digitizera"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 msgid "Draw sampling frame"
 msgstr "Rysuj ramkę próbkującą"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 msgid "Draw sampling rectangle"
 msgstr "Rysuj prostokąt próbkujący"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 msgid "Draw sampling circle"
 msgstr "Rysuj okrąg próbkujący"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 msgid "Draw sampling region"
 msgstr "Rysuj region próbkujący"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Zmień nazwę pliku konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Zmień nazwę pliku konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr "UWAGA"
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr "Ustawienia modułów r.li GRASS GIS"
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr "Usuń plik konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "Utwórz"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr "Utwórz nowy plik konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Zmień nazwę"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr "Zmień nazwę pliku konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Edytuj GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Zmień nazwę pliku konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Czy chcesz utworzyć lokację GRASS-a <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Utworzyć nową lokację?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr "Musisz wybrać plik konfiguracji"
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid "Set the new name for %s \"                                            \"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr "Zmień nazwę pliku konfiguracji"
 
@@ -7035,505 +7383,515 @@ msgstr "Zmień nazwę pliku konfiguracji"
 msgid "Create new configuration file for r.li modules"
 msgstr "Edytor konfiguracji dla r.li. 'index'"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Czy chcesz utworzyć lokację GRASS-a <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Utworzyć nową lokację?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Anulowano pracę kreatora lokacji. Lokacja nie została utworzona."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Wybierz mapy do wyświetlania"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Nazwa nowej mapy rastrowej"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Ustawienia mapy rastrowej"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Ustawienia mapy wektorowej"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Ustawienia mapy wektorowej"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Usuń warstwę mapy"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Wczytaj ustawienia:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr "Rysuj ramkę próbkującą"
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Parametry terenu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr "Kolumna górnego lewego rogu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr "Wiersz górnego lewego rogu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Wprowadź istniejącą mapę rastrową"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 msgid "Regions"
 msgstr "Regiony"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "jednostki mapy"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Pływające okno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Nie można utworzyć mapy wektorowej."
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Wybierz plik"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr "Ta opcja nie jest jeszcze obsługiwana"
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Liczba segmentów:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Czy chcesz utworzyć lokację GRASS-a <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Czy chcesz zapisać zmiany na mapie wektorowej <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Kolor podziałki:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Wybierz obiekty wektorowe"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Pasek narzędzi"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Wprowadź istniejącą mapę rastrową"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Wprowadź istniejącą mapę rastrową"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Pływające okno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "Wybrana warstwa mapy nie jest wektorową."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Wybierz mapę wektorową"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr "Okrąg"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Szerokość:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Nazwa mapy rastrowej:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "grafy map tematycznych"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Ogólna liczba klatek :"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "jednostki mapy"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Pływające okno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Liczba segmentów:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Liczba segmentów:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 msgid "Draw Sampling "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 msgid "Select sampling areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 msgid "Select sample area "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid "The raster map <%s> already exists. Please remove or rename the maps with the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 msgid "Select sample area 1 of "
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Podsumowanie"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 msgid "Raster name:"
 msgstr "Nazwa rastra:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 msgid "Vector name:"
 msgstr "Nazwa wektora:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr "Rodzaj egionu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Typ warstwy mapy:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Ustawianie granic rastra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 msgid "Type of shape:"
 msgstr "Typ kształtu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Nazwa mapsetu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 msgid "Width size:"
 msgstr "Szerokość:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 msgid "Height size:"
 msgstr "Wysokość:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Liczba segmentów:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Odległość od obiektów"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Liczba segmentów:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Kolumna numeryczna:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Witaj w Interaktywnej Konsoli Shell %s wxGUI"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Wpisz %s aby uzyskać więcej informacji na temat skryptowania w GRASS-ie"
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Wpisz %s aby dodać raster lub wektor do listy warstw."
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Wyczyść cały tekst z shella"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+msgid "Simple &editor"
+msgstr "Prosty &edytor"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Mapa rastrowa lub wektorowa <%s> nie została odnaleziona"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Mapa rastrowa <%s> została dodana"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Mapa wektorowa <%s> została dodana"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Menadżer warstw GRASS GIS"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Pasek narzędzi projektu"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Pasek narzędzi danych"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Pasek narzędzi"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Narzędzia wektoryzacji"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr "Narzędzia widoku 3D"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Zmień nazwę Okna Mapy"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Warstwy mapy"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Warstwy"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+msgid "Console"
 msgstr "Wiersz poleceń"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-#, fuzzy
-msgid "Search modules"
-msgstr "Znajdź moduł"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "Moduły"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
-msgstr "Konsola Pythona"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+msgid "Python"
+msgstr "Python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7544,230 +7902,218 @@ msgstr ""
 "\n"
 "Czy chcesz przełączyć do nowej lokacji?"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "Czy przełączyć na nową lokację?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Bieżąca lokacja to <%(loc)s>.\n"
-"Bieżący mapset to <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Wybierz model do uruchomienia"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Czy chcesz zapisać zmiany w pliku projektu?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Czy chcesz zapisać bieżące ustawienia w pliku projektu?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Zamknij Okno Mapy %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid "Command '%s' not yet implemented in the WxGUI. Try adding it as a command layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "Wybrana warstwa mapy nie jest wektorową."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Przebudowuje topologię dla wszystkich map wektorowych w bieżącym mapsecie."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Wybierz plik ze skryptem do wykonania"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Skrypt pythona(*.py)|*.py|Skrypt bash (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid "Due to the limitations of your operating system, the script path cannot contain certain non-ascii characters. Please rename the script or move it to a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Plik skryptu '%s' nie istnieje. Operacja przerwana."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid "Script <%s> is not executable. Do you want to set the permissions that allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr "Czy ustawić pozwolenie?"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Niewłaściwa wartość współrzędnych. Operacja przerwana."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this directory to GRASS_ADDON_PATH?"
 msgstr "Ścieżka '%s' nie jest zdefiniowana w GRASS_ADDON_PATH. Czy chcesz dodać tę ścieżkę do GRASS_ADDON_PATH?"
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr "Czy odświeżyć ścieżkę do rozszerzeń?"
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Uruchamianie skryptu '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Nie została wybrana żadna warstwa mapy. Operacja przerwana"
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Nie została wybrana żadna warstwa mapy. Operacja przerwana"
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Bieżący mapset to <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Zmień mapset"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Wybierz ścieżkę:"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid "If ~ (tilde) is present as the first directory on the path, it is replaced by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Wybierz katalog wejściowy"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "System Info"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Wersja GRASS-a"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Nieznana wartość"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
 msgstr "Rewizja SVN"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr "Twórz datę"
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Data "
 
-#: ../gui/wxpython/lmgr/frame.py:1104
+#: ../gui/wxpython/lmgr/frame.py:1222
 #, fuzzy
-msgid "Build Platform"
+msgid "Build platform"
 msgstr "Platforma"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Platforma"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid "Current workspace is not empty. Do you want to store current settings to workspace file?"
 msgstr "Aktualny plik projektu nie jest pusty. Czy chcesz zapisać aktualne ustawienia do pliku projektu?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Utworzyć nowy projekt?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Wybierz plik projektu"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "Plik projektu GRASS (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Proszę czekać, wczytywanie pliku projektu..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Wybierz plik GRC"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Stary plik projektu GRASS (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Wybierz plik, w którym zapisać bieżący projekt"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr "Plik projektu <%s> już istnieje. Chcesz go nadpisać?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Zapisz plik projektu"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "Zapis bieżących ustawień do pliku projektu nie powiódł się."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Wprowadź nową nazwę:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "Okno Mapy GRASS GIS:  %(name)s  - Lokacja: %(loc)s"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7775,38 +8121,38 @@ msgid ""
 "Reason: %s"
 msgstr "Wystąpił problem z wczytaniem motywu ikon. Powód: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr ""
 "Nie można wprowadzić nowego rekordu.\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr ""
 "Nie można wprowadzić nowego rekordu.\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Dodaj wybrane warstwy do listy warstw"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Nieobsługiwany typ warstwy <%s>."
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid "Note that cell values can only be displayed for regions of less than 10,000 cells."
 msgstr "Wartości komórek mogą być wyświetlane dla regionów mniejszych niż 10,000 komórek."
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "nieprzezroczystość:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -7817,52 +8163,48 @@ msgstr ""
 "%s\n"
 " z listy warstw?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "Czy chcesz usunąć wybraną warstwę mapy z listy warstw?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Usuń warstwę mapy"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Wyjdź z GRASS GIS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "BŁĄD: Nie można ustalić wersji GRASS. Szczegóły: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr "Nie została wybrana żadna warstwa mapy. Operacja przerwana."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid "Display resolution is currently not constrained to computational settings. It's suggested to constrain map to region geometry. Do you want to constrain the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr "Ograniczyć mapę do geometrii regionu?"
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
 #: ../gui/wxpython/menustrings.py:1019
-#: ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Import danych rastrowych"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
 #: ../gui/wxpython/menustrings.py:1144
-#: ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "rastrów"
 
@@ -7877,13 +8219,13 @@ msgstr "Wybierz wyjściowy format rastra"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
 #: ../gui/wxpython/menustrings.py:1050
-#: ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Import danych wektorowych"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
 #: ../gui/wxpython/menustrings.py:1146
-#: ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "wektorów"
 
@@ -7904,7 +8246,7 @@ msgstr "Import danych z serwerów WMS"
 msgid "Add command layer"
 msgstr "Dodaj warstwę komendy"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Wyjdź"
@@ -7956,8 +8298,8 @@ msgid "Add rhumbline layer"
 msgstr "Dodaj warstwę rhumbline"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Dodaj warstwę rastrową 3D"
 
@@ -7977,881 +8319,882 @@ msgstr "Tryb edycji"
 msgid "Background vector map"
 msgstr "Podkładowa mapa wektorowa"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Warstwy mapy"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Zmień poziom przezroczystości"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "Właściwości widoku 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Powiększ do wybranych map"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Ustaw zasięg wybranych map jako region obliczeniowy"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr "do popularnych formatów   /GDAL/"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr "PostGIS eksport"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Utwórz"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr "Utwórz kopię w bieżącym mapsecie"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Ustaw tabelę kolorów"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Pokaż tabelę atrybutów"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Zacznij edycję"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Zakończ edycję"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Przebuduj topologię"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Przybliż do wybranej mapy (ignoruj wartości NULL)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+msgid "Set color table interactively"
+msgstr "Ustaw tabelę kolorów interaktywnie"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Statystyki mapy rastrowej"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Raporty i statystyki"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr "Zapisz warstwę usługi sieciowej"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Nie można utworzyć profilu dla mapy rastrowej."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, fuzzy, python-format
-msgid "Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII characters excluding %(chars)s and space."
-msgstr "Nazwa <%(name)s> nie jest poprawną nazwą dla lokacji. Użyj wyłącznie znaków ASCII łącznie z %(chars)s i spacją."
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "Mapa rastrowa 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Nieobsługiwany typ mapy <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Wpisz nazwę nowego mapsetu:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Utwórz kopię %s <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "Mapa wektorowa <%s> już istnieje w bieżącym mapsecie. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Nadpisać?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Nie można otworzyć kopii <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Nie można utworzyć kopii <%s>. Mapset <%s>nie jest bieżącym mapsetem."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Nie można wyświetlić histogramu mapy rastrowej."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Ustaw przezroczystość<%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Grupa warstw:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Kliknij by edytować ustawienia warstwy"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(kliknij dwukrotnie by ustawić właściwości)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Proszę czekać, aktualizacja danych..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Otwórz nowe okno mapy"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Utwórz nowy plik projektu (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Otwórz projekt (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Zapisz projekt (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Dodaj wiele map rastrowych lub wektorowych (Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Dodaj warstwę rastrową (Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Dodaj różne warstwy rastrowe (RGB, HIS, shaded relief...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Dodaj warstwę wektorową (Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Dodaj warstwę tematyczną (thematic, chart...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Dodaj grupę warstw"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr "Dodaj różne nakładki"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Usuń wybrane warstwy mapy z listy warstw"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Import/linkowanie danych rastrowych lub wektorowych"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Kalkulator map rastrowych"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Graficzny modeler"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Georektyfikacja"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Kompozytor wydruków"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr "Uruchom skrypt użytkownika"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "Ustawienia GUI"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Pokaż podręcznik"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr "Edytuj wybraną mapę wektorową"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Przeładuj dane atrybutowe (tylko zaznaczoną warstwę)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Twórz polecenie dla m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr "Tworzy polecenie dla m.nviz.image na podstawie bieżącego stanu"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr "Ustawienia widoku 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr "Pokaż okno dialogowe ustawień widoku 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr "Pokaż pomoc widoku 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid "This module requires the NumPy module, which could not be imported. It probably is not installed (it's not part of the standard Python distribution). See the Numeric Python site (http://numpy.scipy.org) for information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "Analiza profilu"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profil"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Długość (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Długość linii profilu"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Wartości komórki"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Wartości mapy rastrowej"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Musisz narysować linię profilu w oknie mapy."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nie wskazano nic do wykonania profilu"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "Wartości oddzielone przecinkami (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Nadpisać?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Nie można otworzyć piku<%s> do zapisu."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr "Nie utworzono plików."
 
 # profile to raczej przekrój niż profil
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr "Statystyki dla profili"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 msgid "Raster cell values"
 msgstr "Wartości mapy rastrowej"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Nie wskazano nic do wczytania."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Wybierz 1. mapę rastrową (zalecane):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, python-format
 msgid "Raster <%s> cell values"
 msgstr "Wartości mapy rastrowej <%s>"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, python-format
 msgid ": %s"
 msgstr ": %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Informacje statystyczne dla rastrowych warstw mapy."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Rysuj/przerysuj profil"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Narysuj linię profilu w oknie mapy aby wykonać profil"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr "Opcje wydruku"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr "Statystyki wydruku"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Zapisz dane profilu do pliku CSV"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr "Wyjdź z narzędzia wydruku"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Lewy: nowy punkt"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Ustawienia tekstu"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr "Ustawienia wydruku"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Ta funkcja jeszcze w pełni nie działa"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "W fazie tworzenia"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Narzędzie histogramu GRASS GIS"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogram grupy zobrazowań  <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Histogram mapy rastrowej <%s>"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 msgid "Histogram of selected raster maps"
 msgstr "Histogram wybranej mapy rastrowej"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, python-format
 msgid "Raster cell values %s"
 msgstr "Wartości komórek mapy rastrowej %s"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr "Poligon"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Informacje statystyczne dla mapy rastrowej <%s>"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr "Wybierz mapę rastrową do wykonania profilu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr "Wybierz mapę rastrową do wykonania profilu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Wybierz mapę rastrową do wykonania profilu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "Kopiuj"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Kopiuj bieżącą komendę do schowka (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "Kopiuj bieżącą komendę do schowka (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Wybierz 2. mapę rastrową (opcjonalnie):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Wybierz mapę rastrową:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 msgid "Select image group:"
 msgstr "Wybierz grupę zobrazowań:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 msgid "Histogram type"
 msgstr "Typ histogramu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 msgid "Selected group must be in current mapset"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Tytuł profilu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Wielkość czcionki tytułu (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "Etykieta osi Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Etykieta osi Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Wielkość czcionki etykiety (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Czcionka:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Styl:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Waga:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692
-#: ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831
+#: ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Zatwierdź zmiany dla bieżącej sesji i zamknij okno dialogowe"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Ustawienia profilu zapisano w pliku '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Nie wybrano warstwy mapy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr "Ustawienia wybranej mapy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Kolor linii"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Ustawienia markerów przecięcia segmentu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "Punkty wektorowe"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Ustawienia osi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Oś X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Oś Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Skala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Minimum użytkownika"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Maksimum użytkownika"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Skala logarytmiczna"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Ustawienia  siatki i legendy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Kolor siatki"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Wyświetlaj siatkę"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Rozmiar czcionki legendy"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Pokaż legendę"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Ustawienia profilu zapisano w pliku '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Histogram GRASS GIS (d.histogram)"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
 msgstr "Niewłaściwe dane wejściowe"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Kolumna atrybutów:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
 msgstr "Wybierz obiekty wektorowe"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Rysowanie"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Pomoc"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Niewłaściwe dane wejściowe"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Mapa wektorowa <%s> nie odnaleziona"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid "Datasets have different temporal type (absolute x relative), which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid "Both coordinates and categories are set, coordinates will be used. The use categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Tryb kategorii"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Czas"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Niewłaściwe dane wejściowe"
+msgid "Seed point outside the current region"
+msgstr "Obrysuj zasięg bieżącego regionu"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Niewłaściwe dane wejściowe"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Niewłaściwe dane wejściowe"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Niewłaściwe dane wejściowe"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Import danych rastrowych"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Import danych wektorowych"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Import danych rastrowych"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid "With stvds it is not possible to use 'coordinates' and 'cats' options together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Plik"
 
@@ -8859,8 +9202,8 @@ msgstr "&Plik"
 msgid "Workspace"
 msgstr "Projekt"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Nowy"
 
@@ -8868,7 +9211,7 @@ msgstr "Nowy"
 msgid "Create new workspace"
 msgstr "Tworzy nowy projekt"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Otwórz"
 
@@ -8876,12 +9219,12 @@ msgstr "Otwórz"
 msgid "Load workspace from file"
 msgstr "Otwiera plik projektu"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Zapisz"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Zapisz jako"
 
@@ -8902,7 +9245,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Wczytuje warstwy mapy z pliku GRC do listy warstw."
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Wyświetl mapę"
 
@@ -8931,7 +9274,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Dodaj warstwy rastrowe i wektorowe do bieżącego podglądu"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr "Dodaj warstwę usługi sieciowej"
 
@@ -9585,23 +9928,23 @@ msgstr "Bryły 3D do serii map rastrowych"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Konwertuje mapy rastrowe 3D do map rastrowych 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georektyfikacja"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Zarządzaj Terenowymi Punktami Kontrolnymi (GCP)"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Modeler graficzny"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Uruchom modeler graficzny"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Uruchom model"
 
@@ -9636,16 +9979,16 @@ msgstr "Kąty/odległości do współrzędnych"
 msgid "A simple utility for converting bearing and distance measurements to coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Otwórz kompozytor wydruków"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Typ warstwy mapy:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Uruchom skrypt"
@@ -9658,7 +10001,7 @@ msgstr "Uruchom skrypt"
 msgid "Launches script file."
 msgstr "Uruchamia plik ze skryptem."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 msgid "Close GUI"
 msgstr "Zamknij GUI"
 
@@ -9666,8 +10009,8 @@ msgstr "Zamknij GUI"
 msgid "Quit wxGUI session."
 msgstr "Zamyka sesję wxGUI"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 msgid "Quit GRASS GIS"
 msgstr "Wyjdź z GRASS GIS"
 
@@ -9675,7 +10018,7 @@ msgstr "Wyjdź z GRASS GIS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "&Ustawienia"
 
@@ -9832,7 +10175,7 @@ msgstr "Aktualizuj wtyczki"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Usuwa zainstalowane wtyczki."
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Preferencje"
 
@@ -10753,7 +11096,7 @@ msgid "Generates a raster map using gaussian random number generator. Mean and s
 msgstr "Oszacowanie powierzchni obszaru dla map rastrowych."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Płaszczyzna"
 
@@ -10979,8 +11322,8 @@ msgid "Develop vector map"
 msgstr "Tworzenie mapy wektorowej"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Utwórz nową mapę wektorową"
 
@@ -11769,12 +12112,12 @@ msgid "Classifies the cell spectral reflectances in imagery data. Classification
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
 
@@ -12784,27 +13127,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Lista narzędzi mapy"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Pokaż zakres regionu obliczeniowego"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
 msgstr "Histogram GRASS GIS (d.histogram)"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Pokaż zakres regionu obliczeniowego"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "Pomoc"
 
@@ -12831,7 +13178,7 @@ msgid "Prints system information"
 msgstr "Informacje"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "O GRASS GIS"
 
@@ -12845,268 +13192,276 @@ msgstr "Import danych wektorowych"
 msgid "Attribute table manager"
 msgstr "Zamknij Menadżera Tabeli Atrybutów"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Tworzy nowy model."
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Otwiera model z pliku."
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Zapisuje model do pliku."
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Zamyka plik modelu."
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Eksportuj jako obraz"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Eksportuj model jako obraz"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Eksportuj do Pythona"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Eksportuj model do skryptu Pythona"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Wyjdź"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Zamyka okno modelera."
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Model"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Dodaj polecenie"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Dodaj akcję (polecenie GRASS) do modelu"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Dodaj dane"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Dodaj dane do modelu"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Definiuj relację"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Zdefiniuj relację między danymi a akcjami"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "Dodaj pętlę / serie"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "Dodaje pętlę (serie) do modelu"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Dodaj warunek"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Dodaje warunek (if/else) do modelu"
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Dodaje warunek (if/else) do modelu"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Usuń obiekt"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Usuwa akcję/dane z modelu"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Wyświetla właściwości modelu (nazwę, opis, etc.)."
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Usuń dane tymczasowe"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Uruchamianie modelu"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Sprawdź model"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Sprawdzanie modelu"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Wyświetla podręcznik modelera w HTML."
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "O graficznym modelerze"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Wyświetla informacje na temat graficznego modelera."
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Nie można przeczytać instrukcji %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr "Eksportuj plik instrukcji"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "Eksportuj do PostScript"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "Eksportuj do PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr "Uruchom dialog ps.map"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr "Zamknij kompozytor wydruków"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "&Wprowadź"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 msgid "Add or edit map frame"
 msgstr "Dodaj lub zmień ramkę mapy"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr "Dodaj lub edytuj mapę rastrową"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr "Dodaj lub edytuj mapę wektorową"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "Legenda mapy"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Import danych rastrowych"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr "Dodaj lub edytuj informację o mapie"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr "Dodaj lub edytuj pasek skali"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "Dodaj strzałkę północy"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Wyświetl podręcznik HTML kompozytora wydruków"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr "O kompozytorze wydruków"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Wyświetla informacje na temat graficznego modelera."
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Wyszukiwarka modułów"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Ukryj wyszukiwarkę modułów"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Okno polecenia"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Okno wyjścia"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Wyczyść wynik"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Wyczyść okno polecenia"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Zapisz zawartość okna do pliku"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Zatrzymaj bieżącą komendę"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr "Do &pliku"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid "Toggle to save list of executed commands into a file; content saved when switching off."
 msgstr "Zapisz listę wykonanych poleceń do pliku;zawartość zostanie zapisana przy wyjściu."
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Zapisz plik jako..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Pliki tekstowe"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Pliki"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13117,13 +13472,13 @@ msgstr ""
 "\n"
 "Szczegóły: %(reason)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Wynik polecenia zapisano w '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442
-#: ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492
+#: ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13134,299 +13489,330 @@ msgstr ""
 "\n"
 "Szczegóły: %(reason)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Wynik polecenia zapisano w '%s'"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+msgid "category"
+msgstr "kategoria"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Wybierz obiekty wektorowe"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+msgid "Create a new map"
+msgstr "Utwórz nową mapę"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Mapa wektorowa nie jest mapą 3D. Operacja przerwana."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Nie można otworzyć mapy wektorowej <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Nie wybrano mapy!"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Nowa mapa wektorowa <%s> została utworzona"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Nie można utworzyć mapy wektorowej <%s>"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 #, fuzzy
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Drzewo menu (podwójnie kliknij by uruchomić polecenie)"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Uruchom polecenie"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Ustawienia użytkownika"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Ustaw jako domyślne"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Przywróć domyślne ustawienia i zatwierdź zmianę"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Zatwierdź zmiany dla bieżącej sesji i zamknij okno dialogowe"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Zastosuj zmiany dla bieżącej sesji"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Ustawienia zatwierdzone dla bieżącej sesji, ale nie zapisane"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Kolumna zawierająca klucz nie może być pusta."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Ustawienia GUI"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Ustawienia menadżera warstw"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Pytaj przy usuwaniu warstwy z listy warstw"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Pytaj przy zamykaniu wxGUI lub okna"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Ukryj zakładkę '%s' (wymaga restartu GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Znajdź moduł"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr "Automatycznie kopiuj wybrany tekst do schowka (z wiersza pleceń)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Ustawienia projektu"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Zapisz układ okien jako domyślny"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid "Save current position and size of Layer Manager window and opened Map Display window(s) and use as default for next sessions."
 msgstr "Zapisuje bieżącą pozycję i rozmiar okien."
 
-#: ../gui/wxpython/gui_core/preferences.py:372
-#: ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464
+#: ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Wygląd"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Czcionka w wierszu poleceń:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Ustawienia językowe"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 #, fuzzy
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Styl menu (wymaga restartu GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Ustawienia wyglądu"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Lista elementów:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 #, fuzzy
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Styl menu (wymaga restartu GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Wysokość okna wyboru mapy (w pikselach):"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Styl ikon (wymaga restartu GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Okno poleceń"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Okno Mapy"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Domyślna czcionka dla okien mapy GRASS-a:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Domyślne ustawienia wyświetlania"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Sterownik ekranu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Tryb paska statusu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Włącz auto-rendering"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Włącz automatyczne powiększanie do wybranych map"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Czynność kółka myszy:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr "Kierunek przewijania myszą:"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Zaawansowane ustawienia legendy"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "Moduły"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Ustawienia okna poleceń"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Zamknij okno po pozytywnym zakończeniu polecenia"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Dodaj utworzoną mapę do listy warstw"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Zezwól na interaktywne wejście"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Poziom szczegółowości:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Warstwy"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr "Domyślne ustawienia rastra"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Ustaw komórki NULL jako nieprzezroczyste"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Domyślna tabela kolorów"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr "Domyślne ustawienia wektora"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Wyświetl:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "Kolor obiektu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Przezroczysty"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "Kolor wypełnienia poligonu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "Symbol:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Szerokość linii (w pikselach):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Podświetl wybrane obiekty i przybliż"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Przeglądanie danych"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Podwójne kliknięcie lewym:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Kodowanie znaków (np. utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Pytaj przy usuwaniu rekordów z tabeli"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Tworzenie tabeli"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Kolumna z kluczem:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Ustawienia paska odwzorowań"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the Map Display\n"
@@ -13435,78 +13821,88 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Kod EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Ciąg Proj.4 (wymagane):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "Plik EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string directly."
 msgstr "Wczytaj kody EPSG (bądź cierpliwy), wpisz kod EPSG lub podaj bezpośrednio ciąg Proj.4"
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "&Wczytaj kody EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Format współrzędnych"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Ustaw"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Precyzja:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Nie można przeczytać kodów EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Nie można przeczytać kodów EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Nie znaleziono kodu EPSG %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Wybierz domyślną czcionkę wyświetlania"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Wybierz domyślną czcionkę wyświetlania"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Wybierz czcionkę:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Kodowanie znaków:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+msgid "Example"
+msgstr "Przykład"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Zarządzanie sostępem do mapsetów"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -13515,256 +13911,341 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Właściciel"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 msgid "Query results"
 msgstr "Wyniki zapytania"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr "Kliknij prawym by skopiowac wybrane wartości do schowka."
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Feature"
 msgstr "Obiekt"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr "Wartość"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr "Kopiuj wszystko do schowka"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 msgid "Redirect to console"
 msgstr "Przekieruj do konsoli"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr "Wczytaj z kolumny '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 msgid "Copy selected lines"
 msgstr "Kopiuj wybrane linie"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, python-format
 msgid "Copy '%s'"
 msgstr "Kopiuj '%s'"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 msgid "Copy line"
 msgstr "Kopiuj linię"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 msgid "Query results:"
 msgstr "Wyniki zapytania:"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "północ"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr "Nic nie znaleziono"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr "(...)"
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, fuzzy, python-format
+msgid "Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII characters excluding %(chars)s and space."
+msgstr "Nazwa <%(name)s> nie jest poprawną nazwą dla lokacji. Użyj wyłącznie znaków ASCII łącznie z %(chars)s i spacją."
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 #, fuzzy
 msgid "Fulltext search"
 msgstr "Pełen zasięg"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 #, fuzzy
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr "Znajdź moduł - (wciśnij Enter aby przejść do następnego)"
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d modułów pasuje"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Zapisz bieżące ustawienia"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr "Usuń wybrane ustawienia"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Wczytaj ustawienia:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "Wczytaj"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Ustawienia <%s> nie odnalezione"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Zapisz ustawienia"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "Nie podano nazwy, ustawienia nie zostały zapisane."
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Ustawienia <%s> już istnieją. Czy chcesz je nadpisać?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "Nie zdefiniowano ustawień. Operacja przerwana."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "Nie można zapisać ustawień"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Zapisz plik"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Wpisz parametry dla '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Uruchom polecenie (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Animacja"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Wpisz parametry dla '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Zamknij okno bez wykonywania polecenia (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Uruchom polecenie (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Kopiuj bieżącą komendę do schowka"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Wyświetl pomoc dla tego polecenia (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Dodaj utworzoną mapę do listy warstw"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Zamknij okno po zakończeniu"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid "Close dialog when command is successfully finished. Change this settings in Preferences dialog ('Command' tab)."
 msgstr "Zamknij okno po pomyślnym zakończeniu polecenia. Zmień ustawienia w oknie dialogowym Preferencje ('Command' tab)."
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' skopiowano do schowka"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Podstawa"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Opcje"
 
-#: ../gui/wxpython/gui_core/forms.py:904
-#: ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Nie znaleziono paramentru: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[wiele]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "poprawny zakres"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Ustaw kolor"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Wybierz %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "&Wczytaj"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Zmień nazwę pliku konfiguracji"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 msgid "&Save as"
 msgstr "Zapisz jako"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "lub wprowadź wartości interaktywnie"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid "Enter file content directly instead of specifying a file. Temporary file will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Katalog"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Id warstwy"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Nazwa warstwy"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+msgid "Projection match"
+msgstr "Zgodność odwzorowania"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Przewodnik"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr "Nie wskazano nic do wczytania."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, python-format
 msgid ""
 "Unable to load file.\n"
@@ -13775,44 +14256,44 @@ msgstr ""
 "\n"
 "Powód: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Nie wskazano nic do zapisu."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Zapisz wejście jako..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 msgid "No dataset given."
 msgstr "Nie podano zestawu danych"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Błąd w %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Nie można przetworzyć polecenia '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: parametr '%(key)s' jest niedostępny"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr "Spróbuj ustawić zmienną GRASS_ADDON_PATH lub GRASS_ADDON_BASE."
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr "Wymagany obiekt nie jest zdefiniowany."
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Wybierz lokację i mapset GRASS"
 
@@ -13821,45 +14302,45 @@ msgstr "Wybierz lokację i mapset GRASS"
 msgid "Location or mapset is not defined."
 msgstr "Brakuje lokacji lub mapsetu."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Nazwa lokacji GRASS:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Nazwa mapsetu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Wybierz mapset w lokacji GRASS"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "Brakuje nazwy mapsetu."
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr "Brakuje nazwy mapy wektorowej."
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Utwórz tabelę atrybutów"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 msgid "Name of new vector map is missing."
 msgstr "Brak nazwy nowej mapy wektorowej."
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Nazwa nowej mapy wektorowej:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Nie można utworzyć mapy wektorowej <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
@@ -13868,487 +14349,377 @@ msgstr ""
 "Niewłaściwa lub pusta kolumna klucza.\n"
 "Nie można utworzyć mapy wektorowej <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid "Vector map <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "Mapa wektorowa <%s> już istnieje w bieżącym mapsecie. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Wybierz region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Zapisz region:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid "Name cannot begin with '.' and must not contain space, quotes, '/', ''', '@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr "Utwórz/edytuj grupę"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr "Zastosuj zmiany i zamknij okno"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr "Zastosuj zmiany dla wybranej grupy"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr "Zamknij okno bez zastosowania zmian"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid "Put here a regular expression. Characters '.*' stand for anything, character '^' stands for the beginning and '$' for the end."
 msgstr "Wpisz tu wyrażenie regularne. Znak '.*' oznacza jakikolwiek ciąg, znak '^' oznacza początek a '$' koniec."
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 #, fuzzy
 msgid "Select existing group or enter name of new group:"
 msgstr "Wybierz grupę do edycji lub wprowadź nazwę nowej grupy:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 #, fuzzy
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr "Wybierz grupę do edycji lub wprowadź nazwę nowej grupy:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr "Deseń:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Lista map:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr "Wybierz warstwy mapy i dodaj je do listy."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr "Usuń wybrane warstwy z listy warstw."
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr "Dodaj wybrane warstwy mapy do grupy"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr "Grupa <%s> została zmieniona, czy chcesz zatwierdzić zmiany?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr "Niezatwierdzone zmiany"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, fuzzy, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr "Grupa <%s> została zmieniona, czy chcesz zatwierdzić zmiany?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 msgid "No raster maps selected."
 msgstr "Nie wybrano mapy rastrowej."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr "Brak zmian w grupie <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr "Grupa <%s> została pomyślnie utworzona."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr "Grupa <%s> została pomyślnie zmieniona."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Tworzenie nowej grupy <%s> nie powiodło się."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr "Zmiana grypy <%s> nie powiodła się."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr "Nie wybrano grupy."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 msgid "No subgroup selected."
 msgstr "Nie wybrano podgrupy."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr "Użyj poprawnych nazw map"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "Raster 3D"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Typ mapy:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "Wybierz "
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Odwróć wybór"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Dynamiczne serie (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Import wielu warstw"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-msgid "List of raster layers"
-msgstr "Lista warstw rastrowych"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-msgid "List of vector layers"
-msgstr "Lista warstw wektorowych"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, python-format
-msgid "List of %s layers"
-msgstr "Lista  %s warstw"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr "kliknij prawym aby wybrać/odznaczyć wszystko"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Id warstwy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Nazwa warstwy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-msgid "Name for output GRASS map (editable)"
-msgstr "Nazwa wyjściowej mapy GRASS (edytowalnej)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-msgid "Projection match"
-msgstr "Zgodność odwzorowania"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Opcje"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importuj wybrane warstwy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Dodaj importowane warstwy do listy warstw"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Dodaj importowane warstwy do listy warstw"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Link"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Linkuj wybrane warstwy"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "Nie została wybrana żadna warstwa. Operacja przerwana."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Nie można utworzyć profilu dla mapy rastrowej."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-msgid "Define output format for vector data"
-msgstr "Zdefiniuj format wyjściowy dla danych wektorowych"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr "Zdefiniuj format wyjściowy dla danych rastrowych"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Ignoruj zmiany i zamknij dialog"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-msgid "No data source selected."
-msgstr "Nie wybrano źródła danych."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Import warstw DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Wybierz plik DXF do importu"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Nie wybrano mapy!"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Ustawienia przezroczystości warstwy"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "nieprzezroczysty"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Ustaw rozmiar obrazu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Rozmiar obrazu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Szablon:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Okno mapy"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 msgid " SQL statement "
 msgstr "Polecenie SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Symbole"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Ścieżka do symboli:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Nazwa symbolu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Informacje"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Prawa autorskie"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licencja"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 msgid "Citation"
 msgstr "Cytat"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autorzy"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Współpracownicy"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Współpracownicy"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Tłumacze"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 msgid "Translation status"
 msgstr "Stan tłumaczenia"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Oficjalna strona GRASS GIS:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr "Rewizja kodu"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr "Twórz datę"
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Język"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "Brak pliku %s"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid "Unable to provide citation suggestion, see GRASS GIS website instead. The error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Błąd odczytu pliku '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Linie:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Kraj"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 msgid "Nation"
 msgstr "Narodowość"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr "   %d przetłumaczone"
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr "   %d fuzzy"
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr "   %d nieprzetłumaczone"
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr "%d przetłumaczone"
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "Plik <%s> nie został odnaleziony"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Następny"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Poprzedni"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 msgid "Toolbar"
 msgstr "Pasek narzędzi"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 msgid "Remove selected map(s) from list"
 msgstr "Usuń wybrane mapy z listy "
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 msgid "Layer up"
 msgstr "Warstwa do góry"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 msgid "Move selected layer(s) up"
 msgstr "Przesuń wybrane warstwy do góry"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 msgid "Layer down"
 msgstr "Warstwa w dół"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 msgid "Move selected layer(s) down"
 msgstr "Przesuń wybrane warstwy w dół"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 msgid "Edit layer properties"
 msgstr "Edytuj właściwości warstwy"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 msgid "Change opacity"
 msgstr "Zmień poziom przezroczystości"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 msgid "Change layer opacity"
 msgstr "Zmień poziom przezroczystości warstwy"
 
@@ -14447,1001 +14818,1025 @@ msgstr "Wyświetl na mapie takie elementy jak skala i legenda"
 msgid "Create histogram with d.histogram"
 msgstr "Utwórz histogram (d.histogram)"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Wybierz mapy do wyświetlania"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Element nie jest wybieralny"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 msgid "Type: "
 msgstr "Typ:"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelect: niewłaściwy obiekt: %s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Ustawienia wyjścia"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Ustawienia źródła"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Punkt źródła"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr "Natywny"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Plik"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protokół"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Typ wyjściowy"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Rodzaj źródła"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Wszystkie pliki"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 msgid "ZIP files"
 msgstr "Pliki ZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 msgid "GZIP files"
 msgstr "Pliki GZIP"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 msgid "TAR files"
 msgstr "Pliki TAR"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 msgid "TARGZ files"
 msgstr "Pliki TARGZ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Plik:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Wybierz plik do importu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Wybierz katalog wejściowy"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Rozszerzenie:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Wybierz plik"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 msgid "Feature type:"
 msgstr "Typ obiektu:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Odpytaj obiekty"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr "topologiczny"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Opcje tworzenia:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Format:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protokół:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 msgid "No settings available"
 msgstr "Ustawienia niedostępne"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr "Nie zdefiniowano źródła danych, ustawienia nie zostały zapisane."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Podświetlenie"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr "Poligon"
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Nie została wybrana żadna warstwa. Operacja przerwana."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Katalog %s nie istnieje."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid "Input vector map <%s> and selected map <%s> in layer manager are different. Operation canceled."
+msgstr "Mapa wektorowa nie jest mapą 3D. Operacja przerwana."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Histogram GRASS GIS (d.histogram)"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Wybierz źródłowy mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 msgid "X"
 msgstr "X"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 msgid "Y"
 msgstr "Y"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "Mapset: %s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, python-format
 msgid "Map name: %s"
 msgstr "Nazwa mapy: %s"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Znacznik czasu"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Przebuduj topologię"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Ustawienia mapy rastrowej"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 msgid "Request"
 msgstr "Żądanie"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 msgid "List of layers "
 msgstr "Lista warstw "
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 msgid "Source projection:"
 msgstr "Źródłowa projekcja:"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 msgid "Advanced request settings"
 msgstr "Zaawansowane ustawienia żądania"
 
 # przykryj nie brzmi ...; może złącz, scal?
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr "Kolejność warstw w rastrze"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 msgid "Reprojection method:"
 msgstr "Metoda reprojekcji:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr "Próbkowanie z użyciem najbliższego sąsiedztwa"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 msgid "Linear interpolation"
 msgstr "Interpolacja liniowa"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Wybierz metodę interpolacji:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Wpisz parametry dla '"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Nie można przetworzyć ustawień '%s'"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Format współrzędnych"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 msgid "Select layer in layer list.\n"
 msgstr "Wybierz warstwę na liście warstw.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Wybierz źródłowy mapset:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 msgid "Select source projection.\n"
 msgstr "Wybierz źródłową projekcję.\n"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 msgid "layer"
 msgstr "warstwa"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 msgid "style"
 msgstr "styl"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
-#, fuzzy
-msgid "Add default servers"
-msgstr "Dodaj pętlę / serie"
+#: ../gui/wxpython/web_services/widgets.py:1154
+msgid "Add default"
+msgstr "Dodaj domyślne"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr " Ustawienia serwera "
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Serwer:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Połącz"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Połącz z serwerem"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Zaawansowane ustawienia legendy"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Zaawansowane ustawienia legendy"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 msgid " Layer Manager Settings "
 msgstr "Ustawienia menadżera warstw"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 msgid "Output layer name:"
 msgstr "Nazwa warstwy wyjściowej:"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "Użytkownik:"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "Hasło:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr "Dostępne usługi sieciowe"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr "Połączono z <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Nie można połączyć z <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Dodaj wybrane warstwy usług sieciowych do listy warstw"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr "Właściwości warstwy usługi sieciowej"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "&Zastosuj"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 msgid "Name for output raster map:"
 msgstr "Nazwa dla wynikowej mapy rastrowej:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 msgid "Export region"
 msgstr "Eksportuj region"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 msgid "Named region"
 msgstr "Nazwany region"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Ogranicz rozdzielczość wyświetlania do ustawień regionu obliczeniowego"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Ustaw zasięg wyświetlonej mapy jako region obliczeniowy"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 msgid "Overwrite existing raster map"
 msgstr "Nadpisz istniejącą mapę rastrową"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 msgid "Choose named region:"
 msgstr "Wybierz nazwany region:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 msgid "&Save layer"
 msgstr "&Zapisz warstwę"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Usuń zaznaczoną warstwę"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 msgid "Output map can be added only to current mapset."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Plik <%s> już istnieje."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Katalog %s nie istnieje."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 msgid "Downloading data..."
 msgstr "Wczytywanie danych..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Nie można ustawić"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "Sprawdź wszystko"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "Wyczyść wszystko"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr "Wprowadź wartości atrybutów"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr "Niewłaściwy format koloru. Użyj '0:0:0'"
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Wybierz mapę wektorową:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr "Importuj/eksportuj tabelę kolorów"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Wybierz plik GRC"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Wczytaj"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 #, fuzzy
 msgid "Type filename or click to choose file and load color table"
 msgstr "Wybierz plik GRC"
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Wybierz plik do zapisania tabeli kolorów"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 #, fuzzy
 msgid "Type filename or click to choose file and save color table"
 msgstr "Wybierz plik do zapisania"
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 msgid "&Set"
 msgstr "&Ustawienia"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 msgid "Load color table:"
 msgstr "Wczytaj tabelę kolorów:"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr "Wczytaj tabelę kolorów z pliku:"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr "Zapisz tabelę kolorów w pliku:"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr "Przeładuj domyślną tabelę"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Plik regionu <%s> już istnieje.Chcesz go nadpisać?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Domyślna tabela kolorów"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Utwórz nową tabelę kolorów dla mapy rastrowej"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Wprowadź wartości kategorii rastra"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "fp zakres"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr "Utwórz nowe reguły kolorów dla mapy wektorowej"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "Odpytaj tabelę mapy wektorowej"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr "Wprowadź wartości atrybutów warstwy wektorowej:"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr "Wybierz kolumny  warstwy wektorowej"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Warstwa:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Kolumna atrybutów:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr "Wczytaj kolor z kolumny:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr "Zapisz kolor w kolumnie:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr "Wczytaj rozmiar z kolumny:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr "Zapisz rozmiar w kolumnie:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr "Wczytaj szerokość z kolumny:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Dodaje kolumnę GRASSRGB do bieżącej tabeli atrybutów."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr "Eksportuj/eksportuj tabelę kolorów"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid "Database connection for vector map <%s> is not defined in DB file.  Do you want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr "Nie zdefiniowano połączenia z bazą danych"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute table cannot be edited."
 msgstr "Mapa wektorowa <%s> już istnieje w bieżącym mapsecie. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "%s kolumna już istnieje."
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Proszę czekać, trwa wczytywanie danych atrybutowych..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid "Number of loaded records reached %d, displaying all the records will be time-consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Odpytaj tabelę mapy wektorowej"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Wprowadź wartości atrybutów %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "Nie zdefiniowano kolumny koloru. Operacja przerwana."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "Kalkulator Map GRASS GIS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "Kalkulator map rastrowych 3D GRASS GIS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "polecenie mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operatory"
 
 # ?
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Wyrażenie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Zapisz rozszerzenie w pliku"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Wczytuje wyrażenie z pliku"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "wykładnik"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dzielenie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "dodawanie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "odejmowanie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "moduł"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "mnożenie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "przesunięcie w lewo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "przesunięcie w prawo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "przesunięcie w prawo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "większy niż"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "większy niż lub równy z"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "mniejszy niż"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "mniejszy niż lub równy"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "równy z"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "nie równy z"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "z dopełnieniem"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NOT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "bitowe AND"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "bitowe OR"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "logiczne AND"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "logiczne AND (ignoruje wartości NULL)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "logiczne OR"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "logiczne OR (ignoruje wartości NULL)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "warunkowe"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Nazwa nowej mapy rastrowej 3D"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Nazwa nowej mapy rastrowej"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Wprowadź istniejącą mapę rastrową 3D"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Wprowadź istniejącą mapę rastrową"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Wstaw funkcję mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "losowo rozmieszczone"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Dodaj utworzoną mapę rastrową do listy warstw"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Musisz wpisać nazwę nowej mapy"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Musisz wpisać polecenie mapcalc aby utworzyć nową mapę"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Wybierz nazwę pliku pod którą zapisać wyrażenie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "Plik wyrażenia (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Wybierz nazwę pliku aby wczytać wyrażenie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' skopiowano do schowka"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Pobierz i zainstaluj wtyczki z GRASS AddOns"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Repozytorium"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Lista obiektów - kliknij prawym by usunąć"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Opcje"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Pobierz"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Zainstaluj"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "Rozszerzenie jest niezdefiniowane"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Wtyczki"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr "Zainstaluj"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Pokaż podręcznik"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Nie można zapisać ustawień"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Odinstaluj wtyczki"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "Lista zainstalowanych wtyczek"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 msgid "Uninstall"
 msgstr "Odinstaluj"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Odinstaluj wybraną wtyczkę"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "&Zainstaluj"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Odinstaluj wybraną wtyczkę"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr "Nie zostało wybrane żadne rozszerzenie. Operacja przerwana."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -15450,247 +15845,384 @@ msgid ""
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr "Usuń wtyczkę"
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 msgid "Extension"
 msgstr "Rozszerzenie"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Import wielu warstw"
+
+#: ../gui/wxpython/modules/import_export.py:62
+msgid "List of raster layers"
+msgstr "Lista warstw rastrowych"
+
+#: ../gui/wxpython/modules/import_export.py:64
+msgid "List of vector layers"
+msgstr "Lista warstw wektorowych"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, python-format
+msgid "List of %s layers"
+msgstr "Lista  %s warstw"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr "kliknij prawym aby wybrać/odznaczyć wszystko"
+
+#: ../gui/wxpython/modules/import_export.py:73
+msgid "Name for output GRASS map (editable)"
+msgstr "Nazwa wyjściowej mapy GRASS (edytowalnej)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Import"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importuj wybrane warstwy"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Ustawienia źródła"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Ustawienia czcionki"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Dodaj importowane warstwy do listy warstw"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Dodaj importowane warstwy do listy warstw"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Link"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Linkuj wybrane warstwy"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "Nie została wybrana żadna warstwa. Operacja przerwana."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Nie można utworzyć profilu dla mapy rastrowej."
+
+#: ../gui/wxpython/modules/import_export.py:640
+msgid "Define output format for vector data"
+msgstr "Zdefiniuj format wyjściowy dla danych wektorowych"
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr "Zdefiniuj format wyjściowy dla danych rastrowych"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Ignoruj zmiany i zamknij dialog"
+
+#: ../gui/wxpython/modules/import_export.py:707
+msgid "No data source selected."
+msgstr "Nie wybrano źródła danych."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Import warstw DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Wybierz plik DXF do importu"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Nie wybrano mapy!"
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Odwzorowanie"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Nazwa wyjściowej mapy GRASS (edytowalnej)"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid "Projection of following layers do not match with projection of current location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Warstwa do usunięcia"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr "&Importuj && reprojektuj"
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Importuj wybrane warstwy"
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Nie znaleziono biblioteki GRASS-python."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Dane wejściowe"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Zestaw danych punktowych:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Kolumna numeryczna:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Nazwa wyjściowej mapy rastrowej:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Moduł krigingu"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Gotowe."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Dopasowanie histogramu"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Rysuj/odśwież wariogram"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Techniki krigingu"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Rozmiar bloku:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Model: "
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Histogram GRASS GIS (d.histogram)"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Wybierz czcionkę dla tekstu histogramu"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Wybierz narzędzia czyszczenia topologii"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "podziel linie/granice"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "usuń duplikaty"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "usuń węzły wiszące"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "zamień węzły wiszące granic na linie"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "usuń mosty"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "zamień mosty na linie"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "dociągnij linie/granice"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "usuń zduplikowane centroidy obiektów"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "poligony na linie"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "zmniejsz liczbę werteksów linii/granic"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "usuń małe obszary"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "usuń linie/granice o zerowej długości"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "usuń małe łuki na węzłach"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Wybierz narzędzia i ustaw progi"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Wybierz wejściową mapę wektorową:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Typ obiektu:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Wybierz docelową mapę wektorową:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Kopiuj bieżącą komendę do schowka (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "linia"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "granica"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "centroid"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "powierzchnia"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Narzędzia do usuwania topologii mapy wektorowej."
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Narzędzia do usuwania topologii mapy wektorowej."
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr "Nazwa wejściowej mapy wektorowej"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr "Nazwa wyjściowej mapy wektorowej"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Krok"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr "'%s' nie zdefiniowany"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -15698,21 +16230,21 @@ msgid ""
 "%s"
 msgstr "Nie znaleziono regionu <%s>. Operacja przerwana."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 #, fuzzy
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Kopiuj bieżącą komendę do schowka"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Nie można otworzyć piku<%s> do odczytu."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -15725,182 +16257,177 @@ msgstr ""
 "\n"
 "Liczba pominiętych linii: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " wiersz: %d"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, fuzzy, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: warstwa typu <%(type)s> nie jest jeszcze obsługiwany."
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr "Błąd polecenia '%s'\n"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Szczegóły: %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Nieobsługiwany typ warstwy '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "BŁĄD: Renderowanie nie powiodło się. Szczegóły: %s"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Renderowanie &"
+
+#: ../gui/wxpython/core/render.py:633
+msgid "Downloading data "
+msgstr "Wczytywanie danych"
+
+#: ../gui/wxpython/core/render.py:643
+msgid "Rendering & "
+msgstr "Renderowanie &"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr "Renderowanie..."
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Powiększ do domyślnego regionu"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr "Błąd: Nie można otworzyć '%(file)s'. Powód: %(ret)s. wxGUI zostało zamknięte.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Nie można przeczytać pliku %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Nieprawidłowa wartość: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Nie można powiększyć do mapy rastrowej <%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Szczegóły:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Nie można powiększyć do mapy wektorowej <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Nie można powiększyć do mapy rastrowej <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid "Unable to get current geographic extent. Force quiting wxGUI. Please manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "BŁĄD: Renderowanie nie powiodło się. Szczegóły: %s"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Nie można wyświetlić warstwy mapy <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Nie można wyświetlić nakładki <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-msgid "Downloading data "
-msgstr "Wczytywanie danych"
-
-#: ../gui/wxpython/core/render.py:1386
-msgid "Rendering & "
-msgstr "Renderowanie &"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr "Renderowanie..."
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Nieznany znacznik"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Nie można utworzyć ścieżki ustawień"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Narzędzia"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr "Błąd składni: %s"
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Nowa mapa wektorowa <%(map)s>: %(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "nie można otworzyć '%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "BŁĄD: Nie można ustalić wersji GRASS. Szczegóły: %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Nie można otworzyć pliku'%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Zduplikowany klucz: %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Nie można utworzyć pliku '%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -15909,175 +16436,180 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Nie znaleziono pliku <%s>"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d sec"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d min %(sec)d sec"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr "Zauważ, że dane są pozostawione w niespójnym stanie i mogą być uszkodzone"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Polecenie przerwane"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Polecenie zakończone"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Powód"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Wykonanie nie powiodło się:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Błąd:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Nie można wykonać polecenia: %s"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "punkt"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr "animacja"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Zwiń wszystkie za wyjątkiem PERMANENT i bieżącej"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Zwiń wszystkie za wyjątkiem PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Zwiń wszystkie za wyjątkiem bieżącej"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Zwiń wszystkie"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Rozwiń wszystkie"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Wyświetla wybrane"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "Klasyczny (tylko etykiety)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "Zaawansowany (etykiety i nazwy modułów)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 #, fuzzy
 msgid "Expert (module names only)"
 msgstr "Profesjonalny (tylko nazwy modułów)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr "Normalny górny"
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr "Normalny lewy"
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 #, fuzzy
 msgid "Fancy green"
 msgstr "Dawny zielony"
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Lista tabel"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Powiększ i wycentruj"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr "Powiększ do położenia kursora"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Nic"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "Przewijaj do przodu, by powiększyć"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "Przewijaj do tyłu, by pomniejszyć"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "box"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "sphere"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cube"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamond"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "aster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "histogram"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr "okrąg"
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Nie można przeczytać ustawień pliku <%s>\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -16088,11 +16620,11 @@ msgstr ""
 "\t\tSzcegóły: %(detail)s\n"
 "\t\tLinia: '%(line)s'\n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "Nie można utworzyć ścieżki ustawień"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -16103,248 +16635,279 @@ msgstr ""
 "\n"
 "Szczegóły: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Nie można ustawić"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Nie można przetworzyć ustawień '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Zdefiniuj bazę danych GRASS-a i nazwę lokacji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Katalog danych GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Lokacja projektu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Wybierz katalog danych GIS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Nazwa lokacji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "Opcjonalna nazwa lokacji, możesz zostawić to pole puste."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid "Name <%(name)s> is not a valid name for location. Please use only ASCII characters excluding %(chars)s and space."
 msgstr "Nazwa <%(name)s> nie jest poprawną nazwą dla lokacji. Użyj wyłącznie znaków ASCII łącznie z %(chars)s i spacją."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Niewłaściwa nazwa lokacji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Wybierz katalog danych GRASS-a:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Lokacja już istnieje w bazie danych GRASS-a."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Nie można utworzyć lokacji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid "Title of the location is limited only to one line and 256 characters. The rest of the text will be ignored."
 msgstr "Nazwa lokacji może składać się z jednej linii i 256 znaków. Reszta tekstu będzie zignorowana."
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Wybierz metodę utworzenia nowej lokacji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Wybierz kod EPSG układu współrzędnych"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr "Czytaj odwzorowanie i datum z pliku danych georeferencyjnych"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 #, fuzzy
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "Czytaj odwzorowanie i datum z pliku WKT lub PRJ"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Wybierz parametry układu współrzędnych z listy"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "Określ odwzorowanie i datum na podstawie parametrów w PROJ.4"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Utwórz kartezjański układ współrzędnych użytkownika (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Tryb zwykły"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Zaawansowane"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Wybierz odwzorowanie"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Kod"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Kod odwzorowania:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Szukaj w opisach:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Nie można przeczytać listy: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Podaj parametry odwzorowania"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Wybierz datum lub elipsoidę (następna strona)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datum z przypisaną elipsoidą"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Tylko elipsoida"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Musisz wprowadzić wartość dla %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Podaj parametry odwzorowania %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Określ datum"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsoida"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Kod datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Zdefiniuj elipsoidę"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 msgid "Earth based"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Kod elipsoidy:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Wskaż plik z georeferencjami"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Plik z georeferencjami:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "Wybierz plik Well Known Text (WKT) .prj"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 msgid "WKT .prj file:"
 msgstr "Plik WKT .prj:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Wybierz kod EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Ścieżka do pliku z kodami EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Wybierz plik z kodami EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Wybierz kod EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Ścieżka do pliku z kodami EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Kod EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Wybierz plik z kodami EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Nie można przeczytać kodów EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Wybierz metodę oznaczenia parametrów georeferencji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Wprowadź parametry PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Wymagana jest transformacja odwzorowania."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Baza danych GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Nazwa lokacji:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Tytuł lokacji:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Odwzorowanie:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
@@ -16352,20 +16915,20 @@ msgstr ""
 "Definicja PROJ.4:\n"
 " (nie ostateczna)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Czy chcesz utworzyć lokację GRASS-a <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Utworzyć nową lokację?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Zdefiniuj nową lokację GRASS-a"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -16376,246 +16939,251 @@ msgstr ""
 "\n"
 "Szczegóły: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Anulowano pracę kreatora lokacji. Lokacja nie została utworzona."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Nie udało się utworzyć nowej lokacji"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will need to change the default GIS data directory in the GRASS startup screen."
 msgstr "Lokacja <%(loc)s> zostanie utworzona w katalogu z danymi GIS <%(dir)s>. Zmień domyślny katalog do danych GIS w trakcie uruchamiania programu. "
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Nowy katalog danych GIS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Brak kodu EPSG."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Brak kodu EPSG."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Nie znaleziono pliku <%s>"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Ustaw zakres i rozdzielczość domyślnego regionu"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Ustaw region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Wybrano niewłaściwą lokację."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Niewłaściwy region"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Kliknij tu by wyświetlić ustawienia 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Kliknij tu by schować ustawienia 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Rzędy: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Kolumny: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Komórki: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Głębia: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Komórki 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Rozdzielczość G-D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Północ"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Zachód"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Wschód"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Południe"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Rozdzielczość N-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Rozdzielczość E-W"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Nieprawidłowa wartość: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Wybierz transformację odwzorowania"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Wybierz transformację odwzorowania z listy"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid "Opening 3D view was not successful. Please try to change the value of depth buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid "Image is too large, your OpenGL implementation supports maximum texture size %d px."
 msgstr "Obraz jest zbyt duży twoja implementacja OpenGL obsługuje maksymalny rozmiar %d pikseli."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Wschód"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Północ"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Wysokość"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Nazwa źródła"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "Oszacowanie powierzchni obszaru dla map rastrowych."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Zarządzanie kolorami obrazu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "Odległość XY od poprzedniego"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "Odległość XYZ od poprzedniego"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Długość linii profilu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Długość linii profilu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "Brak punktu na powierzchni"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Ładuje mapę rastrową"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Ładuje mapę rastrową 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "nie powiodło się"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Nieobsługiwany typ warstwy '%s'"
 
 # to wyładowanie brzmi fatalnie; wczytaj/usuń?
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Nie można wyładować mapy rastrowej"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Nie można wyładować mapy rastrowej 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "Mapa rastrowa 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "wyładowano pomyślnie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Wczytanie mapy wektorowej '%(name)s' %(type)s nie powiodło się"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Nie można wyładować mapy wektorowej <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Mapa wektorowa <%(name)s> (%(type)s) wyładowana pomyślnie"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Nie znaleziono wektorowej warstwy punktowej (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Nie można ustawić parametrów warstwy (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -16626,741 +17194,741 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "stałe#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Widok"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analiza"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animacja"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Kontrola widoku"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 #, fuzzy
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr "Dostosowuje odległość i perspektywę z punktu widoczności"
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspektywa:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Nachylenie:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid "Adjusts the viewing height above the surface (angle of view automatically adjusts to maintain the same center of view)"
 msgstr "Dostosowuje wysokość punktu obserwacji nad powierzchnią (kąt widoku dopasowuje się automatycznie utrzymując ten sam środek  widoku)"
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Przewyższenie:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Wygląd:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "tutaj"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid "Allows you to select a point on the surface that becomes the new center of view. Click on the button and then on the surface."
 msgstr "Pozwala na wskazanie nowego środka widoku na powierzchni. Kliknij przycisk, a następnie wskaż punkt na powierzchni."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "środek"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Przywraca widok do orginalnego środka widoku"
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "górę"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid "Sets the viewer directly over the scene's center position. This top view orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "reset"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Reset do widoku domyślnego"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid "Press 'Record' button and start changing the view. It is recommended to use fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Nagraj"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Odtwórz"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Ogólna liczba klatek :"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Zapisz sekwencję obrazów"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Wybierz katalog dla obrazów"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Powierzchnia"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Stała powierzchnia"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Wektor"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Podświetlenie"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "Obramowanie"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Tryb:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "niskiej jakości"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "wysokiej jakości"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "oba"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Cieniowanie:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "płaski"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "Gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Ustaw dla wszystkich"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Zastosuj dla wszystkich powierzchni"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Niskiej jakości:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "rozdzielczość:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "styl:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "sieć"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "powierzchnia"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 msgid "Change wire color"
 msgstr "Zmień kolor sieci"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Wysokiej jakości:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Własności powierzchni"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Przezroczystość"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Jasność"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "mapa"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "Brak wartości"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "stała"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Reset"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Reset do widoku domyślnego"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "wyczyść"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr "górny kolor"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr "dolny kolor"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "zmieszaj"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "cieniowany"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "Poziomy X:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Poziomy Y:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid "Sets the Z coordinate of the current cutting plane (only meaningful when tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr "Wysoka rozdzielczość:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Wartość:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Przezroczystość:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Pokaż linie wektorowe"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Linie wektorowe"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Linia:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "szerokość:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "kolor:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 msgid "Set options..."
 msgstr "Ustaw opcje..."
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "na powierzchni(ach):"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Wysokość nad powierzchnią:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Pokaż punkty wektorowe"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Punkty wektorowe"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Ikona:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "izopowierzchnie"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr "plastry"
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Rozdzielczość:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Lista izopowierzchni"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Pokaż model oświetlenia"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Pozycja źródła światła"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Ustawia wysokość źródła światła"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Kolor i intensywność oświetlenia"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Jasność:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Ustawia jasność światła"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Otaczające:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Ustawia oświetlenie otoczenia"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr "Granice obramowania"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "N && W"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "N && E"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "S && W"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "S && E"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "Długość strzałki (w jednostkach mapy):"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Kolor strzałki:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Umieść strzałkę"
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Długość podziałki (w jednostkach mapy):"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Kolor podziałki:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 msgid "Place new scale bar"
 msgstr "Dodaj pasek skali"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr "Czy chcesz nagrać nową animację, nie zapisując poprzedniej?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "Animacja już istnieje"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "Katalog %s nie istnieje."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Atrybuty izopowierzchni"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Wartość izopowierzchni"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr "Atrybuty plastrów"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "W"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "NW"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "NE"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "SE"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "SW"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Poziom"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 msgid "List of slices"
 msgstr "Lista plastrów"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, fuzzy, python-brace-format
 msgid "Level {level}"
 msgstr "Poziom"
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Pasek skali %d"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Żaden"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Mapa wektorowa jest 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Mapa wektorowa jest 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "na powierzchni(ach):"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "zakres:"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Północna granica:"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Południowa granica:"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Zachodnia granica:"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Wschodnia granica:"
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr "Północ (Y):"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Wysokość (Z):"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr "Wschód (X):"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr "Dolna krawędź:"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr "Górna krawędź:"
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid "Adjusts the light direction. Click and drag the puck to change the light direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Mapa rastrowa 3D <%s> nie odnaleziona"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Ustawienia widoku 3D"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "Przywróć domyślne ustawienia i zatwierdź zmianę"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "wartość:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "krok:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Położenie:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Skręcenie:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr "Nalot"
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr "Przesuń wierzchołek:"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 #, fuzzy
 msgid "Turn exag:"
 msgstr "Przesuń wierzchołek:"
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Światło"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr "kolor sieci:"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marker:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Ustawienia widoku 3D zapisano w pliku <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Nie wybrano mapy!"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -17369,7 +17937,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than recommended threshold <%d>.\n"
@@ -17379,28 +17947,28 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid "Scatter plot with same band combination (regardless x y order) is already displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Nie wybrano mapy rastrowej."
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than maximum limit <%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended limit <%d>.\n"
@@ -17409,31 +17977,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -17448,65 +18016,65 @@ msgstr ""
 "\n"
 "'%s'"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Wystąpił problem z wczytaniem motywu ikon. Powód: %s"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Punkty wektorowe"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 msgid "Rename class"
 msgstr "Zmień nazwę klasy"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 msgid "Set color"
 msgstr "Ustaw kolor"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "Wyświetl"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Żadna kategoria"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Żadna kategoria"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Eksport mapy rastrowej"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Ustaw przezroczystość<%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -17514,218 +18082,201 @@ msgstr ""
 msgid "The Scatterplot Tool needs the \"matplotlib\" (python-matplotlib) package to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Przybliż do zapisanego regionu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Dodaj mapę rastrową"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr "oś X:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr "oś X:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Nie wybrano mapy rastrowej."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 msgid "Selected bands must be different."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid "Scatter plot with same bands combination (regardless x y order) has been already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Mapa wektorowa <%s> już istnieje. Chcesz ją nadpisać?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, python-format
 msgid "Raster <%s> exists"
 msgstr "Raster <%s> istnieje"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Wybierz metodę interpolacji:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Kolor wybranego GCP:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Kolor podziałki:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Wybierz grupę:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Wybierz symbol:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Ustawienia osi"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Wybierz 3. mapę rastrową (opcjonalnie):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Tworzenie nowej grupy <%s> nie powiodło się."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Dodaj mapę rastrową"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Wybierz domyślną czcionkę wyświetlania"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Wybierz mapę rastrową do wykonania profilu"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid "Zoom to scatter plot data extend mode (click on scatter plot for zooming to extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Klasyfikacja obrazu"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Odpytaj wybrane mapy rastrowe/wektorowe"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Usuń wybrane warstwy z listy warstw."
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Dodaj nowy wierzchołek"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Wybór obiektów"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Przesuń wierzchołek"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Przesuń wierzchołek"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Usuń wierzchołek"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Usuń wierzchołek"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 msgid "Add class"
 msgstr "Dodaj klasę"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 msgid "Remove selected class"
 msgstr "Usuń wybraną klasę"
-
-msgid "&Create mapset"
-msgstr "&Utwórz mapset"
-
-#, fuzzy
-msgid "No GRASS location found in '%s'."
-msgstr "Wybierz lokację i mapset GRASS"
-
-#, fuzzy
-msgid "Failed to copy layer: invalid type."
-msgstr "Nie można przeczytać pliku %s."
-
-msgid "Deleting"
-msgstr "Usuwanie"
-
-msgid "Displaying"
-msgstr "Wyświetlanie"
diff --git a/locale/po/grasswxpy_pt.po b/locale/po/grasswxpy_pt.po
index 6433775..2b8b651 100644
--- a/locale/po/grasswxpy_pt.po
+++ b/locale/po/grasswxpy_pt.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_pt\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2009-11-23 14:10-0000\n"
 "Last-Translator: \n"
 "Language-Team: Português <grass-translations at lists.osgeo.org>\n"
@@ -21,213 +21,213 @@ msgstr ""
 "X-Poedit-Language: Portuguese\n"
 "X-Poedit-Country: PORTUGAL\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "Seleccione a directoria de dados GRASS:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "uso: %s arquivo de elementos locação mapset."
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "Explorar"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr "Nome da nova locação a criar"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Renomear location seleccionada"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Apagar"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Apagar location seleccionada"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Renomear"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Apagar"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Apagar mapset seleccionado"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Tabla"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Erro"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "Vetor de entrada '%s' não encontrado"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "Vetor de entrada '%s' não encontrado"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Erro:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Criar novo mapset:"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Location <%s> criada"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 #, fuzzy
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "¿Quiere establecer la extensión y resolución de la región predeterminada "
 "ahora?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "vectorial."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, fuzzy, python-format
 msgid ""
 "Current name: %s\n"
@@ -237,12 +237,12 @@ msgstr ""
 "Nome actual: %s\n"
 "Insira novo nome:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Mensagem"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -250,7 +250,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -258,7 +258,7 @@ msgid ""
 "%s"
 msgstr "Não é possível renomear mapset"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -266,7 +266,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -274,14 +274,14 @@ msgid ""
 "%s"
 msgstr "Não é possível renomear location"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -294,11 +294,11 @@ msgstr ""
 "\n"
 "TODOS os MAPAS incluidos neste MAPSET serão APAGADOS DEFINITIVAMENTE!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Não é possível apagar mapset"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -309,41 +309,41 @@ msgstr ""
 "\n"
 "TODOS os MAPAS incluidos neste lcoation serão APAGADOS!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Não é possível apagar location"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "Escolher directoria para dados GIS:"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -352,17 +352,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Não é possível criar novo mapset: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -374,11 +374,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -386,7 +386,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -394,19 +394,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -425,189 +425,189 @@ msgid ""
 "%s"
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Barra de ferramentas de georrectificação"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Imprimir visualização"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Mostrar região"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Mostrar região"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Importar mapa vectorial"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Nada para extrair."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Analisar"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histograma"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -616,679 +616,680 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Carregando mapas raster"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Carregando mapas raster"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 #, fuzzy
 msgid "Create/edit group..."
 msgstr "Crear/editar grupo..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Classificar imagem"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Classificar imagem"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Cor"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Zum al mapa seleccionado"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Guardar ficheiro como..."
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Não consegui criar a tabela %s"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Importa tablas de atributos en varios formatos."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Alterar nível de opacidade"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Apagar camada seleccionada"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "Adicionar camada RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Aviso"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Vista prévia"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Zoom no mapa"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "Adicionar mapa raster 3D"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS Visualização de mapas:"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 #, fuzzy
 msgid "No raster or vector map layer selected for querying."
 msgstr "Não foi seleccionado nenhum mapa vectorial para consulta."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Simples"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Fechar"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Número de categoria (column %s) não foi encontrado."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Cor:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Índice de formas"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Dimensão:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 #, fuzzy
 msgid "Query raster/vector map(s)"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 #, fuzzy
 msgid "Query selected raster/vector map(s)"
 msgstr "Consultar mapa(s) ráster/vectorial seleccionado"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Fino:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Seleccionar código EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "Listar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 #, fuzzy
 msgid "GCP Manager toolbar"
 msgstr "Gestão de cores"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Configuração de página"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Vista previa de impressão"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Imprimir visualização"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Zoom para a região computacional (definido com g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Zoom à região pré-definida"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Zoom à região guardada"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Guardar a geometria de visualização para a região designada"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "Erro RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 #, fuzzy
 msgid "Setup for georectification"
 msgstr "Configuración para georrectificación"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 #, fuzzy
 msgid "Georectifying setup canceled."
 msgstr "Cancelada la configuración de la georrectificación."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 #, fuzzy
 msgid "Select map type and location/mapset"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 #, fuzzy
 msgid "Map type to georectify"
 msgstr "Tipo de mapa a georrectificar"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 #, fuzzy
 msgid "Select source location:"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 #, fuzzy
 msgid "Select source mapset:"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 #, fuzzy
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 "Debe seleccionar una localización válida antes de seleccionar un directorio "
 "de mapas"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 #, fuzzy
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 "Debe seleccionar una localización y directorio de mapas válidos para "
 "continuar"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 #, fuzzy
 msgid "Select image/map group to georectify"
 msgstr "Seleccionar grupo de imágenes/mapas a georrectificar"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 #, fuzzy
 msgid "Create group if none exists"
 msgstr "Crear grupo si no existe ninguno"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 #, fuzzy
 msgid "Add vector map to group..."
 msgstr "Añadir capa de mapa vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 #, fuzzy
 msgid "Extension for output maps:"
 msgstr "Extensión para los mapas de salida:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 #, fuzzy
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Debe seleccionar un grupo de imágenes/mapas válido para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 #, fuzzy
 msgid "You must enter an map name extension in order to continue"
 msgstr "Debe introducir una extensión del nombre del mapa para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 #, fuzzy
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 "Seleccionar imagen/mapa a visualizar para la creación de puntos de control "
 "sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 #, fuzzy
 msgid "You must select a source map in order to continue"
 msgstr "Debe seleccionar una imagen/mapa válido para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 #, fuzzy
 msgid "Manage Ground Control Points"
 msgstr "Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "Converter coordenadas"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1297,30 +1298,30 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 #, fuzzy
 msgid "Writing POINTS file failed"
 msgstr "Falló la escritura del archivo de PUNTOS"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, fuzzy, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Ficheiro de PONTOS gravado"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 #, fuzzy
 msgid "Reading POINTS file failed"
 msgstr "Falló la lectura del archivo de PUNTOS"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1335,289 +1336,289 @@ msgstr ""
 "6+ puntos para segundo orden y\n"
 "10+ puntos para tercer orden."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 #, fuzzy
 msgid "Rectifying images, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformar imagen"
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, fuzzy, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "vectorial."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "Definições do gestor de camadas"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "Establecer puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "use"
 msgstr "Não-definido"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "Grupo objectivo/alvo"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "Grupo objectivo/alvo"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 #, fuzzy
 msgid "Forward error"
 msgstr "Erro 'GngFlatten'"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 #, fuzzy
 msgid "Backward error"
 msgstr "Erro 'GngFlatten'"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 #, fuzzy
 msgid "Create vector map group"
 msgstr "Crear nuevo mapa vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 #, fuzzy
 msgid "Select vector map(s) to add to group:"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Editar GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 #, fuzzy
 msgid "Ground Control Point No."
 msgstr "Pontos de controlo sobre o terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Aplicar alterações para a sessão actual"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Aplicar e guardar as alterações no arquivo de configuração do utilizador "
 "(pré-definido para as próximas sessões)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 #, fuzzy
 msgid "Close dialog"
 msgstr "Cerrar diálogo"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 #, fuzzy
 msgid "Symbology"
 msgstr "Simbología"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "Limpar o GCP seleccionado"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "Regras de cor"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "Mostrar linhas"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "Barra de ferramentas de georrectificação"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Seleccionar método de rectificación para rásters"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "Primeira ordem"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "Segunda ordem"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "Terceira ordem"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 #, fuzzy
 msgid "clip to computational region in target location"
 msgstr "não consegui criar o arquivo de cabeçalho para [%s em %s]"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Definições do perfil gravadas no ficheiro  '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Erro na digitalização de vector"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, fuzzy, python-format
 msgid "New vector map <%s> created"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1625,404 +1626,404 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Actualizar categorias"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 #, fuzzy
 msgid "Apply changes for this session"
 msgstr "ask_transform_coord():  Encerrando sessão.. \n"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 #, fuzzy
 msgid "Close dialog and save changes to user settings file"
 msgstr "Cerrar guardar"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Encerrar janelas e ignorar as alterações"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Geral"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 #, fuzzy
 msgid "Snap also to vertex"
 msgstr ""
 "\n"
 "** %s existe. deseja sobrescrever? "
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, fuzzy, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Distância da câmera (em unidades do mapa)"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 #, fuzzy
 msgid "Select vector features"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 #, fuzzy
 msgid "Select threshold"
 msgstr "Seleccionar limiar"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 #, fuzzy
 msgid "Select only features inside of selection bounding box"
 msgstr "Permitir apenas fluxo horizontal e vertical de água"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 #, fuzzy
 msgid "Check for duplicates"
 msgstr "Digite 'list -f' para"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Digitalizar novo fronteira/contorno"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 #, fuzzy
 msgid "Break lines at intersection"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Digitalizar"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 #, fuzzy
 msgid "Save changes"
 msgstr "Guardar cambios"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 #, fuzzy
 msgid "Save changes on exit"
 msgstr "mostra os drivers e finaliza"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 #, fuzzy
 msgid "Query tool"
 msgstr "Herramienta de consultas"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 #, fuzzy
 msgid "Choose query tool"
 msgstr "Ferramenta não existe"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 #, fuzzy
 msgid "Select by box"
 msgstr "Selecionar trajeto interativamente"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 #, fuzzy
 msgid "length"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 #, fuzzy
 msgid "Select lines"
 msgstr "Seleccionar líneas"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "mais curto que"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "mais longo que"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "dangle"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atributos"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 #, fuzzy
 msgid "Digitize new feature"
 msgstr "Digitalizar"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 #, fuzzy
 msgid "Add new record into table"
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Camada"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Modo"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 #, fuzzy
 msgid "Next to use"
 msgstr "Tipo desconhecido: %d"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 #, fuzzy
 msgid "Category number"
 msgstr "Número da camada"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 #, fuzzy
 msgid "Category mode"
 msgstr "Modo portátil"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Entrada manual"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 #, fuzzy
 msgid "No category"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 #, fuzzy
 msgid "Delete existing feature(s)"
 msgstr "Borrar"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 #, fuzzy
 msgid "Delete record from table"
 msgstr "%d categorias carregadas da tabela"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "Consultar com atributos"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "Digitalizar nova linha"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "Digitalizar novo fronteira/contorno"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Destacar"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Destacar (duplicados)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 #, fuzzy
 msgid "Line"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 #, fuzzy
 msgid "Boundary (no area)"
 msgstr "Tamanho de área = 0.0 ignorado"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 #, fuzzy
 msgid "Boundary (one area)"
 msgstr "Tamanho de área = 0.0 ignorado"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Limite/fronteira (duas áreas)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 #, fuzzy
 msgid "Centroid (in area)"
 msgstr "Ilha: %d  na área: %d\n"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 #, fuzzy
 msgid "Centroid (outside area)"
 msgstr "Tamanho de área = 0.0 ignorado"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 #, fuzzy
 msgid "Centroid (duplicate in area)"
 msgstr "%d categorias duplicadas no vetor"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 #, fuzzy
 msgid "Node (one line)"
 msgstr "Escrever nós da linha"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 #, fuzzy
 msgid "Node (two lines)"
 msgstr "Líneas de flujo"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 #, fuzzy
 msgid "Area (closed boundary + centroid)"
 msgstr "Centróide da área sem categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 #, fuzzy
 msgid "Direction"
 msgstr "Descripción"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, fuzzy, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "não é possível criar arquivo de dependência [%s em %s]"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -2030,84 +2031,84 @@ msgid ""
 "Reason: %s"
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Gerar pontos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 #, fuzzy
 msgid "List of categories - right-click to delete"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 #, fuzzy
 msgid "Add new category"
 msgstr "Añadir categoría nueva"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 #, fuzzy
 msgid "Apply changes"
 msgstr "Guardar cambios"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 #, fuzzy
 msgid "Ignore changes and close dialog"
 msgstr "Ignorar erros SQL e continuar"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 #, fuzzy
 msgid "Apply changes and close dialog"
 msgstr "Impossível fechar mapa de entrada"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2118,280 +2119,280 @@ msgstr ""
 "Número de camada e categoria deve ser um inteiro.\n"
 "Número da camada deve ser superior a zero."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 #, fuzzy
 msgid "Delete selected"
 msgstr "Borrar lo seleccionado"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 #, fuzzy
 msgid "Delete all"
 msgstr "Borrar todo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Recarregar"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 #, fuzzy
 msgid "Unable to update vector map."
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, fuzzy, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 "\n"
 "ERRO: Falta valor para o parâmetro <%s>\n"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 #, fuzzy
 msgid "Set value"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 #, fuzzy
 msgid "Starting value"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Passo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 #, fuzzy
 msgid "List of duplicates"
 msgstr "uma lista longa"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 #, fuzzy
 msgid "Feature id"
 msgstr "Tipo de feição"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 #, fuzzy
 msgid "Layer (Categories)"
 msgstr "Número da camada"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Digitalizar novo ponto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Digitalizar nova linha"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Esquerda: novo ponto; Centro: retroceder último ponto; Direita: fechar linha"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Digitalizar novo fronteira/contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Digitalizar novo centroide"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Digitalizar novo fronteira/contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Construir polilinhas a partir de linhas de contorno/fronteira."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Esquerda: seleccionar; Centro: desseleccionar; Direita: confirmar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Apagar registro(s) seleccionado(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Visualizar/actualizar atributos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Esquerda: seleccionar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Visualizar/actualizar categorias"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "Erro na digitalização de vector"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "Barra de herramientas del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "Barra de herramientas del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 #, fuzzy
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Não há um soquete para conectar ao monitor <%s>."
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Desfazer"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Desfazer alterações anteriores"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Desfazer alterações anteriores"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 #, fuzzy
 msgid "Break selected lines/boundaries at intersection"
 msgstr "As linhas %s do arquivo <%s> da tabela de elipsóide estú inválidas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 #, fuzzy
 msgid "Connect selected lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Copiar categorías"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 #, fuzzy
 msgid "Copy features from (background) vector map"
 msgstr "Converte um mapa raster em uma camada de mapa vetorial."
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Conversão do tipo de característica"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 #, fuzzy
 msgid "Flip selected lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 #, fuzzy
 msgid "Merge selected lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 #, fuzzy
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Dividir linha/contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Consulta às características"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 #, fuzzy
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 #, fuzzy
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2400,65 +2401,66 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Erro na digitalização de vector"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, fuzzy, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "suporte da categoria para arquivo de vetores [%s] no mapset [%s] %s"
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Barra de herramientas del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Guardar alterações?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, fuzzy, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "Não consegui obter informações de camada para o mapa vetorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Encerrar o diálogo/janela quando finalizar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Novo mapa vectorial"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Medindo distância"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2467,195 +2469,214 @@ msgstr ""
 "Clique e arraste com o botão esquerdo do rato para medir. %sDuplo-clique do "
 "botão esquerdo para limpar."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Medindo distância"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Medindo distância:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "Legenda"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "Medir distância"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Aviso"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Medindo distância:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Añadir barra de escala y flecha de Norte"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Mostrar mapa"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' copiado para a área de trabalho (clipboard)"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Mostrar configuração"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Añadir sobreposições"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Séries de raster"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "Por favor aguarde, a actualizar dados..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Zoom para a extensão da região guardada"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 #, fuzzy
 msgid "Save display extents to region file"
 msgstr "Guardar a geometria de visualização para a região designada"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, fuzzy, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Aviso"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Teste"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 #, fuzzy
 msgid "Rotation:"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Establecer tipo de letra"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 #, fuzzy
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
@@ -2664,178 +2685,542 @@ msgstr ""
 "Arrastrar texto con el ratón en modo puntero a la posición.\n"
 "Doble pulsación para cambiar las opciones."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "Ajuda GRASS GIS"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-#, fuzzy
-msgid "Model"
-msgstr "Modo"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Sobrepor ficheiro?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Variables"
-msgstr "Listar tabelas"
+msgid "GRASS locations in {}"
+msgstr "uso: %s arquivo de elementos locação mapset."
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Saída de comando"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Alterar nome"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Renomear mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Alterar nome"
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/datacatalog/tree.py:652
 #, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "vectorial?"
+msgid "No map selected for copying."
+msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:659
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr "Entorno de trabajo?"
-
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr ""
+msgid "Copy map"
+msgstr "Copiar tabla"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Apagar filtrado"
+msgid "Failed to copy map: new map has the same name"
+msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-#, fuzzy
-msgid "Delete intermediate data?"
-msgstr "Apagar filtrado"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Mostrar"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
-"Elimina archivos de elementos de bases de datos del directorio de mapas "
-"actual del usuario."
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
 #, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "não consegui criar o arquivo de cabeçalho para [%s em %s]"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
-msgstr "Entorno de trabajo?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "Criar novo mapset:"
+msgid "Delete map"
+msgstr "Apagar mapset"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Apagar"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "Seleccionar archivo DXF:"
+msgid "g.remove completed"
+msgstr "Digite 'list -f' para"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Mostrar"
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "Mostrar comp. extent"
+
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
 msgstr ""
-"El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
+"Elimina archivos de elementos de bases de datos del directorio de mapas "
+"actual del usuario."
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/tree.py:910
 #, fuzzy
-msgid "Save model"
-msgstr "Modo portátil"
+msgid "&Copy"
+msgstr "Copiar"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, fuzzy, python-format
-msgid "File <%s> saved"
-msgstr "Ficheiro de PONTOS <%s> guardado"
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:936
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "Escolher ficheiro para gravar workspace actual"
+msgid "&Display layer"
+msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Criar mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/datacatalog/frame.py:36
 #, fuzzy
-msgid "Validating model..."
-msgstr "Intervalo válido"
+msgid "GRASS GIS Data Catalog"
+msgstr "CAlculador de mapas GRASS %s "
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "CAlculador de mapas GRASS %s "
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, fuzzy, python-format
+msgid "Current mapset is <%s>."
+msgstr "Mudar mapset actual."
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
+#, fuzzy
+msgid "Data catalog"
+msgstr "Cambiar nombre de la localización seleccionada"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Nombre para el nuevo mapa vectorial:"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
-#, python-format
-msgid "Model exported to <%s>"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/toolbars.py:34
 #, fuzzy
-msgid "Comment:"
-msgstr "Comando"
+msgid "Click to allow editing other mapsets"
+msgstr "Clicar para editar as definições da camada"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/rdigit/controller.py:123
 #, fuzzy
-msgid "Add comment"
-msgstr "Adicionar camada de comandos"
+msgid "Please select first the raster map"
+msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, fuzzy, python-format
-msgid ""
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "vectorial?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Guardar cambios"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Não é possivel criar um perfil dos mapas raster"
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Render"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Utilitário de interpolação bilinear para camadas de mapas raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Crear nuevo mapa vectorial"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Mapa raster recodificado:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Seleccionar mapa vectorial"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Mapa raster recodificado:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Calcula el índice de forma en un mapa ráster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitalizar"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Digitalizar nova linha"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Digitalizar novo ponto"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Nome do mapa raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Erro na digitalização de vector"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Seleccionar mapa raster:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Valores de célula"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Largura:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "Mapa raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "Ajuda GRASS GIS"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "Modo"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "Listar tabelas"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Saída de comando"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "vectorial?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr "Entorno de trabajo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Apagar filtrado"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "Apagar filtrado"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+"Elimina archivos de elementos de bases de datos del directorio de mapas "
+"actual del usuario."
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr "Entorno de trabajo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "Criar novo mapset:"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "Seleccionar archivo DXF:"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+"El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "Modo portátil"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, fuzzy, python-format
+msgid "File <%s> saved"
+msgstr "Ficheiro de PONTOS <%s> guardado"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "Escolher ficheiro para gravar workspace actual"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+#, fuzzy
+msgid "Validating model..."
+msgstr "Intervalo válido"
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Comando"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Adicionar camada de comandos"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, fuzzy, python-format
+msgid ""
 "Reading model file <%s> failed.\n"
 "Invalid file, unable to parse XML document.\n"
 "\n"
@@ -2844,422 +3229,420 @@ msgstr ""
 "Falha na leitura do ficheiro de workspace <%s>. Ficheiro inválido Invalid "
 "file, unable to parse XML document."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 #, fuzzy
 msgid "Please wait, loading model..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 #, fuzzy
 msgid "Writing current settings to model file failed."
 msgstr "Falha ao obter nome do soquete para o monitor <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Não foi possível abrir o ficheiro <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Remover"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "Tabela"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Establecer tipo de letra"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "Pontos de controlo sobre o terreno (GCP)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "Establecer puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Propriedades"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 #, fuzzy
 msgid "List of variables - right-click to delete"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Descrição"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "Adicionar novo vértice"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Ponteiro"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Região"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "Perfil"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 #, fuzzy
 msgid "List of items - right-click to delete"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "Camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Executar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "Guardar ficheiro como..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "Configurações gerais"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 #, fuzzy
 msgid "Valid:"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "Índice de formas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Largura:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Altura:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tipo"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "3d raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "Vector"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabela"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadados"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Permitir que os arquivos de saída sobescrevam os arquivos existentes"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "Descrição"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Adicionar novo vértice"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3267,101 +3650,101 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "3º mapa raster"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "desconhecido"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "Opcional"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "Parámetros del terreno"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Apagar filtrado"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3369,261 +3752,261 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Para"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "uma lista longa"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, fuzzy, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "Borrar todo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 #, fuzzy
 msgid "No"
 msgstr "N"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "Não foi possível abrir o ficheiro <%s>."
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Ajuda GRASS GIS"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "Configurações gerais"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "Vista previa de impressão"
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3631,1473 +4014,1457 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Vista previa de impressão"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "Guardar ficheiro como..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "Restabelecer"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 #, fuzzy
 msgid "degree"
 msgstr "dtree"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Não é possível carregar mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Posição:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Converter coordenadas"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "Seleccionar directorio de datos de GRASS:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 #, fuzzy
 msgid "Close dialog and apply changes"
 msgstr "Encerrar janelas e ignorar as alterações"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Largura:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Altura"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Altura"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Superior"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Inferior"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Ponto"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Analisar paisagem"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 #, fuzzy
 msgid "custom"
 msgstr "Mínimo Personalizado"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "Definições raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "Zoom ao mapa seleccionado"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "Zoom à região guardada"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Região"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 #, fuzzy
 msgid "Center:"
 msgstr "Render"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "Primeira ordem"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 #, fuzzy
 msgid "border width (pts):"
 msgstr "Línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "Ponto"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "rhumbline"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "Gravar como"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Adicionar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Limpar mapa vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Apagar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Propriedades"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Definições raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Definições de vectores"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Propriedades"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "Adicionar centroides"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "Editar linha/ contorno/fronteira"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 #, fuzzy
 msgid "Database connection is not defined in DB file."
 msgstr "O formato requisitado não foi compilado nesta versão"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "Apagar camada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Máscara"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Fechar área de trabalho actual"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Cor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "rhumbline"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Largura:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "Seleccionar directorio de datos de GRASS:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Regras de cor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "Ficheiro WKT:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Explorar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Dimensão"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "Dimensão:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Rescalar"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Editar valores de categoría de forma interactiva"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "ASTER"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "Séries de raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "Vectorial para raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "Gerir"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "Linhas vectoriais"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "Sobrepor mapas vectoriais"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 #, fuzzy
 msgid "Vector map"
 msgstr "Novo mapa vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Posição"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "Volumes"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "Adicionar colunas"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "Configurações gerais"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 #, fuzzy
 msgid "use border color:"
 msgstr "usar| coordenada X"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-#, fuzzy
-msgid "Unsupported units"
-msgstr "Tipod e camada '%s' não suportado"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr "Padrão"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Estilo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "Tipo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "Teste"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 #, fuzzy
 msgid "Enter text:"
 msgstr "Introducir texto:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "Destacar"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "Primeira ordem"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "Imagens"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "Escala e Direcção Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "Emissão"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "Escala e Direcção Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "Mostrar configuração"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Selecionar trajeto interativamente"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "Cor da linha"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "transparente"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "Escala e Direcção Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "Dimensão:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "Alterar configurações"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "Alterar configurações"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "Largura de linha (em pixels)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "etiquetas vectoriais"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 #, fuzzy
 msgid "Generate PostScript output"
 msgstr "Utilidad de salida de mapas PostScript Hardcopy."
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 #, fuzzy
 msgid "Generate PDF output"
 msgstr "Gerar pontos"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "Zoom à região pré-definida"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "Apagar location seleccionada"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "Mostrar grelha"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Adicionar legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Añadir sobreposições"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Gestor das tabelas de atributos do GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr "vectorial."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Por favor aguarde, carregando dados de atributo..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Explorar dados"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Gerir tabelas"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Gerir camadas"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 #, fuzzy
 msgid "Close Attribute Table Manager"
 msgstr "Gestor de tabela de atributos"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Apagar mapset seleccionado"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Número de registos carregados: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Ligação à base de dados"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Consultas"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 #, fuzzy
 msgid "Set SQL statement to default"
 msgstr "Aceitar valores padrão"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Gestor de tabela de atributos"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 #, fuzzy
 msgid "Close the dialog"
 msgstr "Cerrar diálogo"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 #, fuzzy
 msgid "Columns"
 msgstr "Volumes"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 #, fuzzy
 msgid "Values"
 msgstr "Volumes"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 #, fuzzy
 msgid "Get all values"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 #, fuzzy
 msgid "Get sample"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 #, fuzzy
 msgid "Close dialog on apply"
 msgstr "Habilitar relatório de cache"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Construtor de SQL GRASS: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 #, fuzzy
 msgid "Verify"
 msgstr "Georrectificar"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 #, fuzzy
 msgid "Verify SQL statement"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 #, fuzzy
 msgid "SQL statement not verified"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 #, fuzzy
 msgid "SQL statement is not valid"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -5105,78 +5472,78 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 #, fuzzy
 msgid "SQL statement is valid"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Descripción"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Não foi encontrada a coluna <%(column)s> na tabela <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Só é possível exibir 256 colunas."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Não foi encontrada a coluna <%(column)s> na tabela <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Limite de 100000 registos."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 #, fuzzy
 msgid "Unknown value"
 msgstr "desconocido"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr "a"
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, fuzzy, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5190,205 +5557,205 @@ msgstr ""
 "\n"
 "Detalhes: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Calculadora de mapas"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Adicionar colunas"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Adicionar colunas"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 #, fuzzy
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Nome da coluna de atributo para usar como rótulos"
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, fuzzy, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Dados de atributo- clique no botão direito para editar/gerir registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Consulta SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Simples"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Aplique o comando SELECCIONAR/SELECT e recarregue os registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Construtor SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Construtor SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Editar registo seleccionado"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Inserir novo registo"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Apagar registro(s) seleccionado(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Apagar todos os registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Seleccionar todo"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Desceleccionar todo"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 #, fuzzy
 msgid "Highlight selected features"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 #, fuzzy
 msgid "Highlight selected features and zoom"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 #, fuzzy
 msgid "Extract selected features"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Apagar caractecterísticas seleccionadas"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Actualizar registo existente"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, fuzzy, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Converter a partir do tipo de feição"
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Não é possível actualizar registo existente."
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Número de categoria (column %s) não foi encontrado."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5397,26 +5764,26 @@ msgstr ""
 "Seleccionar os dados de registo (%d) irá apagar definitivamente os dados da "
 "tabela. Pretende apagar estes registos?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Apagar registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Nada para extrair."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, fuzzy, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5424,7 +5791,7 @@ msgid ""
 "%s"
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5433,58 +5800,58 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabela <%s> - botão-direitto para apagar colunas)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Volumes"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Renomear nome da coluna"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 "Não é possivel renomear coluna. Não se encontra definido nenhum nome de "
 "coluna."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, fuzzy, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 #, fuzzy
 msgid "Drop selected column"
 msgstr "Nome da coluna de atributos"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 #, fuzzy
 msgid "Drop all columns"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5493,12 +5860,12 @@ msgstr ""
 "Seleccionar os dados de registo (%d) irá apagar definitivamente os dados da "
 "tabela. Pretende apagar estes registos?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 #, fuzzy
 msgid "Drop column(s)"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, fuzzy, python-format
 msgid ""
 "Selected columns\n"
@@ -5508,52 +5875,52 @@ msgstr ""
 "Seleccionar os dados de registo (%d) irá apagar definitivamente os dados da "
 "tabela. Pretende apagar estes registos?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Lista de camadas"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, fuzzy, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Extensão de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Driver"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Chave"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Nome de chave"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 #, fuzzy
 msgid "Insert record for each category into table"
 msgstr ""
@@ -5561,55 +5928,55 @@ msgstr ""
 "\n"
 "Tabela de cores necessária para o arquivo [%s] no mapset [%s].\n"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Precisa de adicionar categorias utilizando o módulo v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Descrição da tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Nome da tablea"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Criar tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Adicionar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Definir padrão"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "Camada a apagar"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modificar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modificar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5618,69 +5985,69 @@ msgstr ""
 "Por favor use o comando db.connect para definir os parâmetros da base de "
 "dados."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Não é possível criar uma nova tabela. Nome da tabela ou nome da chave de "
 "coluna não foi encontrado."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, fuzzy, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, fuzzy, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr "vectorial vectorial Capa."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "No se puede crear la nueva localización"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Gestor das tabelas de atributos do GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5689,204 +6056,205 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "Criar tabela"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 #, fuzzy
 msgid "Close dialog on submit"
 msgstr "Habilitar relatório de cache"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 #, fuzzy
 msgid "No attributes found"
 msgstr "MAPSET %s não encontrado"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 #, fuzzy
 msgid "Update attributes"
 msgstr "%d atualizar erros"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Alterar atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Visualizar atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Recarregar"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Submeter"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Converter a partir do tipo de feição"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "G_spawn: não é possível bloquear o sinal %d"
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "Visualizar em 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Visualização 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Escolhar o ficheiro de workspace "
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "Ficheiro não encontrado"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Nada para extrair."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, fuzzy, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5895,637 +6263,637 @@ msgstr ""
 "Falha na leitura do ficheiro de workspace <%s>. Ficheiro inválido Invalid "
 "file, unable to parse XML document."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "G_spawn: não consegui abrir o arquivo %s"
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Añadir las capas importadas al árbol de capas"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Gerar da base de dados"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Simples"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Modo portátil"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Copiar"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Seleccionar ficheiro WKT"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Fino:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 #, fuzzy
 msgid "Set options"
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Propriedades Nviz"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Workspace (Área de trabalho)"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Parâmetro não encontrado: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Guardar región:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "(valor)"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Gerar da base de dados"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Lista de categorías"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Editar GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "Descrição"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Adicionar camada de texto"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Transectos de amostra"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "O"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "Descripción"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "Ficheiro WKT:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "Ficheiro não encontrado"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "Código EPSG em falta."
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Gerar da base de dados"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Limpar mapa vectorial"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Importar mapa vectorial"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Criar mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 #, fuzzy
 msgid "Stop"
 msgstr "Superior"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Nome da camada raster existente"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Análise de rede"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6533,50 +6901,50 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Sobrepor ficheiro?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "vectorial."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6584,89 +6952,89 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "não está inicializado"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Sobrepor ficheiro?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Camadas do mapa"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Gerir camadas"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Gerir ou reportar categorias"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Seleccionar %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6675,380 +7043,381 @@ msgstr ""
 "Cambia el nombre de una columna en la tabla de atributos conectada a un mapa "
 "vectorial dado."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Cambiar nombre de columna"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Caminho mais curto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Análise do caixeiro-viajante"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Mostrar pontos"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Análise do perfil de terreno"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Análise de rede"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Configuração dos eixos"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Linhas de fluxo"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Saida"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analisar"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Configuração"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Definições raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Tabelas de cor"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Converter coordenadas"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Cor da linha"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Regras de cor"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Limpar o GCP seleccionado"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Línea"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Pontos de controlo sobre o terreno (GCP)"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Apagar location seleccionada"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Análise do terreno"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Mostrar linhas"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Definições de vectores"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "Mapa de sombras"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Análise do caixeiro-viajante"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Render"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Activar/desactivar render automático"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Exibir extensão computacional"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -7057,16 +7426,16 @@ msgstr ""
 "Mostrar/ocultar extensão da região (definido com g.region). Mostrar desenhos "
 "da região como quadrado azul dentro da região computada. "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Modo de exibição"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -7076,17 +7445,17 @@ msgstr ""
 "padrão para visualização de novo mapa podem ser definidas no 'Definições do "
 "do utilizador de GUI'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "Mostrar região"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Restringir a resolução para as definições da máquina"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -7095,103 +7464,103 @@ msgstr ""
 "padrão para visualização de novo mapa podem ser definidas no 'Definições do "
 "do utilizador de GUI'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 #, fuzzy
 msgid "Display geometry"
 msgstr "%d %s sem geometria"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Dimensão/amplitude"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Zoom para a região computacional (definido com g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Visualización de mapas"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS Visualização de mapas:"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, fuzzy, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7205,376 +7574,403 @@ msgstr ""
 "\n"
 "Detalles: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Digitalizar"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Adicionar camada de texto"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Zoom para a região computacional (definido com g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Barra de ferramentas do digitalizador vectorial"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Tipod e camada '%s' não suportado"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Iniciar nova visualização"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Não é possível ler os códigos EPSG: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Iniciar nova visualização"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Importanto feições do mapa %d..."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Georrectifica rasters e mapas vectoriais"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Mostrar/ocultar escala e direcção Norte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Mostrar/ocultar legenda"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Mostrar/ocultar escala e direcção Norte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analizar mapa"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Medir distância"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Medir distância"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Mapa de perfil da superfície"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Análise de rede"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Arrastar com o rato para vista panorâmica"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "Arrastar e clicar com o rato para zoom"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "Arrastar e clicar com o rato para unzoom"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 #, fuzzy
 msgid "Vector digitizer not available"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Erro na digitalização de vector"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Criar RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Alterar nome"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Editar GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Renomear location"
@@ -7584,330 +7980,330 @@ msgstr "Renomear location"
 msgid "Create new configuration file for r.li modules"
 msgstr "Criar nova tabela de cores usando regras de cores"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Foi cancelado o assistente de location. Location não foi criado."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Mapa raster a recodificar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Mapa vectorial a reclassificar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Mapa vectorial a reclassificar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Mostrar configuração"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Parámetros del terreno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Região"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Transectos de amostra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Mover a Janela"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Georrectifica rasters e mapas vectoriais"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Mover a Janela"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Largura:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "Mapas temáticos"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Transectos de amostra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Mover a Janela"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7915,194 +8311,207 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Resumo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Mapa raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Linhas vectoriais"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Região"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Tipo de capa de mapa:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Limites/contornos de região"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Largura:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Cambiar nombre de columna"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Simples"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Tabla"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "Workspace (Área de trabalho)"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Barra de ferramentas de Nviz"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/lmgr/frame.py:293
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
 #, fuzzy
-msgid "Map layers"
-msgstr "Camadas do mapa"
+msgid "Layers"
+msgstr "Capa"
 
-#: ../gui/wxpython/lmgr/frame.py:304
+#: ../gui/wxpython/lmgr/frame.py:339
 #, fuzzy
-msgid "Command console"
+msgid "Console"
 msgstr "Comando terminado"
 
-#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
 #, fuzzy
-msgid "Search modules"
-msgstr "uso: %s arquivo de elementos locação mapset."
+msgid "Modules"
+msgstr "Código"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
+msgstr "Descrição de camada"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -8110,253 +8519,242 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 #, fuzzy
 msgid "Choose model to run"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 #, fuzzy
 msgid "Do you want to save changes in the workspace?"
 msgstr "vectorial?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 #, fuzzy
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Entorno de trabajo?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "Borrar visualización"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Criar topologia para mapa vectorial de GRASS."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Definir Região"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, fuzzy, python-format
-msgid "Current mapset is <%s>."
-msgstr "Mudar mapset actual."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Alterar ambiente de trabalho"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "desconocido"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Construtor SQL"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 #, fuzzy
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr "Entorno de trabajo?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 #, fuzzy
 msgid "Create new workspace?"
 msgstr "Crear nuevo archivo de entorno de trabajo"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Escolhar o ficheiro de workspace "
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Por favor aguarde, a carregar workspace..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Escolher ficheiro para gravar workspace actual"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Guardar entorno de trabajo"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 #, fuzzy
 msgid "Writing current settings to workspace file failed."
 msgstr "Falha ao obter nome do soquete para o monitor <%s>."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS Visualização de mapas:"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8364,37 +8762,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "Añadir las capas importadas al árbol de capas"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Tipo de camada de mapa não suportado '%s'"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8404,59 +8802,56 @@ msgstr ""
 "Pretende remover as camada(s) de mapa(s)%s\n"
 "da árvore de camadas?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 #, fuzzy
 msgid "Quit GRASS GUI"
 msgstr "Acerca de la GUI wxPython de GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 #, fuzzy
 msgid "Import raster data"
 msgstr "Importar mapa raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 #, fuzzy
 msgid "Link external raster data"
 msgstr "Carregando mapas raster"
@@ -8473,13 +8868,15 @@ msgid "Set raster output format"
 msgstr "Seleccionar tipo de letra"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 #, fuzzy
 msgid "Import vector data"
 msgstr "Importar mapa vectorial"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 #, fuzzy
 msgid "Link external vector data"
 msgstr "Informação base da Metadata vectorial"
@@ -8504,7 +8901,7 @@ msgstr "Descarga e importa datos de servidores WMS."
 msgid "Add command layer"
 msgstr "Adicionar camada de comandos"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Sair"
@@ -8557,8 +8954,8 @@ msgid "Add rhumbline layer"
 msgstr "Adicionar camada rhumbline"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "Adicionar mapa raster"
@@ -8582,323 +8979,315 @@ msgstr "Intervalo válido"
 msgid "Background vector map"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Camadas do mapa"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Alterar nível de opacidade"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "Propriedades Nviz"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 #, fuzzy
 msgid "Zoom to selected map(s)"
 msgstr "Zum al mapa seleccionado"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 #, fuzzy
 msgid "Set computational region from selected map(s)"
 msgstr "mostrar"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Criar RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Mostrar dados de atributos"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Iniciar a edição"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Parar a edição"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 #, fuzzy
 msgid "Rebuild topology"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 #, fuzzy
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Zum"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Recodificar de forma interactiva"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histograma"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Estatística Univariada de raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Relatório e estatística"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Perfil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "Apagar camada seleccionada"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Não é possivel criar um perfil dos mapas raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "3º mapa raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Tipo de camada de mapa não suportado '%s'"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Definir opacidade <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Sobrepor ficheiro?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Não é possível disponibilizar o histograma do mapa raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Definir opacidade <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Grupo de camadas"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Clicar para editar as definições da camada"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "Duplo click para definir propriedades"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Por favor aguarde, a actualizar dados..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 #, fuzzy
 msgid "Start new map display"
 msgstr "Iniciar nova visualização"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Criar novo ficheiro de workspace"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 #, fuzzy
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Abrir ficheiro de área de trabalho (workspace)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 #, fuzzy
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Guardar ficheiro de workspace actual"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 #, fuzzy
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Añadir capa de mapa ráster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Adicionar mapa vectorial"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Añadir capa de mapa vectorial"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Añadir sobreposições"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 #, fuzzy
 msgid "Import/link raster or vector data"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "Calculador de mapa raster 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 #, fuzzy
 msgid "Graphical Modeler"
 msgstr "Ajuda GRASS GIS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Georrectificar"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "Configurações do GUI do utilizador"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "Árvore de Steiner"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Editar registo seleccionado"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Mostrar dados de atributos"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "Gerar histograma da imagem."
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Mostrar diálogo de configuração do NVIZ"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Mostrar diálogo de configuração do NVIZ"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8906,641 +9295,649 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Análise do perfil de terreno"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Perfil de "
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Distância (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Distância ao longo do transecto"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 "O perfil do transecto deve ser desenhado na janela de visualização de mapas."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nada no perfil"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "Sobrepor ficheiro?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Não foi possível abrir o ficheiro <%s>."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "  Linhas:  %12d  Cols: %12d  Céls: %d\n"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Seleccionar mapa raster 1 (obrigatório):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Detalhes:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Informação estatística de camadas de mapas raster."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Dibujar/redibujar perfil"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 #, fuzzy
 msgid "Draw transect in map display window to profile"
 msgstr "Não consegui alocar o buffer de células em display_signature()."
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "Guardar visualización en archivo PNG"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "Sair da ferramenta de digitalização"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histograma"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histograma"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "Gravar como"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Informação estatística de camadas de mapas raster."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Copiar"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Seleccionar mapa raster 2 (opcional):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histograma"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Titulo do perfil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Tamanho da letra do título (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 #, fuzzy
 msgid "X-axis label:"
 msgstr "Etiqueta do eixo do Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Etiqueta do eixo do Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Tamanho do tipo de letra da etiqueta (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Família de fontes/tipo de letra:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Largura:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 #, fuzzy
 msgid "Apply changes for the current session and close dialog"
 msgstr "Aplicar alterações para a sessão actual"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Definições do perfil gravadas no ficheiro  '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Definir região do mapa seleccionado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Cor da linha"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Definições do marcadordo de segmento"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Configuração dos eixos"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Eixo do X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Eixo do Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Mínimo Personalizado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Máximo personalizado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Escala logarítmica"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Definições de grelha e legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Cor da grelha"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Mostrar grelha"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Tamanho da fonte da legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Definições do perfil gravadas no ficheiro  '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Definições raster"
+msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Coluna de atributo:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Seleccionar mapa raster 3 (opcional):"
+msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Desenhar"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Ajuda"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Região inválida"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Modo portátil"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Região inválida"
+msgid "Seed point outside the current region"
+msgstr "Gerar área para região actual"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Importar mapa vectorial"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 #, fuzzy
 msgid "&File"
 msgstr "Arquivo"
@@ -9549,8 +9946,8 @@ msgstr "Arquivo"
 msgid "Workspace"
 msgstr "Workspace (Área de trabalho)"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Novo"
 
@@ -9558,7 +9955,7 @@ msgstr "Novo"
 msgid "Create new workspace"
 msgstr "Criar novo workspace"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Abrir"
 
@@ -9566,12 +9963,12 @@ msgstr "Abrir"
 msgid "Load workspace from file"
 msgstr "Carregar workspace de ficheiro"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Gravar"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Gravar como"
 
@@ -9594,7 +9991,7 @@ msgstr ""
 "Carregar camadas de mapas a partir de ficheiro GRC para árvore de camadas"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "Mostrar"
@@ -9629,7 +10026,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Adicionar mapa raster"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Adicionar camada de grelha"
@@ -10411,24 +10808,24 @@ msgstr "Volumen para series raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Converte mapas raster 3D em mapas raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georrectificar"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 #, fuzzy
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -10468,16 +10865,16 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Tipo de capa de mapa:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Descrição de camada"
@@ -10491,7 +10888,7 @@ msgstr "Descrição de camada"
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Fechar"
@@ -10501,8 +10898,8 @@ msgstr "Fechar"
 msgid "Quit wxGUI session."
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Acerca de la GUI wxPython de GRASS"
@@ -10511,7 +10908,7 @@ msgstr "Acerca de la GUI wxPython de GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "Configuração"
@@ -10706,7 +11103,7 @@ msgstr "Lista de categorías"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Configuração"
 
@@ -11964,7 +12361,7 @@ msgstr ""
 "celda."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Plano"
 
@@ -12260,8 +12657,8 @@ msgid "Develop vector map"
 msgstr "Título do mapa vetorial"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 #, fuzzy
 msgid "Create new vector map"
 msgstr "Crear nuevo mapa vectorial"
@@ -13260,13 +13657,13 @@ msgstr ""
 "generada por i.cluster, i.class o i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr "Clustering de input para classificação não-supervisada"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -14438,27 +14835,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Barra de ferramentas do mapa"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Exibir extensão computacional"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Modo portátil"
+msgstr "Criar histograma de imagem ou ficheiro raster"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Exibir extensão computacional"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "Ajuda"
@@ -14488,7 +14889,7 @@ msgid "Prints system information"
 msgstr "Informacão sobre a base de dados"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Acerca de GRASS GIS"
 
@@ -14502,308 +14903,317 @@ msgstr "Importar mapa vectorial"
 msgid "Attribute table manager"
 msgstr "Gestor de tabela de atributos"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "Criar novo mapset:"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 #, fuzzy
 msgid "Load model from file"
 msgstr "Carregar workspace de ficheiro"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "Seleccionar ficheiro de códigos EPSG"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 #, fuzzy
 msgid "Export model to image"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "Modo"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "Adicionar camada de comandos"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "Definir nova location"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "Opcional"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Adicionar camada de comandos"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "Eliminar tabela"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "Apagar filtrado"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Mostrar as páginas de manual GRASS em HTML"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "Muestra información básica sobre una capa de mapa ráster."
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Ajuda GRASS GIS"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Adicionar mapa raster 3D"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "vectorial"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Adicionar legenda"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Adicionar legenda"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Añadir barra de escala y flecha de Norte"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Mostrar as páginas de manual GRASS em HTML"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Ajuda GRASS GIS"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Muestra información básica sobre una capa de mapa ráster."
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 #, fuzzy
 msgid "Click here to show search module engine"
 msgstr "Clique aqui para visualizar definições 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 #, fuzzy
 msgid "Click here to hide search module engine"
 msgstr "Clique aqui para esconder as definições 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "Saida"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "Cancelar o comando em execução"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Escala logarítmica"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Guardar ficheiro como..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14811,12 +15221,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14824,327 +15234,357 @@ msgid ""
 "Details: %(error)s"
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Categoria"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Importanto feições do mapa %d..."
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Criar novo mapset:"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Novo mapa vazio foi criado."
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Executar o comando"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "Configurações do GUI do utilizador"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Aceitar valores padrão"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Aplicar alterações para a sessão actual"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "ask_transform_coord():  Encerrando sessão.. \n"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 #, fuzzy
 msgid "Key column cannot be empty string."
 msgstr "Nome de arquivo ilegal. não pode ser '.' ou 'NULL'\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "Configurações do GUI do utilizador"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Definições do gestor de camadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 #, fuzzy
 msgid "Ask when removing map layer from layer tree"
 msgstr "Mapa base do qual tirar as regras de quantização"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, fuzzy, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Nota: Necessário reiniciar o GUI."
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 #, fuzzy
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 #, fuzzy
 msgid "Suppress positioning Layer Manager window"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 #, fuzzy
 msgid "Save current window layout as default"
 msgstr "Resolução no perfil (padrão = resolução da região atual)"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "Alterar configurações"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Lista de elementos:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 #, fuzzy
 msgid "Icon theme (requires GUI restart):"
 msgstr "Nota: Necessário reiniciar o GUI."
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Definições da janela de comandos"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Tipo de letra padrão no GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 #, fuzzy
 msgid "Default display settings"
 msgstr "Número inicial de cores"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Mostrar controlador:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Modo da barra de estado:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "ráster."
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "Código"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Definições da janela de comandos"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Encerrar o diálogo/janela quando finalizar"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Recodificar de forma interactiva"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-#, fuzzy
-msgid "Layers"
-msgstr "Capa"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Número inicial de cores"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Definir células NULAS como opacas"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Definições de vectores"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Exibir:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 #, fuzzy
 msgid "Line width (in pixels):"
 msgstr "Línea"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Busca de dados"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 #, fuzzy
 msgid "Left mouse double click:"
 msgstr "Duplo clique com o botão esquerdo do rato"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 #, fuzzy
 msgid "Ask when deleting data record(s) from table"
 msgstr "Não é possível combinar as opções 'from_table' e 'select'"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Criar tabela"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 #, fuzzy
 msgid "Key column:"
 msgstr "Cambiar nombre de columna"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 #, fuzzy
 msgid "Projection statusbar settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -15156,85 +15596,96 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Código EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "Código EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 #, fuzzy
 msgid "&Load EPSG codes"
 msgstr "Explorar códigos EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 #, fuzzy
 msgid "Precision:"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Não é possível ler os códigos EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "Vetor de entrada '%s' não encontrado"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Seleccionar tipo de letra padrão"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Seleccionar tipo de letra padrão"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Seleccionar tipo de letra:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Simples"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "Mudar mapset actual."
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -15243,283 +15694,373 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Proprietário"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "Tipo de feição"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Volumes"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Nome da coluna de atributos"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Copiar"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Copiar tabla"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Teste de normalidade"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Perfil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Gravar configurações actuais?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Apagar mapset seleccionado"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Mostrar configuração"
+msgid "Load:"
+msgstr "Cargar"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 "El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Guardar ficheiro como..."
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Introduzir parâmetro para "
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Executar o comando"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Quantização"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 #, fuzzy
 msgid "Enter parameters for '"
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 #, fuzzy
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Cláusula WHERE do comando SQL sem palavra-chave 'where'"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 #, fuzzy
 msgid "Run the command (Ctrl+R)"
 msgstr "Executar o comando"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Mostrar página do manual relativa ao comando"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Encerrar o diálogo/janela quando finalizar"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Parâmetros Obrigatórios"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Parâmetro não encontrado: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[múltiplo]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Seleccionar %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 #, fuzzy
 msgid "&Load"
 msgstr "Cargar"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Gravar como"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Recodificar de forma interactiva"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 #, fuzzy
 msgid "Directory"
 msgstr "Descripción"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "Camada"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+#, fuzzy
+msgid "Layer name"
+msgstr "Nombre de capa"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Projecção:"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manual"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -15527,47 +16068,47 @@ msgid ""
 "Reason: %s"
 msgstr "G_spawn: não é possível bloquear o sinal %d"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Guardar ficheiro como..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Erro no %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "uso: %s arquivo de elementos locação mapset."
@@ -15577,611 +16118,484 @@ msgstr "uso: %s arquivo de elementos locação mapset."
 msgid "Location or mapset is not defined."
 msgstr "Computação de fluxos para grelha massiva (float version)."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 #, fuzzy
 msgid "Create attribute table"
 msgstr "Não consegui criar a tabela %s"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 #, fuzzy
 msgid "Name for new vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, fuzzy, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 #, fuzzy
 msgid "Load region:"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 #, fuzzy
 msgid "Save region:"
 msgstr "Guardar región:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Criar/editar grupo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Impossível fechar mapa de entrada"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "ask_transform_coord():  Encerrando sessão.. \n"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Habilitar relatório de cache"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "ASTER"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Lista de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "Añadir las capas importadas al árbol de capas"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "Guardar cambios"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, fuzzy, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "vectorial."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "3d raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "Tipo de capa de mapa:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "Seleccionar color"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 #, fuzzy
 msgid "Mapset:"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
 msgid "Invert selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-#, fuzzy
-msgid "Multiple import"
-msgstr "Importación de DXF múltiple"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Lista de camadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Lista de camadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "uma lista longa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "Camada"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-#, fuzzy
-msgid "Layer name"
-msgstr "Nombre de capa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Nombre para el nuevo mapa vectorial:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Projecção:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-#, fuzzy
-msgid "Options"
-msgstr "Opcional"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Importar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-#, fuzzy
-msgid "Import selected layers"
-msgstr "Importar las capas seleccionadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Añadir las capas importadas al árbol de capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-#, fuzzy
-msgid "Add imported layers into layer tree"
-msgstr "Añadir las capas importadas al árbol de capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-#, fuzzy
-msgid "&Link"
-msgstr "linha %d: <%s>"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-#, fuzzy
-msgid "Link selected layers"
-msgstr "Modificar camaad seleccionada"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Não é possivel criar um perfil dos mapas raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Importar mapa vectorial"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "Importar mapa raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Ignorar erros SQL e continuar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Importar camadas DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-#, fuzzy
-msgid "Choose DXF file to import"
-msgstr "Seleccionar archivo DXF a importar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 #, fuzzy
 msgid "Set Map Layer Opacity"
 msgstr "Establecer opacidad de la capa de mapa"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "opaco"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Visualización de mapas"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 #, fuzzy
 msgid "Copyright"
 msgstr "Copiar"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 #, fuzzy
 msgid "License"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "Atributos"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "Atributos"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, fuzzy, python-format
 msgid "%s file missing"
 msgstr "Código EPSG em falta."
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "Ficheiro não encontrado"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "Vista prévia"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Grupo de camadas"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Camada"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Alterar nível de opacidade"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Alterar nível de opacidade"
@@ -16289,1391 +16703,1571 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Seleccionar tipo de letra padrão"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "Nome da coluna de atributos"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Tipo"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "Definições raster"
+msgid "Source input"
+msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Gravar"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "Saida"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 #, fuzzy
 msgid "All files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 #, fuzzy
 msgid "File:"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "Seleccionar archivo DXF a importar"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 #, fuzzy
 msgid "Choose input directory"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "Emissão"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 #, fuzzy
 msgid "Choose file"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Consulta às características"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 #, fuzzy
 msgid "Protocol:"
 msgstr "Código de projecção:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Destacar"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Mapa <%s> não encontrado"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Regressar às definições padrão"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Parâmetros Obrigatórios"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Lista de capas"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Sobrepor raster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Código de projecção:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Volver a muestrear utilizando el vecino más próximo"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Regressão linear"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Añadir las capas importadas al árbol de capas"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Camada"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Estilo"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Adicionar grupo de camadas"
+msgid "Add default"
+msgstr "Padrão"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "ráster"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 #, fuzzy
 msgid "&Connect"
 msgstr "Ligar"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Definições do gestor de camadas"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Alterar nome"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Añadir las capas importadas al árbol de capas"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Definir Região"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Restringir a resolução para as definições da máquina"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Sobrescrever o ficheiro existente"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Apagar camada seleccionada"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "não está inicializado"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Cerrar diálogo"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Cerrar diálogo"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Consultar datos de vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 #, fuzzy
 msgid "Load"
 msgstr "Cargar"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Configuração"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Regressar a visualização padrão"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 #, fuzzy
 msgid "Create new color table for raster map"
 msgstr "Utilitário de interpolação bilinear para camadas de mapas raster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "Mapa 3dcell com valores de referência"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, fuzzy, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr "Mapa 3dcell com valores de referência"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "suporte da categoria para arquivo de vetores [%s] no mapset [%s] %s"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 "Coluna da tabela de atributos com valores para interpolar (se camada > 0)"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Consultar datos de vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Camada:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Coluna de atributo:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Coluna de cor RGB:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "Coluna de cor RGB:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Series raster para volume"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "Carregar workspace de ficheiro"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr "vectorial."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "<%s> criados na base de dados."
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "Por favor aguarde, carregando dados de atributo..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 "Coluna da tabela de atributos com valores para interpolar (se camada > 0)"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 "Coluna da tabela de atributos com valores para interpolar (se camada > 0)"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "CAlculador de mapas GRASS %s "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "CAlculador de mapas GRASS %s "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 #, fuzzy
 msgid "mapcalc statement"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 #, fuzzy
 msgid "Operators"
 msgstr "Parámetros"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 #, fuzzy
 msgid "Operands"
 msgstr "Abrir"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 #, fuzzy
 msgid "Expression"
 msgstr "Emissão"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "Gravar workspace para ficheiro"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "Carregar workspace de ficheiro"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 #, fuzzy
 msgid "add"
 msgstr "Adicionar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 #, fuzzy
 msgid "subtract"
 msgstr "Superfície"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 #, fuzzy
 msgid "multiply"
 msgstr "[múltiplo]"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 #, fuzzy
 msgid "greater than"
 msgstr "mais curto que"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 #, fuzzy
 msgid "greater than or equal to"
 msgstr "Crear/reconstruir topología"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 #, fuzzy
 msgid "less than"
 msgstr "mais longo que"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 #, fuzzy
 msgid "one's complement"
 msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "Opcional"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "Sobrescrever o ficheiro existente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "Sobrescrever o ficheiro existente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 #, fuzzy
 msgid "Insert mapcalc function"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Gerar pontos aleatórios"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Debe introducir una extensión del nombre del mapa para continuar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Debe introducir una extensión del nombre del mapa para continuar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 #, fuzzy
 msgid "Expression file (*)|*"
 msgstr "Emissão"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "Escolha o ficheiro GRC para carregar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "Opcional"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Lista de categorías"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Mapa de sombras"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Lista de categorías"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "Lista de categorías"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Eliminar vértice"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "Emissão"
+
+#: ../gui/wxpython/modules/import_export.py:45
+#, fuzzy
+msgid "Multiple import"
+msgstr "Importación de DXF múltiple"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Lista de camadas"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Lista de camadas"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "uma lista longa"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Nombre para el nuevo mapa vectorial:"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Importar"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+#, fuzzy
+msgid "Import selected layers"
+msgstr "Importar las capas seleccionadas"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "Definições raster"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Configuração do tipo de letra"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Añadir las capas importadas al árbol de capas"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+#, fuzzy
+msgid "Add imported layers into layer tree"
+msgstr "Añadir las capas importadas al árbol de capas"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+#, fuzzy
+msgid "&Link"
+msgstr "linha %d: <%s>"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+#, fuzzy
+msgid "Link selected layers"
+msgstr "Modificar camaad seleccionada"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Não é possivel criar um perfil dos mapas raster"
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Importar mapa vectorial"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Importar mapa raster"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Ignorar erros SQL e continuar"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Importar camadas DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+#, fuzzy
+msgid "Choose DXF file to import"
+msgstr "Seleccionar archivo DXF a importar"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projecção:"
+
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+msgid "Name for output GRASS map"
+msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Eliminar vértice"
+msgid "Layers to be reprojected"
+msgstr "Camada a apagar"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "Emissão"
+msgid "Reproject selected layers"
+msgstr "Importar las capas seleccionadas"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 #, fuzzy
 msgid "Numeric column:"
 msgstr "Cambiar nombre de columna"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 #, fuzzy
 msgid "Name for the output raster map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "Exportar mapa raster"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 #, fuzzy
 msgid ":"
 msgstr "X:"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 #, fuzzy
 msgid "Block size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 #, fuzzy
 msgid "Model: "
 msgstr "Modo:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Criar histograma de imagem ou ficheiro raster"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 #, fuzzy
 msgid "Set up vector cleaning tools"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "Digite 'list -f' para"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "Eliminar tabela"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "As linhas %s do arquivo <%s> da tabela de elipsóide estú inválidas"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 #, fuzzy
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 #, fuzzy
 msgid "line"
 msgstr "rhumbline"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "Editar linha/ contorno/fronteira"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "Adicionar centroides"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 #, fuzzy
 msgid "face"
 msgstr "Superfície"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Seleccionar limiar"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -17681,21 +18275,21 @@ msgid ""
 "%s"
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 #, fuzzy
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Não foi possível abrir o ficheiro <%s>."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -17709,188 +18303,183 @@ msgstr ""
 "\n"
 "Número de linhas ignoradas: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "linha %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, fuzzy, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "Tipo da coluna suave (datetime) não é suportado"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Comando terminado"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Detalhes:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Tipo de camada de mapa não suportado '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "ERRO: Falha no rendering"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Carregando dados..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Zoom à região pré-definida"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Mapa raster a ser pesquisado"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Detalhes:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Mapa raster a ser pesquisado"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, fuzzy, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "ERRO: Falha no rendering"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Carregando dados..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Render"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Render"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Desconhecido"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Não é possível actualizar registo existente."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Máximo personalizado"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/core/utils.py:558
-#, fuzzy, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Não é possível abirr o ficheiro"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Não foi possível abrir o ficheiro <%s>."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Duplicar atributos"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17899,17 +18488,22 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Ficheiro não encontrado"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 #, fuzzy
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
@@ -17917,165 +18511,165 @@ msgstr ""
 "Por favor, tenha em atenção que os dados serão deixados num estado "
 "inconsistente e que poderão ser corrompidos/danificados"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Comando cancelado"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Comando terminado"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Falha na execução:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Erro:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, fuzzy, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Impossível executar o comando: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Quebra de segmento"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 #, fuzzy
 msgid "Collapse all except PERMANENT and current"
 msgstr "Lista todos os monitores (com estado atual)"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 #, fuzzy
 msgid "Collapse all except PERMANENT"
 msgstr "Executar todos os testes de integração"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 #, fuzzy
 msgid "Collapse all except current"
 msgstr "Lista todos os monitores (com estado atual)"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Colapsar todos"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Espandir todos"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Mostrar lo seleccionado"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Zoom à região guardada"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "Norte"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "caixa"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "esfera"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cubo"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamante"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "ASTER"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "Histograma"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -18086,12 +18680,12 @@ msgstr ""
 "       Detalhes: %(detail)s\n"
 "       Linha: '%(line)s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "Não é possível actualizar registo existente."
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, fuzzy, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -18099,288 +18693,319 @@ msgid ""
 "Details: %(detail)s"
 msgstr "Falha ao obter nome do soquete para o monitor <%s>."
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 #, fuzzy
 msgid "Unable to set "
 msgstr "não está inicializado"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 #, fuzzy
 msgid "Define GRASS Database and Location Name"
 msgstr "Definir base de datos de GRASS y nombre de localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Directorio de dados de SIG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Localização de projecto"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Escolher directoria para dados GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Nome da location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "Location seleccionada inválida"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Seleccione a directoria de dados GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 #, fuzzy
 msgid "Location already exists in GRASS Database."
 msgstr "La localización ya existe en la base de datos de GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Não é possível criar a location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 #, fuzzy
 msgid "Choose method for creating a new location"
 msgstr "Seleccione el método para crear una nueva localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 #, fuzzy
 msgid "Select EPSG code of spatial reference system"
 msgstr "Seleccionar código EPSG do sistema de coordenadas"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 #, fuzzy
 msgid "Select coordinate system parameters from a list"
 msgstr "Seleccione o sistema de coordenadas"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Escolha apenas um sistema de coordenadas para posicionamento"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Simples"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Avançado"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Código"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Código de projecção:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Procurar em descrição:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 #, fuzzy
 msgid "Choose projection parameters"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 #, fuzzy
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Seleccionar datum com elipsóide associada"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 #, fuzzy
 msgid "Datum with associated ellipsoid"
 msgstr "Seleccionar datum com elipsóide associada"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 #, fuzzy
 msgid "Ellipsoid only"
 msgstr "Elipsóide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, fuzzy, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Especificar datum geodésico"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsóide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Código do datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Especificar elipsoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Código da elipsoide:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Seleccionar ficheiro georreferenciado"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Ficheiro georreferenciado:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Ficheiro WKT:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Seleccionar código EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Caminho para o ficheiro de códigos EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Seleccionar ficheiro de códigos EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Seleccionar código EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Caminho para o ficheiro de códigos EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Código EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Seleccionar ficheiro de códigos EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 "Seleccionar método para especificar los parámetros de georreferenciación"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 #, fuzzy
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Introducir cadena de parámetros PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "É necessário uma transformação do datum"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Base de dados GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Nome da location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Nome da location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Definição PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definir nova location de GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, fuzzy, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -18388,262 +19013,267 @@ msgid ""
 "Details: %(err)s"
 msgstr "Não é possível criar nova location. Location <%s> não foi criada"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Foi cancelado o assistente de location. Location não foi criado."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 #, fuzzy
 msgid "Unable to create new location"
 msgstr "No se puede crear la nueva localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 #, fuzzy
 msgid "New GIS data directory"
 msgstr "Directorio de datos de SIG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Código EPSG em falta."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Código EPSG em falta."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "Ficheiro não encontrado"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 #, fuzzy
 msgid "Set default region extent and resolution"
 msgstr "Establecer la extensión y resolución de la región predeterminada"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Definir região"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Location seleccionada inválida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Clique aqui para visualizar definições 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Clique aqui para esconder as definições 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Linhas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Colunas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Células: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Profundidade: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Células 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Resolução Sup-Inf"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Norte"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Oeste"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Este"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Sul"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Resolução N-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Resolução E-W"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 #, fuzzy
 msgid "Select datum transformation"
 msgstr "Seleccionar transformación del datum"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 #, fuzzy
 msgid "Select from list of datum transformations"
 msgstr "Lista de transformaciones del datum"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 #, fuzzy
 msgid "Easting"
 msgstr "Este"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "Norte"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 #, fuzzy
 msgid "Elevation"
 msgstr "Viés (bias) de elevação"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr ""
 "Programa de generación de superficies a partir de contornos rasterizados."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Gerir cores de imagens"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Distância ao longo do transecto"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Distância ao longo do transecto"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "Sobre a superfície"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Carregando mapas raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Carregando 3º mapa raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "falha"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Tipod e camada '%s' não suportado"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Não é possível carregar mapa raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 #, fuzzy
 msgid "Unable to unload 3d raster map"
 msgstr "Mapa 3dcell com valores de referência"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3º mapa raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, fuzzy, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Nome da coluna (tipo deve ser numérico)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, fuzzy, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Não consegui processar áreas do mapa vetorial <%s>"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, fuzzy, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Nome da coluna (tipo deve ser numérico)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, fuzzy, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Registro no banco de dados para categoria %d não encontrado"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, fuzzy, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Não é possível definir as propriedades da camada de dados (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, fuzzy, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -18651,816 +19281,816 @@ msgid ""
 "%s"
 msgstr "Falha abrindo arquivo dig de entrada."
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 #, fuzzy
 msgid "constant#"
 msgstr "constante"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Visualizar"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "Analisar"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 #, fuzzy
 msgid "Perspective:"
 msgstr "Proyección:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Z-exag:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 #, fuzzy
 msgid "Look:"
 msgstr "Visualizar:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "esfera"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "Render"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "Superior"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "Restabelecer"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Regressar a visualização padrão"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Código"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Superfície"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "Superficies de custo"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vector"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 #, fuzzy
 msgid "Lighting"
 msgstr "Destacar"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Modo:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "ambos"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Sombreamento:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "plano"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 #, fuzzy
 msgid "Set to all"
 msgstr "Seleccionar todo"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 #, fuzzy
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Transforma todos os valores de z para base=0"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Estilo"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "arame"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "Superfície"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "Fino:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 #, fuzzy
 msgid "Surface attributes"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Transparência"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "mapa"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "Não-definido"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "constante"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Restabelecer"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "Regressar a visualização padrão"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "Cor:"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "Volumes"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "Transparência"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 #, fuzzy
 msgid "Show vector lines"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Linhas vectoriais"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "Largura:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "Cor:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Establecer opciones"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "Sobre a superfície"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Altura sobre superfície:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 #, fuzzy
 msgid "Show vector points"
 msgstr "%d pontos além do limite"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 #, fuzzy
 msgid "Vector points"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 #, fuzzy
 msgid "Icon:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "Isosuperfícies"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Lista de isosuperfícies"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "Mostrar linhas"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 #, fuzzy
 msgid "Brightness:"
 msgstr "Riqueza"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 #, fuzzy
 msgid "Isosurface attributes"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Duplicar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 #, fuzzy
 msgid "SW"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Nível"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "uma lista longa"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "Mapa vectorial <%s> é 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "Mapa vectorial <%s> é 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "Sobre a superfície"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "Gerir"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Norte"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Sul"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Detectar fronteiras/bordas"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Norte"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Altura:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Este"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Inferior"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "(valor)"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "(passo):"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Posição:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Torcer:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "Altura"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marcador:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "G_spawn: não consegui abrir o arquivo %s"
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -19470,7 +20100,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -19482,23 +20112,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -19506,7 +20136,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -19517,31 +20147,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -19553,68 +20183,68 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Barra de ferramentas de georrectificação"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Renomear nome da coluna"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Mostrar grelha"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Exportar mapa raster"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Definir opacidade <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -19624,216 +20254,232 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Zoom para a extensão da região guardada"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Adicionar mapa raster 3D"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Limpar o GCP seleccionado"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Selecionar trajeto interativamente"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Configuração dos eixos"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Seleccionar mapa raster 3 (opcional):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "vectorial."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Adicionar mapa raster 3D"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Classificar imagem"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Consultar mapa(s) ráster/vectorial seleccionado"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Adicionar novo vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Eliminar vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Eliminar vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
 #, fuzzy
+#~ msgid "Unsupported units"
+#~ msgstr "Tipod e camada '%s' não suportado"
+
+#, fuzzy
+#~ msgid "Map layers"
+#~ msgstr "Camadas do mapa"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "uso: %s arquivo de elementos locação mapset."
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Pretende criar uma GRASS location <%s>?"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "Mapa <%s> não encontrado"
 
@@ -19845,6 +20491,22 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Sair do GUI"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Região inválida"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Barra de ferramentas do digitalizador vectorial"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Intervalo válido"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Copiar tabla"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Lista de camadas"
 
@@ -19861,16 +20523,29 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Estatística Univariada de raster"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "Opcional"
+#~ msgid "Load settings:"
+#~ msgstr "Mostrar configuração"
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Añadir las capas importadas al árbol de capas"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Importação de vectores do antigo GRASS"
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Añadir las capas importadas al árbol de capas"
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Importação de vectores do antigo GRASS"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Importa mapas vectoriales de versiones anteriores de GRASS."
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "Importação de GPS de GPSBabel"
+
+#~ msgid "GEOnet import"
+#~ msgstr "Importação de GEOnet"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -19895,44 +20570,31 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Converter coordenadas"
 
 #, fuzzy
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "mostrar"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Importação de vectores do antigo GRASS"
+#~ msgid "Create optimally placed labels"
+#~ msgstr "Criar etiquetas"
 
-#, fuzzy
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Importação de vectores do antigo GRASS"
+#~ msgid "Bit pattern comparison "
+#~ msgstr "Comparação de padrões de bits"
 
 #, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Importa mapas vectoriales de versiones anteriores de GRASS."
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Gestor de tabela de atributos"
 
 #, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Importação de GPS de GPSBabel"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Importação de GEOnet"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Seleccionar directorio de mapas de origen:"
 
 #, fuzzy
-#~ msgid "Create optimally placed labels"
-#~ msgstr "Criar etiquetas"
-
-#~ msgid "Bit pattern comparison "
-#~ msgstr "Comparação de padrões de bits"
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "mostrar"
 
 #, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "Nome da coluna (tipo deve ser numérico)"
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "Volumes"
+#~ msgid "Add default servers"
+#~ msgstr "Adicionar grupo de camadas"
 
 #, fuzzy
 #~ msgid "Choose project location and mapset"
@@ -19982,10 +20644,6 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Iniciar GRASS!"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "Criar mapset"
-
-#, fuzzy
 #~ msgid "&Location wizard"
 #~ msgstr "Assistente do location"
 
@@ -20009,12 +20667,26 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Aviso"
 
 #, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "uso: %s arquivo de elementos locação mapset."
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Desenvolver mapa raster"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Añadir las capas importadas al árbol de capas"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Añadir las capas importadas al árbol de capas"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importa mapas vectoriales de versiones anteriores de GRASS."
 
 #~ msgid "Vector to volume"
 #~ msgstr "Vectorial para volume"
 
+#~ msgid "Sites to vector"
+#~ msgstr "Pontos ('sites' ) para vectorial"
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "Calculador de mapa raster 3D"
@@ -20041,11 +20713,9 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgid "Voxel statistics"
 #~ msgstr "Estatísticas gerais"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importa mapas vectoriales de versiones anteriores de GRASS."
-
-#~ msgid "Sites to vector"
-#~ msgstr "Pontos ('sites' ) para vectorial"
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Volumes"
 
 #, fuzzy
 #~ msgid ""
@@ -20090,6 +20760,5 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ "Calcula estadísticas univariantes a partir de celdas no nulas de un mapa "
 #~ "ráster."
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Gestor de tabela de atributos"
+#~ msgid "Digitize"
+#~ msgstr "Digitalizar"
diff --git a/locale/po/grasswxpy_pt_br.po b/locale/po/grasswxpy_pt_br.po
index 8d5bab7..5c58edd 100644
--- a/locale/po/grasswxpy_pt_br.po
+++ b/locale/po/grasswxpy_pt_br.po
@@ -10,7 +10,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_pt_br\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2011-08-12 16:32-0300\n"
 "Last-Translator: \n"
 "Language-Team: Português do Brasil <grass-translations at lists.osgeo.org>\n"
@@ -20,214 +20,214 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "Seleccione a directoria de dados GRASS:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "uso: %s arquivo de elementos locação mapset."
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "Explorar"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr "Nome da nova locação a criar"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Renomear location seleccionada"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Apagar"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Apagar location seleccionada"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 #, fuzzy
 msgid "&Rename"
 msgstr "&Renomear"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Apagar"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Apagar mapset seleccionado"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Gestor de camadas do SIG GRASS"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Erro"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "Vetor de entrada '%s' não encontrado"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "Vetor de entrada '%s' não encontrado"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Erro:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Criar novo mapset:"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, fuzzy, python-format
 msgid "Location <%s> created"
 msgstr "Location <%s> criada"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 #, fuzzy
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "¿Quiere establecer la extensión y resolución de la región predeterminada "
 "ahora?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "vectorial."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, fuzzy, python-format
 msgid ""
 "Current name: %s\n"
@@ -237,12 +237,12 @@ msgstr ""
 "Nome actual: %s\n"
 "Insira novo nome:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Mensagem"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -250,7 +250,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -258,7 +258,7 @@ msgid ""
 "%s"
 msgstr "Não é possível renomear mapset"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -266,7 +266,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -274,14 +274,14 @@ msgid ""
 "%s"
 msgstr "Não é possível renomear location"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -294,11 +294,11 @@ msgstr ""
 "\n"
 "TODOS os MAPAS incluidos neste MAPSET serão APAGADOS DEFINITIVAMENTE!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Não é possível apagar mapset"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -309,41 +309,41 @@ msgstr ""
 "\n"
 "TODOS os MAPAS incluidos neste lcoation serão APAGADOS!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Não é possível apagar location"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "Escolher directoria para dados GIS:"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -352,17 +352,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Não é possível criar novo mapset: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -374,11 +374,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -386,7 +386,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -394,19 +394,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -425,193 +425,193 @@ msgid ""
 "%s"
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Barra de ferramentas de georrectificação"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 #, fuzzy
 msgid "Map Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Barra de ferramentas Ferramentas"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Barra de Ferramentas Diversos"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Imprimir display"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 #, fuzzy
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Ajustar display destino para display origem"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 #, fuzzy
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Ajustar display origem para display destino"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Mostrar região"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Mostrar região"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 #, fuzzy
 msgid "Import vector map"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Nada para extrair."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Analisar"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histograma"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -620,659 +620,660 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Carregando mapas raster"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Carregando mapas raster"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 #, fuzzy
 msgid "Create/edit group..."
 msgstr "Crear/editar grupo..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Classificar imagem"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Classificar imagem"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 #, fuzzy
 msgid "Color"
 msgstr "Cor"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Zum al mapa seleccionado"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Importación de archivo binario"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Não consegui criar a tabela %s"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Importa tablas de atributos en varios formatos."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Alterar nível de opacidade"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Apagar camada selecionada"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Adicionar camada RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Aviso"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 #, fuzzy
 msgid "Preview"
 msgstr "Vista prévia"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Zoom no mapa"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 msgid "Add raster map"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS Visualização de mapas:"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Barra de Ferramentas Diversos"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, fuzzy, python-format
 msgid "Map <%s> not found."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Escolha um nome de arquivo para salvar a imagem (não é necessário adicionar "
 "extensão)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 #, fuzzy
 msgid "No raster or vector map layer selected for querying."
 msgstr "Não foi seleccionado nenhum mapa vectorial para consulta."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Alternar de volta para o modo de visualização 2D"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Alternar de volta para o modo de visualização 2D"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Fechar"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Número de categoria (column %s) não foi encontrado."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Definições do mapa"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 #, fuzzy
 msgid "Color:"
 msgstr "Cor:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Índice de formas"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 #, fuzzy
 msgid "Size:"
 msgstr "Dimensão:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Consultar mapa(s) raster/vetorial"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Consultar mapa(s) raster/vetorial selecionados"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Fino:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Seleccionar código EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "Listar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 #, fuzzy
 msgid "GCP Manager toolbar"
 msgstr "Gestão de cores"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Configuração de página"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 #, fuzzy
 msgid "Print preview"
 msgstr "Vista previa de impressão"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Imprimir display"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 #, fuzzy
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Zoom para a região computacional (definido com g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 #, fuzzy
 msgid "Zoom to default region"
 msgstr "Zoom à região pré-definida"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 #, fuzzy
 msgid "Zoom to saved region"
 msgstr "Zoom à região guardada"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 #, fuzzy
 msgid "Set computational region from display"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 #, fuzzy
 msgid "Save display geometry to named region"
 msgstr "Guardar a geometria de visualização para a região designada"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "Erro RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 #, fuzzy
 msgid "Setup for georectification"
 msgstr "Configuración para georrectificación"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 #, fuzzy
 msgid "Georectifying setup canceled."
 msgstr "Cancelada la configuración de la georrectificación."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 #, fuzzy
 msgid "Select map type and location/mapset"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 #, fuzzy
 msgid "Map type to georectify"
 msgstr "Tipo de mapa a georrectificar"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 #, fuzzy
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 #, fuzzy
 msgid "vector"
 msgstr "vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 #, fuzzy
 msgid "Select source location:"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 #, fuzzy
 msgid "Select source mapset:"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 #, fuzzy
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 "Debe seleccionar una localización válida antes de seleccionar un directorio "
 "de mapas"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 #, fuzzy
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 "Debe seleccionar una localización y directorio de mapas válidos para "
 "continuar"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 #, fuzzy
 msgid "Select image/map group to georectify"
 msgstr "Seleccionar grupo de imágenes/mapas a georrectificar"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 #, fuzzy
 msgid "Select group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 #, fuzzy
 msgid "Create group if none exists"
 msgstr "Crear grupo si no existe ninguno"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 #, fuzzy
 msgid "Add vector map to group..."
 msgstr "Añadir capa de mapa vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 #, fuzzy
 msgid "Extension for output maps:"
 msgstr "Extensión para los mapas de salida:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 #, fuzzy
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Debe seleccionar un grupo de imágenes/mapas válido para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 #, fuzzy
 msgid "You must enter an map name extension in order to continue"
 msgstr "Debe introducir una extensión del nombre del mapa para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 #, fuzzy
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 "Seleccionar imagen/mapa a visualizar para la creación de puntos de control "
 "sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 #, fuzzy
 msgid "You must select a source map in order to continue"
 msgstr "Debe seleccionar una imagen/mapa válido para continuar"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1281,30 +1282,30 @@ msgstr ""
 "Sem mapas no grupo <%s> selecionado.\n"
 "Favor editar grupo ou selecionar outro grupo."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 #, fuzzy
 msgid "Manage Ground Control Points"
 msgstr "Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "fonte"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "destino"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "Converter coordenadas"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1317,30 +1318,30 @@ msgstr ""
 "Leste: %(coor0)s \n"
 "Norte: %(coor1)s"
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 #, fuzzy
 msgid "Writing POINTS file failed"
 msgstr "Falló la escritura del archivo de PUNTOS"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, fuzzy, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Arquivo de PONTOS gravado"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "origem mapwin não definida"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "destino mapwin não definido"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 #, fuzzy
 msgid "Reading POINTS file failed"
 msgstr "Falló la lectura del archivo de PUNTOS"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1355,150 +1356,150 @@ msgstr ""
 "6+ puntos para segundo orden y\n"
 "10+ puntos para tercer orden."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 #, fuzzy
 msgid "Rectifying images, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformar imagen"
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, fuzzy, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "vectorial."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "Definições do gestor de camadas"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "Establecer puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Ajustar display origem para display destino"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Ajustar display destino para display origem"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "use"
 msgstr "Não-definido"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "Grupo objectivo/alvo"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "Grupo objectivo/alvo"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 #, fuzzy
 msgid "Forward error"
 msgstr "Erro 'GngFlatten'"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 #, fuzzy
 msgid "Backward error"
 msgstr "Erro 'GngFlatten'"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 #, fuzzy
 msgid "Create vector map group"
 msgstr "Crear nuevo mapa vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 #, fuzzy
 msgid "Select vector map(s) to add to group:"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 #, fuzzy
 msgid "Edit GCP"
 msgstr "Editar GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 #, fuzzy
 msgid "Ground Control Point No."
 msgstr "Pontos de controlo sobre o terreno (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "destino E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "destino N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 #, fuzzy
 msgid "Apply changes for the current session"
 msgstr "Aplicar alterações para a sessão actual"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 #, fuzzy
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
@@ -1506,145 +1507,145 @@ msgstr ""
 "Aplicar e guardar as alterações no arquivo de configuração do utilizador "
 "(pré-definido para as próximas sessões)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 #, fuzzy
 msgid "Close dialog"
 msgstr "Cerrar diálogo"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 #, fuzzy
 msgid "Symbology"
 msgstr "Simbología"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 #, fuzzy
 msgid "Symbol settings"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "Limpar o GCP seleccionado"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "Regras de cor"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "Mostrar linhas"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "Barra de ferramentas de georrectificação"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Seleccionar método de rectificación para rásters"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 #, fuzzy
 msgid "1st order"
 msgstr "Primeira ordem"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 #, fuzzy
 msgid "2nd order"
 msgstr "Segunda ordem"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 #, fuzzy
 msgid "3rd order"
 msgstr "Terceira ordem"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 #, fuzzy
 msgid "clip to computational region in target location"
 msgstr "não consegui criar o arquivo de cabeçalho para [%s em %s]"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Definições do perfil gravadas no arquivo  '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Erro na digitalização de vector"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, fuzzy, python-format
 msgid "New vector map <%s> created"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1652,423 +1653,423 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 #, fuzzy
 msgid "Update categories"
 msgstr "Actualizar categorias"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 #, fuzzy
 msgid "No vector map selected for editing."
 msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 #, fuzzy
 msgid "Apply changes for this session"
 msgstr "ask_transform_coord():  Encerrando sessão.. \n"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 #, fuzzy
 msgid "Close dialog and save changes to user settings file"
 msgstr "Cerrar guardar"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 #, fuzzy
 msgid "Close dialog and ignore changes"
 msgstr "Encerrar janelas e ignorar as alterações"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 #, fuzzy
 msgid "General"
 msgstr "Geral"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 #, fuzzy
 msgid "Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 #, fuzzy
 msgid "Line width"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 #, fuzzy
 msgid "Snap also to vertex"
 msgstr ""
 "\n"
 "** %s existe. deseja sobrescrever? "
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, fuzzy, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Distância da câmera (em unidades do mapa)"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 #, fuzzy
 msgid "Select vector features"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 #, fuzzy
 msgid "Select threshold"
 msgstr "Seleccionar limiar"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 #, fuzzy
 msgid "Select only features inside of selection bounding box"
 msgstr "Permitir apenas fluxo horizontal e vertical de água"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 #, fuzzy
 msgid "Check for duplicates"
 msgstr "Digite 'list -f' para"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Digitalizar novo contorno"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 #, fuzzy
 msgid "Break lines at intersection"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Digitalizar"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 #, fuzzy
 msgid "Save changes"
 msgstr "Guardar cambios"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 #, fuzzy
 msgid "Save changes on exit"
 msgstr "mostra os drivers e finaliza"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 #, fuzzy
 msgid "Query tool"
 msgstr "Herramienta de consultas"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 #, fuzzy
 msgid "Choose query tool"
 msgstr "Ferramenta não existe"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 #, fuzzy
 msgid "Select by box"
 msgstr "Selecionar trajeto interativamente"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 #, fuzzy
 msgid "length"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 #, fuzzy
 msgid "Select lines"
 msgstr "Seleccionar líneas"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 #, fuzzy
 msgid "shorter than"
 msgstr "mais curto que"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 #, fuzzy
 msgid "longer than"
 msgstr "mais longo que"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 #, fuzzy
 msgid "dangle"
 msgstr "dangle"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 #, fuzzy
 msgid "Select dangles"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 #, fuzzy
 msgid "Attributes"
 msgstr "Atributos"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 #, fuzzy
 msgid "Digitize new feature"
 msgstr "Digitalizar"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 #, fuzzy
 msgid "Add new record into table"
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 #, fuzzy
 msgid "Layer"
 msgstr "Camada"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 #, fuzzy
 msgid "Category"
 msgstr "Categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 #, fuzzy
 msgid "Mode"
 msgstr "Modo"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 #, fuzzy
 msgid "Next to use"
 msgstr "Tipo desconhecido: %d"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 #, fuzzy
 msgid "Category number"
 msgstr "Número da camada"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 #, fuzzy
 msgid "Category mode"
 msgstr "Modo portátil"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 #, fuzzy
 msgid "Manual entry"
 msgstr "Entrada manual"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 #, fuzzy
 msgid "No category"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 #, fuzzy
 msgid "Delete existing feature(s)"
 msgstr "Borrar"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 #, fuzzy
 msgid "Delete record from table"
 msgstr "%d categorias carregadas da tabela"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "Consultar com atributos"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "Digitalizar nova linha"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "Digitalizar novo contorno"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 #, fuzzy
 msgid "Highlight"
 msgstr "Destacar"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 #, fuzzy
 msgid "Highlight (duplicates)"
 msgstr "Destacar (duplicados)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "Point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 #, fuzzy
 msgid "Line"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 #, fuzzy
 msgid "Boundary (no area)"
 msgstr "Tamanho de área = 0.0 ignorado"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 #, fuzzy
 msgid "Boundary (one area)"
 msgstr "Tamanho de área = 0.0 ignorado"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 #, fuzzy
 msgid "Boundary (two areas)"
 msgstr "Limite/fronteira (duas áreas)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 #, fuzzy
 msgid "Centroid (in area)"
 msgstr "Ilha: %d  na área: %d\n"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 #, fuzzy
 msgid "Centroid (outside area)"
 msgstr "Tamanho de área = 0.0 ignorado"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 #, fuzzy
 msgid "Centroid (duplicate in area)"
 msgstr "%d categorias duplicadas no vetor"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 #, fuzzy
 msgid "Node (one line)"
 msgstr "Escrever nós da linha"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 #, fuzzy
 msgid "Node (two lines)"
 msgstr "Líneas de flujo"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 #, fuzzy
 msgid "Area (closed boundary + centroid)"
 msgstr "Centróide da área sem categoria"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 #, fuzzy
 msgid "Direction"
 msgstr "Descripción"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, fuzzy, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "não é possível criar arquivo de dependência [%s em %s]"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -2076,85 +2077,85 @@ msgid ""
 "Reason: %s"
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Se necesitan al menos %d GCP. Operación cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Gerar pontos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 #, fuzzy
 msgid "List of categories - right-click to delete"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 #, fuzzy
 msgid "Add new category"
 msgstr "Añadir categoría nueva"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 #, fuzzy
 msgid "Apply changes"
 msgstr "Guardar cambios"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 #, fuzzy
 msgid "Ignore changes and close dialog"
 msgstr "Ignorar erros SQL e continuar"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 #, fuzzy
 msgid "Apply changes and close dialog"
 msgstr "Impossível fechar mapa de entrada"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 #, fuzzy
 msgid "Feature id:"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, fuzzy, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2165,284 +2166,284 @@ msgstr ""
 "Número de camada e categoria deve ser um inteiro.\n"
 "Número da camada deve ser superior a zero."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 #, fuzzy
 msgid "Delete selected"
 msgstr "Borrar lo seleccionado"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 #, fuzzy
 msgid "Delete all"
 msgstr "Borrar todo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 #, fuzzy
 msgid "Reload"
 msgstr "Recarregar"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 #, fuzzy
 msgid "Unable to update vector map."
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, fuzzy, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 "\n"
 "ERRO: Falta valor para o parâmetro <%s>\n"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 #, fuzzy
 msgid "Set value"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 #, fuzzy
 msgid "Starting value"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 #, fuzzy
 msgid "Step"
 msgstr "Passo"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 #, fuzzy
 msgid "List of duplicates"
 msgstr "uma lista longa"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 #, fuzzy
 msgid "Feature id"
 msgstr "Tipo de feição"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 #, fuzzy
 msgid "Layer (Categories)"
 msgstr "Número da camada"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Digitalizar novo ponto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Digitalizar nova linha"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Esquerda: novo ponto; Ctrl+Esquerda: desfazer último ponto; Direito: fechar "
 "linha"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Digitalizar novo contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Digitalizar novo centróide"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 "Digitize new area (composition of boundaries without category and one "
 "centroid with category)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Construir polilinhas a partir de linhas de contorno/fronteira."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Esquerda: selecionar; Ctrl+esquerda: deselecionar; Direita: confirmar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Apagar registro(s) seleccionado(s)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Visualizar/atualizar atributos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Esquerda: selecionar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Visualizar/atualizar categorias"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Sair da digitalização"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Sair do digitalizador e gravar mudanças"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "Barra de herramientas del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "Barra de herramientas del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Ferramentas adicionais (copiar, espelhar, conectar, etc)."
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Desfazer"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Desfazer alterações anteriores"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Desfazer alterações anteriores"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 #, fuzzy
 msgid "Break selected lines/boundaries at intersection"
 msgstr "As linhas %s do arquivo <%s> da tabela de elipsóide estú inválidas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 #, fuzzy
 msgid "Connect selected lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Copiar categorias"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 #, fuzzy
 msgid "Copy features from (background) vector map"
 msgstr "Converte um mapa raster em uma camada de mapa vetorial."
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 #, fuzzy
 msgid "Feature type conversion"
 msgstr "Conversão do tipo de característica"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 #, fuzzy
 msgid "Flip selected lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 #, fuzzy
 msgid "Merge selected lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 #, fuzzy
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Dividir linha/contorno"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 #, fuzzy
 msgid "Query features"
 msgstr "Consulta às características"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 #, fuzzy
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 #, fuzzy
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 #, fuzzy
 msgid "Select vector map"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2451,67 +2452,68 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Definições da digitalização"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, fuzzy, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "suporte da categoria para arquivo de vetores [%s] no mapset [%s] %s"
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Barra de herramientas del digitalizador vectorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, fuzzy, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 #, fuzzy
 msgid "Save changes?"
 msgstr "Guardar alterações?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, fuzzy, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "Não consegui obter informações de camada para o mapa vetorial"
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Encerrar o diálogo/janela quando finalizar"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 #, fuzzy
 msgid "New vector map"
 msgstr "Novo mapa vectorial"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Medindo distância"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, fuzzy, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2520,200 +2522,219 @@ msgstr ""
 "Clique e arraste com o botão esquerdo do rato para medir. %sDuplo-clique do "
 "botão esquerdo para limpar."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 #, fuzzy
 msgid "Measuring distance"
 msgstr "Medindo distância"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 #, fuzzy
 msgid "Measuring distance:"
 msgstr "Medindo distância:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "Legenda"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "Medir distância"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Aviso"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Medindo distância:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Adicionar barra de escala"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Adicionar barra de escala e seta de norte"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Mostrar mapa"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' copiado para a área de trabalho (clipboard)"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Mostrar configuração"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Añadir sobreposições"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Séries de raster"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "Por favor aguarde, a actualizar dados..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 #, fuzzy
 msgid "Zoom to saved region extents"
 msgstr "Zoom para a extensão da região guardada"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 #, fuzzy
 msgid "Save display extents to region file"
 msgstr "Guardar a geometria de visualização para a região designada"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, fuzzy, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 #, fuzzy
 msgid "Warning"
 msgstr "Aviso"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Teste"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 #, fuzzy
 msgid "Rotation:"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 #, fuzzy
 msgid "Set font"
 msgstr "Estabelecer tipo de letra"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 #, fuzzy
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
@@ -2722,176 +2743,545 @@ msgstr ""
 "Arrastrar texto con el ratón en modo puntero a la posición.\n"
 "Doble pulsación para cambiar las opciones."
 
-#: ../gui/wxpython/gmodeler/frame.py:63
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "No é possível ler a lista: %s"
+
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "No é possível ler a lista: %s"
+
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
 #, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "Ajuda GRASS GIS"
+msgid "Overwrite?"
+msgstr "Sobrepor arquivo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Model"
-msgstr "Modo"
+msgid "GRASS locations in {}"
+msgstr "uso: %s arquivo de elementos locação mapset."
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
 #, fuzzy
-msgid "Variables"
-msgstr "Listar tabelas"
+msgid "New name"
+msgstr "Alterar nome"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
+#: ../gui/wxpython/datacatalog/tree.py:599
 #, fuzzy
-msgid "Python editor"
-msgstr "shell python"
-
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Saída de comando"
+msgid "Rename map"
+msgstr "Renomear mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Validando o modelo..."
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Rodando modelo..."
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/datacatalog/tree.py:652
 #, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "vectorial?"
+msgid "No map selected for copying."
+msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:659
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr "Entorno de trabajo?"
-
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Sair do modelador gráfico"
+msgid "Copy map"
+msgstr "Copiar tabela"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Apagar filtrado"
+msgid "Failed to copy map: new map has the same name"
+msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-#, fuzzy
-msgid "Delete intermediate data?"
-msgstr "Apagar filtrado"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Rodando modelo..."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
-"Elimina archivos de elementos de bases de datos del directorio de mapas "
-"actual del usuario."
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
 #, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "não consegui criar o arquivo de cabeçalho para [%s em %s]"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
-msgstr "Entorno de trabajo?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "Criar novo mapset:"
+msgid "Delete map"
+msgstr "Apagar mapset"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Apagar"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "Seleccionar archivo DXF:"
+msgid "g.remove completed"
+msgstr "Digite 'list -f' para"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "Arquivo de modelo GRASS (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Mostrar"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
-"El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/tree.py:827
 #, fuzzy
-msgid "Save model"
-msgstr "Modo portátil"
+msgid "Moving maps not implemented"
+msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, fuzzy, python-format
-msgid "File <%s> saved"
-msgstr "Arquivo de PONTOS <%s> guardado"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr ""
+"Elimina archivos de elementos de bases de datos del directorio de mapas "
+"actual del usuario."
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:910
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "Escolher arquivo para gravar área de trabalho actual"
+msgid "&Copy"
+msgstr "Copiar"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Validando o modelo..."
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Mostrar mapa"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Criar mapset"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "CAlculador de mapas GRASS %s "
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "CAlculador de mapas GRASS %s "
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
+"Locação atual é <%(loc)s>.\n"
+"Mapset atual é <%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr "Mapset atual é <%s>."
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
+#, fuzzy
+msgid "Data catalog"
+msgstr "Cambiar nombre de la localización seleccionada"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:25
+#, fuzzy
+msgid "Reload GRASS locations"
+msgstr "Nombre para el nuevo mapa vectorial:"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
-#, python-format
-msgid "Model exported to <%s>"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/toolbars.py:34
 #, fuzzy
-msgid "Comment:"
-msgstr "Comando"
+msgid "Click to allow editing other mapsets"
+msgstr "Clicar para editar as definições da camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:54
 #, fuzzy
-msgid "Add comment"
-msgstr "Adicionar camada de comandos"
+msgid "Search:"
+msgstr "Buscar módulo"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "favor criar a moldura do mapa primeiro."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "vectorial?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Guardar cambios"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Não é possivel criar um perfil dos mapas raster"
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Render"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Utilitário de interpolação bilinear para camadas de mapas raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Crear nuevo mapa vectorial"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Mapa raster recodificado:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Seleccionar mapa vectorial"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Mapa raster recodificado:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Calcula el índice de forma en un mapa ráster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitalizar"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Digitalizar nova linha"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Digitalizar novo ponto"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Nome do mapa raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Sair da digitalização"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Seleccionar mapa raster:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Valores de célula"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+#, fuzzy
+msgid "Width:"
+msgstr "Largura:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "Mapa raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "Ajuda GRASS GIS"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "Modo"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "Listar tabelas"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+#, fuzzy
+msgid "Python editor"
+msgstr "shell python"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Saída de comando"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "vectorial?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr "Entorno de trabajo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Sair do modelador gráfico"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Apagar filtrado"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "Apagar filtrado"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+"Elimina archivos de elementos de bases de datos del directorio de mapas "
+"actual del usuario."
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr "Entorno de trabajo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "Criar novo mapset:"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "Seleccionar archivo DXF:"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "Arquivo de modelo GRASS (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+"El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "Modo portátil"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, fuzzy, python-format
+msgid "File <%s> saved"
+msgstr "Arquivo de PONTOS <%s> guardado"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "Escolher arquivo para gravar área de trabalho actual"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Validando o modelo..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Comando"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Adicionar camada de comandos"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2902,431 +3292,428 @@ msgstr ""
 "Falha na leitura do arquivo de área de trabalho <%s>. Arquivo inválido "
 "Invalid file, unable to parse XML document."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 #, fuzzy
 msgid "Please wait, loading model..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 #, fuzzy
 msgid "Writing current settings to model file failed."
 msgstr "Falha ao obter nome do soquete para o monitor <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Não consegui abrir o arquivo <%s> para escrita."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 #, fuzzy
 msgid "Remove"
 msgstr "Remover"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "Tabela"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Estabelecer tipo de letra"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "Pontos de controlo sobre o terreno (GCP)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "Establecer puntos de control sobre el terreno (GCP)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 #, fuzzy
 msgid "Properties"
 msgstr "Propriedades"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 #, fuzzy
 msgid "List of variables - right-click to delete"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 #, fuzzy
 msgid "Data type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 #, fuzzy
 msgid "Description"
 msgstr "Descrição"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "Adicionar novo vértice"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Ponteiro"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Região"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "Perfil"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 #, fuzzy
 msgid "List of items - right-click to delete"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "Camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 #, fuzzy
 msgid "Command"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "shell python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Executar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "Gravar área de trabalho para arquivo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Não consegui trocar para mapset <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "Guardar arquivo como..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "Configurações gerais"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 #, fuzzy
 msgid "Valid:"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "Índice de formas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-#, fuzzy
-msgid "Width:"
-msgstr "Largura:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 #, fuzzy
 msgid "Height:"
 msgstr "Altura:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 #, fuzzy
 msgid "Type"
 msgstr "Tipo"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "&Raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "3d raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "Vector"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabela"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 #, fuzzy
 msgid "Metadata"
 msgstr "Metadados"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Permitir que os arquivos de saída sobescrevam os arquivos existentes"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "Descrição"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Adicionar novo vértice"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Rodando modelo..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3337,104 +3724,104 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Rodar modelo?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 #, fuzzy
 msgid "Variables below not defined:"
 msgstr "destino mapwin não definido"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "3º mapa raster"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 #, fuzzy
 msgid "unknown"
 msgstr "desconhecido"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "Opcional"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "Parámetros del terreno"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Apagar filtrado"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 #, fuzzy
 msgid "Add GRASS command to the model"
 msgstr "Adicionar ação (módulo GRASS) ao modelo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3442,158 +3829,158 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 #, fuzzy
 msgid "To"
 msgstr "Para"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Comando"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "uma lista longa"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, fuzzy, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 "Pretende remover as camada(s) de mapa seleccionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "Borrar todo"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 #, fuzzy
 msgid "No"
 msgstr "N"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "Não foi possível abrir o arquivo <%s>."
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, fuzzy, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3602,14 +3989,14 @@ msgstr ""
 "Tamanho da moldura do mapa mudou, valor antigo: %s %s\n"
 "novo valor: %s %s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, fuzzy, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3618,7 +4005,7 @@ msgstr ""
 "Posição da moldura do mapa mudou, valor antigo: %s %s\n"
 "novo valor: %s %s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, fuzzy, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3627,83 +4014,83 @@ msgstr ""
 "Tamanho da moldura do mapa mudou, valor antigo: %s %s\n"
 "novo valor: %s %s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Ajuda GRASS GIS"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "Configurações gerais"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "Vista previa de impressão"
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3711,1485 +4098,1469 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Vista previa de impressão"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "Guardar arquivo como..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "favor criar a moldura do mapa primeiro."
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "Restabelecer"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 #, fuzzy
 msgid "degree"
 msgstr "dtree"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Não é possível carregar mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 #, fuzzy
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 #, fuzzy
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Posição:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Propriedades das camadas"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Converter coordenadas"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "Seleccionar directorio de datos de GRASS:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 #, fuzzy
 msgid "Close dialog and apply changes"
 msgstr "Encerrar janelas e ignorar as alterações"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Largura:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Altura"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Altura"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 #, fuzzy
 msgid "Top"
 msgstr "Superior"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 #, fuzzy
 msgid "Bottom"
 msgstr "Inferior"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Ponto"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Analisar paisagem"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 #, fuzzy
 msgid "custom"
 msgstr "Mínimo Personalizado"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Definições do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Definições da moldura do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Moldura do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Opções da moldura do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "Ajustar moldura ao mapa selecionado"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "Ajustar moldura à região salva"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Seleção de mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Região"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 #, fuzzy
 msgid "Center:"
 msgstr "Render"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 #, fuzzy
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 #, fuzzy
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "Primeira ordem"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "desenhar borda ao redor da moldura do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 #, fuzzy
 msgid "border width (pts):"
 msgstr "Línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "Mapa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "Ponto"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "rhumbline"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "Gravar como"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 #, fuzzy
 msgid "Add"
 msgstr "Adicionar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Limpar mapa vectorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 #, fuzzy
 msgid "Delete"
 msgstr "Apagar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Propriedades"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Definições raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Definições de vectores"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Propriedades"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "Adicionar centroides"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "Editar linha/ contorno/fronteira"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 #, fuzzy
 msgid "Database connection is not defined in DB file."
 msgstr "O formato requisitado não foi compilado nesta versão"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "Apagar camada"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 #, fuzzy
 msgid "Mask"
 msgstr "Máscara"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Fechar área de trabalho actual"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Cor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "rhumbline"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Largura:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "Seleccionar directorio de datos de GRASS:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Regras de cor"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "Arquivo WKT:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 #, fuzzy
 msgid "Browse"
 msgstr "Explorar"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 #, fuzzy
 msgid "Size"
 msgstr "Dimensão"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "Dimensão:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Rescalar"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Editar valores de categoría de forma interactiva"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 #, fuzzy
 msgid "Line style"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "ASTER"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Línea"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "Séries de raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "Vectorial para raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "Gerir"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "Linhas vectoriais"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "Sobrepor mapas vectoriais"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Mapa vetorial"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 #, fuzzy
 msgid "Position"
 msgstr "Posição"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "Volumes"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "Adicionar colunas"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 #, fuzzy
 msgid "Font settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Definições do mapa"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "Configurações gerais"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 #, fuzzy
 msgid "use border color:"
 msgstr "usar| coordenada X"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-#, fuzzy
-msgid "Unsupported units"
-msgstr "Tipod e camada '%s' não suportado"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr "Padrão"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 #, fuzzy
 msgid "Style"
 msgstr "Estilo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "Tipo"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "Teste"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 #, fuzzy
 msgid "Enter text:"
 msgstr "Introducir texto:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "Destacar"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "Primeira ordem"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "&Imagens"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "Escala e Direcção Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "Emissão"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "Escala e Direcção Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "Mostrar configuração"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Selecionar trajeto interativamente"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "Cor da linha"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 #, fuzzy
 msgid "transparent"
 msgstr "transparente"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "Escala e Direcção Norte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "Dimensão:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "Alterar configurações"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "Alterar configurações"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "Largura de linha (em pixels)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "etiquetas vectoriais"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 #, fuzzy
 msgid "Generate text file with mapping instructions"
 msgstr "Gerar arquivo texto com instruções de mapping"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 #, fuzzy
 msgid "Load text file with mapping instructions"
 msgstr "Carregar arquivo texto com instruções de mapping"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Gera saída PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Gerar saída PDF"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Especificar tamanho do papel, margens e orientação"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Extensão total"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Zoom para extensão total"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Clique e arraste para posicionar a moldura do mapa"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Apagar objeto selecionado"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Mostrar prévia"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 #, fuzzy
 msgid "Quit Cartographic Composer"
 msgstr "Sair do modelador gráfico"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Adicionar info do mapa"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 #, fuzzy
 msgid "Legend"
 msgstr "Legenda"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "Adicionar barra de escala"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Añadir sobreposições"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Gestor das tabelas de atributos do GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr "vectorial."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Por favor aguarde, carregando dados de atributo..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 #, fuzzy
 msgid "Browse data"
 msgstr "Explorar dados"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 #, fuzzy
 msgid "Manage tables"
 msgstr "Gerir tabelas"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 #, fuzzy
 msgid "Manage layers"
 msgstr "Gerir camadas"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 #, fuzzy
 msgid "Close Attribute Table Manager"
 msgstr "Gestor de tabela de atributos"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Apagar mapset seleccionado"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, fuzzy, python-format
 msgid "Number of loaded records: %d"
 msgstr "Número de registos carregados: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 #, fuzzy
 msgid "Database connection"
 msgstr "Ligação à base de dados"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 #, fuzzy
 msgid "Query"
 msgstr "Consultas"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 #, fuzzy
 msgid "Set SQL statement to default"
 msgstr "Aceitar valores padrão"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Gestor de tabela de atributos"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 #, fuzzy
 msgid "Close the dialog"
 msgstr "Cerrar diálogo"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 #, fuzzy
 msgid "Columns"
 msgstr "Volumes"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 #, fuzzy
 msgid "Values"
 msgstr "Volumes"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 #, fuzzy
 msgid "Get all values"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 #, fuzzy
 msgid "Get sample"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 #, fuzzy
 msgid "Close dialog on apply"
 msgstr "Habilitar relatório de cache"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Construtor de SQL GRASS: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 #, fuzzy
 msgid "Verify"
 msgstr "Georrectificar"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 #, fuzzy
 msgid "Verify SQL statement"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 #, fuzzy
 msgid "SQL statement not verified"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 #, fuzzy
 msgid "SQL statement is not valid"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -5197,81 +5568,81 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 #, fuzzy
 msgid "SQL statement is valid"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Descripción"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 #, fuzzy
 msgid "Loading data..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, fuzzy, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Não foi encontrada a coluna <%(column)s> na tabela <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 #, fuzzy
 msgid "Can display only 256 columns."
 msgstr "Só é possível exibir 256 colunas."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Não foi encontrada a coluna <%(column)s> na tabela <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Limite de 100000 registos."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 #, fuzzy
 msgid "Unknown value"
 msgstr "desconocido"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 #, fuzzy
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr "a"
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, fuzzy, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5285,219 +5656,219 @@ msgstr ""
 "\n"
 "Detalhes: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Calculadora de mapas"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Adicionar colunas"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Adicionar colunas"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 #, fuzzy
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Nome da coluna de atributo para usar como rótulos"
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, fuzzy, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 #, fuzzy
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Dados de atributo- clique no botão direito para editar/gerir registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 #, fuzzy
 msgid "Table"
 msgstr "Tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 #, fuzzy
 msgid "SQL Query"
 msgstr "Consulta SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 #, fuzzy
 msgid "Simple"
 msgstr "Simples"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 #, fuzzy
 msgid "Apply SELECT statement and reload data records"
 msgstr "Aplique o comando SELECCIONAR/SELECT e recarregue os registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Construtor SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 #, fuzzy
 msgid "SQL Builder"
 msgstr "Construtor SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 #, fuzzy
 msgid "Edit selected record"
 msgstr "Editar registo seleccionado"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 #, fuzzy
 msgid "Insert new record"
 msgstr "Inserir novo registo"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 #, fuzzy
 msgid "Delete selected record(s)"
 msgstr "Apagar registro(s) seleccionado(s)"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 #, fuzzy
 msgid "Delete all records"
 msgstr "Apagar todos os registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 #, fuzzy
 msgid "Select all"
 msgstr "Seleccionar todo"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 #, fuzzy
 msgid "Deselect all"
 msgstr "Desceleccionar todo"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 #, fuzzy
 msgid "Highlight selected features"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 #, fuzzy
 msgid "Highlight selected features and zoom"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 #, fuzzy
 msgid "Extract selected features"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 #, fuzzy
 msgid "Delete selected features"
 msgstr "Apagar caractecterísticas seleccionadas"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 #, fuzzy
 msgid "Update existing record"
 msgstr "Actualizar registo existente"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, fuzzy, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Converter a partir do tipo de feição"
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Não é possível actualizar registo existente."
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, fuzzy, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Número de categoria (column %s) não foi encontrado."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, fuzzy, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5506,29 +5877,29 @@ msgstr ""
 "Seleccionar os dados de registo (%d) irá apagar definitivamente os dados da "
 "tabela. Pretende apagar estes registos?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 #, fuzzy
 msgid "Delete records"
 msgstr "Apagar registos"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 #, fuzzy
 msgid "Nothing to extract."
 msgstr "Nada para extrair."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 #, fuzzy
 msgid "Nothing to delete."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, fuzzy, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5536,7 +5907,7 @@ msgid ""
 "%s"
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5545,60 +5916,60 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, fuzzy, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabela <%s> - botão-direitto para apagar colunas)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Volumes"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "Comprimento: %f\n"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 #, fuzzy
 msgid "Rename column"
 msgstr "Renomear nome da coluna"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 #, fuzzy
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 "Não é possivel renomear coluna. Não se encontra definido nenhum nome de "
 "coluna."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, fuzzy, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 #, fuzzy
 msgid "Drop selected column"
 msgstr "Nome da coluna de atributos"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 #, fuzzy
 msgid "Drop all columns"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5607,12 +5978,12 @@ msgstr ""
 "Seleccionar os dados de registo (%d) irá apagar definitivamente os dados da "
 "tabela. Pretende apagar estes registos?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 #, fuzzy
 msgid "Drop column(s)"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, fuzzy, python-format
 msgid ""
 "Selected columns\n"
@@ -5622,61 +5993,61 @@ msgstr ""
 "Seleccionar os dados de registo (%d) irá apagar definitivamente os dados da "
 "tabela. Pretende apagar estes registos?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 #, fuzzy
 msgid "List of layers"
 msgstr "Lista de camadas"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, fuzzy, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 #, fuzzy
 msgid "Column name"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 #, fuzzy
 msgid "Data length"
 msgstr "Extensão de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 #, fuzzy
 msgid "Driver"
 msgstr "Driver"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 #, fuzzy
 msgid "Database"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 #, fuzzy
 msgid "Key"
 msgstr "Chave"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 #, fuzzy
 msgid "Add layer"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 #, fuzzy
 msgid "Layer description"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 #, fuzzy
 msgid "Key column"
 msgstr "Nome de chave"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 #, fuzzy
 msgid "Insert record for each category into table"
 msgstr ""
@@ -5684,63 +6055,63 @@ msgstr ""
 "\n"
 "Tabela de cores necessária para o arquivo [%s] no mapset [%s].\n"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 #, fuzzy
 msgid "You need to add categories by v.category module."
 msgstr "Precisa de adicionar categorias utilizando o módulo v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 #, fuzzy
 msgid "Table description"
 msgstr "Descrição da tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 #, fuzzy
 msgid "Table name"
 msgstr "Nome da tablea"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 #, fuzzy
 msgid "&Create table"
 msgstr "&Criar tabela"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 #, fuzzy
 msgid "&Add layer"
 msgstr "&Adicionar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 #, fuzzy
 msgid "&Set default"
 msgstr "&Definir padrão"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "Camada a apagar"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 #, fuzzy
 msgid "Modify layer"
 msgstr "Modificar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 #, fuzzy
 msgid "&Modify layer"
 msgstr "&Modificar camada"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 #, fuzzy
 msgid ""
 "Unable to get list of tables.\n"
@@ -5750,71 +6121,71 @@ msgstr ""
 "Por favor use o comando db.connect para definir os parâmetros da base de "
 "dados."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 #, fuzzy
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Não é possível criar uma nova tabela. Nome da tabela ou nome da chave de "
 "coluna não foi encontrado."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, fuzzy, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "Foi impossível criar <%s> tabela de interpolação na base de dados"
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, fuzzy, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr "vectorial vectorial Capa."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "No se puede crear la nueva localización"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Gestor das tabelas de atributos do GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5823,209 +6194,210 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "Criar tabela"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 #, fuzzy
 msgid "Close dialog on submit"
 msgstr "Habilitar relatório de cache"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 #, fuzzy
 msgid "No attributes found"
 msgstr "MAPSET %s não encontrado"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 #, fuzzy
 msgid "Update attributes"
 msgstr "%d atualizar erros"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Alterar atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 #, fuzzy
 msgid "Display attributes"
 msgstr "Visualizar atributos"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 #, fuzzy
 msgid "&Reload"
 msgstr "&Recarregar"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 #, fuzzy
 msgid "&Submit"
 msgstr "&Submeter"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Converter a partir do tipo de feição"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 #, fuzzy
 msgid "Unknown"
 msgstr "Desconhecido"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Não consegui carregar o tema de ícones. Motivo: %s"
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 #, fuzzy
 msgid "2D view"
 msgstr "Visualizar em 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Visualização 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Fechar o arquivo de área de trabalho "
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "Arquivo não encontrado"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Nada para extrair."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "rectificar imagem ou raster"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -6034,637 +6406,637 @@ msgstr ""
 "Leitura do arquivo de área de trabalho <%s> falhou.\n"
 "Arquivo inválido, não consegui verificar documento XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "G_spawn: não consegui abrir o arquivo %s"
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Adicionar camadas selecionadas na árvore de camadas"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Criar novo mapa vectorial vazio"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Simples"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Modo portátil"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Estabelecer opções"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 #, fuzzy
 msgid "Advanced"
 msgstr "Avançado"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Copiar"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Seleccionar arquivo WKT"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Fino:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Estabelecer opções"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Propriedades Nviz"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Área de trabalho (workspace)"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Gerir informação de categoria"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Guardar región:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "(valor)"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Criar novo mapa vectorial vazio"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Lista de categorías"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Editar GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "Descrição"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 msgid "Add text"
 msgstr "Adicionar texto"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Transectos de amostra"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "O"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "Descripción"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "Arquivo WKT:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Estabelecer opções"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "Arquivo não encontrado"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "Código EPSG em falta."
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Gerar da base de dados"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Limpar mapa vectorial"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Importar dados vetoriais"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Dados de entrada"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "favor criar a moldura do mapa primeiro."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Quantização"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 #, fuzzy
 msgid "Background color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Cor de fundo:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Criar mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 #, fuzzy
 msgid "Stop"
 msgstr "Superior"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Adicionar camada shaded relief"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Análise de rede"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6672,50 +7044,50 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Sobrepor arquivo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "vectorial."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6723,89 +7095,89 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "não está inicializado"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Sobrepor arquivo?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Camadas do mapa"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Adicionar camada"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Gerir camadas"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Gerir ou reportar categorias"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Seleccionar %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6814,385 +7186,386 @@ msgstr ""
 "Cambia el nombre de una columna en la tabla de atributos conectada a un mapa "
 "vectorial dado."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Tipo de datos"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Coluna numérica:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Caminho mais curto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Análise do caixeiro-viajante"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, fuzzy, python-format
 msgid "Maximum flow %s"
 msgstr "Fluxo máximo"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Mostrar pontos"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Cria uma árvore de Steiner para a rede e terminais dados"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Análise do perfil de terreno"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Análise de rede"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Configuração dos eixos"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Ponto"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Linhas de fluxo"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Saída"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 #, fuzzy
 msgid "Parameters"
 msgstr "Parâmetros"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Dados de entrada"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analisar"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Configurações"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "Rodando modelo..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Definições raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Estilo da linha"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Tabelas de cor"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Converter coordenadas"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Cor da linha"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Regras de cor"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Limpar o GCP seleccionado"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Línea"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Pontos de controlo sobre o terreno (GCP)"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Apagar location seleccionada"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Análise do terreno"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Mostrar linhas"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Definições de vectores"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Mostrar manual"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Análise do caixeiro-viajante"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 #, fuzzy
 msgid "Render"
 msgstr "Render"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 #, fuzzy
 msgid "Enable/disable auto-rendering"
 msgstr "Activar/desactivar render automático"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 #, fuzzy
 msgid "Show comp. extent"
 msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 #, fuzzy
 msgid "Show computational extent"
 msgstr "Exibir extensão computacional"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 #, fuzzy
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
@@ -7202,17 +7575,17 @@ msgstr ""
 "Mostrar/ocultar extensão da região (definido com g.region). Mostrar desenhos "
 "da região como quadrado azul dentro da região computada. "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 #, fuzzy
 msgid "Display mode"
 msgstr "Modo de exibição"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -7222,18 +7595,18 @@ msgstr ""
 "padrão para visualização de novo mapa podem ser definidas no 'Definições do "
 "do utilizador de GUI'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "Mostrar região"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 #, fuzzy
 msgid "Constrain display resolution to computational settings"
 msgstr "Restringir a resolução para as definições da máquina"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 #, fuzzy
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
@@ -7243,46 +7616,46 @@ msgstr ""
 "padrão para visualização de novo mapa podem ser definidas no 'Definições do "
 "do utilizador de GUI'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 #, fuzzy
 msgid "Map scale"
 msgstr "Escala do mapa"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Projeção indefinida (verifique as configurações)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Erro na projeção (verifique as configurações)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 #, fuzzy
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
@@ -7291,62 +7664,62 @@ msgstr ""
 "Reprojetar coordenadas mostradas na barra de status. Projeção pode ser "
 "definida no diálogo de preferências da interface gráfica (aba 'Display')"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 #, fuzzy
 msgid "Display geometry"
 msgstr "%d %s sem geometria"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 #, fuzzy
 msgid "Coordinates"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 #, fuzzy
 msgid "Extent"
 msgstr "Dimensão/amplitude"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Zoom para a região computacional (definido com g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 #, fuzzy
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Visualización de mapas"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS Visualização de mapas:"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, fuzzy, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7360,381 +7733,407 @@ msgstr ""
 "\n"
 "Detalles: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Iniciando modo de visualização 3D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 #, fuzzy
 msgid "Please wait, loading data..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Por favor espere, cargando datos..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "Alternar de volta para o modo de visualização 2D"
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
 #, fuzzy
-msgid "Digitize"
-msgstr "Digitalizar"
+msgid "No map layer selected. Operation canceled."
+msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Nenhum mapa vectorial foi seleccionado para edição."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Adicionar camada de texto"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Zoom para a região computacional (definido com g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Barra de ferramentas do digitalizador vectorial"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Moldura do mapa"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Tipod e camada '%s' não suportado"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Iniciar novo display de mapa"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Não é possível ler os códigos EPSG: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Iniciar novo display de mapa"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Importanto feições do mapa %d..."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Georrectifica rasters e mapas vectoriais"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Mostrar/ocultar escala e direcção Norte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "Mostrar/ocultar legenda"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Mostrar/ocultar escala e direcção Norte"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analizar mapa"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Medindo, perfilando, histogramando, ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Medir distância"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Medir distância"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Mapa de perfil da superfície"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Análise de rede"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Arrastar com o rato para pan"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "Arrastar e clicar com o rato para aproximar"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "Arrastar e clicar com o rato para afastar"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 #, fuzzy
 msgid "Vector digitizer not available"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Sair da digitalização"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Criar RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 #, fuzzy
 msgid "Rename"
 msgstr "Alterar nome"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Editar GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Renomear location"
@@ -7744,332 +8143,332 @@ msgstr "Renomear location"
 msgid "Create new configuration file for r.li modules"
 msgstr "Criar nova tabela de cores usando regras de cores"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Foi cancelado o assistente de location. Location não foi criado."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Mapa raster a recodificar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Mapa vectorial a reclassificar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Mapa vectorial a reclassificar:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Mostrar configuração"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Parámetros del terreno"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Região"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Transectos de amostra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 #, fuzzy
 msgid "Moving window"
 msgstr "Mover a Janela"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Georrectifica rasters e mapas vectoriais"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Pretende gravar alterações no mapa vectorial <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Cambiar el tipo de elementos geométricos."
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Mostrar mapa"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Mover a Janela"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "Camada de mapa selecionada não é vetorial."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Largura:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Mapa raster recodificado:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "Mapas temáticos"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Transectos de amostra"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Mover a Janela"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -8077,190 +8476,205 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 #, fuzzy
 msgid "Summary"
 msgstr "Resumo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Mapa raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Linhas vectoriais"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Região"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Tipo de capa de mapa:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Limites/contornos de região"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Largura:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Coluna numérica:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Bem vindo ao shell Python Interativo do wxGUI %s"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Digite %s para mais informações relacionadas a scripts GRASS."
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Digite %s para adicionar vetores ou rasters à árvore de camadas"
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Apague todo o texto do shell"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Simples"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Gestor de camadas do SIG GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Barra de Ferramentas Área de trabalho (Workspace)"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Barra de Ferramentas Dados"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Barra de ferramentas Ferramentas"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Barra de ferramentas de Nviz"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Camadas do mapa"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+#, fuzzy
+msgid "Layers"
+msgstr "Capa"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Console de comandos"
 
-#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
 #, fuzzy
-msgid "Search modules"
-msgstr "Buscar módulo"
+msgid "Modules"
+msgstr "módulo"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "shell python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -8268,190 +8682,177 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Locação atual é <%(loc)s>.\n"
-"Mapset atual é <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Escolha o modelo para rodar"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Quer gravar as mudanças no espaço de trabalho?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Quer armazenar as configurações atuais no arquivo de área de trabalho?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "Fechar Display de Mapa %d"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "Camada de mapa selecionada não é vetorial."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 "Edição permitida apenas para mapas vetoriais do conjunto de mapas (mapset) "
 "atual."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Escolha o arquivo de script para rodar"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Script Python (*.py)|*.py|Script Bash (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Arquivo de script '%s' não existe. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Definir Região"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Valor de coordenada inválido. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Lançando script '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Mapset atual é <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Alterar ambiente de trabalho"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "desconocido"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Construtor SQL"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -8459,61 +8860,61 @@ msgstr ""
 "Área de trabalho atual não vazia. Quer gravar configurações atuais no "
 "arquivo de área de trabalho?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Criar nova área de trabalho?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Escolha o arquivo de área de trabalho"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "Arquivo de área de trabalho GRASS (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Favor aguarde, carregando área de trabalho..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Arquivo de área de trabalho antigo do GRASS (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Escolher arquivo para gravar área de trabalho atual"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Arquivo de área de trabalho <%s> já existe. ¿Quer sobreescrever este arquivo?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Gravar área de trabalho"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 "Escrita das configurações atuais no arquivo de área de trabalho falhou."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS Visualização de mapas:"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8521,36 +8922,36 @@ msgid ""
 "Reason: %s"
 msgstr "Não consegui carregar o tema de ícones. Motivo: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Não é possível inserir novo registo."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Adicionar camadas selecionadas na árvore de camadas"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Tipo de camada de mapa não suportado '%s'"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8561,57 +8962,54 @@ msgstr ""
 "%s\n"
 "da árvore de camadas?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Sair da interface gráfica do GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Entre na sessão GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Importar dados raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Fazer link com dados raster externos"
 
@@ -8627,12 +9025,14 @@ msgid "Set raster output format"
 msgstr "Seleccionar tipo de letra"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Importar dados vetoriais"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Fazer link com dados vetoriais externos"
 
@@ -8656,7 +9056,7 @@ msgstr "Descarga e importa datos de servidores WMS."
 msgid "Add command layer"
 msgstr "Adicionar camada de comandos"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Sair"
@@ -8708,8 +9108,8 @@ msgid "Add rhumbline layer"
 msgstr "Adicionar camada de loxodromia"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Adicionar camada de mapa raster 3D"
 
@@ -8734,327 +9134,318 @@ msgstr "Validando o modelo..."
 msgid "Background vector map"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 #, fuzzy
 msgid "Map Layers"
 msgstr "Camadas do mapa"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 #, fuzzy
 msgid "Change opacity level"
 msgstr "Alterar nível de opacidade"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "Propriedades Nviz"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 #, fuzzy
 msgid "Zoom to selected map(s)"
 msgstr "Zum al mapa seleccionado"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 #, fuzzy
 msgid "Set computational region from selected map(s)"
 msgstr "mostrar"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Exportar modelo para script Python"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Criar RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 #, fuzzy
 msgid "Set color table"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 #, fuzzy
 msgid "Show attribute data"
 msgstr "Mostrar dados de atributos"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 #, fuzzy
 msgid "Start editing"
 msgstr "Iniciar a edição"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 #, fuzzy
 msgid "Stop editing"
 msgstr "Parar a edição"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 #, fuzzy
 msgid "Rebuild topology"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 #, fuzzy
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Zum"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Recodificar de forma interactiva"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 #, fuzzy
 msgid "Histogram"
 msgstr "Histograma"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 #, fuzzy
 msgid "Univariate raster statistics"
 msgstr "Estatística Univariada de raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Relatório e estatística"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 #, fuzzy
 msgid "Profile"
 msgstr "Perfil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 #, fuzzy
 msgid "Unable to create profile of raster map."
 msgstr "Não é possivel criar um perfil dos mapas raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "3º mapa raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Tipo de camada de mapa não suportado '%s'"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Insira nome para novo mapset:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Definir opacidade <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-#, fuzzy
-msgid "Overwrite?"
-msgstr "Sobrepor arquivo?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Não é possível disponibilizar o histograma do mapa raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, fuzzy, python-format
 msgid "Set opacity of <%s>"
 msgstr "Definir opacidade <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 #, fuzzy
 msgid "Layer group:"
 msgstr "Grupo de camadas"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 #, fuzzy
 msgid "Click to edit layer settings"
 msgstr "Clicar para editar as definições da camada"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 #, fuzzy
 msgid "(double click to set properties)"
 msgstr "Duplo click para definir propriedades"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 #, fuzzy
 msgid "Please wait, updating data..."
 msgstr "Por favor aguarde, a actualizar dados..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Iniciar novo display de mapa"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Criar nova área de trabalho (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Abrir arquivo de área de trabalho (workspace) existente (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Gravar arquivo de área de trabalho atual (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Adicionar camada de mapa raster (Ctrl+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Adicionar várias camadas de mapa raster (RGB, HIS, shaded relief...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Adicionar camada de mapa vetorial (Ctrl+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Adicionar várias camadas de mapa vetoriais (temática, chart...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Adicionar grupo"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Añadir sobreposições"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importar/ligar dados raster ou vetoriais"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Calculadora de mapa raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Modelador Gráfico"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Georretificar"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "Configurações do GUI do utilizador"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "Mostrar manual"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Editar registo seleccionado"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Mostrar dados de atributos"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "Gerar histograma da imagem."
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Mostrar/esconder diálogo de configuração do modo de visualização 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Mostrar/esconder diálogo de configuração do modo de visualização 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -9062,669 +9453,677 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Análise do perfil de terreno"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 #, fuzzy
 msgid "Profile of"
 msgstr "Perfil de "
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, fuzzy, python-format
 msgid "Distance (%s)"
 msgstr "Distância (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 #, fuzzy
 msgid "Distance along transect"
 msgstr "Distância ao longo do transecto"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 #, fuzzy
 msgid "Cell values"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 #, fuzzy
 msgid "Raster values"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 #, fuzzy
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 "O perfil do transecto deve ser desenhado na janela de visualização de mapas."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 #, fuzzy
 msgid "Nothing to profile"
 msgstr "Nada no perfil"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "Sobrepor arquivo?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Não consegui abrir o arquivo <%s> para escrita."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "  Linhas:  %12d  Cols: %12d  Céls: %d\n"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Seleccionar mapa raster 1 (obrigatório):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Detalhes:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Informação estatística de camadas de mapas raster."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Desenhar/redesenhar perfil"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Desenha o transect da janela de visualização de mapa no perfil"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Estabelecer opções"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Estatísticas gerais"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Gravar dados de perfil em arquivo CSV"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "Sair da ferramenta de digitalização"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Esquerda: novo ponto"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 #, fuzzy
 msgid "Text settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histograma"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histograma"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Valores de raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "Gravar como"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Informação estatística de camadas de mapas raster."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Copiar"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Seleccionar mapa raster 2 (opcional):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 #, fuzzy
 msgid "Select raster map:"
 msgstr "Seleccionar mapa raster:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Seleccionar grupo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histograma"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 #, fuzzy
 msgid "Profile title:"
 msgstr "Titulo do perfil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 #, fuzzy
 msgid "Title font size (pts):"
 msgstr "Tamanho da letra do título (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 #, fuzzy
 msgid "X-axis label:"
 msgstr "Etiqueta do eixo do Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 #, fuzzy
 msgid "Y-axis label:"
 msgstr "Etiqueta do eixo do Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 #, fuzzy
 msgid "Label font size (pts):"
 msgstr "Tamanho do tipo de letra da etiqueta (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 #, fuzzy
 msgid "Font family:"
 msgstr "Família de fontes/tipo de letra:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 #, fuzzy
 msgid "Style:"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 #, fuzzy
 msgid "Weight:"
 msgstr "Largura:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 #, fuzzy
 msgid "Apply changes for the current session and close dialog"
 msgstr "Aplicar alterações para a sessão actual"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Definições do perfil gravadas no arquivo  '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Definir região do mapa seleccionado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 #, fuzzy
 msgid "Line color"
 msgstr "Cor da linha"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 #, fuzzy
 msgid "Transect segment marker settings"
 msgstr "Definições do marcadordo de segmento"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 #, fuzzy
 msgid "Axis settings"
 msgstr "Configuração dos eixos"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 #, fuzzy
 msgid "X-Axis"
 msgstr "Eixo do X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 #, fuzzy
 msgid "Y-Axis"
 msgstr "Eixo do Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Estilo:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 #, fuzzy
 msgid "Custom min"
 msgstr "Mínimo Personalizado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 #, fuzzy
 msgid "Custom max"
 msgstr "Máximo personalizado"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 #, fuzzy
 msgid "Log scale"
 msgstr "Escala logarítmica"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 #, fuzzy
 msgid "Grid and Legend settings"
 msgstr "Definições de grelha e legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 #, fuzzy
 msgid "Grid color"
 msgstr "Cor da grelha"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 #, fuzzy
 msgid "Show grid"
 msgstr "Mostrar grelha"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 #, fuzzy
 msgid "Legend font size"
 msgstr "Tamanho da fonte da legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 #, fuzzy
 msgid "Show legend"
 msgstr "Mostrar legenda"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Definições do perfil gravadas no arquivo  '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Definições raster"
+msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Coluna de atributo:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Seleccionar mapa raster 3 (opcional):"
+msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 #, fuzzy
 msgid "Draw"
 msgstr "Desenhar"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 #, fuzzy
 msgid "Help"
 msgstr "Ajuda"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Região inválida"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Modo portátil"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Região inválida"
+msgid "Seed point outside the current region"
+msgstr "Gerar área para região actual"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Importar dados vetoriais"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Importar dados raster"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Arquivo"
 
@@ -9732,8 +10131,8 @@ msgstr "&Arquivo"
 msgid "Workspace"
 msgstr "Área de trabalho (workspace)"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Novo"
 
@@ -9741,7 +10140,7 @@ msgstr "Novo"
 msgid "Create new workspace"
 msgstr "Criar nova área de trabalho"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Abrir"
 
@@ -9749,12 +10148,12 @@ msgstr "Abrir"
 msgid "Load workspace from file"
 msgstr "Carregar área de trabalho de arquivo"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Gravar"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Gravar como"
 
@@ -9776,7 +10175,7 @@ msgstr ""
 "Carregar camadas de mapas a partir de arquivo GRC para árvore de camadas"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Mostrar mapa"
 
@@ -9805,7 +10204,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Adicionar camadas múltiplas de raster e vetores à visualização atual"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Adicionar camada de grelha"
@@ -10589,24 +10988,24 @@ msgstr "Volumen para series raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Converte mapas raster 3D em mapas raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georretificar"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 #, fuzzy
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Puntos de control sobre el terreno"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Lançar modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Executar modelo"
 
@@ -10649,17 +11048,17 @@ msgstr ""
 "Um utilitário simples para converter medidas de distância e \"bearing\" para "
 "coordenadas e vice-versa."
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 #, fuzzy
 msgid "Launch Cartographic Composer"
 msgstr "Lançar modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Tipo de capa de mapa:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Descrição de camada"
@@ -10673,7 +11072,7 @@ msgstr "Descrição de camada"
 msgid "Launches script file."
 msgstr "Lança arquivo de script."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Fechar"
@@ -10683,8 +11082,8 @@ msgstr "Fechar"
 msgid "Quit wxGUI session."
 msgstr "Sai de sessão wxGUI"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Sair da interface gráfica do GRASS"
@@ -10693,7 +11092,7 @@ msgstr "Sair da interface gráfica do GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "Configuração"
@@ -10899,7 +11298,7 @@ msgstr "Lista de categorías"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 #, fuzzy
 msgid "Preferences"
 msgstr "Configuração"
@@ -12226,7 +12625,7 @@ msgstr ""
 "celda."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 #, fuzzy
 msgid "Plane"
 msgstr "Plano"
@@ -12539,8 +12938,8 @@ msgid "Develop vector map"
 msgstr "Título do mapa vetorial"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 #, fuzzy
 msgid "Create new vector map"
 msgstr "Crear nuevo mapa vectorial"
@@ -13625,13 +14024,13 @@ msgstr ""
 "generada por i.cluster, i.class o i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr "Clasificación supervisada de entrada interactiva"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -14848,27 +15247,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Barra de ferramentas do mapa"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Exibir extensão computacional"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Modo portátil"
+msgstr "Criar histograma de imagem ou arquivo raster"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Exibir extensão computacional"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "Ajuda"
@@ -14898,7 +15301,7 @@ msgid "Prints system information"
 msgstr "Informacão sobre a base de dados"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 #, fuzzy
 msgid "About GRASS GIS"
 msgstr "Acerca de GRASS GIS"
@@ -14913,310 +15316,319 @@ msgstr "Importar dados vetoriais"
 msgid "Attribute table manager"
 msgstr "Gestor de tabela de atributos"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "Criar novo mapset:"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 #, fuzzy
 msgid "Load model from file"
 msgstr "Carregar workspace de arquivo"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "Seleccionar arquivo de códigos EPSG"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Exportar modelo para imagem"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Exportar modelo para script Python"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Sair do modelador"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Fechar janela do modelador"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "Modo"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "Adicionar camada de comandos"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 #, fuzzy
 msgid "Add action (GRASS command) to model"
 msgstr "Adicionar ação (módulo GRASS) ao modelo"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Adicionar dados"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Adicionar item de dados ao modelo"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "Definir nova location"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Definir relação entre itens de ação e de dados"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Adicionar grupo de camadas"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 #, fuzzy
 msgid "Adds loop (series) to model"
 msgstr "Adicionar loop (for) ao modelo"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "Opcional"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Adiciona condicional (se/então) ao modelo"
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Adiciona condicional (se/então) ao modelo"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "Eliminar tabela"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Remove ação/dado do modelo"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Propriedades do modelo (nome, objetivo, etc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "Apagar filtrado"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Apaga dados intermediários definidos no modelo"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Rodar o modelo inteiro"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Validar modelo"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Validar o modelo inteiro"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Mostrar as páginas de manual GRASS em HTML"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Sobre o Modelador Gráfico"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "Muestra información básica sobre una capa de mapa ráster."
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Exportar mapa vectorial"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Exportar modelo para script Python"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Exportar MPEG-1"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Descrição de camada"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Sair do modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "desenhar borda ao redor da moldura do mapa"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "Adicionar mapa vetorial"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Adicionar legenda"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Importar mapa raster"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Adicionar info do mapa"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Adicionar barra de escala"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Adicionar barra de escala e seta de norte"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Mostrar as páginas de manual GRASS em HTML"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Sair do modelador gráfico"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Muestra información básica sobre una capa de mapa ráster."
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 #, fuzzy
 msgid "Click here to show search module engine"
 msgstr "Clique aqui para visualizar definições 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 #, fuzzy
 msgid "Click here to hide search module engine"
 msgstr "Clique aqui para esconder as definições 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "Saída"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "Cancelar o comando em execução"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Escala logarítmica"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 #, fuzzy
 msgid "Save file as..."
 msgstr "Guardar arquivo como..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -15224,12 +15636,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -15237,330 +15649,360 @@ msgid ""
 "Details: %(error)s"
 msgstr "Mapa vetorial para armazenas diferenças"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Categoria"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Importanto feições do mapa %d..."
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Criar novo mapset:"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Novo mapa vazio foi criado."
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "No se puede crear el mapa vectorial <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Executar o comando"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "Configurações do GUI do utilizador"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Aceitar valores padrão"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Aplicar alterações para a sessão actual"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "ask_transform_coord():  Encerrando sessão.. \n"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 #, fuzzy
 msgid "Key column cannot be empty string."
 msgstr "Nome de arquivo ilegal. não pode ser '.' ou 'NULL'\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "Configurações do GUI do utilizador"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Definições do gestor de camadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 #, fuzzy
 msgid "Ask when removing map layer from layer tree"
 msgstr "Mapa base do qual tirar as regras de quantização"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, fuzzy, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Nota: Necessário reiniciar o GUI."
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Buscar módulo"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 #, fuzzy
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 #, fuzzy
 msgid "Suppress positioning Layer Manager window"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 #, fuzzy
 msgid "Save current window layout as default"
 msgstr "Resolução no perfil (padrão = resolução da região atual)"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "Saída de comando"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "Alterar configurações"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Lista de elementos:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 #, fuzzy
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Nota: Necessário reiniciar o GUI."
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 #, fuzzy
 msgid "Icon theme (requires GUI restart):"
 msgstr "Nota: Necessário reiniciar o GUI."
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Definições da janela de comandos"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "Mostrar"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Tipo de letra padrão no GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 #, fuzzy
 msgid "Default display settings"
 msgstr "Número inicial de cores"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Mostrar controlador:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Modo da barra de estado:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "ráster."
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "módulo"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Definições da janela de comandos"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Encerrar o diálogo/janela quando finalizar"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 #, fuzzy
 msgid "Add created map into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Recodificar de forma interactiva"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-#, fuzzy
-msgid "Layers"
-msgstr "Capa"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Número inicial de cores"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Definir células NULAS como opacas"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Definições de vectores"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Exibir:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 #, fuzzy
 msgid "Transparent"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 #, fuzzy
 msgid "Line width (in pixels):"
 msgstr "Línea"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Nenhuma janela de zoom foi definida"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Busca de dados"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 #, fuzzy
 msgid "Left mouse double click:"
 msgstr "Duplo clique com o botão esquerdo do rato"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 #, fuzzy
 msgid "Ask when deleting data record(s) from table"
 msgstr "Não é possível combinar as opções 'from_table' e 'select'"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Criar tabela"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 #, fuzzy
 msgid "Key column:"
 msgstr "Cambiar nombre de columna"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 #, fuzzy
 msgid "Projection statusbar settings"
 msgstr "Configuração do tipo de letra"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -15572,86 +16014,97 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 #, fuzzy
 msgid "EPSG code:"
 msgstr "Código EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "Código EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 #, fuzzy
 msgid "&Load EPSG codes"
 msgstr "Explorar códigos EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 #, fuzzy
 msgid "Precision:"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Não é possível ler os códigos EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "Vetor de entrada '%s' não encontrado"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Seleccionar tipo de letra padrão"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Seleccionar tipo de letra padrão"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Seleccionar tipo de letra:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Simples"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "Mudar mapset actual."
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -15660,291 +16113,381 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Proprietário"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "Tipo de feição"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Volumes"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Nome da coluna de atributos"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Copiar"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Copiar tabela"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Superponer mapas ráster"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Teste de normalidade"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 #, fuzzy
 msgid "Fulltext search"
 msgstr "Extensão total"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Perfil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Gravar configurações actuais?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Apagar mapset seleccionado"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Mostrar configuração"
+msgid "Load:"
+msgstr "Carregar"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 "El archivo de entorno de trabajo <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Guardar arquivo como..."
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Introduzir parâmetro para "
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Executar o comando"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Quantização"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 #, fuzzy
 msgid "Enter parameters for '"
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 #, fuzzy
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Cláusula WHERE do comando SQL sem palavra-chave 'where'"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 #, fuzzy
 msgid "Run the command (Ctrl+R)"
 msgstr "Executar o comando"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 #, fuzzy
 msgid "Copy the current command string to the clipboard"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Mostrar página do manual relativa ao comando"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 #, fuzzy
 msgid "Close dialog on finish"
 msgstr "Encerrar o diálogo/janela quando finalizar"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, fuzzy, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 #, fuzzy
 msgid "Required"
 msgstr "Parâmetros Obrigatórios"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 #, fuzzy
 msgid "Optional"
 msgstr "Opcional"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Parâmetro não encontrado: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 #, fuzzy
 msgid "[multiple]"
 msgstr "[múltiplo]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 #, fuzzy
 msgid "Select Color"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, fuzzy, python-format
 msgid "Choose %s"
 msgstr "Seleccionar %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 #, fuzzy
 msgid "&Load"
 msgstr "Carregar"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Renomear location"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Gravar como"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Recodificar de forma interactiva"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 #, fuzzy
 msgid "Directory"
 msgstr "Descripción"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "Camada"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+#, fuzzy
+msgid "Layer name"
+msgstr "Nombre de capa"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Projecção:"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 #, fuzzy
 msgid "Manual"
 msgstr "Manual"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -15952,47 +16495,47 @@ msgid ""
 "Reason: %s"
 msgstr "Não consegui carregar o tema de ícones. Motivo: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "Nada para apagar"
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Guardar arquivo como..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, fuzzy, python-format
 msgid "Error in %s"
 msgstr "Erro no %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "uso: %s arquivo de elementos locação mapset."
@@ -16002,616 +16545,487 @@ msgstr "uso: %s arquivo de elementos locação mapset."
 msgid "Location or mapset is not defined."
 msgstr "origem mapwin não definida"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "Seleccionar tipo de mapa y localización/direcctorio de mapas"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 #, fuzzy
 msgid "Create attribute table"
 msgstr "Não consegui criar a tabela %s"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 #, fuzzy
 msgid "Name for new vector map:"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, fuzzy, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 #, fuzzy
 msgid "Load region:"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 #, fuzzy
 msgid "Save region:"
 msgstr "Guardar región:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Criar/editar grupo"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Impossível fechar mapa de entrada"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "ask_transform_coord():  Encerrando sessão.. \n"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Habilitar relatório de cache"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "ASTER"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 #, fuzzy
 msgid "List of maps:"
 msgstr "Lista de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 #, fuzzy
 msgid "Select map layers and add them to the list."
 msgstr "Camada de mapa selecionada não é vetorial."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "Adicionar camadas selecionadas na árvore de camadas"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "Guardar cambios"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, fuzzy, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "vectorial."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "3d raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "Tipo de capa de mapa:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "Seleccionar color"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 #, fuzzy
 msgid "Mapset:"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
 msgid "Invert selection"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-#, fuzzy
-msgid "Multiple import"
-msgstr "Importación de DXF múltiple"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Lista de camadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Lista de camadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "uma lista longa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "Camada"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-#, fuzzy
-msgid "Layer name"
-msgstr "Nombre de capa"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Nombre para el nuevo mapa vectorial:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Projecção:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-#, fuzzy
-msgid "Options"
-msgstr "Opcional"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-#, fuzzy
-msgid "&Import"
-msgstr "&Importar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-#, fuzzy
-msgid "Import selected layers"
-msgstr "Importar las capas seleccionadas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Añadir las capas importadas al árbol de capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-#, fuzzy
-msgid "Add imported layers into layer tree"
-msgstr "Añadir las capas importadas al árbol de capas"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-#, fuzzy
-msgid "&Link"
-msgstr "linha %d: <%s>"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-#, fuzzy
-msgid "Link selected layers"
-msgstr "Modificar camaad seleccionada"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Não é possivel criar um perfil dos mapas raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Importar mapa vectorial"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "Importar mapa raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Ignorar erros SQL e continuar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-#, fuzzy
-msgid "Import DXF layers"
-msgstr "Importar camadas DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-#, fuzzy
-msgid "Choose DXF file to import"
-msgstr "Seleccionar archivo DXF a importar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 #, fuzzy
 msgid "Set Map Layer Opacity"
 msgstr "Establecer opacidad de la capa de mapa"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 #, fuzzy
 msgid "opaque"
 msgstr "opaco"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "Utilidad de salida de mapas PostScript Hardcopy."
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "Símbolo:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Configuração de símbolos"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Info"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 #, fuzzy
 msgid "Copyright"
 msgstr "Copiar"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 #, fuzzy
 msgid "License"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "Atributos"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "Atributos"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Transparente"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, fuzzy, python-format
 msgid "%s file missing"
 msgstr "Código EPSG em falta."
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Rotación:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "Arquivo não encontrado"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "Vista prévia"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Barra de ferramentas do mapa"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Grupo de camadas"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Camada"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Propriedades Nviz"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Alterar nível de opacidade"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Alterar nível de opacidade"
@@ -16712,1388 +17126,1570 @@ msgstr "sobrepõe elementos como escala e legenda no mapa"
 msgid "Create histogram with d.histogram"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Seleccionar tipo de letra padrão"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "Nome da coluna de atributos"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Tipo"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "Definições do mapa"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "ráster"
+msgid "Source input"
+msgstr "Nome da coluna"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Gravar"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 #, fuzzy
 msgid "File"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "Saída"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 #, fuzzy
 msgid "All files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Valores de célula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 #, fuzzy
 msgid "File:"
 msgstr "Arquivo"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "Seleccionar archivo DXF a importar"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 #, fuzzy
 msgid "Choose input directory"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "Emissão"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 #, fuzzy
 msgid "Choose file"
 msgstr "Seleccionar archivo DXF:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Consulta às características"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "Estabelecer opções"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 #, fuzzy
 msgid "Protocol:"
 msgstr "Código de projecção:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Barra de ferramentas do digitalizador vectorial"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Destacar"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Mapa <%s> não encontrado"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Nenhuma camada do mapa foi seleccionada. Operação cancelada."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Directorio de mapas:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Moldura do mapa"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Marca de tempo (timestamp)"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Criar/reconstruir topologia"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Regressar às definições padrão"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Parâmetros Obrigatórios"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Lista de capas"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Sobrepor raster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Código de projecção:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Volver a muestrear utilizando el vecino más próximo"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Regressão linear"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Coordenadas"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Adicionar camadas selecionadas na árvore de camadas"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Seleccionar directorio de mapas de origen:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Camada"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Estilo"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Adicionar grupo de camadas"
+msgid "Add default"
+msgstr "Padrão"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "ráster"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 #, fuzzy
 msgid "&Connect"
 msgstr "Ligar"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Configuração avançada"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Definições do gestor de camadas"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Nome do mapa vetor de entrada"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Alterar nome"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Adicionar camadas selecionadas na árvore de camadas"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Propriedades Nviz"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Nome para o mapa raster de saída:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Definir Região"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Restringir a resolução para as definições da máquina"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Definir região a partir da região exibida"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Sobrescrever o arquivo existente"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Cargar región:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Adicionar camada de grelha"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Carregando dados..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "não está inicializado"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Fechar tudo"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Fechar tudo"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Consultar datos de vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 #, fuzzy
 msgid "Select vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 #, fuzzy
 msgid "Load"
 msgstr "Carregar"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Configuração"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Regressar a visualização padrão"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr "Valor de regra '%s' inválido. Não posso aplicar tabela de cores."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 #, fuzzy
 msgid "Create new color table for raster map"
 msgstr "Utilitário de interpolação bilinear para camadas de mapas raster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "Mapa 3dcell com valores de referência"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "Intervalo válido"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, fuzzy, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr "Mapa 3dcell com valores de referência"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "suporte da categoria para arquivo de vetores [%s] no mapset [%s] %s"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr ""
 "Coluna da tabela de atributos com valores para interpolar (se camada > 0)"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Consultar datos de vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Seleccionar mapa vectorial"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 #, fuzzy
 msgid "Layer:"
 msgstr "Camada:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 #, fuzzy
 msgid "Attribute column:"
 msgstr "Coluna de atributo:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Coluna de cor RGB:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "Coluna de cor RGB:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Salva todos os quadros"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Series raster para volume"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "Carregar workspace de arquivo"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Carregando dados da tabela de atributos ... "
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Definir tabela de cores"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr "vectorial."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "<%s> criados na base de dados."
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "Por favor aguarde, carregando dados de atributo..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr ""
 "Coluna da tabela de atributos com valores para interpolar (se camada > 0)"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr ""
 "Coluna da tabela de atributos com valores para interpolar (se camada > 0)"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "CAlculador de mapas GRASS %s "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "CAlculador de mapas GRASS %s "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 #, fuzzy
 msgid "mapcalc statement"
 msgstr "Declaração SQL"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 #, fuzzy
 msgid "Operators"
 msgstr "Parámetros"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 #, fuzzy
 msgid "Operands"
 msgstr "Abrir"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 #, fuzzy
 msgid "Expression"
 msgstr "Emissão"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "Gravar workspace para arquivo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "Carregar workspace de arquivo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "dividir"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 #, fuzzy
 msgid "add"
 msgstr "Adicionar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "Subtrair"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "módulo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 #, fuzzy
 msgid "multiply"
 msgstr "[múltiplo]"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "shift da esquerda"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "shift da direita"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 #, fuzzy
 msgid "greater than"
 msgstr "mais curto que"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 #, fuzzy
 msgid "greater than or equal to"
 msgstr "Crear/reconstruir topología"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 #, fuzzy
 msgid "less than"
 msgstr "mais longo que"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "menor ou igual a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "igual a"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "diferente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 #, fuzzy
 msgid "one's complement"
 msgstr "Mostrar comp. extent"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NÃO"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "E bit-a-bit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "OU bit-a-bit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "E lógico"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "E lógico (ignora NULOS)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "OU lógico"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "OU lógico (ignora NULOS)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "Opcional"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "Sobrescrever o arquivo existente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "Sobrescrever o arquivo existente"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 #, fuzzy
 msgid "Insert mapcalc function"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Gerar pontos aleatórios"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "Adicionar mapa criado à árvore de camadas"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Debe introducir una extensión del nombre del mapa para continuar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Debe introducir una extensión del nombre del mapa para continuar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 #, fuzzy
 msgid "Expression file (*)|*"
 msgstr "Emissão"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "Escolha o arquivo GRC para carregar"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' copiado para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Permitir aos arquivos de saída a sobrescrever arquivos existentes"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "Opcional"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 #, fuzzy
 msgid "Extension not defined"
 msgstr "destino mapwin não definido"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Lista de categorías"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Mostrar manual"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Lista de categorías"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "Lista de categorías"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Gestão de projecções"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Eliminar vértice"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "Emissão"
+
+#: ../gui/wxpython/modules/import_export.py:45
+#, fuzzy
+msgid "Multiple import"
+msgstr "Importación de DXF múltiple"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Lista de camadas"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Lista de camadas"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "uma lista longa"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Nombre para el nuevo mapa vectorial:"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+#, fuzzy
+msgid "&Import"
+msgstr "&Importar"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+#, fuzzy
+msgid "Import selected layers"
+msgstr "Importar las capas seleccionadas"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "ráster"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Configuração do tipo de letra"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Añadir las capas importadas al árbol de capas"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+#, fuzzy
+msgid "Add imported layers into layer tree"
+msgstr "Añadir las capas importadas al árbol de capas"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+#, fuzzy
+msgid "&Link"
+msgstr "linha %d: <%s>"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+#, fuzzy
+msgid "Link selected layers"
+msgstr "Modificar camaad seleccionada"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Não é possivel criar um perfil dos mapas raster"
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Importar mapa vectorial"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Importar mapa raster"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Ignorar erros SQL e continuar"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
+
+#: ../gui/wxpython/modules/import_export.py:722
+#, fuzzy
+msgid "Import DXF layers"
+msgstr "Importar camadas DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+#, fuzzy
+msgid "Choose DXF file to import"
+msgstr "Seleccionar archivo DXF a importar"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projecção:"
+
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
+msgid "Name for output GRASS map"
+msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Eliminar vértice"
+msgid "Layers to be reprojected"
+msgstr "Camada a apagar"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "Emissão"
+msgid "Reproject selected layers"
+msgstr "Importar las capas seleccionadas"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Não encontrei biblioteca GRASS-python."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Dados de entrada"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Dataset de pontos:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Coluna numérica:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Krigando"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Nome para o mapa raster de saída:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Exportar também o mapa de variância: "
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Módulo de Krigagem"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Pronto."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Ajuste do variograma"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Plotar/recarregar variograma"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Técnicas de krigagem"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Tamanho do bloco:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Modelo:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Em construção! Funcionalidade não fornecida."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Criar histograma de imagem ou arquivo raster"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Selecionar fonte para o texto do histograma"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 #, fuzzy
 msgid "Set up vector cleaning tools"
 msgstr "Importanto feições do mapa %d..."
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "Digite 'list -f' para"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "Seleccionar dangles"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "Eliminar tabela"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "Alinha rótulos ao longo das linhas"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "Remover camada do mapa"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "As linhas %s do arquivo <%s> da tabela de elipsóide estú inválidas"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "ID de característica:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "Seleccionar mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 #, fuzzy
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 #, fuzzy
 msgid "line"
 msgstr "rhumbline"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "contorno"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "Adicionar centroides"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 #, fuzzy
 msgid "face"
 msgstr "Superfície"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Ferramentas para limpar a topologia de mapas vectoriais."
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Nombre para el nuevo mapa vectorial:"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Seleccionar limiar"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, fuzzy, python-format
 msgid "'%s' not defined"
 msgstr "destino mapwin não definido"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -18101,21 +18697,21 @@ msgid ""
 "%s"
 msgstr "Nenhuma camada de mapa foi selecionada. Operação cancelada."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 #, fuzzy
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Copiar o texto do comando actual para a área de trabalho (clipboard)"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Não foi possível abrir o arquivo <%s>."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, fuzzy, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -18129,189 +18725,184 @@ msgstr ""
 "\n"
 "Número de linhas ignoradas: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, fuzzy, python-format
 msgid " row %d:"
 msgstr "linha %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, fuzzy, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "Tipo da coluna suave (datetime) não é suportado"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Comando terminado"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Detalhes:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, fuzzy, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Tipo de camada de mapa não suportado '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "ERRO: Falha no rendering"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Carregando dados..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Zoom à região pré-definida"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Mapa raster a ser pesquisado"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 #, fuzzy
 msgid "Details:"
 msgstr "Detalhes:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "No se puede crear el mapa vectorial <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Mapa raster a ser pesquisado"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, fuzzy, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "ERRO: Falha no rendering"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Carregando dados..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Render"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Render"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Desconhecido"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Não é possível actualizar registo existente."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Máximo personalizado"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/core/utils.py:558
-#, fuzzy, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Não é possível abirr o arquivo"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Não foi possível abrir o arquivo <%s>."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Duplicar atributos"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -18320,17 +18911,22 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Arquivo não encontrado"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 #, fuzzy
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
@@ -18338,169 +18934,169 @@ msgstr ""
 "Por favor, tenha em atenção que os dados serão deixados num estado "
 "inconsistente e que poderão ser corrompidos/danificados"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 #, fuzzy
 msgid "Command aborted"
 msgstr "Comando cancelado"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 #, fuzzy
 msgid "Command finished"
 msgstr "Comando terminado"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 #, fuzzy
 msgid "Execution failed:"
 msgstr "Falha na execução:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 #, fuzzy
 msgid "Error: "
 msgstr "Erro:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, fuzzy, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Impossível executar o comando: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Quebra de segmento"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Ponto"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 #, fuzzy
 msgid "Collapse all except PERMANENT and current"
 msgstr "Lista todos os monitores (com estado atual)"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 #, fuzzy
 msgid "Collapse all except PERMANENT"
 msgstr "Executar todos os testes de integração"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 #, fuzzy
 msgid "Collapse all except current"
 msgstr "Lista todos os monitores (com estado atual)"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Colapsar todos"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Expandir todos"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Mostrar lo seleccionado"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Listar tabelas"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Zoom à região guardada"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "Norte"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "caixa"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "esfera"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cubo"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "diamante"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "ASTER"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "Histograma"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -18511,12 +19107,12 @@ msgstr ""
 "       Detalhes: %(detail)s\n"
 "       Linha: '%(line)s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "Não é possível actualizar registo existente."
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, fuzzy, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -18524,313 +19120,344 @@ msgid ""
 "Details: %(detail)s"
 msgstr "Falha ao obter nome do soquete para o monitor <%s>."
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 #, fuzzy
 msgid "Unable to set "
 msgstr "não está inicializado"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "No se puede analizar la orden %s"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 #, fuzzy
 msgid "Define GRASS Database and Location Name"
 msgstr "Definir base de datos de GRASS y nombre de localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 #, fuzzy
 msgid "GIS Data Directory:"
 msgstr "Directorio de dados de SIG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 #, fuzzy
 msgid "Project Location"
 msgstr "Localização de projecto"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Escolher directoria para dados GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Nome da location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "Location seleccionada inválida"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 #, fuzzy
 msgid "Choose GRASS data directory:"
 msgstr "Seleccione a directoria de dados GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 #, fuzzy
 msgid "Location already exists in GRASS Database."
 msgstr "La localización ya existe en la base de datos de GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 #, fuzzy
 msgid "Unable to create location"
 msgstr "Não é possível criar a location"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 #, fuzzy
 msgid "Choose method for creating a new location"
 msgstr "Seleccione el método para crear una nueva localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 #, fuzzy
 msgid "Select EPSG code of spatial reference system"
 msgstr "Seleccionar código EPSG do sistema de coordenadas"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 #, fuzzy
 msgid "Select coordinate system parameters from a list"
 msgstr "Seleccione o sistema de coordenadas"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Escolha apenas um sistema de coordenadas para posicionamento"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Simples"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Avançado"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 #, fuzzy
 msgid "Choose projection"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 #, fuzzy
 msgid "Code"
 msgstr "Código"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 #, fuzzy
 msgid "Projection code:"
 msgstr "Código de projecção:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 #, fuzzy
 msgid "Search in description:"
 msgstr "Procurar em descrição:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, fuzzy, python-format
 msgid "Unable to read list: %s"
 msgstr "No é possível ler a lista: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 #, fuzzy
 msgid "Choose projection parameters"
 msgstr "Seleccionar projecção"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 #, fuzzy
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Seleccionar datum com elipsóide associada"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 #, fuzzy
 msgid "Datum with associated ellipsoid"
 msgstr "Seleccionar datum com elipsóide associada"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 #, fuzzy
 msgid "Ellipsoid only"
 msgstr "Elipsóide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, fuzzy, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Introduzir parâmetro para "
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 #, fuzzy
 msgid "Specify geodetic datum"
 msgstr "Especificar datum geodésico"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 #, fuzzy
 msgid "Ellipsoid"
 msgstr "Elipsóide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 #, fuzzy
 msgid "Datum code:"
 msgstr "Código do datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 #, fuzzy
 msgid "Specify ellipsoid"
 msgstr "Especificar elipsoide"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Base de dados"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 #, fuzzy
 msgid "Ellipsoid code:"
 msgstr "Código da elipsoide:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 #, fuzzy
 msgid "Select georeferenced file"
 msgstr "Seleccionar arquivo georreferenciado"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 #, fuzzy
 msgid "Georeferenced file:"
 msgstr "Arquivo georreferenciado:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Arquivo WKT:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 #, fuzzy
 msgid "Choose EPSG Code"
 msgstr "Seleccionar código EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 #, fuzzy
 msgid "Path to the EPSG-codes file:"
 msgstr "Caminho para o arquivo de códigos EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 #, fuzzy
 msgid "Choose EPSG codes file"
 msgstr "Seleccionar arquivo de códigos EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, fuzzy, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Seleccionar código EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Caminho para o arquivo de códigos EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Código EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Seleccionar arquivo de códigos EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Não é possível ler os códigos EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 #, fuzzy
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 "Seleccionar método para especificar los parámetros de georreferenciación"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 #, fuzzy
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Introducir cadena de parámetros PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 #, fuzzy
 msgid "Datum transform is required."
 msgstr "É necessário uma transformação do datum"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 #, fuzzy
 msgid "GRASS Database:"
 msgstr "Base de dados GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 #, fuzzy
 msgid "Location Name:"
 msgstr "Nome da location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Nome da location:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 #, fuzzy
 msgid "Projection:"
 msgstr "Projecção:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Definição PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, fuzzy, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Pretende criar uma GRASS location <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 #, fuzzy
 msgid "Create new location?"
 msgstr "Criar nova location?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 #, fuzzy
 msgid "Define new GRASS Location"
 msgstr "Definir nova location de GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, fuzzy, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -18838,280 +19465,285 @@ msgid ""
 "Details: %(err)s"
 msgstr "Não é possível criar nova location. Location <%s> não foi criada"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 #, fuzzy
 msgid "Location wizard canceled. Location not created."
 msgstr "Foi cancelado o assistente de location. Location não foi criado."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 #, fuzzy
 msgid "Unable to create new location"
 msgstr "No se puede crear la nueva localización"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 #, fuzzy
 msgid "New GIS data directory"
 msgstr "Directorio de datos de SIG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 #, fuzzy
 msgid "EPSG code missing."
 msgstr "Código EPSG em falta."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Código EPSG em falta."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "Arquivo não encontrado"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 #, fuzzy
 msgid "Set default region extent and resolution"
 msgstr "Establecer la extensión y resolución de la región predeterminada"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 #, fuzzy
 msgid "&Set region"
 msgstr "&Definir região"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 #, fuzzy
 msgid "Invalid location selected."
 msgstr "Location seleccionada inválida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 #, fuzzy
 msgid "Invalid region"
 msgstr "Região inválida"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 #, fuzzy
 msgid "Click here to show 3D settings"
 msgstr "Clique aqui para visualizar definições 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 #, fuzzy
 msgid "Click here to hide 3D settings"
 msgstr "Clique aqui para esconder as definições 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, fuzzy, python-format
 msgid "Rows: %d"
 msgstr "Linhas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, fuzzy, python-format
 msgid "Cols: %d"
 msgstr "Colunas: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, fuzzy, python-format
 msgid "Cells: %d"
 msgstr "Células: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, fuzzy, python-format
 msgid "Depth: %d"
 msgstr "Profundidade: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, fuzzy, python-format
 msgid "3D Cells: %d"
 msgstr "Células 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 #, fuzzy
 msgid "T-B resolution"
 msgstr "Resolução Sup-Inf"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 #, fuzzy
 msgid "North"
 msgstr "Norte"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 #, fuzzy
 msgid "West"
 msgstr "Oeste"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 #, fuzzy
 msgid "East"
 msgstr "Este"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 #, fuzzy
 msgid "South"
 msgstr "Sul"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 #, fuzzy
 msgid "N-S resolution"
 msgstr "Resolução N-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 #, fuzzy
 msgid "E-W resolution"
 msgstr "Resolução E-W"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, fuzzy, python-format
 msgid "Invalid value: %s"
 msgstr "Valor não válido: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 #, fuzzy
 msgid "Select datum transformation"
 msgstr "Seleccionar transformación del datum"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 #, fuzzy
 msgid "Select from list of datum transformations"
 msgstr "Lista de transformaciones del datum"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 #, fuzzy
 msgid "Easting"
 msgstr "Este"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "Norte"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 #, fuzzy
 msgid "Elevation"
 msgstr "Viés (bias) de elevação"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Nome da coluna"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr ""
 "Programa de generación de superficies a partir de contornos rasterizados."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Gerir cores de imagens"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Distância ao longo do transecto"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Distância ao longo do transecto"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "Sobre a superfície"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 #, fuzzy
 msgid "Loading raster map"
 msgstr "Carregando mapas raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 #, fuzzy
 msgid "Loading 3d raster map"
 msgstr "Carregando 3º mapa raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 #, fuzzy
 msgid "failed"
 msgstr "falha"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, fuzzy, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Tipod e camada '%s' não suportado"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 #, fuzzy
 msgid "Unable to unload raster map"
 msgstr "Não é possível carregar mapa raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 #, fuzzy
 msgid "Unable to unload 3d raster map"
 msgstr "Mapa 3dcell com valores de referência"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3º mapa raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, fuzzy, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Nome da coluna (tipo deve ser numérico)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, fuzzy, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Não consegui processar áreas do mapa vetorial <%s>"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, fuzzy, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Nome da coluna (tipo deve ser numérico)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, fuzzy, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Registro no banco de dados para categoria %d não encontrado"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, fuzzy, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Não é possível definir as propriedades da camada de dados (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, fuzzy, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -19119,855 +19751,855 @@ msgid ""
 "%s"
 msgstr "Falha abrindo arquivo dig de entrada."
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 #, fuzzy
 msgid "constant#"
 msgstr "constante"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 #, fuzzy
 msgid "View"
 msgstr "Visualizar"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "Analisar"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "Quantização"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 #, fuzzy
 msgid "Perspective:"
 msgstr "Proyección:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 #, fuzzy
 msgid "Z-exag:"
 msgstr "Z-exag:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 #, fuzzy
 msgid "Look:"
 msgstr "Visualizar:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "esfera"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "Render"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 #, fuzzy
 msgid "top"
 msgstr "Superior"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "Restabelecer"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 #, fuzzy
 msgid "Reset to default view"
 msgstr "Regressar a visualização padrão"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Código"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "Renomear mapset"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "Erro no formato de entrada"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 #, fuzzy
 msgid "Surface"
 msgstr "Superfície"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "Superficies de custo"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 #, fuzzy
 msgid "Vector"
 msgstr "Vector"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 #, fuzzy
 msgid "Lighting"
 msgstr "Destacar"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 #, fuzzy
 msgid "Mode:"
 msgstr "Modo:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 #, fuzzy
 msgid "both"
 msgstr "ambos"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 #, fuzzy
 msgid "Shading:"
 msgstr "Sombreamento:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 #, fuzzy
 msgid "flat"
 msgstr "plano"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 #, fuzzy
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 #, fuzzy
 msgid "Set to all"
 msgstr "Seleccionar todo"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 #, fuzzy
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Transforma todos os valores de z para base=0"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "Anchura de línea"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Estilo"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 #, fuzzy
 msgid "wire"
 msgstr "arame"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 #, fuzzy
 msgid "surface"
 msgstr "Superfície"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "Fino:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 #, fuzzy
 msgid "Surface attributes"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 #, fuzzy
 msgid "Transparency"
 msgstr "Transparência"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 #, fuzzy
 msgid "map"
 msgstr "mapa"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 #, fuzzy
 msgid "unset"
 msgstr "Não-definido"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 #, fuzzy
 msgid "constant"
 msgstr "constante"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 #, fuzzy
 msgid "Reset"
 msgstr "Restabelecer"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "Regressar a visualização padrão"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "Cor:"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 #, fuzzy
 msgid "Horizontal X:"
 msgstr "Ângulo do horizonte"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 #, fuzzy
 msgid "Horizontal Y:"
 msgstr "Ângulo do horizonte"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "Volumes"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "Transparência"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 #, fuzzy
 msgid "Show vector lines"
 msgstr "Tipo de vetor desconhecido"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 #, fuzzy
 msgid "Vector lines"
 msgstr "Linhas vectoriais"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "linha %d: <%s>"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 #, fuzzy
 msgid "width:"
 msgstr "Largura:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 #, fuzzy
 msgid "color:"
 msgstr "Cor:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 #, fuzzy
 msgid "use color for thematic mapping"
 msgstr "Classifica dados de atributos, e.g. para \"mapping\" temático"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 #, fuzzy
 msgid "use width for thematic mapping"
 msgstr "Classifica dados de atributos, e.g. para \"mapping\" temático"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Estabelecer opções"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "Sobre a superfície"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 #, fuzzy
 msgid "Height above surface:"
 msgstr "Altura sobre superfície:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 #, fuzzy
 msgid "Show vector points"
 msgstr "%d pontos além do limite"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 #, fuzzy
 msgid "Vector points"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 #, fuzzy
 msgid "Icon:"
 msgstr "Tamanho do ícone"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 #, fuzzy
 msgid "use size for thematic mapping"
 msgstr "Classifica dados de atributos, e.g. para \"mapping\" temático"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 #, fuzzy
 msgid "isosurfaces"
 msgstr "Isosuperfícies"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 #, fuzzy
 msgid "Resolution:"
 msgstr "Resolução:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 #, fuzzy
 msgid "List of isosurfaces"
 msgstr "Lista de isosuperfícies"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "Mostrar linhas"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "Seleccionar localización de origen:"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 #, fuzzy
 msgid "Brightness:"
 msgstr "Riqueza"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "usar| coordenada X"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Adicionar barra de escala"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 #, fuzzy
 msgid "Isosurface attributes"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "Cambiar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Duplicar atributos"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 #, fuzzy
 msgid "W"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 #, fuzzy
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 #, fuzzy
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 #, fuzzy
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 #, fuzzy
 msgid "SW"
 msgstr "O"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 #, fuzzy
 msgid "Level"
 msgstr "Nível"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "uma lista longa"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Adicionar barra de escala"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "Mapa vectorial <%s> é 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "Mapa vectorial <%s> é 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "Sobre a superfície"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "Gerir"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Norte"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Sul"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Detectar fronteiras/bordas"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Norte"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Altura:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Este"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Inferior"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Mapa <%s> não encontrado"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "ráster"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "Aplicar filtro somente para valores zerados"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "(valor)"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "(passo):"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 #, fuzzy
 msgid "Position:"
 msgstr "Posição:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr ":"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 #, fuzzy
 msgid "Twist:"
 msgstr "Torcer:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "Altura"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr ":"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "    3:  Onda de cores variadas\n"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 #, fuzzy
 msgid "Marker:"
 msgstr "Marcador:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "G_spawn: não consegui abrir o arquivo %s"
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -19977,7 +20609,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -19989,23 +20621,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -20013,7 +20645,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -20024,31 +20656,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -20060,68 +20692,68 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "EmbedGivenNulls: tipo errado de dados!"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Barra de ferramentas de georrectificação"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "%d raster%s, %d vetor%s\n"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Renomear nome da coluna"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Mostrar grelha"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Valor da categoria"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Exportar mapa raster"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Definir opacidade <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -20131,216 +20763,231 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Zoom para a extensão da região guardada"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Não foi seleccionada nenhuma camada de mapa para consulta."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr ""
 "Elimina archivos de elementos de bases de datos del directorio de mapas "
 "actual del usuario."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "El archivo de región <%s> ya existe. ¿Quiere sobrescribirlo?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Novo mapa vazio foi criado."
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Limpar o GCP seleccionado"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Seleccionar cor"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Selecionar trajeto interativamente"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Configuração dos eixos"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Seleccionar mapa raster 3 (opcional):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "vectorial."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Adicionar mapa raster"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Seleccionar mapa raster para o perfil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Classificar imagem"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Consultar mapa(s) raster/vetorial selecionados"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr ""
 "Pretende remover a(s) camada(s) de mapa selecionadas da árvore de camadas?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Adicionar novo vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Cambiar nombre de la localización seleccionada"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Mover vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Eliminar vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Eliminar vértice"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Adicionar etiquetas"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Cambiar nombre del directorio de mapas seleccionado"
 
 #, fuzzy
+#~ msgid "Unsupported units"
+#~ msgstr "Tipod e camada '%s' não suportado"
+
+#~ msgid "Map layers"
+#~ msgstr "Camadas do mapa"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "Buscar módulo"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Pretende criar uma GRASS location <%s>?"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "Mapa <%s> não encontrado"
 
@@ -20353,6 +21000,26 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Sair do GUI"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Região inválida"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Barra de ferramentas do digitalizador vectorial"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Validando o modelo..."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Alterar nome"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Copiar tabela"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Lista de camadas"
 
@@ -20369,19 +21036,28 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Estatística Univariada de raster"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "Opcional"
+#~ msgid "Load settings:"
+#~ msgstr "Mostrar configuração"
 
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Adiciona condicional (se/então) ao modelo"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Importação de vectores do antigo GRASS"
 
-#, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Añadir las capas importadas al árbol de capas"
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Importação de vectores do antigo GRASS (todos os mapas)"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Importa todas as versões antigas de mapas vetoriais do GRASS no mapset "
+#~ "atual para o formato atual."
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Añadir las capas importadas al árbol de capas"
+#~ msgid "GPS data import"
+#~ msgstr "Importação de GPS de GPSBabel"
+
+#~ msgid "GEOnet import"
+#~ msgstr "Importação de GEOnet"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -20406,30 +21082,6 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgid "Common export formats using OGR"
 #~ msgstr "Converter coordenadas"
 
-#, fuzzy
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "mostrar"
-
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Importação de vectores do antigo GRASS"
-
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Importação de vectores do antigo GRASS (todos os mapas)"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Importa todas as versões antigas de mapas vetoriais do GRASS no mapset "
-#~ "atual para o formato atual."
-
-#, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Importação de GPS de GPSBabel"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Importação de GEOnet"
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr "IDW para pontos raster (método alternativo para pontos esparsos)"
 
@@ -20442,12 +21094,24 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Comparação de padrões de bits"
 
 #, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Gestor de tabela de atributos"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Seleccionar directorio de mapas de origen:"
+
+#, fuzzy
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "mostrar"
+
+#, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "Nome da coluna (tipo deve ser numérico)"
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "Volumes"
+#~ msgid "Add default servers"
+#~ msgstr "Adicionar grupo de camadas"
 
 #, fuzzy
 #~ msgid "Choose project location and mapset"
@@ -20497,10 +21161,6 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Iniciar GRASS!"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "Criar mapset"
-
-#, fuzzy
 #~ msgid "&Location wizard"
 #~ msgstr "Assistente do location"
 
@@ -20524,14 +21184,29 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgstr "Aviso"
 
 #, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "uso: %s arquivo de elementos locação mapset."
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Desenvolver mapa raster"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Añadir las capas importadas al árbol de capas"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Añadir las capas importadas al árbol de capas"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importa versões antigas de mapas vetoriais do GRASS."
 
 #, fuzzy
 #~ msgid "Vector to volume"
 #~ msgstr "Vectorial para volume"
 
 #, fuzzy
+#~ msgid "Sites to vector"
+#~ msgstr "Pontos ('sites' ) para vectorial"
+
+#, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "Calculador de mapa raster 3D"
 
@@ -20559,12 +21234,9 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ msgid "Voxel statistics"
 #~ msgstr "Estatísticas gerais"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importa versões antigas de mapas vetoriais do GRASS."
-
 #, fuzzy
-#~ msgid "Sites to vector"
-#~ msgstr "Pontos ('sites' ) para vectorial"
+#~ msgid "Volume"
+#~ msgstr "Volumes"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -20609,5 +21281,5 @@ msgstr "Cambiar nombre del directorio de mapas seleccionado"
 #~ "ráster."
 
 #, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Gestor de tabela de atributos"
+#~ msgid "Digitize"
+#~ msgstr "Digitalizar"
diff --git a/locale/po/grasswxpy_ro.po b/locale/po/grasswxpy_ro.po
index 6d9d10f..348b260 100644
--- a/locale/po/grasswxpy_ro.po
+++ b/locale/po/grasswxpy_ro.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_ro\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2013-07-17 21:26+0200\n"
 "Last-Translator: Andreea Marin <andreea.marin09 yahoo.com>\n"
 "Language-Team: GRASS Translation Team <grass-translations at lists.osgeo.org>\n"
@@ -17,52 +17,52 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.5.5\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "Alegeți directorul de date GIS:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Selectează mapset în locația GRASS"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "Selectează locație și mapset"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Introduceți sesiunea GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "&Navigator"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -70,11 +70,11 @@ msgstr ""
 "în locația selectată"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 #, fuzzy
 msgid ""
 "Create a new location using location wizard. After location is created "
@@ -84,135 +84,135 @@ msgstr ""
 "GRASS va porni."
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Redenumește locația selectată"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Șterge"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Șterge locație selectată"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Redenumește"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Redenumește mapsetul selectat"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Șterge"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Șterge mapset selectat"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS Gestionare Strat"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Introduceți sesiunea GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Eroare"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 "Nu se poate stabili baza de date GRASS. Verificați setările de localizare."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "EROARE: Locația <%s> nu a fost găsită"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "EROARE: Mapset <%s> nu a fost găsit"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, fuzzy, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "Linie invalidă în fișierul GISRC (%(e)s):%(l)s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Eroare:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, fuzzy, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 "Doriți să importați sursa datei<%(name)s> pentru crearea locației? Regiunea "
 "va fi setată implicit pentru a se potrivi cu harta importată."
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Importă data"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "Doriți să creați un mapset nou?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Crează mapset nou"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Locația <%s> creată"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "Doriți să setați extinderea regiunii și rezoluția acum?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "Importul datelor vectoriale <%(name)s> a eșuat."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, fuzzy, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
@@ -221,7 +221,7 @@ msgstr ""
 "Doriți să importați sursa datei<%(name)s> pentru crearea locației? Regiunea "
 "va fi setată implicit pentru a se potrivi cu harta importată."
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -231,7 +231,7 @@ msgstr ""
 "\n"
 "Acest mapset nu poate fi redenumit."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -242,12 +242,12 @@ msgstr ""
 "\n"
 "Introduceți un nume nou:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Mesaj"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -258,7 +258,7 @@ msgstr ""
 "\n"
 "Mapset-ul <%s> există deja în locație."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -269,7 +269,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -280,7 +280,7 @@ msgstr ""
 "\n"
 "Locația <%s> există deja în baza de date GRASS."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -291,7 +291,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -301,7 +301,7 @@ msgstr ""
 "\n"
 "Acest mapset nu poate fi șters."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -314,11 +314,11 @@ msgstr ""
 "\n"
 "TOATE HĂRȚILE incluse în acest mapset vor fi ȘTERSE DEFINITIV!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Nu s-a putut șterge mapset"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -329,42 +329,42 @@ msgstr ""
 "\n"
 " TOATE HĂRȚILE incluse în acestă locație vor fi ȘTERSE DEFINITIV!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Nu s-a putut șterge locația"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 "Nu se poate stabili baza de date GRASS. Verificați setările de localizare."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 msgid "Choose GIS Data Directory"
 msgstr "Alege directorul de lucru:"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Introduceți nume pentru mapset nou:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Mapset <%s> există deja."
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -373,17 +373,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Redenumește mapsetul selectat"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Nu s-a putut crea mapset nou: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -402,11 +402,11 @@ msgstr ""
 "Doriți să încercați să eliminați .gislock (notă: pentru această operațiune "
 "aveți nevoie de permisiune) și să continuați?"
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr "Blocare fișier găsit"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -418,7 +418,7 @@ msgstr ""
 "Dacă rulați o altă sesiune de GRASS, aceasta vă poate afecta datele. Uitați-"
 "vă în gestionează procesor pentru a fi siguri..."
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -429,7 +429,7 @@ msgstr ""
 "\n"
 "Detalii: %(reason)s"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
@@ -438,11 +438,11 @@ msgstr ""
 "Nume <%(name)s> nu este un nume valid pentru locație și mapset. Vă rugăm să "
 "folosiți doar caractere ASCII fără %(chars)s și spații."
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 msgid "Invalid name"
 msgstr "Nume invalid"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -471,191 +471,191 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Bara de instrumente pentru hartă"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Bara de instrumente a instrumentelor"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Bara de instrumente diverse"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Eroare vectorizare"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Printează afișarea"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Afișează ținta"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 #, fuzzy
 msgid "Adjust Training Area Display to Preview Display"
 msgstr "Reglați destinația de afișare la afișarea sursă"
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 #, fuzzy
 msgid "Adjust Preview display to Training Area Display"
 msgstr "Reglați sursa de afișare la afișarea destinației"
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Rezoluția de afișare"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Rezoluția de afișare"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 #, fuzzy
 msgid "Import vector map"
 msgstr "Exportă hartă vectorială"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Nu se poate crea harta vectorială <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Nu s-a putut deschide harta vectorială <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Nu s-a putut deschide harta vectorială <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Nu se poate crea harta vectorială <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Nimic de extras."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Nu se poate crea harta vectorială <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Analiză"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Nici un grup selectat."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Fișierul există deja"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Nici un layer selectat. Operațiune anulată."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Nici un layer selectat. Operațiune anulată."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Citirea id-ului trăsăturii %d a eșuat. Operațiune anulată."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histogramă"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "puncte vectoriale"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -664,610 +664,611 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Nici o hartă selectată!"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Nici un grup selectat."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Harta <%s> nu a fost găsită."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Harta <%s> nu a fost găsită."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr "Harta raster <%s> nu este găsită"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, python-format
 msgid "Vector map <%s> not found"
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Încărcarea hărții raster"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Încărcarea hărții raster"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Selectează grup:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Crează/editează grup..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Crează sau editează grupurile de imagini"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Crează sau editează grupurile de imagini"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Crează sau editează grupurile de imagini"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Harta <%s> nu a fost găsită."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Nici o modificare nu a fost aplicată în grup <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Numele mapset-ului"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "Numele hărții raster:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "Numele hărții vectoriale:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Clasifică imaginea"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Numele coloanei"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Culoare"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Zoom la harta selectată"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Salvează expresia ca fișier"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Introduceți nume pentru mapset nou:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Importă fișier binar"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Exportă ca imagine"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Nume pentru noua hartă vectorială:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Crează tabela de atribute"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Exportă tabela de atribute în formate diferite."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "Harta vectorială <%s> adăugată"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Modifică nivelul opacității"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Salvează expresia ca fișier"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Șterge mapset selectat"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Exportă hartă vectorială"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Importă/leago date raster sau vector"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "Adaugă un strat RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Atenție"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Previzualizare"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Zoom la harta selectată"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "Hartă raster 3D"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "Fereastra de vizualizare GRASS GIS:"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Bara de instrumente pentru hartă"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr "Bara de instrumente diverse"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Harta <%s> nu a fost găsită."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Harta <%s> nu a fost găsită."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Nimic de redat (hartă goală). Operațiune anulată."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Alege un nume de fișier pentru a salva imaginea (nu este nevoie de adăugarea "
 "unui extensii)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "Nici un raster sau vector selectat pentru interogare."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Selectează hartă raster:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Numele hărții raster:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Numele hărții raster:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Comutați la noua locație?"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Simplu"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Închide"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Numărul de categorie (coloana %s) lipsește."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Setările hărții"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Mod grosier:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Mod grosier:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Culoare:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Dimensiunea formei"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "Lățimea liniei:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Dimensiune:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr "Instrumente"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Interoghează raster/vector"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Interoghează rasterul/vectorul selectat"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Salvează model"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Alegeți codul EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Orientare"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Gestionează puncte de control"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "Lista punctelor de control"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 msgid "Source Display"
 msgstr "Afișează sursa"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 msgid "Target Display"
 msgstr "Afișează ținta"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr "Afișează bara de instrumente pentru punctele de control"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "Afișează bara de instrumente pentru gestionarea punctelor de control"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Pagina de configurare"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Printează previzualizare"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Printează afișarea"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Mărește la regiunea de calcul (stabilește cu g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Mărește la regiunea implicită"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Mărește la regiunea salvată"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Salvează geometria afișării la regiunea numită"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "Du-te la Nr. GCP"
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr "Interval valid:"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "Eroare RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "Înainte: %(forw)s, Înapoi: %(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Configurare pentru georectificare"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Configurarea pentru georectificare a fost anulată."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Selectează tipul hărții și locația/mapset"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Tipul hărții pentru georectifiacre"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vector"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Selectează locația sursă:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Selectează mapsetul sursă:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Trebuie să selectați o locație validă înainte de a selecta un mapset"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "Trebuie să selectați o locație validă și un mapset pentru a continua"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Selectează imaginea/grupul de hărți pentru georectificare"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Selectează grup:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Crează grup, în cazul în care nu există"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Adaugă hartă vectorială la grup..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Extensie pentru hărțile de ieșire:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Trebuie să selectați o imagine/grup de hărți pentru a continua"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Trenuie să introduceți numele extensiei hărții pentru a continua"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Selectează hărți pentru a afișa crearea punctului de control (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr "Selectează harta sursă pentru a afișa:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Selectează harta destinație pentru a afișa:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Selectează harta destinație pentru a afișa:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr "Trebuie să selectați o hartă sursă pentru a continua"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
@@ -1276,28 +1277,28 @@ msgstr ""
 "Nici o hartă în grupul selectat.p <%s>.\n"
 "Vă rugăm să editați grupul sau să selectați un alt grup."
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Gestionarea punctelor de control"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Cel puțin %d puncte de control necesare. Operațiune anulată."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr "sursa"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "destinație"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 msgid "Set GCP coordinates"
 msgstr "Setează coordonatele punctelor de control"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1310,28 +1311,28 @@ msgstr ""
 "Est: %(coor0)s \n"
 "Nord: %(coor1)s "
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Scrierea fișierului PUNCTE a eșuat"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Fișierul PUNCTE salvat pentru grupul <%s>"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr "fereastra sursă nu este definită"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr "fereastra destinație nu este definită"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Citirea fișierului POINTS a eșuat"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1346,38 +1347,38 @@ msgstr ""
 "6+puncte pentru a doua transformare, and\n"
 "10+puncte pentru a treia transformare."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr "Rectificarea imaginii, vă rugăm să așteptați..."
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Transformarea <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Rectificarea imaginii, vă rugăm să așteptați..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Georectificare hărții vectoriale <%s> a eșuat"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 msgid "GCP Manager settings"
 msgstr "Setări Gestionare GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "Închide Gestionare GCP"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr "Salvați punctele de control?"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 #, fuzzy
 msgid ""
 "Could not calculate RMS Error.\n"
@@ -1386,7 +1387,7 @@ msgstr ""
 "Nu s-a putut calcula eroarea RMS.\n"
 "Posibilă eroare cu g.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 #, fuzzy
 msgid ""
 "Could not calculate new extends.\n"
@@ -1395,118 +1396,118 @@ msgstr ""
 "Nu s-a putut calcula noua extindere.\n"
 "Posibilă eroare cu g.transform."
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr "Reglați sursa de afișare la afișarea destinației"
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr "Reglați destinația de afișare la afișarea sursă"
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "utilizează"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 msgid "source E"
 msgstr "sursa E"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 msgid "source N"
 msgstr "sursa N"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr "destinația E"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr "destinația N"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Eroare înainte"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Eroare înapoi"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Invalidă valoarea de coordonată. Operațiune anulată."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Crează un grup de hartă vectorială"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Selectează harta vectorială pentru a adauga la grup:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Editați GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr "Nr. puncte de control"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 msgid "source E:"
 msgstr "sursa E:"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "destinația E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 msgid "source N:"
 msgstr "sursa N:"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "destinația N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Aplică modificările pentru sesiunea curentă"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Aplică și salvează modificările la setările fișierului utilizatorului "
 "(implicit pentru sesiunea viitoare)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Închide caseta de dialog"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Simbologie"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr "Evidențiează cea mai mare eroare RMS numai"
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr "Evidențiează eroara RMS  > M + SD * factor:"
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
@@ -1516,64 +1517,64 @@ msgstr ""
 "media + deviația standard * factor dat. \n"
 "Valorile recomandate pentru acest factor sunt între 1 și 2."
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Setări simbol"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr "Culoare pentru cea mai mare eroare RMS:"
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr "Culoare pentru GCP selectate:"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr "Culoare pentru GCP-urile neutilizate:"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr "Arată GCP-urile neutilizate"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "Dimensiune simbol:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr "Rectificare"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 msgid "Select rectification order"
 msgstr "Selectați pentru rectificare"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "prima transformare"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "a doua transformare"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "a treia transformare"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 msgid "Select interpolation method:"
 msgstr "Selectați metoda de interpolare:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "decupează regiunea de calcul în funcție de locație"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr "Factorul de prag RMS trebuie să fie > 0"
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
@@ -1581,39 +1582,39 @@ msgstr ""
 "Factorul de prag RMS este < 1\n"
 "Prea multe puncte ar putea fi evidențiate"
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Setările Gestionează GCP salvate ca fișier '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Afișează manual pentru vectorizare"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Vectorizarea nu este disponibilă"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Noua hartă vectorială <%s> a fost creată"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Nu se poate crea harta vectorială <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1624,261 +1625,261 @@ msgstr ""
 "necesară pentru vectorizare. Doriți să reconstruiți topologia (va lua ceva "
 "timp) și să deschideți harta vectorială pentru editare?"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr "Lipsește topologia"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Actualizează categorii"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Nici o hartă vectorială selectată pentru editare."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 "Nimic de făcut. Alege cel mai apropiat instrument de pe bara pentru "
 "vectorizare."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 #, fuzzy
 msgid "Z bulk-labeling dialog"
 msgstr "Caseta de dialog pentru etichetarea altitudinii"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Setările vectorizării"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Aplică modificările pentru această sesiune"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 "Închide caseta de dialog și salvează modificările din fișierul de setări"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Închideți caseta de dialog și ignorați modificările"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "General"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Afișare"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Lățimea liniei"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Snapping"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Aplică snapping la prag"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr "pixelii ecranului"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr "unitățile hărții"
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Aplică snap la vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Snapping pentru prag este %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Selectează trăsăturile vectoriale"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Selectează prag"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 "Selectează doar trăsăturile din interiorul casetei de încadrare de selecție"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 "Implicit sunt selectate toate trăsăturile casetei de încadrare selectată "
 "care se suprapun"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Caută dublurile"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Vectorizează o nouă linie/limită"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Întrerupe liniile la intersecție"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Digitizează"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Salvează modificările"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Salvează modificările la ieșire"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Instrument de interogare"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Alege instrument de interogare"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Selectați după casetă"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "lungime"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Selectează linii"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "mai scurt de"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "mai lung de"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "linie deplasată"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Selectează linie deplasată"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Atribute"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Vectorizează o nouă trăsătură"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Adaugă înregistrare nouă în tabel"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Strat"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Categorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Mod"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Următorul pentru a utiliza"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Număr de categorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Mod de categorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Intrare manual"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Nici o categorie"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Șterge trăsătura existentă"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Șterge înregistrare din tabel"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 msgid "Geometry attributes"
 msgstr "Atributele geometriei"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "areal"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 msgid "perimeter"
 msgstr "perimetru"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
@@ -1886,111 +1887,111 @@ msgstr ""
 "Notă: Aceste setări sunt stocate în spațiul de lucru, nu în preferințele "
 "pentru vectorizare."
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 msgid "Digitize new line segment"
 msgstr "Vectorizează un nou segment de linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 msgid "Digitize new line/boundary"
 msgstr "Vectorizează o nouă linie/limită"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Luminozitate"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Luminozitate (dubluri)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Punct"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Linie"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Limită (nici un areal)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Limită (un singur areal)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Limită (două areale)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Centroid (în areal)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Centroid (în afara arealului)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Centroid (dublu în areal)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Nod (o linie)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Nod (două linie)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Areal (limită închisă+ centroid)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Direcție"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Snapping dezactivat"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "Snapping pentru prag este %(value).1f %(units)s (bazat pe rezoluția de "
 "calcul)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Parametrii vectorizării salvați în fișierul <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr "Eroare vectorizare"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Nu s-a putut deschide harta vectorială <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr "Nici o hartă vectorială deschisă pentru editare."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr "Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1998,23 +1999,23 @@ msgid ""
 "Reason: %s"
 msgstr "Scrierea unei trăsături noi a eșuat. Opearțiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Citirea id-ului trăsăturii %d a eșuat. Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Legătura bazei de date %d nu este disponibilă. Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 "Nu s-a putut deschide driver-ul bazei de date <%s>. Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
@@ -2022,57 +2023,57 @@ msgstr ""
 "Nu s-a putut deschide baza de date <%(db)s> cu driver-ul <%(driver)s>. "
 "Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Nu s-a putut executa interogarea SQL '%s'. Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Id-ul trăsăturii  %d este marcat ca inactiv. Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Tip de trăsătură nesuportat '%d'. Operațiunea este anulată."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Tip de trăsătură necunoscut '%s'"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 msgid "Not enough points for line"
 msgstr "Nu sunt suficiente puncte pentru linie"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Listă de categorii - click dreapta pentru a șterge"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Adaugă categorie nouă"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Aplică modificările"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Ignoră modificările și închide caseta de dialog"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Aplică modificările și închide caseta de dialog"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Trăsătură id:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2083,258 +2084,258 @@ msgstr ""
 "Numărul de strat și de categorie trebuie să fie integer.\n"
 "Numărul de strat trebuie să fie mai mare decât zero."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Ștergere selectată"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Șterge tot"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Reîncarcă"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Nu s-a putut actualiza harta vectorială."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d linii selectate pentru etichetarea altitudinii"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Setează valoare"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Valoare de pornire"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Pas"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Lista dublurilor"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Id trăsătură"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Strat (Categorii)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Vectorizează punct nou"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Stânga: punct nou"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Vectorizează linie nouă"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Stânga: punct nou; Ctrl+Left: anulează ultimul punct; Dreapta: închide linie"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Vectorizează limită nouă"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Vectorizează centroid nou"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr ""
 "Vectorizează un areal nou (crează o limită fără categori și un centroid cu "
 "categorie)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Construiește polinii din linii sau limite."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Stânga: Selectează; Ctrl+Left: Deselectează; Dreapta: Confirmă"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Aplică snap la liniile/limitele selectate (doar la noduri)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Șterge înregistrarea selectată"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Afișează/actualizează atributele"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Stânga: Selectează"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Afișează/actualizează categorii"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Revine la liniile/limitele selectate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Aplică snap la liniile/limitele selectate (doar la noduri)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Mută vertex"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Redenumește mapsetul selectat"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "Închide vectorizarea"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "Închide vectorizarea și salvează modificările"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 msgid "Vector Digitizer manual"
 msgstr "Manual pentru vectorizare"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 msgid "Show Vector Digitizer manual"
 msgstr "Afișează manual pentru vectorizare"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Instrumente suplimentare (copiază, întoarce, conectează, etc.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Înapoi"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Inapoi la modificările anterioare"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Inapoi la modificările anterioare"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Linii întrerupte selectate/limite la intersecție"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Conectează liniile/limitele selectate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Copiază categorii"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Copiază trăsăturile din (fundal) harta vectorială"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 msgid "Copy attributes"
 msgstr "Copiază atributele"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Conversia tipului de trăsătură"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Revine la liniile/limitele selectate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Imbină liniile/limitele selectate"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Aplică snap la liniile/limitele selectate (doar la noduri)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Împarte linie/limită"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Interoghează trăsăturile"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 #, fuzzy
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Etichetarea liniilor 3D de altitudine"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Selectează harta vectorială"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Harta vectorială nu este 3D. Operațiune anulată."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Selectează harta vectorială"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, fuzzy, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2346,68 +2347,69 @@ msgstr ""
 "necesară pentru vectorizare. Doriți să reconstruiți topologia (va lua ceva "
 "timp) și să deschideți harta vectorială pentru editare?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Eroare vectorizare"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 "Vă rugăm să așteptați, deschiderea hărții vectoriale <%s> pentru editare..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Tip de trăsătură nesuportat '%d'. Operațiunea este anulată."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Manual pentru vectorizare"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Doriți să salvați modificările din harta vectorială <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Salvați modificările?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Vă rugăm să așteptați, închiderea și reconstruirea topologiei hărții "
 "vectoriale<%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Editarea hărții vectoriale <%s> a fost finalizată cu succes"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Harta vectorială nouă"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, fuzzy, python-format
 msgid "Property does not exist: %s"
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Distanța de măsurare"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, fuzzy, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2416,15 +2418,15 @@ msgstr ""
 "Clik și trageți cu butonul stâng al mouse-lui pentru a măsura.\n"
 "Dublu click cu butonul stâng pentru a șterge."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Distanța de măsurare"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Distanța de măsurare:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, fuzzy, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
@@ -2433,172 +2435,191 @@ msgstr ""
 "Distanța geodezică nu este suportată de acest intrument.\n"
 "Motivul: %s"
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 msgid "segment"
 msgstr "segment"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr "distanța totală"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr "depozit"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr "grade (în sensul acelor de ceasornic de la nord)"
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Distanța de măsurare:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Legendă"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Scara"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Adaugă scara și săgeata nord"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' copiat în clipboard"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Afișează bara de instrumente pentru punctele de control"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' copiat în clipboard"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Afișează setările"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Adaugă strat"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Legendă raster"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr "Vă rugăm să așteptați, exportarea imaginii..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Zoom pentru a salva extinderea regiunii"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Regiunea <%s> nu a fost găsită. Operațiune anulată."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Salvează extinderea afișării în fișierul regiunii"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Atenție"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr "Afișează obiectul text"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Text"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Rotația:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 msgid "Font:"
 msgstr "Font:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Setează font"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2606,165 +2627,536 @@ msgstr ""
 "Deplasați textul cu mouse-ul.\n"
 "Dublu click pentru a schimba opțiunile"
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "wxGUI Modelare Grafică"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Citirea instrucțiunilor a eșuat %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "Model"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Citirea instrucțiunilor a eșuat %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Elemente:"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+"Harta vectorială <%s> există deja în mapset-ul curent. Doriți să "
+"suprascrieți?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
-msgid "Variables"
-msgstr "Variabile"
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Suprascrieți?"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr "Editor Python"
+#: ../gui/wxpython/datacatalog/tree.py:314
+#, fuzzy
+msgid "GRASS locations in {}"
+msgstr "Selectează locație și mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Comanda de ieșire"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr "Scriptul Python conține modificări locale"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Redenumește"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr "Scriptul Python este actualizat"
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Redenumește mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Validarea modelului..."
+
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "Redesenarea modelului..."
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "Doriți să salvați modificările din model?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr "Doriți să stocați setările modelului curent ca fișier model?"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Nici o hartă vectorială selectată pentru editare."
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "Închide Modelare Grafică"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "Copiază tabel"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
-msgid "No intermediate data to delete."
-msgstr "Nici o data intermediară pentru ștergere."
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Citirea fișierului a eșuat %s."
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Doriți să ștergeți definitiv data?%s"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr ""
+"Harta vectorială <%s> există deja în mapset-ul curent. Doriți să "
+"suprascrieți?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "Ștergeți data intermediară?"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Rularea modelului..."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "%d hărți șterse din mapset-ul curent"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "decupează regiunea de calcul în funcție de locație"
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"Modelul curent este gol. Doriți să stocați setările curente ca fișier model?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
-msgid "Create new model?"
-msgstr "Creați model nou?"
+#: ../gui/wxpython/datacatalog/tree.py:765
+#, fuzzy
+msgid "Delete map"
+msgstr "Șterge mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr "Alegeți fișierul model"
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Șterge"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "Fișier Model GRASS (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:782
+#, fuzzy
+msgid "g.remove completed"
+msgstr "elimină dublicate"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
-msgstr "%(items)d elemente (%(actions)d actions) încărcate in model"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Afișare"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "Fișierul model <%s> există deja. Doriți să suprascrieți fișierul?"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "Salvează model"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "Fișier <%s> salvat"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "asemănător cu"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr "Alege fișierul pentru a salca modelul curent"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "%d hărți șterse din mapset-ul curent"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "Modelul este gol. Nimic nu este validat."
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Copiază"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "Validarea modelului..."
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "&Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Afișează harta"
+
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "&Crează mapset"
+
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "Calculator GRASS GIS pentru harta raster 3D"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Calculator GRASS GIS pentru harta raster 3D"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
-"Modelul nu este valid.\n"
-"\n"
-"%s"
-
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "Modelul este valid."
+"Locația curentă este <%(loc)s>.\n"
+"Mapset-ul curent este<%(mapset)s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, python-format
-msgid "Model exported to <%s>"
-msgstr "Model exportat ca <%s>"
+msgid "Current mapset is <%s>."
+msgstr "Mapset-ul curent este <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "Comandă:"
+msgid "Data catalog"
+msgstr "Selectarea datei"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
+msgid "Reload GRASS locations"
+msgstr "Numele locației:"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Click pentru a edita setările stratului"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Caută modul"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Vă rugăm să creați prima data cadrul hărții."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Doriți să salvați modificările din model?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Salvează modificările"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Nu se poate crea profil pe harta raster."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Nu se poate crea harta vectorială <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Redare"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Crează tabel nou de culoare pentru harta raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Crează o nouă hartă vectorială"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Numele hărții raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Selectează harta vectorială"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Numele hărții raster:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Calculează indicele de formă pe o hartă raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"Harta vectorială <%s> există deja în mapset-ul curent. Doriți să "
+"suprascrieți?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Digitizează"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Vectorizează linie nouă"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Vectorizează punct nou"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Impachetează hartă raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Închide vectorizarea"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Selectează hartă raster:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Valorile celulei"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Lățime:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "nici o hartă raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "wxGUI Modelare Grafică"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "Model"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Elemente:"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+msgid "Variables"
+msgstr "Variabile"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr "Editor Python"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Comanda de ieșire"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr "Scriptul Python conține modificări locale"
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr "Scriptul Python este actualizat"
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr "Redesenarea modelului..."
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "Doriți să salvați modificările din model?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr "Doriți să stocați setările modelului curent ca fișier model?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "Închide Modelare Grafică"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+msgid "No intermediate data to delete."
+msgstr "Nici o data intermediară pentru ștergere."
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Doriți să ștergeți definitiv data?%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "Ștergeți data intermediară?"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "%d hărți șterse din mapset-ul curent"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"Modelul curent este gol. Doriți să stocați setările curente ca fișier model?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+msgid "Create new model?"
+msgstr "Creați model nou?"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr "Alegeți fișierul model"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "Fișier Model GRASS (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr "%(items)d elemente (%(actions)d actions) încărcate in model"
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "Fișierul model <%s> există deja. Doriți să suprascrieți fișierul?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "Salvează model"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "Fișier <%s> salvat"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr "Alege fișierul pentru a salca modelul curent"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "Modelul este gol. Nimic nu este validat."
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "Validarea modelului..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"Modelul nu este valid.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "Modelul este valid."
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr "Model exportat ca <%s>"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Comandă:"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
 msgstr "Adaugă comandă"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "wxGUI Modelare Grafică"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2775,193 +3167,194 @@ msgstr ""
 "Citirea fișierului model <%s> a eșuat.\n"
 "Fișier nevalid, nu s-a putut analiza documentul XML."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "Vă rugăm să așteptați, încărcare model..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "Scrierea setărilor curente pentru fișierul model a eșuat."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Nu s-a putut deschide fișierul <%s> pentru scriere."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Elimină"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 msgid "Disable"
 msgstr "Dezactivează"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 msgid "Enable"
 msgstr "Activează"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Editează eticheta"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Setează font"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 msgid "Add control point"
 msgstr "Adaugă punct de control"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 msgid "Remove control point"
 msgstr "Elimină punctul de control"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "Intermediar"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Proprietăți"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Etichetă"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "Lista variabilelor - click dreapta pentru a șterge"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "Nume"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Tipul datei"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr "Valoare implicită"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Descriere"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr "Adaugă variabilă nouă"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "întreg"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "real"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "șir de caractere"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Regiune"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 msgid "mapset"
 msgstr "mapset"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 msgid "file"
 msgstr "fișier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Adaugă variabilă nouă la model"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "Lista elementelor - click dreapta pentru a șterge"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 msgid "Label"
 msgstr "Etichetă"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "buclă"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parametrii"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Comandă"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Nici o imagine selectată."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr "Script Python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Rulează"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "Rulează script python"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 msgid "Save python script to file"
 msgstr "Salvează scriptul python ca fișier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2969,29 +3362,35 @@ msgstr ""
 "Reîncarcă script python bazat pe model.\n"
 "Acest lucru va înlătura modificările locale."
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Nu s-a putut lansa scriptul Python. %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr "Alege fișier pentru salvare"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Script Python (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Fișierul <%s> există deja. Doriți să suprascrieți fișierul?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 msgid "Save file"
 msgstr "Salvează fișier"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
@@ -2999,168 +3398,159 @@ msgstr ""
 "Scriptul Python a fost modificat local. Reîncărcarea va înlătura toate "
 "modificările. Doriți să continuați acest lucru?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "Actualizare"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 msgid "Modeler settings"
 msgstr "Setări de modelare"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 msgid "Item properties"
 msgstr "Proprietăți element"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "Dezactivat:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Valid:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr "Invalid:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Execuție:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "Dimensiunea formei"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Lățime:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Înălțime:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Data"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tip"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 msgid "Raster:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "3D raster:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "Vector:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tabel"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "Buclă"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Comandă"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr "Proprietățile modelului"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Metadata"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr "Comenzi"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Permiteți fișierele de ieșire pentru a suprascrie fișierele existente"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr "Aplică proprietăți"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "Nume:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 msgid "Description:"
 msgstr "Descriere:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Autori:"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "model"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Script generat de  wxGUI Modelare Grafică."
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, python-format
 msgid "undefined variable '%s'"
 msgstr "variabilă nedefinită '%s'"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Rularea modelului..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "Modelul este gol. Nimic nu este de rulat."
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3171,87 +3561,87 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Rulați modelul?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr "Variabilele de mai jos nu sunt definite:"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "Hărți raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "hărți raster 3D"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "Hărți vectoriale"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "necunoscut"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr "<nedefinit>"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 msgid "Condition: "
 msgstr "Condiție:"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Condiție: nedefinită"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "dacă-altfel"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 msgid "Model parameters"
 msgstr "Parametrii modelului"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 msgid "Delete intermediate data when finish"
 msgstr "Șterge datele intermediare când termină"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "Proprietățile datelor"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "Numele elementului:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "Tipul elementului:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 #, fuzzy
 msgid "Add GRASS command to the model"
 msgstr "Adaugă acțiune (comandă GRASS) la model"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3261,7 +3651,7 @@ msgstr ""
 "\n"
 "Nu se poate adăuga acțiune nouă la model."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3272,32 +3662,32 @@ msgstr ""
 "\n"
 "Nu se poate adăuga acțiune nouă la model."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 msgid "Relation properties"
 msgstr "Proprietățile relației"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr "De la"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "La"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, python-format
 msgid "Data: %s"
 msgstr "Data: %s"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 msgid "Command:"
 msgstr "Comandă:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 msgid "Option:"
 msgstr "Opțiune:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3305,7 +3695,7 @@ msgstr ""
 "Relația nu începe cu elemente date.\n"
 "Nu s-a putut adăuga relație."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3313,7 +3703,7 @@ msgstr ""
 "Relația nu poate indica comanda GRASS.\n"
 "Nu s-a putut adăuga relație."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3321,68 +3711,68 @@ msgstr ""
 "Nici o opțiune relevantă găsită.\n"
 "Nu s-a putut adăuga relație."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 msgid "Condition"
 msgstr "Condiție"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr "Proprietățile buclei"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "Lista elementelor din buclă"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "Serii"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "Definește seriile hărții ca o condiție pentru buclă"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "Definește serii ale hărților"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr "Proprietăți if-else"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "Lista elementelor din blocul 'if' "
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "Lista elementelor din blocul 'else' "
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Variabila <%s> există deja în model. Adăugarea variabilei a eșuat."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "Doriți să ștergeți toate variabilele din model?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "Șterge variabile"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "Nu"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Da"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, python-format
 msgid ""
 "Unable to open file\n"
@@ -3391,12 +3781,12 @@ msgstr ""
 "Nu se poate deschide fișierul\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr "Fișierul de instrucțiune va fi încărcat cu următoare regiune: %s\n"
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
@@ -3405,23 +3795,23 @@ msgstr ""
 "Regiunea nu poate fi stabilită\n"
 "%s"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr "A eșuat citirea instrucțiunilor %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
@@ -3430,7 +3820,7 @@ msgstr ""
 "Scara a fost schimbată, valoare veche: %(old)s\n"
 "valoare nouă: %(new)s"
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
@@ -3439,7 +3829,7 @@ msgstr ""
 "Citirea instrucțiunilor a eșuat %s.\n"
 "Utilizare 1:25000 notație."
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
@@ -3448,7 +3838,7 @@ msgstr ""
 "Poziția cadrului hărții a fost schimbată, valoare veche: %(old1)s %(old2)s\n"
 "valoare nouă: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
@@ -3458,7 +3848,7 @@ msgstr ""
 "%(old2)s\n"
 "valoare nouă: %(new1)s %(new2)s"
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
@@ -3467,13 +3857,13 @@ msgstr ""
 "Citirea instrucțiunilor a eșuat %(file)s.\n"
 "Format necunoscut %(for)s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, python-format
 msgid "Failed to read instruction %s."
 msgstr "Citirea instrucțiunilor a eșuat %s."
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
@@ -3482,8 +3872,8 @@ msgstr ""
 "Caracterele de pe poziția %s nu sunt acceptate de codificarea  ISO-8859-1 "
 "(Latin 1) care sunt necesare pentru modulul ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
@@ -3491,18 +3881,18 @@ msgstr ""
 "Nu toate caracterele sunt acceptate de codificarea  ISO-8859-1 (Latin 1) "
 "care sunt necesare pentru modulul ps.map."
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr ""
 "Citirea instrucțiunilor a eșuat %(inst)s: fișierul %(file)s nu a fost găsit."
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "wxGUI Compoziție Cartografică"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
@@ -3510,39 +3900,39 @@ msgstr ""
 "Biblioteca de imagini Python nu este disponibilă.\n"
 "Funcția de previzualizare nu funcționează."
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 "Programul ps2pdf nu este disponibil. Vă rugăm să-l instalați pentru a crea "
 "PDF."
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 msgid "Generating PDF..."
 msgstr "Generare PDF..."
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr "Generare PostScrip..."
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr "Generare previzualizare..."
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr "Comanda Ps.map a returnat codul de ieșire %s"
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, fuzzy, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr "comanda %(prg)s a returnat codul de ieșire %(code)s"
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 msgid "PDF generated"
 msgstr "PDF generat"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3554,19 +3944,19 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 msgid "PostScript file generated"
 msgstr "Fișier PostScript generat"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr "Generarea de previzualizare, vă rugăm să asteptați"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 msgid "Preview not available"
 msgstr "Previzualizarea nu este disponibilă"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 #, fuzzy
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
@@ -3574,136 +3964,136 @@ msgid ""
 msgstr ""
 "Previzualizarea nu este disponibilă probabil din cauza lipsei Ghostscript."
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr "Vă rugăm să urmați instrucțiunile de pe GRASS Trac Wiki."
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr "Previzualizare generată"
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 msgid "Save file as"
 msgstr "Salvați fișierul ca"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr "Citirea fișierului a eșuat %s."
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "Vă rugăm să creați prima data cadrul hărții."
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Scara nu este apropiată pentru această proiecție"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 "Apăsați butonul cu imaginea triunghiului verde pentru a genera "
 "previzualizarea."
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr "wxGUI Compoziție Cartografică"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "Click și trage-ți pentru a redimensiona obiectul"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Adaugă etichete"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "inci"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "punct"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 msgid "centimeter"
 msgstr "centimetru"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 msgid "millimeter"
 msgstr "milimetru"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 msgid "meters"
 msgstr "metri"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 msgid "kilometers"
 msgstr "kilometri"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 msgid "feet"
 msgstr "picioare"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 msgid "miles"
 msgstr "mile"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "mile marine"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "pixel"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 msgid "meter"
 msgstr "metru"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "grade"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr "Nu se poate rula `ps.map -b`"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "Unități:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3711,30 +4101,30 @@ msgstr ""
 "Poziția colțului stânga sus\n"
 "de la marginea stângă sus a paginii"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 msgid "Position is given:"
 msgstr "Poziția este dată:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "în raport cu pagina"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 msgid "by map coordinates"
 msgstr "în funcție de coordonatele hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3742,184 +4132,182 @@ msgstr ""
 "Poziția din stânga sus\n"
 "marginea paginii"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "Dimensiune font:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 msgid "Choose color:"
 msgstr "Alege culoare:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "Închide caseta de dialog și aplică modificările"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "Unități"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr "Format"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 msgid "Orientation"
 msgstr "Orientare"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 msgid "Width"
 msgstr "Lățime"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Înălțime"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "Stânga"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr "Dreapta"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Sus"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Jos"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr "Literal nu este permis!"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr "Intrare invalidă"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 msgid "Page size"
 msgstr "Dimensiunea paginii"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "Margini"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Portrait"
 msgstr "Portret"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "Peisaj"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "obicei"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 msgid "Map settings"
 msgstr "Setările hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 msgid "Map frame settings"
 msgstr "Setările cadrului hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr "Cadrul hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 msgid "Map frame options:"
 msgstr "Opțiunile cadrului hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr "potrivește cadrul cu harta selectată"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 msgid "fit frame to match saved region"
 msgstr "potrivește cadrul cu regiunea salvată"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr "potrivește cadrul cu regiunea de calcul curentă"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "fixează scara și centrul hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 msgid "Map selection"
 msgstr "Selecția hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "Harta:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr "Regiunea:"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr "Scara și centrul hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "Centru:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 msgid "Scale:"
 msgstr "Scara:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1:"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr "Rezoluția maximă a hărții  (dpi):"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 msgid "Border"
 msgstr "Chenar"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "desenează chenar în jurul cadrului hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 msgid "border color:"
 msgstr "Culoare chenar:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "lățimea chenarului (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3927,418 +4315,420 @@ msgstr ""
 "Regiunea este setată pentru a se potrivi cu această hartă,\n"
 "harta vectorială sau raster trebuie adăugată mai târziu"
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 msgid "Region selection"
 msgstr "Selecția regiunii"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 msgid "No map selected!"
 msgstr "Nici o hartă selectată!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 msgid "No region selected!"
 msgstr "Nici o regiune selectată!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr "Scară sau centrul hărții invalid(ă)!"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Harta raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 msgid "Choose raster map"
 msgstr "Alege harta raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 msgid "no raster map"
 msgstr "nici o hartă raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 msgid "raster:"
 msgstr "raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 msgid "Add map"
 msgstr "Adaugă harta"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 msgid "points"
 msgstr "puncte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 msgid "lines"
 msgstr "linii"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr "areale"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 msgid "Data Type"
 msgstr "Tipul datei"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Adaugă"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 msgid "Manage vector maps"
 msgstr "Gestionează hărțile vectoriale"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr "Cea mai de sus hartă vectorială se suprapune peste celelalte"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "Sus"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr "Jos"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Șterge"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 msgid "Properties..."
 msgstr "Proprietăți..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 msgid "Raster map settings"
 msgstr "Setările hărții raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 msgid "Vector maps settings"
 msgstr "Setările hărților vectoriale"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, python-format
 msgid "%s properties"
 msgstr "%s proprietăți"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 msgid "Data selection"
 msgstr "Selectarea datei"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 msgid "Feature type"
 msgstr "Tipul trăsăturii"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 msgid "centroids"
 msgstr "centroizi"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 msgid "boundaries"
 msgstr "limitele"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 msgid "Layer selection"
 msgstr "Selectarea stratului"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Conexiunea bazei de date nu este definită în fișierul DB."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 msgid "Select layer:"
 msgstr "Selectează strat:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "lista categoriilor (e.g. 1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Mască"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "Folosește masca curentă"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 msgid "Colors"
 msgstr "Culori"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr "Contur"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "desenați contur"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "Lățime (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 msgid "Fill"
 msgstr "Umple"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 msgid "fill color"
 msgstr "culoare de umplere"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 msgid "choose color:"
 msgstr "alege culoare:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "culoare din coloana tabelului hărții:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "Nici un efect pentru culoarea de umplere din coloana tabelului"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 msgid "Color of lines:"
 msgstr "Culoarea liniilor:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 msgid "Size and style"
 msgstr "Dimensiune și stil"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 msgid "symbol:"
 msgstr "simbol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 msgid "eps file:"
 msgstr "fișier eps:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Caută"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 "Tastați un nume de fișier sau faceți click pe navigator pentru a alege "
 "fișierul"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 msgid "Choose a file"
 msgstr "Alege un fișier"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Dimensiune"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 msgid "size:"
 msgstr "dimensiune:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "dimensiune din coloana tabelului hărții:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 msgid "scale:"
 msgstr "scara:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 msgid "Rotation"
 msgstr "Rotația"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "rotește simboluri:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "invers acelor de ceasornic, în grade:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 msgid "from map table column:"
 msgstr "din coloana tabelului:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr "Setează lățime (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "modifică lățimea în funcție de valoarea de categorie"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Stilul liniei"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr "Alege stilul liniei:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr "Alege tipul de capăt pentru linie:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 msgid "Pattern"
 msgstr "Model"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "utilizează model:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 msgid "Choose pattern file:"
 msgstr "Alege fișierul model:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "lățimea liniei de model (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr "factorul de scară al modelului:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 msgid "Raster legend"
 msgstr "Legendă raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr "Arată legendă raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 msgid "Source raster"
 msgstr "Sursa raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 msgid "current raster"
 msgstr "rasterul curent"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 msgid "select raster"
 msgstr "selectează raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "%(rast)s: tip %(type)s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr "Tipul de legendă"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "legendă discretă (categorii de hărți)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr "gradiant de culoare continuu pentru legendă (hartă cu numere reale)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 msgid "Advanced legend settings"
 msgstr "Setările avansate ale legendei "
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "desenează \"fără date\" casetă"
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "arată amploarea tabelului de culoare"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 msgid "range"
 msgstr "interval"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 msgid "Vector legend"
 msgstr "Legendă vector"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "Arată legendă vector"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 msgid "Source vector maps"
 msgstr "Sursa hărților vectoriale"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr "Alege hărțile vectoriale și ordinea lor în legendă"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Harta vectorială"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "Editează eticheta"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "desenează chenar în jurul legendei"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr "Dimensiune și poziție"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Poziție"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "Lăsați câmpul editabil gol, pentru a folosi valorile implicite."
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4346,15 +4736,15 @@ msgstr ""
 "Lățimea simbolului de culoare (pentru linii)\n"
 " în fața textului legendei"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 msgid "Columns:"
 msgstr "Coloane:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 msgid "column span:"
 msgstr "lățimea coloanei:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
@@ -4362,186 +4752,174 @@ msgstr ""
 "Distanța de separare dintre marginile din stânga\n"
 "a două coloane în cadrul legendei"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Setările fontului"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "Editează eticheta legendei:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 msgid "No raster map selected!"
 msgstr "Nici o hartă raster selectată!"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 msgid "No raster"
 msgstr "Nici un raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 msgid "Mapinfo settings"
 msgstr "Parametrii hărții"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 msgid "Color settings"
 msgstr "Setări culoare"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr "utilizează culoare pentru margine:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 msgid "use background color:"
 msgstr "utilizează culoare de fundal:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"Unitățile proiecției curente nu sunt acceptate,\n"
-" va fi utilizat metrul!"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr "Unități neacceptate"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 msgid "Length:"
 msgstr "Lungime:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr "Lungimea scării este dată în unități de hartă"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "Înălțimea scării este înălțimea reală pe hârtie"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr "implicit"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Stil"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 msgid "Type:"
 msgstr "Tip:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 msgid "Number of segments:"
 msgstr "Număr de segmente:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "Etichetați fiecare"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 msgid "segments"
 msgstr "segmente"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr "fundal transparent pentru text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr "Lungimea barei de scară nu este definit"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "Text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Introduceți textul:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 msgid "Text effects"
 msgstr "Effecte pentru text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr "fundal pentru text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 msgid "highlight"
 msgstr "evidențiere"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "marginea pentru text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "Echilibru"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "orizontal (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr "vertical (pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 msgid " Reference point"
 msgstr "Punct de referință"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 msgid "Text rotation"
 msgstr "Rotație text"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr "rotește textul (invers acelor de ceasornic)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "Nici un text introdus!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr "Imagine"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 msgid "Choose a directory:"
 msgstr "Alege un director:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 msgid "Choose a directory with images"
 msgstr "Alege un director cu imagini"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr "Notă: este acceptat doar format EPS"
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 msgid "Scale And Rotation"
 msgstr "Scară și rotație"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr "Unghiul de rotație (grade):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "Rotație inversă acelor de ceasornic, în grade"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
@@ -4549,42 +4927,42 @@ msgstr ""
 "PIL\n"
 "lipsă"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, python-format
 msgid "Unable to read file %s"
 msgstr "Nu s-a putut citi fișierul %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "dimesiune: %(width)s x %(height)s pts"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 msgid "No image selected."
 msgstr "Nici o imagine selectată."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "Săgeata Nord"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 msgid "North Arrow settings"
 msgstr "Setările săgeții Nord"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr "Calculează convergență"
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 msgid "Symbol"
 msgstr "Simbol"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 msgid "Select symbol:"
 msgstr "Selectați simbol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
@@ -4592,156 +4970,157 @@ msgstr ""
 "Notă: Simbolul selectat nu este afișat\n"
 "în modul draft (doar în modul de previzualizare)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 msgid "Outline color:"
 msgstr "Culoarea conturului:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "transparent"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 msgid "Fill color:"
 msgstr "Culoarea de umplere:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 msgid "Size and Rotation"
 msgstr "Dimensiune și rotație"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr "Dimensiune (pt):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 msgid "Symbol size in points"
 msgstr "Dimensiunea simbolului în puncte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 msgid "Rectangle settings"
 msgstr "Setările dreptunghiului"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 msgid "Line settings"
 msgstr "Setările liniei:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "Lățimea liniei în puncte"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "etichete vector"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "Generează fișierul text cu instrucțiunile de cartografiere"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "Încarcă fișierul text cu instrucțiunile de cartografiere"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr "Generează ca ieșire PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "Generează ca ieșire PDF"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "Specifică formatul paginii, marginile și orientarea"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr "Extindere maximă"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "Mărește la extinderea maximă"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "Click și trage pentru a plasa cadrul hărții"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 msgid "Delete selected object"
 msgstr "Șterge obiectele selectate"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 msgid "Show preview"
 msgstr "Arată previzualizare"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "Închide Compoziție Cartografică"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 msgid "Map info"
 msgstr "Informații hartă"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Legendă"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 msgid "Scale bar"
 msgstr "Scara"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr "Dreptunghi"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Adaugă strat"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Adaugă etichete"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 #, fuzzy
 msgid "Add simple graphics: points"
 msgstr "Adaugă grafice simple"
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 #, fuzzy
 msgid "Add simple graphics: lines"
 msgstr "Adaugă grafice simple"
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 #, fuzzy
 msgid "Add simple graphics: rectangles"
 msgstr "Adaugă grafice simple"
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Gestionare tabelă de atribute GRASS"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4750,143 +5129,137 @@ msgstr ""
 "Conexiunea bazei de date pentru harta vectorială <%s> nu este definită în "
 "fișierul BD. Puteți defini o nouă conexiune în tab-ul 'Gestionare straturi' "
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Vă rugăm să așteptați, încărcarea atributelor..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Caută data"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Gestionează tabele"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Gestionează straturi"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Închide gestionarea tabelei de atribute"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Șterge setările curente selectate"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Reîncarcă atributele (doar stratul selectat)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Număr de înregistrări încărcate: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Conexiunea bazei de date"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Interogare"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Setează declarația SQL ca implicit"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Închide gestionarea tabelei de atribute"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Închide caseta de dialog"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Coloane"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Selecție inversă"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "Valori"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Obține toate valorile"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Obține eșantion"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Du-te la"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Închide caseta de dialog după validare"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Construcție SQL GRASS (%(type)s): harta vectorială <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr "Examplu: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Verifică"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Verifică declarația SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "Declarația SQL nu a fost verificată"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "Declarația SQL nu este validă"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4897,42 +5270,42 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "Declarația SQL este validă"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Acțiune"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Declarația SQL nu este validă"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Declarația SQL este validă"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Încarca data..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
@@ -4941,35 +5314,35 @@ msgstr ""
 "Atributele tabelului <%s> nu a fost găsit. Pentru crearea tabelului "
 "activează tab-ul 'Gestionare layer'."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Coloana <%(column)s>nu a fost găsită in tabelul <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Poate afișa doar 256 coloane."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Număr de coloane inconsistent în tabel <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr "Limită de vizualizare:  100000 înregistrări."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Valoare necunoscută"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 "Nu s-a putut decoda valoarea. Setați codarea în preferințele GUI "
 "('Attributes')."
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4983,173 +5356,173 @@ msgstr ""
 "\n"
 "Detalii: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr "Sortare crescătoare"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr "Sortare descrescătoare"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr "Calculează (doar coloanele numerice)"
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Calculator pentru volume"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 msgid "Statistics"
 msgstr "Statistici"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 msgid "Add column"
 msgstr "Adaugă coloană"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Dimensiunea arealului"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 msgid "Line length"
 msgstr "Lungimea liniei"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr "Compactitatea unui areal"
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr "Dimensiunea fractală a limitei definite pentru un poligon"
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr "Lungimea perimetrului unui areal"
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr "Număr de trăsături pentru fiecare categorie"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr "Abruptul liniei 3D"
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr "Linia de sinuozitate"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 msgid "Line azimuth"
 msgstr "Linia de azimut"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Adaugă coloane"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Nu s-a putut adăuga coloana la tabel. Nici un nume de coloană definit."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Coloana  <%(column)s> există deja în tabel <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 "Datele de atribut - click dreapta pentru editare/gestionare înregistrări"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr "(doar citire)"
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Interogare SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Simplu"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Aplică declarația SELECT și reîncarcă datele înregistrate"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Construcție SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Construcție SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Editează înregistrarea selectată"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Inserează inregistrare nouă"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Șterge înregistrarea selectată"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Șterge toate înregistrările"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Selectează tot"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Deselectează tot"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Evidențiază trăsăturile selectate"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Evidențiază trăsăturile selectate și măriți"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Extrage trăsăturile selectate"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Șterge trăsăturile selectate"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Actualizarea înregistrărilor existente"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Valoarea '%(value)s' trebuie introdusă ca %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, python-format
 msgid ""
 "Unable to update existing record.\n"
@@ -5158,17 +5531,17 @@ msgstr ""
 "Nu s-a putut actualiza înregistrarea existentă.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Înregistrarea cu numărul de categorie %d există deja în tabel."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Numărul de categorie (coloana %s) lipsește."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, python-format
 msgid ""
 "Unable to insert new record.\n"
@@ -5177,7 +5550,7 @@ msgstr ""
 "Nu s-a putut insera o înregistrare nouă.\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5186,11 +5559,11 @@ msgstr ""
 "Datele înregistrate selectate (%d) vor fi șterse definitiv din tabel. Doriți "
 "să le ștergeți?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Șterge înregistrările"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5199,15 +5572,15 @@ msgstr ""
 "Toate înregistrările  (%d) vor fi șterse definitiv din tabel. Doriți să le "
 "ștergeți?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Nimic de extras."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Nimic de șters."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5218,7 +5591,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5231,30 +5604,30 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Tabel <%s> - click dreapta pentru a șterge coloana(ele)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 msgid "Column"
 msgstr "Coloană"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 msgid "Length"
 msgstr "Lungime"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Redenumește coloană"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Nu s-a putut redenumi coloana. Nici un nume de coloană definit."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5263,7 +5636,7 @@ msgstr ""
 "Nu s-a putut redenumi coloana <%(column)s> în <%(columnTo)s>. Coloana există "
 "deja în tabel <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5272,15 +5645,15 @@ msgstr ""
 "Nu s-a putut redenumi coloana. Coloana <%(column)s> nu există în tabel <"
 "%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Șterge coloana selectată"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Șterge toate coloanele"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5289,11 +5662,11 @@ msgstr ""
 "Coloana selectată '%s' va fi eliminată DEFINITIV din tabel. Doriți să "
 "ștergeți această coloană?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Șterge coloana(ele)"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5304,101 +5677,101 @@ msgstr ""
 "%s\n"
 "vor fi eliminate DEFINITIV din tabel. Doriți să ștergeți aceste coloane?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Lista straturilor"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Șterge tabela de atribute legată(%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Numele coloanei"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Lungimea datei"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Driver"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Bază de date"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Cheie"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Adaugă strat"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Descriere strat"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Coloana primară"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Inserează înregistrare pentru fiecare categorie în tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Este nevoie să adaugi categorii cu modulul v.category."
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Descriere tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Numele tabelului"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Crează tabel"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Adaugă strat"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Setează default"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 msgid "Remove layer"
 msgstr "Elimină strat"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr "Strat pentru eliminare"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 msgid "&Remove layer"
 msgstr "&Elimină strat"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Modifică strat"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Modifică strat"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5406,19 +5779,19 @@ msgstr ""
 "Nu se poate obține lista tabelelor.\n"
 "Vă rugăm utilizați db.connect pentru a seta parametrii bazei de date."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Nu se poate crea un tabel nou. Numele tabelului sau numele coloanei primare "
 "lipsește."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 "Nu se poate crea un tabel nou. Tabelul <%s> există deja în baza de date."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5427,42 +5800,42 @@ msgstr ""
 "Nu se poate adăuga un strat nou la harta vectorială <%(vector)s>.  Stratul "
 "%(layer)d există deja."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Statistici pentru voxel"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Copiază statisticile de regresie în clipboard (Ctrl+C)"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Nu se pot salva setările"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Nu s-a putut crea locație nouă"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Statistici pentru voxel"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5470,11 +5843,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Gestionare tabelă de atribute GRASS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5487,200 +5860,201 @@ msgstr ""
 "Doriți să creați un tabel nou și să definiți o legătură cu harta vectorială <"
 "%s>?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 msgid "Create table?"
 msgstr "Creați tabel?"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Închide caseta de dialog după validare"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Nici un atribut găsit"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Actualizare atribute"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 msgid "Define attributes"
 msgstr "Definire atribute"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Afișare atribute"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Reîncarcă"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Trimite"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Coloana <%(col)s>: Valoare '%(value)s' trebuie introdusă ca %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Necunoscut"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Nu s-a putut încărca tema imaginii. Motivul: %s"
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "Vizualizare 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Vizualizare 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Nici o imagine selectată."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Închide fișierul spațiului de lucru"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "Fișierul <%s> nu este găsit."
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Animație"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Citirea fișierului a eșuat %s."
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 #, fuzzy
 msgid "Inconsistent number of maps, please check input data."
 msgstr "Număr de coloane inconsistent în tabel <%(table)s>."
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Nimic de extras."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Rectificarea imaginii, vă rugăm să așteptați..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Rectificarea imaginii, vă rugăm să așteptați..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Animație"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Animație"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Încarca data..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Setările <%s> nu au fost găsite"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5689,634 +6063,634 @@ msgstr ""
 "Citirea fișierului spațiului de lucru <%s> a eșuat.\n"
 "Fișier nevalid, nu s-a putut analiza documentul XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Setările de vizualizare 3D salvate ca fișier <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Adaugă straturile selectate la arborele de strat"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Crează o hartă vectorială goală"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Elimină strat"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Suprascrieți fișierul?"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Simplu"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Rata de cadru (FPS):"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Mod de categorie"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 #, fuzzy
 msgid "Time unit:"
 msgstr "unitățile hărții"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Crearea opțiunilor:"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 msgid "day"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "Animația există deja"
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "animație"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "animație"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Avansat"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Închide editarea"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Drepturi de autor"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "butonul culoare"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "butonul culoare"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Selectați fișierul WKT sau PRJ"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Dimensiune și poziție"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Mod fin:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Setează opțiunile"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Proprietăți vizualizare 3D"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Spațiu de lucru"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Gestionează categorii de informații"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Salvează regiunea:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Încarcă regiunea:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "valoare:"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Crează o hartă vectorială goală"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Lista extensiilor"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Editați GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "animație"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 msgid "Decorations"
 msgstr "Cadrul extern"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "Exportă"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Timestamp"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Adaugă harta"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Adaugă text stratului"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Setările fontului"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Exemple de transects"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Dimensiunea imaginii"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Alege un fișier"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Salvează secvență de imagini"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "SV"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Exportă"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr "Prefix fișier:"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "animație"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 msgid "File format:"
 msgstr "Format fișier:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "Director"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Alege un director pentru imagini"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Fișier EPSG:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Alege fișier pentru salvare"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Fișier EPSG:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "fișier eps:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Crearea opțiunilor:"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "Fișierul <%s> nu este găsit."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Exportă hartă vectorială"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "%s fișier lipsă"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Timestamp"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Import date de tip raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Interoghează hartă raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Gestionează hărțile vectoriale"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Interoghează hartă raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Import date de tip raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Import date vectoriale"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Import date de tip raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Date de intrare"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Selectează hartă raster:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Vă rugăm să creați prima data cadrul hărții."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Animație"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Culoare de fundal:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "utilizează culoare de fundal:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "utilizează culoare de fundal:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Timestamp"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Formatul coordonatelor"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Invalid:"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Schimbă mapset"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 #, fuzzy
 msgid "Play back"
 msgstr "Rulează"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "Oprește"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "Pauză"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Adaugă strat de hartă al reliefului umbrit"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Invalidă valoarea de coordonată. Operațiune anulată."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "punct"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Nu s-a putut reda suprapunerea <%s>."
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6324,49 +6698,49 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "%d hărți șterse din mapset-ul curent"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Suprapunerea hărții vectoriale"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Crearea grupului nou  <%s> a eșuat."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 #, fuzzy
 msgid "Vector map with analysis result does not exist."
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6374,468 +6748,469 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Nu s-a putut seta"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Suprascrieți?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Straturile tematice ale hărții"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Adaugă strat"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Gestionează straturi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Actualizează categorii"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Alege %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "Elimină tabela de atribute existentă a hărții vectoriale."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Tipul hărții:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Reconstruiește topologia"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "puncte vectoriale"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Punct"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Stânga: punct nou"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Coloană numerică:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Calea cea mai scurtă"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "punct"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Analiză de tip 'vânzător călător'"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, fuzzy, python-format
 msgid "Maximum flow %s"
 msgstr "Fluxul maxim"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Tipul sursei:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "punct"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Creaze un arbore Steiner pentru rețea și anumite terminale"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Suprascrieți fișierul?"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Instrument de analiză a profilului GRASS"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Afișează bara de instrumente pentru punctele de control"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Analiză"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Analiza rețelei"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Setările axelor"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Punct"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Liniile de scurgere"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Rezultat"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parametrii"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Adaugă harta creată în arborele de straturi"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Date de intrare"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Listează tabelele"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Încarca data..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Crează tabel"
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analiză"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Setări"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "Rularea modelului..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Setări raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Stilul liniei"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Tabela de culori"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Convertește coordonate"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Culoarea liniei"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Culoare pentru GCP-urile neutilizate:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Culoare pentru GCP selectate:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Dimensiune font:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Lățimea liniei:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Aplică snapping la prag"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Noua hartă vectorială <%s> a fost creată"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Afișează harta redenumită"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Adaugă punct de control"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Șterge locație selectată"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Analiza rețelei"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Setările hărților vectoriale"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "Arată manual"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Analiză de tip 'vânzător călător'"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Redare"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Activează/dezactivează auto-redarea"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Afișează gama"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Afișează extinderea regiunii de calcul"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6846,16 +7221,16 @@ msgstr ""
 "de calcul, iar regiunea de calcul desenat ca un dreptunchi roșu în centrul "
 "ecranului)."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Modul de afișare"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr "Alinierea extinderii regiunii la dimensiunea de afișare"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6864,16 +7239,16 @@ msgstr ""
 "central. Valoarea implicită pentru afișarea unei hărți noi poate fi "
 "stabilită în caseta  'Setări GUI '. "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "Rezoluția de afișare"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Constrânge rezoluția de afișare la setările de calcul"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -6882,11 +7257,11 @@ msgstr ""
 "implicită pentru afișarea unei hărți noi poate fi stabilită în caseta  "
 "'Setări GUI '. "
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Scara hărții"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
@@ -6894,33 +7269,33 @@ msgstr ""
 "Pentru că toate monitoarele și rezoluțiile sunt setate diferit, aceste "
 "valori nu sunt reale, dar rămân apropiate."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "Du-te la"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "Proiecția nu este definită (verifică setările)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr "Eroare la proiecție  (verifică setările)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "Proiecție"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 msgid "Use defined projection"
 msgstr "Utilizează o proiecție definită"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
@@ -6928,46 +7303,46 @@ msgstr ""
 "Reproiectează coordonatele afișate în bara de stare. Proiecția poate fi "
 "definită în caseta de preferințe GUI (tab 'Proiecție')"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASCĂ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Geometria afișării"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Coordonate"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Extindere"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Regiune de calcul"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Fereastra de vizualizare"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "EROARE: Nu s-a putut determina versiunea GRASS. Detalii: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "Fereastra de vizualizare GRASS GIS: %(id)d  - Locația: %(loc)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -6978,11 +7353,11 @@ msgstr ""
 "\n"
 "Detalii: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 msgid "Vector Digitizer Toolbar"
 msgstr "Bara de instrumente pentru vectorizare"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6997,109 +7372,115 @@ msgstr ""
 "\n"
 "Detalii: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr "Pornirea modului de vizualizare 3D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Vă rugăm să așteptați, încărcarea datelor..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 msgid "Please wait, unloading data..."
 msgstr "Vă rugăm să așteptați, descărcarea datelor..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr "Revenirea la modul de vizualizare 2D..."
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Digitizează"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+msgid "No map layer selected. Operation canceled."
+msgstr "Nici un strat selectat. Operațiune anulată."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Harta vectorială <%s> deschisă pentru editare - sărită."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Adaugă text stratului"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Mărește la regiunea de calcul (stabilește cu g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Bara de instrumente pentru vectorizare"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 "Modulul GRASS '%s' nu a fost găsit. Nu poate porni fereastra de vizualizare."
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Cadrul hărții"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Afișare hartă"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -7107,12 +7488,12 @@ msgstr ""
 "A fost o problemă de printare.\n"
 "Probabil imprimanta nu este setată corect?"
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Unități neacceptate"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
@@ -7120,109 +7501,124 @@ msgstr ""
 "\n"
 "Detalii: %(error)s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr "Pornește afișarea hărții <%s>..."
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Nu s-a putut crea fișierul'%s'\n"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Oprește afișarea hărții <%s>..."
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Selectează trăsăturile vectoriale"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Selectează hartă raster:"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Scara"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "Afișează legendă"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Adaugă scara și săgeata nord"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Analizează harta"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "Măsurare, profile, histogramă,...."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Măsoară distanța"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Măsoară distanța"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Profilul suprafeței"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Crează punctele de dispersie bivariată a hărții raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 msgid "Create histogram of raster map"
 msgstr "Crează histograma hărții raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Analiza rețelei"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "Rotește scena 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Trage cu mouse-ul pentru a roti scena 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "Mod de zbor"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 "Trage cu mouse-ul, ține apăsat Ctrl down pentru un mod diferit sau Shift "
 "pentru a accelera"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 msgid "Click mouse to zoom"
 msgstr "Click pe mouse pentru a mări"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 msgid "Click mouse to unzoom"
 msgstr "Click pe mouse pentru a micșora"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Modul de vizualizare 3D nu este disponibil"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Motiv: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Vectorizarea nu este disponibilă"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -7233,146 +7629,151 @@ msgstr ""
 "actualizarea versiunilor de GRASS. Între timp puteți utiliza \"v.digit\" din "
 "meniul Dezvoltă vector."
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Închide vectorizarea"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Redenumește locația"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Redenumește locația"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Crează RBG"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Crează locație nouă"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Redenumește"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Redenumește locația"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Editați GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Redenumește locația"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Doriți să creați locația GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Creați locație nouă?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Redenumește locația"
@@ -7382,331 +7783,331 @@ msgstr "Redenumește locația"
 msgid "Create new configuration file for r.li modules"
 msgstr "Editor de configurare pentru r.li.'index'"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Doriți să creați locația GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Creați locație nouă?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Locație wizard anulată. Locația nu a fost creată. "
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Selectează tipul hărții și locația/mapset"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Nume pentru harta raster creată nouă"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Setările hărții raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Setările hărților vectoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Setările hărților vectoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Elimină strat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Încarcă setările:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Parametrii terenului"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Regiune"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "unitățile hărții"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Mutarea ferestrei"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Alege un fișier"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Număr de segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Doriți să creați un mapset nou?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Doriți să salvați modificările din harta vectorială <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Culoarea barei de scară:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Selectează trăsăturile vectoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Analiză"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Mutarea ferestrei"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "Stratul selectat nu este un vector."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Selectează harta vectorială"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Lățime:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Numele hărții raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "grafic tematic"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Număr total de cadre:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 #, fuzzy
 msgid "Insert number of column strates"
 msgstr "Număr de coloane inconsistent în tabel <%(table)s>."
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "unitățile hărții"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Mutarea ferestrei"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Număr de segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Număr de segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Culoarea barei de scară:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7714,185 +8115,199 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Culoarea barei de scară:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Rezumat"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Linii vectoriale"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Regiunea:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Limitele regiunii"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Tipul elementului:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Numele mapset-ului"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Lățime:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Dimensiune font:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Număr de segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Distanța la trăsături"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Număr de segmente:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Coloană numerică:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr "Bine ați venit în consola interactivă Python wxGUI %s"
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr "Tip %s pentru mai multe informații relative de scripting GRASS."
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr "Tip %s pentru adăugarea de raster sau vector la arborele de strat."
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr "Șterge tot textul din consolă"
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Simplu"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Harta raster sau vectorială  <%s> nu a fost găsită"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, python-format
 msgid "Raster map <%s> added"
 msgstr "Harta raster <%s> adăugată"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, python-format
 msgid "Vector map <%s> added"
 msgstr "Harta vectorială <%s> adăugată"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS Gestionare Strat"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "Bara de instrumente a spațiului de lucru"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "Bara de instrumente a datelor"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr "Bara de instrumente a instrumentelor"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 msgid "Vector Toolbar"
 msgstr "Bara de instrumente pentru vector"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 msgid "3D view Toolbar"
 msgstr "Bara de instrumente pentru vizualizarea 3D"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 msgid "Rename Map Display"
 msgstr "Afișează harta redenumită"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "Straturile tematice ale hărții"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Straturi"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "Consola de comandă"
 
-#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
 #, fuzzy
-msgid "Search modules"
-msgstr "Caută modul"
+msgid "Modules"
+msgstr "coeficient"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Consola Python"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7903,37 +8318,28 @@ msgstr ""
 "\n"
 "Doriți să comutați la noua locație?"
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr "Comutați la noua locație?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Locația curentă este <%(loc)s>.\n"
-"Mapset-ul curent este<%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "Alege model pentru a rula"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Doriți să salvați modificările din spațiul de lucru?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Doriți să stocați setările curente în fișierul spațiului de lucru?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, python-format
 msgid "Close Map Display %s"
 msgstr "Închide fereastra de vizualizare %s"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -7942,36 +8348,36 @@ msgstr ""
 "Comanda '%s' nu a fost încă implementată în WxGUI. Încercați să-l adăugați "
 "ca un strat de control."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr "Stratul selectat nu este un vector."
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr ""
 "Editarea este permisă doar pentru hărțile vectoriale din mapset-ul curent."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr "Alege scriptul pentru a rula"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Script Python (*.py)|*.py|Bash script (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Scriptul '%s' nu există. Operațiune anulată."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
@@ -7981,15 +8387,15 @@ msgstr ""
 "posibilitatea de a rula acest script (notă: trebuie să fiți administratorul "
 "fișierului)"
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr "Setați permisiune?"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr "Nu s-a putut seta permisiunea. Operațiune anulată."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
@@ -7998,95 +8404,92 @@ msgstr ""
 "Directorul '%s' nu este definit în  GRASS_ADDON_PATH. Doriți să adăugați "
 "acest director la GRASS_ADDON_PATH?"
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr "Actualizați calea pentru addon-uri?"
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Lansarea scriptului '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Nici un o locație/nici un mapset selectat(ă). Operațiune anulată."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr "Nici un mapset selectat. Operațiune anulată."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "Mapset-ul curent este <%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Schimbă mediul de lucru"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Alege un director:"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Alege un director:"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr "Informații Sistem"
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr "Versiunea GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Valoare necunoscută"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+#, fuzzy
+msgid "GRASS SVN revision"
 msgstr "Revizia GRASS SVN"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Construcție SQL"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
+#: ../gui/wxpython/lmgr/frame.py:1222
 #, fuzzy
-msgid "Build Platform"
+msgid "Build platform"
 msgstr "Platformă"
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr "Platformă"
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -8094,60 +8497,60 @@ msgstr ""
 "Spațiul de lucru curent nu este gol. Doriți să stocați setările curente "
 "pentru fișierul din spațiul de lucru?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Creați spațiu de lucru nou?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Alege fișierul spațiului de lucru"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "Fișierul spațiului de lucru GRASS (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Vă rugăm să așteptați, încărcarea spațiului de lucru..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Alege fișier GRC pentru încărcare"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Fișier mai vechi al spațiului de lucru GRASS (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Alege fișier pentru a salva spațiul de lucru curent"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Fișierul spațiului de lucru <%s> există deja. Doriți să suprascrieți acest "
 "fișier?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Salvează spațiu de lucru"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "Scrierea setărilor curente la fișierul spațiului de lucru a eșuat."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr "Introduceți nume nou:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "Fereastra de vizualizare GRASS GIS: %(name)s  - Locație: %(loc)s"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, fuzzy, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8155,30 +8558,30 @@ msgid ""
 "Reason: %s"
 msgstr "Nu s-a putut încărca tema imaginii. Motivul: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr ""
 "Nu s-a putut insera o înregistrare nouă.\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr ""
 "Nu s-a putut insera o înregistrare nouă.\n"
 "%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 msgid "Add selected map layers into layer tree"
 msgstr "Adaugă straturile selectate la arborele de strat"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Tip de strat neacceptat <%s>."
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
@@ -8186,11 +8589,11 @@ msgstr ""
 "Reține faptul că valorile celulelor pot fi afișate numai pentru regiunile cu "
 "mai puțin de 10,000 celule."
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr "opacitate:"
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8201,31 +8604,27 @@ msgstr ""
 "%s\n"
 "din arborele de strat?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "Doriți să eliminați stratul(urile) selectat(e)\n"
 "%s\n"
 "din arborele de strat?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Elimină strat"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Închide GRASS GUI"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "EROARE: Nu s-a putut determina versiunea GRASS. Detalii: %s"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-msgid "No map layer selected. Operation canceled."
-msgstr "Nici un strat selectat. Operațiune anulată."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
@@ -8235,27 +8634,29 @@ msgstr ""
 "recomandat să limitați harta la geometria regiunii. Doriți să limitați "
 "rezoluția?"
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr "Limitați harta la geometria regiunii?"
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Import date de tip raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "Leagă date raster externe"
 
@@ -8269,12 +8670,14 @@ msgid "Set raster output format"
 msgstr "Setează formatul de ieșire al rasterului"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Import date vectoriale"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "Leagă date vectoriale externe"
 
@@ -8296,7 +8699,7 @@ msgstr "Importă date prin serviciu WMS"
 msgid "Add command layer"
 msgstr "Adaugă comandă"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Închide"
@@ -8346,8 +8749,8 @@ msgid "Add rhumbline layer"
 msgstr "Adaugă strat de linie loxodromă"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "Adaugă strat raster 3D"
 
@@ -8370,127 +8773,123 @@ msgstr "Validarea modelului..."
 msgid "Background vector map"
 msgstr "Combină harta vectorială"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Straturile de hartă"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Modifică nivelul opacității"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr "Proprietăți vizualizare 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Zoom la harta selectată"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Setează regiunea de calcul pentru harta selectată"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Exportă hartă vectorială"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Exportă modelul ca script Python"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Crează RBG"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "%d hărți șterse din mapset-ul curent"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Setează tabela de culoare"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Arată datele de atribut"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Începe editarea"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Închide editarea"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "Reconstruiește topologia"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Zoom la harta selectată (ignoră valorile nule)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "sau introduceți valorile interactiv"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogramă"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Statistici univariate pentru raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Raport și statistici"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Profil"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Nu se poate crea profil pe harta raster."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, fuzzy, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-"Nume <%(name)s> nu este un nume valid pentru locație. Vă rugăm utilizați "
-"doar caractere ASCII excluzând %(chars)s și spații."
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "3D raster"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Tip de strat neacceptat <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Introduceți nume pentru mapset nou:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Setează opacitatea la <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
@@ -8498,169 +8897,163 @@ msgstr ""
 "Harta vectorială <%s> există deja în mapset-ul curent. Doriți să "
 "suprascrieți?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Suprascrieți?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Nu s-a putut deschide harta vectorială <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 "Nu se poate afișa histograma harții raster. Nici un nume de hartă nu este "
 "definit."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Setează opacitatea la <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Grup de straturi:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Click pentru a edita setările stratului"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(dublu clik pentru setarea proprietăților)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Vă rugăm să așteptați, actualizarea datelor..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "Începe afișarea unei noi hărți"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Crează un spațiu de lucru nou (Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Deschide fișierul din spațiul de lucru existent (Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Salvează spațiul de lucru curent în fișierul (Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Adaugă straturi multiple de raster sau vector (Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Adaugă strat raster (Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Adaugă straturi raster diferite (RGB, HIS, relief umbrit...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Adaugă strat vector (Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Adaugă straturi vectoriale diferite (tematic, grafic...)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "Adaugă grup"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Adaugă grid sau etichete vectoriale"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Elimină straturile selectate din arborele de straturi"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "Importă/leago date raster sau vector"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "Calculator pentru raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "Modelare Grafică"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "Georectificare"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "Compoziție Cartografică"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Lansare script"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "Setări GUI"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "Manual GRASS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Editează înregistrarea selectată"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Reîncarcă atributele (doar stratul selectat)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr "Generează comandă pentru m.nviz.image"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr "Generează comandă pentru m.nviz.image, bazată pe starea actuală"
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 msgid "3D view mode settings"
 msgstr "Setările modului de vizualizare 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 msgid "Show 3D view mode settings dialog"
 msgstr "Afișează parametrii vizualizării 3D"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 msgid "Show 3D view mode manual"
 msgstr "Afișează manual pentru modul de vizualizare 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8672,58 +9065,58 @@ msgstr ""
 "ul Numeric Python (http://numpy.scipy.org) pentru informații despre "
 "descărcarea codului sursă."
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "Instrument de analiză a profilului GRASS"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Profil"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Distanța (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Distanța de-a lungul transectului"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Valorile celulei"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr "Nu toate punctele de profil se află în interiorul regiunii de calcul."
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Valorile rasterului"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Trebuie să desenați un transect la profil în fereastra de vizualizare."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Nimic pentru realizarea profilului"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 "Alege un prefix pentru fișierul(ele) unde vor fi salvate valorile "
 "profilului..."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "Valori separate prin virgulă (*.csv)|*.csv"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr "Suprascrieți fișierul?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
@@ -8732,7 +9125,7 @@ msgstr ""
 "Nu s-a putut deschide fișierul <%(file)s> pentru scriere.\n"
 "Motivul: %(e)s"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, fuzzy, python-format
 msgid ""
 "%d files created:\n"
@@ -8741,560 +9134,568 @@ msgstr ""
 "%(l)d fișiere create:\n"
 "%(p)s"
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 msgid "No files generated."
 msgstr "Nici un fișier generat."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr "Statistici pentru profil(e)"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Valorile rasterului"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Nimic de încărcat."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Este necesară cel puțin o hartă raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 #, fuzzy
 msgid "Bivariate Scatterplot of "
 msgstr "Crează punctele de dispersie bivariată a hărții raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Valorile rasterului"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Data: %s"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Statistici de regresie copiate pe clipboard"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr "Desenează/redesenează graficul"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Desenează linia de profil în fereastra de vizualizare"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 msgid "Plot options"
 msgstr "Opțiuni ale graficului"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 msgid "Plot statistics"
 msgstr "Statistici ale graficului"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 msgid "Save profile data to CSV file"
 msgstr "Salvează datele profilului ca fișier CSV"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr "Închide instrumentul pentru grafic"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr "Apăsați pe butonul din stânga:"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Setările textului"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 msgid "Plot settings"
 msgstr "Setările graficului"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "Această trăsătură nu este încă funcțională"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr "În construcție"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Intrument GRASS GIS pentru histogramă (d.histogram)"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histogramă"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Valorile celulei"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Crează sau editează grupurile de imagini"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Crează histograma hărții raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Crează histograma hărții raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Valorile rasterului"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "Dimensiunea arealului"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 #, fuzzy
 msgid "Statistics for Map(s) Histogrammed"
 msgstr "Statistici pentru profil(e)"
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Raporturi de statistici pentru harta raster."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 msgid "Select raster maps to profile"
 msgstr "Selectează hărți raster la profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr "Selectează hartă raster la profil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Selectează hărți raster la profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 #, fuzzy
 msgid "Number of bins (for FP maps)"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "C&opiază"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Copiază statisticile de regresie în clipboard (Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr "Statistici de regresie copiate pe clipboard"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Selectează hărți raster la profil"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Crează histograma hărții raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 #, fuzzy
 msgid "Histogram imagery group"
 msgstr "Crează sau editează grupurile de imagini"
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Selectează hartă raster:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Selectează grup:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histogramă"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "%d hărți șterse din mapset-ul curent"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Titlul profilului:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Dimensiunea fontului pentru titlu (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "Eticheta axei X:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Eticheta axei Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Dimensiunea fontului pentru etichetă (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Familia de fonturi:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Stilul:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Lățimea:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Aplică schimbările pentru sesiunea curentă și închide caseta de dialog"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Dimensiuni text grafic salvate ca fișier '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 msgid "No map or image group selected to plot."
 msgstr ""
 "Nici o hartă sau grup de imagine selectat(ă) pentru reprezentare grafică."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr "Hartă/imagine reprezentată"
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 msgid "Settings for selected map"
 msgstr "Setări pentru harta selectată"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Culoarea liniei"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Setările segmentului transect"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "puncte vectoriale"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Setările axelor"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Axa X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Axa Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 msgid "Scale"
 msgstr "Scara"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 "Scalare automatică, personalizare maximă și minimă sau scalare în funcție de "
 "un interval (min)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Personalizare minimă"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Personalizare maximă"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Scara înregistrată"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Setările gridului și legendei"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Culoarea gridului"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Afișează grid"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Dimensiunea fontului pentru legendă"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Afișează legendă"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Setările graficului salvate ca fișier '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Intrument GRASS GIS pentru histogramă (d.histogram)"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Setările hărții raster"
+msgstr "Intrare invalidă"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Coloana atribut:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Selectează hărți raster la profil"
+msgstr "Selectează trăsăturile vectoriale"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Desenează"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Ajutor"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Intrare invalidă"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Harta vectorială <%s> nu a fost găsită"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Mod de categorie"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Timestamp"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Intrare invalidă"
+msgid "Seed point outside the current region"
+msgstr "Generează areal pentru regiunea curentă"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Intrare invalidă"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Intrare invalidă"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Intrare invalidă"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Import date de tip raster"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Import date vectoriale"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Import date de tip raster"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "&Fișier"
 
@@ -9302,8 +9703,8 @@ msgstr "&Fișier"
 msgid "Workspace"
 msgstr "Spațiu de lucru"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Nou"
 
@@ -9311,7 +9712,7 @@ msgstr "Nou"
 msgid "Create new workspace"
 msgstr "Crează spațiu de lucru nou"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Deschide"
 
@@ -9319,12 +9720,12 @@ msgstr "Deschide"
 msgid "Load workspace from file"
 msgstr "Încarcă spațiu de lucru din fișierul"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Salvează"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Salvează ca "
 
@@ -9345,7 +9746,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Încarcă layere din fișierul GRC în arborele de straturi"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "Afișare hartă"
 
@@ -9374,7 +9775,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Adaugă multiplu raster sau vectori la afișarea actuală"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Adaugă grid stratului"
@@ -10103,23 +10504,23 @@ msgstr "Volume în serii raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Convertește hartă raster 3D în hartă raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georectificare"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Gestionare puncte de control pentru georectificare"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Modelare grafică"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Lansează Modelare grafică"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Rulează model"
 
@@ -10161,16 +10562,16 @@ msgstr ""
 "O utilitate simplă de convertire a direcției și a măsurătorilor de distanță "
 "la coordonate și viceversa."
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "Lansează Compoziție Cartografică"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Tipul hărții:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Lansare script"
@@ -10183,7 +10584,7 @@ msgstr "Lansare script"
 msgid "Launches script file."
 msgstr "Lansează fișier sript."
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Închide"
@@ -10193,8 +10594,8 @@ msgstr "Închide"
 msgid "Quit wxGUI session."
 msgstr "Închide sesiunea GRASS wxGUI."
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Închide GRASS GUI"
@@ -10203,7 +10604,7 @@ msgstr "Închide GRASS GUI"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "&Setări"
 
@@ -10379,7 +10780,7 @@ msgstr "Actualizează extensiile instalate"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Elimină extensiile addon-urilor GRASS instalate. "
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Preferințe"
 
@@ -11526,7 +11927,7 @@ msgstr ""
 "fi exprimat de către utilizator."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Plan"
 
@@ -11804,8 +12205,8 @@ msgid "Develop vector map"
 msgstr "Dezvoltă hartă vectorială"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Crează o nouă hartă vectorială"
 
@@ -12758,14 +13159,14 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr ""
 "Intrare interactivă pentru clasificarea superfivată (necesită Xtermeni)"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -13910,27 +14311,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Animație"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Afișează extinderea regiunii de calcul"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Mod de categorie"
+msgstr "Intrument GRASS GIS pentru histogramă (d.histogram)"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Afișează extinderea regiunii de calcul"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "&Ajutor"
 
@@ -13956,7 +14361,7 @@ msgid "Prints system information"
 msgstr "Afișează informații despre sistem"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Despre GRASS GIS"
 
@@ -13970,257 +14375,265 @@ msgstr "Import date vectoriale"
 msgid "Attribute table manager"
 msgstr "Închide gestionarea tabelei de atribute"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "Crează model nou"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "Încarcă model nou din fișierul"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "Salvează model nou ca fișier"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "Închide fișierul model"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "Exportă ca imagine"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "Exportă modelul ca imagine"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "Exportă ca Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Exportă modelul ca script Python"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "Închide modelarea"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "Închide fereastra de modelare"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "&Model"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "Adaugă comandă"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "Adaugă acțiune (comandă GRASS) la model"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Adaugă data"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Adaugă un element de date la model"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "Definește relația"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Definește relația dintre elementele de date și acțiune"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "Adaugă buclă / serii"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "Adaugă buclă (serii) la model"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "Adaugă condiție"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Adaugă condiție (daca/altfel) la model"
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Adaugă condiție (daca/altfel) la model"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "Elimină element"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "Elimină acțiune/date din model"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Proprietățile modelului (nume, scop, etc.)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "Șterge datele intermediare"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "Șterge datele intermediare definite în model"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Rulează întregul model"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Validează model"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Validează întregul model"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Afișează principala pagină HTML a aplicației de modelare grafică"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Despre Modelare Grafică"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "Afișează informații despre Modelare Grafică"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "A eșuat citirea instrucțiunilor %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Exportă ca imagine"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Exportă modelul ca script Python"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Exportă ca Python"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Compoziție Cartografică"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 #, fuzzy
 msgid "&Insert"
 msgstr "&Instalează"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "desenează chenar în jurul cadrului hărții"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Exportă harta raster"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "Editare hărți vectoriale"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Adaugă legenda"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Adaugă harta raster creată într-un arbore de straturi"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Adaugă condiție"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Adaugă scara și săgeata nord"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Afișează principala pagină HTML a aplicației de modelare grafică"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Închide Compoziție Cartografică"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Afișează informații despre Modelare Grafică"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr "Click aici pentru a afișa motorul de căutare a modulelor"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr "Click aici pentru a ascunde motorul de căutare a modulelor"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "Comandă"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "Fereastra de ieșire"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr "Curăță mesajele de ieșire"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr "Curăță comenzile"
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr "Salvează conținutul ferestrei de ieșire ca fișier"
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr "Anulează rularea comenzii"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "&Fișier \"jurnal\""
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 #, fuzzy
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
@@ -14229,28 +14642,28 @@ msgstr ""
 "Permite salvearea listei de comenzi executate într-un fișier; conținut "
 "salvat atunci când este oprită."
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Salvează fișierul ca..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 msgid "Text files"
 msgstr "Fișiere text"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "Fișiere"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14261,12 +14674,12 @@ msgstr ""
 "\n"
 "Detalii: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr "Comanda de ieșire salvată în '%s'"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14277,99 +14690,139 @@ msgstr ""
 "\n"
 "Detalii: %(error)s"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Comanda de intrare salvată ca '%s'"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Categorie"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Selectează trăsăturile vectoriale"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Crează mapset nou"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Harta vectorială nu este 3D. Operațiune anulată."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Nu s-a putut deschide harta vectorială <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Nici o imagine selectată."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Noua hartă vectorială <%s> a fost creată"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Nu se poate crea harta vectorială <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 #, fuzzy
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Arborele de meniu (dublu click pentru a rula comanda)"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Rulează comanda selectată"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 msgid "User settings"
 msgstr "Setările utilizatorului"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Setat la valorile implicite"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Reveniți la setările implicite și aplicați modificările"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Aplică schimbările pentru sesiunea curentă și închide caseta de dialog"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Aplică modificările pentru această sesiune"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr "Setări aplicate sesiunii curente dar nu salvate"
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Coloana primară nu poate fi un șir gol."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "Setările interfeței grafice"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Setările pentru gestionarea de straturi"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Solicită când este eliminat stratul de hartă din arborele de straturi"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Solicită când se renunță la wxGUI sau se închide afișarea"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Ascunde '%s' tab-ul (necesită restartarea GUI)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Caută modul"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+#, fuzzy
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr "Copiază automat textul selectat în clipboard (în Consola de comandă)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "Setările spațiului de lucru"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Suprimă poziționarea ferestrei de vizualizare"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Suprimă poziționarea ferestrei de manipulare"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Salvează aspectul ferestrei ca implicit"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14378,206 +14831,198 @@ msgstr ""
 "deschiderea ferestrei de vizualizare și folosește-le ca implicit în "
 "următoarea sesiune."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Aspect"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "Font pentru comanda de ieșire:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "Setările de limbă"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "Alege limba (necesită salvarea și repornirea GRASS):"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "Aspectul setărilor"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Lista de elemente:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "Stilul meniului (necesită salvarea și repornirea GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "Înălțimea ferestrei pop-up a hărții de selectie (în pixeli):"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "Tema imaginii (necesită restartarea GUI):"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Caseta de comandă"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "Afișare hartă"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Fontul implicit pentru afișare GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Setările implicite de afișare"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Afișare driver:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Mod de stare:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Permite auto-redarea"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Permite zoom automat pentru layerul selectat"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "Acțiunea roții mouse-ului"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr "Direcția de mișcare a mouse-ului:"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "Setări avansate de afișare"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 "Vizualizarea 3D a adâncimii zonei tampon (valorile posibile sunt 16,24,32)"
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "coeficient"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Setările casetei de dialog a comenzii"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Închide caseta de dialog cand comanda este finalizată cu succes"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Adaugă harta creată în arborele de straturi"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "Permite intrare interactivă"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Nivelul de detaliere:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Straturi"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Setările implicite de afișare"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "Tabelul de culori implicit"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Setări vector"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Afișare:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "culoare fir:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Transparent"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "culoare de umplere"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "Simbol"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Lățimea liniei (în pixeli):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Evidențiază trăsăturile selectate și măriți"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Navigator de date"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Dublu clik pe butonul stâng al mouse-ului:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Codificare (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Întreabă când ștergeți înregistrări de date din tabelă"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Crează tabel"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Coloana primară:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "Setările barei de proiecție"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14596,20 +15041,20 @@ msgstr ""
 "selectare a proiecției în caseta de jos\n"
 "meniu situat în partea de jos a ferestrei de vizualizare.\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Codul EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Șirul Proj.4 (obligatoriu)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "Fișier EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -14617,61 +15062,72 @@ msgstr ""
 "Încărcați codurile EPSG (fi rabdător), introduceți codul EPSG sau inserați "
 "direct șirul Proj.4."
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "&Încarcă codurile EPSG"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "Formatul coordonatelor"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Gestionează proiecțiile"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "Precizia:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Nu s-a putut citi codurile EPGS: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Nu pot fi citite codurile EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr "Codul EPSG %s nu este găsit"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Selectează fontul de afișare prestabilit"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Selectează fontul de afișare prestabilit"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Selectează font:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Codarea caracterelor:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Examplu: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "Gestionează accesul la mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14686,176 +15142,247 @@ msgstr ""
 "   - Puteți scrie numai în mapsetul curent.\n"
 "   - Puteți scrie numai pentru mapseturile pe care le dețineți."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Mapset"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Proprietar"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Interoghează hartă raster"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "Id trăsătură"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Valori"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' copiat în clipboard"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Selectează coloanele vectorului"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Încarcă dimensiunea din coloana:"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Șterge coloana selectată"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Copiază"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Copiază tabel"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Interoghează hartă raster"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Test de normalitate"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Nimic găsit."
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, fuzzy, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+"Nume <%(name)s> nu este un nume valid pentru locație. Vă rugăm utilizați "
+"doar caractere ASCII excluzând %(chars)s și spații."
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 #, fuzzy
 msgid "Fulltext search"
 msgstr "Extindere maximă"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr "%d module potrivite"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Profil"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 msgid "Save current settings"
 msgstr "Salvează setările curente"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 msgid "Delete currently selected settings"
 msgstr "Șterge setările curente selectate"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-msgid "Load settings:"
-msgstr "Încarcă setările:"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+#, fuzzy
+msgid "Load:"
+msgstr "Încarcă"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, python-format
 msgid "Settings <%s> not found"
 msgstr "Setările <%s> nu au fost găsite"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 msgid "Save settings"
 msgstr "Salvează setările"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr "Numele nu a fost introdus, setările nu sunt salvate."
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Setările <%s> există deja. Doriți să suprascrieți setări?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 msgid "No settings is defined. Operation canceled."
 msgstr "Nici o setare nu este definită. Operațiune anulată."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 msgid "Unable to save settings"
 msgstr "Nu se pot salva setările"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Salvează fișier"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Introduceți paramatrii pentru'"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Rulează comanda (Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Animație"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Introduceți paramatrii pentru'"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Închideți această fereastră fără executarea comenzii (Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "Rulează comanda (Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 #, fuzzy
 msgid "Copy the current command string to the clipboard"
 msgstr "Copiază comanda curentă în clipboard (Ctrl+C)"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Afișează pagina de manual a comenzii (Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "Adaugă harta creată la arborele de straturi"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Închide caseta de dialog la final"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
@@ -14863,93 +15390,113 @@ msgstr ""
 "Închide caseta de dialog când comanda a fost finalizată cu succes. Schimbă "
 "setările în caseta Preferences ('Command' tab)."
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' copiat în clipboard"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Necesar"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Opțional"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr "Parametrizare în model"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[multiple]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr "interval valid"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Selectează Culoare"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Alege %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr "&Încarcă"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Redenumește locația"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Salvează ca "
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "sau introduceți valorile interactiv"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Director"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+msgid "Layer id"
+msgstr "Strat id"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Strat nume"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Proiecție"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Manual"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr "Nimic de încărcat."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14957,45 +15504,45 @@ msgid ""
 "Reason: %s"
 msgstr "Nu s-a putut încărca tema imaginii. Motivul: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr "Nimic de salvat."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 msgid "Save input as..."
 msgstr "Salvează datele de intrare ca..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Nici o imagine selectată."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Eroare în %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Nu poate fi analizată comanda '%s'"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "%(cmd)s: parametrul '%(key)s' nu este disponibil"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "Selectează locație și mapset"
 
@@ -15004,48 +15551,48 @@ msgstr "Selectează locație și mapset"
 msgid "Location or mapset is not defined."
 msgstr "Lungimea barei de scară nu este definit"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "Numele locației:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "Numele mapset-ului"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "Selectează mapset în locația GRASS"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Numele mapset-ului"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Nume pentru noua hartă vectorială:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Crează tabela de atribute"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Nume pentru noua hartă vectorială:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Nume pentru noua hartă vectorială:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Nu se poate crea harta vectorială <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, python-format
 msgid ""
 "Invalid or empty key column.\n"
@@ -15054,7 +15601,7 @@ msgstr ""
 "Coloană primară nevalidă sau goală.\n"
 " Nu se poate crea harta vectorială <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -15063,514 +15610,398 @@ msgstr ""
 "Harta vectorială <%s> există deja în mapset-ul curent. Doriți să "
 "suprascrieți?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Încarcă regiunea:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Salvează regiunea:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 msgid "Create or edit imagery groups"
 msgstr "Crează sau editează grupurile de imagini"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr "Aplică modificările pentru grupul selectat și închide caseta de dialog"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr "Aplică modificările pentru grupul selectat"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr "Închide caseta de dialog,  modificările nu sunt aplicate"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 #, fuzzy
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 "Selectează grupul pe care doriți să-l editați sau introduceți un nume pentru "
 "noul grup:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 #, fuzzy
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 "Selectează grupul pe care doriți să-l editați sau introduceți un nume pentru "
 "noul grup:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 msgid "Pattern:"
 msgstr "Model:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Lista hărților"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr "Selectează straturile hărții și le adaugă la listă."
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr "Elimină straturile selectate din listă."
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 msgid "Add selected map layers into group"
 msgstr "Adaugă straturile selectate în grup"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr "Grupul  <%s> a fost modificat, doriți să fie aplicate schimbările?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr "Modificări neaplicate"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, fuzzy, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr "Grupul  <%s> a fost modificat, doriți să fie aplicate schimbările?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Nici o hartă raster selectată!"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr "Nici o modificare nu a fost aplicată în grup <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr "Grupul <%s> a fost creat cu succes."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr "Grupul <%s> a fost modificat cu succes."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Crearea grupului nou  <%s> a eșuat."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr "Modificarea grupului <%s> a eșuat."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 msgid "No group selected."
 msgstr "Nici un grup selectat."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Nici un grup selectat."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr "Utilizarea numelui complet a hărții"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 msgid "3D raster"
 msgstr "3D raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 msgid "Map type:"
 msgstr "Tipul hărții:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 msgid "Select toggle"
 msgstr "Selectează declanșator"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 msgid "Invert selection"
 msgstr "Selecție inversă"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr "Serii dinamice (%s)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Importare multiple"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Lista %s layere"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Lista straturilor"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "Lista %s layere"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-msgid "Layer id"
-msgstr "Strat id"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Strat nume"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Nume pentru harta GRASS (editabilă)"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Proiecție"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "Opțiuni"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Importă straturile selectate"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Adaugă straturile importate în arborele de straturi"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Adaugă straturile importate în arborele de straturi"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Link"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Leagă straturile selectate"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-msgid "No layers selected. Operation canceled."
-msgstr "Nici un layer selectat. Operațiune anulată."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Nu se poate crea profil pe harta raster."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Importă/leago date raster sau vector"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-msgid "Define output format for raster data"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Ignoră modificările și închide caseta de dialog"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Nici o imagine selectată."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Import DXF layers"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Alege fișier DXF pentru import"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Nici o hartă selectată!"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Setează opacitatea "
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "opac"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Setează dimensiunea imaginii"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr "Dimensiunea imaginii"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr "Șablon:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Fereastra de vizualizare"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "Declarație SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "Simboluri"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "Directorul simbolului:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "Simbol nume:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Info"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Drepturi de autor"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Licență"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Rotația"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Autori"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 msgid "Contributors"
 msgstr "Contribuitori"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 msgid "Extra contributors"
 msgstr "Contribuitori suplimentari"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 msgid "Translators"
 msgstr "Traducători"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Traducători"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Site-ul oficial GRASS:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Revizuire SVN"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr "Limba"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr "%s fișier lipsă"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr "Eroare când este citit fișierul '%s'."
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 msgid "Lines:"
 msgstr "Linii:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-mail"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Țara"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr "OSGeo_ID"
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Rotația"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "Fișierul <%s> nu este găsit."
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr "&Următorul"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr "&Precedentul"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Bara de instrumente pentru hartă"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' copiat în clipboard"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' copiat în clipboard"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Elimină straturile selectate din listă."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Grup de straturi:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Elimină straturile selectate din listă."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Strat id"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Elimină straturile selectate din listă."
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Proprietăți vizualizare 3D"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Modifică nivelul opacității"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Modifică nivelul opacității"
@@ -15670,707 +16101,725 @@ msgstr "Suprapuneți elementele de hartă precum scara și legenda"
 msgid "Create histogram with d.histogram"
 msgstr "Crează histograma cu d.histrogram"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Selectează hărți raster la profil"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr "Nici un element selectat"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Tip:"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "GSelectează: element nevalid: %s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 msgid "Output settings"
 msgstr "Setările de ieșire"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
-msgid "Source settings"
-msgstr "Setările sursei"
+#: ../gui/wxpython/gui_core/gselect.py:1397
+#, fuzzy
+msgid "Source input"
+msgstr "Tipul sursei:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 msgid "Native"
 msgstr "Nativ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Fișier"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protocol"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 msgid "Output type"
 msgstr "Tipul de ieșire"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Tipul sursei:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr "Toate fișierele"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Toate fișierele"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Toate fișierele"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Toate fișierele"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Toate fișierele"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Fișier:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr "Alege fișierul pentru import"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Alege directorul de intrare"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr "Extensie:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Alege  fișier"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "Tipul trăsăturii"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Interoghează trăsăturile"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Reconstruiește topologia"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 msgid "Creation options:"
 msgstr "Crearea opțiunilor:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Format:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Protocol:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Previzualizarea nu este disponibilă"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 #, fuzzy
 msgid "No data source defined, settings are not saved."
 msgstr "Nici o sursă data definită, setările nu sunt salvate."
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Setările liniei:"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Nici un layer selectat. Operațiune anulată."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Directorul %s nu există."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Harta vectorială nu este 3D. Operațiune anulată."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Intrument GRASS GIS pentru histogramă (d.histogram)"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Selectează mapsetul sursă:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Mapset:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Cadrul hărții"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Timestamp"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Reconstruiește topologia"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Setările hărții raster"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Necesar"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Lista straturilor"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Alege proiecție"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Setările avansate ale legendei "
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Suprapunere raster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Codul proiecției:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Re-eșanționează folosind cel mai apropiat vecin"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Regresie lineară"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Selectați metoda de interpolare:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Introduceți paramatrii pentru'"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Nu s-a putut citi fișierul <%s>\n"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Formatul coordonatelor"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Adaugă straturile selectate la arborele de strat"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Selectează mapsetul sursă:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Selectează locația sursă:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Strat"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "stil:"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Adaugă buclă / serii"
+msgid "Add default"
+msgstr "implicit"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Setările server-ului"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Server:"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Conectează"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Conectează la server"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Setările avansate ale legendei "
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Setările avansate ale legendei "
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Setările pentru gestionarea de straturi"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Strat nume"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Redenumește"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "Model exportat ca <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Nu s-a putut deschide harta vectorială <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Adaugă straturile selectate la arborele de strat"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Proprietăți vizualizare 3D"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Nume pentru harta raster rezultată:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Setați regiunea"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Încarcă regiunea:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Constrânge rezoluția de afișare la setările de calcul"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Setează regiunea de calcul de la ecran"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Încarcă regiunea:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "&Elimină strat"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Adaugă grid stratului"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "%d hărți șterse din mapset-ul curent"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Mapset <%s> există deja."
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Încarca data..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Nu s-a putut seta"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 msgid "Check all"
 msgstr "Verifică toate"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "Curăță tot"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 msgid "Enter vector attribute values"
 msgstr "Introduceți valori atributelor vectoriale"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr "Format de culoare greșit. Folosește formatul de culoare '0:0:0'"
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Selectează hartă vectorială:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 msgid "Import or export color table:"
 msgstr "Importă sau exportă tabela de culoare:"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 msgid "Choose file to load color table"
 msgstr "Alege fișier pentru a încărca tabela de culoare"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Încarcă"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 "Introduceți un nume de fișier și click pentru a alege fișierul și pentru a "
 "încărca tabela de culoare"
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 msgid "Choose file to save color table"
 msgstr "Alege fișier pentru a salva tabela de culoare"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 "Introduceți un nume de fișier și click pentru a alege fișierul și pentru a "
 "salva tabela de culoare"
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "&Setări"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Încarcă tabela de culoare din fișier:"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 msgid "Load color table from file:"
 msgstr "Încarcă tabela de culoare din fișier:"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 msgid "Save color table to file:"
 msgstr "Salvează tabela de culoare ca fișier:"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 msgid "Reload default table"
 msgstr "Reîncarcă tabelul implicit"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 "Afișează harta previzualizată (extinderea curentă a fereastrei de "
 "vizualizare este utilizată)."
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr "Nici o regulă de culoare validă."
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 msgid "Invalid color table format"
 msgstr "Format nevalid al tabelului de culoare"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr "Valoare nevalidă %s'. Nu a putut fi aplicată tabelului de culoare."
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Crează tabel nou de culoare pentru harta raster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 msgid "Enter raster category values or percents"
 msgstr "Introduceți valorile de categorie raster sau procente"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr "gama"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 "Introduceți valorile de categorie raster sau procente (%(range)s = %(min)d-"
 "%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 msgid "Create new color rules for vector map"
 msgstr "Crează reguli noi de culori pentru harta vectorială"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 msgid "Enter vector attribute values or percents:"
 msgstr "Introduceți valorile atributelor vectorului sau procentele:"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 msgid "Enter vector attribute values:"
 msgstr "Introduceți valorile atributelor vectorului:"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 msgid "Select vector columns"
 msgstr "Selectează coloanele vectorului"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Strat:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Coloana atribut:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr "Încarcă culoare din coloana:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Save color to column:"
 msgstr "Salvează culoare la coloana:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr "Încarcă dimensiunea din coloana:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Save size to column:"
 msgstr "Salvează dimensiunea la coloana:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr "Încarcă lățimea din coloana:"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr "Salvează lățimea la coloana:"
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr "Folosiți coloana de culoare in loc de tabelul de culoare:"
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Adaugă coloana GRASSRGB la tabela de atribute curentă."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 msgid "Import or export color table"
 msgstr "Importă sau exportă tabela de culoare"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16379,11 +16828,11 @@ msgstr ""
 "Conexiunea bazei de date pentru harta vectorială <%s> nu este definită în "
 "fișierul BD.  Doriți să creați și să conectați noua tabelă de atribute?"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr "Nici o conexiune a bazei de date nu este definită"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
@@ -16392,16 +16841,16 @@ msgstr ""
 "Harta selectată <%(map)s>nu este în mapset-ul curent <%(mapset)s>. Tabela de "
 "atribute nu poate fi editată."
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr "%s coloana există deja"
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr "Vă rugăm să așteptați, încărcarea datelor din tabela de atribute..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
@@ -16411,314 +16860,323 @@ msgstr ""
 "va fi consumatoare de timp și poate duce la blocarea calculatorului, doriți "
 "să continuați?"
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr "Prea multe înregistrări"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Introduceți valorile atributelor vectorului sau procentele %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Introduceți valorile atributelor vectorului %s:"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 msgid "Please select column to save values to."
 msgstr "Selectează coloana pentru a salva valorile ca."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr "Nici o coloană definită. Operațiune anulată."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "Calculator GRASS GIS pentru harta raster"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "Calculator GRASS GIS pentru harta raster 3D"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "declarația mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Operatori"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Operanzi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Expresie"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 msgid "Save expression to file"
 msgstr "Salvează expresia ca fișier"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr "Încarcă expresia din fișier"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "exponent"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "împarte"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "plus"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "scade"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "coeficient"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "multiplică"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "deplasare stânga"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "deplasare dreapta"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "deplasare dreapta (nesemnat)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "mai mare de"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "mai mare de sau egal cu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "mai puțin de"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "mai puțin de sau egal cu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "egal cu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "diferit de"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "asemănător cu"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NU"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "la nivel ȘI"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "la nivel SAU"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "ȘI logic"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "ȘI logic (ignoră NULLs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "SAU logic"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "SAU logic (ignoră NULLs)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "condițional"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 msgid "Name for new 3D raster map to create"
 msgstr "Nume pentru harta raster 3D creată nouă"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 msgid "Name for new raster map to create"
 msgstr "Nume pentru harta raster creată nouă"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 msgid "Insert existing 3D raster map"
 msgstr "Inserează o hartă raster 3D existentă"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 msgid "Insert existing raster map"
 msgstr "Inserează o hartă raster existentă"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Inserează funcția mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Generează puncte aleatorii"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 msgid "Add created raster map into layer tree"
 msgstr "Adaugă harta raster creată într-un arbore de straturi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 msgid "You must enter the name of a new raster map to create."
 msgstr "Trebuie introdus numele hărții raster nou creată."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr "Trebuie introdusă o expresie pentru a crea o nouă hartă raster."
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr "Alege un nume de fișier pentru a salva expresia"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr "Fișier al expresiei (*)|*"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr "Alege un nume de fișier pentru a încărca expresia"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' copiat în clipboard"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "Obține & Instalează extensie de la GRASS Addons"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Depozit"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Lista elementelor - click dreapta pentru a șterge"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "Opțiuni"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Obține"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr "Obțina lista modulelor disponibile de la GRASS Addons SVN"
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Instalează"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr "Instalează addon-urile modulului GRASS selectat"
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr "Extensia nu este definită"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr "Obține lista de module de la GRASS-Addons SVN (fi răbdător)..."
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Extensiile addon-urilor"
+
+#: ../gui/wxpython/modules/extensions.py:238
 #, fuzzy
 msgid "Install"
 msgstr "&Instalează"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Arată manual"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Nu se pot salva setările"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Dezinstalează extensiile Addon-urilor GRASS"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 msgid "List of installed extensions"
 msgstr "Lista extensiilor instalate"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "&Dezinstalează"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Dezinstalează extensiile Addon-urilor GRASS selectate"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "&Instalează"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Dezinstalează extensiile Addon-urilor GRASS selectate"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr "Nici o extensie selectată pentru eliminare. Operațiune anulată."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -16731,245 +17189,389 @@ msgstr ""
 "\n"
 "Doriți să eliminați <%(ext)s> extensia?"
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 msgid "Remove extension"
 msgstr "Elimină extensie"
 
-#: ../gui/wxpython/modules/extensions.py:464
-msgid "Extension"
-msgstr "Extensie"
+#: ../gui/wxpython/modules/extensions.py:526
+msgid "Extension"
+msgstr "Extensie"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Importare multiple"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Lista %s layere"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Lista straturilor"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "Lista %s layere"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Nume pentru harta GRASS (editabilă)"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Import"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Importă straturile selectate"
+
+#: ../gui/wxpython/modules/import_export.py:124
+msgid "Source settings"
+msgstr "Setările sursei"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Setările fontului"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Adaugă straturile importate în arborele de straturi"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Adaugă straturile importate în arborele de straturi"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Link"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Leagă straturile selectate"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+msgid "No layers selected. Operation canceled."
+msgstr "Nici un layer selectat. Operațiune anulată."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Nu se poate crea profil pe harta raster."
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Importă/leago date raster sau vector"
+
+#: ../gui/wxpython/modules/import_export.py:642
+msgid "Define output format for raster data"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Ignoră modificările și închide caseta de dialog"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Nici o imagine selectată."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Import DXF layers"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Alege fișier DXF pentru import"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Nici o hartă selectată!"
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Proiecție"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Nume pentru harta GRASS (editabilă)"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "Strat pentru eliminare"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "Importă straturile selectate"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "Nici o bibliotecă python-GRASS nu a fost găsită."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Date de intrare"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Seturi de date punctuale:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "Coloană numerică:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "Nume pentru harta raster rezultată:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "Exportă harta de varianță ca:"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Modulul Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "Gata."
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Ajustarea variogramelor"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Desenează/Recrează variograma"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Tehnici Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "Dimensiunea blocului:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Ajustarea automată a variogramei"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "Model:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Lucru în progres! Nici o funcționalitatea nu este furnizată."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Intrument GRASS GIS pentru histogramă (d.histogram)"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Selectează font pentru textul histogramei"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr "Configurează instrumentele pentru curățarea vectorului"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 msgid "break lines/boundaries"
 msgstr "linii întrerupte/limite"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr "elimină dublicate"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 msgid "remove dangles"
 msgstr "elimină liniile deplasate"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr "modifică liniile neconectate ale limitei în linii"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 msgid "remove bridges"
 msgstr "elimină podurile"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr "schimbă podurile în linii"
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 msgid "snap lines/boundaries"
 msgstr "aplică snap la linii/limite"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr "elimină centroizii dublii ai unui areal"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr "poligoane întrerupte"
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 msgid "prune lines/boundaries"
 msgstr "linii/limite de tip prune"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 msgid "remove small areas"
 msgstr "elimină arealele mici"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr "elimină liniile/limitele de lungime zero"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr "elimină unghiurile și nodurile mici"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr "Alege instrumentele de curățare și setați pragurile"
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 msgid "Select input vector map:"
 msgstr "Selectează harta vectorială de intrare:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 msgid " Feature type: "
 msgstr "Tipul trăsăturii:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 msgid "Select output vector map:"
 msgstr "Selectează harta vectorială de ieșire:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Copiază comanda curentă în clipboard (Ctrl+C)"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr "linie"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "limită"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "centroid"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "suprafață"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr "%s. curățarea instrumentului eliminat, va fi ignorată"
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Vă rugăm să selectați instrumentul de curățare pentru a elimina"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "%s. instrumentul de curățare mutat sus"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "1. instrumentul de curățare nu poate fi mutat sus"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 msgid "Please select a cleaning tool to move up"
 msgstr "Vă rugăm să selectați instrumentul de curățare pentru a muta sus"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "%s. instrumentul de curățare mutat jos"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "Ultimul instrument de curățare nu poate fi mutat jos"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "Vă rugăm să selectați instrumentul de curățare pentru a muta jos"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "curățarea intrumentului: '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr "Pragul pentru %(num)s. instrument '%(tool)s': %(thresh)s"
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 msgid "Name of input vector map"
 msgstr "Nume pentru harta vectorială de intrare"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 msgid "Name for output vector map"
 msgstr "Nume pentru harta vectorială de ieșire"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr "Prag"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr "'%s' nu este definit"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16980,20 +17582,20 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Executarea operațiunilor de curățare selectate..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Comanda de curățare vector copiată în clipboard"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Nu s-a putut deschide fișierul <%s> pentru citire."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -17006,75 +17608,100 @@ msgstr ""
 "\n"
 "Număr de linii omise: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " rând %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: tipul stratului <%(type)s> nu este acceptat"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr "Comandă '%s' eșuată\n"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr "Detalii: %s\n"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Tipul stratutului neacceptat '%s'"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "EROARE: Redarea a eșuat. Detalii: %s"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Redare"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Încarca data..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Redare"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Redare"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Mărește la regiunea implicită"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 "Eroare: Nu s-a putut deschide '%(file)s'. Motiv: %(ret)s. wxGUI închisă.\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Nu s-a putut citi fișierul %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Valoare invalidă: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Nu s-a putut da zoom la harta raster<%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Detalii:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Nu s-a putut da zoom la harta vectorială<%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Nu s-a putut da zoom la harta raster<%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
@@ -17082,115 +17709,85 @@ msgstr ""
 "Nu s-a putut obține extinderea geografică curentă. Forțați închiderea wxGUI. "
 "Vă rugăm rulați manual g.region pentru a rezolva problema."
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "EROARE: Redarea a eșuat. Detalii: %s"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Nu s-a putut reda stratul <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Nu s-a putut reda suprapunerea <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Încarca data..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Redare"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Redare"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Tag necunoscut"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Nu s-a putut crea directorul pentru setări"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Instrumente"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Harta vectorială <%(map)s>: %(msg)s\n"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "eșec în deschiderea '%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "EROARE: Nu s-a putut determina versiunea GRASS. Detalii: %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Nu s-a putut deschide fișierul '%s'\n"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, fuzzy, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr "%(env)s: linii omise - nu s-a putut analiza Motivul: %(e)s\n"
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Cheie duplicată: %s\n"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Nu s-a putut crea fișierul'%s'\n"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17203,177 +17800,182 @@ msgstr ""
 "\n"
 "Opțiune <%(opt)s>: citirea de la intrarea standard nu este acceptată de wxGUI"
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Fișierul <%s> nu este găsit."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d sec"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%(min)d min %(sec)d sec"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 "Vă rugăm să rețineți că datele sunt lăsate în stare de inconsistență și pot "
 "fi corupte"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Comandă eșuată"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Comandă finalizată"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr "Motiv"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Execuție eșuată:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Eroare:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Nu s-a putut executa comanda: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Segment întrerupt"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Lungimea datei"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 msgid "animation"
 msgstr "animație"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Reduce tot cu excepția PERMANENT și curent"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Reduce tot cu excepția PERMANENT "
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Reduce tot cu excepția curent"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Reduce tot"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Extinde tot"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Afișare selectată"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "Clasic (doar etichetele)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "Combinate (etichetele și numele modulelor)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 #, fuzzy
 msgid "Expert (module names only)"
 msgstr "Profesional (doar numele modulelor)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Listează tabelele"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "Mărește și recentrează"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr "Mărește cu mouse-ul"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "Nimic"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "Derulare înainte pentru a mări"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "Derulare inapoi pentru a mări"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "cutie"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "sferă"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "cub"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "romb"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "aster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "histrogramă"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Nu s-a putut citi fișierul <%s>\n"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17384,11 +17986,11 @@ msgstr ""
 "\t\tDetalii: %(detail)s\n"
 "\t\tLinia: '%(line)s'\n"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 msgid "Unable to create settings directory"
 msgstr "Nu s-a putut crea directorul pentru setări"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17399,46 +18001,46 @@ msgstr ""
 "\n"
 "Detalii: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Nu s-a putut seta"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Nu s-au putut analiza setările '%s'"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Definiță baza de date GRASS și numele locației"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Directorul de date GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Proiecția locației"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Numele directorului de locație în directorul de date GIS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "Titlul locației"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "Titlul locației opționa, puteți lăsa câmpul necompletat."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
@@ -17447,24 +18049,24 @@ msgstr ""
 "Nume <%(name)s> nu este un nume valid pentru locație. Vă rugăm utilizați "
 "doar caractere ASCII excluzând %(chars)s și spații."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr "Nume locație invalid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Alegeți directorul de date GIS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Locația există deja în baza de date GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Nu s-a putut crea locația"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
@@ -17472,207 +18074,238 @@ msgstr ""
 "Titlul locației este limitat doar la o singură linie și 256 caractere. "
 "Restul textului va fi ignorat."
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Alegeți metoda pentru crearea unei locații noi"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Selectați codul EPSG a sistemului de referință spațial"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 "Citiți proiecția și termenii de referință dintr-un fișier de date "
 "georeferențiate"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 #, fuzzy
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "Citiți proiecția și termenii de referință dintr-un fișier WKT sau PRJ"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Selectați parametrii sistemului de coordonate dintr-o listă"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 "Specificați proiecția și termenii de referință folosind parametrii PROJ.4"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Creați un sistem generic de coordonate carteziene (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Simplu"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Avansat"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Alege proiecție"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Cod"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Codul proiecției:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Caută în descriere:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Nu s-a putut citi lista: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Alegeți parametrii proiecției"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Selectați datum sau elipsoid (pagina următoare)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Datum asociat cu elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Doar elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Trebuie să introduceți o valoare pentru  %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Introduceți parametrii pentru %s proiecție"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Specifică datum geodezic"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Cod datum:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Specifică elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Bază de date"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Cod elipsoid:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Selectați fișierul georeferențiat"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Fișier georeferențiat:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 #, fuzzy
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "Selectați fișier de tip Well Known Text (WKT) .prj"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Fișier WKT sau PRJ:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Alegeți codul EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Calea către EPSG- fișier coduri:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Alegeți fișier EPSG coduri"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Alegeți codul EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Calea către EPSG- fișier coduri:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Codul EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Alegeți fișier EPSG coduri"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Nu s-a putut citi codurile EPGS: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Alegeți metoda de specificare a parametrilor de georefențiere"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Introduceți parametrii șirului PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Transformarea datumului este necesară."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "Baza de date GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Numele locației:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 msgid "Location Title:"
 msgstr "Titlul locației:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Proiecția:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Definirea PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Doriți să creați locația GRASS <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Creați locație nouă?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Definirea unei locații noi GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17683,15 +18316,15 @@ msgstr ""
 "\n"
 "Detalii:%(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Locație wizard anulată. Locația nu a fost creată. "
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Nu s-a putut crea locație nouă"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17701,116 +18334,121 @@ msgstr ""
 "nevoie să schimbați directorul de date GIS implicit în fereastra de pornire "
 "GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Director de date GIS nou"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Codul EPSG lipsește."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Codul EPSG lipsește."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, python-format
 msgid "File <%s> not found."
 msgstr "Fișierul <%s> nu este găsit."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Setați implicit extinderea și rezoluția regiunii"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Setați regiune"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Locație selectată invalidă."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Regiune invalidă"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Click aici pentru a afișa setările 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Click aici pentru a ascunde setările 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Rânduri: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Coloane: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Celule: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Adâncime: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Celule 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "rezoluția T-B"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Nord"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Vest"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Est"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Sud"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "rezoluția N-S"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "rezoluția E-W"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Valoare invalidă: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Selectați transformare datum"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Selectați din lista transformărilor de referință"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
@@ -17819,7 +18457,7 @@ msgstr ""
 "modificați valoare adâncimii zonei tampon din caseta de dialog Setări GUI > "
 "tabul Afișare hartă > Avansați și restartați GUI."
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
@@ -17828,109 +18466,109 @@ msgstr ""
 "Imagine este prea mare, implementarea OpenGL suportă o dimensiune maximă de  "
 "%d px."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr "Estic"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr "Nordic"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr "Elevație"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 msgid "Surface map name"
 msgstr "Numele hărții de suprafață"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 msgid "Surface map elevation"
 msgstr "Harta suprafeței de elevație"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr "Culoarea hărții de suprafață"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr "distanța XY de la precedentul"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr "distanța XYZ de la precedentul"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 msgid "Distance along surface"
 msgstr "Distanța de-a lungul suprafeței"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 msgid "Distance along exag. surface"
 msgstr "Distanța de-a lungul suprafeței exag."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 msgid "No point on surface"
 msgstr "Nici un punct pe suprafață"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Încărcarea hărții raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Încărcarea hărții raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "eșuat"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Tip de strat neacceptat '%s'"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Nu se poate descărca harta raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Nu se poate descărca harta raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "Hartă raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "descărcat cu succes"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Încărcarea hărții vectoriale  <%(name)s> (%(type)s) a eșuat"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Nu se poate descărca harta vectorială <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Harta vectorială <%(name)s> (%(type)s) a fost descărcată cu succes"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Punctul vectorial nu a fost găsit (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Nu pot fi setate proprietățile stratului (id = %d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17941,46 +18579,46 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr "constantă#"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Vizualizare"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 msgid "Analysis"
 msgstr "Analiză"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 msgid "Animation"
 msgstr "Animație"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "Vizualizare de control"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr "Reglează distanța și perspectiva unghiulară de vedere a imaginii"
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Perspectivă:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "Înclinarea planului de suprafață față de orizontală"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "Înclinarea:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
@@ -17988,23 +18626,23 @@ msgstr ""
 "Reglează înălțimea de vizualizare deasupra suprafeței (unghiul de vedere se "
 "reglează automat pentru a menține același centru de vedere)"
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr "Reglează înălțimea relativă a trăsăturilor peste planul suprafeței"
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Exagerarea Z:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "Aspect:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "aici"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
@@ -18012,19 +18650,19 @@ msgstr ""
 "Permite selectarea unui punct de pe suprafață, care devine noul centru al "
 "vizualizării. Click pe buton si după aceea pe suprafață."
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 msgid "center"
 msgstr "centru"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr "Resetează vizualizare la centrul de vizualizare inițial implicit"
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "de sus"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
@@ -18032,19 +18670,19 @@ msgstr ""
 "Setează privitorul direct pe poziția centrală a scenei.  Acest punct de "
 "vizualizare de sus orientezaă aproximativ nord - sud."
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "resetează"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Resetează vizualizare implicită"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Aspectul Imaginii"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
@@ -18053,224 +18691,224 @@ msgstr ""
 "recomandă să utilizați modul zboară prin (bara de instrumente din fereastra "
 "de vizualizare) pentru a realiza o mișcare fluidă."
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "Înregistrează"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "Rulează"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 msgid "Total number of frames :"
 msgstr "Număr total de cadre:"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "Rata de cadru (FPS):"
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "Cadrele sunt înregistrate cu o frecvență dată (FPS)."
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr "Salvează secvență de imagini"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 msgid "Choose a directory for images"
 msgstr "Alege un director pentru imagini"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 "Numele fișierelor generate va arăta astfel: prefix_1.ppm, prefix_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Suprafață"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 msgid "Constant surface"
 msgstr "Suprafață constantă"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vector"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "Iluminare"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 #, fuzzy
 msgid "Fringe"
 msgstr "Franjuri"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr "Planuri de tăiere"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Mod:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "grosier"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "fin"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "ambele"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Umbrire:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "plat"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Setează tot"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Folosește parametrii de desenat pentru încărcarea tuturor suprafețelor"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr "Mod grosier:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 msgid "resolution:"
 msgstr "rezoluție:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 msgid "style:"
 msgstr "stil:"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 #, fuzzy
 msgid "wire"
 msgstr "fir"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "suprafață"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "Schimbă culoarea firului"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr "Mod fin:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Atributele suprafeței"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Transparență"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Luminozitate"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "hartă"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "dezactivat"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "constantă"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "Modifică pozițiile x,y și z ale suprafeței curente"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Restabilește"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 msgid "Reset to default position"
 msgstr "Restabiliște poziția default"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "Plan de tăiere activ:"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr "curăță"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 msgid "top color"
 msgstr "culoarea de sus"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 msgid "bottom color"
 msgstr "butonul culoare"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "amestec"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "umbrit"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "Orizontal X:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "Setează coordonata X a planului de tăiere curent"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "Orizontal Y:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "Setează coordonata Y a planului de tăiere curent"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 "Efectuează o rotație în jurul axei verticale a planului de tăiere curent"
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 "Efectuează o rotație în jurul axei orizontale a planului de tăiere curent"
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
@@ -18278,359 +18916,359 @@ msgstr ""
 "Setează coordonata Z a planului de tăiere curent (semnificativ doar când "
 "tilt nu este 0)"
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 msgid "Fine resolution:"
 msgstr "Rezoluție fină:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr "Valoare:"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 msgid "Transparency:"
 msgstr "Transparență:"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Arată linii vectoriale"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Linii vectoriale"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Linie:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "lățime:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "culoare:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 #, fuzzy
 msgid "use color for thematic mapping"
 msgstr "Clasifică datele de atribut, de ex. pentru cartografierea tematică"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 #, fuzzy
 msgid "use width for thematic mapping"
 msgstr "Clasifică datele de atribut, de ex. pentru cartografierea tematică"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Setează opțiunile"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "on surface(s):"
 msgstr "pe suprafață:"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Înălțimea deasupra suprafeței:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Arată puncte vectoriale"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "puncte vectoriale"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Pictogramă:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 #, fuzzy
 msgid "use size for thematic mapping"
 msgstr "Clasifică datele de atribut, de ex. pentru cartografierea tematică"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "izosuprafață"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 #, fuzzy
 msgid "slices"
 msgstr "felii"
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Rezoluție:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Lista izosuprafețelor"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr "Arată modelul de iluminare"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr "Poziția sursei de lumină"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr "Ajustează înălțimea luminii"
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "Culoarea luminii și intensitatea"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Luminozitate:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr "Ajustează luminozitatea luminii"
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr "Ambient:"
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr "Ajustează lumina ambientului"
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 #, fuzzy
 msgid "Edges with fringe"
 msgstr "Margini cu franjuri"
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "N && V"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "N && E"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "S && V"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "S && E"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 #, fuzzy
 msgid "Elevation of fringe from bottom:"
 msgstr "Altitudinea franjului din partea de jos:"
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr "Lungimea săgeții (în unități de hartă):"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 msgid "Arrow color:"
 msgstr "Culoarea săgeții:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr "Poziționează săgeată "
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr "Lungimea barei de scară (în unități de hartă):"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 msgid "Scale bar color:"
 msgstr "Culoarea barei de scară:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Poziționează bara de scară"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 "Doriți să înregistrați o animație nouă fără să o salvați pe cea dinainte?"
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr "Animația există deja"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr "Nici un prefix dat fișierului."
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr "Directorul %s nu există."
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Atributele suprafeței de nivel"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr "schimbă la direcția normală"
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr "Valoarea suprafeței de nivel"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr "Atributele rândurilor"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr "Rând paral cu axa:"
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "V"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "S"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr "NV"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr "NE"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr "SE"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr "SV"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Nivel"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Lista de felii"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, fuzzy, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr "Rând paral cu axa:"
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr "Rând paralel cu"
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Scara"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr "Nici unul"
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 msgid "Vector map is 3D"
 msgstr "Harta vectorială este 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 msgid "Vector map is 2D"
 msgstr "Harta vectoriala este 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(features)d trăsături (%(points)d puncte)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "pe suprafață:"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 msgid "range:"
 msgstr "interval:"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr "Marginea de Nord:"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 msgid "South edge:"
 msgstr "Marginea de Sud:"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr "Marginea de Vest:"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr "Marginea de Est:"
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr "Nordul (Y):"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 msgid "Height (Z):"
 msgstr "Înălțimea (Z):"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr "Estul (X):"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr "Marginea de jos:"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr "Marginea de sus:"
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr "Reglează distanța și direcția punctului de vedere a imaginii"
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
@@ -18638,83 +19276,83 @@ msgstr ""
 "Reglează direcția de lumină. Faceți click și trageți pucul pentru a schimba "
 "direcția de lumină."
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr "harta raster 3D <%s> nu a fost găsită"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Setările modului de vizualizare 3D"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr "Reveniți la setările implicite, modificările nu sunt aplicate"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr "valoare:"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr "pas:"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Poziția:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 msgid "x:"
 msgstr "x:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Răsucește:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr "Zboară"
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 msgid "Move exag:"
 msgstr "Exagerarea de deplasare:"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr "Exagerarea:"
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 msgid "Light"
 msgstr "Lumina"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 msgid "z:"
 msgstr "z:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 msgid "wire color:"
 msgstr "culoare fir:"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marker:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Setările de vizualizare 3D salvate ca fișier <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Nici o imagine selectată."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18724,7 +19362,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18736,23 +19374,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Nici o hartă raster selectată!"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18760,7 +19398,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18771,31 +19409,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18810,67 +19448,67 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "puncte vectoriale"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Redenumește coloană"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "culoarea de sus"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Afișează grid"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Nici o categorie"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Nici o categorie"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Exportă harta raster"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Setează opacitatea la <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -18880,212 +19518,233 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Zoom pentru a salva extinderea regiunii"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Hartă raster 3D"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Nici o hartă raster selectată!"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "%d hărți șterse din mapset-ul curent"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Fișierul regiunii <%s> există deja. Doriți să-l suprascrieți?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Harta vectorială <%s> adăugată"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Selectați metoda de interpolare:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Culoare pentru GCP selectate:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Culoarea barei de scară:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Selectează harta destinație pentru a afișa:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Selectați simbol:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Setările axelor"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Selectează hărți raster la profil"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Crearea grupului nou  <%s> a eșuat."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Hartă raster 3D"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Selectează harta destinație pentru a afișa:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Selectează hărți raster la profil"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Clasifică imaginea"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Interoghează rasterul/vectorul selectat"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Elimină straturile selectate din listă."
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Adaugă vertex nou"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Selectează trăsătura"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Mută vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Mută vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Elimină vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Elimină vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Adaugă etichete"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Redenumește mapsetul selectat"
 
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "Unitățile proiecției curente nu sunt acceptate,\n"
+#~ " va fi utilizat metrul!"
+
+#~ msgid "Unsupported units"
+#~ msgstr "Unități neacceptate"
+
+#~ msgid "Map layers"
+#~ msgstr "Straturile tematice ale hărții"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "Caută modul"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Doriți să creați un mapset nou?"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "Mapset <%s> există deja."
@@ -19106,6 +19765,26 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgstr "Închide GUI"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Intrare invalidă"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Previzualizarea nu este disponibilă"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Validarea modelului..."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Redenumește"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Copiază tabel"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Lista %s layere"
 
@@ -19121,23 +19800,42 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "Statistici univariate pentru raster"
 
-#~ msgid "Add condition"
-#~ msgstr "Adaugă condiție"
+#~ msgid "Repository"
+#~ msgstr "Depozit"
 
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Adaugă condiție (daca/altfel) la model"
+#~ msgid "Load settings:"
+#~ msgstr "Încarcă setările:"
 
-#, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Adaugă straturile de legătură în arborele de straturi"
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Nu s-a putut reda stratul <%s>."
 
-#, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Adaugă straturile importate în arborele de straturi"
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Nu s-a putut reda suprapunerea <%s>."
 
 #~ msgid "Unpacks a raster map packed with r.pack."
 #~ msgstr "Despachetează o hartă raster, care a fost împachetatp cu r.pack."
 
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Importă vector realizat într-o versiune mai veche de GRASS"
+
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr ""
+#~ "Importă vector realizat într-o versiune mai veche de GRASS (toate hărțile)"
+
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr ""
+#~ "Convertește toate hărțile vectoriale din versiunile vechi de GRASS din "
+#~ "mapset-ul curent în formatul actual."
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "Importă GPSBabel GPS"
+
+#~ msgid "GEOnet import"
+#~ msgstr "Importă GEOnet"
+
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "Despachetează o hartă raster, care a fost împachetatp cu r.pack."
@@ -19166,31 +19864,6 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgid "Common export formats using OGR"
 #~ msgstr "Exportă formate comune folosind OGR"
 
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr ""
-#~ "Setează regiunea de calcul pentru harta selectată (ignoră valorile nule)"
-
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Importă vector realizat într-o versiune mai veche de GRASS"
-
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr ""
-#~ "Importă vector realizat într-o versiune mai veche de GRASS (toate hărțile)"
-
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr ""
-#~ "Convertește toate hărțile vectoriale din versiunile vechi de GRASS din "
-#~ "mapset-ul curent în formatul actual."
-
-#, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Importă GPSBabel GPS"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Importă GEOnet"
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr "IDW din puncte raster (metodă alternativă pentru puncte rare)"
 
@@ -19201,11 +19874,24 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgstr "Comparația model 'parte cu parte'"
 
 #, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Închide gestionarea tabelei de atribute"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Selectează mapsetul sursă:"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr ""
+#~ "Setează regiunea de calcul pentru harta selectată (ignoră valorile nule)"
+
+#, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "Datele vectoriale <%(name)s> au fost importate cu succes."
 
-#~ msgid "Volume"
-#~ msgstr "Volume"
+#, fuzzy
+#~ msgid "Add default servers"
+#~ msgstr "Adaugă buclă / serii"
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "Alege proiecția locației și mapset-ului"
@@ -19255,9 +19941,6 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgid "Start &GRASS"
 #~ msgstr "Pornește &GRASS"
 
-#~ msgid "&Create mapset"
-#~ msgstr "&Crează mapset"
-
 #~ msgid "&Location wizard"
 #~ msgstr "&Locație wizard"
 
@@ -19280,16 +19963,30 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgid "Warning: "
 #~ msgstr "Atenție"
 
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "Selectează locație și mapset"
-
 #~ msgid "Starting GRASS for the first time"
 #~ msgstr "Pornește GRASS pentru prima dată"
 
+#, fuzzy
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Dezvoltă harta raster"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Adaugă straturile de legătură în arborele de straturi"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Adaugă straturile importate în arborele de straturi"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Importă hărți vectoriale realizate în versiuni mai vechi de GRASS."
+
 #~ msgid "Vector to volume"
 #~ msgstr "Vector în volume"
 
+#~ msgid "Sites to vector"
+#~ msgstr "Situri în vector"
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "Calculator raster"
@@ -19312,11 +20009,8 @@ msgstr "Redenumește mapsetul selectat"
 #~ msgid "Voxel statistics"
 #~ msgstr "Statistici pentru voxel"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Importă hărți vectoriale realizate în versiuni mai vechi de GRASS."
-
-#~ msgid "Sites to vector"
-#~ msgstr "Situri în vector"
+#~ msgid "Volume"
+#~ msgstr "Volume"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -19356,6 +20050,5 @@ msgstr "Redenumește mapsetul selectat"
 #~ "Calculează statistici univariate din celulele 3D nenule ale hărții "
 #~ "raster3d."
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Închide gestionarea tabelei de atribute"
+#~ msgid "Digitize"
+#~ msgstr "Digitizează"
diff --git a/locale/po/grasswxpy_ru.po b/locale/po/grasswxpy_ru.po
index 54adcf5..6c41ee6 100644
--- a/locale/po/grasswxpy_ru.po
+++ b/locale/po/grasswxpy_ru.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_ru\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2008-10-10 19:44-0600\n"
 "Last-Translator: Maxim Dubinin <sim at gis-lab.info>\n"
 "Language-Team: Russian <grass-translations at lists.osgeo.org>\n"
@@ -16,53 +16,53 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: KBabel 1.9.1\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "Выберите каталог с данными GRASS"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Выбрать тип слоя и область/набор"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "Выбирите область проекта и набор"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Вход в сессию GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "Просмотр"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -70,158 +70,158 @@ msgstr ""
 "в выбранной области"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Переименовать выбранную область"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Удалить"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Удалить выбранную область"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "&Переименовать"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Переименовать выбранный набор"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Удалить"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Удалить выбранный набор"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Менеджер атрибутивных таблиц GRASS GIS"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Вход в сессию GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Ошибка"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "ОШИБКА: Область <%s> не найдена"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "ОШИБКА: Набор <%s> не найден"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Ошибка: "
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "Вы хотите создать новую область GRASS <%s>?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Создать новый набор"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Область <%s> создана"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "Вы хотите установить охват и разрешение региона сейчас?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "Добавление нового объекта к векторному слою <%s> не выполнено."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, fuzzy, python-format
 msgid ""
 "Current name: %s\n"
@@ -231,12 +231,12 @@ msgstr ""
 "Текущее имя: %s\n"
 "Введите новое имя:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Сообщение"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -244,7 +244,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr "Невозможно создать новую таблицу. Таблица <%s> уже есть в базе данных."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -252,7 +252,7 @@ msgid ""
 "%s"
 msgstr "Невозможно переименовать набор"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -260,7 +260,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr "Невозможно создать новую таблицу. Таблица <%s> уже есть в базе данных."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -268,14 +268,14 @@ msgid ""
 "%s"
 msgstr "Невозможно переименовать область"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -287,11 +287,11 @@ msgstr ""
 "\n"
 "ВСЕ СЛОИ входящие в состав набора будут УДАЛЕНЫ!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Невозможно удалить набор"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -302,41 +302,41 @@ msgstr ""
 "\n"
 "ВСЕ СЛОИ входящие в состав области будут УДАЛЕНЫ!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Невозможно удалить область"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "Выберите каталог с ГИС-данными:"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Введите имя для нового набора:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -345,17 +345,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Переименовать выбранный набор"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Невозможно создать новый набор: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -367,11 +367,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -379,7 +379,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -387,19 +387,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "Невозможно масштабировать векторный слой <%s>."
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "Неправильный регион"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -424,190 +424,190 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Панель инструментов привязки"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "настройки векторизации"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Распечатать дисплей"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Показать регион"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Показать регион"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Импорт векторного слоя"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Проанализировать"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 "Необходимо как минимум %d точек привязки. Операция не может быть выполнена."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Гистограмма"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Векторные точки"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -616,666 +616,667 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Загрузка растрового слоя"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Загрузка растрового слоя"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Создать/редактировать группу..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Классифицировать изображение"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Классифицировать изображение"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Цвет"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Масштабировать до выбранного слоя"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Введите имя для нового набора:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Сохранить файл как..."
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Создать атрибутивную таблицу"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Импорт атрибутивных таблиц в различных форматах."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Изменить уровень непрозрачности"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Удалить выбранный слой"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "Добавить RGB растр"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Предупреждение"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Предпросмотр"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Масштабировать до выбранного слоя"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "Добавить 3D растровый слой"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS дисплей слоя: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 #, fuzzy
 msgid "No raster or vector map layer selected for querying."
 msgstr "Векторные слои для выборки не выбраны."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Создать новую область?"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Простой"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 #, fuzzy
 msgid "Close"
 msgstr "Код"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Пропущен номер категории (поле %s)."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "грубо:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "грубо:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Цвет:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Индекс формы"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "Ширина линии"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Размер:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Запрос к растровому/векторному слою (слоям)"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Запрос к выбранному растровому или векторному слою (слоям)"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "точно:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Укажите код EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Контрольные точки"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "Список"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "Отобразить слой"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 #, fuzzy
 msgid "GCP Manager toolbar"
 msgstr "Управлять цветами"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Параметры страницы"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Предварительный просмотр"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Распечатать дисплей"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 "Масштабировать до расчетного региона (устанавливается с помощью g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Масштабировать до региона по умолчанию"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Масштабировать до сохраненного региона"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Сохранить геометрию дисплея в регион с названием"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "Правильный диапазон"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "ошибка RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Установки для привязки"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Отмена настроек привязки."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Выбрать тип слоя и область/набор"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Тип слоя для привязки"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "растр"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "вектор"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Выбрать исходную область:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Выбрать исходный набор:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Вы должны указать подходящую область перед выбором набора"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 "Вы должны указать подходящую область и набор для того, чтобы продолжить "
 "работу"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Выбрать изображение/слой для привязки"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Если группа не создана, создать новую"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 #, fuzzy
 msgid "Add vector map to group..."
 msgstr "Добавить векторный слой"
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Расширение для выходных слоев:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 "Вы должны указать правильную группу изображений/слоев для того, чтобы "
 "продолжить работу"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Вы должны указать расширение слоя для того, чтобы продолжить работу"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 #, fuzzy
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Выбрать изображение/слой для отображения и создания точек привязки"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "Выбрать исходный набор:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Выбрать растровый слой для профилирования"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Выбрать растровый слой для профилирования"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 #, fuzzy
 msgid "You must select a source map in order to continue"
 msgstr ""
 "Вы должны указать правильное изображение/слой для того, чтобы продолжить "
 "работу"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 #, fuzzy
 msgid "Manage Ground Control Points"
 msgstr "Контрольные точки"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr ""
 "Необходимо как минимум %d точек привязки. Операция не может быть выполнена."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "Конвертировать координаты"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1284,28 +1285,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Ошибка при записи файла POINTS"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, fuzzy, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "файл POINTS сохранен"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Ошибка при чтении файла POINTS"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1319,284 +1320,284 @@ msgstr ""
 "7+ точек нужно для 2-го порядка, и\n"
 "10+ точек нужно для 3-го порядка."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 #, fuzzy
 msgid "Rectifying images, please wait..."
 msgstr "Ректифицировать изображение или растр"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "Трансформировать изображение"
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Ректифицировать изображение или растр"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, fuzzy, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Добавление нового объекта к векторному слою <%s> не выполнено."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "Настройки Менеджера слоев"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "Установить точки привязки (GCPs)"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "use"
 msgstr "снять"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "Целевая группа"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "Целевая группа"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Прямая ошибка"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Обратная ошибка"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 #, fuzzy
 msgid "Create vector map group"
 msgstr "Создать новый векторный слой"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 #, fuzzy
 msgid "Select vector map(s) to add to group:"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Редактировать GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 #, fuzzy
 msgid "Ground Control Point No."
 msgstr "Точка привязки"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Применить изменения для существующей сессии"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Применить и сохранить изменения для файла пользовательских настроек (будет "
 "по-умолчанию для следующих сессий)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Закрыть диалог"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Символизация"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Настройки символа"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "Очистить выделенные GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "Цветовые правила"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "Показать линии"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "Настройки символа"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "Панель инструментов привязки"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Выбрать метод трансформации для растровых слоев"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "1-ый уровень"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "2-ой уровень"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "3-ий уровень"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "обрезать по расчетному региону целевой области"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Настройки профиля сохранены в файл '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Ошибка векторизации"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Панель инструментов векторизации"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1604,371 +1605,371 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Обновить категории"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Векторный слой не выбран для редактирования."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "диалог массовой подписи Z"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "настройки векторизации"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Применить изменения для этой сессии"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "Закрыть диалог и сохранить изменения в файле настроек пользователя"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Закрыть диалоговое окно и игнорировать изменения"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Общие"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Ширина линии"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Прилипание"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Порог прилипания"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Прилипать также к узлу"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Порог прилипания равен %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Выбрать векторные объекты"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Выберите пороговое значение"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Выбрать только объекты в пределах охвата"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr "По умолчанию выбираются все объекты пересекающиеся с охватом"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Проверка дубликатов"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Создать новую границу"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Разбить линии в местах пересечения"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Создать новый объект"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Сохранить изменения при выходе"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Запросы"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Выбрать инструмент запросов"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Выбрать прямоугольником"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "длина"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Выбрать линии"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "короче чем"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "длиннее чем"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "висящий узел"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Выбрать висящие узлы"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Атрибуты"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Создать новый объект"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Добавить новую запись в таблицу"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Слой"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Категория"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Режим"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Использовать следующий "
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Номер категории"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Режим категорий"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Ручной ввод"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Нет категорий"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Удалить существующий объект(ы)"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Удалить запись из таблицы"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "Запрос атрибутов"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "Параметры"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "Создать новую линию"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "Создать новую границу"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Подсветка"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Подсветить (дубликаты)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Точка"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Линия"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Граница (без полигона)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Граница (один полигон)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Граница (два полигона)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Центроид (в полигоне)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Центроид (вне полигона)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Центроид (дубликаты в полигоне)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Узел (одна линия)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Узел (две линии)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Узел"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Полигон (замкнутая граница + центроид)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Направление"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Прилипание отключено"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "Порог прилипания равен %(value).1f %(units)s (основано на расчетном "
 "разрешении)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Настройки инструмента векторизации сохранены в файл <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "настройки векторизации"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Векторный слой не выбран для редактирования."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1976,80 +1977,80 @@ msgid ""
 "Reason: %s"
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr ""
 "Необходимо как минимум %d точек привязки. Операция не может быть выполнена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "ID объекта:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Создать точки вдоль линий"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Список категорий - нажмите правую кнопку для удаления"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Добавить новую категорию"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Применить изменения"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Игнорировать изменения и закрыть диалог"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Применить изменения и закрыть диалог"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "ID объекта:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2060,263 +2061,263 @@ msgstr ""
 "Номер слоя и категории должны быть целыми числами.\n"
 "Номер слоя должен быть больше нуля."
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Удалить выбранное"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Удалить все"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Загрузить заново"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Невозможно обновить векторный слой."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d линии выбраны для массового подписывания z"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Установить значение"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Начальное значение"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Шаг"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Список дубликатов"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "ID объекта"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Слой (Категории)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Создать новую точку"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Слева: новая точка"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Создать новую линию"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 "Слева: новая точка; В середине: отменить последнюю точку; Справа: завершить "
 "линию"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Создать новую границу"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Оцифровать новый центроид"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Создать новую границу"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Построить полилинии из линий или границ."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Слева: Выбрать; В середине: Отменить выбор; Справа: Подтвердить"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Прилепить выбранные линии/границы (только в узлах)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Удалить выбранные записи"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Показать/обновить атрибуты"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Слева: Выбрать"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Показать/обновить категории"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Развернуть выбранные линии/границы"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Прилепить выбранные линии/границы (только в узлах)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Переместить узел"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Переименовать выбранный набор"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "Ошибка векторизации"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "Ошибка векторизации"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "Ошибка векторизации"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Дополнительные инструменты (копировать, повернуть, подключить, и др.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Отменить действие"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Отменить предыдущие изменения"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Отменить предыдущие изменения"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Разделить выбранные линии/границы в месте пересечения"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Соединить выбранные линии/границы"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Скопировать категории"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Копировать объекты из (фонового) векторного слоя"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Показать атрибуты"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Конвертация типа объекта"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Развернуть выбранные линии/границы"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Объединить выбранные линии/границы"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Прилепить выбранные линии/границы (только в узлах)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Разделить линию/границу"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Запрос по объектам"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Массовое подписывание Z 3D линий"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 #, fuzzy
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2325,68 +2326,69 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "настройки векторизации"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 "Пожалуйста, подождите, векторный слой <%s> открывается для редактирования..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Ошибка векторизации"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Сохранить изменения в векторном слое <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Сохранить изменения?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Пожалуйста, подождите, производится закрытие и перестройка топологии для "
 "векторного слоя <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Закрыть диалоговое окно после окончания операции"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Новый векторный слой"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Измерить расстояние"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2395,194 +2397,213 @@ msgstr ""
 "Щелкните и перетащите левой кнопкой мыши для измерения. %sЩелкните дважды "
 "левой кнопкой, чтобы очистить."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Измерить расстояние"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Измерить расстояние:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "Легенда"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "Измерить расстояние"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Предупреждение"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Измерить расстояние:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Легенда"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Добавить масштабную линейку и указатель на север"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Отобразить слой"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' скопировано в буфер обмена"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Показать настройки"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Добавить оверлей"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Серии растров"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "Загрузка обновление данных, пожалуйста подождите ..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Масштабировать до охвата сохраненных регионов"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 #, fuzzy
 msgid "Save display extents to region file"
 msgstr "Сохранить геометрию дисплея в регион с названием"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Предупреждение"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "Показать расчетный охват"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Тест"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Установите шрифт"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2590,173 +2611,535 @@ msgstr ""
 "Перетащите текст (в режиме указателя) в нужное место.\n"
 "Для изменения параметров используйте двойной клик мышкой"
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "Помощь ГИС GRASS"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Невозможно прочитать список: %s"
+
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "Векторный слой <%s> в текущем наборе уже существует. Перезаписать?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Перезаписать?"
+
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Model"
-msgstr "Режим"
+msgid "GRASS locations in {}"
+msgstr "Выбирите область проекта и набор"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
 #, fuzzy
-msgid "Variables"
-msgstr "Список таблиц"
+msgid "New name"
+msgstr "Переименовать"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Переименовать набор"
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Результат команды"
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Правильный диапазон"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Переименовать"
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "Векторный слой не выбран для редактирования."
+
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "Копировать таблицу"
+
+#: ../gui/wxpython/datacatalog/tree.py:670
+#, fuzzy
+msgid "Failed to copy map: new map has the same name"
+msgstr "Невозможно прочитать коды EPSG: %s"
+
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "Векторный слой <%s> в текущем наборе уже существует. Перезаписать?"
+
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Дисплей"
+
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:729
+#, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "обрезать по расчетному региону целевой области"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
+msgid ""
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "Сохранить изменения в векторном слое <%s>?"
+msgid "Delete map"
+msgstr "Удалить набор"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Удалить"
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr "Проект не пуст. Сохранить текущие настройки в файл проекта?"
+msgid "g.remove completed"
+msgstr "Проверка дубликатов"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Дисплей"
+
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:827
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Удалить результат фильтрации"
+msgid "Moving maps not implemented"
+msgstr "Показать расчетный охват"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "Сохранить изменения в векторном слое <%s>?"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
 
-#: ../gui/wxpython/gmodeler/frame.py:323
+#: ../gui/wxpython/datacatalog/tree.py:910
 #, fuzzy
-msgid "Delete intermediate data?"
-msgstr "Удалить результат фильтрации"
+msgid "&Copy"
+msgstr "Копировать"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "Растр"
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:936
 #, fuzzy
-msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
-msgstr "Проект не пуст. Сохранить текущие настройки в файл проекта?"
+msgid "&Display layer"
+msgstr "Отобразить слой"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:954
 #, fuzzy
-msgid "Create new model?"
-msgstr "Создать новый набор"
+msgid "&Switch mapset"
+msgstr "Создать набор"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/frame.py:36
 #, fuzzy
-msgid "Choose model file"
-msgstr "Выбрать файл DXF:"
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS %s Калькулятор слоев"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr ""
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS %s Калькулятор слоев"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
 #, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "Файл проекта <%s> уже существует. Перезаписать этот файл?"
+msgid "Current mapset is <%s>."
+msgstr "Изменить текущий набор."
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Save model"
-msgstr "Режим категорий"
-
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, fuzzy, python-format
-msgid "File <%s> saved"
-msgstr "файл POINTS <%s> сохранен"
+msgid "Data catalog"
+msgstr "Сечение"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "Выберите файл для сохранения текущего проекта"
+msgid "Reload GRASS locations"
+msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
 #, fuzzy
-msgid "Validating model..."
-msgstr "Правильный диапазон"
+msgid "Click to allow editing other mapsets"
+msgstr "Нажмите, чтобы отредактировать настройки слоя"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, python-format
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
 msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Набор инструментов для правки топологии векторного слоя."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
-#, python-format
-msgid "Model exported to <%s>"
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/rdigit/controller.py:303
 #, fuzzy
-msgid "Comment:"
-msgstr "Команда"
+msgid "Do you want to save changes?"
+msgstr "Сохранить изменения в векторном слое <%s>?"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/rdigit/controller.py:304
 #, fuzzy
-msgid "Add comment"
-msgstr "Добавить командный слой"
+msgid "Save raster map changes"
+msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
-msgstr ""
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Невозможно создать профиль растрового слоя."
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Не могу создать новый векторный слой <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Отрисовать"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Создать новую таблицу цветов используя цветовые правила"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Создать новый векторный слой"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Перекодированная растровый слой:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Выберите векторный слой"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Перекодированная растровый слой:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Рассчитать индекс формы для растрового слоя"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "Векторный слой <%s> в текущем наборе уже существует. Перезаписать?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Создать новый объект"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Создать новую линию"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Создать новую точку"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Залатать растровые слои"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Ошибка векторизации"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Перекодированная растровый слой:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Значения ячеек"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Ширина:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "Растровый слой"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "Помощь ГИС GRASS"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "Режим"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "Список таблиц"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Результат команды"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "Сохранить изменения в векторном слое <%s>?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr "Проект не пуст. Сохранить текущие настройки в файл проекта?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Удалить результат фильтрации"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "Сохранить изменения в векторном слое <%s>?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "Удалить результат фильтрации"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr "Проект не пуст. Сохранить текущие настройки в файл проекта?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "Создать новый набор"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "Выбрать файл DXF:"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "Файл проекта <%s> уже существует. Перезаписать этот файл?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "Режим категорий"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, fuzzy, python-format
+msgid "File <%s> saved"
+msgstr "файл POINTS <%s> сохранен"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "Выберите файл для сохранения текущего проекта"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+#, fuzzy
+msgid "Validating model..."
+msgstr "Правильный диапазон"
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Команда"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Добавить командный слой"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2767,420 +3150,418 @@ msgstr ""
 "Не удалось прочитать файл <%s>. Поврежденный файл, невозможно обработать "
 "документ XML."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 #, fuzzy
 msgid "Please wait, loading model..."
 msgstr "Ждите, загружаются данные..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 #, fuzzy
 msgid "Writing current settings to model file failed."
 msgstr "Сохранение текущих настроек в файл проекта не удалось (%s)."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Невозможно открыть файл <%s> для чтения."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Удалить"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "Список таблиц"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "Таблица"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Добавить подписи"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Установите шрифт"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "Точка привязки"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "Установить точки привязки (GCPs)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Свойства"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Слой"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 #, fuzzy
 msgid "List of variables - right-click to delete"
 msgstr "Список категорий - нажмите правую кнопку для удаления"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Тип данных"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "Установить значение"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Описание"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "Добавить новый узел"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Указатель"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Регион"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "Набор"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "Профиль"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 #, fuzzy
 msgid "List of items - right-click to delete"
 msgstr "Список категорий - нажмите правую кнопку для удаления"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "Слой"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Параметры"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Команда"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "Описание слоя"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Выполнить"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "Описание слоя"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "Файл проекта <%s> уже существует. Перезаписать этот файл?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "Сохранить файл как..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "Список таблиц"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 #, fuzzy
 msgid "Valid:"
 msgstr "Правильный диапазон"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "Неправильное значение: %s "
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "Индекс формы"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Ширина:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Высота:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "База данных"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Тип"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "Растр"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "3d растр"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "Вектор"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Таблица"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Команда"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Метаданные"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "Команда"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Разрешить перезаписывать файлы поверх уже созданных"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "Описание"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Добавить новый узел"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3188,101 +3569,101 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "Растровый слой"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "3d растровый слой"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "Векторные точки"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "неизвестно"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "Опционный"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "Параметры рельефа"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Удалить результат фильтрации"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Показать легенду"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3290,260 +3671,260 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "В"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "База данных"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Команда"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Опционный"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "Опционный"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "Список дубликатов"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, fuzzy, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Невозможно создать новую таблицу. Таблица <%s> уже есть в базе данных."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "Удалить все"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 #, fuzzy
 msgid "No"
 msgstr "С:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "Невозможно открыть файл <%s> для чтения."
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "Разрешение:"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Помощь ГИС GRASS"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "Предварительный просмотр"
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3551,1317 +3932,1307 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Предварительный просмотр"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "Панель инструментов векторизации"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "Сохранить файл как..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr "Ввести параметры для"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Добавить подписи"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "Точка"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "Параметры"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "Параметры"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "Параметры"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "Параметры"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "Сбросить"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Файл"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "Параметры"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 #, fuzzy
 msgid "degree"
 msgstr "dtree"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Невозможно выгрузить растровый слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Положение:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Конвертировать координаты"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "Выберите папку:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 #, fuzzy
 msgid "Close dialog and apply changes"
 msgstr "Закрыть диалоговое окно и игнорировать изменения"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Ширина:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Высота"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Высота"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Верх"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Низ"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "Неправильный регион"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Точка"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Провести анализ ландшафта"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 #, fuzzy
 msgid "custom"
 msgstr "Заданный минимум"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "Настройки растра"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "Масштаб карты"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "Управление проекциями"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "Масштабировать до выбранного слоя"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "Масштабировать до сохраненного региона"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "Управление проекциями"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "Набор:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Регион"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "Масштаб карты"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 #, fuzzy
 msgid "Center:"
 msgstr "Отрисовать"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "E:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Стиль:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "1-ый уровень"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 #, fuzzy
 msgid "border width (pts):"
 msgstr "Ширина линии (в пикселях)"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Сечение"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Растровый слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "Растровый слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "Растровый слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "растр"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "Добавить группу слоев"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "Точка"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "линия румба"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Тип данных"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Добавить"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Очистить векторный слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Удалить"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Свойства"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Настройки растра"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Настройки вектора"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Свойства"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Сечение"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "ID объекта:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "Добавить центроиды"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "Редактировать линию/границу"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Сечение"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Соединение с базой данных не определено в файле DB."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "&Удалить слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Маскировать"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Закрыть текущий файл проекта"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Цвет"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "линия румба"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Ширина:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Файл"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "Выберите папку:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Цветовые правила"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Стиль линии"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "символ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "WKT файл:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Просмотр"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Размер"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "Размер:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Удалить все поля"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Изменить масштаб"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Удалить все поля"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Ширина линии (в пикселях)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Интерактивное редактирование значений категорий"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Стиль линии"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "aster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Ширина линии (в пикселях)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "Серии растров"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "Показать легенду"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "Вектор в растр"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "Показать легенду"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "Расширенные настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "Управлять"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "Векторные линии"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "Показать векторные линии"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "Наложить векторные слои"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 #, fuzzy
 msgid "Vector map"
 msgstr "Новый векторный слой"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "Добавить подписи"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Положение"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "Объемы"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "Добавить поле"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Настройки шрифта"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "растр"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 #, fuzzy
 msgid "use border color:"
 msgstr "использовать| координата X"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "Цвет фона:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-#, fuzzy
-msgid "Unsupported units"
-msgstr "Тип слоя не поддерживается '%s'"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "длина"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr "По умолчанию"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Стиль"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "Тип"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "Легенда"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "Тест"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Введите текст:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "Настройки текста"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "Подсветка"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "1-ый уровень"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Слева: новая точка"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "Настройки текста"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "Изображения"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "Масштаб и стрелка на север"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "Выброс"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "Масштаб и стрелка на север"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "Показать настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "символ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Выбрать прямоугольником"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "Цвет линии"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "прозрачный"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "Масштаб и стрелка на север"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "Размер:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Настройки символа"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "Изменить настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "Изменить настройки"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "Ширина линии (в пикселях)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "подписи вектора"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 #, fuzzy
 msgid "Generate PostScript output"
 msgstr "Программа экспорта карты в PostScript."
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 #, fuzzy
 msgid "Generate PDF output"
 msgstr "Создать точки"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "Масштабировать до региона по умолчанию"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "Удалить выбранную область"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "Показать сетку"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Добавить легенду"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Легенда"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "Выбрать висящие узлы"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Добавить оверлей"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Добавить подписи"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Менеджер атрибутивных таблиц GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4870,154 +5241,148 @@ msgstr ""
 "Соединение с базой данных для векторного слоя <%s> не определено в файле DB. "
 "Вы можете создать новое соединение в закладке 'Управление слоями'."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Загрузка атрибутивных данных, пожалуйста подождите..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Пролистать данные"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Управление таблицами"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Управление слоями"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 #, fuzzy
 msgid "Close Attribute Table Manager"
 msgstr "Менеджер атрибутивной таблицы"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Удалить выбранный набор"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Число загруженных записей: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Соединение с базой данных"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Запрос"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 #, fuzzy
 msgid "Set SQL statement to default"
 msgstr "Установить по умолчанию"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Менеджер атрибутивной таблицы"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 #, fuzzy
 msgid "Close the dialog"
 msgstr "Закрыть диалог"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 #, fuzzy
 msgid "Columns"
 msgstr "Объемы"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Сечение"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 #, fuzzy
 msgid "Values"
 msgstr "Объемы"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 #, fuzzy
 msgid "Get all values"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 #, fuzzy
 msgid "Get sample"
 msgstr "Установить значение"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Экспорт MPEG-1"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 #, fuzzy
 msgid "Close dialog on apply"
 msgstr "Закрыть окно после отправки."
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Конструктор SQL GRASS: %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 #, fuzzy
 msgid "Verify"
 msgstr "Провести геометрическую коррекцию"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 #, fuzzy
 msgid "Verify SQL statement"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 #, fuzzy
 msgid "SQL statement not verified"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 #, fuzzy
 msgid "SQL statement is not valid"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -5025,78 +5390,78 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 #, fuzzy
 msgid "SQL statement is valid"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Направление"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Загрузка данных..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Поле <%(column)s> не найдено в таблице <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Возможно отобразить только 256 полей."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Поле <%(column)s> не найдено в таблице <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Предел - 100000 записей."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 #, fuzzy
 msgid "Unknown value"
 msgstr "Неизвестно"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, fuzzy, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5109,207 +5474,207 @@ msgstr ""
 "\n"
 "Подробности: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Растровый калькулятор"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Общая статистика"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Добавить поле"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "длина"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Стиль линии"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "Ширина линии"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Добавить поле"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Невозможно добавить поле в таблицу. Не определено имя поля."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Поле <%(column)s> уже существует в таблице <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 "Атрибутивные данные -  для редактирования/управления записями нажмите правую "
 "кнопку мыши"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Таблица"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "SQL-запрос"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Простой"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Применить выражение SELECT и перезагрузить записи данных"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Конструктор SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Конструктор SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Редактировать выбранную запись"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Вставить новую запись"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Удалить выбранные записи"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Удалить все записи"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Выбрать все"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Снять выделение со всего"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 #, fuzzy
 msgid "Highlight selected features"
 msgstr "Подсветить (дубликаты)"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 #, fuzzy
 msgid "Highlight selected features and zoom"
 msgstr "Выделить выбранное и масштабировать"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 #, fuzzy
 msgid "Extract selected features"
 msgstr "Выбранный фрагмент"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 #, fuzzy
 msgid "Delete selected features"
 msgstr "Удалить выбранный слой"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Обновить существующую запись"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, fuzzy, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Приведение  '%(value)s' к %(type)s прервано с ошибкой."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Невозможно обновить существующую запись."
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Запись с номером категории %d уже существует в таблице."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Пропущен номер категории (поле %s)."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Невозможно вставить новую запись."
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5318,11 +5683,11 @@ msgstr ""
 "Выбранные записи (%d) будут навсегда удалены из таблицы. Вы хотите их "
 "удалить?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Удалить записи"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5330,16 +5695,16 @@ msgid ""
 msgstr ""
 "Все записи (%d) будут навсегда удалены из таблицы. Вы хотите их удалить?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 #, fuzzy
 msgid "Nothing to delete."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5350,7 +5715,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5363,33 +5728,33 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 "Таблица <%s> - нажмите правую кнопку мыши для удаления столбца (столбцов)"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Объемы"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "длина"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Переименовать поле"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Невозможно переименовать поле. Не задано имя поля."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5398,7 +5763,7 @@ msgstr ""
 "Невозможно переименовать поле <%(column)s> в  <%(columnTo)s>. Поле уже "
 "существует в таблице <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5407,15 +5772,15 @@ msgstr ""
 "Невозможно переименовать поле. Поле <%(column)s> не существует в таблице <"
 "%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Удалить выбранное поле"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Удалить все поля"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5424,12 +5789,12 @@ msgstr ""
 "Выбранные записи (%d) будут навсегда удалены из таблицы. Вы хотите их "
 "удалить?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 #, fuzzy
 msgid "Drop column(s)"
 msgstr "Удалить все поля"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, fuzzy, python-format
 msgid ""
 "Selected columns\n"
@@ -5439,122 +5804,122 @@ msgstr ""
 "Выбранные записи (%d) будут навсегда удалены из таблицы. Вы хотите их "
 "удалить?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Список слоев"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Удалить связанную атрибутивную таблицу (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Объем данных"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Драйвер"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "База данных"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Ключ"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Описание слоя"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Ключевое поле"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Описание таблицы"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Название таблицы"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Создать таблицу"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Добавить слой"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Установить по умолчанию"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "Слой для удаления"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 #, fuzzy
 msgid "Modify layer"
 msgstr "&Изменить слой"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Изменить слой"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 "Невозможно создать новую таблицу. Пропущено название таблицы или название "
 "ключевого поля."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "Невозможно создать новую таблицу. Таблица <%s> уже есть в базе данных."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5563,42 +5928,42 @@ msgstr ""
 "Невозможно добавить новые слои в векторную карту <%(vector)s>. Слой "
 "%(layer)d уже существует."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Общая статистика"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Копировать текущую командную строку в буфер обмена"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Невозможно создать новую область"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Общая статистика"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5606,11 +5971,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Менеджер атрибутивных таблиц GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5619,201 +5984,202 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "Создать таблицу"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Закрыть окно после отправки."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Атрибутов не найдено"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Обновить атрибуты"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Изменить атрибуты"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Показать атрибуты"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Перегрузить"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Отправить"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Приведение  '%(value)s' к %(type)s прервано с ошибкой."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Неизвестно"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Невозможно загрузить набор иконок, используются стандартный..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "файл не найден"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Ректифицировать изображение или растр"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Ректифицировать изображение или растр"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Загрузка данных..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, fuzzy, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5822,635 +6188,635 @@ msgstr ""
 "Не удалось прочитать файл <%s>. Поврежденный файл, невозможно обработать "
 "документ XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Настройки Nviz сохранены в файл <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Добавить импортированные слои в содержание"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Создать из базы данных"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Простой"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Разрешение:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Режим категорий"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Установить настройки"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Расширенные"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Список таблиц"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Копировать"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "по цвету"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "по цвету"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Стиль линии"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "точно:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Установить настройки"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Настройки NVIZ"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Проект"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Параметр не найден: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Сохранить регион:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Загрузить регион:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "(значение)"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Создать из базы данных"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Список категорий"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Редактировать GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "Описание"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "Экспорт MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Временная метка"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Добавить группу слоев"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Добавить текстовый слой"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Настройки шрифта"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Получить значения с трансект"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "В"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Экспорт MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "Координаты"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "Направление"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "WKT файл:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Установить настройки"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "файл не найден"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "Отсутствует код EPSG."
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Временная метка"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Наложить растровые слои"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Очистить векторный слой"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Наложить растровые слои"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Импорт векторного слоя"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Тип данных"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Набор инструментов для правки топологии векторного слоя."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Квантование"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Цвет фона:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Цвет фона:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Цвет фона:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Временная метка"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Координаты"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Неправильное значение: %s "
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Создать набор"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 #, fuzzy
 msgid "Stop"
 msgstr "верх"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Добавить слой теневой отмывки рельефа"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "Точка"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Сетевой анализ"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6458,48 +6824,48 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Добавление нового объекта к векторному слою <%s> не выполнено."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6507,89 +6873,89 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Невозможно установить"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Перезаписать?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Слои карты"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Управление слоями"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Управлять или вывести категории"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Выбрать %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6598,380 +6964,381 @@ msgstr ""
 "Переименовать поле в атрибутивной таблице, связанной с данным векторным "
 "слоем."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Тип данных"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Создать/построить топологию"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "Точка"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Точка"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Слева: новая точка"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Ключевое поле"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Кратчайший путь"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "Точка"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Анализ коммивояжера"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Показать точки"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Профильный анализ"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Отобразить слой"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Отобразить слой"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Сетевой анализ"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Настройки осей"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Точка"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Линии стока"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Вывод"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Параметры"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Добавить созданный слой в содержание"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Список таблиц"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Список таблиц"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Загрузка данных..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Загрузка данных..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Проанализировать"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Установки"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Настройки растра"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Стиль линии"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Цветовые таблицы"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Конвертировать координаты"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Цвет линии"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Цветовые правила"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Очистить выделенные GCP"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Ширина линии"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Порог прилипания"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Точка привязки"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Удалить выбранную область"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Анализ рельефа"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Показать линии"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Настройки вектора"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "Слой теней"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Все доступные наборы"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Отрисовать"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Включить/выключить авто-перерисовку"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Показать расчетный охват"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Показать расчетный охват"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6981,16 +7348,16 @@ msgstr ""
 "region). Показать регион внутри расчетного региона синим прямоугольником, "
 "расчетный регион внутри текущего региона красным прямоугольником."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Режим отображения"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -7000,17 +7367,17 @@ msgstr ""
 "умолчанию для новых дисплеев может быть установлено с помощью "
 "'Пользовательских настроек интерфейса'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "Показать регион"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Привести разрешение дисплея к настройкам расчета"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -7019,103 +7386,103 @@ msgstr ""
 "умолчанию для новых дисплеев может быть установлено с помощью "
 "'Пользовательских настроек интерфейса'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Масштаб карты"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "Проекция:"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "Выберите проекцию"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Показать геометрию"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Координаты"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Охват"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr ""
 "Масштабировать до расчетного региона (устанавливается с помощью g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Окно слоя"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "Вход в сессию GRASS"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS дисплей слоя: "
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "Невозможно вставить новую запись."
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Панель инструментов векторизации"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, fuzzy, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7129,378 +7496,405 @@ msgstr ""
 "\n"
 "Подробности: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Ждите, загружаются данные..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Ждите, загружаются данные..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Оцифровать"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Векторный слой не выбран для редактирования."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Добавить текстовый слой"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr ""
 "Масштабировать до расчетного региона (устанавливается с помощью g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Панель инструментов векторизации"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Масштаб карты"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Тип слоя не поддерживается '%s'"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Создать новый дисплей"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Невозможно прочитать коды EPSG: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Создать новый дисплей"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Выбрать векторные объекты"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Привязать растровые и векторные слои"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "Показать легенду"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Добавить масштабную линейку и указатель на север"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Проанализировать карту"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Измерить расстояние"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Измерить расстояние"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Профиль поверхности"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Сетевой анализ"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Перетащите, чтобы сдвинуть"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "Масштабирование щелчком мыши или перетаскиванием"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "Уменьшите карту щелчком мыши"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 #, fuzzy
 msgid "Vector digitizer not available"
 msgstr "Панель инструментов векторизации"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Ошибка векторизации"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Переименовать область"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Переименовать область"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Создать RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Создать новую область?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Переименовать"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Переименовать область"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Редактировать GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Переименовать область"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Вы хотите создать новую область GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Создать новую область?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Переименовать область"
@@ -7510,330 +7904,330 @@ msgstr "Переименовать область"
 msgid "Create new configuration file for r.li modules"
 msgstr "Создать новую таблицу цветов используя цветовые правила"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Вы хотите создать новую область GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Создать новую область?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Работа мастера создания области прервана. Область не создана."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Выбрать тип слоя и область/набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Растровый слой для перекодирования:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Векторный слой для переклассификации:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Векторный слой для переклассификации:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Показать настройки"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Параметры рельефа"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Регион"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Получить значения с трансект"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Плавающее окно"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Привязать растровые и векторные слои"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Вы хотите создать новую область GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Сохранить изменения в векторном слое <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Выбрать векторные объекты"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Отобразить слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Плавающее окно"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Ширина:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "тематические диаграммы"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Получить значения с трансект"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Плавающее окно"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7841,193 +8235,206 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Основная информация"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Растровый слой:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Векторные линии"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Регион"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Тип слоя:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Границы региона"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Показать легенду"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Ширина:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Ближайшие объекты"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Ключевое поле"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Простой"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Менеджер атрибутивных таблиц GRASS GIS"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "Проект"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Панель инструментов векторизации"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Панель инструментов Nviz"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/lmgr/frame.py:293
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
 #, fuzzy
-msgid "Map layers"
-msgstr "Слои карты"
+msgid "Layers"
+msgstr "Слой"
 
-#: ../gui/wxpython/lmgr/frame.py:304
+#: ../gui/wxpython/lmgr/frame.py:339
 #, fuzzy
-msgid "Command console"
+msgid "Console"
 msgstr "Операция завершена"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
+msgstr "Описание слоя"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -8035,253 +8442,242 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "Создать новую область?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 #, fuzzy
 msgid "Choose model to run"
 msgstr "Выберите проекцию"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 #, fuzzy
 msgid "Do you want to save changes in the workspace?"
 msgstr "Сохранить изменения в векторном слое <%s>?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 #, fuzzy
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Проект не пуст. Сохранить текущие настройки в файл проекта?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "GRASS GIS дисплей слоя: "
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Создать топологию для векторного слоя GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr ""
 "Необходимо как минимум %d точек привязки. Операция не может быть выполнена."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Установить регион"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Некорректное значение координаты. Операция отменена."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, fuzzy, python-format
-msgid "Current mapset is <%s>."
-msgstr "Изменить текущий набор."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Изменить рабочую среду"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "Вход в сессию GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Неизвестно"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "Проекция:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Конструктор SQL"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 #, fuzzy
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr "Проект не пуст. Сохранить текущие настройки в файл проекта?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 #, fuzzy
 msgid "Create new workspace?"
 msgstr "Создать файл рабочей области"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Загрузка проекта, пожалуйста подождите ..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Выберите файл для сохранения текущего проекта"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr "Файл проекта <%s> уже существует. Перезаписать этот файл?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Сохранить проект"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 #, fuzzy
 msgid "Writing current settings to workspace file failed."
 msgstr "Сохранение текущих настроек в файл проекта не удалось (%s)."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "Введите имя для нового набора:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS GIS дисплей слоя: "
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8289,37 +8685,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Невозможно вставить новую запись."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Невозможно вставить новую запись."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "Добавить импортированные слои в содержание"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Тип слоя '%s' не поддерживается"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, fuzzy, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8327,59 +8723,56 @@ msgid ""
 "from layer tree?"
 msgstr "Удалить слой %s из дерева слоев?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 #, fuzzy
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 #, fuzzy
 msgid "Quit GRASS GUI"
 msgstr "О ГИС GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Вход в сессию GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Не выбран слой. Операция прервана."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 #, fuzzy
 msgid "Import raster data"
 msgstr "Импортировать растровый слой"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 #, fuzzy
 msgid "Link external raster data"
 msgstr "Загрузка растрового слоя"
@@ -8396,13 +8789,15 @@ msgid "Set raster output format"
 msgstr "Выбрать шрифт"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 #, fuzzy
 msgid "Import vector data"
 msgstr "Импорт векторного слоя"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 #, fuzzy
 msgid "Link external vector data"
 msgstr "Основные векторные метаданные"
@@ -8427,7 +8822,7 @@ msgstr "Загрузить и импортировать данные с сер
 msgid "Add command layer"
 msgstr "Добавить командный слой"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Выход"
@@ -8479,8 +8874,8 @@ msgid "Add rhumbline layer"
 msgstr "Добавить слой локсодромий"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "Добавить растровый слой"
@@ -8504,321 +8899,313 @@ msgstr "Правильный диапазон"
 msgid "Background vector map"
 msgstr "Векторные слои участков"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Слои карты"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Изменить уровень непрозрачности"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "Настройки NVIZ"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 #, fuzzy
 msgid "Zoom to selected map(s)"
 msgstr "Масштабировать до выбранного слоя"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 #, fuzzy
 msgid "Set computational region from selected map(s)"
 msgstr "Установить регион равный выбранному слою"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Создать RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 #, fuzzy
 msgid "Set color table"
 msgstr "Цветовые таблицы"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Показать атрибутивные данные"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Начать редактирование"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Завершить редактирование"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 #, fuzzy
 msgid "Rebuild topology"
 msgstr "Создать/построить топологию"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 #, fuzzy
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Масштабировать до выбранного слоя (игнорировать NULL)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Интерактивная перекодировка"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Гистограмма"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Одномерная статистика растра"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Отчеты и статистика"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Профиль"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "Удалить выбранный слой"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Невозможно создать профиль растрового слоя."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "3d растровый слой"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Тип слоя '%s' не поддерживается"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Введите имя для нового набора:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Установить непрозрачность <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "Векторный слой <%s> в текущем наборе уже существует. Перезаписать?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Перезаписать?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Невозможно отобразить гистограмму растрового слоя."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Установить непрозрачность <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Группа слоев:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Нажмите, чтобы отредактировать настройки слоя"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(используйте двойной щелчок мыши для установки свойств)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Загрузка обновление данных, пожалуйста подождите ..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 #, fuzzy
 msgid "Start new map display"
 msgstr "Создать новый дисплей"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Создать файл рабочей области"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 #, fuzzy
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Открыть  рабочую область"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 #, fuzzy
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Добавить растровый слой"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Добавить растровый слой"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 #, fuzzy
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Добавить растровый слой"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Добавить векторный слой"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Добавить векторный слой"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "Добавить группу слоев"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Добавить оверлей"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 #, fuzzy
 msgid "Import/link raster or vector data"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "3D растровый калькулятор"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 #, fuzzy
 msgid "Graphical Modeler"
 msgstr "Помощь ГИС GRASS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Провести геометрическую коррекцию"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Описание слоя"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "Пользовательские настройки интерфейса"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "Дерево Штейнера"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Редактировать выбранную запись"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Показать атрибутивные данные"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "Создать гистограмму изображения"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "Показать настройки"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Показать диалог настройки Nviz"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Показать диалог настройки Nviz"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8826,638 +9213,646 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Профильный анализ"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Профиль"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Расстояние (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Расстояние вдоль трансекты"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Значения растра"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Необходимо нарисовать трансекту для профилирования в окне слоя."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Нет слоя для профилирования"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "Перезаписать?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Невозможно открыть файл <%s> для чтения."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "Статистика для группы ячеек"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Значения растра"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Выбрать растровый слой 1 (требуется):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Значения растра"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Подробности:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Показать статистику для растровых слоев."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Нарисовать/изменить профиль"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Нарисовать трансекту в окне отображения карты для построения профиля"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Установить настройки"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Общая статистика"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "Сохранить дисплей в PNG файл"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "Выйти из инструмента оцифровки"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Слева: новая точка"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Настройки текста"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Настройки шрифта"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Гистограмма"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Гистограмма"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Значения растра"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Показать статистику для растровых слоев."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Выбрать растровый слой для профилирования"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Выбрать растровый слой для профилирования"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Выбрать растровый слой для профилирования"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Копировать"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Копировать текущую командную строку в буфер обмена"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Выбрать растровый слой 2 (опция):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 #, fuzzy
 msgid "Select raster map:"
 msgstr "Перекодированная растровый слой:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Гистограмма"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Заголовок профиля:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Размер шрифта названия (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 #, fuzzy
 msgid "X-axis label:"
 msgstr "подпись оси Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "подпись оси Y:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Размер шрифта подписи (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Семейство шрифтов:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Стиль:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Вес:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 #, fuzzy
 msgid "Apply changes for the current session and close dialog"
 msgstr "Применить изменения для существующей сессии"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Настройки профиля сохранены в файл '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Установить регион равный выбранному слою"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Цвет линии"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Настройки маркера сегмента трансекты"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "Векторные точки"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Настройки осей"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Ось X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Ось Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Стиль:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Заданный минимум"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Заданный максимум"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Логарифмическая шкала"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Настройки сетки и легенды"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Цвет сетки"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Показать сетку"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Размер шрифта легенды"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Показать легенду"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Настройки профиля сохранены в файл '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Настройки растра"
+msgstr "Неправильный регион"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Атрибуты"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Выбрать растровый слой 3 (опция):"
+msgstr "Выбрать векторные объекты"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Рисовать"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Помощь"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Неправильный регион"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Режим категорий"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Временная метка"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Неправильный регион"
+msgid "Seed point outside the current region"
+msgstr "Создать полигоны для данного региона"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Неправильный регион"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Неправильный регион"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Неправильный регион"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Импорт векторного слоя"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Импортировать растровый слой"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 #, fuzzy
 msgid "&File"
 msgstr "Файл"
@@ -9466,8 +9861,8 @@ msgstr "Файл"
 msgid "Workspace"
 msgstr "Проект"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr ""
 
@@ -9476,7 +9871,7 @@ msgstr ""
 msgid "Create new workspace"
 msgstr "Создать файл рабочей области"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr ""
 
@@ -9485,13 +9880,13 @@ msgstr ""
 msgid "Load workspace from file"
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 #, fuzzy
 msgid "Save"
 msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 #, fuzzy
 msgid "Save as"
 msgstr "Сохранить изменения"
@@ -9516,7 +9911,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Загрузить слои в содержание"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "Дисплей"
@@ -9551,7 +9946,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Добавить растровый слой"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Добавить слой грида"
@@ -10293,24 +10688,24 @@ msgstr "Объем в серию растров"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Конвертировать растровые 3D слои в растровые 2D слои"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Провести геометрическую коррекцию"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 #, fuzzy
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Контрольные точки"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -10350,16 +10745,16 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Тип слоя:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Описание слоя"
@@ -10373,7 +10768,7 @@ msgstr "Описание слоя"
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Код"
@@ -10383,8 +10778,8 @@ msgstr "Код"
 msgid "Quit wxGUI session."
 msgstr "Вход в сессию GRASS"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "О ГИС GRASS"
@@ -10393,7 +10788,7 @@ msgstr "О ГИС GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "Установки"
@@ -10577,7 +10972,7 @@ msgstr "Список категорий"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Управление проекциями"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Настройки"
 
@@ -11741,7 +12136,7 @@ msgstr ""
 "ячеек."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Плоскость"
 
@@ -12021,8 +12416,8 @@ msgid "Develop vector map"
 msgstr "Создать векторный слой"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Создать новый векторный слой"
 
@@ -12989,12 +13384,12 @@ msgstr ""
 "помощью либо i.cluster, либо i.class, либо i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Интерактивный ввод для классификации с обучением"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -14121,27 +14516,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Панель инструментов карты"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Показать расчетный охват"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Режим категорий"
+msgstr "Создать гистограмму изображения или растрового файла"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Показать расчетный охват"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "Помощь"
@@ -14171,7 +14570,7 @@ msgid "Prints system information"
 msgstr "Информация о базе данных"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "О ГИС GRASS"
 
@@ -14185,308 +14584,317 @@ msgstr "Импорт векторного слоя"
 msgid "Attribute table manager"
 msgstr "Менеджер атрибутивной таблицы"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "Создать новый набор"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 #, fuzzy
 msgid "Load model from file"
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "Выбрать файл кодов EPSG"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 #, fuzzy
 msgid "Export model to image"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "Режим"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "Добавить командный слой"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "Определить новую область"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Добавить группу слоев"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "Опционный"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Добавить командный слой"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "Удалить таблицу"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "Удалить результат фильтрации"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Показать HTML-страницы помощи GRASS"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "Основная выходная информация о растровом слое."
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Экспорт векторного слоя"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Экспорт MPEG-1"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Описание слоя"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Помощь ГИС GRASS"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Добавить растровый слой"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Добавить 3D растровый слой"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "вектор"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Добавить легенду"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Добавить созданный слой в содержание"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Добавить легенду"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Добавить масштабную линейку и указатель на север"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Показать HTML-страницы помощи GRASS"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Помощь ГИС GRASS"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Основная выходная информация о растровом слое."
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 #, fuzzy
 msgid "Click here to show search module engine"
 msgstr "Нажмите, чтобы показать настройки 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 #, fuzzy
 msgid "Click here to hide search module engine"
 msgstr "Нажмите, чтобы скрыть настройки 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "Результат команды"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "Вывод"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "Результат команды"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "Отменить команду"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Логарифмическая шкала"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Сохранить файл как..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "Настройки текста"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Файл"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14494,12 +14902,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Результат команды"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14507,101 +14915,140 @@ msgid ""
 "Details: %(error)s"
 msgstr "Невозможно масштабировать векторный слой <%s>."
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Результат команды"
 
-#: ../gui/wxpython/gui_core/menu.py:142
-msgid "Double-click or Ctrl-Enter to run selected module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Категория"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Выбрать векторные объекты"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Создать новый набор"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Не выбран слой. Операция прервана."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Не могу создать новый векторный слой <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Слои для выборки не выбраны."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Создан новый векторный слой <%s>"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Не могу создать новый векторный слой <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
+msgid "Double-click or Ctrl-Enter to run selected module"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Исполнить команду"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "Пользовательские настройки интерфейса"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Установить по умолчанию"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Возвратить настройки по умолчанию и применить изменения"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Применить изменения для существующей сессии"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Применить изменения для этой сессии"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Ключевое поле не может быть пустой строкой."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "Пользовательские настройки интерфейса"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Настройки Менеджера слоев"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Спрашивать когда слой удаляется из содержания"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, fuzzy, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Примечание: Нужен перезапуск интерфейса."
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Подавить позиционирование окон дисплеев"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Подавить позиционирование окна Менеджера слоев"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Сохранить текущий макет окна как макет по умолчанию"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14609,219 +15056,211 @@ msgstr ""
 "Сохранить текущую позицию и размер Менеджера слоев, открыть окно(окна) "
 "дисплея и использовать по умолчанию для следующих сессий."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "Результат команды"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "Изменить настройки"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "Расширенные настройки"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Список элементов:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 #, fuzzy
 msgid "Icon theme (requires GUI restart):"
 msgstr "Примечание: Нужен перезапуск интерфейса."
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Настройки диалога команды"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "Дисплей"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Шрифт по умолчанию для дисплеев GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Настройки дисплея по умолчанию"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Драйвер дисплея:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Режим строки статуса:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Включить авто-отрисовку"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Масштабировать до выбранного слоя"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Расширенные настройки"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Настройки диалога команды"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Закрыть диалоговое окно после окончания операции"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Добавить созданный слой в содержание"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Интерактивная перекодировка"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Уровень избыточности информации:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-#, fuzzy
-msgid "Layers"
-msgstr "Слой"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Настройки дисплея по умолчанию"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "Цветовые таблицы"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Настройки вектора"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Дисплей:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Прозрачный"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "символ:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 #, fuzzy
 msgid "Line width (in pixels):"
 msgstr "Ширина линии (в пикселях)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Выделить выбранное и масштабировать"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Просмотр данных"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 #, fuzzy
 msgid "Left mouse double click:"
 msgstr "Двойной щелчок левой кнопкой мыши"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Спрашивать перед удалением записей из таблицы"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Создать таблицу"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 #, fuzzy
 msgid "Key column:"
 msgstr "Ключевое поле"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 #, fuzzy
 msgid "Projection statusbar settings"
 msgstr "Настройки текста профиля"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14833,85 +15272,96 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "код EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "код EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 #, fuzzy
 msgid "&Load EPSG codes"
 msgstr "код EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "Координаты"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Управление проекциями"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 #, fuzzy
 msgid "Precision:"
 msgstr "Проекция:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Невозможно прочитать коды EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "ОШИБКА: Область <%s> не найдена"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Выбрать шрифт дисплея по умолчанию"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Выбрать шрифт дисплея по умолчанию"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Выбрать шрифт:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Простой"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "Изменить текущий набор."
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 #, fuzzy
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
@@ -14923,281 +15373,370 @@ msgstr ""
 "Включить доступность набора, выключить чтобы его скрыть. %sЗамечание: "
 "PERMANENT и текущий набор доступны всегда."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Набор"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Владелец"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Наложить растровые слои"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "ID объекта"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Объемы"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Удалить все поля"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Удалить выбранное поле"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Копировать"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Копировать таблицу"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Наложить растровые слои"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Тест нормальности"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Профиль"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Сохранить текущие настройки?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Удалить выбранный набор"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Показать настройки"
+msgid "Load:"
+msgstr "Загрузить"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "Файл проекта <%s> уже существует. Перезаписать этот файл?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Сохранить файл как..."
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Ввести параметры для"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Исполнить команду"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Квантование"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 #, fuzzy
 msgid "Enter parameters for '"
 msgstr "Ввести параметры для"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 #, fuzzy
 msgid "Run the command (Ctrl+R)"
 msgstr "Исполнить команду"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Копировать текущую командную строку в буфер обмена"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Показать описание для команды"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "Добавить созданный слой в содержание"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Закрыть диалоговое окно после окончания операции"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Необходимо"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Опционный"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Параметр не найден: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[множественный]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "Правильный диапазон"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Выбрать цвет"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Выбрать %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 #, fuzzy
 msgid "&Load"
 msgstr "Загрузить"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Переименовать область"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Интерактивная перекодировка"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 #, fuzzy
 msgid "Directory"
 msgstr "Направление"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "Слой"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Имя слоя"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Проекция:"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Вручную"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -15205,47 +15744,47 @@ msgid ""
 "Reason: %s"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "Нечего не выбрано."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Сохранить файл как..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Ошибка в %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "Выбирите область проекта и набор"
@@ -15255,596 +15794,474 @@ msgstr "Выбирите область проекта и набор"
 msgid "Location or mapset is not defined."
 msgstr "Расчет потока для массивных гридов (версия с плавающей запятой)"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "Выбрать тип слоя и область/набор"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Создать атрибутивную таблицу"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr "Векторный слой <%s> в текущем наборе уже существует. Перезаписать?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Загрузить регион:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Сохранить регион:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Создать/редактировать группу"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Применить изменения и закрыть диалог"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "Применить изменения для этой сессии"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Закрыть окно после отправки."
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "aster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Список карт:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "Добавить импортированные слои в содержание"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "Применить изменения"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, fuzzy, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Добавление нового объекта к векторному слою <%s> не выполнено."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "3d растр"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "Тип слоя:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "Выбрать висящие узлы"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Набор:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
 msgid "Invert selection"
 msgstr "Сечение"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Импорт нескольких слоев"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Список слоев"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Список слоев"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "Список слоев %s"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "Слой"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Имя слоя"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Имя для нового векторного слоя"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Проекция:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-#, fuzzy
-msgid "Options"
-msgstr "Опционный"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Импорт"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Импортировать выбранные слои"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Добавить импортированные слои в содержание"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Добавить импортированные слои в содержание"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-#, fuzzy
-msgid "&Link"
-msgstr "Линия"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-#, fuzzy
-msgid "Link selected layers"
-msgstr "Изменить выбранный слой"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Не выбран слой. Операция прервана."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Невозможно создать профиль растрового слоя."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Импорт векторного слоя"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "Импортировать растровый слой"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Игнорировать изменения и закрыть диалог"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Слои для выборки не выбраны."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Импорт слоев DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Выберите импортируемый файл DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Слои для выборки не выбраны."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Установить непрозрачность слоя"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "непрозрачный"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Окно слоя"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "символ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Настройки символа"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Настройки символа"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 #, fuzzy
 msgid "Copyright"
 msgstr "Копировать"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 #, fuzzy
 msgid "License"
 msgstr "Линия"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "Атрибуты"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "Атрибуты"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "Прозрачный"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Прозрачный"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Проекция:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, fuzzy, python-format
 msgid "%s file missing"
 msgstr "Отсутствует код EPSG."
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "Линия"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Поворот:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "файл не найден"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "Предпросмотр"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Панель инструментов карты"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Группа слоев:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Слой"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Изменить уровень непрозрачности"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Изменить уровень непрозрачности"
@@ -15953,740 +16370,757 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Выбрать шрифт дисплея по умолчанию"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "Удалить выбранное поле"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Тип"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "Настройки растра"
+msgid "Source input"
+msgstr "Имя поля"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Сохранить изменения"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Файл"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "Вывод"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 #, fuzzy
 msgid "All files"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Значения ячеек"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 #, fuzzy
 msgid "File:"
 msgstr "Файл"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "Выберите импортируемый файл DXF"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "Выброс"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 #, fuzzy
 msgid "Choose file"
 msgstr "Выбрать файл DXF:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "ID объекта:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Запрос по объектам"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Создать/построить топологию"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "Установить настройки"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 #, fuzzy
 msgid "Protocol:"
 msgstr "Код проекции:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Панель инструментов векторизации"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Подсветка"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Не выбран слой. Операция прервана."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Слой <%s> не найден."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Не выбран слой. Операция прервана."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Выбрать исходный набор:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Набор:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Масштаб карты"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Временная метка"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Создать/построить топологию"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Восстановить настройки по умолчанию"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Необходимо"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Список слоев"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Выберите проекцию"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Расширенные настройки"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Наложить растры"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Код проекции:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Пересчет используя метод ближайшего соседа"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Линейная регрессия"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Ввести параметры для"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Координаты"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Добавить импортированные слои в содержание"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Выбрать исходный набор:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Выбрать исходную область:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Слой"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Стиль"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Добавить группу слоев"
+msgid "Add default"
+msgstr "По умолчанию"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "Общие настройки"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 #, fuzzy
 msgid "&Connect"
 msgstr "Связь"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Расширенные настройки"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Расширенные настройки"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Настройки Менеджера слоев"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Имя выходного векторного слоя"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Переименовать"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 #, fuzzy
 msgid "Available web services"
 msgstr "Все доступные наборы"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Добавить импортированные слои в содержание"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Свойства слоя"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Установить регион"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Загрузить регион:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Привести разрешение дисплея к настройкам расчета"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Установить расчетный регион равный дисплею"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "перезаписать существующий файл"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Загрузить регион:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Удалить выбранный слой"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Загрузка данных..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Невозможно установить"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Закрыть диалог"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Закрыть диалог"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Сделать запрос к векторным атрибутивным данным"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 #, fuzzy
 msgid "Select vector map:"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Цветовые таблицы"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Загрузить"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Установки"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Вернуться к виду по умолчанию"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Цветовые таблицы"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 #, fuzzy
 msgid "Create new color table for raster map"
 msgstr "Создать новую таблицу цветов используя цветовые правила"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "Интерактивное редактирование значений категорий"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "Правильный диапазон"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "Создать новую таблицу цветов используя цветовые правила"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "Интерактивное редактирование значений категорий"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Сделать запрос к векторным атрибутивным данным"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 #, fuzzy
 msgid "Layer:"
 msgstr "Слой"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 #, fuzzy
 msgid "Attribute column:"
 msgstr "Атрибуты"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Удалить все поля"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Серия растров в объем"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Удалить атрибутивную таблицу."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Цветовые таблицы"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16695,645 +17129,804 @@ msgstr ""
 "Соединение с базой данных для векторного слоя <%s> не определено в файле DB. "
 "Вы можете создать новое соединение в закладке 'Управление слоями'."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "Связи векторных баз данных"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr "Векторный слой <%s> в текущем наборе уже существует. Перезаписать?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "Загрузка атрибутивных данных, пожалуйста подождите..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Интерактивное редактирование значений категорий"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Сделать запрос к векторным атрибутивным данным"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Набор инструментов для правки топологии векторного слоя."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS %s Калькулятор слоев"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS %s Калькулятор слоев"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 #, fuzzy
 msgid "mapcalc statement"
 msgstr "Оператор SQL"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 #, fuzzy
 msgid "Expression"
 msgstr "Выброс"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "Сохранить текущую рабочую область в файл"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "Выберите файл проекта"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 #, fuzzy
 msgid "add"
 msgstr "Добавить"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 #, fuzzy
 msgid "subtract"
 msgstr "поверхность"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 #, fuzzy
 msgid "multiply"
 msgstr "[множественный]"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 #, fuzzy
 msgid "greater than"
 msgstr "короче чем"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 #, fuzzy
 msgid "greater than or equal to"
 msgstr "Создать/построить топологию"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 #, fuzzy
 msgid "less than"
 msgstr "длиннее чем"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 #, fuzzy
 msgid "one's complement"
 msgstr "Показать расчетный охват"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "Опционный"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "перезаписать существующий файл"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "перезаписать существующий файл"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Создать случайные точки"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "Добавить созданный слой в содержание"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Вы должны указать расширение слоя для того, чтобы продолжить работу"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Вы должны указать расширение слоя для того, чтобы продолжить работу"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 #, fuzzy
 msgid "Expression file (*)|*"
 msgstr "Выброс"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "Выберите загружаемый файл GRC"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' скопировано в буфер обмена"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Список категорий - нажмите правую кнопку для удаления"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "Опционный"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Список категорий"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Слой теней"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Управление проекциями"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Список категорий"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "Список категорий"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Управление проекциями"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
+#, fuzzy
+msgid "Reinstall selected Addons extensions"
+msgstr "Управление проекциями"
+
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Не выбран слой. Операция прервана."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Удалить узел"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "Выброс"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Импорт нескольких слоев"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Список слоев"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Список слоев"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "Список слоев %s"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Имя для нового векторного слоя"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Импорт"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Импортировать выбранные слои"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "Настройки растра"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Настройки шрифта"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Добавить импортированные слои в содержание"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Добавить импортированные слои в содержание"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+#, fuzzy
+msgid "&Link"
+msgstr "Линия"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+#, fuzzy
+msgid "Link selected layers"
+msgstr "Изменить выбранный слой"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Не выбран слой. Операция прервана."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Невозможно создать профиль растрового слоя."
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Импорт векторного слоя"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Импортировать растровый слой"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Игнорировать изменения и закрыть диалог"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Слои для выборки не выбраны."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Импорт слоев DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Выберите импортируемый файл DXF"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Слои для выборки не выбраны."
+
+#: ../gui/wxpython/modules/import_export.py:836
 #, fuzzy
-msgid "Reinstall selected Addons extensions"
-msgstr "Управление проекциями"
+msgid "Reprojection"
+msgstr "Проекция:"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Не выбран слой. Операция прервана."
+msgid "Name for output GRASS map"
+msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Удалить узел"
+msgid "Layers to be reprojected"
+msgstr "Слой для удаления"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "Выброс"
+msgid "Reproject selected layers"
+msgstr "Импортировать выбранные слои"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 #, fuzzy
 msgid "Numeric column:"
 msgstr "Ключевое поле"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 #, fuzzy
 msgid "Name for the output raster map:"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "Экспорт растрового слоя"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 #, fuzzy
 msgid ":"
 msgstr "X:"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 #, fuzzy
 msgid "Block size:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 #, fuzzy
 msgid "Model: "
 msgstr "Режим:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Создать гистограмму изображения или растрового файла"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 #, fuzzy
 msgid "Set up vector cleaning tools"
 msgstr "Выбрать векторные объекты"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Объединить выбранные линии/границы"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "Проверка дубликатов"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "Выбрать висящие узлы"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "Удалить таблицу"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "Развернуть выбранные линии/границы"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "Развернуть выбранные линии/границы"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "Удалить слой"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "Разделить выбранные линии/границы в месте пересечения"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "ID объекта:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 #, fuzzy
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Копировать текущую командную строку в буфер обмена"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 #, fuzzy
 msgid "line"
 msgstr "линия румба"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "Редактировать линию/границу"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "Добавить центроиды"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 #, fuzzy
 msgid "face"
 msgstr "поверхность"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Набор инструментов для правки топологии векторного слоя."
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Набор инструментов для правки топологии векторного слоя."
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Имя для нового векторного слоя"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Выберите пороговое значение"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -17341,21 +17934,21 @@ msgid ""
 "%s"
 msgstr "Не выбран слой. Операция прервана."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 #, fuzzy
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Копировать текущую командную строку в буфер обмена"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Невозможно открыть файл <%s> для чтения."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -17368,188 +17961,183 @@ msgstr ""
 "\n"
 "Количество пропущенных строк: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " строка  %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, fuzzy, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: тип слоя <%(type)s> пока не поддерживается."
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Операция завершена"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Подробности:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Тип слоя '%s' не поддерживается"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Удалить слой"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Отрисовать"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Загрузка данных..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Отрисовать"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Отрисовать"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Масштабировать до региона по умолчанию"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Неправильное значение: %s "
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Невозможно масштабировать растровый слой <%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Подробности:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Не могу создать новый векторный слой <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Невозможно масштабировать растровый слой <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Невозможно перерисовать слой <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Невозможно перерисовать оверлей <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Загрузка данных..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Отрисовать"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Отрисовать"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Неизвестно"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Невозможно обновить существующую запись."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Заданный максимум"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/core/utils.py:558
-#, fuzzy, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Невозможно открыть файл"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Невозможно открыть файл <%s> для чтения."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Дуплицировать атрибуты"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17558,17 +18146,22 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "файл не найден"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 #, fuzzy
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
@@ -17576,163 +18169,163 @@ msgstr ""
 "Обратите внимание, что данные оставлены в неправильном состоянии и возможно "
 "повреждены"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Операция прервана"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Операция завершена"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Выполнение прервано с ошибкой:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Ошибка: "
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Невозможно выполнить команду: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Разорвать сегмент"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Точка"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Квантование"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Свернуть все кроме PERMANENT и текущего"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Свернуть все кроме PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 #, fuzzy
 msgid "Collapse all except current"
 msgstr "Свернуть все кроме PERMANENT и текущего"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Свернуть все"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Развернуть все"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Отобразить выбранные объекты"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Список таблиц"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Масштабировать до сохраненного региона"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "Север"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "прямоугольник"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "сфера"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "куб"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "ромб"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "aster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "гистограмма"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17743,12 +18336,12 @@ msgstr ""
 "       Подробности: %(detail)s\n"
 "       Строки: '%(line)s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "Невозможно обновить существующую запись."
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17759,282 +18352,313 @@ msgstr ""
 "\n"
 "Подробности: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Невозможно установить"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Невозможно обработать команду %s"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Укажите базу данных GRASS и название области"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Каталог с ГИС-данными:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Расположение проекта"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Выберите каталог с ГИС-данными:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Имя области:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "Указана неправильная область."
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Выберите каталог с данными GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Область уже существует в базе данных GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Невозможно создать область"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Выберите метод для создания новой области"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 #, fuzzy
 msgid "Select EPSG code of spatial reference system"
 msgstr "Выберите EPSG-код системы координат"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 #, fuzzy
 msgid "Select coordinate system parameters from a list"
 msgstr "Выберите систему координат"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Использовать произвольную систему координат (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Простой"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Расширенные"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Выберите проекцию"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Код"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Код проекции:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Искать в описании:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Невозможно прочитать список: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 #, fuzzy
 msgid "Choose projection parameters"
 msgstr "Выберите проекцию"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 #, fuzzy
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Выберите датум с соответствующим эллипсоидом"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 #, fuzzy
 msgid "Datum with associated ellipsoid"
 msgstr "Выберите датум с соответствующим эллипсоидом"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 #, fuzzy
 msgid "Ellipsoid only"
 msgstr "Эллипсоид"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, fuzzy, python-format
 msgid " Enter parameters for %s projection "
 msgstr "Ввести параметры для"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Укажите геодезический датум"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Эллипсоид"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Код датума:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Укажите эллипсоид"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "База данных"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Код эллипсоида:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Выберите привязанный файл"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Привязанный файл:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "WKT файл:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Укажите код EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Путь к файлу кодов EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Выбрать файл кодов EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Укажите код EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Путь к файлу кодов EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "код EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Выбрать файл кодов EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Невозможно прочитать коды EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Выберите метод определения параметров привязки"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Введите строку параметров PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Необходима трансформация датума."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "База данных GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Имя области:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Имя области:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Проекция:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Определение PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Вы хотите создать новую область GRASS <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Создать новую область?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Определить новую область GRASS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, fuzzy, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -18042,257 +18666,262 @@ msgid ""
 "Details: %(err)s"
 msgstr "Невозможно создать новую область. Область <%s> не создана."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Работа мастера создания области прервана. Область не создана."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Невозможно создать новую область"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 #, fuzzy
 msgid "New GIS data directory"
 msgstr "Каталог с ГИС-данными:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Отсутствует код EPSG."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Отсутствует код EPSG."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "файл не найден"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Установить охват и разрешение региона по умолчанию"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Установить регион"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Указана неправильная область."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Неправильный регион"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Нажмите, чтобы показать настройки 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Нажмите, чтобы скрыть настройки 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Строки: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Столбцы: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Ячейки: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Глубина: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3D ячейки: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "разрешение В-Н"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Север"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Запад"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Восток"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Юг"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "разрешение С-Ю "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "разрешение В-З"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Неправильное значение: %s "
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Выбрать трансформацию датума"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 #, fuzzy
 msgid "Select from list of datum transformations"
 msgstr "Список трансформаций датума"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 #, fuzzy
 msgid "Easting"
 msgstr "Восток"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "Север"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 #, fuzzy
 msgid "Elevation"
 msgstr "по высоте"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Имя поля"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "Программа генерирования поверхности из растеризованных изолиний."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Управление цветами изображения"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Расстояние вдоль трансекты"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Расстояние вдоль трансекты"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "на поверхности"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Загрузка растрового слоя"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Загрузка 3d растрового слоя"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "ошибка"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Тип слоя не поддерживается '%s'"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Невозможно выгрузить растровый слой"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Невозможно выгрузить 3d растровый слой"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3d растровый слой"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "успешно выгружено"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Не удалось загрузить векторный слой <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Невозможно выгрузить векторный слой <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Векторный слой <%(name)s> (%(type)s) успешно выгружен"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, fuzzy, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Точечный векторный слой не найден (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, fuzzy, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Невозможно установить свойства слоя данных (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -18303,812 +18932,812 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 #, fuzzy
 msgid "constant#"
 msgstr "постоянная"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Вид"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "Проанализировать"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "Квантование"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Перспектива:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "коэффициент масштабирования Z:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 #, fuzzy
 msgid "Look:"
 msgstr "Обзор:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "сфера"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "Отрисовать"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "верх"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "Сбросить"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Вернуться к виду по умолчанию"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Загрузить заново"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "Переименовать набор"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "Выберите исходную папку"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Поверхность"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "Стоимостная поверхность"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Вектор"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 #, fuzzy
 msgid "Lighting"
 msgstr "Подсветка"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Режим:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "грубо"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "точный"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "оба"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Тени:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "плоский"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 #, fuzzy
 msgid "Set to all"
 msgstr "Установить по умолчанию"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 #, fuzzy
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Использовать для всех загруженных поверхностей"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "грубо:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "Разрешение:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Стиль"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "каркас"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "поверхность"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "точно:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Параметры поверхности"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Прозрачность"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Яркость"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "слой"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "снять"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "постоянная"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Сбросить"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "Вернуться к виду по умолчанию"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "цвет:"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "по цвету"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "Разрешение:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "Объемы"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "Прозрачность"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Показать векторные линии"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Векторные линии"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "Линия"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "ширина:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "цвет:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Установить настройки"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "на поверхности"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 #, fuzzy
 msgid "Height above surface:"
 msgstr "Высота над поверхностью:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Показать векторные точки"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Векторные точки"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 #, fuzzy
 msgid "Icon:"
 msgstr "Размер иконки:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "изоповерхность"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Разрешение:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "список изоповерхностей"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "Показать линии"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "Выбрать исходную область:"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 #, fuzzy
 msgid "Brightness:"
 msgstr "Богатство"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Параметры изоповерхности"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "Параметры изоповерхности"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Дуплицировать атрибуты"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "В"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "С:"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "Ю"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "В:"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "В"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "С:"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "Ю"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 #, fuzzy
 msgid "SW"
 msgstr "В"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Уровень"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Список дубликатов"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Добавить слой"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "Векторный слой <%s> не 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "Векторный слой <%s> 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, fuzzy, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(primitives)d примитивов (%(points)d точек)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "на поверхности"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "Управлять"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Север"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Юг"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Определить границы"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Север"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Высота:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Восток"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Низ"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Слой <%s> не найден."
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Показать настройки"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "Возвратить настройки по умолчанию и применить изменения"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "(значение)"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "(шаг):"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Положение:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Виток:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Переместить узел"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "Высота"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Маркер:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Настройки Nviz сохранены в файл <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -19118,7 +19747,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -19130,23 +19759,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -19154,7 +19783,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -19165,31 +19794,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -19204,68 +19833,68 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Панель инструментов привязки"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Векторные точки"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Переименовать поле"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "цвет:"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Показать сетку"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Нет категорий"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Нет категорий"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Экспорт растрового слоя"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Установить непрозрачность <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -19275,213 +19904,225 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Масштабировать до охвата сохраненных регионов"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Добавить 3D растровый слой"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Слои для выборки не выбраны."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "Удалить файлы элементов базы данных из текущего набора пользователя."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Файл региона <%s> уже существует. Перезаписать?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Создан новый векторный слой <%s>"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Выберите векторный слой"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Очистить выделенные GCP"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Цвет каркаса:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Выбрать группу:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Выбрать прямоугольником"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Настройки осей"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Выбрать растровый слой 3 (опция):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Добавление нового объекта к векторному слою <%s> не выполнено."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Добавить 3D растровый слой"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Выбрать шрифт дисплея по умолчанию"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Выбрать растровый слой для профилирования"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Классифицировать изображение"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Запрос к выбранному растровому или векторному слою (слоям)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Удалить выбранный слой из содержания?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Добавить новый узел"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Сечение"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Переместить узел"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Переместить узел"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Удалить узел"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Удалить узел"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Добавить подписи"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Переименовать выбранный набор"
 
 #, fuzzy
+#~ msgid "Unsupported units"
+#~ msgstr "Тип слоя не поддерживается '%s'"
+
+#, fuzzy
+#~ msgid "Map layers"
+#~ msgstr "Слои карты"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Вы хотите создать новую область GRASS <%s>?"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "Слой <%s> не найден."
 
@@ -19493,6 +20134,22 @@ msgstr "Переименовать выбранный набор"
 #~ msgstr "Выйти из интерфейса"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Неправильный регион"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Панель инструментов векторизации"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Правильный диапазон"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Копировать таблицу"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Список слоев"
 
@@ -19509,16 +20166,35 @@ msgstr "Переименовать выбранный набор"
 #~ msgstr "Одномерная статистика растра"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "Опционный"
+#~ msgid "Load settings:"
+#~ msgstr "Показать настройки"
+
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Невозможно перерисовать слой <%s>."
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Невозможно перерисовать оверлей <%s>."
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Добавить импортированные слои в содержание"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Импорт старого вектора GRASS "
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Добавить импортированные слои в содержание"
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Импорт старого вектора GRASS "
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Импорт старых версий векторных слоев GRASS."
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "Импорт GPSBabel GPS"
+
+#~ msgid "GEOnet import"
+#~ msgstr "Импорт GEOnet"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -19542,45 +20218,32 @@ msgstr "Переименовать выбранный набор"
 #~ msgstr "Конвертировать координаты"
 
 #, fuzzy
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr ""
-#~ "Установить расчетный регион равный выбранному слою (игнорировать NULL)"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Импорт старого вектора GRASS "
+#~ msgid "Create optimally placed labels"
+#~ msgstr "Создать подписи"
 
-#, fuzzy
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Импорт старого вектора GRASS "
+#~ msgid "Bit pattern comparison "
+#~ msgstr "Битовое сравнение шаблонов"
 
 #, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Импорт старых версий векторных слоев GRASS."
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Менеджер атрибутивной таблицы"
 
 #, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Импорт GPSBabel GPS"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Импорт GEOnet"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Выбрать исходный набор:"
 
 #, fuzzy
-#~ msgid "Create optimally placed labels"
-#~ msgstr "Создать подписи"
-
-#~ msgid "Bit pattern comparison "
-#~ msgstr "Битовое сравнение шаблонов"
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr ""
+#~ "Установить расчетный регион равный выбранному слою (игнорировать NULL)"
 
 #, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "Векторный слой <%(name)s> (%(type)s) успешно выгружен"
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "Объемы"
+#~ msgid "Add default servers"
+#~ msgstr "Добавить группу слоев"
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "Выбирите область проекта и набор"
@@ -19632,10 +20295,6 @@ msgstr "Переименовать выбранный набор"
 #~ msgstr "Запустить GRASS"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "Создать набор"
-
-#, fuzzy
 #~ msgid "&Location wizard"
 #~ msgstr "Мастер создания области"
 
@@ -19659,12 +20318,26 @@ msgstr "Переименовать выбранный набор"
 #~ msgstr "Предупреждение"
 
 #, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "Выбирите область проекта и набор"
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Обработать растровый слой"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Добавить импортированные слои в содержание"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Добавить импортированные слои в содержание"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Импорт старых версий векторных слоев GRASS."
 
 #~ msgid "Vector to volume"
 #~ msgstr "Вектор в объем"
 
+#~ msgid "Sites to vector"
+#~ msgstr "Сайты в вектор"
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "3D растровый калькулятор"
@@ -19690,11 +20363,9 @@ msgstr "Переименовать выбранный набор"
 #~ msgid "Voxel statistics"
 #~ msgstr "Общая статистика"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Импорт старых версий векторных слоев GRASS."
-
-#~ msgid "Sites to vector"
-#~ msgstr "Сайты в вектор"
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Объемы"
 
 #, fuzzy
 #~ msgid ""
@@ -19727,6 +20398,5 @@ msgstr "Переименовать выбранный набор"
 #~ msgstr ""
 #~ "Рассчитать одномерную статистику для ненулевых ячеек растрового слоя."
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Менеджер атрибутивной таблицы"
+#~ msgid "Digitize"
+#~ msgstr "Оцифровать"
diff --git a/locale/po/grasswxpy_th.po b/locale/po/grasswxpy_th.po
index ce3e4fb..fcb72e0 100644
--- a/locale/po/grasswxpy_th.po
+++ b/locale/po/grasswxpy_th.po
@@ -6,7 +6,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_th\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2008-01-05 15:19+0700\n"
 "Last-Translator: \n"
 "Language-Team: Thai <grass-translations at lists.osgeo.org>\n"
@@ -18,210 +18,210 @@ msgstr ""
 "X-Poedit-Language: Thai\n"
 "X-Poedit-Country: THAILAND\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง และ ชุดแผนที่  ของ GRASS"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง และ ชุดแผนที่  ของ GRASS"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "จุด"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "แสดง"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr "สร้าง mapset ใหม่"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr ""
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "ลบ"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr ""
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr ""
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "ลบ"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "ผิดพลาด"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, fuzzy, python-format
 msgid "Location <%s> created"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -229,12 +229,12 @@ msgid ""
 "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -242,7 +242,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -250,7 +250,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -258,7 +258,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -266,14 +266,14 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be deleted."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -282,11 +282,11 @@ msgid ""
 "ALL MAPS included in this mapset will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -294,41 +294,41 @@ msgid ""
 "ALL MAPS included in this location will be PERMANENTLY DELETED!"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -337,17 +337,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -359,11 +359,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -371,7 +371,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -379,19 +379,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
 "one now if you have not already done so. A popular choice is \"grassdata\", "
@@ -409,185 +409,185 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 msgid "IClass Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 msgid "IClass Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 #, fuzzy
 msgid "Import vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "การวิเคราะห์ Lidar"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 msgid "No areas given. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histogram"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -596,633 +596,634 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, python-format
 msgid "Raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "การจำแนก ภาพ"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "การจำแนก ภาพ"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "สี"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 msgid "Enter name of signature file:"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "คัดลอก ตารางรายละเอียดด้วย"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "นำเข้าตารางรายละเอียดแบบหลายรูปแบบ"
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 msgid "Set opacity level"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "แสดงตัวอย่าง"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "ขยายไปที่แผนที่"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 msgid "GRASS GIS Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 msgid "Misc Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 msgid "Switch to advanced mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "ปิด"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 msgid "Name of the second map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 msgid "Mirror mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 msgid "Mirrored cursor"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "ดัชนี Shape"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 msgid "Swipe mode"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "รายการ"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 msgid "GCP Display toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตที่บันทึกไว้"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 msgid "Valid Range:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "เวคเตอร์"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 msgid "Select source map to display:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1231,28 +1232,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1262,271 +1263,271 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 msgid "Save ground control points?"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "กลุ่ม เป้าหมาย"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "กลุ่ม เป้าหมาย"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 msgid "Invalid coordinate value. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 msgid "Color for selected GCP:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "กฎของสี"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 msgid "Rectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "ลำดับที่ 1"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "ลำดับที่ 2"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "ลำดับที่ 3"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1534,367 +1535,367 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "ดิจิไทซ์ขอบเขตใหม่"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "ดิจิไทซ์เส้นใหม่"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "เครื่องมือ ค้นหา"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 #, fuzzy
 msgid "Attributes"
 msgstr "คัดลอกรายละเอียด"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "หมวด"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "กรอก"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "ไม่มีหมวด"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "ค้นหาด้วยรายละเอียด"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "ดิจิไทซ์เส้นใหม่"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "ดิจิไทซ์ขอบเขตใหม่"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "เน้น"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "เส้น"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "ขอบเขต (ไม่มี พื้นที่)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "จุดกลางรูป (ในรูป)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "จุดกลางรูป (นอกรูป)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "จุดกลางรูป (ซำ้ในรูป)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 msgid "Digitization Error"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 msgid "No vector map open for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 msgid "Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1902,79 +1903,79 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "ลักษณะข้อมูล"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "สร้างจุดตามเส้น"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -1982,256 +1983,256 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "ลบทั้งหมด"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "ขั้น"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 #, fuzzy
 msgid "Feature id"
 msgstr "ลักษณะข้อมูล"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "ดิจิไทซ์จุดใหม่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "ดิจิไทซ์เส้นใหม่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "ดิจิไทซ์ขอบเขตใหม่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "ดิจิไทซ์จุดกึ่งกลางใหม่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "ดิจิไทซ์ขอบเขตใหม่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "สร้าง  polylines จาก เส้น หรือ ขอบเขต"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "แก้ไข เส้น/ขอบเขต"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "ย้าย จุด"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "คัดลอกหมวดหมู่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 msgid "Redo previous changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "คัดลอกหมวดหมู่"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "แสดงข้อมูลลักษณะ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2240,822 +2241,1198 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "ดิจิไทซ์"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "ข้อความ SQL"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 msgid "total distance"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 msgid "bearing"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "เพิ่ม legend"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 msgid "north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 msgid "Copy coordinates to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "แสดงค่าติดตั้ง"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "เพิ่ม legend"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "ทดสอบ"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "จุด"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-#, fuzzy
-msgid "Model"
-msgstr "วิธี:"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Variables"
-msgstr "ลิสต์ตาราง"
+msgid "GRASS locations in {}"
+msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง และ ชุดแผนที่  ของ GRASS"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "เปลี่ยนชื่อ"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "จุด"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "เปลี่ยนชื่อ"
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "คัดลอกตาราง"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "ลบ filtered"
+msgid "Failed to copy map: new map has the same name"
+msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-#, fuzzy
-msgid "Delete intermediate data?"
-msgstr "ลบ filtered"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "แสดง"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "สร้าง mapset ใหม่"
+msgid "Delete map"
+msgstr "ลบทั้งหมด"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
-msgid "Choose model file"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "ลบ"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:782
+msgid "g.remove completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "แสดง"
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:440
-msgid "Choose file to save current model"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "คัดลอก"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "แสดง"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "ไดเรคโทรี GIS Data ใหม่ "
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "ไดเรคโทรี GIS Data ใหม่ "
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
-msgid "Model exported to <%s>"
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, fuzzy, python-format
+msgid "Current mapset is <%s>."
+msgstr "เปลี่ยนชุดแผนที่"
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "Columns"
+msgid "Data catalog"
+msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
+msgid "Reload GRASS locations"
+msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง และ ชุดแผนที่  ของ GRASS"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, python-format
-msgid ""
-"Reading model file <%s> failed.\n"
-"Invalid file, unable to parse XML document.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:887
-msgid "Please wait, loading model..."
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:953
-msgid "Writing current settings to model file failed."
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
-#, python-format
-msgid "Unable to open file <%s> for writing."
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "ชุดเครื่องมือ สำหรับ  cleaning topology ของแผนที่เชิงเส้น"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
-#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
-msgid "Remove"
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/rdigit/controller.py:303
 #, fuzzy
-msgid "Disable"
-msgstr "ลิสต์ตาราง"
+msgid "Do you want to save changes?"
+msgstr "สร้าง mapset ใหม่"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "ส่งออกแผนที่แรสเตอร์"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Visibility graph construction."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Visibility graph construction."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "การวิเคราะห์ Lidar"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "สร้าง/ปรับปรุง ตารางสี ที่เกี่ยวข้องกับ ชั้นข้อมูลแผนที่เชิงภาพ"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "สร้าง mapset ใหม่"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "ส่งออกแผนที่แรสเตอร์"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "ส่งออกแผนที่เวคเตอร์"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "ส่งออกแผนที่แรสเตอร์"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "คำนวน ดัชนี shape บนแผนที่เชิงภาพ"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "ดิจิไทซ์เส้นใหม่"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "ดิจิไทซ์เส้นใหม่"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "ดิจิไทซ์จุดใหม่"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "แผนที่แรสเตอร์"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "แผนที่เชืงเส้น 3มิติ"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "ส่งออกแผนที่แรสเตอร์"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "เปลี่ยนค่า"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "แผนที่แรสเตอร์"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "วิธี:"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "ลิสต์ตาราง"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "ลบ filtered"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "ลบ filtered"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "สร้าง mapset ใหม่"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+msgid "Choose model file"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+msgid "Choose file to save current model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Columns"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, python-format
+msgid ""
+"Reading model file <%s> failed.\n"
+"Invalid file, unable to parse XML document.\n"
+"\n"
+"%s"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1007
+msgid "Please wait, loading model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1073
+msgid "Writing current settings to model file failed."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
+#, python-format
+msgid "Unable to open file <%s> for writing."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
+#: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
+msgid "Remove"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:1448
+#, fuzzy
+msgid "Disable"
+msgstr "ลิสต์ตาราง"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "ตาราง"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "สร้าง แถบข้อความ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "สี"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "เพิ่มจุดศูนย์ถ่วง"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "เอา  outliers ใน ชุดของจุด ออก"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 msgid "Default value"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 msgid "Add new variable"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Pointer"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "ชุดแผนที่:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 msgid "Python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, python-format
 msgid "Unable to launch Python script. %s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 msgid "Choose file to save"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "ลิสต์ตาราง"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 msgid "Invalid:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "ดัชนี Shape"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr ""
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "ชนิด"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "แผนที่เชิงเส้น"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "ตาราง"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Columns"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 msgid "Model properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 msgid "Commands"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "ยอมให้เขียนทับไฟล์ที่มีอยู่แล้ว"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 msgid "Apply properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "ลบทั้งหมด"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3063,101 +3440,101 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "ตัวแปร Terrain"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "ลบ filtered"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3165,253 +3542,253 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "ถึง"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Columns"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 msgid "Loop properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 msgid "If-else properties"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "ลบทั้งหมด"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, python-format
 msgid "Failed to read instruction %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 msgid "GRASS GIS Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 msgid "Generating preview..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3419,1424 +3796,1409 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 msgid "Generating preview, wait please"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, python-format
 msgid "Failed to read file %s."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "จุด"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "ล้างค่า"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Flow lines"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 msgid "Unable to run `ps.map -b`"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 msgid "Format"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "กว้าง:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 #, fuzzy
 msgid "Height"
 msgstr "เน้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 msgid "Right"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "บน"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "ล่าง"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 msgid "Invalid input"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "ดัชนี Shape"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "จุด"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "การวิเคราะห์ Landscape"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 msgid "Map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 msgid "fit frame to match selected map"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตที่บันทึกไว้"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "ชุดแผนที่:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 msgid "Region:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 msgid "Map scale and center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 #, fuzzy
 msgid "E:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "N:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Rescale"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "ลำดับที่ 1"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "จุด"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "Flow lines"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 msgid "areas"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "เปลี่ยนชุดแผนที่"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "ลบ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "ลักษณะข้อมูล"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "เพิ่มจุดศูนย์ถ่วง"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "แก้ไข เส้น/ขอบเขต"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "ลบชั้นข้อมูล"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "เปลี่ยนชุดแผนที่"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "สี"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 msgid "Outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Fill lake"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "กฎของสี"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Slope และ aspect"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "แสดง"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "เส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Rescale"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "ลบคอลัมน์"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 msgid "Set width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "แก้ไขค่าหมวดหมู่ แบบโต้ตอบ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 msgid "Choose line style:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 msgid "Choose linecap:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "เพิ่ม legend"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 msgid "Show raster legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "จากเวคเตอร์เป็นแรสเตอร์"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "จากเวคเตอร์เป็นแรสเตอร์"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 msgid "Type of legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "ระนาบ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 #, fuzzy
 msgid "Vector map"
 msgstr "แผนที่เชิงเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "สร้าง แถบข้อความ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "Columns"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "columns"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 msgid "use border color:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-msgid "Unsupported units"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 msgid "default"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "ชนิด"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "ข้อความ SQL"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "ทดสอบ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "ข้อมูล Textural"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "เน้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "ลำดับที่ 1"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "สร้างจุด"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "สร้าง Stationing"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 msgid "Image"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 msgid "Rotation angle (deg):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "แสดงค่าติดตั้ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 msgid "Size (pt):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Slope และ aspect"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 #, fuzzy
 msgid "Generate PostScript output"
 msgstr "เครื่องมือสร้างแผนที่ ผลลัพธ์ แบบ Hardcopy PostScript"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 #, fuzzy
 msgid "Generate PDF output"
 msgstr "สร้างจุด"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "แสดง กริด"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "ค้นหาข้อมูล"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "Columns"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4844,76 +5206,76 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "ข้อความ SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "ข้อความ SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 #, fuzzy
 msgid "Loading data..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -4922,225 +5284,225 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Flow accumulation"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "รายงานและสถิติ"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "ตาราง"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "การค้นหาแบบ SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5148,7 +5510,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5157,65 +5519,65 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Columns"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5223,168 +5585,168 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "ชื่อ Column"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "รูปแบบ"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "ช่องหลัก"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 msgid "Layer to remove"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "สถิติทั่วไป"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "สถิติทั่วไป"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "เอาตารางรายละเอียดของแผนที่เชิงเส้นออก"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5393,822 +5755,823 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "สร้างตาราง"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "เปลี่ยนข้อมูลลักษณะ"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "แสดงข้อมูลลักษณะ"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 msgid "Failed to display legend."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 msgid "No animation to export."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 msgid "Preparing export, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 msgid "Exporting animation, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
 "Invalid file, unable to parse XML document."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 msgid "Simple mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "แสดง"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "ขั้นสูง"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "ลิสต์ตาราง"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "สำเนาถูกต้อง"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Slope และ aspect"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "แสดงค่าติดตั้ง"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "ตัวแปร Terrain"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "พื้นที่ทำงาน"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "ข้อมูล รายงานหมวดหมู่"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "จุด"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "ขยายออก"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Sample transects"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "SWF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "แผนที่เชิงเส้น"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 msgid "Export file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "เปลี่ยนชุดแผนที่"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "ชุดเครื่องมือ สำหรับ  cleaning topology ของแผนที่เชิงเส้น"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Quantization"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 msgid "Add space-time dataset or series of map layers"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "วเคราะหโครงขาย"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6216,47 +6579,47 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 msgid "Creation of turntable failed."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6264,597 +6627,598 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 msgid "Overwrite map"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "ลบชั้นข้อมูล"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "จัดการ หรือ รายงาน หมวดหมู่"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, python-format
 msgid "Choose existing %s.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "เอาตารางรายละเอียดของแผนที่เชิงเส้นออก"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 msgid "topology"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "ช่องหลัก"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "หา shortest path บน vector network."
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "การวิเคราะห์การเดินทางของ Salesman"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "สร้าง Steiner tree สำหรับ network และ  terminal ที่กำหนด"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "วเคราะหโครงขาย"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "จุด"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Flow lines"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "ส่งออก"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "เวคเตอร์"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "ลิสต์ตาราง"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "ลิสต์ตาราง"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "การวิเคราะห์ Lidar"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "ตั้งค่า"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Steiner tree"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "กฎของสี"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "กฎของสี"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Pointer"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "เส้นกว้าง"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 msgid "Snapping treshold in pixels:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "เวคเตอร์"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "เพิ่มจุดศูนย์ถ่วง"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "การวิเคราะห์ Lidar"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "แผนที่ Shadow"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "การวิเคราะห์การเดินทางของ Salesman"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MASK"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -6864,371 +7228,398 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "ดิจิไทซ์"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "แผนที่เชืงเส้น 3มิติ"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 msgid "Map window test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "แสดง"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, python-format
 msgid "Unsupported command %s."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, python-format
 msgid "Starting map display <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, python-format
 msgid "Stopping map display <%s>..."
 msgstr ""
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "ส่งออกแผนที่เวคเตอร์"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Visibility graph construction."
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "เพิ่ม legend"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 msgid "Show/hide north arrow"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 msgid "Measure area"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "สร้าง 3D เวคเตอร์บนแรสเตอร์"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "สร้าง 3D เวคเตอร์บนแรสเตอร์"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "วเคราะหโครงขาย"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "ลาก เม้าส์ เพิ่อเลื่อน"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "ลาก หรือ กด เม้าส์ เพิ่อขยาย"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "ลาก หรือ กด เม้าส์ เพิ่อไม่ขยาย"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "แผนที่เชืงเส้น 3มิติ"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "สร้าง RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "เปลี่ยนชื่อ"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 msgid "Rename configuration file"
 msgstr ""
 
@@ -7237,326 +7628,326 @@ msgstr ""
 msgid "Create new configuration file for r.li modules"
 msgstr "ตัวแก้การกำหนดค่า สำหรับ r.li.'index'"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "แสดงค่าติดตั้ง"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "ตัวแปร Terrain"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Sample transects"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "ย้ายหน้าต่าง"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "ย้ายหน้าต่าง"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "เส้น"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Sample transects"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "ย้ายหน้าต่าง"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7564,187 +7955,200 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 msgid "Region type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 msgid "Sampling area type:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "ช่วงของ ค่าหมวดหมู่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "เส้น"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "เน้น"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "แก้ไขข้อมูล"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "ช่องหลัก"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Sample transects"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "พื้นที่ทำงาน"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 msgid "Tools Toolbar"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+#, fuzzy
+msgid "Layers"
+msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+msgid "Console"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+msgid "Python"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7752,236 +8156,224 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 msgid "Switch to new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "แสดง"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "สร้าง topology สำหรับ แผนที่เชิงเส้น GRASS."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 msgid "Choose script file to run"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 msgid "Set permission?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 msgid "Unable to set permission. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 msgid "No location/mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 msgid "No mapset provided. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, fuzzy, python-format
-msgid "Current mapset is <%s>."
-msgstr "เปลี่ยนชุดแผนที่"
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "เปลี่ยน สภาวะแวดล้อม การทำงาน"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 msgid "GRASS version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1102
-msgid "GRASS SVN Revision"
+#: ../gui/wxpython/lmgr/frame.py:1218
+msgid "GRASS SVN revision"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 msgid "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -7989,37 +8381,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8027,56 +8419,53 @@ msgid ""
 "from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr ""
 
@@ -8092,12 +8481,14 @@ msgid "Set raster output format"
 msgstr "เลือกแบบอักษร"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr ""
 
@@ -8121,7 +8512,7 @@ msgstr "ดาวน์โหลด และนำเข้า ข้อมู
 msgid "Add command layer"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "ออก"
@@ -8174,8 +8565,8 @@ msgid "Add rhumbline layer"
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
@@ -8198,304 +8589,296 @@ msgstr ""
 msgid "Background vector map"
 msgstr "แผนที่แรสเตอร์"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 msgid "3D view properties"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "สร้าง RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "หยุดการแก้ไข"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Recode แบบโต้ตอบ"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "รายงานและสถต"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, python-format
 msgid "Unsupported map type <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 #, fuzzy
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "ตัวคำนวนแผนที่"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Georectify"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "แผนที่ Shadow"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "เอาตารางรายละเอียดของแผนที่เชิงเส้นออก"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "แสดงค่าติดตั้ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "แสดงค่าติดตั้ง"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "แผนที่ Shadow"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8503,620 +8886,628 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 msgid "Overwrite file?"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 msgid "Statistics for Profile(s)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "ผลรวมขึ้นอยู่กับ ค่า  cell แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 msgid "Nothing to plot."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "ผลรวมขึ้นอยู่กับ ค่า  cell แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "รายงาน สถิติ สำหรับ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "สถิติทั่วไป"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 msgid "Quit plot tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 msgid "Left Mouse Down at Point:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "สร้าง 3D เวคเตอร์บนแรสเตอร์"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "สร้าง 3D เวคเตอร์บนแรสเตอร์"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "ผลรวมขึ้นอยู่กับ ค่า  cell แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 msgid "Area"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "รายงาน สถิติ สำหรับ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 msgid "Select raster map(s) to profile:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "คัดลอก"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 msgid "Regression statistics copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 msgid "Histogram single raster"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "รายงาน สถิติ สำหรับ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Rescale"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "สีเส้นกริด"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "แสดง กริด"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "เปลี่ยนค่าติดตั้ง"
+msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "เปลี่ยนข้อมูลลักษณะ"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "ส่งออกแผนที่แรสเตอร์"
+msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "ช่วยเหลือ"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "ชื่อตาราง"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "ชื่อตาราง"
+msgid "Seed point outside the current region"
+msgstr "สร้าง Area สำหรับ ขอบเขต ปัจจุบัน"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr ""
 
@@ -9124,8 +9515,8 @@ msgstr ""
 msgid "Workspace"
 msgstr "พื้นที่ทำงาน"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "ใหม่"
 
@@ -9133,7 +9524,7 @@ msgstr "ใหม่"
 msgid "Create new workspace"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "เปิด"
 
@@ -9141,12 +9532,12 @@ msgstr "เปิด"
 msgid "Load workspace from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr ""
 
@@ -9168,7 +9559,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "แสดง"
@@ -9203,7 +9594,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
@@ -9897,23 +10288,23 @@ msgstr "ปริมาตร ไปเป็น แผนที่เชิง
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Georectify"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -9953,16 +10344,16 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr "เครื่องมืออย่างง่ายสำหรับแปลงค่า  ทิศทาง และ ระยะทาง ไปเป็นค่าพิกัด หรือ อื่นๆ"
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr ""
 
@@ -9974,7 +10365,7 @@ msgstr ""
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "ปิด"
@@ -9983,8 +10374,8 @@ msgstr "ปิด"
 msgid "Quit wxGUI session."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "ยินดีต้อนรับสู่ GRASS GIS"
@@ -9993,7 +10384,7 @@ msgstr "ยินดีต้อนรับสู่ GRASS GIS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "ตั้งค่า"
@@ -10175,7 +10566,7 @@ msgstr "จัดการ projections"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr ""
 
@@ -11277,7 +11668,7 @@ msgid ""
 msgstr "สร้าง ชั้นแผนที่เชิงภาพ ด้วย  contiguous areas grown ด้วย 1 cell"
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "ระนาบ"
 
@@ -11540,8 +11931,8 @@ msgid "Develop vector map"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr ""
 
@@ -12450,13 +12841,13 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 #, fuzzy
 msgid "Interactive input for supervised classification"
 msgstr "Clustering input สำหรับ unsupervised classification"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -12774,7 +13165,7 @@ msgstr "แผนที่เชิงภาพ"
 #: ../gui/wxpython/menustrings.py:827 ../gui/wxpython/menustrings.py:1734
 #, fuzzy
 msgid "Develop 3D raster map"
-msgstr "แผนที่แรสเตอร์"
+msgstr "แผนที่เชิงภาพ"
 
 #: ../gui/wxpython/menustrings.py:828 ../gui/wxpython/menustrings.py:1735
 msgid "Manage 3D NULL values"
@@ -13560,26 +13951,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
+#, fuzzy
 msgid "Temporal plot tool"
-msgstr ""
+msgstr "ส่งออกแผนที่แรสเตอร์"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "ช่วยเหลือ"
@@ -13606,7 +14002,7 @@ msgid "Prints system information"
 msgstr "ข้อมูลฐานข้อมูล"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr ""
 
@@ -13620,296 +14016,305 @@ msgstr "ตารางสี"
 msgid "Attribute table manager"
 msgstr "คัดลอกรายละเอียด"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 #, fuzzy
 msgid "Export model to image"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "วิธี:"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "เพิ่มจุดศูนย์ถ่วง"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "เพิ่มชั้นข้อมูลคำสั่ง"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "ลบ filtered"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "แสดงคู่มือ GRASS แบบ HTML"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "แสดง ข้อมูลพื้นฐานของ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Visibility graph construction."
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "เวคเตอร์"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "เพิ่ม legend"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "แสดงคู่มือ GRASS แบบ HTML"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "แสดง ข้อมูลพื้นฐานของ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "ส่งออก"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 msgid "Clear output window content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "ข้อมูล Textural"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Flow lines"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13917,12 +14322,12 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, python-format
 msgid "Command output saved into '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13930,308 +14335,339 @@ msgid ""
 "Details: %(error)s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, python-format
 msgid "Command log saved to '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "หมวด"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "ข้อมูลที่ใกล้ที่สุด"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "สร้าง mapset ใหม่"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "แสดง"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Recode แบบโต้ตอบ"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-#, fuzzy
-msgid "Layers"
-msgstr "ชั้นข้อมูล"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "แสดงผล:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "โปร่งแสง"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "สร้างตาราง"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14243,82 +14679,92 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, python-format
 msgid "EPSG code %s not found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "เลือกแบบอักษร"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+msgid "Example"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "เปลี่ยนชุดแผนที่"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14327,270 +14773,356 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "เจ้าของ"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "เครื่องมือ ค้นหา"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "ลักษณะข้อมูล"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 msgid "Value"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 msgid "Copy all to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, python-format
 msgid "Copy from '%s' column"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "คัดลอกหมวดหมู่"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "คัดลอก"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "คัดลอกตาราง"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "เครื่องมือ ค้นหา"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "ทดสอบ"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 msgid "Nothing found"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "ข้อมูล Textural"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "ลบข้อมูลที่เลือก"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
-#, fuzzy
-msgid "Load settings:"
-msgstr "แสดงค่าติดตั้ง"
+#: ../gui/wxpython/gui_core/widgets.py:1250
+msgid "Load:"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "บันทึก"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+msgid "Set parameters for the script"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+msgid "Run (Ctrl+R)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Quantization"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 #, fuzzy
 msgid "Required"
 msgstr "ต้องการ"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 msgid "Parameterized in model"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 msgid "valid range"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Recode แบบโต้ตอบ"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
-msgid ""
-"Enter file content directly instead of specifying a file. Temporary file "
-"will be automatically created."
+#: ../gui/wxpython/gui_core/forms.py:1820
+msgid ""
+"Enter file content directly instead of specifying a file. Temporary file "
+"will be automatically created."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
+msgid "Directory"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "ชั้นข้อมูล"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
-msgid "Directory"
-msgstr ""
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 msgid "Nothing to load."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14598,46 +15130,46 @@ msgid ""
 "Reason: %s"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 msgid "Nothing to save."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "บันทึก"
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, python-format
 msgid "Unable to parse command '%s'"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง และ ชุดแผนที่  ของ GRASS"
@@ -14647,578 +15179,460 @@ msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง 
 msgid "Location or mapset is not defined."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "สร้าง/แก้ไข กลุ่ม"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 msgid "Remove selected layer(s) from list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 msgid "Unapplied changes"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, python-format
 msgid "Creating of new group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "ชนิดข้อมูล"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "ชุดแผนที่:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
 msgid "Invert selection"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "ลิสต์ filtered"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "ลิสต์ filtered"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "ลิสต์ filtered"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "ชั้นข้อมูล"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "ส่งออกแผนที่เวคเตอร์"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "ตำแหน่ง"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "เพิ่มชั้นข้อมูลข้อความ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "แสดง ข้อมูลพื้นฐานของ ชั้นข้อมูลแผนที่เชิงภาพ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "แสดง ข้อมูลพื้นฐานของ ชั้นข้อมูลแผนที่เชิงภาพ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 msgid "Image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "ข้อความ SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "ชื่อตาราง"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "สำเนาถูกต้อง"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "คัดลอกรายละเอียด"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "คัดลอกรายละเอียด"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "โปร่งแสง"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "โปร่งแสง"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 msgid "Code Revision"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "เส้น"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "แสดงตัวอย่าง"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "คัดลอกหมวดหมู่"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "คัดลอกหมวดหมู่"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "สร้างชุดแผนที่"
@@ -15320,1327 +15734,1498 @@ msgstr ""
 msgid "Create histogram with d.histogram"
 msgstr "สร้าง 3D เวคเตอร์บนแรสเตอร์"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 msgid "Not selectable element"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "ชนิด"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "เปลี่ยนค่าติดตั้ง"
+msgid "Source input"
+msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "ระเบียบการ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "ส่งออก"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "ชนิดของแหล่งข้อมูล"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "ข้อมูล Textural"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "ข้อมูล Textural"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "ข้อมูล Textural"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "ข้อมูล Textural"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 msgid "Choose file to import"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "ลักษณะข้อมูล"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "ขอมล Transform"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 msgid "topological"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "สร้าง mapset ใหม่"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "ชุดแผนที่:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 msgid "WARNING: invalid topology"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "ต้องการ"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "ลิสต์ filtered"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "จัดการ projections"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 msgid "Order of layers in raster"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Resample ใช้ วิธ๊ Nearest Neighbor"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "การเสื่อมถอย เชิงเส้น"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 msgid "Additional query parameters for server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "ค่าพิกัด"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 msgid "Select source image format.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 msgid "Select source projection.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "ชั้นข้อมูล"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Steiner tree"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
+msgid "Add default"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "ส่งออก"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "เปลี่ยนชื่อ"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 msgid "Web service layer properties"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 msgid "Extent and resolution are based on computational region."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "กำลังอ่านข้อมูล ..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "หุบทั้หมด"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "หุบทั้หมด"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "แสดง รายละเอียด ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "ตั้งค่า"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "แก้ไขค่าหมวดหมู่ แบบโต้ตอบ"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 msgid "fp range"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "สร้าง topology สำหรับ แผนที่เชิงเส้น GRASS."
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "แก้ไขค่าหมวดหมู่ แบบโต้ตอบ"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "แสดง รายละเอียด ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "ชั้นข้อมูล:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 msgid "Load color from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 msgid "Load size from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "แผนที่เชิงภาพ  Series ไปเป็น ปริมาตร"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Load width from column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "คัดลอก ตารางรายละเอียดด้วย"
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "ตารางสี"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 msgid "No database connection defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 msgid "Please wait, loading data from attribute table..."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "แก้ไขค่าหมวดหมู่ แบบโต้ตอบ"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "แสดง รายละเอียด ของแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "ชุดเครื่องมือ สำหรับ  cleaning topology ของแผนที่เชิงเส้น"
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 msgid "No color column defined. Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 msgid "GRASS GIS Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "บันทึก GCPs เป็นแฟ้มข้อมูลจุด"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 msgid "Load expression from file"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "NOT"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "แปลง แผนที่เชิงภาพ 3 มิติ ไปเป็น แผนที่เชิงภาพ 2 มิติ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "สร้างจุดสุ่ม"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 msgid "Choose a file name to save the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
-msgid "&Install"
-msgstr ""
+#: ../gui/wxpython/modules/extensions.py:118
+msgid "&Install"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:120
+msgid "Install selected add-ons GRASS module"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:123
+msgid "Show g.extension manual page"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:187
+msgid "Extension not defined"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:211
+msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "จัดการ projections"
+
+#: ../gui/wxpython/modules/extensions.py:238
+msgid "Install"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:243
+#, fuzzy
+msgid "Show manual page"
+msgstr "แผนที่ Shadow"
+
+#: ../gui/wxpython/modules/extensions.py:343
+#, fuzzy, python-format
+msgid "Unable to load extensions. %s"
+msgstr "เปลี่ยนค่าติดตั้ง"
+
+#: ../gui/wxpython/modules/extensions.py:389
+#, fuzzy
+msgid "Manage installed GRASS Addons extensions"
+msgstr "จัดการ projections"
+
+#: ../gui/wxpython/modules/extensions.py:405
+msgid "List of installed extensions"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:413
+#, fuzzy
+msgid "Uninstall"
+msgstr "จัดการ projections"
+
+#: ../gui/wxpython/modules/extensions.py:415
+#, fuzzy
+msgid "Uninstall selected Addons extensions"
+msgstr "จัดการ projections"
+
+#: ../gui/wxpython/modules/extensions.py:419
+msgid "Reinstall"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:421
+#, fuzzy
+msgid "Reinstall selected Addons extensions"
+msgstr "จัดการ projections"
+
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "ลบ vertex"
+
+#: ../gui/wxpython/modules/extensions.py:526
+msgid "Extension"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "ลิสต์ filtered"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "ลิสต์ filtered"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "ลิสต์ filtered"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "ส่งออกแผนที่เวคเตอร์"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "เปลี่ยนค่าติดตั้ง"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/modules/extensions.py:101
-msgid "Install selected add-ons GRASS module"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#: ../gui/wxpython/modules/extensions.py:104
-msgid "Show g.extension manual page"
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
-msgid "Extension not defined"
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
-msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
-msgid "Install"
-msgstr ""
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/import_export.py:431
 #, fuzzy
-msgid "Show manual page"
-msgstr "แผนที่ Shadow"
+msgid "Unable to determine number of raster bands"
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/modules/extensions.py:315
-#, fuzzy, python-format
-msgid "Unable to load extensions. %s"
-msgstr "เปลี่ยนค่าติดตั้ง"
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "แสดง ข้อมูลพื้นฐานของ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/import_export.py:642
 #, fuzzy
-msgid "Manage installed GRASS Addons extensions"
-msgstr "จัดการ projections"
+msgid "Define output format for raster data"
+msgstr "แสดง ข้อมูลพื้นฐานของ ชั้นข้อมูลแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/modules/extensions.py:365
-msgid "List of installed extensions"
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/import_export.py:707
 #, fuzzy
-msgid "Uninstall"
-msgstr "จัดการ projections"
+msgid "No data source selected."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/modules/extensions.py:371
-#, fuzzy
-msgid "Uninstall selected Addons extensions"
-msgstr "จัดการ projections"
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:372
-msgid "Reinstall"
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/import_export.py:758
 #, fuzzy
-msgid "Reinstall selected Addons extensions"
-msgstr "จัดการ projections"
+msgid "No layers selected."
+msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/import_export.py:836
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
+msgid "Reprojection"
+msgstr "ตำแหน่ง"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "ส่งออกแผนที่เวคเตอร์"
+
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
-#, fuzzy
-msgid "Remove extension"
-msgstr "ลบ vertex"
+#: ../gui/wxpython/modules/import_export.py:867
+msgid "Layers to be reprojected"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
-msgid "Extension"
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "ลบข้อมูลที่เลือก"
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 #, fuzzy
 msgid "Numeric column:"
 msgstr "ช่องหลัก"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 #, fuzzy
 msgid ":"
 msgstr "X:"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 #, fuzzy
 msgid "Model: "
 msgstr "วิธี:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "แก้ไข เส้น/ขอบเขต"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 msgid "remove duplicates"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "แก้ไข เส้น/ขอบเขต"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "แก้ไข เส้น/ขอบเขต"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "เอาตารางออก"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 msgid "remove lines/boundaries of zero length"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "ลักษณะข้อมูล"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "แก้ไข เส้น/ขอบเขต"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "เพิ่มจุดศูนย์ถ่วง"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "ชุดเครื่องมือ สำหรับ  cleaning topology ของแผนที่เชิงเส้น"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "ชุดเครื่องมือ สำหรับ  cleaning topology ของแผนที่เชิงเส้น"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 msgid "Threshold"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16648,20 +17233,20 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16670,186 +17255,181 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, python-format
 msgid "Command '%s' failed\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, python-format
 msgid "Details: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "แผนที่แรสเตอร์"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "แผนที่แรสเตอร์"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "กำลังอ่านข้อมูล ..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "แผนที่แรสเตอร์"
+
+#: ../gui/wxpython/core/render.py:645
+msgid "Rendering..."
+msgstr ""
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "กำลังอ่านข้อมูล ..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "แผนที่แรสเตอร์"
-
-#: ../gui/wxpython/core/render.py:1388
-msgid "Rendering..."
-msgstr ""
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, python-format
 msgid "Unknow tag %s"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
-msgstr ""
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, python-format
 msgid "Duplicated key: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16858,176 +17438,181 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 msgid "Reason"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr ""
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "จุด"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Quantization"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "หุบทั้หมด"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "ขยายทั้หมด"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "ลิสต์ตาราง"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตที่บันทึกไว้"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17035,12 +17620,12 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "เปลี่ยนค่าติดตั้ง"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17048,273 +17633,302 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, python-format
 msgid "Unable to parse settings '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 msgid "Invalid location name"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Sample transects"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "ขั้นสูง"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "ฐานข้อมูล:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "บันทึก"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "สร้าง mapset ใหม่"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+msgid "Path to the IAU-codes file:"
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+msgid "IAU code:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "เปิดพื้นที่ทำงานที่มีอยู่"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
+msgstr "ซ้อนทับ แผนที่เชิงเส้น 2 แผนที่"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Location %s ถูกสร้าง!"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17322,252 +17936,256 @@ msgid ""
 "Details: %(err)s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
 "need to change the default GIS data directory in the GRASS startup screen."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+msgid "IAU code missing."
+msgstr ""
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "ตก"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "ใต้"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "ความละเอียดแนว ออก-ตก"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 msgid "Northing"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 msgid "Elevation"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "โปรแกรมสร้าง Surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "โปรแกรมสร้าง Surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 msgid "Surface map color"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "แก้ไขข้อมูล"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "แก้ไขข้อมูล"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 #, fuzzy
 msgid "failed"
 msgstr "นำเข้า ล้มเหลว"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17575,795 +18193,795 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "การวิเคราะห์ Lidar"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "Quantization"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "ตัวแปร"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "ล้างค่า"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Rescale"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "สร้างชุดแผนที่"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "ไดเรคโทรี GIS Data ใหม่ "
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 #, fuzzy
 msgid "Surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 #, fuzzy
 msgid "Vector"
 msgstr "แผนที่เชิงเส้น"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "วิธี:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 msgid "Coarse mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Steiner tree"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 msgid "Fine mode:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "แผนที่"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "ล้างค่า"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "สี"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "ความละเอียดแนว เหนือ-ใต้"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "โปร่งแสง"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 #, fuzzy
 msgid "Vector lines"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "เส้น"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "กว้าง:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 #, fuzzy
 msgid "color:"
 msgstr "สี"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "ตั้งค่า"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 #, fuzzy
 msgid "Vector points"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 msgid "Light source position"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 msgid "Isosurface value"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "เปลี่ยนข้อมูลลักษณะ"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "E"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 #, fuzzy
 msgid "Level"
 msgstr "แถบข้อความ"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "ลิสต์ filtered"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "Cost surface"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "ระนาบ"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 msgid "North edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "ใต้"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "ค้นหา ขอบ"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 msgid "Northing (Y):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "เน้น"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "ล่าง"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, python-format
 msgid "3d raster map <%s> not found"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "แสดงค่าติดตั้ง"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 msgid "value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "ย้าย จุด"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "เน้น"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "สีเส้น"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18373,7 +18991,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18385,23 +19003,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18409,7 +19027,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18420,31 +19038,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18455,68 +19073,68 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "เลือกวิธี rectification สำหรับแผนที่เชิงภาพ"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "แผนที่เชืงเส้น 3มิติ"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "เปลี่ยนชื่อ"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "สี"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "แสดง กริด"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "ไม่มีหมวด"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "ไม่มีหมวด"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -18526,209 +19144,213 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "ย่อ/ขยาย ไปที่ขอบเขตหลัก"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "ไม่มีชั้นข้อมูลถูกเลือก"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "เอาไฟล์ชิ้นส่วนข้อมูลฐานออกจาก ชุดแผนที่ของผู้ใช้"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "ส่งออกแผนที่เวคเตอร์"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "กฎของสี"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "สีพื้นหลัง:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "เลือกทั้งหมด"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "สัญลักษณ์"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "สร้างข้อกำหนด"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 msgid "Computing of scatter plots failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "แผนที่เชิงภาพ"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "ส่งออกแผนที่แรสเตอร์"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "การจำแนก ภาพ"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 msgid "Include selected area to class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 msgid "Exclude selected area from class"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "ค้นหาขอบมุม"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "ย้าย จุด"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "ย้าย จุด"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "ลบ vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "ลบ vertex"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "เพิ่มตาราง"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "คัดลอกหมวดหมู่"
 
 #, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "สร้าง mapset ใหม่"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
@@ -18737,6 +19359,18 @@ msgstr "คัดลอกหมวดหมู่"
 #~ msgstr "แผนที่เชิงภาพไม่ใช่ 3มิติ"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "ชื่อตาราง"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "แผนที่เชืงเส้น 3มิติ"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "คัดลอกตาราง"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "ลิสต์ filtered"
 
@@ -18753,16 +19387,18 @@ msgstr "คัดลอกหมวดหมู่"
 #~ msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "เพิ่มจุดศูนย์ถ่วง"
+#~ msgid "Load settings:"
+#~ msgstr "แสดงค่าติดตั้ง"
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "เพิ่มชั้นข้อมูลข้อความ"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "ส่งออก แผนที่เชิงเส้น GRASS เป็น SVG."
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "เพิ่มชั้นข้อมูลข้อความ"
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "นำเข้า แผนที่เชิงเส้น รุ่นเก่า ของ GRASS"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -18779,39 +19415,37 @@ msgstr "คัดลอกหมวดหมู่"
 #~ msgstr "ค่าพิกัด"
 
 #, fuzzy
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "ส่งออก แผนที่เชิงเส้น GRASS เป็น SVG."
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "คัดลอกรายละเอียด"
 
 #, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "นำเข้า แผนที่เชิงเส้น รุ่นเก่า ของ GRASS"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "ปรับปรุง statistic ของแผนที่เชิงภาพ"
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "columns"
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "สร้างชุดแผนที่"
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "เพิ่มชั้นข้อมูลข้อความ"
 
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "กลุ่มภาพเป้าหมาย ตำแหน่ง และ ชุดแผนที่  ของ GRASS"
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "นำเข้า แผนที่เชิงเส้น รุ่นเก่า ของ GRASS"
 
 #~ msgid "Vector to volume"
 #~ msgstr "แผนที่เชิงเส้น ไปเป็น ปริมาตร"
 
+#~ msgid "Sites to vector"
+#~ msgstr "Sites ไปเป็น แผนที่เชิงเส้น"
+
 #, fuzzy
 #~ msgid "V&olumes"
 #~ msgstr "columns"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "นำเข้า แผนที่เชิงเส้น รุ่นเก่า ของ GRASS"
-
-#~ msgid "Sites to vector"
-#~ msgstr "Sites ไปเป็น แผนที่เชิงเส้น"
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "columns"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -18848,6 +19482,5 @@ msgstr "คัดลอกหมวดหมู่"
 #~ "registered raster3d map of a space time raster3d dataset."
 #~ msgstr "คำนวน univariate statistics จาก non-null 3d cells ของแผนที่เชิงภาพ3d"
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "คัดลอกรายละเอียด"
+#~ msgid "Digitize"
+#~ msgstr "ดิจิไทซ์"
diff --git a/locale/po/grasswxpy_tr.po b/locale/po/grasswxpy_tr.po
index 167c743..5d8a2df 100644
--- a/locale/po/grasswxpy_tr.po
+++ b/locale/po/grasswxpy_tr.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_tr\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2010-12-01 03:06+0200\n"
 "Last-Translator: Fatih <bounfat at gmail.com>\n"
 "Language-Team: Türkçe <grass-translations at lists.osgeo.org>\n"
@@ -20,53 +20,53 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Poedit-Bookmarks: 2294,3,1015,671,68,1427,-1,-1,-1,-1\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "GRASS veri dizinini seç:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Kaynak mevkiyi seç:"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "Proje mevkisi ve harita takımını seç"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "GRASS oturumu başlat"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "Göz at"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -74,152 +74,152 @@ msgstr ""
 "yeni harita takımı oluştur"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Seçilmiş yeri yeniden adlandır"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Sil"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Seçilen mevkiyi sil"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "Yeniden adlandır&"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Seçilmiş harita takımını yeniden adlandır"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Sil"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Seçilen harita takımını sil"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS CBS Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "GRASS oturumu başlat"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Hata"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "GRASS veritabanı oluşturulamıyor. Yerel ayarlarını kontrol et."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "HATA: <%s> mevkisi bulunamadı"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "HATA: <%s>harita takımı bulunamadı"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Hata:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "<%s> GRASS mevkisini oluşturmak istiyormusun?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Yeni harita takımı oluştur"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "<%s> Konumu oluşturuldu"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "Varsayılan bölge sınırları ve çözünürlüğünü şimdi ayarlamak istermisin?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "<%s> vektör haritasına yeni obje eklemede hata."
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -229,7 +229,7 @@ msgstr ""
 "\n"
 "Bu harita takımı yeniden isimlendirilemez."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, fuzzy, python-format
 msgid ""
 "Current name: %s\n"
@@ -239,12 +239,12 @@ msgstr ""
 "Geçerli ad:%s\n"
 "Yeni ad gir:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "İleti"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -255,7 +255,7 @@ msgstr ""
 "\n"
 "Harita takımı zaten <%s> konumunda var."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -263,7 +263,7 @@ msgid ""
 "%s"
 msgstr "Harita takımı yeniden adlandırılamıyor"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -271,7 +271,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr "Mevki Grass Veritabanında zaten mevcut."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -279,7 +279,7 @@ msgid ""
 "%s"
 msgstr "Mevki yeniden adlandırılamıyor"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -289,7 +289,7 @@ msgstr ""
 "\n"
 "Bu harita takımı silinemez."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -302,11 +302,11 @@ msgstr ""
 "\n"
 "Bu harita takımındaki TÜM HARİTALAR KALICI OLARAK silinecektir!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Harita takımı silinemiyor"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -317,42 +317,42 @@ msgstr ""
 "\n"
 "Bu mevkideki TÜM HARİTALAR KALICI OLARAK silinecektir!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Mevki silinemiyor"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "GRASS veritabanı oluşturulamıyor. Yerel ayarlarını kontrol et."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "CBS Veri Dizinini seç:"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Yeni harita takımı için ad gir:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, fuzzy, python-format
 msgid "Mapset <%s> already exists."
 msgstr "Dosya zaten var"
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -361,17 +361,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Seçilmiş harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Yeni harita takımı oluşturulamıyor: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -383,11 +383,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -395,7 +395,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -403,19 +403,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "<%s> vektör haritası büyütülemiyor."
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -444,189 +444,189 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Konum düzeltme aracı"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Sayısallaştırma arayüzü:"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Görüntüyü yazdır"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Görüntüyü sil"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Bölgeyi göster"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Bölgeyi göster"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Vektör haritayı içe aktar"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Analiz"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr "Dosya zaten var"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "En azından %d YKN gerekli. İşlem iptal edildi."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Histogram"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Vektör noktalar"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -635,658 +635,659 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Raster harita yükleniyor"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Raster harita yükleniyor"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Grup Seç:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Grup oluştur/düzenle..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Grup Seç:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Grup Seç:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Grup Seç:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "Yeniden kodlanan raster harita:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Görüntüyü sınıflandır"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Görüntüyü sınıflandır"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Renk"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Seçilen haritaya göre göster"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Yeni harita takımı için ad gir:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Farklı Kaydet..."
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Öznitelik tablosu oluştur "
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Değişik biçimlerdeki öznitelik tablolarını içe aktar."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Matlık seviyesini değiştir"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Seçileni katmanı sil"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "KYM katman ekle"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Uyarı"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Önizleme"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Seçilen haritaya göre göster"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "3B raster harita ekle"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS CBS Harita Görüntüsü: "
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 "Görüntüyü kaydetmek için bir dosya ismi seçin (uzantı eklemeye gerek yok)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 #, fuzzy
 msgid "No raster or vector map layer selected for querying."
 msgstr "Sorgulama için hiçbir vektör harita seçilmedi."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Raster haritayı seç:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Yeniden kodlanan raster harita:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Yeniden kodlanan raster harita:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "2B görünüm moduna geçiş yap"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "2B görünüm moduna geçiş yap"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 #, fuzzy
 msgid "Close"
 msgstr "Kod"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Kategori numarası (%s sütunu) kayıp."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "Kod"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "Kod"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Renk:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Şekil indeksi"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "Çizgi Kalınlığı"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Boyut:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Raster/vektör harita(lar) sorgula"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Seçilen raster/vektör harita(lar) sorgula"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "Modül bul"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "EPSG Kodunu Seç:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Yer Kontrol Noktalarını Yönet"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "Listele"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "Görüntüyü sil"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Görüntüyü sil"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "Harita görüntüle"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 #, fuzzy
 msgid "GCP Manager toolbar"
 msgstr "Renkleri yönet"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Sayfa ayarı"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Yazdırma önizleme"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Görüntüyü yazdır"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Kaydedilmiş bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Görünüş geometrisini isimlendirilmiş bölge olarak kaydet"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "Geçerli aralık"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "Nviz hatası"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Jeorektifiye ayarları iptal edildi."
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Jeorektifiye Harita tipi   "
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "vektör"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Kaynak konumu seç:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Kaynak harita takımını seç:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Grup Seç:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Hiçbiri yoksa grup oluştur"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 #, fuzzy
 msgid "Add vector map to group..."
 msgstr "Vektör harita katmanı ekle"
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Çıktı haritalar için uzantı:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 #, fuzzy
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Yer kontrol noktalarını (YKN) ayarla"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "Kaynak harita takımını seç:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 msgid "Manage Ground Control Points"
 msgstr "Yer Kontrol Noktalarını Yönet"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "En azından %d YKN gerekli. İşlem iptal edildi."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 #, fuzzy
 msgid "source"
 msgstr "yüzey"
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr "hedef"
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "Koordinatları dönüştür"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1295,28 +1296,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "NOKTA dosyasını yazmada hata"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, fuzzy, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "NOKTA dosyası kaydedildi"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "NOKTA dosyasını okumada hata"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1326,283 +1327,283 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 #, fuzzy
 msgid "Rectifying images, please wait..."
 msgstr "Görüntü veya raster koordinatlandırma"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "Görüntüyü dönüştür"
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Görüntü veya raster koordinatlandırma"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, fuzzy, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "<%s> vektör haritasına yeni obje eklemede hata."
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "Katman Yönetici ayarları"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr "GCP Yöneticisini sonlandır"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "Yer kontrol noktalarını (YKN) ayarla"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "kullan"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "yüzey"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "yüzey"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "Hedef grup"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "Hedef grup"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 #, fuzzy
 msgid "Create vector map group"
 msgstr "Yeni vektör harita oluştur"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 #, fuzzy
 msgid "Select vector map(s) to add to group:"
 msgstr "Vektör haritayı seç:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "YKN Düzelt"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 #, fuzzy
 msgid "Ground Control Point No."
 msgstr "Yer Kontrol Noktası"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "yüzey"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr "hedef E:"
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "yüzey"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr "hedef N:"
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Bu oturum için değişiklikleri uygula"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Değişiklikleri kullanıcı ayar dosyasına uygula ve kaydet (varsayılan sonraki "
 "oturum için)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Pencereyi kapat"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Semboloji"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Sembol ayarları"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "Seçileni YKN temizle"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "Renk kuralları"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "Çizgileri göster"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "Sembol ayarları"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "Konum düzeltme aracı"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Rasterlar için düzeltme yöntemini seç"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "1. derece"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "2. derece"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "3. derece"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Vektör haritayı seç:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "hedef konumdaki hesaplama bölgesini kırp"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Kesit ayarları '%s' dosyasına kaydedildi."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Vektör sayısallaştırma hatası"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Vektör sayısallaştırma aracı"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1610,370 +1611,370 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Kategorileri güncelle"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Düzenleme için hiçbir vektör harita seçilmedi."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Sayısallaştırma ayarları"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Bu oturum için değişiklikleri uygula"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "Diyaloğu kapat ve ayarları kullanıcı ayar dosyasına kaydet"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Diyaloğu kapat ve değişiklikleri yok say"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Genel"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Çizgi genişliği"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Yakalama"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Yakalama eşiği"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Vertexten de yakala"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Vektör elemanları seç"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Eşik değerini seç"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Tekrarları kontrol et"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Yeni sınır sayısallaştır"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 #, fuzzy
 msgid "Break lines at intersection"
 msgstr "Kesişim yerindeki çizgiyi kır"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Yeni obje sayısallaştır"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Değişiklikleri kaydet"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Çıkışta değişiklikleri kaydet"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Sorgulama aracı"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Sorgulama aracını seç"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Kutuyla seç"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "uzunluk"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Çizgileri seç"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "daha kısa"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "daha uzun"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Öznitelikler"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Yeni elemanı sayısallaştır  "
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Tabloya yeni kayıt ekle"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Katman"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Kategori"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Mod"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Sonraki kullanım için"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Kategori numarası"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Kategori modu"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Elle giriş"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Kategori yok"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Varolan elemanı(ları) sil"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Tablodan kayıt sil"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "Özniteliklere göre sorgula"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr "alan"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "Yeni çizgi sayısallaştır"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "Yeni sınır sayısallaştır"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Vurgula"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Vurgula(tekrarlar)"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Nokta"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Çizgi"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Sınır (alansız)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Sınır (tek alan)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Sınır (iki alan)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Ağırlık merkezi (alan içinde)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Ağırlık merkezi (alan dışında)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Ağırlık merkezi (alanda tekrarlı)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Düğüm (tek çizgi)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Düğüm (iki çizgi)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Vertex"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Alan (kapalı sınır + ağırlık merkezi)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Yön"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Yakalama etkisizleştirilmiş"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Vektör sayısallaştırıcı ayarları <%s> dosyasına kaydedildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "Sayısallaştırma arayüzü:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Düzenleme için hiçbir vektör harita seçilmedi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1981,79 +1982,79 @@ msgid ""
 "Reason: %s"
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "En azından %d YKN gerekli. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Obje numarası:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Çizgiler boyunca noktalar üret"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Kategori listesi - silmek için sağ tuşa tıklayın"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Yeni kategori ekle"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Değişiklikleri uygula"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Değişiklikleri görmezden gel ve pencereyi kapat"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Değişiklikleri uygula ve pencereyi kapat"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Eleman numarası:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2061,259 +2062,259 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Seçileni sil"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Tümünü sil"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Yeniden yükle"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Vektör harita güncellenemiyor."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Değeri ayarla"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Başlangıç değeri"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Adım"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Tekrarların listesi"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Eleman numarası    "
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Katman (Kategoriler)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Yeni nokta sayısallaştır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Sol: yeni nokta"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Yeni çizgi sayısallaştır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "Sol: yeni nokta; Orta: geri al; Sağ; çizgiyi bitir"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Yeni sınır sayısallaştır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Yeni alan merkezi sayısallaştır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Yeni sınır sayısallaştır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Çizgiler veya sınırlardan çoklu çizgiler oluşturur."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Sol: Seç; Orta: Seçimden vazgeç; Sağ; Onayla"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Seçileni kayıtları sil"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Öznitelikleri göster/güncelle"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Sol:Seç"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Kategorileri göster/güncelle"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Seçilen çizgileri/sınırları döndür"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Kırıklık noktası kaydır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Seçilmiş harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "Vektör sayısallaştırma hatası"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "Vektör sayısallaştırma hatası"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "Vektör sayısallaştırma hatası"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Ek araçlar (kopyala, döndür, bağlan, v.d.)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Geri al"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Önceki değişikliği geri al"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Önceki değişikliği geri al"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Kesişim yerindeki seçilen çizgiyi/sınırları kır"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Seçilen çizgilere/sınırlara bağlan"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Kategorileri kopyala"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Elemanları (artalan) vektör haritasından kopyala               "
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Öznitelikleri göster"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Eleman tipi dönüşümleri  "
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Seçilen çizgileri/sınırları döndür"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Seçilen çizgi/sınırları birleştir"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Çizgi/sınır böl"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Elemanları sorgula"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Vektör haritayı seç"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 #, fuzzy
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Vektör haritayı seç"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2322,67 +2323,68 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Vektör sayısallaştırma hatası"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Lütfen bekleyin, düzeltme için <%s> vektör hartası açılıyor..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Vektör sayısallaştırma hatası"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Değişiklikler kaydedilsin mi?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr ""
 "Lütfen bekleyin, <%s> vektör haritasının topolojisi kapatılıyor ve yeniden "
 "oluşturuluyor..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Bittiğinde diyaloğu kapat"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Yeni vektör harita"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Mesafe Ölçümü"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2391,378 +2393,769 @@ msgstr ""
 "Ölçmek için farenin sol tuşuna basın ve sürükleyin.%sTemizlemek için sol "
 "tuşa çift tıklayın."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Mesafe Ölçümü"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Mesafe Ölçüm:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "Mesafe Ölçümü"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Uyarı"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Mesafe Ölçüm:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Ölçek çubuğu ve kuzey oku ekle"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Harita görüntüle"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "%s i panoya kopyalandı"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Ayarları göster"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Vektör harita katmanı ekle"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Raster serisi"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "Lütfen bekleyin, veri güncelleniyor..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Kaydedilmiş bölge boyutlarına göre yakınlaştır"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "En azından %d YKN gerekli. İşlem iptal edildi."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 #, fuzzy
 msgid "Save display extents to region file"
 msgstr "Görünüş geometrisini isimlendirilmiş bölge olarak kaydet"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Uyarı"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 msgid "Show text object"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Sınama"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "Format:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Yazıtipini ayarla"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "GRASS CBS Arayüz yardımı"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-#, fuzzy
-msgid "Model"
-msgstr "Mod"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "Maddeler"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr ""
+"<%s> vektör harita geçerli harita takımında zaten var. Üzerine yazmak "
+"istermisin?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Üzerine yaz?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Variables"
-msgstr "Hacimler"
+msgid "GRASS locations in {}"
+msgstr "Proje mevkisi ve harita takımını seç"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Komut Çıktısı"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Yeniden adlandır"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Geçerli aralık"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-#, fuzzy
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "Geçerli aralık"
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-#, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:652
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr ""
-"Çalışma alanı boş değil. Geçerli ayarlarınçalışma alanı dosyasına "
-"saklanmasını istermisin?"
+msgid "No map selected for copying."
+msgstr "Düzenleme için hiçbir vektör harita seçilmedi."
 
-#: ../gui/wxpython/gmodeler/frame.py:264
+#: ../gui/wxpython/datacatalog/tree.py:659
 #, fuzzy
-msgid "Quit Graphical Modeler"
-msgstr "GRASS CBS Arayüz yardımı"
+msgid "Copy map"
+msgstr "Tabloyu kopyala"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Süzgeçleneni sil"
+msgid "Failed to copy map: new map has the same name"
+msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr ""
+"<%s> vektör harita geçerli harita takımında zaten var. Üzerine yazmak "
+"istermisin?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-#, fuzzy
-msgid "Delete intermediate data?"
-msgstr "Süzgeçleneni sil"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Model çalışıyor..."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
-"Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
-"yeniden adlandırır."
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
 #, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "hedef konumdaki hesaplama bölgesini kırp"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"Çalışma alanı boş değil. Geçerli ayarlarınçalışma alanı dosyasına "
-"saklanmasını istermisin?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "Yeni harita takımı oluştur"
+msgid "Delete map"
+msgstr "Harita takımını sil"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Sil"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "EPSG-Kodları dosyasını Seç"
+msgid "g.remove completed"
+msgstr "Tekrarları kontrol et"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "GRASS Örnek Dosya (*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Görüntü"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:827
+msgid "Moving maps not implemented"
 msgstr ""
-"<%s> çalışma alanı dosyası zaten var? Bu dosyanın üzerine yazılımasını ister "
-"misin?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/tree.py:835
 #, fuzzy
-msgid "Save model"
-msgstr "Kategori modu"
+msgid "Maps can be copied only to current mapset"
+msgstr ""
+"Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
+"yeniden adlandırır."
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, fuzzy, python-format
-msgid "File <%s> saved"
-msgstr "<%s> NOKTA dosyası kaydedildi"
+#: ../gui/wxpython/datacatalog/tree.py:910
+#, fuzzy
+msgid "&Copy"
+msgstr "Kopyala"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "Geçerli çalışma alanının kaydedileceği dosyayı seç"
+msgid "&Paste"
+msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "Harita görüntüle"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/datacatalog/tree.py:954
 #, fuzzy
-msgid "Validating model..."
-msgstr "Geçerli aralık"
+msgid "&Switch mapset"
+msgstr "Harita takımı oluştur"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr ""
-"Model geçerli değildir.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "GRASS %s Harita Hesaplayıcı"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "Model geçerlidir."
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "GRASS %s Harita Hesaplayıcı"
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
-msgid "Model exported to <%s>"
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
+"Güncel konumu <%(loc)s>.\n"
+"Güncel harita takımı <%(mapset)s>."
+
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, fuzzy, python-format
+msgid "Current mapset is <%s>."
+msgstr "Geçerli harita takımını değiştir"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "Komut"
+msgid "Data catalog"
+msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "Komut katmanı ekle"
+msgid "Reload GRASS locations"
+msgstr "Yeni GRASS Mevkisi belirle"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Katman ayarlarını düzenlemek için tıklayın"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "Arama modülü"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Lütfen aşağı taşımak için bir temizleme aracı seçiniz"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Değişiklikleri kaydet"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Raster haritanın kesiti oluşturulamıyor."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "<%s> vektör haritası oluşturulamıyor."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Render"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Raster harita için yeni renk tablosu oluştur"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Yeni vektör harita oluştur"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Yeniden kodlanan raster harita:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Vektör haritayı seç"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Yeniden kodlanan raster harita:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Raster haritada şekil indeksini hesaplar"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"<%s> vektör harita geçerli harita takımında zaten var. Üzerine yazmak "
+"istermisin?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Yeni obje sayısallaştır"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Yeni çizgi sayısallaştır"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Yeni nokta sayısallaştır"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Raster haritaları kümele"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Vektör sayısallaştırma hatası"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Raster haritayı seç:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Hücre değerleri"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Genişlik:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "Raster harita"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "GRASS CBS Arayüz yardımı"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "Mod"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "Maddeler"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "Hacimler"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Komut Çıktısı"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+#, fuzzy
+msgid "Redrawing model..."
+msgstr "Geçerli aralık"
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr ""
+"Çalışma alanı boş değil. Geçerli ayarlarınçalışma alanı dosyasına "
+"saklanmasını istermisin?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+#, fuzzy
+msgid "Quit Graphical Modeler"
+msgstr "GRASS CBS Arayüz yardımı"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Süzgeçleneni sil"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "Süzgeçleneni sil"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+"Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
+"yeniden adlandırır."
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"Çalışma alanı boş değil. Geçerli ayarlarınçalışma alanı dosyasına "
+"saklanmasını istermisin?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "Yeni harita takımı oluştur"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "EPSG-Kodları dosyasını Seç"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "GRASS Örnek Dosya (*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+"<%s> çalışma alanı dosyası zaten var? Bu dosyanın üzerine yazılımasını ister "
+"misin?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "Kategori modu"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, fuzzy, python-format
+msgid "File <%s> saved"
+msgstr "<%s> NOKTA dosyası kaydedildi"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "Geçerli çalışma alanının kaydedileceği dosyayı seç"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+#, fuzzy
+msgid "Validating model..."
+msgstr "Geçerli aralık"
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"Model geçerli değildir.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "Model geçerlidir."
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Komut"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Komut katmanı ekle"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
 msgid "Empty comment. Nothing to add to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "wxGUI Grafik Modelci"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2773,427 +3166,425 @@ msgstr ""
 "Çalışma Alanı dosyasını <%s> okuma başarısız.\n"
 "Geçersiz dosya, XML belgesini ayrıştıramıyor."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 #, fuzzy
 msgid "Please wait, loading model..."
 msgstr "Lütfen bekleyin, veri yükleniyor..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 #, fuzzy
 msgid "Writing current settings to model file failed."
 msgstr "Geçerli ayarların çalışma alanı dosyasına kaydında hata (%s)."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "<%s> dosyası okuma için açılamıyor."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Kaldır"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "Tabloları listele"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "Tablo"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Etiket ekle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Yazıtipini ayarla"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "Yer Kontrol Noktası"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "Yer Kontrol Noktası"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Özellikler"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Katman"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 #, fuzzy
 msgid "List of variables - right-click to delete"
 msgstr "Kategori listesi - silmek için sağ tuşa tıklayın"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 #, fuzzy
 msgid "Name"
 msgstr "Değişiklikleri kaydet"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Veri tipi"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "Değeri ayarla"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "Yeni kırıklık noktası ekle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "İmleç"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 #, fuzzy
 msgid "float"
 msgstr "düz"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 #, fuzzy
 msgid "string"
 msgstr "Uyarı"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Bölge"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "Harita takımı"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "Kesit"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr "Modele yeni değişken ekle"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 #, fuzzy
 msgid "List of items - right-click to delete"
 msgstr "Kategori listesi - silmek için sağ tuşa tıklayın"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "Katman"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "döngü"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Komut"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "Python kodu (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "Çalıştı&r"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "Katman açıklaması"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "İçeri aktarılacak DXF dosyasını seç"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Python kodu (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "<%s> çalışma alanı dosyası zaten var? Bu dosyanın üzerine yazılımasını ister "
 "misin?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "Farklı Kaydet..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "Genel Ayarlar"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "Tabloları listele"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 msgid "Valid:"
 msgstr "Geçerli:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "Geçersiz Değer: %s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "Çalışıyor:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "Şekil indeksi"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Genişlik:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Yükseklik:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 msgid "Data"
 msgstr "Veri"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Tip"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "3b raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "Vektör"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Tablo"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Komut"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Meta veri                                    "
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "Komut"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Çıktı dosyaları mevcut dosyalar üzerine yaz"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 #, fuzzy
 msgid "Name:"
 msgstr "Değişiklikleri kaydet"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "Yazar(lar):"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 #, fuzzy
 msgid "model"
 msgstr "Mod"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 #, fuzzy
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "Raster harita katmanı temel bilgi çıktısı"
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Yeni kırıklık noktası ekle"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "Model çalışıyor..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3204,97 +3595,97 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "Model çalışsın mı?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 #, fuzzy
 msgid "Variables below not defined:"
 msgstr "Durum: tanımlanmadı"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "Raster harita"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "3b raster harita"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "Vektör noktalar"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "bilinmeyen"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "Seçimlik"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr "Durum: tanımlanmadı"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "Arazi parametreleri"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Süzgeçleneni sil"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 #, fuzzy
 msgid "Name of element:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 #, fuzzy
 msgid "Add GRASS command to the model"
 msgstr "Modele (GRASS modülü) hareket ekle "
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3304,7 +3695,7 @@ msgstr ""
 "\n"
 "Modele yeni komut eklenemez."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3315,47 +3706,47 @@ msgstr ""
 "\n"
 "Modele yeni komut eklenemez."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "Veri"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Komut"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Seçimlik"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 #, fuzzy
 msgid ""
 "No relevant option found.\n"
@@ -3365,214 +3756,214 @@ msgstr ""
 "\n"
 "Modele yeni komut eklenemez."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "Seçimlik"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "Kategori listesi"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "'if' bloklarındaki maddelerin listesi"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "'else' bloklarındaki maddelerin listesi"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Değişken <%s> zaten modelde var. Değişken ekleme başarısız oldu."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "Tümünü sil"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 #, fuzzy
 msgid "No"
 msgstr "K"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "Evet"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "<%s> dosyası okuma için açılamıyor."
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "Çözünürlük:"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "GRASS CBS Arayüz yardımı"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "Genel Ayarlar"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "Yazdırma önizleme"
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3580,1314 +3971,1304 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Yazdırma önizleme"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "3B görünüm moduna ulaşılamaz"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "Farklı Kaydet..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr "için parametreleri gir"
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 #, fuzzy
 msgid "wxGUI Cartographic Composer"
 msgstr "wxGUI Grafik Modelci"
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Etiket ekle"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 msgid "point"
 msgstr "nokta"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "Sıfırla"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Dosya"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 #, fuzzy
 msgid "degree"
 msgstr "dtree"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Raster harita kaldırılamıyor"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Konum:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Koordinatları dönüştür"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "Simge boyutu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "Dizini seç:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 #, fuzzy
 msgid "Close dialog and apply changes"
 msgstr "Diyaloğu kapat ve değişiklikleri yok say"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 #, fuzzy
 msgid "Format"
 msgstr "Format:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Genişlik:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Yükseklik"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Yükseklik"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Üst"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Alt"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Sayfa ayarı"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Nokta"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Peyzaj analizi"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "Raster ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "Harita ölçeği"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "Seçilen haritaya göre göster"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "Kaydedilmiş bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "Harita takımı:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Bölge"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "Harita ölçeği"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 #, fuzzy
 msgid "Center:"
 msgstr "Render"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "D:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "K:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Stil:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "1. derece"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 #, fuzzy
 msgid "border width (pts):"
 msgstr "Çizgi kalınlığı (piksel olarak)"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Raster harita"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "Raster harita"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "Raster harita"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "Veri ekle"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "nokta"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "hassas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "alan"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Veri tipi"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Ekle"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Vektör haritayı temizle"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Sil"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Özellikler"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Raster ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Vektör ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Özellikler"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "Obje numarası:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "Alan merkezi ekle"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "Çizgi/sınır düzenle"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "DB dosyasında veritabanı bağlantısı belirlenmedi."
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "&Katman sil"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Maske"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Geçerli çalışma alanı dosyasını kapat"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Renk"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "hassas"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Genişlik:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Dosya"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "Dizini seç:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Renk kuralları"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Çizgi stili"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "sembol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "WKT dosyası:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Göz at"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Boyut"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "Boyut"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Tüm sütunları kaldır"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Yeniden ölçekle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Tüm sütunları kaldır"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Çizgi kalınlığı (piksel olarak)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Kategori değerlerini etkileşimli olarak düzenle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Çizgi stili"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "aster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Çizgi kalınlığı (piksel olarak)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 msgid "pattern scale factor:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "Raster serisi"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "Açıklamaları göster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "Kaynak adı"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "Vektörden raster'e"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "Raster haritayı seç:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "Açıklamaları göster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "Gelişmiş ayarlar"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "Yönet"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "Vektör çizgiler"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "Vektör çizgileri göster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "Vektör haritaları çakıştır."
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "Vektör harita"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "Etiket ekle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Konum"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "Hacimler"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "Sütun ekle"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Yazı tipi ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "Genel Ayarlar"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 #, fuzzy
 msgid "use border color:"
 msgstr "kullan| X koordinatı"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "Arkaplan rengi:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-#, fuzzy
-msgid "Unsupported units"
-msgstr "Desteklenmeyen katman tipi '%s'"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "uzunluk"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr "Varsayılan"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Stil"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "Tip"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "Sınama"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Metin gir:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "Metin ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "Vurgula"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "1. derece"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Sol: yeni nokta"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "Metin ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "Ölçek ve Kuzey oku"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "Ölçek ve Kuzey oku"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "Ayarları göster"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "sembol:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Kutuyla seç"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "şeffaf"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "Ölçek ve Kuzey oku"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "Boyut:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Sembol ayarları"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "Ayarları değiştir"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "Ayarları değiştir"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "Çizgi kalınlığı (piksel olarak)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "Vektör etiketler"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 msgid "Generate PostScript output"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 #, fuzzy
 msgid "Generate PDF output"
 msgstr "Nokta üret"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "Seçilen mevkiyi sil"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "Gridi göster"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 #, fuzzy
 msgid "Quit Cartographic Composer"
 msgstr "GRASS CBS Arayüz yardımı"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Lejand ekle"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Rectangle"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Vektör harita katmanı ekle"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Etiket ekle"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS CBS Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4896,154 +5277,148 @@ msgstr ""
 "VT dosyasında <%s> vektör haritası için veritabanı bağlantısı belirlenemedi. "
 "Katmanları yönetme sekmesinde yeni bir bağlantı belirleyebilirsiniz."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Lütfen bekleyin, öznitelik verisi yükleniyor..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Veriye göz at"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Tabloları yönet"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Katmanları yönet"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 #, fuzzy
 msgid "Close Attribute Table Manager"
 msgstr "Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Seçilen harita takımını sil"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Yüklenen kayıt sayısı: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Veritabanı bağlantısı"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Sorgu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 #, fuzzy
 msgid "Set SQL statement to default"
 msgstr "Varsayılanı kaydet"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 #, fuzzy
 msgid "Close the dialog"
 msgstr "Diyaloğu kapat"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 #, fuzzy
 msgid "Columns"
 msgstr "Hacimler"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 #, fuzzy
 msgid "Values"
 msgstr "Hacimler"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 #, fuzzy
 msgid "Get all values"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 #, fuzzy
 msgid "Get sample"
 msgstr "Değeri ayarla"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "MPEG-1 dışa aktar"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 #, fuzzy
 msgid "Close dialog on apply"
 msgstr "Sunduğunda iletişimi kapat"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "GRASS SQL Oluşturucu. %s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 #, fuzzy
 msgid "Verify"
 msgstr "Coğrafi referanslama"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 #, fuzzy
 msgid "Verify SQL statement"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 #, fuzzy
 msgid "SQL statement not verified"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 #, fuzzy
 msgid "SQL statement is not valid"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -5054,78 +5429,78 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 #, fuzzy
 msgid "SQL statement is valid"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Yön"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Veri yükleniyor..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "<%(column)s> sütunu<%(table)s> tablosunda bulunamadı."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Sadece 256 sütun gösterilebilir."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "<%(column)s> sütunu<%(table)s> tablosunda bulunamadı."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Sınır 100000 kayıt."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 #, fuzzy
 msgid "Unknown value"
 msgstr "Bilinmeyen"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5134,218 +5509,218 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 #, fuzzy
 msgid "Sort ascending"
 msgstr "Düzeltmeyi başlat"
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 #, fuzzy
 msgid "Sort descending"
 msgstr "Düzeltmeyi başlat"
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Harita hesaplayıcı"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Genel istatistikler"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Sütun ekle"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr "Alan büyüklüğü"
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "uzunluk"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Çizgi stili"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "Çizgi Kalınlığı"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Sütun ekle"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Tabloya sütun eklenemiyor. Hiçbir sütun adı belirlenmedi."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "<%(column)s> sütunu zaten <%(table)s> tablosunda var."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Öznitelik verisi - kayıtları düzenleme/yönetme için sağ tıklayınız"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Tablo"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "SQL Sorgusu"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Basit"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "SQL Oluşturucu"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "SQL Oluşturucu"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Seçilen kaydı düzelt"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Seçileni kayıtları sil"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Tüm kayıtları sil"
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Tümünü seç"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Tümünden seçimi kaldır"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 #, fuzzy
 msgid "Highlight selected features"
 msgstr "Seçileni vurgula"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 #, fuzzy
 msgid "Highlight selected features and zoom"
 msgstr "Seçileni vurgula ve büyült"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 #, fuzzy
 msgid "Extract selected features"
 msgstr "Seçileni çıkart"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 #, fuzzy
 msgid "Delete selected features"
 msgstr "Seçileni katmanı sil"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Mevcut kaydı güncelle"
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Mevcut kaydı güncelle"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Kategori numarası (%s sütunu) kayıp."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Yeni kayıt eklemiyor."
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Kayıtları sil"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5354,16 +5729,16 @@ msgstr ""
 "Tüm (%d) veri kayıtları tablodan kalıcı olarak silinecek. Onları silmek "
 "istiyormusunuz?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 #, fuzzy
 msgid "Nothing to delete."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, fuzzy, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5374,7 +5749,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, fuzzy, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5386,54 +5761,54 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "<%s> tablosu - sütunları silmek için sağ tuşa tıklayın"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "Hacimler"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "uzunluk"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Sütunu yeniden adlandır"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Seçilen sütunu kaldır"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Tüm sütunları kaldır"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5442,12 +5817,12 @@ msgstr ""
 "Tüm (%d) veri kayıtları tablodan kalıcı olarak silinecek. Onları silmek "
 "istiyormusunuz?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 #, fuzzy
 msgid "Drop column(s)"
 msgstr "Tüm sütunları kaldır"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5455,162 +5830,162 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Katman listesi"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Ayrıca bağlı (%s) öznitelik tablosunuda kaldır "
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Sütun adı"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Veri uzunluğu"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Sürücü"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "Veritabanı"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Anahtar"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Katman açıklaması"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Anahtar sütun"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Tablo açıklaması"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Tablo adı"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Tablo oluştur"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "&Katman ekle"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "&Varsayılanı ayarla"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "Silinecek katman"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 #, fuzzy
 msgid "Modify layer"
 msgstr "&Katmanı değiştir"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Katmanı değiştir"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Genel istatistikler"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Geçerli komut dizesini panoya kopyala"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Yeni mevki oluşturulamıyor"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Genel istatistikler"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5618,11 +5993,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "GRASS CBS Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5631,201 +6006,202 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "Tablo oluştur"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Gönderdiğinde pencereyi kapat"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Hiç öznitelik bulunamadı"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Öznitelikleri güncelle"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Öznitelikleri değiştir"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Öznitelikleri göster"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Yeniden yükle"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Gönder"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Bilinmeyen"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Simge teması yüklenemiyor, varsayılan simge teması kullanılıyor..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2B Görünüm"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3B görünüm"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "dosya bulunamadı"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Görüntü veya raster koordinatlandırma"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Görüntü veya raster koordinatlandırma"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Veri yükleniyor..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5834,635 +6210,635 @@ msgstr ""
 "Çalışma Alanı dosyasını <%s> okuma başarısız.\n"
 "Geçersiz dosya, XML belgesini ayrıştıramıyor."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Nviz ayarları <%s> dosyasına kaydedildi."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "İçeri aktarılan katmanları katman ağacına yükle"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Veritabanından üret"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Basit"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Çözünürlük:"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Kategori modu"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Seçenekleri ayarla"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "Dosya zaten var"
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Gelişmiş"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Tabloları listele"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Kopyala"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "renge göre"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "renge göre"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "WKT dosyası seç"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Çizgi stili"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "Modül bul"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Seçenekleri ayarla"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Nviz özellikleri"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Çalışma alanı"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Parametre bulunmadı: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Bölgeyi Kaydet:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Bölge yükle:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "(değer)"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Veritabanından üret"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Kategori listesi"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "YKN Düzelt"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "Açıklama"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "MPEG-1 dışa aktar"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "tarih damgası"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Veri ekle"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Metin katmanı ekle"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Yazı tipi ayarları"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 msgid "Sample text"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Sayfa ayarı"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Görüntü büyüklüğünü ayarla"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "B"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "MPEG-1 dışa aktar"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "Format:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Dizin"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "İçeri aktarılacak DXF dosyasını seç"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "WKT dosyası:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Seçenekleri ayarla"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "dosya bulunamadı"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "EPSG kodu kayıp."
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "tarih damgası"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Veritabanından üret"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Raster haritaları çakıştır"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Vektör haritayı temizle"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Raster haritaları çakıştır"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Vektör haritayı içe aktar"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Veri Girişi"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Raster haritayı seç:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Lütfen aşağı taşımak için bir temizleme aracı seçiniz"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Arkaplan rengi:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Arkaplan rengi:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Arkaplan rengi:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "tarih damgası"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Koordinatlar"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Geçersiz Değer: %s"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Harita takımı oluştur"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 #, fuzzy
 msgid "Stop"
 msgstr "üst"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Kabartma gölgelenme haritası katmanı ekle"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "nokta"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Ağ(şebeke) analizi"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6470,50 +6846,50 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr ""
 "Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
 "yeniden adlandırır."
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Üzerine yaz?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "<%s> vektör haritasına yeni obje eklemede hata."
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6521,89 +6897,89 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Ayarlanamıyor"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Üzerine yaz?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Harita katmanları"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Katmanları yönet"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Kategorileri yönet veya raporla"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Seç %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
@@ -6612,397 +6988,398 @@ msgstr ""
 "Verilen vektör haritaya bağlı öznitelik tablosundaki sütunu yeniden "
 "adlandırır."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Veri tipi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Topoloji oluştur/yeniden kur"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "nokta"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "nokta"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Sol: yeni nokta"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Anahtar sütun"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "En kısa yol"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "nokta"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Kaynak tipi"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Noktaları göster"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Kesit Analizi"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Harita görüntüle"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Harita görüntüle"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Ağ(şebeke) analizi"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Eksen ayarları"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Nokta"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Akış hatları"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Çıktı"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Parametreler"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Oluşturulan haritaları katman ağacına ekle"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Veri Girişi"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Tabloları listele"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Veri yükleniyor..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Veri yükleniyor..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Analiz"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Ayarlar"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "Model çalışıyor..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Raster ayarları"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Çizgi stili"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Renk tabloları"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Koordinatları dönüştür"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Renk kuralları"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Seçileni YKN temizle"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Simge boyutu:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Çizgi Kalınlığı"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Yakalama eşiği"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Yer Kontrol Noktası"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Seçilen mevkiyi sil"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Arazi analizi"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Çizgileri göster"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Vektör ayarları"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "Gölgelenme haritası"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Varolan tüm harita takımları"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Render"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Otomatik render etkinleştirme/pasifleştirme"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Görüntü modu"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -7012,17 +7389,17 @@ msgstr ""
 "harita görüntüsü için varsayılan değer 'Kullanıcı Arayüzü Ayarları' "
 "penceresinden ayarlanabilir."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "Bölgeyi göster"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Görüntü çözünürlüğünü hesaplama ayarlarına göre sınırlandır"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -7031,102 +7408,102 @@ msgstr ""
 "harita görüntüsü için varsayılan değer 'Kullanıcı Arayüzü Ayarları' "
 "penceresinden ayarlanabilir."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Harita ölçeği"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "Projeksiyon:"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "Projeksiyonu Seç"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Geometriyi göster"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Koordinatlar"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Boyut"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS CBS - Harita Görüntüsü"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "GRASS oturumu başlat"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS CBS Harita Görüntüsü: "
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "Yeni kayıt eklemiyor."
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Vektör sayısallaştırma aracı"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7136,378 +7513,405 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 #, fuzzy
 msgid "Starting 3D view mode..."
 msgstr "Geçerli aralık"
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Lütfen bekleyin, veri yükleniyor..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Lütfen bekleyin, veri yükleniyor..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "2B görünüm moduna geçiş yap"
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Sayısallaştırma"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Düzenleme için hiçbir vektör harita seçilmedi."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Metin katmanı ekle"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Vektör sayısallaştırma aracı"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Harita ölçeği"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Desteklenmeyen katman tipi '%s'"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Yeni görüntüleyici başlat"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "EPSG Kodları okunamıyor: %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Yeni görüntüleyici başlat"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Vektör elemanları seç"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Raster ve vektör haritaları coğrafi referanslama"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Ölçek ve Kuzey okunu göster/gizle"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Açıklamayı göster/gizle"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Ölçek ve Kuzey okunu göster/gizle"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Haritayı analizi"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Mesafe Ölçümü"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Mesafe Ölçümü"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Yüzey haritası kesiti"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Ağ(şebeke) analizi"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Kaydırma için fare ile sürükle"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "Büyültmek için fareyi sürükleyin veya tıklayın"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "Küçültmek için fareyi sürükleyin veya tıklayın"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "3B görünüm moduna ulaşılamaz"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Sebep: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 #, fuzzy
 msgid "Vector digitizer not available"
 msgstr "Vektör sayısallaştırma aracı"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Vektör sayısallaştırma hatası"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Mevkiyi yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Mevkiyi yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "KYM oluştur"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Yeni Mevki oluşturayım mı?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Mevkiyi yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "YKN Düzelt"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Mevkiyi yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "<%s> GRASS mevkisini oluşturmak istiyormusun?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Yeni Mevki oluşturayım mı?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Mevkiyi yeniden adlandır"
@@ -7517,327 +7921,327 @@ msgstr "Mevkiyi yeniden adlandır"
 msgid "Create new configuration file for r.li modules"
 msgstr "Renk kurallarını kullanarak yeni renk tablosu oluştur"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "<%s> GRASS mevkisini oluşturmak istiyormusun?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Yeni Mevki oluşturayım mı?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Konum sihirbazı iptal edildi. Konum oluşturulamadı."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 msgid "Select maps and define name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Yeniden kodlanacak raster harita:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Yeniden sınıflandırılacak vektör harita:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Yeniden sınıflandırılacak vektör harita:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Ayarları göster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Arazi parametreleri"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Bölge"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 msgid "Sample units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Kayar pencere"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Raster ve vektör haritaları coğrafi referanslama"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "<%s> GRASS mevkisini oluşturmak istiyormusun?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Renk seç"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Vektör objeleri seç"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Harita görüntüle"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Kayar pencere"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Vektör haritayı seç"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Genişlik:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Yeniden kodlanan raster harita:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Değeri ayarla"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Kayar pencere"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Renk seç"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7845,194 +8249,206 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Renk seç"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Özet"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Raster harita:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Vektör çizgiler"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Bölge"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Harita katman tipi:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Bölge sınırları"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Genişlik:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Simge boyutu:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "En yakın objeler"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Anahtar sütun"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Basit"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS CBS Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "Çalışma alanı"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Vektör sayısallaştırma aracı"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Nviz araç çubuğu"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-#, fuzzy
-msgid "Map layers"
-msgstr "Harita katmanları"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "Katmanlar"
 
-#: ../gui/wxpython/lmgr/frame.py:304
+#: ../gui/wxpython/lmgr/frame.py:339
 #, fuzzy
-msgid "Command console"
+msgid "Console"
 msgstr "Komut tamamlandı"
 
-#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
 #, fuzzy
-msgid "Search modules"
-msgstr "Arama modülü"
+msgid "Modules"
+msgstr "Kod"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
+msgstr "Python kodu (*.py)|*.py"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -8040,195 +8456,182 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "Yeni Mevki oluşturayım mı?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"Güncel konumu <%(loc)s>.\n"
-"Güncel harita takımı <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 #, fuzzy
 msgid "Choose model to run"
 msgstr "Sunduğunda iletişimi kapat"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 #, fuzzy
 msgid "Do you want to save changes in the workspace?"
 msgstr "<%s> vektör haritasındaki değişiklikleri kaydetmek istiyor musun?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 #, fuzzy
 msgid "Do you want to store current settings to workspace file?"
 msgstr ""
 "Çalışma alanı boş değil. Geçerli ayarlarınçalışma alanı dosyasına "
 "saklanmasını istermisin?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "GRASS CBS Harita Görüntüsü: "
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "GRASS vektör haritası için topoloji oluşturur."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Python kodu (*.py)|*.py|Bash kodu (*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Bölge Ayarla"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Geçersiz koordinat değerleri. İşlem iptal edildi."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "Kod başlatılıyor '%s'..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, fuzzy, python-format
-msgid "Current mapset is <%s>."
-msgstr "Geçerli harita takımını değiştir"
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Çalışma ortamı ayarlarını değiştir"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "GRASS oturumu başlat"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Bilinmeyen"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "Projeksiyon:"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "SQL Oluşturucu"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 #, fuzzy
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
@@ -8237,63 +8640,63 @@ msgstr ""
 "Çalışma alanı boş değil. Geçerli ayarlarınçalışma alanı dosyasına "
 "saklanmasını istermisin?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 #, fuzzy
 msgid "Create new workspace?"
 msgstr "Yeni çalışma alanı dosyası oluştur"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "GRASS Çalışma Alanı dosyası (*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Lütfen bekleyin, çalışma alanı yükleniyor..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Yüklenecek GRC dosyasını seçin"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "Eski GRASS Çalışma Alanı Dosyası (*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Geçerli çalışma alanının kaydedileceği dosyayı seç"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "<%s> çalışma alanı dosyası zaten var? Bu dosyanın üzerine yazılımasını ister "
 "misin?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Çalışma alanını kaydet"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 #, fuzzy
 msgid "Writing current settings to workspace file failed."
 msgstr "Geçerli ayarların çalışma alanı dosyasına kaydında hata (%s)."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "Yeni harita takımı için ad gir:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "GRASS CBS Harita Görüntüsü: "
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8301,37 +8704,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Yeni kayıt eklemiyor."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Yeni kayıt eklemiyor."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "İçeri aktarılan katmanları katman ağacına yükle"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Desteklenmeyen katman tipi '%s'"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, fuzzy, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8339,59 +8742,56 @@ msgid ""
 "from layer tree?"
 msgstr "%s harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 #, fuzzy
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 #, fuzzy
 msgid "Quit GRASS GUI"
 msgstr "GRASS CBS Hakkında"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "GRASS oturumu başlat"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 #, fuzzy
 msgid "Import raster data"
 msgstr "Raster haritayı içe aktar"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 #, fuzzy
 msgid "Link external raster data"
 msgstr "Raster harita yükleniyor"
@@ -8408,13 +8808,15 @@ msgid "Set raster output format"
 msgstr "Yazıtipini seç"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 #, fuzzy
 msgid "Import vector data"
 msgstr "Vektör haritayı içe aktar"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 #, fuzzy
 msgid "Link external vector data"
 msgstr "Temel vektör değişim verisi"
@@ -8439,7 +8841,7 @@ msgstr "WMS sunucularından veriyi indirir ve içe aktarır."
 msgid "Add command layer"
 msgstr "Komut katmanı ekle"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Çık"
@@ -8491,8 +8893,8 @@ msgid "Add rhumbline layer"
 msgstr "Rhumbline katmanı ekle "
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "3B raster harita ekle"
@@ -8517,135 +8919,133 @@ msgstr "Geçerli aralık"
 msgid "Background vector map"
 msgstr "Vektör haritaları yamala"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Harita katmanları"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Matlık seviyesini değiştir"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "Nviz özellikleri"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 #, fuzzy
 msgid "Zoom to selected map(s)"
 msgstr "Seçilen haritaya göre göster"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 #, fuzzy
 msgid "Set computational region from selected map(s)"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Modeli Python kodu olarak dışa aktar"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "KYM oluştur"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr ""
 "Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
 "yeniden adlandırır."
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 #, fuzzy
 msgid "Set color table"
 msgstr "Renk tabloları"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Öznitelik verisini göster"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Düzeltmeyi başlat"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Düzeltmeyi durdur"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 #, fuzzy
 msgid "Rebuild topology"
 msgstr "Topoloji oluştur/yeniden kur"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 #, fuzzy
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Seçilen haritaya göre göster (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Etkileşimli olarak yeniden kodla"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Histogram"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Tek değişkenli raster istatistikleri "
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Rapor ve istatistikler"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Kesit"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "Seçileni katmanı sil"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Raster haritanın kesiti oluşturulamıyor."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "3b raster harita"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Desteklenmeyen katman tipi '%s'"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Yeni harita takımı için ad gir:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
@@ -8653,189 +9053,183 @@ msgstr ""
 "<%s> vektör harita geçerli harita takımında zaten var. Üzerine yazmak "
 "istermisin?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Üzerine yaz?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Tabloya sütun eklenemiyor. Hiçbir sütun adı belirlenmedi."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Katman grubu:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Katman ayarlarını düzenlemek için tıklayın"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(özellikleri ayarlamak için çift tıklayın)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Lütfen bekleyin, veri güncelleniyor..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 #, fuzzy
 msgid "Start new map display"
 msgstr "Yeni görüntüleyici başlat"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Yeni çalışma alanı dosyası oluştur"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 #, fuzzy
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Varolan çalışma alanı dosyasını aç"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 #, fuzzy
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Raster harita katmanı ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Raster harita katmanı ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 #, fuzzy
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Raster harita katmanı ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Vektör harita katmanı ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Vektör harita katmanı ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "Katman grubu ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Vektör harita katmanı ekle"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 #, fuzzy
 msgid "Import/link raster or vector data"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "3B raster harita Hesaplayıcı"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 #, fuzzy
 msgid "Graphical Modeler"
 msgstr "Grafik modelci"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Coğrafi referanslama"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Katman açıklaması"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "Kullanıcı Arayüz ayarları"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "Gölgelenme haritası"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Seçilen kaydı düzelt"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Öznitelik verisini göster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "Görüntünün histogramını üret"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "3B görünüm ayarları"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Nviz ayarları diyaloğunu göster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "3B görünüm modu kullanım sayfasını göster"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8843,639 +9237,647 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Kesit Analizi"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Uzaklık(%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Raster değerler"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Hiçbir kesit alınmadı"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "Üzerine yaz?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "<%s> dosyası okuma için açılamıyor."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "Tekil raster istataistikleri"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Raster değerler"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "1. raster haritayı seç (gerekli):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Raster değerler"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Ayrıntılar:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Raster harita katmanları için istatistikleri raporlar."
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Kesiti çiz/yeniden çiz"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "?????????????????????????????????????"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Seçenekleri ayarla"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Genel istatistikler"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "Görüntüyü PNG dosyasına kaydet"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "Sayısallaştırma aracından çık"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Sol: yeni nokta"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Metin ayarları"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Yazı tipi ayarları"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Raster değerler"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "alan"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Raster harita katmanları için istatistikleri raporlar."
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Kopyala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Geçerli komut dizesini panoya kopyala"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "2. raster haritayı seç (istenirse):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Raster haritayı seç:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Grup Seç:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Histogram"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr ""
 "Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
 "yeniden adlandırır."
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Kesit başlığı:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Başlık yazı tipi büyüklüğü(punto):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 #, fuzzy
 msgid "X-axis label:"
 msgstr "Y-Ekseni etiketi:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Y-Ekseni etiketi:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Etiket yazı tipi büyüklüğü(punto):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Yazı tipi ailesi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Stil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Ağırlık"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 #, fuzzy
 msgid "Apply changes for the current session and close dialog"
 msgstr "Bu oturuma için değişiklikleri uygula"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Kesit ayarları '%s' dosyasına kaydedildi."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "Vektör noktalar"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Eksen ayarları"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X-Ekseni"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y-Ekseni"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Stil:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Grid ve Açıklama ayarları"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Grid rengi"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Gridi göster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Açıklama yazı tipi boyutu"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Açıklamaları göster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Kesit ayarları '%s' dosyasına kaydedildi."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Raster ayarları"
+msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Öznitelik sütunu:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "3. raster haritayı seç (istenirse):"
+msgstr "Vektör elemanları seç"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Çiz"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Yardım"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "Geçersiz bölge"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Kategori modu"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "tarih damgası"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "Geçersiz bölge"
+msgid "Seed point outside the current region"
+msgstr "Geçerli bölgeden alan üret"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Vektör haritayı içe aktar"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Raster haritayı içe aktar"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 #, fuzzy
 msgid "&File"
 msgstr "Dosya"
@@ -9484,8 +9886,8 @@ msgstr "Dosya"
 msgid "Workspace"
 msgstr "Çalışma alanı"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Yeni"
 
@@ -9494,7 +9896,7 @@ msgstr "Yeni"
 msgid "Create new workspace"
 msgstr "Yeni çalışma alanı dosyası oluştur"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Aç"
 
@@ -9503,13 +9905,13 @@ msgstr "Aç"
 msgid "Load workspace from file"
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 #, fuzzy
 msgid "Save"
 msgstr "Değişiklikleri kaydet"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Değişiklikleri farklı kaydet"
 
@@ -9533,7 +9935,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Harita katmanlarını katman ağacına yükle"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "Görüntü"
@@ -9568,7 +9970,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Raster harita katmanı ekle"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Izgara katmanı ekle"
@@ -10338,24 +10740,24 @@ msgstr "Hacimden raster harita serisine"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "3B raster haritalarını 2D raster haritalara dönüştür"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Coğrafi referanslama"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 #, fuzzy
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Yer Kontrol Noktaları"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "Grafik modelci"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "Grafik modelci'yi başlat"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "Modeli çalıştır"
 
@@ -10395,17 +10797,17 @@ msgid ""
 "coordinates and vice versa. It assumes a cartesian coordinate system"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 #, fuzzy
 msgid "Launch Cartographic Composer"
 msgstr "Grafik modelci'yi başlat"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Harita katman tipi:"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Katman açıklaması"
@@ -10420,7 +10822,7 @@ msgstr "Katman açıklaması"
 msgid "Launches script file."
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Kod"
@@ -10430,8 +10832,8 @@ msgstr "Kod"
 msgid "Quit wxGUI session."
 msgstr "Arayüzden Çık"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "GRASS CBS Hakkında"
@@ -10440,7 +10842,7 @@ msgstr "GRASS CBS Hakkında"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "Ayarlar"
@@ -10626,7 +11028,7 @@ msgstr "Kategori listesi"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Tercihler"
 
@@ -11707,7 +12109,7 @@ msgid ""
 msgstr "Raster harita katmanını ASCII metin dosyasına dönüştür"
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Düzlem"
 
@@ -11963,8 +12365,8 @@ msgid "Develop vector map"
 msgstr "Vektör harita geliştir"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Yeni vektör harita oluştur"
 
@@ -12894,12 +13296,12 @@ msgstr ""
 "bilgisine dayanır."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Kontrollü sınıflandırma için etkileşimli girdi"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -14026,27 +14428,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Harita Araçları"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Kategori modu"
+msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "Yardım"
@@ -14076,7 +14482,7 @@ msgid "Prints system information"
 msgstr "Veritabanı bilgisi"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "GRASS CBS Hakkında"
 
@@ -14090,313 +14496,322 @@ msgstr "Vektör haritayı içe aktar"
 msgid "Attribute table manager"
 msgstr "Öznitelik Tablo Yöneticisi"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "Yeni harita takımı oluştur"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 #, fuzzy
 msgid "Load model from file"
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 #, fuzzy
 msgid "Export model to image"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "Modeli Python kodu olarak dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 #, fuzzy
 msgid "Close modeler window"
 msgstr "Kayar pencere"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "Mod"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "Komut katmanı ekle"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 #, fuzzy
 msgid "Add action (GRASS command) to model"
 msgstr "Modele (GRASS modülü) hareket ekle "
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "Veri ekle"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "Modele veri maddesi ekle"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "Yeni mevki belirle"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "Veri ve işlem ilişkisini tanımla   "
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Katman grubu ekle"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 #, fuzzy
 msgid "Adds loop (series) to model"
 msgstr "Modele döngü ekle (for)"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "Sütun ekle"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "Modele koşul ekle (if/else) "
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Modele koşul ekle (if/else) "
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "Tabloyu kaldır"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 #, fuzzy
 msgid "Remove action/data from model"
 msgstr "Veritabanından üret"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "Model özellikleri (isim, amaç vs.) "
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "Süzgeçleneni sil"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "Tüm modeli çalıştır"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "Modeli onayla"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "Tüm modeli doğrula"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "GRASS HTML kılavuz sayfalarını göster"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "Grafik Modelci Hakkında"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "Raster harita katmanı temel bilgi çıktısı"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Vektör haritayı dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Modeli Python kodu olarak dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "MPEG-1 dışa aktar"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Katman açıklaması"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "GRASS CBS Arayüz yardımı"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 #, fuzzy
 msgid "&Insert"
 msgstr "&Kur"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Raster harita katmanı ekle"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "3B raster harita ekle"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "vektör"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Lejand ekle"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Oluşturulan haritaları katman ağacına yükle"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Lejand ekle"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Ölçek çubuğu ve kuzey oku ekle"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "GRASS HTML kılavuz sayfalarını göster"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "GRASS CBS Arayüz yardımı"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Raster harita katmanı temel bilgi çıktısı"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 #, fuzzy
 msgid "Click here to show search module engine"
 msgstr "3B ayarlarını görmek için buraya tıklayın"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 #, fuzzy
 msgid "Click here to hide search module engine"
 msgstr "3B ayarlarını gizlemek için buraya tıklayın"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "Komut Çıktısı"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "Çıktı"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "Komut Çıktısı"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "Komutu çalıştırmayı durdur"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Kesit"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Farklı Kaydet..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "Metin ayarları"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Dosya"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14404,12 +14819,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Komut Çıktısı"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14417,319 +14832,350 @@ msgid ""
 "Details: %(error)s"
 msgstr "<%s> vektör haritası büyütülemiyor."
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Komut Çıktısı"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Kategori"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Vektör elemanları seç"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Yeni harita takımı oluştur"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "<%s> vektör haritası oluşturulamıyor."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "<%s> yeni vektör haritası oluşturuldu "
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "<%s> vektör haritası oluşturulamıyor."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 #, fuzzy
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr "Ağaç menü (komutu çalıştırmak için çift tıkla)"
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Seçili komutu çalıştır"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "Kullanıcı Arayüz ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Varsayılanı kaydet"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Varsayılan görünüme sıfırla"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Bu oturuma için değişiklikleri uygula"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Bu oturum için değişiklikleri uygula"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Anahtar sütun boş olmamalıdır."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "Kullanıcı Arayüz ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Katman Yönetici ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Harita katmanını katman ağacından kaldırırken sor"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "wxGUI yi sona erdirirken veya pencereyi kapatırken sor"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, fuzzy, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "Not: Arayüzü yeniden başlatmak gerekir."
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr "Arama modülü"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Harita Görüntüleme Penceresini konumlandırmayı durdur"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Katman Yönetim penceresini konumlandırmayı durdur"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Geçerli pencere düzenini varsayılan olarak kaydet"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "Görünüm"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "Komut Çıktısı"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "Ayarları değiştir"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "Gelişmiş ayarlar"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Öğe listesi"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 #, fuzzy
 msgid "Icon theme (requires GUI restart):"
 msgstr "Not: Arayüzü yeniden başlatmak gerekir."
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Komut diyalog ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "Görüntü"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "GRASS görüntüleyicileri için varsayılan yazıtipi :"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Varsayılan görüntü ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Görüntü sürücüsü:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Durum çubuğu modu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Otomatik render etkinleştirme"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "<%s> raster haritası büyüyülemiyor."
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Gelişmiş ayarlar"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "Kod"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Komut diyalog ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Bittiğinde diyaloğu kapat"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Oluşturulan haritaları katman ağacına ekle"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Etkileşimli olarak yeniden kodla"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Ayrıntı seviyesi:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "Katmanlar"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Varsayılan görüntü ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "Boş hücreleri geçirimsiz yap"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "Renk tabloları"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Vektör ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Görüntü:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Geçirgen"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "sembol:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 #, fuzzy
 msgid "Line width (in pixels):"
 msgstr "Çizgi kalınlığı (piksel olarak)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Seçileni vurgula ve büyült"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Veri gözatıcı"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Farenin sol tuşunu çift tıkla:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Kodlama (Örneğin: utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Tablodan veri kaydı silerken sor"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Tablo oluştur"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 #, fuzzy
 msgid "Key column:"
 msgstr "Anahtar sütun"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 #, fuzzy
 msgid "Projection statusbar settings"
 msgstr "Kesit yazı tipi ayarları"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14741,21 +15187,21 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "EPSG Kodu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Proj.4 string (gerekli):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "EPSG Kodu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
@@ -14763,65 +15209,76 @@ msgstr ""
 "EPSG kodlarını yükle (sabırlı ol), EPSG kodunu gir veya doğrudan Proj.4'ü "
 "ekle.         "
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 #, fuzzy
 msgid "&Load EPSG codes"
 msgstr "EPSG Kodu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "Koordinatlar"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 #, fuzzy
 msgid "Precision:"
 msgstr "Projeksiyon:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "EPSG Kodları okunamıyor: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "HATA: <%s> mevkisi bulunamadı"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Varsayılan görüntü yazıtipini seç"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Varsayılan görüntü yazıtipini seç"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Yazıtipini seç:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr "Karakter kodlama:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Basit"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "Geçerli harita takımını değiştir"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14830,284 +15287,373 @@ msgid ""
 "    - You may only write to mapsets which you own."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Harita takımı"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Sahip"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Raster haritaları çakıştır"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "Eleman numarası    "
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "Hacimler"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Vektör haritayı seç"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Tüm sütunları kaldır"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Seçilen sütunu kaldır"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Kopyala"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Tabloyu kopyala"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Raster haritaları çakıştır"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Normalliği sına"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Kesit"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Geçerli ayarları kaydet?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Seçilen harita takımını sil"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Ayarları göster"
+msgid "Load:"
+msgstr "Yükle"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 "<%s> çalışma alanı dosyası zaten var? Bu dosyanın üzerine yazılımasını ister "
 "misin?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Farklı Kaydet..."
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "için parametreleri gir"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Komutu çalıştır"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "***********           Kuantumlama"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 #, fuzzy
 msgid "Enter parameters for '"
 msgstr "için parametreleri gir"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 #, fuzzy
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Komutu çalıştırmadan bu pencereyi kapat"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 #, fuzzy
 msgid "Run the command (Ctrl+R)"
 msgstr "Komutu çalıştır"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Geçerli komut dizesini panoya kopyala"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Komut kılavuz sayfasını göster"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "Oluşturulan haritaları katman ağacına yükle"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Bittiğinde diyaloğu kapat"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Gerekli"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Seçimlik"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Parametre bulunmadı: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[çoklu]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "Geçerli aralık"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Renk Seç"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Seç %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 #, fuzzy
 msgid "&Load"
 msgstr "Yükle"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Mevkiyi yeniden adlandır"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Değişiklikleri farklı kaydet"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Etkileşimli olarak yeniden kodla"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 #, fuzzy
 msgid "Directory"
 msgstr "Yön"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "Katman"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Katman adı"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Projeksiyon:"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Kılavuz"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -15115,47 +15661,47 @@ msgid ""
 "Reason: %s"
 msgstr "Simge teması yüklenemiyor, varsayılan simge teması kullanılıyor..."
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "Hiçbirşey çıkarılmadı."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Farklı Kaydet..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Hata %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "Proje mevkisi ve harita takımını seç"
@@ -15165,58 +15711,58 @@ msgstr "Proje mevkisi ve harita takımını seç"
 msgid "Location or mapset is not defined."
 msgstr "***********                Büyük gridler için akış hesaplama"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "Yeni GRASS Mevkisi belirle"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "Kaynak mevkiyi seç:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Öznitelik tablosu oluştur "
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -15225,539 +15771,417 @@ msgstr ""
 "<%s> vektör harita geçerli harita takımında zaten var. Üzerine yazmak "
 "istermisin?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Bölge yükle:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Bölgeyi Kaydet:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Grup oluştur/düzenle"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Değişiklikleri uygula ve pencereyi kapat"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "Bu oturum için değişiklikleri uygula"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Sunduğunda iletişimi kapat"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "aster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Harita listesi:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:924
-#, fuzzy
-msgid "Add selected map layers into group"
-msgstr "İçeri aktarılan katmanları katman ağacına yükle"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1059
-#, python-format
-msgid "Group <%s> was changed, do you want to apply changes?"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
-#, fuzzy
-msgid "Unapplied changes"
-msgstr "Değişiklikleri uygula"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1071
-#, python-format
-msgid "Subgroup <%s> was changed, do you want to apply changes?"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1127
-#, fuzzy
-msgid "No raster maps selected."
-msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1156
-#, python-format
-msgid "No changes to apply in group <%s>."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1159
-#, python-format
-msgid "Group <%s> was successfully created."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1161
-#, python-format
-msgid "Group <%s> was successfully changed."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1164
-#, fuzzy, python-format
-msgid "Creating of new group <%s> failed."
-msgstr "<%s> vektör haritasına yeni obje eklemede hata."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1166
-#, python-format
-msgid "Changing of group <%s> failed."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1204
-#, fuzzy
-msgid "No group selected."
-msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1210
-#, fuzzy
-msgid "No subgroup selected."
-msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1313
-msgid "Use fully-qualified map names"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
-#, fuzzy
-msgid "3D raster"
-msgstr "3b raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1339
-#, fuzzy
-msgid "Map type:"
-msgstr "Harita katman tipi:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1354
-#, fuzzy
-msgid "Select toggle"
-msgstr "Renk Seç"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1361
-msgid "Mapset:"
-msgstr "Harita takımı:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1447
-#, fuzzy
-msgid "Invert selection"
-msgstr "Yeni kayıt gir"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1582
-#, python-format
-msgid "Dynamic series (%s)"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Çoklu içe aktar"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Katman listesi"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Katman listesi"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "%s katmanların listesi"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "Katman"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Katman adı"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1634
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Yeni vektör harita için ad:"
+msgid "Add selected map layers into group"
+msgstr "İçeri aktarılan katmanları katman ağacına yükle"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Projeksiyon:"
+#: ../gui/wxpython/gui_core/dialogs.py:1172
+#, python-format
+msgid "Group <%s> was changed, do you want to apply changes?"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
-msgid "Options"
-msgstr "Seçimlik"
+msgid "Unapplied changes"
+msgstr "Değişiklikleri uygula"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
+#: ../gui/wxpython/gui_core/dialogs.py:1188
+#, python-format
+msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&İçe Aktar"
+#: ../gui/wxpython/gui_core/dialogs.py:1245
+#, fuzzy
+msgid "No raster maps selected."
+msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Seçileni katmanları içe aktar"
+#: ../gui/wxpython/gui_core/dialogs.py:1274
+#, python-format
+msgid "No changes to apply in group <%s>."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "İçeri aktarılan katmanları katman ağacına ekle"
+#: ../gui/wxpython/gui_core/dialogs.py:1277
+#, python-format
+msgid "Group <%s> was successfully created."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "İçeri aktarılan katmanları katman ağacına ekle"
+#: ../gui/wxpython/gui_core/dialogs.py:1279
+#, python-format
+msgid "Group <%s> was successfully changed."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-#, fuzzy
-msgid "&Link"
-msgstr "Çizgi"
+#: ../gui/wxpython/gui_core/dialogs.py:1282
+#, fuzzy, python-format
+msgid "Creating of new group <%s> failed."
+msgstr "<%s> vektör haritasına yeni obje eklemede hata."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-#, fuzzy
-msgid "Link selected layers"
-msgstr "Seçilen katmanı değiştir"
+#: ../gui/wxpython/gui_core/dialogs.py:1284
+#, python-format
+msgid "Changing of group <%s> failed."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1914
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+msgid "No group selected."
+msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/gui_core/dialogs.py:1968
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Raster haritanın kesiti oluşturulamıyor."
+msgid "No subgroup selected."
+msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Vektör haritayı içe aktar"
+#: ../gui/wxpython/gui_core/dialogs.py:1434
+msgid "Use fully-qualified map names"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2050
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
-msgid "Define output format for raster data"
-msgstr "Raster haritayı içe aktar"
+msgid "3D raster"
+msgstr "3b raster"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2058
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Değişiklikleri görmezden gel ve pencereyi kapat"
+msgid "Map type:"
+msgstr "Harita katman tipi:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2110
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
-msgid "No data source selected."
-msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "DXF katmanları içe aktar"
+msgid "Select toggle"
+msgstr "Renk Seç"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "İçeri aktarılacak DXF dosyasını seç"
+#: ../gui/wxpython/gui_core/dialogs.py:1482
+msgid "Mapset:"
+msgstr "Harita takımı:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2147
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
-msgid "No layers selected."
-msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
+msgid "Invert selection"
+msgstr "Yeni kayıt gir"
+
+#: ../gui/wxpython/gui_core/dialogs.py:1718
+#, python-format
+msgid "Dynamic series (%s)"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Harita Katmanının Şeffaflığını Ayarla"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "mat"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr "Görüntü büyüklüğünü ayarla"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "Sayfa ayarı"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS CBS - Harita Görüntüsü"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "SQL ifadesi"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "sembol:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Sembol ayarları"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Sembol ayarları"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "Bilgi"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 #, fuzzy
 msgid "Copyright"
 msgstr "Kopyala"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Lisans"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Yazar"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "Öznitelikler"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "Öznitelikler"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "Şeffaf"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Şeffaf"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr "Resmi GRASS sitesi:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Projeksiyon:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 #, fuzzy
 msgid "Language"
 msgstr "Yönet"
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, fuzzy, python-format
 msgid "%s file missing"
 msgstr "EPSG kodu kayıp."
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "Çizgi:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr "E-posta"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr "Ülke"
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Döndürme:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "dosya bulunamadı"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 #, fuzzy
 msgid "&Next"
 msgstr "Çı&k"
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "Önizleme"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Harita Araçları"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Katman grubu:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Katman"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Matlık seviyesini değiştir"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Matlık seviyesini değiştir"
@@ -15863,735 +16287,752 @@ msgstr "Ölçek ve açıklamaları haritanın üzerine oturtma     "
 msgid "Create histogram with d.histogram"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Varsayılan görüntü yazıtipini seç"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "Seçilen sütunu sil"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Tip"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "Raster ayarları"
+msgid "Source input"
+msgstr "Kaynak tipi"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Değişiklikleri kaydet"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Dosya"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Protokol"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "Çıktı"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Kaynak tipi"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 #, fuzzy
 msgid "All files"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Hücre değerleri"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Dosya"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "İçeri aktarılacak DXF dosyasını seç"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "İfade"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 #, fuzzy
 msgid "Choose file"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "Obje numarası:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Elemanları sorgula"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Topoloji oluştur/yeniden kur"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "Seçenekleri ayarla"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Format:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 #, fuzzy
 msgid "Protocol:"
 msgstr "Projeksiyon kodu:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "3B görünüm moduna ulaşılamaz"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Giriş"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "<%s>haritası bulunamadı."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Kaynak harita takımını seç:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Harita takımı:"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Harita ölçeği"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "tarih damgası"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Topoloji oluştur/yeniden kur"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Varsayılan ayarları onar"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Gerekli"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Katman listesi"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Projeksiyonu Seç"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Gelişmiş ayarlar"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "rasterları çakıştır"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Projeksiyon kodu:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "En yakın komşuyu kullanarak yeniden örnekle"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Doğrusal ilişki    "
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Vektör haritayı seç:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "için parametreleri gir"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Koordinatlar"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "İçeri aktarılan katmanları katman ağacına yükle"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Kaynak harita takımını seç:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Kaynak konumu seç:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Katman"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Stil"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Katman grubu ekle"
+msgid "Add default"
+msgstr "Varsayılan"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 msgid " Server settings "
 msgstr "Sunucu ayarları"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr "Sunucu"
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 msgid "&Connect"
 msgstr "&Bağlan"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr "Sunucuya bağlan "
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Gelişmiş ayarlar"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Gelişmiş ayarlar"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Katman Yönetici ayarları"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Çıktı vektör harita adı"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Yeniden adlandır"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 #, fuzzy
 msgid "Available web services"
 msgstr "Varolan tüm harita takımları"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "Sunucuya bağlan "
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "İçeri aktarılan katmanları katman ağacına yükle"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Katman özellikleri"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Bölge Ayarla"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Bölge yükle:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Görüntü çözünürlüğünü hesaplama ayarlarına göre sınırlandır"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "varolan dosyanın üstüne yaz"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Bölge yükle:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Seçileni katmanı sil"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr ""
 "Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
 "yeniden adlandırır."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "Dosya zaten var"
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Veri yükleniyor..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Ayarlanamıyor"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Pencereyi kapat"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Pencereyi kapat"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Vektör öznitelik verisini sorgula"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Vektör haritayı seç:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Renk tabloları"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Yüklenecek GRC dosyasını seçin"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Yükle"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "İçeri aktarılacak DXF dosyasını seç"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Ayarlar"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Varsayılan görünüme sıfırla"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Renk tabloları"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Raster harita için yeni renk tablosu oluştur"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "Raster categori değerleri veya yüzdeleri gir"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "Geçerli aralık"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, fuzzy, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr "Raster categori değerleri veya yüzdeleri gir (aralık = %d-%d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "Vektör harita için yeni renk tablosu oluştur"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "Raster categori değerleri veya yüzdeleri gir"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Vektör öznitelik verisini sorgula"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Vektör haritayı seç"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Katman:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Öznitelik sütunu:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "KYM renk sütunu:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "KYM renk sütunu:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Tüm sütunları kaldır"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Raster seriden hacime"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Öznitelik tablosunu kaldırır."
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Renk tabloları"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16600,12 +17041,12 @@ msgstr ""
 "VT dosyasında <%s> vektör haritası için veritabanı bağlantısı belirlenemedi. "
 "Katmanları yönetme sekmesinde yeni bir bağlantı belirleyebilirsiniz."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "Vektör veritabanı bağlantıları"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
@@ -16614,633 +17055,792 @@ msgstr ""
 "<%s> vektör harita geçerli harita takımında zaten var. Üzerine yazmak "
 "istermisin?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, fuzzy, python-format
 msgid "%s column already exists."
 msgstr "Dosya zaten var"
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "Lütfen bekleyin, öznitelik verisi yükleniyor..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Vektör öznitelik değerleri veya aralığını gir (n veya n1 den n2 ye)"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Vektör öznitelik değerleri veya aralığını gir (n veya n1 den n2 ye)"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Lütfen aşağı taşımak için bir temizleme aracı seçiniz"
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "GRASS %s Harita Hesaplayıcı"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "GRASS %s Harita Hesaplayıcı"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 #, fuzzy
 msgid "mapcalc statement"
 msgstr "SQL tümcesi"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "İfade"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "Geçerli çalışma alanını dosyaya kaydet"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "çalışma alanı dosyasını seç"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "bölme      ***********"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 #, fuzzy
 msgid "add"
 msgstr "Ekle"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 #, fuzzy
 msgid "subtract"
 msgstr "yüzey"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "genlik                       ***************"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 #, fuzzy
 msgid "multiply"
 msgstr "[çoklu]"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "sola kaydır"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "sağa kaydır"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 #, fuzzy
 msgid "greater than"
 msgstr "daha kısa"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 #, fuzzy
 msgid "greater than or equal to"
 msgstr "Topoloji oluştur/yeniden kur"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 #, fuzzy
 msgid "less than"
 msgstr "daha uzun"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "daha küçük ya da eşit      "
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "eşit"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "esşit değil"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "DEĞİL"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "bit bit VE"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "bit bit VEYA"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "mantıksal VE"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr "mantıksal VE (boşlukları yoksay)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "mantıksal VEYA"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr "mantıksal VEYA (boşlukları yoksay)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "Seçimlik"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "varolan dosyanın üstüne yaz"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "varolan dosyanın üstüne yaz"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Rasgele noktalar üret"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "Oluşturulan haritaları katman ağacına yükle"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "DXF dosyasını Seç:"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 msgid "Choose a file name to load the expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "%s i panoya kopyalandı"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 #, fuzzy
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "***********         Eklentilerden yeni uzantı yükle  "
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "Depo               *************"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Kategori listesi - silmek için sağ tuşa tıklayın"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "Seçimlik"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "&Getir"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr "&Kur"
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 #, fuzzy
 msgid "Extension not defined"
 msgstr "Durum: tanımlanmadı"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Kategori listesi"
+
+#: ../gui/wxpython/modules/extensions.py:238
 #, fuzzy
 msgid "Install"
 msgstr "&Kur"
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Gölgelenme haritası"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Kategori listesi"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "&Kur"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 #, fuzzy
 msgid "Reinstall"
 msgstr "&Kur"
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Projeksiyonları yönet"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
+#, fuzzy
+msgid "No extension selected. Operation canceled."
+msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+
+#: ../gui/wxpython/modules/extensions.py:489
+#, python-format
+msgid ""
+"List of files to be removed:\n"
+"%(files)s\n"
+"\n"
+"Do you want really to remove <%(ext)s> extension?"
+msgstr ""
+
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Kırıklık noktası kaldır"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "İfade"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Çoklu içe aktar"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Katman listesi"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Katman listesi"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "%s katmanların listesi"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Yeni vektör harita için ad:"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&İçe Aktar"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Seçileni katmanları içe aktar"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "Raster ayarları"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Yazı tipi ayarları"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "İçeri aktarılan katmanları katman ağacına ekle"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "İçeri aktarılan katmanları katman ağacına ekle"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+#, fuzzy
+msgid "&Link"
+msgstr "Çizgi"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+#, fuzzy
+msgid "Link selected layers"
+msgstr "Seçilen katmanı değiştir"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Raster haritanın kesiti oluşturulamıyor."
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Vektör haritayı içe aktar"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Raster haritayı içe aktar"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Değişiklikleri görmezden gel ve pencereyi kapat"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "DXF katmanları içe aktar"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "İçeri aktarılacak DXF dosyasını seç"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Projeksiyon:"
+
+#: ../gui/wxpython/modules/import_export.py:848
 #, fuzzy
-msgid "No extension selected. Operation canceled."
-msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
+msgid "Name for output GRASS map"
+msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/extensions.py:430
-#, python-format
+#: ../gui/wxpython/modules/import_export.py:865
 msgid ""
-"List of files to be removed:\n"
-"%(files)s\n"
-"\n"
-"Do you want really to remove <%(ext)s> extension?"
+"Projection of following layers do not match with projection of current "
+"location. "
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Kırıklık noktası kaldır"
+msgid "Layers to be reprojected"
+msgstr "Silinecek katman"
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "İfade"
+msgid "Reproject selected layers"
+msgstr "Seçileni katmanları içe aktar"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "GRASS-python kütüphanesini bulamadı."
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "Veri Girişi"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "Dataset noktası:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 #, fuzzy
 msgid "Numeric column:"
 msgstr "Anahtar sütun"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "Kriging"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 #, fuzzy
 msgid "Name for the output raster map:"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "Raster haritayı dışa aktar"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "Kriging Modülü"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 #, fuzzy
 msgid "Ready."
 msgstr "Yeniden yükle"
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "Variograma uydur"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "Arsa/yenileme variogram"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 #, fuzzy
 msgid ":"
 msgstr "X:"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "Kriging teknikleri"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 #, fuzzy
 msgid "Block size:"
 msgstr "Simge boyutu:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "Otomatik sığdırma variogramı"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 #, fuzzy
 msgid "Model: "
 msgstr "Mod:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "Devam eden iş! Hiçbir işlevselliği sağlanamadı."
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Görüntü veya raster dosyanın histogramını oluştur"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Histogram metni için font seçin"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 #, fuzzy
 msgid "Set up vector cleaning tools"
 msgstr "Vektör objeleri seç"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Seçilen çizgi/sınırları birleştir"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "Tekrarları kontrol et"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "Tabloyu kaldır"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "Tabloyu kaldır"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "Seçilen çizgileri/sınırları döndür"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "Seçilen çizgileri/sınırları döndür"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "Harita katmanını kaldır"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "Kesişim yerindeki seçilen çizgiyi/sınırları kır"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "Vektör haritayı seç:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "Obje numarası:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "Vektör haritayı seç:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 #, fuzzy
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Geçerli komut dizesini panoya kopyala"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 #, fuzzy
 msgid "line"
 msgstr "hassas"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "Çizgi/sınır düzenle"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "Alan merkezi ekle"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 #, fuzzy
 msgid "face"
 msgstr "yüzey"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr "Lütfen kaldırmak için bir temizleme aracı seçiniz"
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Vektör haritanın topolojisini tenizleme araçları"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr "***********       1. temizleme aracı yukarı taşınmış olamaz"
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Vektör haritanın topolojisini tenizleme araçları"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr "***********       %s. temizleme aracı aşağı taşındı"
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr "***********       Son temizleme aracı aşağı taşınmış olamaz"
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr "Lütfen aşağı taşımak için bir temizleme aracı seçiniz"
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr "temizleme aracı: '%s'"
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Yeni vektör harita için ad:"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Eşik değerini seç"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, fuzzy, python-format
 msgid "'%s' not defined"
 msgstr "Durum: tanımlanmadı"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -17248,20 +17848,20 @@ msgid ""
 "%s"
 msgstr "Hiç harita katmanı seçilmedi. İşlem iptal edildi."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr "Seçilen temizleme işlemi çalıştırılıyor..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Vektör temizleme komutu panoya kopyalandı"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "<%s> dosyası okuma için açılamıyor."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -17270,187 +17870,182 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr " satır %d"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Komut tamamlandı"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Ayrıntılar:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Harita katmanını kaldır"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Veri yükleniyor..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Render"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Varsayılan bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Geçersiz Değer: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "<%s> raster haritası büyütülemiyor."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Ayrıntılar:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "<%s> vektör haritası oluşturulamıyor."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "<%s> raster haritası büyütülemiyor."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Veri yükleniyor..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Render"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Render"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Bilinmeyen"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/core/utils.py:558
-#, fuzzy, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Dosya açılamıyor"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "<%s> dosyası okuma için açılamıyor."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Tekrarlanmış öznitelikler"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17459,179 +18054,184 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "dosya bulunamadı"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Komuttan vazgeçildi"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Komut tamamlandı"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 #, fuzzy
 msgid "Reason"
 msgstr "Bölge"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Çalıştırmada hata:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Hata:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "'%s' komutu çalıştırılamıyor"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "nokta"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "PERMANENT ve geçerli hariç hepsini daralt"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "PERMANENT hariç hepsini daralt"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 #, fuzzy
 msgid "Collapse all except current"
 msgstr "PERMANENT ve geçerli dışında hepsini daralt"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Hepsini daralt"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Tümünü genişlet"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Seçileni göster"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Tabloları listele"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Kaydedilmiş bölgeyi yakınlaştır"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "Kuzey"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "kutu"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "küre"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "küp"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "altıgen"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "aster"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "histogram"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17642,12 +18242,12 @@ msgstr ""
 "       Detaylar: %(detail)s\n"
 "       Çizgi: '%(line)s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17655,282 +18255,313 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Ayarlanamıyor"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "%s komutu ayrıştırılamıyor"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "GRASS Veritabanı ve Konum Adını Belirle"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "CBS Veri Dizini:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Proje Konumu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "CBS Veri Dizinini seç:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Mevki Adı:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "Geçersiz mevki seçildi."
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "GRASS veri dizinini seç:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Mevki Grass Veritabanında zaten mevcut."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Mevki oluşturulamıyor"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Yeni Konum Oluşturma Yöntemini Seçin"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 #, fuzzy
 msgid "Select EPSG code of spatial reference system"
 msgstr "Koordinat Sistemi EPSG kodunu Seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 #, fuzzy
 msgid "Select coordinate system parameters from a list"
 msgstr "Koordinat Sistemini Seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Kartezyen koordinat sisteminde olduğu varsayılır"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Basit"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Gelişmiş"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Projeksiyonu Seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Kod"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Projeksiyon kodu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Açıklamada ara:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Liste okunamıyor: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 #, fuzzy
 msgid "Choose projection parameters"
 msgstr "Projeksiyonu Seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 #, fuzzy
 msgid "Select datum or ellipsoid (next page)"
 msgstr "İlgili elipsoid için Datum'u seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 #, fuzzy
 msgid "Datum with associated ellipsoid"
 msgstr "İlgili elipsoid için Datum'u seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 #, fuzzy
 msgid "Ellipsoid only"
 msgstr "Elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr " %s için bir değer girmelisin."
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, fuzzy, python-format
 msgid " Enter parameters for %s projection "
 msgstr "için parametreleri gir"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Geodetic Datumu belirle"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Elipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Datum kodu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Elipsoidi belirle"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "Veritabanı"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Elipsoid kodu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Coğrafi referanslı dosyayı seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Coğrafi referanslı dosya:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "WKT dosyası:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "EPSG Kodunu Seç:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "EPSG-kodları dosyası yolu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "EPSG-Kodları dosyasını Seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "EPSG Kodunu Seç:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "EPSG-kodları dosyası yolu:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "EPSG Kodu:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "EPSG-Kodları dosyasını Seç"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "EPSG Kodları okunamıyor: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Coğrafi referans parametrelerini belirleme yöntemini seç"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "PROJ.4 parametreleri girin:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Datum dönüşümü gerekli."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "GRASS Veritabanı:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Mevki Adı:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Mevki Adı:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Projeksiyon:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "PROJ.4 Tanımı:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "<%s> GRASS mevkisini oluşturmak istiyormusun?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Yeni Mevki oluşturayım mı?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Yeni GRASS konumu belirle"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, fuzzy, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17938,15 +18569,15 @@ msgid ""
 "Details: %(err)s"
 msgstr "Yeni mevki oluşturulamıyor. <%s> mevkisi oluşturulamadı."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Konum sihirbazı iptal edildi. Konum oluşturulamadı."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Yeni mevki oluşturulamıyor"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, fuzzy, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17955,242 +18586,247 @@ msgstr ""
 "Konum <%(loc)s> GIS veri dizininde<%(dir)s> yaratılacak. GIS başlangıç "
 "ekranında varsayılan GIS veri dizinini değiştirmek zorunda kalacaksınız."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 #, fuzzy
 msgid "New GIS data directory"
 msgstr "CBS Veri Dizini:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "EPSG kodu kayıp."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "EPSG kodu kayıp."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "dosya bulunamadı"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Varsayılan bölge boyutlarını ve çözünürlüğünü ayarla"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Bölge Ayarla"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Geçersiz mevki seçildi."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "Geçersiz bölge"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "3B ayarlarını görmek için buraya tıklayın"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "3B ayarlarını gizlemek için buraya tıklayın"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Satırlar: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Sütunlar: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Hücreler: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Derinlik: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3B Hücreler: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Üst-Alt çözünürlük"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Kuzey"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Batı"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Doğu"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Güney"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "K-G çözünürlüğü"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "D-B çözünürlüğü"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Geçersiz Değer: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Datum dönüşümünü seçin"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 #, fuzzy
 msgid "Select from list of datum transformations"
 msgstr "Datum dönüşümleri listesi"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 #, fuzzy
 msgid "Easting"
 msgstr "Doğu"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "Kuzey"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 #, fuzzy
 msgid "Elevation"
 msgstr "yükseltiye göre"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Kaynak adı"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "Rasterlar için yüzey alan hesabı"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Görüntü renklerini yönet"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "En yakın objeler"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "En yakın objeler"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "yüzeyde"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Raster harita yükleniyor"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "3b raster harita yükleniyor"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "hata"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Desteklenmeyen katman tipi '%s'"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Raster harita kaldırılamıyor"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "3b raster harita kaldırılamıyor"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "3b raster harita"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "başarıyla geri yüklendi"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "<%(name)s> (%(type)s) vektör haritası yüklemede hata"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -18198,811 +18834,811 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 #, fuzzy
 msgid "constant#"
 msgstr "sabit"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Pencere"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "Analiz"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "***********           Kuantumlama"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Bakış açısı:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 #, fuzzy
 msgid "Look:"
 msgstr "Bak:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "küre"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "Render"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "üst"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "Sıfırla"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Varsayılan görünüme sıfırla"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "Resim görünümü"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Yeniden yükle"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "Harita takımını yeniden adlandır"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 #, fuzzy
 msgid "Save image sequence"
 msgstr "Görüntü büyüklüğünü ayarla"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "Girdi dizinini seç"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Yüzey"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "yüzeyde"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vektör"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 #, fuzzy
 msgid "Lighting"
 msgstr "Giriş"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 #, fuzzy
 msgid "Fringe"
 msgstr "hassas:"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Mod:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "hassas"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "her ikisi"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Gölgeleme:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "düz"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 #, fuzzy
 msgid "Set to all"
 msgstr "Varsayılanı kaydet"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "Kod"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "Çözünürlük:"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Stil"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "tel"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "yüzey"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "Modül bul"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Yüzey öznitelikleri"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Şeffaflık"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "harita"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "sabit"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Sıfırla"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "Varsayılan görünüme sıfırla"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "renk"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "renge göre"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 #, fuzzy
 msgid "Horizontal X:"
 msgstr "Yatay açı"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 #, fuzzy
 msgid "Horizontal Y:"
 msgstr "Yatay açı"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "Çözünürlük:"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "Hacimler"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "Şeffaflık"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Vektör çizgileri göster"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Vektör çizgiler"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 msgid "Line:"
 msgstr "Çizgi:"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "genişlik:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "renk:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Seçenekleri ayarla"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "yüzeyde"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 #, fuzzy
 msgid "Height above surface:"
 msgstr "Yüzeyden olan yükseklik:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Vektör noktaları göster"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Vektör noktalar"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr "Simge:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "??????????????"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Çözünürlük:"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "??????????????"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "Çizgileri göster"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "Kaynak mevkiyi seç:"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr "**********             Açık renk ve yoğunluk"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr "Parlaklık:"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr "K && B"
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr "K && D"
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr "G && B"
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr "G && D"
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "kullan| X koordinatı"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 #, fuzzy
 msgid "Animation already axists"
 msgstr "Dosya zaten var"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "??????????????"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "??????????????"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Tekrarlanmış öznitelikler"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "B"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "K"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "G"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "D"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "B"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "K"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "G"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 #, fuzzy
 msgid "SW"
 msgstr "B"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Seviye"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Tekrarların listesi"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Katman ekle"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "<%s> vektör haritası 3B"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "<%s> vektör haritası 2B"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "yüzeyde"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "Yönet"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Kuzey"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Güney"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Kenarları bul"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Kuzey"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Yükseklik:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Doğu"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Alt"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "<%s>haritası bulunamadı."
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "3B görünüm ayarları"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "(değer)"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "(adım):"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Konum:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Dönme:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Kırıklık noktası kaydır"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "Yükseklik"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "Çizgi renkleri"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Marker:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Nviz ayarları <%s> dosyasına kaydedildi."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -19012,7 +19648,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -19024,23 +19660,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -19048,7 +19684,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -19059,31 +19695,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -19098,68 +19734,68 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Konum düzeltme aracı"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Vektör noktalar"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Sütunu yeniden adlandır"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Renk seç"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Gridi göster"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Kategori yok"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Kategori yok"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Raster haritayı dışa aktar"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Matlık seviyesini değiştir"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -19169,215 +19805,231 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Kaydedilmiş bölge boyutlarına göre yakınlaştır"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "3B raster harita ekle"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Sorgulama için hiçbir harita katmanı seçilmedi."
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr ""
 "Kullanıcının geçerli harita takımındaki veritabanı elemanı dosyalarını "
 "yeniden adlandırır."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "<%s> bölge dosyası zaten var. Üzerine yazılmasını istermisin?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "<%s> yeni vektör haritası oluşturuldu "
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Renk seç"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Seçileni YKN temizle"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Renk seç"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Kutuyla seç"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Eksen ayarları"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "3. raster haritayı seç (istenirse):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "<%s> vektör haritasına yeni obje eklemede hata."
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "3B raster harita ekle"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Kesiti alınacak raster haritayı seç:"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Görüntüyü sınıflandır"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Seçilen raster/vektör harita(lar) sorgula"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr "Seçilen harita katmanını katman ağacından kaldırmak istiyormusun?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Yeni kırıklık noktası ekle"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Yeni kayıt gir"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Kırıklık noktası kaydır"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Kırıklık noktası kaydır"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Kırıklık noktası kaldır"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Kırıklık noktası kaldır"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Etiket ekle"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Seçilmiş harita takımını yeniden adlandır"
 
 #, fuzzy
+#~ msgid "Unsupported units"
+#~ msgstr "Desteklenmeyen katman tipi '%s'"
+
+#, fuzzy
+#~ msgid "Map layers"
+#~ msgstr "Harita katmanları"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "Arama modülü"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "<%s> GRASS mevkisini oluşturmak istiyormusun?"
+
+#, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "Dosya zaten var"
 
@@ -19397,6 +20049,26 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ msgstr "Arayüzden Çık"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "Geçersiz bölge"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "3B görünüm moduna ulaşılamaz"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Geçerli aralık"
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "Yeniden adlandır"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Tabloyu kopyala"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Katman listesi"
 
@@ -19412,20 +20084,33 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "Tek değişkenli raster istatistikleri "
 
+#~ msgid "Repository"
+#~ msgstr "Depo               *************"
+
+#, fuzzy
+#~ msgid "Load settings:"
+#~ msgstr "Ayarları göster"
+
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "Sütun ekle"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Eski GRASS vektör haritasını içe aktar"
 
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "Modele koşul ekle (if/else) "
+#, fuzzy
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Eski GRASS vektör haritasını içe aktar"
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "İçeri aktarılan katmanları katman ağacına yükle"
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Eski GRASS vektör haritasını içe aktarır."
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "İçeri aktarılan katmanları katman ağacına ekle"
+#~ msgid "GPS data import"
+#~ msgstr "GEOnet içe aktar"
+
+#~ msgid "GEOnet import"
+#~ msgstr "GEOnet içe aktar"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -19451,37 +20136,24 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ msgstr "OGR kullanan çeşitli dışa aktarma biçimleri"
 
 #, fuzzy
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Eski GRASS vektör haritasını içe aktar"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Eski GRASS vektör haritasını içe aktar"
+#~ msgid "Create optimally placed labels"
+#~ msgstr "Etiketleri oluştur"
 
 #, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Eski GRASS vektör haritasını içe aktarır."
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Öznitelik Tablo Yöneticisi"
 
 #, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "GEOnet içe aktar"
-
-#~ msgid "GEOnet import"
-#~ msgstr "GEOnet içe aktar"
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Kaynak harita takımını seç:"
 
 #, fuzzy
-#~ msgid "Create optimally placed labels"
-#~ msgstr "Etiketleri oluştur"
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "Hesaplama bölgesini seçilen haritadan ayarla (BOŞ DEĞER'leri görme)"
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "Hacimler"
+#~ msgid "Add default servers"
+#~ msgstr "Katman grubu ekle"
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "Proje mevkisi ve harita takımını seç"
@@ -19533,10 +20205,6 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ msgstr "GRASS'ı Başlat"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "Harita takımı oluştur"
-
-#, fuzzy
 #~ msgid "&Location wizard"
 #~ msgstr "Mevki sihirbazı"
 
@@ -19559,16 +20227,30 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ msgid "Warning: "
 #~ msgstr "Uyarı"
 
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "Proje mevkisi ve harita takımını seç"
-
 #~ msgid "Starting GRASS for the first time"
 #~ msgstr "GRASS ilk kez başlatılıyor"
 
+#, fuzzy
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Raster harita geliştir"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "İçeri aktarılan katmanları katman ağacına yükle"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "İçeri aktarılan katmanları katman ağacına ekle"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Eski GRASS vektör haritasını içe aktarır."
+
 #~ msgid "Vector to volume"
 #~ msgstr "Vektörden hacime"
 
+#~ msgid "Sites to vector"
+#~ msgstr "Noktadan vektöre"
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "3B raster harita Hesaplayıcı"
@@ -19596,11 +20278,9 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ msgid "Voxel statistics"
 #~ msgstr "Genel istatistikler"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Eski GRASS vektör haritasını içe aktarır."
-
-#~ msgid "Sites to vector"
-#~ msgstr "Noktadan vektöre"
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Hacimler"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -19625,6 +20305,5 @@ msgstr "Seçilmiş harita takımını yeniden adlandır"
 #~ "Raster haritanın boş değer içermeyen hücrelerinden tek değişkenli "
 #~ "istatistikler hesaplar."
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Öznitelik Tablo Yöneticisi"
+#~ msgid "Digitize"
+#~ msgstr "Sayısallaştırma"
diff --git a/locale/po/grasswxpy_vi.po b/locale/po/grasswxpy_vi.po
index bc774e4..1d9f589 100644
--- a/locale/po/grasswxpy_vi.po
+++ b/locale/po/grasswxpy_vi.po
@@ -7,7 +7,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: grasswxpy_vi\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: 2010-08-27 16:40+0700\n"
 "Last-Translator: \n"
 "Language-Team: American English <kde-i18n-doc at kde.org>\n"
@@ -19,53 +19,53 @@ msgstr ""
 "X-Generator: Lokalize 1.0\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 #, fuzzy
 msgid "1. Select GRASS GIS database directory"
 msgstr "Chọn thư mục dữ liệu GRASS:"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 #, fuzzy
 msgid "2. Select GRASS Location"
 msgstr "Chọn kiểu bản đồ và vị trí/tập bản đồ"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 #, fuzzy
 msgid "3. Select GRASS Mapset"
 msgstr "Chọn vị trí dự án và tập bản đồ"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 #, fuzzy
 msgid "Start &GRASS session"
 msgstr "Vào phiên làm việc của GRASS"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 #, fuzzy
 msgid "&Browse"
 msgstr "Duyệt"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 #, fuzzy
 msgid "Create a new Mapset in selected Location"
 msgstr ""
@@ -73,153 +73,153 @@ msgstr ""
 "trong vị trí đã chọn"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr ""
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "Đổi tên vị trí đã chọn"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 #, fuzzy
 msgid "De&lete"
 msgstr "Xóa"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "Xóa vị trí đã chọn"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "Đổ&i tên"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "Đổi tên tập bản đồ đã chọn"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 #, fuzzy
 msgid "&Delete"
 msgstr "Xóa"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "Xóa tập bản đồ đã chọn"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, fuzzy, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "Bộ Quản lý Lớp của GRASS GIS"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "Vào phiên làm việc của GRASS"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "Lỗi"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr ""
 "Không thể thiết lập CSDL GRASS. Kiểm tra các thiết lập bản địa của bạn."
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, fuzzy, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "LỖI: Không tìm thấy vị trí <%s>"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, fuzzy, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "LỖI: Không tìm thấy tập bản đồ <%s>"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, fuzzy, python-brace-format
 msgid "Error: {text}"
 msgstr "Lỗi:"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 #, fuzzy
 msgid "Import data?"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 #, fuzzy
 msgid "Do you want to create new mapset?"
 msgstr "Bạn có muốn tạo vị trí GRASS <%s>?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "Tạo tập bản đồ mới"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, python-format
 msgid "Location <%s> created"
 msgstr "Đã tạo vị trí <%s>"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr ""
 "Bạn có muốn thiết lập phạm vi vùng và độ phân giải mặc định bây giờ không?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, fuzzy, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr "Nắn chỉnh địa lý bản đồ véc-tơ <%s> thất bại"
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -229,7 +229,7 @@ msgstr ""
 "\n"
 "Không thể đổi tên bộ bản đồ này."
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -240,12 +240,12 @@ msgstr ""
 "\n"
 "Nhập tên mới:"
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "Thông điệp"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -256,7 +256,7 @@ msgstr ""
 "\n"
 "Bộ bản đồ <%s> đã có trong location."
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -267,7 +267,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -278,7 +278,7 @@ msgstr ""
 "\n"
 "Location <%s> đã có trong CSDL GRASS."
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -289,7 +289,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -299,7 +299,7 @@ msgstr ""
 "\n"
 "Không thể đổi tên bộ bản đồ này."
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -312,11 +312,11 @@ msgstr ""
 "\n"
 "TẤT CẢ BẢN ĐỒ trong đó sẽ bị XÓA VĨNH VIỄN!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "Không thể xóa tập bản đồ"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -327,43 +327,43 @@ msgstr ""
 "\n"
 "TẤT CẢ BẢN ĐỒ có trong vị trí đó sẽ bị XÓA VĨNH VIỄN!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "Không thể xóa vị trí"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr ""
 "Không thể thiết lập CSDL GRASS. Kiểm tra các thiết lập bản địa của bạn."
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, python-format
 msgid "Path '%s' doesn't exist."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "Chọn Thư mục Dữ liệu GIS"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "Nhập tên cho tập bản đồ mới:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, python-format
 msgid "Mapset <%s> already exists."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -372,17 +372,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "Đổi tên tập bản đồ đã chọn"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "Không thể tạo tập bản đồ mới: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -394,11 +394,11 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 msgid "Lock file found"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -406,7 +406,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -414,19 +414,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "Không thể phóng đến bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -455,189 +455,189 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "Thanh công cụ nắn chỉnh địa lý"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "Các thiết lập số hóa"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "Trình bày in ấn"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "Hiển thị vùng"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "Hiển thị vùng"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 msgid "Import vector map"
 msgstr "Nhập bản đồ véc tơ"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 #, fuzzy
 msgid "No training areas to export."
 msgstr "Không có gì để trích ra."
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, python-format
 msgid "No area in category %s. Category skipped."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "Phân tích"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 msgid "File already exists"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "Cần ít nhất %d GCP. Đã hủy thao tác."
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "Biểu đồ tần số"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "Các điểm véc tơ"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -646,655 +646,656 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 #, fuzzy
 msgid "No class selected"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "Đang nạp bản đồ raster"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "Đang nạp bản đồ raster"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "Chọn nhóm:"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr "Tạo/biên tập nhóm..."
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "Chọn nhóm:"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "Chọn nhóm:"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "Chọn nhóm:"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 msgid "Please choose a subgroup."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 #, fuzzy
 msgid "Name of raster map:"
 msgstr "Bản đồ raster đã được mã hóa lại:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 #, fuzzy
 msgid "Name of vector map:"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 #, fuzzy
 msgid "Class manager"
 msgstr "Phân loại hình ảnh"
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "Phân loại hình ảnh"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "Màu"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 #, fuzzy
 msgid "Zoom to training areas of selected class"
 msgstr "Phóng đến (các) bản đồ đã chọn"
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "Nhập tên cho tập bản đồ mới:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "Lưu tập tin thành..."
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "Tạo bảng thuộc tính"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "Xuất các bảng thuộc tính ra nhiều định dạng khác nhau."
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "Đổi mức độ đục"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "Xóa lớp đã chọn"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 #, fuzzy
 msgid "Add RGB map layer"
 msgstr "Thêm lớp RGB"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 #, fuzzy
 msgid "Training"
 msgstr "Cảnh báo"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr "Xem trước"
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 msgid "Set map canvas for "
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "Phóng đến bản đồ"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "Thêm bản đồ raster 3D"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "Màn Hình Bản Đồ GRASS GIS:"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 #, fuzzy
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr "Không có bản đồ raster hoặc véc-tơ nào được chọn để truy vấn."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "Chọn bản đồ raster:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "Bản đồ raster đã được mã hóa lại:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr "Bản đồ raster đã được mã hóa lại:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "Tạo vị trí mới?"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 #, fuzzy
 msgid "Switch to simple mode"
 msgstr "Đơn giản"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "Đóng"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 msgid "Name of the first map is missing."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "Số hiệu phạm trù (cột %s) bị thiếu."
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "thô:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "thô:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "Màu:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 #, fuzzy
 msgid "Shape:"
 msgstr "Chỉ mục hình dạng"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 #, fuzzy
 msgid "Line width:"
 msgstr "Độ rộng đường"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr "Cỡ:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "Truy vấn (các) bản đồ raster/véc tơ"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "Truy vấn (các) bản đồ raster/véc tơ đã chọn"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "mịn:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "Chọn mã EPSG"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 msgid "Switch maps"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "Điểm khống chế"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 #, fuzzy
 msgid "GCP List"
 msgstr "Danh sách"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "Trình bày bản đồ"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 #, fuzzy
 msgid "GCP Manager toolbar"
 msgstr "Quản lý màu"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "Thiết lập trang"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "Xem trước khi in"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "Trình bày in ấn"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr "Phóng đến vùng tính toán (thiết lập bằng g.region)"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "Phóng đến vùng mặc định"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "Phóng đến vùng đã lưu"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "Lưu hình học trình bày vào vùng có đặt tên"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "Miền hợp lệ"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 #, fuzzy
 msgid "RMS error"
 msgstr "Lỗi RMS"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr "Cài đặt cho việc nắn chỉnh địa lý"
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr "Đã hủy việc cài đặt cho nắn chỉnh địa lý"
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr "Chọn kiểu bản đồ và vị trí/tập bản đồ"
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr "Kiểu bản đồ để nắn chỉnh địa lý"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "raster"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "véc tơ"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr "Chọn vị trí nguồn:"
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr "Chọn tập bản đồ nguồn:"
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr "Bạn phải chọn vị trí hợp lệ trước khi chọn một tập bản đồ"
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr "Bạn phải chọn một vị trí và tập bản đồ hợp lệ để tiếp tục"
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr "Chọn ảnh/nhóm bản đồ để nắn chỉnh địa lý"
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr "Chọn nhóm:"
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr "Tạo nhóm nếu chưa có nhóm nào"
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr "Thêm bản đồ véc-tơ vào nhóm..."
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr "Phần mở rộng cho các bản đồ đầu ra:"
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr "Để tiếp tục, bạn phải chọn một ảnh/nhóm bản đồ"
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr "Bạn phải nhập phần tên mở rộng hợp lệ cho bản đồ để tiếp tục"
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 #, fuzzy
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr "Chọn ảnh/bản đồ để trình bày việc tạo điểm khống chế (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "Chọn tập bản đồ nguồn:"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 #, fuzzy
 msgid "You must select a source map in order to continue"
 msgstr "Bạn phải chọn một ảnh/bản đồ hợp lệ để tiếp tục"
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 #, fuzzy
 msgid "Manage Ground Control Points"
 msgstr "Điểm khống chế"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "Cần ít nhất %d GCP. Đã hủy thao tác."
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "Chuyển đổi tọa độ"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1303,28 +1304,28 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr "Việc ghi tập tin POINTS thất bại"
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, fuzzy, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr "Tập tin POINTS đã được lưu"
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 msgid "source mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 msgid "target mapwin not defined"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr "Việc đọc tập tin POINTS thất bại"
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, fuzzy, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1339,282 +1340,282 @@ msgstr ""
 "
6 điểm trở lên cho bậc 2, và \n"
 "
10 điểm trở lên cho bậc 3."
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 #, fuzzy
 msgid "Rectifying images, please wait..."
 msgstr "Nắn chỉnh ảnh hoặc raster"
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, python-format
 msgid "Transforming <%s>..."
 msgstr "Đang chuyển đổi <%s>..."
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "Nắn chỉnh ảnh hoặc raster"
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr "Nắn chỉnh địa lý bản đồ véc-tơ <%s> thất bại"
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "Thiết lập cho Bộ Quản Lý Lớp"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 msgid "Quit GCP Manager"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "Thiết lập các điểm khống chế (GCP)"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "use"
 msgstr "khử thiết lập"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "Tên nguồn"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "Tên nguồn"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 #, fuzzy
 msgid "target E"
 msgstr "Nhóm đích"
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 #, fuzzy
 msgid "target N"
 msgstr "Nhóm đích"
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr "Lỗi tới"
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr "Lỗi lui"
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr "Tạo nhóm bản đồ véc-tơ"
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr "Chọn (các) bản đồ véc-tơ để thêm vào nhóm:"
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr "Biên soạn GCP"
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 #, fuzzy
 msgid "Ground Control Point No."
 msgstr "Điểm khống chế"
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "Tên nguồn"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "Tên nguồn"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "Áp dụng các thay đổi cho phiên làm việc hiện tại"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr ""
 "Áp dụng và lưu các thay đổi vào tập tin thiết lập của người dùng (mặc định "
 "cho các phiên làm việc tiếp theo)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "Đóng hộp thoại"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "Biểu tượng học"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr "Thiết lập về ký hiệu"
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "Khử chọn GCP đã chọn"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 #, fuzzy
 msgid "Color for unused GCPs:"
 msgstr "Quy tắc màu"
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 #, fuzzy
 msgid "Show unused GCPs"
 msgstr "Hiện các đường"
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 #, fuzzy
 msgid "Symbol size:"
 msgstr "Thiết lập về ký hiệu"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "Thanh công cụ nắn chỉnh địa lý"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "Chọn phương pháp nắn chỉnh cho các ảnh raster"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr "Bậc 1"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr "Bậc 2"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr "Bậc 3"
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "Chọn bản đồ véc tơ:"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr "cắt đến vùng cần tính toán trong vị trí đích"
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "Các thiết lập mặt cắt được lưu vào tập tin '%s'."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "Lỗi trình số hóa vec-tơ"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "Không có trình số hoá véc-tơ"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1622,371 +1623,371 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr "Cập nhật các phạm trù"
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr "Không có bản đồ vec-tơ nào được chọn để biên tập."
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr "Hộp thoại Z bulk-labeling"
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr "Các thiết lập số hóa"
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr "Áp dụng các thay đổi cho phiên này"
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr "Đóng hộp thoại và lưu thay đổi vào tập tin cấu hình của người dùng"
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "Đóng hộp thoại và bỏ qua các thay đổi"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "Tổng quát"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "Độ rộng đường"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr "Bắt dính"
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr "Ngưỡng bắt dính"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "screen pixels"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr "Bắt dính cả vào đỉnh"
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr "Ngưỡng bắt dính là %(value).1f %(units)s"
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr "Chọn các đối tượng vec-tơ"
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr "Chọn ngưỡng"
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr "Chỉ chọn các đối tượng ở trong khung ranh giới chọn"
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 "Theo mặc định tất cả các đối tượng được chọn chồng lên khung ranh giới chọn"
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr "Kiểm tra các trùng lặp"
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "Số hóa ranh giới mới"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr "Ngắt các đường tại điểm giao"
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "Số hóa đối tượng mới"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr "Lưu các thay đổi"
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr "Lưu các thay đổi khi thoát"
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 msgid "Query tool"
 msgstr "Công cụ truy vấn"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr "Chọn công cụ truy vấn"
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr "Chọn theo khung"
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr "dài"
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr "Chọn các đường"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr "ngắn hơn"
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr "dài hơn"
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr "đoạn thừa"
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr "Chọn các đoạn thừa"
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "Các thuộc tính"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr "Số hóa đối tượng mới"
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr "Thêm bản ghi mới vào bảng"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 msgid "Layer"
 msgstr "Lớp"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr "Phạm trù"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr "Chế độ"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr "Tiếp theo để dùng"
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr "Chỉ số phạm trù"
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr "Chế độ phạm trù"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr "Nhập thủ công"
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr "Không có phạm trù nào"
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr "Xóa (các) đối tượng hiện có"
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr "Xóa bản ghi khỏi bảng"
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "Truy vấn theo thuộc tính"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 msgid "area"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "Số hóa đường mới"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "Số hóa ranh giới mới"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "Đánh dấu khi chọn"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr "Đánh dấu khi chọn (các đối tượng trùng )"
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "Đường"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr "Ranh giới (không có vùng)"
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr "Ranh giới (một vùng)"
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr "Ranh giới (hai vùng)"
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr "Trọng tâm (ở trong vùng)"
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr "Trọng tâm (ngoài vùng)"
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr "Trọng tâm (đúp trong vùng)"
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr "Nốt (một đường)"
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr "Nốt (hai đường)"
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr "Đỉnh"
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr "Vùng (ranh giới khép kín + trọng tâm)"
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr "Hướng"
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr "Tắt bắt dính"
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 "Ngưỡng bắt dính là %(value).1f %(units)s (dựa trên độ phân giải tính toán)"
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr "Các thiết lập số hoá được lưu vào tập tin <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "Các thiết lập số hóa"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "Không có bản đồ vec-tơ nào được chọn để biên tập."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1994,79 +1995,79 @@ msgid ""
 "Reason: %s"
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "Cần ít nhất %d GCP. Đã hủy thao tác."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "Chỉ số nhận diện đối tượng:"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "Tạo điểm đọc theo các đường"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr "Danh sách các phạm trù - bấm chuột phải để xóa"
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr "Thêm phạm trù mới"
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "Áp dụng các thay đổi"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr "Bỏ qua thay đổi và đóng hộp thoại lại"
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr "Áp dụng thay đổi và đóng hộp thoại"
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr "Chỉ số nhận diện đối tượng:"
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2077,260 +2078,260 @@ msgstr ""
 "
Số lớp và số phạm trù phải là số nguyên.\n"
 "
Số lớp phải lớn hơn 0"
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "Xóa phần chọn"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "Xóa tất cả"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "Nạp lại"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr "Không thể cập nhật bản đồ véc tơ."
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr "%d đường được chọn để gán nhãn hàng loạt giá trị z"
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr "Thiết lập giá trị"
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr "Giá trị bắt đầu"
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr "Bước"
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr "Danh sách các đối tượng bị trùng"
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 msgid "Feature id"
 msgstr "Chỉ số nhận diện đối tượng"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr "Lớp (Các phạm trù)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "Số hóa điểm mới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "Trái: điểm mới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "Số hóa đường mới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "Trái: điểm mới; Giữa: quay lại điểm sau cùng; Phải: đóng đường"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "Số hóa ranh giới mới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "Số hóa trọng tâm mới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "Số hóa ranh giới mới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "Xây dựng đường từ đường thẳng hoặc ranh giới."
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "Trái: Chọn; Giữa: Hủy chọn; Phải: Xác nhận"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 #, fuzzy
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Bắt dính các đường/ranh giới đã chọn (chỉ với các nốt)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "Xóa (các) bản ghi đã chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "Trình bày/cập nhật các thuộc tính"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "Trái: Chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "Trình bày/cập nhật các phạm trù"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "Lật các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 #, fuzzy
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr "Bắt dính các đường/ranh giới đã chọn (chỉ với các nốt)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "Di chuyển đỉnh"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr "Đổi tên tập bản đồ đã chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 #, fuzzy
 msgid "Quit digitizer"
 msgstr "Lỗi trình số hóa vec-tơ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "Trình số hóa vec-tơ thất bại"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "Trình số hóa vec-tơ thất bại"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "Các công cụ bổ sung (sao chép, lật, kết nối, v.v..)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "Hủy thao tác cuối"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "Phục hồi các thay đổi trước đây"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "Phục hồi các thay đổi trước đây"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr "Ngắt các đường/ranh giới tại giao điểm"
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr "Kết nối các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "Sao chép các phạm trù"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr "Sao chép các đối tượng từ bản đồ véc tơ (nền)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "Trình bày các thuộc tính"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr "Chuyển đổi kiểu đối tượng"
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr "Lật các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr "Hợp nhất các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr "Bắt dính các đường/ranh giới đã chọn (chỉ với các nốt)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "Ngắt đường/ranh giới"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr "Truy vấn các đối tượng"
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr "Gán nhãn hàng loạt giá trị Z cho các đường 3D"
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "Chọn bản đồ véc tơ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "Bản đồ véc-tơ không phải loại 3D. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr "Chọn bản đồ véc tơ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2339,65 +2340,66 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "Lỗi trình số hóa vec-tơ"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "Vui lòng chờ, đang mở bản đồ vec- tơ <%s> để chỉnh sửa..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "Trình số hóa vec-tơ thất bại"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "Bạn có muốn lưu các thay đổi trong bản đồ vec-tơ <%s>?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "Lưu các thay đổi?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "Vui lòng chờ, đang đóng và xây dựng lại tôpô cho bản đồ vec-tơ <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, fuzzy, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr "Đóng hộp thoại khi kết thúc"
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "Bản đồ véc tơ mới"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, python-format
 msgid "Property does not exist: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 #, fuzzy
 msgid "Measuring finished"
 msgstr "Đo khoảng cách"
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
@@ -2406,193 +2408,212 @@ msgstr ""
 "Nhắp và rê bằng phím chuột  trái để đo. %sNhắp chuột đúp bằng phím trái để "
 "xoá."
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 msgid "Measuring distance"
 msgstr "Đo khoảng cách"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 msgid "Measuring distance:"
 msgstr "Đang đo khoảng cách:"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "Chú giải"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "Đo khoảng cách"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "Cảnh báo"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 #, fuzzy
 msgid "Measuring area:"
 msgstr "Đang đo khoảng cách:"
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "Chú giải"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "Thêm thước tỷ lệ và mũi tên chỉ hướng bắc"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "Trình bày bản đồ"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s' được chép vào bộ nhớ"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "Hiện các thiết lập"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "Thêm lớp chồng"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "Các chuỗi raster"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 #, fuzzy
 msgid "Please wait, exporting image..."
 msgstr "Xin chờ, đang cập nhật dữ liệu..."
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr "Phóng đến phạm vi vùng đã lưu"
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "Bản đồ véc-tơ không phải loại 3D. Thao tác bị hủy."
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr "Lưu phạm vi trình bày vào tập tin vùng"
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "Cảnh báo"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "Hiển thị phạm vi tính toán"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "Kiểm tra"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "Định dạng:"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "Đặt phông"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
@@ -2600,187 +2621,557 @@ msgstr ""
 "Kéo chữ bằng chuột trong chế độ con trỏ đến vị trí mong muốn.\n"
 "
Nhắp đúp để thay đổi các tùy chọn"
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-#, fuzzy
-msgid "GRASS GIS Graphical Modeler"
-msgstr "Trợ giúp GRASS GIS"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-#, fuzzy
-msgid "Model"
-msgstr "Chế độ"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
 msgstr ""
+"Bản đồ véc tơ <%s> đã có trong tập bản đồ hiện tại. Bạn có muốn ghi đè lên "
+"không?"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr "Ghi đè?"
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Variables"
-msgstr "Liệt kê các bảng"
+msgid "GRASS locations in {}"
+msgstr "Chọn vị trí dự án và tập bản đồ"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "Đầu ra của lệnh"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "Đổi tên"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "Miền hợp lệ"
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
+msgstr "Đổi tên"
+
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:256
+#: ../gui/wxpython/datacatalog/tree.py:652
 #, fuzzy
-msgid "Do you want to save changes in the model?"
-msgstr "Bạn có muốn lưu các thay đổi trong không gian làm việc?"
+msgid "No map selected for copying."
+msgstr "Không có bản đồ vec-tơ nào được chọn để biên tập."
 
-#: ../gui/wxpython/gmodeler/frame.py:258
+#: ../gui/wxpython/datacatalog/tree.py:659
 #, fuzzy
-msgid "Do you want to store current model settings to model file?"
-msgstr "Bạn có muốn lưu thiết lập hiện tại vào tệp không gian làm việc?"
-
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr ""
+msgid "Copy map"
+msgstr "Chép bảng"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "Xoá phần đã được lọc"
+msgid "Failed to copy map: new map has the same name"
+msgstr "Không thể đọc tập tin EPSG: '%s'"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, fuzzy, python-format
-msgid "Do you want to permanently delete data?%s"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
 msgstr ""
-"Bạn có muốn đóng màn hình %d?\n"
-"\n"
-"%s"
+"Bản đồ véc tơ <%s> đã có trong tập bản đồ hiện tại. Bạn có muốn ghi đè lên "
+"không?"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-#, fuzzy
-msgid "Delete intermediate data?"
-msgstr "Xoá phần đã được lọc"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "Trình bày"
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
 msgstr ""
-"Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
-"dùng."
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:729
 #, fuzzy
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr "cắt đến vùng cần tính toán trong vị trí đích"
+
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
 msgstr ""
-"Không gian làm việc hiện tại chưa trống. Bạn có muốn lưu thiết lập hiện tại "
-"vào tệp không gian làm việc?"
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "Tạo tập bản đồ mới"
+msgid "Delete map"
+msgstr "Xóa tập bản đồ"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "Xóa"
+
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "Chọn tập tin"
+msgid "g.remove completed"
+msgstr "Kiểm tra các trùng lặp"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "Trình bày"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
 msgstr ""
-"Tập tin không gian làm việc <%s> đã tồn tại. Bạn có muốn ghi đè tập tin này "
-"không?"
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
+#: ../gui/wxpython/datacatalog/tree.py:827
 #, fuzzy
-msgid "Save model"
-msgstr "Chế độ phạm trù"
+msgid "Moving maps not implemented"
+msgstr "phần bù của một"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, fuzzy, python-format
-msgid "File <%s> saved"
-msgstr "Tập tin POINTS <%s> đã được lưu"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr ""
+"Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
+"dùng."
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:910
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "Chọn tập tin để lưu không gian làm việc hiện tại"
+msgid "&Copy"
+msgstr "Sao chép"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr ""
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
+#: ../gui/wxpython/datacatalog/tree.py:936
 #, fuzzy
-msgid "Validating model..."
-msgstr "Miền hợp lệ"
+msgid "&Display layer"
+msgstr "Trình bày bản đồ"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, fuzzy, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr ""
-"Câu lệnh SQL không hợp lệ.\n"
-"\n"
-"%s"
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "Tạo tập bản đồ"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr ""
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "Trình tính toán Bản đồ %s của GRASS"
+
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "Trình tính toán Bản đồ %s của GRASS"
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
 #, python-format
-msgid "Model exported to <%s>"
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, fuzzy, python-format
+msgid "Current mapset is <%s>."
+msgstr "Thay đổi bộ bản đồ hiện tại."
+
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "Lệnh"
+msgid "Data catalog"
+msgstr "Mặt cắt"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "Thêm lớp lệnh"
+msgid "Reload GRASS locations"
+msgstr "Tên cho bản đồ GRASS"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
-msgid "wxGUI Graphical Modeler"
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:878
-#, fuzzy, python-format
-msgid ""
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+#, fuzzy
+msgid "Click to allow editing other mapsets"
+msgstr "Nhắp chuột để chỉnh sửa các thiết lập lớp"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+msgid "Search:"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "Bộ công cụ để dọn tôpô cho bản đồ véc tơ."
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "Bạn có muốn lưu các thay đổi trong không gian làm việc?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "Lưu các thay đổi"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "Không thể tạo mặt cắt của bản đồ raster."
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "Không thể tạo bản đồ véc tơ <%s>."
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "Vẽ"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "Tạo bảng màu mới cho bản đồ raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "Tạo bản đồ véc tơ mới"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "Bản đồ raster đã được mã hóa lại:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "Chọn bản đồ véc tơ"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "Bản đồ raster đã được mã hóa lại:"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "Tính chỉ mục hình dạng trên một bản đồ raster"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr ""
+"Bản đồ véc tơ <%s> đã có trong tập bản đồ hiện tại. Bạn có muốn ghi đè lên "
+"không?"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "Số hóa đối tượng mới"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "Số hóa đường mới"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "Số hóa điểm mới"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "Vá các bản đồ raster"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "Lỗi trình số hóa vec-tơ"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "Chọn bản đồ raster:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "Giá trị ô"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "Rộng"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "bản đồ raster"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+#, fuzzy
+msgid "GRASS GIS Graphical Modeler"
+msgstr "Trợ giúp GRASS GIS"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+#, fuzzy
+msgid "Model"
+msgstr "Chế độ"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "Liệt kê các bảng"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "Đầu ra của lệnh"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+msgid "Redrawing model..."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+#, fuzzy
+msgid "Do you want to save changes in the model?"
+msgstr "Bạn có muốn lưu các thay đổi trong không gian làm việc?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+#, fuzzy
+msgid "Do you want to store current model settings to model file?"
+msgstr "Bạn có muốn lưu thiết lập hiện tại vào tệp không gian làm việc?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "Xoá phần đã được lọc"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, fuzzy, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr ""
+"Bạn có muốn đóng màn hình %d?\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+#, fuzzy
+msgid "Delete intermediate data?"
+msgstr "Xoá phần đã được lọc"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr ""
+"Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
+"dùng."
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+#, fuzzy
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr ""
+"Không gian làm việc hiện tại chưa trống. Bạn có muốn lưu thiết lập hiện tại "
+"vào tệp không gian làm việc?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "Tạo tập bản đồ mới"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "Chọn tập tin"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr ""
+"Tập tin không gian làm việc <%s> đã tồn tại. Bạn có muốn ghi đè tập tin này "
+"không?"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+#, fuzzy
+msgid "Save model"
+msgstr "Chế độ phạm trù"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, fuzzy, python-format
+msgid "File <%s> saved"
+msgstr "Tập tin POINTS <%s> đã được lưu"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "Chọn tập tin để lưu không gian làm việc hiện tại"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+#, fuzzy
+msgid "Validating model..."
+msgstr "Miền hợp lệ"
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, fuzzy, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr ""
+"Câu lệnh SQL không hợp lệ.\n"
+"\n"
+"%s"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, python-format
+msgid "Model exported to <%s>"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "Lệnh"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "Thêm lớp lệnh"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:876
+msgid "wxGUI Graphical Modeler"
+msgstr ""
+
+#: ../gui/wxpython/gmodeler/frame.py:995
+#, fuzzy, python-format
+msgid ""
 "Reading model file <%s> failed.\n"
 "Invalid file, unable to parse XML document.\n"
 "\n"
@@ -2789,426 +3180,424 @@ msgstr ""
 "Thất bại khi đọc tập tin không gian làm việc <%s>. Tập tin không hợp lệ, "
 "không thể phân giải tài liệu XML."
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 #, fuzzy
 msgid "Please wait, loading model..."
 msgstr "Xin hãy chờ, đang nạp dữ liệu..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 #, fuzzy
 msgid "Writing current settings to model file failed."
 msgstr ""
 "Thất bại khi đang ghi thiết lập hiện tại vào tập tin không gian làm việc "
 "(%s)."
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, fuzzy, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "Không thể mở tập tin <%s> để đọc."
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "Loại bỏ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "Liệt kê các bảng"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "Bảng"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 #, fuzzy
 msgid "Set label"
 msgstr "Thêm nhãn"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "Đặt phông"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "Điểm khống chế"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "Thiết lập các điểm khống chế (GCP)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "Các thuộc tính"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 #, fuzzy
 msgid "Label:"
 msgstr "Lớp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 #, fuzzy
 msgid "List of variables - right-click to delete"
 msgstr "Danh sách các phạm trù - bấm chuột phải để xóa"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data type"
 msgstr "Kiểu dữ liệu"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "Thiết lập giá trị"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "Mô tả"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "Thêm đỉnh mới"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 #, fuzzy
 msgid "integer"
 msgstr "Con trỏ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "Vùng"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "Tập bản đồ"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 msgid "Add new variable to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 #, fuzzy
 msgid "List of items - right-click to delete"
 msgstr "Danh sách các phạm trù - bấm chuột phải để xóa"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "Lớp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 #, fuzzy
 msgid "In loop"
 msgstr "Thêm nhóm lớp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "Lệnh"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "Mô tả lớp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "&Chạy"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 #, fuzzy
 msgid "Run python script"
 msgstr "Mô tả lớp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Tập tin không gian làm việc <%s> đã tồn tại. Bạn có muốn ghi đè tập tin này "
 "không?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "Lưu tập tin thành..."
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 #, fuzzy
 msgid "Disabled:"
 msgstr "Liệt kê các bảng"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 #, fuzzy
 msgid "Valid:"
 msgstr "Miền hợp lệ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "Giá trị không hợp lệ: %s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 #, fuzzy
 msgid "Shape size"
 msgstr "Chỉ mục hình dạng"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "Rộng"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "Cao:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "CSDL"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "Loại"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "Raster"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 #, fuzzy
 msgid "3D raster:"
 msgstr "raster 3D"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 #, fuzzy
 msgid "Vector:"
 msgstr "Vec-tơ"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "Bảng"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "Lệnh"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "Đặc tả dữ liệu"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "Lệnh"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "Cho phép các tập tin đầu ra ghi đè lên các tập tin đã có"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "Mô tả"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 #, fuzzy
 msgid "Author(s):"
 msgstr "Tác giả"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "Thêm đỉnh mới"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3216,101 +3605,101 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 msgid "Variables below not defined:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 #, fuzzy
 msgid "Raster maps"
 msgstr "Bản đồ raster"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 #, fuzzy
 msgid "3D raster maps"
 msgstr "Bản đồ raster 3D"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 #, fuzzy
 msgid "Vector maps"
 msgstr "Các điểm véc tơ"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "không biết"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 msgid "<not defined>"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "điều kiện"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 msgid "Condition: not defined"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "Các tham số địa hình"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "Xoá phần đã được lọc"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 #, fuzzy
 msgid "Data properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 #, fuzzy
 msgid "Type of element:"
 msgstr "Hiển thị chú giải"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3318,261 +3707,261 @@ msgid ""
 "Unable to add new action to the model."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 msgid "From"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "Thành"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "CSDL"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "Lệnh"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "Tùy chọn"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "điều kiện"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 #, fuzzy
 msgid "List of items in loop"
 msgstr "Danh sách các đối tượng bị trùng"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, fuzzy, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "Không thể tạo bảng mới. Bảng <%s> đã có trong CSDL."
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 #, fuzzy
 msgid "Do you want to delete all variables from the model?"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 #, fuzzy
 msgid "Delete variables"
 msgstr "Xóa tất cả"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 #, fuzzy
 msgid "No"
 msgstr "B"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "Không thể mở tập tin <%s> để đọc."
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "Độ phân giải không thể là 0"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "Trợ giúp GRASS GIS"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 msgid "Generating PostScript..."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "Xem trước khi in"
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3580,1318 +3969,1308 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "Xem trước khi in"
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "Không có chế độ xem 3D"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "Lưu tập tin thành..."
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "Không thể đọc tập tin EPSG: '%s'"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 #, fuzzy
 msgid "Scalebar is not appropriate for this projection"
 msgstr " Nhập các tham số cho phép chiếu %s "
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 #, fuzzy
 msgid "labels: "
 msgstr "Thêm nhãn"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "Đặt lại"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "Tập tin"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr ""
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "Không thể đóng bản đồ raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 msgid "X:"
 msgstr "X:"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 msgid "Y:"
 msgstr "Y:"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "Vị trí:"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "Chuyển đổi tọa độ"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 #, fuzzy
 msgid "Font size:"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "Chọn thư mục:"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 #, fuzzy
 msgid "Close dialog and apply changes"
 msgstr "Đóng hộp thoại và bỏ qua các thay đổi"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 #, fuzzy
 msgid "Format"
 msgstr "Định dạng:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "Rộng"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 msgid "Height"
 msgstr "Cao"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr "Cao"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "Đỉnh"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "Đáy"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 msgid "Literal is not allowed!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "Điểm"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Landscape"
 msgstr "Phân tích cảnh quan"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 #, fuzzy
 msgid "custom"
 msgstr "Trị nhỏ nhất tùy chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "Thiết lập raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "Tỉ lệ bản đồ"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "Phóng đến (các) bản đồ đã chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "Phóng đến vùng đã lưu"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 msgid "fit frame to match current computational region"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 #, fuzzy
 msgid "Map:"
 msgstr "Tập bản đồ"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "Vùng"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "Tỉ lệ bản đồ"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 #, fuzzy
 msgid "Center:"
 msgstr "Vẽ"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 msgid "E:"
 msgstr "Đ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 msgid "N:"
 msgstr "B:"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "Kiểu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 msgid "Map max resolution (dpi):"
 msgstr ""
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "Bậc 1"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 #, fuzzy
 msgid "border width (pts):"
 msgstr "Độ dày đường (theo điểm ảnh):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 msgid "Invalid scale or map center!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "Bản đồ raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "bản đồ raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "bản đồ raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "Thêm nhóm lớp"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "Điểm"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "đường rhumb"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "Lưu thành..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "Kiểu dữ liệu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "Thêm"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "Làm sạch bản đồ véc tơ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 msgid "The topmost vector map overlaps the others"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 msgid "Down"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "Xóa"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "Các thuộc tính"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "Thiết lập raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "Thiết lập véc tơ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "Các thuộc tính"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "Chỉ số nhận diện đối tượng:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "Thêm trọng tâm"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "Chỉnh sửa đường/ranh giới"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "Trong tệp DB không có định nghĩa kết nối CSDL"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "Xóa lớp"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "Mặt nạ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 #, fuzzy
 msgid "Use current mask"
 msgstr "Thu nhỏ tất cả trừ phần hiện tại"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "Màu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "đường rhumb"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 #, fuzzy
 msgid "Width (pts):"
 msgstr "Rộng"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "Tập tin"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr "Chọn thư mục:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "Quy tắc màu"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "Kiểu đường"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "ký hiệu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "Tập tin WKT:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "Duyệt"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "Chọn tập tin"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "Cỡ"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "Cỡ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 #, fuzzy
 msgid "size from map table column:"
 msgstr "Bỏ tất cả cột"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "Thay đổi tỉ lệ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "Bỏ tất cả cột"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "Độ dày đường (theo điểm ảnh):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 #, fuzzy
 msgid "multiply width by category value"
 msgstr "Chỉnh sửa tương tác các giá trị phạm trù"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "Kiểu đường"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "Kiểu thô:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "Chọn tập tin"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "hình sao"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "Chọn tập tin đầu vào"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 #, fuzzy
 msgid "pattern line width (pts):"
 msgstr "Độ dày đường (theo điểm ảnh):"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 #, fuzzy
 msgid "pattern scale factor:"
 msgstr "Trình tính toán raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "Các chuỗi raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "Hiển thị chú giải"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "Tên nguồn"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "Vector thành raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "Chọn bản đồ raster:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "Hiển thị chú giải"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 msgid "continuous color gradient legend (floating point map)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "Thiết lập nâng cao"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "Quản lý"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "Các đường véc tơ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 #, fuzzy
 msgid "Show vector legend"
 msgstr "Hiện các đường véc tơ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "Chồng các bản đồ véc tơ"
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 msgid "Choose vector maps and their order in legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 #, fuzzy
 msgid "Vector map"
 msgstr "Bản đồ véc tơ mới"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 #, fuzzy
 msgid "Edit label"
 msgstr "Thêm nhãn"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 msgid "Size and position"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 msgid "Position"
 msgstr "Vị trí"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "cột"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "cột"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "Thiết lập phông"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "raster"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 #, fuzzy
 msgid "use border color:"
 msgstr "Dùng | Tọa độ X"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "Màu nền:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-#, fuzzy
-msgid "Unsupported units"
-msgstr "Kiểu lớp '%s' không được hỗ trợ"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "dài"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 msgid "Scalebar length is given in map units"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr "Mặc định"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "Kiểu"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "Loại"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "Chú giải"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 msgid "transparent text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 msgid "Length of scale bar is not defined"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 #, fuzzy
 msgid "Text"
 msgstr "Kiểm tra"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "Nhập văn bản:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "Thiết lập chữ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 msgid "text background"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "Đánh dấu khi chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 #, fuzzy
 msgid "text border"
 msgstr "Bậc 1"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 msgid "vertical (pts):"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "Trái: điểm mới"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "Thiết lập chữ"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 msgid "rotate text (counterclockwise)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "Ảnh"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 msgid "Note: only EPS format supported"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "Thước tỉ lệ và mũi tên chỉ hướng Bắc"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 #, fuzzy
 msgid ""
 "PIL\n"
 "missing"
 msgstr "Độ phát ra"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "Không thể đọc tập tin EPSG: '%s'"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 #, fuzzy
 msgid "North Arrow"
 msgstr "Thước tỉ lệ và mũi tên chỉ hướng Bắc"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "Hiện các thiết lập"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "ký hiệu:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "Chọn theo khung"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr "Màu đường"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "trong suốt"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "Thước tỉ lệ và mũi tên chỉ hướng Bắc"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "Cỡ:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "Thiết lập về ký hiệu"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "Thay đổi các thiết lập"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "Thay đổi các thiết lập"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 #, fuzzy
 msgid "Line width in points"
 msgstr "Độ dày đường (theo điểm ảnh):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "nhãn vec-tơ"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 msgid "Vector label files created beforehand by v.label module"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 #, fuzzy
 msgid "Generate PostScript output"
 msgstr "Tiện ích xuất ra bản đồ PostScript để in."
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 #, fuzzy
 msgid "Generate PDF output"
 msgstr "Tạo điểm"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 msgid "Full extent"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 #, fuzzy
 msgid "Zoom to full extent"
 msgstr "Phóng đến vùng mặc định"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "Xóa vị trí đã chọn"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "Hiển thị lưới"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "Thêm thành phần bản đồ"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "Chú giải"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "Chọn các đoạn thừa"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "Thêm lớp chồng"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "Thêm nhãn"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "Bộ Quản Lý Bảng Thuộc Tính của GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
@@ -4900,143 +5279,137 @@ msgstr ""
 "Kết nối CSDL cho bản đồ véc tơ <%s> không được định nghĩa trong tệp DB. Bạn "
 "có thể định nghĩa kết nối mới trong thẻ 'Quản lý lớp'."
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "Xin hãy chờ, đang nạp dữ liệu về thuộc tính..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "Duyệt dữ liệu"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr "Quản lý bảng"
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr "Quản lý lớp"
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr "Đóng Trình Quản lý Bảng Thuộc tính"
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "Xóa tập bản đồ đã chọn"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 #, fuzzy
 msgid "Reload all attribute data (drop current selection)"
 msgstr "Nạp lại dữ liệu thuộc tính (chỉ của lớp được chọn)"
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr "Số bản ghi đã nạp: %d"
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr "Kết nối CSDL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "Truy vấn"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr "Đặt câu lệnh SQL về mặc định"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "Đóng Trình Quản lý Bảng Thuộc tính"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr "Đóng hộp thoại"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 msgid "Columns"
 msgstr "cột"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr "giá trị"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr "Lấy tất cả các giá trị"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr "Lấy mẫu"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "Xuất ra MPEG-1"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr "Đóng hộp thoại khi áp dụng"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, fuzzy, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr "Trình xây dựng SQL của GRASS (%(type)s): bản đồ véc-tơ <%(map)s>"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, python-format
 msgid "Example: %s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr "Kiểm chứng"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr "Kiển chứng câu lệnh SQL"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr "Câu lệnh SQL không được kiểm chứng"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr "Câu lệnh SQL không hợp lệ"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -5047,42 +5420,42 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr "Câu lệnh SQL hợp lệ"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 msgid "Column to set (SET clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "Hướng"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "Câu lệnh SQL không hợp lệ"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "Câu lệnh SQL hợp lệ"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 msgid "Loading data..."
 msgstr "Đang nạp dữ liệu..."
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
@@ -5091,36 +5464,36 @@ msgstr ""
 "Không tìm thấy bảng thuộc tính <%s>. Để tạo bảo, chuyển qua thẻ 'Quản lý "
 "lớp'."
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr "Không thấy cột <%(column)s> trong bảng <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr "Chỉ có thể trình bày 256 cột."
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "Không thấy cột <%(column)s> trong bảng <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 #, fuzzy
 msgid "Viewing limit: 100000 records."
 msgstr "Giới hạn 10000 bản ghi."
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr "Giá trị không biết"
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 "Không thể giải mã giá trị. Thiết lập mã hóa theo tùy thích của giao diện đồ "
 "họa (‘Các thuộc tính’)"
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5133,201 +5506,201 @@ msgstr ""
 "\n"
 "Chi tiết: %(detail)s"
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "Trình toán toán bản đồ"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "Thống kê voxel"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "Thêm cột"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr "dài"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 msgid "Number of features for each category"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 #, fuzzy
 msgid "Line sinuousity"
 msgstr "Kiểu đường"
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "Độ rộng đường"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "Thêm cột"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr "Không thể thêm cột vào bảng. Chưa định nghĩa tên cột."
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr "Cột <%(column)s> đã có trong bảng <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr "Dữ liệu thuộc tính -chuột phải để biên tập/quản lý bản ghi"
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "Bảng"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr "Câu truy vấn SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr "Đơn giản"
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr "Áp dụng câu lệnh SELECT và nạp lại các bản ghi dữ liệu"
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 #, fuzzy
 msgid "Builder"
 msgstr "Trình xây dựng câu lệnh SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr "Trình xây dựng câu lệnh SQL"
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "Biên tập bản ghi đã chọn"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr "Chèn bản ghi mới"
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr "Xóa (các) bản ghi đã chọn"
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr "Xóa tất cả bản ghi "
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr "Chọn hết"
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr "Hủy chọn tất cả"
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "Làm nổi bật các đối tượng đã chọn"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr "Làm nổi bật các đối tượng đã chọn rồi phóng đến chúng"
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr "Trích ra các đối tượng đã chọn"
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr "Xóa các đối tượng đã chọn"
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr "Cập nhật bản ghi hiện có."
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Giá trị '%(value)s' cần phải được nhập vào dưới dạng %(type)s."
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "Không thể cập nhật bản ghi hiện có."
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr "Bản ghi với số hiệu phạm trù %d đã có trong bảng."
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr "Số hiệu phạm trù (cột %s) bị thiếu."
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "Không thể chèn bản ghi mới."
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
@@ -5336,11 +5709,11 @@ msgstr ""
 "Các bản ghi dữ liệu đã được chọn (%d) sẽ bị xóa bỏ hoàn toàn khỏi bảng. Bạn "
 "có muốn xóa chúng không?"
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr "Xóa bản ghi"
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
@@ -5349,15 +5722,15 @@ msgstr ""
 "Tất cả các bản ghi dữ liệu (%d) sẽ bị xóa bỏ hoàn toàn khỏi bảng. Bạn có "
 "muốn xóa chúng không?"
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr "Không có gì để trích ra."
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr "Không có gì để xóa."
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5368,7 +5741,7 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5381,32 +5754,32 @@ msgstr ""
 "
\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr "Bảng <%s> - bấm chuột phải để xóa (các) cột"
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "cột"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "dài"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "Đổi tên cột"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr "Không thể đổi tên cột. Tên cột không được định nghĩa."
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
@@ -5415,7 +5788,7 @@ msgstr ""
 "Không thể đổi tên cột <%(column)s> thành <%(columnTo)s>. Cột này đã có trong "
 "bảng <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
@@ -5423,15 +5796,15 @@ msgid ""
 msgstr ""
 "Không thể đổi tên cột. Cột <%(column)s> không có trong bảng <%(table)s>."
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr "Bỏ cột đã chọn"
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr "Bỏ tất cả cột"
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, fuzzy, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
@@ -5440,11 +5813,11 @@ msgstr ""
 "Cột được chọn '%s' sẽ bị xóa bỏ HOÀN TOÀN khỏi bảng. Bạn có muốn xóa nó "
 "không?"
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 msgid "Drop column(s)"
 msgstr "Bỏ (các) cột"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5455,104 +5828,104 @@ msgstr ""
 "%s\n"
 "sẽ bị loại bỏ HOÀN TOÀN khỏi bảng. Bạn có muốn bỏ các cột không?"
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr "Danh sách lớp"
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr "Bỏ cả bảng thuộc tính liên kết (%s)"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "Tên cột"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr "Độ dài dữ liệu"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr "Trình điều khiển"
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr "CSDL"
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr "Khóa"
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr "Mô tả lớp"
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "Cột khóa"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr "Chèn bản ghi cho mỗi phạm trù vào bảng"
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr "Bạn cần thêm các phạm trù bằng mô-đun v.category"
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr "Mô tả bảng"
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "Tên bảng"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr "&Tạo bảng"
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr "Thê&m lớp"
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr "Thiết lập làm &mặc định"
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "Lớp cần xóa"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr "Sửa lớp"
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr "&Sửa lớp"
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
@@ -5560,16 +5933,16 @@ msgstr ""
 "Không thể lấy danh sách bảng.\n"
 "Xin hãy dùng db.connect để đặt các tham số cho CSDL."
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr "Không thể tạo bảng mới. Thiếu tên bảng hoặc tên cột khóa."
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr "Không thể tạo bảng mới. Bảng <%s> đã có trong CSDL."
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
@@ -5577,42 +5950,42 @@ msgid ""
 msgstr ""
 "Không thể thêm lớp mới vào bản đồ véc tơ <%(vector)s>. Lớp %(layer)d đã có."
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "Thống kê voxel"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "Chép chuỗi lệnh hiện tại vào bộ nhớ"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "Không thể tạo vị trí mới"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "Thống kê voxel"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr ""
@@ -5620,11 +5993,11 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr "Bộ Quản Lý Bảng Thuộc Tính của GRASS GIS"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5633,201 +6006,202 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "Tạo bảng"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr "Đóng hộp thoại khi gửi đi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr "Không thấy thuộc tính nào"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "Cập nhật thuộc tính"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "Thay đổi thuộc tính"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "Trình bày các thuộc tính"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr "&Nạp lại"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr "&Gửi đi"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, fuzzy, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr "Giá trị '%(value)s' cần phải được nhập vào dưới dạng %(type)s."
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr "Không biết"
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "Không thể nạp sắc thái biểu tượng..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "Xem 2D"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "Xem 3D"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "Chọn tập tin không gian làm việc"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "Không tìm thấy tập tin."
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, python-format
 msgid "Maximum number of animations is %s."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "Không thể đọc tập tin EPSG: '%s'"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "Không có gì để trích ra."
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "Nắn chỉnh ảnh hoặc raster"
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "Nắn chỉnh ảnh hoặc raster"
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "Đang nạp dữ liệu..."
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr ""
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr ""
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, fuzzy, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5836,635 +6210,635 @@ msgstr ""
 "Thất bại khi đọc tập tin không gian làm việc <%s>. Tập tin không hợp lệ, "
 "không thể phân giải tài liệu XML."
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "Các thiết lập Nviz được lưu vào tập tin <%s>."
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "Tạo từ CSDL"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
 "avoid confusion."
 msgstr ""
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr ""
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "Đơn giản"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "Độ phân giải"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 #, fuzzy
 msgid "Temporal mode"
 msgstr "Chế độ phạm trù"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "Thiết lập lựa chọn"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 msgid "Animation speed is too high."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "Nâng cao"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "Liệt kê các bảng"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 #, fuzzy
 msgid "top right"
 msgstr "Bản quyền"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "theo màu"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "theo màu"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 #, fuzzy
 msgid "Select 2D or 3D view"
 msgstr "Chọn tập tin WKT"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "Kiểu đường"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "mịn:"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "Thiết lập lựa chọn"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "Các thuộc tính Nviz"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 #, fuzzy
 msgid "Workspace file:"
 msgstr "Không gian làm việc"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "Không thấy tham số: %s"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "Lưu vùng:"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "Nạp vùng:"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "giá trị"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "Tạo từ CSDL"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "Chọn phần mở rộng của tệp:"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 #, fuzzy
 msgid "Edit"
 msgstr "Biên soạn GCP"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, python-format
 msgid "Maximum number of animations is %d."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "Mô tả"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 #, fuzzy
 msgid "Export"
 msgstr "Xuất ra MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "Đánh dấu thời gian"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "Thêm nhóm lớp"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "Thêm lớp văn bản"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "Thiết lập phông"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "Lấy mẫu các tuyến"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "Chọn tập tin"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "T"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "Xuất ra MPEG-1"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 msgid "File prefix:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "Định dạng:"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 msgid "Directory:"
 msgstr "Thư mục:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "Tập tin DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "Tập tin DXF:"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
 "it's in the PATH variable."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "Tập tin WKT:"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "Thiết lập lựa chọn"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "Không tìm thấy tập tin."
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "Thiếu tập tin COPYING"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 #, fuzzy
 msgid "Time stamp"
 msgstr "Đánh dấu thời gian"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "Tạo từ CSDL"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "Truy vấn các bản đồ raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "Làm sạch bản đồ véc tơ"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "Truy vấn các bản đồ raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "Nhập dữ liệu véc-tơ"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "Kiểu dữ liệu"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "Chọn bản đồ raster:"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "Bộ công cụ để dọn tôpô cho bản đồ véc tơ."
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "Màu nền:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "Màu nền:"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "Màu nền:"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 #, fuzzy
 msgid "Time"
 msgstr "Đánh dấu thời gian"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "Tọa độ"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "Giá trị không hợp lệ: %s"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "Tạo tập bản đồ"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 msgid "Play forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 #, fuzzy
 msgid "Stop"
 msgstr "đỉnh"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr ""
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "Thêm lớp bản đồ đổ bóng"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "Phân tích mạng"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6472,50 +6846,50 @@ msgid ""
 "Showed result may not correspond original analysis result."
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr ""
 "Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
 "dùng."
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "Ghi đè?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "Nắn chỉnh địa lý bản đồ véc-tơ <%s> thất bại"
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 msgid "Vector map with analysis result does not exist."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 msgid "Please choose at least two points."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, fuzzy, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6523,469 +6897,470 @@ msgid ""
 "Topology column may not correspond to changed situation."
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "Không thể đặt "
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, fuzzy, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
 "Do you really want to activate snapping and overwrite it? "
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "Ghi đè?"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "Các Lớp Bản Đồ"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "Quản lý lớp"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "Quản lý hoặc báo cáo các phạm trù"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "Chọn %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "Loại bỏ bảng thuộc tính hiện có của một bản đồ véc-tơ."
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "Kiểu dữ liệu"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "Tạo hoặc dựng lại tôpô"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "Trái: điểm mới"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "Cột khóa:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "Đường ngắn nhất"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, fuzzy, python-format
 msgid "Traveling salesman %s"
 msgstr "Phân tích đường đi của người bán hàng"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "Kiểu nguồn"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "Hiện các điểm"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, fuzzy, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "Tạo cây Steiner cho mạng lưới và các đầu cuối cho trước"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, python-format
 msgid "Shortest distance via the network %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, python-format
 msgid "Cost isolines %s"
 msgstr ""
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "Phân Tích Mặt Cắt"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "Trình bày bản đồ"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "Trình bày bản đồ"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "Phân tích mạng"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "Các thiết lập trục"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "Điểm"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 msgid "Maximum distance of point to the network:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "Các đường chỉ dòng chảy"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "Đầu ra"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "Các thông số"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "Thêm bản đồ đã tạo vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "Liệt kê các bảng"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "Liệt kê các bảng"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "Đang nạp dữ liệu..."
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "Đang nạp dữ liệu..."
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "Phân tích"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "Các thiết lập"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 msgid "Computing nodes..."
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "Thiết lập raster"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "Kiểu đường"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "Các bảng màu"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr "Chuyển đổi tọa độ"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr "Màu đường"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "Quy tắc màu"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "Khử chọn GCP đã chọn"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "Độ rộng đường"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "Ngưỡng bắt dính"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 msgid "Maximum number of results in history:"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 msgid "Save analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "Điểm khống chế"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "Xóa vị trí đã chọn"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "Phân tích địa hình"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 #, fuzzy
 msgid "Show analysis result"
 msgstr "Hiện các đường"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 msgid "Save temporary result"
 msgstr ""
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "Thiết lập véc tơ"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 #, fuzzy
 msgid "Show manual"
 msgstr "Bản đồ bóng"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "Phân tích đường đi của người bán hàng"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "Vẽ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "Bật/tắt chế độ vẽ tự động"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "Hiển thị phạm vi tính toán"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "Hiển thị phạm vi tính toán"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
@@ -6995,16 +7370,16 @@ msgstr ""
 "được vẽ bằng một khung màu xanh ở trong vùng tính toán, vùng tính toán ở "
 "trong vùng trình bày thì ở dạng khung màu đỏ)."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "Chế độ trình bày"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 #, fuzzy
 msgid ""
 "Align region extent based on display size from center point. Default value "
@@ -7014,17 +7389,17 @@ msgstr ""
 "mặc định cho việc trình bày bản đồ mới có thể được thiết lập trong hộp thoại "
 "'Các thiết lập GUI của người dùng'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 #, fuzzy
 msgid "Display resolution"
 msgstr "Hiển thị vùng"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "Giới hạn độ phân giải trình bày theo các thiết lập tính toán"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
@@ -7033,90 +7408,90 @@ msgstr ""
 "mặc định cho việc trình bày bản đồ mới có thể được thiết lập trong hộp thoại "
 "'Các thiết lập GUI của người dùng'."
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "Tỉ lệ bản đồ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 msgid "Error in projection (check the settings)"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 #, fuzzy
 msgid "Projection"
 msgstr "Phép chiếu:"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "Chọn phép chiếu"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "MẶT NẠ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "Dạng hình học hiển thị"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "Tọa độ"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "Phạm vi"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 #, fuzzy
 msgid "Computational region"
 msgstr "Phóng đến vùng tính toán (thiết lập bằng g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - Trình bày bản đồ"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "Vào phiên làm việc của GRASS"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "Màn Hình Bản Đồ GRASS GIS:"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
@@ -7127,12 +7502,12 @@ msgstr ""
 "\n"
 "Chi tiết: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "Thanh công cụ của trình số hoá bản đồ"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7147,375 +7522,402 @@ msgstr ""
 "\n"
 "Chi tiết: %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 msgid "Starting 3D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "Xin hãy chờ, đang nạp dữ liệu..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "Xin hãy chờ, đang nạp dữ liệu..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 msgid "Switching back to 2D view mode..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "Số hóa"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "Không có bản đồ vec-tơ nào được chọn để biên tập."
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "Thêm lớp văn bản"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "Phóng đến vùng tính toán (thiết lập bằng g.region)"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "Thanh công cụ của trình số hoá bản đồ"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "Tỉ lệ bản đồ"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "Kiểu lớp '%s' không được hỗ trợ"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "Không thể đọc các mã EPSG: %s"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "Khởi động trình bày mới"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "Không thể đọc tập tin EPSG: '%s'"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "Khởi động trình bày mới"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "Chọn các đối tượng vec-tơ"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "Nắn chỉnh địa lý các bản đồ raster và véc tơ"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "Hiện/giấu thước tỉ lệ và mũi tên hướng Bắc"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 msgid "Show/hide legend"
 msgstr "Hiện/giấu chú giải"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "Hiện/giấu thước tỉ lệ và mũi tên hướng Bắc"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "Phân tích bản đồ"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "Đo khoảng cách"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "Đo khoảng cách"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "Mặt cắt bản đồ bề mặt"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "Tạo biểu đồ tần số của ảnh hoặc tập tin raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "Tạo biểu đồ tần số của ảnh hoặc tập tin raster"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "Phân tích mạng"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "Kéo chuột để di chuyển"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "Kéo hoặc bấm chuột để phóng"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "Kéo hoặc bấm chuột để hủy lệnh phóng"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 msgid "3D view mode not available"
 msgstr "Không có chế độ xem 3D"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, python-format
 msgid "Reason: %s"
 msgstr "Lý do: %s"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 msgid "Vector digitizer not available"
 msgstr "Không có trình số hoá véc-tơ"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
 "In the meantime you can use \"v.digit\" from the Develop Vector menu."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "Lỗi trình số hóa vec-tơ"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "Đổi tên vị trí"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "Đổi tên vị trí"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 msgid "Available sampling area configuration files"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 #, fuzzy
 msgid "Create"
 msgstr "Tạo RGB"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 #, fuzzy
 msgid "Create a new configuration file"
 msgstr "Tạo vị trí mới?"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "Đổi tên"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 #, fuzzy
 msgid "Rename a configuration file"
 msgstr "Đổi tên vị trí"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 #, fuzzy
 msgid "View/Edit"
 msgstr "Biên soạn GCP"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "Đổi tên vị trí"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "Bạn có muốn tạo vị trí GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "Tạo vị trí mới?"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 msgid "You have to select a configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
 "\"configuration file"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "Đổi tên vị trí"
@@ -7525,330 +7927,330 @@ msgstr "Đổi tên vị trí"
 msgid "Create new configuration file for r.li modules"
 msgstr "Tạo bảng màu mới bằng cách dùng quy tắc màu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "Bạn có muốn tạo vị trí GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "Tạo vị trí mới?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "Hướng dẫn tạo Vị Trí bị hủy. Vị trí không được tạo."
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "Chọn kiểu bản đồ và vị trí/tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "Tên cho %s mới cần tạo"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "Bản đồ raster để mã hóa lại:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "Bản đồ vec-tơ cần phân loại lại:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "Bản đồ vec-tơ cần phân loại lại:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "Hiện các thiết lập"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 msgid "Draw the sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "Các tham số địa hình"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 msgid "Column of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "Vùng"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "Lấy mẫu các tuyến"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "Cửa sổ di chuyển"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "Nắn chỉnh địa lý các bản đồ raster và véc tơ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "Chọn tập tin"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 msgid "Use mouse to draw sampling area"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 msgid "This option is not supported yet"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "Bạn có muốn tạo vị trí GRASS <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "Bạn có muốn lưu các thay đổi trong bản đồ vec-tơ <%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "Chọn màu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 #, fuzzy
 msgid "Analysing all vector features..."
 msgstr "Chọn các đối tượng vec-tơ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "Trình bày bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 #, fuzzy
 msgid "Draw moving windows region"
 msgstr "Cửa sổ di chuyển"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 msgid "Select sample units from keyboard"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "Chọn bản đồ véc tơ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "Rộng"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 msgid "What radius size (in meters)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 msgid "Height size (in cells)?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "Bản đồ raster đã được mã hóa lại:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 #, fuzzy
 msgid "Systematic contiguos"
 msgstr "các biểu đồ chủ đề"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 msgid "Centered over sites"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 msgid "What number of Sampling Units to use?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 msgid "Insert number of column strates"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 msgid "Insert distance between units"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "Lấy mẫu các tuyến"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 #, fuzzy
 msgid "Set moving windows"
 msgstr "Cửa sổ di chuyển"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "Chọn màu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7856,194 +8258,207 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "Chọn màu"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "Tóm tắt"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 msgid "Configuration file name:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "Bản đồ raster:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "Các đường véc tơ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "Vùng"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "Kiểu lớp bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 #, fuzzy
 msgid "Region keyboard values:"
 msgstr "Ranh giới vùng"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "Hiển thị chú giải"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "Rộng"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 msgid "Method of distribution:"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "Khoảng cách tới các đối tượng"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "Cột khóa:"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "Đơn giản"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "Bộ Quản lý Lớp của GRASS GIS"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 #, fuzzy
 msgid "Workspace Toolbar"
 msgstr "Không gian làm việc"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 #, fuzzy
 msgid "Data Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "Thanh công cụ của trình số hoá bản đồ"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "Thanh công cụ Nviz"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/lmgr/frame.py:293
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
 #, fuzzy
-msgid "Map layers"
-msgstr "Các Lớp Bản Đồ"
+msgid "Layers"
+msgstr "Lớp"
 
-#: ../gui/wxpython/lmgr/frame.py:304
+#: ../gui/wxpython/lmgr/frame.py:339
 #, fuzzy
-msgid "Command console"
+msgid "Console"
 msgstr "Lệnh đã kết thúc"
 
-#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
 #, fuzzy
-msgid "Search modules"
-msgstr "Chọn vị trí dự án và tập bản đồ"
+msgid "Modules"
+msgstr "Mã"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
+msgstr "Mô tả lớp"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -8051,37 +8466,30 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "Tạo vị trí mới?"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 #, fuzzy
 msgid "Choose model to run"
 msgstr "Chọn phép chiếu"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "Bạn có muốn lưu các thay đổi trong không gian làm việc?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "Bạn có muốn lưu thiết lập hiện tại vào tệp không gian làm việc?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "Đóng trình bày màn hình %d"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, fuzzy, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
@@ -8090,152 +8498,148 @@ msgstr ""
 "Lệnh '%s' chưa được thực thi trong GDĐH. Hãy thử thêm nó vào dưới dạng một "
 "lớp lệnh."
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 msgid "Selected map layer is not vector."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "Tạo tôpô cho bản đồ véc tơ của GRASS."
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "Chọn tập tin đầu vào"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "Cần ít nhất %d GCP. Đã hủy thao tác."
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "Đặt vùng"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "Giá trị tọa độ không hợp lệ. Thao tác bị hủy."
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, fuzzy, python-format
-msgid "Current mapset is <%s>."
-msgstr "Thay đổi bộ bản đồ hiện tại."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "Thay đổi môi trường làm việc"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "Vào phiên làm việc của GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 #, fuzzy
 msgid "unknown version"
 msgstr "Giá trị không biết"
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "Thư viện GIS"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
-msgstr ""
+#: ../gui/wxpython/lmgr/frame.py:1220
+#, fuzzy
+msgid "Build date"
+msgstr "Trình xây dựng câu lệnh SQL"
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
@@ -8243,64 +8647,64 @@ msgstr ""
 "Không gian làm việc hiện tại chưa trống. Bạn có muốn lưu thiết lập hiện tại "
 "vào tệp không gian làm việc?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "Tạo không gian làm việc mới"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "Chọn tập tin không gian làm việc"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "Xin chờ, đang nạp không gian làm việc..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "Chọn tập tin để lưu không gian làm việc hiện tại"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr ""
 "Tập tin không gian làm việc <%s> đã tồn tại. Bạn có muốn ghi đè tập tin này "
 "không?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "Lưu không gian làm việc"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 #, fuzzy
 msgid "Writing current settings to workspace file failed."
 msgstr ""
 "Thất bại khi đang ghi thiết lập hiện tại vào tập tin không gian làm việc "
 "(%s)."
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "Nhập tên cho tập bản đồ mới:"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, fuzzy, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr "Màn Hình Bản Đồ GRASS GIS:"
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8308,37 +8712,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "Không thể chèn bản ghi mới."
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "Không thể chèn bản ghi mới."
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "Kiểu lớp bản đồ '%s' chưa được hỗ trợ"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8348,57 +8752,54 @@ msgstr ""
 "Bạn có muốn loại bỏ (các) lớp bản đồ %s \n"
 "
khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "Thoát giao diện đồ họa GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "Vào phiên làm việc của GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 msgid "Constrain map to region geometry?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "Nhập dữ liệu raster"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 #, fuzzy
 msgid "Link external raster data"
 msgstr "Liên kết dữ liệu raster"
@@ -8415,12 +8816,14 @@ msgid "Set raster output format"
 msgstr "Chọn phông"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "Nhập dữ liệu véc-tơ"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 #, fuzzy
 msgid "Link external vector data"
 msgstr "Liên kết dữ liệu vec-tơ"
@@ -8445,7 +8848,7 @@ msgstr "Tải xuống và nhập dữ liệu từ các máy chủ WMS."
 msgid "Add command layer"
 msgstr "Thêm lớp lệnh"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "Thoát"
@@ -8497,8 +8900,8 @@ msgid "Add rhumbline layer"
 msgstr "Thêm lớp đường rhumb"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 #, fuzzy
 msgid "Add 3D raster map layer"
 msgstr "Thêm lớp bản đồ raster"
@@ -8522,130 +8925,128 @@ msgstr "Miền hợp lệ"
 msgid "Background vector map"
 msgstr "Vá các bản đồ véc tơ"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "Các Lớp Bản Đồ"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "Đổi mức độ đục"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "Các thuộc tính Nviz"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "Phóng đến (các) bản đồ đã chọn"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "Thiết lập vùng tính toán từ (các) bản đồ đã chọn"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 #, fuzzy
 msgid "Export common formats"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 #, fuzzy
 msgid "Export PostGIS"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 #, fuzzy
 msgid "Create pack"
 msgstr "Tạo RGB"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 #, fuzzy
 msgid "Make a copy in the current mapset"
 msgstr ""
 "Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
 "dùng."
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "Đặt bảng màu"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "Hiện dữ liệu thuộc tính"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "Bắt đầu biên tập"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "Ngừng biên tập"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 #, fuzzy
 msgid "Rebuild topology"
 msgstr "Tạo hoặc dựng lại tôpô"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "Phóng đến (các) bản đồ đã chọn (bỏ qua các giá trị RỖNG)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "Mã hoá lại tương tác"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "Biểu đồ tần số"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "Thống kế raster một biến"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "Báo cáo và thống kê"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 #, fuzzy
 msgid "Save web service layer"
 msgstr "Xóa lớp đã chọn"
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr "Không thể tạo mặt cắt của bản đồ raster."
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 msgid "3D raster map"
 msgstr "Bản đồ raster 3D"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "Kiểu lớp bản đồ '%s' chưa được hỗ trợ"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "Nhập tên cho tập bản đồ mới:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, fuzzy, python-format
 msgid "Make a copy of %s <%s>"
 msgstr "Đặt độ mờ <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
@@ -8653,190 +9054,184 @@ msgstr ""
 "Bản đồ véc tơ <%s> đã có trong tập bản đồ hiện tại. Bạn có muốn ghi đè lên "
 "không?"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr "Ghi đè?"
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 #, fuzzy
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr "Không thể hiển thị biểu đồ tần số của bản đồ raster."
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "Đặt độ mờ <%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr "Nhóm lớp:"
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr "Nhắp chuột để chỉnh sửa các thiết lập lớp"
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr "(bấm đúp để thiết lập các tính chất)"
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr "Xin chờ, đang cập nhật dữ liệu..."
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 #, fuzzy
 msgid "Start new map display"
 msgstr "Khởi động trình bày mới"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 #, fuzzy
 msgid "Create new workspace (Ctrl+N)"
 msgstr "Tạo tập tin không gian làm việc mới"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 #, fuzzy
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "Mở tập tin không gian làm việc đang có"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 #, fuzzy
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "Lưu không gian làm việc hiện tại vào tập tin "
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 #, fuzzy
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "Thêm lớp bản đồ raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 #, fuzzy
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "Thêm lớp bản đồ raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 #, fuzzy
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "Thêm các lớp bản đồ gốc raster khác nhau"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 #, fuzzy
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "Thêm lớp bản đồ véc tơ"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 #, fuzzy
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "Thêm các lớp bản đồ gốc véc-tơ khác nhau"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 #, fuzzy
 msgid "Add group"
 msgstr "Thêm nhóm lớp"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 #, fuzzy
 msgid "Add various overlays"
 msgstr "Thêm lớp chồng"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 #, fuzzy
 msgid "Remove selected map layer(s) from layer tree"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 #, fuzzy
 msgid "Import/link raster or vector data"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 #, fuzzy
 msgid "Raster Map Calculator"
 msgstr "Trình tính toán cho bản đồ raster 3 chiều"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 #, fuzzy
 msgid "Graphical Modeler"
 msgstr "Trợ giúp GRASS GIS"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 #, fuzzy
 msgid "Georectifier"
 msgstr "Nắn chỉnh địa lý"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 #, fuzzy
 msgid "Launch user-defined script"
 msgstr "Mô tả lớp"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 #, fuzzy
 msgid "GUI settings"
 msgstr "Thiết lập giao diện đồ họa của người dùng"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 #, fuzzy
 msgid "GRASS manual"
 msgstr "Cây Steiner"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 #, fuzzy
 msgid "Edit selected vector map"
 msgstr "Biên tập bản ghi đã chọn"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 #, fuzzy
 msgid "Show attribute data for selected vector map"
 msgstr "Nạp lại dữ liệu thuộc tính (chỉ của lớp được chọn)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 #, fuzzy
 msgid "Generate command for m.nviz.image"
 msgstr "Sinh biểu đồ tần số của ảnh"
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "Hiện các thiết lập"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "Hiện hộp thoại thiết lập Nviz"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "Không có chế độ xem 3D"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8844,638 +9239,646 @@ msgid ""
 "information on downloading source or binaries."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 #, fuzzy
 msgid "GRASS Profile Analysis Tool"
 msgstr "Phân Tích Mặt Cắt"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "Mặt cắt của"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "Khoảng cách (%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "Khoảng cách dọc theo tuyến"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "Các giá trị raster"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "Bạn phải vẽ một tuyến để tạo mặt cắt trong cửa sổ màn hình bản đồ."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "Không có gì để tạo mặt cắt"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "Ghi đè?"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "Không thể mở tập tin <%s> để đọc."
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "Thống kê dùng cho các ô gộp"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "Các giá trị raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "Không có gì để xóa."
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "Chọn bản đồ raster 1 (bắt buộc):"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr ""
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "Các giá trị raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "Chi tiết:"
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "Báo cáo thống kê dùng cho các lớp bản đồ raster"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
 "\n"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 #, fuzzy
 msgid "Draw/re-draw plot"
 msgstr "Vẽ/vẽ lại mặt cắt"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "Vẽ tuyến trong cửa sổ màn hình bản đồ để tạo mặt cắt"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "Thiết lập lựa chọn"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "Thống kê voxel"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "Lưu trình bày ra tập tin đồ hoạ"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "Thoát công cụ số hóa"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "Trái: điểm mới"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "Thiết lập chữ"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "Thiết lập phông"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 msgid "Under Construction"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 #, fuzzy
 msgid "Histogram of"
 msgstr "Biểu đồ tần số"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 #, fuzzy
 msgid "Cell counts"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "Biểu đồ tần số"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "Tạo biểu đồ tần số của ảnh hoặc tập tin raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "Các giá trị raster"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "Lưu thành..."
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "Báo cáo thống kê dùng cho các lớp bản đồ raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 #, fuzzy
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 #, fuzzy
 msgid "C&opy"
 msgstr "Sao chép"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 #, fuzzy
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "Chép chuỗi lệnh hiện tại vào bộ nhớ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 #, fuzzy
 msgid "Select raster map or imagery group to histogram"
 msgstr "Chọn bản đồ raster 2 (tùy chọn):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "Chọn bản đồ raster:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "Chọn nhóm:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "Biểu đồ tần số"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr ""
 "Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
 "dùng."
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "Tiêu đề mặt cắt:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "Kích cỡ phông tiêu đề (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 #, fuzzy
 msgid "X-axis label:"
 msgstr "Nhãn trục Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Nhãn trục Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "Cỡ phông của nhãn (pts):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "Họ phông:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "Kiểu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "Độ đậm:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "Áp dụng các thay đổi cho phiên làm việc hiện tại và đóng hộp thoại"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "Các thiết lập mặt cắt được lưu vào tập tin '%s'."
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "Thiết lập vùng tính toán từ (các) bản đồ đã chọn"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "Màu đường"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "Các thiết lập chỉ dấu đoạn của tuyến"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "Các điểm véc tơ"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "Các thiết lập trục"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "Trục X"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Trục Y"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "Kiểu:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr ""
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "Trị nhỏ nhất tùy chọn"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "Trị lớn nhất tùy chọn"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "Tỉ lệ log"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "Các thiết lập Lưới và Chú giải"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 msgid "Grid color"
 msgstr "Màu lưới"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "Hiển thị lưới"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "Cỡ phông của chú giải"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "Hiển thị chú giải"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "Các thiết lập mặt cắt được lưu vào tập tin '%s'."
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "Thiết lập raster"
+msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "Cột thuộc tính:"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "Chọn bản đồ raster 3 (tùy chọn):"
+msgstr "Chọn các đối tượng vec-tơ"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "Vẽ"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "Trợ giúp"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "vùng không hợp lệ"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
 msgstr "Chế độ phạm trù"
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, fuzzy, python-format
 msgid "Time [%s]"
 msgstr "Đánh dấu thời gian"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "vùng không hợp lệ"
+msgid "Seed point outside the current region"
+msgstr "Tạo diện tích cho vùng hiện tại"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "Nhập dữ liệu véc-tơ"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "Nhập dữ liệu raster"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 #, fuzzy
 msgid "&File"
 msgstr "Tập tin"
@@ -9484,8 +9887,8 @@ msgstr "Tập tin"
 msgid "Workspace"
 msgstr "Không gian làm việc"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "Mới"
 
@@ -9493,7 +9896,7 @@ msgstr "Mới"
 msgid "Create new workspace"
 msgstr "Tạo không gian làm việc mới"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "Mở"
 
@@ -9501,12 +9904,12 @@ msgstr "Mở"
 msgid "Load workspace from file"
 msgstr "Nạp không gian làm việc từ tập tin"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "Lưu"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "Lưu thành..."
 
@@ -9528,7 +9931,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "Nạp các lớp bản đồ từ tập GRC vào sơ đồ lớp hình cây"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 #, fuzzy
 msgid "Map display"
 msgstr "Trình bày"
@@ -9563,7 +9966,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "Thêm lớp bản đồ raster"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 #, fuzzy
 msgid "Add web service layer"
 msgstr "Thêm lớp lưới"
@@ -10326,24 +10729,24 @@ msgstr "Thể tích sang các chuỗi raster"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "Chuyển đổi các bản đồ raster 3D thành các bản đồ raster 2D"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "Nắn chỉnh địa lý"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 #, fuzzy
 msgid "Manage Ground Control Points for Georectification"
 msgstr "Điểm khống chế"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr ""
 
@@ -10386,16 +10789,16 @@ msgstr ""
 "Một tiện ích đơn giản dùng để chuyển đổi các số đo hướng và khoảng cách "
 "thành toạ độ và ngược lại."
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 #, fuzzy
 msgid "Map Swipe"
 msgstr "Kiểu lớp bản đồ"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 #, fuzzy
 msgid "Launch Map Swipe"
 msgstr "Mô tả lớp"
@@ -10409,7 +10812,7 @@ msgstr "Mô tả lớp"
 msgid "Launches script file."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "Đóng"
@@ -10419,8 +10822,8 @@ msgstr "Đóng"
 msgid "Quit wxGUI session."
 msgstr "Vào phiên làm việc của GRASS"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "Thoát giao diện đồ họa GRASS"
@@ -10429,7 +10832,7 @@ msgstr "Thoát giao diện đồ họa GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 #, fuzzy
 msgid "&Settings"
 msgstr "Các thiết lập"
@@ -10617,7 +11020,7 @@ msgstr "Chọn phần mở rộng của tệp:"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "Thiết lập ưa thích"
 
@@ -11802,7 +12205,7 @@ msgstr ""
 "vào."
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "Mặt phẳng"
 
@@ -12086,8 +12489,8 @@ msgid "Develop vector map"
 msgstr "Phát triển bản đồ véc tơ"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "Tạo bản đồ véc tơ mới"
 
@@ -13050,12 +13453,12 @@ msgstr ""
 "class hoặc i.gensig."
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "Đầu vào tương tác dùng cho phân loại có hướng dẫn"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 #, fuzzy
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
@@ -14195,27 +14598,31 @@ msgid "GUI tools"
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 #, fuzzy
 msgid "Timeline tool"
 msgstr "Thanh công cụ Bản đồ"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 #, fuzzy
 msgid "Plot temporal extents."
 msgstr "Hiển thị phạm vi tính toán"
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "Chế độ phạm trù"
+msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 #, fuzzy
 msgid "Plot temporal values."
 msgstr "Hiển thị phạm vi tính toán"
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 #, fuzzy
 msgid "&Help"
 msgstr "Trợ giúp"
@@ -14245,7 +14652,7 @@ msgid "Prints system information"
 msgstr "Thông tin CSDL"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "Giới thiệu về GRASS GIS"
 
@@ -14259,308 +14666,317 @@ msgstr "Nhập dữ liệu véc-tơ"
 msgid "Attribute table manager"
 msgstr "Bộ Quản Lý Bảng Thuộc Tính"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 #, fuzzy
 msgid "Create new model"
 msgstr "Tạo tập bản đồ mới"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 #, fuzzy
 msgid "Load model from file"
 msgstr "Nạp không gian làm việc từ tập tin"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 #, fuzzy
 msgid "Save model to file"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 #, fuzzy
 msgid "Close model file"
 msgstr "Chọn tập tin mã EPSG"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 #, fuzzy
 msgid "Export to image"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 #, fuzzy
 msgid "Export model to image"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 #, fuzzy
 msgid "Export to Python"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 #, fuzzy
 msgid "&Model"
 msgstr "Chế độ"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 #, fuzzy
 msgid "Add command"
 msgstr "Thêm lớp lệnh"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 #, fuzzy
 msgid "Define relation"
 msgstr "Định nghĩa vị trí mới"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 #, fuzzy
 msgid "Add loop / series"
 msgstr "Thêm nhóm lớp"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+#, fuzzy
+msgid "Add condition"
+msgstr "điều kiện"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr ""
+
+#: ../gui/wxpython/menustrings.py:1966
 #, fuzzy
 msgid "Adds comment to model"
 msgstr "Thêm lớp lệnh"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 #, fuzzy
 msgid "Remove item"
 msgstr "Loại bỏ bảng"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 #, fuzzy
 msgid "Delete intermediate data"
 msgstr "Xoá phần đã được lọc"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 #, fuzzy
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "Hiển thị các trang web trợ giúp của GRASS"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 #, fuzzy
 msgid "Display information about Graphical Modeler"
 msgstr "Xuất ra thông tin cơ bản về một lớp bản đồ raster."
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 #, fuzzy
 msgid "Load instruction file"
 msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 #, fuzzy
 msgid "Export instruction file"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 #, fuzzy
 msgid "Export to PostScript"
 msgstr "Xuất bản đồ véc tơ"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 #, fuzzy
 msgid "Export to PDF"
 msgstr "Xuất ra MPEG-1"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 #, fuzzy
 msgid "Launch ps.map dialog"
 msgstr "Mô tả lớp"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 #, fuzzy
 msgid "Close Cartographic Composer"
 msgstr "Trợ giúp GRASS GIS"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 #, fuzzy
 msgid "Add or edit map frame"
 msgstr "Thêm lớp bản đồ raster"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 #, fuzzy
 msgid "Add or edit raster map"
 msgstr "Thêm bản đồ raster 3D"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 #, fuzzy
 msgid "Add or edit vector map"
 msgstr "véc tơ"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 #, fuzzy
 msgid "Map legend"
 msgstr "Thêm chú giải"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 #, fuzzy
 msgid "Add or edit raster and vector legend"
 msgstr "Thêm bản đồ đã tạo vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 #, fuzzy
 msgid "Add or edit map info"
 msgstr "Thêm thành phần bản đồ"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 #, fuzzy
 msgid "Add or edit scale bar"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 #, fuzzy
 msgid "Add north arrow"
 msgstr "Thêm thước tỷ lệ và mũi tên chỉ hướng bắc"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 #, fuzzy
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "Hiển thị các trang web trợ giúp của GRASS"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 #, fuzzy
 msgid "About Cartographic Composer"
 msgstr "Trợ giúp GRASS GIS"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 #, fuzzy
 msgid "Display information about Cartographic Composer"
 msgstr "Xuất ra thông tin cơ bản về một lớp bản đồ raster."
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 #, fuzzy
 msgid "Click here to show search module engine"
 msgstr "Bấm vào đây để hiện thiết lập 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 #, fuzzy
 msgid "Click here to hide search module engine"
 msgstr "Bấm vào đây để giấu các thiết lập 3D"
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 #, fuzzy
 msgid "Command prompt"
 msgstr "Đầu ra của lệnh"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 #, fuzzy
 msgid "Output window"
 msgstr "Đầu ra"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "Đầu ra của lệnh"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 #, fuzzy
 msgid "Abort running command"
 msgstr "Hủy lệnh đang chạy"
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 #, fuzzy
 msgid "&Log file"
 msgstr "Tỉ lệ log"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr "Lưu tập tin thành..."
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "Thiết lập chữ"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 #, fuzzy
 msgid "Files"
 msgstr "Tập tin"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -14568,12 +14984,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "Không thể đọc các mã EPSG: %s"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "Đầu ra của lệnh"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -14581,101 +14997,140 @@ msgid ""
 "Details: %(error)s"
 msgstr "Không thể phóng đến bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "Đầu ra của lệnh"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "Phạm trù"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "Chọn các đối tượng vec-tơ"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "Tạo tập bản đồ mới"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "Bản đồ véc-tơ không phải loại 3D. Thao tác bị hủy."
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "Không thể tạo bản đồ véc tơ <%s>."
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "Không có lớp bản đồ nào được chọn"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "Không thể tạo bản đồ véc tơ <%s>."
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr "Chạy lệnh"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "Thiết lập giao diện đồ họa của người dùng"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "Đặt về mặc định"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "Trả về thiết lập mặc định và áp dụng thay đổi"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 #, fuzzy
 msgid "Apply changes for the current session only and close"
 msgstr "Áp dụng các thay đổi cho phiên làm việc hiện tại và đóng hộp thoại"
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 #, fuzzy
 msgid "Save for this session only"
 msgstr "Áp dụng các thay đổi cho phiên này"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr "Cột khóa không thể là chuỗi rỗng."
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 #, fuzzy
 msgid "GUI Settings"
 msgstr "Thiết lập giao diện đồ họa của người dùng"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "Thiết lập cho Bộ Quản Lý Lớp"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "Hỏi khi gỡ lớp bản đồ khỏi sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "Hỏi khi thoát wxGUI hoặc đóng trình bày"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-msgid "Search module"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+#: ../gui/wxpython/gui_core/preferences.py:366
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 #, fuzzy
 msgid "Workspace settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "Chặn việc định vị trí (các) Cửa Sổ Màn Hình Bản Đồ"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "Chặn việc định vị trí cửa sổ Bộ Quản Lý Lớp"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "Lưu bố cục cửa sổ hiện tại thành mặc định"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
@@ -14683,216 +15138,207 @@ msgstr ""
 "Lưu vị trí và kích thước hiện tại của cửa sổ Bộ Quản Lý Lớp và các cửa sổ "
 "Màn Hình Bản Đồ đã mở, và sử dụng làm mặc định cho các phiên tiếp theo."
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 #, fuzzy
 msgid "Font for command output:"
 msgstr "Đầu ra của lệnh"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 #, fuzzy
 msgid "Language settings"
 msgstr "Thay đổi các thiết lập"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 #, fuzzy
 msgid "Appearance settings"
 msgstr "Thiết lập nâng cao"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "Danh sách phần tử"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 #, fuzzy
 msgid "Module dialog style:"
 msgstr "Thiết lập cho hộp thoại lệnh"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 #, fuzzy
 msgid "Map Display"
 msgstr "Trình bày"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr "Phông mặc định cho các màn hình GRASS:"
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "Thiết lập màn hình mặc định"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "Trình điều khiển màn hình:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "Chế độ của thanh trạng thái"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "Bật cơ chế tự vẽ"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 #, fuzzy
 msgid "Enable auto-zooming to selected map layer"
 msgstr "Phóng đến (các) bản đồ đã chọn"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 #, fuzzy
 msgid "Mouse scrolling direction:"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 #, fuzzy
 msgid "Advanced display settings"
 msgstr "Thiết lập nâng cao"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-#, fuzzy
-msgid "Modules"
-msgstr "Mã"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 #, fuzzy
 msgid "Module dialog settings"
 msgstr "Thiết lập cho hộp thoại lệnh"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 #, fuzzy
 msgid "Close dialog when module is successfully finished"
 msgstr "Đóng hộp thoại khi kết thúc"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "Thêm bản đồ đã tạo vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 #, fuzzy
 msgid "Allow interactive input"
 msgstr "Mã hoá lại tương tác"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "Mức thông báo chi tiết:"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-#, fuzzy
-msgid "Layers"
-msgstr "Lớp"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 #, fuzzy
 msgid "Default raster settings"
 msgstr "Thiết lập màn hình mặc định"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 #, fuzzy
 msgid "Default color table"
 msgstr "Đặt bảng màu"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 #, fuzzy
 msgid "Default vector settings"
 msgstr "Thiết lập véc tơ"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "Trình bày:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 #, fuzzy
 msgid "Feature color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "Trong suốt"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 #, fuzzy
 msgid "Area fill color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 #, fuzzy
 msgid "Symbol:"
 msgstr "ký hiệu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "Độ dày đường (theo điểm ảnh):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 #, fuzzy
 msgid "Automatically hightlight selected features in map display"
 msgstr "Làm nổi bật các đối tượng đã chọn rồi phóng đến chúng"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "Trình duyệt dữ liệu"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "Bấm đúp nút trái chuột:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "Mã hoá  (ví dụ như utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "Hỏi khi xóa (các) bản ghi dữ liệu khỏi bảng"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "Tạo bảng"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "Cột khóa:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 #, fuzzy
 msgid "Projection statusbar settings"
 msgstr "Các thiết lập chữ cho mặt cắt"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14904,85 +15350,96 @@ msgid ""
 "menu located at the bottom of the Map Display window.\n"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "Mã EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 #, fuzzy
 msgid "EPSG file:"
 msgstr "Mã EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 #, fuzzy
 msgid "&Load EPSG codes"
 msgstr "Mã EPSG:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 #, fuzzy
 msgid "Coordinates format"
 msgstr "Tọa độ"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 #, fuzzy
 msgid "Lat/long projections"
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 #, fuzzy
 msgid "Precision:"
 msgstr "Phép chiếu:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "Không thể đọc các mã EPSG: %s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "Không thể đọc các mã EPSG: %s"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "LỖI: Không tìm thấy vị trí <%s>"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr "Chọn phông hiển thị mặc định"
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "Chọn phông hiển thị mặc định"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr "Chọn phông:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 msgid "Character encoding:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "Đơn giản"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 #, fuzzy
 msgid "Manage access to mapsets"
 msgstr "Thay đổi bộ bản đồ hiện tại."
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 #, fuzzy
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
@@ -14994,282 +15451,371 @@ msgstr ""
 "Đánh dấu vào bộ bản đồ để làm cho nó truy cập được, tắt đánh dấu để ẩn nó "
 "đi. %sGhi_chú: Bộ bản đồ hiện tại luôn luôn truy cập được."
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "Tập bản đồ"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "Người sở hữu"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "Truy vấn các bản đồ raster"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "Chỉ số nhận diện đối tượng"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "giá trị"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "Chọn bản đồ véc tơ"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "Bỏ tất cả cột"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "Bỏ cột đã chọn"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "Sao chép"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "Chép bảng"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "Truy vấn các bản đồ raster"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "Kiểm tra tính chuẩn tắc"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "Không có gì để xóa."
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, python-format
 msgid "%d modules match"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "Mặt cắt"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "Xóa tập bản đồ đã chọn"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "Hiện các thiết lập"
+msgid "Load:"
+msgstr "Nạp"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr ""
 "Tập tin không gian làm việc <%s> đã tồn tại. Bạn có muốn ghi đè tập tin này "
 "không?"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "Lưu tập tin thành..."
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "Nhập các tham số cho '"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "Chạy lệnh"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+msgid "Activate overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "Lượng hóa"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr "Nhập các tham số cho '"
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 #, fuzzy
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "Đóng cửa sổ này mà không thi hành lệnh"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 #, fuzzy
 msgid "Run the command (Ctrl+R)"
 msgstr "Chạy lệnh"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 msgid "Copy the current command string to the clipboard"
 msgstr "Chép chuỗi lệnh hiện tại vào bộ nhớ"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 #, fuzzy
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "Hiện trang hướng dẫn về lệnh"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 #, fuzzy
 msgid "Add created map(s) into layer tree"
 msgstr "Thêm bản đồ đã tạo vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr "Đóng hộp thoại khi kết thúc"
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "Bắt buộc"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "Tùy chọn"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "Không thấy tham số: %s"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 msgid "This option is required"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[nhiều]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "Miền hợp lệ"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "Chọn Màu"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "Chọn %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 #, fuzzy
 msgid "&Load"
 msgstr "Nạp"
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "Đổi tên vị trí"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "Lưu thành..."
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "Mã hoá lại tương tác"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "Thư mục"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "Lớp"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr "Tên lớp"
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "Phép chiếu:"
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "Sổ tay tra cứu"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "Không có gì để xóa."
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -15277,47 +15823,47 @@ msgid ""
 "Reason: %s"
 msgstr "Không thể nạp sắc thái biểu tượng..."
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "Không có gì để xóa."
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "Lưu tập tin thành..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "Lỗi trong %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 msgid "Required item is not set."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 #, fuzzy
 msgid "Select GRASS location and mapset"
 msgstr "Chọn vị trí dự án và tập bản đồ"
@@ -15327,58 +15873,58 @@ msgstr "Chọn vị trí dự án và tập bản đồ"
 msgid "Location or mapset is not defined."
 msgstr "Tính toán dòng chảy của các lưới lớn (phiên bản Float)."
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 #, fuzzy
 msgid "Name of GRASS location:"
 msgstr "Tên cho bản đồ GRASS"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 #, fuzzy
 msgid "Name of mapset:"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 #, fuzzy
 msgid "Select mapset in GRASS location"
 msgstr "Chọn kiểu bản đồ và vị trí/tập bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 #, fuzzy
 msgid "Name of mapset is missing."
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 #, fuzzy
 msgid "Name of vector map is missing."
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr "Tạo bảng thuộc tính"
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
@@ -15387,539 +15933,419 @@ msgstr ""
 "Bản đồ véc tơ <%s> đã có trong tập bản đồ hiện tại. Bạn có muốn ghi đè lên "
 "không?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr "Nạp vùng:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr "Lưu vùng:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "Tạo/biên soạn nhóm"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 #, fuzzy
 msgid "Apply changes to selected group and close dialog"
 msgstr "Áp dụng thay đổi và đóng hộp thoại"
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 #, fuzzy
 msgid "Apply changes to selected group"
 msgstr "Áp dụng các thay đổi cho phiên này"
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 #, fuzzy
 msgid "Close dialog, changes are not applied"
 msgstr "Đóng hộp thoại khi áp dụng"
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "hình sao"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr "Danh sách bản đồ:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 msgid "Select map layers and add them to the list."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "Áp dụng các thay đổi"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
 msgid "No raster maps selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1156
+#: ../gui/wxpython/gui_core/dialogs.py:1274
 #, python-format
 msgid "No changes to apply in group <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1159
+#: ../gui/wxpython/gui_core/dialogs.py:1277
 #, python-format
 msgid "Group <%s> was successfully created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1161
+#: ../gui/wxpython/gui_core/dialogs.py:1279
 #, python-format
 msgid "Group <%s> was successfully changed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1164
+#: ../gui/wxpython/gui_core/dialogs.py:1282
 #, fuzzy, python-format
 msgid "Creating of new group <%s> failed."
 msgstr "Nắn chỉnh địa lý bản đồ véc-tơ <%s> thất bại"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1166
+#: ../gui/wxpython/gui_core/dialogs.py:1284
 #, python-format
 msgid "Changing of group <%s> failed."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1204
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
 msgid "No group selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1210
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
 msgid "No subgroup selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1313
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 msgid "Use fully-qualified map names"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
 #, fuzzy
 msgid "3D raster"
 msgstr "raster 3D"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1339
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
 msgid "Map type:"
 msgstr "Kiểu lớp bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1354
+#: ../gui/wxpython/gui_core/dialogs.py:1475
 #, fuzzy
 msgid "Select toggle"
 msgstr "Chọn các đoạn thừa"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1361
+#: ../gui/wxpython/gui_core/dialogs.py:1482
 msgid "Mapset:"
 msgstr "Tập bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1447
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
 msgid "Invert selection"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1582
+#: ../gui/wxpython/gui_core/dialogs.py:1718
 #, python-format
 msgid "Dynamic series (%s)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr "Nhập nhiều lần"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "Danh sách lớp"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "Danh sách lớp"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "Danh sách của %s lớp"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "Lớp"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr "Tên lớp"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "Tên cho bản đồ GRASS"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "Phép chiếu:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-#, fuzzy
-msgid "Options"
-msgstr "Tùy chọn"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr "&Nhập"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr "Nhập các lớp đã chọn"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
-#, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "Thêm các lớp đã nhập vào sơ đồ lớp hình cây"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr "Thêm các lớp đã nhập vào sơ đồ lớp hình cây"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr "&Liên kết"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr "Liên kết các lớp đã chọn"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
-
-#: ../gui/wxpython/gui_core/dialogs.py:1968
-#, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "Không thể tạo mặt cắt của bản đồ raster."
-
-#: ../gui/wxpython/gui_core/dialogs.py:2048
-#, fuzzy
-msgid "Define output format for vector data"
-msgstr "Nhập một lúc nhiều dữ liệu véc-tơ"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2050
-#, fuzzy
-msgid "Define output format for raster data"
-msgstr "Nhập một lúc nhiều dữ liệu raster"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-#, fuzzy
-msgid "Set external format and close dialog"
-msgstr "Bỏ qua thay đổi và đóng hộp thoại lại"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2110
-#, fuzzy
-msgid "No data source selected."
-msgstr "Không có lớp bản đồ nào được chọn"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr "Nhập các lớp DXF"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr "Chọn tệp DXF để nhập"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2147
-#, fuzzy
-msgid "No layers selected."
-msgstr "Không có lớp bản đồ nào được chọn"
-
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr "Thiết lập Độ đục của lớp bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "đục"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 msgid "Set image size"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 #, fuzzy
 msgid "GRASS GIS SQL Query Utility"
 msgstr "GRASS GIS - Trình bày bản đồ"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "Câu lệnh SQL"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 #, fuzzy
 msgid "Symbols"
 msgstr "ký hiệu:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 #, fuzzy
 msgid "Symbol directory:"
 msgstr "Thiết lập về ký hiệu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 #, fuzzy
 msgid "Symbol name:"
 msgstr "Thiết lập về ký hiệu"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "T.tin"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr "Bản quyền"
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr "Giấy phép"
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr "Tác giả"
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "Các thuộc tính"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "Các thuộc tính"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "Trong suốt"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "Trong suốt"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 #, fuzzy
 msgid "Official GRASS site:"
 msgstr "Địa chỉ chính thức của GRASS: http://grass.osgeo.org"
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "Thư viện GIS"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, fuzzy, python-format
 msgid "%s file missing"
 msgstr "Thiếu tập tin COPYING"
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, python-format
 msgid "Error when reading file '%s'."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "Đường"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "Xoay:"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, fuzzy, python-format
 msgid "File <%s> not found"
 msgstr "Không tìm thấy tập tin."
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 #, fuzzy
 msgid "&Previous"
 msgstr "Xem trước"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "Thanh công cụ Bản đồ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "Nhóm lớp:"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "Lớp"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "Đổi mức độ đục"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "Đổi mức độ đục"
@@ -16025,735 +16451,752 @@ msgstr "Chồng các thành phần như tỷ lệ và chú giải lên bản đ
 msgid "Create histogram with d.histogram"
 msgstr "Tạo biểu đồ tần số của ảnh hoặc tập tin raster"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "Chọn phông hiển thị mặc định"
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "Bỏ cột đã chọn"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "Loại"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, python-format
 msgid "GSelect: invalid item: %s"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "Thiết lập raster"
+msgid "Source input"
+msgstr "Kiểu nguồn"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "Lưu"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "Tập tin"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr "Giao thức"
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "Đầu ra"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 msgid "Source type"
 msgstr "Kiểu nguồn"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 #, fuzzy
 msgid "All files"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "Giá trị ô"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 msgid "File:"
 msgstr "Tập tin:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "Chọn tệp DXF để nhập"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 #, fuzzy
 msgid "Extension:"
 msgstr "Biểu thức"
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 msgid "Choose file"
 msgstr "Chọn tập tin"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "Chỉ số nhận diện đối tượng:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "Truy vấn các đối tượng"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "Tạo hoặc dựng lại tôpô"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "Thiết lập lựa chọn"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 msgid "Format:"
 msgstr "Định dạng:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr "Giao thức:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "Không có chế độ xem 3D"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 #, fuzzy
 msgid "LineString"
 msgstr "Làm nổi bật"
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "Không tìm thấy bản đồ <%s>."
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "Bản đồ véc-tơ không phải loại 3D. Thao tác bị hủy."
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "Chọn tập bản đồ nguồn:"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr "X:"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr "Y:"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, fuzzy, python-format
 msgid "Mapset: %s"
 msgstr "Tập bản đồ"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "Tỉ lệ bản đồ"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "Đánh dấu thời gian"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "Tạo hoặc dựng lại tôpô"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "Khôi phục thiết lập mặc định"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "Bắt buộc"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "Danh sách lớp"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "Chọn phép chiếu"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "Thiết lập nâng cao"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "Chồng các raster"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "Mã phép chiếu:"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 #, fuzzy
 msgid "Nearest neighbor"
 msgstr "Lấy lại mẫu bằng phương pháp lân cận gần nhất"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "Hồi quy tuyến tính"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "Chọn bản đồ véc tơ:"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 msgid "Cubic spline interpolation"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 msgid "Maximum columns to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 msgid "Maximum rows to request from server at time:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 msgid "Do not request transparent data"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "Nhập các tham số cho '"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "Tọa độ"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "Chọn tập bản đồ nguồn:"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "Chọn vị trí nguồn:"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 msgid "Choose output layer name.\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "Lớp"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "Kiểu"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "Thêm nhóm lớp"
+msgid "Add default"
+msgstr "Mặc định"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "Các thiết lập tổng quát"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 #, fuzzy
 msgid "&Connect"
 msgstr "Kết nối"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 msgid "Connect to the server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "Thiết lập nâng cao"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "Thiết lập nâng cao"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "Thiết lập cho Bộ Quản Lý Lớp"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "Tên bản đồ véc tơ đầu ra"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 #, fuzzy
 msgid "Username:"
 msgstr "Đổi tên"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, python-format
 msgid "Connecting to <%s>..."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 msgid "Available web services"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, python-format
 msgid "Connected to <%s>"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "Các thuộc tính của lớp"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "Đặt vùng"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "Nạp vùng:"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "Giới hạn độ phân giải trình bày theo các thiết lập tính toán"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "Thiết lập vùng tính toán theo phần trình bày"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "Chèn %s hiện có"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "Nạp vùng:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "Xóa lớp đã chọn"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 msgid "Missing output raster."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr ""
 "Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
 "dùng."
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, python-format
 msgid "Output map <%s> already exists"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "Đang nạp dữ liệu..."
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "Không thể đặt "
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "Đóng hộp thoại"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 #, fuzzy
 msgid "Clear all"
 msgstr "Đóng hộp thoại"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "Truy vấn dữ liệu thuộc tính véc tơ"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr "Chọn bản đồ véc tơ:"
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "Đặt bảng màu"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 msgid "Load"
 msgstr "Nạp"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "Các thiết lập"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "Đặt lại về chế độ xem mặc định"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 msgid "No valid color rules given."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "Đặt bảng màu"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr "Tạo bảng màu mới cho bản đồ raster"
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "Nhập các giá trị phạm trù hoặc giá trị phần trăm raster"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "Miền hợp lệ"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, fuzzy, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 "Nhập các giá trị phạm trù hoặc phần trăm raster (khoảng = %(min)d-%(max)d)"
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "Tạo bảng màu mới cho bản đồ véc tơ"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "Nhập các giá trị hoặc khoảng cho thuộc tính véc tơ (n hoặc n1 tới n2)"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "Truy vấn dữ liệu thuộc tính véc tơ"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "Chọn bản đồ véc tơ"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "Lớp:"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr "Cột thuộc tính:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "Cột màu RGB:"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "Cột màu RGB:"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "Bỏ tất cả cột"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "Chuỗi bản đồ raster sang thể tích"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "Nạp không gian làm việc từ tập tin"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 msgid "Save width to column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 msgid "Use color column instead of color table:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "Bỏ một bảng thuộc tính"
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "Đặt bảng màu"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
@@ -16762,12 +17205,12 @@ msgstr ""
 "Kết nối CSDL cho bản đồ véc tơ <%s> không được định nghĩa trong tệp DB. Bạn "
 "có thể định nghĩa kết nối mới trong thẻ 'Quản lý lớp'."
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "Các kết nối CSDL véc tơ"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
@@ -16776,346 +17219,356 @@ msgstr ""
 "Bản đồ véc tơ <%s> đã có trong tập bản đồ hiện tại. Bạn có muốn ghi đè lên "
 "không?"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, python-format
 msgid "%s column already exists."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "Xin hãy chờ, đang nạp dữ liệu về thuộc tính..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 msgid "Too many records"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "Nhập các giá trị hoặc khoảng cho thuộc tính véc tơ (n hoặc n1 tới n2)"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "Nhập các giá trị hoặc khoảng cho thuộc tính véc tơ (n hoặc n1 tới n2)"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "Bộ công cụ để dọn tôpô cho bản đồ véc tơ."
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "Trình tính toán Bản đồ %s của GRASS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "Trình tính toán Bản đồ %s của GRASS"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 msgid "mapcalc statement"
 msgstr "Câu lệnh mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr "Các toán tử"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr "Các toán hạng"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr "Biểu thức"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "Lưu không gian làm việc vào tập tin"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "Nạp không gian làm việc từ tập tin"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr "luỹ thừa"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr "chia"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr "cộng"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr "trừ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr "trị tuyệt đối"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr "nhân"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr "shift trái"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr "shift phải"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr "shift phải (không dấu)"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 msgid "greater than"
 msgstr "lớn hơn"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 msgid "greater than or equal to"
 msgstr "lớn hơn hoặc bằng"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr "nhỏ hơn"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 msgid "less than or equal to"
 msgstr "nhỏ hơn hoặc bằng"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr "bằng"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 msgid "not equal to"
 msgstr "không bằng"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 msgid "one's complement"
 msgstr "phần bù của một"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr "KHÔNG"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr "đảo bit VÀ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr "đảo bit HOẶC"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr "luân lý VÀ"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr "luân lý HOẶC"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 msgid "conditional"
 msgstr "điều kiện"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "Tên cho %s mới cần tạo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "Tên cho %s mới cần tạo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "Chèn %s hiện có"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "Chèn %s hiện có"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr "Chèn hàm số mapcalc"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 #, fuzzy
 msgid "Generate random seed for rand()"
 msgstr "Tạo điểm ngẫu nhiên"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "Thêm bản đồ đã tạo vào sơ đồ lớp hình cây"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "Bạn phải nhập tên của bản đồ mới cần tạo"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 #, fuzzy
 msgid "You must enter an expression to create a new raster map."
 msgstr "Bạn phải nhập câu lệnh mapcalc để tạo bản đồ mới"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 #, fuzzy
 msgid "Expression file (*)|*"
 msgstr "Biểu thức"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "Chọn tập tin GRC để nạp"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s' được chép vào bộ nhớ"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 #, fuzzy
 msgid "List of extensions - double-click to install"
 msgstr "Danh sách các phạm trù - bấm chuột phải để xóa"
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+#, fuzzy
+msgid "Options"
+msgstr "Tùy chọn"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 msgid "Extension not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "Chọn phần mở rộng của tệp:"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 #, fuzzy
 msgid "Show manual page"
 msgstr "Bản đồ bóng"
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "Chọn phần mở rộng của tệp:"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "Chọn phần mở rộng của tệp:"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "Quản lý các phép chiếu"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -17124,275 +17577,422 @@ msgid ""
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
+#, fuzzy
+msgid "Remove extension"
+msgstr "Loại bỏ đỉnh"
+
+#: ../gui/wxpython/modules/extensions.py:526
+#, fuzzy
+msgid "Extension"
+msgstr "Biểu thức"
+
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr "Nhập nhiều lần"
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "Danh sách lớp"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "Danh sách lớp"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "Danh sách của %s lớp"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "Tên cho bản đồ GRASS"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr "&Nhập"
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr "Nhập các lớp đã chọn"
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "Thiết lập raster"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "Thiết lập phông"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "Thêm các lớp đã nhập vào sơ đồ lớp hình cây"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr "Thêm các lớp đã nhập vào sơ đồ lớp hình cây"
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr "&Liên kết"
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr "Liên kết các lớp đã chọn"
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "Không thể tạo mặt cắt của bản đồ raster."
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "Nhập một lúc nhiều dữ liệu véc-tơ"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "Nhập một lúc nhiều dữ liệu raster"
+
+#: ../gui/wxpython/modules/import_export.py:650
+#, fuzzy
+msgid "Set external format and close dialog"
+msgstr "Bỏ qua thay đổi và đóng hộp thoại lại"
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "Không có lớp bản đồ nào được chọn"
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr "Nhập các lớp DXF"
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr "Chọn tệp DXF để nhập"
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "Không có lớp bản đồ nào được chọn"
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "Phép chiếu:"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "Tên cho bản đồ GRASS"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
 #, fuzzy
-msgid "Remove extension"
-msgstr "Loại bỏ đỉnh"
+msgid "Layers to be reprojected"
+msgstr "Lớp cần xóa"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/import_export.py:882
 #, fuzzy
-msgid "Extension"
-msgstr "Biểu thức"
+msgid "Reproject selected layers"
+msgstr "Nhập các lớp đã chọn"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 #, fuzzy
 msgid "Numeric column:"
 msgstr "Cột khóa:"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 #, fuzzy
 msgid "Name for the output raster map:"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 #, fuzzy
 msgid "Export variance map as well: "
 msgstr "Xuất bản đồ raster"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 #, fuzzy
 msgid ":"
 msgstr "X:"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 #, fuzzy
 msgid "Block size:"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr ""
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 #, fuzzy
 msgid "Model: "
 msgstr "Chế độ:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr ""
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "Tạo biểu đồ tần số GRASS GIS của ảnh hoặc bản đồ raster"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr "Chọn phông chữ cho biểu đồ tần số"
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 #, fuzzy
 msgid "Set up vector cleaning tools"
 msgstr "Chọn các đối tượng vec-tơ"
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "Hợp nhất các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "Kiểm tra các trùng lặp"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "Chọn các đoạn thừa"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 msgid "change boundary dangles to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "Loại bỏ bảng"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "Lật các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 msgid "remove duplicate area centroids"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "Lật các đường/ranh giới đã chọn"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "Gỡ bỏ lớp bản đồ"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "Ngắt các đường/ranh giới tại giao điểm"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 msgid "remove small angles at nodes"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "Chọn bản đồ véc tơ:"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "Chỉ số nhận diện đối tượng:"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "Chọn bản đồ véc tơ:"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 #, fuzzy
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr "Chép chuỗi lệnh hiện tại vào bộ nhớ"
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 #, fuzzy
 msgid "line"
 msgstr "đường rhumb"
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 #, fuzzy
 msgid "boundary"
 msgstr "Chỉnh sửa đường/ranh giới"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 #, fuzzy
 msgid "centroid"
 msgstr "Thêm trọng tâm"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 #, fuzzy
 msgid "face"
 msgstr "bề mặt"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "Bộ công cụ để dọn tôpô cho bản đồ véc tơ."
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "Bộ công cụ để dọn tôpô cho bản đồ véc tơ."
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "Tên cho bản đồ véc tơ mới"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "Chọn ngưỡng"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, python-format
 msgid "'%s' not defined"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -17400,21 +18000,21 @@ msgid ""
 "%s"
 msgstr "Không có lớp bản đồ nào được chọn. Thao tác bị hủy."
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 msgid "Executing selected cleaning operations..."
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 #, fuzzy
 msgid "Vector cleaning command copied to clipboard"
 msgstr "Chép chuỗi lệnh hiện tại vào bộ nhớ"
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "Không thể mở tập tin <%s> để đọc."
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -17427,74 +18027,99 @@ msgstr ""
 "
\n"
 "
Số dòng bị bỏ qua: %(line)d"
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "hàng %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, fuzzy, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: kiểu lớp <%(type)s> chưa được hỗ trợ."
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "Lệnh đã kết thúc"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "Chi tiết:"
 
-#: ../gui/wxpython/core/render.py:274
+#: ../gui/wxpython/core/render.py:258
 #, python-format
 msgid "Unsupported map layer type '%s'"
 msgstr "Kiểu lớp bản đồ '%s' chưa được hỗ trợ"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "Gỡ bỏ lớp bản đồ"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "Vẽ"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "Đang nạp dữ liệu..."
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "Vẽ"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "Vẽ"
+
+#: ../gui/wxpython/core/render.py:684
 #, fuzzy
 msgid "Trying to recover from default region..."
 msgstr "Phóng đến vùng mặc định"
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr ""
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "Không thể đọc tập tin EPSG: '%s'"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "Giá trị không hợp lệ: %s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "Không thể phóng đến bản đồ raster <%s>."
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "Chi tiết:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "Không thể tạo bản đồ véc tơ <%s>."
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "Không thể phóng đến bản đồ raster <%s>."
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 #, fuzzy
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
@@ -17503,115 +18128,85 @@ msgstr ""
 "Không thể lấy phạm vi địa lý hiện tại. Buộc phải thoát wxGUI. Vui lòng chạy "
 "thủ công lệnh g.region để khắc phục lỗi này."
 
-#: ../gui/wxpython/core/render.py:987
-#, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr ""
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "Không thể vẽ lớp bản đồ <%s>."
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "Không thể vẽ chồng <%s>."
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "Đang nạp dữ liệu..."
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "Vẽ"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "Vẽ"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "Không biết"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "Không thể cập nhật bản ghi hiện có."
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 #, fuzzy
 msgid "Custom toolboxes"
 msgstr "Trị lớn nhất tùy chọn"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/core/utils.py:558
-#, fuzzy, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "Không thể mở tập tin"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "Không thể mở tập tin <%s> để đọc."
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
 "Reason: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "Nhân bản các thuộc tính"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "Không thể đọc tập tin EPSG: '%s'"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -17620,180 +18215,185 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "Không tìm thấy tập tin."
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 #, fuzzy
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr ""
 "Lưu ý rằng dữ liệu bị để ở trình trạng không nhất quán và có thể bị hỏng"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "Lệnh bị hủy"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "Lệnh đã kết thúc"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 #, fuzzy
 msgid "Reason"
 msgstr "Lý do: %s"
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "Thực thi lệnh thất bại:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "Lỗi:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "Không thể thực thi lệnh: '%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr "Ngắt đoạn"
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "Điểm"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "Ẩn tất cả trừ PERMANENT và bộ bản đồ hiện tại"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "Co tất cả trừ PERMANENT"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "Thu nhỏ tất cả trừ phần hiện tại"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "Co tất cả"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "Hiện tất cả"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "Hiển thị phần được chọn"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 #, fuzzy
 msgid "List left"
 msgstr "Liệt kê các bảng"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Zoom to mouse cursor"
 msgstr "Phóng đến vùng đã lưu"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 #, fuzzy
 msgid "Nothing"
 msgstr "Bắc"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "hộp"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "cầu"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "lập phương"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "hình thoi"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "hình sao"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "gyro"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "biểu đồ tần số"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, fuzzy, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17804,12 +18404,12 @@ msgstr ""
 "
       Chi tiết: %(detail)s\n"
 "
       Dòng: '%(line)s'"
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "Không thể cập nhật bản ghi hiện có."
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17820,283 +18420,314 @@ msgstr ""
 "
\n"
 "
Chi tiết: %(detail)s"
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "Không thể đặt "
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "Không thể phân giải lệnh %s"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "Xác định CSDL GRASS và Tên Vị trí"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "Thư mục dữ liệu GIS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "Vị trí của Dự án"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "Chọn Thư mục Dữ liệu GIS"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 #, fuzzy
 msgid "Location Title"
 msgstr "Tên vị trí:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "Vị trí được chọn không hợp lệ."
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "Chọn thư mục dữ liệu GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "Vị trí này đã có trong CSDL GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "Không thể tạo vị trí"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "Chọn phương thức để tạo vị trí mới"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "Chọn mã EPSG của hệ tham chiếu không gian"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr ""
 "Đọc các thông số của phép chiếu và mốc toạ độ chuẩn từ một tập tin dữ liệu "
 "có tham chiếu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 #, fuzzy
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr ""
 "Đọc các thông số của phép chiếu và mốc toạ độ chuẩn từ một tập tin WKT hoặc "
 "PRJ"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "Chọn các tham số hệ tọa độ từ danh sách"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr ""
 "Chỉ định các thông số phép chiếu và mốc toạ độ chuẩn bằng cách dùng các tham "
 "số tuỳ chỉnh PROJ.4"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 #, fuzzy
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "Tạo hệ tọa độ phi-quả-đất tùy ý (XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "Đơn giản"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "Nâng cao"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "Chọn phép chiếu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "Mã"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "Mã phép chiếu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "Tìm theo mô tả:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "Không thể đọc danh sách: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "Chọn các tham số phép chiếu"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "Chọn mốc tọa độ chuẩn hoặc ellipsoid (trang tiếp)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "Mốc tọa độ chuẩn với ellipsoid liên quan"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "Chỉ ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, python-format
 msgid "You must enter a value for %s"
 msgstr "Bạn phải nhập một giá trị cho %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr " Nhập các tham số cho phép chiếu %s "
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "Chỉ định mốc tọa độ chuẩn trắc địa"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "Ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "Mã mốc tọa độ chuẩn:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "Chỉ định ellipsoid"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "CSDL"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "Mã ellipsoid:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "Chọn tập tin tham chiếu địa lý"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "Tập tin tham chiếu địa lý:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr ""
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "Tập tin WKT:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "Chọn mã EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "Đường dẫn tới tập tin mã-EPSG:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "Chọn tập tin mã EPSG"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "Chọn mã EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "Đường dẫn tới tập tin mã-EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "Mã EPSG:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "Chọn tập tin mã EPSG"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "Không thể đọc các mã EPSG: %s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "Chọn phương thức chỉ định các tham số tham chiếu địa lý"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "Nhập chuỗi các thông số PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 msgid "Datum transform is required."
 msgstr "Cần phải chuyển đổi mốc tọa độ chuẩn."
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "CSDL GRASS:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "Tên vị trí:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "Tên vị trí:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "Phép chiếu:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "Định nghĩa PROJ.4:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "Bạn có muốn tạo vị trí GRASS <%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "Tạo vị trí mới?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "Định nghĩa vị trí GRASS mới"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -18107,15 +18738,15 @@ msgstr ""
 "\n"
 "Chi tiết: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "Hướng dẫn tạo Vị Trí bị hủy. Vị trí không được tạo."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "Không thể tạo vị trí mới"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, fuzzy, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -18125,240 +18756,245 @@ msgstr ""
 "cần phải thay đổi thư mục dữ liệu GIS mặc định trong màn hình khởi động "
 "GRASS."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "Thư mục dữ liệu GIS mới"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "Thiếu mã EPSG."
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "Thiếu mã EPSG."
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "Không tìm thấy tập tin."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "Thiết lập phạm vi vùng và độ phân giải mặc định"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "&Thiết lập vùng"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "Vị trí được chọn không hợp lệ."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "vùng không hợp lệ"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "Bấm vào đây để hiện thiết lập 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "Bấm vào đây để giấu các thiết lập 3D"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "Hàng: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "Cột: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "Ô:: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "Độ sâu: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "Ô 3D: %d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "Độ phân giải Đỉnh-Đáy"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "Bắc"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "Tây"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "Đông"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "Nam"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "Độ phân giải B-N"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "Độ phân giải Đ-T"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "Giá trị không hợp lệ: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "Chọn phép chuyển đổi mốc tọa độ chuẩn"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "Chọn từ danh sách các phép chuyển đổi mốc tọa độ chuẩn"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 #, fuzzy
 msgid "Easting"
 msgstr "Đông"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "Bắc"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 #, fuzzy
 msgid "Elevation"
 msgstr "theo độ cao"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "Tên nguồn"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "Chương trình tạo bề mặt."
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "Quản lý màu ảnh"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "Khoảng cách dọc theo tuyến"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "Khoảng cách dọc theo tuyến"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "trên bề mặt"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr "Đang nạp bản đồ raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr "Đang nạp bản đồ raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 msgid "failed"
 msgstr "thất bại"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr "Kiểu lớp '%s' không được hỗ trợ"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr "Không thể đóng bản đồ raster"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr "Không thể đóng bản đồ raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr "Bản đồ raster 3D"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr "đóng thành công"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr "Thất bại khi đang nạp bản đồ véc tơ <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr "Không thể đóng bản đồ véc tơ <%(name)s> (%(type)s)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr "Đóng thành công bản đồ véc tơ  <%(name)s> (%(type)s) "
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, fuzzy, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "Không tìm thấy lớp điểm véc tơ (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, fuzzy, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "Không thể đặt các thuộc tính cho lớp dữ liệu (id=%d)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -18369,813 +19005,813 @@ msgstr ""
 "
\n"
 "
%s"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 #, fuzzy
 msgid "constant#"
 msgstr "hằng số"
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "Xem"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "Phân tích"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "Lượng hóa"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "Phối cảnh:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "Độ phóng đại Z:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 #, fuzzy
 msgid "Look:"
 msgstr "Xem tại:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 #, fuzzy
 msgid "here"
 msgstr "cầu"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "Vẽ"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "đỉnh"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 #, fuzzy
 msgid "reset"
 msgstr "Đặt lại"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "Đặt lại về chế độ xem mặc định"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 #, fuzzy
 msgid "Record"
 msgstr "Nạp lại"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "Đổi tên tập bản đồ"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 msgid "Save image sequence"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "Chọn thư mục đầu vào"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 msgid "Surface"
 msgstr "Bề mặt"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "Bề mặt chi phí"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "Vec-tơ"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 #, fuzzy
 msgid "Lighting"
 msgstr "Làm nổi bật"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 msgid "Cutting planes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "Chế độ:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "thô"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "mịn"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "cả hai"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "Đổ bóng:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "phẳng"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "gouraud"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "Đặt cho tất cả"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "Dùng các thiết lập vẽ cho tất cả các bề mặt đã nạp"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "thô:"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "Độ phân giải"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "Kiểu"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "lưới"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "bề mặt"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "mịn:"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "Các thuộc tính bề mặt"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "Độ trong suốt"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "Độ bóng"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "bản đồ"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "khử thiết lập"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "hằng số"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "Đặt lại"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "Đặt lại về chế độ xem mặc định"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 msgid "clear"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "màu:"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "theo màu"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 #, fuzzy
 msgid "Horizontal X:"
 msgstr "Góc ngang"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 #, fuzzy
 msgid "Horizontal Y:"
 msgstr "Góc ngang"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "Độ phân giải"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 #, fuzzy
 msgid "Value:"
 msgstr "giá trị"
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "Độ trong suốt"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr "Hiện các đường véc tơ"
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 msgid "Vector lines"
 msgstr "Các đường véc tơ"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "Đường"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 msgid "width:"
 msgstr "rộng:"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 msgid "color:"
 msgstr "màu:"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 #, fuzzy
 msgid "use color for thematic mapping"
 msgstr "Phân loại dữ liệu thuộc tính, ví dụ để tạo bản đồ chủ đề"
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 #, fuzzy
 msgid "use width for thematic mapping"
 msgstr "Phân loại dữ liệu thuộc tính, ví dụ để tạo bản đồ chủ đề"
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "Thiết lập lựa chọn"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "trên bề mặt"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr "Độ cao trên bề mặt:"
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr "Hiện các điểm véc tơ"
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 msgid "Vector points"
 msgstr "Các điểm véc tơ"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 #, fuzzy
 msgid "Icon:"
 msgstr "Kích thước biểu tượng:"
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 #, fuzzy
 msgid "use size for thematic mapping"
 msgstr "Phân loại dữ liệu thuộc tính, ví dụ để tạo bản đồ chủ đề"
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr "các mặt đồng giá trị"
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr "Độ phân giải"
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr "Danh sách các bề mặt đồng giá trị"
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 #, fuzzy
 msgid "Show light model"
 msgstr "Hiện các đường"
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "Chọn vị trí nguồn:"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 msgid "Light color and intensity"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 #, fuzzy
 msgid "Brightness:"
 msgstr "Độ giàu"
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 msgid "Arrow length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 msgid "Scale bar length (in map units):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 msgid "Animation already axists"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 msgid "No file prefix given."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, python-format
 msgid "Directory %s does not exist."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr "Tính chất bề mặt đồng giá trị"
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 msgid "toggle normal direction"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "Tính chất bề mặt đồng giá trị"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 #, fuzzy
 msgid "Slice attributes"
 msgstr "Nhân bản các thuộc tính"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr "T"
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr "B"
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr "Đ"
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 #, fuzzy
 msgid "NW"
 msgstr "T"
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 #, fuzzy
 msgid "NE"
 msgstr "B"
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 #, fuzzy
 msgid "SE"
 msgstr "N"
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 #, fuzzy
 msgid "SW"
 msgstr "T"
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr "Cấp"
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "Danh sách các đối tượng bị trùng"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "Thêm lớp"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "Bản đồ véc tơ  <%s> là 3D"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "Bản đồ véc tơ  <%s> là 2D"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, fuzzy, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr "%(primitives)d đối tượng nguyên thủy (%(points)d điểm)"
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 msgid "on surface"
 msgstr "trên bề mặt"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "Quản lý"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "Bắc"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "Nam"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 #, fuzzy
 msgid "West edge:"
 msgstr "Phát hiện biên"
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "Bắc"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr "Cao:"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 #, fuzzy
 msgid "Easting (X):"
 msgstr "Đông"
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 #, fuzzy
 msgid "Bottom edge:"
 msgstr "Đáy"
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "Không tìm thấy bản đồ <%s>."
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "Hiện các thiết lập"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 #, fuzzy
 msgid "Revert settings to default, changes are not applied"
 msgstr "Trả về thiết lập mặc định và áp dụng thay đổi"
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "giá trị"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 #, fuzzy
 msgid "step:"
 msgstr "(bước):"
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr "Vị trí:"
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr "Xoắn:"
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "Di chuyển đỉnh"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr "Cao"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr "X:"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr "Màu lưới:"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr "Chỉ dấu:"
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "Các thiết lập Nviz được lưu vào tập tin <%s>."
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -19185,7 +19821,7 @@ msgid ""
 "You can reduce number of cells in current region using <g.region> command."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -19197,23 +19833,23 @@ msgid ""
 "Do you want to continue using Interactive Scatter Plot Tool with this region?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -19221,7 +19857,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -19232,31 +19868,31 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -19271,68 +19907,68 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "Thanh công cụ nắn chỉnh địa lý"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "Các điểm véc tơ"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "Đổi tên cột"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "Chọn màu"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 #, fuzzy
 msgid "Show"
 msgstr "Hiển thị lưới"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "Không có phạm trù nào"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "Không có phạm trù nào"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "Xuất bản đồ raster"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, fuzzy, python-format
 msgid "Change opacity of class <%s>"
 msgstr "Đặt độ mờ <%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr ""
 
@@ -19342,216 +19978,232 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 #, fuzzy
 msgid "Zoom to scatter plot extend"
 msgstr "Phóng đến phạm vi vùng đã lưu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "Thêm bản đồ raster 3D"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "Không có lớp bản đồ nào được chọn"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr ""
 "Loại bỏ các tập tin thành phần CSDL ra khỏi bộ bản đồ hiện tại của người "
 "dùng."
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "Tập tin vùng <%s> đã có. Bạn có muốn ghi đè không?"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "Đã tạo xong bản đồ véc tơ mới <%s>"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "Chọn màu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "Khử chọn GCP đã chọn"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "Chọn màu"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "Chọn theo khung"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "Các thiết lập trục"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "Chọn bản đồ raster 3 (tùy chọn):"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "Nắn chỉnh địa lý bản đồ véc-tơ <%s> thất bại"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "Thêm bản đồ raster 3D"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 #, fuzzy
 msgid "Pan mode for scatter plots"
 msgstr "Chọn bản đồ raster để tạo mặt cắt"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 #, fuzzy
 msgid "Show/hide class manager"
 msgstr "Phân loại hình ảnh"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "Truy vấn (các) bản đồ raster/véc tơ đã chọn"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr ""
 "Bạn muốn loại bỏ (các) lớp bản đồ được chọn khỏi sơ đồ lớp hình cây không?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "Thêm đỉnh mới"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "Mặt cắt"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "Di chuyển đỉnh"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "Di chuyển đỉnh"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "Loại bỏ đỉnh"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "Loại bỏ đỉnh"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "Thêm nhãn"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr "Đổi tên tập bản đồ đã chọn"
 
 #, fuzzy
+#~ msgid "Unsupported units"
+#~ msgstr "Kiểu lớp '%s' không được hỗ trợ"
+
+#, fuzzy
+#~ msgid "Map layers"
+#~ msgstr "Các Lớp Bản Đồ"
+
+#, fuzzy
+#~ msgid "Search modules"
+#~ msgstr "Chọn vị trí dự án và tập bản đồ"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "Bạn có muốn tạo vị trí GRASS <%s>?"
+
+#, fuzzy
 #~ msgid "Vector map %s already exists. "
 #~ msgstr "Không tìm thấy bản đồ <%s>."
 
@@ -19563,6 +20215,22 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgstr "Thoát khỏi giao diện đồ họa"
 
 #, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "vùng không hợp lệ"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "Không có chế độ xem 3D"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "Miền hợp lệ"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "Chép bảng"
+
+#, fuzzy
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "Danh sách lớp"
 
@@ -19579,16 +20247,35 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgstr "Thống kế raster một biến"
 
 #, fuzzy
-#~ msgid "Add condition"
-#~ msgstr "điều kiện"
+#~ msgid "Load settings:"
+#~ msgstr "Hiện các thiết lập"
+
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "Không thể vẽ lớp bản đồ <%s>."
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "Không thể vẽ chồng <%s>."
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "Nhập dữ liệu vec-tơ GRASS kiểu cũ"
 
 #, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "Thêm các lớp đã nhập vào sơ đồ lớp hình cây"
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "Nhập dữ liệu vec-tơ GRASS kiểu cũ"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "Nhập bản đồ véc tơ phiên bản cũ của GRASS"
+
+#, fuzzy
+#~ msgid "GPS data import"
+#~ msgstr "Nhập Dữ liệu GPS của GPSBabel"
+
+#~ msgid "GEOnet import"
+#~ msgstr "Nhập dữ liệu GEOnet"
 
 #, fuzzy
 #~ msgid "Unpacks a vector map packed with v.pack."
@@ -19611,32 +20298,6 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgid "Common export formats using OGR"
 #~ msgstr "Các định dạng xuất phổ biến"
 
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr ""
-#~ "Thiết lập vùng tính toán theo (các) bản đồ được chọn (bỏ qua các giá trị "
-#~ "RỖNG)"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "Nhập dữ liệu vec-tơ GRASS kiểu cũ"
-
-#, fuzzy
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "Nhập dữ liệu vec-tơ GRASS kiểu cũ"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "Nhập bản đồ véc tơ phiên bản cũ của GRASS"
-
-#, fuzzy
-#~ msgid "GPS data import"
-#~ msgstr "Nhập Dữ liệu GPS của GPSBabel"
-
-#~ msgid "GEOnet import"
-#~ msgstr "Nhập dữ liệu GEOnet"
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr ""
 #~ "Tính IDW (trọng số nghịch đảo theo khoảng cách) từ các điểm raster "
@@ -19649,12 +20310,25 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgstr "So sánh kiểu bit "
 
 #, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "Bộ Quản Lý Bảng Thuộc Tính"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "Chọn tập bản đồ nguồn:"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr ""
+#~ "Thiết lập vùng tính toán theo (các) bản đồ được chọn (bỏ qua các giá trị "
+#~ "RỖNG)"
+
+#, fuzzy
 #~ msgid "Data file <%(name)s> imported successfully."
 #~ msgstr "Đóng thành công bản đồ véc tơ  <%(name)s> (%(type)s) "
 
 #, fuzzy
-#~ msgid "Volume"
-#~ msgstr "Thể tích"
+#~ msgid "Add default servers"
+#~ msgstr "Thêm nhóm lớp"
 
 #~ msgid "Choose project location and mapset"
 #~ msgstr "Chọn vị trí dự án và tập bản đồ"
@@ -19706,10 +20380,6 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgstr "Khởi động GRASS"
 
 #, fuzzy
-#~ msgid "&Create mapset"
-#~ msgstr "Tạo tập bản đồ"
-
-#, fuzzy
 #~ msgid "&Location wizard"
 #~ msgstr "Hướng dẫn tạo Vị trí"
 
@@ -19732,16 +20402,30 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgid "Warning: "
 #~ msgstr "Cảnh báo"
 
-#, fuzzy
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "Chọn vị trí dự án và tập bản đồ"
-
 #~ msgid "Starting GRASS for the first time"
 #~ msgstr "Khởi động GRASS lần đầu tiên"
 
+#, fuzzy
+#~ msgid "Develop 3D rasters"
+#~ msgstr "Phát triển bản đồ raster"
+
+#, fuzzy
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "Thêm các lớp được liên kết vào sơ đồ lớp hình cây"
+
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "Thêm các lớp đã nhập vào sơ đồ lớp hình cây"
+
+#~ msgid "Imports older versions of GRASS vector maps."
+#~ msgstr "Nhập bản đồ véc tơ phiên bản cũ của GRASS"
+
 #~ msgid "Vector to volume"
 #~ msgstr "Vec-tơ thành thể tích"
 
+#~ msgid "Sites to vector"
+#~ msgstr "Đia điểm thành vec-tơ"
+
 #, fuzzy
 #~ msgid "Raster map calculator."
 #~ msgstr "Trình tính toán cho bản đồ raster 3 chiều"
@@ -19765,11 +20449,9 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgid "Voxel statistics"
 #~ msgstr "Thống kê voxel"
 
-#~ msgid "Imports older versions of GRASS vector maps."
-#~ msgstr "Nhập bản đồ véc tơ phiên bản cũ của GRASS"
-
-#~ msgid "Sites to vector"
-#~ msgstr "Đia điểm thành vec-tơ"
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "Thể tích"
 
 #~ msgid ""
 #~ "Imports US-NGA GEOnet Names Server (GNS) country files into a GRASS "
@@ -19807,6 +20489,5 @@ msgstr "Đổi tên tập bản đồ đã chọn"
 #~ msgstr ""
 #~ "Tính toán thống kê một biến từ các ô không rỗng của một bản đồ raster3d."
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "Bộ Quản Lý Bảng Thuộc Tính"
+#~ msgid "Digitize"
+#~ msgstr "Số hóa"
diff --git a/locale/po/grasswxpy_zh.po b/locale/po/grasswxpy_zh.po
index b1edc5e..4a1c9f8 100644
--- a/locale/po/grasswxpy_zh.po
+++ b/locale/po/grasswxpy_zh.po
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: GRASS\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2016-06-26 20:58+0200\n"
+"POT-Creation-Date: 2016-06-26 20:33+0200\n"
 "PO-Revision-Date: \n"
 "Last-Translator: Shulin Yang <shulin.yang.9 at gmail.com>\n"
 "Language-Team: Simplified Chinese <grass-translations at lists.osgeo.org>\n"
@@ -13,23 +13,23 @@ msgstr ""
 "Plural-Forms: nplurals=1; plural=0;\n"
 "X-Generator: Poedit 1.6.9\n"
 
-#: ../gui/wxpython/gis_set.py:107
+#: ../gui/wxpython/gis_set.py:120
 msgid "1. Select GRASS GIS database directory"
 msgstr "1. 选择GRASS数据库目录"
 
-#: ../gui/wxpython/gis_set.py:109
+#: ../gui/wxpython/gis_set.py:123
 msgid "2. Select GRASS Location"
 msgstr "2. 选择GRASS地点"
 
-#: ../gui/wxpython/gis_set.py:111
+#: ../gui/wxpython/gis_set.py:126
 msgid "3. Select GRASS Mapset"
 msgstr "3. 选择GRASS地图集"
 
-#: ../gui/wxpython/gis_set.py:129
+#: ../gui/wxpython/gis_set.py:144
 msgid "GRASS GIS database directory contains Locations."
 msgstr "包含GRASS地点的GRASS GIS数据库目录。"
 
-#: ../gui/wxpython/gis_set.py:133
+#: ../gui/wxpython/gis_set.py:148
 msgid ""
 "All data in one Location is in the same  coordinate reference system "
 "(projection). One Location can be one project. Location contains Mapsets."
@@ -37,178 +37,178 @@ msgstr ""
 "一个地点下的所有数据具有相同的坐标参考系统(即投影)。可将地点定义为一个投影。"
 "地点下包含地图集。"
 
-#: ../gui/wxpython/gis_set.py:141
+#: ../gui/wxpython/gis_set.py:156
 msgid ""
 "Mapset contains GIS data related to one project, task within one project, "
 "subregion or user."
 msgstr "地图集包含某个投影、其相关操作、子区域或用户的GIS数据。"
 
-#: ../gui/wxpython/gis_set.py:156
+#: ../gui/wxpython/gis_set.py:171
 msgid "Start &GRASS session"
 msgstr "启动&GRASS会话"
 
-#: ../gui/wxpython/gis_set.py:162
+#: ../gui/wxpython/gis_set.py:177
 msgid "&Browse"
 msgstr "浏览(&B)"
 
 #. GTC New mapset
-#: ../gui/wxpython/gis_set.py:165
+#: ../gui/wxpython/gis_set.py:180
 msgid "&New"
 msgstr "新建(&N)"
 
-#: ../gui/wxpython/gis_set.py:167
+#: ../gui/wxpython/gis_set.py:182
 msgid "Create a new Mapset in selected Location"
 msgstr "在选定的地点创建新地图集"
 
 #. GTC New location
-#: ../gui/wxpython/gis_set.py:170
+#: ../gui/wxpython/gis_set.py:185
 msgid "N&ew"
 msgstr "新建(&e)"
 
-#: ../gui/wxpython/gis_set.py:171
+#: ../gui/wxpython/gis_set.py:188
 msgid ""
 "Create a new location using location wizard. After location is created "
 "successfully, GRASS session is started."
 msgstr "使用地点向导创建新地点。之后启动GRASS会话。"
 
 #. GTC Rename location
-#: ../gui/wxpython/gis_set.py:176
+#: ../gui/wxpython/gis_set.py:193
 msgid "Ren&ame"
 msgstr "重命名(&a)"
 
-#: ../gui/wxpython/gis_set.py:177 ../gui/wxpython/gis_set.py:643
+#: ../gui/wxpython/gis_set.py:195 ../gui/wxpython/gis_set.py:688
 msgid "Rename selected location"
 msgstr "重命名选中的地点"
 
 #. GTC Delete location
-#: ../gui/wxpython/gis_set.py:180
+#: ../gui/wxpython/gis_set.py:198
 msgid "De&lete"
 msgstr "删除(&l)"
 
-#: ../gui/wxpython/gis_set.py:181 ../gui/wxpython/gis_set.py:713
+#: ../gui/wxpython/gis_set.py:200 ../gui/wxpython/gis_set.py:771
 msgid "Delete selected location"
 msgstr "删除选定地点"
 
 #. GTC Rename mapset
-#: ../gui/wxpython/gis_set.py:184 ../gui/wxpython/dbmgr/base.py:2167
+#: ../gui/wxpython/gis_set.py:203 ../gui/wxpython/datacatalog/tree.py:928
+#: ../gui/wxpython/dbmgr/base.py:2393
 msgid "&Rename"
 msgstr "重命名(&R)"
 
-#: ../gui/wxpython/gis_set.py:185 ../gui/wxpython/gis_set.py:607
+#: ../gui/wxpython/gis_set.py:204 ../gui/wxpython/gis_set.py:645
 msgid "Rename selected mapset"
 msgstr "重命名选中的地图集"
 
 #. GTC Delete mapset
-#: ../gui/wxpython/gis_set.py:188
+#: ../gui/wxpython/gis_set.py:207 ../gui/wxpython/datacatalog/tree.py:923
 msgid "&Delete"
 msgstr "删除(&D)"
 
-#: ../gui/wxpython/gis_set.py:189 ../gui/wxpython/gis_set.py:689
+#: ../gui/wxpython/gis_set.py:208 ../gui/wxpython/gis_set.py:743
 msgid "Delete selected mapset"
 msgstr "删除选中的地图集"
 
-#: ../gui/wxpython/gis_set.py:233
+#: ../gui/wxpython/gis_set.py:253
 #, python-format
 msgid "GRASS GIS %s startup%s"
 msgstr "GRASS GIS %s 启动 %s"
 
-#: ../gui/wxpython/gis_set.py:238
+#: ../gui/wxpython/gis_set.py:258
 msgid "Enter GRASS session"
 msgstr "开始GRASS会话"
 
-#: ../gui/wxpython/gis_set.py:257 ../gui/wxpython/gis_set.py:630
-#: ../gui/wxpython/gis_set.py:667 ../gui/wxpython/vdigit/dialogs.py:244
-#: ../gui/wxpython/vdigit/dialogs.py:436 ../gui/wxpython/gmodeler/frame.py:964
-#: ../gui/wxpython/psmap/dialogs.py:3946 ../gui/wxpython/lmgr/layertree.py:758
-#: ../gui/wxpython/gui_core/preferences.py:212
-#: ../gui/wxpython/gui_core/preferences.py:1386
-#: ../gui/wxpython/gui_core/preferences.py:1415
-#: ../gui/wxpython/gui_core/preferences.py:1424
-#: ../gui/wxpython/gui_core/preferences.py:1433
-#: ../gui/wxpython/core/workspace.py:1334 ../gui/wxpython/core/gcmd.py:115
-#: ../gui/wxpython/location_wizard/wizard.py:542
-#: ../gui/wxpython/location_wizard/wizard.py:726
-#: ../gui/wxpython/location_wizard/wizard.py:1504
-#: ../gui/wxpython/location_wizard/wizard.py:1570
-#: ../gui/wxpython/location_wizard/dialogs.py:114
-#: ../gui/wxpython/location_wizard/dialogs.py:131
-#: ../gui/wxpython/location_wizard/dialogs.py:439
+#: ../gui/wxpython/gis_set.py:277 ../gui/wxpython/gis_set.py:672
+#: ../gui/wxpython/gis_set.py:716 ../gui/wxpython/vdigit/dialogs.py:252
+#: ../gui/wxpython/vdigit/dialogs.py:446 ../gui/wxpython/gmodeler/frame.py:1086
+#: ../gui/wxpython/psmap/dialogs.py:5580 ../gui/wxpython/lmgr/layertree.py:974
+#: ../gui/wxpython/gui_core/preferences.py:238
+#: ../gui/wxpython/gui_core/preferences.py:1859
+#: ../gui/wxpython/gui_core/preferences.py:1892
+#: ../gui/wxpython/gui_core/preferences.py:1904
+#: ../gui/wxpython/gui_core/preferences.py:1916
+#: ../gui/wxpython/core/workspace.py:1510 ../gui/wxpython/core/gcmd.py:113
+#: ../gui/wxpython/location_wizard/wizard.py:602
+#: ../gui/wxpython/location_wizard/wizard.py:791
+#: ../gui/wxpython/location_wizard/wizard.py:1940
+#: ../gui/wxpython/location_wizard/dialogs.py:142
+#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:490
 msgid "Error"
 msgstr "错误"
 
-#: ../gui/wxpython/gis_set.py:258
+#: ../gui/wxpython/gis_set.py:278
 msgid "Unable to set GRASS database. Check your locale settings."
 msgstr "无法设置GRASS数据库。请检查区域设置。"
 
-#: ../gui/wxpython/gis_set.py:276
+#: ../gui/wxpython/gis_set.py:298
 #, python-format
 msgid "ERROR: Location <%s> not found\n"
 msgstr "错误:无法找到地点<%s>\n"
 
-#: ../gui/wxpython/gis_set.py:293
+#: ../gui/wxpython/gis_set.py:316
 #, python-format
 msgid "ERROR: Mapset <%s> not found\n"
 msgstr "错误:无法找到地图集<%s>\n"
 
-#: ../gui/wxpython/gis_set.py:451
+#: ../gui/wxpython/gis_set.py:477
 #, python-format
 msgid "Invalid line in GISRC file (%s):%s\n"
 msgstr "GISRC文件(%s)含有无效行:%s\n"
 
-#: ../gui/wxpython/gis_set.py:483
+#: ../gui/wxpython/gis_set.py:508
 #, python-brace-format
 msgid "Error: {text}"
 msgstr "错误:{text}"
 
-#: ../gui/wxpython/gis_set.py:515
+#: ../gui/wxpython/gis_set.py:542
 #, python-format
 msgid "Do you want to import <%(name)s> to the newly created location?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:519
+#: ../gui/wxpython/gis_set.py:545
 msgid "Import data?"
 msgstr "导入数据?"
 
-#: ../gui/wxpython/gis_set.py:531
+#: ../gui/wxpython/gis_set.py:557
 msgid "Do you want to create new mapset?"
 msgstr "创建新地图集?"
 
-#: ../gui/wxpython/gis_set.py:532 ../gui/wxpython/gis_set.py:893
-#: ../gui/wxpython/lmgr/frame.py:937 ../gui/wxpython/menustrings.py:236
+#: ../gui/wxpython/gis_set.py:558 ../gui/wxpython/gis_set.py:956
+#: ../gui/wxpython/lmgr/frame.py:1050 ../gui/wxpython/menustrings.py:236
 msgid "Create new mapset"
 msgstr "创建新数据集"
 
-#: ../gui/wxpython/gis_set.py:544 ../gui/wxpython/lmgr/frame.py:432
+#: ../gui/wxpython/gis_set.py:572 ../gui/wxpython/lmgr/frame.py:512
 #, fuzzy, python-format
 msgid "Location <%s> created"
 msgstr "位置名称"
 
-#: ../gui/wxpython/gis_set.py:545 ../gui/wxpython/lmgr/frame.py:430
+#: ../gui/wxpython/gis_set.py:573 ../gui/wxpython/lmgr/frame.py:510
 msgid "Do you want to set the default region extents and resolution now?"
 msgstr "现在设置地域范围和分辨率?"
 
-#: ../gui/wxpython/gis_set.py:585
+#: ../gui/wxpython/gis_set.py:616
 #, python-format
 msgid ""
 "Import of <%(name)s> failed.\n"
 "Reason: %(msg)s"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:588
+#: ../gui/wxpython/gis_set.py:623
 #, python-format
 msgid ""
 "Data file <%(name)s> imported successfully. The location's default region "
 "was set from this imported map."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:601
+#: ../gui/wxpython/gis_set.py:637
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
 "This mapset cannot be renamed."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:606 ../gui/wxpython/gis_set.py:642
+#: ../gui/wxpython/gis_set.py:643 ../gui/wxpython/gis_set.py:686
 #, python-format
 msgid ""
 "Current name: %s\n"
@@ -216,12 +216,12 @@ msgid ""
 "Enter new name:"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:618 ../gui/wxpython/gis_set.py:654
-#: ../gui/wxpython/lmgr/frame.py:2286 ../gui/wxpython/core/gcmd.py:149
+#: ../gui/wxpython/gis_set.py:658 ../gui/wxpython/gis_set.py:701
+#: ../gui/wxpython/lmgr/frame.py:2470 ../gui/wxpython/core/gcmd.py:151
 msgid "Message"
 msgstr "消息"
 
-#: ../gui/wxpython/gis_set.py:619
+#: ../gui/wxpython/gis_set.py:659
 #, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -229,7 +229,7 @@ msgid ""
 "Mapset <%s> already exists in location."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:631
+#: ../gui/wxpython/gis_set.py:673
 #, fuzzy, python-format
 msgid ""
 "Unable to rename mapset.\n"
@@ -237,7 +237,7 @@ msgid ""
 "%s"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/gis_set.py:655
+#: ../gui/wxpython/gis_set.py:702
 #, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -245,7 +245,7 @@ msgid ""
 "Location <%s> already exists in GRASS database."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:668
+#: ../gui/wxpython/gis_set.py:717
 #, fuzzy, python-format
 msgid ""
 "Unable to rename location.\n"
@@ -253,7 +253,7 @@ msgid ""
 "%s"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/gis_set.py:680
+#: ../gui/wxpython/gis_set.py:731
 msgid ""
 "Mapset <PERMANENT> is required for valid GRASS location.\n"
 "\n"
@@ -263,7 +263,7 @@ msgstr ""
 "\n"
 "不能删除。"
 
-#: ../gui/wxpython/gis_set.py:684
+#: ../gui/wxpython/gis_set.py:738
 #, python-format
 msgid ""
 "Do you want to continue with deleting mapset <%(mapset)s> from location <"
@@ -275,11 +275,11 @@ msgstr ""
 "\n"
 "该地图集下的所有地图将会被永久删除!"
 
-#: ../gui/wxpython/gis_set.py:698
+#: ../gui/wxpython/gis_set.py:752
 msgid "Unable to delete mapset"
 msgstr "无法删除地图集"
 
-#: ../gui/wxpython/gis_set.py:709
+#: ../gui/wxpython/gis_set.py:766
 #, python-format
 msgid ""
 "Do you want to continue with deleting location <%s>?\n"
@@ -290,42 +290,42 @@ msgstr ""
 "\n"
 "所有该地点下的地图将会被永久删除!"
 
-#: ../gui/wxpython/gis_set.py:724
+#: ../gui/wxpython/gis_set.py:782
 msgid "Unable to delete location"
 msgstr "无法删除地点"
 
-#: ../gui/wxpython/gis_set.py:734
+#: ../gui/wxpython/gis_set.py:792
 #, fuzzy
 msgid "Unicode error detected. Check your locale settings. Details: {}"
 msgstr "无法设置GRASS数据库。请检查区域设置。"
 
-#: ../gui/wxpython/gis_set.py:746
+#: ../gui/wxpython/gis_set.py:804
 #, python-format
 msgid ""
 "No GRASS Location found in '%s'. Create a new Location or choose different "
 "GRASS database directory."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:864
+#: ../gui/wxpython/gis_set.py:926
 #, fuzzy, python-format
 msgid "Path '%s' doesn't exist."
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/gis_set.py:879 ../gui/wxpython/gui_core/gselect.py:1078
+#: ../gui/wxpython/gis_set.py:941 ../gui/wxpython/gui_core/gselect.py:1175
 #, fuzzy
 msgid "Choose GIS Data Directory"
 msgstr "新GIS数据目录"
 
-#: ../gui/wxpython/gis_set.py:892 ../gui/wxpython/lmgr/frame.py:936
+#: ../gui/wxpython/gis_set.py:955 ../gui/wxpython/lmgr/frame.py:1049
 msgid "Enter name for new mapset:"
 msgstr "输入要创建的新地图集名称:"
 
-#: ../gui/wxpython/gis_set.py:905
+#: ../gui/wxpython/gis_set.py:970
 #, fuzzy, python-format
 msgid "Mapset <%s> already exists."
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/gis_set.py:910
+#: ../gui/wxpython/gis_set.py:977
 #, python-format
 msgid ""
 "Mapset <%s> is reserved for direct read access to OGR layers. Please "
@@ -334,17 +334,17 @@ msgid ""
 "Are you really sure that you want to create this mapset?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:914
+#: ../gui/wxpython/gis_set.py:982
 #, fuzzy
 msgid "Reserved mapset name"
 msgstr "打开设置"
 
-#: ../gui/wxpython/gis_set.py:937
+#: ../gui/wxpython/gis_set.py:1014
 #, python-format
 msgid "Unable to create new mapset: %s"
 msgstr "无法创建新地图集: %s"
 
-#: ../gui/wxpython/gis_set.py:950
+#: ../gui/wxpython/gis_set.py:1029
 #, python-format
 msgid ""
 "GRASS is already running in selected mapset <%(mapset)s>\n"
@@ -356,12 +356,12 @@ msgid ""
 "this operation) and continue?"
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:956 ../gui/wxpython/gis_set.py:968
+#: ../gui/wxpython/gis_set.py:1035 ../gui/wxpython/gis_set.py:1048
 #, fuzzy
 msgid "Lock file found"
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/gis_set.py:964
+#: ../gui/wxpython/gis_set.py:1044
 msgid ""
 "ARE YOU REALLY SURE?\n"
 "\n"
@@ -369,7 +369,7 @@ msgid ""
 "your data. Have another look in the processor manager just to be sure..."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:979
+#: ../gui/wxpython/gis_set.py:1058
 #, fuzzy, python-format
 msgid ""
 "Unable to remove '%(lock)s'.\n"
@@ -377,19 +377,19 @@ msgid ""
 "Details: %(reason)s"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/gis_set.py:1027
+#: ../gui/wxpython/gis_set.py:1108
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location or mapset. Please use only "
 "ASCII characters excluding %(chars)s and space."
 msgstr ""
 
-#: ../gui/wxpython/gis_set.py:1030 ../gui/wxpython/lmgr/layertree.py:789
+#: ../gui/wxpython/gis_set.py:1113 ../gui/wxpython/gui_core/widgets.py:844
 #, fuzzy
 msgid "Invalid name"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/gis_set.py:1098
+#: ../gui/wxpython/gis_set.py:1189
 #, fuzzy
 msgid ""
 "GRASS needs a directory (GRASS database) in which to store its data. Create "
@@ -410,190 +410,190 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:75
+#: ../gui/wxpython/iclass/frame.py:79
 #, fuzzy
 msgid "GRASS GIS Supervised Classification Tool"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/iclass/frame.py:294 ../gui/wxpython/mapswipe/frame.py:275
-#: ../gui/wxpython/gcp/mapdisplay.py:248 ../gui/wxpython/mapdisp/frame.py:473
-#: ../gui/wxpython/rlisetup/sampling_frame.py:99
+#: ../gui/wxpython/iclass/frame.py:312 ../gui/wxpython/mapswipe/frame.py:291
+#: ../gui/wxpython/gcp/mapdisplay.py:261 ../gui/wxpython/mapdisp/frame.py:512
+#: ../gui/wxpython/rlisetup/sampling_frame.py:102
 msgid "Map Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/iclass/frame.py:306
+#: ../gui/wxpython/iclass/frame.py:325
 #, fuzzy
 msgid "IClass Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/iclass/frame.py:318
+#: ../gui/wxpython/iclass/frame.py:337
 #, fuzzy
 msgid "IClass Misc Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/iclass/frame.py:335
+#: ../gui/wxpython/iclass/frame.py:364
 #, fuzzy
 msgid "Digitization Toolbar"
 msgstr "栅格数字化"
 
-#: ../gui/wxpython/iclass/frame.py:359
+#: ../gui/wxpython/iclass/frame.py:388
 msgid "Plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:379
+#: ../gui/wxpython/iclass/frame.py:408
 #, fuzzy
 msgid "Preview Display"
 msgstr "打印当前地图"
 
-#: ../gui/wxpython/iclass/frame.py:382
+#: ../gui/wxpython/iclass/frame.py:411
 #, fuzzy
 msgid "Training Areas Display"
 msgstr "要显示的文本: "
 
-#: ../gui/wxpython/iclass/frame.py:452
+#: ../gui/wxpython/iclass/frame.py:485
 msgid "Adjust Training Area Display to Preview Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:453
+#: ../gui/wxpython/iclass/frame.py:487
 msgid "Adjust Preview display to Training Area Display"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:454
+#: ../gui/wxpython/iclass/frame.py:489
 #, fuzzy
 msgid "Display synchronization ON"
 msgstr "显示地区"
 
-#: ../gui/wxpython/iclass/frame.py:455
+#: ../gui/wxpython/iclass/frame.py:491
 #, fuzzy
 msgid "Display synchronization OFF"
 msgstr "显示地区"
 
-#: ../gui/wxpython/iclass/frame.py:525
+#: ../gui/wxpython/iclass/frame.py:564
 msgid "All changes will be lost. Do you want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:533
+#: ../gui/wxpython/iclass/frame.py:573
 #, fuzzy
 msgid "Import vector map"
 msgstr "导出矢量图"
 
-#: ../gui/wxpython/iclass/frame.py:552
+#: ../gui/wxpython/iclass/frame.py:593
 #, fuzzy, python-format
 msgid "No areas in vector map <%s>.\n"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/iclass/frame.py:554
+#: ../gui/wxpython/iclass/frame.py:595
 #, fuzzy, python-format
 msgid "Vector map <%s> contains points or lines, these features are ignored."
 msgstr "起始矢量地图 %s 在当前范围之外"
 
-#: ../gui/wxpython/iclass/frame.py:579
+#: ../gui/wxpython/iclass/frame.py:622
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/iclass/frame.py:586
+#: ../gui/wxpython/iclass/frame.py:633
 #, fuzzy, python-format
 msgid "Unable to copy vector features from <%s>"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/iclass/frame.py:596
+#: ../gui/wxpython/iclass/frame.py:645
 #, fuzzy
 msgid "Unable to open temporary vector map"
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/iclass/frame.py:686
+#: ../gui/wxpython/iclass/frame.py:741
 msgid "No training areas to export."
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:698
+#: ../gui/wxpython/iclass/frame.py:754
 #, fuzzy, python-format
 msgid "%d training areas (%d classes) exported to vector map <%s>."
 msgstr "%d 个点写入矢量文件"
 
-#: ../gui/wxpython/iclass/frame.py:897
+#: ../gui/wxpython/iclass/frame.py:994
 #, fuzzy
 msgid "Failed to create temporary vector map."
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/iclass/frame.py:973
+#: ../gui/wxpython/iclass/frame.py:1090
 #, fuzzy, python-format
 msgid "No area in category %s. Category skipped."
 msgstr "跳过%-5d个坏线类别\n"
 
-#: ../gui/wxpython/iclass/frame.py:976
+#: ../gui/wxpython/iclass/frame.py:1094
 #, fuzzy
 msgid "Analysis failed."
 msgstr "分析"
 
-#: ../gui/wxpython/iclass/frame.py:983
+#: ../gui/wxpython/iclass/frame.py:1101
 msgid "results"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:989
+#: ../gui/wxpython/iclass/frame.py:1107
 #, fuzzy
 msgid "No imagery group selected."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/iclass/frame.py:994
+#: ../gui/wxpython/iclass/frame.py:1114
 msgid ""
 "Due to recent changes in classes, signatures can be outdated and should be "
 "recalculated. Do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:997
+#: ../gui/wxpython/iclass/frame.py:1117
 msgid "Outdated signatures"
 msgstr ""
 
-#: ../gui/wxpython/iclass/frame.py:1013
+#: ../gui/wxpython/iclass/frame.py:1135
 #, fuzzy, python-format
 msgid ""
 "A signature file named %s already exists.\n"
 "Do you want to replace it?"
 msgstr "工作区文件<%s>已经存在,是否覆盖?"
 
-#: ../gui/wxpython/iclass/frame.py:1015 ../gui/wxpython/gmodeler/frame.py:460
+#: ../gui/wxpython/iclass/frame.py:1138 ../gui/wxpython/gmodeler/frame.py:525
 #, fuzzy
 msgid "File already exists"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/iclass/frame.py:1061
+#: ../gui/wxpython/iclass/frame.py:1188
 #, fuzzy
 msgid "No imagery group selected. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/iclass/frame.py:1070
+#: ../gui/wxpython/iclass/frame.py:1199
 #, fuzzy, python-format
 msgid ""
 "Group <%(group)s> does not have enough files (it has %(files)d files). "
 "Operation canceled."
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/iclass/frame.py:1079
+#: ../gui/wxpython/iclass/frame.py:1207
 #, fuzzy
 msgid "No areas given. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/iclass/frame.py:1094
+#: ../gui/wxpython/iclass/frame.py:1222
 #, fuzzy
 msgid "Vector features are outside raster layers. Operation canceled."
 msgstr "非三维矢量地图,操作已取消。"
 
-#: ../gui/wxpython/iclass/plots.py:66
+#: ../gui/wxpython/iclass/plots.py:72
 #, fuzzy
 msgid "Histograms"
 msgstr "要素类型"
 
-#: ../gui/wxpython/iclass/plots.py:67
+#: ../gui/wxpython/iclass/plots.py:73
 msgid "Coincident plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/plots.py:68
+#: ../gui/wxpython/iclass/plots.py:74
 #, fuzzy
 msgid "Scatter plots"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/iclass/plots.py:83
+#: ../gui/wxpython/iclass/plots.py:98
 #, python-format
 msgid ""
 "Scatter plot functionality is disabled.\n"
@@ -602,321 +602,322 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:57
+#: ../gui/wxpython/iclass/digit.py:61
 msgid ""
 "You are trying to create a training area outside the computational region. "
 "Please, use g.region to set the appropriate region first."
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:66
+#: ../gui/wxpython/iclass/digit.py:72
 msgid ""
 "In order to create a training area, you have to select class first.\n"
 "\n"
 "There is no class yet, do you want to create one?"
 msgstr ""
 
-#: ../gui/wxpython/iclass/digit.py:70 ../gui/wxpython/iscatt/controllers.py:403
+#: ../gui/wxpython/iclass/digit.py:76 ../gui/wxpython/iscatt/controllers.py:413
 msgid "No class selected"
 msgstr "没有选择类别"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:71
+#: ../gui/wxpython/iclass/g.gui.iclass.py:75
 #, fuzzy
 msgid "Name of subgroup required"
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:75
-#: ../gui/wxpython/iclass/dialogs.py:189
+#: ../gui/wxpython/iclass/g.gui.iclass.py:79
+#: ../gui/wxpython/iclass/dialogs.py:202
 #, fuzzy, python-format
 msgid "Group <%s> not found"
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:80
+#: ../gui/wxpython/iclass/g.gui.iclass.py:84
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found"
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:87
-#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:75
-#: ../gui/wxpython/modules/histogram.py:352 ../gui/wxpython/nviz/wxnviz.py:329
-#: ../gui/wxpython/nviz/wxnviz.py:340
+#: ../gui/wxpython/iclass/g.gui.iclass.py:91
+#: ../gui/wxpython/mapswipe/g.gui.mapswipe.py:79
+#: ../gui/wxpython/modules/histogram.py:395 ../gui/wxpython/nviz/wxnviz.py:344
+#: ../gui/wxpython/nviz/wxnviz.py:355
 #, fuzzy, python-format
 msgid "Raster map <%s> not found"
 msgstr "未找到栅格图<%s>"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:93
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:59
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:44 ../gui/wxpython/nviz/wxnviz.py:417
+#: ../gui/wxpython/iclass/g.gui.iclass.py:98
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:62
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:48 ../gui/wxpython/nviz/wxnviz.py:432
 #, fuzzy, python-format
 msgid "Vector map <%s> not found"
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:115
+#: ../gui/wxpython/iclass/g.gui.iclass.py:121
 #, fuzzy, python-format
 msgid "Loading raster map <%s>..."
 msgstr "读取栅格文件 [%s] 时发生错误。"
 
-#: ../gui/wxpython/iclass/g.gui.iclass.py:118
+#: ../gui/wxpython/iclass/g.gui.iclass.py:124
 #, fuzzy, python-format
 msgid "Loading training map <%s>..."
 msgstr "读取栅格文件 [%s] 时发生错误。"
 
-#: ../gui/wxpython/iclass/dialogs.py:42 ../gui/wxpython/iclass/toolbars.py:37
-#: ../gui/wxpython/iscatt/toolbars.py:43
+#: ../gui/wxpython/iclass/dialogs.py:44 ../gui/wxpython/iclass/toolbars.py:40
+#: ../gui/wxpython/iscatt/toolbars.py:46
 #, fuzzy
 msgid "Select imagery group"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/iclass/dialogs.py:72 ../gui/wxpython/gcp/manager.py:464
+#: ../gui/wxpython/iclass/dialogs.py:78 ../gui/wxpython/gcp/manager.py:530
 msgid "Create/edit group..."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:78
+#: ../gui/wxpython/iclass/dialogs.py:85
 #, fuzzy
 msgid "Name of imagery group is missing."
 msgstr "选择颜色"
 
-#: ../gui/wxpython/iclass/dialogs.py:85
+#: ../gui/wxpython/iclass/dialogs.py:92
 #, fuzzy
 msgid "Name of imagery group:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/iclass/dialogs.py:97
+#: ../gui/wxpython/iclass/dialogs.py:107
 #, fuzzy
 msgid "Name of imagery subgroup:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/iclass/dialogs.py:171
+#: ../gui/wxpython/iclass/dialogs.py:182
 #, fuzzy
 msgid "Please choose a subgroup."
 msgstr "至少需要输入%d个点。"
 
-#: ../gui/wxpython/iclass/dialogs.py:174
+#: ../gui/wxpython/iclass/dialogs.py:186
 #, fuzzy, python-format
 msgid "Subgroup <%s> not found in group <%s>"
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/iclass/dialogs.py:180
+#: ../gui/wxpython/iclass/dialogs.py:193
 #, python-format
 msgid ""
 "No data found in subgroup <%s> of group <%s>.\n"
 "."
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:185
+#: ../gui/wxpython/iclass/dialogs.py:198
 #, fuzzy, python-format
 msgid ""
 "No data found in group <%s>.\n"
 "."
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/iclass/dialogs.py:232
+#: ../gui/wxpython/iclass/dialogs.py:250
 #, fuzzy
 msgid "Name of map is missing."
 msgstr "需要查询的已有栅格地图的名称"
 
-#: ../gui/wxpython/iclass/dialogs.py:239 ../gui/wxpython/gmodeler/dialogs.py:81
+#: ../gui/wxpython/iclass/dialogs.py:257 ../gui/wxpython/gmodeler/dialogs.py:89
 msgid "Name of raster map:"
 msgstr "栅格地图名称:"
 
-#: ../gui/wxpython/iclass/dialogs.py:241 ../gui/wxpython/gmodeler/dialogs.py:83
-#: ../gui/wxpython/gui_core/dialogs.py:213
+#: ../gui/wxpython/iclass/dialogs.py:259 ../gui/wxpython/gmodeler/dialogs.py:91
+#: ../gui/wxpython/gui_core/dialogs.py:237
 msgid "Name of vector map:"
 msgstr "矢量地图名称:"
 
-#: ../gui/wxpython/iclass/dialogs.py:261 ../gui/wxpython/iclass/toolbars.py:35
+#: ../gui/wxpython/iclass/dialogs.py:280 ../gui/wxpython/iclass/toolbars.py:37
 msgid "Class manager"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:276 ../gui/wxpython/iscatt/frame.py:129
+#: ../gui/wxpython/iclass/dialogs.py:295 ../gui/wxpython/iscatt/frame.py:140
 msgid "Classes"
 msgstr "类"
 
-#: ../gui/wxpython/iclass/dialogs.py:357 ../gui/wxpython/iscatt/frame.py:375
+#: ../gui/wxpython/iclass/dialogs.py:395 ../gui/wxpython/iscatt/frame.py:413
 #, fuzzy
 msgid "Class name"
 msgstr "列名"
 
-#: ../gui/wxpython/iclass/dialogs.py:358
-#: ../gui/wxpython/gmodeler/preferences.py:90
-#: ../gui/wxpython/gmodeler/preferences.py:345
-#: ../gui/wxpython/gmodeler/preferences.py:430
-#: ../gui/wxpython/psmap/dialogs.py:4592 ../gui/wxpython/psmap/dialogs.py:4847
-#: ../gui/wxpython/wxplot/dialogs.py:922 ../gui/wxpython/wxplot/dialogs.py:972
-#: ../gui/wxpython/nviz/tools.py:789 ../gui/wxpython/nviz/tools.py:2404
+#: ../gui/wxpython/iclass/dialogs.py:396
+#: ../gui/wxpython/gmodeler/preferences.py:106
+#: ../gui/wxpython/gmodeler/preferences.py:420
+#: ../gui/wxpython/gmodeler/preferences.py:532
+#: ../gui/wxpython/psmap/dialogs.py:6364 ../gui/wxpython/psmap/dialogs.py:6724
+#: ../gui/wxpython/wxplot/dialogs.py:1108
+#: ../gui/wxpython/wxplot/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:975
+#: ../gui/wxpython/nviz/tools.py:2815
 msgid "Color"
 msgstr "颜色"
 
-#: ../gui/wxpython/iclass/dialogs.py:390 ../gui/wxpython/iscatt/frame.py:412
+#: ../gui/wxpython/iclass/dialogs.py:429 ../gui/wxpython/iscatt/frame.py:451
 msgid "Please use only ASCII characters."
 msgstr "仅ASCII字符。"
 
-#: ../gui/wxpython/iclass/dialogs.py:500
+#: ../gui/wxpython/iclass/dialogs.py:545
 msgid "Zoom to training areas of selected class"
 msgstr ""
 
-#: ../gui/wxpython/iclass/dialogs.py:558
+#: ../gui/wxpython/iclass/dialogs.py:607
 #, fuzzy
 msgid "Save signature file"
 msgstr "保存当前显示为图片文件"
 
-#: ../gui/wxpython/iclass/dialogs.py:615
+#: ../gui/wxpython/iclass/dialogs.py:668
 #, fuzzy
 msgid "Enter name of signature file:"
 msgstr "输入要创建的新地图集名称:"
 
-#: ../gui/wxpython/iclass/dialogs.py:624
+#: ../gui/wxpython/iclass/dialogs.py:680
 #, fuzzy
 msgid "Signature file path:"
 msgstr "保存组文件"
 
-#: ../gui/wxpython/iclass/dialogs.py:666
+#: ../gui/wxpython/iclass/dialogs.py:730
 #, fuzzy
 msgid "Export training areas"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/iclass/dialogs.py:710 ../gui/wxpython/iscatt/dialogs.py:253
+#: ../gui/wxpython/iclass/dialogs.py:777 ../gui/wxpython/iscatt/dialogs.py:280
 #, fuzzy
 msgid "Enter name of new vector map:"
 msgstr "新的栅格文件的名称"
 
-#: ../gui/wxpython/iclass/dialogs.py:720
+#: ../gui/wxpython/iclass/dialogs.py:790 ../gui/wxpython/lmgr/layertree.py:572
 #, fuzzy
 msgid "Export attribute table"
 msgstr "打开属性表"
 
-#: ../gui/wxpython/iclass/dialogs.py:722
+#: ../gui/wxpython/iclass/dialogs.py:793
 #, fuzzy
 msgid "Export attribute table containing computed statistical data"
 msgstr "属性表导出"
 
-#: ../gui/wxpython/iclass/dialogs.py:760
+#: ../gui/wxpython/iclass/dialogs.py:832
 #, fuzzy, python-format
 msgid "Vector map <%s> already exists. Do you want to overwrite it?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/iclass/dialogs.py:762
+#: ../gui/wxpython/iclass/dialogs.py:835
 #, fuzzy, python-format
 msgid "Vector <%s> exists"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/iclass/toolbars.py:33
+#: ../gui/wxpython/iclass/toolbars.py:34
 #, fuzzy
 msgid "Set opacity level"
 msgstr "栅格值"
 
-#: ../gui/wxpython/iclass/toolbars.py:39
+#: ../gui/wxpython/iclass/toolbars.py:43
 msgid "Run analysis, update histogram and coincidence plots"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:41
+#: ../gui/wxpython/iclass/toolbars.py:46
 #, fuzzy
 msgid "Save signature file for i.maxlik"
 msgstr "保存当前显示为图片文件"
 
-#: ../gui/wxpython/iclass/toolbars.py:43
+#: ../gui/wxpython/iclass/toolbars.py:49
 #, fuzzy
 msgid "Remove selected map layer"
 msgstr "删除选中的图层"
 
-#: ../gui/wxpython/iclass/toolbars.py:45
+#: ../gui/wxpython/iclass/toolbars.py:52
 #, fuzzy
 msgid "Export training areas to vector map"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/iclass/toolbars.py:47
+#: ../gui/wxpython/iclass/toolbars.py:55
 #, fuzzy
 msgid "Import training areas from vector map"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/iclass/toolbars.py:49 ../gui/wxpython/lmgr/layertree.py:80
-#: ../gui/wxpython/gui_core/simplelmgr.py:455
+#: ../gui/wxpython/iclass/toolbars.py:58 ../gui/wxpython/lmgr/layertree.py:80
+#: ../gui/wxpython/gui_core/simplelmgr.py:475
 msgid "Add RGB map layer"
 msgstr "添加RGB图层"
 
-#: ../gui/wxpython/iclass/toolbars.py:66
+#: ../gui/wxpython/iclass/toolbars.py:76
 msgid "Training"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:66
-#: ../gui/wxpython/modules/colorrules.py:523
+#: ../gui/wxpython/iclass/toolbars.py:76
+#: ../gui/wxpython/modules/colorrules.py:581
 msgid "Preview"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:70
+#: ../gui/wxpython/iclass/toolbars.py:82
 #, fuzzy
 msgid "Set map canvas for "
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/iclass/toolbars.py:72
+#: ../gui/wxpython/iclass/toolbars.py:84
 #, fuzzy
 msgid "/ Zoom to map"
 msgstr "全图显示"
 
-#: ../gui/wxpython/iclass/toolbars.py:244
-#: ../gui/wxpython/iclass/toolbars.py:249
+#: ../gui/wxpython/iclass/toolbars.py:260
+#: ../gui/wxpython/iclass/toolbars.py:269
 msgid "std dev"
 msgstr ""
 
-#: ../gui/wxpython/iclass/toolbars.py:319
+#: ../gui/wxpython/iclass/toolbars.py:343
 #, fuzzy
 msgid "Add raster map"
 msgstr "基础栅格图"
 
-#: ../gui/wxpython/mapswipe/frame.py:43
+#: ../gui/wxpython/mapswipe/frame.py:44
 #, fuzzy
 msgid "GRASS GIS Map Swipe"
 msgstr "GRASS GIS层管理器"
 
-#: ../gui/wxpython/mapswipe/frame.py:287 ../gui/wxpython/animation/frame.py:146
+#: ../gui/wxpython/mapswipe/frame.py:303 ../gui/wxpython/animation/frame.py:160
 #, fuzzy
 msgid "Main Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/mapswipe/frame.py:299 ../gui/wxpython/animation/frame.py:167
-#: ../gui/wxpython/lmgr/frame.py:148
+#: ../gui/wxpython/mapswipe/frame.py:315 ../gui/wxpython/animation/frame.py:182
+#: ../gui/wxpython/lmgr/frame.py:157
 #, fuzzy
 msgid "Misc Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/mapswipe/frame.py:400
+#: ../gui/wxpython/mapswipe/frame.py:417
 #, fuzzy, python-format
 msgid "Map <%s> not found. "
 msgstr "未找到栅格图<%s>"
 
-#: ../gui/wxpython/mapswipe/frame.py:402 ../gui/wxpython/animation/utils.py:93
-#: ../gui/wxpython/animation/utils.py:101
-#: ../gui/wxpython/lmgr/layertree.py:1661
+#: ../gui/wxpython/mapswipe/frame.py:420 ../gui/wxpython/animation/utils.py:97
+#: ../gui/wxpython/animation/utils.py:105
+#: ../gui/wxpython/lmgr/layertree.py:1962
 #, python-format
 msgid "Map <%s> not found."
 msgstr "找不到地图<%s>。"
 
-#: ../gui/wxpython/mapswipe/frame.py:521 ../gui/wxpython/gcp/mapdisplay.py:368
-#: ../gui/wxpython/mapdisp/frame.py:734
+#: ../gui/wxpython/mapswipe/frame.py:550 ../gui/wxpython/gcp/mapdisplay.py:382
+#: ../gui/wxpython/mapdisp/frame.py:809
 msgid "Nothing to render (empty map). Operation canceled."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/frame.py:527 ../gui/wxpython/gcp/mapdisplay.py:383
-#: ../gui/wxpython/gmodeler/frame.py:579 ../gui/wxpython/mapdisp/frame.py:587
-#: ../gui/wxpython/modules/histogram.py:423
+#: ../gui/wxpython/mapswipe/frame.py:556 ../gui/wxpython/gcp/mapdisplay.py:397
+#: ../gui/wxpython/gmodeler/frame.py:652 ../gui/wxpython/mapdisp/frame.py:648
+#: ../gui/wxpython/modules/histogram.py:467
 msgid "Choose a file name to save the image (no need to add extension)"
 msgstr "选择要保存图像的文件名(无需指定文件扩展名)"
 
-#: ../gui/wxpython/mapswipe/frame.py:633 ../gui/wxpython/mapdisp/frame.py:823
+#: ../gui/wxpython/mapswipe/frame.py:674 ../gui/wxpython/mapdisp/frame.py:904
 msgid "No raster or vector map layer selected for querying."
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:42
-#: ../gui/wxpython/mapswipe/toolbars.py:28
+#: ../gui/wxpython/mapswipe/dialogs.py:43
+#: ../gui/wxpython/mapswipe/toolbars.py:33
 #, fuzzy
 msgid "Select raster maps"
 msgstr "导出栅格地图"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:119
+#: ../gui/wxpython/mapswipe/dialogs.py:129
 #, fuzzy
 msgid "Name of top/left raster map:"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:123
+#: ../gui/wxpython/mapswipe/dialogs.py:138
 #, fuzzy
 msgid "Name of bottom/right raster map:"
 msgstr ""
@@ -925,324 +926,324 @@ msgstr ""
 "#-#-#-#-#  grassmods_zh.po (grassmods_zh)  #-#-#-#-#\n"
 "输出栅格文件的名称"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:156
+#: ../gui/wxpython/mapswipe/dialogs.py:184
 #, fuzzy
 msgid "Switch to advanced mode"
 msgstr "结果矢量文件的名称"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:157
+#: ../gui/wxpython/mapswipe/dialogs.py:185
 msgid "Cancel"
 msgstr "取消"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:161
+#: ../gui/wxpython/mapswipe/dialogs.py:191
 msgid "Switch to simple mode"
 msgstr "切换到简单模式"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:162 ../gui/wxpython/menustrings.py:13
-#: ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/mapswipe/dialogs.py:192 ../gui/wxpython/menustrings.py:13
+#: ../gui/wxpython/menustrings.py:1943
 msgid "Close"
 msgstr "关闭"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:185
+#: ../gui/wxpython/mapswipe/dialogs.py:216
 #, fuzzy
 msgid "Name of the first map is missing."
 msgstr "用作掩膜的栅格文件的名称"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:187
+#: ../gui/wxpython/mapswipe/dialogs.py:219
 #, fuzzy
 msgid "Name of the second map is missing."
 msgstr "用作掩膜的栅格文件的名称"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:218
+#: ../gui/wxpython/mapswipe/dialogs.py:252
 #, fuzzy
 msgid "Map Swipe settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:233
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/dialogs.py:268
+#: ../gui/wxpython/mapswipe/toolbars.py:118
 #, fuzzy
 msgid "Mirror mode"
 msgstr "详细模式"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:236
+#: ../gui/wxpython/mapswipe/dialogs.py:271
 #, fuzzy
 msgid "Mirrored cursor"
 msgstr "详细模式"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:242 ../gui/wxpython/gcp/manager.py:2473
-#: ../gui/wxpython/psmap/dialogs.py:1771 ../gui/wxpython/psmap/dialogs.py:1874
-#: ../gui/wxpython/gui_core/preferences.py:1071
-#: ../gui/wxpython/nviz/tools.py:1151 ../gui/wxpython/nviz/tools.py:1795
-#: ../gui/wxpython/nviz/tools.py:1916 ../gui/wxpython/nviz/preferences.py:334
-#: ../gui/wxpython/nviz/preferences.py:491
-#: ../gui/wxpython/nviz/preferences.py:545
+#: ../gui/wxpython/mapswipe/dialogs.py:279 ../gui/wxpython/gcp/manager.py:2696
+#: ../gui/wxpython/psmap/dialogs.py:2361 ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/gui_core/preferences.py:1454
+#: ../gui/wxpython/nviz/tools.py:1422 ../gui/wxpython/nviz/tools.py:2153
+#: ../gui/wxpython/nviz/tools.py:2295 ../gui/wxpython/nviz/preferences.py:371
+#: ../gui/wxpython/nviz/preferences.py:573
+#: ../gui/wxpython/nviz/preferences.py:629
 msgid "Color:"
 msgstr "颜色:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:255
+#: ../gui/wxpython/mapswipe/dialogs.py:300
 msgid "Shape:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/dialogs.py:270 ../gui/wxpython/gcp/manager.py:2564
-#: ../gui/wxpython/psmap/dialogs.py:4895 ../gui/wxpython/vnet/dialogs.py:1176
-#: ../gui/wxpython/gui_core/preferences.py:1007
+#: ../gui/wxpython/mapswipe/dialogs.py:326 ../gui/wxpython/gcp/manager.py:2811
+#: ../gui/wxpython/psmap/dialogs.py:6799 ../gui/wxpython/vnet/dialogs.py:1278
+#: ../gui/wxpython/gui_core/preferences.py:1364
 msgid "Line width:"
 msgstr "线条宽度:"
 
-#: ../gui/wxpython/mapswipe/dialogs.py:283
-#: ../gui/wxpython/nviz/preferences.py:516
+#: ../gui/wxpython/mapswipe/dialogs.py:349
+#: ../gui/wxpython/nviz/preferences.py:598
 msgid "Size:"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:26
-#: ../gui/wxpython/modules/vclean.py:455
+#: ../gui/wxpython/mapswipe/toolbars.py:29
+#: ../gui/wxpython/modules/vclean.py:518
 msgid "Tools"
 msgstr ""
 
-#: ../gui/wxpython/mapswipe/toolbars.py:27
+#: ../gui/wxpython/mapswipe/toolbars.py:31
 msgid "Quit Map Swipe"
 msgstr "退出地图比较器"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:30
+#: ../gui/wxpython/mapswipe/toolbars.py:36
 #: ../gui/wxpython/mapdisp/toolbars.py:29
 msgid "Query raster/vector map(s)"
 msgstr "查询网格/矢量地图"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:31
+#: ../gui/wxpython/mapswipe/toolbars.py:37
 #: ../gui/wxpython/mapdisp/toolbars.py:30
 msgid "Query selected raster/vector map(s)"
 msgstr "查询选中的网格/矢量地图"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:111
+#: ../gui/wxpython/mapswipe/toolbars.py:117
 #, fuzzy
 msgid "Swipe mode"
 msgstr "安静模式"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:120
+#: ../gui/wxpython/mapswipe/toolbars.py:130
 #, fuzzy
 msgid "Choose view mode"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:144
+#: ../gui/wxpython/mapswipe/toolbars.py:154
 #, fuzzy
 msgid "Switch orientation"
 msgstr "相关性"
 
-#: ../gui/wxpython/mapswipe/toolbars.py:146
+#: ../gui/wxpython/mapswipe/toolbars.py:157
 #, fuzzy
 msgid "Switch maps"
 msgstr "列举地图"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:48
+#: ../gui/wxpython/gcp/mapdisplay.py:50
 #, fuzzy
 msgid "GRASS GIS Manage Ground Control Points"
 msgstr "设定地面控制点"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:163
+#: ../gui/wxpython/gcp/mapdisplay.py:176
 msgid "GCP List"
 msgstr "地面控制点(GCP)列表"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:168
+#: ../gui/wxpython/gcp/mapdisplay.py:181
 #, fuzzy
 msgid "Source Display"
 msgstr "数据库名称"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:172
+#: ../gui/wxpython/gcp/mapdisplay.py:185
 #, fuzzy
 msgid "Target Display"
 msgstr "要显示的文本: "
 
-#: ../gui/wxpython/gcp/mapdisplay.py:261
+#: ../gui/wxpython/gcp/mapdisplay.py:275
 #, fuzzy
 msgid "GCP Display toolbar"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:274
+#: ../gui/wxpython/gcp/mapdisplay.py:288
 msgid "GCP Manager toolbar"
 msgstr "地面控制点(GCP)管理器工具栏"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:412 ../gui/wxpython/psmap/toolbars.py:73
-#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/wxplot/base.py:558
-#: ../gui/wxpython/menustrings.py:1979 ../gui/wxpython/modules/histogram.py:452
+#: ../gui/wxpython/gcp/mapdisplay.py:426 ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/mapdisp/frame.py:820 ../gui/wxpython/wxplot/base.py:613
+#: ../gui/wxpython/menustrings.py:1985 ../gui/wxpython/modules/histogram.py:496
 msgid "Page setup"
 msgstr "页面设置"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:416 ../gui/wxpython/mapdisp/frame.py:749
-#: ../gui/wxpython/wxplot/base.py:559 ../gui/wxpython/modules/histogram.py:456
+#: ../gui/wxpython/gcp/mapdisplay.py:430 ../gui/wxpython/mapdisp/frame.py:824
+#: ../gui/wxpython/wxplot/base.py:614 ../gui/wxpython/modules/histogram.py:500
 msgid "Print preview"
 msgstr "打印预览"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:420 ../gui/wxpython/mapdisp/frame.py:753
-#: ../gui/wxpython/wxplot/base.py:560 ../gui/wxpython/gui_core/toolbars.py:67
-#: ../gui/wxpython/modules/histogram.py:460
+#: ../gui/wxpython/gcp/mapdisplay.py:434 ../gui/wxpython/mapdisp/frame.py:828
+#: ../gui/wxpython/wxplot/base.py:615 ../gui/wxpython/gui_core/toolbars.py:67
+#: ../gui/wxpython/modules/histogram.py:504
 msgid "Print display"
 msgstr "打印当前地图"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:459
+#: ../gui/wxpython/gcp/mapdisplay.py:474
 msgid "Zoom to computational region (set with g.region)"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:463 ../gui/wxpython/mapdisp/frame.py:1354
+#: ../gui/wxpython/gcp/mapdisplay.py:479 ../gui/wxpython/mapdisp/frame.py:1457
 msgid "Zoom to default region"
 msgstr "缩放到默认区域"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:467 ../gui/wxpython/mapdisp/frame.py:1355
+#: ../gui/wxpython/gcp/mapdisplay.py:483 ../gui/wxpython/mapdisp/frame.py:1459
 msgid "Zoom to saved region"
 msgstr "缩放到保存的区域"
 
-#: ../gui/wxpython/gcp/mapdisplay.py:471
+#: ../gui/wxpython/gcp/mapdisplay.py:488
 msgid "Set computational region from display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/mapdisplay.py:475 ../gui/wxpython/mapdisp/frame.py:1361
+#: ../gui/wxpython/gcp/mapdisplay.py:493 ../gui/wxpython/mapdisp/frame.py:1469
 msgid "Save display geometry to named region"
 msgstr "将显示范围保存到已命名的区域"
 
-#: ../gui/wxpython/gcp/statusbar.py:36
+#: ../gui/wxpython/gcp/statusbar.py:37
 msgid "Go to GCP No."
 msgstr "转到如下标号的地面控制点(GCP)。"
 
-#: ../gui/wxpython/gcp/statusbar.py:53
+#: ../gui/wxpython/gcp/statusbar.py:54
 #, fuzzy
 msgid "Valid Range:"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/gcp/statusbar.py:118
+#: ../gui/wxpython/gcp/statusbar.py:120
 msgid "RMS error"
 msgstr "均方差错误"
 
-#: ../gui/wxpython/gcp/statusbar.py:122
+#: ../gui/wxpython/gcp/statusbar.py:124
 #, python-format
 msgid "Forward: %(forw)s, Backward: %(back)s"
 msgstr "继续:%(forw)s,后退:%(back)s"
 
-#: ../gui/wxpython/gcp/manager.py:136
+#: ../gui/wxpython/gcp/manager.py:142
 msgid "Setup for georectification"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:169 ../gui/wxpython/gcp/manager.py:173
+#: ../gui/wxpython/gcp/manager.py:175 ../gui/wxpython/gcp/manager.py:179
 msgid "Georectifying setup canceled."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:315
+#: ../gui/wxpython/gcp/manager.py:344
 msgid "Select map type and location/mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:328
+#: ../gui/wxpython/gcp/manager.py:358
 msgid "Map type to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1460
-#: ../gui/wxpython/psmap/dialogs.py:696
-#: ../gui/wxpython/gui_core/dialogs.py:1329
-#: ../gui/wxpython/gui_core/dialogs.py:1561
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1650
+#: ../gui/wxpython/psmap/dialogs.py:906
+#: ../gui/wxpython/gui_core/dialogs.py:1450
+#: ../gui/wxpython/gui_core/dialogs.py:1695
 msgid "raster"
 msgstr "栅格"
 
-#: ../gui/wxpython/gcp/manager.py:329 ../gui/wxpython/gmodeler/frame.py:1461
-#: ../gui/wxpython/psmap/dialogs.py:697
-#: ../gui/wxpython/gui_core/dialogs.py:1329
+#: ../gui/wxpython/gcp/manager.py:359 ../gui/wxpython/gmodeler/frame.py:1651
+#: ../gui/wxpython/psmap/dialogs.py:909
+#: ../gui/wxpython/gui_core/dialogs.py:1450
 msgid "vector"
 msgstr "矢量"
 
-#: ../gui/wxpython/gcp/manager.py:336
+#: ../gui/wxpython/gcp/manager.py:369
 msgid "Select source location:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:345
+#: ../gui/wxpython/gcp/manager.py:390
 msgid "Select source mapset:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:399
+#: ../gui/wxpython/gcp/manager.py:446
 msgid "You must select a valid location before selecting a mapset"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:412
+#: ../gui/wxpython/gcp/manager.py:459
 msgid "You must select a valid location and mapset in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:431
+#: ../gui/wxpython/gcp/manager.py:481
 msgid "Select image/map group to georectify"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:449
+#: ../gui/wxpython/gcp/manager.py:503
 msgid "Select group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:460
+#: ../gui/wxpython/gcp/manager.py:520
 msgid "Create group if none exists"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:465
+#: ../gui/wxpython/gcp/manager.py:534
 msgid "Add vector map to group..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:477 ../gui/wxpython/gcp/manager.py:2666
+#: ../gui/wxpython/gcp/manager.py:554 ../gui/wxpython/gcp/manager.py:2968
 msgid "Extension for output maps:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:537
+#: ../gui/wxpython/gcp/manager.py:618
 msgid "You must select a valid image/map group in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:544
+#: ../gui/wxpython/gcp/manager.py:625
 msgid "You must enter an map name extension in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:610
+#: ../gui/wxpython/gcp/manager.py:694
 msgid "Select maps to display for ground control point (GCP) creation"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:618 ../gui/wxpython/gcp/manager.py:2602
+#: ../gui/wxpython/gcp/manager.py:706 ../gui/wxpython/gcp/manager.py:2863
 #, fuzzy
 msgid "Select source map to display:"
 msgstr "只打印矢量地图的范围"
 
-#: ../gui/wxpython/gcp/manager.py:629 ../gui/wxpython/gcp/manager.py:2607
+#: ../gui/wxpython/gcp/manager.py:732 ../gui/wxpython/gcp/manager.py:2877
 #, fuzzy
 msgid "Select target raster map to display:"
 msgstr "只打印矢量地图的范围"
 
-#: ../gui/wxpython/gcp/manager.py:640 ../gui/wxpython/gcp/manager.py:2612
+#: ../gui/wxpython/gcp/manager.py:755 ../gui/wxpython/gcp/manager.py:2891
 #, fuzzy
 msgid "Select target vector map to display:"
 msgstr "只打印矢量地图的范围"
 
-#: ../gui/wxpython/gcp/manager.py:703
+#: ../gui/wxpython/gcp/manager.py:827
 msgid "You must select a source map in order to continue"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:729 ../gui/wxpython/gcp/manager.py:759
+#: ../gui/wxpython/gcp/manager.py:854 ../gui/wxpython/gcp/manager.py:885
 #, python-format
 msgid ""
 "No maps in selected group <%s>.\n"
 "Please edit group or select another group."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:787
+#: ../gui/wxpython/gcp/manager.py:915
 #, fuzzy
 msgid "Manage Ground Control Points"
 msgstr "设定地面控制点"
 
-#: ../gui/wxpython/gcp/manager.py:1040
+#: ../gui/wxpython/gcp/manager.py:1180
 #, fuzzy, python-format
 msgid "At least %d GCPs required. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/gcp/manager.py:1172
+#: ../gui/wxpython/gcp/manager.py:1323
 msgid "source"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1174
+#: ../gui/wxpython/gcp/manager.py:1325
 msgid "target"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1176
+#: ../gui/wxpython/gcp/manager.py:1327
 #, fuzzy
 msgid "Set GCP coordinates"
 msgstr "地图北向格网坐标"
 
-#: ../gui/wxpython/gcp/manager.py:1177
+#: ../gui/wxpython/gcp/manager.py:1329
 #, python-format
 msgid ""
 "Set %(coor)s coordinates for GCP No. %(key)s? \n"
@@ -1251,30 +1252,30 @@ msgid ""
 "North: %(coor1)s"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1243
+#: ../gui/wxpython/gcp/manager.py:1407
 msgid "Writing POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1252
+#: ../gui/wxpython/gcp/manager.py:1419
 #, python-format
 msgid "POINTS file saved for group <%s>"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1267
+#: ../gui/wxpython/gcp/manager.py:1435
 #, fuzzy
 msgid "source mapwin not defined"
 msgstr "%s - 未发现"
 
-#: ../gui/wxpython/gcp/manager.py:1272
+#: ../gui/wxpython/gcp/manager.py:1440
 #, fuzzy
 msgid "target mapwin not defined"
 msgstr "数据库连接未定义"
 
-#: ../gui/wxpython/gcp/manager.py:1300
+#: ../gui/wxpython/gcp/manager.py:1470
 msgid "Reading POINTS file failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1382
+#: ../gui/wxpython/gcp/manager.py:1555
 #, python-format
 msgid ""
 "Insufficient points defined and active (checked) for selected rectification "
@@ -1284,273 +1285,273 @@ msgid ""
 "10+ points for 3rd order."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1409
+#: ../gui/wxpython/gcp/manager.py:1583
 msgid "Rectifying images, please wait..."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1449
+#: ../gui/wxpython/gcp/manager.py:1623
 #, fuzzy, python-format
 msgid "Transforming <%s>..."
 msgstr "读取地图"
 
-#: ../gui/wxpython/gcp/manager.py:1453
+#: ../gui/wxpython/gcp/manager.py:1628
 #, fuzzy, python-format
 msgid "Rectifying vector map <%s>, please wait..."
 msgstr "正在打开矢量地图<%s>,请稍候..."
 
-#: ../gui/wxpython/gcp/manager.py:1486
+#: ../gui/wxpython/gcp/manager.py:1662
 #, python-format
 msgid "Georectification of vector map <%s> failed"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1493
+#: ../gui/wxpython/gcp/manager.py:1668
 #, fuzzy
 msgid "GCP Manager settings"
 msgstr "改变区域设置"
 
-#: ../gui/wxpython/gcp/manager.py:1538
+#: ../gui/wxpython/gcp/manager.py:1715
 #, fuzzy
 msgid "Quit GCP Manager"
 msgstr "退出显示管理器"
 
-#: ../gui/wxpython/gcp/manager.py:1539
+#: ../gui/wxpython/gcp/manager.py:1716
 #, fuzzy
 msgid "Save ground control points?"
 msgstr "设定地面控制点"
 
-#: ../gui/wxpython/gcp/manager.py:1618
+#: ../gui/wxpython/gcp/manager.py:1795
 msgid ""
 "Could not calculate RMS Error.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1742
+#: ../gui/wxpython/gcp/manager.py:1923
 msgid ""
 "Could not calculate new extends.\n"
 "Possible error with m.transform."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1871
+#: ../gui/wxpython/gcp/manager.py:2055
 msgid "Adjust source display to target display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1875
+#: ../gui/wxpython/gcp/manager.py:2060
 msgid "Adjust target display to source display"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1948 ../gui/wxpython/gcp/manager.py:1965
-#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/gcp/manager.py:2134 ../gui/wxpython/gcp/manager.py:2152
+#: ../gui/wxpython/vnet/widgets.py:85 ../gui/wxpython/vnet/vnet_data.py:259
 msgid "use"
 msgstr "使用"
 
-#: ../gui/wxpython/gcp/manager.py:1949 ../gui/wxpython/gcp/manager.py:1966
+#: ../gui/wxpython/gcp/manager.py:2135 ../gui/wxpython/gcp/manager.py:2153
 #, fuzzy
 msgid "source E"
 msgstr "数据库名称"
 
-#: ../gui/wxpython/gcp/manager.py:1950 ../gui/wxpython/gcp/manager.py:1967
+#: ../gui/wxpython/gcp/manager.py:2136 ../gui/wxpython/gcp/manager.py:2154
 #, fuzzy
 msgid "source N"
 msgstr "数据库名称"
 
-#: ../gui/wxpython/gcp/manager.py:1951 ../gui/wxpython/gcp/manager.py:1968
+#: ../gui/wxpython/gcp/manager.py:2137 ../gui/wxpython/gcp/manager.py:2155
 msgid "target E"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1952 ../gui/wxpython/gcp/manager.py:1969
+#: ../gui/wxpython/gcp/manager.py:2138 ../gui/wxpython/gcp/manager.py:2156
 msgid "target N"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1953 ../gui/wxpython/gcp/manager.py:1970
+#: ../gui/wxpython/gcp/manager.py:2139 ../gui/wxpython/gcp/manager.py:2157
 msgid "Forward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:1954 ../gui/wxpython/gcp/manager.py:1971
+#: ../gui/wxpython/gcp/manager.py:2140 ../gui/wxpython/gcp/manager.py:2158
 msgid "Backward error"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2106
+#: ../gui/wxpython/gcp/manager.py:2295
 #, fuzzy
 msgid "Invalid coordinate value. Operation canceled."
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/gcp/manager.py:2151
+#: ../gui/wxpython/gcp/manager.py:2342
 msgid "Create vector map group"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2224
+#: ../gui/wxpython/gcp/manager.py:2417
 msgid "Select vector map(s) to add to group:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2271
+#: ../gui/wxpython/gcp/manager.py:2468
 msgid "Edit GCP"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2282
+#: ../gui/wxpython/gcp/manager.py:2480
 msgid "Ground Control Point No."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2301
+#: ../gui/wxpython/gcp/manager.py:2499
 #, fuzzy
 msgid "source E:"
 msgstr "数据库名称"
 
-#: ../gui/wxpython/gcp/manager.py:2302
+#: ../gui/wxpython/gcp/manager.py:2500
 msgid "target E:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2303
+#: ../gui/wxpython/gcp/manager.py:2501
 #, fuzzy
 msgid "source N:"
 msgstr "数据库名称"
 
-#: ../gui/wxpython/gcp/manager.py:2304
+#: ../gui/wxpython/gcp/manager.py:2502
 msgid "target N:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2407 ../gui/wxpython/vnet/dialogs.py:1198
-#: ../gui/wxpython/wxplot/dialogs.py:690 ../gui/wxpython/wxplot/dialogs.py:1139
-#: ../gui/wxpython/iscatt/dialogs.py:357
+#: ../gui/wxpython/gcp/manager.py:2608 ../gui/wxpython/vnet/dialogs.py:1306
+#: ../gui/wxpython/wxplot/dialogs.py:828 ../gui/wxpython/wxplot/dialogs.py:1427
+#: ../gui/wxpython/iscatt/dialogs.py:396
 msgid "Apply changes for the current session"
 msgstr "将变动应用到当前会话"
 
-#: ../gui/wxpython/gcp/manager.py:2409 ../gui/wxpython/vnet/dialogs.py:1200
-#: ../gui/wxpython/wxplot/dialogs.py:695 ../gui/wxpython/wxplot/dialogs.py:1141
-#: ../gui/wxpython/gui_core/preferences.py:93
-#: ../gui/wxpython/iscatt/dialogs.py:359
+#: ../gui/wxpython/gcp/manager.py:2611 ../gui/wxpython/vnet/dialogs.py:1309
+#: ../gui/wxpython/wxplot/dialogs.py:835 ../gui/wxpython/wxplot/dialogs.py:1431
+#: ../gui/wxpython/gui_core/preferences.py:98
+#: ../gui/wxpython/iscatt/dialogs.py:399
 msgid ""
 "Apply and save changes to user settings file (default for next sessions)"
 msgstr "应用改动并保存到用户设置文件(作为下次启动的默认设置)"
 
-#: ../gui/wxpython/gcp/manager.py:2411 ../gui/wxpython/vnet/dialogs.py:1202
-#: ../gui/wxpython/gui_core/dialogs.py:1692
-#: ../gui/wxpython/gui_core/dialogs.py:2056
-#: ../gui/wxpython/web_services/dialogs.py:133
-#: ../gui/wxpython/web_services/dialogs.py:844
-#: ../gui/wxpython/iscatt/dialogs.py:361
+#: ../gui/wxpython/gcp/manager.py:2613 ../gui/wxpython/vnet/dialogs.py:1311
+#: ../gui/wxpython/web_services/dialogs.py:144
+#: ../gui/wxpython/web_services/dialogs.py:899
+#: ../gui/wxpython/modules/import_export.py:106
+#: ../gui/wxpython/modules/import_export.py:648
+#: ../gui/wxpython/iscatt/dialogs.py:401
 msgid "Close dialog"
 msgstr "关闭对话框"
 
-#: ../gui/wxpython/gcp/manager.py:2433 ../gui/wxpython/vdigit/preferences.py:86
-#: ../gui/wxpython/psmap/dialogs.py:1948
+#: ../gui/wxpython/gcp/manager.py:2639 ../gui/wxpython/vdigit/preferences.py:97
+#: ../gui/wxpython/psmap/dialogs.py:2642
 msgid "Symbology"
 msgstr "符号样式"
 
-#: ../gui/wxpython/gcp/manager.py:2441
+#: ../gui/wxpython/gcp/manager.py:2648
 msgid "Highlight highest RMS error only"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2447
+#: ../gui/wxpython/gcp/manager.py:2661
 msgid "Highlight RMS error > M + SD * factor:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2448
+#: ../gui/wxpython/gcp/manager.py:2665
 msgid ""
 "Highlight GCPs with an RMS error larger than \n"
 "mean + standard deviation * given factor. \n"
 "Recommended values for this factor are between 1 and 2."
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2465
+#: ../gui/wxpython/gcp/manager.py:2688
 msgid "Symbol settings"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2490
+#: ../gui/wxpython/gcp/manager.py:2716
 msgid "Color for high RMS error:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2507
+#: ../gui/wxpython/gcp/manager.py:2736
 #, fuzzy
 msgid "Color for selected GCP:"
 msgstr "%d 条记录被更新"
 
-#: ../gui/wxpython/gcp/manager.py:2524
+#: ../gui/wxpython/gcp/manager.py:2756
 msgid "Color for unused GCPs:"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2540
+#: ../gui/wxpython/gcp/manager.py:2772
 msgid "Show unused GCPs"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2549
-#: ../gui/wxpython/gui_core/preferences.py:1019
+#: ../gui/wxpython/gcp/manager.py:2789
+#: ../gui/wxpython/gui_core/preferences.py:1381
 msgid "Symbol size:"
 msgstr "符号尺寸:"
 
-#: ../gui/wxpython/gcp/manager.py:2633
+#: ../gui/wxpython/gcp/manager.py:2917
 #, fuzzy
 msgid "Rectification"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/gcp/manager.py:2639
+#: ../gui/wxpython/gcp/manager.py:2926
 #, fuzzy
 msgid "Select rectification order"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2928
 msgid "1st order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2929
 msgid "2nd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2640
+#: ../gui/wxpython/gcp/manager.py:2930
 msgid "3rd order"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2648
+#: ../gui/wxpython/gcp/manager.py:2942
 #, fuzzy
 msgid "Select interpolation method:"
 msgstr "使用的插值方法"
 
-#: ../gui/wxpython/gcp/manager.py:2660
+#: ../gui/wxpython/gcp/manager.py:2958
 msgid "clip to computational region in target location"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2700
+#: ../gui/wxpython/gcp/manager.py:3009
 msgid "RMS threshold factor must be > 0"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2703
+#: ../gui/wxpython/gcp/manager.py:3012
 msgid ""
 "RMS threshold factor is < 1\n"
 "Too many points might be highlighted"
 msgstr ""
 
-#: ../gui/wxpython/gcp/manager.py:2850
+#: ../gui/wxpython/gcp/manager.py:3196
 #, fuzzy, python-format
 msgid "GCP Manager settings saved to file '%s'."
 msgstr "已有的MAT-File(v4)的名称"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:64
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:69
 #, fuzzy
 msgid "GRASS GIS Vector Digitizer"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:80
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
 #, fuzzy, python-format
 msgid "Vector digitizer not available. %s"
 msgstr "矢量文件 [%s] 不可用"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:85
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:90
 #, fuzzy, python-format
 msgid ""
 "Vector map <%s> not found in current mapset. New vector map can be created "
 "by providing '-c' flag."
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:88
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:94
 #, python-format
 msgid "New vector map <%s> created"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/g.gui.vdigit.py:92
+#: ../gui/wxpython/vdigit/g.gui.vdigit.py:101
 #, fuzzy, python-format
 msgid "Unable to create new vector map <%s>"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:948
+#: ../gui/wxpython/vdigit/wxdisplay.py:1017
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -1558,373 +1559,373 @@ msgid ""
 "vector map for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdisplay.py:952
+#: ../gui/wxpython/vdigit/wxdisplay.py:1022
 msgid "Topology missing"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:400
+#: ../gui/wxpython/vdigit/mapwindow.py:424
 msgid "Update categories"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:524
-#: ../gui/wxpython/vdigit/mapwindow.py:894
+#: ../gui/wxpython/vdigit/mapwindow.py:548
+#: ../gui/wxpython/vdigit/mapwindow.py:957
 msgid "No vector map selected for editing."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:532
+#: ../gui/wxpython/vdigit/mapwindow.py:557
 msgid "Nothing to do. Choose appropriate tool from digitizer toolbar."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/mapwindow.py:1019
+#: ../gui/wxpython/vdigit/mapwindow.py:1091
 msgid "Z bulk-labeling dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:31
-#: ../gui/wxpython/vdigit/toolbars.py:164
+#: ../gui/wxpython/vdigit/preferences.py:32
+#: ../gui/wxpython/vdigit/toolbars.py:174
 msgid "Digitization settings"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:57
+#: ../gui/wxpython/vdigit/preferences.py:63
 msgid "Apply changes for this session"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:60
+#: ../gui/wxpython/vdigit/preferences.py:67
 msgid "Close dialog and save changes to user settings file"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:62
-#: ../gui/wxpython/gmodeler/preferences.py:556
-#: ../gui/wxpython/psmap/dialogs.py:355 ../gui/wxpython/wxplot/dialogs.py:697
-#: ../gui/wxpython/wxplot/dialogs.py:1142
-#: ../gui/wxpython/gui_core/preferences.py:96
+#: ../gui/wxpython/vdigit/preferences.py:69
+#: ../gui/wxpython/gmodeler/preferences.py:695
+#: ../gui/wxpython/psmap/dialogs.py:461 ../gui/wxpython/wxplot/dialogs.py:837
+#: ../gui/wxpython/wxplot/dialogs.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:101
 msgid "Close dialog and ignore changes"
 msgstr "仅关闭对话框,不保存改动"
 
-#: ../gui/wxpython/vdigit/preferences.py:124
-#: ../gui/wxpython/gmodeler/preferences.py:47
-#: ../gui/wxpython/animation/dialogs.py:287
-#: ../gui/wxpython/animation/dialogs.py:1489
-#: ../gui/wxpython/gui_core/preferences.py:246
+#: ../gui/wxpython/vdigit/preferences.py:149
+#: ../gui/wxpython/gmodeler/preferences.py:53
+#: ../gui/wxpython/animation/dialogs.py:339
+#: ../gui/wxpython/animation/dialogs.py:1853
+#: ../gui/wxpython/gui_core/preferences.py:281
 msgid "General"
 msgstr "通用"
 
-#: ../gui/wxpython/vdigit/preferences.py:131 ../gui/wxpython/nviz/tools.py:1296
-#: ../gui/wxpython/nviz/tools.py:1470
+#: ../gui/wxpython/vdigit/preferences.py:160 ../gui/wxpython/nviz/tools.py:1573
+#: ../gui/wxpython/nviz/tools.py:1787
 msgid "Display"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:136
-#: ../gui/wxpython/wxplot/dialogs.py:883
+#: ../gui/wxpython/vdigit/preferences.py:165
+#: ../gui/wxpython/wxplot/dialogs.py:1053
 msgid "Line width"
 msgstr "线条宽度"
 
-#: ../gui/wxpython/vdigit/preferences.py:154
+#: ../gui/wxpython/vdigit/preferences.py:201
 msgid "Snapping"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:160
+#: ../gui/wxpython/vdigit/preferences.py:210
 msgid "Snapping threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 #, fuzzy
 msgid "screen pixels"
 msgstr "线宽(屏幕)"
 
-#: ../gui/wxpython/vdigit/preferences.py:167
+#: ../gui/wxpython/vdigit/preferences.py:219
 msgid "map units"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:176
+#: ../gui/wxpython/vdigit/preferences.py:238
 msgid "Snap also to vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:181
-#: ../gui/wxpython/vdigit/preferences.py:625
-#: ../gui/wxpython/vdigit/preferences.py:639
-#: ../gui/wxpython/vdigit/preferences.py:643
+#: ../gui/wxpython/vdigit/preferences.py:248
+#: ../gui/wxpython/vdigit/preferences.py:903
+#: ../gui/wxpython/vdigit/preferences.py:917
+#: ../gui/wxpython/vdigit/preferences.py:921
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:194
+#: ../gui/wxpython/vdigit/preferences.py:266
 msgid "Select vector features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:211
+#: ../gui/wxpython/vdigit/preferences.py:286
 msgid "Select threshold"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:224
+#: ../gui/wxpython/vdigit/preferences.py:307
 msgid "Select only features inside of selection bounding box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:226
+#: ../gui/wxpython/vdigit/preferences.py:314
 msgid ""
 "By default are selected all features overlapping selection bounding box "
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:229
+#: ../gui/wxpython/vdigit/preferences.py:317
 msgid "Check for duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:241
+#: ../gui/wxpython/vdigit/preferences.py:343
 #, fuzzy
 msgid "Digitize lines/boundaries"
 msgstr "数字化新界限"
 
-#: ../gui/wxpython/vdigit/preferences.py:244
+#: ../gui/wxpython/vdigit/preferences.py:347
 msgid "Break lines at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:254
+#: ../gui/wxpython/vdigit/preferences.py:370
 #, fuzzy
 msgid "Digitize areas"
 msgstr "矢量化新线"
 
-#: ../gui/wxpython/vdigit/preferences.py:257
+#: ../gui/wxpython/vdigit/preferences.py:374
 msgid "Close boundary (snap to the start node)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:267
+#: ../gui/wxpython/vdigit/preferences.py:397
 msgid "Save changes"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:270
+#: ../gui/wxpython/vdigit/preferences.py:400
 msgid "Save changes on exit"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:282
+#: ../gui/wxpython/vdigit/preferences.py:421
 #, fuzzy
 msgid "Query tool"
 msgstr "安静模式"
 
-#: ../gui/wxpython/vdigit/preferences.py:289
+#: ../gui/wxpython/vdigit/preferences.py:432
 msgid "Choose query tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:294
+#: ../gui/wxpython/vdigit/preferences.py:440
 msgid "Select by box"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:303
-#: ../gui/wxpython/vdigit/preferences.py:434
+#: ../gui/wxpython/vdigit/preferences.py:458
+#: ../gui/wxpython/vdigit/preferences.py:692
 msgid "length"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:308
+#: ../gui/wxpython/vdigit/preferences.py:470
 msgid "Select lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "shorter than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:310
-#: ../gui/wxpython/vdigit/preferences.py:333
+#: ../gui/wxpython/vdigit/preferences.py:473
+#: ../gui/wxpython/vdigit/preferences.py:527
 msgid "longer than"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:326
+#: ../gui/wxpython/vdigit/preferences.py:512
 msgid "dangle"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:331
+#: ../gui/wxpython/vdigit/preferences.py:524
 msgid "Select dangles"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:363
-#: ../gui/wxpython/gui_core/preferences.py:1056
+#: ../gui/wxpython/vdigit/preferences.py:580
+#: ../gui/wxpython/gui_core/preferences.py:1438
 msgid "Attributes"
 msgstr "属性"
 
-#: ../gui/wxpython/vdigit/preferences.py:370
+#: ../gui/wxpython/vdigit/preferences.py:591
 msgid "Digitize new feature"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:375
+#: ../gui/wxpython/vdigit/preferences.py:596
 msgid "Add new record into table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:383
-#: ../gui/wxpython/vdigit/dialogs.py:113 ../gui/wxpython/vdigit/dialogs.py:558
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2757
-#: ../gui/wxpython/dbmgr/base.py:3011 ../gui/wxpython/dbmgr/dialogs.py:495
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/preferences.py:613
+#: ../gui/wxpython/vdigit/dialogs.py:115 ../gui/wxpython/vdigit/dialogs.py:575
+#: ../gui/wxpython/dbmgr/base.py:2936 ../gui/wxpython/dbmgr/base.py:3057
+#: ../gui/wxpython/dbmgr/base.py:3323 ../gui/wxpython/dbmgr/dialogs.py:511
 #, fuzzy
 msgid "Layer"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/dialogs.py:120 ../gui/wxpython/vdigit/dialogs.py:559
-#: ../gui/wxpython/dbmgr/dialogs.py:496 ../gui/wxpython/dbmgr/dialogs.py:614
+#: ../gui/wxpython/vdigit/preferences.py:610
+#: ../gui/wxpython/vdigit/dialogs.py:122 ../gui/wxpython/vdigit/dialogs.py:576
+#: ../gui/wxpython/dbmgr/dialogs.py:511 ../gui/wxpython/dbmgr/dialogs.py:639
 msgid "Category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
+#: ../gui/wxpython/vdigit/preferences.py:611
 msgid "Mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:381
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:611
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Next to use"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:391
+#: ../gui/wxpython/vdigit/preferences.py:625
 msgid "Category number"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:401
+#: ../gui/wxpython/vdigit/preferences.py:641
 msgid "Category mode"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "Manual entry"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:403
+#: ../gui/wxpython/vdigit/preferences.py:643
 msgid "No category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:416
+#: ../gui/wxpython/vdigit/preferences.py:666
 msgid "Delete existing feature(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:421
+#: ../gui/wxpython/vdigit/preferences.py:671
 msgid "Delete record from table"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:431
+#: ../gui/wxpython/vdigit/preferences.py:689
 #, fuzzy
 msgid "Geometry attributes"
 msgstr "无法创建属性表"
 
-#: ../gui/wxpython/vdigit/preferences.py:435
-#: ../gui/wxpython/modules/vclean.py:200
+#: ../gui/wxpython/vdigit/preferences.py:693
+#: ../gui/wxpython/modules/vclean.py:226
 #, fuzzy
 msgid "area"
 msgstr "面\n"
 
-#: ../gui/wxpython/vdigit/preferences.py:436
+#: ../gui/wxpython/vdigit/preferences.py:694
 #, fuzzy
 msgid "perimeter"
 msgstr "参数:"
 
-#: ../gui/wxpython/vdigit/preferences.py:505
+#: ../gui/wxpython/vdigit/preferences.py:765
 msgid ""
 "Note: These settings are stored in the workspace not in the vector digitizer "
 "preferences."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:534
+#: ../gui/wxpython/vdigit/preferences.py:794
 #, fuzzy
 msgid "Digitize new line segment"
 msgstr "矢量化新线"
 
-#: ../gui/wxpython/vdigit/preferences.py:535
+#: ../gui/wxpython/vdigit/preferences.py:795
 #, fuzzy
 msgid "Digitize new line/boundary"
 msgstr "数字化新界限"
 
-#: ../gui/wxpython/vdigit/preferences.py:536
+#: ../gui/wxpython/vdigit/preferences.py:796
 msgid "Highlight"
 msgstr "高亮"
 
-#: ../gui/wxpython/vdigit/preferences.py:537
+#: ../gui/wxpython/vdigit/preferences.py:797
 msgid "Highlight (duplicates)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:538
-#: ../gui/wxpython/psmap/dialogs.py:4521 ../gui/wxpython/psmap/toolbars.py:100
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/vdigit/preferences.py:798
+#: ../gui/wxpython/psmap/dialogs.py:6265 ../gui/wxpython/psmap/toolbars.py:103
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Point"
 msgstr "点"
 
-#: ../gui/wxpython/vdigit/preferences.py:539
-#: ../gui/wxpython/psmap/toolbars.py:102
+#: ../gui/wxpython/vdigit/preferences.py:799
+#: ../gui/wxpython/psmap/toolbars.py:105
 msgid "Line"
 msgstr "线"
 
-#: ../gui/wxpython/vdigit/preferences.py:540
+#: ../gui/wxpython/vdigit/preferences.py:800
 msgid "Boundary (no area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:541
+#: ../gui/wxpython/vdigit/preferences.py:801
 msgid "Boundary (one area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:542
+#: ../gui/wxpython/vdigit/preferences.py:802
 msgid "Boundary (two areas)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:543
+#: ../gui/wxpython/vdigit/preferences.py:803
 msgid "Centroid (in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:544
+#: ../gui/wxpython/vdigit/preferences.py:804
 msgid "Centroid (outside area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:545
+#: ../gui/wxpython/vdigit/preferences.py:805
 msgid "Centroid (duplicate in area)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:546
+#: ../gui/wxpython/vdigit/preferences.py:806
 msgid "Node (one line)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:547
+#: ../gui/wxpython/vdigit/preferences.py:807
 msgid "Node (two lines)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:548
+#: ../gui/wxpython/vdigit/preferences.py:808
 msgid "Vertex"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:549
+#: ../gui/wxpython/vdigit/preferences.py:809
 msgid "Area (closed boundary + centroid)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:550
+#: ../gui/wxpython/vdigit/preferences.py:810
 msgid "Direction"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:618
+#: ../gui/wxpython/vdigit/preferences.py:894
 msgid "Snapping disabled"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:620
+#: ../gui/wxpython/vdigit/preferences.py:898
 #, python-format
 msgid "Snapping threshold is %(value).1f %(units)s (based on comp. resolution)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/preferences.py:676
+#: ../gui/wxpython/vdigit/preferences.py:954
 #, python-format
 msgid "Vector digitizer settings saved to file <%s>."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/wxdigit.py:54
+#: ../gui/wxpython/vdigit/wxdigit.py:56
 #, fuzzy
 msgid "Digitization Error"
 msgstr "栅格数字化"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:59
+#: ../gui/wxpython/vdigit/wxdigit.py:61
 #, fuzzy, python-format
 msgid "Unable to open vector map <%s>."
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:61 ../gui/wxpython/vdigit/toolbars.py:585
+#: ../gui/wxpython/vdigit/wxdigit.py:63 ../gui/wxpython/vdigit/toolbars.py:602
 #, fuzzy
 msgid "No vector map open for editing."
 msgstr "输入的 2D 矢量地图的名称"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:62
+#: ../gui/wxpython/vdigit/wxdigit.py:64
 #, fuzzy
 msgid "Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:69
+#: ../gui/wxpython/vdigit/wxdigit.py:71
 #, fuzzy, python-format
 msgid ""
 "Writing new feature failed. Operation canceled.\n"
@@ -1932,79 +1933,79 @@ msgid ""
 "Reason: %s"
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:78
+#: ../gui/wxpython/vdigit/wxdigit.py:80
 #, fuzzy, python-format
 msgid "Reading feature id %d failed. Operation canceled."
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:86
+#: ../gui/wxpython/vdigit/wxdigit.py:88
 #, fuzzy, python-format
 msgid "Database link %d not available. Operation canceled."
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:94
+#: ../gui/wxpython/vdigit/wxdigit.py:96
 #, fuzzy, python-format
 msgid "Unable to start database driver <%s>. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:102
+#: ../gui/wxpython/vdigit/wxdigit.py:106
 #, fuzzy, python-format
 msgid ""
 "Unable to open database <%(db)s> by driver <%(driver)s>. Operation canceled."
 msgstr "无法打开数据库%s,通过驱动%s"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:110
+#: ../gui/wxpython/vdigit/wxdigit.py:114
 #, fuzzy, python-format
 msgid "Unable to execute SQL query '%s'. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:118
+#: ../gui/wxpython/vdigit/wxdigit.py:122
 #, fuzzy, python-format
 msgid "Feature id %d is marked as dead. Operation canceled."
 msgstr "非三维矢量地图,操作已取消。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:126
+#: ../gui/wxpython/vdigit/wxdigit.py:130
 #, fuzzy, python-format
 msgid "Unsupported feature type %d. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:475
+#: ../gui/wxpython/vdigit/wxdigit.py:500
 #, fuzzy, python-format
 msgid "Unknown feature type '%s'"
 msgstr "未知的类型"
 
-#: ../gui/wxpython/vdigit/wxdigit.py:480
+#: ../gui/wxpython/vdigit/wxdigit.py:505
 #, fuzzy
 msgid "Not enough points for line"
 msgstr "要查询的坐标"
 
-#: ../gui/wxpython/vdigit/dialogs.py:76
+#: ../gui/wxpython/vdigit/dialogs.py:78
 msgid "List of categories - right-click to delete"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:107
+#: ../gui/wxpython/vdigit/dialogs.py:109
 msgid "Add new category"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:144 ../gui/wxpython/psmap/dialogs.py:359
-#: ../gui/wxpython/web_services/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:150 ../gui/wxpython/psmap/dialogs.py:465
+#: ../gui/wxpython/web_services/dialogs.py:684
 msgid "Apply changes"
 msgstr "使改动生效"
 
-#: ../gui/wxpython/vdigit/dialogs.py:146
+#: ../gui/wxpython/vdigit/dialogs.py:152
 msgid "Ignore changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:148
-#: ../gui/wxpython/web_services/dialogs.py:649
+#: ../gui/wxpython/vdigit/dialogs.py:154
+#: ../gui/wxpython/web_services/dialogs.py:689
 msgid "Apply changes and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:168 ../gui/wxpython/dbmgr/dialogs.py:142
+#: ../gui/wxpython/vdigit/dialogs.py:174 ../gui/wxpython/dbmgr/dialogs.py:148
 msgid "Feature id:"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:239 ../gui/wxpython/vdigit/dialogs.py:458
+#: ../gui/wxpython/vdigit/dialogs.py:247 ../gui/wxpython/vdigit/dialogs.py:471
 #, python-format
 msgid ""
 "Unable to add new layer/category <%(layer)s/%(category)s>.\n"
@@ -2012,149 +2013,149 @@ msgid ""
 "Layer number must be greater than zero."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:275
-#: ../gui/wxpython/gmodeler/dialogs.py:778
-#: ../gui/wxpython/gmodeler/dialogs.py:939
+#: ../gui/wxpython/vdigit/dialogs.py:283
+#: ../gui/wxpython/gmodeler/dialogs.py:844
+#: ../gui/wxpython/gmodeler/dialogs.py:1013
 msgid "Delete selected"
 msgstr "删除选中项目"
 
-#: ../gui/wxpython/vdigit/dialogs.py:279
-#: ../gui/wxpython/gmodeler/dialogs.py:779
+#: ../gui/wxpython/vdigit/dialogs.py:287
+#: ../gui/wxpython/gmodeler/dialogs.py:845
 msgid "Delete all"
 msgstr "全部删除"
 
-#: ../gui/wxpython/vdigit/dialogs.py:281
-#: ../gui/wxpython/gmodeler/dialogs.py:785
-#: ../gui/wxpython/gmodeler/dialogs.py:943 ../gui/wxpython/dbmgr/base.py:1294
-#: ../gui/wxpython/dbmgr/base.py:2316
+#: ../gui/wxpython/vdigit/dialogs.py:289
+#: ../gui/wxpython/gmodeler/dialogs.py:851
+#: ../gui/wxpython/gmodeler/dialogs.py:1017 ../gui/wxpython/dbmgr/base.py:1422
+#: ../gui/wxpython/dbmgr/base.py:2572
 msgid "Reload"
 msgstr "刷新"
 
-#: ../gui/wxpython/vdigit/dialogs.py:435
+#: ../gui/wxpython/vdigit/dialogs.py:445
 msgid "Unable to update vector map."
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:595
+#: ../gui/wxpython/vdigit/dialogs.py:621
 #, python-format
 msgid "%d lines selected for z bulk-labeling"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:598
+#: ../gui/wxpython/vdigit/dialogs.py:629
 msgid "Set value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:605
+#: ../gui/wxpython/vdigit/dialogs.py:636
 msgid "Starting value"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:614
+#: ../gui/wxpython/vdigit/dialogs.py:648
 msgid "Step"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:644
+#: ../gui/wxpython/vdigit/dialogs.py:691
 msgid "List of duplicates"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/dialogs.py:740
+#: ../gui/wxpython/vdigit/dialogs.py:800
 #, fuzzy
 msgid "Feature id"
 msgstr "要素类型"
 
-#: ../gui/wxpython/vdigit/dialogs.py:741
+#: ../gui/wxpython/vdigit/dialogs.py:801
 msgid "Layer (Categories)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:97
+#: ../gui/wxpython/vdigit/toolbars.py:107
 msgid "Select area/boundary/centroid tool"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:123
+#: ../gui/wxpython/vdigit/toolbars.py:133
 msgid "Digitize new point"
 msgstr "矢量化新点"
 
-#: ../gui/wxpython/vdigit/toolbars.py:124
-#: ../gui/wxpython/vdigit/toolbars.py:133
-#: ../gui/wxpython/vdigit/toolbars.py:136
+#: ../gui/wxpython/vdigit/toolbars.py:134
+#: ../gui/wxpython/vdigit/toolbars.py:143
+#: ../gui/wxpython/vdigit/toolbars.py:146
 msgid "Left: new point"
 msgstr "左:创建新点"
 
-#: ../gui/wxpython/vdigit/toolbars.py:126
+#: ../gui/wxpython/vdigit/toolbars.py:136
 msgid "Digitize new line"
 msgstr "矢量化新线"
 
-#: ../gui/wxpython/vdigit/toolbars.py:127
-#: ../gui/wxpython/vdigit/toolbars.py:130
-#: ../gui/wxpython/vdigit/toolbars.py:154
+#: ../gui/wxpython/vdigit/toolbars.py:137
+#: ../gui/wxpython/vdigit/toolbars.py:140
+#: ../gui/wxpython/vdigit/toolbars.py:164
 #, fuzzy
 msgid "Left: new point; Ctrl+Left: undo last point; Right: close line"
 msgstr "左:创建新点;中:取消最近一次创建的点;右:结束该线"
 
-#: ../gui/wxpython/vdigit/toolbars.py:129
+#: ../gui/wxpython/vdigit/toolbars.py:139
 msgid "Digitize new boundary"
 msgstr "数字化新界限"
 
-#: ../gui/wxpython/vdigit/toolbars.py:132
+#: ../gui/wxpython/vdigit/toolbars.py:142
 msgid "Digitize new centroid"
 msgstr "数字化新形心"
 
-#: ../gui/wxpython/vdigit/toolbars.py:135
+#: ../gui/wxpython/vdigit/toolbars.py:145
 #, fuzzy
 msgid "Digitize new area (boundary without category)"
 msgstr "数字化新界限"
 
-#: ../gui/wxpython/vdigit/toolbars.py:138
+#: ../gui/wxpython/vdigit/toolbars.py:148
 #, fuzzy
 msgid "Add new vertex to line or boundary"
 msgstr "设置 GRASS 变量"
 
-#: ../gui/wxpython/vdigit/toolbars.py:139
-#: ../gui/wxpython/vdigit/toolbars.py:142
-#: ../gui/wxpython/vdigit/toolbars.py:145
-#: ../gui/wxpython/vdigit/toolbars.py:157
-#: ../gui/wxpython/vdigit/toolbars.py:160
-#: ../gui/wxpython/vdigit/toolbars.py:163
-#: ../gui/wxpython/vdigit/toolbars.py:172
+#: ../gui/wxpython/vdigit/toolbars.py:149
+#: ../gui/wxpython/vdigit/toolbars.py:152
+#: ../gui/wxpython/vdigit/toolbars.py:155
+#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:173
+#: ../gui/wxpython/vdigit/toolbars.py:182
 #, fuzzy
 msgid "Left: Select; Ctrl+Left: Unselect; Right: Confirm"
 msgstr "左:选择;中:撤消选择;右:确认"
 
-#: ../gui/wxpython/vdigit/toolbars.py:141
+#: ../gui/wxpython/vdigit/toolbars.py:151
 msgid "Delete selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:144
+#: ../gui/wxpython/vdigit/toolbars.py:154
 #, fuzzy
 msgid "Delete selected area(s)"
 msgstr "删除选中的地图集"
 
-#: ../gui/wxpython/vdigit/toolbars.py:147
+#: ../gui/wxpython/vdigit/toolbars.py:157
 msgid "Display/update attributes"
 msgstr "显示/更新属性"
 
-#: ../gui/wxpython/vdigit/toolbars.py:148
-#: ../gui/wxpython/vdigit/toolbars.py:151
+#: ../gui/wxpython/vdigit/toolbars.py:158
+#: ../gui/wxpython/vdigit/toolbars.py:161
 msgid "Left: Select"
 msgstr "左:选择"
 
-#: ../gui/wxpython/vdigit/toolbars.py:150
+#: ../gui/wxpython/vdigit/toolbars.py:160
 msgid "Display/update categories"
 msgstr "显示/更新类别"
 
-#: ../gui/wxpython/vdigit/toolbars.py:153
+#: ../gui/wxpython/vdigit/toolbars.py:163
 #, fuzzy
 msgid "Edit selected line/boundary"
 msgstr "编辑线/边界"
 
-#: ../gui/wxpython/vdigit/toolbars.py:156
+#: ../gui/wxpython/vdigit/toolbars.py:166
 msgid "Move selected point(s), line(s), boundary(ies) or centroid(s)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:159
+#: ../gui/wxpython/vdigit/toolbars.py:169
 #, fuzzy
 msgid "Move selected vertex"
 msgstr "移动顶点"
 
-#: ../gui/wxpython/vdigit/toolbars.py:162
+#: ../gui/wxpython/vdigit/toolbars.py:172
 #, fuzzy
 msgid "Remove selected vertex"
 msgstr ""
@@ -2162,111 +2163,111 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:165
+#: ../gui/wxpython/vdigit/toolbars.py:175
 msgid "Quit digitizer"
 msgstr "退出地图数字化"
 
-#: ../gui/wxpython/vdigit/toolbars.py:166
+#: ../gui/wxpython/vdigit/toolbars.py:176
 msgid "Quit digitizer and save changes"
 msgstr "退出地图数字化并保存结果"
 
-#: ../gui/wxpython/vdigit/toolbars.py:167
+#: ../gui/wxpython/vdigit/toolbars.py:177
 #, fuzzy
 msgid "Vector Digitizer manual"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/vdigit/toolbars.py:168
+#: ../gui/wxpython/vdigit/toolbars.py:178
 #, fuzzy
 msgid "Show Vector Digitizer manual"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/vdigit/toolbars.py:170
+#: ../gui/wxpython/vdigit/toolbars.py:180
 msgid "Additional tools (copy, flip, connect, etc.)"
 msgstr "更多工具(复制,翻转,连接等)"
 
-#: ../gui/wxpython/vdigit/toolbars.py:174
+#: ../gui/wxpython/vdigit/toolbars.py:184 ../gui/wxpython/rdigit/toolbars.py:33
 msgid "Undo"
 msgstr "撤消"
 
-#: ../gui/wxpython/vdigit/toolbars.py:175
+#: ../gui/wxpython/vdigit/toolbars.py:185
 msgid "Undo previous changes"
 msgstr "撤消前一改动"
 
-#: ../gui/wxpython/vdigit/toolbars.py:177
+#: ../gui/wxpython/vdigit/toolbars.py:187
 msgid "Redo"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:178
+#: ../gui/wxpython/vdigit/toolbars.py:188
 #, fuzzy
 msgid "Redo previous changes"
 msgstr "撤消前一改动"
 
-#: ../gui/wxpython/vdigit/toolbars.py:541
+#: ../gui/wxpython/vdigit/toolbars.py:558
 msgid "Break selected lines/boundaries at intersection"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:543
+#: ../gui/wxpython/vdigit/toolbars.py:560
 msgid "Connect selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:545
+#: ../gui/wxpython/vdigit/toolbars.py:562
 msgid "Copy categories"
 msgstr "复制类别"
 
-#: ../gui/wxpython/vdigit/toolbars.py:547
+#: ../gui/wxpython/vdigit/toolbars.py:564
 msgid "Copy features from (background) vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:549
+#: ../gui/wxpython/vdigit/toolbars.py:566
 #, fuzzy
 msgid "Copy attributes"
 msgstr "无法创建属性表"
 
-#: ../gui/wxpython/vdigit/toolbars.py:551
+#: ../gui/wxpython/vdigit/toolbars.py:568
 msgid "Feature type conversion"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:553
+#: ../gui/wxpython/vdigit/toolbars.py:570
 msgid "Flip selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:555
+#: ../gui/wxpython/vdigit/toolbars.py:572
 msgid "Merge selected lines/boundaries"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:557
+#: ../gui/wxpython/vdigit/toolbars.py:574
 msgid "Snap selected lines/boundaries (only to nodes)"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:559
+#: ../gui/wxpython/vdigit/toolbars.py:576
 msgid "Split line/boundary"
 msgstr "拆分线/边界"
 
-#: ../gui/wxpython/vdigit/toolbars.py:561
+#: ../gui/wxpython/vdigit/toolbars.py:578
 msgid "Query features"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:563
+#: ../gui/wxpython/vdigit/toolbars.py:580
 msgid "Z bulk-labeling of 3D lines"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:589
+#: ../gui/wxpython/vdigit/toolbars.py:607
 #, fuzzy
 msgid "Select background vector map"
 msgstr "输出矢量文件的名称"
 
-#: ../gui/wxpython/vdigit/toolbars.py:746
+#: ../gui/wxpython/vdigit/toolbars.py:767
 msgid "Vector map is not 3D. Operation canceled."
 msgstr "非三维矢量地图,操作已取消。"
 
-#: ../gui/wxpython/vdigit/toolbars.py:819
-#: ../gui/wxpython/vdigit/toolbars.py:957
-#: ../gui/wxpython/vdigit/toolbars.py:1045
-#: ../gui/wxpython/gui_core/dialogs.py:191
+#: ../gui/wxpython/vdigit/toolbars.py:841
+#: ../gui/wxpython/vdigit/toolbars.py:998
+#: ../gui/wxpython/vdigit/toolbars.py:1096
+#: ../gui/wxpython/gui_core/dialogs.py:211
 msgid "Select vector map"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:848
+#: ../gui/wxpython/vdigit/toolbars.py:873
 #, python-format
 msgid ""
 "Topology for vector map <%s> is not available. Topology is required by "
@@ -2275,422 +2276,805 @@ msgid ""
 "for editing?"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:852
+#: ../gui/wxpython/vdigit/toolbars.py:878
 #, fuzzy
 msgid "Digitizer error"
 msgstr "栅格数字化"
 
-#: ../gui/wxpython/vdigit/toolbars.py:872
+#: ../gui/wxpython/vdigit/toolbars.py:903
 #, python-format
 msgid "Please wait, opening vector map <%s> for editing..."
 msgstr "正在打开矢量地图<%s>,请稍候..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:904
+#: ../gui/wxpython/vdigit/toolbars.py:941
 #, fuzzy, python-format
 msgid ""
 "Unsupported feature type '%(type)s'. Unable to edit OGR layer <%(layer)s>."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/vdigit/toolbars.py:916
+#: ../gui/wxpython/vdigit/toolbars.py:953 ../gui/wxpython/mapdisp/frame.py:521
+#: ../gui/wxpython/mapdisp/toolbars.py:114
 #, fuzzy
 msgid "Vector digitizer"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/vdigit/toolbars.py:965
+#: ../gui/wxpython/vdigit/toolbars.py:1011
 #, python-format
 msgid "Do you want to save changes in vector map <%s>?"
 msgstr "保存对矢量地图<%s>所作的改动?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:967
+#: ../gui/wxpython/vdigit/toolbars.py:1014
 msgid "Save changes?"
 msgstr "是否保存更改?"
 
-#: ../gui/wxpython/vdigit/toolbars.py:974
+#: ../gui/wxpython/vdigit/toolbars.py:1021
 #, python-format
 msgid "Please wait, closing and rebuilding topology of vector map <%s>..."
 msgstr "关闭和重建矢量地图拓扑中,请稍候 <%s>..."
 
-#: ../gui/wxpython/vdigit/toolbars.py:988
+#: ../gui/wxpython/vdigit/toolbars.py:1039
 #, python-format
 msgid "Editing of vector map <%s> successfully finished"
 msgstr ""
 
-#: ../gui/wxpython/vdigit/toolbars.py:1052
-#: ../gui/wxpython/vdigit/toolbars.py:1057
+#: ../gui/wxpython/vdigit/toolbars.py:1104
+#: ../gui/wxpython/vdigit/toolbars.py:1111
 msgid "New vector map"
 msgstr "新矢量地图"
 
-#: ../gui/wxpython/mapwin/graphics.py:258
-#: ../gui/wxpython/mapwin/graphics.py:387
+#: ../gui/wxpython/mapwin/graphics.py:277
+#: ../gui/wxpython/mapwin/graphics.py:453
 #, fuzzy, python-format
 msgid "Property does not exist: %s"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/mapwin/analysis.py:218
-#: ../gui/wxpython/mapwin/analysis.py:332
+#: ../gui/wxpython/mapwin/analysis.py:228
+#: ../gui/wxpython/mapwin/analysis.py:350
 msgid "Measuring finished"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:233
-#: ../gui/wxpython/mapwin/analysis.py:342
+#: ../gui/wxpython/mapwin/analysis.py:246
+#: ../gui/wxpython/mapwin/analysis.py:362
 #, python-format
 msgid ""
 "Click and drag with left mouse button to measure.%sDouble click with left "
 "button to clear."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:239
+#: ../gui/wxpython/mapwin/analysis.py:252
 #, fuzzy
 msgid "Measuring distance"
 msgstr "测量距离"
 
-#: ../gui/wxpython/mapwin/analysis.py:242
+#: ../gui/wxpython/mapwin/analysis.py:255
 #, fuzzy
 msgid "Measuring distance:"
 msgstr "测量距离"
 
-#: ../gui/wxpython/mapwin/analysis.py:250
+#: ../gui/wxpython/mapwin/analysis.py:263
 #, python-format
 msgid ""
 "Geodesic distance calculation is not available.\n"
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:286
-#: ../gui/wxpython/mapwin/analysis.py:292
+#: ../gui/wxpython/mapwin/analysis.py:301
+#: ../gui/wxpython/mapwin/analysis.py:308
 #, fuzzy
 msgid "segment"
 msgstr "SQL状态"
 
-#: ../gui/wxpython/mapwin/analysis.py:287
-#: ../gui/wxpython/mapwin/analysis.py:293
+#: ../gui/wxpython/mapwin/analysis.py:302
+#: ../gui/wxpython/mapwin/analysis.py:309
 #, fuzzy
 msgid "total distance"
 msgstr "地图北向格网坐标"
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:303
 #, fuzzy
 msgid "bearing"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/mapwin/analysis.py:288
+#: ../gui/wxpython/mapwin/analysis.py:304
 msgid "degrees (clockwise from grid-north)"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:346
+#: ../gui/wxpython/mapwin/analysis.py:366
 msgid "Measuring area:"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:359
+#: ../gui/wxpython/mapwin/analysis.py:386
 msgid "Units not recognized, measurement failed."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/analysis.py:364
-#: ../gui/wxpython/mapwin/analysis.py:366
+#: ../gui/wxpython/mapwin/analysis.py:391
+#: ../gui/wxpython/mapwin/analysis.py:393
 #, python-brace-format
 msgid "Area: {area} {unit}\n"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:164
 #, fuzzy
 msgid "legend"
 msgstr "添加图例"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:165
 #, fuzzy
 msgid "scale bar"
 msgstr "添加格网值图层"
 
-#: ../gui/wxpython/mapwin/buffered.py:154
+#: ../gui/wxpython/mapwin/buffered.py:166
 #, fuzzy
 msgid "north arrow"
 msgstr "添加比例尺和指北针"
 
-#: ../gui/wxpython/mapwin/buffered.py:233
+#: ../gui/wxpython/mapwin/buffered.py:255
 #, fuzzy
 msgid "Copy coordinates to clipboard"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/mapwin/buffered.py:243
+#: ../gui/wxpython/mapwin/buffered.py:263
+#, fuzzy
+msgid "Hide toolbars"
+msgstr "包含结果的栅格图的名称"
+
+#: ../gui/wxpython/mapwin/buffered.py:265
+#, fuzzy
+msgid "Show toolbars"
+msgstr "'%s'已复制到剪贴板"
+
+#: ../gui/wxpython/mapwin/buffered.py:272
+msgid "Hide statusbar"
+msgstr ""
+
+#: ../gui/wxpython/mapwin/buffered.py:273
+#, fuzzy
+msgid "Show statusbar"
+msgstr "显示设置"
+
+#: ../gui/wxpython/mapwin/buffered.py:288
 #, fuzzy, python-brace-format
 msgid "Hide {overlay}"
 msgstr "添加直方图图层"
 
-#: ../gui/wxpython/mapwin/buffered.py:250
+#: ../gui/wxpython/mapwin/buffered.py:297
 #, fuzzy
 msgid "Resize legend"
 msgstr "栅格值"
 
-#: ../gui/wxpython/mapwin/buffered.py:605
-#: ../gui/wxpython/modules/histogram.py:179
+#: ../gui/wxpython/mapwin/buffered.py:703
+#: ../gui/wxpython/modules/histogram.py:189
 msgid "Please wait, exporting image..."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:886
+#: ../gui/wxpython/mapwin/buffered.py:989
 msgid "Unable to draw registered graphics. The graphics was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1879
+#: ../gui/wxpython/mapwin/buffered.py:2069
 msgid "Zoom to saved region extents"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1881
+#: ../gui/wxpython/mapwin/buffered.py:2071
 #, fuzzy
 msgid "Set compulational region from named region"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/mapwin/buffered.py:1893
+#: ../gui/wxpython/mapwin/buffered.py:2084
 #, fuzzy, python-format
 msgid "Region <%s> not found. Operation canceled."
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/mapwin/buffered.py:1922
+#: ../gui/wxpython/mapwin/buffered.py:2114
 msgid "Save display extents to region file"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1924
+#: ../gui/wxpython/mapwin/buffered.py:2116
 #, fuzzy
 msgid "Save computational region to region file"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/mapwin/buffered.py:1934
+#: ../gui/wxpython/mapwin/buffered.py:2128
 #, python-format
 msgid "Region file <%s> already exists. Do you want to overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/buffered.py:1936
-#: ../gui/wxpython/wxplot/dialogs.py:807 ../gui/wxpython/core/workspace.py:1350
+#: ../gui/wxpython/mapwin/buffered.py:2131
+#: ../gui/wxpython/wxplot/dialogs.py:964 ../gui/wxpython/core/workspace.py:1529
 #: ../gui/wxpython/core/gcmd.py:140
 msgid "Warning"
 msgstr "警告"
 
-#: ../gui/wxpython/mapwin/base.py:195
+#: ../gui/wxpython/mapwin/base.py:204
 #, python-format
 msgid ""
 "Error occurred during calling of handler: %s \n"
 "Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:275
+#: ../gui/wxpython/mapwin/base.py:285
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:304
+#: ../gui/wxpython/mapwin/base.py:314
 #, python-format
 msgid "Handler: %s was not registered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/base.py:308
+#: ../gui/wxpython/mapwin/base.py:318
 #, python-format
 msgid ""
 "Error occurred during unregistration of handler: %s \n"
 "                                        Handler was unregistered"
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:177
-#: ../gui/wxpython/mapwin/decorations.py:224
+#: ../gui/wxpython/mapwin/decorations.py:189
+#: ../gui/wxpython/mapwin/decorations.py:240
 msgid ""
 "Please install Python Imaging Library (PIL)\n"
 "for better control of legend and other decorations."
 msgstr ""
 
-#: ../gui/wxpython/mapwin/decorations.py:329
+#: ../gui/wxpython/mapwin/decorations.py:358
 #, fuzzy
 msgid "Show text object"
 msgstr "最短路径"
 
-#: ../gui/wxpython/mapwin/decorations.py:338
-#: ../gui/wxpython/animation/dialogs.py:865
+#: ../gui/wxpython/mapwin/decorations.py:373
+#: ../gui/wxpython/animation/dialogs.py:1094
 #, fuzzy
 msgid "Text:"
 msgstr "文本"
 
-#: ../gui/wxpython/mapwin/decorations.py:354 ../gui/wxpython/nviz/tools.py:1012
+#: ../gui/wxpython/mapwin/decorations.py:396 ../gui/wxpython/nviz/tools.py:1240
 msgid "Rotation:"
 msgstr "旋转:"
 
-#: ../gui/wxpython/mapwin/decorations.py:366
-#: ../gui/wxpython/psmap/dialogs.py:291
+#: ../gui/wxpython/mapwin/decorations.py:416
+#: ../gui/wxpython/psmap/dialogs.py:382
 #, fuzzy
 msgid "Font:"
 msgstr "OGR 格式"
 
-#: ../gui/wxpython/mapwin/decorations.py:369
-#: ../gui/wxpython/animation/dialogs.py:847
-#: ../gui/wxpython/gui_core/preferences.py:394
-#: ../gui/wxpython/gui_core/preferences.py:592
+#: ../gui/wxpython/mapwin/decorations.py:421
+#: ../gui/wxpython/animation/dialogs.py:1060
+#: ../gui/wxpython/gui_core/preferences.py:494
+#: ../gui/wxpython/gui_core/preferences.py:771
 msgid "Set font"
 msgstr "设置字体"
 
-#: ../gui/wxpython/mapwin/decorations.py:382
+#: ../gui/wxpython/mapwin/decorations.py:435
 msgid ""
 "Drag text with mouse in pointer mode to position.\n"
 "Double-click to change options"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:63
-msgid "GRASS GIS Graphical Modeler"
-msgstr "GRASS GIS图形建模器"
+#: ../gui/wxpython/datacatalog/tree.py:134
+#, fuzzy, python-brace-format
+msgid "Failed to read mapsets from location <{l}>."
+msgstr "无法读取行 %i\n"
 
-#: ../gui/wxpython/gmodeler/frame.py:128
-msgid "Model"
-msgstr "  模型"
+#: ../gui/wxpython/datacatalog/tree.py:155
+#, fuzzy, python-brace-format
+msgid "Failed to read maps from location <{l}>."
+msgstr "无法读取行 %i\n"
 
-#: ../gui/wxpython/gmodeler/frame.py:129
-msgid "Items"
-msgstr "项目"
+#: ../gui/wxpython/datacatalog/tree.py:227
+#, fuzzy, python-brace-format
+msgid ""
+"Map of type {elem} <{name}> already exists in mapset <{mapset}>. Do you want "
+"to overwrite it?"
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+
+#: ../gui/wxpython/datacatalog/tree.py:232
+#: ../gui/wxpython/datacatalog/tree.py:694
+#: ../gui/wxpython/rdigit/dialogs.py:104 ../gui/wxpython/lmgr/layertree.py:1056
+#: ../gui/wxpython/gui_core/dialogs.py:473
+#: ../gui/wxpython/modules/colorrules.py:678
+msgid "Overwrite?"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:130 ../gui/wxpython/gmodeler/model.py:2632
+#: ../gui/wxpython/datacatalog/tree.py:314
 #, fuzzy
-msgid "Variables"
-msgstr "变化"
+msgid "GRASS locations in {}"
+msgstr "在'%s'中没有发现GRASS地点。"
 
-#: ../gui/wxpython/gmodeler/frame.py:131
-msgid "Python editor"
-msgstr "Python编辑器"
+#: ../gui/wxpython/datacatalog/tree.py:584
+#, python-brace-format
+msgid ""
+"Map <{layer}> marked for copying. You can paste it to the current mapset "
+"<{mapset}>."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:132 ../gui/wxpython/gui_core/forms.py:1830
-#: ../gui/wxpython/modules/vkrige.py:102
-msgid "Command output"
-msgstr "命令运行结果输出"
+#: ../gui/wxpython/datacatalog/tree.py:598
+#: ../gui/wxpython/datacatalog/tree.py:658
+#, fuzzy
+msgid "New name"
+msgstr "重命名"
 
-#: ../gui/wxpython/gmodeler/frame.py:201
-msgid "Python script contains local modifications"
-msgstr "Python脚本含有本地改动"
+#: ../gui/wxpython/datacatalog/tree.py:599
+#, fuzzy
+msgid "Rename map"
+msgstr "重新渲染地图"
 
-#: ../gui/wxpython/gmodeler/frame.py:203 ../gui/wxpython/gmodeler/frame.py:1832
-msgid "Python script is up-to-date"
-msgstr "Python脚本已更新"
+#: ../gui/wxpython/datacatalog/tree.py:611
+#, fuzzy, python-brace-format
+msgid "Editing {name}"
+msgstr "验证模型..."
 
-#: ../gui/wxpython/gmodeler/frame.py:220
-#, fuzzy
-msgid "Redrawing model..."
+#: ../gui/wxpython/datacatalog/tree.py:630
+#, fuzzy, python-brace-format
+msgid "Renaming map <{name}>..."
 msgstr "读取地图"
 
-#: ../gui/wxpython/gmodeler/frame.py:256
-msgid "Do you want to save changes in the model?"
-msgstr "保存对模型的改动?"
+#: ../gui/wxpython/datacatalog/tree.py:644
+#, python-brace-format
+msgid "{cmd} -- completed"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:258
-msgid "Do you want to store current model settings to model file?"
-msgstr "将当前模型设置保存到模型文件?"
+#: ../gui/wxpython/datacatalog/tree.py:652
+#, fuzzy
+msgid "No map selected for copying."
+msgstr "没有选中的图层"
 
-#: ../gui/wxpython/gmodeler/frame.py:264
-msgid "Quit Graphical Modeler"
-msgstr "退出图形建模器"
+#: ../gui/wxpython/datacatalog/tree.py:659
+#, fuzzy
+msgid "Copy map"
+msgstr "复制"
 
-#: ../gui/wxpython/gmodeler/frame.py:318
+#: ../gui/wxpython/datacatalog/tree.py:670
 #, fuzzy
-msgid "No intermediate data to delete."
-msgstr "产生的中间影像的数量"
+msgid "Failed to copy map: new map has the same name"
+msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/gmodeler/frame.py:322
-#, python-format
-msgid "Do you want to permanently delete data?%s"
-msgstr "永久删除数据%s?"
+#: ../gui/wxpython/datacatalog/tree.py:690
+#, fuzzy, python-brace-format
+msgid ""
+"Map <{map}> already exists in the current mapset. Do you want to overwrite "
+"it?"
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/gmodeler/frame.py:323
-msgid "Delete intermediate data?"
-msgstr "删除临时数据?"
+#: ../gui/wxpython/datacatalog/tree.py:704
+#, fuzzy, python-brace-format
+msgid "Copying <{name}>..."
+msgstr "导入地图 %d 的要素..."
 
-#: ../gui/wxpython/gmodeler/frame.py:340
-#, fuzzy, python-format
-msgid "%d maps deleted from current mapset"
-msgstr "无法创建栅格地图 %s"
+#: ../gui/wxpython/datacatalog/tree.py:725
+msgid "g.copy completed"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/tree.py:729
+msgid "Failed to copy map: action is allowed only within the same location."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:355 ../gui/wxpython/gmodeler/frame.py:481
+#: ../gui/wxpython/datacatalog/tree.py:760
+#, python-brace-format
 msgid ""
-"Current model is not empty. Do you want to store current settings to model "
-"file?"
-msgstr "当前模型非空,将当前模型开设保存到模型文件?"
+"Do you really want to delete map <{m}> of type <{etype}> from mapset "
+"<{mapset}> in location <{loc}>?"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:358 ../gui/wxpython/gmodeler/frame.py:484
+#: ../gui/wxpython/datacatalog/tree.py:765
 #, fuzzy
-msgid "Create new model?"
-msgstr "创建新数据集"
+msgid "Delete map"
+msgstr "删除"
+
+#: ../gui/wxpython/datacatalog/tree.py:766
+#, fuzzy, python-brace-format
+msgid "Deleting {name}..."
+msgstr "删除"
 
-#: ../gui/wxpython/gmodeler/frame.py:396
+#: ../gui/wxpython/datacatalog/tree.py:782
 #, fuzzy
-msgid "Choose model file"
-msgstr "选择模型文件"
+msgid "g.remove completed"
+msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/gmodeler/frame.py:398 ../gui/wxpython/gmodeler/frame.py:442
-#: ../gui/wxpython/lmgr/frame.py:512
-msgid "GRASS Model File (*.gxm)|*.gxm"
-msgstr "GRASS模型文件(*.gxm)|*.gxm"
+#: ../gui/wxpython/datacatalog/tree.py:792
+#, fuzzy, python-brace-format
+msgid "Displaying {name}..."
+msgstr "显示地区"
 
-#: ../gui/wxpython/gmodeler/frame.py:414
-#, python-format
-msgid "%(items)d items (%(actions)d actions) loaded into model"
-msgstr "模型项目%(items)d和动作(%(actions)d actions)已载入"
+#: ../gui/wxpython/datacatalog/tree.py:795
+#: ../gui/wxpython/datacatalog/tree.py:804
+msgid " -- completed. Go to Layers tab for further operations."
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:421 ../gui/wxpython/gmodeler/frame.py:458
-#, fuzzy, python-format
-msgid "Model file <%s> already exists. Do you want to overwrite this file?"
-msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+#: ../gui/wxpython/datacatalog/tree.py:809
+msgid "Failed to display layer: not in current mapset or invalid layer"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:424 ../gui/wxpython/menustrings.py:1936
-msgid "Save model"
-msgstr "保存模型"
+#: ../gui/wxpython/datacatalog/tree.py:827
+#, fuzzy
+msgid "Moving maps not implemented"
+msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:431 ../gui/wxpython/gmodeler/frame.py:471
-#, python-format
-msgid "File <%s> saved"
-msgstr "文件<%s>已保存"
+#: ../gui/wxpython/datacatalog/tree.py:835
+#, fuzzy
+msgid "Maps can be copied only to current mapset"
+msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/gmodeler/frame.py:440
+#: ../gui/wxpython/datacatalog/tree.py:910
 #, fuzzy
-msgid "Choose file to save current model"
-msgstr "使用当前的区域"
+msgid "&Copy"
+msgstr "复制"
 
-#: ../gui/wxpython/gmodeler/frame.py:533
-msgid "Model is empty. Nothing to validate."
-msgstr "模型为空,无需验证。"
+#: ../gui/wxpython/datacatalog/tree.py:915
+#: ../gui/wxpython/datacatalog/tree.py:948
+#: ../gui/wxpython/datacatalog/tree.py:966
+#, fuzzy
+msgid "&Paste"
+msgstr "栅格(&r)"
 
-#: ../gui/wxpython/gmodeler/frame.py:537 ../gui/wxpython/gmodeler/model.py:592
-msgid "Validating model..."
-msgstr "验证模型..."
+#: ../gui/wxpython/datacatalog/tree.py:936
+#, fuzzy
+msgid "&Display layer"
+msgstr "显示地图"
 
-#: ../gui/wxpython/gmodeler/frame.py:543
-#, fuzzy, python-format
-msgid ""
-"Model is not valid.\n"
-"\n"
-"%s"
-msgstr "[%s] 的类别文件无效"
+#: ../gui/wxpython/datacatalog/tree.py:954
+#, fuzzy
+msgid "&Switch mapset"
+msgstr "列举地图"
 
-#: ../gui/wxpython/gmodeler/frame.py:546
-msgid "Model is valid."
-msgstr "模型验证通过"
+#: ../gui/wxpython/datacatalog/frame.py:36
+#, fuzzy
+msgid "GRASS GIS Data Catalog"
+msgstr "地图计算"
 
-#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/frame.py:614
-#, fuzzy, python-format
-msgid "Model exported to <%s>"
-msgstr "无法创建文件 [%s]"
+#: ../gui/wxpython/datacatalog/frame.py:66
+#, fuzzy
+msgid "Close GRASS GIS Data Catalog"
+msgstr "地图计算"
+
+#: ../gui/wxpython/datacatalog/frame.py:119 ../gui/wxpython/lmgr/frame.py:502
+#: ../gui/wxpython/lmgr/frame.py:1042
+#, python-format
+msgid ""
+"Current location is <%(loc)s>.\n"
+"Current mapset is <%(mapset)s>."
+msgstr ""
+"当前地点为 <%(loc)s>.\n"
+"当前地图集为 <%(mapset)s>."
+
+#: ../gui/wxpython/datacatalog/frame.py:127 ../gui/wxpython/lmgr/frame.py:1065
+#: ../gui/wxpython/lmgr/frame.py:1087
+#, python-format
+msgid "Current mapset is <%s>."
+msgstr "当前地图集为<%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/gmodeler/frame.py:1370
-#: ../gui/wxpython/gmodeler/dialogs.py:209
+#: ../gui/wxpython/datacatalog/catalog.py:33
 #, fuzzy
-msgid "Comment:"
-msgstr "添加命令"
+msgid "Data catalog"
+msgstr "反向清扫完成"
 
-#: ../gui/wxpython/gmodeler/frame.py:745 ../gui/wxpython/menustrings.py:1959
+#: ../gui/wxpython/datacatalog/toolbars.py:25
 #, fuzzy
-msgid "Add comment"
-msgstr "添加命令层"
+msgid "Reload GRASS locations"
+msgstr "GRASS地点名称:"
 
-#: ../gui/wxpython/gmodeler/frame.py:751
-msgid "Empty comment. Nothing to add to the model."
-msgstr "空注释,无信息可添加到模型。"
+#: ../gui/wxpython/datacatalog/toolbars.py:28
+msgid "Reload current GRASS mapset only"
+msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:783
+#: ../gui/wxpython/datacatalog/toolbars.py:31
+msgid "Click to restrict editing to current mapset only"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:34
+msgid "Click to allow editing other mapsets"
+msgstr ""
+
+#: ../gui/wxpython/datacatalog/toolbars.py:54
+#, fuzzy
+msgid "Search:"
+msgstr "搜索"
+
+#: ../gui/wxpython/datacatalog/toolbars.py:56
+msgid ""
+"Type to search database by map type or name. Use prefix 'r:', 'v:' and "
+"'r3:'to show only raster, vector or 3D raster data, respectively. Use Python "
+"regular expressions to refine your search."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:123
+#, fuzzy
+msgid "Please select first the raster map"
+msgstr "点模式下不建立拓扑"
+
+#: ../gui/wxpython/rdigit/controller.py:155
+msgid "Right click to finish area"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:160
+msgid "Right click to finish line"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/controller.py:303
+#, fuzzy
+msgid "Do you want to save changes?"
+msgstr "是否保存您对工作区的改动?"
+
+#: ../gui/wxpython/rdigit/controller.py:304
+#, fuzzy
+msgid "Save raster map changes"
+msgstr "导出栅格地图"
+
+#: ../gui/wxpython/rdigit/controller.py:378
+#, fuzzy
+msgid "Failed to create backup copy of edited raster map."
+msgstr "无法插入新行:%s"
+
+#: ../gui/wxpython/rdigit/controller.py:397
+#, fuzzy
+msgid "Failed to create new raster map."
+msgstr "无法插入新行:%s"
+
+#: ../gui/wxpython/rdigit/controller.py:488
+#: ../gui/wxpython/rdigit/controller.py:516
+#, fuzzy
+msgid "Rasterizing..."
+msgstr "读取地图"
+
+#: ../gui/wxpython/rdigit/controller.py:556
+#, fuzzy
+msgid "Failed to set default color table for edited raster map"
+msgstr "根据栅格图层创建/修改色彩表。"
+
+#: ../gui/wxpython/rdigit/dialogs.py:34
+#, fuzzy
+msgid "Create new raster map"
+msgstr "创建新数据集"
+
+#: ../gui/wxpython/rdigit/dialogs.py:53
+#, fuzzy
+msgid "Name for new raster map:"
+msgstr "栅格图的名称"
+
+#: ../gui/wxpython/rdigit/dialogs.py:58
+#, fuzzy
+msgid "Optionally select background raster map:"
+msgstr "输出矢量文件的名称"
+
+#: ../gui/wxpython/rdigit/dialogs.py:62
+#, fuzzy
+msgid "New raster map type:"
+msgstr "栅格图的名称"
+
+#: ../gui/wxpython/rdigit/dialogs.py:92
+#, fuzzy
+msgid "Please specify name for a new raster map"
+msgstr "无法关闭新的 g3d 地图"
+
+#: ../gui/wxpython/rdigit/dialogs.py:100
+#, fuzzy, python-format
+msgid ""
+"Raster map <%s> already exists in the current mapset. Do you want to "
+"overwrite it?"
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+
+#: ../gui/wxpython/rdigit/toolbars.py:27
+#, fuzzy
+msgid "Digitize area"
+msgstr "矢量化新线"
+
+#: ../gui/wxpython/rdigit/toolbars.py:29
+#, fuzzy
+msgid "Digitize line"
+msgstr "矢量化新线"
+
+#: ../gui/wxpython/rdigit/toolbars.py:31
+#, fuzzy
+msgid "Digitize point"
+msgstr "矢量化新点"
+
+#: ../gui/wxpython/rdigit/toolbars.py:32
+#, fuzzy
+msgid "Save raster map"
+msgstr "栅格地图"
+
+#: ../gui/wxpython/rdigit/toolbars.py:34
+#, fuzzy
+msgid "Quit raster digitizer"
+msgstr "矢量地图 %s - 未发现"
+
+#: ../gui/wxpython/rdigit/toolbars.py:50
+#, fuzzy
+msgid "Select raster map"
+msgstr "导出栅格地图"
+
+#: ../gui/wxpython/rdigit/toolbars.py:65
+msgid "Set drawing color (not raster cell color)"
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:86
+#, fuzzy
+msgid "Cell value:"
+msgstr "比特模式的值"
+
+#: ../gui/wxpython/rdigit/toolbars.py:99
+msgid ""
+"Width of currently digitized line or diameter of a digitized point in map "
+"units."
+msgstr ""
+
+#: ../gui/wxpython/rdigit/toolbars.py:100
+#: ../gui/wxpython/gmodeler/preferences.py:183
+#: ../gui/wxpython/gmodeler/preferences.py:349
+#: ../gui/wxpython/gmodeler/preferences.py:461
+#: ../gui/wxpython/gmodeler/preferences.py:577
+#: ../gui/wxpython/psmap/dialogs.py:3817
+#: ../gui/wxpython/gui_core/dialogs.py:1931
+#: ../gui/wxpython/nviz/preferences.py:558
+msgid "Width:"
+msgstr "宽度:"
+
+#: ../gui/wxpython/rdigit/toolbars.py:138
+#, fuzzy
+msgid "New raster map"
+msgstr "栅格地图"
+
+#: ../gui/wxpython/gmodeler/frame.py:65
+msgid "GRASS GIS Graphical Modeler"
+msgstr "GRASS GIS图形建模器"
+
+#: ../gui/wxpython/gmodeler/frame.py:146
+msgid "Model"
+msgstr "  模型"
+
+#: ../gui/wxpython/gmodeler/frame.py:149
+msgid "Items"
+msgstr "项目"
+
+#: ../gui/wxpython/gmodeler/frame.py:153 ../gui/wxpython/gmodeler/model.py:2854
+#, fuzzy
+msgid "Variables"
+msgstr "变化"
+
+#: ../gui/wxpython/gmodeler/frame.py:157
+msgid "Python editor"
+msgstr "Python编辑器"
+
+#: ../gui/wxpython/gmodeler/frame.py:161 ../gui/wxpython/gui_core/forms.py:2194
+#: ../gui/wxpython/modules/vkrige.py:134
+msgid "Command output"
+msgstr "命令运行结果输出"
+
+#: ../gui/wxpython/gmodeler/frame.py:243
+msgid "Python script contains local modifications"
+msgstr "Python脚本含有本地改动"
+
+#: ../gui/wxpython/gmodeler/frame.py:245 ../gui/wxpython/gmodeler/frame.py:2044
+msgid "Python script is up-to-date"
+msgstr "Python脚本已更新"
+
+#: ../gui/wxpython/gmodeler/frame.py:262
+#, fuzzy
+msgid "Redrawing model..."
+msgstr "读取地图"
+
+#: ../gui/wxpython/gmodeler/frame.py:298
+msgid "Do you want to save changes in the model?"
+msgstr "保存对模型的改动?"
+
+#: ../gui/wxpython/gmodeler/frame.py:300
+msgid "Do you want to store current model settings to model file?"
+msgstr "将当前模型设置保存到模型文件?"
+
+#: ../gui/wxpython/gmodeler/frame.py:306
+msgid "Quit Graphical Modeler"
+msgstr "退出图形建模器"
+
+#: ../gui/wxpython/gmodeler/frame.py:360
+#, fuzzy
+msgid "No intermediate data to delete."
+msgstr "产生的中间影像的数量"
+
+#: ../gui/wxpython/gmodeler/frame.py:366
+#, python-format
+msgid "Do you want to permanently delete data?%s"
+msgstr "永久删除数据%s?"
+
+#: ../gui/wxpython/gmodeler/frame.py:368
+msgid "Delete intermediate data?"
+msgstr "删除临时数据?"
+
+#: ../gui/wxpython/gmodeler/frame.py:385
+#, fuzzy, python-format
+msgid "%d maps deleted from current mapset"
+msgstr "无法创建栅格地图 %s"
+
+#: ../gui/wxpython/gmodeler/frame.py:403 ../gui/wxpython/gmodeler/frame.py:553
+msgid ""
+"Current model is not empty. Do you want to store current settings to model "
+"file?"
+msgstr "当前模型非空,将当前模型开设保存到模型文件?"
+
+#: ../gui/wxpython/gmodeler/frame.py:406 ../gui/wxpython/gmodeler/frame.py:556
+#, fuzzy
+msgid "Create new model?"
+msgstr "创建新数据集"
+
+#: ../gui/wxpython/gmodeler/frame.py:443
+#, fuzzy
+msgid "Choose model file"
+msgstr "选择模型文件"
+
+#: ../gui/wxpython/gmodeler/frame.py:445 ../gui/wxpython/gmodeler/frame.py:505
+#: ../gui/wxpython/lmgr/frame.py:596
+msgid "GRASS Model File (*.gxm)|*.gxm"
+msgstr "GRASS模型文件(*.gxm)|*.gxm"
+
+#: ../gui/wxpython/gmodeler/frame.py:466
+#, python-format
+msgid "%(items)d items (%(actions)d actions) loaded into model"
+msgstr "模型项目%(items)d和动作(%(actions)d actions)已载入"
+
+#: ../gui/wxpython/gmodeler/frame.py:478 ../gui/wxpython/gmodeler/frame.py:522
+#, fuzzy, python-format
+msgid "Model file <%s> already exists. Do you want to overwrite this file?"
+msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
+
+#: ../gui/wxpython/gmodeler/frame.py:481 ../gui/wxpython/menustrings.py:1940
+msgid "Save model"
+msgstr "保存模型"
+
+#: ../gui/wxpython/gmodeler/frame.py:490 ../gui/wxpython/gmodeler/frame.py:540
+#, python-format
+msgid "File <%s> saved"
+msgstr "文件<%s>已保存"
+
+#: ../gui/wxpython/gmodeler/frame.py:503
+#, fuzzy
+msgid "Choose file to save current model"
+msgstr "使用当前的区域"
+
+#: ../gui/wxpython/gmodeler/frame.py:604
+msgid "Model is empty. Nothing to validate."
+msgstr "模型为空,无需验证。"
+
+#: ../gui/wxpython/gmodeler/frame.py:607 ../gui/wxpython/gmodeler/model.py:617
+msgid "Validating model..."
+msgstr "验证模型..."
+
+#: ../gui/wxpython/gmodeler/frame.py:614
+#, fuzzy, python-format
+msgid ""
+"Model is not valid.\n"
+"\n"
+"%s"
+msgstr "[%s] 的类别文件无效"
+
+#: ../gui/wxpython/gmodeler/frame.py:618
+msgid "Model is valid."
+msgstr "模型验证通过"
+
+#: ../gui/wxpython/gmodeler/frame.py:680 ../gui/wxpython/gmodeler/frame.py:687
+#, fuzzy, python-format
+msgid "Model exported to <%s>"
+msgstr "无法创建文件 [%s]"
+
+#: ../gui/wxpython/gmodeler/frame.py:829 ../gui/wxpython/gmodeler/frame.py:1552
+#: ../gui/wxpython/gmodeler/dialogs.py:239
+#, fuzzy
+msgid "Comment:"
+msgstr "添加命令"
+
+#: ../gui/wxpython/gmodeler/frame.py:830 ../gui/wxpython/menustrings.py:1965
+#, fuzzy
+msgid "Add comment"
+msgstr "添加命令层"
+
+#: ../gui/wxpython/gmodeler/frame.py:840
+msgid "Empty comment. Nothing to add to the model."
+msgstr "空注释,无信息可添加到模型。"
+
+#: ../gui/wxpython/gmodeler/frame.py:876
 msgid "wxGUI Graphical Modeler"
 msgstr "wxGUI图形建模器"
 
-#: ../gui/wxpython/gmodeler/frame.py:878
+#: ../gui/wxpython/gmodeler/frame.py:995
 #, fuzzy, python-format
 msgid ""
 "Reading model file <%s> failed.\n"
@@ -2701,203 +3085,204 @@ msgstr ""
 "读取工作区文件<%s>失败。\n"
 "无效文件,无法解析XML文档。"
 
-#: ../gui/wxpython/gmodeler/frame.py:887
+#: ../gui/wxpython/gmodeler/frame.py:1007
 msgid "Please wait, loading model..."
 msgstr "模型装载中,请稍候..."
 
-#: ../gui/wxpython/gmodeler/frame.py:953
+#: ../gui/wxpython/gmodeler/frame.py:1073
 msgid "Writing current settings to model file failed."
 msgstr "将当前设置保存到模型文件时操作不成功。"
 
-#: ../gui/wxpython/gmodeler/frame.py:963 ../gui/wxpython/lmgr/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1084 ../gui/wxpython/lmgr/frame.py:1624
 #, python-format
 msgid "Unable to open file <%s> for writing."
 msgstr "无法打开文件<%s>。"
 
-#: ../gui/wxpython/gmodeler/frame.py:1296
-#: ../gui/wxpython/animation/dialogs.py:629
-#: ../gui/wxpython/animation/dialogs.py:820
-#: ../gui/wxpython/rlisetup/frame.py:130 ../gui/wxpython/lmgr/layertree.py:419
+#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/animation/dialogs.py:779
+#: ../gui/wxpython/animation/dialogs.py:1011
+#: ../gui/wxpython/rlisetup/frame.py:140 ../gui/wxpython/lmgr/layertree.py:442
 #: ../gui/wxpython/menustrings.py:919 ../gui/wxpython/menustrings.py:1826
-#: ../gui/wxpython/gui_core/simplelmgr.py:438
+#: ../gui/wxpython/gui_core/simplelmgr.py:458
 msgid "Remove"
 msgstr "移除"
 
-#: ../gui/wxpython/gmodeler/frame.py:1300
+#: ../gui/wxpython/gmodeler/frame.py:1448
 #, fuzzy
 msgid "Disable"
 msgstr "表"
 
-#: ../gui/wxpython/gmodeler/frame.py:1303
+#: ../gui/wxpython/gmodeler/frame.py:1454
 #, fuzzy
 msgid "Enable"
 msgstr "表"
 
-#: ../gui/wxpython/gmodeler/frame.py:1308
-#: ../gui/wxpython/gmodeler/frame.py:1358
+#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1539
 msgid "Set label"
 msgstr "添加标注"
 
-#: ../gui/wxpython/gmodeler/frame.py:1311
-#: ../gui/wxpython/gmodeler/frame.py:1370
+#: ../gui/wxpython/gmodeler/frame.py:1468
+#: ../gui/wxpython/gmodeler/frame.py:1553
 #, fuzzy
 msgid "Set comment"
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/gmodeler/frame.py:1316
+#: ../gui/wxpython/gmodeler/frame.py:1478
 #, fuzzy
 msgid "Add control point"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/gmodeler/frame.py:1318
+#: ../gui/wxpython/gmodeler/frame.py:1485
 #, fuzzy
 msgid "Remove control point"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/gmodeler/frame.py:1325
+#: ../gui/wxpython/gmodeler/frame.py:1497
 msgid "Intermediate"
 msgstr "临时数据"
 
-#: ../gui/wxpython/gmodeler/frame.py:1336 ../gui/wxpython/lmgr/layertree.py:447
+#: ../gui/wxpython/gmodeler/frame.py:1511 ../gui/wxpython/lmgr/layertree.py:486
 msgid "Properties"
 msgstr "属性"
 
-#: ../gui/wxpython/gmodeler/frame.py:1358
-#: ../gui/wxpython/gmodeler/dialogs.py:205
+#: ../gui/wxpython/gmodeler/frame.py:1538
+#: ../gui/wxpython/gmodeler/dialogs.py:235
 msgid "Label:"
 msgstr "标签:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1444
+#: ../gui/wxpython/gmodeler/frame.py:1630
 msgid "List of variables - right-click to delete"
 msgstr "变量列表 - 点击鼠标右键以删除"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1492 ../gui/wxpython/gui_core/ghelp.py:370
-#: ../gui/wxpython/gui_core/ghelp.py:372 ../gui/wxpython/gui_core/ghelp.py:435
-#: ../gui/wxpython/web_services/widgets.py:857
+#: ../gui/wxpython/gmodeler/frame.py:1635
+#: ../gui/wxpython/gmodeler/frame.py:1682 ../gui/wxpython/gui_core/ghelp.py:392
+#: ../gui/wxpython/gui_core/ghelp.py:394 ../gui/wxpython/gui_core/ghelp.py:468
+#: ../gui/wxpython/web_services/widgets.py:921
 msgid "Name"
 msgstr "名称"
 
-#: ../gui/wxpython/gmodeler/frame.py:1447
-#: ../gui/wxpython/gmodeler/frame.py:1499 ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/gmodeler/frame.py:1636
+#: ../gui/wxpython/gmodeler/frame.py:1689 ../gui/wxpython/dbmgr/base.py:2880
 #, fuzzy
 msgid "Data type"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1505
+#: ../gui/wxpython/gmodeler/frame.py:1637
+#: ../gui/wxpython/gmodeler/frame.py:1695
 #, fuzzy
 msgid "Default value"
 msgstr "默认值:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1448
-#: ../gui/wxpython/gmodeler/frame.py:1512
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/gmodeler/frame.py:1638
+#: ../gui/wxpython/gmodeler/frame.py:1702
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1449
+#: ../gui/wxpython/location_wizard/wizard.py:1677
 msgid "Description"
 msgstr "描述"
 
-#: ../gui/wxpython/gmodeler/frame.py:1453
+#: ../gui/wxpython/gmodeler/frame.py:1643
 #, fuzzy
 msgid "Add new variable"
 msgstr "添加新项"
 
-#: ../gui/wxpython/gmodeler/frame.py:1457
+#: ../gui/wxpython/gmodeler/frame.py:1647
 msgid "integer"
 msgstr "整数"
 
-#: ../gui/wxpython/gmodeler/frame.py:1458
+#: ../gui/wxpython/gmodeler/frame.py:1648
 msgid "float"
 msgstr "浮点数"
 
-#: ../gui/wxpython/gmodeler/frame.py:1459
+#: ../gui/wxpython/gmodeler/frame.py:1649
 msgid "string"
 msgstr "字串"
 
-#: ../gui/wxpython/gmodeler/frame.py:1462
+#: ../gui/wxpython/gmodeler/frame.py:1652
 #, fuzzy
 msgid "region"
 msgstr "区域"
 
-#: ../gui/wxpython/gmodeler/frame.py:1463
+#: ../gui/wxpython/gmodeler/frame.py:1653
 #, fuzzy
 msgid "mapset"
 msgstr "切换地图集"
 
-#: ../gui/wxpython/gmodeler/frame.py:1464
-#: ../gui/wxpython/gui_core/forms.py:1523
+#: ../gui/wxpython/gmodeler/frame.py:1654
+#: ../gui/wxpython/gui_core/forms.py:1774
 #, fuzzy
 msgid "file"
 msgstr "保存组文件"
 
-#: ../gui/wxpython/gmodeler/frame.py:1465
+#: ../gui/wxpython/gmodeler/frame.py:1655
 msgid "dir"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/frame.py:1472
+#: ../gui/wxpython/gmodeler/frame.py:1662
 #, fuzzy
 msgid "Add new variable to the model"
 msgstr "设置 GRASS 变量"
 
-#: ../gui/wxpython/gmodeler/frame.py:1592
+#: ../gui/wxpython/gmodeler/frame.py:1785
 msgid "List of items - right-click to delete"
 msgstr "项目列表 - 点击鼠标右键以删除"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
-#: ../gui/wxpython/gmodeler/dialogs.py:444
-#: ../gui/wxpython/gmodeler/dialogs.py:547
-#: ../gui/wxpython/psmap/dialogs.py:2612
+#: ../gui/wxpython/gmodeler/frame.py:1790
+#: ../gui/wxpython/gmodeler/dialogs.py:492
+#: ../gui/wxpython/gmodeler/dialogs.py:604
+#: ../gui/wxpython/psmap/dialogs.py:3631
 #, fuzzy
 msgid "Label"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1791
 msgid "In loop"
 msgstr "循环中"
 
-#: ../gui/wxpython/gmodeler/frame.py:1595
+#: ../gui/wxpython/gmodeler/frame.py:1792
 #, fuzzy
 msgid "Parameterized"
 msgstr "参数:"
 
-#: ../gui/wxpython/gmodeler/frame.py:1596
-#: ../gui/wxpython/gmodeler/preferences.py:85
-#: ../gui/wxpython/gmodeler/dialogs.py:167
-#: ../gui/wxpython/gmodeler/dialogs.py:445
-#: ../gui/wxpython/gmodeler/dialogs.py:548
+#: ../gui/wxpython/gmodeler/frame.py:1793
+#: ../gui/wxpython/gmodeler/preferences.py:101
+#: ../gui/wxpython/gmodeler/dialogs.py:192
+#: ../gui/wxpython/gmodeler/dialogs.py:493
+#: ../gui/wxpython/gmodeler/dialogs.py:605
 msgid "Command"
 msgstr "命令"
 
-#: ../gui/wxpython/gmodeler/frame.py:1648
+#: ../gui/wxpython/gmodeler/frame.py:1848
 #, fuzzy
 msgid "No items to selected."
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/gmodeler/frame.py:1682
+#: ../gui/wxpython/gmodeler/frame.py:1884
 #, fuzzy
 msgid "Python script"
 msgstr "导出模型到Python脚本"
 
-#: ../gui/wxpython/gmodeler/frame.py:1685
-#: ../gui/wxpython/gmodeler/model.py:2588 ../gui/wxpython/gui_core/menu.py:159
-#: ../gui/wxpython/gui_core/forms.py:515
-#: ../gui/wxpython/modules/mcalc_builder.py:136
-#: ../gui/wxpython/modules/vkrige.py:151 ../gui/wxpython/modules/vclean.py:158
+#: ../gui/wxpython/gmodeler/frame.py:1887
+#: ../gui/wxpython/gmodeler/model.py:2810 ../gui/wxpython/gui_core/menu.py:170
+#: ../gui/wxpython/gui_core/forms.py:585
+#: ../gui/wxpython/modules/mcalc_builder.py:148
+#: ../gui/wxpython/modules/vkrige.py:209 ../gui/wxpython/modules/vclean.py:173
 msgid "&Run"
 msgstr "运行(&R)"
 
-#: ../gui/wxpython/gmodeler/frame.py:1686
+#: ../gui/wxpython/gmodeler/frame.py:1888
 msgid "Run python script"
 msgstr "运行Python脚本"
 
-#: ../gui/wxpython/gmodeler/frame.py:1689
+#: ../gui/wxpython/gmodeler/frame.py:1891
 #, fuzzy
 msgid "Save python script to file"
 msgstr "保存地图为Postscript文件"
 
-#: ../gui/wxpython/gmodeler/frame.py:1692
+#: ../gui/wxpython/gmodeler/frame.py:1894
 msgid ""
 "Refresh python script based on the model.\n"
 "It will discards all local changes."
@@ -2905,208 +3290,205 @@ msgstr ""
 "使用模型来刷新Python脚本。\n"
 "本地所作的改动不予保存。"
 
-#: ../gui/wxpython/gmodeler/frame.py:1730
+#: ../gui/wxpython/gmodeler/frame.py:1932
+#: ../gui/wxpython/gui_core/pyedit.py:280
 #, fuzzy, python-format
 msgid "Unable to launch Python script. %s"
 msgstr "无法切换到地图集 <%s>."
 
-#: ../gui/wxpython/gmodeler/frame.py:1754
+#: ../gui/wxpython/gmodeler/frame.py:1959
+#: ../gui/wxpython/gui_core/pyedit.py:316
 #, fuzzy
 msgid "Choose file to save"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/gmodeler/frame.py:1757
+#: ../gui/wxpython/gmodeler/frame.py:1964
+#: ../gui/wxpython/gui_core/pyedit.py:318
+#: ../gui/wxpython/gui_core/pyedit.py:380
 msgid "Python script (*.py)|*.py"
 msgstr "Python脚本 (*.py)|*.py"
 
-#: ../gui/wxpython/gmodeler/frame.py:1771 ../gui/wxpython/wxplot/profile.py:352
+#: ../gui/wxpython/gmodeler/frame.py:1981 ../gui/wxpython/wxplot/profile.py:386
+#: ../gui/wxpython/gui_core/pyedit.py:334
 #, fuzzy, python-format
 msgid "File <%s> already exists. Do you want to overwrite this file?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/gmodeler/frame.py:1773
+#: ../gui/wxpython/gmodeler/frame.py:1984
+#: ../gui/wxpython/gui_core/pyedit.py:336
 #, fuzzy
 msgid "Save file"
 msgstr "保存组文件"
 
-#: ../gui/wxpython/gmodeler/frame.py:1808
+#: ../gui/wxpython/gmodeler/frame.py:2021
 msgid ""
 "Python script is locally modificated. Refresh will discard all changes. Do "
 "you really want to continue?"
 msgstr "Python脚本已被改动,进行刷新操作将丢失所有改动。确定继续刷新?"
 
-#: ../gui/wxpython/gmodeler/frame.py:1811
+#: ../gui/wxpython/gmodeler/frame.py:2024
 msgid "Update"
 msgstr "更新"
 
-#: ../gui/wxpython/gmodeler/preferences.py:29
-#: ../gui/wxpython/menustrings.py:1949
+#: ../gui/wxpython/gmodeler/preferences.py:31
+#: ../gui/wxpython/menustrings.py:1953
 #, fuzzy
 msgid "Modeler settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gmodeler/preferences.py:52
+#: ../gui/wxpython/gmodeler/preferences.py:58
 #, fuzzy
 msgid "Item properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/preferences.py:59
+#: ../gui/wxpython/gmodeler/preferences.py:65
 msgid "Disabled:"
 msgstr "禁用:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:97
-#: ../gui/wxpython/gmodeler/preferences.py:352
-#: ../gui/wxpython/gmodeler/preferences.py:437
+#: ../gui/wxpython/gmodeler/preferences.py:113
+#: ../gui/wxpython/gmodeler/preferences.py:427
+#: ../gui/wxpython/gmodeler/preferences.py:539
 #, fuzzy
 msgid "Valid:"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:114
+#: ../gui/wxpython/gmodeler/preferences.py:131
 #, fuzzy
 msgid "Invalid:"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/gmodeler/preferences.py:131
+#: ../gui/wxpython/gmodeler/preferences.py:149
 msgid "Running:"
 msgstr "运行中:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:152
-#: ../gui/wxpython/gmodeler/preferences.py:288
-#: ../gui/wxpython/gmodeler/preferences.py:373
-#: ../gui/wxpython/gmodeler/preferences.py:458
+#: ../gui/wxpython/gmodeler/preferences.py:176
+#: ../gui/wxpython/gmodeler/preferences.py:342
+#: ../gui/wxpython/gmodeler/preferences.py:454
+#: ../gui/wxpython/gmodeler/preferences.py:570
 msgid "Shape size"
 msgstr "形状的大小"
 
-#: ../gui/wxpython/gmodeler/preferences.py:159
-#: ../gui/wxpython/gmodeler/preferences.py:295
-#: ../gui/wxpython/gmodeler/preferences.py:380
-#: ../gui/wxpython/gmodeler/preferences.py:465
-#: ../gui/wxpython/psmap/dialogs.py:2718
-#: ../gui/wxpython/gui_core/dialogs.py:2460
-#: ../gui/wxpython/nviz/preferences.py:476
-msgid "Width:"
-msgstr "宽度:"
-
-#: ../gui/wxpython/gmodeler/preferences.py:177
-#: ../gui/wxpython/gmodeler/preferences.py:313
-#: ../gui/wxpython/gmodeler/preferences.py:398
-#: ../gui/wxpython/gmodeler/preferences.py:483
-#: ../gui/wxpython/psmap/dialogs.py:2730 ../gui/wxpython/psmap/dialogs.py:2868
-#: ../gui/wxpython/psmap/dialogs.py:3471
-#: ../gui/wxpython/gui_core/dialogs.py:2464 ../gui/wxpython/nviz/tools.py:285
-#: ../gui/wxpython/nviz/tools.py:1044 ../gui/wxpython/nviz/tools.py:1773
+#: ../gui/wxpython/gmodeler/preferences.py:209
+#: ../gui/wxpython/gmodeler/preferences.py:375
+#: ../gui/wxpython/gmodeler/preferences.py:487
+#: ../gui/wxpython/gmodeler/preferences.py:603
+#: ../gui/wxpython/psmap/dialogs.py:3835 ../gui/wxpython/psmap/dialogs.py:4052
+#: ../gui/wxpython/psmap/dialogs.py:4843
+#: ../gui/wxpython/gui_core/dialogs.py:1935 ../gui/wxpython/nviz/tools.py:365
+#: ../gui/wxpython/nviz/tools.py:1284 ../gui/wxpython/nviz/tools.py:2125
 msgid "Height:"
 msgstr "高度:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:204 ../gui/wxpython/nviz/tools.py:93
+#: ../gui/wxpython/gmodeler/preferences.py:249
+#: ../gui/wxpython/lmgr/frame.py:378 ../gui/wxpython/nviz/tools.py:95
 #, fuzzy
 msgid "Data"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/preferences.py:209
-#: ../gui/wxpython/dbmgr/base.py:2112 ../gui/wxpython/dbmgr/dialogs.py:761
-#: ../gui/wxpython/web_services/widgets.py:858
+#: ../gui/wxpython/gmodeler/preferences.py:254
+#: ../gui/wxpython/dbmgr/base.py:2322 ../gui/wxpython/dbmgr/dialogs.py:798
+#: ../gui/wxpython/web_services/widgets.py:922
 msgid "Type"
 msgstr "类型"
 
-#: ../gui/wxpython/gmodeler/preferences.py:216
+#: ../gui/wxpython/gmodeler/preferences.py:261
 #, fuzzy
 msgid "Raster:"
 msgstr "栅格值"
 
-#: ../gui/wxpython/gmodeler/preferences.py:233
+#: ../gui/wxpython/gmodeler/preferences.py:279
 msgid "3D raster:"
 msgstr "三维栅格图:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:250
+#: ../gui/wxpython/gmodeler/preferences.py:297
 msgid "Vector:"
 msgstr "矢量地图:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:267
+#: ../gui/wxpython/gmodeler/preferences.py:315
 #, fuzzy
 msgid "Table:"
 msgstr "表"
 
-#: ../gui/wxpython/gmodeler/preferences.py:340
+#: ../gui/wxpython/gmodeler/preferences.py:415
 msgid "Loop"
 msgstr "循环"
 
-#: ../gui/wxpython/gmodeler/preferences.py:425
+#: ../gui/wxpython/gmodeler/preferences.py:527
 #, fuzzy
 msgid "Comment"
 msgstr "添加命令"
 
-#: ../gui/wxpython/gmodeler/preferences.py:525
-#: ../gui/wxpython/menustrings.py:1963
+#: ../gui/wxpython/gmodeler/preferences.py:660
+#: ../gui/wxpython/menustrings.py:1969
 #, fuzzy
 msgid "Model properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/preferences.py:532
-#: ../gui/wxpython/lmgr/layertree.py:570 ../gui/wxpython/lmgr/layertree.py:628
-#: ../gui/wxpython/lmgr/layertree.py:644
+#: ../gui/wxpython/gmodeler/preferences.py:667
+#: ../gui/wxpython/lmgr/layertree.py:698 ../gui/wxpython/lmgr/layertree.py:818
+#: ../gui/wxpython/lmgr/layertree.py:852
 msgid "Metadata"
 msgstr "元数据"
 
-#: ../gui/wxpython/gmodeler/preferences.py:534
+#: ../gui/wxpython/gmodeler/preferences.py:669
 #, fuzzy
 msgid "Commands"
 msgstr "添加命令"
 
-#: ../gui/wxpython/gmodeler/preferences.py:546
-#: ../gui/wxpython/gui_core/preferences.py:819
-#: ../gui/wxpython/gui_core/dialogs.py:1679
-#: ../gui/wxpython/modules/mcalc_builder.py:232
-#: ../gui/wxpython/modules/vkrige.py:137 ../gui/wxpython/modules/vclean.py:137
+#: ../gui/wxpython/gmodeler/preferences.py:681
+#: ../gui/wxpython/gui_core/preferences.py:1087
+#: ../gui/wxpython/modules/mcalc_builder.py:269
+#: ../gui/wxpython/modules/import_export.py:85
+#: ../gui/wxpython/modules/vkrige.py:186 ../gui/wxpython/modules/vclean.py:145
 msgid "Allow output files to overwrite existing files"
 msgstr "允许输出文件覆盖已存文件"
 
-#: ../gui/wxpython/gmodeler/preferences.py:554
+#: ../gui/wxpython/gmodeler/preferences.py:693
 #, fuzzy
 msgid "Apply properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/preferences.py:566
-#: ../gui/wxpython/animation/dialogs.py:331
-#: ../gui/wxpython/vnet/dialogs.py:1481
-#: ../gui/wxpython/gui_core/widgets.py:1096
-#: ../gui/wxpython/gui_core/gselect.py:1441
-#: ../gui/wxpython/gui_core/gselect.py:1451
-#: ../gui/wxpython/gui_core/gselect.py:1452
+#: ../gui/wxpython/gmodeler/preferences.py:705
+#: ../gui/wxpython/animation/dialogs.py:401
+#: ../gui/wxpython/vnet/dialogs.py:1642
+#: ../gui/wxpython/gui_core/widgets.py:1281
+#: ../gui/wxpython/gui_core/gselect.py:1552
+#: ../gui/wxpython/gui_core/gselect.py:1567
+#: ../gui/wxpython/gui_core/gselect.py:1569
 msgid "Name:"
 msgstr "名称:"
 
-#: ../gui/wxpython/gmodeler/preferences.py:575
+#: ../gui/wxpython/gmodeler/preferences.py:714
 #, fuzzy
 msgid "Description:"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gmodeler/preferences.py:584
+#: ../gui/wxpython/gmodeler/preferences.py:723
 msgid "Author(s):"
 msgstr "作者:"
 
-#: ../gui/wxpython/gmodeler/model.py:63
+#: ../gui/wxpython/gmodeler/model.py:66
 msgid "model"
 msgstr "模型"
 
-#: ../gui/wxpython/gmodeler/model.py:64
+#: ../gui/wxpython/gmodeler/model.py:67
 msgid "Script generated by wxGUI Graphical Modeler."
 msgstr "wxGUI图形建模器生成的脚本"
 
-#: ../gui/wxpython/gmodeler/model.py:469 ../gui/wxpython/gmodeler/model.py:531
+#: ../gui/wxpython/gmodeler/model.py:492 ../gui/wxpython/gmodeler/model.py:555
 #, fuzzy, python-format
 msgid "undefined variable '%s'"
 msgstr "未知的类型"
 
-#: ../gui/wxpython/gmodeler/model.py:564
+#: ../gui/wxpython/gmodeler/model.py:589
 msgid "Running model..."
 msgstr "模型运行中..."
 
-#: ../gui/wxpython/gmodeler/model.py:583
+#: ../gui/wxpython/gmodeler/model.py:608
 msgid "Model is empty. Nothing to run."
 msgstr "模型为空,不用运行。"
 
-#: ../gui/wxpython/gmodeler/model.py:598
+#: ../gui/wxpython/gmodeler/model.py:625
 #, python-format
 msgid ""
 "Model is not valid. Do you want to run the model anyway?\n"
@@ -3117,92 +3499,92 @@ msgstr ""
 "\n"
 "%s"
 
-#: ../gui/wxpython/gmodeler/model.py:600
+#: ../gui/wxpython/gmodeler/model.py:628
 msgid "Run model?"
 msgstr "是否运行模型?"
 
-#: ../gui/wxpython/gmodeler/model.py:636
+#: ../gui/wxpython/gmodeler/model.py:667
 #, fuzzy
 msgid "Variables below not defined:"
 msgstr "数据库连接未定义"
 
-#: ../gui/wxpython/gmodeler/model.py:746
+#: ../gui/wxpython/gmodeler/model.py:791
 msgid "Raster maps"
 msgstr "栅格地图"
 
-#: ../gui/wxpython/gmodeler/model.py:749
+#: ../gui/wxpython/gmodeler/model.py:794
 msgid "3D raster maps"
 msgstr "基础栅格图"
 
-#: ../gui/wxpython/gmodeler/model.py:752 ../gui/wxpython/psmap/dialogs.py:1265
+#: ../gui/wxpython/gmodeler/model.py:797 ../gui/wxpython/psmap/dialogs.py:1684
 msgid "Vector maps"
 msgstr "矢量地图"
 
-#: ../gui/wxpython/gmodeler/model.py:1068
-#: ../gui/wxpython/gmodeler/model.py:1175 ../gui/wxpython/gui_core/ghelp.py:213
-#: ../gui/wxpython/core/gconsole.py:619
+#: ../gui/wxpython/gmodeler/model.py:1122
+#: ../gui/wxpython/gmodeler/model.py:1229 ../gui/wxpython/gui_core/ghelp.py:227
+#: ../gui/wxpython/core/gconsole.py:661
 msgid "unknown"
 msgstr "未知"
 
-#: ../gui/wxpython/gmodeler/model.py:1438
+#: ../gui/wxpython/gmodeler/model.py:1502
 #, fuzzy
 msgid "<not defined>"
 msgstr "%s - 未发现"
 
-#: ../gui/wxpython/gmodeler/model.py:1547
+#: ../gui/wxpython/gmodeler/model.py:1616
 #, fuzzy
 msgid "Condition: "
 msgstr "可选项"
 
-#: ../gui/wxpython/gmodeler/model.py:1549
+#: ../gui/wxpython/gmodeler/model.py:1618
 #, fuzzy
 msgid "Condition: not defined"
 msgstr "数据库连接未定义\n"
 
-#: ../gui/wxpython/gmodeler/model.py:1668
+#: ../gui/wxpython/gmodeler/model.py:1756
 msgid "if-else"
 msgstr "if-else"
 
-#: ../gui/wxpython/gmodeler/model.py:1768
+#: ../gui/wxpython/gmodeler/model.py:1864
 msgid "empty"
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:1769
+#: ../gui/wxpython/gmodeler/model.py:1866
 msgid "Details: unsupported tag name '{}'."
 msgstr ""
 
-#: ../gui/wxpython/gmodeler/model.py:2562
+#: ../gui/wxpython/gmodeler/model.py:2777
 #, fuzzy
 msgid "Model parameters"
 msgstr "地形参数"
 
-#: ../gui/wxpython/gmodeler/model.py:2580
+#: ../gui/wxpython/gmodeler/model.py:2802
 #, fuzzy
 msgid "Delete intermediate data when finish"
 msgstr "点模式下不创建表"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:47
+#: ../gui/wxpython/gmodeler/dialogs.py:49
 msgid "Data properties"
 msgstr "数据属性"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:86
-#: ../gui/wxpython/gmodeler/dialogs.py:99
+#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:112
 msgid "Name of element:"
 msgstr "要素名称:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:94
+#: ../gui/wxpython/gmodeler/dialogs.py:105
 msgid "Type of element:"
 msgstr "要素类型:"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:148
+#: ../gui/wxpython/gmodeler/dialogs.py:163
 msgid "Add GRASS command to the model"
 msgstr "添加GRASS指令到模型"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:169
+#: ../gui/wxpython/gmodeler/dialogs.py:194
 msgid "Label and comment"
 msgstr "标签和注释"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:262
+#: ../gui/wxpython/gmodeler/dialogs.py:292
 msgid ""
 "Command not defined.\n"
 "\n"
@@ -3212,7 +3594,7 @@ msgstr ""
 "\n"
 "无法将新动作添加到模型。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:268
+#: ../gui/wxpython/gmodeler/dialogs.py:299
 #, python-format
 msgid ""
 "'%s' is not a GRASS module.\n"
@@ -3223,36 +3605,36 @@ msgstr ""
 "\n"
 "无法将新动作添加到模块。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:300
+#: ../gui/wxpython/gmodeler/dialogs.py:335
 #, fuzzy
 msgid "Relation properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:317
+#: ../gui/wxpython/gmodeler/dialogs.py:357
 #, fuzzy
 msgid "From"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:319 ../gui/wxpython/dbmgr/base.py:2160
+#: ../gui/wxpython/gmodeler/dialogs.py:359 ../gui/wxpython/dbmgr/base.py:2383
 msgid "To"
 msgstr "到"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:361
+#: ../gui/wxpython/gmodeler/dialogs.py:401
 #, fuzzy, python-format
 msgid "Data: %s"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:367
+#: ../gui/wxpython/gmodeler/dialogs.py:407
 #, fuzzy
 msgid "Command:"
 msgstr "添加命令"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:373
+#: ../gui/wxpython/gmodeler/dialogs.py:413
 #, fuzzy
 msgid "Option:"
 msgstr "可选"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:388
+#: ../gui/wxpython/gmodeler/dialogs.py:428
 msgid ""
 "Relation doesn't start with data item.\n"
 "Unable to add relation."
@@ -3260,7 +3642,7 @@ msgstr ""
 "关系没有开始于数据项作。\n"
 "无法添加。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:395
+#: ../gui/wxpython/gmodeler/dialogs.py:435
 msgid ""
 "Relation doesn't point to GRASS command.\n"
 "Unable to add relation."
@@ -3268,7 +3650,7 @@ msgstr ""
 "关系与GRASS命令没有关联。\n"
 "无法添加。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:408
+#: ../gui/wxpython/gmodeler/dialogs.py:448
 msgid ""
 "No relevant option found.\n"
 "Unable to add relation."
@@ -3276,211 +3658,211 @@ msgstr ""
 "没有找到相关选项。\n"
 "无法添加。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:439
+#: ../gui/wxpython/gmodeler/dialogs.py:487
 #, fuzzy
 msgid "Condition"
 msgstr "可选项"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:465
+#: ../gui/wxpython/gmodeler/dialogs.py:515
 #, fuzzy
 msgid "Loop properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:471
+#: ../gui/wxpython/gmodeler/dialogs.py:521
 msgid "List of items in loop"
 msgstr "循环中的项目。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:474
+#: ../gui/wxpython/gmodeler/dialogs.py:524
 msgid "Series"
 msgstr "系列"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:475
+#: ../gui/wxpython/gmodeler/dialogs.py:526
 msgid "Define map series as condition for the loop"
 msgstr "指定地图系列作为循环条件"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:519
+#: ../gui/wxpython/gmodeler/dialogs.py:571
 msgid "Define series of maps"
 msgstr "指定地图系列"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:534
+#: ../gui/wxpython/gmodeler/dialogs.py:589
 #, fuzzy
 msgid "If-else properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:540
+#: ../gui/wxpython/gmodeler/dialogs.py:596
 msgid "List of items in 'if' block"
 msgstr "'if'语句块中的项目。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:545
+#: ../gui/wxpython/gmodeler/dialogs.py:602
 msgid "List of items in 'else' block"
 msgstr "'else'语句块中的项目。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:708
+#: ../gui/wxpython/gmodeler/dialogs.py:772
 #, python-format
 msgid "Variable <%s> already exists in the model. Adding variable failed."
 msgstr "变量<%s>已存在,添加失败。"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:737
+#: ../gui/wxpython/gmodeler/dialogs.py:803
 msgid "Do you want to delete all variables from the model?"
 msgstr "确定要删除模型中所有变量?"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:739
+#: ../gui/wxpython/gmodeler/dialogs.py:805
 msgid "Delete variables"
 msgstr "删除变量"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:845
-#: ../gui/wxpython/gui_core/gselect.py:1932
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:919
+#: ../gui/wxpython/gui_core/gselect.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "No"
 msgstr "否"
 
-#: ../gui/wxpython/gmodeler/dialogs.py:847
-#: ../gui/wxpython/gui_core/gselect.py:1934
-#: ../gui/wxpython/location_wizard/wizard.py:779
+#: ../gui/wxpython/gmodeler/dialogs.py:921
+#: ../gui/wxpython/gui_core/gselect.py:2086
+#: ../gui/wxpython/location_wizard/wizard.py:859
 msgid "Yes"
 msgstr "是"
 
-#: ../gui/wxpython/psmap/instructions.py:133
+#: ../gui/wxpython/psmap/instructions.py:139
 #, fuzzy, python-format
 msgid ""
 "Unable to open file\n"
 "%s"
 msgstr "无法打开输出文件 <%s>"
 
-#: ../gui/wxpython/psmap/instructions.py:467
+#: ../gui/wxpython/psmap/instructions.py:498
 #, python-format
 msgid "Instruction file will be loaded with following region: %s\n"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:472
+#: ../gui/wxpython/psmap/instructions.py:504
 #, fuzzy, python-format
 msgid ""
 "Region cannot be set\n"
 "%s"
 msgstr "当前范围不能设置。"
 
-#: ../gui/wxpython/psmap/instructions.py:611
-#: ../gui/wxpython/psmap/instructions.py:761
-#: ../gui/wxpython/psmap/instructions.py:877
-#: ../gui/wxpython/psmap/instructions.py:935
-#: ../gui/wxpython/psmap/instructions.py:1076
-#: ../gui/wxpython/psmap/instructions.py:1131
-#: ../gui/wxpython/psmap/instructions.py:1190
-#: ../gui/wxpython/psmap/instructions.py:1259
-#: ../gui/wxpython/psmap/instructions.py:1365
-#: ../gui/wxpython/psmap/instructions.py:1490
-#: ../gui/wxpython/psmap/instructions.py:1541
-#: ../gui/wxpython/psmap/instructions.py:1850
+#: ../gui/wxpython/psmap/instructions.py:664
+#: ../gui/wxpython/psmap/instructions.py:863
+#: ../gui/wxpython/psmap/instructions.py:996
+#: ../gui/wxpython/psmap/instructions.py:1074
+#: ../gui/wxpython/psmap/instructions.py:1248
+#: ../gui/wxpython/psmap/instructions.py:1315
+#: ../gui/wxpython/psmap/instructions.py:1382
+#: ../gui/wxpython/psmap/instructions.py:1466
+#: ../gui/wxpython/psmap/instructions.py:1588
+#: ../gui/wxpython/psmap/instructions.py:1733
+#: ../gui/wxpython/psmap/instructions.py:1787
+#: ../gui/wxpython/psmap/instructions.py:2158
 #, fuzzy, python-format
 msgid "Failed to read instruction %s"
 msgstr "无法读取行 %i\n"
 
-#: ../gui/wxpython/psmap/instructions.py:625
+#: ../gui/wxpython/psmap/instructions.py:679
 #, python-format
 msgid ""
 "Scale has changed, old value: %(old)s\n"
 "new value: %(new)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:628
+#: ../gui/wxpython/psmap/instructions.py:683
 #, python-format
 msgid ""
 "Failed to read instruction %s.\n"
 "Use 1:25000 notation."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:636
+#: ../gui/wxpython/psmap/instructions.py:693
 #, python-format
 msgid ""
 "Map frame position changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:644
+#: ../gui/wxpython/psmap/instructions.py:704
 #, python-format
 msgid ""
 "Map frame size changed, old value: %(old1)s %(old2)s\n"
 "new value: %(new1)s %(new2)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:691
+#: ../gui/wxpython/psmap/instructions.py:771
 #, fuzzy, python-format
 msgid ""
 "Failed to read instruction %(file)s.\n"
 "Unknown format %(for)s"
 msgstr "无法读取行 %i\n"
 
-#: ../gui/wxpython/psmap/instructions.py:704
+#: ../gui/wxpython/psmap/instructions.py:786
 #, fuzzy, python-format
 msgid "Failed to read instruction %s."
 msgstr "无法读取行 %i\n"
 
-#: ../gui/wxpython/psmap/instructions.py:818
-#: ../gui/wxpython/psmap/instructions.py:1700
+#: ../gui/wxpython/psmap/instructions.py:936
+#: ../gui/wxpython/psmap/instructions.py:2006
 #, python-format
 msgid ""
 "Characters on position %s are not supported by ISO-8859-1 (Latin 1) encoding "
 "which is required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:822
-#: ../gui/wxpython/psmap/instructions.py:1704
+#: ../gui/wxpython/psmap/instructions.py:940
+#: ../gui/wxpython/psmap/instructions.py:2010
 msgid ""
 "Not all characters are supported by ISO-8859-1 (Latin 1) encoding which is "
 "required by module ps.map."
 msgstr ""
 
-#: ../gui/wxpython/psmap/instructions.py:938
+#: ../gui/wxpython/psmap/instructions.py:1077
 #, fuzzy, python-format
 msgid "Failed to read instruction %(inst)s: file %(file)s not found."
 msgstr "无法读取行 %i\n"
 
-#: ../gui/wxpython/psmap/frame.py:51
+#: ../gui/wxpython/psmap/frame.py:53
 #, fuzzy
 msgid "GRASS GIS Cartographic Composer"
 msgstr "地图计算"
 
-#: ../gui/wxpython/psmap/frame.py:186
+#: ../gui/wxpython/psmap/frame.py:213
 msgid ""
 "Python Imaging Library is not available.\n"
 "'Preview' functionality won't work."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:238
+#: ../gui/wxpython/psmap/frame.py:267
 msgid "Program ps2pdf is not available. Please install it first to create PDF."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:282
+#: ../gui/wxpython/psmap/frame.py:311
 #, fuzzy
 msgid "Generating PDF..."
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/psmap/frame.py:284
+#: ../gui/wxpython/psmap/frame.py:313
 #, fuzzy
 msgid "Generating PostScript..."
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/psmap/frame.py:286
+#: ../gui/wxpython/psmap/frame.py:315
 #, fuzzy
 msgid "Generating preview..."
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/psmap/frame.py:296
+#: ../gui/wxpython/psmap/frame.py:332
 #, python-format
 msgid "Ps.map exited with return code %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:326
+#: ../gui/wxpython/psmap/frame.py:368
 #, python-format
 msgid "%(prg)s exited with return code %(code)s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:329
+#: ../gui/wxpython/psmap/frame.py:372
 #, fuzzy
 msgid "PDF generated"
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/psmap/frame.py:332
+#: ../gui/wxpython/psmap/frame.py:375
 #, python-format
 msgid ""
 "Program ps2pdf is not available. Please install it to create PDF.\n"
@@ -3488,164 +3870,164 @@ msgid ""
 " %s"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:335
+#: ../gui/wxpython/psmap/frame.py:378
 #, fuzzy
 msgid "PostScript file generated"
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/psmap/frame.py:341
+#: ../gui/wxpython/psmap/frame.py:387
 #, fuzzy
 msgid "Generating preview, wait please"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/psmap/frame.py:355
+#: ../gui/wxpython/psmap/frame.py:403
 #, fuzzy
 msgid "Preview not available"
 msgstr "[%s] 的类别文件无效"
 
-#: ../gui/wxpython/psmap/frame.py:356
+#: ../gui/wxpython/psmap/frame.py:405
 msgid ""
 "Preview is not available probably because Ghostscript is not installed or "
 "not on PATH."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:358
+#: ../gui/wxpython/psmap/frame.py:408
 msgid "Please follow instructions on GRASS Trac Wiki."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:369
+#: ../gui/wxpython/psmap/frame.py:419
 msgid "Preview generated"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:399
+#: ../gui/wxpython/psmap/frame.py:451
 #, fuzzy
 msgid "Save file as"
 msgstr "保存组文件"
 
-#: ../gui/wxpython/psmap/frame.py:441
+#: ../gui/wxpython/psmap/frame.py:498
 #, fuzzy, python-format
 msgid "Failed to read file %s."
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/psmap/frame.py:569 ../gui/wxpython/psmap/frame.py:592
-#: ../gui/wxpython/psmap/dialogs.py:1205
+#: ../gui/wxpython/psmap/frame.py:635 ../gui/wxpython/psmap/frame.py:660
+#: ../gui/wxpython/psmap/dialogs.py:1621
 msgid "Please, create map frame first."
 msgstr "请先创建地图框架"
 
-#: ../gui/wxpython/psmap/frame.py:608
+#: ../gui/wxpython/psmap/frame.py:677
 msgid "Scalebar is not appropriate for this projection"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1028
+#: ../gui/wxpython/psmap/frame.py:1166
 msgid "Press button with green triangle icon to generate preview."
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1052
+#: ../gui/wxpython/psmap/frame.py:1189
 msgid "wxGUI Cartographic Composer"
 msgstr ""
 
-#: ../gui/wxpython/psmap/frame.py:1103
+#: ../gui/wxpython/psmap/frame.py:1240
 msgid "MAP FRAME"
 msgstr "地图边框"
 
-#: ../gui/wxpython/psmap/frame.py:1104
+#: ../gui/wxpython/psmap/frame.py:1241
 msgid "RASTER LEGEND"
 msgstr "栅格图例"
 
-#: ../gui/wxpython/psmap/frame.py:1105
+#: ../gui/wxpython/psmap/frame.py:1242
 msgid "VECTOR LEGEND"
 msgstr "矢量图例"
 
-#: ../gui/wxpython/psmap/frame.py:1106
+#: ../gui/wxpython/psmap/frame.py:1243
 msgid "MAP INFO"
 msgstr "地图信息"
 
-#: ../gui/wxpython/psmap/frame.py:1107
+#: ../gui/wxpython/psmap/frame.py:1244
 msgid "SCALE BAR"
 msgstr "比例尺"
 
-#: ../gui/wxpython/psmap/frame.py:1108
+#: ../gui/wxpython/psmap/frame.py:1245
 msgid "IMAGE"
 msgstr "图像"
 
-#: ../gui/wxpython/psmap/frame.py:1109
+#: ../gui/wxpython/psmap/frame.py:1246
 msgid "NORTH ARROW"
 msgstr "指北针"
 
-#: ../gui/wxpython/psmap/frame.py:1351
+#: ../gui/wxpython/psmap/frame.py:1522
 msgid "Click and drag to resize object"
 msgstr "点击并拖动以改变大小"
 
-#: ../gui/wxpython/psmap/frame.py:2171
+#: ../gui/wxpython/psmap/frame.py:2467
 msgid "labels: "
 msgstr "标签:"
 
-#: ../gui/wxpython/psmap/utils.py:93
+#: ../gui/wxpython/psmap/utils.py:105
 msgid "inch"
 msgstr "英寸"
 
-#: ../gui/wxpython/psmap/utils.py:94 ../gui/wxpython/modules/vclean.py:196
+#: ../gui/wxpython/psmap/utils.py:106 ../gui/wxpython/modules/vclean.py:222
 #, fuzzy
 msgid "point"
 msgstr "点"
 
-#: ../gui/wxpython/psmap/utils.py:95
+#: ../gui/wxpython/psmap/utils.py:107
 #, fuzzy
 msgid "centimeter"
 msgstr "参数:"
 
-#: ../gui/wxpython/psmap/utils.py:96
+#: ../gui/wxpython/psmap/utils.py:108
 #, fuzzy
 msgid "millimeter"
 msgstr "参数:"
 
-#: ../gui/wxpython/psmap/utils.py:97
+#: ../gui/wxpython/psmap/utils.py:112
 #, fuzzy
 msgid "meters"
 msgstr "参数:"
 
-#: ../gui/wxpython/psmap/utils.py:98
+#: ../gui/wxpython/psmap/utils.py:115
 #, fuzzy
 msgid "kilometers"
 msgstr "参数:"
 
-#: ../gui/wxpython/psmap/utils.py:99
+#: ../gui/wxpython/psmap/utils.py:118
 #, fuzzy
 msgid "feet"
 msgstr "删除"
 
-#: ../gui/wxpython/psmap/utils.py:100
+#: ../gui/wxpython/psmap/utils.py:121
 #, fuzzy
 msgid "miles"
 msgstr "文件(&F)"
 
-#: ../gui/wxpython/psmap/utils.py:101 ../gui/wxpython/psmap/utils.py:105
+#: ../gui/wxpython/psmap/utils.py:124 ../gui/wxpython/psmap/utils.py:128
 msgid "nautical miles"
 msgstr "海里"
 
-#: ../gui/wxpython/psmap/utils.py:103
+#: ../gui/wxpython/psmap/utils.py:126
 msgid "pixel"
 msgstr "像素"
 
-#: ../gui/wxpython/psmap/utils.py:104
+#: ../gui/wxpython/psmap/utils.py:127
 #, fuzzy
 msgid "meter"
 msgstr "参数:"
 
-#: ../gui/wxpython/psmap/utils.py:106
+#: ../gui/wxpython/psmap/utils.py:130
 msgid "degree"
 msgstr "度数"
 
-#: ../gui/wxpython/psmap/utils.py:342
+#: ../gui/wxpython/psmap/utils.py:397
 #, fuzzy
 msgid "Unable to run `ps.map -b`"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:198
+#: ../gui/wxpython/psmap/dialogs.py:217
 msgid "Units:"
 msgstr "单位:"
 
-#: ../gui/wxpython/psmap/dialogs.py:207
+#: ../gui/wxpython/psmap/dialogs.py:228
 msgid ""
 "Position of the top left corner\n"
 "from the top left edge of the paper"
@@ -3653,34 +4035,34 @@ msgstr ""
 "左上角位置\n"
 "从纸张的左上角边缘开始"
 
-#: ../gui/wxpython/psmap/dialogs.py:208
-#: ../gui/wxpython/animation/dialogs.py:887
+#: ../gui/wxpython/psmap/dialogs.py:230
+#: ../gui/wxpython/animation/dialogs.py:1136
 #, fuzzy
 msgid "X:"
 msgstr ":"
 
-#: ../gui/wxpython/psmap/dialogs.py:209
-#: ../gui/wxpython/animation/dialogs.py:889
+#: ../gui/wxpython/psmap/dialogs.py:232
+#: ../gui/wxpython/animation/dialogs.py:1138
 #, fuzzy
 msgid "Y:"
 msgstr ":"
 
-#: ../gui/wxpython/psmap/dialogs.py:221
+#: ../gui/wxpython/psmap/dialogs.py:257
 #, fuzzy
 msgid "Position is given:"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:222
+#: ../gui/wxpython/psmap/dialogs.py:259
 #, fuzzy
 msgid "relative to paper"
 msgstr "要素类型"
 
-#: ../gui/wxpython/psmap/dialogs.py:223
+#: ../gui/wxpython/psmap/dialogs.py:261
 #, fuzzy
 msgid "by map coordinates"
 msgstr "地图东向格网坐标"
 
-#: ../gui/wxpython/psmap/dialogs.py:237
+#: ../gui/wxpython/psmap/dialogs.py:291
 msgid ""
 "Position from the top left\n"
 "edge of the paper"
@@ -3688,210 +4070,208 @@ msgstr ""
 "从左上角开始的位置\n"
 "纸张边缘"
 
-#: ../gui/wxpython/psmap/dialogs.py:292 ../gui/wxpython/psmap/dialogs.py:3550
-#: ../gui/wxpython/gui_core/preferences.py:1613
+#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:4965
+#: ../gui/wxpython/gui_core/preferences.py:2122
 msgid "Font size:"
 msgstr "字号:"
 
-#: ../gui/wxpython/psmap/dialogs.py:305
+#: ../gui/wxpython/psmap/dialogs.py:410
 #, fuzzy
 msgid "Choose color:"
 msgstr "选择要运行的模型"
 
-#: ../gui/wxpython/psmap/dialogs.py:353
+#: ../gui/wxpython/psmap/dialogs.py:459
 msgid "Close dialog and apply changes"
 msgstr "关闭对话框并使改动生效"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:510
 msgid "Units"
 msgstr "单位"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
-#: ../gui/wxpython/animation/dialogs.py:759
+#: ../gui/wxpython/psmap/dialogs.py:511
+#: ../gui/wxpython/animation/dialogs.py:925
 #, fuzzy
 msgid "Format"
 msgstr "OGR 格式"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:512
 #, fuzzy
 msgid "Orientation"
 msgstr "相关性"
 
-#: ../gui/wxpython/psmap/dialogs.py:384 ../gui/wxpython/psmap/dialogs.py:2079
+#: ../gui/wxpython/psmap/dialogs.py:513 ../gui/wxpython/psmap/dialogs.py:2874
 #, fuzzy
 msgid "Width"
 msgstr "% 宽度"
 
-#: ../gui/wxpython/psmap/dialogs.py:384
+#: ../gui/wxpython/psmap/dialogs.py:514
 #, fuzzy
 msgid "Height"
 msgstr " 右键: 退出\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:515
 msgid "Left"
 msgstr "左"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
+#: ../gui/wxpython/psmap/dialogs.py:516
 #, fuzzy
 msgid "Right"
 msgstr " 右键: 退出\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:232
+#: ../gui/wxpython/psmap/dialogs.py:517
+#: ../gui/wxpython/location_wizard/dialogs.py:276
 msgid "Top"
 msgstr "顶端"
 
-#: ../gui/wxpython/psmap/dialogs.py:385
-#: ../gui/wxpython/location_wizard/dialogs.py:240
+#: ../gui/wxpython/psmap/dialogs.py:518
+#: ../gui/wxpython/location_wizard/dialogs.py:284
 msgid "Bottom"
 msgstr "底部"
 
-#: ../gui/wxpython/psmap/dialogs.py:440
+#: ../gui/wxpython/psmap/dialogs.py:580
 #, fuzzy
 msgid "Literal is not allowed!"
 msgstr "** 不允许负值!"
 
-#: ../gui/wxpython/psmap/dialogs.py:440 ../gui/wxpython/psmap/dialogs.py:1036
-#: ../gui/wxpython/psmap/dialogs.py:1058 ../gui/wxpython/psmap/dialogs.py:1101
-#: ../gui/wxpython/psmap/dialogs.py:3632
-#: ../gui/wxpython/animation/controller.py:277
-#: ../gui/wxpython/animation/dialogs.py:599
-#: ../gui/wxpython/wxplot/dialogs.py:500
+#: ../gui/wxpython/psmap/dialogs.py:581 ../gui/wxpython/psmap/dialogs.py:1407
+#: ../gui/wxpython/psmap/dialogs.py:1431 ../gui/wxpython/psmap/dialogs.py:1482
+#: ../gui/wxpython/psmap/dialogs.py:5090
+#: ../gui/wxpython/animation/controller.py:295
+#: ../gui/wxpython/animation/dialogs.py:742
+#: ../gui/wxpython/wxplot/dialogs.py:601
 #, fuzzy
 msgid "Invalid input"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/psmap/dialogs.py:449
+#: ../gui/wxpython/psmap/dialogs.py:594
 #, fuzzy
 msgid "Page size"
 msgstr "输入文件"
 
-#: ../gui/wxpython/psmap/dialogs.py:451
+#: ../gui/wxpython/psmap/dialogs.py:598
 msgid "Margins"
 msgstr "边缘"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 #, fuzzy
 msgid "Portrait"
 msgstr "PostScript 输出文件"
 
-#: ../gui/wxpython/psmap/dialogs.py:455
+#: ../gui/wxpython/psmap/dialogs.py:605
 msgid "Landscape"
 msgstr "横向"
 
-#: ../gui/wxpython/psmap/dialogs.py:507 ../gui/wxpython/psmap/dialogs.py:528
-#: ../gui/wxpython/location_wizard/wizard.py:1783
+#: ../gui/wxpython/psmap/dialogs.py:688 ../gui/wxpython/psmap/dialogs.py:709
+#: ../gui/wxpython/location_wizard/wizard.py:2176
 msgid "custom"
 msgstr "自定义"
 
-#: ../gui/wxpython/psmap/dialogs.py:557
+#: ../gui/wxpython/psmap/dialogs.py:751
 #, fuzzy
 msgid "Map settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:563
+#: ../gui/wxpython/psmap/dialogs.py:761
 #, fuzzy
 msgid "Map frame settings"
 msgstr "打开设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:619 ../gui/wxpython/psmap/dialogs.py:674
-#: ../gui/wxpython/psmap/toolbars.py:79 ../gui/wxpython/menustrings.py:1994
+#: ../gui/wxpython/psmap/dialogs.py:819 ../gui/wxpython/psmap/dialogs.py:873
+#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2000
 #, fuzzy
 msgid "Map frame"
 msgstr "地图层"
 
-#: ../gui/wxpython/psmap/dialogs.py:680
+#: ../gui/wxpython/psmap/dialogs.py:879
 #, fuzzy
 msgid "Map frame options:"
 msgstr "投影管理"
 
-#: ../gui/wxpython/psmap/dialogs.py:681
+#: ../gui/wxpython/psmap/dialogs.py:880
 #, fuzzy
 msgid "fit frame to match selected map"
 msgstr "设置区域以匹配这个矢量图"
 
-#: ../gui/wxpython/psmap/dialogs.py:682
+#: ../gui/wxpython/psmap/dialogs.py:881
 #, fuzzy
 msgid "fit frame to match saved region"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/psmap/dialogs.py:683
+#: ../gui/wxpython/psmap/dialogs.py:882
 #, fuzzy
 msgid "fit frame to match current computational region"
 msgstr "不更新当前区域"
 
-#: ../gui/wxpython/psmap/dialogs.py:684
+#: ../gui/wxpython/psmap/dialogs.py:883
 msgid "fixed scale and map center"
 msgstr "固定的比例和地图中心位置"
 
-#: ../gui/wxpython/psmap/dialogs.py:692 ../gui/wxpython/psmap/dialogs.py:861
+#: ../gui/wxpython/psmap/dialogs.py:900 ../gui/wxpython/psmap/dialogs.py:1210
 #, fuzzy
 msgid "Map selection"
 msgstr "投影管理"
 
-#: ../gui/wxpython/psmap/dialogs.py:700 ../gui/wxpython/psmap/dialogs.py:1278
+#: ../gui/wxpython/psmap/dialogs.py:913 ../gui/wxpython/psmap/dialogs.py:1701
 msgid "Map:"
 msgstr "地图:"
 
-#: ../gui/wxpython/psmap/dialogs.py:700
+#: ../gui/wxpython/psmap/dialogs.py:913
 #, fuzzy
 msgid "Region:"
 msgstr "区域"
 
-#: ../gui/wxpython/psmap/dialogs.py:719
+#: ../gui/wxpython/psmap/dialogs.py:970
 #, fuzzy
 msgid "Map scale and center"
 msgstr "显示比例尺和指北针"
 
-#: ../gui/wxpython/psmap/dialogs.py:724
+#: ../gui/wxpython/psmap/dialogs.py:974
 msgid "Center:"
 msgstr "中心:"
 
-#: ../gui/wxpython/psmap/dialogs.py:725
+#: ../gui/wxpython/psmap/dialogs.py:975
 #, fuzzy
 msgid "E:"
 msgstr ":"
 
-#: ../gui/wxpython/psmap/dialogs.py:726
+#: ../gui/wxpython/psmap/dialogs.py:976
 #, fuzzy
 msgid "N:"
 msgstr ":"
 
-#: ../gui/wxpython/psmap/dialogs.py:729 ../gui/wxpython/psmap/dialogs.py:4161
+#: ../gui/wxpython/psmap/dialogs.py:983 ../gui/wxpython/psmap/dialogs.py:5846
 #, fuzzy
 msgid "Scale:"
 msgstr "保存"
 
-#: ../gui/wxpython/psmap/dialogs.py:730
+#: ../gui/wxpython/psmap/dialogs.py:984
 msgid "1 :"
 msgstr "1 :"
 
-#: ../gui/wxpython/psmap/dialogs.py:750
+#: ../gui/wxpython/psmap/dialogs.py:1048
 #, fuzzy
 msgid "Map max resolution (dpi):"
 msgstr "重采样(改变分辨率)"
 
-#. GTC Line around legend or map frame
-#. GTC  Line around legend or map frame
-#: ../gui/wxpython/psmap/dialogs.py:764 ../gui/wxpython/psmap/dialogs.py:2649
+#: ../gui/wxpython/psmap/dialogs.py:1085 ../gui/wxpython/psmap/dialogs.py:3695
 #, fuzzy
 msgid "Border"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:768
+#: ../gui/wxpython/psmap/dialogs.py:1091
 msgid "draw border around map frame"
 msgstr "绘制地图框架外边框"
 
-#: ../gui/wxpython/psmap/dialogs.py:774
+#: ../gui/wxpython/psmap/dialogs.py:1098
 #, fuzzy
 msgid "border color:"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:775
+#: ../gui/wxpython/psmap/dialogs.py:1100
 msgid "border width (pts):"
 msgstr "边框宽度(pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:869
+#: ../gui/wxpython/psmap/dialogs.py:1219
 msgid ""
 "Region is set to match this map,\n"
 "raster or vector map must be added later"
@@ -3899,474 +4279,476 @@ msgstr ""
 "区域已设置为与该地图匹配,\n"
 "稍后须添加栅格或矢量地图"
 
-#: ../gui/wxpython/psmap/dialogs.py:876
+#: ../gui/wxpython/psmap/dialogs.py:1226
 #, fuzzy
 msgid "Region selection"
 msgstr "反向清扫完成"
 
-#: ../gui/wxpython/psmap/dialogs.py:1035
+#: ../gui/wxpython/psmap/dialogs.py:1406
 #, fuzzy
 msgid "No map selected!"
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/psmap/dialogs.py:1057
+#: ../gui/wxpython/psmap/dialogs.py:1430
 #, fuzzy
 msgid "No region selected!"
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/psmap/dialogs.py:1100
+#: ../gui/wxpython/psmap/dialogs.py:1481
 #, fuzzy
 msgid "Invalid scale or map center!"
 msgstr "无效的空值 (仅用于整型)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1138 ../gui/wxpython/lmgr/layertree.py:800
-#: ../gui/wxpython/menustrings.py:1996 ../gui/wxpython/nviz/mapwindow.py:1676
-#: ../gui/wxpython/nviz/tools.py:653
+#: ../gui/wxpython/psmap/dialogs.py:1526 ../gui/wxpython/lmgr/layertree.py:1015
+#: ../gui/wxpython/menustrings.py:2002 ../gui/wxpython/nviz/mapwindow.py:1769
+#: ../gui/wxpython/nviz/tools.py:826
 msgid "Raster map"
 msgstr "栅格地图"
 
-#: ../gui/wxpython/psmap/dialogs.py:1160
+#: ../gui/wxpython/psmap/dialogs.py:1551
 #, fuzzy
 msgid "Choose raster map"
 msgstr "叠加栅格图"
 
-#: ../gui/wxpython/psmap/dialogs.py:1164
+#: ../gui/wxpython/psmap/dialogs.py:1556
 #, fuzzy
 msgid "no raster map"
 msgstr "栅格地图"
 
-#: ../gui/wxpython/psmap/dialogs.py:1165
+#: ../gui/wxpython/psmap/dialogs.py:1559
 #, fuzzy
 msgid "raster:"
 msgstr "栅格值"
 
-#: ../gui/wxpython/psmap/dialogs.py:1274
+#: ../gui/wxpython/psmap/dialogs.py:1697
 #, fuzzy
 msgid "Add map"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "points"
 msgstr "点"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282 ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:1705 ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "lines"
 msgstr "线"
 
-#: ../gui/wxpython/psmap/dialogs.py:1282
+#: ../gui/wxpython/psmap/dialogs.py:1705
 #, fuzzy
 msgid "areas"
 msgstr "面\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1284
+#: ../gui/wxpython/psmap/dialogs.py:1711
 #, fuzzy
 msgid "Data Type"
 msgstr "要素类型"
 
-#: ../gui/wxpython/psmap/dialogs.py:1287 ../gui/wxpython/dbmgr/base.py:2131
-#: ../gui/wxpython/animation/dialogs.py:625
+#: ../gui/wxpython/psmap/dialogs.py:1716 ../gui/wxpython/dbmgr/base.py:2345
+#: ../gui/wxpython/animation/dialogs.py:775
 msgid "Add"
 msgstr "添加"
 
-#: ../gui/wxpython/psmap/dialogs.py:1299
+#: ../gui/wxpython/psmap/dialogs.py:1745
 #, fuzzy
 msgid "Manage vector maps"
 msgstr "新矢量地图"
 
-#: ../gui/wxpython/psmap/dialogs.py:1305
+#: ../gui/wxpython/psmap/dialogs.py:1750
 #, fuzzy
 msgid "The topmost vector map overlaps the others"
 msgstr "将 3D 栅格图转化为 2D 栅格图"
 
-#: ../gui/wxpython/psmap/dialogs.py:1307 ../gui/wxpython/psmap/dialogs.py:2629
-#: ../gui/wxpython/web_services/widgets.py:225
+#: ../gui/wxpython/psmap/dialogs.py:1754 ../gui/wxpython/psmap/dialogs.py:3652
+#: ../gui/wxpython/web_services/widgets.py:254
 msgid "Up"
 msgstr "向上"
 
-#: ../gui/wxpython/psmap/dialogs.py:1308 ../gui/wxpython/psmap/dialogs.py:2630
-#: ../gui/wxpython/web_services/widgets.py:226
+#: ../gui/wxpython/psmap/dialogs.py:1755 ../gui/wxpython/psmap/dialogs.py:3653
+#: ../gui/wxpython/web_services/widgets.py:256
 #, fuzzy
 msgid "Down"
 msgstr "完成\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1309 ../gui/wxpython/menustrings.py:172
-#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2012
-#: ../gui/wxpython/nviz/tools.py:1102 ../gui/wxpython/nviz/tools.py:1982
-#: ../gui/wxpython/nviz/tools.py:2030
+#: ../gui/wxpython/psmap/dialogs.py:1756 ../gui/wxpython/menustrings.py:172
+#: ../gui/wxpython/menustrings.py:1159 ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/nviz/tools.py:1363 ../gui/wxpython/nviz/tools.py:2366
+#: ../gui/wxpython/nviz/tools.py:2418
 msgid "Delete"
 msgstr "删除"
 
-#: ../gui/wxpython/psmap/dialogs.py:1310
+#: ../gui/wxpython/psmap/dialogs.py:1757
 #, fuzzy
 msgid "Properties..."
 msgstr "要素类型"
 
-#: ../gui/wxpython/psmap/dialogs.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:2000
 #, fuzzy
 msgid "Raster map settings"
 msgstr "打开设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:1549
+#: ../gui/wxpython/psmap/dialogs.py:2048
 #, fuzzy
 msgid "Vector maps settings"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/psmap/dialogs.py:1584
+#: ../gui/wxpython/psmap/dialogs.py:2096
 #, fuzzy, python-format
 msgid "%s properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/psmap/dialogs.py:1635
+#: ../gui/wxpython/psmap/dialogs.py:2151
 #, fuzzy
 msgid "Data selection"
 msgstr "反向清扫完成"
 
-#: ../gui/wxpython/psmap/dialogs.py:1642
-#: ../gui/wxpython/gui_core/dialogs.py:1636
+#: ../gui/wxpython/psmap/dialogs.py:2162 ../gui/wxpython/gui_core/forms.py:1980
+#: ../gui/wxpython/modules/import_export.py:75
 #, fuzzy
 msgid "Feature type"
 msgstr "要素类型"
 
-#: ../gui/wxpython/psmap/dialogs.py:1646
+#: ../gui/wxpython/psmap/dialogs.py:2166
 #, fuzzy
 msgid "centroids"
 msgstr "读取%-5d个质心\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1648
+#: ../gui/wxpython/psmap/dialogs.py:2168
 #, fuzzy
 msgid "boundaries"
 msgstr "无法更新边界"
 
-#: ../gui/wxpython/psmap/dialogs.py:1664
+#: ../gui/wxpython/psmap/dialogs.py:2206
 #, fuzzy
 msgid "Layer selection"
 msgstr "反向清扫完成"
 
-#: ../gui/wxpython/psmap/dialogs.py:1670
+#: ../gui/wxpython/psmap/dialogs.py:2213
 msgid "Database connection is not defined in DB file."
 msgstr "DB文件没有定义数据连接"
 
-#: ../gui/wxpython/psmap/dialogs.py:1671
+#: ../gui/wxpython/psmap/dialogs.py:2214
 #, fuzzy
 msgid "Select layer:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:1694
+#: ../gui/wxpython/psmap/dialogs.py:2243
 msgid "list of categories (e.g. 1,3,5-7)"
 msgstr "类别列表(例如:1,3,5-7)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1721 ../gui/wxpython/menustrings.py:324
-#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:790
-#: ../gui/wxpython/nviz/tools.py:2405
+#: ../gui/wxpython/psmap/dialogs.py:2296 ../gui/wxpython/menustrings.py:324
+#: ../gui/wxpython/menustrings.py:1231 ../gui/wxpython/nviz/tools.py:976
+#: ../gui/wxpython/nviz/tools.py:2816
 msgid "Mask"
 msgstr "掩码"
 
-#: ../gui/wxpython/psmap/dialogs.py:1724
+#: ../gui/wxpython/psmap/dialogs.py:2300
 msgid "Use current mask"
 msgstr "使用当前掩码"
 
-#: ../gui/wxpython/psmap/dialogs.py:1741 ../gui/wxpython/psmap/dialogs.py:1840
+#: ../gui/wxpython/psmap/dialogs.py:2319 ../gui/wxpython/psmap/dialogs.py:2475
 #, fuzzy
 msgid "Colors"
 msgstr "颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:1746 ../gui/wxpython/psmap/dialogs.py:1845
+#: ../gui/wxpython/psmap/dialogs.py:2328 ../gui/wxpython/psmap/dialogs.py:2484
 #, fuzzy
 msgid "Outline"
 msgstr "文本颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:1750 ../gui/wxpython/psmap/dialogs.py:1854
+#: ../gui/wxpython/psmap/dialogs.py:2333 ../gui/wxpython/psmap/dialogs.py:2494
 msgid "draw outline"
 msgstr "绘制轮廓"
 
-#: ../gui/wxpython/psmap/dialogs.py:1753 ../gui/wxpython/psmap/dialogs.py:1858
-#: ../gui/wxpython/psmap/dialogs.py:3745 ../gui/wxpython/psmap/dialogs.py:3750
+#: ../gui/wxpython/psmap/dialogs.py:2336 ../gui/wxpython/psmap/dialogs.py:2499
+#: ../gui/wxpython/psmap/dialogs.py:5271 ../gui/wxpython/psmap/dialogs.py:5279
 msgid "Width (pts):"
 msgstr "宽度(pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:1790 ../gui/wxpython/psmap/dialogs.py:1894
-#: ../gui/wxpython/wxplot/dialogs.py:937 ../gui/wxpython/wxplot/dialogs.py:987
+#: ../gui/wxpython/psmap/dialogs.py:2400 ../gui/wxpython/psmap/dialogs.py:2561
+#: ../gui/wxpython/wxplot/dialogs.py:1136
+#: ../gui/wxpython/wxplot/dialogs.py:1217
 #, fuzzy
 msgid "Fill"
 msgstr "文件(&F)"
 
-#: ../gui/wxpython/psmap/dialogs.py:1794
+#: ../gui/wxpython/psmap/dialogs.py:2405
 #, fuzzy
 msgid "fill color"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1797 ../gui/wxpython/psmap/dialogs.py:1900
+#: ../gui/wxpython/psmap/dialogs.py:2411 ../gui/wxpython/psmap/dialogs.py:2569
 #, fuzzy
 msgid "choose color:"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:1809 ../gui/wxpython/psmap/dialogs.py:1913
+#: ../gui/wxpython/psmap/dialogs.py:2426 ../gui/wxpython/psmap/dialogs.py:2585
 msgid "color from map table column:"
 msgstr "从地图表格列选择颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:1856
+#: ../gui/wxpython/psmap/dialogs.py:2497
 msgid "No effect for fill color from table column"
 msgstr "地图表格列没有设置填充颜色效果"
 
-#: ../gui/wxpython/psmap/dialogs.py:1898
+#: ../gui/wxpython/psmap/dialogs.py:2566
 #, fuzzy
 msgid "Color of lines:"
 msgstr "比特模式的值"
 
-#: ../gui/wxpython/psmap/dialogs.py:1943 ../gui/wxpython/psmap/dialogs.py:2074
-#: ../gui/wxpython/psmap/dialogs.py:2143
+#: ../gui/wxpython/psmap/dialogs.py:2633 ../gui/wxpython/psmap/dialogs.py:2865
+#: ../gui/wxpython/psmap/dialogs.py:2990
 #, fuzzy
 msgid "Size and style"
 msgstr "坡度和方位"
 
-#: ../gui/wxpython/psmap/dialogs.py:1952 ../gui/wxpython/nviz/tools.py:1423
+#: ../gui/wxpython/psmap/dialogs.py:2647 ../gui/wxpython/nviz/tools.py:1716
 #, fuzzy
 msgid "symbol:"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/psmap/dialogs.py:1961
+#: ../gui/wxpython/psmap/dialogs.py:2661
 #, fuzzy
 msgid "eps file:"
 msgstr "保存组文件"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
-#: ../gui/wxpython/psmap/dialogs.py:4116
-#: ../gui/wxpython/animation/dialogs.py:398
-#: ../gui/wxpython/animation/dialogs.py:858
-#: ../gui/wxpython/animation/dialogs.py:929
-#: ../gui/wxpython/animation/dialogs.py:952
-#: ../gui/wxpython/animation/dialogs.py:969
-#: ../gui/wxpython/animation/dialogs.py:992
-#: ../gui/wxpython/gui_core/forms.py:1524
-#: ../gui/wxpython/gui_core/forms.py:1588
-#: ../gui/wxpython/gui_core/dialogs.py:2128
-#: ../gui/wxpython/gui_core/gselect.py:1079
-#: ../gui/wxpython/gui_core/gselect.py:1391
-#: ../gui/wxpython/gui_core/gselect.py:1404
-#: ../gui/wxpython/gui_core/gselect.py:1443
-#: ../gui/wxpython/gui_core/gselect.py:1466
-#: ../gui/wxpython/location_wizard/wizard.py:104
-#: ../gui/wxpython/location_wizard/wizard.py:1171
-#: ../gui/wxpython/location_wizard/wizard.py:1245
-#: ../gui/wxpython/location_wizard/wizard.py:1331
-#: ../gui/wxpython/nviz/tools.py:484
+#: ../gui/wxpython/psmap/dialogs.py:2665 ../gui/wxpython/psmap/dialogs.py:3007
+#: ../gui/wxpython/psmap/dialogs.py:5782
+#: ../gui/wxpython/animation/dialogs.py:507
+#: ../gui/wxpython/animation/dialogs.py:1079
+#: ../gui/wxpython/animation/dialogs.py:1197
+#: ../gui/wxpython/animation/dialogs.py:1233
+#: ../gui/wxpython/animation/dialogs.py:1257
+#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/gui_core/forms.py:1775
+#: ../gui/wxpython/gui_core/forms.py:1859
+#: ../gui/wxpython/gui_core/gselect.py:1176
+#: ../gui/wxpython/gui_core/gselect.py:1491
+#: ../gui/wxpython/gui_core/gselect.py:1507
+#: ../gui/wxpython/gui_core/gselect.py:1554
+#: ../gui/wxpython/gui_core/gselect.py:1590
+#: ../gui/wxpython/modules/import_export.py:730
+#: ../gui/wxpython/location_wizard/wizard.py:112
+#: ../gui/wxpython/location_wizard/wizard.py:1272
+#: ../gui/wxpython/location_wizard/wizard.py:1348
+#: ../gui/wxpython/location_wizard/wizard.py:1438
+#: ../gui/wxpython/location_wizard/wizard.py:1666
+#: ../gui/wxpython/nviz/tools.py:625
 msgid "Browse"
 msgstr "浏览"
 
-#: ../gui/wxpython/psmap/dialogs.py:1965 ../gui/wxpython/psmap/dialogs.py:2154
+#: ../gui/wxpython/psmap/dialogs.py:2666 ../gui/wxpython/psmap/dialogs.py:3008
 msgid "Type filename or click browse to choose file"
 msgstr "输入或点击浏览选择文件名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:1966 ../gui/wxpython/psmap/dialogs.py:2155
+#: ../gui/wxpython/psmap/dialogs.py:2667 ../gui/wxpython/psmap/dialogs.py:3009
 #, fuzzy
 msgid "Choose a file"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/psmap/dialogs.py:1990 ../gui/wxpython/psmap/dialogs.py:2702
-#: ../gui/wxpython/psmap/dialogs.py:3466 ../gui/wxpython/wxplot/dialogs.py:928
-#: ../gui/wxpython/wxplot/dialogs.py:978
+#: ../gui/wxpython/psmap/dialogs.py:2716 ../gui/wxpython/psmap/dialogs.py:3790
+#: ../gui/wxpython/psmap/dialogs.py:4838 ../gui/wxpython/wxplot/dialogs.py:1122
+#: ../gui/wxpython/wxplot/dialogs.py:1203
 msgid "Size"
 msgstr "字号"
 
-#: ../gui/wxpython/psmap/dialogs.py:1994 ../gui/wxpython/nviz/tools.py:1366
+#: ../gui/wxpython/psmap/dialogs.py:2721 ../gui/wxpython/nviz/tools.py:1658
 #, fuzzy
 msgid "size:"
 msgstr "块大小:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1996
+#: ../gui/wxpython/psmap/dialogs.py:2726
 msgid "size from map table column:"
 msgstr "地图表格列大小:"
 
-#: ../gui/wxpython/psmap/dialogs.py:1998
+#: ../gui/wxpython/psmap/dialogs.py:2728
 #, fuzzy
 msgid "scale:"
 msgstr "表"
 
-#: ../gui/wxpython/psmap/dialogs.py:2031
+#: ../gui/wxpython/psmap/dialogs.py:2793
 #, fuzzy
 msgid "Rotation"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:2036
+#: ../gui/wxpython/psmap/dialogs.py:2798
 msgid "rotate symbols:"
 msgstr "旋转符号"
 
-#: ../gui/wxpython/psmap/dialogs.py:2037
+#: ../gui/wxpython/psmap/dialogs.py:2800
 msgid "counterclockwise in degrees:"
 msgstr "逆时针度数"
 
-#: ../gui/wxpython/psmap/dialogs.py:2039
+#: ../gui/wxpython/psmap/dialogs.py:2804
 #, fuzzy
 msgid "from map table column:"
 msgstr "列数"
 
-#: ../gui/wxpython/psmap/dialogs.py:2083
+#: ../gui/wxpython/psmap/dialogs.py:2879
 #, fuzzy
 msgid "Set width (pts):"
 msgstr "设定线宽(像素)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2092
+#: ../gui/wxpython/psmap/dialogs.py:2896
 msgid "multiply width by category value"
 msgstr "宽度乘以类别值"
 
-#: ../gui/wxpython/psmap/dialogs.py:2109 ../gui/wxpython/psmap/dialogs.py:4892
-#: ../gui/wxpython/wxplot/dialogs.py:893
+#: ../gui/wxpython/psmap/dialogs.py:2928 ../gui/wxpython/psmap/dialogs.py:6793
+#: ../gui/wxpython/wxplot/dialogs.py:1071
 msgid "Line style"
 msgstr "线条样式"
 
-#: ../gui/wxpython/psmap/dialogs.py:2113
+#: ../gui/wxpython/psmap/dialogs.py:2933
 #, fuzzy
 msgid "Choose line style:"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/psmap/dialogs.py:2123
+#: ../gui/wxpython/psmap/dialogs.py:2946
 #, fuzzy
 msgid "Choose linecap:"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/psmap/dialogs.py:2148
+#: ../gui/wxpython/psmap/dialogs.py:2999
 #, fuzzy
 msgid "Pattern"
 msgstr "平移"
 
-#: ../gui/wxpython/psmap/dialogs.py:2152
+#: ../gui/wxpython/psmap/dialogs.py:3004
 msgid "use pattern:"
 msgstr "保用模式"
 
-#: ../gui/wxpython/psmap/dialogs.py:2153
+#: ../gui/wxpython/psmap/dialogs.py:3006
 #, fuzzy
 msgid "Choose pattern file:"
 msgstr "过滤器文件的名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:2157
+#: ../gui/wxpython/psmap/dialogs.py:3014
 msgid "pattern line width (pts):"
 msgstr "模式线宽(像素)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2159
+#: ../gui/wxpython/psmap/dialogs.py:3018
 #, fuzzy
 msgid "pattern scale factor:"
 msgstr "垂直比例因子"
 
-#: ../gui/wxpython/psmap/dialogs.py:2476
+#: ../gui/wxpython/psmap/dialogs.py:3378
 #, fuzzy
 msgid "Raster legend"
 msgstr "栅格值"
 
-#: ../gui/wxpython/psmap/dialogs.py:2480
-#: ../gui/wxpython/animation/dialogs.py:369
+#: ../gui/wxpython/psmap/dialogs.py:3383
+#: ../gui/wxpython/animation/dialogs.py:472
 #, fuzzy
 msgid "Show raster legend"
 msgstr "将要导入的二进制栅格文件"
 
-#: ../gui/wxpython/psmap/dialogs.py:2486
+#: ../gui/wxpython/psmap/dialogs.py:3397
 #, fuzzy
 msgid "Source raster"
 msgstr "数据库名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:2490
+#: ../gui/wxpython/psmap/dialogs.py:3402
 #, fuzzy
 msgid "current raster"
 msgstr "从当前区域设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:2491
+#: ../gui/wxpython/psmap/dialogs.py:3405
 #, fuzzy
 msgid "select raster"
 msgstr "矢量图转换为栅格图"
 
-#: ../gui/wxpython/psmap/dialogs.py:2498 ../gui/wxpython/psmap/dialogs.py:3185
+#: ../gui/wxpython/psmap/dialogs.py:3412 ../gui/wxpython/psmap/dialogs.py:4427
 #, fuzzy, python-format
 msgid "%(rast)s: type %(type)s"
 msgstr "无法打开%s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2518
+#: ../gui/wxpython/psmap/dialogs.py:3461
 #, fuzzy
 msgid "Type of legend"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:2522
+#: ../gui/wxpython/psmap/dialogs.py:3466
 msgid "discrete legend (categorical maps)"
 msgstr "离散图例(类别地图)"
 
-#: ../gui/wxpython/psmap/dialogs.py:2524
+#: ../gui/wxpython/psmap/dialogs.py:3470
 #, fuzzy
 msgid "continuous color gradient legend (floating point map)"
 msgstr "浮点型地图需要 vals 变量!"
 
-#: ../gui/wxpython/psmap/dialogs.py:2535
+#: ../gui/wxpython/psmap/dialogs.py:3496
 #, fuzzy
 msgid "Advanced legend settings"
 msgstr "改变光线设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:2539
+#: ../gui/wxpython/psmap/dialogs.py:3501
 msgid "draw \"no data\" box"
 msgstr "绘制\"no data\"框"
 
-#: ../gui/wxpython/psmap/dialogs.py:2545
+#: ../gui/wxpython/psmap/dialogs.py:3510
 msgid "draw ticks across color table"
 msgstr "在颜色表上绘制刻度"
 
-#: ../gui/wxpython/psmap/dialogs.py:2556
-#: ../gui/wxpython/modules/colorrules.py:887
-#: ../gui/wxpython/modules/colorrules.py:1509
-#: ../gui/wxpython/modules/colorrules.py:1512
+#: ../gui/wxpython/psmap/dialogs.py:3523
+#: ../gui/wxpython/modules/colorrules.py:971
+#: ../gui/wxpython/modules/colorrules.py:1653
+#: ../gui/wxpython/modules/colorrules.py:1657
 #, fuzzy
 msgid "range"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/psmap/dialogs.py:2593
+#: ../gui/wxpython/psmap/dialogs.py:3602
 #, fuzzy
 msgid "Vector legend"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/psmap/dialogs.py:2597
+#: ../gui/wxpython/psmap/dialogs.py:3607
 msgid "Show vector legend"
 msgstr "显示矢量图例"
 
-#: ../gui/wxpython/psmap/dialogs.py:2603
+#: ../gui/wxpython/psmap/dialogs.py:3621
 #, fuzzy
 msgid "Source vector maps"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/psmap/dialogs.py:2607
+#: ../gui/wxpython/psmap/dialogs.py:3626
 #, fuzzy
 msgid "Choose vector maps and their order in legend"
 msgstr "无法打开矢量文件<%s>在<%s>中"
 
-#: ../gui/wxpython/psmap/dialogs.py:2611 ../gui/wxpython/lmgr/layertree.py:804
-#: ../gui/wxpython/menustrings.py:1998 ../gui/wxpython/nviz/tools.py:1181
+#: ../gui/wxpython/psmap/dialogs.py:3630 ../gui/wxpython/lmgr/layertree.py:1019
+#: ../gui/wxpython/menustrings.py:2004 ../gui/wxpython/nviz/tools.py:1452
 msgid "Vector map"
 msgstr "矢量地图"
 
-#: ../gui/wxpython/psmap/dialogs.py:2631 ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:3654 ../gui/wxpython/psmap/dialogs.py:4134
 msgid "Edit label"
 msgstr "编辑标注"
 
-#: ../gui/wxpython/psmap/dialogs.py:2653
+#: ../gui/wxpython/psmap/dialogs.py:3700
 msgid "draw border around legend"
 msgstr "绘制图例边框"
 
-#: ../gui/wxpython/psmap/dialogs.py:2690
+#: ../gui/wxpython/psmap/dialogs.py:3758
 #, fuzzy
 msgid "Size and position"
 msgstr "保存并关闭"
 
-#: ../gui/wxpython/psmap/dialogs.py:2700 ../gui/wxpython/psmap/dialogs.py:3241
-#: ../gui/wxpython/psmap/dialogs.py:3436 ../gui/wxpython/psmap/dialogs.py:3810
-#: ../gui/wxpython/psmap/dialogs.py:3814 ../gui/wxpython/psmap/dialogs.py:4216
-#: ../gui/wxpython/psmap/dialogs.py:4221 ../gui/wxpython/psmap/dialogs.py:4674
-#: ../gui/wxpython/psmap/dialogs.py:4679 ../gui/wxpython/nviz/tools.py:861
-#: ../gui/wxpython/nviz/tools.py:1682
+#: ../gui/wxpython/psmap/dialogs.py:3784 ../gui/wxpython/psmap/dialogs.py:4504
+#: ../gui/wxpython/psmap/dialogs.py:4782 ../gui/wxpython/psmap/dialogs.py:5363
+#: ../gui/wxpython/psmap/dialogs.py:5371 ../gui/wxpython/psmap/dialogs.py:5931
+#: ../gui/wxpython/psmap/dialogs.py:5940 ../gui/wxpython/psmap/dialogs.py:6515
+#: ../gui/wxpython/psmap/dialogs.py:6524 ../gui/wxpython/nviz/tools.py:1049
+#: ../gui/wxpython/nviz/tools.py:2020
 #, fuzzy
 msgid "Position"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:2724
+#: ../gui/wxpython/psmap/dialogs.py:3828
 msgid "Leave the edit field empty, to use default values."
 msgstr "不填写编辑字段,系统将使用默认值。"
 
-#: ../gui/wxpython/psmap/dialogs.py:2746
+#: ../gui/wxpython/psmap/dialogs.py:3868
 msgid ""
 "Width of the color symbol (for lines)\n"
 "in front of the legend text"
@@ -4374,17 +4756,17 @@ msgstr ""
 "线条颜色符号宽度 \n"
 "显示于图例文字前"
 
-#: ../gui/wxpython/psmap/dialogs.py:2752 ../gui/wxpython/psmap/dialogs.py:2857
+#: ../gui/wxpython/psmap/dialogs.py:3874 ../gui/wxpython/psmap/dialogs.py:4039
 #, fuzzy
 msgid "Columns:"
 msgstr "列名"
 
-#: ../gui/wxpython/psmap/dialogs.py:2756
+#: ../gui/wxpython/psmap/dialogs.py:3884
 #, fuzzy
 msgid "column span:"
 msgstr "x 字段的名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:2758
+#: ../gui/wxpython/psmap/dialogs.py:3886
 msgid ""
 "Column separation distance between the left edges\n"
 "of two columns in a multicolumn legend"
@@ -4392,214 +4774,201 @@ msgstr ""
 "列间距(左边缘到左边缘)\n"
 "多列图例中的两个列"
 
-#: ../gui/wxpython/psmap/dialogs.py:2783 ../gui/wxpython/psmap/dialogs.py:3260
-#: ../gui/wxpython/psmap/dialogs.py:3716 ../gui/wxpython/wxplot/dialogs.py:624
-#: ../gui/wxpython/gui_core/preferences.py:376
-#: ../gui/wxpython/gui_core/preferences.py:577
-#: ../gui/wxpython/gui_core/preferences.py:1562
+#: ../gui/wxpython/psmap/dialogs.py:3933 ../gui/wxpython/psmap/dialogs.py:4540
+#: ../gui/wxpython/psmap/dialogs.py:5204 ../gui/wxpython/wxplot/dialogs.py:750
+#: ../gui/wxpython/gui_core/preferences.py:472
+#: ../gui/wxpython/gui_core/preferences.py:752
+#: ../gui/wxpython/gui_core/preferences.py:2067
 msgid "Font settings"
 msgstr "字体设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:2940
+#: ../gui/wxpython/psmap/dialogs.py:4133
 msgid "Edit legend label:"
 msgstr "编辑图例标签:"
 
-#: ../gui/wxpython/psmap/dialogs.py:2981
+#: ../gui/wxpython/psmap/dialogs.py:4180
 #, fuzzy
 msgid "No raster map selected!"
 msgstr "没有指定数据地图"
 
-#: ../gui/wxpython/psmap/dialogs.py:2982
+#: ../gui/wxpython/psmap/dialogs.py:4181
 #, fuzzy
 msgid "No raster"
 msgstr "基础栅格图"
 
-#: ../gui/wxpython/psmap/dialogs.py:3216
+#: ../gui/wxpython/psmap/dialogs.py:4471
 #, fuzzy
 msgid "Mapinfo settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:3278
+#: ../gui/wxpython/psmap/dialogs.py:4575
 #, fuzzy
 msgid "Color settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:3283
+#: ../gui/wxpython/psmap/dialogs.py:4581
 #, fuzzy
 msgid "use border color:"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:3284
+#: ../gui/wxpython/psmap/dialogs.py:4583
 #, fuzzy
 msgid "use background color:"
 msgstr "\t背景颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:3425
-msgid ""
-"Units of current projection are not supported,\n"
-" meters will be used!"
-msgstr ""
-"当前投影不支持该单位,\n"
-"将使用米作为单位!"
-
-#: ../gui/wxpython/psmap/dialogs.py:3426
-#, fuzzy
-msgid "Unsupported units"
-msgstr "未知的类型"
-
-#: ../gui/wxpython/psmap/dialogs.py:3470
+#: ../gui/wxpython/psmap/dialogs.py:4842
 #, fuzzy
 msgid "Length:"
 msgstr "长度:%f\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:3474
+#: ../gui/wxpython/psmap/dialogs.py:4848
 #, fuzzy
 msgid "Scalebar length is given in map units"
 msgstr "离散化错误 (地图单位)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3477
+#: ../gui/wxpython/psmap/dialogs.py:4853
 msgid "Scalebar height is real height on paper"
 msgstr "比例尺高度即为纸张上的实际高度"
 
-#: ../gui/wxpython/psmap/dialogs.py:3479
+#: ../gui/wxpython/psmap/dialogs.py:4855
 #, fuzzy
 msgid "default"
 msgstr " 默认颜色\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:3519 ../gui/wxpython/wxplot/dialogs.py:952
-#: ../gui/wxpython/wxplot/dialogs.py:1002
+#: ../gui/wxpython/psmap/dialogs.py:4928 ../gui/wxpython/wxplot/dialogs.py:1163
+#: ../gui/wxpython/wxplot/dialogs.py:1244
 msgid "Style"
 msgstr "样式"
 
-#: ../gui/wxpython/psmap/dialogs.py:3524
+#: ../gui/wxpython/psmap/dialogs.py:4932
 #, fuzzy
 msgid "Type:"
 msgstr "类型"
 
-#: ../gui/wxpython/psmap/dialogs.py:3540
+#: ../gui/wxpython/psmap/dialogs.py:4951
 #, fuzzy
 msgid "Number of segments:"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/psmap/dialogs.py:3544
+#: ../gui/wxpython/psmap/dialogs.py:4957
 msgid "Label every "
 msgstr "标签间隔"
 
-#: ../gui/wxpython/psmap/dialogs.py:3545
+#: ../gui/wxpython/psmap/dialogs.py:4958
 #, fuzzy
 msgid "segments"
 msgstr "SQL状态"
 
-#: ../gui/wxpython/psmap/dialogs.py:3554
+#: ../gui/wxpython/psmap/dialogs.py:4971
 #, fuzzy
 msgid "transparent text background"
 msgstr "背景透明"
 
-#: ../gui/wxpython/psmap/dialogs.py:3631
+#: ../gui/wxpython/psmap/dialogs.py:5089
 #, fuzzy
 msgid "Length of scale bar is not defined"
 msgstr "%s - 未发现"
 
-#: ../gui/wxpython/psmap/dialogs.py:3700 ../gui/wxpython/psmap/dialogs.py:3705
-#: ../gui/wxpython/psmap/toolbars.py:88
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2006
+#: ../gui/wxpython/psmap/dialogs.py:5171 ../gui/wxpython/psmap/dialogs.py:5180
+#: ../gui/wxpython/psmap/toolbars.py:91
+#: ../gui/wxpython/animation/dialogs.py:1536
+#: ../gui/wxpython/menustrings.py:2012
 msgid "Text"
 msgstr "文本"
 
-#: ../gui/wxpython/psmap/dialogs.py:3708
+#: ../gui/wxpython/psmap/dialogs.py:5183
 msgid "Enter text:"
 msgstr "输入文字:"
 
-#: ../gui/wxpython/psmap/dialogs.py:3734
+#: ../gui/wxpython/psmap/dialogs.py:5254
 #, fuzzy
 msgid "Text effects"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/psmap/dialogs.py:3739
+#: ../gui/wxpython/psmap/dialogs.py:5260
 #, fuzzy
 msgid "text background"
 msgstr "  背景"
 
-#: ../gui/wxpython/psmap/dialogs.py:3742
+#: ../gui/wxpython/psmap/dialogs.py:5265
 #, fuzzy
 msgid "highlight"
 msgstr "高亮"
 
-#: ../gui/wxpython/psmap/dialogs.py:3747
+#: ../gui/wxpython/psmap/dialogs.py:5274
 msgid "text border"
 msgstr "文字边缘"
 
-#: ../gui/wxpython/psmap/dialogs.py:3822
+#: ../gui/wxpython/psmap/dialogs.py:5383
 msgid "Offset"
 msgstr "偏移量"
 
-#: ../gui/wxpython/psmap/dialogs.py:3825
+#: ../gui/wxpython/psmap/dialogs.py:5387
 msgid "horizontal (pts):"
 msgstr "水平(pts):"
 
-#: ../gui/wxpython/psmap/dialogs.py:3826
+#: ../gui/wxpython/psmap/dialogs.py:5389
 #, fuzzy
 msgid "vertical (pts):"
 msgstr "垂直比例"
 
-#: ../gui/wxpython/psmap/dialogs.py:3839
+#: ../gui/wxpython/psmap/dialogs.py:5428
 #, fuzzy
 msgid " Reference point"
 msgstr "左:创建新点"
 
-#: ../gui/wxpython/psmap/dialogs.py:3867
+#: ../gui/wxpython/psmap/dialogs.py:5482
 #, fuzzy
 msgid "Text rotation"
 msgstr "选项设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:3870
+#: ../gui/wxpython/psmap/dialogs.py:5488
 #, fuzzy
 msgid "rotate text (counterclockwise)"
 msgstr "各向异性角度 (度,从东开始逆时针方向计算)"
 
-#: ../gui/wxpython/psmap/dialogs.py:3946
+#: ../gui/wxpython/psmap/dialogs.py:5580
 msgid "No text entered!"
 msgstr "尚未输入文字!"
 
-#: ../gui/wxpython/psmap/dialogs.py:4056 ../gui/wxpython/psmap/dialogs.py:4104
-#: ../gui/wxpython/psmap/toolbars.py:96
-#: ../gui/wxpython/animation/dialogs.py:1194
-#: ../gui/wxpython/menustrings.py:2008
+#: ../gui/wxpython/psmap/dialogs.py:5706 ../gui/wxpython/psmap/dialogs.py:5768
+#: ../gui/wxpython/psmap/toolbars.py:99
+#: ../gui/wxpython/animation/dialogs.py:1535
+#: ../gui/wxpython/menustrings.py:2014
 #, fuzzy
 msgid "Image"
 msgstr "输入文件"
 
-#: ../gui/wxpython/psmap/dialogs.py:4114 ../gui/wxpython/nviz/tools.py:482
+#: ../gui/wxpython/psmap/dialogs.py:5780 ../gui/wxpython/nviz/tools.py:623
 #, fuzzy
 msgid "Choose a directory:"
 msgstr "选择GIS数据目录:"
 
-#: ../gui/wxpython/psmap/dialogs.py:4115
+#: ../gui/wxpython/psmap/dialogs.py:5781
 #, fuzzy
 msgid "Choose a directory with images"
 msgstr "新GIS数据目录"
 
-#: ../gui/wxpython/psmap/dialogs.py:4147
+#: ../gui/wxpython/psmap/dialogs.py:5824
 #, fuzzy
 msgid "Note: only EPS format supported"
 msgstr "列的类型不支持"
 
-#: ../gui/wxpython/psmap/dialogs.py:4156
+#: ../gui/wxpython/psmap/dialogs.py:5840
 #, fuzzy
 msgid "Scale And Rotation"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:4187 ../gui/wxpython/psmap/dialogs.py:4649
+#: ../gui/wxpython/psmap/dialogs.py:5881 ../gui/wxpython/psmap/dialogs.py:6463
 #, fuzzy
 msgid "Rotation angle (deg):"
 msgstr "各向异性角度(单位:度)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4196 ../gui/wxpython/psmap/dialogs.py:4658
+#: ../gui/wxpython/psmap/dialogs.py:5897 ../gui/wxpython/psmap/dialogs.py:6485
 msgid "Counterclockwise rotation in degrees"
 msgstr "逆时针旋转度数"
 
-#: ../gui/wxpython/psmap/dialogs.py:4294
+#: ../gui/wxpython/psmap/dialogs.py:6023
 msgid ""
 "PIL\n"
 "missing"
@@ -4607,356 +4976,351 @@ msgstr ""
 "PIL\n"
 "没有找到"
 
-#: ../gui/wxpython/psmap/dialogs.py:4314
+#: ../gui/wxpython/psmap/dialogs.py:6043
 #, fuzzy, python-format
 msgid "Unable to read file %s"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4373
+#: ../gui/wxpython/psmap/dialogs.py:6104
 #, python-format
 msgid "size: %(width)s x %(height)s pts"
 msgstr "大小:%(width)s x %(height)s pts"
 
-#: ../gui/wxpython/psmap/dialogs.py:4395
+#: ../gui/wxpython/psmap/dialogs.py:6126
 #, fuzzy
 msgid "No image selected."
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/psmap/dialogs.py:4489 ../gui/wxpython/psmap/toolbars.py:98
-#: ../gui/wxpython/menustrings.py:2010 ../gui/wxpython/nviz/tools.py:1952
+#: ../gui/wxpython/psmap/dialogs.py:6230 ../gui/wxpython/psmap/toolbars.py:101
+#: ../gui/wxpython/menustrings.py:2016 ../gui/wxpython/nviz/tools.py:2331
 msgid "North Arrow"
 msgstr "指北针"
 
-#: ../gui/wxpython/psmap/dialogs.py:4492
+#: ../gui/wxpython/psmap/dialogs.py:6233
 #, fuzzy
 msgid "North Arrow settings"
 msgstr "显示设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:4503
+#: ../gui/wxpython/psmap/dialogs.py:6244
 msgid "Compute convergence"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4559
+#: ../gui/wxpython/psmap/dialogs.py:6315
 #, fuzzy
 msgid "Symbol"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/psmap/dialogs.py:4564
+#: ../gui/wxpython/psmap/dialogs.py:6322
 #, fuzzy
 msgid "Select symbol:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/psmap/dialogs.py:4578
+#: ../gui/wxpython/psmap/dialogs.py:6339
 msgid ""
 "Note: Selected symbol is not displayed\n"
 "in draft mode (only in preview mode)"
 msgstr ""
 
-#: ../gui/wxpython/psmap/dialogs.py:4597 ../gui/wxpython/psmap/dialogs.py:4851
+#: ../gui/wxpython/psmap/dialogs.py:6372 ../gui/wxpython/psmap/dialogs.py:6731
 #, fuzzy
 msgid "Outline color:"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:4599 ../gui/wxpython/psmap/dialogs.py:4614
-#: ../gui/wxpython/psmap/dialogs.py:4853 ../gui/wxpython/psmap/dialogs.py:4874
-#: ../gui/wxpython/gui_core/dialogs.py:2313
+#: ../gui/wxpython/psmap/dialogs.py:6375 ../gui/wxpython/psmap/dialogs.py:6402
+#: ../gui/wxpython/psmap/dialogs.py:6734 ../gui/wxpython/psmap/dialogs.py:6764
+#: ../gui/wxpython/gui_core/dialogs.py:1776
 msgid "transparent"
 msgstr "透明"
 
-#: ../gui/wxpython/psmap/dialogs.py:4612 ../gui/wxpython/psmap/dialogs.py:4872
+#: ../gui/wxpython/psmap/dialogs.py:6399 ../gui/wxpython/psmap/dialogs.py:6761
 #, fuzzy
 msgid "Fill color:"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/psmap/dialogs.py:4635
+#: ../gui/wxpython/psmap/dialogs.py:6438
 #, fuzzy
 msgid "Size and Rotation"
 msgstr "保存并关闭"
 
-#: ../gui/wxpython/psmap/dialogs.py:4640
+#: ../gui/wxpython/psmap/dialogs.py:6446
 #, fuzzy
 msgid "Size (pt):"
 msgstr "设定线宽(像素)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4642
+#: ../gui/wxpython/psmap/dialogs.py:6449
 #, fuzzy
 msgid "Symbol size in points"
 msgstr "标签大小 (点)"
 
-#: ../gui/wxpython/psmap/dialogs.py:4816
+#: ../gui/wxpython/psmap/dialogs.py:6684
 #, fuzzy
 msgid "Rectangle settings"
 msgstr "改变区域设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:4818
+#: ../gui/wxpython/psmap/dialogs.py:6686
 #, fuzzy
 msgid "Line settings"
 msgstr "改变区域设置"
 
-#: ../gui/wxpython/psmap/dialogs.py:4904
+#: ../gui/wxpython/psmap/dialogs.py:6820
 msgid "Line width in points"
 msgstr "线条宽度(点数):"
 
-#: ../gui/wxpython/psmap/dialogs.py:4972
+#: ../gui/wxpython/psmap/dialogs.py:6894
 #, fuzzy
 msgid "Vector labels"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/psmap/dialogs.py:4991
+#: ../gui/wxpython/psmap/dialogs.py:6914
 #, fuzzy
 msgid "Vector label files created beforehand by v.label module"
 msgstr "无法创建 %s"
 
-#: ../gui/wxpython/psmap/dialogs.py:4999
+#: ../gui/wxpython/psmap/dialogs.py:6931
 msgid "You can select multiple label files."
 msgstr ""
 
-#: ../gui/wxpython/psmap/toolbars.py:65 ../gui/wxpython/menustrings.py:1984
+#: ../gui/wxpython/psmap/toolbars.py:68 ../gui/wxpython/menustrings.py:1990
 msgid "Generate text file with mapping instructions"
 msgstr "使用地图绘制指令生成文本文件"
 
-#: ../gui/wxpython/psmap/toolbars.py:67 ../gui/wxpython/menustrings.py:1982
+#: ../gui/wxpython/psmap/toolbars.py:70 ../gui/wxpython/menustrings.py:1988
 msgid "Load text file with mapping instructions"
 msgstr "使用地图绘制指令载入文本文件"
 
-#: ../gui/wxpython/psmap/toolbars.py:69 ../gui/wxpython/menustrings.py:1986
+#: ../gui/wxpython/psmap/toolbars.py:72 ../gui/wxpython/menustrings.py:1992
 #, fuzzy
 msgid "Generate PostScript output"
 msgstr "PostScript 输出文件"
 
-#: ../gui/wxpython/psmap/toolbars.py:71 ../gui/wxpython/menustrings.py:1988
+#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1994
 msgid "Generate PDF output"
 msgstr "生成PDF输出"
 
-#: ../gui/wxpython/psmap/toolbars.py:74 ../gui/wxpython/menustrings.py:1980
+#: ../gui/wxpython/psmap/toolbars.py:77 ../gui/wxpython/menustrings.py:1986
 msgid "Specify paper size, margins and orientation"
 msgstr "设定纸张大小,边框和模式"
 
-#: ../gui/wxpython/psmap/toolbars.py:76
+#: ../gui/wxpython/psmap/toolbars.py:79
 #, fuzzy
 msgid "Full extent"
 msgstr "完全输出"
 
-#: ../gui/wxpython/psmap/toolbars.py:77
+#: ../gui/wxpython/psmap/toolbars.py:80
 msgid "Zoom to full extent"
 msgstr "缩放到全图范围"
 
-#: ../gui/wxpython/psmap/toolbars.py:80
+#: ../gui/wxpython/psmap/toolbars.py:83
 msgid "Click and drag to place map frame"
 msgstr "点击并拖动到合适位置放置地图框架"
 
-#: ../gui/wxpython/psmap/toolbars.py:82 ../gui/wxpython/menustrings.py:2013
+#: ../gui/wxpython/psmap/toolbars.py:85 ../gui/wxpython/menustrings.py:2019
 #, fuzzy
 msgid "Delete selected object"
 msgstr "删除选定地点"
 
-#: ../gui/wxpython/psmap/toolbars.py:84
+#: ../gui/wxpython/psmap/toolbars.py:87
 #, fuzzy
 msgid "Show preview"
 msgstr "查看模型属性"
 
-#: ../gui/wxpython/psmap/toolbars.py:86
+#: ../gui/wxpython/psmap/toolbars.py:89
 msgid "Quit Cartographic Composer"
 msgstr "退出地图绘制"
 
-#: ../gui/wxpython/psmap/toolbars.py:90 ../gui/wxpython/menustrings.py:2002
+#: ../gui/wxpython/psmap/toolbars.py:93 ../gui/wxpython/menustrings.py:2008
 #, fuzzy
 msgid "Map info"
 msgstr "添加地图元素"
 
-#: ../gui/wxpython/psmap/toolbars.py:92 ../gui/wxpython/wxplot/dialogs.py:902
-#: ../gui/wxpython/wxplot/dialogs.py:945 ../gui/wxpython/wxplot/dialogs.py:995
+#: ../gui/wxpython/psmap/toolbars.py:95 ../gui/wxpython/wxplot/dialogs.py:1086
+#: ../gui/wxpython/wxplot/dialogs.py:1149
+#: ../gui/wxpython/wxplot/dialogs.py:1230
 msgid "Legend"
 msgstr "图例"
 
-#: ../gui/wxpython/psmap/toolbars.py:94 ../gui/wxpython/menustrings.py:2004
-#: ../gui/wxpython/nviz/tools.py:1997
+#: ../gui/wxpython/psmap/toolbars.py:97 ../gui/wxpython/menustrings.py:2010
+#: ../gui/wxpython/nviz/tools.py:2380
 #, fuzzy
 msgid "Scale bar"
 msgstr "添加格网值图层"
 
-#: ../gui/wxpython/psmap/toolbars.py:104
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/psmap/toolbars.py:107
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 #, fuzzy
 msgid "Rectangle"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/psmap/toolbars.py:106
+#: ../gui/wxpython/psmap/toolbars.py:109
 #, fuzzy
 msgid "Add overlays"
 msgstr "添加直方图图层"
 
-#: ../gui/wxpython/psmap/toolbars.py:108 ../gui/wxpython/lmgr/layertree.py:102
+#: ../gui/wxpython/psmap/toolbars.py:111 ../gui/wxpython/lmgr/layertree.py:102
 msgid "Add labels"
 msgstr "添加标注"
 
-#: ../gui/wxpython/psmap/toolbars.py:196
+#: ../gui/wxpython/psmap/toolbars.py:203
 msgid "Add simple graphics: points"
 msgstr "添加简图:点"
 
-#: ../gui/wxpython/psmap/toolbars.py:208
+#: ../gui/wxpython/psmap/toolbars.py:219
 msgid "Add simple graphics: lines"
 msgstr "添加简图:线"
 
-#: ../gui/wxpython/psmap/toolbars.py:220
+#: ../gui/wxpython/psmap/toolbars.py:235
 msgid "Add simple graphics: rectangles"
 msgstr "添加简图:长方形"
 
-#: ../gui/wxpython/dbmgr/manager.py:70
+#: ../gui/wxpython/dbmgr/manager.py:72
 #, fuzzy
 msgid "GRASS GIS Attribute Table Manager - "
 msgstr "GRASS GIS层管理器"
 
-#: ../gui/wxpython/dbmgr/manager.py:72
+#: ../gui/wxpython/dbmgr/manager.py:74
 msgid "READONLY - "
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:85
+#: ../gui/wxpython/dbmgr/manager.py:92
 #, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file. You can "
 "define new connection in 'Manage layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:90
+#: ../gui/wxpython/dbmgr/manager.py:98
 msgid "Please wait, loading attribute data..."
 msgstr "请稍候,属性数据加载中..."
 
-#: ../gui/wxpython/dbmgr/manager.py:99
+#: ../gui/wxpython/dbmgr/manager.py:107
 msgid "Browse data"
 msgstr "浏览数据"
 
-#: ../gui/wxpython/dbmgr/manager.py:105
+#: ../gui/wxpython/dbmgr/manager.py:115
 msgid "Manage tables"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:110
+#: ../gui/wxpython/dbmgr/manager.py:122
 msgid "Manage layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:121
+#: ../gui/wxpython/dbmgr/manager.py:133
 msgid "Close Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:123
+#: ../gui/wxpython/dbmgr/manager.py:136
 #, fuzzy
 msgid "Reload currently selected attribute data"
 msgstr "删除选中的地图集"
 
-#: ../gui/wxpython/dbmgr/manager.py:125
+#: ../gui/wxpython/dbmgr/manager.py:139
 msgid "Reload all attribute data (drop current selection)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/manager.py:198 ../gui/wxpython/dbmgr/base.py:291
-#: ../gui/wxpython/dbmgr/base.py:837 ../gui/wxpython/dbmgr/base.py:996
-#: ../gui/wxpython/dbmgr/base.py:1300 ../gui/wxpython/dbmgr/base.py:1898
+#: ../gui/wxpython/dbmgr/manager.py:215 ../gui/wxpython/dbmgr/base.py:301
+#: ../gui/wxpython/dbmgr/base.py:903 ../gui/wxpython/dbmgr/base.py:1073
+#: ../gui/wxpython/dbmgr/base.py:1428 ../gui/wxpython/dbmgr/base.py:2080
 #, python-format
 msgid "Number of loaded records: %d"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/vinfo.py:101
-#, python-brace-format
-msgid ""
-"Failed to query vector map <{map}>. Check database settings and topology."
-msgstr ""
-
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:93 ../gui/wxpython/dbmgr/base.py:2066
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:95 ../gui/wxpython/dbmgr/base.py:2260
 msgid "Database connection"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:105 ../gui/wxpython/menustrings.py:885
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:111 ../gui/wxpython/menustrings.py:885
 #: ../gui/wxpython/menustrings.py:1792
 msgid "Query"
 msgstr "查询"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:127
 msgid "Set SQL statement to default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:123
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:130
 #, fuzzy
 msgid "Apply SQL statement in Attribute Table Manager"
 msgstr "GRASS GIS层管理器"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:125
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:132
 msgid "Close the dialog"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:176
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:219
 #, fuzzy
 msgid "Columns"
 msgstr "列名"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:187
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:233
 #, fuzzy
 msgid "Interactive insertion"
 msgstr "交互式选择终点"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:201
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:247
 msgid "Values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:211
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:257
 msgid "Get all values"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:214
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:262
 msgid "Get sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:215
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:264
 msgid "Get first 256 unique values as sample"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:231
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:283
 #, fuzzy
 msgid "Go to:"
 msgstr "导出"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:244
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:296
 msgid "Close dialog on apply"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:401
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:543
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:471
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:616
 #, python-format
 msgid "GRASS SQL Builder (%(type)s) - <%(map)s>"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:404
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:474
 msgid "Column to show (SELECT clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:405
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:547
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:620
 msgid "Constraint for query (WHERE clause)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:417 ../gui/wxpython/dbmgr/base.py:1104
-#: ../gui/wxpython/dbmgr/base.py:1121
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:487 ../gui/wxpython/dbmgr/base.py:1197
+#: ../gui/wxpython/dbmgr/base.py:1223
 #, fuzzy, python-format
 msgid "Example: %s"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:420
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:491
 msgid "Verify"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:421
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:492
 msgid "Verify SQL statement"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:429
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:500
 msgid "SQL statement not verified"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:473
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:544
 msgid "SQL statement is not valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:475
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
 #, python-format
 msgid ""
 "SQL statement is not valid.\n"
@@ -4964,77 +5328,77 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:477
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
 msgid "SQL statement is valid"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:546
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:619
 #, fuzzy
 msgid "Column to set (SET clause)"
 msgstr "将要查询的栅格地图"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:548
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:621
 msgid "Calculate column value to set"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:603
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:693
 #, fuzzy
 msgid "Functions"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:636
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:726
 #, fuzzy
 msgid "SQL statement was not applied"
 msgstr "SQL状态"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:638
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:728
 #, fuzzy
 msgid "SQL statement applied"
 msgstr "SQL状态"
 
-#: ../gui/wxpython/dbmgr/sqlbuilder.py:671
+#: ../gui/wxpython/dbmgr/sqlbuilder.py:762
 msgid "Dbf driver does not support usage of SQL functions."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:147 ../gui/wxpython/iscatt/controllers.py:138
+#: ../gui/wxpython/dbmgr/base.py:153 ../gui/wxpython/iscatt/controllers.py:139
 #, fuzzy
 msgid "Loading data..."
 msgstr "读取地图"
 
-#: ../gui/wxpython/dbmgr/base.py:154
+#: ../gui/wxpython/dbmgr/base.py:160
 #, python-format
 msgid ""
 "Attribute table <%s> not found. For creating the table switch to 'Manage "
 "layers' tab."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:165
+#: ../gui/wxpython/dbmgr/base.py:171
 #, python-format
 msgid "Column <%(column)s> not found in in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:238
+#: ../gui/wxpython/dbmgr/base.py:244
 msgid "Can display only 256 columns."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:256
+#: ../gui/wxpython/dbmgr/base.py:263
 #, fuzzy, python-format
 msgid "Inconsistent number of columns in the table <%(table)s>."
 msgstr "列数"
 
-#: ../gui/wxpython/dbmgr/base.py:266
+#: ../gui/wxpython/dbmgr/base.py:273
 msgid "Viewing limit: 100000 records."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:315
+#: ../gui/wxpython/dbmgr/base.py:325
 msgid "Unknown value"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:321
+#: ../gui/wxpython/dbmgr/base.py:331
 msgid "Unable to decode value. Set encoding in GUI preferences ('Attributes')."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:330
+#: ../gui/wxpython/dbmgr/base.py:342
 #, python-format
 msgid ""
 "Error loading attribute data. Record number: %(rec)d. Unable to convert "
@@ -5043,226 +5407,226 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:422
+#: ../gui/wxpython/dbmgr/base.py:436
 msgid "Sort ascending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:423
+#: ../gui/wxpython/dbmgr/base.py:437
 msgid "Sort descending"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:426
+#: ../gui/wxpython/dbmgr/base.py:441
 msgid "Calculate (only numeric columns)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:428
+#: ../gui/wxpython/dbmgr/base.py:444
 #, fuzzy
 msgid "Field calculator"
 msgstr "地图计算"
 
-#: ../gui/wxpython/dbmgr/base.py:430 ../gui/wxpython/wxplot/dialogs.py:244
+#: ../gui/wxpython/dbmgr/base.py:446 ../gui/wxpython/wxplot/dialogs.py:289
 #, fuzzy
 msgid "Statistics"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/dbmgr/base.py:435 ../gui/wxpython/dbmgr/base.py:2089
-#: ../gui/wxpython/modules/colorrules.py:1032
+#: ../gui/wxpython/dbmgr/base.py:451 ../gui/wxpython/dbmgr/base.py:2291
+#: ../gui/wxpython/modules/colorrules.py:1138
 #, fuzzy
 msgid "Add column"
 msgstr "添加命令"
 
-#: ../gui/wxpython/dbmgr/base.py:446
+#: ../gui/wxpython/dbmgr/base.py:463
 msgid "Area size"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:447
+#: ../gui/wxpython/dbmgr/base.py:464
 #, fuzzy
 msgid "Line length"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/dbmgr/base.py:448
+#: ../gui/wxpython/dbmgr/base.py:467
 msgid "Compactness of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:449
+#: ../gui/wxpython/dbmgr/base.py:469
 msgid "Fractal dimension of boundary defining a polygon"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:450
+#: ../gui/wxpython/dbmgr/base.py:472
 msgid "Perimeter length of an area"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:451
+#: ../gui/wxpython/dbmgr/base.py:474
 #, fuzzy
 msgid "Number of features for each category"
 msgstr "重复过滤的次数"
 
-#: ../gui/wxpython/dbmgr/base.py:452
+#: ../gui/wxpython/dbmgr/base.py:477
 msgid "Slope steepness of 3D line"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:453
+#: ../gui/wxpython/dbmgr/base.py:478
 msgid "Line sinuousity"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:454
+#: ../gui/wxpython/dbmgr/base.py:479
 #, fuzzy
 msgid "Line azimuth"
 msgstr "% 宽度"
 
-#: ../gui/wxpython/dbmgr/base.py:564
+#: ../gui/wxpython/dbmgr/base.py:613
 #, fuzzy, python-format
 msgid "Add column to table <%s>"
 msgstr "字段 <%s> 未找到"
 
-#: ../gui/wxpython/dbmgr/base.py:937
+#: ../gui/wxpython/dbmgr/base.py:1009
 msgid "Unable to add column to the table. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:950
+#: ../gui/wxpython/dbmgr/base.py:1023
 #, python-format
 msgid "Column <%(column)s> already exists in table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1026
+#: ../gui/wxpython/dbmgr/base.py:1106
 msgid "Attribute data - right-click to edit/manage records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1041 ../gui/wxpython/dbmgr/base.py:2050
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2774
-#: ../gui/wxpython/dbmgr/base.py:3031
+#: ../gui/wxpython/dbmgr/base.py:1121 ../gui/wxpython/dbmgr/base.py:2244
+#: ../gui/wxpython/dbmgr/base.py:2939 ../gui/wxpython/dbmgr/base.py:3074
+#: ../gui/wxpython/dbmgr/base.py:3343
 msgid "Table"
 msgstr "表"
 
-#: ../gui/wxpython/dbmgr/base.py:1043 ../gui/wxpython/dbmgr/base.py:2052
+#: ../gui/wxpython/dbmgr/base.py:1123 ../gui/wxpython/dbmgr/base.py:2246
 msgid " (readonly)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1057
+#: ../gui/wxpython/dbmgr/base.py:1137
 msgid "SQL Query"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1086
+#: ../gui/wxpython/dbmgr/base.py:1167
 msgid "Simple"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1089
+#: ../gui/wxpython/dbmgr/base.py:1174
 msgid "Apply SELECT statement and reload data records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1112
+#: ../gui/wxpython/dbmgr/base.py:1208
 msgid "Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1114
+#: ../gui/wxpython/dbmgr/base.py:1213
 msgid "SQL Builder"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1265 ../gui/wxpython/core/settings.py:854
+#: ../gui/wxpython/dbmgr/base.py:1390 ../gui/wxpython/core/settings.py:861
 msgid "Edit selected record"
 msgstr "编辑选中的记录"
 
-#: ../gui/wxpython/dbmgr/base.py:1269 ../gui/wxpython/dbmgr/base.py:1444
+#: ../gui/wxpython/dbmgr/base.py:1395 ../gui/wxpython/dbmgr/base.py:1584
 msgid "Insert new record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1270
+#: ../gui/wxpython/dbmgr/base.py:1396
 msgid "Delete selected record(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1271
+#: ../gui/wxpython/dbmgr/base.py:1397
 msgid "Delete all records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1277 ../gui/wxpython/gui_core/widgets.py:832
-#: ../gui/wxpython/gui_core/dialogs.py:686
-#: ../gui/wxpython/gui_core/dialogs.py:739
-#: ../gui/wxpython/gui_core/dialogs.py:1446
+#: ../gui/wxpython/dbmgr/base.py:1403 ../gui/wxpython/gui_core/widgets.py:957
+#: ../gui/wxpython/gui_core/dialogs.py:766
+#: ../gui/wxpython/gui_core/dialogs.py:834
+#: ../gui/wxpython/gui_core/dialogs.py:1574
 msgid "Select all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1278 ../gui/wxpython/gui_core/widgets.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:1448
+#: ../gui/wxpython/dbmgr/base.py:1404 ../gui/wxpython/gui_core/widgets.py:958
+#: ../gui/wxpython/gui_core/dialogs.py:1576
 msgid "Deselect all"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1280
-#: ../gui/wxpython/gui_core/preferences.py:1064
+#: ../gui/wxpython/dbmgr/base.py:1406
+#: ../gui/wxpython/gui_core/preferences.py:1447
 msgid "Highlight selected features"
 msgstr "选中要素时高亮"
 
-#: ../gui/wxpython/dbmgr/base.py:1281
+#: ../gui/wxpython/dbmgr/base.py:1409
 msgid "Highlight selected features and zoom"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1285 ../gui/wxpython/dbmgr/base.py:1765
+#: ../gui/wxpython/dbmgr/base.py:1413 ../gui/wxpython/dbmgr/base.py:1924
 msgid "Extract selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1286
+#: ../gui/wxpython/dbmgr/base.py:1414
 msgid "Delete selected features"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1347
+#: ../gui/wxpython/dbmgr/base.py:1477
 msgid "Update existing record"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1373 ../gui/wxpython/dbmgr/base.py:1477
+#: ../gui/wxpython/dbmgr/base.py:1504 ../gui/wxpython/dbmgr/base.py:1617
 #, python-format
 msgid "Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1387
+#: ../gui/wxpython/dbmgr/base.py:1523
 #, fuzzy, python-format
 msgid ""
 "Unable to update existing record.\n"
 "%s"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/dbmgr/base.py:1455
+#: ../gui/wxpython/dbmgr/base.py:1595
 #, python-format
 msgid "Record with category number %d already exists in the table."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1465
+#: ../gui/wxpython/dbmgr/base.py:1605
 #, python-format
 msgid "Category number (column %s) is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1489
+#: ../gui/wxpython/dbmgr/base.py:1629
 #, fuzzy, python-format
 msgid ""
 "Unable to insert new record.\n"
 "%s"
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/dbmgr/base.py:1540
+#: ../gui/wxpython/dbmgr/base.py:1682
 #, python-format
 msgid ""
 "Selected data records (%d) will be permanently deleted from table. Do you "
 "want to delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1543 ../gui/wxpython/dbmgr/base.py:1589
+#: ../gui/wxpython/dbmgr/base.py:1685 ../gui/wxpython/dbmgr/base.py:1735
 msgid "Delete records"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1586
+#: ../gui/wxpython/dbmgr/base.py:1732
 #, python-format
 msgid ""
 "All data records (%d) will be permanently deleted from table. Do you want to "
 "delete them?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1761
+#: ../gui/wxpython/dbmgr/base.py:1919
 msgid "Nothing to extract."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1794
+#: ../gui/wxpython/dbmgr/base.py:1953
 msgid "Nothing to delete."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1858 ../gui/wxpython/dbmgr/base.py:1883
+#: ../gui/wxpython/dbmgr/base.py:2024 ../gui/wxpython/dbmgr/base.py:2060
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5270,7 +5634,7 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:1871
+#: ../gui/wxpython/dbmgr/base.py:2043
 #, python-format
 msgid ""
 "Loading attribute data failed.\n"
@@ -5279,66 +5643,66 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2078
+#: ../gui/wxpython/dbmgr/base.py:2279
 #, python-format
 msgid "Table <%s> - right-click to delete column(s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2097 ../gui/wxpython/dbmgr/base.py:2148
-#: ../gui/wxpython/dbmgr/dialogs.py:754
+#: ../gui/wxpython/dbmgr/base.py:2303 ../gui/wxpython/dbmgr/base.py:2367
+#: ../gui/wxpython/dbmgr/dialogs.py:787
 #, fuzzy
 msgid "Column"
 msgstr "列名"
 
-#: ../gui/wxpython/dbmgr/base.py:2124 ../gui/wxpython/dbmgr/dialogs.py:768
+#: ../gui/wxpython/dbmgr/base.py:2338 ../gui/wxpython/dbmgr/dialogs.py:809
 #, fuzzy
 msgid "Length"
 msgstr "长度:%f\n"
 
-#: ../gui/wxpython/dbmgr/base.py:2140 ../gui/wxpython/menustrings.py:903
+#: ../gui/wxpython/dbmgr/base.py:2354 ../gui/wxpython/menustrings.py:903
 #: ../gui/wxpython/menustrings.py:1810
 msgid "Rename column"
 msgstr "字段重命名"
 
-#: ../gui/wxpython/dbmgr/base.py:2260
+#: ../gui/wxpython/dbmgr/base.py:2501
 msgid "Unable to rename column. No column name defined."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2268
+#: ../gui/wxpython/dbmgr/base.py:2509
 #, python-format
 msgid ""
 "Unable to rename column <%(column)s> to <%(columnTo)s>. Column already "
 "exists in the table <%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2284
+#: ../gui/wxpython/dbmgr/base.py:2527
 #, python-format
 msgid ""
 "Unable to rename column. Column <%(column)s> doesn't exist in the table <"
 "%(table)s>."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2311
+#: ../gui/wxpython/dbmgr/base.py:2566
 msgid "Drop selected column"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2314
+#: ../gui/wxpython/dbmgr/base.py:2570
 msgid "Drop all columns"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2343
+#: ../gui/wxpython/dbmgr/base.py:2602
 #, python-format
 msgid ""
 "Selected %s will PERMANENTLY removed from table. Do you want to drop the "
 "column?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2346 ../gui/wxpython/dbmgr/base.py:2383
+#: ../gui/wxpython/dbmgr/base.py:2605 ../gui/wxpython/dbmgr/base.py:2649
 #, fuzzy
 msgid "Drop column(s)"
 msgstr "列名"
 
-#: ../gui/wxpython/dbmgr/base.py:2380
+#: ../gui/wxpython/dbmgr/base.py:2646
 #, python-format
 msgid ""
 "Selected columns\n"
@@ -5346,170 +5710,170 @@ msgid ""
 "will PERMANENTLY removed from table. Do you want to drop the columns?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2468
+#: ../gui/wxpython/dbmgr/base.py:2752
 msgid "List of layers"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2548 ../gui/wxpython/dbmgr/base.py:2954
-#: ../gui/wxpython/dbmgr/base.py:3375
+#: ../gui/wxpython/dbmgr/base.py:2837 ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3697
 #, python-format
 msgid "Drop also linked attribute table (%s)"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Column name"
 msgstr "列名"
 
-#: ../gui/wxpython/dbmgr/base.py:2589
+#: ../gui/wxpython/dbmgr/base.py:2880
 msgid "Data length"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2763
-#: ../gui/wxpython/dbmgr/base.py:3019
+#: ../gui/wxpython/dbmgr/base.py:2937 ../gui/wxpython/dbmgr/base.py:3063
+#: ../gui/wxpython/dbmgr/base.py:3331
 msgid "Driver"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643 ../gui/wxpython/dbmgr/base.py:2768
-#: ../gui/wxpython/dbmgr/base.py:3025 ../gui/wxpython/gui_core/gselect.py:1326
+#: ../gui/wxpython/dbmgr/base.py:2938 ../gui/wxpython/dbmgr/base.py:3068
+#: ../gui/wxpython/dbmgr/base.py:3337 ../gui/wxpython/gui_core/gselect.py:1422
 msgid "Database"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2643
+#: ../gui/wxpython/dbmgr/base.py:2940
 msgid "Key"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2739
+#: ../gui/wxpython/dbmgr/base.py:3039
 msgid "Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2749
+#: ../gui/wxpython/dbmgr/base.py:3049
 msgid "Layer description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2779 ../gui/wxpython/dbmgr/base.py:2817
-#: ../gui/wxpython/dbmgr/base.py:3037
+#: ../gui/wxpython/dbmgr/base.py:3079 ../gui/wxpython/dbmgr/base.py:3123
+#: ../gui/wxpython/dbmgr/base.py:3349
 msgid "Key column"
 msgstr "主键字段名称"
 
-#: ../gui/wxpython/dbmgr/base.py:2784
+#: ../gui/wxpython/dbmgr/base.py:3084
 msgid "Insert record for each category into table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2799
+#: ../gui/wxpython/dbmgr/base.py:3106
 msgid "You need to add categories by v.category module."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2804
+#: ../gui/wxpython/dbmgr/base.py:3110
 msgid "Table description"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2812
+#: ../gui/wxpython/dbmgr/base.py:3118
 msgid "Table name"
 msgstr "表名"
 
-#: ../gui/wxpython/dbmgr/base.py:2825
+#: ../gui/wxpython/dbmgr/base.py:3132
 msgid "&Create table"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2829
-#: ../gui/wxpython/web_services/dialogs.py:504
+#: ../gui/wxpython/dbmgr/base.py:3136
+#: ../gui/wxpython/web_services/dialogs.py:536
 msgid "&Add layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2833
+#: ../gui/wxpython/dbmgr/base.py:3140
 msgid "&Set default"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:2937
+#: ../gui/wxpython/dbmgr/base.py:3244
 #, fuzzy
 msgid "Remove layer"
 msgstr "移除图层"
 
-#: ../gui/wxpython/dbmgr/base.py:2940
+#: ../gui/wxpython/dbmgr/base.py:3247
 #, fuzzy
 msgid "Layer to remove"
 msgstr "将要导入的二进制栅格文件"
 
-#: ../gui/wxpython/dbmgr/base.py:2961
+#: ../gui/wxpython/dbmgr/base.py:3273
 #, fuzzy
 msgid "&Remove layer"
 msgstr "移除图层"
 
-#: ../gui/wxpython/dbmgr/base.py:3004
+#: ../gui/wxpython/dbmgr/base.py:3316
 msgid "Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3076
+#: ../gui/wxpython/dbmgr/base.py:3392
 msgid "&Modify layer"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3124
+#: ../gui/wxpython/dbmgr/base.py:3441
 msgid ""
 "Unable to get list of tables.\n"
 "Please use db.connect to set database parameters."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3221
+#: ../gui/wxpython/dbmgr/base.py:3538
 msgid "Unable to create new table. Table name or key column name is missing."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3227
+#: ../gui/wxpython/dbmgr/base.py:3545
 #, python-format
 msgid "Unable to create new table. Table <%s> already exists in the database."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3265
+#: ../gui/wxpython/dbmgr/base.py:3586
 #, python-format
 msgid ""
 "Unable to add new layer to vector map <%(vector)s>. Layer %(layer)d already "
 "exists."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3430
+#: ../gui/wxpython/dbmgr/base.py:3755
 #, fuzzy
 msgid "Field statistics"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/dbmgr/base.py:3442
+#: ../gui/wxpython/dbmgr/base.py:3776
 #, fuzzy
 msgid "Copy statistics the clipboard (Ctrl+C)"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/dbmgr/base.py:3505
+#: ../gui/wxpython/dbmgr/base.py:3843
 msgid "Statistics is not support for DBF tables."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3528
+#: ../gui/wxpython/dbmgr/base.py:3870
 #, fuzzy
 msgid "Unable to calculte statistics."
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/dbmgr/base.py:3535
+#: ../gui/wxpython/dbmgr/base.py:3878
 #, python-format
 msgid ""
 "Unable to calculte statistics. Invalid number of lines %d (should be %d)."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/base.py:3553
+#: ../gui/wxpython/dbmgr/base.py:3898
 #, fuzzy
 msgid "Unable to calculte standard deviation."
 msgstr "无法创建新地点"
 
-#: ../gui/wxpython/dbmgr/base.py:3559
+#: ../gui/wxpython/dbmgr/base.py:3904
 #, fuzzy, python-format
 msgid "Field statistics <%s>"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:47
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:52
 #, fuzzy, python-format
 msgid "Loading attribute data for vector map <%s>..."
 msgstr "矢量文件读取错误"
 
-#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:49
+#: ../gui/wxpython/dbmgr/g.gui.dbmgr.py:56
 msgid "GRASS GIS Attribute Table Manager"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:74
+#: ../gui/wxpython/dbmgr/dialogs.py:78
 #, python-format
 msgid ""
 "No attribute table found.\n"
@@ -5518,201 +5882,202 @@ msgid ""
 "<%s>?"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:77
+#: ../gui/wxpython/dbmgr/dialogs.py:82
 #, fuzzy
 msgid "Create table?"
 msgstr "创建表"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:97
+#: ../gui/wxpython/dbmgr/dialogs.py:103
 msgid "Close dialog on submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:109
+#: ../gui/wxpython/dbmgr/dialogs.py:115
 msgid "No attributes found"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:115 ../gui/wxpython/menustrings.py:674
+#: ../gui/wxpython/dbmgr/dialogs.py:121 ../gui/wxpython/menustrings.py:674
 #: ../gui/wxpython/menustrings.py:1581
 msgid "Update attributes"
 msgstr "更新属性"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:117
+#: ../gui/wxpython/dbmgr/dialogs.py:123
 #, fuzzy
 msgid "Define attributes"
 msgstr "显示属性"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:119
+#: ../gui/wxpython/dbmgr/dialogs.py:125
 msgid "Display attributes"
 msgstr "显示属性"
 
-#: ../gui/wxpython/dbmgr/dialogs.py:123
+#: ../gui/wxpython/dbmgr/dialogs.py:129
 msgid "&Reload"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:124 ../gui/wxpython/dbmgr/dialogs.py:599
+#: ../gui/wxpython/dbmgr/dialogs.py:130 ../gui/wxpython/dbmgr/dialogs.py:624
 msgid "&Submit"
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:226
+#: ../gui/wxpython/dbmgr/dialogs.py:236
 #, python-format
 msgid "Column <%(col)s>: Value '%(value)s' needs to be entered as %(type)s."
 msgstr ""
 
-#: ../gui/wxpython/dbmgr/dialogs.py:438
+#: ../gui/wxpython/dbmgr/dialogs.py:450
 msgid "Unknown"
 msgstr ""
 
-#: ../gui/wxpython/icons/icon.py:34
+#: ../gui/wxpython/icons/icon.py:38
 #, python-format
 msgid "Unknown iconset '%s', using default 'grass'...\n"
 msgstr "无法识别图标集'%s',使用默认的'grass'...\n"
 
-#: ../gui/wxpython/icons/icon.py:51
+#: ../gui/wxpython/icons/icon.py:56
 #, fuzzy, python-format
 msgid "Unable to load icon theme. Reason: %s. Quiting wxGUI..."
 msgstr "无法加载图标主题..."
 
-#: ../gui/wxpython/animation/data.py:44 ../gui/wxpython/mapdisp/frame.py:270
-#: ../gui/wxpython/mapdisp/frame.py:329 ../gui/wxpython/mapdisp/frame.py:510
-#: ../gui/wxpython/mapdisp/toolbars.py:82 ../gui/wxpython/lmgr/layertree.py:906
+#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/frame.py:287
+#: ../gui/wxpython/mapdisp/frame.py:347 ../gui/wxpython/mapdisp/toolbars.py:95
+#: ../gui/wxpython/mapdisp/toolbars.py:297
+#: ../gui/wxpython/lmgr/layertree.py:1146
 msgid "2D view"
 msgstr "2D视图"
 
-#: ../gui/wxpython/animation/data.py:45 ../gui/wxpython/mapdisp/toolbars.py:88
-#: ../gui/wxpython/lmgr/frame.py:366
+#: ../gui/wxpython/animation/data.py:46 ../gui/wxpython/mapdisp/toolbars.py:102
+#: ../gui/wxpython/lmgr/frame.py:440
 msgid "3D view"
 msgstr "3D视图"
 
-#: ../gui/wxpython/animation/data.py:65
+#: ../gui/wxpython/animation/data.py:66
 #, fuzzy
 msgid "No animation name selected."
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/animation/data.py:131
+#: ../gui/wxpython/animation/data.py:132
 #, fuzzy
 msgid "No workspace file selected."
 msgstr "输出文件的名称"
 
-#: ../gui/wxpython/animation/data.py:134
+#: ../gui/wxpython/animation/data.py:135
 #, fuzzy, python-format
 msgid "File %s not found"
 msgstr "未找到栅格图<%s>"
 
-#: ../gui/wxpython/animation/data.py:143
+#: ../gui/wxpython/animation/data.py:144
 #, fuzzy, python-format
 msgid "Animation %d"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/animation/controller.py:224
+#: ../gui/wxpython/animation/controller.py:234
 #, fuzzy, python-format
 msgid "Maximum number of animations is %s."
 msgstr "插值点的数量"
 
-#: ../gui/wxpython/animation/controller.py:245
-#: ../gui/wxpython/animation/dialogs.py:727
+#: ../gui/wxpython/animation/controller.py:262
+#: ../gui/wxpython/animation/dialogs.py:886
 msgid ""
 "More animations are using one window. Please select different window for "
 "each animation."
 msgstr "多个动画使用同一个窗口。请为每个动画选择不同窗口。"
 
-#: ../gui/wxpython/animation/controller.py:405
+#: ../gui/wxpython/animation/controller.py:443
 #, fuzzy
 msgid "Failed to display legend."
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/animation/controller.py:436
+#: ../gui/wxpython/animation/controller.py:475
 msgid "Inconsistent number of maps, please check input data."
 msgstr "地图数字不一致,请检查输入数据。"
 
-#: ../gui/wxpython/animation/controller.py:460
+#: ../gui/wxpython/animation/controller.py:505
 #, fuzzy
 msgid "No animation to export."
 msgstr "在报告中不包含头信息"
 
-#: ../gui/wxpython/animation/controller.py:495
+#: ../gui/wxpython/animation/controller.py:542
 #, fuzzy
 msgid "Preparing export, please wait..."
 msgstr "正在打开矢量地图<%s>,请稍候..."
 
-#: ../gui/wxpython/animation/controller.py:543
-#: ../gui/wxpython/animation/frame.py:575
+#: ../gui/wxpython/animation/controller.py:598
+#: ../gui/wxpython/animation/frame.py:605
 #, python-format
 msgid "%(from)s %(dash)s %(to)s"
 msgstr "%(from)s %(dash)s %(to)s"
 
-#: ../gui/wxpython/animation/controller.py:549
+#: ../gui/wxpython/animation/controller.py:605
 #, python-format
 msgid "%(start)s %(unit)s"
 msgstr "%(start)s %(unit)s"
 
-#: ../gui/wxpython/animation/controller.py:564
+#: ../gui/wxpython/animation/controller.py:624
 #, fuzzy
 msgid "Exporting animation, please wait..."
 msgstr "导入地图 %d 的要素..."
 
-#: ../gui/wxpython/animation/frame.py:50
+#: ../gui/wxpython/animation/frame.py:51
 #, fuzzy
 msgid "GRASS GIS Animation tool"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/animation/frame.py:156
+#: ../gui/wxpython/animation/frame.py:170
 #, fuzzy
 msgid "Animation Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/animation/frame.py:264
+#: ../gui/wxpython/animation/frame.py:282
 #, fuzzy
 msgid "Loading data"
 msgstr "读取地图"
 
-#: ../gui/wxpython/animation/frame.py:273
+#: ../gui/wxpython/animation/frame.py:290
 #, python-brace-format
 msgid " ({c} out of {p})"
 msgstr " ({p}中的{c})"
 
-#: ../gui/wxpython/animation/frame.py:578
+#: ../gui/wxpython/animation/frame.py:610
 #, python-format
 msgid "to %(to)s"
 msgstr "到%(to)s"
 
-#: ../gui/wxpython/animation/utils.py:69 ../gui/wxpython/animation/utils.py:75
-#: ../gui/wxpython/animation/temporal_manager.py:228
-#: ../gui/wxpython/tplot/frame.py:755 ../gui/wxpython/timeline/frame.py:402
+#: ../gui/wxpython/animation/utils.py:70 ../gui/wxpython/animation/utils.py:79
+#: ../gui/wxpython/animation/temporal_manager.py:242
+#: ../gui/wxpython/tplot/frame.py:800 ../gui/wxpython/timeline/frame.py:461
 #, fuzzy, python-format
 msgid "Space time dataset <%s> not found."
 msgstr "矢量地图 '%s' 未找到"
 
-#: ../gui/wxpython/animation/utils.py:178
+#: ../gui/wxpython/animation/utils.py:182
 msgid "The number of maps in space-time datasets has to be the same."
 msgstr "时空数据集中的必须使用相同的地图数字。"
 
-#: ../gui/wxpython/animation/utils.py:182
+#: ../gui/wxpython/animation/utils.py:186
 msgid ""
 "The temporal type (absolute/relative) of space-time datasets has to be the "
 "same."
 msgstr "时空数据集中的时间数据(绝对/相对)必须相同。"
 
-#: ../gui/wxpython/animation/utils.py:186
+#: ../gui/wxpython/animation/utils.py:190
 msgid ""
 "The map type (point/interval) of space-time datasets has to be the same."
 msgstr "时空数据集中的地图类型(时间点/时间间隔)必须相同。"
 
-#: ../gui/wxpython/animation/utils.py:190
+#: ../gui/wxpython/animation/utils.py:194
 msgid ""
 "The temporal extents of maps in space-time datasets have to be the same."
 msgstr "时空数据集中须使用相同的地图时间范畴。"
 
-#: ../gui/wxpython/animation/utils.py:198
+#: ../gui/wxpython/animation/utils.py:202
 msgid "The number of maps to animate has to be the same for each map series."
 msgstr "动画地图系列中须使用相同的地图数字。"
 
-#: ../gui/wxpython/animation/utils.py:202
+#: ../gui/wxpython/animation/utils.py:207
 msgid ""
 "The number of maps to animate has to be the same as the number of maps in "
 "temporal dataset."
 msgstr ""
 
-#: ../gui/wxpython/animation/nviztask.py:42 ../gui/wxpython/lmgr/frame.py:1231
+#: ../gui/wxpython/animation/nviztask.py:43 ../gui/wxpython/lmgr/frame.py:1363
 #, python-format
 msgid ""
 "Reading workspace file <%s> failed.\n"
@@ -5721,48 +6086,48 @@ msgstr ""
 "读取工作区文件<%s>失败。\n"
 "无效文件,无法解析XML文档。"
 
-#: ../gui/wxpython/animation/nviztask.py:51
+#: ../gui/wxpython/animation/nviztask.py:53
 #, fuzzy, python-format
 msgid "No 3d view information in workspace file <%s>."
 msgstr "已有的MAT-File(v4)的名称"
 
-#: ../gui/wxpython/animation/nviztask.py:259
+#: ../gui/wxpython/animation/nviztask.py:285
 #, fuzzy
 msgid "Please add only one layer in the list."
 msgstr "加载地图层到层列表"
 
-#: ../gui/wxpython/animation/nviztask.py:265
+#: ../gui/wxpython/animation/nviztask.py:292
 #, fuzzy
 msgid "No map series nor space-time dataset is added."
 msgstr "创建一个空数据库"
 
-#: ../gui/wxpython/animation/provider.py:362
+#: ../gui/wxpython/animation/provider.py:417
 #, fuzzy
 msgid "Rendering map layers"
 msgstr "移除图层"
 
-#: ../gui/wxpython/animation/provider.py:458
+#: ../gui/wxpython/animation/provider.py:530
 #, fuzzy
 msgid "Overlaying map layers"
 msgstr "覆盖已有的输出地图文件"
 
-#: ../gui/wxpython/animation/provider.py:676
+#: ../gui/wxpython/animation/provider.py:757
 #, fuzzy, python-brace-format
 msgid "Directory {t} not removed."
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/animation/temporal_manager.py:105
+#: ../gui/wxpython/animation/temporal_manager.py:110
 msgid ""
 "It is not allowed to display data with different temporal types (absolute "
 "and relative)."
 msgstr "不能显示不同时间类型的数据(绝对和相对)。"
 
-#: ../gui/wxpython/animation/temporal_manager.py:119
+#: ../gui/wxpython/animation/temporal_manager.py:125
 #, python-format
 msgid "It is not allowed to display data with different units (%s)."
 msgstr "不能显示不同单位(%s)的数据。"
 
-#: ../gui/wxpython/animation/temporal_manager.py:130
+#: ../gui/wxpython/animation/temporal_manager.py:137
 msgid ""
 "You are going to display data with different temporal types of maps "
 "(interval and point). It is recommended to use data of one temporal type to "
@@ -5771,351 +6136,351 @@ msgstr ""
 "你将显示的地图数据含有不同的时间类型(时间间隔和时间点)。建议仅使用一种类型"
 "的数据以避免混乱。"
 
-#: ../gui/wxpython/animation/temporal_manager.py:330
+#: ../gui/wxpython/animation/temporal_manager.py:347
 #, python-format
 msgid "Topology of Space time dataset %s is invalid."
 msgstr "时空数据的拓扑%s无效。"
 
-#: ../gui/wxpython/animation/g.gui.animation.py:88
+#: ../gui/wxpython/animation/g.gui.animation.py:92
 #, python-format
 msgid "%s=, %s=, %s= and %s= are mutually exclusive."
 msgstr "%s=, %s=, %s= 和 %s= 为互斥项。"
 
-#: ../gui/wxpython/animation/dialogs.py:51
+#: ../gui/wxpython/animation/dialogs.py:52
 msgid "Adjust speed of animation"
 msgstr "调整动画速度"
 
-#: ../gui/wxpython/animation/dialogs.py:96
+#: ../gui/wxpython/animation/dialogs.py:99
 #, fuzzy
 msgid "Simple mode"
 msgstr "安静模式"
 
-#: ../gui/wxpython/animation/dialogs.py:100
+#: ../gui/wxpython/animation/dialogs.py:104
 #, fuzzy
 msgid "Frame duration:"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/animation/dialogs.py:101
-#: ../gui/wxpython/animation/dialogs.py:124
+#: ../gui/wxpython/animation/dialogs.py:105
+#: ../gui/wxpython/animation/dialogs.py:146
 msgid "ms"
 msgstr "毫秒"
 
-#: ../gui/wxpython/animation/dialogs.py:118
+#: ../gui/wxpython/animation/dialogs.py:138
 msgid "Temporal mode"
 msgstr "时间模式"
 
-#: ../gui/wxpython/animation/dialogs.py:122
+#: ../gui/wxpython/animation/dialogs.py:143
 msgid "Time unit:"
 msgstr "时间单位:"
 
-#: ../gui/wxpython/animation/dialogs.py:123
+#: ../gui/wxpython/animation/dialogs.py:145
 #, fuzzy
 msgid "Duration of time unit:"
 msgstr "离散化错误 (地图单位)"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:217
 msgid "year"
 msgstr "年"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:218
 msgid "month"
 msgstr "月"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:219
 #, fuzzy
 msgid "day"
 msgstr "显示文本"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:220
 msgid "hour"
 msgstr "小时"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:221
 msgid "minute"
 msgstr "分钟"
 
-#: ../gui/wxpython/animation/dialogs.py:175
+#: ../gui/wxpython/animation/dialogs.py:222
 msgid "second"
 msgstr "秒"
 
-#: ../gui/wxpython/animation/dialogs.py:239
+#: ../gui/wxpython/animation/dialogs.py:287
 #, fuzzy
 msgid "Animation speed is too high."
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/animation/dialogs.py:274
-#: ../gui/wxpython/animation/toolbars.py:36
-#: ../gui/wxpython/animation/toolbars.py:37
+#: ../gui/wxpython/animation/dialogs.py:323
+#: ../gui/wxpython/animation/toolbars.py:51
+#: ../gui/wxpython/animation/toolbars.py:52
 #, fuzzy
 msgid "Add new animation"
 msgstr "MPEG-1动画"
 
-#: ../gui/wxpython/animation/dialogs.py:276
+#: ../gui/wxpython/animation/dialogs.py:325
 #, fuzzy
 msgid "Edit animation"
 msgstr "MPEG-1动画"
 
-#: ../gui/wxpython/animation/dialogs.py:288
+#: ../gui/wxpython/animation/dialogs.py:343
 msgid "Advanced"
 msgstr "高级"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:374
 #, fuzzy
 msgid "top left"
 msgstr "等高线级数的列表"
 
-#: ../gui/wxpython/animation/dialogs.py:312
+#: ../gui/wxpython/animation/dialogs.py:375
 msgid "top right"
 msgstr "右上"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:376
 #, fuzzy
 msgid "bottom left"
 msgstr "选择要运行的模型"
 
-#: ../gui/wxpython/animation/dialogs.py:313
+#: ../gui/wxpython/animation/dialogs.py:377
 #, fuzzy
 msgid "bottom right"
 msgstr "选择要运行的模型"
 
-#: ../gui/wxpython/animation/dialogs.py:327
+#: ../gui/wxpython/animation/dialogs.py:393
 msgid "Select 2D or 3D view"
 msgstr "选择二维或三维视图"
 
-#: ../gui/wxpython/animation/dialogs.py:334
+#: ../gui/wxpython/animation/dialogs.py:408
 #, fuzzy
 msgid "Window position:"
 msgstr "保存并关闭"
 
-#: ../gui/wxpython/animation/dialogs.py:337
+#: ../gui/wxpython/animation/dialogs.py:418
 #, fuzzy
 msgid "View mode:"
 msgstr "安静模式"
 
-#: ../gui/wxpython/animation/dialogs.py:343
+#: ../gui/wxpython/animation/dialogs.py:429
 msgid ""
 "For 3D animation, please select only one space-time dataset\n"
 "or one series of map layers."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:371
+#: ../gui/wxpython/animation/dialogs.py:474
 #: ../gui/wxpython/lmgr/layertree.py:109
 msgid "Set options"
 msgstr "选项设置"
 
-#: ../gui/wxpython/animation/dialogs.py:388
+#: ../gui/wxpython/animation/dialogs.py:495
 #, fuzzy
 msgid "3D view parameters"
 msgstr "要素类型"
 
-#: ../gui/wxpython/animation/dialogs.py:395
+#: ../gui/wxpython/animation/dialogs.py:503
 msgid "Workspace file:"
 msgstr "工作区文件:"
 
-#: ../gui/wxpython/animation/dialogs.py:396
+#: ../gui/wxpython/animation/dialogs.py:505
 msgid "Choose workspace file to import 3D view parameters"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:403
+#: ../gui/wxpython/animation/dialogs.py:514
 #, fuzzy
 msgid "Parameter for animation:"
 msgstr "管理边界定义"
 
-#: ../gui/wxpython/animation/dialogs.py:425
+#: ../gui/wxpython/animation/dialogs.py:553
 msgid "Animate region change (2D view only)"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:429
+#: ../gui/wxpython/animation/dialogs.py:557
 #, fuzzy
 msgid "Start region:"
 msgstr "设置地区"
 
-#: ../gui/wxpython/animation/dialogs.py:436
+#: ../gui/wxpython/animation/dialogs.py:567
 #, fuzzy
 msgid "End region:"
 msgstr "设置地区"
 
-#: ../gui/wxpython/animation/dialogs.py:440
+#: ../gui/wxpython/animation/dialogs.py:573
 #, fuzzy
 msgid "Zoom value:"
 msgstr "比特模式的值"
 
-#: ../gui/wxpython/animation/dialogs.py:441
+#: ../gui/wxpython/animation/dialogs.py:574
 msgid "N-S/E-W distances in map units used to gradually reduce region."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:448
+#: ../gui/wxpython/animation/dialogs.py:581
 msgid "N-S:"
 msgstr "南北向:"
 
-#: ../gui/wxpython/animation/dialogs.py:451
+#: ../gui/wxpython/animation/dialogs.py:584
 msgid "E-W:"
 msgstr "东西向:"
 
-#: ../gui/wxpython/animation/dialogs.py:543
+#: ../gui/wxpython/animation/dialogs.py:682
 msgid "Only one series or space-time dataset is accepted for 3D mode."
 msgstr "三维模式仅接受一个系列或一个时空数据集。"
 
-#: ../gui/wxpython/animation/dialogs.py:551
+#: ../gui/wxpython/animation/dialogs.py:690
 #, fuzzy
 msgid "No map series or space-time dataset added."
 msgstr "创建一个空数据库"
 
-#: ../gui/wxpython/animation/dialogs.py:579
+#: ../gui/wxpython/animation/dialogs.py:718
 msgid "Region information is not complete"
 msgstr "区域信息不完全"
 
-#: ../gui/wxpython/animation/dialogs.py:608
+#: ../gui/wxpython/animation/dialogs.py:752
 msgid "Add, edit or remove animations"
 msgstr "添加,编辑或移除动画"
 
-#: ../gui/wxpython/animation/dialogs.py:616
+#: ../gui/wxpython/animation/dialogs.py:764
 #, fuzzy
 msgid "List of animations"
 msgstr "等高线级数的列表"
 
-#: ../gui/wxpython/animation/dialogs.py:627
+#: ../gui/wxpython/animation/dialogs.py:777
 msgid "Edit"
 msgstr "编辑"
 
-#: ../gui/wxpython/animation/dialogs.py:680
+#: ../gui/wxpython/animation/dialogs.py:836
 #, fuzzy, python-format
 msgid "Maximum number of animations is %d."
 msgstr "插值点的数量"
 
-#: ../gui/wxpython/animation/dialogs.py:742
-#: ../gui/wxpython/animation/toolbars.py:40
-#: ../gui/wxpython/animation/toolbars.py:41
+#: ../gui/wxpython/animation/dialogs.py:906
+#: ../gui/wxpython/animation/toolbars.py:59
+#: ../gui/wxpython/animation/toolbars.py:60
 #, fuzzy
 msgid "Export animation"
 msgstr "MPEG-1动画"
 
-#: ../gui/wxpython/animation/dialogs.py:760 ../gui/wxpython/nviz/tools.py:611
+#: ../gui/wxpython/animation/dialogs.py:928 ../gui/wxpython/nviz/tools.py:781
 #, fuzzy
 msgid "Decorations"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/animation/dialogs.py:765
-#: ../gui/wxpython/lmgr/layertree.py:584 ../gui/wxpython/menustrings.py:947
+#: ../gui/wxpython/animation/dialogs.py:933
+#: ../gui/wxpython/lmgr/layertree.py:720 ../gui/wxpython/menustrings.py:947
 #: ../gui/wxpython/menustrings.py:1854
 msgid "Export"
 msgstr "导出"
 
-#: ../gui/wxpython/animation/dialogs.py:811
+#: ../gui/wxpython/animation/dialogs.py:987
 #, fuzzy
 msgid "Add time stamp"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2009
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2015
 #, fuzzy
 msgid "Add image"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/animation/dialogs.py:811 ../gui/wxpython/menustrings.py:2007
+#: ../gui/wxpython/animation/dialogs.py:987 ../gui/wxpython/menustrings.py:2013
 #, fuzzy
 msgid "Add text"
 msgstr "添加顶点"
 
-#: ../gui/wxpython/animation/dialogs.py:831
+#: ../gui/wxpython/animation/dialogs.py:1029
 msgid "Add time stamp, image or text decoration by one of the buttons above."
 msgstr "使用上面其中一个按钮来添加时间戳,图像或装饰文本。"
 
-#: ../gui/wxpython/animation/dialogs.py:833
+#: ../gui/wxpython/animation/dialogs.py:1031
 msgid "Add image or text decoration by one of the buttons above."
 msgstr "使用上面按钮中的一个来添加图像或装饰文本。"
 
-#: ../gui/wxpython/animation/dialogs.py:842
+#: ../gui/wxpython/animation/dialogs.py:1052
 #, fuzzy
 msgid "Font settings:"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/animation/dialogs.py:844
+#: ../gui/wxpython/animation/dialogs.py:1057
 #, fuzzy
 msgid "Sample text"
 msgstr "完成率:"
 
-#: ../gui/wxpython/animation/dialogs.py:856
+#: ../gui/wxpython/animation/dialogs.py:1077
 #, fuzzy
 msgid "Image file:"
 msgstr "输入文件"
 
-#: ../gui/wxpython/animation/dialogs.py:857
+#: ../gui/wxpython/animation/dialogs.py:1078
 #, fuzzy
 msgid "Choose image file"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/animation/dialogs.py:878
+#: ../gui/wxpython/animation/dialogs.py:1115
 msgid "Placement as percentage of screen coordinates (X: 0, Y: 0 is top left):"
 msgstr "以屏幕坐标的百分比来定位(左上角为X:0,Y:0):"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "image sequence"
 msgstr "保存当前显示为图片文件"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "animated GIF"
 msgstr "动画GIF"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 #, fuzzy
 msgid "SWF"
 msgstr "WFS"
 
-#: ../gui/wxpython/animation/dialogs.py:901
+#: ../gui/wxpython/animation/dialogs.py:1150
 msgid "AVI"
 msgstr "AVI"
 
-#: ../gui/wxpython/animation/dialogs.py:905
+#: ../gui/wxpython/animation/dialogs.py:1161
 #, fuzzy
 msgid "Export to:"
 msgstr "导出"
 
-#: ../gui/wxpython/animation/dialogs.py:920 ../gui/wxpython/nviz/tools.py:487
+#: ../gui/wxpython/animation/dialogs.py:1186 ../gui/wxpython/nviz/tools.py:631
 #, fuzzy
 msgid "File prefix:"
 msgstr "要素类型"
 
-#: ../gui/wxpython/animation/dialogs.py:921
+#: ../gui/wxpython/animation/dialogs.py:1188
 #, fuzzy
 msgid "animation_"
 msgstr "MPEG-1动画"
 
-#: ../gui/wxpython/animation/dialogs.py:922 ../gui/wxpython/nviz/tools.py:492
+#: ../gui/wxpython/animation/dialogs.py:1190 ../gui/wxpython/nviz/tools.py:639
 #, fuzzy
 msgid "File format:"
 msgstr "OGR 格式"
 
-#: ../gui/wxpython/animation/dialogs.py:927
-#: ../gui/wxpython/gui_core/gselect.py:1402
-#: ../gui/wxpython/gui_core/gselect.py:1464
+#: ../gui/wxpython/animation/dialogs.py:1195
+#: ../gui/wxpython/gui_core/gselect.py:1505
+#: ../gui/wxpython/gui_core/gselect.py:1588
 #, fuzzy
 msgid "Directory:"
 msgstr "GIS数据目录:"
 
-#: ../gui/wxpython/animation/dialogs.py:928
+#: ../gui/wxpython/animation/dialogs.py:1196
 #, fuzzy
 msgid "Choose directory for export"
 msgstr "类别 %d 没有相关的记录"
 
-#: ../gui/wxpython/animation/dialogs.py:950
+#: ../gui/wxpython/animation/dialogs.py:1231
 #, fuzzy
 msgid "GIF file:"
 msgstr "DXF文件"
 
-#: ../gui/wxpython/animation/dialogs.py:951
-#: ../gui/wxpython/animation/dialogs.py:968
-#: ../gui/wxpython/animation/dialogs.py:991
+#: ../gui/wxpython/animation/dialogs.py:1232
+#: ../gui/wxpython/animation/dialogs.py:1256
+#: ../gui/wxpython/animation/dialogs.py:1287
 #, fuzzy
 msgid "Choose file to save animation"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/animation/dialogs.py:967
+#: ../gui/wxpython/animation/dialogs.py:1255
 #, fuzzy
 msgid "SWF file:"
 msgstr "DXF文件"
 
-#: ../gui/wxpython/animation/dialogs.py:984
+#: ../gui/wxpython/animation/dialogs.py:1278
 msgid ""
 "Program 'ffmpeg' was not found.\n"
 "Please install it first and make sure\n"
@@ -6125,161 +6490,161 @@ msgstr ""
 "请安装并\n"
 "在PATH变量设置路径。"
 
-#: ../gui/wxpython/animation/dialogs.py:990
+#: ../gui/wxpython/animation/dialogs.py:1286
 #, fuzzy
 msgid "AVI file:"
 msgstr "保存组文件"
 
-#: ../gui/wxpython/animation/dialogs.py:994
+#: ../gui/wxpython/animation/dialogs.py:1294
 msgid "Video codec:"
 msgstr "视频解码器:"
 
-#: ../gui/wxpython/animation/dialogs.py:996
+#: ../gui/wxpython/animation/dialogs.py:1298
 #, fuzzy
 msgid "Additional options:"
 msgstr "选项设置"
 
-#: ../gui/wxpython/animation/dialogs.py:998
+#: ../gui/wxpython/animation/dialogs.py:1302
 msgid ""
 "Consider adding '-sameq' or '-qscale 1' if not satisfied with video quality. "
 "Options depend on ffmpeg version."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1020
+#: ../gui/wxpython/animation/dialogs.py:1339
 #, python-format
 msgid "Current frame rate: %.2f fps"
 msgstr "当前帧率:%.2f fps"
 
-#: ../gui/wxpython/animation/dialogs.py:1138
+#: ../gui/wxpython/animation/dialogs.py:1471
 #, fuzzy, python-format
 msgid "File %s not found."
 msgstr "未找到栅格图<%s>"
 
-#: ../gui/wxpython/animation/dialogs.py:1140
+#: ../gui/wxpython/animation/dialogs.py:1475
 msgid "Decoration image file is missing."
 msgstr "找不到装饰图像文件。"
 
-#: ../gui/wxpython/animation/dialogs.py:1147
+#: ../gui/wxpython/animation/dialogs.py:1484
 #, fuzzy, python-format
 msgid "Directory %s not found."
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/animation/dialogs.py:1149
+#: ../gui/wxpython/animation/dialogs.py:1488
 #, fuzzy
 msgid "Export directory is missing."
 msgstr "导出矢量图"
 
-#: ../gui/wxpython/animation/dialogs.py:1153
-#: ../gui/wxpython/animation/dialogs.py:1157
+#: ../gui/wxpython/animation/dialogs.py:1492
+#: ../gui/wxpython/animation/dialogs.py:1496
 #, fuzzy
 msgid "Export file is missing."
 msgstr "输入文件的版本是3。\n"
 
-#: ../gui/wxpython/animation/dialogs.py:1194
+#: ../gui/wxpython/animation/dialogs.py:1534
 msgid "Time stamp"
 msgstr "时间戳"
 
-#: ../gui/wxpython/animation/dialogs.py:1265
+#: ../gui/wxpython/animation/dialogs.py:1612
 #, fuzzy
 msgid "Add space-time dataset layer"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/animation/dialogs.py:1283
+#: ../gui/wxpython/animation/dialogs.py:1637
 #, fuzzy
 msgid "Multiple raster maps"
 msgstr "输出的坡面栅格文件"
 
-#: ../gui/wxpython/animation/dialogs.py:1284
+#: ../gui/wxpython/animation/dialogs.py:1638
 #, fuzzy
 msgid "Multiple vector maps"
 msgstr "新矢量地图"
 
-#: ../gui/wxpython/animation/dialogs.py:1285
+#: ../gui/wxpython/animation/dialogs.py:1639
 #, fuzzy
 msgid "Multiple 3D raster maps"
 msgstr "输出的坡面栅格文件"
 
-#: ../gui/wxpython/animation/dialogs.py:1286
+#: ../gui/wxpython/animation/dialogs.py:1640
 #, fuzzy
 msgid "Space time raster dataset"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/animation/dialogs.py:1287
+#: ../gui/wxpython/animation/dialogs.py:1641
 #, fuzzy
 msgid "Space time vector dataset"
 msgstr "导入矢量数据"
 
-#: ../gui/wxpython/animation/dialogs.py:1288
+#: ../gui/wxpython/animation/dialogs.py:1642
 #, fuzzy
 msgid "Space time 3D raster dataset"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/animation/dialogs.py:1327
+#: ../gui/wxpython/animation/dialogs.py:1681
 #, fuzzy
 msgid "Input data type:"
 msgstr "只打印栅格图的类型"
 
-#: ../gui/wxpython/animation/dialogs.py:1403
+#: ../gui/wxpython/animation/dialogs.py:1762
 #, fuzzy
 msgid "Select raster/vector maps."
 msgstr "导出栅格地图"
 
-#: ../gui/wxpython/animation/dialogs.py:1430
+#: ../gui/wxpython/animation/dialogs.py:1791
 #, fuzzy
 msgid "Please select maps or dataset first."
 msgstr "点模式下不建立拓扑"
 
-#: ../gui/wxpython/animation/dialogs.py:1458
+#: ../gui/wxpython/animation/dialogs.py:1820
 #, fuzzy
 msgid "Animation Tool settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/animation/dialogs.py:1497
-#: ../gui/wxpython/gui_core/preferences.py:655
-#: ../gui/wxpython/web_services/widgets.py:263
-#: ../gui/wxpython/nviz/tools.py:355 ../gui/wxpython/nviz/preferences.py:178
+#: ../gui/wxpython/animation/dialogs.py:1863
+#: ../gui/wxpython/gui_core/preferences.py:856
+#: ../gui/wxpython/web_services/widgets.py:304
+#: ../gui/wxpython/nviz/tools.py:464 ../gui/wxpython/nviz/preferences.py:203
 msgid "Background color:"
 msgstr "背景色:"
 
-#: ../gui/wxpython/animation/dialogs.py:1510
+#: ../gui/wxpython/animation/dialogs.py:1884
 msgid "Number of parallel processes:"
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1524
+#: ../gui/wxpython/animation/dialogs.py:1913
 #, fuzzy
 msgid "Text foreground color:"
 msgstr "\t背景颜色"
 
-#: ../gui/wxpython/animation/dialogs.py:1537
+#: ../gui/wxpython/animation/dialogs.py:1934
 #, fuzzy
 msgid "Text background color:"
 msgstr "\t背景颜色"
 
-#: ../gui/wxpython/animation/dialogs.py:1559
-#: ../gui/wxpython/timeline/frame.py:273
+#: ../gui/wxpython/animation/dialogs.py:1966
+#: ../gui/wxpython/timeline/frame.py:301
 msgid "Time"
 msgstr "时间"
 
-#: ../gui/wxpython/animation/dialogs.py:1567
+#: ../gui/wxpython/animation/dialogs.py:1976
 #, fuzzy
 msgid "Absolute time format:"
 msgstr "要查询的坐标"
 
-#: ../gui/wxpython/animation/dialogs.py:1577
+#: ../gui/wxpython/animation/dialogs.py:1996
 msgid ""
 "Click and then press key up or down to preview different date and time "
 "formats. Type custom format string."
 msgstr ""
 
-#: ../gui/wxpython/animation/dialogs.py:1586
+#: ../gui/wxpython/animation/dialogs.py:2007
 msgid "Learn more about formatting options"
 msgstr "了解更多格式选项"
 
-#: ../gui/wxpython/animation/dialogs.py:1595
+#: ../gui/wxpython/animation/dialogs.py:2021
 msgid "Display instances with no data"
 msgstr "显示没有数据的实例"
 
-#: ../gui/wxpython/animation/dialogs.py:1596
+#: ../gui/wxpython/animation/dialogs.py:2024
 msgid ""
 "When animating instant-based data which have irregular timestamps you can "
 "display 'no data frame' (checked option) or keep last frame."
@@ -6287,71 +6652,71 @@ msgstr ""
 "当实时数据动画的时间戳不均匀时,可显示为'无数据帧'(已选中)或停留于最后一"
 "帧。"
 
-#: ../gui/wxpython/animation/dialogs.py:1618
+#: ../gui/wxpython/animation/dialogs.py:2055
 #, fuzzy
 msgid "Invalid"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/animation/toolbars.py:28
+#: ../gui/wxpython/animation/toolbars.py:30
 #, fuzzy
 msgid "Change animation speed"
 msgstr "切换地图集"
 
-#: ../gui/wxpython/animation/toolbars.py:29
+#: ../gui/wxpython/animation/toolbars.py:33
 #, fuzzy
 msgid "Play forward"
 msgstr "POV-Ray格式"
 
-#: ../gui/wxpython/animation/toolbars.py:30
+#: ../gui/wxpython/animation/toolbars.py:36
 msgid "Play back"
 msgstr "回放"
 
-#: ../gui/wxpython/animation/toolbars.py:31 ../gui/wxpython/nviz/tools.py:410
+#: ../gui/wxpython/animation/toolbars.py:39 ../gui/wxpython/nviz/tools.py:526
 msgid "Stop"
 msgstr "停止"
 
-#: ../gui/wxpython/animation/toolbars.py:32 ../gui/wxpython/nviz/tools.py:408
+#: ../gui/wxpython/animation/toolbars.py:42 ../gui/wxpython/nviz/tools.py:524
 msgid "Pause"
 msgstr "暂停"
 
-#: ../gui/wxpython/animation/toolbars.py:33
+#: ../gui/wxpython/animation/toolbars.py:45
 msgid "Repeat"
 msgstr "重复"
 
-#: ../gui/wxpython/animation/toolbars.py:35
+#: ../gui/wxpython/animation/toolbars.py:48
 msgid "Play back and forward"
 msgstr "后退和前进"
 
-#: ../gui/wxpython/animation/toolbars.py:38
-#: ../gui/wxpython/animation/toolbars.py:39
+#: ../gui/wxpython/animation/toolbars.py:55
+#: ../gui/wxpython/animation/toolbars.py:56
 msgid "Add, edit or remove animation"
 msgstr "添加,编辑或移除动画"
 
-#: ../gui/wxpython/animation/toolbars.py:49
+#: ../gui/wxpython/animation/toolbars.py:68
 #, fuzzy
 msgid "Add space-time dataset or series of map layers"
 msgstr "添加彩色地势图层"
 
-#: ../gui/wxpython/animation/toolbars.py:50
+#: ../gui/wxpython/animation/toolbars.py:69
 msgid "Add space-time dataset or series of map layers for animation"
 msgstr ""
 
-#: ../gui/wxpython/vnet/widgets.py:377
+#: ../gui/wxpython/vnet/widgets.py:378
 #, fuzzy
 msgid "Invalid value inserted. Operation canceled."
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/vnet/widgets.py:528
+#: ../gui/wxpython/vnet/widgets.py:539
 #, fuzzy
 msgid "Edit point"
 msgstr "点"
 
-#: ../gui/wxpython/vnet/vnet_core.py:106
+#: ../gui/wxpython/vnet/vnet_core.py:116
 #, fuzzy
 msgid "Unable to perform analysis."
 msgstr "无法解析命令:%s"
 
-#: ../gui/wxpython/vnet/vnet_core.py:211
+#: ../gui/wxpython/vnet/vnet_core.py:226
 #, python-format
 msgid ""
 "Temporary map '%s' with result was changed outside vector network analysis "
@@ -6361,50 +6726,50 @@ msgstr ""
 "含有在矢量网络分析工具以外改动过的结果的临时地图'%s'.\n"
 "所显示的结果可能与原来的分析结果不一致."
 
-#: ../gui/wxpython/vnet/vnet_core.py:216
+#: ../gui/wxpython/vnet/vnet_core.py:231
 msgid "Result changed outside"
 msgstr "结果含有外部改动."
 
-#: ../gui/wxpython/vnet/vnet_core.py:253
+#: ../gui/wxpython/vnet/vnet_core.py:268
 #, fuzzy
 msgid "Map can be created only in current mapset"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/vnet/vnet_core.py:260 ../gui/wxpython/vnet/vnet_core.py:337
+#: ../gui/wxpython/vnet/vnet_core.py:275 ../gui/wxpython/vnet/vnet_core.py:352
 #, fuzzy, python-format
 msgid "Vector map %s already exists. Do you want to overwrite it?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/vnet/vnet_core.py:263 ../gui/wxpython/vnet/vnet_core.py:340
+#: ../gui/wxpython/vnet/vnet_core.py:278 ../gui/wxpython/vnet/vnet_core.py:355
 #, fuzzy
 msgid "Overwrite vector map"
 msgstr "叠加栅格图"
 
-#: ../gui/wxpython/vnet/vnet_core.py:289
+#: ../gui/wxpython/vnet/vnet_core.py:304
 #, fuzzy
 msgid "Creation of turntable failed."
 msgstr "创建新组文件"
 
-#: ../gui/wxpython/vnet/vnet_core.py:309
+#: ../gui/wxpython/vnet/vnet_core.py:324
 #, fuzzy
 msgid "Vector map with analysis result does not exist."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/vnet/vnet_core.py:330
+#: ../gui/wxpython/vnet/vnet_core.py:345
 msgid "Map can be saved only to currently set mapset"
 msgstr "地图只能保存于当前地图集"
 
-#: ../gui/wxpython/vnet/vnet_core.py:409 ../gui/wxpython/vnet/vnet_core.py:609
+#: ../gui/wxpython/vnet/vnet_core.py:427 ../gui/wxpython/vnet/vnet_core.py:632
 #, python-format
 msgid "Please choose '%s' and '%s' point."
 msgstr "请选择点'%s'和'%s'."
 
-#: ../gui/wxpython/vnet/vnet_core.py:616
+#: ../gui/wxpython/vnet/vnet_core.py:639
 #, fuzzy
 msgid "Please choose at least two points."
 msgstr "至少需要输入%d个点。"
 
-#: ../gui/wxpython/vnet/vnet_core.py:895
+#: ../gui/wxpython/vnet/vnet_core.py:932
 #, python-format
 msgid ""
 "Input map '%s' for analysis was changed outside vector network analysis "
@@ -6414,32 +6779,32 @@ msgstr ""
 "输入地图'%s'在矢量网络分析工具外部有改动.\n"
 "拓扑列可能与之前不一致."
 
-#: ../gui/wxpython/vnet/vnet_core.py:900
+#: ../gui/wxpython/vnet/vnet_core.py:937
 msgid "Input changed outside"
 msgstr "输入在外部有改动."
 
-#: ../gui/wxpython/vnet/vnet_core.py:975
+#: ../gui/wxpython/vnet/vnet_core.py:1011
 #, fuzzy, python-format
 msgid ""
 "Temporary map %s  already exists.\n"
 "Do you want to continue in analysis and overwrite it?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1001
+#: ../gui/wxpython/vnet/vnet_core.py:1038
 #, fuzzy
 msgid "Unable to use ctypes. \n"
 msgstr "无法打开输出文件 <%s>"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1002
-#: ../gui/wxpython/vnet/vnet_core.py:1024
+#: ../gui/wxpython/vnet/vnet_core.py:1039
+#: ../gui/wxpython/vnet/vnet_core.py:1062
 msgid "Snapping mode can not be activated."
 msgstr "快照模式不能激活."
 
-#: ../gui/wxpython/vnet/vnet_core.py:1033
+#: ../gui/wxpython/vnet/vnet_core.py:1069
 msgid "Do you really want to activate snapping and overwrite it?"
 msgstr "确定激活快照模式并覆盖吗?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1040
+#: ../gui/wxpython/vnet/vnet_core.py:1079
 #, python-format
 msgid ""
 "Temporary map '%s' was changed outside vector analysis tool.\n"
@@ -6448,480 +6813,481 @@ msgstr ""
 "临时地图'%s'已被从矢量分析工具之外改动.\n"
 "确定激活快照模式并进行覆盖操作?"
 
-#: ../gui/wxpython/vnet/vnet_core.py:1045
+#: ../gui/wxpython/vnet/vnet_core.py:1084
 #, fuzzy
 msgid "Overwrite map"
 msgstr "叠加栅格图"
 
-#: ../gui/wxpython/vnet/vnet_data.py:145
+#: ../gui/wxpython/vnet/vnet_data.py:162
 #, python-format
 msgid "Module <%s> does not support turns costs."
 msgstr "模块<%s>不支持转弯成本."
 
-#: ../gui/wxpython/vnet/vnet_data.py:151
+#: ../gui/wxpython/vnet/vnet_data.py:169
 #, fuzzy, python-format
 msgid "Vector map '%s' does not exist."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/vnet/vnet_data.py:153
+#: ../gui/wxpython/vnet/vnet_data.py:172
 #, fuzzy
 msgid "Vector map was not chosen."
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/vnet/vnet_data.py:162
+#: ../gui/wxpython/vnet/vnet_data.py:181
 #, fuzzy
 msgid "arc layer"
 msgstr "地图层"
 
-#: ../gui/wxpython/vnet/vnet_data.py:163
+#: ../gui/wxpython/vnet/vnet_data.py:182
 #, fuzzy
 msgid "node layer"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:164
+#: ../gui/wxpython/vnet/vnet_data.py:183
 #, fuzzy
 msgid "turntable layer"
 msgstr "输出的表名称"
 
-#: ../gui/wxpython/vnet/vnet_data.py:165
+#: ../gui/wxpython/vnet/vnet_data.py:184
 #, fuzzy
 msgid "unique categories layer"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:171
+#: ../gui/wxpython/vnet/vnet_data.py:190
 #, fuzzy, python-format
 msgid "Chosen %s '%s' does not exist in vector map '%s'.\n"
 msgstr "无法找到输入的矢量地图 %s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:174
+#: ../gui/wxpython/vnet/vnet_data.py:193
 #, fuzzy, python-format
 msgid "Choose existing %s.\n"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/vnet/vnet_data.py:184
+#: ../gui/wxpython/vnet/vnet_data.py:203
 #, fuzzy, python-format
 msgid ""
 "Chosen column '%s' does not exist in attribute table of layer '%s' of vector "
 "map '%s'.\n"
 msgstr "已有输入栅格文件大的名称"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259 ../gui/wxpython/gui_core/vselect.py:49
 #, fuzzy
 msgid "type"
 msgstr "未知的类型"
 
-#: ../gui/wxpython/vnet/vnet_data.py:238
+#: ../gui/wxpython/vnet/vnet_data.py:259
 #, fuzzy
 msgid "topology"
 msgstr "矢量文件读取错误"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239 ../gui/wxpython/vnet/vnet_data.py:702
+#: ../gui/wxpython/vnet/vnet_data.py:261 ../gui/wxpython/vnet/vnet_data.py:769
 #, fuzzy
 msgid "Start point"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:239
+#: ../gui/wxpython/vnet/vnet_data.py:261
 #, fuzzy
 msgid "End Point"
 msgstr "点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:508 ../gui/wxpython/vnet/vnet_data.py:517
-#: ../gui/wxpython/vnet/vnet_data.py:520
+#: ../gui/wxpython/vnet/vnet_data.py:560 ../gui/wxpython/vnet/vnet_data.py:569
+#: ../gui/wxpython/vnet/vnet_data.py:572
 #, fuzzy
 msgid "new point"
 msgstr "左:创建新点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:679
+#: ../gui/wxpython/vnet/vnet_data.py:746
 msgid "Arc forward/both direction(s) cost column:"
 msgstr "Arc前进/双向成本字段:"
 
-#: ../gui/wxpython/vnet/vnet_data.py:680
+#: ../gui/wxpython/vnet/vnet_data.py:747
 msgid "arc forward/both"
 msgstr "Arc前进/双向"
 
-#: ../gui/wxpython/vnet/vnet_data.py:683
+#: ../gui/wxpython/vnet/vnet_data.py:750
 msgid "Arc backward direction cost column:"
 msgstr "Arc后向成本字段"
 
-#: ../gui/wxpython/vnet/vnet_data.py:684
+#: ../gui/wxpython/vnet/vnet_data.py:751
 msgid "arc backward"
 msgstr "Arc后向"
 
-#: ../gui/wxpython/vnet/vnet_data.py:687
+#: ../gui/wxpython/vnet/vnet_data.py:754
 msgid "Arcs' cost column (for both directions):"
 msgstr "Arc成本字段(双向):"
 
-#: ../gui/wxpython/vnet/vnet_data.py:688
+#: ../gui/wxpython/vnet/vnet_data.py:755
 msgid "arc"
 msgstr "弧"
 
-#: ../gui/wxpython/vnet/vnet_data.py:692
+#: ../gui/wxpython/vnet/vnet_data.py:759
 #, fuzzy
 msgid "Node cost column:"
 msgstr "列数"
 
-#: ../gui/wxpython/vnet/vnet_data.py:693
+#: ../gui/wxpython/vnet/vnet_data.py:760
 msgid "node"
 msgstr "节点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:699
+#: ../gui/wxpython/vnet/vnet_data.py:766
 #, fuzzy, python-format
 msgid "Shortest path %s"
 msgstr "平滑转角"
 
-#: ../gui/wxpython/vnet/vnet_data.py:703
+#: ../gui/wxpython/vnet/vnet_data.py:770
 #, fuzzy
 msgid "End point"
 msgstr "点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:719
+#: ../gui/wxpython/vnet/vnet_data.py:786
 #, python-format
 msgid "Traveling salesman %s"
 msgstr "旅游销售员%s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:735
+#: ../gui/wxpython/vnet/vnet_data.py:802
 #, python-format
 msgid "Maximum flow %s"
 msgstr "最大流量%s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:738
+#: ../gui/wxpython/vnet/vnet_data.py:805
 #, fuzzy
 msgid "Source point"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/vnet/vnet_data.py:739
+#: ../gui/wxpython/vnet/vnet_data.py:806
 #, fuzzy
 msgid "Sink point"
 msgstr "点"
 
-#: ../gui/wxpython/vnet/vnet_data.py:754
+#: ../gui/wxpython/vnet/vnet_data.py:821
 #, python-format
 msgid "Subnets for nearest centers %s"
 msgstr "最近中心点%s的子网"
 
-#: ../gui/wxpython/vnet/vnet_data.py:770
+#: ../gui/wxpython/vnet/vnet_data.py:837
 #, python-format
 msgid "Steiner tree for the network and given terminals %s"
 msgstr "网络中的斯坦纳(Steiner)树及指定终端%s"
 
-#: ../gui/wxpython/vnet/vnet_data.py:784
+#: ../gui/wxpython/vnet/vnet_data.py:851
 #, fuzzy, python-format
 msgid "Shortest distance via the network %s"
 msgstr "点到网络的最小距离"
 
-#: ../gui/wxpython/vnet/vnet_data.py:803
+#: ../gui/wxpython/vnet/vnet_data.py:870
 #, fuzzy, python-format
 msgid "Cost isolines %s"
 msgstr "无法打开像元文件 [%s]"
 
-#: ../gui/wxpython/vnet/vnet_data.py:889
+#: ../gui/wxpython/vnet/vnet_data.py:960
 #, fuzzy
 msgid "Overwrite map layer"
 msgstr "覆盖已有的输出地图文件"
 
-#: ../gui/wxpython/vnet/dialogs.py:67
+#: ../gui/wxpython/vnet/dialogs.py:69
 msgid "GRASS GIS Vector Network Analysis Tool"
 msgstr "GRASS GIS矢量网络分析工具"
 
-#: ../gui/wxpython/vnet/dialogs.py:165
+#: ../gui/wxpython/vnet/dialogs.py:186
 #, fuzzy
 msgid "Point list toolbar"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/vnet/dialogs.py:172
+#: ../gui/wxpython/vnet/dialogs.py:193
 #, fuzzy
 msgid "Analysis toolbar"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/vnet/dialogs.py:205
+#: ../gui/wxpython/vnet/dialogs.py:227
 #, fuzzy
 msgid "Points for analysis:"
 msgstr "网络分析"
 
-#: ../gui/wxpython/vnet/dialogs.py:208
+#: ../gui/wxpython/vnet/dialogs.py:230
 #, fuzzy
 msgid "Analysis settings:"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/vnet/dialogs.py:212
+#: ../gui/wxpython/vnet/dialogs.py:234
 #, fuzzy
 msgid "Points"
 msgstr "点"
 
-#: ../gui/wxpython/vnet/dialogs.py:222
+#: ../gui/wxpython/vnet/dialogs.py:247
 #, fuzzy
 msgid "Maximum distance of point to the network:"
 msgstr "点到网络的最小距离"
 
-#: ../gui/wxpython/vnet/dialogs.py:234
+#: ../gui/wxpython/vnet/dialogs.py:264
 #, fuzzy
 msgid "Iso lines:"
 msgstr "线"
 
-#: ../gui/wxpython/vnet/dialogs.py:300
-#: ../gui/wxpython/modules/mcalc_builder.py:125
-#: ../gui/wxpython/modules/vkrige.py:113
+#: ../gui/wxpython/vnet/dialogs.py:344
+#: ../gui/wxpython/modules/mcalc_builder.py:134
+#: ../gui/wxpython/modules/vkrige.py:153
 msgid "Output"
 msgstr "输出"
 
-#: ../gui/wxpython/vnet/dialogs.py:317
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/vnet/dialogs.py:361
+#: ../gui/wxpython/location_wizard/wizard.py:1450
+#: ../gui/wxpython/location_wizard/wizard.py:1678
 msgid "Parameters"
 msgstr "参数:"
 
-#: ../gui/wxpython/vnet/dialogs.py:352
+#: ../gui/wxpython/vnet/dialogs.py:403
 #, fuzzy
 msgid "Add vector map into layer tree"
 msgstr "将创建的地图加入层列表"
 
-#: ../gui/wxpython/vnet/dialogs.py:467
+#: ../gui/wxpython/vnet/dialogs.py:523
 #, fuzzy
 msgid "Input tables"
 msgstr "输入的表的名称"
 
-#: ../gui/wxpython/vnet/dialogs.py:493
+#: ../gui/wxpython/vnet/dialogs.py:551
 #, fuzzy
 msgid "Result tables"
 msgstr "结果图的名称"
 
-#: ../gui/wxpython/vnet/dialogs.py:505
+#: ../gui/wxpython/vnet/dialogs.py:564
 #, fuzzy
 msgid "Loading tables..."
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/vnet/dialogs.py:641
+#: ../gui/wxpython/vnet/dialogs.py:700
 #, fuzzy
 msgid "Creating turntable..."
 msgstr "为 %s 创建支持文件"
 
-#: ../gui/wxpython/vnet/dialogs.py:796
+#: ../gui/wxpython/vnet/dialogs.py:865
 #, fuzzy
 msgid "Input vector map does not exist."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/vnet/dialogs.py:814
+#: ../gui/wxpython/vnet/dialogs.py:888
 #, fuzzy
 msgid "Analysing..."
 msgstr "分析"
 
-#: ../gui/wxpython/vnet/dialogs.py:870 ../gui/wxpython/gui_core/widgets.py:1039
-#: ../gui/wxpython/gui_core/toolbars.py:84 ../gui/wxpython/nviz/tools.py:1898
-#: ../gui/wxpython/iscatt/toolbars.py:44 ../gui/wxpython/iscatt/toolbars.py:135
+#: ../gui/wxpython/vnet/dialogs.py:944 ../gui/wxpython/gui_core/toolbars.py:84
+#: ../gui/wxpython/nviz/tools.py:2271 ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:146
 msgid "Settings"
 msgstr "设置"
 
-#: ../gui/wxpython/vnet/dialogs.py:937
+#: ../gui/wxpython/vnet/dialogs.py:1011
 #, fuzzy
 msgid "Computing nodes..."
 msgstr "导入地图 %d 的要素..."
 
-#: ../gui/wxpython/vnet/dialogs.py:1127
+#: ../gui/wxpython/vnet/dialogs.py:1209
 #, fuzzy
 msgid "Other settings"
 msgstr "打开设置"
 
-#: ../gui/wxpython/vnet/dialogs.py:1130
+#: ../gui/wxpython/vnet/dialogs.py:1212
 #, fuzzy
 msgid "Point style:"
 msgstr "要素类型"
 
-#: ../gui/wxpython/vnet/dialogs.py:1133
+#: ../gui/wxpython/vnet/dialogs.py:1215
 msgid "Analysis result style:"
 msgstr "分析结果样式:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1143
+#: ../gui/wxpython/vnet/dialogs.py:1227
 #, fuzzy, python-format
 msgid "Color table style %s:"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/vnet/dialogs.py:1154
+#: ../gui/wxpython/vnet/dialogs.py:1244
 #, fuzzy, python-format
 msgid "Invert colors %s:"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/vnet/dialogs.py:1159
+#: ../gui/wxpython/vnet/dialogs.py:1255
 #, fuzzy
 msgid "Line color:"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/vnet/dialogs.py:1160
+#: ../gui/wxpython/vnet/dialogs.py:1258
 #, fuzzy
 msgid "Color for unused point:"
 msgstr "[%s] 的色彩表已更新。"
 
-#: ../gui/wxpython/vnet/dialogs.py:1161
+#: ../gui/wxpython/vnet/dialogs.py:1261
 msgid "Color for Start/From/Source/Used point:"
 msgstr "选择起点/始发点/源点/经过点颜色:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1162
+#: ../gui/wxpython/vnet/dialogs.py:1264
 msgid "Color for End/To/Sink point:"
 msgstr "选择终点/目的点/交汇点颜色:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1163
+#: ../gui/wxpython/vnet/dialogs.py:1267
 #, fuzzy
 msgid "Color for selected point:"
 msgstr "%d 条记录被更新"
 
-#: ../gui/wxpython/vnet/dialogs.py:1177
+#: ../gui/wxpython/vnet/dialogs.py:1279
 #, fuzzy
 msgid "Point size:"
 msgstr "点数据集:"
 
-#: ../gui/wxpython/vnet/dialogs.py:1178
+#: ../gui/wxpython/vnet/dialogs.py:1280
 #, fuzzy
 msgid "Point width:"
 msgstr "% 宽度"
 
-#: ../gui/wxpython/vnet/dialogs.py:1179 ../gui/wxpython/iscatt/dialogs.py:338
+#: ../gui/wxpython/vnet/dialogs.py:1281 ../gui/wxpython/iscatt/dialogs.py:371
 #, fuzzy
 msgid "Snapping treshold in pixels:"
 msgstr "边界的捕捉容限。 -1 表示不捕捉"
 
-#: ../gui/wxpython/vnet/dialogs.py:1180
+#: ../gui/wxpython/vnet/dialogs.py:1282
 #, fuzzy
 msgid "Maximum number of results in history:"
 msgstr "一个片断最多所能包含的点数"
 
-#: ../gui/wxpython/vnet/dialogs.py:1328
+#: ../gui/wxpython/vnet/dialogs.py:1480
 #, fuzzy
 msgid "New vector map with turntable"
 msgstr "输出的矢量文件的名称"
 
-#: ../gui/wxpython/vnet/dialogs.py:1467
+#: ../gui/wxpython/vnet/dialogs.py:1626
 #, fuzzy
 msgid "Save analysis result"
 msgstr "保存并关闭"
 
-#: ../gui/wxpython/vnet/dialogs.py:1578
+#: ../gui/wxpython/vnet/dialogs.py:1742
 msgid "Edit intersection turns costs"
 msgstr "编辑:交叉口转弯成本"
 
-#: ../gui/wxpython/vnet/dialogs.py:1610
+#: ../gui/wxpython/vnet/dialogs.py:1785
 msgid "Define Global Turn Costs"
 msgstr "定义全局转弯成本"
 
-#: ../gui/wxpython/vnet/toolbars.py:50
+#: ../gui/wxpython/vnet/toolbars.py:52
 #, fuzzy
 msgid "Insert points from Map Display"
 msgstr "显示文本"
 
-#: ../gui/wxpython/vnet/toolbars.py:52
+#: ../gui/wxpython/vnet/toolbars.py:55
 msgid "Activate snapping to nodes"
 msgstr "激活节点对齐"
 
-#: ../gui/wxpython/vnet/toolbars.py:54
+#: ../gui/wxpython/vnet/toolbars.py:58
 msgid "Activate mode for turns editing"
 msgstr "激活转弯编辑模式"
 
-#: ../gui/wxpython/vnet/toolbars.py:56
+#: ../gui/wxpython/vnet/toolbars.py:61
 msgid "Activate mode for global turns editing"
 msgstr "激活全局转弯编辑模式"
 
-#: ../gui/wxpython/vnet/toolbars.py:58
+#: ../gui/wxpython/vnet/toolbars.py:64
 #, fuzzy
 msgid "Add new point"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/vnet/toolbars.py:60
+#: ../gui/wxpython/vnet/toolbars.py:67
 #, fuzzy
 msgid "Delete selected point"
 msgstr "删除选定地点"
 
-#: ../gui/wxpython/vnet/toolbars.py:110
+#: ../gui/wxpython/vnet/toolbars.py:120
 #, fuzzy
 msgid "Execute analysis"
 msgstr "地形分析"
 
-#: ../gui/wxpython/vnet/toolbars.py:112
+#: ../gui/wxpython/vnet/toolbars.py:123
 msgid "Go to previous analysis result"
 msgstr "返回上一个分析结果"
 
-#: ../gui/wxpython/vnet/toolbars.py:114
+#: ../gui/wxpython/vnet/toolbars.py:126
 msgid "Go to next analysis result"
 msgstr "进入下一分析结果"
 
-#: ../gui/wxpython/vnet/toolbars.py:116
+#: ../gui/wxpython/vnet/toolbars.py:129
 msgid "Show analysis result"
 msgstr "显示分析结果"
 
-#: ../gui/wxpython/vnet/toolbars.py:118
+#: ../gui/wxpython/vnet/toolbars.py:132
 #, fuzzy
 msgid "Save temporary result"
 msgstr "结果图的名称"
 
-#: ../gui/wxpython/vnet/toolbars.py:119
+#: ../gui/wxpython/vnet/toolbars.py:134
 #, fuzzy
 msgid "Vector network analysis settings"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/vnet/toolbars.py:121 ../gui/wxpython/gui_core/toolbars.py:71
-#: ../gui/wxpython/iscatt/toolbars.py:46
+#: ../gui/wxpython/vnet/toolbars.py:137 ../gui/wxpython/gui_core/toolbars.py:71
+#: ../gui/wxpython/iscatt/toolbars.py:51
 msgid "Show manual"
 msgstr "显示手册"
 
-#: ../gui/wxpython/vnet/toolbars.py:184
+#: ../gui/wxpython/vnet/toolbars.py:206
 #, fuzzy
 msgid "Availiable analyses"
 msgstr "列出可用的格式并退出"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:402
+#: ../gui/wxpython/mapdisp/statusbar.py:418
 msgid "Render"
 msgstr "渲染"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:406
+#: ../gui/wxpython/mapdisp/statusbar.py:422
 msgid "Enable/disable auto-rendering"
 msgstr "激活/禁用自动渲染"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:436
+#: ../gui/wxpython/mapdisp/statusbar.py:454
 msgid "Show comp. extent"
 msgstr "显示计算范围"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:440
+#: ../gui/wxpython/mapdisp/statusbar.py:458
 msgid "Show computational extent"
 msgstr "显示计算范围"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:443
+#: ../gui/wxpython/mapdisp/statusbar.py:464
 msgid ""
 "Show/hide computational region extent (set with g.region). Display region "
 "drawn as a blue box inside the computational region, computational region "
 "inside a display region as a red box)."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:492
+#: ../gui/wxpython/mapdisp/statusbar.py:515
 msgid "Display mode"
 msgstr "显示模式"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:496
-#: ../gui/wxpython/gui_core/preferences.py:674
+#: ../gui/wxpython/mapdisp/statusbar.py:520
+#: ../gui/wxpython/gui_core/preferences.py:880
 msgid "Align region extent based on display size"
 msgstr "根据显示区大小对齐区域范围"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:499
+#: ../gui/wxpython/mapdisp/statusbar.py:526
 msgid ""
 "Align region extent based on display size from center point. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:532
+#: ../gui/wxpython/mapdisp/statusbar.py:560
 msgid "Display resolution"
 msgstr "显示分辨率"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:535
-#: ../gui/wxpython/gui_core/preferences.py:687
+#: ../gui/wxpython/mapdisp/statusbar.py:563
+#: ../gui/wxpython/gui_core/preferences.py:896
 msgid "Constrain display resolution to computational settings"
 msgstr "根据计算性能设置显示分辨率"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:538
+#: ../gui/wxpython/mapdisp/statusbar.py:569
 msgid ""
 "Constrain display resolution to computational region settings. Default value "
 "for new map displays can be set up in 'User GUI settings' dialog."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:575
+#: ../gui/wxpython/mapdisp/statusbar.py:607
 msgid "Map scale"
 msgstr "地图比例"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:589
+#: ../gui/wxpython/mapdisp/statusbar.py:624
 msgid ""
 "As everyone's monitors and resolutions are set differently these values are "
 "not true map scales, but should get you into the right neighborhood."
@@ -6929,91 +7295,91 @@ msgstr ""
 "由于不同显示器的分辨率有差异,这些值并非真实的地图比例,但该值应该能够显示合"
 "适的区域。"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:642
+#: ../gui/wxpython/mapdisp/statusbar.py:677
 msgid "Go to"
 msgstr "转到"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:663
-#: ../gui/wxpython/mapdisp/statusbar.py:727
-#: ../gui/wxpython/mapdisp/statusbar.py:934
-#: ../gui/wxpython/mapdisp/statusbar.py:1001
+#: ../gui/wxpython/mapdisp/statusbar.py:700
+#: ../gui/wxpython/mapdisp/statusbar.py:770
+#: ../gui/wxpython/mapdisp/statusbar.py:1009
+#: ../gui/wxpython/mapdisp/statusbar.py:1084
 msgid "Projection not defined (check the settings)"
 msgstr "投影未定义(检查设置)"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:741
-#: ../gui/wxpython/mapdisp/statusbar.py:947
-#: ../gui/wxpython/mapdisp/statusbar.py:1031
+#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:1024
+#: ../gui/wxpython/mapdisp/statusbar.py:1125
 #, fuzzy
 msgid "Error in projection (check the settings)"
 msgstr "为 [%s] 读取范围时发生错误"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:773
-#: ../gui/wxpython/gui_core/preferences.py:1195
+#: ../gui/wxpython/mapdisp/statusbar.py:824
+#: ../gui/wxpython/gui_core/preferences.py:1629
 msgid "Projection"
 msgstr "投影"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:775
+#: ../gui/wxpython/mapdisp/statusbar.py:826
 #, fuzzy
 msgid "Use defined projection"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:787
+#: ../gui/wxpython/mapdisp/statusbar.py:841
 msgid ""
 "Reproject coordinates displayed in the statusbar. Projection can be defined "
 "in GUI preferences dialog (tab 'Projection')"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/statusbar.py:812
+#: ../gui/wxpython/mapdisp/statusbar.py:873
 msgid "MASK"
 msgstr "掩码"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:856
+#: ../gui/wxpython/mapdisp/statusbar.py:921
 msgid "Display geometry"
 msgstr "显示几何形状"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:878
+#: ../gui/wxpython/mapdisp/statusbar.py:947
 msgid "Coordinates"
 msgstr "坐标"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:959
+#: ../gui/wxpython/mapdisp/statusbar.py:1039
 msgid "Extent"
 msgstr "范围"
 
-#: ../gui/wxpython/mapdisp/statusbar.py:1055
-#: ../gui/wxpython/web_services/dialogs.py:822
+#: ../gui/wxpython/mapdisp/statusbar.py:1152
+#: ../gui/wxpython/web_services/dialogs.py:873
 msgid "Computational region"
 msgstr "可计算区域"
 
-#: ../gui/wxpython/mapdisp/frame.py:68
+#: ../gui/wxpython/mapdisp/frame.py:70
 msgid "GRASS GIS - Map display"
 msgstr "GRASS GIS - 地图显示"
 
-#: ../gui/wxpython/mapdisp/frame.py:249 ../gui/wxpython/lmgr/frame.py:95
-#: ../gui/wxpython/lmgr/frame.py:1077 ../gui/wxpython/gui_core/ghelp.py:101
-#: ../gui/wxpython/gui_core/ghelp.py:837
+#: ../gui/wxpython/mapdisp/frame.py:266 ../gui/wxpython/lmgr/frame.py:99
+#: ../gui/wxpython/lmgr/frame.py:1193 ../gui/wxpython/gui_core/ghelp.py:113
+#: ../gui/wxpython/gui_core/ghelp.py:913
 #, fuzzy
 msgid "Unable to get GRASS version\n"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:253
+#: ../gui/wxpython/mapdisp/frame.py:270
 #, fuzzy, python-format
 msgid ""
 "GRASS GIS %(version)s Map Display: %(id)s - Location: %(loc)s@%(mapset)s"
 msgstr "GRASS GIS %(version)s 地图显示: %(id)s  - 地图: %(loc)s@%(mapset)s"
 
-#: ../gui/wxpython/mapdisp/frame.py:272 ../gui/wxpython/lmgr/layertree.py:908
+#: ../gui/wxpython/mapdisp/frame.py:289 ../gui/wxpython/lmgr/layertree.py:1148
 #, fuzzy, python-format
 msgid ""
 "Unable to start wxGUI vector digitizer.\n"
 "Details: %s"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/mapdisp/frame.py:310
+#: ../gui/wxpython/mapdisp/frame.py:327
 #, fuzzy
 msgid "Vector Digitizer Toolbar"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/mapdisp/frame.py:331
+#: ../gui/wxpython/mapdisp/frame.py:350
 #, python-format
 msgid ""
 "Unable to switch to 3D display mode.\n"
@@ -7023,111 +7389,118 @@ msgid ""
 "Details: %s"
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:357
+#: ../gui/wxpython/mapdisp/frame.py:385
 #, fuzzy
 msgid "Starting 3D view mode..."
 msgstr "写入新文件...\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:358
+#: ../gui/wxpython/mapdisp/frame.py:387
 msgid "Please wait, loading data..."
 msgstr "数据装载中,请稍候..."
 
-#: ../gui/wxpython/mapdisp/frame.py:430
+#: ../gui/wxpython/mapdisp/frame.py:467
 #, fuzzy
 msgid "Please wait, unloading data..."
 msgstr "请稍候,属性数据加载中..."
 
-#: ../gui/wxpython/mapdisp/frame.py:432
+#: ../gui/wxpython/mapdisp/frame.py:469
 #, fuzzy
 msgid "Switching back to 2D view mode..."
 msgstr "切换到2D显示模式"
 
-#: ../gui/wxpython/mapdisp/frame.py:482 ../gui/wxpython/mapdisp/toolbars.py:99
-msgid "Digitize"
-msgstr "数字化"
+#: ../gui/wxpython/mapdisp/frame.py:601 ../gui/wxpython/lmgr/frame.py:2469
+#: ../gui/wxpython/gui_core/vselect.py:277
+#, fuzzy
+msgid "No map layer selected. Operation canceled."
+msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/mapdisp/frame.py:658
+#: ../gui/wxpython/mapdisp/frame.py:720
 msgid "d.to.rast can be used only in 2D mode."
 msgstr "d.to.rast仅可在二维模式下使用。"
 
-#: ../gui/wxpython/mapdisp/frame.py:682 ../gui/wxpython/mapdisp/frame.py:690
-#: ../gui/wxpython/mapdisp/frame.py:701
+#: ../gui/wxpython/mapdisp/frame.py:745 ../gui/wxpython/mapdisp/frame.py:753
+#: ../gui/wxpython/mapdisp/frame.py:774
 msgid "Failed to run d.to.rast:\n"
 msgstr "运行d.to.rast失败:\n"
 
-#: ../gui/wxpython/mapdisp/frame.py:817
+#: ../gui/wxpython/mapdisp/frame.py:897
 #, fuzzy, python-format
 msgid "Vector map <%s> opened for editing - skipped."
 msgstr "输入的 2D 矢量地图的名称"
 
-#: ../gui/wxpython/mapdisp/frame.py:878
+#: ../gui/wxpython/mapdisp/frame.py:968
 #, python-brace-format
 msgid ""
 "Failed to query vector map(s) <{maps}>. Check database settings and topology."
 msgstr ""
 
-#: ../gui/wxpython/mapdisp/frame.py:1253 ../gui/wxpython/mapdisp/toolbars.py:49
+#: ../gui/wxpython/mapdisp/frame.py:1350 ../gui/wxpython/mapdisp/toolbars.py:52
 msgid "Add text layer"
 msgstr "添加文本层"
 
-#: ../gui/wxpython/mapdisp/frame.py:1357
+#: ../gui/wxpython/mapdisp/frame.py:1462
 #, fuzzy
 msgid "Set computational region extent from display"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/mapdisp/frame.py:1358
+#: ../gui/wxpython/mapdisp/frame.py:1464
 #, fuzzy
 msgid "Set computational region extent interactively"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/mapdisp/frame.py:1359
+#: ../gui/wxpython/mapdisp/frame.py:1466
 #, fuzzy
 msgid "Set computational region from named region"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/mapdisp/frame.py:1362
+#: ../gui/wxpython/mapdisp/frame.py:1471
 #, fuzzy
 msgid "Save computational region to named region"
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:88
-#: ../gui/wxpython/gui_core/mapdisp.py:114 ../gui/wxpython/core/render.py:449
+#: ../gui/wxpython/mapdisp/frame.py:1604
+#, fuzzy
+msgid "Raster Digitizer Toolbar"
+msgstr "矢量地图 %s - 未发现"
+
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:89
+#: ../gui/wxpython/gui_core/mapdisp.py:133 ../gui/wxpython/core/render.py:709
 #, python-format
 msgid "GRASS module '%s' not found. Unable to start map display window."
 msgstr "没有找到GRASS模块'%s',无法启动地图显示窗口。"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:129
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:147
 #, fuzzy
 msgid "Map window test frame"
 msgstr "地图层"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:148
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:166
 #, fuzzy
 msgid "Map display test"
 msgstr "显示文本"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:157
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:176
 msgid "Map window API test frame"
 msgstr "地图窗口API测试框架"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:187
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:206
 msgid "Map window distance measurement test frame"
 msgstr "地图窗口距离测量测试框架"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:218
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:237
 msgid "Map window profile tool test frame"
 msgstr "地图窗口轮廓工具测试框架"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:265
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:284
 msgid "Map window rlisetup test frame"
 msgstr "地图窗口rli设置测试框架"
 
-#: ../gui/wxpython/mapdisp/test_mapdisp.py:326
+#: ../gui/wxpython/mapdisp/test_mapdisp.py:345
 #, python-format
 msgid "Unknown value %s of test parameter."
 msgstr "测试参数%s的值未知。"
 
-#: ../gui/wxpython/mapdisp/gprint.py:150
+#: ../gui/wxpython/mapdisp/gprint.py:154
 msgid ""
 "There was a problem printing.\n"
 "Perhaps your current printer is not set correctly?"
@@ -7135,124 +7508,139 @@ msgstr ""
 "打印时出现问题。\n"
 "可能是您的打印机设置不正确?"
 
-#: ../gui/wxpython/mapdisp/main.py:143
+#: ../gui/wxpython/mapdisp/main.py:171
 #, fuzzy, python-format
 msgid "Unsupported command %s."
 msgstr "未知的类型"
 
-#: ../gui/wxpython/mapdisp/main.py:205
+#: ../gui/wxpython/mapdisp/main.py:257
 #, fuzzy, python-format
 msgid "Unable to read cmdfile '%(cmd)s'. Details: %(det)s"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/mapdisp/main.py:448
+#: ../gui/wxpython/mapdisp/main.py:564
 #, fuzzy, python-format
 msgid "Starting map display <%s>..."
 msgstr "创建新地图"
 
-#: ../gui/wxpython/mapdisp/main.py:459
+#: ../gui/wxpython/mapdisp/main.py:570
+#, fuzzy, python-format
+msgid "Unable to create file <%s>"
+msgstr "无法创建栅格地图 %s"
+
+#: ../gui/wxpython/mapdisp/main.py:586
 #, fuzzy, python-format
 msgid "Stopping map display <%s>..."
 msgstr "非法的输出文件名"
 
 #: ../gui/wxpython/mapdisp/toolbars.py:32
 #, fuzzy
+msgid "Select vector feature(s)"
+msgstr "无法打开输入的dig文件。"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:33
+#, fuzzy
+msgid "Select features interactively from vector map"
+msgstr "无法插入新行:%s"
+
+#: ../gui/wxpython/mapdisp/toolbars.py:35
+#, fuzzy
 msgid "Show/hide scale bar"
 msgstr "添加格网值图层"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:34
+#: ../gui/wxpython/mapdisp/toolbars.py:37
 #, fuzzy
 msgid "Show/hide legend"
 msgstr "将要导入的二进制栅格文件"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:36
+#: ../gui/wxpython/mapdisp/toolbars.py:39
 #, fuzzy
 msgid "Show/hide north arrow"
 msgstr "添加比例尺和指北针"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:38
+#: ../gui/wxpython/mapdisp/toolbars.py:41
 msgid "Analyze map"
 msgstr "分析地图"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:39
+#: ../gui/wxpython/mapdisp/toolbars.py:42
 msgid "Measuring, profiling, histogramming, ..."
 msgstr "测量,概括,绘制直方图,..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:41
+#: ../gui/wxpython/mapdisp/toolbars.py:44
 msgid "Measure distance"
 msgstr "测量距离"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:43
+#: ../gui/wxpython/mapdisp/toolbars.py:46
 #, fuzzy
 msgid "Measure area"
 msgstr "测量距离"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:45
+#: ../gui/wxpython/mapdisp/toolbars.py:48
 msgid "Profile surface map"
 msgstr "表面图概括"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:47
+#: ../gui/wxpython/mapdisp/toolbars.py:50
 #, fuzzy
 msgid "Create bivariate scatterplot of raster maps"
 msgstr "创建图像或栅格文件的直方图"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:51
+#: ../gui/wxpython/mapdisp/toolbars.py:54
 #, fuzzy
 msgid "Create histogram of raster map"
 msgstr "创建图像或栅格文件的直方图"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:53 ../gui/wxpython/menustrings.py:630
+#: ../gui/wxpython/mapdisp/toolbars.py:56 ../gui/wxpython/menustrings.py:630
 #: ../gui/wxpython/menustrings.py:1537
 #, fuzzy
 msgid "Vector network analysis tool"
 msgstr "网络分析"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:58
+#: ../gui/wxpython/mapdisp/toolbars.py:62
 msgid "Rotate 3D scene"
 msgstr "旋转三维场景"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:59
+#: ../gui/wxpython/mapdisp/toolbars.py:63
 #, fuzzy
 msgid "Drag with mouse to rotate 3D scene"
 msgstr "用鼠标拖动平移"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:61
-#: ../gui/wxpython/nviz/preferences.py:209
+#: ../gui/wxpython/mapdisp/toolbars.py:66
+#: ../gui/wxpython/nviz/preferences.py:240
 msgid "Fly-through mode"
 msgstr "飞越模式"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:62
+#: ../gui/wxpython/mapdisp/toolbars.py:68
 msgid ""
 "Drag with mouse, hold Ctrl down for different mode or Shift to accelerate"
 msgstr "使用鼠标绘制,按键盘Ctrl键可选择模式,Shift键可加速"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:64
+#: ../gui/wxpython/mapdisp/toolbars.py:71
 #, fuzzy
 msgid "Click mouse to zoom"
 msgstr "拖动或点击鼠标放大"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:65
+#: ../gui/wxpython/mapdisp/toolbars.py:73
 #, fuzzy
 msgid "Click mouse to unzoom"
 msgstr "拖动或点击鼠标缩小"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:93
+#: ../gui/wxpython/mapdisp/toolbars.py:108
 #, fuzzy
 msgid "3D view mode not available"
 msgstr "[%s] 的类别文件无效"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:94
-#: ../gui/wxpython/mapdisp/toolbars.py:108
+#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:121
 #, fuzzy, python-format
 msgid "Reason: %s"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/mapdisp/toolbars.py:107
+#: ../gui/wxpython/mapdisp/toolbars.py:120
 #, fuzzy
 msgid "Vector digitizer not available"
 msgstr "矢量文件 [%s] 不可用"
 
-#: ../gui/wxpython/mapdisp/toolbars.py:109
+#: ../gui/wxpython/mapdisp/toolbars.py:124
 msgid ""
 "Note that the wxGUI's vector digitizer is currently disabled (hopefully this "
 "will be fixed soon). Please keep an eye out for updated versions of GRASS. "
@@ -7261,137 +7649,142 @@ msgstr ""
 "wxGUI适量数字化暂不可用(希望能尽快恢复),请随时检查GRASS更新版本。目前您可以"
 "从建立矢量地图菜单下使用\"v.digit\" 。"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:205
-#: ../gui/wxpython/rlisetup/sampling_frame.py:308
+#: ../gui/wxpython/mapdisp/toolbars.py:131
+#, fuzzy
+msgid "Raster digitizer"
+msgstr "矢量地图 %s - 未发现"
+
+#: ../gui/wxpython/rlisetup/sampling_frame.py:217
+#: ../gui/wxpython/rlisetup/sampling_frame.py:326
 #, fuzzy, python-format
 msgid "The raster file %s already exists, please change name"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:229
+#: ../gui/wxpython/rlisetup/sampling_frame.py:243
 msgid "Raster map not created. Please redraw region."
 msgstr "未生成栅格图。请重新绘制区域。"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:330
+#: ../gui/wxpython/rlisetup/sampling_frame.py:349
 msgid "Raster map not created. redraw region again."
 msgstr "未生成栅格图。请重新绘制区域。"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:382
-#: ../gui/wxpython/rlisetup/wizard.py:751
+#: ../gui/wxpython/rlisetup/sampling_frame.py:403
+#: ../gui/wxpython/rlisetup/wizard.py:818
 #, fuzzy
 msgid "Draw sampling frame"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:383
+#: ../gui/wxpython/rlisetup/sampling_frame.py:404
 msgid "Draw sampling frame by clicking and dragging"
 msgstr "通过点击拖动绘制取样框架"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:385
+#: ../gui/wxpython/rlisetup/sampling_frame.py:407
 #, fuzzy
 msgid "Draw sampling rectangle"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:386
+#: ../gui/wxpython/rlisetup/sampling_frame.py:408
 msgid "Draw sampling rectangle by clicking and dragging"
 msgstr "通过点击拖动绘制取样块"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:388
+#: ../gui/wxpython/rlisetup/sampling_frame.py:411
 #, fuzzy
 msgid "Draw sampling circle"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:389
+#: ../gui/wxpython/rlisetup/sampling_frame.py:412
 msgid "Draw sampling circle radius by clicking and dragging"
 msgstr "通过点击拖动绘制圆形取样区域"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:391
-#: ../gui/wxpython/rlisetup/wizard.py:1053
-#: ../gui/wxpython/rlisetup/wizard.py:1402
+#: ../gui/wxpython/rlisetup/sampling_frame.py:415
+#: ../gui/wxpython/rlisetup/wizard.py:1129
+#: ../gui/wxpython/rlisetup/wizard.py:1490
 #, fuzzy
 msgid "Draw sampling region"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/sampling_frame.py:392
+#: ../gui/wxpython/rlisetup/sampling_frame.py:416
 msgid "Draw sampling region by polygon. Right Double click to end drawing"
 msgstr "绘制多边形取样区域。点击右键结束。"
 
-#: ../gui/wxpython/rlisetup/frame.py:22
+#: ../gui/wxpython/rlisetup/frame.py:23
 #, fuzzy
 msgid "Modify the configuration file"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/frame.py:35
+#: ../gui/wxpython/rlisetup/frame.py:37
 #, fuzzy, python-brace-format
 msgid "View and modify the configuration file '{name}'"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/frame.py:84
+#: ../gui/wxpython/rlisetup/frame.py:89
 #, python-brace-format
 msgid ""
 "Are you sure that you want modify r.li configuration file {name}?\n"
 "You could broke the configuration file..."
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/frame.py:88
+#: ../gui/wxpython/rlisetup/frame.py:94
 msgid "WARNING"
 msgstr "警告"
 
-#: ../gui/wxpython/rlisetup/frame.py:105
+#: ../gui/wxpython/rlisetup/frame.py:114
 msgid "GRASS GIS Setup for r.li modules"
 msgstr "GRASS GIS r.li模块设置"
 
-#: ../gui/wxpython/rlisetup/frame.py:122
+#: ../gui/wxpython/rlisetup/frame.py:132
 #, fuzzy
 msgid "Available sampling area configuration files"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/frame.py:131
+#: ../gui/wxpython/rlisetup/frame.py:141
 msgid "Remove a configuration file"
 msgstr "删除配置文件"
 
-#: ../gui/wxpython/rlisetup/frame.py:133 ../gui/wxpython/menustrings.py:915
+#: ../gui/wxpython/rlisetup/frame.py:143 ../gui/wxpython/menustrings.py:915
 #: ../gui/wxpython/menustrings.py:1822
 msgid "Create"
 msgstr "新建"
 
-#: ../gui/wxpython/rlisetup/frame.py:134
+#: ../gui/wxpython/rlisetup/frame.py:144
 msgid "Create a new configuration file"
 msgstr "创建新配置文件"
 
-#: ../gui/wxpython/rlisetup/frame.py:136 ../gui/wxpython/lmgr/layertree.py:425
+#: ../gui/wxpython/rlisetup/frame.py:146 ../gui/wxpython/lmgr/layertree.py:451
 #: ../gui/wxpython/menustrings.py:170 ../gui/wxpython/menustrings.py:917
 #: ../gui/wxpython/menustrings.py:1157 ../gui/wxpython/menustrings.py:1824
 msgid "Rename"
 msgstr "重命名"
 
-#: ../gui/wxpython/rlisetup/frame.py:137
+#: ../gui/wxpython/rlisetup/frame.py:147
 msgid "Rename a configuration file"
 msgstr "重命名配置文件"
 
-#: ../gui/wxpython/rlisetup/frame.py:139
+#: ../gui/wxpython/rlisetup/frame.py:149
 msgid "View/Edit"
 msgstr "查看/编辑"
 
-#: ../gui/wxpython/rlisetup/frame.py:140
+#: ../gui/wxpython/rlisetup/frame.py:150
 #, fuzzy
 msgid "View and edit a configuration file"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/frame.py:213
+#: ../gui/wxpython/rlisetup/frame.py:225
 #, fuzzy, python-format
 msgid "Do you want remove r.li configuration file <%s>?"
 msgstr "创建GRASS地点<%s>?"
 
-#: ../gui/wxpython/rlisetup/frame.py:215
+#: ../gui/wxpython/rlisetup/frame.py:228
 #, fuzzy
 msgid "Remove new r.li configuration file?"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/frame.py:238 ../gui/wxpython/rlisetup/frame.py:258
+#: ../gui/wxpython/rlisetup/frame.py:251 ../gui/wxpython/rlisetup/frame.py:271
 #, fuzzy
 msgid "You have to select a configuration file"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/frame.py:241
+#: ../gui/wxpython/rlisetup/frame.py:254
 #, python-format
 msgid ""
 "Set the new name for %s \"                                            "
@@ -7399,7 +7792,7 @@ msgid ""
 msgstr ""
 "为设置文件%s \"                                            \" 设定新名称"
 
-#: ../gui/wxpython/rlisetup/frame.py:243
+#: ../gui/wxpython/rlisetup/frame.py:256
 #, fuzzy
 msgid "Rename configuration file"
 msgstr "非法的输出文件名"
@@ -7409,337 +7802,337 @@ msgstr "非法的输出文件名"
 msgid "Create new configuration file for r.li modules"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/wizard.py:116
+#: ../gui/wxpython/rlisetup/wizard.py:118
 #, fuzzy, python-format
 msgid "Do you want to create r.li configuration file <%s>?"
 msgstr "创建GRASS地点<%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:118
+#: ../gui/wxpython/rlisetup/wizard.py:121
 #, fuzzy
 msgid "Create new r.li configuration file?"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/wizard.py:130
+#: ../gui/wxpython/rlisetup/wizard.py:133
 #, fuzzy
 msgid "r.li.setup wizard canceled. Configuration file not created."
 msgstr "地点向导已取消,没有创建新地点。"
 
-#: ../gui/wxpython/rlisetup/wizard.py:429
+#: ../gui/wxpython/rlisetup/wizard.py:479
 #, fuzzy
 msgid "Select maps and define name"
 msgstr "从数据库中选择数据。"
 
-#: ../gui/wxpython/rlisetup/wizard.py:441
+#: ../gui/wxpython/rlisetup/wizard.py:492
 #, fuzzy
 msgid "Name for new configuration file to create"
 msgstr "将要创建的新区域的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:453
+#: ../gui/wxpython/rlisetup/wizard.py:505
 #, fuzzy
 msgid "Raster map to use to select areas"
 msgstr "将要查询的栅格地图"
 
-#: ../gui/wxpython/rlisetup/wizard.py:463
+#: ../gui/wxpython/rlisetup/wizard.py:516
 #, fuzzy
 msgid "Vector map to use to select areas"
 msgstr "矢量导入完成"
 
-#: ../gui/wxpython/rlisetup/wizard.py:473
+#: ../gui/wxpython/rlisetup/wizard.py:527
 #, fuzzy
 msgid "Vector map layer to use to select areas"
 msgstr "矢量导入完成"
 
-#: ../gui/wxpython/rlisetup/wizard.py:482
+#: ../gui/wxpython/rlisetup/wizard.py:539
 msgid "Define sampling region (region for analysis)"
 msgstr "设置取样区域(分析区域)"
 
-#: ../gui/wxpython/rlisetup/wizard.py:484
-#: ../gui/wxpython/rlisetup/wizard.py:809
+#: ../gui/wxpython/rlisetup/wizard.py:542
+#: ../gui/wxpython/rlisetup/wizard.py:877
 #, fuzzy
 msgid "Whole map layer"
 msgstr "移除图层"
 
-#: ../gui/wxpython/rlisetup/wizard.py:485
+#: ../gui/wxpython/rlisetup/wizard.py:543
 #, fuzzy
 msgid "Keyboard setting"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/rlisetup/wizard.py:486
+#: ../gui/wxpython/rlisetup/wizard.py:544
 #, fuzzy
 msgid "Draw the sampling frame"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:526
+#: ../gui/wxpython/rlisetup/wizard.py:586
 #, fuzzy, python-format
 msgid "The configuration file %s already exists, please change name"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/wizard.py:588
+#: ../gui/wxpython/rlisetup/wizard.py:648
 #, python-format
 msgid "Vector %s was not found, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:592
+#: ../gui/wxpython/rlisetup/wizard.py:652
 #, python-format
 msgid "Vector %s has no areas, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:597
+#: ../gui/wxpython/rlisetup/wizard.py:657
 #, python-format
 msgid "Vector %s has no table connected, please select another vector"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:639
+#: ../gui/wxpython/rlisetup/wizard.py:701
 #, fuzzy
 msgid "Insert sampling frame parameter"
 msgstr "平滑参数"
 
-#: ../gui/wxpython/rlisetup/wizard.py:649
+#: ../gui/wxpython/rlisetup/wizard.py:711
 #, fuzzy
 msgid "Column of upper left corner"
 msgstr "列的类型不支持"
 
-#: ../gui/wxpython/rlisetup/wizard.py:663
+#: ../gui/wxpython/rlisetup/wizard.py:725
 msgid "Row of upper left corner"
 msgstr "左上角行"
 
-#: ../gui/wxpython/rlisetup/wizard.py:676
-#: ../gui/wxpython/rlisetup/wizard.py:688
+#: ../gui/wxpython/rlisetup/wizard.py:740
+#: ../gui/wxpython/rlisetup/wizard.py:754
 msgid "Row length of sampling frame"
 msgstr "取样框架行长度"
 
-#: ../gui/wxpython/rlisetup/wizard.py:802
+#: ../gui/wxpython/rlisetup/wizard.py:870
 #, fuzzy
 msgid "Insert sampling areas"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/rlisetup/wizard.py:810
+#: ../gui/wxpython/rlisetup/wizard.py:878
 #, fuzzy
 msgid "Regions"
 msgstr "区域"
 
-#: ../gui/wxpython/rlisetup/wizard.py:811
+#: ../gui/wxpython/rlisetup/wizard.py:879
 #, fuzzy
 msgid "Sample units"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/rlisetup/wizard.py:812 ../gui/wxpython/menustrings.py:329
+#: ../gui/wxpython/rlisetup/wizard.py:880 ../gui/wxpython/menustrings.py:329
 #: ../gui/wxpython/menustrings.py:1236
 msgid "Moving window"
 msgstr "移动窗口"
 
-#: ../gui/wxpython/rlisetup/wizard.py:813
+#: ../gui/wxpython/rlisetup/wizard.py:881
 #, fuzzy
 msgid ""
 "Select areas from the\n"
 "overlayed vector map"
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:822
+#: ../gui/wxpython/rlisetup/wizard.py:892
 #, fuzzy
 msgid "Choose a method"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/rlisetup/wizard.py:823
+#: ../gui/wxpython/rlisetup/wizard.py:894
 msgid "Use keyboard to enter sampling area"
 msgstr "从键盘输入取样区域"
 
-#: ../gui/wxpython/rlisetup/wizard.py:824
+#: ../gui/wxpython/rlisetup/wizard.py:895
 #, fuzzy
 msgid "Use mouse to draw sampling area"
 msgstr "将要查询的栅格地图"
 
-#: ../gui/wxpython/rlisetup/wizard.py:828
+#: ../gui/wxpython/rlisetup/wizard.py:899
 #, fuzzy
 msgid "This option is not supported yet"
 msgstr "字段类型不支持"
 
-#: ../gui/wxpython/rlisetup/wizard.py:840
+#: ../gui/wxpython/rlisetup/wizard.py:911
 #, fuzzy
 msgid "Number of regions to draw:"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:854
+#: ../gui/wxpython/rlisetup/wizard.py:926
 #, fuzzy
 msgid "Do you want to overwrite existing temporal maps if they exist?"
 msgstr "创建GRASS地点<%s>?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:858
+#: ../gui/wxpython/rlisetup/wizard.py:931
 #, fuzzy
 msgid "Do you want to check vector areas?"
 msgstr "保存对矢量地图<%s>所作的发动?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:860
+#: ../gui/wxpython/rlisetup/wizard.py:933
 #, fuzzy
 msgid "Select if use area by area"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/rlisetup/wizard.py:862
+#: ../gui/wxpython/rlisetup/wizard.py:935
 msgid "All the features will be used"
 msgstr "使用所有功能"
 
-#: ../gui/wxpython/rlisetup/wizard.py:878
+#: ../gui/wxpython/rlisetup/wizard.py:952
 msgid "Analysing all vector features..."
 msgstr "分析所有矢量特征..."
 
-#: ../gui/wxpython/rlisetup/wizard.py:975
+#: ../gui/wxpython/rlisetup/wizard.py:1050
 #, fuzzy
 msgid "Analysing vector"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:991
+#: ../gui/wxpython/rlisetup/wizard.py:1066
 msgid "All feature are been analyzed."
 msgstr "所有功能都将用于分析。"
 
-#: ../gui/wxpython/rlisetup/wizard.py:995
+#: ../gui/wxpython/rlisetup/wizard.py:1070
 msgid "An error occurred"
 msgstr "发生错误"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1026
+#: ../gui/wxpython/rlisetup/wizard.py:1102
 #, fuzzy
 msgid "Draw sampling regions"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1043
+#: ../gui/wxpython/rlisetup/wizard.py:1119
 #, fuzzy
 msgid "Draw sample region "
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1051
-#: ../gui/wxpython/rlisetup/wizard.py:1396
+#: ../gui/wxpython/rlisetup/wizard.py:1127
+#: ../gui/wxpython/rlisetup/wizard.py:1484
 msgid "Draw moving windows region"
 msgstr "绘制移动窗口区域"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1090
+#: ../gui/wxpython/rlisetup/wizard.py:1166
 #, fuzzy
 msgid "Select sample units from keyboard"
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1104
-#: ../gui/wxpython/rlisetup/wizard.py:1266
-#: ../gui/wxpython/rlisetup/wizard.py:1355
+#: ../gui/wxpython/rlisetup/wizard.py:1180
+#: ../gui/wxpython/rlisetup/wizard.py:1353
+#: ../gui/wxpython/rlisetup/wizard.py:1443
 #, fuzzy
 msgid "Select type of shape"
 msgstr "选择类型:线 或 面"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1105
-#: ../gui/wxpython/rlisetup/wizard.py:1267
-#: ../gui/wxpython/rlisetup/wizard.py:1356
+#: ../gui/wxpython/rlisetup/wizard.py:1181
+#: ../gui/wxpython/rlisetup/wizard.py:1354
+#: ../gui/wxpython/rlisetup/wizard.py:1444
 msgid "Circle"
 msgstr "圆"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1127
-#: ../gui/wxpython/rlisetup/wizard.py:1278
-#: ../gui/wxpython/rlisetup/wizard.py:1293
+#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1365
+#: ../gui/wxpython/rlisetup/wizard.py:1380
 #, fuzzy
 msgid "Width size (in cells)?"
 msgstr "窗口大小(像元数)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1128
-#: ../gui/wxpython/rlisetup/wizard.py:1294
+#: ../gui/wxpython/rlisetup/wizard.py:1208
+#: ../gui/wxpython/rlisetup/wizard.py:1381
 #, fuzzy
 msgid "What radius size (in meters)?"
 msgstr "半径(米)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1129
-#: ../gui/wxpython/rlisetup/wizard.py:1285
-#: ../gui/wxpython/rlisetup/wizard.py:1295
+#: ../gui/wxpython/rlisetup/wizard.py:1209
+#: ../gui/wxpython/rlisetup/wizard.py:1372
+#: ../gui/wxpython/rlisetup/wizard.py:1382
 #, fuzzy
 msgid "Height size (in cells)?"
 msgstr "高度(像元数)?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1130
-#: ../gui/wxpython/rlisetup/wizard.py:1296
+#: ../gui/wxpython/rlisetup/wizard.py:1210
+#: ../gui/wxpython/rlisetup/wizard.py:1383
 #, fuzzy
 msgid "Name of the circle mask"
 msgstr "列数"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1136
+#: ../gui/wxpython/rlisetup/wizard.py:1218
 msgid "Select method of sampling unit distribution"
 msgstr "选择取样单位分而方法"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1137
+#: ../gui/wxpython/rlisetup/wizard.py:1220
 msgid "Random non overlapping"
 msgstr "随机无重复"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1138
+#: ../gui/wxpython/rlisetup/wizard.py:1221
 msgid "Systematic contiguos"
 msgstr "系统连续"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1139
+#: ../gui/wxpython/rlisetup/wizard.py:1222
 msgid "Stratified random"
 msgstr "随机分层"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1140
+#: ../gui/wxpython/rlisetup/wizard.py:1223
 msgid "Systematic non contiguos"
 msgstr "系统不连续"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1141
+#: ../gui/wxpython/rlisetup/wizard.py:1224
 #, fuzzy
 msgid "Centered over sites"
 msgstr "矢量导入完成"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1147
-#: ../gui/wxpython/rlisetup/wizard.py:1207
+#: ../gui/wxpython/rlisetup/wizard.py:1229
+#: ../gui/wxpython/rlisetup/wizard.py:1294
 #, fuzzy
 msgid "What number of Sampling Units to use?"
 msgstr "将要创建的点的数目"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1221
+#: ../gui/wxpython/rlisetup/wizard.py:1308
 #, fuzzy
 msgid "Insert number of row strates"
 msgstr "使用地图中心点坐标\n"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1222
+#: ../gui/wxpython/rlisetup/wizard.py:1309
 #, fuzzy
 msgid "Insert number of column strates"
 msgstr "列数"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1228
+#: ../gui/wxpython/rlisetup/wizard.py:1315
 #, fuzzy
 msgid "Insert distance between units"
 msgstr "缓冲区距离 (地图单位)"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1258
+#: ../gui/wxpython/rlisetup/wizard.py:1345
 #, fuzzy
 msgid "Set sample units"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1307
+#: ../gui/wxpython/rlisetup/wizard.py:1394
 msgid "Set moving windows"
 msgstr "设置移动窗口"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1349
-#: ../gui/wxpython/rlisetup/wizard.py:1448
+#: ../gui/wxpython/rlisetup/wizard.py:1437
+#: ../gui/wxpython/rlisetup/wizard.py:1535
 #, fuzzy
 msgid "Draw sampling units"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1367
+#: ../gui/wxpython/rlisetup/wizard.py:1455
 #, fuzzy
 msgid "Number of sampling area to draw:"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1465
+#: ../gui/wxpython/rlisetup/wizard.py:1552
 #, fuzzy
 msgid "Draw Sampling "
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1519
+#: ../gui/wxpython/rlisetup/wizard.py:1606
 #, fuzzy
 msgid "Select sampling areas"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1528
+#: ../gui/wxpython/rlisetup/wizard.py:1615
 msgid "Is this area ok?"
 msgstr "面积是否合适?"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1551
+#: ../gui/wxpython/rlisetup/wizard.py:1638
 #, fuzzy
 msgid "Select sample area "
 msgstr "边框颜色"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1578
+#: ../gui/wxpython/rlisetup/wizard.py:1665
 #: ../gui/wxpython/rlisetup/functions.py:138
 #, python-format
 msgid ""
@@ -7747,190 +8140,204 @@ msgid ""
 "the prefix '%s' or select the option to overwrite existing maps"
 msgstr ""
 
-#: ../gui/wxpython/rlisetup/wizard.py:1618
+#: ../gui/wxpython/rlisetup/wizard.py:1706
 #: ../gui/wxpython/rlisetup/functions.py:127
 msgid "The polygon seems to have 0 areas"
 msgstr "多边形的面积似乎为0"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1621
+#: ../gui/wxpython/rlisetup/wizard.py:1709
 #, fuzzy
 msgid "Select sample area 1 of "
 msgstr "边框颜色"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1643
-#: ../gui/wxpython/location_wizard/wizard.py:1624
+#: ../gui/wxpython/rlisetup/wizard.py:1732
+#: ../gui/wxpython/location_wizard/wizard.py:1999
 msgid "Summary"
 msgstr "总结"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1650
+#: ../gui/wxpython/rlisetup/wizard.py:1739
 #, fuzzy
 msgid "Configuration file name:"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1659
+#: ../gui/wxpython/rlisetup/wizard.py:1748
 #, fuzzy
 msgid "Raster name:"
 msgstr "栅格地图: "
 
-#: ../gui/wxpython/rlisetup/wizard.py:1669
+#: ../gui/wxpython/rlisetup/wizard.py:1758
 #, fuzzy
 msgid "Vector name:"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1678
+#: ../gui/wxpython/rlisetup/wizard.py:1767
 #, fuzzy
 msgid "Region type:"
 msgstr "区域"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1696
+#: ../gui/wxpython/rlisetup/wizard.py:1785
 #, fuzzy
 msgid "Sampling area type:"
 msgstr "采样方法"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1760
+#: ../gui/wxpython/rlisetup/wizard.py:1848
 msgid "Region keyboard values:"
 msgstr "区域键盘值:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1774
-#: ../gui/wxpython/rlisetup/wizard.py:1799
-#: ../gui/wxpython/rlisetup/wizard.py:1803
+#: ../gui/wxpython/rlisetup/wizard.py:1862
+#: ../gui/wxpython/rlisetup/wizard.py:1887
+#: ../gui/wxpython/rlisetup/wizard.py:1891
 #, fuzzy
 msgid "Type of shape:"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1777
-#: ../gui/wxpython/rlisetup/wizard.py:1806
+#: ../gui/wxpython/rlisetup/wizard.py:1865
+#: ../gui/wxpython/rlisetup/wizard.py:1894
 msgid "Radius size:"
 msgstr "半径:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1778
-#: ../gui/wxpython/rlisetup/wizard.py:1807
+#: ../gui/wxpython/rlisetup/wizard.py:1866
+#: ../gui/wxpython/rlisetup/wizard.py:1895
 #, fuzzy
 msgid "Name circle mask:"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1780
-#: ../gui/wxpython/rlisetup/wizard.py:1809
+#: ../gui/wxpython/rlisetup/wizard.py:1868
+#: ../gui/wxpython/rlisetup/wizard.py:1897
 #, fuzzy
 msgid "Width size:"
 msgstr "块大小:"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1781
-#: ../gui/wxpython/rlisetup/wizard.py:1810
+#: ../gui/wxpython/rlisetup/wizard.py:1869
+#: ../gui/wxpython/rlisetup/wizard.py:1898
 #, fuzzy
 msgid "Height size:"
 msgstr "邻域大小"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1784
+#: ../gui/wxpython/rlisetup/wizard.py:1872
 #, fuzzy
 msgid "Method of distribution:"
 msgstr "插值点的数量"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1787
+#: ../gui/wxpython/rlisetup/wizard.py:1875
 #, fuzzy
 msgid "Number sampling units:"
 msgstr "输入图层的名称"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1790
+#: ../gui/wxpython/rlisetup/wizard.py:1878
 #, fuzzy
 msgid "Distance between units:"
 msgstr "点间的最大距离"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1793
+#: ../gui/wxpython/rlisetup/wizard.py:1881
 #, fuzzy
 msgid "Number row strates:"
 msgstr "行数"
 
-#: ../gui/wxpython/rlisetup/wizard.py:1795
+#: ../gui/wxpython/rlisetup/wizard.py:1883
 #, fuzzy
 msgid "Number column strates:"
 msgstr "数字列"
 
-#: ../gui/wxpython/lmgr/pyshell.py:38
+#: ../gui/wxpython/lmgr/pyshell.py:42
 #, python-format
 msgid "Welcome to wxGUI Interactive Python Shell %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:39
+#: ../gui/wxpython/lmgr/pyshell.py:43
 #, python-format
 msgid "Type %s for more GRASS scripting related information."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:40
+#: ../gui/wxpython/lmgr/pyshell.py:44
 #, python-format
 msgid "Type %s to add raster or vector to the layer tree."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:50
+#: ../gui/wxpython/lmgr/pyshell.py:54
 msgid "Delete all text from the shell"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/pyshell.py:100
+#: ../gui/wxpython/lmgr/pyshell.py:57
+#, fuzzy
+msgid "Simple &editor"
+msgstr "安静模式"
+
+#: ../gui/wxpython/lmgr/pyshell.py:60 ../gui/wxpython/lmgr/toolbars.py:165
+msgid "Open a simple Python code editor"
+msgstr ""
+
+#: ../gui/wxpython/lmgr/pyshell.py:113
 #, fuzzy, python-format
 msgid "Raster or vector map <%s> not found"
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/lmgr/pyshell.py:107
+#: ../gui/wxpython/lmgr/pyshell.py:120
 #, fuzzy, python-format
 msgid "Raster map <%s> added"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/lmgr/pyshell.py:109
+#: ../gui/wxpython/lmgr/pyshell.py:122
 #, fuzzy, python-format
 msgid "Vector map <%s> added"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/lmgr/frame.py:97
+#: ../gui/wxpython/lmgr/frame.py:101
 #, fuzzy, python-format
 msgid "GRASS GIS %s Layer Manager"
 msgstr "GRASS GIS层管理器"
 
-#: ../gui/wxpython/lmgr/frame.py:142
+#: ../gui/wxpython/lmgr/frame.py:151
 msgid "Workspace Toolbar"
 msgstr "工作区工具栏"
 
-#: ../gui/wxpython/lmgr/frame.py:145
+#: ../gui/wxpython/lmgr/frame.py:154
 msgid "Data Toolbar"
 msgstr "数据工具栏"
 
-#: ../gui/wxpython/lmgr/frame.py:151
+#: ../gui/wxpython/lmgr/frame.py:160
 #, fuzzy
 msgid "Tools Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/lmgr/frame.py:154
+#: ../gui/wxpython/lmgr/frame.py:163
 #, fuzzy
 msgid "Vector Toolbar"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/lmgr/frame.py:157
+#: ../gui/wxpython/lmgr/frame.py:166
 #, fuzzy
 msgid "3D view Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/lmgr/frame.py:262 ../gui/wxpython/lmgr/frame.py:1496
+#: ../gui/wxpython/lmgr/frame.py:283 ../gui/wxpython/lmgr/frame.py:1665
 #, fuzzy
 msgid "Rename Map Display"
 msgstr "显示文本"
 
-#: ../gui/wxpython/lmgr/frame.py:293
-msgid "Map layers"
-msgstr "地图层"
+#: ../gui/wxpython/lmgr/frame.py:322
+#: ../gui/wxpython/gui_core/preferences.py:1180
+msgid "Layers"
+msgstr "图层"
 
-#: ../gui/wxpython/lmgr/frame.py:304
-msgid "Command console"
+#: ../gui/wxpython/lmgr/frame.py:339
+#, fuzzy
+msgid "Console"
 msgstr "命令控制台"
 
-#: ../gui/wxpython/lmgr/frame.py:322
-msgid "Search modules"
-msgstr "查找模块"
+#: ../gui/wxpython/lmgr/frame.py:364
+#: ../gui/wxpython/gui_core/preferences.py:330
+#: ../gui/wxpython/gui_core/preferences.py:1069
+msgid "Modules"
+msgstr "模块"
 
-#: ../gui/wxpython/lmgr/frame.py:329
-#: ../gui/wxpython/gui_core/preferences.py:292
-msgid "Python shell"
+#: ../gui/wxpython/lmgr/frame.py:388
+#: ../gui/wxpython/gui_core/preferences.py:347
+#, fuzzy
+msgid "Python"
 msgstr "Python壳"
 
-#: ../gui/wxpython/lmgr/frame.py:405
+#: ../gui/wxpython/lmgr/frame.py:483
 #, python-format
 msgid ""
 "Location <%s> created.\n"
@@ -7938,248 +8345,234 @@ msgid ""
 "Do you want to switch to the new location?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:408
+#: ../gui/wxpython/lmgr/frame.py:486
 #, fuzzy
 msgid "Switch to new location?"
 msgstr "结果矢量文件的名称"
 
-#: ../gui/wxpython/lmgr/frame.py:424 ../gui/wxpython/lmgr/frame.py:929
-#, python-format
-msgid ""
-"Current location is <%(loc)s>.\n"
-"Current mapset is <%(mapset)s>."
-msgstr ""
-"当前地点为 <%(loc)s>.\n"
-"当前地图集为 <%(mapset)s>."
-
-#: ../gui/wxpython/lmgr/frame.py:510
+#: ../gui/wxpython/lmgr/frame.py:594
 msgid "Choose model to run"
 msgstr "选择要运行的模型"
 
-#: ../gui/wxpython/lmgr/frame.py:568 ../gui/wxpython/lmgr/frame.py:2235
+#: ../gui/wxpython/lmgr/frame.py:659 ../gui/wxpython/lmgr/frame.py:2418
 msgid "Do you want to save changes in the workspace?"
 msgstr "是否保存您对工作区的改动?"
 
-#: ../gui/wxpython/lmgr/frame.py:570 ../gui/wxpython/lmgr/frame.py:2237
+#: ../gui/wxpython/lmgr/frame.py:661 ../gui/wxpython/lmgr/frame.py:2420
 msgid "Do you want to store current settings to workspace file?"
 msgstr "是否保存当前设置到工作区文件?"
 
-#: ../gui/wxpython/lmgr/frame.py:578
+#: ../gui/wxpython/lmgr/frame.py:669
 #, fuzzy, python-format
 msgid "Close Map Display %s"
 msgstr "关闭地图显示%d"
 
-#: ../gui/wxpython/lmgr/frame.py:653
+#: ../gui/wxpython/lmgr/frame.py:745
 #, python-format
 msgid ""
 "Command '%s' not yet implemented in the WxGUI. Try adding it as a command "
 "layer instead."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:814 ../gui/wxpython/lmgr/frame.py:1749
+#: ../gui/wxpython/lmgr/frame.py:914 ../gui/wxpython/lmgr/frame.py:1930
 #, fuzzy
 msgid "Selected map layer is not vector."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/lmgr/frame.py:819
+#: ../gui/wxpython/lmgr/frame.py:920
 #, fuzzy
 msgid "Editing is allowed only for vector maps from the current mapset."
 msgstr "未找到矢量文件 %s"
 
-#: ../gui/wxpython/lmgr/frame.py:843
+#: ../gui/wxpython/lmgr/frame.py:946
 #, fuzzy
 msgid "Choose script file to run"
 msgstr "选择脚本文件"
 
-#: ../gui/wxpython/lmgr/frame.py:845
+#: ../gui/wxpython/lmgr/frame.py:948
 msgid "Python script (*.py)|*.py|Bash script (*.sh)|*.sh"
 msgstr "Python脚本(*.py)|*.py|Bash脚本(*.sh)|*.sh"
 
-#: ../gui/wxpython/lmgr/frame.py:857
+#: ../gui/wxpython/lmgr/frame.py:961
 msgid ""
 "Due to the limitations of your operating system, the script path cannot "
 "contain certain non-ascii characters. Please rename the script or move it to "
 "a different location."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:864
+#: ../gui/wxpython/lmgr/frame.py:968
 #, fuzzy, python-format
 msgid "Script file '%s' doesn't exist. Operation canceled."
 msgstr "脚本'%s'不存在,操作已取消。"
 
-#: ../gui/wxpython/lmgr/frame.py:871
+#: ../gui/wxpython/lmgr/frame.py:977
 #, python-format
 msgid ""
 "Script <%s> is not executable. Do you want to set the permissions that "
 "allows you to run this script (note that you must be the owner of the file)?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:876
+#: ../gui/wxpython/lmgr/frame.py:982
 #, fuzzy
 msgid "Set permission?"
 msgstr "设置地区"
 
-#: ../gui/wxpython/lmgr/frame.py:885
+#: ../gui/wxpython/lmgr/frame.py:992
 #, fuzzy
 msgid "Unable to set permission. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/lmgr/frame.py:896
+#: ../gui/wxpython/lmgr/frame.py:1006
 #, python-format
 msgid ""
 "Directory '%s' is not defined in GRASS_ADDON_PATH. Do you want add this "
 "directory to GRASS_ADDON_PATH?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:899
+#: ../gui/wxpython/lmgr/frame.py:1008
 msgid "Update Addons path?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:905
+#: ../gui/wxpython/lmgr/frame.py:1014
 #, python-format
 msgid "Launching script '%s'..."
 msgstr "启动脚本 '%s' ..."
 
-#: ../gui/wxpython/lmgr/frame.py:917
+#: ../gui/wxpython/lmgr/frame.py:1028
 #, fuzzy
 msgid "No location/mapset provided. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/lmgr/frame.py:943 ../gui/wxpython/lmgr/frame.py:964
+#: ../gui/wxpython/lmgr/frame.py:1056 ../gui/wxpython/lmgr/frame.py:1077
 #, fuzzy
 msgid "No mapset provided. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/lmgr/frame.py:952 ../gui/wxpython/lmgr/frame.py:971
-#, python-format
-msgid "Current mapset is <%s>."
-msgstr "当前地图集为<%s>."
-
-#: ../gui/wxpython/lmgr/frame.py:993
+#: ../gui/wxpython/lmgr/frame.py:1109
 #, python-format
 msgid ""
 "Working directory changed to:\n"
 "\"%s\""
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1000
+#: ../gui/wxpython/lmgr/frame.py:1116
 #, fuzzy
 msgid "Changes current working directory for this GUI."
 msgstr "改变工作环境"
 
-#: ../gui/wxpython/lmgr/frame.py:1002
+#: ../gui/wxpython/lmgr/frame.py:1118
 #, fuzzy
 msgid "Usage: cd [directory]"
 msgstr "选择GIS数据目录:"
 
-#: ../gui/wxpython/lmgr/frame.py:1003
+#: ../gui/wxpython/lmgr/frame.py:1119
 msgid "Without parameters it opens a dialog."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1007
+#: ../gui/wxpython/lmgr/frame.py:1123
 msgid ""
 "If ~ (tilde) is present as the first directory on the path, it is replaced "
 "by user's home directory."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1021
+#: ../gui/wxpython/lmgr/frame.py:1137
 msgid "More than one parameter provided."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1041
+#: ../gui/wxpython/lmgr/frame.py:1157
 #, fuzzy
 msgid "Choose a working directory"
 msgstr "新GIS数据目录"
 
-#: ../gui/wxpython/lmgr/frame.py:1086
+#: ../gui/wxpython/lmgr/frame.py:1202
 msgid "System Info"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1101
+#: ../gui/wxpython/lmgr/frame.py:1217
 #, fuzzy
 msgid "GRASS version"
 msgstr "显示当前GRASS版本"
 
-#: ../gui/wxpython/lmgr/frame.py:1101 ../gui/wxpython/gui_core/ghelp.py:115
+#: ../gui/wxpython/lmgr/frame.py:1217 ../gui/wxpython/gui_core/ghelp.py:127
 msgid "unknown version"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1102
+#: ../gui/wxpython/lmgr/frame.py:1218
 #, fuzzy
-msgid "GRASS SVN Revision"
+msgid "GRASS SVN revision"
 msgstr "区域"
 
-#: ../gui/wxpython/lmgr/frame.py:1103 ../gui/wxpython/gui_core/ghelp.py:153
-msgid "Build Date"
+#: ../gui/wxpython/lmgr/frame.py:1220
+msgid "Build date"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1104
-msgid "Build Platform"
+#: ../gui/wxpython/lmgr/frame.py:1222
+msgid "Build platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1109
+#: ../gui/wxpython/lmgr/frame.py:1235
 msgid "Platform"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1167
+#: ../gui/wxpython/lmgr/frame.py:1296
 msgid ""
 "Current workspace is not empty. Do you want to store current settings to "
 "workspace file?"
 msgstr "当前工作区非空,是否将当前设置保存到工作区文件?"
 
-#: ../gui/wxpython/lmgr/frame.py:1170
+#: ../gui/wxpython/lmgr/frame.py:1299
 msgid "Create new workspace?"
 msgstr "是否创建新工作区?"
 
-#: ../gui/wxpython/lmgr/frame.py:1196
+#: ../gui/wxpython/lmgr/frame.py:1326
 msgid "Choose workspace file"
 msgstr "选择工作区文件"
 
-#: ../gui/wxpython/lmgr/frame.py:1197 ../gui/wxpython/lmgr/frame.py:1394
+#: ../gui/wxpython/lmgr/frame.py:1328 ../gui/wxpython/lmgr/frame.py:1546
 msgid "GRASS Workspace File (*.gxw)|*.gxw"
 msgstr "GRASS工作区文件(*.gxw)|*.gxw"
 
-#: ../gui/wxpython/lmgr/frame.py:1235 ../gui/wxpython/lmgr/frame.py:1371
+#: ../gui/wxpython/lmgr/frame.py:1368 ../gui/wxpython/lmgr/frame.py:1520
 msgid "Please wait, loading workspace..."
 msgstr "请稍候,工作区加载中..."
 
-#: ../gui/wxpython/lmgr/frame.py:1355
+#: ../gui/wxpython/lmgr/frame.py:1500
 msgid "Choose GRC file to load"
 msgstr "选择要加载的GRC文件"
 
-#: ../gui/wxpython/lmgr/frame.py:1356
+#: ../gui/wxpython/lmgr/frame.py:1502
 msgid "Old GRASS Workspace File (*.grc)|*.grc"
 msgstr "旧版本工作区文件(*.grc)|*.grc"
 
-#: ../gui/wxpython/lmgr/frame.py:1393
+#: ../gui/wxpython/lmgr/frame.py:1544
 msgid "Choose file to save current workspace"
 msgstr "选择用来保存当前工作区的文件"
 
-#: ../gui/wxpython/lmgr/frame.py:1408 ../gui/wxpython/lmgr/frame.py:1424
+#: ../gui/wxpython/lmgr/frame.py:1564 ../gui/wxpython/lmgr/frame.py:1585
 #, python-format
 msgid "Workspace file <%s> already exists. Do you want to overwrite this file?"
 msgstr "工作区文件<%s>已经存在,是否覆盖?"
 
-#: ../gui/wxpython/lmgr/frame.py:1410 ../gui/wxpython/lmgr/frame.py:1427
+#: ../gui/wxpython/lmgr/frame.py:1567 ../gui/wxpython/lmgr/frame.py:1588
 #: ../gui/wxpython/menustrings.py:10
 msgid "Save workspace"
 msgstr "保存工作区"
 
-#: ../gui/wxpython/lmgr/frame.py:1448
+#: ../gui/wxpython/lmgr/frame.py:1612
 msgid "Writing current settings to workspace file failed."
 msgstr "保存当前设置到工作区文件失败。"
 
-#: ../gui/wxpython/lmgr/frame.py:1495
+#: ../gui/wxpython/lmgr/frame.py:1664
 #, fuzzy
 msgid "Enter new name:"
 msgstr "输出的表名称"
 
-#: ../gui/wxpython/lmgr/frame.py:1501
+#: ../gui/wxpython/lmgr/frame.py:1673
 #, python-brace-format
 msgid "GRASS GIS {version} Map Display: {name} - Location: {loc}"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1581
+#: ../gui/wxpython/lmgr/frame.py:1759
 #, python-format
 msgid ""
 "Unable to launch \"Supervised Classification Tool\".\n"
@@ -8187,37 +8580,37 @@ msgid ""
 "Reason: %s"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:1621
+#: ../gui/wxpython/lmgr/frame.py:1801
 #, fuzzy
 msgid "Unable to start Timeline Tool."
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1631
+#: ../gui/wxpython/lmgr/frame.py:1812
 #, fuzzy
 msgid "Unable to start Temporal Plot Tool."
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/lmgr/frame.py:1863
+#: ../gui/wxpython/lmgr/frame.py:2054
 #, fuzzy
 msgid "Add selected map layers into layer tree"
 msgstr "加载地图层到层列表"
 
-#: ../gui/wxpython/lmgr/frame.py:1897 ../gui/wxpython/lmgr/frame.py:1944
+#: ../gui/wxpython/lmgr/frame.py:2087 ../gui/wxpython/lmgr/frame.py:2124
 #, fuzzy, python-format
 msgid "Unsupported map layer type <%s>."
 msgstr "无法读取 [%s] 的文件头"
 
-#: ../gui/wxpython/lmgr/frame.py:2073
+#: ../gui/wxpython/lmgr/frame.py:2253
 msgid ""
 "Note that cell values can only be displayed for regions of less than 10,000 "
 "cells."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2147 ../gui/wxpython/lmgr/layertree.py:1643
+#: ../gui/wxpython/lmgr/frame.py:2328 ../gui/wxpython/lmgr/layertree.py:1944
 msgid "opacity:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2155
+#: ../gui/wxpython/lmgr/frame.py:2336
 #, python-format
 msgid ""
 "Do you want to remove map layer(s)\n"
@@ -8228,60 +8621,57 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/lmgr/frame.py:2158
+#: ../gui/wxpython/lmgr/frame.py:2339
 msgid "Do you want to remove selected map layer(s) from layer tree?"
 msgstr ""
 "是否将选中的图层\n"
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/lmgr/frame.py:2162
+#: ../gui/wxpython/lmgr/frame.py:2345
 msgid "Remove map layer"
 msgstr "移除图层"
 
-#: ../gui/wxpython/lmgr/frame.py:2244
+#: ../gui/wxpython/lmgr/frame.py:2427
 msgid "Quit GRASS GUI"
 msgstr "退出GRASS"
 
-#: ../gui/wxpython/lmgr/frame.py:2275
+#: ../gui/wxpython/lmgr/frame.py:2459
 #, fuzzy
 msgid "Unable to exit GRASS shell: unknown PID"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/lmgr/frame.py:2285
-#, fuzzy
-msgid "No map layer selected. Operation canceled."
-msgstr "没有选择图层,操作已取消。"
-
-#: ../gui/wxpython/lmgr/frame.py:2295
+#: ../gui/wxpython/lmgr/frame.py:2479
 msgid ""
 "Display resolution is currently not constrained to computational settings. "
 "It's suggested to constrain map to region geometry. Do you want to constrain "
 "the resolution?"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/frame.py:2304
+#: ../gui/wxpython/lmgr/frame.py:2488
 #, fuzzy
 msgid "Constrain map to region geometry?"
 msgstr "只打印栅格图的区域"
 
-#: ../gui/wxpython/lmgr/menudata.py:42
+#: ../gui/wxpython/lmgr/menudata.py:44
 msgid ""
 "Unable to parse user toolboxes XML files. Default main menu will be loaded."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/menudata.py:64
+#: ../gui/wxpython/lmgr/menudata.py:68
 msgid ""
 "Unable to parse user toolboxes XML files. Default module tree will be loaded."
 msgstr ""
 
 #: ../gui/wxpython/lmgr/layertree.py:56 ../gui/wxpython/menustrings.py:32
-#: ../gui/wxpython/menustrings.py:1019 ../gui/wxpython/gui_core/dialogs.py:1887
+#: ../gui/wxpython/menustrings.py:1019
+#: ../gui/wxpython/modules/import_export.py:362
 msgid "Import raster data"
 msgstr "导入栅格数据"
 
 #: ../gui/wxpython/lmgr/layertree.py:58 ../gui/wxpython/menustrings.py:157
-#: ../gui/wxpython/menustrings.py:1144 ../gui/wxpython/gui_core/dialogs.py:1885
+#: ../gui/wxpython/menustrings.py:1144
+#: ../gui/wxpython/modules/import_export.py:360
 msgid "Link external raster data"
 msgstr "链接到外部栅格数据"
 
@@ -8296,12 +8686,14 @@ msgid "Set raster output format"
 msgstr "无法创建输出地图"
 
 #: ../gui/wxpython/lmgr/layertree.py:64 ../gui/wxpython/menustrings.py:63
-#: ../gui/wxpython/menustrings.py:1050 ../gui/wxpython/gui_core/dialogs.py:1881
+#: ../gui/wxpython/menustrings.py:1050
+#: ../gui/wxpython/modules/import_export.py:500
 msgid "Import vector data"
 msgstr "导入矢量数据"
 
 #: ../gui/wxpython/lmgr/layertree.py:66 ../gui/wxpython/menustrings.py:159
-#: ../gui/wxpython/menustrings.py:1146 ../gui/wxpython/gui_core/dialogs.py:1879
+#: ../gui/wxpython/menustrings.py:1146
+#: ../gui/wxpython/modules/import_export.py:498
 msgid "Link external vector data"
 msgstr "链接到外部矢量数据"
 
@@ -8324,7 +8716,7 @@ msgstr "使用的插值方法"
 msgid "Add command layer"
 msgstr "添加命令层"
 
-#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1991
+#: ../gui/wxpython/lmgr/layertree.py:76 ../gui/wxpython/menustrings.py:1997
 #: ../gui/wxpython/gui_core/toolbars.py:73
 msgid "Quit"
 msgstr "退出"
@@ -8377,8 +8769,8 @@ msgid "Add rhumbline layer"
 msgstr "添加等角航线层"
 
 #: ../gui/wxpython/lmgr/layertree.py:104
-#: ../gui/wxpython/gui_core/simplelmgr.py:453
-#: ../gui/wxpython/gui_core/simplelmgr.py:454
+#: ../gui/wxpython/gui_core/simplelmgr.py:473
+#: ../gui/wxpython/gui_core/simplelmgr.py:474
 msgid "Add 3D raster map layer"
 msgstr "添加三维栅格图层"
 
@@ -8401,289 +8793,281 @@ msgstr "验证模型..."
 msgid "Background vector map"
 msgstr "新矢量地图"
 
-#: ../gui/wxpython/lmgr/layertree.py:191
+#: ../gui/wxpython/lmgr/layertree.py:209
 msgid "Map Layers"
 msgstr "地图图层"
 
-#: ../gui/wxpython/lmgr/layertree.py:443 ../gui/wxpython/iscatt/frame.py:540
+#: ../gui/wxpython/lmgr/layertree.py:475 ../gui/wxpython/iscatt/frame.py:580
 msgid "Change opacity level"
 msgstr "改变透明度"
 
-#: ../gui/wxpython/lmgr/layertree.py:453
+#: ../gui/wxpython/lmgr/layertree.py:498
 #, fuzzy
 msgid "3D view properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/lmgr/layertree.py:458
+#: ../gui/wxpython/lmgr/layertree.py:509
 msgid "Zoom to selected map(s)"
 msgstr "放大到选中的图层"
 
-#: ../gui/wxpython/lmgr/layertree.py:463
+#: ../gui/wxpython/lmgr/layertree.py:521
 msgid "Set computational region from selected map(s)"
 msgstr "设置选中图层的计算区域"
 
-#: ../gui/wxpython/lmgr/layertree.py:477
+#: ../gui/wxpython/lmgr/layertree.py:541
 msgid "Export common formats"
 msgstr "常见格式导出"
 
-#: ../gui/wxpython/lmgr/layertree.py:486
+#: ../gui/wxpython/lmgr/layertree.py:558
 msgid "Export PostGIS"
 msgstr "导出到PostGIS"
 
-#: ../gui/wxpython/lmgr/layertree.py:493 ../gui/wxpython/lmgr/layertree.py:591
+#: ../gui/wxpython/lmgr/layertree.py:587 ../gui/wxpython/lmgr/layertree.py:736
 msgid "Create pack"
 msgstr "创建图层包"
 
-#: ../gui/wxpython/lmgr/layertree.py:501 ../gui/wxpython/lmgr/layertree.py:599
+#: ../gui/wxpython/lmgr/layertree.py:603 ../gui/wxpython/lmgr/layertree.py:752
 msgid "Make a copy in the current mapset"
 msgstr "创建当前地图集的副本"
 
-#: ../gui/wxpython/lmgr/layertree.py:506 ../gui/wxpython/lmgr/layertree.py:604
-#: ../gui/wxpython/lmgr/layertree.py:636
+#: ../gui/wxpython/lmgr/layertree.py:608 ../gui/wxpython/lmgr/layertree.py:760
+#: ../gui/wxpython/lmgr/layertree.py:832
 msgid "Set color table"
 msgstr "设置颜色表"
 
-#: ../gui/wxpython/lmgr/layertree.py:509
+#: ../gui/wxpython/lmgr/layertree.py:617
 msgid "Show attribute data"
 msgstr "显示属性表"
 
-#: ../gui/wxpython/lmgr/layertree.py:521
+#: ../gui/wxpython/lmgr/layertree.py:635
 msgid "Start editing"
 msgstr "启动编辑"
 
-#: ../gui/wxpython/lmgr/layertree.py:524
+#: ../gui/wxpython/lmgr/layertree.py:644
 msgid "Stop editing"
 msgstr "停止编辑"
 
-#: ../gui/wxpython/lmgr/layertree.py:540
+#: ../gui/wxpython/lmgr/layertree.py:665
 msgid "Rebuild topology"
 msgstr "重建拓扑"
 
-#: ../gui/wxpython/lmgr/layertree.py:578
+#: ../gui/wxpython/lmgr/layertree.py:708
 msgid "Zoom to selected map(s) (ignore NULLs)"
 msgstr "缩放到选中图层(忽略NULL值)"
 
-#: ../gui/wxpython/lmgr/layertree.py:607 ../gui/wxpython/menustrings.py:743
+#: ../gui/wxpython/lmgr/layertree.py:767
+#, fuzzy
+msgid "Set color table interactively"
+msgstr "交互式设置色彩"
+
+#: ../gui/wxpython/lmgr/layertree.py:776 ../gui/wxpython/menustrings.py:743
 #: ../gui/wxpython/menustrings.py:1650
 msgid "Histogram"
 msgstr "直方图"
 
-#: ../gui/wxpython/lmgr/layertree.py:612 ../gui/wxpython/lmgr/layertree.py:639
+#: ../gui/wxpython/lmgr/layertree.py:785 ../gui/wxpython/lmgr/layertree.py:841
 #: ../gui/wxpython/menustrings.py:526 ../gui/wxpython/menustrings.py:1433
 msgid "Univariate raster statistics"
 msgstr "一元变量栅格统计量"
 
-#: ../gui/wxpython/lmgr/layertree.py:617
+#: ../gui/wxpython/lmgr/layertree.py:797
 #, fuzzy
 msgid "Report raster statistics"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/lmgr/layertree.py:623
+#: ../gui/wxpython/lmgr/layertree.py:809
 msgid "Profile"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:651
+#: ../gui/wxpython/lmgr/layertree.py:865
 msgid "Save web service layer"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:756
+#: ../gui/wxpython/lmgr/layertree.py:972
 msgid "Unable to create profile of raster map."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:786
-#, python-format
-msgid ""
-"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
-"characters excluding %(chars)s and space."
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:808 ../gui/wxpython/nviz/tools.py:1535
+#: ../gui/wxpython/lmgr/layertree.py:1023 ../gui/wxpython/nviz/tools.py:1865
 #, fuzzy
 msgid "3D raster map"
 msgstr "基础栅格图"
 
-#: ../gui/wxpython/lmgr/layertree.py:810
+#: ../gui/wxpython/lmgr/layertree.py:1025
 #, fuzzy, python-format
 msgid "Unsupported map type <%s>"
 msgstr "无法读取 [%s] 的文件头"
 
-#: ../gui/wxpython/lmgr/layertree.py:815
+#: ../gui/wxpython/lmgr/layertree.py:1031
 #, fuzzy, python-format
 msgid "Enter name for the new %s in the current mapset:"
 msgstr "输入要创建的新地图集名称:"
 
-#: ../gui/wxpython/lmgr/layertree.py:816
+#: ../gui/wxpython/lmgr/layertree.py:1033
 #, python-format
 msgid "Make a copy of %s <%s>"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:830
+#: ../gui/wxpython/lmgr/layertree.py:1051
 #, fuzzy, python-format
 msgid ""
 "%s <%s> already exists in the current mapset. Do you want to overwrite it?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/lmgr/layertree.py:833
-#: ../gui/wxpython/gui_core/dialogs.py:425
-#: ../gui/wxpython/modules/colorrules.py:608
-msgid "Overwrite?"
-msgstr ""
-
-#: ../gui/wxpython/lmgr/layertree.py:840
+#: ../gui/wxpython/lmgr/layertree.py:1063
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/lmgr/layertree.py:847
+#: ../gui/wxpython/lmgr/layertree.py:1071
 #, fuzzy, python-format
 msgid "Unable to make copy of <%s>. Mapset <%s> is not current mapset."
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/lmgr/layertree.py:864
+#: ../gui/wxpython/lmgr/layertree.py:1097
 msgid "Unable to display histogram of raster map. No map name defined."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:965
-#: ../gui/wxpython/gui_core/simplelmgr.py:270
+#: ../gui/wxpython/lmgr/layertree.py:1207
+#: ../gui/wxpython/gui_core/simplelmgr.py:283
 #, python-format
 msgid "Set opacity of <%s>"
 msgstr "设置<%s>的透明度"
 
-#: ../gui/wxpython/lmgr/layertree.py:1070
+#: ../gui/wxpython/lmgr/layertree.py:1317
 msgid "Layer group:"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1075
-#: ../gui/wxpython/lmgr/layertree.py:1568
+#: ../gui/wxpython/lmgr/layertree.py:1323
+#: ../gui/wxpython/lmgr/layertree.py:1864
 msgid "Click to edit layer settings"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1127
+#: ../gui/wxpython/lmgr/layertree.py:1390
 msgid "(double click to set properties)"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/layertree.py:1368
+#: ../gui/wxpython/lmgr/layertree.py:1639
 msgid "Please wait, updating data..."
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:46
+#: ../gui/wxpython/lmgr/toolbars.py:49
 msgid "Start new map display"
 msgstr "启动新地图显示窗口"
 
-#: ../gui/wxpython/lmgr/toolbars.py:48
+#: ../gui/wxpython/lmgr/toolbars.py:52
 msgid "Create new workspace (Ctrl+N)"
 msgstr "创建新工作区(Ctrl+N)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:50
+#: ../gui/wxpython/lmgr/toolbars.py:55
 msgid "Open existing workspace file (Ctrl+O)"
 msgstr "打开已有工作区(Ctrl+O)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:52
+#: ../gui/wxpython/lmgr/toolbars.py:58
 msgid "Save current workspace to file (Ctrl+S)"
 msgstr "保存当前工作区到文件(Ctrl+S)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:80
+#: ../gui/wxpython/lmgr/toolbars.py:89
 msgid "Add multiple raster or vector map layers (Ctrl+Shift+L)"
 msgstr "添加栅格或矢量图层(Ctrl+Shift+L)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:81
+#: ../gui/wxpython/lmgr/toolbars.py:91
 msgid "Add raster map layer (Ctrl+Shift+R)"
 msgstr "添加栅格图层(Ctrl+Shift+R)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:83
+#: ../gui/wxpython/lmgr/toolbars.py:94
 #, fuzzy
 msgid "Add various raster map layers (RGB, HIS, shaded relief...)"
 msgstr "添加栅格地图层"
 
-#: ../gui/wxpython/lmgr/toolbars.py:84
+#: ../gui/wxpython/lmgr/toolbars.py:96
 msgid "Add vector map layer (Ctrl+Shift+V)"
 msgstr "添加矢量图层(Ctrl+Shift+V)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:86
+#: ../gui/wxpython/lmgr/toolbars.py:99
 msgid "Add various vector map layers (thematic, chart...)"
 msgstr "添加多种矢量图层(主题,图表等)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:88
+#: ../gui/wxpython/lmgr/toolbars.py:102
 msgid "Add web service layer (WMS, WMTS, NASA OnEarth)"
 msgstr "添加网络服务图层(WMS,WMTS,NASA OnEarth)"
 
-#: ../gui/wxpython/lmgr/toolbars.py:90
+#: ../gui/wxpython/lmgr/toolbars.py:105
 msgid "Add group"
 msgstr "添加组"
 
-#: ../gui/wxpython/lmgr/toolbars.py:92
+#: ../gui/wxpython/lmgr/toolbars.py:108
 msgid "Add various overlays"
 msgstr "添加多种图层"
 
-#: ../gui/wxpython/lmgr/toolbars.py:94
+#: ../gui/wxpython/lmgr/toolbars.py:111
 msgid "Remove selected map layer(s) from layer tree"
 msgstr "从列表中移除选中的图层"
 
-#: ../gui/wxpython/lmgr/toolbars.py:134
+#: ../gui/wxpython/lmgr/toolbars.py:153
 msgid "Import/link raster or vector data"
 msgstr "导入/链接栅格或矢量数据"
 
-#: ../gui/wxpython/lmgr/toolbars.py:136
+#: ../gui/wxpython/lmgr/toolbars.py:155
 msgid "Raster Map Calculator"
 msgstr "栅格地图计算器"
 
-#: ../gui/wxpython/lmgr/toolbars.py:138 ../gui/wxpython/gui_core/forms.py:1201
+#: ../gui/wxpython/lmgr/toolbars.py:157 ../gui/wxpython/gui_core/forms.py:1386
 msgid "Graphical Modeler"
 msgstr "建模器图形界面"
 
-#: ../gui/wxpython/lmgr/toolbars.py:140
+#: ../gui/wxpython/lmgr/toolbars.py:159
 msgid "Georectifier"
 msgstr "地理校正"
 
-#: ../gui/wxpython/lmgr/toolbars.py:142 ../gui/wxpython/menustrings.py:201
-#: ../gui/wxpython/menustrings.py:1926
+#: ../gui/wxpython/lmgr/toolbars.py:161 ../gui/wxpython/menustrings.py:201
+#: ../gui/wxpython/menustrings.py:1918
 msgid "Cartographic Composer"
 msgstr "制图窗口"
 
-#: ../gui/wxpython/lmgr/toolbars.py:144
+#: ../gui/wxpython/lmgr/toolbars.py:163
 msgid "Launch user-defined script"
 msgstr "启动自定义脚本"
 
-#: ../gui/wxpython/lmgr/toolbars.py:178
+#: ../gui/wxpython/lmgr/toolbars.py:203
 msgid "GUI settings"
 msgstr "图形界面设置"
 
-#: ../gui/wxpython/lmgr/toolbars.py:179
+#: ../gui/wxpython/lmgr/toolbars.py:204
 msgid "GRASS manual"
 msgstr "GRASS使用手册"
 
-#: ../gui/wxpython/lmgr/toolbars.py:204
+#: ../gui/wxpython/lmgr/toolbars.py:232
 msgid "Edit selected vector map"
 msgstr "编辑选中的矢量图"
 
-#: ../gui/wxpython/lmgr/toolbars.py:206
+#: ../gui/wxpython/lmgr/toolbars.py:235
 msgid "Show attribute data for selected vector map"
 msgstr "显示选中矢量地图的属性数据"
 
-#: ../gui/wxpython/lmgr/toolbars.py:235
+#: ../gui/wxpython/lmgr/toolbars.py:267
 msgid "Generate command for m.nviz.image"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:236
+#: ../gui/wxpython/lmgr/toolbars.py:268
 msgid "Generate command for m.nviz.image based on current state"
 msgstr ""
 
-#: ../gui/wxpython/lmgr/toolbars.py:238
+#: ../gui/wxpython/lmgr/toolbars.py:271
 #, fuzzy
 msgid "3D view mode settings"
 msgstr "打开设置"
 
-#: ../gui/wxpython/lmgr/toolbars.py:239
+#: ../gui/wxpython/lmgr/toolbars.py:272
 #, fuzzy
 msgid "Show 3D view mode settings dialog"
 msgstr "显示/隐藏3D显示模式设置对话框"
 
-#: ../gui/wxpython/lmgr/toolbars.py:241
+#: ../gui/wxpython/lmgr/toolbars.py:275
 #, fuzzy
 msgid "Show 3D view mode manual"
 msgstr "查看三维显示模式帮助"
 
-#: ../gui/wxpython/wxplot/profile.py:34 ../gui/wxpython/nviz/wxnviz.py:32
+#: ../gui/wxpython/wxplot/profile.py:35 ../gui/wxpython/nviz/wxnviz.py:33
 msgid ""
 "This module requires the NumPy module, which could not be imported. It "
 "probably is not installed (it's not part of the standard Python "
@@ -8693,126 +9077,126 @@ msgstr ""
 "该模块需要使用的NumPy模块无法导入。可能没有安装该模块(非Python标准模块)。参"
 "见Numeric Python网站(http://numpy.scipy.org)查看下载源码或安装文件信息。"
 
-#: ../gui/wxpython/wxplot/profile.py:61
+#: ../gui/wxpython/wxplot/profile.py:63
 msgid "GRASS Profile Analysis Tool"
 msgstr "Grass剖面分析工具"
 
-#: ../gui/wxpython/wxplot/profile.py:77 ../gui/wxpython/wxplot/profile.py:168
+#: ../gui/wxpython/wxplot/profile.py:79 ../gui/wxpython/wxplot/profile.py:187
 msgid "Profile of"
 msgstr "剖面"
 
-#: ../gui/wxpython/wxplot/profile.py:93
+#: ../gui/wxpython/wxplot/profile.py:108
 #, python-format
 msgid "Distance (%s)"
 msgstr "距离(%s)"
 
-#: ../gui/wxpython/wxplot/profile.py:95
+#: ../gui/wxpython/wxplot/profile.py:110
 msgid "Distance along transect"
 msgstr "截面距离"
 
-#: ../gui/wxpython/wxplot/profile.py:96
+#: ../gui/wxpython/wxplot/profile.py:111
 msgid "Cell values"
 msgstr "像素值"
 
-#: ../gui/wxpython/wxplot/profile.py:161
+#: ../gui/wxpython/wxplot/profile.py:180
 msgid "Not all points of profile lie inside computational region."
 msgstr "剖面上一些点没有处于计算区域内."
 
-#: ../gui/wxpython/wxplot/profile.py:228
+#: ../gui/wxpython/wxplot/profile.py:251
 msgid "Raster values"
 msgstr "栅格值"
 
-#: ../gui/wxpython/wxplot/profile.py:279
+#: ../gui/wxpython/wxplot/profile.py:304
 msgid "You must draw a transect to profile in the map display window."
 msgstr "必需在地图窗口选定一个区域以进行剖析."
 
-#: ../gui/wxpython/wxplot/profile.py:280
+#: ../gui/wxpython/wxplot/profile.py:305
 msgid "Nothing to profile"
 msgstr "没有可以进行剖析的内容"
 
-#: ../gui/wxpython/wxplot/profile.py:342
+#: ../gui/wxpython/wxplot/profile.py:373
 msgid "Choose prefix for file(s) where to save profile values..."
 msgstr "选择剖析值文件保存路径..."
 
-#: ../gui/wxpython/wxplot/profile.py:344
+#: ../gui/wxpython/wxplot/profile.py:375
 #, fuzzy
 msgid "Comma separated value (*.csv)|*.csv"
 msgstr "以逗号分隔值的列表:如1.4,3.8,13"
 
-#: ../gui/wxpython/wxplot/profile.py:354
+#: ../gui/wxpython/wxplot/profile.py:389
 #, fuzzy
 msgid "Overwrite file?"
 msgstr "覆盖已有的输出地图文件"
 
-#: ../gui/wxpython/wxplot/profile.py:365
+#: ../gui/wxpython/wxplot/profile.py:400
 #, fuzzy, python-format
 msgid ""
 "Unable to open file <%s> for writing.\n"
 "Reason: %s"
 msgstr "无法打开文件<%s>。"
 
-#: ../gui/wxpython/wxplot/profile.py:377
+#: ../gui/wxpython/wxplot/profile.py:416
 #, fuzzy, python-format
 msgid ""
 "%d files created:\n"
 "%s"
 msgstr "%d 个点写入矢量文件"
 
-#: ../gui/wxpython/wxplot/profile.py:379
+#: ../gui/wxpython/wxplot/profile.py:419
 #, fuzzy
 msgid "No files generated."
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/wxplot/profile.py:387
+#: ../gui/wxpython/wxplot/profile.py:427
 #, fuzzy
 msgid "Statistics for Profile(s)"
 msgstr "报告栅格图层的统计数据"
 
-#: ../gui/wxpython/wxplot/scatter.py:46
+#: ../gui/wxpython/wxplot/scatter.py:48
 msgid "GRASS Bivariate Scatterplot Tool"
 msgstr "GRASS二元散点图工具"
 
-#: ../gui/wxpython/wxplot/scatter.py:53
+#: ../gui/wxpython/wxplot/scatter.py:55
 msgid "Bivariate Scatterplot"
 msgstr "二元散点图"
 
-#: ../gui/wxpython/wxplot/scatter.py:54 ../gui/wxpython/wxplot/scatter.py:55
-#: ../gui/wxpython/wxplot/histogram.py:54
-#: ../gui/wxpython/wxplot/histogram.py:143
+#: ../gui/wxpython/wxplot/scatter.py:56 ../gui/wxpython/wxplot/scatter.py:57
+#: ../gui/wxpython/wxplot/histogram.py:56
+#: ../gui/wxpython/wxplot/histogram.py:160
 #, fuzzy
 msgid "Raster cell values"
 msgstr "计算栅格像元值的总和。"
 
-#: ../gui/wxpython/wxplot/scatter.py:91 ../gui/wxpython/wxplot/scatter.py:236
+#: ../gui/wxpython/wxplot/scatter.py:106 ../gui/wxpython/wxplot/scatter.py:258
 #, fuzzy
 msgid "Nothing to plot."
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/wxplot/scatter.py:101
+#: ../gui/wxpython/wxplot/scatter.py:117
 #, fuzzy
 msgid "At least 2 raster maps must be specified"
 msgstr "必须指定两个图层"
 
-#: ../gui/wxpython/wxplot/scatter.py:122
+#: ../gui/wxpython/wxplot/scatter.py:140
 msgid "Bivariate Scatterplot of "
 msgstr "二元散点图"
 
-#: ../gui/wxpython/wxplot/scatter.py:140 ../gui/wxpython/wxplot/scatter.py:141
+#: ../gui/wxpython/wxplot/scatter.py:161 ../gui/wxpython/wxplot/scatter.py:162
 #, fuzzy, python-format
 msgid "Raster <%s> cell values"
 msgstr "计算栅格像元值的总和。"
 
-#: ../gui/wxpython/wxplot/scatter.py:145 ../gui/wxpython/wxplot/scatter.py:149
+#: ../gui/wxpython/wxplot/scatter.py:166 ../gui/wxpython/wxplot/scatter.py:170
 #, fuzzy, python-format
 msgid ": %s"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/wxplot/scatter.py:242
+#: ../gui/wxpython/wxplot/scatter.py:264
 #, fuzzy
 msgid "Regression Statistics for Scatterplot(s)"
 msgstr "报告栅格图层的统计数据"
 
-#: ../gui/wxpython/wxplot/scatter.py:254
+#: ../gui/wxpython/wxplot/scatter.py:275
 #, python-format
 msgid ""
 "Regression equation for raster map <%(rast1)s> vs. <%(rast2)s>:\n"
@@ -8821,507 +9205,512 @@ msgstr ""
 "栅格地图<%(rast1)s>对<%(rast2)s>的回归方程:\n"
 "\n"
 
-#: ../gui/wxpython/wxplot/base.py:39
+#: ../gui/wxpython/wxplot/base.py:40
 msgid "Draw/re-draw plot"
 msgstr "绘制/重绘图像"
 
-#: ../gui/wxpython/wxplot/base.py:41
+#: ../gui/wxpython/wxplot/base.py:43
 msgid "Draw transect in map display window to profile"
 msgstr "在地图显示窗口中画样线以查看剖面线图"
 
-#: ../gui/wxpython/wxplot/base.py:43
+#: ../gui/wxpython/wxplot/base.py:46
 #, fuzzy
 msgid "Plot options"
 msgstr "选项设置"
 
-#: ../gui/wxpython/wxplot/base.py:45
+#: ../gui/wxpython/wxplot/base.py:49
 #, fuzzy
 msgid "Plot statistics"
 msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/wxplot/base.py:47
+#: ../gui/wxpython/wxplot/base.py:52
 #, fuzzy
 msgid "Save profile data to CSV file"
 msgstr "保存剖面线图为csv文件"
 
-#: ../gui/wxpython/wxplot/base.py:48
+#: ../gui/wxpython/wxplot/base.py:54
 #, fuzzy
 msgid "Quit plot tool"
 msgstr "退出数字化工具"
 
-#: ../gui/wxpython/wxplot/base.py:439
+#: ../gui/wxpython/wxplot/base.py:488
 #, fuzzy
 msgid "Left Mouse Down at Point:"
 msgstr "左:创建新点"
 
-#: ../gui/wxpython/wxplot/base.py:466 ../gui/wxpython/wxplot/base.py:532
-#: ../gui/wxpython/wxplot/dialogs.py:561
+#: ../gui/wxpython/wxplot/base.py:520 ../gui/wxpython/wxplot/base.py:587
+#: ../gui/wxpython/wxplot/dialogs.py:663
 msgid "Text settings"
 msgstr "文本设置"
 
-#: ../gui/wxpython/wxplot/base.py:470 ../gui/wxpython/wxplot/base.py:546
-#: ../gui/wxpython/wxplot/dialogs.py:828
+#: ../gui/wxpython/wxplot/base.py:524 ../gui/wxpython/wxplot/base.py:601
+#: ../gui/wxpython/wxplot/dialogs.py:985
 #, fuzzy
 msgid "Plot settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/wxplot/base.py:483
+#: ../gui/wxpython/wxplot/base.py:537
 msgid "This feature is not yet functional"
 msgstr "该功能尚不可用"
 
-#: ../gui/wxpython/wxplot/base.py:484
+#: ../gui/wxpython/wxplot/base.py:538
 #, fuzzy
 msgid "Under Construction"
 msgstr "无法创建表:%s"
 
-#: ../gui/wxpython/wxplot/histogram.py:45
+#: ../gui/wxpython/wxplot/histogram.py:47
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/wxplot/histogram.py:53
+#: ../gui/wxpython/wxplot/histogram.py:55
 msgid "Histogram of"
 msgstr "直方图"
 
-#: ../gui/wxpython/wxplot/histogram.py:55
-#: ../gui/wxpython/wxplot/histogram.py:148
+#: ../gui/wxpython/wxplot/histogram.py:57
+#: ../gui/wxpython/wxplot/histogram.py:166
 msgid "Cell counts"
 msgstr "像素数量"
 
-#: ../gui/wxpython/wxplot/histogram.py:129
+#: ../gui/wxpython/wxplot/histogram.py:145
 #, fuzzy, python-format
 msgid "Histogram of image group <%s>"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/wxplot/histogram.py:132
+#: ../gui/wxpython/wxplot/histogram.py:149
 #, fuzzy, python-format
 msgid "Histogram of raster map <%s>"
 msgstr "创建图像或栅格文件的直方图"
 
-#: ../gui/wxpython/wxplot/histogram.py:134
+#: ../gui/wxpython/wxplot/histogram.py:151
 #, fuzzy
 msgid "Histogram of selected raster maps"
 msgstr "创建图像或栅格文件的直方图"
 
-#: ../gui/wxpython/wxplot/histogram.py:141
+#: ../gui/wxpython/wxplot/histogram.py:158
 #, fuzzy, python-format
 msgid "Raster cell values %s"
 msgstr "计算栅格像元值的总和。"
 
-#: ../gui/wxpython/wxplot/histogram.py:149
+#: ../gui/wxpython/wxplot/histogram.py:168
 msgid "Percent of total cells"
 msgstr "总像素的百分比"
 
-#: ../gui/wxpython/wxplot/histogram.py:150
+#: ../gui/wxpython/wxplot/histogram.py:170
 #, fuzzy
 msgid "Area"
 msgstr "面\n"
 
-#: ../gui/wxpython/wxplot/histogram.py:233
+#: ../gui/wxpython/wxplot/histogram.py:256
 msgid "Statistics for Map(s) Histogrammed"
 msgstr "已绘制直方图地图的统计量"
 
-#: ../gui/wxpython/wxplot/histogram.py:237
+#: ../gui/wxpython/wxplot/histogram.py:261
 #, fuzzy, python-format
 msgid "Statistics for raster map <%s>"
 msgstr "报告栅格图层的统计数据"
 
-#: ../gui/wxpython/wxplot/dialogs.py:38
+#: ../gui/wxpython/wxplot/dialogs.py:40
 #, fuzzy
 msgid "Select raster maps to profile"
 msgstr "栅格地图: "
 
-#: ../gui/wxpython/wxplot/dialogs.py:67
+#: ../gui/wxpython/wxplot/dialogs.py:80
 #, fuzzy
 msgid "Select raster map(s) to profile:"
 msgstr "栅格地图: "
 
-#: ../gui/wxpython/wxplot/dialogs.py:109
+#: ../gui/wxpython/wxplot/dialogs.py:131
 msgid "Select pairs of raster maps for scatterplots"
 msgstr "选择并配对栅格地图以绘制散点图"
 
-#: ../gui/wxpython/wxplot/dialogs.py:145
+#: ../gui/wxpython/wxplot/dialogs.py:179
 msgid "Select pairs of raster maps for bivariate scatterplots:"
 msgstr "选择并配对栅格地图以绘制二元散点图:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:160 ../gui/wxpython/wxplot/dialogs.py:409
+#: ../gui/wxpython/wxplot/dialogs.py:194 ../gui/wxpython/wxplot/dialogs.py:501
 msgid "Number of bins (for FP maps)"
 msgstr "组数(浮点地图)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:297
+#: ../gui/wxpython/wxplot/dialogs.py:359
 msgid "C&opy"
 msgstr "拷贝(&C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:298
+#: ../gui/wxpython/wxplot/dialogs.py:361
 msgid "Copy regression statistics the clipboard (Ctrl+C)"
 msgstr "将回归统计量拷贝到剪贴板(Ctrl+C)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:327
+#: ../gui/wxpython/wxplot/dialogs.py:402
 #, fuzzy
 msgid "Regression statistics copied to clipboard"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/wxplot/dialogs.py:336
+#: ../gui/wxpython/wxplot/dialogs.py:413
 msgid "Select raster map or imagery group to histogram"
 msgstr "选择栅格地图或图像组以绘制柱形图"
 
-#: ../gui/wxpython/wxplot/dialogs.py:362
+#: ../gui/wxpython/wxplot/dialogs.py:441
 #, fuzzy
 msgid "Histogram single raster"
 msgstr "创建图像或栅格文件的直方图"
 
-#: ../gui/wxpython/wxplot/dialogs.py:363
+#: ../gui/wxpython/wxplot/dialogs.py:444
 msgid "Histogram imagery group"
 msgstr "柱形图图像组"
 
-#: ../gui/wxpython/wxplot/dialogs.py:375
-#: ../gui/wxpython/modules/colorrules.py:383
+#: ../gui/wxpython/wxplot/dialogs.py:466
+#: ../gui/wxpython/modules/colorrules.py:412
 msgid "Select raster map:"
 msgstr "选择栅格地图:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:394
+#: ../gui/wxpython/wxplot/dialogs.py:485
 #, fuzzy
 msgid "Select image group:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/wxplot/dialogs.py:420
+#: ../gui/wxpython/wxplot/dialogs.py:514
 #, fuzzy
 msgid "Histogram type"
 msgstr "要素类型"
 
-#: ../gui/wxpython/wxplot/dialogs.py:499
+#: ../gui/wxpython/wxplot/dialogs.py:600
 #, fuzzy
 msgid "Selected group must be in current mapset"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/wxplot/dialogs.py:568
+#: ../gui/wxpython/wxplot/dialogs.py:673
 msgid "Profile title:"
 msgstr "剖面图标题:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:578
+#: ../gui/wxpython/wxplot/dialogs.py:687
 msgid "Title font size (pts):"
 msgstr "标题字号(磅):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:589
+#: ../gui/wxpython/wxplot/dialogs.py:704
 msgid "X-axis label:"
 msgstr "X轴标题:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:599
+#: ../gui/wxpython/wxplot/dialogs.py:718
 msgid "Y-axis label:"
 msgstr "Y轴标签:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:609
+#: ../gui/wxpython/wxplot/dialogs.py:732
 msgid "Label font size (pts):"
 msgstr "标签字号(磅):"
 
-#: ../gui/wxpython/wxplot/dialogs.py:631
+#: ../gui/wxpython/wxplot/dialogs.py:760
 msgid "Font family:"
 msgstr "字体系列:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:645
+#: ../gui/wxpython/wxplot/dialogs.py:776
 msgid "Style:"
 msgstr "样式:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:659
+#: ../gui/wxpython/wxplot/dialogs.py:792
 msgid "Weight:"
 msgstr "粗细:"
 
-#: ../gui/wxpython/wxplot/dialogs.py:692 ../gui/wxpython/wxplot/dialogs.py:1140
+#: ../gui/wxpython/wxplot/dialogs.py:831 ../gui/wxpython/wxplot/dialogs.py:1429
 msgid "Apply changes for the current session and close dialog"
 msgstr "将变动应用到当前会话并关闭对话框"
 
-#: ../gui/wxpython/wxplot/dialogs.py:748
+#: ../gui/wxpython/wxplot/dialogs.py:903
 #, fuzzy, python-format
 msgid "Plot text sizes saved to file '%s'."
 msgstr "已有的MAT-File(v4)的名称"
 
-#: ../gui/wxpython/wxplot/dialogs.py:806
+#: ../gui/wxpython/wxplot/dialogs.py:963
 #, fuzzy
 msgid "No map or image group selected to plot."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/wxplot/dialogs.py:848
+#: ../gui/wxpython/wxplot/dialogs.py:1006
 msgid "Map/image plotted"
 msgstr "已绘制的地图/图像"
 
-#: ../gui/wxpython/wxplot/dialogs.py:860
+#: ../gui/wxpython/wxplot/dialogs.py:1018
 #, fuzzy
 msgid "Settings for selected map"
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/wxplot/dialogs.py:876
+#: ../gui/wxpython/wxplot/dialogs.py:1036
 msgid "Line color"
 msgstr "线条颜色"
 
-#: ../gui/wxpython/wxplot/dialogs.py:917
+#: ../gui/wxpython/wxplot/dialogs.py:1103
 msgid "Transect segment marker settings"
 msgstr "截面分段标记设置"
 
-#: ../gui/wxpython/wxplot/dialogs.py:967
+#: ../gui/wxpython/wxplot/dialogs.py:1185
 #, fuzzy
 msgid "Scatterplot points"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1018
+#: ../gui/wxpython/wxplot/dialogs.py:1267
 msgid "Axis settings"
 msgstr "坐标轴设置"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1024
+#: ../gui/wxpython/wxplot/dialogs.py:1273
 msgid "X-Axis"
 msgstr "X-轴"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1025
+#: ../gui/wxpython/wxplot/dialogs.py:1274
 msgid "Y-Axis"
 msgstr "Y-轴"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1034
+#: ../gui/wxpython/wxplot/dialogs.py:1283
 #, fuzzy
 msgid "Scale"
 msgstr "保存"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1038
+#: ../gui/wxpython/wxplot/dialogs.py:1295
 msgid ""
 "Automatic axis scaling, custom max and min, or scale matches data range (min)"
 msgstr "自动调整坐标刻度,自定义极值,或根据数据范围调整(最小值)"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1043
+#: ../gui/wxpython/wxplot/dialogs.py:1303
 msgid "Custom min"
 msgstr "指定最小值"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1051
+#: ../gui/wxpython/wxplot/dialogs.py:1320
 msgid "Custom max"
 msgstr "指定最大值"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1059
+#: ../gui/wxpython/wxplot/dialogs.py:1334
 msgid "Log scale"
 msgstr "圣火刻度"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1083
+#: ../gui/wxpython/wxplot/dialogs.py:1358
 msgid "Grid and Legend settings"
 msgstr "网格和图例设置"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1088
+#: ../gui/wxpython/wxplot/dialogs.py:1363
 #, fuzzy
 msgid "Grid color"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1095
+#: ../gui/wxpython/wxplot/dialogs.py:1373
 msgid "Show grid"
 msgstr "显示网格"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1101
+#: ../gui/wxpython/wxplot/dialogs.py:1382
 msgid "Legend font size"
 msgstr "图例字号"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1111
+#: ../gui/wxpython/wxplot/dialogs.py:1396
 msgid "Show legend"
 msgstr "显示图例"
 
-#: ../gui/wxpython/wxplot/dialogs.py:1251
+#: ../gui/wxpython/wxplot/dialogs.py:1596
 #, fuzzy, python-format
 msgid "Plot settings saved to file '%s'."
 msgstr "已有的MAT-File(v4)的名称"
 
-#: ../gui/wxpython/tplot/frame.py:42
+#: ../gui/wxpython/tplot/frame.py:43
 msgid ""
 "The Temporal Plot Tool needs the \"matplotlib\" (python-matplotlib) package "
 "to be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:95
+#: ../gui/wxpython/tplot/frame.py:97
 #, fuzzy
 msgid "GRASS GIS Temporal Plot Tool"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/tplot/frame.py:173
+#: ../gui/wxpython/tplot/frame.py:179
 #, fuzzy
 msgid "Raster temporal dataset (strds)"
-msgstr "注册地图到数据集"
+msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/tplot/frame.py:181
+#: ../gui/wxpython/tplot/frame.py:186
 msgid "X and Y coordinates separated by comma:"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:193
+#: ../gui/wxpython/tplot/frame.py:198
 msgid ""
 "Coordinates can be obtained for example by right-clicking on Map Display."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:208
+#: ../gui/wxpython/tplot/frame.py:213
 msgid "STRDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:215
-msgid "Vector temporal dataset (strds)"
+#: ../gui/wxpython/tplot/frame.py:221
+msgid ""
+"Vector temporal dataset (strds)\n"
+"Please press enter if you digit the name instead select with combobox"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:226
+#: ../gui/wxpython/tplot/frame.py:236
 #, fuzzy
 msgid "Select attribute column"
 msgstr "根据要素属性选择"
 
-#: ../gui/wxpython/tplot/frame.py:237
+#: ../gui/wxpython/tplot/frame.py:249
 #, fuzzy
 msgid "Select category of vector(s)"
-msgstr "栅格地图: "
+msgstr "无法打开输入的dig文件。"
 
-#: ../gui/wxpython/tplot/frame.py:255
+#: ../gui/wxpython/tplot/frame.py:267
 msgid "STVDS"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:264 ../gui/wxpython/timeline/frame.py:127
-#: ../gui/wxpython/nviz/tools.py:676 ../gui/wxpython/nviz/tools.py:1558
-#: ../gui/wxpython/nviz/preferences.py:368
+#: ../gui/wxpython/tplot/frame.py:275 ../gui/wxpython/timeline/frame.py:133
+#: ../gui/wxpython/nviz/tools.py:849 ../gui/wxpython/nviz/tools.py:1888
+#: ../gui/wxpython/nviz/preferences.py:404
 msgid "Draw"
 msgstr "绘制"
 
-#: ../gui/wxpython/tplot/frame.py:267 ../gui/wxpython/menustrings.py:1972
-#: ../gui/wxpython/menustrings.py:2015 ../gui/wxpython/timeline/frame.py:129
+#: ../gui/wxpython/tplot/frame.py:278 ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:2021 ../gui/wxpython/timeline/frame.py:135
 msgid "Help"
 msgstr "帮助"
 
-#: ../gui/wxpython/tplot/frame.py:292 ../gui/wxpython/tplot/frame.py:400
-#: ../gui/wxpython/timeline/frame.py:163
+#: ../gui/wxpython/tplot/frame.py:295 ../gui/wxpython/tplot/frame.py:715
+#: ../gui/wxpython/tplot/frame.py:719 ../gui/wxpython/tplot/frame.py:740
+#: ../gui/wxpython/tplot/frame.py:866
+#, fuzzy
+msgid "Invalid input coordinates"
+msgstr "无效的区域:%s"
+
+#: ../gui/wxpython/tplot/frame.py:307 ../gui/wxpython/tplot/frame.py:418
+#: ../gui/wxpython/timeline/frame.py:178
 #, fuzzy, python-format
 msgid "Dataset <%s> not found in temporal database"
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/tplot/frame.py:309 ../gui/wxpython/tplot/frame.py:418
-#: ../gui/wxpython/timeline/frame.py:175
+#: ../gui/wxpython/tplot/frame.py:325 ../gui/wxpython/tplot/frame.py:437
+#: ../gui/wxpython/timeline/frame.py:194
 msgid ""
 "Datasets have different temporal type (absolute x relative), which is not "
 "allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:324 ../gui/wxpython/tplot/frame.py:427
-#: ../gui/wxpython/timeline/frame.py:190
+#: ../gui/wxpython/tplot/frame.py:342 ../gui/wxpython/tplot/frame.py:447
+#: ../gui/wxpython/timeline/frame.py:213
 msgid "Datasets have different time unit which is not allowed."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:366
+#: ../gui/wxpython/tplot/frame.py:384
 #, python-brace-format
 msgid "Category {ca} is not on vector map {ma} and it will be used"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:385
+#: ../gui/wxpython/tplot/frame.py:403
 msgid ""
 "Both coordinates and categories are set, coordinates will be used. The use "
 "categories remove text from coordinate form"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:390
+#: ../gui/wxpython/tplot/frame.py:408
 msgid "With Vector temporal dataset you have to select an attribute column"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:440
+#: ../gui/wxpython/tplot/frame.py:460
 msgid ""
 "Difference number of vector layers and maps in the vector temporal dataset"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:478
+#: ../gui/wxpython/tplot/frame.py:502
 #, python-brace-format
 msgid "No connection between vector map {vmap} and layer {la}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:549 ../gui/wxpython/tplot/frame.py:588
-#: ../gui/wxpython/tplot/frame.py:625
+#: ../gui/wxpython/tplot/frame.py:576 ../gui/wxpython/tplot/frame.py:618
+#: ../gui/wxpython/tplot/frame.py:661
 msgid ""
 "Problem getting data from raster temporal dataset. Empty list of values."
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:560 ../gui/wxpython/tplot/frame.py:599
-#: ../gui/wxpython/tplot/frame.py:636
+#: ../gui/wxpython/tplot/frame.py:588 ../gui/wxpython/tplot/frame.py:635
+#: ../gui/wxpython/tplot/frame.py:673
 #, fuzzy, python-format
 msgid "Temporal resolution: %s"
-msgstr "时间数据集合计"
+msgstr "导入地图 %d 的要素..."
 
-#: ../gui/wxpython/tplot/frame.py:562 ../gui/wxpython/tplot/frame.py:601
-#: ../gui/wxpython/tplot/frame.py:638 ../gui/wxpython/timeline/frame.py:327
+#: ../gui/wxpython/tplot/frame.py:590 ../gui/wxpython/tplot/frame.py:637
+#: ../gui/wxpython/tplot/frame.py:675 ../gui/wxpython/timeline/frame.py:371
 #, python-format
 msgid "Time [%s]"
 msgstr "时间 [%s]"
 
-#: ../gui/wxpython/tplot/frame.py:671
+#: ../gui/wxpython/tplot/frame.py:708
 msgid "Incorrect coordinates format, should be: x,y"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:678 ../gui/wxpython/tplot/frame.py:682
-#: ../gui/wxpython/tplot/frame.py:697 ../gui/wxpython/tplot/frame.py:818
+#: ../gui/wxpython/tplot/frame.py:724
 #, fuzzy
-msgid "Invalid input coordinates"
-msgstr "无效的区域:%s"
+msgid "Seed point outside the current region"
+msgstr "生成区域边界"
 
-#: ../gui/wxpython/tplot/frame.py:693
+#: ../gui/wxpython/tplot/frame.py:736
 #, fuzzy
 msgid "Invalid input raster dataset"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/tplot/frame.py:710
+#: ../gui/wxpython/tplot/frame.py:753
 #, fuzzy
 msgid "Invalid input vector dataset"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/tplot/frame.py:768 ../gui/wxpython/timeline/frame.py:415
+#: ../gui/wxpython/tplot/frame.py:815 ../gui/wxpython/timeline/frame.py:476
 #, python-format
 msgid "Please specify the space time dataset <%s>."
 msgstr "请指定时空数据集<%s>。"
 
-#: ../gui/wxpython/tplot/frame.py:771 ../gui/wxpython/timeline/frame.py:416
+#: ../gui/wxpython/tplot/frame.py:818 ../gui/wxpython/timeline/frame.py:478
 msgid "Ambiguous dataset name"
 msgstr "含糊的数据集名称"
 
-#: ../gui/wxpython/tplot/frame.py:811
+#: ../gui/wxpython/tplot/frame.py:859 ../gui/wxpython/tplot/frame.py:896
 #, fuzzy
 msgid "Invalid input temporal dataset"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/tplot/frame.py:858
+#: ../gui/wxpython/tplot/frame.py:917
 msgid "Datasets have different number of values"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:882 ../gui/wxpython/timeline/frame.py:494
+#: ../gui/wxpython/tplot/frame.py:941 ../gui/wxpython/timeline/frame.py:562
 #, fuzzy, python-format
 msgid "Space time raster dataset: %s"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/tplot/frame.py:884 ../gui/wxpython/timeline/frame.py:496
+#: ../gui/wxpython/tplot/frame.py:943 ../gui/wxpython/timeline/frame.py:564
 #, fuzzy, python-format
 msgid "Space time vector dataset: %s"
 msgstr "导入矢量数据"
 
-#: ../gui/wxpython/tplot/frame.py:886 ../gui/wxpython/timeline/frame.py:498
+#: ../gui/wxpython/tplot/frame.py:945 ../gui/wxpython/timeline/frame.py:566
 #, fuzzy, python-format
 msgid "Space time 3D raster dataset: %s"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/tplot/frame.py:888
+#: ../gui/wxpython/tplot/frame.py:947
 #, python-brace-format
 msgid "Value for {date} is {val}"
 msgstr ""
 
-#: ../gui/wxpython/tplot/frame.py:891
-#, fuzzy
+#: ../gui/wxpython/tplot/frame.py:950
 msgid "Press Del to dismiss."
 msgstr ""
-"\n"
-"按Del键解除。"
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:102
+#: ../gui/wxpython/tplot/g.gui.tplot.py:106
 msgid "With stvds you have to set 'attr' option"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:106
+#: ../gui/wxpython/tplot/g.gui.tplot.py:110
 msgid ""
 "With stvds it is not possible to use 'coordinates' and 'cats' options "
 "together"
 msgstr ""
 
-#: ../gui/wxpython/tplot/g.gui.tplot.py:109
+#: ../gui/wxpython/tplot/g.gui.tplot.py:113
 msgid "With stvds you have to use 'coordinates' or 'cats' option"
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1930
-#: ../gui/wxpython/menustrings.py:1978
+#: ../gui/wxpython/menustrings.py:3 ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1984
 msgid "&File"
 msgstr "文件(&F)"
 
@@ -9329,8 +9718,8 @@ msgstr "文件(&F)"
 msgid "Workspace"
 msgstr "工作区"
 
-#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1931
-#: ../gui/wxpython/nviz/tools.py:1098
+#: ../gui/wxpython/menustrings.py:5 ../gui/wxpython/menustrings.py:1935
+#: ../gui/wxpython/nviz/tools.py:1359
 msgid "New"
 msgstr "新建"
 
@@ -9338,7 +9727,7 @@ msgstr "新建"
 msgid "Create new workspace"
 msgstr "创建新工作区"
 
-#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1933
+#: ../gui/wxpython/menustrings.py:7 ../gui/wxpython/menustrings.py:1937
 msgid "Open"
 msgstr "打开"
 
@@ -9346,12 +9735,12 @@ msgstr "打开"
 msgid "Load workspace from file"
 msgstr "加载工作区文件"
 
-#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1935
-#: ../gui/wxpython/modules/colorrules.py:418
+#: ../gui/wxpython/menustrings.py:9 ../gui/wxpython/menustrings.py:1939
+#: ../gui/wxpython/modules/colorrules.py:452
 msgid "Save"
 msgstr "保存"
 
-#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1937
+#: ../gui/wxpython/menustrings.py:11 ../gui/wxpython/menustrings.py:1941
 msgid "Save as"
 msgstr "另存为"
 
@@ -9372,7 +9761,7 @@ msgid "Load map layers from GRC file to layer tree"
 msgstr "从GRC文件加载地图层到图层列表"
 
 #: ../gui/wxpython/menustrings.py:17
-#: ../gui/wxpython/web_services/dialogs.py:820
+#: ../gui/wxpython/web_services/dialogs.py:871
 msgid "Map display"
 msgstr "地图显示"
 
@@ -9401,7 +9790,7 @@ msgid "Add multiple raster or vector map layers to current display"
 msgstr "批量添加栅格或矢量图层到当前显示窗口"
 
 #: ../gui/wxpython/menustrings.py:24 ../gui/wxpython/menustrings.py:25
-#: ../gui/wxpython/web_services/dialogs.py:494
+#: ../gui/wxpython/web_services/dialogs.py:523
 msgid "Add web service layer"
 msgstr "添加网络图层"
 
@@ -10057,23 +10446,23 @@ msgstr "体积转换为栅格系列"
 msgid "Converts 3D raster maps to 2D raster maps"
 msgstr "将 3D 栅格图转化为 2D 栅格图"
 
-#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1918
+#: ../gui/wxpython/menustrings.py:189 ../gui/wxpython/menustrings.py:1920
 msgid "Georectify"
 msgstr "地理校正"
 
-#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1919
+#: ../gui/wxpython/menustrings.py:190 ../gui/wxpython/menustrings.py:1921
 msgid "Manage Ground Control Points for Georectification"
 msgstr "地理校正地面控制点管理"
 
-#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1920
+#: ../gui/wxpython/menustrings.py:191 ../gui/wxpython/menustrings.py:1922
 msgid "Graphical modeler"
 msgstr "建模器界面"
 
-#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1921
+#: ../gui/wxpython/menustrings.py:192 ../gui/wxpython/menustrings.py:1923
 msgid "Launch Graphical modeler"
 msgstr "启动建模器界面"
 
-#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1967
+#: ../gui/wxpython/menustrings.py:193 ../gui/wxpython/menustrings.py:1973
 msgid "Run model"
 msgstr "运行模型"
 
@@ -10114,15 +10503,15 @@ msgid ""
 msgstr ""
 "可将方位及距离度量与坐标进行双向转换的简单工具。转换于笛卡尔坐标系统上进行。"
 
-#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1927
+#: ../gui/wxpython/menustrings.py:202 ../gui/wxpython/menustrings.py:1919
 msgid "Launch Cartographic Composer"
 msgstr "启动地图绘制界面"
 
-#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1924
+#: ../gui/wxpython/menustrings.py:203 ../gui/wxpython/menustrings.py:1926
 msgid "Map Swipe"
 msgstr "地图比较(Map Swipe)"
 
-#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1925
+#: ../gui/wxpython/menustrings.py:204 ../gui/wxpython/menustrings.py:1927
 msgid "Launch Map Swipe"
 msgstr "启动地图比较(Map Swipe)"
 
@@ -10134,7 +10523,7 @@ msgstr "运行脚本"
 msgid "Launches script file."
 msgstr "运行脚本文件"
 
-#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2815
+#: ../gui/wxpython/menustrings.py:207 ../gui/wxpython/gui_core/dialogs.py:2346
 #, fuzzy
 msgid "Close GUI"
 msgstr "关闭"
@@ -10144,8 +10533,8 @@ msgstr "关闭"
 msgid "Quit wxGUI session."
 msgstr "结束GRASS wxGUI对话"
 
-#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2798
-#: ../gui/wxpython/gui_core/dialogs.py:2818
+#: ../gui/wxpython/menustrings.py:209 ../gui/wxpython/gui_core/dialogs.py:2324
+#: ../gui/wxpython/gui_core/dialogs.py:2349
 #, fuzzy
 msgid "Quit GRASS GIS"
 msgstr "退出GRASS"
@@ -10154,7 +10543,7 @@ msgstr "退出GRASS"
 msgid "Quit wxGUI session and exit GRASS shell."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1947
+#: ../gui/wxpython/menustrings.py:211 ../gui/wxpython/menustrings.py:1951
 msgid "&Settings"
 msgstr "设置(&S)"
 
@@ -10318,7 +10707,7 @@ msgstr "扩展管理"
 msgid "Updates or removes installed GRASS AddOns extension(s)."
 msgstr "更新或移除GRASS组件扩展"
 
-#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1948
+#: ../gui/wxpython/menustrings.py:252 ../gui/wxpython/menustrings.py:1952
 msgid "Preferences"
 msgstr "设置"
 
@@ -11369,7 +11758,7 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:486 ../gui/wxpython/menustrings.py:1393
-#: ../gui/wxpython/nviz/tools.py:4595
+#: ../gui/wxpython/nviz/tools.py:5180
 msgid "Plane"
 msgstr "平面"
 
@@ -11617,8 +12006,8 @@ msgid "Develop vector map"
 msgstr "矢量地图开发"
 
 #: ../gui/wxpython/menustrings.py:542 ../gui/wxpython/menustrings.py:1449
-#: ../gui/wxpython/gui_core/dialogs.py:236
-#: ../gui/wxpython/gui_core/dialogs.py:356
+#: ../gui/wxpython/gui_core/dialogs.py:262
+#: ../gui/wxpython/gui_core/dialogs.py:400
 msgid "Create new vector map"
 msgstr "新建矢量地图"
 
@@ -12484,12 +12873,12 @@ msgid ""
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:756 ../gui/wxpython/menustrings.py:1663
-#: ../gui/wxpython/menustrings.py:1922
+#: ../gui/wxpython/menustrings.py:1924
 msgid "Interactive input for supervised classification"
 msgstr "监督分类交互的输入"
 
 #: ../gui/wxpython/menustrings.py:757 ../gui/wxpython/menustrings.py:1664
-#: ../gui/wxpython/menustrings.py:1923
+#: ../gui/wxpython/menustrings.py:1925
 msgid ""
 "Generates spectral signatures by allowing the user to outline training areas."
 msgstr ""
@@ -13525,24 +13914,28 @@ msgid "GUI tools"
 msgstr "GUI工具"
 
 #: ../gui/wxpython/menustrings.py:1003 ../gui/wxpython/menustrings.py:1910
+#: ../gui/wxpython/menustrings.py:1930
 msgid "Timeline tool"
 msgstr "时间表工具"
 
 #: ../gui/wxpython/menustrings.py:1004 ../gui/wxpython/menustrings.py:1911
+#: ../gui/wxpython/menustrings.py:1931
 msgid "Plot temporal extents."
 msgstr ""
 
 #: ../gui/wxpython/menustrings.py:1005 ../gui/wxpython/menustrings.py:1912
+#: ../gui/wxpython/menustrings.py:1928
 #, fuzzy
 msgid "Temporal plot tool"
-msgstr "时间位移"
+msgstr "栅格图的名称"
 
 #: ../gui/wxpython/menustrings.py:1006 ../gui/wxpython/menustrings.py:1913
+#: ../gui/wxpython/menustrings.py:1929
 msgid "Plot temporal values."
 msgstr ""
 
-#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1971
-#: ../gui/wxpython/menustrings.py:2014
+#: ../gui/wxpython/menustrings.py:1007 ../gui/wxpython/menustrings.py:1977
+#: ../gui/wxpython/menustrings.py:2020
 msgid "&Help"
 msgstr "帮助(&H)"
 
@@ -13568,7 +13961,7 @@ msgid "Prints system information"
 msgstr "打印矢量的属性"
 
 #: ../gui/wxpython/menustrings.py:1014 ../gui/wxpython/menustrings.py:1015
-#: ../gui/wxpython/gui_core/ghelp.py:47
+#: ../gui/wxpython/gui_core/ghelp.py:48
 msgid "About GRASS GIS"
 msgstr "关于GRASS GIS"
 
@@ -13580,268 +13973,276 @@ msgstr "导入、导出、链接数据"
 msgid "Attribute table manager"
 msgstr "属性表管理器"
 
-#: ../gui/wxpython/menustrings.py:1932
+#: ../gui/wxpython/menustrings.py:1936
 msgid "Create new model"
 msgstr "创建新模型"
 
-#: ../gui/wxpython/menustrings.py:1934
+#: ../gui/wxpython/menustrings.py:1938
 msgid "Load model from file"
 msgstr "从文件载入模型"
 
-#: ../gui/wxpython/menustrings.py:1938
+#: ../gui/wxpython/menustrings.py:1942
 msgid "Save model to file"
 msgstr "将模型保存到文件"
 
-#: ../gui/wxpython/menustrings.py:1940
+#: ../gui/wxpython/menustrings.py:1944
 msgid "Close model file"
 msgstr "关闭模型文件"
 
-#: ../gui/wxpython/menustrings.py:1941
+#: ../gui/wxpython/menustrings.py:1945
 msgid "Export to image"
 msgstr "输出为图像"
 
-#: ../gui/wxpython/menustrings.py:1942
+#: ../gui/wxpython/menustrings.py:1946
 msgid "Export model to image"
 msgstr "将模型导出到图形"
 
-#: ../gui/wxpython/menustrings.py:1943
+#: ../gui/wxpython/menustrings.py:1947
 msgid "Export to Python"
 msgstr "导出到Python"
 
-#: ../gui/wxpython/menustrings.py:1944
+#: ../gui/wxpython/menustrings.py:1948
 msgid "Export model to Python script"
 msgstr "将模型导出到Python脚本"
 
-#: ../gui/wxpython/menustrings.py:1945
+#: ../gui/wxpython/menustrings.py:1949
 msgid "Quit modeler"
 msgstr "安静模式"
 
-#: ../gui/wxpython/menustrings.py:1946
+#: ../gui/wxpython/menustrings.py:1950
 msgid "Close modeler window"
 msgstr "关闭模型窗口"
 
-#: ../gui/wxpython/menustrings.py:1950
+#: ../gui/wxpython/menustrings.py:1954
 msgid "&Model"
 msgstr "模型(&M)"
 
-#: ../gui/wxpython/menustrings.py:1951
+#: ../gui/wxpython/menustrings.py:1955
 msgid "Add command"
 msgstr "添加指令"
 
-#: ../gui/wxpython/menustrings.py:1952
+#: ../gui/wxpython/menustrings.py:1956
 msgid "Add action (GRASS command) to model"
 msgstr "添加动作(GRASS指令)到模型"
 
-#: ../gui/wxpython/menustrings.py:1953
+#: ../gui/wxpython/menustrings.py:1957
 msgid "Add data"
 msgstr "添加数据"
 
-#: ../gui/wxpython/menustrings.py:1954
+#: ../gui/wxpython/menustrings.py:1958
 msgid "Add data item to model"
 msgstr "添加数据项到模型"
 
-#: ../gui/wxpython/menustrings.py:1955
+#: ../gui/wxpython/menustrings.py:1959
 msgid "Define relation"
 msgstr "定义关系"
 
-#: ../gui/wxpython/menustrings.py:1956
+#: ../gui/wxpython/menustrings.py:1960
 msgid "Define relation between data and action items"
 msgstr "定义数据和动作关系"
 
-#: ../gui/wxpython/menustrings.py:1957
+#: ../gui/wxpython/menustrings.py:1961
 msgid "Add loop / series"
 msgstr "添加循环/系列"
 
-#: ../gui/wxpython/menustrings.py:1958
+#: ../gui/wxpython/menustrings.py:1962
 msgid "Adds loop (series) to model"
 msgstr "添加循环/系列到模型"
 
-#: ../gui/wxpython/menustrings.py:1960
+#: ../gui/wxpython/menustrings.py:1963
+msgid "Add condition"
+msgstr "添加条件"
+
+#: ../gui/wxpython/menustrings.py:1964
+msgid "Adds condition (if/else) to model"
+msgstr "添加模型条件(if/else)"
+
+#: ../gui/wxpython/menustrings.py:1966
 msgid "Adds comment to model"
 msgstr "添加模型注释"
 
-#: ../gui/wxpython/menustrings.py:1961
+#: ../gui/wxpython/menustrings.py:1967
 msgid "Remove item"
 msgstr "移除项目"
 
-#: ../gui/wxpython/menustrings.py:1962
+#: ../gui/wxpython/menustrings.py:1968
 msgid "Remove action/data from model"
 msgstr "从模型中删除动作/数据。"
 
-#: ../gui/wxpython/menustrings.py:1964
+#: ../gui/wxpython/menustrings.py:1970
 msgid "Model properties (name, purpose, etc.)"
 msgstr "模型属性(名称、目的等)"
 
-#: ../gui/wxpython/menustrings.py:1965
+#: ../gui/wxpython/menustrings.py:1971
 msgid "Delete intermediate data"
 msgstr "删除中间数据"
 
-#: ../gui/wxpython/menustrings.py:1966
+#: ../gui/wxpython/menustrings.py:1972
 msgid "Delete intermediate data defined in the model"
 msgstr "删除模型的中间数据"
 
-#: ../gui/wxpython/menustrings.py:1968
+#: ../gui/wxpython/menustrings.py:1974
 msgid "Run entire model"
 msgstr "运行整个模型"
 
-#: ../gui/wxpython/menustrings.py:1969
+#: ../gui/wxpython/menustrings.py:1975
 msgid "Validate model"
 msgstr "验证模型"
 
-#: ../gui/wxpython/menustrings.py:1970
+#: ../gui/wxpython/menustrings.py:1976
 msgid "Validate entire model"
 msgstr "验证整个模型"
 
-#: ../gui/wxpython/menustrings.py:1973
+#: ../gui/wxpython/menustrings.py:1979
 msgid "Display the HTML man pages of Graphical modeler"
 msgstr "显示图形建模器的HTML帮助文件"
 
-#: ../gui/wxpython/menustrings.py:1974
+#: ../gui/wxpython/menustrings.py:1980
 msgid "About Graphical Modeler"
 msgstr "关于图形建模器"
 
-#: ../gui/wxpython/menustrings.py:1975
+#: ../gui/wxpython/menustrings.py:1981
 msgid "Display information about Graphical Modeler"
 msgstr "显示图形建模器信息"
 
-#: ../gui/wxpython/menustrings.py:1981
+#: ../gui/wxpython/menustrings.py:1987
 msgid "Load instruction file"
 msgstr "载入示例文件"
 
-#: ../gui/wxpython/menustrings.py:1983
+#: ../gui/wxpython/menustrings.py:1989
 msgid "Export instruction file"
 msgstr "导出示例文件"
 
-#: ../gui/wxpython/menustrings.py:1985
+#: ../gui/wxpython/menustrings.py:1991
 msgid "Export to PostScript"
 msgstr "导出到PostScript"
 
-#: ../gui/wxpython/menustrings.py:1987
+#: ../gui/wxpython/menustrings.py:1993
 msgid "Export to PDF"
 msgstr "导出到PDF"
 
-#: ../gui/wxpython/menustrings.py:1989 ../gui/wxpython/menustrings.py:1990
+#: ../gui/wxpython/menustrings.py:1995 ../gui/wxpython/menustrings.py:1996
 msgid "Launch ps.map dialog"
 msgstr "启动ps.map对话框"
 
-#: ../gui/wxpython/menustrings.py:1992
+#: ../gui/wxpython/menustrings.py:1998
 msgid "Close Cartographic Composer"
 msgstr "启动地图绘制器"
 
-#: ../gui/wxpython/menustrings.py:1993
+#: ../gui/wxpython/menustrings.py:1999
 msgid "&Insert"
 msgstr "插入(&I)"
 
-#: ../gui/wxpython/menustrings.py:1995
+#: ../gui/wxpython/menustrings.py:2001
 msgid "Add or edit map frame"
 msgstr "添加或编辑地图框架"
 
-#: ../gui/wxpython/menustrings.py:1997
+#: ../gui/wxpython/menustrings.py:2003
 msgid "Add or edit raster map"
 msgstr "添加或编辑栅格图"
 
-#: ../gui/wxpython/menustrings.py:1999
+#: ../gui/wxpython/menustrings.py:2005
 msgid "Add or edit vector map"
 msgstr "添加或编辑矢量图"
 
-#: ../gui/wxpython/menustrings.py:2000
+#: ../gui/wxpython/menustrings.py:2006
 msgid "Map legend"
 msgstr "添加图例"
 
-#: ../gui/wxpython/menustrings.py:2001
+#: ../gui/wxpython/menustrings.py:2007
 msgid "Add or edit raster and vector legend"
 msgstr "添加或编辑图例"
 
-#: ../gui/wxpython/menustrings.py:2003
+#: ../gui/wxpython/menustrings.py:2009
 msgid "Add or edit map info"
 msgstr "添加或编辑地图信息"
 
-#: ../gui/wxpython/menustrings.py:2005
+#: ../gui/wxpython/menustrings.py:2011
 msgid "Add or edit scale bar"
 msgstr "添加或编辑比例尺"
 
-#: ../gui/wxpython/menustrings.py:2011
+#: ../gui/wxpython/menustrings.py:2017
 msgid "Add north arrow"
 msgstr "添加指北针"
 
-#: ../gui/wxpython/menustrings.py:2016
+#: ../gui/wxpython/menustrings.py:2022
 msgid "Display the HTML man pages of Cartographic Composer"
 msgstr "显示地图绘制器HTML帮助文件"
 
-#: ../gui/wxpython/menustrings.py:2017
+#: ../gui/wxpython/menustrings.py:2023
 msgid "About Cartographic Composer"
 msgstr "启动地图绘制"
 
-#: ../gui/wxpython/menustrings.py:2018
+#: ../gui/wxpython/menustrings.py:2024
 msgid "Display information about Cartographic Composer"
 msgstr "显示地图绘制窗口信息"
 
-#: ../gui/wxpython/gui_core/goutput.py:114
+#: ../gui/wxpython/gui_core/goutput.py:122
 msgid "Click here to show search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:115
+#: ../gui/wxpython/gui_core/goutput.py:124
 msgid "Click here to hide search module engine"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:130
+#: ../gui/wxpython/gui_core/goutput.py:141
 msgid "Command prompt"
 msgstr "命令运行结果输出"
 
-#: ../gui/wxpython/gui_core/goutput.py:132
+#: ../gui/wxpython/gui_core/goutput.py:146
 msgid "Output window"
 msgstr "输出窗口"
 
-#: ../gui/wxpython/gui_core/goutput.py:139
+#: ../gui/wxpython/gui_core/goutput.py:154
 #, fuzzy
 msgid "Clear output window content"
 msgstr "创建 3D 输出"
 
-#: ../gui/wxpython/gui_core/goutput.py:141
+#: ../gui/wxpython/gui_core/goutput.py:156
 msgid "Clear command prompt content"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:143
+#: ../gui/wxpython/gui_core/goutput.py:159
 msgid "Save output window content to the file"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:145
+#: ../gui/wxpython/gui_core/goutput.py:161
 msgid "Abort running command"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:147
+#: ../gui/wxpython/gui_core/goutput.py:165
 msgid "&Log file"
 msgstr "日志文件"
 
-#: ../gui/wxpython/gui_core/goutput.py:149
+#: ../gui/wxpython/gui_core/goutput.py:167
 msgid ""
 "Toggle to save list of executed commands into a file; content saved when "
 "switching off."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:374
-#: ../gui/wxpython/gui_core/goutput.py:461
+#: ../gui/wxpython/gui_core/goutput.py:416
+#: ../gui/wxpython/gui_core/goutput.py:512
 msgid "Save file as..."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:376
-#: ../gui/wxpython/gui_core/goutput.py:463
+#: ../gui/wxpython/gui_core/goutput.py:418
+#: ../gui/wxpython/gui_core/goutput.py:514
 #, python-format
 msgid "%(txt)s (*.txt)|*.txt|%(files)s (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:419
+#: ../gui/wxpython/gui_core/goutput.py:515
 #, fuzzy
 msgid "Text files"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/gui_core/goutput.py:377
-#: ../gui/wxpython/gui_core/goutput.py:464
+#: ../gui/wxpython/gui_core/goutput.py:420
+#: ../gui/wxpython/gui_core/goutput.py:516
 msgid "Files"
 msgstr "文件"
 
-#: ../gui/wxpython/gui_core/goutput.py:389
+#: ../gui/wxpython/gui_core/goutput.py:433
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(path)s'.\n"
@@ -13849,12 +14250,12 @@ msgid ""
 "Details: %(error)s"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/gui_core/goutput.py:392
+#: ../gui/wxpython/gui_core/goutput.py:438
 #, fuzzy, python-format
 msgid "Command output saved into '%s'"
 msgstr "命令运行结果输出"
 
-#: ../gui/wxpython/gui_core/goutput.py:442 ../gui/wxpython/core/gconsole.py:698
+#: ../gui/wxpython/gui_core/goutput.py:492 ../gui/wxpython/core/gconsole.py:745
 #, fuzzy, python-format
 msgid ""
 "Unable to write file '%(filePath)s'.\n"
@@ -13862,16 +14263,59 @@ msgid ""
 "Details: %(error)s"
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/gui_core/goutput.py:447
+#: ../gui/wxpython/gui_core/goutput.py:497
 #, fuzzy, python-format
 msgid "Command log saved to '%s'"
 msgstr "命令运行结果输出"
 
-#: ../gui/wxpython/gui_core/menu.py:142
+#: ../gui/wxpython/gui_core/vselect.py:48
+#, fuzzy
+msgid "category"
+msgstr "没有起始点"
+
+#: ../gui/wxpython/gui_core/vselect.py:73
+#, fuzzy
+msgid "Select features"
+msgstr "最近邻要素"
+
+#: ../gui/wxpython/gui_core/vselect.py:136
+#, fuzzy
+msgid "Create a new map"
+msgstr "创建新数据集"
+
+#: ../gui/wxpython/gui_core/vselect.py:265
+#, fuzzy, python-format
+msgid "Selected map <%s> has been disabled for rendering. Operation canceled."
+msgstr "非三维矢量地图,操作已取消。"
+
+#: ../gui/wxpython/gui_core/vselect.py:297
+#, fuzzy, python-format
+msgid "Failed to query vector map(s) <%s>."
+msgstr "无法找到矢量地图 [%s]"
+
+#: ../gui/wxpython/gui_core/vselect.py:322
+#, fuzzy
+msgid "No features selected"
+msgstr "没有选中的图层"
+
+#: ../gui/wxpython/gui_core/vselect.py:346
+#, fuzzy, python-format
+msgid "Vector map <%s> was created"
+msgstr "dig_att文件不存在。"
+
+#: ../gui/wxpython/gui_core/vselect.py:349
+#, fuzzy, python-format
+msgid ""
+"Unable to create a new vector map.\n"
+"\n"
+"Reason: %s"
+msgstr "无法找到矢量地图 [%s]"
+
+#: ../gui/wxpython/gui_core/menu.py:149
 msgid "Double-click or Ctrl-Enter to run selected module"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/menu.py:160
+#: ../gui/wxpython/gui_core/menu.py:171
 #, fuzzy
 msgid "Run selected module from the tree"
 msgstr ""
@@ -13879,278 +14323,267 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/gui_core/preferences.py:57
+#: ../gui/wxpython/gui_core/preferences.py:59
 #, fuzzy
 msgid "User settings"
 msgstr "打开设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:80
+#: ../gui/wxpython/gui_core/preferences.py:83
 msgid "Set to default"
 msgstr "设为默认"
 
-#: ../gui/wxpython/gui_core/preferences.py:88
+#: ../gui/wxpython/gui_core/preferences.py:91
 #, fuzzy
 msgid "Revert settings to default"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:90
+#: ../gui/wxpython/gui_core/preferences.py:94
 msgid "Apply changes for the current session only and close"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:91
+#: ../gui/wxpython/gui_core/preferences.py:95
 msgid "Save for this session only"
 msgstr "仅用于本次操作"
 
-#: ../gui/wxpython/gui_core/preferences.py:152
+#: ../gui/wxpython/gui_core/preferences.py:165
 msgid "Settings applied to current session but not saved"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:211
+#: ../gui/wxpython/gui_core/preferences.py:237
 msgid "Key column cannot be empty string."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:225
+#: ../gui/wxpython/gui_core/preferences.py:256
 msgid "GUI Settings"
 msgstr "GUI设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:252
+#: ../gui/wxpython/gui_core/preferences.py:291
 msgid "Layer Manager settings"
 msgstr "图层管理设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:262
+#: ../gui/wxpython/gui_core/preferences.py:301
 msgid "Ask when removing map layer from layer tree"
 msgstr "从图层列表移除图层时提示"
 
-#: ../gui/wxpython/gui_core/preferences.py:272
+#: ../gui/wxpython/gui_core/preferences.py:314
 msgid "Ask when quiting wxGUI or closing display"
 msgstr "退出wxGUI界面或关闭显示时提示"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
-#: ../gui/wxpython/gui_core/preferences.py:292
+#: ../gui/wxpython/gui_core/preferences.py:329
+#: ../gui/wxpython/gui_core/preferences.py:346
 #, python-format
 msgid "Hide '%s' tab (requires GUI restart)"
 msgstr "隐藏'%s'选项页(需重启GUI以生效)"
 
-#: ../gui/wxpython/gui_core/preferences.py:282
+#: ../gui/wxpython/gui_core/preferences.py:366
 #, fuzzy
-msgid "Search module"
-msgstr "搜索"
-
-#: ../gui/wxpython/gui_core/preferences.py:305
-msgid "Automatically copy selected text to clipboard (in Command console)"
+msgid "Automatically copy selected text to clipboard (in the Console tab)"
 msgstr "自动将选中文本拷贝到剪贴板(仅控制台)"
 
-#: ../gui/wxpython/gui_core/preferences.py:320
+#: ../gui/wxpython/gui_core/preferences.py:394
 msgid "Workspace settings"
 msgstr "工作区设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:327
+#: ../gui/wxpython/gui_core/preferences.py:401
 msgid "Suppress positioning Map Display Window(s)"
 msgstr "不保存地图显示窗口位置"
 
-#: ../gui/wxpython/gui_core/preferences.py:339
+#: ../gui/wxpython/gui_core/preferences.py:417
 msgid "Suppress positioning Layer Manager window"
 msgstr "不保存图层管理窗口位置"
 
-#: ../gui/wxpython/gui_core/preferences.py:350
+#: ../gui/wxpython/gui_core/preferences.py:432
 msgid "Save current window layout as default"
 msgstr "保存当前窗口布局为默认布局"
 
-#: ../gui/wxpython/gui_core/preferences.py:353
+#: ../gui/wxpython/gui_core/preferences.py:441
 msgid ""
 "Save current position and size of Layer Manager window and opened Map "
 "Display window(s) and use as default for next sessions."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:372 ../gui/wxpython/nviz/tools.py:97
+#: ../gui/wxpython/gui_core/preferences.py:464 ../gui/wxpython/nviz/tools.py:99
 msgid "Appearance"
 msgstr "界面"
 
-#: ../gui/wxpython/gui_core/preferences.py:389
+#: ../gui/wxpython/gui_core/preferences.py:489
 msgid "Font for command output:"
 msgstr "命令输出字体:"
 
-#: ../gui/wxpython/gui_core/preferences.py:403
+#: ../gui/wxpython/gui_core/preferences.py:507
 msgid "Language settings"
 msgstr "语言设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:412
+#: ../gui/wxpython/gui_core/preferences.py:523
 msgid "Choose language (requires to save and GRASS restart):"
 msgstr "选择语言(保存并重启GRASS后生效):"
 
-#: ../gui/wxpython/gui_core/preferences.py:437
+#: ../gui/wxpython/gui_core/preferences.py:556
 msgid "Appearance settings"
 msgstr "界面设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:447
+#: ../gui/wxpython/gui_core/preferences.py:566
 msgid "Element list:"
 msgstr "要到列表:"
 
-#: ../gui/wxpython/gui_core/preferences.py:469
+#: ../gui/wxpython/gui_core/preferences.py:596
 msgid "Menu style (requires to save and GUI restart):"
 msgstr "菜单风格(需保存并重启动GUI界面):"
 
-#: ../gui/wxpython/gui_core/preferences.py:493
+#: ../gui/wxpython/gui_core/preferences.py:631
 msgid "Height of map selection popup window (in pixels):"
 msgstr "地图选择窗口高度(像素):"
 
-#: ../gui/wxpython/gui_core/preferences.py:517
+#: ../gui/wxpython/gui_core/preferences.py:671
 msgid "Icon theme (requires GUI restart):"
 msgstr "图标主题(需重启动GUI界面):"
 
-#: ../gui/wxpython/gui_core/preferences.py:537
+#: ../gui/wxpython/gui_core/preferences.py:698
 msgid "Module dialog style:"
 msgstr "模块对话框风格:"
 
-#: ../gui/wxpython/gui_core/preferences.py:573
+#: ../gui/wxpython/gui_core/preferences.py:744
+#: ../gui/wxpython/gui_core/forms.py:1392
 msgid "Map Display"
 msgstr "地图显示"
 
-#: ../gui/wxpython/gui_core/preferences.py:587
+#: ../gui/wxpython/gui_core/preferences.py:765
 msgid "Default font for GRASS displays:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:605
+#: ../gui/wxpython/gui_core/preferences.py:792
 msgid "Default display settings"
 msgstr "默认显示设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:615
+#: ../gui/wxpython/gui_core/preferences.py:802
 msgid "Display driver:"
 msgstr "显示驱动:"
 
-#: ../gui/wxpython/gui_core/preferences.py:635
+#: ../gui/wxpython/gui_core/preferences.py:828
 msgid "Statusbar mode:"
 msgstr "状态栏模式:"
 
-#: ../gui/wxpython/gui_core/preferences.py:700
+#: ../gui/wxpython/gui_core/preferences.py:912
 msgid "Enable auto-rendering"
 msgstr "启用自动渲染"
 
-#: ../gui/wxpython/gui_core/preferences.py:713
+#: ../gui/wxpython/gui_core/preferences.py:929
 msgid "Enable auto-zooming to selected map layer"
 msgstr "自动缩放选中图层"
 
-#: ../gui/wxpython/gui_core/preferences.py:726
+#: ../gui/wxpython/gui_core/preferences.py:945
 msgid "Mouse wheel action:"
 msgstr "鼠标滚轮操作:"
 
-#: ../gui/wxpython/gui_core/preferences.py:741
+#: ../gui/wxpython/gui_core/preferences.py:971
 msgid "Mouse scrolling direction:"
 msgstr "鼠标滚动方向:"
 
-#: ../gui/wxpython/gui_core/preferences.py:767
+#: ../gui/wxpython/gui_core/preferences.py:1012
 msgid "Advanced display settings"
 msgstr "高级显示设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:773
+#: ../gui/wxpython/gui_core/preferences.py:1021
 msgid "3D view depth buffer (possible values are 16, 24, 32):"
 msgstr "三维显示深度缓冲(可选值为16, 24, 32):"
 
-#: ../gui/wxpython/gui_core/preferences.py:805
-msgid "Modules"
-msgstr "模块"
-
-#: ../gui/wxpython/gui_core/preferences.py:808
+#: ../gui/wxpython/gui_core/preferences.py:1076
 msgid "Module dialog settings"
 msgstr "模块对话框设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:829
+#: ../gui/wxpython/gui_core/preferences.py:1101
 msgid "Close dialog when module is successfully finished"
 msgstr "模块结束时关闭对话框"
 
-#: ../gui/wxpython/gui_core/preferences.py:839
-#: ../gui/wxpython/gui_core/dialogs.py:273
+#: ../gui/wxpython/gui_core/preferences.py:1115
+#: ../gui/wxpython/gui_core/dialogs.py:304
 msgid "Add created map into layer tree"
 msgstr "将生成的地图添加到图层列表"
 
-#: ../gui/wxpython/gui_core/preferences.py:850
+#: ../gui/wxpython/gui_core/preferences.py:1130
 msgid "Allow interactive input"
 msgstr "使用交互输入"
 
-#: ../gui/wxpython/gui_core/preferences.py:860
+#: ../gui/wxpython/gui_core/preferences.py:1144
 msgid "Verbosity level:"
 msgstr "信息详细程度"
 
-#: ../gui/wxpython/gui_core/preferences.py:885
-msgid "Layers"
-msgstr "图层"
-
-#: ../gui/wxpython/gui_core/preferences.py:891
+#: ../gui/wxpython/gui_core/preferences.py:1190
 msgid "Default raster settings"
 msgstr "默认栅格图层设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:901
+#: ../gui/wxpython/gui_core/preferences.py:1200
 msgid "Make null cells opaque"
 msgstr "空值不透明"
 
-#: ../gui/wxpython/gui_core/preferences.py:912
+#: ../gui/wxpython/gui_core/preferences.py:1215
 msgid "Default color table"
 msgstr "默认颜色表"
 
-#: ../gui/wxpython/gui_core/preferences.py:939
+#: ../gui/wxpython/gui_core/preferences.py:1261
 msgid "Default vector settings"
 msgstr "默认矢量图层设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:945
+#: ../gui/wxpython/gui_core/preferences.py:1267
 msgid "Display:"
 msgstr "显示:"
 
-#: ../gui/wxpython/gui_core/preferences.py:964
+#: ../gui/wxpython/gui_core/preferences.py:1292
 msgid "Feature color:"
 msgstr "要素颜色:"
 
-#: ../gui/wxpython/gui_core/preferences.py:976
-#: ../gui/wxpython/gui_core/preferences.py:998
-#: ../gui/wxpython/gui_core/forms.py:1493
+#: ../gui/wxpython/gui_core/preferences.py:1312
+#: ../gui/wxpython/gui_core/preferences.py:1347
+#: ../gui/wxpython/gui_core/forms.py:1735
 msgid "Transparent"
 msgstr "透明"
 
-#: ../gui/wxpython/gui_core/preferences.py:986
+#: ../gui/wxpython/gui_core/preferences.py:1332
 msgid "Area fill color:"
 msgstr "区域填充色:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1029
+#: ../gui/wxpython/gui_core/preferences.py:1393
 msgid "Symbol:"
 msgstr "符号:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1082
+#: ../gui/wxpython/gui_core/preferences.py:1476
 msgid "Line width (in pixels):"
 msgstr "线条宽度(像素):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1092
+#: ../gui/wxpython/gui_core/preferences.py:1492
 msgid "Automatically hightlight selected features in map display"
 msgstr "地图显示窗口中自动高亮所选择要素"
 
-#: ../gui/wxpython/gui_core/preferences.py:1112
+#: ../gui/wxpython/gui_core/preferences.py:1516
 msgid "Data browser"
 msgstr "数据浏览器"
 
-#: ../gui/wxpython/gui_core/preferences.py:1117
+#: ../gui/wxpython/gui_core/preferences.py:1524
 msgid "Left mouse double click:"
 msgstr "鼠标左键双击"
 
-#: ../gui/wxpython/gui_core/preferences.py:1129
+#: ../gui/wxpython/gui_core/preferences.py:1549
 msgid "Encoding (e.g. utf-8, ascii, iso8859-1, koi8-r):"
 msgstr "编码(如utf-8, ascii, iso8859-1, koi8-r):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1140
+#: ../gui/wxpython/gui_core/preferences.py:1564
 msgid "Ask when deleting data record(s) from table"
 msgstr "从表中删除记录时提示"
 
-#: ../gui/wxpython/gui_core/preferences.py:1161
+#: ../gui/wxpython/gui_core/preferences.py:1588
 msgid "Create table"
 msgstr "创建表"
 
-#: ../gui/wxpython/gui_core/preferences.py:1168
-#: ../gui/wxpython/gui_core/dialogs.py:305
+#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/dialogs.py:349
 msgid "Key column:"
 msgstr "主键字段名称:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1202
+#: ../gui/wxpython/gui_core/preferences.py:1638
 msgid "Projection statusbar settings"
 msgstr "投影状态栏设置"
 
-#: ../gui/wxpython/gui_core/preferences.py:1210
+#: ../gui/wxpython/gui_core/preferences.py:1647
 msgid ""
 "\n"
 "Note: This only controls the coordinates displayed in the lower-left of the "
@@ -14166,80 +14599,91 @@ msgstr ""
 "且仅用于显示而不影响当前地点的投影设置。\n"
 "需在地图显示窗口底部的下拉菜单中勾选投影项以激活。\n"
 
-#: ../gui/wxpython/gui_core/preferences.py:1225
-#: ../gui/wxpython/location_wizard/wizard.py:1322
+#: ../gui/wxpython/gui_core/preferences.py:1662
+#: ../gui/wxpython/location_wizard/wizard.py:1429
 msgid "EPSG code:"
 msgstr "EPSG代码:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1242
+#: ../gui/wxpython/gui_core/preferences.py:1680
 msgid "Proj.4 string (required):"
 msgstr "Proj.4 字符串(必填):"
 
-#: ../gui/wxpython/gui_core/preferences.py:1258
+#: ../gui/wxpython/gui_core/preferences.py:1697
 msgid "EPSG file:"
 msgstr "EPSG文件:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1273
+#: ../gui/wxpython/gui_core/preferences.py:1714
 msgid ""
 "Load EPSG codes (be patient), enter EPSG code or insert Proj.4 string "
 "directly."
 msgstr "装载EPSG代码列表(请耐心等待),可直接输入EPSG代码或填写Proj.4 字符串。"
 
-#: ../gui/wxpython/gui_core/preferences.py:1281
+#: ../gui/wxpython/gui_core/preferences.py:1722
 msgid "&Load EPSG codes"
 msgstr "载入EPSG代码列表(&L)"
 
-#: ../gui/wxpython/gui_core/preferences.py:1293
+#: ../gui/wxpython/gui_core/preferences.py:1742
 msgid "Coordinates format"
 msgstr "坐标格式"
 
-#: ../gui/wxpython/gui_core/preferences.py:1301
+#: ../gui/wxpython/gui_core/preferences.py:1750
 msgid "Lat/long projections"
 msgstr "经纬度"
 
-#: ../gui/wxpython/gui_core/preferences.py:1320
+#: ../gui/wxpython/gui_core/preferences.py:1771
 msgid "Precision:"
 msgstr "精度:"
 
-#: ../gui/wxpython/gui_core/preferences.py:1385
+#: ../gui/wxpython/gui_core/preferences.py:1850
+#: ../gui/wxpython/location_wizard/wizard.py:1623
+#, fuzzy
+msgid "Unable to read EPGS codes: {}"
+msgstr "无法读取EPSG代码:%s"
+
+#: ../gui/wxpython/gui_core/preferences.py:1857
 #, fuzzy, python-format
 msgid "Unable to read EPSG codes: %s"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/gui_core/preferences.py:1414
-#: ../gui/wxpython/gui_core/preferences.py:1423
-#: ../gui/wxpython/gui_core/preferences.py:1432
+#: ../gui/wxpython/gui_core/preferences.py:1890
+#: ../gui/wxpython/gui_core/preferences.py:1902
+#: ../gui/wxpython/gui_core/preferences.py:1914
 #, fuzzy, python-format
 msgid "EPSG code %s not found"
 msgstr "驱动 %s 未发现"
 
-#: ../gui/wxpython/gui_core/preferences.py:1440
+#: ../gui/wxpython/gui_core/preferences.py:1924
 msgid "Select default display font"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1452
+#: ../gui/wxpython/gui_core/preferences.py:1938
 msgid "Failed to set default display font. Try different font."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1472
+#: ../gui/wxpython/gui_core/preferences.py:1957
 #, fuzzy
 msgid "Select default output font"
 msgstr "无法创建输出地图"
 
-#: ../gui/wxpython/gui_core/preferences.py:1568
+#: ../gui/wxpython/gui_core/preferences.py:2073
 msgid "Select font:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/preferences.py:1595
+#: ../gui/wxpython/gui_core/preferences.py:2104
 #, fuzzy
 msgid "Character encoding:"
 msgstr "字符编码"
 
-#: ../gui/wxpython/gui_core/preferences.py:1708
+#: ../gui/wxpython/gui_core/preferences.py:2169
+#, fuzzy
+msgid "Example"
+msgstr "图层 %d"
+
+#: ../gui/wxpython/gui_core/preferences.py:2243
 msgid "Manage access to mapsets"
 msgstr "设置地图集权限"
 
-#: ../gui/wxpython/gui_core/preferences.py:1721
+#: ../gui/wxpython/gui_core/preferences.py:2258
 msgid ""
 "Check a mapset to make it accessible, uncheck it to hide it.\n"
 "  Notes:\n"
@@ -14253,277 +14697,367 @@ msgstr ""
 "- 您可能只对当前地图集的拥有写入权限。\n"
 "- 您只对你名下的地图集拥有写入权限。"
 
-#: ../gui/wxpython/gui_core/preferences.py:1794
-#: ../gui/wxpython/gui_core/gselect.py:495
+#: ../gui/wxpython/gui_core/preferences.py:2334
+#: ../gui/wxpython/gui_core/gselect.py:527
 msgid "Mapset"
 msgstr "地图集"
 
-#: ../gui/wxpython/gui_core/preferences.py:1795
+#: ../gui/wxpython/gui_core/preferences.py:2335
 msgid "Owner"
 msgstr "所有者"
 
-#: ../gui/wxpython/gui_core/query.py:29
+#: ../gui/wxpython/gui_core/query.py:31
 #, fuzzy
 msgid "Query results"
 msgstr "安静模式"
 
-#: ../gui/wxpython/gui_core/query.py:41
+#: ../gui/wxpython/gui_core/query.py:43
 msgid "Right click to copy selected values to clipboard."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Feature"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gui_core/query.py:45
+#: ../gui/wxpython/gui_core/query.py:49
 #, fuzzy
 msgid "Value"
 msgstr "比特模式的值"
 
-#: ../gui/wxpython/gui_core/query.py:61
+#: ../gui/wxpython/gui_core/query.py:71
 #, fuzzy
 msgid "Copy all to clipboard"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/gui_core/query.py:64
+#: ../gui/wxpython/gui_core/query.py:74
 #, fuzzy
 msgid "Redirect to console"
 msgstr "无法打开输入的dig文件。"
 
-#: ../gui/wxpython/gui_core/query.py:112 ../gui/wxpython/gui_core/query.py:113
+#: ../gui/wxpython/gui_core/query.py:136 ../gui/wxpython/gui_core/query.py:139
 #, fuzzy, python-format
 msgid "Copy from '%s' column"
 msgstr "列数"
 
-#: ../gui/wxpython/gui_core/query.py:114
+#: ../gui/wxpython/gui_core/query.py:141
 #, fuzzy
 msgid "Copy selected lines"
 msgstr "无法打开矢量质心点地图。"
 
-#: ../gui/wxpython/gui_core/query.py:117 ../gui/wxpython/gui_core/query.py:120
+#: ../gui/wxpython/gui_core/query.py:144 ../gui/wxpython/gui_core/query.py:149
 #, fuzzy, python-format
 msgid "Copy '%s'"
 msgstr "复制地图"
 
-#: ../gui/wxpython/gui_core/query.py:121
+#: ../gui/wxpython/gui_core/query.py:151
 #, fuzzy
 msgid "Copy line"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/gui_core/query.py:143
+#: ../gui/wxpython/gui_core/query.py:178
 #, fuzzy
 msgid "Query results:"
 msgstr "安静模式"
 
-#: ../gui/wxpython/gui_core/query.py:146
+#: ../gui/wxpython/gui_core/query.py:181
 msgid " "
 msgstr ""
 
-#: ../gui/wxpython/gui_core/query.py:230
+#: ../gui/wxpython/gui_core/query.py:270
 #, fuzzy
 msgid "east, north"
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/gui_core/query.py:241
+#: ../gui/wxpython/gui_core/query.py:281
 #, fuzzy
 msgid "Nothing found"
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/gui_core/widgets.py:84
+#: ../gui/wxpython/gui_core/widgets.py:101
 msgid " (...)"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:896
+#: ../gui/wxpython/gui_core/widgets.py:839
+#, python-format
+msgid ""
+"Name <%(name)s> is not a valid name for GRASS map. Please use only ASCII "
+"characters excluding %(chars)s and space."
+msgstr ""
+
+#: ../gui/wxpython/gui_core/widgets.py:1069
 msgid "Fulltext search"
 msgstr "全文搜索"
 
-#: ../gui/wxpython/gui_core/widgets.py:897
+#: ../gui/wxpython/gui_core/widgets.py:1071
 msgid "Type to search in all modules. Press Enter for next match."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:961
+#: ../gui/wxpython/gui_core/widgets.py:1138
 msgid "Searching, please type more characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:970
+#: ../gui/wxpython/gui_core/widgets.py:1147
 #, fuzzy, python-format
 msgid "%d modules match"
 msgstr "%d 个点写入矢量文件"
 
-#: ../gui/wxpython/gui_core/widgets.py:1045
+#: ../gui/wxpython/gui_core/widgets.py:1217
+#, fuzzy
+msgid "Profiles"
+msgstr "剖面"
+
+#: ../gui/wxpython/gui_core/widgets.py:1223
 #, fuzzy
 msgid "Save current settings"
 msgstr "请改正设置。"
 
-#: ../gui/wxpython/gui_core/widgets.py:1048
+#: ../gui/wxpython/gui_core/widgets.py:1227
 #, fuzzy
 msgid "Delete currently selected settings"
 msgstr "删除选中的地图集"
 
-#: ../gui/wxpython/gui_core/widgets.py:1068
+#: ../gui/wxpython/gui_core/widgets.py:1250
 #, fuzzy
-msgid "Load settings:"
-msgstr "无法获取栅格行\n"
+msgid "Load:"
+msgstr "载入文件"
 
-#: ../gui/wxpython/gui_core/widgets.py:1083
+#: ../gui/wxpython/gui_core/widgets.py:1268
 #, fuzzy, python-format
 msgid "Settings <%s> not found"
 msgstr "矢量地图 '%s' 未找到"
 
-#: ../gui/wxpython/gui_core/widgets.py:1097
-#: ../gui/wxpython/gui_core/widgets.py:1113
+#: ../gui/wxpython/gui_core/widgets.py:1282
+#: ../gui/wxpython/gui_core/widgets.py:1302
 #, fuzzy
 msgid "Save settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gui_core/widgets.py:1102
+#: ../gui/wxpython/gui_core/widgets.py:1287
 msgid "Name not given, settings is not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/widgets.py:1111
+#: ../gui/wxpython/gui_core/widgets.py:1299
 #, fuzzy, python-format
 msgid "Settings <%s> already exists. Do you want to overwrite the settings?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/gui_core/widgets.py:1161
+#: ../gui/wxpython/gui_core/widgets.py:1350
 #, fuzzy
 msgid "No settings is defined. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/gui_core/widgets.py:1195
+#: ../gui/wxpython/gui_core/widgets.py:1388
 #, fuzzy
 msgid "Unable to save settings"
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/gui_core/forms.py:479
+#: ../gui/wxpython/gui_core/pyedit.py:378
+#, fuzzy
+msgid "Open file"
+msgstr "保存组文件"
+
+#: ../gui/wxpython/gui_core/pyedit.py:449
+msgid "Replace the content by the template?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:451
+msgid "Replace the content by the example?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:453
+msgid "Replace the current content by the file content?"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:459
+msgid "Replace content"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:471
+#, fuzzy
+msgid "Set parameters for the script"
+msgstr "输入投影%s的参数"
+
+#: ../gui/wxpython/gui_core/pyedit.py:472
+msgid "Specify command line parameters for the script separated by spaces:"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:522
+msgid "Open (Ctrl+O)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:524
+msgid "Save (Ctrl+S)"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:526
+#, fuzzy
+msgid "Run (Ctrl+R)"
+msgstr "运行命令(Ctrl+R)"
+
+#: ../gui/wxpython/gui_core/pyedit.py:529
+#, fuzzy
+msgid "Activate overwrite"
+msgstr "激活转弯编辑模式"
+
+#: ../gui/wxpython/gui_core/pyedit.py:531
+msgid "Deactive overwrite"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/pyedit.py:582
+#, fuzzy
+msgid "GRASS GIS Simple Python Editor"
+msgstr "无法获取栅格行\n"
+
+#: ../gui/wxpython/gui_core/forms.py:543
 msgid "Enter parameters for '"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:490
+#: ../gui/wxpython/gui_core/forms.py:555
 msgid "Close this window without executing the command (Ctrl+Q)"
 msgstr "不执行命令而关闭窗口(Ctrl+Q)"
 
-#: ../gui/wxpython/gui_core/forms.py:516
+#: ../gui/wxpython/gui_core/forms.py:586
 msgid "Run the command (Ctrl+R)"
 msgstr "运行命令(Ctrl+R)"
 
-#: ../gui/wxpython/gui_core/forms.py:530
-#: ../gui/wxpython/modules/mcalc_builder.py:146
+#: ../gui/wxpython/gui_core/forms.py:601
+#: ../gui/wxpython/modules/mcalc_builder.py:159
 #, fuzzy
 msgid "Copy the current command string to the clipboard"
 msgstr "将当前区域对齐到输入的地图上"
 
-#: ../gui/wxpython/gui_core/forms.py:538
+#: ../gui/wxpython/gui_core/forms.py:610
 msgid "Show manual page of the command (Ctrl+H)"
 msgstr "显示该命令帮助(Ctrl+H)"
 
-#: ../gui/wxpython/gui_core/forms.py:569
+#: ../gui/wxpython/gui_core/forms.py:649
 msgid "Add created map(s) into layer tree"
 msgstr "将创建的地图加入层列表"
 
-#: ../gui/wxpython/gui_core/forms.py:584
-#: ../gui/wxpython/gui_core/dialogs.py:1684
+#: ../gui/wxpython/gui_core/forms.py:670
+#: ../gui/wxpython/modules/import_export.py:94
 msgid "Close dialog on finish"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:586
+#: ../gui/wxpython/gui_core/forms.py:679
 msgid ""
 "Close dialog when command is successfully finished. Change this settings in "
 "Preferences dialog ('Command' tab)."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:751
+#: ../gui/wxpython/gui_core/forms.py:855
 #, python-format
 msgid "'%s' copied to clipboard"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/gui_core/forms.py:822 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:935 ../gui/wxpython/gui_core/forms.py:949
 msgid "Required"
 msgstr "必填参数"
 
-#: ../gui/wxpython/gui_core/forms.py:825 ../gui/wxpython/gui_core/forms.py:835
+#: ../gui/wxpython/gui_core/forms.py:938 ../gui/wxpython/gui_core/forms.py:950
 msgid "Optional"
 msgstr "可选参数"
 
-#: ../gui/wxpython/gui_core/forms.py:904 ../gui/wxpython/gui_core/forms.py:1653
+#: ../gui/wxpython/gui_core/forms.py:1033
+#: ../gui/wxpython/gui_core/forms.py:2007
 #, fuzzy
 msgid "Parameterized in model"
 msgstr "需要的 g3d 文件未找到"
 
-#: ../gui/wxpython/gui_core/forms.py:969
+#: ../gui/wxpython/gui_core/forms.py:1102
 #, fuzzy
 msgid "This option is required"
 msgstr "字段类型不支持"
 
-#: ../gui/wxpython/gui_core/forms.py:986
+#: ../gui/wxpython/gui_core/forms.py:1123
 msgid "[multiple]"
 msgstr "[多项]"
 
-#: ../gui/wxpython/gui_core/forms.py:1036
+#: ../gui/wxpython/gui_core/forms.py:1181
 #, fuzzy
 msgid "valid range"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/gui_core/forms.py:1297
+#: ../gui/wxpython/gui_core/forms.py:1505
 msgid "Show graphical representation of temporal extent of dataset(s) ."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1457 ../gui/wxpython/core/utils.py:998
+#: ../gui/wxpython/gui_core/forms.py:1685 ../gui/wxpython/core/utils.py:996
 msgid "Select Color"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/gui_core/forms.py:1522
-#: ../gui/wxpython/gui_core/forms.py:1586
+#: ../gui/wxpython/gui_core/forms.py:1771
+#: ../gui/wxpython/gui_core/forms.py:1855
 #, python-format
 msgid "Choose %s"
 msgstr "选择%s"
 
-#: ../gui/wxpython/gui_core/forms.py:1551
-#: ../gui/wxpython/modules/mcalc_builder.py:143
+#: ../gui/wxpython/gui_core/forms.py:1806
+#: ../gui/wxpython/modules/mcalc_builder.py:155
 msgid "&Load"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1552
+#: ../gui/wxpython/gui_core/forms.py:1808
 #, fuzzy
 msgid "Load and edit content of a file"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/gui_core/forms.py:1554
+#: ../gui/wxpython/gui_core/forms.py:1811
 #, fuzzy
 msgid "&Save as"
 msgstr "另存为"
 
-#: ../gui/wxpython/gui_core/forms.py:1555
+#: ../gui/wxpython/gui_core/forms.py:1813
 msgid "Save content to a file for further use"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1560
+#: ../gui/wxpython/gui_core/forms.py:1818
 #, fuzzy
 msgid "or enter values directly:"
 msgstr "或交互式输入数值"
 
-#: ../gui/wxpython/gui_core/forms.py:1562
+#: ../gui/wxpython/gui_core/forms.py:1820
 msgid ""
 "Enter file content directly instead of specifying a file. Temporary file "
 "will be automatically created."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/forms.py:1587
-#: ../gui/wxpython/gui_core/gselect.py:1322
+#: ../gui/wxpython/gui_core/forms.py:1858
+#: ../gui/wxpython/gui_core/gselect.py:1418
 msgid "Directory"
 msgstr "目录"
 
-#: ../gui/wxpython/gui_core/forms.py:1839
+#: ../gui/wxpython/gui_core/forms.py:1978
+#: ../gui/wxpython/modules/import_export.py:71
+#: ../gui/wxpython/modules/import_export.py:847
+#, fuzzy
+msgid "Layer id"
+msgstr "图层 %d"
+
+#: ../gui/wxpython/gui_core/forms.py:1979
+#: ../gui/wxpython/web_services/widgets.py:924
+#: ../gui/wxpython/modules/import_export.py:72
+msgid "Layer name"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/forms.py:1981
+#: ../gui/wxpython/modules/import_export.py:76
+#: ../gui/wxpython/modules/import_export.py:78
+#, fuzzy
+msgid "Projection match"
+msgstr "绘制 ... "
+
+#: ../gui/wxpython/gui_core/forms.py:2207
 msgid "Manual"
 msgstr "手册"
 
-#: ../gui/wxpython/gui_core/forms.py:1880
+#: ../gui/wxpython/gui_core/forms.py:2251
 #, fuzzy
 msgid "Nothing to load."
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/gui_core/forms.py:1888
+#: ../gui/wxpython/gui_core/forms.py:2259
 #, fuzzy, python-format
 msgid ""
 "Unable to load file.\n"
@@ -14531,48 +15065,48 @@ msgid ""
 "Reason: %s"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/gui_core/forms.py:1914
-#: ../gui/wxpython/modules/colorrules.py:619
+#: ../gui/wxpython/gui_core/forms.py:2285
+#: ../gui/wxpython/modules/colorrules.py:689
 #, fuzzy
 msgid "Nothing to save."
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/gui_core/forms.py:1918
+#: ../gui/wxpython/gui_core/forms.py:2289
 #, fuzzy
 msgid "Save input as..."
 msgstr "另存为..."
 
-#: ../gui/wxpython/gui_core/forms.py:2231
+#: ../gui/wxpython/gui_core/forms.py:2622
 #, fuzzy
 msgid "No dataset given."
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/gui_core/forms.py:2270 ../gui/wxpython/core/gcmd.py:701
+#: ../gui/wxpython/gui_core/forms.py:2661 ../gui/wxpython/core/gcmd.py:747
 #, python-format
 msgid "Error in %s"
 msgstr "%s出错"
 
-#: ../gui/wxpython/gui_core/forms.py:2371
-#: ../gui/wxpython/gui_core/forms.py:2386
+#: ../gui/wxpython/gui_core/forms.py:2773
+#: ../gui/wxpython/gui_core/forms.py:2790
 #, fuzzy, python-format
 msgid "Unable to parse command '%s'"
 msgstr "无法解析命令:%s"
 
-#: ../gui/wxpython/gui_core/forms.py:2392
+#: ../gui/wxpython/gui_core/forms.py:2797
 #, fuzzy, python-format
 msgid "%(cmd)s: parameter '%(key)s' not available"
 msgstr "图层 '%s' 不可用"
 
-#: ../gui/wxpython/gui_core/forms.py:2470
+#: ../gui/wxpython/gui_core/forms.py:2879
 msgid "Try to set up GRASS_ADDON_PATH or GRASS_ADDON_BASE variable."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:78
+#: ../gui/wxpython/gui_core/dialogs.py:70
 #, fuzzy
 msgid "Required item is not set."
 msgstr "需要的 g3d 文件未找到"
 
-#: ../gui/wxpython/gui_core/dialogs.py:108
+#: ../gui/wxpython/gui_core/dialogs.py:101
 msgid "Select GRASS location and mapset"
 msgstr "选择GRASS地点和地图集"
 
@@ -14581,128 +15115,128 @@ msgstr "选择GRASS地点和地图集"
 msgid "Location or mapset is not defined."
 msgstr "%s - 未发现"
 
-#: ../gui/wxpython/gui_core/dialogs.py:127
+#: ../gui/wxpython/gui_core/dialogs.py:130
 msgid "Name of GRASS location:"
 msgstr "GRASS地点名称:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:133
-#: ../gui/wxpython/gui_core/dialogs.py:180
+#: ../gui/wxpython/gui_core/dialogs.py:141
+#: ../gui/wxpython/gui_core/dialogs.py:198
 msgid "Name of mapset:"
 msgstr "地图集名称:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:158
+#: ../gui/wxpython/gui_core/dialogs.py:170
 msgid "Select mapset in GRASS location"
 msgstr "在GRASS地点中选择地图集"
 
-#: ../gui/wxpython/gui_core/dialogs.py:172
+#: ../gui/wxpython/gui_core/dialogs.py:190
 msgid "Name of mapset is missing."
 msgstr "缺少地图集名称。"
 
-#: ../gui/wxpython/gui_core/dialogs.py:207
+#: ../gui/wxpython/gui_core/dialogs.py:231
 msgid "Name of vector map is missing."
 msgstr "缺少矢量点图的名称。"
 
-#: ../gui/wxpython/gui_core/dialogs.py:258
+#: ../gui/wxpython/gui_core/dialogs.py:284
 msgid "Create attribute table"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:282
+#: ../gui/wxpython/gui_core/dialogs.py:318
 #, fuzzy
 msgid "Name of new vector map is missing."
 msgstr "输出矢量点图的名称"
 
-#: ../gui/wxpython/gui_core/dialogs.py:291
+#: ../gui/wxpython/gui_core/dialogs.py:330
 msgid "Name for new vector map:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:389
+#: ../gui/wxpython/gui_core/dialogs.py:433
 #, python-format
 msgid "Unable to create vector map <%s>."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:394
+#: ../gui/wxpython/gui_core/dialogs.py:438
 #, fuzzy, python-format
 msgid ""
 "Invalid or empty key column.\n"
 "Unable to create vector map <%s>."
 msgstr "无法为色彩条读取颜色"
 
-#: ../gui/wxpython/gui_core/dialogs.py:422
+#: ../gui/wxpython/gui_core/dialogs.py:469
 #, python-format
 msgid ""
 "Vector map <%s> already exists in the current mapset. Do you want to "
 "overwrite it?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:505
+#: ../gui/wxpython/gui_core/dialogs.py:559
 msgid "Load region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:509
+#: ../gui/wxpython/gui_core/dialogs.py:565
 msgid "Save region:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:546
+#: ../gui/wxpython/gui_core/dialogs.py:617
 msgid ""
 "Name cannot begin with '.' and must not contain space, quotes, '/', ''', "
 "'@', ',', '=', '*', and all other non-alphanumeric characters."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:561
+#: ../gui/wxpython/gui_core/dialogs.py:633
 #, fuzzy
 msgid "Create or edit imagery groups"
 msgstr "矢量导入完成"
 
-#: ../gui/wxpython/gui_core/dialogs.py:594
+#: ../gui/wxpython/gui_core/dialogs.py:667
 msgid "Apply changes to selected group and close dialog"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:595
+#: ../gui/wxpython/gui_core/dialogs.py:668
 msgid "Apply changes to selected group"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:596
+#: ../gui/wxpython/gui_core/dialogs.py:669
 msgid "Close dialog, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:637
-#: ../gui/wxpython/gui_core/dialogs.py:1384
+#: ../gui/wxpython/gui_core/dialogs.py:710
+#: ../gui/wxpython/gui_core/dialogs.py:1507
 msgid ""
 "Put here a regular expression. Characters '.*' stand for anything, character "
 "'^' stands for the beginning and '$' for the end."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:644
+#: ../gui/wxpython/gui_core/dialogs.py:717
 msgid "Select existing group or enter name of new group:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:655
+#: ../gui/wxpython/gui_core/dialogs.py:728
 msgid "Edit/create subgroup"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:664
+#: ../gui/wxpython/gui_core/dialogs.py:741
 msgid "Select existing subgroup or enter name of new subgroup:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:692
-#: ../gui/wxpython/gui_core/dialogs.py:745
-#: ../gui/wxpython/gui_core/dialogs.py:1371
+#: ../gui/wxpython/gui_core/dialogs.py:775
+#: ../gui/wxpython/gui_core/dialogs.py:843
+#: ../gui/wxpython/gui_core/dialogs.py:1492
 #, fuzzy
 msgid "Pattern:"
 msgstr "栅格值"
 
-#: ../gui/wxpython/gui_core/dialogs.py:707
-#: ../gui/wxpython/gui_core/dialogs.py:759
-#: ../gui/wxpython/gui_core/dialogs.py:1390
+#: ../gui/wxpython/gui_core/dialogs.py:793
+#: ../gui/wxpython/gui_core/dialogs.py:861
+#: ../gui/wxpython/gui_core/dialogs.py:1516
 msgid "List of maps:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:717
+#: ../gui/wxpython/gui_core/dialogs.py:809
 #, fuzzy
 msgid "Select map layers and add them to the list."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/gui_core/dialogs.py:721
+#: ../gui/wxpython/gui_core/dialogs.py:814
 #, fuzzy
 msgid "Remove selected layer(s) from list."
 msgstr ""
@@ -14710,417 +15244,299 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:764
+#: ../gui/wxpython/gui_core/dialogs.py:871
 msgid "Check maps from group to be included into subgroup."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:924
+#: ../gui/wxpython/gui_core/dialogs.py:1035
 #, fuzzy
 msgid "Add selected map layers into group"
 msgstr "加载地图层到层列表"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1059
+#: ../gui/wxpython/gui_core/dialogs.py:1172
 #, python-format
 msgid "Group <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1061
-#: ../gui/wxpython/gui_core/dialogs.py:1073
+#: ../gui/wxpython/gui_core/dialogs.py:1175
+#: ../gui/wxpython/gui_core/dialogs.py:1191
 #, fuzzy
 msgid "Unapplied changes"
 msgstr "是否保存更改?"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1071
+#: ../gui/wxpython/gui_core/dialogs.py:1188
 #, python-format
 msgid "Subgroup <%s> was changed, do you want to apply changes?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1127
-#, fuzzy
-msgid "No raster maps selected."
-msgstr "没有指定数据地图"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1156
-#, fuzzy, python-format
-msgid "No changes to apply in group <%s>."
-msgstr "包含结果的栅格图的名称"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1159
-#, fuzzy, python-format
-msgid "Group <%s> was successfully created."
-msgstr "成功创建表"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1161
-#, fuzzy, python-format
-msgid "Group <%s> was successfully changed."
-msgstr "成功创建表"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1164
-#, fuzzy, python-format
-msgid "Creating of new group <%s> failed."
-msgstr "创建新组文件"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1166
-#, python-format
-msgid "Changing of group <%s> failed."
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1204
-#, fuzzy
-msgid "No group selected."
-msgstr "没有选中的图层"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1210
-#, fuzzy
-msgid "No subgroup selected."
-msgstr "没有选中的图层"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1313
-#, fuzzy
-msgid "Use fully-qualified map names"
-msgstr "%s - 非法的名称"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1329 ../gui/wxpython/nviz/tools.py:564
-msgid "3D raster"
-msgstr "三维栅格"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1339
-#, fuzzy
-msgid "Map type:"
-msgstr "要素类型"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1354
-#, fuzzy
-msgid "Select toggle"
-msgstr "无法获取栅格行\n"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1361
-msgid "Mapset:"
-msgstr "地图集:"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1447
-#, fuzzy
-msgid "Invert selection"
-msgstr "反向清扫完成"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1582
-#, python-format
-msgid "Dynamic series (%s)"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1607
-msgid "Multiple import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1624
-#, fuzzy
-msgid "List of raster layers"
-msgstr "将要导入的栅格文件"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1626
-#, fuzzy
-msgid "List of vector layers"
-msgstr "将要导入的栅格文件"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1628
-#, fuzzy, python-format
-msgid "List of %s layers"
-msgstr "将要导入的栅格文件"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1629
-msgid "right click to (un)select all"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1632
-#, fuzzy
-msgid "Layer id"
-msgstr "图层 %d"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1633
-#: ../gui/wxpython/web_services/widgets.py:860
-msgid "Layer name"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1634
-#, fuzzy
-msgid "Name for output GRASS map (editable)"
-msgstr "输出文件的名称"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1637
-#, fuzzy
-msgid "Projection match"
-msgstr "绘制 ... "
-
-#: ../gui/wxpython/gui_core/dialogs.py:1643
-#: ../gui/wxpython/modules/extensions.py:71
-msgid "Options"
-msgstr "选项"
-
-#: ../gui/wxpython/gui_core/dialogs.py:1675
-msgid "Encoding"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1695
-#: ../gui/wxpython/gui_core/dialogs.py:1904
-msgid "&Import"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1696
-#: ../gui/wxpython/gui_core/dialogs.py:1905
-msgid "Import selected layers"
-msgstr ""
-
-#: ../gui/wxpython/gui_core/dialogs.py:1894
+#: ../gui/wxpython/gui_core/dialogs.py:1245
 #, fuzzy
-msgid "Add linked layers into layer tree"
-msgstr "加载地图层到层列表"
+msgid "No raster maps selected."
+msgstr "没有指定数据地图"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1896
-#: ../gui/wxpython/gui_core/dialogs.py:2133
-msgid "Add imported layers into layer tree"
-msgstr ""
+#: ../gui/wxpython/gui_core/dialogs.py:1274
+#, fuzzy, python-format
+msgid "No changes to apply in group <%s>."
+msgstr "包含结果的栅格图的名称"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1901
-msgid "&Link"
-msgstr ""
+#: ../gui/wxpython/gui_core/dialogs.py:1277
+#, fuzzy, python-format
+msgid "Group <%s> was successfully created."
+msgstr "成功创建表"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1902
-msgid "Link selected layers"
-msgstr ""
+#: ../gui/wxpython/gui_core/dialogs.py:1279
+#, fuzzy, python-format
+msgid "Group <%s> was successfully changed."
+msgstr "成功创建表"
 
-#: ../gui/wxpython/gui_core/dialogs.py:1914
-#, fuzzy
-msgid "No layers selected. Operation canceled."
-msgstr "没有选择图层,操作已取消。"
+#: ../gui/wxpython/gui_core/dialogs.py:1282
+#, fuzzy, python-format
+msgid "Creating of new group <%s> failed."
+msgstr "创建新组文件"
+
+#: ../gui/wxpython/gui_core/dialogs.py:1284
+#, python-format
+msgid "Changing of group <%s> failed."
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:1968
+#: ../gui/wxpython/gui_core/dialogs.py:1322
 #, fuzzy
-msgid "Unable to determine number of raster bands"
-msgstr "无法创建栅格地图 %s"
+msgid "No group selected."
+msgstr "没有选中的图层"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2048
+#: ../gui/wxpython/gui_core/dialogs.py:1327
 #, fuzzy
-msgid "Define output format for vector data"
-msgstr "输出的栅格/矢量地图"
+msgid "No subgroup selected."
+msgstr "没有选中的图层"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2050
+#: ../gui/wxpython/gui_core/dialogs.py:1434
 #, fuzzy
-msgid "Define output format for raster data"
-msgstr "输出的流域栅格图"
+msgid "Use fully-qualified map names"
+msgstr "%s - 非法的名称"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2058
-msgid "Set external format and close dialog"
-msgstr ""
+#: ../gui/wxpython/gui_core/dialogs.py:1450 ../gui/wxpython/nviz/tools.py:727
+msgid "3D raster"
+msgstr "三维栅格"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2110
+#: ../gui/wxpython/gui_core/dialogs.py:1460
 #, fuzzy
-msgid "No data source selected."
-msgstr "没有选中的图层"
+msgid "Map type:"
+msgstr "要素类型"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2123
-msgid "Import DXF layers"
-msgstr ""
+#: ../gui/wxpython/gui_core/dialogs.py:1475
+#, fuzzy
+msgid "Select toggle"
+msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2127
-msgid "Choose DXF file to import"
-msgstr ""
+#: ../gui/wxpython/gui_core/dialogs.py:1482
+msgid "Mapset:"
+msgstr "地图集:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2147
+#: ../gui/wxpython/gui_core/dialogs.py:1575
 #, fuzzy
-msgid "No layers selected."
-msgstr "基础栅格图"
+msgid "Invert selection"
+msgstr "反向清扫完成"
+
+#: ../gui/wxpython/gui_core/dialogs.py:1718
+#, python-format
+msgid "Dynamic series (%s)"
+msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2288
+#: ../gui/wxpython/gui_core/dialogs.py:1745
 msgid "Set Map Layer Opacity"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2316
+#: ../gui/wxpython/gui_core/dialogs.py:1779
 msgid "opaque"
 msgstr "不透明"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2412
+#: ../gui/wxpython/gui_core/dialogs.py:1877
 #, fuzzy
 msgid "Set image size"
 msgstr "保存当前显示为图片文件"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2421
+#: ../gui/wxpython/gui_core/dialogs.py:1892
 #, fuzzy
 msgid "Image size"
 msgstr "输入文件"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2468
+#: ../gui/wxpython/gui_core/dialogs.py:1939
 msgid "Template:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2506
+#: ../gui/wxpython/gui_core/dialogs.py:1979
 msgid "GRASS GIS SQL Query Utility"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/dialogs.py:2517
+#: ../gui/wxpython/gui_core/dialogs.py:1995
 #, fuzzy
 msgid " SQL statement "
 msgstr "SQL状态"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2562
+#: ../gui/wxpython/gui_core/dialogs.py:2043
 msgid "Symbols"
 msgstr "符号"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2589
+#: ../gui/wxpython/gui_core/dialogs.py:2078
 msgid "Symbol directory:"
 msgstr "符号目录:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2597
+#: ../gui/wxpython/gui_core/dialogs.py:2090
 msgid "Symbol name:"
 msgstr "符号名称:"
 
-#: ../gui/wxpython/gui_core/dialogs.py:2811
+#: ../gui/wxpython/gui_core/dialogs.py:2342
 msgid "Do you want to quit GRASS including shell prompt or just close the GUI?"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:58
+#: ../gui/wxpython/gui_core/ghelp.py:70
 msgid "Info"
 msgstr "消息"
 
-#: ../gui/wxpython/gui_core/ghelp.py:59
+#: ../gui/wxpython/gui_core/ghelp.py:71
 msgid "Copyright"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:60
+#: ../gui/wxpython/gui_core/ghelp.py:72
 msgid "License"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:61
+#: ../gui/wxpython/gui_core/ghelp.py:73
 #, fuzzy
 msgid "Citation"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/gui_core/ghelp.py:62
+#: ../gui/wxpython/gui_core/ghelp.py:74
 msgid "Authors"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:63
+#: ../gui/wxpython/gui_core/ghelp.py:75
 #, fuzzy
 msgid "Contributors"
 msgstr "无法创建属性表"
 
-#: ../gui/wxpython/gui_core/ghelp.py:64
+#: ../gui/wxpython/gui_core/ghelp.py:76
 #, fuzzy
 msgid "Extra contributors"
 msgstr "无法创建属性表"
 
-#: ../gui/wxpython/gui_core/ghelp.py:65
+#: ../gui/wxpython/gui_core/ghelp.py:77
 #, fuzzy
 msgid "Translators"
 msgstr "地形参数"
 
-#: ../gui/wxpython/gui_core/ghelp.py:66
+#: ../gui/wxpython/gui_core/ghelp.py:78
 #, fuzzy
 msgid "Translation status"
 msgstr "地形参数"
 
-#: ../gui/wxpython/gui_core/ghelp.py:131
+#: ../gui/wxpython/gui_core/ghelp.py:143
 msgid "Official GRASS site:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:142
+#: ../gui/wxpython/gui_core/ghelp.py:154
 #, fuzzy
 msgid "Code Revision"
 msgstr "区域"
 
-#: ../gui/wxpython/gui_core/ghelp.py:205 ../gui/wxpython/gui_core/ghelp.py:443
+#: ../gui/wxpython/gui_core/ghelp.py:165
+msgid "Build Date"
+msgstr ""
+
+#: ../gui/wxpython/gui_core/ghelp.py:219 ../gui/wxpython/gui_core/ghelp.py:476
 msgid "Language"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:234 ../gui/wxpython/gui_core/ghelp.py:258
-#: ../gui/wxpython/gui_core/ghelp.py:308 ../gui/wxpython/gui_core/ghelp.py:365
-#: ../gui/wxpython/gui_core/ghelp.py:427 ../gui/wxpython/gui_core/ghelp.py:576
+#: ../gui/wxpython/gui_core/ghelp.py:248 ../gui/wxpython/gui_core/ghelp.py:273
+#: ../gui/wxpython/gui_core/ghelp.py:323 ../gui/wxpython/gui_core/ghelp.py:386
+#: ../gui/wxpython/gui_core/ghelp.py:460 ../gui/wxpython/gui_core/ghelp.py:626
 #, python-format
 msgid "%s file missing"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:280
+#: ../gui/wxpython/gui_core/ghelp.py:295
 msgid ""
 "Unable to provide citation suggestion, see GRASS GIS website instead. The "
 "error was: {}"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:351 ../gui/wxpython/gui_core/ghelp.py:413
+#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:444
 #, fuzzy, python-format
 msgid "Error when reading file '%s'."
 msgstr "为 <%s> 读取类别文件时发生错误。"
 
-#: ../gui/wxpython/gui_core/ghelp.py:352 ../gui/wxpython/gui_core/ghelp.py:414
+#: ../gui/wxpython/gui_core/ghelp.py:371 ../gui/wxpython/gui_core/ghelp.py:445
 #, fuzzy
 msgid "Lines:"
 msgstr "线"
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
-#: ../gui/wxpython/gui_core/ghelp.py:439
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
+#: ../gui/wxpython/gui_core/ghelp.py:472
 msgid "E-mail"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:370 ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:392 ../gui/wxpython/gui_core/ghelp.py:394
 msgid "Country"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:372
+#: ../gui/wxpython/gui_core/ghelp.py:394
 msgid "OSGeo_ID"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:447
+#: ../gui/wxpython/gui_core/ghelp.py:480
 #, fuzzy
 msgid "Nation"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/gui_core/ghelp.py:481
+#: ../gui/wxpython/gui_core/ghelp.py:530
 #, python-format
 msgid "   %d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:485 ../gui/wxpython/gui_core/ghelp.py:511
+#: ../gui/wxpython/gui_core/ghelp.py:534 ../gui/wxpython/gui_core/ghelp.py:560
 #, python-format
 msgid "   %d fuzzy"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:489 ../gui/wxpython/gui_core/ghelp.py:520
+#: ../gui/wxpython/gui_core/ghelp.py:538 ../gui/wxpython/gui_core/ghelp.py:569
 #, python-format
 msgid "   %d untranslated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:502
+#: ../gui/wxpython/gui_core/ghelp.py:551
 #, python-format
 msgid "%d translated"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:573
+#: ../gui/wxpython/gui_core/ghelp.py:623
 #, python-format
 msgid "File <%s> not found"
 msgstr "未找到文件<%s>"
 
-#: ../gui/wxpython/gui_core/ghelp.py:728
+#: ../gui/wxpython/gui_core/ghelp.py:792
 msgid "&Next"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/ghelp.py:731
+#: ../gui/wxpython/gui_core/ghelp.py:795
 msgid "&Previous"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:97
+#: ../gui/wxpython/gui_core/simplelmgr.py:104
 #, fuzzy
 msgid "Toolbar"
 msgstr "地图工具栏"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:133
+#: ../gui/wxpython/gui_core/simplelmgr.py:140
 #, fuzzy
 msgid "Copy map names to clipboard (top to bottom)"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:134
+#: ../gui/wxpython/gui_core/simplelmgr.py:141
 #, fuzzy
 msgid "Copy map names to clipboard (bottom to top)"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:439
+#: ../gui/wxpython/gui_core/simplelmgr.py:459
 #, fuzzy
 msgid "Remove selected map(s) from list"
 msgstr ""
@@ -15128,12 +15544,12 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:441
+#: ../gui/wxpython/gui_core/simplelmgr.py:461
 #, fuzzy
 msgid "Layer up"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:442
+#: ../gui/wxpython/gui_core/simplelmgr.py:462
 #, fuzzy
 msgid "Move selected layer(s) up"
 msgstr ""
@@ -15141,12 +15557,12 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:444
+#: ../gui/wxpython/gui_core/simplelmgr.py:464
 #, fuzzy
 msgid "Layer down"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:445
+#: ../gui/wxpython/gui_core/simplelmgr.py:465
 #, fuzzy
 msgid "Move selected layer(s) down"
 msgstr ""
@@ -15154,18 +15570,18 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:447
-#: ../gui/wxpython/gui_core/simplelmgr.py:448
+#: ../gui/wxpython/gui_core/simplelmgr.py:467
+#: ../gui/wxpython/gui_core/simplelmgr.py:468
 #, fuzzy
 msgid "Edit layer properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:450
+#: ../gui/wxpython/gui_core/simplelmgr.py:470
 #, fuzzy
 msgid "Change opacity"
 msgstr "切换地图集"
 
-#: ../gui/wxpython/gui_core/simplelmgr.py:451
+#: ../gui/wxpython/gui_core/simplelmgr.py:471
 #, fuzzy
 msgid "Change layer opacity"
 msgstr "切换地图集"
@@ -15269,242 +15685,259 @@ msgstr "添加比例尺或图例等元素到地图"
 msgid "Create histogram with d.histogram"
 msgstr "创建图像或栅格文件的直方图"
 
-#: ../gui/wxpython/gui_core/toolbars.py:256
+#: ../gui/wxpython/gui_core/toolbars.py:259
 #, fuzzy
 msgid "Select graphics tool"
 msgstr "要显示的文本: "
 
-#: ../gui/wxpython/gui_core/gselect.py:59
+#: ../gui/wxpython/gui_core/gselect.py:61
 #, python-format
 msgid ""
 "Unable to import pyGRASS: %s\n"
 "Some functionality will be not accessible"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:460
+#: ../gui/wxpython/gui_core/gselect.py:490
 #, fuzzy
 msgid "Not selectable element"
 msgstr "SQL选择语句"
 
-#: ../gui/wxpython/gui_core/gselect.py:506
+#: ../gui/wxpython/gui_core/gselect.py:539
 #, fuzzy
 msgid "Type: "
 msgstr "类型"
 
-#: ../gui/wxpython/gui_core/gselect.py:517
+#: ../gui/wxpython/gui_core/gselect.py:557
 #, fuzzy, python-format
 msgid "GSelect: invalid item: %s"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/gui_core/gselect.py:1299
+#: ../gui/wxpython/gui_core/gselect.py:1395
 #, fuzzy
 msgid "Output settings"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gui_core/gselect.py:1301
+#: ../gui/wxpython/gui_core/gselect.py:1397
 #, fuzzy
-msgid "Source settings"
-msgstr "打开设置"
+msgid "Source input"
+msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/gui_core/gselect.py:1312
+#: ../gui/wxpython/gui_core/gselect.py:1408
 #, fuzzy
 msgid "Native"
 msgstr "保存"
 
-#: ../gui/wxpython/gui_core/gselect.py:1318
+#: ../gui/wxpython/gui_core/gselect.py:1414
 msgid "File"
 msgstr "文件"
 
-#: ../gui/wxpython/gui_core/gselect.py:1330
+#: ../gui/wxpython/gui_core/gselect.py:1426
 msgid "Protocol"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1341
+#: ../gui/wxpython/gui_core/gselect.py:1437
 #, fuzzy
 msgid "Output type"
 msgstr "输出图"
 
-#: ../gui/wxpython/gui_core/gselect.py:1343
+#: ../gui/wxpython/gui_core/gselect.py:1439
 #, fuzzy
 msgid "Source type"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gui_core/gselect.py:1363
+#: ../gui/wxpython/gui_core/gselect.py:1461
 msgid "All files"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1379
+#: ../gui/wxpython/gui_core/gselect.py:1477
 #, fuzzy
 msgid "ZIP files"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/gui_core/gselect.py:1380
+#: ../gui/wxpython/gui_core/gselect.py:1478
 #, fuzzy
 msgid "GZIP files"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/gui_core/gselect.py:1381
+#: ../gui/wxpython/gui_core/gselect.py:1479
 #, fuzzy
 msgid "TAR files"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/gui_core/gselect.py:1383
+#: ../gui/wxpython/gui_core/gselect.py:1481
 #, fuzzy
 msgid "TARGZ files"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/gui_core/gselect.py:1389
+#: ../gui/wxpython/gui_core/gselect.py:1489
 #, fuzzy
 msgid "File:"
 msgstr "文件:"
 
-#: ../gui/wxpython/gui_core/gselect.py:1390
+#: ../gui/wxpython/gui_core/gselect.py:1490
 #, fuzzy
 msgid "Choose file to import"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/gui_core/gselect.py:1403
-#: ../gui/wxpython/gui_core/gselect.py:1465
+#: ../gui/wxpython/gui_core/gselect.py:1506
+#: ../gui/wxpython/gui_core/gselect.py:1589
 msgid "Choose input directory"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1417
+#: ../gui/wxpython/gui_core/gselect.py:1523
 msgid "Extension:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1442
+#: ../gui/wxpython/gui_core/gselect.py:1553
 #, fuzzy
 msgid "Choose file"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/gui_core/gselect.py:1454
-#: ../gui/wxpython/gui_core/gselect.py:2136
+#: ../gui/wxpython/gui_core/gselect.py:1574
+#: ../gui/wxpython/gui_core/gselect.py:2335
 #, fuzzy
 msgid "Feature type:"
 msgstr "要素类型"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1576
 #, fuzzy
 msgid "simple features"
 msgstr "删除要素"
 
-#: ../gui/wxpython/gui_core/gselect.py:1455
+#: ../gui/wxpython/gui_core/gselect.py:1577
 #, fuzzy
 msgid "topological"
 msgstr "矢量文件读取错误"
 
-#: ../gui/wxpython/gui_core/gselect.py:1561
-#: ../gui/wxpython/gui_core/gselect.py:1592
-#: ../gui/wxpython/gui_core/gselect.py:1643
-#: ../gui/wxpython/gui_core/gselect.py:1681
+#: ../gui/wxpython/gui_core/gselect.py:1688
+#: ../gui/wxpython/gui_core/gselect.py:1719
+#: ../gui/wxpython/gui_core/gselect.py:1770
+#: ../gui/wxpython/gui_core/gselect.py:1808
 #, fuzzy
 msgid "Creation options:"
 msgstr "选项设置"
 
-#: ../gui/wxpython/gui_core/gselect.py:1575
-#: ../gui/wxpython/gui_core/gselect.py:1614
-#: ../gui/wxpython/gui_core/gselect.py:1666
+#: ../gui/wxpython/gui_core/gselect.py:1702
+#: ../gui/wxpython/gui_core/gselect.py:1741
+#: ../gui/wxpython/gui_core/gselect.py:1793
 #, fuzzy
 msgid "Format:"
 msgstr "OGR 格式"
 
-#: ../gui/wxpython/gui_core/gselect.py:1673
+#: ../gui/wxpython/gui_core/gselect.py:1800
 msgid "Protocol:"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:1696
+#: ../gui/wxpython/gui_core/gselect.py:1823
 #, fuzzy
 msgid "No settings available"
 msgstr "[%s] 的类别文件无效"
 
-#: ../gui/wxpython/gui_core/gselect.py:1798
-#: ../gui/wxpython/web_services/dialogs.py:287
+#: ../gui/wxpython/gui_core/gselect.py:1943
+#: ../gui/wxpython/web_services/dialogs.py:301
 msgid "No data source defined, settings are not saved."
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "LineString"
 msgstr ""
 
-#: ../gui/wxpython/gui_core/gselect.py:2128
+#: ../gui/wxpython/gui_core/gselect.py:2327
 msgid "Polygon"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:38
+#: ../gui/wxpython/gui_core/gselect.py:2546
+#, fuzzy
+msgid "No vector map selected in layer manager. Operation canceled."
+msgstr "没有选择图层,操作已取消。"
+
+#: ../gui/wxpython/gui_core/gselect.py:2559
+#, fuzzy
+msgid "Input vector map is not selected"
+msgstr "栅格地图 [%s] 未发现"
+
+#: ../gui/wxpython/gui_core/gselect.py:2563
+#, fuzzy, python-format
+msgid ""
+"Input vector map <%s> and selected map <%s> in layer manager are different. "
+"Operation canceled."
+msgstr "非三维矢量地图,操作已取消。"
+
+#: ../gui/wxpython/timeline/frame.py:39
 msgid ""
 "The Timeline Tool needs the \"matplotlib\" (python-matplotlib) package to be "
 "installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:71
+#: ../gui/wxpython/timeline/frame.py:77
 #, fuzzy
 msgid "GRASS GIS Timeline Tool"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/timeline/frame.py:132
+#: ../gui/wxpython/timeline/frame.py:139
 msgid "3D plot of spatio-temporal extents"
 msgstr "时空范围三维图形"
 
-#: ../gui/wxpython/timeline/frame.py:135
+#: ../gui/wxpython/timeline/frame.py:142
 msgid "3D plot of spatio-temporal extents (matplotlib >= 1.0.0)"
 msgstr "时空范围三维图形(matplotlib版本1.0.0及以上)"
 
-#: ../gui/wxpython/timeline/frame.py:140
+#: ../gui/wxpython/timeline/frame.py:147
 #, fuzzy
 msgid "Select space time dataset(s):"
 msgstr "导入栅格数据"
 
-#: ../gui/wxpython/timeline/frame.py:209
+#: ../gui/wxpython/timeline/frame.py:234
 #, python-brace-format
 msgid "Dataset <{name}> is empty"
 msgstr ""
 
-#: ../gui/wxpython/timeline/frame.py:264
+#: ../gui/wxpython/timeline/frame.py:292
 #, python-format
 msgid "X [%s]"
 msgstr "X [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:265
+#: ../gui/wxpython/timeline/frame.py:293
 #, python-format
 msgid "Y [%s]"
 msgstr "Y [%s]"
 
-#: ../gui/wxpython/timeline/frame.py:267
+#: ../gui/wxpython/timeline/frame.py:295
 #, fuzzy
 msgid "X"
 msgstr ":"
 
-#: ../gui/wxpython/timeline/frame.py:268
+#: ../gui/wxpython/timeline/frame.py:296
 #, fuzzy
 msgid "Y"
 msgstr ":"
 
-#: ../gui/wxpython/timeline/frame.py:500
+#: ../gui/wxpython/timeline/frame.py:568
 #, python-format
 msgid "Mapset: %s"
 msgstr "地图集:%s"
 
-#: ../gui/wxpython/timeline/frame.py:501
+#: ../gui/wxpython/timeline/frame.py:569
 #, fuzzy, python-format
 msgid "Map name: %s"
 msgstr "地图层"
 
-#: ../gui/wxpython/timeline/frame.py:502
+#: ../gui/wxpython/timeline/frame.py:571
 #, python-format
 msgid "Start time: %s"
 msgstr "开始时间:%s"
 
-#: ../gui/wxpython/timeline/frame.py:503
+#: ../gui/wxpython/timeline/frame.py:574
 #, fuzzy, python-format
 msgid "End time: %s"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/timeline/frame.py:506
+#: ../gui/wxpython/timeline/frame.py:578
 #, fuzzy
 msgid "WARNING: invalid topology"
 msgstr "矢量文件读取错误"
 
-#: ../gui/wxpython/timeline/frame.py:508
+#: ../gui/wxpython/timeline/frame.py:580
 msgid ""
 "\n"
 "Press Del to dismiss."
@@ -15512,863 +15945,872 @@ msgstr ""
 "\n"
 "按Del键解除。"
 
-#: ../gui/wxpython/web_services/widgets.py:122
+#: ../gui/wxpython/web_services/widgets.py:130
 #, fuzzy
 msgid " Requested data settings "
 msgstr "打开设置"
 
-#: ../gui/wxpython/web_services/widgets.py:149
+#: ../gui/wxpython/web_services/widgets.py:157
 #, fuzzy
 msgid "Request"
 msgstr "安静模式"
 
-#: ../gui/wxpython/web_services/widgets.py:154
+#: ../gui/wxpython/web_services/widgets.py:162
 #, fuzzy
 msgid "List of layers "
 msgstr "将要导入的栅格文件"
 
-#: ../gui/wxpython/web_services/widgets.py:170
+#: ../gui/wxpython/web_services/widgets.py:180
 #, fuzzy
 msgid "Source projection:"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/web_services/widgets.py:215
+#: ../gui/wxpython/web_services/widgets.py:241
 #, fuzzy
 msgid "Advanced request settings"
 msgstr "改变光线设置"
 
-#: ../gui/wxpython/web_services/widgets.py:222
+#: ../gui/wxpython/web_services/widgets.py:249
 #, fuzzy
 msgid "Order of layers in raster"
 msgstr "已有栅格地图的名称"
 
-#: ../gui/wxpython/web_services/widgets.py:232
+#: ../gui/wxpython/web_services/widgets.py:262
 #, fuzzy
 msgid "Reprojection method:"
 msgstr "使用的插值方法"
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:269
 msgid "Nearest neighbor"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:236
+#: ../gui/wxpython/web_services/widgets.py:270
 #, fuzzy
 msgid "Linear interpolation"
 msgstr "插值点的数量"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:271
 #, fuzzy
 msgid "Cubic interpolation"
 msgstr "插值点的数量"
 
-#: ../gui/wxpython/web_services/widgets.py:237
+#: ../gui/wxpython/web_services/widgets.py:272
 #, fuzzy
 msgid "Cubic spline interpolation"
 msgstr "插值点的数量"
 
-#: ../gui/wxpython/web_services/widgets.py:240
+#: ../gui/wxpython/web_services/widgets.py:276
 #, fuzzy
 msgid "Maximum columns to request from server at time:"
 msgstr "点到网络的最小距离"
 
-#: ../gui/wxpython/web_services/widgets.py:244
+#: ../gui/wxpython/web_services/widgets.py:282
 #, fuzzy
 msgid "Maximum rows to request from server at time:"
 msgstr "点到网络的最小距离"
 
-#: ../gui/wxpython/web_services/widgets.py:259
+#: ../gui/wxpython/web_services/widgets.py:299
 #, fuzzy
 msgid "Do not request transparent data"
 msgstr "无法创建图层"
 
-#: ../gui/wxpython/web_services/widgets.py:272
+#: ../gui/wxpython/web_services/widgets.py:314
 #, fuzzy
 msgid "Additional query parameters for server:"
 msgstr "%d 栅格%s, %d 矢量%s\n"
 
-#: ../gui/wxpython/web_services/widgets.py:479
+#: ../gui/wxpython/web_services/widgets.py:527
 #, fuzzy, python-format
 msgid ""
 "Unable to download %s capabilities file\n"
 "from <%s>:\n"
 msgstr "无法打开输入文件 <%s@%s>"
 
-#: ../gui/wxpython/web_services/widgets.py:494
+#: ../gui/wxpython/web_services/widgets.py:544
 #, python-format
 msgid ""
 "%s web service was not found in fetched capabilities file from <%s>:\n"
 "%s\n"
 msgstr ""
 
-#: ../gui/wxpython/web_services/widgets.py:769
+#: ../gui/wxpython/web_services/widgets.py:830
 #, fuzzy
 msgid "Source image format"
 msgstr "要查询的坐标"
 
-#: ../gui/wxpython/web_services/widgets.py:803
+#: ../gui/wxpython/web_services/widgets.py:866
 #, fuzzy
 msgid "Select layer in layer list.\n"
 msgstr "加载地图层到层列表"
 
-#: ../gui/wxpython/web_services/widgets.py:808
+#: ../gui/wxpython/web_services/widgets.py:871
 #, fuzzy
 msgid "Select source image format.\n"
 msgstr "只打印矢量地图的范围"
 
-#: ../gui/wxpython/web_services/widgets.py:813
+#: ../gui/wxpython/web_services/widgets.py:876
 #, fuzzy
 msgid "Select source projection.\n"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/web_services/widgets.py:817
+#: ../gui/wxpython/web_services/widgets.py:880
 #, fuzzy
 msgid "Choose output layer name.\n"
 msgstr "输出图层的名称"
 
-#: ../gui/wxpython/web_services/widgets.py:897
+#: ../gui/wxpython/web_services/widgets.py:961
 #, fuzzy
 msgid "layer"
 msgstr "图层 %d"
 
-#: ../gui/wxpython/web_services/widgets.py:917
+#: ../gui/wxpython/web_services/widgets.py:981
 #, fuzzy
 msgid "style"
 msgstr "要素类型"
 
-#: ../gui/wxpython/web_services/widgets.py:1088
+#: ../gui/wxpython/web_services/widgets.py:1154
 #, fuzzy
-msgid "Add default servers"
-msgstr "添加网格层"
+msgid "Add default"
+msgstr " 默认颜色\n"
 
-#: ../gui/wxpython/web_services/widgets.py:1105
+#: ../gui/wxpython/web_services/widgets.py:1171
 #, python-format
 msgid ""
 "User defined server with same name as default server <%s> already exists.\n"
 "Keeping user defined server"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:90
+#: ../gui/wxpython/web_services/dialogs.py:95
 #, fuzzy
 msgid " Server settings "
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/web_services/dialogs.py:93
+#: ../gui/wxpython/web_services/dialogs.py:98
 msgid "Server:"
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:97
+#: ../gui/wxpython/web_services/dialogs.py:102
 #, fuzzy
 msgid "&Connect"
 msgstr "相关性"
 
-#: ../gui/wxpython/web_services/dialogs.py:98
+#: ../gui/wxpython/web_services/dialogs.py:103
 #, fuzzy
 msgid "Connect to the server"
 msgstr "通过DBMI连接到数据库。"
 
-#: ../gui/wxpython/web_services/dialogs.py:102
+#: ../gui/wxpython/web_services/dialogs.py:107
 #, fuzzy
 msgid "Show advanced connection settings"
 msgstr "改变光线设置"
 
-#: ../gui/wxpython/web_services/dialogs.py:103
+#: ../gui/wxpython/web_services/dialogs.py:108
 #, fuzzy
 msgid "Hide advanced connection settings"
 msgstr "改变光线设置"
 
-#: ../gui/wxpython/web_services/dialogs.py:118
+#: ../gui/wxpython/web_services/dialogs.py:126
 #, fuzzy
 msgid " Layer Manager Settings "
 msgstr "改变区域设置"
 
-#: ../gui/wxpython/web_services/dialogs.py:121
+#: ../gui/wxpython/web_services/dialogs.py:130
 #, fuzzy
 msgid "Output layer name:"
 msgstr "输出图层的名称"
 
-#: ../gui/wxpython/web_services/dialogs.py:242
+#: ../gui/wxpython/web_services/dialogs.py:256
 msgid "Username:"
 msgstr "用户名:"
 
-#: ../gui/wxpython/web_services/dialogs.py:246
+#: ../gui/wxpython/web_services/dialogs.py:260
 msgid "Password:"
 msgstr "密码:"
 
-#: ../gui/wxpython/web_services/dialogs.py:371
+#: ../gui/wxpython/web_services/dialogs.py:386
 #, fuzzy, python-format
 msgid "Connecting to <%s>..."
 msgstr "通过DEM计算阴影..."
 
-#: ../gui/wxpython/web_services/dialogs.py:437
+#: ../gui/wxpython/web_services/dialogs.py:454
 #, fuzzy
 msgid "Available web services"
 msgstr "列出可用的格式并退出"
 
-#: ../gui/wxpython/web_services/dialogs.py:445
+#: ../gui/wxpython/web_services/dialogs.py:467
 #, fuzzy, python-format
 msgid "Connected to <%s>"
 msgstr "无法写入 <%s>"
 
-#: ../gui/wxpython/web_services/dialogs.py:450
+#: ../gui/wxpython/web_services/dialogs.py:473
 #, fuzzy, python-format
 msgid "Unable to connect to <%s>"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/web_services/dialogs.py:505
+#: ../gui/wxpython/web_services/dialogs.py:538
 #, fuzzy
 msgid "Add selected web service layers as map layer into layer tree"
 msgstr "加载地图层到层列表"
 
-#: ../gui/wxpython/web_services/dialogs.py:598
+#: ../gui/wxpython/web_services/dialogs.py:636
 #, fuzzy
 msgid "Web service layer properties"
 msgstr "要素类型"
 
-#: ../gui/wxpython/web_services/dialogs.py:643
+#: ../gui/wxpython/web_services/dialogs.py:683
 msgid "&Apply"
 msgstr "应用改动(&A)"
 
-#: ../gui/wxpython/web_services/dialogs.py:648
+#: ../gui/wxpython/web_services/dialogs.py:688
 msgid "&OK"
 msgstr "&OK"
 
-#: ../gui/wxpython/web_services/dialogs.py:810
+#: ../gui/wxpython/web_services/dialogs.py:856
 #, fuzzy
 msgid "Name for output raster map:"
 msgstr "输出的栅格地图名称:"
 
-#: ../gui/wxpython/web_services/dialogs.py:816
+#: ../gui/wxpython/web_services/dialogs.py:866
 #, fuzzy
 msgid "Export region"
 msgstr "设置地区"
 
-#: ../gui/wxpython/web_services/dialogs.py:823
+#: ../gui/wxpython/web_services/dialogs.py:875
 #, fuzzy
 msgid "Named region"
 msgstr "设置地区"
 
-#: ../gui/wxpython/web_services/dialogs.py:824
+#: ../gui/wxpython/web_services/dialogs.py:877
 msgid "Extent and resolution are based on Map Display geometry."
 msgstr ""
 
-#: ../gui/wxpython/web_services/dialogs.py:826
+#: ../gui/wxpython/web_services/dialogs.py:879
 #, fuzzy
 msgid "Extent and resolution are based on computational region."
 msgstr "不更新当前区域"
 
-#: ../gui/wxpython/web_services/dialogs.py:828
+#: ../gui/wxpython/web_services/dialogs.py:881
 #, fuzzy
 msgid "Extent and resolution are based on named region."
 msgstr "从指定的区域设置当前区域"
 
-#: ../gui/wxpython/web_services/dialogs.py:833
+#: ../gui/wxpython/web_services/dialogs.py:886
 #, fuzzy
 msgid "Overwrite existing raster map"
 msgstr "已有栅格文件的名称"
 
-#: ../gui/wxpython/web_services/dialogs.py:837
+#: ../gui/wxpython/web_services/dialogs.py:891
 #, fuzzy
 msgid "Choose named region:"
 msgstr "选择GIS数据目录:"
 
-#: ../gui/wxpython/web_services/dialogs.py:846
+#: ../gui/wxpython/web_services/dialogs.py:904
 #, fuzzy
 msgid "&Save layer"
 msgstr "移除图层"
 
-#: ../gui/wxpython/web_services/dialogs.py:847
+#: ../gui/wxpython/web_services/dialogs.py:905
 #, fuzzy
 msgid "Save web service layer as raster map"
 msgstr "添加网格层"
 
-#: ../gui/wxpython/web_services/dialogs.py:961
+#: ../gui/wxpython/web_services/dialogs.py:1026
 #, fuzzy
 msgid "Missing output raster."
 msgstr "输出栅格地图 %s ... "
 
-#: ../gui/wxpython/web_services/dialogs.py:965
+#: ../gui/wxpython/web_services/dialogs.py:1030
 #, fuzzy
 msgid "Output map can be added only to current mapset."
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/web_services/dialogs.py:969
+#: ../gui/wxpython/web_services/dialogs.py:1034
 #, fuzzy, python-format
 msgid "Output map <%s> already exists"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/web_services/dialogs.py:989
+#: ../gui/wxpython/web_services/dialogs.py:1055
 #, fuzzy, python-format
 msgid "Region <%s> does not exist."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/web_services/dialogs.py:1017
+#: ../gui/wxpython/web_services/dialogs.py:1084
 #, fuzzy
 msgid "Downloading data..."
 msgstr "读取地图"
 
-#: ../gui/wxpython/web_services/dialogs.py:1044
+#: ../gui/wxpython/web_services/dialogs.py:1111
 #, fuzzy
 msgid "Unable to fetch data.\n"
 msgstr "无法获取数据"
 
-#: ../gui/wxpython/modules/colorrules.py:74
+#: ../gui/wxpython/modules/colorrules.py:78
 #, fuzzy
 msgid "Check all"
 msgstr "关闭"
 
-#: ../gui/wxpython/modules/colorrules.py:77
+#: ../gui/wxpython/modules/colorrules.py:81
 msgid "Clear all"
 msgstr "全部清除"
 
-#: ../gui/wxpython/modules/colorrules.py:135
+#: ../gui/wxpython/modules/colorrules.py:139
 #, fuzzy
 msgid "Enter vector attribute values"
 msgstr "查询矢量属性表"
 
-#: ../gui/wxpython/modules/colorrules.py:292
+#: ../gui/wxpython/modules/colorrules.py:310
 msgid "Bad color format. Use color format '0:0:0'"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:385
+#: ../gui/wxpython/modules/colorrules.py:414
 msgid "Select vector map:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:402
+#: ../gui/wxpython/modules/colorrules.py:434
 #, fuzzy
 msgid "Import or export color table:"
 msgstr "保留已有的色彩表"
 
-#: ../gui/wxpython/modules/colorrules.py:407
+#: ../gui/wxpython/modules/colorrules.py:439
 #, fuzzy
 msgid "Choose file to load color table"
 msgstr "选择要加载的GRC文件"
 
-#: ../gui/wxpython/modules/colorrules.py:408
+#: ../gui/wxpython/modules/colorrules.py:440
 #, fuzzy
 msgid "Load"
 msgstr "载入文件"
 
-#: ../gui/wxpython/modules/colorrules.py:409
+#: ../gui/wxpython/modules/colorrules.py:442
 msgid "Type filename or click to choose file and load color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:415
+#: ../gui/wxpython/modules/colorrules.py:448
 #, fuzzy
 msgid "Choose file to save color table"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/modules/colorrules.py:416
+#: ../gui/wxpython/modules/colorrules.py:450
 msgid "Type filename or click to choose file and save color table"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:424
+#: ../gui/wxpython/modules/colorrules.py:464
 #, fuzzy
 msgid "&Set"
 msgstr "&设置"
 
-#: ../gui/wxpython/modules/colorrules.py:431
+#: ../gui/wxpython/modules/colorrules.py:472
 #, fuzzy
 msgid "Load color table:"
 msgstr "保存工作区到文件"
 
-#: ../gui/wxpython/modules/colorrules.py:435
+#: ../gui/wxpython/modules/colorrules.py:478
 #, fuzzy
 msgid "Load color table from file:"
 msgstr "保存工作区到文件"
 
-#: ../gui/wxpython/modules/colorrules.py:438
+#: ../gui/wxpython/modules/colorrules.py:486
 #, fuzzy
 msgid "Save color table to file:"
 msgstr "保存工作区到文件"
 
-#: ../gui/wxpython/modules/colorrules.py:467
+#: ../gui/wxpython/modules/colorrules.py:518
 #, fuzzy
 msgid "Reload default table"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/modules/colorrules.py:527
+#: ../gui/wxpython/modules/colorrules.py:586
 msgid "Show preview of map (current Map Display extent is used)."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:560
-#: ../gui/wxpython/modules/colorrules.py:1726
+#: ../gui/wxpython/modules/colorrules.py:618
+#: ../gui/wxpython/modules/colorrules.py:1888
 #, fuzzy
 msgid "No valid color rules given."
 msgstr "没有指定数据地图"
 
-#: ../gui/wxpython/modules/colorrules.py:606
+#: ../gui/wxpython/modules/colorrules.py:675
 #, fuzzy, python-format
 msgid "File <%s> already already exists. Do you want to overwrite it?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/modules/colorrules.py:652
+#: ../gui/wxpython/modules/colorrules.py:722
 #, fuzzy
 msgid "Invalid color table format"
 msgstr "无法为色彩条读取颜色"
 
-#: ../gui/wxpython/modules/colorrules.py:729
+#: ../gui/wxpython/modules/colorrules.py:803
 #, python-format
 msgid "Invalid rule value '%s'. Unable to apply color table."
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:807
+#: ../gui/wxpython/modules/colorrules.py:889
 msgid "Create new color table for raster map"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:883
+#: ../gui/wxpython/modules/colorrules.py:967
 #, fuzzy
 msgid "Enter raster category values or percents"
 msgstr "编辑 [%s] 的类别文件?"
 
-#: ../gui/wxpython/modules/colorrules.py:889
+#: ../gui/wxpython/modules/colorrules.py:973
 #, fuzzy
 msgid "fp range"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/modules/colorrules.py:890
+#: ../gui/wxpython/modules/colorrules.py:975
 #, python-format
 msgid "Enter raster category values or percents (%(range)s = %(min)d-%(max)d)"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:978
+#: ../gui/wxpython/modules/colorrules.py:1082
 #, fuzzy
 msgid "Create new color rules for vector map"
 msgstr "为 GRASS 矢量文件和附加属性创建标签。"
 
-#: ../gui/wxpython/modules/colorrules.py:990
-#: ../gui/wxpython/modules/colorrules.py:1521
+#: ../gui/wxpython/modules/colorrules.py:1095
+#: ../gui/wxpython/modules/colorrules.py:1672
 #, fuzzy
 msgid "Enter vector attribute values or percents:"
 msgstr "编辑 [%s] 的类别文件?"
 
-#: ../gui/wxpython/modules/colorrules.py:992
-#: ../gui/wxpython/modules/colorrules.py:1523
+#: ../gui/wxpython/modules/colorrules.py:1097
+#: ../gui/wxpython/modules/colorrules.py:1674
 #, fuzzy
 msgid "Enter vector attribute values:"
 msgstr "查询矢量属性表"
 
-#: ../gui/wxpython/modules/colorrules.py:1003
+#: ../gui/wxpython/modules/colorrules.py:1108
 #, fuzzy
 msgid "Select vector columns"
 msgstr "无法打开输入的dig文件。"
 
-#: ../gui/wxpython/modules/colorrules.py:1005
+#: ../gui/wxpython/modules/colorrules.py:1110
 msgid "Layer:"
 msgstr "图层"
 
-#: ../gui/wxpython/modules/colorrules.py:1007
+#: ../gui/wxpython/modules/colorrules.py:1112
 msgid "Attribute column:"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Load color from column:"
 msgstr "地图东向和北向格网坐标的起点"
 
-#: ../gui/wxpython/modules/colorrules.py:1010
+#: ../gui/wxpython/modules/colorrules.py:1115
 #, fuzzy
 msgid "Save color to column:"
 msgstr "高程的比例因子"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Load size from column:"
 msgstr "列数"
 
-#: ../gui/wxpython/modules/colorrules.py:1012
+#: ../gui/wxpython/modules/colorrules.py:1117
 #, fuzzy
 msgid "Save size to column:"
 msgstr "列数"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Load width from column:"
 msgstr "无法创建属性表"
 
-#: ../gui/wxpython/modules/colorrules.py:1014
+#: ../gui/wxpython/modules/colorrules.py:1119
 #, fuzzy
 msgid "Save width to column:"
 msgstr "无法创建属性表"
 
-#: ../gui/wxpython/modules/colorrules.py:1018
+#: ../gui/wxpython/modules/colorrules.py:1124
 #, fuzzy
 msgid "Use color column instead of color table:"
 msgstr "设定颜色为预定义颜色表"
 
-#: ../gui/wxpython/modules/colorrules.py:1033
+#: ../gui/wxpython/modules/colorrules.py:1140
 #, fuzzy
 msgid "Add GRASSRGB column to current attribute table."
 msgstr "不能创建属性表。"
 
-#: ../gui/wxpython/modules/colorrules.py:1088
-#: ../gui/wxpython/modules/colorrules.py:1137
+#: ../gui/wxpython/modules/colorrules.py:1199
+#: ../gui/wxpython/modules/colorrules.py:1255
 #, fuzzy
 msgid "Import or export color table"
 msgstr "色彩表类型"
 
-#: ../gui/wxpython/modules/colorrules.py:1149
+#: ../gui/wxpython/modules/colorrules.py:1269
 #, fuzzy, python-format
 msgid ""
 "Database connection for vector map <%s> is not defined in DB file.  Do you "
 "want to create and connect new attribute table?"
 msgstr "数据库连接未定义"
 
-#: ../gui/wxpython/modules/colorrules.py:1152
+#: ../gui/wxpython/modules/colorrules.py:1273
 #, fuzzy
 msgid "No database connection defined"
 msgstr "数据库连接未定义"
 
-#: ../gui/wxpython/modules/colorrules.py:1224
+#: ../gui/wxpython/modules/colorrules.py:1346
 #, fuzzy, python-format
 msgid ""
 "Selected map <%(map)s> is not in current mapset <%(mapset)s>. Attribute "
 "table cannot be edited."
 msgstr "未发现矢量地图<%s>"
 
-#: ../gui/wxpython/modules/colorrules.py:1377
+#: ../gui/wxpython/modules/colorrules.py:1517
 #, fuzzy, python-format
 msgid "%s column already exists."
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/modules/colorrules.py:1409
+#: ../gui/wxpython/modules/colorrules.py:1551
 #, fuzzy
 msgid "Please wait, loading data from attribute table..."
 msgstr "请稍候,属性数据加载中..."
 
-#: ../gui/wxpython/modules/colorrules.py:1470
+#: ../gui/wxpython/modules/colorrules.py:1612
 #, python-format
 msgid ""
 "Number of loaded records reached %d, displaying all the records will be time-"
 "consuming and may lead to computer freezing, do you still want to continue?"
 msgstr ""
 
-#: ../gui/wxpython/modules/colorrules.py:1474
+#: ../gui/wxpython/modules/colorrules.py:1616
 #, fuzzy
 msgid "Too many records"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/modules/colorrules.py:1516
+#: ../gui/wxpython/modules/colorrules.py:1663
 #, fuzzy, python-format
 msgid "Enter vector attribute values or percents %s:"
 msgstr "编辑 [%s] 的类别文件?"
 
-#: ../gui/wxpython/modules/colorrules.py:1518
+#: ../gui/wxpython/modules/colorrules.py:1667
 #, fuzzy, python-format
 msgid "Enter vector attribute values %s:"
 msgstr "查询矢量属性表"
 
-#: ../gui/wxpython/modules/colorrules.py:1660
+#: ../gui/wxpython/modules/colorrules.py:1820
 #, fuzzy
 msgid "Please select column to save values to."
 msgstr "点模式下不建立拓扑"
 
-#: ../gui/wxpython/modules/colorrules.py:1696
+#: ../gui/wxpython/modules/colorrules.py:1856
 #, fuzzy
 msgid "No color column defined. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/modules/colorrules.py:1711
+#: ../gui/wxpython/modules/colorrules.py:1873
 msgid "Thematic mapping for vector map in 3D view"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:53
+#: ../gui/wxpython/modules/mcalc_builder.py:55
 #, fuzzy
 msgid "GRASS GIS Raster Map Calculator"
 msgstr "地图计算"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:56
+#: ../gui/wxpython/modules/mcalc_builder.py:58
 #, fuzzy
 msgid "GRASS GIS 3D Raster Map Calculator"
 msgstr "地图计算"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:67
+#: ../gui/wxpython/modules/mcalc_builder.py:74
 #, fuzzy
 msgid "mapcalc statement"
 msgstr "SQL状态"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:123
+#: ../gui/wxpython/modules/mcalc_builder.py:132
 msgid "Operators"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:127
+#: ../gui/wxpython/modules/mcalc_builder.py:136
 msgid "Operands"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:129
+#: ../gui/wxpython/modules/mcalc_builder.py:138
 msgid "Expression"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:141
+#: ../gui/wxpython/modules/mcalc_builder.py:153
 #, fuzzy
 msgid "Save expression to file"
 msgstr "保存当前显示为图片文件"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:144
+#: ../gui/wxpython/modules/mcalc_builder.py:156
 #, fuzzy
 msgid "Load expression from file"
 msgstr "地图东向和北向格网坐标的起点"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:150
+#: ../gui/wxpython/modules/mcalc_builder.py:163
 msgid "exponent"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:152
+#: ../gui/wxpython/modules/mcalc_builder.py:165
 msgid "divide"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:154
+#: ../gui/wxpython/modules/mcalc_builder.py:167
 msgid "add"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:156
+#: ../gui/wxpython/modules/mcalc_builder.py:170
 msgid "subtract"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:158
+#: ../gui/wxpython/modules/mcalc_builder.py:172
 msgid "modulus"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:160
+#: ../gui/wxpython/modules/mcalc_builder.py:175
 msgid "multiply"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:165
+#: ../gui/wxpython/modules/mcalc_builder.py:183
 msgid "left shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:167
+#: ../gui/wxpython/modules/mcalc_builder.py:186
 msgid "right shift"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:169
+#: ../gui/wxpython/modules/mcalc_builder.py:189
 msgid "right shift (unsigned)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:171
+#: ../gui/wxpython/modules/mcalc_builder.py:191
 #, fuzzy
 msgid "greater than"
 msgstr "创建表"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:173
+#: ../gui/wxpython/modules/mcalc_builder.py:194
 #, fuzzy
 msgid "greater than or equal to"
 msgstr "用来对齐的栅格图"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:175
+#: ../gui/wxpython/modules/mcalc_builder.py:196
 msgid "less than"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:177
+#: ../gui/wxpython/modules/mcalc_builder.py:199
 #, fuzzy
 msgid "less than or equal to"
 msgstr "%s - 补丁文件太多。只允许 %d"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:179
+#: ../gui/wxpython/modules/mcalc_builder.py:201
 msgid "equal to"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:181
+#: ../gui/wxpython/modules/mcalc_builder.py:204
 #, fuzzy
 msgid "not equal to"
 msgstr "无法读取矢量"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:184
+#: ../gui/wxpython/modules/mcalc_builder.py:208
 #, fuzzy
 msgid "one's complement"
 msgstr "未发现区域<%s>"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:186
+#: ../gui/wxpython/modules/mcalc_builder.py:210
 msgid "NOT"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:188
+#: ../gui/wxpython/modules/mcalc_builder.py:213
 msgid "bitwise AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:190
+#: ../gui/wxpython/modules/mcalc_builder.py:216
 msgid "bitwise OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:192
+#: ../gui/wxpython/modules/mcalc_builder.py:219
 msgid "logical AND"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:194
+#: ../gui/wxpython/modules/mcalc_builder.py:222
 msgid "logical AND (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:196
+#: ../gui/wxpython/modules/mcalc_builder.py:224
 msgid "logical OR"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:198
+#: ../gui/wxpython/modules/mcalc_builder.py:227
 msgid "logical OR (ignores NULLs)"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:200
+#: ../gui/wxpython/modules/mcalc_builder.py:232
 #, fuzzy
 msgid "conditional"
 msgstr "可选项"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:213
+#: ../gui/wxpython/modules/mcalc_builder.py:247
 #, fuzzy
 msgid "Name for new 3D raster map to create"
 msgstr "将要创建的新区域的名称"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:215
+#: ../gui/wxpython/modules/mcalc_builder.py:249
 #, fuzzy
 msgid "Name for new raster map to create"
 msgstr "将要创建的新区域的名称"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:219
+#: ../gui/wxpython/modules/mcalc_builder.py:254
 #, fuzzy
 msgid "Insert existing 3D raster map"
 msgstr "已有 3dcell 地图的名称"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:221
+#: ../gui/wxpython/modules/mcalc_builder.py:256
 #, fuzzy
 msgid "Insert existing raster map"
 msgstr "已有栅格文件的名称"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:225
+#: ../gui/wxpython/modules/mcalc_builder.py:261
 msgid "Insert mapcalc function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:236
+#: ../gui/wxpython/modules/mcalc_builder.py:278
 msgid "Generate random seed for rand()"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:237
+#: ../gui/wxpython/modules/mcalc_builder.py:280
 msgid "Seed:"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:240
+#: ../gui/wxpython/modules/mcalc_builder.py:284
 msgid "Integer seed for rand() function"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:247
+#: ../gui/wxpython/modules/mcalc_builder.py:291
 #, fuzzy
 msgid "Add created raster map into layer tree"
 msgstr "将创建的地图加入层列表"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:549
+#: ../gui/wxpython/modules/mcalc_builder.py:628
 #, fuzzy
 msgid "You must enter the name of a new raster map to create."
 msgstr "将要创建的新区域的名称"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:559
+#: ../gui/wxpython/modules/mcalc_builder.py:639
 msgid "You must enter an expression to create a new raster map."
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:616
+#: ../gui/wxpython/modules/mcalc_builder.py:699
 #, fuzzy
 msgid "Choose a file name to save the expression"
 msgstr "列名"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:617
-#: ../gui/wxpython/modules/mcalc_builder.py:638
+#: ../gui/wxpython/modules/mcalc_builder.py:700
+#: ../gui/wxpython/modules/mcalc_builder.py:722
 msgid "Expression file (*)|*"
 msgstr ""
 
-#: ../gui/wxpython/modules/mcalc_builder.py:637
+#: ../gui/wxpython/modules/mcalc_builder.py:721
 #, fuzzy
 msgid "Choose a file name to load the expression"
 msgstr "列名"
 
-#: ../gui/wxpython/modules/mcalc_builder.py:672
+#: ../gui/wxpython/modules/mcalc_builder.py:757
 #, fuzzy, python-brace-format
 msgid "'{cmd}' copied to clipboard"
 msgstr "'%s'已复制到剪贴板"
 
-#: ../gui/wxpython/modules/extensions.py:40
+#: ../gui/wxpython/modules/extensions.py:41
 msgid "Fetch & install extension from GRASS Addons"
 msgstr "从GRASS插件获取并安装扩展"
 
-#: ../gui/wxpython/modules/extensions.py:51
-msgid "Repository"
-msgstr "组件库"
+#: ../gui/wxpython/modules/extensions.py:58
+msgid "Repository (leave empty to use the official one)"
+msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:53
+#: ../gui/wxpython/modules/extensions.py:61
 msgid "List of extensions - double-click to install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:95
+#: ../gui/wxpython/modules/extensions.py:85
+msgid "Options"
+msgstr "选项"
+
+#: ../gui/wxpython/modules/extensions.py:113
 msgid "&Fetch"
 msgstr "获取(&F)"
 
-#: ../gui/wxpython/modules/extensions.py:96
+#: ../gui/wxpython/modules/extensions.py:114
 msgid "Fetch list of available modules from GRASS Addons SVN repository"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:100
+#: ../gui/wxpython/modules/extensions.py:118
 msgid "&Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:101
+#: ../gui/wxpython/modules/extensions.py:120
 msgid "Install selected add-ons GRASS module"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:104
+#: ../gui/wxpython/modules/extensions.py:123
 msgid "Show g.extension manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:168
+#: ../gui/wxpython/modules/extensions.py:187
 #, fuzzy
 msgid "Extension not defined"
 msgstr "数据库连接未定义\n"
 
-#: ../gui/wxpython/modules/extensions.py:191
+#: ../gui/wxpython/modules/extensions.py:211
 msgid "Fetching list of modules from GRASS-Addons SVN (be patient)..."
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:213
+#: ../gui/wxpython/modules/extensions.py:226
+#, fuzzy, python-format
+msgid "%d extensions loaded"
+msgstr "组件扩展"
+
+#: ../gui/wxpython/modules/extensions.py:238
 msgid "Install"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:216
+#: ../gui/wxpython/modules/extensions.py:243
 msgid "Show manual page"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:315
+#: ../gui/wxpython/modules/extensions.py:343
 #, fuzzy, python-format
 msgid "Unable to load extensions. %s"
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/modules/extensions.py:356
+#: ../gui/wxpython/modules/extensions.py:389
 #, fuzzy
 msgid "Manage installed GRASS Addons extensions"
 msgstr "投影管理"
 
-#: ../gui/wxpython/modules/extensions.py:365
+#: ../gui/wxpython/modules/extensions.py:405
 #, fuzzy
 msgid "List of installed extensions"
 msgstr "等高线级数的列表"
 
-#: ../gui/wxpython/modules/extensions.py:370
+#: ../gui/wxpython/modules/extensions.py:413
 #, fuzzy
 msgid "Uninstall"
 msgstr "等高线级数的列表"
 
-#: ../gui/wxpython/modules/extensions.py:371
+#: ../gui/wxpython/modules/extensions.py:415
 #, fuzzy
 msgid "Uninstall selected Addons extensions"
 msgstr "投影管理"
 
-#: ../gui/wxpython/modules/extensions.py:372
+#: ../gui/wxpython/modules/extensions.py:419
 msgid "Reinstall"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:373
+#: ../gui/wxpython/modules/extensions.py:421
 #, fuzzy
 msgid "Reinstall selected Addons extensions"
 msgstr "投影管理"
 
-#: ../gui/wxpython/modules/extensions.py:410
+#: ../gui/wxpython/modules/extensions.py:462
 #, fuzzy
 msgid "No extension selected. Operation canceled."
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/modules/extensions.py:430
+#: ../gui/wxpython/modules/extensions.py:489
 #, python-format
 msgid ""
 "List of files to be removed:\n"
@@ -16377,266 +16819,412 @@ msgid ""
 "Do you want really to remove <%(ext)s> extension?"
 msgstr ""
 
-#: ../gui/wxpython/modules/extensions.py:433
+#: ../gui/wxpython/modules/extensions.py:493
 #, fuzzy
 msgid "Remove extension"
 msgstr "删除顶点"
 
-#: ../gui/wxpython/modules/extensions.py:464
+#: ../gui/wxpython/modules/extensions.py:526
 #, fuzzy
 msgid "Extension"
 msgstr "数据库连接未定义\n"
 
-#: ../gui/wxpython/modules/vkrige.py:32
+#: ../gui/wxpython/modules/import_export.py:45
+msgid "Multiple import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:62
+#, fuzzy
+msgid "List of raster layers"
+msgstr "将要导入的栅格文件"
+
+#: ../gui/wxpython/modules/import_export.py:64
+#, fuzzy
+msgid "List of vector layers"
+msgstr "将要导入的栅格文件"
+
+#: ../gui/wxpython/modules/import_export.py:66
+#, fuzzy, python-format
+msgid "List of %s layers"
+msgstr "将要导入的栅格文件"
+
+#: ../gui/wxpython/modules/import_export.py:68
+#: ../gui/wxpython/modules/import_export.py:869
+msgid "right click to (un)select all"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:73
+#, fuzzy
+msgid "Name for output GRASS map (editable)"
+msgstr "输出文件的名称"
+
+#: ../gui/wxpython/modules/import_export.py:112
+#: ../gui/wxpython/modules/import_export.py:384
+#: ../gui/wxpython/modules/import_export.py:522
+msgid "&Import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:113
+#: ../gui/wxpython/modules/import_export.py:385
+#: ../gui/wxpython/modules/import_export.py:523
+msgid "Import selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:124
+#, fuzzy
+msgid "Source settings"
+msgstr "打开设置"
+
+#: ../gui/wxpython/modules/import_export.py:145
+#, fuzzy
+msgid "Import settings"
+msgstr "字体设置"
+
+#: ../gui/wxpython/modules/import_export.py:370
+#: ../gui/wxpython/modules/import_export.py:508
+#, fuzzy
+msgid "Add linked layers into layer tree"
+msgstr "加载地图层到层列表"
+
+#: ../gui/wxpython/modules/import_export.py:372
+#: ../gui/wxpython/modules/import_export.py:510
+#: ../gui/wxpython/modules/import_export.py:736
+msgid "Add imported layers into layer tree"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:381
+#: ../gui/wxpython/modules/import_export.py:519
+msgid "&Link"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:382
+#: ../gui/wxpython/modules/import_export.py:520
+msgid "Link selected layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:405
+#: ../gui/wxpython/modules/import_export.py:543
+#, fuzzy
+msgid "No layers selected. Operation canceled."
+msgstr "没有选择图层,操作已取消。"
+
+#: ../gui/wxpython/modules/import_export.py:431
+#, fuzzy
+msgid "Unable to determine number of raster bands"
+msgstr "无法创建栅格地图 %s"
+
+#: ../gui/wxpython/modules/import_export.py:640
+#, fuzzy
+msgid "Define output format for vector data"
+msgstr "输出的栅格/矢量地图"
+
+#: ../gui/wxpython/modules/import_export.py:642
+#, fuzzy
+msgid "Define output format for raster data"
+msgstr "输出的流域栅格图"
+
+#: ../gui/wxpython/modules/import_export.py:650
+msgid "Set external format and close dialog"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:707
+#, fuzzy
+msgid "No data source selected."
+msgstr "没有选中的图层"
+
+#: ../gui/wxpython/modules/import_export.py:722
+msgid "Import DXF layers"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:729
+msgid "Choose DXF file to import"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:758
+#, fuzzy
+msgid "No layers selected."
+msgstr "基础栅格图"
+
+#: ../gui/wxpython/modules/import_export.py:836
+#, fuzzy
+msgid "Reprojection"
+msgstr "投影"
+
+#: ../gui/wxpython/modules/import_export.py:848
+#, fuzzy
+msgid "Name for output GRASS map"
+msgstr "输出文件的名称"
+
+#: ../gui/wxpython/modules/import_export.py:865
+msgid ""
+"Projection of following layers do not match with projection of current "
+"location. "
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:867
+#, fuzzy
+msgid "Layers to be reprojected"
+msgstr "将要导入的二进制栅格文件"
+
+#: ../gui/wxpython/modules/import_export.py:881
+msgid "&Import && reproject"
+msgstr ""
+
+#: ../gui/wxpython/modules/import_export.py:882
+#, fuzzy
+msgid "Reproject selected layers"
+msgstr "删除选中的图层"
+
+#: ../gui/wxpython/modules/vkrige.py:33
 msgid "No GRASS-python library found."
 msgstr "找不到Grass-python库。"
 
-#: ../gui/wxpython/modules/vkrige.py:62
+#: ../gui/wxpython/modules/vkrige.py:71
 msgid "Input Data"
 msgstr "输入数据"
 
-#: ../gui/wxpython/modules/vkrige.py:68
+#: ../gui/wxpython/modules/vkrige.py:81
 msgid "Point dataset:"
 msgstr "点数据集:"
 
-#: ../gui/wxpython/modules/vkrige.py:80
+#: ../gui/wxpython/modules/vkrige.py:97
 msgid "Numeric column:"
 msgstr "数字列"
 
-#: ../gui/wxpython/modules/vkrige.py:91
+#: ../gui/wxpython/modules/vkrige.py:115
 msgid "Kriging"
 msgstr "克里金法"
 
-#: ../gui/wxpython/modules/vkrige.py:116
+#: ../gui/wxpython/modules/vkrige.py:160
 msgid "Name for the output raster map:"
 msgstr "输出的栅格地图名称:"
 
-#: ../gui/wxpython/modules/vkrige.py:124
+#: ../gui/wxpython/modules/vkrige.py:168
 msgid "Export variance map as well: "
 msgstr "并导出方差地图:"
 
-#: ../gui/wxpython/modules/vkrige.py:276
+#: ../gui/wxpython/modules/vkrige.py:403
 msgid "Kriging Module"
 msgstr "克里金模块"
 
-#: ../gui/wxpython/modules/vkrige.py:280
+#: ../gui/wxpython/modules/vkrige.py:412
 msgid "Ready."
 msgstr "准备完毕。"
 
-#: ../gui/wxpython/modules/vkrige.py:304
+#: ../gui/wxpython/modules/vkrige.py:442
 msgid "Variogram fitting"
 msgstr "变异函数拟合"
 
-#: ../gui/wxpython/modules/vkrige.py:314
+#: ../gui/wxpython/modules/vkrige.py:462
 msgid "Plot/refresh variogram"
 msgstr "绘制/刷新变异函数"
 
-#: ../gui/wxpython/modules/vkrige.py:325
+#: ../gui/wxpython/modules/vkrige.py:487
 msgid ":"
 msgstr ":"
 
-#: ../gui/wxpython/modules/vkrige.py:350
+#: ../gui/wxpython/modules/vkrige.py:533
 msgid "Kriging techniques"
 msgstr "克里金技巧"
 
-#: ../gui/wxpython/modules/vkrige.py:364
+#: ../gui/wxpython/modules/vkrige.py:552
 msgid "Block size:"
 msgstr "块大小:"
 
-#: ../gui/wxpython/modules/vkrige.py:397
+#: ../gui/wxpython/modules/vkrige.py:606
 msgid "Auto-fit variogram"
 msgstr "自动拟合变异函数"
 
-#: ../gui/wxpython/modules/vkrige.py:421
+#: ../gui/wxpython/modules/vkrige.py:634
 msgid "Model: "
 msgstr "  模型:"
 
-#: ../gui/wxpython/modules/vkrige.py:510
+#: ../gui/wxpython/modules/vkrige.py:757
 msgid "Work in progress! No functionality provided."
 msgstr "开发中!暂不可用。"
 
-#: ../gui/wxpython/modules/histogram.py:270
+#: ../gui/wxpython/modules/histogram.py:288
 #, fuzzy
 msgid "GRASS GIS Histogramming Tool (d.histogram)"
 msgstr "栅格图的名称"
 
-#: ../gui/wxpython/modules/histogram.py:377
+#: ../gui/wxpython/modules/histogram.py:420
 msgid "Select font for histogram text"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:31 ../gui/wxpython/modules/vclean.py:113
+#: ../gui/wxpython/modules/vclean.py:34 ../gui/wxpython/modules/vclean.py:120
 msgid "Set up vector cleaning tools"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:68
+#: ../gui/wxpython/modules/vclean.py:75
 #, fuzzy
 msgid "break lines/boundaries"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/modules/vclean.py:69
+#: ../gui/wxpython/modules/vclean.py:76
 #, fuzzy
 msgid "remove duplicates"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/modules/vclean.py:70
+#: ../gui/wxpython/modules/vclean.py:77
 #, fuzzy
 msgid "remove dangles"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/modules/vclean.py:71
+#: ../gui/wxpython/modules/vclean.py:78
 #, fuzzy
 msgid "change boundary dangles to lines"
 msgstr "管理边界定义"
 
-#: ../gui/wxpython/modules/vclean.py:72
+#: ../gui/wxpython/modules/vclean.py:79
 #, fuzzy
 msgid "remove bridges"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/modules/vclean.py:73
+#: ../gui/wxpython/modules/vclean.py:80
 msgid "change bridges to lines"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:74
+#: ../gui/wxpython/modules/vclean.py:81
 #, fuzzy
 msgid "snap lines/boundaries"
 msgstr "写入 %s ... "
 
-#: ../gui/wxpython/modules/vclean.py:75
+#: ../gui/wxpython/modules/vclean.py:82
 #, fuzzy
 msgid "remove duplicate area centroids"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/modules/vclean.py:76
+#: ../gui/wxpython/modules/vclean.py:83
 msgid "break polygons"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:77
+#: ../gui/wxpython/modules/vclean.py:84
 #, fuzzy
 msgid "prune lines/boundaries"
 msgstr "将要导入的栅格文件"
 
-#: ../gui/wxpython/modules/vclean.py:78
+#: ../gui/wxpython/modules/vclean.py:85
 #, fuzzy
 msgid "remove small areas"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/modules/vclean.py:79
+#: ../gui/wxpython/modules/vclean.py:86
 #, fuzzy
 msgid "remove lines/boundaries of zero length"
 msgstr "将要导入的栅格文件"
 
-#: ../gui/wxpython/modules/vclean.py:80
+#: ../gui/wxpython/modules/vclean.py:87
 #, fuzzy
 msgid "remove small angles at nodes"
 msgstr "移除 [%s] 的空文件...\n"
 
-#: ../gui/wxpython/modules/vclean.py:115
+#: ../gui/wxpython/modules/vclean.py:122
 msgid "Choose cleaning tools and set thresholds"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:119
+#: ../gui/wxpython/modules/vclean.py:126
 #, fuzzy
 msgid "Select input vector map:"
 msgstr "无法打开输入的dig文件。"
 
-#: ../gui/wxpython/modules/vclean.py:125
+#: ../gui/wxpython/modules/vclean.py:132
 #, fuzzy
 msgid " Feature type: "
 msgstr "要素类型"
 
-#: ../gui/wxpython/modules/vclean.py:129
+#: ../gui/wxpython/modules/vclean.py:136
 #, fuzzy
 msgid "Select output vector map:"
 msgstr "输出矢量文件的名称"
 
-#: ../gui/wxpython/modules/vclean.py:161
+#: ../gui/wxpython/modules/vclean.py:177
 msgid "Copy the current command string to the clipboard (Ctrl+C)"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:197
+#: ../gui/wxpython/modules/vclean.py:223
 msgid "line"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:198
+#: ../gui/wxpython/modules/vclean.py:224
 msgid "boundary"
 msgstr "边界"
 
-#: ../gui/wxpython/modules/vclean.py:199
+#: ../gui/wxpython/modules/vclean.py:225
 msgid "centroid"
 msgstr "中心"
 
-#: ../gui/wxpython/modules/vclean.py:201
+#: ../gui/wxpython/modules/vclean.py:227
 msgid "face"
 msgstr "面"
 
-#: ../gui/wxpython/modules/vclean.py:353
+#: ../gui/wxpython/modules/vclean.py:401
 #, python-format
 msgid "%s. cleaning tool removed, will be ignored"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:355
+#: ../gui/wxpython/modules/vclean.py:404
 msgid "Please select a cleaning tool to remove"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:376
+#: ../gui/wxpython/modules/vclean.py:428
 #, fuzzy, python-format
 msgid "%s. cleaning tool moved up"
 msgstr "点模式下不建立拓扑"
 
-#: ../gui/wxpython/modules/vclean.py:378
+#: ../gui/wxpython/modules/vclean.py:430
 msgid "1. cleaning tool can not be moved up "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:380
+#: ../gui/wxpython/modules/vclean.py:432
 #, fuzzy
 msgid "Please select a cleaning tool to move up"
 msgstr "点模式下不建立拓扑"
 
-#: ../gui/wxpython/modules/vclean.py:402
+#: ../gui/wxpython/modules/vclean.py:460
 #, python-format
 msgid "%s. cleaning tool moved down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:404
+#: ../gui/wxpython/modules/vclean.py:462
 msgid "Last cleaning tool can not be moved down "
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:406
+#: ../gui/wxpython/modules/vclean.py:464
 msgid "Please select a cleaning tool to move down"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:417
+#: ../gui/wxpython/modules/vclean.py:478
 #, python-format
 msgid "cleaning tool: '%s'"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:425
+#: ../gui/wxpython/modules/vclean.py:488
 #, python-format
 msgid "Threshold for %(num)s. tool '%(tool)s': %(thresh)s"
 msgstr ""
 
-#: ../gui/wxpython/modules/vclean.py:453
+#: ../gui/wxpython/modules/vclean.py:516
 #, fuzzy
 msgid "Name of input vector map"
 msgstr "输入的 2D 矢量地图的名称"
 
-#: ../gui/wxpython/modules/vclean.py:454
+#: ../gui/wxpython/modules/vclean.py:517
 #, fuzzy
 msgid "Name for output vector map"
 msgstr "输出矢量文件的名称"
 
-#: ../gui/wxpython/modules/vclean.py:456
+#: ../gui/wxpython/modules/vclean.py:519
 #, fuzzy
 msgid "Threshold"
 msgstr "距离的单位"
 
-#: ../gui/wxpython/modules/vclean.py:458
+#: ../gui/wxpython/modules/vclean.py:521
 #, fuzzy, python-format
 msgid "'%s' not defined"
 msgstr "%s - 未发现"
 
-#: ../gui/wxpython/modules/vclean.py:460
+#: ../gui/wxpython/modules/vclean.py:523
 #, fuzzy, python-format
 msgid ""
 "Some parameters not defined. Operation canceled.\n"
@@ -16644,21 +17232,21 @@ msgid ""
 "%s"
 msgstr "没有选择图层,操作已取消。"
 
-#: ../gui/wxpython/modules/vclean.py:465
+#: ../gui/wxpython/modules/vclean.py:528
 #, fuzzy
 msgid "Executing selected cleaning operations..."
 msgstr "导入地图 %d 的要素..."
 
-#: ../gui/wxpython/modules/vclean.py:521
+#: ../gui/wxpython/modules/vclean.py:585
 msgid "Vector cleaning command copied to clipboard"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1333
+#: ../gui/wxpython/core/workspace.py:1508
 #, python-format
 msgid "Unable to open file <%s> for reading."
 msgstr "无法打开并读取文件<%s>。"
 
-#: ../gui/wxpython/core/workspace.py:1346
+#: ../gui/wxpython/core/workspace.py:1525
 #, python-format
 msgid ""
 "Some lines were skipped when reading settings from file <%(file)s>.\n"
@@ -16667,169 +17255,164 @@ msgid ""
 "Number of skipped lines: %(line)d"
 msgstr ""
 
-#: ../gui/wxpython/core/workspace.py:1564
+#: ../gui/wxpython/core/workspace.py:1750
 #, python-format
 msgid " row %d:"
 msgstr "行 %d:"
 
-#: ../gui/wxpython/core/render.py:146
+#: ../gui/wxpython/core/render.py:151
 #, python-format
 msgid "<%(name)s>: layer type <%(type)s> is not supported"
 msgstr "<%(name)s>: 不支持图层类型 <%(type)s> 。"
 
-#: ../gui/wxpython/core/render.py:167
+#: ../gui/wxpython/core/render.py:170
 #, fuzzy, python-format
 msgid "Command '%s' failed\n"
 msgstr "命令控制台"
 
-#: ../gui/wxpython/core/render.py:169
+#: ../gui/wxpython/core/render.py:173
 #, fuzzy, python-format
 msgid "Details: %s\n"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/core/render.py:274
-#, python-format
-msgid "Unsupported map layer type '%s'"
-msgstr "不支持地图层类型'%s'"
+#: ../gui/wxpython/core/render.py:258
+#, python-format
+msgid "Unsupported map layer type '%s'"
+msgstr "不支持地图层类型'%s'"
+
+#: ../gui/wxpython/core/render.py:581
+#, fuzzy, python-format
+msgid "Rendering failed: %s"
+msgstr "读取dig文件...\n"
+
+#: ../gui/wxpython/core/render.py:602
+#, fuzzy
+msgid "Rendering aborted"
+msgstr "重新渲染地图"
+
+#: ../gui/wxpython/core/render.py:633
+#, fuzzy
+msgid "Downloading data "
+msgstr "读取地图"
+
+#: ../gui/wxpython/core/render.py:643
+#, fuzzy
+msgid "Rendering & "
+msgstr "重新渲染地图"
+
+#: ../gui/wxpython/core/render.py:645
+#, fuzzy
+msgid "Rendering..."
+msgstr "读取地图"
 
-#: ../gui/wxpython/core/render.py:418
+#: ../gui/wxpython/core/render.py:684
 msgid "Trying to recover from default region..."
 msgstr "正在尝试恢复默认区域..."
 
-#: ../gui/wxpython/core/render.py:483
+#: ../gui/wxpython/core/render.py:744
 #, python-format
 msgid "Error: Unable to open '%(file)s'. Reason: %(ret)s. wxGUI exited.\n"
 msgstr "错误:无法打开'%(file)s'。原因:%(ret)s. 退出wxGUI。\n"
 
-#: ../gui/wxpython/core/render.py:491
+#: ../gui/wxpython/core/render.py:754
 #, fuzzy, python-format
 msgid ""
 "\n"
 "ERROR: Unable to read WIND file: %s\n"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/core/render.py:588
+#: ../gui/wxpython/core/render.py:858
 #, fuzzy, python-format
 msgid "Invalid map size %d,%d\n"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/core/render.py:667
+#: ../gui/wxpython/core/render.py:939
 #, fuzzy, python-format
 msgid "Unable to zoom to raster map <%s>."
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/core/render.py:668 ../gui/wxpython/core/render.py:671
-#: ../gui/wxpython/core/render.py:674 ../gui/wxpython/core/gcmd.py:395
+#: ../gui/wxpython/core/render.py:940 ../gui/wxpython/core/render.py:943
+#: ../gui/wxpython/core/render.py:946 ../gui/wxpython/core/gcmd.py:435
 msgid "Details:"
 msgstr "细节:"
 
-#: ../gui/wxpython/core/render.py:670
+#: ../gui/wxpython/core/render.py:942
 #, fuzzy, python-format
 msgid "Unable to zoom to vector map <%s>."
 msgstr "无法找到矢量地图 [%s]"
 
-#: ../gui/wxpython/core/render.py:673
+#: ../gui/wxpython/core/render.py:945
 #, fuzzy, python-format
 msgid "Unable to zoom to 3d raster map <%s>."
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/core/render.py:676
+#: ../gui/wxpython/core/render.py:949
 msgid ""
 "Unable to get current geographic extent. Force quiting wxGUI. Please "
 "manually run g.region to fix the problem."
 msgstr "无法获取当前地理范围。强制退出wxGUI。请手动运行g.region以解决该问题。"
 
-#: ../gui/wxpython/core/render.py:987
-#, fuzzy, python-format
-msgid "ERROR: Rendering failed. Details: %s"
-msgstr "读取dig文件...\n"
-
-#: ../gui/wxpython/core/render.py:1034 ../gui/wxpython/core/render.py:1129
-#, python-format
-msgid "Unable to render map layer <%s>."
-msgstr "无法渲染地图层<%s>。"
-
-#: ../gui/wxpython/core/render.py:1240 ../gui/wxpython/core/render.py:1279
-#, python-format
-msgid "Unable to render overlay <%s>."
-msgstr "无法渲染层<%s>。"
-
-#: ../gui/wxpython/core/render.py:1376
-#, fuzzy
-msgid "Downloading data "
-msgstr "读取地图"
-
-#: ../gui/wxpython/core/render.py:1386
-#, fuzzy
-msgid "Rendering & "
-msgstr "重新渲染地图"
-
-#: ../gui/wxpython/core/render.py:1388
-#, fuzzy
-msgid "Rendering..."
-msgstr "读取地图"
-
-#: ../gui/wxpython/core/debug.py:45
+#: ../gui/wxpython/core/debug.py:48
 msgid "Wx debug level {}."
 msgstr ""
 
-#: ../gui/wxpython/core/debug.py:48
+#: ../gui/wxpython/core/debug.py:53
 msgid ""
 "WARNING: Ignoring unsupported wx debug level (must be >=0 and <=5). {}\n"
 msgstr ""
 
-#: ../gui/wxpython/core/menutree.py:135
+#: ../gui/wxpython/core/menutree.py:143
 #, fuzzy, python-format
 msgid "Unknow tag %s"
 msgstr "未知的类型"
 
-#: ../gui/wxpython/core/toolboxes.py:201
+#: ../gui/wxpython/core/toolboxes.py:217
 msgid "Unable to parse user toolboxes XML files. Default files will be loaded."
 msgstr "无法解析工具栏XML文件。将使用默认文件。"
 
-#: ../gui/wxpython/core/toolboxes.py:241
+#: ../gui/wxpython/core/toolboxes.py:261
 #, fuzzy
 msgid "Unable to create toolboxes directory."
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/core/toolboxes.py:461
+#: ../gui/wxpython/core/toolboxes.py:485
 msgid "Custom toolboxes"
 msgstr "自家义工具栏"
 
-#: ../gui/wxpython/core/toolboxes.py:485
+#: ../gui/wxpython/core/toolboxes.py:509
 msgid "List of addons cannot be obtained because g.extension failed."
 msgstr ""
 
-#: ../gui/wxpython/core/toolboxes.py:533
+#: ../gui/wxpython/core/toolboxes.py:565
 msgid "Addons"
 msgstr "附加工具"
 
-#: ../gui/wxpython/core/utils.py:53
+#: ../gui/wxpython/core/utils.py:60
 #, python-format
 msgid "Syntax error: %s"
 msgstr "语法错误:%s"
 
-#: ../gui/wxpython/core/utils.py:331
+#: ../gui/wxpython/core/utils.py:351
 #, fuzzy, python-format
 msgid "Vector map <%(map)s>: %(msg)s\n"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/core/utils.py:558
-#, python-format
-msgid "failed to open '%s'"
+#: ../gui/wxpython/core/utils.py:535
+#, fuzzy
+msgid "failed to open '{}'"
 msgstr "无法打开'%s'"
 
-#: ../gui/wxpython/core/utils.py:853
+#: ../gui/wxpython/core/utils.py:841
 #, fuzzy, python-format
 msgid "ERROR: Unable to determine GRASS version. Details: %s"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/core/utils.py:888
+#: ../gui/wxpython/core/utils.py:882
 #, fuzzy, python-format
 msgid "Unable to open file '%s'\n"
 msgstr "无法打开输出文件 <%s>"
 
-#: ../gui/wxpython/core/utils.py:895
+#: ../gui/wxpython/core/utils.py:892
 #, python-format
 msgid ""
 "%s: line skipped - unable to parse '%s'\n"
@@ -16838,17 +17421,17 @@ msgstr ""
 "%s: 跳过行 - 无法解析 '%s'\n"
 "原因:%s \n"
 
-#: ../gui/wxpython/core/utils.py:900
+#: ../gui/wxpython/core/utils.py:897
 #, fuzzy, python-format
 msgid "Duplicated key: %s\n"
 msgstr "无法计算面的质心"
 
-#: ../gui/wxpython/core/utils.py:916
+#: ../gui/wxpython/core/utils.py:913
 #, fuzzy, python-format
 msgid "Unable to create file '%s'\n"
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/core/gconsole.py:491
+#: ../gui/wxpython/core/gconsole.py:502
 #, python-format
 msgid ""
 "Unable to run command:\n"
@@ -16857,175 +17440,180 @@ msgid ""
 "Option <%(opt)s>: read from standard input is not supported by wxGUI"
 msgstr ""
 
-#: ../gui/wxpython/core/gconsole.py:612
+#: ../gui/wxpython/core/gconsole.py:526
+#, fuzzy, python-format
+msgid "Module <%s> not found."
+msgstr "未找到栅格图<%s>"
+
+#: ../gui/wxpython/core/gconsole.py:654
 #, python-format
 msgid "%d sec"
 msgstr "%d 秒"
 
-#: ../gui/wxpython/core/gconsole.py:615
+#: ../gui/wxpython/core/gconsole.py:657
 #, fuzzy, python-format
 msgid "%(min)d min %(sec)d sec"
 msgstr "%s在%s中: %s"
 
-#: ../gui/wxpython/core/gconsole.py:623
+#: ../gui/wxpython/core/gconsole.py:665
 msgid ""
 "Please note that the data are left in inconsistent state and may be corrupted"
 msgstr "当前数据状态不匹配,可能导致损坏"
 
-#: ../gui/wxpython/core/gconsole.py:625
+#: ../gui/wxpython/core/gconsole.py:667
 msgid "Command aborted"
 msgstr "终止命令"
 
-#: ../gui/wxpython/core/gconsole.py:627
+#: ../gui/wxpython/core/gconsole.py:669
 msgid "Command finished"
 msgstr "命令完成"
 
-#: ../gui/wxpython/core/gcmd.py:128
+#: ../gui/wxpython/core/gcmd.py:126
 #, fuzzy
 msgid "Reason"
 msgstr "读取 %s ..."
 
-#: ../gui/wxpython/core/gcmd.py:392
+#: ../gui/wxpython/core/gcmd.py:432
 msgid "Execution failed:"
 msgstr "操作失败:"
 
-#: ../gui/wxpython/core/gcmd.py:397 ../gui/wxpython/core/gcmd.py:401
+#: ../gui/wxpython/core/gcmd.py:437 ../gui/wxpython/core/gcmd.py:444
 msgid "Error: "
 msgstr "错误:"
 
-#: ../gui/wxpython/core/gcmd.py:476
+#: ../gui/wxpython/core/gcmd.py:521
 #, python-format
 msgid "Unable to exectute command: '%s'"
 msgstr "无法执行命令:'%s'"
 
-#: ../gui/wxpython/core/settings.py:485
+#: ../gui/wxpython/core/settings.py:490
 msgid "Segment break"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:551
+#: ../gui/wxpython/core/settings.py:556
 #, fuzzy
 msgid "Data point"
 msgstr "点"
 
-#: ../gui/wxpython/core/settings.py:625
+#: ../gui/wxpython/core/settings.py:630
 #, fuzzy
 msgid "animation"
 msgstr "MPEG-1动画"
 
-#: ../gui/wxpython/core/settings.py:847
+#: ../gui/wxpython/core/settings.py:852
 msgid "Collapse all except PERMANENT and current"
 msgstr "除PERMANENT和current外全部收起"
 
-#: ../gui/wxpython/core/settings.py:848
+#: ../gui/wxpython/core/settings.py:853
 msgid "Collapse all except PERMANENT"
 msgstr "除PERMANENT外全部收起"
 
-#: ../gui/wxpython/core/settings.py:849
+#: ../gui/wxpython/core/settings.py:854
 msgid "Collapse all except current"
 msgstr "除current外全部收起"
 
-#: ../gui/wxpython/core/settings.py:850
+#: ../gui/wxpython/core/settings.py:855
 msgid "Collapse all"
 msgstr "全部收起"
 
-#: ../gui/wxpython/core/settings.py:851
+#: ../gui/wxpython/core/settings.py:856
 msgid "Expand all"
 msgstr "展开全部"
 
-#: ../gui/wxpython/core/settings.py:855
+#: ../gui/wxpython/core/settings.py:861
 msgid "Display selected"
 msgstr "显示选中项目"
 
-#: ../gui/wxpython/core/settings.py:863
+#: ../gui/wxpython/core/settings.py:870
 msgid "Classic (labels only)"
 msgstr "经典(仅标签)"
 
-#: ../gui/wxpython/core/settings.py:864
+#: ../gui/wxpython/core/settings.py:871
 msgid "Combined (labels and module names)"
 msgstr "混合(标签和模块名称)"
 
-#: ../gui/wxpython/core/settings.py:865
+#: ../gui/wxpython/core/settings.py:872
 msgid "Expert (module names only)"
 msgstr "高级(仅模块名称)"
 
-#: ../gui/wxpython/core/settings.py:870
+#: ../gui/wxpython/core/settings.py:877
 msgid "Basic top"
 msgstr "顶置标签"
 
-#: ../gui/wxpython/core/settings.py:871
+#: ../gui/wxpython/core/settings.py:878
 msgid "Basic left"
 msgstr "左置标签"
 
-#: ../gui/wxpython/core/settings.py:872
+#: ../gui/wxpython/core/settings.py:879
 msgid "Fancy green"
 msgstr "花哨绿"
 
-#: ../gui/wxpython/core/settings.py:873
+#: ../gui/wxpython/core/settings.py:880
 msgid "List left"
 msgstr "左置列表"
 
-#: ../gui/wxpython/core/settings.py:877
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom and recenter"
 msgstr "缩放并重调整中心"
 
-#: ../gui/wxpython/core/settings.py:878
+#: ../gui/wxpython/core/settings.py:887
 msgid "Zoom to mouse cursor"
 msgstr "缩放到鼠标光标"
 
-#: ../gui/wxpython/core/settings.py:879
+#: ../gui/wxpython/core/settings.py:887
 msgid "Nothing"
 msgstr "无操作"
 
-#: ../gui/wxpython/core/settings.py:880
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll forward to zoom in"
 msgstr "向前滚动为放大"
 
-#: ../gui/wxpython/core/settings.py:881
+#: ../gui/wxpython/core/settings.py:889
 msgid "Scroll back to zoom in"
 msgstr "向后滚动为放大"
 
-#: ../gui/wxpython/core/settings.py:914 ../gui/wxpython/core/settings.py:926
+#: ../gui/wxpython/core/settings.py:922 ../gui/wxpython/core/settings.py:934
 msgid "box"
 msgstr "框"
 
-#: ../gui/wxpython/core/settings.py:915
+#: ../gui/wxpython/core/settings.py:923
 msgid "sphere"
 msgstr "球体"
 
-#: ../gui/wxpython/core/settings.py:916
+#: ../gui/wxpython/core/settings.py:924
 msgid "cube"
 msgstr "立方体"
 
-#: ../gui/wxpython/core/settings.py:917
+#: ../gui/wxpython/core/settings.py:925
 msgid "diamond"
 msgstr "钻石"
 
-#: ../gui/wxpython/core/settings.py:918
+#: ../gui/wxpython/core/settings.py:926
 msgid "aster"
 msgstr "星形"
 
-#: ../gui/wxpython/core/settings.py:919
+#: ../gui/wxpython/core/settings.py:927
 msgid "gyro"
 msgstr "陀螺"
 
-#: ../gui/wxpython/core/settings.py:920
+#: ../gui/wxpython/core/settings.py:928
 msgid "histogram"
 msgstr "直方图"
 
-#: ../gui/wxpython/core/settings.py:925
+#: ../gui/wxpython/core/settings.py:934
 msgid "cross"
 msgstr "十字形"
 
-#: ../gui/wxpython/core/settings.py:927
+#: ../gui/wxpython/core/settings.py:934
 msgid "circle"
 msgstr "圆形"
 
-#: ../gui/wxpython/core/settings.py:959
+#: ../gui/wxpython/core/settings.py:967
 #, fuzzy, python-format
 msgid "Unable to read settings file <%s>\n"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/core/settings.py:983
+#: ../gui/wxpython/core/settings.py:993
 #, python-format
 msgid ""
 "Error: Reading settings from file <%(file)s> failed.\n"
@@ -17033,12 +17621,12 @@ msgid ""
 "\t\tLine: '%(line)s'\n"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1002
+#: ../gui/wxpython/core/settings.py:1011
 #, fuzzy
 msgid "Unable to create settings directory"
 msgstr "无法创建文件 [%s]"
 
-#: ../gui/wxpython/core/settings.py:1038
+#: ../gui/wxpython/core/settings.py:1060
 #, python-format
 msgid ""
 "Writing settings to file <%(file)s> failed.\n"
@@ -17046,16 +17634,16 @@ msgid ""
 "Details: %(detail)s"
 msgstr ""
 
-#: ../gui/wxpython/core/settings.py:1143
+#: ../gui/wxpython/core/settings.py:1166
 msgid "Unable to set "
 msgstr "无法设置"
 
-#: ../gui/wxpython/core/settings.py:1179 ../gui/wxpython/core/settings.py:1189
+#: ../gui/wxpython/core/settings.py:1202 ../gui/wxpython/core/settings.py:1212
 #, fuzzy, python-format
 msgid "Unable to parse settings '%s'"
 msgstr "无法插入新行:%s"
 
-#: ../gui/wxpython/core/ws.py:49
+#: ../gui/wxpython/core/ws.py:51
 msgid ""
 "Unable to load GDAL Python bindings.\n"
 "WMS layers can not be displayed without the bindings.\n"
@@ -17063,260 +17651,291 @@ msgstr ""
 "无法载入GDAL Python绑定。\n"
 "WMS图层无法显示。\n"
 
-#: ../gui/wxpython/location_wizard/wizard.py:97
+#: ../gui/wxpython/location_wizard/wizard.py:105
 msgid "Define GRASS Database and Location Name"
 msgstr "定义GRASS数据库及地点名称"
 
-#: ../gui/wxpython/location_wizard/wizard.py:114
+#: ../gui/wxpython/location_wizard/wizard.py:125
 msgid "GIS Data Directory:"
 msgstr "GIS数据目录:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:130
+#: ../gui/wxpython/location_wizard/wizard.py:144
 msgid "Project Location"
 msgstr "投影地点"
 
-#: ../gui/wxpython/location_wizard/wizard.py:131
+#: ../gui/wxpython/location_wizard/wizard.py:145
 #, fuzzy
 msgid "Name of location directory in GIS Data Directory"
 msgstr "新GIS数据目录"
 
-#: ../gui/wxpython/location_wizard/wizard.py:142
+#: ../gui/wxpython/location_wizard/wizard.py:160
 msgid "Location Title"
 msgstr "地点名称:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:143
+#: ../gui/wxpython/location_wizard/wizard.py:162
 msgid "Optional location title, you can leave this field blank."
 msgstr "地点标签为选填项,可以为空."
 
-#: ../gui/wxpython/location_wizard/wizard.py:163
+#: ../gui/wxpython/location_wizard/wizard.py:184
 #, python-format
 msgid ""
 "Name <%(name)s> is not a valid name for location. Please use only ASCII "
 "characters excluding %(chars)s and space."
 msgstr "地点名称<%(name)s>无效.请使用除(%(chars)s)之外的ASCII字及防空格命名."
 
-#: ../gui/wxpython/location_wizard/wizard.py:166
+#: ../gui/wxpython/location_wizard/wizard.py:192
 #, fuzzy
 msgid "Invalid location name"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:181
+#: ../gui/wxpython/location_wizard/wizard.py:207
 msgid "Choose GRASS data directory:"
 msgstr "选择GRASS数据目录:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:192
-#: ../gui/wxpython/location_wizard/wizard.py:2062
+#: ../gui/wxpython/location_wizard/wizard.py:221
+#: ../gui/wxpython/location_wizard/wizard.py:2481
 msgid "Location already exists in GRASS Database."
 msgstr "该地点已存在于GRASS数据库中."
 
-#: ../gui/wxpython/location_wizard/wizard.py:196
+#: ../gui/wxpython/location_wizard/wizard.py:225
 msgid "Unable to create location"
 msgstr "无法创建地点"
 
-#: ../gui/wxpython/location_wizard/wizard.py:209
+#: ../gui/wxpython/location_wizard/wizard.py:239
 msgid ""
 "Title of the location is limited only to one line and 256 characters. The "
 "rest of the text will be ignored."
 msgstr "地点标签长度限制1行256个字符串。多出部分将被忽略。"
 
-#: ../gui/wxpython/location_wizard/wizard.py:216
+#: ../gui/wxpython/location_wizard/wizard.py:249
 msgid "Choose method for creating a new location"
 msgstr "选择创建地点的方式"
 
-#: ../gui/wxpython/location_wizard/wizard.py:223
+#: ../gui/wxpython/location_wizard/wizard.py:256
 msgid "Select EPSG code of spatial reference system"
 msgstr "选择空间参考系统EPSG代码"
 
-#: ../gui/wxpython/location_wizard/wizard.py:226
+#: ../gui/wxpython/location_wizard/wizard.py:262
 msgid "Read projection and datum terms from a georeferenced data file"
 msgstr "从地理配准数据文件读取投影和基准面条件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:229
+#: ../gui/wxpython/location_wizard/wizard.py:266
 msgid "Read projection and datum terms from a Well Known Text (WKT) .prj file"
 msgstr "从WKT .prj文件读取投影和基准面条件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:232
+#: ../gui/wxpython/location_wizard/wizard.py:269
 msgid "Select coordinate system parameters from a list"
 msgstr "从列表中选择坐标系统参数"
 
-#: ../gui/wxpython/location_wizard/wizard.py:234
+#: ../gui/wxpython/location_wizard/wizard.py:272
 msgid "Specify projection and datum terms using custom PROJ.4 parameters"
 msgstr "使用自定义PROJ. 4参数指定投影和基准面条件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:237
+#: ../gui/wxpython/location_wizard/wizard.py:275
 msgid "Create a generic Cartesian coordinate system (XY)"
 msgstr "创建通用笛卡尔坐标系统(XY)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:338
+#: ../gui/wxpython/location_wizard/wizard.py:279
+#, fuzzy
+msgid "Simple methods:"
+msgstr "安静模式"
+
+#: ../gui/wxpython/location_wizard/wizard.py:291
+#, fuzzy
+msgid "Advanced methods:"
+msgstr "高级"
+
+#: ../gui/wxpython/location_wizard/wizard.py:394
 msgid "Choose projection"
 msgstr "选择投影"
 
-#: ../gui/wxpython/location_wizard/wizard.py:354
-#: ../gui/wxpython/location_wizard/wizard.py:855
-#: ../gui/wxpython/location_wizard/wizard.py:1027
-#: ../gui/wxpython/location_wizard/wizard.py:1338
+#: ../gui/wxpython/location_wizard/wizard.py:410
+#: ../gui/wxpython/location_wizard/wizard.py:937
+#: ../gui/wxpython/location_wizard/wizard.py:1118
+#: ../gui/wxpython/location_wizard/wizard.py:1448
+#: ../gui/wxpython/location_wizard/wizard.py:1676
 msgid "Code"
 msgstr "代码"
 
-#: ../gui/wxpython/location_wizard/wizard.py:358
+#: ../gui/wxpython/location_wizard/wizard.py:414
 msgid "Projection code:"
 msgstr "投影代码:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:366
-#: ../gui/wxpython/location_wizard/wizard.py:868
-#: ../gui/wxpython/location_wizard/wizard.py:1044
+#: ../gui/wxpython/location_wizard/wizard.py:422
+#: ../gui/wxpython/location_wizard/wizard.py:950
+#: ../gui/wxpython/location_wizard/wizard.py:1135
 msgid "Search in description:"
 msgstr "在描述中搜索:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:541
+#: ../gui/wxpython/location_wizard/wizard.py:601
 #, python-format
 msgid "Unable to read list: %s"
 msgstr "无法读取列表:%s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:644
+#: ../gui/wxpython/location_wizard/wizard.py:706
 msgid "Choose projection parameters"
 msgstr "选择投影参数"
 
-#: ../gui/wxpython/location_wizard/wizard.py:658
+#: ../gui/wxpython/location_wizard/wizard.py:720
 msgid "Select datum or ellipsoid (next page)"
 msgstr "指定基准面或椭球体(下一页)"
 
-#: ../gui/wxpython/location_wizard/wizard.py:665
+#: ../gui/wxpython/location_wizard/wizard.py:728
 msgid "Datum with associated ellipsoid"
 msgstr "基准面及相关椭球体"
 
-#: ../gui/wxpython/location_wizard/wizard.py:668
+#: ../gui/wxpython/location_wizard/wizard.py:731
 msgid "Ellipsoid only"
 msgstr "仅椭球体"
 
-#: ../gui/wxpython/location_wizard/wizard.py:725
+#: ../gui/wxpython/location_wizard/wizard.py:789
 #, fuzzy, python-format
 msgid "You must enter a value for %s"
 msgstr "您必须至少选择一个工具"
 
-#: ../gui/wxpython/location_wizard/wizard.py:737
-#: ../gui/wxpython/location_wizard/wizard.py:756
+#: ../gui/wxpython/location_wizard/wizard.py:808
+#: ../gui/wxpython/location_wizard/wizard.py:829
 #, python-format
 msgid " Enter parameters for %s projection "
 msgstr "输入投影%s的参数"
 
-#: ../gui/wxpython/location_wizard/wizard.py:833
+#: ../gui/wxpython/location_wizard/wizard.py:914
 msgid "Specify geodetic datum"
 msgstr "选择大地测量基准面"
 
-#: ../gui/wxpython/location_wizard/wizard.py:855
+#: ../gui/wxpython/location_wizard/wizard.py:937
 msgid "Ellipsoid"
 msgstr "椭球体"
 
-#: ../gui/wxpython/location_wizard/wizard.py:859
+#: ../gui/wxpython/location_wizard/wizard.py:941
 msgid "Datum code:"
 msgstr "基准面代码:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:998
+#: ../gui/wxpython/location_wizard/wizard.py:1089
 msgid "Specify ellipsoid"
 msgstr "指定椭球体"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1015
+#: ../gui/wxpython/location_wizard/wizard.py:1106
 #, fuzzy
 msgid "Earth based"
 msgstr "数据库名称:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1018
+#: ../gui/wxpython/location_wizard/wizard.py:1109
 msgid "Planetary bodies"
 msgstr "行星体"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1032
+#: ../gui/wxpython/location_wizard/wizard.py:1123
 msgid "Ellipsoid code:"
 msgstr "椭球体代码"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1164
-#: ../gui/wxpython/location_wizard/wizard.py:1224
+#: ../gui/wxpython/location_wizard/wizard.py:1265
+#: ../gui/wxpython/location_wizard/wizard.py:1325
 msgid "Select georeferenced file"
 msgstr "选择地理配准文件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1169
+#: ../gui/wxpython/location_wizard/wizard.py:1270
 msgid "Georeferenced file:"
 msgstr "地理配准文件:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1238
-#: ../gui/wxpython/location_wizard/wizard.py:1295
+#: ../gui/wxpython/location_wizard/wizard.py:1341
+#: ../gui/wxpython/location_wizard/wizard.py:1399
 msgid "Select Well Known Text (WKT) .prj file"
 msgstr "选择WKT .prj文件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1243
+#: ../gui/wxpython/location_wizard/wizard.py:1346
 #, fuzzy
 msgid "WKT .prj file:"
 msgstr "DXF文件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1312
+#: ../gui/wxpython/location_wizard/wizard.py:1417
 msgid "Choose EPSG Code"
 msgstr "选择EPSG代码"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1320
+#: ../gui/wxpython/location_wizard/wizard.py:1426
 msgid "Path to the EPSG-codes file:"
 msgstr "EPSG代码文件路径:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1474
+#: ../gui/wxpython/location_wizard/wizard.py:1590
 msgid "Choose EPSG codes file"
 msgstr "选择EPSG代码文件"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1503
-#, python-format
-msgid "Unable to read EPGS codes: %s"
+#: ../gui/wxpython/location_wizard/wizard.py:1641
+#, fuzzy
+msgid "Choose IAU Code"
+msgstr "选择EPSG代码"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1650
+#, fuzzy
+msgid "Path to the IAU-codes file:"
+msgstr "EPSG代码文件路径:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1653
+#, fuzzy
+msgid "IAU code:"
+msgstr "EPSG代码:"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1835
+#, fuzzy
+msgid "Choose IAU codes file"
+msgstr "选择EPSG代码文件"
+
+#: ../gui/wxpython/location_wizard/wizard.py:1870
+#, fuzzy
+msgid "Unable to read IAU codes: {}"
 msgstr "无法读取EPSG代码:%s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1521
+#: ../gui/wxpython/location_wizard/wizard.py:1890
 msgid "Choose method of specifying georeferencing parameters"
 msgstr "选择定义地理配准参数的方式"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1529
+#: ../gui/wxpython/location_wizard/wizard.py:1899
 msgid "Enter PROJ.4 parameters string:"
 msgstr "输入PROJ.4参数字符串"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1585
-#: ../gui/wxpython/location_wizard/wizard.py:1589
+#: ../gui/wxpython/location_wizard/wizard.py:1955
+#: ../gui/wxpython/location_wizard/wizard.py:1959
 #, fuzzy
 msgid "Datum transform is required."
 msgstr "输出栅格文件的标题"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1665
+#: ../gui/wxpython/location_wizard/wizard.py:2041
 msgid "GRASS Database:"
 msgstr "GRASS数据库:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1671
+#: ../gui/wxpython/location_wizard/wizard.py:2047
 msgid "Location Name:"
 msgstr "地点名称:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1677
+#: ../gui/wxpython/location_wizard/wizard.py:2053
 #, fuzzy
 msgid "Location Title:"
 msgstr "地点名称:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1683
+#: ../gui/wxpython/location_wizard/wizard.py:2059
 msgid "Projection:"
 msgstr "投影:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1689
+#: ../gui/wxpython/location_wizard/wizard.py:2067
 #, fuzzy
 msgid ""
 "PROJ.4 definition:\n"
 " (non-definitive)"
 msgstr "PROJ.4设置:"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1792
+#: ../gui/wxpython/location_wizard/wizard.py:2191
 #, python-format
 msgid "Do you want to create GRASS location <%s>?"
 msgstr "创建GRASS地点<%s>?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1793
+#: ../gui/wxpython/location_wizard/wizard.py:2193
 msgid "Create new location?"
 msgstr "创建新地点?"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1837
+#: ../gui/wxpython/location_wizard/wizard.py:2241
 msgid "Define new GRASS Location"
 msgstr "定义新GRASS地点"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1929
+#: ../gui/wxpython/location_wizard/wizard.py:2338
 #, python-format
 msgid ""
 "Unable to create new location. Location <%(loc)s> not created.\n"
@@ -17327,15 +17946,15 @@ msgstr ""
 "\n"
 "更多信息: %(err)s"
 
-#: ../gui/wxpython/location_wizard/wizard.py:1937
+#: ../gui/wxpython/location_wizard/wizard.py:2346
 msgid "Location wizard canceled. Location not created."
 msgstr "地点向导已取消,没有创建新地点。"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2060
+#: ../gui/wxpython/location_wizard/wizard.py:2479
 msgid "Unable to create new location"
 msgstr "无法创建新地点"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2079
+#: ../gui/wxpython/location_wizard/wizard.py:2500
 #, fuzzy, python-format
 msgid ""
 "Location <%(loc)s> will be created in GIS data directory <%(dir)s>. You will "
@@ -17344,240 +17963,245 @@ msgstr ""
 "将在目录<%(dir)s>下创建新地点<%(loc)s>。若需改变默认目录,请在GRASS启动时设"
 "置。"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2084
+#: ../gui/wxpython/location_wizard/wizard.py:2505
 msgid "New GIS data directory"
 msgstr "新GIS数据目录"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2115
+#: ../gui/wxpython/location_wizard/wizard.py:2536
 msgid "EPSG code missing."
 msgstr "没有EPSG代码。"
 
-#: ../gui/wxpython/location_wizard/wizard.py:2126
-#: ../gui/wxpython/location_wizard/wizard.py:2135
+#: ../gui/wxpython/location_wizard/wizard.py:2546
+#, fuzzy
+msgid "IAU code missing."
+msgstr "没有EPSG代码。"
+
+#: ../gui/wxpython/location_wizard/wizard.py:2557
+#: ../gui/wxpython/location_wizard/wizard.py:2566
 #, fuzzy, python-format
 msgid "File <%s> not found."
 msgstr "未找到栅格图<%s>"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:36
+#: ../gui/wxpython/location_wizard/dialogs.py:38
 msgid "Set default region extent and resolution"
 msgstr "设置缺省地域范围和分辨率"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:83
+#: ../gui/wxpython/location_wizard/dialogs.py:109
 msgid "&Set region"
 msgstr "设置区域(&S)"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:113
+#: ../gui/wxpython/location_wizard/dialogs.py:141
 msgid "Invalid location selected."
 msgstr "选择了无效地点."
 
-#: ../gui/wxpython/location_wizard/dialogs.py:130
+#: ../gui/wxpython/location_wizard/dialogs.py:160
 msgid "Invalid region"
 msgstr "无效区域"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:160
+#: ../gui/wxpython/location_wizard/dialogs.py:191
 msgid "Click here to show 3D settings"
 msgstr "点击显示3D设置"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:161
+#: ../gui/wxpython/location_wizard/dialogs.py:192
 msgid "Click here to hide 3D settings"
 msgstr "点击关闭3D设置"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:184
-#: ../gui/wxpython/location_wizard/dialogs.py:466
+#: ../gui/wxpython/location_wizard/dialogs.py:218
+#: ../gui/wxpython/location_wizard/dialogs.py:517
 #, python-format
 msgid "Rows: %d"
 msgstr "行:%d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:185
-#: ../gui/wxpython/location_wizard/dialogs.py:467
+#: ../gui/wxpython/location_wizard/dialogs.py:219
+#: ../gui/wxpython/location_wizard/dialogs.py:518
 #, python-format
 msgid "Cols: %d"
 msgstr "列:%d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:186
-#: ../gui/wxpython/location_wizard/dialogs.py:468
+#: ../gui/wxpython/location_wizard/dialogs.py:220
+#: ../gui/wxpython/location_wizard/dialogs.py:519
 #, python-format
 msgid "Cells: %d"
 msgstr "像素:%d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:228
-#: ../gui/wxpython/location_wizard/dialogs.py:470
+#: ../gui/wxpython/location_wizard/dialogs.py:268
+#: ../gui/wxpython/location_wizard/dialogs.py:521
 #, python-format
 msgid "Depth: %d"
 msgstr "深度:%d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:229
-#: ../gui/wxpython/location_wizard/dialogs.py:471
+#: ../gui/wxpython/location_wizard/dialogs.py:272
+#: ../gui/wxpython/location_wizard/dialogs.py:522
 #, python-format
 msgid "3D Cells: %d"
 msgstr "3D像素:%d"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:248
+#: ../gui/wxpython/location_wizard/dialogs.py:295
 msgid "T-B resolution"
 msgstr "顶到底分辨率"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:311
+#: ../gui/wxpython/location_wizard/dialogs.py:360
 msgid "North"
 msgstr "北"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:319
+#: ../gui/wxpython/location_wizard/dialogs.py:368
 msgid "West"
 msgstr "西"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:339
+#: ../gui/wxpython/location_wizard/dialogs.py:390
 msgid "East"
 msgstr "东"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:348
+#: ../gui/wxpython/location_wizard/dialogs.py:399
 msgid "South"
 msgstr "南"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:352
+#: ../gui/wxpython/location_wizard/dialogs.py:403
 msgid "N-S resolution"
 msgstr "南北向分辨率"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:360
+#: ../gui/wxpython/location_wizard/dialogs.py:411
 msgid "E-W resolution"
 msgstr "东西向分辨率"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:438
+#: ../gui/wxpython/location_wizard/dialogs.py:489
 #, python-format
 msgid "Invalid value: %s"
 msgstr "无效数值: %s"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:522
+#: ../gui/wxpython/location_wizard/dialogs.py:577
 msgid "Select datum transformation"
 msgstr "选择基准面转换"
 
-#: ../gui/wxpython/location_wizard/dialogs.py:547
+#: ../gui/wxpython/location_wizard/dialogs.py:603
 msgid "Select from list of datum transformations"
 msgstr "从基准面转换列表选择"
 
-#: ../gui/wxpython/nviz/mapwindow.py:224
+#: ../gui/wxpython/nviz/mapwindow.py:245
 msgid ""
 "Opening 3D view was not successful. Please try to change the value of depth "
 "buffer in GUI Settings dialog > tab Map Display > Advanced and restart GUI."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:559
+#: ../gui/wxpython/nviz/mapwindow.py:599
 #, python-format
 msgid ""
 "Image is too large, your OpenGL implementation supports maximum texture size "
 "%d px."
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1057
+#: ../gui/wxpython/nviz/mapwindow.py:1113
 msgid "Easting"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1058
+#: ../gui/wxpython/nviz/mapwindow.py:1114
 #, fuzzy
 msgid "Northing"
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1059
+#: ../gui/wxpython/nviz/mapwindow.py:1115
 #, fuzzy
 msgid "Elevation"
 msgstr "高程图"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1065
+#: ../gui/wxpython/nviz/mapwindow.py:1121
 #, fuzzy
 msgid "Surface map name"
 msgstr "%s - 非法的名称"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1066
+#: ../gui/wxpython/nviz/mapwindow.py:1124
 #, fuzzy
 msgid "Surface map elevation"
 msgstr "输出的表面栅格文件 (高程)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1067
+#: ../gui/wxpython/nviz/mapwindow.py:1126
 #, fuzzy
 msgid "Surface map color"
 msgstr "管理地图颜色"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1076
+#: ../gui/wxpython/nviz/mapwindow.py:1137
 msgid "XY distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1077
+#: ../gui/wxpython/nviz/mapwindow.py:1140
 msgid "XYZ distance from previous"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1078
+#: ../gui/wxpython/nviz/mapwindow.py:1143
 #, fuzzy
 msgid "Distance along surface"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1083
+#: ../gui/wxpython/nviz/mapwindow.py:1147
 #, fuzzy
 msgid "Distance along exag. surface"
 msgstr "纹理特征"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1090
+#: ../gui/wxpython/nviz/mapwindow.py:1151
 #, fuzzy
 msgid "No point on surface"
 msgstr "指定点的数量"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1551
+#: ../gui/wxpython/nviz/mapwindow.py:1633
 msgid "Loading raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1555
+#: ../gui/wxpython/nviz/mapwindow.py:1637
 msgid "Loading 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1561
+#: ../gui/wxpython/nviz/mapwindow.py:1645
 #, fuzzy
 msgid "failed"
 msgstr "输入失败"
 
-#: ../gui/wxpython/nviz/mapwindow.py:1563
+#: ../gui/wxpython/nviz/mapwindow.py:1648
 #, python-format
 msgid "Unsupported layer type '%s'"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1675
+#: ../gui/wxpython/nviz/mapwindow.py:1768
 msgid "Unable to unload raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1680
+#: ../gui/wxpython/nviz/mapwindow.py:1773
 msgid "Unable to unload 3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1681
+#: ../gui/wxpython/nviz/mapwindow.py:1774
 msgid "3d raster map"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1691
+#: ../gui/wxpython/nviz/mapwindow.py:1786
 msgid "unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1743
+#: ../gui/wxpython/nviz/mapwindow.py:1842
 #, python-format
 msgid "Loading vector map <%(name)s> (%(type)s) failed"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1803
+#: ../gui/wxpython/nviz/mapwindow.py:1905
 #, python-format
 msgid "Unable to unload vector map <%(name)s> (%(type)s)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:1806
+#: ../gui/wxpython/nviz/mapwindow.py:1909
 #, python-format
 msgid "Vector map <%(name)s> (%(type)s) unloaded successfully"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2163
+#: ../gui/wxpython/nviz/mapwindow.py:2286
 #, fuzzy, python-format
 msgid "Vector point layer not found (id = %d)"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2165
+#: ../gui/wxpython/nviz/mapwindow.py:2288
 #, fuzzy, python-format
 msgid "Unable to set data layer properties (id = %d)"
 msgstr "无法获取行 %d (从栅格图 %s 中)"
 
-#: ../gui/wxpython/nviz/mapwindow.py:2168
+#: ../gui/wxpython/nviz/mapwindow.py:2292
 #, python-format
 msgid ""
 "Setting data layer properties failed.\n"
@@ -17585,806 +18209,806 @@ msgid ""
 "%s"
 msgstr ""
 
-#: ../gui/wxpython/nviz/mapwindow.py:2223
-#: ../gui/wxpython/nviz/mapwindow.py:2241 ../gui/wxpython/nviz/tools.py:2280
-#: ../gui/wxpython/nviz/tools.py:2325 ../gui/wxpython/nviz/tools.py:4587
+#: ../gui/wxpython/nviz/mapwindow.py:2347
+#: ../gui/wxpython/nviz/mapwindow.py:2366 ../gui/wxpython/nviz/tools.py:2678
+#: ../gui/wxpython/nviz/tools.py:2727 ../gui/wxpython/nviz/tools.py:5171
 msgid "constant#"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:89 ../gui/wxpython/nviz/preferences.py:56
-#: ../gui/wxpython/nviz/preferences.py:61
+#: ../gui/wxpython/nviz/tools.py:91 ../gui/wxpython/nviz/preferences.py:68
+#: ../gui/wxpython/nviz/preferences.py:73
 msgid "View"
 msgstr "察看"
 
-#: ../gui/wxpython/nviz/tools.py:101
+#: ../gui/wxpython/nviz/tools.py:103
 #, fuzzy
 msgid "Analysis"
 msgstr "分析"
 
-#: ../gui/wxpython/nviz/tools.py:104 ../gui/wxpython/nviz/tools.py:386
+#: ../gui/wxpython/nviz/tools.py:106 ../gui/wxpython/nviz/tools.py:501
 #, fuzzy
 msgid "Animation"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/nviz/tools.py:227
+#: ../gui/wxpython/nviz/tools.py:251
 msgid "Control View"
 msgstr "控制视图"
 
-#: ../gui/wxpython/nviz/tools.py:248
+#: ../gui/wxpython/nviz/tools.py:275
 msgid "Adjusts the distance and angular perspective of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:253 ../gui/wxpython/nviz/preferences.py:69
+#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:85
 msgid "Perspective:"
 msgstr "方位:"
 
-#: ../gui/wxpython/nviz/tools.py:261
+#: ../gui/wxpython/nviz/tools.py:303
 #, fuzzy
 msgid "Tilts the plane of the surface from the horizontal"
 msgstr "A:太阳高度,单位:度"
 
-#: ../gui/wxpython/nviz/tools.py:265 ../gui/wxpython/nviz/tools.py:1028
+#: ../gui/wxpython/nviz/tools.py:315 ../gui/wxpython/nviz/tools.py:1262
 msgid "Tilt:"
 msgstr "倾斜:"
 
-#: ../gui/wxpython/nviz/tools.py:272
+#: ../gui/wxpython/nviz/tools.py:328
 msgid ""
 "Adjusts the viewing height above the surface (angle of view automatically "
 "adjusts to maintain the same center of view)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:277
+#: ../gui/wxpython/nviz/tools.py:344
 msgid "Adjusts the relative height of features above the plane of the surface"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:291 ../gui/wxpython/nviz/preferences.py:150
+#: ../gui/wxpython/nviz/tools.py:386 ../gui/wxpython/nviz/preferences.py:175
 msgid "Z-exag:"
 msgstr "X-exag:"
 
-#: ../gui/wxpython/nviz/tools.py:304
+#: ../gui/wxpython/nviz/tools.py:411
 msgid "Look:"
 msgstr "看:"
 
-#: ../gui/wxpython/nviz/tools.py:307
+#: ../gui/wxpython/nviz/tools.py:414
 msgid "here"
 msgstr "此处"
 
-#: ../gui/wxpython/nviz/tools.py:310
+#: ../gui/wxpython/nviz/tools.py:417
 msgid ""
 "Allows you to select a point on the surface that becomes the new center of "
 "view. Click on the button and then on the surface."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:316
+#: ../gui/wxpython/nviz/tools.py:423
 #, fuzzy
 msgid "center"
 msgstr "参数:"
 
-#: ../gui/wxpython/nviz/tools.py:319
+#: ../gui/wxpython/nviz/tools.py:427
 msgid "Resets the view to the original default center of view"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:323
+#: ../gui/wxpython/nviz/tools.py:431
 msgid "top"
 msgstr "顶部"
 
-#: ../gui/wxpython/nviz/tools.py:326
+#: ../gui/wxpython/nviz/tools.py:435
 msgid ""
 "Sets the viewer directly over the scene's center position. This top view "
 "orients approximately north south."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:330
+#: ../gui/wxpython/nviz/tools.py:439
 msgid "reset"
 msgstr "重置"
 
-#: ../gui/wxpython/nviz/tools.py:331
+#: ../gui/wxpython/nviz/tools.py:440
 msgid "Reset to default view"
 msgstr "重置为默认视图"
 
-#: ../gui/wxpython/nviz/tools.py:348 ../gui/wxpython/nviz/preferences.py:172
+#: ../gui/wxpython/nviz/tools.py:457 ../gui/wxpython/nviz/preferences.py:197
 msgid "Image Appearance"
 msgstr "图像外观"
 
-#: ../gui/wxpython/nviz/tools.py:393
+#: ../gui/wxpython/nviz/tools.py:509
 msgid ""
 "Press 'Record' button and start changing the view. It is recommended to use "
 "fly-through mode (Map Display toolbar) to achieve smooth motion."
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:404
+#: ../gui/wxpython/nviz/tools.py:520
 msgid "Record"
 msgstr "录制"
 
-#: ../gui/wxpython/nviz/tools.py:406
+#: ../gui/wxpython/nviz/tools.py:522
 msgid "Play"
 msgstr "播放"
 
-#: ../gui/wxpython/nviz/tools.py:422
+#: ../gui/wxpython/nviz/tools.py:543
 #, fuzzy
 msgid "Total number of frames :"
 msgstr "面:%d  岛的数量:%d\n"
 
-#: ../gui/wxpython/nviz/tools.py:426
+#: ../gui/wxpython/nviz/tools.py:550
 msgid "Frame rate (FPS):"
 msgstr "帧率(FPS):"
 
-#: ../gui/wxpython/nviz/tools.py:432
+#: ../gui/wxpython/nviz/tools.py:558
 msgid "Frames are recorded with given frequency (FPS). "
 msgstr "使用认定的频率(FPS)录制。"
 
-#: ../gui/wxpython/nviz/tools.py:475
+#: ../gui/wxpython/nviz/tools.py:614
 #, fuzzy
 msgid "Save image sequence"
 msgstr "保存当前显示为图片文件"
 
-#: ../gui/wxpython/nviz/tools.py:483
+#: ../gui/wxpython/nviz/tools.py:624
 #, fuzzy
 msgid "Choose a directory for images"
 msgstr "类别 %d 没有相关的记录"
 
-#: ../gui/wxpython/nviz/tools.py:491
+#: ../gui/wxpython/nviz/tools.py:637
 msgid ""
 "Generated files names will look like this: prefix_1.ppm, prefix_2.ppm, ..."
 msgstr "生成如下形式的文件:前缀_1.ppm, 前缀_2.ppm, ..."
 
-#: ../gui/wxpython/nviz/tools.py:547 ../gui/wxpython/nviz/tools.py:1865
-#: ../gui/wxpython/nviz/preferences.py:361
+#: ../gui/wxpython/nviz/tools.py:704 ../gui/wxpython/nviz/tools.py:2235
+#: ../gui/wxpython/nviz/preferences.py:397
 #, fuzzy
 msgid "Surface"
 msgstr "变化的总和"
 
-#: ../gui/wxpython/nviz/tools.py:553 ../gui/wxpython/nviz/tools.py:1087
+#: ../gui/wxpython/nviz/tools.py:712 ../gui/wxpython/nviz/tools.py:1344
 #, fuzzy
 msgid "Constant surface"
 msgstr "指定点的数量"
 
-#: ../gui/wxpython/nviz/tools.py:558 ../gui/wxpython/nviz/preferences.py:463
+#: ../gui/wxpython/nviz/tools.py:719 ../gui/wxpython/nviz/preferences.py:545
 msgid "Vector"
 msgstr "矢量"
 
-#: ../gui/wxpython/nviz/tools.py:599 ../gui/wxpython/nviz/preferences.py:253
+#: ../gui/wxpython/nviz/tools.py:765 ../gui/wxpython/nviz/preferences.py:286
 msgid "Lighting"
 msgstr "照明"
 
-#: ../gui/wxpython/nviz/tools.py:604
+#: ../gui/wxpython/nviz/tools.py:772
 msgid "Fringe"
 msgstr "边缘"
 
-#: ../gui/wxpython/nviz/tools.py:631 ../gui/wxpython/nviz/tools.py:945
+#: ../gui/wxpython/nviz/tools.py:803 ../gui/wxpython/nviz/tools.py:1145
 #, fuzzy
 msgid "Cutting planes"
 msgstr "拷贝表失败"
 
-#: ../gui/wxpython/nviz/tools.py:682 ../gui/wxpython/nviz/tools.py:1565
-#: ../gui/wxpython/nviz/preferences.py:374
+#: ../gui/wxpython/nviz/tools.py:855 ../gui/wxpython/nviz/tools.py:1895
+#: ../gui/wxpython/nviz/preferences.py:413
 msgid "Mode:"
 msgstr "模式:"
 
-#: ../gui/wxpython/nviz/tools.py:685 ../gui/wxpython/nviz/preferences.py:377
+#: ../gui/wxpython/nviz/tools.py:858 ../gui/wxpython/nviz/preferences.py:419
 msgid "coarse"
 msgstr "粗糙"
 
-#: ../gui/wxpython/nviz/tools.py:686 ../gui/wxpython/nviz/preferences.py:378
+#: ../gui/wxpython/nviz/tools.py:859 ../gui/wxpython/nviz/preferences.py:420
 msgid "fine"
 msgstr "精细"
 
-#: ../gui/wxpython/nviz/tools.py:687 ../gui/wxpython/nviz/preferences.py:379
+#: ../gui/wxpython/nviz/tools.py:860 ../gui/wxpython/nviz/preferences.py:421
 msgid "both"
 msgstr "兼备"
 
-#: ../gui/wxpython/nviz/tools.py:696 ../gui/wxpython/nviz/tools.py:961
-#: ../gui/wxpython/nviz/tools.py:1579
+#: ../gui/wxpython/nviz/tools.py:870 ../gui/wxpython/nviz/tools.py:1161
+#: ../gui/wxpython/nviz/tools.py:1909
 msgid "Shading:"
 msgstr "暗影:"
 
-#: ../gui/wxpython/nviz/tools.py:699 ../gui/wxpython/nviz/tools.py:1582
+#: ../gui/wxpython/nviz/tools.py:873 ../gui/wxpython/nviz/tools.py:1912
 msgid "flat"
 msgstr "无特效直出"
 
-#: ../gui/wxpython/nviz/tools.py:700 ../gui/wxpython/nviz/tools.py:1583
+#: ../gui/wxpython/nviz/tools.py:874 ../gui/wxpython/nviz/tools.py:1913
 msgid "gouraud"
 msgstr "高洛德明暗绘制"
 
-#: ../gui/wxpython/nviz/tools.py:708
+#: ../gui/wxpython/nviz/tools.py:882
 msgid "Set to all"
 msgstr "选中所有"
 
-#: ../gui/wxpython/nviz/tools.py:709
+#: ../gui/wxpython/nviz/tools.py:883
 msgid "Use draw settings for all loaded surfaces"
 msgstr "绘制设置用于所有已装载的面"
 
-#: ../gui/wxpython/nviz/tools.py:717 ../gui/wxpython/nviz/preferences.py:406
+#: ../gui/wxpython/nviz/tools.py:895 ../gui/wxpython/nviz/preferences.py:465
 #, fuzzy
 msgid "Coarse mode:"
 msgstr "详细模式"
 
-#: ../gui/wxpython/nviz/tools.py:720 ../gui/wxpython/nviz/tools.py:760
-#: ../gui/wxpython/nviz/preferences.py:393
-#: ../gui/wxpython/nviz/preferences.py:410
+#: ../gui/wxpython/nviz/tools.py:898 ../gui/wxpython/nviz/tools.py:944
+#: ../gui/wxpython/nviz/preferences.py:446
+#: ../gui/wxpython/nviz/preferences.py:477
 #, fuzzy
 msgid "resolution:"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/nviz/tools.py:733 ../gui/wxpython/nviz/preferences.py:422
+#: ../gui/wxpython/nviz/tools.py:913 ../gui/wxpython/nviz/preferences.py:495
 #, fuzzy
 msgid "style:"
 msgstr "要素类型"
 
-#: ../gui/wxpython/nviz/tools.py:736 ../gui/wxpython/nviz/preferences.py:425
+#: ../gui/wxpython/nviz/tools.py:916 ../gui/wxpython/nviz/preferences.py:501
 msgid "wire"
 msgstr "线"
 
-#: ../gui/wxpython/nviz/tools.py:737 ../gui/wxpython/nviz/preferences.py:426
+#: ../gui/wxpython/nviz/tools.py:917 ../gui/wxpython/nviz/preferences.py:502
 msgid "surface"
 msgstr "面"
 
-#: ../gui/wxpython/nviz/tools.py:749
+#: ../gui/wxpython/nviz/tools.py:929
 #, fuzzy
 msgid "Change wire color"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/nviz/tools.py:756 ../gui/wxpython/nviz/preferences.py:389
+#: ../gui/wxpython/nviz/tools.py:940 ../gui/wxpython/nviz/preferences.py:434
 #, fuzzy
 msgid "Fine mode:"
 msgstr "安静模式"
 
-#: ../gui/wxpython/nviz/tools.py:782
+#: ../gui/wxpython/nviz/tools.py:968
 msgid "Surface attributes"
 msgstr "表面特征"
 
-#: ../gui/wxpython/nviz/tools.py:791 ../gui/wxpython/nviz/tools.py:2406
+#: ../gui/wxpython/nviz/tools.py:977 ../gui/wxpython/nviz/tools.py:2817
 msgid "Transparency"
 msgstr "透明"
 
-#: ../gui/wxpython/nviz/tools.py:792 ../gui/wxpython/nviz/tools.py:2407
+#: ../gui/wxpython/nviz/tools.py:978 ../gui/wxpython/nviz/tools.py:2818
 msgid "Shininess"
 msgstr "闪亮"
 
-#: ../gui/wxpython/nviz/tools.py:798 ../gui/wxpython/nviz/tools.py:2418
+#: ../gui/wxpython/nviz/tools.py:984 ../gui/wxpython/nviz/tools.py:2838
 msgid "map"
 msgstr "地图"
 
-#: ../gui/wxpython/nviz/tools.py:801 ../gui/wxpython/nviz/tools.py:2423
+#: ../gui/wxpython/nviz/tools.py:987 ../gui/wxpython/nviz/tools.py:2843
 msgid "unset"
 msgstr "取消设置"
 
-#: ../gui/wxpython/nviz/tools.py:806 ../gui/wxpython/nviz/tools.py:2428
+#: ../gui/wxpython/nviz/tools.py:992 ../gui/wxpython/nviz/tools.py:2848
 msgid "constant"
 msgstr "恒定"
 
-#: ../gui/wxpython/nviz/tools.py:866
+#: ../gui/wxpython/nviz/tools.py:1054
 msgid "Changes the x, y, and z position of the current surface"
 msgstr "改动当前面的x, y和z的位置"
 
-#: ../gui/wxpython/nviz/tools.py:876 ../gui/wxpython/nviz/tools.py:1063
-#: ../gui/wxpython/nviz/tools.py:1696 ../gui/wxpython/nviz/tools.py:2591
+#: ../gui/wxpython/nviz/tools.py:1071 ../gui/wxpython/nviz/tools.py:1321
+#: ../gui/wxpython/nviz/tools.py:2040 ../gui/wxpython/nviz/tools.py:3041
 msgid "Reset"
 msgstr "重置"
 
-#: ../gui/wxpython/nviz/tools.py:877 ../gui/wxpython/nviz/tools.py:1697
+#: ../gui/wxpython/nviz/tools.py:1072 ../gui/wxpython/nviz/tools.py:2041
 #, fuzzy
 msgid "Reset to default position"
 msgstr "从默认区域设置"
 
-#: ../gui/wxpython/nviz/tools.py:951
+#: ../gui/wxpython/nviz/tools.py:1151
 msgid "Active cutting plane:"
 msgstr "激活的切割平面:"
 
-#: ../gui/wxpython/nviz/tools.py:963
+#: ../gui/wxpython/nviz/tools.py:1163
 #, fuzzy
 msgid "clear"
 msgstr "清除"
 
-#: ../gui/wxpython/nviz/tools.py:964
+#: ../gui/wxpython/nviz/tools.py:1164
 #, fuzzy
 msgid "top color"
 msgstr "文本颜色"
 
-#: ../gui/wxpython/nviz/tools.py:965
+#: ../gui/wxpython/nviz/tools.py:1165
 #, fuzzy
 msgid "bottom color"
 msgstr "选择要运行的模型"
 
-#: ../gui/wxpython/nviz/tools.py:966
+#: ../gui/wxpython/nviz/tools.py:1166
 msgid "blend"
 msgstr "混合"
 
-#: ../gui/wxpython/nviz/tools.py:967
+#: ../gui/wxpython/nviz/tools.py:1167
 msgid "shaded"
 msgstr "阴影效果"
 
-#: ../gui/wxpython/nviz/tools.py:979
+#: ../gui/wxpython/nviz/tools.py:1179
 msgid "Horizontal X:"
 msgstr "水平X:"
 
-#: ../gui/wxpython/nviz/tools.py:981
+#: ../gui/wxpython/nviz/tools.py:1181
 #, fuzzy
 msgid "Sets the X coordinate of the current cutting plane"
 msgstr "一行一个坐标对。"
 
-#: ../gui/wxpython/nviz/tools.py:995
+#: ../gui/wxpython/nviz/tools.py:1209
 msgid "Horizontal Y:"
 msgstr "水平Y:"
 
-#: ../gui/wxpython/nviz/tools.py:997
+#: ../gui/wxpython/nviz/tools.py:1211
 #, fuzzy
 msgid "Sets the Y coordinate of the current cutting plane"
 msgstr "一行一个坐标对。"
 
-#: ../gui/wxpython/nviz/tools.py:1014
+#: ../gui/wxpython/nviz/tools.py:1242
 msgid "Rotates the current cutting plane about vertical axis"
 msgstr "围绕垂直轴旋转当前切面"
 
-#: ../gui/wxpython/nviz/tools.py:1030
+#: ../gui/wxpython/nviz/tools.py:1264
 msgid "Rotates the current cutting plane about horizontal axis"
 msgstr "围绕水平轴旋转当前切面"
 
-#: ../gui/wxpython/nviz/tools.py:1046
+#: ../gui/wxpython/nviz/tools.py:1287
 msgid ""
 "Sets the Z coordinate of the current cutting plane (only meaningful when "
 "tilt is not 0)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1115
+#: ../gui/wxpython/nviz/tools.py:1384
 #, fuzzy
 msgid "Fine resolution:"
 msgstr "非法的输出文件名"
 
-#: ../gui/wxpython/nviz/tools.py:1127
+#: ../gui/wxpython/nviz/tools.py:1398
 msgid "Value:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1139 ../gui/wxpython/nviz/tools.py:2580
+#: ../gui/wxpython/nviz/tools.py:1410 ../gui/wxpython/nviz/tools.py:3030
 #, fuzzy
 msgid "Transparency:"
 msgstr "地形参数"
 
-#: ../gui/wxpython/nviz/tools.py:1205
+#: ../gui/wxpython/nviz/tools.py:1476
 msgid "Show vector lines"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1215 ../gui/wxpython/nviz/preferences.py:469
+#: ../gui/wxpython/nviz/tools.py:1486 ../gui/wxpython/nviz/preferences.py:551
 #, fuzzy
 msgid "Vector lines"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/nviz/tools.py:1221
+#: ../gui/wxpython/nviz/tools.py:1492
 #, fuzzy
 msgid "Line:"
 msgstr "线"
 
-#: ../gui/wxpython/nviz/tools.py:1224
+#: ../gui/wxpython/nviz/tools.py:1495
 #, fuzzy
 msgid "width:"
 msgstr "% 宽度"
 
-#: ../gui/wxpython/nviz/tools.py:1240 ../gui/wxpython/nviz/tools.py:1391
+#: ../gui/wxpython/nviz/tools.py:1511 ../gui/wxpython/nviz/tools.py:1683
 #, fuzzy
 msgid "color:"
 msgstr "颜色"
 
-#: ../gui/wxpython/nviz/tools.py:1256 ../gui/wxpython/nviz/tools.py:1436
+#: ../gui/wxpython/nviz/tools.py:1528 ../gui/wxpython/nviz/tools.py:1732
 msgid "use color for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1258
+#: ../gui/wxpython/nviz/tools.py:1531
 msgid "use width for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1271 ../gui/wxpython/nviz/tools.py:1283
-#: ../gui/wxpython/nviz/tools.py:1449 ../gui/wxpython/nviz/tools.py:1458
+#: ../gui/wxpython/nviz/tools.py:1546 ../gui/wxpython/nviz/tools.py:1559
+#: ../gui/wxpython/nviz/tools.py:1755 ../gui/wxpython/nviz/tools.py:1772
 #, fuzzy
 msgid "Set options..."
 msgstr "选项设置"
 
-#: ../gui/wxpython/nviz/tools.py:1301 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1578 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 #, fuzzy
 msgid "on surface(s):"
 msgstr "指定点的数量"
 
-#: ../gui/wxpython/nviz/tools.py:1302 ../gui/wxpython/nviz/tools.py:4808
-#: ../gui/wxpython/nviz/tools.py:4861
+#: ../gui/wxpython/nviz/tools.py:1579 ../gui/wxpython/nviz/tools.py:5441
+#: ../gui/wxpython/nviz/tools.py:5496
 msgid "as 3D"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1311 ../gui/wxpython/nviz/tools.py:1478
+#: ../gui/wxpython/nviz/tools.py:1588 ../gui/wxpython/nviz/tools.py:1795
 msgid "Height above surface:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1347
+#: ../gui/wxpython/nviz/tools.py:1639
 msgid "Show vector points"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1356 ../gui/wxpython/nviz/preferences.py:509
+#: ../gui/wxpython/nviz/tools.py:1648 ../gui/wxpython/nviz/preferences.py:591
 #, fuzzy
 msgid "Vector points"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/nviz/tools.py:1363
+#: ../gui/wxpython/nviz/tools.py:1655
 msgid "Icon:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1438
+#: ../gui/wxpython/nviz/tools.py:1735
 msgid "use size for thematic mapping"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1568
+#: ../gui/wxpython/nviz/tools.py:1898
 msgid "isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1569
+#: ../gui/wxpython/nviz/tools.py:1899
 msgid "slices"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1592
+#: ../gui/wxpython/nviz/tools.py:1922
 msgid "Resolution:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1606
+#: ../gui/wxpython/nviz/tools.py:1936
 msgid "Draw wire box"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1622 ../gui/wxpython/nviz/tools.py:3762
+#: ../gui/wxpython/nviz/tools.py:1952 ../gui/wxpython/nviz/tools.py:4278
 msgid "List of isosurfaces"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1738
+#: ../gui/wxpython/nviz/tools.py:2086
 msgid "Show light model"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1751
+#: ../gui/wxpython/nviz/tools.py:2099
 #, fuzzy
 msgid "Light source position"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/nviz/tools.py:1767
+#: ../gui/wxpython/nviz/tools.py:2116
 msgid "Adjusts the light height"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1791
+#: ../gui/wxpython/nviz/tools.py:2147
 #, fuzzy
 msgid "Light color and intensity"
 msgstr "文本高亮显示的颜色 (仅用于 ps.map 输出)"
 
-#: ../gui/wxpython/nviz/tools.py:1805 ../gui/wxpython/nviz/preferences.py:307
+#: ../gui/wxpython/nviz/tools.py:2165 ../gui/wxpython/nviz/preferences.py:344
 msgid "Brightness:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1807
+#: ../gui/wxpython/nviz/tools.py:2167
 msgid "Adjusts the brightness of the light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1816 ../gui/wxpython/nviz/preferences.py:321
+#: ../gui/wxpython/nviz/tools.py:2182 ../gui/wxpython/nviz/preferences.py:358
 msgid "Ambient:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1818
+#: ../gui/wxpython/nviz/tools.py:2184
 msgid "Adjusts the ambient light"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1879
+#: ../gui/wxpython/nviz/tools.py:2249
 msgid "Edges with fringe"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1881
+#: ../gui/wxpython/nviz/tools.py:2251
 msgid "N && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1882
+#: ../gui/wxpython/nviz/tools.py:2252
 msgid "N && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1883
+#: ../gui/wxpython/nviz/tools.py:2253
 msgid "S && W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1884
+#: ../gui/wxpython/nviz/tools.py:2254
 msgid "S && E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1904
+#: ../gui/wxpython/nviz/tools.py:2279
 msgid "Elevation of fringe from bottom:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:1957
+#: ../gui/wxpython/nviz/tools.py:2336
 #, fuzzy
 msgid "Arrow length (in map units):"
 msgstr "离散化错误 (地图单位)"
 
-#: ../gui/wxpython/nviz/tools.py:1967
+#: ../gui/wxpython/nviz/tools.py:2348
 #, fuzzy
 msgid "Arrow color:"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/nviz/tools.py:1976
+#: ../gui/wxpython/nviz/tools.py:2360
 msgid "Place arrow"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2002
+#: ../gui/wxpython/nviz/tools.py:2385
 #, fuzzy
 msgid "Scale bar length (in map units):"
 msgstr "离散化错误 (地图单位)"
 
-#: ../gui/wxpython/nviz/tools.py:2012
+#: ../gui/wxpython/nviz/tools.py:2397
 #, fuzzy
 msgid "Scale bar color:"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/nviz/tools.py:2021
+#: ../gui/wxpython/nviz/tools.py:2409
 #, fuzzy
 msgid "Place new scale bar"
 msgstr "添加格网值图层"
 
-#: ../gui/wxpython/nviz/tools.py:2092
+#: ../gui/wxpython/nviz/tools.py:2481
 msgid "Do you want to record new animation without saving the previous one?"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2095
+#: ../gui/wxpython/nviz/tools.py:2484
 #, fuzzy
 msgid "Animation already axists"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/nviz/tools.py:2257
+#: ../gui/wxpython/nviz/tools.py:2654
 #, fuzzy
 msgid "No file prefix given."
 msgstr "没有指定数据地图"
 
-#: ../gui/wxpython/nviz/tools.py:2261
+#: ../gui/wxpython/nviz/tools.py:2658
 #, fuzzy, python-format
 msgid "Directory %s does not exist."
 msgstr "栅格地图 [%s] 未发现"
 
-#: ../gui/wxpython/nviz/tools.py:2391
+#: ../gui/wxpython/nviz/tools.py:2799
 msgid "Isosurface attributes"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2397
+#: ../gui/wxpython/nviz/tools.py:2805
 #, fuzzy
 msgid "toggle normal direction"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/nviz/tools.py:2403
+#: ../gui/wxpython/nviz/tools.py:2814
 #, fuzzy
 msgid "Isosurface value"
 msgstr "** 警告:没有这样的值 **\n"
 
-#: ../gui/wxpython/nviz/tools.py:2509
+#: ../gui/wxpython/nviz/tools.py:2931
 msgid "Slice attributes"
 msgstr "切片属性"
 
-#: ../gui/wxpython/nviz/tools.py:2515
+#: ../gui/wxpython/nviz/tools.py:2940
 msgid "Slice parallel to axis:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2648
+#: ../gui/wxpython/nviz/tools.py:3098
 msgid "W"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2649
+#: ../gui/wxpython/nviz/tools.py:3099
 msgid "N"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2650
+#: ../gui/wxpython/nviz/tools.py:3100
 msgid "S"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2651
+#: ../gui/wxpython/nviz/tools.py:3101
 msgid "E"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2652
+#: ../gui/wxpython/nviz/tools.py:3102
 msgid "NW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2653
+#: ../gui/wxpython/nviz/tools.py:3103
 msgid "NE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2654
+#: ../gui/wxpython/nviz/tools.py:3104
 msgid "SE"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:2655
+#: ../gui/wxpython/nviz/tools.py:3105
 msgid "SW"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3144 ../gui/wxpython/nviz/tools.py:4918
+#: ../gui/wxpython/nviz/tools.py:3623 ../gui/wxpython/nviz/tools.py:5559
 msgid "Level"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3768
+#: ../gui/wxpython/nviz/tools.py:4284
 #, fuzzy
 msgid "List of slices"
 msgstr "将要导入的栅格文件"
 
-#: ../gui/wxpython/nviz/tools.py:3960 ../gui/wxpython/nviz/tools.py:3962
+#: ../gui/wxpython/nviz/tools.py:4482 ../gui/wxpython/nviz/tools.py:4484
 #, python-brace-format
 msgid "Level {level}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:3969 ../gui/wxpython/nviz/tools.py:3971
+#: ../gui/wxpython/nviz/tools.py:4492 ../gui/wxpython/nviz/tools.py:4496
 #, python-brace-format
 msgid "Slice parallel to {axis}"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4248 ../gui/wxpython/nviz/tools.py:4931
+#: ../gui/wxpython/nviz/tools.py:4784 ../gui/wxpython/nviz/tools.py:5572
 msgid "Slice parallel to"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4458
+#: ../gui/wxpython/nviz/tools.py:5016
 #, fuzzy, python-format
 msgid "Scalebar %d"
 msgstr "添加格网值图层"
 
-#: ../gui/wxpython/nviz/tools.py:4593
+#: ../gui/wxpython/nviz/tools.py:5178
 msgid "None"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4755
+#: ../gui/wxpython/nviz/tools.py:5380
 #, fuzzy
 msgid "Vector map is 3D"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/nviz/tools.py:4758
+#: ../gui/wxpython/nviz/tools.py:5383
 #, fuzzy
 msgid "Vector map is 2D"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/nviz/tools.py:4760
+#: ../gui/wxpython/nviz/tools.py:5385
 #, python-format
 msgid "%(features)d features (%(points)d points)"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:4810 ../gui/wxpython/nviz/tools.py:4863
+#: ../gui/wxpython/nviz/tools.py:5443 ../gui/wxpython/nviz/tools.py:5498
 #, fuzzy
 msgid "on surface"
 msgstr "指定点的数量"
 
-#: ../gui/wxpython/nviz/tools.py:4951
+#: ../gui/wxpython/nviz/tools.py:5596
 #, fuzzy
 msgid "range:"
 msgstr "无效的区域:%s"
 
-#: ../gui/wxpython/nviz/tools.py:5019 ../gui/wxpython/nviz/tools.py:5030
+#: ../gui/wxpython/nviz/tools.py:5675 ../gui/wxpython/nviz/tools.py:5686
 #, fuzzy
 msgid "North edge:"
 msgstr "北边界的值"
 
-#: ../gui/wxpython/nviz/tools.py:5020 ../gui/wxpython/nviz/tools.py:5031
+#: ../gui/wxpython/nviz/tools.py:5676 ../gui/wxpython/nviz/tools.py:5687
 #, fuzzy
 msgid "South edge:"
 msgstr "南边界的值"
 
-#: ../gui/wxpython/nviz/tools.py:5021 ../gui/wxpython/nviz/tools.py:5028
-#: ../gui/wxpython/nviz/tools.py:5037
+#: ../gui/wxpython/nviz/tools.py:5677 ../gui/wxpython/nviz/tools.py:5684
+#: ../gui/wxpython/nviz/tools.py:5693
 msgid "West edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5022 ../gui/wxpython/nviz/tools.py:5029
-#: ../gui/wxpython/nviz/tools.py:5038
+#: ../gui/wxpython/nviz/tools.py:5678 ../gui/wxpython/nviz/tools.py:5685
+#: ../gui/wxpython/nviz/tools.py:5694
 msgid "East edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5024 ../gui/wxpython/nviz/tools.py:5035
-#: ../gui/wxpython/nviz/tools.py:5043
+#: ../gui/wxpython/nviz/tools.py:5680 ../gui/wxpython/nviz/tools.py:5691
+#: ../gui/wxpython/nviz/tools.py:5699
 #, fuzzy
 msgid "Northing (Y):"
 msgstr "未找到任何记录。\n"
 
-#: ../gui/wxpython/nviz/tools.py:5025 ../gui/wxpython/nviz/tools.py:5034
-#: ../gui/wxpython/nviz/tools.py:5044
+#: ../gui/wxpython/nviz/tools.py:5681 ../gui/wxpython/nviz/tools.py:5690
+#: ../gui/wxpython/nviz/tools.py:5700
 #, fuzzy
 msgid "Height (Z):"
 msgstr " 右键: 退出\n"
 
-#: ../gui/wxpython/nviz/tools.py:5026 ../gui/wxpython/nviz/tools.py:5033
-#: ../gui/wxpython/nviz/tools.py:5042
+#: ../gui/wxpython/nviz/tools.py:5682 ../gui/wxpython/nviz/tools.py:5689
+#: ../gui/wxpython/nviz/tools.py:5698
 msgid "Easting (X):"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5039
+#: ../gui/wxpython/nviz/tools.py:5695
 msgid "Bottom edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5040
+#: ../gui/wxpython/nviz/tools.py:5696
 msgid "Top edge:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5145
+#: ../gui/wxpython/nviz/tools.py:5807
 msgid "Adjusts the distance and direction of the image viewpoint"
 msgstr ""
 
-#: ../gui/wxpython/nviz/tools.py:5177
+#: ../gui/wxpython/nviz/tools.py:5842
 msgid ""
 "Adjusts the light direction. Click and drag the puck to change the light "
 "direction."
 msgstr ""
 
-#: ../gui/wxpython/nviz/wxnviz.py:482 ../gui/wxpython/nviz/wxnviz.py:494
+#: ../gui/wxpython/nviz/wxnviz.py:502 ../gui/wxpython/nviz/wxnviz.py:514
 #, fuzzy, python-format
 msgid "3d raster map <%s> not found"
 msgstr "未找到3D栅格图<%s>"
 
-#: ../gui/wxpython/nviz/preferences.py:32
+#: ../gui/wxpython/nviz/preferences.py:34
 #, fuzzy
 msgid "3D view default settings"
 msgstr "打开设置"
 
-#: ../gui/wxpython/nviz/preferences.py:49
+#: ../gui/wxpython/nviz/preferences.py:61
 msgid "Revert settings to default, changes are not applied"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:72
-#: ../gui/wxpython/nviz/preferences.py:135
-#: ../gui/wxpython/nviz/preferences.py:153
+#: ../gui/wxpython/nviz/preferences.py:89
+#: ../gui/wxpython/nviz/preferences.py:160
+#: ../gui/wxpython/nviz/preferences.py:179
 #, fuzzy
 msgid "value:"
 msgstr "比特模式的值"
 
-#: ../gui/wxpython/nviz/preferences.py:84
+#: ../gui/wxpython/nviz/preferences.py:102
 msgid "step:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:99
-#: ../gui/wxpython/nviz/preferences.py:266
+#: ../gui/wxpython/nviz/preferences.py:117
+#: ../gui/wxpython/nviz/preferences.py:299
 msgid "Position:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:102
-#: ../gui/wxpython/nviz/preferences.py:269
+#: ../gui/wxpython/nviz/preferences.py:121
+#: ../gui/wxpython/nviz/preferences.py:303
 #, fuzzy
 msgid "x:"
 msgstr ":"
 
-#: ../gui/wxpython/nviz/preferences.py:132
+#: ../gui/wxpython/nviz/preferences.py:156
 msgid "Twist:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:205
+#: ../gui/wxpython/nviz/preferences.py:236
 msgid "Fly-through"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:215
+#: ../gui/wxpython/nviz/preferences.py:246
 #, fuzzy
 msgid "Move exag:"
 msgstr "移动顶点"
 
-#: ../gui/wxpython/nviz/preferences.py:227
+#: ../gui/wxpython/nviz/preferences.py:259
 msgid "Turn exag:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:258
+#: ../gui/wxpython/nviz/preferences.py:291
 #, fuzzy
 msgid "Light"
 msgstr " 右键: 退出\n"
 
-#: ../gui/wxpython/nviz/preferences.py:293
+#: ../gui/wxpython/nviz/preferences.py:329
 #, fuzzy
 msgid "z:"
 msgstr ":"
 
-#: ../gui/wxpython/nviz/preferences.py:437
+#: ../gui/wxpython/nviz/preferences.py:516
 #, fuzzy
 msgid "wire color:"
 msgstr " nv color\n"
 
-#: ../gui/wxpython/nviz/preferences.py:531
+#: ../gui/wxpython/nviz/preferences.py:613
 msgid "Marker:"
 msgstr ""
 
-#: ../gui/wxpython/nviz/preferences.py:629
+#: ../gui/wxpython/nviz/preferences.py:713
 #, fuzzy, python-format
 msgid "3D view settings saved to file <%s>."
 msgstr "已有的MAT-File(v4)的名称"
 
-#: ../gui/wxpython/iscatt/controllers.py:203
+#: ../gui/wxpython/iscatt/controllers.py:204
 #, fuzzy
 msgid "No data set."
 msgstr "没有选中的图层"
 
-#: ../gui/wxpython/iscatt/controllers.py:219
+#: ../gui/wxpython/iscatt/controllers.py:222
 #, python-format
 msgid ""
 "Interactive Scatter Plot Tool can not be used.\n"
@@ -18398,7 +19022,7 @@ msgstr ""
 "\n"
 "您可使用<g.region>命令以减少当前区域的像素数量。"
 
-#: ../gui/wxpython/iscatt/controllers.py:228
+#: ../gui/wxpython/iscatt/controllers.py:231
 #, python-format
 msgid ""
 "Number of cells (rows*cols) <%d> in current region is higher than "
@@ -18415,23 +19039,23 @@ msgstr ""
 "\n"
 "继续在当前区域使用交互散点图工具吗?"
 
-#: ../gui/wxpython/iscatt/controllers.py:284
+#: ../gui/wxpython/iscatt/controllers.py:288
 msgid ""
 "Scatter plot with same band combination (regardless x y order) is already "
 "displayed."
 msgstr "相同组合(x y不分先后)的散点图已显示。"
 
-#: ../gui/wxpython/iscatt/controllers.py:297
+#: ../gui/wxpython/iscatt/controllers.py:301
 #, python-format
 msgid "Band <%s> is not CELL (integer) type.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:300
+#: ../gui/wxpython/iscatt/controllers.py:304
 #, fuzzy
 msgid "Scatter plot cannot be added.\n"
 msgstr "没有指定数据地图"
 
-#: ../gui/wxpython/iscatt/controllers.py:306
+#: ../gui/wxpython/iscatt/controllers.py:310
 #, python-format
 msgid ""
 "Scatter plot cannot be added.\n"
@@ -18439,7 +19063,7 @@ msgid ""
 "%d>.\n"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:314
+#: ../gui/wxpython/iscatt/controllers.py:320
 #, python-format
 msgid ""
 "Multiple of bands ranges <%s:%d * %s:%d = %d> is higher than recommended "
@@ -18450,7 +19074,7 @@ msgid ""
 "Do you really want to add this scatter plot?"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/controllers.py:399
+#: ../gui/wxpython/iscatt/controllers.py:409
 msgid ""
 "In order to select arrea in scatter plot, you have to select class first.\n"
 "\n"
@@ -18460,7 +19084,7 @@ msgstr ""
 "\n"
 "没有发现类,要创建一个类吗?"
 
-#: ../gui/wxpython/iscatt/controllers.py:433
+#: ../gui/wxpython/iscatt/controllers.py:444
 #, python-format
 msgid ""
 "Error occurred during computation of scatter plot category:\n"
@@ -18469,17 +19093,17 @@ msgstr ""
 "计算散点图类别时发生错误:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/controllers.py:742
+#: ../gui/wxpython/iscatt/controllers.py:764
 #, python-format
 msgid "Export scatter plot raster of class <%s>"
 msgstr "输出类<%s>的栅格散点图。"
 
-#: ../gui/wxpython/iscatt/controllers.py:759
+#: ../gui/wxpython/iscatt/controllers.py:782
 #, fuzzy, python-format
 msgid "Scatter plot raster of class <%s> exported to raster map <%s>."
 msgstr "%d 个点写入矢量文件"
 
-#: ../gui/wxpython/iscatt/controllers.py:762
+#: ../gui/wxpython/iscatt/controllers.py:786
 #, python-format
 msgid ""
 "Export of scatter plot raster of class <%s> to map <%s> failed.\n"
@@ -18492,67 +19116,67 @@ msgstr ""
 msgid "Loading ctypes libs failed"
 msgstr "装载ctypes库失败"
 
-#: ../gui/wxpython/iscatt/frame.py:146
+#: ../gui/wxpython/iscatt/frame.py:166
 #, fuzzy
 msgid "GRASS GIS Interactive Scatter Plot Tool"
 msgstr "** 错误的颜色规范 **\n"
 
-#: ../gui/wxpython/iscatt/frame.py:361
+#: ../gui/wxpython/iscatt/frame.py:398
 #, fuzzy
 msgid "scatter plot"
 msgstr "矢量地图 %s - 未发现"
 
-#: ../gui/wxpython/iscatt/frame.py:437
+#: ../gui/wxpython/iscatt/frame.py:476
 msgid "Maximum limit of categories number was reached."
 msgstr "已达到最大类别数。"
 
-#: ../gui/wxpython/iscatt/frame.py:532
+#: ../gui/wxpython/iscatt/frame.py:572
 #, fuzzy
 msgid "Rename class"
 msgstr "重命名"
 
-#: ../gui/wxpython/iscatt/frame.py:536
+#: ../gui/wxpython/iscatt/frame.py:576
 #, fuzzy
 msgid "Set color"
 msgstr "文本颜色"
 
-#: ../gui/wxpython/iscatt/frame.py:544
+#: ../gui/wxpython/iscatt/frame.py:584
 msgid "Hide"
 msgstr "隐藏"
 
-#: ../gui/wxpython/iscatt/frame.py:546
+#: ../gui/wxpython/iscatt/frame.py:586
 msgid "Show"
 msgstr "显示"
 
-#: ../gui/wxpython/iscatt/frame.py:557
+#: ../gui/wxpython/iscatt/frame.py:601
 msgid "Move to top"
 msgstr "移动到顶部"
 
-#: ../gui/wxpython/iscatt/frame.py:563
+#: ../gui/wxpython/iscatt/frame.py:607
 msgid "Move to bottom"
 msgstr "移动到底部"
 
-#: ../gui/wxpython/iscatt/frame.py:571
+#: ../gui/wxpython/iscatt/frame.py:615
 #, fuzzy
 msgid "Move category up"
 msgstr "没有起始点"
 
-#: ../gui/wxpython/iscatt/frame.py:577
+#: ../gui/wxpython/iscatt/frame.py:621
 #, fuzzy
 msgid "Move category down"
 msgstr "管理边界定义"
 
-#: ../gui/wxpython/iscatt/frame.py:585
+#: ../gui/wxpython/iscatt/frame.py:629
 #, fuzzy
 msgid "Export class raster"
 msgstr "导出栅格地图"
 
-#: ../gui/wxpython/iscatt/frame.py:657
+#: ../gui/wxpython/iscatt/frame.py:701
 #, python-format
 msgid "Change opacity of class <%s>"
 msgstr "改变别透明度<%s>"
 
-#: ../gui/wxpython/iscatt/frame.py:679
+#: ../gui/wxpython/iscatt/frame.py:726
 msgid "Empty name was inserted."
 msgstr "插入的名称为空"
 
@@ -18562,107 +19186,107 @@ msgid ""
 "be installed. {}"
 msgstr ""
 
-#: ../gui/wxpython/iscatt/plots.py:572
+#: ../gui/wxpython/iscatt/plots.py:617
 msgid "Zoom to scatter plot extend"
 msgstr "缩放到散点图扩展"
 
-#: ../gui/wxpython/iscatt/dialogs.py:38
+#: ../gui/wxpython/iscatt/dialogs.py:39
 #, fuzzy
 msgid "Add scatter plots"
 msgstr "基础栅格图"
 
-#: ../gui/wxpython/iscatt/dialogs.py:56
+#: ../gui/wxpython/iscatt/dialogs.py:58
 msgid "x axis:"
 msgstr "x轴:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:62
+#: ../gui/wxpython/iscatt/dialogs.py:65
 msgid "y axis:"
 msgstr "y轴:"
 
-#: ../gui/wxpython/iscatt/dialogs.py:97
+#: ../gui/wxpython/iscatt/dialogs.py:104
 msgid "Bands of scatter plots to be added (x y):"
 msgstr "将波段添加到散点图(x y):"
 
-#: ../gui/wxpython/iscatt/dialogs.py:135
+#: ../gui/wxpython/iscatt/dialogs.py:154
 #, fuzzy
 msgid "No scatter plots selected."
 msgstr "没有指定数据地图"
 
-#: ../gui/wxpython/iscatt/dialogs.py:183
+#: ../gui/wxpython/iscatt/dialogs.py:202
 msgid "Select both x and y bands."
 msgstr "同时选择x和y波段。"
 
-#: ../gui/wxpython/iscatt/dialogs.py:186
+#: ../gui/wxpython/iscatt/dialogs.py:206
 #, fuzzy
 msgid "Selected bands must be different."
 msgstr "无法创建栅格地图 %s"
 
-#: ../gui/wxpython/iscatt/dialogs.py:191
+#: ../gui/wxpython/iscatt/dialogs.py:213
 msgid ""
 "Scatter plot with same bands combination (regardless x y order) has been "
 "already added into the list."
 msgstr "相同的波段组合(x y顺序不分先后)已经添加到列表中。"
 
-#: ../gui/wxpython/iscatt/dialogs.py:292
+#: ../gui/wxpython/iscatt/dialogs.py:322
 #, fuzzy, python-format
 msgid "Raster map <%s> already exists. Do you want to overwrite it?"
 msgstr "栅格地图 %i 文件名成: %s 已经存在。它将被覆盖!\n"
 
-#: ../gui/wxpython/iscatt/dialogs.py:294
+#: ../gui/wxpython/iscatt/dialogs.py:325
 #, fuzzy, python-format
 msgid "Raster <%s> exists"
 msgstr "dig_att文件不存在。"
 
-#: ../gui/wxpython/iscatt/dialogs.py:317
+#: ../gui/wxpython/iscatt/dialogs.py:351
 msgid "Show confidence ellipses"
 msgstr "显示置信椭圆区"
 
-#: ../gui/wxpython/iscatt/dialogs.py:323
+#: ../gui/wxpython/iscatt/dialogs.py:358
 #, fuzzy
 msgid "Selection polygon color:"
 msgstr "使用的插值方法"
 
-#: ../gui/wxpython/iscatt/dialogs.py:324
+#: ../gui/wxpython/iscatt/dialogs.py:359
 #, fuzzy
 msgid "Color of selection polygon vertex:"
 msgstr "%d 条记录被更新"
 
-#: ../gui/wxpython/iscatt/dialogs.py:325
+#: ../gui/wxpython/iscatt/dialogs.py:360
 #, fuzzy
 msgid "Selected area color:"
 msgstr "边框颜色"
 
-#: ../gui/wxpython/iscatt/dialogs.py:339
+#: ../gui/wxpython/iscatt/dialogs.py:372
 #, fuzzy
 msgid "Selected area opacity:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/iscatt/dialogs.py:371
+#: ../gui/wxpython/iscatt/dialogs.py:411
 #, fuzzy
 msgid "Selection style:"
 msgstr "选择颜色"
 
-#: ../gui/wxpython/iscatt/dialogs.py:393
+#: ../gui/wxpython/iscatt/dialogs.py:438
 #, fuzzy
 msgid "Ellipses settings:"
 msgstr "无法获取栅格行\n"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:107
-#: ../gui/wxpython/iscatt/iscatt_core.py:157
+#: ../gui/wxpython/iscatt/iscatt_core.py:110
+#: ../gui/wxpython/iscatt/iscatt_core.py:160
 #, fuzzy
 msgid "Select category for editing."
 msgstr "栅格地图: "
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:148
+#: ../gui/wxpython/iscatt/iscatt_core.py:151
 #, fuzzy
 msgid "Computing of scatter plots failed."
 msgstr "创建新组文件"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:286
+#: ../gui/wxpython/iscatt/iscatt_core.py:298
 msgid "Patching category raster conditions file failed."
 msgstr "分类栅格条件文件补丁操作失败。"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:309
+#: ../gui/wxpython/iscatt/iscatt_core.py:321
 #, python-format
 msgid ""
 "v.build failed:\n"
@@ -18671,7 +19295,7 @@ msgstr ""
 "v.build操作失败:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/iscatt_core.py:327
+#: ../gui/wxpython/iscatt/iscatt_core.py:339
 #, python-format
 msgid ""
 "v.to.rast failed:\n"
@@ -18680,42 +19304,42 @@ msgstr ""
 "v.to.rast操作失败:\n"
 "%s"
 
-#: ../gui/wxpython/iscatt/toolbars.py:48
+#: ../gui/wxpython/iscatt/toolbars.py:54
 #, fuzzy
 msgid "Add scatter plot"
 msgstr "基础栅格图"
 
-#: ../gui/wxpython/iscatt/toolbars.py:50
+#: ../gui/wxpython/iscatt/toolbars.py:57
 #, fuzzy
 msgid "Select area with polygon"
 msgstr "栅格地图: "
 
-#: ../gui/wxpython/iscatt/toolbars.py:52
+#: ../gui/wxpython/iscatt/toolbars.py:60
 msgid "Pan mode for scatter plots"
 msgstr "散点图拖动模式"
 
-#: ../gui/wxpython/iscatt/toolbars.py:54
+#: ../gui/wxpython/iscatt/toolbars.py:63
 msgid "Zoom mode for scatter plots (left mouse button, wheel)"
 msgstr "散点图缩放模式(鼠标左键,滚轮)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:56
+#: ../gui/wxpython/iscatt/toolbars.py:66
 msgid ""
 "Zoom to scatter plot data extend mode (click on scatter plot for zooming to "
 "extend)"
 msgstr "缩放到散点图数据扩展模式(点击散点图以缩放扩展)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:58
+#: ../gui/wxpython/iscatt/toolbars.py:69
 msgid "Show/hide class manager"
 msgstr "显示/隐藏类别管理器"
 
-#: ../gui/wxpython/iscatt/toolbars.py:162
-#: ../gui/wxpython/iscatt/toolbars.py:163
+#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:176
 #, fuzzy
 msgid "Include selected area to class"
 msgstr "查询选中的网格/矢量地图"
 
-#: ../gui/wxpython/iscatt/toolbars.py:165
-#: ../gui/wxpython/iscatt/toolbars.py:166
+#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:179
 #, fuzzy
 msgid "Exclude selected area from class"
 msgstr ""
@@ -18723,51 +19347,51 @@ msgstr ""
 "%s\n"
 "从层列表中移除?"
 
-#: ../gui/wxpython/iscatt/toolbars.py:168
+#: ../gui/wxpython/iscatt/toolbars.py:181
 msgid "Add new vertex"
 msgstr "添加新顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:169
+#: ../gui/wxpython/iscatt/toolbars.py:182
 msgid "Add new vertex to polygon boundary scatter plot"
 msgstr "给多边形边界散点图添加新顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:171
+#: ../gui/wxpython/iscatt/toolbars.py:184
 #, fuzzy
 msgid "Create selection polygon"
 msgstr "反向清扫完成"
 
-#: ../gui/wxpython/iscatt/toolbars.py:172
+#: ../gui/wxpython/iscatt/toolbars.py:185
 msgid "Add new vertex between last and first points of the boundary"
 msgstr "在最后一点及第一点之间添加新顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:174
+#: ../gui/wxpython/iscatt/toolbars.py:187
 msgid "Move vertex"
 msgstr "移动顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:175
+#: ../gui/wxpython/iscatt/toolbars.py:188
 #, fuzzy
 msgid "Move boundary vertex"
 msgstr "移动顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:177
+#: ../gui/wxpython/iscatt/toolbars.py:190
 msgid "Remove vertex"
 msgstr "删除顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:178
+#: ../gui/wxpython/iscatt/toolbars.py:191
 #, fuzzy
 msgid "Remove boundary vertex"
 msgstr "删除顶点"
 
-#: ../gui/wxpython/iscatt/toolbars.py:180
+#: ../gui/wxpython/iscatt/toolbars.py:193
 msgid "Remove polygon (click on scatter plot for removing it's polygon)"
 msgstr "移除多边形(点及散点图以移除该图的多边形)"
 
-#: ../gui/wxpython/iscatt/toolbars.py:257
+#: ../gui/wxpython/iscatt/toolbars.py:271
 #, fuzzy
 msgid "Add class"
 msgstr "添加标注"
 
-#: ../gui/wxpython/iscatt/toolbars.py:259
+#: ../gui/wxpython/iscatt/toolbars.py:273
 #, fuzzy
 msgid "Remove selected class"
 msgstr ""
@@ -18782,6 +19406,27 @@ msgstr ""
 #~ "无法导入matplotlib (请尝试安装该库)。\n"
 #~ "%s"
 
+#~ msgid ""
+#~ "Units of current projection are not supported,\n"
+#~ " meters will be used!"
+#~ msgstr ""
+#~ "当前投影不支持该单位,\n"
+#~ "将使用米作为单位!"
+
+#, fuzzy
+#~ msgid "Unsupported units"
+#~ msgstr "未知的类型"
+
+#~ msgid "Map layers"
+#~ msgstr "地图层"
+
+#~ msgid "Search modules"
+#~ msgstr "查找模块"
+
+#, fuzzy
+#~ msgid "Do you really want to delete map <{m}>?"
+#~ msgstr "创建GRASS地点<%s>?"
+
 #, fuzzy
 #~ msgid "Temporary map '%s' with result "
 #~ msgstr "dig_att文件不存在。"
@@ -18805,6 +19450,26 @@ msgstr ""
 #~ msgid "Exit GUI"
 #~ msgstr "退出图形界面"
 
+#, fuzzy
+#~ msgid "Invalid input data"
+#~ msgstr "无效的区域:%s"
+
+#, fuzzy
+#~ msgid "No mapsets readable"
+#~ msgstr "[%s] 的类别文件无效"
+
+#, fuzzy
+#~ msgid "Editing"
+#~ msgstr "验证模型..."
+
+#, fuzzy
+#~ msgid "Renaming"
+#~ msgstr "重命名"
+
+#, fuzzy
+#~ msgid "Copying"
+#~ msgstr "拷贝表失败"
+
 #~ msgid "List raster3D dataset maps"
 #~ msgstr "列举三维栅格数据集地图"
 
@@ -18817,23 +19482,40 @@ msgstr ""
 #~ msgid "Univariate raster3D dataset statistics"
 #~ msgstr "三维栅格数据集一元统计量"
 
-#~ msgid "Add condition"
-#~ msgstr "添加条件"
-
-#~ msgid "Adds condition (if/else) to model"
-#~ msgstr "添加模型条件(if/else)"
+#~ msgid "Repository"
+#~ msgstr "组件库"
 
 #, fuzzy
-#~ msgid "Add linked layers into layer tree ({mightNotWork})"
-#~ msgstr "加载地图层到层列表"
+#~ msgid "Load settings:"
+#~ msgstr "无法获取栅格行\n"
 
-#, fuzzy
-#~ msgid "Add imported layers into layer tree ({mightNotWork})"
-#~ msgstr "加载地图层到层列表"
+#~ msgid "Unable to render map layer <%s>."
+#~ msgstr "无法渲染地图层<%s>。"
+
+#~ msgid "Unable to render overlay <%s>."
+#~ msgstr "无法渲染层<%s>。"
 
 #~ msgid "Unpacks a raster map packed with r.pack."
 #~ msgstr "解开用r.pack打包的栅整地图"
 
+#~ msgid "Historical GRASS vector import"
+#~ msgstr "导入旧版GRASS矢量数据"
+
+#~ msgid "Historical GRASS vector import (all maps)"
+#~ msgstr "导入旧版GRASS矢量数据(所有地图)"
+
+#, fuzzy
+#~ msgid ""
+#~ "Converts all older versions of GRASS vector maps in current mapset to "
+#~ "current format."
+#~ msgstr "导入旧版GRASS矢量地图。"
+
+#~ msgid "GPS data import"
+#~ msgstr "导入GPS数据"
+
+#~ msgid "GEOnet import"
+#~ msgstr "导入GEOnet数据"
+
 #~ msgid "Unpacks a vector map packed with v.pack."
 #~ msgstr "解开用v.pack打包的矢量地图。"
 
@@ -18857,27 +19539,6 @@ msgstr ""
 #~ msgid "Common export formats using OGR"
 #~ msgstr "导出为常用OGR格式"
 
-#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
-#~ msgstr "设置选中图层的计算区域(忽略NULL值)"
-
-#~ msgid "Historical GRASS vector import"
-#~ msgstr "导入旧版GRASS矢量数据"
-
-#~ msgid "Historical GRASS vector import (all maps)"
-#~ msgstr "导入旧版GRASS矢量数据(所有地图)"
-
-#, fuzzy
-#~ msgid ""
-#~ "Converts all older versions of GRASS vector maps in current mapset to "
-#~ "current format."
-#~ msgstr "导入旧版GRASS矢量地图。"
-
-#~ msgid "GPS data import"
-#~ msgstr "导入GPS数据"
-
-#~ msgid "GEOnet import"
-#~ msgstr "导入GEOnet数据"
-
 #~ msgid "IDW from raster points (alternate method for sparse points)"
 #~ msgstr "反距离加权(适用于稀疏点的另一种方法)"
 
@@ -18887,6 +19548,25 @@ msgstr ""
 #~ msgid "Bit pattern comparison "
 #~ msgstr "位模式比较"
 
+#, fuzzy
+#~ msgid "Launches graphical attribute table manager."
+#~ msgstr "GRASS GIS层管理器"
+
+#, fuzzy
+#~ msgid "Select space time raster dataset(s):"
+#~ msgstr "导入栅格数据"
+
+#~ msgid "Set computational region from selected map(s) (ignore NULLs)"
+#~ msgstr "设置选中图层的计算区域(忽略NULL值)"
+
+#, fuzzy
+#~ msgid "Add default servers"
+#~ msgstr "添加网格层"
+
+#, fuzzy
+#~ msgid "Develop 3D rasters"
+#~ msgstr "基础栅格图"
+
 #~ msgid "Width size (in cells) ?"
 #~ msgstr "宽度(像元数)?"
 
@@ -18896,10 +19576,6 @@ msgstr ""
 #~ msgid "What radius size (in meters) ?"
 #~ msgstr "半径(米)?"
 
-#, fuzzy
-#~ msgid "Volume"
-#~ msgstr "列名"
-
 #~ msgid "Choose project location and mapset"
 #~ msgstr "选择投影地点和数据集"
 
@@ -18968,36 +19644,19 @@ msgstr ""
 #~ msgid "Welcome to GRASS GIS"
 #~ msgstr "欢迎使用GRASS GIS"
 
-#~ msgid "No GRASS location found in '%s'."
-#~ msgstr "在'%s'中没有发现GRASS地点。"
-
 #~ msgid "Starting GRASS for the first time"
 #~ msgstr "第一次运行GRASS"
 
-#~ msgid "Vector to volume"
-#~ msgstr "矢量转换为三维"
-
-#~ msgid "Raster map calculator."
-#~ msgstr "栅格掩码计算器"
-
 #, fuzzy
-#~ msgid "V&olumes"
-#~ msgstr "三维栅格"
-
-#~ msgid "Develop volumes"
-#~ msgstr "三维栅格开发"
-
-#~ msgid "3D Mask"
-#~ msgstr "三维掩码"
-
-#~ msgid "Volume calculator"
-#~ msgstr "三维计算器"
+#~ msgid "Add linked layers into layer tree ({mightNotWork})"
+#~ msgstr "加载地图层到层列表"
 
-#~ msgid "Basic volume metadata"
-#~ msgstr "三维图基本元数据"
+#, fuzzy
+#~ msgid "Add imported layers into layer tree ({mightNotWork})"
+#~ msgstr "加载地图层到层列表"
 
-#~ msgid "Voxel statistics"
-#~ msgstr "三维栅格统计"
+#~ msgid "Digitize"
+#~ msgstr "数字化"
 
 #~ msgid "Width size (in cells)? "
 #~ msgstr "窗口大小(像元数)?"
@@ -19018,6 +19677,14 @@ msgstr ""
 #~ msgstr ""
 #~ "为设置文件%s \"                                            \" 设定新名称"
 
+#, fuzzy
+#~ msgid "Volume"
+#~ msgstr "列名"
+
+#, fuzzy
+#~ msgid "GRASS SVN Revision"
+#~ msgstr "区域"
+
 #~ msgid "Add various raster map layers (RGB, HIS, 晕渲...)"
 #~ msgstr "添加多种栅格地图层(RGB, HIS, shaded relief...)"
 
@@ -19050,18 +19717,43 @@ msgstr ""
 #~ msgid "Raster 2.5D to volume"
 #~ msgstr "2.5D栅格地图转换为体积"
 
+#~ msgid "Vector to volume"
+#~ msgstr "矢量转换为三维"
+
 #~ msgid "Sites to vector"
 #~ msgstr "样点转化为矢量"
 
 #~ msgid "Volume to raster series"
 #~ msgstr "体积转换为栅格系列"
 
+#~ msgid "Raster map calculator."
+#~ msgstr "栅格掩码计算器"
+
+#, fuzzy
+#~ msgid "V&olumes"
+#~ msgstr "三维栅格"
+
+#~ msgid "Develop volumes"
+#~ msgstr "三维栅格开发"
+
+#~ msgid "3D Mask"
+#~ msgstr "三维掩码"
+
+#~ msgid "Volume calculator"
+#~ msgstr "三维计算器"
+
 #~ msgid "3D raster map calculator."
 #~ msgstr "三维栅格地图计算器"
 
 #~ msgid "Interpolate volume from points"
 #~ msgstr "三维插值"
 
+#~ msgid "Basic volume metadata"
+#~ msgstr "三维图基本元数据"
+
+#~ msgid "Voxel statistics"
+#~ msgstr "三维栅格统计"
+
 #~ msgid "Univariate statistics for volumes"
 #~ msgstr "三维栅格一元统计量"
 
@@ -19099,10 +19791,6 @@ msgstr ""
 #~ "registered raster3d map of a space time raster3d dataset."
 #~ msgstr "计算栅格地图中非空像元的一元统计值"
 
-#, fuzzy
-#~ msgid "Launches graphical attribute table manager."
-#~ msgstr "GRASS GIS层管理器"
-
 #~ msgid "ESRI ASCII grid import"
 #~ msgstr "导入ESRI ASCII网格"
 
diff --git a/macosx/pkg/resources/ReadMe.rtf b/macosx/pkg/resources/ReadMe.rtf
index aa56e02..7ee04e1 100644
--- a/macosx/pkg/resources/ReadMe.rtf
+++ b/macosx/pkg/resources/ReadMe.rtf
@@ -40,7 +40,7 @@ Starting GRASS}{\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs28\loch\f5
 open -a "GRASS-}{\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs24\loch\f6
 7}{\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs24\loch\f6
 .}{\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs24\loch\f6
-0}{\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs24\loch\f6
+1}{\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs24\loch\f6
 .app" \{/path/to/db/location/mapset\}}
 \par \pard\plain \s0\nowidctlpar{\*\hyphen2\hyphlead2\hyphtrail2\hyphmax0}\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\fs24\lang1033\ql\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\cf1\ulnone\ulc0\b0\rtlch \ltrch\loch\fs28\loch\f5
 
diff --git a/man/Makefile b/man/Makefile
index 513d2ec..253449c 100644
--- a/man/Makefile
+++ b/man/Makefile
@@ -7,7 +7,10 @@ MANPAGES := $(patsubst $(HTMLDIR)/%.html,$(MANDIR)/%.$(MANSECT),$(wildcard $(HTM
 DSTFILES := \
 	$(HTMLDIR)/grassdocs.css \
 	$(HTMLDIR)/grass_logo.png \
-	$(HTMLDIR)/grass_icon.png
+	$(HTMLDIR)/grass_icon.png \
+	$(HTMLDIR)/jquery.fixedheadertable.min.js \
+	$(HTMLDIR)/parser_standard_options.css \
+	$(HTMLDIR)/parser_standard_options.js
 
 categories = \
 	d:display \
@@ -23,7 +26,7 @@ categories = \
 
 IDXCATS := $(foreach cat,$(categories),$(lastword $(subst :, ,$(cat))))
 
-IDXSRC = full_index index topics keywords $(IDXCATS)
+IDXSRC = full_index index topics keywords graphical_index manual_gallery class_graphical parser_standard_options $(IDXCATS)
 
 INDICES := $(patsubst %,$(HTMLDIR)/%.html,$(IDXSRC))
 
@@ -67,6 +70,33 @@ GISBASE="$(RUN_GISBASE)" ARCH="$(ARCH)" ARCH_DISTDIR="$(ARCH_DISTDIR)" \
 	$(PYTHON) ./build_keywords.py $(HTMLDIR)
 endef
 
+define build_graphical_index
+GISBASE="$(RUN_GISBASE)" ARCH="$(ARCH)" ARCH_DISTDIR="$(ARCH_DISTDIR)" \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	$(PYTHON) ./build_graphical_index.py $(HTMLDIR)
+endef
+
+define build_manual_gallery
+GISBASE="$(RUN_GISBASE)" ARCH="$(ARCH)" ARCH_DISTDIR="$(ARCH_DISTDIR)" \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	$(PYTHON) ./build_manual_gallery.py $(HTMLDIR)
+endef
+
+define build_pso
+GISBASE="$(RUN_GISBASE)" ARCH="$(ARCH)" ARCH_DISTDIR="$(ARCH_DISTDIR)" \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	$(PYTHON) ./parser_standard_options.py -t "$(GRASS_HOME)/lib/gis/parser_standard_options.c" \
+	-f "grass" -o "$(HTMLDIR)/parser_standard_options.html" -p 'id="opts_table" class="scroolTable"'
+endef
+
+$(HTMLDIR)/topics.html: $(ALL_HTML)
+
+define build_class_graphical
+GISBASE="$(RUN_GISBASE)" ARCH="$(ARCH)" ARCH_DISTDIR="$(ARCH_DISTDIR)" \
+	VERSION_NUMBER=$(GRASS_VERSION_NUMBER) VERSION_DATE=$(GRASS_VERSION_DATE) \
+	$(PYTHON) ./build_class_graphical.py $(HTMLDIR)
+endef
+
 $(HTMLDIR)/topics.html: $(ALL_HTML) build_topics.py
 	$(call build_topics)
 	touch $@
@@ -83,6 +113,23 @@ $(HTMLDIR)/keywords.html: $(ALL_HTML)
 	$(call build_keywords)
 	touch $@
 
+
+$(HTMLDIR)/graphical_index.html: $(ALL_HTML)
+	$(call build_graphical_index)
+	touch $@
+
+$(HTMLDIR)/manual_gallery.html: $(ALL_HTML)
+	$(call build_manual_gallery)
+
+$(HTMLDIR)/parser_standard_options.html: $(ALL_HTML)
+	$(call build_pso)
+	touch $@
+
+# TODO: this should be done in the same way as category_rule
+$(HTMLDIR)/class_graphical.html: $(ALL_HTML)
+	$(call build_class_graphical)
+	touch $@
+
 define category_rule
 $$(HTMLDIR)/$(2).html: $$(wildcard $$(HTMLDIR)/$(1).*.html) build_class.py build_html.py
 	$$(call build,class,$(1) $(2))
@@ -100,3 +147,11 @@ $(HTMLDIR)/grass_logo.png: grass_logo.png
 $(HTMLDIR)/grass_icon.png: grass_icon.png
 	$(INSTALL_DATA) $< $@
 
+$(HTMLDIR)/jquery.fixedheadertable.min.js: jquery.fixedheadertable.min.js
+	$(INSTALL_DATA) $< $@
+
+$(HTMLDIR)/parser_standard_options.js: parser_standard_options.js
+	$(INSTALL_DATA) $< $@
+
+$(HTMLDIR)/parser_standard_options.css: parser_standard_options.css
+	$(INSTALL_DATA) $< $@
diff --git a/man/build_class_graphical.py b/man/build_class_graphical.py
new file mode 100644
index 0000000..eefda11
--- /dev/null
+++ b/man/build_class_graphical.py
@@ -0,0 +1,238 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+############################################################################
+#
+# MODULE:    build_class_graphical
+# AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
+# PURPOSE:   Build page with modules per family/class/category with images
+# COPYRIGHT: (C) 2015 by Vaclav Petras and the GRASS Development Team
+#
+#        This program is free software under the GNU General Public
+#        License (>=v2). Read the file COPYING that comes with GRASS
+#        for details.
+#
+#############################################################################
+
+import sys
+import os
+import fnmatch
+
+#from build_html import *
+from build_html import (
+    default_year, header1_tmpl, grass_version,
+    modclass_intro_tmpl, to_title, html_files,
+    check_for_desc_override, get_desc, write_html_footer, replace_file,
+    )
+
+
+header_graphical_index_tmpl = """\
+<link rel="stylesheet" href="grassdocs.css" type="text/css">
+<style>
+.img-list {
+    margin: 0;
+    padding: 0;
+    list-style-type: none;
+}
+
+.img-list li {
+    padding: 5px;
+    overflow: auto;
+}
+
+.img-list li:hover {
+    background-color: #eee;
+}
+
+.img-list li a {
+    color: initial;
+    text-decoration: none;
+    display: block;
+}
+
+.img-list li img {
+    width: 10%;
+    float: left;
+    margin: 0 15px 0 0;
+    background: white;
+}
+
+.img-list li img.default-img {
+    width: 40px;
+    padding-left: 30px;
+    padding-right: 30px;
+}
+
+.img-list li .desc {
+    margin: 0px;
+}
+
+.img-list li .name {
+    margin: 5px;
+    display: block;
+    color: #409940;
+    font-weight: bold;
+    font-style: italic;
+}
+</style>
+</head>
+<body style="width: 99%">
+<div id="container">
+
+<a href="index.html"><img src="grass_logo.png" alt="GRASS logo"></a>
+<hr class="header">
+<h2>Graphical index of GRASS GIS modules</h2>
+"""
+
+
+def file_matches(filename, patterns):
+    for pattern in patterns:
+        if fnmatch.fnmatch(filename, pattern):
+            return True
+    return False
+
+
+def starts_with_module(string, module):
+    # not solving:
+    # module = module.replace('wxGUI.', 'g.gui.')
+    # TODO: matches g.mapsets images for g.mapset and d.rast.num for d.rast
+    if string.startswith(module.replace('.', '_')):
+        return True
+    if string.startswith(module.replace('.', '')):
+        return True
+    if string.startswith(module):
+        return True
+    return False
+
+
+def get_module_image(module, images):
+    candidates = []
+    for image in images:
+        if starts_with_module(image, module):
+            candidates.append(image)
+    if len(candidates) == 1:
+        # matches g.mapsets images for g.mapset and d.rast.num for d.rast
+        return candidates[0]
+    if not candidates:
+        return None
+    for image in candidates:
+        basename, unused = image.rsplit('.', 1)
+        if basename == module.replace('.', '_'):
+            return image
+        if basename == module.replace('.', ''):
+            return image
+        if basename == module:
+            return image
+    return sorted(candidates,
+                  lambda first, second: cmp(len(first), len(second)))[0]
+
+
+def generate_page_for_category(short_family, module_family, imgs, year,
+                               skip_no_image=False):
+    filename = module_family + "_graphical.html"
+
+    output = open(filename + ".tmp", 'wb')
+
+    output.write(header1_tmpl.substitute(
+        title="GRASS GIS %s Reference "
+              "Manual: Graphical index" % grass_version))
+    output.write(header_graphical_index_tmpl)
+
+    if module_family.lower() not in ['general', 'misc', 'postscript']:
+        if module_family == 'raster3d':
+            # covert keyword to nice form
+            module_family = '3D raster'
+        output.write(modclass_intro_tmpl.substitute(
+            modclass=module_family, modclass_lower=module_family.lower()))
+    if module_family == 'wxGUI':
+        output.write("<h3>wxGUI components:</h3>")
+    elif module_family == 'guimodules':
+        output.write("<h3>g.gui.* modules:</h3>")
+    else:
+        output.write("<h3>{} modules:</h3>".format(to_title(module_family)))
+    output.write('<ul class="img-list">')
+
+    #for all modules:
+    for cmd in html_files(short_family, ignore_gui=False):
+        basename = os.path.splitext(cmd)[0]
+        desc = check_for_desc_override(basename)
+        if desc is None:
+            desc = get_desc(cmd)
+        img = get_module_image(basename, imgs)
+        img_class = 'linkimg'
+        if skip_no_image and not img:
+            continue
+        elif not img:
+            img = 'grass_logo.png'
+            img_class = 'default-img'
+        if basename.startswith('wxGUI'):
+            basename = basename.replace('.', ' ')
+        output.write(
+            '<li>'
+            '<a href="{html}">'
+            '<img class="{img_class}" src="{img}">'
+            '<span class="name">{name}</span> '
+            '<span class="desc">{desc}</span>'
+            '</a>'
+            '</li>'
+            .format(html=cmd, img=img, name=basename,
+                    desc=desc, img_class=img_class))
+
+    output.write('</ul>')
+
+    write_html_footer(output, "index.html", year)
+
+    output.close()
+    replace_file(filename)
+
+
+# TODO: dependencies in makefile for this have to be fixed
+# TODO: there is a potential overlap with other scripts (-> refactoring)
+
+def main():
+    year = default_year
+    html_dir = sys.argv[1]
+    os.chdir(html_dir)
+
+    img_extensions = ['png', 'jpg', 'gif']
+    img_patterns = ['*.' + extension for extension in img_extensions]
+    imgs = []
+    for filename in os.listdir(html_dir):
+        if file_matches(filename, img_patterns):
+            imgs.append(filename)
+
+    # using term family
+    # category has its meaning in GRASS already
+    # class has its meaning in Python, plus it is a synonym for category
+    # TODO: what would be user friendly is unclear
+    families = [
+        ('d', 'display'),
+        ('db', 'database'),
+        ('g', 'general'),
+        ('i', 'imagery'),
+        ('m', 'misc'),
+        ('ps', 'postscript'),
+        ('r', 'raster'),
+        ('r3', 'raster3d'),
+        ('t', 'temporal'),
+        ('v', 'vector'),
+        ('wxGUI', 'wxGUI'),
+        ('g.gui', 'guimodules'),
+    ]
+
+    # partial compatibility with build_class.py
+    # first arg is dist html dir but the 3 other are like first 3 there
+    if len(sys.argv) > 2:
+        short_family = sys.argv[2]
+        module_family = sys.argv[3]
+        classes = [(short_family, module_family)]
+        if len(sys.argv) > 4:
+            year = sys.argv[4]
+
+    for short_family, module_family in families:
+        generate_page_for_category(short_family, module_family, imgs,
+                                   year=year, skip_no_image=True)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/man/build_graphical_index.py b/man/build_graphical_index.py
new file mode 100755
index 0000000..b507e22
--- /dev/null
+++ b/man/build_graphical_index.py
@@ -0,0 +1,133 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+############################################################################
+#
+# MODULE:    build_graphical_index
+# AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
+# PURPOSE:   Build graphical index
+# COPYRIGHT: (C) 2015 by Vaclav Petras and the GRASS Development Team
+#
+#        This program is free software under the GNU General Public
+#        License (>=v2). Read the file COPYING that comes with GRASS
+#        for details.
+#
+#############################################################################
+
+import os
+import sys
+import fnmatch
+import re
+
+from build_html import write_html_footer, grass_version, header1_tmpl
+
+
+output_name = 'graphical_index.html'
+
+year = os.getenv("VERSION_DATE")
+
+# other similar strings are in a different file
+# TODO: all HTML manual building needs refactoring (perhaps grass.tools?)
+header_graphical_index_tmpl = """\
+<link rel="stylesheet" href="grassdocs.css" type="text/css">
+<style>
+.img-list {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    text-align: center;
+}
+
+.img-list li {
+    display: inline-block;
+    position: relative;
+    width: 8em;
+    margin: 0;
+    padding: 0.5em;
+    margin-bottom: 1em;
+}
+
+.img-list li:hover {
+    background-color: #eee;
+}
+
+.img-list li img {
+    float: left;
+    max-width: 100%;
+    background: white;
+}
+
+.img-list li span {
+    text-align: center;
+}
+
+.img-list li a {
+    color: initial;
+    text-decoration: none;
+}
+
+.img-list li .name {
+    margin: 0.1em;
+    display: block;
+    color: #409940;
+    font-weight: bold;
+    font-style: normal;
+    font-size: 120%;
+}
+</style>
+</head>
+<body style="width: 99%">
+<div id="container">
+
+<a href="index.html"><img src="grass_logo.png" alt="GRASS logo"></a>
+<hr class="header">
+<h2>Graphical index of GRASS GIS modules</h2>
+"""
+
+
+def std_img_name(name):
+    return "gi_{}.jpg".format(name)
+
+
+index_items = [
+    ('raster_graphical.html', std_img_name('raster'), 'Raster'),
+    ('vector_graphical.html', std_img_name('vector'), 'Vector'),
+    ('database_graphical.html', std_img_name('database'), 'Database'),
+    ('general_graphical.html', std_img_name('general'), 'General'),
+    ('display_graphical.html', std_img_name('display'), 'Display'),
+    ('imagery_graphical.html', std_img_name('imagery'), 'Imagery'),
+    ('raster3d_graphical.html', std_img_name('raster3d'), '3D raster'),
+    ('temporal_graphical.html', std_img_name('temporal'), 'Temporal'),
+    ('misc_graphical.html', std_img_name('misc'), 'Miscellaneous'),
+    ('postscript_graphical.html', std_img_name('cartography'), 'Cartography'),
+    ('wxGUI_graphical.html', std_img_name('gui'), 'GUI'),
+    ('wxGUI.nviz.html', std_img_name('3dview'), '3D view'),
+    ('https://grass.osgeo.org/grass72/manuals/libpython/index.html', std_img_name('python'), 'Python'),
+    ('https://grass.osgeo.org/programming7/', std_img_name('c'), 'C library'),
+    ('manual_gallery.html', std_img_name('gallery'), 'Gallery'),
+]
+
+
+def main():
+    html_dir = sys.argv[1]
+
+    with open(os.path.join(html_dir, output_name), 'w') as output:
+        output.write(header1_tmpl.substitute(title="GRASS GIS %s Reference "
+                                               "Manual: Graphical index" % grass_version))
+        output.write(header_graphical_index_tmpl)
+        output.write('<ul class="img-list">\n')
+        for html_file, image, label in index_items:
+            output.write(
+                '<li>'
+                '<a href="{html}">'
+                '<img src="{img}">'
+                '<span class="name">{name}</span>'
+                '</a>'
+                '</li>\n'
+                .format(html=html_file, img=image, name=label))
+        output.write('</ul>')
+        write_html_footer(output, "index.html", year)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/man/build_html.py b/man/build_html.py
index dc86fcb..e213c38 100644
--- a/man/build_html.py
+++ b/man/build_html.py
@@ -93,6 +93,10 @@ r"""<!-- the files grass${grass_version_major}.html & helptext.html file live in
       <ul>
        <li class="box"><span><a href="http://grasswiki.osgeo.org/wiki/Faq">FAQ - Frequently Asked Questions</a> (Wiki)</span></li>
       </ul>
+      <p>
+      <ul>
+       <li class="box"><span><a href="graphical_index.html">Graphical index of functionality</a></span></li>
+      </ul>
       </td>
       <td width="33%" valign="top" class="box"><h3> Graphical User Interface</h3>
        <ul>
@@ -191,6 +195,7 @@ r"""<hr class="header">
 <a href="${index_url}">Main index</a> |
 <a href="topics.html">Topics index</a> |
 <a href="keywords.html">Keywords index</a> |
+<a href="graphical_index.html">Graphical index</a> |
 <a href="full_index.html">Full index</a>
 </p>
 <p>
@@ -316,12 +321,29 @@ r"""
 <hr class="header">
 
 <h2>Topic: ${keyword}</h2>
-<i>Note: see also the corresponding keyword <a href="keywords.html#${keyword}">${keyword}</a> for additional references.</i>
-<p>
+
 <table>
 """)
 #"
 
+headerpso_tmpl = \
+r"""
+<link rel="stylesheet" href="grassdocs.css" type="text/css">
+<link rel="stylesheet" href="parser_standard_options.css" type="text/css">
+<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
+<script type="text/javascript" src="jquery.fixedheadertable.min.js"></script>
+<script type="text/javascript" src="parser_standard_options.js"></script>
+</head>
+<body style="width: 99%">
+<div id="container">
+
+<a href="index.html"><img src="grass_logo.png" alt="GRASS logo"></a>
+<hr class="header">
+<h2>Parser standard options</h2>
+<ul>
+"""
+#"
+
 ############################################################################
 
 def check_for_desc_override(basename):
@@ -358,14 +380,14 @@ def replace_file(name):
 def copy_file(src, dst):
     write_file(dst, read_file(src))
 
-def html_files(cls = None):
+def html_files(cls=None, ignore_gui=True):
     for cmd in sorted(os.listdir(html_dir)):
         if cmd.endswith(".html") and \
            (cls in [None, '*'] or cmd.startswith(cls + ".")) and \
            (cls != '*' or len(cmd.split('.')) >= 3) and \
            cmd not in ["full_index.html", "index.html"] and \
            cmd not in exclude_mods and \
-           not cmd.startswith("wxGUI."):
+           (ignore_gui and not cmd.startswith("wxGUI.") or not ignore_gui):
             yield cmd
 
 def write_html_header(f, title, ismain = False, body_width = "99%"):
diff --git a/man/build_manual_gallery.py b/man/build_manual_gallery.py
new file mode 100755
index 0000000..a982b90
--- /dev/null
+++ b/man/build_manual_gallery.py
@@ -0,0 +1,187 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
+############################################################################
+#
+# MODULE:    build_graphical_index
+# AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
+# PURPOSE:   Build index gallery from images from all HTML files
+# COPYRIGHT: (C) 2015 by Vaclav Petras and the GRASS Development Team
+#
+#        This program is free software under the GNU General Public
+#        License (>=v2). Read the file COPYING that comes with GRASS
+#        for details.
+#
+#############################################################################
+
+import os
+import sys
+import fnmatch
+import re
+
+from build_html import write_html_footer, grass_version, header1_tmpl
+
+
+output_name = 'manual_gallery.html'
+
+img_extensions = ['png', 'jpg', 'gif']
+img_patterns = ['*.' + extension for extension in img_extensions]
+
+# we don't want some images to show up
+# logos
+img_blacklist = ['grass_logo.png', 'grass_icon.png']
+# circles with numbers from helptext.html (unfortunate we have to list it here)
+# perhaps some general name ending would be good, like *_noindex.png
+img_blacklist.extend(['circle_{}.png'.format(num) for num in range(1, 6)])
+
+year = os.getenv("VERSION_DATE")
+
+# other similar strings are in a different file
+# TODO: all HTML manual building needs refactoring (perhaps grass.tools?)
+header_graphical_index_tmpl = """\
+<link rel="stylesheet" href="grassdocs.css" type="text/css">
+<style>
+.img-list {
+    list-style-type: none;
+    margin: 0;
+    padding: 0;
+    text-align: center;
+}
+
+.img-list li {
+    display: inline-block;
+    position: relative;
+    width: 7em;
+    margin: 0;
+    padding: 0.5em;
+}
+
+.img-list li:hover {
+    background-color: #eee;
+}
+
+.img-list li img {
+    float: left;
+    max-width: 100%;
+    background: white;
+}
+
+.img-list li span {
+    text-align: center;
+}
+
+.img-list li a {
+    color: initial;
+    text-decoration: none;
+}
+
+.img-list li .name {
+    margin: 0.1em;
+    display: block;
+    color: #409940;
+    font-weight: normal;
+    font-style: italic;
+    font-size: 80%;
+}
+</style>
+</head>
+<body style="width: 99%">
+<div id="container">
+
+<a href="index.html"><img src="grass_logo.png" alt="GRASS logo"></a>
+<hr class="header">
+<h2>GRASS GIS manual gallery</h2>
+"""
+
+
+def img_in_html(filename, imagename):
+    # for some reason, calling search just once is much faster
+    # than calling it on every line (time is spent in _compile)
+    pattern = re.compile('<img .*src=.{}.*>'.format(imagename))
+    with open(filename) as file:
+        if re.search(pattern, file.read()):
+            return True
+    return False
+
+
+def file_matches(filename, patterns):
+    for pattern in patterns:
+        if fnmatch.fnmatch(filename, pattern):
+            return True
+    return False
+
+
+def get_files(directory, patterns, exclude_patterns):
+    files = []
+    for filename in os.listdir(directory):
+        if file_matches(filename, patterns):
+            if not file_matches(filename, exclude_patterns):
+                files.append(filename)
+    return files
+
+
+def remove_module_name(string, module):
+    string = string.replace(module.replace('wxGUI.', 'g.gui.'), '')
+    string = string.replace(module.replace('.', '_'), '')  # using _
+    string = string.replace(module.replace('.', ''), '')  # using nothing
+    string = string.replace(module, '')  # using original dots
+    return string
+
+
+def title_from_names(module_name, img_name):
+    # we ignore the possibility of having extension at the end of image
+    # so possibly r.out.png fails but image name should use _ anyway
+    # strictly speaking, it could be also, e.g., index name
+    for extension in img_extensions:
+        img_name = img_name.replace('.' + extension, '')
+    img_name = remove_module_name(img_name, module_name)
+    img_name = img_name.replace('_', ' ')
+    img_name = img_name.strip()
+    if img_name:
+        return "{name} ({desc})".format(name=module_name, desc=img_name)
+    else:
+        return "{name}".format(name=module_name)
+
+
+def get_module_name(filename):
+    return filename.replace('.html', '')
+
+
+def main():
+    html_dir = sys.argv[1]
+
+    html_files = get_files(html_dir, ['*.html'],
+                           exclude_patterns=[output_name, '*_graphical.html', 'graphical_index.html'])
+    img_html_files = {}
+
+    for filename in os.listdir(html_dir):
+        if filename in img_blacklist:
+            continue
+        if file_matches(filename, img_patterns):
+            for html_file in html_files:
+                if img_in_html(os.path.join(html_dir, html_file), filename):
+                    img_html_files[filename] = html_file
+                    # for now suppose one image per html
+
+    with open(os.path.join(html_dir, output_name), 'w') as output:
+        output.write(header1_tmpl.substitute(title="GRASS GIS %s Reference "
+                                               "Manual: Manual gallery" % grass_version))
+        output.write(header_graphical_index_tmpl)
+        output.write('<ul class="img-list">\n')
+        for image, html_file in img_html_files.iteritems():
+            name = get_module_name(html_file)
+            title = title_from_names(name, image)
+            output.write(
+                '<li>'
+                '<a href="{html}" title="{title}">'
+                '<img src="{img}">'
+                '<span class="name">{name}</span>'
+                '</a>'
+                '</li>\n'
+                .format(html=html_file, img=image, title=title, name=name))
+        output.write('</ul>')
+        write_html_footer(output, "index.html", year)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/man/build_topics.py b/man/build_topics.py
index 9a7e35f..251cfc6 100644
--- a/man/build_topics.py
+++ b/man/build_topics.py
@@ -62,6 +62,13 @@ for key, values in sorted(keywords.iteritems(), key=lambda s: s[0].lower()):
         topicsfile.writelines([moduletopics_tmpl.substitute(
             key=key, name=key.replace('_', ' '))])
     keyfile.write("</table>\n")
+    # link to the keywords index
+    # TODO: the labels in keywords index are with spaces and capitals
+    # this should be probably changed to lowercase with underscores
+    keyfile.write(
+        '<p><em>See also the corresponding keyword'
+        ' <a href="keywords.html#{key}">{key}</a>'
+        ' for additional references.</em>'.format(key=key.replace('_', ' ')))
     write_html_footer(keyfile, "index.html", year)
 topicsfile.write("</ul>\n")
 write_html_footer(topicsfile, "index.html", year)
diff --git a/man/jquery.fixedheadertable.min.js b/man/jquery.fixedheadertable.min.js
new file mode 100644
index 0000000..ec91f96
--- /dev/null
+++ b/man/jquery.fixedheadertable.min.js
@@ -0,0 +1,19 @@
+/*!
+ * jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin
+ *
+ * Copyright (c) 2013 Mark Malek
+ * http://fixedheadertable.com
+ *
+ * Licensed under MIT
+ * http://www.opensource.org/licenses/mit-license.php
+ *
+ * http://docs.jquery.com/Plugins/Authoring
+ * jQuery authoring guidelines
+ *
+ * Launch  : October 2009
+ * Version : 1.3
+ * Released: May 9th, 2011
+ *
+ *
+ * all CSS sizing (width,height) is done in pixels (px)
+ */(function(c){c.fn.fixedHeaderTable=function(m){var u={width:"100%",height:"100%",themeClass:"fht-default",borderCollapse:!0,fixedColumns:0,fixedColumn:!1,sortable:!1,autoShow:!0,footer:!1,cloneHeadToFoot:!1,autoResize:!1,create:null},b={},n={init:function(a){b=c.extend({},u,a);return this.each(function(){var a=c(this);h._isTable(a)?(n.setup.apply(this,Array.prototype.slice.call(arguments,1)),c.isFunction(b.create)&&b.create.call(this)):c.error("Invalid table mark-up")})},setup:functio [...]
diff --git a/man/parser_standard_options.css b/man/parser_standard_options.css
new file mode 100644
index 0000000..783e2d0
--- /dev/null
+++ b/man/parser_standard_options.css
@@ -0,0 +1,172 @@
+/*!
+* jquery.fixedHeaderTable. The jQuery fixedHeaderTable plugin
+*
+* Copyright (c) 2011 Mark Malek
+* http://fixedheadertable.com
+*
+* Licensed under MIT
+* http://www.opensource.org/licenses/mit-license.php
+*
+* http://docs.jquery.com/Plugins/Authoring
+* jQuery authoring guidelines
+*
+* Launch  : October 2009
+* Version : 1.3
+* Released: May 9th, 2011
+*
+*
+* all CSS sizing (width,height) is done in pixels (px)
+*/
+
+/* @group Reset */
+
+.fht-table,
+.fht-table thead,
+.fht-table tfoot,
+.fht-table tbody,
+.fht-table tr,
+.fht-table th,
+.fht-table td {
+        /* position */
+    margin: 0;
+
+    /* size */
+        padding: 0;
+
+        /* text */
+        font-size: 100%;
+        font: inherit;
+        vertical-align: top;
+        }
+
+.fht-table {
+        /* appearance */
+    border-collapse: collapse;
+    border-spacing: 0;
+        }
+
+/* @end */
+
+/* @group Content */
+
+.fht-table-wrapper,
+.fht-table-wrapper .fht-thead,
+.fht-table-wrapper .fht-tfoot,
+.fht-table-wrapper .fht-fixed-column .fht-tbody,
+.fht-table-wrapper .fht-fixed-body .fht-tbody,
+.fht-table-wrapper .fht-tbody {
+        /* appearance */
+        overflow: hidden;
+
+        /* position */
+        position: relative;
+        }
+
+        .fht-table-wrapper .fht-fixed-body .fht-tbody,
+        .fht-table-wrapper .fht-tbody {
+                /* appearance */
+            overflow: auto;
+                }
+
+                .fht-table-wrapper .fht-table .fht-cell {
+                        /* appearance */
+                        overflow: hidden;
+
+                        /* size */
+                    height: 1px;
+                        }
+
+        .fht-table-wrapper .fht-fixed-column,
+        .fht-table-wrapper .fht-fixed-body {
+            /* position */
+            top: 0;
+            left: 0;
+            position: absolute;
+            }
+
+        .fht-table-wrapper .fht-fixed-column {
+            /* position */
+            z-index: 1;
+            }
+
+/* @end */
+
+.scroolTable td, .scroolTable th {
+        /* appearance */
+        border: 1px solid #778899;
+
+        /* size */
+        padding: 5px;
+        }
+
+.scroolTable {
+        /* text */
+        font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;
+        }
+
+.scroolTable tbody tr td {
+        /* appearance */
+        background-color: rgb(100%, 100%, 100%);
+        background-image: -moz-linear-gradient(
+                top,
+                rgba(255,255,255,0.4) 0%,
+                rgba(255,255,255,0.2) 50%,
+                rgba(255,255,255,0.1) 51%,
+                rgba(255,255,255,0.0) 100%);
+
+        background-image: -webkit-gradient(
+                linear, left top, left bottom,
+                color-stop(0%,rgba(255,255,255,0.4)),
+                color-stop(50%,rgba(255,255,255,0.2)),
+                color-stop(51%,rgba(255,255,255,0.1)),
+                color-stop(100%,rgba(255,255,255,0.0)));
+
+        /* text */
+        color: #262c31;
+        font-size: 11px;
+        }
+
+.scroolTable tbody tr.odd td {
+        /* appearance */
+        background-color: #d6e0ef;
+        background-image: -moz-linear-gradient(
+                top,
+                rgba(255,255,255,0.4) 0%,
+                rgba(255,255,255,0.2) 50%,
+                rgba(255,255,255,0.1) 51%,
+                rgba(255,255,255,0.0) 100%);
+
+        background-image: -webkit-gradient(
+                linear, left top, left bottom,
+                color-stop(0%,rgba(255,255,255,0.4)),
+                color-stop(50%,rgba(255,255,255,0.2)),
+                color-stop(51%,rgba(255,255,255,0.1)),
+                color-stop(100%,rgba(255,255,255,0.0)));
+        }
+
+.scroolTable thead tr th,
+.scroolTable thead tr td,
+.scroolTable tfoot tr th,
+.scroolTable tfoot tr td {
+        /* appearance */
+        background-color: rgb(25%, 60%, 25%);
+        background-image: -moz-linear-gradient(
+                top,
+                rgba(255,255,255,0.4) 0%,
+                rgba(255,255,255,0.2) 50%,
+                rgba(255,255,255,0.1) 51%,
+                rgba(255,255,255,0.0) 100%);
+
+        background-image: -webkit-gradient(
+                linear, left top, left bottom,
+                color-stop(0%,rgba(255,255,255,0.4)),
+                color-stop(50%,rgba(255,255,255,0.2)),
+                color-stop(51%,rgba(255,255,255,0.1)),
+                color-stop(100%,rgba(255,255,255,0.0)));
+
+        /* text */
+        color: #121517;
+        font-size: 12px;
+        font-weight: bold;
+        text-shadow: 0 1px 1px #e8ebee;
+        }
diff --git a/man/parser_standard_options.js b/man/parser_standard_options.js
new file mode 100644
index 0000000..6cdab0b
--- /dev/null
+++ b/man/parser_standard_options.js
@@ -0,0 +1,4 @@
+$(document).ready(function() {
+  $('#opts_table').fixedHeaderTable({footer: false, cloneHeadToFoot: true,
+                                     fixedColumn: true});
+});
diff --git a/man/parser_standard_options.py b/man/parser_standard_options.py
new file mode 100644
index 0000000..37d5246
--- /dev/null
+++ b/man/parser_standard_options.py
@@ -0,0 +1,177 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Fri Jun 26 19:10:58 2015
+
+ at author: pietro
+"""
+from __future__ import print_function
+import argparse
+import sys
+from urllib import urlopen
+from build_html import *
+
+def parse_options(lines, startswith='Opt'):
+    def split_in_groups(lines):
+        def count_par_diff(line):
+            open_par = line.count('(')
+            close_par = line.count(')')
+            return open_par - close_par
+        res = None
+        diff = 0
+        for line in lines:
+            if line.startswith('case'):
+                optname = line.split()[1][:-1]
+                res = []
+#                if optname == 'G_OPT_R_BASENAME_INPUT':
+#                    import ipdb; ipdb.set_trace()
+            elif line == 'break;':
+                diff = 0
+                yield optname, res
+            elif line.startswith('G_'):
+                diff = count_par_diff(line)
+            elif diff > 0:
+                diff -= count_par_diff(line)
+            else:
+                res.append(line) if res is not None else None
+
+    def split_opt_line(line):
+        index = line.index('=')
+        key = line[:index].strip()
+        default = line[index + 1:].strip()
+        if default.startswith('_('):
+            default = default[2:]
+        return key, default
+
+    def parse_glines(glines):
+        res = {}
+        key = None
+        for line in glines:
+            if line.startswith('/*'):
+                continue
+            if line.startswith(startswith) and line.endswith(';'):
+                key, default = [w.strip() for w in split_opt_line(line[5:])]
+                res[key] = default
+            elif line.startswith(startswith):
+                key, default = split_opt_line(line[5:])
+                res[key] = [default, ]
+            else:
+                if key is not None:
+                    if key not in res:
+                        res[key] = []
+                    start, end = 0, -1
+                    if line.startswith('_('):
+                        start = 2
+                    if line.endswith(');'):
+                        end = -3
+                    elif line.endswith(';'):
+                        end = -2
+                    res[key].append(line[start:end])
+        # pprint(glines)
+        # pprint(res)
+        return res
+
+    def clean_value(val):
+        if isinstance(val, list):
+            val = ' '.join(val)
+        return (val.replace('"', '').replace("\'", "'").strip().strip(';')
+                ).strip().strip('_(').strip().strip(')').strip()
+
+    # with open(optionfile, mode='r') as optfile:
+    lines = [line.strip() for line in lines]
+    result = []
+    for optname, glines in split_in_groups(lines):
+        if glines:
+            res = parse_glines(glines)
+            if res:
+                for key, val in res.items():
+                    res[key] = clean_value(val)
+                result.append((optname, res))
+    return result
+
+
+class OptTable(object):
+    """"""
+    def __init__(self, list_of_dict):
+        self.options = list_of_dict
+        self.columns = sorted(set([key for _, d in self.options
+                                   for key in d.keys()]))
+
+    def csv(self, delimiter=';', endline='\n'):
+        """Return a CSV string with the options"""
+        csv = []
+        csv.append(delimiter.join(self.columns))
+        for optname, options in self.options:
+            opts = [options.get(col, '') for col in self.columns]
+            csv.append(delimiter.join([optname, ] + opts))
+        return endline.join(csv)
+
+    def html(self, endline='\n', indent='  ', toptions='border=1'):
+        """Return a HTML table with the options"""
+        html = ['<table{}>'.format(' ' + toptions if toptions else '')]
+        # write headers
+        html.append(indent + "<thead>")
+        html.append(indent + "<tr>")
+        html.append(indent * 2 + "<th>{0}</th>".format('option'))
+        for col in self.columns:
+            html.append(indent * 2 + "<th>{0}</th>".format(col))
+        html.append(indent + "</tr>")
+        html.append(indent + "</thead>")
+        html.append(indent + "<tbody>")
+        for optname, options in self.options:
+            html.append(indent + "<tr>")
+            html.append(indent * 2 + "<td>{0}</td>".format(optname))
+            for col in self.columns:
+                html.append(indent * 2 +
+                            "<td>{0}</td>".format(options.get(col, '')))
+            html.append(indent + "</tr>")
+        html.append(indent + "</tbody>")
+        html.append("</table>")
+        return endline.join(html)
+
+    def _repr_html_(self):
+        """Method used by IPython notebook"""
+        return self.html()
+
+
+if __name__ == "__main__":
+    URL = ('https://trac.osgeo.org/grass/browser/grass/'
+           'trunk/lib/gis/parser_standard_options.c?format=txt')
+    parser = argparse.ArgumentParser(description='Extract GRASS default '
+                                                 'options from link.')
+    parser.add_argument('-f', '--format', default='html', dest='format',
+                        choices=['html', 'csv', 'grass'],
+                        help='Define the output format')
+    parser.add_argument('-l', '--link', default=URL, dest='url', type=str,
+                        help='Provide the url with the file to parse')
+    parser.add_argument('-t', '--text', dest='text',
+                        type=argparse.FileType('r'),
+                        help='Provide the file to parse')
+    parser.add_argument('-o', '--output', default=sys.stdout, dest='output',
+                        type=argparse.FileType('w'),
+                        help='Provide the url with the file to parse')
+    parser.add_argument('-s', '--starts-with', default='Opt',
+                        dest='startswith', type=str,
+                        help='Extract only the options that starts with this')
+    parser.add_argument('-p', '--html_params', default='border=1', type=str,
+                        dest='htmlparmas', help="Options for the HTML table")
+    args = parser.parse_args()
+
+    cfile = args.text if args.text else urlopen(args.url, proxies=None)
+
+    options = OptTable(parse_options(cfile.readlines(),
+                                     startswith=args.startswith))
+    outform = args.format
+    if outform in ['csv', 'html']:
+        print(getattr(options, outform)(), file=args.output)
+        args.output.close()
+    else:
+        year = os.getenv("VERSION_DATE")
+        name = args.output.name
+        args.output.close()
+        topicsfile = open(name, 'w')
+        topicsfile.write(header1_tmpl.substitute(title="GRASS GIS " \
+                        "%s Reference Manual: Parser standard options index" % grass_version))
+        topicsfile.write(headerpso_tmpl)
+        topicsfile.write(options.html(toptions=args.htmlparmas))
+        write_html_footer(topicsfile, "index.html", year)
+        topicsfile.close()
diff --git a/man/sphinx/conf.py b/man/sphinx/conf.py
index baf0873..ffd2da5 100644
--- a/man/sphinx/conf.py
+++ b/man/sphinx/conf.py
@@ -40,15 +40,15 @@ source_suffix = '.txt'
 master_doc = 'index'
 
 # General information about the project.
-project = u'GRASS 7.0 Documentation'
-copyright = u'2012, GRASS Development Team'
+project = u'GRASS 7.2 Documentation'
+copyright = u'2016, GRASS Development Team'
 
 # The version info for the project you're documenting, acts as replacement for
 # |version| and |release|, also used in various other places throughout the
 # built documents.
 #
 # The short X.Y version.
-version = '7.0'
+version = '7.2'
 # The full version, including alpha/beta/rc tags.
 release = 'svn'
 
@@ -183,7 +183,7 @@ latex_elements = {
 # Grouping the document tree into LaTeX files. List of tuples
 # (source start file, target name, title, author, documentclass [howto/manual]).
 latex_documents = [
-  ('content', 'GRASS70Documentation.tex', u'GRASS 7.0 Documentation Documentation',
+  ('content', 'GRASS72Documentation.tex', u'GRASS 7.2 Documentation Documentation',
    u'GRASS Development Team', 'manual'),
 ]
 
@@ -213,7 +213,7 @@ latex_documents = [
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
-    ('content', 'grass70documentation', u'GRASS 7.0 Documentation Documentation',
+    ('content', 'grass72documentation', u'GRASS 7.2 Documentation Documentation',
      [u'GRASS Development Team'], 1)
 ]
 
@@ -227,7 +227,7 @@ man_pages = [
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-  ('content', 'GRASS70Documentation', u'GRASS 7.0 Documentation Documentation',
+  ('content', 'GRASS72Documentation', u'GRASS 7.2 Documentation Documentation',
    u'GRASS Development Team', 'GRASS70Documentation', 'One line description of project.',
    'Miscellaneous'),
 ]
@@ -245,7 +245,7 @@ texinfo_documents = [
 # -- Options for Epub output ---------------------------------------------------
 
 # Bibliographic Dublin Core info.
-epub_title = u'GRASS 7.0 Documentation'
+epub_title = u'GRASS 7.2 Documentation'
 epub_author = u'GRASS Development Team'
 epub_publisher = u'GRASS Development Team'
 epub_copyright = u'2012, GRASS Development Team'
diff --git a/misc/m.cogo/m.cogo.html b/misc/m.cogo/m.cogo.html
index c04e764..d888be6 100644
--- a/misc/m.cogo/m.cogo.html
+++ b/misc/m.cogo/m.cogo.html
@@ -157,4 +157,4 @@ Use <tt>tool=snap</tt> and <tt>thresh=0.0001</tt>, or some small value.
 Eric G. Miller
 
 <p>
-<i>Last changed: $Date: 2014-12-09 19:46:50 +0100 (Tue, 09 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-09 19:39:37 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/misc/m.nviz.image/m.nviz.image.html b/misc/m.nviz.image/m.nviz.image.html
index cd0efac..16dbdcc 100644
--- a/misc/m.nviz.image/m.nviz.image.html
+++ b/misc/m.nviz.image/m.nviz.image.html
@@ -31,4 +31,4 @@ Summer of Code 2010</a> (mentor: Helena Mitasova)<br>
 Anna Kratochvilova, <a href="http://grasswiki.osgeo.org/wiki/WxNviz_GSoC_2011">Google
 Summer of Code 2011</a> (mentor: Martin Landa)
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/misc/m.nviz.script/m.nviz.script.html b/misc/m.nviz.script/m.nviz.script.html
index 40c6668..14c5109 100644
--- a/misc/m.nviz.script/m.nviz.script.html
+++ b/misc/m.nviz.script/m.nviz.script.html
@@ -132,4 +132,4 @@ and can then be edited there.
 <h2>AUTHOR</h2>
 
 <a href="mailto:bcovill at tekmap.ns.ca">Bob Covill</a>
-<p><i>Last changed: $Date: 2016-08-23 14:48:11 +0200 (Tue, 23 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-23 14:47:27 +0200 (Tue, 23 Aug 2016) $</i>
diff --git a/misc/m.transform/m.transform.html b/misc/m.transform/m.transform.html
index 5cf7a75..0194888 100644
--- a/misc/m.transform/m.transform.html
+++ b/misc/m.transform/m.transform.html
@@ -64,4 +64,4 @@ Brian J. Buckley<br>
 Glynn Clements<br>
 Hamish Bowman
 
-<p><i>Last changed: $Date: 2014-11-28 16:46:08 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 16:43:22 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/mswindows/GRASS-Installer.nsi.tmpl b/mswindows/GRASS-Installer.nsi.tmpl
index 9da94bc..6b2dfcc 100644
--- a/mswindows/GRASS-Installer.nsi.tmpl
+++ b/mswindows/GRASS-Installer.nsi.tmpl
@@ -3,7 +3,7 @@
 ;GRASS GIS Installer for Windows
 ;Written by Marco Pasetti
 ;Updated for OSGeo4W by Colin Nielsen, Helmut Kudrnovsky, and Martin Landa
-;Last Update: $Id: GRASS-Installer.nsi.tmpl 67182 2015-12-16 17:38:32Z martinl $
+;Last Update: $Id: GRASS-Installer.nsi.tmpl 68578 2016-06-02 15:52:57Z martinl $
 ;Mail to: grass-dev at lists.osgeo.org 
 
 ;----------------------------------------------------------------------------------------------------------------------------
@@ -72,8 +72,8 @@ SetCompressorDictSize 128
 	!define DISPLAYED_NAME "GRASS GIS ${VERSION_NUMBER}-${BINARY_REVISION} (${PLATFORM})"
 	!define CHECK_INSTALL_NAME "GRASS GIS @GRASS_VERSION_MAJOR@@GRASS_VERSION_MINOR@"
 !else
-	!define INSTALLER_NAME "WinGRASS-${VERSION_NUMBER}-r${SVN_REVISION}-${BINARY_REVISION}-Setup-${PLATFORM}.exe"
-	!define DISPLAYED_NAME "GRASS GIS ${VERSION_NUMBER}-r${SVN_REVISION}-${BINARY_REVISION} (${PLATFORM})"
+	!define INSTALLER_NAME "WinGRASS-${VERSION_NUMBER}-${SVN_REVISION}-${BINARY_REVISION}-Setup-${PLATFORM}.exe"
+	!define DISPLAYED_NAME "GRASS GIS ${VERSION_NUMBER}-${SVN_REVISION}-${BINARY_REVISION} (${PLATFORM})"
 	!define CHECK_INSTALL_NAME "GRASS GIS @GRASS_VERSION_MAJOR@@GRASS_VERSION_MINOR@ SVN"
 !endif
 
@@ -636,7 +636,7 @@ Section "GRASS" SecGRASS
 		"DisplayVersion" "${VERSION_NUMBER}-${BINARY_REVISION}"
 	!else
 		WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GRASS_BASE}"\
-		"DisplayVersion" "${VERSION_NUMBER}-r${SVN_REVISION}-${BINARY_REVISION}"
+		"DisplayVersion" "${VERSION_NUMBER}-${SVN_REVISION}-${BINARY_REVISION}"
 	!endif
 	
 	WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\${GRASS_BASE}" "DisplayIcon" "$INSTALL_DIR\gui\icons\grass.ico"
diff --git a/mswindows/GRASS-Packager.bat.tmpl b/mswindows/GRASS-Packager.bat.tmpl
index b8b9078..2b546a1 100644
--- a/mswindows/GRASS-Packager.bat.tmpl
+++ b/mswindows/GRASS-Packager.bat.tmpl
@@ -3,7 +3,7 @@ rem Self Contained GRASS Automated Packager
 rem -----------------------------------------------------------------------------------------------------------------------
 rem Edited by: Marco Pasetti
 rem Revised for OSGeo4W by: Colin Nielsen, Helmut Kudrnovsky, and Martin Landa
-rem Last Update: $Id: GRASS-Packager.bat.tmpl 67549 2016-01-11 12:41:54Z martinl $
+rem Last Update: $Id: GRASS-Packager.bat.tmpl 67543 2016-01-10 20:42:09Z martinl $
 rem -----------------------------------------------------------------------------------------------------------------------
 
 @echo off
diff --git a/mswindows/Installer-Files/WinGRASS-README.url b/mswindows/Installer-Files/WinGRASS-README.url
index d1b68cb..45f534d 100644
--- a/mswindows/Installer-Files/WinGRASS-README.url
+++ b/mswindows/Installer-Files/WinGRASS-README.url
@@ -1,5 +1,5 @@
 [InternetShortcut]
-URL=http://grass.osgeo.org/grass70/binary/mswindows/native/README.html
+URL=http://grass.osgeo.org/grass72/binary/mswindows/native/README.html
 IDList=
 IconFile=http://grass.osgeo.org/favicon.ico
 IconIndex=1
diff --git a/mswindows/Makefile b/mswindows/Makefile
index bc5e611..fccc359 100644
--- a/mswindows/Makefile
+++ b/mswindows/Makefile
@@ -1,11 +1,14 @@
 MODULE_TOPDIR = ..
 
-include $(MODULE_TOPDIR)/include/Make/Other.make
+SUBDIRS = \
+	osgeo4w
+
+include $(MODULE_TOPDIR)/include/Make/Dir.make
 
 EXTRA_CLEAN_FILES = GRASS-Packager.bat GRASS-Installer.nsi
 
 ifneq ($(MINGW),)
-default: GRASS-Packager.bat GRASS-Installer.nsi
+default: GRASS-Packager.bat GRASS-Installer.nsi parsubdirs
 else
 default:
 endif	
diff --git a/mswindows/osgeo4w/Makefile b/mswindows/osgeo4w/Makefile
new file mode 100644
index 0000000..85b8eeb
--- /dev/null
+++ b/mswindows/osgeo4w/Makefile
@@ -0,0 +1,16 @@
+MODULE_TOPDIR = ../..
+
+include $(MODULE_TOPDIR)/include/Make/Other.make
+
+EXTRA_CLEAN_FILES = setup.hint
+
+ifneq ($(MINGW),)
+default: setup.hint
+else
+default:
+endif
+
+setup.hint: setup.hint.tmpl
+	sed \
+	-e 's#@GRASS_VERSION_NUMBER@#$(GRASS_VERSION_NUMBER)#' \
+	$< > $@
diff --git a/mswindows/osgeo4w/package.sh b/mswindows/osgeo4w/package.sh
index 7f80b2c..c8eaa07 100755
--- a/mswindows/osgeo4w/package.sh
+++ b/mswindows/osgeo4w/package.sh
@@ -183,8 +183,9 @@ if ! [ -f mswindows/osgeo4w/configure-stamp ]; then
 		--with-odbc \
 	        --with-cairo \
                 --with-postgres \
-	        --with-opengl=windows
-        
+	        --with-opengl=windows \
+                --with-bzlib
+	
 	touch mswindows/osgeo4w/configure-stamp
 fi
 
diff --git a/mswindows/osgeo4w/setup.hint b/mswindows/osgeo4w/setup.hint
deleted file mode 100644
index c981edb..0000000
--- a/mswindows/osgeo4w/setup.hint
+++ /dev/null
@@ -1,7 +0,0 @@
-sdesc: "GRASS GIS - stable release"
-ldesc: "Geographic Resources Analysis Support System (GRASS GIS) - stable release"
-category: Desktop
-requires: liblas avce00 gpsbabel gs gdal-python matplotlib msvcrt iconv libtiff gdal proj freetype-mingw pdcurses zlib fftw libpng wxpython python-numpy python-pil pyopengl cairo psycopg2
-maintainer: MartinLanda
-curr: 7.0.5-1
-prev: 7.0.4-1
diff --git a/mswindows/osgeo4w/setup.hint.tmpl b/mswindows/osgeo4w/setup.hint.tmpl
new file mode 100644
index 0000000..937e88b
--- /dev/null
+++ b/mswindows/osgeo4w/setup.hint.tmpl
@@ -0,0 +1,7 @@
+sdesc: "GRASS GIS - daily builds of development version"
+ldesc: "Geographic Resources Analysis Support System (GRASS GIS) - daily builds of SVN release branch"
+category: Desktop
+requires: liblas avce00 gpsbabel gs gdal-python matplotlib msvcrt iconv libtiff gdal proj freetype-mingw pdcurses zlib fftw libpng wxpython python-numpy python-pil pyopengl cairo psycopg2
+maintainer: MartinLanda
+test: @GRASS_VERSION_NUMBER at -1
+prev: @GRASS_VERSION_NUMBER at -1
diff --git a/ps/ps.map/ps.map.html b/ps/ps.map/ps.map.html
index 3951ab9..dd5c56e 100644
--- a/ps/ps.map/ps.map.html
+++ b/ps/ps.map/ps.map.html
@@ -1483,107 +1483,139 @@ USAGE:	<b>end</b>
 
 The following are examples of <em>ps.map</em> script files.
 <p><h3>Simple example</h3>
-The file has been named <em>spear.basic</em>:
+The file has been named <em>simple_map.txt</em>:
 
 <div class="code"><pre>
-# this ps.map example draws a map of Spearfish, SD
-<b>raster</b> elevation.dem
-<b>header</b>
-  <b>end</b>
-<b>vlines</b> roads
-  <b>color</b> brown
+<i># this ps.map example draws a map of Wake county, NC</i>
+<b>raster</b> elevation
+<b>vlines</b> roadsmajor
+  <b>color</b> 30:144:255
+  <b>width</b> 2
   <b>end</b>
+<b>text</b> 50% 105% Wake County Terrain and Roads
+   <b>size</b> 550
+   <b>end</b>
 <b>end</b>
 </pre></div>
 
 Generate map as Postsript file:
 <div class="code"><pre>
- ps.map input=spear.basic output=spear_basic.ps
+ps.map input=simple_map.txt output=simple_map.ps
 </pre></div>
 
+<center>
+<img src=ps_map_basic.png>
+<p><em>Figure: Result of for the a simple Wake county terrain and roads example</em></p>
+</center>
 
 <h3>More complicated example</h3>
-The file has been named <em>spear.soils</em>:
+
+The following is content of a file named <em>elevation_map.txt</em>:
+
+<!--
+regular expression for syntax highlight
+(replace spaces around bs by gt and lt)
+^( *)([a-z]+)([ ]|$)
+\1 b \2 /b \3
+-->
 
 <div class="code"><pre>
-# this ps.map example draws a map of Spearfish, SD
-<b>raster</b> soils
-<b>outline</b>
-   <b>color</b> black
-   <b>width</b> 1
-   <b>end</b>
-<b>comments</b> soil.cmt
-   <b>where</b> 1 6
-   <b>font</b> Helvetica
-   <b>end</b>
+<i># this ps.map example draws a map of Wake county, NC</i>
+<b>raster</b> elevation
 <b>colortable</b> y
-   <b>where</b> 1 6.5
-   <b>cols</b> 4
-   <b>width</b> 4
-   <b>font</b> Helvetica
-   <b>end</b>
+  <b>where</b> 1 6.0
+  <b>cols</b> 4
+  <b>width</b> 4
+  <b>font</b> Helvetica
+  <b>end</b>
 <b>setcolor</b> 6,8,9 white
 <b>setcolor</b> 10 green
-<b>vlines</b> roads
-   <b>width</b> 2
-   <b>style</b> 0111
-   <b>color</b> grey
-   <b>masked</b> n
-   <b>end</b>
+<b>vlines</b> streams
+  <b>width</b> 0.1
+  <b>color</b> blue
+  <b>masked</b> n
+  <b>label</b> streams
+  <b>end</b>
+<b>vlines</b> roadsmajor
+  <b>width</b> 1.5
+  <b>style</b> 1111
+  <b>color</b> grey
+  <b>masked</b> n
+  <b>label</b> major roads
+  <b>end</b>
 <b>vlegend</b>
-   <b>where</b> 4.5 0
-   <b>font</b> Courier
-   <b>fontsize</b> 8
-   <b>end</b>
-<b>text</b> 30% 100% SPEARFISH SOILS MAP
-   <b>color</b> red
-   <b>width</b> 1
-   <b>hcolor</b> black
-   <b>hwidth</b> 1
-   <b>background</b> white
-   <b>border</b> red
-   <b>size</b> 500
-   <b>ref</b> lower left
-   <b>end</b>
-<b>line</b> 606969.73 3423092.91 616969.73 3423092.91
-   <b>color</b> yellow
-   <b>width</b> 2
-   <b>end</b>
-<b>point</b> 40% 60%
-   <b>color</b> purple
-   <b>symbol</b> basic/diamond
-   <b>size</b> 25
-   <b>masked</b> n
-   <b>end</b>
+  <b>where</b> 4.5 0
+  <b>font</b> Courier
+  <b>fontsize</b> 8
+  <b>end</b>
+<b>text</b> 30% 100% Wake County Terrain
+  <b>color</b> black
+  <b>width</b> 1
+  <b>background</b> white
+  <b>size</b> 550
+  <b>ref</b> lower left
+  <b>end</b>
+<b>text</b> 92% -25% meters
+  <b>color</b> black
+  <b>width</b> 1
+  <b>background</b> white
+  <b>size</b> 550
+  <b>ref</b> lower left
+  <b>end</b>
 <b>scale</b> 1:125000
 <b>scalebar</b> f
-   <b>where</b> 4.5 6.5
-   <b>length</b> 5000
-   <b>height</b> 0.05
-   <b>segment</b> 5
-   <b>numbers</b> 5
-   <b>end</b>
+  <b>where</b> 1.5 5.5
+  <b>length</b> 5000
+  <b>height</b> 0.05
+  <b>segment</b> 5
+  <b>numbers</b> 5
+  <b>end</b>
 <b>geogrid</b> 60 s
-   <b>color</b> blue
-   <b>numbers</b> 2 yellow
-   <b>end</b>
+  <b>color</b> gray
+  <b>numbers</b> 2 black
+  <b>end</b>
 <b>paper</b> a4
-    <b>end</b>
+   <b>end</b>
 <b>end</b>
 </pre></div>
 
 This script file can be entered at the command line:
 
 <div class="code"><pre>
- # First set the region
- g.region raster=soils
-
- # Generate comment file (or use text editor)
- echo "Spearfish (SD) soils" > soil.cmt
-
- # Generate map as Postsript file
- ps.map input=spear.soils output=soils.ps
-</pre></div>
+# First set the region
+g.region raster=elevation
+
+# Generate map as Postsript file
+ps.map input=elevation_map.txt output=elevation.ps
+</pre></div>
+
+<center>
+<img src=ps_map.png>
+<p><em>Figure: Result of for the more complicated Wake county, NC example</em></p>
+</center>
+
+<!--
+todos according to things which were in the Spearfish example
+TODO: now we have no example which would contain comment:
+# Generate comment file (or use text editor)
+echo "Spearfish (SD) soils" > soil.cmt
+TODO: now we have no example with point and line
+line 606969.73 3423092.91 616969.73 3423092.91
+   color yellow
+   width 2
+   end
+point 40% 60%
+   color purple
+   symbol basic/diamond
+   size 25
+   masked n
+   end
+TODO: example with outline
+outline
+   color black
+   width 1
+   end
+-->
 
 <p>More examples can be found on the
 <a href="http://grasswiki.osgeo.org/wiki/Ps.map_scripts">GRASS Wiki</a>
@@ -1603,12 +1635,14 @@ help site.
 
 <h2>SEE ALSO</h2>
 <em>
+<a href="g.gui.psmap.html">g.gui.psmap</a>,
 <a href="g.region.html">g.region</a>,
-<a href="v.label.html">v.label</a>
+<a href="v.label.html">v.label</a>,
+<a href="wxGUI.html">wxGUI</a>,
 </em>
 
 <h2>AUTHOR</h2>
 
 Paul Carlson, USDA, SCS, NHQ-CGIS<br>
 Modifications: Radim Blazek, Glynn Clements, Bob Covill, Hamish Bowman
-<p><i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/ps/ps.map/ps_map.png b/ps/ps.map/ps_map.png
new file mode 100644
index 0000000..faa08ed
Binary files /dev/null and b/ps/ps.map/ps_map.png differ
diff --git a/ps/ps.map/ps_map_basic.png b/ps/ps.map/ps_map_basic.png
new file mode 100644
index 0000000..3eda1a9
Binary files /dev/null and b/ps/ps.map/ps_map_basic.png differ
diff --git a/raster/r.basins.fill/r.basins.fill.html b/raster/r.basins.fill/r.basins.fill.html
index d7e2833..2b064ae 100644
--- a/raster/r.basins.fill/r.basins.fill.html
+++ b/raster/r.basins.fill/r.basins.fill.html
@@ -53,4 +53,4 @@ Pennsylvania State University
 <br>
 Larry Band, Dept. of Geography, University of Toronto, Canada 
 
-<p><i>Last changed: $Date: 2014-04-11 17:48:44 +0200 (Fri, 11 Apr 2014) $</i>
+<p><i>Last changed: $Date: 2014-04-11 17:46:13 +0200 (Fri, 11 Apr 2014) $</i>
diff --git a/raster/r.buffer/r.buffer.html b/raster/r.buffer/r.buffer.html
index e5c7aba..79e3ee2 100644
--- a/raster/r.buffer/r.buffer.html
+++ b/raster/r.buffer/r.buffer.html
@@ -129,4 +129,4 @@ James Westervelt, U.S. Army Construction Engineering
 Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2016-01-21 12:10:49 +0100 (Thu, 21 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-21 12:10:11 +0100 (Thu, 21 Jan 2016) $</i>
diff --git a/raster/r.carve/r.carve.html b/raster/r.carve/r.carve.html
index aee9438..3c56e7d 100644
--- a/raster/r.carve/r.carve.html
+++ b/raster/r.carve/r.carve.html
@@ -50,4 +50,4 @@ M.  Johnston, GMSL (Report for CERL 1999)
 Bill Brown (GMSL)<br>
 GRASS 6 update: Brad Douglas
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/raster/r.category/r.category.html b/raster/r.category/r.category.html
index 83f4e3c..759b365 100644
--- a/raster/r.category/r.category.html
+++ b/raster/r.category/r.category.html
@@ -173,4 +173,4 @@ UNIX Manual entries for <i>awk</i> and <i>sort</i>
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory<br>
 Hamish Bowman, University of Otago, New Zealand (label creation options)
 
-<p><i>Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/raster/r.circle/r.circle.html b/raster/r.circle/r.circle.html
index 77ce2e0..85483a8 100644
--- a/raster/r.circle/r.circle.html
+++ b/raster/r.circle/r.circle.html
@@ -50,4 +50,4 @@ r.circle -b output=circle coordinate=${EASTCENTER},${NORTHCENTER} min=500 max=10
 Bill Brown, U.S. Army Construction Engineering Research Laboratory<br>
 Additional flag/min/max parameter by Markus Neteler, University of Hannover
 
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/raster/r.clump/main.c b/raster/r.clump/main.c
index 9328a41..4fa77c2 100644
--- a/raster/r.clump/main.c
+++ b/raster/r.clump/main.c
@@ -76,6 +76,9 @@ int main(int argc, char *argv[])
     flag_print->key = 'g';
     flag_print->label = _("Print only the number of clumps in shell script style");
 
+    G_option_exclusive(flag_print, opt_out, NULL);
+    G_option_required(flag_print, opt_out, NULL);
+
     /* parse options */
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
diff --git a/raster/r.clump/r.clump.html b/raster/r.clump/r.clump.html
index 8d17453..88af649 100644
--- a/raster/r.clump/r.clump.html
+++ b/raster/r.clump/r.clump.html
@@ -73,4 +73,4 @@ Laboratory<br>
 Markus Metz (diagonal clump tracing)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.coin/r.coin.html b/raster/r.coin/r.coin.html
index 5ed9097..a6f2a68 100644
--- a/raster/r.coin/r.coin.html
+++ b/raster/r.coin/r.coin.html
@@ -203,4 +203,4 @@ Michael O'Shea,
 Michael Shapiro, <br>
 U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-28 16:45:01 +0100 (Sun, 28 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-28 16:42:58 +0100 (Sun, 28 Dec 2014) $</i>
diff --git a/raster/r.colors.out/r.colors.out.html b/raster/r.colors.out/r.colors.out.html
index 666d57e..1c4bac3 100644
--- a/raster/r.colors.out/r.colors.out.html
+++ b/raster/r.colors.out/r.colors.out.html
@@ -20,4 +20,4 @@ r.colors map=el_D783_6m rules=rules.txt
 <h2>AUTHOR</h2>
 Glynn Clements
 
-<p><i>Last changed: $Date: 2011-11-08 22:24:20 +0100 (Tue, 08 Nov 2011) $</i>
+<p><i>Last changed: $Date: 2011-11-08 13:24:20 -0800 (Tue, 08 Nov 2011) $</i>
diff --git a/raster/r.colors.out/r3.colors.out.html b/raster/r.colors.out/r3.colors.out.html
index 396a7c2..ae50da8 100644
--- a/raster/r.colors.out/r3.colors.out.html
+++ b/raster/r.colors.out/r3.colors.out.html
@@ -25,4 +25,4 @@ r3.colors map=volume_2 rules=rules.txt
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2014-12-09 19:46:50 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 19:39:37 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/raster/r.colors/r.colors.html b/raster/r.colors/r.colors.html
index fb123d8..5bc8e97 100644
--- a/raster/r.colors/r.colors.html
+++ b/raster/r.colors/r.colors.html
@@ -310,4 +310,4 @@ help people select good color schemes for maps and other graphics.
 Michael Shapiro and David Johnson<br>
 Support for 3D rasters by Soeren Gebbert
 
-<p><i>Last changed: $Date: 2014-12-24 11:56:44 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-24 11:53:28 +0100 (Wed, 24 Dec 2014) $</i>
diff --git a/raster/r.colors/r3.colors.html b/raster/r.colors/r3.colors.html
index de82093..4e887f1 100644
--- a/raster/r.colors/r3.colors.html
+++ b/raster/r.colors/r3.colors.html
@@ -33,4 +33,4 @@ Michael Shapiro and David Johnson
 <br>
 Support for 3D rasters by Soeren Gebbert
 
-<p><i>Last changed: $Date: 2014-12-09 19:46:50 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 19:39:37 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/raster/r.composite/r.composite.html b/raster/r.composite/r.composite.html
index 76e26a7..cc9ab3e 100644
--- a/raster/r.composite/r.composite.html
+++ b/raster/r.composite/r.composite.html
@@ -54,4 +54,4 @@ r.composite -d red=elevation.r green=elevation.g blue=elevation.b \
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2014-12-28 16:45:01 +0100 (Sun, 28 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-28 16:42:58 +0100 (Sun, 28 Dec 2014) $</i>
diff --git a/raster/r.compress/main.c b/raster/r.compress/main.c
index b43dc06..0ed4963 100644
--- a/raster/r.compress/main.c
+++ b/raster/r.compress/main.c
@@ -22,7 +22,7 @@
  *
  * RLE:
  *  - Array of addresses pointing to the internal start of each row
- *    First byte of each row is the nuber of bytes per cell for that row
+ *    First byte of each row is the number of bytes per cell for that row
  *    Remainder of the row is a series of byte groups that describe the data:
  *        First byte: number of cells that contain the category given by second
  *        Next byte(s): category number. The number of bytes is determined
@@ -30,7 +30,7 @@
  *
  * The normal G_open_cell(), and Rast_put_row() do the compression
  * This program must only check that the file is not a reclass file and
- * is not already compressed.
+ * is not a GDAL-linked map.
  *
  * The only trick is to preserve the support files
  *
@@ -38,15 +38,15 @@
 
 #include <stdlib.h>
 #include <limits.h>
+#include <string.h>
 #include <sys/types.h>
 #include <unistd.h>
 #include <grass/gis.h>
 #include <grass/raster.h>
 #include <grass/glocale.h>
 
-static off_t newsize, oldsize;
 static int process(char *, int);
-static int pprint(char *, int);
+static int pprint(char *);
 static int doit(char *, int, RASTER_MAP_TYPE);
 
 int main(int argc, char *argv[])
@@ -66,12 +66,7 @@ int main(int argc, char *argv[])
     G_add_keyword(_("compression"));
     module->description = _("Compresses and decompresses raster maps.");
 
-    map = G_define_option();
-    map->key = "map";
-    map->type = TYPE_STRING;
-    map->required = YES;
-    map->gisprompt = "old,cell,raster";
-    map->multiple = YES;
+    map = G_define_standard_option(G_OPT_R_MAPS);
     map->description = _("Name of existing raster map(s)");
 
     uncompress = G_define_flag();
@@ -85,16 +80,16 @@ int main(int argc, char *argv[])
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
-    if(pflag->answer) {
+    if (pflag->answer) {
         for (n = 0; (name = map->answers[n]); n++)
-            pprint(name, pflag->answer);
+            pprint(name);
         exit(EXIT_SUCCESS);
     }
 
-    stat = 0;
+    stat = EXIT_FAILURE;
     for (n = 0; (name = map->answers[n]); n++)
 	if (process(name, uncompress->answer))
-	    stat = 1;
+	    stat = EXIT_SUCCESS;
     exit(stat);
 }
 
@@ -108,13 +103,21 @@ static int process(char *name, int uncompress)
     int colr_ok;
     int hist_ok;
     int cats_ok;
-    int quant_ok=0;
-    off_t diff;
+    int quant_ok = 0;
+    off_t newsize, oldsize, diff;
     RASTER_MAP_TYPE map_type;
     char rname[GNAME_MAX], rmapset[GMAPSET_MAX];
+    const char *mapset;
+    int data_fd;
+    char *sizestr;
 
-    if (G_find_raster(name, G_mapset()) == NULL) {
-	G_warning(_("Raster map <%s> not found"), name);
+    mapset = G_find_raster(name, G_mapset());
+    if (mapset == NULL) {
+        G_warning(_("Raster map <%s> not found"), name);
+        return 1;
+    }
+    if (strcmp(mapset, G_mapset())) {
+	G_warning(_("Raster map <%s> is not in the current mapset"), name);
 	return 1;
     }
     if (Rast_is_reclass(name, G_mapset(), rname, rmapset) > 0) {
@@ -133,7 +136,6 @@ static int process(char *name, int uncompress)
 
     map_type = Rast_map_type(name, G_mapset());
 
-    G_suppress_warnings(1);
     colr_ok = Rast_read_colors(name, G_mapset(), &colr) > 0;
     hist_ok = Rast_read_history(name, G_mapset(), &hist) >= 0;
     cats_ok = Rast_read_cats(name, G_mapset(), &cats) >= 0;
@@ -142,7 +144,14 @@ static int process(char *name, int uncompress)
 	Rast_quant_init(&quant);
 	quant_ok = Rast_read_quant(name, G_mapset(), &quant);
 	G_suppress_warnings(0);
+
+	data_fd = G_open_old("fcell", name, G_mapset());
     }
+    else
+	data_fd = G_open_old("cell", name, G_mapset());
+
+    oldsize = lseek(data_fd, (off_t) 0, SEEK_END);
+    close(data_fd);
 
     if (doit(name, uncompress, map_type))
 	return 1;
@@ -161,6 +170,32 @@ static int process(char *name, int uncompress)
     if (map_type != CELL_TYPE && quant_ok)
 	Rast_write_quant(name, G_mapset(), &quant);
 
+    if (map_type != CELL_TYPE) {
+	data_fd = G_open_old("fcell", name, G_mapset());
+    }
+    else
+	data_fd = G_open_old("cell", name, G_mapset());
+
+    newsize = lseek(data_fd, (off_t) 0, SEEK_END);
+    close(data_fd);
+
+    sizestr = "bytes";
+    if (newsize > 100 * 1024 && oldsize > 100 * 1024) {
+	newsize /= 1024;
+	oldsize /= 1024;
+	sizestr = "KB";
+    }
+    if (newsize > 100 * 1024 && oldsize > 100 * 1024) {
+	newsize /= 1024;
+	oldsize /= 1024;
+	sizestr = "MB";
+    }
+    if (newsize > 100 * 1024 && oldsize > 100 * 1024) {
+	newsize /= 1024;
+	oldsize /= 1024;
+	sizestr = "GB";
+    }
+
     diff = newsize - oldsize;
     if (diff < 0)
 	diff = -diff;
@@ -169,16 +204,16 @@ static int process(char *name, int uncompress)
 
     if (newsize < oldsize)
 	G_message(uncompress
-		  ? _("DONE: uncompressed file is %lu bytes smaller")
-		  : _("DONE: compressed file is %lu bytes smaller"),
-		  (unsigned long)diff);
+		  ? _("DONE: uncompressed file is %lu %s (%.2f%) smaller")
+		  : _("DONE: compressed file is %lu %s (%.2f%) smaller"),
+		  (unsigned long)diff, sizestr, (double) 100.0 - 100.0 * newsize / oldsize);
     else if (newsize > oldsize)
 	G_message(uncompress
-		  ? _("DONE: uncompressed file is %lu bytes bigger")
-		  : _("DONE: compressed file is %lu bytes bigger"),
-		  (unsigned long)diff);
+		  ? _("DONE: uncompressed file is %lu %s (%.2f%) larger")
+		  : _("DONE: compressed file is %lu %s (%.2f%) larger"),
+		  (unsigned long)diff, sizestr, (double) 100.0 * newsize / oldsize - 100.0);
     else
-	G_message("same size");
+	G_message(_("same size"));
 
     return 0;
 }
@@ -192,17 +227,25 @@ static int doit(char *name, int uncompress, RASTER_MAP_TYPE map_type)
     Rast_get_cellhd(name, G_mapset(), &cellhd);
 
     /* check if already compressed/decompressed */
-    if (uncompress && cellhd.compressed == 0) {
-	G_warning(_("<%s> already uncompressed"), name);
-	return 1;
+    if (uncompress) {
+	if (cellhd.compressed == 0) {
+	    G_warning(_("<%s> already uncompressed"), name);
+	    return 1;
+	}
+	G_verbose_message(_("Uncompressing <%s>"), name);
     }
-    else if (!uncompress && cellhd.compressed > 0) {
-	G_warning(_("<%s> already compressed"), name);
-	return 1;
+    else /* uncompress == 0 */ {
+	if (cellhd.compressed > 0) {
+	    /*
+	    G_warning(_("[%s] already compressed"), name);
+	    return 1;
+	    */
+	    G_message(_("Re-compressing <%s>"), name);
+	}
+	else
+	    G_message(_("Compressing <%s>"), name);
     }
 
-    G_message(_("\n%sCOMPRESS <%s>"), uncompress ? "UN" : "", name);
-
     Rast_set_window(&cellhd);
 
     old = Rast_open_old(name, G_mapset());
@@ -223,8 +266,6 @@ static int doit(char *name, int uncompress, RASTER_MAP_TYPE map_type)
     nrows = Rast_window_rows();
     rast = Rast_allocate_buf(map_type);
 
-    oldsize = lseek(old, (off_t) 0, SEEK_END);
-
     /* the null file is written automatically */
     for (row = 0; row < nrows; row++) {
 	G_percent(row, nrows, 2);
@@ -238,60 +279,60 @@ static int doit(char *name, int uncompress, RASTER_MAP_TYPE map_type)
 	return 1;
     }
     Rast_close(new);
-    newsize = 0;
-    old = Rast_open_old(name, G_mapset());
-    newsize = lseek(old, (off_t) 0, SEEK_END);
-    Rast_close(old);
+
     return 0;
 }
 
 
-static int pprint(char *name, int printstyle)
+static int pprint(char *name)
 {
     struct Cell_head cellhd;
     char rname[GNAME_MAX], rmapset[GMAPSET_MAX];
-    int done;
+    const char *mapset;
     RASTER_MAP_TYPE map_type;
 
-    if (G_find_raster(name, G_mapset()) == NULL) {
+    mapset = G_find_raster(name, G_mapset());
+    if (mapset == NULL) {
         G_warning(_("Raster map <%s> not found"), name);
         return 1;
     }
+    if (strcmp(mapset, G_mapset())) {
+	G_warning(_("Raster map <%s> is not in the current mapset"), name);
+	return 1;
+    }
     if (G_find_file2_misc("cell_misc", "gdal", name, G_mapset())) {
         G_message(_("<%s> is a GDAL-linked map"), name);
         return 1;
     }
-
-    Rast_get_cellhd(name, G_mapset(), &cellhd);
-    map_type = Rast_map_type(name, G_mapset());
-
-    done = 0;
     if (Rast_is_reclass(name, G_mapset(), rname, rmapset) > 0) {
         G_message(_("<%s> is a reclass file of map <%s> in mapset <%s>"),
                   name, rname, rmapset);
-        done = 1;
+        return 1;
     }
 
-    if (G_find_file2_misc("cell_misc", "gdal", name, G_mapset())) {
-        G_message(_("<%s> is a GDAL-linked map"), name);
-        done = 1;
-    }
+    Rast_get_cellhd(name, G_mapset(), &cellhd);
+    map_type = Rast_map_type(name, G_mapset());
 
     /* Integer (CELL) compression:
      *    cellhd.compressed == 0: uncompressed
      *    cellhd.compressed == 1: RLE compressed
      *    cellhd.compressed == 2: DEFLATE compressed
      */
-    if (!done && cellhd.compressed == 0) {
-        G_message(_("<%s> is uncompressed (level %i: %s). Data type: <%s>"), name, cellhd.compressed,
+
+    /* No RLE compression for fp maps */
+    if (cellhd.compressed == 1 && map_type != CELL_TYPE)
+	cellhd.compressed = 2;
+
+    if (cellhd.compressed == 0) {
+        G_message(_("<%s> is uncompressed (method %i: %s). Data type: %s"), name, cellhd.compressed,
                     "NONE",
                      (map_type == CELL_TYPE ? "CELL" :
                        (map_type == DCELL_TYPE ? "DCELL" :
                          (map_type == FCELL_TYPE ? "FCELL" : "??"))));
     }
-    else if (!done && cellhd.compressed > 0) {
-        G_message(_("<%s> is compressed (level %i: %s). Data type: <%s>"), name, cellhd.compressed,
-                    cellhd.compressed == 1 ? "RLE" : "DEFLATE",
+    else if (cellhd.compressed > 0) {
+        G_message(_("<%s> is compressed (method %i: %s). Data type: %s"), name, cellhd.compressed,
+                    G_compressor_name(cellhd.compressed),
                      (map_type == CELL_TYPE ? "CELL" :
                        (map_type == DCELL_TYPE ? "DCELL" :
                          (map_type == FCELL_TYPE ? "FCELL" : "??"))));
diff --git a/raster/r.compress/r.compress.html b/raster/r.compress/r.compress.html
index 483bf87..6944c03 100644
--- a/raster/r.compress/r.compress.html
+++ b/raster/r.compress/r.compress.html
@@ -1,170 +1,178 @@
 <h2>DESCRIPTION</h2>
 
-<em>r.compress</em> can be used to compress and decompress
-raster map layers. Additionally, it prints information about the
-map compression and data type of the input raster map(s).
+<em>r.compress</em> can be used to compress or decompress raster maps. 
+Additionally, it prints information about the compression method and 
+data type of the input raster map(s).
 
 <p>
-During compression, this program reformats raster maps using a run-length-encoding
-(RLE) or ZLIB's "deflate" (LZ77-based) algorithm. Raster map
-layers which contain very little information (such as
-boundary, geology, soils and land use maps) can be greatly
-reduced in size. Some raster map layers are shrunk to
-roughly 1% of their original sizes.  Raster map layers
-containing complex images such as elevation and photo or
-satellite images may increase slightly in size.
-All newly generated raster maps are automatically stored in compressed 
-form (see FORMATS below).  Other modules can read both compressed 
-and regular (uncompressed) file formats.
+All raster maps (those imported for the first time and those newly 
+generated) are compressed by default using the ZLIB compression 
+method (see below). Related no data files (i.e.: NULL files), if 
+present, are not compressed by default unless a specific environment 
+variable is set (<tt>GRASS_COMPRESS_NULLS</tt>, see below).
 
 <p>
+During compression or re-compression, <em>r.compress</em> compresses 
+raster maps using the method specified by means of the environment 
+variable <tt>GRASS_COMPRESSOR</tt>. The default compression method is  
+ZLIB's "deflate" algorithm (LZ77-based). Raster maps that contain very 
+little information (such as boundary, geology, soils and land use maps) 
+can be greatly reduced in size. Some raster maps are shrunk to roughly 
+1% of their original sizes. 
+All newly generated raster maps are automatically stored as compressed
+data with varying methods depending on the raster format (i.e.,
+CELL: integer; FCELL: single precision; DCELL: double precision; see
+below). All GRASS GIS modules are able to read both compressed and
+uncompressed raster maps.
+
+<!-- too old and RLE only example
+<p>
 As an example, the Spearfish data base raster map layer
 <em>owner</em> was originally a size of 26600 bytes.  After
 it was RLE compressed, the raster map became only 1249 bytes
 (25351 bytes smaller).
+-->
+
+<p>
+Raster maps that are already compressed might be compressed again, 
+either by setting a different method with <tt>GRASS_COMPRESSOR</tt> 
+(RLE, ZLIB, LZ4, BZIP2) or, for the case of ZLIB compression, by 
+changing the compression level with the environment variable 
+<tt>GRASS_ZLIB_LEVEL</tt>.
 
 <p>
-Raster files may be decompressed manually to return them to their
-original format, using the <b>-u</b> flag of 
-<em>r.compress</em>. If <em>r.compress</em> is asked to
-compress a raster map which is already compressed (or to
-decompress an already decompressed raster map), it simply informs
-the user the map is already (de)compressed and exits.
+Compressed raster maps may be decompressed using <em>r.compress</em> to 
+return them to their original format, using the <b>-u</b> flag. If a 
+raster map was already decompressed and the <b>-u</b> flag is set, the 
+module simply informs the user that the map is already decompressed and 
+exits.
 
 
 <h3>TERMINOLOGY</h3>
 
 <ul>
-<li> INTEGER map (CELL data type): a raster map from INTEGER type (whole
+<li> INTEGER map (CELL data type): a raster map of INTEGER type (whole
   numbers only)</li>
-<li> FLOAT map (FCELL data type): a raster map from FLOAT type (4 bytes,
+<li> FLOAT map (FCELL data type): a raster map of FLOAT type (4 bytes,
   7-9 digits precision)</li>
-<li> DOUBLE map (DCELL data type): a raster map from DOUBLE type (8 bytes,
+<li> DOUBLE map (DCELL data type): a raster map of DOUBLE type (8 bytes,
   15-17 digits precision)</li>
-<li> NULL: represents "no data" in raster maps, to be distinguished from
+<li> NULL: represents "no data" in raster maps; to be distinguished from
   0 (zero) data value</li>
 </ul>
 
-<h3>USED COMPRESSION ALGORITHMS</h3>
+<h3>OVERVIEW OF AVAILABLE COMPRESSION ALGORITHMS</h3>
 
-Floating point (FCELL, DCELL) raster maps never use RLE compression;
-they are either compressed with ZLIB or uncompressed.
-<p>
-Integer (CELL) raster maps are by default ZLIB compressed or may remain
-uncompressed. If the environment variable <tt>GRASS_INT_ZLIB</tt>
-exists and has the value 0, newly generated compressed integer (CELL type)
-raster maps will be compressed using RLE compression instead of ZLIB.
-<p>
-In the internal cellhd file, the value for "compressed" is 1 for RLE and 2 for ZLIB.
-<p>
-Obviously, decompression is controlled by the raster map's compression,
-not the environment variable.
+The following compression methods are available (set by
+<tt>export GRASS_COMPRESSOR=<em>method</em></tt>):
 
-<h2>NOTES</h2>
+<ul>
+<li><tt>NONE</tt> (uncompressed)</li>
+<li><tt>RLE</tt>  (generic Run-Length Encoding of single bytes; deprecated)</li>
+<li><tt>ZLIB</tt> (DEFLATE, good speed and compression - <b>default compression</b>)
+<ul>
+<li>with zlib compression levels (<tt>export GRASS_ZLIB_LEVEL=X</tt>): -1..9
+   (-1 is default which corresponds to ZLIB level 6)</li>
+<li>note: <tt>export GRASS_ZLIB_LEVEL=0</tt> is equal to copying the data
+    as-is from source to destination</li>
+</ul>
+</li>
+<li><tt>LZ4</tt>  (fastest, low compression)</li>
+<li><tt>BZIP2</tt> (slowest, high compression)</li>
+</ul>
 
-<em>r.compress</em> can be run either non-interactively or
-interactively.  In non-interactive use, the user must
-specify the name(s) of the raster map layer(s) to be
-compressed (or decompressed) on the command line, using the
-form <b>map=</b><em>name</em>[,<em>name</em>,...] (where
-each <em>name</em> is the name of a raster map layer to be
-compressed or decompressed). The default behavior is to 
-compress the named map(s).  
-
-<h3>FORMATS</h3>
-
-Conceptually, a raster data file consists of rows of cells,
-with each row containing the same number of cells.  A cell
-consists of one or more bytes.  The number of bytes per
-cell depends on the category values stored in the cell.
-Category values in the range 0-255 require 1 byte per cell,
-while category values in the range 256-65535 require 2
-bytes, and category values in the range above 65535 require
-3 (or more) bytes per cell.
+Important: the NULL file compression must be explicitly turned on with 
+<tt>export GRASS_COMPRESS_NULLS=1</tt> - such raster maps can then only 
+be opened with GRASS GIS 7.2.0 or later. NULL file compression can be 
+managed with <b>r.null -z</b>.
 
-<p>
-The <b>decompressed</b> raster map format matches the
-conceptual format.  For example, a raster map with 1 byte
-cells that is 100 rows with 200 cells per row, consists of
-20,000 bytes.  Running the UNIX command <em>ls -l</em> on
-this file will show a size of 20,000.  If the cells were 2
-byte cells, the file would require 40,000 bytes.  The map
-layer category values start with the upper left corner cell
-followed by the other cells along the northern boundary.
-The byte following the last byte of that first row is the
-first cell of the second row of category values (moving
-from left to right).  There are no end-of-row markers or
-other syncing codes in the raster map.  A cell header file
-(<em>cellhd</em>) is used to define how this string of bytes
-is broken up into rows of category values.
+<h3>COMPRESSION ALGORITHM DETAILS</h3>
+<!-- keep in sync with raster/rasterintro.html -->
 
+All GRASS GIS raster map types are by default ZLIB compressed, i.e. using
+ZLIB's deflate algorithm. Through the environment variable
+<tt>GRASS_COMPRESSOR</tt> the compression method can be set to RLE, ZLIB,
+LZ4, or BZIP2.
 <p>
-The <b>compressed</b> RLE format is not so simple, but is quite
-elegant in its design. It not only requires less disk space
-to store the raster data, but often can result in faster
-execution of graphic and analysis programs since there is
-less disk I/O. There are two compressed RLE formats: the
-pre-version 3.0 format (which GRASS programs can read but
-no longer produce), and the version 3.0 format (which is
-automatically used when new raster map layers are
-created).
-
-<h4>PRE-3.0 FORMAT:</h4> 
-
-First 3 bytes (chars) - These are a special code that identifies 
-the raster data as compressed. 
-
+Integer (CELL type) raster maps can be compressed with RLE if
+the environment variable <tt>GRASS_INT_ZLIB</tt> exists and is set to value 
+0. However, this is not recommended.
 <p>
-Address array (long) - array (size of the number of rows +
-1) of addresses pointing to the internal start of each row.
-Because each row may be a different size, this array is
-necessary to provide a mapping of the data.
+Floating point (FCELL, DCELL) raster maps never use RLE compression;
+they are either compressed with ZLIB, LZ4, BZIP2 or are uncompressed.
+
+<!-- BTW, why not having an option "method" and another one "level"
+     instead of the environment variables? Is it too complicated?
+-->
+<dl>
+<dt><strong>RLE</strong></dt>
+<dd><b>DEPRECATED</b> Run-Length Encoding, poor compression ratio but 
+fast. It is kept for backwards compatibility to read raster maps 
+created with GRASS 6. It is only used for raster maps of type CELL.
+FCELL and DCELL maps are never and have never been compressed with RLE.
+</dd>
+<dt><strong>ZLIB</strong></dt>
+<dd>ZLIB's deflate is the default compression method for all raster 
+maps. GRASS GIS 7 uses by default 1 as ZLIB compression level which is the 
+best compromise betweeen speed and compression ratio, also when 
+compared to other available compression methods. Valid levels are in 
+the range [1, 9] and can be set with the environment variable 
+<tt>GRASS_ZLIB_LEVEL</tt>.</dd>
+<dt><strong>LZ4</strong></dt>
+<dd>LZ4 is a very fast compression method, about as fast as no 
+compression. Decompression is also very fast. The compression ratio is 
+generally higher than for RLE but worse than for ZLIB. LZ4 is 
+recommended if disk space is not a limiting factor.</dd>
+<dt><strong>BZIP2</strong></dt>
+<dd>BZIP2 can provide compression ratios much higher than the other 
+methods, but only for large raster maps (> 10000 columns). For large 
+raster maps, disk space consumption can be reduced by 30 - 50% when 
+using BZIP2 instead of ZLIB's deflate. BZIP2 is the slowest compression 
+and decompression method. However, if reading from / writing to a 
+storage device is the limiting factor, BZIP2 compression can speed up 
+raster map processing. Be aware that for smaller raster maps, BZIP2 
+compression ratio can be worse than other compression methods.</dd> 
+</dl>
 
-<p>
-Row by row, beginning at the northern edge of the data, a
-series of byte groups describes the data.  The number of
-bytes in each group is the number of bytes per cell plus
-one.  The first byte of each group gives a count (up to
-255) of the number of cells that contain the category
-values given by the remaining bytes of the group.
 
-<h4>POST-3.0 FORMAT:</h4> 
+<h2>NOTES</h2>
 
-The 3 byte code is not used. 
-Instead, a field in the cell header is used to indicate compressed format. 
+<h3>Compression method number scheme</h3>
 
+The used compression method is encoded with numbers. In the internal
+<tt>cellhd</tt> file, the value for "compressed" is 1 for RLE, 2
+for ZLIB, 3 for LZ4, and 4 for BZIP2.
 <p>
-The address array is the same. 
+Obviously, decompression is controlled by the raster map's compression,
+not by the environment variable.
 
-<p>
-The RLE format is the same as the pre-3.0 RLE, except that
-each row of data is preceded by a single byte containing
-the number of bytes per cell for the row, and if
-run-length-encoding the row would not require less space
-than non-run-length-encoding, then the row is not encoded.
+<h3>Formats</h3>
 
+Conceptually, a raster data file consists of rows of cells, with each 
+row containing the same number of cells. A cell consists of one or more 
+bytes. For CELL maps, the number of bytes per cell depends on the 
+category values stored in the cell. Category values in the range 0-255 
+require 1 byte per cell, while category values in the range 256-65535 
+require 2 bytes, and category values in the range above 65535 require 3 
+(or more) bytes per cell.
 <p>
-These improvements give better compression than the pre-3.0
-format in 99% of the raster data layers.  The kinds of
-raster data layers which get bigger are those in which each
-row would be larger if compressed (e.g., imagery band
-files).  But even in this case the raster data layer would
-only be larger by the size of the address array and the
-single byte preceding each row.
+FCELL maps always have 4 bytes per cell and DCELL maps always have 8 
+bytes per cell.
 
 <p>
-Since GRASS GIS 7.0.0, the default compression method for
- Integer (CELL) maps is deflate and not any more the RLE compression.
+Since GRASS GIS 7.0.0, the default compression method for 
+Integer (CELL) raster maps is ZLIB and no longer RLE.
 
-<h4>DEFLATE compression level</h4>
+<h3>ZLIB compression levels</h3>
 
 If the environment variable <tt>GRASS_ZLIB_LEVEL</tt> exists and
 its value can be parsed as an integer, it determines the compression
-level used when newly generated raster maps are compressed using zlib
+level used when newly generated raster maps are compressed using ZLIB
 compression. This applies to all raster map types (CELL, FCELL, DCELL).
 <p>
+<!-- TODO: check with implementation in lib/gis/gisinit.c line 128 -->
 If the variable does not exist, or the value cannot be parsed as an
-integer, zlib's default compression level will be used.
+integer, ZLIB's compression level 1 will be used.
 
 
 <h2>EXAMPLES</h2>
@@ -172,40 +180,53 @@ integer, zlib's default compression level will be used.
 Printing of current compression state:
 <div class="code"><pre>
 r.compress compressed_no -p
-  <compressed_no> (level 0: NONE). Data type: <CELL>
+  <compressed_no> (method 0: NONE). Data type: <CELL>
 </pre></div>
 
 <p>
-Applying RLE compression to a copy of the uncompressed map:
+Applying RLE compression to a copy of the uncompressed map (not recommended!):
 <div class="code"><pre>
-# compression of map using RLE compression
+# compression of map using the deprecated RLE compression
 g.copy raster=compressed_no,compressed_RLE
 
 export GRASS_INT_ZLIB=0 # RLE
 r.compress compressed_RLE 
 r.compress compressed_RLE -p 
-  <compressed_RLE> is compressed (level 1: RLE). Data type: <CELL>
+  <compressed_RLE> is compressed (method 1: RLE). Data type: <CELL>
 unset GRASS_INT_ZLIB
 </pre></div>
 
 <p>
-Applying DEFLATE (ZLIB) compression to a copy of the uncompressed map:
+Applying ZLIB compression to a copy of the uncompressed map:
 <div class="code"><pre>
-# compression of map using DEFLATE compression
-g.copy raster=compressed_no,compressed_DEFLATE
+# compression of map using ZLIB compression
+g.copy raster=compressed_no,compressed_ZLIB
 
-export GRASS_INT_ZLIB=1 # deflate
-r.compress compressed_DEFLATE
-r.compress compressed_DEFLATE -p
-  <compressed_DEFLATE> is compressed (level 2: DEFLATE). Data type: <CELL>
+export GRASS_INT_ZLIB=1 # ZLIB
+r.compress compressed_ZLIB
+r.compress compressed_ZLIB -p
+  <compressed_ZLIB> is compressed (method 2: ZLIB). Data type: <CELL>
 unset GRASS_INT_ZLIB
 </pre></div>
 
+<p>
+Applying BZIP2 compression to a copy of the ZLIB-compressed map:
+<div class="code"><pre>
+# compression of map using BZIP2 compression
+g.copy raster=compressed_ZLIB,compressed_BZIP2
+
+export GRASS_COMPRESSOR=BZIP2 # BZIP2
+r.compress compressed_BZIP2
+r.compress compressed_BZIP2 -p
+  <compressed_BZIP2> is compressed (method 4: BZIP2). Data type: <CELL>
+unset GRASS_COMPRESSOR
+</pre></div>
 
 <h2>SEE ALSO</h2>
 
 <em>
 <a href="r.info.html">r.info</a>,
+<a href="r.null.html">r.null</a>,
 <a href="r.support.html">r.support</a>
 </em>
 
@@ -213,6 +234,7 @@ unset GRASS_INT_ZLIB
 
 James Westervelt,<br>
 Michael Shapiro,<br> 
-U.S. Army Construction Engineering Research Laboratory
+U.S. Army Construction Engineering Research Laboratory<br>
+Markus Metz
 
-<p><i>Last changed: $Date: 2015-05-13 13:38:09 +0200 (Wed, 13 May 2015) $</i>
+<p><i>Last changed: $Date: 2016-09-09 22:38:52 +0200 (Fri, 09 Sep 2016) $</i>
diff --git a/raster/r.contour/r.contour.html b/raster/r.contour/r.contour.html
index d3d7dd8..8d8025b 100644
--- a/raster/r.contour/r.contour.html
+++ b/raster/r.contour/r.contour.html
@@ -50,5 +50,5 @@ Terry Baker, U.S. Army Construction Engineering Research Laboratory<br>
 3/2001: cut parameter and fixes by Andrea Aime (aaime at libero.it)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
 
diff --git a/raster/r.cost/r.cost.html b/raster/r.cost/r.cost.html
index 63e0a30..5513abc 100644
--- a/raster/r.cost/r.cost.html
+++ b/raster/r.cost/r.cost.html
@@ -278,4 +278,4 @@ James Westervelt, U.S.Army Construction Engineering Research Laboratory<br>
 Updated for Grass 5 by Pierre de Mouveaux (pmx at audiovu.com) 
 
 <p>
-<i>Last changed: $Date: 2015-01-23 20:39:26 +0100 (Fri, 23 Jan 2015) $</i>
+<i>Last changed: $Date: 2015-01-23 20:38:50 +0100 (Fri, 23 Jan 2015) $</i>
diff --git a/raster/r.covar/r.covar.html b/raster/r.covar/r.covar.html
index a59a5ca..c79632c 100644
--- a/raster/r.covar/r.covar.html
+++ b/raster/r.covar/r.covar.html
@@ -97,4 +97,4 @@ This can be done with <em><a href="r.rescale.html">r.rescale</a></em>.
 
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-28 16:45:01 +0100 (Sun, 28 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-28 16:42:58 +0100 (Sun, 28 Dec 2014) $</i>
diff --git a/raster/r.cross/r.cross.html b/raster/r.cross/r.cross.html
index 243fa1e..f31c29c 100644
--- a/raster/r.cross/r.cross.html
+++ b/raster/r.cross/r.cross.html
@@ -97,4 +97,4 @@ A random color table is also generated for the <em>output</em> map layer.
 
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/raster/r.distance/r.distance.html b/raster/r.distance/r.distance.html
index a6e6c3b..38bbf85 100644
--- a/raster/r.distance/r.distance.html
+++ b/raster/r.distance/r.distance.html
@@ -70,4 +70,4 @@ r.distance map=map1,map2 | \
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/raster/r.drain/r.drain.html b/raster/r.drain/r.drain.html
index adbfc8b..e08272e 100644
--- a/raster/r.drain/r.drain.html
+++ b/raster/r.drain/r.drain.html
@@ -220,4 +220,4 @@ Matteo Franchi (Liceo Leonardo Da Vinci, Trento) and
 Roberto Flor (ITC-irst, Trento, Italy)
 
 <p>
-<i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/raster/r.external.out/r.external.out.html b/raster/r.external.out/r.external.out.html
index aa5853e..98d477e 100644
--- a/raster/r.external.out/r.external.out.html
+++ b/raster/r.external.out/r.external.out.html
@@ -54,4 +54,4 @@ GDAL Pages: <a href="http://www.gdal.org">http://www.gdal.org/</a><br>
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2015-10-27 16:46:21 +0100 (Tue, 27 Oct 2015) $</i>
+<i>Last changed: $Date: 2015-10-27 16:45:22 +0100 (Tue, 27 Oct 2015) $</i>
diff --git a/raster/r.external/r.external.html b/raster/r.external/r.external.html
index d2dcb40..561f5f2 100644
--- a/raster/r.external/r.external.html
+++ b/raster/r.external/r.external.html
@@ -83,4 +83,4 @@ GDAL Pages: <a href="http://www.gdal.org">http://www.gdal.org/</a><br>
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-01-13 10:20:46 +0100 (Wed, 13 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-13 10:18:55 +0100 (Wed, 13 Jan 2016) $</i>
diff --git a/raster/r.fill.dir/r.fill.dir.html b/raster/r.fill.dir/r.fill.dir.html
index 9770f6a..f66fe15 100644
--- a/raster/r.fill.dir/r.fill.dir.html
+++ b/raster/r.fill.dir/r.fill.dir.html
@@ -97,4 +97,4 @@ Rewrite to C with enhancements:
 Roger S. Miller
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/raster/r.flow/r.flow.h b/raster/r.flow/r.flow.h
index c0465b0..3010ebb 100644
--- a/raster/r.flow/r.flow.h
+++ b/raster/r.flow/r.flow.h
@@ -44,7 +44,7 @@
 
 #define D_PI	180.
 #define D2_PI	360.
-#define DEG2RAD	0.0174532925199432958
+#define DEG2RAD	M_D2R
 #define UNDEF	365.		/* change to undefined when available */
 #define UNDEFZ	0.		/* change to undefined when available */
 #define HORIZ	1		/* magic        */
diff --git a/raster/r.flow/r.flow.html b/raster/r.flow/r.flow.html
index d2b4ec6..271d581 100644
--- a/raster/r.flow/r.flow.html
+++ b/raster/r.flow/r.flow.html
@@ -236,4 +236,4 @@ at Urbana-Champaign with support from USA CERL.
 at Urbana-Champaign</a>
 
 <p>
-<i>Last changed: $Date: 2015-07-20 12:05:40 +0200 (Mon, 20 Jul 2015) $</i>
+<i>Last changed: $Date: 2015-07-20 12:04:18 +0200 (Mon, 20 Jul 2015) $</i>
diff --git a/raster/r.grow.distance/main.c b/raster/r.grow.distance/main.c
index ad43a32..88f1ac0 100644
--- a/raster/r.grow.distance/main.c
+++ b/raster/r.grow.distance/main.c
@@ -128,7 +128,7 @@ int main(int argc, char **argv)
     } opt;
     struct
     {
-	struct Flag *m;
+	struct Flag *m, *n;
     } flag;
     const char *in_name;
     const char *dist_name;
@@ -144,6 +144,7 @@ int main(int argc, char **argv)
     DCELL min, max;
     DCELL *out_row;
     double scale = 1.0;
+    int invert;
 
     G_gisinit(argv[0]);
 
@@ -180,6 +181,10 @@ int main(int argc, char **argv)
     flag.m->key = 'm';
     flag.m->description = _("Output distances in meters instead of map units");
 
+    flag.n = G_define_flag();
+    flag.n->key = 'n';
+    flag.n->description = _("Calculate distance to nearest NULL cell");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
@@ -187,6 +192,15 @@ int main(int argc, char **argv)
     dist_name = opt.dist->answer;
     val_name = opt.val->answer;
 
+    if ((invert = flag.n->answer)) {
+	if (!dist_name)
+	    G_fatal_error(_("Distance output is required for distance to NULL cells"));
+	if (val_name) {
+	    G_warning(_("Value output is meaningless for distance to NULL cells"));
+	    val_name = NULL;
+	}
+    }
+
     if (!dist_name && !val_name)
 	G_fatal_error(_("At least one of distance= and value= must be given"));
 
@@ -274,13 +288,14 @@ int main(int argc, char **argv)
 
 	Rast_get_d_row(in_fd, in_row, irow);
 
-	for (col = 0; col < ncols; col++)
-	    if (!Rast_is_d_null_value(&in_row[col])) {
+	for (col = 0; col < ncols; col++) {
+	    if (Rast_is_d_null_value(&in_row[col]) == invert) {
 		new_x_row[col] = 0;
 		new_y_row[col] = 0;
 		dist_row[col] = 0;
 		new_val_row[col] = in_row[col];
 	    }
+	}
 
 	for (col = 0; col < ncols; col++)
 	    check(irow, col, -1, 0);
@@ -380,8 +395,6 @@ int main(int argc, char **argv)
 	Rast_init_colors(&colors);
 	Rast_read_fp_range(dist_name, G_mapset(), &range);
 	Rast_get_fp_range_min_max(&range, &min, &max);
-	Rast_make_fp_colors(&colors, "rainbow", min, max);
-	Rast_write_colors(dist_name, G_mapset(), &colors);
 
 	Rast_short_history(dist_name, "raster", &hist);
 	Rast_set_history(&hist, HIST_DATSRC_1, in_name);
diff --git a/raster/r.grow.distance/r.grow.distance.html b/raster/r.grow.distance/r.grow.distance.html
index 3fb70f0..621c663 100644
--- a/raster/r.grow.distance/r.grow.distance.html
+++ b/raster/r.grow.distance/r.grow.distance.html
@@ -6,6 +6,9 @@ value of the nearest non-null cell.
 
 <h2>NOTES</h2>
 
+The flag <b>-n</b> calculates the respective pixel distances to the
+nearest NULL cell.
+<p>
 The user has the option of specifying five different metrics which
 control the geometry in which grown cells are created, (controlled by
 the <b>metric</b> parameter): <i>Euclidean</i>, <i>Squared</i>,
@@ -119,4 +122,4 @@ r.grow.distance -m input=sea distance=dist_from_sea_geodetic metric=geodesic
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-01-21 12:46:54 +0100 (Thu, 21 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-21 14:23:39 +0100 (Thu, 21 Jan 2016) $</i>
diff --git a/raster/r.grow.distance/testsuite/r_grow_distance_test.py b/raster/r.grow.distance/testsuite/r_grow_distance_test.py
new file mode 100644
index 0000000..d7246f7
--- /dev/null
+++ b/raster/r.grow.distance/testsuite/r_grow_distance_test.py
@@ -0,0 +1,52 @@
+"""
+Name:      r_grow_distance_test
+Purpose:   This script is to demonstrate a unit test for r.grow.distance
+           module.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestGrowDistance(TestCase):
+    """Test case for grow distance module"""
+
+    # Setup variables to be used for outputs
+    distance = 'test_distance'
+    lakes = 'lakes'
+    elevation = 'elevation'
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and setup"""
+        # Always use the computational region of the raster elevation
+        cls.use_temp_region()
+        cls.runModule('g.region', raster=cls.elevation)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region"""
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created from the grow distance module
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='raster',
+                       name=self.distance)
+
+    def test_grow(self):
+        """Test to see if the outputs are created"""
+        # run the grow distance module
+        self.assertModule('r.grow.distance', input=self.lakes,
+                          distance=self.distance)
+        # check to see if distance output is in mapset
+        self.assertRasterExists(self.distance,
+                                msg='distance output was not created')
+        self.assertRasterMinMax(self.distance, 0, 5322,
+                                msg='distance output not in range')
+
+
+if __name__ == '__main__':
+    test()
diff --git a/raster/r.his/r.his.html b/raster/r.his/r.his.html
index 552fa45..df486b6 100644
--- a/raster/r.his/r.his.html
+++ b/raster/r.his/r.his.html
@@ -132,4 +132,4 @@ d.rgb red=shadedmap_r green=shadedmap_g blue=shadedmap_b
 
 Glynn Clements (based upon <em><a href="d.his.html">d.his</a></em>)
 
-<p><i>Last changed: $Date: 2016-01-28 12:27:18 +0100 (Thu, 28 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-28 12:21:34 +0100 (Thu, 28 Jan 2016) $</i>
diff --git a/raster/r.horizon/main.c b/raster/r.horizon/main.c
index 70b63d1..da3f69b 100644
--- a/raster/r.horizon/main.c
+++ b/raster/r.horizon/main.c
@@ -8,7 +8,7 @@ by the user.
 2) For a given minimum angle it calculates one or more raster map giving the mazimum
 distance to a point on the horizon.  
 
-This program was written in 2006 by Tfomas Huld and Tomas Cebecauer, 
+This program was written in 2006 by Thomas Huld and Tomas Cebecauer, 
 Joint Research Centre of the European Commission, based on bits of the r.sun module by Jaro Hofierka
 
 *******************************************************************************/
@@ -472,7 +472,13 @@ int main(int argc, char *argv[])
 	if (sscanf(parm.maxdistance->answer, "%lf", &fixedMaxLength) != 1)
 	    G_fatal_error(_("Could not read maximum distance. Aborting."));
     }
+    G_debug(1,"Using maxdistance %f", fixedMaxLength); /* predefined as BIG */
 
+/* TODO: fixing BIG, there is a bug with distant mountains not being seen: attempt to contrain to current region
+    
+    fixedMaxLength = (fixedMaxLength < AMAX1(deltx, delty)) ? fixedMaxLength : AMAX1(deltx, delty);
+    G_debug(1,"Using maxdistance %f", fixedMaxLength);
+*/
 
     sscanf(parm.dist->answer, "%lf", &dist);
     if (dist < 0.5 || dist > 1.5 ) G_fatal_error(_("The distance value must be 0.5-1.5. Aborting."));
@@ -511,7 +517,7 @@ int main(int argc, char *argv[])
 
 	n /* n_cols */ = new_cellhd.cols;
 	m /* n_rows */ = new_cellhd.rows;
-	/* G_debug(3,"%lf %lf %lf %lf \n",ymax, ymin, xmin,xmax); */
+	G_debug(1,"%lf %lf %lf %lf \n",ymax, ymin, xmin,xmax);
 	n100 = ceil(n / 100.);
 	m100 = ceil(m / 100.);
 
@@ -547,7 +553,7 @@ int main(int argc, char *argv[])
 
 
     INPUT();
-    G_debug(3, "calculate() starts...");
+    G_debug(1, "calculate() starts...");
     calculate(xcoord, ycoord, (int)(ebufferZone / stepx),
 	      (int)(wbufferZone / stepx), (int)(sbufferZone / stepy),
 	      (int)(nbufferZone / stepy));
@@ -1114,8 +1120,8 @@ void calculate(double xcoord, double ycoord, int buffer_e, int buffer_w,
 	    coslatsq = coslat * coslat;
 	}
 
-	G_debug(3, "yindex: %d, xindex %d", yindex, xindex);
 	z_orig = zp = z[yindex][xindex];
+	G_debug(1, "yindex: %d, xindex %d, z_orig %.2f", yindex, xindex, z_orig);
 
 	calculate_shadow();
         fclose(fp);
@@ -1247,8 +1253,7 @@ void calculate(double xcoord, double ycoord, int buffer_e, int buffer_w,
 		    z_orig = zp = z[j][i];
 		    maxlength = (zmax - z_orig) / TANMINANGLE;
 		    maxlength =
-			(maxlength <
-			 fixedMaxLength) ? maxlength : fixedMaxLength;
+			(maxlength < fixedMaxLength) ? maxlength : fixedMaxLength;
 
 		    if (z_orig != UNDEFZ) {
 
@@ -1262,7 +1267,7 @@ void calculate(double xcoord, double ycoord, int buffer_e, int buffer_w,
 			/*
 			   if((j==1400)&&(i==1400))
 			   {
-			   G_debug(3, "coordinates=%f,%f, raster no. %d, horizon=%f\n",
+			   G_debug(1, "coordinates=%f,%f, raster no. %d, horizon=%f\n",
 			   xp, yp, k, shadow_angle);
 			   }
 			 */
@@ -1273,7 +1278,7 @@ void calculate(double xcoord, double ycoord, int buffer_e, int buffer_w,
 		}
 	    }
 
-        G_debug(3, "OUTGR() starts...");
+        G_debug(1, "OUTGR() starts...");
 	    OUTGR(cellhd.rows, cellhd.cols);
 
 	    /* empty array */
diff --git a/raster/r.horizon/r.horizon.html b/raster/r.horizon/r.horizon.html
index de8eea0..2eb56a0 100644
--- a/raster/r.horizon/r.horizon.html
+++ b/raster/r.horizon/r.horizon.html
@@ -254,4 +254,4 @@ European Commission, Ispra, Italy
 <a href="mailto:Marcel.Suri at jrc.it">Marcel.Suri at jrc.it</a> 
 </ADDRESS>
 
-<p><i>Last changed: $Date: 2016-01-19 23:08:44 +0100 (Tue, 19 Jan 2016) $</i> 
+<p><i>Last changed: $Date: 2016-01-19 23:08:21 +0100 (Tue, 19 Jan 2016) $</i> 
diff --git a/raster/r.horizon/testsuite/test_r_horizon.py b/raster/r.horizon/testsuite/test_r_horizon.py
new file mode 100644
index 0000000..2776342
--- /dev/null
+++ b/raster/r.horizon/testsuite/test_r_horizon.py
@@ -0,0 +1,132 @@
+"""
+TEST:    test_r_horizon.py
+
+AUTHOR(S): Anna Petrasova <kratochanna at gmail>
+
+PURPOSE:   Test r.horizon
+
+COPYRIGHT: (C) 2015 Anna Petrasova
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+
+
+ref1 = """azimuth,horizon_height
+180.000000,0.023101
+"""
+
+ref2 = """azimuth,horizon_height
+180.000000,0.023101
+200.000000,0.034850
+220.000000,0.050549
+240.000000,0.048211
+260.000000,0.053101
+280.000000,0.039774
+300.000000,0.032360
+320.000000,0.014804
+340.000000,0.000000
+360.000000,0.004724
+20.000000,0.012612
+40.000000,0.015207
+60.000000,0.014344
+80.000000,0.011044
+100.000000,0.012192
+120.000000,0.007462
+140.000000,0.004071
+160.000000,0.015356
+"""
+
+ref3 = """azimuth,horizon_height
+180.000000,0.023101
+200.000000,0.034850
+220.000000,0.050549
+240.000000,0.048211
+260.000000,0.053101
+280.000000,0.039774
+300.000000,0.032360
+320.000000,0.014804
+340.000000,0.000000
+360.000000,0.004724
+20.000000,0.012612
+40.000000,0.015207
+60.000000,0.014344
+80.000000,0.011044
+100.000000,0.012192
+120.000000,0.007462
+140.000000,0.004071
+160.000000,0.015356
+"""
+
+
+class TestHorizon(TestCase):
+
+    horizon = 'test_horizon_from_elevation'
+    horizon_output = 'test_horizon_output_from_elevation'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        cls.runModule('g.region', raster='elevation')
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove horizon map after each test method"""
+        self.runModule('g.remove', flags='f', type='raster',
+                       name=self.horizon)
+        self.runModule('g.remove', flags='f', type='raster',
+                       pattern=self.horizon_output + '*')
+
+    def test_point_mode_one_direction(self):
+        """Test mode with 1 point and 1 direction"""
+        module = SimpleModule('r.horizon', elevation='elevation',
+                              coordinates=(634720, 216180), output=self.horizon, direction=180, step=0)
+        self.assertModule(module)
+        stdout = module.outputs.stdout
+        self.assertMultiLineEqual(first=ref1, second=stdout)
+
+    def test_point_mode_multiple_direction(self):
+        """Test mode with 1 point and multiple directions"""
+        module = SimpleModule('r.horizon', elevation='elevation',
+                              coordinates=(634720, 216180), output=self.horizon, direction=180, step=20)
+        self.assertModule(module)
+        stdout = module.outputs.stdout
+        self.assertMultiLineEqual(first=ref2, second=stdout)
+
+    def test_raster_mode_one_direction(self):
+        """Test mode with 1 point and one direction"""
+        module = SimpleModule('r.horizon', elevation='elevation',
+                              output=self.horizon_output, direction=50)
+        self.assertModule(module)
+        ref = {'min': 0, 'max': 0.70678365230560, 'stddev': 0.0360724286360789}
+        self.assertRasterFitsUnivar(raster='test_horizon_output_from_elevation_050', reference=ref, precision=1e6)
+
+    def test_raster_mode_multiple_direction(self):
+        module = SimpleModule('r.horizon', elevation='elevation',
+                              output=self.horizon_output, start=10, end=50, step=15.512)
+        self.assertModule(module)
+        module_list = SimpleModule('g.list', type='raster', pattern=self.horizon_output + '*')
+        self.runModule(module_list)
+        stdout = module_list.outputs.stdout.strip()
+        self.assertMultiLineEqual(first="test_horizon_output_from_elevation_010_000\ntest_horizon_output_from_elevation_025_512", second=stdout)
+
+    def test_raster_mode_multiple_direction_offset(self):
+        module = SimpleModule('r.horizon', elevation='elevation',
+                              output=self.horizon_output, start=10, end=50, step=15.512, direction=80)
+        self.assertModule(module)
+        module_list = SimpleModule('g.list', type='raster', pattern=self.horizon_output + '*')
+        self.runModule(module_list)
+        stdout = module_list.outputs.stdout.strip()
+        self.assertMultiLineEqual(first="test_horizon_output_from_elevation_090_000\ntest_horizon_output_from_elevation_105_512", second=stdout)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/raster/r.in.ascii/r.in.ascii.html b/raster/r.in.ascii/r.in.ascii.html
index 73f795c..4170350 100644
--- a/raster/r.in.ascii/r.in.ascii.html
+++ b/raster/r.in.ascii/r.in.ascii.html
@@ -109,4 +109,4 @@ null:                      -9999
 Michael Shapiro, U.S. Army Construction Engineering Research Laboratory<br>
 Surfer support by Roger Miller
 
-<p><i>Last changed: $Date: 2016-01-16 20:45:50 +0100 (Sat, 16 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-16 20:47:30 +0100 (Sat, 16 Jan 2016) $</i>
diff --git a/raster/r.in.bin/r.in.bin.html b/raster/r.in.bin/r.in.bin.html
index 427f097..64dca7e 100644
--- a/raster/r.in.bin/r.in.bin.html
+++ b/raster/r.in.bin/r.in.bin.html
@@ -136,4 +136,4 @@ Bob Covill, Canada (bcovill at tekmap.ns.ca)<br>
 Markus Metz<br>
 Man page: Zsolt Felker (felker at c160.pki.matav.hu)
 
-<p><i>Last changed: $Date: 2016-01-13 10:20:46 +0100 (Wed, 13 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-13 10:18:55 +0100 (Wed, 13 Jan 2016) $</i>
diff --git a/raster/r.in.gdal/main.c b/raster/r.in.gdal/main.c
index 11f2424..c001320 100644
--- a/raster/r.in.gdal/main.c
+++ b/raster/r.in.gdal/main.c
@@ -68,12 +68,15 @@ int main(int argc, char *argv[])
     int projcomp_error = 0;
     int overwrite;
     int offset = 0;
+    char *suffix;
+    int num_digits = 0;
 
     struct GModule *module;
     struct
     {
 	struct Option *input, *output, *target, *title, *outloc, *band,
-	              *memory, *offset, *rat;
+	              *memory, *offset, *num_digits, *map_names_file,
+	              *rat;
     } parm;
     struct Flag *flag_o, *flag_e, *flag_k, *flag_f, *flag_l, *flag_c, *flag_p,
         *flag_j;
@@ -138,7 +141,22 @@ int main(int argc, char *argv[])
     parm.offset->label = _("Offset to be added to band numbers");
     parm.offset->description = _("If 0, no offset is added and the first band is 1");
     parm.offset->guisection = _("Metadata");
-    
+
+    parm.num_digits = G_define_option();
+    parm.num_digits->key = "num_digits";
+    parm.num_digits->type = TYPE_INTEGER;
+    parm.num_digits->required = NO;
+    parm.num_digits->answer = "0";
+    parm.num_digits->label = _("Zero-padding of band number by filling with leading zeros up to given number");
+    parm.num_digits->description = _("If 0, length will be adjusted to 'offset' number without leading zeros");
+    parm.num_digits->guisection = _("Metadata");
+
+    parm.map_names_file = G_define_standard_option(G_OPT_F_OUTPUT);
+    parm.map_names_file->key = "map_names_file";
+    parm.map_names_file->required = NO;
+    parm.map_names_file->description = _("Name of the output file that contains the imported map names");
+    parm.map_names_file->guisection = _("Metadata");
+
     parm.outloc = G_define_option();
     parm.outloc->key = "location";
     parm.outloc->type = TYPE_STRING;
@@ -156,8 +174,10 @@ int main(int argc, char *argv[])
 
     flag_o = G_define_flag();
     flag_o->key = 'o';
+    flag_o->label =
+	_("Override projection check (use current location's projection)");
     flag_o->description =
-	_("Override projection (use location's projection)");
+	_("Assume that the dataset has same projection as the current location");
 
     flag_j = G_define_flag();
     flag_j->key = 'j';
@@ -211,8 +231,10 @@ int main(int argc, char *argv[])
     input = parm.input->answer;
 
     output = parm.output->answer;
-    
+
     offset = atoi(parm.offset->answer);
+
+    num_digits = atoi(parm.num_digits->answer);
     
     if ((title = parm.title->answer))
 	G_strip(title);
@@ -232,6 +254,18 @@ int main(int argc, char *argv[])
     if (flag_l->answer && G_projection() != PROJECTION_LL)
 	G_fatal_error(_("The '-l' flag only works in Lat/Lon locations"));
 
+    if(num_digits < 0)
+        G_fatal_error(_("The number of digits for band numbering must be equal or greater than 0"));
+
+    /* Allocate the suffix string */
+    if(num_digits > 0) {
+        suffix = G_calloc( num_digits + 1, sizeof(char));
+    } else {
+        /* Band number length should not exceed 64 digits */
+        suffix = G_calloc(65, sizeof(char));
+    }
+
+
     /* -------------------------------------------------------------------- */
     /*      Fire up the engines.                                            */
     /* -------------------------------------------------------------------- */
@@ -533,7 +567,7 @@ int main(int argc, char *argv[])
                 else
                     msg_fn = G_verbose_message;            
                 msg_fn(_("Projection of input dataset and current location "
-                            "appear to match"));
+                         "appear to match"));
                 if (flag_j->answer)
                     exit(EXIT_SUCCESS);
 	    }
@@ -592,6 +626,14 @@ int main(int argc, char *argv[])
 	char szBandName[512];
 	int nBand = 0;
 	char colornamebuf[512], colornamebuf2[512];
+	FILE *map_names_file = NULL;
+
+	if(parm.map_names_file->answer) {
+	    map_names_file = fopen(parm.map_names_file->answer, "w");
+	    if(map_names_file == NULL) {
+	        G_fatal_error(_("Unable to open the map names output text file"));
+	    }
+	}
 
 	I_init_group_ref(&ref);
 
@@ -610,6 +652,13 @@ int main(int argc, char *argv[])
 		nBand++;
 	    }
 
+            /* Generate the suffix */
+            if(num_digits > 0) {
+                G_snprintf(suffix, num_digits + 1, "%0*d", num_digits, nBand + offset);
+            } else {
+                G_snprintf(suffix, 65, "%d", nBand + offset);
+            }
+
 	    G_debug(3, "Import raster band %d", nBand);
 	    hBand = GDALGetRasterBand(hDS, nBand);
 	    if (!hBand)
@@ -622,21 +671,21 @@ int main(int argc, char *argv[])
 
 		/* check: two channels with identical name ? */
 		if (strcmp(colornamebuf, colornamebuf2) == 0)
-		    sprintf(colornamebuf, "%d", nBand + offset);
+		    sprintf(colornamebuf, "%s", suffix);
 		else
 		    strcpy(colornamebuf2, colornamebuf);
 
 		/* avoid bad color names; in case of 'Gray' often all channels are named 'Gray' */
 		if (strcmp(colornamebuf, "Undefined") == 0 ||
 		    strcmp(colornamebuf, "Gray") == 0)
-		    sprintf(szBandName, "%s.%d", output, nBand + offset);
+		    sprintf(szBandName, "%s.%s", output, suffix);
 		else {
 		    G_tolcase(colornamebuf);
 		    sprintf(szBandName, "%s.%s", output, colornamebuf);
 		}
 	    }
 	    else
-		sprintf(szBandName, "%s.%d", output, nBand + offset);
+		sprintf(szBandName, "%s.%s", output, suffix);
 
             if (!parm.outloc->answer) {	/* Check if the map exists */
               if (G_find_raster2(szBandName, G_mapset())) {
@@ -650,10 +699,16 @@ int main(int argc, char *argv[])
 
 	    ImportBand(hBand, szBandName, &ref);
 
+	    if(map_names_file)
+	        fprintf(map_names_file, "%s\n", szBandName);
+
 	    if (title)
 		Rast_put_cell_title(szBandName, title);
 	}
 
+	if(map_names_file)
+	    fclose(map_names_file);
+
 	I_put_group_ref(output, &ref);
 	I_free_group_ref(&ref);
 
diff --git a/raster/r.in.gdal/r.in.gdal.html b/raster/r.in.gdal/r.in.gdal.html
index 968369c..3b0b6c0 100644
--- a/raster/r.in.gdal/r.in.gdal.html
+++ b/raster/r.in.gdal/r.in.gdal.html
@@ -170,11 +170,15 @@ transformation is recommended, either before import with
 <b>gdalwarp -tps</b> or after import with <b>i.rectify -t</b>.
 
 
-<h3>Map names: Management of offset</h3>
+<h3>Map names: Management of offset and leading zeros</h3>
 
 The <b>offset</b> parameter allows adding an offset to band number(s) which
 is convenient in case of the import of e.g. a continuous time series split
 across different input files.
+<p>
+The <b>num_digits</b> parameter allows defining the number of  leading zeros
+(zero padding) in case of band numbers (e.g., to turn <tt>band.1</tt> into
+<tt>band.001</tt>).
 
 
 <h2>NOTES</h2>
@@ -297,38 +301,43 @@ of daily raster maps from 1st Jan 1950 (in case of importing the ECAD data
 split into multi-annual chunks). The ECAD data must be imported into a
 LatLong location.
 <p>
+By using the <em>num_digits</em> parameter leading zeros are added to the
+map name numbers, allowing for chronological numbering of the imported raster
+map layers, so that <em>g.list</em> lists them in the correct order.
+Here, use <em>num_digits=5</em> to have a 5 digit suffix with leading zeros (00001 - 99999).
+</p>
 
 <div class="code"><pre>
 # Import of ECAD data split into chunks
 # Import precipitation data
-r.in.gdal -o input=rr_0.25deg_reg_1950-1964_v12.0.nc output=precipitation offset=0
-r.in.gdal -o input=rr_0.25deg_reg_1965-1979_v12.0.nc output=precipitation offset=5479
-r.in.gdal -o input=rr_0.25deg_reg_1980-1994_v12.0.nc output=precipitation offset=10957
-r.in.gdal -o input=rr_0.25deg_reg_1995-2015_v12.0.nc output=precipitation offset=16436
+r.in.gdal -o input=rr_0.25deg_reg_1950-1964_v12.0.nc output=precipitation num_digits=5 offset=0
+r.in.gdal -o input=rr_0.25deg_reg_1965-1979_v12.0.nc output=precipitation num_digits=5 offset=5479
+r.in.gdal -o input=rr_0.25deg_reg_1980-1994_v12.0.nc output=precipitation num_digits=5 offset=10957
+r.in.gdal -o input=rr_0.25deg_reg_1995-2015_v12.0.nc output=precipitation num_digits=5 offset=16436
 
 # Import air pressure data
-r.in.gdal -o input=pp_0.25deg_reg_1950-1964_v12.0.nc output=air_pressure offset=0
-r.in.gdal -o input=pp_0.25deg_reg_1965-1979_v12.0.nc output=air_pressure offset=5479
-r.in.gdal -o input=pp_0.25deg_reg_1980-1994_v12.0.nc output=air_pressure offset=10957
-r.in.gdal -o input=pp_0.25deg_reg_1995-2015_v12.0.nc output=air_pressure offset=16436
+r.in.gdal -o input=pp_0.25deg_reg_1950-1964_v12.0.nc output=air_pressure num_digits=5 offset=0
+r.in.gdal -o input=pp_0.25deg_reg_1965-1979_v12.0.nc output=air_pressure num_digits=5 offset=5479
+r.in.gdal -o input=pp_0.25deg_reg_1980-1994_v12.0.nc output=air_pressure num_digits=5 offset=10957
+r.in.gdal -o input=pp_0.25deg_reg_1995-2015_v12.0.nc output=air_pressure num_digits=5 offset=16436
 
 # Import min temperature data
-r.in.gdal -o input=tn_0.25deg_reg_1950-1964_v12.0.nc output=temperatur_min offset=0
-r.in.gdal -o input=tn_0.25deg_reg_1965-1979_v12.0.nc output=temperatur_min offset=5479
-r.in.gdal -o input=tn_0.25deg_reg_1980-1994_v12.0.nc output=temperatur_min offset=10957
-r.in.gdal -o input=tn_0.25deg_reg_1995-2015_v12.0.nc output=temperatur_min offset=16436
+r.in.gdal -o input=tn_0.25deg_reg_1950-1964_v12.0.nc output=temperatur_min num_digits=5 offset=0
+r.in.gdal -o input=tn_0.25deg_reg_1965-1979_v12.0.nc output=temperatur_min num_digits=5 offset=5479
+r.in.gdal -o input=tn_0.25deg_reg_1980-1994_v12.0.nc output=temperatur_min num_digits=5 offset=10957
+r.in.gdal -o input=tn_0.25deg_reg_1995-2015_v12.0.nc output=temperatur_min num_digits=5 offset=16436
 
 # Import max temperature data
-r.in.gdal -o input=tx_0.25deg_reg_1950-1964_v12.0.nc output=temperatur_max offset=0
-r.in.gdal -o input=tx_0.25deg_reg_1965-1979_v12.0.nc output=temperatur_max offset=5479
-r.in.gdal -o input=tx_0.25deg_reg_1980-1994_v12.0.nc output=temperatur_max offset=10957
-r.in.gdal -o input=tx_0.25deg_reg_1995-2015_v12.0.nc output=temperatur_max offset=16436
+r.in.gdal -o input=tx_0.25deg_reg_1950-1964_v12.0.nc output=temperatur_max num_digits=5 offset=0
+r.in.gdal -o input=tx_0.25deg_reg_1965-1979_v12.0.nc output=temperatur_max num_digits=5 offset=5479
+r.in.gdal -o input=tx_0.25deg_reg_1980-1994_v12.0.nc output=temperatur_max num_digits=5 offset=10957
+r.in.gdal -o input=tx_0.25deg_reg_1995-2015_v12.0.nc output=temperatur_max num_digits=5 offset=16436
 
 # Import mean temperature data
-r.in.gdal -o input=tg_0.25deg_reg_1950-1964_v12.0.nc output=temperatur_mean offset=0
-r.in.gdal -o input=tg_0.25deg_reg_1965-1979_v12.0.nc output=temperatur_mean offset=5479
-r.in.gdal -o input=tg_0.25deg_reg_1980-1994_v12.0.nc output=temperatur_mean offset=10957
-r.in.gdal -o input=tg_0.25deg_reg_1995-2015_v12.0.nc output=temperatur_mean offset=16436
+r.in.gdal -o input=tg_0.25deg_reg_1950-1964_v12.0.nc output=temperatur_mean num_digits=5 offset=0
+r.in.gdal -o input=tg_0.25deg_reg_1965-1979_v12.0.nc output=temperatur_mean num_digits=5 offset=5479
+r.in.gdal -o input=tg_0.25deg_reg_1980-1994_v12.0.nc output=temperatur_mean num_digits=5 offset=10957
+r.in.gdal -o input=tg_0.25deg_reg_1995-2015_v12.0.nc output=temperatur_mean num_digits=5 offset=16436
 </pre></div>
 
 
@@ -412,4 +421,4 @@ GDAL Pages: <a href="http://www.gdal.org">http://www.gdal.org/</a><br>
  (<a href="mailto:warmerdam AT pobox dot com">email</a>).
 
 <p>
-<i>Last changed: $Date: 2016-09-15 15:32:42 +0200 (Thu, 15 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-15 15:32:14 +0200 (Thu, 15 Sep 2016) $</i>
diff --git a/raster/r.in.gdal/testsuite/data/elevation.asc b/raster/r.in.gdal/testsuite/data/elevation.asc
new file mode 100644
index 0000000..cdf58f8
--- /dev/null
+++ b/raster/r.in.gdal/testsuite/data/elevation.asc
@@ -0,0 +1,140 @@
+ncols        150
+nrows        135
+xllcorner    630000.000000000000
+yllcorner    215000.000000000000
+cellsize     100.000000000000
+ 147.0630950927734375 152.12115478515625 147.2090301513671875 149.65704345703125 153.3755645751953125 148.8382568359375 142.92120361328125 137.28582763671875 131.2375335693359375 135.0667724609375 135.067169189453125 134.82135009765625 138.7494049072265625 129.339385986328125 127.7231597900390625 115.90633392333984375 127.56354522705078125 125.89801025390625 116.35941314697265625 113.82979583740234375 124.5316162109375 126.8661041259765625 124.2809295654296875 128.773712158203125 133.411 [...]
+ 139.369110107421875 146.6329345703125 149.074127197265625 148.1779327392578125 152.795440673828125 148.0280609130859375 139.7231597900390625 133.63165283203125 137.468353271484375 141.60107421875 136.475830078125 142.383544921875 142.94219970703125 140.2969970703125 127.43737030029296875 125.662750244140625 130.5152435302734375 126.6941986083984375 123.83542633056640625 113.99900054931640625 115.06160736083984375 118.69449615478515625 120.4935150146484375 123.323577880859375 129.9435882 [...]
+ 133.7091827392578125 137.4987030029296875 145.8946075439453125 150.9004974365234375 152.7673187255859375 148.5075531005859375 140.171142578125 140.9747161865234375 142.5267486572265625 145.008941650390625 140.4365997314453125 144.612548828125 146.81500244140625 140.987579345703125 129.2682952880859375 132.7298583984375 132.6204833984375 130.3763580322265625 123.3799591064453125 115.53179931640625 123.45423126220703125 120.117584228515625 120.64618682861328125 129.747772216796875 131.793 [...]
+ 135.737945556640625 137.934295654296875 145.576690673828125 151.6974639892578125 151.155303955078125 143.010101318359375 139.734405517578125 145.28936767578125 145.04302978515625 142.888336181640625 143.123138427734375 143.7969818115234375 144.9995269775390625 139.5050201416015625 130.9752197265625 134.6947784423828125 129.6082763671875 123.69264984130859375 116.620697021484375 120.43180084228515625 129.955810546875 128.7548065185546875 126.3118896484375 128.113250732421875 135.27049255 [...]
+ 141.1980438232421875 142.17279052734375 146.8488922119140625 145.9217681884765625 146.158233642578125 146.7086334228515625 143.875946044921875 143.0060272216796875 139.094635009765625 139.5990142822265625 139.9721221923828125 138.29132080078125 142.5258331298828125 139.371917724609375 135.5819549560546875 133.6104583740234375 127.4442901611328125 119.23975372314453125 121.6800689697265625 126.98398590087890625 133.0224761962890625 134.935699462890625 130.53228759765625 125.4720230102539 [...]
+ 139.421295166015625 146.4323577880859375 143.000091552734375 137.578125 141.131317138671875 146.304718017578125 149.024627685546875 139.64837646484375 135.953094482421875 133.3410491943359375 132.4214324951171875 133.0732269287109375 134.2940521240234375 137.630950927734375 134.701141357421875 132.2540283203125 124.64757537841796875 118.0184173583984375 128.0242767333984375 127.60546112060546875 139.05615234375 139.1453857421875 137.4026947021484375 136.688140869140625 130.9003143310546 [...]
+ 139.5461273193359375 140.4133758544921875 135.700592041015625 133.812744140625 135.8598785400390625 141.0911865234375 147.7211151123046875 142.687744140625 142.588134765625 138.02740478515625 131.35858154296875 127.88724517822265625 126.85865020751953125 129.521270751953125 130.431243896484375 127.94980621337890625 120.876678466796875 123.04190826416015625 132.9070892333984375 138.267425537109375 138.9341278076171875 141.490692138671875 140.47027587890625 136.1331634521484375 134.990325 [...]
+ 133.6780242919921875 130.8223114013671875 133.0596160888671875 139.1998291015625 143.852752685546875 145.9181365966796875 147.3009185791015625 145.277496337890625 146.381256103515625 144.8831939697265625 141.5192718505859375 138.9593048095703125 134.775726318359375 124.992462158203125 125.67513275146484375 121.2436370849609375 120.91756439208984375 125.6083221435546875 132.216766357421875 135.6631011962890625 142.466278076171875 144.7189788818359375 139.81451416015625 140.56997680664062 [...]
+ 123.3807830810546875 129.0315399169921875 135.38818359375 139.077484130859375 143.0005950927734375 147.476165771484375 144.8210296630859375 143.5684967041015625 145.2019805908203125 141.8232269287109375 138.9693603515625 133.531219482421875 126.7306976318359375 123.1263885498046875 122.028778076171875 121.83061981201171875 128.1142578125 131.4333038330078125 133.0813751220703125 134.5289154052734375 141.5283966064453125 145.7993927001953125 143.6972198486328125 146.32696533203125 147.27 [...]
+ 134.9927825927734375 132.4256134033203125 130.2545928955078125 136.8470916748046875 143.9631195068359375 145.177215576171875 147.86273193359375 144.8113250732421875 145.7834930419921875 137.548248291015625 131.05267333984375 126.7592315673828125 129.4942169189453125 133.89300537109375 128.5748291015625 122.44854736328125 126.7511138916015625 132.1304168701171875 137.1300506591796875 141.2825775146484375 145.4812774658203125 148.2704925537109375 144.019287109375 141.9427490234375 143.647 [...]
+ 140.076202392578125 142.359039306640625 141.1747589111328125 139.49969482421875 137.445648193359375 145.3968658447265625 149.348114013671875 146.165283203125 142.0843963623046875 136.8837127685546875 129.5036163330078125 134.902984619140625 139.992218017578125 136.2177734375 126.20070648193359375 128.8696746826171875 130.91522216796875 126.63188934326171875 134.21954345703125 141.4659423828125 145.53765869140625 146.700164794921875 143.7661285400390625 137.957672119140625 132.2734680175 [...]
+ 138.7584075927734375 140.6340789794921875 144.5179443359375 148.58197021484375 143.44061279296875 141.750579833984375 149.8781585693359375 146.3974456787109375 138.864532470703125 137.398651123046875 130.4633026123046875 138.9102020263671875 144.107177734375 136.235015869140625 127.89502716064453125 130.9814300537109375 135.1947784423828125 132.8258514404296875 128.5294189453125 133.4830780029296875 135.2445526123046875 138.8182220458984375 144.454437255859375 143.5221099853515625 132.3 [...]
+ 138.658172607421875 143.150634765625 145.3385467529296875 150.112213134765625 150.1318511962890625 151.849945068359375 150.6754913330078125 145.6955413818359375 148.4995269775390625 142.7800445556640625 133.705322265625 143.959136962890625 146.0471954345703125 139.4148712158203125 126.616973876953125 133.150970458984375 137.3023223876953125 141.4937286376953125 131.323760986328125 134.7677459716796875 144.332672119140625 148.283050537109375 146.606414794921875 136.8291473388671875 136.6 [...]
+ 136.6953277587890625 138.1971893310546875 145.8376617431640625 149.7340850830078125 148.1543121337890625 149.648956298828125 151.1035919189453125 149.3681793212890625 143.437774658203125 142.195281982421875 134.27130126953125 145.708526611328125 146.0153961181640625 135.2770538330078125 126.4555206298828125 135.3006744384765625 142.2508087158203125 145.783203125 142.024505615234375 138.3377838134765625 146.3483123779296875 151.6541900634765625 141.872344970703125 138.7046356201171875 14 [...]
+ 129.4226837158203125 133.5117645263671875 140.0296173095703125 143.4622650146484375 142.4554443359375 147.5742645263671875 150.667755126953125 147.91424560546875 143.2381134033203125 138.3577728271484375 138.1897735595703125 144.0892181396484375 140.369384765625 137.0963592529296875 136.884857177734375 137.3574676513671875 139.802703857421875 145.375091552734375 142.22906494140625 136.39013671875 145.3533172607421875 149.656097412109375 145.70904541015625 142.938323974609375 146.1348114 [...]
+ 139.2057037353515625 135.9355621337890625 136.2894744873046875 138.3431396484375 139.5531158447265625 145.5137481689453125 150.027618408203125 143.668670654296875 142.121337890625 141.2480316162109375 143.0847930908203125 141.9848480224609375 143.7325286865234375 141.85260009765625 130.091094970703125 138.9800872802734375 145.2055511474609375 148.018035888671875 149.156402587890625 146.80389404296875 144.9857635498046875 149.230560302734375 148.3544769287109375 147.2167816162109375 141. [...]
+ 144.0026397705078125 147.6641387939453125 147.0720672607421875 147.0747222900390625 146.9569549560546875 148.4623565673828125 151.0540618896484375 148.1483154296875 147.8220672607421875 147.8322601318359375 144.6734619140625 147.9318389892578125 149.687591552734375 142.4987945556640625 132.10748291015625 143.0980377197265625 149.379058837890625 152.8295135498046875 153.8564453125 148.789581298828125 149.15155029296875 149.753509521484375 148.8880462646484375 147.524169921875 139.9223937 [...]
+ 137.2118377685546875 143.8779144287109375 147.826385498046875 149.1351470947265625 148.1861419677734375 151.009613037109375 152.50152587890625 150.4476776123046875 152.3717041015625 151.8279571533203125 145.6611480712890625 144.2235565185546875 151.41046142578125 143.842987060546875 139.0353546142578125 137.286346435546875 146.53948974609375 148.43426513671875 149.652069091796875 155.083740234375 153.2807159423828125 151.888031005859375 150.4818115234375 145.1556549072265625 138.4151000 [...]
+ 142.6156768798828125 143.3248443603515625 142.9074859619140625 145.021240234375 147.4858551025390625 152.3035736083984375 152.524505615234375 149.6174468994140625 152.135955810546875 152.384063720703125 151.340728759765625 145.8332366943359375 151.36260986328125 144.466552734375 144.6443939208984375 144.677459716796875 148.408966064453125 144.84112548828125 150.40643310546875 153.6478271484375 151.534271240234375 148.005859375 147.7304840087890625 146.109893798828125 141.50750732421875  [...]
+ 146.4464874267578125 149.9470672607421875 149.851318359375 150.45892333984375 150.943389892578125 151.356353759765625 149.333160400390625 146.9367218017578125 148.457763671875 150.440765380859375 152.1422882080078125 151.2055511474609375 150.43304443359375 148.4557952880859375 150.0448455810546875 151.7680511474609375 149.8102569580078125 150.1890106201171875 150.921112060546875 152.8441619873046875 149.384033203125 145.890655517578125 146.08148193359375 147.6517791748046875 134.8669891 [...]
+ 149.229400634765625 149.5843505859375 151.0136566162109375 153.308837890625 151.8264007568359375 151.3973541259765625 148.2374420166015625 142.748443603515625 143.9563446044921875 146.1430206298828125 151.615692138671875 148.2039031982421875 150.601898193359375 146.01495361328125 148.2628173828125 152.1550445556640625 153.037445068359375 154.307403564453125 154.044464111328125 153.849609375 148.9234466552734375 147.418792724609375 148.2555389404296875 148.39056396484375 139.245483398437 [...]
+ 145.6008758544921875 146.5866546630859375 148.9673309326171875 150.96087646484375 147.15350341796875 149.929718017578125 148.4118804931640625 145.0728607177734375 141.4710540771484375 143.09857177734375 148.1376800537109375 144.818450927734375 145.95452880859375 143.4318389892578125 145.4749603271484375 153.556976318359375 147.44342041015625 149.3437042236328125 149.281494140625 152.1805419921875 153.038726806640625 150.0785675048828125 148.87255859375 148.77813720703125 140.57760620117 [...]
+ 144.610107421875 143.3088836669921875 146.5263214111328125 145.3155975341796875 143.4387969970703125 146.086029052734375 144.4864654541015625 143.167572021484375 139.3314056396484375 139.8380126953125 147.4680633544921875 146.2111663818359375 141.477813720703125 143.4721832275390625 142.04925537109375 146.6082000732421875 139.6665496826171875 145.5769500732421875 144.5732269287109375 147.6779937744140625 152.2714080810546875 146.7595062255859375 143.7660369873046875 142.5469970703125 13 [...]
+ 146.478515625 146.0313873291015625 139.70928955078125 139.153839111328125 138.721038818359375 137.6107177734375 138.5416107177734375 137.6981353759765625 135.7020263671875 137.1555328369140625 139.4978179931640625 142.367828369140625 139.2270050048828125 142.012176513671875 136.329986572265625 136.0659027099609375 142.74407958984375 149.071502685546875 150.068878173828125 149.6579132080078125 150.1019134521484375 145.9448699951171875 143.166351318359375 140.8715667724609375 146.33630371 [...]
+ 148.358123779296875 143.8025054931640625 138.5731964111328125 139.7958221435546875 137.3817901611328125 140.8617095947265625 134.361572265625 133.665283203125 133.665771484375 133.9311981201171875 133.2723541259765625 134.4519805908203125 135.928009033203125 136.934967041015625 132.52862548828125 140.266815185546875 145.611846923828125 151.79052734375 149.5266876220703125 143.7358551025390625 146.3134765625 149.832244873046875 144.5246734619140625 140.200164794921875 146.030975341796875 [...]
+ 143.39373779296875 138.4779052734375 140.41851806640625 143.7269744873046875 143.28118896484375 147.3324127197265625 144.314483642578125 140.9261627197265625 144.352447509765625 137.88165283203125 131.3669586181640625 131.7437744140625 131.69720458984375 132.8094482421875 131.650299072265625 140.4344329833984375 143.7306365966796875 148.1287994384765625 143.9407501220703125 140.2152099609375 148.3995513916015625 150.547027587890625 147.70111083984375 141.0160369873046875 140.12791442871 [...]
+ 140.3860015869140625 143.34564208984375 143.2276763916015625 146.9696044921875 149.668670654296875 149.9356536865234375 145.820220947265625 142.5973358154296875 143.699981689453125 139.1071624755859375 141.5953216552734375 135.5308990478515625 129.8209991455078125 129.6488189697265625 129.853515625 134.7656097412109375 139.6417236328125 142.156646728515625 140.0003662109375 138.328887939453125 147.182464599609375 146.5926361083984375 141.5390167236328125 146.077301025390625 144.29148864 [...]
+ 141.078216552734375 145.12255859375 148.300994873046875 149.9993743896484375 153.992523193359375 153.02825927734375 146.9098052978515625 147.2720794677734375 144.4818878173828125 142.26153564453125 149.3726043701171875 143.80938720703125 136.640472412109375 129.65887451171875 129.03277587890625 129.6991729736328125 133.888153076171875 137.2769775390625 133.84100341796875 139.0386199951171875 143.8101043701171875 143.5134735107421875 139.216796875 144.15399169921875 145.8907623291015625  [...]
+ 143.100616455078125 145.6425628662109375 149.9514617919921875 154.1868133544921875 155.3574066162109375 153.145477294921875 146.9533538818359375 148.162841796875 147.238616943359375 145.3052520751953125 150.871917724609375 150.2068634033203125 145.5019989013671875 142.405120849609375 137.1011810302734375 127.8035125732421875 127.89827728271484375 129.21368408203125 129.9725494384765625 136.49713134765625 140.646270751953125 138.4807281494140625 137.5640716552734375 142.37762451171875 14 [...]
+ 143.7816925048828125 148.1285247802734375 151.3486175537109375 154.4197540283203125 156.221710205078125 153.8486480712890625 147.3661956787109375 146.147613525390625 151.484649658203125 152.0695037841796875 152.9053192138671875 151.1960296630859375 149.8976898193359375 142.989044189453125 140.3633575439453125 133.15789794921875 126.725189208984375 127.26966094970703125 128.395782470703125 132.97076416015625 136.357696533203125 132.93792724609375 135.490142822265625 134.9169921875 140.74 [...]
+ 146.454193115234375 147.321380615234375 149.1821746826171875 149.6888275146484375 153.4170379638671875 153.44647216796875 147.766265869140625 146.03375244140625 151.1726531982421875 152.6468353271484375 151.219940185546875 148.7503509521484375 149.9815826416015625 146.1823272705078125 145.0864410400390625 142.4794769287109375 134.8667144775390625 125.8789520263671875 125.26758575439453125 129.743560791015625 128.1856231689453125 134.0999298095703125 133.802276611328125 134.4626159667968 [...]
+ 147.0452423095703125 146.196136474609375 147.0951690673828125 149.65814208984375 151.1097259521484375 153.781494140625 151.0351409912109375 144.4349212646484375 147.4030303955078125 150.69378662109375 151.36328125 145.5135345458984375 145.647491455078125 149.1414642333984375 147.0780181884765625 144.80694580078125 139.9447479248046875 138.2981414794921875 124.92035675048828125 125.3000640869140625 129.401123046875 135.793853759765625 138.1757354736328125 131.692901611328125 134.04408264 [...]
+ 149.8548583984375 147.2035369873046875 146.210357666015625 150.1793212890625 154.985382080078125 155.417724609375 151.5817718505859375 144.3494110107421875 143.4996337890625 146.74969482421875 147.8526458740234375 148.511260986328125 146.013427734375 143.604705810546875 144.742462158203125 141.98931884765625 139.8372650146484375 132.30694580078125 127.4012908935546875 123.9876708984375 127.7198638916015625 136.263671875 136.876068115234375 129.399658203125 127.6154632568359375 131.52189 [...]
+ 149.42547607421875 149.24737548828125 147.5106353759765625 147.214691162109375 149.7722625732421875 154.1632843017578125 149.0718536376953125 144.354522705078125 140.940826416015625 146.758758544921875 143.965667724609375 145.31365966796875 146.13232421875 138.6285552978515625 145.0863494873046875 144.360809326171875 141.89300537109375 141.75408935546875 137.6600341796875 130.2151641845703125 134.5472564697265625 132.500335693359375 132.692901611328125 128.0147552490234375 124.482681274 [...]
+ 147.4726104736328125 150.81866455078125 150.0279541015625 146.7676239013671875 149.9260711669921875 152.4222412109375 146.529998779296875 142.9050445556640625 139.693267822265625 145.2451019287109375 144.0098876953125 141.89239501953125 145.20404052734375 138.2698211669921875 139.5865936279296875 139.7916717529296875 137.5120697021484375 134.13397216796875 133.5379791259765625 122.93548583984375 123.906646728515625 124.61463165283203125 129.74951171875 126.89791107177734375 125.07440185 [...]
+ 149.8500518798828125 150.50823974609375 153.6005706787109375 148.7681121826171875 149.8945159912109375 149.7730712890625 148.2449798583984375 151.08538818359375 139.3945465087890625 142.212677001953125 140.2597198486328125 137.99658203125 136.4167633056640625 133.7644500732421875 133.981170654296875 132.6351318359375 131.6019134521484375 130.7250823974609375 124.14319610595703125 122.6008148193359375 121.924163818359375 122.82752227783203125 123.69445037841796875 124.944793701171875 124 [...]
+ 152.512359619140625 153.1404571533203125 152.8338470458984375 149.0073089599609375 148.699066162109375 147.8865814208984375 147.523773193359375 147.490325927734375 140.3529205322265625 135.1087493896484375 136.4930572509765625 135.414398193359375 133.61297607421875 133.68194580078125 130.709320068359375 128.3641815185546875 131.3696746826171875 128.60626220703125 133.1479644775390625 134.2789764404296875 124.04567718505859375 121.24761962890625 121.2339019775390625 120.90381622314453125 [...]
+ 146.7382659912109375 149.9534912109375 150.4296417236328125 144.54364013671875 147.79669189453125 145.54168701171875 145.4381256103515625 145.20587158203125 141.906768798828125 138.11883544921875 136.431365966796875 136.1527557373046875 139.3703460693359375 138.290802001953125 142.5928955078125 138.970001220703125 137.838134765625 139.11859130859375 138.4427032470703125 134.8520965576171875 130.5473785400390625 133.1809844970703125 125.79126739501953125 120.8803558349609375 118.76145935 [...]
+ 143.67413330078125 146.799285888671875 144.2581024169921875 141.445709228515625 147.4324493408203125 147.4847259521484375 145.8419952392578125 148.1535186767578125 145.15460205078125 144.0810089111328125 145.301422119140625 145.166534423828125 144.133697509765625 143.68475341796875 142.5915679931640625 142.253936767578125 141.594940185546875 144.609130859375 142.03607177734375 132.9160308837890625 132.4170379638671875 137.8823394775390625 138.2690277099609375 134.2705535888671875 130.12 [...]
+ 141.07421875 143.24566650390625 138.2341461181640625 145.8363800048828125 147.618133544921875 150.5208282470703125 147.0788726806640625 147.5430908203125 145.7558746337890625 145.43695068359375 146.607086181640625 146.4202117919921875 145.5345001220703125 143.8119354248046875 143.952117919921875 144.491729736328125 143.5471038818359375 146.915374755859375 139.6185150146484375 136.1346282958984375 133.81549072265625 135.3961181640625 137.3094940185546875 133.0479888916015625 129.85142517 [...]
+ 136.388397216796875 137.420623779296875 139.4173736572265625 144.00836181640625 143.436279296875 146.5018768310546875 149.8101806640625 149.5762786865234375 148.87432861328125 146.886810302734375 145.835296630859375 146.3538970947265625 146.307159423828125 144.690216064453125 143.8394927978515625 143.4831695556640625 145.6604766845703125 146.066375732421875 141.8505096435546875 141.137908935546875 134.103179931640625 129.1242828369140625 129.1933441162109375 125.4534912109375 120.309196 [...]
+ 134.31622314453125 135.3301849365234375 138.3215484619140625 142.590057373046875 137.85986328125 142.4929351806640625 149.6547698974609375 149.91790771484375 148.64501953125 147.8347930908203125 145.0321807861328125 144.5107879638671875 146.6013031005859375 145.625244140625 143.903656005859375 142.8988800048828125 146.3412322998046875 145.7271270751953125 138.5863800048828125 139.64892578125 129.8818817138671875 130.2429962158203125 126.1637725830078125 124.755035400390625 126.369697570 [...]
+ 131.0258941650390625 133.4357452392578125 136.6060333251953125 139.8017578125 138.2632904052734375 143.4972076416015625 146.4831695556640625 149.7229461669921875 145.93743896484375 147.5133819580078125 144.0481109619140625 143.126922607421875 144.11566162109375 144.1336669921875 143.007354736328125 147.46722412109375 146.33575439453125 143.98651123046875 137.5222320556640625 130.8992156982421875 132.4263763427734375 134.69439697265625 131.56060791015625 124.1989593505859375 135.18382263 [...]
+ 133.132080078125 129.2080841064453125 135.6617889404296875 135.582122802734375 136.7506866455078125 140.50689697265625 142.2636871337890625 141.889312744140625 146.1226043701171875 146.481689453125 142.8524322509765625 140.6006927490234375 142.066864013671875 142.326416015625 143.7673797607421875 144.683685302734375 140.1280059814453125 136.2891998291015625 132.861572265625 135.6340789794921875 138.3406982421875 137.034698486328125 135.43463134765625 127.06873321533203125 136.9693145751 [...]
+ 137.162078857421875 129.2805328369140625 131.2506866455078125 130.3432159423828125 136.6608123779296875 132.7736663818359375 135.8661346435546875 139.765655517578125 145.969268798828125 145.8376617431640625 142.0244140625 140.7583160400390625 139.29193115234375 142.3719024658203125 141.0747833251953125 138.3817291259765625 137.864501953125 137.3391571044921875 139.908538818359375 142.0657196044921875 145.730072021484375 140.06243896484375 140.0825653076171875 135.27410888671875 134.6638 [...]
+ 137.0872039794921875 130.377197265625 125.88219451904296875 132.8903961181640625 129.30950927734375 137.8672943115234375 143.227935791015625 148.5181884765625 146.9207916259765625 141.5014801025390625 141.4124908447265625 136.0098876953125 138.702239990234375 142.8248138427734375 145.4481964111328125 142.0312957763671875 142.304840087890625 141.588897705078125 143.907989501953125 143.874908447265625 147.369232177734375 139.199005126953125 144.0262451171875 140.8574066162109375 135.37104 [...]
+ 139.22705078125 138.784423828125 125.5641326904296875 127.11800384521484375 129.18280029296875 133.2437286376953125 142.8574676513671875 147.099639892578125 145.1548004150390625 140.529052734375 135.442779541015625 135.8952484130859375 135.469451904296875 138.2853851318359375 145.278961181640625 146.0285186767578125 145.2875823974609375 144.6165924072265625 144.57208251953125 146.052215576171875 147.7910003662109375 144.53009033203125 149.175872802734375 141.7142791748046875 135.2539520 [...]
+ 142.238525390625 137.6444244384765625 124.85475921630859375 128.8133392333984375 136.1479644775390625 139.33258056640625 141.586669921875 144.34161376953125 140.4786224365234375 139.171722412109375 133.3716583251953125 132.8542327880859375 135.0098724365234375 141.8283233642578125 146.2578125 148.44329833984375 148.7773284912109375 148.5148468017578125 149.235626220703125 146.7382659912109375 148.597320556640625 147.5360870361328125 149.283721923828125 140.373138427734375 140.0327453613 [...]
+ 137.1536712646484375 133.212738037109375 123.55434417724609375 127.3555145263671875 135.690216064453125 134.500396728515625 139.686065673828125 139.5676727294921875 135.5297393798828125 137.4039154052734375 133.98077392578125 129.639923095703125 135.9020233154296875 142.41314697265625 140.13629150390625 145.68280029296875 152.6353607177734375 151.122711181640625 149.74102783203125 150.376861572265625 150.0189361572265625 150.74066162109375 149.5147247314453125 147.158843994140625 145.63 [...]
+ 130.5011138916015625 130.0653533935546875 126.909881591796875 123.31378173828125 131.9155731201171875 131.5290069580078125 135.468902587890625 131.4384765625 129.501434326171875 137.4304962158203125 130.1631011962890625 129.7274932861328125 136.5179901123046875 136.31658935546875 140.6055908203125 148.0834197998046875 148.192108154296875 147.011444091796875 142.2003326416015625 148.3683624267578125 149.92022705078125 149.2904205322265625 150.7860260009765625 149.5284271240234375 147.926 [...]
+ 140.2483673095703125 137.23431396484375 127.99819183349609375 121.887542724609375 128.9037628173828125 133.1471710205078125 130.6681365966796875 128.7241973876953125 129.2733612060546875 133.8663787841796875 130.212432861328125 128.885528564453125 131.992401123046875 132.455780029296875 140.9739990234375 143.2407379150390625 141.655731201171875 139.8488922119140625 146.040130615234375 150.3853759765625 149.4295806884765625 146.353240966796875 147.79345703125 150.6153411865234375 151.987 [...]
+ 144.082550048828125 134.3506317138671875 133.3423919677734375 120.74398040771484375 124.84462738037109375 127.15887451171875 125.0593719482421875 128.1636962890625 134.0034332275390625 134.73004150390625 128.854217529296875 126.92111968994140625 133.5211029052734375 137.32135009765625 137.290435791015625 136.0577239990234375 137.06439208984375 138.5523223876953125 146.3978729248046875 147.7234039306640625 146.7308349609375 145.066192626953125 143.1044921875 148.0672607421875 149.5284423 [...]
+ 144.6318206787109375 141.5373687744140625 133.313720703125 128.937164306640625 120.0092010498046875 124.19998931884765625 127.0645751953125 130.805877685546875 131.104217529296875 133.6890106201171875 127.40734100341796875 127.30142974853515625 134.7174530029296875 134.735198974609375 129.977203369140625 130.8543853759765625 132.434478759765625 142.313323974609375 145.3399200439453125 138.56951904296875 144.9349212646484375 148.1447296142578125 140.624481201171875 142.1993560791015625 1 [...]
+ 144.4709930419921875 139.9132843017578125 131.9453582763671875 128.9992828369140625 119.9594268798828125 120.0596160888671875 127.317535400390625 126.29537200927734375 130.7899627685546875 133.5662384033203125 125.86753082275390625 126.72613525390625 130.182769775390625 127.2545928955078125 130.894012451171875 135.8419342041015625 141.1100006103515625 141.87554931640625 142.4949188232421875 137.8859405517578125 143.3615264892578125 143.2767181396484375 137.8639373779296875 137.955215454 [...]
+ 143.6918182373046875 142.6682586669921875 139.3832855224609375 137.6778717041015625 129.275665283203125 118.54053497314453125 121.88451385498046875 126.016082763671875 132.005462646484375 129.0300445556640625 121.8312225341796875 123.7677154541015625 124.5759124755859375 129.0514678955078125 136.5513458251953125 141.909515380859375 144.0971527099609375 138.5260162353515625 137.6914215087890625 134.2551727294921875 140.365570068359375 135.1271514892578125 136.9583587646484375 138.2694244 [...]
+ 139.9224395751953125 137.5917205810546875 135.912841796875 134.0670928955078125 130.51580810546875 117.67121124267578125 120.51700592041015625 125.71007537841796875 130.5230865478515625 128.42547607421875 120.1285858154296875 127.75780487060546875 131.548004150390625 133.8554840087890625 136.8188629150390625 141.486602783203125 142.48724365234375 139.3353424072265625 131.3099517822265625 134.4240875244140625 132.6273651123046875 134.3537750244140625 134.9155426025390625 143.546630859375 [...]
+ 133.6662750244140625 130.970947265625 128.0332489013671875 125.45342254638671875 127.69402313232421875 118.0000762939453125 116.5520477294921875 122.93448638916015625 128.8055267333984375 128.202850341796875 118.89884185791015625 128.844970703125 134.6186065673828125 136.858489990234375 136.8803253173828125 138.2613983154296875 139.485687255859375 136.7071990966796875 132.818511962890625 129.83489990234375 131.222808837890625 132.021636962890625 139.875732421875 142.9745025634765625 145 [...]
+ 140.4013214111328125 135.8564300537109375 133.842742919921875 130.0566253662109375 121.77561187744140625 116.36871337890625 117.77923583984375 123.8314666748046875 129.8030853271484375 129.6723175048828125 117.98908233642578125 123.5682830810546875 131.4443359375 134.910247802734375 133.20196533203125 134.3142242431640625 133.6341552734375 129.8984527587890625 128.9085540771484375 123.77742767333984375 128.04180908203125 132.019866943359375 138.3221435546875 145.3799591064453125 148.473 [...]
+ 140.5352325439453125 136.130828857421875 133.3301544189453125 130.5733184814453125 127.99831390380859375 122.3558349609375 115.61562347412109375 120.56719970703125 128.3167266845703125 129.1197052001953125 117.270416259765625 120.37105560302734375 126.2329864501953125 129.7483367919921875 132.4878997802734375 131.1613922119140625 126.762969970703125 126.47026824951171875 121.51456451416015625 125.632659912109375 132.6495208740234375 138.498291015625 143.143890380859375 148.127197265625  [...]
+ 138.4471435546875 135.8393402099609375 125.9966888427734375 124.12638092041015625 118.75670623779296875 115.34813690185546875 114.52130126953125 120.15252685546875 122.14081573486328125 129.748199462890625 116.76006317138671875 119.46343231201171875 126.98638916015625 132.5956878662109375 131.18658447265625 125.1077880859375 123.65149688720703125 120.9191436767578125 122.873687744140625 132.1357574462890625 131.1900634765625 136.3782196044921875 143.286102294921875 146.1417083740234375  [...]
+ 137.39288330078125 138.4335479736328125 132.7012786865234375 128.9994354248046875 128.0439453125 122.097808837890625 116.347808837890625 119.75392913818359375 127.42940521240234375 128.643951416015625 115.6584625244140625 117.66779327392578125 126.926116943359375 123.22479248046875 124.47388458251953125 120.3208160400390625 118.973236083984375 123.41641998291015625 128.69097900390625 127.612274169921875 138.50054931640625 137.3070526123046875 143.238494873046875 143.38385009765625 134.6 [...]
+ 137.43621826171875 140.4673614501953125 138.7571868896484375 134.3459320068359375 128.8752288818359375 124.50154876708984375 112.9344024658203125 118.190032958984375 126.7027740478515625 126.63054656982421875 116.872314453125 118.8446044921875 122.25864410400390625 124.24495697021484375 119.9729156494140625 116.85398101806640625 126.8017120361328125 130.722625732421875 137.3390350341796875 137.9708251953125 138.9445343017578125 143.67266845703125 141.433929443359375 137.783416748046875  [...]
+ 136.812591552734375 137.4344635009765625 134.427520751953125 135.8284912109375 130.587921142578125 124.47064208984375 112.06970977783203125 115.136077880859375 121.07228851318359375 124.63153076171875 119.4707183837890625 115.9036712646484375 118.8616180419921875 118.008941650390625 115.7239990234375 125.18087005615234375 127.0298309326171875 132.4425048828125 140.757293701171875 142.8883514404296875 144.047454833984375 143.4516448974609375 138.429779052734375 131.7594757080078125 130.1 [...]
+ 135.6642913818359375 129.670257568359375 128.9738616943359375 132.56060791015625 130.6150054931640625 126.1596221923828125 112.389251708984375 112.88712310791015625 117.36688995361328125 122.12563323974609375 126.21517181396484375 111.93201446533203125 112.78978729248046875 115.8617706298828125 120.65843963623046875 128.0344696044921875 135.9444122314453125 135.2452850341796875 135.7529144287109375 139.076629638671875 144.42242431640625 143.2642364501953125 140.803070068359375 131.07754 [...]
+ 134.4747161865234375 132.398681640625 123.99745941162109375 122.6306915283203125 123.2240753173828125 124.5695037841796875 113.701202392578125 115.59673309326171875 117.47223663330078125 120.9713134765625 123.13848876953125 111.35974884033203125 114.644744873046875 121.5380401611328125 125.6194000244140625 131.8370361328125 132.693450927734375 127.5439605712890625 130.1828460693359375 133.712005615234375 140.9945831298828125 138.2637176513671875 137.8300933837890625 130.717071533203125  [...]
+ 132.1120452880859375 134.7157745361328125 130.618408203125 122.37825775146484375 116.29592132568359375 120.99951934814453125 117.2734222412109375 110.09671783447265625 113.5811614990234375 118.38067626953125 120.767913818359375 110.07482147216796875 116.47502899169921875 124.002899169921875 128.07720947265625 127.08655548095703125 122.7725982666015625 126.06330108642578125 128.883087158203125 135.1742401123046875 140.2155914306640625 137.7320556640625 133.7209625244140625 127.9193954467 [...]
+ 129.6407318115234375 133.055908203125 127.11722564697265625 123.13824462890625 125.7418060302734375 122.33498382568359375 113.56006622314453125 110.36226654052734375 111.54888153076171875 114.4781036376953125 115.79567718505859375 108.96750640869140625 119.72353363037109375 122.89685821533203125 122.6382598876953125 119.013916015625 125.2107696533203125 127.717437744140625 134.5111083984375 137.8326416015625 137.9626007080078125 133.98590087890625 131.392974853515625 123.100090026855468 [...]
+ 132.295196533203125 135.0467376708984375 127.0996856689453125 132.1926727294921875 128.0685577392578125 118.5821075439453125 117.383575439453125 110.395416259765625 109.01621246337890625 112.17646026611328125 108.8506927490234375 113.31066131591796875 116.48639678955078125 114.67925262451171875 118.9358062744140625 123.4665679931640625 130.730224609375 135.16339111328125 135.7212371826171875 137.5746612548828125 132.1930084228515625 130.0169677734375 125.61969757080078125 123.0525817871 [...]
+ 126.098846435546875 129.830291748046875 135.5699005126953125 134.17608642578125 128.7869873046875 129.6141510009765625 126.73431396484375 117.19155120849609375 107.3729400634765625 108.5641937255859375 108.65187835693359375 114.7010040283203125 113.31356048583984375 121.03592681884765625 126.61493682861328125 123.55982208251953125 129.9496307373046875 136.108978271484375 138.3020477294921875 133.7476959228515625 131.3597564697265625 128.3137969970703125 122.64238739013671875 129.3862762 [...]
+ 132.28973388671875 133.623626708984375 131.9107818603515625 134.536285400390625 134.49346923828125 134.60186767578125 128.0091552734375 123.2059783935546875 106.89180755615234375 106.7613677978515625 107.01605224609375 109.3484649658203125 117.45926666259765625 124.496063232421875 130.632171630859375 131.9472503662109375 130.8498382568359375 136.256195068359375 137.1728668212890625 134.14849853515625 124.72425079345703125 123.78022003173828125 122.51911163330078125 131.425048828125 135. [...]
+ 130.0936737060546875 127.03249359130859375 130.0998992919921875 132.99090576171875 134.2086944580078125 132.7196044921875 123.9351959228515625 117.94452667236328125 115.14129638671875 105.7564239501953125 108.06974029541015625 114.01546478271484375 114.883636474609375 122.64234161376953125 127.38385772705078125 131.9467620849609375 134.487640380859375 137.431884765625 134.6024017333984375 134.0993499755859375 126.77203369140625 121.4040985107421875 123.38327789306640625 127.903411865234 [...]
+ 121.7080078125 123.4837799072265625 127.95078277587890625 132.344818115234375 130.1439361572265625 129.7321319580078125 128.6598968505859375 123.60796356201171875 115.00276947021484375 109.30773162841796875 109.511383056640625 112.56170654296875 117.2813262939453125 125.4180450439453125 129.35406494140625 132.152008056640625 131.8250274658203125 131.789398193359375 132.928192138671875 130.4698333740234375 126.39333343505859375 117.6726531982421875 123.81511688232421875 133.0339965820312 [...]
+ 117.98122406005859375 123.0048828125 127.85198974609375 128.3892822265625 128.9704437255859375 123.5386810302734375 129.609649658203125 123.08666229248046875 116.58679962158203125 105.42218780517578125 107.7723388671875 111.42650604248046875 116.67208099365234375 122.34839630126953125 122.171173095703125 121.3558807373046875 124.05893707275390625 132.0251312255859375 129.7551727294921875 128.2777252197265625 123.05157470703125 116.2853240966796875 122.28884124755859375 130.0123443603515 [...]
+ 116.8243560791015625 121.23270416259765625 126.7196044921875 122.01318359375 121.38185882568359375 120.02417755126953125 124.316986083984375 123.185272216796875 117.8061676025390625 106.02457427978515625 107.14521026611328125 106.745513916015625 110.09241485595703125 111.65813446044921875 117.20249176025390625 120.168243408203125 124.426544189453125 131.96417236328125 122.50934600830078125 123.10706329345703125 120.51865386962890625 116.72185516357421875 123.7750396728515625 130.5979919 [...]
+ 118.64798736572265625 123.09571075439453125 125.99176788330078125 118.75962066650390625 117.37595367431640625 115.34552001953125 117.44134521484375 118.24716949462890625 112.4441375732421875 103.67948150634765625 108.38745880126953125 112.13951873779296875 118.89351654052734375 122.27099609375 125.84825897216796875 128.310028076171875 130.84356689453125 128.943511962890625 130.0499420166015625 123.1808319091796875 113.92038726806640625 117.143310546875 124.6316986083984375 131.176956176 [...]
+ 116.61849212646484375 121.41487884521484375 122.20450592041015625 122.71314239501953125 120.370025634765625 112.9321441650390625 110.3443603515625 115.1115875244140625 111.966278076171875 103.50254058837890625 106.98955535888671875 114.8834991455078125 122.4476165771484375 121.61576080322265625 123.42545318603515625 130.5285797119140625 132.283538818359375 127.0641937255859375 127.4285125732421875 123.782501220703125 112.92919921875 118.33884429931640625 123.028228759765625 129.31938171 [...]
+ 112.67670440673828125 115.70191192626953125 126.3607025146484375 128.474639892578125 128.2648468017578125 121.70111083984375 116.96495819091796875 107.1300048828125 106.65180206298828125 102.12499237060546875 106.02677154541015625 108.36536407470703125 113.78290557861328125 120.7123260498046875 129.19183349609375 132.6297454833984375 132.533111572265625 122.85538482666015625 123.0667877197265625 116.48075103759765625 112.0604095458984375 122.76416778564453125 128.4766082763671875 131.57 [...]
+ 108.979827880859375 117.9922943115234375 123.79380035400390625 124.6200103759765625 130.4305419921875 126.739776611328125 120.08766937255859375 107.94751739501953125 103.6443939208984375 102.08454132080078125 108.38910675048828125 120.086883544921875 121.29607391357421875 120.89066314697265625 128.387664794921875 129.501983642578125 131.1485748291015625 126.51959228515625 120.349151611328125 112.58187103271484375 114.431793212890625 121.9650115966796875 127.98077392578125 129.8729248046 [...]
+ 109.12482452392578125 117.85773468017578125 119.2764892578125 124.7189178466796875 128.1548004150390625 122.64278411865234375 116.2888031005859375 107.799591064453125 102.08142852783203125 104.06644439697265625 108.54346466064453125 117.4570770263671875 123.27332305908203125 122.5699005126953125 122.79871368408203125 127.30054473876953125 129.639556884765625 126.3067474365234375 121.989532470703125 109.79723358154296875 113.922637939453125 121.080047607421875 123.9748992919921875 127.66 [...]
+ 107.7533721923828125 111.65068817138671875 113.63956451416015625 122.54160308837890625 124.35585784912109375 117.21715545654296875 114.62979888916015625 104.99652099609375 102.04828643798828125 103.94351959228515625 117.7122955322265625 116.968231201171875 115.4264678955078125 115.62790679931640625 119.362091064453125 125.7764434814453125 125.7841796875 123.79419708251953125 118.75508880615234375 114.71201324462890625 111.440948486328125 117.7713775634765625 122.67531585693359375 128.24 [...]
+ 107.81307220458984375 114.8634490966796875 118.35631561279296875 125.20477294921875 115.05770111083984375 110.15178680419921875 104.61840057373046875 102.0178070068359375 102.0178070068359375 102.245635986328125 107.6595611572265625 111.08040618896484375 115.0298004150390625 120.0572509765625 120.9146728515625 127.00643157958984375 121.4854736328125 122.62890625 115.90087127685546875 108.07540130615234375 115.2243499755859375 124.075531005859375 128.444854736328125 126.59859466552734375 [...]
+ 108.6503448486328125 116.05881500244140625 122.16213226318359375 126.19905853271484375 123.48857879638671875 120.5373687744140625 114.3941802978515625 101.99407958984375 102.0224456787109375 108.74913787841796875 115.6740264892578125 120.31343841552734375 121.325775146484375 126.1343231201171875 124.40029144287109375 125.693450927734375 118.615966796875 112.72734832763671875 111.46974945068359375 111.31084442138671875 121.05989837646484375 125.698516845703125 125.6165618896484375 121.50 [...]
+ 106.5276336669921875 113.10210418701171875 117.8045654296875 121.44821929931640625 125.52007293701171875 121.03887176513671875 104.89208984375 101.95684051513671875 102.119476318359375 110.44024658203125 115.6872711181640625 118.47800445556640625 120.63427734375 126.1632537841796875 127.88518524169921875 126.97664642333984375 121.66733551025390625 116.9298553466796875 105.5870819091796875 114.46048736572265625 122.9150390625 121.0921173095703125 116.26979827880859375 113.511619567871093 [...]
+ 103.6797027587890625 107.0944366455078125 110.86713409423828125 117.48871612548828125 123.7025299072265625 120.5233612060546875 104.814971923828125 101.93194580078125 103.00812530517578125 108.097686767578125 112.7468109130859375 120.169281005859375 122.04946136474609375 123.1888885498046875 122.4648284912109375 124.13481903076171875 114.5165863037109375 109.93511199951171875 104.6376190185546875 116.37204742431640625 119.42856597900390625 115.43987274169921875 109.7510528564453125 117. [...]
+ 102.66478729248046875 112.268280029296875 115.81304168701171875 122.6732330322265625 121.303741455078125 110.64995574951171875 101.86639404296875 101.922454833984375 101.90270233154296875 106.37117767333984375 111.3043670654296875 113.5153350830078125 114.343353271484375 116.2827606201171875 121.72801971435546875 119.07993316650390625 113.99988555908203125 104.16486358642578125 109.20897674560546875 115.967529296875 110.7865753173828125 108.128173828125 112.77768707275390625 116.0824356 [...]
+ 101.983428955078125 111.91909027099609375 116.5142364501953125 124.78466796875 125.8249359130859375 113.0055999755859375 102.535888671875 101.89588165283203125 101.89588165283203125 104.4175872802734375 111.242340087890625 117.49211883544921875 119.54508209228515625 123.92125701904296875 125.6191558837890625 124.41440582275390625 115.58333587646484375 103.22728729248046875 106.8532257080078125 109.41144561767578125 108.20682525634765625 115.01305389404296875 121.50299835205078125 126.07 [...]
+ 102.11679840087890625 109.23017120361328125 119.13315582275390625 124.29302215576171875 125.62351226806640625 120.702178955078125 107.967193603515625 101.8653411865234375 101.8633270263671875 106.34686279296875 111.59506988525390625 118.0806121826171875 122.6536865234375 125.02437591552734375 125.01087188720703125 122.75185394287109375 117.472869873046875 109.715301513671875 101.6972503662109375 104.32505035400390625 112.41403961181640625 119.37393951416015625 122.79438018798828125 124. [...]
+ 105.6492462158203125 115.53569793701171875 119.6066741943359375 122.53681182861328125 120.27553558349609375 120.25637054443359375 116.25379180908203125 101.83492279052734375 101.83483123779296875 101.97942352294921875 109.85219573974609375 117.08889007568359375 120.39864349365234375 123.130645751953125 121.9128570556640625 119.496063232421875 119.819091796875 116.29970550537109375 102.30931854248046875 107.7853851318359375 114.27394866943359375 116.924285888671875 116.686920166015625 12 [...]
+ 106.34334564208984375 114.30757904052734375 116.10546112060546875 117.9226531982421875 115.27126312255859375 115.16249847412109375 113.01151275634765625 101.80443572998046875 101.80443572998046875 101.85050201416015625 108.90943145751953125 114.99724578857421875 120.1730804443359375 122.93473052978515625 119.408477783203125 117.51563262939453125 117.07216644287109375 116.67718505859375 103.693084716796875 103.90924072265625 106.2334747314453125 108.663848876953125 119.75966644287109375  [...]
+ 108.428924560546875 112.8332366943359375 113.2501220703125 113.885772705078125 110.95215606689453125 110.06158447265625 107.200592041015625 102.584014892578125 101.77223968505859375 101.773956298828125 108.72592926025390625 114.47226715087890625 119.4448089599609375 121.413665771484375 120.51006317138671875 114.20824432373046875 112.34686279296875 114.20220184326171875 99.02361297607421875 105.7442474365234375 114.51845550537109375 119.59236907958984375 120.93042755126953125 120.2899627 [...]
+ 105.99932861328125 110.58469390869140625 107.533050537109375 109.4827117919921875 108.75981903076171875 108.68658447265625 106.238861083984375 104.6750946044921875 101.7900390625 101.78290557861328125 103.58563995361328125 111.7682647705078125 114.27523040771484375 115.8413238525390625 115.27005767822265625 108.66165924072265625 108.69342803955078125 109.8182220458984375 97.834716796875 106.5946502685546875 113.61948394775390625 117.73113250732421875 116.6786651611328125 116.48154449462 [...]
+ 100.4468994140625 99.7443695068359375 102.37100982666015625 104.1125335693359375 102.47925567626953125 103.43689727783203125 106.63278961181640625 99.7772369384765625 99.75022125244140625 99.76982879638671875 105.180206298828125 110.906402587890625 110.46620941162109375 110.1348876953125 107.54878997802734375 105.5117034912109375 106.300537109375 102.46518707275390625 97.56600189208984375 103.07042694091796875 109.20922088623046875 111.01880645751953125 111.8428497314453125 118.72497558 [...]
+ 95.83142852783203125 96.41802215576171875 97.11409759521484375 98.377044677734375 99.23792266845703125 100.45145416259765625 100.9786834716796875 103.53655242919921875 99.30220794677734375 99.45989227294921875 104.26523590087890625 107.3625030517578125 105.98925018310546875 104.018951416015625 107.6670989990234375 104.9168701171875 102.87541961669921875 102.75293731689453125 96.27727508544921875 98.84777069091796875 103.90984344482421875 112.50116729736328125 116.5254669189453125 116.70 [...]
+ 95.830078125 95.75226593017578125 95.37371063232421875 96.36122894287109375 96.83536529541015625 98.26573944091796875 98.2171783447265625 99.52927398681640625 95.10182952880859375 95.98036956787109375 100.3425140380859375 104.10614013671875 104.42391204833984375 101.42719268798828125 103.14910125732421875 103.99745941162109375 100.7295684814453125 100.6796417236328125 96.21083831787109375 99.86714935302734375 107.76436614990234375 111.50372314453125 113.89675140380859375 114.63330078125 [...]
+ 95.49999237060546875 95.785491943359375 95.59201812744140625 95.11251068115234375 94.69126129150390625 95.032867431640625 97.25428009033203125 97.5050811767578125 95.72426605224609375 95.0631866455078125 98.52449798583984375 102.4396209716796875 98.0775146484375 100.37636566162109375 100.966217041015625 102.34857177734375 99.1947174072265625 102.336883544921875 94.87862396240234375 100.5173187255859375 106.57495880126953125 108.376739501953125 109.74608612060546875 110.5877838134765625  [...]
+ 96.20619964599609375 96.35231781005859375 95.099517822265625 94.2712860107421875 94.73212432861328125 94.38292694091796875 95.0439453125 94.06488800048828125 96.1473541259765625 95.1239166259765625 95.63431549072265625 96.18480682373046875 95.23685455322265625 96.03469085693359375 95.7398223876953125 95.90320587158203125 97.0801544189453125 100.6519927978515625 94.06987762451171875 101.519287109375 104.4047088623046875 102.5739593505859375 106.93212890625 106.89839935302734375 106.89630 [...]
+ 114.8211822509765625 100.961273193359375 103.7197418212890625 94.86704254150390625 94.41963958740234375 94.368865966796875 93.2117919921875 95.117889404296875 94.320037841796875 94.05471038818359375 94.12625885009765625 94.569915771484375 94.73639678955078125 94.8470001220703125 94.52669525146484375 94.0880889892578125 94.426544189453125 93.3774261474609375 93.3438873291015625 99.87920379638671875 99.61824798583984375 100.110595703125 102.462921142578125 100.9293365478515625 103.2696456 [...]
+ 124.7664947509765625 110.75148773193359375 112.9425048828125 98.4692840576171875 94.31780242919921875 94.058624267578125 94.00513458251953125 93.35333251953125 92.1309967041015625 93.2491302490234375 94.4787139892578125 94.07756805419921875 94.01540374755859375 94.3256988525390625 93.74495697021484375 93.8000030517578125 92.5989990234375 93.3736724853515625 93.1732330322265625 98.4709930419921875 97.25115966796875 97.70014190673828125 97.93721771240234375 98.36241912841796875 103.438987 [...]
+ 130.082855224609375 127.66306304931640625 122.49729156494140625 122.991485595703125 118.61545562744140625 104.01709747314453125 92.6204986572265625 95.63718414306640625 93.2946624755859375 93.8089141845703125 93.375335693359375 92.1683502197265625 92.954071044921875 93.20484161376953125 94.963836669921875 93.9905548095703125 92.8085174560546875 92.18611907958984375 91.8643951416015625 91.3643646240234375 91.9477691650390625 94.1595001220703125 93.5845489501953125 96.98032379150390625 98 [...]
+ 130.053924560546875 134.5759429931640625 128.3421783447265625 118.8011932373046875 110.31671905517578125 102.30980682373046875 114.0401458740234375 118.1610260009765625 109.62512969970703125 94.1640167236328125 93.93939971923828125 91.319854736328125 92.07155609130859375 93.31491851806640625 95.90345001220703125 92.39910888671875 92.11231231689453125 91.90535736083984375 92.0383758544921875 90.6940765380859375 91.53079986572265625 91.06385040283203125 95.57920074462890625 94.48152923583 [...]
+ 127.427825927734375 133.705047607421875 127.261016845703125 119.062652587890625 103.68093109130859375 114.373291015625 109.90723419189453125 122.05023956298828125 112.49225616455078125 95.31560516357421875 94.1725311279296875 94.0188140869140625 92.0081634521484375 92.78934478759765625 92.934173583984375 92.65465545654296875 92.73059844970703125 91.10010528564453125 90.938262939453125 90.8342742919921875 90.6107025146484375 91.1977386474609375 91.3816070556640625 92.4686737060546875 93. [...]
+ 132.8655548095703125 130.9565887451171875 118.54593658447265625 110.874359130859375 116.2519073486328125 111.4656219482421875 121.05921173095703125 119.64870452880859375 110.35756683349609375 97.12010955810546875 98.4033355712890625 98.54842376708984375 110.67926788330078125 120.529266357421875 100.82309722900390625 94.52368927001953125 92.432769775390625 92.32635498046875 91.67084503173828125 92.1326751708984375 91.9688720703125 91.60781097412109375 91.36891937255859375 90.501098632812 [...]
+ 136.3496856689453125 129.178955078125 127.26792144775390625 127.5651702880859375 125.37686920166015625 113.463531494140625 119.7427215576171875 107.1798095703125 99.95391845703125 100.2819976806640625 112.3659515380859375 119.25054931640625 117.77275848388671875 123.27259063720703125 116.35211944580078125 123.99761962890625 106.94719696044921875 100.4630584716796875 94.739166259765625 93.64659881591796875 92.69141387939453125 91.4253997802734375 90.9349822998046875 90.7165069580078125 9 [...]
+ 135.0903472900390625 132.8905792236328125 134.312774658203125 130.4919281005859375 125.07225799560546875 122.21276092529296875 109.380828857421875 105.2165069580078125 113.8462371826171875 106.3072052001953125 112.44394683837890625 119.82448577880859375 128.5341949462890625 130.275360107421875 130.849334716796875 125.887298583984375 119.1988525390625 112.563201904296875 99.41729736328125 95.206298828125 93.35619354248046875 91.90765380859375 91.28668975830078125 90.89144134521484375 89. [...]
+ 135.4486846923828125 138.5984344482421875 131.2178802490234375 122.59809112548828125 119.07112884521484375 114.97231292724609375 118.18675994873046875 120.9064483642578125 124.0373382568359375 120.4480438232421875 105.21114349365234375 122.40833282470703125 128.9736175537109375 133.20013427734375 119.2871246337890625 107.78839874267578125 104.93846893310546875 101.877593994140625 99.127593994140625 99.00395965576171875 94.95526123046875 93.417022705078125 93.06539154052734375 92.8105087 [...]
+ 142.2846527099609375 143.1173248291015625 137.873382568359375 135.4098358154296875 127.7597808837890625 127.07933807373046875 117.64176177978515625 128.8155059814453125 127.47894287109375 115.9442901611328125 117.9736785888671875 116.4744110107421875 122.4976043701171875 132.619171142578125 128.1742095947265625 122.2711639404296875 115.59618377685546875 105.37705230712890625 117.41008758544921875 114.0988311767578125 96.8059234619140625 104.7799224853515625 111.01491546630859375 106.571 [...]
+ 141.7007598876953125 139.113739013671875 140.18450927734375 138.6341705322265625 134.0517578125 126.49054718017578125 123.93308258056640625 131.8383941650390625 123.95528411865234375 128.7540740966796875 127.16454315185546875 119.5765228271484375 124.2299041748046875 133.441680908203125 133.915802001953125 129.2591552734375 110.40618133544921875 119.783905029296875 119.66004180908203125 108.61602020263671875 98.47615814208984375 106.95369720458984375 118.15787506103515625 117.3522796630 [...]
+ 138.292572021484375 135.7084197998046875 138.60162353515625 134.8694610595703125 134.8898773193359375 132.0336456298828125 128.2016448974609375 135.2054443359375 135.6006927490234375 130.3778533935546875 124.47873687744140625 120.9388580322265625 128.9225616455078125 133.19183349609375 120.44561767578125 112.84929656982421875 120.7156219482421875 125.93665313720703125 117.461944580078125 102.22670745849609375 108.73688507080078125 113.5483551025390625 120.3365478515625 122.9998931884765 [...]
+ 135.08184814453125 133.700469970703125 138.0734405517578125 134.356781005859375 131.5060577392578125 132.33624267578125 128.152099609375 132.9718475341796875 135.484039306640625 136.0474090576171875 127.71910858154296875 133.4351959228515625 133.96173095703125 127.28572845458984375 119.2523345947265625 122.010955810546875 128.8910675048828125 113.7027587890625 111.0125579833984375 112.9824981689453125 120.8594207763671875 107.13330841064453125 120.18996429443359375 115.02227783203125 10 [...]
+ 129.1093292236328125 133.54052734375 137.3831024169921875 135.9885101318359375 131.89752197265625 129.91510009765625 129.21240234375 130.3203125 132.1102294921875 136.9936370849609375 136.798797607421875 137.4790496826171875 131.3461761474609375 121.45069122314453125 126.33789825439453125 125.22722625732421875 129.3465728759765625 126.43381500244140625 127.77138519287109375 116.62674713134765625 124.94484710693359375 111.323089599609375 122.26926422119140625 117.47858428955078125 123.65 [...]
+ 126.747650146484375 129.697662353515625 133.9808807373046875 132.3709869384765625 132.000640869140625 125.51090240478515625 125.1482391357421875 127.0964202880859375 130.1639251708984375 135.3621673583984375 134.02191162109375 134.1331024169921875 127.01030731201171875 132.783782958984375 136.737701416015625 135.0514678955078125 128.5502777099609375 133.1349334716796875 133.8657073974609375 123.17804718017578125 128.0096893310546875 116.4965362548828125 127.0688018798828125 127.00376129 [...]
+ 123.9901580810546875 124.8658599853515625 130.621185302734375 127.427581787109375 128.3437347412109375 128.856536865234375 123.84780120849609375 127.51166534423828125 131.3812103271484375 134.9035186767578125 132.398590087890625 130.866729736328125 129.93017578125 134.386993408203125 137.236328125 138.0766143798828125 134.7462921142578125 133.2103118896484375 133.1620025634765625 134.092071533203125 128.098114013671875 125.3753509521484375 129.958892822265625 128.8845977783203125 129.09 [...]
+ 121.19516754150390625 124.815093994140625 124.1371002197265625 124.603851318359375 128.7196197509765625 127.37702178955078125 121.49185943603515625 125.50119781494140625 131.7843170166015625 132.78399658203125 131.6146697998046875 126.7636871337890625 129.808746337890625 133.6927947998046875 136.026641845703125 137.161529541015625 134.792236328125 130.1536712646484375 128.2659454345703125 130.8152313232421875 132.133087158203125 130.6614227294921875 131.0341796875 126.07752227783203125  [...]
+ 119.907867431640625 119.30477142333984375 122.455810546875 126.24451446533203125 127.86762237548828125 122.20783233642578125 121.27455902099609375 128.519317626953125 131.2655792236328125 130.768463134765625 130.204254150390625 128.0130157470703125 125.29979705810546875 130.467193603515625 133.555694580078125 135.748291015625 132.9239959716796875 130.2368316650390625 126.5995635986328125 126.58824920654296875 130.434478759765625 131.843597412109375 128.249969482421875 124.67304992675781 [...]
+ 117.11313629150390625 114.64786529541015625 116.67401885986328125 120.44527435302734375 124.1228485107421875 119.2142486572265625 122.7993927001953125 127.43331146240234375 128.630645751953125 127.4747467041015625 126.3480377197265625 125.87067413330078125 123.02435302734375 128.4407196044921875 130.2665252685546875 132.328369140625 128.6322174072265625 125.98571014404296875 128.0974578857421875 123.16025543212890625 126.82045745849609375 129.20623779296875 128.6621551513671875 123.5558 [...]
+ 113.90717315673828125 114.32897186279296875 113.59139251708984375 115.82413482666015625 120.08042144775390625 116.45772552490234375 123.382781982421875 124.26682281494140625 125.19435882568359375 124.722686767578125 119.64311981201171875 122.169647216796875 121.06292724609375 125.4200439453125 127.4530487060546875 128.0616302490234375 126.959197998046875 123.2416229248046875 126.24725341796875 120.92108917236328125 121.54962158203125 123.98065948486328125 123.0251007080078125 121.610488 [...]
+ 125.58208465576171875 121.5009613037109375 111.7002716064453125 113.73860931396484375 117.0418701171875 114.64380645751953125 119.7098236083984375 118.9643707275390625 121.00576019287109375 117.6677093505859375 117.5770416259765625 121.27596282958984375 118.297271728515625 124.0821380615234375 125.8860321044921875 126.20842742919921875 125.246917724609375 121.45714569091796875 124.06827545166015625 117.83425140380859375 121.67014312744140625 123.6045684814453125 118.86734771728515625 11 [...]
+ 129.86334228515625 124.85401153564453125 111.96384429931640625 112.10657501220703125 113.8038787841796875 113.566650390625 116.31093597412109375 117.915679931640625 118.88426971435546875 116.46596527099609375 116.28365325927734375 116.1857452392578125 118.157745361328125 123.4911041259765625 121.921356201171875 123.0009613037109375 122.87652587890625 122.29657745361328125 121.72015380859375 116.74022674560546875 118.00522613525390625 122.7902374267578125 118.96912384033203125 118.386100 [...]
+ 130.9158782958984375 122.389312744140625 125.48952484130859375 110.8942413330078125 111.15216827392578125 112.98644256591796875 113.70012664794921875 117.2760162353515625 116.60050201416015625 115.25710296630859375 114.2274322509765625 113.6458892822265625 120.28382110595703125 122.0091094970703125 116.0455474853515625 119.43529510498046875 118.73302459716796875 121.85646820068359375 122.14553070068359375 119.4975738525390625 114.1049652099609375 116.69140625 115.58150482177734375 119.5 [...]
+ 132.519744873046875 131.54656982421875 128.7081451416015625 120.54825592041015625 110.22840118408203125 110.853759765625 111.34694671630859375 112.180267333984375 113.52492523193359375 116.60628509521484375 111.13196563720703125 112.615509033203125 117.5226593017578125 119.59712982177734375 113.712615966796875 116.1976776123046875 116.6925811767578125 119.44278717041015625 118.32802581787109375 118.76755523681640625 114.010284423828125 111.7158966064453125 113.20784759521484375 118.1183 [...]
+ 135.4275054931640625 137.8513031005859375 131.5162506103515625 128.8143463134765625 118.3727874755859375 109.47875213623046875 109.0540008544921875 108.6451873779296875 109.628509521484375 109.09365081787109375 108.701385498046875 111.276153564453125 111.82935333251953125 113.41704559326171875 112.1881103515625 113.3990478515625 114.87784576416015625 115.94086456298828125 112.46402740478515625 115.16851806640625 114.99256134033203125 111.3877716064453125 113.41741943359375 116.665115356 [...]
+ 137.083465576171875 134.6613616943359375 127.70966339111328125 119.7054901123046875 117.85860443115234375 109.99111175537109375 108.82796478271484375 108.23867034912109375 106.78859710693359375 107.13555908203125 106.967926025390625 106.98674774169921875 107.89719390869140625 111.19541168212890625 110.83708953857421875 111.25200653076171875 112.2169952392578125 112.51930999755859375 110.231719970703125 113.2361907958984375 112.49317169189453125 109.7885894775390625 108.68183135986328125 [...]
+ 138.904327392578125 138.935302734375 127.96826171875 115.95351409912109375 116.210174560546875 117.9048309326171875 111.57218170166015625 123.59746551513671875 121.11022186279296875 108.63411712646484375 106.40859222412109375 106.31861114501953125 106.1583099365234375 107.98523712158203125 109.720458984375 110.14806365966796875 110.79217529296875 110.60503387451171875 109.0517425537109375 109.64232635498046875 111.0879974365234375 111.45777130126953125 106.60890960693359375 108.95876312 [...]
+ 136.0551910400390625 129.0155792236328125 121.04308319091796875 128.0679473876953125 120.9245147705078125 125.34328460693359375 114.3264312744140625 129.17449951171875 123.8509063720703125 115.959259033203125 124.88286590576171875 117.97985076904296875 105.92295074462890625 105.220611572265625 106.70733642578125 106.6483154296875 108.652435302734375 108.16620635986328125 107.72351837158203125 107.54540252685546875 109.2845611572265625 109.04067230224609375 105.186492919921875 106.197494 [...]
+ 137.1124114990234375 130.2045440673828125 134.0711212158203125 125.452392578125 127.893707275390625 131.119537353515625 118.66658782958984375 129.9435577392578125 121.0579376220703125 119.94029998779296875 129.0186004638671875 119.145355224609375 117.21829986572265625 108.37624359130859375 104.58353424072265625 104.67620086669921875 105.02779388427734375 104.84456634521484375 105.5430145263671875 104.7290802001953125 106.8326568603515625 105.865814208984375 104.75302886962890625 103.862 [...]
+ 140.775787353515625 142.2751617431640625 139.2060699462890625 134.1814727783203125 134.92333984375 134.2548828125 120.071380615234375 132.1829071044921875 132.9547882080078125 126.31000518798828125 132.5486297607421875 125.450958251953125 123.55938720703125 125.7476806640625 110.0767669677734375 103.96714019775390625 103.51190948486328125 103.13817596435546875 103.071624755859375 102.33776092529296875 102.8082427978515625 103.4810028076171875 103.91571044921875 101.5659942626953125 101. [...]
+ 144.1992340087890625 144.1640472412109375 140.77789306640625 132.2435302734375 132.345703125 127.22296905517578125 125.87320709228515625 131.7558441162109375 131.5599822998046875 128.7175445556640625 131.4659423828125 126.84764862060546875 126.11846923828125 125.71488189697265625 122.281829833984375 120.60507965087890625 120.32421112060546875 102.596710205078125 101.76038360595703125 101.02490997314453125 100.2274932861328125 100.45124053955078125 100.20529937744140625 100.4767761230468 [...]
+ 140.9576568603515625 140.9232177734375 141.47900390625 137.4042510986328125 139.0755462646484375 139.429595947265625 133.3107452392578125 131.7722930908203125 126.32305145263671875 125.99939727783203125 120.22011566162109375 117.895111083984375 116.7205963134765625 114.52776336669921875 115.60236358642578125 111.90219879150390625 108.0675811767578125 105.75199127197265625 103.822113037109375 104.99285125732421875 102.71282958984375 101.67315673828125 100.5455169677734375 99.984870910644 [...]
+ 137.026580810546875 135.5069122314453125 136.110198974609375 138.8521728515625 141.011383056640625 141.717010498046875 137.6267547607421875 130.704986572265625 129.097198486328125 128.942901611328125 128.101409912109375 127.8238067626953125 127.339080810546875 127.6819305419921875 120.0684051513671875 127.27463531494140625 120.37653350830078125 120.607391357421875 107.25165557861328125 116.0498809814453125 111.54998779296875 104.24134063720703125 102.2566375732421875 102.530105590820312 [...]
+ 134.6531219482421875 129.3896331787109375 133.4991912841796875 138.04510498046875 138.2426910400390625 138.540740966796875 136.86614990234375 131.2526397705078125 135.547454833984375 136.6641998291015625 132.7601165771484375 130.589263916015625 132.9482879638671875 131.305999755859375 129.4203033447265625 133.770660400390625 128.749847412109375 119.08617401123046875 120.677215576171875 114.3908843994140625 119.58191680908203125 106.85541534423828125 117.31812286376953125 114.49531555175 [...]
+ 128.5970001220703125 123.386444091796875 128.3559722900390625 131.6408233642578125 133.7724761962890625 138.0798797607421875 139.017181396484375 136.4813232421875 137.1886138916015625 142.058685302734375 135.603118896484375 132.7125701904296875 136.9993438720703125 134.647674560546875 128.263397216796875 135.3497314453125 127.12064361572265625 118.8497314453125 125.926910400390625 126.4792938232421875 123.295135498046875 110.66751861572265625 120.37255096435546875 125.57366943359375 123 [...]
+ 120.82723236083984375 126.482330322265625 131.3605194091796875 134.7197113037109375 138.593994140625 141.036590576171875 141.2475128173828125 140.739044189453125 140.6124420166015625 141.84393310546875 138.6820526123046875 137.065155029296875 138.5654144287109375 136.952972412109375 136.204742431640625 136.879730224609375 128.197052001953125 128.56793212890625 128.249908447265625 132.109405517578125 122.9207000732421875 110.61820220947265625 123.985076904296875 126.3574981689453125 116. [...]
+ 121.1121826171875 129.046417236328125 131.914306640625 134.081878662109375 136.263671875 139.7578887939453125 137.2089080810546875 136.430816650390625 139.3782806396484375 139.1170654296875 135.8148345947265625 133.0280609130859375 134.236297607421875 139.849609375 138.617645263671875 130.45074462890625 126.76595306396484375 131.56329345703125 130.9305419921875 133.2145538330078125 125.1385040283203125 113.27347564697265625 125.85848236083984375 122.26827239990234375 116.788719177246093 [...]
+ 126.81766510009765625 127.80682373046875 129.9361114501953125 134.3807525634765625 136.4519500732421875 136.017364501953125 132.688568115234375 134.0315704345703125 140.3663330078125 138.4269866943359375 132.68994140625 135.3219146728515625 132.7650604248046875 137.6019744873046875 139.65234375 138.83154296875 133.2760467529296875 137.51904296875 136.703948974609375 136.6067657470703125 130.1389923095703125 116.23822021484375 123.8232574462890625 118.72121429443359375 122.98603057861328 [...]
+ 127.53765869140625 131.9288787841796875 133.655670166015625 133.8411865234375 130.9111785888671875 126.9639129638671875 132.0006103515625 133.1673126220703125 137.008026123046875 140.646697998046875 137.7298736572265625 132.3323822021484375 131.7333831787109375 136.7805023193359375 139.9254608154296875 141.5179443359375 135.16748046875 132.959381103515625 129.874542236328125 127.59461212158203125 118.7603607177734375 124.40563201904296875 123.68076324462890625 125.11180877685546875 126. [...]
diff --git a/raster/r.in.gdal/testsuite/data/elevation.nc b/raster/r.in.gdal/testsuite/data/elevation.nc
new file mode 100644
index 0000000..e114a6b
Binary files /dev/null and b/raster/r.in.gdal/testsuite/data/elevation.nc differ
diff --git a/raster/r.in.gdal/testsuite/data/elevation.prj b/raster/r.in.gdal/testsuite/data/elevation.prj
new file mode 100644
index 0000000..ab52af4
--- /dev/null
+++ b/raster/r.in.gdal/testsuite/data/elevation.prj
@@ -0,0 +1 @@
+PROJCS["Lambert_Conformal_Conic",GEOGCS["GCS_grs80",DATUM["D_North_American_1983",SPHEROID["Geodetic_Reference_System_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Lambert_Conformal_Conic"],PARAMETER["standard_parallel_1",36.16666666666666],PARAMETER["standard_parallel_2",34.33333333333334],PARAMETER["latitude_of_origin",33.75],PARAMETER["central_meridian",-79],PARAMETER["false_easting",609601.22],PARAMETER["false_northing",0],UNIT[" [...]
\ No newline at end of file
diff --git a/raster/r.in.gdal/testsuite/data/elevation.tif b/raster/r.in.gdal/testsuite/data/elevation.tif
new file mode 100644
index 0000000..03ed8f4
Binary files /dev/null and b/raster/r.in.gdal/testsuite/data/elevation.tif differ
diff --git a/raster/r.in.gdal/testsuite/data/elevation.tiff b/raster/r.in.gdal/testsuite/data/elevation.tiff
new file mode 100644
index 0000000..03ed8f4
Binary files /dev/null and b/raster/r.in.gdal/testsuite/data/elevation.tiff differ
diff --git a/raster/r.in.gdal/testsuite/data/elevation3d.nc b/raster/r.in.gdal/testsuite/data/elevation3d.nc
new file mode 100644
index 0000000..64371e2
Binary files /dev/null and b/raster/r.in.gdal/testsuite/data/elevation3d.nc differ
diff --git a/raster/r.in.gdal/testsuite/data/generate_data.sh b/raster/r.in.gdal/testsuite/data/generate_data.sh
new file mode 100755
index 0000000..fb0307c
--- /dev/null
+++ b/raster/r.in.gdal/testsuite/data/generate_data.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# This script requires the graass7 North Caroline location
+
+export GRASS_OVERWRITE=1
+
+# 2D output
+g.region rast=elevation -p
+g.region res=100 -p
+
+r.out.gdal in=elevation out=elevation.tif format=GTiff
+r.out.gdal in=elevation out=elevation.tiff format=GTiff
+r.out.gdal in=elevation out=elevation.asc format=AAIGrid
+r.out.gdal in=elevation out=elevation.nc format=netCDF
+
+# 3D output
+g.region b=0 t=5 res3=100 tbres=1 -p3
+
+r.to.rast3 input=elevation output=elevation3d
+r3.out.netcdf input=elevation3d out=elevation3d.nc
+
diff --git a/raster/r.in.gdal/testsuite/test_r_in_gdal.py b/raster/r.in.gdal/testsuite/test_r_in_gdal.py
new file mode 100644
index 0000000..44f6f23
--- /dev/null
+++ b/raster/r.in.gdal/testsuite/test_r_in_gdal.py
@@ -0,0 +1,291 @@
+"""Test of r.in.gdal
+
+ at author Soeren Gebbert
+"""
+from grass.gunittest.case import TestCase
+
+class TestGdalImport(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Use temporary region settings"""
+        cls.use_temp_region()
+
+    @classmethod
+    def tearDownClass(cls):
+        """!Remove the temporary region
+        """
+        cls.del_temp_region()
+
+    def tearDown(self):
+        self.runModule("g.remove", type="raster", flags="f",
+                       pattern="test_gdal_import_map*")
+
+
+    def test_1(self):
+
+        self.assertModule("r.in.gdal", "Import GTiff Format",
+                          input="data/elevation.tif",
+                          output="test_gdal_import_map")
+
+        self.runModule("g.region", raster="test_gdal_import_map")
+
+        # Output of r.univar
+        univar_string="""n=20250
+                         null_cells=0
+                         cells=20250
+                         min=56.1364936828613
+                         max=156.221710205078
+                         range=100.085216522217
+                         mean=110.358078733845
+                         mean_of_abs=110.358078733845
+                         stddev=20.3247267738233
+                         variance=413.09451843057
+                         coeff_var=18.4170719597623
+                         sum=2234751.09436035"""
+
+        self.assertRasterFitsUnivar(raster="test_gdal_import_map",  reference=univar_string,
+                                    precision=3)
+
+    def test_2(self):
+
+        self.assertModule("r.in.gdal", "Import GTiff Format",
+                          input="data/elevation.tiff",
+                          output="test_gdal_import_map")
+
+        self.runModule("g.region", raster="test_gdal_import_map")
+
+        # Output of r.univar
+        univar_string="""n=20250
+                         null_cells=0
+                         cells=20250
+                         min=56.1364936828613
+                         max=156.221710205078
+                         range=100.085216522217
+                         mean=110.358078733845
+                         mean_of_abs=110.358078733845
+                         stddev=20.3247267738233
+                         variance=413.09451843057
+                         coeff_var=18.4170719597623
+                         sum=2234751.09436035"""
+
+        self.assertRasterFitsUnivar(raster="test_gdal_import_map",  reference=univar_string,
+                                    precision=3)
+
+    def test_3(self):
+
+        self.assertModule("r.in.gdal", "Import AAIGrid Format",
+                          input="data/elevation.asc",
+                          output="test_gdal_import_map")
+
+        self.runModule("g.region", raster="test_gdal_import_map")
+
+        # Output of r.univar
+        univar_string="""n=20250
+                         null_cells=0
+                         cells=20250
+                         min=56.1364936828613
+                         max=156.221710205078
+                         range=100.085216522217
+                         mean=110.358078733845
+                         mean_of_abs=110.358078733845
+                         stddev=20.3247267738233
+                         variance=413.09451843057
+                         coeff_var=18.4170719597623
+                         sum=2234751.09436035"""
+
+        self.assertRasterFitsUnivar(raster="test_gdal_import_map",  reference=univar_string,
+                                    precision=3)
+
+    def test_4(self):
+
+        self.assertModule("r.in.gdal", "Import netCDF Format",
+                          input="data/elevation.nc",
+                          output="test_gdal_import_map")
+
+        self.runModule("g.region", raster="test_gdal_import_map")
+
+        # Output of r.univar
+        univar_string="""n=20250
+                         null_cells=0
+                         cells=20250
+                         min=56.1364936828613
+                         max=156.221710205078
+                         range=100.085216522217
+                         mean=110.358078733845
+                         mean_of_abs=110.358078733845
+                         stddev=20.3247267738233
+                         variance=413.09451843057
+                         coeff_var=18.4170719597623
+                         sum=2234751.09436035"""
+
+        self.assertRasterFitsUnivar(raster="test_gdal_import_map",  reference=univar_string,
+                                    precision=3)
+
+    def test_netCDF_3d_1(self):
+
+        self.assertModule("r.in.gdal", "Import netCDF Format",
+                          input="data/elevation3d.nc",
+                          num_digits="3",
+                          flags="o",
+                          output="test_gdal_import_map")
+
+        # Output of r.info
+        info_string="""north=228500
+                       south=215000
+                       east=644640
+                       west=629640
+                       nsres=100
+                       ewres=100
+                       rows=135
+                       cols=150
+                       cells=20250
+                       datatype=FCELL
+                       ncats=0"""
+
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.001",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.002",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.003",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.004",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.005",  reference=info_string,
+                                    precision=3)
+
+    def test_netCDF_3d_2(self):
+
+        self.assertModule("r.in.gdal", "Import netCDF Format",
+                          input="data/elevation3d.nc",
+                          num_digits=0,
+                          offset=100,
+                          flags="o",
+                          output="test_gdal_import_map")
+
+        # Output of r.info
+        info_string="""north=228500
+                       south=215000
+                       east=644640
+                       west=629640
+                       nsres=100
+                       ewres=100
+                       rows=135
+                       cols=150
+                       cells=20250
+                       datatype=FCELL
+                       ncats=0"""
+
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.101",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.102",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.103",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.104",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.105",  reference=info_string,
+                                    precision=3)
+
+    def test_netCDF_3d_3(self):
+
+        self.assertModule("r.in.gdal", "Import netCDF Format",
+                          input="data/elevation3d.nc",
+                          num_digits=5,
+                          offset=100,
+                          flags="o",
+                          output="test_gdal_import_map")
+
+        # Output of r.info
+        info_string="""north=228500
+                       south=215000
+                       east=644640
+                       west=629640
+                       nsres=100
+                       ewres=100
+                       rows=135
+                       cols=150
+                       cells=20250
+                       datatype=FCELL
+                       ncats=0"""
+
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.00101",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.00102",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.00103",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.00104",  reference=info_string,
+                                    precision=3)
+        self.assertRasterFitsInfo(raster="test_gdal_import_map.00105",  reference=info_string,
+                                    precision=3)
+
+    def test_netCDF_3d_4(self):
+
+        self.assertModule("r.in.gdal", "Import netCDF Format",
+                          input="data/elevation3d.nc",
+                          num_digits="3",
+                          flags="o",
+                          band=2,
+                          output="test_gdal_import_map")
+
+        # Output of r.info
+        info_string="""north=228500
+                       south=215000
+                       east=644640
+                       west=629640
+                       nsres=100
+                       ewres=100
+                       rows=135
+                       cols=150
+                       cells=20250
+                       datatype=FCELL
+                       ncats=0"""
+
+        self.assertRasterFitsInfo(raster="test_gdal_import_map",  reference=info_string,
+                                    precision=3)
+
+    def test_netCDF_3d_5(self):
+        """Test the output map names file option"""
+
+        self.assertModule("r.in.gdal", "Import netCDF Format",
+                          input="data/elevation3d.nc",
+                          num_digits=10,
+                          offset=100,
+                          flags="o",
+                          map_names_file="map_names_file.txt",
+                          output="test_gdal_import_map")
+
+        map_list="""test_gdal_import_map.0000000101
+test_gdal_import_map.0000000102
+test_gdal_import_map.0000000103
+test_gdal_import_map.0000000104
+test_gdal_import_map.0000000105
+"""
+
+        text_from_file = open("map_names_file.txt", "r").read()
+
+        self.assertLooksLike(map_list, text_from_file)
+
+
+class TestGdalImportFails(TestCase):
+
+    def test_error_handling_1(self):
+        # Wrong number of digits
+        self.assertModuleFail("r.in.gdal",
+                              input="data/elevation.nc",
+                              num_digits="-1",
+                              output="test_gdal_import_map")
+
+    def test_error_handling_2(self):
+        # No location specified
+        self.assertModuleFail("r.in.gdal",
+                              input="data/elevation.nc",
+                              flags="c",
+                              output="test_gdal_import_map")
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
+
+
diff --git a/raster/r.in.gridatb/r.in.gridatb.html b/raster/r.in.gridatb/r.in.gridatb.html
index d95ef89..1d5dd55 100644
--- a/raster/r.in.gridatb/r.in.gridatb.html
+++ b/raster/r.in.gridatb/r.in.gridatb.html
@@ -12,4 +12,4 @@ raster map.
 
 Huidae Cho based on code from Keith Beven
 
-<p><i>Last changed: $Date: 2011-11-08 22:24:20 +0100 (Tue, 08 Nov 2011) $</i>
+<p><i>Last changed: $Date: 2011-11-08 13:24:20 -0800 (Tue, 08 Nov 2011) $</i>
diff --git a/raster/r.in.lidar/Makefile b/raster/r.in.lidar/Makefile
index 0d471fd..638ba34 100644
--- a/raster/r.in.lidar/Makefile
+++ b/raster/r.in.lidar/Makefile
@@ -2,15 +2,14 @@ MODULE_TOPDIR = ../..
 
 PGM = r.in.lidar
 
-LIBES = $(RASTERLIB) $(GISLIB) $(MATHLIB) $(GPROJLIB) $(LASLIBS)
-DEPENDENCIES = $(RASTERDEP) $(GISDEP)
+LIBES = $(RASTERLIB) $(GISLIB) $(MATHLIB) $(GPROJLIB) $(LASLIBS) $(SEGMENTLIB) $(VECTORLIB)
+DEPENDENCIES = $(RASTERDEP) $(GISDEP) $(SEGMENTDEP) $(VECTORDEP)
 
-EXTRA_INC = $(PROJINC) $(LASINC)
-EXTRA_CFLAGS = $(GDALCFLAGS)
+EXTRA_INC = $(LASINC) $(VECT_INC) $(PROJINC)
+EXTRA_CFLAGS = $(VECT_CFLAGS) $(GDALCFLAGS)
 
 include $(MODULE_TOPDIR)/include/Make/Module.make
 
 ifneq ($(USE_LIBLAS),)
 default: cmd
 endif
-
diff --git a/raster/r.in.lidar/filters.c b/raster/r.in.lidar/filters.c
new file mode 100644
index 0000000..a5551e0
--- /dev/null
+++ b/raster/r.in.lidar/filters.c
@@ -0,0 +1,70 @@
+/*
+ * r.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+
+#include "local_proto.h"
+#include "filters.h"
+
+#include <stdlib.h>
+#include <grass/gis.h>
+
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns)
+{
+    if (return_filter->filter == LAS_ALL)
+        return FALSE;
+    int skipme = 1;
+
+    switch (return_filter->filter) {
+    case LAS_FIRST:
+        if (return_n == 1)
+            skipme = 0;
+        break;
+    case LAS_MID:
+        if (return_n > 1 && return_n < n_returns)
+            skipme = 0;
+        break;
+    case LAS_LAST:
+        if (n_returns > 1 && return_n == n_returns)
+            skipme = 0;
+        break;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
+
+void class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                      char **classes)
+{
+    class_filter->str_classes = classes;
+}
+
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n)
+{
+    if (!class_filter->str_classes)
+        return FALSE;
+    int i = 0;
+    int skipme = TRUE;
+
+    while (class_filter->str_classes[i]) {
+        if (class_n == atoi(class_filter->str_classes[i])) {
+            skipme = FALSE;
+            break;
+        }
+        i++;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
diff --git a/raster/r.in.lidar/filters.h b/raster/r.in.lidar/filters.h
new file mode 100644
index 0000000..5848db6
--- /dev/null
+++ b/raster/r.in.lidar/filters.h
@@ -0,0 +1,35 @@
+/*
+ * r.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#ifndef __FILTERS_H__
+#define __FILTERS_H__
+
+struct ReturnFilter
+{
+    int filter;
+};
+
+struct ClassFilter
+{
+
+    /** NULL terminated list of class numbers represented as string */
+    char **str_classes;
+};
+
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns);
+void class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                      char **classes);
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n);
+
+#endif /* __FILTERS_H__ */
diff --git a/raster/r.in.lidar/info.c b/raster/r.in.lidar/info.c
new file mode 100644
index 0000000..cb9ee5b
--- /dev/null
+++ b/raster/r.in.lidar/info.c
@@ -0,0 +1,180 @@
+/*
+ * r.in.lidar projection-related functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move functions to a file)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <string.h>
+
+#include <grass/glocale.h>
+
+#include <liblas/capi/liblas.h>
+
+#include "local_proto.h"
+
+
+void print_lasinfo(LASHeaderH LAS_header, LASSRSH LAS_srs)
+{
+    char *las_srs_proj4 = LASSRS_GetProj4(LAS_srs);
+    int las_point_format = LASHeader_GetDataFormatId(LAS_header);
+
+    fprintf(stdout, "\nUsing LAS Library Version '%s'\n\n",
+            LAS_GetFullVersion());
+    fprintf(stdout, "LAS File Version:                  %d.%d\n",
+            LASHeader_GetVersionMajor(LAS_header),
+            LASHeader_GetVersionMinor(LAS_header));
+    fprintf(stdout, "System ID:                         '%s'\n",
+            LASHeader_GetSystemId(LAS_header));
+    fprintf(stdout, "Generating Software:               '%s'\n",
+            LASHeader_GetSoftwareId(LAS_header));
+    fprintf(stdout, "File Creation Day/Year:            %d/%d\n",
+            LASHeader_GetCreationDOY(LAS_header),
+            LASHeader_GetCreationYear(LAS_header));
+    fprintf(stdout, "Point Data Format:                 %d\n",
+            las_point_format);
+    fprintf(stdout, "Number of Point Records:           %d\n",
+            LASHeader_GetPointRecordsCount(LAS_header));
+    fprintf(stdout, "Number of Points by Return:        %d %d %d %d %d\n",
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 0),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 1),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 2),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 3),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 4));
+    fprintf(stdout, "Scale Factor X Y Z:                %g %g %g\n",
+            LASHeader_GetScaleX(LAS_header),
+            LASHeader_GetScaleY(LAS_header), LASHeader_GetScaleZ(LAS_header));
+    fprintf(stdout, "Offset X Y Z:                      %g %g %g\n",
+            LASHeader_GetOffsetX(LAS_header),
+            LASHeader_GetOffsetY(LAS_header),
+            LASHeader_GetOffsetZ(LAS_header));
+    fprintf(stdout, "Min X Y Z:                         %g %g %g\n",
+            LASHeader_GetMinX(LAS_header),
+            LASHeader_GetMinY(LAS_header), LASHeader_GetMinZ(LAS_header));
+    fprintf(stdout, "Max X Y Z:                         %g %g %g\n",
+            LASHeader_GetMaxX(LAS_header),
+            LASHeader_GetMaxY(LAS_header), LASHeader_GetMaxZ(LAS_header));
+    if (las_srs_proj4 && strlen(las_srs_proj4) > 0) {
+        fprintf(stdout, "Spatial Reference:\n");
+        fprintf(stdout, "%s\n", las_srs_proj4);
+    }
+    else {
+        fprintf(stdout, "Spatial Reference:                 None\n");
+    }
+
+    fprintf(stdout, "\nData Fields:\n");
+    fprintf(stdout,
+            "  'X'\n  'Y'\n  'Z'\n  'Intensity'\n  'Return Number'\n");
+    fprintf(stdout, "  'Number of Returns'\n  'Scan Direction'\n");
+    fprintf(stdout,
+            "  'Flighline Edge'\n  'Classification'\n  'Scan Angle Rank'\n");
+    fprintf(stdout, "  'User Data'\n  'Point Source ID'\n");
+    if (las_point_format == 1 || las_point_format == 3 ||
+        las_point_format == 4 || las_point_format == 5) {
+        fprintf(stdout, "  'GPS Time'\n");
+    }
+    if (las_point_format == 2 || las_point_format == 3 ||
+        las_point_format == 5) {
+        fprintf(stdout, "  'Red'\n  'Green'\n  'Blue'\n");
+    }
+    fprintf(stdout, "\n");
+    fflush(stdout);
+
+    return;
+}
+
+
+int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents, int update,
+                double zscale, struct Cell_head *region)
+{
+    unsigned long line;
+    int first;
+    double min_x, max_x, min_y, max_y, min_z, max_z;
+    double x, y, z;
+    LASPointH LAS_point;
+
+    line = 0;
+    first = TRUE;
+
+    /* init to nan in case no points are found */
+    min_x = max_x = min_y = max_y = min_z = max_z = 0.0 / 0.0;
+
+    G_verbose_message(_("Scanning data ..."));
+
+    LASReader_Seek(LAS_reader, 0);
+
+    while ((LAS_point = LASReader_GetNextPoint(LAS_reader)) != NULL) {
+        line++;
+
+        /* we don't do any filtering here */
+
+        x = LASPoint_GetX(LAS_point);
+        y = LASPoint_GetY(LAS_point);
+        z = LASPoint_GetZ(LAS_point);
+
+        if (first) {
+            min_x = x;
+            max_x = x;
+            min_y = y;
+            max_y = y;
+            min_z = z;
+            max_z = z;
+            first = FALSE;
+        }
+        else {
+            if (x < min_x)
+                min_x = x;
+            if (x > max_x)
+                max_x = x;
+            if (y < min_y)
+                min_y = y;
+            if (y > max_y)
+                max_y = y;
+            if (z < min_z)
+                min_z = z;
+            if (z > max_z)
+                max_z = z;
+        }
+    }
+
+    if (!extents) {
+        if (!shell_style) {
+            fprintf(stderr, _("Range:     min         max\n"));
+            fprintf(stdout, "x: %11f %11f\n", min_x, max_x);
+            fprintf(stdout, "y: %11f %11f\n", min_y, max_y);
+            fprintf(stdout, "z: %11f %11f\n", min_z * zscale, max_z * zscale);
+        }
+        else
+            fprintf(stdout, "n=%f s=%f e=%f w=%f b=%f t=%f\n",
+                    max_y, min_y, max_x, min_x, min_z * zscale,
+                    max_z * zscale);
+
+        G_debug(1, "Processed %lu points.", line);
+        G_debug(1, "region template: g.region n=%f s=%f e=%f w=%f",
+                max_y, min_y, max_x, min_x);
+    }
+    else if (update) {
+        if (min_x < region->west)
+            region->west = min_x;
+        if (max_x > region->east)
+            region->east = max_x;
+        if (min_y < region->south)
+            region->south = min_y;
+        if (max_y > region->north)
+            region->north = max_y;
+    }
+    else {
+        region->east = max_x;
+        region->west = min_x;
+        region->north = max_y;
+        region->south = min_y;
+    }
+
+    return 0;
+}
diff --git a/raster/r.in.lidar/local_proto.h b/raster/r.in.lidar/local_proto.h
index 618e362..90ca290 100644
--- a/raster/r.in.lidar/local_proto.h
+++ b/raster/r.in.lidar/local_proto.h
@@ -21,11 +21,13 @@
 
 
 #include <grass/gis.h>
+#include <grass/raster.h>
 #include <liblas/capi/liblas.h>
 
 
 #define BUFFSIZE 256
 
+#define METHOD_NONE        0
 #define METHOD_N           1
 #define METHOD_MIN         2
 #define METHOD_MAX         3
@@ -40,9 +42,15 @@
 #define METHOD_SKEWNESS   12
 #define METHOD_TRIMMEAN   13
 
-/* main.c */
+#define LAS_ALL 0
+#define LAS_FIRST 1
+#define LAS_MID 2
+#define LAS_LAST 3
+
+
+/* info.c */
 void print_lasinfo(LASHeaderH, LASSRSH);
-int scan_bounds(LASReaderH, int, int, double, struct Cell_head *);
+int scan_bounds(LASReaderH, int, int, int, double, struct Cell_head *);
 
 /* support.c */
 int blank_array(void *, int, int, RASTER_MAP_TYPE, int);
@@ -52,5 +60,34 @@ int update_max(void *, int, int, int, RASTER_MAP_TYPE, double);
 int update_sum(void *, int, int, int, RASTER_MAP_TYPE, double);
 int update_sumsq(void *, int, int, int, RASTER_MAP_TYPE, double);
 
+/* projection.c */
+void projection_mismatch_report(struct Cell_head cellhd,
+                                struct Cell_head loc_wind,
+                                struct Key_Value *loc_proj_info,
+                                struct Key_Value *loc_proj_units,
+                                struct Key_Value *proj_info,
+                                struct Key_Value *proj_units,
+                                int err);
+void projection_check_wkt(struct Cell_head cellhd,
+                          struct Cell_head loc_wind,
+                          const char *projstr,
+                          int override,
+                          int verbose);
+/* raster reading */
+int row_array_get_value_row_col(void *array, int arr_row, int arr_col,
+                                int cols, RASTER_MAP_TYPE rtype, double *value);
+
+/* multiple files */
+
+struct StringList
+{
+    int num_items;
+    int max_items;
+    char **items;
+};
+
+void string_list_from_file(struct StringList *string_list, char *filename);
+void string_list_from_one_item(struct StringList *string_list, char *item);
+void string_list_free(struct StringList *string_list);
 
 #endif /* __LOCAL_PROTO_H__ */
diff --git a/raster/r.in.lidar/main.c b/raster/r.in.lidar/main.c
index 503c412..24438ae 100644
--- a/raster/r.in.lidar/main.c
+++ b/raster/r.in.lidar/main.c
@@ -1,14 +1,15 @@
-/****************************************************************************
+ /****************************************************************************
  *
  * MODULE:       r.in.Lidar
  *               
  * AUTHOR(S):    Markus Metz
+ *               Vaclav Petras (base raster addition and refactoring)
  *               Based on r.in.xyz by Hamish Bowman, Volker Wichmann
  *
  * PURPOSE:      Imports LAS LiDAR point clouds to a raster map using 
  *               aggregate statistics.
  *
- * COPYRIGHT:    (C) 2011 Markus Metz and the The GRASS Development Team
+ * COPYRIGHT:    (C) 2011-2015 Markus Metz and the The GRASS Development Team
  *
  *               This program is free software under the GNU General Public
  *               License (>=v2). Read the file COPYING that comes with GRASS
@@ -24,130 +25,70 @@
 #include <sys/types.h>
 #include <grass/gis.h>
 #include <grass/raster.h>
+#include <grass/segment.h>
 #include <grass/gprojects.h>
 #include <grass/glocale.h>
 #include <liblas/capi/liblas.h>
-#include "local_proto.h"
-
-struct node
-{
-    int next;
-    double z;
-};
-
-#define	SIZE_INCREMENT 10
-int num_nodes = 0;
-int max_nodes = 0;
-struct node *nodes;
-
-#define LAS_ALL 0
-#define LAS_FIRST 1
-#define LAS_LAST 2
-#define LAS_MID 3
-
-int new_node(void)
-{
-    int n = num_nodes++;
-
-    if (num_nodes >= max_nodes) {
-	max_nodes += SIZE_INCREMENT;
-	nodes = G_realloc(nodes, (size_t)max_nodes * sizeof(struct node));
-    }
 
-    return n;
-}
-
-
-/* add node to sorted, single linked list 
- * returns id if head has to be saved to index array, otherwise -1 */
-int add_node(int head, double z)
-{
-    int node_id, last_id, newnode_id, head_id;
-
-    head_id = head;
-    node_id = head_id;
-    last_id = head_id;
-
-    while (node_id != -1 && nodes[node_id].z < z) {
-	last_id = node_id;
-	node_id = nodes[node_id].next;
-    }
+#include "local_proto.h"
+#include "rast_segment.h"
+#include "point_binning.h"
+#include "filters.h"
 
-    /* end of list, simply append */
-    if (node_id == -1) {
-	newnode_id = new_node();
-	nodes[newnode_id].next = -1;
-	nodes[newnode_id].z = z;
-	nodes[last_id].next = newnode_id;
-	return -1;
-    }
-    else if (node_id == head_id) {	/* pole position, insert as head */
-	newnode_id = new_node();
-	nodes[newnode_id].next = head_id;
-	head_id = newnode_id;
-	nodes[newnode_id].z = z;
-	return (head_id);
-    }
-    else {			/* somewhere in the middle, insert */
-	newnode_id = new_node();
-	nodes[newnode_id].z = z;
-	nodes[newnode_id].next = node_id;
-	nodes[last_id].next = newnode_id;
-	return -1;
-    }
-}
 
 int main(int argc, char *argv[])
 {
-    int out_fd;
+    int out_fd, base_raster;
     char *infile, *outmap;
     int percent;
-    int method = -1;
-    int bin_n, bin_min, bin_max, bin_sum, bin_sumsq, bin_index;
     double zrange_min, zrange_max, d_tmp;
+    double irange_min, irange_max;
     unsigned long estimated_lines;
 
-    RASTER_MAP_TYPE rtype;
+    RASTER_MAP_TYPE rtype, base_raster_data_type;
     struct History history;
     char title[64];
-    void *n_array, *min_array, *max_array, *sum_array, *sumsq_array,
-	*index_array;
-    void *raster_row, *ptr;
+    SEGMENT base_segment;
+    struct PointBinning point_binning;
+    void *base_array;
+    void *raster_row;
     struct Cell_head region;
+    struct Cell_head input_region;
     int rows, last_rows, row0, cols;		/* scan box size */
-    int row, col;		/* counters */
+    int row;		/* counters */
 
     int pass, npasses;
     unsigned long line, line_total;
     unsigned int counter;
+    unsigned long n_invalid;
     char buff[BUFFSIZE];
     double x, y, z;
+    double intensity;
     int arr_row, arr_col;
     unsigned long count, count_total;
-    int skipme, i;
     int point_class;
 
-    double min = 0.0 / 0.0;	/* init as nan */
-    double max = 0.0 / 0.0;	/* init as nan */
     double zscale = 1.0;
-    size_t offset, n_offset;
-    int n = 0;
-    double sum = 0.;
-    double sumsq = 0.;
-    double variance, mean, skew, sumdev;
-    int pth = 0;
-    double trim = 0.0;
+    double iscale = 1.0;
     double res = 0.0;
 
-    int j, k;
-    int head_id, node_id;
-    int r_low, r_up;
+    struct BinIndex bin_index_nodes;
+    bin_index_nodes.num_nodes = 0;
+    bin_index_nodes.max_nodes = 0;
+    bin_index_nodes.nodes = 0;
 
     struct GModule *module;
     struct Option *input_opt, *output_opt, *percent_opt, *type_opt, *filter_opt, *class_opt;
-    struct Option *method_opt, *zrange_opt, *zscale_opt;
+    struct Option *method_opt, *base_raster_opt;
+    struct Option *zrange_opt, *zscale_opt;
+    struct Option *irange_opt, *iscale_opt;
     struct Option *trim_opt, *pth_opt, *res_opt;
-    struct Flag *print_flag, *scan_flag, *shell_style, *over_flag, *extents_flag, *intens_flag;
+    struct Option *file_list_opt;
+    struct Flag *print_flag, *scan_flag, *shell_style, *over_flag, *extents_flag;
+    struct Flag *intens_flag, *intens_import_flag;
+    struct Flag *set_region_flag;
+    struct Flag *base_rast_res_flag;
+    struct Flag *only_valid_flag;
 
     /* LAS */
     LASReaderH LAS_reader;
@@ -156,8 +97,6 @@ int main(int argc, char *argv[])
     LASPointH LAS_point;
     int return_filter;
 
-    struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
-    struct Key_Value *proj_info, *proj_units;
     const char *projstr;
     struct Cell_head cellhd, loc_wind;
 
@@ -169,14 +108,29 @@ int main(int argc, char *argv[])
     G_add_keyword(_("raster"));
     G_add_keyword(_("import"));
     G_add_keyword(_("LIDAR"));
+    G_add_keyword(_("statistics"));
+    G_add_keyword(_("conversion"));
+    G_add_keyword(_("aggregation"));
+    G_add_keyword(_("binning"));
     module->description =
 	_("Creates a raster map from LAS LiDAR points using univariate statistics.");
 
-    input_opt = G_define_standard_option(G_OPT_F_INPUT);
+    input_opt = G_define_standard_option(G_OPT_F_BIN_INPUT);
+    input_opt->required = NO;
     input_opt->label = _("LAS input file");
     input_opt->description = _("LiDAR input files in LAS format (*.las or *.laz)");
+    input_opt->guisection = _("Input");
 
     output_opt = G_define_standard_option(G_OPT_R_OUTPUT);
+    output_opt->required = YES;
+    output_opt->guisection = _("Output");
+
+    file_list_opt = G_define_standard_option(G_OPT_F_INPUT);
+    file_list_opt->key = "file";
+    file_list_opt->label = _("File containing names of LAS input files");
+    file_list_opt->description = _("LiDAR input files in LAS format (*.las or *.laz)");
+    file_list_opt->required = NO;
+    file_list_opt->guisection = _("Input");
 
     method_opt = G_define_option();
     method_opt->key = "method";
@@ -187,6 +141,33 @@ int main(int argc, char *argv[])
 	"n,min,max,range,sum,mean,stddev,variance,coeff_var,median,percentile,skewness,trimmean";
     method_opt->answer = "mean";
     method_opt->guisection = _("Statistic");
+    G_asprintf((char **)&(method_opt->descriptions),
+               "n;%s;"
+               "min;%s;"
+               "max;%s;"
+               "range;%s;"
+               "sum;%s;"
+               "mean;%s;"
+               "stddev;%s;"
+               "variance;%s;"
+               "coeff_var;%s;"
+               "median;%s;"
+               "percentile;%s;"
+               "skewness;%s;"
+               "trimmean;%s",
+               _("Number of points in cell"),
+               _("Minimum value of point values in cell"),
+               _("Maximum value of point values in cell"),
+               _("Range of point values in cell"),
+               _("Sum of point values in cell"),
+               _("Mean (average) value of point values in cell"),
+               _("Standard deviation of point values in cell"),
+               _("Variance of point values in cell"),
+               _("Coefficient of variance of point values in cell"),
+               _("Median value of point values in cell"),
+               _("pth (nth) percentile of point values in cell"),
+               _("Skewness of point values in cell"),
+               _("Trimmed mean of point values in cell"));
 
     type_opt = G_define_option();
     type_opt->key = "type";
@@ -196,19 +177,47 @@ int main(int argc, char *argv[])
     type_opt->answer = "FCELL";
     type_opt->description = _("Storage type for resultant raster map");
 
+    base_raster_opt = G_define_standard_option(G_OPT_R_INPUT);
+    base_raster_opt->key = "base_raster";
+    base_raster_opt->required = NO;
+    base_raster_opt->label =
+        _("Subtract raster values from the Z coordinates");
+    base_raster_opt->description =
+        _("The scale for Z is applied beforehand, the range filter for"
+          " Z afterwards");
+    base_raster_opt->guisection = _("Transform");
+
     zrange_opt = G_define_option();
     zrange_opt->key = "zrange";
     zrange_opt->type = TYPE_DOUBLE;
     zrange_opt->required = NO;
     zrange_opt->key_desc = "min,max";
-    zrange_opt->description = _("Filter range for z data (min,max)");
+    zrange_opt->description = _("Filter range for Z data (min,max)");
+    zrange_opt->guisection = _("Selection");
 
     zscale_opt = G_define_option();
     zscale_opt->key = "zscale";
     zscale_opt->type = TYPE_DOUBLE;
     zscale_opt->required = NO;
     zscale_opt->answer = "1.0";
-    zscale_opt->description = _("Scale to apply to z data");
+    zscale_opt->description = _("Scale to apply to Z data");
+    zscale_opt->guisection = _("Transform");
+
+    irange_opt = G_define_option();
+    irange_opt->key = "intensity_range";
+    irange_opt->type = TYPE_DOUBLE;
+    irange_opt->required = NO;
+    irange_opt->key_desc = "min,max";
+    irange_opt->description = _("Filter range for intensity values (min,max)");
+    irange_opt->guisection = _("Selection");
+
+    iscale_opt = G_define_option();
+    iscale_opt->key = "intensity_scale";
+    iscale_opt->type = TYPE_DOUBLE;
+    iscale_opt->required = NO;
+    iscale_opt->answer = "1.0";
+    iscale_opt->description = _("Scale to apply to intensity values");
+    iscale_opt->guisection = _("Transform");
 
     percent_opt = G_define_option();
     percent_opt->key = "percent";
@@ -233,6 +242,7 @@ int main(int argc, char *argv[])
     trim_opt->type = TYPE_DOUBLE;
     trim_opt->required = NO;
     trim_opt->options = "0-50";
+    trim_opt->label = _("Discard given percentage of the smallest and largest values");
     trim_opt->description =
 	_("Discard <trim> percent of the smallest and <trim> percent of the largest observations");
     trim_opt->guisection = _("Statistic");
@@ -243,6 +253,7 @@ int main(int argc, char *argv[])
     res_opt->required = NO;
     res_opt->description =
 	_("Output raster resolution");
+    res_opt->guisection = _("Output");
 
     filter_opt = G_define_option();
     filter_opt->key = "return_filter";
@@ -251,6 +262,7 @@ int main(int argc, char *argv[])
     filter_opt->label = _("Only import points of selected return type");
     filter_opt->description = _("If not specified, all points are imported");
     filter_opt->options = "first,last,mid";
+    filter_opt->guisection = _("Selection");
 
     class_opt = G_define_option();
     class_opt->key = "class_filter";
@@ -260,6 +272,7 @@ int main(int argc, char *argv[])
     class_opt->label = _("Only import points of selected class(es)");
     class_opt->description = _("Input is comma separated integers. "
                                "If not specified, all points are imported.");
+    class_opt->guisection = _("Selection");
 
     print_flag = G_define_flag();
     print_flag->key = 'p';
@@ -269,13 +282,28 @@ int main(int argc, char *argv[])
 
     extents_flag = G_define_flag();
     extents_flag->key = 'e';
+    extents_flag->label =
+        _("Use the extent of the input for the raster extent");
     extents_flag->description =
-	_("Extend region extents based on new dataset");
+        _("Set internally computational region extents based on the"
+          " point cloud");
+    extents_flag->guisection = _("Output");
+
+    set_region_flag = G_define_flag();
+    set_region_flag->key = 'n';
+    set_region_flag->label =
+        _("Set computation region to match the new raster map");
+    set_region_flag->description =
+        _("Set computation region to match the 2D extent and resolution"
+          " of the newly created new raster map");
+    set_region_flag->guisection = _("Output");
 
     over_flag = G_define_flag();
     over_flag->key = 'o';
+    over_flag->label =
+	_("Override projection check (use current location's projection)");
     over_flag->description =
-	_("Override dataset projection (use location's projection)");
+	_("Assume that the dataset has same projection as the current location");
 
     scan_flag = G_define_flag();
     scan_flag->key = 's';
@@ -289,50 +317,137 @@ int main(int argc, char *argv[])
 
     intens_flag = G_define_flag();
     intens_flag->key = 'i';
+    intens_flag->label =
+        _("Use intensity values rather than Z values");
     intens_flag->description =
-        _("Import intensity values rather than z values");
+        _("Uses intensity values everywhere as if they would be Z"
+          " coordinates");
+
+    intens_import_flag = G_define_flag();
+    intens_import_flag->key = 'j';
+    intens_import_flag->description =
+        _("Use Z values for filtering, but intensity values for statistics");
+
+    base_rast_res_flag = G_define_flag();
+    base_rast_res_flag->key = 'd';
+    base_rast_res_flag->label =
+        _("Use base raster resolution instead of computational region");
+    base_rast_res_flag->description =
+        _("For getting values from base raster, use its actual"
+          " resolution instead of computational region resolution");
+
+    only_valid_flag = G_define_flag();
+    only_valid_flag->key = 'v';
+    only_valid_flag->label = _("Use only valid points");
+    only_valid_flag->description =
+        _("Points invalid according to APSRS LAS specification will be"
+          " filtered out");
+    only_valid_flag->guisection = _("Selection");
+
+    G_option_exclusive(intens_flag, intens_import_flag, NULL);
 
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
+    int only_valid = FALSE;
+    n_invalid = 0;
+    if (only_valid_flag->answer)
+        only_valid = TRUE;
+
+    /* we could use rules but this gives more info and allows continuing */
+    if (set_region_flag->answer && !(extents_flag->answer || res_opt->answer)) {
+        G_warning(_("Flag %c makes sense only with %s option or -%c flag"),
+                  set_region_flag->key, res_opt->key, extents_flag->key);
+        /* avoid the call later on */
+        set_region_flag->answer = '\0';
+    }
+
+    struct StringList infiles;
+
+    if (file_list_opt->answer) {
+        if (access(file_list_opt->answer, F_OK) != 0)
+            G_fatal_error(_("File <%s> does not exist"), file_list_opt->answer);
+        string_list_from_file(&infiles, file_list_opt->answer);
+    }
+    else {
+        string_list_from_one_item(&infiles, input_opt->answer);
+    }
 
     /* parse input values */
-    infile = input_opt->answer;
     outmap = output_opt->answer;
 
     if (shell_style->answer && !scan_flag->answer) {
 	scan_flag->answer = 1; /* pointer not int, so set = shell_style->answer ? */
     }
 
-    /* Don't crash on cmd line if file not found */
-    if (access(infile, F_OK) != 0) {
-	G_fatal_error(_("Input file <%s> does not exist"), infile);
-    }
-    /* Open LAS file*/
-    LAS_reader = LASReader_Create(infile);
-    if (LAS_reader == NULL) {
-	G_fatal_error(_("Unable to open file <%s>"), infile);
-    }
-    
-    LAS_header = LASReader_GetHeader(LAS_reader);
-    if  (LAS_header == NULL) {
-	G_fatal_error(_("Input file <%s> is not a LAS LiDAR point cloud"),
-	                infile);
+    /* check zrange and extent relation */
+    if (scan_flag->answer || extents_flag->answer) {
+        if (zrange_opt->answer)
+            G_warning(_("zrange will not be taken into account during scan"));
     }
 
-    LAS_srs = LASHeader_GetSRS(LAS_header);
-
-    /* Print LAS header */
-    if (print_flag->answer) {
-	/* print... */
-	print_lasinfo(LAS_header, LAS_srs);
-
-	LASSRS_Destroy(LAS_srs);
-	LASHeader_Destroy(LAS_header);
-	LASReader_Destroy(LAS_reader);
-
-	exit(EXIT_SUCCESS);
-    }
+    Rast_get_window(&region);
+    /* G_get_window seems to be unreliable if the location has been changed */
+    G_get_set_window(&loc_wind);        /* TODO: v.in.lidar uses G_get_default_window() */
+
+    estimated_lines = 0;
+    int i;
+    for (i = 0; i < infiles.num_items; i++) {
+        infile = infiles.items[i];
+        /* don't if file not found */
+        if (access(infile, F_OK) != 0)
+            G_fatal_error(_("Input file <%s> does not exist"), infile);
+        /* Open LAS file*/
+        LAS_reader = LASReader_Create(infile);
+        if (LAS_reader == NULL)
+            G_fatal_error(_("Unable to open file <%s>"), infile);
+        LAS_header = LASReader_GetHeader(LAS_reader);
+        if  (LAS_header == NULL) {
+            G_fatal_error(_("Input file <%s> is not a LAS LiDAR point cloud"),
+                            infile);
+        }
+
+        LAS_srs = LASHeader_GetSRS(LAS_header);
+
+        /* print info or check projection if we are actually importing */
+        if (print_flag->answer) {
+            /* print filename when there is more than one file */
+            if (infiles.num_items > 1)
+                fprintf(stdout, "File: %s\n", infile);
+            /* Print LAS header */
+            print_lasinfo(LAS_header, LAS_srs);
+        }
+        else {
+            /* report that we are checking more files */
+            if (i == 1)
+                G_message(_("First file's projection checked,"
+                            " checking projection of the other files..."));
+            /* Fetch input map projection in GRASS form. */
+            projstr = LASSRS_GetWKT_CompoundOK(LAS_srs);
+            /* we are printing the non-warning messages only for first file */
+            projection_check_wkt(cellhd, loc_wind, projstr, over_flag->answer,
+                                 shell_style->answer || i);
+            /* if there is a problem in some other file, first OK message
+             * is printed but than a warning, this is not ideal but hopefully
+             * not so confusing when importing multiple files */
+        }
+        if (scan_flag->answer || extents_flag->answer) {
+            /* we assign to the first one (i==0) but update for the rest */
+            scan_bounds(LAS_reader, shell_style->answer, extents_flag->answer, i,
+                        zscale, &region);
+        }
+        /* number of estimated point across all files */
+        /* TODO: this should be ull which won't work with percent report */
+        estimated_lines += LASHeader_GetPointRecordsCount(LAS_header);
+        /* We are closing all again and we will be opening them later,
+         * so we don't have to worry about limit for open files. */
+        LASSRS_Destroy(LAS_srs);
+        LASHeader_Destroy(LAS_header);
+        LASReader_Destroy(LAS_reader);
+    }
+    /* if we are not importing, end */
+    if (print_flag->answer || scan_flag->answer)
+        exit(EXIT_SUCCESS);
 
     return_filter = LAS_ALL;
     if (filter_opt->answer) {
@@ -345,121 +460,16 @@ int main(int argc, char *argv[])
 	else
 	    G_fatal_error(_("Unknown filter option <%s>"), filter_opt->answer);
     }
-
-    /* Fetch input map projection in GRASS form. */
-    proj_info = NULL;
-    proj_units = NULL;
-    projstr = LASSRS_GetWKT_CompoundOK(LAS_srs);
-
-    if (TRUE) {
-	int err = 0;
-	char error_msg[8192];
-
-	/* Projection only required for checking so convert non-interactively */
-	if (GPJ_wkt_to_grass(&cellhd, &proj_info,
-			     &proj_units, projstr, 0) < 0)
-	    G_warning(_("Unable to convert input map projection information to "
-		       "GRASS format for checking"));
-	
-	/* Does the projection of the current location match the dataset? */
-	/* G_get_window seems to be unreliable if the location has been changed */
-	G_get_set_window(&loc_wind); /* TODO: v.in.lidar uses G_get_default_window() */
-	/* fetch LOCATION PROJ info */
-	if (loc_wind.proj != PROJECTION_XY) {
-	    loc_proj_info = G_get_projinfo();
-	    loc_proj_units = G_get_projunits();
-	}
-
-	if (over_flag->answer) {
-	    cellhd.proj = loc_wind.proj;
-	    cellhd.zone = loc_wind.zone;
-	    G_message(_("Over-riding projection check"));
-	}
-	else if (loc_wind.proj != cellhd.proj
-		 || (err =
-		     G_compare_projections(loc_proj_info, loc_proj_units,
-					   proj_info, proj_units)) != TRUE) {
-	    int i_value;
-
-	    strcpy(error_msg,
-		   _("Projection of dataset does not"
-		     " appear to match current location.\n\n"));
-
-	    /* TODO: output this info sorted by key: */
-	    if (loc_wind.proj != cellhd.proj || err != -2) {
-		if (loc_proj_info != NULL) {
-		    strcat(error_msg, _("GRASS LOCATION PROJ_INFO is:\n"));
-		    for (i_value = 0; i_value < loc_proj_info->nitems;
-			 i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				loc_proj_info->key[i_value],
-				loc_proj_info->value[i_value]);
-		    strcat(error_msg, "\n");
-		}
-
-		if (proj_info != NULL) {
-		    strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
-		    for (i_value = 0; i_value < proj_info->nitems; i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				proj_info->key[i_value],
-				proj_info->value[i_value]);
-		}
-		else {
-		    strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
-		    if (cellhd.proj == PROJECTION_XY)
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (unreferenced/unknown)\n",
-				cellhd.proj);
-		    else if (cellhd.proj == PROJECTION_LL)
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (lat/long)\n",
-				cellhd.proj);
-		    else if (cellhd.proj == PROJECTION_UTM)
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (UTM), zone = %d\n",
-				cellhd.proj, cellhd.zone);
-		    else
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (unknown), zone = %d\n",
-				cellhd.proj, cellhd.zone);
-		}
-	    }
-	    else {
-		if (loc_proj_units != NULL) {
-		    strcat(error_msg, "GRASS LOCATION PROJ_UNITS is:\n");
-		    for (i_value = 0; i_value < loc_proj_units->nitems;
-			 i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				loc_proj_units->key[i_value],
-				loc_proj_units->value[i_value]);
-		    strcat(error_msg, "\n");
-		}
-
-		if (proj_units != NULL) {
-		    strcat(error_msg, "Import dataset PROJ_UNITS is:\n");
-		    for (i_value = 0; i_value < proj_units->nitems; i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				proj_units->key[i_value],
-				proj_units->value[i_value]);
-		}
-	    }
-	    sprintf(error_msg + strlen(error_msg),
-		    _("\nIn case of no significant differences in the projection definitions,"
-		      " use the -o flag to ignore them and use"
-		      " current location definition.\n"));
-	    strcat(error_msg,
-		   _("Consider generating a new location with 'location' parameter"
-		    " from input data set.\n"));
-	    G_fatal_error("%s", error_msg);
-	}
-	else if (!shell_style->answer) {
-	    G_message(_("Projection of input dataset and current location "
-			"appear to match"));
-	}
-    }
+    struct ReturnFilter return_filter_struct;
+    return_filter_struct.filter = return_filter;
+    struct ClassFilter class_filter;
+    class_filter_create_from_strings(&class_filter, class_opt->answers);
 
     percent = atoi(percent_opt->answer);
-    zscale = atof(zscale_opt->answer);
+    if (zscale_opt->answer)
+        zscale = atof(zscale_opt->answer);
+    if (iscale_opt->answer)
+        iscale = atof(iscale_opt->answer);
 
     /* parse zrange */
     if (zrange_opt->answer != NULL) {
@@ -475,105 +485,26 @@ int main(int argc, char *argv[])
 	    zrange_min = d_tmp;
 	}
     }
+    /* parse irange */
+    if (irange_opt->answer != NULL) {
+        if (irange_opt->answers[0] == NULL)
+            G_fatal_error(_("Invalid %s"), irange_opt->key);
 
-    /* figure out what maps we need in memory */
-    /*  n               n
-       min              min
-       max              max
-       range            min max         max - min
-       sum              sum
-       mean             sum n           sum/n
-       stddev           sum sumsq n     sqrt((sumsq - sum*sum/n)/n)
-       variance         sum sumsq n     (sumsq - sum*sum/n)/n
-       coeff_var        sum sumsq n     sqrt((sumsq - sum*sum/n)/n) / (sum/n)
-       median           n               array index to linked list
-       percentile       n               array index to linked list
-       skewness         n               array index to linked list
-       trimmean         n               array index to linked list
-     */
-    bin_n = FALSE;
-    bin_min = FALSE;
-    bin_max = FALSE;
-    bin_sum = FALSE;
-    bin_sumsq = FALSE;
-    bin_index = FALSE;
-
-    n_array = NULL;
-    min_array = NULL;
-    max_array = NULL;
-    sum_array = NULL;
-    sumsq_array = NULL;
-    index_array = NULL;
-    
-    if (strcmp(method_opt->answer, "n") == 0) {
-	method = METHOD_N;
-	bin_n = TRUE;
-    }
-    if (strcmp(method_opt->answer, "min") == 0) {
-	method = METHOD_MIN;
-	bin_min = TRUE;
-    }
-    if (strcmp(method_opt->answer, "max") == 0) {
-	method = METHOD_MAX;
-	bin_max = TRUE;
-    }
-    if (strcmp(method_opt->answer, "range") == 0) {
-	method = METHOD_RANGE;
-	bin_min = TRUE;
-	bin_max = TRUE;
-    }
-    if (strcmp(method_opt->answer, "sum") == 0) {
-	method = METHOD_SUM;
-	bin_sum = TRUE;
-    }
-    if (strcmp(method_opt->answer, "mean") == 0) {
-	method = METHOD_MEAN;
-	bin_sum = TRUE;
-	bin_n = TRUE;
-    }
-    if (strcmp(method_opt->answer, "stddev") == 0) {
-	method = METHOD_STDDEV;
-	bin_sum = TRUE;
-	bin_sumsq = TRUE;
-	bin_n = TRUE;
-    }
-    if (strcmp(method_opt->answer, "variance") == 0) {
-	method = METHOD_VARIANCE;
-	bin_sum = TRUE;
-	bin_sumsq = TRUE;
-	bin_n = TRUE;
-    }
-    if (strcmp(method_opt->answer, "coeff_var") == 0) {
-	method = METHOD_COEFF_VAR;
-	bin_sum = TRUE;
-	bin_sumsq = TRUE;
-	bin_n = TRUE;
-    }
-    if (strcmp(method_opt->answer, "median") == 0) {
-	method = METHOD_MEDIAN;
-	bin_index = TRUE;
-    }
-    if (strcmp(method_opt->answer, "percentile") == 0) {
-	if (pth_opt->answer != NULL)
-	    pth = atoi(pth_opt->answer);
-	else
-	    G_fatal_error(_("Unable to calculate percentile without the pth option specified!"));
-	method = METHOD_PERCENTILE;
-	bin_index = TRUE;
-    }
-    if (strcmp(method_opt->answer, "skewness") == 0) {
-	method = METHOD_SKEWNESS;
-	bin_index = TRUE;
-    }
-    if (strcmp(method_opt->answer, "trimmean") == 0) {
-	if (trim_opt->answer != NULL)
-	    trim = atof(trim_opt->answer) / 100.0;
-	else
-	    G_fatal_error(_("Unable to calculate trimmed mean without the trim option specified!"));
-	method = METHOD_TRIMMEAN;
-	bin_index = TRUE;
+        sscanf(irange_opt->answers[0], "%lf", &irange_min);
+        sscanf(irange_opt->answers[1], "%lf", &irange_max);
+
+        if (irange_min > irange_max) {
+            d_tmp = irange_max;
+            irange_max = irange_min;
+            irange_min = d_tmp;
+        }
     }
 
+    point_binning_set(&point_binning, method_opt->answer, pth_opt->answer,
+                      trim_opt->answer, FALSE);
+
+    base_array = NULL;
+
     if (strcmp("CELL", type_opt->answer) == 0)
 	rtype = CELL_TYPE;
     else if (strcmp("DCELL", type_opt->answer) == 0)
@@ -581,28 +512,9 @@ int main(int argc, char *argv[])
     else
 	rtype = FCELL_TYPE;
 
-    if (method == METHOD_N)
+    if (point_binning.method == METHOD_N)
 	rtype = CELL_TYPE;
 
-
-    Rast_get_window(&region);
-
-
-    if (scan_flag->answer || extents_flag->answer) {
-	if (zrange_opt->answer)
-	    G_warning(_("zrange will not be taken into account during scan"));
-
-	scan_bounds(LAS_reader, shell_style->answer, extents_flag->answer,
-	            zscale, &region);
-
-	if (!extents_flag->answer) {
-	    LASHeader_Destroy(LAS_header);
-	    LASReader_Destroy(LAS_reader);
-
-	    exit(EXIT_SUCCESS);
-	}
-    }
-    
     if (res_opt->answer) {
 	/* align to resolution */
 	res = atof(res_opt->answer);
@@ -638,6 +550,7 @@ int main(int argc, char *argv[])
 	    npasses++;
 	else
 	    last_rows = rows;
+
     }
     cols = region.cols;
 
@@ -646,54 +559,47 @@ int main(int argc, char *argv[])
     G_debug(2, "region.rows=%d  [box_rows=%d]  region.cols=%d", region.rows,
 	    rows, region.cols);
 
+    /* using row-based chunks (used for output) when input and output
+     * region matches and using segment library when they don't */
+    int use_segment = 0;
+    int use_base_raster_res = 0;
+    /* TODO: see if the input region extent is smaller than the raster
+     * if yes, the we need to load the whole base raster if the -e
+     * flag was defined (alternatively clip the regions) */
+    if (base_rast_res_flag->answer)
+        use_base_raster_res = 1;
+    if (base_raster_opt->answer && (res_opt->answer || use_base_raster_res
+                                    || extents_flag->answer))
+        use_segment = 1;
+    if (base_raster_opt->answer && !use_segment) {
+        /* TODO: do we need to test existence first? mapset? */
+        base_raster = Rast_open_old(base_raster_opt->answer, "");
+        base_raster_data_type = Rast_get_map_type(base_raster);
+        base_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(base_raster_data_type));
+    }
+    if (base_raster_opt->answer && use_segment) {
+        if (use_base_raster_res) {
+            /* read raster actual extent and resolution */
+            Rast_get_cellhd(base_raster_opt->answer, "", &input_region);
+            /* TODO: make it only as small as the output is or points are */
+            Rast_set_input_window(&input_region);  /* we have split window */
+        } else {
+            Rast_get_input_window(&input_region);
+        }
+        rast_segment_open(&base_segment, base_raster_opt->answer, &base_raster_data_type);
+    }
+
     if (!scan_flag->answer) {
-	/* check if rows * (cols + 1) go into a size_t */
-	if (sizeof(size_t) < 8) {
-	    double dsize = rows * (cols + 1);
-	    
-	    if (dsize != (size_t)rows * (cols + 1))
+        if (!check_rows_cols_fit_to_size_t(rows, cols))
 		G_fatal_error(_("Unable to process the hole map at once. "
-		                "Please set the %s option to some value lower than 100."),
+                        "Please set the '%s' option to some value lower than 100."),
 				percent_opt->key);
+        point_binning_memory_test(&point_binning, rows, cols, rtype);
 	}
-	/* allocate memory (test for enough before we start) */
-	if (bin_n)
-	    n_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(CELL_TYPE));
-	if (bin_min)
-	    min_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	if (bin_max)
-	    max_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	if (bin_sum)
-	    sum_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	if (bin_sumsq)
-	    sumsq_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	if (bin_index)
-	    index_array =
-		G_calloc((size_t)rows * (cols + 1), Rast_cell_size(CELL_TYPE));
-
-	/* and then free it again */
-	if (bin_n)
-	    G_free(n_array);
-	if (bin_min)
-	    G_free(min_array);
-	if (bin_max)
-	    G_free(max_array);
-	if (bin_sum)
-	    G_free(sum_array);
-	if (bin_sumsq)
-	    G_free(sumsq_array);
-	if (bin_index)
-	    G_free(index_array);
-
-	/** end memory test **/
-    }
-
 
     /* open output map */
     out_fd = Rast_open_new(outmap, rtype);
 
-    estimated_lines = LASHeader_GetPointRecordsCount(LAS_header);
-
     /* allocate memory for a single row of output data */
     raster_row = Rast_allocate_output_buf(rtype);
 
@@ -703,183 +609,140 @@ int main(int argc, char *argv[])
 
     /* main binning loop(s) */
     for (pass = 1; pass <= npasses; pass++) {
-	LASError LAS_error;
 
 	if (npasses > 1)
 	    G_message(_("Pass #%d (of %d) ..."), pass, npasses);
 
-	LAS_error = LASReader_Seek(LAS_reader, 0);
-	
-	if (LAS_error != LE_None)
-	    G_fatal_error(_("Could not rewind input file"));
-
 	/* figure out segmentation */
 	row0 = (pass - 1) * rows;
 	if (pass == npasses) {
 	    rows = last_rows;
 	}
 
+        if (base_array) {
+            G_debug(2, "filling base raster array");
+            for (row = 0; row < rows; row++) {
+                Rast_get_row(base_raster, base_array + ((size_t) row * cols * Rast_cell_size(base_raster_data_type)), row, base_raster_data_type);
+            }
+        }
+
 	G_debug(2, "pass=%d/%d  rows=%d", pass, npasses, rows);
 
-	if (bin_n) {
-	    G_debug(2, "allocating n_array");
-	    n_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(CELL_TYPE));
-	    blank_array(n_array, rows, cols, CELL_TYPE, 0);
-	}
-	if (bin_min) {
-	    G_debug(2, "allocating min_array");
-	    min_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	    blank_array(min_array, rows, cols, rtype, -1);	/* fill with NULLs */
-	}
-	if (bin_max) {
-	    G_debug(2, "allocating max_array");
-	    max_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	    blank_array(max_array, rows, cols, rtype, -1);	/* fill with NULLs */
-	}
-	if (bin_sum) {
-	    G_debug(2, "allocating sum_array");
-	    sum_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	    blank_array(sum_array, rows, cols, rtype, 0);
-	}
-	if (bin_sumsq) {
-	    G_debug(2, "allocating sumsq_array");
-	    sumsq_array = G_calloc((size_t)rows * (cols + 1), Rast_cell_size(rtype));
-	    blank_array(sumsq_array, rows, cols, rtype, 0);
-	}
-	if (bin_index) {
-	    G_debug(2, "allocating index_array");
-	    index_array =
-		G_calloc((size_t)rows * (cols + 1), Rast_cell_size(CELL_TYPE));
-	    blank_array(index_array, rows, cols, CELL_TYPE, -1);	/* fill with NULLs */
-	}
+    point_binning_allocate(&point_binning, rows, cols, rtype);
 
 	line = 0;
 	count = 0;
 	counter = 0;
 	G_percent_reset();
 
-	while ((LAS_point = LASReader_GetNextPoint(LAS_reader)) != NULL) {
-	    line++;
-	    counter++;
-
-	    if (counter == 100000) {	/* speed */
-		if (line < estimated_lines)
-		    G_percent(line, estimated_lines, 3);
-		counter = 0;
-	    }
-
-	    if (!LASPoint_IsValid(LAS_point)) {
-		continue;
-	    }
-
-	    x = LASPoint_GetX(LAS_point);
-	    y = LASPoint_GetY(LAS_point);
-	    if (intens_flag->answer)
-		/* use z variable here to allow for scaling of intensity below */
-		z = LASPoint_GetIntensity(LAS_point);
-	    else
-		z = LASPoint_GetZ(LAS_point);
-
-	if (return_filter != LAS_ALL) {
-	    int return_no = LASPoint_GetReturnNumber(LAS_point);
-	    int n_returns = LASPoint_GetNumberOfReturns(LAS_point);
-	    skipme = 1;
-
-	    switch (return_filter) {
-	    case LAS_FIRST:
-		if (return_no == 1)
-		    skipme = 0;
-		break;
-	    case LAS_MID:
-		if (return_no > 1 && return_no < n_returns)
-		    skipme = 0;
-		break;
-	    case LAS_LAST:
-		if (n_returns > 1 && return_no == n_returns)
-		    skipme = 0;
-		break;
-	    }
-
-	    if (skipme) {
-		n_filtered++;
-		continue;
-	    }
-	}
-	if (class_opt->answer) {
-	    point_class = (int) LASPoint_GetClassification(LAS_point);
-	    i = 0;
-	    skipme = TRUE;
-	    while (class_opt->answers[i]) {
-		if (point_class == atoi(class_opt->answers[i])) {
-		    skipme = FALSE;
-		    break;
-		}
-		i++;
-	    }
-	    if (skipme) {
-		continue;
-	    }
-	}
-
-	    if (y <= region.south || y > region.north) {
-		continue;
-	    }
-	    if (x < region.west || x >= region.east) {
-		continue;
-	    }
-
-	    /* find the bin in the current array box */
-	    arr_row = (int)((region.north - y) / region.ns_res) - row0;
-	    if (arr_row < 0 || arr_row >= rows) {
-		continue;
-	    }
-	    arr_col = (int)((x - region.west) / region.ew_res);
-
-	    /* G_debug(5, "arr_row: %d   arr_col: %d", arr_row, arr_col); */
-
-	    z = z * zscale;
-
-	    if (zrange_opt->answer) {
-		if (z < zrange_min || z > zrange_max) {
+        /* loop of input files */
+        for (i = 0; i < infiles.num_items; i++) {
+            infile = infiles.items[i];
+            /* we already know file is there, so just do basic checks */
+            LAS_reader = LASReader_Create(infile);
+            if (LAS_reader == NULL)
+                G_fatal_error(_("Unable to open file <%s>"), infile);
+
+            while ((LAS_point = LASReader_GetNextPoint(LAS_reader)) != NULL) {
+                line++;
+                counter++;
+
+                if (counter == 100000) {        /* speed */
+                    if (line < estimated_lines)
+                        G_percent(line, estimated_lines, 3);
+                    counter = 0;
+                }
+
+                /* We always count them and report because behavior
+                 * changed in between 7.0 and 7.2 from undefined (but skipping
+                 * invalid points) to filtering them out only when requested. */
+                if (!LASPoint_IsValid(LAS_point)) {
+                    n_invalid++;
+                    if (only_valid)
+                        continue;
+                }
+
+                x = LASPoint_GetX(LAS_point);
+                y = LASPoint_GetY(LAS_point);
+                if (intens_flag->answer)
+                    /* use intensity as z here to allow all filters (and
+                     * modifications) below to be applied for intensity */
+                    z = LASPoint_GetIntensity(LAS_point);
+                else
+                    z = LASPoint_GetZ(LAS_point);
+
+                int return_n = LASPoint_GetReturnNumber(LAS_point);
+                int n_returns = LASPoint_GetNumberOfReturns(LAS_point);
+                if (return_filter_is_out(&return_filter_struct, return_n, n_returns)) {
+                    n_filtered++;
+                    continue;
+                }
+                point_class = (int) LASPoint_GetClassification(LAS_point);
+                if (class_filter_is_out(&class_filter, point_class))
+                    continue;
+
+                if (y <= region.south || y > region.north) {
+                    continue;
+                }
+                if (x < region.west || x >= region.east) {
+                    continue;
+                }
+
+                /* find the bin in the current array box */
+		arr_row = (int)((region.north - y) / region.ns_res) - row0;
+		if (arr_row < 0 || arr_row >= rows)
 		    continue;
-		}
-	    }
-
-	    count++;
-	    /*          G_debug(5, "x: %f, y: %f, z: %f", x, y, z); */
-
-	    if (bin_n)
-		update_n(n_array, cols, arr_row, arr_col);
-	    if (bin_min)
-		update_min(min_array, cols, arr_row, arr_col, rtype, z);
-	    if (bin_max)
-		update_max(max_array, cols, arr_row, arr_col, rtype, z);
-	    if (bin_sum)
-		update_sum(sum_array, cols, arr_row, arr_col, rtype, z);
-	    if (bin_sumsq)
-		update_sumsq(sumsq_array, cols, arr_row, arr_col, rtype, z);
-	    if (bin_index) {
-		ptr = index_array;
-		ptr =
-		    G_incr_void_ptr(ptr,
-				    ((arr_row * cols) +
-				     arr_col) * Rast_cell_size(CELL_TYPE));
-
-		if (Rast_is_null_value(ptr, CELL_TYPE)) {	/* first node */
-		    head_id = new_node();
-		    nodes[head_id].next = -1;
-		    nodes[head_id].z = z;
-		    Rast_set_c_value(ptr, head_id, CELL_TYPE);	/* store index to head */
-		}
-		else {		/* head is already there */
-
-		    head_id = Rast_get_c_value(ptr, CELL_TYPE);	/* get index to head */
-		    head_id = add_node(head_id, z);
-		    if (head_id != -1)
-			Rast_set_c_value(ptr, head_id, CELL_TYPE);	/* store index to head */
-		}
-	    }
-	}			/* while !EOF */
+                arr_col = (int)((x - region.west) / region.ew_res);
+
+                z = z * zscale;
+
+                if (base_array) {
+                    double base_z;
+                    if (row_array_get_value_row_col(base_array, arr_row, arr_col,
+                                                    cols, base_raster_data_type,
+                                                    &base_z))
+                        z -= base_z;
+                    else
+                        continue;
+                }
+                else if (use_segment) {
+                    double base_z;
+                    if (rast_segment_get_value_xy(&base_segment, &input_region,
+                                                  base_raster_data_type, x, y,
+                                                  &base_z))
+                        z -= base_z;
+                    else
+                        continue;
+                }
+
+                if (zrange_opt->answer) {
+                    if (z < zrange_min || z > zrange_max) {
+                        continue;
+                    }
+                }
+
+                if (intens_import_flag->answer || irange_opt->answer) {
+                    intensity = LASPoint_GetIntensity(LAS_point);
+                    intensity *= iscale;
+                    if (irange_opt->answer) {
+                        if (intensity < irange_min || intensity > irange_max) {
+                            continue;
+                        }
+                    }
+                    /* use intensity for statistics */
+                    if (intens_import_flag->answer)
+                        z = intensity;
+                }
+
+                count++;
+                /*          G_debug(5, "x: %f, y: %f, z: %f", x, y, z); */
+
+                update_value(&point_binning, &bin_index_nodes, cols,
+                             arr_row, arr_col, rtype, x, y, z);
+            }                        /* while !EOF of one input file */
+            /* close input LAS file */
+            LASReader_Destroy(LAS_reader);
+        }           /* end of loop for all input files files */
 
 	G_percent(1, 1, 1);	/* flush */
 	G_debug(2, "pass %d finished, %lu coordinates in box", pass, count);
@@ -889,342 +752,29 @@ int main(int argc, char *argv[])
 	/* calc stats and output */
 	G_message(_("Writing to map ..."));
 	for (row = 0; row < rows; row++) {
-
-	    switch (method) {
-	    case METHOD_N:	/* n is a straight copy */
-		Rast_raster_cpy(raster_row,
-			     n_array +
-			     (row * cols * Rast_cell_size(CELL_TYPE)), cols,
-			     CELL_TYPE);
-		break;
-
-	    case METHOD_MIN:
-		Rast_raster_cpy(raster_row,
-			     min_array + (row * cols * Rast_cell_size(rtype)),
-			     cols, rtype);
-		break;
-
-	    case METHOD_MAX:
-		Rast_raster_cpy(raster_row,
-			     max_array + (row * cols * Rast_cell_size(rtype)),
-			     cols, rtype);
-		break;
-
-	    case METHOD_SUM:
-		Rast_raster_cpy(raster_row,
-			     sum_array + (row * cols * Rast_cell_size(rtype)),
-			     cols, rtype);
-		break;
-
-	    case METHOD_RANGE:	/* (max-min) */
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    offset = (row * cols + col) * Rast_cell_size(rtype);
-		    min = Rast_get_d_value(min_array + offset, rtype);
-		    max = Rast_get_d_value(max_array + offset, rtype);
-		    Rast_set_d_value(ptr, max - min, rtype);
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-
-	    case METHOD_MEAN:	/* (sum / n) */
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    offset = (row * cols + col) * Rast_cell_size(rtype);
-		    n_offset = (row * cols + col) * Rast_cell_size(CELL_TYPE);
-		    n = Rast_get_c_value(n_array + n_offset, CELL_TYPE);
-		    sum = Rast_get_d_value(sum_array + offset, rtype);
-
-		    if (n == 0)
-			Rast_set_null_value(ptr, 1, rtype);
-		    else
-			Rast_set_d_value(ptr, (sum / n), rtype);
-
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-
-	    case METHOD_STDDEV:	/*  sqrt(variance)        */
-	    case METHOD_VARIANCE:	/*  (sumsq - sum*sum/n)/n */
-	    case METHOD_COEFF_VAR:	/*  100 * stdev / mean    */
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    offset = (row * cols + col) * Rast_cell_size(rtype);
-		    n_offset = (row * cols + col) * Rast_cell_size(CELL_TYPE);
-		    n = Rast_get_c_value(n_array + n_offset, CELL_TYPE);
-		    sum = Rast_get_d_value(sum_array + offset, rtype);
-		    sumsq = Rast_get_d_value(sumsq_array + offset, rtype);
-
-		    if (n == 0)
-			Rast_set_null_value(ptr, 1, rtype);
-		    else if (n == 1)
-			Rast_set_d_value(ptr, 0.0, rtype);
-		    else {
-			variance = (sumsq - sum * sum / n) / n;
-			if (variance < GRASS_EPSILON)
-			    variance = 0.0;
-
-			/* nan test */
-			if (variance != variance)
-			    Rast_set_null_value(ptr, 1, rtype);
-			else {
-
-			    if (method == METHOD_STDDEV)
-				variance = sqrt(variance);
-
-			    else if (method == METHOD_COEFF_VAR)
-				variance = 100 * sqrt(variance) / (sum / n);
-
-			    /* nan test */
-			    if (variance != variance)
-				variance = 0.0; /* OK for n > 0 ?*/
-
-			    Rast_set_d_value(ptr, variance, rtype);
-			}
-
-		    }
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-	    case METHOD_MEDIAN:	/* median, if only one point in cell we will use that */
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    n_offset = (row * cols + col) * Rast_cell_size(CELL_TYPE);
-		    if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))	/* no points in cell */
-			Rast_set_null_value(ptr, 1, rtype);
-		    else {	/* one or more points in cell */
-
-			head_id =
-			    Rast_get_c_value(index_array + n_offset,
-						 CELL_TYPE);
-			node_id = head_id;
-
-			n = 0;
-
-			while (node_id != -1) {	/* count number of points in cell */
-			    n++;
-			    node_id = nodes[node_id].next;
-			}
-
-			if (n == 1)	/* only one point, use that */
-			    Rast_set_d_value(ptr, nodes[head_id].z,
-						 rtype);
-			else if (n % 2 != 0) {	/* odd number of points: median_i = (n + 1) / 2 */
-			    n = (n + 1) / 2;
-			    node_id = head_id;
-			    for (j = 1; j < n; j++)	/* get "median element" */
-				node_id = nodes[node_id].next;
-
-			    Rast_set_d_value(ptr, nodes[node_id].z,
-						 rtype);
-			}
-			else {	/* even number of points: median = (val_below + val_above) / 2 */
-
-			    z = (n + 1) / 2.0;
-			    n = floor(z);
-			    node_id = head_id;
-			    for (j = 1; j < n; j++)	/* get element "below" */
-				node_id = nodes[node_id].next;
-
-			    z = (nodes[node_id].z +
-				 nodes[nodes[node_id].next].z) / 2;
-			    Rast_set_d_value(ptr, z, rtype);
-			}
-		    }
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-	    case METHOD_PERCENTILE:	/* rank = (pth*(n+1))/100; interpolate linearly */
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    n_offset = (row * cols + col) * Rast_cell_size(CELL_TYPE);
-		    if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))	/* no points in cell */
-			Rast_set_null_value(ptr, 1, rtype);
-		    else {
-			head_id =
-			    Rast_get_c_value(index_array + n_offset,
-						 CELL_TYPE);
-			node_id = head_id;
-			n = 0;
-
-			while (node_id != -1) {	/* count number of points in cell */
-			    n++;
-			    node_id = nodes[node_id].next;
-			}
-
-			z = (pth * (n + 1)) / 100.0;
-			r_low = floor(z);	/* lower rank */
-			if (r_low < 1)
-			    r_low = 1;
-			else if (r_low > n)
-			    r_low = n;
-
-			r_up = ceil(z);	/* upper rank */
-			if (r_up > n)
-			    r_up = n;
-
-			node_id = head_id;
-			for (j = 1; j < r_low; j++)	/* search lower value */
-			    node_id = nodes[node_id].next;
-
-			z = nodes[node_id].z;	/* save lower value */
-			node_id = head_id;
-			for (j = 1; j < r_up; j++)	/* search upper value */
-			    node_id = nodes[node_id].next;
-
-			z = (z + nodes[node_id].z) / 2;
-			Rast_set_d_value(ptr, z, rtype);
-		    }
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-	    case METHOD_SKEWNESS:	/* skewness = sum(xi-mean)^3/(N-1)*s^3 */
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    n_offset = (row * cols + col) * Rast_cell_size(CELL_TYPE);
-		    if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))	/* no points in cell */
-			Rast_set_null_value(ptr, 1, rtype);
-		    else {
-			head_id =
-			    Rast_get_c_value(index_array + n_offset,
-						 CELL_TYPE);
-			node_id = head_id;
-
-			n = 0;	/* count */
-			sum = 0.0;	/* sum */
-			sumsq = 0.0;	/* sum of squares */
-			sumdev = 0.0;	/* sum of (xi - mean)^3 */
-			skew = 0.0;	/* skewness */
-
-			while (node_id != -1) {
-			    z = nodes[node_id].z;
-			    n++;
-			    sum += z;
-			    sumsq += (z * z);
-			    node_id = nodes[node_id].next;
-			}
-
-			if (n > 1) {	/* if n == 1, skew is "0.0" */
-			    mean = sum / n;
-			    node_id = head_id;
-			    while (node_id != -1) {
-				z = nodes[node_id].z;
-				sumdev += pow((z - mean), 3);
-				node_id = nodes[node_id].next;
-			    }
-
-			    variance = (sumsq - sum * sum / n) / n;
-			    if (variance < GRASS_EPSILON)
-				skew = 0.0;
-			    else
-				skew =
-				    sumdev / ((n - 1) *
-					      pow(sqrt(variance), 3));
-			}
-			Rast_set_d_value(ptr, skew, rtype);
-		    }
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-	    case METHOD_TRIMMEAN:
-		ptr = raster_row;
-		for (col = 0; col < cols; col++) {
-		    n_offset = (row * cols + col) * Rast_cell_size(CELL_TYPE);
-		    if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))	/* no points in cell */
-			Rast_set_null_value(ptr, 1, rtype);
-		    else {
-			head_id =
-			    Rast_get_c_value(index_array + n_offset,
-						 CELL_TYPE);
-
-			node_id = head_id;
-			n = 0;
-			while (node_id != -1) {	/* count number of points in cell */
-			    n++;
-			    node_id = nodes[node_id].next;
-			}
-
-			if (1 == n)
-			    mean = nodes[head_id].z;
-			else {
-			    k = floor(trim * n + 0.5);	/* number of ranks to discard on each tail */
-
-			    if (k > 0 && (n - 2 * k) > 0) {	/* enough elements to discard */
-				node_id = head_id;
-				for (j = 0; j < k; j++)	/* move to first rank to consider */
-				    node_id = nodes[node_id].next;
-
-				j = k + 1;
-				k = n - k;
-				n = 0;
-				sum = 0.0;
-
-				while (j <= k) {	/* get values in interval */
-				    n++;
-				    sum += nodes[node_id].z;
-				    node_id = nodes[node_id].next;
-				    j++;
-				}
-			    }
-			    else {
-				node_id = head_id;
-				n = 0;
-				sum = 0.0;
-				while (node_id != -1) {
-				    n++;
-				    sum += nodes[node_id].z;
-				    node_id = nodes[node_id].next;
-				}
-			    }
-			    mean = sum / n;
-			}
-			Rast_set_d_value(ptr, mean, rtype);
-		    }
-		    ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
-		}
-		break;
-
-	    default:
-		G_fatal_error("?");
-	    }
-
+        /* potentially vector writing can be independent on the binning */
+        write_values(&point_binning, &bin_index_nodes, raster_row, row,
+            cols, rtype, NULL);
 	    /* write out line of raster data */
-	    Rast_put_row(out_fd, raster_row, rtype);
+        Rast_put_row(out_fd, raster_row, rtype);
 	}
 
 	/* free memory */
-	if (bin_n)
-	    G_free(n_array);
-	if (bin_min)
-	    G_free(min_array);
-	if (bin_max)
-	    G_free(max_array);
-	if (bin_sum)
-	    G_free(sum_array);
-	if (bin_sumsq)
-	    G_free(sumsq_array);
-	if (bin_index) {
-	    G_free(index_array);
-	    G_free(nodes);
-	    num_nodes = 0;
-	    max_nodes = 0;
-	    nodes = NULL;
-	}
-
+	point_binning_free(&point_binning, &bin_index_nodes);
     }				/* passes loop */
+    if (base_array)
+        Rast_close(base_raster);
+    if (use_segment)
+        Segment_close(&base_segment);
 
     G_percent(1, 1, 1);		/* flush */
     G_free(raster_row);
 
-    /* close input LAS file */
-    LASHeader_Destroy(LAS_header);
-    LASReader_Destroy(LAS_reader);
-
     /* close raster file & write history */
     Rast_close(out_fd);
 
-    sprintf(title, "Raw x,y,z data binned into a raster grid by cell %s",
-	    method_opt->answer);
+    sprintf(title, "Raw X,Y,Z data binned into a raster grid by cell %s",
+            method_opt->answer);
     Rast_put_cell_title(outmap, title);
 
     Rast_short_history(outmap, "raster", &history);
@@ -1232,160 +782,33 @@ int main(int argc, char *argv[])
     Rast_set_history(&history, HIST_DATSRC_1, infile);
     Rast_write_history(outmap, &history);
 
-
-    sprintf(buff, _("%lu points found in region."), count_total);
-    G_done_msg("%s", buff);
-    G_debug(1, "Processed %lu points.", line_total);
-
-    exit(EXIT_SUCCESS);
-
-}
-
-void print_lasinfo(LASHeaderH LAS_header, LASSRSH LAS_srs)
-{
-    char *las_srs_proj4 = LASSRS_GetProj4(LAS_srs);
-    int las_point_format = LASHeader_GetDataFormatId(LAS_header);
-
-    fprintf(stdout, "\nUsing LAS Library Version '%s'\n\n",
-                    LAS_GetFullVersion());
-    fprintf(stdout, "LAS File Version:                  %d.%d\n",
-                    LASHeader_GetVersionMajor(LAS_header),
-                    LASHeader_GetVersionMinor(LAS_header));
-    fprintf(stdout, "System ID:                         '%s'\n",
-                    LASHeader_GetSystemId(LAS_header));
-    fprintf(stdout, "Generating Software:               '%s'\n",
-                    LASHeader_GetSoftwareId(LAS_header));
-    fprintf(stdout, "File Creation Day/Year:            %d/%d\n",
-                    LASHeader_GetCreationDOY(LAS_header),
-		    LASHeader_GetCreationYear(LAS_header));
-    fprintf(stdout, "Point Data Format:                 %d\n",
-                    las_point_format);
-    fprintf(stdout, "Number of Point Records:           %d\n",
-                    LASHeader_GetPointRecordsCount(LAS_header));
-    fprintf(stdout, "Number of Points by Return:        %d %d %d %d %d\n",
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 0),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 1),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 2),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 3),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 4));
-    fprintf(stdout, "Scale Factor X Y Z:                %g %g %g\n",
-                    LASHeader_GetScaleX(LAS_header),
-                    LASHeader_GetScaleY(LAS_header),
-                    LASHeader_GetScaleZ(LAS_header));
-    fprintf(stdout, "Offset X Y Z:                      %g %g %g\n",
-                    LASHeader_GetOffsetX(LAS_header),
-                    LASHeader_GetOffsetY(LAS_header),
-                    LASHeader_GetOffsetZ(LAS_header));
-    fprintf(stdout, "Min X Y Z:                         %g %g %g\n",
-                    LASHeader_GetMinX(LAS_header),
-                    LASHeader_GetMinY(LAS_header),
-                    LASHeader_GetMinZ(LAS_header));
-    fprintf(stdout, "Max X Y Z:                         %g %g %g\n",
-                    LASHeader_GetMaxX(LAS_header),
-                    LASHeader_GetMaxY(LAS_header),
-                    LASHeader_GetMaxZ(LAS_header));
-    if (las_srs_proj4 && strlen(las_srs_proj4) > 0) {
-	fprintf(stdout, "Spatial Reference:\n");
-	fprintf(stdout, "%s\n", las_srs_proj4);
+    /* set computation region to the new raster map */
+    /* TODO: should be in the done message */
+    if (set_region_flag->answer)
+        G_put_window(&region);
+
+    if (n_invalid && only_valid)
+        G_message(_("%lu input points were invalid and filtered out"),
+                  n_invalid);
+    if (n_invalid && !only_valid)
+        G_message(_("%lu input points were invalid, use -%c flag to filter"
+                    " them out"), n_invalid, only_valid_flag->key);
+    if (infiles.num_items > 1) {
+        sprintf(buff, _("Raster map <%s> created."
+                        " %lu points from %d files found in region."),
+                outmap, count_total, infiles.num_items);
     }
     else {
-	fprintf(stdout, "Spatial Reference:                 None\n");
+        sprintf(buff, _("Raster map <%s> created."
+                        " %lu points found in region."),
+                outmap, count_total);
     }
-    
-    fprintf(stdout, "\nData Fields:\n");
-    fprintf(stdout, "  'X'\n  'Y'\n  'Z'\n  'Intensity'\n  'Return Number'\n");
-    fprintf(stdout, "  'Number of Returns'\n  'Scan Direction'\n");
-    fprintf(stdout, "  'Flighline Edge'\n  'Classification'\n  'Scan Angle Rank'\n");
-    fprintf(stdout, "  'User Data'\n  'Point Source ID'\n");
-    if (las_point_format == 1 || las_point_format == 3 || las_point_format == 4 || las_point_format == 5) {
-	fprintf(stdout, "  'GPS Time'\n");
-    }
-    if (las_point_format == 2 || las_point_format == 3 || las_point_format == 5) {
-	fprintf(stdout, "  'Red'\n  'Green'\n  'Blue'\n");
-    }
-    fprintf(stdout, "\n");
-    fflush(stdout);
-
-    return;
-}
-
-
-int scan_bounds(LASReaderH LAS_reader, int shell_style, int extents,
-		double zscale, struct Cell_head *region)
-{
-    unsigned long line;
-    int first;
-    double min_x, max_x, min_y, max_y, min_z, max_z;
-    double x, y, z;
-    LASPointH LAS_point;
-
-    line = 0;
-    first = TRUE;
-    
-    /* init to nan in case no points are found */
-    min_x = max_x = min_y = max_y = min_z = max_z = 0.0 / 0.0;
-
-    G_verbose_message(_("Scanning data ..."));
-    
-    LASReader_Seek(LAS_reader, 0);
 
-    while ((LAS_point = LASReader_GetNextPoint(LAS_reader)) != NULL) {
-	line++;
-
-	if (!LASPoint_IsValid(LAS_point)) {
-	    continue;
-	}
-
-	x = LASPoint_GetX(LAS_point);
-	y = LASPoint_GetY(LAS_point);
-	z = LASPoint_GetZ(LAS_point);
-
-	if (first) {
-	    min_x = x;
-	    max_x = x;
-	    min_y = y;
-	    max_y = y;
-	    min_z = z;
-	    max_z = z;
-	    first = FALSE;
-	}
-	else {
-	    if (x < min_x)
-		min_x = x;
-	    if (x > max_x)
-		max_x = x;
-	    if (y < min_y)
-		min_y = y;
-	    if (y > max_y)
-		max_y = y;
-	    if (z < min_z)
-		min_z = z;
-	    if (z > max_z)
-		max_z = z;
-	}
-    }
+    G_done_msg("%s", buff);
+    G_debug(1, "Processed %lu points.", line_total);
 
-    if (!extents) {
-	if (!shell_style) {
-	    fprintf(stderr, _("Range:     min         max\n"));
-	    fprintf(stdout, "x: %11f %11f\n", min_x, max_x);
-	    fprintf(stdout, "y: %11f %11f\n", min_y, max_y);
-	    fprintf(stdout, "z: %11f %11f\n", min_z * zscale, max_z * zscale);
-	}
-	else
-	    fprintf(stdout, "n=%f s=%f e=%f w=%f b=%f t=%f\n",
-		    max_y, min_y, max_x, min_x, min_z * zscale, max_z * zscale);
+    string_list_free(&infiles);
 
-	G_debug(1, "Processed %lu points.", line);
-	G_debug(1, "region template: g.region n=%f s=%f e=%f w=%f",
-		max_y, min_y, max_x, min_x);
-    }
-    else {
-	region->east = max_x;
-	region->west = min_x;
-	region->north = max_y;
-	region->south = min_y;
-    }
+    exit(EXIT_SUCCESS);
 
-    return 0;
 }
diff --git a/raster/r.in.lidar/point_binning.c b/raster/r.in.lidar/point_binning.c
new file mode 100644
index 0000000..be111bc
--- /dev/null
+++ b/raster/r.in.lidar/point_binning.c
@@ -0,0 +1,845 @@
+/*
+ * r.in.lidar projection-related functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to separate functions)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/raster.h>
+#include <grass/vector.h>
+
+#include "point_binning.h"
+#include "local_proto.h"
+
+#define SIZE_INCREMENT 10
+
+static int new_node(struct BinIndex *bin_index)
+{
+    int n = bin_index->num_nodes++;
+
+    if (bin_index->num_nodes >= bin_index->max_nodes) {
+        bin_index->max_nodes += SIZE_INCREMENT;
+        bin_index->nodes = G_realloc(bin_index->nodes,
+                                     (size_t) bin_index->max_nodes *
+                                     sizeof(struct node));
+    }
+
+    return n;
+}
+
+
+/* add node to sorted, single linked list 
+ * returns id if head has to be saved to index array, otherwise -1 */
+static int add_node(struct BinIndex *bin_index, int head, double z)
+{
+    int node_id, last_id, newnode_id, head_id;
+
+    head_id = head;
+    node_id = head_id;
+    last_id = head_id;
+
+    while (node_id != -1 && bin_index->nodes[node_id].z < z) {
+        last_id = node_id;
+        node_id = bin_index->nodes[node_id].next;
+    }
+
+    /* end of list, simply append */
+    if (node_id == -1) {
+        newnode_id = new_node(bin_index);
+        bin_index->nodes[newnode_id].next = -1;
+        bin_index->nodes[newnode_id].z = z;
+        bin_index->nodes[last_id].next = newnode_id;
+        return -1;
+    }
+    else if (node_id == head_id) {      /* pole position, insert as head */
+        newnode_id = new_node(bin_index);
+        bin_index->nodes[newnode_id].next = head_id;
+        head_id = newnode_id;
+        bin_index->nodes[newnode_id].z = z;
+        return (head_id);
+    }
+    else {                      /* somewhere in the middle, insert */
+        newnode_id = new_node(bin_index);
+        bin_index->nodes[newnode_id].z = z;
+        bin_index->nodes[newnode_id].next = node_id;
+        bin_index->nodes[last_id].next = newnode_id;
+        return -1;
+    }
+}
+
+
+int update_bin_index(struct BinIndex *bin_index, void *index_array,
+                     int cols, int row, int col,
+                     RASTER_MAP_TYPE map_type, double value)
+{
+    int head_id;
+    void *ptr = index_array;
+
+    ptr =
+        G_incr_void_ptr(ptr,
+                        (((size_t) row * cols) + col) * Rast_cell_size(CELL_TYPE));
+
+    /* first node */
+    if (Rast_is_null_value(ptr, CELL_TYPE)) {
+        head_id = new_node(bin_index);
+        bin_index->nodes[head_id].next = -1;
+        bin_index->nodes[head_id].z = value;
+        /* store index to head */
+        Rast_set_c_value(ptr, head_id, CELL_TYPE);
+    }
+    /* head is already there */
+    else {
+
+        /* get index to head */
+        head_id = Rast_get_c_value(ptr, CELL_TYPE);
+        head_id = add_node(bin_index, head_id, value);
+        /* if id valid, store index to head */
+        if (head_id != -1)
+            Rast_set_c_value(ptr, head_id, CELL_TYPE);
+    }
+    /* for consistency with functions from support.c */
+    return 0;
+}
+
+void point_binning_set(struct PointBinning *point_binning, char *method,
+                       char *percentile, char *trim, int bin_coordinates)
+{
+
+    /* figure out what maps we need in memory */
+    /*  n               n
+       min              min
+       max              max
+       range            min max         max - min
+       sum              sum
+       mean             sum n           sum/n
+       stddev           sum sumsq n     sqrt((sumsq - sum*sum/n)/n)
+       variance         sum sumsq n     (sumsq - sum*sum/n)/n
+       coeff_var        sum sumsq n     sqrt((sumsq - sum*sum/n)/n) / (sum/n)
+       median           n               array index to linked list
+       percentile       n               array index to linked list
+       skewness         n               array index to linked list
+       trimmean         n               array index to linked list
+     */
+    point_binning->method = METHOD_NONE;
+    point_binning->bin_n = FALSE;
+    point_binning->bin_min = FALSE;
+    point_binning->bin_max = FALSE;
+    point_binning->bin_sum = FALSE;
+    point_binning->bin_sumsq = FALSE;
+    point_binning->bin_index = FALSE;
+    point_binning->bin_coordinates = FALSE;
+
+    point_binning->n_array = NULL;
+    point_binning->min_array = NULL;
+    point_binning->max_array = NULL;
+    point_binning->sum_array = NULL;
+    point_binning->sumsq_array = NULL;
+    point_binning->index_array = NULL;
+    point_binning->x_array = NULL;
+    point_binning->y_array = NULL;
+
+    if (strcmp(method, "n") == 0) {
+        point_binning->method = METHOD_N;
+        point_binning->bin_n = TRUE;
+    }
+    if (strcmp(method, "min") == 0) {
+        point_binning->method = METHOD_MIN;
+        point_binning->bin_min = TRUE;
+    }
+    if (strcmp(method, "max") == 0) {
+        point_binning->method = METHOD_MAX;
+        point_binning->bin_max = TRUE;
+    }
+    if (strcmp(method, "range") == 0) {
+        point_binning->method = METHOD_RANGE;
+        point_binning->bin_min = TRUE;
+        point_binning->bin_max = TRUE;
+    }
+    if (strcmp(method, "sum") == 0) {
+        point_binning->method = METHOD_SUM;
+        point_binning->bin_sum = TRUE;
+    }
+    if (strcmp(method, "mean") == 0) {
+        point_binning->method = METHOD_MEAN;
+        point_binning->bin_sum = TRUE;
+        point_binning->bin_n = TRUE;
+    }
+    if (strcmp(method, "stddev") == 0) {
+        point_binning->method = METHOD_STDDEV;
+        point_binning->bin_sum = TRUE;
+        point_binning->bin_sumsq = TRUE;
+        point_binning->bin_n = TRUE;
+    }
+    if (strcmp(method, "variance") == 0) {
+        point_binning->method = METHOD_VARIANCE;
+        point_binning->bin_sum = TRUE;
+        point_binning->bin_sumsq = TRUE;
+        point_binning->bin_n = TRUE;
+    }
+    if (strcmp(method, "coeff_var") == 0) {
+        point_binning->method = METHOD_COEFF_VAR;
+        point_binning->bin_sum = TRUE;
+        point_binning->bin_sumsq = TRUE;
+        point_binning->bin_n = TRUE;
+    }
+    if (strcmp(method, "median") == 0) {
+        point_binning->method = METHOD_MEDIAN;
+        point_binning->bin_index = TRUE;
+    }
+    if (strcmp(method, "percentile") == 0) {
+        if (percentile != NULL)
+            point_binning->pth = atoi(percentile);
+        else
+            G_fatal_error(_("Unable to calculate percentile without the pth option specified!"));
+        point_binning->method = METHOD_PERCENTILE;
+        point_binning->bin_index = TRUE;
+    }
+    if (strcmp(method, "skewness") == 0) {
+        point_binning->method = METHOD_SKEWNESS;
+        point_binning->bin_index = TRUE;
+    }
+    if (strcmp(method, "trimmean") == 0) {
+        if (trim != NULL)
+            point_binning->trim = atof(trim) / 100.0;
+        else
+            G_fatal_error(_("Unable to calculate trimmed mean without the trim option specified!"));
+        point_binning->method = METHOD_TRIMMEAN;
+        point_binning->bin_index = TRUE;
+    }
+    if (bin_coordinates) {
+        /* x, y */
+        point_binning->bin_coordinates = TRUE;
+        /* z and n */
+        point_binning->bin_sum = TRUE;
+        point_binning->bin_n = TRUE;
+    }
+}
+
+
+/* check if rows * (cols + 1) go into a size_t */
+int check_rows_cols_fit_to_size_t(int rows, int cols)
+{
+    if (sizeof(size_t) < 8) {
+        double dsize = rows * (cols + 1);
+
+        /* TODO: the comparison with double may fail */
+        if (dsize != (size_t) rows * (cols + 1))
+            return FALSE;
+    }
+    return TRUE;
+}
+
+
+void point_binning_memory_test(struct PointBinning *point_binning, int rows,
+                               int cols, RASTER_MAP_TYPE rtype)
+{
+    /* allocate memory (test for enough before we start) */
+    if (point_binning->bin_n)
+        point_binning->n_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(CELL_TYPE));
+    if (point_binning->bin_min)
+        point_binning->min_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+    if (point_binning->bin_max)
+        point_binning->max_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+    if (point_binning->bin_sum)
+        point_binning->sum_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+    if (point_binning->bin_sumsq)
+        point_binning->sumsq_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+    if (point_binning->bin_index)
+        point_binning->index_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(CELL_TYPE));
+    if (point_binning->bin_coordinates) {
+        point_binning->x_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        point_binning->y_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+    }
+    /* TODO: perhaps none of them needs to be freed */
+
+    /* and then free it again */
+    if (point_binning->bin_n)
+        G_free(point_binning->n_array);
+    if (point_binning->bin_min)
+        G_free(point_binning->min_array);
+    if (point_binning->bin_max)
+        G_free(point_binning->max_array);
+    if (point_binning->bin_sum)
+        G_free(point_binning->sum_array);
+    if (point_binning->bin_sumsq)
+        G_free(point_binning->sumsq_array);
+    if (point_binning->bin_index)
+        G_free(point_binning->index_array);
+    if (point_binning->bin_coordinates) {
+        G_free(point_binning->x_array);
+        G_free(point_binning->y_array);
+    }
+}
+
+
+void point_binning_allocate(struct PointBinning *point_binning, int rows,
+                            int cols, RASTER_MAP_TYPE rtype)
+{
+    if (point_binning->bin_n) {
+        G_debug(2, "allocating n_array");
+        point_binning->n_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(CELL_TYPE));
+        blank_array(point_binning->n_array, rows, cols, CELL_TYPE, 0);
+    }
+    if (point_binning->bin_min) {
+        G_debug(2, "allocating min_array");
+        point_binning->min_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        blank_array(point_binning->min_array, rows, cols, rtype, -1);   /* fill with NULLs */
+    }
+    if (point_binning->bin_max) {
+        G_debug(2, "allocating max_array");
+        point_binning->max_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        blank_array(point_binning->max_array, rows, cols, rtype, -1);   /* fill with NULLs */
+    }
+    if (point_binning->bin_sum) {
+        G_debug(2, "allocating sum_array");
+        point_binning->sum_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        blank_array(point_binning->sum_array, rows, cols, rtype, 0);
+    }
+    if (point_binning->bin_sumsq) {
+        G_debug(2, "allocating sumsq_array");
+        point_binning->sumsq_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        blank_array(point_binning->sumsq_array, rows, cols, rtype, 0);
+    }
+    if (point_binning->bin_index) {
+        G_debug(2, "allocating index_array");
+        point_binning->index_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(CELL_TYPE));
+        blank_array(point_binning->index_array, rows, cols, CELL_TYPE, -1);     /* fill with NULLs */
+    }
+    if (point_binning->bin_coordinates) {
+        G_debug(2, "allocating x_array and y_array");
+        point_binning->x_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        blank_array(point_binning->x_array, rows, cols, rtype, 0);
+        point_binning->y_array =
+            G_calloc((size_t) rows * (cols + 1), Rast_cell_size(rtype));
+        blank_array(point_binning->y_array, rows, cols, rtype, 0);
+    }
+}
+
+void point_binning_free(struct PointBinning *point_binning,
+                        struct BinIndex *bin_index_nodes)
+{
+    if (point_binning->bin_n)
+        G_free(point_binning->n_array);
+    if (point_binning->bin_min)
+        G_free(point_binning->min_array);
+    if (point_binning->bin_max)
+        G_free(point_binning->max_array);
+    if (point_binning->bin_sum)
+        G_free(point_binning->sum_array);
+    if (point_binning->bin_sumsq)
+        G_free(point_binning->sumsq_array);
+    if (point_binning->bin_index) {
+        G_free(point_binning->index_array);
+        G_free(bin_index_nodes->nodes);
+        bin_index_nodes->num_nodes = 0;
+        bin_index_nodes->max_nodes = 0;
+        bin_index_nodes->nodes = NULL;
+    }
+    if (point_binning->bin_coordinates) {
+        G_free(point_binning->x_array);
+        G_free(point_binning->y_array);
+    }
+}
+
+void write_variance(void *raster_row, void *n_array, void *sum_array,
+                    void *sumsq_array, int row, int cols,
+                    RASTER_MAP_TYPE rtype, int method)
+{
+    size_t offset, n_offset;
+    int n = 0;
+    double variance;
+    double sum = 0.;
+    double sumsq = 0.;
+    int col;
+    void *ptr = raster_row;
+
+    for (col = 0; col < cols; col++) {
+        offset = ((size_t) row * cols + col) * Rast_cell_size(rtype);
+        n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+        n = Rast_get_c_value(n_array + n_offset, CELL_TYPE);
+        sum = Rast_get_d_value(sum_array + offset, rtype);
+        sumsq = Rast_get_d_value(sumsq_array + offset, rtype);
+
+        if (n == 0)
+            Rast_set_null_value(ptr, 1, rtype);
+        else if (n == 1)
+            Rast_set_d_value(ptr, 0.0, rtype);
+        else {
+            variance = (sumsq - sum * sum / n) / n;
+            if (variance < GRASS_EPSILON)
+                variance = 0.0;
+
+            /* nan test */
+            if (variance != variance)
+                Rast_set_null_value(ptr, 1, rtype);
+            else {
+
+                if (method == METHOD_STDDEV)
+                    variance = sqrt(variance);
+
+                else if (method == METHOD_COEFF_VAR)
+                    variance = 100 * sqrt(variance) / (sum / n);
+
+                /* nan test */
+                if (variance != variance)
+                    variance = 0.0;     /* OK for n > 0 ? */
+
+                Rast_set_d_value(ptr, variance, rtype);
+            }
+
+        }
+        ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+    }
+}
+
+void write_median(struct BinIndex *bin_index, void *raster_row,
+                  void *index_array, int row, int cols, RASTER_MAP_TYPE rtype)
+{
+    size_t n_offset;
+    int n;
+    int j;
+    double z;
+    int col;
+    int node_id, head_id;
+    void *ptr = raster_row;
+
+    for (col = 0; col < cols; col++) {
+        n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+        if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))      /* no points in cell */
+            Rast_set_null_value(ptr, 1, rtype);
+        else {                  /* one or more points in cell */
+
+            head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE);
+            node_id = head_id;
+
+            n = 0;
+
+            while (node_id != -1) {     /* count number of points in cell */
+                n++;
+                node_id = bin_index->nodes[node_id].next;
+            }
+
+            if (n == 1)         /* only one point, use that */
+                Rast_set_d_value(ptr, bin_index->nodes[head_id].z, rtype);
+            else if (n % 2 != 0) {      /* odd number of points: median_i = (n + 1) / 2 */
+                n = (n + 1) / 2;
+                node_id = head_id;
+                for (j = 1; j < n; j++) /* get "median element" */
+                    node_id = bin_index->nodes[node_id].next;
+
+                Rast_set_d_value(ptr, bin_index->nodes[node_id].z, rtype);
+            }
+            else {              /* even number of points: median = (val_below + val_above) / 2 */
+
+                z = (n + 1) / 2.0;
+                n = floor(z);
+                node_id = head_id;
+                for (j = 1; j < n; j++) /* get element "below" */
+                    node_id = bin_index->nodes[node_id].next;
+
+                z = (bin_index->nodes[node_id].z +
+                     bin_index->nodes[bin_index->nodes[node_id].next].z) / 2;
+                Rast_set_d_value(ptr, z, rtype);
+            }
+        }
+        ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+    }
+}
+
+void write_percentile(struct BinIndex *bin_index, void *raster_row,
+                      void *index_array, int row, int cols,
+                      RASTER_MAP_TYPE rtype, int pth)
+{
+    size_t n_offset;
+    int n;
+    int j;
+    double z;
+    int col;
+    int node_id, head_id;
+    int r_low, r_up;
+    void *ptr = raster_row;
+
+    for (col = 0; col < cols; col++) {
+        n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+        if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))      /* no points in cell */
+            Rast_set_null_value(ptr, 1, rtype);
+        else {
+            head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE);
+            node_id = head_id;
+            n = 0;
+
+            while (node_id != -1) {     /* count number of points in cell */
+                n++;
+                node_id = bin_index->nodes[node_id].next;
+            }
+
+            z = (pth * (n + 1)) / 100.0;
+            r_low = floor(z);   /* lower rank */
+            if (r_low < 1)
+                r_low = 1;
+            else if (r_low > n)
+                r_low = n;
+
+            r_up = ceil(z);     /* upper rank */
+            if (r_up > n)
+                r_up = n;
+
+            node_id = head_id;
+            for (j = 1; j < r_low; j++) /* search lower value */
+                node_id = bin_index->nodes[node_id].next;
+
+            z = bin_index->nodes[node_id].z;    /* save lower value */
+            node_id = head_id;
+            for (j = 1; j < r_up; j++)  /* search upper value */
+                node_id = bin_index->nodes[node_id].next;
+
+            z = (z + bin_index->nodes[node_id].z) / 2;
+            Rast_set_d_value(ptr, z, rtype);
+        }
+        ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+    }
+}
+
+void write_skewness(struct BinIndex *bin_index, void *raster_row,
+                    void *index_array, int row, int cols,
+                    RASTER_MAP_TYPE rtype)
+{
+    size_t n_offset;
+    int n;
+    double z;
+    int col;
+    int node_id, head_id;
+    double variance, mean, skew, sumdev;
+    double sum = 0.;
+    double sumsq = 0.;
+    void *ptr = raster_row;
+
+    for (col = 0; col < cols; col++) {
+        n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+        if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))      /* no points in cell */
+            Rast_set_null_value(ptr, 1, rtype);
+        else {
+            head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE);
+            node_id = head_id;
+
+            n = 0;              /* count */
+            sum = 0.0;          /* sum */
+            sumsq = 0.0;        /* sum of squares */
+            sumdev = 0.0;       /* sum of (xi - mean)^3 */
+            skew = 0.0;         /* skewness */
+
+            while (node_id != -1) {
+                z = bin_index->nodes[node_id].z;
+                n++;
+                sum += z;
+                sumsq += (z * z);
+                node_id = bin_index->nodes[node_id].next;
+            }
+
+            if (n > 1) {        /* if n == 1, skew is "0.0" */
+                mean = sum / n;
+                node_id = head_id;
+                while (node_id != -1) {
+                    z = bin_index->nodes[node_id].z;
+                    sumdev += pow((z - mean), 3);
+                    node_id = bin_index->nodes[node_id].next;
+                }
+
+                variance = (sumsq - sum * sum / n) / n;
+                if (variance < GRASS_EPSILON)
+                    skew = 0.0;
+                else
+                    skew = sumdev / ((n - 1) * pow(sqrt(variance), 3));
+            }
+            Rast_set_d_value(ptr, skew, rtype);
+        }
+        ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+    }
+}
+
+void write_trimmean(struct BinIndex *bin_index, void *raster_row,
+                    void *index_array, int row, int cols,
+                    RASTER_MAP_TYPE rtype, double trim)
+{
+    size_t n_offset;
+    int n;
+    int j, k;
+    int col;
+    int node_id, head_id;
+    double mean;
+    double sum = 0.;
+    void *ptr = raster_row;
+
+    for (col = 0; col < cols; col++) {
+        n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+        if (Rast_is_null_value(index_array + n_offset, CELL_TYPE))      /* no points in cell */
+            Rast_set_null_value(ptr, 1, rtype);
+        else {
+            head_id = Rast_get_c_value(index_array + n_offset, CELL_TYPE);
+
+            node_id = head_id;
+            n = 0;
+            while (node_id != -1) {     /* count number of points in cell */
+                n++;
+                node_id = bin_index->nodes[node_id].next;
+            }
+
+            if (1 == n)
+                mean = bin_index->nodes[head_id].z;
+            else {
+                k = floor(trim * n + 0.5);      /* number of ranks to discard on each tail */
+
+                if (k > 0 && (n - 2 * k) > 0) { /* enough elements to discard */
+                    node_id = head_id;
+                    for (j = 0; j < k; j++)     /* move to first rank to consider */
+                        node_id = bin_index->nodes[node_id].next;
+
+                    j = k + 1;
+                    k = n - k;
+                    n = 0;
+                    sum = 0.0;
+
+                    while (j <= k) {    /* get values in interval */
+                        n++;
+                        sum += bin_index->nodes[node_id].z;
+                        node_id = bin_index->nodes[node_id].next;
+                        j++;
+                    }
+                }
+                else {
+                    node_id = head_id;
+                    n = 0;
+                    sum = 0.0;
+                    while (node_id != -1) {
+                        n++;
+                        sum += bin_index->nodes[node_id].z;
+                        node_id = bin_index->nodes[node_id].next;
+                    }
+                }
+                mean = sum / n;
+            }
+            Rast_set_d_value(ptr, mean, rtype);
+        }
+        ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+    }
+}
+
+void write_values(struct PointBinning *point_binning,
+                  struct BinIndex *bin_index_nodes, void *raster_row, int row,
+                  int cols, RASTER_MAP_TYPE rtype,
+                  struct VectorWriter *vector_writer)
+{
+    void *ptr = NULL;
+    int col;
+
+    switch (point_binning->method) {
+    case METHOD_N:             /* n is a straight copy */
+        Rast_raster_cpy(raster_row,
+                        point_binning->n_array +
+                        ((size_t) row * cols * Rast_cell_size(CELL_TYPE)), cols,
+                        CELL_TYPE);
+        break;
+
+    case METHOD_MIN:
+        Rast_raster_cpy(raster_row,
+                        point_binning->min_array +
+                        ((size_t) row * cols * Rast_cell_size(rtype)), cols, rtype);
+        break;
+
+    case METHOD_MAX:
+        Rast_raster_cpy(raster_row,
+                        point_binning->max_array +
+                        ((size_t) row * cols * Rast_cell_size(rtype)), cols, rtype);
+        break;
+
+    case METHOD_SUM:
+        Rast_raster_cpy(raster_row,
+                        point_binning->sum_array +
+                        ((size_t) row * cols * Rast_cell_size(rtype)), cols, rtype);
+        break;
+
+    case METHOD_RANGE:         /* (max-min) */
+        ptr = raster_row;
+        for (col = 0; col < cols; col++) {
+            size_t offset = ((size_t) row * cols + col) * Rast_cell_size(rtype);
+            double min =
+                Rast_get_d_value(point_binning->min_array + offset, rtype);
+            double max =
+                Rast_get_d_value(point_binning->max_array + offset, rtype);
+            Rast_set_d_value(ptr, max - min, rtype);
+            ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+        }
+        break;
+
+    case METHOD_MEAN:          /* (sum / n) */
+        ptr = raster_row;
+        for (col = 0; col < cols; col++) {
+            size_t offset = ((size_t) row * cols + col) * Rast_cell_size(rtype);
+            size_t n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+            int n = Rast_get_c_value(point_binning->n_array + n_offset,
+                                     CELL_TYPE);
+            double sum =
+                Rast_get_d_value(point_binning->sum_array + offset, rtype);
+
+            if (n == 0)
+                Rast_set_null_value(ptr, 1, rtype);
+            else
+                Rast_set_d_value(ptr, (sum / n), rtype);
+
+            ptr = G_incr_void_ptr(ptr, Rast_cell_size(rtype));
+        }
+        break;
+
+    case METHOD_STDDEV:        /*  sqrt(variance)        */
+    case METHOD_VARIANCE:      /*  (sumsq - sum*sum/n)/n */
+    case METHOD_COEFF_VAR:     /*  100 * stdev / mean    */
+        write_variance(raster_row, point_binning->n_array,
+                       point_binning->sum_array, point_binning->sumsq_array,
+                       row, cols, rtype, point_binning->method);
+        break;
+    case METHOD_MEDIAN:        /* median, if only one point in cell we will use that */
+        write_median(bin_index_nodes, raster_row, point_binning->index_array,
+                     row, cols, rtype);
+        break;
+    case METHOD_PERCENTILE:    /* rank = (pth*(n+1))/100; interpolate linearly */
+        write_percentile(bin_index_nodes, raster_row,
+                         point_binning->index_array, row, cols, rtype,
+                         point_binning->pth);
+        break;
+    case METHOD_SKEWNESS:      /* skewness = sum(xi-mean)^3/(N-1)*s^3 */
+        write_skewness(bin_index_nodes, raster_row,
+                       point_binning->index_array, row, cols, rtype);
+        break;
+    case METHOD_TRIMMEAN:
+        write_trimmean(bin_index_nodes, raster_row,
+                       point_binning->index_array, row, cols, rtype,
+                       point_binning->trim);
+        break;
+
+    default:
+        G_debug(2, "No method selected");
+    }
+    if (point_binning->bin_coordinates) {
+        for (col = 0; col < cols; col++) {
+            size_t offset = ((size_t) row * cols + col) * Rast_cell_size(rtype);
+            size_t n_offset = ((size_t) row * cols + col) * Rast_cell_size(CELL_TYPE);
+            int n = Rast_get_c_value(point_binning->n_array + n_offset,
+                                     CELL_TYPE);
+
+            if (n == 0)
+                continue;
+
+            double sum_x =
+                Rast_get_d_value(point_binning->x_array + offset, rtype);
+            double sum_y =
+                Rast_get_d_value(point_binning->y_array + offset, rtype);
+            /* TODO: we do this also in mean writing */
+            double sum_z =
+                Rast_get_d_value(point_binning->sum_array + offset, rtype);
+
+            /* We are not writing any categories. They are not needed
+             * and potentially it is too much trouble to do it and it is
+             * unclear what to write. Not writing them is also a little
+             * bit faster. */
+            Vect_append_point(vector_writer->points, sum_x, sum_y, sum_z / n);
+            Vect_write_line(vector_writer->info, GV_POINT,
+                            vector_writer->points, vector_writer->cats);
+            Vect_reset_line(vector_writer->points);
+            vector_writer->count++;
+        }
+    }
+}
+
+/* TODO: duplication with support.c, refactoring needed */
+static void *get_cell_ptr(void *array, int cols, int row, int col,
+                          RASTER_MAP_TYPE map_type)
+{
+    return G_incr_void_ptr(array,
+                           ((row * (size_t) cols) +
+                            col) * Rast_cell_size(map_type));
+}
+
+int update_val(void *array, int cols, int row, int col,
+               RASTER_MAP_TYPE map_type, double value)
+{
+    void *ptr = get_cell_ptr(array, cols, row, col, map_type);
+
+    Rast_set_d_value(ptr, value, map_type);
+    return 0;
+}
+
+int update_moving_mean(void *array, int cols, int row, int col,
+                       RASTER_MAP_TYPE rtype, double value, int n)
+{
+    /* for xy we do this check twice */
+    if (n != 0) {
+        double m_v;
+
+        row_array_get_value_row_col(array, row, col, cols, rtype, &m_v);
+        value = m_v + (value - m_v) / n;
+    }
+    /* else we just write the initial value */
+    return update_val(array, cols, row, col, rtype, value);;
+}
+
+void update_value(struct PointBinning *point_binning,
+                  struct BinIndex *bin_index_nodes, int cols, int arr_row,
+                  int arr_col, RASTER_MAP_TYPE rtype, double x, double y,
+                  double z)
+{
+    if (point_binning->bin_n)
+        update_n(point_binning->n_array, cols, arr_row, arr_col);
+    if (point_binning->bin_min)
+        update_min(point_binning->min_array, cols, arr_row, arr_col, rtype,
+                   z);
+    if (point_binning->bin_max)
+        update_max(point_binning->max_array, cols, arr_row, arr_col, rtype,
+                   z);
+    if (point_binning->bin_sum)
+        update_sum(point_binning->sum_array, cols, arr_row, arr_col, rtype,
+                   z);
+    if (point_binning->bin_sumsq)
+        update_sumsq(point_binning->sumsq_array, cols, arr_row, arr_col,
+                     rtype, z);
+    if (point_binning->bin_index)
+        update_bin_index(bin_index_nodes, point_binning->index_array, cols,
+                         arr_row, arr_col, rtype, z);
+    if (point_binning->bin_coordinates) {
+        /* this assumes that n is already computed for this xyz */
+        void *ptr = get_cell_ptr(point_binning->n_array, cols, arr_row,
+                                 arr_col, CELL_TYPE);
+        int n = Rast_get_c_value(ptr, CELL_TYPE);
+
+        update_moving_mean(point_binning->x_array, cols, arr_row, arr_col,
+                           rtype, x, n);
+        update_moving_mean(point_binning->y_array, cols, arr_row, arr_col,
+                           rtype, y, n);
+    }
+}
diff --git a/raster/r.in.lidar/point_binning.h b/raster/r.in.lidar/point_binning.h
new file mode 100644
index 0000000..46455b8
--- /dev/null
+++ b/raster/r.in.lidar/point_binning.h
@@ -0,0 +1,119 @@
+/*
+ * r.in.lidar projection-related functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to separate functions)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#ifndef __POINT_BINNING_H__
+#define __POINT_BINNING_H__
+
+
+#include <grass/raster.h>
+
+/* forward declaration */
+struct Map_info;
+
+struct node
+{
+    int next;
+    double z;
+};
+
+struct BinIndex
+{
+    int num_nodes;
+    int max_nodes;
+    struct node *nodes;
+};
+
+struct PointBinning
+{
+    int method;
+
+    int bin_n;
+    int bin_min;
+    int bin_max;
+    int bin_sum;
+    int bin_sumsq;
+    int bin_index;
+    int bin_coordinates;
+
+    void *n_array;
+    void *min_array;
+    void *max_array;
+    void *sum_array;
+    void *sumsq_array;
+    void *index_array;
+    void *x_array;
+    void *y_array;
+
+    int pth;
+    double trim;
+};
+
+int check_rows_cols_fit_to_size_t(int rows, int cols);
+void point_binning_memory_test(struct PointBinning *point_binning, int rows,
+                               int cols, RASTER_MAP_TYPE rtype);
+
+void point_binning_set(struct PointBinning *point_binning, char *method,
+                       char *percentile, char *trim, int coordinates);
+void point_binning_allocate(struct PointBinning *point_binning, int rows,
+                            int cols, RASTER_MAP_TYPE rtype);
+
+void point_binning_free(struct PointBinning *point_binning,
+                        struct BinIndex *bin_index_nodes);
+
+int update_bin_index(struct BinIndex *bin_index, void *index_array,
+                     int cols, int row, int col,
+                     RASTER_MAP_TYPE map_type, double value);
+void write_variance(void *raster_row, void *n_array, void *sum_array,
+                    void *sumsq_array, int row, int cols,
+                    RASTER_MAP_TYPE rtype, int method);
+void write_median(struct BinIndex *bin_index, void *raster_row,
+                  void *index_array, int row, int cols,
+                  RASTER_MAP_TYPE rtype);
+void write_percentile(struct BinIndex *bin_index, void *raster_row,
+                      void *index_array, int row, int cols,
+                      RASTER_MAP_TYPE rtype, int pth);
+void write_skewness(struct BinIndex *bin_index, void *raster_row,
+                    void *index_array, int row, int cols,
+                    RASTER_MAP_TYPE rtype);
+void write_trimmean(struct BinIndex *bin_index, void *raster_row,
+                    void *index_array, int row, int cols,
+                    RASTER_MAP_TYPE rtype, double trim);
+
+/* forward declarations */
+struct Map_info;
+struct line_pnts;
+struct line_cats;
+
+struct VectorWriter
+{
+    struct Map_info *info;
+    struct line_pnts *points;
+    struct line_cats *cats;
+#ifdef HAVE_LONG_LONG_INT
+    unsigned long long count;
+#else
+    unsigned long count;
+#endif
+};
+
+void write_values(struct PointBinning *point_binning,
+                  struct BinIndex *bin_index_nodes, void *raster_row, int row,
+                  int cols, RASTER_MAP_TYPE rtype,
+                  struct VectorWriter *vector_writer);
+void update_value(struct PointBinning *point_binning,
+                  struct BinIndex *bin_index_nodes, int cols, int arr_row,
+                  int arr_col, RASTER_MAP_TYPE rtype, double x, double y,
+                  double z);
+
+
+#endif /* __POINT_BINNING_H__ */
diff --git a/raster/r.in.lidar/projection.c b/raster/r.in.lidar/projection.c
new file mode 100644
index 0000000..369eb54
--- /dev/null
+++ b/raster/r.in.lidar/projection.c
@@ -0,0 +1,142 @@
+/*
+ * r.in.lidar metadata-related functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to standalone functions)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/gprojects.h>
+
+#include "local_proto.h"
+
+
+void projection_mismatch_report(struct Cell_head cellhd,
+                                struct Cell_head loc_wind,
+                                struct Key_Value *loc_proj_info,
+                                struct Key_Value *loc_proj_units,
+                                struct Key_Value *proj_info,
+                                struct Key_Value *proj_units, int err)
+{
+    int i_value;
+    char error_msg[8192];
+
+    strcpy(error_msg,
+           _("Projection of dataset does not"
+             " appear to match current location.\n\n"));
+
+    /* TODO: output this info sorted by key: */
+    if (loc_wind.proj != cellhd.proj || err != -2) {
+        if (loc_proj_info != NULL) {
+            strcat(error_msg, _("GRASS LOCATION PROJ_INFO is:\n"));
+            for (i_value = 0; i_value < loc_proj_info->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        loc_proj_info->key[i_value],
+                        loc_proj_info->value[i_value]);
+            strcat(error_msg, "\n");
+        }
+
+        if (proj_info != NULL) {
+            strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+            for (i_value = 0; i_value < proj_info->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        proj_info->key[i_value], proj_info->value[i_value]);
+        }
+        else {
+            strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+            if (cellhd.proj == PROJECTION_XY)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (unreferenced/unknown)\n",
+                        cellhd.proj);
+            else if (cellhd.proj == PROJECTION_LL)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (lat/long)\n", cellhd.proj);
+            else if (cellhd.proj == PROJECTION_UTM)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (UTM), zone = %d\n",
+                        cellhd.proj, cellhd.zone);
+            else
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (unknown), zone = %d\n",
+                        cellhd.proj, cellhd.zone);
+        }
+    }
+    else {
+        if (loc_proj_units != NULL) {
+            strcat(error_msg, "GRASS LOCATION PROJ_UNITS is:\n");
+            for (i_value = 0; i_value < loc_proj_units->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        loc_proj_units->key[i_value],
+                        loc_proj_units->value[i_value]);
+            strcat(error_msg, "\n");
+        }
+
+        if (proj_units != NULL) {
+            strcat(error_msg, "Import dataset PROJ_UNITS is:\n");
+            for (i_value = 0; i_value < proj_units->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        proj_units->key[i_value], proj_units->value[i_value]);
+        }
+    }
+    sprintf(error_msg + strlen(error_msg),
+            _("\nIn case of no significant differences in the projection definitions,"
+             " use the -o flag to ignore them and use"
+             " current location definition.\n"));
+    strcat(error_msg,
+           _("Consider generating a new location with 'location' parameter"
+             " from input data set.\n"));
+    G_fatal_error("%s", error_msg);
+}
+
+void projection_check_wkt(struct Cell_head cellhd,
+                          struct Cell_head loc_wind,
+                          const char *projstr, int override, int verbose)
+{
+    struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
+    struct Key_Value *proj_info, *proj_units;
+    int err = 0;
+
+    proj_info = NULL;
+    proj_units = NULL;
+
+    /* Projection only required for checking so convert non-interactively */
+    if (GPJ_wkt_to_grass(&cellhd, &proj_info, &proj_units, projstr, 0) < 0)
+        G_warning(_("Unable to convert input map projection information to "
+                    "GRASS format for checking"));
+
+    /* Does the projection of the current location match the dataset? */
+
+    /* fetch LOCATION PROJ info */
+    if (loc_wind.proj != PROJECTION_XY) {
+        loc_proj_info = G_get_projinfo();
+        loc_proj_units = G_get_projunits();
+    }
+
+    if (override) {
+        cellhd.proj = loc_wind.proj;
+        cellhd.zone = loc_wind.zone;
+        if (verbose)
+            G_message(_("Over-riding projection check"));
+    }
+    else if (loc_wind.proj != cellhd.proj
+             || (err =
+                 G_compare_projections(loc_proj_info, loc_proj_units,
+                                       proj_info, proj_units)) != TRUE) {
+        projection_mismatch_report(cellhd, loc_wind, loc_proj_info,
+                                   loc_proj_units,
+                                   proj_info, proj_units, err);
+    }
+    else if (verbose) {
+        G_message(_("Projection of input dataset and current location "
+                    "appear to match"));
+    }
+}
diff --git a/raster/r.in.lidar/r.in.lidar.html b/raster/r.in.lidar/r.in.lidar.html
index 326027a..b165134 100644
--- a/raster/r.in.lidar/r.in.lidar.html
+++ b/raster/r.in.lidar/r.in.lidar.html
@@ -1,21 +1,21 @@
 <h2>DESCRIPTION</h2>
 
-The <em>r.in.lidar</em> module loads and bins LAS LiDAR point clouds
-into a new raster map. The user may choose from a variety of statistical
-methods in creating the new raster.
+The <em>r.in.lidar</em> module loads LAS LiDAR point clouds into a new
+raster map using binning. The user may choose from a variety of
+statistical methods which will be used for binning when creating
+the new raster.
 
 <p>
-Since the creation of raster maps depends on the computational 
-region settings (extent and resolution), as default the current 
-region extents and resolution are used for the import. When using 
-the <em>-e</em> flag along with the <em>resolution=value</em> 
-parameter, the region extents will be based on new dataset. It is therefore
-recommended to first use the <em>-s</em> flag to get the extents of the
-LiDAR point cloud to be imported, then adjust the current region extent
-and resolution accordingly, and only then proceed with the actual import.
-Another option is to automatically set the region extents based on the
-LAS dataset itself along with the desired raster resolution. See below
-for details.
+Since a new raster map is created during the binning, the binning of
+points depends on the current computational region settings
+(extent and resolution) by default (see more about binning below).
+When using the <b>-e</b> flag, the binning will be done in the extent
+of the point cloud, so the resulting raster will have extent based on
+the input point cloud.
+When the <em>resolution=value</em> parameter is used,
+the binning is done using the provided resolution and the resulting
+raster will have that resolution (see more below for more information
+about extent and resolution management).
 
 <p>
 <em>r.in.lidar</em> is designed for processing massive point cloud 
@@ -23,51 +23,311 @@ datasets, for example raw LiDAR or sidescan sonar swath data. It has
 been tested with large datasets (see below for memory management 
 notes).
 
+<h3>Binning</h3>
+
+The main different of <em>r.in.lidar</em> in comparison to
+<em><a href="r.in.lidar.html">r.in.lidar</a></em> is that
+<em>r.in.lidar</em> creates a raster instead of just importing the
+points into GRASS GIS. However, <em>r.in.lidar</em> does not merely
+rasterizes the points from the point cloud. <em>r.in.lidar</em>
+uses binning to derive values for individual raster cells,
+so the value of a cell is typically an aggregation of values
+of individual points falling into one cell.
+
+In general binning is the conversion of points into a regular grid.
+The binning of points with X and Y coordinates starts with the overlay
+of a grid of bins over the points.
 <p>
-Available statistics for populating the output raster map are:<br>
-<ul>
-<li>
-<table>
-<tr><td><em>n</em></td>        <td>number of points in cell</td></tr>
-<tr><td><em>min</em></td>      <td>minimum value of points in cell</td></tr>
-<tr><td><em>max</em></td>      <td>maximum value of points in cell</td></tr>
-<tr><td><em>range</em></td>    <td>range of points in cell</td></tr>
-<tr><td><em>sum</em></td>      <td>sum of points in cell</td></tr>
-<tr><td><em>mean</em></td>     <td>average value of points in cell</td></tr>
-<tr><td><em>stddev</em></td>   <td>standard deviation of points in cell</td></tr>
-<tr><td><em>variance</em></td> <td>variance of points in cell</td></tr>
-<tr><td><em>coeff_var</em></td><td>coefficient of variance of points in cell</td></tr>
-<tr><td><em>median</em></td>   <td>median value of points in cell</td></tr>
-<tr valign="baseline"><td><em>percentile</em> </td>
-   <td>p<sup><i>th</i></sup> percentile of points in cell</td></tr>
-<tr><td><em>skewness</em></td> <td>skewness of points in cell</td></tr>
-<tr><td><em>trimmean</em></td> <td>trimmed mean of points in cell</td></tr>
-</table><br>
-
-<li><em>Variance</em> and derivatives use the biased estimator (n). [subject to change]
-<li><em>Coefficient of variance</em> is given in percentage and defined as
-<tt>(stddev/mean)*100</tt>.
-</ul>
-<br>
+In the basic case, binning is a method which counts the number of
+points which fall into one raster cell, i.e. bin. The number of points
+per cell (bin) indicates the density of points in the point cloud.
+The cell (bin) is always square or rectangular in case of
+<em>r.in.lidar</em> because the result is GRASS GIS 2D raster.
+The result of binning where the number of point per cell is counted
+is sometimes called 2D (two dimensional) histogram because
+a histogram is used in univariate statistics (in one dimension)
+to count the number samples falling into a given bin.
 
-<h2>NOTES</h2>
+<center>
+<img src="r_in_lidar_binning_count.png">
+<img src="r_in_lidar_binning_mean.png">
+<p><em>
+    Figure: The binning on left was used to count number of points per
+    (sometimes also called 2D histogram). The numbers in cells are
+    examples of counts, the rest is represented by the color.
+    The binning on right was used with mean to create a surface
+    based on the values associated with the points. The numbers
+    show examples of cell values. Note also the cells without any points
+    which were assigned the NULL value.
+</em>
+</center>
 
-<h3>LAS file import preparations</h3>
+The basic concept of binning is extended when the points have another
+value associated with them. For LiDAR data this value can be the Z
+coordinate or intensity. The value for a given cell (bin) is computed
+using univariate statistics from the values of all points in the cell.
+For example, computing the mean value of Z coordinates can yield
+a raster representing the digital elevation model. Another example is
+the range of Z coordinates which can be used as a rough estimate of
+vegetation height.
+
+<h3>Statistics</h3>
+
+Available statistics for populating the output raster map are:
+
+<dl class="option_descriptions">
+<dt>n</dt>
+<dd>This computes the number (count) of points per cell. The result
+is a indicator of spatially variable density of points in the given
+area.</dd>
+<dt>min</dt>
+<dd>This finds the minimum of point values in each cell.
+It can be useful when finding topography in a forested or urban
+environment and there is a lot of points per one cells (terrain is
+oversampled considering the desired resolution).
+It can also create surfaces independent on the noise from premature
+hits as it will always select the lowest point.
+</dd>
+<dt>max</dt>
+<dd>This finds the maximum of point values in each cell.
+In connection with <b>base_raster</b> it can yield maximum vegetation
+of feature height per cell.
+For this purpose, it is usually much more appropriate than <em>mean</em>
+which would yield heights mostly influenced by the vertical
+distribution of points.
+</dd>
+<dt>range</dt>
+<dd>This computes the range of point values in each cell.
+The range of Z coordinates per cell can be used as a rough estimate of
+vegetation height when the cells are small enough, slopes low
+and the area is mostly vegetated.
+However, for more profound analysis, the base raster together with
+different statistics is recommended.</dd>
+<dt>sum</dt>
+<dd>This computes the sum of point values per cell.
+This is useful especially when intensity is used as a value
+(flags <b>-i</b> and <b>-j</b>).</dd>
+<dt>mean</dt>
+<dd>This is a mean (average) value of point values in cell.
+When used with Z coordinates (the default) and points from the ground
+class, the resulting raster is a digital elevation model.
+When intensity is used as a point value, the resulting raster contains
+mean intensity per cell.
+Note that <em>mean</em> gives heights influenced by the vertical
+distribution of points</dd>
+<dt>stddev</dt>
+<dd>This computes the standard deviation of point values for each
+cell.</dd>
+<dt>variance</dt>
+<dd>This computes the variance of point values for each cell.
+Variance and derivatives use the biased estimator (n)
+[note that this might be subject to change].</dd>
+<dt>coeff_var</dt>
+<dd>This computes the coefficient of variance of point values for each
+cell. Coefficient of variance is given in percentage and defined as
+<tt>(stddev/mean)*100</tt>.</dd>
+<dt>median</dt>
+<dd>This computes the median of point values for each cell</dd>
+<dt>percentile</dt>
+<dd>p<sup><i>th</i></sup> (nth) percentile of points in cell</dd>
+<dt>skewness</dt>
+<dd>This is a skewness of point values in cell</dd>
+<dt>trimmean</dt>
+<dd>This is a trimmed mean of point values in cell.
+Trimmed mean also know as truncated mean is a mean
+computed after discarding values at the low end and at the high end.
+How many values to discard is given by the <b>trim</b> option
+in percent. In statistics the usual percentage of trimmed values ranges
+from 5 to 25 percent.</dd>
+</dl>
+
+Note that different statistics have different memory requirements
+(see below for details).
+
+<h3>Filtering</h3>
+
+Points falling outside the current computational region will be skipped.
+This includes points falling <em>exactly</em> on the southern region
+bound. To capture those adjust the region with:
+
+<div class="code"><pre>
+g.region s=s-0.000001
+</pre></div>
+
+See <em><a href="g.region.html">g.region</a></em> for details about
+computation region handling in GRASS GIS.
+
+<p>
+The <b>zrange</b> parameter may be used for filtering the input data by
+vertical extent. Example uses include
+filtering out extreme outliers and outliers on relatively flat terrain.
+This parameter can be also used for cutting the point cloud into
+vertical sections preparing it for further processing
+by separate sections, together as if it would be an imagery group
+(see <em><a href="i.group.html">i.group</a></em>), or combined into
+a 3D raster using <em><a href="r.to.rast3.html">r.to.rast3</a></em>.
+In for these last examples, it might actually be more advantageous
+to use <em><a href="r3.in.lidar.html">r3.in.lidar</a></em> module.
+The <b>zrange</b> parameter is especially powerful when used
+together with the <b>base_raster</b> parameter. The <b>zrange</b>
+is applied to Z values after the <b>base_raster</b> reduction.
+
+<center>
+<img src="r_in_lidar_zrange.png">
+<p><em>
+    Figure: This is the principle of zrange filter. Points with the
+    Z coordinate value below the lower value in the range (here 180)
+    are filtered out (blue points) and same applies for points above
+    higher value in the range (here 250). All other points are preserved
+    (green points).
+</em>
+</center>
+
+<p>
+A LiDAR pulse can have multiple returns. The first return values can be 
+used to obtain a digital surface model (DSM) where e.g. canopy cover is 
+represented. The last return values can be used to obtain a digital 
+terrain model (DTM) where e.g. the forest floor instead of canopy 
+cover is represented. The <b>return_filter</b> option allows selecting
+one of first, mid, or last returns. Return number and number of returns
+in the pulse associated with each point are compared to determine
+if the point is first, mid, or last return.
+
+<p>
+LiDAR points often come as already classified into standardized classes.
+For example, class number 2 represents ground. For other classes see
+LAS format specification in references. The <b>class_filter</b> option
+allows selecting one or more classes using numbers (integers) separated
+by comma.
+
+<p>
+In varied terrain the user may find that <em>min</em> maps make for a good
+noise filter as most LIDAR noise is from premature hits. The <em>min</em> map
+may also be useful to find the underlying topography in a forested or urban
+environment if the cells are oversampled.
+
+<p>
+The user can use a combination of <em>r.in.lidar</em> <b>output</b> maps
+to create custom raster-based filters, for examplee, use
+<em><a href="r.mapcalc.html">r.mapcalc</a></em> to create
+a <tt>mean-(2*stddev)</tt> map. (In this example the user may want to
+include a lower bound filter in <em>r.mapcalc</em> to remove highly
+variable points (small <em>n</em>) or run <em>r.neighbors</em> to
+smooth the stddev map before further use.)
+
+<p>
+Note that proper filtering of the input points in not only critical for
+the analysis itself but it can also speed up the processing.
+
+<h3>Reduction to a base raster</h3>
+
+For analysis of features on the terrain surface, especially vegetation
+it is advantageous to remove the influence of the terrain on heights
+because the height above the terrain is important (e.g. height of
+a tree) rather than height of the top of the tree above the see level.
+In this case, the base raster would be digital elevation model
+which can be one derived from the point cloud, or obtained in
+some other way. LiDAR data often come with precomputed DEMs
+(quality should be checked in this case) and there is often a DEM
+available for a given area (fit with the point cloud, especially
+vertical, and resolution should be checked).
+
+<center>
+<img src="r_in_lidar_base_raster.png">
+<p><em>
+    Figure: This is a profile of base raster (in orange) representing
+    digital elevation model and selected points, e.g. first return,
+    from point cloud (green dots). By default the points would create
+    a digital surface model (thin brown line) but after reducing the
+    Z coordinates using the base raster, the created surface is a
+    derived from the height of points relative to the base raster.
+</em>
+</center>
+
+The usage of base raster is not limited to digital elevation model.
+The base raster can be any surface which has some relation to the
+point values, for example digital surface model representing
+top of the canopy.
+
+<h3>Setting extent and resolution</h3>
 
+<p>
+Since the creation of raster maps depends on the computational 
+region settings (extent and resolution), as default the current 
+region extents and resolution are used for the import. When using 
+the <em>-e</em> flag along with the <em>resolution=value</em> 
+parameter, the region used for the new raster will be based
+the point cloud extent and the provided resolution. It is therefore
+recommended to first use the <em>-s</em> flag to get the extents of the
+LiDAR point cloud to be imported, then adjust the current region extent
+and resolution accordingly, and only then proceed with the actual import.
+Another option is to automatically set the region extents based on the
+LAS dataset itself (<em>-e</em> flag) along with the desired raster
+resolution. The best option is to know the point cloud extent ahead,
+e.g. from tiling scheme, and use it. See below for details.
+
+<p>
 Since the <em>r.in.lidar</em> generates a raster map through binning 
 from the original LiDAR points, the target computational region 
 extent and resolution have to be determined. A typical workflow 
 would involve the examination of the LAS data's associated 
 documentation or the scan of the LAS data file with
 <em>r.in.lidar</em>'s <b>-s</b> (or <b>-g</b>) flag to find the input
-data's bounds.<br>
+data's bounds.
+
+<p>
 Another option is to automatically set the region extents based on the
 LAS dataset extent (<b>-e</b> flag) along with the desired raster
 resolution using the <em>resolution</em> parameter.
 
+<p>
+Using the <b>-s</b> scan flag, the extent of the input data (and thus
+point density) is printed. To check this is recommended before performing
+the full import. The <b>-g</b> shell style flag prints the extent suitable
+as command line parameters for <em>g.region</em>.
+
+<p>
+A simpler option is to automatically set the region extents based on the
+LAS dataset (<b>-e</b> flag) along with the target raster resolution using
+the <em>resolution</em> parameter. Also here it is recommended to verify
+and optimize the resulting region settings with <em>g.region</em> prior
+to importing the dataset.
+
+
+<h2>NOTES</h2>
+
+<h3>Format and projection support</h3>
+
+The typical file extensions for the LAS format are .las and .laz
+(compressed). The compressed LAS (.laz) format can be imported only if
+libLAS has been compiled with LASzip support. It is also recommended to
+compile libLAS with GDAL which is used to test if the LAS projection
+matches that of the GRASS location.
+
+<h3>LAS file import preparations</h3>
+
+Note that the scanning (<b>-s</b> or <b>-g</b> flags) needs to iterate
+over the whole point cloud. This will take a long time for large
+datasets, so if the user knows the approximate extent of the dataset,
+for example because it dataset for one county or tiling scheme is
+available as vector polygons, it is much more advantageous to provide
+the extent information instead of retrieving it from the dataset.
+The same applies to the <b>-e</b> flag which also needs to perform
+scanning before the binning begins.
+
+<p>
+Also note that the scanning does not apply any filters, so the
+extent determined by scanning can be theoretically bigger than
+the extent actively used during the binning.
+This behavior ensures that the newly created raster has always
+the same extent regardless the filters used.
+However, for most cases (considering the point cloud and the resolution
+used) there is no difference between the extent without filters applied
+and the extent if the filters would be applied.
 
-<h3>Memory use</h3>
+<h3>Memory consumption</h3>
 
+<p>
 While the <b>input</b> file can be arbitrarily large, <em>r.in.lidar</em>
 will use a large amount of system memory (RAM) for large raster regions
 (> 10000x10000 pixels).
@@ -75,37 +335,52 @@ If the module refuses to start complaining that there isn't enough memory,
 use the <b>percent</b> parameter to run the module in several passes.
 In addition using a less precise map format (<tt>CELL</tt> [integer] or
 <tt>FCELL</tt> [floating point]) will use less memory than a <tt>DCELL</tt>
-[double precision floating point] <b>output</b> map. Methods such as <em>n,
-min, max, sum</em> will also use less memory, while <em>stddev, variance,
-and coeff_var</em> will use more.
-
-The aggregate functions <em>median, percentile, skewness</em> and
-<em>trimmed mean</em> will use even more memory and may not be appropriate
-for use with arbitrarily large input files<!-- without a small value for percent= -->.
-<!-- explained: memory use for regular stats will be based solely on region size,
- but for the aggregate fns it will also depend on the number of data points. (?) -->
+[double precision floating point] <b>output</b> map.
+For <b>method</b>=<em>n</em>, the <tt>CELL</tt> format is used
+automatically.
+
 <p>
-A LiDAR pulse can have multiple returns. The first return values can be 
-used to obtain a digital surface model (DSM) where e.g. canopy cover is 
-represented. The last return values can be used to obtain a digital 
-terrain model (DTM) where e.g. the forest floor instead of canopy 
-cover is represented. The <b>return_filter</b> option allows selecting one of 
-first, mid, or last returns.
+The <em>mean</em> and <em>range</em> methods will use average amount
+of memory (comparing to other methods).
+Methods such as <em>n, min, max</em>, and <em>sum</em> will use
+less memory,
+while <em>stddev, variance</em>, and <em>coeff_var</em> will use more.
+
 <p>
-LiDAR points can be already classified into standardized classes. For example,
-class number 2 represents ground (for other classes see LAS format specification
-in references). The <b>class_filter</b> option allows selecting one or more 
-classes, as numbers (integers) separated by comma.
+The memory usage for regular statistics mentioned above is based solely
+on region (raster) size.
+However, the aggregate functions <em>median, percentile, skewness</em>
+and <em>trimmean</em> will use more memory and may not be
+appropriate for use with arbitrarily large input files without
+a small value for the <b>percent</b> option because unlike
+the other statistics memory use for these also depends on
+the number of data points.
+
 <p>
 The default map <b>type</b>=<tt>FCELL</tt> is intended as compromise between
 preserving data precision and limiting system resource consumption.
 
-<h3>Setting region bounds and resolution</h3>
+<h2>EXAMPLES</h2>
 
+Simple example of binning of point from a LAS file into a newly created
+raster map in an existing location/mapset (using metric units):
+
+<div class="code"><pre>
+# set the computational region automatically, resol. for binning is 5m
+r.in.lidar -e -o input=points.las resolution=5 output=lidar_dem_mean
+g.region raster=lidar_dem_mean -p
+r.univar lidar_dem_mean
+</pre></div>
+
+<h3>Finding suitable extent and resolution</h3>
+
+<!-- TODO: there is duplication with the text in the description -->
 Using the <b>-s</b> scan flag, the extent of the input data (and thus
 point density) is printed. To check this is recommended before performing
 the full import. The <b>-g</b> shell style flag prints the extent suitable
-as command line parameters for <em>g.region</em>.<br>
+as command line parameters for <em>g.region</em>.
+
+<p>
 A simpler option is to automatically set the region extents based on the
 LAS dataset (<b>-e</b> flag) along with the target raster resolution using
 the <em>resolution</em> parameter. Also here it is recommended to verify
@@ -171,53 +446,13 @@ g.region -e
   # points_per_sq_m = n_points / (ns_extent * ew_extent*cos(lat) * (1852*60)^2)
 </pre></div>
 
-<h3>Filtering</h3>
+<h3>Serpent Mound dataset</h3>
 
-Points falling outside the current region will be skipped. This includes
-points falling <em>exactly</em> on the southern region bound.
-(to capture those adjust the region with "<tt>g.region s=s-0.000001</tt>";
-see <em>g.region</em>)
-<p>Blank lines and comment lines starting with the hash symbol (<tt>#</tt>)
-will be skipped.
-
-<p>
-The <b>zrange</b> parameter may be used for filtering the input data by
-vertical extent. Example uses might include preparing multiple raster
-sections to be combined into a 3D raster array with <em>r.to.rast3</em>, or
-for filtering outliers on relatively flat terrain.
-
-<p>
-In varied terrain the user may find that <em>min</em> maps make for a good
-noise filter as most LIDAR noise is from premature hits. The <em>min</em> map
-may also be useful to find the underlying topography in a forested or urban
-environment if the cells are oversampled.
-
-<p>
-The user can use a combination of <em>r.in.lidar</em> <b>output</b> maps to create
-custom filters. e.g. use <em>r.mapcalc</em> to create a <tt>mean-(2*stddev)</tt>
-map. [In this example the user may want to include a lower bound filter in
-<em>r.mapcalc</em> to remove highly variable points (small <em>n</em>) or run
-<em>r.neighbors</em> to smooth the stddev map before further use.]
-
-
-<h2>EXAMPLE</h2>
-
-Import of a LAS file into an existing location/mapset (metric):
-
-<div class="code"><pre>
-# set the computational region automatically, resol. for binning is 5m
-r.in.lidar -e -o input=points.las resolution=5 output=lidar_dem_mean
-g.region raster=lidar_dem_mean -p
-r.univar lidar_dem_mean
-</pre></div>
-
-<p>
-Serpent Mound dataset:
 This example is analogous to the example used in the GRASS wiki page for
 <a href="http://grasswiki.osgeo.org/wiki/LIDAR#Import_LAS_as_raster_DEM">importing LAS as raster DEM</a>.
 <p>The sample LAS data are in the file "Serpent Mound Model LAS Data.las", 
 available at 
-<a href="http://www.appliedimagery.com/downloads/sampledata/Serpent%20Mound%20Model%20LAS%20Data.las">appliedimagery.com</a>
+<a href="http://www.appliedimagery.com/downloads/sampledata/Serpent%20Mound%20Model%20LAS%20Data.las">appliedimagery.com</a>:
 
 <div class="code"><pre>
 # print LAS file info
@@ -240,34 +475,97 @@ r.in.lidar input="Serpent Mound Model LAS Data.las" \
            output=Serpent_Mound_Model_LAS_Data method=mean
 </pre></div>
 
-<h2>NOTES</h2>
-The typical file extensions for the LAS format are .las and .laz (compressed). 
-The compressed LAS (.laz) format can be imported only if libLAS has been compiled 
-with laszip support. It is also recommended to compile libLAS with GDAL, 
-needed to test for matching projections.
+<center>
+<img src="r_in_lidar.png">
+<p><em>Figure: Elevation for the whole area of Serpent Mound dataset</em></p>
+</center>
+
+<h3>Height above ground</h3>
+
+The mean height above ground of the points can be computed for each
+raster cell (the ground elevation is given by the raster map
+<tt>elevation</tt>):
+
+<div class="code"><pre>
+g.region raster=elevation -p
+r.in.lidar input=points.las output=mean_height_above_ground base_raster=elevation method=mean
+</pre></div>
+
+In this type of computation, it might be advantageous to change the resolution
+to match the precision of the points rather than deriving it from the base raster.
+<!-- TODO: say how -->
+
+<h3>Multiple file input</h3>
+
+The file option requres a file that contains a list of file names with the full 
+path. For example, a list of files in the directory /home/user/data:
+<div class="code"><pre>
+points1.laz
+points2.laz
+points3.laz
+</pre></div>
+
+would be lised in the file as:
+<div class="code"><pre>
+/home/user/data/points1.laz
+/home/user/data/points2.laz
+/home/user/data/points3.laz
+</pre></div>
+On Linux and OSX, this file can be automatically generated with the command:
+<div class="code"><pre>
+ls /home/user/data/*.laz > /home/user/data/filelist.txt
+</pre></div>
+On Windows:
+<div class="code"><pre>
+dir /b c:\users\user\data\*.laz > c:\users\user\data\filelist.txt
+</pre></div>
+
+The mean height above ground example above would then be:
+
+<div class="code"><pre>
+g.region raster=elevation -p
+r.in.lidar file=/home/user/data/filelist.txt output=mean_height_above_ground base_raster=elevation method=mean
+</pre></div>
 
-<h2>TODO</h2>
+In Python, the list of files can be created using the <em>glob</em>
+Python module:
+
+<div class="code"><pre>
+import glob
+import gscript
+    
+file_list_name = '/home/user/data/filelist.txt'
+with open(, mode='w') as file_list:
+    for path in glob.iglob('/home/user/data/lidar/*.las'):
+        file_list.write(path + "\n")
+
+gscript.run_command('r.in.lidar', file=file_list_name,
+                    output='mean_height_above_ground',
+                    base_raster='elevation' method='mean')
+</pre></div>
+
+
+<h2>KNOWN ISSUES</h2>
 
 <ul>
-<li> Support for multiple map output from a single run.<br>
-     <tt>method=string[,string,...] output=name[,name,...]</tt>
+<li>The "<tt>nan</tt>" value (as defined in C language) can leak into
+    <em>coeff_var</em> raster maps. Cause is unknown. Possible
+    work-around is: <tt>r.null setnull=nan</tt> or
+    <tt>r.mapcalc 'no_nan = if(map == map, map, null())'</tt>.
+<li>Only one method can be applied for a single run and multiple map
+    output from a single run
+    (e.g. <tt>method=string[,string,...] output=name[,name,...]</tt>
+    or <tt>n=string mean=string</tt>) is no supported.
 <!-- not really:
 <li> Merge with r.in.xyz.
 -->
      <!-- Bob Covill has supplied patches for MBIO interface already -->
 </ul>
 
-<h2>KNOWN ISSUES</h2>
-
-<ul>
-<li> "<tt>nan</tt>" can leak into <em>coeff_var</em> maps.
-  <br>Cause unknown. Possible work-around: "<tt>r.null setnull=nan</tt>"
-<!-- Another method:  r.mapcalc 'No_nan = if(map == map, map, null() )' -->
-</ul>
-
 If you encounter any problems (or solutions!) please contact the GRASS
 Development Team.
 
+
 <h2>SEE ALSO</h2>
 
 <em>
@@ -275,7 +573,9 @@ Development Team.
 <a href="r.in.xyz.html">r.in.xyz</a>,
 <a href="r.mapcalc.html">r.mapcalc</a>,
 <a href="r.univar.html">r.univar</a>,
-<a href="v.in.lidar.html">v.in.lidar</a>
+<a href="v.in.lidar.html">v.in.lidar</a>,
+<a href="r3.in.lidar.html">r3.in.lidar</a>,
+<a href="v.vect.stats.html">v.vect.stats</a>
 <br>
 <a href="v.lidar.correction.html">v.lidar.correction</a>,
 <a href="v.lidar.edgedetection.html">v.lidar.edgedetection</a>,
@@ -283,18 +583,36 @@ Development Team.
 <a href="v.outlier.html">v.outlier</a>,
 <a href="v.surf.bspline.html">v.surf.bspline</a>
 </em>
+<br>
+<a href="https://en.wikipedia.org/wiki/Truncated_mean">Trimmed mean</a>
+(Truncated mean, Wikipedia article),
+<a href="http://opentopography.org/">OpenTopography</a>
+(LiDAR point cloud repository)
+
 
 <h2>REFERENCES</h2>
 
+<ul>
+<li>
+V. Petras, A. Petrasova, J. Jeziorska, H. Mitasova (2016):
+<em>Processing UAV and lidar point clouds in GRASS GIS</em>.
+XXIII ISPRS Congress 2016 [<a href="http://www.int-arch-photogramm-remote-sens-spatial-inf-sci.net/XLI-B7/945/2016/">ISPRS Archives</a>, <a href="https://www.researchgate.net/publication/304340172_Processing_UAV_and_lidar_point_clouds_in_GRASS_GIS">ResearchGate</a>]
+<li>
 <a href="http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html">
-ASPRS LAS format</a><br>
-<a href="http://www.liblas.org/">LAS library</a> <br>
+ASPRS LAS format</a>
+<li>
+<a href="http://www.liblas.org/">LAS library</a>
+<li>
 <a href="http://test.liblas.org/doxygen/liblas_8h.htm">LAS library C API</a> documentation
+</ul>
 
 <h2>AUTHORS</h2>
 
 Markus Metz<br>
-based on r.in.xyz by Hamish Bowman and Volker Wichmann<br>
-
+Vaclav Petras,
+<a href="http://geospatial.ncsu.edu/osgeorel/">NCSU GeoForAll Lab</a>
+(base_raster option, documentation)
 <br>
-<p><i>Last changed: $Date: 2016-02-24 14:28:49 +0100 (Wed, 24 Feb 2016) $</i>
+based on <em>r.in.xyz</em> by Hamish Bowman and Volker Wichmann<br>
+
+<p><i>Last changed: $Date: 2016-08-22 04:16:33 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/raster/r.in.lidar/r_in_lidar.png b/raster/r.in.lidar/r_in_lidar.png
new file mode 100644
index 0000000..54009a0
Binary files /dev/null and b/raster/r.in.lidar/r_in_lidar.png differ
diff --git a/raster/r.in.lidar/r_in_lidar_base_raster.png b/raster/r.in.lidar/r_in_lidar_base_raster.png
new file mode 100644
index 0000000..5a32db8
Binary files /dev/null and b/raster/r.in.lidar/r_in_lidar_base_raster.png differ
diff --git a/raster/r.in.lidar/r_in_lidar_base_raster.svg b/raster/r.in.lidar/r_in_lidar_base_raster.svg
new file mode 100644
index 0000000..5ef0264
--- /dev/null
+++ b/raster/r.in.lidar/r_in_lidar_base_raster.svg
@@ -0,0 +1,518 @@
+<?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="114.68253mm"
+   height="44.489208mm"
+   viewBox="0 0 406.35541 157.63893"
+   id="svg4535"
+   version="1.1"
+   inkscape:version="0.91 r13725"
+   sodipodi:docname="r_in_lidar_base_raster.svg"
+   inkscape:export-filename="r_in_lidar_base_raster.png"
+   inkscape:export-xdpi="88.592392"
+   inkscape:export-ydpi="88.592392">
+  <defs
+     id="defs4537" />
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="1.4"
+     inkscape:cx="182.10114"
+     inkscape:cy="154.13035"
+     inkscape:document-units="px"
+     inkscape:current-layer="layer2"
+     showgrid="false"
+     inkscape:window-width="1877"
+     inkscape:window-height="1056"
+     inkscape:window-x="43"
+     inkscape:window-y="24"
+     inkscape:window-maximized="1"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5393"
+       originx="-122.76704"
+       originy="-76.483563" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata4540">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer"
+     id="layer1"
+     transform="translate(-122.76705,-818.23972)"
+     style="display:inline"
+     sodipodi:insensitive="true">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#b02d00;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 123.98879,909.0072 c 51.6991,10.81999 113.03282,-75.89504 125.01381,-79.88871 21.80737,-7.26912 17.29216,47.16485 53.03301,29.29443 11.21749,-5.60875 33.29345,-34.34519 40.4061,-34.34519 9.01171,0 6.70366,28.19218 8.5863,33.84011 2.1659,6.4977 18.01994,12.18165 23.23351,15.65736 49.34536,32.89691 31.55464,-2.64533 57.57869,-15.65736 4.47535,-2.23767 11.52545,15.12185 14.64722,16.16244 6.33273,2.11091 36.5171,6.23765 37.88072,5.55584 16.10249,-8.05125 24.80959,-22.98963 43.941 [...]
+       id="path5348"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="cssssssssc" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#ff5900;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 123.23861,924.07283 c 66.36111,-12.74611 131.1763,-56.92918 200.0102,-45.45686 17.70789,2.95131 78.93539,30.70574 96.3142,27.51922 8.17488,-1.49892 21.10436,-1.75255 28.94472,-6.30602 21.00134,-12.19703 52.46029,-25.25381 78.82163,-25.25381"
+       id="path5093"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssc" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-3"
+       cx="138.57143"
+       cy="905.93365"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-0"
+       cx="161.42857"
+       cy="899.93365"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-9"
+       cx="176.42857"
+       cy="891.36218"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-94"
+       cx="197.85715"
+       cy="878.79077"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-2"
+       cx="208.57143"
+       cy="871.64795"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-29"
+       cx="226.71428"
+       cy="853.07648"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-1"
+       cx="235.71428"
+       cy="842.36218"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-18"
+       cx="248.57143"
+       cy="829.50507"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-8"
+       cx="264.28571"
+       cy="838.07648"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-22"
+       cx="267.85715"
+       cy="849.07648"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-5"
+       cx="275.13"
+       cy="860.2627"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-6"
+       cx="287.14285"
+       cy="858.79077"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-55"
+       cx="310"
+       cy="855.21936"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-06"
+       cx="324.98239"
+       cy="838.8111"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-11"
+       cx="335.79352"
+       cy="829.46173"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-15"
+       cx="343.57144"
+       cy="822.36218"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-228"
+       cx="350.71429"
+       cy="840.93365"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-57"
+       cx="351.42856"
+       cy="855.93365"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-7"
+       cx="357.14285"
+       cy="863.79077"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-52"
+       cx="364.79077"
+       cy="868.70782"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-74"
+       cx="375"
+       cy="874.50507"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-96"
+       cx="399.28571"
+       cy="885.21936"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-91"
+       cx="411"
+       cy="882.64795"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-115"
+       cx="419.42856"
+       cy="869.79077"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-03"
+       cx="427.85715"
+       cy="858.07648"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-09"
+       cx="436.59445"
+       cy="858.90961"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-51"
+       cx="440"
+       cy="869.50507"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-225"
+       cx="446.42856"
+       cy="875.93365"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-4"
+       cx="490.62762"
+       cy="874.16211"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-306"
+       cx="499.85715"
+       cy="866.36218"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-79"
+       cx="510.55856"
+       cy="857.89032"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-311"
+       cx="525"
+       cy="846.64795"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-296"
+       cx="468.57144"
+       cy="874.50507"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-48"
+       cx="456.42856"
+       cy="-875.93365"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002"
+       transform="scale(1,-1)" />
+    <circle
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       id="path4136-56-95"
+       cx="478.78809"
+       cy="880.7356"
+       r="4.1224623"
+       inkscape:export-filename="zrange.png"
+       inkscape:export-xdpi="98.150002"
+       inkscape:export-ydpi="98.150002" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#00d710;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+       d="m 126.42857,970.00508 c 31.23619,18.6267 111.29087,-46.67602 120.35715,-42.14288 21.02584,10.51293 22.67441,51.69847 52.5,36.78572 12.53987,-6.26994 19.3852,-46.93942 38.57142,-42.14286 5.81188,1.45297 7.06428,52.28811 40.71429,41.07143 14.7339,-4.9113 20.71077,0.36066 32.14286,-11.07143 3.38441,-3.38441 8.0514,-22.2243 16.07143,-18.21429 7.2091,3.60456 5.07783,13.25321 12.14285,16.78572 46.83992,23.41998 40.65591,30.83715 85.71429,-0.35715"
+       id="path5397"
+       inkscape:connector-curvature="0"
+       sodipodi:nodetypes="csssssssc" />
+  </g>
+  <g
+     inkscape:groupmode="layer"
+     id="layer2"
+     inkscape:label="differences"
+     transform="translate(-122.76705,-818.23972)"
+     style="display:none">
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 252.53814,962.10834 -0.50508,53.53806"
+       id="path5353"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 269.71073,983.78601 0.50508,31.81979"
+       id="path5355"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 289.4087,1002.9586 0,13.132"
+       id="path5357"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 218.69803,981.90784 -0.50508,33.84006"
+       id="path5359"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 182.33253,1000.2327 0,15.1523"
+       id="path5361"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 147.98735,1005.9104 -0.50508,9.5964"
+       id="path5363"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 131.82491,1005.951 -0.50508,9.5965"
+       id="path5365"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 317.69298,980.75555 -1.51523,34.85025"
+       id="path5367"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 341.93664,956.5525 -0.50508,59.599"
+       id="path5369"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 350.52293,986.89769 1.01016,28.28431"
+       id="path5371"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 366.68537,994.02967 0,21.21323"
+       id="path5373"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 405.57625,996.19211 -0.50508,18.68779"
+       id="path5375"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 421.73869,976.99921 -0.50508,37.88069"
+       id="path5377"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 432.34529,968.89769 0.50508,46.46701"
+       id="path5379"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 444.9722,1014.8393 0,-28.28425"
+       id="path5381"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 463.15494,1000.616 0.50508,15.1523"
+       id="path5383"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 483.86307,1008.616 0.50508,7.071"
+       id="path5385"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 504.5712,1003.9891 1.51523,12.1218"
+       id="path5387"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 526.79455,988.31139 0,26.76901"
+       id="path5389"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 163.64471,1003.8292 1.01015,12.6269"
+       id="path5391"
+       inkscape:connector-curvature="0" />
+    <path
+       style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 130,1016.3622 425,0"
+       id="path5395"
+       inkscape:connector-curvature="0" />
+  </g>
+</svg>
diff --git a/raster/r.in.lidar/r_in_lidar_binning_count.png b/raster/r.in.lidar/r_in_lidar_binning_count.png
new file mode 100644
index 0000000..87ce179
Binary files /dev/null and b/raster/r.in.lidar/r_in_lidar_binning_count.png differ
diff --git a/raster/r.in.lidar/r_in_lidar_binning_mean.png b/raster/r.in.lidar/r_in_lidar_binning_mean.png
new file mode 100644
index 0000000..0d82dc7
Binary files /dev/null and b/raster/r.in.lidar/r_in_lidar_binning_mean.png differ
diff --git a/raster/r.in.lidar/r_in_lidar_zrange.png b/raster/r.in.lidar/r_in_lidar_zrange.png
new file mode 100644
index 0000000..9dc21d4
Binary files /dev/null and b/raster/r.in.lidar/r_in_lidar_zrange.png differ
diff --git a/raster/r.in.lidar/r_in_lidar_zrange.svg b/raster/r.in.lidar/r_in_lidar_zrange.svg
new file mode 100644
index 0000000..997f984
--- /dev/null
+++ b/raster/r.in.lidar/r_in_lidar_zrange.svg
@@ -0,0 +1,298 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<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"
+   version="1.1"
+   id="svg2"
+   viewBox="0 0 504.05695 354.90146"
+   height="100.16108mm"
+   width="142.25607mm">
+  <defs
+     id="defs4" />
+  <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
+     transform="translate(-137.97152,-281.58319)"
+     id="layer1">
+    <circle
+       r="4.1224623"
+       cy="423.7908"
+       cx="227.14287"
+       id="path4136"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="479.50507"
+       cx="255.71428"
+       id="path4136-0"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="520.21936"
+       cx="175"
+       id="path4136-8"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="415.93362"
+       cx="250.71428"
+       id="path4136-3"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="435.21936"
+       cx="282.85715"
+       id="path4136-1"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="420.21936"
+       cx="316.42856"
+       id="path4136-4"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="403.07648"
+       cx="321.42856"
+       id="path4136-6"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="385.93362"
+       cx="332.85715"
+       id="path4136-10"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="375.21936"
+       cx="362.14285"
+       id="path4136-41"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="379.50507"
+       cx="370.71429"
+       id="path4136-56"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="391.64792"
+       cx="392.14285"
+       id="path4136-14"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="403.07648"
+       cx="400.71429"
+       id="path4136-7"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="421.64792"
+       cx="436.42856"
+       id="path4136-49"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="406.64792"
+       cx="445"
+       id="path4136-55"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="405.21936"
+       cx="472.85715"
+       id="path4136-2"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="426.64792"
+       cx="475"
+       id="path4136-00"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="458.79077"
+       cx="480.71429"
+       id="path4136-54"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="466.64792"
+       cx="485.71429"
+       id="path4136-16"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="477.36221"
+       cx="503.57144"
+       id="path4136-33"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="478.79077"
+       cx="522.14288"
+       id="path4136-89"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="485.93362"
+       cx="541.42859"
+       id="path4136-47"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="493.79077"
+       cx="556.42859"
+       id="path4136-58"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="507.36221"
+       cx="576.42859"
+       id="path4136-81"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="509.50507"
+       cx="590.71429"
+       id="path4136-42"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="510.93362"
+       cx="603.57141"
+       id="path4136-11"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="632.36218"
+       cx="309.28571"
+       id="path4136-59"
+       style="fill:#0095d7;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="620.36218"
+       cx="366.42856"
+       id="path4136-9"
+       style="fill:#0095d7;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="586.50507"
+       cx="333.71429"
+       id="path4136-75"
+       style="fill:#0095d7;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <path
+       id="path4329"
+       d="m 140,342.3622 500,0"
+       style="fill:none;fill-rule:evenodd;stroke:#f62929;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:32, 4;stroke-dashoffset:0;stroke-opacity:0.75117373" />
+    <text
+       id="text4331"
+       y="332.36221"
+       x="140"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="332.36221"
+         x="140"
+         id="tspan4333">zrange=180,<tspan
+   id="tspan4335"
+   style="font-weight:bold">250</tspan></tspan></text>
+    <path
+       id="path4329-4"
+       d="m 140,560.3622 500,0"
+       style="fill:none;fill-rule:evenodd;stroke:#f62929;stroke-width:4;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:32, 4;stroke-dashoffset:0;stroke-opacity:0.75117373" />
+    <text
+       id="text4331-8"
+       y="550.36218"
+       x="140"
+       style="font-style:normal;font-weight:normal;font-size:20px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="550.36218"
+         x="140"
+         id="tspan4333-5">zrange=<tspan
+   id="tspan4405"
+   style="font-weight:bold">180</tspan>,250</tspan></text>
+    <circle
+       r="4.1224623"
+       cy="318.07648"
+       cx="465"
+       id="path4136-5"
+       style="fill:#0095d7;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="298.07648"
+       cx="545"
+       id="path4136-5-1"
+       style="fill:#0095d7;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="498.07648"
+       cx="215"
+       id="path4136-5-8"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <circle
+       r="4.1224623"
+       cy="518.07648"
+       cx="195"
+       id="path4136-5-2"
+       style="fill:#00d710;fill-opacity:1;stroke:none;stroke-width:0.47379306;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1" />
+    <text
+       id="text4459"
+       y="582.36218"
+       x="340"
+       style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="582.36218"
+         x="340"
+         id="tspan4461">175</tspan></text>
+    <text
+       id="text4463"
+       y="626.36218"
+       x="312"
+       style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="626.36218"
+         x="312"
+         id="tspan4465">160</tspan></text>
+    <text
+       id="text4467"
+       y="612.36218"
+       x="370"
+       style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="612.36218"
+         x="370"
+         id="tspan4469">162</tspan></text>
+    <text
+       id="text4459-1"
+       y="310.36218"
+       x="469"
+       style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="310.36218"
+         x="469"
+         id="tspan4461-5">257</tspan></text>
+    <text
+       id="text4459-9"
+       y="290.86053"
+       x="550.5116"
+       style="font-style:normal;font-weight:normal;font-size:12.5px;line-height:125%;font-family:Sans;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       xml:space="preserve"><tspan
+         y="290.86053"
+         x="550.5116"
+         id="tspan4461-8">235</tspan></text>
+  </g>
+</svg>
diff --git a/raster/r.in.lidar/rast_segment.c b/raster/r.in.lidar/rast_segment.c
new file mode 100644
index 0000000..c9a1190
--- /dev/null
+++ b/raster/r.in.lidar/rast_segment.c
@@ -0,0 +1,86 @@
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/raster.h>
+#include <grass/segment.h>
+
+#include "rast_segment.h"
+
+static void rast_segment_load(SEGMENT * segment, int rowio,
+                              RASTER_MAP_TYPE map_type)
+{
+    void *raster_row = Rast_allocate_input_buf(map_type);
+    int row;
+
+    for (row = 0; row < Rast_input_window_rows(); row++) {
+        /* TODO: free mem */
+        Rast_get_row(rowio, raster_row, row, map_type);
+        Segment_put_row(segment, raster_row, row);
+    }
+}
+
+/* TODO: close function */
+
+void rast_segment_open(SEGMENT * segment, const char *name,
+                       RASTER_MAP_TYPE * map_type)
+{
+    /* TODO: check if not passing the mapset is OK */
+    int rowio = Rast_open_old(name, "");
+
+    *map_type = Rast_get_map_type(rowio);
+    int segment_rows = 64;
+
+    /* we use long segments because this is how the values a binned */
+    int segment_cols = Rast_input_window_cols();
+    int segments_in_memory = 4;
+
+    if (Segment_open(segment, G_tempfile(), Rast_input_window_rows(),
+                     Rast_input_window_cols(), segment_rows, segment_cols,
+                     Rast_cell_size(*map_type), segments_in_memory) != 1)
+        G_fatal_error(_("Cannot create temporary file with segments of a raster map"));
+    rast_segment_load(segment, rowio, *map_type);
+    Rast_close(rowio);          /* we won't need the raster again */
+}
+
+
+/* 0 on out of region or NULL, 1 on success */
+int rast_segment_get_value_xy(SEGMENT * base_segment,
+                              struct Cell_head *input_region,
+                              RASTER_MAP_TYPE rtype, double x, double y,
+                              double *value)
+{
+    /* Rast gives double, Segment needs off_t */
+    off_t base_row = Rast_northing_to_row(y, input_region);
+    off_t base_col = Rast_easting_to_col(x, input_region);
+
+    /* skip points which are outside the base raster
+     * (null propagation) */
+    if (base_row < 0 || base_col < 0 ||
+        base_row >= input_region->rows || base_col >= input_region->cols)
+        return 0;
+    if (rtype == DCELL_TYPE) {
+        DCELL tmp;
+
+        Segment_get(base_segment, &tmp, base_row, base_col);
+        if (Rast_is_d_null_value(&tmp))
+            return 0;
+        *value = (double)tmp;
+    }
+    else if (rtype == FCELL_TYPE) {
+        FCELL tmp;
+
+        Segment_get(base_segment, &tmp, base_row, base_col);
+        if (Rast_is_f_null_value(&tmp))
+            return 0;
+        *value = (double)tmp;
+    }
+    else {
+        CELL tmp;
+
+        Segment_get(base_segment, &tmp, base_row, base_col);
+        if (Rast_is_c_null_value(&tmp))
+            return 0;
+        *value = (double)tmp;
+    }
+    return 1;
+}
diff --git a/raster/r.in.lidar/rast_segment.h b/raster/r.in.lidar/rast_segment.h
new file mode 100644
index 0000000..7179d6b
--- /dev/null
+++ b/raster/r.in.lidar/rast_segment.h
@@ -0,0 +1,14 @@
+#ifndef GRASS_RAST_SEGMENT_H
+#define GRASS_RAST_SEGMENT_H
+
+#include <grass/raster.h>
+#include <grass/segment.h>
+
+void rast_segment_open(SEGMENT * segment, const char *name,
+                       RASTER_MAP_TYPE * map_type);
+int rast_segment_get_value_xy(SEGMENT * base_segment,
+                              struct Cell_head *input_region,
+                              RASTER_MAP_TYPE rtype, double x, double y,
+                              double *value);
+
+#endif /* GRASS_RAST_SEGMENT_H */
diff --git a/raster/r.in.lidar/string_list.c b/raster/r.in.lidar/string_list.c
new file mode 100644
index 0000000..d563f5c
--- /dev/null
+++ b/raster/r.in.lidar/string_list.c
@@ -0,0 +1,65 @@
+
+#include <stdio.h>
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+#include "local_proto.h"
+
+#define SIZE_INCREMENT 10
+
+static int string_list_add_item(struct StringList *string_list, char *item)
+{
+    int n = string_list->num_items++;
+
+    if (string_list->num_items >= string_list->max_items) {
+        string_list->max_items += SIZE_INCREMENT;
+        string_list->items = G_realloc(string_list->items,
+                                       (size_t) string_list->max_items *
+                                       sizeof(char *));
+    }
+    /* n contains the index */
+    string_list->items[n] = item;
+    return n;
+}
+
+void string_list_from_file(struct StringList *string_list, char *filename)
+{
+    string_list->num_items = 0;
+    string_list->max_items = 0;
+    string_list->items = NULL;
+    FILE *file = fopen(filename, "r");  /* should check the result */
+    if (!file)
+        G_fatal_error(_("Cannot open file %s for reading"), filename);
+    char *line = G_malloc(GPATH_MAX * sizeof(char));
+
+    while (G_getl2(line, GPATH_MAX * sizeof(char), file)) {
+        G_debug(5, "line content from file %s: %s\n", filename, line);
+        string_list_add_item(string_list, line);
+        line = G_malloc(GPATH_MAX);
+    }
+    /* last allocation was not necessary */
+    G_free(line);
+    fclose(file);
+}
+
+void string_list_from_one_item(struct StringList *string_list, char *item)
+{
+    string_list->num_items = 0;
+    string_list->max_items = 0;
+    string_list->items = NULL;
+    string_list_add_item(string_list, strdup(item));
+}
+
+void string_list_free(struct StringList *string_list)
+{
+    int i;
+
+    for (i = 0; i < string_list->num_items; i++)
+        G_free(string_list->items[i]);
+    G_free(string_list->items);
+    string_list->num_items = 0;
+    string_list->max_items = 0;
+    string_list->items = NULL;
+}
diff --git a/raster/r.in.lidar/support.c b/raster/r.in.lidar/support.c
index 95be62f..66977b4 100644
--- a/raster/r.in.lidar/support.c
+++ b/raster/r.in.lidar/support.c
@@ -128,3 +128,23 @@ int update_sumsq(void *array, int cols, int row, int col,
 
     return 0;
 }
+
+/* 0 on NULL, 1 on success */
+int row_array_get_value_row_col(void *array, int arr_row, int arr_col,
+                                int cols, RASTER_MAP_TYPE rtype, double *value)
+{
+    void *ptr = array;
+    ptr =
+        G_incr_void_ptr(ptr,
+                        (((size_t) arr_row * cols) +
+                         arr_col) * Rast_cell_size(rtype));
+    if (Rast_is_null_value(ptr, rtype))
+        return 0;
+    if (rtype == DCELL_TYPE)
+        *value = (double) *(DCELL *) ptr;
+    else if (rtype == FCELL_TYPE)
+        *value = (double) *(FCELL *) ptr;
+    else
+        *value = (double) *(CELL *) ptr;
+    return 1;
+}
diff --git a/raster/r.in.lidar/test/sample_test.sh b/raster/r.in.lidar/test/sample_test.sh
new file mode 100755
index 0000000..a7bce46
--- /dev/null
+++ b/raster/r.in.lidar/test/sample_test.sh
@@ -0,0 +1,11 @@
+# GNU GPL
+# Vaclav Petras
+# this is an idea for a test
+export GRASS_OVERWRITE=1
+r.in.lidar in=points.las out=test_pure
+r.in.lidar in=points.las out=test_hag base=elevation
+r.mapcalc "test_difference = (elevation + test_hag) - test_pure"
+r.univar test_difference
+
+
+g.region -p -a raster=test_difference at manual res=0.1 zoom=test_difference at manual
diff --git a/raster/r.in.lidar/testsuite/data/points.las b/raster/r.in.lidar/testsuite/data/points.las
new file mode 100644
index 0000000..5e55cef
Binary files /dev/null and b/raster/r.in.lidar/testsuite/data/points.las differ
diff --git a/raster/r.in.lidar/testsuite/data/points.txt b/raster/r.in.lidar/testsuite/data/points.txt
new file mode 100644
index 0000000..5421b92
--- /dev/null
+++ b/raster/r.in.lidar/testsuite/data/points.txt
@@ -0,0 +1,16 @@
+21,19,30,1,2
+21,16,30,1,2
+24,18,35,2,5
+26,19,35,2,5
+23,16,35,2,5
+27,17,35,2,5
+29,19,40,1,5
+28,14,40,1,5
+21,14,32,2,5
+24,13,37,1,5
+27,14,37,1,5
+29,16,40,2,5
+21,11,32,2,5
+24,11,32,3,3
+26,11,32,3,3
+29,11,40,2,5
diff --git a/raster/r.in.lidar/testsuite/test_base_resolution.sh b/raster/r.in.lidar/testsuite/test_base_resolution.sh
new file mode 100755
index 0000000..bb1f124
--- /dev/null
+++ b/raster/r.in.lidar/testsuite/test_base_resolution.sh
@@ -0,0 +1,36 @@
+#!/usr/bin/env bash
+
+set -e
+set -x
+
+basename="test_rinlidar_"
+
+g.region n=20 s=10 e=30 w=20 res=2.5
+r.in.xyz data/points.txt output=${basename}base x=1 y=2 z=3 separator=comma
+
+echo "With base raster resolution matching current region"
+
+r.in.lidar input=data/points.las output=${basename}with_region \
+    base_raster=${basename}base method=min -o
+echo "Almost all in the following r.univar output should be zero"
+r.univar ${basename}with_region
+echo "Automatic test if there are only allowed values..."
+r.univar ${basename}with_region -g \
+    | grep -ve "=0$" | grep -ve "=-nan$" | grep -e "=[^2-9][^12345789]$"
+
+echo "With base raster resolution different from current region"
+
+g.region res=5
+
+r.in.lidar input=data/points.las output=${basename}with_base \
+    base_raster=${basename}base method=min -o -d
+echo "Almost all in the following r.univar output should be zero"
+r.univar ${basename}with_base
+echo "Automatic test if there are only allowed values..."
+r.univar ${basename}with_base -g \
+    | grep -ve "=0$" | grep -ve "=-nan$" | grep -e "=[^12356789]$"
+
+echo "Test successful
+When running manually maps can be now removed with:
+  g.remove type=rast pattern='test_rinlidar_*' -f
+However, the region was changed to whatever the test needed."
diff --git a/raster/r.in.mat/r.in.mat.html b/raster/r.in.mat/r.in.mat.html
index e8d059b..db58a60 100644
--- a/raster/r.in.mat/r.in.mat.html
+++ b/raster/r.in.mat/r.in.mat.html
@@ -134,4 +134,4 @@ University of Otago<br>
 New Zealand</i><br>
 
 <br>
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/raster/r.in.png/r.in.png.html b/raster/r.in.png/r.in.png.html
index 07662e4..43df491 100644
--- a/raster/r.in.png/r.in.png.html
+++ b/raster/r.in.png/r.in.png.html
@@ -17,4 +17,4 @@ Alex Shevlakov<br>
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-01-13 10:20:46 +0100 (Wed, 13 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-13 10:18:55 +0100 (Wed, 13 Jan 2016) $</i>
diff --git a/raster/r.in.poly/r.in.poly.html b/raster/r.in.poly/r.in.poly.html
index 8bc17d8..775550f 100644
--- a/raster/r.in.poly/r.in.poly.html
+++ b/raster/r.in.poly/r.in.poly.html
@@ -106,4 +106,4 @@ A
 
 Michael Shapiro, U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-11-01 11:11:04 +0100 (Sat, 01 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-01 11:07:51 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/raster/r.in.poly/testsuite/test_rinpoly.py b/raster/r.in.poly/testsuite/test_rinpoly.py
index a5870c9..d5f07b3 100644
--- a/raster/r.in.poly/testsuite/test_rinpoly.py
+++ b/raster/r.in.poly/testsuite/test_rinpoly.py
@@ -1,6 +1,7 @@
 import os
 import tempfile
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.script.core import read_command
 
 
@@ -24,7 +25,7 @@ L
 """
 
 
-class TestRInPoly(grass.gunittest.TestCase):
+class TestRInPoly(TestCase):
 
     rinpoly = 'test_rinpoly'
 
@@ -103,9 +104,9 @@ class TestRInPoly(grass.gunittest.TestCase):
         self.tmpFile.close()
         self.assertModule('r.in.poly', input=self.tmpFile.name, output=self.rinpoly, type='DCELL')
         category = read_command('r.category', map=self.rinpoly, values=[-8, 3, 10.01]).strip()
-        self.assertEqual(first="-8\t\n3\tlabel2\n10.01\tlabel1", second=category,
-                         msg="Labels do not match")
+        self.assertEqual(first="-8\t{newline}3\tlabel2{newline}10.01\tlabel1".format(newline=os.linesep),
+                         second=category, msg="Labels do not match")
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/raster/r.in.xyz/r.in.xyz.html b/raster/r.in.xyz/r.in.xyz.html
index cd24974..a95efcb 100644
--- a/raster/r.in.xyz/r.in.xyz.html
+++ b/raster/r.in.xyz/r.in.xyz.html
@@ -354,4 +354,4 @@ Extended by Volker Wichmann to support the aggregate functions
 <i>median, percentile, skewness</i> and <i>trimmed mean</i>.
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.info/r.info.html b/raster/r.info/r.info.html
index 212ee6b..2a40547 100644
--- a/raster/r.info/r.info.html
+++ b/raster/r.info/r.info.html
@@ -143,4 +143,4 @@ Michael O'Shea,
 <a href="http://www.cecer.army.mil/">U.S. Army Construction Engineering Research Laboratory</a>
 
 <p>
-<i>Last changed: $Date: 2014-11-26 17:43:46 +0100 (Wed, 26 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-26 17:43:10 +0100 (Wed, 26 Nov 2014) $</i>
diff --git a/raster/r.kappa/r.kappa.html b/raster/r.kappa/r.kappa.html
index 0abc1b2..b7580f6 100644
--- a/raster/r.kappa/r.kappa.html
+++ b/raster/r.kappa/r.kappa.html
@@ -48,6 +48,14 @@ information for each and every category.
 
 <H2>EXAMPLE</H2>
 
+Example for North Carolina sample dataset:
+
+<div class="code"><pre>
+g.region raster=landclass96 -p
+r.kappa -w classification=landuse96_28m reference=landclass96
+</pre></div>
+<p>
+
 Verification of classified LANDSAT scene against training areas:
 
 <div class="code"><pre>
@@ -69,4 +77,4 @@ r.kappa -w classification=lsat7_2002_classes reference=training
 Tao Wen, University of Illinois at Urbana-Champaign, Illinois
 
 <p>
-<i>Last changed: $Date: 2012-12-16 13:56:26 +0100 (Sun, 16 Dec 2012) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.lake/main.c b/raster/r.lake/main.c
index d6f4cd7..61c467b 100644
--- a/raster/r.lake/main.c
+++ b/raster/r.lake/main.c
@@ -164,6 +164,7 @@ int main(int argc, char *argv[])
     lake_opt = G_define_standard_option(G_OPT_R_OUTPUT);
     lake_opt->key = "lake";
     lake_opt->required = NO;
+    lake_opt->guisection = _("Output");
 
     sdxy_opt = G_define_standard_option(G_OPT_M_COORDS);
     sdxy_opt->label = _("Seed point coordinates");
@@ -171,6 +172,7 @@ int main(int argc, char *argv[])
 	" map have to be specified");
     sdxy_opt->required = NO;
     sdxy_opt->multiple = NO;
+    sdxy_opt->guisection = _("Seed");
 
     smap_opt = G_define_standard_option(G_OPT_R_MAP);
     smap_opt->key = "seed";
@@ -179,6 +181,7 @@ int main(int argc, char *argv[])
     smap_opt->description =
 	_("Either this parameter or a coordinates pair have to be specified");
     smap_opt->required = NO;
+    smap_opt->guisection = _("Seed");
 
     negative_flag = G_define_flag();
     negative_flag->key = 'n';
@@ -189,6 +192,7 @@ int main(int argc, char *argv[])
     overwrite_flag->key = 'o';
     overwrite_flag->description =
 	_("Overwrite seed map with result (lake) map");
+    overwrite_flag->guisection = _("Output");
 
     if (G_parser(argc, argv))	/* Returns 0 if successful, non-zero otherwise */
 	exit(EXIT_FAILURE);
@@ -351,7 +355,7 @@ int main(int argc, char *argv[])
     G_message(_("Lake depth from %f to %f (specified water level is taken as zero)"), min_depth, max_depth);
     G_message(_("Lake area %f square meters"), area);
     G_message(_("Lake volume %f cubic meters"), volume);
-    G_warning(_("Volume is correct only if lake depth (terrain raster map) is in meters"));
+    G_important_message(_("Volume is correct only if lake depth (terrain raster map) is in meters"));
 
     /* Close all files. Lake map gets written only now. */
     Rast_close(in_terran_fd);
diff --git a/raster/r.lake/r.lake.html b/raster/r.lake/r.lake.html
index 086f5ec..9ada4c2 100644
--- a/raster/r.lake/r.lake.html
+++ b/raster/r.lake/r.lake.html
@@ -115,4 +115,4 @@ Small flooding along a street (<em>r.lake</em>, using Lidar 1m DEM)
 <h2>AUTHOR</h2>
 Maris Nartiss (maris.nartiss gmail.com)
 
-<p><i>Last changed: $Date: 2015-12-19 23:28:25 +0100 (Sat, 19 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-12-19 23:27:42 +0100 (sam 19 déc 2015) $</i>
diff --git a/raster/r.latlong/r.latlong.html b/raster/r.latlong/r.latlong.html
index d956434..dee4e84 100644
--- a/raster/r.latlong/r.latlong.html
+++ b/raster/r.latlong/r.latlong.html
@@ -29,4 +29,4 @@ r.latlong input=elevation output=latitude
 
 Yann Chemin, International Rice Research Institute, The Philippines
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/TODO b/raster/r.li/TODO
index 0beb578..914fb05 100644
--- a/raster/r.li/TODO
+++ b/raster/r.li/TODO
@@ -2,16 +2,6 @@ TODO list
 =========
 
 GRASS 7:
- * r.li.daemon: Uses UNIX sockets, replace or figure out how
-   to use them on Windows
-    --> 4/2014: still an issue?
-
- * r.li.setup: Shell scripts, Tcl/Tk, Xmonitors to be replaced
-   by Python + wxPython equivalents.
-   See Luca D's prototype in  trunk/gui/wxpython/rlisetup
-   and  http://grass.osgeo.org/grass70/manuals/g.gui.rlisetup.html
-    --> 4/2014: still an issue?
-
 # TODO: change the examples to North Carolina wherever possible:
 
 # Spearfish tests
diff --git a/raster/r.li/r.li.cwed/r.li.cwed.html b/raster/r.li/r.li.cwed/r.li.cwed.html
index 37c2667..c7f60f6 100644
--- a/raster/r.li/r.li.cwed/r.li.cwed.html
+++ b/raster/r.li/r.li.cwed/r.li.cwed.html
@@ -74,4 +74,4 @@ Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)<br>
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i></p>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i></p>
diff --git a/raster/r.li/r.li.daemon/r.li.daemon.html b/raster/r.li/r.li.daemon/r.li.daemon.html
index f2e8462..fda185e 100644
--- a/raster/r.li/r.li.daemon/r.li.daemon.html
+++ b/raster/r.li/r.li.daemon/r.li.daemon.html
@@ -96,4 +96,4 @@ This program is free software under the GPL (>=v2)
 Read the COPYING file that comes with GRASS for details.
 
 <p>
-<i>Last changed: $Date: 2015-04-09 17:19:11 +0200 (Thu, 09 Apr 2015) $</i>
+<i>Last changed: $Date: 2015-03-23 20:44:45 +0100 (Mon, 23 Mar 2015) $</i>
diff --git a/raster/r.li/r.li.dominance/r.li.dominance.html b/raster/r.li/r.li.dominance/r.li.dominance.html
index 7911903..99cf246 100644
--- a/raster/r.li/r.li.dominance/r.li.dominance.html
+++ b/raster/r.li/r.li.dominance/r.li.dominance.html
@@ -73,4 +73,4 @@ Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)<br>
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2015-08-25 00:15:04 +0200 (Tue, 25 Aug 2015) $</i></p>
+<i>Last changed: $Date: 2015-08-24 05:56:52 +0200 (Mon, 24 Aug 2015) $</i></p>
diff --git a/raster/r.li/r.li.edgedensity/r.li.edgedensity.html b/raster/r.li/r.li.edgedensity/r.li.edgedensity.html
index cc2034d..d18d858 100644
--- a/raster/r.li/r.li.edgedensity/r.li.edgedensity.html
+++ b/raster/r.li/r.li.edgedensity/r.li.edgedensity.html
@@ -94,4 +94,4 @@ Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)<br>
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2015-08-25 00:15:04 +0200 (Tue, 25 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-24 05:56:52 +0200 (Mon, 24 Aug 2015) $</i>
diff --git a/raster/r.li/r.li.html b/raster/r.li/r.li.html
index 9e8977a..2be690d 100644
--- a/raster/r.li/r.li.html
+++ b/raster/r.li/r.li.html
@@ -206,4 +206,4 @@ Commission from Faunalia Pontedera (PI)
 Partially rewritten by Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-02-08 13:53:24 +0100 (Mon, 08 Feb 2016) $</i>
+<i>Last changed: $Date: 2016-02-01 19:54:26 +0100 (Mon, 01 Feb 2016) $</i>
diff --git a/raster/r.li/r.li.mpa/mpa.c b/raster/r.li/r.li.mpa/mpa.c
index f5b4968..d711972 100644
--- a/raster/r.li/r.li.mpa/mpa.c
+++ b/raster/r.li/r.li.mpa/mpa.c
@@ -15,13 +15,14 @@
  *
  *****************************************************************************/
 
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/glocale.h>
+
 #include <stdlib.h>
 #include <fcntl.h>
 #include <math.h>
 
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include <grass/glocale.h>
 
 #include "../r.li.daemon/defs.h"
 #include "../r.li.daemon/daemon.h"
diff --git a/raster/r.li/r.li.mpa/r.li.mpa.html b/raster/r.li/r.li.mpa/r.li.mpa.html
index 5e48042..c1e9882 100644
--- a/raster/r.li/r.li.mpa/r.li.mpa.html
+++ b/raster/r.li/r.li.mpa/r.li.mpa.html
@@ -81,4 +81,4 @@ Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)<br>
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.mps/r.li.mps.html b/raster/r.li/r.li.mps/r.li.mps.html
index 27d8c3f..800cd7e 100644
--- a/raster/r.li/r.li.mps/r.li.mps.html
+++ b/raster/r.li/r.li.mps/r.li.mps.html
@@ -82,4 +82,4 @@ Michael Shapiro - CERL (patch identification)<br>
 Markus Metz (statistics)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.padcv/r.li.padcv.html b/raster/r.li/r.li.padcv/r.li.padcv.html
index 5ce05d3..0035aa0 100644
--- a/raster/r.li/r.li.padcv/r.li.padcv.html
+++ b/raster/r.li/r.li.padcv/r.li.padcv.html
@@ -72,4 +72,4 @@ Michael Shapiro - CERL (patch identification)<br>
 Markus Metz (statistics)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.padrange/r.li.padrange.html b/raster/r.li/r.li.padrange/r.li.padrange.html
index ca3d5ea..ab73f30 100644
--- a/raster/r.li/r.li.padrange/r.li.padrange.html
+++ b/raster/r.li/r.li.padrange/r.li.padrange.html
@@ -74,4 +74,4 @@ Michael Shapiro - CERL (patch identification)<br>
 Markus Metz (statistics)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i></p>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i></p>
diff --git a/raster/r.li/r.li.padsd/r.li.padsd.html b/raster/r.li/r.li.padsd/r.li.padsd.html
index 8059005..8bf928e 100644
--- a/raster/r.li/r.li.padsd/r.li.padsd.html
+++ b/raster/r.li/r.li.padsd/r.li.padsd.html
@@ -74,4 +74,4 @@ Michael Shapiro - CERL (patch identification)<br>
 Markus Metz (statistics)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.patchdensity/r.li.patchdensity.html b/raster/r.li/r.li.patchdensity/r.li.patchdensity.html
index 2103741..10ab244 100644
--- a/raster/r.li/r.li.patchdensity/r.li.patchdensity.html
+++ b/raster/r.li/r.li.patchdensity/r.li.patchdensity.html
@@ -85,4 +85,4 @@ Michael Shapiro - CERL (patch identification)<br>
 Markus Metz (statistics)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.patchnum/r.li.patchnum.html b/raster/r.li/r.li.patchnum/r.li.patchnum.html
index 214f47a..6ffb202 100644
--- a/raster/r.li/r.li.patchnum/r.li.patchnum.html
+++ b/raster/r.li/r.li.patchnum/r.li.patchnum.html
@@ -68,4 +68,4 @@ Michael Shapiro - CERL (patch identification)<br>
 Markus Metz (statistics)
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.pielou/r.li.pielou.html b/raster/r.li/r.li.pielou/r.li.pielou.html
index 0e0d519..11cda78 100644
--- a/raster/r.li/r.li.pielou/r.li.pielou.html
+++ b/raster/r.li/r.li.pielou/r.li.pielou.html
@@ -71,4 +71,4 @@ Luca Delucchi and Duccio Rocchini, Fondazione E. Mach (Italy), based on the <em>
 developed by Serena Pallecchi student of Computer Science University of Pisa (Italy).<br>
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.renyi/r.li.renyi.html b/raster/r.li/r.li.renyi/r.li.renyi.html
index 86d69d4..7b94716 100644
--- a/raster/r.li/r.li.renyi/r.li.renyi.html
+++ b/raster/r.li/r.li.renyi/r.li.renyi.html
@@ -75,4 +75,4 @@ the <em>r.li.shannon</em> code developed by Serena Pallecchi student of
 Computer Science University of Pisa (Italy).<br>
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.richness/r.li.richness.html b/raster/r.li/r.li.richness/r.li.richness.html
index 9fa1d24..8095b0d 100644
--- a/raster/r.li/r.li.richness/r.li.richness.html
+++ b/raster/r.li/r.li.richness/r.li.richness.html
@@ -76,4 +76,4 @@ Serena Pallecchi student of Computer Science University of Pisa (Italy).<br>
 Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)
 
 <p>
-<i>Last changed: $Date: 2015-08-25 00:15:04 +0200 (Tue, 25 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-24 05:56:52 +0200 (Mon, 24 Aug 2015) $</i>
diff --git a/raster/r.li/r.li.shannon/r.li.shannon.html b/raster/r.li/r.li.shannon/r.li.shannon.html
index c65eebd..f35ebc0 100644
--- a/raster/r.li/r.li.shannon/r.li.shannon.html
+++ b/raster/r.li/r.li.shannon/r.li.shannon.html
@@ -72,4 +72,4 @@ Serena Pallecchi student of Computer Science University of Pisa (Italy).<br>
 Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)
 
 <p>
-<i>Last changed: $Date: 2015-08-25 00:15:04 +0200 (Tue, 25 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-24 05:56:52 +0200 (Mon, 24 Aug 2015) $</i>
diff --git a/raster/r.li/r.li.shape/r.li.shape.html b/raster/r.li/r.li.shape/r.li.shape.html
index bbf3819..6a93c0a 100644
--- a/raster/r.li/r.li.shape/r.li.shape.html
+++ b/raster/r.li/r.li.shape/r.li.shape.html
@@ -74,4 +74,4 @@ University of Pisa (Italy).<br>
 Commission from Faunalia Pontedera (PI) (www.faunalia.it)<br>
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.li/r.li.simpson/r.li.simpson.html b/raster/r.li/r.li.simpson/r.li.simpson.html
index 1fabb1a..5f31266 100644
--- a/raster/r.li/r.li.simpson/r.li.simpson.html
+++ b/raster/r.li/r.li.simpson/r.li.simpson.html
@@ -72,4 +72,4 @@ Serena Pallecchi student of Computer Science University of Pisa (Italy).<br>
 Commission from Faunalia Pontedera (PI), Italy (www.faunalia.it)
 
 <p>
-<i>Last changed: $Date: 2015-08-25 00:15:04 +0200 (Tue, 25 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-24 05:56:52 +0200 (Mon, 24 Aug 2015) $</i>
diff --git a/raster/r.mapcalc/Makefile b/raster/r.mapcalc/Makefile
index db1f642..e427ebf 100644
--- a/raster/r.mapcalc/Makefile
+++ b/raster/r.mapcalc/Makefile
@@ -12,8 +12,8 @@ r3_mapcalc_OBJS := $(filter-out map.o xcoor.o xres.o, $(AUTO_OBJS))
 include $(MODULE_TOPDIR)/include/Make/Multi.make
 
 EXTRA_CFLAGS = $(READLINEINCPATH) $(PTHREADINCPATH)
-LIBES2 =           $(GISLIB) $(RASTERLIB) $(BTREELIB) $(READLINELIBPATH) $(READLINELIB) $(HISTORYLIB) $(PTHREADLIBPATH) $(PTHREADLIB)
-LIBES3 = $(RASTER3DLIB) $(GISLIB) $(RASTERLIB) $(BTREELIB) $(READLINELIBPATH) $(READLINELIB) $(HISTORYLIB) $(PTHREADLIBPATH) $(PTHREADLIB)
+LIBES2 = $(CALCLIB) $(GISLIB) $(RASTERLIB) $(BTREELIB) $(READLINELIBPATH) $(READLINELIB) $(HISTORYLIB) $(PTHREADLIBPATH) $(PTHREADLIB)
+LIBES3 = $(CALCLIB) $(RASTER3DLIB) $(GISLIB) $(RASTERLIB) $(BTREELIB) $(READLINELIBPATH) $(READLINELIB) $(HISTORYLIB) $(PTHREADLIBPATH) $(PTHREADLIB)
 
 default: multi
 
diff --git a/raster/r.mapcalc/check.c b/raster/r.mapcalc/check.c
deleted file mode 100644
index c288e1b..0000000
--- a/raster/r.mapcalc/check.c
+++ /dev/null
@@ -1,160 +0,0 @@
-
-#include "mapcalc.h"
-#include "func_proto.h"
-
-int c_int0(int argc, int *argt)
-{
-    if (argc > 0)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-
-    return 0;
-}
-
-int c_double0(int argc, int *argt)
-{
-    if (argc > 0)
-	return E_ARG_HI;
-
-    argt[0] = DCELL_TYPE;
-
-    return 0;
-}
-
-int c_double1(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    argt[0] = DCELL_TYPE;
-    argt[1] = DCELL_TYPE;
-
-    return 0;
-}
-
-int c_double12(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argc > 2)
-	return E_ARG_HI;
-
-    argt[0] = DCELL_TYPE;
-    argt[1] = DCELL_TYPE;
-    if (argc == 2)
-	argt[2] = DCELL_TYPE;
-
-    return 0;
-}
-
-int c_unop(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    argt[0] = argt[1];
-
-    return 0;
-}
-
-int c_binop(int argc, int *argt)
-{
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-    if (argt[1] == FCELL_TYPE || argt[2] == FCELL_TYPE)
-	argt[0] = FCELL_TYPE;
-    if (argt[1] == DCELL_TYPE || argt[2] == DCELL_TYPE)
-	argt[0] = DCELL_TYPE;
-
-    argt[1] = argt[0];
-    argt[2] = argt[0];
-
-    return 0;
-}
-
-int c_varop(int argc, int *argt)
-{
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    argt[0] = CELL_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] == FCELL_TYPE)
-	    argt[0] = FCELL_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] == DCELL_TYPE)
-	    argt[0] = DCELL_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	argt[i] = argt[0];
-
-    return 0;
-}
-
-int c_cmpop(int argc, int *argt)
-{
-    int arg_type;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-
-    arg_type = CELL_TYPE;
-    if (argt[1] == FCELL_TYPE || argt[2] == FCELL_TYPE)
-	arg_type = FCELL_TYPE;
-    if (argt[1] == DCELL_TYPE || argt[2] == DCELL_TYPE)
-	arg_type = DCELL_TYPE;
-
-    argt[1] = arg_type;
-    argt[2] = arg_type;
-
-    return 0;
-}
-
-int c_logop(int argc, int *argt)
-{
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != CELL_TYPE)
-	    return E_ARG_TYPE;
-
-    argt[0] = CELL_TYPE;
-
-    return 0;
-}
-
-int c_shiftop(int argc, int *argt)
-{
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    argt[0] = CELL_TYPE;
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/evaluate.c b/raster/r.mapcalc/evaluate.c
index aad44ed..68c0aa6 100644
--- a/raster/r.mapcalc/evaluate.c
+++ b/raster/r.mapcalc/evaluate.c
@@ -13,7 +13,7 @@
 /****************************************************************************/
 
 int current_depth, current_row;
-int depths, rows, columns;
+int depths, rows;
 
 /****************************************************************************/
 
@@ -362,4 +362,34 @@ void execute(expr_list * ee)
     G_unset_error_routine();
 }
 
+void describe_maps(FILE *fp, expr_list *ee)
+{
+    expr_list *l;
+
+    fprintf(fp, "output=");
+
+    for (l = ee; l; l = l->next) {
+	expression *e = l->exp;
+	const char *var;
+
+	if (e->type != expr_type_binding && e->type != expr_type_function)
+	    G_fatal_error("internal error: execute: invalid type: %d",
+			  e->type);
+
+	initialize(e);
+
+	if (e->type != expr_type_binding)
+	    continue;
+
+	var = e->data.bind.var;
+        fprintf(fp, "%s%s", l != ee ? "," : "", var);
+    }
+
+    fprintf(fp, "\n");
+
+    fprintf(fp, "input=");
+    list_maps(fp, ",");
+    fprintf(fp, "\n");
+}
+
 /****************************************************************************/
diff --git a/raster/r.mapcalc/expression.c b/raster/r.mapcalc/expression.c
index a64338f..2592b90 100644
--- a/raster/r.mapcalc/expression.c
+++ b/raster/r.mapcalc/expression.c
@@ -19,9 +19,13 @@ static func_desc *find_func(const char *name)
 {
     int i;
 
-    for (i = 0; func_descs[i].name; i++) {
-	if (strcmp(name, func_descs[i].name) == 0)
-	    return &func_descs[i];
+    for (i = 0; local_func_descs[i].name; i++) {
+	if (strcmp(name, local_func_descs[i].name) == 0)
+	    return &local_func_descs[i];
+    }
+    for (i = 0; calc_func_descs[i].name; i++) {
+	if (strcmp(name, calc_func_descs[i].name) == 0)
+	    return &calc_func_descs[i];
     }
     return NULL;
 }
diff --git a/raster/r.mapcalc/expression.h b/raster/r.mapcalc/expression.h
index 63b27c7..441e2cb 100644
--- a/raster/r.mapcalc/expression.h
+++ b/raster/r.mapcalc/expression.h
@@ -2,18 +2,9 @@
 #ifndef __EXPRESSION_H_
 #define __EXPRESSION_H_
 
-struct expr_list;
-
-typedef int func_t(int argc, const int *argt, void **args);
-typedef int args_t(int argc, int *argt);
+#include <grass/calc.h>
 
-#define E_ARG_LO	1
-#define E_ARG_HI	2
-#define E_ARG_TYPE	3
-#define E_RES_TYPE	4
-#define E_INV_TYPE	5
-#define E_ARG_NUM	6
-#define E_WTF		99
+struct expr_list;
 
 typedef enum expr_t
 {
@@ -85,13 +76,6 @@ typedef struct expr_list
     struct expr_list *next;
 } expr_list;
 
-typedef struct func_desc
-{
-    const char *name;
-    args_t *check_args;
-    func_t *func;
-} func_desc;
-
 extern int list_length(expr_list * l);
 extern void define_variable(expression * e);
 extern char *composite(const char *name, const char *mapset);
@@ -110,14 +94,6 @@ extern expression *operator(const char *name, const char *oper, int prec,
 extern expression *function(const char *name, expr_list * args);
 extern expression *binding(const char *var, expression * val);
 
-extern func_desc func_descs[];
-
-#define IS_NULL_C(x) (Rast_is_c_null_value((x)))
-#define IS_NULL_F(x) (Rast_is_f_null_value((x)))
-#define IS_NULL_D(x) (Rast_is_d_null_value((x)))
-
-#define SET_NULL_C(x) (Rast_set_c_null_value((x),1))
-#define SET_NULL_F(x) (Rast_set_f_null_value((x),1))
-#define SET_NULL_D(x) (Rast_set_d_null_value((x),1))
+extern func_desc local_func_descs[];
 
 #endif /* __EXPRESSION_H_ */
diff --git a/raster/r.mapcalc/func_proto.h b/raster/r.mapcalc/func_proto.h
index 823adf7..631582d 100644
--- a/raster/r.mapcalc/func_proto.h
+++ b/raster/r.mapcalc/func_proto.h
@@ -1,104 +1,12 @@
 
 #include "expression.h"
 
-extern func_t f_add;
-extern func_t f_sub;
-extern func_t f_mul;
-extern func_t f_div;
-extern func_t f_mod;
-extern func_t f_pow;
-extern args_t c_binop;
-
-extern func_t f_neg;
-extern func_t f_abs;
-extern args_t c_unop;
-
-extern func_t f_gt;
-extern func_t f_ge;
-extern func_t f_lt;
-extern func_t f_le;
-extern func_t f_eq;
-extern func_t f_ne;
-extern args_t c_cmpop;
-
-extern func_t f_and;
-extern func_t f_or;
-extern func_t f_and2;
-extern func_t f_or2;
-extern func_t f_bitand;
-extern func_t f_bitor;
-extern func_t f_bitxor;
-extern args_t c_logop;
-
-extern func_t f_shiftl;
-extern func_t f_shiftr;
-extern func_t f_shiftru;
-extern args_t c_shiftop;
-
-extern func_t f_not;
-extern func_t f_bitnot;
-extern args_t c_not;
-
-extern func_t f_sqrt;
-extern func_t f_sin;
-extern func_t f_cos;
-extern func_t f_tan;
-extern func_t f_acos;
-extern func_t f_asin;
-extern args_t c_double1;
-
-extern func_t f_exp;
-extern func_t f_log;
-extern func_t f_atan;
-extern args_t c_double12;
-
-extern func_t f_int;
-extern args_t c_int;
-
-extern func_t f_float;
-extern args_t c_float;
-
-extern func_t f_double;
-extern args_t c_double;
-
-extern func_t f_round;
-extern args_t c_round;
-
-extern func_t f_eval;
-extern args_t c_eval;
-
-extern func_t f_if;
-extern args_t c_if;
-
-extern func_t f_isnull;
-extern args_t c_isnull;
-
-extern func_t f_graph;
-extern func_t f_graph2;
-extern args_t c_graph;
-
-extern func_t f_min;
-extern func_t f_max;
-extern func_t f_nmin;
-extern func_t f_nmax;
-extern args_t c_varop;
-
-extern func_t f_median;
-extern func_t f_nmedian;
-extern args_t c_median;
-
-extern func_t f_mode;
-extern func_t f_nmode;
-extern args_t c_mode;
-
-extern func_t f_rand;
-extern args_t c_binop;
-
-extern func_t f_null;
 extern func_t f_col;
 extern func_t f_row;
 extern func_t f_depth;
-extern args_t c_int0;
+extern func_t f_nrows;
+extern func_t f_ncols;
+extern func_t f_ndepths;
 
 extern func_t f_x;
 extern func_t f_y;
@@ -106,4 +14,3 @@ extern func_t f_z;
 extern func_t f_ewres;
 extern func_t f_nsres;
 extern func_t f_tbres;
-extern args_t c_double0;
diff --git a/raster/r.mapcalc/function.c b/raster/r.mapcalc/function.c
index eb321a5..7f2e7c4 100644
--- a/raster/r.mapcalc/function.c
+++ b/raster/r.mapcalc/function.c
@@ -7,89 +7,22 @@
 #include "expression.h"
 #include "func_proto.h"
 
-func_desc func_descs[] = {
-    {"add", c_varop, f_add},
-    {"sub", c_binop, f_sub},
-    {"mul", c_varop, f_mul},
-    {"div", c_binop, f_div},
-    {"mod", c_binop, f_mod},
-    {"pow", c_binop, f_pow},
-
-    {"neg", c_unop, f_neg},
-    {"abs", c_unop, f_abs},
-
-    {"gt", c_cmpop, f_gt},
-    {"ge", c_cmpop, f_ge},
-    {"lt", c_cmpop, f_lt},
-    {"le", c_cmpop, f_le},
-    {"eq", c_cmpop, f_eq},
-    {"ne", c_cmpop, f_ne},
-
-    {"and", c_logop, f_and},
-    {"or", c_logop, f_or},
-
-    {"and2", c_logop, f_and2},
-    {"or2", c_logop, f_or2},
-
-    {"not", c_not, f_not},
-
-    {"bitand", c_logop, f_bitand},
-    {"bitor", c_logop, f_bitor},
-    {"xor", c_logop, f_bitxor},
-
-    {"shiftl", c_shiftop, f_shiftl},
-    {"shiftr", c_shiftop, f_shiftr},
-    {"shiftru", c_shiftop, f_shiftru},
-
-    {"bitnot", c_not, f_bitnot},
-
-    {"sqrt", c_double1, f_sqrt},
-    {"sin", c_double1, f_sin},
-    {"cos", c_double1, f_cos},
-    {"tan", c_double1, f_tan},
-    {"acos", c_double1, f_acos},
-    {"asin", c_double1, f_asin},
-
-    {"exp", c_double12, f_exp},
-    {"log", c_double12, f_log},
-    {"atan", c_double12, f_atan},
-
-    {"int", c_int, f_int},
-    {"float", c_float, f_float},
-    {"double", c_double, f_double},
-    {"round", c_round, f_round},
-
-    {"eval", c_eval, f_eval},
-    {"if", c_if, f_if},
-    {"isnull", c_isnull, f_isnull},
-
-    {"max", c_varop, f_max},
-    {"min", c_varop, f_min},
-    {"median", c_varop, f_median},
-    {"mode", c_varop, f_mode},
-
-    {"nmax", c_varop, f_nmax},
-    {"nmin", c_varop, f_nmin},
-    {"nmedian", c_varop, f_nmedian},
-    {"nmode", c_varop, f_nmode},
-
-    {"graph", c_graph, f_graph},
-    {"graph2", c_graph, f_graph2},
-
-    {"rand", c_binop, f_rand},
-
-    {"null", c_int0, f_null},
-
+func_desc local_func_descs[] = {
     {"col", c_int0, f_col},
     {"row", c_int0, f_row},
     {"depth", c_int0, f_depth},
+    {"ncols", c_int0, f_ncols},
+    {"nrows", c_int0, f_nrows},
+    {"ndepths", c_int0, f_ndepths},
 
     {"x", c_double0, f_x},
     {"y", c_double0, f_y},
     {"z", c_double0, f_z},
+
     {"ewres", c_double0, f_ewres},
     {"nsres", c_double0, f_nsres},
     {"tbres", c_double0, f_tbres},
+
     {NULL, NULL, NULL}
 };
 
@@ -98,7 +31,9 @@ void print_function_names(void)
     int i;
 
     fprintf(stderr, _("Known functions:"));
-    for (i = 0; func_descs[i].name; i++)
-	fprintf(stderr, "%c%-10s", i % 7 ? ' ' : '\n', func_descs[i].name);
+    for (i = 0; calc_func_descs[i].name; i++)
+	fprintf(stderr, "%c%-10s", i % 7 ? ' ' : '\n', calc_func_descs[i].name);
+    for (i = 0; local_func_descs[i].name; i++)
+	fprintf(stderr, "%c%-10s", i % 7 ? ' ' : '\n', local_func_descs[i].name);
     fprintf(stderr, "\n");
 }
diff --git a/raster/r.mapcalc/globals.h b/raster/r.mapcalc/globals.h
index 575f18a..9db7b91 100644
--- a/raster/r.mapcalc/globals.h
+++ b/raster/r.mapcalc/globals.h
@@ -2,14 +2,11 @@
 #ifndef __GLOBALS_H_
 #define __GLOBALS_H_
 
-extern volatile int floating_point_exception;
-extern volatile int floating_point_exception_occurred;
-extern int overflow_occurred;
 extern int overwrite_flag;
 extern long seed_value;
 extern long seeded;
 
 extern int current_depth, current_row;
-extern int depths, rows, columns;
+extern int depths, rows;
 
 #endif /* __GLOBALS_H_ */
diff --git a/raster/r.mapcalc/main.c b/raster/r.mapcalc/main.c
index fbdb2f8..3b5235e 100644
--- a/raster/r.mapcalc/main.c
+++ b/raster/r.mapcalc/main.c
@@ -14,7 +14,6 @@
  *****************************************************************************/
 
 #include <unistd.h>
-#include <signal.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -25,12 +24,8 @@
 
 /****************************************************************************/
 
-int overflow_occurred;
 int overwrite_flag;
 
-volatile int floating_point_exception;
-volatile int floating_point_exception_occurred;
-
 long seed_value;
 long seeded;
 
@@ -40,47 +35,6 @@ static expr_list *result;
 
 /****************************************************************************/
 
-static RETSIGTYPE handle_fpe(int n)
-{
-    floating_point_exception = 1;
-    floating_point_exception_occurred = 1;
-}
-
-static void pre_exec(void)
-{
-#ifndef __MINGW32__
-#ifdef SIGFPE
-    struct sigaction act;
-
-    act.sa_handler = &handle_fpe;
-    act.sa_flags = 0;
-    sigemptyset(&act.sa_mask);
-
-    sigaction(SIGFPE, &act, NULL);
-#endif
-#endif
-
-    floating_point_exception_occurred = 0;
-    overflow_occurred = 0;
-}
-
-static void post_exec(void)
-{
-#ifndef __MINGW32__
-#ifdef SIGFPE
-    struct sigaction act;
-
-    act.sa_handler = SIG_DFL;
-    act.sa_flags = 0;
-    sigemptyset(&act.sa_mask);
-
-    sigaction(SIGFPE, &act, NULL);
-#endif
-#endif
-}
-
-/****************************************************************************/
-
 static expr_list *parse_file(const char *filename)
 {
     expr_list *res;
@@ -106,7 +60,7 @@ int main(int argc, char **argv)
 {
     struct GModule *module;
     struct Option *expr, *file, *seed;
-    struct Flag *random;
+    struct Flag *random, *describe;
     int all_ok;
 
     G_gisinit(argv[0]);
@@ -140,6 +94,10 @@ int main(int argc, char **argv)
     random->key = 's';
     random->description = _("Generate random seed (result is non-deterministic)");
 
+    describe = G_define_flag();
+    describe->key = 'l';
+    describe->description = _("List input and output maps");
+
     if (argc == 1)
     {
 	char **p = G_malloc(3 * sizeof(char *));
@@ -186,6 +144,11 @@ int main(int argc, char **argv)
 	G_debug(3, "Generated random seed (-s): %ld", seed_value);
     }
 
+    if (describe->answer) {
+        describe_maps(stdout, result);
+        return EXIT_SUCCESS;
+    }
+
     pre_exec();
     execute(result);
     post_exec();
@@ -197,11 +160,6 @@ int main(int argc, char **argv)
 	all_ok = 0;
     }
 
-    if (overflow_occurred) {
-	G_warning(_("Overflow occurred in the calculation"));
-	all_ok = 0;
-    }
-
     return all_ok ? EXIT_SUCCESS : EXIT_FAILURE;
 }
 
diff --git a/raster/r.mapcalc/map.c b/raster/r.mapcalc/map.c
index 5a4a342..35325ac 100644
--- a/raster/r.mapcalc/map.c
+++ b/raster/r.mapcalc/map.c
@@ -14,6 +14,7 @@
 #include <grass/raster.h>
 #include <grass/btree.h>
 #include <grass/glocale.h>
+#include <grass/calc.h>
 
 #include "mapcalc.h"
 #include "globals.h"
@@ -29,6 +30,7 @@ void setup_region(void)
 
     rows = Rast_window_rows();
     columns = Rast_window_cols();
+    calc_init(columns);
     depths = 1;
 }
 
@@ -651,6 +653,16 @@ void close_maps(void)
 #endif
 }
 
+void list_maps(FILE *fp, const char *sep)
+{
+    int i;
+
+    for (i = 0; i < num_maps; i++) {
+        const struct map *m = &maps[i];
+        fprintf(fp, "%s%s@%s", i ? sep : "", m->name, m->mapset);
+    }
+}
+
 /****************************************************************************/
 
 int check_output_map(const char *name)
diff --git a/raster/r.mapcalc/map3.c b/raster/r.mapcalc/map3.c
index bc1f0b3..776948e 100644
--- a/raster/r.mapcalc/map3.c
+++ b/raster/r.mapcalc/map3.c
@@ -10,6 +10,7 @@
 #include <grass/raster3d.h>
 #include <grass/btree.h>
 #include <grass/glocale.h>
+#include <grass/calc.h>
 
 #include "mapcalc.h"
 #include "globals.h"
@@ -27,6 +28,7 @@ void setup_region(void)
     rows = current_region3.rows;
     columns = current_region3.cols;
     depths = current_region3.depths;
+    calc_init(columns);
 }
 
 /****************************************************************************/
@@ -525,7 +527,7 @@ void setup_maps(void)
      * avoid that several threads access a single map for reading
      * at the same time. The raster3d library is not thread safe.
      * */
-    putenv("WORKERS=1");
+    putenv("WORKERS=0");
 
     for (i = 0; i < num_maps; i++)
 	setup_map(&maps[i]);
@@ -575,6 +577,16 @@ void close_maps(void)
     num_maps = 0;
 }
 
+void list_maps(FILE *fp, const char *sep)
+{
+    int i;
+
+    for (i = 0; i < num_maps; i++) {
+        const struct map *m = &maps[i];
+        fprintf(fp, "%s%s@%s", i ? sep : "", m->name, m->mapset);
+    }
+}
+
 /****************************************************************************/
 
 int check_output_map(const char *name)
diff --git a/raster/r.mapcalc/mapcalc.h b/raster/r.mapcalc/mapcalc.h
index e61fca6..7016f08 100644
--- a/raster/r.mapcalc/mapcalc.h
+++ b/raster/r.mapcalc/mapcalc.h
@@ -38,6 +38,7 @@ extern char *format_expression(const expression *);
 /* evaluate.c */
 
 extern void execute(expr_list *);
+extern void describe_maps(FILE *, expr_list *);
 
 /* map.c/map3.c */
 
@@ -49,6 +50,7 @@ extern void setup_maps(void);
 extern void get_map_row(int idx, int mod, int depth, int row, int col,
 			void *buf, int res_type);
 extern void close_maps(void);
+extern void list_maps(FILE *, const char *);
 
 extern int check_output_map(const char *name);
 extern int open_output_map(const char *name, int res_type);
diff --git a/raster/r.mapcalc/r.mapcalc.html b/raster/r.mapcalc/r.mapcalc.html
index 230143b..d9a0900 100644
--- a/raster/r.mapcalc/r.mapcalc.html
+++ b/raster/r.mapcalc/r.mapcalc.html
@@ -331,12 +331,14 @@ xor(x,y)                exclusive-or (XOR) of x and y                   I
 
 <div class="code"><pre>
 Internal variables:
- row()                  current row of moving window
- col()                  current col of moving window
- x()                    current x-coordinate of moving window
- y()                    current y-coordinate of moving window
- ewres()                current east-west resolution
- nsres()                current north-south resolution
+ row()                  current row of moving window                    I
+ col()                  current col of moving window                    I
+ nrows()                number of rows in computation region            I
+ ncols()                number of columns in computation region         I
+ x()                    current x-coordinate of moving window           F
+ y()                    current y-coordinate of moving window           F
+ ewres()                current east-west resolution                    F
+ nsres()                current north-south resolution                  F
  null()                 NULL value
 </pre></div>
 Note, that the row() and col() indexing starts with 1.
@@ -774,4 +776,4 @@ Research Laboratory
 <p>Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-06-02 01:10:45 +0200 (Thu, 02 Jun 2016) $</i>
+<i>Last changed: $Date: 2016-06-01 20:15:17 +0200 (Wed, 01 Jun 2016) $</i>
diff --git a/raster/r.mapcalc/r3.mapcalc.html b/raster/r.mapcalc/r3.mapcalc.html
index 97fd611..a1650f9 100644
--- a/raster/r.mapcalc/r3.mapcalc.html
+++ b/raster/r.mapcalc/r3.mapcalc.html
@@ -241,15 +241,18 @@ xor(x,y)                exclusive-or (XOR) of x and y                   I
 
 <div class="code"><pre>
 Internal variables:
- row()                  current row of moving window
- col()                  current col of moving window
- depth()                return current depth
- x()                    current x-coordinate of moving window
- y()                    current y-coordinate of moving window
- z()                    return current z value
- ewres()                current east-west resolution
- nsres()                current north-south resolution
- tbres()                current top-bottom resolution
+ row()                  current row of moving window                    I
+ col()                  current col of moving window                    I
+ depth()                return current depth                            I
+ nrows()                number of rows in computation region            I
+ ncols()                number of columns in computation region         I
+ ndepths()              number of depth levels in computation region    I
+ x()                    current x-coordinate of moving window           F
+ y()                    current y-coordinate of moving window           F
+ z()                    return current z value                          F
+ ewres()                current east-west resolution                    F
+ nsres()                current north-south resolution                  F
+ tbres()                current top-bottom resolution                   F
  null()                 NULL value
 </pre></div>
 Note, that the row(), col() and depth() indexing starts with 1. 
@@ -619,4 +622,4 @@ Tomas Paudits & Jaro Hofierka, funded by GeoModel s.r.o., Slovakia
 <p>Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-04-18 00:00:57 +0200 (Mon, 18 Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-17 23:59:51 +0200 (Sun, 17 Apr 2016) $</i>
diff --git a/raster/r.mapcalc/testsuite/test_r3_mapcalc.py b/raster/r.mapcalc/testsuite/test_r3_mapcalc.py
index aa77c42..bd7a945 100644
--- a/raster/r.mapcalc/testsuite/test_r3_mapcalc.py
+++ b/raster/r.mapcalc/testsuite/test_r3_mapcalc.py
@@ -1,10 +1,11 @@
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
 
 # TODO: add more expressions
 # TODO: add tests with prepared data
 
-class TestBasicOperations(grass.gunittest.TestCase):
+class TestBasicOperations(TestCase):
 
     # TODO: replace by unified handing of maps
     to_remove = []
@@ -50,7 +51,15 @@ class TestBasicOperations(grass.gunittest.TestCase):
             expression='diff_e_e = 3 * x() * y() * z() - 3 * x() * y() * z()')
         self.to_remove.append('diff_e_e')
         self.assertRaster3dMinMax('diff_e_e', refmin=0, refmax=0)
+    
+    def test_nrows_ncols_ndepths_sum(self):
+        """Test if sum of nrows, ncols and ndepths matches one
+        expected from current region settigs"""
+        self.assertModule('r3.mapcalc',
+            expression='nrows_ncols_ndepths_sum = nrows() + ncols() + ndepths()')
+        self.to_remove.append('nrows_ncols_ndepths_sum')
+        self.assertRasterMinMax('nrows_ncols_ndepths_sum', refmin=2160, refmax=2160)
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/raster/r.mapcalc/testsuite/test_r_mapcalc.py b/raster/r.mapcalc/testsuite/test_r_mapcalc.py
index 9a1d940..53fa58d 100644
--- a/raster/r.mapcalc/testsuite/test_r_mapcalc.py
+++ b/raster/r.mapcalc/testsuite/test_r_mapcalc.py
@@ -1,4 +1,5 @@
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import SimpleModule
 
 cell_seed_500 = """\
@@ -8,16 +9,16 @@ east: 25
 west: 15
 rows: 10
 cols: 10
-2 12 183 135 117 176 138 117 182 40
-157 70 195 1 30 125 122 74 108 104
-163 146 82 164 67 63 60 3 147 193
-151 173 144 173 128 77 141 6 144 193
-180 56 14 121 124 107 46 107 90 60
-177 57 12 104 178 13 167 104 163 187
-55 133 27 114 195 60 78 35 49 11
-55 138 25 105 32 58 47 18 139 32
-24 74 36 71 131 124 87 161 160 154
-136 45 48 146 9 182 69 12 35 19
+121 12 183 55 37 96 138 117 182 40 
+157 70 115 1 149 125 42 193 108 24 
+83 66 82 84 186 182 179 122 67 113 
+151 93 144 173 128 196 61 125 64 193 
+180 175 14 41 44 27 165 27 90 60 
+97 57 12 104 98 13 87 24 83 107 
+174 133 146 114 115 60 78 154 49 130 
+55 138 144 25 32 58 47 137 139 32 
+143 193 155 190 131 124 87 81 160 154 
+56 45 48 66 9 182 69 12 154 19 
 """
 
 dcell_seed_600 = """\
@@ -59,7 +60,7 @@ cols: 10
 """
 
 
-class TestRandFunction(grass.gunittest.TestCase):
+class TestRandFunction(TestCase):
 
     # TODO: replace by unified handing of maps
     to_remove = []
@@ -164,7 +165,7 @@ class TestRandFunction(grass.gunittest.TestCase):
 # TODO: add more expressions
 # TODO: add tests with prepared data
 
-class TestBasicOperations(grass.gunittest.TestCase):
+class TestBasicOperations(TestCase):
 
     # TODO: replace by unified handing of maps
     to_remove = []
@@ -217,7 +218,15 @@ class TestBasicOperations(grass.gunittest.TestCase):
             expression='diff_e_e = 3 * x() * y() - 3 * x() * y()')
         self.to_remove.append('diff_e_e')
         self.assertRasterMinMax('diff_e_e', refmin=0, refmax=0)
+    
+    def test_nrows_ncols_sum(self):
+        """Test if sum of nrows and ncols matches one
+        expected from current region settigs"""
+        self.assertModule('r.mapcalc',
+            expression='nrows_ncols_sum = nrows() + ncols()')
+        self.to_remove.append('nrows_ncols_sum')
+        self.assertRasterMinMax('nrows_ncols_sum', refmin=20, refmax=20)
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/raster/r.mapcalc/xabs.c b/raster/r.mapcalc/xabs.c
deleted file mode 100644
index c2fa1f1..0000000
--- a/raster/r.mapcalc/xabs.c
+++ /dev/null
@@ -1,69 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-abs(x)
-
-   absolute value. if x is negative returns -x
-**********************************************************************/
-
-int f_abs(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != argt[1])
-	return E_RES_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_C(&arg1[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] < 0 ? -arg1[i]
-			: arg1[i];
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_F(&arg1[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = (FCELL) fabs(arg1[i]);
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_D(&arg1[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = fabs(arg1[i]);
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xacos.c b/raster/r.mapcalc/xacos.c
deleted file mode 100644
index ec90aa2..0000000
--- a/raster/r.mapcalc/xacos.c
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#include <stdlib.h>
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-acos(x)  [0 and PI]
-
-  if floating point exception occurs during the evaluation of acos(x)
-  the result is NULL
-
-  note: result is in degrees
-**********************************************************************/
-
-#define RADIANS_TO_DEGREES (180.0 / M_PI)
-
-int f_acos(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = RADIANS_TO_DEGREES * acos(arg1[i]);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xadd.c b/raster/r.mapcalc/xadd.c
deleted file mode 100644
index a695a20..0000000
--- a/raster/r.mapcalc/xadd.c
+++ /dev/null
@@ -1,78 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-add(a,b,c,...) = a + b + c + ...
-****************************************************************/
-
-int f_add(int argc, const int *argt, void **args)
-{
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argz = (CELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		res[i] = 0;
-		for (j = 1; j <= argc; j++) {
-		    if (IS_NULL_C(&argz[j][i])) {
-			SET_NULL_C(&res[i]);
-			break;
-		    }
-		    res[i] += argz[j][i];
-		}
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argz = (FCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		res[i] = 0;
-		for (j = 1; j <= argc; j++) {
-		    if (IS_NULL_F(&argz[j][i])) {
-			SET_NULL_F(&res[i]);
-			break;
-		    }
-		    res[i] += argz[j][i];
-		}
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argz = (DCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		res[i] = 0;
-		for (j = 1; j <= argc; j++) {
-		    if (IS_NULL_D(&argz[j][i])) {
-			SET_NULL_D(&res[i]);
-			break;
-		    }
-		    res[i] += argz[j][i];
-		}
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xand.c b/raster/r.mapcalc/xand.c
deleted file mode 100644
index 1bf1b17..0000000
--- a/raster/r.mapcalc/xand.c
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-and(a,b,c,...) = a && b && c && ...
-****************************************************************/
-
-int f_and(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL **argz = (CELL **) args;
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != CELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = 1;
-	for (j = 1; j <= argc; j++) {
-	    if (IS_NULL_C(&argz[j][i])) {
-		SET_NULL_C(&res[i]);
-		break;
-	    }
-	    if (!argz[j][i])
-		res[i] = 0;
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xand2.c b/raster/r.mapcalc/xand2.c
deleted file mode 100644
index e2abff0..0000000
--- a/raster/r.mapcalc/xand2.c
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-and2(a,b,c,...) = a && b && c && ...
-
-Differs from and() in that the boolean axioms:
-
-	false && x == false
-	x && false == false
-
-hold even when x is null.
-****************************************************************/
-
-int f_and2(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL **argz = (CELL **) args;
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != CELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = 1;
-	for (j = 1; j <= argc; j++) {
-	    if (!IS_NULL_C(&argz[j][i]) && !argz[j][i]) {
-		res[i] = 0;
-		break;
-	    }
-	    if (IS_NULL_C(&argz[j][i]))
-		SET_NULL_C(&res[i]);
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xasin.c b/raster/r.mapcalc/xasin.c
deleted file mode 100644
index 99ca212..0000000
--- a/raster/r.mapcalc/xasin.c
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#include <stdlib.h>
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-asin(x)  range [-90,90]
-
-  if floating point exception occurs during the evaluation of asin(x)
-  the result is NULL
-
-  note: result is in degrees
-**********************************************************************/
-
-#define RADIANS_TO_DEGREES (180.0 / M_PI)
-
-int f_asin(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = RADIANS_TO_DEGREES * asin(arg1[i]);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xatan.c b/raster/r.mapcalc/xatan.c
deleted file mode 100644
index ed99624..0000000
--- a/raster/r.mapcalc/xatan.c
+++ /dev/null
@@ -1,66 +0,0 @@
-
-#include <stdlib.h>
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-atan(x)     range [-90,90]
-atan(x,y) = atan(y/x) range[0,360]
-
-  if floating point exception occurs during the evaluation of atan(x)
-  the result is NULL
-
-  note: result is in degrees
-**********************************************************************/
-
-#define RADIANS_TO_DEGREES (180.0 / M_PI)
-
-int f_atan(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    DCELL *arg2;
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argc > 1 && argt[2] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    arg2 = (argc > 1) ? args[2] : NULL;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else if (argc > 1 && IS_NULL_D(&arg2[i]))
-	    SET_NULL_D(&res[i]);
-
-	else {
-	    floating_point_exception = 0;
-	    if (argc == 1)
-		res[i] = RADIANS_TO_DEGREES * atan(arg1[i]);
-	    else {
-		res[i] = RADIANS_TO_DEGREES * atan2(arg2[i], arg1[i]);
-		if (res[i] < 0)
-		    res[i] += 360.0;
-	    }
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xbitand.c b/raster/r.mapcalc/xbitand.c
deleted file mode 100644
index f61845c..0000000
--- a/raster/r.mapcalc/xbitand.c
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-bitand(a,b,c,...) = a & b & c & ...
-****************************************************************/
-
-int f_bitand(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL **argz = (CELL **) args;
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != CELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = ~0;
-	for (j = 1; j <= argc; j++) {
-	    if (IS_NULL_C(&argz[j][i])) {
-		SET_NULL_C(&res[i]);
-		break;
-	    }
-	    res[i] &= argz[j][i];
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xbitnot.c b/raster/r.mapcalc/xbitnot.c
deleted file mode 100644
index 551f74b..0000000
--- a/raster/r.mapcalc/xbitnot.c
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-bitnot(a) = ~a
-****************************************************************/
-
-int f_bitnot(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	if (IS_NULL_C(&arg1[i]))
-	    SET_NULL_C(&res[i]);
-	else
-	    res[i] = ~arg1[i];
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xbitor.c b/raster/r.mapcalc/xbitor.c
deleted file mode 100644
index 61ee234..0000000
--- a/raster/r.mapcalc/xbitor.c
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-bitor(a,b,c,...) = a | b | c | ...
-****************************************************************/
-
-int f_bitor(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL **argz = (CELL **) args;
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != CELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = 0;
-	for (j = 1; j <= argc; j++) {
-	    if (IS_NULL_C(&argz[j][i])) {
-		SET_NULL_C(&res[i]);
-		break;
-	    }
-	    res[i] |= argz[j][i];
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xbitxor.c b/raster/r.mapcalc/xbitxor.c
deleted file mode 100644
index 0bf33d8..0000000
--- a/raster/r.mapcalc/xbitxor.c
+++ /dev/null
@@ -1,40 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-bitxor(a,b,c,...) = a ^ b ^ c ^ ...
-****************************************************************/
-
-int f_bitxor(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL **argz = (CELL **) args;
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != CELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = 0;
-	for (j = 1; j <= argc; j++) {
-	    if (IS_NULL_C(&argz[j][i])) {
-		SET_NULL_C(&res[i]);
-		break;
-	    }
-	    res[i] ^= argz[j][i];
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xcos.c b/raster/r.mapcalc/xcos.c
deleted file mode 100644
index 938ee36..0000000
--- a/raster/r.mapcalc/xcos.c
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-cos(x) 
-
-  if floating point exception occurs during the evaluation of cos(x)
-  the result is NULL
-
-  note: x is in degrees.
-**********************************************************************/
-
-#define DEGREES_TO_RADIANS (M_PI / 180.0)
-
-int f_cos(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = cos(arg1[i] * DEGREES_TO_RADIANS);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xdiv.c b/raster/r.mapcalc/xdiv.c
deleted file mode 100644
index 02a9729..0000000
--- a/raster/r.mapcalc/xdiv.c
+++ /dev/null
@@ -1,81 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-div(a,b) = a / b
-****************************************************************/
-
-int f_div(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != argt[0] || argt[2] != argt[0])
-	return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]) ||
-		    arg2[i] == 0)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] / arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]) ||
-		    arg2[i] == 0.0f)
-		    SET_NULL_F(&res[i]);
-		else {
-		    floating_point_exception = 0;
-		    res[i] = arg1[i] / arg2[i];
-		    if (floating_point_exception)
-			SET_NULL_F(&res[i]);
-		}
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]) ||
-		    arg2[i] == 0.0)
-		    SET_NULL_D(&res[i]);
-		else {
-		    floating_point_exception = 0;
-		    res[i] = arg1[i] / arg2[i];
-		    if (floating_point_exception)
-			SET_NULL_D(&res[i]);
-		}
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xdouble.c b/raster/r.mapcalc/xdouble.c
deleted file mode 100644
index 0b8cc62..0000000
--- a/raster/r.mapcalc/xdouble.c
+++ /dev/null
@@ -1,78 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-double(x)
-  converts x to double
-**********************************************************************/
-
-int f_double(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_C(&arg1[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = (DCELL) arg1[i];
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_F(&arg1[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = (DCELL) arg1[i];
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_D(&arg1[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = (DCELL) arg1[i];
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
-
-int c_double(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    argt[0] = DCELL_TYPE;
-    /*      argt[1] = argt[1];      */
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xeq.c b/raster/r.mapcalc/xeq.c
deleted file mode 100644
index b344d50..0000000
--- a/raster/r.mapcalc/xeq.c
+++ /dev/null
@@ -1,72 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-eq(a,b) = a == b
-****************************************************************/
-
-int f_eq(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 2; i <= argc; i++)
-	if (argt[i] != argt[1])
-	    return E_ARG_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] == arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] == arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] == arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xeval.c b/raster/r.mapcalc/xeval.c
deleted file mode 100644
index 6ee1234..0000000
--- a/raster/r.mapcalc/xeval.c
+++ /dev/null
@@ -1,75 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-eval(..,..,..,x) = x
-
-   return last argument
-**********************************************************************/
-
-int f_eval(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != argt[argc])
-	return E_RES_TYPE;
-
-    switch (argt[argc]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[argc];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_C(&arg1[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i];
-
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[argc];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_F(&arg1[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg1[i];
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[argc];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_D(&arg1[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg1[i];
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
-
-int c_eval(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-
-    argt[0] = argt[argc];
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xexp.c b/raster/r.mapcalc/xexp.c
deleted file mode 100644
index fb68333..0000000
--- a/raster/r.mapcalc/xexp.c
+++ /dev/null
@@ -1,55 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-exp(x)   computes e raised to power x
-exp(x,y) computes x raised to power y
-
-  if floating point exception occurs during the evaluation of exp(x)
-  or exp(x,y) the result is NULL
-**********************************************************************/
-
-int f_exp(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    DCELL *arg2;
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    arg2 = (argc > 1) ? args[2] : NULL;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else if (argc > 1 && IS_NULL_D(&arg2[i]))
-	    SET_NULL_D(&res[i]);
-	else if (argc > 1 && arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = (argc > 1)
-		? pow(arg1[i], arg2[i])
-		: exp(arg1[i]);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xfloat.c b/raster/r.mapcalc/xfloat.c
deleted file mode 100644
index c337d14..0000000
--- a/raster/r.mapcalc/xfloat.c
+++ /dev/null
@@ -1,78 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-float(x)
-  converts x to float
-**********************************************************************/
-
-int f_float(int argc, const int *argt, void **args)
-{
-    FCELL *res = args[0];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != FCELL_TYPE)
-	return E_RES_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_C(&arg1[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = (FCELL) arg1[i];
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_F(&arg1[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = (FCELL) arg1[i];
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_D(&arg1[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = (FCELL) arg1[i];
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
-
-int c_float(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    argt[0] = FCELL_TYPE;
-    /*      argt[1] = argt[1];      */
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xge.c b/raster/r.mapcalc/xge.c
deleted file mode 100644
index d0da97c..0000000
--- a/raster/r.mapcalc/xge.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-ge(a,b) = a >= b
-****************************************************************/
-
-int f_ge(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] >= arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] >= arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] >= arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xgraph.c b/raster/r.mapcalc/xgraph.c
deleted file mode 100644
index 22e5477..0000000
--- a/raster/r.mapcalc/xgraph.c
+++ /dev/null
@@ -1,180 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-graph(x, x1,y1, x2,y2, ... xn,yn)  returns y value based on graph
-described by the x,y pairs.
-****************************************************************/
-
-int c_graph(int argc, int *argt)
-{
-    int i;
-
-    if (argc < 3)
-	return E_ARG_LO;
-
-    if (argc % 2 == 0)
-	return E_ARG_NUM;
-
-    for (i = 0; i <= argc; i++)
-	argt[i] = DCELL_TYPE;
-
-    return 0;
-}
-
-int f_graph(int argc, const int *argt, void **args)
-{
-    DCELL **argz = (DCELL **) args;
-    DCELL *res = argz[0];
-    int n = (argc - 1) / 2;
-    int i, j;
-
-    if (argc < 3)
-	return E_ARG_LO;
-
-    if (argc % 2 == 0)
-	return E_ARG_NUM;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != DCELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-#define X(j) (argz[2 + 2 * (j) + 0][i])
-#define Y(j) (argz[2 + 2 * (j) + 1][i])
-#define x (argz[1][i])
-
-	if (IS_NULL_D(&x))
-	    goto null;
-
-	for (j = 0; j < n; j++)
-	    if (IS_NULL_D(&X(j)))
-		goto null;
-
-	for (j = 0; j < n - 1; j++)
-	    if (X(j + 1) <= X(j))
-		goto null;
-
-	if (x <= X(0)) {
-	    if (IS_NULL_D(&Y(0)))
-		goto null;
-	    res[i] = Y(0);
-	    continue;
-	}
-
-	if (x >= X(n - 1)) {
-	    if (IS_NULL_D(&Y(n - 1)))
-		goto null;
-	    res[i] = Y(n - 1);
-	    continue;
-	}
-
-	for (j = 0; j < n - 1; j++) {
-	    if (x > X(j + 1))
-		continue;
-
-	    if (IS_NULL_D(&Y(j)) || IS_NULL_D(&Y(j + 1)))
-		goto null;
-
-	    res[i] =
-		Y(j) + (x - X(j)) * (Y(j + 1) - Y(j)) / (X(j + 1) - X(j));
-
-	    break;
-	}
-#undef X
-#undef Y
-#undef x
-
-	continue;
-
-      null:
-	SET_NULL_D(&res[i]);
-    }
-
-    return 0;
-}
-
-int f_graph2(int argc, const int *argt, void **args)
-{
-    DCELL **argz = (DCELL **) args;
-    DCELL *res = argz[0];
-    int n = (argc - 1) / 2;
-    int i, j;
-
-    if (argc < 3)
-	return E_ARG_LO;
-
-    if (argc % 2 == 0)
-	return E_ARG_NUM;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != DCELL_TYPE)
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-#define X(j) (argz[2 + (j) + 0][i])
-#define Y(j) (argz[2 + (j) + n][i])
-#define x (argz[1][i])
-
-	if (IS_NULL_D(&x))
-	    goto null;
-
-	for (j = 0; j < n; j++)
-	    if (IS_NULL_D(&X(j)))
-		goto null;
-
-	for (j = 0; j < n - 1; j++)
-	    if (X(j + 1) <= X(j))
-		goto null;
-
-	if (x <= X(0)) {
-	    if (IS_NULL_D(&Y(0)))
-		goto null;
-	    res[i] = Y(0);
-	    continue;
-	}
-
-	if (x >= X(n - 1)) {
-	    if (IS_NULL_D(&Y(n - 1)))
-		goto null;
-	    res[i] = Y(n - 1);
-	    continue;
-	}
-
-	for (j = 0; j < n - 1; j++) {
-	    if (x > X(j + 1))
-		continue;
-
-	    if (IS_NULL_D(&Y(j)) || IS_NULL_D(&Y(j + 1)))
-		goto null;
-
-	    res[i] =
-		Y(j) + (x - X(j)) * (Y(j + 1) - Y(j)) / (X(j + 1) - X(j));
-
-	    break;
-	}
-#undef X
-#undef Y
-#undef x
-
-	continue;
-
-      null:
-	SET_NULL_D(&res[i]);
-    }
-
-    return 0;
-}
-
diff --git a/raster/r.mapcalc/xgt.c b/raster/r.mapcalc/xgt.c
deleted file mode 100644
index 6e2835c..0000000
--- a/raster/r.mapcalc/xgt.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-gt(a,b) = a > b
-****************************************************************/
-
-int f_gt(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] > arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] > arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] > arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xif.c b/raster/r.mapcalc/xif.c
deleted file mode 100644
index 8a380e3..0000000
--- a/raster/r.mapcalc/xif.c
+++ /dev/null
@@ -1,305 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/********************************************************************
- if(a)        1,0,1  1 if a is non zero, 0 otherwise
- if(a,b)      b,0,b  b if a is non zero, 0 otherwise
- if(a,b,c)    b,c,b  b if a is non zero, c otherwise
- if(a,b,c,d)  d,c,b  b if a is positive, c if a is zero, d if a is negative
-********************************************************************/
-
-static int f_if_i(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    DCELL *arg1 = args[1];
-    CELL *arg2 = (argc >= 2) ? args[2] : NULL;
-    CELL *arg3 = (argc >= 3) ? args[3] : NULL;
-    CELL *arg4 = (argc >= 4) ? args[4] : NULL;
-    int i;
-
-    switch (argc) {
-    case 0:
-	return E_ARG_LO;
-    case 1:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_C(&res[i]);
-	    else
-		res[i] = arg1[i] != 0.0 ? 1 : 0;
-	break;
-    case 2:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_C(&res[i]);
-	    else if (arg1[i] == 0.0)
-		res[i] = 0;
-	    else {
-		if (IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	break;
-    case 3:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_C(&res[i]);
-	    else if (arg1[i] == 0.0) {
-		if (IS_NULL_C(&arg3[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg3[i];
-	    }
-	    else {
-		if (IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	break;
-    case 4:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_C(&res[i]);
-	    else if (arg1[i] == 0.0) {
-		if (IS_NULL_C(&arg3[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg3[i];
-	    }
-	    else if (arg1[i] > 0.0) {
-		if (IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	    else {		/* (arg1[i] < 0.0) */
-
-		if (IS_NULL_C(&arg4[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg4[i];
-	    }
-	break;
-    default:
-	return E_ARG_HI;
-    }
-
-    return 0;
-}
-
-static int f_if_f(int argc, const int *argt, void **args)
-{
-    FCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    FCELL *arg2 = (argc >= 2) ? args[2] : NULL;
-    FCELL *arg3 = (argc >= 3) ? args[3] : NULL;
-    FCELL *arg4 = (argc >= 4) ? args[4] : NULL;
-    int i;
-
-    switch (argc) {
-    case 0:
-	return E_ARG_LO;
-    case 1:
-	return E_ARG_TYPE;
-    case 2:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_F(&res[i]);
-	    else if (arg1[i] == 0.0)
-		res[i] = 0.0;
-	    else {
-		if (IS_NULL_F(&arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	break;
-    case 3:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_F(&res[i]);
-	    else if (arg1[i] == 0.0) {
-		if (IS_NULL_F(&arg3[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg3[i];
-	    }
-	    else {
-		if (IS_NULL_F(&arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	break;
-    case 4:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_F(&res[i]);
-	    else if (arg1[i] == 0.0) {
-		if (IS_NULL_F(&arg3[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg3[i];
-	    }
-	    else if (arg1[i] > 0.0) {
-		if (IS_NULL_F(&arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	    else {		/* (arg1[i] < 0.0) */
-
-		if (IS_NULL_F(&arg4[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg4[i];
-	    }
-	break;
-    default:
-	return E_ARG_HI;
-    }
-
-    return 0;
-}
-
-static int f_if_d(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    DCELL *arg2 = (argc >= 2) ? args[2] : NULL;
-    DCELL *arg3 = (argc >= 3) ? args[3] : NULL;
-    DCELL *arg4 = (argc >= 4) ? args[4] : NULL;
-    int i;
-
-    switch (argc) {
-    case 0:
-	return E_ARG_LO;
-    case 1:
-	return E_ARG_TYPE;
-    case 2:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_D(&res[i]);
-	    else if (arg1[i] == 0.0)
-		res[i] = 0.0;
-	    else {
-		if (IS_NULL_D(&arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	break;
-    case 3:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_D(&res[i]);
-	    else if (arg1[i] == 0.0) {
-		if (IS_NULL_D(&arg3[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg3[i];
-	    }
-	    else {
-		if (IS_NULL_D(&arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	break;
-    case 4:
-	for (i = 0; i < columns; i++)
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_D(&res[i]);
-	    else if (arg1[i] == 0.0) {
-		if (IS_NULL_D(&arg3[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg3[i];
-	    }
-	    else if (arg1[i] > 0.0) {
-		if (IS_NULL_D(&arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg2[i];
-	    }
-	    else {		/* (arg1[i] < 0.0) */
-
-		if (IS_NULL_D(&arg4[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg4[i];
-	    }
-	break;
-    default:
-	return E_ARG_HI;
-    }
-
-    return 0;
-}
-
-int f_if(int argc, const int *argt, void **args)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 4)
-	return E_ARG_HI;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-    if (argc >= 2 && argt[2] != argt[0])
-	return E_ARG_TYPE;
-    if (argc >= 3 && argt[3] != argt[0])
-	return E_ARG_TYPE;
-    if (argc >= 4 && argt[4] != argt[0])
-	return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	return f_if_i(argc, argt, args);
-    case FCELL_TYPE:
-	return f_if_f(argc, argt, args);
-    case DCELL_TYPE:
-	return f_if_d(argc, argt, args);
-    default:
-	return E_INV_TYPE;
-    }
-}
-
-int c_if(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 4)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-
-    if (argc >= 2 && argt[2] == FCELL_TYPE)
-	argt[0] = FCELL_TYPE;
-    if (argc >= 3 && argt[3] == FCELL_TYPE)
-	argt[0] = FCELL_TYPE;
-    if (argc >= 4 && argt[4] == FCELL_TYPE)
-	argt[0] = FCELL_TYPE;
-
-    if (argc >= 2 && argt[2] == DCELL_TYPE)
-	argt[0] = DCELL_TYPE;
-    if (argc >= 3 && argt[3] == DCELL_TYPE)
-	argt[0] = DCELL_TYPE;
-    if (argc >= 4 && argt[4] == DCELL_TYPE)
-	argt[0] = DCELL_TYPE;
-
-    argt[1] = DCELL_TYPE;
-    if (argc >= 2)
-	argt[2] = argt[0];
-    if (argc >= 3)
-	argt[3] = argt[0];
-    if (argc >= 4)
-	argt[4] = argt[0];
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xint.c b/raster/r.mapcalc/xint.c
deleted file mode 100644
index 112b2d0..0000000
--- a/raster/r.mapcalc/xint.c
+++ /dev/null
@@ -1,78 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-int(x)
-  converts x to int
-**********************************************************************/
-
-int f_int(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_C(&arg1[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = (CELL) arg1[i];
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_F(&arg1[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = (CELL) arg1[i];
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_D(&arg1[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = (CELL) arg1[i];
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
-
-int c_int(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-    /*      argt[1] = argt[1];      */
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xisnull.c b/raster/r.mapcalc/xisnull.c
deleted file mode 100644
index fe6b791..0000000
--- a/raster/r.mapcalc/xisnull.c
+++ /dev/null
@@ -1,66 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-isnull(x)
-  return 1 if x is null, 0 otherwise
-**********************************************************************/
-
-int f_isnull(int argc, const int *argt, void **args)
-{
-    int *res = args[0];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		res[i] = IS_NULL_C(&arg1[i]) ? 1 : 0;
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		res[i] = IS_NULL_F(&arg1[i]) ? 1 : 0;
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		res[i] = IS_NULL_D(&arg1[i]) ? 1 : 0;
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
-
-int c_isnull(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xle.c b/raster/r.mapcalc/xle.c
deleted file mode 100644
index 1710855..0000000
--- a/raster/r.mapcalc/xle.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-le(a,b) = a <= b
-****************************************************************/
-
-int f_le(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] <= arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] <= arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] <= arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xlog.c b/raster/r.mapcalc/xlog.c
deleted file mode 100644
index 6682709..0000000
--- a/raster/r.mapcalc/xlog.c
+++ /dev/null
@@ -1,61 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-log(x) 
-log(x,b)
-
-  first form computes the natural log of x = ln(x)
-  second form computes log of x base b = ln(x)/ln(b)
-
-  if x is non-positive, or floating point exception occurs while
-  computing ln(x), the result is NULL
-
-  if b is non-positive, or 1.0, or floating point exception occurs while
-  computing ln(b), the result is NULL
-**********************************************************************/
-
-int f_log(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    DCELL *arg2 = (argc >= 2) ? args[2] : (DCELL *) 0;
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argc > 1 && argt[2] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]) || (arg1[i] <= 0.0))
-	    SET_NULL_D(&res[i]);
-	else if (argc > 1 && (IS_NULL_D(&arg2[i]) || (arg2[i] <= 0.0)))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = (argc > 1)
-		? log(arg1[i]) / log(arg2[i])
-		: log(arg1[i]);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xlt.c b/raster/r.mapcalc/xlt.c
deleted file mode 100644
index 94279e0..0000000
--- a/raster/r.mapcalc/xlt.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-lt(a,b) = a < b
-****************************************************************/
-
-int f_lt(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] < arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] < arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] < arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xmax.c b/raster/r.mapcalc/xmax.c
deleted file mode 100644
index ee92d67..0000000
--- a/raster/r.mapcalc/xmax.c
+++ /dev/null
@@ -1,100 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-max(x0,x1,...,xn) returns maximum value
-****************************************************************/
-
-int f_max(int argc, const int *argt, void **args)
-{
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argz = (CELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 0;
-		CELL max;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_C(&argz[j][i]))
-			nul = 1;
-		    else if (j == 1)
-			max = argz[j][i];
-		    else if (max < argz[j][i])
-			max = argz[j][i];
-		if (nul)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = max;
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argz = (FCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 0;
-		FCELL max;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_F(&argz[j][i]))
-			nul = 1;
-		    else if (j == 1)
-			max = argz[j][i];
-		    else if (max < argz[j][i])
-			max = argz[j][i];
-		if (nul)
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = max;
-	    }
-
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argz = (DCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 0;
-		DCELL max;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_D(&argz[j][i]))
-			nul = 1;
-		    else if (j == 1)
-			max = argz[j][i];
-		    else if (max < argz[j][i])
-			max = argz[j][i];
-		if (nul)
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = max;
-	    }
-
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xmedian.c b/raster/r.mapcalc/xmedian.c
deleted file mode 100644
index a0cf1c9..0000000
--- a/raster/r.mapcalc/xmedian.c
+++ /dev/null
@@ -1,155 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-median(x1,x2,..,xn)
-   return median of arguments
-**********************************************************************/
-
-static int icmp(const void *aa, const void *bb)
-{
-    const CELL *a = aa;
-    const CELL *b = bb;
-
-    return *a - *b;
-}
-
-static int fcmp(const void *aa, const void *bb)
-{
-    const FCELL *a = aa;
-    const FCELL *b = bb;
-
-    if (*a < *b)
-	return -1;
-    if (*a > *b)
-	return 1;
-    return 0;
-}
-
-static int dcmp(const void *aa, const void *bb)
-{
-    const DCELL *a = aa;
-    const DCELL *b = bb;
-
-    if (*a < *b)
-	return -1;
-    if (*a > *b)
-	return 1;
-    return 0;
-}
-
-int f_median(int argc, const int *argt, void **args)
-{
-    static void *array;
-    static int alloc;
-    int size = argc * Rast_cell_size(argt[0]);
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    if (size > alloc) {
-	alloc = size;
-	array = G_realloc(array, size);
-    }
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argv = (CELL **) &args[1];
-	    CELL *a = array;
-	    CELL *a1 = &a[(argc - 1) / 2];
-	    CELL *a2 = &a[argc / 2];
-
-	    for (i = 0; i < columns; i++) {
-		int nv = 0;
-
-		for (j = 0; j < argc && !nv; j++) {
-		    if (IS_NULL_C(&argv[j][i]))
-			nv = 1;
-		    else
-			a[j] = argv[j][i];
-		}
-
-		if (nv)
-		    SET_NULL_C(&res[i]);
-		else {
-		    qsort(a, argc, sizeof(CELL), icmp);
-		    res[i] = (*a1 + *a2) / 2;
-		}
-	    }
-
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argv = (FCELL **) &args[1];
-	    FCELL *a = array;
-	    FCELL *a1 = &a[(argc - 1) / 2];
-	    FCELL *a2 = &a[argc / 2];
-
-	    for (i = 0; i < columns; i++) {
-		int nv = 0;
-
-		for (j = 0; j < argc && !nv; j++) {
-		    if (IS_NULL_F(&argv[j][i]))
-			nv = 1;
-		    else
-			a[j] = argv[j][i];
-		}
-
-		if (nv)
-		    SET_NULL_F(&res[i]);
-		else {
-		    qsort(a, argc, sizeof(FCELL), fcmp);
-		    res[i] = (*a1 + *a2) / 2;
-		}
-	    }
-
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argv = (DCELL **) &args[1];
-	    DCELL *a = array;
-	    DCELL *a1 = &a[(argc - 1) / 2];
-	    DCELL *a2 = &a[argc / 2];
-
-	    for (i = 0; i < columns; i++) {
-		int nv = 0;
-
-		for (j = 0; j < argc && !nv; j++) {
-		    if (IS_NULL_D(&argv[j][i]))
-			nv = 1;
-		    else
-			a[j] = argv[j][i];
-		}
-
-		if (nv)
-		    SET_NULL_D(&res[i]);
-		else {
-		    qsort(a, argc, sizeof(DCELL), dcmp);
-		    res[i] = (*a1 + *a2) / 2;
-		}
-	    }
-
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xmin.c b/raster/r.mapcalc/xmin.c
deleted file mode 100644
index c3ed21b..0000000
--- a/raster/r.mapcalc/xmin.c
+++ /dev/null
@@ -1,100 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-min(x0,x1,...,xn) returns minimum value
-****************************************************************/
-
-int f_min(int argc, const int *argt, void **args)
-{
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argz = (CELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 0;
-		CELL min;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_C(&argz[j][i]))
-			nul = 1;
-		    else if (j == 1)
-			min = argz[j][i];
-		    else if (min > argz[j][i])
-			min = argz[j][i];
-		if (nul)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = min;
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argz = (FCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 0;
-		FCELL min;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_F(&argz[j][i]))
-			nul = 1;
-		    else if (j == 1)
-			min = argz[j][i];
-		    else if (min > argz[j][i])
-			min = argz[j][i];
-		if (nul)
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = min;
-	    }
-
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argz = (DCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 0;
-		DCELL min;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_D(&argz[j][i]))
-			nul = 1;
-		    else if (j == 1)
-			min = argz[j][i];
-		    else if (min > argz[j][i])
-			min = argz[j][i];
-		if (nul)
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = min;
-	    }
-
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xmod.c b/raster/r.mapcalc/xmod.c
deleted file mode 100644
index 8fc7a04..0000000
--- a/raster/r.mapcalc/xmod.c
+++ /dev/null
@@ -1,80 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-mod(a,b) = a % b
-****************************************************************/
-
-int f_mod(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != argt[0] || argt[2] != argt[0])
-	return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] % arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else {
-		    floating_point_exception = 0;
-		    res[i] = (FCELL) fmod(arg1[i], arg2[i]);
-		    if (floating_point_exception)
-			SET_NULL_F(&res[i]);
-		}
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else {
-		    floating_point_exception = 0;
-		    res[i] = (DCELL) fmod(arg1[i], arg2[i]);
-		    if (floating_point_exception)
-			SET_NULL_D(&res[i]);
-		}
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xmode.c b/raster/r.mapcalc/xmode.c
deleted file mode 100644
index 3eff62f..0000000
--- a/raster/r.mapcalc/xmode.c
+++ /dev/null
@@ -1,144 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-mode(x1,x2,..,xn)
-   return mode of arguments
-**********************************************************************/
-
-static int dcmp(const void *aa, const void *bb)
-{
-    const double *a = aa;
-    const double *b = bb;
-
-    if (*a < *b)
-	return -1;
-    if (*a > *b)
-	return 1;
-    return 0;
-}
-
-static double mode(double *value, int argc)
-{
-    double mode_v;
-    int mode_n = 0;
-    int i;
-
-    qsort(value, argc, sizeof(double), dcmp);
-
-    for (i = 0; i < argc;) {
-	int n = 1;
-	double v = value[i];
-
-	for (i++; i < argc; i++) {
-	    if (value[i] != v)
-		break;
-	    n++;
-	}
-
-	if (n < mode_n)
-	    continue;
-
-	mode_v = v;
-	mode_n = n;
-    }
-
-    return mode_v;
-}
-
-int f_mode(int argc, const int *argt, void **args)
-{
-    static double *value;
-    static int value_size;
-    int size = argc * sizeof(double);
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    if (size > value_size) {
-	value_size = size;
-	value = G_realloc(value, value_size);
-    }
-
-    switch (argt[argc]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argv = (CELL **) & args[1];
-
-	    for (i = 0; i < columns; i++) {
-		int nv = 0;
-
-		for (j = 0; j < argc && !nv; j++) {
-		    if (IS_NULL_C(&argv[j][i]))
-			nv = 1;
-		    else
-			value[j] = (double)argv[j][i];
-		}
-
-		if (nv)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = (CELL) mode(value, argc);
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argv = (FCELL **) & args[1];
-
-	    for (i = 0; i < columns; i++) {
-		int nv = 0;
-
-		for (j = 0; j < argc && !nv; j++) {
-		    if (IS_NULL_F(&argv[j][i]))
-			nv = 1;
-		    else
-			value[j] = (double)argv[j][i];
-		}
-
-		if (nv)
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = (FCELL) mode(value, argc);
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argv = (DCELL **) & args[1];
-
-	    for (i = 0; i < columns; i++) {
-		int nv = 0;
-
-		for (j = 0; j < argc && !nv; j++) {
-		    if (IS_NULL_D(&argv[j][i]))
-			nv = 1;
-		    else
-			value[j] = (double)argv[j][i];
-		}
-
-		if (nv)
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = (DCELL) mode(value, argc);
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xmul.c b/raster/r.mapcalc/xmul.c
deleted file mode 100644
index 7e45f86..0000000
--- a/raster/r.mapcalc/xmul.c
+++ /dev/null
@@ -1,78 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-mul(a,b) = a * b
-****************************************************************/
-
-int f_mul(int argc, const int *argt, void **args)
-{
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argz = (CELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		res[i] = 1;
-		for (j = 1; j <= argc; j++) {
-		    if (IS_NULL_C(&argz[j][i])) {
-			SET_NULL_C(&res[i]);
-			break;
-		    }
-		    res[i] *= argz[j][i];
-		}
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argz = (FCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		res[i] = 1;
-		for (j = 1; j <= argc; j++) {
-		    if (IS_NULL_F(&argz[j][i])) {
-			SET_NULL_F(&res[i]);
-			break;
-		    }
-		    res[i] *= argz[j][i];
-		}
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argz = (DCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		res[i] = 1;
-		for (j = 1; j <= argc; j++) {
-		    if (IS_NULL_D(&argz[j][i])) {
-			SET_NULL_D(&res[i]);
-			break;
-		    }
-		    res[i] *= argz[j][i];
-		}
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xne.c b/raster/r.mapcalc/xne.c
deleted file mode 100644
index cf88c39..0000000
--- a/raster/r.mapcalc/xne.c
+++ /dev/null
@@ -1,65 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-ne(a,b) = a != b
-****************************************************************/
-
-int f_ne(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] != arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] != arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] != arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xneg.c b/raster/r.mapcalc/xneg.c
deleted file mode 100644
index c08c36e..0000000
--- a/raster/r.mapcalc/xneg.c
+++ /dev/null
@@ -1,64 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-neg(x) = -x
-**********************************************************************/
-
-int f_neg(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != argt[1])
-	return E_RES_TYPE;
-
-    switch (argt[1]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_C(&arg1[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = -arg1[i];
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_F(&arg1[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = -arg1[i];
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-
-	    for (i = 0; i < columns; i++)
-		if (IS_NULL_D(&arg1[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = -arg1[i];
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xnmax.c b/raster/r.mapcalc/xnmax.c
deleted file mode 100644
index e1ea05f..0000000
--- a/raster/r.mapcalc/xnmax.c
+++ /dev/null
@@ -1,100 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-max(x0,x1,...,xn) returns maximum value
-****************************************************************/
-
-int f_nmax(int argc, const int *argt, void **args)
-{
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argz = (CELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 1;
-		CELL max;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_C(&argz[j][i]))
-			continue;
-		    else if (nul)
-			max = argz[j][i], nul = 0;
-		    else if (max < argz[j][i])
-			max = argz[j][i], nul = 0;
-		if (nul)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = max;
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argz = (FCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 1;
-		FCELL max;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_F(&argz[j][i]))
-			continue;
-		    else if (nul)
-			max = argz[j][i], nul = 0;
-		    else if (max < argz[j][i])
-			max = argz[j][i], nul = 0;
-		if (nul)
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = max;
-	    }
-
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argz = (DCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 1;
-		DCELL max;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_D(&argz[j][i]))
-			continue;
-		    else if (nul)
-			max = argz[j][i], nul = 0;
-		    else if (max < argz[j][i])
-			max = argz[j][i], nul = 0;
-		if (nul)
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = max;
-	    }
-
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xnmedian.c b/raster/r.mapcalc/xnmedian.c
deleted file mode 100644
index e4bafbf..0000000
--- a/raster/r.mapcalc/xnmedian.c
+++ /dev/null
@@ -1,152 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-median(x1,x2,..,xn)
-   return median of arguments
-**********************************************************************/
-
-static int icmp(const void *aa, const void *bb)
-{
-    const CELL *a = aa;
-    const CELL *b = bb;
-
-    return *a - *b;
-}
-
-static int fcmp(const void *aa, const void *bb)
-{
-    const FCELL *a = aa;
-    const FCELL *b = bb;
-
-    if (*a < *b)
-	return -1;
-    if (*a > *b)
-	return 1;
-    return 0;
-}
-
-static int dcmp(const void *aa, const void *bb)
-{
-    const DCELL *a = aa;
-    const DCELL *b = bb;
-
-    if (*a < *b)
-	return -1;
-    if (*a > *b)
-	return 1;
-    return 0;
-}
-
-int f_nmedian(int argc, const int *argt, void **args)
-{
-    static void *array;
-    static int alloc;
-    int size = argc * Rast_cell_size(argt[0]);
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    if (size > alloc) {
-	alloc = size;
-	array = G_realloc(array, size);
-    }
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argv = (CELL **) &args[1];
-	    CELL *a = array;
-	    CELL *a1 = &a[(argc - 1) / 2];
-	    CELL *a2 = &a[argc / 2];
-
-	    for (i = 0; i < columns; i++) {
-		int n = 0;
-
-		for (j = 0; j < argc; j++) {
-		    if (IS_NULL_C(&argv[j][i]))
-			continue;
-		    a[n++] = argv[j][i];
-		}
-
-		if (!n)
-		    SET_NULL_C(&res[i]);
-		else {
-		    qsort(a, n, sizeof(CELL), icmp);
-		    res[i] = (*a1 + *a2) / 2;
-		}
-	    }
-
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argv = (FCELL **) &args[1];
-	    FCELL *a = array;
-	    FCELL *a1 = &a[(argc - 1) / 2];
-	    FCELL *a2 = &a[argc / 2];
-
-	    for (i = 0; i < columns; i++) {
-		int n = 0;
-
-		for (j = 0; j < argc; j++) {
-		    if (IS_NULL_F(&argv[j][i]))
-			continue;
-		    a[n++] = argv[j][i];
-		}
-
-		if (!n)
-		    SET_NULL_F(&res[i]);
-		else {
-		    qsort(a, n, sizeof(FCELL), fcmp);
-		    res[i] = (*a1 + *a2) / 2;
-		}
-	    }
-
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argv = (DCELL **) &args[1];
-	    DCELL *a = array;
-	    DCELL *a1 = &a[(argc - 1) / 2];
-	    DCELL *a2 = &a[argc / 2];
-
-	    for (i = 0; i < columns; i++) {
-		int n = 0;
-
-		for (j = 0; j < argc; j++) {
-		    if (IS_NULL_D(&argv[j][i]))
-			continue;
-		    a[n++] = argv[j][i];
-		}
-
-		if (!n)
-		    SET_NULL_D(&res[i]);
-		else {
-		    qsort(a, n, sizeof(DCELL), dcmp);
-		    res[i] = (*a1 + *a2) / 2;
-		}
-	    }
-
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xnmin.c b/raster/r.mapcalc/xnmin.c
deleted file mode 100644
index 5396256..0000000
--- a/raster/r.mapcalc/xnmin.c
+++ /dev/null
@@ -1,100 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-min(x0,x1,...,xn) returns minimum value
-****************************************************************/
-
-int f_nmin(int argc, const int *argt, void **args)
-{
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argz = (CELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 1;
-		CELL min;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_C(&argz[j][i]))
-			continue;
-		    else if (nul)
-			min = argz[j][i], nul = 0;
-		    else if (min > argz[j][i])
-			min = argz[j][i], nul = 0;
-		if (nul)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = min;
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argz = (FCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 1;
-		FCELL min;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_F(&argz[j][i]))
-			continue;
-		    else if (nul)
-			min = argz[j][i], nul = 0;
-		    else if (min > argz[j][i])
-			min = argz[j][i], nul = 0;
-		if (nul)
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = min;
-	    }
-
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argz = (DCELL **) args;
-
-	    for (i = 0; i < columns; i++) {
-		int nul = 1;
-		DCELL min;
-
-		for (j = 1; j <= argc; j++)
-		    if (IS_NULL_D(&argz[j][i]))
-			continue;
-		    else if (nul)
-			min = argz[j][i], nul = 0;
-		    else if (min > argz[j][i])
-			min = argz[j][i], nul = 0;
-		if (nul)
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = min;
-	    }
-
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xnmode.c b/raster/r.mapcalc/xnmode.c
deleted file mode 100644
index 7ac36cb..0000000
--- a/raster/r.mapcalc/xnmode.c
+++ /dev/null
@@ -1,141 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-mode(x1,x2,..,xn)
-   return mode of arguments
-**********************************************************************/
-
-static int dcmp(const void *aa, const void *bb)
-{
-    const double *a = aa;
-    const double *b = bb;
-
-    if (*a < *b)
-	return -1;
-    if (*a > *b)
-	return 1;
-    return 0;
-}
-
-static double mode(double *value, int argc)
-{
-    double mode_v;
-    int mode_n = 0;
-    int i;
-
-    qsort(value, argc, sizeof(double), dcmp);
-
-    for (i = 0; i < argc;) {
-	int n = 1;
-	double v = value[i];
-
-	for (i++; i < argc; i++) {
-	    if (value[i] != v)
-		break;
-	    n++;
-	}
-
-	if (n < mode_n)
-	    continue;
-
-	mode_v = v;
-	mode_n = n;
-    }
-
-    return mode_v;
-}
-
-int f_nmode(int argc, const int *argt, void **args)
-{
-    static double *value;
-    static int value_size;
-    int size = argc * sizeof(double);
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    if (size > value_size) {
-	value_size = size;
-	value = G_realloc(value, value_size);
-    }
-
-    switch (argt[argc]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL **argv = (CELL **) & args[1];
-
-	    for (i = 0; i < columns; i++) {
-		int n = 0;
-
-		for (j = 0; j < argc; j++) {
-		    if (IS_NULL_C(&argv[j][i]))
-			continue;
-		    value[n++] = (double)argv[j][i];
-		}
-
-		if (!n)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = (CELL) mode(value, n);
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL **argv = (FCELL **) & args[1];
-
-	    for (i = 0; i < columns; i++) {
-		int n = 0;
-
-		for (j = 0; j < argc; j++) {
-		    if (IS_NULL_F(&argv[j][i]))
-			continue;
-		    value[n++] = (double)argv[j][i];
-		}
-
-		if (!n)
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = (FCELL) mode(value, n);
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL **argv = (DCELL **) & args[1];
-
-	    for (i = 0; i < columns; i++) {
-		int n = 0;
-
-		for (j = 0; j < argc; j++) {
-		    if (IS_NULL_D(&argv[j][i]))
-			continue;
-		    value[n++] = (double)argv[j][i];
-		}
-
-		if (!n)
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = (DCELL) mode(value, n);
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xnot.c b/raster/r.mapcalc/xnot.c
deleted file mode 100644
index 31c6b1a..0000000
--- a/raster/r.mapcalc/xnot.c
+++ /dev/null
@@ -1,52 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-not(a) = !a
-****************************************************************/
-
-int f_not(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	if (IS_NULL_C(&arg1[i]))
-	    SET_NULL_C(&res[i]);
-	else
-	    res[i] = !arg1[i];
-    }
-
-    return 0;
-}
-
-int c_not(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    argt[0] = CELL_TYPE;
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xnull.c b/raster/r.mapcalc/xnull.c
deleted file mode 100644
index b01c95e..0000000
--- a/raster/r.mapcalc/xnull.c
+++ /dev/null
@@ -1,27 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-null() null values
-****************************************************************/
-
-int f_null(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i;
-
-    if (argc > 0)
-	return E_ARG_HI;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 0; i < columns; i++)
-	SET_NULL_C(&res[i]);
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xor.c b/raster/r.mapcalc/xor.c
deleted file mode 100644
index aea8b8b..0000000
--- a/raster/r.mapcalc/xor.c
+++ /dev/null
@@ -1,41 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-or(a,b,c,...) = a || b || c || ...
-****************************************************************/
-
-int f_or(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = 0;
-	for (j = 1; j <= argc; j++) {
-	    CELL *arg = args[j];
-	    if (IS_NULL_C(&arg[i])) {
-		SET_NULL_C(&res[i]);
-		break;
-	    }
-	    if (arg[i])
-		res[i] = 1;
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xor2.c b/raster/r.mapcalc/xor2.c
deleted file mode 100644
index d6b0590..0000000
--- a/raster/r.mapcalc/xor2.c
+++ /dev/null
@@ -1,48 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-or2(a,b,c,...) = a || b || c || ...
-
-Differs from or() in that the boolean axioms:
-
-	true || x == true
-	x || true == true
-
-hold even when x is null.
-****************************************************************/
-
-int f_or2(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    int i, j;
-
-    if (argc < 1)
-	return E_ARG_LO;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 1; i <= argc; i++)
-	if (argt[i] != argt[0])
-	    return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	res[i] = 0;
-	for (j = 1; j <= argc; j++) {
-	    CELL *arg = args[j];
-	    if (!IS_NULL_C(&arg[i]) && arg[i]) {
-		res[i] = 1;
-		break;
-	    }
-	    if (IS_NULL_C(&arg[i]))
-		SET_NULL_C(&res[i]);
-	}
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xpow.c b/raster/r.mapcalc/xpow.c
deleted file mode 100644
index c8ccebc..0000000
--- a/raster/r.mapcalc/xpow.c
+++ /dev/null
@@ -1,98 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-pow(a,b)
-   a raised to the power b
-****************************************************************/
-
-static int ipow(int x, int y)
-{
-    int res = 1;
-
-    while (y) {
-	if (y & 1)
-	    res *= x;
-	y >>= 1;
-	x *= x;
-    }
-    return res;
-}
-
-int f_pow(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != argt[0] || argt[2] != argt[0])
-	return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]) || arg2[i] < 0)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = ipow(arg1[i], arg2[i]);
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else if (arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else {
-		    floating_point_exception = 0;
-		    res[i] = pow(arg1[i], arg2[i]);
-		    if (floating_point_exception)
-			SET_NULL_F(&res[i]);
-		}
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else if (arg1[i] < 0 && arg2[i] != ceil(arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else {
-		    floating_point_exception = 0;
-		    res[i] = pow(arg1[i], arg2[i]);
-		    if (floating_point_exception)
-			SET_NULL_D(&res[i]);
-		}
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xrand.c b/raster/r.mapcalc/xrand.c
deleted file mode 100644
index aa56f7d..0000000
--- a/raster/r.mapcalc/xrand.c
+++ /dev/null
@@ -1,91 +0,0 @@
-
-#include <stdlib.h>
-
-#include <grass/config.h>
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-rand(lo,hi) random values between a and b
-****************************************************************/
-
-int f_rand(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		unsigned int x = (unsigned int)G_mrand48();
-		int lo = arg1[i];
-		int hi = arg2[i];
-
-		if (lo > hi) {
-		    int tmp = lo;
-
-		    lo = hi;
-		    hi = tmp;
-		}
-		res[i] = (lo == hi) ? lo : lo + x % (unsigned int)(hi - lo);
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		double x = G_drand48();
-		FCELL lo = arg1[i];
-		FCELL hi = arg2[i];
-
-		if (lo > hi) {
-		    FCELL tmp = lo;
-
-		    lo = hi;
-		    hi = tmp;
-		}
-		res[i] = (FCELL) (lo + x * (hi - lo));
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		double x = G_drand48();
-		DCELL lo = arg1[i];
-		DCELL hi = arg2[i];
-
-		if (lo > hi) {
-		    DCELL tmp = lo;
-
-		    lo = hi;
-		    hi = tmp;
-		}
-		res[i] = lo + x * (hi - lo);
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xround.c b/raster/r.mapcalc/xround.c
deleted file mode 100644
index 8641b64..0000000
--- a/raster/r.mapcalc/xround.c
+++ /dev/null
@@ -1,205 +0,0 @@
-
-#include <limits.h>
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-round(x, step, start)
-
-  rounds x to nearest value in the sequence
-    y[i] = i * step + start
-
-**********************************************************************/
-
-/* i_round(x) rounds x to nearest value, handles negative correctly */
-
-static double i_round(double x, double step, double start)
-{
-    x -= start;
-    x /= step;
-    x = floor(x + 0.5);
-    x *= step;
-    x += start;
-    return x;
-}
-
-/**********************************************************************/
-
-int f_round(int argc, const int *argt, void **args)
-{
-    const DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 3)
-	return E_ARG_HI;
-
-    if (argc == 1 && argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-    if (argc > 1 && argt[2] != DCELL_TYPE)
-	return E_ARG_TYPE;
-    if (argc > 2 && argt[3] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argc == 1) {
-	CELL *res = args[0];
-
-	for (i = 0; i < columns; i++) {
-	    if (IS_NULL_D(&arg1[i]))
-		SET_NULL_C(&res[i]);
-	    else {
-		DCELL x = i_round(arg1[i], 1.0, 0.0);
-		if (x > 2147483647.0 || x < -2147483647.0)
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = (CELL) x;
-	    }
-	}
-	return 0;
-    }
-    else if (argc == 2) {
-	const DCELL *arg2 = args[2];
-
-	switch (argt[0]) {
-        case CELL_TYPE:
-            {
-                CELL *res = args[0];
-    
-                for (i = 0; i < columns; i++) {
-                    if (IS_NULL_D(&arg1[i]))
-                        SET_NULL_C(&res[i]);
-                    else if (IS_NULL_D(&arg2[i]))
-                        SET_NULL_C(&res[i]);
-                    else {
-                        DCELL x = i_round(arg1[i], arg2[i], 0.0);
-                        if (x > 2147483647.0 || x < -2147483647.0)
-                            SET_NULL_C(&res[i]);
-                        else
-                            res[i] = (CELL) x;
-                    }
-                }
-                return 0;
-            }
-        case FCELL_TYPE:
-            {
-                FCELL *res = args[0];
-    
-                for (i = 0; i < columns; i++)
-                    if (IS_NULL_D(&arg1[i]))
-                        SET_NULL_F(&res[i]);
-                    else if (IS_NULL_D(&arg2[i]))
-                        SET_NULL_F(&res[i]);
-                    else
-                        res[i] = (FCELL) i_round(arg1[i], arg2[i], 0.0);
-                return 0;
-            }
-        case DCELL_TYPE:
-            {
-                DCELL *res = args[0];
-    
-                for (i = 0; i < columns; i++)
-                    if (IS_NULL_D(&arg1[i]))
-                        SET_NULL_D(&res[i]);
-                    else if (IS_NULL_D(&arg2[i]))
-                        SET_NULL_D(&res[i]);
-                    else
-                        res[i] = (DCELL) i_round(arg1[i], arg2[i], 0.0);
-                return 0;
-            }
-        default:
-            return E_INV_TYPE;
-        }
-    }
-    else if (argc == 3) {
-	const DCELL *arg2 = args[2];
-	const DCELL *arg3 = args[3];
-
-	switch (argt[0]) {
-        case CELL_TYPE:
-            {
-                CELL *res = args[0];
-    
-                for (i = 0; i < columns; i++) {
-                    if (IS_NULL_D(&arg1[i]))
-                        SET_NULL_C(&res[i]);
-                    else if (IS_NULL_D(&arg2[i]))
-                        SET_NULL_C(&res[i]);
-                    else if (IS_NULL_D(&arg3[i]))
-                        SET_NULL_C(&res[i]);
-                    else {
-                        DCELL x = i_round(arg1[i], arg2[i], arg3[i]);
-                        if (x > 2147483647.0 || x < -2147483647.0)
-                            SET_NULL_C(&res[i]);
-                        else
-                            res[i] = (CELL) x;
-                    }
-                }
-                return 0;
-            }
-        case FCELL_TYPE:
-            {
-                FCELL *res = args[0];
-    
-                for (i = 0; i < columns; i++)
-                    if (IS_NULL_D(&arg1[i]))
-                        SET_NULL_F(&res[i]);
-                    else if (IS_NULL_D(&arg2[i]))
-                        SET_NULL_F(&res[i]);
-                    else if (IS_NULL_D(&arg3[i]))
-                        SET_NULL_F(&res[i]);
-                    else
-                        res[i] = (FCELL) i_round(arg1[i], arg2[i], arg3[i]);
-                return 0;
-            }
-        case DCELL_TYPE:
-            {
-                DCELL *res = args[0];
-    
-                for (i = 0; i < columns; i++)
-                    if (IS_NULL_D(&arg1[i]))
-                        SET_NULL_D(&res[i]);
-                    else if (IS_NULL_D(&arg2[i]))
-                        SET_NULL_D(&res[i]);
-                    else if (IS_NULL_D(&arg3[i]))
-                        SET_NULL_D(&res[i]);
-                    else
-                        res[i] = (DCELL) i_round(arg1[i], arg2[i], arg3[i]);
-                return 0;
-            }
-        default:
-            return E_INV_TYPE;
-        }
-    }
-    else
-	return E_WTF;
-}
-
-int c_round(int argc, int *argt)
-{
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 3)
-	return E_ARG_HI;
-
-    argt[0] = CELL_TYPE;
-    if (argc > 1 && argt[0] < argt[2])
-	argt[0] = argt[2];
-    if (argc > 2 && argt[0] < argt[3])
-	argt[0] = argt[3];
-
-    argt[1] = DCELL_TYPE;
-    if (argc > 1)
-	argt[2] = DCELL_TYPE;
-    if (argc > 2)
-	argt[3] = DCELL_TYPE;
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xrowcol.c b/raster/r.mapcalc/xrowcol.c
index c81daa8..2ac8d0e 100644
--- a/raster/r.mapcalc/xrowcol.c
+++ b/raster/r.mapcalc/xrowcol.c
@@ -9,6 +9,9 @@
 col() column number
 row() row number
 depth() depth number
+ncols() number of columns
+nrows() number of rows
+ndepths() number of depths
 **********************************************************************/
 
 int f_col(int argc, const int *argt, void **args)
@@ -63,3 +66,54 @@ int f_depth(int argc, const int *argt, void **args)
 
     return 0;
 }
+
+int f_nrows(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc > 0)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++)
+	res[i] = rows;
+
+    return 0;
+}
+
+int f_ncols(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc > 0)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++)
+	res[i] = columns;
+
+    return 0;
+}
+
+int f_ndepths(int argc, const int *argt, void **args)
+{
+    CELL *res = args[0];
+    int i;
+
+    if (argc > 0)
+	return E_ARG_HI;
+
+    if (argt[0] != CELL_TYPE)
+	return E_RES_TYPE;
+
+    for (i = 0; i < columns; i++)
+	res[i] = depths;
+
+    return 0;
+}
diff --git a/raster/r.mapcalc/xshiftl.c b/raster/r.mapcalc/xshiftl.c
deleted file mode 100644
index 9d4a4f1..0000000
--- a/raster/r.mapcalc/xshiftl.c
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-shiftl(a,b) = a << b
-****************************************************************/
-
-int f_shiftl(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL *arg1 = args[1];
-    CELL *arg2 = args[2];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-	    SET_NULL_C(&res[i]);
-	else
-	    res[i] = arg1[i] << arg2[i];
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xshiftr.c b/raster/r.mapcalc/xshiftr.c
deleted file mode 100644
index 5aa62f4..0000000
--- a/raster/r.mapcalc/xshiftr.c
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-shiftr(a,b) = a >> b
-****************************************************************/
-
-int f_shiftr(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL *arg1 = args[1];
-    CELL *arg2 = args[2];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-	    SET_NULL_C(&res[i]);
-	else
-	    res[i] = arg1[i] >> arg2[i];
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xshiftru.c b/raster/r.mapcalc/xshiftru.c
deleted file mode 100644
index c12afbb..0000000
--- a/raster/r.mapcalc/xshiftru.c
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-shiftru(a,b) = (unsigned) a >> b
-****************************************************************/
-
-int f_shiftru(int argc, const int *argt, void **args)
-{
-    CELL *res = args[0];
-    CELL *arg1 = args[1];
-    CELL *arg2 = args[2];
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != CELL_TYPE || argt[2] != CELL_TYPE)
-	return E_ARG_TYPE;
-
-    if (argt[0] != CELL_TYPE)
-	return E_RES_TYPE;
-
-    for (i = 0; i < columns; i++) {
-	if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-	    SET_NULL_C(&res[i]);
-	else
-	    res[i] = ((unsigned int)arg1[i]) >> arg2[i];
-    }
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xsin.c b/raster/r.mapcalc/xsin.c
deleted file mode 100644
index bfeee10..0000000
--- a/raster/r.mapcalc/xsin.c
+++ /dev/null
@@ -1,49 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-sin(x) 
-
-  if floating point exception occurs during the evaluation of sin(x)
-  the result is NULL
-
-  note: x is in degrees.
-**********************************************************************/
-
-#define DEGREES_TO_RADIANS (M_PI / 180.0)
-
-int f_sin(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = sin(arg1[i] * DEGREES_TO_RADIANS);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xsqrt.c b/raster/r.mapcalc/xsqrt.c
deleted file mode 100644
index 5c2e20e..0000000
--- a/raster/r.mapcalc/xsqrt.c
+++ /dev/null
@@ -1,45 +0,0 @@
-
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-sqrt(x) 
-
-  if floating point exception occurs during the evaluation of sqrt(x)
-  the result is NULL
-**********************************************************************/
-
-int f_sqrt(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]) || (arg1[i] < 0.0))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = sqrt(arg1[i]);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mapcalc/xsub.c b/raster/r.mapcalc/xsub.c
deleted file mode 100644
index b704eff..0000000
--- a/raster/r.mapcalc/xsub.c
+++ /dev/null
@@ -1,70 +0,0 @@
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/****************************************************************
-sub(a,b) = a - b
-****************************************************************/
-
-int f_sub(int argc, const int *argt, void **args)
-{
-    int i;
-
-    if (argc < 2)
-	return E_ARG_LO;
-    if (argc > 2)
-	return E_ARG_HI;
-
-    if (argt[1] != argt[0] || argt[2] != argt[0])
-	return E_ARG_TYPE;
-
-    switch (argt[0]) {
-    case CELL_TYPE:
-	{
-	    CELL *res = args[0];
-	    CELL *arg1 = args[1];
-	    CELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_C(&arg1[i]) || IS_NULL_C(&arg2[i]))
-		    SET_NULL_C(&res[i]);
-		else
-		    res[i] = arg1[i] - arg2[i];
-	    }
-	    return 0;
-	}
-    case FCELL_TYPE:
-	{
-	    FCELL *res = args[0];
-	    FCELL *arg1 = args[1];
-	    FCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_F(&arg1[i]) || IS_NULL_F(&arg2[i]))
-		    SET_NULL_F(&res[i]);
-		else
-		    res[i] = arg1[i] - arg2[i];
-	    }
-	    return 0;
-	}
-    case DCELL_TYPE:
-	{
-	    DCELL *res = args[0];
-	    DCELL *arg1 = args[1];
-	    DCELL *arg2 = args[2];
-
-	    for (i = 0; i < columns; i++) {
-		if (IS_NULL_D(&arg1[i]) || IS_NULL_D(&arg2[i]))
-		    SET_NULL_D(&res[i]);
-		else
-		    res[i] = arg1[i] - arg2[i];
-	    }
-	    return 0;
-	}
-    default:
-	return E_INV_TYPE;
-    }
-}
diff --git a/raster/r.mapcalc/xtan.c b/raster/r.mapcalc/xtan.c
deleted file mode 100644
index 6647c6f..0000000
--- a/raster/r.mapcalc/xtan.c
+++ /dev/null
@@ -1,50 +0,0 @@
-
-#include <stdlib.h>
-#include <math.h>
-
-#include <grass/gis.h>
-#include <grass/raster.h>
-#include "globals.h"
-#include "expression.h"
-#include "func_proto.h"
-
-/**********************************************************************
-tan(x) 
-
-  if floating point exception occurs during the evaluation of tan(x)
-  the result is NULL
-
-  note: x is in degrees.
-**********************************************************************/
-
-#define DEGREES_TO_RADIANS (M_PI / 180.0)
-
-int f_tan(int argc, const int *argt, void **args)
-{
-    DCELL *res = args[0];
-    DCELL *arg1 = args[1];
-    int i;
-
-    if (argc < 1)
-	return E_ARG_LO;
-    if (argc > 1)
-	return E_ARG_HI;
-
-    if (argt[0] != DCELL_TYPE)
-	return E_RES_TYPE;
-
-    if (argt[1] != DCELL_TYPE)
-	return E_ARG_TYPE;
-
-    for (i = 0; i < columns; i++)
-	if (IS_NULL_D(&arg1[i]))
-	    SET_NULL_D(&res[i]);
-	else {
-	    floating_point_exception = 0;
-	    res[i] = tan(arg1[i] * DEGREES_TO_RADIANS);
-	    if (floating_point_exception)
-		SET_NULL_D(&res[i]);
-	}
-
-    return 0;
-}
diff --git a/raster/r.mfilter/r.mfilter.html b/raster/r.mfilter/r.mfilter.html
index e2730e7..fd3334f 100644
--- a/raster/r.mfilter/r.mfilter.html
+++ b/raster/r.mfilter/r.mfilter.html
@@ -135,10 +135,12 @@ is set properly.
 
 <h2>SEE ALSO</h2>
 
-<em><a href="g.region.html">g.region</a></em>,
-<em><a href="r.clump.html">r.clump</a></em>,
-<em><a href="r.neighbors.html">r.neighbors</a></em>
-<em><a href="r.mfilter.html">r.mfilter</a></em>
+<em>
+<a href="g.region.html">g.region</a>,
+<a href="r.clump.html">r.clump</a>,
+<a href="r.neighbors.html">r.neighbors</a>,
+<a href="r.resamp.filter.html">r.resamp.filter</a>
+</em>
 
 <h2>AUTHOR</h2>
 
@@ -146,4 +148,4 @@ Glynn Clements.
 Based upon r.mfilter, by Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:30:10 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/raster/r.mode/r.mode.html b/raster/r.mode/r.mode.html
index fb03e8f..477b80b 100644
--- a/raster/r.mode/r.mode.html
+++ b/raster/r.mode/r.mode.html
@@ -58,4 +58,4 @@ r.univar K.by.farm.mode
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.neighbors/r.neighbors.html b/raster/r.neighbors/r.neighbors.html
index cc90c9b..23ec899 100644
--- a/raster/r.neighbors/r.neighbors.html
+++ b/raster/r.neighbors/r.neighbors.html
@@ -130,6 +130,9 @@ within the neighborhood (rounded to the nearest integer).
 
 <dd>The sum of values within the neighborhood.
 
+<dt><b>count</b>
+<dd>The count of filled (not NULL) cells.
+
 <dt><b>variance</b> 
 
 <dd>The statistical variance of values
@@ -154,6 +157,18 @@ In the above example, the interspersion is:
 
 The result is rounded to the nearest integer (in this case 64).
 
+<dt><b>quart1, quart3</b>
+
+<dd>The result will be the first or the third quartile (equal of 25th and 75th percentiles).
+
+<dt><b>perc90</b>
+
+<dd>The result will be the 90th percentile of neighborhood.
+
+<dt><b>quantile</b>
+
+<dd>Any quantile as specified by "quantile" input parameter.
+
 </dl>
 <p><br>
 
@@ -364,14 +379,32 @@ note 2 above), quantiles (without interpolation).</li>
 otherwise float: sum.</li> 
 </ol> 
 
-<!-- TODO
+
 <h2>EXAMPLES</h2>
 
+<h3>Measure occupancy of neighborhood</h3>
+
+Set up 10x10 computational region to aid visual inspection of results
+<div class="code"><pre>
+g.region rows=10 cols=10
+</pre></div>
+
+Fill 50% of computational region with randomly located cells.
+"distance=0" will allow filling adjacent cells.
+<div class="code"><pre>
+r.random.cells output=random_cells distance=0 ncells=50
+</pre></div>
+
+Count non-empty (not NULL) cells in 3x3 neighborhood
+<div class="code"><pre>
+r.neighbors input=random_cells output=counts method=count
+</pre></div>
+
+Optionally - exclude centre cell from the count (= only look around)
 <div class="code"><pre>
-r.neighbors 
+r.mapcalc "cound_around = if( isnull(random_cells), counts, counts - 1)"
 </pre></div>
 
--->
 
 <h2>SEE ALSO</h2>
 
@@ -390,4 +423,4 @@ U.S.Army Construction Engineering Research Laboratory
 <br>
 Updates for GRASS GIS 7 by Glynn Clements and others
 
-<p><i>Last changed: $Date: 2016-06-08 22:21:21 +0200 (Wed, 08 Jun 2016) $</i>  
+<p><i>Last changed: $Date: 2016-06-08 22:20:56 +0200 (Wed, 08 Jun 2016) $</i>  
diff --git a/raster/r.null/main.c b/raster/r.null/main.c
index 84699da..f89d7d5 100644
--- a/raster/r.null/main.c
+++ b/raster/r.null/main.c
@@ -31,10 +31,10 @@ int main(int argc, char *argv[])
     const char *name, *mapset;
     char rname[GNAME_MAX], rmapset[GMAPSET_MAX];
     char path[GPATH_MAX];
-    int row, col, null_fd;
+    int row, col, fd;
     unsigned char *null_bits;
     RASTER_MAP_TYPE map_type;
-    int change_null = 0, create, remove, only_int, only_fp, only_null;
+    int change_null = 0, create, remove, only_int, only_fp, only_null, recreate;
     int is_reclass;
 
     struct GModule *module;
@@ -51,6 +51,7 @@ int main(int argc, char *argv[])
 	struct Flag *i;
 	struct Flag *c;
 	struct Flag *r;
+	struct Flag *z;
     } flags;
 
     G_gisinit(argv[0]);
@@ -106,6 +107,11 @@ int main(int argc, char *argv[])
     flags.r->description = _("Remove NULL-value bitmap file");
     flags.r->guisection = _("Remove");
 
+    flags.z = G_define_flag();
+    flags.z->key = 'z';
+    flags.z->description =
+	_("Re-create NULL-value bitmap file (to compress or uncompress)");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
@@ -114,6 +120,7 @@ int main(int argc, char *argv[])
     only_null = flags.n->answer;
     create = flags.c->answer;
     remove = flags.r->answer;
+    recreate = flags.z->answer;
 
     name = parms.map->answer;
     mapset = G_find_raster2(name, "");
@@ -165,22 +172,50 @@ int main(int argc, char *argv[])
 
     if (create) {
 	/* write a file of no-nulls */
-	null_bits = (unsigned char *)Rast__allocate_null_bits(cellhd.cols);
+	null_bits = Rast__allocate_null_bits(cellhd.cols);
 	/* init all cells to 0's */
 	for (col = 0; col < Rast__null_bitstream_size(cellhd.cols); col++)
 	    null_bits[col] = 0;
 
-	null_fd = G_open_new_misc("cell_misc", "null", name);
+	Rast_set_window(&cellhd);
+	fd = Rast__open_null_write(name);
+
+	G_verbose_message(_("Writing new null file for raster map <%s>..."),
+			  name);
+
+	for (row = 0; row < cellhd.rows; row++) {
+	    G_percent(row, cellhd.rows, 1);
+	    Rast__write_null_bits(fd, null_bits);
+	}
+	G_percent(row, cellhd.rows, 1);
+	Rast__close_null(fd);
+
+	G_done_msg(_("Raster map <%s> modified."), name);
+
+	exit(EXIT_SUCCESS);
+    }
+
+    if (recreate) {
+	int in_fd;
+	/* write a file of no-nulls */
+	null_bits = Rast__allocate_null_bits(cellhd.cols);
+	Rast__init_null_bits(null_bits, cellhd.cols);
+
+	Rast_set_window(&cellhd);
+	in_fd = Rast_open_old(name, mapset);
+	fd = Rast__open_null_write(name);
 
 	G_verbose_message(_("Writing new null file for raster map <%s>..."),
 			  name);
 
 	for (row = 0; row < cellhd.rows; row++) {
 	    G_percent(row, cellhd.rows, 1);
-	    Rast__write_null_bits(null_fd, null_bits, row, cellhd.cols, 0);
+	    Rast__read_null_bits(in_fd, row, null_bits);
+	    Rast__write_null_bits(fd, null_bits);
 	}
 	G_percent(row, cellhd.rows, 1);
-	close(null_fd);
+	Rast__close_null(fd);
+	Rast_close(in_fd);
 
 	G_done_msg(_("Raster map <%s> modified."), name);
 
@@ -191,9 +226,10 @@ int main(int argc, char *argv[])
 	/* write a file of no-nulls */
 	G_verbose_message(_("Removing null file for raster map <%s>..."),
 			   name);
-	null_fd = G_open_new_misc("cell_misc", "null", name);
 	G_file_name_misc(path, "cell_misc", "null", name, mapset);
 	unlink(path);
+	G_file_name_misc(path, "cell_misc", "null2", name, mapset);
+	unlink(path);
 
 	G_done_msg(_("Raster map <%s> modified."), name);
 
diff --git a/raster/r.null/r.null.html b/raster/r.null/r.null.html
index adbb4d7..ea5d592 100644
--- a/raster/r.null/r.null.html
+++ b/raster/r.null/r.null.html
@@ -56,4 +56,4 @@ and
 
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2015-07-11 16:04:13 +0200 (Sat, 11 Jul 2015) $</i>
+<p><i>Last changed: $Date: 2015-07-11 16:01:46 +0200 (Sat, 11 Jul 2015) $</i>
diff --git a/raster/r.out.ascii/r.out.ascii.html b/raster/r.out.ascii/r.out.ascii.html
index 2229a0a..dc6d030 100644
--- a/raster/r.out.ascii/r.out.ascii.html
+++ b/raster/r.out.ascii/r.out.ascii.html
@@ -53,4 +53,4 @@ Michael Shapiro,
 U.S. Army Construction Engineering Research Laboratory
 <p>Surfer support by Markus Neteler
 
-<p><i>Last changed: $Date: 2014-11-01 20:59:34 +0100 (Sat, 01 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-01 20:57:37 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/raster/r.out.bin/r.out.bin.html b/raster/r.out.bin/r.out.bin.html
index cd25ed8..16142a1 100644
--- a/raster/r.out.bin/r.out.bin.html
+++ b/raster/r.out.bin/r.out.bin.html
@@ -40,4 +40,4 @@ This program is derived from <em><a href="r.out.ascii.html">r.out.ascii</a></em>
 with a few modifications. <br>
 Author: <a href="mailto:bcovill at tekmap.ns.ca">Bob Covill</a>
 
-<p><i>Last changed: $Date: 2014-11-01 20:59:34 +0100 (Sat, 01 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-01 20:57:37 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/raster/r.out.gdal/attr.c b/raster/r.out.gdal/attr.c
index 60ae698..b576390 100644
--- a/raster/r.out.gdal/attr.c
+++ b/raster/r.out.gdal/attr.c
@@ -54,38 +54,88 @@ int export_attr(GDALDatasetH hMEMDS, int band,
      * what to do for a cell value that has a category but no color rule ?
      * what to do for a cell value that has a color rule but no category ?
      */
-    if (cats.ncats > 0) { /*  && rcount == 0 */
-	/* create new raster attribute table */
-	hrat = GDALCreateRasterAttributeTable();
-	
-	if (maptype == CELL_TYPE) {
-	    GDALRATCreateColumn(hrat, "min", GFT_Integer, GFU_Min);
-	    GDALRATCreateColumn(hrat, "max", GFT_Integer, GFU_Max);
-	}
-	else {
-	    GDALRATCreateColumn(hrat, "min", GFT_Real, GFU_Min);
-	    GDALRATCreateColumn(hrat, "max", GFT_Real, GFU_Max);
-	}
-	GDALRATCreateColumn(hrat, "label", GFT_String, GFU_Name);
-
-	GDALRATSetRowCount(hrat, cats.ncats);
+    if (cats.ncats > 0) {
+	int use_minmax = 0;
 
 	if (maptype == CELL_TYPE) {
 	    for (i = 0; i < cats.ncats; i++) {
 		label = Rast_get_ith_c_cat(&cats, i, &CellMin, &CellMax);
-		GDALRATSetValueAsInt(hrat, i, 0, CellMin);
-		GDALRATSetValueAsInt(hrat, i, 1, CellMax);
-		GDALRATSetValueAsString(hrat, i, 2, label);
+		if (CellMin != CellMax) {
+		    use_minmax = 1;
+		    break;
+		}
 	    }
 	}
 	else {
 	    for (i = 0; i < cats.ncats; i++) {
 		label = Rast_get_ith_d_cat(&cats, i, &dfCellMin, &dfCellMax);
-		GDALRATSetValueAsDouble(hrat, i, 0, dfCellMin);
-		GDALRATSetValueAsDouble(hrat, i, 1, dfCellMax);
-		GDALRATSetValueAsString(hrat, i, 2, label);
+		if (dfCellMin != dfCellMax) {
+		    use_minmax = 1;
+		    break;
+		}
+	    }
+	}
+
+	/* create new raster attribute table */
+	hrat = GDALCreateRasterAttributeTable();
+	
+	if (use_minmax) {
+	    if (maptype == CELL_TYPE) {
+		GDALRATCreateColumn(hrat, "min", GFT_Integer, GFU_Min);
+		GDALRATCreateColumn(hrat, "max", GFT_Integer, GFU_Max);
+	    }
+	    else {
+		GDALRATCreateColumn(hrat, "min", GFT_Real, GFU_Min);
+		GDALRATCreateColumn(hrat, "max", GFT_Real, GFU_Max);
+	    }
+	    GDALRATCreateColumn(hrat, "label", GFT_String, GFU_Name);
+
+	    GDALRATSetRowCount(hrat, cats.ncats);
+
+	    if (maptype == CELL_TYPE) {
+		for (i = 0; i < cats.ncats; i++) {
+		    label = Rast_get_ith_c_cat(&cats, i, &CellMin, &CellMax);
+		    GDALRATSetValueAsInt(hrat, i, 0, CellMin);
+		    GDALRATSetValueAsInt(hrat, i, 1, CellMax);
+		    GDALRATSetValueAsString(hrat, i, 2, label);
+		}
+	    }
+	    else {
+		for (i = 0; i < cats.ncats; i++) {
+		    label = Rast_get_ith_d_cat(&cats, i, &dfCellMin, &dfCellMax);
+		    GDALRATSetValueAsDouble(hrat, i, 0, dfCellMin);
+		    GDALRATSetValueAsDouble(hrat, i, 1, dfCellMax);
+		    GDALRATSetValueAsString(hrat, i, 2, label);
+		}
+	    }
+	}
+	else {
+	    if (maptype == CELL_TYPE) {
+		GDALRATCreateColumn(hrat, "value", GFT_Integer, GFU_MinMax);
+	    }
+	    else {
+		GDALRATCreateColumn(hrat, "value", GFT_Real, GFU_MinMax);
+	    }
+	    GDALRATCreateColumn(hrat, "label", GFT_String, GFU_Name);
+
+	    GDALRATSetRowCount(hrat, cats.ncats);
+
+	    if (maptype == CELL_TYPE) {
+		for (i = 0; i < cats.ncats; i++) {
+		    label = Rast_get_ith_c_cat(&cats, i, &CellMin, &CellMax);
+		    GDALRATSetValueAsInt(hrat, i, 0, CellMin);
+		    GDALRATSetValueAsString(hrat, i, 1, label);
+		}
+	    }
+	    else {
+		for (i = 0; i < cats.ncats; i++) {
+		    label = Rast_get_ith_d_cat(&cats, i, &dfCellMin, &dfCellMax);
+		    GDALRATSetValueAsDouble(hrat, i, 0, dfCellMin);
+		    GDALRATSetValueAsString(hrat, i, 1, label);
+		}
 	    }
 	}
+
 	if (GDALSetDefaultRAT(hBand, hrat) != CE_None) {
 	    G_warning(_("Failed to set raster attribute table"));
 	    ret = -1;
diff --git a/raster/r.out.gdal/r.out.gdal.html b/raster/r.out.gdal/r.out.gdal.html
index 0bae7fa..3226481 100644
--- a/raster/r.out.gdal/r.out.gdal.html
+++ b/raster/r.out.gdal/r.out.gdal.html
@@ -162,38 +162,48 @@ overviews.
 
 <h2>EXAMPLES</h2>
 
-<h3>Export the integer raster basin_50K map to GeoTIFF format:</h3>
+<h3>Export the integer raster basin_50K map to GeoTIFF format</h3>
+
 <div class="code"><pre>
 g.region raster=basin_50K -p
 r.out.gdal input=basin_50K output=basin_50K.tif
 </pre></div>
-<p>
-<h3>Export a DCELL raster map in GeoTIFF format suitable for ESRI software:</h3>
+
+
+<h3>Export a DCELL raster map in GeoTIFF format suitable for ESRI software</h3>
+
 <div class="code"><pre>
 g.region raster=elevation -p
 r.out.gdal in=elevation output=elevation.tif createopt="PROFILE=GeoTIFF,TFW=YES"
 </pre></div>
-<p>
-<h3>Export a raster map in "Deflate" compressed GeoTIFF format:</h3>
+
+
+<h3>Export a raster map in "Deflate" compressed GeoTIFF format</h3>
+
 <div class="code"><pre>
 g.region raster=elevation -p
 r.out.gdal in=elevation output=elevation.tif createopt="COMPRESS=DEFLATE"
 </pre></div>
-<p>
-<h3>Export R,G,B imagery bands in GeoTIFF format suitable for ESRI software:</h3>
+
+
+<h3>Export R,G,B imagery bands in GeoTIFF format suitable for ESRI software</h3>
+
 <div class="code"><pre>
 i.group group=nc_landsat_rgb input=lsat7_2002_30,lsat7_2002_20,lsat7_2002_10
 g.region raster=lsat7_2002_30 -p
 r.out.gdal in=nc_landsat_rgb output=nc_landsat_rgb.tif type=Byte \
   createopt="PROFILE=GeoTIFF,INTERLEAVE=PIXEL,TFW=YES"
 </pre></div>
-<p>
-<h3>Export the floating point raster elevation map to ERDAS/IMG format:</h3>
+
+
+<h3>Export the floating point raster elevation map to ERDAS/IMG format</h3>
+
 <div class="code"><pre>
 g.region raster=elevation -p
 r.out.gdal input=elevation output=elelevation.img format=HFA type=Float32
 </pre></div>
 
+
 <h3>Export group of image maps as multi-band file</h3>
 <div class="code"><pre>
 g.list group
@@ -205,6 +215,61 @@ gdalinfo lsat_multiband.tif
 </pre></div>
 
 
+<h3>Export RGB with alpha channel that encodes NULL cells</h3>
+
+When exporting exporting RGB data rather than GIS data for Web applications
+or generally the scope of visualization, the alpha channel is of use. Here
+the export type is commonly the Byte data type.
+<p>
+When exporting data with <em>r.out.gdal</em>, assigning a <b>nodata</b>
+value (specific parameter of the module) means that any band values
+equal to this nodata value will be interpreted as nodata. Using an additional
+alpha channel means that all pixels with an alpha value of 0 are
+transparent. The alpha channel thus represents per-pixel encoding of 
+nodata, just like the GRASS MASK (null file). That means when using an alpha 
+channel, you do not need to "free up" any particular value, but you can
+use any value you like to replace NULL cells, as long as the value can be 
+represented by the Byte data type. It does not matter if that value is 
+already present in any of the input bands.
+<p>
+Hence for "visual-only" RGB data export it is needed to create an additional
+alpha channel that encodes all NULL cells and in the RGB bands to be exported
+replace NULL cells with some value in the range 0-255. For example:
+<p>
+<div class="code"><pre>
+# for simplicity variables are used
+RMAP="lsat7_2000_30"
+GMAP="lsat7_2000_20"
+BMAP="lsat7_2000_10"
+
+OUTNAME="lsat7_2000_RGBA.tif"
+
+# extract alpha
+r.mapcalc "out_a = if(isnull($RMAP) || isnull($GMAP) || isnull($BMAP), 0, 255)"
+
+# replace NULL cells with a valid value, extract colors
+
+# exporting 8 bit RGB data, not GIS data, therefore the `#` operator:
+r.mapcalc "out_r = if(isnull($RMAP), 0, #$RMAP)"
+r.mapcalc "out_g = if(isnull($GMAP), 0, #$GMAP)"
+r.mapcalc "out_b = if(isnull($BMAP), 0, #$BMAP)"
+
+# create group for export
+i.group group=out_rgba input=out_r,out_g,out_b,out_a
+
+# remove any MASK because this works only if there are 
+# no NULL cells in the bands to be exported 
+r.mask -r
+
+# export the group:
+# add PROFILE=BASELINE to createopt to produce a standard TIFF file
+# without any GTiff extensions
+r.out.gdal input=out_rgba output=$OUTNAME -cm createopt="PHOTOMETRIC=RGB,ALPHA=YES"
+gdalinfo $OUTNAME
+</pre></div>
+
+The resulting GeoTIFF file can be used e.g. for Web server applications.
+
 <h2>GDAL RELATED ERROR MESSAGES</h2>
 
 <ul>
@@ -218,7 +283,8 @@ gdalinfo lsat_multiband.tif
 
 <li> "Warning 1: Lost metadata writing to GeoTIFF ... too large to fit in
  tag.": The color table metadata may be too large. It is recommended to
- simplify or not write the color table, or use a different output format.</li>
+ simplify or not write the color table, or use a different output format or
+ the flags <b>-c</b> and <b>-m</b>.</li>
 </ul>
 
 
@@ -246,4 +312,4 @@ GDAL Pages: <a href="http://www.gdal.org">http://www.gdal.org</a>
 Vytautas Vebra (oliver4grass at gmail.com)<br>
 Markus Metz (improved nodata logic)
 
-<p><i>Last changed: $Date: 2015-12-31 09:19:51 +0100 (Thu, 31 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2016-08-27 12:54:05 +0200 (Sat, 27 Aug 2016) $</i>
diff --git a/raster/r.out.mat/r.out.mat.html b/raster/r.out.mat/r.out.mat.html
index f6b8e5b..39c44a0 100644
--- a/raster/r.out.mat/r.out.mat.html
+++ b/raster/r.out.mat/r.out.mat.html
@@ -96,4 +96,4 @@ University of Otago<br>
 New Zealand</i><br>
 
 <br>
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/raster/r.out.mpeg/r.out.mpeg.html b/raster/r.out.mpeg/r.out.mpeg.html
index a202cfd..111a398 100644
--- a/raster/r.out.mpeg/r.out.mpeg.html
+++ b/raster/r.out.mpeg/r.out.mpeg.html
@@ -99,4 +99,4 @@ the <b>stdout</b> option.
 Bill Brown,
 U.S. Army Construction Engineering Research Laboratories
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/raster/r.out.png/r.out.png.html b/raster/r.out.png/r.out.png.html
index c1048b3..1f1771a 100644
--- a/raster/r.out.png/r.out.png.html
+++ b/raster/r.out.png/r.out.png.html
@@ -25,4 +25,4 @@ file will be called <tt>png_map.wld</tt>.
 Alex Shevlakov<br>
 Hamish Bowman
 
-<p><i>Last changed: $Date: 2014-11-01 20:59:34 +0100 (Sat, 01 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-01 20:57:37 +0100 (Sat, 01 Nov 2014) $</i>
diff --git a/raster/r.out.pov/r.out.pov.html b/raster/r.out.pov/r.out.pov.html
index 6140934..18d130c 100644
--- a/raster/r.out.pov/r.out.pov.html
+++ b/raster/r.out.pov/r.out.pov.html
@@ -60,4 +60,4 @@ height_field  {
 <h2>AUTHOR</h2>
 Klaus D. Meyer, GEUM.tec GbR, eMail: <i>GEUM.tec at geum.de</i>
 
-<p><i>Last changed: $Date: 2016-07-01 00:19:03 +0200 (Fri, 01 Jul 2016) $</i>
+<p><i>Last changed: $Date: 2016-07-01 00:17:58 +0200 (Fri, 01 Jul 2016) $</i>
diff --git a/raster/r.out.ppm/r.out.ppm.html b/raster/r.out.ppm/r.out.ppm.html
index db4eb6c..0c6e63a 100644
--- a/raster/r.out.ppm/r.out.ppm.html
+++ b/raster/r.out.ppm/r.out.ppm.html
@@ -56,4 +56,4 @@ pnmtopng -transparent white raster.ppm > raster.png
 
 Bill Brown, UIUC
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.out.ppm3/r.out.ppm3.html b/raster/r.out.ppm3/r.out.ppm3.html
index 15891f6..70779e4 100644
--- a/raster/r.out.ppm3/r.out.ppm3.html
+++ b/raster/r.out.ppm3/r.out.ppm3.html
@@ -31,4 +31,4 @@ differ, the aspect ratio of the resulting image will be off.
 Glynn Clements<br>
 Based upon <em>r.out.ppm</em> and <em>d.rgb</em>.
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.out.vrml/r.out.vrml.html b/raster/r.out.vrml/r.out.vrml.html
index 063bdfb..a8d4902 100644
--- a/raster/r.out.vrml/r.out.vrml.html
+++ b/raster/r.out.vrml/r.out.vrml.html
@@ -60,4 +60,4 @@ Other possible additions:
 <h2>AUTHOR</h2>
   Bill Brown, US Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2011-11-08 13:24:20 -0800 (Tue, 08 Nov 2011) $</i>
+<p><i>Last changed: $Date: 2011-11-08 22:24:20 +0100 (Tue, 08 Nov 2011) $</i>
diff --git a/raster/r.out.vtk/r.out.vtk.html b/raster/r.out.vtk/r.out.vtk.html
index 950eae3..f714c93 100644
--- a/raster/r.out.vtk/r.out.vtk.html
+++ b/raster/r.out.vtk/r.out.vtk.html
@@ -129,4 +129,4 @@ To achieve proper RGB overlay:
 <h2>AUTHOR</h2>
 Soeren Gebbert
 
-<p><i>Last changed: $Date: 2014-11-28 15:27:47 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-28 15:27:38 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/raster/r.param.scale/param.h b/raster/r.param.scale/param.h
index 840bdeb..9c1dab4 100644
--- a/raster/r.param.scale/param.h
+++ b/raster/r.param.scale/param.h
@@ -21,8 +21,8 @@
 #define TRUE 1
 #define FALSE 0
 
-#define RAD2DEG 57.29578
-#define DEG2RAD 0.017453293
+#define RAD2DEG M_R2D
+#define DEG2RAD M_D2R
 
 #define TINY 1.0e-20
 
diff --git a/raster/r.param.scale/r.param.scale.html b/raster/r.param.scale/r.param.scale.html
index a645ed0..ee4dd21 100644
--- a/raster/r.param.scale/r.param.scale.html
+++ b/raster/r.param.scale/r.param.scale.html
@@ -117,4 +117,4 @@ tables for all output files (presently only on features).
 <p>Update to FP 3/2002: L. Potrich, M. Neteler, S. Menegon (ITC-irst)
 
 <p>
-<i>Last changed: $Date: 2016-06-22 19:09:53 +0200 (Wed, 22 Jun 2016) $</i>
+<i>Last changed: $Date: 2016-06-22 19:07:12 +0200 (Wed, 22 Jun 2016) $</i>
diff --git a/raster/r.patch/main.c b/raster/r.patch/main.c
index 04a46ec..83b756c 100644
--- a/raster/r.patch/main.c
+++ b/raster/r.patch/main.c
@@ -2,12 +2,15 @@
 /****************************************************************************
  *
  * MODULE:       r.patch
- * AUTHOR(S):    Michael Shapiro, CERL (original contributor)
- *               Hamish Bowman <hamish_b yahoo.com>, Markus Neteler <neteler itc.it>
- *               Glynn Clements <glynn gclements.plus.com>, Jachym Cepicky <jachym les-ejk.cz>,
- *               Jan-Oliver Wagner <jan intevation.de>
+ * AUTHOR(S):    Michael Shapiro, CERL (original contributor),
+ *               Hamish Bowman <hamish_b yahoo.com>,
+ *               Markus Neteler <neteler itc.it>,
+ *               Glynn Clements <glynn gclements.plus.com>,
+ *               Jachym Cepicky <jachym les-ejk.cz>,
+ *               Jan-Oliver Wagner <jan intevation.de>,
+ *               Huidae Cho <grass4u gmail.com>
  * PURPOSE:      
- * COPYRIGHT:    (C) 1999-2006 by the GRASS Development Team
+ * COPYRIGHT:    (C) 1999-2014 by the GRASS Development Team
  *
  *               This program is free software under the GNU General Public
  *               License (>=v2). Read the file COPYING that comes with GRASS
@@ -38,7 +41,7 @@ int main(int argc, char *argv[])
     char *rname;
     int i;
     int row, nrows, ncols;
-    int use_zero;
+    int use_zero, no_support;
     char *new_name;
     char **names;
     char **ptr;
@@ -46,7 +49,7 @@ int main(int argc, char *argv[])
     struct Cell_head *cellhd;
 
     struct GModule *module;
-    struct Flag *zeroflag;
+    struct Flag *zeroflag, *nosupportflag;
     struct Option *opt1, *opt2;
 
     G_gisinit(argv[0]);
@@ -77,10 +80,16 @@ int main(int argc, char *argv[])
     zeroflag->description =
 	_("Use zero (0) for transparency instead of NULL");
 
+    nosupportflag = G_define_flag();
+    nosupportflag->key = 's';
+    nosupportflag->description =
+	_("Do not create color and category files");
+
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
     use_zero = (zeroflag->answer);
+    no_support = (nosupportflag->answer);
 
     names = opt1->answers;
 
@@ -160,19 +169,24 @@ int main(int argc, char *argv[])
     G_free(presult);
     for (i = 0; i < nfiles; i++)
 	Rast_close(infd[i]);
-    /* 
-     * build the new cats and colors. do this before closing the new
-     * file, in case the new file is one of the patching files as well.
-     */
-    G_verbose_message(_("Creating support files for raster map <%s>..."), new_name);
-    support(names, statf, nfiles, &cats, &cats_ok, &colr, &colr_ok, out_type);
+
+    if(!no_support) {
+        /* 
+         * build the new cats and colors. do this before closing the new
+         * file, in case the new file is one of the patching files as well.
+         */
+        G_verbose_message(_("Creating support files for raster map <%s>..."), new_name);
+        support(names, statf, nfiles, &cats, &cats_ok, &colr, &colr_ok, out_type);
+    }
 
     /* now close (and create) the result */
     Rast_close(outfd);
-    if (cats_ok)
-	Rast_write_cats(new_name, &cats);
-    if (colr_ok)
-	Rast_write_colors(new_name, G_mapset(), &colr);
+    if(!no_support) {
+        if (cats_ok)
+    	    Rast_write_cats(new_name, &cats);
+	if (colr_ok)
+	    Rast_write_colors(new_name, G_mapset(), &colr);
+    }
 
     Rast_short_history(new_name, "raster", &history);
     Rast_command_history(&history);
diff --git a/raster/r.patch/r.patch.html b/raster/r.patch/r.patch.html
index 9afe418..e9e825e 100644
--- a/raster/r.patch/r.patch.html
+++ b/raster/r.patch/r.patch.html
@@ -80,7 +80,13 @@ composite (patched) raster map layer the name of the original raster map
 layer.
 
 <p>
-<em>r.patch</em> creates support files for the patched, composite output map. 
+<em>r.patch</em> reads the existing category label files and color tables
+from the <em>input</em> maps and creates these files for the patched, 
+composite <em>output</em> map.  This can be quite time consuming for 
+certain maps, especially if there are many different category values 
+across the patched maps. The <em>-s</em> flag allows to disable the reading
+and creation of these support files,  meaning that the <em>output</em> 
+map will have no category labels and no explicit color table.
 
 <p>
 Number of raster maps to be processed is given by the limit of the
@@ -134,4 +140,4 @@ U.S. Army Construction Engineering Research Laboratory
 <br>
 -z flag and performance improvement by Huidae Cho
 
-<p><i>Last changed: $Date: 2015-10-09 18:55:34 +0200 (Fri, 09 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2016-10-09 12:59:56 +0200 (Sun, 09 Oct 2016) $</i>
diff --git a/raster/r.patch/testsuite/test_rpatch_artificial.py b/raster/r.patch/testsuite/test_rpatch_artificial.py
new file mode 100644
index 0000000..627e3b9
--- /dev/null
+++ b/raster/r.patch/testsuite/test_rpatch_artificial.py
@@ -0,0 +1,223 @@
+"""
+TEST:      r.patch
+
+AUTHOR(S): Vaclav Petras
+
+PURPOSE:   Test r.patch using artificial and small data
+
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+cell_1 = """\
+north: 20
+south: 10
+east: 25
+west: 15
+rows: 4
+cols: 4
+505 501 500 520
+506 501 550 520
+504 401 400 520
+502 520 540 520
+"""
+
+cell_2 = """\
+north: 30
+south: 20
+east: 25
+west: 15
+rows: 4
+cols: 4
+505 505 500 520
+406 409 550 520
+304 405 400 560
+302 520 540 520
+"""
+
+cell_patched_ref = """\
+north: 30
+south: 10
+east: 25
+west: 15
+rows: 8
+cols: 4
+505 505 500 520
+406 409 550 520
+304 405 400 560
+302 520 540 520
+505 501 500 520
+506 501 550 520
+504 401 400 520
+502 520 540 520
+"""
+
+# the following comes from the manual
+
+cell_overlap_a = """\
+north: 35
+south: 20
+east: 25
+west: 15
+rows: 6
+cols: 8
+1 1 1 0 2 2 0 0
+1 1 0 2 2 2 0 0
+3 3 3 3 2 2 0 0
+3 3 3 3 0 0 0 0
+3 3 3 0 0 0 0 0
+0 0 0 0 0 0 0 0
+"""
+
+cell_overlap_b = """\
+north: 35
+south: 20
+east: 25
+west: 15
+rows: 6
+cols: 8
+0 0 1 1 0 0 0 0
+0 0 1 1 0 0 0 0
+0 0 0 0 0 0 0 0
+4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4
+"""
+
+cell_overlap_ab = """\
+north: 35
+south: 20
+east: 25
+west: 15
+rows: 6
+cols: 8
+1 1 1 1 2 2 0 0
+1 1 1 2 2 2 0 0
+3 3 3 3 2 2 0 0
+3 3 3 3 4 4 4 4
+3 3 3 4 4 4 4 4
+4 4 4 4 4 4 4 4
+"""
+
+cell_overlap_ba = """\
+north: 35
+south: 20
+east: 25
+west: 15
+rows: 6
+cols: 8
+1 1 1 1 2 2 0 0
+1 1 1 1 2 2 0 0
+3 3 3 3 2 2 0 0
+4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4
+4 4 4 4 4 4 4 4
+"""
+
+
+class TestSmallDataNoOverlap(TestCase):
+
+    # TODO: replace by unified handing of maps
+    to_remove = []
+    cell_1 = 'rpatch_small_test_cell_1'
+    cell_2 = 'rpatch_small_test_cell_2'
+    cell_patched = 'rpatch_small_test_cell_patched'
+    cell_patched_ref = 'rpatch_small_test_cell_patched_ref'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        # 10 / 4 == 2.5 (size of raster / number of cells)
+        cls.runModule('g.region', n=30, s=10, e=25, w=15, res=2.5)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+        if cls.to_remove:
+            cls.runModule('g.remove', flags='f', type='raster',
+                          name=','.join(cls.to_remove), verbose=True)
+
+    def test_patching_cell(self):
+        """Test patching two neighboring CELL raster maps"""
+        self.runModule('r.in.ascii', input='-', stdin=cell_1,
+                       output=self.cell_1)
+        self.to_remove.append(self.cell_1)
+        self.runModule('r.in.ascii', input='-', stdin=cell_2,
+                       output=self.cell_2)
+        self.to_remove.append(self.cell_2)
+
+        self.assertModule('r.patch', input=(self.cell_1, self.cell_2),
+                          output=self.cell_patched)
+        self.to_remove.append(self.cell_patched)
+        self.runModule('r.in.ascii', input='-', stdin=cell_patched_ref,
+                       output=self.cell_patched_ref)
+        self.to_remove.append(self.cell_patched_ref)
+        self.assertRastersNoDifference(self.cell_patched,
+                                       self.cell_patched_ref, precision=0)
+
+
+class TestSmallDataOverlap(TestCase):
+
+    # TODO: replace by unified handing of maps
+    to_remove = []
+    cell_a = 'rpatch_small_test_cell_a'
+    cell_b = 'rpatch_small_test_cell_b'
+    cell_ab = 'rpatch_small_test_cell_ab_reference'
+    cell_ba = 'rpatch_small_test_cell_ba_reference'
+    cell_ab_result = 'rpatch_small_test_cell_ab_result'
+    cell_ba_result = 'rpatch_small_test_cell_ba_result'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        # 15 / 6 == 2.5 ((n-s) / number of cells)
+        # 10 / 8 == 1.25 ((e-w) / number of cells)
+        cls.runModule('g.region', n=35, s=20, e=25, w=15,
+                      nsres=2.5, ewres=1.25)
+        cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_a,
+                      output=cls.cell_a)
+        cls.to_remove.append(cls.cell_a)
+        cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_b,
+                      output=cls.cell_b)
+        cls.to_remove.append(cls.cell_b)
+        cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_ab,
+                      output=cls.cell_ab)
+        cls.to_remove.append(cls.cell_ab)
+        cls.runModule('r.in.ascii', input='-', stdin=cell_overlap_ba,
+                      output=cls.cell_ba)
+        cls.to_remove.append(cls.cell_ba)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+        if cls.to_remove:
+            cls.runModule('g.remove', flags='f', type='raster',
+                          name=','.join(cls.to_remove), verbose=True)
+
+    def test_patch_oder_ab_cell(self):
+        """Test patching two overlapping CELL raster maps (watching order)"""
+        self.assertModule('r.patch', input=(self.cell_a, self.cell_b),
+                          output=self.cell_ab_result, flags='z')
+        self.assertRasterExists(self.cell_ab_result)
+        self.to_remove.append(self.cell_ab_result)
+        self.assertRastersNoDifference(self.cell_ab_result,
+                                       self.cell_ab, precision=0)
+
+    def test_patch_oder_ba_cell(self):
+        """Test patching two overlapping CELL raster maps (watching order)"""
+        self.assertModule('r.patch', input=(self.cell_b, self.cell_a),
+                          output=self.cell_ba_result, flags='z')
+        self.assertRasterExists(self.cell_ba_result)
+        self.to_remove.append(self.cell_ba_result)
+        self.assertRastersNoDifference(self.cell_ba_result,
+                                       self.cell_ba, precision=0)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/raster/r.profile/r.profile.html b/raster/r.profile/r.profile.html
index e2d790a..a88aa2c 100644
--- a/raster/r.profile/r.profile.html
+++ b/raster/r.profile/r.profile.html
@@ -166,4 +166,4 @@ Approx. transect length: 995.014070 [meters]
 <a href="mailto:bcovill at tekmap.ns.ca">Bob Covill</a>
 
 <p>
-<i>Last changed: $Date: 2015-06-07 20:57:04 +0200 (Sun, 07 Jun 2015) $</i>
+<i>Last changed: $Date: 2015-06-07 20:56:26 +0200 (Sun, 07 Jun 2015) $</i>
diff --git a/raster/r.profile/testsuite/test_profile_ncspm.py b/raster/r.profile/testsuite/test_profile_ncspm.py
index b86c828..762de34 100644
--- a/raster/r.profile/testsuite/test_profile_ncspm.py
+++ b/raster/r.profile/testsuite/test_profile_ncspm.py
@@ -1,4 +1,5 @@
-from grass.gunittest import TestCase, test
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import SimpleModule
 import grass.script.core as gcore
 
diff --git a/raster/r.proj/main.c b/raster/r.proj/main.c
index 74fdd82..93df04c 100644
--- a/raster/r.proj/main.c
+++ b/raster/r.proj/main.c
@@ -144,6 +144,7 @@ int main(int argc, char **argv)
     G_add_keyword(_("raster"));
     G_add_keyword(_("projection"));
     G_add_keyword(_("transformation"));
+    G_add_keyword(_("import"));
     module->description =
 	_("Re-projects a raster map from given location to the current location.");
 
diff --git a/raster/r.proj/r.proj.html b/raster/r.proj/r.proj.html
index 74828de..1e0ac88 100644
--- a/raster/r.proj/r.proj.html
+++ b/raster/r.proj/r.proj.html
@@ -318,4 +318,4 @@ Man page text from S.J.D. Cox, AGCRC, CSIRO Exploration & Mining, Nedlands,
 Updated by <a href="mailto:morten at untamo.net">Morten Hulden</a><br>
 Datum transformation support and cleanup by Paul Kelly
 
-<p><i>Last changed: $Date: 2016-01-29 10:56:07 +0100 (Fri, 29 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-29 10:29:57 +0100 (Fri, 29 Jan 2016) $</i>
diff --git a/raster/r.quant/r.quant.html b/raster/r.quant/r.quant.html
index 102a87e..b0ace33 100644
--- a/raster/r.quant/r.quant.html
+++ b/raster/r.quant/r.quant.html
@@ -29,4 +29,4 @@ It is an error for both basemap and fprange to be specified.
 Michael Shapiro, Olga Waupotitsch,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2011-11-08 22:24:20 +0100 (Tue, 08 Nov 2011) $</i>
+<p><i>Last changed: $Date: 2011-11-08 13:24:20 -0800 (Tue, 08 Nov 2011) $</i>
diff --git a/raster/r.quantile/r.quantile.html b/raster/r.quantile/r.quantile.html
index 7e03ad6..76d6cf6 100644
--- a/raster/r.quantile/r.quantile.html
+++ b/raster/r.quantile/r.quantile.html
@@ -40,4 +40,4 @@ r.quantile elevation quantiles=5 -r --quiet | r.recode elevation \
 
 Glynn Clements
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.random.cells/indep.c b/raster/r.random.cells/indep.c
index fbd0781..de4152a 100644
--- a/raster/r.random.cells/indep.c
+++ b/raster/r.random.cells/indep.c
@@ -21,6 +21,11 @@ void Indep(void)
 	G_debug(3, "(CellCount):%d", CellCount);
 	G_debug(3, "(Count):%d", Count);
 
+        if (Found >= MaxCellsNum) {
+            G_debug(1, "Hit maximum number of cells");
+            break;
+        }
+
 	DRow = DoNext[Count].R;
 	DCol = DoNext[Count++].C;
 
@@ -137,6 +142,8 @@ void Indep(void)
 	G_percent(R, Rs, 2);
 	for (C = 0; C < Cs; C++) {
 	    CellBuffer[C] = Out[R][C];
+	    if(CellBuffer[C] == 0)
+		Rast_set_null_value(&CellBuffer[C], 1, CELL_TYPE);
 	}
 	Rast_put_row(OutFD, CellBuffer, CELL_TYPE);
     }
diff --git a/raster/r.random.cells/init.c b/raster/r.random.cells/init.c
index 1cae8c7..6b533c1 100644
--- a/raster/r.random.cells/init.c
+++ b/raster/r.random.cells/init.c
@@ -65,6 +65,13 @@ void Init()
 	CellCount = Rs * Cs;
     }
 
+    /* cut down num of cells if requested */
+    if (MaxCells->answer)
+        sscanf(MaxCells->answer, "%d", &MaxCellsNum);
+    else
+        MaxCellsNum = CellCount;
+    G_debug(1, "(CellCount):%d", CellCount);
+
     sscanf(Distance->answer, "%lf", &MaxDist);
     if (MaxDist < 0.0)
 	G_fatal_error(_("Distance must be >= 0.0"));
diff --git a/raster/r.random.cells/main.c b/raster/r.random.cells/main.c
index 715d497..93a8149 100644
--- a/raster/r.random.cells/main.c
+++ b/raster/r.random.cells/main.c
@@ -30,10 +30,12 @@ FLAG *Cells;
 CELLSORTER *DoNext;
 CELL **Out, *CellBuffer;
 int Seed, OutFD;
+int MaxCellsNum;
 struct Flag *Verbose;
 struct Option *Distance;
 struct Option *Output;
 struct Option *SeedStuff;
+struct Option *MaxCells;
 
 int main(int argc, char *argv[])
 {
@@ -59,6 +61,14 @@ int main(int argc, char *argv[])
     Distance->description =
 	_("Maximum distance of spatial correlation (value >= 0.0)");
 
+    MaxCells = G_define_option();
+    MaxCells->key = "ncells";
+    MaxCells->type = TYPE_INTEGER;
+    MaxCells->required = NO;
+    MaxCells->options = "1-";
+    MaxCells->description =
+        _("Maximum number of cells to be created");
+
     SeedStuff = G_define_option();
     SeedStuff->key = "seed";
     SeedStuff->type = TYPE_INTEGER;
diff --git a/raster/r.random.cells/r.random.cells.html b/raster/r.random.cells/r.random.cells.html
index 7d87b3f..6199a7e 100644
--- a/raster/r.random.cells/r.random.cells.html
+++ b/raster/r.random.cells/r.random.cells.html
@@ -2,7 +2,7 @@
 
 <em>r.random.cells</em> generates a random sets of raster cells that are
 at least <b>distance</b> apart. The cells are numbered from 1 to the
-numbers of cells generated, all other cells are 0 (zero). Random
+numbers of cells generated, all other cells are NULL (no data). Random
 cells will not be generated in areas masked off.
 
 <h3>Detailed parameter description</h3>
@@ -40,16 +40,85 @@ number of non-masked cells in the study region. -->
 
 <h2>EXAMPLE</h2>
 
+<h3>Random cells in given distances</h3>
+
 North Carolina sample dataset example:
 
 <div class="code"><pre>
 g.region n=228500 s=215000 w=630000 e=645000 res=100 -p
 r.random.cells output=random_500m distance=500
+</pre></div>
+
+<h3>Limited number of random points</h3>
 
-# optionally set 0 to NULL (masked off areas)
-r.null random_500m setnull=0
+Here is another example where we will create given number of vector points
+with the given minimal distances.
+Let's star with setting the region (we use large cells here):
+
+<div class="code"><pre>
+g.region raster=elevation
+g.region rows=20 cols=20 -p
 </pre></div>
 
+Then we generate random cells and we limit their count to 20:
+
+<div class="code"><pre>
+r.random.cells output=random_cells distance=1500 ncells=20 seed=200
+</pre></div>
+
+Finally, we convert the raster cells to points using
+<em><a href="r.to.vect.html">r.to.vect</a></em> module:
+
+<div class="code"><pre>
+r.to.vect input=random_cells output=random_points type=point
+</pre></div>
+
+An example of the result is at the Figure below on the left
+in comparison with the result without the cell limit on the right.
+
+<p>
+Additionally, we can use <em><a href="v.perturb.html">v.perturb</a></em> module
+to add random spatial deviation to their position so that they are not
+perfectly aligned with the grid. We cannot perturb the points too much,
+otherwise we might seriously break the minimal distance we set earlier.
+
+<div class="code"><pre>
+v.perturb input=random_points output=random_points_moved parameters=50 seed=200
+</pre></div>
+
+In the above examples, we were using fixed seed. This is advantageous when
+we want to generate (pseudo) random data, but we want to get reproducible
+results at the same time.
+
+<center>
+<img src="r_random_cells.png" alt="Cells and points filling the space">
+<p><em>
+    Figure: Generated cells with limited number of cells (upper left),
+    derived vector points (lower left), cells without a count limit
+    (upper right) and corresponding vector points (lower right)
+</em></p>
+</center>
+
+<!--
+r.random.cells output=random_cells_all distance=1500 seed=200
+r.random.cells output=random_cells distance=1500 ncells=20 seed=200
+r.to.vect input=random_cells_all output=random_points_all type=point
+r.to.vect input=random_cells output=random_points type=point
+
+d.mon cairo out=r_random_cells.png
+d.frame frame=a at=50,100,0,50 -c
+d.rast random_cells
+d.frame frame=b at=50,100,50,100 -c
+d.rast random_cells_all
+d.frame frame=c at=0,50,0,50 -c
+d.vect random_points color=0:53:106 fill_color=30:144:255 width=1 icon=basic/point size=20
+d.frame frame=d at=0,50,50,100 -c
+d.vect random_points_all color=0:53:106 fill_color=30:144:255 width=1 icon=basic/point size=20
+d.mon stop=cairo
+mogrify -trim r_random_cells.png
+-->
+
+
 <h2>REFERENCES</h2>
 Random Field Software for GRASS GIS by Chuck Ehlschlaeger
 
@@ -90,12 +159,16 @@ Goodchild. Proceedings, GIS/LIS'94, pp. 246-253, Phoenix AZ,
 r.2Dcorrelogram, 
 r.2Dto1D, -->
 <a href="r.random.surface.html">r.random.surface</a>,
-<a href="r.random.html">r.random</a>
-</em> 
+<a href="r.random.html">r.random</a>,
+<a href="v.random.html">v.random</a>,
+<a href="r.to.vect.html">r.to.vect</a>,
+<a href="v.perturb.html">v.perturb</a>
+</em>
+
 
 <h2>AUTHOR</h2>
 
 Charles Ehlschlaeger; National Center for Geographic Information and
 Analysis, University of California, Santa Barbara.
 
-<p><i>Last changed: $Date: 2015-04-21 16:00:05 +0200 (Tue, 21 Apr 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-10 22:01:15 +0200 (Sat, 10 Oct 2015) $</i>
diff --git a/raster/r.random.cells/r_random_cells.png b/raster/r.random.cells/r_random_cells.png
new file mode 100644
index 0000000..fbed750
Binary files /dev/null and b/raster/r.random.cells/r_random_cells.png differ
diff --git a/raster/r.random.cells/ransurf.h b/raster/r.random.cells/ransurf.h
index 374ecc8..c30c2be 100644
--- a/raster/r.random.cells/ransurf.h
+++ b/raster/r.random.cells/ransurf.h
@@ -24,7 +24,9 @@ extern FLAG *Cells;
 extern CELLSORTER *DoNext;
 extern CELL **Out, *CellBuffer;
 extern int Seed, OutFD;
+extern int MaxCellsNum;
 extern struct Flag *Verbose;
 extern struct Option *Distance;
 extern struct Option *Output;
 extern struct Option *SeedStuff;
+extern struct Option *MaxCells;
diff --git a/raster/r.random.cells/testsuite/test_random_cells.py b/raster/r.random.cells/testsuite/test_random_cells.py
new file mode 100644
index 0000000..25ef1bc
--- /dev/null
+++ b/raster/r.random.cells/testsuite/test_random_cells.py
@@ -0,0 +1,77 @@
+"""
+TEST:      r.random.cells
+
+AUTHOR(S): Vaclav Petras
+
+PURPOSE:   Test r.random.cells
+
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+
+class TestCounts(TestCase):
+
+    # TODO: replace by unified handing of maps
+    to_remove = []
+    all_rast = "r_random_cells_all"
+    some_rast = "r_random_cells_some"
+    count_rast = "r_random_cells_count"
+    n_cells = 50
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        # (20-10) / 2 * (60-40) / 2 = 50 cells
+        cls.runModule('g.region', n=20, s=10, e=60, w=40, res=2)
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+        if cls.to_remove:
+            cls.runModule('g.remove', flags='f', type='raster',
+                          name=','.join(cls.to_remove), verbose=True)
+
+    def test_fill_all(self):
+        self.assertModule('r.random.cells', output=self.all_rast,
+                          distance=0.01, seed=100)
+        self.to_remove.append(self.all_rast)
+        self.assertRasterFitsUnivar(
+            self.all_rast,
+            reference=dict(cells=self.n_cells, n=self.n_cells, null_cells=0,
+                           min=1, max=self.n_cells))
+
+    def test_fill_some(self):
+        self.assertModule('r.random.cells', output=self.some_rast,
+                          distance=2, seed=100)
+        self.to_remove.append(self.some_rast)
+        self.assertRasterFitsUnivar(
+            self.some_rast,
+            reference=dict(cells=self.n_cells, min=1))
+        # it is hard to say how much but it will be less than half
+        self.assertRasterMinMax(self.some_rast, 1, self.n_cells / 2)
+
+    def test_fill_count(self):
+        count = 12
+        self.assertModule('r.random.cells', output=self.count_rast,
+                          distance=2, seed=100, ncells=count)
+        self.to_remove.append(self.count_rast)
+        self.assertRasterFitsUnivar(
+            self.count_rast,
+            reference=dict(cells=self.n_cells, n=count,
+                           null_cells=self.n_cells - count,
+                           min=1, max=count))
+        # it is hard to say how much but it will be less than half
+        self.assertRasterMinMax(self.count_rast, 1, count)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/raster/r.random.surface/r.random.surface.html b/raster/r.random.surface/r.random.surface.html
index c0f2890..da4cc1e 100644
--- a/raster/r.random.surface/r.random.surface.html
+++ b/raster/r.random.surface/r.random.surface.html
@@ -155,4 +155,4 @@ Charles Ehlschlaeger, Michael Goodchild, and Chih-chang Lin; National Center
 for Geographic Information and Analysis, University of California, Santa
 Barbara.
 
-<p><i>Last changed: $Date: 2016-06-02 22:50:01 +0200 (Thu, 02 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-02 22:49:26 +0200 (Thu, 02 Jun 2016) $</i>
diff --git a/raster/r.random/r.random.html b/raster/r.random/r.random.html
index bf8ec3a..aa2cc90 100644
--- a/raster/r.random/r.random.html
+++ b/raster/r.random/r.random.html
@@ -119,4 +119,4 @@ Central Washington University
 <p>Modified for GRASS 5.0 by Eric G. Miller
 <p>Cover map support by Markus Neteler, 2007
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/raster/r.reclass/r.reclass.html b/raster/r.reclass/r.reclass.html
index 496c38a..6ce7ae7 100644
--- a/raster/r.reclass/r.reclass.html
+++ b/raster/r.reclass/r.reclass.html
@@ -243,4 +243,4 @@ James Westervelt,<br>
 Michael Shapiro<br>
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/raster/r.recode/testsuite/test_rrecode_ncspm.py b/raster/r.recode/testsuite/test_rrecode_ncspm.py
index c5f3c7e..06a98d7 100644
--- a/raster/r.recode/testsuite/test_rrecode_ncspm.py
+++ b/raster/r.recode/testsuite/test_rrecode_ncspm.py
@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
-from grass.gunittest import TestCase, test
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import SimpleModule
 from grass.script.core import read_command
 
@@ -84,7 +85,7 @@ class TestNCMaps(TestCase):
                           "which suggests input map values were read as integers.")
 
     def test_formats_landcover(self):
-        recode = SimpleModule('r.recode', input='landuse96_28m at PERMANENT',
+        recode = SimpleModule('r.recode', input='landuse at PERMANENT',
                               output='recoded', rules='-', overwrite=True)
         recode.inputs.stdin = rules4
         self.assertModule(recode)
diff --git a/raster/r.region/r.region.html b/raster/r.region/r.region.html
index 65d5a2f..74c9213 100644
--- a/raster/r.region/r.region.html
+++ b/raster/r.region/r.region.html
@@ -56,4 +56,4 @@ Glynn Clements
 <br>
 Based upon <em>g.region</em>
 
-<p><i>Last changed: $Date: 2015-12-27 19:29:24 +0100 (Sun, 27 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-08-07 05:24:55 +0200 (Fri, 07 Aug 2015) $</i>
diff --git a/raster/r.regression.line/r.regression.line.html b/raster/r.regression.line/r.regression.line.html
index 43d513c..39c434a 100644
--- a/raster/r.regression.line/r.regression.line.html
+++ b/raster/r.regression.line/r.regression.line.html
@@ -76,4 +76,4 @@ Updated to GRASS 5.7 Michael Barton, Arizona State University<br>
 Script style output Markus Neteler<br>
 Conversion to C module Markus Metz
 
-<p><i>Last changed: $Date: 2015-10-27 18:41:34 +0100 (Tue, 27 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-27 18:40:48 +0100 (Tue, 27 Oct 2015) $</i>
diff --git a/raster/r.regression.multi/r.regression.multi.html b/raster/r.regression.multi/r.regression.multi.html
index 34abd4d..349d99d 100644
--- a/raster/r.regression.multi/r.regression.multi.html
+++ b/raster/r.regression.multi/r.regression.multi.html
@@ -92,4 +92,4 @@ r.regression.multi mapx=elevation,aspect,slope mapy=soils_Kfactor \
 
 Markus Metz
 
-<p><i>Last changed: $Date: 2015-10-27 18:41:34 +0100 (Tue, 27 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-27 18:40:48 +0100 (Tue, 27 Oct 2015) $</i>
diff --git a/raster/r.relief/r.relief.html b/raster/r.relief/r.relief.html
index 84d8837..2622659 100644
--- a/raster/r.relief/r.relief.html
+++ b/raster/r.relief/r.relief.html
@@ -142,4 +142,4 @@ Jim Westervelt, U.S. Army Construction Engineering Research Laboratory
 <br>
 Markus Metz: Enhanced fast C version of r.relief for GRASS GIS 7
 
-<p><i>Last changed: $Date: 2016-05-16 12:23:50 +0200 (Mon, 16 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-16 12:06:50 +0200 (Mon, 16 May 2016) $</i>
diff --git a/raster/r.resamp.bspline/r.resamp.bspline.html b/raster/r.resamp.bspline/r.resamp.bspline.html
index 8a3f622..8ea1e65 100644
--- a/raster/r.resamp.bspline/r.resamp.bspline.html
+++ b/raster/r.resamp.bspline/r.resamp.bspline.html
@@ -154,4 +154,4 @@ based on <em><a href="v.surf.bspline.html">v.surf.bspline</a></em> by
 Maria Antonia Brovelli, Massimiliano Cannata, Ulisse Longoni, Mirko Reguzzoni, Roberto Antolin
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.resamp.filter/main.c b/raster/r.resamp.filter/main.c
index 9c8c152..4b94486 100644
--- a/raster/r.resamp.filter/main.c
+++ b/raster/r.resamp.filter/main.c
@@ -177,8 +177,13 @@ static void make_h_weights(void)
 
     for (col = 0; col < dst_w.cols; col++) {
 	double dx = Rast_col_to_easting(col + 0.5, &dst_w);
+	/* do not use Rast_easting_to_col() because it does ll wrap */
+	/*
 	double x0 = Rast_easting_to_col(dx - f_x_radius, &src_w);
 	double x1 = Rast_easting_to_col(dx + f_x_radius, &src_w);
+	 */
+	double x0 = (dx - f_x_radius - src_w.west) / src_w.ew_res;
+	double x1 = (dx + f_x_radius - src_w.west) / src_w.ew_res;
 	int col0 = (int)floor(x0);
 	int col1 = (int)floor(x1) + 1;
 	int cols = col1 - col0;
@@ -312,7 +317,7 @@ static void v_filter(DCELL *dst, DCELL **src, int row, int rows)
 
 static void filter(void)
 {
-    int cur_row;
+    int cur_row = 0;
     int num_rows = 0;
     int row;
 
@@ -489,6 +494,18 @@ int main(int argc, char *argv[])
     /* set window to old map */
     Rast_get_cellhd(parm.rastin->answer, "", &src_w);
 
+    if (G_projection() == PROJECTION_LL) {
+	/* try to shift source window to overlap with destination window */
+	while (src_w.west >= dst_w.east && src_w.east - 360.0 > dst_w.west) {
+	    src_w.east -= 360.0;
+	    src_w.west -= 360.0;
+	}
+	while (src_w.east <= dst_w.west && src_w.west + 360.0 < dst_w.east) {
+	    src_w.east += 360.0;
+	    src_w.west += 360.0;
+	}
+    }
+
     /* enlarge source window */
     {
 	double y0 = Rast_row_to_northing(0.5, &dst_w);
@@ -497,8 +514,13 @@ int main(int argc, char *argv[])
 	double x1 = Rast_col_to_easting(dst_w.cols - 0.5, &dst_w);
 	int r0 = (int)floor(Rast_northing_to_row(y0 + f_y_radius, &src_w) - 0.1);
 	int r1 = (int)ceil(Rast_northing_to_row(y1 - f_y_radius, &src_w) + 0.1);
+	/* do not use Rast_easting_to_col() because it does ll wrap */
+	/*
 	int c0 = (int)floor(Rast_easting_to_col(x0 - f_x_radius, &src_w) - 0.1);
 	int c1 = (int)ceil(Rast_easting_to_col(x1 + f_x_radius, &src_w) + 0.1);
+	*/
+	int c0 = (int)floor((x0 - f_x_radius - src_w.west) / src_w.ew_res - 0.1);
+	int c1 = (int)ceil((x1 + f_x_radius - src_w.west) / src_w.ew_res + 0.1);
 
 	src_w.south -= src_w.ns_res * (r1 - src_w.rows);
 	src_w.north += src_w.ns_res * (-r0);
diff --git a/raster/r.resamp.filter/r.resamp.filter.html b/raster/r.resamp.filter/r.resamp.filter.html
index 878add0..025087e 100644
--- a/raster/r.resamp.filter/r.resamp.filter.html
+++ b/raster/r.resamp.filter/r.resamp.filter.html
@@ -81,6 +81,7 @@ interpolation method.
 
 <em>
 <a href="g.region.html">g.region</a>,
+<a href="r.mfilter.html">r.mfilter</a>,
 <a href="r.resample.html">r.resample</a>,
 <a href="r.resamp.interp.html">r.resamp.interp</a>,
 <a href="r.resamp.rst.html">r.resamp.rst</a>,
@@ -94,4 +95,4 @@ Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:30:10 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/raster/r.resamp.interp/main.c b/raster/r.resamp.interp/main.c
index 8967060..5f1960a 100644
--- a/raster/r.resamp.interp/main.c
+++ b/raster/r.resamp.interp/main.c
@@ -106,6 +106,18 @@ int main(int argc, char *argv[])
     /* set window to old map */
     Rast_get_cellhd(rastin->answer, "", &src_w);
 
+    if (G_projection() == PROJECTION_LL) {
+	/* try to shift source window to overlap with destination window */
+	while (src_w.west >= dst_w.east && src_w.east - 360.0 > dst_w.west) {
+	    src_w.east -= 360.0;
+	    src_w.west -= 360.0;
+	}
+	while (src_w.east <= dst_w.west && src_w.west + 360.0 < dst_w.east) {
+	    src_w.east += 360.0;
+	    src_w.west += 360.0;
+	}
+    }
+
     /* enlarge source window */
     {
 	double north = Rast_row_to_northing(0.5, &dst_w);
@@ -114,8 +126,13 @@ int main(int argc, char *argv[])
 	int r1 = (int)floor(Rast_northing_to_row(south, &src_w) - 0.5) + 3;
 	double west = Rast_col_to_easting(0.5, &dst_w);
 	double east = Rast_col_to_easting(dst_w.cols - 0.5, &dst_w);
+	/* do not use Rast_easting_to_col() because it does ll wrap */
+	/*
 	int c0 = (int)floor(Rast_easting_to_col(west, &src_w) - 0.5) - 2;
 	int c1 = (int)floor(Rast_easting_to_col(east, &src_w) - 0.5) + 3;
+	*/
+	int c0 = (int)floor(((west - src_w.west) / src_w.ew_res) - 0.5) - 2;
+	int c1 = (int)floor(((east - src_w.west) / src_w.ew_res) - 0.5) + 3;
 
 	src_w.south -= src_w.ns_res * (r1 - src_w.rows);
 	src_w.north += src_w.ns_res * (-r0);
diff --git a/raster/r.resamp.interp/r.resamp.interp.html b/raster/r.resamp.interp/r.resamp.interp.html
index a6bffa1..539958e 100644
--- a/raster/r.resamp.interp/r.resamp.interp.html
+++ b/raster/r.resamp.interp/r.resamp.interp.html
@@ -75,4 +75,4 @@ Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.resamp.rst/r.resamp.rst.html b/raster/r.resamp.rst/r.resamp.rst.html
index 4699617..5380928 100644
--- a/raster/r.resamp.rst/r.resamp.rst.html
+++ b/raster/r.resamp.rst/r.resamp.rst.html
@@ -156,4 +156,4 @@ analysis, Mathematical Geology No.25 p.657-667.
 of data, Journal of Computational Physics , 23, pp 93-123.
 <p>Wahba, G., 1990. Spline models for observational data, CNMS-NSF Regional
 Conference series in applied mathematics, 59, SIAM, Philadelphia, Pennsylvania.
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.resamp.stats/main.c b/raster/r.resamp.stats/main.c
index 207c16f..a63819c 100644
--- a/raster/r.resamp.stats/main.c
+++ b/raster/r.resamp.stats/main.c
@@ -40,7 +40,7 @@ static const struct menu
     {c_var,    w_var,    "variance", "variance value"},
     {c_stddev, w_stddev, "stddev",   "standard deviation"},
     {c_quant,  w_quant,  "quantile", "arbitrary quantile"},
-    {NULL, NULL, NULL}
+    {NULL, NULL, NULL, NULL}
 };
 
 static char *build_method_list(void)
@@ -100,7 +100,8 @@ static void resamp_unweighted(void)
     for (col = 0; col <= dst_w.cols; col++) {
 	double x = Rast_col_to_easting(col, &dst_w);
 
-	col_map[col] = (int)floor(Rast_easting_to_col(x, &src_w) + 0.5);
+	/* col_map[col] = (int)floor(Rast_easting_to_col(x, &src_w) + 0.5); */
+	col_map[col] = (int)floor((x - src_w.west) / src_w.ew_res + 0.5);
     }
 
     for (row = 0; row <= dst_w.rows; row++) {
@@ -115,7 +116,7 @@ static void resamp_unweighted(void)
 	int count = maprow1 - maprow0;
 	int i;
 
-	G_percent(row, dst_w.rows, 2);
+	G_percent(row, dst_w.rows, 4);
 
 	for (i = 0; i < count; i++)
 	    Rast_get_d_row(infile, bufs[i], maprow0 + i);
@@ -168,7 +169,8 @@ static void resamp_weighted(void)
     for (col = 0; col <= dst_w.cols; col++) {
 	double x = Rast_col_to_easting(col, &dst_w);
 
-	col_map[col] = Rast_easting_to_col(x, &src_w);
+	/* col_map[col] = Rast_easting_to_col(x, &src_w); */
+	col_map[col] = (x - src_w.west) / src_w.ew_res;
     }
 
     for (row = 0; row <= dst_w.rows; row++) {
@@ -185,7 +187,7 @@ static void resamp_weighted(void)
 	int count = maprow1 - maprow0;
 	int i;
 
-	G_percent(row, dst_w.rows, 2);
+	G_percent(row, dst_w.rows, 4);
 
 	for (i = 0; i < count; i++)
 	    Rast_get_d_row(infile, bufs[i], maprow0 + i);
@@ -302,15 +304,32 @@ int main(int argc, char *argv[])
 
     G_get_set_window(&dst_w);
 
-    /* set window to old map */
+    /* set source window to old map */
     Rast_get_cellhd(parm.rastin->answer, "", &src_w);
 
-    /* enlarge source window */
+    if (G_projection() == PROJECTION_LL) {
+	/* try to shift source window to overlap with destination window */
+	while (src_w.west >= dst_w.east && src_w.east - 360.0 > dst_w.west) {
+	    src_w.east -= 360.0;
+	    src_w.west -= 360.0;
+	}
+	while (src_w.east <= dst_w.west && src_w.west + 360.0 < dst_w.east) {
+	    src_w.east += 360.0;
+	    src_w.west += 360.0;
+	}
+    }
+
+    /* adjust source window to cover destination window */
     {
 	int r0 = (int)floor(Rast_northing_to_row(dst_w.north, &src_w));
 	int r1 = (int)ceil(Rast_northing_to_row(dst_w.south, &src_w));
+	/* do not use Rast_easting_to_col() because it does ll wrap */
+	/*
 	int c0 = (int)floor(Rast_easting_to_col(dst_w.west, &src_w));
 	int c1 = (int)ceil(Rast_easting_to_col(dst_w.east, &src_w));
+	*/
+	int c0 = (int)floor((dst_w.west - src_w.west) / src_w.ew_res);
+	int c1 = src_w.cols + (int)ceil((dst_w.east - src_w.east) / src_w.ew_res);
 
 	src_w.south -= src_w.ns_res * (r1 - src_w.rows);
 	src_w.north += src_w.ns_res * (-r0);
diff --git a/raster/r.resamp.stats/r.resamp.stats.html b/raster/r.resamp.stats/r.resamp.stats.html
index d90737e..d7467d4 100644
--- a/raster/r.resamp.stats/r.resamp.stats.html
+++ b/raster/r.resamp.stats/r.resamp.stats.html
@@ -59,4 +59,4 @@ Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.resample/r.resample.html b/raster/r.resample/r.resample.html
index 530995e..9c26d1a 100644
--- a/raster/r.resample/r.resample.html
+++ b/raster/r.resample/r.resample.html
@@ -51,4 +51,4 @@ Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.rescale.eq/r.rescale.eq.html b/raster/r.rescale.eq/r.rescale.eq.html
index 0bee9ec..17675c1 100644
--- a/raster/r.rescale.eq/r.rescale.eq.html
+++ b/raster/r.rescale.eq/r.rescale.eq.html
@@ -62,4 +62,4 @@ selected as the input range.
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2014-12-09 19:46:50 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 19:39:37 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/raster/r.rescale/r.rescale.html b/raster/r.rescale/r.rescale.html
index 6ef1b42..fedc1af 100644
--- a/raster/r.rescale/r.rescale.html
+++ b/raster/r.rescale/r.rescale.html
@@ -62,4 +62,4 @@ selected as the input range.
 Michael Shapiro,
 U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-05-03 19:10:00 +0200 (Tue, 03 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-03 19:09:18 +0200 (Tue, 03 May 2016) $</i>
diff --git a/raster/r.ros/main.c b/raster/r.ros/main.c
index a443b3e..3d8b675 100644
--- a/raster/r.ros/main.c
+++ b/raster/r.ros/main.c
@@ -757,8 +757,8 @@ int main(int argc, char *argv[])
 	    if (parm.slope->answer && parm.aspect->answer) {
 		phis =
 		    5.275 * pow(beta,
-				-0.3) * tan(0.01745 * slope[col]) *
-		    tan(0.01745 * slope[col]);
+				-0.3) * tan(M_D2R * slope[col]) *
+		    tan(M_D2R * slope[col]);
 	    }
 	    else
 		phis = 0.0;
@@ -767,13 +767,13 @@ int main(int argc, char *argv[])
 	     *vector adding for the effect of wind and slope*/
 	    if (parm.dir->answer && parm.aspect->answer) {
 		sin_fac =
-		    phiw * sin(0.01745 * dir[col]) +
-		    phis * sin(0.01745 * aspect[col]);
+		    phiw * sin(M_D2R * dir[col]) +
+		    phis * sin(M_D2R * aspect[col]);
 		cos_fac =
-		    phiw * cos(0.01745 * dir[col]) +
-		    phis * cos(0.01745 * aspect[col]);
+		    phiw * cos(M_D2R * dir[col]) +
+		    phis * cos(M_D2R * aspect[col]);
 		phi_ws = sqrt(sin_fac * sin_fac + cos_fac * cos_fac);
-		Rdir = atan2(sin_fac, cos_fac) / 0.01745;
+		Rdir = atan2(sin_fac, cos_fac) / M_D2R;
 	    }
 	    else if (parm.dir->answer && !(parm.aspect->answer)) {
 		phi_ws = phiw;
diff --git a/raster/r.ros/r.ros.html b/raster/r.ros/r.ros.html
index 805c57a..0525d16 100644
--- a/raster/r.ros/r.ros.html
+++ b/raster/r.ros/r.ros.html
@@ -146,4 +146,4 @@ Sample data download: <a href="http://grass.osgeo.org/download/sample-data/">fir
 
 Jianping Xu, Center for Remote Sensing and Spatial Analysis, Rutgers University.
 
-<p><em>Last changed: $Date: 2014-10-27 16:39:22 +0100 (Mon, 27 Oct 2014) $</em>
+<p><em>Last changed: $Date: 2014-10-27 16:35:33 +0100 (Mon, 27 Oct 2014) $</em>
diff --git a/raster/r.ros/spot_dist.c b/raster/r.ros/spot_dist.c
index 0bda55c..7b876cc 100644
--- a/raster/r.ros/spot_dist.c
+++ b/raster/r.ros/spot_dist.c
@@ -36,7 +36,7 @@
 #include <grass/raster.h>
 
 #define DATA(map, r, c) (map)[(r) * ncols + (c)]
-#define	DEG2RAD		0.017453292
+#define	DEG2RAD		M_D2R
 /*#define DEBUG */
 
 
diff --git a/raster/r.series.accumulate/r.series.accumulate.html b/raster/r.series.accumulate/r.series.accumulate.html
index 3087d9a..d28a797 100644
--- a/raster/r.series.accumulate/r.series.accumulate.html
+++ b/raster/r.series.accumulate/r.series.accumulate.html
@@ -148,4 +148,4 @@ r.series.accumulate in=MOD11A1.Day,MOD11A1.Night,MYD11A1.Day,MYD11A1.Night out=M
 
 Markus Metz and Soeren Gebbert (based on r.series)
 
-<p><i>Last changed: $Date: 2014-10-08 21:56:35 +0200 (Wed, 08 Oct 2014) $</i>
+<p><i>Last changed: $Date: 2014-10-08 21:55:23 +0200 (Wed, 08 Oct 2014) $</i>
diff --git a/raster/r.series.interp/r.series.interp.html b/raster/r.series.interp/r.series.interp.html
index 1ad81e9..c92b9c6 100644
--- a/raster/r.series.interp/r.series.interp.html
+++ b/raster/r.series.interp/r.series.interp.html
@@ -62,4 +62,4 @@ The resulting maps will have the values 200, 300 and 400.
 
 Sören Gebbert
 
-<p><i>Last changed: $Date: 2014-09-24 15:20:45 +0200 (Wed, 24 Sep 2014) $</i>
+<p><i>Last changed: $Date: 2014-09-24 15:16:23 +0200 (Wed, 24 Sep 2014) $</i>
diff --git a/raster/r.series/r.series.html b/raster/r.series/r.series.html
index f3a65ca..18d7e9a 100644
--- a/raster/r.series/r.series.html
+++ b/raster/r.series/r.series.html
@@ -213,4 +213,4 @@ r.series file=mapnames.txt \
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2016-01-29 10:56:07 +0100 (Fri, 29 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-29 10:29:57 +0100 (Fri, 29 Jan 2016) $</i>
diff --git a/raster/r.sim/r.sim.sediment/r.sim.sediment.html b/raster/r.sim/r.sim.sediment/r.sim.sediment.html
index 76943a5..f36fe6e 100644
--- a/raster/r.sim/r.sim.sediment/r.sim.sediment.html
+++ b/raster/r.sim/r.sim.sediment/r.sim.sediment.html
@@ -96,5 +96,5 @@ Neteler, M. and Mitasova, H., 2008, Open Source GIS: A GRASS GIS Approach. Third
 The International Series in Engineering and Computer Science: Volume 773. Springer New York Inc, p. 406.
 <p>
 <p><br>
-Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $
+Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $
 
diff --git a/raster/r.sim/r.sim.water/r.sim.water.html b/raster/r.sim/r.sim.water/r.sim.water.html
index a00b72e..24619cb 100644
--- a/raster/r.sim/r.sim.water/r.sim.water.html
+++ b/raster/r.sim/r.sim.water/r.sim.water.html
@@ -235,4 +235,4 @@ Chris Thaxton<br>
 North Carolina State University<br>
 <i><a href="mailto:csthaxto at unity.ncsu.edu">csthaxto at unity.ncsu.edu</a></i>
 
-<p><i>Last changed: $Date: 2016-09-20 11:20:55 +0200 (Tue, 20 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-20 11:20:11 +0200 (Tue, 20 Sep 2016) $</i>
diff --git a/raster/r.slope.aspect/r.slope.aspect.html b/raster/r.slope.aspect/r.slope.aspect.html
index 9ba677d..59940f2 100644
--- a/raster/r.slope.aspect/r.slope.aspect.html
+++ b/raster/r.slope.aspect/r.slope.aspect.html
@@ -271,4 +271,4 @@ Michael Shapiro, U.S.Army Construction Engineering Research Laboratory<br>
 Olga Waupotitsch, U.S.Army Construction Engineering Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2015-08-12 11:48:51 +0200 (Wed, 12 Aug 2015) $</i>
+<i>Last changed: $Date: 2015-08-12 11:45:29 +0200 (Wed, 12 Aug 2015) $</i>
diff --git a/raster/r.slope.aspect/testsuite/test_r_slope_aspect.py b/raster/r.slope.aspect/testsuite/test_r_slope_aspect.py
index d7b5a47..5a2611d 100644
--- a/raster/r.slope.aspect/testsuite/test_r_slope_aspect.py
+++ b/raster/r.slope.aspect/testsuite/test_r_slope_aspect.py
@@ -1,4 +1,5 @@
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import call_module
 
 SMALL_MAP = """\
@@ -16,7 +17,7 @@ cols:    5
 100.0 150.0 150.0 100.0 100.0
 """
 
-class TestSlopeAspect(grass.gunittest.TestCase):
+class TestSlopeAspect(TestCase):
 
     def test_limits(self):
         slope = 'limits_slope'
@@ -39,7 +40,7 @@ class TestSlopeAspect(grass.gunittest.TestCase):
                                 msg="Aspect in degrees must be between 0 and 360")
 
 
-class TestSlopeAspectAgainstReference(grass.gunittest.TestCase):
+class TestSlopeAspectAgainstReference(TestCase):
     """
 
     Data created using::
@@ -102,7 +103,7 @@ class TestSlopeAspectAgainstReference(grass.gunittest.TestCase):
                                        precision=self.precision)
 
 
-class TestSlopeAspectAgainstItself(grass.gunittest.TestCase):
+class TestSlopeAspectAgainstItself(TestCase):
 
     precision = 0.0000001
 
@@ -136,7 +137,7 @@ class TestSlopeAspectAgainstItself(grass.gunittest.TestCase):
 
 
 # TODO: implement this class
-class TestExtremes(grass.gunittest.TestCase):
+class TestExtremes(TestCase):
 
     def setUp(self):
         self.use_temp_region()
@@ -160,4 +161,4 @@ class TestExtremes(grass.gunittest.TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/raster/r.solute.transport/r.solute.transport.html b/raster/r.solute.transport/r.solute.transport.html
index 5b1acac..c14ce3c 100644
--- a/raster/r.solute.transport/r.solute.transport.html
+++ b/raster/r.solute.transport/r.solute.transport.html
@@ -154,4 +154,4 @@ Sören Gebbert
 at Technical University Berlin in Germany.
 
 
-<p><i>Last changed: $Date: 2016-04-09 18:46:53 +0200 (Sat, 09 Apr 2016) $</i>
+<p><i>Last changed: $Date: 2016-04-09 18:43:25 +0200 (Sat, 09 Apr 2016) $</i>
diff --git a/raster/r.spread/r.spread.html b/raster/r.spread/r.spread.html
index 8958966..1fe8d09 100644
--- a/raster/r.spread/r.spread.html
+++ b/raster/r.spread/r.spread.html
@@ -138,4 +138,4 @@ Sample data download: <a href="http://grass.osgeo.org/download/sample-data/">fir
 Jianping Xu and Richard G. Lathrop, Jr., Center for Remote Sensing and
 Spatial Analysis, Rutgers University.
 
-<p><em>Last changed: $Date: 2014-10-27 16:39:22 +0100 (Mon, 27 Oct 2014) $</em>
+<p><em>Last changed: $Date: 2014-10-27 16:35:33 +0100 (Mon, 27 Oct 2014) $</em>
diff --git a/raster/r.spreadpath/r.spreadpath.html b/raster/r.spreadpath/r.spreadpath.html
index 23dd884..887f230 100644
--- a/raster/r.spreadpath/r.spreadpath.html
+++ b/raster/r.spreadpath/r.spreadpath.html
@@ -64,4 +64,4 @@ Sample data download: <a href="http://grass.osgeo.org/download/sample-data/">fir
 Jianping Xu and Richard G. Lathrop, Jr., Center for Remote Sensing and
 Spatial Analysis, Rutgers University.
 
-<p><em>Last changed: $Date: 2014-11-28 16:46:08 +0100 (Fri, 28 Nov 2014) $</em>
+<p><em>Last changed: $Date: 2014-11-28 16:43:22 +0100 (Fri, 28 Nov 2014) $</em>
diff --git a/raster/r.statistics/r.statistics.html b/raster/r.statistics/r.statistics.html
index 22f276c..52656ab 100644
--- a/raster/r.statistics/r.statistics.html
+++ b/raster/r.statistics/r.statistics.html
@@ -73,4 +73,4 @@ r.univar fieldelev
 <h2>AUTHOR</h2>
 Martin Schroeder, Geographisches Institut Heidelberg, Germany
 
-<p><i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/raster/r.stats.quantile/r.stats.quantile.html b/raster/r.stats.quantile/r.stats.quantile.html
index 17d1e36..a1cea5c 100644
--- a/raster/r.stats.quantile/r.stats.quantile.html
+++ b/raster/r.stats.quantile/r.stats.quantile.html
@@ -27,4 +27,4 @@ which are absent from
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-08-07 23:29:36 +0200 (Sun, 07 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-07 23:28:59 +0200 (Sun, 07 Aug 2016) $</i>
diff --git a/raster/r.stats.zonal/r.stats.zonal.html b/raster/r.stats.zonal/r.stats.zonal.html
index 22022c2..119cc47 100644
--- a/raster/r.stats.zonal/r.stats.zonal.html
+++ b/raster/r.stats.zonal/r.stats.zonal.html
@@ -23,4 +23,4 @@ quantiles. For this, see <em>r.stats.quantile</em>.
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-08-07 23:29:36 +0200 (Sun, 07 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-07 23:28:59 +0200 (Sun, 07 Aug 2016) $</i>
diff --git a/raster/r.stats/r.stats.html b/raster/r.stats/r.stats.html
index e08d571..1e8e961 100644
--- a/raster/r.stats/r.stats.html
+++ b/raster/r.stats/r.stats.html
@@ -170,4 +170,4 @@ Michael Shapiro, U.S. Army Construction Engineering Research Laboratory<br>
 Sort option by Martin Landa, Czech Technical University in Prague, 2013
 
 <p>
-<i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/raster/r.stream.extract/do_astar.c b/raster/r.stream.extract/do_astar.c
index f3a3dcc..bb5d374 100644
--- a/raster/r.stream.extract/do_astar.c
+++ b/raster/r.stream.extract/do_astar.c
@@ -4,8 +4,8 @@
 #include <grass/glocale.h>
 #include "local_proto.h"
 
-#define GET_PARENT(c) ((((c) - 2) >> 3) + 1)
-#define GET_CHILD(p) (((p) << 3) - 6)
+#define GET_PARENT(c) ((((GW_LARGE_INT)(c) - 2) >> 3) + 1)
+#define GET_CHILD(p) (((GW_LARGE_INT)(p) << 3) - 6)
 
 HEAP_PNT heap_drop(void);
 static double get_slope(CELL, CELL, double);
@@ -126,7 +126,7 @@ int do_astar(void)
 		else if (!is_worked) {
 		    if (FLAG_GET(af.flag, EDGEFLAG)) {
 			/* neighbour is edge in list, not yet worked */
-			if (af.asp < 0  && slope[ct_dir] > 0) {
+			if (af.asp < 0 && slope[ct_dir] > 0) {
 			    /* adjust flow direction for edge cell */
 			    af.asp = drain[r_nbr - r + 1][c_nbr - c + 1];
 			    seg_put(&aspflag, (char *)&af, r_nbr, c_nbr);
diff --git a/raster/r.stream.extract/r.stream.extract.html b/raster/r.stream.extract/r.stream.extract.html
index 3eceff2..da70597 100644
--- a/raster/r.stream.extract/r.stream.extract.html
+++ b/raster/r.stream.extract/r.stream.extract.html
@@ -93,6 +93,12 @@ When an original flow accumulation map is adjusted or weighed, the
 adjustment or weighing should not convert valid accumulation values to 
 NULL (nodata) values.
 
+<p>
+In case of getting the error message
+<tt>ERROR: Accumulation raster map is NULL but elevation map is not NULL</tt>
+the computational region must be carefully adjusted to exclude NULL pixels
+in the accumulation raster map prior to stream extraction.
+
 <h3>Weighed flow accumulation</h3>
 
 Flow accumulation can be calculated first, e.g. with
@@ -110,7 +116,7 @@ to smaller than 1 in dry areas and larger than 1 in wet areas.
 <p>
 Another possibility is to restrict channel initiation to valleys
 determined from terrain morphology. Valleys can be determined with
-<em><a href="r.param.scale.html">r.param.scale</a></em> <tt>param=crosc</tt>
+<em><a href="r.param.scale.html">r.param.scale</a></em> <tt>method=crosc</tt>
 (cross-sectional or tangential curvature). Curvature values < 0
 indicate concave features, i.e. valleys. The size of the processing
 window determines whether narrow or broad valleys will be identified
@@ -166,18 +172,18 @@ g.region -p raster=elev_ned_30m at PERMANENT
 r.watershed ele=elev_ned_30m at PERMANENT acc=elevation.10m.acc
 
 # curvature to get narrow valleys
-r.param.scale input=elev_ned_30m at PERMANENT output=tangential_curv_5 size=5 param=crosc
+r.param.scale input=elev_ned_30m at PERMANENT output=tangential_curv_5 size=5 method=crosc
 
 # curvature to get a bit broader valleys
-r.param.scale input=elev_ned_30m at PERMANENT output=tangential_curv_7 size=7 param=crosc
+r.param.scale input=elev_ned_30m at PERMANENT output=tangential_curv_7 size=7 method=crosc
 
 # curvature to get broad valleys
-r.param.scale input=elev_ned_30m at PERMANENT output=tangential_curv_11 size=11 param=crosc
+r.param.scale input=elev_ned_30m at PERMANENT output=tangential_curv_11 size=11 method=crosc
 
 # create weight map
-r.mapcalc "weight = if(tangential_curv_5 < 0, -100 * tangential_curv_5, \
-                    if(tangential_curv_7 < 0, -100 * tangential_curv_7, \
-		    if(tangential_curv_11 < 0, -100 * tangential_curv_11, 0.000001)))"
+r.mapcalc "weight = if(tangential_curv_5 < 0, -100 * tangential_curv_5, \
+                    if(tangential_curv_7 < 0, -100 * tangential_curv_7, \
+		    if(tangential_curv_11 < 0, -100 * tangential_curv_11, 0.000001)))"
 
 # weigh accumulation map
 r.mapcalc expr="elev_ned_30m.acc.weighed = elev_ned_30m.acc * weight"
@@ -186,24 +192,54 @@ r.mapcalc expr="elev_ned_30m.acc.weighed = elev_ned_30m.acc * weight"
 r.colors map=elev_ned_30m.acc.weighed raster=elev_ned_30m.acc
 </pre></div>
 
+<p>
+<a href="r_stream_extract_weights_zoom.png">
+<img src="r_stream_extract_weights_zoom.png" width="400"></a><br>
+Weight map (spatial subset with lake in the southern half)
+
+<p>
+<a href="r_stream_extract_accum_orig_zoom.png">
+<img src="r_stream_extract_accum_orig_zoom.png" width="400"></a><br>
+Original flow accumulation map (spatial subset with lake in the southern half)
+
+<p>
+<a href="r_stream_extract_accum_weighted_zoom.png">
+<img src="r_stream_extract_accum_weighted_zoom.png" width="400"></a><br>
+Weighed flow accumulation map (spatial subset with lake in the southern half)
+<p>
+
 Display both the original and the weighed accumulation map.
 Compare them and proceed if the weighed accumulation map makes sense.
 
 <div class="code"><pre>
-# extract streams
-r.stream.extract elevation=elev_ned_30m at PERMANENT \
-                 accumulation=elev_ned_30m.acc.weighed \
-		 threshold=1000 \
-		 stream_rast=elev_ned_30m.streams
-
 # extract streams using the original accumulation map
 r.stream.extract elevation=elev_ned_30m at PERMANENT \
                  accumulation=elev_ned_30m.acc \
 		 threshold=1000 \
 		 stream_rast=elev_ned_30m.streams.noweight
+
+# extract streams from weighed map
+r.stream.extract elevation=elev_ned_30m at PERMANENT \
+                 accumulation=elev_ned_30m.acc.weighed \
+		 threshold=1000 \
+		 stream_rast=elev_ned_30m.streams
 </pre></div>
 
+<p>
 Now display both stream maps and decide which one is more realistic.
+<!-- 
+d.shade color=elev_ned_30m_streams_noweight shade=elevation_shade brighten=20
+-->
+<p>
+<a href="r_stream_extract_streams_noweight.png">
+<img src="r_stream_extract_streams_noweight.png" width="400"></a><br>
+Extracted streams from original flow accumulation map
+
+<p>
+<a href="r_stream_extract_streams_weighed.png">
+<img src="r_stream_extract_streams_weighed.png" width="400"></a><br>
+Extracted streams from weighed flow accumulation map
+
 
 <h2>REFERENCES</h2>
 
@@ -248,7 +284,8 @@ also <a href="http://grasswiki.osgeo.org/wiki/R.stream.*_modules">r.streams.*
 modules</a> wiki page.
 
 <h2>AUTHOR</h2>
+
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-05-16 12:23:50 +0200 (Mon, 16 May 2016) $</i>
+<i>Last changed: $Date: 2016-10-03 23:59:37 +0200 (Mon, 03 Oct 2016) $</i>
diff --git a/raster/r.stream.extract/r_stream_extract_accum_orig_zoom.png b/raster/r.stream.extract/r_stream_extract_accum_orig_zoom.png
new file mode 100644
index 0000000..3e0b04e
Binary files /dev/null and b/raster/r.stream.extract/r_stream_extract_accum_orig_zoom.png differ
diff --git a/raster/r.stream.extract/r_stream_extract_accum_weighted_zoom.png b/raster/r.stream.extract/r_stream_extract_accum_weighted_zoom.png
new file mode 100644
index 0000000..721cccf
Binary files /dev/null and b/raster/r.stream.extract/r_stream_extract_accum_weighted_zoom.png differ
diff --git a/raster/r.stream.extract/r_stream_extract_streams_noweight.png b/raster/r.stream.extract/r_stream_extract_streams_noweight.png
new file mode 100644
index 0000000..c20d691
Binary files /dev/null and b/raster/r.stream.extract/r_stream_extract_streams_noweight.png differ
diff --git a/raster/r.stream.extract/r_stream_extract_streams_weighed.png b/raster/r.stream.extract/r_stream_extract_streams_weighed.png
new file mode 100644
index 0000000..2b680ea
Binary files /dev/null and b/raster/r.stream.extract/r_stream_extract_streams_weighed.png differ
diff --git a/raster/r.stream.extract/r_stream_extract_weights_zoom.png b/raster/r.stream.extract/r_stream_extract_weights_zoom.png
new file mode 100644
index 0000000..93f5a73
Binary files /dev/null and b/raster/r.stream.extract/r_stream_extract_weights_zoom.png differ
diff --git a/raster/r.sun/main.c b/raster/r.sun/main.c
index 2f494cc..057bfa6 100644
--- a/raster/r.sun/main.c
+++ b/raster/r.sun/main.c
@@ -642,18 +642,35 @@ int main(int argc, char *argv[])
      *    G_fatal_error("If you want to use a time interval both the start and end times must be defined.\n");
      * }
      */
-    if (parm.linkein->answer == NULL)
+    if (parm.linkein->answer == NULL){
 	sscanf(parm.lin->answer, "%lf", &singleLinke);
-    if (parm.albedo->answer == NULL)
+        G_message(_("Using Linke constant: %lf"), singleLinke);
+    } else {
+        G_message(_("Using Linke map <%s>"), parm.linkein->answer);
+    }
+
+    if (parm.albedo->answer == NULL){
 	sscanf(parm.alb->answer, "%lf", &singleAlbedo);
+        G_message(_("Using albedo constant: %lf"), singleAlbedo);
+    } else {
+        G_message(_("Using albedo map <%s>"), parm.albedo->answer);
+    }
 
-    if (parm.slopein->answer == NULL)
+    if (parm.slopein->answer == NULL){
 	sscanf(parm.slope->answer, "%lf", &singleSlope);
-    singleSlope *= deg2rad;
+        G_message(_("Using slope constant: %lf"), singleSlope);
+        singleSlope *= deg2rad;
+    } else {
+        G_message(_("Using slope map <%s>"), parm.slopein->answer);
+    }
 
-    if (parm.aspin->answer == NULL)
+    if (parm.aspin->answer == NULL){
 	sscanf(parm.aspect->answer, "%lf", &singleAspect);
-    singleAspect *= deg2rad;
+        G_message(_("Using aspect constant: %lf"), singleAspect);
+        singleAspect *= deg2rad;
+    } else {
+        G_message(_("Using aspect map <%s>"), parm.aspin->answer);
+    }
 
     if (parm.coefbh->answer == NULL)
 	cbh = BSKY;
diff --git a/raster/r.sun/r.sun.html b/raster/r.sun/r.sun.html
index b407a8b..b96fb38 100644
--- a/raster/r.sun/r.sun.html
+++ b/raster/r.sun/r.sun.html
@@ -292,7 +292,7 @@ d.rast.leg b172
 d.rast.leg it172
 </pre></div>
 
-We can compute the day of year from a specific date in Python shell:
+We can compute the day of year from a specific date in Python:
 <div class="code"><pre>
 >>> import datetime
 >>> datetime.datetime(2014, 6, 21).timetuple().tm_yday
@@ -381,4 +381,4 @@ Thomas Huld, JRC, Italy <br>
 </address>
 
 <p>
-<i>Last changed: $Date: 2015-12-01 17:41:11 +0100 (Tue, 01 Dec 2015) $</i> 
+<i>Last changed: $Date: 2016-02-19 02:42:11 +0100 (Fri, 19 Feb 2016) $</i> 
diff --git a/raster/r.sunhours/r.sunhours.html b/raster/r.sunhours/r.sunhours.html
index 1318289..062acec 100644
--- a/raster/r.sunhours/r.sunhours.html
+++ b/raster/r.sunhours/r.sunhours.html
@@ -69,4 +69,4 @@ algorithm.
 
 Markus Metz
 
-<p><i>Last changed: $Date: 2014-12-23 15:09:20 +0100 (Tue, 23 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-23 15:08:07 +0100 (Tue, 23 Dec 2014) $</i>
diff --git a/raster/r.sunmask/r.sunmask.html b/raster/r.sunmask/r.sunmask.html
index 9748caf..66e10fe 100644
--- a/raster/r.sunmask/r.sunmask.html
+++ b/raster/r.sunmask/r.sunmask.html
@@ -114,4 +114,4 @@ Janne Soimasuo, Finland 1994<br>
 update to FP by Huidae Cho 2001<br>
 added solpos algorithm feature by Markus Neteler 2001
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.sunmask/solpos00.c b/raster/r.sunmask/solpos00.c
index 2c3afe0..3c330a0 100644
--- a/raster/r.sunmask/solpos00.c
+++ b/raster/r.sunmask/solpos00.c
@@ -127,6 +127,7 @@ static int month_days[2][13] = { {0, 0, 31, 59, 90, 120, 151,
 
 		   /* cumulative number of days prior to beginning of month */
 
+/* TODO: the "degrad" - "raddeg" variable names are flipped - typo or severe bug?? */
 static float degrad = 57.295779513;	/* converts from radians to degrees */
 static float raddeg = 0.0174532925;	/* converts from degrees to radians */
 
diff --git a/raster/r.support/main.c b/raster/r.support/main.c
index 22ceda6..19b89ac 100644
--- a/raster/r.support/main.c
+++ b/raster/r.support/main.c
@@ -154,8 +154,10 @@ int main(int argc, char *argv[])
 	strncpy(title, title_opt->answer, MAX_TITLE_LEN);
 	title[MAX_TITLE_LEN - 1] = '\0';	/* strncpy doesn't null terminate oversized input */
 	G_strip(title);
-	G_debug(3, "map title= [%s]  (%d chars)", title, strlen(title));
-	Rast_put_cell_title(raster->answer, title);
+	G_debug(3, "map title= [%s]  (%li chars)", title, strlen(title));
+	Rast_read_history(raster->answer, "", &hist);
+	Rast_set_history(&hist, HIST_TITLE, title);
+	Rast_write_history(raster->answer, &hist);
     }
 
     if (save_opt->answer) {
@@ -271,7 +273,7 @@ int main(int argc, char *argv[])
     if (null_flag->answer) {
 	unsigned char *null_bits;
 	int row, col;
-	int null_fd;
+	int fd;
 
 	if (is_reclass)
 	    G_fatal_error(_("[%s] is a reclass of another map. Exiting."),
@@ -283,22 +285,22 @@ int main(int argc, char *argv[])
 	    null_bits[col] = 0;
 
 	/* Open null file for writing */
-	null_fd = G_open_new_misc("cell_misc", "null", raster->answer);
+	Rast_set_window(&cellhd);
+	fd = Rast__open_null_write(raster->answer);
 
 	G_message(_("Writing new null file for [%s]... "), raster->answer);
 	for (row = 0; row < cellhd.rows; row++) {
 	    G_percent(row, cellhd.rows, 1);
-	    Rast__write_null_bits(null_fd, null_bits, row, cellhd.cols, 0);
+	    Rast__write_null_bits(fd, null_bits);
 	}
 	G_percent(row, cellhd.rows, 1);
 
 	/* Cleanup */
-	close(null_fd);
+	Rast__close_null(fd);
 	G_free(null_bits);
     }
 
     if (del_flag->answer) {
-	int null_fd;
 	char path[GPATH_MAX];
 
 	if (is_reclass)
@@ -308,10 +310,10 @@ int main(int argc, char *argv[])
 	/* Write a file of no-nulls */
 	G_message(_("Removing null file for [%s]...\n"), raster->answer);
 
-	null_fd = G_open_new_misc("cell_misc", "null", raster->answer);
 	G_file_name_misc(path, "cell_misc", "null", raster->answer, G_mapset());
 	unlink(path);
-	close(null_fd);
+	G_file_name_misc(path, "cell_misc", "null2", raster->answer, G_mapset());
+	unlink(path);
 
 	G_done_msg(_("Done."));
     }
diff --git a/raster/r.support/r.support.html b/raster/r.support/r.support.html
index e1c4390..9472b05 100644
--- a/raster/r.support/r.support.html
+++ b/raster/r.support/r.support.html
@@ -36,5 +36,5 @@ Micharl Shapiro, CERL: Original author<br>
 M. Hamish Bowman: command line enhancements<br>
 Markus Neteler: category copy from other map
 
-<p><i>Last changed: $Date: 2011-11-08 22:24:20 +0100 (Tue, 08 Nov 2011) $</i>
+<p><i>Last changed: $Date: 2011-11-08 13:24:20 -0800 (Tue, 08 Nov 2011) $</i>
 
diff --git a/raster/r.surf.area/r.surf.area.html b/raster/r.surf.area/r.surf.area.html
index d68c9d9..920aa0c 100644
--- a/raster/r.surf.area/r.surf.area.html
+++ b/raster/r.surf.area/r.surf.area.html
@@ -75,4 +75,4 @@ G. Miller (October 17, 2000)
 Updated for GRASS 7, and units option by Martin Landa, Czech Technical
 University in Prague, Czech Republic (October 2011)
 
-<p><i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/raster/r.surf.contour/r.surf.contour.html b/raster/r.surf.contour/r.surf.contour.html
index 1e13fc8..6271715 100644
--- a/raster/r.surf.contour/r.surf.contour.html
+++ b/raster/r.surf.contour/r.surf.contour.html
@@ -114,4 +114,4 @@ Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation
 
 Chuck Ehlschlaeger, U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.surf.fractal/r.surf.fractal.html b/raster/r.surf.fractal/r.surf.fractal.html
index c8ad2d6..4b985c5 100644
--- a/raster/r.surf.fractal/r.surf.fractal.html
+++ b/raster/r.surf.fractal/r.surf.fractal.html
@@ -109,4 +109,4 @@ Midlands Regional Research Laboratory (ASSIST),
 University of Leicester
 
 <p>
-<i>Last changed: $Date: 2015-07-20 10:49:51 +0200 (Mon, 20 Jul 2015) $</i>
+<i>Last changed: $Date: 2015-07-20 10:45:41 +0200 (Mon, 20 Jul 2015) $</i>
diff --git a/raster/r.surf.gauss/r.surf.gauss.html b/raster/r.surf.gauss/r.surf.gauss.html
index dda91e2..5f07a36 100644
--- a/raster/r.surf.gauss/r.surf.gauss.html
+++ b/raster/r.surf.gauss/r.surf.gauss.html
@@ -36,4 +36,4 @@ r.univar gauss
 Jo Wood, <a href="http://www.geog.le.ac.uk/assist/index.html">ASSIST's home</a>
 
 <p>
-<i>Last changed: $Date: 2014-12-27 23:51:00 +0100 (Sat, 27 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-27 23:28:56 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/raster/r.surf.idw/r.surf.idw.html b/raster/r.surf.idw/r.surf.idw.html
index 7299d0f..897724c 100644
--- a/raster/r.surf.idw/r.surf.idw.html
+++ b/raster/r.surf.idw/r.surf.idw.html
@@ -78,6 +78,29 @@ the input raster map to analyze the distribution of interpolation error.
 This procedure may be helpful in choosing the number of nearest neighbors
 considered for surface generation.
 
+<!-- requires https://trac.osgeo.org/grass/ticket/2672 to be fixed:
+
+<h2>EXAMPLE</h2>
+
+Interpolation of raster surface from randomly sampled vector elevation
+points (North Carolina sample dataset region):
+
+<div class="code"><pre>
+g.region vector=elev_lid792_randpts res=1 -p
+# rasterize points
+v.to.rast input=elev_lid792_randpts use=attr attribute_column=value \
+          output=elev_lid792_randpts_1m
+# interpolation DEM
+r.surf.idw input=elev_lid792_randpts_1m output=elev_surf_1m_idw
+
+# validate: differences to original DEM
+r.mapcalc "elev_diff = elev_lid792_1m - elev_surf_1m_idw"
+r.colors map=elev_diff color=differences
+</pre></div>
+-->
+
+<h2>KNOWN ISSUES</h2>
+Module <em>r.surf.idw</em> works only for integer (CELL) raster maps.
 
 <h2>SEE ALSO</h2>
 
@@ -102,4 +125,4 @@ U.S. EPA Environmental Research Laboratory <br>
 Corvallis, OR 97333 
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/raster/r.surf.random/r.surf.random.html b/raster/r.surf.random/r.surf.random.html
index a383ac7..9b6631d 100644
--- a/raster/r.surf.random/r.surf.random.html
+++ b/raster/r.surf.random/r.surf.random.html
@@ -46,4 +46,4 @@ University of Leicester<br>
 <br><a href="http://www.geog.le.ac.uk/assist/index.html">ASSIST's home</a>
 -->
 
-<p><i>Last changed: $Date: 2016-06-02 22:50:01 +0200 (Thu, 02 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-02 22:49:26 +0200 (Thu, 02 Jun 2016) $</i>
diff --git a/raster/r.terraflow/grass2str.h b/raster/r.terraflow/grass2str.h
index f7616f9..fc806ec 100644
--- a/raster/r.terraflow/grass2str.h
+++ b/raster/r.terraflow/grass2str.h
@@ -141,7 +141,7 @@ cell2stream(char* cellname, elevation_type T_max_value, long* nodata_count) {
   /* close map files */
   Rast_close (infd);
 
-  G_debug(3, "nrows=%d   ncols=%d    stream_len()=%"PRI_OFF_T, nrows, ncols,
+  G_debug(3, "nrows=%d   ncols=%d    stream_len()=%" PRI_OFF_T, nrows, ncols,
 		str->stream_len());  
   assert((off_t) nrows * ncols == str->stream_len());
   rt_stop(rt);
diff --git a/raster/r.terraflow/r.terraflow.html b/raster/r.terraflow/r.terraflow.html
index 6f8fcc8..e237053 100644
--- a/raster/r.terraflow/r.terraflow.html
+++ b/raster/r.terraflow/r.terraflow.html
@@ -256,4 +256,4 @@ r.terraflow elev=elevation.10m filled=elevation10m.filled \
        Systems</em>, 7(4):283-313, December 2003.
 </ol>
 
-<p><i>Last changed: $Date: 2015-01-14 09:26:47 +0100 (Wed, 14 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-14 09:26:25 +0100 (Wed, 14 Jan 2015) $</i>
diff --git a/raster/r.texture/r.texture.html b/raster/r.texture/r.texture.html
index 97353b5..b745b8c 100644
--- a/raster/r.texture/r.texture.html
+++ b/raster/r.texture/r.texture.html
@@ -164,4 +164,4 @@ of <a href="http://netpbm.sourceforge.net/doc/pgmtexture.html">pgmtexture</a>.
 C. Basco -  RCOST (Research Centre on Software Technology - Viale Traiano - 82100 Benevento)<br>
 M. Ceccarelli - Facolta di Scienze, Universita del Sannio, Benevento
 
-<p><i>Last changed: $Date: 2015-12-03 17:34:44 +0100 (Thu, 03 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-12-03 17:34:13 +0100 (Thu, 03 Dec 2015) $</i>
diff --git a/raster/r.thin/r.thin.html b/raster/r.thin/r.thin.html
index 5e71eaf..d9585ea 100644
--- a/raster/r.thin/r.thin.html
+++ b/raster/r.thin/r.thin.html
@@ -127,4 +127,4 @@ Olga Waupotitsch, U.S.Army Construction Engineering Research Laboratory
 <p>The code for finding the bounding box as well as input/output code
 was written by Mike Baba (DBA Systems, 1990) and Jean Ezell (USACERL, 1988).
 
-<p><i>Last changed: $Date: 2015-04-20 16:09:08 +0200 (Mon, 20 Apr 2015) $</i>
+<p><i>Last changed: $Date: 2015-04-20 16:08:53 +0200 (Mon, 20 Apr 2015) $</i>
diff --git a/raster/r.thin/thin_lines.c b/raster/r.thin/thin_lines.c
index c41b81e..95010ec 100644
--- a/raster/r.thin/thin_lines.c
+++ b/raster/r.thin/thin_lines.c
@@ -26,7 +26,6 @@
 #define false 0
 #define DELETED_PIX   9999
 
-extern char *error_prefix;
 static char *work_file_name;
 static int n_rows, n_cols, pad_size;
 static int box_right, box_left, box_top, box_bottom;
diff --git a/raster/r.tile/r.tile.html b/raster/r.tile/r.tile.html
index c6b67db..ec04861 100644
--- a/raster/r.tile/r.tile.html
+++ b/raster/r.tile/r.tile.html
@@ -42,4 +42,4 @@ elev_tile-000-000, elev_tile-000-001, elev_tile-001-000, ...).
 
 Glynn Clements
 
-<p><i>Last changed: $Date: 2016-06-26 01:34:13 +0200 (Sun, 26 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-26 01:34:50 +0200 (Sun, 26 Jun 2016) $</i>
diff --git a/raster/r.timestamp/r.timestamp.html b/raster/r.timestamp/r.timestamp.html
index 1337e27..adf4112 100644
--- a/raster/r.timestamp/r.timestamp.html
+++ b/raster/r.timestamp/r.timestamp.html
@@ -141,4 +141,4 @@ Spaces in the timestamp value are required.
 
 Michael Shapiro, U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-22 15:24:03 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/raster/r.to.rast3/r.to.rast3.html b/raster/r.to.rast3/r.to.rast3.html
index 96795d1..9458c06 100644
--- a/raster/r.to.rast3/r.to.rast3.html
+++ b/raster/r.to.rast3/r.to.rast3.html
@@ -58,4 +58,4 @@ r.to.rast3 input=prec_1,prec_2,prec_3 output=new_3dmap
 <h2>AUTHOR</h2>
 Soeren Gebbert
 
-<p><i>Last changed: $Date: 2015-03-20 21:25:58 +0100 (Fri, 20 Mar 2015) $</i>
+<p><i>Last changed: $Date: 2015-03-20 21:25:22 +0100 (Fri, 20 Mar 2015) $</i>
diff --git a/raster/r.to.rast3elev/r.to.rast3elev.html b/raster/r.to.rast3elev/r.to.rast3elev.html
index 6bdf2f3..7ae73f0 100644
--- a/raster/r.to.rast3elev/r.to.rast3elev.html
+++ b/raster/r.to.rast3elev/r.to.rast3elev.html
@@ -83,4 +83,4 @@ paraview --data=/tmp/threelayer.vtk
 <h2>AUTHOR</h2>
 Soeren Gebbert
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.to.vect/r.to.vect.html b/raster/r.to.vect/r.to.vect.html
index 1b65316..b55d2b6 100644
--- a/raster/r.to.vect/r.to.vect.html
+++ b/raster/r.to.vect/r.to.vect.html
@@ -147,4 +147,4 @@ Updated 2001 by Andrea Aime, Modena, Italy<br>
 <b>Update</b><br>
 Original r.to.sites, r.line and r.poly merged and updated to 5.7 by Radim Blazek
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/raster/r.topidx/main.c b/raster/r.topidx/main.c
index 9673e3c..9f2b888 100644
--- a/raster/r.topidx/main.c
+++ b/raster/r.topidx/main.c
@@ -52,7 +52,7 @@ int main(int argc, char **argv)
 	exit(EXIT_FAILURE);
 
     /* Make sure that the current projection is not lat/long */
-    if ((G_projection() == PROJECTION_LL))
+    if (G_projection() == PROJECTION_LL)
 	G_fatal_error(_("Lat/Long location is not supported by %s. Please reproject map first."),
 		      G_program_name());
 
diff --git a/raster/r.topidx/r.topidx.html b/raster/r.topidx/r.topidx.html
index 55bcc6f..a51c0f1 100644
--- a/raster/r.topidx/r.topidx.html
+++ b/raster/r.topidx/r.topidx.html
@@ -42,4 +42,4 @@ Hydro Laboratory, Kyungpook National University, South Korea
 <p>
 Based on GRIDATB.FOR by Keith Beven.
 
-<p><i>Last changed: $Date: 2016-06-30 11:33:52 +0200 (Thu, 30 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-30 11:31:29 +0200 (Thu, 30 Jun 2016) $</i>
diff --git a/raster/r.topidx/topidx.c b/raster/r.topidx/topidx.c
index 89ce631..d62d6f2 100644
--- a/raster/r.topidx/topidx.c
+++ b/raster/r.topidx/topidx.c
@@ -125,7 +125,8 @@ void calculate_atanb(void)
 			sum += route[0];
 			nroute++;
 		    }
-		    if (!is_cv_null(i - 1, j) && cv(i, j) - cv(i - 1, j) > ZERO) {
+		    if (!is_cv_null(i - 1, j) &&
+			cv(i, j) - cv(i - 1, j) > ZERO) {
 			tanB[1] = (cv(i, j) - cv(i - 1, j)) * dx1;
 			route[1] = 0.5 * dx * tanB[1];
 			sum += route[1];
@@ -148,7 +149,8 @@ void calculate_atanb(void)
 		    nroute++;
 		}
 		if (j + 1 < window.cols) {
-		    if (!is_cv_null(i, j + 1) && cv(i, j) - cv(i, j + 1) > ZERO) {
+		    if (!is_cv_null(i, j + 1) &&
+			cv(i, j) - cv(i, j + 1) > ZERO) {
 			tanB[5] = (cv(i, j) - cv(i, j + 1)) * dx1;
 			route[5] = 0.5 * dx * tanB[5];
 			sum += route[5];
@@ -164,7 +166,8 @@ void calculate_atanb(void)
 			sum += route[6];
 			nroute++;
 		    }
-		    if (!is_cv_null(i + 1, j) && cv(i, j) - cv(i + 1, j) > ZERO) {
+		    if (!is_cv_null(i + 1, j) &&
+			cv(i, j) - cv(i + 1, j) > ZERO) {
 			tanB[7] = (cv(i, j) - cv(i + 1, j)) * dx1;
 			route[7] = 0.5 * dx * tanB[7];
 			sum += route[7];
@@ -187,46 +190,38 @@ void calculate_atanb(void)
 		    nslp = 0;
 		    if (i > 0) {
 			if (j > 0 && !is_cv_null(i - 1, j - 1)) {
-			    sumtb += (cv(i - 1, j - 1)
-				      - cv(i, j)) * dx2;
+			    sumtb += (cv(i - 1, j - 1) - cv(i, j)) * dx2;
 			    nslp++;
 			}
 			if (!is_cv_null(i - 1, j)) {
-			    sumtb += (cv(i - 1, j)
-				      - cv(i, j)) * dx1;
+			    sumtb += (cv(i - 1, j) - cv(i, j)) * dx1;
 			    nslp++;
 			}
 			if (j + 1 < window.cols && !is_cv_null(i - 1, j + 1)) {
-			    sumtb += (cv(i - 1, j + 1)
-				      - cv(i, j)) * dx2;
+			    sumtb += (cv(i - 1, j + 1) - cv(i, j)) * dx2;
 			    nslp++;
 			}
 		    }
 
 		    if (j > 0 && !is_cv_null(i, j - 1)) {
-			sumtb += (cv(i, j - 1)
-				  - cv(i, j)) * dx1;
+			sumtb += (cv(i, j - 1) - cv(i, j)) * dx1;
 			nslp++;
 		    }
 		    if (j + 1 < window.cols && !is_cv_null(i, j + 1)) {
-			sumtb += (cv(i, j + 1)
-				  - cv(i, j)) * dx1;
+			sumtb += (cv(i, j + 1) - cv(i, j)) * dx1;
 			nslp++;
 		    }
 		    if (i + 1 < window.rows) {
 			if (j > 0 && !is_cv_null(i + 1, j - 1)) {
-			    sumtb += (cv(i + 1, j - 1)
-				      - cv(i, j)) * dx2;
+			    sumtb += (cv(i + 1, j - 1) - cv(i, j)) * dx2;
 			    nslp++;
 			}
 			if (!is_cv_null(i + 1, j)) {
-			    sumtb += (cv(i + 1, j)
-				      - cv(i, j)) * dx1;
+			    sumtb += (cv(i + 1, j) - cv(i, j)) * dx1;
 			    nslp++;
 			}
 			if (j + 1 < window.cols && !is_cv_null(i + 1, j + 1)) {
-			    sumtb += (cv(i + 1, j + 1)
-				      - cv(i, j)) * dx2;
+			    sumtb += (cv(i + 1, j + 1) - cv(i, j)) * dx2;
 			    nslp++;
 			}
 		    }
diff --git a/raster/r.topmodel/file_io.c b/raster/r.topmodel/file_io.c
index c858aa3..2afca02 100644
--- a/raster/r.topmodel/file_io.c
+++ b/raster/r.topmodel/file_io.c
@@ -23,31 +23,6 @@ void read_input(void)
     FILE *fp;
     int i;
 
-    /* Read topographic index statistics file */
-    if ((fp = fopen(file.topidxstats, "r")) == NULL)
-	G_fatal_error(_("Unable to open input file <%s>"), file.topidxstats);
-
-    topidxstats.atb = NULL;
-    topidxstats.Aatb_r = NULL;
-
-    for (i = 0; !feof(fp);) {
-	double atb;
-	double Aatb_r;
-
-	get_line(fp, buf);
-	if (sscanf(buf, "%lf %lf", &atb, &Aatb_r) == 2) {
-	    topidxstats.atb = (double *)G_realloc(topidxstats.atb,
-			    (i + 1) * sizeof(double));
-	    topidxstats.Aatb_r = (double *)G_realloc(topidxstats.Aatb_r,
-			    (i + 1) * sizeof(double));
-	    topidxstats.atb[i] = atb;
-	    topidxstats.Aatb_r[i++] = Aatb_r;
-	}
-    }
-
-    misc.ntopidxclasses = i;
-    fclose(fp);
-
     /* Read parameters file */
     if ((fp = fopen(file.params, "r")) == NULL)
 	G_fatal_error(_("Unable to open input file <%s>"), file.params);
@@ -137,7 +112,7 @@ void read_input(void)
     }
 
     params.d = NULL;
-    params.Ad_r = NULL;
+    params.Ad = NULL;
 
     for (i = 0; !feof(fp);) {
 	double d;
@@ -146,16 +121,41 @@ void read_input(void)
 	get_line(fp, buf);
 	if (sscanf(buf, "%lf %lf", &d, &Ad_r) == 2) {
 	    params.d = (double *)G_realloc(params.d, (i + 1) * sizeof(double));
-	    params.Ad_r = (double *)G_realloc(params.Ad_r,
+	    params.Ad = (double *)G_realloc(params.Ad,
 			    (i + 1) * sizeof(double));
 	    params.d[i] = d;
-	    params.Ad_r[i++] = Ad_r;
+	    params.Ad[i++] = Ad_r * params.A;
 	}
     }
 
     params.nch = i;
     fclose(fp);
 
+    /* Read topographic index statistics file */
+    if ((fp = fopen(file.topidxstats, "r")) == NULL)
+	G_fatal_error(_("Unable to open input file <%s>"), file.topidxstats);
+
+    topidxstats.atb = NULL;
+    topidxstats.Aatb_r = NULL;
+
+    for (i = 0; !feof(fp);) {
+	double atb;
+	double Aatb_r;
+
+	get_line(fp, buf);
+	if (sscanf(buf, "%lf %lf", &atb, &Aatb_r) == 2) {
+	    topidxstats.atb = (double *)G_realloc(topidxstats.atb,
+			    (i + 1) * sizeof(double));
+	    topidxstats.Aatb_r = (double *)G_realloc(topidxstats.Aatb_r,
+			    (i + 1) * sizeof(double));
+	    topidxstats.atb[i] = atb;
+	    topidxstats.Aatb_r[i++] = Aatb_r;
+	}
+    }
+
+    misc.ntopidxclasses = i;
+    fclose(fp);
+
     /* Read input file */
     if ((fp = fopen(file.input, "r")) == NULL)
 	G_fatal_error(_("Unable to open input file <%s>"), file.input);
diff --git a/raster/r.topmodel/global.h b/raster/r.topmodel/global.h
index f40ded2..7f7bea4 100644
--- a/raster/r.topmodel/global.h
+++ b/raster/r.topmodel/global.h
@@ -32,14 +32,6 @@ void run_topmodel(void);
 double calculate_infiltration(int timestep, double R);
 
 
-/* Topographic index statistics file */
-struct topidxstats
-{
-    /* misc.ntopidxclasses */
-    double *atb;
-    double *Aatb_r;
-};
-
 /* Parameters file */
 struct params
 {
@@ -60,7 +52,15 @@ struct params
     int nch;
     /* params.nch's */
     double *d;
-    double *Ad_r;
+    double *Ad;
+};
+
+/* Topographic index statistics file */
+struct topidxstats
+{
+    /* misc.ntopidxclasses */
+    double *atb;
+    double *Aatb_r;
 };
 
 /* Input file */
diff --git a/raster/r.topmodel/main.c b/raster/r.topmodel/main.c
index 5ee397b..9bf8ddd 100644
--- a/raster/r.topmodel/main.c
+++ b/raster/r.topmodel/main.c
@@ -141,7 +141,7 @@ int main(int argc, char **argv)
 	char *topidx;
 	int ntopidxclasses;
 	char *outtopidxstats;
-	
+
 	topidx = params.topidx->answer;
 	ntopidxclasses = atoi(params.ntopidxclasses->answer);
 	outtopidxstats = params.outtopidxstats->answer;
diff --git a/raster/r.topmodel/r.topmodel.html b/raster/r.topmodel/r.topmodel.html
index 6f2cc06..23e8cfe 100644
--- a/raster/r.topmodel/r.topmodel.html
+++ b/raster/r.topmodel/r.topmodel.html
@@ -163,4 +163,4 @@ Hydro Laboratory, Kyungpook National University, South Korea
 Based on TMOD9502.FOR by Keith Beven.
 
 <p>
-<i>Last changed: $Date: 2016-06-30 11:33:52 +0200 (Thu, 30 Jun 2016) $</i>
+<i>Last changed: $Date: 2016-06-30 11:31:29 +0200 (Thu, 30 Jun 2016) $</i>
diff --git a/raster/r.topmodel/topmodel.c b/raster/r.topmodel/topmodel.c
index 96ef293..44bf439 100644
--- a/raster/r.topmodel/topmodel.c
+++ b/raster/r.topmodel/topmodel.c
@@ -144,12 +144,12 @@ void initialize(void)
 
 	t = misc.delay + i + 1;
 	if (t > misc.tch[params.nch - 1])
-	    misc.Ad[i] = 1.0;
+	    misc.Ad[i] = params.A;
 	else {
 	    for (j = 1; j < params.nch; j++) {
 		if (t <= misc.tch[j]) {
-		    misc.Ad[i] = params.Ad_r[j - 1] +
-			(params.Ad_r[j] - params.Ad_r[j - 1]) *
+		    misc.Ad[i] = params.Ad[j - 1] +
+			(params.Ad[j] - params.Ad[j - 1]) *
 			(t - misc.tch[j - 1]) /
 			(misc.tch[j] - misc.tch[j - 1]);
 		    break;
@@ -160,10 +160,9 @@ void initialize(void)
 
     /* difference in the contribution area for each time step */
     A1 = misc.Ad[0];
-    misc.Ad[0] *= params.A;
     for (i = 1; i < misc.tcsub; i++) {
 	A2 = misc.Ad[i];
-	misc.Ad[i] = (A2 - A1) * params.A;
+	misc.Ad[i] = A2 - A1;
 	A1 = A2;
     }
 
diff --git a/raster/r.univar/globals.h b/raster/r.univar/globals.h
index 23c0fce..01f5bcf 100644
--- a/raster/r.univar/globals.h
+++ b/raster/r.univar/globals.h
@@ -56,7 +56,7 @@ typedef struct
 typedef struct
 {
     struct Option *inputfile, *zonefile, *percentile, *output_file, *separator;
-    struct Flag *shell_style, *extended, *table;
+    struct Flag *shell_style, *extended, *table, *use_rast_region;
 } param_type;
 
 extern param_type param;
diff --git a/raster/r.univar/r.univar.html b/raster/r.univar/r.univar.html
index 3316d36..d7edbc0 100644
--- a/raster/r.univar/r.univar.html
+++ b/raster/r.univar/r.univar.html
@@ -238,4 +238,4 @@ Extended statistics by Martin Landa<br>
 Multiple input map support by Ivan Shmakov<br>
 Zonal loop by Markus Metz
 
-<p><i>Last changed: $Date: 2016-05-03 19:10:00 +0200 (Tue, 03 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-03 19:09:18 +0200 (Tue, 03 May 2016) $</i>
diff --git a/raster/r.univar/r.univar_main.c b/raster/r.univar/r.univar_main.c
index 2f54665..25112a9 100644
--- a/raster/r.univar/r.univar_main.c
+++ b/raster/r.univar/r.univar_main.c
@@ -71,6 +71,10 @@ void set_params()
     param.table->description = _("Table output format instead of standard output format");
     param.table->guisection = _("Formatting");
 
+    param.use_rast_region = G_define_flag();
+    param.use_rast_region->key = 'r';
+    param.use_rast_region->description = _("Use the native resolution and extent of the raster map, instead of the current region");
+
     return;
 }
 
@@ -115,14 +119,16 @@ int main(int argc, char *argv[])
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
+    if (param.zonefile->answer && param.use_rast_region->answer) {
+    	G_fatal_error(_("zones option and region flag -r are mutually exclusive"));
+    }
+
     name = param.output_file->answer;
     if (name != NULL && strcmp(name, "-") != 0) {
 	if (NULL == freopen(name, "w", stdout)) {
 	    G_fatal_error(_("Unable to open file <%s> for writing"), name);
 	}
     }
-
-    G_get_window(&region);
     
     /* table field separator */
     zone_info.sep = G_option_to_separator(param.separator);
@@ -166,6 +172,18 @@ int main(int argc, char *argv[])
 	     : 0);
 
     for (p = param.inputfile->answers; *p; p++) {
+
+	/* Check if the native extent and resolution
+	   of the input map should be used */
+	if(param.use_rast_region->answer) {
+    	    mapset = G_find_raster2(*p, "");
+	    Rast_get_cellhd(*p, mapset, &region);
+	    /* Set the computational region */
+	    Rast_set_window(&region);
+        } else {
+    	    G_get_window(&region);
+        }
+
 	fd = open_raster(*p);
 
 	if (map_type != -1) {
@@ -255,7 +273,7 @@ process_raster(univar_stat * stats, int fd, int fdz, const struct Cell_head *reg
     const size_t value_sz = Rast_cell_size(map_type);
     unsigned int row;
     void *raster_row;
-    CELL *zoneraster_row;
+    CELL *zoneraster_row = NULL;
     int n_zones = zone_info.n_zones;
     
     raster_row = Rast_allocate_buf(map_type);
@@ -264,7 +282,7 @@ process_raster(univar_stat * stats, int fd, int fdz, const struct Cell_head *reg
 
     for (row = 0; row < rows; row++) {
 	void *ptr;
-	CELL *zptr;
+	CELL *zptr = NULL;
 	unsigned int col;
 
 	Rast_get_row(fd, raster_row, row, map_type);
diff --git a/raster/r.univar/r3.univar.html b/raster/r.univar/r3.univar.html
index 5ee69db..eac0157 100644
--- a/raster/r.univar/r3.univar.html
+++ b/raster/r.univar/r3.univar.html
@@ -113,4 +113,4 @@ Hamish Bowman, Otago University, New Zealand<br>
 and Martin Landa<br>
 Zonal loop by Markus Metz
 
-<p><i>Last changed: $Date: 2016-05-03 19:10:00 +0200 (Tue, 03 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-03 19:09:18 +0200 (Tue, 03 May 2016) $</i>
diff --git a/raster/r.univar/stats.c b/raster/r.univar/stats.c
index 56babaa..cf3fe8b 100644
--- a/raster/r.univar/stats.c
+++ b/raster/r.univar/stats.c
@@ -134,19 +134,22 @@ int print_stats(univar_stat * stats)
 	sprintf(sum_str, "%.15g", stats[z].sum);
 	G_trim_decimal(sum_str);
 
-	if (zone_info.n_zones) {
-	    int z_cat = z + zone_info.min;
-	    
-	    fprintf(stdout, "\nzone %d %s\n\n", z_cat, Rast_get_c_cat(&z_cat, &(zone_info.cats)));
-	}
 
 	if (!param.shell_style->answer) {
+	    if (zone_info.n_zones) {
+	    	int z_cat = z + zone_info.min;
+	    	fprintf(stdout, "\nzone %d %s\n\n", z_cat, Rast_get_c_cat(&z_cat, &(zone_info.cats)));
+	    }
 	    fprintf(stdout, "total null and non-null cells: %lu\n", stats[z].size);
 	    fprintf(stdout, "total null cells: %lu\n\n", stats[z].size - stats[z].n);
 	    fprintf(stdout, "Of the non-null cells:\n----------------------\n");
 	}
 
 	if (param.shell_style->answer) {
+	    if (zone_info.n_zones) {
+	    	int z_cat = z + zone_info.min;
+	    	fprintf(stdout, "zone=%d;%s\n", z_cat, Rast_get_c_cat(&z_cat, &(zone_info.cats)));
+	    }
 	    fprintf(stdout, "n=%lu\n", stats[z].n);
 	    fprintf(stdout, "null_cells=%lu\n", stats[z].size - stats[z].n);
 	    fprintf(stdout, "cells=%lu\n", stats->size);
diff --git a/raster/r.univar/testsuite/test_r_univar.py b/raster/r.univar/testsuite/test_r_univar.py
new file mode 100644
index 0000000..7b5bfa3
--- /dev/null
+++ b/raster/r.univar/testsuite/test_r_univar.py
@@ -0,0 +1,185 @@
+"""Test of r.univar
+
+ at author Soeren Gebbert
+"""
+from grass.gunittest.case import TestCase
+
+class TestRasterUnivar(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Use temporary region settings"""
+        cls.use_temp_region()
+
+    @classmethod
+    def tearDownClass(cls):
+        """!Remove the temporary region
+        """
+        cls.del_temp_region()
+
+    def tearDown(self):
+        self.runModule("g.remove", flags='f', type="raster", name="map_a")
+        self.runModule("g.remove", flags='f', type="raster", name="map_b")
+        self.runModule("g.remove", flags='f', type="raster", name="zone_map")
+
+    def setUp(self):
+        """Create input data
+        """
+        self.runModule("g.region", res=1, n=90, s=0, w=0, e=90)
+        self.runModule("r.mapcalc", expression="map_a = 100 + row() + col()",
+                       overwrite=True)
+        self.runModule("r.mapcalc", expression="map_b = 200 + row() + col()",
+                       overwrite=True)
+        self.runModule("r.mapcalc", expression="zone_map = if(row() < 20, 1,2)",
+                       overwrite=True)
+
+    def test_1(self):
+        # Output of r.univar
+        univar_string="""n=8100
+        null_cells=0
+        cells=8100
+        min=102
+        max=280
+        range=178
+        mean=191
+        mean_of_abs=191
+        sum=1547100"""
+
+        self.assertRasterFitsUnivar(raster="map_a",  reference=univar_string,
+                                    precision=3)
+
+    def test_2(self):
+        # Output of r.univar
+        univar_string="""n=81
+        null_cells=0
+        cells=81
+        min=112
+        max=272
+        range=160
+        mean=192
+        mean_of_abs=192
+        sum=15552"""
+
+        self.runModule("g.region", res=10)
+        self.assertRasterFitsUnivar(raster="map_a",  reference=univar_string,
+                                    precision=3)
+
+
+    def test_3(self):
+        """
+        Check the -r flag
+        :return:
+        """
+
+        univar_string="""n=8100
+        null_cells=0
+        cells=8100
+        min=102
+        max=280
+        range=178
+        mean=191
+        mean_of_abs=191
+        sum=1547100"""
+
+        self.runModule("g.region", res=10)
+        self.assertModuleKeyValue(module="r.univar", map="map_a", flags="rg",
+                                  reference=univar_string, precision=3, sep='=')
+
+    def test_multiple_1(self):
+        # Output of r.univar
+        univar_string="""n=16200
+        null_cells=0
+        cells=16200
+        min=102
+        max=380
+        range=278
+        mean=241
+        mean_of_abs=241
+        sum=3904200"""
+
+        self.assertModuleKeyValue(module="r.univar", map=["map_a","map_b"], flags="rg",
+                                  reference=univar_string, precision=3, sep='=')
+
+    def test_multiple_2(self):
+        # Output of r.univar
+        univar_string="""n=162
+        null_cells=0
+        cells=162
+        min=112
+        max=372
+        range=260
+        mean=241
+        mean_of_abs=241
+        sum=39204"""
+
+        self.runModule("g.region", res=10)
+        self.assertModuleKeyValue(module="r.univar", map=["map_a","map_b"], flags="g",
+                                  reference=univar_string, precision=3, sep='=')
+
+
+    def test_multiple_3(self):
+        """
+        Check the -r flag
+        :return:
+        """
+
+        # Output of r.univar
+        univar_string="""n=16200
+        null_cells=0
+        cells=16200
+        min=102
+        max=380
+        range=278
+        mean=241
+        mean_of_abs=241
+        sum=3904200"""
+
+        self.runModule("g.region", res=10)
+        self.assertModuleKeyValue(module="r.univar", map=["map_a","map_b"], flags="rg",
+                                  reference=univar_string, precision=3, sep='=')
+
+
+    def test_1_zone(self):
+        """
+        multiple maps and zone
+        :return:
+        """
+
+        # Output of r.univar
+        univar_string="""zone=1;
+                        n=1710
+                        null_cells=0
+                        cells=1710
+                        min=102
+                        max=209
+                        range=107
+                        mean=155.5
+                        mean_of_abs=155.5
+                        sum=265905
+                        zone=2;
+                        n=6390
+                        null_cells=0
+                        cells=1710
+                        min=121
+                        max=280
+                        range=159
+                        mean=200.5
+                        mean_of_abs=200.5
+                        sum=1281195"""
+
+        self.runModule("g.region", res=1)
+        self.assertModuleKeyValue(module="r.univar", map=["map_a"], 
+                                  zones="zone_map",flags="g",
+                                  reference=univar_string, precision=3, sep='=')
+
+class TestAccumulateFails(TestCase):
+
+    def test_error_handling(self):
+        # No vector map, no strds, no coordinates
+        self.assertModuleFail("r.univar",  flags="r", map="map_a", zones="map_b")
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
+
+
diff --git a/raster/r.uslek/r.uslek.html b/raster/r.uslek/r.uslek.html
index 6a0891e..2e6f400 100644
--- a/raster/r.uslek/r.uslek.html
+++ b/raster/r.uslek/r.uslek.html
@@ -65,4 +65,4 @@ r.univar usle_k
 Yann Chemin, SIC-ISDC, Turkmenistan<br>
 
 
-<p><i>Last changed: $Date: 2014-11-24 18:16:14 +0100 (Mon, 24 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-24 18:15:23 +0100 (Mon, 24 Nov 2014) $</i>
diff --git a/raster/r.usler/r.usler.html b/raster/r.usler/r.usler.html
index 62fd232..f7424c0 100644
--- a/raster/r.usler/r.usler.html
+++ b/raster/r.usler/r.usler.html
@@ -23,4 +23,4 @@ TBD.
 Natialia Medvedeva, SIC-ISDC, Ashgabat, Turkmenistan<br>
 Yann Chemin, SIC-ISDC, Ashgabat, Turkmenistan
 
-<p><i>Last changed: $Date: 2014-11-24 18:22:17 +0100 (Mon, 24 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-24 18:22:45 +0100 (Mon, 24 Nov 2014) $</i>
diff --git a/raster/r.viewshed/main.cpp b/raster/r.viewshed/main.cpp
index 4b12a9f..c2e81d1 100644
--- a/raster/r.viewshed/main.cpp
+++ b/raster/r.viewshed/main.cpp
@@ -115,6 +115,7 @@ int main(int argc, char *argv[])
     G_add_keyword(_("raster"));
     G_add_keyword(_("viewshed"));
     G_add_keyword(_("line of sight"));
+    G_add_keyword(_("LOS"));
     module->label = _("Computes the viewshed of a point on an elevation raster map.");
     module->description = _("Default format: NULL (invisible), vertical angle wrt viewpoint (visible).");
 
diff --git a/raster/r.viewshed/r.viewshed.html b/raster/r.viewshed/r.viewshed.html
index 8b7eb23..02f398f 100644
--- a/raster/r.viewshed/r.viewshed.html
+++ b/raster/r.viewshed/r.viewshed.html
@@ -242,4 +242,4 @@ and Combinatorics (ALENEX/ANALCO 2007)</em>.</li>
 <p>Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-09-13 22:01:38 +0200 (Tue, 13 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-13 22:01:13 +0200 (Tue, 13 Sep 2016) $</i>
diff --git a/raster/r.viewshed/testsuite/test_r_viewshed.py b/raster/r.viewshed/testsuite/test_r_viewshed.py
index 371f428..13f87ff 100644
--- a/raster/r.viewshed/testsuite/test_r_viewshed.py
+++ b/raster/r.viewshed/testsuite/test_r_viewshed.py
@@ -1,8 +1,9 @@
-import grass.gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import call_module
 
 
-class TestViewshed(grass.gunittest.TestCase):
+class TestViewshed(TestCase):
 
     viewshed = 'test_viewshed_from_elevation'
 
@@ -60,7 +61,7 @@ class TestViewshed(grass.gunittest.TestCase):
             msg="Viewing angle above the ground must be between 0 and 180 deg")
 
 
-class TestViewshedAgainstReference(grass.gunittest.TestCase):
+class TestViewshedAgainstReference(TestCase):
     """
 
     Data created using NC data set::
@@ -120,4 +121,4 @@ class TestViewshedAgainstReference(grass.gunittest.TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
+    test()
diff --git a/raster/r.volume/r.volume.html b/raster/r.volume/r.volume.html
index 76d2d76..2e64272 100644
--- a/raster/r.volume/r.volume.html
+++ b/raster/r.volume/r.volume.html
@@ -119,4 +119,4 @@ December 1988.<br>
 Updated to GRASS 7 by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/raster/r.walk/r.walk.html b/raster/r.walk/r.walk.html
index 806ab0a..75aef32 100644
--- a/raster/r.walk/r.walk.html
+++ b/raster/r.walk/r.walk.html
@@ -157,7 +157,7 @@ r.contour walkcost output=walkcost step=1000
  University of Aberdeen.
 <li> Steno Fontanari, University of Trento, Italy, Ingegneria per l'Ambiente e
  il Territorio, 2000-2001.
- Svilluppo di metodologie GIS per la determinazione dell'accessibilit�
+ Svilluppo di metodologie GIS per la determinazione dell'accessibilità
  territoriale come supporto alle decisioni nella gestione ambientale.
 <li>Langmuir, E. 1984. Mountaincraft and leadership. The Scottish
  Sports Council/MLTB. Cordee, Leicester.
@@ -196,4 +196,4 @@ Roberto Flor and Markus Neteler
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2015-03-13 03:42:42 +0100 (Fri, 13 Mar 2015) $</i>
+<i>Last changed: $Date: 2016-05-02 21:39:52 +0200 (Mon, 02 May 2016) $</i>
diff --git a/raster/r.water.outlet/main.c b/raster/r.water.outlet/main.c
index 08d4502..174ba8e 100644
--- a/raster/r.water.outlet/main.c
+++ b/raster/r.water.outlet/main.c
@@ -48,6 +48,7 @@ int main(int argc, char *argv[])
     CELL *cell_buf;
     char drain_name[GNAME_MAX], basin_name[GNAME_MAX];
     struct Cell_head window;
+    struct History hist;
 
     G_gisinit(argv[0]);
 
@@ -129,5 +130,10 @@ int main(int argc, char *argv[])
     G_free(cell_buf);
     Rast_close(basin_fd);
 
+    Rast_put_cell_title(basin_name, "Watershed basin");
+    Rast_short_history(basin_name, "raster", &hist);
+    Rast_command_history(&hist);
+    Rast_write_history(basin_name, &hist);
+
     exit(EXIT_SUCCESS);
 }
diff --git a/raster/r.water.outlet/r.water.outlet.html b/raster/r.water.outlet/r.water.outlet.html
index 8cbd27d..fc2e0a8 100644
--- a/raster/r.water.outlet/r.water.outlet.html
+++ b/raster/r.water.outlet/r.water.outlet.html
@@ -45,6 +45,9 @@ d.rast map=basin_A30
 # overlay with transparency
 r.colors map=basin_A30 color=grey
 d.his h=accum_5K i=basin_A30
+
+# report outlet size in ha
+r.report map=basin_A30 units=h
 </pre></div>
 
 <p>
@@ -67,4 +70,4 @@ d.his h=accum_5K i=basin_A30
 Charles Ehlschlaeger, U.S. Army Construction Engineering Research Laboratory
 
 <p>
-<i>Last changed: $Date: 2016-04-26 02:49:55 +0200 (Tue, 26 Apr 2016) $</i>
+<i>Last changed: $Date: 2016-10-20 22:26:55 +0200 (Thu, 20 Oct 2016) $</i>
diff --git a/raster/r.watershed/front/main.c b/raster/r.watershed/front/main.c
index 53c48ad..0a04b2b 100644
--- a/raster/r.watershed/front/main.c
+++ b/raster/r.watershed/front/main.c
@@ -58,6 +58,7 @@ int main(int argc, char *argv[])
     struct Option *opt15;
     struct Option *opt16;
     struct Option *opt17;
+    struct Option *opt18;
     struct Flag *flag_sfd;
     struct Flag *flag_flow;
     struct Flag *flag_seg;
@@ -139,6 +140,13 @@ int main(int argc, char *argv[])
     opt17->required = NO;
     opt17->guisection = _("Outputs");
 
+    opt18 = G_define_standard_option(G_OPT_R_OUTPUT);
+    opt18->key = "spi";
+    opt18->label =
+	_("Stream power index a * tan(b)");
+    opt18->required = NO;
+    opt18->guisection = _("Outputs");
+
     opt9 = G_define_standard_option(G_OPT_R_OUTPUT);
     opt9->key = "drainage";
     opt9->description = _("Name for output drainage direction raster map");
@@ -302,6 +310,7 @@ int main(int argc, char *argv[])
     do_opt(opt7);
     do_opt(opt8);
     do_opt(opt17);
+    do_opt(opt18);
     do_opt(opt9);
     do_opt(opt10);
     do_opt(opt11);
@@ -314,7 +323,9 @@ int main(int argc, char *argv[])
     new_argv[new_argc++] = NULL;
 
     G_debug(1, "Mode: %s", flag_seg->answer ? "Segmented" : "All in RAM");
-
+/*    if (flag_seg->answer)
+       G_message(_("Using memory cache size: %.1f MB"), atof(opt16->answer));
+*/
     ret = G_vspawn_ex(new_argv[0], new_argv);
 
     if (ret != EXIT_SUCCESS)
@@ -329,6 +340,10 @@ int main(int argc, char *argv[])
 	write_hist(opt17->answer,
 		   "Watershed accumulation: topographic index ln(a / tan b)",
 		   opt1->answer, flag_seg->answer, flag_sfd->answer);
+    if (opt18->answer)
+	write_hist(opt18->answer,
+		   "Watershed accumulation: stream power index a * tan b",
+		   opt1->answer, flag_seg->answer, flag_sfd->answer);
     if (opt9->answer)
 	write_hist(opt9->answer,
 		   "Watershed drainage direction (CCW from East divided by 45deg)",
diff --git a/raster/r.watershed/front/r.watershed.html b/raster/r.watershed/front/r.watershed.html
index e7a36fb..d51fc28 100644
--- a/raster/r.watershed/front/r.watershed.html
+++ b/raster/r.watershed/front/r.watershed.html
@@ -113,17 +113,29 @@ geographic region. Thus, any cells with negative values cannot have
 their surface runoff and sedimentation yields calculated accurately.
 
 <p>
-Output <b>tci</b> raster map contains topographic index TCI is
+Output <b>tci</b> raster map contains topographic index TCI,
 computed as
 <tt>ln(α / tan(β))</tt> where α is the cumulative
 upslope area draining through a point per unit contour length and
 <tt>tan(β)</tt> is the local slope angle. The TCI reflects the
 tendency of water to accumulate at any point in the catchment and the
-tendency for gravitaional forces to move that water downslope (Quinn
+tendency for gravitational forces to move that water downslope (Quinn
 et al. 1991).  This value will be negative if <tt>α /
 tan(β) < 1</tt>.
 
 <p>
+Output <b>spi</b> raster map contains stream power index SPI,
+computed as
+<tt>α * tan(β)</tt> where α is the cumulative
+upslope area draining through a point per unit contour length and
+<tt>tan(β)</tt> is the local slope angle. The SPI reflects the
+power of water flow at any point in the catchment and the
+tendency for gravitational forces to move that water downslope (Moore
+et al. 1991).  This value will be negative if <tt>α < 0</tt>, 
+i.e. for cells with possible surface runoff from outside of the current
+geographic region.
+
+<p>
 Output <b>drainage</b> raster map contains drainage direction.
 Provides the "aspect" for each cell measured CCW from East.
 Multiplying positive values by 45 will give the direction in degrees
@@ -486,6 +498,12 @@ drainage networks from massive, radar-based elevation models with least
 cost path search</i>, <b>Hydrol. Earth Syst. Sci.</b> Vol 15, 667-678.<br>
 DOI: <a href="http://dx.doi.org/10.5194/hess-15-667-2011">10.5194/hess-15-667-2011</a>
 
+<li>
+Moore I.D., Grayson R.B., Ladson A.R. (1991). <i>Digital terrain 
+modelling: a review of hydrogical, geomorphological, and biological 
+applications</i>, <b>Hydrological Processes</b>, Vol 5(1), 3-30<br> 
+DOI: <a href="http://dx.doi.org/10.1002/hyp.3360050103">10.1002/hyp.3360050103</a>
+
 <li>Quinn P., K. Beven K., Chevallier P., Planchon O. (1991). <i>The 
 prediction of hillslope flow paths for distributed hydrological modelling 
 using Digital Elevation Models</i>, <b>Hydrological Processes</b> Vol 5(1), 
@@ -528,4 +546,4 @@ Faster sorting algorithm and MFD support:
 Markus Metz <markus.metz.giswork at gmail.com>
 
 <p>
-<i>Last changed: $Date: 2016-08-23 15:52:03 +0200 (Tue, 23 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-05-11 09:04:39 +0200 (Wed, 11 May 2016) $</i>
diff --git a/raster/r.watershed/ram/Gwater.h b/raster/r.watershed/ram/Gwater.h
index 62918d4..6d5631e 100644
--- a/raster/r.watershed/ram/Gwater.h
+++ b/raster/r.watershed/ram/Gwater.h
@@ -60,7 +60,7 @@ extern RAMSEG r_h_seg, dep_seg;
 extern RAMSEG slp_seg, s_l_seg, s_g_seg, l_s_seg;
 extern int *astar_pts;
 extern CELL *dis, *alt, *asp, *bas, *haf, *r_h, *dep;
-extern DCELL *wat, *tci;
+extern DCELL *wat, *sca, *tanb;
 extern int ril_fd;
 extern double *s_l, *s_g, *l_s;
 extern CELL one, zero;
@@ -76,10 +76,10 @@ extern char ril_name[GNAME_MAX], dep_name[GNAME_MAX];
 extern const char *this_mapset;
 extern char seg_name[GNAME_MAX], bas_name[GNAME_MAX], haf_name[GNAME_MAX], thr_name[8];
 extern char ls_name[GNAME_MAX], st_name[GNAME_MAX], sl_name[GNAME_MAX], sg_name[GNAME_MAX];
-extern char wat_name[GNAME_MAX], asp_name[GNAME_MAX], tci_name[GNAME_MAX];
+extern char wat_name[GNAME_MAX], asp_name[GNAME_MAX], tci_name[GNAME_MAX], spi_name[GNAME_MAX];
 extern char arm_name[GNAME_MAX], dis_name[GNAME_MAX];
 extern char ele_flag, pit_flag, run_flag, dis_flag, ob_flag, flat_flag;
-extern char wat_flag, asp_flag, arm_flag, ril_flag, dep_flag, tci_flag;
+extern char wat_flag, asp_flag, arm_flag, ril_flag, dep_flag, tci_flag, spi_flag, atanb_flag;
 extern char bas_flag, seg_flag, haf_flag, er_flag;
 extern char st_flag, sb_flag, sg_flag, sl_flag, ls_flag;
 extern FILE *fp;
diff --git a/raster/r.watershed/ram/close_maps.c b/raster/r.watershed/ram/close_maps.c
index 5c1236e..6344ec2 100644
--- a/raster/r.watershed/ram/close_maps.c
+++ b/raster/r.watershed/ram/close_maps.c
@@ -18,7 +18,7 @@ int close_maps(void)
 
     if (asp_flag || dis_flag)
 	buf = Rast_allocate_c_buf();
-    if (wat_flag || ls_flag || sl_flag || sg_flag || tci_flag)
+    if (wat_flag || ls_flag || sl_flag || sg_flag || atanb_flag)
 	dbuf = Rast_allocate_d_buf();
     G_free(alt);
     if (ls_flag || sg_flag)
@@ -131,7 +131,6 @@ int close_maps(void)
 
     /* TCI */
     if (tci_flag) {
-	DCELL watvalue;
 	double mean;
 
 	sum = sum_sqr = stddev = 0.0;
@@ -139,9 +138,9 @@ int close_maps(void)
 	for (r = 0; r < nrows; r++) {
 	    Rast_set_d_null_value(dbuf, ncols);	/* reset row to all NULL */
 	    for (c = 0; c < ncols; c++) {
-		dvalue = tci[SEG_INDEX(wat_seg, r, c)];
-		watvalue = wat[SEG_INDEX(wat_seg, r, c)];
-		if (!Rast_is_d_null_value(&watvalue)) {
+		if (!Rast_is_d_null_value(&tanb[SEG_INDEX(wat_seg, r, c)])) {
+		    dvalue = log(sca[SEG_INDEX(wat_seg, r, c)] / 
+		                 tanb[SEG_INDEX(wat_seg, r, c)]);
 		    dbuf[c] = dvalue;
 		    sum += dvalue;
 		    sum_sqr += dvalue * dvalue;
@@ -199,6 +198,78 @@ int close_maps(void)
 	Rast_write_colors(tci_name, this_mapset, &colors);
     }
 
+    /* SPI */
+    if (spi_flag) {
+	double mean;
+
+	sum = sum_sqr = stddev = 0.0;
+	fd = Rast_open_new(spi_name, DCELL_TYPE);
+	for (r = 0; r < nrows; r++) {
+	    Rast_set_d_null_value(dbuf, ncols);	/* reset row to all NULL */
+	    for (c = 0; c < ncols; c++) {
+		if (!Rast_is_d_null_value(&tanb[SEG_INDEX(wat_seg, r, c)])) {
+		    dvalue = sca[SEG_INDEX(wat_seg, r, c)] * tanb[SEG_INDEX(wat_seg, r, c)];
+		    dbuf[c] = dvalue;
+		    sum += dvalue;
+		    sum_sqr += dvalue * dvalue;
+		}
+	    }
+	    Rast_put_row(fd, dbuf, DCELL_TYPE);
+	}
+	Rast_close(fd);
+
+	mean = sum / do_points;
+	stddev =
+	    sqrt((sum_sqr - (sum + sum / do_points)) / (do_points - 1));
+	G_debug(1, "stddev: %f", stddev);
+
+	/* set nice color rules: yellow, green, cyan, blue, black */
+
+	lstddev = log(stddev);
+
+	Rast_read_fp_range(spi_name, this_mapset, &accRange);
+	min = max = 0;
+	Rast_get_fp_range_min_max(&accRange, &min, &max);
+
+	Rast_init_colors(&colors);
+
+	if (min - 1 < mean - 0.5 * stddev) {
+	    clr_min = min - 1;
+	    clr_max = mean - 0.5 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 255,
+					  255, 0, &colors);
+	}
+
+	clr_min = mean - 0.5 * stddev;
+	clr_max = mean - 0.2 * stddev;
+	Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 0,
+				  255, 0, &colors);
+	clr_min = clr_max;
+	clr_max = mean + 0.2 * stddev;
+	Rast_add_d_color_rule(&clr_min, 0, 255, 0, &clr_max, 0,
+				  255, 255, &colors);
+	clr_min = clr_max;
+	clr_max = mean + 0.6 * stddev;
+	Rast_add_d_color_rule(&clr_min, 0, 255, 255, &clr_max, 0,
+				  0, 255, &colors);
+	clr_min = clr_max;
+	clr_max = mean + 1. * stddev;
+	Rast_add_d_color_rule(&clr_min, 0, 0, 255, &clr_max, 0, 0,
+				  0, &colors);
+
+	if (max > 0 && max > clr_max) {
+	    clr_min = clr_max;
+	    clr_max = max + 1;
+	    Rast_add_d_color_rule(&clr_min, 0, 0, 0, &clr_max, 0, 0,
+				      0, &colors);
+	}
+	Rast_write_colors(spi_name, this_mapset, &colors);
+    }
+    if (atanb_flag) {
+	G_free(sca);
+	G_free(tanb);
+    }
+
     /* TODO: elevation == NULL -> drainage direction == NULL (wat == 0 where ele == NULL) */
     /* keep drainage direction == 0 for real depressions */
     if (asp_flag) {
diff --git a/raster/r.watershed/ram/close_maps2.c b/raster/r.watershed/ram/close_maps2.c
index b9623cf..8862710 100644
--- a/raster/r.watershed/ram/close_maps2.c
+++ b/raster/r.watershed/ram/close_maps2.c
@@ -71,7 +71,7 @@ int close_array_seg(void)
 	    }
 	    G_percent(r - 1, max, 3);	/* finish it */
 	}
-	else
+	else if (max >= 1000)
 	    G_debug(1,
 		    "Too many subbasins to reasonably check for color brightness");
 	/* using the existing stack of while/for/for/for/while loops ... */
diff --git a/raster/r.watershed/ram/do_cum.c b/raster/r.watershed/ram/do_cum.c
index a4430a3..97da05a 100644
--- a/raster/r.watershed/ram/do_cum.c
+++ b/raster/r.watershed/ram/do_cum.c
@@ -109,7 +109,7 @@ int do_cum(void)
     int asp_c[9] = { 0, 1, 0, -1, -1, -1, 0, 1, 1 };
     int this_index, down_index, nbr_index;
     double *dist_to_nbr, *contour;
-    double tci_div, cell_size;
+    double cell_size;
 
     G_message(_("SECTION 3: Accumulating Surface Flow with SFD."));
 
@@ -192,12 +192,14 @@ int do_cum(void)
 	    }
 	    wat[down_index] = valued;
 
-	    /* topographic wetness index ln(a / tan(beta)) */
-	    if (tci_flag) {
-		tci_div = contour[np_side] * 
-		       get_slope_tci(alt[this_index], alt[down_index],
-				     dist_to_nbr[np_side]);
-		tci[this_index] = log((fabs(wat[this_index]) * cell_size) / tci_div);
+	    /* topographic wetness index ln(a / tan(beta)) and
+	     * stream power index a * tan(beta) */
+	    if (atanb_flag) {
+		sca[this_index] = fabs(wat[this_index]) *
+		                  (cell_size / contour[np_side]);
+		tanb[this_index] = get_slope_tci(alt[this_index],
+		                                 alt[down_index],
+						 dist_to_nbr[np_side]);
 	    }
 
 	    is_swale = FLAG_GET(swale, r, c);
@@ -405,17 +407,17 @@ int do_cum_mfd(void)
 
 			    nbr_index = SEG_INDEX(wat_seg, r_nbr, c_nbr);
 
-			    if (tci_flag) {
+			    weight[ct_dir] = weight[ct_dir] / sum_weight;
+			    /* check everything adds up to 1.0 */
+			    prop += weight[ct_dir];
+
+			    if (atanb_flag) {
 				sum_contour += contour[ct_dir];
 				tci_div += get_slope_tci(ele, alt[nbr_index],
 				                         dist_to_nbr[ct_dir]) *
 					   weight[ct_dir];
 			    }
 
-			    weight[ct_dir] = weight[ct_dir] / sum_weight;
-			    /* check everything adds up to 1.0 */
-			    prop += weight[ct_dir];
-
 			    valued = wat[nbr_index];
 			    if (value > 0) {
 				if (valued > 0)
@@ -441,11 +443,9 @@ int do_cum_mfd(void)
 		    G_warning(_("MFD: cumulative proportion of flow distribution not 1.0 but %f"),
 			      prop);
 		}
-		if (tci_flag)
-		    tci_div /= sum_weight;
 	    }
-
-	    if (mfd_cells < 2) {
+	    /* SFD-like accumulation */
+	    else {
 		valued = wat[down_index];
 		if (value > 0) {
 		    if (valued > 0)
@@ -461,16 +461,18 @@ int do_cum_mfd(void)
 		}
 		wat[down_index] = valued;
 
-		if (tci_flag) {
+		if (atanb_flag) {
 		    sum_contour = contour[np_side];
 		    tci_div = get_slope_tci(ele, alt[down_index],
 				            dist_to_nbr[np_side]);
 		}
 	    }
-	    /* topographic wetness index ln(a / tan(beta)) */
-	    if (tci_flag) {
-		tci[this_index] = log((fabs(wat[this_index]) * cell_size) /
-		                      (sum_contour * tci_div));
+	    /* topographic wetness index ln(a / tan(beta)) and
+	     * stream power index a * tan(beta) */
+	    if (atanb_flag) {
+		sca[this_index] = fabs(wat[this_index]) *
+		                  (cell_size / sum_contour);
+		tanb[this_index] = tci_div;
 	    }
 	}
     }
diff --git a/raster/r.watershed/ram/init_vars.c b/raster/r.watershed/ram/init_vars.c
index 29a7336..79fbd86 100644
--- a/raster/r.watershed/ram/init_vars.c
+++ b/raster/r.watershed/ram/init_vars.c
@@ -22,7 +22,8 @@ int init_vars(int argc, char *argv[])
     /* input */
     ele_flag = pit_flag = run_flag = ril_flag = 0;
     /* output */
-    wat_flag = asp_flag = bas_flag = seg_flag = haf_flag = tci_flag = 0;
+    wat_flag = asp_flag = tci_flag = spi_flag = atanb_flag = 0;
+    bas_flag = seg_flag = haf_flag = 0;
     bas_thres = 0;
     /* shed, unused */
     arm_flag = dis_flag = 0;
@@ -50,6 +51,8 @@ int init_vars(int argc, char *argv[])
 	    wat_flag++;
 	else if (sscanf(argv[r], "tci=%s", tci_name) == 1)
 	    tci_flag++;
+	else if (sscanf(argv[r], "spi=%s", spi_name) == 1)
+	    spi_flag++;
 	else if (sscanf(argv[r], "drainage=%s", asp_name) == 1)
 	    asp_flag++;
 	else if (sscanf(argv[r], "depression=%s", pit_name) == 1)
@@ -147,11 +150,16 @@ int init_vars(int argc, char *argv[])
     wat =
 	(DCELL *) G_malloc(sizeof(DCELL) *
 			   size_array(&wat_seg, nrows, ncols));
-    if (tci_flag)
-	tci = (DCELL *) G_malloc(sizeof(DCELL) *
+    
+    sca = tanb = NULL;
+    atanb_flag = 0;
+    if (tci_flag || spi_flag) {
+	sca = (DCELL *) G_malloc(sizeof(DCELL) *
 			         size_array(&wat_seg, nrows, ncols));
-    else
-	tci = NULL;
+	tanb = (DCELL *) G_malloc(sizeof(DCELL) *
+			         size_array(&wat_seg, nrows, ncols));
+	atanb_flag = 1;
+    }
 
     asp =
 	(CELL *) G_malloc(size_array(&asp_seg, nrows, ncols) * sizeof(CELL));
@@ -223,6 +231,10 @@ int init_vars(int argc, char *argv[])
 	    if (er_flag) {
 		r_h[seg_idx] = alt_value;
 	    }
+	    if (atanb_flag) {
+		Rast_set_d_null_value(&sca[seg_idx], 1);
+		Rast_set_d_null_value(&tanb[seg_idx], 1);
+	    }
 	    ptr = G_incr_void_ptr(ptr, ele_size);
 	}
     }
diff --git a/raster/r.watershed/ram/main.c b/raster/r.watershed/ram/main.c
index 4b4fa69..a9d6dcb 100644
--- a/raster/r.watershed/ram/main.c
+++ b/raster/r.watershed/ram/main.c
@@ -39,7 +39,7 @@ RAMSEG r_h_seg, dep_seg;
 RAMSEG slp_seg, s_l_seg, s_g_seg, l_s_seg;
 int *astar_pts;
 CELL *dis, *alt, *asp, *bas, *haf, *r_h, *dep;
-DCELL *wat, *tci;
+DCELL *wat, *sca, *tanb;
 int ril_fd;
 double *s_l, *s_g, *l_s;
 CELL one, zero;
@@ -57,11 +57,11 @@ char seg_name[GNAME_MAX], bas_name[GNAME_MAX], haf_name[GNAME_MAX],
     thr_name[8];
 char ls_name[GNAME_MAX], st_name[GNAME_MAX], sl_name[GNAME_MAX],
     sg_name[GNAME_MAX];
-char wat_name[GNAME_MAX], asp_name[GNAME_MAX], tci_name[GNAME_MAX];
+char wat_name[GNAME_MAX], asp_name[GNAME_MAX], tci_name[GNAME_MAX], spi_name[GNAME_MAX];
 char arm_name[GNAME_MAX], dis_name[GNAME_MAX];
 char ele_flag, pit_flag, run_flag, dis_flag, ob_flag, flat_flag;
 char wat_flag, asp_flag, arm_flag, ril_flag, dep_flag;
-char bas_flag, seg_flag, haf_flag, er_flag, tci_flag;
+char bas_flag, seg_flag, haf_flag, er_flag, tci_flag, spi_flag, atanb_flag;
 char st_flag, sb_flag, sg_flag, sl_flag, ls_flag;
 FILE *fp;
 
diff --git a/raster/r.watershed/seg/Gwater.h b/raster/r.watershed/seg/Gwater.h
index 4a4095f..618f362 100644
--- a/raster/r.watershed/seg/Gwater.h
+++ b/raster/r.watershed/seg/Gwater.h
@@ -63,6 +63,12 @@ WAT_ALT {
    DCELL wat;
 };
 
+#define A_TANB    struct sca_tanb
+A_TANB {
+   DCELL sca;
+   DCELL tanb;
+};
+
 #define ASP_FLAG    struct aspect_flag
 ASP_FLAG {
    char asp;
@@ -90,7 +96,8 @@ extern SSEG astar_pts;
 extern BSEG s_b;
 extern CSEG dis, bas, haf, r_h, dep;
 extern SSEG watalt, aspflag;
-extern DSEG tci, slp, s_l, s_g, l_s, ril;
+extern DSEG slp, s_l, s_g, l_s, ril;
+extern SSEG atanb;
 extern double segs_mb;
 extern char zero, one;
 extern double ril_value, d_zero, d_one;
@@ -106,10 +113,11 @@ extern char ril_name[GNAME_MAX], dep_name[GNAME_MAX];
 extern const char *this_mapset;
 extern char seg_name[GNAME_MAX], bas_name[GNAME_MAX], haf_name[GNAME_MAX], thr_name[8];
 extern char ls_name[GNAME_MAX], st_name[GNAME_MAX], sl_name[GNAME_MAX], sg_name[GNAME_MAX];
-extern char wat_name[GNAME_MAX], asp_name[GNAME_MAX], tci_name[GNAME_MAX];
+extern char wat_name[GNAME_MAX], asp_name[GNAME_MAX];
+extern char tci_name[GNAME_MAX], spi_name[GNAME_MAX];
 extern char arm_name[GNAME_MAX], dis_name[GNAME_MAX];
 extern char ele_flag, pit_flag, run_flag, dis_flag, ob_flag;
-extern char wat_flag, asp_flag, arm_flag, ril_flag, dep_flag, tci_flag;
+extern char wat_flag, asp_flag, arm_flag, ril_flag, dep_flag, tci_flag, spi_flag, atanb_flag;
 extern char bas_flag, seg_flag, haf_flag, er_flag;
 extern char st_flag, sb_flag, sg_flag, sl_flag, ls_flag;
 extern FILE *fp;
diff --git a/raster/r.watershed/seg/close_maps.c b/raster/r.watershed/seg/close_maps.c
index 6406611..b933ff8 100644
--- a/raster/r.watershed/seg/close_maps.c
+++ b/raster/r.watershed/seg/close_maps.c
@@ -124,89 +124,175 @@ int close_maps(void)
 	Rast_write_colors(wat_name, this_mapset, &colors);
     }
 
-    /* TCI */
-    if (tci_flag) {
-	DCELL watvalue;
+    /* TCI, SPI */
+    if (atanb_flag) {
+	DCELL *dbuf2;
+	A_TANB sca_tanb;
 	double mean;
+	double sum2, sum_sqr2;
+	int fd2;
+
+	if (tci_flag && spi_flag)
+	    G_message(_("Closing TCI and SPI maps"));
+	else if (tci_flag && !spi_flag)
+	    G_message(_("Closing TCI map"));
+	else if (!tci_flag && spi_flag)
+	    G_message(_("Closing SPI map"));
 
-	G_message(_("Closing TCI map"));
 	sum = sum_sqr = stddev = 0.0;
-	dbuf = Rast_allocate_d_buf();
+	sum2 = sum_sqr2 = 0.0;
 	wabuf = G_malloc(ncols * sizeof(WAT_ALT));
-	dseg_flush(&tci);
+	seg_flush(&atanb);
 	if (!wat_flag)
 	    seg_flush(&watalt);
 
-	fd = Rast_open_new(tci_name, DCELL_TYPE);
+	fd = fd2 = -1;
+	dbuf = dbuf2 = NULL;
+	if (tci_flag) {
+	    fd = Rast_open_new(tci_name, DCELL_TYPE);
+	    dbuf = Rast_allocate_d_buf();
+	}
+	if (spi_flag) {
+	    fd2 = Rast_open_new(spi_name, DCELL_TYPE);
+	    dbuf2 = Rast_allocate_d_buf();
+	}
 
 	for (r = 0; r < nrows; r++) {
 	    G_percent(r, nrows, 1);
-	    Rast_set_d_null_value(dbuf, ncols);	/* reset row to all NULL */
-	    seg_get_row(&watalt, (char *)wabuf, r);
+	    if (tci_flag)
+		Rast_set_d_null_value(dbuf, ncols);	/* reset row to all NULL */
+	    if (spi_flag)
+		Rast_set_d_null_value(dbuf2, ncols);	/* reset row to all NULL */
 	    for (c = 0; c < ncols; c++) {
-		dseg_get(&tci, &dvalue, r, c);
-		watvalue = wabuf[c].wat;
-		if (!Rast_is_d_null_value(&watvalue)) {
-		    dbuf[c] = dvalue;
-		    sum += dvalue;
-		    sum_sqr += dvalue * dvalue;
+		seg_get(&atanb, (char *)&sca_tanb, r, c);
+		if (!Rast_is_d_null_value(&sca_tanb.tanb)) {
+		    
+		    if (tci_flag) {
+			dvalue = log(sca_tanb.sca / sca_tanb.tanb);
+			dbuf[c] = dvalue;
+			sum += dvalue;
+			sum_sqr += dvalue * dvalue;
+		    }
+		    if (spi_flag) {
+			dvalue = sca_tanb.sca * sca_tanb.tanb;
+			dbuf2[c] = dvalue;
+			sum2 += dvalue;
+			sum_sqr2 += dvalue * dvalue;
+		    }
 		}
 	    }
-	    Rast_put_row(fd, dbuf, DCELL_TYPE);
+	    if (tci_flag)
+		Rast_put_row(fd, dbuf, DCELL_TYPE);
+	    if (spi_flag)
+		Rast_put_row(fd2, dbuf2, DCELL_TYPE);
 	}
 	G_percent(r, nrows, 1);    /* finish it */
 
-	Rast_close(fd);
 	G_free(wabuf);
-	G_free(dbuf);
-	dseg_close(&tci);
+	seg_close(&atanb);
 
-	mean = sum / do_points;
-	stddev = sqrt((sum_sqr - (sum + sum / do_points)) / (do_points - 1));
-	G_debug(1, "stddev: %f", stddev);
+	if (tci_flag) {
+	    Rast_close(fd);
+	    G_free(dbuf);
 
-	/* set nice color rules: yellow, green, cyan, blue, black */
-	/* start with white to get more detail? NULL cells are white by default, may be confusing */
+	    mean = sum / do_points;
+	    stddev = sqrt((sum_sqr - (sum + sum / do_points)) / (do_points - 1));
+	    G_debug(1, "stddev: %f", stddev);
 
-	lstddev = log(stddev);
+	    /* set nice color rules: yellow, green, cyan, blue, black */
+	    /* start with white to get more detail? NULL cells are white by default, may be confusing */
 
-	Rast_read_fp_range(tci_name, this_mapset, &accRange);
-	min = max = 0;
-	Rast_get_fp_range_min_max(&accRange, &min, &max);
+	    lstddev = log(stddev);
 
-	Rast_init_colors(&colors);
+	    Rast_read_fp_range(tci_name, this_mapset, &accRange);
+	    min = max = 0;
+	    Rast_get_fp_range_min_max(&accRange, &min, &max);
+
+	    Rast_init_colors(&colors);
+
+	    if (min - 1 < mean - 0.5 * stddev) {
+		clr_min = min - 1;
+		clr_max = mean - 0.5 * stddev;
+		Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 255,
+					      255, 0, &colors);
+	    }
 
-	if (min - 1 < mean - 0.5 * stddev) {
-	    clr_min = min - 1;
-	    clr_max = mean - 0.5 * stddev;
-	    Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 255,
-					  255, 0, &colors);
+	    clr_min = mean - 0.5 * stddev;
+	    clr_max = mean - 0.2 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 0,
+				      255, 0, &colors);
+	    clr_min = clr_max;
+	    clr_max = mean + 0.2 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 0, 255, 0, &clr_max, 0,
+				      255, 255, &colors);
+	    clr_min = clr_max;
+	    clr_max = mean + 0.6 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 0, 255, 255, &clr_max, 0,
+				      0, 255, &colors);
+	    clr_min = clr_max;
+	    clr_max = mean + 1. * stddev;
+	    Rast_add_d_color_rule(&clr_min, 0, 0, 255, &clr_max, 0, 0,
+				      0, &colors);
+
+	    if (max > 0 && max > clr_max) {
+		clr_min = clr_max;
+		clr_max = max + 1;
+		Rast_add_d_color_rule(&clr_min, 0, 0, 0, &clr_max, 0, 0,
+					  0, &colors);
+	    }
+	    Rast_write_colors(tci_name, this_mapset, &colors);
 	}
+	if (spi_flag) {
+	    Rast_close(fd2);
+	    G_free(dbuf2);
 
-	clr_min = mean - 0.5 * stddev;
-	clr_max = mean - 0.2 * stddev;
-	Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 0,
-				  255, 0, &colors);
-	clr_min = clr_max;
-	clr_max = mean + 0.2 * stddev;
-	Rast_add_d_color_rule(&clr_min, 0, 255, 0, &clr_max, 0,
-				  255, 255, &colors);
-	clr_min = clr_max;
-	clr_max = mean + 0.6 * stddev;
-	Rast_add_d_color_rule(&clr_min, 0, 255, 255, &clr_max, 0,
-				  0, 255, &colors);
-	clr_min = clr_max;
-	clr_max = mean + 1. * stddev;
-	Rast_add_d_color_rule(&clr_min, 0, 0, 255, &clr_max, 0, 0,
-				  0, &colors);
+	    mean = sum2 / do_points;
+	    stddev = sqrt((sum_sqr2 - (sum2 + sum2 / do_points)) / (do_points - 1));
+	    G_debug(1, "stddev: %f", stddev);
+
+	    /* set nice color rules: yellow, green, cyan, blue, black */
+	    /* start with white to get more detail? NULL cells are white by default, may be confusing */
 
-	if (max > 0 && max > clr_max) {
+	    lstddev = log(stddev);
+
+	    Rast_read_fp_range(spi_name, this_mapset, &accRange);
+	    min = max = 0;
+	    Rast_get_fp_range_min_max(&accRange, &min, &max);
+
+	    Rast_init_colors(&colors);
+
+	    if (min - 1 < mean - 0.5 * stddev) {
+		clr_min = min - 1;
+		clr_max = mean - 0.5 * stddev;
+		Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 255,
+					      255, 0, &colors);
+	    }
+
+	    clr_min = mean - 0.5 * stddev;
+	    clr_max = mean - 0.2 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 255, 255, 0, &clr_max, 0,
+				      255, 0, &colors);
 	    clr_min = clr_max;
-	    clr_max = max + 1;
-	    Rast_add_d_color_rule(&clr_min, 0, 0, 0, &clr_max, 0, 0,
+	    clr_max = mean + 0.2 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 0, 255, 0, &clr_max, 0,
+				      255, 255, &colors);
+	    clr_min = clr_max;
+	    clr_max = mean + 0.6 * stddev;
+	    Rast_add_d_color_rule(&clr_min, 0, 255, 255, &clr_max, 0,
+				      0, 255, &colors);
+	    clr_min = clr_max;
+	    clr_max = mean + 1. * stddev;
+	    Rast_add_d_color_rule(&clr_min, 0, 0, 255, &clr_max, 0, 0,
 				      0, &colors);
+
+	    if (max > 0 && max > clr_max) {
+		clr_min = clr_max;
+		clr_max = max + 1;
+		Rast_add_d_color_rule(&clr_min, 0, 0, 0, &clr_max, 0, 0,
+					  0, &colors);
+	    }
+	    Rast_write_colors(spi_name, this_mapset, &colors);
 	}
-	Rast_write_colors(tci_name, this_mapset, &colors);
     }
 
     seg_close(&watalt);
diff --git a/raster/r.watershed/seg/do_cum.c b/raster/r.watershed/seg/do_cum.c
index 93f3c81..16888f3 100644
--- a/raster/r.watershed/seg/do_cum.c
+++ b/raster/r.watershed/seg/do_cum.c
@@ -112,8 +112,9 @@ int do_cum(void)
     int asp_c[9] = { 0, 1, 0, -1, -1, -1, 0, 1, 1 };
     WAT_ALT wa, wadown;
     ASP_FLAG af, afdown;
+    A_TANB sca_tanb;
     double *dist_to_nbr, *contour;
-    double tci_val, tci_div, cell_size;
+    double cell_size;
 
     G_message(_("SECTION 3: Accumulating Surface Flow with SFD."));
 
@@ -195,13 +196,15 @@ int do_cum(void)
 	    wadown.wat = valued;
 	    seg_put(&watalt, (char *)&wadown, dr, dc);
 
-	    /* topographic wetness index ln(a / tan(beta)) */
-	    if (tci_flag) {
-		tci_div = contour[np_side] * 
-		       get_slope_tci(wa.ele, wadown.ele,
-				     dist_to_nbr[np_side]);
-		tci_val = log((fabs(wa.wat) * cell_size) / tci_div);
-		dseg_put(&tci, &tci_val, r, c);
+	    /* topographic wetness index ln(a / tan(beta)) and
+	     * stream power index a * tan(beta) */
+	    if (atanb_flag) {
+		sca_tanb.sca = fabs(wa.wat) *
+		               (cell_size / contour[np_side]);
+
+		sca_tanb.tanb = get_slope_tci(wa.ele, wadown.ele,
+				              dist_to_nbr[np_side]);
+		seg_put(&atanb, (char *)&sca_tanb, r, c);
 	    }
 
 	    /* update asp for depression */
@@ -268,10 +271,11 @@ int do_cum_mfd(void)
 {
     int r, c, dr, dc;
     DCELL value, valued, *wat_nbr;
-    double tci_val, tci_div, sum_contour, cell_size;
+    double sum_contour, cell_size;
     POINT point;
     WAT_ALT wa;
     ASP_FLAG af, afdown;
+    A_TANB sca_tanb;
     GW_LARGE_INT killer;
     int threshold;
 
@@ -423,7 +427,7 @@ int do_cum_mfd(void)
 
 	    /* set flow accumulation for neighbours */
 	    max_val = -1;
-	    tci_div = sum_contour = 0.;
+	    sca_tanb.tanb = sum_contour = 0.;
 
 	    if (mfd_cells > 1) {
 		prop = 0.0;
@@ -437,17 +441,17 @@ int do_cum_mfd(void)
 
 			if (FLAG_GET(flag_nbr[ct_dir], WORKEDFLAG)) {
 
-			    if (tci_flag) {
-				sum_contour += contour[ct_dir];
-				tci_div += get_slope_tci(ele, ele_nbr[ct_dir],
-				                         dist_to_nbr[ct_dir]) *
-					   weight[ct_dir];
-			    }
-
 			    weight[ct_dir] = weight[ct_dir] / sum_weight;
 			    /* check everything adds up to 1.0 */
 			    prop += weight[ct_dir];
 
+			    if (atanb_flag) {
+				sum_contour += contour[ct_dir];
+				sca_tanb.tanb += get_slope_tci(ele, ele_nbr[ct_dir],
+				                         dist_to_nbr[ct_dir]) *
+					         weight[ct_dir];
+			    }
+
 			    if (value > 0) {
 				if (wat_nbr[ct_dir] > 0)
 				    wat_nbr[ct_dir] += value * weight[ct_dir];
@@ -483,8 +487,6 @@ int do_cum_mfd(void)
 		    G_warning(_("MFD: cumulative proportion of flow distribution not 1.0 but %f"),
 			      prop);
 		}
-		if (tci_flag)
-		    tci_div /= sum_weight;
 	    }
 	    /* SFD-like accumulation */
 	    else {
@@ -505,18 +507,18 @@ int do_cum_mfd(void)
 		wa.ele = ele_nbr[np_side];
 		seg_put(&watalt, (char *)&wa, dr, dc);
 
-		if (tci_flag) {
+		if (atanb_flag) {
 		    sum_contour = contour[np_side];
-		    tci_div = get_slope_tci(ele, ele_nbr[np_side],
-				            dist_to_nbr[np_side]);
+		    sca_tanb.tanb = get_slope_tci(ele, ele_nbr[np_side],
+				                  dist_to_nbr[np_side]);
 		}
 	    }
 
-	    /* topographic wetness index ln(a / tan(beta)) */
-	    if (tci_flag) {
-		tci_val = log((fabs(value) * cell_size) /
-		              (sum_contour * tci_div));
-		dseg_put(&tci, &tci_val, r, c);
+	    /* topographic wetness index ln(a / tan(beta)) and
+	     * stream power index a * tan(beta) */
+	    if (atanb_flag) {
+		sca_tanb.sca = fabs(value) * (cell_size / sum_contour);
+		seg_put(&atanb, (char *)&sca_tanb, r, c);
 	    }
 	}
 	seg_put(&aspflag, (char *)&af, r, c);
diff --git a/raster/r.watershed/seg/init_vars.c b/raster/r.watershed/seg/init_vars.c
index 77a3faf..95eac9c 100644
--- a/raster/r.watershed/seg/init_vars.c
+++ b/raster/r.watershed/seg/init_vars.c
@@ -22,6 +22,7 @@ int init_vars(int argc, char *argv[])
     DCELL dvalue;
     WAT_ALT wa, *wabuf;
     ASP_FLAG af, af_nbr, *afbuf;
+    A_TANB sca_tanb;
     char MASK_flag;
     void *elebuf, *ptr, *watbuf, *watptr;
     int ele_map_type, wat_map_type;
@@ -32,7 +33,8 @@ int init_vars(int argc, char *argv[])
     /* input */
     ele_flag = pit_flag = run_flag = ril_flag = 0;
     /* output */
-    wat_flag = asp_flag = bas_flag = seg_flag = haf_flag = tci_flag = 0;
+    wat_flag = asp_flag = tci_flag = spi_flag = atanb_flag = 0;
+    bas_flag = seg_flag = haf_flag = 0;
     bas_thres = 0;
     /* shed, unused */
     arm_flag = dis_flag = 0;
@@ -59,6 +61,8 @@ int init_vars(int argc, char *argv[])
 	    wat_flag++;
 	else if (sscanf(argv[r], "tci=%s", tci_name) == 1)
 	    tci_flag++;
+	else if (sscanf(argv[r], "spi=%s", spi_name) == 1)
+	    spi_flag++;
 	else if (sscanf(argv[r], "drainage=%s", asp_name) == 1)
 	    asp_flag++;
 	else if (sscanf(argv[r], "depression=%s", pit_name) == 1)
@@ -129,6 +133,9 @@ int init_vars(int argc, char *argv[])
     if (seg_flag || bas_flag || haf_flag)
 	tot_parts++;
 
+    if (tci_flag || spi_flag)
+	atanb_flag = 1;
+
     G_message(n_("SECTION 1 beginning: Initiating Variables. %d section total.", 
         "SECTION 1 beginning: Initiating Variables. %d sections total.", 
         tot_parts),
@@ -184,9 +191,9 @@ int init_vars(int argc, char *argv[])
     memory_divisor += sizeof(HEAP_PNT) / 4.;
     disk_space += sizeof(HEAP_PNT);
     /* TCI: as is */
-    if (tci_flag) {
-	memory_divisor += sizeof(double);
-	disk_space += sizeof(double);
+    if (atanb_flag) {
+	memory_divisor += sizeof(A_TANB);
+	disk_space += sizeof(A_TANB);
     }
     /* RUSLE */
     if (er_flag) {
@@ -258,8 +265,11 @@ int init_vars(int argc, char *argv[])
     seg_open(&watalt, nrows, ncols, seg_rows, seg_cols, num_open_segs * 2, sizeof(WAT_ALT));
     seg_open(&aspflag, nrows, ncols, seg_rows, seg_cols, num_open_segs * 4, sizeof(ASP_FLAG));
 
-    if (tci_flag)
-	dseg_open(&tci, seg_rows, seg_cols, num_open_segs);
+    if (atanb_flag) {
+	seg_open(&atanb, nrows, ncols, seg_rows, seg_cols, num_open_segs, sizeof(A_TANB));
+	Rast_set_d_null_value(&sca_tanb.sca, 1);
+	Rast_set_d_null_value(&sca_tanb.tanb, 1);
+    }
 
     /* open elevation input */
     ele_fd = Rast_open_old(ele_name, "");
@@ -355,6 +365,9 @@ int init_vars(int argc, char *argv[])
 	    wabuf[c].wat = wat_value;
 	    wabuf[c].ele = alt_value;
 	    alt_value_buf[c] = alt_value;
+	    if (atanb_flag) {
+		seg_put(&atanb, (char *)&sca_tanb, r, c);
+	    }
 	    ptr = G_incr_void_ptr(ptr, ele_size);
 	    if (run_flag) {
 		watptr = G_incr_void_ptr(watptr, wat_size);
diff --git a/raster/r.watershed/seg/main.c b/raster/r.watershed/seg/main.c
index 0b152c7..60bb90f 100644
--- a/raster/r.watershed/seg/main.c
+++ b/raster/r.watershed/seg/main.c
@@ -39,7 +39,8 @@ SSEG astar_pts;
 BSEG s_b;
 CSEG dis, alt, bas, haf, r_h, dep;
 SSEG watalt, aspflag;
-DSEG tci, slp, s_l, s_g, l_s, ril;
+DSEG slp, s_l, s_g, l_s, ril;
+SSEG atanb;
 double segs_mb;
 char zero, one;
 double ril_value, d_zero, d_one;
@@ -56,11 +57,12 @@ char seg_name[GNAME_MAX], bas_name[GNAME_MAX], haf_name[GNAME_MAX],
     thr_name[8];
 char ls_name[GNAME_MAX], st_name[GNAME_MAX], sl_name[GNAME_MAX],
     sg_name[GNAME_MAX];
-char wat_name[GNAME_MAX], asp_name[GNAME_MAX], tci_name[GNAME_MAX];
+char wat_name[GNAME_MAX], asp_name[GNAME_MAX];
+char tci_name[GNAME_MAX], spi_name[GNAME_MAX];
 char arm_name[GNAME_MAX], dis_name[GNAME_MAX];
 char ele_flag, pit_flag, run_flag, dis_flag, ob_flag;
 char wat_flag, asp_flag, arm_flag, ril_flag, dep_flag;
-char bas_flag, seg_flag, haf_flag, er_flag, tci_flag;
+char bas_flag, seg_flag, haf_flag, er_flag, tci_flag, spi_flag, atanb_flag;
 char st_flag, sb_flag, sg_flag, sl_flag, ls_flag;
 FILE *fp;
 
diff --git a/raster/r.watershed/testsuite/r_watershed_test.py b/raster/r.watershed/testsuite/r_watershed_test.py
new file mode 100644
index 0000000..a5f4041
--- /dev/null
+++ b/raster/r.watershed/testsuite/r_watershed_test.py
@@ -0,0 +1,154 @@
+"""
+Name:      r_watershed_test
+Purpose:   This script is to demonstrate a unit test for r.watershed
+           module (originally developed for GIS582 course at NCSU).
+
+Author:    Stephanie Wendel
+Copyright: (C) 205 by Stephanie Wendel and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestWatershed(TestCase):
+    """Test case for watershed module"""
+
+    # Setup variables to be used for outputs
+    accumulation = 'test_accumulation'
+    drainage = 'test_drainage'
+    basin = 'test_basin'
+    stream = 'test_stream'
+    halfbasin = 'test_halfbasin'
+    slopelength = 'test_slopelength'
+    slopesteepness = 'test_slopesteepness'
+    elevation = 'elevation'
+    lengthslope_2 = 'test_lengthslope_2'
+    stream_2 = 'test_stream_2'
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and setup"""
+        # Always use the computational region of the raster elevation
+        cls.use_temp_region()
+        cls.runModule('g.region', raster=cls.elevation)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region"""
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created from the watershed module
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='raster',
+                       name=[self.accumulation, self.drainage,
+                             self.basin, self.stream,
+                             self.halfbasin, self.slopelength,
+                             self.slopesteepness, self.lengthslope_2,
+                             self.stream_2])
+
+    def test_OutputCreated(self):
+        """Test to see if the outputs are created"""
+        # run the watershed module
+        self.assertModule('r.watershed', elevation=self.elevation,
+                          threshold='10000', accumulation=self.accumulation,
+                          drainage=self.drainage, basin=self.basin, stream=self.stream,
+                          half_basin=self.halfbasin, length_slope=self.slopelength,
+                          slope_steepness=self.slopesteepness)
+        # check to see if accumulation output is in mapset
+        self.assertRasterExists(self.accumulation,
+                                msg='accumulation output was not created')
+        # check to see if drainage output is in mapset
+        self.assertRasterExists(self.drainage,
+                                msg='drainage output was not created')
+        # check to see if basin output is in mapset
+        self.assertRasterExists(self.basin,
+                                msg='basin output was not created')
+        # check to see if stream output is in mapset
+        self.assertRasterExists(self.stream,
+                                msg='stream output was not created')
+        # check to see if half.basin output is in mapset
+        self.assertRasterExists(self.halfbasin,
+                                msg='half.basin output was not created')
+        # check to see if length.slope output is in mapset
+        self.assertRasterExists(self.slopelength,
+                                msg='length.slope output was not created')
+        # check to see if slope.steepness output is in mapset
+        self.assertRasterExists(self.slopesteepness,
+                                msg='slope.steepness output was not created')
+
+    def test_fourFlag(self):
+        """Test the -4 flag and the stream and slope lengths
+
+        Tests the -4 flag to see if the stream and slope lengths are
+        approximately the same as the outputs from the default
+        module run.
+        """
+        # Run module with default settings
+        self.assertModule('r.watershed', elevation=self.elevation,
+                          threshold='10000', stream=self.stream,
+                          length_slope=self.slopelength, overwrite=True)
+        # Run module with flag 4
+        self.assertModule('r.watershed', flags='4', elevation='elevation',
+                          threshold='10000', stream=self.stream_2,
+                          length_slope=self.lengthslope_2)
+        # Use the assertRastersNoDifference with precsion 100 to see if close
+        # Compare stream output
+        self.assertRastersNoDifference(self.stream_2, self.stream, 100)
+        # Compare length_slope output
+        self.assertRastersNoDifference(self.lengthslope_2,
+                                       self.slopelength, 10)
+
+    def test_watershedThreadholdfail(self):
+        """Test if threshold of 0 or a negative is accepted
+
+        The module should fail in this test, if it fails, test succeeds.
+        """
+        self.assertModuleFail('r.watershed', elevation=self.elevation,
+                              threshold='0', stream=self.stream, overwrite=True,
+                              msg='Threshold value of 0 considered valid.')
+        self.assertModuleFail('r.watershed', elevation=self.elevation,
+                              threshold='-1', stream=self.stream, overwrite=True,
+                              msg='Threshold value of 0 considered valid.')
+
+    def test_thresholdsize(self):
+        """Test the expected range of basin output values"""
+        self.assertModule('r.watershed', elevation=self.elevation,
+                          threshold='100000', basin=self.basin, overwrite=True)
+        # it is expected that 100k Threshold has a min=2 and max=12 for this
+        # data
+        self.assertRasterMinMax(self.basin, 2, 12)
+        # it is expected that 100k Threshold has a min=2 and max=256 for this
+        # data
+        self.assertModule('r.watershed', elevation=self.elevation,
+                          threshold='10000', basin=self.basin, overwrite=True)
+        self.assertRasterMinMax(self.basin, 2, 256)
+
+    def test_drainageDirection(self):
+        """Test if the drainage direction is between -8 and 8."""
+        self.assertModule('r.watershed', elevation=self.elevation,
+                          threshold='100000', drainage=self.drainage)
+        # Make sure the min/max is between -8 and 8
+        self.assertRasterMinMax(self.drainage, -8, 8,
+                                msg='Direction must be between -8 and 8')
+
+    def test_basinValue(self):
+        """Check to see if the basin value is 0 or greater"""
+        self.assertModule('r.watershed', elevation=self.elevation,
+                          threshold='10000', basin=self.basin)
+        # Make sure the minimum value is 0 for basin value representing unique
+        # positive integer.
+        # TODO: test just min, max is theoretically unlimited
+        # or set a lower value according to what is expected with this data
+        # TODO: add test which tests that 'max basin id' == 'num of basins'
+        self.assertRasterMinMax(self.basin, 0, 1000000,
+                                msg='A basin value is less than 0 or greater than 1000000')
+
+if __name__ == '__main__':
+    test()
diff --git a/raster/r.what/main.c b/raster/r.what/main.c
index 5f9403a..de60c46 100644
--- a/raster/r.what/main.c
+++ b/raster/r.what/main.c
@@ -51,7 +51,7 @@ int main(int argc, char *argv[])
 {
     int i, j;
     int nfiles;
-    char *name;
+    char *oname;
     int fd[NFILES];
     struct Categories cats[NFILES];
     struct Cell_head window;
@@ -164,10 +164,10 @@ int main(int argc, char *argv[])
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
-    name = opt.output->answer;
-    if (name != NULL && strcmp(name, "-") != 0) {
-	if (NULL == freopen(name, "w", stdout)) {
-	    G_fatal_error(_("Unable to open file <%s> for writing"), name);
+    oname = opt.output->answer;
+    if (oname != NULL && strcmp(oname, "-") != 0) {
+	if (NULL == freopen(oname, "w", stdout)) {
+	    G_fatal_error(_("Unable to open file <%s> for writing"), oname);
 	}
     }
 
diff --git a/raster/r.what/r.what.html b/raster/r.what/r.what.html
index 211d9c2..c1cbe63 100644
--- a/raster/r.what/r.what.html
+++ b/raster/r.what/r.what.html
@@ -176,4 +176,4 @@ Michael Shapiro, U.S. Army Construction Engineering Research Laboratory<br>
 Vector point input added by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</i>
+<i>Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/raster/rasterintro.html b/raster/rasterintro.html
index 2231bb5..10fd5f0 100644
--- a/raster/rasterintro.html
+++ b/raster/rasterintro.html
@@ -276,6 +276,59 @@ is important to know that operations on NULL cells lead to NULL cells.
 The GRASS GIS raster format is architecture independent and portable between
 32bit and 64bit machines.
 
+<h3>Raster compression</h3>
+<!-- keep in sync with raster/r.compress/r.compress.html -->
+
+
+All GRASS GIS raster map types are by default ZLIB compressed, i.e. using
+ZLIB's deflate algorithm. Through the environment variable
+<tt>GRASS_COMPRESSOR</tt> the compression method can be set to RLE, ZLIB,
+LZ4, or BZIP2.
+<p>
+Integer (CELL type) raster maps can be compressed with RLE if
+the environment variable <tt>GRASS_INT_ZLIB</tt> exists and is set to value 
+0. However, this is not recommended.
+<p>
+Floating point (FCELL, DCELL) raster maps never use RLE compression;
+they are either compressed with ZLIB, LZ4, BZIP2 or are uncompressed.
+
+<dl>
+<dt><strong>RLE</strong></dt>
+<dd><b>DEPRECATED</b> Run-Length Encoding, poor compression ratio but 
+fast. It is kept for backwards compatibility to read raster maps 
+created with GRASS 6. It is only used for raster maps of type CELL.
+FCELL and DCELL maps are never and have never been compressed with RLE.
+</dd>
+<dt><strong>ZLIB</strong></dt>
+<dd>ZLIB's deflate is the default compression method for all raster 
+maps. GRASS GIS 7 uses by default 1 as ZLIB compression level which is the 
+best compromise betweeen speed and compression ratio, also when 
+compared to other available compression methods. Valid levels are in 
+the range [1, 9] and can be set with the environment variable 
+<tt>GRASS_ZLIB_LEVEL</tt>.</dd>
+<dt><strong>LZ4</strong></dt>
+<dd>LZ4 is a very fast compression method, about as fast as no 
+compression. Decompression is also very fast. The compression ratio is 
+generally higher than for RLE but worse than for ZLIB. LZ4 is 
+recommended if disk space is not a limiting factor.</dd>
+<dt><strong>BZIP2</strong></dt>
+<dd>BZIP2 can provide compression ratios much higher than the other 
+methods, but only for large raster maps (> 10000 columns). For large 
+raster maps, disk space consumption can be reduced by 30 - 50% when 
+using BZIP2 instead of ZLIB's deflate. BZIP2 is the slowest compression 
+and decompression method. However, if reading from / writing to a 
+storage device is the limiting factor, BZIP2 compression can speed up 
+raster map processing. Be aware that for smaller raster maps, BZIP2 
+compression ratio can be worse than other compression methods.</dd> 
+</dl>
+
+<p>
+In the internal cellhd file, the value for "compressed" is 1 for RLE, 2 
+for ZLIB, 3 for LZ4, and 4 for BZIP2.
+<p>
+Obviously, decompression is controlled by the raster map's compression,
+not the environment variable.
+
 <h3>See also</h3>
 
 <ul>
diff --git a/raster3d/Makefile b/raster3d/Makefile
index 172697e..c605158 100644
--- a/raster3d/Makefile
+++ b/raster3d/Makefile
@@ -2,9 +2,12 @@ MODULE_TOPDIR = ..
 
 SUBDIRS = \
 	r3.cross.rast \
+	r3.flow \
+	r3.gradient \
 	r3.gwflow \
 	r3.in.ascii \
 	r3.in.bin \
+	r3.in.lidar \
 	r3.in.v5d \
 	r3.info \
 	r3.mask \
diff --git a/raster3d/r3.flow/Makefile b/raster3d/r3.flow/Makefile
new file mode 100644
index 0000000..e0ccc1e
--- /dev/null
+++ b/raster3d/r3.flow/Makefile
@@ -0,0 +1,15 @@
+MODULE_TOPDIR = ../..
+
+PROGRAMS=r3.flow test.r3flow 
+
+LIBES = $(RASTER3DLIB) $(RASTERLIB) $(GISLIB) $(VECTORLIB) $(DBMILIB)
+DEPENDENCIES = $(RASTER3DDEP) $(RASTERDEP) $(GISDEP) $(VECTORDEP) $(DBMIDEP)
+EXTRA_INC = $(VECT_INC)
+EXTRA_CFLAGS = $(VECT_CFLAGS)
+
+r3_flow_OBJS = main.o flowline.o integrate.o interpolate.o voxel_traversal.o
+test_r3flow_OBJS = test_main.o flowline.o integrate.o interpolate.o voxel_traversal.o
+
+include $(MODULE_TOPDIR)/include/Make/Multi.make
+
+default: multi
diff --git a/raster3d/r3.flow/flowline.c b/raster3d/r3.flow/flowline.c
new file mode 100644
index 0000000..4cd8458
--- /dev/null
+++ b/raster3d/r3.flow/flowline.c
@@ -0,0 +1,223 @@
+/*!
+   \file flowline.c
+
+   \brief Generates flowlines as vector lines
+
+   (C) 2014 by the GRASS Development Team
+
+   This program is free software under the GNU General Public
+   License (>=v2).  Read the file COPYING that comes with GRASS
+   for details.
+
+   \author Anna Petrasova
+ */
+#include <grass/raster3d.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+#include <grass/dbmi.h>
+
+#include "r3flow_structs.h"
+#include "integrate.h"
+#include "flowline.h"
+#include "voxel_traversal.h"
+
+static void write_segment(struct Map_info *flowline_vec,
+			  struct line_pnts *points, struct line_cats *cats,
+			  const double *point, int *cat)
+{
+    Vect_append_point(points, point[0], point[1], point[2]);
+
+    Vect_cat_set(cats, 1, *cat);
+    (*cat)++;
+    Vect_write_line(flowline_vec, GV_LINE, points, cats);
+    Vect_reset_line(points);
+    Vect_reset_cats(cats);
+    Vect_append_point(points, point[0], point[1], point[2]);
+}
+
+static void write_segment_db(struct field_info *finfo, dbDriver * driver,
+			     dbString * sql, const double velocity,
+			     double scalar_value, double sampled_map_value,
+			     int write_scalar, int use_sampled_map,
+			     const int cat)
+{
+    char buf[200];
+
+    sprintf(buf, "insert into %s values (%d, %e", finfo->table, cat, velocity);
+    db_set_string(sql, buf);
+    if (write_scalar) {
+	sprintf(buf, ", %e", scalar_value);
+	db_append_string(sql, buf);
+    }
+    if (use_sampled_map) {
+        sprintf(buf, ", %e", sampled_map_value);
+        db_append_string(sql, buf);
+    }
+    db_append_string(sql, ")");
+
+
+    if (db_execute_immediate(driver, sql) != DB_OK) {
+	G_fatal_error(_("Unable to insert new record: '%s'"),
+		      db_get_string(sql));
+    }
+}
+
+static double get_map_value(RASTER3D_Region * region, RASTER3D_Map *map,
+			    double north, double east, double top)
+{
+    int col, row, depth;
+    double val;
+
+    Rast3d_location2coord(region, north, east, top, &col, &row, &depth);
+    Rast3d_get_value(map, col, row, depth, &val,
+		     DCELL_TYPE);
+
+    return val;
+}
+
+/*!
+   \brief Computes flowline by integrating velocity field.
+
+   \param region pointer to current 3D region
+   \param seed starting seed (point)
+   \param velocity_field pointer to array of 3 3D raster maps
+   \param integration pointer to integration struct
+   \param flowline_vec pointer to Map_info struct of flowline vector
+   \param cats pointer to line_cats struct of flowline vector
+   \param points pointer to line_pnts struct of flowline vector
+   \param[in,out] cat starting category of the newly created flow line
+   \param if_table TRUE if attribute table should be created and filled
+ */
+void compute_flowline(RASTER3D_Region * region, const struct Seed *seed,
+		      struct Gradient_info *gradient_info,
+		      RASTER3D_Map * flowacc, RASTER3D_Map * sampled_map,
+		      struct Integration *integration,
+		      struct Map_info *flowline_vec, struct line_cats *cats,
+		      struct line_pnts *points, int *cat, int if_table,
+		      struct field_info *finfo, dbDriver * driver)
+{
+    int i, j, count;
+    double delta_t;
+    double velocity_norm;
+    double point[3], new_point[3];
+    double vel_x, vel_y, vel_z;
+    double min_step, max_step;
+    int col, row, depth;
+    int last_col, last_row, last_depth;
+    int coor_diff;
+    DCELL scalar_value;
+    DCELL sampled_map_value;
+    FCELL value;
+    int *trav_coords;
+    int size, trav_count;
+    dbString sql;
+    double velocity;
+
+    point[0] = seed->x;
+    point[1] = seed->y;
+    point[2] = seed->z;
+
+    last_col = last_row = last_depth = -1;
+
+    size = 5;
+    value = 0;
+    trav_coords = G_malloc(3 * size * sizeof(int));
+
+    if (seed->flowline) {
+	/* append first point */
+	Vect_append_point(points, seed->x, seed->y, seed->z);
+	db_init_string(&sql);
+    }
+    count = 1;
+    while (count <= integration->limit) {
+	if (get_velocity(region, gradient_info, point[0], point[1], point[2],
+			 &vel_x, &vel_y, &vel_z) < 0)
+	    break;		/* outside region */
+	velocity_norm = norm(vel_x, vel_y, vel_z);
+
+	if (velocity_norm <= VELOCITY_EPSILON)
+	    break;		/* zero velocity means end of propagation */
+
+	/* convert to time */
+	delta_t = get_time_step(integration->unit, integration->step,
+				velocity_norm, integration->cell_size);
+
+	/* integrate */
+	min_step = get_time_step("cell", integration->min_step, velocity_norm,
+				 integration->cell_size);
+	max_step = get_time_step("cell", integration->max_step, velocity_norm,
+				 integration->cell_size);
+	delta_t *= (integration->actual_direction == FLOWDIR_UP ? 1 : -1);
+	if (rk45_integrate_next
+	    (region, gradient_info, point, new_point,
+	     &delta_t, &velocity, min_step, max_step,
+	     integration->max_error) < 0)
+	    break;
+
+	if (seed->flowline) {
+	    if (if_table) {
+		write_segment(flowline_vec, points, cats, new_point, cat);
+		if (gradient_info->compute_gradient)
+		    scalar_value = get_map_value(region, gradient_info->scalar_map,
+						 point[1], point[0], point[2]);
+		if (sampled_map)
+		    sampled_map_value = get_map_value(region, sampled_map,
+						      point[1], point[0], point[2]);
+		write_segment_db(finfo, driver, &sql, velocity, scalar_value,
+				 sampled_map_value, gradient_info->compute_gradient,
+				 sampled_map ? 1 : 0, *cat - 1);
+	    }
+	    else
+		Vect_append_point(points, point[0], point[1], point[2]);
+	}
+	if (seed->flowaccum) {
+	    Rast3d_location2coord(region, new_point[1], new_point[0],
+				  new_point[2], &col, &row, &depth);
+	    if (!(last_col == col && last_row == row && last_depth == depth)) {
+		value = Rast3d_get_float(flowacc, col, row, depth);
+		Rast3d_put_float(flowacc, col, row, depth, value + 1);
+		if (last_col >= 0) {
+		    coor_diff = (abs(last_col - col) + abs(last_row - row) +
+				 abs(last_depth - depth));
+		    /* if not run for the 1. time and previous and next point coordinates
+		       differ by more than 1 voxel coordinate */
+		    if (coor_diff > 1) {
+			traverse(region, point, new_point, &trav_coords, &size,
+				 &trav_count);
+			for (j = 0; j < trav_count; j++) {
+			    value =
+				Rast3d_get_float(flowacc,
+						 trav_coords[3 * j + 0],
+						 trav_coords[3 * j + 1],
+						 trav_coords[3 * j + 2]);
+			    Rast3d_put_float(flowacc, trav_coords[3 * j + 0],
+					     trav_coords[3 * j + 1],
+					     trav_coords[3 * j + 2],
+					     value + 1);
+			}
+		    }
+		}
+		last_col = col;
+		last_row = row;
+		last_depth = depth;
+	    }
+	}
+	for (i = 0; i < 3; i++) {
+	    point[i] = new_point[i];
+	}
+	count++;
+
+    }
+    if (seed->flowline) {
+	if (points->n_points > 1) {
+	    Vect_cat_set(cats, 1, *cat);
+	    (*cat)++;
+	    Vect_write_line(flowline_vec, GV_LINE, points, cats);
+	    G_debug(1, "Flowline ended after %d steps", count - 1);
+	}
+	Vect_reset_line(points);
+	Vect_reset_cats(cats);
+	db_free_string(&sql);
+    }
+    G_free(trav_coords);
+}
diff --git a/raster3d/r3.flow/flowline.h b/raster3d/r3.flow/flowline.h
new file mode 100644
index 0000000..b3e3c03
--- /dev/null
+++ b/raster3d/r3.flow/flowline.h
@@ -0,0 +1,18 @@
+#ifndef FLOWLINE_H
+#define FLOWLINE_H
+
+#include <grass/raster3d.h>
+#include <grass/vector.h>
+
+#include "r3flow_structs.h"
+
+static const double VELOCITY_EPSILON = 1e-8;
+
+void compute_flowline(RASTER3D_Region * region, const struct Seed *seed,
+		      struct Gradient_info *gradient_info,
+		      RASTER3D_Map * flowacc, RASTER3D_Map *sampled_map,
+		      struct Integration *integration,
+		      struct Map_info *flowline_vec, struct line_cats *cats,
+		      struct line_pnts *points, int *cat, int if_table,
+		      struct field_info *finfo, dbDriver *driver);
+#endif // FLOWLINE_H
diff --git a/raster3d/r3.flow/integrate.c b/raster3d/r3.flow/integrate.c
new file mode 100644
index 0000000..6a279d0
--- /dev/null
+++ b/raster3d/r3.flow/integrate.c
@@ -0,0 +1,227 @@
+/*!
+   \file integrate.c
+
+   \brief Flowline integration using Runge-Kutta 45 method
+   with adaptive step size control. Implementation based
+   on VTK class vtkRungeKutta45.
+
+   (C) 2014 by the GRASS Development Team
+
+   This program is free software under the GNU General Public
+   License (>=v2).  Read the file COPYING that comes with GRASS
+   for details.
+
+   \author Anna Petrasova
+ */
+
+#include <math.h>
+#include <float.h>
+#include <string.h>
+#include <grass/raster3d.h>
+
+#include "interpolate.h"
+#include "integrate.h"
+#include "r3flow_structs.h"
+
+/*!
+   \brief Computes vector norm.
+
+   \param x,y,z vector components
+
+   \return norm
+ */
+double norm(const double x, const double y, const double z)
+{
+    return sqrt(x * x + y * y + z * z);
+}
+
+/*!
+   \brief Converts integration step to time
+
+   \param unit type of unit
+   \param step step value
+   \param velocity velocity value
+   \param cell_size size of voxel diagonal
+
+   \return time step
+ */
+double get_time_step(const char *unit, const double step,
+		     const double velocity, const double cell_size)
+{
+    if (strcmp(unit, "time") == 0)
+	return step;
+    else if (strcmp(unit, "length") == 0)
+	return step / velocity;
+    else			/* cell */
+	return (step * cell_size) / velocity;
+}
+
+
+int get_velocity(RASTER3D_Region * region, struct Gradient_info *gradient_info,
+		 const double x, const double y, const double z,
+		 double *vel_x, double *vel_y, double *vel_z)
+{
+    if (gradient_info->compute_gradient)
+        return get_gradient(region, gradient_info, y, x, z, vel_x, vel_y, vel_z);
+
+    return interpolate_velocity(region, gradient_info->velocity_maps, y, x, z,
+				vel_x, vel_y, vel_z);
+}
+
+/*!
+   \brief Runge-Kutta45 (inner steps) 
+
+   \param region pointer to current 3D region
+   \param velocity_field pointer to array of 3 3D raster maps (velocity field)
+   \param point pointer to array of geographic coordinates of starting point
+   \param[out] next_point pointer to array of geographic coordinates of integrated point
+   \param delta_t integration time step
+   \param error pointer to array of error values
+
+   \return 0 success
+   \return -1 out of region or null values
+ */
+static int rk45_next(RASTER3D_Region * region, struct Gradient_info *gradient_info,
+		     const double *point, double *next_point,
+		     const double delta_t, double *velocity, double *error)
+{
+    double tmp1[6][3];		/* 3 is 3 dimensions, 6 is the number of k's */
+    double tmp_point[3];
+    double vel_x, vel_y, vel_z;
+    double sum_tmp;
+    int i, j, k;
+    double vel_sq;
+
+    if (get_velocity(region, gradient_info, point[0], point[1], point[2],
+		     &vel_x, &vel_y, &vel_z) < 0)
+	return -1;
+
+    tmp1[0][0] = vel_x;
+    tmp1[0][1] = vel_y;
+    tmp1[0][2] = vel_z;
+
+    /* compute k's */
+    for (i = 1; i < 6; i++) {
+	for (j = 0; j < 3; j++) {	/* for each coordinate */
+	    sum_tmp = 0;
+	    for (k = 0; k < i; k++) {	/* k1; k1, k2; ... */
+		sum_tmp += B[i - 1][k] * tmp1[k][j];
+	    }
+	    tmp_point[j] = point[j] + delta_t * sum_tmp;
+	}
+	if (get_velocity
+	    (region, gradient_info, tmp_point[0], tmp_point[1], tmp_point[2],
+	     &vel_x, &vel_y, &vel_z) < 0)
+	    return -1;
+
+	tmp1[i][0] = vel_x;
+	tmp1[i][1] = vel_y;
+	tmp1[i][2] = vel_z;
+    }
+
+    vel_sq = 0;
+    /* compute next point */
+    for (j = 0; j < 3; j++) {
+	sum_tmp = 0;
+	for (i = 0; i < 6; i++) {
+	    sum_tmp += C[i] * tmp1[i][j];
+	}
+	next_point[j] = point[j] + delta_t * sum_tmp;
+	vel_sq += sum_tmp * sum_tmp;
+    }
+    *velocity = sqrt(vel_sq);
+
+    if (!Rast3d_is_valid_location
+	(region, next_point[1], next_point[0], next_point[2]))
+	return -1;
+
+    /* compute error vector */
+    for (j = 0; j < 3; j++) {
+	sum_tmp = 0;
+	for (i = 0; i < 6; i++) {
+	    sum_tmp += DC[i] * tmp1[i][j];
+	}
+	error[j] = delta_t * sum_tmp;
+    }
+
+    return 0;
+}
+
+/*!
+   \brief Runge-Kutta45 with step size control 
+
+   \param region pointer to current 3D region
+   \param velocity_field pointer to array of 3 3D raster maps (velocity field)
+   \param point pointer to array of geographic coordinates of starting point
+   \param[out] next_point pointer to array of geographic coordinates of integrated point
+   \param[in,out] delta_t integration time step
+   \param min_step minimum time step
+   \param max_step maximum time step
+
+   \return 0 success
+   \return -1 out of region or null values
+ */
+int rk45_integrate_next(RASTER3D_Region * region,
+			struct Gradient_info *gradient_info, const double *point,
+			double *next_point, double *delta_t, double *velocity,
+			const double min_step, const double max_step,
+			const double max_error)
+{
+    double estimated_error;
+    double error_ratio;
+    double error[3];
+    double tmp, tmp2;
+    int do_break;
+
+    estimated_error = DBL_MAX;
+
+    /* check if min_step < delta_t < max_step */
+    if (fabs(*delta_t) < min_step)
+	*delta_t = min_step * (*delta_t > 0 ? 1 : -1);
+    else if (fabs(*delta_t) > max_step)
+	*delta_t = max_step * (*delta_t > 0 ? 1 : -1);
+
+    /* try to iteratively decrease error to less than max error */
+    while (estimated_error > max_error) {
+	/* compute next point and get estimated error */
+	if (rk45_next
+	    (region, gradient_info, point, next_point, *delta_t,
+	     velocity, error) == 0)
+	    estimated_error = norm(error[0], error[1], error[2]);
+	else
+	    return -1;
+
+	/* compute new step size (empirically) */
+	error_ratio = estimated_error / max_error;
+	if (error_ratio == 0.0)
+	    tmp = *delta_t > 0 ? min_step : -min_step;
+	else if (error_ratio > 1)
+	    tmp = 0.9 * *delta_t * pow(error_ratio, -0.25);
+	else
+	    tmp = 0.9 * *delta_t * pow(error_ratio, -0.2);
+	tmp2 = fabs(tmp);
+
+	do_break = FALSE;
+
+	/* adjust new step size to be within min max limits */
+	if (tmp2 > max_step) {
+	    *delta_t = max_step * (*delta_t > 0 ? 1 : -1);
+	    do_break = TRUE;
+	}
+	else if (tmp2 < min_step) {
+	    *delta_t = min_step * (*delta_t > 0 ? 1 : -1);
+	    do_break = TRUE;
+	}
+	else
+	    *delta_t = tmp;
+
+	/* break when the adjustment was needed (not sure why) */
+	if (do_break) {
+	    if (rk45_next(region, gradient_info, point, next_point,
+			  *delta_t, velocity, error) < 0)
+		return -1;
+	    break;
+	}
+    }
+    return 0;
+}
diff --git a/raster3d/r3.flow/integrate.h b/raster3d/r3.flow/integrate.h
new file mode 100644
index 0000000..9aad29e
--- /dev/null
+++ b/raster3d/r3.flow/integrate.h
@@ -0,0 +1,35 @@
+#ifndef INTEGRATE_H
+#define INTEGRATE_H
+
+#include <grass/raster3d.h>
+
+#include "r3flow_structs.h"
+
+/* Cash-Karp parameters */
+static const double B[5][5] = { {1. / 5, 0, 0, 0, 0},
+{3. / 40, 9. / 40, 0, 0, 0},
+{3. / 10, -9. / 10, 6. / 5, 0, 0},
+{-11. / 54, 5. / 2, -70. / 27, 35. / 27, 0},
+{1631. / 55296, 175. / 512, 575. / 13824,
+ 44275. / 110592, 253. / 4096}
+};
+static const double C[6] =
+    { 37. / 378, 0, 250. / 621, 125. / 594, 0, 512. / 1771 };
+static const double DC[6] = { 37. / 378 - 2825. / 27648, 0,
+    250. / 621 - 18575. / 48384, 125. / 594 - 13525. / 55296,
+    -277. / 14336, 512. / 1771 - 1. / 4
+};
+
+double norm(const double x, const double y, const double z);
+int get_velocity(RASTER3D_Region * region, struct Gradient_info *gradient_info,
+		 const double x, const double y, const double z,
+		 double *vel_x, double *vel_y, double *vel_z);
+double get_time_step(const char *unit, const double step,
+		     const double velocity, const double cell_size);
+int rk45_integrate_next(RASTER3D_Region * region,
+			struct Gradient_info *gradient_info, const double *point,
+			double *next_point, double *delta_t,
+			double *velocity, const double min_step,
+			const double max_step, const double max_error);
+
+#endif // INTEGRATE_H
diff --git a/raster3d/r3.flow/interpolate.c b/raster3d/r3.flow/interpolate.c
new file mode 100644
index 0000000..36a7a40
--- /dev/null
+++ b/raster3d/r3.flow/interpolate.c
@@ -0,0 +1,337 @@
+/*!
+   \file interpolate.c
+
+   \brief Trilinear interpolation
+
+   (C) 2014 by the GRASS Development Team
+
+   This program is free software under the GNU General Public
+   License (>=v2).  Read the file COPYING that comes with GRASS
+   for details.
+
+   \author Anna Petrasova
+ */
+
+#include <grass/gis.h>
+#include <grass/raster3d.h>
+
+#include "r3flow_structs.h"
+#include "interpolate.h"
+
+/*!
+   \brief Finds 8 nearest voxels from a point.
+
+   \param region pointer to current 3D region
+   \param north,east,top geographic coordinates
+   \param[out] x,y,z pointer to indices of neighbouring voxels
+ */
+static void find_nearest_voxels(RASTER3D_Region * region,
+				const double north, const double east,
+				const double top, int *x, int *y, int *z)
+{
+    double n_minus, e_minus, t_minus;
+    double n_plus, e_plus, t_plus;
+
+    n_minus = north - region->ns_res / 2;
+    n_plus = north + region->ns_res / 2;
+    e_minus = east - region->ew_res / 2;
+    e_plus = east + region->ew_res / 2;
+    t_minus = top - region->tb_res / 2;
+    t_plus = top + region->tb_res / 2;
+
+    Rast3d_location2coord(region, n_minus, e_minus, t_minus, x++, y++, z++);
+    Rast3d_location2coord(region, n_minus, e_plus, t_minus, x++, y++, z++);
+    Rast3d_location2coord(region, n_plus, e_minus, t_minus, x++, y++, z++);
+    Rast3d_location2coord(region, n_plus, e_plus, t_minus, x++, y++, z++);
+    Rast3d_location2coord(region, n_minus, e_minus, t_plus, x++, y++, z++);
+    Rast3d_location2coord(region, n_minus, e_plus, t_plus, x++, y++, z++);
+    Rast3d_location2coord(region, n_plus, e_minus, t_plus, x++, y++, z++);
+    Rast3d_location2coord(region, n_plus, e_plus, t_plus, x, y, z);
+}
+
+/*!
+   \brief Trilinear interpolation
+
+   Computation is based on the sum of values of nearest voxels
+   weighted by the relative distance of a point
+   to the center of the nearest voxels.
+
+   \param array_values pointer to values of 8 (neigboring) voxels
+   \param x,y,z relative coordinates (0 - 1)
+   \param[out] interpolated pointer to the array (of size 3) of interpolated values
+ */
+static void trilinear_interpolation(const double *array_values,
+				    const double x, const double y,
+				    const double z, double *interpolated)
+{
+    int i, j;
+    double rx, ry, rz, value;
+    double weights[8];
+
+    rx = 1 - x;
+    ry = 1 - y;
+    rz = 1 - z;
+    weights[0] = rx * ry * rz;
+    weights[1] = x * ry * rz;
+    weights[2] = rx * y * rz;
+    weights[3] = x * y * rz;
+    weights[4] = rx * ry * z;
+    weights[5] = x * ry * z;
+    weights[6] = rx * y * z;
+    weights[7] = x * y * z;
+
+
+    /* weighted sum of surrounding values */
+    for (i = 0; i < 3; i++) {
+	value = 0;
+	for (j = 0; j < 8; j++) {
+	    value += weights[j] * array_values[i * 8 + j];
+	}
+	interpolated[i] = value;
+    }
+}
+
+/*!
+   \brief Converts geographic to relative coordinates
+
+   Converts geographic to relative coordinates
+   which are needed for trilinear interpolation.
+
+
+   \param region pointer to current 3D region
+   \param north,east,top geographic coordinates
+   \param[out] x,y,z pointer to relative coordinates (0 - 1)
+ */
+static void get_relative_coords_for_interp(RASTER3D_Region * region,
+					   const double north,
+					   const double east,
+					   const double top, double *x,
+					   double *y, double *z)
+{
+    int col, row, depth;
+    double temp;
+
+    Rast3d_location2coord(region, north, east, top, &col, &row, &depth);
+
+    /* x */
+    temp = east - region->west - col * region->ew_res;
+    *x = (temp > region->ew_res / 2 ?
+	  temp - region->ew_res / 2 : temp + region->ew_res / 2)
+	/ region->ew_res;
+    /* y */
+    temp = north - region->south - (region->rows - row - 1) * region->ns_res;
+    *y = (temp > region->ns_res / 2 ?
+	  temp - region->ns_res / 2 : temp + region->ns_res / 2)
+	/ region->ns_res;
+    /* z */
+    temp = top - region->bottom - depth * region->tb_res;
+    *z = (temp > region->tb_res / 2 ?
+	  temp - region->tb_res / 2 : temp + region->tb_res / 2)
+	/ region->tb_res;
+}
+
+/*!
+   \brief Interpolates velocity at a given point.
+
+   \param region pointer to current 3D region
+   \param map pointer to array of 3 3D raster maps (velocity field)
+   \param north,east,top geographic coordinates
+   \param[out] vel_x,vel_y,vel_z interpolated velocity
+
+   \return 0 success
+   \return -1 out of region
+ */
+int interpolate_velocity(RASTER3D_Region * region, RASTER3D_Map ** map,
+			 const double north, const double east,
+			 const double top, double *vel_x, double *vel_y,
+			 double *vel_z)
+{
+    int i, j;
+    double values[24];		/* 3 x 8, 3 dimensions, 8 neighbors */
+    double value;
+    double interpolated[3];
+    int x[8], y[8], z[8];
+    double rel_x, rel_y, rel_z;
+    int type;
+
+    /* check if we are out of region, any array should work */
+    if (!Rast3d_is_valid_location(region, north, east, top))
+	return -1;
+
+    find_nearest_voxels(region, north, east, top, x, y, z);
+    /* get values of the nearest cells */
+    for (i = 0; i < 3; i++) {
+	type = Rast3d_tile_type_map(map[i]);
+	for (j = 0; j < 8; j++) {
+
+	    Rast3d_get_value_region(map[i], x[j], y[j], z[j], &value, type);
+	    if (Rast_is_null_value(&value, type))
+		values[i * 8 + j] = 0;
+	    else
+		values[i * 8 + j] = value;
+	}
+    }
+
+    /* compute weights */
+    get_relative_coords_for_interp(region, north, east, top,
+				   &rel_x, &rel_y, &rel_z);
+
+    trilinear_interpolation(values, rel_x, rel_y, rel_z, interpolated);
+    *vel_x = interpolated[0];
+    *vel_y = interpolated[1];
+    *vel_z = interpolated[2];
+
+    return 0;
+}
+/*!
+   \brief Computes gradient for a point.
+
+   \param region pointer to current 3D region
+   \param gradient_info struct which remembers values
+          related to gradient computation to avoid computation every time
+   \param north,east,top geographic coordinates
+   \param[out] vel_x,vel_y,vel_z interpolated gradient components
+
+   \return 0 success
+   \return -1 out of region
+ */
+int get_gradient(RASTER3D_Region * region,
+		 struct Gradient_info *gradient_info, const double north,
+		 const double east, const double top, double *vel_x, double *vel_y,
+		 double *vel_z)
+{
+
+    int i, d, r, c, count;
+    int near_x[8], near_y[8], near_z[8];
+    int minx, maxx, miny, maxy, minz, maxz;
+    int xshift, yshift, zshift;
+    double rel_x, rel_y, rel_z;
+    double scalar_map_array[64];
+    double grad_x_map_array[64], grad_y_map_array[64], grad_z_map_array[64];
+    RASTER3D_Array_double array;
+    RASTER3D_Array_double grad_x, grad_y, grad_z;
+    RASTER3D_Array_double *grad_xyz[3];
+    double step[3];
+    double interpolated[3];
+
+    step[0] = region->ew_res;
+    step[1] = region->ns_res;
+    step[2] = region->tb_res;
+
+    array.array = scalar_map_array;
+    array.sx = array.sy = array.sz = 4;
+    grad_x.array = grad_x_map_array;
+    grad_y.array = grad_y_map_array;
+    grad_z.array = grad_z_map_array;
+    grad_x.sx = grad_x.sy = grad_x.sz = 4;
+    grad_y.sx = grad_y.sy = grad_y.sz = 4;
+    grad_z.sx = grad_z.sy = grad_z.sz = 4;
+
+    find_nearest_voxels(region, north, east, top, near_x, near_y, near_z);
+    minx = near_x[0];
+    maxx = near_x[7];
+    miny = near_y[7];
+    maxy = near_y[0];
+    minz = near_z[0];
+    maxz = near_z[7];
+
+    /* position of x, y, z neighboring voxels */
+    if (!gradient_info->initialized ||
+	(gradient_info->neighbors_pos[0] != minx ||
+	 gradient_info->neighbors_pos[1] != miny ||
+	 gradient_info->neighbors_pos[2] != minz)) {
+
+	gradient_info->neighbors_pos[0] = minx;
+	gradient_info->neighbors_pos[1] = miny;
+	gradient_info->neighbors_pos[2] = minz;
+	gradient_info->initialized = TRUE;
+
+	/* just to be sure, we check that at least one voxel is inside */
+	if (maxx < 0 || minx >= region->cols ||
+	    maxy < 0 || miny >= region->rows ||
+	    maxz < 0 || minz >= region->depths)
+	    return -1;
+
+	/* these if's are here to handle edge cases
+	   min is changed to represent the min coords of the 4x4x4 array
+	   from which the gradient will be computed
+	   shift is relative position of the neighbors within this 4x4x4 array */
+	if (minx == 0 || minx == -1) {
+	    xshift = minx;
+	    minx = 0;
+	}
+	else if (maxx >= region->cols - 1) {
+	    minx = maxx < region->cols ? maxx - 3 : maxx - 4;
+	    xshift = maxx < region->cols ? 2 : 3;
+	}
+	else {
+	    minx -= 1;
+	    xshift = 1;
+	}
+
+	if (miny == 0 || miny == -1) {
+	    yshift = miny;
+	    miny = 0;
+	}
+	else if (maxy >= region->rows - 1) {
+	    miny = maxy < region->rows ? maxy - 3 : maxy - 4;
+	    yshift = maxy < region->rows ? 2 : 3;
+	}
+	else {
+	    miny -= 1;
+	    yshift = 1;
+	}
+
+	if (minz == 0 || minz == -1) {
+	    zshift = minz;
+	    minz = 0;
+	}
+	else if (maxz >= region->depths - 1) {
+	    minz = maxz < region->depths ? maxz - 3 : maxz - 4;
+	    zshift = maxz < region->depths ? 2 : 3;
+	}
+	else {
+	    minz -= 1;
+	    zshift = 1;
+	}
+
+	/* get the 4x4x4 block of the array */
+	Rast3d_get_block(gradient_info->scalar_map, minx, miny, minz,
+			 4, 4, 4, array.array, DCELL_TYPE);
+	Rast3d_gradient_double(&array, step, &grad_x, &grad_y, &grad_z);
+	grad_xyz[0] = &grad_x;
+	grad_xyz[1] = &grad_y;
+	grad_xyz[2] = &grad_z;
+	/* go through x, y, z and all 8 neighbors and store their value
+	   if the voxel is outside, add 0 (weight) */
+	for (i = 0; i < 3; i++) {
+	    count = 0;
+	    for (d = 0; d < 2; d++)
+		for (r = 1; r > -1; r--)
+		    for (c = 0; c < 2; c++) {
+			if (d + zshift < 0 || d + zshift > 3 ||
+			    r + yshift < 0 || r + yshift > 3 ||
+			    c + xshift < 0 || c + xshift > 3)
+			    gradient_info->neighbors_values[i * 8 + count] =
+				0;
+			else
+			    gradient_info->neighbors_values[i * 8 + count] =
+				RASTER3D_ARRAY_ACCESS(grad_xyz[i], c + xshift,
+						      r + yshift, d + zshift);
+			count++;
+		    }
+	}
+    }
+    get_relative_coords_for_interp(region, north, east, top, &rel_x, &rel_y, &rel_z);
+    trilinear_interpolation(gradient_info->neighbors_values,
+			    rel_x, rel_y, rel_z, interpolated);
+
+    *vel_x = interpolated[0];
+    *vel_y = interpolated[1];
+    *vel_z = interpolated[2];
+
+    return 0;
+
+
+
+}
diff --git a/raster3d/r3.flow/interpolate.h b/raster3d/r3.flow/interpolate.h
new file mode 100644
index 0000000..c9cfaab
--- /dev/null
+++ b/raster3d/r3.flow/interpolate.h
@@ -0,0 +1,16 @@
+#ifndef INTERPOLATE_H
+#define INTERPOLATE_H
+
+#include <grass/raster3d.h>
+
+#include "r3flow_structs.h"
+
+int interpolate_velocity(RASTER3D_Region * region, RASTER3D_Map ** map,
+			 const double north, const double east,
+			 const double top, double *vel_x, double *vel_y,
+			 double *vel_z);
+int get_gradient(RASTER3D_Region * region,
+		 struct Gradient_info *gradient_info, const double north,
+		 const double east, const double top, double *vel_x, double *vel_y,
+		 double *vel_z);
+#endif // INTERPOLATE_H
diff --git a/raster3d/r3.flow/main.c b/raster3d/r3.flow/main.c
new file mode 100644
index 0000000..a765fa2
--- /dev/null
+++ b/raster3d/r3.flow/main.c
@@ -0,0 +1,537 @@
+
+/****************************************************************************
+ * 
+ * MODULE:       r3.flow     
+ * AUTHOR(S):    Anna Petrasova kratochanna <at> gmail <dot> com
+ * PURPOSE:      Computes 3D flow lines and flow accumulation based on 3D raster map(s)
+ * COPYRIGHT:    (C) 2014 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the file COPYING that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <grass/raster3d.h>
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/vector.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+
+#include "r3flow_structs.h"
+#include "flowline.h"
+
+static void create_table(struct Map_info *flowline_vec,
+			 struct field_info **f_info, dbDriver ** driver,
+			 int write_scalar, int use_sampled_map)
+{
+    dbString sql;
+    char buf[200];
+    dbDriver *drvr;
+    struct field_info *fi;
+
+    db_init_string(&sql);
+    fi = Vect_default_field_info(flowline_vec, 1, NULL, GV_1TABLE);
+    *f_info = fi;
+    Vect_map_add_dblink(flowline_vec, 1, NULL, fi->table, GV_KEY_COLUMN,
+			fi->database, fi->driver);
+    drvr = db_start_driver_open_database(fi->driver,
+					 Vect_subst_var(fi->database,
+							flowline_vec));
+    if (drvr == NULL) {
+	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
+		      Vect_subst_var(fi->database, flowline_vec), fi->driver);
+    }
+    db_set_error_handler_driver(drvr);
+
+    *driver = drvr;
+    sprintf(buf, "create table %s (cat integer, velocity double precision",
+	    fi->table);
+    db_set_string(&sql, buf);
+    if (write_scalar)
+	db_append_string(&sql, ", input double precision");
+    if (use_sampled_map)
+	db_append_string(&sql, ", sampled double precision");
+    db_append_string(&sql, ")");
+
+    db_begin_transaction(drvr);
+    /* Create table */
+    if (db_execute_immediate(drvr, &sql) != DB_OK) {
+	G_fatal_error(_("Unable to create table: %s"), db_get_string(&sql));
+    }
+    if (db_create_index2(drvr, fi->table, fi->key) != DB_OK)
+	G_warning(_("Unable to create index for table <%s>, key <%s>"),
+		  fi->table, fi->key);
+    /* Grant */
+    if (db_grant_on_table
+	(drvr, fi->table, DB_PRIV_SELECT, DB_GROUP | DB_PUBLIC) != DB_OK) {
+	G_fatal_error(_("Unable to grant privileges on table <%s>"),
+		      fi->table);
+    }
+}
+
+static void check_vector_input_maps(struct Option *vector_opt,
+				    struct Option *seed_opt)
+{
+    int i;
+
+    /* Check for velocity components maps. */
+    if (vector_opt->answers != NULL) {
+	for (i = 0; i < 3; i++) {
+	    if (vector_opt->answers[i] != NULL) {
+		if (NULL == G_find_raster3d(vector_opt->answers[i], ""))
+		    Rast3d_fatal_error(_("3D raster map <%s> not found"),
+				       vector_opt->answers[i]);
+	    }
+	    else {
+		Rast3d_fatal_error(_("Please provide three 3D raster maps"));
+	    }
+	}
+    }
+
+    if (seed_opt->answer != NULL) {
+	if (NULL == G_find_vector2(seed_opt->answer, ""))
+	    G_fatal_error(_("Vector seed map <%s> not found"),
+			  seed_opt->answer);
+    }
+
+}
+
+static void load_input_raster3d_maps(struct Option *scalar_opt,
+				     struct Option *vector_opt,
+				     struct Gradient_info *gradient_info,
+				     RASTER3D_Region * region)
+{
+    int i;
+
+    if (scalar_opt->answer) {
+	gradient_info->scalar_map =
+	    Rast3d_open_cell_old(scalar_opt->answer,
+				 G_find_raster3d(scalar_opt->answer, ""),
+				 region, RASTER3D_TILE_SAME_AS_FILE,
+				 RASTER3D_USE_CACHE_DEFAULT);
+	if (!gradient_info->scalar_map)
+	    Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+			       scalar_opt->answer);
+	gradient_info->compute_gradient = TRUE;
+    }
+    else {
+	for (i = 0; i < 3; i++) {
+	    gradient_info->velocity_maps[i] =
+		Rast3d_open_cell_old(vector_opt->answers[i],
+				     G_find_raster3d(vector_opt->answers[i],
+						     ""), region,
+				     RASTER3D_TILE_SAME_AS_FILE,
+				     RASTER3D_USE_CACHE_DEFAULT);
+
+	    if (!gradient_info->velocity_maps[i])
+		Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+				   vector_opt->answers[i]);
+	}
+	gradient_info->compute_gradient = FALSE;
+    }
+}
+
+static void init_flowaccum(RASTER3D_Region * region, RASTER3D_Map * flowacc)
+{
+    int c, r, d;
+
+    for (d = 0; d < region->depths; d++)
+	for (r = 0; r < region->rows; r++)
+	    for (c = 0; c < region->cols; c++)
+		if (Rast3d_put_float(flowacc, c, r, d, 0) != 1)
+		    Rast3d_fatal_error(_("init_flowaccum: error in Rast3d_put_float"));
+}
+
+int main(int argc, char *argv[])
+{
+    struct Option *vector_opt, *seed_opt, *flowlines_opt, *flowacc_opt, *sampled_opt,
+	*scalar_opt, *unit_opt, *step_opt, *limit_opt, *skip_opt, *dir_opt,
+	*error_opt;
+    struct Flag *table_fl;
+    struct GModule *module;
+    RASTER3D_Region region;
+    RASTER3D_Map *flowacc, *sampled;
+    struct Integration integration;
+    struct Seed seed;
+    struct Gradient_info gradient_info;
+    struct Map_info seed_Map;
+    struct line_pnts *seed_points;
+    struct line_cats *seed_cats;
+    struct Map_info fl_map;
+    struct line_cats *fl_cats;	/* for flowlines */
+    struct line_pnts *fl_points;	/* for flowlines */
+    struct field_info *finfo;
+    dbDriver *driver;
+    int cat;			/* cat of flowlines */
+    int if_table;
+    int i, r, c, d;
+    char *desc;
+    int n_seeds, seed_count, ltype;
+    int skip[3];
+
+    G_gisinit(argv[0]);
+    module = G_define_module();
+    G_add_keyword(_("raster3d"));
+    G_add_keyword(_("hydrology"));
+    G_add_keyword(_("voxel"));
+    module->description =
+	_("Computes 3D flow lines and 3D flow accumulation.");
+
+
+    scalar_opt = G_define_standard_option(G_OPT_R3_INPUT);
+    scalar_opt->required = NO;
+    scalar_opt->guisection = _("Input");
+
+    vector_opt = G_define_standard_option(G_OPT_R3_INPUTS);
+    vector_opt->key = "vector_field";
+    vector_opt->required = NO;
+    vector_opt->description = _("Names of three 3D raster maps describing "
+				"x, y, z components of vector field");
+    vector_opt->guisection = _("Input");
+
+    seed_opt = G_define_standard_option(G_OPT_V_INPUT);
+    seed_opt->required = NO;
+    seed_opt->key = "seed_points";
+    seed_opt->description = _("If no map is provided, "
+			      "flow lines are generated "
+			      "from each cell of the input 3D raster");
+    seed_opt->label = _("Name of vector map with points "
+			"from which flow lines are generated");
+    seed_opt->guisection = _("Input");
+
+    flowlines_opt = G_define_standard_option(G_OPT_V_OUTPUT);
+    flowlines_opt->key = "flowline";
+    flowlines_opt->required = NO;
+    flowlines_opt->description = _("Name for vector map of flow lines");
+    flowlines_opt->guisection = _("Output");
+
+    flowacc_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    flowacc_opt->key = "flowaccumulation";
+    flowacc_opt->required = NO;
+    flowacc_opt->description =
+	_("Name for output flowaccumulation 3D raster");
+    flowacc_opt->guisection = _("Output");
+
+    sampled_opt = G_define_standard_option(G_OPT_R3_INPUT);
+    sampled_opt->key = "sampled";
+    sampled_opt->required = NO;
+    sampled_opt->label =
+            _("Name for 3D raster sampled by flowlines");
+    sampled_opt->description =
+            _("Values of this 3D raster will be stored "
+              "as attributes of flowlines segments");
+
+    unit_opt = G_define_option();
+    unit_opt->key = "unit";
+    unit_opt->type = TYPE_STRING;
+    unit_opt->required = NO;
+    unit_opt->answer = "cell";
+    unit_opt->options = "time,length,cell";
+    desc = NULL;
+    G_asprintf(&desc,
+	       "time;%s;"
+	       "length;%s;"
+	       "cell;%s",
+	       _("elapsed time"),
+	       _("length in map units"), _("length in cells (voxels)"));
+    unit_opt->descriptions = desc;
+    unit_opt->label = _("Unit of integration step");
+    unit_opt->description = _("Default unit is cell");
+    unit_opt->guisection = _("Integration");
+
+    step_opt = G_define_option();
+    step_opt->key = "step";
+    step_opt->type = TYPE_DOUBLE;
+    step_opt->required = NO;
+    step_opt->answer = "0.25";
+    step_opt->label = _("Integration step in selected unit");
+    step_opt->description = _("Default step is 0.25 cell");
+    step_opt->guisection = _("Integration");
+
+    limit_opt = G_define_option();
+    limit_opt->key = "limit";
+    limit_opt->type = TYPE_INTEGER;
+    limit_opt->required = NO;
+    limit_opt->answer = "2000";
+    limit_opt->description = _("Maximum number of steps");
+    limit_opt->guisection = _("Integration");
+
+    error_opt = G_define_option();
+    error_opt->key = "max_error";
+    error_opt->type = TYPE_DOUBLE;
+    error_opt->required = NO;
+    error_opt->answer = "1e-5";
+    error_opt->label = _("Maximum error of integration");
+    error_opt->description = _("Influences step, increase maximum error "
+			       "to allow bigger steps");
+    error_opt->guisection = _("Integration");
+
+    skip_opt = G_define_option();
+    skip_opt->key = "skip";
+    skip_opt->type = TYPE_INTEGER;
+    skip_opt->required = NO;
+    skip_opt->multiple = YES;
+    skip_opt->description =
+	_("Number of cells between flow lines in x, y and z direction");
+
+    dir_opt = G_define_option();
+    dir_opt->key = "direction";
+    dir_opt->type = TYPE_STRING;
+    dir_opt->required = NO;
+    dir_opt->multiple = NO;
+    dir_opt->options = "up,down,both";
+    dir_opt->answer = "down";
+    dir_opt->description = _("Compute flowlines upstream, "
+			     "downstream or in both direction.");
+
+    table_fl = G_define_flag();
+    table_fl->key = 'a';
+    table_fl->description = _("Create and fill attribute table");
+
+    G_option_required(scalar_opt, vector_opt, NULL);
+    G_option_exclusive(scalar_opt, vector_opt, NULL);
+    G_option_required(flowlines_opt, flowacc_opt, NULL);
+    G_option_requires(seed_opt, flowlines_opt, NULL);
+    G_option_requires(table_fl, flowlines_opt, NULL);
+    G_option_requires(sampled_opt, table_fl, NULL);
+
+    if (G_parser(argc, argv))
+	exit(EXIT_FAILURE);
+
+    driver = NULL;
+    finfo = NULL;
+
+    if_table = table_fl->answer ? TRUE : FALSE;
+
+    check_vector_input_maps(vector_opt, seed_opt);
+
+    Rast3d_init_defaults();
+    Rast3d_get_window(&region);
+
+    /* set up integration variables */
+    if (step_opt->answer) {
+	integration.step = atof(step_opt->answer);
+	integration.unit = unit_opt->answer;
+    }
+    else {
+	integration.unit = "cell";
+	integration.step = 0.25;
+    }
+    integration.max_error = atof(error_opt->answer);
+    integration.max_step = 5 * integration.step;
+    integration.min_step = integration.step / 5;
+    integration.limit = atof(limit_opt->answer);
+    if (strcmp(dir_opt->answer, "up") == 0)
+	integration.direction_type = FLOWDIR_UP;
+    else if (strcmp(dir_opt->answer, "down") == 0)
+	integration.direction_type = FLOWDIR_DOWN;
+    else
+	integration.direction_type = FLOWDIR_BOTH;
+
+
+    /* cell size is the diagonal */
+    integration.cell_size = sqrt(region.ns_res * region.ns_res +
+				 region.ew_res * region.ew_res +
+				 region.tb_res * region.tb_res);
+
+    /* set default skip if needed */
+    if (skip_opt->answers) {
+	for (i = 0; i < 3; i++) {
+	    if (skip_opt->answers[i] != NULL) {
+		skip[i] = atoi(skip_opt->answers[i]);
+	    }
+	    else {
+		G_fatal_error(_("Please provide 3 integer values for skip option."));
+	    }
+	}
+    }
+    else {
+	skip[0] = fmax(1, region.cols / 10);
+	skip[1] = fmax(1, region.rows / 10);
+	skip[2] = fmax(1, region.depths / 10);
+
+    }
+
+    /* open raster 3D maps of velocity components */
+    gradient_info.initialized = FALSE;
+    load_input_raster3d_maps(scalar_opt, vector_opt, &gradient_info, &region);
+
+
+    /* open new 3D raster map of flowacumulation */
+    if (flowacc_opt->answer) {
+	flowacc = Rast3d_open_new_opt_tile_size(flowacc_opt->answer,
+						RASTER3D_USE_CACHE_DEFAULT,
+						&region, FCELL_TYPE, 32);
+
+
+	if (!flowacc)
+	    Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+			       flowacc_opt->answer);
+	init_flowaccum(&region, flowacc);
+    }
+
+    /* open 3D raster map used for sampling */
+    if (sampled_opt->answer) {
+	sampled = Rast3d_open_cell_old(sampled_opt->answer,
+				       G_find_raster3d(sampled_opt->answer, ""),
+				       &region, RASTER3D_TILE_SAME_AS_FILE,
+				       RASTER3D_USE_CACHE_DEFAULT);
+	if (!sampled)
+	    Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+			       sampled_opt->answer);
+    }
+    else
+	sampled = NULL;
+
+    /* open new vector map of flowlines */
+    if (flowlines_opt->answer) {
+	fl_cats = Vect_new_cats_struct();
+	fl_points = Vect_new_line_struct();
+	if (Vect_open_new(&fl_map, flowlines_opt->answer, TRUE) < 0)
+	    G_fatal_error(_("Unable to create vector map <%s>"),
+			  flowlines_opt->answer);
+
+	Vect_hist_command(&fl_map);
+
+	if (if_table) {
+	    create_table(&fl_map, &finfo, &driver,
+			 gradient_info.compute_gradient, sampled ? 1 : 0);
+	}
+    }
+
+    n_seeds = 0;
+    /* open vector map of seeds */
+    if (seed_opt->answer) {
+	if (Vect_open_old2(&seed_Map, seed_opt->answer, "", "1") < 0)
+	    G_fatal_error(_("Unable to open vector map <%s>"),
+			  seed_opt->answer);
+	if (!Vect_is_3d(&seed_Map))
+	    G_fatal_error(_("Vector map <%s> is not 3D"), seed_opt->answer);
+
+	n_seeds = Vect_get_num_primitives(&seed_Map, GV_POINT);
+    }
+    if (flowacc_opt->answer || (!seed_opt->answer && flowlines_opt->answer)) {
+	if (flowacc_opt->answer)
+	    n_seeds += region.cols * region.rows * region.depths;
+	else {
+	    n_seeds += ceil(region.cols / (double)skip[0]) *
+		ceil(region.rows / (double)skip[1]) *
+		ceil(region.depths / (double)skip[2]);
+	}
+    }
+    G_debug(1, "Number of seeds is %d", n_seeds);
+
+    seed_count = 0;
+    cat = 1;
+    if (seed_opt->answer) {
+
+	seed_points = Vect_new_line_struct();
+	seed_cats = Vect_new_cats_struct();
+
+	/* compute flowlines from vector seed map */
+	while (TRUE) {
+	    ltype = Vect_read_next_line(&seed_Map, seed_points, seed_cats);
+	    if (ltype == -1) {
+		Vect_close(&seed_Map);
+		G_fatal_error(_("Error during reading seed vector map"));
+	    }
+	    else if (ltype == -2) {
+		break;
+	    }
+	    else if (ltype == GV_POINT) {
+		seed.x = seed_points->x[0];
+		seed.y = seed_points->y[0];
+		seed.z = seed_points->z[0];
+		seed.flowline = TRUE;
+		seed.flowaccum = FALSE;
+	    }
+	    G_percent(seed_count, n_seeds, 1);
+	    if (integration.direction_type == FLOWDIR_UP ||
+		integration.direction_type == FLOWDIR_BOTH) {
+		integration.actual_direction = FLOWDIR_UP;
+		compute_flowline(&region, &seed, &gradient_info, flowacc, sampled,
+				 &integration, &fl_map, fl_cats, fl_points,
+				 &cat, if_table, finfo, driver);
+	    }
+	    if (integration.direction_type == FLOWDIR_DOWN ||
+		integration.direction_type == FLOWDIR_BOTH) {
+		integration.actual_direction = FLOWDIR_DOWN;
+		compute_flowline(&region, &seed, &gradient_info, flowacc, sampled,
+				 &integration, &fl_map, fl_cats, fl_points,
+				 &cat, if_table, finfo, driver);
+	    }
+	    seed_count++;
+	}
+
+	Vect_destroy_line_struct(seed_points);
+	Vect_destroy_cats_struct(seed_cats);
+	Vect_close(&seed_Map);
+    }
+    if (flowacc_opt->answer || (!seed_opt->answer && flowlines_opt->answer)) {
+	/* compute flowlines from points on grid */
+	for (r = region.rows; r > 0; r--) {
+	    for (c = 0; c < region.cols; c++) {
+		for (d = 0; d < region.depths; d++) {
+		    seed.x =
+			region.west + c * region.ew_res + region.ew_res / 2;
+		    seed.y =
+			region.south + r * region.ns_res - region.ns_res / 2;
+		    seed.z =
+			region.bottom + d * region.tb_res + region.tb_res / 2;
+		    seed.flowline = FALSE;
+		    seed.flowaccum = FALSE;
+		    if (flowacc_opt->answer)
+			seed.flowaccum = TRUE;
+
+		    if (flowlines_opt->answer && !seed_opt->answer &&
+		       (c % skip[0] == 0) && (r % skip[1] == 0) && (d % skip[2] == 0))
+			seed.flowline = TRUE;
+
+		    if (seed.flowaccum || seed.flowline) {
+			G_percent(seed_count, n_seeds, 1);
+
+			if (integration.direction_type == FLOWDIR_UP ||
+			    integration.direction_type == FLOWDIR_BOTH) {
+			    integration.actual_direction = FLOWDIR_UP;
+			    compute_flowline(&region, &seed, &gradient_info,
+					     flowacc, sampled, &integration, &fl_map,
+					     fl_cats, fl_points, &cat,
+					     if_table, finfo, driver);
+			}
+			if (integration.direction_type == FLOWDIR_DOWN ||
+			    integration.direction_type == FLOWDIR_BOTH) {
+			    integration.actual_direction = FLOWDIR_DOWN;
+			    compute_flowline(&region, &seed, &gradient_info,
+					     flowacc, sampled, &integration, &fl_map,
+					     fl_cats, fl_points, &cat,
+					     if_table, finfo, driver);
+			}
+			seed_count++;
+		    }
+		}
+	    }
+	}
+    }
+    G_percent(1, 1, 1);
+    if (flowlines_opt->answer) {
+	if (if_table) {
+	    db_commit_transaction(driver);
+	    db_close_database_shutdown_driver(driver);
+	}
+	Vect_destroy_line_struct(fl_points);
+	Vect_destroy_cats_struct(fl_cats);
+	Vect_build(&fl_map);
+	Vect_close(&fl_map);
+    }
+
+    if (flowacc_opt->answer)
+	Rast3d_close(flowacc);
+
+
+    return EXIT_SUCCESS;
+}
diff --git a/raster3d/r3.flow/r3.flow.html b/raster3d/r3.flow/r3.flow.html
new file mode 100644
index 0000000..d57aef4
--- /dev/null
+++ b/raster3d/r3.flow/r3.flow.html
@@ -0,0 +1,100 @@
+<h2>DESCRIPTION</h2>
+
+Module <em>r3.flow</em> computes 3D flow lines and 3D flow accumulation.
+It accepts either three 3D raster maps representing the vector field or one 3D raster map.
+In case of one map, it computes on-the-fly gradient field.
+
+<h3>Flow lines</h3>
+
+Flow lines are computed either from points (seeds) provided in <b>seed_points</b> vector map,
+or if there are no seeds, it creates seeds in a regular grid in the center of voxels (3D raster cells).
+Parameter <b>skip</b> then controls the step between the regularly distributed seeds.
+If skip is not provided, r3.flow decides optimal skip for each dimension based on current 3D region
+as one tenth of the number of columns, rows, and depths.
+Flow lines can be computed in upstream direction (in the direction of gradient or vector field),
+in downstream direction or in both directions.
+
+<h3>Flow accumulation</h3>
+Flow accumulation is computed as the number of flow lines traversing each voxel.
+Since the flow lines are computed for each voxel, the flow accumulation computation
+can be more demanding.
+Parameter skip does not influence the flow accumulation computation, parameter direction does.
+
+<h3>Flow line integration</h3>
+Flow line integration can be influenced by several parameters.
+Option <b>step</b> controls the integration step and influences the precision and computational time.
+The unit of step can be defined either in terms of the size of the voxel (3D raster cell),
+length in map units, or as elapsed time. 
+Option <b>limit</b> specifies the maximum number of steps of each flow line.
+
+<h3>Attributes</h3>
+Without using flag <b>a</b>, no attribute table is created and each flow line
+is represented by one vector line with one category. With <b>a</b> flag, an attribute table is created
+and each category (record) represents one segment of a flowline, so that attributes
+specific for segments can be written. In case of <b>vector_field</b> input, only velocity is written,
+in case of <b>input</b> option, also values of the input 3D raster are written.
+Option <b>sampled</b> allows sampling (query) given 3D raster by flow lines (computed from different 3D raster) and
+write the values of the given 3D raster as attributes of the flow line segments.
+Note that using <b>a</b> flag results in longer computation time, so consider increasing
+<b>step</b> and <b>max_error</b> parameter.
+
+<h2>NOTES</h2>
+r3.flow uses Runge-Kutta with adaptive step size
+(<a href="http://en.wikipedia.org/wiki/Cash-Karp_method">Cash-Karp method</a>).
+
+<h2>EXAMPLES</h2>
+First we create input data using
+<a href="r3.gwflow.html#example-1">example 1</a> from
+<a href="r3.gwflow.html">r3.gwflow manual page</a>:
+
+<div class="code"><pre>
+# set the region accordingly
+g.region res=25 res3=25 t=100 b=0 n=1000 s=0 w=0 e=1000 -p3
+
+# now create the input raster maps for a confined aquifer
+r3.mapcalc expression="phead = if(row() == 1 && depth() == 4, 50, 40)"
+r3.mapcalc expression="status = if(row() == 1 && depth() == 4, 2, 1)"
+r3.mapcalc expression="well = if(row() == 20 && col() == 20 && depth() == 2, -0.25, 0)"
+r3.mapcalc expression="hydcond = 0.00025"
+r3.mapcalc expression="syield = 0.0001"
+r.mapcalc  expression="recharge = 0.0"
+
+r3.gwflow solver=cg phead=phead status=status hc_x=hydcond hc_y=hydcond  \
+   hc_z=hydcond q=well s=syield r=recharge output=gwresult dt=8640000 vx=vx vy=vy vz=vz budget=budget
+</pre></div>
+
+Then we compute flow lines in both directions and downstream flowaccumulation.
+
+<div class="code"><pre>
+r3.flow vector_field=vx,vy,vz flowline=gw_flowlines skip=5,5,2 direction=both
+r3.flow vector_field=vx,vy,vz flowaccumulation=gw_flowacc
+</pre></div>
+
+We can visualize the result in 3D view:
+<p>
+<img src="r3flow_flowlines.png">
+
+<p>
+We can store velocity values (and values of the input 3D raster map if we use option <b>input</b>) for each segment of flow line
+in an attribute table.
+<div class="code"><pre>
+r3.flow -a vector_field=vx,vy,vz flowline=gw_flowlines skip=5,5,2 direction=both
+v.colors map=flowlines_color at user1 use=attr column=velocity color=bcyr
+</pre></div>
+
+Again, we visualize the result in 3D view and we check 'use color for thematic rendering' on 3D view vector page.
+<p>
+<img src="r3flow_flowlines_color.png">
+
+<h2>SEE ALSO</h2>
+<em>
+<a href="r.flow.html">r.flow</a>,
+<a href="r3.gradient.html">r3.gradient</a>,
+<a href="r3.gwflow.html">r3.gwflow</a>
+</em>
+
+<h2>AUTHORS</h2>
+Anna Petrasova, <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>, developed during GSoC 2014.
+
+<p>
+<i>Last changed: $Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $</i>
diff --git a/raster3d/r3.flow/r3flow_flowlines.png b/raster3d/r3.flow/r3flow_flowlines.png
new file mode 100644
index 0000000..63e96c5
Binary files /dev/null and b/raster3d/r3.flow/r3flow_flowlines.png differ
diff --git a/raster3d/r3.flow/r3flow_flowlines_color.png b/raster3d/r3.flow/r3flow_flowlines_color.png
new file mode 100644
index 0000000..e618d89
Binary files /dev/null and b/raster3d/r3.flow/r3flow_flowlines_color.png differ
diff --git a/raster3d/r3.flow/r3flow_structs.h b/raster3d/r3.flow/r3flow_structs.h
new file mode 100644
index 0000000..07d457a
--- /dev/null
+++ b/raster3d/r3.flow/r3flow_structs.h
@@ -0,0 +1,40 @@
+#ifndef R3FLOW_STRUCTS_H
+#define R3FLOW_STRUCTS_H
+
+#include <grass/raster3d.h>
+
+struct Seed
+{
+    double x;
+    double y;
+    double z;
+    int flowline;
+    int flowaccum;
+};
+
+enum flowdir {FLOWDIR_UP, FLOWDIR_DOWN, FLOWDIR_BOTH};
+
+struct Integration
+{
+    enum flowdir direction_type;
+    enum flowdir actual_direction;
+    char *unit;
+    double step;
+    double cell_size;
+    int limit;
+    double max_error;
+    double max_step;
+    double min_step;
+};
+
+struct Gradient_info
+{
+    int compute_gradient;
+    RASTER3D_Map *velocity_maps[3];
+    RASTER3D_Map *scalar_map;
+    double neighbors_values[24];
+    int neighbors_pos[3];
+    int initialized;
+};
+
+#endif // R3FLOW_STRUCTS_H
diff --git a/raster3d/r3.flow/test.r3flow.html b/raster3d/r3.flow/test.r3flow.html
new file mode 100644
index 0000000..7dc7f86
--- /dev/null
+++ b/raster3d/r3.flow/test.r3flow.html
@@ -0,0 +1,14 @@
+<h2>DESCRIPTION</h2>
+Testing module for <em>r3.flow</em>.
+
+
+<h2>AUTHORS</h2>
+Anna Petrasova
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r3.flow.html">r3.flow</a>
+</em>
+
+<p><i>Last changed: $Date: 2014-08-14 17:34:43 +0200 (Thu, 14 Aug 2014) $</i>
diff --git a/raster3d/r3.flow/test_main.c b/raster3d/r3.flow/test_main.c
new file mode 100644
index 0000000..5cad97f
--- /dev/null
+++ b/raster3d/r3.flow/test_main.c
@@ -0,0 +1,105 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <grass/raster3d.h>
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+
+#include "r3flow_structs.h"
+#include "flowline.h"
+#include "interpolate.h"
+
+static void test_interpolation(RASTER3D_Region * region,
+			       RASTER3D_Map ** input_maps, double north,
+			       double east, double top)
+{
+    double interpolated[3];
+
+    if (interpolate_velocity(region, input_maps, north, east, top,
+			     &interpolated[0], &interpolated[1],
+			     &interpolated[2]) < 0) {
+	fprintf(stdout, "return=-1\n");
+    }
+    else
+	fprintf(stdout, "return=0\nvalues=%.10f,%.10f,%.10f\n",
+		interpolated[0], interpolated[1], interpolated[2]);
+
+}
+
+int main(int argc, char *argv[])
+{
+    int i;
+    struct GModule *module;
+    struct Option *test_opt, *coordinates_opt, *input_opt;
+    RASTER3D_Region region;
+    RASTER3D_Map *input_3drasters[3];
+    double coordinates[3];
+
+    G_gisinit(argv[0]);
+    module = G_define_module();
+    G_add_keyword(_("raster3d"));
+    G_add_keyword(_("hydrology"));
+    G_add_keyword(_("voxel"));
+    module->description = _("Testing flow lines.");
+
+    test_opt = G_define_option();
+    test_opt->key = "test";
+    test_opt->required = YES;
+    test_opt->type = TYPE_STRING;
+    test_opt->options = "interpolation,gradient";
+    test_opt->description = "Select what is tested";
+
+    coordinates_opt = G_define_option();
+    coordinates_opt->key = "coordinates";
+    coordinates_opt->required = NO;
+    coordinates_opt->type = TYPE_DOUBLE;
+    coordinates_opt->multiple = YES;
+    coordinates_opt->description = "x,y,z coordinates";
+
+    input_opt = G_define_standard_option(G_OPT_R3_INPUTS);
+    input_opt->required = NO;
+
+    if (G_parser(argc, argv))
+	exit(EXIT_FAILURE);
+
+    Rast3d_init_defaults();
+    Rast3d_get_window(&region);
+
+    if (strcmp(test_opt->answer, "interpolation") == 0) {
+
+
+	if (input_opt->answers) {
+	    for (i = 0; i < 3; i++) {
+		input_3drasters[i] =
+		    Rast3d_open_cell_old(input_opt->answers[i],
+					 G_find_raster3d(input_opt->
+							 answers[i], ""),
+					 &region, RASTER3D_TILE_SAME_AS_FILE,
+					 RASTER3D_USE_CACHE_DEFAULT);
+		if (input_3drasters[i] == NULL)
+		    Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+				       input_opt->answers[i]);
+	    }
+	}
+	else
+	    G_fatal_error("No input map for interpolation test");
+	if (coordinates_opt->answers) {
+	    for (i = 0; i < 3; i++) {
+		if (coordinates_opt->answers[i]) {
+		    coordinates[i] = atof(coordinates_opt->answers[i]);
+		}
+		else
+		    G_fatal_error("Provide 3 coordinates");
+	    }
+	}
+	else
+	    G_fatal_error("No coordinates for interpolation test");
+	test_interpolation(&region, input_3drasters, coordinates[1],
+			   coordinates[0], coordinates[2]);
+    }
+
+    return EXIT_SUCCESS;
+}
diff --git a/raster3d/r3.flow/testsuite/data/flowline.ascii b/raster3d/r3.flow/testsuite/data/flowline.ascii
new file mode 100644
index 0000000..80509b8
--- /dev/null
+++ b/raster3d/r3.flow/testsuite/data/flowline.ascii
@@ -0,0 +1,220 @@
+ORGANIZATION: 
+DIGIT DATE:   
+DIGIT NAME:   anna
+MAP NAME:     
+MAP DATE:     Thu Aug  7 14:07:09 2014
+MAP SCALE:    1
+OTHER INFO:   
+ZONE:         0
+MAP THRESH:   0.000000
+VERTI:
+L  29 1
+ 84.806094    35.197336    39.43322    
+ 84.806094    35.197336    39.43322    
+ 81.397053    37.087846    37.746534   
+ 77.990596    38.976923    36.061127   
+ 74.586931    40.864452    34.377101   
+ 71.186292    42.750303    32.694572   
+ 67.78894     44.634331    31.013669   
+ 64.395174    46.516369    29.334541   
+ 61.005337    48.39623     27.657357   
+ 57.619819    50.273695    25.982309   
+ 54.239073    52.148514    24.309623   
+ 50.863626    54.020394    22.639558   
+ 47.494096    55.888993    20.972421   
+ 44.131215    57.753905    19.308574   
+ 40.775859    59.614643    17.64845    
+ 37.429084    61.470623    15.992571   
+ 34.092185    63.321127    14.341579   
+ 30.766765    65.165264    12.696266   
+ 27.454848    67.001913    11.057634   
+ 24.159033    68.829633    9.426969    
+ 20.882729    70.646532    7.805957    
+ 17.63053     72.450064    6.196872    
+ 16.2203      73.232118    5.499135    
+ 15.524693    73.617873    5.15497     
+ 14.844693    73.994972    4.816822    
+ 13.957167    74.487156    4.359276    
+ 13.294472    74.854659    4.003445    
+ 12.641464    75.219149    3.639976    
+ 10.056633    76.803483    2.055642    
+ 1     1         
+L  11 1
+ 14.429159    56.869515    22.42339    
+ 14.429159    56.869515    22.42339    
+ 12.601355    59.515898    19.843526   
+ 10.782742    62.148975    17.276635   
+ 8.975302     64.765875    14.725514   
+ 7.181717     67.362715    12.193949   
+ 5.405736     69.934067    9.687231    
+ 5.028815     70.479791    9.155225    
+ 4.652154     71.016388    8.632116    
+ 2.867253     73.302256    6.403706    
+ 2.265763     73.985122    5.738005    
+ 1     2         
+L  3 1
+ 29.06094     78.060291    39.317079   
+ 29.06094     78.060291    39.317079   
+ 26.687827    78.782477    36.229394   
+ 1     3         
+L  15 1
+ 64.955248    50.766146    12.023014   
+ 64.955248    50.766146    12.023014   
+ 61.256917    52.57599     11.123057   
+ 57.564137    54.383119    10.22445    
+ 53.877539    56.187221    9.327348    
+ 50.197872    57.987932    8.431932    
+ 46.526023    59.784817    7.538419    
+ 42.863063    61.577353    6.647069    
+ 39.210293    63.364901    5.758198    
+ 38.018565    63.948095    5.468202    
+ 36.824201    64.532578    5.177563    
+ 36.071128    64.901108    4.994309    
+ 32.597809    66.600839    4.110713    
+ 29.181582    68.272631    3.158125    
+ 25.83767     69.909033    2.128626    
+ 1     4         
+L  25 1
+ 75.476779    18.36009     29.362122   
+ 75.476779    18.36009     29.362122   
+ 72.370137    20.932588    28.035642   
+ 69.265932    23.503067    26.710203   
+ 66.164365    26.071363    25.38589    
+ 63.065658    28.63729     24.062799   
+ 59.970067    31.200637    22.741038   
+ 56.877879    33.761166    21.42073    
+ 53.789424    36.318604    20.102016   
+ 50.705085    38.872634    18.785059   
+ 47.625301    41.422891    17.470047   
+ 44.550588    43.96895     16.157201   
+ 41.481554    46.510306    14.846779   
+ 38.41892     49.046362    13.53909    
+ 35.363553    51.576401    12.234504   
+ 32.316507    54.09955     10.93347    
+ 29.279077    56.614736    9.636543    
+ 26.252882    59.120619    8.344413    
+ 23.23998     61.615494    7.057958    
+ 20.243039    64.097152    5.778319    
+ 19.425572    64.774067    5.429276    
+ 18.800082    65.292013    5.162202    
+ 18.176085    65.808722    4.89522     
+ 15.400616    68.106988    3.619661    
+ 12.732901    70.316026    2.218227    
+ 1     5         
+L  27 1
+ 88.842317    31.231087    34.335553   
+ 88.842317    31.231087    34.335553   
+ 85.377082    33.216565    32.883043   
+ 81.91433     35.200622    31.431573   
+ 78.454253    37.183145    29.981225   
+ 74.99707     39.16401     28.532089   
+ 71.543022    41.143079    27.084269   
+ 68.092387    43.120192    25.637878   
+ 64.645478    45.095171    24.193049   
+ 61.202652    47.067809    22.749932   
+ 57.764323    49.037872    21.3087     
+ 54.330967    51.005085    19.869552   
+ 50.903141    52.969129    18.432722   
+ 47.4815      54.92963     16.998485   
+ 44.06682     56.886142    15.567166   
+ 40.660031    58.838132    14.139154   
+ 37.262263    60.784955    12.714924   
+ 33.874899    62.725815    11.295054   
+ 30.499664    64.659727    9.880269    
+ 27.138741    66.585438    8.471483    
+ 23.794948    68.501334    7.069877    
+ 20.472006    70.405283    5.677011    
+ 19.348268    71.049152    5.205978    
+ 18.653231    71.447388    4.914227    
+ 15.59501     73.199659    3.529718    
+ 12.680501    74.869588    2.003854    
+ 12.040711    75.238889    1.635283    
+ 1     6         
+L  12 1
+ 41.138221    64.704133    25.85159    
+ 41.138221    64.704133    25.85159    
+ 37.878495    66.138062    23.671884   
+ 34.62772     67.568054    21.498164   
+ 31.387297    68.993493    19.331366   
+ 28.158978    70.413607    17.172662   
+ 24.94499     71.827417    15.023541   
+ 21.748226    73.23365     12.885936   
+ 18.572528    74.630617    10.762419   
+ 17.773874    74.981939    10.228377   
+ 16.750722    75.441692    9.544218    
+ 13.85757     76.869017    7.609633    
+ 1     7         
+L  10 1
+ 14.157683    45.265562    10.630492   
+ 14.157683    45.265562    10.630492   
+ 12.464634    48.777068    9.249157    
+ 10.77904     52.273115    7.873903    
+ 9.102396     55.750597    6.505953    
+ 7.436691     59.205391    5.146927    
+ 7.088389     59.927794    4.861766    
+ 5.550659     63.11716     3.501194    
+ 5.214971     63.813401    3.177855    
+ 4.881477     64.503578    2.846669    
+ 1     8         
+L  30 1
+ 69.363152    2.929942     39.636635   
+ 69.363152    2.929942     39.636635   
+ 68.798791    3.539399     39.297875   
+ 68.116225    4.282763     38.888164   
+ 67.559167    4.894601     38.553789   
+ 67.016431    5.493706     38.22801    
+ 64.370003    8.415368     36.639487   
+ 61.725453    11.334957    35.05209    
+ 59.082925    14.252313    33.465907   
+ 56.442583    17.167257    31.881036   
+ 53.80461     20.079585    30.297588   
+ 51.169212    22.989069    28.715685   
+ 48.536626    25.89545     27.13547    
+ 45.90712     28.798431    25.557103   
+ 43.281002    31.697671    23.98077    
+ 40.65863     34.592775    22.406686   
+ 38.040419    37.483285    20.8351     
+ 35.42686     40.36866     19.266306   
+ 32.818531    43.248261    17.700651   
+ 30.216125    46.121322    16.138551   
+ 27.620482    48.986918    14.580511   
+ 25.032628    51.843914    13.027147   
+ 22.453842    54.6909      11.479225   
+ 19.885737    57.526093    9.937715    
+ 17.33039     60.347202    8.403862    
+ 14.790534    63.151208    6.879309    
+ 12.269864    65.934034    5.366271    
+ 11.73894     66.520174    5.047583    
+ 11.214399    67.099269    4.729052    
+ 8.923633     69.62828     3.205931    
+ 1     9         
+L  28 1
+ 95.880286    0.802102     28.572064   
+ 95.880286    0.802102     28.572064   
+ 93.148886    2.998018     27.663079   
+ 92.408842    3.603505     27.416799   
+ 91.636987    4.239939     27.159932   
+ 90.785863    4.947655     26.876686   
+ 90.140973    5.486583     26.662072   
+ 75.332663    17.862527    21.733998   
+ 72.17706     20.499801    20.683841   
+ 69.024022    23.13493     19.634538   
+ 65.873765    25.767736    18.586161   
+ 62.726529    28.398017    17.538788   
+ 59.582587    31.025545    16.492512   
+ 56.442251    33.65006     15.447436   
+ 53.305878    36.271261    14.403679   
+ 50.173883    38.888805    13.361379   
+ 47.046745    41.502289    12.320695   
+ 43.925029    44.111242    11.281816   
+ 40.809402    46.715106    10.244963   
+ 37.70066     49.313216    9.210401    
+ 34.599764    51.904768    8.17845     
+ 31.507889    54.488782    7.149502    
+ 28.426489    57.064041    6.124039    
+ 25.357395    59.629015    5.102672    
+ 24.603013    60.259484    4.85051     
+ 21.709165    62.677998    3.821816    
+ 18.883632    65.039418    2.703682    
+ 16.147183    67.326387    1.486815    
+ 1     10        
diff --git a/raster3d/r3.flow/testsuite/r3flow_test.py b/raster3d/r3.flow/testsuite/r3flow_test.py
new file mode 100644
index 0000000..da72cca
--- /dev/null
+++ b/raster3d/r3.flow/testsuite/r3flow_test.py
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+"""
+Test of r3.flow
+
+ at author Anna Petrasova
+"""
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+seeds = """
+84.80609404|35.19733594|39.43321996
+14.42915927|56.86951467|22.42338987
+29.06094033|78.06029074|39.31707858
+64.95524796|50.76614609|12.02301418
+75.47677891|18.36008965|29.362122
+88.84231714|31.23108675|34.33555293
+41.13822083|64.70413255|25.85158957
+14.15768282|45.26556161|10.63049231
+69.36315244|2.92994235|39.63663467
+95.88028571|0.80210167|28.57206445
+"""
+
+flowaccum = """
+n=480
+null_cells=0
+cells=480
+min=0
+max=91
+range=91
+mean=6.38333333333333
+mean_of_abs=6.38333333333333
+stddev=11.3685848821312
+variance=129.244722222222
+coeff_var=178.097935490306
+sum=3064
+"""
+
+class FlowlineTest(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Use temporary region settings"""
+        cls.use_temp_region()
+        cls.runModule("g.region", res=10, res3=10, n=80, s=0, w=0, e=120, b=0, t=50)
+        cls.runModule("r3.mapcalc", expression="map_1 = 100")
+        cls.runModule("r3.mapcalc", expression="map_2 = -20")
+        cls.runModule("r3.mapcalc", expression="map_3 = 0.01")
+        cls.runModule("r3.mapcalc", expression="map_4 = col() + row() + depth()")
+        cls.runModule("r3.mapcalc", expression="map_5 = col() * col() + row() * row() + depth() * depth()")
+        cls.runModule('v.in.ascii', input='-', output='test_seeds', z=3, flags='zt',
+                      stdin=seeds)
+
+    @classmethod
+    def tearDownClass(cls):
+        """!Remove the temporary region"""
+        cls.del_temp_region()
+        cls.runModule('g.remove', flags='f', type='raster_3d', name=','.join(['map_1', 'map_2', 'map_3', 'map_4', 'map_5', 'test_flowaccum']))
+        cls.runModule('g.remove', flags='f', type='vector', name=','.join(['test_flowline', 'test_seeds']))
+        os.remove('./data/flowline_tmp.ascii')
+
+    def test_interpolation(self):
+        self.assertModuleKeyValue('test.r3flow', test='interpolation',
+                                  coordinates=[100, 55, 11], input=['map_1', 'map_2', 'map_3'],
+                                  reference={'return': 0, 'values': [100, -20, 0.01]},
+                                  precision=1e-10, sep='=')
+        self.assertModuleKeyValue('test.r3flow', test='interpolation',
+                                  coordinates=[5, 5, 5], input=['map_1', 'map_2', 'map_3'],
+                                  reference={'return': 0, 'values': [100, -20, 0.01]},
+                                  precision=1e-10, sep='=')
+        self.assertModuleKeyValue('test.r3flow', test='interpolation',
+                                  coordinates=[10, 10, 60], input=['map_1', 'map_2', 'map_3'],
+                                  reference={'return': -1},
+                                  precision=1e-10, sep='=')
+        self.assertModuleKeyValue('test.r3flow', test='interpolation',
+                                  coordinates=[25, 69, 17], input=['map_4', 'map_4', 'map_4'],
+                                  reference={'return': 0, 'values': [7.8, 7.8, 7.8]},
+                                  precision=1e-10, sep='=')
+        self.assertModuleKeyValue('test.r3flow', test='interpolation',
+                                  coordinates=[81, 30, 25], input=['map_4', 'map_4', 'map_4'],
+                                  reference={'return': 0, 'values': [18.1, 18.1, 18.1]},
+                                  precision=1e-10, sep='=')
+
+    def test_flowlines(self):
+        self.assertModule('r3.flow', input='map_5', flowline='test_flowline',
+                          seed_points='test_seeds', flowaccumulation='test_flowaccum',
+                          direction='down')
+        self.runModule('v.out.ascii', input='test_flowline',
+                       format='standard', output='./data/flowline_tmp.ascii',
+                       precision=6)
+        self.assertVectorAsciiEqualsVectorAscii(actual='./data/flowline_tmp.ascii',
+                                                reference='./data/flowline.ascii')
+        self.assertRaster3dFitsUnivar('test_flowaccum', reference=flowaccum, precision=1e-6)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/raster3d/r3.flow/voxel_traversal.c b/raster3d/r3.flow/voxel_traversal.c
new file mode 100644
index 0000000..7f7622d
--- /dev/null
+++ b/raster3d/r3.flow/voxel_traversal.c
@@ -0,0 +1,96 @@
+#include <math.h>
+#include <grass/raster3d.h>
+
+#include "voxel_traversal.h"
+
+void traverse(RASTER3D_Region * region, double *start, double *end,
+	      int **coordinates, int *size, int *coor_count)
+{
+    double dx, dy, dz;
+    int step_x, step_y, step_z;
+    int x, y, z;
+    int x_end, y_end, z_end;
+    double t_delta_x, t_delta_y, t_delta_z;
+    double t_max_x, t_max_y, t_max_z;
+    double xtmp, ytmp, ztmp;
+    int count;
+
+    /* initialize */
+    dx = end[0] - start[0];
+    dy = end[1] - start[1];
+    dz = end[2] - start[2];
+
+    step_x = start[0] < end[0] ? 1 : -1;
+    step_y = start[1] < end[1] ? 1 : -1;
+    step_z = start[2] < end[2] ? 1 : -1;
+
+    x = (int)floor((start[0] - region->west) / region->ew_res);
+    y = (int)floor((start[1] - region->south) / region->ns_res);
+    z = (int)floor((start[2] - region->bottom) / region->tb_res);
+    x_end = (int)floor((end[0] - region->west) / region->ew_res);
+    y_end = (int)floor((end[1] - region->south) / region->ns_res);
+    z_end = (int)floor((end[2] - region->bottom) / region->tb_res);
+
+    t_delta_x = fabs(region->ew_res / (dx != 0 ? dx : 1e6));
+    t_delta_y = fabs(region->ns_res / (dy != 0 ? dy : 1e6));
+    t_delta_z = fabs(region->tb_res / (dz != 0 ? dz : 1e6));
+
+    xtmp = (start[0] - region->west) / region->ew_res;
+    ytmp = (start[1] - region->south) / region->ns_res;
+    ztmp = (start[2] - region->bottom) / region->tb_res;
+
+    if (step_x > 0)
+	t_max_x = t_delta_x * (1.0 - (xtmp - floor(xtmp)));
+    else
+	t_max_x = t_delta_x * (xtmp - floor(xtmp));
+    if (step_y > 0)
+	t_max_y = t_delta_y * (1.0 - (ytmp - floor(ytmp)));
+    else
+	t_max_y = t_delta_y * (ytmp - floor(ytmp));
+    if (step_z > 0)
+	t_max_z = t_delta_z * (1.0 - (ztmp - floor(ztmp)));
+    else
+	t_max_z = t_delta_z * (ztmp - floor(ztmp));
+
+    count = 0;
+    while (TRUE) {
+	if (t_max_x < t_max_y) {
+	    if (t_max_x < t_max_z) {
+		t_max_x = t_max_x + t_delta_x;
+		x = x + step_x;
+	    }
+	    else {
+		t_max_z = t_max_z + t_delta_z;
+		z = z + step_z;
+	    }
+	}
+	else {
+	    if (t_max_y < t_max_z) {
+		t_max_y = t_max_y + t_delta_y;
+		y = y + step_y;
+	    }
+	    else {
+		t_max_z = t_max_z + t_delta_z;
+		z = z + step_z;
+	    }
+	}
+	if ((x == x_end && y == y_end && z == z_end) ||
+	    /* just to make sure it breaks */
+	    (step_x * (x - x_end) > 0 || step_y * (y - y_end) > 0 ||
+	     step_z * (z - z_end) > 0))
+
+	    break;
+
+	(*coordinates)[count * 3 + 0] = x;
+	(*coordinates)[count * 3 + 1] = region->rows - y - 1;
+	(*coordinates)[count * 3 + 2] = z;
+	count++;
+
+	/* reallocation for cases when the steps would be too big */
+	if (*size <= count) {
+	    *size = 2 * (*size);
+	    *coordinates = G_realloc(*coordinates, (*size) * 3 * sizeof(int));
+	}
+    }
+    *coor_count = count;
+}
diff --git a/raster3d/r3.flow/voxel_traversal.h b/raster3d/r3.flow/voxel_traversal.h
new file mode 100644
index 0000000..f870adc
--- /dev/null
+++ b/raster3d/r3.flow/voxel_traversal.h
@@ -0,0 +1,9 @@
+#ifndef VOXEL_TRAVERSAL_H
+#define VOXEL_TRAVERSAL_H
+
+#include <grass/raster3d.h>
+
+void traverse(RASTER3D_Region *region, double *start, double *end,
+              int **coordinates, int *size, int *coor_count);
+
+#endif // VOXEL_TRAVERSAL_H
diff --git a/raster3d/r3.gradient/Makefile b/raster3d/r3.gradient/Makefile
new file mode 100644
index 0000000..a6a4bad
--- /dev/null
+++ b/raster3d/r3.gradient/Makefile
@@ -0,0 +1,10 @@
+MODULE_TOPDIR = ../..
+
+PGM=r3.gradient
+
+LIBES = $(RASTER3DLIB) $(RASTERLIB) $(GISLIB)
+DEPENDENCIES = $(RASTER3DDEP) $(RASTERDEP) $(GISDEP)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+default: cmd
diff --git a/raster3d/r3.gradient/main.c b/raster3d/r3.gradient/main.c
new file mode 100644
index 0000000..77d08be
--- /dev/null
+++ b/raster3d/r3.gradient/main.c
@@ -0,0 +1,302 @@
+/****************************************************************************
+ * 
+ * MODULE:       r3.gradient     
+ * AUTHOR(S):    Anna Petrasova kratochanna <at> gmail <dot> com
+ * PURPOSE:      Computes gradient of a 3D raster map
+ * COPYRIGHT:    (C) 2014 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the file COPYING that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+
+#include <grass/raster3d.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+#include "r3gradient_structs.h"
+
+int main(int argc, char *argv[])
+{
+    struct Option *input_opt, *output_opt, *block_opt;
+    struct GModule *module;
+    RASTER3D_Region region;
+    RASTER3D_Map *input;
+    RASTER3D_Map *output[3];
+    struct Gradient_block *blocks;
+    int block_x, block_y, block_z;
+    int index_x, index_y, index_z;
+    int n_x, n_y, n_z;
+    int start_x, start_y, start_z;
+    int i, max_i, k, j, N;
+    double step[3];
+    int *bl_indices;
+    int *bl_overlap;
+    int r, c, d;
+    DCELL value;
+
+    module = G_define_module();
+    G_add_keyword(_("raster3d"));
+    G_add_keyword(_("gradient"));
+    G_add_keyword(_("voxel"));
+    module->description =
+	_("Computes gradient of a 3D raster map "
+	  "and outputs gradient components as three 3D raster maps.");
+
+    input_opt = G_define_standard_option(G_OPT_R3_INPUT);
+
+    /* TODO: define G_OPT_R3_OUTPUTS or use separate options for each map? */
+    output_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    output_opt->multiple = YES;
+    output_opt->key_desc = "grad_x,grad_y,grad_z";
+    output_opt->description = _("Name for output 3D raster map(s)");
+
+    block_opt = G_define_option();
+    block_opt->key = "blocksize";
+    block_opt->multiple = TRUE;
+    block_opt->answer = "30,30,20"; /* based on testing */
+    block_opt->key_desc = "size_x,size_y,size_z";
+    block_opt->description = _("Size of blocks");
+
+    /* disabled - was there for openMP
+    process_opt = G_define_option();
+    process_opt->key = "nprocs";
+    process_opt->type = TYPE_INTEGER;
+    process_opt->required = NO;
+    process_opt->description = _("Number of parallel processes");
+    process_opt->options = "1-100";
+    process_opt->answer = "1";
+    */
+
+    G_gisinit(argv[0]);
+    if (G_parser(argc, argv))
+	exit(EXIT_FAILURE);
+
+    N = 1;
+    /* disabled - was there for openMP
+    N = atoi(process_opt->answer);
+#if defined(_OPENMP)
+    omp_set_num_threads(N);
+#endif
+    */
+
+    Rast3d_init_defaults();
+    Rast3d_get_window(&region);
+
+    block_x = atoi(block_opt->answers[0]);
+    block_y = atoi(block_opt->answers[1]);
+    block_z = atoi(block_opt->answers[2]);
+
+    if (block_x < 3 || block_y < 3 || block_z < 3)
+	G_warning("block size too small, set to 3");
+
+    block_x = block_x < 3 ? 3 : block_x;
+    block_y = block_y < 3 ? 3 : block_y;
+    block_z = block_z < 3 ? 3 : block_z;
+    block_x = block_x > region.cols ? region.cols : block_x;
+    block_y = block_y > region.rows ? region.rows : block_y;
+    block_z = block_y > region.depths ? region.depths : block_z;
+
+    step[0] = region.ew_res;
+    step[1] = region.ns_res;
+    step[2] = region.tb_res;
+
+    input = Rast3d_open_cell_old(input_opt->answer,
+				 G_find_raster3d(input_opt->answer, ""),
+				 &region, RASTER3D_TILE_SAME_AS_FILE,
+				 RASTER3D_USE_CACHE_DEFAULT);
+    if (!input)
+	Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+			   input_opt->answer);
+
+    for (i = 0; i < 3; i++) {
+	output[i] =
+	    Rast3d_open_new_opt_tile_size(output_opt->answers[i],
+					  RASTER3D_USE_CACHE_DEFAULT,
+					  &region, DCELL_TYPE, 32);
+	if (!output[i]) {
+	    Rast3d_fatal_error(_("Unable to open 3D raster map <%s>"),
+			       output_opt->answers[i]);
+	}
+
+    }
+
+    blocks = G_calloc(N, sizeof(struct Gradient_block));
+    if (!blocks)
+	G_fatal_error(_("Failed to allocate memory for blocks"));
+    for (i = 0; i < N; i++) {
+	blocks[i].input.array = G_malloc(((block_x + 2) * (block_y + 2)
+					  * (block_z + 2)) * sizeof(DCELL));
+	blocks[i].dx.array = G_malloc(((block_x + 2) * (block_y + 2)
+				       * (block_z + 2)) * sizeof(DCELL));
+	blocks[i].dy.array = G_malloc(((block_x + 2) * (block_y + 2)
+				       * (block_z + 2)) * sizeof(DCELL));
+	blocks[i].dz.array = G_malloc(((block_x + 2) * (block_y + 2)
+				       * (block_z + 2)) * sizeof(DCELL));
+    }
+
+    bl_indices = G_calloc(N * 3, sizeof(int));
+    bl_overlap = G_calloc(N * 6, sizeof(int));
+
+    max_i = (int)ceil(region.cols / (float)block_x) *
+	(int)ceil(region.rows / (float)block_y) *
+	(int)ceil(region.depths / (float)block_z);
+    i = j = 0;
+    index_z = 0;
+
+    /* loop through the blocks */
+    while (index_z < region.depths) {
+	index_y = 0;
+	while (index_y < region.rows) {
+	    index_x = 0;
+	    while (index_x < region.cols) {
+		G_percent(i, max_i, 1);
+		/* generally overlap is 1 on both sides */
+		bl_overlap[j * 6 + 0] = bl_overlap[j * 6 + 2] =
+		    bl_overlap[j * 6 + 4] = 1;
+		bl_overlap[j * 6 + 1] = bl_overlap[j * 6 + 3] =
+		    bl_overlap[j * 6 + 5] = 1;
+
+		/* compute the starting index of the block and its size */
+		start_x = fmax(index_x - 1, 0);
+		n_x = fmin(index_x + block_x, region.cols - 1) - start_x + 1;
+		start_y = fmax(index_y - 1, 0);
+		n_y = fmin(index_y + block_y, region.rows - 1) - start_y + 1;
+		start_z = fmax(index_z - 1, 0);
+		n_z =
+		    fmin(index_z + block_z, region.depths - 1) - start_z + 1;
+
+		/* adjust offset on edges */
+		/* start offset */
+		if (index_x == 0)
+		    bl_overlap[j * 6 + 0] = 0;
+		if (index_y == 0)
+		    bl_overlap[j * 6 + 2] = 0;
+		if (index_z == 0)
+		    bl_overlap[j * 6 + 4] = 0;
+		/* end offset */
+		if (index_x + block_x >= region.cols)
+		    bl_overlap[j * 6 + 1] = 0;
+		if (index_y + block_y >= region.rows)
+		    bl_overlap[j * 6 + 3] = 0;
+		if (index_z + block_z >= region.depths)
+		    bl_overlap[j * 6 + 5] = 0;
+		/* adjust offset when the end block would be too small */
+		if (n_x <= 2) {
+		    start_x -= 1;
+		    n_x += 1;
+		    bl_overlap[j * 6 + 0] = 2;
+		}
+		if (n_y <= 2) {
+		    start_y -= 1;
+		    n_y += 1;
+		    bl_overlap[j * 6 + 2] = 2;
+		}
+		if (n_z <= 2) {
+		    start_z -= 1;
+		    n_z += 1;
+		    bl_overlap[j * 6 + 4] = 2;
+		}
+		/* store indices for later writing */
+		bl_indices[j * 3 + 0] = index_x;
+		bl_indices[j * 3 + 1] = index_y;
+		bl_indices[j * 3 + 2] = index_z;
+
+		blocks[j].input.sx = n_x;
+		blocks[j].input.sy = n_y;
+		blocks[j].input.sz = n_z;
+		blocks[j].dx.sx = blocks[j].dy.sx = blocks[j].dz.sx = n_x;
+		blocks[j].dx.sy = blocks[j].dy.sy = blocks[j].dz.sy = n_y;
+		blocks[j].dx.sz = blocks[j].dy.sz = blocks[j].dz.sz = n_z;
+
+		/* read */
+		Rast3d_get_block(input, start_x, start_y, start_z,
+				 n_x, n_y, n_z, blocks[j].input.array,
+				 DCELL_TYPE);
+		if ((j + 1) == N || i == max_i - 1) {
+
+		    /* compute gradient */
+		    /* disabled openMP #pragma omp parallel for schedule (static) private (k) */
+		    for (k = 0; k <= j; k++) {
+			Rast3d_gradient_double(&(blocks[k].input), step,
+					       &(blocks[k].dx), &(blocks[k].dy),
+					       &(blocks[k].dz));
+		    }
+
+		    /* write */
+		    for (k = 0; k <= j; k++) {
+			for (c = 0;c < blocks[k].input.sx - bl_overlap[k * 6 + 0] -
+			     bl_overlap[k * 6 + 1]; c++) {
+			    for (r = 0; r < blocks[k].input.sy - bl_overlap[k * 6 + 2] -
+				 bl_overlap[k * 6 + 3]; r++) {
+				for (d = 0; d < blocks[k].input.sz - bl_overlap[k * 6 + 4] -
+				     bl_overlap[k * 6 + 5]; d++) {
+				    value = RASTER3D_ARRAY_ACCESS(&(blocks[k].dx),
+					      c + bl_overlap[k * 6 + 0],
+					      r + bl_overlap[k * 6 + 2],
+					      d + bl_overlap[k * 6 + 4]);
+				    Rast3d_put_value(output[0],
+						     c + bl_indices[k * 3 + 0],
+						     r + bl_indices[k * 3 + 1],
+						     d + bl_indices[k * 3 + 2],
+						     &value, DCELL_TYPE);
+
+				    value = RASTER3D_ARRAY_ACCESS(&(blocks[k].dy),
+					     c + bl_overlap[k * 6 + 0],
+					     r + bl_overlap[k * 6 + 2],
+					     d + bl_overlap[k * 6 + 4]);
+				    Rast3d_put_value(output[1],
+						     c + bl_indices[k * 3 + 0],
+						     r + bl_indices[k * 3 + 1],
+						     d + bl_indices[k * 3 + 2],
+						     &value, DCELL_TYPE);
+
+				    value = RASTER3D_ARRAY_ACCESS(&(blocks[k].dz),
+					     c + bl_overlap[k * 6 + 0],
+					     r + bl_overlap[k * 6 + 2],
+					     d + bl_overlap[k * 6 + 4]);
+				    Rast3d_put_value(output[2],
+						     c + bl_indices[k * 3 + 0],
+						     r + bl_indices[k * 3 + 1],
+						     d + bl_indices[k * 3 + 2],
+						     &value, DCELL_TYPE);
+				}
+			    }
+			}
+		    }
+		    j = -1;
+		}
+		i++;
+		j++;
+		index_x += block_x;
+	    }
+	    index_y += block_y;
+	}
+	index_z += block_z;
+    }
+    G_percent(1, 1, 1);
+    for (i = 0; i < N; i++) {
+	G_free(blocks[i].input.array);
+	G_free(blocks[i].dx.array);
+	G_free(blocks[i].dy.array);
+	G_free(blocks[i].dz.array);
+    }
+    G_free(blocks);
+    G_free(bl_indices);
+    G_free(bl_overlap);
+
+    G_message(_("Writing gradient 3D raster maps..."));
+    G_percent(0, 3, 1);
+    Rast3d_close(output[0]);
+    G_percent(1, 3, 1);
+    Rast3d_close(output[1]);
+    G_percent(2, 3, 1);
+    Rast3d_close(output[2]);
+    G_percent(1, 1, 1);
+
+    exit(EXIT_SUCCESS);
+}
diff --git a/raster3d/r3.gradient/r3.gradient.html b/raster3d/r3.gradient/r3.gradient.html
new file mode 100644
index 0000000..e3ffb56
--- /dev/null
+++ b/raster3d/r3.gradient/r3.gradient.html
@@ -0,0 +1,31 @@
+<h2>DESCRIPTION</h2>
+
+Module <em>r3.gradient</em> computes gradient from a 3D raster map. 
+Results are three 3D raster maps describing the x, y, z components of 
+the computed gradient field.
+
+<h2>EXAMPLES</h2>
+
+<div class="code"><pre>
+# create a 3D raster
+g.region s=0 n=100 w=0 e=100 b=0 t=100 -p
+r3.mapcalc "test_gradient = sqrt(row()*row() +col()*col()+ depth()*depth())"
+
+# compute gradient
+r3.gradient input=test_gradient output=grad_x,grad_y,grad_z
+</pre></div>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r3.flow.html">r3.flow</a>,
+<a href="r.flow.html">r.flow</a>
+</em>
+
+<h2>AUTHORS</h2>
+
+Anna Petrasova, <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>,
+developed during GSoC 2014.
+
+<p>
+<i>Last changed: $Date: 2014-11-27 00:20:52 +0100 (Thu, 27 Nov 2014) $</i>
diff --git a/raster3d/r3.gradient/r3gradient_structs.h b/raster3d/r3.gradient/r3gradient_structs.h
new file mode 100644
index 0000000..afac271
--- /dev/null
+++ b/raster3d/r3.gradient/r3gradient_structs.h
@@ -0,0 +1,13 @@
+#ifndef R3GRADIENT_STRUCTS_H
+#define R3GRADIENT_STRUCTS_H
+
+#include <grass/raster3d.h>
+
+struct Gradient_block {
+    RASTER3D_Array_double input;
+    RASTER3D_Array_double dx;
+    RASTER3D_Array_double dy;
+    RASTER3D_Array_double dz;
+};
+
+#endif // R3GRADIENT_STRUCTS_H
diff --git a/raster3d/r3.gradient/testsuite/data/test_map_1 b/raster3d/r3.gradient/testsuite/data/test_map_1
new file mode 100644
index 0000000..c023656
--- /dev/null
+++ b/raster3d/r3.gradient/testsuite/data/test_map_1
@@ -0,0 +1,61 @@
+version: grass7
+order: nsbt
+north: 100.000000
+south: 0.000000
+east: 120.000000
+west: 0.000000
+top: 50.000000
+bottom: 0.000000
+rows: 10
+cols: 12
+levels: 5
+1.73205081 2.44948974 3.31662479 4.24264069 5.19615242 6.16441400 7.14142843 8.12403840 9.11043358 10.09950494 11.09053651 12.08304597 
+2.44948974 3.00000000 3.74165739 4.58257569 5.47722558 6.40312424 7.34846923 8.30662386 9.27361850 10.24695077 11.22497216 12.20655562 
+3.31662479 3.74165739 4.35889894 5.09901951 5.91607978 6.78232998 7.68114575 8.60232527 9.53939201 10.48808848 11.44552314 12.40967365 
+4.24264069 4.58257569 5.09901951 5.74456265 6.48074070 7.28010989 8.12403840 9.00000000 9.89949494 10.81665383 11.74734012 12.68857754 
+5.19615242 5.47722558 5.91607978 6.48074070 7.14142843 7.87400787 8.66025404 9.48683298 10.34408043 11.22497216 12.12435565 13.03840481 
+6.16441400 6.40312424 6.78232998 7.28010989 7.87400787 8.54400375 9.27361850 10.04987562 10.86278049 11.70469991 12.56980509 13.45362405 
+7.14142843 7.34846923 7.68114575 8.12403840 8.66025404 9.27361850 9.94987437 10.67707825 11.44552314 12.24744871 13.07669683 13.92838828 
+8.12403840 8.30662386 8.60232527 9.00000000 9.48683298 10.04987562 10.67707825 11.35781669 12.08304597 12.84523258 13.63818170 14.45683229 
+9.11043358 9.27361850 9.53939201 9.89949494 10.34408043 10.86278049 11.44552314 12.08304597 12.76714533 13.49073756 14.24780685 15.03329638 
+10.09950494 10.24695077 10.48808848 10.81665383 11.22497216 11.70469991 12.24744871 12.84523258 13.49073756 14.17744688 14.89966443 15.65247584 
+2.44948974 3.00000000 3.74165739 4.58257569 5.47722558 6.40312424 7.34846923 8.30662386 9.27361850 10.24695077 11.22497216 12.20655562 
+3.00000000 3.46410162 4.12310563 4.89897949 5.74456265 6.63324958 7.54983444 8.48528137 9.43398113 10.39230485 11.35781669 12.32882801 
+3.74165739 4.12310563 4.69041576 5.38516481 6.16441400 7.00000000 7.87400787 8.77496439 9.69535971 10.63014581 11.57583690 12.52996409 
+4.58257569 4.89897949 5.38516481 6.00000000 6.70820393 7.48331477 8.30662386 9.16515139 10.04987562 10.95445115 11.87434209 12.80624847 
+5.47722558 5.74456265 6.16441400 6.70820393 7.34846923 8.06225775 8.83176087 9.64365076 10.48808848 11.35781669 12.24744871 13.15294644 
+6.40312424 6.63324958 7.00000000 7.48331477 8.06225775 8.71779789 9.43398113 10.19803903 11.00000000 11.83215957 12.68857754 13.56465997 
+7.34846923 7.54983444 7.87400787 8.30662386 8.83176087 9.43398113 10.09950494 10.81665383 11.57583690 12.36931688 13.19090596 14.03566885 
+8.30662386 8.48528137 8.77496439 9.16515139 9.64365076 10.19803903 10.81665383 11.48912529 12.20655562 12.96148140 13.74772708 14.56021978 
+9.27361850 9.43398113 9.69535971 10.04987562 10.48808848 11.00000000 11.57583690 12.20655562 12.88409873 13.60147051 14.35270009 15.13274595 
+10.24695077 10.39230485 10.63014581 10.95445115 11.35781669 11.83215957 12.36931688 12.96148140 13.60147051 14.28285686 15.00000000 15.74801575 
+3.31662479 3.74165739 4.35889894 5.09901951 5.91607978 6.78232998 7.68114575 8.60232527 9.53939201 10.48808848 11.44552314 12.40967365 
+3.74165739 4.12310563 4.69041576 5.38516481 6.16441400 7.00000000 7.87400787 8.77496439 9.69535971 10.63014581 11.57583690 12.52996409 
+4.35889894 4.69041576 5.19615242 5.83095189 6.55743852 7.34846923 8.18535277 9.05538514 9.94987437 10.86278049 11.78982612 12.72792206 
+5.09901951 5.38516481 5.83095189 6.40312424 7.07106781 7.81024968 8.60232527 9.43398113 10.29563014 11.18033989 12.08304597 13.00000000 
+5.91607978 6.16441400 6.55743852 7.07106781 7.68114575 8.36660027 9.11043358 9.89949494 10.72380529 11.57583690 12.44989960 13.34166406 
+6.78232998 7.00000000 7.34846923 7.81024968 8.36660027 9.00000000 9.69535971 10.44030651 11.22497216 12.04159458 12.88409873 13.74772708 
+7.68114575 7.87400787 8.18535277 8.60232527 9.11043358 9.69535971 10.34408043 11.04536102 11.78982612 12.56980509 13.37908816 14.21267040 
+8.60232527 8.77496439 9.05538514 9.43398113 9.89949494 10.44030651 11.04536102 11.70469991 12.40967365 13.15294644 13.92838828 14.73091986 
+9.53939201 9.69535971 9.94987437 10.29563014 10.72380529 11.22497216 11.78982612 12.40967365 13.07669683 13.78404875 14.52583905 15.29705854 
+10.48808848 10.63014581 10.86278049 11.18033989 11.57583690 12.04159458 12.56980509 13.15294644 13.78404875 14.45683229 15.16575089 15.90597372 
+4.24264069 4.58257569 5.09901951 5.74456265 6.48074070 7.28010989 8.12403840 9.00000000 9.89949494 10.81665383 11.74734012 12.68857754 
+4.58257569 4.89897949 5.38516481 6.00000000 6.70820393 7.48331477 8.30662386 9.16515139 10.04987562 10.95445115 11.87434209 12.80624847 
+5.09901951 5.38516481 5.83095189 6.40312424 7.07106781 7.81024968 8.60232527 9.43398113 10.29563014 11.18033989 12.08304597 13.00000000 
+5.74456265 6.00000000 6.40312424 6.92820323 7.54983444 8.24621125 9.00000000 9.79795897 10.63014581 11.48912529 12.36931688 13.26649916 
+6.48074070 6.70820393 7.07106781 7.54983444 8.12403840 8.77496439 9.48683298 10.24695077 11.04536102 11.87434209 12.72792206 13.60147051 
+7.28010989 7.48331477 7.81024968 8.24621125 8.77496439 9.38083152 10.04987562 10.77032961 11.53256259 12.32882801 13.15294644 14.00000000 
+8.12403840 8.30662386 8.60232527 9.00000000 9.48683298 10.04987562 10.67707825 11.35781669 12.08304597 12.84523258 13.63818170 14.45683229 
+9.00000000 9.16515139 9.43398113 9.79795897 10.24695077 10.77032961 11.35781669 12.00000000 12.68857754 13.41640786 14.17744688 14.96662955 
+9.89949494 10.04987562 10.29563014 10.63014581 11.04536102 11.53256259 12.08304597 12.68857754 13.34166406 14.03566885 14.76482306 15.52417470 
+10.81665383 10.95445115 11.18033989 11.48912529 11.87434209 12.32882801 12.84523258 13.41640786 14.03566885 14.69693846 15.39480432 16.12451550 
+5.19615242 5.47722558 5.91607978 6.48074070 7.14142843 7.87400787 8.66025404 9.48683298 10.34408043 11.22497216 12.12435565 13.03840481 
+5.47722558 5.74456265 6.16441400 6.70820393 7.34846923 8.06225775 8.83176087 9.64365076 10.48808848 11.35781669 12.24744871 13.15294644 
+5.91607978 6.16441400 6.55743852 7.07106781 7.68114575 8.36660027 9.11043358 9.89949494 10.72380529 11.57583690 12.44989960 13.34166406 
+6.48074070 6.70820393 7.07106781 7.54983444 8.12403840 8.77496439 9.48683298 10.24695077 11.04536102 11.87434209 12.72792206 13.60147051 
+7.14142843 7.34846923 7.68114575 8.12403840 8.66025404 9.27361850 9.94987437 10.67707825 11.44552314 12.24744871 13.07669683 13.92838828 
+7.87400787 8.06225775 8.36660027 8.77496439 9.27361850 9.84885780 10.48808848 11.18033989 11.91637529 12.68857754 13.49073756 14.31782106 
+8.66025404 8.83176087 9.11043358 9.48683298 9.94987437 10.48808848 11.09053651 11.74734012 12.44989960 13.19090596 13.96424004 14.76482306 
+9.48683298 9.64365076 9.89949494 10.24695077 10.67707825 11.18033989 11.74734012 12.36931688 13.03840481 13.74772708 14.49137675 15.26433752 
+10.34408043 10.48808848 10.72380529 11.04536102 11.44552314 11.91637529 12.44989960 13.03840481 13.67479433 14.35270009 15.06651917 15.81138830 
+11.22497216 11.35781669 11.57583690 11.87434209 12.24744871 12.68857754 13.19090596 13.74772708 14.35270009 15.00000000 15.68438714 16.40121947 
diff --git a/raster3d/r3.gradient/testsuite/data/test_map_2 b/raster3d/r3.gradient/testsuite/data/test_map_2
new file mode 100644
index 0000000..588b842
--- /dev/null
+++ b/raster3d/r3.gradient/testsuite/data/test_map_2
@@ -0,0 +1,36 @@
+version: grass7
+order: nsbt
+north: 5.000000
+south: 0.000000
+east: 5.000000
+west: 0.000000
+top: 5.000000
+bottom: 0.000000
+rows: 5
+cols: 5
+levels: 5
+3.00000000 6.00000000 11.00000000 18.00000000 27.00000000 
+6.00000000 9.00000000 14.00000000 * 30.00000000 
+11.00000000 14.00000000 19.00000000 26.00000000 35.00000000 
+18.00000000 * 26.00000000 33.00000000 42.00000000 
+27.00000000 30.00000000 35.00000000 42.00000000 51.00000000 
+6.00000000 9.00000000 14.00000000 * 30.00000000 
+9.00000000 12.00000000 17.00000000 24.00000000 33.00000000 
+14.00000000 17.00000000 22.00000000 29.00000000 * 
+* 24.00000000 29.00000000 36.00000000 45.00000000 
+30.00000000 33.00000000 * 45.00000000 54.00000000 
+11.00000000 14.00000000 19.00000000 26.00000000 35.00000000 
+14.00000000 17.00000000 22.00000000 29.00000000 * 
+19.00000000 22.00000000 27.00000000 * 43.00000000 
+26.00000000 29.00000000 * 41.00000000 50.00000000 
+35.00000000 * 43.00000000 50.00000000 * 
+18.00000000 * 26.00000000 33.00000000 42.00000000 
+* 24.00000000 29.00000000 36.00000000 45.00000000 
+26.00000000 29.00000000 * 41.00000000 50.00000000 
+33.00000000 36.00000000 41.00000000 48.00000000 57.00000000 
+42.00000000 45.00000000 50.00000000 57.00000000 66.00000000 
+27.00000000 30.00000000 35.00000000 42.00000000 51.00000000 
+30.00000000 33.00000000 * 45.00000000 54.00000000 
+35.00000000 * 43.00000000 50.00000000 * 
+42.00000000 45.00000000 50.00000000 57.00000000 66.00000000 
+51.00000000 54.00000000 * 66.00000000 75.00000000 
diff --git a/raster3d/r3.gradient/testsuite/r3gradient_test.py b/raster3d/r3.gradient/testsuite/r3gradient_test.py
new file mode 100644
index 0000000..dcf80ee
--- /dev/null
+++ b/raster3d/r3.gradient/testsuite/r3gradient_test.py
@@ -0,0 +1,160 @@
+# -*- coding: utf-8 -*-
+"""
+Test of r3.gradient
+
+ at author Anna Petrasova
+"""
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+r3univar_test_grad_x = """
+n=600
+null_cells=0
+cells=600
+min=0.00902566899999995
+max=0.0993248405000001
+range=0.0902991715000001
+mean=0.0641879624599999
+mean_of_abs=0.0641879624599999
+stddev=0.0243482677445681
+variance=0.000592838142161176
+coeff_var=37.9327631091908
+sum=38.512777476
+"""
+
+
+r3univar_test_grad_y = """
+n=600
+null_cells=0
+cells=600
+min=-0.0990409449999998
+max=-0.00774536350000012
+range=0.0912955814999997
+mean=-0.0563959154616667
+mean_of_abs=0.0563959154616667
+stddev=0.0244377519801364
+variance=0.000597203721842658
+coeff_var=-43.3324856597942
+sum=-33.837549277"""
+
+
+r3univar_test_grad_z = """
+n=600
+null_cells=0
+cells=600
+min=0.00643308800000026
+max=0.0967259644999999
+range=0.0902928764999997
+mean=0.0336457494116667
+mean_of_abs=0.0336457494116667
+stddev=0.0186882020765464
+variance=0.000349248896853835
+coeff_var=55.5440208743464
+sum=20.187449647
+"""
+
+r3univar_test_nulls_grad_x = """
+n=107
+null_cells=18
+cells=125
+min=0
+max=10
+range=10
+mean=3.70093457943925
+mean_of_abs=3.70093457943925
+stddev=3.6357902977452
+variance=13.2189710891781
+coeff_var=98.2397883481656
+sum=396
+"""
+
+r3univar_test_nulls_grad_y = """
+n=107
+null_cells=18
+cells=125
+min=-10
+max=0
+range=10
+mean=-3.70093457943925
+mean_of_abs=3.70093457943925
+stddev=3.6357902977452
+variance=13.2189710891781
+coeff_var=-98.2397883481656
+sum=-396
+"""
+
+r3univar_test_nulls_grad_z = """
+n=107
+null_cells=18
+cells=125
+min=0
+max=10
+range=10
+mean=3.70093457943925
+mean_of_abs=3.70093457943925
+stddev=3.6357902977452
+variance=13.2189710891781
+coeff_var=98.2397883481656
+sum=396
+"""
+
+
+class GradientTest(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Use temporary region settings"""
+        cls.use_temp_region()
+        cls.runModule('g.region', res3=10, n=100, s=0, w=0, e=120, b=0, t=50)
+        cls.runModule('r3.in.ascii', input='data/test_map_1', output='test_map_1_ref')
+        cls.runModule('g.region', res3=1, n=5, s=0, w=0, e=5, b=0, t=5)
+        cls.runModule('r3.in.ascii', input='data/test_map_2', output='test_map_2_ref')
+
+    @classmethod
+    def tearDownClass(cls):
+        """!Remove the temporary region"""
+        cls.del_temp_region()
+        cls.runModule('g.remove', flags='f', type='raster_3d',
+                      name=','.join(['test_map_1_ref', 'test_map_2_ref',
+                                        'test_grad_x', 'test_grad_y',
+                                        'test_grad_z', 'test_null_grad_x',
+                                        'test_null_grad_y', 'test_null_grad_z']))
+
+    def test_gradient_runs(self):
+        self.runModule('g.region', res3=10, n=100, s=0, w=0, e=120, b=0, t=50)
+        self.assertModuleFail('r3.gradient', input='test_map_1_ref',
+                              output=['test_grad_x', 'test_grad_y'], overwrite=True)
+        self.assertModule('r3.gradient', input='test_map_1_ref',
+                          output=['test_grad_x', 'test_grad_y', 'test_grad_z'], overwrite=True)
+
+    def test_gradient(self):
+        self.runModule('g.region', res3=10, n=100, s=0, w=0, e=120, b=0, t=50)
+        self.runModule('r3.gradient', input='test_map_1_ref',
+                       output=['test_grad_x', 'test_grad_y', 'test_grad_z'], overwrite=True)
+        self.assertRaster3dFitsUnivar(raster='test_grad_x', reference=r3univar_test_grad_x, precision=1e-8)
+        self.assertRaster3dFitsUnivar(raster='test_grad_y', reference=r3univar_test_grad_y, precision=1e-8)
+        self.assertRaster3dFitsUnivar(raster='test_grad_z', reference=r3univar_test_grad_z, precision=1e-8)
+
+    def test_gradient_block(self):
+        self.runModule('g.region', res3=10, n=100, s=0, w=0, e=120, b=0, t=50)
+        self.assertModule('r3.gradient', input='test_map_1_ref', blocksize=[200, 2, 50],
+                          output=['test_grad_x', 'test_grad_y', 'test_grad_z'], overwrite=True)
+        self.assertRaster3dFitsUnivar(raster='test_grad_x', reference=r3univar_test_grad_x, precision=1e-8)
+        self.assertRaster3dFitsUnivar(raster='test_grad_y', reference=r3univar_test_grad_y, precision=1e-8)
+        self.assertRaster3dFitsUnivar(raster='test_grad_z', reference=r3univar_test_grad_z, precision=1e-8)
+
+    def test_gradient_nulls(self):
+        self.runModule('g.region', res3=1, n=5, s=0, w=0, e=5, b=0, t=5)
+        self.assertModule('r3.gradient', input='test_map_2_ref', blocksize=[200, 2, 50],
+                          output=['test_null_grad_x', 'test_null_grad_y', 'test_null_grad_z'])
+        self.assertRaster3dFitsUnivar(raster='test_null_grad_x',
+                                      reference=r3univar_test_nulls_grad_x, precision=1e-8)
+        self.assertRaster3dFitsUnivar(raster='test_null_grad_y',
+                                      reference=r3univar_test_nulls_grad_y, precision=1e-8)
+        self.assertRaster3dFitsUnivar(raster='test_null_grad_z',
+                                      reference=r3univar_test_nulls_grad_z, precision=1e-8)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/raster3d/r3.gwflow/r3.gwflow.html b/raster3d/r3.gwflow/r3.gwflow.html
index 1a5707d..f2e801f 100644
--- a/raster3d/r3.gwflow/r3.gwflow.html
+++ b/raster3d/r3.gwflow/r3.gwflow.html
@@ -137,4 +137,4 @@ Sören Gebbert
 <a href="http://www.hydrogeologie.tu-berlin.de/fileadmin/fg66/_hydro/Diplomarbeiten/2007_Diplomarbeit_Sören_Gebbert.pdf">here</a>
 at Technical University Berlin, Germany.
 
-<p><i>Last changed: $Date: 2016-04-09 18:46:53 +0200 (Sat, 09 Apr 2016) $</i>
+<p><i>Last changed: $Date: 2016-04-09 18:43:25 +0200 (Sat, 09 Apr 2016) $</i>
diff --git a/raster3d/r3.in.ascii/r3.in.ascii.html b/raster3d/r3.in.ascii/r3.in.ascii.html
index 4bb548e..98dc4cf 100644
--- a/raster3d/r3.in.ascii/r3.in.ascii.html
+++ b/raster3d/r3.in.ascii/r3.in.ascii.html
@@ -106,4 +106,4 @@ Helena Mitasova, Bill Brown, Lubos Mitas, Jaro Hofierka, Sören Gebbert
 <a href="g.region.html">g.region</a>
 </em>
 
-<p><i>Last changed: $Date: 2016-01-29 10:56:07 +0100 (Fri, 29 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-29 10:29:57 +0100 (Fri, 29 Jan 2016) $</i>
diff --git a/raster3d/r3.in.lidar/Makefile b/raster3d/r3.in.lidar/Makefile
new file mode 100644
index 0000000..0e136bb
--- /dev/null
+++ b/raster3d/r3.in.lidar/Makefile
@@ -0,0 +1,15 @@
+MODULE_TOPDIR = ../..
+
+PGM = r3.in.lidar
+
+LIBES = $(RASTERLIB) $(RASTER3DLIB) $(GISLIB) $(MATHLIB) $(GPROJLIB) $(LASLIBS) $(SEGMENTLIB) $(VECTORLIB)
+DEPENDENCIES = $(RASTERDEP) $(RASTER3DDEP) $(GISDEP) $(SEGMENTDEP) $(VECTORDEP)
+
+EXTRA_INC = $(LASINC) $(VECT_INC) $(PROJINC)
+EXTRA_CFLAGS = $(VECT_CFLAGS) $(GDALCFLAGS)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+ifneq ($(USE_LIBLAS),)
+default: cmd
+endif
diff --git a/raster3d/r3.in.lidar/filters.c b/raster3d/r3.in.lidar/filters.c
new file mode 100644
index 0000000..004e5cf
--- /dev/null
+++ b/raster3d/r3.in.lidar/filters.c
@@ -0,0 +1,96 @@
+/*
+ * v.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+
+#include "filters.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+
+int return_filter_create_from_string(struct ReturnFilter *return_filter,
+                                     const char *name)
+{
+    return_filter->filter = LAS_ALL;
+    if (name) {
+        if (strcmp(name, "first") == 0)
+            return_filter->filter = LAS_FIRST;
+        else if (strcmp(name, "last") == 0)
+            return_filter->filter = LAS_LAST;
+        else if (strcmp(name, "mid") == 0)
+            return_filter->filter = LAS_MID;
+        else
+            G_fatal_error(_("Unknown return filter value <%s>"), name);
+    }
+    if (return_filter->filter == LAS_ALL)
+        return FALSE;
+    else
+        return TRUE;
+}
+
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns)
+{
+    if (return_filter->filter == LAS_ALL)
+        return FALSE;
+    int skipme = 1;
+
+    switch (return_filter->filter) {
+    case LAS_FIRST:
+        if (return_n == 1)
+            skipme = 0;
+        break;
+    case LAS_MID:
+        if (return_n > 1 && return_n < n_returns)
+            skipme = 0;
+        break;
+    case LAS_LAST:
+        if (n_returns > 1 && return_n == n_returns)
+            skipme = 0;
+        break;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
+
+int class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                     char **classes)
+{
+    class_filter->str_classes = classes;
+    if (classes)
+        return TRUE;
+    else
+        return FALSE;
+}
+
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n)
+{
+    if (!class_filter->str_classes)
+        return FALSE;
+    int i = 0;
+    int skipme = TRUE;
+
+    while (class_filter->str_classes[i]) {
+        if (class_n == atoi(class_filter->str_classes[i])) {
+            skipme = FALSE;
+            break;
+        }
+        i++;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
diff --git a/raster3d/r3.in.lidar/filters.h b/raster3d/r3.in.lidar/filters.h
new file mode 100644
index 0000000..aebbcf1
--- /dev/null
+++ b/raster3d/r3.in.lidar/filters.h
@@ -0,0 +1,52 @@
+/*
+ * v.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#ifndef __FILTERS_H__
+#define __FILTERS_H__
+
+#define LAS_ALL 0
+#define LAS_FIRST 1
+#define LAS_MID 2
+#define LAS_LAST 3
+
+struct ReturnFilter
+{
+    int filter;
+};
+
+struct ClassFilter
+{
+
+    /** NULL terminated list of class numbers represented as string */
+    char **str_classes;
+};
+
+struct Option;
+
+int spatial_filter_from_option(struct Option *option, double *xmin,
+                               double *ymin, double *xmax, double *ymax);
+int spatial_filter_from_current_region(double *xmin, double *ymin,
+                                       double *xmax, double *ymax);
+
+int zrange_filter_from_option(struct Option *option,
+                              double *zmin, double *zmax);
+
+int return_filter_create_from_string(struct ReturnFilter *return_filter,
+                                     const char *name);
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns);
+int class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                     char **classes);
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n);
+
+#endif /* __FILTERS_H__ */
diff --git a/raster3d/r3.in.lidar/main.c b/raster3d/r3.in.lidar/main.c
new file mode 100644
index 0000000..cd3710f
--- /dev/null
+++ b/raster3d/r3.in.lidar/main.c
@@ -0,0 +1,436 @@
+
+/****************************************************************************
+*
+* MODULE:       r3.in.Lidar
+*
+* AUTHOR(S):    Vaclav Petras
+*
+* PURPOSE:      Imports LAS LiDAR point clouds to a 3D raster map using
+*               aggregate statistics.
+*
+* COPYRIGHT:    (C) 2016 Vaclav Petras and the The GRASS Development Team
+*
+*               This program is free software under the GNU General Public
+*               License (>=v2). Read the file COPYING that comes with GRASS
+*               for details.
+*
+*****************************************************************************/
+
+#include <stdlib.h>
+#include <grass/gis.h>
+#include <grass/raster3d.h>
+#include <grass/glocale.h>
+#include <liblas/capi/liblas.h>
+
+#include "rast_segment.h"
+#include "filters.h"
+
+struct PointBinning3D
+{
+    RASTER3D_Region region, flat_region;
+    RASTER3D_Map *count_raster, *sum_raster, *mean_raster;
+    RASTER3D_Map *count_flat_raster, *sum_flat_raster;
+    RASTER3D_Map *prop_count_raster, *prop_sum_raster;
+};
+
+static void raster3d_set_value_float(RASTER3D_Map * raster,
+                                     RASTER3D_Region * region, float value)
+{
+    int col, row, depth;
+
+    for (depth = 0; depth < region->depths; depth++)
+        for (row = 0; row < region->rows; row++)
+            for (col = 0; col < region->cols; col++)
+                Rast3d_put_float(raster, col, row, depth, value);
+}
+
+/* c = a / b */
+static void raster3d_divide(RASTER3D_Map * a, RASTER3D_Map * b,
+                            RASTER3D_Map * c, RASTER3D_Region * region)
+{
+    int col, row, depth;
+    double tmp;
+
+    for (depth = 0; depth < region->depths; depth++)
+        for (row = 0; row < region->rows; row++)
+            for (col = 0; col < region->cols; col++) {
+                tmp = Rast3d_get_double(b, col, row, 0);
+                /* TODO: compare to epsilon */
+                if (tmp > 0) {
+                    tmp = Rast3d_get_double(a, col, row, depth) / tmp;
+                    Rast3d_put_double(c, col, row, depth, tmp);
+                }
+                else {
+                    /* TODO: check this implementation */
+                    Rast3d_set_null_value(&tmp, 1, DCELL_TYPE);
+                    Rast3d_put_double(c, col, row, depth, tmp);
+                }
+            }
+}
+
+/* c = a / b where b has depth 1 */
+static void raster3d_divide_by_flat(RASTER3D_Map * a, RASTER3D_Map * b,
+                                    RASTER3D_Map * c,
+                                    RASTER3D_Region * region)
+{
+    int col, row, depth;
+    double tmp;
+
+    for (depth = 0; depth < region->depths; depth++)
+        for (row = 0; row < region->rows; row++)
+            for (col = 0; col < region->cols; col++) {
+                tmp = Rast3d_get_double(b, col, row, 0);
+                /* since it is count, using cast to integer to check
+                   againts zero, limits the value to max of CELL */
+                if (((CELL) tmp) > 0) {
+                    tmp = Rast3d_get_double(a, col, row, depth) / tmp;
+                    Rast3d_put_double(c, col, row, depth, tmp);
+                }
+                else {
+                    /* TODO: check this implementation */
+                    Rast3d_set_null_value(&tmp, 1, DCELL_TYPE);
+                    Rast3d_put_double(c, col, row, depth, tmp);
+                }
+            }
+}
+
+void binning_add_point(struct PointBinning3D binning, int row, int col,
+                       int depth, double value)
+{
+    double tmp;                 /* TODO: check if these should be in binning struct */
+
+    tmp = Rast3d_get_double(binning.count_raster, col, row, depth);
+    Rast3d_put_double(binning.count_raster, col, row, depth, tmp + 1);
+    tmp = Rast3d_get_double(binning.count_flat_raster, col, row, 0);
+    Rast3d_put_double(binning.count_flat_raster, col, row, 0, tmp + 1);
+    tmp = Rast3d_get_double(binning.sum_raster, col, row, depth);
+    Rast3d_put_double(binning.sum_raster, col, row, depth, tmp + value);
+    tmp = Rast3d_get_double(binning.sum_flat_raster, col, row, 0);
+    Rast3d_put_double(binning.sum_flat_raster, col, row, 0, tmp + value);
+}
+
+int main(int argc, char *argv[])
+{
+    struct GModule *module;
+    struct Option *input_opt;
+    struct Option *count_output_opt, *sum_output_opt, *mean_output_opt;
+    struct Option *prop_count_output_opt, *prop_sum_output_opt;
+    struct Option *filter_opt, *class_opt;
+    struct Option *base_raster_opt;
+    struct Flag *base_rast_res_flag;
+    struct Flag *only_valid_flag;
+
+    G_gisinit(argv[0]);
+    module = G_define_module();
+    G_add_keyword(_("3D raster"));
+    G_add_keyword(_("import"));
+    G_add_keyword(_("LIDAR"));
+    module->description = _("Creates a 3D raster map from LAS LiDAR points");
+
+    input_opt = G_define_standard_option(G_OPT_F_BIN_INPUT);
+    input_opt->required = YES;
+    input_opt->label = _("LAS input file");
+    input_opt->description =
+        _("LiDAR input file in LAS format (*.las or *.laz)");
+    input_opt->guisection = _("Input");
+
+    count_output_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    count_output_opt->key = "n";
+    count_output_opt->required = YES;
+    count_output_opt->label = _("Count of points per cell");
+    count_output_opt->guisection = _("Output");
+
+    sum_output_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    sum_output_opt->key = "sum";
+    sum_output_opt->required = YES;
+    sum_output_opt->label = _("Sum of values of point intensities per cell");
+    sum_output_opt->guisection = _("Output");
+
+    mean_output_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    mean_output_opt->key = "mean";
+    mean_output_opt->required = YES;
+    mean_output_opt->label = _("Mean of point intensities per cell");
+    mean_output_opt->guisection = _("Output");
+
+    /* TODO: proportional versus relative in naming */
+    prop_count_output_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    prop_count_output_opt->key = "proportional_n";
+    prop_count_output_opt->required = YES;
+    prop_count_output_opt->label =
+        _("3D raster map of proportional point count");
+    prop_count_output_opt->description =
+        _("Point count per 3D cell divided by point count per vertical"
+          " column");
+    prop_count_output_opt->guisection = _("Proportional output");
+
+    prop_sum_output_opt = G_define_standard_option(G_OPT_R3_OUTPUT);
+    prop_sum_output_opt->key = "proportional_sum";
+    prop_sum_output_opt->required = YES;
+    prop_sum_output_opt->label =
+        _("3D raster map of proportional sum of values");
+    prop_sum_output_opt->description =
+        _("Sum of values per 3D cell divided by sum of values per"
+          " vertical column");
+    prop_sum_output_opt->guisection = _("Proportional output");
+
+    filter_opt = G_define_option();
+    filter_opt->key = "return_filter";
+    filter_opt->type = TYPE_STRING;
+    filter_opt->required = NO;
+    filter_opt->label = _("Only import points of selected return type");
+    filter_opt->description = _("If not specified, all points are imported");
+    filter_opt->options = "first,last,mid";
+    filter_opt->guisection = _("Selection");
+
+    class_opt = G_define_option();
+    class_opt->key = "class_filter";
+    class_opt->type = TYPE_INTEGER;
+    class_opt->multiple = YES;
+    class_opt->required = NO;
+    class_opt->label = _("Only import points of selected class(es)");
+    class_opt->description = _("Input is comma separated integers. "
+                               "If not specified, all points are imported.");
+    class_opt->guisection = _("Selection");
+
+    base_raster_opt = G_define_standard_option(G_OPT_R_INPUT);
+    base_raster_opt->key = "base_raster";
+    base_raster_opt->required = NO;
+    base_raster_opt->label =
+        _("Subtract raster values from the z coordinates");
+    base_raster_opt->description =
+        _("The scale for z is applied beforehand, the filter afterwards");
+    base_raster_opt->guisection = _("Transform");
+
+    base_rast_res_flag = G_define_flag();
+    base_rast_res_flag->key = 'd';
+    base_rast_res_flag->description =
+        _("Use base raster actual resolution instead of computational region");
+
+    only_valid_flag = G_define_flag();
+    only_valid_flag->key = 'v';
+    only_valid_flag->label = _("Use only valid points");
+    only_valid_flag->description =
+        _("Points invalid according to APSRS LAS specification will be"
+          " filtered out");
+    only_valid_flag->guisection = _("Selection");
+
+    G_option_requires(base_rast_res_flag, base_raster_opt, NULL);
+
+    if (G_parser(argc, argv))
+        exit(EXIT_FAILURE);
+
+    int only_valid = FALSE;
+    if (only_valid_flag->answer)
+        only_valid = TRUE;
+
+    LASReaderH LAS_reader;
+
+    LAS_reader = LASReader_Create(input_opt->answer);
+    if (LAS_reader == NULL)
+        G_fatal_error(_("Unable to open file <%s>"), input_opt->answer);
+
+    Rast3d_init_defaults();
+    Rast3d_set_error_fun(Rast3d_fatal_error_noargs);
+
+    struct ReturnFilter return_filter_struct;
+    int use_return_filter =
+        return_filter_create_from_string(&return_filter_struct,
+                                         filter_opt->answer);
+    struct ClassFilter class_filter;
+    int use_class_filter =
+        class_filter_create_from_strings(&class_filter, class_opt->answers);
+
+    /* TODO: rename */
+    struct Cell_head input_region;
+    SEGMENT base_segment;
+    RASTER_MAP_TYPE base_raster_data_type;
+    int use_segment = FALSE;
+    int use_base_raster_res = FALSE;
+
+    if (base_rast_res_flag->answer)
+        use_base_raster_res = TRUE;
+    if (base_raster_opt->answer) {
+        use_segment = TRUE;
+        if (use_base_raster_res) {
+            /* read raster's actual extent and resolution */
+            Rast_get_cellhd(base_raster_opt->answer, "", &input_region);
+            /* TODO: make it only as small as the output */
+            Rast_set_input_window(&input_region);       /* we use split window */
+        }
+        else {
+            Rast_get_input_window(&input_region);
+        }
+        rast_segment_open(&base_segment, base_raster_opt->answer,
+                          &base_raster_data_type);
+    }
+
+    struct PointBinning3D binning;
+    int cache = RASTER3D_USE_CACHE_DEFAULT;
+    int type = FCELL_TYPE;
+    int max_tile_size = 32;
+
+    Rast3d_get_window(&binning.region);
+    Rast3d_get_window(&binning.flat_region);
+    binning.flat_region.depths = 1;
+    Rast3d_adjust_region(&binning.flat_region);
+
+    binning.count_raster =
+        Rast3d_open_new_opt_tile_size(count_output_opt->answer, cache,
+                                      &binning.region, type, max_tile_size);
+    if (!binning.count_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           count_output_opt->answer);
+    binning.sum_raster = Rast3d_open_new_opt_tile_size(sum_output_opt->answer,
+                                                       cache,
+                                                       &binning.region, type,
+                                                       max_tile_size);
+    if (!binning.sum_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           sum_output_opt->answer);
+    binning.mean_raster =
+        Rast3d_open_new_opt_tile_size(mean_output_opt->answer, cache,
+                                      &binning.region, type, max_tile_size);
+    if (!binning.mean_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           mean_output_opt->answer);
+    binning.count_flat_raster =
+        Rast3d_open_new_opt_tile_size("r3_in_lidar_tmp_sum_flat", cache,
+                                      &binning.flat_region, type,
+                                      max_tile_size);
+    if (!binning.count_flat_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           count_output_opt->answer);
+    binning.sum_flat_raster =
+        Rast3d_open_new_opt_tile_size("r3_in_lidar_tmp_count_flat", cache,
+                                      &binning.flat_region, type,
+                                      max_tile_size);
+    if (!binning.sum_flat_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           count_output_opt->answer);
+    binning.prop_count_raster =
+        Rast3d_open_new_opt_tile_size(prop_count_output_opt->answer, cache,
+                                      &binning.region, type, max_tile_size);
+    if (!binning.prop_count_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           prop_count_output_opt->answer);
+    binning.prop_sum_raster =
+        Rast3d_open_new_opt_tile_size(prop_sum_output_opt->answer, cache,
+                                      &binning.region, type, max_tile_size);
+    if (!binning.prop_sum_raster)
+        Rast3d_fatal_error(_("Unable to create 3D raster map <%s>"),
+                           prop_sum_output_opt->answer);
+
+    raster3d_set_value_float(binning.count_raster, &binning.region, 0);
+    raster3d_set_value_float(binning.sum_raster, &binning.region, 0);
+    raster3d_set_value_float(binning.count_flat_raster, &binning.flat_region,
+                             0);
+    raster3d_set_value_float(binning.sum_flat_raster, &binning.flat_region,
+                             0);
+
+    LASPointH LAS_point;
+    double east, north, top;
+    int row, col, depth;
+    double value;
+    double base_z;
+
+    /* TODO: use long long */
+    long unsigned inside = 0;
+    long unsigned outside = 0;
+    long unsigned in_nulls = 0; /* or outside */
+    long unsigned n_return_filtered = 0;
+    long unsigned n_class_filtered = 0;
+    long unsigned n_invalid = 0;
+
+    while ((LAS_point = LASReader_GetNextPoint(LAS_reader)) != NULL) {
+        /* We always count them and report because r.in.lidar behavior
+         * changed in between 7.0 and 7.2 from undefined (but skipping
+         * invalid points) to filtering them out only when requested. */
+        if (!LASPoint_IsValid(LAS_point)) {
+            n_invalid++;
+            if (only_valid)
+                continue;
+        }
+        if (use_return_filter) {
+            int return_n = LASPoint_GetReturnNumber(LAS_point);
+            int n_returns = LASPoint_GetNumberOfReturns(LAS_point);
+            if (return_filter_is_out(&return_filter_struct, return_n, n_returns)) {
+                n_return_filtered++;
+                continue;
+            }
+        }
+        if (use_class_filter) {
+            int point_class = (int) LASPoint_GetClassification(LAS_point);
+            if (class_filter_is_out(&class_filter, point_class)) {
+                n_class_filtered++;
+                continue;
+            }
+        }
+
+        east = LASPoint_GetX(LAS_point);
+        north = LASPoint_GetY(LAS_point);
+        top = LASPoint_GetZ(LAS_point);
+
+        if (use_segment) {
+            if (rast_segment_get_value_xy(&base_segment, &input_region,
+                                          base_raster_data_type, east, north,
+                                          &base_z)) {
+                top -= base_z;
+            }
+            else {
+                in_nulls += 1;
+                continue;
+            }
+        }
+
+        Rast3d_location2coord(&binning.region, north, east, top, &col, &row,
+                              &depth);
+        if (col >= binning.region.cols || row >= binning.region.rows ||
+            depth >= binning.region.depths || col < 0 || row < 0 ||
+            depth < 0) {
+            outside += 1;
+            continue;
+        }
+        value = LASPoint_GetIntensity(LAS_point);
+        binning_add_point(binning, row, col, depth, value);
+        inside += 1;
+    }
+
+    raster3d_divide_by_flat(binning.count_raster, binning.count_flat_raster,
+                            binning.prop_count_raster, &binning.region);
+    raster3d_divide_by_flat(binning.sum_raster, binning.sum_flat_raster,
+                            binning.prop_sum_raster, &binning.region);
+
+    raster3d_divide(binning.sum_raster, binning.count_raster,
+                    binning.mean_raster, &binning.region);
+
+    G_message("Number of points inside: %lu", inside);
+    if (use_segment)
+        G_message
+            ("Number of points outside or in base raster NULL cells: %lu",
+             outside + in_nulls);
+    else
+        G_message("Number of points outside: %lu", outside);
+    if (n_invalid && only_valid)
+        G_message(_("%lu input points were not valid and filtered out"),
+                  n_invalid);
+    if (n_return_filtered)
+        G_message(_("%lu input points were filtered out by return number"), n_return_filtered);
+    if (n_class_filtered)
+        G_message(_("%lu input points were filtered out by class number"), n_class_filtered);
+    if (n_invalid && !only_valid)
+        G_message(_("%lu input points were not valid, use -%c flag to filter"
+                    " them out"), n_invalid, only_valid_flag->key);
+
+    Rast3d_close(binning.prop_sum_raster);
+    Rast3d_close(binning.prop_count_raster);
+    Rast3d_close(binning.sum_flat_raster);      /* TODO: delete */
+    Rast3d_close(binning.count_flat_raster);    /* TODO: delete */
+    Rast3d_close(binning.mean_raster);
+    Rast3d_close(binning.sum_raster);
+    Rast3d_close(binning.count_raster);
+
+    if (use_segment)
+        Segment_close(&base_segment);
+
+    exit(EXIT_SUCCESS);
+}
diff --git a/raster3d/r3.in.lidar/r3.in.lidar.html b/raster3d/r3.in.lidar/r3.in.lidar.html
new file mode 100644
index 0000000..75fccdb
--- /dev/null
+++ b/raster3d/r3.in.lidar/r3.in.lidar.html
@@ -0,0 +1,117 @@
+<h2>DESCRIPTION</h2>
+
+<p>
+<img src="r3_in_lidar.png">
+<p>
+<em>
+    Figure: Proportional count of points per 3D cell. When 50% of all
+    points in a vertical column fall into a given 3D cell, the value
+    is 0.5. Here, the green color was assigned to 0.5, red to 1 and
+    yellow to 0. The figure shows vertical slices and green color
+    indicates high vegetation while red color indicates bare ground.
+</em>
+<!--
+0% 255:255:100
+50% green
+100% red
+-->
+
+
+<h2>NOTES</h2>
+
+<ul>
+    <li>
+        This module is highly experimental. Don't rely on its
+        functionality or interface. Please report issues on the mailing
+        list or in the bug tracker.
+    <li>
+        No projection check or reprojection is performed, make sure you
+        are using data in the right projection for your GRASS Location.
+    <li>
+        Selection of points according to return or class is not yet
+        supported.
+    <li>All outputs are currently mandatory.
+    <li>Some temporary maps are created but not cleaned up.
+    <li>
+        Expects points to have intensity (random result for related
+        outputs when they don't).
+</ul>
+
+
+<h2>EXAMPLES</h2>
+
+Set the region according to a 2D raster and adding 3D minimum
+(bottom), maximum (top) and vertical (top-bottom) resolution.
+
+<div class="code"><pre>
+g.region rast=secref b=80 t=160 tbres=5 -p3
+</pre></div>
+
+Now, <em>r3.in.lidar</em> will create the 3D raster of the size
+given by the computation region:
+
+<div class="code"><pre>
+r3.in.lidar input=points.las n=points_n sum=points_sum \
+    mean=points_mean proportional_n=points_n_prop \
+    proportional_sum=points_sum_prop
+</pre></div>
+
+<h3>Point density vertical structure reduced to the terrain</h3>
+
+Create ground raster:
+
+<div class="code"><pre>
+r.in.lidar input=points.las output=ground method=mean class_filter=2
+</pre></div>
+
+Set vertical extent of computational region to (relative) coordinates
+above ground:
+
+<div class="code"><pre>
+g.region rast=secref b=0 t=47 -p3
+</pre></div>
+
+Compute point density:
+
+<div class="code"><pre>
+r3.in.lidar input=points.las n=points_n sum=points_sum \
+    mean=points_mean proportional_n=points_n_prop \
+    proportional_sum=points_sum_prop \
+    base_raster=ground
+</pre></div>
+
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r3.in.xyz.html">r3.in.xyz</a>,
+<a href="r.in.lidar.html">r.in.lidar</a>,
+<a href="v.in.lidar.html">v.in.lidar</a>,
+<a href="r.to.rast3.html">r.to.rast3</a>,
+<a href="r3.mapcalc.html">r3.mapcalc</a>,
+<a href="g.region.html">g.region</a>
+</em>
+
+<h2>REFERENCES</h2>
+
+<ul>
+<li>
+V. Petras, A. Petrasova, J. Jeziorska, H. Mitasova (2016):
+<em>Processing UAV and lidar point clouds in GRASS GIS</em>.
+XXIII ISPRS Congress 2016
+[<a href="http://www.int-arch-photogramm-remote-sens-spatial-inf-sci.net/XLI-B7/945/2016/">ISPRS Archives</a>,
+<a href="https://www.researchgate.net/publication/304340172_Processing_UAV_and_lidar_point_clouds_in_GRASS_GIS">ResearchGate</a>]
+<li>
+<a href="http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html">
+ASPRS LAS format</a>
+<li>
+<a href="http://www.liblas.org/">LAS library</a>
+<li>
+<a href="http://test.liblas.org/doxygen/liblas_8h.htm">LAS library C API</a> documentation
+</ul>
+
+<h2>AUTHOR</h2>
+
+Vaclav Petras, <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU GeoForAll Lab</a>
+
+<p><i>Last changed: $Date: 2016-08-22 04:16:33 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/raster3d/r3.in.lidar/r3_in_lidar.png b/raster3d/r3.in.lidar/r3_in_lidar.png
new file mode 100644
index 0000000..c7e9795
Binary files /dev/null and b/raster3d/r3.in.lidar/r3_in_lidar.png differ
diff --git a/raster3d/r3.in.lidar/rast_segment.c b/raster3d/r3.in.lidar/rast_segment.c
new file mode 100644
index 0000000..c9a1190
--- /dev/null
+++ b/raster3d/r3.in.lidar/rast_segment.c
@@ -0,0 +1,86 @@
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/raster.h>
+#include <grass/segment.h>
+
+#include "rast_segment.h"
+
+static void rast_segment_load(SEGMENT * segment, int rowio,
+                              RASTER_MAP_TYPE map_type)
+{
+    void *raster_row = Rast_allocate_input_buf(map_type);
+    int row;
+
+    for (row = 0; row < Rast_input_window_rows(); row++) {
+        /* TODO: free mem */
+        Rast_get_row(rowio, raster_row, row, map_type);
+        Segment_put_row(segment, raster_row, row);
+    }
+}
+
+/* TODO: close function */
+
+void rast_segment_open(SEGMENT * segment, const char *name,
+                       RASTER_MAP_TYPE * map_type)
+{
+    /* TODO: check if not passing the mapset is OK */
+    int rowio = Rast_open_old(name, "");
+
+    *map_type = Rast_get_map_type(rowio);
+    int segment_rows = 64;
+
+    /* we use long segments because this is how the values a binned */
+    int segment_cols = Rast_input_window_cols();
+    int segments_in_memory = 4;
+
+    if (Segment_open(segment, G_tempfile(), Rast_input_window_rows(),
+                     Rast_input_window_cols(), segment_rows, segment_cols,
+                     Rast_cell_size(*map_type), segments_in_memory) != 1)
+        G_fatal_error(_("Cannot create temporary file with segments of a raster map"));
+    rast_segment_load(segment, rowio, *map_type);
+    Rast_close(rowio);          /* we won't need the raster again */
+}
+
+
+/* 0 on out of region or NULL, 1 on success */
+int rast_segment_get_value_xy(SEGMENT * base_segment,
+                              struct Cell_head *input_region,
+                              RASTER_MAP_TYPE rtype, double x, double y,
+                              double *value)
+{
+    /* Rast gives double, Segment needs off_t */
+    off_t base_row = Rast_northing_to_row(y, input_region);
+    off_t base_col = Rast_easting_to_col(x, input_region);
+
+    /* skip points which are outside the base raster
+     * (null propagation) */
+    if (base_row < 0 || base_col < 0 ||
+        base_row >= input_region->rows || base_col >= input_region->cols)
+        return 0;
+    if (rtype == DCELL_TYPE) {
+        DCELL tmp;
+
+        Segment_get(base_segment, &tmp, base_row, base_col);
+        if (Rast_is_d_null_value(&tmp))
+            return 0;
+        *value = (double)tmp;
+    }
+    else if (rtype == FCELL_TYPE) {
+        FCELL tmp;
+
+        Segment_get(base_segment, &tmp, base_row, base_col);
+        if (Rast_is_f_null_value(&tmp))
+            return 0;
+        *value = (double)tmp;
+    }
+    else {
+        CELL tmp;
+
+        Segment_get(base_segment, &tmp, base_row, base_col);
+        if (Rast_is_c_null_value(&tmp))
+            return 0;
+        *value = (double)tmp;
+    }
+    return 1;
+}
diff --git a/raster3d/r3.in.lidar/rast_segment.h b/raster3d/r3.in.lidar/rast_segment.h
new file mode 100644
index 0000000..7179d6b
--- /dev/null
+++ b/raster3d/r3.in.lidar/rast_segment.h
@@ -0,0 +1,14 @@
+#ifndef GRASS_RAST_SEGMENT_H
+#define GRASS_RAST_SEGMENT_H
+
+#include <grass/raster.h>
+#include <grass/segment.h>
+
+void rast_segment_open(SEGMENT * segment, const char *name,
+                       RASTER_MAP_TYPE * map_type);
+int rast_segment_get_value_xy(SEGMENT * base_segment,
+                              struct Cell_head *input_region,
+                              RASTER_MAP_TYPE rtype, double x, double y,
+                              double *value);
+
+#endif /* GRASS_RAST_SEGMENT_H */
diff --git a/raster3d/r3.info/main.c b/raster3d/r3.info/main.c
index fe9663c..cf4009f 100644
--- a/raster3d/r3.info/main.c
+++ b/raster3d/r3.info/main.c
@@ -458,7 +458,7 @@ int main(int argc, char *argv[])
 	        fprintf(out, "max=%f\n", dmax);
 	}
 	if (hflag->answer) {
-	    if (hist_ok) {
+	    if (hist_ok && !gflag->answer) {
 		fprintf(out, "Title:\n");
 		fprintf(out, "   %s\n", Rast_get_history(&hist, HIST_TITLE));
 		fprintf(out, "Data Source:\n");
@@ -472,6 +472,22 @@ int main(int argc, char *argv[])
 			fprintf(out, "   %s\n", Rast_history_line(&hist, i));
 		}
 	    }
+            else if (hist_ok && gflag->answer) {
+		fprintf(out, "title=");
+		fprintf(out, "\"%s\"\n", Rast_get_history(&hist, HIST_TITLE));
+		fprintf(out, "source1=");
+		fprintf(out, "\"%s\"\n", Rast_get_history(&hist, HIST_DATSRC_1));
+		fprintf(out, "source2=");
+		fprintf(out, "\"%s\"\n", Rast_get_history(&hist, HIST_DATSRC_2));
+		fprintf(out, "description=");
+		fprintf(out, "\"%s\"\n", Rast_get_history(&hist, HIST_KEYWRD));
+		if (Rast_history_length(&hist)) {
+                    fprintf(out, "comments=\"", i);
+		    for (i = 0; i < Rast_history_length(&hist); i++)
+			fprintf(out, "%s", Rast_history_line(&hist, i));
+                    fprintf(out, "\"\n");
+		}
+            }
 	    else {
 		G_fatal_error(_("Error while reading history file"));
 	    }
diff --git a/raster3d/r3.mkdspf/r3.mkdspf.html b/raster3d/r3.mkdspf/r3.mkdspf.html
index eee36c8..0aec411 100644
--- a/raster3d/r3.mkdspf/r3.mkdspf.html
+++ b/raster3d/r3.mkdspf/r3.mkdspf.html
@@ -65,4 +65,4 @@ copy them to their mapset.
 <a href="mailto:brown at gis.uiuc.edu">bbrown at gis.uiuc.edu</a>
 
 
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/raster3d/r3.neighbors/main.c b/raster3d/r3.neighbors/main.c
index a337bfa..5f537bd 100644
--- a/raster3d/r3.neighbors/main.c
+++ b/raster3d/r3.neighbors/main.c
@@ -287,6 +287,7 @@ int main(int argc, char **argv)
 	Rast3d_fatal_error(_("Unable to allocate buffer"));
 
     for (z = 0; z < nz; z++) {
+	G_percent(z, nz, 1);
 	for (y = 0; y < ny; y++) {
 	    for (x = 0; x < nx; x++) {
 		/* Gather values in moving window */
@@ -302,6 +303,7 @@ int main(int argc, char **argv)
 	    }
 	}
     }
+    G_percent(z, nz, 1);
 
     free(buff);
 
diff --git a/raster3d/r3.null/main.c b/raster3d/r3.null/main.c
index 07b43fb..4679143 100644
--- a/raster3d/r3.null/main.c
+++ b/raster3d/r3.null/main.c
@@ -102,7 +102,7 @@ modifyNull(char *name, d_Mask * maskRules, int changeNull, double newNullVal)
     if (NULL == G_find_raster3d(name, ""))
 	Rast3d_fatal_error(_("3D raster map <%s> not found"), name);
 
-    fprintf(stderr, "name %s Mapset %s \n", name, G_mapset());
+    G_debug(1, "Changing NULLs of map %s in %s", name, G_mapset());
     map = Rast3d_open_cell_old(name, G_mapset(), RASTER3D_DEFAULT_WINDOW,
 			  DCELL_TYPE, cacheSize);
 
diff --git a/raster3d/r3.out.ascii/r3.out.ascii.html b/raster3d/r3.out.ascii/r3.out.ascii.html
index 0d7e3fe..f355b48 100644
--- a/raster3d/r3.out.ascii/r3.out.ascii.html
+++ b/raster3d/r3.out.ascii/r3.out.ascii.html
@@ -192,4 +192,4 @@ levels: 2
 Roman Waupotitsch, Michael Shapiro, 
 Helena Mitasova, Bill Brown, Lubos Mitas, Jaro Hofierka, Sören Gebbert
 
-<p><i>Last changed: $Date: 2015-02-01 01:46:56 +0100 (Sun, 01 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-21 04:31:26 +0100 (Wed, 21 Jan 2015) $</i>
diff --git a/raster3d/r3.out.vtk/r3.out.vtk.html b/raster3d/r3.out.vtk/r3.out.vtk.html
index d5a4db7..b7725e6 100644
--- a/raster3d/r3.out.vtk/r3.out.vtk.html
+++ b/raster3d/r3.out.vtk/r3.out.vtk.html
@@ -173,4 +173,4 @@ paraview --data=/tmp/slovakia3d.vtk
 <h2>AUTHOR</h2>
 Sören Gebbert
 
-<p><i>Last changed: $Date: 2014-11-23 23:39:42 +0100 (Sun, 23 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-23 23:32:44 +0100 (Sun, 23 Nov 2014) $</i>
diff --git a/raster3d/r3.timestamp/r3.timestamp.html b/raster3d/r3.timestamp/r3.timestamp.html
index 986c110..712db18 100644
--- a/raster3d/r3.timestamp/r3.timestamp.html
+++ b/raster3d/r3.timestamp/r3.timestamp.html
@@ -70,4 +70,4 @@ Lockheed Martin Space Systems<br>
 based on r.timestamp by Michael Shapiro, <br>
 U.S. Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-22 15:24:03 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/raster3d/raster3dintro.html b/raster3d/raster3dintro.html
index e006275..94aa646 100644
--- a/raster3d/raster3dintro.html
+++ b/raster3d/raster3dintro.html
@@ -99,6 +99,13 @@ a 3D raster can be composed of several 2D raster maps.
 2D rasters are considered as slices in this case and
 merged into one 3D raster map (<a href="r.to.rast3.html">r.to.rast3</a>).
 
+<p>
+Import of 3D points and their statistics can be done using
+<a href="r3.in.lidar.html">r3.in.lidar</a> for LiDAR data and
+<a href="r3.in.xyz.html">r3.in.xyz</a> for CSV and other ASCII text
+formats.
+
+
 <h3>3D region settings and 3D MASK</h3>
 
 GRASS GIS 3D raster map processing is always performed in the current 3D region
diff --git a/scripts/Makefile b/scripts/Makefile
index b2bf3ca..c283ea8 100644
--- a/scripts/Makefile
+++ b/scripts/Makefile
@@ -2,6 +2,7 @@ MODULE_TOPDIR = ..
 
 SUBDIRS = \
 	d.correlate \
+	d.frame \
 	d.out.file \
 	d.to.rast \
 	d.polar \
@@ -34,7 +35,7 @@ SUBDIRS = \
 	r.colors.stddev \
 	r.fillnulls \
 	r.grow \
-	r.import \
+    r.import \
 	r.in.aster \
 	r.in.srtm \
 	r.in.wms \
@@ -74,8 +75,7 @@ SUBDIRS = \
 	v.unpack \
 	v.what.strds \
 	v.what.vect \
-	wxpyimgview \
-	v.krige
+	wxpyimgview
 
 include $(MODULE_TOPDIR)/include/Make/Dir.make
 
diff --git a/scripts/d.correlate/d.correlate.html b/scripts/d.correlate/d.correlate.html
index 37b67d0..fee9482 100644
--- a/scripts/d.correlate/d.correlate.html
+++ b/scripts/d.correlate/d.correlate.html
@@ -44,4 +44,4 @@ Michael Shapiro,
 <a href="http://www.cecer.army.mil/">U.S.Army Construction Engineering Research Laboratory</a>
 <p>Rewritten to GRASS 6 (from csh to sh) by Markus Neteler; from sh to Python by Glynn Clements
 
-<p><i>Last changed: $Date: 2015-10-27 18:41:34 +0100 (Tue, 27 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-27 18:40:48 +0100 (Tue, 27 Oct 2015) $</i>
diff --git a/scripts/d.correlate/d.correlate.py b/scripts/d.correlate/d.correlate.py
index 9a12109..6eb1c7a 100755
--- a/scripts/d.correlate/d.correlate.py
+++ b/scripts/d.correlate/d.correlate.py
@@ -29,21 +29,23 @@
 import sys
 import os
 from grass.script.utils import try_remove
-from grass.script import core as grass
+from grass.script import core as gcore
+
 
 def main():
     layers = options['map'].split(',')
 
     if len(layers) < 2:
-	grass.error(_("At least 2 maps are required"))
+        gcore.error(_("At least 2 maps are required"))
 
-    tmpfile = grass.tempfile()
+    tmpfile = gcore.tempfile()
 
     for map in layers:
-	if not grass.find_file(map, element = 'cell')['file']:
-	    grass.fatal(_("Raster map <%s> not found") % map)
+        if not gcore.find_file(map, element='cell')['file']:
+            gcore.fatal(_("Raster map <%s> not found") % map)
 
-    grass.write_command('d.text', color = 'black', size = 4, line = 1, stdin = "CORRELATION")
+    gcore.write_command('d.text', color='black', size=4, line=1,
+                        stdin="CORRELATION")
 
     os.environ['GRASS_RENDER_FILE_READ'] = 'TRUE'
 
@@ -52,53 +54,60 @@ def main():
     iloop = 0
     jloop = 0
     for iloop, i in enumerate(layers):
-	for jloop, j in enumerate(layers):
-	    if i != j and iloop <= jloop:
-		color = colors[0]
-		colors = colors[1:]
-		colors.append(color)
-		grass.write_command('d.text', color = color, size = 4, line = line, stdin = "%s %s" % (i, j))
-		line += 1
-
-		ofile = file(tmpfile, 'w')
-		grass.run_command('r.stats', flags = 'cnA', input = (i, j), stdout = ofile)
-		ofile.close()
-
-		ifile = file(tmpfile, 'r')
-		first = True
-		for l in ifile:
-		    f = l.rstrip('\r\n').split(' ')
-		    x = float(f[0])
-		    y = float(f[1])
-		    if first:
-			minx = maxx = x
-			miny = maxy = y
-			first = False
-		    if minx > x: minx = x
-		    if maxx < x: maxx = x
-		    if miny > y: miny = y
-		    if maxy < y: maxy = y
-		ifile.close()
-
-		kx = 100.0/(maxx-minx+1)
-		ky = 100.0/(maxy-miny+1)
-
-		p = grass.feed_command('d.graph', color = color)
-		ofile = p.stdin
-
-		ifile = file(tmpfile, 'r')
-		for l in ifile:
-		    f = l.rstrip('\r\n').split(' ')
-		    x = float(f[0])
-		    y = float(f[1])
-		    ofile.write("icon + 0.1 %f %f\n" % ((x-minx+1) * kx, (y-miny+1) * ky))
-		ifile.close()
-
-		ofile.close()
-		p.wait()
+        for jloop, j in enumerate(layers):
+            if i != j and iloop <= jloop:
+                color = colors[0]
+                colors = colors[1:]
+                colors.append(color)
+                gcore.write_command('d.text', color=color, size=4, line=line,
+                                    stdin="%s %s" % (i, j))
+                line += 1
+
+                ofile = file(tmpfile, 'w')
+                gcore.run_command('r.stats', flags='cnA', input=(i, j),
+                                  stdout=ofile)
+                ofile.close()
+
+                ifile = file(tmpfile, 'r')
+                first = True
+                for l in ifile:
+                    f = l.rstrip('\r\n').split(' ')
+                    x = float(f[0])
+                    y = float(f[1])
+                    if first:
+                        minx = maxx = x
+                        miny = maxy = y
+                        first = False
+                    if minx > x:
+                        minx = x
+                    if maxx < x:
+                        maxx = x
+                    if miny > y:
+                        miny = y
+                    if maxy < y:
+                        maxy = y
+                ifile.close()
+
+                kx = 100.0 / (maxx - minx + 1)
+                ky = 100.0 / (maxy - miny + 1)
+
+                p = gcore.feed_command('d.graph', color=color)
+                ofile = p.stdin
+
+                ifile = file(tmpfile, 'r')
+                for l in ifile:
+                    f = l.rstrip('\r\n').split(' ')
+                    x = float(f[0])
+                    y = float(f[1])
+                    ofile.write("icon + 0.1 %f %f\n" % ((x - minx + 1) * kx,
+                                                        (y - miny + 1) * ky))
+                ifile.close()
+
+                ofile.close()
+                p.wait()
 
     try_remove(tmpfile)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     main()
diff --git a/scripts/d.frame/Makefile b/scripts/d.frame/Makefile
new file mode 100644
index 0000000..a730ddb
--- /dev/null
+++ b/scripts/d.frame/Makefile
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = d.frame
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script
diff --git a/scripts/d.frame/d.frame.html b/scripts/d.frame/d.frame.html
new file mode 100644
index 0000000..02505af
--- /dev/null
+++ b/scripts/d.frame/d.frame.html
@@ -0,0 +1,95 @@
+<h2>DESCRIPTION</h2>
+
+<em>d.frame</em> manages display frames on the current user's graphics
+monitor. Graphics are displayed in rectangular frames on whatever
+graphics monitor the user is currently directing GRASS display output
+to (defined by <em><a href="d.mon.html">d.mon</a></em> module). These
+frames are created and managed with this module.
+
+<p>
+Note that GRASS frame contents <em>are not</em> retained when one
+frame covers another. You cannot shuffle frames from top to bottom and
+then back again. They simply define rectangular areas on the screen
+where subsequent drawing will occur.
+
+<h2>NOTES</h2>
+
+The coordinates for the <b>at</b> option are stated in the form
+<em>top,bottom,left,right</em> values are in percent. The upper-left
+corner of the graphics monitor always is at location 0,0 while the
+monitor's lower-right corner is always at 100,100.
+
+<p>
+If the user has created multiple display frames that overlap one another, 
+whatever the user displays in the active frame will overwrite 
+those portions of the underlying frame where these frames overlap. 
+
+<h2>EXAMPLE</h2>
+
+<div class="code"><pre>
+# start a new graphics monitor, the data will be rendered to
+# /tmp/map.png image output file of size 600x540px
+d.mon cairo out=/tmp/map.png width=600 height=540 --o
+
+# set up region
+g.region raster=elevation
+
+# remove all frames and erase the current graphics monitor
+d.frame -e
+
+# create a first frame and display 'landuse96_28m' raster map including text label
+d.frame -c frame=first at=0,50,0,50
+d.rast landuse96_28m
+d.text text='Landuse' bgcolor=220:220:220 color=black size=6
+
+# create a second frame and display 'streams' vector map
+d.frame -c frame=second at=0,50,50,100
+d.vect streams color=blue
+d.text text='Streams' bgcolor=220:220:220 color=black size=6
+
+# create a third frame and display 'elevation' raster map including text label and scale
+d.frame -c frame=third at=50,100,0,50
+d.rast elevation
+d.text text='Elevation' bgcolor=220:220:220 color=black size=6
+d.barscale at=0,10 style=line bgcolor=none
+
+# create a fourth frame and display RGB composition map including text label
+d.frame -c frame=fourth at=50,100,50,100
+d.rgb red=lsat7_2002_30 green=lsat7_2002_20 blue=lsat7_2002_10
+d.text text='RGB true colors' bgcolor=220:220:220 color=black size=6
+
+# release the current graphics monitor
+d.mon -r
+</pre></div>
+
+<center>
+  <img src="d_frame.png" alt="d.frame example"><br>
+  <em>Figure: d.frame example</em>
+</center>
+
+<h2>SEE ALSO</h2>
+
+<em>
+  <a href="d.erase.html">d.erase</a>,
+  <a href="d.info.html">d.info</a>,
+  <a href="d.mon.html">d.mon</a>,
+  <a href="d.redraw.html">d.redraw</a>
+</em>
+
+<p>
+  <a href="variables.html#list-of-selected-grass-environment-variables-for-rendering">GRASS environment variables for
+  rendering</a> (GRASS_RENDER_FRAME)
+  
+<h2>AUTHOR</h2>
+
+Martin Landa, Czech Technical University in Prague, Czech Republic
+
+<p>
+Based on <em>d.frame</em> from GRASS 6:<br>
+James Westervelt, U.S. Army Construction Engineering Research
+Laboratory<br>
+Michael Shapiro, U.S. Army Construction Engineering 
+Research Laboratory
+
+<p>
+<i>Last changed: $Date: 2015-02-03 17:55:49 +0100 (Tue, 03 Feb 2015) $</i>
diff --git a/scripts/d.frame/d.frame.py b/scripts/d.frame/d.frame.py
new file mode 100755
index 0000000..012af55
--- /dev/null
+++ b/scripts/d.frame/d.frame.py
@@ -0,0 +1,280 @@
+#!/usr/bin/env python
+
+############################################################################
+#
+# MODULE:       d.frame
+# AUTHOR(S):    Martin Landa <landa.martin gmail.com>
+#               Based on d.frame from GRASS 6
+# PURPOSE:      Manages display frames on the user's graphics monitor
+# COPYRIGHT:    (C) 2014-2015 by Martin Landa, and the GRASS Development Team
+#
+#  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 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.
+#
+############################################################################
+#%module
+#% description: Manages display frames on the user's graphics monitor.
+#% keyword: display
+#% keyword: graphics
+#% keyword: monitors
+#% keyword: frame
+#% overwrite: yes
+#%end
+#%flag
+#% key: c
+#% description: Create a new frame if doesn't exist and select
+#%end
+#%flag
+#% key: e
+#% description: Remove all frames, erase the screen and exit
+#% suppress_required: yes
+#%end
+#%flag
+#% key: p
+#% description: Print name of current frame and exit
+#% suppress_required: yes
+#%end
+#%flag
+#% key: a
+#% description: Print names of all frames including 'at' position and exit
+#% suppress_required: yes
+#%end
+#%option
+#% key: frame
+#% type: string
+#% required: yes
+#% multiple: no
+#% key_desc: name
+#% description: Frame to be selected or created (if -c flag is given)
+#%end
+#%option
+#% key: at
+#% type: double
+#% required: no
+#% multiple: no
+#% key_desc: bottom,top,left,right
+#% label: Screen coordinates in percent where to place the frame (0,0 is lower-left)
+#% options: 0-100
+#% description: Implies only when -c or --overwrite flag is given
+#%end
+
+import os
+import sys
+
+from grass.script.core import parser, read_command, fatal, debug, run_command, gisenv, warning, parse_command
+
+# check if monitor is running
+
+
+def check_monitor():
+    return read_command('d.mon', flags='p', quiet=True).strip()
+
+# read monitor file and return list of lines
+# TODO: replace by d.info (see #2577)
+
+
+def read_monitor_file(monitor, ftype='env'):
+    mfile = check_monitor_file(monitor, ftype)
+    try:
+        fd = open(mfile, 'r')
+    except IOError as e:
+        fatal(_("Unable to get monitor info. %s"), e)
+
+    lines = []
+    for line in fd.readlines():
+        lines.append(line)
+
+    fd.close()
+
+    return lines
+
+# check if monitor file exists
+
+
+def check_monitor_file(monitor, ftype='env'):
+    mfile = parse_command('d.mon', flags='g').get(ftype, None)
+    if mfile is None or not os.path.isfile(mfile):
+        fatal(_("Unable to get monitor info (no %s found)") % var)
+
+    return mfile
+
+# write new monitor file
+
+
+def write_monitor_file(monitor, lines, ftype='env'):
+    mfile = check_monitor_file(monitor, ftype)
+
+    try:
+        fd = open(mfile, 'w')
+    except IOError as e:
+        fatal(_("Unable to get monitor info. %s"), e)
+
+    fd.writelines(lines)
+    fd.close()
+
+# remove all frames and erase screen
+
+
+def erase(monitor):
+    # remove frames
+    lines = []
+    for line in read_monitor_file(monitor):
+        if 'FRAME' not in line:
+            lines.append(line)
+
+    write_monitor_file(monitor, lines)
+
+    # erase screen
+    run_command('d.erase')
+
+# find frame for given monitor
+
+
+def find_frame(monitor, frame):
+    for line in read_monitor_file(monitor):
+        if 'FRAME' in line:
+            if get_frame_name(line) == frame:
+                return True
+
+    return False
+
+# print frames name(s) to stdout
+
+
+def print_frames(monitor, current_only=False, full=False):
+    for line in read_monitor_file(monitor):
+        if 'FRAME' not in line:
+            continue
+        if current_only and line.startswith('#'):
+            continue
+        sys.stdout.write(get_frame_name(line))
+        if full:
+            sys.stdout.write(':' + line.split('=', 1)[1].rsplit('#', 1)[0])
+        sys.stdout.write('\n')
+
+# get frame name from line
+
+
+def get_frame_name(line):
+    return line.rstrip('\n').rsplit('#', 1)[1].strip(' ')
+
+# calculate position of the frame in percent
+
+
+def calculate_frame(frame, at, width, height):
+    try:
+        b, t, l, r = list(map(float, at.split(',')))
+    except:
+        fatal(_("Invalid frame position: %s") % at)
+
+    top = height - (t / 100. * height)
+    bottom = height - (b / 100. * height)
+    left = l / 100. * width
+    right = r / 100. * width
+
+    return 'GRASS_RENDER_FRAME=%d,%d,%d,%d # %s%s' % \
+        (top, bottom, left, right, frame, '\n')
+
+# create new frame
+
+
+def create_frame(monitor, frame, at, overwrite=False):
+    lines = read_monitor_file(monitor)
+    # get width and height of the monitor
+    width = height = -1
+    for line in lines:
+        try:
+            if 'WIDTH' in line:
+                width = int(line.split('=', 1)[1].rsplit(' ', 1)[0])
+            elif 'HEIGHT' in line:
+                height = int(line.split('=', 1)[1].rsplit(' ', 1)[0])
+        except:
+            pass
+
+    if width < 0 or height < 0:
+        fatal(_("Invalid monitor size: %dx%d") % (width, height))
+
+    if not overwrite:
+        lines.append(calculate_frame(frame, at, width, height))
+    else:
+        for idx in range(len(lines)):
+            line = lines[idx]
+            if 'FRAME' not in line:
+                continue
+            if get_frame_name(line) == frame:
+                lines[idx] = calculate_frame(frame, at, width, height)
+
+    write_monitor_file(monitor, lines)
+
+# select existing frame
+
+
+def select_frame(monitor, frame):
+    lines = read_monitor_file(monitor)
+    for idx in range(len(lines)):
+        line = lines[idx]
+        if 'FRAME' not in line:
+            continue
+        if get_frame_name(line) == frame:
+            if line.startswith('#'):
+                lines[idx] = line.lstrip('# ')  # un-comment line
+        elif not line.startswith('#'):
+            lines[idx] = '# ' + line  # comment-line
+
+    write_monitor_file(monitor, lines)
+
+
+def main():
+    # get currently selected monitor
+    monitor = check_monitor()
+    if not monitor:
+        fatal(_("No graphics device selected. Use d.mon to select graphics device."))
+
+    if flags['e']:
+        # remove frames and erase monitor and exit
+        erase(monitor)
+        return
+
+    if flags['p']:
+        # print current frame and exit
+        print_frames(monitor, current_only=True)
+        return
+
+    if flags['a']:
+        # print all frames including their position and exit
+        print_frames(monitor, current_only=False, full=True)
+        return
+
+    found = find_frame(monitor, options['frame'])
+    if not found:
+        if not flags['c']:
+            fatal(_("Frame <%s> doesn't exist, exiting. "
+                    "To create a new frame use '-c' flag.") % options['frame'])
+        else:
+            if not options['at']:
+                fatal(_("Required parameter <%s> not set") % "at")
+            # create new frame if not exists
+            create_frame(monitor, options['frame'], options['at'])
+    else:
+        if os.getenv('GRASS_OVERWRITE', '0') == '1':
+            warning(_("Frame <%s> already exists and will be overwritten") % options['frame'])
+            create_frame(monitor, options['frame'], options['at'], overwrite=True)
+        else:
+            if options['at']:
+                warning(
+                    _("Frame <%s> already found. An existing frame can be overwritten by '%s' flag.") %
+                    (options['frame'], "--overwrite"))
+
+    # select givenframe
+    select_frame(monitor, options['frame'])
+
+if __name__ == "__main__":
+    options, flags = parser()
+    sys.exit(main())
diff --git a/scripts/d.frame/d_frame.png b/scripts/d.frame/d_frame.png
new file mode 100644
index 0000000..8096f99
Binary files /dev/null and b/scripts/d.frame/d_frame.png differ
diff --git a/scripts/d.out.file/d.out.file.html b/scripts/d.out.file/d.out.file.html
index 869e45f..27b0384 100644
--- a/scripts/d.out.file/d.out.file.html
+++ b/scripts/d.out.file/d.out.file.html
@@ -3,7 +3,7 @@
 <em>d.out.file</em> saves the content of the currently selected
 monitor into graphic file. The active monitor can be selected
 with <em>d.mon</em>. <em>d.out.file</em> can be run from GUI
-command console, too.
+Console tab, too.
 
 <h2>SEE ALSO</h2>
  
@@ -19,4 +19,4 @@ command console, too.
 
 Anna Petrasova, <a href="http://gis.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>
 
-<p><i>Last changed: $Date: 2014-03-26 16:49:20 +0100 (Wed, 26 Mar 2014) $</i>
+<p><i>Last changed: $Date: 2016-02-19 02:42:11 +0100 (Fri, 19 Feb 2016) $</i>
diff --git a/scripts/d.out.file/d.out.file.py b/scripts/d.out.file/d.out.file.py
index 90ed59f..111cf51 100644
--- a/scripts/d.out.file/d.out.file.py
+++ b/scripts/d.out.file/d.out.file.py
@@ -5,7 +5,7 @@
 # MODULE: d.out.file
 # AUTHOR(S): Anna Petrasova <kratochanna gmail.com>
 # PURPOSE:	Script for exporting content of monitor to graphic file
-# COPYRIGHT: (C) 2014 by the GRASS Development Team
+# COPYRIGHT: (C) 2014-2015 by the GRASS Development Team
 #
 #		This program is free software under the GNU General
 #		Public License (>=v2). Read the file COPYING that
@@ -45,9 +45,9 @@ def main():
     options, flags = gcore.parser()
     gisenv = gcore.gisenv()
     if 'MONITOR' in gisenv:
-        cmd_file = gisenv['MONITOR_{monitor}_CMDFILE'.format(monitor=gisenv['MONITOR'].upper())]
+        cmd_file = gcore.parse_command('d.mon', flags='g')['cmd']
         dout_cmd = 'd.out.file'
-        for param, val in options.iteritems():
+        for param, val in options.items():
             if val:
                 dout_cmd += " {param}={val}".format(param=param, val=val)
         with open(cmd_file, "a") as file_:
diff --git a/scripts/d.polar/d.polar.html b/scripts/d.polar/d.polar.html
index d9d19a6..5ebc2f0 100644
--- a/scripts/d.polar/d.polar.html
+++ b/scripts/d.polar/d.polar.html
@@ -72,4 +72,4 @@ Markus Neteler, ITC-irst, Italy<br>
 Bruno Caprile, ITC-irst, Italy<br>
 Hamish Bowman, Otago University, New Zealand<br>
 
-<p><i>Last changed: $Date: 2015-09-05 17:56:17 +0200 (Sat, 05 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-05 17:57:08 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/d.polar/d.polar.py b/scripts/d.polar/d.polar.py
index 41a8d68..ca93a17 100755
--- a/scripts/d.polar/d.polar.py
+++ b/scripts/d.polar/d.polar.py
@@ -42,7 +42,6 @@
 #% description: Plot using Xgraph
 #%end
 
-import sys
 import os
 import string
 import types
@@ -51,34 +50,38 @@ import atexit
 import glob
 import shutil
 from grass.script.utils import try_remove, basename
-from grass.script import core as grass
+from grass.script import core as gcore
+
 
 def cleanup():
     try_remove(tmp)
     for f in glob.glob(tmp + '_*'):
-	try_remove(f)
+        try_remove(f)
+
 
 def plot_xgraph():
     newline = ['\n']
-    p = grass.Popen(['xgraph'], stdin = grass.PIPE)
+    p = gcore.Popen(['xgraph'], stdin=gcore.PIPE)
     for point in sine_cosine_replic + newline + outercircle + newline + vector:
-	if isinstance(point, types.TupleType):
-	    p.stdin.write("%f %f\n" % point)
-	else:
-	    p.stdin.write(point + '\n')
+        if isinstance(point, tuple):
+            p.stdin.write("%f %f\n" % point)
+        else:
+            p.stdin.write(point + '\n')
     p.stdin.close()
     p.wait()
 
+
 def plot_dgraph():
-    # use d.info and d.frame to create a square frame in the center of the window.
-    s = grass.read_command('d.info', flags = 'd')
+    # use d.info and d.frame to create a square frame in the center of the
+    # window.
+    s = gcore.read_command('d.info', flags='d')
     f = s.split()
-    frame_width = float(f[1])
-    frame_height = float(f[2])
+    frame_width = float(f[2])
+    frame_height = float(f[3])
 
     # take shorter side as length of frame side
     min_side = min(frame_width, frame_height)
-    dx = (frame_width  - min_side) / 2
+    dx = (frame_width - min_side) / 2
     dy = (frame_height - min_side) / 2
 
     fl = dx
@@ -94,32 +97,32 @@ def plot_dgraph():
     scaleval = ring * totalvalidnumber / totalnumber
 
     sine_cosine_replic_normalized = [
-	((scaleval * p[0]/maxradius + 1)*50,
-	 (scaleval * p[1]/maxradius + 1)*50)
-	for p in sine_cosine_replic
-	if isinstance(p, types.TupleType)]
+        ((scaleval * p[0] / maxradius + 1) * 50,
+         (scaleval * p[1] / maxradius + 1) * 50)
+        for p in sine_cosine_replic if isinstance(p, tuple)]
 
     # create circle
-    circle = [(50*(1 + ring * math.sin(math.radians(i))),
-	       50*(1 + ring * math.cos(math.radians(i))))
-	      for i in range(0, 361)]
+    circle = [(50 * (1 + ring * math.sin(math.radians(i))),
+               50 * (1 + ring * math.cos(math.radians(i))))
+              for i in range(0, 361)]
 
     # trend vector
-    vect = [((scaleval * p[0]/maxradius + 1)*50,
-	     (scaleval * p[1]/maxradius + 1)*50)
-	    for p in vector[1:]]
+    vect = [((scaleval * p[0] / maxradius + 1) * 50,
+             (scaleval * p[1] / maxradius + 1) * 50)
+            for p in vector[1:]]
 
     # Possible TODOs:
     # To fill data area with color, use BOTH d.graph's polyline and polygon commands.
-    #  Using polygon alone gives a jagged boundary due to sampling technique (not a bug).
+    # Using polygon alone gives a jagged boundary due to sampling technique
+    # (not a bug).
 
     # plot it!
     lines = [
-	# draw circle
-	#   mandatory when drawing proportional to non-square frame
-	"color 180:255:180",
-	"polyline"] + circle + [
-	# draw axes
+        # draw circle
+        #   mandatory when drawing proportional to non-square frame
+        "color 180:255:180",
+        "polyline"] + circle + [
+        # draw axes
         "color 180:180:180",
         "width 0",
         "move 0 50",
@@ -127,16 +130,16 @@ def plot_dgraph():
         "move 50 0",
         "draw 50 100",
 
-	# draw the goods
+        # draw the goods
         "color red",
         "width 0",
         "polyline"] + sine_cosine_replic_normalized + [
-	# draw vector
+        # draw vector
         "color blue",
         "width 3",
         "polyline"] + vect + [
 
-	# draw compass text
+        # draw compass text
         "color black",
         "width 2",
         "size 10 10",
@@ -149,7 +152,7 @@ def plot_dgraph():
         "move 97 51",
         "text E",
 
-	# draw legend text
+        # draw legend text
         "width 0",
         "size 10",
         "color 0:180:0",
@@ -161,20 +164,21 @@ def plot_dgraph():
         "color blue",
         "move 0.5 90.5",
         "text Avg. direction"
-	]
+    ]
 
-    p = grass.feed_command('d.graph', env = tenv)
+    p = gcore.feed_command('d.graph', env=tenv)
     for point in lines:
-	if isinstance(point, types.TupleType):
-	    p.stdin.write("%f %f\n" % point)
-	else:
-	    p.stdin.write(point + '\n')
+        if isinstance(point, tuple):
+            p.stdin.write("%f %f\n" % point)
+        else:
+            p.stdin.write(point + '\n')
     p.stdin.close()
     p.wait()
 
+
 def plot_eps(psout):
     # EPS output (by M.Neteler and Bruno Caprile, ITC-irst)
-    grass.message(_("Generating %s ...") % psout)
+    gcore.message(_("Generating %s ...") % psout)
 
     outerradius = maxradius
     epsscale = 0.1
@@ -189,24 +193,24 @@ def plot_eps(psout):
     diagramfontsize = halfframe / 20
     halfframe_2 = halfframe * 2
 
-    averagedirectioncolor = 1 #(blue)
-    diagramcolor = 4 #(red)
-    circlecolor = 2 #(green)
-    axescolor = 0 #(black)
+    averagedirectioncolor = 1  # (blue)
+    diagramcolor = 4  # (red)
+    circlecolor = 2  # (green)
+    axescolor = 0  # (black)
 
     northjustification = 2
     eastjustification = 6
     southjustification = 8
     westjustification = 8
 
-    northxshift = 1.02 * halfframe 
-    northyshift = 1.98 * halfframe 
-    eastxshift  = 1.98 * halfframe  
-    eastyshift  = 1.02 * halfframe  
-    southxshift = 1.02 * halfframe 
-    southyshift = 0.02 * halfframe 
-    westxshift  = 0.01 * halfframe  
-    westyshift  = 1.02 * halfframe  
+    northxshift = 1.02 * halfframe
+    northyshift = 1.98 * halfframe
+    eastxshift = 1.98 * halfframe
+    eastyshift = 1.02 * halfframe
+    southxshift = 1.02 * halfframe
+    southyshift = 0.02 * halfframe
+    westxshift = 0.01 * halfframe
+    westyshift = 1.02 * halfframe
 
     alldatastring = "all data (null included)"
     realdatastring = "real data angles"
@@ -220,7 +224,11 @@ def plot_eps(psout):
     ##########
     outf = file(psout, 'w')
 
-    prolog = os.path.join(os.environ['GISBASE'], 'etc', 'd.polar', 'ps_defs.eps')
+    prolog = os.path.join(
+        os.environ['GISBASE'],
+        'etc',
+        'd.polar',
+        'ps_defs.eps')
     inf = file(prolog)
     shutil.copyfileobj(inf, outf)
     inf.close()
@@ -254,20 +262,24 @@ newpath
                                         %% first point moveto, then lineto
 """)
     s = t.substitute(
-	AXESLINEWIDTH = axeslinewidth,
-	DIAGRAMFONTSIZE = diagramfontsize,
-	DIAGRAMLINEWIDTH = diagramlinewidth,
-	EPSSCALE = epsscale,
-	HALFFRAME = halfframe,
-	HALFFRAME_2 = halfframe_2
-	)
+        AXESLINEWIDTH=axeslinewidth,
+        DIAGRAMFONTSIZE=diagramfontsize,
+        DIAGRAMLINEWIDTH=diagramlinewidth,
+        EPSSCALE=epsscale,
+        HALFFRAME=halfframe,
+        HALFFRAME_2=halfframe_2
+    )
     outf.write(s)
 
     sublength = len(outercircle) - 2
     (x, y) = outercircle[1]
-    outf.write("%.2f %.2f moveto\n" % (x * scale + halfframe, y * scale + halfframe))
+    outf.write(
+        "%.2f %.2f moveto\n" %
+        (x * scale + halfframe, y * scale + halfframe))
     for x, y in outercircle[2:]:
-        outf.write("%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe))
+        outf.write(
+            "%.2f %.2f lineto\n" %
+            (x * scale + halfframe, y * scale + halfframe))
 
     t = string.Template("""
 stroke
@@ -297,29 +309,33 @@ newpath
                                         %% first point moveto, then lineto
 """)
     s = t.substitute(
-	AXESFONTSIZE = axesfontsize,
-	DIAGRAMFONTSIZE = diagramfontsize,
-	DIAGRAMLINEWIDTH = diagramlinewidth,
-	EASTJUSTIFICATION = eastjustification,
-	EASTXSHIFT = eastxshift,
-	EASTYSHIFT = eastyshift,
-	NORTHJUSTIFICATION = northjustification,
-	NORTHXSHIFT = northxshift,
-	NORTHYSHIFT = northyshift,
-	SOUTHJUSTIFICATION = southjustification,
-	SOUTHXSHIFT = southxshift,
-	SOUTHYSHIFT = southyshift,
-	WESTJUSTIFICATION = westjustification,
-	WESTXSHIFT = westxshift,
-	WESTYSHIFT = westyshift
-	)
+        AXESFONTSIZE=axesfontsize,
+        DIAGRAMFONTSIZE=diagramfontsize,
+        DIAGRAMLINEWIDTH=diagramlinewidth,
+        EASTJUSTIFICATION=eastjustification,
+        EASTXSHIFT=eastxshift,
+        EASTYSHIFT=eastyshift,
+        NORTHJUSTIFICATION=northjustification,
+        NORTHXSHIFT=northxshift,
+        NORTHYSHIFT=northyshift,
+        SOUTHJUSTIFICATION=southjustification,
+        SOUTHXSHIFT=southxshift,
+        SOUTHYSHIFT=southyshift,
+        WESTJUSTIFICATION=westjustification,
+        WESTXSHIFT=westxshift,
+        WESTYSHIFT=westyshift
+    )
     outf.write(s)
 
     sublength = len(sine_cosine_replic) - 2
     (x, y) = sine_cosine_replic[1]
-    outf.write("%.2f %.2f moveto\n" % (x * scale + halfframe, y * scale + halfframe))
+    outf.write(
+        "%.2f %.2f moveto\n" %
+        (x * scale + halfframe, y * scale + halfframe))
     for x, y in sine_cosine_replic[2:]:
-        outf.write("%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe))
+        outf.write(
+            "%.2f %.2f lineto\n" %
+            (x * scale + halfframe, y * scale + halfframe))
 
     t = string.Template("""
 stroke
@@ -334,14 +350,18 @@ newpath
                                         %% coordinates of rescaled, translated average direction follow
                                         %% first point moveto, second lineto
 """)
-    s = t.substitute(DIAGRAMLINEWIDTH = diagramlinewidth)
+    s = t.substitute(DIAGRAMLINEWIDTH=diagramlinewidth)
     outf.write(s)
 
     sublength = len(vector) - 2
     (x, y) = vector[1]
-    outf.write("%.2f %.2f moveto\n" % (x * scale + halfframe, y * scale + halfframe))
+    outf.write(
+        "%.2f %.2f moveto\n" %
+        (x * scale + halfframe, y * scale + halfframe))
     for x, y in vector[2:]:
-        outf.write("%.2f %.2f lineto\n" % (x * scale + halfframe, y * scale + halfframe))
+        outf.write(
+            "%.2f %.2f lineto\n" %
+            (x * scale + halfframe, y * scale + halfframe))
 
     t = string.Template("""
 stroke
@@ -363,19 +383,20 @@ col1                                    %% colAVERAGE-DIRECTION-COLOR
 ($AVERAGEDIRECTIONSTRING) $LEGENDSX $AVERAGEDIRECTIONLEGENDY 4 just-string
 """)
     s = t.substitute(
-	ALLDATALEGENDY = alldatalegendy,
-	ALLDATASTRING = alldatastring,
-	AVERAGEDIRECTIONLEGENDY = averagedirectionlegendy,
-	AVERAGEDIRECTIONSTRING = averagedirectionstring,
-	LEGENDSX = legendsx,
-	REALDATALEGENDY = realdatalegendy,
-	REALDATASTRING = realdatastring
-	)
+        ALLDATALEGENDY=alldatalegendy,
+        ALLDATASTRING=alldatastring,
+        AVERAGEDIRECTIONLEGENDY=averagedirectionlegendy,
+        AVERAGEDIRECTIONSTRING=averagedirectionstring,
+        LEGENDSX=legendsx,
+        REALDATALEGENDY=realdatalegendy,
+        REALDATASTRING=realdatastring
+    )
     outf.write(s)
 
     outf.close()
 
-    grass.message(_("Done."))
+    gcore.message(_("Done."))
+
 
 def main():
     global tmp
@@ -387,31 +408,33 @@ def main():
     eps = options['output']
     xgraph = flags['x']
 
-    tmp = grass.tempfile()
+    tmp = gcore.tempfile()
 
     if eps and xgraph:
-	grass.fatal(_("Please select only one output method"))
+        gcore.fatal(_("Please select only one output method"))
 
-    #### check if we have xgraph (if no EPS output requested)
-    if xgraph and not grass.find_program('xgraph'):
-	grass.fatal(_("xgraph required, please install first (www.xgraph.org)"))
+    # check if we have xgraph (if no EPS output requested)
+    if xgraph and not gcore.find_program('xgraph'):
+        gcore.fatal(
+            _("xgraph required, please install first (www.xgraph.org)"))
 
     #################################
     # this file contains everthing:
     rawfile = tmp + "_raw"
     rawf = file(rawfile, 'w')
-    grass.run_command('r.stats', flags = '1', input = map, stdout = rawf)
+    gcore.run_command('r.stats', flags='1', input=map, stdout=rawf)
     rawf.close()
 
     rawf = file(rawfile)
     totalnumber = 0
     for line in rawf:
-	totalnumber += 1
+        totalnumber += 1
     rawf.close()
 
-    grass.message(_("Calculating statistics for polar diagram... (be patient)"))
+    gcore.message(
+        _("Calculating statistics for polar diagram... (be patient)"))
 
-    #wipe out NULL data and undef data if defined by user
+    # wipe out NULL data and undef data if defined by user
     # - generate degree binned to integer, eliminate NO DATA (NULL):
     # change 360 to 0 to close polar diagram:
     rawf = file(rawfile)
@@ -420,26 +443,26 @@ def main():
     sumsin = 0
     freq = {}
     for line in rawf:
-	line = line.rstrip('\r\n')
-	if line in ['*', undef]:
-	    continue
-	nvals += 1
-	x = float(line)
-	rx = math.radians(x)
-	sumcos += math.cos(rx)
-	sumsin += math.sin(rx)
-	ix = round(x)
-	if ix == 360:
-	    ix = 0
-	if ix in freq:
-	    freq[ix] += 1
-	else:
-	    freq[ix] = 1
+        line = line.rstrip('\r\n')
+        if line in ['*', undef]:
+            continue
+        nvals += 1
+        x = float(line)
+        rx = math.radians(x)
+        sumcos += math.cos(rx)
+        sumsin += math.sin(rx)
+        ix = round(x)
+        if ix == 360:
+            ix = 0
+        if ix in freq:
+            freq[ix] += 1
+        else:
+            freq[ix] = 1
     rawf.close()
 
     totalvalidnumber = nvals
     if totalvalidnumber == 0:
-	grass.fatal(_("No data pixel found"))
+        gcore.fatal(_("No data pixel found"))
 
     #################################
     # unit vector on raw data converted to radians without no data:
@@ -448,10 +471,8 @@ def main():
 
     #################################
     # how many are there?:
+    occurrences = sorted([(math.radians(x), freq[x]) for x in freq])
 
-    occurrences = [(math.radians(x), freq[x]) for x in freq]
-    occurrences.sort()
-    
     # find the maximum value
     maxradius = max([f for a, f in occurrences])
 
@@ -461,14 +482,14 @@ def main():
     sine_cosine_replic = ['"Real data angles'] + sine_cosine + sine_cosine[0:1]
 
     if eps or xgraph:
-	outercircle = []
-	outercircle.append('"All Data incl. NULLs')
-	scale = 1.0 * totalnumber / totalvalidnumber * maxradius
-	for i in range(0, 361):
-	    a = math.radians(i)
-	    x = math.cos(a) * scale
-	    y = math.sin(a) * scale
-	    outercircle.append((x, y))
+        outercircle = []
+        outercircle.append('"All Data incl. NULLs')
+        scale = 1.0 * totalnumber / totalvalidnumber * maxradius
+        for i in range(0, 361):
+            a = math.radians(i)
+            x = math.cos(a) * scale
+            y = math.sin(a) * scale
+            outercircle.append((x, y))
 
     # fix vector length to become visible (x? of $MAXRADIUS):
     vector = []
@@ -481,19 +502,28 @@ def main():
     # Now output:
 
     if eps:
-	psout = basename(eps, 'eps') + '.eps'
-	plot_eps(psout)
+        psout = basename(eps, 'eps') + '.eps'
+        plot_eps(psout)
     elif xgraph:
-	plot_xgraph()
+        plot_xgraph()
     else:
-	plot_dgraph()
-
-    grass.message(_("Average vector:"))
-    grass.message(_("direction: %.1f degrees CCW from East") % math.degrees(math.atan2(unitvector[1], unitvector[0])))
-    grass.message(_("magnitude: %.1f percent of fullscale") % (100 * math.hypot(unitvector[0], unitvector[1])))
+        plot_dgraph()
+
+    gcore.message(_("Average vector:"))
+    gcore.message(
+        _("direction: %.1f degrees CCW from East") %
+        math.degrees(
+            math.atan2(
+                unitvector[1],
+                unitvector[0])))
+    gcore.message(
+        _("magnitude: %.1f percent of fullscale") %
+        (100 *
+         math.hypot(
+             unitvector[0],
+             unitvector[1])))
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     atexit.register(cleanup)
     main()
-
diff --git a/scripts/d.rast.edit/d.rast.edit.py b/scripts/d.rast.edit/d.rast.edit.py
index 5a11b31..1fcc4b2 100755
--- a/scripts/d.rast.edit/d.rast.edit.py
+++ b/scripts/d.rast.edit/d.rast.edit.py
@@ -16,7 +16,7 @@
 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 #  GNU General Public License for more details.
 #
-#############################################################################/
+# /
 
 #%module
 #% description: Edits cell values in a raster map.
@@ -81,15 +81,15 @@ import grass.script as grass
 
 try:
     import wxversion
-    wxversion.select(['3.0', '2.8','2.6'])
+    wxversion.select(['3.0', '2.8', '2.6'])
     import wx
 except Exception:
     # ensure that --help, --interface-description etc work even without wx
     if __name__ == "__main__":
-	if len(sys.argv) == 2:
-	    arg = sys.argv[1]
-	    if arg[0:2] == '--' or arg in ["help", "-help"]:
-		grass.parser()
+        if len(sys.argv) == 2:
+            arg = sys.argv[1]
+            if arg[0:2] == '--' or arg in ["help", "-help"]:
+                grass.parser()
     # Either we didn't call g.parser, or it returned
     # At this point, there's nothing to be done except re-raise the exception
     raise
@@ -97,609 +97,637 @@ except Exception:
 wind_keys = {
     'north': ('n', float),
     'south': ('s', float),
-    'east':  ('e', float),
-    'west':  ('w', float),
+    'east': ('e', float),
+    'west': ('w', float),
     'nsres': ('nsres', float),
     'ewres': ('ewres', float),
-    'rows':  ('rows', int),
-    'cols':  ('cols', int),
-    }
+    'rows': ('rows', int),
+    'cols': ('cols', int),
+}
 
 gray12_bits = '\x00\x00\x22\x22\x00\x00\x88\x88\x00\x00\x22\x22\x00\x00\x88\x88\x00\x00\x22\x22\x00\x00\x88\x88\x00\x00\x22\x22\x00\x00\x88\x88'
 
+
 def run(cmd, **kwargs):
-    grass.run_command(cmd, quiet = True, **kwargs)
+    grass.run_command(cmd, quiet=True, **kwargs)
+
 
 class OverviewCanvas(wx.ScrolledWindow):
+
     def __init__(self, app, parent):
-	wx.ScrolledWindow.__init__(self, parent)
-	self.app = app
+        wx.ScrolledWindow.__init__(self, parent)
+        self.app = app
 
-	self.width = app.total['cols']
-	self.height = app.total['rows']
+        self.width = app.total['cols']
+        self.height = app.total['rows']
 
-	self.SetVirtualSize((self.width, self.height))
-	self.SetScrollRate(1, 1)
+        self.SetVirtualSize((self.width, self.height))
+        self.SetScrollRate(1, 1)
 
-	self.Bind(wx.EVT_LEFT_DOWN, self.OnMouse)
-	self.Bind(wx.EVT_MOTION, self.OnMouse)
-	self.Bind(wx.EVT_LEFT_UP, self.OnMouse)
-	self.Bind(wx.EVT_PAINT, self.OnPaint)
+        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouse)
+        self.Bind(wx.EVT_MOTION, self.OnMouse)
+        self.Bind(wx.EVT_LEFT_UP, self.OnMouse)
+        self.Bind(wx.EVT_PAINT, self.OnPaint)
 
-	run('r.out.ppm', input = app.inmap, output = app.tempfile)
+        run('r.out.ppm', input=app.inmap, output=app.tempfile)
 
-	self.image = wx.BitmapFromImage(wx.Image(app.tempfile))
-	grass.try_remove(app.tempfile)
+        self.image = wx.BitmapFromImage(wx.Image(app.tempfile))
+        grass.try_remove(app.tempfile)
 
-	app.force_window()
+        app.force_window()
 
     def OnPaint(self, ev):
-	x0 = self.app.origin_x
-	y0 = self.app.origin_y
-	dx = self.app.cols
-	dy = self.app.rows
+        x0 = self.app.origin_x
+        y0 = self.app.origin_y
+        dx = self.app.cols
+        dy = self.app.rows
 
-	dc = wx.PaintDC(self)
-	self.DoPrepareDC(dc)
+        dc = wx.PaintDC(self)
+        self.DoPrepareDC(dc)
 
-	src = wx.MemoryDC()
-	src.SelectObjectAsSource(self.image)
-	dc.Blit(0, 0, self.width, self.height, src, 0, 0)
-	src.SelectObjectAsSource(wx.NullBitmap)
+        src = wx.MemoryDC()
+        src.SelectObjectAsSource(self.image)
+        dc.Blit(0, 0, self.width, self.height, src, 0, 0)
+        src.SelectObjectAsSource(wx.NullBitmap)
 
-	dc.SetPen(wx.Pen('red', style = wx.LONG_DASH))
-	dc.SetBrush(wx.Brush('black', style = wx.TRANSPARENT))
-	dc.DrawRectangle(x0, y0, dx, dy)
-	dc.SetBrush(wx.NullBrush)
-	dc.SetPen(wx.NullPen)
+        dc.SetPen(wx.Pen('red', style=wx.LONG_DASH))
+        dc.SetBrush(wx.Brush('black', style=wx.TRANSPARENT))
+        dc.DrawRectangle(x0, y0, dx, dy)
+        dc.SetBrush(wx.NullBrush)
+        dc.SetPen(wx.NullPen)
 
     def OnMouse(self, ev):
-	if ev.Moving():
-	    return
-	x = ev.GetX()
-	y = ev.GetY()
-	(x, y) = self.CalcUnscrolledPosition(x, y)
-	self.set_window(x, y)
-	if ev.ButtonUp():
-	    self.app.change_window()
+        if ev.Moving():
+            return
+        x = ev.GetX()
+        y = ev.GetY()
+        (x, y) = self.CalcUnscrolledPosition(x, y)
+        self.set_window(x, y)
+        if ev.ButtonUp():
+            self.app.change_window()
 
     def set_window(self, x, y):
-	self.app.origin_x = x - app.cols / 2
-	self.app.origin_y = y - app.rows / 2
-	self.app.force_window()
-	self.Refresh()
+        self.app.origin_x = x - app.cols / 2
+        self.app.origin_y = y - app.rows / 2
+        self.app.force_window()
+        self.Refresh()
+
 
 class OverviewWindow(wx.Frame):
+
     def __init__(self, app):
-	wx.Frame.__init__(self, None, title = "d.rast.edit overview (%s)" % app.inmap)
-	self.app = app
+        wx.Frame.__init__(
+            self,
+            None,
+            title="d.rast.edit overview (%s)" %
+            app.inmap)
+        self.app = app
 
-	self.canvas = OverviewCanvas(app, parent = self)
+        self.canvas = OverviewCanvas(app, parent=self)
 
-	self.Bind(wx.EVT_CLOSE, self.OnClose)
+        self.Bind(wx.EVT_CLOSE, self.OnClose)
 
     def OnClose(self, ev):
-	self.app.finalize()
+        self.app.finalize()
+
 
 class Canvas(wx.ScrolledWindow):
+
     def __init__(self, app, parent):
-	wx.ScrolledWindow.__init__(self, parent)
-	self.app = app
+        wx.ScrolledWindow.__init__(self, parent)
+        self.app = app
 
-	self.size = app.size
+        self.size = app.size
 
-	w = app.cols * self.size
-	h = app.rows * self.size
+        w = app.cols * self.size
+        h = app.rows * self.size
 
-	self.SetVirtualSize((w, h))
-	self.SetVirtualSizeHints(50, 50)
-	self.SetScrollRate(1, 1)
+        self.SetVirtualSize((w, h))
+        self.SetVirtualSizeHints(50, 50)
+        self.SetScrollRate(1, 1)
 
-	self.Bind(wx.EVT_LEFT_DOWN, self.OnMouse)
-	self.Bind(wx.EVT_RIGHT_DOWN, self.OnMouse)
-	self.Bind(wx.EVT_MOTION, self.OnMouse)
-	self.Bind(wx.EVT_PAINT, self.OnPaint2)
+        self.Bind(wx.EVT_LEFT_DOWN, self.OnMouse)
+        self.Bind(wx.EVT_RIGHT_DOWN, self.OnMouse)
+        self.Bind(wx.EVT_MOTION, self.OnMouse)
+        self.Bind(wx.EVT_PAINT, self.OnPaint2)
 
-	self.row = 0
-	self.col = 0
+        self.row = 0
+        self.col = 0
 
-	self.gray12 = wx.BitmapFromBits(gray12_bits, 16, 16)
+        self.gray12 = wx.BitmapFromBits(gray12_bits, 16, 16)
 
     def OnMouse(self, ev):
-	oldrow = self.row
-	oldcol = self.col
+        oldrow = self.row
+        oldcol = self.col
 
-	x = ev.GetX()
-	y = ev.GetY()
-	(x, y) = self.CalcUnscrolledPosition(x, y)
+        x = ev.GetX()
+        y = ev.GetY()
+        (x, y) = self.CalcUnscrolledPosition(x, y)
 
-	col = x / self.size
-	row = y / self.size
+        col = x / self.size
+        row = y / self.size
 
-	self.row = row
-	self.col = col
+        self.row = row
+        self.col = col
 
-	if ev.Moving():
-	    self.refresh_cell(oldrow, oldcol)
-	    self.refresh_cell(row, col)
-	elif ev.ButtonDown(wx.MOUSE_BTN_LEFT):
-	    self.cell_set()
-	elif ev.ButtonDown(wx.MOUSE_BTN_RIGHT):
-	    self.cell_get()
+        if ev.Moving():
+            self.refresh_cell(oldrow, oldcol)
+            self.refresh_cell(row, col)
+        elif ev.ButtonDown(wx.MOUSE_BTN_LEFT):
+            self.cell_set()
+        elif ev.ButtonDown(wx.MOUSE_BTN_RIGHT):
+            self.cell_get()
 
     def paint_cell(self, dc, r, c):
-	if r < 0 or r >= self.app.rows or c < 0 or c >= self.app.cols:
-	    return
-
-	val = self.app.values[r][c]
-	if val == None:
-	    fill = 'black'
-	    stipple = self.gray12 
-	else:
-	    fill = self.app.get_color(val)
-	    stipple = None
-
-	if r == self.row and c == self.col:
-	    outline = 'red'
-	elif self.app.changed[r][c]:
-	    outline = 'white'
-	else:
-	    outline = 'black'
-
-	dc.SetPen(wx.Pen(outline))
-
-	if stipple:
-	    brush = wx.Brush(fill, style = wx.STIPPLE)
-	    brush.SetStipple(stipple)
-	else:
-	    brush = wx.Brush(fill, style = wx.SOLID)
-
-	x0 = c * self.size + 1
-	x1 = x0  + self.size - 1
-	y0 = r * self.size + 1
-	y1 = y0  + self.size - 1
-
-	dc.SetBrush(brush)
-	dc.DrawRectangle(x0, y0, x1 - x0, y1 - y0)
-	dc.SetPen(wx.NullPen)
-	dc.SetBrush(wx.NullBrush)
-
-	if not self.app.angles:
-	    return
-
-	if self.app.angles[r][c] == '*':
-	    return
-
-	cx = (x0 + x1) / 2
-	cy = (y0 + y1) / 2
-
-	a = math.radians(float(self.app.angles[r][c]))
-	dx =  math.cos(a) * self.size / 2
-	dy = -math.sin(a) * self.size / 2
-
-	x0 = cx - dx
-	y0 = cy - dy
-	x1 = cx + dx
-	y1 = cy + dy
-
-	dx, dy = x1 - x0, y1 - y0
-	px, py = -dy, dx
-
-	r,g,b = wx.NamedColor(fill)
-	if r + g + b > 384:
-	    line = 'black'
-	else:
-	    line = 'white'
-
-	dc.SetPen(wx.Pen(line))
-	dc.DrawLine(x0, y0, x1, y1)
-	dc.DrawLine(x1, y1, x1 + px/6 - dx/3, y1 + py/6 - dy/3)
-	dc.DrawLine(x1, y1, x1 - px/6 - dx/3, y1 - py/6 - dy/3)
-	dc.SetPen(wx.NullPen)
+        if r < 0 or r >= self.app.rows or c < 0 or c >= self.app.cols:
+            return
+
+        val = self.app.values[r][c]
+        if val is None:
+            fill = 'black'
+            stipple = self.gray12
+        else:
+            fill = self.app.get_color(val)
+            stipple = None
+
+        if r == self.row and c == self.col:
+            outline = 'red'
+        elif self.app.changed[r][c]:
+            outline = 'white'
+        else:
+            outline = 'black'
+
+        dc.SetPen(wx.Pen(outline))
+
+        if stipple:
+            brush = wx.Brush(fill, style=wx.STIPPLE)
+            brush.SetStipple(stipple)
+        else:
+            brush = wx.Brush(fill, style=wx.SOLID)
+
+        x0 = c * self.size + 1
+        x1 = x0 + self.size - 1
+        y0 = r * self.size + 1
+        y1 = y0 + self.size - 1
+
+        dc.SetBrush(brush)
+        dc.DrawRectangle(x0, y0, x1 - x0, y1 - y0)
+        dc.SetPen(wx.NullPen)
+        dc.SetBrush(wx.NullBrush)
+
+        if not self.app.angles:
+            return
+
+        if self.app.angles[r][c] == '*':
+            return
+
+        cx = (x0 + x1) / 2
+        cy = (y0 + y1) / 2
+
+        a = math.radians(float(self.app.angles[r][c]))
+        dx = math.cos(a) * self.size / 2
+        dy = -math.sin(a) * self.size / 2
+
+        x0 = cx - dx
+        y0 = cy - dy
+        x1 = cx + dx
+        y1 = cy + dy
+
+        dx, dy = x1 - x0, y1 - y0
+        px, py = -dy, dx
+
+        r, g, b = wx.NamedColor(fill)
+        if r + g + b > 384:
+            line = 'black'
+        else:
+            line = 'white'
+
+        dc.SetPen(wx.Pen(line))
+        dc.DrawLine(x0, y0, x1, y1)
+        dc.DrawLine(x1, y1, x1 + px / 6 - dx / 3, y1 + py / 6 - dy / 3)
+        dc.DrawLine(x1, y1, x1 - px / 6 - dx / 3, y1 - py / 6 - dy / 3)
+        dc.SetPen(wx.NullPen)
 
     def paint_rect(self, dc, x, y, w, h):
-	c0 = (x + 0) / self.size
-	c1 = (x + w + 1) / self.size
-	r0 = (y + 0) / self.size
-	r1 = (y + h + 1) / self.size
-	for r in range(r0, r1 + 1):
-	    for c in range(c0, c1 + 1):
-		self.paint_cell(dc, r, c)
+        c0 = (x + 0) / self.size
+        c1 = (x + w + 1) / self.size
+        r0 = (y + 0) / self.size
+        r1 = (y + h + 1) / self.size
+        for r in range(r0, r1 + 1):
+            for c in range(c0, c1 + 1):
+                self.paint_cell(dc, r, c)
 
     def OnPaint(self, ev):
-	dc = wx.PaintDC(self)
-	self.DoPrepareDC(dc)
-	for r in range(self.app.rows):
-	    for c in range(self.app.cols):
-		self.paint_cell(dc, r, c)
+        dc = wx.PaintDC(self)
+        self.DoPrepareDC(dc)
+        for r in range(self.app.rows):
+            for c in range(self.app.cols):
+                self.paint_cell(dc, r, c)
 
     def OnPaint2(self, ev):
-	dc = wx.PaintDC(self)
-	self.DoPrepareDC(dc)
-	it = wx.RegionIterator(self.GetUpdateRegion())
-	while it.HaveRects():
-	    x = it.GetX()
-	    y = it.GetY()
-	    w = it.GetW()
-	    h = it.GetH()
-	    (x, y) = self.CalcUnscrolledPosition(x, y)
-	    self.paint_rect(dc, x, y, w, h)
-	    it.Next()
+        dc = wx.PaintDC(self)
+        self.DoPrepareDC(dc)
+        it = wx.RegionIterator(self.GetUpdateRegion())
+        while it.HaveRects():
+            x = it.GetX()
+            y = it.GetY()
+            w = it.GetW()
+            h = it.GetH()
+            (x, y) = self.CalcUnscrolledPosition(x, y)
+            self.paint_rect(dc, x, y, w, h)
+            it.Next()
 
     def cell_enter(self):
-	if not self.row or not self.col:
-	    return
-	self.app.update_status(self.row, self.col)
+        if not self.row or not self.col:
+            return
+        self.app.update_status(self.row, self.col)
 
     def cell_leave(self):
-	self.app.clear_status()
+        self.app.clear_status()
 
     def cell_get(self):
-	self.app.brush = self.app.values[self.row][self.col]
-	self.app.frame.brush_update()
+        self.app.brush = self.app.values[self.row][self.col]
+        self.app.frame.brush_update()
 
     def cell_set(self):
-	self.app.values[self.row][self.col] = self.app.brush
-	self.app.changed[self.row][self.col] = True
-	self.refresh_cell(self.row, self.col)
+        self.app.values[self.row][self.col] = self.app.brush
+        self.app.changed[self.row][self.col] = True
+        self.refresh_cell(self.row, self.col)
 
     def refresh_cell(self, row, col):
-	x = col * self.size
-	y = row * self.size
-	(x, y) = self.CalcScrolledPosition(x, y)
-	self.RefreshRect((x, y, self.size, self.size))
+        x = col * self.size
+        y = row * self.size
+        (x, y) = self.CalcScrolledPosition(x, y)
+        self.RefreshRect((x, y, self.size, self.size))
+
 
 class ColorPanel(wx.Panel):
+
     def __init__(self, **kwargs):
-	wx.Panel.__init__(self, **kwargs)
-	self.SetBackgroundStyle(wx.BG_STYLE_COLOUR)
-	self.stipple = wx.BitmapFromBits(gray12_bits, 16, 16)
-	self.null_bg = True
-	self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase)
+        wx.Panel.__init__(self, **kwargs)
+        self.SetBackgroundStyle(wx.BG_STYLE_COLOUR)
+        self.stipple = wx.BitmapFromBits(gray12_bits, 16, 16)
+        self.null_bg = True
+        self.Bind(wx.EVT_ERASE_BACKGROUND, self.OnErase)
 
     def OnErase(self, ev):
-	self.ClearBackground()
+        self.ClearBackground()
 
-	if not self.null_bg:
-	    return
+        if not self.null_bg:
+            return
 
-	dc = ev.GetDC()
-	if not dc:
-	    dc = wx.ClientDC(self)
+        dc = ev.GetDC()
+        if not dc:
+            dc = wx.ClientDC(self)
 
-	brush = wx.Brush('black', style = wx.STIPPLE)
-	brush.SetStipple(self.stipple)
-	dc.SetBackground(brush)
-	dc.Clear()
-	dc.SetBackground(wx.NullBrush)
+        brush = wx.Brush('black', style=wx.STIPPLE)
+        brush.SetStipple(self.stipple)
+        dc.SetBackground(brush)
+        dc.Clear()
+        dc.SetBackground(wx.NullBrush)
 
     def SetNullBackgroundColour(self):
-	wx.Panel.SetBackgroundColour(self, 'gray')
-	self.null_bg = True
+        wx.Panel.SetBackgroundColour(self, 'gray')
+        self.null_bg = True
 
     def SetBackgroundColour(self, color):
-	wx.Panel.SetBackgroundColour(self, color)
-	self.null_bg = False
+        wx.Panel.SetBackgroundColour(self, color)
+        self.null_bg = False
+
 
 class MainWindow(wx.Frame):
+
     def __init__(self, app):
-	wx.Frame.__init__(self, None, title = "d.rast.edit (%s)" % app.inmap)
-	self.app = app
+        wx.Frame.__init__(self, None, title="d.rast.edit (%s)" % app.inmap)
+        self.app = app
 
-	self.Bind(wx.EVT_CLOSE, self.OnClose)
+        self.Bind(wx.EVT_CLOSE, self.OnClose)
 
-	filemenu = wx.Menu()
-	filemenu.Append(wx.ID_SAVE, "&Save", "Save changes")
-	filemenu.Append(wx.ID_EXIT, "E&xit", "Terminate the program")
-	menubar = wx.MenuBar()
-	menubar.Append(filemenu, "&File")
-	self.SetMenuBar(menubar)
+        filemenu = wx.Menu()
+        filemenu.Append(wx.ID_SAVE, "&Save", "Save changes")
+        filemenu.Append(wx.ID_EXIT, "E&xit", "Terminate the program")
+        menubar = wx.MenuBar()
+        menubar.Append(filemenu, "&File")
+        self.SetMenuBar(menubar)
 
-	wx.EVT_MENU(self, wx.ID_SAVE, self.OnSave)
-	wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit)
+        wx.EVT_MENU(self, wx.ID_SAVE, self.OnSave)
+        wx.EVT_MENU(self, wx.ID_EXIT, self.OnExit)
 
-	sizer = wx.BoxSizer(orient = wx.VERTICAL)
+        sizer = wx.BoxSizer(orient=wx.VERTICAL)
 
-	self.canvas = Canvas(app, parent = self)
-	si = sizer.Add(self.canvas, proportion = 1, flag = wx.EXPAND)
+        self.canvas = Canvas(app, parent=self)
+        si = sizer.Add(self.canvas, proportion=1, flag=wx.EXPAND)
 
-	tools = wx.BoxSizer(wx.HORIZONTAL)
+        tools = wx.BoxSizer(wx.HORIZONTAL)
 
-	l = wx.StaticText(parent = self, label = 'New Value:')
-	tools.Add(l, flag = wx.ALIGN_CENTER_VERTICAL)
-	tools.AddSpacer(5)
+        l = wx.StaticText(parent=self, label='New Value:')
+        tools.Add(l, flag=wx.ALIGN_CENTER_VERTICAL)
+        tools.AddSpacer(5)
 
-	self.newval = wx.TextCtrl(parent = self, style = wx.TE_PROCESS_ENTER)
-	tools.Add(self.newval, flag = wx.ALIGN_CENTER_VERTICAL)
+        self.newval = wx.TextCtrl(parent=self, style=wx.TE_PROCESS_ENTER)
+        tools.Add(self.newval, flag=wx.ALIGN_CENTER_VERTICAL)
 
-	l = wx.StaticText(parent = self, label = 'Color:')
-	tools.Add(l, flag = wx.ALIGN_CENTER_VERTICAL)
-	tools.AddSpacer(5)
+        l = wx.StaticText(parent=self, label='Color:')
+        tools.Add(l, flag=wx.ALIGN_CENTER_VERTICAL)
+        tools.AddSpacer(5)
 
-	self.color = ColorPanel(parent = self, size = (30,5))
-	tools.Add(self.color, flag = wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
+        self.color = ColorPanel(parent=self, size=(30, 5))
+        tools.Add(self.color, flag=wx.ALIGN_CENTER_VERTICAL | wx.EXPAND)
 
-	self.Bind(wx.EVT_TEXT_ENTER, self.OnReturn, source = self.newval)
+        self.Bind(wx.EVT_TEXT_ENTER, self.OnReturn, source=self.newval)
 
-	sizer.AddSizer(tools, proportion = 0, flag = wx.EXPAND)
+        sizer.AddSizer(tools, proportion=0, flag=wx.EXPAND)
 
-	self.SetSizerAndFit(sizer)
-	self.SetSize((app.width, app.height))
+        self.SetSizerAndFit(sizer)
+        self.SetSize((app.width, app.height))
 
-	self.status = self.CreateStatusBar(6)
+        self.status = self.CreateStatusBar(6)
 
-	self.brush_update()
+        self.brush_update()
 
     def OnSave(self, ev):
-	self.app.save_map()
+        self.app.save_map()
 
     def OnExit(self, ev):
-	self.Close(True)
+        self.Close(True)
 
     def OnClose(self, ev):
-	self.app.finalize()
+        self.app.finalize()
 
     def OnReturn(self, ev):
-	self.app.brush = self.newval.GetValue()
-	if self.app.brush != '*' and self.app.brush.strip('0123456789') != '':
-	    self.app.brush = '*'
-	self.brush_update()
+        self.app.brush = self.newval.GetValue()
+        if self.app.brush != '*' and self.app.brush.strip('0123456789') != '':
+            self.app.brush = '*'
+        self.brush_update()
 
     def update_status(self):
-	for i, key in enumerate(['row', 'col', 'x', 'y', 'value', 'aspect']):
-	    s = "%s%s: %s" % (key[0].upper(), key[1:], self.app.status[key])
-	    self.status.SetStatusText(s, i)
+        for i, key in enumerate(['row', 'col', 'x', 'y', 'value', 'aspect']):
+            s = "%s%s: %s" % (key[0].upper(), key[1:], self.app.status[key])
+            self.status.SetStatusText(s, i)
 
     def clear_status(self):
-	for key in self.status:
-	    self.status[key] = ''
+        for key in self.status:
+            self.status[key] = ''
 
     def brush_update(self):
-	self.newval.ChangeValue(self.app.brush)
-	if self.app.brush == '*':
-	    self.color.SetNullBackgroundColour()
-	else:
-	    self.color.SetBackgroundColour(self.app.get_color(self.app.brush))
-	self.color.Refresh()
+        self.newval.ChangeValue(self.app.brush)
+        if self.app.brush == '*':
+            self.color.SetNullBackgroundColour()
+        else:
+            self.color.SetBackgroundColour(self.app.get_color(self.app.brush))
+        self.color.Refresh()
+
 
 class Application(wx.App):
+
     def __init__(self, options):
-	self.options = options
-	wx.App.__init__(self)
+        self.options = options
+        wx.App.__init__(self)
 
     def initialize(self):
-	grass.use_temp_region()
+        grass.use_temp_region()
 
-	run('g.region', raster = self.inmap)
+        run('g.region', raster=self.inmap)
 
-	reg = grass.region()
-	for k, f in wind_keys.values():
-	    self.total[k] = (f)(reg[k])
+        reg = grass.region()
+        for k, f in wind_keys.values():
+            self.total[k] = (f)(reg[k])
 
-	if self.cols > self.total['cols']:
-	    self.cols = self.total['cols']
-	if self.rows > self.total['rows']:
-	    self.rows = self.total['rows']
+        if self.cols > self.total['cols']:
+            self.cols = self.total['cols']
+        if self.rows > self.total['rows']:
+            self.rows = self.total['rows']
 
-	tempbase = grass.tempfile()
-	grass.try_remove(tempbase)
+        tempbase = grass.tempfile()
+        grass.try_remove(tempbase)
 
-	self.tempfile = tempbase + '.ppm'
-	self.tempmap = 'tmp.d.rast.edit'
+        self.tempfile = tempbase + '.ppm'
+        self.tempmap = 'tmp.d.rast.edit'
 
-	atexit.register(self.cleanup)
+        atexit.register(self.cleanup)
 
-	run('g.copy', raster = (self.inmap, self.outmap), overwrite = True)
-	run('r.colors', map = self.outmap, rast = self.inmap)
+        run('g.copy', raster=(self.inmap, self.outmap), overwrite=True)
+        run('r.colors', map=self.outmap, rast=self.inmap)
 
     def cleanup(self):
-	grass.try_remove(self.tempfile)
-	run('g.remove', flags = 'f', type = 'raster', name = self.tempmap)
+        grass.try_remove(self.tempfile)
+        run('g.remove', flags='f', type='raster', name=self.tempmap)
 
     def finalize(self):
-	self.save_map()
-	sys.exit(0)
+        self.save_map()
+        sys.exit(0)
 
     def save_map(self):
-	p = grass.feed_command('r.in.ascii', input = '-', output = self.tempmap, quiet = True, overwrite = True)
-	outf = p.stdin
-	outf.write("north: %f\n" % self.wind['n'])
-	outf.write("south: %f\n" % self.wind['s'])
-	outf.write("east: %f\n"  % self.wind['e'])
-	outf.write("west: %f\n"  % self.wind['w'])
-	outf.write("rows: %d\n"  % self.wind['rows'])
-	outf.write("cols: %d\n"  % self.wind['cols'])
-	outf.write("null: *\n")
-
-	for row in range(self.wind['rows']):
-	    for col in range(self.wind['cols']):
-		if col > 0:
-		    outf.write(" ")
-		val = self.values[row][col]
-		if val and self.changed[row][col]:
-		    outf.write("%s" % val)
-		else:
-		    outf.write('*')
-	    outf.write("\n")
-
-	outf.close()
-	p.wait()
-
-	run('g.region', raster = self.inmap)
-	run('r.patch', input = (self.tempmap, self.outmap), output = self.outmap, overwrite = True)
-	run('r.colors', map = self.outmap, rast = self.inmap)
-	run('g.remove', flags = 'f', type = 'raster', name = self.tempmap)
+        p = grass.feed_command(
+            'r.in.ascii',
+            input='-',
+            output=self.tempmap,
+            quiet=True,
+            overwrite=True)
+        outf = p.stdin
+        outf.write("north: %f\n" % self.wind['n'])
+        outf.write("south: %f\n" % self.wind['s'])
+        outf.write("east: %f\n" % self.wind['e'])
+        outf.write("west: %f\n" % self.wind['w'])
+        outf.write("rows: %d\n" % self.wind['rows'])
+        outf.write("cols: %d\n" % self.wind['cols'])
+        outf.write("null: *\n")
+
+        for row in range(self.wind['rows']):
+            for col in range(self.wind['cols']):
+                if col > 0:
+                    outf.write(" ")
+                val = self.values[row][col]
+                if val and self.changed[row][col]:
+                    outf.write("%s" % val)
+                else:
+                    outf.write('*')
+            outf.write("\n")
+
+        outf.close()
+        p.wait()
+
+        run('g.region', raster=self.inmap)
+        run('r.patch',
+            input=(self.tempmap,
+                   self.outmap),
+            output=self.outmap,
+            overwrite=True)
+        run('r.colors', map=self.outmap, rast=self.inmap)
+        run('g.remove', flags='f', type='raster', name=self.tempmap)
 
     def read_header(self, infile):
-	wind = {}
-	for i in range(6):
-	    line = infile.readline().rstrip('\r\n')
-	    f = line.split(':')
-	    key = f[0]
-	    val = f[1].strip()
-	    (k, f) = wind_keys[key]
-	    wind[k] = (f)(val)
-	return wind
+        wind = {}
+        for i in range(6):
+            line = infile.readline().rstrip('\r\n')
+            f = line.split(':')
+            key = f[0]
+            val = f[1].strip()
+            (k, f) = wind_keys[key]
+            wind[k] = (f)(val)
+        return wind
 
     def read_data(self, infile):
-	values = []
-	for row in range(self.wind['rows']):
-	    line = infile.readline().rstrip('\r\n')
-	    values.append(line.split())
-	return values
+        values = []
+        for row in range(self.wind['rows']):
+            line = infile.readline().rstrip('\r\n')
+            values.append(line.split())
+        return values
 
     def load_map(self):
-	run('g.region', **self.wind)
+        run('g.region', **self.wind)
 
-	p = grass.pipe_command('r.out.ascii', input = self.inmap, quiet = True)
-	self.wind = self.read_header(p.stdout)
-	self.values = self.read_data(p.stdout)
-	self.changed = [[False for c in row] for row in self.values]
-	p.wait()
+        p = grass.pipe_command('r.out.ascii', input=self.inmap, quiet=True)
+        self.wind = self.read_header(p.stdout)
+        self.values = self.read_data(p.stdout)
+        self.changed = [[False for c in row] for row in self.values]
+        p.wait()
 
-	self.clear_changes()
+        self.clear_changes()
 
-	run('r.out.ppm', input = self.inmap, output = self.tempfile)
-	colorimg = wx.Image(self.tempfile)
-	grass.try_remove(self.tempfile)
+        run('r.out.ppm', input=self.inmap, output=self.tempfile)
+        colorimg = wx.Image(self.tempfile)
+        grass.try_remove(self.tempfile)
 
-	for row in range(self.wind['rows']):
-	    for col in range(self.wind['cols']):
-		val = self.values[row][col]
-		if val in self.colors:
-		    continue
-		r = colorimg.GetRed(col, row)
-		g = colorimg.GetGreen(col, row)
-		b = colorimg.GetBlue(col, row)
-		color = "#%02x%02x%02x" % (r, g, b)
-		self.colors[val] = color
+        for row in range(self.wind['rows']):
+            for col in range(self.wind['cols']):
+                val = self.values[row][col]
+                if val in self.colors:
+                    continue
+                r = colorimg.GetRed(col, row)
+                g = colorimg.GetGreen(col, row)
+                b = colorimg.GetBlue(col, row)
+                color = "#%02x%02x%02x" % (r, g, b)
+                self.colors[val] = color
 
-	colorimg.Destroy()
+        colorimg.Destroy()
 
     def load_aspect(self):
-	if not self.aspect:
-	    return
+        if not self.aspect:
+            return
 
-	p = grass.pipe_command('r.out.ascii', input = self.aspect, quiet = True)
-	self.read_header(p.stdout)
-	self.angles = self.read_data(p.stdout)
-	p.wait()
+        p = grass.pipe_command('r.out.ascii', input=self.aspect, quiet=True)
+        self.read_header(p.stdout)
+        self.angles = self.read_data(p.stdout)
+        p.wait()
 
     def clear_changes(self):
-	for row in range(self.wind['rows']):
-	    for col in range(self.wind['cols']):
-		self.changed[row][col] = 0
+        for row in range(self.wind['rows']):
+            for col in range(self.wind['cols']):
+                self.changed[row][col] = 0
 
     def update_window(self):
-	x0 = self.origin_x
-	y0 = self.origin_y
-	x1 = x0 + self.cols
-	y1 = y0 + self.rows
-
-	self.wind['n'] = self.total['n'] - y0 * self.total['nsres']
-	self.wind['s'] = self.total['n'] - y1 * self.total['nsres']
-	self.wind['w'] = self.total['w'] + x0 * self.total['ewres']
-	self.wind['e'] = self.total['w'] + x1 * self.total['ewres']
-	self.wind['rows'] = self.rows
-	self.wind['cols'] = self.cols
+        x0 = self.origin_x
+        y0 = self.origin_y
+        x1 = x0 + self.cols
+        y1 = y0 + self.rows
+
+        self.wind['n'] = self.total['n'] - y0 * self.total['nsres']
+        self.wind['s'] = self.total['n'] - y1 * self.total['nsres']
+        self.wind['w'] = self.total['w'] + x0 * self.total['ewres']
+        self.wind['e'] = self.total['w'] + x1 * self.total['ewres']
+        self.wind['rows'] = self.rows
+        self.wind['cols'] = self.cols
 
     def change_window(self):
-	self.save_map()
-	self.update_window()
-	self.load_map()
-	self.load_aspect()
-	self.refresh_canvas()
+        self.save_map()
+        self.update_window()
+        self.load_map()
+        self.load_aspect()
+        self.refresh_canvas()
 
     def force_window(self):
-	if self.origin_x < 0:
-	    self.origin_x = 0
-	if self.origin_x > self.total['cols'] - self.cols:
-	    self.origin_x = self.total['cols'] - self.cols
-	if self.origin_y < 0:
-	    self.origin_y = 0
-	if self.origin_y > self.total['rows'] - self.rows:
-	    self.origin_y = self.total['rows'] - self.rows
+        if self.origin_x < 0:
+            self.origin_x = 0
+        if self.origin_x > self.total['cols'] - self.cols:
+            self.origin_x = self.total['cols'] - self.cols
+        if self.origin_y < 0:
+            self.origin_y = 0
+        if self.origin_y > self.total['rows'] - self.rows:
+            self.origin_y = self.total['rows'] - self.rows
 
     def update_status(self, row, col):
-	self.status['row'] = row
-	self.status['col'] = col
-	self.status['x'] = self.wind['e'] + (col + 0.5) * (self.wind['e'] - self.wind['w']) / self.wind['cols']
-	self.status['y'] = self.wind['n'] - (row + 0.5) * (self.wind['n'] - self.wind['s']) / self.wind['rows']
-	self.status['value'] = self.values[row][col]
-	if self.angles:
-	    self.status['aspect'] = self.angles[row][col]
+        self.status['row'] = row
+        self.status['col'] = col
+        self.status['x'] = self.wind[
+            'e'] + (col + 0.5) * (self.wind['e'] - self.wind['w']) / self.wind['cols']
+        self.status['y'] = self.wind[
+            'n'] - (row + 0.5) * (self.wind['n'] - self.wind['s']) / self.wind['rows']
+        self.status['value'] = self.values[row][col]
+        if self.angles:
+            self.status['aspect'] = self.angles[row][col]
 
     def force_color(val):
-	run('g.region', rows = 1, cols = 1)
-	run('r.mapcalc', expression = "%s = %d" % (self.tempmap, val))
-	run('r.colors', map = self.tempmap, rast = self.inmap)
-	run('r.out.ppm', input = self.tempmap, out = self.tempfile)
-	run('g.remove', flags = 'f', type = 'raster', name = self.tempmap)
+        run('g.region', rows=1, cols=1)
+        run('r.mapcalc', expression="%s = %d" % (self.tempmap, val))
+        run('r.colors', map=self.tempmap, rast=self.inmap)
+        run('r.out.ppm', input=self.tempmap, out=self.tempfile)
+        run('g.remove', flags='f', type='raster', name=self.tempmap)
 
-	tempimg = wx.Image(self.tempfile)
-	grass.try_remove(self.tempfile)
+        tempimg = wx.Image(self.tempfile)
+        grass.try_remove(self.tempfile)
 
-	rgb = tempimg.get(0, 0)
-	color = "#%02x%02x%02x" % rgb
-	self.colors[val] = color
-	tempimg.delete()
+        rgb = tempimg.get(0, 0)
+        color = "#%02x%02x%02x" % rgb
+        self.colors[val] = color
+        tempimg.delete()
 
     def get_color(self, val):
-	if val not in self.colors:
-	    try:
-		self.force_color(val)
-	    except:
-		self.colors[val] = "#ffffff"
+        if val not in self.colors:
+            try:
+                self.force_color(val)
+            except:
+                self.colors[val] = "#ffffff"
 
-	return self.colors[val]
+        return self.colors[val]
 
     def refresh_canvas(self):
-	self.frame.canvas.Refresh()
+        self.frame.canvas.Refresh()
 
     def make_ui(self):
-	self.frame = MainWindow(self)
-	self.SetTopWindow(self.frame)
-	self.frame.Show()
-	self.overview = OverviewWindow(self)
-	self.overview.Show()
+        self.frame = MainWindow(self)
+        self.SetTopWindow(self.frame)
+        self.frame.Show()
+        self.overview = OverviewWindow(self)
+        self.overview.Show()
 
     def OnInit(self):
-	self.outmap = self.options['output']
-	self.inmap  = self.options['input']
-	self.aspect = self.options['aspect']
-	self.width  = int(self.options['width'])
-	self.height = int(self.options['height'])
-	self.size   = int(self.options['size'])
-	self.rows   = int(self.options['rows'])
-	self.cols   = int(self.options['cols'])
-
-	self.status = {
-	    'row': '',
-	    'col': '',
-	    'x': '',
-	    'y': '',
-	    'value': '',
-	    'aspect': ''
-	}
-
-	self.values = None
-	self.changed = None
-	self.angles = None
-	self.colors = {}
-	self.brush = '*'
-	self.origin_x = 0
-	self.origin_y = 0
-	self.wind = {}
-	self.total = {}
-
-	self.initialize()
-	self.update_window()
-	self.make_ui()
-	self.load_map()
-	self.load_aspect()
-	self.refresh_canvas()
-
-	return True
+        self.outmap = self.options['output']
+        self.inmap = self.options['input']
+        self.aspect = self.options['aspect']
+        self.width = int(self.options['width'])
+        self.height = int(self.options['height'])
+        self.size = int(self.options['size'])
+        self.rows = int(self.options['rows'])
+        self.cols = int(self.options['cols'])
+
+        self.status = {
+            'row': '',
+            'col': '',
+            'x': '',
+            'y': '',
+            'value': '',
+            'aspect': ''
+        }
+
+        self.values = None
+        self.changed = None
+        self.angles = None
+        self.colors = {}
+        self.brush = '*'
+        self.origin_x = 0
+        self.origin_y = 0
+        self.wind = {}
+        self.total = {}
+
+        self.initialize()
+        self.update_window()
+        self.make_ui()
+        self.load_map()
+        self.load_aspect()
+        self.refresh_canvas()
+
+        return True
 
 if __name__ == "__main__":
     options, flags = grass.parser()
diff --git a/scripts/d.rast.leg/d.rast.leg.html b/scripts/d.rast.leg/d.rast.leg.html
index 5a94496..242ceed 100644
--- a/scripts/d.rast.leg/d.rast.leg.html
+++ b/scripts/d.rast.leg/d.rast.leg.html
@@ -46,4 +46,4 @@ Jianping Xu, Scott Madry, Rutgers University<br>
 Markus Neteler
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/scripts/d.rast.leg/d.rast.leg.py b/scripts/d.rast.leg/d.rast.leg.py
index ab62689..1884850 100755
--- a/scripts/d.rast.leg/d.rast.leg.py
+++ b/scripts/d.rast.leg/d.rast.leg.py
@@ -65,6 +65,7 @@ import sys
 import os
 import grass.script as grass
 
+
 def make_frame(f, b, t, l, r):
     (fl, fr, ft, fb) = f
 
@@ -124,8 +125,10 @@ def main():
     ncats = len(cats.strip().split('\n'))
 
     # Only need to adjust legend size if number of categories is between 1 and 10
-    if ncats < 2: ncats = 2
-    if ncats > 10: ncats = 10
+    if ncats < 2:
+        ncats = 2
+    if ncats > 10:
+        ncats = 10
 
     VSpacing = (100 - (ncats * 10) + 10)
 
diff --git a/scripts/d.redraw/d.redraw.py b/scripts/d.redraw/d.redraw.py
index 38b3d1c..43cc7fc 100755
--- a/scripts/d.redraw/d.redraw.py
+++ b/scripts/d.redraw/d.redraw.py
@@ -5,7 +5,7 @@
 # MODULE:	d.redraw
 # AUTHOR(S):	Martin Landa <landa.martin gmail.com>
 # PURPOSE:	Redraws the content of currently selected monitor
-# COPYRIGHT:	(C) 2011 by the GRASS Development Team
+# COPYRIGHT:	(C) 2011-2015 by the GRASS Development Team
 #
 #		This program is free software under the GNU General
 #		Public License (>=v2). Read the file COPYING that
@@ -20,52 +20,46 @@
 #% keyword: monitors
 #%end
 
+import os
 import sys
-import shlex
 
 from grass.script import core as grass
+from grass.script.utils import split
 
-def split(s):
-    """!Platform specific shlex.split"""
-    if sys.version_info >= (2, 6):
-        return shlex.split(s, posix = (sys.platform != "win32"))
-    elif sys.platform == "win32":
-        return shlex.split(s.replace('\\', r'\\'))
-    else:
-        return shlex.split(s)
 
 def main():
-    env = grass.gisenv()
-    mon = env.get('MONITOR', None)
+    mon = grass.gisenv().get('MONITOR', None)
     if not mon:
         grass.fatal(_("No graphics device selected. Use d.mon to select graphics device."))
-    
-    monCmd = env.get('MONITOR_%s_CMDFILE' % mon.upper())
-    if not monCmd:
-        grass.fatal(_("No cmd file found for monitor <%s>") % mon)
+
+    monCmd = grass.parse_command('d.mon', flags='g').get('cmd', None)
+    if not monCmd or not os.path.isfile(monCmd):
+        grass.fatal(_("Unable to open file '%s'") % monCmd)
 
     try:
         fd = open(monCmd, 'r')
         cmdList = fd.readlines()
-        
+
         grass.run_command('d.erase')
-        
+
         for cmd in cmdList:
+            if cmd.startswith('#'):
+                continue
             grass.call(split(cmd))
     except IOError as e:
-        grass.fatal(_("Unable to open file '%s' for reading. Details: %s") % \
-                        (monCmd, e))
-    
+        grass.fatal(_("Unable to open file '%s' for reading. Details: %s") %
+                    (monCmd, e))
+
     fd.close()
-    
+
     # restore cmd file
     try:
         fd = open(monCmd, "w")
         fd.writelines(cmdList)
     except IOError as e:
-        grass.fatal(_("Unable to open file '%s' for writing. Details: %s") % \
-                        (monCmd, e))
-    
+        grass.fatal(_("Unable to open file '%s' for writing. Details: %s") %
+                    (monCmd, e))
+
     return 0
 
 if __name__ == "__main__":
diff --git a/scripts/d.shade/d.shade.html b/scripts/d.shade/d.shade.html
index b3caad4..edfdea5 100644
--- a/scripts/d.shade/d.shade.html
+++ b/scripts/d.shade/d.shade.html
@@ -86,4 +86,4 @@ elevation raster map, for example using <tt>haxby</tt> color table.
 Unknown; updated to GRASS 5.7 by Michael Barton
 
 <p>
-<i>Last changed: $Date: 2015-02-13 16:16:22 +0100 (Fri, 13 Feb 2015) $</i>
+<i>Last changed: $Date: 2015-02-13 16:14:07 +0100 (Fri, 13 Feb 2015) $</i>
diff --git a/scripts/d.to.rast/d.to.rast.html b/scripts/d.to.rast/d.to.rast.html
index 6a09178..bcbd912 100644
--- a/scripts/d.to.rast/d.to.rast.html
+++ b/scripts/d.to.rast/d.to.rast.html
@@ -3,7 +3,7 @@
 <em>d.to.rast</em> saves the content of the currently selected
 monitor into a raster map. The active monitor can be selected
 with <em>d.mon</em>. <em>d.to.rast</em> can be run from GUI
-command console, too. This module is not sensitive to computational region settings.
+Console tab, too. This module is not sensitive to computational region settings.
 
 <h2>EXAMPLE</h2>
 We combine different raster and vector map layers to create a composite layer
@@ -48,4 +48,4 @@ Figure: Raster map created by <em>d.to.rast</em> draped over digital elevation m
 
 Anna Petrasova, <a href="http://gis.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-02-19 02:42:11 +0100 (Fri, 19 Feb 2016) $</i>
diff --git a/scripts/d.to.rast/d.to.rast.py b/scripts/d.to.rast/d.to.rast.py
index e3b5f57..f06669d 100644
--- a/scripts/d.to.rast/d.to.rast.py
+++ b/scripts/d.to.rast/d.to.rast.py
@@ -5,7 +5,7 @@
 # MODULE:    d.to.rast
 # AUTHOR(S): Anna Petrasova <kratochanna gmail.com>
 # PURPOSE:	 Script for exporting content of monitor to raster map
-# COPYRIGHT: (C) 2014 by the GRASS Development Team
+# COPYRIGHT: (C) 2014-2015 by the GRASS Development Team
 #
 #		This program is free software under the GNU General
 #		Public License (>=v2). Read the file COPYING that
@@ -30,9 +30,9 @@ def main():
     options, flags = gcore.parser()
     gisenv = gcore.gisenv()
     if 'MONITOR' in gisenv:
-        cmd_file = gisenv['MONITOR_{monitor}_CMDFILE'.format(monitor=gisenv['MONITOR'].upper())]
+        cmd_file = gcore.parse_command('d.mon', flags='g')['cmd']
         d_cmd = 'd.to.rast'
-        for param, val in options.iteritems():
+        for param, val in options.items():
             if val:
                 d_cmd += " {param}={val}".format(param=param, val=val)
         if gcore.overwrite():
diff --git a/scripts/d.what.rast/d.what.rast.html b/scripts/d.what.rast/d.what.rast.html
index 9d009eb..d2b7f4d 100644
--- a/scripts/d.what.rast/d.what.rast.html
+++ b/scripts/d.what.rast/d.what.rast.html
@@ -19,4 +19,4 @@ The active monitor can be selected with <em>d.mon</em>.
 
 Anna Petrasova, <a href="http://gis.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>
 
-<p><i>Last changed: $Date: 2015-01-01 23:24:49 +0100 (Thu, 01 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-05 18:13:18 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/d.what.rast/d.what.rast.py b/scripts/d.what.rast/d.what.rast.py
index 94804b0..4a5bdf1 100644
--- a/scripts/d.what.rast/d.what.rast.py
+++ b/scripts/d.what.rast/d.what.rast.py
@@ -5,7 +5,7 @@
 # MODULE:    d.what.rast
 # AUTHOR(S): Anna Petrasova <kratochanna gmail.com>
 # PURPOSE:   Script for querying raster maps in d.mon
-# COPYRIGHT: (C) 2014 by the GRASS Development Team
+# COPYRIGHT: (C) 2014-2015 by the GRASS Development Team
 #
 #		This program is free software under the GNU General
 #		Public License (>=v2). Read the file COPYING that
@@ -30,9 +30,11 @@ def main():
     options, flags = gcore.parser()
     gisenv = gcore.gisenv()
     if 'MONITOR' in gisenv:
-        cmd_file = gisenv['MONITOR_{monitor}_CMDFILE'.format(monitor=gisenv['MONITOR'].upper())]
+        cmd_file = gcore.parse_command('d.mon', flags='g').get('cmd', None)
+        if not cmd_file:
+            gcore.fatal(_("Unable to open file '%s'") % cmd_file)
         dout_cmd = 'd.what.rast'
-        for param, val in options.iteritems():
+        for param, val in options.items():
             if val:
                 dout_cmd += " {param}={val}".format(param=param, val=val)
         with open(cmd_file, "a") as file_:
diff --git a/scripts/d.what.vect/d.what.vect.html b/scripts/d.what.vect/d.what.vect.html
index e360e9f..f59079e 100644
--- a/scripts/d.what.vect/d.what.vect.html
+++ b/scripts/d.what.vect/d.what.vect.html
@@ -19,4 +19,4 @@ The active monitor can be selected with <em>d.mon</em>.
 
 Anna Petrasova, <a href="http://gis.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>
 
-<p><i>Last changed: $Date: 2015-01-01 23:24:49 +0100 (Thu, 01 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-05 18:13:18 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/d.what.vect/d.what.vect.py b/scripts/d.what.vect/d.what.vect.py
index fa6d5e0..7dd0986 100644
--- a/scripts/d.what.vect/d.what.vect.py
+++ b/scripts/d.what.vect/d.what.vect.py
@@ -30,9 +30,11 @@ def main():
     options, flags = gcore.parser()
     gisenv = gcore.gisenv()
     if 'MONITOR' in gisenv:
-        cmd_file = gisenv['MONITOR_{monitor}_CMDFILE'.format(monitor=gisenv['MONITOR'].upper())]
+        cmd_file = gcore.parse_command('d.mon', flags='g').get('cmd', None)
+        if not cmd_file:
+            gcore.fatal(_("Unable to open file '%s'") % cmd_file)
         dout_cmd = 'd.what.vect'
-        for param, val in options.iteritems():
+        for param, val in options.items():
             if val:
                 dout_cmd += " {param}={val}".format(param=param, val=val)
         with open(cmd_file, "a") as file_:
diff --git a/scripts/db.dropcolumn/db.dropcolumn.py b/scripts/db.dropcolumn/db.dropcolumn.py
index 22bc319..52f7280 100755
--- a/scripts/db.dropcolumn/db.dropcolumn.py
+++ b/scripts/db.dropcolumn/db.dropcolumn.py
@@ -5,7 +5,7 @@
 # MODULE:       db.dropcolumn
 # AUTHOR(S):   	Markus Neteler
 #               Converted to Python by Glynn Clements
-# PURPOSE:      Interface to db.execute to drop a column from an 
+# PURPOSE:      Interface to db.execute to drop a column from an
 #               attribute table
 #               - with special trick for SQLite
 # COPYRIGHT:    (C) 2007, 2012 by Markus Neteler and the GRASS Development Team
@@ -36,10 +36,10 @@
 #%end
 
 import sys
-import os
 import string
-import grass.script as grass
+
 from grass.exceptions import CalledModuleError
+import grass.script as gscript
 
 
 def main():
@@ -48,66 +48,67 @@ def main():
     force = flags['f']
 
     # check if DB parameters are set, and if not set them.
-    grass.run_command('db.connect', flags = 'c')
+    gscript.run_command('db.connect', flags='c')
 
-    kv = grass.db_connection()
+    kv = gscript.db_connection()
     database = kv['database']
     driver = kv['driver']
     # schema needed for PG?
 
     if force:
-	grass.message(_("Forcing ..."))
+        gscript.message(_("Forcing ..."))
 
     if column == "cat":
-	grass.warning(_("Deleting <%s> column which may be needed to keep table connected to a vector map") % column)
+        gscript.warning(_("Deleting <%s> column which may be needed to keep "
+                          "table connected to a vector map") % column)
 
-    cols = [f[0] for f in grass.db_describe(table)['cols']]
+    cols = [f[0] for f in gscript.db_describe(table)['cols']]
     if column not in cols:
-	grass.fatal(_("Column <%s> not found in table") % column)
+        gscript.fatal(_("Column <%s> not found in table") % column)
 
     if not force:
-	grass.message(_("Column <%s> would be deleted.") % column)
-	grass.message("")
-	grass.message(_("You must use the force flag (-f) to actually remove it. Exiting."))
-	return 0
+        gscript.message(_("Column <%s> would be deleted.") % column)
+        gscript.message("")
+        gscript.message(_("You must use the force flag (-f) to actually "
+                          "remove it. Exiting."))
+        return 0
 
     if driver == "sqlite":
-	#echo "Using special trick for SQLite"
-	# http://www.sqlite.org/faq.html#q13
-	colnames = []
-	coltypes = []
-	for f in grass.db_describe(table)['cols']:
-	    if f[0] == column:
-		continue
-	    colnames.append(f[0])
-	    coltypes.append("%s %s" % (f[0], f[1]))
-
-	colnames = ", ".join(colnames)
-	coltypes = ", ".join(coltypes)
-
-	cmds = [
-	    "BEGIN TRANSACTION",
-	    "CREATE TEMPORARY TABLE ${table}_backup(${coldef})",
-	    "INSERT INTO ${table}_backup SELECT ${colnames} FROM ${table}",
-	    "DROP TABLE ${table}",
-	    "CREATE TABLE ${table}(${coldef})",
-	    "INSERT INTO ${table} SELECT ${colnames} FROM ${table}_backup",
-	    "DROP TABLE ${table}_backup",
-	    "COMMIT"
-	    ]
-	tmpl = string.Template(';\n'.join(cmds))
-	sql = tmpl.substitute(table = table, coldef = coltypes, colnames = colnames)
+        # echo "Using special trick for SQLite"
+        # http://www.sqlite.org/faq.html#q13
+        colnames = []
+        coltypes = []
+        for f in gscript.db_describe(table)['cols']:
+            if f[0] != column:
+                colnames.append(f[0])
+                coltypes.append("%s %s" % (f[0], f[1]))
+
+        colnames = ", ".join(colnames)
+        coltypes = ", ".join(coltypes)
+
+        cmds = [
+            "BEGIN TRANSACTION",
+            "CREATE TEMPORARY TABLE ${table}_backup(${coldef})",
+            "INSERT INTO ${table}_backup SELECT ${colnames} FROM ${table}",
+            "DROP TABLE ${table}",
+            "CREATE TABLE ${table}(${coldef})",
+            "INSERT INTO ${table} SELECT ${colnames} FROM ${table}_backup",
+            "DROP TABLE ${table}_backup",
+            "COMMIT"
+        ]
+        tmpl = string.Template(';\n'.join(cmds))
+        sql = tmpl.substitute(table=table, coldef=coltypes, colnames=colnames)
     else:
-	sql = "ALTER TABLE %s DROP COLUMN %s" % (table, column)
+        sql = "ALTER TABLE %s DROP COLUMN %s" % (table, column)
 
     try:
-        grass.write_command('db.execute', input = '-', database = database,
-                               driver = driver, stdin = sql)
+        gscript.write_command('db.execute', input='-', database=database,
+                              driver=driver, stdin=sql)
     except CalledModuleError:
-        grass.fatal(_("Cannot continue (problem deleting column)"))
+        gscript.fatal(_("Cannot continue (problem deleting column)"))
 
     return 0
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     sys.exit(main())
diff --git a/scripts/db.droptable/db.droptable.html b/scripts/db.droptable/db.droptable.html
index d94308b..d8f5759 100644
--- a/scripts/db.droptable/db.droptable.html
+++ b/scripts/db.droptable/db.droptable.html
@@ -62,4 +62,4 @@ Markus Neteler<br>
 Driver and database options added by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i>
+<i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/scripts/db.in.ogr/db.in.ogr.html b/scripts/db.in.ogr/db.in.ogr.html
index a141051..629ff03 100644
--- a/scripts/db.in.ogr/db.in.ogr.html
+++ b/scripts/db.in.ogr/db.in.ogr.html
@@ -74,4 +74,4 @@ db.in.ogr input=address.xls db_table=address_data
 Markus Neteler
 
 <p>
-<i>Last changed: $Date: 2015-12-17 15:41:28 +0100 (Thu, 17 Dec 2015) $</i>
+<i>Last changed: $Date: 2015-12-17 15:38:13 +0100 (Thu, 17 Dec 2015) $</i>
diff --git a/scripts/db.in.ogr/db.in.ogr.py b/scripts/db.in.ogr/db.in.ogr.py
index 0825e28..f74277c 100755
--- a/scripts/db.in.ogr/db.in.ogr.py
+++ b/scripts/db.in.ogr/db.in.ogr.py
@@ -72,74 +72,76 @@ def main():
     mapset = grass.gisenv()['MAPSET']
 
     if db_table:
-	input = db_table
+        input = db_table
 
     if not output:
-	tmpname = input.replace('.', '_')
-	output = grass.basename(tmpname)
+        tmpname = input.replace('.', '_')
+        output = grass.basename(tmpname)
 
     # check if table exists
     try:
         nuldev = file(os.devnull, 'w+')
-        s = grass.read_command('db.tables', flags = 'p', quiet=True, stderr=nuldev)
+        s = grass.read_command('db.tables', flags='p', quiet=True, stderr=nuldev)
         nuldev.close()
     except CalledModuleError:
         # check connection parameters, set if uninitialized
         grass.read_command('db.connect', flags='c')
-        s = grass.read_command('db.tables', flags = 'p', quiet=True)
-    
+        s = grass.read_command('db.tables', flags='p', quiet=True)
+
     for l in s.splitlines():
         if l == output:
             if grass.overwrite():
-                grass.warning(_("Table <%s> already exists and will be overwritten") % output)
-                grass.write_command('db.execute', input = '-', stdin = "DROP TABLE %s" % output)
+                grass.warning(_("Table <%s> already exists and will be "
+                                "overwritten") % output)
+                grass.write_command('db.execute', input='-',
+                                    stdin="DROP TABLE %s" % output)
                 break
             else:
                 grass.fatal(_("Table <%s> already exists") % output)
-                
+
     # treat DB as real vector map...
-    if db_table:
-	layer = db_table
-    else:
-	layer = None
+    layer = db_table if db_table else None
 
     vopts = {}
     if options['encoding']:
         vopts['encoding'] = options['encoding']
-    
+
     try:
         grass.run_command('v.in.ogr', flags='o', input=input, output=output,
                           layer=layer, quiet=True, **vopts)
     except CalledModuleError:
         if db_table:
-            grass.fatal(_("Input table <%s> not found or not readable") % input)
+            grass.fatal(
+                _("Input table <%s> not found or not readable") %
+                input)
         else:
             grass.fatal(_("Input DSN <%s> not found or not readable") % input)
 
     # rename ID col if requested from cat to new name
     if key:
-	grass.write_command('db.execute', quiet = True,
-                          input = '-', 
-			  stdin = "ALTER TABLE %s ADD COLUMN %s integer" % (output, key) )
-	grass.write_command('db.execute', quiet = True,
-                          input = '-', 
-			  stdin = "UPDATE %s SET %s=cat" % (output, key) )
+        grass.write_command('db.execute', quiet=True, input='-',
+                            stdin="ALTER TABLE %s ADD COLUMN %s integer" %
+                                  (output, key))
+        grass.write_command('db.execute', quiet=True, input='-',
+                            stdin="UPDATE %s SET %s=cat" % (output, key))
 
     # ... and immediately drop the empty geometry
-    vectfile = grass.find_file(output, element = 'vector', mapset = mapset)['file']
+    vectfile = grass.find_file(output, element='vector', mapset=mapset)['file']
     if not vectfile:
-	grass.fatal(_("Something went wrong. Should not happen"))
+        grass.fatal(_("Something went wrong. Should not happen"))
     else:
-	# remove the vector part
-	grass.run_command('v.db.connect', quiet = True, map = output, layer = '1', flags = 'd')
-	grass.run_command('g.remove', flags = 'f', quiet = True, type = 'vector', name = output)
+        # remove the vector part
+        grass.run_command('v.db.connect', quiet=True, map=output, layer='1',
+                          flags='d')
+        grass.run_command('g.remove', flags='f', quiet=True, type='vector',
+                          name=output)
 
     # get rid of superfluous auto-added cat column (and cat_ if present)
     nuldev = file(os.devnull, 'w+')
-    grass.run_command('db.dropcolumn', quiet = True, flags = 'f', table = output,
-		      column = 'cat', stdout = nuldev, stderr = nuldev)
+    grass.run_command('db.dropcolumn', quiet=True, flags='f', table=output,
+                      column='cat', stdout=nuldev, stderr=nuldev)
     nuldev.close()
-    
+
     records = grass.db_describe(output)['nrows']
     grass.message(_("Imported table <%s> with %d rows") % (output, records))
 
diff --git a/scripts/db.out.ogr/db.out.ogr.html b/scripts/db.out.ogr/db.out.ogr.html
index 3dc35d9..6f57fa0 100644
--- a/scripts/db.out.ogr/db.out.ogr.html
+++ b/scripts/db.out.ogr/db.out.ogr.html
@@ -52,4 +52,4 @@ echo "SELECT * FROM precip_30ynormals" | psql meteo
 Markus Neteler<br>
 Converted to Python by Glynn Clements
 
-<p><i>Last changed: $Date: 2014-12-02 23:12:33 +0100 (Tue, 02 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-02 23:10:00 +0100 (Tue, 02 Dec 2014) $</i>
diff --git a/scripts/db.out.ogr/db.out.ogr.py b/scripts/db.out.ogr/db.out.ogr.py
index 1c0cd2b..9ce9498 100755
--- a/scripts/db.out.ogr/db.out.ogr.py
+++ b/scripts/db.out.ogr/db.out.ogr.py
@@ -54,10 +54,10 @@
 #% required: no
 #%end
 
-import sys
 import os
+
 from grass.script.utils import try_remove, basename
-from grass.script import core as grass
+from grass.script import core as gcore
 from grass.exceptions import CalledModuleError
 
 
@@ -69,54 +69,52 @@ def main():
     table = options['table']
 
     if format.lower() == 'dbf':
-	format = "ESRI_Shapefile"
+        format = "ESRI_Shapefile"
 
     if format.lower() == 'csv':
-	olayer = basename(output, 'csv')
+        olayer = basename(output, 'csv')
     else:
-	olayer = None
+        olayer = None
 
-    #is there a simpler way of testing for --overwrite?
+    # is there a simpler way of testing for --overwrite?
     dbffile = input + '.dbf'
-    if os.path.exists(dbffile) and not grass.overwrite():
-	grass.fatal(_("File <%s> already exists") % dbffile)
+    if os.path.exists(dbffile) and not gcore.overwrite():
+        gcore.fatal(_("File <%s> already exists") % dbffile)
 
     if olayer:
         try:
-            grass.run_command('v.out.ogr', quiet=True, input=input, layer=layer,
-                              output=output,
-                              format=format, type='point,line,area',
-                              olayer=olayer)
+            gcore.run_command('v.out.ogr', quiet=True, input=input,
+                              layer=layer, output=output, format=format,
+                              type='point,line,area', olayer=olayer)
         except CalledModuleError:
-            grass.fatal(_("Module <%s> failed") % 'v.out.ogr')
+            gcore.fatal(_("Module <%s> failed") % 'v.out.ogr')
 
     else:
         try:
-            grass.run_command('v.out.ogr', quiet=True, input=input,
+            gcore.run_command('v.out.ogr', quiet=True, input=input,
                               layer=layer, output=output,
                               format=format, type='point,line,area')
         except CalledModuleError:
-            grass.fatal(_("Module <%s> failed") % 'v.out.ogr')
+            gcore.fatal(_("Module <%s> failed") % 'v.out.ogr')
 
     if format == "ESRI_Shapefile":
-	exts = ['shp', 'shx', 'prj']
-	if output.endswith('.dbf'):
-	    outname = basename(output, 'dbf')
-	    for ext in exts:
-		try_remove("%s.%s" % (outname, ext))
-	    outname += '.dbf'
-	else:
-	    for ext in exts:
-		try_remove(os.path.join(output, "%s.%s" % (input, ext)))
-	    outname = os.path.join(output, input + ".dbf")
+        exts = ['shp', 'shx', 'prj']
+        if output.endswith('.dbf'):
+            outname = basename(output, 'dbf')
+            for ext in exts:
+                try_remove("%s.%s" % (outname, ext))
+            outname += '.dbf'
+        else:
+            for ext in exts:
+                try_remove(os.path.join(output, "%s.%s" % (input, ext)))
+            outname = os.path.join(output, input + ".dbf")
     elif format.lower() == 'csv':
-	outname = output + '.csv'
+        outname = output + '.csv'
     else:
-	outname = input
+        outname = input
 
-    grass.message(_("Exported table <%s>") % outname)
+    gcore.message(_("Exported table <%s>") % outname)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     main()
-
diff --git a/scripts/db.test/db.test.py b/scripts/db.test/db.test.py
index 9ee2e5e..7889ba7 100755
--- a/scripts/db.test/db.test.py
+++ b/scripts/db.test/db.test.py
@@ -28,61 +28,62 @@
 
 import sys
 import os
-from grass.script import core as grass
+
+from grass.script import core as gcore
 from grass.script import db as grassdb
 from grass.exceptions import CalledModuleError
 
+
 def main():
     test_file = options['test']
 
-    expected = grass.tempfile()
-    result = grass.tempfile()
+    expected = gcore.tempfile()
+    result = gcore.tempfile()
 
     dbconn = grassdb.db_connection()
-    grass.message(_("Using DB driver: %s") % dbconn['driver'])
+    gcore.message(_("Using DB driver: %s") % dbconn['driver'])
 
     infile = os.path.join(os.environ['GISBASE'], 'etc', 'db.test', test_file)
     inf = file(infile)
 
     while True:
-	type = inf.readline()
-	if not type:
-	    break
-	type = type.rstrip('\r\n')
-
-	sql = inf.readline().rstrip('\r\n')
-	sys.stdout.write(sql + '\n')
+        type = inf.readline()
+        if not type:
+            break
+        type = type.rstrip('\r\n')
 
-	# Copy expected result to temp file
+        sql = inf.readline().rstrip('\r\n')
+        sys.stdout.write(sql + '\n')
 
+        # Copy expected result to temp file
         try:
             if type == 'X':
-                grass.write_command('db.execute', input = '-', stdin = sql + '\n')
+                gcore.write_command('db.execute', input='-', stdin=sql + '\n')
             else:
                 resf = file(result, 'w')
-                grass.write_command('db.select', input = '-', flags = 'c', stdin = sql + '\n', stdout = resf)
+                gcore.write_command('db.select', input='-', flags='c',
+                                    stdin=sql + '\n', stdout=resf)
                 resf.close()
 
         except CalledModuleError:
-            grass.error("EXECUTE: ******** ERROR ********")
+            gcore.error("EXECUTE: ******** ERROR ********")
         else:
-            grass.message(_("EXECUTE: OK"))
+            gcore.message(_("EXECUTE: OK"))
 
-	expf = file(expected, 'w')
-	while True:
-	    res = inf.readline().rstrip('\r\n')
-	    if not res:
-		break
-	    expf.write(res + '\n')
-	expf.close()
+        expf = file(expected, 'w')
+        while True:
+            res = inf.readline().rstrip('\r\n')
+            if not res:
+                break
+            expf.write(res + '\n')
+        expf.close()
 
-	if type == 'S':
-	    if grass.call(['diff', result, expected]) != 0:
-		grass.error("RESULT: ******** ERROR ********")
-	    else:
-		grass.message(_("RESULT: OK"))
+        if type == 'S':
+            if gcore.call(['diff', result, expected]) != 0:
+                gcore.error("RESULT: ******** ERROR ********")
+            else:
+                gcore.message(_("RESULT: OK"))
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     main()
-
diff --git a/scripts/db.univar/db.univar.html b/scripts/db.univar/db.univar.html
index ab3820e..ec47c8b 100644
--- a/scripts/db.univar/db.univar.html
+++ b/scripts/db.univar/db.univar.html
@@ -40,4 +40,4 @@ db.univar samples colum=heights
  Michael Barton, Arizona State University
 <p>and authors of <em>r.univar.sh</em>
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/db.univar/db.univar.py b/scripts/db.univar/db.univar.py
index c1242b3..1c9a008 100755
--- a/scripts/db.univar/db.univar.py
+++ b/scripts/db.univar/db.univar.py
@@ -56,25 +56,26 @@
 #%end
 
 import sys
-import os
 import atexit
 import math
 
-import grass.script as grass 
+import grass.script as gscript
+
 
 def cleanup():
     for ext in ['', '.sort']:
-        grass.try_remove(tmp + ext)
+        gscript.try_remove(tmp + ext)
+
 
 def sortfile(infile, outfile):
     inf = file(infile, 'r')
     outf = file(outfile, 'w')
 
-    if grass.find_program('sort', '--help'):
-        grass.run_command('sort', flags = 'n', stdin = inf, stdout = outf)
+    if gscript.find_program('sort', '--help'):
+        gscript.run_command('sort', flags='n', stdin=inf, stdout=outf)
     else:
         # FIXME: we need a large-file sorting function
-        grass.warning(_("'sort' not found: sorting in memory"))
+        gscript.warning(_("'sort' not found: sorting in memory"))
         lines = inf.readlines()
         for i in range(len(lines)):
             lines[i] = float(lines[i].rstrip('\r\n'))
@@ -85,9 +86,10 @@ def sortfile(infile, outfile):
     inf.close()
     outf.close()
 
+
 def main():
     global tmp
-    tmp = grass.tempfile()
+    tmp = gscript.tempfile()
 
     extend = flags['e']
     shellstyle = flags['g']
@@ -100,21 +102,22 @@ def main():
 
     perc = [float(p) for p in perc.split(',')]
 
-    desc_table = grass.db_describe(table, database=database, driver=driver)
+    desc_table = gscript.db_describe(table, database=database, driver=driver)
     if not desc_table:
-        grass.fatal(_("Unable to describe table <%s>") % table)
+        gscript.fatal(_("Unable to describe table <%s>") % table)
     found = False
     for cname, ctype, cwidth in desc_table['cols']:
         if cname == column:
             found = True
             if ctype not in ('INTEGER', 'DOUBLE PRECISION'):
-                grass.fatal(_("Column <%s> is not numeric") % cname)
+                gscript.fatal(_("Column <%s> is not numeric") % cname)
     if not found:
-        grass.fatal(_("Column <%s> not found in table <%s>") % (column, table))
+        gscript.fatal(_("Column <%s> not found in table <%s>") % (column, table))
 
     if not shellstyle:
-        grass.verbose(_("Calculation for column <%s> of table <%s>...") % (column, table))
-        grass.message(_("Reading column values..."))
+        gscript.verbose(_("Calculation for column <%s> of table <%s>..."
+                          ) % (column, table))
+        gscript.message(_("Reading column values..."))
 
     sql = "SELECT %s FROM %s" % (column, table)
     if where:
@@ -127,20 +130,20 @@ def main():
         driver = None
 
     tmpf = file(tmp, 'w')
-    grass.run_command('db.select', flags = 'c', table = table,
-        database = database, driver = driver, sql = sql,
-        stdout = tmpf)
+    gscript.run_command('db.select', flags='c', table=table,
+                        database=database, driver=driver, sql=sql,
+                        stdout=tmpf)
     tmpf.close()
 
     # check if result is empty
     tmpf = file(tmp)
     if tmpf.read(1) == '':
-        grass.fatal(_("Table <%s> contains no data.") % table)
+        gscript.fatal(_("Table <%s> contains no data.") % table)
         tmpf.close()
 
     # calculate statistics
     if not shellstyle:
-        grass.verbose(_("Calculating statistics..."))
+        gscript.verbose(_("Calculating statistics..."))
 
     N = 0
     sum = 0.0
@@ -151,8 +154,8 @@ def main():
 
     tmpf = file(tmp)
     for line in tmpf:
-	if len(line.rstrip('\r\n')) == 0:
-	    continue
+        if len(line.rstrip('\r\n')) == 0:
+            continue
         x = float(line.rstrip('\r\n'))
         N += 1
         sum += x
@@ -163,30 +166,43 @@ def main():
     tmpf.close()
 
     if N <= 0:
-        grass.fatal(_("No non-null values found"))
+        gscript.fatal(_("No non-null values found"))
 
     if not shellstyle:
-        sys.stdout.write("Number of values: %d\n"% N)
-        sys.stdout.write("Minimum: %.15g\n"% minv)
-        sys.stdout.write("Maximum: %.15g\n"% maxv)
-        sys.stdout.write("Range: %.15g\n"% (maxv - minv))
-        sys.stdout.write("Mean: %.15g\n"% (sum/N))
-        sys.stdout.write("Arithmetic mean of absolute values: %.15g\n"% (sum3/N))
-        sys.stdout.write("Variance: %.15g\n"% ((sum2 - sum*sum/N)/N))
-        sys.stdout.write("Standard deviation: %.15g\n"% (math.sqrt((sum2 - sum*sum/N)/N)))
-        sys.stdout.write("Coefficient of variation: %.15g\n"% ((math.sqrt((sum2 - sum*sum/N)/N))/(math.sqrt(sum*sum)/N)))
-        sys.stdout.write("Sum: %.15g\n"% sum)
+        sys.stdout.write("Number of values: %d\n" % N)
+        sys.stdout.write("Minimum: %.15g\n" % minv)
+        sys.stdout.write("Maximum: %.15g\n" % maxv)
+        sys.stdout.write("Range: %.15g\n" % (maxv - minv))
+        sys.stdout.write("Mean: %.15g\n" % (sum / N))
+        sys.stdout.write(
+            "Arithmetic mean of absolute values: %.15g\n" %
+            (sum3 / N))
+        sys.stdout.write("Variance: %.15g\n" % ((sum2 - sum * sum / N) / N))
+        sys.stdout.write(
+            "Standard deviation: %.15g\n" %
+            (math.sqrt((sum2 - sum * sum / N) / N)))
+        sys.stdout.write(
+            "Coefficient of variation: %.15g\n" %
+            ((math.sqrt((sum2 - sum * sum / N) / N)) /
+             (math.sqrt(sum * sum) / N)))
+        sys.stdout.write("Sum: %.15g\n" % sum)
     else:
-        sys.stdout.write("n=%d\n"% N)
-        sys.stdout.write("min=%.15g\n"% minv)
-        sys.stdout.write("max=%.15g\n"% maxv)
-        sys.stdout.write("range=%.15g\n"% (maxv - minv))
-        sys.stdout.write("mean=%.15g\n"% (sum/N))
-        sys.stdout.write("mean_abs=%.15g\n"% (sum3/N))
-        sys.stdout.write("variance=%.15g\n"% ((sum2 - sum*sum/N)/N))
-        sys.stdout.write("stddev=%.15g\n"% (math.sqrt((sum2 - sum*sum/N)/N)))
-        sys.stdout.write("coeff_var=%.15g\n"% ((math.sqrt((sum2 - sum*sum/N)/N))/(math.sqrt(sum*sum)/N)))
-        sys.stdout.write("sum=%.15g\n"% sum)
+        sys.stdout.write("n=%d\n" % N)
+        sys.stdout.write("min=%.15g\n" % minv)
+        sys.stdout.write("max=%.15g\n" % maxv)
+        sys.stdout.write("range=%.15g\n" % (maxv - minv))
+        sys.stdout.write("mean=%.15g\n" % (sum / N))
+        sys.stdout.write("mean_abs=%.15g\n" % (sum3 / N))
+        sys.stdout.write("variance=%.15g\n" % ((sum2 - sum * sum / N) / N))
+        sys.stdout.write(
+            "stddev=%.15g\n" %
+            (math.sqrt(
+                (sum2 - sum * sum / N) / N)))
+        sys.stdout.write(
+            "coeff_var=%.15g\n" %
+            ((math.sqrt((sum2 - sum * sum / N) / N)) /
+             (math.sqrt(sum * sum) / N)))
+        sys.stdout.write("sum=%.15g\n" % sum)
 
     if not extend:
         return
@@ -194,27 +210,26 @@ def main():
     # preparations:
     sortfile(tmp, tmp + ".sort")
 
-    number = N
     odd = N % 2
-    eostr = ['even','odd'][odd]
+    eostr = ['even', 'odd'][odd]
 
     q25pos = round(N * 0.25)
     if q25pos == 0:
-	q25pos = 1
+        q25pos = 1
     q50apos = round(N * 0.50)
     if q50apos == 0:
-	q50apos = 1
+        q50apos = 1
     q50bpos = q50apos + (1 - odd)
     q75pos = round(N * 0.75)
     if q75pos == 0:
-	q75pos = 1
+        q75pos = 1
 
     ppos = {}
     pval = {}
     for i in range(len(perc)):
         ppos[i] = round(N * perc[i] / 100)
-	if ppos[i] == 0:
-	    ppos[i] = 1
+        if ppos[i] == 0:
+            ppos[i] = 1
         pval[i] = 0
 
     inf = file(tmp + ".sort")
@@ -240,27 +255,45 @@ def main():
         sys.stdout.write("Median (%s N): %.15g\n" % (eostr, q50))
         sys.stdout.write("3rd Quartile: %.15g\n" % q75)
         for i in range(len(perc)):
-            if perc[i] == int(perc[i]): # integer
+            if perc[i] == int(perc[i]):  # integer
                 if int(perc[i]) % 10 == 1 and int(perc[i]) != 11:
-                    sys.stdout.write("%dst Percentile: %.15g\n"% (int(perc[i]), pval[i]))
+                    sys.stdout.write(
+                        "%dst Percentile: %.15g\n" %
+                        (int(
+                            perc[i]),
+                            pval[i]))
                 elif int(perc[i]) % 10 == 2 and int(perc[i]) != 12:
-                    sys.stdout.write("%dnd Percentile: %.15g\n"% (int(perc[i]), pval[i]))
+                    sys.stdout.write(
+                        "%dnd Percentile: %.15g\n" %
+                        (int(
+                            perc[i]),
+                            pval[i]))
                 elif int(perc[i]) % 10 == 3 and int(perc[i]) != 13:
-                    sys.stdout.write("%drd Percentile: %.15g\n"% (int(perc[i]), pval[i]))
+                    sys.stdout.write(
+                        "%drd Percentile: %.15g\n" %
+                        (int(
+                            perc[i]),
+                            pval[i]))
                 else:
-                    sys.stdout.write("%dth Percentile: %.15g\n"% (int(perc[i]), pval[i]))
+                    sys.stdout.write(
+                        "%dth Percentile: %.15g\n" %
+                        (int(
+                            perc[i]),
+                            pval[i]))
             else:
-                sys.stdout.write("%.15g Percentile: %.15g\n"% (perc[i], pval[i]))
+                sys.stdout.write(
+                    "%.15g Percentile: %.15g\n" %
+                    (perc[i], pval[i]))
     else:
-        sys.stdout.write("first_quartile=%.15g\n"% q25)
-        sys.stdout.write("median=%.15g\n"% q50)
-        sys.stdout.write("third_quartile=%.15g\n"% q75)
+        sys.stdout.write("first_quartile=%.15g\n" % q25)
+        sys.stdout.write("median=%.15g\n" % q50)
+        sys.stdout.write("third_quartile=%.15g\n" % q75)
         for i in range(len(perc)):
             percstr = "%.15g" % perc[i]
-            percstr = percstr.replace('.','_')
-            sys.stdout.write("percentile_%s=%.15g\n"% (percstr, pval[i]))
+            percstr = percstr.replace('.', '_')
+            sys.stdout.write("percentile_%s=%.15g\n" % (percstr, pval[i]))
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     atexit.register(cleanup)
     main()
diff --git a/scripts/g.extension.all/g.extension.all.html b/scripts/g.extension.all/g.extension.all.html
index db49fce..f690f9d 100644
--- a/scripts/g.extension.all/g.extension.all.html
+++ b/scripts/g.extension.all/g.extension.all.html
@@ -36,4 +36,4 @@ See also <a href="http://grasswiki.osgeo.org/wiki/GRASS_AddOns">GRASS Addons</a>
 Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-09-09 11:06:50 +0200 (Tue, 09 Sep 2014) $</i>
+<i>Last changed: $Date: 2014-09-09 11:05:01 +0200 (Tue, 09 Sep 2014) $</i>
diff --git a/scripts/g.extension.all/g.extension.all.py b/scripts/g.extension.all/g.extension.all.py
index 22f851b..8f4e1de 100644
--- a/scripts/g.extension.all/g.extension.all.py
+++ b/scripts/g.extension.all/g.extension.all.py
@@ -6,7 +6,7 @@
 #
 # AUTHOR(S):    Martin Landa <landa.martin gmail.com>
 #
-# PURPOSE:      Rebuilds or removes locally installed GRASS Addons extensions 
+# PURPOSE:      Rebuilds or removes locally installed GRASS Addons extensions
 #
 # COPYRIGHT:    (C) 2011-2013 by Martin Landa, and the GRASS Development Team
 #
@@ -35,23 +35,23 @@
 #% key: f
 #% label: Force operation (required for removal)
 #% end
-
+from __future__ import print_function
 import os
 import sys
 
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
 
-import grass.script as grass
+import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
 
 def get_extensions():
     addon_base = os.getenv('GRASS_ADDON_BASE')
     if not addon_base:
-        grass.fatal(_("%s not defined") % "GRASS_ADDON_BASE")
+        gscript.fatal(_("%s not defined") % "GRASS_ADDON_BASE")
     fXML = os.path.join(addon_base, 'modules.xml')
     if not os.path.exists(fXML):
         return []
@@ -60,51 +60,56 @@ def get_extensions():
     fo = open(fXML, 'r')
     try:
         tree = etree.fromstring(fo.read())
-    except StandardError as e:
-        grass.error(_("Unable to parse metadata file: %s") % e)
+    except Exception as e:
+        gscript.error(_("Unable to parse metadata file: %s") % e)
         fo.close()
         return []
-    
+
     fo.close()
-    
-    libgis_rev = grass.version()['libgis_revision']
+
+    libgis_rev = gscript.version()['libgis_revision']
     ret = list()
     for tnode in tree.findall('task'):
         gnode = tnode.find('libgis')
         if gnode is not None and \
                 gnode.get('revision', '') != libgis_rev:
             ret.append(tnode.get('name'))
-    
+
     return ret
 
+
 def main():
     remove = options['operation'] == 'remove'
     if remove or flags['f']:
-        extensions = grass.read_command('g.extension',
-                                        quiet = True, flags = 'a').splitlines()
+        extensions = gscript.read_command(
+            'g.extension',
+            quiet=True,
+            flags='a').splitlines()
     else:
         extensions = get_extensions()
-    
+
     if not extensions:
         if remove:
-            grass.info(_("No extension found. Nothing to remove."))
+            gscript.info(_("No extension found. Nothing to remove."))
         else:
-            grass.info(_("Nothing to rebuild. Rebuilding process can be forced with -f flag."))
+            gscript.info(
+                _("Nothing to rebuild. Rebuilding process can be forced with -f flag."))
         return 0
-    
+
     if remove and not flags['f']:
-        grass.message(_("List of extensions to be removed:"))
-        print os.linesep.join(extensions)
-        grass.message(_("You must use the force flag (-f) to actually remove them. Exiting."))
+        gscript.message(_("List of extensions to be removed:"))
+        print(os.linesep.join(extensions))
+        gscript.message(
+            _("You must use the force flag (-f) to actually remove them. Exiting."))
         return 0
-    
+
     for ext in extensions:
-        grass.message('-' * 60)
+        gscript.message('-' * 60)
         if remove:
-            grass.message(_("Removing extension <%s>...") % ext)
+            gscript.message(_("Removing extension <%s>...") % ext)
         else:
-            grass.message(_("Reinstalling extension <%s>...") % ext)
-        grass.message('-' * 60)
+            gscript.message(_("Reinstalling extension <%s>...") % ext)
+        gscript.message('-' * 60)
         if remove:
             operation = 'remove'
             operation_flags = 'f'
@@ -112,13 +117,13 @@ def main():
             operation = 'add'
             operation_flags = ''
         try:
-            grass.run_command('g.extension', flags=operation_flags,
-                              extension=ext, operation=operation)
+            gscript.run_command('g.extension', flags=operation_flags,
+                                extension=ext, operation=operation)
         except CalledModuleError:
-            grass.error(_("Unable to process extension:%s") % ext)
+            gscript.error(_("Unable to process extension:%s") % ext)
 
     return 0
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     sys.exit(main())
diff --git a/scripts/g.extension/g.extension.html b/scripts/g.extension/g.extension.html
index 121ac1b..6d44e2d 100644
--- a/scripts/g.extension/g.extension.html
+++ b/scripts/g.extension/g.extension.html
@@ -56,6 +56,63 @@ The place where the extensions are installed can be customized by
 the option <b>prefix</b>. Ensuring that these extensions will be accessible
 in GRASS GIS is in this case in the responsibility of the user.
 
+
+<h3>Source code sources and repositories</h3>
+
+<h4>GRASS GIS Addons SVN repository</h4>
+By default, <em>g.extension</em> installs extensions from the official
+GRASS GIS Addons SVN repository. However, different sources can be specified
+using the <b>url</b> option.
+
+<p>
+Individual extensions can also be installed by providing a URL to the
+source code on OSGeo Trac. This, however, works only for certain directories
+where the download of ZIP files was enabled by project administrators of
+the trac server.
+
+<h4>Local source code directory</h4>
+Optionally, new extension can be also installed from a source code placed
+in a local directory on disk. This is advantageous when developing
+a new module.
+To keep the directory clean, the directory content is copied
+to a temporary directory and the compilation happens there.
+
+<h4>Local source code ZIP file</h4>
+In addition, new extension can be also installed from a ZIP file
+or an archive file from the TAR family (e.g., <tt>.tar.gz</tt> or <tt>.bz2</tt>).
+The file can be on disk (specified with a path), or on web (specified by
+an URL).
+
+<h4>Online repositories: GitHub, GitLab and Bitbucket</h4>
+For well known general hosting services, namely GitHub, GitLab and Bitbucket,
+<em>g.extension</em> supports the download of a repository as a ZIP file.
+Here the user only needs to provide a base URL to the repository web page
+(with or without the <tt>https://</tt> part).
+For GitLab and Bitbucket, the latest source code in the default branch is 
+downloaded, for GitHub, the latest source code in the master branch is downloaded.
+Of course, a user can still specify the full URL of a ZIP file
+and install a specific branch or release in this way (ZIP file mechanism
+will be applied).
+
+<p>
+For the official repository, <em>g.extension</em> supports listing available
+extensions (addons) and few other metadata-related operations which
+depend on a specific infrastructure.
+For other sources and repositories, this is not supported because it is
+assumed that other sources contain only one extension, typically a module
+or group of modules.
+
+<h4>Needed directory layout</h4>
+When none of the above sources is identified, <em>g.extension</em> assumes
+that the source is a Subversion repository and uses the <em>svn</em> command
+line tool to obtain the source code. The expected structure of the repository
+should be the same as the one of the official repository.
+
+<p>
+Non-official sources are supported on all operating systems except for
+MS-Windows.
+
+
 <h3>Compilation and installation</h3>
 
 On MS-Windows systems, where compilation tools are typically not readily
@@ -122,6 +179,48 @@ Removal of a locally installed extension:
 g.extension extension=r.stream.distance operation=remove
 </pre></div>
 
+<h3>Installing from various online repositories: GitHub, GitLab, Bitbucket</h3>
+
+Simple URL to GitHub, GitLab, Bitbucket repositories:
+
+<div class="code"><pre>
+g.extension r.example url=github.com/johnsmith/r.example
+</pre></div>
+
+Simple URL to OSGeo Trac (downloads a ZIP file, requires download to be enabled in Trac):
+
+<div class="code"><pre>
+g.extension r.example url=trac.osgeo.org/.../r.example
+</pre></div>
+
+In general, when a ZIP file or other archive is provided, the full URL can be used:
+
+<div class="code"><pre>
+g.extension r.example url=http://example.com/.../r.example?format=zip
+</pre></div>
+
+Note that because of MS-Windows operating system architecture,
+only official repository is supported on this platform.
+
+<h3>Installing when writing a module locally</h3>
+
+Having source code of a GRASS module in a directory on disk
+one can install it using:
+
+<div class="code"><pre>
+g.extension r.example url=/local/directory/r.example/
+</pre></div>
+
+
+<h2>KNOWN ISSUES</h2>
+
+Toolboxes in the official repository cannot be downloaded.
+<p>
+On MS-Windows, only the official repository is working
+because there is no way of compiling the modules
+<!-- what does it mean?? -->
+(a Python replacement for Python scripts should be implemented).
+
 <h2>TROUBLESHOOTING</h2>
 
 Since extensions have to be compiled on Unix based systems (Linux, Mac OSX etc.)
@@ -149,7 +248,8 @@ with the version number) must be installed.
 <h2>AUTHORS</h2>
 
 Markus Neteler (original shell script)<br>
-Martin Landa, Czech Technical University in Prague, Czech Republic (Python rewrite)
+Martin Landa, Czech Technical University in Prague, Czech Republic (Python rewrite)<br>
+Vaclav Petras, <a href="http://gis.ncsu.edu/osgeorel/">NCSU OSGeoREL</a> (support for general sources, partial refactoring)
 
 <p>
-<i>Last changed: $Date: 2016-05-15 01:30:22 +0200 (Sun, 15 May 2016) $</i>
+<i>Last changed: $Date: 2016-05-15 01:30:07 +0200 (Sun, 15 May 2016) $</i>
diff --git a/scripts/g.extension/g.extension.py b/scripts/g.extension/g.extension.py
index cdb0bc9..1b78410 100644
--- a/scripts/g.extension/g.extension.py
+++ b/scripts/g.extension/g.extension.py
@@ -3,11 +3,10 @@
 ############################################################################
 #
 # MODULE:       g.extension
-# AUTHOR(S):    Markus Neteler
-#               Pythonized & upgraded for GRASS 7 by Martin Landa <landa.martin gmail.com>
-# PURPOSE:      Tool to download and install extensions from GRASS Addons SVN into
-#               local GRASS installation
-# COPYRIGHT:    (C) 2009-2014 by Markus Neteler, and the GRASS Development Team
+# AUTHOR(S):    Markus Neteler (original shell script)
+#               Martin Landa <landa.martin gmail com> (Pythonized & upgraded for GRASS 7)
+#               Vaclav Petras <wenzeslaus gmail com> (support for general sources)
+# PURPOSE:      Tool to download and install extensions into local installation
 #
 # COPYRIGHT:    (C) 2009-2016 by Markus Neteler, and the GRASS Development Team
 #
@@ -21,10 +20,12 @@
 
 #%module
 #% label: Maintains GRASS Addons extensions in local GRASS installation.
-#% description: Downloads, installs extensions from GRASS Addons SVN repository into local GRASS installation or removes installed extensions.
+#% description: Downloads and installs extensions from GRASS Addons repository or other source into the local GRASS installation or removes installed extensions.
 #% keyword: general
 #% keyword: installation
 #% keyword: extensions
+#% keyword: addons
+#% keyword: download
 #%end
 
 #%option
@@ -44,11 +45,11 @@
 #% answer: add
 #%end
 #%option
-#% key: svnurl
+#% key: url
 #% type: string
 #% key_desc: url
-#% description: SVN Addons repository URL
-#% answer: http://svn.osgeo.org/grass/grass-addons/grass7
+#% label: URL or directory to get the extension from (supported only on Linux and Mac)
+#% description: The official repository is used by default. User can specify a ZIP file, directory or a repository on common hosting services. If not identified, Subversion repository is assumed. See manual for all options.
 #%end
 #%option
 #% key: prefix
@@ -69,19 +70,19 @@
 
 #%flag
 #% key: l
-#% description: List available extensions in the GRASS Addons SVN repository
+#% description: List available extensions in the official GRASS GIS Addons repository
 #% guisection: Print
 #% suppress_required: yes
 #%end
 #%flag
 #% key: c
-#% description: List available extensions in the GRASS Addons SVN repository including module description
+#% description: List available extensions in the official GRASS GIS Addons repository including module description
 #% guisection: Print
 #% suppress_required: yes
 #%end
 #%flag
 #% key: g
-#% description: List available extensions in the GRASS Addons SVN repository (shell script style)
+#% description: List available extensions in the official GRASS GIS Addons repository (shell script style)
 #% guisection: Print
 #% suppress_required: yes
 #%end
@@ -119,10 +120,14 @@
 
 #%rules
 #% required: extension, -l, -c, -g, -a
-#% exclusive: extension, -l, -c, -g, -a
+#% exclusive: extension, -l, -c, -g
+#% exclusive: extension, -l, -c, -a
 #%end
 
+# TODO: solve addon-extension(-module) confusion
 
+
+from __future__ import print_function
 import os
 import sys
 import re
@@ -130,15 +135,29 @@ import atexit
 import shutil
 import zipfile
 import tempfile
+from distutils.dir_util import copy_tree
 
-from urllib2 import HTTPError
-from urllib import urlopen
+try:
+    from urllib2 import HTTPError, URLError
+    from urllib import urlopen, urlretrieve
+except ImportError:
+    # there is also HTTPException, perhaps change to list
+    from urllib.error import HTTPError, URLError
+    from urllib.request import urlopen, urlretrieve
 
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
-
+    import elementtree.ElementTree as etree  # Python <= 2.4
+# Get the XML parsing exceptions to catch. The behavior changed with Python 2.7
+# and ElementTree 1.3.
+from xml.parsers import expat  # TODO: works for any Python?
+if hasattr(etree, 'ParseError'):
+    ETREE_EXCEPTIONS = (etree.ParseError, expat.ExpatError)
+else:
+    ETREE_EXCEPTIONS = (expat.ExpatError)
+
+import grass.script as gscript
 from grass.script.utils import try_rmdir
 from grass.script import core as grass
 
@@ -146,150 +165,270 @@ from grass.script import core as grass
 REMOVE_TMPDIR = True
 PROXIES = {}
 
-# check requirements
+
+def etree_fromfile(filename):
+    """Create XML element tree from a given file name"""
+    with open(filename, 'r') as file_:
+        return etree.fromstring(file_.read())
+
+
+def etree_fromurl(url, proxies=None):
+    """Create XML element tree from a given URL"""
+    file_ = urlopen(url, proxies=proxies)
+    return etree.fromstring(file_.read())
+
+
 def check_progs():
-    for prog in ('svn', 'make', 'gcc'):
+    """Check if the necessary programs are available"""
+    # TODO: we need svn for the Subversion repo downloads
+    # also git would be tested once supported
+    for prog in ('make', 'gcc'):
         if not grass.find_program(prog, '--help'):
-            grass.fatal(_("'%s' required. Please install '%s' first.") % (prog, prog))
+            grass.fatal(_("'%s' required. Please install '%s' first.")
+                        % (prog, prog))
 
 # expand prefix to class name
-def expand_module_class_name(c):
-    name = { 'd'   : 'display',
-             'db'  : 'database',
-             'g'   : 'general',
-             'i'   : 'imagery',
-             'm'   : 'misc',
-             'ps'  : 'postscript',
-             'p'   : 'paint',
-             'r'   : 'raster',
-             'r3'  : 'raster3d',
-             's'   : 'sites',
-             't'   : 'temporal',
-             'v'   : 'vector',
-             'wx'  : 'gui/wxpython'
-             }
-
-    return name.get(c, c)
-
-# list installed extensions
-def get_installed_extensions(force = False):
+
+
+def expand_module_class_name(class_letters):
+    """Convert module class (family) letter or letters to class (family) name
+
+    The letter or letters are used in module names, e.g. r.slope.aspect.
+    The names are used in directories in Addons but also in the source code.
+
+    >>> expand_module_class_name('r')
+    'raster'
+    >>> expand_module_class_name('v')
+    'vector'
+    """
+    name = {
+        'd': 'display',
+        'db': 'database',
+        'g': 'general',
+        'i': 'imagery',
+        'm': 'misc',
+        'ps': 'postscript',
+        'p': 'paint',
+        'r': 'raster',
+        'r3': 'raster3d',
+        's': 'sites',
+        't': 'temporal',
+        'v': 'vector',
+        'wx': 'gui/wxpython'
+    }
+
+    return name.get(class_letters, class_letters)
+
+
+def get_module_class_name(module_name):
+    """Return class (family) name for a module
+
+    The names are used in directories in Addons but also in the source code.
+
+    >>> get_module_class_name('r.slope.aspect')
+    'raster'
+    >>> get_module_class_name('v.to.rast')
+    'vector'
+    """
+    classchar = module_name.split('.', 1)[0]
+    return expand_module_class_name(classchar)
+
+
+def get_installed_extensions(force=False):
+    """Get list of installed extensions or toolboxes (if -t is set)"""
     if flags['t']:
         return get_installed_toolboxes(force)
 
     return get_installed_modules(force)
 
 
-def get_installed_toolboxes(force = False):
-    fXML = os.path.join(options['prefix'], 'toolboxes.xml')
-    if not os.path.exists(fXML):
-        write_xml_toolboxes(fXML)
+def list_installed_extensions(toolboxes=False):
+    """List installed extensions"""
+    elist = get_installed_extensions()
+    if elist:
+        if toolboxes:
+            grass.message(_("List of installed extensions (toolboxes):"))
+        else:
+            grass.message(_("List of installed extensions (modules):"))
+        sys.stdout.write('\n'.join(elist))
+        sys.stdout.write('\n')
+    else:
+        if toolboxes:
+            grass.info(_("No extension (toolbox) installed"))
+        else:
+            grass.info(_("No extension (module) installed"))
 
+
+def get_installed_toolboxes(force=False):
+    """Get list of installed toolboxes
+
+    Writes toolboxes file if it does not exist.
+    Creates a new toolboxes file if it is not possible
+    to read the current one.
+    """
+    xml_file = os.path.join(options['prefix'], 'toolboxes.xml')
+    if not os.path.exists(xml_file):
+        write_xml_toolboxes(xml_file)
     # read XML file
-    fo = open(fXML, 'r')
     try:
-        tree = etree.fromstring(fo.read())
-    except:
-        os.remove(fXML)
-        write_xml_toolboxes(fXML)
+        tree = etree_fromfile(xml_file)
+    except ETREE_EXCEPTIONS + (OSError, IOError):
+        os.remove(xml_file)
+        write_xml_toolboxes(xml_file)
         return []
-    fo.close()
-
     ret = list()
     for tnode in tree.findall('toolbox'):
         ret.append(tnode.get('code'))
-
     return ret
 
 
-def get_installed_modules(force = False):
-    fXML = os.path.join(options['prefix'], 'modules.xml')
-    if not os.path.exists(fXML):
+def get_installed_modules(force=False):
+    """Get list of installed modules.
+
+    Writes modules file if it does not exist and *force* is set to ``True``.
+    Creates a new modules file if it is not possible
+    to read the current one.
+    """
+    xml_file = os.path.join(options['prefix'], 'modules.xml')
+    if not os.path.exists(xml_file):
         if force:
-            write_xml_modules(fXML)
+            write_xml_modules(xml_file)
         else:
             grass.debug(1, "No addons metadata file available")
         return []
-
     # read XML file
-    fo = open(fXML, 'r')
     try:
-        tree = etree.fromstring(fo.read())
-    except:
-        os.remove(fXML)
-        write_xml_modules(fXML)
+        tree = etree_fromfile(xml_file)
+    except ETREE_EXCEPTIONS + (OSError, IOError):
+        os.remove(xml_file)
+        write_xml_modules(xml_file)
         return []
-    fo.close()
-
     ret = list()
     for tnode in tree.findall('task'):
-        ret.append(tnode.get('name').strip())
+        if flags['g']:
+            desc, keyw = get_optional_params(tnode)
+            ret.append('name={}'.format(tnode.get('name').strip()))
+            ret.append('description={}'.format(desc))
+            ret.append('keywords={}'.format(keyw))
+            ret.append('executables={}'.format(','.join(
+                get_module_executables(tnode))
+            ))
+        else:
+            ret.append(tnode.get('name').strip())
 
     return ret
 
 # list extensions (read XML file from grass.osgeo.org/addons)
+
+
 def list_available_extensions(url):
+    """List available extensions/modules or toolboxes (if -t is given)
+
+    For toolboxes it lists also all modules.
+    """
+    gscript.debug("list_available_extensions(url={})".format(url))
     if flags['t']:
         grass.message(_("List of available extensions (toolboxes):"))
-        tlist = list_available_toolboxes(url)
-        for toolbox_code, toolbox_data in tlist.iteritems():
+        tlist = get_available_toolboxes(url)
+        for toolbox_code, toolbox_data in tlist.items():
             if flags['g']:
-                print 'toolbox_name=' + toolbox_data['name']
-                print 'toolbox_code=' + toolbox_code
+                print('toolbox_name=' + toolbox_data['name'])
+                print('toolbox_code=' + toolbox_code)
             else:
-                print '%s (%s)' % (toolbox_data['name'], toolbox_code)
+                print('%s (%s)' % (toolbox_data['name'], toolbox_code))
             if flags['c'] or flags['g']:
                 list_available_modules(url, toolbox_data['modules'])
             else:
                 if toolbox_data['modules']:
-                    print os.linesep.join(map(lambda x: '* ' + x, toolbox_data['modules']))
+                    print(os.linesep.join(['* ' + x for x in toolbox_data['modules']]))
     else:
         grass.message(_("List of available extensions (modules):"))
         list_available_modules(url)
 
 
-def list_available_toolboxes(url):
+def get_available_toolboxes(url):
+    """Return toolboxes available in the repository"""
     tdict = dict()
     url = url + "toolboxes.xml"
     try:
-        f = urlopen(url, proxies=PROXIES)
-        tree = etree.fromstring(f.read())
+        tree = etree_fromurl(url, proxies=PROXIES)
         for tnode in tree.findall('toolbox'):
             mlist = list()
             clist = list()
-            tdict[tnode.get('code')] = { 'name' : tnode.get('name'),
-                                         'correlate' : clist,
-                                         'modules' : mlist }
+            tdict[tnode.get('code')] = {'name': tnode.get('name'),
+                                        'correlate': clist,
+                                        'modules': mlist}
 
             for cnode in tnode.findall('correlate'):
                 clist.append(cnode.get('name'))
 
             for mnode in tnode.findall('task'):
                 mlist.append(mnode.get('name'))
-    except HTTPError:
+    except (HTTPError, IOError, OSError):
         grass.fatal(_("Unable to fetch addons metadata file"))
 
     return tdict
 
 
 def get_toolbox_modules(url, name):
+    """Get modules inside a toolbox in toolbox file at given URL
+
+    :param url: URL of the directory (file name will be attached)
+    :param name: toolbox name
+    """
     tlist = list()
 
     url = url + "toolboxes.xml"
 
     try:
-        f = urlopen(url, proxies=PROXIES)
-        tree = etree.fromstring(f.read())
+        tree = etree_fromurl(url, proxies=PROXIES)
         for tnode in tree.findall('toolbox'):
             if name == tnode.get('code'):
                 for mnode in tnode.findall('task'):
                     tlist.append(mnode.get('name'))
                 break
-    except HTTPError:
+    except (HTTPError, IOError, OSError):
         grass.fatal(_("Unable to fetch addons metadata file"))
 
     return tlist
 
+
+def get_module_files(mnode):
+    """Return list of module files
+
+    :param mnode: XML node for a module
+    """
+    flist = []
+    for file_node in mnode.find('binary').findall('file'):
+        filepath = file_node.text
+        flist.append(filepath)
+
+    return flist
+
+
+def get_module_executables(mnode):
+    """Return list of module executables
+
+    :param mnode: XML node for a module
+    """
+    flist = []
+    for filepath in get_module_files(mnode):
+        if filepath.startswith(options['prefix'] + os.path.sep + 'bin') or \
+           (sys.platform != 'win32' and
+                filepath.startswith(options['prefix'] + os.path.sep + 'scripts')):
+            filename = os.path.basename(filepath)
+            if sys.platform == 'win32':
+                filename = os.path.splitext(filename)[0]
+            flist.append(filename)
+
+    return flist
+
+
 def get_optional_params(mnode):
+    """Return description and keywords as a tuple
+
+    :param mnode: XML node for a module
+    """
     try:
         desc = mnode.find('description').text
     except AttributeError:
@@ -305,89 +444,123 @@ def get_optional_params(mnode):
 
     return desc, keyw
 
-def list_available_modules(url, mlist = None):
-    # try to download XML metadata file first
-    url = url + "modules.xml"
-    grass.debug("url=%s" % url, 1)
+
+def list_available_modules(url, mlist=None):
+    """List modules available in the repository
+
+    Tries to use XML metadata file first. Fallbacks to HTML page with a list.
+
+    :param url: URL of the directory (file name will be attached)
+    :param mlist: list only modules in this list
+    """
+    file_url = url + "modules.xml"
+    grass.debug("url=%s" % file_url, 1)
     try:
-        f = urlopen(url, proxies=PROXIES)
-        try:
-            tree = etree.fromstring(f.read())
-        except:
-            grass.warning(_("Unable to parse '%s'. Trying to scan SVN repository (may take some time)...") % url)
-            list_available_extensions_svn()
-            return
-
-        for mnode in tree.findall('task'):
-            name = mnode.get('name').strip()
-            if mlist and name not in mlist:
-                continue
-            if flags['c'] or flags['g']:
-                desc, keyw = get_optional_params(mnode)
+        tree = etree_fromurl(file_url, proxies=PROXIES)
+    except ETREE_EXCEPTIONS:
+        grass.warning(_("Unable to parse '%s'. Trying to scan"
+                        " SVN repository (may take some time)...") % file_url)
+        list_available_extensions_svn(url)
+        return
+    except (HTTPError, URLError, IOError, OSError):
+        list_available_extensions_svn(url)
+        return
 
-            if flags['g']:
-                print 'name=' + name
-                print 'description=' + desc
-                print 'keywords=' + keyw
-            elif flags['c']:
-                if mlist:
-                    print '*',
-                print name + ' - ' + desc
-            else:
-                print name
-    except HTTPError:
-        list_available_extensions_svn()
+    for mnode in tree.findall('task'):
+        name = mnode.get('name').strip()
+        if mlist and name not in mlist:
+            continue
+        if flags['c'] or flags['g']:
+            desc, keyw = get_optional_params(mnode)
+
+        if flags['g']:
+            print('name=' + name)
+            print('description=' + desc)
+            print('keywords=' + keyw)
+        elif flags['c']:
+            if mlist:
+                print('*', end='')
+            print(name + ' - ' + desc)
+        else:
+            print(name)
+
+
+# TODO: this is now broken/dead code, SVN is basically not used
+# fallback for Trac should parse Trac HTML page
+# this might be useful for potential SVN repos or anything
+# which would list the extensions/addons as list
+# TODO: fail when nothing is accessible
+def list_available_extensions_svn(url):
+    """List available extensions from HTML given by URL
+
+    Filename is generated based on the module class/family.
+    This works well for the structure which is in grass-addons repository.
+
+    ``<li><a href=...`` is parsed to find module names.
+    This works well for HTML page generated by Subversion.
 
-# list extensions (scan SVN repo)
-def list_available_extensions_svn():
-    grass.message(_('Fetching list of extensions from GRASS-Addons SVN repository (be patient)...'))
+    :param url: a directory URL (filename will be attached)
+    """
+    gscript.debug("list_available_extensions_svn(url=%s)" % url, 2)
+    grass.message(_('Fetching list of extensions from'
+                    ' GRASS-Addons SVN repository (be patient)...'))
     pattern = re.compile(r'(<li><a href=".+">)(.+)(</a></li>)', re.IGNORECASE)
 
     if flags['c']:
-        grass.warning(_("Flag 'c' ignored, addons metadata file not available"))
+        grass.warning(
+            _("Flag 'c' ignored, addons metadata file not available"))
     if flags['g']:
-        grass.warning(_("Flag 'g' ignored, addons metadata file not available"))
+        grass.warning(
+            _("Flag 'g' ignored, addons metadata file not available"))
 
-    prefix = ['d', 'db', 'g', 'i', 'm', 'ps',
-              'p', 'r', 'r3', 's', 't', 'v']
-    for d in prefix:
-        modclass = expand_module_class_name(d)
+    prefixes = ['d', 'db', 'g', 'i', 'm', 'ps',
+                'p', 'r', 'r3', 's', 't', 'v']
+    for prefix in prefixes:
+        modclass = expand_module_class_name(prefix)
         grass.verbose(_("Checking for '%s' modules...") % modclass)
 
-        url = '%s/%s' % (options['svnurl'], modclass)
-        grass.debug("url = %s" % url, debug = 2)
+        # construct a full URL of a file
+        file_url = '%s/%s' % (url, modclass)
+        grass.debug("url = %s" % file_url, debug=2)
         try:
-            f = urlopen(url, proxies=PROXIES)
-        except HTTPError:
-            grass.debug(_("Unable to fetch '%s'") % url, debug = 1)
+            file_ = urlopen(file_url, proxies=PROXIES)
+        except (HTTPError, IOError, OSError):
+            grass.debug(_("Unable to fetch '%s'") % file_url, debug=1)
             continue
 
-        for line in f.readlines():
+        for line in file_.readlines():
             # list extensions
             sline = pattern.search(line)
             if not sline:
                 continue
             name = sline.group(2).rstrip('/')
-            if name.split('.', 1)[0] == d:
-                print name
+            if name.split('.', 1)[0] == prefix:
+                print(name)
 
-    # get_wxgui_extensions()
+    # get_wxgui_extensions(url)
 
-# list wxGUI extensions
-def get_wxgui_extensions():
+
+# TODO: this is a dead code, not clear why not used, but seems not needed
+def get_wxgui_extensions(url):
+    """Return list of extensions/addons in wxGUI directory at given URL
+
+    :param url: a directory URL (filename will be attached)
+    """
     mlist = list()
-    grass.debug('Fetching list of wxGUI extensions from GRASS-Addons SVN repository (be patient)...')
+    grass.debug('Fetching list of wxGUI extensions from '
+                'GRASS-Addons SVN repository (be patient)...')
     pattern = re.compile(r'(<li><a href=".+">)(.+)(</a></li>)', re.IGNORECASE)
     grass.verbose(_("Checking for '%s' modules...") % 'gui/wxpython')
 
-    url = '%s/%s' % (options['svnurl'], 'gui/wxpython')
-    grass.debug("url = %s" % url, debug = 2)
-    f = urlopen(url, proxies=PROXIES)
-    if not f:
+    # construct a full URL of a file
+    url = '%s/%s' % (url, 'gui/wxpython')
+    grass.debug("url = %s" % url, debug=2)
+    file_ = urlopen(url, proxies=PROXIES)
+    if not file_:
         grass.warning(_("Unable to fetch '%s'") % url)
         return
 
-    for line in f.readlines():
+    for line in file.readlines():
         # list extensions
         sline = pattern.search(line)
         if not sline:
@@ -400,82 +573,101 @@ def get_wxgui_extensions():
 
 
 def cleanup():
+    """Cleanup after the downloads and copilation"""
     if REMOVE_TMPDIR:
         try_rmdir(TMPDIR)
     else:
         grass.message("\n%s\n" % _("Path to the source code:"))
         sys.stderr.write('%s\n' % os.path.join(TMPDIR, options['extension']))
 
-# write out meta-file
-def write_xml_modules(name, tree = None):
-    fo = open(name, 'w')
-    fo.write('<?xml version="1.0" encoding="UTF-8"?>\n')
-    fo.write('<!DOCTYPE task SYSTEM "grass-addons.dtd">\n')
-    fo.write('<addons version="%s">\n' % version[0])
 
-    libgisRev = grass.version()['libgis_revision']
+def write_xml_modules(name, tree=None):
+    """Write element tree as a modules matadata file
+
+    If the *tree* is not given, an empty file is created.
+
+    :param name: file name
+    :param tree: XML element tree
+    """
+    file_ = open(name, 'w')
+    file_.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+    file_.write('<!DOCTYPE task SYSTEM "grass-addons.dtd">\n')
+    file_.write('<addons version="%s">\n' % version[0])
+
+    libgis_revison = grass.version()['libgis_revision']
     if tree is not None:
         for tnode in tree.findall('task'):
             indent = 4
-            fo.write('%s<task name="%s">\n' % (' ' * indent, tnode.get('name')))
+            file_.write('%s<task name="%s">\n' %
+                        (' ' * indent, tnode.get('name')))
             indent += 4
-            fo.write('%s<description>%s</description>\n' % \
-                         (' ' * indent, tnode.find('description').text))
-            fo.write('%s<keywords>%s</keywords>\n' % \
-                         (' ' * indent, tnode.find('keywords').text))
+            file_.write('%s<description>%s</description>\n' %
+                        (' ' * indent, tnode.find('description').text))
+            file_.write('%s<keywords>%s</keywords>\n' %
+                        (' ' * indent, tnode.find('keywords').text))
             bnode = tnode.find('binary')
             if bnode is not None:
-                fo.write('%s<binary>\n' % (' ' * indent))
+                file_.write('%s<binary>\n' % (' ' * indent))
                 indent += 4
                 for fnode in bnode.findall('file'):
-                    fo.write('%s<file>%s</file>\n' % \
-                                 (' ' * indent, os.path.join(options['prefix'], fnode.text)))
+                    file_.write('%s<file>%s</file>\n' %
+                                (' ' * indent, os.path.join(options['prefix'],
+                                                            fnode.text)))
                 indent -= 4
-                fo.write('%s</binary>\n' % (' ' * indent))
-            fo.write('%s<libgis revision="%s" />\n' % \
-                         (' ' * indent, libgisRev))
+                file_.write('%s</binary>\n' % (' ' * indent))
+            file_.write('%s<libgis revision="%s" />\n' %
+                        (' ' * indent, libgis_revison))
             indent -= 4
-            fo.write('%s</task>\n' % (' ' * indent))
+            file_.write('%s</task>\n' % (' ' * indent))
+
+    file_.write('</addons>\n')
+    file_.close()
 
-    fo.write('</addons>\n')
-    fo.close()
 
+def write_xml_toolboxes(name, tree=None):
+    """Write element tree as a toolboxes matadata file
 
-def write_xml_toolboxes(name, tree = None):
-    fo = open(name, 'w')
-    fo.write('<?xml version="1.0" encoding="UTF-8"?>\n')
-    fo.write('<!DOCTYPE toolbox SYSTEM "grass-addons.dtd">\n')
-    fo.write('<addons version="%s">\n' % version[0])
+    If the *tree* is not given, an empty file is created.
+
+    :param name: file name
+    :param tree: XML element tree
+    """
+    file_ = open(name, 'w')
+    file_.write('<?xml version="1.0" encoding="UTF-8"?>\n')
+    file_.write('<!DOCTYPE toolbox SYSTEM "grass-addons.dtd">\n')
+    file_.write('<addons version="%s">\n' % version[0])
     if tree is not None:
         for tnode in tree.findall('toolbox'):
             indent = 4
-            fo.write('%s<toolbox name="%s" code="%s">\n' % \
-                         (' ' * indent, tnode.get('name'), tnode.get('code')))
+            file_.write('%s<toolbox name="%s" code="%s">\n' %
+                        (' ' * indent, tnode.get('name'), tnode.get('code')))
             indent += 4
             for cnode in tnode.findall('correlate'):
-                fo.write('%s<correlate code="%s" />\n' % \
-                         (' ' * indent, tnode.get('code')))
+                file_.write('%s<correlate code="%s" />\n' %
+                            (' ' * indent, tnode.get('code')))
             for mnode in tnode.findall('task'):
-                fo.write('%s<task name="%s" />\n' % \
-                         (' ' * indent, mnode.get('name')))
+                file_.write('%s<task name="%s" />\n' %
+                            (' ' * indent, mnode.get('name')))
             indent -= 4
-            fo.write('%s</toolbox>\n' % (' ' * indent))
+            file_.write('%s</toolbox>\n' % (' ' * indent))
+
+    file_.write('</addons>\n')
+    file_.close()
 
-    fo.write('</addons>\n')
-    fo.close()
 
-# install extension - toolbox or module
-def install_extension(url):
+def install_extension(source, url, xmlurl):
+    """Install extension (e.g. one module) or a toolbox (list of modules)"""
     gisbase = os.getenv('GISBASE')
     if not gisbase:
         grass.fatal(_('$GISBASE not defined'))
 
-    if options['extension'] in get_installed_extensions(force = True):
-        grass.warning(_("Extension <%s> already installed. Re-installing...") % options['extension'])
+    if options['extension'] in get_installed_extensions(force=True):
+        grass.warning(_("Extension <%s> already installed. Re-installing...") %
+                      options['extension'])
 
     if flags['t']:
         grass.message(_("Installing toolbox <%s>...") % options['extension'])
-        mlist = get_toolbox_modules(url, options['extension'])
+        mlist = get_toolbox_modules(xmlurl, options['extension'])
     else:
         mlist = [options['extension']]
     if not mlist:
@@ -487,36 +679,48 @@ def install_extension(url):
         if sys.platform == "win32":
             ret += install_extension_win(module)
         else:
-            ret += install_extension_other(module)
+            ret += install_extension_std_platforms(module,
+                                                   source=source, url=url)
         if len(mlist) > 1:
-            print '-' * 60
+            print('-' * 60)
 
     if flags['d']:
         return
 
     if ret != 0:
-        grass.warning(_('Installation failed, sorry. Please check above error messages.'))
+        grass.warning(_('Installation failed, sorry.'
+                        ' Please check above error messages.'))
     else:
-        grass.message(_("Updating addons metadata file..."))
-        blist = install_extension_xml(url, mlist)
-        for module in blist:
+        # for now it is reasonable to assume that only official source
+        # will provide the metadata file
+        if source == 'official':
+            grass.message(_("Updating addons metadata file..."))
+            blist = install_extension_xml(xmlurl, mlist)
+        # the blist was used here, but it seems that it is the same as mlist
+        for module in mlist:
             update_manual_page(module)
 
-        grass.message(_("Installation of <%s> successfully finished") % options['extension'])
+        grass.message(_("Installation of <%s> successfully finished") %
+                      options['extension'])
 
     if not os.getenv('GRASS_ADDON_BASE'):
-        grass.warning(_('This add-on module will not function until you set the '
-                        'GRASS_ADDON_BASE environment variable (see "g.manual variables")'))
+        grass.warning(_('This add-on module will not function until'
+                        ' you set the GRASS_ADDON_BASE environment'
+                        ' variable (see "g.manual variables")'))
 
-# update local meta-file when installing new extension (toolbox / modules)
-def install_toolbox_xml(url, name):
-    # read metadata from remote server (toolboxes)
-    url = url + "toolboxes.xml"
 
+def get_toolboxes_metadata(url):
+    """Return metadata for all toolboxes from given URL
+
+    :param url: URL of a modules matadata file
+    :param mlist: list of modules to get metadata for
+    :returns: tuple where first item is dictionary with module names as keys
+        and dictionary with dest, keyw, files keys as value, the second item
+        is list of 'binary' files (installation files)
+    """
     data = dict()
     try:
-        f = urlopen(url, proxies=PROXIES)
-        tree = etree.fromstring(f.read())
+        tree = etree_fromurl(url, proxies=PROXIES)
         for tnode in tree.findall('toolbox'):
             clist = list()
             for cnode in tnode.findall('correlate'):
@@ -528,13 +732,21 @@ def install_toolbox_xml(url, name):
 
             code = tnode.get('code')
             data[code] = {
-                'name'      : tnode.get('name'),
-                'correlate' : clist,
-                'modules'   : mlist,
-                }
-    except HTTPError:
-        grass.error(_("Unable to read addons metadata file from the remote server"))
+                'name': tnode.get('name'),
+                'correlate': clist,
+                'modules': mlist,
+            }
+    except (HTTPError, IOError, OSError):
+        grass.error(_("Unable to read addons metadata file "
+                      "from the remote server"))
+    return data
+
 
+def install_toolbox_xml(url, name):
+    """Update local toolboxes metadata file"""
+    # read metadata from remote server (toolboxes)
+    url = url + "toolboxes.xml"
+    data = get_toolboxes_metadata(url)
     if not data:
         grass.warning(_("No addons metadata available"))
         return
@@ -542,15 +754,14 @@ def install_toolbox_xml(url, name):
         grass.warning(_("No addons metadata available for <%s>") % name)
         return
 
-    fXML = os.path.join(options['prefix'], 'toolboxes.xml')
+    xml_file = os.path.join(options['prefix'], 'toolboxes.xml')
     # create an empty file if not exists
-    if not os.path.exists(fXML):
-        write_xml_modules(fXML)
+    if not os.path.exists(xml_file):
+        write_xml_modules(xml_file)
 
     # read XML file
-    fo = open(fXML, 'r')
-    tree = etree.fromstring(fo.read())
-    fo.close()
+    with open(xml_file, 'r') as xml:
+        tree = etree.fromstring(xml.read())
 
     # update tree
     tnode = None
@@ -568,82 +779,94 @@ def install_toolbox_xml(url, name):
             tnode.remove(mnode)
     else:
         # create new node for task
-        tnode = etree.Element('toolbox', attrib = { 'name' : tdata['name'], 'code' : name })
+        tnode = etree.Element(
+            'toolbox', attrib={'name': tdata['name'], 'code': name})
         tree.append(tnode)
 
     for cname in tdata['correlate']:
-        cnode = etree.Element('correlate', attrib = { 'code' : cname })
+        cnode = etree.Element('correlate', attrib={'code': cname})
         tnode.append(cnode)
     for tname in tdata['modules']:
-        mnode = etree.Element('task', attrib = { 'name' : tname })
+        mnode = etree.Element('task', attrib={'name': tname})
         tnode.append(mnode)
 
-    write_xml_toolboxes(fXML, tree)
+    write_xml_toolboxes(xml_file, tree)
 
-# return list of executables for update_manual_page()
-def install_extension_xml(url, mlist):
-    if len(mlist) > 1:
-        # read metadata from remote server (toolboxes)
-        install_toolbox_xml(url, options['extension'])
 
-    # read metadata from remote server (modules)
-    url = url + "modules.xml"
+def get_addons_metadata(url, mlist):
+    """Return metadata for list of modules from given URL
 
+    :param url: URL of a modules matadata file
+    :param mlist: list of modules to get metadata for
+    :returns: tuple where first item is dictionary with module names as keys
+        and dictionary with dest, keyw, files keys as value, the second item
+        is list of 'binary' files (installation files)
+    """
     data = {}
-    bList = []
+    bin_list = []
     try:
-        f = urlopen(url, proxies=PROXIES)
-        try:
-            tree = etree.fromstring(f.read())
-        except:
-            grass.warning(_("Unable to parse '%s'. Addons metadata file not updated.") % url)
-            return bList
-
-        for mnode in tree.findall('task'):
-            name = mnode.get('name')
-            if name not in mlist:
-                continue
+        tree = etree_fromurl(url, proxies=PROXIES)
+    except (HTTPError, URLError, IOError, OSError) as error:
+        grass.error(_("Unable to read addons metadata file"
+                      " from the remote server: {}").format(error))
+        return data, bin_list
+    except ETREE_EXCEPTIONS as error:
+        grass.warning(_("Unable to parse '%s': {}").format(error) % url)
+        return data, bin_list
+    for mnode in tree.findall('task'):
+        name = mnode.get('name')
+        if name not in mlist:
+            continue
+        file_list = list()
+        bnode = mnode.find('binary')
+        windows = sys.platform == 'win32'
+        if bnode is not None:
+            for fnode in bnode.findall('file'):
+                path = fnode.text.split('/')
+                if path[0] == 'bin':
+                    bin_list.append(path[-1])
+                    if windows:
+                        path[-1] += '.exe'
+                elif path[0] == 'scripts':
+                    bin_list.append(path[-1])
+                    if windows:
+                        path[-1] += '.py'
+                file_list.append(os.path.sep.join(path))
+        desc, keyw = get_optional_params(mnode)
+        data[name] = {
+            'desc': desc,
+            'keyw': keyw,
+            'files': file_list,
+        }
+    return data, bin_list
 
-            fList = list()
-            bnode = mnode.find('binary')
-            windows = sys.platform == 'win32'
-            if bnode is not None:
-                for fnode in bnode.findall('file'):
-                    path = fnode.text.split('/')
-                    if path[0] == 'bin':
-                        bList.append(path[-1])
-                        if windows:
-                            path[-1] += '.exe'
-                    elif path[0] == 'scripts':
-                        bList.append(path[-1])
-                        if windows:
-                            path[-1] += '.py'
-                    fList.append(os.path.sep.join(path))
 
-            desc, keyw = get_optional_params(mnode)
+def install_extension_xml(url, mlist):
+    """Update XML files with metadata about installed modules and toolbox
 
-            data[name] = {
-                'desc'  : desc,
-                'keyw'  : keyw,
-                'files' : fList,
-                }
+    Uses the remote/repository XML files for modules to obtain the metadata.
 
-    except:
-        grass.error(_("Unable to read addons metadata file from the remote server"))
+    :returns: list of executables (useable for ``update_manual_page()``)
+    """
+    if len(mlist) > 1:
+        # read metadata from remote server (toolboxes)
+        install_toolbox_xml(url, options['extension'])
 
+    # read metadata from remote server (modules)
+    url = url + "modules.xml"
+    data, bin_list = get_addons_metadata(url, mlist)
     if not data:
-        grass.warning(_("No addons metadata available"))
+        grass.warning(_("No addons metadata available."
+                        " Addons metadata file not updated."))
         return []
 
-    fXML = os.path.join(options['prefix'], 'modules.xml')
+    xml_file = os.path.join(options['prefix'], 'modules.xml')
     # create an empty file if not exists
-    if not os.path.exists(fXML):
-        write_xml_modules(fXML)
+    if not os.path.exists(xml_file):
+        write_xml_modules(xml_file)
 
     # read XML file
-    fo = open(fXML, 'r')
-    tree = etree.fromstring(fo.read())
-    fo.close()
+    tree = etree_fromfile(xml_file)
 
     # update tree
     for name in mlist:
@@ -670,14 +893,14 @@ def install_extension_xml(url, mlist):
             if bnode is not None:
                 tnode.remove(bnode)
             bnode = etree.Element('binary')
-            for f in ndata['files']:
+            for file_name in ndata['files']:
                 fnode = etree.Element('file')
-                fnode.text = f
+                fnode.text = file_name
                 bnode.append(fnode)
             tnode.append(bnode)
         else:
             # create new node for task
-            tnode = etree.Element('task', attrib = { 'name' : name })
+            tnode = etree.Element('task', attrib={'name': name})
             dnode = etree.Element('description')
             dnode.text = ndata['desc']
             tnode.append(dnode)
@@ -685,128 +908,281 @@ def install_extension_xml(url, mlist):
             knode.text = ndata['keyw']
             tnode.append(knode)
             bnode = etree.Element('binary')
-            for f in ndata['files']:
+            for file_name in ndata['files']:
                 fnode = etree.Element('file')
-                fnode.text = f
+                fnode.text = file_name
                 bnode.append(fnode)
             tnode.append(bnode)
             tree.append(tnode)
 
-    write_xml_modules(fXML, tree)
+    write_xml_modules(xml_file, tree)
+
+    return bin_list
 
-    return bList
 
-# install extension on MS Windows
 def install_extension_win(name):
     """Install extension on MS Windows"""
-    # do not use hardcoded url -
-    # http://wingrass.fsv.cvut.cz/platform/grassXX/addonsX.X.X
     grass.message(_("Downloading precompiled GRASS Addons <%s>...") %
                   options['extension'])
+
+    # build base URL
     if build_platform == 'x86_64':
         platform = build_platform
     else:
         platform = 'x86'
-    url = "http://wingrass.fsv.cvut.cz/" \
-          "grass%(major)s%(minor)s/%(platform)s/addons/" \
-          "grass-%(major)s.%(minor)s.%(patch)s/" % \
-          {'platform' : platform,
-           'major': version[0], 'minor': version[1],
-           'patch': version[2]}
-    
-    grass.debug("url=%s" % url, 1)
+    base_url = "http://wingrass.fsv.cvut.cz/" \
+               "grass%(major)s%(minor)s/%(platform)s/addons/" \
+               "grass-%(major)s.%(minor)s.%(patch)s" % \
+               {'platform': platform,
+                'major': version[0], 'minor': version[1],
+                'patch': version[2]}
 
-    try:
-        zfile = url + name + '.zip'
-        f = urlopen(zfile, proxies=PROXIES)
-
-        # create addons dir if not exists
-        if not os.path.exists(options['prefix']):
-            try:
-                os.mkdir(options['prefix'])
-            except OSError as e:
-                grass.fatal(_("Unable to create <{}>. {}").format(options['prefix'], e))
-        
-        # download data
-        fo = tempfile.TemporaryFile()
-        fo.write(f.read())
-        try:
-            zfobj = zipfile.ZipFile(fo)
-        except zipfile.BadZipfile as e:
-            grass.fatal('%s: %s' % (e, zfile))
-        
-        for name in zfobj.namelist():
-            if name.endswith('/'):
-                d = os.path.join(options['prefix'], name)
-                if not os.path.exists(d):
-                    os.mkdir(d)
-            else:
-                outfile = open(os.path.join(options['prefix'], name), 'wb')
-                outfile.write(zfobj.read(name))
-                outfile.close()
+    # resolve ZIP URL
+    source, url = resolve_source_code(url='{}/{}.zip'.format(base_url, name))
+
+    # to hide non-error messages from subprocesses
+    if grass.verbosity() <= 2:
+        outdev = open(os.devnull, 'w')
+    else:
+        outdev = sys.stdout
 
-        fo.close()
-    except (HTTPError, IOError) as e:
-        grass.fatal(_("GRASS Addons <{0}> not found. Reason: {1}").format(
-            name, e))
+    # download Addons ZIP file
+    os.chdir(TMPDIR)  # this is just to not leave something behind
+    srcdir = os.path.join(TMPDIR, name)
+    download_source_code(source=source, url=url, name=name,
+                         outdev=outdev, directory=srcdir, tmpdir=TMPDIR)
+
+    # copy Addons copy tree to destination directory
+    move_extracted_files(extract_dir=srcdir, target_dir=options['prefix'],
+                         files=os.listdir(srcdir))
 
     return 0
 
-# install extension on other plaforms
-def install_extension_other(name):
-    gisbase = os.getenv('GISBASE')
+
+def download_source_code_svn(url, name, outdev, directory=None):
+    """Download source code from a Subversion reporsitory
+
+    .. note:
+        Stdout is passed to to *outdev* while stderr is will be just printed.
+
+    :param url: URL of the repository
+        (module class/family and name are attached)
+    :param name: module name
+    :param outdev: output devide for the standard output of the svn command
+    :param directory: directory where the source code will be downloaded
+        (default is the current directory with name attached)
+
+    :returns: full path to the directory with the source code
+        (useful when you not specify directory, if *directory* is specified
+        the return value is equal to it)
+    """
+    if not directory:
+        directory = os.path.join(os.getcwd, name)
     classchar = name.split('.', 1)[0]
     moduleclass = expand_module_class_name(classchar)
-    url = options['svnurl'] + '/' + moduleclass + '/' + name
-    
-    grass.message(_("Fetching <%s> from GRASS-Addons SVN repository (be patient)...") % name)
+    url = url + '/' + moduleclass + '/' + name
+    if grass.call(['svn', 'checkout',
+                   url, directory], stdout=outdev) != 0:
+        grass.fatal(_("GRASS Addons <%s> not found") % name)
+    return directory
 
-    os.chdir(TMPDIR)
+
+def move_extracted_files(extract_dir, target_dir, files):
+    """Fix state of extracted file by moving them to different diretcory
+
+    When extracting, it is not clear what will be the root directory
+    or if there will be one at all. So this function moves the files to
+    a different directory in the way that if there was one direcory extracted,
+    the contained files are moved.
+    """
+    gscript.debug("move_extracted_files({})".format(locals()))
+    if len(files) == 1:
+        shutil.copytree(os.path.join(extract_dir, files[0]), target_dir)
+    else:
+        if not os.path.exists(target_dir):
+            os.mkdir(target_dir)
+        for file_name in files:
+            actual_file = os.path.join(extract_dir, file_name)
+            if os.path.isdir(actual_file):
+                # shutil.copytree() replaced by copy_tree() because
+                # shutil's copytree() fails when subdirectory exists
+                copy_tree(actual_file,
+                          os.path.join(target_dir, file_name))
+            else:
+                shutil.copy(actual_file, os.path.join(target_dir, file_name))
+
+
+# Original copyright and license of the original version of the CRLF function
+# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
+# Python Software Foundation; All Rights Reserved
+# Python Software Foundation License Version 2
+# http://svn.python.org/projects/python/trunk/Tools/scripts/crlf.py
+def fix_newlines(directory):
+    """Replace CRLF with LF in all files in the directory
+
+    Binary files are ignored. Recurses into subdirectories.
+    """
+    for root, unused, files in os.walk(directory):
+        for name in files:
+            filename = os.path.join(root, name)
+            data = open(filename, 'rb').read()
+            if '\0' in data:
+                continue  # ignore binary files
+            # we don't expect there would be CRLF file by purpose
+            # if we want to allow CRLF files we would have to whitelite .py etc
+            newdata = data.replace('\r\n', '\n')
+            if newdata != data:
+                newfile = open(filename, 'wb')
+                newfile.write(newdata)
+                newfile.close()
+
+
+def extract_zip(name, directory, tmpdir):
+    """Extract a ZIP file into a directory"""
+    gscript.debug("extract_zip(name={name}, directory={directory},"
+                  " tmpdir={tmpdir})".format(name=name, directory=directory,
+                                             tmpdir=tmpdir), 3)
+    try:
+        zip_file = zipfile.ZipFile(name, mode='r')
+        file_list = zip_file.namelist()
+        # we suppose we can write to parent of the given dir
+        # (supposing a tmp dir)
+        extract_dir = os.path.join(tmpdir, 'extract_dir')
+        os.mkdir(extract_dir)
+        for subfile in file_list:
+            # this should be safe in Python 2.7.4
+            zip_file.extract(subfile, extract_dir)
+        files = os.listdir(extract_dir)
+        move_extracted_files(extract_dir=extract_dir,
+                             target_dir=directory, files=files)
+    except zipfile.BadZipfile as error:
+        gscript.fatal(_("ZIP file is unreadable: {}").format(error))
+
+
+# TODO: solve the other related formats
+def extract_tar(name, directory, tmpdir):
+    """Extract a TAR or a similar file into a directory"""
+    gscript.debug("extract_tar(name={name}, directory={directory},"
+                  " tmpdir={tmpdir})".format(name=name, directory=directory,
+                                             tmpdir=tmpdir), 3)
+    try:
+        import tarfile  # we don't need it anywhere else
+        tar = tarfile.open(name)
+        extract_dir = os.path.join(tmpdir, 'extract_dir')
+        os.mkdir(extract_dir)
+        tar.extractall(path=extract_dir)
+        files = os.listdir(extract_dir)
+        move_extracted_files(extract_dir=extract_dir,
+                             target_dir=directory, files=files)
+    except tarfile.TarError as error:
+        gscript.fatal(_("Archive file is unreadable: {}").format(error))
+
+extract_tar.supported_formats = ['tar.gz', 'gz', 'bz2', 'tar', 'gzip', 'targz']
+
+
+def download_source_code(source, url, name, outdev,
+                         directory=None, tmpdir=None):
+    """Get source code to a local directory for compilation"""
+    gscript.verbose("Downloading source code for <{name}> from <{url}>"
+                    " which is identified as '{source}' type of source..."
+                    .format(source=source, url=url, name=name))
+    if source == 'svn':
+        download_source_code_svn(url, name, outdev, directory)
+    elif source in ['remote_zip', 'official']:
+        # we expect that the module.zip file is not by chance in the archive
+        zip_name = os.path.join(tmpdir, 'extension.zip')
+        f, h = urlretrieve(url, zip_name)
+        if h.get('content-type', '') != 'application/zip':
+            grass.fatal(_("Extension <%s> not found") % name)
+
+        extract_zip(name=zip_name, directory=directory, tmpdir=tmpdir)
+        fix_newlines(directory)
+    elif source.startswith('remote_') and \
+            source.split('_')[1] in extract_tar.supported_formats:
+        # we expect that the module.tar.gz file is not by chance in the archive
+        archive_name = os.path.join(tmpdir,
+                                    'extension.' + source.split('_')[1])
+        urlretrieve(url, archive_name)
+        extract_tar(name=archive_name, directory=directory, tmpdir=tmpdir)
+        fix_newlines(directory)
+    elif source == 'zip':
+        extract_zip(name=url, directory=directory, tmpdir=tmpdir)
+        fix_newlines(directory)
+    elif source in extract_tar.supported_formats:
+        extract_tar(name=url, directory=directory, tmpdir=tmpdir)
+        fix_newlines(directory)
+    elif source == 'dir':
+        shutil.copytree(url, directory)
+        fix_newlines(directory)
+    else:
+        # probably programmer error
+        grass.fatal(_("Unknown extension (addon) source type '{}'."
+                      " Please report this to the grass-user mailing list.")
+                    .format(source))
+    assert os.path.isdir(directory)
+
+
+def install_extension_std_platforms(name, source, url):
+    """Install extension on standard plaforms"""
+    gisbase = os.getenv('GISBASE')
+    if source == 'official':
+        gscript.message(_("Fetching <%s> from "
+                          "GRASS GIS Addons repository (be patient)...") % name)
+    else:
+        gscript.message(_("Fetching <{name}> from "
+                          "<{url}> (be patient)...").format(name=name, url=url))
+
+    # to hide non-error messages from subprocesses
     if grass.verbosity() <= 2:
         outdev = open(os.devnull, 'w')
     else:
         outdev = sys.stdout
 
-    if grass.call(['svn', 'checkout',
-                   url], stdout = outdev) != 0:
-        grass.fatal(_("GRASS Addons <%s> not found") % name)
+    os.chdir(TMPDIR)  # this is just to not leave something behind
+    srcdir = os.path.join(TMPDIR, name)
+    download_source_code(source=source, url=url, name=name,
+                         outdev=outdev, directory=srcdir, tmpdir=TMPDIR)
+    os.chdir(srcdir)
+
+    dirs = {
+        'bin': os.path.join(TMPDIR, name, 'bin'),
+        'docs': os.path.join(TMPDIR, name, 'docs'),
+        'html': os.path.join(TMPDIR, name, 'docs', 'html'),
+        'rest': os.path.join(TMPDIR, name, 'docs', 'rest'),
+        'man': os.path.join(TMPDIR, name, 'docs', 'man'),
+        'script': os.path.join(TMPDIR, name, 'scripts'),
+        # TODO: handle locales also for addons
+        #             'string'  : os.path.join(TMPDIR, name, 'locale'),
+        'string': os.path.join(TMPDIR, name),
+        'etc': os.path.join(TMPDIR, name, 'etc'),
+    }
+
+    make_cmd = [
+        'make',
+        'MODULE_TOPDIR=%s' % gisbase.replace(' ', r'\ '),
+        'RUN_GISRC=%s' % os.environ['GISRC'],
+        'BIN=%s' % dirs['bin'],
+        'HTMLDIR=%s' % dirs['html'],
+        'RESTDIR=%s' % dirs['rest'],
+        'MANBASEDIR=%s' % dirs['man'],
+        'SCRIPTDIR=%s' % dirs['script'],
+        'STRINGDIR=%s' % dirs['string'],
+        'ETC=%s' % os.path.join(dirs['etc'])
+    ]
 
-    dirs = { 'bin'     : os.path.join(TMPDIR, name, 'bin'),
-             'docs'    : os.path.join(TMPDIR, name, 'docs'),
-             'html'    : os.path.join(TMPDIR, name, 'docs', 'html'),
-             'rest'    : os.path.join(TMPDIR, name, 'docs', 'rest'),
-             'man'     : os.path.join(TMPDIR, name, 'docs', 'man'),
-             'script'  : os.path.join(TMPDIR, name, 'scripts'),
-### TODO: handle locales also for addons
-#             'string'  : os.path.join(TMPDIR, name, 'locale'),
-             'string'  : os.path.join(TMPDIR, name),
-             'etc'     : os.path.join(TMPDIR, name, 'etc'),
-             }
-
-    makeCmd = ['make',
-               'MODULE_TOPDIR=%s' % gisbase.replace(' ', '\ '),
-               'RUN_GISRC=%s' % os.environ['GISRC'],
-               'BIN=%s' % dirs['bin'],
-               'HTMLDIR=%s' % dirs['html'],
-               'RESTDIR=%s' % dirs['rest'],
-               'MANBASEDIR=%s' % dirs['man'],
-               'SCRIPTDIR=%s' % dirs['script'],
-               'STRINGDIR=%s' % dirs['string'],
-               'ETC=%s' % os.path.join(dirs['etc'])
+    install_cmd = [
+        'make',
+        'MODULE_TOPDIR=%s' % gisbase,
+        'ARCH_DISTDIR=%s' % os.path.join(TMPDIR, name),
+        'INST_DIR=%s' % options['prefix'],
+        'install'
     ]
-    
-    installCmd = ['make',
-                  'MODULE_TOPDIR=%s' % gisbase,
-                  'ARCH_DISTDIR=%s' % os.path.join(TMPDIR, name),
-                  'INST_DIR=%s' % options['prefix'],
-                  'install'
-                  ]
 
     if flags['d']:
         grass.message("\n%s\n" % _("To compile run:"))
-        sys.stderr.write(' '.join(makeCmd) + '\n')
+        sys.stderr.write(' '.join(make_cmd) + '\n')
         grass.message("\n%s\n" % _("To install run:"))
-        sys.stderr.write(' '.join(installCmd) + '\n')
+        sys.stderr.write(' '.join(install_cmd) + '\n')
         return 0
 
     os.chdir(os.path.join(TMPDIR, name))
@@ -816,22 +1192,24 @@ def install_extension_other(name):
                                        'Make', 'Module.make')):
         grass.fatal(_("Please install GRASS development package"))
 
-    if 0 != grass.call(makeCmd,
-                       stdout = outdev):
-        grass.fatal(_('Compilation failed, sorry. Please check above error messages.'))
+    if 0 != grass.call(make_cmd,
+                       stdout=outdev):
+        grass.fatal(_('Compilation failed, sorry.'
+                      ' Please check above error messages.'))
 
     if flags['i']:
         return 0
 
     grass.message(_("Installing..."))
 
-    return grass.call(installCmd,
-                      stdout = outdev)
+    return grass.call(install_cmd,
+                      stdout=outdev)
+
 
-# remove existing extension - toolbox or module
-def remove_extension(force = False):
+def remove_extension(force=False):
+    """Remove existing extension (module or toolbox if -t is given)"""
     if flags['t']:
-        mlist = get_toolbox_modules(options['extension'])
+        mlist = get_toolbox_modules(options['prefix'], options['extension'])
     else:
         mlist = [options['extension']]
 
@@ -845,21 +1223,28 @@ def remove_extension(force = False):
     if force:
         grass.message(_("Updating addons metadata file..."))
         remove_extension_xml(mlist)
-        grass.message(_("Extension <%s> successfully uninstalled.") % options['extension'])
+        grass.message(_("Extension <%s> successfully uninstalled.") %
+                      options['extension'])
     else:
         grass.warning(_("Extension <%s> not removed. "
-                        "Re-run '%s' with '-f' flag to force removal") % (options['extension'], 'g.extension'))
+                        "Re-run '%s' with '-f' flag to force removal")
+                      % (options['extension'], 'g.extension'))
 
 # remove existing extension(s) (reading XML file)
-def remove_modules(mlist, force = False):
+
+
+def remove_modules(mlist, force=False):
+    """Remove extensions/modules specified in a list
+
+    Collects the file names from the file with metadata and fallbacks
+    to standard layout of files on prefix path on error.
+    """
     # try to read XML metadata file first
-    fXML = os.path.join(options['prefix'], 'modules.xml')
+    xml_file = os.path.join(options['prefix'], 'modules.xml')
     installed = get_installed_modules()
 
-    if os.path.exists(fXML):
-        f = open(fXML, 'r')
-        tree = etree.fromstring(f.read())
-        f.close()
+    if os.path.exists(xml_file):
+        tree = etree_fromfile(xml_file)
     else:
         tree = None
 
@@ -874,8 +1259,7 @@ def remove_modules(mlist, force = False):
             for task in tree.findall('task'):
                 if name == task.get('name') and \
                         task.find('binary') is not None:
-                    for f in task.find('binary').findall('file'):
-                        flist.append(f.text)
+                    flist = get_module_files(task)
                     break
 
             if flist:
@@ -888,77 +1272,81 @@ def remove_modules(mlist, force = False):
                             removed = True
                             os.remove(fpath)
                         else:
-                            print fpath
+                            print(fpath)
                     except OSError:
                         err.append((_("Unable to remove file '%s'") % fpath))
                 if force and not removed:
                     grass.fatal(_("Extension <%s> not found") % name)
 
                 if err:
-                    for e in err:
-                        grass.error(e)
+                    for error_line in err:
+                        grass.error(error_line)
             else:
                 remove_extension_std(name, force)
         else:
             remove_extension_std(name, force)
 
-# remove exising extension (using standard files layout)
-def remove_extension_std(name, force = False):
+
+def remove_extension_std(name, force=False):
+    """Remove extension/module expecting the standard layout"""
     for fpath in [os.path.join(options['prefix'], 'bin', name),
                   os.path.join(options['prefix'], 'scripts', name),
-                  os.path.join(options['prefix'], 'docs', 'html', name + '.html'),
-                  os.path.join(options['prefix'], 'docs', 'rest', name + '.txt'),
-                  os.path.join(options['prefix'], 'docs', 'man', 'man1', name + '.1')]:
+                  os.path.join(
+                      options['prefix'], 'docs', 'html', name + '.html'),
+                  os.path.join(
+                      options['prefix'], 'docs', 'rest', name + '.txt'),
+                  os.path.join(options['prefix'], 'docs', 'man', 'man1',
+                               name + '.1')]:
         if os.path.isfile(fpath):
             if force:
                 grass.verbose(fpath)
                 os.remove(fpath)
             else:
-                print fpath
+                print(fpath)
 
-# update local meta-file when removing existing extension
-def remove_toolbox_xml(name):
-    fXML = os.path.join(options['prefix'], 'toolboxes.xml')
-    if not os.path.exists(fXML):
-        return
 
+def remove_from_toolbox_xml(name):
+    """Update local meta-file when removing existing toolbox"""
+    xml_file = os.path.join(options['prefix'], 'toolboxes.xml')
+    if not os.path.exists(xml_file):
+        return
     # read XML file
-    fo = open(fXML, 'r')
-    tree = etree.fromstring(fo.read())
-    fo.close()
-
+    tree = etree_fromfile(xml_file)
     for node in tree.findall('toolbox'):
         if node.get('code') != name:
             continue
         tree.remove(node)
 
-    write_xml_toolboxes(fXML, tree)
+    write_xml_toolboxes(xml_file, tree)
+
 
 def remove_extension_xml(modules):
+    """Update local meta-file when removing existing extension"""
     if len(modules) > 1:
         # update also toolboxes metadata
-        remove_toolbox_xml(options['extension'])
-
-    fXML = os.path.join(options['prefix'], 'modules.xml')
-    if not os.path.exists(fXML):
+        remove_from_toolbox_xml(options['extension'])
+    xml_file = os.path.join(options['prefix'], 'modules.xml')
+    if not os.path.exists(xml_file):
         return
-
     # read XML file
-    fo = open(fXML, 'r')
-    tree = etree.fromstring(fo.read())
-    fo.close()
-
+    tree = etree_fromfile(xml_file)
     for name in modules:
         for node in tree.findall('task'):
             if node.get('name') != name:
                 continue
             tree.remove(node)
-
-    write_xml_modules(fXML, tree)
+    write_xml_modules(xml_file, tree)
 
 # check links in CSS
+
+
 def check_style_files(fil):
-    dist_file   = os.path.join(os.getenv('GISBASE'), 'docs', 'html', fil)
+    """Ensures that a specified HTML documentation support file exists
+
+    If the file, e.g. a CSS file does not exist, the file is copied from
+    the distribution.
+    """
+    dist_file = os.path.join(os.getenv('GISBASE'), 'docs', 'html', fil)
     addons_file = os.path.join(options['prefix'], 'docs', 'html', fil)
 
     if os.path.isfile(addons_file):
@@ -966,21 +1354,28 @@ def check_style_files(fil):
 
     try:
         shutil.copyfile(dist_file, addons_file)
-    except OSError as e:
-        grass.fatal(_("Unable to create '%s': %s") % (addons_file, e))
+    except OSError as error:
+        grass.fatal(_("Unable to create '%s': %s") % (addons_file, error))
+
 
 def create_dir(path):
+    """Creates the specified directory (with all dirs in between)
+
+    NOOP for existing directory.
+    """
     if os.path.isdir(path):
         return
 
     try:
         os.makedirs(path)
-    except OSError as e:
-        grass.fatal(_("Unable to create '%s': %s") % (path, e))
+    except OSError as error:
+        grass.fatal(_("Unable to create '%s': %s") % (path, error))
 
     grass.debug("'%s' created" % path)
 
+
 def check_dirs():
+    """Ensure that the necessary directories in prefix path exist"""
     create_dir(os.path.join(options['prefix'], 'bin'))
     create_dir(os.path.join(options['prefix'], 'docs', 'html'))
     create_dir(os.path.join(options['prefix'], 'docs', 'rest'))
@@ -991,31 +1386,35 @@ def check_dirs():
     create_dir(os.path.join(options['prefix'], 'scripts'))
 
 # fix file URI in manual page
+
+
 def update_manual_page(module):
+    """Fix manual page for addons which are at different directory then rest"""
     if module.split('.', 1)[0] == 'wx':
-        return # skip for GUI modules
+        return  # skip for GUI modules
 
     grass.verbose(_("Manual page for <%s> updated") % module)
     # read original html file
-    htmlfile = os.path.join(options['prefix'], 'docs', 'html', module + '.html')
+    htmlfile = os.path.join(
+        options['prefix'], 'docs', 'html', module + '.html')
     try:
-        f = open(htmlfile)
-        shtml = f.read()
-    except IOError as e:
-        grass.fatal(_("Unable to read manual page: %s") % e)
+        oldfile = open(htmlfile)
+        shtml = oldfile.read()
+    except IOError as error:
+        gscript.fatal(_("Unable to read manual page: %s") % error)
     else:
-        f.close()
+        oldfile.close()
 
     pos = []
-    
+
     # fix logo URL
     pattern = r'''<a href="([^"]+)"><img src="grass_logo.png"'''
     for match in re.finditer(pattern, shtml):
         pos.append(match.start(1))
-    
+
     # find URIs
     pattern = r'''<a href="([^"]+)">([^>]+)</a>'''
-    addons = get_installed_extensions(force = True)
+    addons = get_installed_extensions(force=True)
     for match in re.finditer(pattern, shtml):
         if match.group(1)[:4] == 'http':
             continue
@@ -1024,23 +1423,242 @@ def update_manual_page(module):
         pos.append(match.start(1))
 
     if not pos:
-        return # no match
+        return  # no match
 
     # replace file URIs
     prefix = 'file://' + '/'.join([os.getenv('GISBASE'), 'docs', 'html'])
     ohtml = shtml[:pos[0]]
     for i in range(1, len(pos)):
-        ohtml += prefix + '/' + shtml[pos[i-1]:pos[i]]
+        ohtml += prefix + '/' + shtml[pos[i - 1]:pos[i]]
     ohtml += prefix + '/' + shtml[pos[-1]:]
 
     # write updated html file
     try:
-        f = open(htmlfile, 'w')
-        f.write(ohtml)
-    except IOError as e:
-        grass.fatal(_("Unable for write manual page: %s") % e)
+        newfile = open(htmlfile, 'w')
+        newfile.write(ohtml)
+    except IOError as error:
+        gscript.fatal(_("Unable for write manual page: %s") % error)
     else:
-        f.close()
+        newfile.close()
+
+
+def resolve_install_prefix(path, to_system):
+    """Determine and check the path for installation"""
+    if to_system:
+        path = os.environ['GISBASE']
+    if path == '$GRASS_ADDON_BASE':
+        if not os.getenv('GRASS_ADDON_BASE'):
+            grass.warning(_("GRASS_ADDON_BASE is not defined, "
+                            "installing to ~/.grass%s/addons") % version[0])
+            path = os.path.join(
+                os.environ['HOME'], '.grass%s' % version[0], 'addons')
+        else:
+            path = os.environ['GRASS_ADDON_BASE']
+    if os.path.exists(path) and \
+       not os.access(path, os.W_OK):
+        grass.fatal(_("You don't have permission to install extension to <{}>."
+                      " Try to run {} with administrator rights"
+                      " (su or sudo).")
+                    .format(path, 'g.extension'))
+    # ensure dir sep at the end for cases where path is used as URL and pasted
+    # together with file names
+    if not path.endswith(os.path.sep):
+        path = path + os.path.sep
+    return os.path.abspath(path)  # make likes absolute paths
+
+
+def resolve_xmlurl_prefix(url, source=None):
+    """Determine and check the URL where the XML metadata files are stored
+
+    It ensures that there is a single slash at the end of URL, so we can attach
+     file name easily:
+
+    >>> resolve_xmlurl_prefix('http://grass.osgeo.org/addons')
+    'http://grass.osgeo.org/addons/'
+    >>> resolve_xmlurl_prefix('http://grass.osgeo.org/addons/')
+    'http://grass.osgeo.org/addons/'
+    """
+    gscript.debug("resolve_xmlurl_prefix(url={}, source={})".format(url, source))
+    if source == 'official':
+        # use pregenerated modules XML file
+        url = 'http://grass.osgeo.org/addons/grass%s/' % version[0]
+    # else try to get modules XMl from SVN repository (provided URL)
+    # the exact action depends on subsequent code (somewhere)
+
+    if not url.endswith('/'):
+        url = url + '/'
+    return url
+
+
+KNOWN_HOST_SERVICES_INFO = {
+    'OSGeo Trac': {
+        'domain': 'trac.osgeo.org',
+        'ignored_suffixes': ['format=zip'],
+        'possible_starts': ['', 'https://', 'http://'],
+        'url_start': 'https://',
+        'url_end': '?format=zip',
+    },
+    'GitHub': {
+        'domain': 'github.com',
+        'ignored_suffixes': ['.zip', '.tar.gz'],
+        'possible_starts': ['', 'https://', 'http://'],
+        'url_start': 'https://',
+        'url_end': '/archive/master.zip',
+    },
+    'GitLab': {
+        'domain': 'gitlab.com',
+        'ignored_suffixes': ['.zip', '.tar.gz', '.tar.bz2', '.tar'],
+        'possible_starts': ['', 'https://', 'http://'],
+        'url_start': 'https://',
+        'url_end': '/repository/archive.zip',
+    },
+    'Bitbucket': {
+        'domain': 'bitbucket.org',
+        'ignored_suffixes': ['.zip', '.tar.gz', '.gz', '.bz2'],
+        'possible_starts': ['', 'https://', 'http://'],
+        'url_start': 'https://',
+        'url_end': '/get/default.zip',
+    },
+}
+
+# TODO: support ZIP URLs which don't end with zip
+# https://gitlab.com/user/reponame/repository/archive.zip?ref=b%C3%A9po
+
+
+def resolve_known_host_service(url):
+    """Determine source type and full URL for known hosting service
+
+    If the service is not determined from the provided URL, tuple with
+    is two ``None`` values is returned.
+    """
+    match = None
+    actual_start = None
+    for key, value in KNOWN_HOST_SERVICES_INFO.items():
+        for start in value['possible_starts']:
+            if url.startswith(start + value['domain']):
+                match = value
+                actual_start = start
+                gscript.verbose(_("Indentified {} as known hosting service")
+                                .format(key))
+                for suffix in value['ignored_suffixes']:
+                    if url.endswith(suffix):
+                        gscript.verbose(
+                            _("Not using {service} as known hosting service"
+                              " because the URL ends with '{suffix}'")
+                            .format(service=key, suffix=suffix))
+                        return None, None
+    if match:
+        if not actual_start:
+            actual_start = match['url_start']
+        else:
+            actual_start = ''
+        url = '{prefix}{base}{suffix}'.format(prefix=actual_start,
+                                              base=url.rstrip('/'),
+                                              suffix=match['url_end'])
+        gscript.verbose(_("Will use the following URL for download: {}")
+                        .format(url))
+        return 'remote_zip', url
+    else:
+        return None, None
+
+
+# TODO: add also option to enforce the source type
+def resolve_source_code(url=None, name=None):
+    """Return type and URL or path of the source code
+
+    Local paths are not presented as URLs to be usable in standard functions.
+    Path is identified as local path if the directory of file exists which
+    has the unfortunate consequence that the not existing files are evaluated
+    as remote URLs. When path is not evaluated, Subversion is assumed for
+    backwards compatibility. When GitHub repository is specified, ZIP file
+    link is returned. The ZIP is for master branch, not the default one because
+    GitHub does not provide the deafult branch in the URL (July 2015).
+
+    :returns: tuple with type of source and full URL or path
+
+    Official repository:
+
+    >>> resolve_source_code(name='g.example') # doctest: +SKIP
+    ('official', 'https://trac.osgeo.org/.../general/g.example')
+
+    Subversion:
+
+    >>> resolve_source_code('http://svn.osgeo.org/grass/grass-addons/grass7')
+    ('svn', 'http://svn.osgeo.org/grass/grass-addons/grass7')
+
+    ZIP files online:
+
+    >>> resolve_source_code('https://trac.osgeo.org/.../r.modis?format=zip')
+    ('remote_zip', 'https://trac.osgeo.org/.../r.modis?format=zip')
+
+    Local directories and ZIP files:
+
+    >>> resolve_source_code(os.path.expanduser("~")) # doctest: +ELLIPSIS
+    ('dir', '...')
+    >>> resolve_source_code('/local/directory/downloaded.zip') # doctest: +SKIP
+    ('zip', '/local/directory/downloaded.zip')
+
+    OSGeo Trac:
+
+    >>> resolve_source_code('trac.osgeo.org/.../r.agent.aco')
+    ('remote_zip', 'https://trac.osgeo.org/.../r.agent.aco?format=zip')
+    >>> resolve_source_code('https://trac.osgeo.org/.../r.agent.aco')
+    ('remote_zip', 'https://trac.osgeo.org/.../r.agent.aco?format=zip')
+
+    GitHub:
+
+    >>> resolve_source_code('github.com/user/g.example')
+    ('remote_zip', 'https://github.com/user/g.example/archive/master.zip')
+    >>> resolve_source_code('github.com/user/g.example/')
+    ('remote_zip', 'https://github.com/user/g.example/archive/master.zip')
+    >>> resolve_source_code('https://github.com/user/g.example')
+    ('remote_zip', 'https://github.com/user/g.example/archive/master.zip')
+    >>> resolve_source_code('https://github.com/user/g.example/')
+    ('remote_zip', 'https://github.com/user/g.example/archive/master.zip')
+
+    GitLab:
+
+    >>> resolve_source_code('gitlab.com/JoeUser/GrassModule')
+    ('remote_zip', 'https://gitlab.com/JoeUser/GrassModule/repository/archive.zip')
+    >>> resolve_source_code('https://gitlab.com/JoeUser/GrassModule')
+    ('remote_zip', 'https://gitlab.com/JoeUser/GrassModule/repository/archive.zip')
+
+    Bitbucket:
+
+    >>> resolve_source_code('bitbucket.org/joe-user/grass-module')
+    ('remote_zip', 'https://bitbucket.org/joe-user/grass-module/get/default.zip')
+    >>> resolve_source_code('https://bitbucket.org/joe-user/grass-module')
+    ('remote_zip', 'https://bitbucket.org/joe-user/grass-module/get/default.zip')
+    """
+    if not url and name:
+        module_class = get_module_class_name(name)
+        trac_url = 'https://trac.osgeo.org/grass/browser/grass-addons/' \
+                   'grass{version}/{module_class}/{module_name}?format=zip' \
+                   .format(version=version[0],
+                           module_class=module_class, module_name=name)
+        return 'official', trac_url
+    if os.path.isdir(url):
+        return 'dir', os.path.abspath(url)
+    elif os.path.exists(url):
+        if url.endswith('.zip'):
+            return 'zip', os.path.abspath(url)
+        for suffix in extract_tar.supported_formats:
+            if url.endswith('.' + suffix):
+                return suffix, os.path.abspath(url)
+    else:
+        source, resolved_url = resolve_known_host_service(url)
+        if source:
+            return source, resolved_url
+        # we allow URL to end with =zip or ?zip and not only .zip
+        # unfortunately format=zip&version=89612 would require something else
+        # special option to force the source type would solve it
+        if url.endswith('zip'):
+            return 'remote_zip', url
+        for suffix in extract_tar.supported_formats:
+            if url.endswith(suffix):
+                return 'remote_' + suffix, url
+        # fallback to the classic behavior
+        return 'svn', url
 
 
 def main():
@@ -1048,6 +1666,8 @@ def main():
     if not flags['a'] and sys.platform != "win32":
         check_progs()
 
+    original_url = options['url']
+
     # manage proxies
     global PROXIES
     if options['proxy']:
@@ -1056,79 +1676,55 @@ def main():
             PROXIES[ptype] = purl
 
     # define path
-    if flags['s']:
-        options['prefix'] = os.environ['GISBASE']
-    
-    if options['prefix'] == '$GRASS_ADDON_BASE':
-        if not os.getenv('GRASS_ADDON_BASE'):
-            grass.warning(_("GRASS_ADDON_BASE is not defined, "
-                            "installing to ~/.grass%s/addons") % version[0])
-            options['prefix'] = os.path.join(os.environ['HOME'], '.grass%s' % version[0], 'addons')
-        else:
-            options['prefix'] = os.environ['GRASS_ADDON_BASE']
-
-    if os.path.exists(options['prefix']) and \
-       not os.access(options['prefix'], os.W_OK):
-        grass.fatal(_("You don't have permission to install extension to <{}>. "
-                      "Try to run {} with administrator rights "
-                      "(su or sudo).").format(options['prefix'], 'g.extension'))
-
-    if 'svn.osgeo.org/grass/grass-addons/grass7' in options['svnurl']:
-        # use pregenerated modules XML file
-        xmlurl = "http://grass.osgeo.org/addons/grass%s" % version[0]
-    else:
-        # try to get modules XMl from SVN repository
-        xmlurl = options['svnurl']
-
-    if not xmlurl.endswith('/'):
-        xmlurl = xmlurl + "/"
+    options['prefix'] = resolve_install_prefix(path=options['prefix'],
+                                               to_system=flags['s'])
 
     # list available extensions
-    if flags['l'] or flags['c'] or flags['g']:
+    if flags['l'] or flags['c'] or (flags['g'] and not flags['a']):
+        # using dummy module, we don't need any module URL now,
+        # but will work only as long as the function does not check
+        # if the URL is actually valid or something
+        source, url = resolve_source_code(name='dummy',
+                                          url=original_url)
+        xmlurl = resolve_xmlurl_prefix(original_url, source=source)
         list_available_extensions(xmlurl)
         return 0
     elif flags['a']:
-        elist = get_installed_extensions()
-        if elist:
-            if flags['t']:
-                grass.message(_("List of installed extensions (toolboxes):"))
-            else:
-                grass.message(_("List of installed extensions (modules):"))
-            sys.stdout.write('\n'.join(elist))
-            sys.stdout.write('\n')
-        else:
-            if flags['t']:
-                grass.info(_("No extension (toolbox) installed"))
-            else:
-                grass.info(_("No extension (module) installed"))
+        list_installed_extensions(toolboxes=flags['t'])
         return 0
-    else:
-        if not options['extension']:
-            grass.fatal(_('You need to define an extension name or use -l/c/g/a'))
 
     if flags['d']:
         if options['operation'] != 'add':
-            grass.warning(_("Flag 'd' is relevant only to 'operation=add'. Ignoring this flag."))
+            grass.warning(_("Flag 'd' is relevant only to"
+                            " 'operation=add'. Ignoring this flag."))
         else:
             global REMOVE_TMPDIR
             REMOVE_TMPDIR = False
 
     if options['operation'] == 'add':
         check_dirs()
-        install_extension(xmlurl)
-    else: # remove
-        remove_extension(flags['f'])
+        source, url = resolve_source_code(name=options['extension'],
+                                          url=original_url)
+        xmlurl = resolve_xmlurl_prefix(original_url, source=source)
+        install_extension(source=source, url=url, xmlurl=xmlurl)
+    else:  # remove
+        remove_extension(force=flags['f'])
 
     return 0
 
+
 if __name__ == "__main__":
+    if len(sys.argv) == 2 and sys.argv[1] == '--doctest':
+        import doctest
+        _ = str  # doctest gettext workaround
+        sys.exit(doctest.testmod().failed)
     options, flags = grass.parser()
     global TMPDIR
     TMPDIR = tempfile.mkdtemp()
     atexit.register(cleanup)
-    
+
     grass_version = grass.version()
     version = grass_version['version'].split('.')
     build_platform = grass_version['build_platform'].split('-', 1)[0]
-    
+
     sys.exit(main())
diff --git a/scripts/g.extension/testsuite/data/modules.xml b/scripts/g.extension/testsuite/data/modules.xml
new file mode 100644
index 0000000..f8a0fd2
--- /dev/null
+++ b/scripts/g.extension/testsuite/data/modules.xml
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE task SYSTEM "grass-addons.dtd">
+<addons version="7" revision="65616" date="2015-07-19 17:32:21.164032">
+    <task name="d.frame">
+        <description>Manages display frames on the user's graphics monitor.</description>
+        <keywords>display,graphics,monitors,frame</keywords>
+        <binary>
+            <file>scripts/d.frame</file>
+            <file>docs/man/man1/d.frame.1</file>
+            <file>docs/html/d.frame.html</file>
+            <file>docs/html/d_frame.png</file>
+        </binary>
+    </task>
+    <task name="d.mon2">
+        <description>Starts a graphics display monitor which can be controlled from the command line.</description>
+        <keywords>display,CLI</keywords>
+        <binary>
+            <file>scripts/d.mon2</file>
+            <file>docs/man/man1/d.mon2.1</file>
+            <file>docs/html/d.mon2.html</file>
+        </binary>
+    </task>
+    <task name="g.copyall">
+        <description>Copies all or a filtered subset of files of selected type from another mapset to the current working mapset</description>
+        <keywords>copy,general</keywords>
+        <binary>
+            <file>scripts/g.copyall</file>
+            <file>docs/man/man1/g.copyall.1</file>
+            <file>docs/html/g.copyall.html</file>
+        </binary>
+    </task>
+    <task name="g.isis3mt">
+        <description>Generates an ISIS3 map template file according to the current GRASS coordinate reference system</description>
+        <keywords>coordinates,projection</keywords>
+        <binary>
+            <file>scripts/g.isis3mt</file>
+            <file>docs/man/man1/g.isis3mt.1</file>
+            <file>docs/html/g.isis3mt.html</file>
+        </binary>
+    </task>
+    <task name="g.proj.all">
+        <description>Reprojects raster and vector maps from given location and mapset to current mapset.</description>
+        <keywords>general,projection,transformation</keywords>
+        <binary>
+            <file>scripts/g.proj.all</file>
+            <file>docs/man/man1/g.proj.all.1</file>
+            <file>docs/html/g.proj.all.html</file>
+        </binary>
+    </task>
+    <task name="r.gdd">
+        <description>Makes each output cell value a function of the values assigned to the corresponding cells in the input raster map layers.</description>
+        <keywords>raster,series</keywords>
+        <binary>
+            <file>bin/r.gdd</file>
+            <file>docs/man/man1/r.gdd.1</file>
+            <file>docs/html/r.gdd.html</file>
+        </binary>
+    </task>
+    <task name="r.geomorphon">
+        <description>Calculate geomorphons (terrain forms)and associated geometry using machine vision approach</description>
+        <keywords>Geomorphons,Terrain patterns,Machine vision geomorphometry</keywords>
+        <binary>
+            <file>bin/r.geomorphon</file>
+            <file>docs/man/man1/r.geomorphon.1</file>
+            <file>docs/html/r.geomorphon.html</file>
+            <file>docs/html/geomorphon.png</file>
+            <file>docs/html/legend.png</file>
+        </binary>
+    </task>
+    <task name="r.le.patch">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+        </binary>
+    </task>
+    <task name="r.le.pixel">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+        </binary>
+    </task>
+    <task name="r.traveltime">
+        <description>Estimation of travel times/isochrones. Computes the travel time of surface runoff to an outlet</description>
+        <keywords>raster,hydrology</keywords>
+        <binary>
+            <file>bin/r.traveltime</file>
+            <file>docs/man/man1/r.traveltime.1</file>
+            <file>docs/html/r.traveltime.html</file>
+        </binary>
+    </task>
+    <task name="r.univar2">
+        <description>Calculates univariate statistics from the non-null cells of a raster map.</description>
+        <keywords>raster,statistics,univariate statistics,zonal statistics</keywords>
+        <binary>
+            <file>bin/r.univar2</file>
+            <file>docs/man/man1/r.univar2.1</file>
+            <file>docs/html/r.univar2.html</file>
+        </binary>
+    </task>
+    <task name="v.civil">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+            <file>scripts/v.civil.tools</file>
+            <file>scripts/v.civil.road</file>
+            <file>scripts/v.civil.river</file>
+            <file>scripts/v.civil.topo</file>
+            <file>docs/man/man1/v.civil.road.1</file>
+            <file>docs/man/man1/v.civil.tools.1</file>
+            <file>docs/man/man1/v.civil.topo.1</file>
+            <file>docs/man/man1/v.civil.river.1</file>
+            <file>docs/html/v.civil.tools.html</file>
+            <file>docs/html/vcivilroad_4.png</file>
+            <file>docs/html/vcivilroad_11.png</file>
+            <file>docs/html/vcivilroad_6.png</file>
+            <file>docs/html/vcivilroad_7.png</file>
+            <file>docs/html/vcivilroad_1.png</file>
+            <file>docs/html/v.civil.topo.html</file>
+            <file>docs/html/vcivilroad_5.png</file>
+            <file>docs/html/vcivilroad_10.png</file>
+            <file>docs/html/vcivilroad_13.png</file>
+            <file>docs/html/vcivilroad_9.png</file>
+            <file>docs/html/vcivilroad_8.png</file>
+            <file>docs/html/v.civil.road.html</file>
+            <file>docs/html/v.civil.river.html</file>
+            <file>docs/html/vcivilroad_3.png</file>
+            <file>docs/html/vcivilroad_14.png</file>
+            <file>docs/html/vcivilroad_12.png</file>
+            <file>docs/html/vcivilroad_2.png</file>
+        </binary>
+    </task>
+    <task name="v.class.ml">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+            <file>scripts/v.class.ml</file>
+            <file>etc/v.class.ml/ml_classifiers.py</file>
+            <file>etc/v.class.ml/ml_functions.py</file>
+            <file>etc/v.class.ml/ml_functions.pyc</file>
+            <file>etc/v.class.ml/features.py</file>
+            <file>etc/v.class.ml/ml_classifiers.pyc</file>
+            <file>etc/v.class.ml/sqlite2npy.pyc</file>
+            <file>etc/v.class.ml/sqlite2npy.py</file>
+            <file>etc/v.class.ml/training_extraction.py</file>
+            <file>etc/v.class.ml/npy2table.pyc</file>
+            <file>etc/v.class.ml/training_extraction.pyc</file>
+            <file>etc/v.class.ml/npy2table.py</file>
+            <file>etc/v.class.ml/features.pyc</file>
+        </binary>
+    </task>
+    <task name="v.class.mlpy">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+            <file>scripts/v.class.mlpy</file>
+        </binary>
+    </task>
+    <task name="v.colors2">
+        <description>Sets color rules for features in a vector map using a numeric attribute column.</description>
+        <keywords>vector,color table</keywords>
+        <binary>
+            <file>scripts/v.colors2</file>
+            <file>docs/man/man1/v.colors2.1</file>
+            <file>docs/html/v.colors2.html</file>
+        </binary>
+    </task>
+    <task name="v.delaunay3d">
+        <description>Creates a 3D triangulation from an input vector map containing points or centroids.</description>
+        <keywords>vector,geometry,3D triangulation</keywords>
+        <binary>
+            <file>bin/v.delaunay3d</file>
+            <file>docs/man/man1/v.delaunay3d.1</file>
+            <file>docs/html/v.delaunay3d.html</file>
+        </binary>
+    </task>
+    <task name="v.ellipse">
+        <description>Computes the best-fitting ellipse for given vector data.</description>
+        <keywords>vector,geometry,best-fitting ellipse</keywords>
+        <binary>
+            <file>bin/v.ellipse</file>
+            <file>docs/man/man1/v.ellipse.1</file>
+            <file>docs/html/v.ellipse.html</file>
+            <file>docs/html/v_ellipse.png</file>
+        </binary>
+    </task>
+    <task name="v.in.proj">
+        <description>Import vector data using OGR library and reproject on the fly.</description>
+        <keywords>vector,import,projection</keywords>
+        <binary>
+            <file>scripts/v.in.proj</file>
+            <file>docs/man/man1/v.in.proj.1</file>
+            <file>docs/html/v.in.proj.html</file>
+        </binary>
+    </task>
+    <task name="v.in.redwg">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+        </binary>
+    </task>
+    <task name="v.neighborhoodmatrix">
+        <description>Exports the neighborhood matrix of polygons in a vector map</description>
+        <keywords>vector,neighborhood matrix</keywords>
+        <binary>
+            <file>scripts/v.neighborhoodmatrix</file>
+            <file>docs/man/man1/v.neighborhoodmatrix.1</file>
+            <file>docs/html/v.neighborhoodmatrix.html</file>
+        </binary>
+    </task>
+    <task name="v.transects">
+        <description>Creates transect lines or quadrilateral areas at regular intervals perpendicular to a polyline.</description>
+        <keywords>vector,transect</keywords>
+        <binary>
+            <file>scripts/v.transects</file>
+            <file>docs/man/man1/v.transects.1</file>
+            <file>docs/html/v.transects.html</file>
+            <file>docs/html/vtransect_options2.jpg</file>
+            <file>docs/html/vtransect_options1.jpg</file>
+        </binary>
+    </task>
+    <task name="wx.metadata">
+        <description></description>
+        <keywords></keywords>
+        <binary>
+            <file>scripts/r.info.iso</file>
+            <file>scripts/v.info.iso</file>
+            <file>scripts/g.gui.metadata</file>
+            <file>etc/config/init_md</file>
+            <file>etc/config/keywordConcepts</file>
+            <file>etc/config/keywordThemes</file>
+            <file>etc/config/keywordGroups</file>
+            <file>etc/profiles/temporalProfile.xml</file>
+            <file>etc/profiles/inspireProfile.xml</file>
+            <file>etc/profiles/basicProfile.xml</file>
+            <file>etc/mdlib/editor.pyc</file>
+            <file>etc/mdlib/editor.py</file>
+            <file>etc/mdlib/jinjainfo.py</file>
+            <file>etc/mdlib/mdgrass.py</file>
+            <file>etc/mdlib/mdgrass.pyc</file>
+            <file>etc/mdlib/mdutil.pyc</file>
+            <file>etc/mdlib/mdutil.py</file>
+            <file>etc/mdlib/jinjainfo.pyc</file>
+            <file>etc/pdf/mdpdffactory.py</file>
+            <file>etc/pdf/mdpdftheme.py</file>
+            <file>etc/pdf/mdpdftheme.pyc</file>
+            <file>etc/pdf/mdpdffactory.pyc</file>
+            <file>docs/man/man1/r.info.iso.1</file>
+            <file>docs/man/man1/v.info.iso.1</file>
+            <file>docs/html/r.info.iso.html</file>
+            <file>docs/html/v.info.iso.html</file>
+        </binary>
+    </task>
+</addons>
diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example.tar.gz b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example.tar.gz
new file mode 100644
index 0000000..8db1093
Binary files /dev/null and b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example.tar.gz differ
diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example.zip b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example.zip
new file mode 100644
index 0000000..96b4577
Binary files /dev/null and b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example.zip differ
diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/Makefile b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/Makefile
new file mode 100644
index 0000000..fc99026
--- /dev/null
+++ b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/Makefile
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../..
+
+PGM = r.plus.example
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script
diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/r.plus.example.html b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/r.plus.example.html
new file mode 100644
index 0000000..078c9b7
--- /dev/null
+++ b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/r.plus.example.html
@@ -0,0 +1,25 @@
+<h2>DESCRIPTION</h2>
+
+<em>r.plus.example</em>
+
+<h2>NOTES</h2>
+
+<h2>EXAMPLES</h2>
+
+<div class="code"><pre>
+r.plus.example
+</pre></div>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="g.region.html">g.region</a>
+</em>
+
+
+<h2>AUTHORS</h2>
+
+Vaclav Petras, NCSU OSGeoREL<br>
+
+<p>
+<i>Last changed: $Date: 2015-09-05 18:13:18 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/r.plus.example.py b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/r.plus.example.py
new file mode 100644
index 0000000..5afc0ea
--- /dev/null
+++ b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example/r.plus.example.py
@@ -0,0 +1,36 @@
+#!/usr/bin/env python
+
+#%module
+#% description: Adds the values of two rasters (A + B)
+#% keyword: raster
+#% keyword: algebra
+#% keyword: sum
+#%end
+#%option G_OPT_R_INPUT
+#% key: araster
+#% description: Name of input raster A in an expression A + B
+#%end
+#%option G_OPT_R_INPUT
+#% key: braster
+#% description: Name of input raster B in an expression A + B
+#%end
+#%option G_OPT_R_OUTPUT
+#%end
+
+
+import grass.script as gscript
+
+
+def main():
+    options, flags = gscript.parser()
+    araster = options['araster']
+    braster = options['braster']
+    output = options['output']
+
+    gscript.mapcalc('{r} = {a} + {b}'.format(r=output, a=araster, b=braster))
+
+    return 0
+
+
+if __name__ == "__main__":
+    main()
diff --git a/scripts/g.extension/testsuite/data/sample_modules/r.plus.example_sep.tar.gz b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example_sep.tar.gz
new file mode 100644
index 0000000..09ed7c1
Binary files /dev/null and b/scripts/g.extension/testsuite/data/sample_modules/r.plus.example_sep.tar.gz differ
diff --git a/scripts/g.extension/testsuite/data/toolboxes.xml b/scripts/g.extension/testsuite/data/toolboxes.xml
new file mode 100644
index 0000000..563166f
--- /dev/null
+++ b/scripts/g.extension/testsuite/data/toolboxes.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE toolbox SYSTEM "grass-toolbox.dtd">
+<addons version="7">
+  <toolbox name="Hydrology" code="HY">
+    <correlate code="RA" />
+    <task name="r.stream.basins" />
+    <task name="r.stream.channel" />
+    <task name="r.stream.distance" />
+    <task name="r.stream.order" />
+    <task name="r.stream.segment" />
+    <task name="r.stream.slope" />
+    <task name="r.stream.snap" />
+    <task name="r.stream.stats" />
+  </toolbox>
+  <toolbox name="mcda" code="MC">
+    <correlate code="RA" />
+    <task name="r.mcda.ahp" />
+    <task name="r.mcda.roughset" />
+    <task name="r.mcda.input" />
+    <task name="r.mcda.output" />
+  </toolbox>
+</addons>
diff --git a/scripts/g.extension/testsuite/doctest.sh b/scripts/g.extension/testsuite/doctest.sh
new file mode 100755
index 0000000..4b57e9d
--- /dev/null
+++ b/scripts/g.extension/testsuite/doctest.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+
+set -e
+set -x
+
+g.extension --doctest
diff --git a/scripts/g.extension/testsuite/test_addons_modules.py b/scripts/g.extension/testsuite/test_addons_modules.py
new file mode 100644
index 0000000..3b928a2
--- /dev/null
+++ b/scripts/g.extension/testsuite/test_addons_modules.py
@@ -0,0 +1,125 @@
+"""
+TEST:      test_addons_modules.py
+
+AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
+
+PURPOSE:   Test for g.extension individual modules/extensions handling
+
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+from grass.gunittest.utils import silent_rmtree
+
+import os
+
+
+MODULES_OUTPUT = """\
+d.frame
+d.mon2
+g.copyall
+g.isis3mt
+g.proj.all
+r.gdd
+r.geomorphon
+r.le.patch
+r.le.pixel
+r.traveltime
+r.univar2
+v.civil
+v.class.ml
+v.class.mlpy
+v.colors2
+v.delaunay3d
+v.ellipse
+v.in.proj
+v.in.redwg
+v.neighborhoodmatrix
+v.transects
+wx.metadata
+""".replace('\n', os.linesep)
+
+
+class TestModulesMetadata(TestCase):
+
+    url = 'file://' + os.path.abspath('data')
+
+    def test_listing(self):
+        """List individual extensions/modules/addons"""
+        module = SimpleModule('g.extension', flags='l', url=self.url)
+        self.assertModule(module)
+        stdout = module.outputs.stdout
+        self.assertMultiLineEqual(stdout, MODULES_OUTPUT)
+
+
+class TestModulesFromDifferentSources(TestCase):
+
+    url = 'file://' + os.path.abspath('data/sample_modules')
+    path = os.path.join('data', 'sample_modules')
+    install_prefix = 'gextension_test_install_path'
+    # TODO: this is wrong for MS Win
+    files = [
+        os.path.join(install_prefix, 'scripts', 'r.plus.example'),
+        os.path.join(install_prefix, 'docs', 'html', 'r.plus.example.html'),
+    ]
+    # to create archives from the source, the following was used:
+    # zip r.plus.example.zip r.plus.example/*
+    # tar czvf r.plus.example.tar.gz r.plus.example
+    # cd r.plus.example/
+    # tar czvf ../r.plus.example_sep.tar.gz *
+
+    def setUp(self):
+        """Make sure we are not dealing with some old files"""
+        if os.path.exists(self.install_prefix):
+            files = os.listdir(self.install_prefix)
+            if files:
+                RuntimeError("Install prefix path '{}' contains files {}"
+                             .format(self.install_prefix, files))
+
+    def tearDown(self):
+        """Remove created files"""
+        silent_rmtree(self.install_prefix)
+
+    def test_directory_install(self):
+        """Test installing extension from directory"""
+        self.assertModule('g.extension', extension='r.plus.example',
+                          url=os.path.join(self.path, 'r.plus.example'),
+                          prefix=self.install_prefix)
+        # TODO: this is wrong for MS Win
+        for file in self.files:
+            self.assertFileExists(file)
+
+    def test_targz_install(self):
+        """Test installing extension from local .tar.gz"""
+        self.assertModule('g.extension', extension='r.plus.example',
+                          url=os.path.join(self.path,
+                                           'r.plus.example.tar.gz'),
+                          prefix=self.install_prefix)
+        for file in self.files:
+            self.assertFileExists(file)
+
+    def test_remote_targz_without_dir_install(self):
+        """Test installing extension from (remote) .tar.gz without main dir"""
+        self.assertModule('g.extension', extension='r.plus.example',
+                          url=self.url + '/' + 'r.plus.example_sep.tar.gz',
+                          prefix=self.install_prefix, verbose=True)
+        for file in self.files:
+            self.assertFileExists(file)
+
+    def test_remote_zip_install(self):
+        """Test installing extension from .zip specified by URL (local)"""
+        self.assertModule('g.extension', extension='r.plus.example',
+                          url=self.url + '/' + 'r.plus.example.zip',
+                          prefix=self.install_prefix)
+        for file in self.files:
+            self.assertFileExists(os.path.join(file))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/scripts/g.extension/testsuite/test_addons_toolboxes.py b/scripts/g.extension/testsuite/test_addons_toolboxes.py
new file mode 100644
index 0000000..6036f85
--- /dev/null
+++ b/scripts/g.extension/testsuite/test_addons_toolboxes.py
@@ -0,0 +1,52 @@
+"""
+TEST:      test_addons_toolboxes.py
+
+AUTHOR(S): Vaclav Petras <wenzeslaus gmail com>
+
+PURPOSE:   Test for g.extension toolboxes handling
+
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+
+import os
+
+FULL_TOOLBOXES_OUTPUT = """\
+Hydrology (HY)
+* r.stream.basins
+* r.stream.channel
+* r.stream.distance
+* r.stream.order
+* r.stream.segment
+* r.stream.slope
+* r.stream.snap
+* r.stream.stats
+mcda (MC)
+* r.mcda.ahp
+* r.mcda.roughset
+* r.mcda.input
+* r.mcda.output
+"""
+
+
+class TestToolboxesMetadata(TestCase):
+
+    url = 'file://' + os.path.abspath('data')
+
+    def test_listing(self):
+        """List toolboxes and their content"""
+        module = SimpleModule('g.extension', flags='lt', url=self.url)
+        self.assertModule(module)
+        stdout = module.outputs.stdout
+        self.assertLooksLike(stdout, FULL_TOOLBOXES_OUTPUT)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/scripts/g.manual/g.manual.py b/scripts/g.manual/g.manual.py
index 64cc8c6..6aeff1c 100755
--- a/scripts/g.manual/g.manual.py
+++ b/scripts/g.manual/g.manual.py
@@ -48,12 +48,19 @@
 
 import sys
 import os
-import urllib
+
+try:
+    from urllib2 import urlopen
+except ImportError:
+    # python3
+    from urllib.request import urlopen
+
 import webbrowser
 
 from grass.script.utils import basename
 from grass.script import core as grass
 
+
 def start_browser(entry):
     if browser and \
        browser not in ('xdg-open', 'start') and \
@@ -61,65 +68,68 @@ def start_browser(entry):
         grass.fatal(_("Browser '%s' not found") % browser)
 
     if flags['o']:
-        major,minor,patch = grass.version()['version'].split('.')
-        url_path = 'http://grass.osgeo.org/grass%s%s/manuals/%s.html' % (major,minor,entry)
-        if urllib.urlopen(url_path).getcode() != 200:
-            url_path = 'http://grass.osgeo.org/grass%s%s/manuals/addons/%s.html' % (major,minor,entry)
+        major, minor, patch = grass.version()['version'].split('.')
+        url_path = 'http://grass.osgeo.org/grass%s%s/manuals/%s.html' % (major, minor, entry)
+        if urlopen(url_path).getcode() != 200:
+            url_path = 'http://grass.osgeo.org/grass%s%s/manuals/addons/%s.html' % (
+                major, minor, entry)
     else:
         path = os.path.join(gisbase, 'docs', 'html', entry + '.html')
         if not os.path.exists(path) and os.getenv('GRASS_ADDON_BASE'):
             path = os.path.join(os.getenv('GRASS_ADDON_BASE'), 'docs', 'html', entry + '.html')
-    
+
         if not os.path.exists(path):
             grass.fatal(_("No HTML manual page entry for '%s'") % entry)
-    
+
         url_path = 'file://' + path
-    
+
     if browser and browser not in ('xdg-open', 'start'):
         webbrowser.register(browser_name, None)
-    
+
     grass.verbose(_("Starting browser '%(browser)s' for manual"
-                    " entry '%(entry)s'...") % \
+                    " entry '%(entry)s'...") %
                   dict(browser=browser_name, entry=entry))
-    
+
     try:
         webbrowser.open(url_path)
     except:
         grass.fatal(_("Error starting browser '%(browser)s' for HTML file"
                       " '%(path)s'") % dict(browser=browser, path=path))
-    
+
+
 def start_man(entry):
     path = os.path.join(gisbase, 'docs', 'man', 'man1', entry + '.1')
     if not os.path.exists(path) and os.getenv('GRASS_ADDON_BASE'):
         path = os.path.join(os.getenv('GRASS_ADDON_BASE'), 'docs', 'man', 'man1', entry + '.1')
-    
+
     for ext in ['', '.gz', '.bz2']:
         if os.path.exists(path + ext):
             os.execlp('man', 'man', path + ext)
             grass.fatal(_("Error starting 'man' for '%s'") % path)
     grass.fatal(_("No manual page entry for '%s'") % entry)
 
+
 def main():
     global gisbase, browser, browser_name
-    
+
     if flags['i'] and flags['t']:
         grass.fatal(_("Flags -%c and -%c are mutually exclusive") % ('i', 't'))
-    
+
     special = None
     if flags['i']:
         special = 'index'
-    elif flags ['t']:
+    elif flags['t']:
         special = 'topics'
-    
+
     if flags['m']:
         start = start_man
     else:
         start = start_browser
-    
-    entry  = options['entry']
+
+    entry = options['entry']
     gisbase = os.environ['GISBASE']
     browser = os.getenv('GRASS_HTML_BROWSER', '')
-    
+
     if sys.platform == 'darwin':
         # hack for MacOSX
         browser_name = os.getenv('GRASS_HTML_BROWSER_MACOSX', '..').split('.')[2]
@@ -128,14 +138,14 @@ def main():
         browser_name = basename(browser, 'exe')
     else:
         browser_name = basename(browser)
-    
+
     # keep order!
     # first test for index...
     if special:
         start(special)
     else:
         start(entry)
-    
+
     return 0
 
 if __name__ == "__main__":
diff --git a/scripts/g.search.modules/g.search.modules.html b/scripts/g.search.modules/g.search.modules.html
index 5faf96c..29b3d85 100644
--- a/scripts/g.search.modules/g.search.modules.html
+++ b/scripts/g.search.modules/g.search.modules.html
@@ -67,4 +67,4 @@ db.select
 Jachym Cepicky, OpenGeoLabs s.r.o., Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-04-21 16:34:29 +0200 (Thu, 21 Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-21 16:33:08 +0200 (Thu, 21 Apr 2016) $</i>
diff --git a/scripts/g.search.modules/g.search.modules.py b/scripts/g.search.modules/g.search.modules.py
index 18ee140..d9e2c28 100755
--- a/scripts/g.search.modules/g.search.modules.py
+++ b/scripts/g.search.modules/g.search.modules.py
@@ -50,7 +50,7 @@
 #% description: JSON format
 #% guisection: Output
 #%end
-
+from __future__ import print_function
 import os
 import sys
 
@@ -58,11 +58,12 @@ from grass.script.utils import diff_files, try_rmdir
 from grass.script import core as grass
 
 try:
-    import xml.etree.ElementTree   as etree
+    import xml.etree.ElementTree as etree
 except ImportError:
-    import elementtree.ElementTree as etree # Python <= 2.4
+    import elementtree.ElementTree as etree  # Python <= 2.4
+
+COLORIZE = False
 
-COLORIZE=False
 
 def main():
     global COLORIZE
@@ -79,7 +80,8 @@ def main():
 
     modules = _search_module(keywords, AND, manpages)
 
-    print_results(modules, out_format) 
+    print_results(modules, out_format)
+
 
 def print_results(data, out_format=None):
     """
@@ -107,30 +109,34 @@ def print_results(data, out_format=None):
     elif out_format == 'json':
         _print_results_json(data)
 
+
 def _print_results_shell(data):
     """Print just the name attribute"""
 
     for item in data:
-        print item['name']
+        print(item['name'])
+
 
 def _print_results_json(data):
     """Print JSON output"""
 
     import json
-    print json.dumps(data, sort_keys=True, indent=4, separators=(',', ': '))
+    print(json.dumps(data, sort_keys=True, indent=4, separators=(',', ': ')))
+
 
 def _print_results(data):
 
     import textwrap
 
     for item in data:
-        print '\n{}'.format(colorize(item['name'], attrs=['bold']))
+        print('\n{}'.format(colorize(item['name'], attrs=['bold'])))
         for attr in item['attributes']:
             out = '{}: {}'.format(attr, item['attributes'][attr])
-            out = textwrap.wrap(out, width=79, initial_indent=4*' ',
-                    subsequent_indent=4*' '+len(attr)*' '+'  ')
+            out = textwrap.wrap(out, width=79, initial_indent=4 * ' ',
+                                subsequent_indent=4 * ' ' + len(attr) * ' ' + '  ')
             for line in out:
-                print line
+                print(line)
+
 
 def colorize(text, attrs=None, pattern=None):
     """Colorize given text input
@@ -140,7 +146,6 @@ def colorize(text, attrs=None, pattern=None):
     :param string pattern: text to be highlighted in input text
     :return: colored string
     """
-    
 
     if COLORIZE:
         try:
@@ -156,6 +161,7 @@ def colorize(text, attrs=None, pattern=None):
     else:
         return colored(text, attrs=attrs)
 
+
 def _search_module(keywords, logical_and=False, manpages=False):
     """Search modules by given keywords
 
@@ -200,11 +206,11 @@ def _search_module(keywords, logical_and=False, manpages=False):
                     found = [True]
 
                 description = colorize(description,
-                                        attrs=['underline'],
-                                        pattern=keyword)
+                                       attrs=['underline'],
+                                       pattern=keyword)
                 module_keywords = colorize(module_keywords,
-                                            attrs=['underline'],
-                                            pattern=keyword)
+                                           attrs=['underline'],
+                                           pattern=keyword)
 
         if False not in found:
             found_modules.append({
@@ -217,8 +223,9 @@ def _search_module(keywords, logical_and=False, manpages=False):
 
     return found_modules
 
+
 def _basic_search(pattern, name, description, module_keywords):
-    
+
     if name.lower().find(pattern) > -1 or\
        description.lower().find(pattern) > -1 or\
        module_keywords.lower().find(pattern) > -1:
@@ -227,6 +234,7 @@ def _basic_search(pattern, name, description, module_keywords):
     else:
         return False
 
+
 def _manpage_search(pattern, name):
 
     manpage = grass.read_command('g.manual', flags='m', entry=name)
diff --git a/scripts/g.search.modules/testsuite/test_g_search_modules.py b/scripts/g.search.modules/testsuite/test_g_search_modules.py
index 52eb871..915be7c 100644
--- a/scripts/g.search.modules/testsuite/test_g_search_modules.py
+++ b/scripts/g.search.modules/testsuite/test_g_search_modules.py
@@ -52,7 +52,7 @@ class TestSearchModule(TestCase):
         stdout = module.outputs.stdout.split()
         self.assertEqual(stdout[0],
                          termcolor.colored('r.watershed',
-                         attrs=['bold']))
+                                           attrs=['bold']))
 
     def test_manual_pages(self):
         module = SimpleModule('g.search.modules', keyword="kapri", flags="gm")
diff --git a/scripts/i.colors.enhance/i.colors.enhance.html b/scripts/i.colors.enhance/i.colors.enhance.html
index f6129d4..7ce05dc 100644
--- a/scripts/i.colors.enhance/i.colors.enhance.html
+++ b/scripts/i.colors.enhance/i.colors.enhance.html
@@ -72,4 +72,4 @@ The <b>strength</b> option requires further refinement.
 Markus Neteler, Trento, Italy<br>
 M. Hamish Bowman, Dept. Marine Science, Otago University, New Zealand
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/i.colors.enhance/i.colors.enhance.py b/scripts/i.colors.enhance/i.colors.enhance.py
index 47e07c6..d558e91 100755
--- a/scripts/i.colors.enhance/i.colors.enhance.py
+++ b/scripts/i.colors.enhance/i.colors.enhance.py
@@ -8,7 +8,7 @@
 #		Hamish Bowman, scripting enhancements
 #               Converted to Python by Glynn Clements
 #
-# PURPOSE:      create pretty RGBs: the trick is to remove outliers 
+# PURPOSE:      create pretty RGBs: the trick is to remove outliers
 #               using percentiles (area under the histogram curve)
 #
 # COPYRIGHT:	(C) 2006, 2008, 2012-2014 by the GRASS Development Team
@@ -68,9 +68,9 @@
 #%end
 
 import sys
-import os
-import string
-import grass.script as grass
+
+import grass.script as gscript
+
 try:
     # new for python 2.6, in 2.5 it may be easy_install'd.
     import multiprocessing as mp
@@ -85,14 +85,16 @@ def get_percentile(map, percentiles):
     val2 = percentiles[1]
     values = '%s,%s' % (val1, val2)
 
-    s = grass.read_command('r.quantile', input = map, 
-                           percentiles = values, quiet = True)
+    s = gscript.read_command('r.quantile', input=map,
+                             percentiles=values, quiet=True)
 
     val_str1 = s.splitlines()[0].split(':')[2]
     val_str2 = s.splitlines()[1].split(':')[2]
     return (float(val_str1), float(val_str2))
 
 # wrapper to handle multiprocesses communications back to the parent
+
+
 def get_percentile_mp(map, percentiles, conn):
     # Process() doesn't like storing connection parts in
     #  separate dictionaries, only wants to pass through tuples,
@@ -101,19 +103,16 @@ def get_percentile_mp(map, percentiles, conn):
     output_pipe, input_pipe = conn
     input_pipe.close()
     result = get_percentile(map, percentiles)
-    grass.debug('child (%s) (%.1f, %.1f)' % (map, result[0], result[1]))
+    gscript.debug('child (%s) (%.1f, %.1f)' % (map, result[0], result[1]))
     output_pipe.send(result)
     output_pipe.close()
 
+
 def set_colors(map, v0, v1):
-    rules = [
-	"0% black\n",
-	"%f black\n" % v0,
-	"%f white\n" % v1,
-	"100% white\n"
-	]
-    rules = ''.join(rules)
-    grass.write_command('r.colors', map = map, rules = '-', stdin = rules, quiet = True)
+    rules = ''.join(["0% black\n", "%f black\n" % v0,
+                     "%f white\n" % v1, "100% white\n"])
+    gscript.write_command('r.colors', map=map, rules='-', stdin=rules,
+                          quiet=True)
 
 
 def main():
@@ -124,7 +123,7 @@ def main():
     full = flags['f']
     preserve = flags['p']
     reset = flags['r']
-    
+
     global do_mp
 
     if flags['s']:
@@ -135,92 +134,90 @@ def main():
     # must be more than "2" ?
 
     if full:
-	for i in [red, green, blue]:
-	    grass.run_command('r.colors', map = i, color = 'grey', quiet = True)
-	sys.exit(0)
+        for i in [red, green, blue]:
+            gscript.run_command('r.colors', map=i, color='grey', quiet=True)
+        sys.exit(0)
 
     if reset:
-	for i in [red, green, blue]:
-	    grass.run_command('r.colors', map = i, color = 'grey255', quiet = True)
-	sys.exit(0)
-
+        for i in [red, green, blue]:
+            gscript.run_command('r.colors', map=i, color='grey255', quiet=True)
+        sys.exit(0)
 
     if not preserve:
         if do_mp:
-            grass.message(_("Processing..."))
-	    # set up jobs and launch them
-	    proc = {}
-	    conn = {}
-	    for i in [red, green, blue]:
-	        conn[i] = mp.Pipe()
-	        proc[i] = mp.Process(target = get_percentile_mp,
-				     args = (i, ['2', brightness],
-				     conn[i],))
-		proc[i].start()
-            grass.percent(1, 2, 1)
-            
-	    # collect results and wait for jobs to finish
-	    for i in [red, green, blue]:
-		output_pipe, input_pipe = conn[i]
-		(v0, v1) = input_pipe.recv()
-		grass.debug('parent (%s) (%.1f, %.1f)' % (i, v0, v1))
-		input_pipe.close()
-		proc[i].join()
-		set_colors(i, v0, v1)
-            grass.percent(1, 1, 1)
-	else:
-	    for i in [red, green, blue]:
-	        grass.message(_("Processing..."))
-	        (v0, v1) = get_percentile(i, ['2', brightness])
-	        grass.debug("<%s>:  min=%f   max=%f" % (i, v0, v1))
-	        set_colors(i, v0, v1)
+            gscript.message(_("Processing..."))
+            # set up jobs and launch them
+            proc = {}
+            conn = {}
+            for i in [red, green, blue]:
+                conn[i] = mp.Pipe()
+                proc[i] = mp.Process(target=get_percentile_mp,
+                                     args=(i, ['2', brightness],
+                                           conn[i],))
+                proc[i].start()
+            gscript.percent(1, 2, 1)
+
+            # collect results and wait for jobs to finish
+            for i in [red, green, blue]:
+                output_pipe, input_pipe = conn[i]
+                (v0, v1) = input_pipe.recv()
+                gscript.debug('parent (%s) (%.1f, %.1f)' % (i, v0, v1))
+                input_pipe.close()
+                proc[i].join()
+                set_colors(i, v0, v1)
+            gscript.percent(1, 1, 1)
+        else:
+            for i in [red, green, blue]:
+                gscript.message(_("Processing..."))
+                (v0, v1) = get_percentile(i, ['2', brightness])
+                gscript.debug("<%s>:  min=%f   max=%f" % (i, v0, v1))
+                set_colors(i, v0, v1)
 
     else:
-	all_max = 0
-	all_min = 999999
-
-	if do_mp:
-	    grass.message(_("Processing..."))
-	    # set up jobs and launch jobs
-	    proc = {}
-	    conn = {}
-	    for i in [red, green, blue]:
-		conn[i] = mp.Pipe()
-		proc[i] = mp.Process(target = get_percentile_mp,
-				     args = (i, ['2', brightness],
-				     conn[i],))
-		proc[i].start()
-            grass.percent(1, 2, 1)
-            
-	    # collect results and wait for jobs to finish
-	    for i in [red, green, blue]:
-		output_pipe, input_pipe = conn[i]
-		(v0, v1) = input_pipe.recv()
-		grass.debug('parent (%s) (%.1f, %.1f)' % (i, v0, v1))
-		input_pipe.close()
-		proc[i].join()
-		all_min = min(all_min, v0)
-		all_max = max(all_max, v1)
-            grass.percent(1, 1, 1)
-	else:
-	    for i in [red, green, blue]:
-		grass.message(_("Processing..."))
-		(v0, v1) = get_percentile(i, ['2', brightness])
-		grass.debug("<%s>:  min=%f   max=%f" % (i, v0, v1))
-		all_min = min(all_min, v0)
-		all_max = max(all_max, v1)
-
-	grass.debug("all_min=%f   all_max=%f" % (all_min, all_max))
-	for i in [red, green, blue]:
-	    set_colors(i, all_min, all_max)
+        all_max = 0
+        all_min = 999999
 
+        if do_mp:
+            gscript.message(_("Processing..."))
+            # set up jobs and launch jobs
+            proc = {}
+            conn = {}
+            for i in [red, green, blue]:
+                conn[i] = mp.Pipe()
+                proc[i] = mp.Process(target=get_percentile_mp,
+                                     args=(i, ['2', brightness],
+                                           conn[i],))
+                proc[i].start()
+            gscript.percent(1, 2, 1)
+
+            # collect results and wait for jobs to finish
+            for i in [red, green, blue]:
+                output_pipe, input_pipe = conn[i]
+                (v0, v1) = input_pipe.recv()
+                gscript.debug('parent (%s) (%.1f, %.1f)' % (i, v0, v1))
+                input_pipe.close()
+                proc[i].join()
+                all_min = min(all_min, v0)
+                all_max = max(all_max, v1)
+            gscript.percent(1, 1, 1)
+        else:
+            for i in [red, green, blue]:
+                gscript.message(_("Processing..."))
+                (v0, v1) = get_percentile(i, ['2', brightness])
+                gscript.debug("<%s>:  min=%f   max=%f" % (i, v0, v1))
+                all_min = min(all_min, v0)
+                all_max = max(all_max, v1)
+
+        gscript.debug("all_min=%f   all_max=%f" % (all_min, all_max))
+        for i in [red, green, blue]:
+            set_colors(i, all_min, all_max)
 
     # write cmd history:
-    mapset = grass.gisenv()['MAPSET']
+    mapset = gscript.gisenv()['MAPSET']
     for i in [red, green, blue]:
-        if grass.find_file(i)['mapset'] == mapset:
-            grass.raster_history(i)
+        if gscript.find_file(i)['mapset'] == mapset:
+            gscript.raster_history(i)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     main()
diff --git a/scripts/i.image.mosaic/i.image.mosaic.py b/scripts/i.image.mosaic/i.image.mosaic.py
index ab79d65..ae84d78 100755
--- a/scripts/i.image.mosaic/i.image.mosaic.py
+++ b/scripts/i.image.mosaic/i.image.mosaic.py
@@ -32,67 +32,70 @@
 #%end
 #%option G_OPT_R_OUTPUT
 #%end
+from __future__ import print_function
+
+import grass.script as gscript
 
-import sys
-import os
-import grass.script as grass
 
 def copy_colors(fh, map, offset):
-    p = grass.pipe_command('r.colors.out', map = map)
+    p = gscript.pipe_command('r.colors.out', map=map)
     for line in p.stdout:
-	f = line.rstrip('\r\n').split(' ')
-	if offset:
-	    if f[0] in ['nv', 'default']:
-		continue
-	    f[0] = str(float(f[0]) + offset)
-	fh.write(' '.join(f) + '\n')
+        f = line.rstrip('\r\n').split(' ')
+        if offset:
+            if f[0] in ['nv', 'default']:
+                continue
+            f[0] = str(float(f[0]) + offset)
+        fh.write(' '.join(f) + '\n')
     p.wait()
 
+
 def get_limit(map):
-    return grass.raster_info(map)['max']
+    return gscript.raster_info(map)['max']
+
 
 def make_expression(i, count):
     if i > count:
-	return "null()"
+        return "null()"
     else:
-	e = make_expression(i + 1, count)
-	return "if(isnull($image%d),%s,$image%d+$offset%d)" % (i, e, i, i)
+        e = make_expression(i + 1, count)
+        return "if(isnull($image%d),%s,$image%d+$offset%d)" % (i, e, i, i)
+
 
 def main():
     images = options['input'].split(',')
     output = options['output']
 
     count = len(images)
-
-    grass.warning(_('Do not forget to set region properly to cover all images.'))
+    msg = _('Do not forget to set region properly to cover all images.')
+    gscript.warning(msg)
 
     offset = 0
     offsets = []
     parms = {}
     for n, img in enumerate(images):
-	offsets.append(offset)
-	parms['image%d' % (n + 1)] = img
-	parms['offset%d' % (n + 1)] = offset
-	offset += get_limit(img) + 1
+        offsets.append(offset)
+        parms['image%d' % (n + 1)] = img
+        parms['offset%d' % (n + 1)] = offset
+        offset += get_limit(img) + 1
 
-    grass.message(_("Mosaicing %d images...") % count)
+    gscript.message(_("Mosaicing %d images...") % count)
 
-    grass.mapcalc("$output = " + make_expression(1, count),
-		  output = output, **parms)
+    gscript.mapcalc("$output = " + make_expression(1, count),
+                    output=output, **parms)
 
-    #modify the color table:
-    p = grass.feed_command('r.colors', map = output, rules='-')
+    # modify the color table:
+    p = gscript.feed_command('r.colors', map=output, rules='-')
     for img, offset in zip(images, offsets):
-	print img, offset
-	copy_colors(p.stdin, img, offset)
+        print(img, offset)
+        copy_colors(p.stdin, img, offset)
     p.stdin.close()
     p.wait()
 
-    grass.message(_("Done. Raster map <%s> created.") % output)
+    gscript.message(_("Done. Raster map <%s> created.") % output)
 
     # write cmd history:
-    grass.raster_history(output)
+    gscript.raster_history(output)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     main()
diff --git a/scripts/i.in.spotvgt/i.in.spotvgt.py b/scripts/i.in.spotvgt/i.in.spotvgt.py
index c533db0..2acd632 100755
--- a/scripts/i.in.spotvgt/i.in.spotvgt.py
+++ b/scripts/i.in.spotvgt/i.in.spotvgt.py
@@ -23,7 +23,7 @@
 #      -  gdal: http://www.gdal.org
 #
 # Notes:
-# * According to the faq (http://www.vgt.vito.be/faq/faq.html), SPOT vegetation 
+# * According to the faq (http://www.vgt.vito.be/faq/faq.html), SPOT vegetation
 #   coordinates refer to the center of a pixel.
 # * GDAL coordinates refer to the corner of a pixel
 #   -> correction of 0001/0001_LOG.TXT coordinates by 0.5 pixel
@@ -48,7 +48,7 @@
 import os
 import atexit
 import string
-import grass.script as grass
+import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
 
@@ -67,103 +67,109 @@ vrt = """<VRTDataset rasterXSize="$XSIZE" rasterYSize="$YSIZE">
  </VRTRasterBand>
 </VRTDataset>"""
 
-#### a function for writing VRT files
+# a function for writing VRT files
+
+
 def create_VRT_file(projfile, vrtfile, infile):
     fh = file(projfile)
     kv = {}
     for l in fh:
-	f = l.rstrip('\r\n').split()
-	if f < 2:
-	    continue
-	kv[f[0]] = f[1]
+        f = l.rstrip('\r\n').split()
+        if f < 2:
+            continue
+        kv[f[0]] = f[1]
     fh.close()
 
     north_center = kv['CARTO_UPPER_LEFT_Y']
-    south_center = kv['CARTO_LOWER_LEFT_Y']
-    east_center  = kv['CARTO_UPPER_RIGHT_X']
-    west_center  = kv['CARTO_UPPER_LEFT_X']
+    # south_center = kv['CARTO_LOWER_LEFT_Y']
+    # east_center = kv['CARTO_UPPER_RIGHT_X']
+    west_center = kv['CARTO_UPPER_LEFT_X']
     map_proj_res = kv['MAP_PROJ_RESOLUTION']
-    xsize        = kv['IMAGE_UPPER_RIGHT_COL']
-    ysize        = kv['IMAGE_LOWER_RIGHT_ROW']
+    xsize = kv['IMAGE_UPPER_RIGHT_COL']
+    ysize = kv['IMAGE_LOWER_RIGHT_ROW']
 
-    resolution   = float(map_proj_res)
+    resolution = float(map_proj_res)
     north_corner = float(north_center) + resolution / 2
-    south_corner = float(south_center) - resolution / 2
-    east_corner  = float(east_center ) + resolution / 2
-    west_corner  = float(west_center ) - resolution / 2
+    # south_corner = float(south_center) - resolution / 2
+    # east_corner = float(east_center) + resolution / 2
+    west_corner = float(west_center) - resolution / 2
 
     t = string.Template(vrt)
-    s = t.substitute(NORTHCORNER = north_corner, WESTCORNER = west_corner,
-		     XSIZE = xsize, YSIZE = ysize, RESOLUTION = map_proj_res,
-		     FILENAME = infile)
+    s = t.substitute(NORTHCORNER=north_corner, WESTCORNER=west_corner,
+                     XSIZE=xsize, YSIZE=ysize, RESOLUTION=map_proj_res,
+                     FILENAME=infile)
     outf = file(vrtfile, 'w')
     outf.write(s)
     outf.close()
 
+
 def cleanup():
-   #### clean up the mess
-   grass.try_remove(vrtfile)
-   grass.try_remove(tmpfile)
+    # clean up the mess
+    gscript.try_remove(vrtfile)
+    gscript.try_remove(tmpfile)
+
 
 def main():
     global vrtfile, tmpfile
 
-    infile  = options['input']
+    infile = options['input']
     rast = options['output']
     also = flags['a']
 
-    #### check for gdalinfo (just to check if installation is complete)
-    if not grass.find_program('gdalinfo', '--help'):
-	grass.fatal(_("'gdalinfo' not found, install GDAL tools first (http://www.gdal.org)"))
+    # check for gdalinfo (just to check if installation is complete)
+    if not gscript.find_program('gdalinfo', '--help'):
+        gscript.fatal(_("'gdalinfo' not found, install GDAL tools first "
+                        "(http://www.gdal.org)"))
 
     pid = str(os.getpid())
-    tmpfile = grass.tempfile()
+    tmpfile = gscript.tempfile()
 
-    ################### let's go
+    # let's go
 
     spotdir = os.path.dirname(infile)
-    spotname = grass.basename(infile, 'hdf')
+    spotname = gscript.basename(infile, 'hdf')
 
     if rast:
-	name = rast
+        name = rast
     else:
-	name = spotname
+        name = spotname
 
-    if not grass.overwrite() and grass.find_file(name)['file']:
-	grass.fatal(_("<%s> already exists. Aborting.") % name)
+    if not gscript.overwrite() and gscript.find_file(name)['file']:
+        gscript.fatal(_("<%s> already exists. Aborting.") % name)
 
-    # still a ZIP file?  (is this portable?? see the r.in.srtm script for ideas)
+    # still a ZIP file?  (is this portable?? see the r.in.srtm script for
+    # ideas)
     if infile.lower().endswith('.zip'):
-	grass.fatal(_("Please extract %s before import.") % infile)
+        gscript.fatal(_("Please extract %s before import.") % infile)
 
     try:
-	p = grass.Popen(['file', '-ib', infile], stdout = grass.PIPE)
-	s = p.communicate()[0]
-	if s == "application/x-zip":
-	    grass.fatal(_("Please extract %s before import.") % infile)
+        p = gscript.Popen(['file', '-ib', infile], stdout=gscript.PIPE)
+        s = p.communicate()[0]
+        if s == "application/x-zip":
+            gscript.fatal(_("Please extract %s before import.") % infile)
     except:
-	pass
+        pass
 
-    ### create VRT header for NDVI
+    # create VRT header for NDVI
 
     projfile = os.path.join(spotdir, "0001_LOG.TXT")
     vrtfile = tmpfile + '.vrt'
 
     # first process the NDVI:
-    grass.try_remove(vrtfile)
+    gscript.try_remove(vrtfile)
     create_VRT_file(projfile, vrtfile, infile)
 
-    ## let's import the NDVI map...
-    grass.message(_("Importing SPOT VGT NDVI map..."))
+    # let's import the NDVI map...
+    gscript.message(_("Importing SPOT VGT NDVI map..."))
     try:
-        grass.run_command('r.in.gdal', input=vrtfile, output=name)
+        gscript.run_command('r.in.gdal', input=vrtfile, output=name)
     except CalledModuleError:
-        grass.fatal(_("An error occurred. Stop."))
+        gscript.fatal(_("An error occurred. Stop."))
 
-    grass.message(_("Imported SPOT VEGETATION NDVI map <%s>.") % name)
+    gscript.message(_("Imported SPOT VEGETATION NDVI map <%s>.") % name)
 
     #################
-    ## http://www.vgt.vito.be/faq/FAQS/faq19.html
+    # http://www.vgt.vito.be/faq/FAQS/faq19.html
     # What is the relation between the digital number and the real NDVI ?
     # Real NDVI =coefficient a * Digital Number + coefficient b
     #           = a * DN +b
@@ -173,28 +179,29 @@ def main():
 
     # clone current region
     # switch to a temporary region
-    grass.use_temp_region()
+    gscript.use_temp_region()
 
-    grass.run_command('g.region', raster = name, quiet = True)
+    gscript.run_command('g.region', raster=name, quiet=True)
 
-    grass.message(_("Remapping digital numbers to NDVI..."))
+    gscript.message(_("Remapping digital numbers to NDVI..."))
     tmpname = "%s_%s" % (name, pid)
-    grass.mapcalc("$tmpname = 0.004 * $name - 0.1", tmpname = tmpname, name = name)
-    grass.run_command('g.remove', type = 'raster', name = name, quiet = True, flags = 'f')
-    grass.run_command('g.rename', raster = (tmpname, name), quiet = True)
+    gscript.mapcalc("$tmpname = 0.004 * $name - 0.1", tmpname=tmpname, name=name)
+    gscript.run_command('g.remove', type='raster', name=name, quiet=True,
+                        flags='f')
+    gscript.run_command('g.rename', raster=(tmpname, name), quiet=True)
 
     # write cmd history:
-    grass.raster_history(name)
+    gscript.raster_history(name)
 
-    #apply color table:
-    grass.run_command('r.colors', map = name, color = 'ndvi', quiet = True)
+    # apply color table:
+    gscript.run_command('r.colors', map=name, color='ndvi', quiet=True)
 
     ##########################
     # second, optionally process the SM quality map:
-    
-    #SM Status Map
+
+    # SM Status Map
     # http://nieuw.vgt.vito.be/faq/FAQS/faq22.html
-    #Data about
+    # Data about
     # Bit NR 7: Radiometric quality for B0 coded as 0 if bad and 1 if good
     # Bit NR 6: Radiometric quality for B2 coded as 0 if bad and 1 if good
     # Bit NR 5: Radiometric quality for B3 coded as 0 if bad and 1 if good
@@ -205,7 +212,7 @@ def main():
     # Bit NR 0:	0	1	0		1
     # 		clear	shadow	uncertain	cloud
     #
-    #Note:
+    # Note:
     # pos 7     6    5    4    3    2   1   0 (bit position)
     #   128    64   32   16    8    4   2   1 (values for 8 bit)
     #
@@ -218,54 +225,55 @@ def main():
     # A good map threshold: >= 248
 
     if also:
-	grass.message(_("Importing SPOT VGT NDVI quality map..."))
-	grass.try_remove(vrtfile)
-	qname = spotname.replace('NDV','SM')
-	qfile = os.path.join(spotdir, qname)
-	create_VRT_file(projfile, vrtfile, qfile)
-
-	## let's import the SM quality map...
-	smfile = name + '.sm'
+        gscript.message(_("Importing SPOT VGT NDVI quality map..."))
+        gscript.try_remove(vrtfile)
+        qname = spotname.replace('NDV', 'SM')
+        qfile = os.path.join(spotdir, qname)
+        create_VRT_file(projfile, vrtfile, qfile)
+
+        # let's import the SM quality map...
+        smfile = name + '.sm'
         try:
-            grass.run_command('r.in.gdal', input=vrtfile, output=smfile)
+            gscript.run_command('r.in.gdal', input=vrtfile, output=smfile)
         except CalledModuleError:
-            grass.fatal(_("An error occurred. Stop."))
-
-	# some of the possible values:
-	rules = [r + '\n' for r in [
-	    '8 50 50 50',
-	    '11 70 70 70',
-	    '12 90 90 90',
-	    '60 grey',
-	    '155 blue',
-	    '232 violet',
-	    '235 red',
-	    '236 brown',
-	    '248 orange',
-	    '251 yellow',
-	    '252 green'
-	    ]]
-	grass.write_command('r.colors', map = smfile, rules = '-', stdin = rules)
-
-	grass.message(_("Imported SPOT VEGETATION SM quality map <%s>.") % smfile)
-	grass.message(_("Note: A snow map can be extracted by category 252 (d.rast %s cat=252)") % smfile)
-	grass.message("")
-	grass.message(_("Filtering NDVI map by Status Map quality layer..."))
-
-	filtfile = "%s_filt" % name
-	grass.mapcalc("$filtfile = if($smfile % 4 == 3 || ($smfile / 16) % 16 == 0, null(), $name)",
-		      filtfile = filtfile, smfile = smfile, name = name)
-	grass.run_command('r.colors', map = filtfile, color = 'ndvi', quiet = True)
-	grass.message(_("Filtered SPOT VEGETATION NDVI map <%s>.") % filtfile)
-
-	# write cmd history:
-	grass.raster_history(smfile)
-	grass.raster_history(filtfile)
-
-    grass.message(_("Done."))
+            gscript.fatal(_("An error occurred. Stop."))
+
+        # some of the possible values:
+        rules = [r + '\n' for r in ['8 50 50 50',
+                                    '11 70 70 70',
+                                    '12 90 90 90',
+                                    '60 grey',
+                                    '155 blue',
+                                    '232 violet',
+                                    '235 red',
+                                    '236 brown',
+                                    '248 orange',
+                                    '251 yellow',
+                                    '252 green']]
+        gscript.write_command('r.colors', map=smfile, rules='-', stdin=rules)
+
+        gscript.message(_("Imported SPOT VEGETATION SM quality map <%s>.") %
+                        smfile)
+        gscript.message(_("Note: A snow map can be extracted by category "
+                          "252 (d.rast %s cat=252)") % smfile)
+        gscript.message("")
+        gscript.message(_("Filtering NDVI map by Status Map quality layer..."))
+
+        filtfile = "%s_filt" % name
+        gscript.mapcalc("$filtfile = if($smfile % 4 == 3 || "
+                        "($smfile / 16) % 16 == 0, null(), $name)",
+                        filtfile=filtfile, smfile=smfile, name=name)
+        gscript.run_command('r.colors', map=filtfile, color='ndvi', quiet=True)
+        gscript.message(_("Filtered SPOT VEGETATION NDVI map <%s>.") %
+                        filtfile)
+
+        # write cmd history:
+        gscript.raster_history(smfile)
+        gscript.raster_history(filtfile)
+
+    gscript.message(_("Done."))
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     atexit.register(cleanup)
     main()
-
diff --git a/scripts/i.oif/i.oif.html b/scripts/i.oif/i.oif.html
index 8e6f5d8..17ae18e 100644
--- a/scripts/i.oif/i.oif.html
+++ b/scripts/i.oif/i.oif.html
@@ -81,4 +81,4 @@ Markus Neteler, ITC-Irst, Trento, Italy<br>
 Updated to GRASS 5.7 by Michael Barton, Arizona State University
 
 <p>
-<i>Last changed: $Date: 2015-07-20 10:49:51 +0200 (Mon, 20 Jul 2015) $</i>
+<i>Last changed: $Date: 2015-07-20 10:45:41 +0200 (Mon, 20 Jul 2015) $</i>
diff --git a/scripts/i.oif/i.oif.py b/scripts/i.oif/i.oif.py
index 99b6cf1..645b2d4 100755
--- a/scripts/i.oif/i.oif.py
+++ b/scripts/i.oif/i.oif.py
@@ -121,7 +121,6 @@ def main():
             kv = parse_key_val(pout[band])
             stddev[band] = float(kv['stddev'])
 
-
     grass.message(_("Calculating Correlation Matrix..."))
     correlation = {}
     s = grass.read_command('r.covar', flags='r', map=[band for band in bands],
@@ -141,7 +140,7 @@ def main():
         oif.append((oifcalc(stddev, correlation, *p), p))
     oif.sort(reverse=True)
 
-    grass.verbose(_("The Optimum Index Factor analysis result " \
+    grass.verbose(_("The Optimum Index Factor analysis result "
                     "(best combination shown first):"))
 
     if shell:
diff --git a/scripts/i.pansharpen/i.pansharpen.html b/scripts/i.pansharpen/i.pansharpen.html
index 5b0cf7b..c0c9ee6 100644
--- a/scripts/i.pansharpen/i.pansharpen.html
+++ b/scripts/i.pansharpen/i.pansharpen.html
@@ -223,4 +223,4 @@ Michael Barton (Arizona State University, USA)<br>
 with contributions from Markus Neteler (ITC-irst, Italy); Glynn Clements;
 Luca Delucchi (Fondazione E. Mach, Italy); Markus Metz; and Hamish Bowman. 
 
-<p><i>Last changed: $Date: 2016-02-09 17:51:49 +0100 (Tue, 09 Feb 2016) $</i>
+<p><i>Last changed: $Date: 2016-02-09 17:51:03 +0100 (Tue, 09 Feb 2016) $</i>
diff --git a/scripts/i.spectral/i.spectral.html b/scripts/i.spectral/i.spectral.html
index 0ad43a1..00a251c 100644
--- a/scripts/i.spectral/i.spectral.html
+++ b/scripts/i.spectral/i.spectral.html
@@ -50,4 +50,4 @@ Markus Neteler<br>
 Francesco Pirotti
 
 <p>
-<i>Last changed: $Date: 2014-12-27 00:50:11 +0100 (Sat, 27 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-27 00:33:06 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/scripts/i.spectral/i.spectral.py b/scripts/i.spectral/i.spectral.py
index 662f896..6bd9ea7 100755
--- a/scripts/i.spectral/i.spectral.py
+++ b/scripts/i.spectral/i.spectral.py
@@ -20,7 +20,7 @@
 #
 # written by Markus Neteler 18. August 1998
 #            neteler geog.uni-hannover.de
-# 
+#
 # bugfix: 25. Nov.98/20. Jan. 1999
 # 3 March 2006: Added multiple images and group support by Francesco Pirotti - CIRGEO
 #
@@ -48,7 +48,7 @@
 #%end
 #%option G_OPT_F_OUTPUT
 #% key: output
-#% description: Name for output image
+#% description: Name for output image (or text file for -t)
 #% guisection: Output
 #% required : no
 #%end
@@ -69,17 +69,30 @@
 #% key: g
 #% description: Use gnuplot for display
 #%end
+#% flag
+#% key: t
+#% description: output to text file
+#%end
 
 import os
 import atexit
 from grass.script.utils import try_rmdir
-from grass.script import core as grass
+from grass.script import core as gcore
 
 
 def cleanup():
     try_rmdir(tmp_dir)
 
 
+def write2textf(what, output):
+    outf = open(output, 'w')
+    i = 0
+    for row in enumerate(what):
+        i = i + 1
+        outf.write("%d, %s\n" % (i, row))
+    outf.close()
+
+
 def draw_gnuplot(what, xlabels, output, img_format, coord_legend):
     xrange = 0
 
@@ -96,12 +109,12 @@ def draw_gnuplot(what, xlabels, output, img_format, coord_legend):
     if output:
         if img_format == 'png':
             term_opts = "png truecolor large size 825,550"
-	elif img_format == 'eps':
+        elif img_format == 'eps':
             term_opts = "postscript eps color solid size 6,4"
-	elif img_format == 'svg':
+        elif img_format == 'svg':
             term_opts = "svg size 825,550 dynamic solid"
         else:
-            grass.fatal(_("Programmer error (%s)") % img_format)
+            gcore.fatal(_("Programmer error (%s)") % img_format)
 
         lines += [
             "set term " + term_opts,
@@ -141,9 +154,9 @@ def draw_gnuplot(what, xlabels, output, img_format, coord_legend):
     plotf.close()
 
     if output:
-        grass.call(['gnuplot', plotfile])
+        gcore.call(['gnuplot', plotfile])
     else:
-        grass.call(['gnuplot', '-persist', plotfile])
+        gcore.call(['gnuplot', '-persist', plotfile])
 
 
 def draw_linegraph(what):
@@ -164,7 +177,7 @@ def draw_linegraph(what):
         yf.close()
         yfiles.append(yfile)
 
-    sienna = '#%02x%02x%02x' % (160,  82, 45)
+    sienna = '#%02x%02x%02x' % (160, 82, 45)
     coral = '#%02x%02x%02x' % (255, 127, 80)
     gp_colors = ['red', 'green', 'blue', 'magenta', 'cyan', sienna, 'orange',
                  coral]
@@ -174,7 +187,7 @@ def draw_linegraph(what):
         colors += gp_colors
     colors = colors[0:len(what)]
 
-    grass.run_command('d.linegraph', x_file=xfile, y_file=yfiles,
+    gcore.run_command('d.linegraph', x_file=xfile, y_file=yfiles,
                       y_color=colors, title='Spectral signatures',
                       x_title='Bands', y_title='DN Value')
 
@@ -187,24 +200,29 @@ def main():
     img_fmt = options['format']
     coord_legend = flags['c']
     gnuplot = flags['g']
-    
+    textfile = flags['t']
+
     global tmp_dir
-    tmp_dir = grass.tempdir()
-    
+    tmp_dir = gcore.tempdir()
+
     if not group and not raster:
-        grass.fatal(_("Either group= or raster= is required"))
+        gcore.fatal(_("Either group= or raster= is required"))
 
     if group and raster:
-        grass.fatal(_("group= and raster= are mutually exclusive"))
+        gcore.fatal(_("group= and raster= are mutually exclusive"))
+
+    # -t needs an output filename
+    if textfile and not output:
+        gcore.fatal(_("Writing to text file requires output=filename"))
 
     # check if gnuplot is present
-    if gnuplot and not grass.find_program('gnuplot', '-V'):
-        grass.fatal(_("gnuplot required, please install first"))
+    if gnuplot and not gcore.find_program('gnuplot', '-V'):
+        gcore.fatal(_("gnuplot required, please install first"))
 
     # get data from group listing and set the x-axis labels
     if group:
         # Parse the group list output
-        s = grass.read_command('i.group', flags='g', group=group, quiet=True)
+        s = gcore.read_command('i.group', flags='g', group=group, quiet=True)
         rastermaps = s.splitlines()
     else:
         # get data from list of files and set the x-axis labels
@@ -215,10 +233,10 @@ def main():
 
     # get y-data for gnuplot-data file
     what = []
-    s = grass.read_command('r.what', map=rastermaps, coordinates=coords,
+    s = gcore.read_command('r.what', map=rastermaps, coordinates=coords,
                            null='0', quiet=True)
     if len(s) == 0:
-        grass.fatal(_('No data returned from query'))
+        gcore.fatal(_('No data returned from query'))
 
     for l in s.splitlines():
         f = l.split('|')
@@ -232,10 +250,12 @@ def main():
     # build data files
     if gnuplot:
         draw_gnuplot(what, xlabels, output, img_fmt, coord_legend)
+    elif textfile:
+        write2textf(what, output)
     else:
         draw_linegraph(what)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     atexit.register(cleanup)
     main()
diff --git a/scripts/i.tasscap/i.tasscap.html b/scripts/i.tasscap/i.tasscap.html
index 90d500e..ed92d17 100644
--- a/scripts/i.tasscap/i.tasscap.html
+++ b/scripts/i.tasscap/i.tasscap.html
@@ -107,4 +107,4 @@ Results:
 <h2>AUTHOR</h2>
 
 Markus Neteler, ITC-irst, based on a script by Agustin Lobo
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/i.tasscap/i.tasscap.py b/scripts/i.tasscap/i.tasscap.py
index c19a663..58d6c74 100755
--- a/scripts/i.tasscap/i.tasscap.py
+++ b/scripts/i.tasscap/i.tasscap.py
@@ -75,24 +75,24 @@ import grass.script as grass
 
 # weights for 6 Landsat bands: TM4, TM5, TM7, OLI
 # MODIS: Red, NIR1, Blue, Green, NIR2, SWIR1, SWIR2
-parms = [[(0.3037,  0.2793,  0.4743,  0.5585,  0.5082,  0.1863),  # Landsat TM4
-         (-0.2848, -0.2435, -0.5435,  0.7243,  0.0840, -0.1800),
-          (0.1509,  0.1973,  0.3279,  0.3406, -0.7112, -0.4572)],
-         [(0.2909,  0.2493,  0.4806,  0.5568,  0.4438,  0.1706, 10.3695),  # Landsat TM5
-         (-0.2728, -0.2174, -0.5508,  0.7221,  0.0733, -0.1648, -0.7310),
-          (0.1446,  0.1761,  0.3322,  0.3396, -0.6210, -0.4186, -3.3828),
-          (0.8461, -0.0731, -0.4640, -0.0032, -0.0492, -0.0119,  0.7879)],
-         [(0.3561,  0.3972,  0.3904,  0.6966,  0.2286,  0.1596),  # Landsat TM7
-         (-0.3344, -0.3544, -0.4556,  0.6966, -0.0242, -0.2630),
-          (0.2626,  0.2141,  0.0926,  0.0656, -0.7629, -0.5388),
-          (0.0805, -0.0498,  0.1950, -0.1327,  0.5752, -0.7775)],
-         [(0.3029,  0.2786,  0.4733,  0.5599,  0.5080,  0.1872),  # Landsat OLI
-         (-0.2941, -0.2430, -0.5424,  0.7276,  0.0713, -0.1608),
-          (0.1511,  0.1973,  0.3283,  0.3407, -0.7117, -0.4559),
-         (-0.8239,  0.0849,  0.4396, -0.0580,  0.2013, -0.2773)],
-         [(0.4395,  0.5945,  0.2460,  0.3918,  0.3506,  0.2136,  0.2678),  # MODIS
-         (-0.4064,  0.5129, -0.2744, -0.2893,  0.4882, -0.0036, -0.4169),
-          (0.1147,  0.2489,  0.2408,  0.3132, -0.3122, -0.6416, -0.5087)]]
+parms = [[(0.3037, 0.2793, 0.4743, 0.5585, 0.5082, 0.1863),  # Landsat TM4
+          (-0.2848, -0.2435, -0.5435, 0.7243, 0.0840, -0.1800),
+          (0.1509, 0.1973, 0.3279, 0.3406, -0.7112, -0.4572)],
+         [(0.2909, 0.2493, 0.4806, 0.5568, 0.4438, 0.1706, 10.3695),  # Landsat TM5
+          (-0.2728, -0.2174, -0.5508, 0.7221, 0.0733, -0.1648, -0.7310),
+          (0.1446, 0.1761, 0.3322, 0.3396, -0.6210, -0.4186, -3.3828),
+          (0.8461, -0.0731, -0.4640, -0.0032, -0.0492, -0.0119, 0.7879)],
+         [(0.3561, 0.3972, 0.3904, 0.6966, 0.2286, 0.1596),  # Landsat TM7
+          (-0.3344, -0.3544, -0.4556, 0.6966, -0.0242, -0.2630),
+          (0.2626, 0.2141, 0.0926, 0.0656, -0.7629, -0.5388),
+          (0.0805, -0.0498, 0.1950, -0.1327, 0.5752, -0.7775)],
+         [(0.3029, 0.2786, 0.4733, 0.5599, 0.5080, 0.1872),  # Landsat OLI
+          (-0.2941, -0.2430, -0.5424, 0.7276, 0.0713, -0.1608),
+          (0.1511, 0.1973, 0.3283, 0.3407, -0.7117, -0.4559),
+          (-0.8239, 0.0849, 0.4396, -0.0580, 0.2013, -0.2773)],
+         [(0.4395, 0.5945, 0.2460, 0.3918, 0.3506, 0.2136, 0.2678),  # MODIS
+          (-0.4064, 0.5129, -0.2744, -0.2893, 0.4882, -0.0036, -0.4169),
+          (0.1147, 0.2489, 0.2408, 0.3132, -0.3122, -0.6416, -0.5087)]]
 
 
 # satellite information
@@ -167,8 +167,8 @@ def main():
 
     # assign "Data Description" field in all four component maps
     for i, comp in enumerate(names):
-        grass.run_command('r.support', map="%s.%d" % (output_basename, i+1),
-                          description="Tasseled Cap %d: %s" % (i+1, comp))
+        grass.run_command('r.support', map="%s.%d" % (output_basename, i + 1),
+                          description="Tasseled Cap %d: %s" % (i + 1, comp))
 
     grass.message(_("Tasseled Cap components calculated"))
 
diff --git a/scripts/m.proj/m.proj.html b/scripts/m.proj/m.proj.html
index 9c0b77d..6230704 100644
--- a/scripts/m.proj/m.proj.html
+++ b/scripts/m.proj/m.proj.html
@@ -202,4 +202,4 @@ Functionality inspired by the <em>m.proj</em> and <em>m.proj2</em> modules for
 GRASS GIS 5.
 
 <p>
-<i>Last changed: $Date: 2016-05-28 08:52:40 +0200 (Sat, 28 May 2016) $</i>
+<i>Last changed: $Date: 2016-05-28 08:53:59 +0200 (Sat, 28 May 2016) $</i>
diff --git a/scripts/m.proj/m.proj.py b/scripts/m.proj/m.proj.py
index d2e778a..501d9f0 100755
--- a/scripts/m.proj/m.proj.py
+++ b/scripts/m.proj/m.proj.py
@@ -1,19 +1,20 @@
 #!/usr/bin/env python
 
-############################################################################
-#
-# MODULE:	m.proj
-# AUTHOR:	M. Hamish Bowman, Dept. Marine Science, Otago Univeristy,
-#		  New Zealand
-#               Converted to Python by Glynn Clements
-# PURPOSE:      cs2cs reprojection frontend for a list of coordinates.
-#		Replacement for m.proj2 from GRASS 5
-# COPYRIGHT:	(c) 2006-2014 Hamish Bowman, and the GRASS Development Team
-#		This program is free software under the GNU General Public
-#		License (>=v2). Read the file COPYING that comes with GRASS
-#		for details.
-#
-#############################################################################
+"""
+MODULE:    m.proj
+
+AUTHOR(S): M. Hamish Bowman, Dept. Marine Science, Otago Univeristy,
+           New Zealand
+           Converted to Python by Glynn Clements
+
+PURPOSE:   cs2cs reprojection frontend for a list of coordinates.
+           Replacement for m.proj2 from GRASS 5
+
+COPYRIGHT: (c) 2006-2014 Hamish Bowman, and the GRASS Development Team
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
 
 # notes:
 #  - cs2cs expects "x y" data so be sure to send it "lon lat" not "lat lon"
@@ -94,9 +95,11 @@ import sys
 import os
 import threading
 from grass.script.utils import separator, parse_key_val
-from grass.script import core as grass
+from grass.script import core as gcore
+
 
 class TrThread(threading.Thread):
+
     def __init__(self, ifs, inf, outf):
         threading.Thread.__init__(self)
         self.ifs = ifs
@@ -114,6 +117,7 @@ class TrThread(threading.Thread):
 
         self.outf.close()
 
+
 def main():
     coords = options['coordinates']
     input = options['input']
@@ -127,87 +131,98 @@ def main():
     copy_input = flags['e']
     include_header = flags['c']
 
-    #### check for cs2cs
-    if not grass.find_program('cs2cs'):
-	grass.fatal(_("cs2cs program not found, install PROJ.4 first: http://proj.maptools.org"))
+    # check for cs2cs
+    if not gcore.find_program('cs2cs'):
+        gcore.fatal(_(
+            "cs2cs program not found, install PROJ.4 first: \
+            http://proj.maptools.org"))
 
-    #### check for overenthusiasm
+    # check for overenthusiasm
     if proj_in and ll_in:
-	grass.fatal(_("Choose only one input parameter method"))
+        gcore.fatal(_("Choose only one input parameter method"))
 
     if proj_out and ll_out:
-	grass.fatal(_("Choose only one output parameter method")) 
+        gcore.fatal(_("Choose only one output parameter method"))
 
     if ll_in and ll_out:
-	grass.fatal(_("Choise only one auto-projection parameter method"))
+        gcore.fatal(_("Choise only one auto-projection parameter method"))
 
-    if output and not grass.overwrite() and os.path.exists(output):
-	grass.fatal(_("Output file already exists")) 
+    if output and not gcore.overwrite() and os.path.exists(output):
+        gcore.fatal(_("Output file already exists"))
 
     if not coords and not input:
-        grass.fatal(_("One of <coordinates> and <input> must be given"))
+        gcore.fatal(_("One of <coordinates> and <input> must be given"))
     if coords and input:
-        grass.fatal(_("Options <coordinates> and <input> are mutually exclusive"))
+        gcore.fatal(_(
+            "Options <coordinates> and <input> are mutually exclusive"))
 
-    #### parse field separator
+    # parse field separator
     # FIXME: input_x,y needs to split on multiple whitespace between them
     if fs == ',':
         ifs = ofs = ','
     else:
-	try:
-	    ifs, ofs = fs.split(',')
-	except ValueError:
-	    ifs = ofs = fs
+        try:
+            ifs, ofs = fs.split(',')
+        except ValueError:
+            ifs = ofs = fs
 
     ifs = separator(ifs)
     ofs = separator(ofs)
 
-    #### set up projection params
-    s = grass.read_command("g.proj", flags='j')
+    # set up projection params
+    s = gcore.read_command("g.proj", flags='j')
     kv = parse_key_val(s)
     if "XY location" in kv['+proj'] and (ll_in or ll_out):
-	grass.fatal(_("Unable to project to or from a XY location")) 
+        gcore.fatal(_("Unable to project to or from a XY location"))
 
     in_proj = None
 
     if ll_in:
-	in_proj = "+proj=longlat +datum=WGS84"
-	grass.verbose("Assuming LL WGS84 as input, current projection as output ")
+        in_proj = "+proj=longlat +datum=WGS84"
+        gcore.verbose(
+            "Assuming LL WGS84 as input, current projection as output ")
 
     if ll_out:
-	in_proj = grass.read_command('g.proj', flags = 'jf')
+        in_proj = gcore.read_command('g.proj', flags='jf')
 
     if proj_in:
-	in_proj = proj_in
+        if '+' in proj_in:
+            in_proj = proj_in
+        else:
+            gcore.fatal(_("Invalid PROJ.4 input specification"))
 
     if not in_proj:
-	grass.verbose("Assuming current location as input")
-        in_proj = grass.read_command('g.proj', flags = 'jf')
-    
+        gcore.verbose("Assuming current location as input")
+        in_proj = gcore.read_command('g.proj', flags='jf')
+
     in_proj = in_proj.strip()
-    grass.verbose("Input parameters: '%s'" % in_proj)
+    gcore.verbose("Input parameters: '%s'" % in_proj)
 
     out_proj = None
 
     if ll_out:
-	out_proj = "+proj=longlat +datum=WGS84"
-	grass.verbose("Assuming current projection as input, LL WGS84 as output ")
+        out_proj = "+proj=longlat +datum=WGS84"
+        gcore.verbose(
+            "Assuming current projection as input, LL WGS84 as output ")
 
     if ll_in:
-	out_proj = grass.read_command('g.proj', flags = 'jf')
+        out_proj = gcore.read_command('g.proj', flags='jf')
 
     if proj_out:
-	out_proj = proj_out
+        if '+' in proj_out:
+            out_proj = proj_out
+        else:
+            gcore.fatal(_("Invalid PROJ.4 output specification"))
 
     if not out_proj:
-	grass.fatal(_("Missing output projection parameters "))
+        gcore.fatal(_("Missing output projection parameters "))
     out_proj = out_proj.strip()
-    grass.verbose("Output parameters: '%s'" % out_proj)
+    gcore.verbose("Output parameters: '%s'" % out_proj)
 
-    #### set up input file
+    # set up input file
     if coords:
         x, y = coords.split(',')
-        tmpfile = grass.tempfile()
+        tmpfile = gcore.tempfile()
         fd = open(tmpfile, "w")
         fd.write("%s%s%s\n" % (x, ifs, y))
         fd.close()
@@ -219,67 +234,70 @@ def main():
         else:
             infile = input
             if not os.path.exists(infile):
-                grass.fatal(_("Unable to read input data"))
+                gcore.fatal(_("Unable to read input data"))
             inf = file(infile)
-            grass.debug("input file=[%s]" % infile)
-    
-    #### set up output file
+            gcore.debug("input file=[%s]" % infile)
+
+    # set up output file
     if not output:
-	outfile = None
-	outf = sys.stdout
+        outfile = None
+        outf = sys.stdout
     else:
-	outfile = output
-	outf = open(outfile, 'w')
-	grass.debug("output file=[%s]" % outfile) 
+        outfile = output
+        outf = open(outfile, 'w')
+        gcore.debug("output file=[%s]" % outfile)
 
-    #### set up output style
+    # set up output style
     if not decimal:
-	outfmt = ["-w5"]
+        outfmt = ["-w5"]
     else:
-	outfmt = ["-f", "%.8f"]
+        outfmt = ["-f", "%.8f"]
     if not copy_input:
-	copyinp = []
+        copyinp = []
     else:
-	copyinp = ["-E"]
+        copyinp = ["-E"]
 
-    #### do the conversion
+    # do the conversion
     # Convert cs2cs DMS format to GRASS DMS format:
     #   cs2cs | sed -e 's/d/:/g' -e "s/'/:/g"  -e 's/"//g'
 
-    cmd = ['cs2cs'] + copyinp + outfmt + in_proj.split() + ['+to'] + out_proj.split()
-    p = grass.Popen(cmd, stdin = grass.PIPE, stdout = grass.PIPE)
+    cmd = ['cs2cs'] + copyinp + outfmt + \
+        in_proj.split() + ['+to'] + out_proj.split()
+
+    p = gcore.Popen(cmd, stdin=gcore.PIPE, stdout=gcore.PIPE)
 
     tr = TrThread(ifs, inf, p.stdin)
     tr.start()
 
     if not copy_input:
-	if include_header:
-	    outf.write("x%sy%sz\n" % (ofs, ofs))
-	for line in p.stdout:
+        if include_header:
+            outf.write("x%sy%sz\n" % (ofs, ofs))
+        for line in p.stdout:
             try:
                 xy, z = line.split(' ', 1)
                 x, y = xy.split('\t')
             except ValueError:
-                grass.fatal(line)
-            
-	    outf.write('%s%s%s%s%s\n' % \
+                gcore.fatal(line)
+
+            outf.write('%s%s%s%s%s\n' %
                        (x.strip(), ofs, y.strip(), ofs, z.strip()))
     else:
-	if include_header:
-	    outf.write("input_x%sinput_y%sx%sy%sz\n" % (ofs, ofs, ofs, ofs))
-	for line in p.stdout:
+        if include_header:
+            outf.write("input_x%sinput_y%sx%sy%sz\n" % (ofs, ofs, ofs, ofs))
+        for line in p.stdout:
             inXYZ, x, rest = line.split('\t')
             inX, inY = inXYZ.split(' ')[:2]
-	    y, z = rest.split(' ', 1)
-	    outf.write('%s%s%s%s%s%s%s%s%s\n' % \
-                       (inX.strip(), ofs, inY.strip(), ofs, x.strip(), \
-		        ofs, y.strip(), ofs, z.strip()))
+            y, z = rest.split(' ', 1)
+            outf.write('%s%s%s%s%s%s%s%s%s\n' %
+                       (inX.strip(), ofs, inY.strip(), ofs, x.strip(),
+                        ofs, y.strip(), ofs, z.strip()))
 
     p.wait()
 
     if p.returncode != 0:
-	grass.warning(_("Projection transform probably failed, please investigate"))
+        gcore.warning(_(
+            "Projection transform probably failed, please investigate"))
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     main()
diff --git a/scripts/r.blend/r.blend.html b/scripts/r.blend/r.blend.html
index de2614a..9d41626 100644
--- a/scripts/r.blend/r.blend.html
+++ b/scripts/r.blend/r.blend.html
@@ -37,4 +37,4 @@ Unknown: probably CERL<br>
 Updated to GRASS 5.7 by Michael Barton, Arizona State University
 
 <p>
-<i>Last changed: $Date: 2016-03-18 15:09:42 +0100 (Fri, 18 Mar 2016) $</i>
+<i>Last changed: $Date: 2016-03-18 15:09:00 +0100 (Fri, 18 Mar 2016) $</i>
diff --git a/scripts/r.blend/r.blend.py b/scripts/r.blend/r.blend.py
index f3ed6f1..8a8b5dc 100755
--- a/scripts/r.blend/r.blend.py
+++ b/scripts/r.blend/r.blend.py
@@ -40,14 +40,13 @@
 #%end
 #% flag
 #% key: c
-#% description: Combine resulting R,G,B layers into single output map 
+#% description: Combine resulting R,G,B layers into single output map
 #%end
 
-
-import sys
 import os
 import string
-import grass.script as grass
+import grass.script as gscript
+
 
 def main():
     first = options['first']
@@ -55,13 +54,13 @@ def main():
     output = options['output']
     percent = options['percent']
 
-    mapset = grass.gisenv()['MAPSET']
+    mapset = gscript.gisenv()['MAPSET']
 
-    if not grass.overwrite():
-	for ch in ['r','g','b']:
-	    map = '%s.%s' % (output, ch)
-	    if grass.find_file(map, element = 'cell', mapset = mapset)['file']:
-		grass.fatal(_("Raster map <%s> already exists.") % map)
+    if not gscript.overwrite():
+        for ch in ['r', 'g', 'b']:
+            map = '%s.%s' % (output, ch)
+            if gscript.find_file(map, element='cell', mapset=mapset)['file']:
+                gscript.fatal(_("Raster map <%s> already exists.") % map)
 
     percent = float(percent)
     perc_inv = 100.0 - percent
@@ -69,47 +68,54 @@ def main():
     frac1 = percent / 100.0
     frac2 = perc_inv / 100.0
 
-    grass.message(_("Calculating the three component maps..."))
+    gscript.message(_("Calculating the three component maps..."))
 
-    template = string.Template("$$output.$ch = if(isnull($$first), $ch#$$second, if(isnull($$second), $ch#$$first, $$frac1 * $ch#$$first + $$frac2 * $ch#$$second))")
-    cmd = [template.substitute(ch = ch) for ch in ['r','g','b']]
+    template = string.Template("$$output.$ch = "
+                               "if(isnull($$first), $ch#$$second, "
+                               "if(isnull($$second), $ch#$$first, "
+                               "$$frac1 * $ch#$$first + "
+                               "$$frac2 * $ch#$$second))")
+    cmd = [template.substitute(ch=ch) for ch in ['r', 'g', 'b']]
     cmd = ';'.join(cmd)
 
-    grass.mapcalc(cmd,
-		  output = output,
-		  first = first, second = second,
-		  frac1 = frac1, frac2 = frac2)
-
-    for ch in ['r','g','b']:
-	map = "%s.%s" % (output, ch)
-	grass.run_command('r.colors', map = map, color = 'grey255')
-	grass.run_command('r.support', map = map, history="",
-			  title = "Color blend of %s and %s" % (first, second),
-			  description = "generated by r.blend")
-	grass.run_command('r.support', map = map,
-			  history = "r.blend %s channel." % ch)
-	grass.run_command('r.support', map = map,
-			  history = "  %d%% of %s, %d%% of %s" % (percent, first, perc_inv, second))
-	grass.run_command('r.support', map = map, history = "")
-	grass.run_command('r.support', map = map, history = os.environ['CMDLINE'])
-
+    gscript.mapcalc(cmd, output=output, first=first, second=second,
+                    frac1=frac1, frac2=frac2)
+
+    for ch in ['r', 'g', 'b']:
+        map = "%s.%s" % (output, ch)
+        gscript.run_command('r.colors', map=map, color='grey255')
+        gscript.run_command('r.support', map=map, history="",
+                            title="Color blend of %s and %s" % (first, second),
+                            description="generated by r.blend")
+        gscript.run_command('r.support', map=map,
+                            history="r.blend %s channel." % ch)
+        gscript.run_command('r.support', map=map,
+                            history="  %d%% of %s, %d%% of %s" %
+                                    (percent, first, perc_inv, second))
+        gscript.run_command('r.support', map=map, history="")
+        gscript.run_command('r.support', map=map, history=os.environ['CMDLINE'])
 
     if flags['c']:
-        grass.run_command('r.composite', r = '%s.r' % output,
-	    g = '%s.g' % output, b = '%s.b' % output, output = output)
-
-	grass.run_command('r.support', map = output, history="",
-	    title = "Color blend of %s and %s" % (first, second),
-	    description = "generated by r.blend")
-	grass.run_command('r.support', map = output,
-	    history = "  %d%% of %s, %d%% of %s" % (percent, first, perc_inv, second))
-	grass.run_command('r.support', map = output, history = "")
-	grass.run_command('r.support', map = output, history = os.environ['CMDLINE'])
+        gscript.run_command('r.composite', r='%s.r' % output,
+                            g='%s.g' % output, b='%s.b' % output,
+                            output=output)
+
+        gscript.run_command('r.support', map=output, history="",
+                            title="Color blend of %s and %s" % (first, second),
+                            description="generated by r.blend")
+        gscript.run_command('r.support', map=output,
+                            history="  %d%% of %s, %d%% of %s" %
+                                    (percent, first, perc_inv, second))
+        gscript.run_command('r.support', map=output, history="")
+        gscript.run_command('r.support', map=output,
+                            history=os.environ['CMDLINE'])
     else:
-        grass.message(_("Done. Use the following command to visualize the result:"))
-        grass.message(_("d.rgb r=%s.r g=%s.g b=%s.b") % (output, output, output))
+        gscript.message(_("Done. Use the following command to visualize "
+                          "the result:"))
+        gscript.message(_("d.rgb r=%s.r g=%s.g b=%s.b") %
+                        (output, output, output))
 
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     main()
diff --git a/scripts/r.buffer.lowmem/r.buffer.lowmem.py b/scripts/r.buffer.lowmem/r.buffer.lowmem.py
index d766c8c..a38dd65 100755
--- a/scripts/r.buffer.lowmem/r.buffer.lowmem.py
+++ b/scripts/r.buffer.lowmem/r.buffer.lowmem.py
@@ -53,14 +53,17 @@ scales = {
     'feet': 0.3048,
     'miles': 1609.344,
     'nautmiles': 1852.0
-    }
+}
 
 # what to do in case of user break:
+
+
 def cleanup():
     if grass.find_file(temp_src)['file']:
-        grass.run_command('g.remove', quiet = True, flags = 'fb', type = 'raster', name = temp_src)
+        grass.run_command('g.remove', quiet=True, flags='fb', type='raster', name=temp_src)
     if grass.find_file(temp_dist)['file']:
-        grass.run_command('g.remove', quiet = True, flags = 'fb', type = 'raster', name = temp_dist)
+        grass.run_command('g.remove', quiet=True, flags='fb', type='raster', name=temp_dist)
+
 
 def main():
     global temp_dist, temp_src
@@ -75,13 +78,13 @@ def main():
     temp_dist = "r.buffer.tmp.%s.dist" % tmp
     temp_src = "r.buffer.tmp.%s.src" % tmp
 
-    #check if input file exists
+    # check if input file exists
     if not grass.find_file(input)['file']:
         grass.fatal(_("Raster map <%s> not found") % input)
 
     scale = scales[units]
 
-    distances  = distances.split(',')
+    distances = distances.split(',')
     distances1 = [scale * float(d) for d in distances]
     distances2 = [d * d for d in distances1]
 
@@ -92,8 +95,8 @@ def main():
     else:
         metric = 'squared'
 
-    grass.run_command('r.grow.distance',  input = input, metric = metric,
-                      distance = temp_dist, flags = 'm')
+    grass.run_command('r.grow.distance', input=input, metric=metric,
+                      distance=temp_dist, flags='m')
 
     if zero:
         exp = "$temp_src = if($input == 0,null(),1)"
@@ -101,22 +104,22 @@ def main():
         exp = "$temp_src = if(isnull($input),null(),1)"
 
     grass.message(_("Extracting buffers (1/2)..."))
-    grass.mapcalc(exp, temp_src = temp_src, input = input)
+    grass.mapcalc(exp, temp_src=temp_src, input=input)
 
     exp = "$output = if(!isnull($input),$input,%s)"
     if metric == 'squared':
         for n, dist2 in enumerate(distances2):
-            exp %= "if($dist <= %f,%d,%%s)" % (dist2,n + 2)
+            exp %= "if($dist <= %f,%d,%%s)" % (dist2, n + 2)
     else:
         for n, dist2 in enumerate(distances1):
-            exp %= "if($dist <= %f,%d,%%s)" % (dist2,n + 2)
+            exp %= "if($dist <= %f,%d,%%s)" % (dist2, n + 2)
     exp %= "null()"
 
     grass.message(_("Extracting buffers (2/2)..."))
-    grass.mapcalc(exp, output = output, input = temp_src, dist = temp_dist)
+    grass.mapcalc(exp, output=output, input=temp_src, dist=temp_dist)
 
-    p = grass.feed_command('r.category', map = output,
-                           separator=':', rules = '-')
+    p = grass.feed_command('r.category', map=output,
+                           separator=':', rules='-')
     p.stdin.write("1:distances calculated from these locations\n")
     d0 = "0"
     for n, d in enumerate(distances):
@@ -125,11 +128,11 @@ def main():
     p.stdin.close()
     p.wait()
 
-    grass.run_command('r.colors', map = output, color = 'rainbow')
+    grass.run_command('r.colors', map=output, color='rainbow')
 
     # write cmd history:
     grass.raster_history(output)
-    
+
 if __name__ == "__main__":
     options, flags = grass.parser()
     atexit.register(cleanup)
diff --git a/scripts/r.colors.stddev/r.colors.stddev.html b/scripts/r.colors.stddev/r.colors.stddev.html
index 0256157..a7aa584 100644
--- a/scripts/r.colors.stddev/r.colors.stddev.html
+++ b/scripts/r.colors.stddev/r.colors.stddev.html
@@ -35,4 +35,4 @@ r.colors.stddev elevation
 
 Hamish Bowman, <i>Dunedin, New Zealand</i>
 
-<p><i>Last changed: $Date: 2016-05-16 12:23:50 +0200 (Mon, 16 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-16 12:06:50 +0200 (Mon, 16 May 2016) $</i>
diff --git a/scripts/r.colors.stddev/r.colors.stddev.py b/scripts/r.colors.stddev/r.colors.stddev.py
index b90acf2..b597435 100755
--- a/scripts/r.colors.stddev/r.colors.stddev.py
+++ b/scripts/r.colors.stddev/r.colors.stddev.py
@@ -30,18 +30,21 @@
 #% description: Force center at zero
 #%end
 
-import sys
 import os
 import atexit
-import grass.script as grass
+
+import grass.script as gscript
+
 
 def z(n):
     return mean + n * stddev
 
+
 def cleanup():
     if tmpmap:
-	grass.run_command('g.remove', flags = 'f', type = 'raster',
-                      name = tmpmap, quiet = True)
+        gscript.run_command('g.remove', flags='f', type='raster',
+                            name=tmpmap, quiet=True)
+
 
 def main():
     global tmpmap
@@ -52,90 +55,89 @@ def main():
     bands = flags['b']
 
     if not zero:
-	s = grass.read_command('r.univar', flags = 'g', map = map)
-	kv = grass.parse_key_val(s)
-	global mean, stddev
-	mean = float(kv['mean'])
-	stddev = float(kv['stddev'])
-
-	if not bands:
-	    # smooth free floating blue/white/red
-	    rules = '\n'.join([
-		"0% blue",
-		"%f blue"  % z(-2),
-		"%f white" % mean,
-		"%f red"   % z(+2),
-		"100% red"])
-	else:
-	    # banded free floating  black/red/yellow/green/yellow/red/black
-
-	    # reclass with labels only works for category (integer) based maps
-            #r.reclass input="$GIS_OPT_MAP" output="${GIS_OPT_MAP}.stdevs" << EOF
-
-	    # >3 S.D. outliers colored black so they show up in d.histogram w/ white background
-	    rules = '\n'.join([
-		"0% black",
-		"%f black"  % z(-3),
-		"%f red"    % z(-3),
-		"%f red"    % z(-2),
-		"%f yellow" % z(-2),
-		"%f yellow" % z(-1),
-		"%f green"  % z(-1),
-		"%f green"  % z(+1),
-		"%f yellow" % z(+1),
-		"%f yellow" % z(+2),
-		"%f red"    % z(+2),
-		"%f red"    % z(+3),
-		"%f black"  % z(+3),
-		"100% black"])
+        s = gscript.read_command('r.univar', flags='g', map=map)
+        kv = gscript.parse_key_val(s)
+        global mean, stddev
+        mean = float(kv['mean'])
+        stddev = float(kv['stddev'])
+
+        if not bands:
+            # smooth free floating blue/white/red
+            rules = '\n'.join(["0% blue",
+                               "%f blue" % z(-2),
+                               "%f white" % mean,
+                               "%f red" % z(+2),
+                               "100% red"])
+        else:
+            # banded free floating  black/red/yellow/green/yellow/red/black
+
+            # reclass with labels only works for category (integer) based maps
+            # r.reclass input="$GIS_OPT_MAP" output="${GIS_OPT_MAP}.stdevs" <<
+            # EOF
+
+            # >3 S.D. outliers colored black so they show up in d.histogram w/ white background
+            rules = '\n'.join(["0% black",
+                               "%f black" % z(-3),
+                               "%f red" % z(-3),
+                               "%f red" % z(-2),
+                               "%f yellow" % z(-2),
+                               "%f yellow" % z(-1),
+                               "%f green" % z(-1),
+                               "%f green" % z(+1),
+                               "%f yellow" % z(+1),
+                               "%f yellow" % z(+2),
+                               "%f red" % z(+2),
+                               "%f red" % z(+3),
+                               "%f black" % z(+3),
+                               "100% black"])
     else:
-	tmpmap = "r_col_stdev_abs_%d" % os.getpid()
-	grass.mapcalc("$tmp = abs($map)", tmp = tmpmap, map = map)
-
-	# data centered on 0  (e.g. map of deviations)
-	info = grass.raster_info(tmpmap)
-	maxv = info['max']
-
-	# current r.univar truncates percentage to the base integer
-	s = grass.read_command('r.univar', flags = 'eg', map = map, percentile = [95.45,68.2689,99.7300])
-	kv = grass.parse_key_val(s)
-
-	stddev1 = float(kv['percentile_68_2689'])
-	stddev2 = float(kv['percentile_95_45'])
-	stddev3 = float(kv['percentile_99_73'])
-
-	if not bands:
-	    # zero centered smooth blue/white/red
-	    rules = '\n'.join([
-		"%f blue" % -maxv,
-		"%f blue" % -stddev2,
-		"0 white",
-		"%f red"  % stddev2,
-		"%f red"  % maxv])
-	else:
-	    # zero centered banded  black/red/yellow/green/yellow/red/black
-
-	    # >3 S.D. outliers colored black so they show up in d.histogram w/ white background
-	    rules = '\n'.join([
-		"%f black" % -maxv,
-		"%f black" % -stddev3,
-		"%f red" % -stddev3,
-		"%f red" % -stddev2,
-		"%f yellow" % -stddev2,
-		"%f yellow" % -stddev1,
-		"%f green" % -stddev1,
-		"%f green" % stddev1,
-		"%f yellow" % stddev1,
-		"%f yellow" % stddev2,
-		"%f red" % stddev2,
-		"%f red" % stddev3,
-		"%f black" % stddev3,
-		"%f black" % maxv,
-		])
-
-    grass.write_command('r.colors', map = map, rules = '-', stdin = rules)
+        tmpmap = "r_col_stdev_abs_%d" % os.getpid()
+        gscript.mapcalc("$tmp = abs($map)", tmp=tmpmap, map=map)
+
+        # data centered on 0  (e.g. map of deviations)
+        info = gscript.raster_info(tmpmap)
+        maxv = info['max']
+
+        # current r.univar truncates percentage to the base integer
+        s = gscript.read_command('r.univar', flags='eg', map=map,
+                                 percentile=[95.45,
+                                             68.2689,
+                                             99.7300])
+        kv = gscript.parse_key_val(s)
+
+        stddev1 = float(kv['percentile_68_2689'])
+        stddev2 = float(kv['percentile_95_45'])
+        stddev3 = float(kv['percentile_99_73'])
+
+        if not bands:
+            # zero centered smooth blue/white/red
+            rules = '\n'.join(["%f blue" % -maxv,
+                               "%f blue" % -stddev2,
+                               "0 white",
+                               "%f red" % stddev2,
+                               "%f red" % maxv])
+        else:
+            # zero centered banded  black/red/yellow/green/yellow/red/black
+
+            # >3 S.D. outliers colored black so they show up in d.histogram w/ white background
+            rules = '\n'.join(["%f black" % -maxv,
+                               "%f black" % -stddev3,
+                               "%f red" % -stddev3,
+                               "%f red" % -stddev2,
+                               "%f yellow" % -stddev2,
+                               "%f yellow" % -stddev1,
+                               "%f green" % -stddev1,
+                               "%f green" % stddev1,
+                               "%f yellow" % stddev1,
+                               "%f yellow" % stddev2,
+                               "%f red" % stddev2,
+                               "%f red" % stddev3,
+                               "%f black" % stddev3,
+                               "%f black" % maxv, ])
+
+    gscript.write_command('r.colors', map=map, rules='-', stdin=rules)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     atexit.register(cleanup)
     main()
diff --git a/scripts/r.fillnulls/r.fillnulls.html b/scripts/r.fillnulls/r.fillnulls.html
index e637fe7..d64da72 100644
--- a/scripts/r.fillnulls/r.fillnulls.html
+++ b/scripts/r.fillnulls/r.fillnulls.html
@@ -115,4 +115,4 @@ Markus Neteler, University of Hannover  and Fondazione Edmund Mach<br>
 Improvement by Hamish Bowman, NZ
 
 <p>
-<i>Last changed: $Date: 2015-12-31 09:19:51 +0100 (Thu, 31 Dec 2015) $</i>
+<i>Last changed: $Date: 2015-12-31 09:19:29 +0100 (Thu, 31 Dec 2015) $</i>
diff --git a/scripts/r.fillnulls/r.fillnulls.py b/scripts/r.fillnulls/r.fillnulls.py
index 8983c06..5780986 100755
--- a/scripts/r.fillnulls/r.fillnulls.py
+++ b/scripts/r.fillnulls/r.fillnulls.py
@@ -14,7 +14,7 @@
 # PURPOSE:      fills NULL (no data areas) in raster maps
 #               The script respects a user mask (MASK) if present.
 #
-# COPYRIGHT:    (C) 2001-2014 by the GRASS Development Team
+# COPYRIGHT:    (C) 2001-2016 by the GRASS Development Team
 #
 #               This program is free software under the GNU General Public
 #               License (>=v2). Read the file COPYING that comes with GRASS
@@ -84,6 +84,17 @@
 #% options : 2-10000
 #% guisection: RST options
 #%end
+#%option
+#% key: lambda
+#% type: double
+#% required: no
+#% multiple: no
+#% label: Tykhonov regularization parameter (affects smoothing)
+#% description: Used in bilinear and bicubic spline interpolation
+#% answer: 0.01
+#% guisection: Spline options
+#%end
+
 
 import sys
 import os
@@ -98,15 +109,18 @@ usermask = None
 mapset = None
 
 # what to do in case of user break:
+
+
 def cleanup():
-    #delete internal mask and any TMP files:
+    # delete internal mask and any TMP files:
     if len(tmp_vmaps) > 0:
-        grass.run_command('g.remove', quiet = True, flags = 'fb', type = 'vector', name = tmp_vmaps)
+        grass.run_command('g.remove', quiet=True, flags='fb', type='vector', name=tmp_vmaps)
     if len(tmp_rmaps) > 0:
-        grass.run_command('g.remove', quiet = True, flags = 'fb', type = 'raster', name = tmp_rmaps)
+        grass.run_command('g.remove', quiet=True, flags='fb', type='raster', name=tmp_rmaps)
     if usermask and mapset:
-        if grass.find_file(usermask, mapset = mapset)['file']:
-            grass.run_command('g.rename', quiet = True, raster = (usermask, 'MASK'), overwrite = True)
+        if grass.find_file(usermask, mapset=mapset)['file']:
+            grass.run_command('g.rename', quiet=True, raster=(usermask, 'MASK'), overwrite=True)
+
 
 def main():
     global usermask, mapset, tmp_rmaps, tmp_vmaps
@@ -119,63 +133,63 @@ def main():
     edge = int(options['edge'])
     segmax = int(options['segmax'])
     npmin = int(options['npmin'])
-    quiet = True # FIXME 
-    
+    lambda_ = float(options['lambda'])
+    quiet = True  # FIXME
     mapset = grass.gisenv()['MAPSET']
-    unique = str(os.getpid()) # Shouldn't we use temp name?
+    unique = str(os.getpid())  # Shouldn't we use temp name?
     prefix = 'r_fillnulls_%s_' % unique
-    failed_list = list() # a list of failed holes. Caused by issues with v.surf.rst. Connected with #1813
+    failed_list = list()  # a list of failed holes. Caused by issues with v.surf.rst. Connected with #1813
 
-    #check if input file exists
+    # check if input file exists
     if not grass.find_file(input)['file']:
         grass.fatal(_("Raster map <%s> not found") % input)
 
     # save original region
     reg_org = grass.region()
-    
+
     # check if a MASK is already present
     # and remove it to not interfere with NULL lookup part
     # as we don't fill MASKed parts!
-    if grass.find_file('MASK', mapset = mapset)['file']:
+    if grass.find_file('MASK', mapset=mapset)['file']:
         usermask = "usermask_mask." + unique
         grass.message(_("A user raster mask (MASK) is present. Saving it..."))
-        grass.run_command('g.rename', quiet = quiet, raster = ('MASK',usermask))
+        grass.run_command('g.rename', quiet=quiet, raster=('MASK', usermask))
 
-    #check if method is rst to use v.surf.rst
+    # check if method is rst to use v.surf.rst
     if method == 'rst':
         # idea: filter all NULLS and grow that area(s) by 3 pixel, then
         # interpolate from these surrounding 3 pixel edge
         filling = prefix + 'filled'
-        
+
         grass.use_temp_region()
-        grass.run_command('g.region', align = input, quiet = quiet)
+        grass.run_command('g.region', align=input, quiet=quiet)
         region = grass.region()
         ns_res = region['nsres']
         ew_res = region['ewres']
-        
+
         grass.message(_("Using RST interpolation..."))
         grass.message(_("Locating and isolating NULL areas..."))
-        
+
         # creating binary (0/1) map
         if usermask:
             grass.message(_("Skipping masked raster parts"))
             grass.mapcalc("$tmp1 = if(isnull($input) && !($mask == 0 || isnull($mask)),1,null())",
-                tmp1 = prefix + 'nulls', input = input, mask = usermask)
+                          tmp1=prefix + 'nulls', input=input, mask=usermask)
         else:
             grass.mapcalc("$tmp1 = if(isnull($input),1,null())",
-                tmp1 = prefix + 'nulls', input = input)
+                          tmp1=prefix + 'nulls', input=input)
         tmp_rmaps.append(prefix + 'nulls')
-            
+
         # restoring user's mask, if present
         # to ignore MASKed original values
         if usermask:
             grass.message(_("Restoring user mask (MASK)..."))
             try:
-                grass.run_command('g.rename', quiet=quiet, raster = (usermask, 'MASK'))
+                grass.run_command('g.rename', quiet=quiet, raster=(usermask, 'MASK'))
             except CalledModuleError:
                 grass.warning(_("Failed to restore user MASK!"))
             usermask = None
-    
+
         # grow identified holes by X pixels
         grass.message(_("Growing NULL areas"))
         tmp_rmaps.append(prefix + 'grown')
@@ -184,43 +198,58 @@ def main():
                               radius=edge + 0.01, old=1, new=1,
                               out=prefix + 'grown', quiet=quiet)
         except CalledModuleError:
-            grass.fatal(_("abandoned. Removing temporary map, restoring user mask if needed:"))
+            grass.fatal(_("abandoned. Removing temporary map, restoring "
+                          "user mask if needed:"))
 
         # assign unique IDs to each hole or hole system (holes closer than edge distance)
         grass.message(_("Assigning IDs to NULL areas"))
         tmp_rmaps.append(prefix + 'clumped')
         try:
-            grass.run_command('r.clump', input=prefix + 'grown', output=prefix + 'clumped', quiet=quiet)
+            grass.run_command(
+                'r.clump',
+                input=prefix +
+                'grown',
+                output=prefix +
+                'clumped',
+                quiet=quiet)
         except CalledModuleError:
-            grass.fatal(_("abandoned. Removing temporary map, restoring user mask if needed:"))
+            grass.fatal(_("abandoned. Removing temporary map, restoring "
+                          "user mask if needed:"))
 
         # get a list of unique hole cat's
         grass.mapcalc("$out = if(isnull($inp), null(), $clumped)",
-                        out = prefix + 'holes', inp = prefix + 'nulls', clumped = prefix + 'clumped')
+                      out=prefix + 'holes', inp=prefix + 'nulls', clumped=prefix + 'clumped')
         tmp_rmaps.append(prefix + 'holes')
-        
+
         # use new IDs to identify holes
         try:
             grass.run_command('r.to.vect', flags='v',
                               input=prefix + 'holes', output=prefix + 'holes',
                               type='area', quiet=quiet)
         except:
-            grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
+            grass.fatal(_("abandoned. Removing temporary maps, restoring "
+                          "user mask if needed:"))
         tmp_vmaps.append(prefix + 'holes')
-        
+
         # get a list of unique hole cat's
         cats_file_name = grass.tempfile(False)
-        grass.run_command('v.db.select', flags = 'c', map = prefix + 'holes', columns = 'cat', file = cats_file_name, quiet = quiet)
+        grass.run_command(
+            'v.db.select',
+            flags='c',
+            map=prefix + 'holes',
+            columns='cat',
+            file=cats_file_name,
+            quiet=quiet)
         cat_list = list()
         cats_file = file(cats_file_name)
         for line in cats_file:
             cat_list.append(line.rstrip('\n'))
         cats_file.close()
         os.remove(cats_file_name)
-        
+
         if len(cat_list) < 1:
             grass.fatal(_("Input map has no holes. Check region settings."))
-        
+
         # GTC Hole is NULL area in a raster map
         grass.message(_("Processing %d map holes") % len(cat_list))
         first = True
@@ -236,51 +265,56 @@ def main():
                                   output=holename + '_pol',
                                   cats=cat, quiet=quiet)
             except CalledModuleError:
-                grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
+                grass.fatal(_("abandoned. Removing temporary maps, restoring "
+                              "user mask if needed:"))
             tmp_vmaps.append(holename + '_pol')
-            
-            # zoom to specific hole with a buffer of two cells around the hole to remove rest of data
+
+            # zoom to specific hole with a buffer of two cells around the hole to
+            # remove rest of data
             try:
                 grass.run_command('g.region',
-                                  vector=holename + '_pol', align=input, 
-                                  w = 'w-%d' % (edge * 2 * ew_res),
-                                  e = 'e+%d' % (edge * 2 * ew_res), 
-                                  n = 'n+%d' % (edge * 2 * ns_res),
-                                  s = 's-%d' % (edge * 2 * ns_res),
+                                  vector=holename + '_pol', align=input,
+                                  w='w-%d' % (edge * 2 * ew_res),
+                                  e='e+%d' % (edge * 2 * ew_res),
+                                  n='n+%d' % (edge * 2 * ns_res),
+                                  s='s-%d' % (edge * 2 * ns_res),
                                   quiet=quiet)
             except CalledModuleError:
-                grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
-            
+                grass.fatal(_("abandoned. Removing temporary maps, restoring "
+                              "user mask if needed:"))
+
             # remove temporary map to not overfill disk
             try:
                 grass.run_command('g.remove', flags='fb', type='vector',
                                   name=holename + '_pol', quiet=quiet)
             except CalledModuleError:
-                grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
+                grass.fatal(_("abandoned. Removing temporary maps, restoring "
+                              "user mask if needed:"))
             tmp_vmaps.remove(holename + '_pol')
-            
+
             # copy only data around hole
             grass.mapcalc("$out = if($inp == $catn, $inp, null())",
-                            out = holename, inp = prefix + 'holes', catn = cat)
+                          out=holename, inp=prefix + 'holes', catn=cat)
             tmp_rmaps.append(holename)
-            
-            # If here loop is split into two, next part of loop can be run in parallel 
+
+            # If here loop is split into two, next part of loop can be run in parallel
             # (except final result patching)
             # Downside - on large maps such approach causes large disk usage
-            
+
             # grow hole border to get it's edge area
             tmp_rmaps.append(holename + '_grown')
             try:
                 grass.run_command('r.grow', input=holename, radius=edge + 0.01,
-                             old=-1, out=holename + '_grown', quiet=quiet)
+                                  old=-1, out=holename + '_grown', quiet=quiet)
             except CalledModuleError:
-                grass.fatal(_("abandoned. Removing temporary map, restoring user mask if needed:"))
-            
+                grass.fatal(_("abandoned. Removing temporary map, restoring "
+                              "user mask if needed:"))
+
             # no idea why r.grow old=-1 doesn't replace existing values with NULL
-            grass.mapcalc("$out = if($inp == -1, null(), $dem)", 
-                            out = holename + '_edges', inp = holename + '_grown', dem = input)
+            grass.mapcalc("$out = if($inp == -1, null(), $dem)",
+                          out=holename + '_edges', inp=holename + '_grown', dem=input)
             tmp_rmaps.append(holename + '_edges')
-            
+
             # convert to points for interpolation
             tmp_vmaps.append(holename)
             try:
@@ -288,33 +322,34 @@ def main():
                                   input=holename + '_edges', output=holename,
                                   type='point', flags='z', quiet=quiet)
             except CalledModuleError:
-                grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
-            
+                grass.fatal(_("abandoned. Removing temporary maps, restoring "
+                              "user mask if needed:"))
+
             # count number of points to control segmax parameter for interpolation:
-            pointsnumber = grass.vector_info_topo(map = holename)['points']
+            pointsnumber = grass.vector_info_topo(map=holename)['points']
             grass.verbose(_("Interpolating %d points") % pointsnumber)
 
             if pointsnumber < 2:
                 grass.verbose(_("No points to interpolate"))
                 failed_list.append(holename)
                 continue
-            
+
             # Avoid v.surf.rst warnings
             if pointsnumber < segmax:
                 npmin = pointsnumber + 1
                 segmax = pointsnumber
-            
+
             # launch v.surf.rst
             tmp_rmaps.append(holename + '_dem')
             try:
                 grass.run_command('v.surf.rst', quiet=quiet,
                                   input=holename, elev=holename + '_dem',
-                                  tension=tension, smooth=smooth, 
+                                  tension=tension, smooth=smooth,
                                   segmax=segmax, npmin=npmin)
             except CalledModuleError:
                 # GTC Hole is NULL area in a raster map
                 grass.fatal(_("Failed to fill hole %s") % cat)
-            
+
             # v.surf.rst sometimes fails with exit code 0
             # related bug #1813
             if not grass.find_file(holename + '_dem')['file']:
@@ -326,30 +361,42 @@ def main():
                     tmp_vmaps.remove(holename)
                 except:
                     pass
-                grass.warning(_("Filling has failed silently. Leaving temporary maps with prefix <%s> for debugging.") % holename)
+                grass.warning(
+                    _("Filling has failed silently. Leaving temporary maps "
+                      "with prefix <%s> for debugging.") %
+                    holename)
                 failed_list.append(holename)
                 continue
-            
+
             # append hole result to interpolated version later used to patch into original DEM
             if first:
                 tmp_rmaps.append(filling)
-                grass.run_command('g.region', align = input, raster = holename + '_dem', quiet = quiet)
-                grass.mapcalc("$out = if(isnull($inp), null(), $dem)", 
-                                out = filling, inp = holename, dem = holename + '_dem')
+                grass.run_command('g.region', align=input, raster=holename + '_dem', quiet=quiet)
+                grass.mapcalc("$out = if(isnull($inp), null(), $dem)",
+                              out=filling, inp=holename, dem=holename + '_dem')
                 first = False
             else:
                 tmp_rmaps.append(filling + '_tmp')
-                grass.run_command('g.region', align = input, raster = (filling, holename + '_dem'), quiet = quiet)
-                grass.mapcalc("$out = if(isnull($inp), if(isnull($fill), null(), $fill), $dem)", 
-                                out = filling + '_tmp', inp = holename, dem = holename + '_dem', fill = filling)
+                grass.run_command(
+                    'g.region', align=input, raster=(
+                        filling, holename + '_dem'), quiet=quiet)
+                grass.mapcalc(
+                    "$out = if(isnull($inp), if(isnull($fill), null(), $fill), $dem)",
+                    out=filling + '_tmp',
+                    inp=holename,
+                    dem=holename + '_dem',
+                    fill=filling)
                 try:
                     grass.run_command('g.rename',
                                       raster=(filling + '_tmp', filling),
                                       overwrite=True, quiet=quiet)
                 except CalledModuleError:
-                    grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
-                tmp_rmaps.remove(filling + '_tmp') # this map has been removed. No need for later cleanup.
-            
+                    grass.fatal(
+                        _("abandoned. Removing temporary maps, restoring user "
+                          "mask if needed:"))
+                # this map has been removed. No need for later cleanup.
+                tmp_rmaps.remove(filling + '_tmp')
+
             # remove temporary maps to not overfill disk
             try:
                 tmp_rmaps.remove(holename)
@@ -366,7 +413,8 @@ def main():
                                         holename + '_edges',
                                         holename + '_dem'))
             except CalledModuleError:
-                grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
+                grass.fatal(_("abandoned. Removing temporary maps, restoring "
+                              "user mask if needed:"))
             try:
                 tmp_vmaps.remove(holename)
             except:
@@ -376,28 +424,28 @@ def main():
                                   type='vector', name=holename)
             except CalledModuleError:
                 grass.fatal(_("abandoned. Removing temporary maps, restoring user mask if needed:"))
-    
-    #check if method is different from rst to use r.resamp.bspline
+
+    # check if method is different from rst to use r.resamp.bspline
     if method != 'rst':
         grass.message(_("Using %s bspline interpolation") % method)
 
         # clone current region
         grass.use_temp_region()
-        grass.run_command('g.region', align = input)
+        grass.run_command('g.region', align=input)
 
         reg = grass.region()
         # launch r.resamp.bspline
         tmp_rmaps.append(prefix + 'filled')
         if usermask:
-            grass.run_command('r.resamp.bspline', input = input, mask = usermask,
-                output = prefix + 'filled', method = method, 
-                ew_step = 3 * reg['ewres'], ns_step = 3 * reg['nsres'], 
-                lambda_ = 0.01, flags = 'n')
+            grass.run_command('r.resamp.bspline', input=input, mask=usermask,
+                              output=prefix + 'filled', method=method,
+                              ew_step=3 * reg['ewres'], ns_step=3 * reg['nsres'],
+                              lambda_=lambda_, flags='n')
         else:
-            grass.run_command('r.resamp.bspline', input = input,
-                output = prefix + 'filled', method = method, 
-                ew_step = 3 * reg['ewres'], ns_step = 3 * reg['nsres'], 
-                lambda_ = 0.01, flags = 'n')
+            grass.run_command('r.resamp.bspline', input=input,
+                              output=prefix + 'filled', method=method,
+                              ew_step=3 * reg['ewres'], ns_step=3 * reg['nsres'],
+                              lambda_=lambda_, flags='n')
 
     # restoring user's mask, if present:
     if usermask:
@@ -409,13 +457,14 @@ def main():
         usermask = None
 
     # set region to original extents, align to input
-    grass.run_command('g.region', n = reg_org['n'], s = reg_org['s'], 
-                    e = reg_org['e'], w = reg_org['w'], align = input)
+    grass.run_command('g.region', n=reg_org['n'], s=reg_org['s'],
+                      e=reg_org['e'], w=reg_org['w'], align=input)
 
     # patch orig and fill map
     grass.message(_("Patching fill data into NULL areas..."))
     # we can use --o here as g.parser already checks on startup
-    grass.run_command('r.patch', input = (input,prefix + 'filled'), output = output, overwrite = True)
+    grass.run_command('r.patch', input=(input, prefix + 'filled'),
+                      output=output, overwrite=True)
 
     # restore the real region
     grass.del_temp_region()
@@ -424,9 +473,11 @@ def main():
 
     # write cmd history:
     grass.raster_history(output)
-    
+
     if len(failed_list) > 0:
-        grass.warning(_("Following holes where not filled. Temporary maps with are left in place to allow examination of unfilled holes"))
+        grass.warning(
+            _("Following holes where not filled. Temporary maps with are left "
+              "in place to allow examination of unfilled holes"))
         outlist = failed_list[0]
         for hole in failed_list[1:]:
             outlist = ', ' + outlist
diff --git a/scripts/r.grow/r.grow.html b/scripts/r.grow/r.grow.html
index 118b468..f74fa9e 100644
--- a/scripts/r.grow/r.grow.html
+++ b/scripts/r.grow/r.grow.html
@@ -75,4 +75,4 @@ Marjorie Larson,
 U.S. Army Construction Engineering Research Laboratory
 <p>Glynn Clements
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/r.grow/r.grow.py b/scripts/r.grow/r.grow.py
index 0ac8604..574c934 100755
--- a/scripts/r.grow/r.grow.py
+++ b/scripts/r.grow/r.grow.py
@@ -72,8 +72,9 @@ from grass.exceptions import CalledModuleError
 def cleanup():
     for map in [temp_dist, temp_val]:
         if map:
-            grass.run_command('g.remove', flags = 'fb', quiet = True,
-                              type='rast', name = map)
+            grass.run_command('g.remove', flags='fb', quiet=True,
+                              type='rast', name=map)
+
 
 def main():
     global temp_dist, temp_val
@@ -108,7 +109,7 @@ def main():
         metric = 'squared'
         radius = radius * radius
 
-    #check if input file exists
+    # check if input file exists
     if not grass.find_file(input)['file']:
         grass.fatal(_("Raster map <%s> not found") % input)
 
@@ -120,10 +121,10 @@ def main():
 
     grass.mapcalc(
         "$output = if(!isnull($input),$old,if($dist < $radius,$new,null()))",
-        output = output, input = input, radius = radius,
-        old = old, new = new, dist = temp_dist)
+        output=output, input=input, radius=radius,
+        old=old, new=new, dist=temp_dist)
 
-    grass.run_command('r.colors', map = output, raster = input)
+    grass.run_command('r.colors', map=output, raster=input)
 
     # write cmd history:
     grass.raster_history(output)
diff --git a/scripts/r.import/r.import.html b/scripts/r.import/r.import.html
index 0f7f610..fdcc742 100644
--- a/scripts/r.import/r.import.html
+++ b/scripts/r.import/r.import.html
@@ -135,4 +135,4 @@ Markus Metz<br>
 Improvements: Martin Landa, Anna Petrasova
 
 <p>
-<i>Last changed: $Date: 2016-05-25 18:51:19 +0200 (Wed, 25 May 2016) $</i>
+<i>Last changed: $Date: 2016-05-25 18:50:20 +0200 (Wed, 25 May 2016) $</i>
diff --git a/scripts/r.import/r.import.py b/scripts/r.import/r.import.py
index 5e589fc..61e0c02 100755
--- a/scripts/r.import/r.import.py
+++ b/scripts/r.import/r.import.py
@@ -46,6 +46,7 @@
 #%end
 #%option G_OPT_R_OUTPUT
 #% description: Name for output raster map
+#% required: no
 #% guisection: Output
 #%end
 #%option
@@ -89,6 +90,14 @@
 #% description: Resolution of output raster map (use with option resolution=value)
 #% guisection: Output
 #%end
+#%option
+#% key: title
+#% key_desc: phrase
+#% type: string
+#% required: no
+#% description: Title for resultant raster map
+#% guisection: Metadata
+#%end
 #%flag
 #% key: e
 #% description: Estimate resolution only
@@ -106,7 +115,10 @@
 #%flag
 #% key: o
 #% label: Override projection check (use current location's projection)
-#% description: Assume that the dataset has same projection as the current location
+#% description: Assume that the dataset has the same projection as the current location
+#%end
+#%rules
+#% required: output,-e
 #%end
 
 import sys
@@ -131,7 +143,8 @@ def cleanup():
         grass.try_rmdir(os.path.join(GISDBASE, TMPLOC))
     if SRCGISRC:
         grass.try_remove(SRCGISRC)
-    if TMP_REG_NAME:
+    if TMP_REG_NAME and grass.find_file(name=TMP_REG_NAME, element='vector',
+                                        mapset=grass.gisenv()['MAPSET'])['fullname']:
         grass.run_command('g.remove', type='vector', name=TMP_REG_NAME,
                           flags='f', quiet=True)
 
@@ -145,6 +158,9 @@ def main():
     memory = options['memory']
     bands = options['band']
     tgtres = options['resolution']
+    title = options["title"]
+    if flags['e'] and not output:
+        output = 'rimport_tmp'  # will be removed with the entire tmp location
     if options['resolution_value']:
         if tgtres != 'value':
             grass.fatal(_("To set custom resolution value, select 'value' in resolution option"))
@@ -152,7 +168,8 @@ def main():
         if tgtres_value <= 0:
             grass.fatal(_("Resolution value can't be smaller than 0"))
     elif tgtres == 'value':
-         grass.fatal(_("Please provide the resolution for the imported dataset or change to 'estimated' resolution"))
+        grass.fatal(
+            _("Please provide the resolution for the imported dataset or change to 'estimated' resolution"))
 
     grassenv = grass.gisenv()
     tgtloc = grassenv['LOCATION_NAME']
@@ -175,7 +192,7 @@ def main():
     # create temp location from input without import
     grass.verbose(_("Creating temporary location for <%s>...") % GDALdatasource)
     parameters = dict(input=GDALdatasource, output=output,
-                      memory=memory, flags='c',
+                      memory=memory, flags='c', title=title,
                       location=TMPLOC, quiet=True)
     if bands:
         parameters['band'] = bands
@@ -202,14 +219,18 @@ def main():
             parameters['band'] = bands
         try:
             grass.run_command('r.in.gdal', **parameters)
-            grass.verbose(_("Input <%s> successfully imported without reprojection") % GDALdatasource)
+            grass.verbose(
+                _("Input <%s> successfully imported without reprojection") %
+                GDALdatasource)
             return 0
         except CalledModuleError as e:
             grass.fatal(_("Unable to import GDAL dataset <%s>") % GDALdatasource)
-    
+
     # make sure target is not xy
     if grass.parse_command('g.proj', flags='g')['name'] == 'xy_location_unprojected':
-        grass.fatal(_("Coordinate reference system not available for current location <%s>") % tgtloc)
+        grass.fatal(
+            _("Coordinate reference system not available for current location <%s>") %
+            tgtloc)
 
     # switch to temp location
     os.environ['GISRC'] = str(SRCGISRC)
@@ -318,7 +339,9 @@ def main():
         grass.run_command('g.remove', type='vector', name=vreg,
                           flags='f', quiet=True)
 
-        grass.message(_("Estimated target resolution for input band <{out}>: {res}").format(out=outfile, res=estres))
+        grass.message(
+            _("Estimated target resolution for input band <{out}>: {res}").format(
+                out=outfile, res=estres))
         if flags['e']:
             continue
 
@@ -331,7 +354,9 @@ def main():
             res = estres
         elif tgtres == 'value':
             res = tgtres_value
-            grass.message(_("Using given resolution for input band <{out}>: {res}").format(out=outfile, res=res))
+            grass.message(
+                _("Using given resolution for input band <{out}>: {res}").format(
+                    out=outfile, res=res))
             # align to requested resolution
             grass.run_command('g.region', res=res, flags='a')
         else:
diff --git a/scripts/r.import/testsuite/data/data1.tif b/scripts/r.import/testsuite/data/data1.tif
new file mode 100644
index 0000000..06b08b1
Binary files /dev/null and b/scripts/r.import/testsuite/data/data1.tif differ
diff --git a/scripts/r.import/testsuite/data/data2.asc b/scripts/r.import/testsuite/data/data2.asc
new file mode 100644
index 0000000..06287dc
--- /dev/null
+++ b/scripts/r.import/testsuite/data/data2.asc
@@ -0,0 +1,9 @@
+ncols        4
+nrows        3
+xllcorner    1544385.000000000000
+yllcorner    1553655.000000000000
+cellsize     30.000000000000
+NODATA_value 255
+ 22 22 21 21
+ 22 22 22 21
+ 21 22 22 22
diff --git a/scripts/r.import/testsuite/data/data2.asc.aux.xml b/scripts/r.import/testsuite/data/data2.asc.aux.xml
new file mode 100644
index 0000000..5159e83
--- /dev/null
+++ b/scripts/r.import/testsuite/data/data2.asc.aux.xml
@@ -0,0 +1,274 @@
+<PAMDataset>
+  <Metadata>
+    <MDI key="AREA_OR_POINT">Area</MDI>
+    <MDI key="DataType">Thematic</MDI>
+  </Metadata>
+  <PAMRasterBand band="1">
+    <ColorInterp>Palette</ColorInterp>
+    <ColorTable>
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="249" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="71" c2="107" c3="160" c4="255" />
+      <Entry c1="209" c2="221" c3="249" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="221" c2="201" c3="201" c4="255" />
+      <Entry c1="216" c2="147" c3="130" c4="255" />
+      <Entry c1="237" c2="0" c3="0" c4="255" />
+      <Entry c1="170" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="178" c2="173" c3="163" c4="255" />
+      <Entry c1="249" c2="249" c3="249" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="104" c2="170" c3="99" c4="255" />
+      <Entry c1="28" c2="99" c3="48" c4="255" />
+      <Entry c1="181" c2="201" c3="142" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="165" c2="140" c3="48" c4="255" />
+      <Entry c1="204" c2="186" c3="124" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="226" c2="226" c3="193" c4="255" />
+      <Entry c1="201" c2="201" c3="119" c4="255" />
+      <Entry c1="153" c2="193" c3="71" c4="255" />
+      <Entry c1="119" c2="173" c3="147" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="219" c2="216" c3="60" c4="255" />
+      <Entry c1="170" c2="112" c3="40" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="186" c2="216" c3="234" c4="255" />
+      <Entry c1="181" c2="211" c3="229" c4="255" />
+      <Entry c1="181" c2="211" c3="229" c4="255" />
+      <Entry c1="181" c2="211" c3="229" c4="255" />
+      <Entry c1="181" c2="211" c3="229" c4="255" />
+      <Entry c1="112" c2="163" c3="186" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+      <Entry c1="0" c2="0" c3="0" c4="255" />
+    </ColorTable>
+    <Metadata>
+      <MDI key="RepresentationType">THEMATIC</MDI>
+      <MDI key="STATISTICS_MAXIMUM">22</MDI>
+      <MDI key="STATISTICS_MEAN">21.666666666667</MDI>
+      <MDI key="STATISTICS_MINIMUM">21</MDI>
+      <MDI key="STATISTICS_STDDEV">0.47140452079098</MDI>
+    </Metadata>
+  </PAMRasterBand>
+</PAMDataset>
diff --git a/scripts/r.import/testsuite/data/data2.prj b/scripts/r.import/testsuite/data/data2.prj
new file mode 100644
index 0000000..356542b
--- /dev/null
+++ b/scripts/r.import/testsuite/data/data2.prj
@@ -0,0 +1 @@
+PROJCS["Albers_Conical_Equal_Area",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137,298.257222101]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Albers"],PARAMETER["standard_parallel_1",29.5],PARAMETER["standard_parallel_2",45.5],PARAMETER["latitude_of_origin",23],PARAMETER["central_meridian",-96],PARAMETER["false_easting",0],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/scripts/r.import/testsuite/test_r_import.py b/scripts/r.import/testsuite/test_r_import.py
new file mode 100644
index 0000000..545f709
--- /dev/null
+++ b/scripts/r.import/testsuite/test_r_import.py
@@ -0,0 +1,50 @@
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestRImportRegion(TestCase):
+
+    imported = 'test_r_import_imported'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.runModule('g.region', raster='elevation')
+
+    def tearDown(cls):
+        """Remove imported map after each test method"""
+        cls.runModule('g.remove', flags='f', type='raster',
+                      name=cls.imported)
+
+    def test_import_estimate(self):
+        """Test e flag"""
+        self.assertModule('r.import', input='data/data2.asc', output=self.imported,
+                          resample='nearest', flags='e')
+        self.assertRasterDoesNotExist(name=self.imported)
+
+    def test_import_same_proj_tif(self):
+        """Import tif in same proj, default params"""
+        self.assertModule('r.import', input='data/data1.tif', output=self.imported,
+                          resample='bilinear')
+        reference = dict(north=223490, south=223390, east=636820, west=636710,
+                         nsres=10, ewres=10, datatype='FCELL')
+        self.assertRasterFitsInfo(raster=self.imported, reference=reference)
+
+    def test_import_asc_custom_res(self):
+        """Import ASC in different projection, with specified resolution"""
+        self.assertModule('r.import', input='data/data2.asc', output=self.imported,
+                          resample='nearest', resolution='value', resolution_value=30)
+        reference = dict(rows=3, cols=4,
+                         nsres=30, ewres=30, datatype='CELL')
+        self.assertRasterFitsInfo(raster=self.imported, reference=reference, precision=1.1)
+
+    def test_import_asc_region_extent(self):
+        """Import ASC in different projection in specified region"""
+        self.runModule('g.region', raster='elevation', n=223655, s=223600)
+        self.assertModule('r.import', input='data/data2.asc', output=self.imported,
+                          resample='nearest', extent='region', resolution='region')
+        reference = dict(north=223655, south=223600)
+        self.assertRasterFitsInfo(raster=self.imported, reference=reference, precision=1e-6)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/scripts/r.in.aster/r.in.aster.html b/scripts/r.in.aster/r.in.aster.html
index 9a22d23..6564936 100644
--- a/scripts/r.in.aster/r.in.aster.html
+++ b/scripts/r.in.aster/r.in.aster.html
@@ -20,5 +20,5 @@ to be installed. The GDAL library must be compiled with hdf support.
 
 Michael Barton, Arizona State University and Paul Kelly 
 
-<p><i>Last changed: $Date: 2016-01-29 10:56:07 +0100 (Fri, 29 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-29 10:29:57 +0100 (Fri, 29 Jan 2016) $</i>
 
diff --git a/scripts/r.in.aster/r.in.aster.py b/scripts/r.in.aster/r.in.aster.py
index adfe9f6..82edf1a 100755
--- a/scripts/r.in.aster/r.in.aster.py
+++ b/scripts/r.in.aster/r.in.aster.py
@@ -5,9 +5,9 @@
 # MODULE:    r_in_aster.py
 # AUTHOR(S): Michael Barton (michael.barton at asu.edu) and
 #               Glynn Clements (glynn at gclements.plus.com)
-#               Based on r.in.aster bash script for GRASS 
+#               Based on r.in.aster bash script for GRASS
 #               by Michael Barton and Paul Kelly
-# PURPOSE:   Rectifies, georeferences, & imports Terra-ASTER imagery 
+# PURPOSE:   Rectifies, georeferences, & imports Terra-ASTER imagery
 #               using gdalwarp
 # COPYRIGHT: (C) 2008 by the GRASS Development Team
 #
@@ -57,16 +57,16 @@ import grass.script as grass
 
 bands = {
     'L1A': {
-        '1':  "VNIR_Band1:ImageData",
-        '2':  "VNIR_Band2:ImageData",
+        '1': "VNIR_Band1:ImageData",
+        '2': "VNIR_Band2:ImageData",
         '3n': "VNIR_Band3N:ImageData",
         '3b': "VNIR_Band3B:ImageData",
-        '4':  "SWIR_Band4:ImageData",
-        '5':  "SWIR_Band5:ImageData",
-        '6':  "SWIR_Band6:ImageData",
-        '7':  "SWIR_Band7:ImageData",
-        '8':  "SWIR_Band8:ImageData",
-        '9':  "SWIR_Band9:ImageData",
+        '4': "SWIR_Band4:ImageData",
+        '5': "SWIR_Band5:ImageData",
+        '6': "SWIR_Band6:ImageData",
+        '7': "SWIR_Band7:ImageData",
+        '8': "SWIR_Band8:ImageData",
+        '9': "SWIR_Band9:ImageData",
         '10': "TIR_Band10:ImageData",
         '11': "TIR_Band11:ImageData",
         '12': "TIR_Band12:ImageData",
@@ -74,16 +74,16 @@ bands = {
         '14': "TIR_Band14:ImageData"
     },
     'L1B': {
-        '1':  "VNIR_Swath:ImageData1",
-        '2':  "VNIR_Swath:ImageData2",
+        '1': "VNIR_Swath:ImageData1",
+        '2': "VNIR_Swath:ImageData2",
         '3n': "VNIR_Swath:ImageData3N",
         '3b': "VNIR_Swath:ImageData3B",
-        '4':  "SWIR_Swath:ImageData4",
-        '5':  "SWIR_Swath:ImageData5",
-        '6':  "SWIR_Swath:ImageData6",
-        '7':  "SWIR_Swath:ImageData7",
-        '8':  "SWIR_Swath:ImageData8",
-        '9':  "SWIR_Swath:ImageData9",
+        '4': "SWIR_Swath:ImageData4",
+        '5': "SWIR_Swath:ImageData5",
+        '6': "SWIR_Swath:ImageData6",
+        '7': "SWIR_Swath:ImageData7",
+        '8': "SWIR_Swath:ImageData8",
+        '9': "SWIR_Swath:ImageData9",
         '10': "TIR_Swath:ImageData10",
         '11': "TIR_Swath:ImageData11",
         '12': "TIR_Swath:ImageData12",
@@ -92,35 +92,35 @@ bands = {
     }
 }
 
+
 def main():
     input = options['input']
     proctype = options['proctype']
     output = options['output']
     band = options['band']
 
-    #check whether gdalwarp is in path and executable
+    # check whether gdalwarp is in path and executable
     if not grass.find_program('gdalwarp', '--help'):
         grass.fatal(_("gdalwarp is not in the path and executable"))
 
-    #create temporary file to hold gdalwarp output before importing to GRASS
-    tempfile = grass.read_command("g.tempfile", pid = os.getpid()).strip() + '.tif'
+    # create temporary file to hold gdalwarp output before importing to GRASS
+    tempfile = grass.read_command("g.tempfile", pid=os.getpid()).strip() + '.tif'
 
-    #get projection information for current GRASS location
-    proj = grass.read_command('g.proj', flags = 'jf').strip()
+    # get projection information for current GRASS location
+    proj = grass.read_command('g.proj', flags='jf').strip()
 
-    #currently only runs in projected location
+    # currently only runs in projected location
     if "XY location" in proj:
-      grass.fatal(_("This module needs to be run in a projected location (found: %s)") % proj)
-
+        grass.fatal(_("This module needs to be run in a projected location (found: %s)") % proj)
 
-    #process list of bands
-    allbands = ['1','2','3n','3b','4','5','6','7','8','9','10','11','12','13','14']
+    # process list of bands
+    allbands = ['1', '2', '3n', '3b', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']
     if band == 'all':
         bandlist = allbands
     else:
         bandlist = band.split(',')
 
-    #initialize datasets for L1A and L1B
+    # initialize datasets for L1A and L1B
     if proctype in ["L1A", "L1B"]:
         for band in bandlist:
             if band in allbands:
@@ -129,36 +129,37 @@ def main():
                 import_aster(proj, srcfile, tempfile, band)
             else:
                 grass.fatal(_('band %s is not an available Terra/ASTER band') % band)
-    elif proctype == "DEM": 
+    elif proctype == "DEM":
         srcfile = input
         import_aster(proj, srcfile, tempfile, "DEM")
 
-    #cleanup
+    # cleanup
     grass.message(_("Cleaning up ..."))
     grass.try_remove(tempfile)
     grass.message(_("Done."))
 
     return
 
+
 def import_aster(proj, srcfile, tempfile, band):
-    #run gdalwarp with selected options (must be in $PATH)
-    #to translate aster image to geotiff
+    # run gdalwarp with selected options (must be in $PATH)
+    # to translate aster image to geotiff
     grass.message(_("Georeferencing aster image ..."))
     grass.debug("gdalwarp -t_srs %s %s %s" % (proj, srcfile, tempfile))
 
     if platform.system() == "Darwin":
-        cmd = ["arch", "-i386", "gdalwarp", "-t_srs", proj, srcfile, tempfile ]
+        cmd = ["arch", "-i386", "gdalwarp", "-t_srs", proj, srcfile, tempfile]
     else:
-        cmd = ["gdalwarp", "-t_srs", proj, srcfile, tempfile ]
+        cmd = ["gdalwarp", "-t_srs", proj, srcfile, tempfile]
     p = grass.call(cmd)
     if p != 0:
-        #check to see if gdalwarp executed properly
+        # check to see if gdalwarp executed properly
         return
 
-    #import geotiff to GRASS
+    # import geotiff to GRASS
     grass.message(_("Importing into GRASS ..."))
     outfile = "%s.%s" % (output, band)
-    grass.run_command("r.in.gdal", input = tempfile, output = outfile)
+    grass.run_command("r.in.gdal", input=tempfile, output=outfile)
 
     # write cmd history
     grass.raster_history(outfile)
diff --git a/scripts/r.in.srtm/r.in.srtm.py b/scripts/r.in.srtm/r.in.srtm.py
index df279e1..b333658 100755
--- a/scripts/r.in.srtm/r.in.srtm.py
+++ b/scripts/r.in.srtm/r.in.srtm.py
@@ -19,18 +19,18 @@
 # Aug 2004: modified to accept files from other directories
 #           (by H. Bowman)
 # June 2005: added flag to read in US 1-arcsec tiles (H. Bowman)
-# April 2006: links updated from ftp://e0dps01u.ecs.nasa.gov/srtm/             
+# April 2006: links updated from ftp://e0dps01u.ecs.nasa.gov/srtm/
 #             to current links below
 # October 2008: Converted to Python by Glynn Clements
 #########################
-#Derived from:
+# Derived from:
 # ftp://e0srp01u.ecs.nasa.gov/srtm/version1/Documentation/Notes_for_ARCInfo_users.txt
 #     (note: document was updated silently end of 2003)
 #
 # ftp://e0srp01u.ecs.nasa.gov/srtm/version1/Documentation/SRTM_Topo.txt
 #  "3.0 Data Formats
 #  [...]
-#  To be more exact, these coordinates refer to the geometric center of 
+#  To be more exact, these coordinates refer to the geometric center of
 #  the lower left pixel, which in the case of SRTM-1 data will be about
 #  30 meters in extent."
 #
@@ -40,7 +40,7 @@
 #
 #- BIL uses *center* of the UL (!) pixel:
 #      http://downloads.esri.com/support/whitepapers/other_/eximgav.pdf
-#  
+#
 #- GDAL uses *corners* of pixels for its coordinates.
 #
 # NOTE: Even, if small difference: SRTM is referenced to EGM96, not WGS84 ellps
@@ -116,12 +116,13 @@ from grass.exceptions import CalledModuleError
 
 def cleanup():
     if not in_temp:
-	return
+        return
     for ext in ['.bil', '.hdr', '.prj', '.hgt.zip']:
-	grass.try_remove(tile + ext)
+        grass.try_remove(tile + ext)
     os.chdir('..')
     grass.try_rmdir(tmpdir)
 
+
 def main():
     global tile, tmpdir, in_temp
 
@@ -131,55 +132,55 @@ def main():
     output = options['output']
     one = flags['1']
 
-    #are we in LatLong location?
+    # are we in LatLong location?
     s = grass.read_command("g.proj", flags='j')
     kv = grass.parse_key_val(s)
     if kv['+proj'] != 'longlat':
-	grass.fatal(_("This module only operates in LatLong locations"))
+        grass.fatal(_("This module only operates in LatLong locations"))
 
     # use these from now on:
     infile = input
     while infile[-4:].lower() in ['.hgt', '.zip']:
-	infile = infile[:-4]
+        infile = infile[:-4]
     (fdir, tile) = os.path.split(infile)
 
     if not output:
-	tileout = tile
+        tileout = tile
     else:
-	tileout = output
+        tileout = output
 
     zipfile = infile + ".hgt.zip"
     hgtfile = os.path.join(fdir, tile[:7] + ".hgt")
     if os.path.isfile(zipfile):
-        #### check if we have unzip
-	if not grass.find_program('unzip'):
-	    grass.fatal(_('The "unzip" program is required, please install it first'))
-
-	# really a ZIP file?
-	# make it quiet in a safe way (just in case -qq isn't portable)
-	tenv = os.environ.copy()
-	tenv['UNZIP'] = '-qq'
-	if grass.call(['unzip', '-t', zipfile], env = tenv) != 0:
-	    grass.fatal(_("'%s' does not appear to be a valid zip file.") % zipfile)
-
-	is_zip = True
+        # check if we have unzip
+        if not grass.find_program('unzip'):
+            grass.fatal(_('The "unzip" program is required, please install it first'))
+
+        # really a ZIP file?
+        # make it quiet in a safe way (just in case -qq isn't portable)
+        tenv = os.environ.copy()
+        tenv['UNZIP'] = '-qq'
+        if grass.call(['unzip', '-t', zipfile], env=tenv) != 0:
+            grass.fatal(_("'%s' does not appear to be a valid zip file.") % zipfile)
+
+        is_zip = True
     elif os.path.isfile(hgtfile):
-	# try and see if it's already unzipped
-	is_zip = False
+        # try and see if it's already unzipped
+        is_zip = False
     else:
-	grass.fatal(_("File '%s' or '%s' not found") % (zipfile, hgtfile))
+        grass.fatal(_("File '%s' or '%s' not found") % (zipfile, hgtfile))
 
-    #make a temporary directory
+    # make a temporary directory
     tmpdir = grass.tempfile()
     grass.try_remove(tmpdir)
     os.mkdir(tmpdir)
 
     if is_zip:
-	shutil.copyfile(zipfile, os.path.join(tmpdir, tile + ".hgt.zip"))
+        shutil.copyfile(zipfile, os.path.join(tmpdir, tile + ".hgt.zip"))
     else:
-	shutil.copyfile(hgtfile, os.path.join(tmpdir, tile + ".hgt"))
+        shutil.copyfile(hgtfile, os.path.join(tmpdir, tile + ".hgt"))
 
-    #change to temporary directory
+    # change to temporary directory
     os.chdir(tmpdir)
     in_temp = True
 
@@ -188,26 +189,26 @@ def main():
     bilfile = tile + ".bil"
 
     if is_zip:
-        #unzip & rename data file:
-	grass.message(_("Extracting '%s'...") % infile)
-	if grass.call(['unzip', zipfile], env = tenv) != 0:
-	    grass.fatal(_("Unable to unzip file."))
+        # unzip & rename data file:
+        grass.message(_("Extracting '%s'...") % infile)
+        if grass.call(['unzip', zipfile], env=tenv) != 0:
+            grass.fatal(_("Unable to unzip file."))
 
     grass.message(_("Converting input file to BIL..."))
     os.rename(hgtfile, bilfile)
 
     north = tile[0]
-    ll_latitude  = int(tile[1:3])
+    ll_latitude = int(tile[1:3])
     east = tile[3]
     ll_longitude = int(tile[4:7])
 
     # are we on the southern hemisphere? If yes, make LATITUDE negative.
     if north == "S":
-	ll_latitude *= -1
+        ll_latitude *= -1
 
     # are we west of Greenwich? If yes, make LONGITUDE negative.
     if east == "W":
-	ll_longitude *= -1
+        ll_longitude *= -1
 
     # Calculate Upper Left from Lower Left
     ulxmap = "%.1f" % ll_longitude
@@ -215,10 +216,10 @@ def main():
     ulymap = "%.1f" % (ll_latitude + 1)
 
     if not one:
-	tmpl = tmpl3sec
+        tmpl = tmpl3sec
     else:
-	grass.message(_("Attempting to import 1-arcsec data."))
-	tmpl = tmpl1sec
+        grass.message(_("Attempting to import 1-arcsec data."))
+        tmpl = tmpl1sec
 
     header = tmpl % (ulxmap, ulymap)
     hdrfile = tile + '.hdr'
@@ -226,7 +227,7 @@ def main():
     outf.write(header)
     outf.close()
 
-    #create prj file: To be precise, we would need EGS96! But who really cares...
+    # create prj file: To be precise, we would need EGS96! But who really cares...
     prjfile = tile + '.prj'
     outf = file(prjfile, 'w')
     outf.write(proj)
@@ -238,7 +239,7 @@ def main():
         grass.fatal(_("Unable to import data"))
 
     # nice color table
-    grass.run_command('r.colors', map = tileout, color = 'srtm')
+    grass.run_command('r.colors', map=tileout, color='srtm')
 
     # write cmd history:
     grass.raster_history(tileout)
diff --git a/scripts/r.in.wms/r.in.wms.html b/scripts/r.in.wms/r.in.wms.html
index 4060834..5025faf 100644
--- a/scripts/r.in.wms/r.in.wms.html
+++ b/scripts/r.in.wms/r.in.wms.html
@@ -130,4 +130,4 @@ Stepan Turek, Czech Technical University in Prague, Czech Republic
 (bachelor's final project 2012, mentor: Martin Landa)
 
 <p>
-<i>Last changed: $Date: 2015-11-23 08:01:46 +0100 (Mon, 23 Nov 2015) $</i>
+<i>Last changed: $Date: 2015-11-23 08:01:17 +0100 (Mon, 23 Nov 2015) $</i>
diff --git a/scripts/r.in.wms/r.in.wms.py b/scripts/r.in.wms/r.in.wms.py
index 9ad9fe6..ec5f0e2 100755
--- a/scripts/r.in.wms/r.in.wms.py
+++ b/scripts/r.in.wms/r.in.wms.py
@@ -58,8 +58,8 @@ This program is free software under the GNU General Public License
 #%option
 #% key: srs
 #% type: integer
-#% description: EPSG code of requested source projection 
-#% answer:4326 
+#% description: EPSG code of requested source projection
+#% answer:4326
 #% guisection: Request
 #%end
 
@@ -178,29 +178,31 @@ sys.path.insert(1, os.path.join(os.path.dirname(sys.path[0]), 'etc', 'r.in.wms')
 
 import grass.script as grass
 
+
 def GetRegionParams(opt_region):
 
-    # set region 
+    # set region
     if opt_region:
         reg_spl = opt_region.strip().split('@', 1)
         reg_mapset = '.'
         if len(reg_spl) > 1:
             reg_mapset = reg_spl[1]
-            
-        if not grass.find_file(name = reg_spl[0], element = 'windows', mapset = reg_mapset)['name']:
-             grass.fatal(_("Region <%s> not found") % opt_region)
-    
+
+        if not grass.find_file(name=reg_spl[0], element='windows', mapset=reg_mapset)['name']:
+            grass.fatal(_("Region <%s> not found") % opt_region)
+
     if opt_region:
         s = grass.read_command('g.region',
-                                quiet = True,
-                                flags = 'ug',
-                                region = opt_region)
-        region_params = grass.parse_key_val(s, val_type = float)
+                               quiet=True,
+                               flags='ug',
+                               region=opt_region)
+        region_params = grass.parse_key_val(s, val_type=float)
     else:
         region_params = grass.region()
 
     return region_params
 
+
 def main():
 
     if 'GRASS' in options['driver']:
@@ -211,7 +213,7 @@ def main():
         grass.debug("Using GDAL WMS driver")
         from wms_gdal_drv import WMSGdalDrv
         wms = WMSGdalDrv()
-    
+
     if flags['c']:
         wms.GetCapabilities(options)
     else:
diff --git a/scripts/r.in.wms/srs.py b/scripts/r.in.wms/srs.py
index 4ffa899..cff4f2e 100644
--- a/scripts/r.in.wms/srs.py
+++ b/scripts/r.in.wms/srs.py
@@ -1,5 +1,5 @@
 """!
- at brief WMS, WMTS and NASA OnEarth drivers implemented in GRASS using GDAL Python bindings. 
+ at brief WMS, WMTS and NASA OnEarth drivers implemented in GRASS using GDAL Python bindings.
 
 List of classes:
  - srs.py::Srs
@@ -32,6 +32,7 @@ class Srs:
           * urn:ogc:def:crs:EPSG:4326
         :param string axisorder: Force / override axisorder ('xy' or 'yx')
     """
+
     def __init__(self, srs):
         self.id = srs
         self.naming_authority = None
@@ -45,7 +46,7 @@ class Srs:
 
         values = self.id.split(':')
 
-        if self.id.find('/def/crs/') != -1: # URI Style 1
+        if self.id.find('/def/crs/') != -1:  # URI Style 1
             self.encoding = "uri"
             vals = self.id.split('/')
             self.authority = vals[5].upper()
@@ -84,7 +85,7 @@ class Srs:
             self.code = int(values[1])
 
         if self.code in axisorder_yx:
-                self.axisorder = 'yx'
+            self.axisorder = 'yx'
 
     def getcode(self):
         """Create for example "EPSG:4326" string and return back
@@ -101,10 +102,10 @@ class Srs:
         """
 
         return 'urn:%s:def:crs:%s:%s:%s' % (
-                    (self.naming_authority and self.naming_authority or "ogc"),
-                                    (self.authority or ""),
-                                    (self.version or ""),
-                                    (self.code or ""))
+            (self.naming_authority and self.naming_authority or "ogc"),
+            (self.authority or ""),
+            (self.version or ""),
+            (self.code or ""))
 
 axisorder_yx = frozenset([
     4326,
diff --git a/scripts/r.in.wms/wms_base.py b/scripts/r.in.wms/wms_base.py
index 38bba1d..b829c55 100644
--- a/scripts/r.in.wms/wms_base.py
+++ b/scripts/r.in.wms/wms_base.py
@@ -1,5 +1,5 @@
 """!
- at brief Preparation of parameters for drivers, which download it, and managing downloaded data. 
+ at brief Preparation of parameters for drivers, which download it, and managing downloaded data.
 
 List of classes:
  - wms_base::WMSBase
@@ -18,39 +18,47 @@ import os
 from math import ceil
 
 import base64
-import urllib2
-from httplib import HTTPException
+
+try:
+    from urllib2 import Request, urlopen, HTTPError
+    from httplib import HTTPException
+except ImportError:
+    from urllib.request import Request, urlopen
+    from urllib.error import HTTPError
+    from http.client import HTTPException
+
 
 import grass.script as grass
 from grass.exceptions import CalledModuleError
 
 
 class WMSBase:
+
     def __init__(self):
         # these variables are information for destructor
         self.temp_files_to_cleanup = []
-        
+
         self.params = {}
-        self.tile_size = {'bbox' : None}
+        self.tile_size = {'bbox': None}
 
         self.temp_map = None
         self.temp_warpmap = None
 
     def __del__(self):
-            
+
         # tries to remove temporary files, all files should be
         # removed before, implemented just in case of unexpected
         # stop of module
         for temp_file in self.temp_files_to_cleanup:
             grass.try_remove(temp_file)
-        
+
     def _debug(self, fn, msg):
         grass.debug("%s.%s: %s" %
                     (self.__class__.__name__, fn, msg))
-        
+
     def _initializeParameters(self, options, flags):
         self._debug("_initialize_parameters", "started")
-        
+
         # initialization of module parameters (options, flags)
         self.params['driver'] = options['driver']
         drv_info = WMSDriversInfo()
@@ -68,46 +76,49 @@ class WMSBase:
         if self.flags['o']:
             self.params['transparent'] = 'FALSE'
         else:
-            self.params['transparent'] = 'TRUE'   
+            self.params['transparent'] = 'TRUE'
 
         for key in ['password', 'username', 'urlparams']:
-            self.params[key] = options[key] 
+            self.params[key] = options[key]
 
         if (self.params ['password'] and self.params ['username'] == '') or \
-           (self.params ['password'] == '' and self.params ['username']):
-                grass.fatal(_("Please insert both %s and %s parameters or none of them." % ('password', 'username')))
+           (self.params['password'] == '' and self.params['username']):
+            grass.fatal(_("Please insert both %s and %s parameters or none of them." %
+                          ('password', 'username')))
 
         self.params['bgcolor'] = options['bgcolor'].strip()
 
         if options['format'] == "jpeg" and \
            not 'format' in driver_props['ignored_params']:
             if not flags['o'] and \
-              'WMS' in self.params['driver']:
+                    'WMS' in self.params['driver']:
                 grass.warning(_("JPEG format does not support transparency"))
 
         self.params['format'] = drv_info.GetFormat(options['format'])
         if not self.params['format']:
             self.params['format'] = self.params['format']
-        
-        #TODO: get srs from Tile Service file in OnEarth_GRASS driver 
+
+        # TODO: get srs from Tile Service file in OnEarth_GRASS driver
         self.params['srs'] = int(options['srs'])
-        if self.params['srs'] <= 0 and  not 'srs' in driver_props['ignored_params']:
+        if self.params['srs'] <= 0 and not 'srs' in driver_props['ignored_params']:
             grass.fatal(_("Invalid EPSG code %d") % self.params['srs'])
 
-        self.params['wms_version'] = options['wms_version']  
+        self.params['wms_version'] = options['wms_version']
         if "CRS" in GetSRSParamVal(self.params['srs']) and self.params['wms_version'] == "1.1.1":
             self.params['wms_version'] = "1.3.0"
-            grass.warning(_("WMS version <1.3.0> will be used, because version <1.1.1> does not support <%s>projection")
-                            % GetSRSParamVal(self.params['srs']))
-        
+            grass.warning(
+                _("WMS version <1.3.0> will be used, because version <1.1.1> does not support <%s>projection") %
+                GetSRSParamVal(
+                    self.params['srs']))
+
         if self.params['wms_version'] == "1.3.0":
             self.params['proj_name'] = "CRS"
         else:
             self.params['proj_name'] = "SRS"
 
         # read projection info
-        self.proj_location = grass.read_command('g.proj', 
-                                                flags ='jf').rstrip('\n')
+        self.proj_location = grass.read_command('g.proj',
+                                                flags='jf').rstrip('\n')
         self.proj_location = self._modifyProj(self.proj_location)
 
         if self.params['srs'] in [3857, 900913]:
@@ -116,10 +127,10 @@ class WMSBase:
             # needed to be tested on more servers
             self.proj_srs = '+proj=merc +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +no_defs +a=6378137 +b=6378137 +nadgrids=@null +to_meter=1'
         else:
-            self.proj_srs = grass.read_command('g.proj', 
-                                               flags = 'jf', 
-                                               epsg = str(GetEpsg(self.params['srs']))).rstrip('\n')
-        
+            self.proj_srs = grass.read_command('g.proj',
+                                               flags='jf',
+                                               epsg=str(GetEpsg(self.params['srs']))).rstrip('\n')
+
         self.proj_srs = self._modifyProj(self.proj_srs)
 
         if not self.proj_srs or not self.proj_location:
@@ -131,18 +142,27 @@ class WMSBase:
         maxcols = int(options['maxcols'])
         if maxcols <= min_tile_size:
             grass.fatal(_("Maxcols must be greater than 100"))
-        
+
         maxrows = int(options['maxrows'])
         if maxrows <= min_tile_size:
             grass.fatal(_("Maxrows must be greater than 100"))
-        
-        # setting optimal tile size according to maxcols and maxrows constraint and region cols and rows      
-        self.tile_size['cols'] = int(self.region['cols'] / ceil(self.region['cols'] / float(maxcols)))
-        self.tile_size['rows'] = int(self.region['rows'] / ceil(self.region['rows'] / float(maxrows)))
-        
+
+        # setting optimal tile size according to maxcols and maxrows constraint
+        # and region cols and rows
+        self.tile_size['cols'] = int(
+            self.region['cols'] /
+            ceil(
+                self.region['cols'] /
+                float(maxcols)))
+        self.tile_size['rows'] = int(
+            self.region['rows'] /
+            ceil(
+                self.region['rows'] /
+                float(maxrows)))
+
         # default format for GDAL library
         self.gdal_drv_format = "GTiff"
-        
+
         self._debug("_initialize_parameters", "finished")
 
     def _modifyProj(self, proj):
@@ -160,34 +180,33 @@ class WMSBase:
         not_relevant_params = []
         for i_param in driver_props['ignored_params']:
 
-            if options.has_key(i_param) and \
+            if i_param in options and \
                options[i_param] and \
-               i_param not in ['srs', 'wms_version', 'format']: # params with default value
-                not_relevant_params.append('<' + i_param  + '>')
+               i_param not in ['srs', 'wms_version', 'format']:  # params with default value
+                not_relevant_params.append('<' + i_param + '>')
 
         if len(not_relevant_params) > 0:
             grass.warning(_("These parameter are ignored: %s\n\
-                             %s driver does not support the parameters." %\
+                             %s driver does not support the parameters." %
                             (','.join(not_relevant_params), options['driver'])))
 
         not_relevant_flags = []
         for i_flag in driver_props['ignored_flags']:
 
             if flags[i_flag]:
-                not_relevant_flags.append('<' + i_flag  + '>')
+                not_relevant_flags.append('<' + i_flag + '>')
 
         if len(not_relevant_flags) > 0:
             grass.warning(_("These flags are ignored: %s\n\
-                             %s driver does not support the flags." %\
+                             %s driver does not support the flags." %
                             (','.join(not_relevant_flags), options['driver'])))
 
     def GetMap(self, options, flags):
         """!Download data from WMS server."""
 
-        self._initializeParameters(options, flags)  
+        self._initializeParameters(options, flags)
+        self.bbox = self._computeBbox()
 
-        self.bbox     = self._computeBbox()
-        
         self.temp_map = self._download()
 
         if not self.temp_map:
@@ -196,8 +215,8 @@ class WMSBase:
         self._reprojectMap()
 
         return self.temp_warpmap
-    
-    def _fetchCapabilities(self, options): 
+
+    def _fetchCapabilities(self, options):
         """!Download capabilities from WMS server
         """
         cap_url = options['url'].strip()
@@ -212,46 +231,48 @@ class WMSBase:
         elif 'OnEarth' in options['driver']:
             cap_url += "REQUEST=GetTileService"
         else:
-            cap_url += "SERVICE=WMS&REQUEST=GetCapabilities&VERSION=" + options['wms_version'] 
+            cap_url += "SERVICE=WMS&REQUEST=GetCapabilities&VERSION=" + options['wms_version']
 
         if options['urlparams']:
             cap_url += "&" + options['urlparams']
-            
+
         grass.debug('Fetching capabilities file.\n%s' % cap_url)
 
         try:
             cap = self._fetchDataFromServer(cap_url, options['username'], options['password'])
         except (IOError, HTTPException) as e:
-            if urllib2.HTTPError == type(e) and e.code == 401:
-                grass.fatal(_("Authorization failed to <%s> when fetching capabilities") % options['url'])
+            if isinstance(e, HTTPError) and e.code == 401:
+                grass.fatal(
+                    _("Authorization failed to <%s> when fetching capabilities") %
+                    options['url'])
             else:
                 msg = _("Unable to fetch capabilities from <%s>: %s") % (options['url'], e)
-                
+
                 if hasattr(e, 'reason'):
                     msg += _("\nReason: ") + e.reason
-                
+
                 grass.fatal(msg)
-        
+
         grass.debug('Fetching capabilities OK')
         return cap
 
-    def _fetchDataFromServer(self, url, username = None, password = None):
+    def _fetchDataFromServer(self, url, username=None, password=None):
         """!Fetch data from server
-        """      
-        request = urllib2.Request(url)
+        """
+        request = Request(url)
         if username and password:
-                    base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
-                    request.add_header("Authorization", "Basic %s" % base64string)
-        
+            base64string = base64.encodestring('%s:%s' % (username, password)).replace('\n', '')
+            request.add_header("Authorization", "Basic %s" % base64string)
+
         try:
-            return urllib2.urlopen(request)
+            return urlopen(request)
         except ValueError as error:
             grass.fatal("%s" % error)
 
-    def GetCapabilities(self, options): 
+    def GetCapabilities(self, options):
         """!Get capabilities from WMS server
         """
-        cap  = self._fetchCapabilities(options)
+        cap = self._fetchCapabilities(options)
         capfile_output = options['capfile_output'].strip()
 
         # save to file
@@ -261,64 +282,64 @@ class WMSBase:
                 temp.write(cap.read())
                 temp.close()
                 return
-            except IOError as error: 
+            except IOError as error:
                 grass.fatal(_("Unabble to open file '%s'.\n%s\n" % (cap_file, error)))
-        
+
         # print to output
         cap_lines = cap.readlines()
-        for line in cap_lines: 
-            print line.rstrip()
-        
+        for line in cap_lines:
+            print(line.rstrip())
+
     def _computeBbox(self):
         """!Get region extent for WMS query (bbox)
         """
         self._debug("_computeBbox", "started")
-        
-        bbox_region_items = {'maxy' : 'n', 'miny' : 's', 'maxx' : 'e', 'minx' : 'w'}  
+
+        bbox_region_items = {'maxy': 'n', 'miny': 's', 'maxx': 'e', 'minx': 'w'}
         bbox = {}
 
-        if self.proj_srs == self.proj_location: # TODO: do it better
-            for bbox_item, region_item in bbox_region_items.iteritems():
+        if self.proj_srs == self.proj_location:  # TODO: do it better
+            for bbox_item, region_item in bbox_region_items.items():
                 bbox[bbox_item] = self.region[region_item]
-        
+
         # if location projection and wms query projection are
         # different, corner points of region are transformed into wms
         # projection and then bbox is created from extreme coordinates
         # of the transformed points
         else:
-            for bbox_item, region_item  in bbox_region_items.iteritems():
+            for bbox_item, region_item in bbox_region_items.items():
                 bbox[bbox_item] = None
 
             temp_region = self._tempfile()
-            
+
             try:
                 temp_region_opened = open(temp_region, 'w')
-                temp_region_opened.write("%f %f\n%f %f\n%f %f\n%f %f\n"  %\
-                                       (self.region['e'], self.region['n'],\
-                                        self.region['w'], self.region['n'],\
-                                        self.region['w'], self.region['s'],\
-                                        self.region['e'], self.region['s'] ))
+                temp_region_opened.write("%f %f\n%f %f\n%f %f\n%f %f\n" %
+                                         (self.region['e'], self.region['n'],
+                                          self.region['w'], self.region['n'],
+                                          self.region['w'], self.region['s'],
+                                          self.region['e'], self.region['s']))
             except IOError:
-                 grass.fatal(_("Unable to write data into tempfile"))
-            finally:           
-                temp_region_opened.close()            
-
-            points = grass.read_command('m.proj', flags = 'd',
-                                        proj_out = self.proj_srs,
-                                        proj_in = self.proj_location,
-                                        input = temp_region,
-                                        quiet = True) # TODO: stdin
+                grass.fatal(_("Unable to write data into tempfile"))
+            finally:
+                temp_region_opened.close()
+
+            points = grass.read_command('m.proj', flags='d',
+                                        proj_out=self.proj_srs,
+                                        proj_in=self.proj_location,
+                                        input=temp_region,
+                                        quiet=True)  # TODO: stdin
             grass.try_remove(temp_region)
             if not points:
                 grass.fatal(_("Unable to determine region, %s failed") % 'm.proj')
-            
+
             points = points.splitlines()
             if len(points) != 4:
                 grass.fatal(_("Region definition: 4 points required"))
-            
+
             for point in points:
                 try:
-                    point = map(float, point.split("|"))
+                    point = list(map(float, point.split("|")))
                 except ValueError:
                     grass.fatal(_('Reprojection of region using m.proj failed.'))
                 if not bbox['maxy']:
@@ -327,33 +348,33 @@ class WMSBase:
                     bbox['maxx'] = point[0]
                     bbox['minx'] = point[0]
                     continue
-                
-                if   bbox['maxy'] < point[1]:
+
+                if bbox['maxy'] < point[1]:
                     bbox['maxy'] = point[1]
                 elif bbox['miny'] > point[1]:
                     bbox['miny'] = point[1]
-                
-                if   bbox['maxx'] < point[0]:
+
+                if bbox['maxx'] < point[0]:
                     bbox['maxx'] = point[0]
                 elif bbox['minx'] > point[0]:
-                    bbox['minx'] = point[0]  
-        
+                    bbox['minx'] = point[0]
+
         self._debug("_computeBbox", "finished -> %s" % bbox)
 
         # Ordering of coordinates axis of geographic coordinate
-        # systems in WMS 1.3.0 is flipped. If  self.tile_size['flip_coords'] is 
+        # systems in WMS 1.3.0 is flipped. If  self.tile_size['flip_coords'] is
         # True, coords in bbox need to be flipped in WMS query.
 
         return bbox
 
-    def _reprojectMap(self): 
+    def _reprojectMap(self):
         """!Reproject data  using gdalwarp if needed
         """
         # reprojection of raster
-        if self.proj_srs != self.proj_location: # TODO: do it better
+        if self.proj_srs != self.proj_location:  # TODO: do it better
             grass.message(_("Reprojecting raster..."))
             self.temp_warpmap = grass.tempfile()
-            
+
             if int(os.getenv('GRASS_VERBOSE', '2')) <= 2:
                 nuldev = file(os.devnull, 'w+')
             else:
@@ -365,7 +386,7 @@ class WMSBase:
                 gdal_method = "bilinear"
             else:
                 gdal_method = self.params['method']
-            
+
             #"+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs"
             # RGB rasters - alpha layer is added for cropping edges of projected raster
             try:
@@ -374,21 +395,21 @@ class WMSBase:
                                       '-s_srs', '%s' % self.proj_srs,
                                       '-t_srs', '%s' % self.proj_location,
                                       '-r', gdal_method, '-dstalpha',
-                                      self.temp_map, self.temp_warpmap], stdout = nuldev)
+                                      self.temp_map, self.temp_warpmap], stdout=nuldev)
                 # RGBA rasters
                 else:
                     ps = grass.Popen(['gdalwarp',
                                       '-s_srs', '%s' % self.proj_srs,
                                       '-t_srs', '%s' % self.proj_location,
                                       '-r', gdal_method,
-                                      self.temp_map, self.temp_warpmap], stdout = nuldev)
+                                      self.temp_map, self.temp_warpmap], stdout=nuldev)
                 ps.wait()
             except OSError as e:
                 grass.fatal('%s \nThis can be caused by missing %s utility. ' % (e, 'gdalwarp'))
-            
+
             if nuldev:
                 nuldev.close()
-            
+
             if ps.returncode != 0:
                 grass.fatal(_('%s failed') % 'gdalwarp')
             grass.try_remove(self.temp_map)
@@ -398,26 +419,28 @@ class WMSBase:
             self.temp_files_to_cleanup.remove(self.temp_map)
 
         return self.temp_warpmap
-        
+
     def _tempfile(self):
-        """!Create temp_file and append list self.temp_files_to_cleanup 
-            with path of file 
-     
+        """!Create temp_file and append list self.temp_files_to_cleanup
+            with path of file
+
         @return string path to temp_file
         """
         temp_file = grass.tempfile()
         if temp_file is None:
             grass.fatal(_("Unable to create temporary files"))
-        
+
         # list of created tempfiles for destructor
         self.temp_files_to_cleanup.append(temp_file)
-        
+
         return temp_file
 
+
 class GRASSImporter:
+
     def __init__(self, opt_output):
 
-        self.cleanup_mask   = False
+        self.cleanup_mask = False
         self.cleanup_layers = False
 
         # output map name
@@ -427,13 +450,13 @@ class GRASSImporter:
         # into raster named:self.opt_output + this suffix)
         self.original_mask_suffix = "_temp_MASK"
 
-        # check names of temporary rasters, which module may create 
+        # check names of temporary rasters, which module may create
         maps = []
-        for suffix in ('.red', '.green', '.blue', '.alpha', self.original_mask_suffix ):
+        for suffix in ('.red', '.green', '.blue', '.alpha', self.original_mask_suffix):
             rast = self.opt_output + suffix
-            if grass.find_file(rast, element = 'cell', mapset = '.')['file']:
+            if grass.find_file(rast, element='cell', mapset='.')['file']:
                 maps.append(rast)
-        
+
         if len(maps) != 0:
             grass.fatal(_("Please change output name, or change names of these rasters: %s, "
                           "module needs to create this temporary maps during execution.") % ",".join(maps))
@@ -447,8 +470,9 @@ class GRASSImporter:
             except CalledModuleError:
                 grass.fatal(_('%s failed') % 'r.mask')
 
-            # restore original mask, if exists 
-            if grass.find_file(self.opt_output + self.original_mask_suffix, element = 'cell', mapset = '.' )['name']:
+            # restore original mask, if exists
+            if grass.find_file(self.opt_output + self.original_mask_suffix,
+                               element='cell', mapset='.')['name']:
                 try:
                     mask_copy = self.opt_output + self.original_mask_suffix
                     grass.run_command('g.copy', quiet=True,
@@ -457,25 +481,25 @@ class GRASSImporter:
                     grass.fatal(_('%s failed') % 'g.copy')
 
         # remove temporary created rasters
-        if self.cleanup_layers: 
+        if self.cleanup_layers:
             maps = []
             for suffix in ('.red', '.green', '.blue', '.alpha', self.original_mask_suffix):
                 rast = self.opt_output + suffix
-                if grass.find_file(rast, element = 'cell', mapset = '.')['file']:
+                if grass.find_file(rast, element='cell', mapset='.')['file']:
                     maps.append(rast)
-            
+
             if maps:
                 grass.run_command('g.remove',
-                                  quiet = True,
-                                  flags = 'fb',
-                                  type = 'raster',
-                                  name = ','.join(maps))
-        
-        # delete environmental variable which overrides region 
+                                  quiet=True,
+                                  flags='fb',
+                                  type='raster',
+                                  name=','.join(maps))
+
+        # delete environmental variable which overrides region
         if 'GRASS_REGION' in os.environ.keys():
             os.environ.pop('GRASS_REGION')
 
-    def ImportMapIntoGRASS(self, raster): 
+    def ImportMapIntoGRASS(self, raster):
         """!Import raster into GRASS.
         """
         # importing temp_map into GRASS
@@ -489,20 +513,20 @@ class GRASSImporter:
         # information for destructor to cleanup temp_layers, created
         # with r.in.gdal
         self.cleanup_layers = True
-        
+
         # setting region for full extend of imported raster
-        if grass.find_file(self.opt_output + '.red', element = 'cell', mapset = '.')['file']:
+        if grass.find_file(self.opt_output + '.red', element='cell', mapset='.')['file']:
             region_map = self.opt_output + '.red'
         else:
             region_map = self.opt_output
-        os.environ['GRASS_REGION'] = grass.region_env(rast = region_map)
-          
+        os.environ['GRASS_REGION'] = grass.region_env(rast=region_map)
+
         # mask created from alpha layer, which describes real extend
         # of warped layer (may not be a rectangle), also mask contains
         # transparent parts of raster
-        if grass.find_file( self.opt_output + '.alpha', element = 'cell', mapset = '.' )['name']:
+        if grass.find_file(self.opt_output + '.alpha', element='cell', mapset='.')['name']:
             # saving current mask (if exists) into temp raster
-            if grass.find_file('MASK', element = 'cell', mapset = '.' )['name']:
+            if grass.find_file('MASK', element='cell', mapset='.')['name']:
                 try:
                     mask_copy = self.opt_output + self.original_mask_suffix
                     grass.run_command('g.copy', quiet=True,
@@ -521,8 +545,8 @@ class GRASSImporter:
             except CalledModuleError:
                 grass.fatal(_('%s failed') % 'r.mask')
 
-        #TODO one band + alpha band?
-        if grass.find_file(self.opt_output + '.red', element = 'cell', mapset = '.')['file']:
+        # TODO one band + alpha band?
+        if grass.find_file(self.opt_output + '.red', element='cell', mapset='.')['file']:
             try:
                 grass.run_command('r.composite',
                                   quiet=True, overwrite=True,
@@ -535,7 +559,9 @@ class GRASSImporter:
 
         grass.message(_('<%s> created.') % self.opt_output)
 
+
 class WMSDriversInfo:
+
     def __init__(self):
         """!Provides information about driver parameters.
         """
@@ -544,11 +570,16 @@ class WMSDriversInfo:
         self.f_labels = ["geotiff", "tiff", "png", "jpeg", "gif", "png8"]
 
         # form for request
-        self.formats = ["image/geotiff", "image/tiff", "image/png", "image/jpeg", "image/gif", "image/png8"]
+        self.formats = [
+            "image/geotiff",
+            "image/tiff",
+            "image/png",
+            "image/jpeg",
+            "image/gif",
+            "image/png8"]
 
         self.srs = ("epsg", "crs")
 
-
     def GetDrvProperties(self, driver):
         """!Get information about driver parameters.
         """
@@ -561,12 +592,11 @@ class WMSDriversInfo:
         if 'OnEarth' in driver:
             return self._OnEarthProperties()
 
-
     def _OnEarthProperties(self):
 
         props = {}
         props['ignored_flags'] = ['o']
-        props['ignored_params'] = ['bgcolor', 'styles', 'capfile_output', 
+        props['ignored_params'] = ['bgcolor', 'styles', 'capfile_output',
                                    'format', 'srs', 'wms_version']
         props['req_multiple_layers'] = False
 
@@ -595,7 +625,7 @@ class WMSDriversInfo:
         props = {}
         props['ignored_flags'] = []
         props['ignored_params'] = ['urlparams', 'bgcolor', 'capfile', 'capfile_output',
-                                    'username', 'password']
+                                   'username', 'password']
         props['req_multiple_layers'] = True
 
         return props
@@ -622,8 +652,7 @@ class WMSDriversInfo:
         return self.srs
 
 
-
-#TODO move to utils?
+# TODO move to utils?
 def GetSRSParamVal(srs):
     """!Decides whether to use CRS or EPSG prefix according to srs number.
     """
@@ -633,11 +662,12 @@ def GetSRSParamVal(srs):
     else:
         return "EPSG:%d" % srs
 
+
 def GetEpsg(srs):
     """
-     @return EPSG number 
+     @return EPSG number
              If srs is CRS number, return EPSG number which corresponds to CRS number.
-    """    
+    """
     if srs == 84:
         return 4326
     if srs == 83:
diff --git a/scripts/r.in.wms/wms_cap_parsers.py b/scripts/r.in.wms/wms_cap_parsers.py
index 3caeb39..6bb7c51 100644
--- a/scripts/r.in.wms/wms_cap_parsers.py
+++ b/scripts/r.in.wms/wms_cap_parsers.py
@@ -18,32 +18,36 @@ This program is free software under the GNU General Public License
 """
 try:
     from xml.etree.ElementTree import ParseError
-except ImportError: # < Python 2.7
+except ImportError:  # < Python 2.7
     from xml.parsers.expat import ExpatError as ParseError
 
 import xml.etree.ElementTree as etree
-import grass.script as grass 
+import grass.script as grass
+
 
 class BaseCapabilitiesTree(etree.ElementTree):
+
     def __init__(self, cap_file):
         """!Initialize xml.etree.ElementTree
         """
         try:
-            etree.ElementTree.__init__(self, file = cap_file)
+            etree.ElementTree.__init__(self, file=cap_file)
         except ParseError:
             raise ParseError(_("Unable to parse XML file"))
         except IOError as error:
             raise ParseError(_("Unable to open XML file '%s'.\n%s\n" % (cap_file, error)))
 
         if self.getroot() is None:
-            raise ParseError(_("Root node was not found.")) 
-        
+            raise ParseError(_("Root node was not found."))
+
+
 class WMSXMLNsHandler:
+
     def __init__(self, caps):
         """!Handle XML namespaces according to WMS version of capabilities.
         """
         self.namespace = "{http://www.opengis.net/wms}"
-        
+
         if caps.getroot().find("Service") is not None:
             self.use_ns = False
         elif caps.getroot().find(self.namespace + "Service") is not None:
@@ -51,7 +55,7 @@ class WMSXMLNsHandler:
         else:
             raise ParseError(_("Unable to parse capabilities file.\n\
                                 Tag <%s> was not found.") % "Service")
-    
+
     def Ns(self, tag_name):
         """!Add namespace to tag_name according to version
         """
@@ -59,30 +63,32 @@ class WMSXMLNsHandler:
             tag_name = self.namespace + tag_name
         return tag_name
 
+
 class WMSCapabilitiesTree(BaseCapabilitiesTree):
-    def __init__(self, cap_file, force_version = None):
+
+    def __init__(self, cap_file, force_version=None):
         """!Parses WMS capabilities file.
             If the capabilities file cannot be parsed if it raises xml.etree.ElementTree.ParseError.
 
-        The class manges inheritance in 'Layer' elements. Inherited elements 
+        The class manges inheritance in 'Layer' elements. Inherited elements
         are added to 'Layer' element.
-        The class also removes elements which are in invalid form and are needed 
+        The class also removes elements which are in invalid form and are needed
         by wxGUI capabilities dialog.
 
-        @param cap_file - capabilities file        
+        @param cap_file - capabilities file
         @param force_version - force capabilities file version (1.1.1, 1.3.0)
         """
         BaseCapabilitiesTree.__init__(self, cap_file)
         self.xml_ns = WMSXMLNsHandler(self)
 
         grass.debug('Checking WMS capabilities tree.', 4)
-        
+
         if not "version" in self.getroot().attrib:
             raise ParseError(_("Missing version attribute root node "
-                                "in Capabilities XML file"))
+                               "in Capabilities XML file"))
         else:
             wms_version = self.getroot().attrib["version"]
-        
+
         if wms_version == "1.3.0":
             self.proj_tag = "CRS"
         else:
@@ -102,54 +108,54 @@ class WMSCapabilitiesTree(BaseCapabilitiesTree):
 
     def _checkFormats(self, capability):
         """!Check if format element is defined.
-        """        
+        """
         request = self._find(capability, "Request")
         get_map = self._find(request, "GetMap")
         formats = self._findall(get_map, "Format")
- 
-    def _checkLayerTree(self, parent_layer, first = True):
+
+    def _checkLayerTree(self, parent_layer, first=True):
         """!Recursively check layer tree and manage inheritance in the tree
         """
         if first:
             self._initLayer(parent_layer, None)
-        
+
         layers = parent_layer.findall((self.xml_ns.Ns("Layer")))
-        
+
         for l in layers:
             self._initLayer(l, parent_layer)
             self._checkLayerTree(l, False)
-        
+
     def _initLayer(self, layer, parent_layer):
         """Inherit elements from parent layer
 
         @param layer - <Layer> element which inherits
-        @param parent_layer - <Layer> element which is inherited from 
+        @param parent_layer - <Layer> element which is inherited from
         """
         if parent_layer is not None:
-            replaced_elements = [ ["EX_GeographicBoundingBox", "replace"],
-                                  ["Attribution", "replace"],
-                                  ["MinScaleDenominator", "replace"],
-                                  ["MaxScaleDenominator", "replace"],
-                                  ["AuthorityURL", "add"]]
-            
+            replaced_elements = [["EX_GeographicBoundingBox", "replace"],
+                                 ["Attribution", "replace"],
+                                 ["MinScaleDenominator", "replace"],
+                                 ["MaxScaleDenominator", "replace"],
+                                 ["AuthorityURL", "add"]]
+
             for element in replaced_elements:
                 elems = layer.findall(self.xml_ns.Ns(element[0]))
 
                 if len(elems) != 0 or element[1] == "add":
                     for e in parent_layer.findall(self.xml_ns.Ns(element[0])):
                         layer.append(e)
-            
+
             inh_arguments = ["queryable", "cascaded", "opaque",
                              "noSubsets", "fixedWidth", "fixedHeight"]
-            
+
             for attr in parent_layer.attrib:
                 if attr not in layer.attrib and attr in inh_arguments:
                     layer.attrib[attr] = parent_layer.attrib[attr]
-            
+
             self._inhNotSame(self.proj_tag, "element_content", layer, parent_layer)
             self._inhNotSame("BoundingBox", "attribute", layer, parent_layer, self.proj_tag)
 
-            # remove invalid Styles 
+            # remove invalid Styles
             styles = layer.findall(self.xml_ns.Ns('Style'))
             for s in styles:
                 s_name = s.find(self.xml_ns.Ns('Name'))
@@ -160,7 +166,7 @@ class WMSCapabilitiesTree(BaseCapabilitiesTree):
             self._inhNotSame("Style", "child_element_content", layer, parent_layer, "Name")
             self._inhNotSame("Dimension", "attribute", layer, parent_layer, "name")
 
-    def _inhNotSame(self, element_name, cmp_type, layer, parent_layer, add_arg = None):
+    def _inhNotSame(self, element_name, cmp_type, layer, parent_layer, add_arg=None):
         """Inherit elements which have unique values.
 
         @param element_name - name of inherited element
@@ -168,7 +174,7 @@ class WMSCapabilitiesTree(BaseCapabilitiesTree):
         @param cmp_type - 'child_element_content' - compared value is text of a child of the <Layer> element
         @param cmp_type - 'attribute' - compared value is text of the <Layer> element attribute
         @param layer - <Layer> element which inherits
-        @param parent_layer - <Layer> element which is inherited from 
+        @param parent_layer - <Layer> element which is inherited from
         @param add_arg - name of child element or attribute
         """
         elem = layer.findall(self.xml_ns.Ns(element_name))
@@ -176,50 +182,50 @@ class WMSCapabilitiesTree(BaseCapabilitiesTree):
         parent_elems = []
         if parent_layer is not None:
             parent_elems = parent_layer.findall(self.xml_ns.Ns(element_name))
-        
+
         for par_elem in parent_elems:
             parent_cmp_text = None
             if cmp_type == "attribute":
                 if add_arg in par_elem.attrib:
-                    parent_cmp_text = par_elem.attrib[add_arg];
+                    parent_cmp_text = par_elem.attrib[add_arg]
 
             elif cmp_type == "element_content":
                 parent_cmp_text = par_elem.text
-                
+
             elif cmp_type == "child_element_content":
                 parent_cmp = par_elem.find(self.xml_ns.Ns(add_arg))
                 if parent_cmp is not None:
                     parent_cmp_text = parent_cmp.text
-            
+
             if parent_cmp_text is None:
                 continue
-            
+
             is_there = False
             for elem in elem:
                 cmp_text = None
                 if cmp_type == "attribute":
                     if add_arg in elem.attrib:
                         cmp_text = elem.attrib[add_arg]
-                
+
                 elif cmp_type == "element_content":
                     cmp_text = elem.text
-                
+
                 elif cmp_type == "child_element_content":
                     cmp = elem.find(self.xml_ns.Ns(add_arg))
                     if cmp is not None:
                         cmp_text = cmp.text
-                
+
                 if cmp_text is None or \
                    cmp_text.lower() == parent_cmp_text.lower():
                     is_there = True
                     break
-            
+
             if not is_there:
                 layer.append(par_elem)
 
     def _find(self, etreeElement, tag):
         """!Find child element.
-            If the element is not found it raises xml.etree.ElementTree.ParseError.  
+            If the element is not found it raises xml.etree.ElementTree.ParseError.
         """
         res = etreeElement.find(self.xml_ns.Ns(tag))
 
@@ -231,7 +237,7 @@ class WMSCapabilitiesTree(BaseCapabilitiesTree):
 
     def _findall(self, etreeElement, tag):
         """!Find all children element.
-            If no element is found it raises xml.etree.ElementTree.ParseError.  
+            If no element is found it raises xml.etree.ElementTree.ParseError.
         """
         res = etreeElement.findall(self.xml_ns.Ns(tag))
 
@@ -251,9 +257,11 @@ class WMSCapabilitiesTree(BaseCapabilitiesTree):
         """
         return self.xml_ns
 
+
 class WMTSXMLNsHandler:
     """!Handle XML namespaces which are used in WMTS capabilities file.
     """
+
     def NsWmts(self, tag):
         """!Add namespace.
         """
@@ -264,19 +272,21 @@ class WMTSXMLNsHandler:
         """
         return "{http://www.opengis.net/ows/1.1}" + tag
 
+
 class WMTSCapabilitiesTree(BaseCapabilitiesTree):
+
     def __init__(self, cap_file):
         """!Parses WMTS capabilities file.
             If the capabilities file cannot be parsed it raises xml.etree.ElementTree.ParseError.
 
-        The class also removes elements which are in invalid form and are needed 
+        The class also removes elements which are in invalid form and are needed
         by wxGUI capabilities dialog or for creation of GetTile request by GRASS WMS library.
 
-        @param cap_file - capabilities file        
+        @param cap_file - capabilities file
         """
         BaseCapabilitiesTree.__init__(self, cap_file)
         self.xml_ns = WMTSXMLNsHandler()
-        
+
         grass.debug('Checking WMTS capabilities tree.', 4)
 
         contents = self._find(self.getroot(), 'Contents', self.xml_ns.NsWmts)
@@ -320,8 +330,8 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
 
         for t_mat in tile_mats:
             if not self._checkMat(t_mat):
-               grass.debug('Removed invalid <TileMatrix> element.', 4)
-               mat_set.remove(t_mat)
+                grass.debug('Removed invalid <TileMatrix> element.', 4)
+                mat_set.remove(t_mat)
 
         tile_mats = mat_set.findall(self.xml_ns.NsWmts('TileMatrix'))
         if not tile_mats:
@@ -329,12 +339,12 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
 
         return True
 
-    def _checkMat(self, t_mat):        
+    def _checkMat(self, t_mat):
         """!Check <TileMatrix>.
         """
         def _checkElement(t_mat, e, func):
             element = t_mat.find(self.xml_ns.NsWmts(e))
-            if element is None or not element.text: 
+            if element is None or not element.text:
                 return False
 
             try:
@@ -346,12 +356,12 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
                 return False
             return True
 
-        for e, func in [['ScaleDenominator', float], 
-                        ['TileWidth', int], 
+        for e, func in [['ScaleDenominator', float],
+                        ['TileWidth', int],
                         ['TileHeight', int]]:
             if not _checkElement(t_mat, e, func):
                 return False
-                        
+
         tile_mat_id = t_mat.find(self.xml_ns.NsOws('Identifier'))
         if tile_mat_id is None or not tile_mat_id.text:
             return False
@@ -364,13 +374,13 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
         if len(tl) < 2:
             return False
 
-        for t in tl:              
+        for t in tl:
             try:
                 t = float(t)
             except ValueError:
                 return False
         return True
-    
+
     def _checkLayer(self, layer):
         """!Check <Layer> element.
         """
@@ -395,7 +405,7 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
         contents = self.getroot().find(self.xml_ns.NsWmts('Contents'))
         mat_sets = contents.findall(self.xml_ns.NsWmts('TileMatrixSet'))
 
-        for link in  mat_set_links:
+        for link in mat_set_links:
             # <TileMatrixSetLink> does not point to existing  <TileMatrixSet>
             if not self._checkMatSetLink(link, mat_sets):
                 grass.debug('Removed invalid <TileMatrixSetLink> element.', 4)
@@ -433,7 +443,7 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
             if not tile_mat_limits:
                 grass.debug('Removed invalid <TileMatrixSetLimits> element.', 4)
                 link.remove(tile_mat_set_limits)
-          
+
         if not found:
             return False
 
@@ -456,9 +466,9 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
                 return False
         return True
 
-    def _find(self, etreeElement, tag, ns = None):
+    def _find(self, etreeElement, tag, ns=None):
         """!Find child element.
-            If the element is not found it raises xml.etree.ElementTree.ParseError.  
+            If the element is not found it raises xml.etree.ElementTree.ParseError.
         """
         if not ns:
             res = etreeElement.find(tag)
@@ -471,9 +481,9 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
 
         return res
 
-    def _findall(self, etreeElement, tag, ns = None):
+    def _findall(self, etreeElement, tag, ns=None):
         """!Find all children element.
-            If no element is found it raises xml.etree.ElementTree.ParseError.  
+            If no element is found it raises xml.etree.ElementTree.ParseError.
         """
         if not ns:
             res = etreeElement.findall(tag)
@@ -491,15 +501,17 @@ class WMTSCapabilitiesTree(BaseCapabilitiesTree):
         """
         return self.xml_ns
 
+
 class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
+
     def __init__(self, cap_file):
         """!Parse NASA OnEarth tile service file.
             If the file cannot be parsed it raises xml.etree.ElementTree.ParseError.
 
-        The class also removes elements which are in invalid form and are needed 
+        The class also removes elements which are in invalid form and are needed
         by wxGUI capabilities dialog or for creation of GetMap request by GRASS WMS library.
 
-        @param cap_file - capabilities file        
+        @param cap_file - capabilities file
         """
         BaseCapabilitiesTree.__init__(self, cap_file)
 
@@ -509,7 +521,7 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
 
         grass.debug('Check if OnEarth capabilities tree was finished.', 4)
 
-    def _checkLayerTree(self, parent_layer, first = True):
+    def _checkLayerTree(self, parent_layer, first=True):
         """!Recursively check layer tree.
         """
         if first:
@@ -526,11 +538,11 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
                 grass.debug(('Removed invalid <%s> element.' % l.tag), 4)
                 parent_layer.remove(l)
             if l.tag == 'TiledGroups':
-               self._checkLayerTree(l, False)
+                self._checkLayerTree(l, False)
 
     def _find(self, etreeElement, tag):
         """!Find child element.
-            If the element is not found it raises xml.etree.ElementTree.ParseError.  
+            If the element is not found it raises xml.etree.ElementTree.ParseError.
         """
         res = etreeElement.find(tag)
 
@@ -545,7 +557,7 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
         """
         if layer.tag == 'TiledGroups':
             return True
-            
+
         name = layer.find('Name')
         if name is None or not name.text:
             return False
@@ -574,7 +586,7 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
         """!Get all urls from tile pattern.
         """
         urls = []
-        if  tile_pattern.text is not None:
+        if tile_pattern.text is not None:
             tile_patt_lines = tile_pattern.text.split('\n')
 
             for line in tile_patt_lines:
@@ -585,7 +597,7 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
     def gettilepatternurldata(self, url):
         """!Parse url string in Tile Pattern.
         """
-        par_url = bbox = width = height = None 
+        par_url = bbox = width = height = None
 
         bbox_idxs = self.geturlparamidxs(url, "bbox=")
         if bbox_idxs is None:
@@ -593,13 +605,13 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
 
         par_url = [url[:bbox_idxs[0] - 1], url[bbox_idxs[1]:]]
 
-        bbox = url[bbox_idxs[0] + len('bbox=') : bbox_idxs[1]]
+        bbox = url[bbox_idxs[0] + len('bbox='): bbox_idxs[1]]
         bbox_list = bbox.split(',')
         if len(bbox_list) < 4:
             return None
 
         try:
-            bbox = map(float, bbox.split(','))
+            bbox = list(map(float, bbox.split(',')))
         except ValueError:
             return None
 
@@ -608,8 +620,8 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
             return None
 
         try:
-            width = int(url[width_idxs[0] + len('width=') : width_idxs[1]])
-        except  ValueError:
+            width = int(url[width_idxs[0] + len('width='): width_idxs[1]])
+        except ValueError:
             return None
 
         height_idxs = self.geturlparamidxs(url, "height=")
@@ -617,8 +629,8 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
             return None
 
         try:
-            height = int(url[height_idxs[0] + len('height=') : height_idxs[1]])
-        except  ValueError:
+            height = int(url[height_idxs[0] + len('height='): height_idxs[1]])
+        except ValueError:
             return None
 
         if height < 0 or width < 0:
@@ -630,7 +642,7 @@ class OnEarthCapabilitiesTree(BaseCapabilitiesTree):
         """!Find start and end index of parameter and it's value in url string
         """
         start_i = params_str.lower().find(param_key)
-        if start_i < 0: 
+        if start_i < 0:
             return None
         end_i = params_str.find("&", start_i)
         if end_i < 0:
diff --git a/scripts/r.in.wms/wms_drv.py b/scripts/r.in.wms/wms_drv.py
index 95f1527..4ada0db 100644
--- a/scripts/r.in.wms/wms_drv.py
+++ b/scripts/r.in.wms/wms_drv.py
@@ -1,5 +1,5 @@
 """!
- at brief WMS, WMTS and NASA OnEarth drivers implemented in GRASS using GDAL Python bindings. 
+ at brief WMS, WMTS and NASA OnEarth drivers implemented in GRASS using GDAL Python bindings.
 
 List of classes:
  - wms_drv::WMSDrv
@@ -17,13 +17,13 @@ This program is free software under the GNU General Public License
 """
 
 import socket
-import grass.script as grass 
+import grass.script as grass
 
-from time      import sleep
+from time import sleep
 
 try:
     from osgeo import gdal
-    from osgeo import gdalconst 
+    from osgeo import gdalconst
 except:
     grass.fatal(_("Unable to load GDAL python bindings"))
 
@@ -31,24 +31,32 @@ import numpy as Numeric
 Numeric.arrayrange = Numeric.arange
 
 from math import pi, floor
-from urllib2 import HTTPError
-from httplib import HTTPException
+try:
+    from urllib2 import HTTPError
+    from httplib import HTTPException
+except ImportError:
+    # python3
+    from urllib.error import HTTPError
+    from http.client import HTTPException
+
 try:
     from xml.etree.ElementTree import ParseError
-except ImportError: # < Python 2.7
+except ImportError:  # < Python 2.7
     from xml.parsers.expat import ExpatError as ParseError
-    
+
 from wms_base import WMSBase, GetSRSParamVal
 
 from wms_cap_parsers import WMTSCapabilitiesTree, OnEarthCapabilitiesTree
 from srs import Srs
 
+
 class WMSDrv(WMSBase):
+
     def _download(self):
         """!Downloads data from WMS server using own driver
-        
+
         @return temp_map with downloaded data
-        """ 
+        """
         grass.message(_("Downloading data from WMS server..."))
 
         if "?" in self.params["url"]:
@@ -63,13 +71,29 @@ class WMSDrv(WMSBase):
 
         # initialize correct manager according to chosen OGC service
         if self.params['driver'] == 'WMTS_GRASS':
-            req_mgr = WMTSRequestMgr(self.params, self.bbox, self.region, self.proj_srs, self.cap_file)
+            req_mgr = WMTSRequestMgr(
+                self.params,
+                self.bbox,
+                self.region,
+                self.proj_srs,
+                self.cap_file)
         elif self.params['driver'] == 'WMS_GRASS':
-            req_mgr = WMSRequestMgr(self.params, self.bbox, self.region, self.tile_size, self.proj_srs)
+            req_mgr = WMSRequestMgr(
+                self.params,
+                self.bbox,
+                self.region,
+                self.tile_size,
+                self.proj_srs)
         elif self.params['driver'] == 'OnEarth_GRASS':
-            req_mgr = OnEarthRequestMgr(self.params, self.bbox, self.region, self.proj_srs, self.cap_file)
-
-        # get information about size in pixels and bounding box of raster, where all tiles will be joined
+            req_mgr = OnEarthRequestMgr(
+                self.params,
+                self.bbox,
+                self.region,
+                self.proj_srs,
+                self.cap_file)
+
+        # get information about size in pixels and bounding box of raster, where
+        # all tiles will be joined
         map_region = req_mgr.GetMapRegion()
 
         init = True
@@ -81,10 +105,11 @@ class WMSDrv(WMSBase):
         while True:
 
             if fetch_try == 0:
-                # get url for request the tile and information for placing the tile into raster with other tiles
+                # get url for request the tile and information for placing the tile into
+                # raster with other tiles
                 tile = req_mgr.GetNextTile()
 
-            # if last tile has been already downloaded 
+            # if last tile has been already downloaded
             if not tile:
                 break
 
@@ -94,16 +119,22 @@ class WMSDrv(WMSBase):
             # the tile size and offset in pixels for placing it into raster where tiles are joined
             tile_ref = tile[1]
             grass.debug(query_url, 2)
-            try: 
-                wms_data = self._fetchDataFromServer(query_url, self.params['username'], self.params['password'])
+            try:
+                wms_data = self._fetchDataFromServer(
+                    query_url, self.params['username'],
+                    self.params['password'])
             except (IOError, HTTPException) as e:
-                if HTTPError == type(e) and e.code == 401:
-                    grass.fatal(_("Authorization failed to '%s' when fetching data.\n%s") % (self.params['url'], str(e)))
+                if isinstance(e, HTTPError) and e.code == 401:
+                    grass.fatal(
+                        _("Authorization failed to '%s' when fetching data.\n%s") %
+                        (self.params['url'], str(e)))
                 else:
-                    grass.fatal(_("Unable to fetch data from: '%s'\n%s") % (self.params['url'], str(e)))
+                    grass.fatal(
+                        _("Unable to fetch data from: '%s'\n%s") %
+                        (self.params['url'], str(e)))
 
             temp_tile = self._tempfile()
-                
+
             # download data into temporary file
             try:
                 temp_tile_opened = open(temp_tile, 'wb')
@@ -111,8 +142,9 @@ class WMSDrv(WMSBase):
             except IOError as e:
                 # some servers are not happy with many subsequent requests for tiles done immediately,
                 # if immediate request was unsuccessful, try to repeat the request after 5s and 30s breaks
-                # TODO probably servers can return more kinds of errors related to this problem (not only 104)
-                if socket.error == type(e) and e[0] == 104 and fetch_try < 2:
+                # TODO probably servers can return more kinds of errors related to this
+                # problem (not only 104)
+                if isinstance(e, socket.error) and e[0] == 104 and fetch_try < 2:
                     fetch_try += 1
 
                     if fetch_try == 1:
@@ -120,7 +152,9 @@ class WMSDrv(WMSBase):
                     elif fetch_try == 2:
                         sleep_time = 30
 
-                    grass.warning(_("Server refused to send data for a tile.\nRequest will be repeated after %d s.") % sleep_time)
+                    grass.warning(
+                        _("Server refused to send data for a tile.\nRequest will be repeated after %d s.") %
+                        sleep_time)
 
                     sleep(sleep_time)
                     continue
@@ -130,226 +164,250 @@ class WMSDrv(WMSBase):
                 temp_tile_opened.close()
 
             fetch_try = 0
-                
-            tile_dataset_info = gdal.Open(temp_tile, gdal.GA_ReadOnly) 
+
+            tile_dataset_info = gdal.Open(temp_tile, gdal.GA_ReadOnly)
             if tile_dataset_info is None:
                 # print error xml returned from server
                 try:
                     error_xml_opened = open(temp_tile, 'rb')
-                    err_str = error_xml_opened.read()     
+                    err_str = error_xml_opened.read()
                 except IOError as e:
                     grass.fatal(_("Unable to read data from tempfile.\n%s") % str(e))
                 finally:
                     error_xml_opened.close()
 
-                if  err_str is not None:
-                    grass.fatal(_("WMS server error: %s") %  err_str)
+                if err_str is not None:
+                    grass.fatal(_("WMS server error: %s") % err_str)
                 else:
-                    grass.fatal(_("WMS server unknown error") )
-                
+                    grass.fatal(_("WMS server unknown error"))
+
             temp_tile_pct2rgb = None
             if tile_dataset_info.RasterCount == 1 and \
                tile_dataset_info.GetRasterBand(1).GetRasterColorTable() is not None:
-                # expansion of color table into bands 
+                # expansion of color table into bands
                 temp_tile_pct2rgb = self._tempfile()
                 tile_dataset = self._pct2rgb(temp_tile, temp_tile_pct2rgb)
-            else: 
+            else:
                 tile_dataset = tile_dataset_info
-                
+
             # initialization of temp_map_dataset, where all tiles are merged
             if init:
                 temp_map = self._tempfile()
-                    
+
                 driver = gdal.GetDriverByName(self.gdal_drv_format)
                 metadata = driver.GetMetadata()
-                if not metadata.has_key(gdal.DCAP_CREATE) or \
-                       metadata[gdal.DCAP_CREATE] == 'NO':
-                    grass.fatal(_('Driver %s does not supports Create() method') % drv_format)  
+                if gdal.DCAP_CREATE not in metadata or \
+                        metadata[gdal.DCAP_CREATE] == 'NO':
+                    grass.fatal(_('Driver %s does not supports Create() method') % drv_format)
                 self.temp_map_bands_num = tile_dataset.RasterCount
                 temp_map_dataset = driver.Create(temp_map, map_region['cols'], map_region['rows'],
-                                                 self.temp_map_bands_num, 
+                                                 self.temp_map_bands_num,
                                                  tile_dataset.GetRasterBand(1).DataType)
                 init = False
-                
+
             # tile is written into temp_map
             tile_to_temp_map = tile_dataset.ReadRaster(0, 0, tile_ref['sizeX'], tile_ref['sizeY'],
-                                                             tile_ref['sizeX'], tile_ref['sizeY'])
-                
+                                                       tile_ref['sizeX'], tile_ref['sizeY'])
+
             temp_map_dataset.WriteRaster(tile_ref['t_cols_offset'], tile_ref['t_rows_offset'],
-                                         tile_ref['sizeX'],  tile_ref['sizeY'], tile_to_temp_map) 
-                
+                                         tile_ref['sizeX'], tile_ref['sizeY'], tile_to_temp_map)
+
             tile_dataset = None
             tile_dataset_info = None
             grass.try_remove(temp_tile)
-            grass.try_remove(temp_tile_pct2rgb)    
+            grass.try_remove(temp_tile_pct2rgb)
 
         if not temp_map:
             return temp_map
         # georeferencing and setting projection of temp_map
-        projection = grass.read_command('g.proj', 
-                                        flags = 'wf',
-                                        epsg =self.params['srs']).rstrip('\n')
+        projection = grass.read_command('g.proj',
+                                        flags='wf',
+                                        epsg=self.params['srs']).rstrip('\n')
         temp_map_dataset.SetProjection(projection)
 
         pixel_x_length = (map_region['maxx'] - map_region['minx']) / int(map_region['cols'])
         pixel_y_length = (map_region['miny'] - map_region['maxy']) / int(map_region['rows'])
 
-        geo_transform = [map_region['minx'] , pixel_x_length  , 0.0 , map_region['maxy'] , 0.0 , pixel_y_length] 
-        temp_map_dataset.SetGeoTransform(geo_transform )
+        geo_transform = [
+            map_region['minx'],
+            pixel_x_length,
+            0.0,
+            map_region['maxy'],
+            0.0,
+            pixel_y_length]
+        temp_map_dataset.SetGeoTransform(geo_transform)
         temp_map_dataset = None
-        
+
         return temp_map
-    
+
     def _pct2rgb(self, src_filename, dst_filename):
-        """!Create new dataset with data in dst_filename with bands according to src_filename 
+        """!Create new dataset with data in dst_filename with bands according to src_filename
         raster color table - modified code from gdal utility pct2rgb
-        
+
         @return new dataset
-        """  
+        """
         out_bands = 4
         band_number = 1
-        
+
         # open source file
         src_ds = gdal.Open(src_filename)
         if src_ds is None:
             grass.fatal(_('Unable to open %s ' % src_filename))
-            
+
         src_band = src_ds.GetRasterBand(band_number)
-        
+
         # Build color table
-        lookup = [ Numeric.arrayrange(256), 
-                   Numeric.arrayrange(256), 
-                   Numeric.arrayrange(256), 
-                   Numeric.ones(256)*255 ]
-        
-        ct = src_band.GetRasterColorTable()	
+        lookup = [Numeric.arrayrange(256),
+                  Numeric.arrayrange(256),
+                  Numeric.arrayrange(256),
+                  Numeric.ones(256) * 255]
+
+        ct = src_band.GetRasterColorTable()
         if ct is not None:
-            for i in range(min(256,ct.GetCount())):
+            for i in range(min(256, ct.GetCount())):
                 entry = ct.GetColorEntry(i)
                 for c in range(4):
                     lookup[c][i] = entry[c]
-        
+
         # create the working file
         gtiff_driver = gdal.GetDriverByName(self.gdal_drv_format)
         tif_ds = gtiff_driver.Create(dst_filename,
                                      src_ds.RasterXSize, src_ds.RasterYSize, out_bands)
-        
+
         # do the processing one scanline at a time
         for iY in range(src_ds.RasterYSize):
-            src_data = src_band.ReadAsArray(0,iY,src_ds.RasterXSize,1)
-            
+            src_data = src_band.ReadAsArray(0, iY, src_ds.RasterXSize, 1)
+
             for iBand in range(out_bands):
                 band_lookup = lookup[iBand]
-                
-                dst_data = Numeric.take(band_lookup,src_data)
-                tif_ds.GetRasterBand(iBand+1).WriteArray(dst_data,0,iY)
-        
-        return tif_ds       
+
+                dst_data = Numeric.take(band_lookup, src_data)
+                tif_ds.GetRasterBand(iBand + 1).WriteArray(dst_data, 0, iY)
+
+        return tif_ds
+
 
 class BaseRequestMgr:
-    """!Base class for request managers. 
+    """!Base class for request managers.
     """
+
     def _computeRequestData(self, bbox, tl_corner, tile_span, tile_size, mat_num_bbox):
         """!Initialize data needed for iteration through tiles. Used by WMTS_GRASS and OnEarth_GRASS drivers.
-        """ 
+        """
         epsilon = 1e-15
 
-        # request data bbox specified in row and col number 
+        # request data bbox specified in row and col number
         self.t_num_bbox = {}
 
-        self.t_num_bbox['min_col'] = int(floor((bbox['minx'] - tl_corner['minx']) / tile_span['x'] + epsilon))
-        self.t_num_bbox['max_col'] = int(floor((bbox['maxx'] - tl_corner['minx']) / tile_span['x'] - epsilon))
-
-        self.t_num_bbox['min_row'] = int(floor((tl_corner['maxy'] - bbox['maxy']) / tile_span['y'] + epsilon))
-        self.t_num_bbox['max_row'] = int(floor((tl_corner['maxy'] - bbox['miny']) / tile_span['y'] - epsilon))
+        self.t_num_bbox['min_col'] = int(
+            floor((bbox['minx'] - tl_corner['minx']) / tile_span['x'] + epsilon))
+        self.t_num_bbox['max_col'] = int(
+            floor((bbox['maxx'] - tl_corner['minx']) / tile_span['x'] - epsilon))
 
+        self.t_num_bbox['min_row'] = int(
+            floor((tl_corner['maxy'] - bbox['maxy']) / tile_span['y'] + epsilon))
+        self.t_num_bbox['max_row'] = int(
+            floor((tl_corner['maxy'] - bbox['miny']) / tile_span['y'] - epsilon))
 
         # Does required bbox intersects bbox of data available on server?
         self.intersects = False
         for col in ['min_col', 'max_col']:
             for row in ['min_row', 'max_row']:
-                if (self.t_num_bbox['min_row'] <= self.t_num_bbox[row] and self.t_num_bbox[row] <= mat_num_bbox['max_row']) and \
-                   (self.t_num_bbox['min_col'] <= self.t_num_bbox[col] and self.t_num_bbox[col] <= mat_num_bbox['max_col']):
+                if (self.t_num_bbox['min_row'] <= self.t_num_bbox[row] and self.t_num_bbox[row] <= mat_num_bbox['max_row']) and (
+                        self.t_num_bbox['min_col'] <= self.t_num_bbox[col] and self.t_num_bbox[col] <= mat_num_bbox['max_col']):
                     self.intersects = True
-                    
+
         if not self.intersects:
             grass.warning(_('Region is out of server data extend.'))
             self.map_region = None
             return
 
-        # crop request bbox to server data bbox extend 
+        # crop request bbox to server data bbox extend
         if self.t_num_bbox['min_col'] < (mat_num_bbox['min_col']):
-            self.t_num_bbox['min_col']  = int(mat_num_bbox['min_col'])
+            self.t_num_bbox['min_col'] = int(mat_num_bbox['min_col'])
 
         if self.t_num_bbox['max_col'] > (mat_num_bbox['max_col']):
-            self.t_num_bbox['max_col']  = int(mat_num_bbox['max_col'])
+            self.t_num_bbox['max_col'] = int(mat_num_bbox['max_col'])
 
         if self.t_num_bbox['min_row'] < (mat_num_bbox['min_row']):
-            self.t_num_bbox['min_row'] = int(mat_num_bbox['min_row']) 
+            self.t_num_bbox['min_row'] = int(mat_num_bbox['min_row'])
 
         if self.t_num_bbox['max_row'] > (mat_num_bbox['max_row']):
-            self.t_num_bbox['max_row'] = int(mat_num_bbox['max_row']) 
-
-
-        grass.debug('t_num_bbox: min_col:%d max_col:%d min_row:%d max_row:%d' % (self.t_num_bbox['min_col'], self.t_num_bbox['max_col'], self.t_num_bbox['min_row'], self.t_num_bbox['max_row']), 3)
-
-        num_tiles = (self.t_num_bbox['max_col'] - self.t_num_bbox['min_col'] + 1) * (self.t_num_bbox['max_row'] - self.t_num_bbox['min_row'] + 1) 
-        grass.message(_('Fetching %d tiles with %d x %d pixel size per tile...') % (num_tiles, tile_size['x'], tile_size['y']))
+            self.t_num_bbox['max_row'] = int(mat_num_bbox['max_row'])
+
+        grass.debug(
+            't_num_bbox: min_col:%d max_col:%d min_row:%d max_row:%d' %
+            (self.t_num_bbox['min_col'],
+             self.t_num_bbox['max_col'],
+             self.t_num_bbox['min_row'],
+             self.t_num_bbox['max_row']),
+            3)
+
+        num_tiles = (self.t_num_bbox['max_col'] - self.t_num_bbox['min_col'] + 1) * (
+            self.t_num_bbox['max_row'] - self.t_num_bbox['min_row'] + 1)
+        grass.message(
+            _('Fetching %d tiles with %d x %d pixel size per tile...') %
+            (num_tiles, tile_size['x'], tile_size['y']))
 
         # georeference of raster, where tiles will be merged
         self.map_region = {}
         self.map_region['minx'] = self.t_num_bbox['min_col'] * tile_span['x'] + tl_corner['minx']
         self.map_region['maxy'] = tl_corner['maxy'] - (self.t_num_bbox['min_row']) * tile_span['y']
 
-        self.map_region['maxx'] = (self.t_num_bbox['max_col'] + 1) * tile_span['x'] + tl_corner['minx']
-        self.map_region['miny'] = tl_corner['maxy'] - (self.t_num_bbox['max_row'] + 1) * tile_span['y']
+        self.map_region['maxx'] = (
+            self.t_num_bbox['max_col'] + 1) * tile_span['x'] + tl_corner['minx']
+        self.map_region['miny'] = tl_corner[
+            'maxy'] - (self.t_num_bbox['max_row'] + 1) * tile_span['y']
 
         # size of raster, where tiles will be merged
-        self.map_region['cols'] = int(tile_size['x'] * (self.t_num_bbox['max_col'] -  self.t_num_bbox['min_col'] + 1))
-        self.map_region['rows'] = int(tile_size['y'] * (self.t_num_bbox['max_row'] -  self.t_num_bbox['min_row'] + 1))
+        self.map_region['cols'] = int(tile_size['x'] *
+                                      (self.t_num_bbox['max_col'] - self.t_num_bbox['min_col'] + 1))
+        self.map_region['rows'] = int(tile_size['y'] *
+                                      (self.t_num_bbox['max_row'] - self.t_num_bbox['min_row'] + 1))
 
-        # hold information about current column and row during iteration 
+        # hold information about current column and row during iteration
         self.i_col = self.t_num_bbox['min_col']
-        self.i_row = self.t_num_bbox['min_row'] 
+        self.i_row = self.t_num_bbox['min_row']
 
         # bbox for first tile request
-        self.query_bbox = { 
-                            'minx' : tl_corner['minx'],
-                            'maxy' : tl_corner['maxy'],
-                            'maxx' : tl_corner['minx'] + tile_span['x'],
-                            'miny' : tl_corner['maxy'] - tile_span['y'],
-                          }
+        self.query_bbox = {
+            'minx': tl_corner['minx'],
+            'maxy': tl_corner['maxy'],
+            'maxx': tl_corner['minx'] + tile_span['x'],
+            'miny': tl_corner['maxy'] - tile_span['y'],
+        }
 
         self.tile_ref = {
-                          'sizeX' : tile_size['x'],
-                          'sizeY' : tile_size['y']
-                        }
+            'sizeX': tile_size['x'],
+            'sizeY': tile_size['y']
+        }
 
     def _isGeoProj(self, proj):
-        """!Is it geographic projection? 
-        """       
-        if (proj.find("+proj=latlong")  != -1 or \
-            proj.find("+proj=longlat")  != -1):
+        """!Is it geographic projection?
+        """
+        if (proj.find("+proj=latlong") != -1 or
+                proj.find("+proj=longlat") != -1):
 
             return True
         return False
 
+
 class WMSRequestMgr(BaseRequestMgr):
-    def __init__(self, params, bbox, region, tile_size, proj_srs, cap_file = None):
+
+    def __init__(self, params, bbox, region, tile_size, proj_srs, cap_file=None):
         """!Initialize data needed for iteration through tiles.
         """
         self.version = params['wms_version']
         self.srs_param = params['srs']
 
-        proj = params['proj_name'] + "=" +  GetSRSParamVal(params['srs'])
-        self.url = params['url'] + ("SERVICE=WMS&REQUEST=GetMap&VERSION=%s&LAYERS=%s&WIDTH=%s&HEIGHT=%s&STYLES=%s&TRANSPARENT=%s" % \
-                  (params['wms_version'], params['layers'], tile_size['cols'], tile_size['rows'], params['styles'], \
-                   params['transparent']))
+        proj = params['proj_name'] + "=" + GetSRSParamVal(params['srs'])
+        self.url = params['url'] + ("SERVICE=WMS&REQUEST=GetMap&VERSION=%s&LAYERS=%s&WIDTH=%s&HEIGHT=%s&STYLES=%s&TRANSPARENT=%s" % (
+            params['wms_version'], params['layers'], tile_size['cols'], tile_size['rows'], params['styles'], params['transparent']))
 
         if params['bgcolor']:
-            self.url +=  "&BGCOLOR=" + params['bgcolor']
+            self.url += "&BGCOLOR=" + params['bgcolor']
 
-        self.url += "&" +proj+ "&" + "FORMAT=" + params['format']
+        self.url += "&" + proj + "&" + "FORMAT=" + params['format']
 
         self.bbox = bbox
         self.proj_srs = proj_srs
@@ -358,33 +416,35 @@ class WMSRequestMgr(BaseRequestMgr):
 
         if params['urlparams'] != "":
             self.url += "&" + params['urlparams']
-        
+
         cols = int(region['cols'])
         rows = int(region['rows'])
-        
-        # computes parameters of tiles 
-        self.num_tiles_x = cols / self.tile_cols 
+
+        # computes parameters of tiles
+        self.num_tiles_x = cols / self.tile_cols
         self.last_tile_x_size = cols % self.tile_cols
-        self.tile_length_x =  float(self.tile_cols) / float(cols) * (self.bbox['maxx'] - self.bbox['minx']) 
-        
+        self.tile_length_x = float(
+            self.tile_cols) / float(cols) * (self.bbox['maxx'] - self.bbox['minx'])
+
         self.last_tile_x = False
         if self.last_tile_x_size != 0:
             self.last_tile_x = True
             self.num_tiles_x = self.num_tiles_x + 1
-        
-        self.num_tiles_y = rows / self.tile_rows 
+
+        self.num_tiles_y = rows / self.tile_rows
         self.last_tile_y_size = rows % self.tile_rows
-        self.tile_length_y =  float(self.tile_rows) / float(rows) * (self.bbox['maxy'] - self.bbox['miny']) 
-        
+        self.tile_length_y = float(
+            self.tile_rows) / float(rows) * (self.bbox['maxy'] - self.bbox['miny'])
+
         self.last_tile_y = False
         if self.last_tile_y_size != 0:
             self.last_tile_y = True
             self.num_tiles_y = self.num_tiles_y + 1
-        
+
         self.tile_bbox = dict(self.bbox)
-        self.tile_bbox['maxx'] = self.bbox['minx']  + self.tile_length_x
+        self.tile_bbox['maxx'] = self.bbox['minx'] + self.tile_length_x
 
-        self.i_x = 0 
+        self.i_x = 0
         self.i_y = 0
 
         self.map_region = self.bbox
@@ -404,14 +464,14 @@ class WMSRequestMgr(BaseRequestMgr):
 
         if self.i_x >= self.num_tiles_x:
             return None
-            
+
         tile_ref['sizeX'] = self.tile_cols
         if self.i_x == self.num_tiles_x - 1 and self.last_tile_x:
             tile_ref['sizeX'] = self.last_tile_x_size
-         
+
         # set bbox for tile (N, S)
         if self.i_y != 0:
-            self.tile_bbox['miny'] -= self.tile_length_y 
+            self.tile_bbox['miny'] -= self.tile_length_y
             self.tile_bbox['maxy'] -= self.tile_length_y
         else:
             self.tile_bbox['maxy'] = self.bbox['maxy']
@@ -419,10 +479,14 @@ class WMSRequestMgr(BaseRequestMgr):
 
         tile_ref['sizeY'] = self.tile_rows
         if self.i_y == self.num_tiles_y - 1 and self.last_tile_y:
-            tile_ref['sizeY'] = self.last_tile_y_size 
+            tile_ref['sizeY'] = self.last_tile_y_size
 
         query_bbox = self._getQueryBbox(self.tile_bbox, self.proj_srs, self.srs_param, self.version)
-        query_url = self.url + "&" + "BBOX=%s,%s,%s,%s" % ( query_bbox['minx'],  query_bbox['miny'],  query_bbox['maxx'],  query_bbox['maxy'])
+        query_url = self.url + "&" + "BBOX=%s,%s,%s,%s" % (
+            query_bbox['minx'],
+            query_bbox['miny'],
+            query_bbox['maxx'],
+            query_bbox['maxy'])
 
         tile_ref['t_cols_offset'] = int(self.tile_cols * self.i_x)
         tile_ref['t_rows_offset'] = int(self.tile_rows * self.i_y)
@@ -430,18 +494,18 @@ class WMSRequestMgr(BaseRequestMgr):
         if self.i_y >= self.num_tiles_y - 1:
             self.i_y = 0
             self.i_x += 1
-            # set bbox for next tile (E, W)      
-            self.tile_bbox['maxx'] += self.tile_length_x 
-            self.tile_bbox['minx'] += self.tile_length_x 
+            # set bbox for next tile (E, W)
+            self.tile_bbox['maxx'] += self.tile_length_x
+            self.tile_bbox['minx'] += self.tile_length_x
         else:
             self.i_y += 1
 
         return query_url, tile_ref
 
     def _getQueryBbox(self, bbox, proj, srs_param, version):
-        """!Creates query bbox (used in request URL) 
+        """!Creates query bbox (used in request URL)
 
-        Mostly bbox is not modified but if WMS standard is 1.3.0 and 
+        Mostly bbox is not modified but if WMS standard is 1.3.0 and
         projection is geographic, the bbox x and y are in most cases flipped.
         """
         # CRS:84 and CRS:83 are exception (CRS:83 and CRS:27 need to be tested)
@@ -453,14 +517,14 @@ class WMSRequestMgr(BaseRequestMgr):
         return bbox
 
     def _flipBbox(self, bbox):
-        """ 
+        """
         Flips bbox values between this keys:
         maxy -> maxx
         maxx -> maxy
         miny -> minx
         minx -> miny
         @return copy of bbox with flipped coordinates
-        """  
+        """
 
         temp_bbox = dict(bbox)
         new_bbox = {}
@@ -471,8 +535,10 @@ class WMSRequestMgr(BaseRequestMgr):
 
         return new_bbox
 
+
 class WMTSRequestMgr(BaseRequestMgr):
-    def __init__(self, params, bbox, region, proj_srs, cap_file = None):
+
+    def __init__(self, params, bbox, region, proj_srs, cap_file=None):
         """!Initializes data needed for iteration through tiles.
         """
 
@@ -494,15 +560,17 @@ class WMTSRequestMgr(BaseRequestMgr):
         root = cap_tree.getroot()
 
         # get layer tile matrix sets with required projection
-        mat_sets = self._getMatSets(root, params['layers'], params['srs'])  #[[TileMatrixSet, TileMatrixSetLink], ....]
+        # [[TileMatrixSet, TileMatrixSetLink], ....]
+        mat_sets = self._getMatSets(root, params['layers'], params['srs'])
 
         # TODO: what if more tile matrix sets have required srs (returned more than 1)?
         mat_set = mat_sets[0][0]
         mat_set_link = mat_sets[0][1]
         params['tile_matrix_set'] = mat_set.find(self.xml_ns.NsOws('Identifier')).text
 
-        # find tile matrix with resolution closest and smaller to wanted resolution 
-        tile_mat  = self._findTileMats(mat_set.findall(self.xml_ns.NsWmts('TileMatrix')), region, bbox)
+        # find tile matrix with resolution closest and smaller to wanted resolution
+        tile_mat = self._findTileMats(mat_set.findall(
+            self.xml_ns.NsWmts('TileMatrix')), region, bbox)
 
         # get extend of data available on server expressed in max/min rows and cols of tile matrix
         mat_num_bbox = self._getMatSize(tile_mat, mat_set_link)
@@ -526,8 +594,8 @@ class WMTSRequestMgr(BaseRequestMgr):
         for layer in layers:
             layer_id = layer.find(self.xml_ns.NsOws('Identifier')).text
             if layer_id == layer_name:
-                ch_layer = layer 
-                break  
+                ch_layer = layer
+                break
 
         if ch_layer is None:
             grass.fatal(_("Layer '%s' was not found in capabilities file") % layer_name)
@@ -537,10 +605,10 @@ class WMTSRequestMgr(BaseRequestMgr):
         suitable_mat_sets = []
         tileMatrixSets = contents.findall(self.xml_ns.NsWmts('TileMatrixSet'))
 
-        for link in  mat_set_links:
+        for link in mat_set_links:
             mat_set_link_id = link.find(self.xml_ns.NsWmts('TileMatrixSet')).text
             for mat_set in tileMatrixSets:
-                mat_set_id = mat_set.find(self.xml_ns.NsOws('Identifier')).text 
+                mat_set_id = mat_set.find(self.xml_ns.NsOws('Identifier')).text
                 if mat_set_id != mat_set_link_id:
                     continue
                 mat_set_srs = self._getMatSetSrs(mat_set)
@@ -548,9 +616,11 @@ class WMTSRequestMgr(BaseRequestMgr):
                     suitable_mat_sets.append([mat_set, link])
 
         if not suitable_mat_sets:
-            grass.fatal(_("Layer '%s' is not available with %s code.") % (layer_name,  "EPSG:" + str(srs)))
+            grass.fatal(
+                _("Layer '%s' is not available with %s code.") %
+                (layer_name, "EPSG:" + str(srs)))
 
-        return suitable_mat_sets # [[TileMatrixSet, TileMatrixSetLink], ....]
+        return suitable_mat_sets  # [[TileMatrixSet, TileMatrixSetLink], ....]
 
     def _getMatSetSrs(self, mat_set):
 
@@ -558,11 +628,13 @@ class WMTSRequestMgr(BaseRequestMgr):
 
     def _findTileMats(self, tile_mats, region, bbox):
         """!Find best tile matrix set for requested resolution.
-        """        
+        """
         scale_dens = []
 
-        scale_dens.append((bbox['maxy'] - bbox['miny']) / region['rows'] * self._getMetersPerUnit()  / self.pixel_size)
-        scale_dens.append((bbox['maxx'] - bbox['minx']) / region['cols'] * self._getMetersPerUnit() / self.pixel_size)
+        scale_dens.append((bbox['maxy'] - bbox['miny']) / region['rows']
+                          * self._getMetersPerUnit() / self.pixel_size)
+        scale_dens.append((bbox['maxx'] - bbox['minx']) / region['cols']
+                          * self._getMetersPerUnit() / self.pixel_size)
 
         scale_den = min(scale_dens)
 
@@ -574,11 +646,11 @@ class WMTSRequestMgr(BaseRequestMgr):
                 best_t_mat = t_mat
                 first = False
                 continue
-                
+
             best_diff = best_scale_den - scale_den
             mat_diff = mat_scale_den - scale_den
             if (best_diff < mat_diff  and  mat_diff < 0) or \
-               (best_diff > mat_diff  and  best_diff > 0):
+               (best_diff > mat_diff and best_diff > 0):
                 best_t_mat = t_mat
                 best_scale_den = mat_scale_den
 
@@ -586,7 +658,7 @@ class WMTSRequestMgr(BaseRequestMgr):
 
     def _getMetersPerUnit(self):
         """!Get coefficient which allows converting units of request projection into meters.
-        """  
+        """
         if self.meters_per_unit:
             return self.meters_per_unit
 
@@ -599,16 +671,16 @@ class WMTSRequestMgr(BaseRequestMgr):
                     break
             equator_perim = 2 * pi * a
             # meters per degree on equator
-            self.meters_per_unit = equator_perim / 360 
+            self.meters_per_unit = equator_perim / 360
 
         # other units
         elif '+to_meter' in self.proj_srs:
             proj_params = self.proj_srs.split(' ')
             for param in proj_params:
                 if '+to_meter' in param:
-                    self.meters_per_unit = 1/float(param.split('=')[1])
+                    self.meters_per_unit = 1 / float(param.split('=')[1])
                     break
-        # coordinate system in meters        
+        # coordinate system in meters
         else:
             self.meters_per_unit = 1
 
@@ -637,7 +709,7 @@ class WMTSRequestMgr(BaseRequestMgr):
             limit_id = limit_tile_mat.text
 
             if limit_id == tile_mat_id:
-                for i in [['min_row', 'MinTileRow'], ['max_row', 'MaxTileRow'], \
+                for i in [['min_row', 'MinTileRow'], ['max_row', 'MaxTileRow'],
                           ['min_col', 'MinTileCol'], ['max_col', 'MaxTileCol']]:
                     i_tag = limit.find(self.xml_ns.NsWmts(i[1]))
 
@@ -651,7 +723,7 @@ class WMTSRequestMgr(BaseRequestMgr):
 
     def _computeRequestData(self, tile_mat, params, bbox, mat_num_bbox, mat_set_srs):
         """!Initialize data needed for iteration through tiles.
-        """  
+        """
         scale_den = float(tile_mat.find(self.xml_ns.NsWmts('ScaleDenominator')).text)
 
         pixel_span = scale_den * self.pixel_size / self._getMetersPerUnit()
@@ -662,9 +734,10 @@ class WMTSRequestMgr(BaseRequestMgr):
         tl_corner['minx'] = float(tl_str[0])
         tl_corner['maxy'] = float(tl_str[1])
 
-        #TODO do it more generally WMS cap parser may use it in future(not needed now)???
-        s = Srs(mat_set_srs) #NOTE not used params['srs'], it is just number, encoding needed
-        # TODO needs to be tested, tried only on http://www.landesvermessung.sachsen.de/geoserver/gwc/service/wmts?:
+        # TODO do it more generally WMS cap parser may use it in future(not needed now)???
+        s = Srs(mat_set_srs)  # NOTE not used params['srs'], it is just number, encoding needed
+        # TODO needs to be tested, tried only on
+        # http://www.landesvermessung.sachsen.de/geoserver/gwc/service/wmts?:
         if s.getcode() == 'EPSG:4326' and s.encoding in ('uri', 'urn'):
             grass.warning('switch')
             (tl_corner['minx'], tl_corner['maxy']) = (tl_corner['maxy'], tl_corner['minx'])
@@ -676,37 +749,42 @@ class WMTSRequestMgr(BaseRequestMgr):
 
         self.tile_size['x'] = int(tile_mat.find(self.xml_ns.NsWmts('TileWidth')).text)
         tile_span['x'] = pixel_span * self.tile_size['x']
-        
+
         self.tile_size['y'] = int(tile_mat.find(self.xml_ns.NsWmts('TileHeight')).text)
         tile_span['y'] = pixel_span * self.tile_size['y']
 
-        self.url = params['url'] + ("SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&" \
-                                    "LAYER=%s&STYLE=%s&FORMAT=%s&TILEMATRIXSET=%s&TILEMATRIX=%s" % \
-                                   (params['layers'], params['styles'], params['format'],
-                                    params['tile_matrix_set'], tile_mat.find(self.xml_ns.NsOws('Identifier')).text ))
+        self.url = params['url'] + ("SERVICE=WMTS&REQUEST=GetTile&VERSION=1.0.0&"
+                                    "LAYER=%s&STYLE=%s&FORMAT=%s&TILEMATRIXSET=%s&TILEMATRIX=%s" %
+                                    (params['layers'], params['styles'], params['format'],
+                                     params['tile_matrix_set'], tile_mat.find(self.xml_ns.NsOws('Identifier')).text))
 
-        BaseRequestMgr._computeRequestData(self, bbox, tl_corner, tile_span, self.tile_size, mat_num_bbox)
+        BaseRequestMgr._computeRequestData(
+            self, bbox, tl_corner, tile_span, self.tile_size, mat_num_bbox)
 
     def GetNextTile(self):
         """!Get url for tile request from server and information for merging the tile with other tiles.
         """
         if not self.intersects or self.i_col > self.t_num_bbox['max_col']:
-            return None 
-                
-        query_url = self.url + "&TILECOL=%i&TILEROW=%i" % (int(self.i_col), int(self.i_row)) 
+            return None
+
+        query_url = self.url + "&TILECOL=%i&TILEROW=%i" % (int(self.i_col), int(self.i_row))
 
-        self.tile_ref['t_cols_offset'] = int(self.tile_size['x'] * (self.i_col - self.t_num_bbox['min_col']))
-        self.tile_ref['t_rows_offset'] = int(self.tile_size['y'] * (self.i_row - self.t_num_bbox['min_row']))
+        self.tile_ref['t_cols_offset'] = int(
+            self.tile_size['x'] * (self.i_col - self.t_num_bbox['min_col']))
+        self.tile_ref['t_rows_offset'] = int(
+            self.tile_size['y'] * (self.i_row - self.t_num_bbox['min_row']))
 
         if self.i_row >= self.t_num_bbox['max_row']:
-            self.i_row =  self.t_num_bbox['min_row']
+            self.i_row = self.t_num_bbox['min_row']
             self.i_col += 1
         else:
-            self.i_row += 1 
+            self.i_row += 1
 
         return query_url, self.tile_ref
 
+
 class OnEarthRequestMgr(BaseRequestMgr):
+
     def __init__(self, params, bbox, region, proj_srs, tile_service):
         """!Initializes data needed for iteration through tiles.
         """
@@ -720,7 +798,8 @@ class OnEarthRequestMgr(BaseRequestMgr):
         root = self.cap_tree.getroot()
 
         # parse tile service file and get needed data for making tile requests
-        url, self.tile_span, t_patt_bbox, self.tile_size = self._parseTileService(root, bbox, region, params)
+        url, self.tile_span, t_patt_bbox, self.tile_size = self._parseTileService(
+            root, bbox, region, params)
         self.url = url
         self.url[0] = params['url'] + url[0]
         # initialize data needed for iteration through tiles
@@ -737,7 +816,9 @@ class OnEarthRequestMgr(BaseRequestMgr):
         tiled_patterns = root.find('TiledPatterns')
         tile_groups = self._getAllTiledGroup(tiled_patterns)
         if not tile_groups:
-            grass.fatal(_("Unable to parse tile service file. \n No tag '%s' was found.") % 'TiledGroup')
+            grass.fatal(
+                _("Unable to parse tile service file. \n No tag '%s' was found.") %
+                'TiledGroup')
 
         req_group = None
         for group in tile_groups:
@@ -765,7 +846,7 @@ class OnEarthRequestMgr(BaseRequestMgr):
         tile_span = {}
         tile_span['x'] = abs(t_bbox[0] - t_bbox[2])
         tile_span['y'] = abs(t_bbox[1] - t_bbox[3])
-                   
+
         tile_pattern_bbox = req_group.find('LatLonBoundingBox')
 
         t_patt_bbox = {}
@@ -778,7 +859,7 @@ class OnEarthRequestMgr(BaseRequestMgr):
 
         return url, tile_span, t_patt_bbox, tile_size
 
-    def _getAllTiledGroup(self, parent, tiled_groups = None):
+    def _getAllTiledGroup(self, parent, tiled_groups=None):
         """!Get all 'TileGroup' elements
         """
         if not tiled_groups:
@@ -806,7 +887,8 @@ class OnEarthRequestMgr(BaseRequestMgr):
         t_res = {}
         best_patt = None
         for pattern in group_t_patts:
-            url, t_bbox, width, height = self.cap_tree.gettilepatternurldata(pattern.text.split('\n')[0])
+            url, t_bbox, width, height = self.cap_tree.gettilepatternurldata(pattern.text.split(
+                '\n')[0])
 
             t_res['x'] = abs(t_bbox[0] - t_bbox[2]) / width
             t_res['y'] = abs(t_bbox[1] - t_bbox[3]) / height
@@ -816,12 +898,12 @@ class OnEarthRequestMgr(BaseRequestMgr):
                 best_patt = pattern
                 first = False
                 continue
-            
+
             best_diff = best_res - res[comp_res]
             tile_diff = t_res[comp_res] - res[comp_res]
 
             if (best_diff < tile_diff  and  tile_diff < 0) or \
-               (best_diff > tile_diff  and  best_diff > 0):
+               (best_diff > tile_diff and best_diff > 0):
 
                 best_res = t_res[comp_res]
                 best_patt = pattern
@@ -829,14 +911,14 @@ class OnEarthRequestMgr(BaseRequestMgr):
         return best_patt
 
     def _insTimeToTilePatternUrl(self, url_params, urls):
-        """!Time can be variable in some urls in OnEarth TMS. 
+        """!Time can be variable in some urls in OnEarth TMS.
             Insert requested time from 'urlparams' into the variable if any url of urls contains the variable.
         """
         url = None
         not_sup_params = []
         url_params_list = url_params.split('&')
 
-        for param in  url_params_list:
+        for param in url_params_list:
             try:
                 k, v = param.split('=')
             except ValueError:
@@ -848,63 +930,75 @@ class OnEarthRequestMgr(BaseRequestMgr):
                 continue
 
             has_time_var = False
-            for url in urls: 
+            for url in urls:
                 url_p_idxs = self.geturlparamidxs(url, k)
                 if not url_p_idxs:
                     continue
 
-                url_p_value = url[url_p_idxs[0] + len(k + '=') : url_p_idxs[1]]
+                url_p_value = url[url_p_idxs[0] + len(k + '='): url_p_idxs[1]]
 
                 if url_p_value[:2] == '${'  and \
                    url_p_value[len(url_p_value) - 1] == '}':
-                   url = url[:url_p_idxs[0]] + param + url[url_p_idxs[1]:]   
-                   has_time_var = True
-                   break
+                    url = url[:url_p_idxs[0]] + param + url[url_p_idxs[1]:]
+                    has_time_var = True
+                    break
 
             if not has_time_var:
-                grass.warning(_("Parameter '%s' in '%s' is not variable in tile pattern url.") % (k, 'urlparams'))
+                grass.warning(
+                    _("Parameter '%s' in '%s' is not variable in tile pattern url.") %
+                    (k, 'urlparams'))
 
         if not_sup_params:
-                grass.warning(_("%s driver supports only '%s' parameter in '%s'. Other parameters are ignored.") % \
-                               ('OnEarth GRASS', 'time', 'urlparams'))
+            grass.warning(
+                _("%s driver supports only '%s' parameter in '%s'. Other parameters are ignored.") %
+                ('OnEarth GRASS', 'time', 'urlparams'))
 
         return url
 
     def _computeRequestData(self, bbox, t_patt_bbox, tile_span, tile_size):
         """!Initialize data needed for iteration through tiles.
-        """  
+        """
         epsilon = 1e-15
         mat_num_bbox = {}
 
         mat_num_bbox['min_row'] = mat_num_bbox['min_col'] = 0
-        mat_num_bbox['max_row'] = floor((t_patt_bbox['maxy'] - t_patt_bbox['miny'])/ tile_span['y'] + epsilon)  
-        mat_num_bbox['max_col'] = floor((t_patt_bbox['maxx'] - t_patt_bbox['minx'])/ tile_span['x'] + epsilon)  
-
-        BaseRequestMgr._computeRequestData(self, bbox, t_patt_bbox, self.tile_span, self.tile_size, mat_num_bbox)
-
+        mat_num_bbox['max_row'] = floor(
+            (t_patt_bbox['maxy'] - t_patt_bbox['miny']) / tile_span['y'] + epsilon)
+        mat_num_bbox['max_col'] = floor(
+            (t_patt_bbox['maxx'] - t_patt_bbox['minx']) / tile_span['x'] + epsilon)
+
+        BaseRequestMgr._computeRequestData(
+            self,
+            bbox,
+            t_patt_bbox,
+            self.tile_span,
+            self.tile_size,
+            mat_num_bbox)
 
     def GetNextTile(self):
         """!Get url for tile request from server and information for merging the tile with other tiles
         """
         if self.i_col > self.t_num_bbox['max_col']:
-            return None 
+            return None
 
         x_offset = self.tile_span['x'] * self.i_col
         y_offset = self.tile_span['y'] * self.i_row
 
-        query_url = self.url[0] + "&" + "bbox=%s,%s,%s,%s" % (float(self.query_bbox['minx'] + x_offset),  
-                                                              float(self.query_bbox['miny'] - y_offset),  
-                                                              float(self.query_bbox['maxx'] + x_offset),  
-                                                              float(self.query_bbox['maxy'] - y_offset)) + self.url[1]
+        query_url = self.url[0] + "&" + "bbox=%s,%s,%s,%s" % (
+            float(self.query_bbox['minx'] + x_offset),
+            float(self.query_bbox['miny'] - y_offset),
+            float(self.query_bbox['maxx'] + x_offset),
+            float(self.query_bbox['maxy'] - y_offset)) + self.url[1]
 
-        self.tile_ref['t_cols_offset'] = int(self.tile_size['y'] * (self.i_col - self.t_num_bbox['min_col']))
-        self.tile_ref['t_rows_offset'] = int(self.tile_size['x'] * (self.i_row - self.t_num_bbox['min_row']))
+        self.tile_ref['t_cols_offset'] = int(
+            self.tile_size['y'] * (self.i_col - self.t_num_bbox['min_col']))
+        self.tile_ref['t_rows_offset'] = int(
+            self.tile_size['x'] * (self.i_row - self.t_num_bbox['min_row']))
 
         if self.i_row >= self.t_num_bbox['max_row']:
-            self.i_row =  self.t_num_bbox['min_row']
+            self.i_row = self.t_num_bbox['min_row']
             self.i_col += 1
         else:
-            self.i_row += 1 
+            self.i_row += 1
 
         return query_url, self.tile_ref
-
diff --git a/scripts/r.in.wms/wms_gdal_drv.py b/scripts/r.in.wms/wms_gdal_drv.py
index 081c449..4951104 100644
--- a/scripts/r.in.wms/wms_gdal_drv.py
+++ b/scripts/r.in.wms/wms_gdal_drv.py
@@ -1,5 +1,5 @@
 """!
- at brief GDAL WMS driver. 
+ at brief GDAL WMS driver.
 
 List of classes:
  - wms_drv::NullDevice
@@ -14,7 +14,7 @@ This program is free software under the GNU General Public License
 """
 
 import os
-import grass.script as grass 
+import grass.script as grass
 
 try:
     from osgeo import gdal
@@ -26,129 +26,133 @@ import xml.etree.ElementTree as etree
 
 from wms_base import WMSBase, GetSRSParamVal
 
+
 class NullDevice():
+
     def write(self, s):
         pass
 
+
 class WMSGdalDrv(WMSBase):
+
     def _createXML(self):
         """!Create XML for GDAL WMS driver
-        
+
         @return path to XML file
         """
         self._debug("_createXML", "started")
-        
+
         gdal_wms = etree.Element("GDAL_WMS")
         service = etree.SubElement(gdal_wms, "Service")
         name = etree.Element("name")
-        service.set("name","WMS")
-        
+        service.set("name", "WMS")
+
         version = etree.SubElement(service, "Version")
-        version.text =self.params['wms_version']
-        
+        version.text = self.params['wms_version']
+
         server_url = etree.SubElement(service, "ServerUrl")
-        server_url.text =self.params['url']
-        
-        srs = etree.SubElement(service, self.params['proj_name'])   
+        server_url.text = self.params['url']
+
+        srs = etree.SubElement(service, self.params['proj_name'])
         srs.text = GetSRSParamVal(self.params['srs'])
-        
+
         image_format = etree.SubElement(service, "ImageFormat")
         image_format.text = self.params['format']
-        
+
         image_format = etree.SubElement(service, "Transparent")
         image_format.text = self.params['transparent']
-        
+
         layers = etree.SubElement(service, "Layers")
         layers.text = self.params['layers']
-        
+
         styles = etree.SubElement(service, "Styles")
         styles.text = self.params['styles']
-        
+
         data_window = etree.SubElement(gdal_wms, "DataWindow")
 
         upper_left_x = etree.SubElement(data_window, "UpperLeftX")
-        upper_left_x.text = str(self.bbox['minx']) 
-        
+        upper_left_x.text = str(self.bbox['minx'])
+
         upper_left_y = etree.SubElement(data_window, "UpperLeftY")
-        upper_left_y.text = str(self.bbox['maxy']) 
-        
+        upper_left_y.text = str(self.bbox['maxy'])
+
         lower_right_x = etree.SubElement(data_window, "LowerRightX")
-        lower_right_x.text = str(self.bbox['maxx']) 
-        
+        lower_right_x.text = str(self.bbox['maxx'])
+
         lower_right_y = etree.SubElement(data_window, "LowerRightY")
         lower_right_y.text = str(self.bbox['miny'])
-        
+
         size_x = etree.SubElement(data_window, "SizeX")
-        size_x.text = str(self.region['cols']) 
-        
+        size_x.text = str(self.region['cols'])
+
         size_y = etree.SubElement(data_window, "SizeY")
-        size_y.text = str(self.region['rows']) 
-        
+        size_y.text = str(self.region['rows'])
+
         # RGB + alpha
         self.temp_map_bands_num = 4
         block_size_x = etree.SubElement(gdal_wms, "BandsCount")
         block_size_x.text = str(self.temp_map_bands_num)
-        
+
         block_size_x = etree.SubElement(gdal_wms, "BlockSizeX")
-        block_size_x.text = str(self.tile_size['cols']) 
-        
+        block_size_x.text = str(self.tile_size['cols'])
+
         block_size_y = etree.SubElement(gdal_wms, "BlockSizeY")
         block_size_y.text = str(self.tile_size['rows'])
-        
+
         xml_file = self._tempfile()
-        
+
         etree.ElementTree(gdal_wms).write(xml_file)
-        
+
         self._debug("_createXML", "finished -> %s" % xml_file)
-        
+
         return xml_file
-    
+
     def _download(self):
         """!Downloads data from WMS server using GDAL WMS driver
-        
+
         @return temp_map with stored downloaded data
         """
         grass.message("Downloading data from WMS server...")
 
-        # GDAL WMS driver does not flip geographic coordinates 
+        # GDAL WMS driver does not flip geographic coordinates
         # according to WMS standard 1.3.0.
-        if ("+proj=latlong" in self.proj_srs or \
-            "+proj=longlat" in self.proj_srs) and \
-            self.params['wms_version'] == "1.3.0":
+        if ("+proj=latlong" in self.proj_srs or
+                "+proj=longlat" in self.proj_srs) and \
+                self.params['wms_version'] == "1.3.0":
             grass.warning(_("If module will not be able to fetch the data in this " +
                             "geographic projection, \n try 'WMS_GRASS' driver or use WMS version 1.1.1."))
 
         self._debug("_download", "started")
-        
-        temp_map = self._tempfile()        
+
+        temp_map = self._tempfile()
 
         xml_file = self._createXML()
         wms_dataset = gdal.Open(xml_file, gdal.GA_ReadOnly)
         grass.try_remove(xml_file)
         if wms_dataset is None:
             grass.fatal(_("Unable to open GDAL WMS driver"))
-        
+
         self._debug("_download", "GDAL dataset created")
-        
+
         driver = gdal.GetDriverByName(self.gdal_drv_format)
         if driver is None:
             grass.fatal(_("Unable to find %s driver" % format))
-        
+
         metadata = driver.GetMetadata()
-        if not metadata.has_key(gdal.DCAP_CREATECOPY) or \
+        if gdal.DCAP_CREATECOPY not in metadata or \
            metadata[gdal.DCAP_CREATECOPY] == 'NO':
             grass.fatal(_('Driver %s supports CreateCopy() method.') % self.gdal_drv_name)
-        
+
         self._debug("_download", "calling GDAL CreateCopy...")
-        
+
         temp_map_dataset = driver.CreateCopy(temp_map, wms_dataset, 0)
-        
+
         if temp_map_dataset is None:
             grass.fatal(_("Incorrect WMS query"))
-        
-        temp_map_dataset  = None
+
+        temp_map_dataset = None
         wms_dataset = None
-        
+
         self._debug("_download", "finished")
-        
+
         return temp_map
diff --git a/scripts/r.mask/r.mask.html b/scripts/r.mask/r.mask.html
index fdd38a9..ff75bed 100644
--- a/scripts/r.mask/r.mask.html
+++ b/scripts/r.mask/r.mask.html
@@ -102,4 +102,4 @@ d.rast geology_30m
 Michael Barton, Arizona State University
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/r.mask/r.mask.py b/scripts/r.mask/r.mask.py
index d3e1769..5e0ea71 100755
--- a/scripts/r.mask/r.mask.py
+++ b/scripts/r.mask/r.mask.py
@@ -75,11 +75,12 @@ from grass.exceptions import CalledModuleError
 
 def cleanup():
     if tmp:
-        grass.run_command('g.remove', flags = 'f', type = 'raster',
-                          name = tmp, quiet = True)
+        grass.run_command('g.remove', flags='f', type='raster',
+                          name=tmp, quiet=True)
     if tmp_hull:
-        grass.run_command('g.remove', flags = 'f', type = 'vector',
-                          name = tmp_hull, quiet = True)
+        grass.run_command('g.remove', flags='f', type='vector',
+                          name=tmp_hull, quiet=True)
+
 
 def main():
     raster = options['raster']
@@ -95,13 +96,13 @@ def main():
         grass.fatal(_("Either parameter <raster> ot parameter <vector> is required"))
 
     mapset = grass.gisenv()['MAPSET']
-    exists = bool(grass.find_file('MASK', element = 'cell', mapset = mapset)['file'])
+    exists = bool(grass.find_file('MASK', element='cell', mapset=mapset)['file'])
 
     if remove:
         # -> remove
         if exists:
-            grass.run_command('g.remove', flags = 'f', quiet = True,
-                              type = 'raster', name = 'MASK')
+            grass.run_command('g.remove', flags='f', quiet=True,
+                              type='raster', name='MASK')
             grass.message(_("Raster MASK removed"))
         else:
             grass.fatal(_("No existing MASK to remove"))
@@ -112,9 +113,9 @@ def main():
                 grass.fatal(_("MASK already found in current mapset. Delete first or overwrite."))
             else:
                 grass.warning(_("MASK already exists and will be overwritten"))
-                grass.run_command('g.remove', flags = 'f', quiet = True,
-                                  type = 'raster', name = 'MASK')
-        
+                grass.run_command('g.remove', flags='f', quiet=True,
+                                  type='raster', name='MASK')
+
         if raster:
             # check if input raster exists
             if not grass.find_file(raster)['file']:
@@ -125,7 +126,12 @@ def main():
                     grass.fatal(_("The raster map <%s> must be integer (CELL type) "
                                   " in order to use the 'maskcats' parameter") % raster)
 
-            p = grass.feed_command('r.reclass', input = raster, output = 'MASK', overwrite = True, rules = '-')
+            p = grass.feed_command(
+                'r.reclass',
+                input=raster,
+                output='MASK',
+                overwrite=True,
+                rules='-')
             p.stdin.write("%s = 1" % maskcats)
             p.stdin.close()
             p.wait()
@@ -133,13 +139,13 @@ def main():
             vector_name = grass.find_file(vector, 'vector')['fullname']
             if not vector_name:
                 grass.fatal(_("Vector map <%s> not found") % vector)
-            
+
             # parser bug?
             if len(cats) == 0:
                 cats = None
             if len(where) == 0:
                 where = None
-            
+
             if grass.vector_info_topo(vector_name)['areas'] < 1:
                 grass.warning(_("No area found in vector map <%s>. "
                                 "Creating a convex hull for MASK.") % vector_name)
@@ -152,23 +158,25 @@ def main():
                                       input=vector_name, output=tmp_hull,
                                       layer=layer, cats=cats, where=where)
                 except CalledModuleError:
-                    grass.fatal(_("Unable to create a convex hull for vector map <%s>") % vector_name)
+                    grass.fatal(
+                        _("Unable to create a convex hull for vector map <%s>") %
+                        vector_name)
             else:
                 to_rast_input = vector_name
-            
+
             env = os.environ.copy()
             if grass.verbosity() > 1:
                 env['GRASS_VERBOSE'] = '1'
-            grass.run_command('v.to.rast', input = to_rast_input, layer = layer,
-                              output = 'MASK', use = 'val', val = '1',
-                              type = 'area', cats = cats, where = where, env = env)
-        
+            grass.run_command('v.to.rast', input=to_rast_input, layer=layer,
+                              output='MASK', use='val', val='1',
+                              type='area', cats=cats, where=where, env=env)
+
         if invert:
             global tmp
             tmp = "r_mask_%d" % os.getpid()
-            grass.run_command('g.rename', raster = ('MASK', tmp), quiet = True)
+            grass.run_command('g.rename', raster=('MASK', tmp), quiet=True)
             grass.message(_("Creating inverted raster MASK..."))
-            grass.mapcalc("MASK = if(isnull($tmp), 1, null())", tmp = tmp)
+            grass.mapcalc("MASK = if(isnull($tmp), 1, null())", tmp=tmp)
             grass.verbose(_("Inverted raster MASK created"))
         else:
             grass.verbose(_("Raster MASK created"))
diff --git a/scripts/r.out.xyz/r.out.xyz.html b/scripts/r.out.xyz/r.out.xyz.html
index f86a0e3..9fe1392 100644
--- a/scripts/r.out.xyz/r.out.xyz.html
+++ b/scripts/r.out.xyz/r.out.xyz.html
@@ -67,4 +67,4 @@ M. Hamish Bowman<br>
 <i>Dept. Marine Science<br>
 Otago University, New Zealand</i>
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/r.out.xyz/r.out.xyz.py b/scripts/r.out.xyz/r.out.xyz.py
index 685a72c..20cba9a 100755
--- a/scripts/r.out.xyz/r.out.xyz.py
+++ b/scripts/r.out.xyz/r.out.xyz.py
@@ -37,6 +37,7 @@ import sys
 from grass.script import core as grass
 from grass.exceptions import CalledModuleError
 
+
 def main():
     # if no output filename, output to stdout
     output = options['output']
diff --git a/scripts/r.pack/r.pack.html b/scripts/r.pack/r.pack.html
index 424bc30..4672892 100644
--- a/scripts/r.pack/r.pack.html
+++ b/scripts/r.pack/r.pack.html
@@ -49,4 +49,4 @@ Original Bash script written by Hamish Bowman, Otago University, New Zealand
 Converted to Python and updated for GRASS 7 by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-04-14 09:01:56 +0200 (Thu, 14 Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-14 09:01:22 +0200 (Thu, 14 Apr 2016) $</i>
diff --git a/scripts/r.pack/r.pack.py b/scripts/r.pack/r.pack.py
index d82706b..350b0fe 100644
--- a/scripts/r.pack/r.pack.py
+++ b/scripts/r.pack/r.pack.py
@@ -40,9 +40,11 @@ import tarfile
 from grass.script.utils import try_rmdir, try_remove
 from grass.script import core as grass
 
+
 def cleanup():
     try_rmdir(tmp)
 
+
 def main():
     infile = options['input']
     compression_off = flags['c']
@@ -54,30 +56,30 @@ def main():
         outfile_path, outfile_base = os.path.split(os.path.abspath(options['output']))
     else:
         outfile_path, outfile_base = os.path.split(os.path.abspath(infile + ".pack"))
-    
+
     outfile = os.path.join(outfile_path, outfile_base)
-    
+
     global tmp
     tmp = grass.tempdir()
     tmp_dir = os.path.join(tmp, infile)
     os.mkdir(tmp_dir)
     grass.debug('tmp_dir = %s' % tmp_dir)
-    
-    gfile = grass.find_file(name = infile, element = 'cell', mapset = mapset)
+
+    gfile = grass.find_file(name=infile, element='cell', mapset=mapset)
     if not gfile['name']:
         grass.fatal(_("Raster map <%s> not found") % infile)
-    
+
     if os.path.exists(outfile):
         if os.getenv('GRASS_OVERWRITE'):
             grass.warning(_("Pack file <%s> already exists and will be overwritten") % outfile)
             try_remove(outfile)
         else:
             grass.fatal(_("option <output>: <%s> exists.") % outfile)
-    
+
     grass.message(_("Packing <%s> to <%s>...") % (gfile['fullname'], outfile))
     basedir = os.path.sep.join(os.path.normpath(gfile['file']).split(os.path.sep)[:-2])
-    olddir  = os.getcwd()
-    
+    olddir = os.getcwd()
+
     # copy elements
     for element in ['cats', 'cell', 'cellhd', 'colr', 'fcell', 'hist']:
         path = os.path.join(basedir, element, infile)
@@ -85,14 +87,14 @@ def main():
             grass.debug('copying %s' % path)
             shutil.copyfile(path,
                             os.path.join(tmp_dir, element))
-            
+
     if os.path.exists(os.path.join(basedir, 'cell_misc', infile)):
         shutil.copytree(os.path.join(basedir, 'cell_misc', infile),
                         os.path.join(tmp_dir, 'cell_misc'))
-        
+
     if not os.listdir(tmp_dir):
         grass.fatal(_("No raster map components found"))
-                    
+
     # copy projection info
     # (would prefer to use g.proj*, but this way is 5.3 and 5.7 compat)
     gisenv = grass.gisenv()
@@ -101,22 +103,22 @@ def main():
                             'PERMANENT', 'PROJ_' + support)
         if os.path.exists(path):
             shutil.copyfile(path, os.path.join(tmp_dir, 'PROJ_' + support))
-    
+
     # pack it all up
     os.chdir(tmp)
     if compression_off:
-        tar = tarfile.TarFile.open(name = outfile_base, mode = 'w:')
+        tar = tarfile.TarFile.open(name=outfile_base, mode='w:')
     else:
-        tar = tarfile.TarFile.open(name = outfile_base, mode = 'w:gz')
-    tar.add(infile, recursive = True)
+        tar = tarfile.TarFile.open(name=outfile_base, mode='w:gz')
+    tar.add(infile, recursive=True)
     tar.close()
     try:
         shutil.move(outfile_base, outfile)
     except shutil.Error as e:
         grass.fatal(e)
-        
+
     os.chdir(olddir)
-    
+
     grass.verbose(_("Raster map saved to '%s'" % outfile))
 
 
diff --git a/scripts/r.plane/r.plane.py b/scripts/r.plane/r.plane.py
index f490259..5cfc698 100755
--- a/scripts/r.plane/r.plane.py
+++ b/scripts/r.plane/r.plane.py
@@ -59,38 +59,37 @@
 #%end
 #%option
 #% key: type
-#% type: string 
+#% type: string
 #% options: CELL,FCELL,DCELL
 #% description: Type of raster map to be created
 #% answer: FCELL
 #%end
 
-import sys
-import os
 import math
 import string
-import grass.script as grass
+import grass.script as gscript
+
 
 def main():
     name = options['output']
     type = options['type']
     dip = float(options['dip'])
-    az  = float(options['azimuth'])
-    ea  = float(options['easting'])
-    no  = float(options['northing'])
-    el  = float(options['elevation'])
+    az = float(options['azimuth'])
+    ea = float(options['easting'])
+    no = float(options['northing'])
+    el = float(options['elevation'])
 
-    reg = grass.region()
+    # reg = gscript.region()
 
     ### test input values ###
     if abs(dip) >= 90:
-	grass.fatal(_("dip must be between -90 and 90."))
+        gscript.fatal(_("dip must be between -90 and 90."))
 
     if az < 0 or az >= 360:
-	grass.fatal(_("azimuth must be between 0 and 360"))
+        gscript.fatal(_("azimuth must be between 0 and 360"))
 
-    ### now the actual algorithm
-    az_r  = math.radians(-az)
+    # now the actual algorithm
+    az_r = math.radians(-az)
     sinaz = math.sin(az_r)
     cosaz = math.cos(az_r)
 
@@ -102,27 +101,28 @@ def main():
     kz = el - ea * sinaz * tandip - no * cosaz * tandip
 
     if type == "CELL":
-	round = "round"
-	dtype = "int"
+        round = "round"
+        dtype = "int"
     elif type == "FCELL":
-	round = ""
-	dtype = "float"
+        round = ""
+        dtype = "float"
     else:
-	round = ""
-	dtype = "double"
+        round = ""
+        dtype = "double"
 
-    grass.mapcalc("$name = $type($round(x() * $kx + y() * $ky + $kz))",
-		  name = name, type = dtype, round = round, kx = kx, ky = ky, kz = kz)
+    gscript.mapcalc("$name = $type($round(x() * $kx + y() * $ky + $kz))",
+                    name=name, type=dtype, round=round, kx=kx, ky=ky, kz=kz)
 
-    grass.run_command('r.support', map = name, history = '')
-    grass.raster_history(name)
+    gscript.run_command('r.support', map=name, history='')
+    gscript.raster_history(name)
 
-    grass.message(_("Done."))
-    t = string.Template("Raster map <$name> generated by r.plane " +
-			"at point $ea E, $no N, elevation $el with dip = $dip degrees and " +
-			"aspect = $az degrees ccw from north.")
-    grass.message(t.substitute(name = name, ea = ea, no = no, el = el, dip = dip, az = az))
+    gscript.message(_("Done."))
+    t = string.Template("Raster map <$name> generated by r.plane "
+                        "at point $ea E, $no N, elevation $el with dip = $dip"
+                        " degrees and aspect = $az degrees ccw from north.")
+    gscript.message(t.substitute(name=name, ea=ea, no=no, el=el, dip=dip,
+                                 az=az))
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     main()
diff --git a/scripts/r.reclass.area/r.reclass.area.html b/scripts/r.reclass.area/r.reclass.area.html
index d6e84e1..c951c18 100644
--- a/scripts/r.reclass.area/r.reclass.area.html
+++ b/scripts/r.reclass.area/r.reclass.area.html
@@ -45,4 +45,4 @@ r.reclass.area input=zipcodes output=zipcodes_minor1000ha \
 NRCS,<br>
 Markus Neteler
 
-<p><i>Last changed: $Date: 2015-11-20 07:01:25 +0100 (Fri, 20 Nov 2015) $</i>
+<p><i>Last changed: $Date: 2015-11-20 07:00:52 +0100 (Fri, 20 Nov 2015) $</i>
diff --git a/scripts/r.reclass.area/r.reclass.area.py b/scripts/r.reclass.area/r.reclass.area.py
index cc9599a..44abc96 100755
--- a/scripts/r.reclass.area/r.reclass.area.py
+++ b/scripts/r.reclass.area/r.reclass.area.py
@@ -204,7 +204,7 @@ def main():
     limit = float(value)
     if mode == 'greater' and method == 'rmarea':
         grass.fatal(_("You have to specify mode='lesser' with method='rmarea'"))
-    
+
     if not grass.find_file(infile)['name']:
         grass.fatal(_("Raster map <%s> not found") % infile)
 
diff --git a/scripts/r.rgb/r.rgb.html b/scripts/r.rgb/r.rgb.html
index 4c652e6..355b90f 100644
--- a/scripts/r.rgb/r.rgb.html
+++ b/scripts/r.rgb/r.rgb.html
@@ -54,4 +54,4 @@ echo " elevation.b" | d.text col=black
 Glynn Clements
 
 <p>
-<i>Last changed: $Date: 2016-03-18 15:09:42 +0100 (Fri, 18 Mar 2016) $</i>
+<i>Last changed: $Date: 2016-03-18 15:09:00 +0100 (Fri, 18 Mar 2016) $</i>
diff --git a/scripts/r.shade/r.shade.html b/scripts/r.shade/r.shade.html
index 03a27c9..f013ea3 100644
--- a/scripts/r.shade/r.shade.html
+++ b/scripts/r.shade/r.shade.html
@@ -106,4 +106,4 @@ Inspired by <em><a href="d.shade.html">d.shade</a></em> and
 manual for <em><a href="r.his.html">r.his</a></em>.
 
 <p>
-<i>Last changed: $Date: 2015-09-02 13:17:37 +0200 (Wed, 02 Sep 2015) $</i>
+<i>Last changed: $Date: 2015-09-02 13:01:34 +0200 (Wed, 02 Sep 2015) $</i>
diff --git a/scripts/r.shade/r.shade.py b/scripts/r.shade/r.shade.py
index 07e2f94..31a224a 100755
--- a/scripts/r.shade/r.shade.py
+++ b/scripts/r.shade/r.shade.py
@@ -111,15 +111,17 @@ def main():
             relief_map = relief_map_tmp
             to_remove.append(relief_map_tmp)
         gcore.run_command('r.his', hue=drape_map, intensity=relief_map,
-                          red=tmp_r, green=tmp_g, blue=tmp_b, **rhis_extra_args)
+                          red=tmp_r, green=tmp_g, blue=tmp_b,
+                          **rhis_extra_args)
         to_remove.extend([tmp_r, tmp_g, tmp_b])
         gcore.run_command('r.composite', red=tmp_r, green=tmp_g,
                           blue=tmp_b, output=output_map)
         remove(to_remove)  # who knows if finally is called when exit
-    except CalledModuleError, error:
+    except CalledModuleError as error:
         remove(to_remove)
         # TODO: implement module name to CalledModuleError
-        gcore.fatal(_("Module %s failed. Check the above error messages.") % error.cmd)
+        gcore.fatal(_("Module %s failed. Check the above error messages.") %
+                    error.cmd)
 
 
 if __name__ == "__main__":
diff --git a/scripts/r.tileset/r.tileset.html b/scripts/r.tileset/r.tileset.html
index 683b8a4..4c8413c 100644
--- a/scripts/r.tileset/r.tileset.html
+++ b/scripts/r.tileset/r.tileset.html
@@ -101,4 +101,4 @@ Cedric Shock<br>
 Updated for GRASS 7 by Martin Landa, CTU in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/scripts/r.tileset/r.tileset.py b/scripts/r.tileset/r.tileset.py
index f1bdbd5..3dad922 100644
--- a/scripts/r.tileset/r.tileset.py
+++ b/scripts/r.tileset/r.tileset.py
@@ -106,13 +106,14 @@
 # An array of points indexed by 0 for "x" and 4 for "y" + by number 0, 1, 2, and 3
 # A reprojector [0] is name of source projection, [1] is name of destination
 # A projection - [0] is proj.4 text, [1] is scale
+from __future__ import print_function
 
 import sys
 import tempfile
 import math
 
 from grass.script.utils import separator
-from grass.script import core as grass
+from grass.script import core as gcore
 from grass.exceptions import CalledModuleError
 
 
@@ -158,7 +159,7 @@ def project(file, source, dest):
     errors = 0
     points = []
     try:
-        ret = grass.read_command('m.proj',
+        ret = gcore.read_command('m.proj',
                                  quiet=True,
                                  flags='d',
                                  proj_in=source['proj'],
@@ -166,16 +167,16 @@ def project(file, source, dest):
                                  sep=';',
                                  input=file)
     except CalledModuleError:
-        grass.fatal(cs2cs + ' failed')
+        gcore.fatal(cs2cs + ' failed')
 
     if not ret:
-        grass.fatal(cs2cs + ' failed')
+        gcore.fatal(cs2cs + ' failed')
 
     for line in ret.splitlines():
         if "*" in line:
             errors += 1
         else:
-            p_x2, p_y2, p_z2 = map(float, line.split(';'))
+            p_x2, p_y2, p_z2 = list(map(float, line.split(';')))
             points.append((p_x2 / dest['scale'], p_y2 / dest['scale']))
 
     return points, errors
@@ -238,40 +239,42 @@ def main():
     max_rows = int(options['maxrows']) - int(options['overlap'])
 
     if max_cols == 0:
-        grass.fatal(_("It is not possibile to set 'maxcols=%s' and "
+        gcore.fatal(_("It is not possibile to set 'maxcols=%s' and "
                       "'overlap=%s'. Please set maxcols>overlap" %
                       (options['maxcols'], options['overlap'])))
     elif max_rows == 0:
-        grass.fatal(_("It is not possibile to set 'maxrows=%s' and "
+        gcore.fatal(_("It is not possibile to set 'maxrows=%s' and "
                       "'overlap=%s'. Please set maxrows>overlap" %
                       (options['maxrows'], options['overlap'])))
     # destination projection
     if not options['destproj']:
-        dest_proj = grass.read_command('g.proj',
+        dest_proj = gcore.read_command('g.proj',
                                        quiet=True,
                                        flags='jf').rstrip('\n')
         if not dest_proj:
-            grass.fatal(_('g.proj failed'))
+            gcore.fatal(_('g.proj failed'))
     else:
         dest_proj = options['destproj']
-    grass.debug("Getting destination projection -> '%s'" % dest_proj)
+    gcore.debug("Getting destination projection -> '%s'" % dest_proj)
 
     # projection scale
     if not options['destscale']:
-        ret = grass.parse_command('g.proj',
+        ret = gcore.parse_command('g.proj',
                                   quiet=True,
                                   flags='j')
         if not ret:
-            grass.fatal(_('g.proj failed'))
+            gcore.fatal(_('g.proj failed'))
 
         if '+to_meter' in ret:
             dest_scale = ret['+to_meter'].strip()
         else:
-            grass.warning(_("Scale (%s) not found, assuming '1'") % '+to_meter')
+            gcore.warning(
+                _("Scale (%s) not found, assuming '1'") %
+                '+to_meter')
             dest_scale = '1'
     else:
         dest_scale = options['destscale']
-    grass.debug('Getting destination projection scale -> %s' % dest_scale)
+    gcore.debug('Getting destination projection scale -> %s' % dest_scale)
 
     # set up the projections
     srs_source = {'proj': options['sourceproj'],
@@ -279,17 +282,17 @@ def main():
     srs_dest = {'proj': dest_proj, 'scale': float(dest_scale)}
 
     if options['region']:
-        grass.run_command('g.region',
+        gcore.run_command('g.region',
                           quiet=True,
                           region=options['region'])
-    dest_bbox = grass.region()
-    grass.debug('Getting destination region')
+    dest_bbox = gcore.region()
+    gcore.debug('Getting destination region')
 
     # output field separator
     fs = separator(options['separator'])
 
     # project the destination region into the source:
-    grass.verbose('Projecting destination region into source...')
+    gcore.verbose('Projecting destination region into source...')
     dest_bbox_points = bboxToPoints(dest_bbox)
 
     dest_bbox_source_points, errors_dest = projectPoints(dest_bbox_points,
@@ -297,24 +300,24 @@ def main():
                                                          dest=srs_source)
 
     if len(dest_bbox_source_points) == 0:
-        grass.fatal(_("There are no tiles available. Probably the output "
+        gcore.fatal(_("There are no tiles available. Probably the output "
                       "projection system it is not compatible with the "
                       "projection of the current location"))
 
     source_bbox = pointsToBbox(dest_bbox_source_points)
 
-    grass.verbose('Projecting source bounding box into destination...')
+    gcore.verbose('Projecting source bounding box into destination...')
 
     source_bbox_points = bboxToPoints(source_bbox)
 
     source_bbox_dest_points, errors_source = projectPoints(source_bbox_points,
-                                                            source=srs_source,
-                                                            dest=srs_dest)
+                                                           source=srs_source,
+                                                           dest=srs_dest)
 
     x_metric = 1 / dest_bbox['ewres']
     y_metric = 1 / dest_bbox['nsres']
 
-    grass.verbose('Computing length of sides of source bounding box...')
+    gcore.verbose('Computing length of sides of source bounding box...')
 
     source_bbox_dest_lengths = sideLengths(source_bbox_dest_points,
                                            x_metric, y_metric)
@@ -324,12 +327,14 @@ def main():
     # In the direction (x or y) in which the world is least skewed (ie north south in lat long)
     # Divide the world into strips. These strips are as big as possible contrained by max_
     # In the other direction do the same thing.
-    # Theres some recomputation of the size of the world that's got to come in here somewhere.
+    # Theres some recomputation of the size of the world that's got to come in
+    # here somewhere.
 
     # For now, however, we are going to go ahead and request more data than is necessary.
     # For small regions far from the critical areas of projections this makes very little difference
     # in the amount of data gotten.
-    # We can make this efficient for big regions or regions near critical points later.
+    # We can make this efficient for big regions or regions near critical
+    # points later.
 
     bigger = []
     bigger.append(max(source_bbox_dest_lengths['x']))
@@ -342,7 +347,7 @@ def main():
     # I'm going to make the numbers all simpler and add this extra cell to
     # every tile.
 
-    grass.message(_('Computing tiling...'))
+    gcore.message(_('Computing tiling...'))
     tiles = [-1, -1]
     tile_base_size = [-1, -1]
     tiles_extra_1 = [-1, -1]
@@ -363,7 +368,7 @@ def main():
         # Add overlap to tiles (doesn't effect tileset_size
         tile_size_overlap[i] = tile_size[i] + int(options['overlap'])
 
-    grass.verbose("There will be %d by %d tiles each %d by %d cells" %
+    gcore.verbose("There will be %d by %d tiles each %d by %d cells" %
                   (tiles[0], tiles[1], tile_size[0], tile_size[1]))
 
     ximax = tiles[0]
@@ -380,16 +385,21 @@ def main():
     tile_bbox = {'w': -1, 's': -1, 'e': -1, 'n': -1}
 
     if errors_dest > 0:
-        grass.warning(_("During computation %i tiles could not be created" %
+        gcore.warning(_("During computation %i tiles could not be created" %
                         errors_dest))
 
     while xi < ximax:
-        tile_bbox['w'] = float(min_x) + (float(xi) * float(tile_size[0]) / float(tileset_size[0])) * float(span_x)
-        tile_bbox['e'] = float(min_x) + (float(xi + 1) * float(tile_size_overlap[0]) / float(tileset_size[0])) * float(span_x)
+        tile_bbox['w'] = float(
+            min_x) + (float(xi) * float(tile_size[0]) / float(tileset_size[0])) * float(span_x)
+        tile_bbox['e'] = float(min_x) + (float(xi + 1) * float(tile_size_overlap[0]
+                                                               ) / float(tileset_size[0])) * float(span_x)
         yi = 0
         while yi < yimax:
-            tile_bbox['s'] = float(min_y) + (float(yi) * float(tile_size[1]) / float(tileset_size[1])) * float(span_y)
-            tile_bbox['n'] = float(min_y) + (float(yi + 1) * float(tile_size_overlap[1]) / float(tileset_size[1])) * float(span_y)
+            tile_bbox['s'] = float(
+                min_y) + (float(yi) * float(tile_size[1]) / float(tileset_size[1])) * float(span_y)
+            tile_bbox['n'] = float(min_y) + (
+                float(yi + 1) * float(tile_size_overlap[1]) /
+                float(tileset_size[1])) * float(span_y)
             tile_bbox_points = bboxToPoints(tile_bbox)
             tile_dest_bbox_points, errors = projectPoints(tile_bbox_points,
                                                           source=srs_source,
@@ -397,24 +407,24 @@ def main():
             tile_dest_bbox = pointsToBbox(tile_dest_bbox_points)
             if bboxesIntersect(tile_dest_bbox, dest_bbox):
                 if flags['w']:
-                    print "bbox=%s,%s,%s,%s&width=%s&height=%s" % \
+                    print("bbox=%s,%s,%s,%s&width=%s&height=%s" %
                           (tile_bbox['w'], tile_bbox['s'], tile_bbox['e'],
                            tile_bbox['n'], tile_size_overlap[0],
-                           tile_size_overlap[1])
+                           tile_size_overlap[1]))
                 elif flags['g']:
-                    print "w=%s;s=%s;e=%s;n=%s;cols=%s;rows=%s" % \
+                    print("w=%s;s=%s;e=%s;n=%s;cols=%s;rows=%s" %
                           (tile_bbox['w'], tile_bbox['s'], tile_bbox['e'],
                            tile_bbox['n'], tile_size_overlap[0],
-                           tile_size_overlap[1])
+                           tile_size_overlap[1]))
                 else:
-                    print "%s%s%s%s%s%s%s%s%s%s%s" % \
+                    print("%s%s%s%s%s%s%s%s%s%s%s" %
                           (tile_bbox['w'], fs, tile_bbox['s'], fs,
                            tile_bbox['e'], fs, tile_bbox['n'], fs,
-                           tile_size_overlap[0], fs, tile_size_overlap[1])
+                           tile_size_overlap[0], fs, tile_size_overlap[1]))
             yi += 1
         xi += 1
 
 if __name__ == "__main__":
     cs2cs = 'cs2cs'
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     sys.exit(main())
diff --git a/scripts/r.unpack/r.unpack.html b/scripts/r.unpack/r.unpack.html
index 76c278e..2a5f7bb 100644
--- a/scripts/r.unpack/r.unpack.html
+++ b/scripts/r.unpack/r.unpack.html
@@ -37,4 +37,4 @@ Original Bash script written by Hamish Bowman, Otago University, New Zealand as
 <br>
 Converted to Python and updated for GRASS 7 by Martin Landa, CTU in Prague, Czech Republic
 
-<p><i>Last changed: $Date: 2015-09-05 17:56:17 +0200 (Sat, 05 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-05 17:57:08 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/r.unpack/r.unpack.py b/scripts/r.unpack/r.unpack.py
index 9045aa6..b9c8d7f 100644
--- a/scripts/r.unpack/r.unpack.py
+++ b/scripts/r.unpack/r.unpack.py
@@ -82,7 +82,8 @@ def main():
         if os.environ.get('GRASS_OVERWRITE', '0') != '1':
             grass.fatal(_('Raster map <{name}> already exists'.format(name=map_name)))
         else:
-            grass.warning(_('Raster map <{name}> already exists and will be overwritten'.format(name=map_name)))
+            grass.warning(
+                _('Raster map <{name}> already exists and will be overwritten'.format(name=map_name)))
 
     # extract data
     tar.extractall()
@@ -100,36 +101,37 @@ def main():
 
     if flags['o']:
         grass.warning(_("Overriding projection check (using current location's projection)."))
-        
+
     else:
-        
+
         diff_result_1 = diff_result_2 = None
-        
+
         proj_info_file_1 = 'PROJ_INFO'
         proj_info_file_2 = os.path.join(mset_dir, '..', 'PERMANENT', 'PROJ_INFO')
 
         skip_projection_check = False
         if not os.path.exists(proj_info_file_1):
             if os.path.exists(proj_info_file_2):
-                grass.fatal(_("PROJ_INFO file is missing, unpack raster map in XY (unprojected) location."))
+                grass.fatal(
+                    _("PROJ_INFO file is missing, unpack raster map in XY (unprojected) location."))
             skip_projection_check = True  # XY location
 
         if not skip_projection_check:
             if not grass.compare_key_value_text_files(filename_a=proj_info_file_1,
                                                       filename_b=proj_info_file_2,
-                                                      proj=True):                                                      
+                                                      proj=True):
                 diff_result_1 = diff_files(proj_info_file_1, proj_info_file_2)
-        
+
             proj_units_file_1 = 'PROJ_UNITS'
             proj_units_file_2 = os.path.join(mset_dir, '..', 'PERMANENT', 'PROJ_UNITS')
-        
+
             if not grass.compare_key_value_text_files(filename_a=proj_units_file_1,
                                                       filename_b=proj_units_file_2,
-                                                      units=True):                                                      
+                                                      units=True):
                 diff_result_2 = diff_files(proj_units_file_1, proj_units_file_2)
-        
+
             if diff_result_1 or diff_result_2:
-                
+
                 if diff_result_1:
                     grass.warning(_("Difference between PROJ_INFO file of packed map "
                                     "and of current location:\n{diff}").format(diff=''.join(diff_result_1)))
diff --git a/scripts/r3.in.xyz/r3.in.xyz.html b/scripts/r3.in.xyz/r3.in.xyz.html
index a400727..939c316 100644
--- a/scripts/r3.in.xyz/r3.in.xyz.html
+++ b/scripts/r3.in.xyz/r3.in.xyz.html
@@ -87,4 +87,4 @@ Hamish Bowman<br>
 <i>Dunedin, New Zealand</i>
 
 <p>
-<i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/scripts/r3.in.xyz/r3.in.xyz.py b/scripts/r3.in.xyz/r3.in.xyz.py
index ad340ee..ec8fe16 100755
--- a/scripts/r3.in.xyz/r3.in.xyz.py
+++ b/scripts/r3.in.xyz/r3.in.xyz.py
@@ -256,7 +256,7 @@ def main():
     proc = {}
     pout = {}
 
-    depths = range(1, 1 + region['depths'])
+    depths = list(range(1, 1 + region['depths']))
 
     for i in depths:
         tmp_layer_name = 'tmp.r3xyz.%d.%s' % (os.getpid(), '%05d' % i)
@@ -280,7 +280,7 @@ def main():
                                       **addl_opts)
 
         grass.debug("i=%d, %%=%d  (workers=%d)" % (i, i % workers, workers))
-        #print sys.getsizeof(proc)  # sizeof(proc array)  [not so big]
+        # print sys.getsizeof(proc)  # sizeof(proc array)  [not so big]
 
         if i % workers is 0:
             # wait for the ones launched so far to finish
@@ -299,7 +299,7 @@ def main():
 
     grass.verbose(_("Assembling 3D cube ..."))
 
-    #input order: lower most strata first
+    # input order: lower most strata first
     slices = grass.read_command('g.list', type='raster', sep=',',
                                 pattern='tmp.r3xyz.%d.*' % os.getpid()).rstrip(os.linesep)
     grass.debug(slices)
diff --git a/scripts/v.build.all/v.build.all.py b/scripts/v.build.all/v.build.all.py
index 740c245..f3aee04 100755
--- a/scripts/v.build.all/v.build.all.py
+++ b/scripts/v.build.all/v.build.all.py
@@ -22,6 +22,7 @@ import sys
 from grass.script import core as grass
 from grass.exceptions import CalledModuleError
 
+
 def main():
     env = grass.gisenv()
     mapset = env['MAPSET']
@@ -29,17 +30,17 @@ def main():
 
     vectors = grass.list_grouped('vect')[mapset]
     num_vectors = len(vectors)
-    
+
     if grass.verbosity() < 2:
         quiet = True
     else:
         quiet = False
-        
+
     i = 1
     for vect in vectors:
         map = "%s@%s" % (vect, mapset)
-        grass.message(_("%s\nBuilding topology for vector map <%s> (%d of %d)...\n%s") % \
-                          ('-' * 80, map, i, num_vectors, '-' * 80))
+        grass.message(_("%s\nBuilding topology for vector map <%s> (%d of %d)...\n%s") %
+                      ('-' * 80, map, i, num_vectors, '-' * 80))
         grass.verbose(_("v.build map=%s") % map)
         try:
             grass.run_command("v.build", map=map, quiet=quiet)
diff --git a/scripts/v.centroids/v.centroids.py b/scripts/v.centroids/v.centroids.py
index 7183cf2..07c5dcd 100755
--- a/scripts/v.centroids/v.centroids.py
+++ b/scripts/v.centroids/v.centroids.py
@@ -50,20 +50,19 @@
 #%end
 
 import sys
-import os
-import re
-import grass.script as grass
+import grass.script as gscript
+
 
 def main():
     if options['option'] == 'add':
-        num_bound = grass.vector_info_topo(map = options['input'])['boundaries']
-	if num_bound == 0:
-	    grass.fatal(_("Input vector map contains no boundaries."))
+        num_bound = gscript.vector_info_topo(map=options['input'])['boundaries']
+        if num_bound == 0:
+            gscript.fatal(_("Input vector map contains no boundaries."))
 
-	grass.run_command("v.category", type = 'area', **options)
+        gscript.run_command("v.category", type='area', **options)
 
     sys.exit(0)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     main()
diff --git a/scripts/v.db.addcolumn/v.db.addcolumn.py b/scripts/v.db.addcolumn/v.db.addcolumn.py
index 38631d9..97f01fe 100755
--- a/scripts/v.db.addcolumn/v.db.addcolumn.py
+++ b/scripts/v.db.addcolumn/v.db.addcolumn.py
@@ -3,7 +3,7 @@
 ############################################################################
 #
 # MODULE:       v.db.addcolumnumn
-# AUTHOR(S):    Moritz Lennert 
+# AUTHOR(S):    Moritz Lennert
 #               Converted to Python by Glynn Clements
 # PURPOSE:      interface to db.execute to add a column to the attribute table
 #               connected to a given vector map
@@ -44,29 +44,31 @@ import sys
 import os
 import grass.script as grass
 
+
 def main():
-    map     = options['map']
-    layer   = options['layer']
+    map = options['map']
+    layer = options['layer']
     columns = options['columns']
     columns = [col.strip() for col in columns.split(',')]
-    
+
     # does map exist in CURRENT mapset?
     mapset = grass.gisenv()['MAPSET']
-    exists = bool(grass.find_file(map, element = 'vector', mapset = mapset)['file'])
-    
+    exists = bool(grass.find_file(map, element='vector', mapset=mapset)['file'])
+
     if not exists:
         grass.fatal(_("Vector map <%s> not found in current mapset") % map)
-    
+
     try:
         f = grass.vector_db(map)[int(layer)]
     except KeyError:
-        grass.fatal(_("There is no table connected to this map. Run v.db.connect or v.db.addtable first."))
-    
-    table    = f['table']
+        grass.fatal(
+            _("There is no table connected to this map. Run v.db.connect or v.db.addtable first."))
+
+    table = f['table']
     database = f['database']
-    driver   = f['driver']
-    column_existing = grass.vector_columns(map, int(layer)).keys()    
-    
+    driver = f['driver']
+    column_existing = grass.vector_columns(map, int(layer)).keys()
+
     for col in columns:
         if not col:
             grass.fatal(_("There is an empty column. Did you leave a trailing comma?"))
@@ -75,13 +77,13 @@ def main():
             grass.error(_("Column <%s> is already in the table. Skipping.") % col_name)
             continue
         grass.verbose(_("Adding column <%s> to the table") % col_name)
-        p = grass.feed_command('db.execute', input = '-', database = database, driver = driver)
+        p = grass.feed_command('db.execute', input='-', database=database, driver=driver)
         p.stdin.write("ALTER TABLE %s ADD COLUMN %s" % (table, col))
         grass.debug("ALTER TABLE %s ADD COLUMN %s" % (table, col))
         p.stdin.close()
         if p.wait() != 0:
             grass.fatal(_("Unable to add column <%s>.") % col)
-    
+
     # write cmd history:
     grass.vector_history(map)
 
diff --git a/scripts/v.db.addtable/v.db.addtable.html b/scripts/v.db.addtable/v.db.addtable.html
index 58fd74b..27689a2 100644
--- a/scripts/v.db.addtable/v.db.addtable.html
+++ b/scripts/v.db.addtable/v.db.addtable.html
@@ -61,4 +61,4 @@ v.info -c myroads layer=2
 
 Markus Neteler
 
-<p><i>Last changed: $Date: 2016-06-26 16:45:35 +0200 (Sun, 26 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-26 16:44:55 +0200 (Sun, 26 Jun 2016) $</i>
diff --git a/scripts/v.db.addtable/v.db.addtable.py b/scripts/v.db.addtable/v.db.addtable.py
index 28cca5f..46b0007 100755
--- a/scripts/v.db.addtable/v.db.addtable.py
+++ b/scripts/v.db.addtable/v.db.addtable.py
@@ -3,7 +3,7 @@
 ############################################################################
 #
 # MODULE:       v.db.addtable
-# AUTHOR(S):    Markus Neteler 
+# AUTHOR(S):    Markus Neteler
 #               Converted to Python by Glynn Clements
 #               Key column added by Martin Landa <landa.martin gmail.com>
 # PURPOSE:      interface to db.execute to creates and add a new table to given vector map
@@ -23,14 +23,14 @@
 #%end
 #%option G_OPT_V_MAP
 #%end
-#%option 
+#%option
 #% key: table
 #% type: string
 #% description: Name of new attribute table (default: vector map name)
 #% required: no
 #% guisection: Definition
 #%end
-#%option 
+#%option
 #% key: layer
 #% type: integer
 #% description: Layer number where to add new attribute table
@@ -64,14 +64,14 @@ def main():
     layer = options['layer']
     columns = options['columns']
     key = options['key']
-    
+
     # does map exist in CURRENT mapset?
     mapset = grass.gisenv()['MAPSET']
-    if not grass.find_file(vector, element = 'vector', mapset = mapset)['file']:
+    if not grass.find_file(vector, element='vector', mapset=mapset)['file']:
         grass.fatal(_("Vector map <%s> not found in current mapset") % vector)
-    
+
     map_name = vector.split('@')[0]
-    
+
     if not table:
         if layer == '1':
             grass.verbose(_("Using vector map name as table name: <%s>") % map_name)
@@ -79,44 +79,46 @@ def main():
         else:
             # to avoid tables with identical names on higher layers
             table = "%s_%s" % (map_name, layer)
-            grass.verbose(_("Using vector map name extended by layer number as table name: <%s>") % table)
+            grass.verbose(
+                _("Using vector map name extended by layer number as table name: <%s>") %
+                table)
     else:
         grass.verbose(_("Using user specified table name: %s") % table)
-    
+
     # check if DB parameters are set, and if not set them.
-    grass.run_command('db.connect', flags = 'c')
+    grass.run_command('db.connect', flags='c')
     grass.verbose(_("Creating new DB connection based on default mapset settings..."))
     kv = grass.db_connection()
     database = kv['database']
     driver = kv['driver']
     schema = kv['schema']
-    
+
     # maybe there is already a table linked to the selected layer?
     nuldev = file(os.devnull, 'w')
     try:
-        grass.vector_db(map_name, stderr = nuldev)[int(layer)]
+        grass.vector_db(map_name, stderr=nuldev)[int(layer)]
         grass.fatal(_("There is already a table linked to layer <%s>") % layer)
     except KeyError:
         pass
-    
+
     # maybe there is already a table with that name?
-    tables = grass.read_command('db.tables', flags = 'p', database = database, driver = driver,
-                                stderr = nuldev)
-    
+    tables = grass.read_command('db.tables', flags='p', database=database, driver=driver,
+                                stderr=nuldev)
+
     if not table in tables.splitlines():
         if columns:
-            column_def = map(lambda x: x.strip().lower(), columns.strip().split(','))
+            column_def = [x.strip().lower() for x in columns.strip().split(',')]
         else:
             column_def = []
-        
+
         # if not existing, create it:
         column_def_key = "%s integer" % key
         if column_def_key not in column_def:
             column_def.insert(0, column_def_key)
         column_def = ','.join(column_def)
-        
+
         grass.verbose(_("Creating table with columns (%s)...") % column_def)
-        
+
         sql = "CREATE TABLE %s (%s)" % (table, column_def)
         try:
             grass.run_command('db.execute',
@@ -127,22 +129,22 @@ def main():
     # connect the map to the DB:
     if schema:
         table = '{schema}.{table}'.format(schema=schema, table=table)
-    grass.run_command('v.db.connect', quiet = True,
-                      map = map_name, database = database, driver = driver,
-                      layer = layer, table = table, key = key)
-    
+    grass.run_command('v.db.connect', quiet=True,
+                      map=map_name, database=database, driver=driver,
+                      layer=layer, table=table, key=key)
+
     # finally we have to add cats into the attribute DB to make modules such as v.what.rast happy:
     # (creates new row for each vector line):
-    grass.run_command('v.to.db', map = map_name, layer = layer,
-                      option = 'cat', column = key, qlayer = layer)
-    
+    grass.run_command('v.to.db', map=map_name, layer=layer,
+                      option='cat', column=key, qlayer=layer)
+
     grass.verbose(_("Current attribute table links:"))
     if grass.verbosity() > 2:
-        grass.run_command('v.db.connect', flags = 'p', map = map_name)
-    
+        grass.run_command('v.db.connect', flags='p', map=map_name)
+
     # write cmd history:
     grass.vector_history(map_name)
-    
+
     return 0
 
 if __name__ == "__main__":
diff --git a/scripts/v.db.dropcolumn/v.db.dropcolumn.py b/scripts/v.db.dropcolumn/v.db.dropcolumn.py
index ab14eae..1616474 100755
--- a/scripts/v.db.dropcolumn/v.db.dropcolumn.py
+++ b/scripts/v.db.dropcolumn/v.db.dropcolumn.py
@@ -5,7 +5,7 @@
 # MODULE:       v.db.dropcolumn
 # AUTHOR(S):    Markus Neteler
 #               Converted to Python by Glynn Clements
-# PURPOSE:      interface to db.execute to drop a column from the 
+# PURPOSE:      interface to db.execute to drop a column from the
 #               attribute table connected to a given vector map
 #               - Based on v.db.addcolumn
 #               - with special trick for SQLite
@@ -45,43 +45,43 @@ from grass.exceptions import CalledModuleError
 
 
 def main():
-    map    = options['map']
-    layer  = options['layer']
+    map = options['map']
+    layer = options['layer']
     columns = options['columns'].split(',')
-    
+
     mapset = grass.gisenv()['MAPSET']
-    
+
     # does map exist in CURRENT mapset?
-    if not grass.find_file(map, element = 'vector', mapset = mapset)['file']:
+    if not grass.find_file(map, element='vector', mapset=mapset)['file']:
         grass.fatal(_("Vector map <%s> not found in current mapset") % map)
-    
+
     f = grass.vector_layer_db(map, layer)
-    
+
     table = f['table']
     keycol = f['key']
     database = f['database']
     driver = f['driver']
-    
+
     if not table:
         grass.fatal(_("There is no table connected to the input vector map. "
                       "Unable to delete any column. Exiting."))
-    
+
     if keycol in columns:
         grass.fatal(_("Unable to delete <%s> column as it is needed to keep table <%s> "
-                      "connected to the input vector map <%s>") % \
-                        (keycol, table, map))
-    
+                      "connected to the input vector map <%s>") %
+                    (keycol, table, map))
+
     for column in columns:
-        if not grass.vector_columns(map, layer).has_key(column):
+        if column not in grass.vector_columns(map, layer):
             grass.warning(_("Column <%s> not found in table <%s>. Skipped") % (column, table))
             continue
-        
+
         if driver == "sqlite":
             # echo "Using special trick for SQLite"
             # http://www.sqlite.org/faq.html#q11
             colnames = []
             coltypes = []
-            for f in grass.db_describe(table, database = database, driver = driver)['cols']:
+            for f in grass.db_describe(table, database=database, driver=driver)['cols']:
                 if f[0] == column:
                     continue
                 colnames.append(f[0])
@@ -100,21 +100,21 @@ def main():
                 "CREATE UNIQUE INDEX ${table}_cat ON ${table} (${keycol} )",
                 "DROP TABLE ${table}_backup",
                 "COMMIT"
-                ]
+            ]
             tmpl = string.Template(';\n'.join(cmds))
-            sql = tmpl.substitute(table = table, coldef = coltypes, colnames = colnames, keycol = keycol)
+            sql = tmpl.substitute(table=table, coldef=coltypes, colnames=colnames, keycol=keycol)
         else:
             sql = "ALTER TABLE %s DROP COLUMN %s" % (table, column)
 
         try:
-            grass.write_command('db.execute', input = '-', database = database, driver = driver,
-                                stdin = sql)
+            grass.write_command('db.execute', input='-', database=database, driver=driver,
+                                stdin=sql)
         except CalledModuleError:
             grass.fatal(_("Deleting column failed"))
-    
+
     # write cmd history:
     grass.vector_history(map)
-    
+
 if __name__ == "__main__":
     options, flags = grass.parser()
     main()
diff --git a/scripts/v.db.droprow/v.db.droprow.html b/scripts/v.db.droprow/v.db.droprow.html
index 532b290..e44e334 100644
--- a/scripts/v.db.droprow/v.db.droprow.html
+++ b/scripts/v.db.droprow/v.db.droprow.html
@@ -50,4 +50,4 @@ v.univar rand5k_elev_filt type=point column=elevation
 
 Markus Neteler
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/v.db.droprow/v.db.droprow.py b/scripts/v.db.droprow/v.db.droprow.py
index a84d88d..d13b06a 100755
--- a/scripts/v.db.droprow/v.db.droprow.py
+++ b/scripts/v.db.droprow/v.db.droprow.py
@@ -51,7 +51,7 @@ def main():
         return 1
 
     # write cmd history:
-    grass.vector_history(map = options['output'])
+    grass.vector_history(map=options['output'])
 
     return 0
 
diff --git a/scripts/v.db.droptable/v.db.droptable.py b/scripts/v.db.droptable/v.db.droptable.py
index 88dc6ce..bec32bd 100755
--- a/scripts/v.db.droptable/v.db.droptable.py
+++ b/scripts/v.db.droptable/v.db.droptable.py
@@ -3,7 +3,7 @@
 ############################################################################
 #
 # MODULE:       v.db.droptable
-# AUTHOR(S):   	Markus Neteler 
+# AUTHOR(S):   	Markus Neteler
 #               Converted to Python by Glynn Clements
 # PURPOSE:      interface to db.execute to drop an existing table of given vector map
 # COPYRIGHT:    (C) 2005, 2008 by the GRASS Development Team
@@ -36,7 +36,7 @@
 
 import sys
 import os
-import grass.script as grass
+import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
 
@@ -47,56 +47,58 @@ def main():
     layer = options['layer']
 
     # do some paranoia tests as well:
-    f = grass.vector_layer_db(map, layer)
-    
+    f = gscript.vector_layer_db(map, layer)
+
     if not table:
-	# Removing table name connected to selected layer
-	table = f['table']
-	if not table:
-	    grass.fatal(_("No table assigned to layer <%s>") % layer)
+        # Removing table name connected to selected layer
+        table = f['table']
+        if not table:
+            gscript.fatal(_("No table assigned to layer <%s>") % layer)
     else:
-	# Removing user specified table
-	existingtable = f['table']
-	if existingtable != table:
-	    grass.fatal(_("User selected table <%s> but the table <%s> is linked to layer <%s>")
-			% (table, existingtable, layer))
-
-    # we use the DB settings selected layer 
+        # Removing user specified table
+        existingtable = f['table']
+        if existingtable != table:
+            gscript.fatal(_("User selected table <%s> but the table <%s> "
+                            "is linked to layer <%s>") %
+                          (table, existingtable, layer))
+
+    # we use the DB settings selected layer
     database = f['database']
     driver = f['driver']
 
-    grass.message(_("Removing table <%s> linked to layer <%s> of vector map <%s>")
-		  % (table, layer, map)) 
+    gscript.message(_("Removing table <%s> linked to layer <%s> of vector"
+                      " map <%s>") % (table, layer, map))
 
     if not force:
-	grass.message(_("You must use the -f (force) flag to actually remove the table. Exiting."))
-	grass.message(_("Leaving map/table unchanged."))
-	sys.exit(0)
+        gscript.message(_("You must use the -f (force) flag to actually "
+                          "remove the table. Exiting."))
+        gscript.message(_("Leaving map/table unchanged."))
+        sys.exit(0)
 
-    grass.message(_("Dropping table <%s>...") % table)
+    gscript.message(_("Dropping table <%s>...") % table)
 
     try:
-        grass.write_command('db.execute', stdin="DROP TABLE %s" % table,
-                            input='-', database=database, driver=driver)
+        gscript.write_command('db.execute', stdin="DROP TABLE %s" % table,
+                              input='-', database=database, driver=driver)
     except CalledModuleError:
-        grass.fatal(_("An error occurred while running db.execute"))
+        gscript.fatal(_("An error occurred while running db.execute"))
 
-    grass.run_command('v.db.connect', flags = 'd', map = map, layer = layer)
+    gscript.run_command('v.db.connect', flags='d', map=map, layer=layer)
 
-    grass.message(_("Current attribute table link(s):")) 
+    gscript.message(_("Current attribute table link(s):"))
     # silently test first to avoid confusing error messages
     nuldev = file(os.devnull, 'w')
     try:
-        grass.run_command('v.db.connect', flags='p', map=map, quiet=True,
-                          stdout=nuldev, stderr=nuldev)
+        gscript.run_command('v.db.connect', flags='p', map=map, quiet=True,
+                            stdout=nuldev, stderr=nuldev)
     except CalledModuleError:
-        grass.message(_("(No database links remaining)"))
+        gscript.message(_("(No database links remaining)"))
     else:
-        grass.run_command('v.db.connect', flags='p', map=map)
+        gscript.run_command('v.db.connect', flags='p', map=map)
 
     # write cmd history:
-    grass.vector_history(map)
+    gscript.vector_history(map)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     main()
diff --git a/scripts/v.db.join/v.db.join.html b/scripts/v.db.join/v.db.join.html
index 09fccc3..90f1f85 100644
--- a/scripts/v.db.join/v.db.join.html
+++ b/scripts/v.db.join/v.db.join.html
@@ -112,4 +112,4 @@ cat|label|id|shortname|longname
 
 Markus Neteler
 
-<p><i>Last changed: $Date: 2015-12-17 15:41:28 +0100 (Thu, 17 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-12-17 15:38:13 +0100 (Thu, 17 Dec 2015) $</i>
diff --git a/scripts/v.db.join/v.db.join.py b/scripts/v.db.join/v.db.join.py
index 7a546b2..61a53f0 100755
--- a/scripts/v.db.join/v.db.join.py
+++ b/scripts/v.db.join/v.db.join.py
@@ -80,7 +80,7 @@ def main():
         
     maptable = f['table']
     database = f['database']
-    driver   = f['driver']
+    driver = f['driver']
 
     if driver == 'dbf':
         grass.fatal(_("JOIN is not supported for tables stored in DBF format"))
@@ -89,7 +89,7 @@ def main():
         grass.fatal(_("There is no table connected to this map. Unable to join any column."))
 
     # check if column is in map table
-    if not grass.vector_columns(map, layer).has_key(column):
+    if column not in grass.vector_columns(map, layer):
         grass.fatal(_("Column <%s> not found in table <%s>") % (column,
                                                                 maptable))
 
@@ -157,7 +157,9 @@ def main():
                                    otable=otable, ocolumn=ocolumn,
                                    colname=colname)
         grass.debug(stmt, 1)
-        grass.verbose(_("Updating column <%s> of vector map <%s>...") % (colname, map))
+        grass.verbose(
+            _("Updating column <%s> of vector map <%s>...") %
+            (colname, map))
         try:
             grass.write_command('db.execute', stdin=stmt, input='-',
                                 database=database, driver=driver)
diff --git a/scripts/v.db.reconnect.all/v.db.reconnect.all.py b/scripts/v.db.reconnect.all/v.db.reconnect.all.py
index cd7290d..e9b58b4 100755
--- a/scripts/v.db.reconnect.all/v.db.reconnect.all.py
+++ b/scripts/v.db.reconnect.all/v.db.reconnect.all.py
@@ -53,107 +53,120 @@ import sys
 import os
 import string
 
-import grass.script as grass
+import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
 # substitute variables (gisdbase, location_name, mapset)
+
+
 def substitute_db(database):
-    gisenv = grass.gisenv()
+    gisenv = gscript.gisenv()
     tmpl = string.Template(database)
-    
-    return tmpl.substitute(GISDBASE = gisenv['GISDBASE'],
-                           LOCATION_NAME = gisenv['LOCATION_NAME'],
-                           MAPSET = gisenv['MAPSET'])
+
+    return tmpl.substitute(GISDBASE=gisenv['GISDBASE'],
+                           LOCATION_NAME=gisenv['LOCATION_NAME'],
+                           MAPSET=gisenv['MAPSET'])
 
 # create database if doesn't exist
+
+
 def create_db(driver, database):
     subst_database = substitute_db(database)
     if driver == 'dbf':
         path = subst_database
         # check if destination directory exists
         if not os.path.isdir(path):
-	    # create dbf database
+            # create dbf database
             os.makedirs(path)
-	    return True
+            return True
         return False
-    
+
     if driver == 'sqlite':
         path = os.path.dirname(subst_database)
         # check if destination directory exists
         if not os.path.isdir(path):
             os.makedirs(path)
-    
-    if subst_database in grass.read_command('db.databases', quiet = True,
-                                      driver = driver).splitlines():
+
+    if subst_database in gscript.read_command('db.databases', quiet=True,
+                                              driver=driver).splitlines():
         return False
 
-    grass.info(_("Target database doesn't exist, "
-                 "creating a new database using <%s> driver...") % driver)
+    gscript.info(_("Target database doesn't exist, "
+                   "creating a new database using <%s> driver...") % driver)
     try:
-        grass.run_command('db.createdb', driver = driver,
-                          database = subst_database)
+        gscript.run_command('db.createdb', driver=driver,
+                            database=subst_database)
     except CalledModuleError:
-        grass.fatal(_("Unable to create database <%s> by driver <%s>") % \
-                        (subst_database, driver))
-        
+        gscript.fatal(_("Unable to create database <%s> by driver <%s>") %
+                      (subst_database, driver))
+
     return False
 
 # copy tables if required (-c)
+
+
 def copy_tab(from_driver, from_database, from_table,
              to_driver, to_database, to_table):
-    if to_table in grass.read_command('db.tables', quiet = True,
-                                      driver = to_driver,
-                                      database = to_database,
-                                      stderr = nuldev).splitlines():
+    if to_table in gscript.read_command('db.tables', quiet=True,
+                                        driver=to_driver,
+                                        database=to_database,
+                                        stderr=nuldev).splitlines():
         return False
-    
-    grass.info("Copying table <%s> to target database..." % to_table)
+
+    gscript.info("Copying table <%s> to target database..." % to_table)
     try:
-        grass.run_command('db.copy', from_driver = from_driver,
-                          from_database = from_database,
-                          from_table = from_table, to_driver = to_driver,
-                          to_database = to_database,
-                          to_table = to_table)
+        gscript.run_command('db.copy', from_driver=from_driver,
+                            from_database=from_database,
+                            from_table=from_table, to_driver=to_driver,
+                            to_database=to_database,
+                            to_table=to_table)
     except CalledModuleError:
-        grass.fatal(_("Unable to copy table <%s>") % from_table)
-    
+        gscript.fatal(_("Unable to copy table <%s>") % from_table)
+
     return True
 
 # drop tables if required (-d)
+
+
 def drop_tab(vector, layer, table, driver, database):
     # disconnect
     try:
-        grass.run_command('v.db.connect', flags = 'd', quiet = True, map = vector,
-			          layer = layer, table = table)
+        gscript.run_command('v.db.connect', flags='d', quiet=True, map=vector,
+                            layer=layer, table=table)
     except CalledModuleError:
-        grass.warning(_("Unable to disconnect table <%s> from vector <%s>") % (table, vector))
+        gscript.warning(_("Unable to disconnect table <%s> from vector <%s>") %
+                        (table, vector))
     # drop table
     try:
-        grass.run_command('db.droptable', quiet = True, flags = 'f',
-                          driver = driver, database = database,
-                          table = table)
+        gscript.run_command('db.droptable', quiet=True, flags='f',
+                            driver=driver, database=database,
+                            table=table)
     except CalledModuleError:
-        grass.fatal(_("Unable to drop table <%s>") % table)
-        
+        gscript.fatal(_("Unable to drop table <%s>") % table)
+
 # create index on key column
+
+
 def create_index(driver, database, table, index_name, key):
     if driver == 'dbf':
-	return False
+        return False
 
-    grass.info(_("Creating index <%s>...") % index_name)
+    gscript.info(_("Creating index <%s>...") % index_name)
     try:
-        grass.run_command('db.execute', quiet = True,
-                          driver = driver, database = database,
-                          sql = "create unique index %s on %s(%s)" % (index_name, table, key))
+        gscript.run_command('db.execute', quiet=True, driver=driver,
+                            database=database,
+                            sql="create unique index %s on %s(%s)" %
+                                (index_name, table, key))
     except CalledModuleError:
-        grass.warning(_("Unable to create index <%s>") % index_name)
+        gscript.warning(_("Unable to create index <%s>") % index_name)
+
 
 def main():
     # old connection
     old_database = options['old_database']
     old_schema = options['old_schema']
     # new connection
-    default_connection = grass.db_connection()
+    default_connection = gscript.db_connection()
     if options['new_driver']:
         new_driver = options['new_driver']
     else:
@@ -168,93 +181,104 @@ def main():
         new_schema = default_connection['schema']
 
     if old_database == '':
-    	old_database = None
+        old_database = None
     old_database_subst = None
     if old_database is not None:
-	old_database_subst = substitute_db(old_database)
+        old_database_subst = substitute_db(old_database)
 
     new_database_subst = substitute_db(new_database)
-    
+
     if old_database_subst == new_database_subst and old_schema == new_schema:
-	grass.fatal(_("Old and new database connection is identical. Nothing to do."))
-    
-    mapset = grass.gisenv()['MAPSET']
-        
-    vectors = grass.list_grouped('vect')[mapset]
+        gscript.fatal(_("Old and new database connection is identical. "
+                        "Nothing to do."))
+
+    mapset = gscript.gisenv()['MAPSET']
+
+    vectors = gscript.list_grouped('vect')[mapset]
     num_vectors = len(vectors)
 
     if flags['c']:
-	# create new database if not existing
-	create_db(new_driver, new_database)
-    
+        # create new database if not existing
+        create_db(new_driver, new_database)
+
     i = 0
     for vect in vectors:
         vect = "%s@%s" % (vect, mapset)
         i += 1
-	grass.message(_("%s\nReconnecting vector map <%s> (%d of %d)...\n%s") % \
-                          ('-' * 80, vect, i, num_vectors, '-' * 80))
-        for f in grass.vector_db(vect, stderr = nuldev).itervalues():
+        gscript.message(_("%s\nReconnecting vector map <%s> "
+                          "(%d of %d)...\n%s") %
+                        ('-' * 80, vect, i, num_vectors, '-' * 80))
+        for f in gscript.vector_db(vect, stderr=nuldev).values():
             layer = f['layer']
             schema_table = f['table']
             key = f['key']
             database = f['database']
             driver = f['driver']
-            
+
             # split schema.table
             if '.' in schema_table:
                 schema, table = schema_table.split('.', 1)
             else:
                 schema = ''
                 table = schema_table
-            
+
             if new_schema:
                 new_schema_table = "%s.%s" % (new_schema, table)
             else:
                 new_schema_table = table
-            
-            grass.debug("DATABASE = '%s' SCHEMA = '%s' TABLE = '%s' ->\n"
-                        "      NEW_DATABASE = '%s' NEW_SCHEMA_TABLE = '%s'" % \
-                            (old_database, schema, table, new_database, new_schema_table))
+
+            gscript.debug("DATABASE = '%s' SCHEMA = '%s' TABLE = '%s' ->\n"
+                          "      NEW_DATABASE = '%s' NEW_SCHEMA_TABLE = '%s'" %
+                          (old_database, schema, table, new_database,
+                           new_schema_table))
 
             do_reconnect = True
-	    if old_database_subst is not None:
-		if database != old_database_subst:
-		    do_reconnect = False
-	    if database == new_database_subst:
-		do_reconnect = False
-	    if schema != old_schema:
-		do_reconnect = False
-		
+            if old_database_subst is not None:
+                if database != old_database_subst:
+                    do_reconnect = False
+            if database == new_database_subst:
+                do_reconnect = False
+            if schema != old_schema:
+                do_reconnect = False
+
             if do_reconnect == True:
-                grass.verbose(_("Reconnecting layer %d...") % layer)
-                                          
+                gscript.verbose(_("Reconnecting layer %d...") % layer)
+
                 if flags['c']:
                     # check if table exists in new database
                     copy_tab(driver, database, schema_table,
                              new_driver, new_database, new_schema_table)
-                
+
                 # drop original table if required
                 if flags['d']:
-                    drop_tab(vect, layer, schema_table, driver, substitute_db(database))
+                    drop_tab(
+                        vect,
+                        layer,
+                        schema_table,
+                        driver,
+                        substitute_db(database))
 
                 # reconnect tables (don't use substituted new_database)
-		# NOTE: v.db.connect creates an index on the key column
+                # NOTE: v.db.connect creates an index on the key column
                 try:
-                    grass.run_command('v.db.connect', flags = 'o', quiet = True, map = vect,
-                                      layer = layer, driver = new_driver, database = new_database,
-                                      table = new_schema_table, key = key)
+                    gscript.run_command('v.db.connect', flags='o', quiet=True,
+                                        map=vect, layer=layer,
+                                        driver=new_driver,
+                                        database=new_database,
+                                        table=new_schema_table, key=key)
                 except CalledModuleError:
-                    grass.warning(_("Unable to connect table <%s> to vector <%s> on layer <%s>") %
-				  (table, vect, str(layer)))
+                    gscript.warning(_("Unable to connect table <%s> to vector "
+                                      "<%s> on layer <%s>") %
+                                    (table, vect, str(layer)))
 
             else:
-		if database != new_database_subst:
-		    grass.warning(_("Layer <%d> will not be reconnected because "
-				    "database or schema do not match.") % layer)
-	
+                if database != new_database_subst:
+                    gscript.warning(_("Layer <%d> will not be reconnected "
+                                      "because database or schema do not "
+                                      "match.") % layer)
     return 0
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     nuldev = file(os.devnull, 'w')
     sys.exit(main())
diff --git a/scripts/v.db.renamecolumn/v.db.renamecolumn.py b/scripts/v.db.renamecolumn/v.db.renamecolumn.py
index bb893da..63eb13b 100755
--- a/scripts/v.db.renamecolumn/v.db.renamecolumn.py
+++ b/scripts/v.db.renamecolumn/v.db.renamecolumn.py
@@ -5,10 +5,10 @@
 # MODULE:       v.db.renamecolumn
 # AUTHOR(S):    Markus Neteler
 #               Converted to Python by Glynn Clements
-# PURPOSE:      interface to db.execute to drop a column from the 
+# PURPOSE:      interface to db.execute to drop a column from the
 #               attribute table connected to a given vector map
 #               - Based on v.db.dropcolumn
-#               - with special trick for SQLite and DBF (here the new col is 
+#               - with special trick for SQLite and DBF (here the new col is
 #                 added/values copied/old col deleted)
 # COPYRIGHT:    (C) 2007 by the GRASS Development Team
 #
@@ -30,7 +30,7 @@
 #%end
 #%option G_OPT_V_FIELD
 #%end
-#%option 
+#%option
 #% key: column
 #% type: string
 #% description: Old and new name of the column (old,new)
@@ -43,6 +43,7 @@ import sys
 import os
 import grass.script as grass
 
+
 def main():
     map = options['map']
     layer = options['layer']
@@ -50,7 +51,7 @@ def main():
 
     mapset = grass.gisenv()['MAPSET']
 
-    if not grass.find_file(map, element = 'vector', mapset = mapset):
+    if not grass.find_file(map, element='vector', mapset=mapset):
         grass.fatal(_("Vector map <%s> not found in current mapset") % map)
 
     f = grass.vector_layer_db(map, layer)
@@ -69,10 +70,14 @@ def main():
 
     if driver == "dbf":
         if len(newcol) > 10:
-            grass.fatal(_("Column name <%s> too long. The DBF driver supports column names not longer than 10 characters") % newcol)
+            grass.fatal(
+                _("Column name <%s> too long. The DBF driver supports column names not longer than 10 characters") %
+                newcol)
 
     if oldcol == keycol:
-        grass.fatal(_("Cannot rename column <%s> as it is needed to keep table <%s> connected to the input vector map") % (oldcol, table))
+        grass.fatal(
+            _("Cannot rename column <%s> as it is needed to keep table <%s> connected to the input vector map") %
+            (oldcol, table))
 
     # describe old col
     oldcoltype = None
@@ -93,10 +98,10 @@ def main():
         else:
             colspec = "%s %s" % (newcol, oldcoltype)
 
-        grass.run_command('v.db.addcolumn', map = map, layer = layer, column = colspec)
+        grass.run_command('v.db.addcolumn', map=map, layer=layer, column=colspec)
         sql = "UPDATE %s SET %s=%s" % (table, newcol, oldcol)
-        grass.write_command('db.execute', input = '-', database = database, driver = driver, stdin = sql)
-        grass.run_command('v.db.dropcolumn', map = map, layer = layer, column = oldcol)
+        grass.write_command('db.execute', input='-', database=database, driver=driver, stdin=sql)
+        grass.run_command('v.db.dropcolumn', map=map, layer=layer, column=oldcol)
     elif driver == 'mysql':
         if oldcoltype.upper() == "CHARACTER":
             newcoltype = "varchar(%s)" % (oldcollength)
@@ -104,10 +109,10 @@ def main():
             newcoltype = oldcoltype
 
         sql = "ALTER TABLE %s CHANGE %s %s %s" % (table, oldcol, newcol, newcoltype)
-        grass.write_command('db.execute', input = '-', database = database, driver = driver, stdin = sql)
+        grass.write_command('db.execute', input='-', database=database, driver=driver, stdin=sql)
     else:
         sql = "ALTER TABLE %s RENAME %s TO %s" % (table, oldcol, newcol)
-        grass.write_command('db.execute', input = '-', database = database, driver = driver, stdin = sql)
+        grass.write_command('db.execute', input='-', database=database, driver=driver, stdin=sql)
 
     # write cmd history:
     grass.vector_history(map)
diff --git a/scripts/v.db.univar/v.db.univar.html b/scripts/v.db.univar/v.db.univar.html
index 70aa95c..bf98f88 100644
--- a/scripts/v.db.univar/v.db.univar.html
+++ b/scripts/v.db.univar/v.db.univar.html
@@ -60,4 +60,4 @@ v.db.univar samples colum=heights
  Michael Barton, Arizona State University
 <p>and authors of <em>r.univar.sh</em> (Markus Neteler et al.)
 
-<p><i>Last changed: $Date: 2016-05-17 16:10:47 +0200 (Tue, 17 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-17 16:09:46 +0200 (Tue, 17 May 2016) $</i>
diff --git a/scripts/v.db.univar/v.db.univar.py b/scripts/v.db.univar/v.db.univar.py
index 1f0b6e4..542e98c 100755
--- a/scripts/v.db.univar/v.db.univar.py
+++ b/scripts/v.db.univar/v.db.univar.py
@@ -53,50 +53,49 @@
 
 import sys
 import os
-import grass.script as grass
+import grass.script as gscript
 from grass.exceptions import CalledModuleError
 
+
 def main():
     global tmp
-    tmp = grass.tempfile()
+    tmp = gscript.tempfile()
 
     vector = options['map']
     layer = options['layer']
     column = options['column']
     where = options['where']
     perc = options['percentile']
-    extend = flags['e']
-    shellstyle = flags['g']
 
-    if not grass.find_file(vector, element='vector')['file']:
-        grass.fatal(_("Vector map <%s> not found") % vector)
+    if not gscript.find_file(vector, element='vector')['file']:
+        gscript.fatal(_("Vector map <%s> not found") % vector)
 
     try:
-        fi = grass.vector_db(vector, stderr = nuldev)[int(layer)]
+        fi = gscript.vector_db(vector, stderr=nuldev)[int(layer)]
     except KeyError:
-        grass.fatal(_("No attribute table linked to layer <%s>") % layer)
-                
+        gscript.fatal(_("No attribute table linked to layer <%s>") % layer)
+
     table = fi['table']
     database = fi['database']
     driver = fi['driver']
-    
+
     passflags = None
     if flags['e']:
-	passflags = 'e'
+        passflags = 'e'
     if flags['g']:
-	if not passflags:
-	    passflags = 'g'
-	else:
-	    passflags = passflags + 'g'
+        if not passflags:
+            passflags = 'g'
+        else:
+            passflags = passflags + 'g'
 
     try:
-        grass.run_command('db.univar', table = table, column = column, 
-                          database = database, driver = driver,
-                          perc = perc, where = where, flags = passflags)
+        gscript.run_command('db.univar', table=table, column=column,
+                            database=database, driver=driver,
+                            perc=perc, where=where, flags=passflags)
     except CalledModuleError:
         sys.exit(1)
-    
+
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gscript.parser()
     nuldev = file(os.devnull, 'w')
     main()
diff --git a/scripts/v.db.update/v.db.update.html b/scripts/v.db.update/v.db.update.html
index f9c53c3..3d50378 100644
--- a/scripts/v.db.update/v.db.update.html
+++ b/scripts/v.db.update/v.db.update.html
@@ -60,6 +60,27 @@ v.db.update mygeodetic_pts col=zval qcol="CAST(z_value AS double precision)" \
             where="z_value <> 'N/A'"
 </pre></div>
 
+<h3>Updating of columns with on the fly calculation (SQLite extended functions)</h3>
+
+North Carolina data set example: adding new column, copying values from
+another table column with on the fly calculation:
+
+<div class="code"><pre>
+g.copy vect=precip_30ynormals,myprecip_30ynormals
+v.db.addcolumn myprecip_30ynormals column="logjuly double precision"
+v.db.update myprecip_30ynormals column="logjuly" query_column="log(jul)" \
+  sqliteextra=$HOME/sqlite_extensions/libsqlitefunctions.so
+
+v.db.select myprecip_30ynormals columns=jul,logjuly
+jul|logjuly
+132.842|4.88916045210132
+127|4.84418708645859
+124.206|4.82194147751127
+104.648|4.65060233738593
+98.298|4.58800368106618
+...
+</pre></div>
+
 
 <h2>SEE ALSO</h2>
 
@@ -80,4 +101,4 @@ v.db.update mygeodetic_pts col=zval qcol="CAST(z_value AS double precision)" \
 Moritz Lennert (mlennert at club.worldonline.be)
 
 <p>
-<i>Last changed: $Date: 2014-12-20 15:33:06 +0100 (Sat, 20 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/scripts/v.db.update/v.db.update.py b/scripts/v.db.update/v.db.update.py
index a12ef5e..6a29ad6 100755
--- a/scripts/v.db.update/v.db.update.py
+++ b/scripts/v.db.update/v.db.update.py
@@ -43,11 +43,18 @@
 #%end
 #%option G_OPT_DB_WHERE
 #%end
+#%option G_OPT_F_INPUT
+#% key: sqliteextra
+#% description: Name of SQLite extension file for extra functions (SQLite backend only)
+#% gisprompt: old,bin,file
+#% required: no
+#%end
 
 import sys
 import os
 import grass.script as grass
 
+
 def main():
     vector = options['map']
     layer = options['layer']
@@ -55,22 +62,31 @@ def main():
     value = options['value']
     qcolumn = options['query_column']
     where = options['where']
+    sqlitefile = options['sqliteextra']
 
     mapset = grass.gisenv()['MAPSET']
 
     # does map exist in CURRENT mapset?
-    if not grass.find_file(vector, element = 'vector', mapset = mapset)['file']:
+    if not grass.find_file(vector, element='vector', mapset=mapset)['file']:
         grass.fatal(_("Vector map <%s> not found in current mapset") % vector)
 
     try:
         f = grass.vector_db(vector)[int(layer)]
     except KeyError:
-        grass.fatal(_('There is no table connected to this map. Run v.db.connect or v.db.addtable first.'))
+        grass.fatal(
+            _('There is no table connected to this map. Run v.db.connect or v.db.addtable first.'))
 
     table = f['table']
     database = f['database']
     driver = f['driver']
 
+    # check for SQLite backend for extra functions
+    if sqlitefile and driver != "sqlite":
+        grass.fatal(_("Use of libsqlitefunctions only with SQLite backend"))
+    if driver == "sqlite" and sqlitefile:
+        if not os.access(sqlitefile, os.R_OK):
+            grass.fatal(_("File <%s> not found") % sqlitefile)
+
     # checking column types
     try:
         coltype = grass.vector_columns(vector, layer)[column]['type']
@@ -93,9 +109,13 @@ def main():
     if where:
         cmd += " WHERE " + where
 
-    grass.verbose("SQL: \"%s\"" % cmd)
+    # SQLite: preload extra functions from extension lib if provided by user
+    if sqlitefile:
+        sqliteload = "SELECT load_extension('%s');\n" % sqlitefile
+        cmd = sqliteload + cmd
 
-    grass.write_command('db.execute', input = '-', database = database, driver = driver, stdin = cmd)
+    grass.verbose("SQL: \"%s\"" % cmd)
+    grass.write_command('db.execute', input='-', database=database, driver=driver, stdin=cmd)
 
     # write cmd history:
     grass.vector_history(vector)
diff --git a/scripts/v.dissolve/v.dissolve.html b/scripts/v.dissolve/v.dissolve.html
index 52f3276..bd41af9 100644
--- a/scripts/v.dissolve/v.dissolve.html
+++ b/scripts/v.dissolve/v.dissolve.html
@@ -76,4 +76,4 @@ module: M. Hamish Bowman, Dept. Marine Science, Otago University, New Zealand<br
 Markus Neteler for column support<br>
 help page: Trevor Wiens
 
-<p><i>Last changed: $Date: 2014-12-27 00:50:11 +0100 (Sat, 27 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-27 00:33:06 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/scripts/v.dissolve/v.dissolve.py b/scripts/v.dissolve/v.dissolve.py
index a8e8b5a..dcca9f1 100755
--- a/scripts/v.dissolve/v.dissolve.py
+++ b/scripts/v.dissolve/v.dissolve.py
@@ -43,7 +43,10 @@ from grass.exceptions import CalledModuleError
 
 def cleanup():
     nuldev = file(os.devnull, 'w')
-    grass.run_command('g.remove', flags = 'f', type = 'vector', name = '%s_%s' % (output, tmp), quiet = True, stderr = nuldev)
+    grass.run_command(
+        'g.remove', flags='f', type='vector', name='%s_%s' %
+        (output, tmp), quiet=True, stderr=nuldev)
+
 
 def main():
     global output, tmp
@@ -53,44 +56,45 @@ def main():
     layer = options['layer']
     column = options['column']
 
-    #### setup temporary file
+    # setup temporary file
     tmp = str(os.getpid())
 
     # does map exist?
-    if not grass.find_file(input, element = 'vector')['file']:
-	grass.fatal(_("Vector map <%s> not found") % input)
-    
+    if not grass.find_file(input, element='vector')['file']:
+        grass.fatal(_("Vector map <%s> not found") % input)
+
     if not column:
-        grass.warning(_("No '%s' option specified. Dissolving based on category values from layer <%s>.") % \
-                          ("column", layer))
-	grass.run_command('v.extract', flags = 'd', input = input,
-			  output = output, type = 'area', layer = layer)
+        grass.warning(
+            _("No '%s' option specified. Dissolving based on category values from layer <%s>.") %
+            ("column", layer))
+        grass.run_command('v.extract', flags='d', input=input,
+                          output=output, type='area', layer=layer)
     else:
         if int(layer) == -1:
             grass.warning(_("Invalid layer number (%d). "
-                            "Parameter '%s' specified, assuming layer '1'.") % 
+                            "Parameter '%s' specified, assuming layer '1'.") %
                           (int(layer), 'column'))
             layer = '1'
         try:
             coltype = grass.vector_columns(input, layer)[column]
         except KeyError:
             grass.fatal(_('Column <%s> not found') % column)
-        
-	if coltype['type'] not in ('INTEGER', 'SMALLINT', 'CHARACTER', 'TEXT'):
-	    grass.fatal(_("Key column must be of type integer or string"))
+
+        if coltype['type'] not in ('INTEGER', 'SMALLINT', 'CHARACTER', 'TEXT'):
+            grass.fatal(_("Key column must be of type integer or string"))
 
         f = grass.vector_layer_db(input, layer)
 
-	table = f['table']
+        table = f['table']
 
-	tmpfile = '%s_%s' % (output, tmp)
+        tmpfile = '%s_%s' % (output, tmp)
 
         try:
             grass.run_command('v.reclass', input=input, output=tmpfile,
                               layer=layer, column=column)
             grass.run_command('v.extract', flags='d', input=tmpfile,
                               output=output, type='area', layer=layer)
-        except CalledModuleError, e:
+        except CalledModuleError as e:
             grass.fatal(_("Final extraction steps failed."
                           " Check above error messages and"
                           " see following details:\n%s") % e)
diff --git a/scripts/v.import/v.import.html b/scripts/v.import/v.import.html
index 2b6b792..0bb595a 100644
--- a/scripts/v.import/v.import.html
+++ b/scripts/v.import/v.import.html
@@ -66,4 +66,4 @@ Markus Metz<br>
 Improvements: Martin Landa, Anna Petrasova
 
 <p>
-<i>Last changed: $Date: 2016-08-06 18:35:16 +0200 (Sat, 06 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-06 18:34:49 +0200 (Sat, 06 Aug 2016) $</i>
diff --git a/scripts/v.import/v.import.py b/scripts/v.import/v.import.py
index 1269d38..8e0201a 100755
--- a/scripts/v.import/v.import.py
+++ b/scripts/v.import/v.import.py
@@ -22,8 +22,12 @@
 #% keyword: import
 #% keyword: projection
 #%end
-#%option G_OPT_F_BIN_INPUT
+#%option
+#% key: input
+#% type: string
+#% required: yes
 #% description: Name of OGR datasource to be imported
+#% gisprompt: old,datasource,datasource
 #% guisection: Input
 #%end
 #%option
@@ -32,6 +36,7 @@
 #% multiple: yes
 #% description: OGR layer name. If not given, all available layers are imported
 #% guisection: Input
+#% gisprompt: old,datasource_layer,datasource_layer
 #%end
 #%option G_OPT_V_OUTPUT
 #% description: Name for output vector map (default: input)
@@ -89,7 +94,7 @@
 #%flag
 #% key: o
 #% label: Override projection check (use current location's projection)
-#% description: Assume that the dataset has same projection as the current location
+#% description: Assume that the dataset has the same projection as the current location
 #%end
 
 import sys
@@ -115,6 +120,7 @@ def cleanup():
 
 def main():
     global TMPLOC, SRCGISRC, GISDBASE
+    overwrite = grass.overwrite()
 
     # list formats and exit
     if flags['f']:
@@ -147,10 +153,10 @@ def main():
         # list datum transform parameters
         if not options['epsg']:
             grass.fatal(_("Missing value for parameter <%s>") % 'epsg')
-        
+
         return grass.run_command('g.proj', epsg=options['epsg'],
                                  datum_trans=options['datum_trans'])
-    
+
     grassenv = grass.gisenv()
     tgtloc = grassenv['LOCATION_NAME']
     tgtmapset = grassenv['MAPSET']
@@ -178,43 +184,47 @@ def main():
     vopts['snap'] = options['snap']
     try:
         grass.run_command('v.in.ogr', input=OGRdatasource,
-                          location=TMPLOC, flags='i', quiet=True, **vopts)
+                          location=TMPLOC, flags='i', quiet=True, overwrite=overwrite, **vopts)
     except CalledModuleError:
         grass.fatal(_("Unable to create location from OGR datasource <%s>") % OGRdatasource)
 
     # switch to temp location
     os.environ['GISRC'] = str(SRCGISRC)
 
-    if options['epsg']: # force given EPSG
+    if options['epsg']:  # force given EPSG
         kwargs = {}
         if options['datum_trans']:
             kwargs['datum_trans'] = options['datum_trans']
         grass.run_command('g.proj', flags='c', epsg=options['epsg'], **kwargs)
-        
+
     # switch to target location
     os.environ['GISRC'] = str(tgtgisrc)
 
     # try v.in.ogr directly
     if flags['o'] or grass.run_command('v.in.ogr', input=OGRdatasource, flags='j',
-                                       errors='status', quiet=True) == 0:
+                                       errors='status', quiet=True, overwrite=overwrite) == 0:
         try:
             grass.run_command('v.in.ogr', input=OGRdatasource,
-                              flags=vflags, **vopts)
-            grass.message(_("Input <%s> successfully imported without reprojection") % OGRdatasource)
+                              flags=vflags, overwrite=overwrite, **vopts)
+            grass.message(
+                _("Input <%s> successfully imported without reprojection") %
+                OGRdatasource)
             return 0
         except CalledModuleError:
             grass.fatal(_("Unable to import <%s>") % OGRdatasource)
 
     # make sure target is not xy
     if grass.parse_command('g.proj', flags='g')['name'] == 'xy_location_unprojected':
-        grass.fatal(_("Coordinate reference system not available for current location <%s>") % tgtloc)
+        grass.fatal(
+            _("Coordinate reference system not available for current location <%s>") %
+            tgtloc)
 
     # switch to temp location
     os.environ['GISRC'] = str(SRCGISRC)
 
     # print projection at verbose level
     grass.verbose(grass.read_command('g.proj', flags='p').rstrip(os.linesep))
-    
+
     # make sure input is not xy
     if grass.parse_command('g.proj', flags='g')['name'] == 'xy_location_unprojected':
         grass.fatal(_("Coordinate reference system not available for input <%s>") % OGRdatasource)
@@ -232,7 +242,7 @@ def main():
         os.environ['GISRC'] = str(SRCGISRC)
         try:
             grass.run_command('v.proj', input=vreg, output=vreg,
-                              location=tgtloc, mapset=tgtmapset, quiet=True)
+                              location=tgtloc, mapset=tgtmapset, quiet=True, overwrite=overwrite)
         except CalledModuleError:
             grass.fatal(_("Unable to reproject to source location"))
 
@@ -244,7 +254,7 @@ def main():
     grass.message(_("Importing <%s> ...") % OGRdatasource)
     try:
         grass.run_command('v.in.ogr', input=OGRdatasource,
-                          flags=vflags, **vopts)
+                          flags=vflags, overwrite=overwrite, **vopts)
     except CalledModuleError:
         grass.fatal(_("Unable to import OGR datasource <%s>") % OGRdatasource)
 
@@ -268,7 +278,7 @@ def main():
     grass.message(_("Reprojecting <%s>...") % output)
     try:
         grass.run_command('v.proj', location=TMPLOC,
-                          mapset='PERMANENT', input=output)
+                          mapset='PERMANENT', input=output, overwrite=overwrite)
     except CalledModuleError:
         grass.fatal(_("Unable to to reproject vector <%s>") % output)
 
diff --git a/scripts/v.in.e00/v.in.e00.html b/scripts/v.in.e00/v.in.e00.html
index 6b821c7..ea41a07 100644
--- a/scripts/v.in.e00/v.in.e00.html
+++ b/scripts/v.in.e00/v.in.e00.html
@@ -22,4 +22,4 @@ automatically detects the presence of such multiple files.
 
 Markus Neteler, Otto Dassau, <a href="http://www.gdf-hannover.de/">GDF Hannover bR</a>, Germany
 
-<p><i>Last changed: $Date: 2015-11-24 09:08:30 +0100 (Tue, 24 Nov 2015) $</i>
+<p><i>Last changed: $Date: 2015-11-24 09:07:58 +0100 (Tue, 24 Nov 2015) $</i>
diff --git a/scripts/v.in.e00/v.in.e00.py b/scripts/v.in.e00/v.in.e00.py
index 0f99716..f2a92b2 100755
--- a/scripts/v.in.e00/v.in.e00.py
+++ b/scripts/v.in.e00/v.in.e00.py
@@ -43,7 +43,7 @@ import shutil
 import glob
 from grass.script.utils import try_rmdir, try_remove, basename
 from grass.script import vector as gvect
-from grass.script import core as grass
+from grass.script import core as gcore
 from grass.exceptions import CalledModuleError
 
 
@@ -54,113 +54,115 @@ def main():
 
     e00tmp = str(os.getpid())
 
-    #### check for avcimport
-    if not grass.find_program('avcimport'):
-	grass.fatal(_("'avcimport' program not found, install it first") +
-		    "\n" +
-		    "http://avce00.maptools.org")
+    # check for avcimport
+    if not gcore.find_program('avcimport'):
+        gcore.fatal(_("'avcimport' program not found, install it first") +
+                    "\n" + "http://avce00.maptools.org")
 
-    #### check for e00conv
-    if not grass.find_program('e00conv'):
-	grass.fatal(_("'e00conv' program not found, install it first") +
-		    "\n" +
-		    "http://avce00.maptools.org")
+    # check for e00conv
+    if not gcore.find_program('e00conv'):
+        gcore.fatal(_("'e00conv' program not found, install it first") +
+                    "\n" + "http://avce00.maptools.org")
 
     # check that the user didn't use all three, which gets past the parser.
-    if type not in ['point','line','area']:
-	grass.fatal(_('Must specify one of "point", "line", or "area".'))
+    if type not in ['point', 'line', 'area']:
+        gcore.fatal(_('Must specify one of "point", "line", or "area".'))
 
     e00name = basename(filename, 'e00')
     # avcimport only accepts 13 chars:
     e00shortname = e00name[:13]
 
-    #check if this is a split E00 file (.e01, .e02 ...):
+    # check if this is a split E00 file (.e01, .e02 ...):
     merging = False
     if os.path.exists(e00name + '.e01') or os.path.exists(e00name + '.E01'):
-	grass.message(_("Found that E00 file is split into pieces (.e01, ...). Merging..."))
-	merging = True
+        gcore.message(_("Found that E00 file is split into pieces (.e01, ...)."
+                        " Merging..."))
+        merging = True
 
     if vect:
-	name = vect
+        name = vect
     else:
-	name = e00name
+        name = e00name
 
-    ### do import
+    # do import
 
-    #make a temporary directory
-    tmpdir = grass.tempfile()
+    # make a temporary directory
+    tmpdir = gcore.tempfile()
     try_remove(tmpdir)
     os.mkdir(tmpdir)
 
-    files = glob.glob(e00name + '.e[0-9][0-9]') + glob.glob(e00name + '.E[0-9][0-9]')
+    files = glob.glob(
+        e00name + '.e[0-9][0-9]') + glob.glob(e00name + '.E[0-9][0-9]')
     for f in files:
-	shutil.copy(f, tmpdir)
+        shutil.copy(f, tmpdir)
 
-    #change to temporary directory to later avoid removal problems (rm -r ...)
+    # change to temporary directory to later avoid removal problems (rm -r ...)
     os.chdir(tmpdir)
 
-    #check for binay E00 file (we can just check if import fails):
-    #avcimport doesn't set exist status :-(
+    # check for binay E00 file (we can just check if import fails):
+    # avcimport doesn't set exist status :-(
 
     if merging:
-	files.sort()
-	filename = "%s.cat.%s.e00" % (e00name, e00tmp)
-	outf = file(filename, 'wb')
-	for f in files:
-	    inf = file(f, 'rb')
-	    shutil.copyfileobj(inf, outf)
-	    inf.close()
-	outf.close()
+        files.sort()
+        filename = "%s.cat.%s.e00" % (e00name, e00tmp)
+        outf = file(filename, 'wb')
+        for f in files:
+            inf = file(f, 'rb')
+            shutil.copyfileobj(inf, outf)
+            inf.close()
+        outf.close()
 
     nuldev = file(os.devnull, 'w+')
 
-    grass.message(_("An error may appear next which will be ignored..."))
-    if grass.call(['avcimport', filename, e00shortname], stdout = nuldev, stderr = nuldev) == 1:
-	grass.message(_("E00 ASCII found and converted to Arc Coverage in current directory"))
+    gcore.message(_("An error may appear next which will be ignored..."))
+    if gcore.call(['avcimport', filename, e00shortname], stdout=nuldev,
+                  stderr=nuldev) == 1:
+        gcore.message(_("E00 ASCII found and converted to Arc Coverage in "
+                        "current directory"))
     else:
-	grass.message(_("E00 Compressed ASCII found. Will uncompress first..."))
-	try_remove(e00shortname)
-	grass.call(['e00conv', filename, e00tmp + '.e00'])
-	grass.message(_("...converted to Arc Coverage in current directory"))
-	grass.call(['avcimport', e00tmp + '.e00', e00shortname], stderr = nuldev)
-
-    #SQL name fix:
+        gcore.message(
+            _("E00 Compressed ASCII found. Will uncompress first..."))
+        try_remove(e00shortname)
+        gcore.call(['e00conv', filename, e00tmp + '.e00'])
+        gcore.message(_("...converted to Arc Coverage in current directory"))
+        gcore.call(['avcimport', e00tmp + '.e00', e00shortname], stderr=nuldev)
+
+    # SQL name fix:
     name = name.replace('-', '_')
 
-    ## let's import...
-    grass.message(_("Importing %ss...") % type)
+    # let's import...
+    gcore.message(_("Importing %ss...") % type)
 
-    layer = dict(point = 'LAB', line = 'ARC', area = ['LAB','ARC'])
-    itype = dict(point = 'point', line = 'line', area = 'centroid')
+    layer = dict(point='LAB', line='ARC', area=['LAB', 'ARC'])
+    itype = dict(point='point', line='line', area='centroid')
 
     try:
-        grass.run_command('v.in.ogr', flags='o', input=e00shortname,
+        gcore.run_command('v.in.ogr', flags='o', input=e00shortname,
                           layer=layer[type], type=itype[type],
                           output=name)
     except CalledModuleError:
-        grass.fatal(_("An error occurred while running v.in.ogr"))
+        gcore.fatal(_("An error occurred while running v.in.ogr"))
 
-    grass.message(_("Imported <%s> vector map <%s>.") % (type, name))
+    gcore.message(_("Imported <%s> vector map <%s>.") % (type, name))
 
-    #### clean up the mess
+    # clean up the mess
     for root, dirs, files in os.walk('.', False):
-	for f in files:
-	    path = os.path.join(root, f)
-	    try_remove(path)
-	for d in dirs:
-	    path = os.path.join(root, d)
-	    try_rmdir(path)
+        for f in files:
+            path = os.path.join(root, f)
+            try_remove(path)
+        for d in dirs:
+            path = os.path.join(root, d)
+            try_rmdir(path)
 
     os.chdir('..')
     os.rmdir(tmpdir)
-	
-    #### end
-    grass.message(_("Done."))
+
+    # end
+    gcore.message(_("Done."))
 
     # write cmd history:
     gvect.vector_history(name)
 
 if __name__ == "__main__":
-    options, flags = grass.parser()
+    options, flags = gcore.parser()
     main()
-
diff --git a/scripts/v.in.geonames/v.in.geonames.py b/scripts/v.in.geonames/v.in.geonames.py
index d28a05f..92517a8 100755
--- a/scripts/v.in.geonames/v.in.geonames.py
+++ b/scripts/v.in.geonames/v.in.geonames.py
@@ -37,11 +37,12 @@
 import os
 import grass.script as grass
 
+
 def main():
-    infile  = options['input']
+    infile = options['input']
     outfile = options['output']
-    
-    #are we in LatLong location?
+
+    # are we in LatLong location?
     s = grass.read_command("g.proj", flags='j')
     kv = grass.parse_key_val(s)
     if kv['+proj'] != 'longlat':
@@ -55,7 +56,8 @@ def main():
     kv = grass.db_connection()
     dbfdriver = kv['driver'] == 'dbf'
     if dbfdriver:
-        grass.warning(_("Since DBF driver is used, the content of the 'alternatenames' column might be cut with respect to the original Geonames.org column content"))
+        grass.warning(
+            _("Since DBF driver is used, the content of the 'alternatenames' column might be cut with respect to the original Geonames.org column content"))
 
     with open(infile) as f:
         num_places = sum(1 for _ in f)
@@ -87,55 +89,54 @@ def main():
 
     # geonameid|name|asciiname|alternatenames|latitude|longitude|featureclass|featurecode|countrycode|cc2|admin1code|admin2code|admin3code|admin4code|population|elevation|gtopo30|timezone|modificationdate
 
-
     # debug:
     # head -n 3 ${TMPFILE}.csv
 
     # use different column names limited to 10 chars for dbf
     if dbfdriver:
         columns = ['geonameid integer',
-           'name varchar(200)',
-           'asciiname varchar(200)',
-           'altname varchar(4000)',
-           'latitude double precision',
-           'longitude double precision',
-           'featrclass varchar(1)',
-           'featrcode varchar(10)',
-           'cntrycode varchar(2)',
-           'cc2 varchar(60)',
-           'admin1code varchar(20)',
-           'admin2code varchar(20)',
-           'admin3code varchar(20)',
-           'admin4code varchar(20)',
-           'population integer',
-           'elevation integer',
-           'gtopo30 integer',
-           'timezone varchar(50)',
-           'mod_date date']
+                   'name varchar(200)',
+                   'asciiname varchar(200)',
+                   'altname varchar(4000)',
+                   'latitude double precision',
+                   'longitude double precision',
+                   'featrclass varchar(1)',
+                   'featrcode varchar(10)',
+                   'cntrycode varchar(2)',
+                   'cc2 varchar(60)',
+                   'admin1code varchar(20)',
+                   'admin2code varchar(20)',
+                   'admin3code varchar(20)',
+                   'admin4code varchar(20)',
+                   'population integer',
+                   'elevation integer',
+                   'gtopo30 integer',
+                   'timezone varchar(50)',
+                   'mod_date date']
     else:
         columns = ['geonameid integer',
-           'name varchar(200)',
-           'asciiname varchar(200)',
-           'alternatename varchar(4000)',
-           'latitude double precision',
-           'longitude double precision',
-           'featureclass varchar(1)',
-           'featurecode varchar(10)',
-           'countrycode varchar(2)',
-           'cc2 varchar(60)',
-           'admin1code varchar(20)',
-           'admin2code varchar(20)',
-           'admin3code varchar(20)',
-           'admin4code varchar(20)',
-           'population integer',
-           'elevation integer',
-           'gtopo30 integer',
-           'timezone varchar(50)',
-           'modification date']
-
-    grass.run_command('v.in.ascii', cat = 0, x = 6, y = 5, sep = 'tab',
-              input = infile, output = outfile,
-              columns = columns)
+                   'name varchar(200)',
+                   'asciiname varchar(200)',
+                   'alternatename varchar(4000)',
+                   'latitude double precision',
+                   'longitude double precision',
+                   'featureclass varchar(1)',
+                   'featurecode varchar(10)',
+                   'countrycode varchar(2)',
+                   'cc2 varchar(60)',
+                   'admin1code varchar(20)',
+                   'admin2code varchar(20)',
+                   'admin3code varchar(20)',
+                   'admin4code varchar(20)',
+                   'population integer',
+                   'elevation integer',
+                   'gtopo30 integer',
+                   'timezone varchar(50)',
+                   'modification date']
+
+    grass.run_command('v.in.ascii', cat=0, x=6, y=5, sep='tab',
+                      input=infile, output=outfile,
+                      columns=columns)
 
     # write cmd history:
     grass.vector_history(outfile)
@@ -143,4 +144,3 @@ def main():
 if __name__ == "__main__":
     options, flags = grass.parser()
     main()
-
diff --git a/scripts/v.in.lines/v.in.lines.py b/scripts/v.in.lines/v.in.lines.py
index 34aa598..5996a02 100755
--- a/scripts/v.in.lines/v.in.lines.py
+++ b/scripts/v.in.lines/v.in.lines.py
@@ -41,9 +41,11 @@ import string
 from grass.script.utils import separator, try_remove
 from grass.script import core as grass
 
+
 def cleanup():
     try_remove(tmp)
 
+
 def main():
     global tmp
 
@@ -57,11 +59,9 @@ def main():
     else:
         do3D = ''
 
-
     tmp = grass.tempfile()
 
-
-    #### set up input file
+    # set up input file
     if options['input'] == '-':
         infile = None
         inf = sys.stdin
@@ -71,7 +71,6 @@ def main():
             grass.fatal(_("Unable to read input file <%s>") % infile)
         grass.debug("input file=[%s]" % infile)
 
-
     if not infile:
         # read from stdin and write to tmpfile (v.in.mapgen wants a real file)
         outf = file(tmp, 'w')
@@ -99,8 +98,7 @@ def main():
             outf.close()
             runfile = tmp
 
-
-    ##### check that there are at least two columns (three if -z is given)
+    # check that there are at least two columns (three if -z is given)
     inf = file(runfile)
     for line in inf:
         if len(line.lstrip()) == 0 or line[0] == '#':
@@ -111,9 +109,8 @@ def main():
     if (do3D and numcols < 3) or (not do3D and numcols < 2):
         grass.fatal(_("Not enough data columns. (incorrect fs setting?)"))
 
-
-    grass.run_command('v.in.mapgen', flags = 'f' + do3D,
-                      input = runfile, output = options['output'])
+    grass.run_command('v.in.mapgen', flags='f' + do3D,
+                      input=runfile, output=options['output'])
 
 
 if __name__ == "__main__":
diff --git a/scripts/v.in.mapgen/v.in.mapgen.py b/scripts/v.in.mapgen/v.in.mapgen.py
index d9fcdd5..1d850fa 100755
--- a/scripts/v.in.mapgen/v.in.mapgen.py
+++ b/scripts/v.in.mapgen/v.in.mapgen.py
@@ -34,7 +34,7 @@
 #%end
 #%flag
 #% key: z
-#% description: Create a 3D vector points map from 3 column Matlab data 
+#% description: Create a 3D vector points map from 3 column Matlab data
 #%end
 #%option G_OPT_F_INPUT
 #% description: Name of input file in Mapgen/Matlab format
@@ -59,6 +59,7 @@ def cleanup():
     try_remove(tmp)
     try_remove(tmp + '.dig')
 
+
 def main():
     global tmp
 
@@ -89,32 +90,32 @@ def main():
 
     tmp = grass.tempfile()
 
-    #### create ascii vector file
+    # create ascii vector file
     inf = file(infile)
     outf = file(tmp, 'w')
 
     grass.message(_("Importing data..."))
-    cat = 1   
+    cat = 1
     if matlab:
-        ## HB:  OLD v.in.mapgen.sh Matlab import command follows.
-        ##    I have no idea what it's all about, so "new" matlab format will be
-        ##    a series of x y with "nan nan" breaking lines. (as NOAA provides)
-        ##  Old command:
+        # HB:  OLD v.in.mapgen.sh Matlab import command follows.
+        # I have no idea what it's all about, so "new" matlab format will be
+        # a series of x y with "nan nan" breaking lines. (as NOAA provides)
+        # Old command:
         #  tac $infile | $AWK 'BEGIN { FS="," ; R=0 }
         #    $1~/\d*/   { printf("L %d\n", R) }
         #    $1~/   .*/ { printf(" %lf %lf\n", $2, $1) ; ++R }
         #    $1~/END/   { }' | tac > "$TMP"
 
-        ## matlab format.
+        # matlab format.
         points = []
- 
+
         for line in inf:
             f = line.split()
             if f[0].lower() == 'nan':
                 if points != []:
                     outf.write("L %d 1\n" % len(points))
                     for point in points:
-                        outf.write(" %.15g %.15g %.15g\n" % tuple(map(float,point)))
+                        outf.write(" %.15g %.15g %.15g\n" % tuple(map(float, point)))
                     outf.write(" 1 %d\n" % cat)
                     cat += 1
                 points = []
@@ -122,7 +123,7 @@ def main():
                 if len(f) == 2:
                     f.append('0')
                 points.append(f)
-        
+
         if points != []:
             outf.write("L %d 1\n" % len(points))
             for point in points:
@@ -131,36 +132,36 @@ def main():
                 except ValueError:
                     grass.fatal(_("An error occurred on line '%s', exiting.") % line.strip())
             outf.write(" 1 %d\n" % cat)
-            cat += 1       
+            cat += 1
     else:
-        ## mapgen format.
+        # mapgen format.
         points = []
         for line in inf:
             if line[0] == '#':
                 if points != []:
                     outf.write("L %d 1\n" % len(points))
                     for point in points:
-                        outf.write(" %.15g %.15g\n" % tuple(map(float,point)))
+                        outf.write(" %.15g %.15g\n" % tuple(map(float, point)))
                     outf.write(" 1 %d\n" % cat)
                     cat += 1
                 points = []
             else:
                 points.append(line.rstrip('\r\n').split('\t'))
-        
+
         if points != []:
             outf.write("L %d 1\n" % len(points))
             for point in points:
-                outf.write(" %.15g %.15g\n" % tuple(map(float,point)))
+                outf.write(" %.15g %.15g\n" % tuple(map(float, point)))
             outf.write(" 1 %d\n" % cat)
             cat += 1
     outf.close()
     inf.close()
 
-    #### create digit header
+    # create digit header
     digfile = tmp + '.dig'
     outf = file(digfile, 'w')
-    t = string.Template(\
-"""ORGANIZATION: GRASSroots organization
+    t = string.Template(
+        """ORGANIZATION: GRASSroots organization
 DIGIT DATE:   $date
 DIGIT NAME:   $user@$host
 MAP NAME:     $name
@@ -175,12 +176,12 @@ VERTI:
     year = time.strftime("%Y")
     user = os.getenv('USERNAME') or os.getenv('LOGNAME')
     host = os.getenv('COMPUTERNAME') or os.uname()[1]
-    
-    s = t.substitute(prog = prog, name = name, date = date, year = year,
-                     user = user, host = host)
+
+    s = t.substitute(prog=prog, name=name, date=date, year=year,
+                     user=user, host=host)
     outf.write(s)
-    
-    #### process points list to ascii vector file (merge in vertices)
+
+    # process points list to ascii vector file (merge in vertices)
     inf = file(tmp)
     shutil.copyfileobj(inf, outf)
     inf.close()
@@ -188,13 +189,13 @@ VERTI:
     outf.close()
 
     if not name:
-        #### if no name for vector file given, cat to stdout
+        # if no name for vector file given, cat to stdout
         inf = file(digfile)
         shutil.copyfileobj(inf, sys.stdout)
         inf.close()
     else:
-        #### import to binary vector file
-        grass.message(_("Importing with v.in.ascii...")) 
+        # import to binary vector file
+        grass.message(_("Importing with v.in.ascii..."))
         try:
             grass.run_command('v.in.ascii', flags=do3D, input=digfile,
                               output=name, format='standard')
@@ -205,4 +206,3 @@ if __name__ == "__main__":
     options, flags = grass.parser()
     atexit.register(cleanup)
     main()
-
diff --git a/scripts/v.in.wfs/v.in.wfs.py b/scripts/v.in.wfs/v.in.wfs.py
index 8758040..018b715 100755
--- a/scripts/v.in.wfs/v.in.wfs.py
+++ b/scripts/v.in.wfs/v.in.wfs.py
@@ -64,7 +64,7 @@
 #%end
 #%flag
 #% key: l
-#todo #% description: List available layers and exit
+# todo #% description: List available layers and exit
 #% description: Download server capabilities to 'wms_capabilities.xml' in the current directory and exit
 #% suppress_required: yes
 #%end
@@ -78,7 +78,11 @@ import os
 import sys
 from grass.script.utils import try_remove
 from grass.script import core as grass
-import urllib
+try:
+    from urllib import urlopen
+except ImportError:
+    from urllib.request import urlopen
+
 
 def main():
     out = options['output']
@@ -104,7 +108,7 @@ def main():
             grass.fatal('Features begin with index "1"')
 
     if flags['r']:
-        bbox = grass.read_command("g.region", flags = 'w').split('=')[1]
+        bbox = grass.read_command("g.region", flags='w').split('=')[1]
         wfs_url += '&BBOX=' + bbox
 
     if flags['l']:
@@ -116,13 +120,13 @@ def main():
     grass.debug(wfs_url)
 
     grass.message(_("Retrieving data..."))
-    inf = urllib.urlopen(wfs_url)
+    inf = urlopen(wfs_url)
     outf = file(tmpxml, 'wb')
     while True:
-	s = inf.read()
-	if not s:
-	    break
-	outf.write(s)
+        s = inf.read()
+        if not s:
+            break
+        outf.write(s)
     inf.close()
     outf.close()
 
@@ -135,7 +139,6 @@ def main():
         try_remove(tmpxml)
         sys.exit(0)
 
-
     grass.message(_("Importing data..."))
     try:
         grass.run_command('v.in.ogr', flags='o', input=tmpxml, output=out)
diff --git a/scripts/v.krige/Makefile b/scripts/v.krige/Makefile
deleted file mode 100644
index ab8d3f1..0000000
--- a/scripts/v.krige/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-MODULE_TOPDIR = ../..
-
-PGM = v.krige
-
-include $(MODULE_TOPDIR)/include/Make/Script.make
-
-default: script
diff --git a/scripts/v.krige/v.krige.html b/scripts/v.krige/v.krige.html
deleted file mode 100644
index e35be28..0000000
--- a/scripts/v.krige/v.krige.html
+++ /dev/null
@@ -1,197 +0,0 @@
-<h2>DESCRIPTION</h2>
-
-<em>v.krige</em> allows performing Kriging operations in GRASS GIS
-environment, using R software functions in background.
-
-
-<h2>NOTES</h2>
-
-<em>v.krige</em> is just a front-end to R. The options and parameters
-are the same offered by packages <i>automap</i> and <i>gstat</i>.
-
-<p>Kriging, like other interpolation methods, is fully dependent on input
-data features. Exploratory analysis of data is encouraged to find out
-outliers, trends, anisotropies, uneven distributions and consequently
-choose the kriging algorithm that will give the most acceptable
-result. Good knowledge of the dataset is more valuable than hundreds
-of parameters or powerful hardware. See Isaaks and Srivastava's book,
-exhaustive and clear even if a bit outdated.
-
-
-<h3>Dependencies</h3>
-
-<dl>
-<dt><b>R software >= 2.x</b></dt>
-<dd></dd>
-
-<dt><b>rpy2</b></dt>
-<dd>Python binding to R. Note! <tt>rpy</tt> version 1 is not supported.</dd>
-
-<dt><b>R packages automap, gstat, rgrass7 and rgeos. </b></dt>
-<dd>automap is optional (provides automatic variogram fit).</dd>
-</dl>
-
-Install the packages via R command line (or your preferred GUI):
-<div class="code"><pre>
-  install.packages("rgeos", dep=T)
-  install.packages("gstat", dep=T)
-  install.packages("rgrass7", dep=T)
-  install.packages("automap", dep=T)
-</pre></div>
-
-<h4>Notes for Debian GNU/Linux</h4>
-
-Install the dependiencies. <b>Attention! python-rpy IS NOT
-SUITABLE.</b>:
-
-<div class="code"><pre>
-  aptitude install R python-rpy2
-</pre></div>
-
-To install R packages, use either R's functions listed above (as root or as user),
-either the Debian packages [5], add to repositories' list
-for 32bit or 64bit (pick up the suitable line):
-
-<div class="code"><pre>
-  deb <a href="http://debian.cran.r-project.org/cran2deb/debian-i386">http://debian.cran.r-project.org/cran2deb/debian-i386</a> testing/
-  deb <a href="http://debian.cran.r-project.org/cran2deb/debian-amd64">http://debian.cran.r-project.org/cran2deb/debian-amd64</a> testing/
-</pre></div>
-
-and get the packages via aptitude:
-
-<div class="code"><pre>
-  aptitude install r-cran-gstat r-cran-rgrass7
-</pre></div>
-
-<h4>Notes for Windows</h4>
-
-<!-- this is probably the wrong place -->
-
-Compile GRASS GIS following this
-<a href="http://trac.osgeo.org/grass/wiki/CompileOnWindows">guide</a>.
-You could also use Linux in a virtual machine. Or install Linux in a
-separate partition of the HD. This is not as painful as it appears,
-there are lots of guides over the Internet to help you.
-
-<h3>Computation time issues</h3>
-
-Please note that although high number of input data points and/or high 
-region resolution contribute to a better output, both will also slow down
-the kriging calculation.
-
-<h2>EXAMPLES</h2>
-
-Kriging example based on elevation map (Spearfish data set).
-
-<p><b>Part 1: random sampling</b> of 2000 vector points from known
-elevation map. Each point will receive the elevation value from the
-elevation raster, as if it came from a point survey.
-
-<div class="code"><pre>
-# reduce resolution for this example
-g.region raster=elevation -p res=100
-v.random output=rand2k_elev npoints=2000
-v.db.addtable map=rand2k_elev columns="elevation double precision"
-v.what.rast map=rand2k_elev raster=elevation column=elevation
-</pre></div>
-
-<b>Part 2: remove points lacking elevation attributes</b>. Points
-sampled at the border of the elevation map didn't receive any
-value. v.krige has no preferred action to cope with no data values, so
-the user must check for them and decide what to do (remove points,
-fill with the value of the nearest point, fill with the global/local
-mean...). In the following line of code, points with no data are
-removed from the map.
-
-<div class="code"><pre>
-v.extract input=rand2k_elev output=rand2k_elev_filt where="elevation not NULL"
-</pre></div>
-
-Check the result of previous line ("number of NULL attributes" must be
-0):
-
-<div class="code"><pre>
-v.univar map=rand2k_elev_filt type=point column=elevation
-</pre></div>
-
-<b>Part 3: reconstruct DEM through kriging</b>. The simplest way to run 
-<em>v.krige</em> from CLI is using automatic variogram fit (note:
-requires R's automap package). Output map name is optional, the
-modules creates it automatically appending "_kriging" to the input
-map name and also checks for overwrite. If output_var is specified,
-the variance map is also created. Automatic variogram fit is provided
-by R package automap. The variogram models tested by the fitting
-functions are: exponential, spherical, Gaussian, Matern, M.Stein's
-parametrisation. A wider range of models is available from gstat
-package and can be tested on the GUI via the variogram plotting. If a
-model is specified in the CLI, also sill, nugget and range values are
-to be provided, otherwise an error is raised (see second example of
-<em>v.krige</em> command).
-
-<div class="code"><pre>
-# automatic variogram fit
-v.krige input=rand2k_elev_filt column=elevation \
-        output=rand2k_elev_kriging output_var=rand2k_elev_kriging_var
-
-# define variogram model, create variance map as well
-v.krige input=rand2k_elev_filt column=elevation \
-        output=rand2k_elev_filt_kriging output_var=rand2k_elev_filt_kriging_var \
-        model=Mat sill=2500 nugget=0 range=1000 
-</pre></div>
-
-Or run wxGUI, to interactively fit the variogram and explore options:
-
-<div class="code"><pre>
-v.krige
-</pre></div>
-
-<b>Calculate prediction error</b>:
-
-<div class="code"><pre>
-r.mapcalc "rand2k_elev_kriging_pe = sqrt(rand2k_elev_kriging_var)"
-r.univar map=elevation
-r.univar map=rand2k_elev_kriging
-r.univar map=rand2k_elev_kriging_pe
-</pre></div>
-
-The results show high errors, as the kriging techniques (ordinary and
-block kriging) are unable to handle a dataset with a trend, like the
-one used in this example: elevation is higher in the southwest corner
-and lower on northeast corner. Universal kriging can give far better
-results in these cases as it can handle the trend. It is available in
-R package gstat and will be part in a future v.krige release.
-
-
-<h2>SEE ALSO</h2>
-
-R package <a href="http://cran.r-project.org/web/packages/gstat/index.html">gstat</a>,
-maintained by Edzer J. Pebesma and others
-
-<p>
-R
-package <a href="http://cran.r-project.org/web/packages/rgrass7/index.html">rgrass7</a>,
-maintained by Roger Bivand
-
-<p>
-The <a href="http://grasswiki.osgeo.org/wiki/R_statistics">Short
-Introduction to Geostatistical and Spatial Data Analysis with GRASS GIS
-and R statistical data language</a> at the GRASS Wiki (includes
-installation tips). It contains a subsection about <b>rgrass7</b>.
-
-<p>
-v.krige's <a href="http://grasswiki.osgeo.org/wiki/V.krige_GSoC_2009">wiki page</a>
-
-<p>
-Overview: <a href="https://grasswiki.osgeo.org/wiki/Interpolation">Interpolation and Resampling</a> in GRASS GIS
-
-<h2>REFERENCES</h2>
-
-Isaaks and Srivastava, 1989: "An Introduction to Applied Geostatistics"
- (ISBN 0-19-505013-4) 
-
-
-<h2>AUTHOR</h2>
-
-Anne Ghisla, Google Summer of Code 2009
-
-<p><i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/scripts/v.krige/v.krige.py b/scripts/v.krige/v.krige.py
deleted file mode 100644
index 9d2ef40..0000000
--- a/scripts/v.krige/v.krige.py
+++ /dev/null
@@ -1,424 +0,0 @@
-#!/usr/bin/env python
-"""
-MODULE:    v.krige
-
-AUTHOR(S): Anne Ghisla <a.ghisla AT gmail.com>
-
-PURPOSE:   Performs ordinary or block kriging
-
-DEPENDS:   R 2.x, packages gstat, maptools and rgrass7, optional: automap
-
-COPYRIGHT: (C) 2009-2014 the GRASS Development Team
-
-This program is free software under the GNU General Public
-License (>=v2). Read the file COPYING that comes with GRASS
-for details.
-"""
-
-## g.parser information
-
-#%module
-#% description: Performs ordinary or block kriging for vector maps.
-#% keyword: vector
-#% keyword: interpolation
-#% keyword: raster
-#% keyword: kriging
-#%end
-
-#%option G_OPT_V_INPUT
-#% description: Name of point vector map containing sample data
-#%end
-#%option G_OPT_DB_COLUMN
-#% description: Name of attribute column with numerical value to be interpolated
-#% required: yes
-#%end
-#%option G_OPT_R_OUTPUT
-#% label: Name for output raster map
-#% description: If omitted, will be <input name>_kriging
-#% required : no
-#%end
-#%option
-#% key: package
-#% type: string
-#% options: gstat
-#% answer: gstat
-#% description: R package to use
-#% required: no
-#%end
-#%option
-#% key: model
-#% type: string
-#% options: Nug,Exp,Sph,Gau,Exc,Mat,Ste,Cir,Lin,Bes,Pen,Per,Hol,Log,Pow,Spl,Leg,Err,Int
-#% multiple: yes
-#% label: Variogram model(s)
-#% description: Leave empty to test all models (requires automap)
-#% required: no
-#%end
-#%option
-#% key: block
-#% type: integer
-#% multiple: no
-#% label: Block size (square block)
-#% description: Block size. Used by block kriging.
-#% required: no
-#%end
-#%option
-#% key: range
-#% type: integer
-#% label: Range value
-#% description: Automatically fixed if not set
-#% required : no
-#%end
-#%option
-#% key: nugget
-#% type: integer
-#% label: Nugget value
-#% description: Automatically fixed if not set
-#% required : no
-#%end
-#%option
-#% key: sill
-#% type: integer
-#% label: Sill value
-#% description: Automatically fixed if not set
-#% required : no
-#%end
-#%option G_OPT_R_OUTPUT
-#% key: output_var
-#% label: Name for output variance raster map
-#% description: If omitted, will be <input name>_kriging.var
-#% required : no
-#%end
-
-import os, sys
-from tempfile import gettempdir
-import time
-import thread
-
-if not os.environ.has_key("GISBASE"):
-    print "You must be in GRASS GIS to run this program."
-    sys.exit(1)
-
-### i18N
-import gettext
-gettext.install('grasswxpy', os.path.join(os.getenv("GISBASE"), 'locale'), unicode = True)
-
-### dependencies to be checked once, as they are quite time-consuming. cfr. grass.parser.
-# GRASS binding
-try:
-    import grass.script as grass
-except ImportError:
-    sys.exit(_("No GRASS-python library found"))
-    
-# move other checks in functions, as R?
-
-# globals
-
-#~ Command = None
-#~ InputData = None
-#~ Variogram = None
-#~ VariogramFunction = None
-#~ robjects = None
-#~ rinterface = None
-
-#classes in alphabetical order. methods in logical order :)
-
-# <2.5 class definition, without () - please test 
-class Controller:
-    """ Executes analysis. For the moment, only with gstat functions."""
-    # moved here the global variables
-    def __init__(self):
-        #~ self.Command = None
-        self.InputData = None
-        self.Variogram = None
-        #~ VariogramFunction = None
-        #~ robjects = None
-        #~ rinterface = None
-    
-    def ImportMap(self, map, column):
-        """ Imports GRASS map as SpatialPointsDataFrame and adds x/y columns to attribute table.
-        Checks for NULL values in the provided column and exits if they are present."""
-
-        #@NOTE: new way with R - as it doesn't alter original data
-        Rpointmap = robjects.r.readVECT(map, type =  'point')
-        # checks if x,y columns are present in dataframe. If they do are present, but with different names,
-        # they'll be duplicated.
-        if "x" not in robjects.r.names(Rpointmap): 
-            # extract coordinates with S4 method
-            coordinatesPreDF = robjects.r['as.data.frame'](robjects.r.coordinates(Rpointmap))
-            coordinatesDF = robjects.r['data.frame'](x = coordinatesPreDF.rx('coords.x1')[0],
-                                                     y = coordinatesPreDF.rx('coords.x2')[0])
-            # match coordinates with data slot of SpatialPointsDataFrame - maptools function
-            # match is done on row.names
-            Rpointmap = robjects.r.spCbind(Rpointmap, coordinatesDF)
-            
-        # GRASS checks for null values in the chosen column. R can hardly handle column as a variable,
-        # looks for a hardcoded string.
-        cols = grass.vector_columns(map=map, layer=1)
-        nulls = int(grass.parse_command('v.univar',
-                                        map=map,
-                                        column=column,
-                                        type='point',
-                                        parse = (grass.parse_key_val,
-                                                 {'sep':': '}
-                                                 )
-                                        )['number of NULL attributes'])
-        if nulls > 0: 
-            grass.fatal(_("%d NULL value(s) in the selected column - unable to perform kriging.") % nulls)
-        return Rpointmap
-    
-    def CreateGrid(self, inputdata):
-        Region = grass.region()
-        Grid = robjects.r.gmeta2grd()
-
-        # addition of coordinates columns into dataframe.
-        coordinatesDF = robjects.r['as.data.frame'](robjects.r.coordinates(Grid))
-        data = robjects.r['data.frame'](x = coordinatesDF.rx('s1')[0],
-                                        y = coordinatesDF.rx('s2')[0],
-                                        k = robjects.r.rep(1, Region['cols']*Region['rows']))
-        GridPredicted = robjects.r.SpatialGridDataFrame(Grid,
-                                                        data,
-                                                        proj4string =  robjects.r.CRS(robjects.r.proj4string(inputdata)))
-        return GridPredicted
-    
-    def ComposeFormula(self, column, isblock):
-        if isblock is True:
-            predictor = 'x+y'
-        else:
-            predictor = '1'
-        print column + "~" + predictor
-        Formula = robjects.Formula(column + "~" + predictor)
-        return Formula
-    
-    def FitVariogram(self, formula, inputdata, sill, nugget, range, model = ''):
-        """ Fits variogram either automagically either specifying all parameters.
-        Returns a list containing data and model variograms. """
-        
-        Variograms = {}
-        
-        if model is '':
-            robjects.r.require('automap')
-            DottedParams = {}
-            #print (nugget.r_repr(), sill, range)
-            DottedParams['fix.values'] = robjects.r.c(nugget, range, sill)
-            
-            VariogramModel = robjects.r.autofitVariogram(formula, inputdata, **DottedParams)
-            #print robjects.r.warnings()
-            Variograms['datavariogram'] = VariogramModel.rx('exp_var')[0]
-            Variograms['variogrammodel'] = VariogramModel.rx('var_model')[0]
-            # obtain the model name. *Too* complicated to get the string instead of level, unlike R does.
-            VariogramAsDF = robjects.r['as.data.frame'](VariogramModel.rx('var_model')[0]) # force conversion
-            ModelDF = VariogramAsDF.rx('model')[0]
-            Variograms['model'] = ModelDF.levels[ModelDF[1] - 1]
-        else:
-            DataVariogram = robjects.r['variogram'](formula, inputdata)
-            VariogramModel = robjects.r['fit.variogram'](DataVariogram,
-                                                         model = robjects.r.vgm(psill = sill,
-                                                                                model = model,
-                                                                                nugget = nugget,
-                                                                                range = range))
-            Variograms['datavariogram'] = DataVariogram
-            Variograms['variogrammodel'] = VariogramModel
-            Variograms['model'] = model
-        return Variograms
-    
-    def DoKriging(self, formula, inputdata, grid, model, block):
-        DottedParams = {'debug.level': -1} # let krige() print percentage status
-        if block is not '': #@FIXME(anne): but it's a string!! and krige accepts it!!
-            DottedParams['block'] = block
-        #print DottedParams
-        KrigingResult = robjects.r.krige(formula, inputdata, grid, model, **DottedParams)
-        return KrigingResult
- 
-    def ExportMap(self, map, column, name, overwrite, command, variograms):
-        # add kriging parameters to raster map history
-        robjects.r.writeRAST(map, vname = name, zcol = column, overwrite = overwrite)
-        grass.run_command('r.support',
-                          map = name,
-                          title = 'Kriging output',
-                          history = 'Issued from command v.krige ' + command)
-        if command.find('model') is -1: # if the command has no model option, add automap chosen model
-                    grass.run_command('r.support',
-                                      map = name,
-                                      history = 'Model chosen by automatic fitting: ' + variograms['model'])
-        
-    def Run(self, input, column, output, package, sill, nugget, range, logger, \
-            overwrite, model, block, output_var, command, **kwargs):
-        """ Wrapper for all functions above. """
-
-        logger.message(_("Processing %d cells. Computing time raises "
-                         "exponentially with resolution." % grass.region()['cells']))
-        logger.message(_("Importing data..."))
-
-        if self.InputData is None:
-            self.InputData = self.ImportMap(input, column)
-        # and from here over, InputData refers to the global variable
-        #print(robjects.r.slot(InputData, 'data').names)
-        logger.message(_("Data successfully imported."))
-        
-        GridPredicted = self.CreateGrid(self.InputData)
-        
-        logger.message(_("Fitting variogram..."))
-
-        if block is not '':
-            self.predictor = 'x+y'
-        else:
-            self.predictor = '1'
-        if self.Variogram is None:
-            self.Variogram = self.FitVariogram(robjects.Formula(column + "~" + self.predictor),
-                                          self.InputData,
-                                          model = model,
-                                          sill = sill,
-                                          nugget = nugget,
-                                          range = range)
-        logger.message(_("Variogram fitting complete."))
-        
-        logger.message(_("Kriging..."))
-        KrigingResult = self.DoKriging(robjects.Formula(column + "~" + self.predictor), self.InputData,
-                 GridPredicted, self.Variogram['variogrammodel'], block) # using global ones
-        logger.message(_("Kriging complete."))
-        
-        self.ExportMap(map = KrigingResult,
-                       column='var1.pred',
-                       name = output,
-                       overwrite = overwrite,
-                       command = command,
-                       variograms = self.Variogram)
-        if output_var is not '':
-            self.ExportMap(map = KrigingResult,
-                           column='var1.var',
-                           name = output_var,
-                           overwrite = overwrite,
-                           command = command,
-                           variograms = self.Variogram)
-        
-def main(argv = None):
-    """ Main. Calls either GUI or CLI, depending on arguments provided. """
-    #@FIXME: solve this double ifelse. the control should not be done twice.
-    
-    controller = Controller()
-    
-    if argv is None:
-        importR()
-        argv = sys.argv[1:] # stripping first item, the full name of this script
-        # wxGUI call
-        if not os.getenv("GRASS_WXBUNDLED"):
-            from core import globalvar
-            globalvar.CheckForWx()
-        from modules import vkrige as GUI
-        
-        import wx
-        
-        app = wx.App()
-        KrigingFrame = GUI.KrigingModule(parent = None,
-                                         Rinstance = robjects,
-                                         controller = controller)
-        KrigingFrame.Centre()
-        KrigingFrame.Show()
-        app.MainLoop()
-        
-    else:
-        #CLI
-        options, flags = argv
-        
-        #@TODO: Work on verbosity. Sometimes it's too verbose (R), sometimes not enough.
-        if grass.find_file(options['input'], element = 'vector')['fullname'] is '':
-            grass.fatal(_("Vector map <%s> not found") % options['input'] )
-        
-        #@TODO: elaborate input string, if contains mapset or not.. thanks again to Bob for testing on 64bit.
-        
-        # create output map name, if not specified
-        if options['output'] is '':
-            try: # to strip mapset name from fullname. Ugh.
-                options['input'] = options['input'].split("@")[0]
-            except:
-                pass
-            options['output'] = options['input'] + '_kriging'
-
-        # check for output map with same name. g.parser can't handle this, afaik.
-        if grass.find_file(options['output'], element = 'cell')['fullname'] \
-           and os.getenv("GRASS_OVERWRITE") == None:
-            grass.fatal(_("option: <output>: Raster map already exists."))
-
-        if options['output_var'] is not '' \
-           and (grass.find_file(options['output_var'], element = 'cell')['fullname'] \
-           and os.getenv("GRASS_OVERWRITE") == None):
-            grass.fatal(_("option: <output>: Variance raster map already exists."))
-
-        importR()        
-        if options['model'] is '':
-            try:
-                robjects.r.require("automap")
-            except ImportError as e:
-                grass.fatal(_("R package automap is missing, no variogram autofit available."))
-        else:
-            if options['sill'] is '' or options['nugget'] is '' or options['range'] is '':
-                grass.fatal(_("You have specified model, but forgot at least one of sill, nugget and range."))
-        
-        #@TODO: let GRASS remount its commandstring. Until then, keep that 4 lines below.
-        #print grass.write_command(argv)
-        command = ""
-        notnulloptions = {}
-        for k, v in options.items():
-            if v is not '':
-                notnulloptions[k] = v
-        command = command.join("%s=%s " % (k, v) for k, v in notnulloptions.items())
-        
-        # re-cast integers from strings, as parser() cast everything to string.
-        for each in ("sill","nugget","range"):
-            if options[each] is not '':
-                options[each] = int(options[each])
-            else:
-                options[each] = robjects.r('''NA''')
-        
-        #controller = Controller()
-        controller.Run(input = options['input'],
-                       column = options['column'],
-                       output = options['output'],
-                       overwrite = os.getenv("GRASS_OVERWRITE") == 1,
-                       package = options['package'],
-                       model = options['model'],
-                       block = options['block'],
-                       sill = options['sill'],
-                       nugget = options['nugget'],
-                       range = options['range'],
-                       output_var = options['output_var'],
-                       command = command,
-                       logger = grass)
-    
-def importR():
-    # R
-    # unuseful since rpy2 will complain adequately.
-    # try:
-    #    #@FIXME: in Windows, it launches R terminal
-    #    grass.find_program('R')
-    # except:
-    #    sys.exit(_("R is not installed. Install it and re-run, or modify environment variables."))
-    
-    # rpy2
-    global robjects
-    global rinterface
-    grass.message(_('Loading dependencies, please wait...'))
-    try:
-        import rpy2.robjects as robjects
-        import rpy2.rinterface as rinterface #to speed up kriging? for plots.
-    except ImportError:
-        # ok for other OSes?
-        grass.fatal(_("Python module 'Rpy2' not found. Please install it and re-run v.krige."))
-        
-    # R packages check. Will create one error message after check of all packages.
-    missingPackagesList = []
-    for each in ["rgeos", "gstat", "rgrass7", "maptools"]:
-        if not robjects.r.require(each, quietly = True)[0]:
-            missingPackagesList.append(each)
-    if missingPackagesList:
-        errorString = _("R package(s) ") + \
-                      ", ".join(map(str, missingPackagesList)) + \
-                      _(" missing. Install it/them and re-run v.krige.")
-        grass.fatal(errorString)
-    
-if __name__ == '__main__':
-    if len(sys.argv) > 1:
-        sys.exit(main(argv = grass.parser()))
-    else:
-        main()
diff --git a/scripts/v.pack/v.pack.html b/scripts/v.pack/v.pack.html
index a8f32c8..bec6404 100644
--- a/scripts/v.pack/v.pack.html
+++ b/scripts/v.pack/v.pack.html
@@ -43,4 +43,4 @@ v.unpack input=random_point.pack
 
 Luca Delucchi, Fondazione E. Mach (Italy), based on the <em>r.pack</em> code
 
-<p><i>Last changed: $Date: 2015-09-05 17:56:17 +0200 (Sat, 05 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-05 17:57:08 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/v.pack/v.pack.py b/scripts/v.pack/v.pack.py
index 2efb55b..2ec7617 100755
--- a/scripts/v.pack/v.pack.py
+++ b/scripts/v.pack/v.pack.py
@@ -43,36 +43,38 @@ from grass.script.utils import try_rmdir, try_remove
 from grass.script import core as grass
 from grass.script import vector as vector
 
+
 def cleanup():
     try_rmdir(basedir)
 
+
 def main():
     infile = options['input']
     compression_off = flags['c']
-    
+
     global basedir
     basedir = grass.tempdir()
-    
+
     # check if vector map exists
-    gfile = grass.find_file(infile, element = 'vector')
+    gfile = grass.find_file(infile, element='vector')
     if not gfile['name']:
         grass.fatal(_("Vector map <%s> not found") % infile)
-    
+
     # check if input vector map is in the native format
     if vector.vector_info(gfile['fullname'])['format'] != 'native':
-        grass.fatal(_("Unable to pack vector map <%s>. Only native format supported.") % \
-                        gfile['fullname'])
-    
+        grass.fatal(_("Unable to pack vector map <%s>. Only native format supported.") %
+                    gfile['fullname'])
+
     # split the name if there is the mapset name
     if infile.find('@'):
         infile = infile.split('@')[0]
-    
+
     # output name
     if options['output']:
         outfile = options['output']
     else:
         outfile = infile + '.pack'
-    
+
     # check if exists the output file
     if os.path.exists(outfile):
         if os.getenv('GRASS_OVERWRITE'):
@@ -80,33 +82,33 @@ def main():
             try_remove(outfile)
         else:
             grass.fatal(_("option <%s>: <%s> exists.") % ("output", outfile))
-    
+
     # prepare for packing
     grass.verbose(_("Packing <%s>...") % (gfile['fullname']))
-    
-    # write tar file, optional compression 
+
+    # write tar file, optional compression
     if compression_off:
-        tar = tarfile.open(name = outfile, mode = 'w:')
+        tar = tarfile.open(name=outfile, mode='w:')
     else:
-        tar = tarfile.open(name = outfile, mode = 'w:gz')
+        tar = tarfile.open(name=outfile, mode='w:gz')
     tar.add(gfile['file'], infile)
-    
-    # check if exist a db connection for the vector 
+
+    # check if exist a db connection for the vector
     db_vect = vector.vector_db(gfile['fullname'])
     if not db_vect:
         grass.verbose(_('There is not database connected with vector map <%s>') % gfile['fullname'])
     else:
         # for each layer connection save a table in sqlite database
         sqlitedb = os.path.join(basedir, 'db.sqlite')
-        for i, dbconn in db_vect.iteritems():
-            grass.run_command('db.copy', from_driver = dbconn['driver'], 
-                              from_database = dbconn['database'],
-                              from_table =  dbconn['table'], 
-                              to_driver = 'sqlite', to_database = sqlitedb, 
-                              to_table = dbconn['table'])
+        for i, dbconn in db_vect.items():
+            grass.run_command('db.copy', from_driver=dbconn['driver'],
+                              from_database=dbconn['database'],
+                              from_table=dbconn['table'],
+                              to_driver='sqlite', to_database=sqlitedb,
+                              to_table=dbconn['table'])
         tar.add(sqlitedb, 'db.sqlite')
-    
-    # add to the tar file the PROJ files to check when unpack file    
+
+    # add to the tar file the PROJ files to check when unpack file
     gisenv = grass.gisenv()
     for support in ['INFO', 'UNITS', 'EPSG']:
         path = os.path.join(gisenv['GISDBASE'], gisenv['LOCATION_NAME'],
@@ -114,9 +116,9 @@ def main():
         if os.path.exists(path):
             tar.add(path, 'PROJ_' + support)
     tar.close()
-    
+
     grass.message(_("Pack file <%s> created") % os.path.join(os.getcwd(), outfile))
-            
+
 if __name__ == "__main__":
     options, flags = grass.parser()
     atexit.register(cleanup)
diff --git a/scripts/v.rast.stats/testsuite/test_v_rast_stats.py b/scripts/v.rast.stats/testsuite/test_v_rast_stats.py
new file mode 100644
index 0000000..3609a74
--- /dev/null
+++ b/scripts/v.rast.stats/testsuite/test_v_rast_stats.py
@@ -0,0 +1,72 @@
+"""Test of r.univar
+
+ at author Soeren Gebbert
+"""
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+
+class TestRastStats(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Use temporary region settings"""
+        cls.use_temp_region()
+
+    @classmethod
+    def tearDownClass(cls):
+        """!Remove the temporary region
+        """
+        cls.del_temp_region()
+
+    def tearDown(self):
+        self.runModule("g.remove", flags='f', type="raster", name="map_a")
+        self.runModule("g.remove", flags='f', type="raster", name="map_b")
+        self.runModule("g.remove", flags='f', type="raster", name="zone_map")
+
+    def setUp(self):
+        """Create input data
+        """
+        self.runModule("g.region", res=1, n=90, s=0, w=0, e=90)
+        self.runModule("r.mapcalc", expression="map_a = 100 + row() + col()",
+                       overwrite=True)
+        self.runModule("r.mapcalc", expression="zone_map = if(row() < 20, 1,2)",
+                       overwrite=True)
+        self.runModule("r.to.vect", input="zone_map", output="zone_map",
+                       type="area", overwrite=True)
+
+    def test_1(self):
+        # Output of v.rast.stats
+        univar_string = """cat|value|label|a_minimum|a_maximum|a_sum
+1|1||102|209|265905
+2|2||121|280|1281195
+"""
+
+        self.assertModule("v.rast.stats", map="zone_map", raster="map_a",
+                          method=["minimum", "maximum", "sum"], flags="c",
+                          column_prefix="a")
+        v_db_select = SimpleModule("v.db.select", map="zone_map")
+
+        self.runModule(v_db_select)
+        self.assertLooksLike(univar_string, v_db_select.outputs.stdout)
+
+
+class TestRastStatsFails(TestCase):
+
+    def test_error_handling_a(self):
+        # No vector map
+        self.assertModuleFail("v.rast.stats", raster="map_a",
+                              column_prefix="a")
+
+    def test_error_handling_b(self):
+        # No raster map
+        self.assertModuleFail("v.rast.stats", map="zone_map",
+                              column_prefix="a")
+
+    def test_error_handling_d(self):
+        # No column_prefix
+        self.assertModuleFail("v.rast.stats", map="zone_map", raster="map_b")
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/scripts/v.rast.stats/v.rast.stats.html b/scripts/v.rast.stats/v.rast.stats.html
index 514a3ac..5b7c528 100644
--- a/scripts/v.rast.stats/v.rast.stats.html
+++ b/scripts/v.rast.stats/v.rast.stats.html
@@ -66,4 +66,4 @@ v.univar myzipcodes_wake column=elev_range type=centroid
 
 Markus Neteler, CEA (for the <a href="http://www.eden-fp6project.net/">EDEN EU/FP6 Project</a>)
 
-<p><i>Last changed: $Date: 2015-12-31 16:14:52 +0100 (Thu, 31 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-12-31 16:13:32 +0100 (Thu, 31 Dec 2015) $</i>
diff --git a/scripts/v.rast.stats/v.rast.stats.py b/scripts/v.rast.stats/v.rast.stats.py
index f1c768d..79ec071 100644
--- a/scripts/v.rast.stats/v.rast.stats.py
+++ b/scripts/v.rast.stats/v.rast.stats.py
@@ -79,7 +79,7 @@ def cleanup():
 def main():
     global tmp, sqltmp, tmpname, nuldev, vector, rastertmp
     rastertmp = False
-    #### setup temporary files
+    # setup temporary files
     tmp = grass.tempfile()
     sqltmp = tmp + ".sql"
     # we need a random name
@@ -146,13 +146,15 @@ def main():
     try:
         fi = grass.vector_db(map=vector)[int(layer)]
     except KeyError:
-        grass.fatal(_('There is no table connected to this map. Run v.db.connect or v.db.addtable first.'))
+        grass.fatal(
+            _('There is no table connected to this map. Run v.db.connect or v.db.addtable first.'))
     # we need this for non-DBF driver:
     dbfdriver = fi['driver'] == 'dbf'
 
     # Find out which table is linked to the vector map on the given layer
     if not fi['table']:
-        grass.fatal(_('There is no table connected to this map. Run v.db.connect or v.db.addtable first.'))
+        grass.fatal(
+            _('There is no table connected to this map. Run v.db.connect or v.db.addtable first.'))
 
     # replaced by user choiche
     #basecols = ['n', 'min', 'max', 'range', 'mean', 'stddev', 'variance', 'cf_var', 'sum']
@@ -206,7 +208,7 @@ def main():
         if currcolumn in grass.vector_columns(vector, layer).keys():
             if not flags['c']:
                 grass.fatal((_("Cannot create column <%s> (already present). ") % currcolumn) +
-                             _("Use -c flag to update values in this column."))
+                            _("Use -c flag to update values in this column."))
         else:
             if i == "n":
                 coltype = "INTEGER"
@@ -231,7 +233,7 @@ def main():
     f = file(sqltmp, 'w')
 
     # do the stats
-    p = grass.pipe_command('r.univar', flags='t' + 'g' + extstat, map=raster,
+    p = grass.pipe_command('r.univar', flags='t' + extstat, map=raster,
                            zones=rastertmp, percentile=percentile, sep=';')
 
     first_line = 1
@@ -252,8 +254,9 @@ def main():
                 variable = variables_dbf[variable]
             i = variables[variable]
             value = vars[i]
-            # convert nan, +nan, -nan to NULL
-            if value.lower().endswith('nan'):
+            # convert nan, +nan, -nan, inf, +inf, -inf, Infinity, +Infinity,
+            # -Infinity to NULL
+            if value.lower().endswith('nan') or 'inf' in value.lower():
                 value = 'NULL'
             if not first_var:
                 f.write(" , ")
@@ -276,7 +279,9 @@ def main():
                          " of vector map <{vector}>."
                          ).format(raster=raster, vector=vector)))
     except CalledModuleError:
-        grass.warning(_("Failed to upload statistics to attribute table of vector map <%s>.") % vector)
+        grass.warning(
+            _("Failed to upload statistics to attribute table of vector map <%s>.") %
+            vector)
         exitcode = 1
 
     sys.exit(exitcode)
diff --git a/scripts/v.report/v.report.py b/scripts/v.report/v.report.py
index 6af5692..7fece02 100755
--- a/scripts/v.report/v.report.py
+++ b/scripts/v.report/v.report.py
@@ -47,6 +47,7 @@ import sys
 import os
 import grass.script as grass
 
+
 def uniq(l):
     result = []
     last = None
@@ -56,6 +57,7 @@ def uniq(l):
             last = i
     return result
 
+
 def main():
     mapname = options['map']
     option = options['option']
@@ -75,13 +77,13 @@ def main():
         colnames = ['cat']
 
     if option == 'coor':
-        columns = ['dummy1','dummy2','dummy3']
-        extracolnames = ['x','y','z']
+        columns = ['dummy1', 'dummy2', 'dummy3']
+        extracolnames = ['x', 'y', 'z']
     else:
         columns = ['dummy1']
         extracolnames = [option]
 
-    if units in ['p','percent']:
+    if units in ['p', 'percent']:
         unitsp = 'meters'
     elif units:
         unitsp = units
@@ -90,7 +92,7 @@ def main():
 
     # NOTE: we suppress -1 cat and 0 cat
     if isConnection:
-        p = grass.pipe_command('v.db.select', quiet = True, flags='c', map = mapname, layer = layer)
+        p = grass.pipe_command('v.db.select', quiet=True, flags='c', map=mapname, layer=layer)
         records1 = []
         for line in p.stdout:
             cols = line.rstrip('\r\n').split('|')
@@ -100,23 +102,23 @@ def main():
         p.wait()
         if p.returncode != 0:
             sys.exit(1)
-        
+
         records1.sort()
 
         if len(records1) == 0:
             try:
-                f = grass.vector_db(map = mapname)[int(layer)]
+                f = grass.vector_db(map=mapname)[int(layer)]
                 grass.fatal(_("There is a table connected to input vector map '%s', but"
                               "there are no categories present in the key column '%s'. Consider using"
                               "v.to.db to correct this.") % (mapname, f['key']))
             except KeyError:
                 pass
 
-        #fetch the requested attribute sorted by cat:
-        p = grass.pipe_command('v.to.db', flags = 'p',
-                               quiet = True,
-                               map = mapname, option = option, columns = columns,
-                               layer = layer, units = unitsp)
+        # fetch the requested attribute sorted by cat:
+        p = grass.pipe_command('v.to.db', flags='p',
+                               quiet=True,
+                               map=mapname, option=option, columns=columns,
+                               layer=layer, units=unitsp)
         records2 = []
         for line in p.stdout:
             fields = line.rstrip('\r\n').split('|')
@@ -126,7 +128,7 @@ def main():
         p.wait()
         records2.sort()
 
-        #make pre-table
+        # make pre-table
         # len(records1) may not be the same as len(records2) because
         # v.db.select can return attributes that are not linked to features.
         records3 = []
@@ -134,7 +136,7 @@ def main():
             records3.append(filter(lambda r1: r1[0] == r2[0], records1)[0] + r2[1:])
     else:
         records1 = []
-        p = grass.pipe_command('v.category', inp = mapname, layer = layer, option = 'print')
+        p = grass.pipe_command('v.category', inp=mapname, layer=layer, option='print')
         for line in p.stdout:
             field = int(line.rstrip())
             if field > 0:
@@ -143,13 +145,14 @@ def main():
         records1.sort()
         records1 = uniq(records1)
 
-        #make pre-table
-        p = grass.pipe_command('v.to.db', flags = 'p',
-                               map = mapname, option = option, columns = columns,
-                               layer = layer, units = unitsp)
+        # make pre-table
+        p = grass.pipe_command('v.to.db', flags='p',
+                               quiet=True,
+                               map=mapname, option=option, columns=columns,
+                               layer=layer, units=unitsp)
         records3 = []
         for line in p.stdout:
-            fields = line.split('|')
+            fields = line.rstrip('\r\n').split('|')
             if fields[0] in ['cat', '-1', '0']:
                 continue
             records3.append([int(fields[0])] + fields[1:])
@@ -159,11 +162,11 @@ def main():
     # print table header
     sys.stdout.write('|'.join(colnames + extracolnames) + '\n')
 
-    #make and print the table:
+    # make and print the table:
     numcols = len(colnames) + len(extracolnames)
 
     # calculate percents if requested
-    if units != '' and units in ['p','percent']:
+    if units != '' and units in ['p', 'percent']:
         # calculate total area value
         areatot = 0
         for r in records3:
@@ -176,12 +179,12 @@ def main():
     # sort results
     if options['sort']:
         if options['sort'] == 'asc':
-            records3.sort(key = lambda r: r[-1])
+            records3.sort(key=lambda r: r[-1])
         else:
-            records3.sort(key = lambda r: r[-1], reverse = True)
-    
+            records3.sort(key=lambda r: r[-1], reverse=True)
+
     for r in records3:
-        sys.stdout.write('|'.join(map(str,r)) + '\n')
+        sys.stdout.write('|'.join(map(str, r)) + '\n')
 
 if __name__ == "__main__":
     options, flags = grass.parser()
diff --git a/scripts/v.to.lines/v.to.lines.html b/scripts/v.to.lines/v.to.lines.html
index c558a48..8250797 100644
--- a/scripts/v.to.lines/v.to.lines.html
+++ b/scripts/v.to.lines/v.to.lines.html
@@ -47,4 +47,4 @@ v.to.lines input=geodetic_pts output=geodetic_pts_lines
 Luca Delucchi, Fondazione Edmund Mach
 
 <p>
-<i>Last changed: $Date: 2015-01-07 21:53:11 +0100 (Wed, 07 Jan 2015) $</i>
+<i>Last changed: $Date: 2015-01-07 21:51:53 +0100 (Wed, 07 Jan 2015) $</i>
diff --git a/scripts/v.unpack/test_suite/test.v.unpack.sh b/scripts/v.unpack/testsuite/test.v.unpack.sh
similarity index 100%
rename from scripts/v.unpack/test_suite/test.v.unpack.sh
rename to scripts/v.unpack/testsuite/test.v.unpack.sh
diff --git a/scripts/v.unpack/v.unpack.html b/scripts/v.unpack/v.unpack.html
index df9515e..12a964b 100644
--- a/scripts/v.unpack/v.unpack.html
+++ b/scripts/v.unpack/v.unpack.html
@@ -34,4 +34,4 @@ v.unpack input=random_point.pack
 Luca Delucchi, Fondazione E. Mach (Italy), based on the <em>r.unpack</em> code
 
 <p>
-<i>Last changed: $Date: 2015-09-05 17:56:17 +0200 (Sat, 05 Sep 2015) $</i>
+<i>Last changed: $Date: 2015-09-05 17:57:08 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/scripts/v.unpack/v.unpack.py b/scripts/v.unpack/v.unpack.py
index 591f610..127a933 100644
--- a/scripts/v.unpack/v.unpack.py
+++ b/scripts/v.unpack/v.unpack.py
@@ -35,7 +35,6 @@
 #% label: Override projection check (use current location's projection)
 #% description: Assume that the dataset has same projection as the current location
 #% guisection: Output settings
-#% guisection: Output settings
 #%end
 
 import os
@@ -117,7 +116,8 @@ def main():
     skip_projection_check = False
     if not os.path.exists(os.path.join(tmp_dir, 'PROJ_INFO')):
         if os.path.exists(loc_proj):
-            grass.fatal(_("PROJ_INFO file is missing, unpack vector map in XY (unprojected) location."))
+            grass.fatal(
+                _("PROJ_INFO file is missing, unpack vector map in XY (unprojected) location."))
         skip_projection_check = True  # XY location
 
     if not skip_projection_check:
@@ -125,14 +125,14 @@ def main():
         if not grass.compare_key_value_text_files(filename_a=os.path.join(tmp_dir, 'PROJ_INFO'),
                                                   filename_b=loc_proj, proj=True):
             diff_result_1 = diff_files(os.path.join(tmp_dir, 'PROJ_INFO'),
-                                             loc_proj)
-    
+                                       loc_proj)
+
         if not grass.compare_key_value_text_files(filename_a=os.path.join(tmp_dir, 'PROJ_UNITS'),
                                                   filename_b=loc_proj_units,
                                                   units=True):
             diff_result_2 = diff_files(os.path.join(tmp_dir, 'PROJ_UNITS'),
-                                             loc_proj_units)
-    
+                                       loc_proj_units)
+
         if diff_result_1 or diff_result_2:
             if flags['o']:
                 grass.warning(_("Projection information does not match. Proceeding..."))
@@ -168,7 +168,7 @@ def main():
         # check if dbf or sqlite directory exists
         if dbconn['driver'] == 'dbf' and not os.path.exists(os.path.join(mset_dir, 'dbf')):
             os.mkdir(os.path.join(mset_dir, 'dbf'))
-	elif dbconn['driver'] == 'sqlite' and not os.path.exists(os.path.join(mset_dir, 'sqlite')):
+        elif dbconn['driver'] == 'sqlite' and not os.path.exists(os.path.join(mset_dir, 'sqlite')):
             os.mkdir(os.path.join(mset_dir, 'sqlite'))
         # for each old connection
         for t in dbnlist:
diff --git a/scripts/v.what.strds/testsuite/test_what_strds.py b/scripts/v.what.strds/testsuite/test_what_strds.py
index 3e1ffeb..bc2f6f3 100644
--- a/scripts/v.what.strds/testsuite/test_what_strds.py
+++ b/scripts/v.what.strds/testsuite/test_what_strds.py
@@ -21,12 +21,12 @@ class TestWhatStrds(TestCase):
         """Initiate the temporal GIS and set the region
         """
         cls.use_temp_region()
-        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,
-                      res=10,  res3=10)
-        cls.runModule("r.mapcalc", expression="a_1 = 100",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a_2 = 200",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a_3 = 300",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a_4 = 400",  overwrite=True)
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50,
+                      res=10, res3=10)
+        cls.runModule("r.mapcalc", expression="a_1 = 100", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_2 = 200", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_3 = 300", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_4 = 400", overwrite=True)
 
         cls.runModule("v.random", output="points", npoints=3, seed=1,
                       overwrite=True)
diff --git a/scripts/v.what.strds/v.what.strds.py b/scripts/v.what.strds/v.what.strds.py
index 22f17aa..0c7408b 100644
--- a/scripts/v.what.strds/v.what.strds.py
+++ b/scripts/v.what.strds/v.what.strds.py
@@ -60,6 +60,7 @@ from grass.exceptions import CalledModuleError
 
 
 class Sample(object):
+
     def __init__(self, start=None, end=None, raster_names=None,
                  strds_name=None):
         self.start = start
@@ -151,9 +152,9 @@ def main():
                               "datasets must be equal\n<%(a)s> of type "
                               "%(type_a)s do not match <%(b)s> of type "
                               "%(type_b)s" % {"a": first_strds.get_id(),
-                               "type_a": first_strds.get_temporal_type(),
-                               "b": dataset.get_id(),
-                               "type_b": dataset.get_temporal_type()}))
+                                              "type_a": first_strds.get_temporal_type(),
+                                              "b": dataset.get_id(),
+                                              "type_b": dataset.get_temporal_type()}))
 
         mapmatrizes = tgis.sample_stds_by_stds_topology("strds", "strds",
                                                         strds_names,
@@ -162,7 +163,7 @@ def main():
                                                         "equal", False,
                                                         False)
 
-        for i in xrange(len(mapmatrizes[0])):
+        for i in range(len(mapmatrizes[0])):
             isvalid = True
             mapname_list = []
             for mapmatrix in mapmatrizes:
@@ -200,14 +201,14 @@ def main():
         pymap.open('r')
     except:
         dbif.close()
-        grass.fatal(_("It is not possible to open the new map %s" % output))
+        grass.fatal(_("Unable to create vector map <%s>" % output))
 
     if len(pymap.dblinks) == 0:
         try:
             grass.run_command("v.db.addtable", map=output)
         except CalledModuleError:
             dbif.close()
-            grass.fatal(_("Impossible add table to vector %s" % output))
+            grass.fatal(_("Unable to add table <%s> to vector map <%s>" % output))
     pymap.close()
     for sample in samples:
         raster_names = sample.raster_names
diff --git a/scripts/v.what.vect/v.what.vect.html b/scripts/v.what.vect/v.what.vect.html
index ac0be0d..17837ea 100644
--- a/scripts/v.what.vect/v.what.vect.html
+++ b/scripts/v.what.vect/v.what.vect.html
@@ -62,7 +62,8 @@ v.what.vect corine_code111_112_cities query_map=geonames_IT_cities column=gnamei
 <a href="v.distance.html">v.distance</a>,
 <a href="v.rast.stats.html">v.rast.stats</a>,
 <a href="v.what.rast.html">v.what.rast</a>,
-<a href="v.what.rast3.html">v.what.rast3</a>
+<a href="v.what.rast3.html">v.what.rast3</a>,
+<a href="v.vect.stats.html">v.vect.stats</a>
 </em>
 
 
@@ -70,4 +71,4 @@ v.what.vect corine_code111_112_cities query_map=geonames_IT_cities column=gnamei
 
 Markus Neteler
 
-<p><i>Last changed: $Date: 2015-10-07 10:15:43 +0200 (Wed, 07 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2016-08-22 04:16:33 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/scripts/v.what.vect/v.what.vect.py b/scripts/v.what.vect/v.what.vect.py
index 5c1ac52..7e5ac33 100755
--- a/scripts/v.what.vect/v.what.vect.py
+++ b/scripts/v.what.vect/v.what.vect.py
@@ -25,8 +25,10 @@
 
 #%option G_OPT_V_MAP
 #% label: Name of vector points map for which to edit attributes
+#% guidependency: layer,column
 #%end
 #%option G_OPT_V_FIELD
+#% guidependency: column
 #%end
 #%option G_OPT_DB_COLUMN
 #% description: Name of attribute column to be updated with the query result
@@ -36,9 +38,11 @@
 #% key: query_map
 #% label: Name of vector map to be queried
 #% required : yes
+#% guidependency: query_layer,query_column
 #%end
 #%option G_OPT_V_FIELD
 #% key: query_layer
+#% guidependency: query_column
 #%end
 #%option G_OPT_DB_COLUMN
 #% key: query_column
diff --git a/scripts/wxpyimgview/wxpyimgview.html b/scripts/wxpyimgview/wxpyimgview.html
index e8d345f..97c0018 100644
--- a/scripts/wxpyimgview/wxpyimgview.html
+++ b/scripts/wxpyimgview/wxpyimgview.html
@@ -22,4 +22,4 @@ a constant size, rather than being truncated whenever it is updated.
 <h2>AUTHOR</h2>
 Glynn Clements
 
-<p><i>Last changed: $Date: 2014-11-03 18:56:30 +0100 (Mon, 03 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-10-27 18:15:56 +0100 (Mon, 27 Oct 2014) $</i>
diff --git a/scripts/wxpyimgview/wxpyimgview.py b/scripts/wxpyimgview/wxpyimgview.py
index 011916a..2cde7f1 100644
--- a/scripts/wxpyimgview/wxpyimgview.py
+++ b/scripts/wxpyimgview/wxpyimgview.py
@@ -16,7 +16,7 @@
 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 #  GNU General Public License for more details.
 #
-#############################################################################/
+# /
 
 #%module
 #% description: Views BMP images from the PNG driver.
@@ -43,7 +43,7 @@ import grass.script as grass
 
 if __name__ == "__main__":
     options, flags = grass.parser()
-    image   = options['image']
+    image = options['image']
     percent = options['percent']
     python = os.getenv('GRASS_PYTHON', 'python')
     gisbase = os.environ['GISBASE']
diff --git a/scripts/wxpyimgview/wxpyimgview_gui.py b/scripts/wxpyimgview/wxpyimgview_gui.py
index 34b080d..83eed79 100644
--- a/scripts/wxpyimgview/wxpyimgview_gui.py
+++ b/scripts/wxpyimgview/wxpyimgview_gui.py
@@ -16,7 +16,7 @@
 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 #  GNU General Public License for more details.
 #
-#############################################################################/
+# /
 
 #%module
 #% description: Views BMP images from the PNG driver.
@@ -46,124 +46,127 @@ import wxversion
 wxversion.select('2.8')
 import wx
 
+
 class Frame(wx.Frame):
     title = "Image Viewer"
 
     def __init__(self, app, size):
-	self.app = app
-	wx.Frame.__init__(self, None, title = Frame.title, size = size)
-	self.Create()
+        self.app = app
+        wx.Frame.__init__(self, None, title=Frame.title, size=size)
+        self.Create()
 
     def Create(self):
-	self.Bind(wx.EVT_ERASE_BACKGROUND, self.erase)
-	self.Bind(wx.EVT_PAINT, self.redraw)
+        self.Bind(wx.EVT_ERASE_BACKGROUND, self.erase)
+        self.Bind(wx.EVT_PAINT, self.redraw)
 
-	self.Bind(wx.EVT_TIMER, self.tick, id = 1)
-	self.timer = wx.Timer(self, 1)
-	self.timer.Start(100, True)
+        self.Bind(wx.EVT_TIMER, self.tick, id=1)
+        self.timer = wx.Timer(self, 1)
+        self.timer.Start(100, True)
 
-	# Python doesn't receive signals while wx is waiting for an event
-	self.Bind(wx.EVT_TIMER, self.dummy, id = 2)
-	self.ticker = wx.Timer(self, 2)
-	self.ticker.Start(100, False)
+        # Python doesn't receive signals while wx is waiting for an event
+        self.Bind(wx.EVT_TIMER, self.dummy, id=2)
+        self.ticker = wx.Timer(self, 2)
+        self.ticker.Start(100, False)
 
     def erase(self, ev):
-	ev.GetDC();
+        ev.GetDC()
 
     def draw(self):
-	app = self.app
-	size = self.GetSize()
-	x0 = (size.GetWidth()  - app.i_width) / 2
-	y0 = (size.GetHeight() - app.i_height) / 2
-	dc = wx.PaintDC(self)
-	data = app.imgbuf.reshape((app.i_height, app.i_width, 4))
-	data = data[::,::,2::-1]
-	fn = getattr(data, "tobytes", getattr(data, "tostring"))
-	image = wx.ImageFromData(app.i_width, app.i_height, fn())
-	dc.DrawBitmap(wx.BitmapFromImage(image), x0, y0, False)
+        app = self.app
+        size = self.GetSize()
+        x0 = (size.GetWidth() - app.i_width) / 2
+        y0 = (size.GetHeight() - app.i_height) / 2
+        dc = wx.PaintDC(self)
+        data = app.imgbuf.reshape((app.i_height, app.i_width, 4))
+        data = data[::, ::, 2::-1]
+        fn = getattr(data, "tobytes", getattr(data, "tostring"))
+        image = wx.ImageFromData(app.i_width, app.i_height, fn())
+        dc.DrawBitmap(wx.BitmapFromImage(image), x0, y0, False)
 
     def redraw(self, ev):
-	if self.app.fraction > 0.001:
-	    t0 = time.time()
-	    self.draw()
-	    t1 = time.time()
+        if self.app.fraction > 0.001:
+            t0 = time.time()
+            self.draw()
+            t1 = time.time()
 
-	    last = t1 - t0
-	    delay = last / self.app.fraction
-	    self.timer.Start(int(delay * 1000), True)
-	else:
-	    self.draw()
+            last = t1 - t0
+            delay = last / self.app.fraction
+            self.timer.Start(int(delay * 1000), True)
+        else:
+            self.draw()
 
     def tick(self, ev):
-	self.Refresh()
+        self.Refresh()
 
     def dummy(self, ev):
-	pass
+        pass
+
 
 class Application(wx.App):
+
     def __init__(self):
-	self.image = sys.argv[1]
-	self.fraction = int(sys.argv[2]) / 100.0
-	self.HEADER_SIZE = 64
-	wx.App.__init__(self)
+        self.image = sys.argv[1]
+        self.fraction = int(sys.argv[2]) / 100.0
+        self.HEADER_SIZE = 64
+        wx.App.__init__(self)
 
     def read_bmp_header(self, header):
-	magic, bmfh, bmih = struct.unpack("2s12s40s10x", header)
+        magic, bmfh, bmih = struct.unpack("2s12s40s10x", header)
 
-	if magic != 'BM':
-	    raise SyntaxError("Invalid magic number")
+        if magic != 'BM':
+            raise SyntaxError("Invalid magic number")
 
-	size, res1, res2, hsize = struct.unpack("<IHHI", bmfh)
+        size, res1, res2, hsize = struct.unpack("<IHHI", bmfh)
 
-	if hsize != self.HEADER_SIZE:
-	    raise SyntaxError("Invalid file header size")
+        if hsize != self.HEADER_SIZE:
+            raise SyntaxError("Invalid file header size")
 
-	hsize, width, height, planes, bpp, compression, imsize, xppm, yppm, cused, cimp = \
-	       struct.unpack("<IiiHHIIiiII", bmih)
+        hsize, width, height, planes, bpp, compression, imsize, xppm, yppm, cused, cimp = \
+            struct.unpack("<IiiHHIIiiII", bmih)
 
-	if hsize != 40:
-	    raise SyntaxError("Invalid info header size")
+        if hsize != 40:
+            raise SyntaxError("Invalid info header size")
 
-	self.i_width = width
-	self.i_height = -height
+        self.i_width = width
+        self.i_height = -height
 
-	if planes != 1:
-	    raise SyntaxError("Planar data not supported")
-	if bpp != 32:
-	    raise SyntaxError("Only 32-BPP images supported")
-	if compression != 0:
-	    raise SyntaxError("Compression not supported")
-	if imsize != self.i_width * self.i_height * 4:
-	    raise SyntaxError("Invalid image data size")
-	if size != self.HEADER_SIZE + self.i_width * self.i_height * 4:
-	    raise SyntaxError("Invalid image size")
+        if planes != 1:
+            raise SyntaxError("Planar data not supported")
+        if bpp != 32:
+            raise SyntaxError("Only 32-BPP images supported")
+        if compression != 0:
+            raise SyntaxError("Compression not supported")
+        if imsize != self.i_width * self.i_height * 4:
+            raise SyntaxError("Invalid image data size")
+        if size != self.HEADER_SIZE + self.i_width * self.i_height * 4:
+            raise SyntaxError("Invalid image size")
 
     def map_file(self):
-	f = open(self.image, 'r')
+        f = open(self.image, 'r')
 
-	header = f.read(self.HEADER_SIZE)
-	self.read_bmp_header(header)
+        header = f.read(self.HEADER_SIZE)
+        self.read_bmp_header(header)
 
-	self.imgbuf = numpy.memmap(f, mode = 'r', offset = self.HEADER_SIZE)
+        self.imgbuf = numpy.memmap(f, mode='r', offset=self.HEADER_SIZE)
 
     def signal_handler(self, sig, frame):
-	wx.CallAfter(self.mainwin.Refresh);
+        wx.CallAfter(self.mainwin.Refresh)
 
     def set_handler(self):
-	if 'SIGUSR1' in dir(signal):
-	    signal.signal(signal.SIGUSR1, self.signal_handler)
+        if 'SIGUSR1' in dir(signal):
+            signal.signal(signal.SIGUSR1, self.signal_handler)
 
     def OnInit(self):
-	self.map_file()
+        self.map_file()
 
-	size = wx.Size(self.i_width, self.i_height)
-	self.mainwin = Frame(self, size)
-	self.mainwin.Show()
-	self.SetTopWindow(self.mainwin)
+        size = wx.Size(self.i_width, self.i_height)
+        self.mainwin = Frame(self, size)
+        self.mainwin.Show()
+        self.SetTopWindow(self.mainwin)
 
-	self.set_handler()
+        self.set_handler()
 
-	return True
+        return True
 
 if __name__ == "__main__":
     app = Application()
diff --git a/temporal/Makefile b/temporal/Makefile
index 5910aa4..7a4ff26 100644
--- a/temporal/Makefile
+++ b/temporal/Makefile
@@ -1,9 +1,5 @@
 MODULE_TOPDIR = ..
 
-#	t.rast.algebra \
-#	t.rast3d.algebra \
-#	t.vect.algebra \
-
 SUBDIRS = \
 	t.connect \
 	t.create \
@@ -21,10 +17,12 @@ SUBDIRS = \
 	t.rast.aggregate \
 	t.rast.aggregate.ds \
 	t.rast.colors \
+	t.rast.contour \
 	t.rast.to.rast3 \
 	t.rast.univar \
 	t.rast.list \
 	t.rast.mapcalc \
+	t.rast.algebra \
 	t.rast.neighbors \
 	t.rast.series \
 	t.rast.export \
@@ -32,9 +30,12 @@ SUBDIRS = \
 	t.rast.import \
 	t.rast.gapfill \
 	t.rast.extract \
+	t.rast.to.vect \
+	t.rast.what \
 	t.rast3d.list \
 	t.rast3d.extract \
 	t.rast3d.mapcalc \
+	t.rast3d.algebra \
 	t.rast3d.univar \
 	t.rename \
 	t.select \
@@ -44,6 +45,7 @@ SUBDIRS = \
 	t.vect.db.select \
 	t.vect.export \
 	t.vect.extract \
+	t.vect.algebra \
 	t.vect.import \
 	t.vect.what.strds \
 	t.vect.observe.strds \
diff --git a/temporal/t.connect/t.connect.html b/temporal/t.connect/t.connect.html
index 9eea778..0003ab3 100644
--- a/temporal/t.connect/t.connect.html
+++ b/temporal/t.connect/t.connect.html
@@ -60,4 +60,4 @@ t.info -s
 
 Soeren Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
diff --git a/temporal/t.connect/testsuite/test_distr_tgis_db_raster.py b/temporal/t.connect/testsuite/test_distr_tgis_db_raster.py
index 5fa3efe..4588893 100644
--- a/temporal/t.connect/testsuite/test_distr_tgis_db_raster.py
+++ b/temporal/t.connect/testsuite/test_distr_tgis_db_raster.py
@@ -8,156 +8,176 @@ for details.
 :authors: Soeren Gebbert
 """
 
-import grass.pygrass.modules as pymod
-import subprocess
 from grass.gunittest.case import TestCase
 from grass.gunittest.gmodules import SimpleModule
+from grass.gunittest.utils import silent_rmtree
 import os
-import grass.temporal as tgis
 
-mapset_count = 0
+
 class TestRasterExtraction(TestCase):
 
+    mapsets_to_remove = []
+    outfile = 'rastlist.txt'
+    gisenv = SimpleModule('g.gisenv', get='MAPSET')
+    TestCase.runModule(gisenv, expecting_stdout=True)
+    old_mapset = gisenv.outputs.stdout.strip()
+
     @classmethod
     def setUpClass(cls):
         os.putenv("GRASS_OVERWRITE", "1")
-        for i in range(1, 5): 
-            cls.runModule("g.mapset", flags="c", mapset="test%i"%i)
-            cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+        for i in range(1, 7):
+            mapset_name = "test%i" % i
+            cls.runModule("g.mapset", flags="c", mapset=mapset_name)
+            cls.mapsets_to_remove.append(mapset_name)
+            cls.runModule("g.region", s=0, n=80,
+                          w=0, e=120, b=0, t=50, res=10, res3=10)
+            cls.runModule("t.connect", flags="d")
             cls.runModule("t.info", flags="s")
             cls.runModule("r.mapcalc", expression="a1 = 100")
             cls.runModule("r.mapcalc", expression="a2 = 200")
             cls.runModule("r.mapcalc", expression="a3 = 300")
-            
-            cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
-                                         output="A",  title="A test",  description="A test")
-            cls.runModule("t.register",  flags="i",  type="raster",  input="A",  
-                                         maps="a1,a2,a3",  
-                                         start="2001-01-01", increment="%i months"%i)
-
-        # Here we reuse two mapset to share a temporal databse between mapsets
-        tgis.init()
-        ciface = tgis.get_tgis_c_library_interface()
-        cls.runModule("g.mapset", flags="c", mapset="test5")
-        driver = ciface.get_driver_name("test1")
-        database = ciface.get_database_name("test1")
-        cls.runModule("t.connect",  driver=driver,  database=database)
-        
-        cls.runModule("g.mapset", flags="c", mapset="test6")
-        driver = ciface.get_driver_name("test2")
-        database = ciface.get_database_name("test2")
-        cls.runModule("t.connect",  driver=driver,  database=database)
-
-        for i in range(5, 7): 
-            cls.runModule("g.mapset", mapset="test%i"%i)
-            cls.runModule("r.mapcalc", expression="a1 = 100")
-            cls.runModule("r.mapcalc", expression="a2 = 200")
-            cls.runModule("r.mapcalc", expression="a3 = 300")
-            
-            cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
-                                         output="A",  title="A test",  description="A test")
-            cls.runModule("t.register",  flags="i",  type="raster",  input="A",  
-                                         maps="a1,a2,a3",  
-                                         start="2001-01-01", increment="%i months"%i)
-
-    def test_tlist(self):      
+            cls.runModule("t.create", type="strds", temporaltype="absolute",
+                          output="A", title="A test", description="A test")
+            cls.runModule("t.register", flags="i", type="raster", input="A",
+                          maps="a1,a2,a3",
+                          start="2001-01-01", increment="%i months" % i)
+
+        # Add the new mapsets to the search path
+        for mapset in cls.mapsets_to_remove:
+            cls.runModule("g.mapset", mapset=mapset)
+            cls.runModule("g.mapsets", operation="add", mapset=','.join(cls.mapsets_to_remove))
+
+
+    @classmethod
+    def tearDownClass(cls):
+        gisenv = SimpleModule('g.gisenv', get='GISDBASE')
+        cls.runModule(gisenv, expecting_stdout=True)
+        gisdbase = gisenv.outputs.stdout.strip()
+        gisenv = SimpleModule('g.gisenv', get='LOCATION_NAME')
+        cls.runModule(gisenv, expecting_stdout=True)
+        location = gisenv.outputs.stdout.strip()
+        cls.runModule("g.mapset", mapset=cls.old_mapset)
+        for mapset_name in cls.mapsets_to_remove:
+            mapset_path = os.path.join(gisdbase, location, mapset_name)
+            silent_rmtree(mapset_path)
+
+    def test_tlist(self):
         self.runModule("g.mapset", mapset="test1")
-        
+
         list_string = """A|test1|2001-01-01 00:00:00|2001-04-01 00:00:00|3
                                 A|test2|2001-01-01 00:00:00|2001-07-01 00:00:00|3
                                 A|test3|2001-01-01 00:00:00|2001-10-01 00:00:00|3
                                 A|test4|2001-01-01 00:00:00|2002-01-01 00:00:00|3
                                 A|test5|2001-01-01 00:00:00|2002-04-01 00:00:00|3
                                 A|test6|2001-01-01 00:00:00|2002-07-01 00:00:00|3"""
-                                
-        entries = list_string.split("\n")
-        
-        t_list = SimpleModule("t.list", quiet=True, 
-                                            columns=["name","mapset,start_time","end_time","number_of_maps"],  
-                                            type="strds",  where='name = "A"')
+
+        t_list = SimpleModule(
+            "t.list", quiet=True,
+            columns=["name", "mapset,start_time", "end_time", "number_of_maps"],
+            type="strds", where='name = "A"')
         self.assertModule(t_list)
-        
+
         out = t_list.outputs["stdout"].value
-        
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
-        
-    def test_trast_list(self):      
+
+        t_list = SimpleModule(
+            "t.list", quiet=True,
+            columns=["name", "mapset,start_time", "end_time", "number_of_maps"],
+            type="strds", where='name = "A"', output=self.outfile)
+        self.assertModule(t_list)
+        self.assertFileExists(self.outfile)
+        with open(self.outfile, 'r') as f:
+            read_data = f.read()
+        for a, b in zip(list_string.split("\n"), read_data.split("\n")):
+            self.assertEqual(a.strip(), b.strip())
+        #self.assertLooksLike(reference=read_data, actual=list_string)
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def test_trast_list(self):
         self.runModule("g.mapset", mapset="test1")
 
         list_string = """a1|test1|2001-01-01 00:00:00|2001-02-01 00:00:00
                                 a2|test1|2001-02-01 00:00:00|2001-03-01 00:00:00
                                 a3|test1|2001-03-01 00:00:00|2001-04-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast.list", quiet=True, flags="s",  input="A at test1")
+        trast_list = SimpleModule(
+            "t.rast.list", quiet=True, flags="s", input="A at test1")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test2|2001-01-01 00:00:00|2001-03-01 00:00:00
                                 a2|test2|2001-03-01 00:00:00|2001-05-01 00:00:00
                                 a3|test2|2001-05-01 00:00:00|2001-07-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast.list", quiet=True, flags="s",  input="A at test2")
+        trast_list = SimpleModule(
+            "t.rast.list", quiet=True, flags="s", input="A at test2")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test3|2001-01-01 00:00:00|2001-04-01 00:00:00
                                 a2|test3|2001-04-01 00:00:00|2001-07-01 00:00:00
                                 a3|test3|2001-07-01 00:00:00|2001-10-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast.list", quiet=True, flags="s",  input="A at test3")
+        trast_list = SimpleModule(
+            "t.rast.list", quiet=True, flags="s", input="A at test3")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test4|2001-01-01 00:00:00|2001-05-01 00:00:00
                                 a2|test4|2001-05-01 00:00:00|2001-09-01 00:00:00
                                 a3|test4|2001-09-01 00:00:00|2002-01-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast.list", quiet=True, flags="s",  input="A at test4")
+        trast_list = SimpleModule(
+            "t.rast.list", quiet=True, flags="s", input="A at test4")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test5|2001-01-01 00:00:00|2001-06-01 00:00:00
                                 a2|test5|2001-06-01 00:00:00|2001-11-01 00:00:00
                                 a3|test5|2001-11-01 00:00:00|2002-04-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast.list", quiet=True, flags="s",  input="A at test5")
+        trast_list = SimpleModule(
+            "t.rast.list", quiet=True, flags="s", input="A at test5")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
-    def test_strds_info(self):  
+        trast_list = SimpleModule("t.rast.list", quiet=True, flags="s",
+                                  input="A at test5", output=self.outfile)
+        self.assertModule(trast_list)
+        self.assertFileExists(self.outfile)
+        with open(self.outfile, 'r') as f:
+            read_data = f.read()
+        for a, b in zip(list_string.split("\n"), read_data.split("\n")):
+            self.assertEqual(a.strip(), b.strip())
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def test_strds_info(self):
         self.runModule("g.mapset", mapset="test4")
-        tinfo_string="""id=A at test1
+        tinfo_string = """id=A at test1
                                     name=A
                                     mapset=test1
                                     start_time=2001-01-01 00:00:00
@@ -165,10 +185,11 @@ class TestRasterExtraction(TestCase):
                                     granularity=1 month"""
 
         info = SimpleModule("t.info", flags="g", input="A at test1")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="test3")
-        tinfo_string="""id=A at test2
+        tinfo_string = """id=A at test2
                                     name=A
                                     mapset=test2
                                     start_time=2001-01-01 00:00:00
@@ -176,10 +197,11 @@ class TestRasterExtraction(TestCase):
                                     granularity=2 months"""
 
         info = SimpleModule("t.info", flags="g", input="A at test2")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="test2")
-        tinfo_string="""id=A at test3
+        tinfo_string = """id=A at test3
                                     name=A
                                     mapset=test3
                                     start_time=2001-01-01 00:00:00
@@ -187,10 +209,11 @@ class TestRasterExtraction(TestCase):
                                     granularity=3 months"""
 
         info = SimpleModule("t.info", flags="g", input="A at test3")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="test1")
-        tinfo_string="""id=A at test4
+        tinfo_string = """id=A at test4
                                     name=A
                                     mapset=test4
                                     start_time=2001-01-01 00:00:00
@@ -198,9 +221,10 @@ class TestRasterExtraction(TestCase):
                                     granularity=4 months"""
 
         info = SimpleModule("t.info", flags="g", input="A at test4")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=A at test5
+        tinfo_string = """id=A at test5
                                     name=A
                                     mapset=test5
                                     start_time=2001-01-01 00:00:00
@@ -208,59 +232,69 @@ class TestRasterExtraction(TestCase):
                                     granularity=5 months"""
 
         info = SimpleModule("t.info", flags="g", input="A at test5")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-    def test_raster_info(self):  
+    def test_raster_info(self):
         self.runModule("g.mapset", mapset="test3")
-        tinfo_string="""id=a1 at test1
+        tinfo_string = """id=a1 at test1
                                 name=a1
                                 mapset=test1
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-02-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster",  input="a1 at test1")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster", input="a1 at test1")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test2
+        tinfo_string = """id=a1 at test2
                                 name=a1
                                 mapset=test2
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-03-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster",  input="a1 at test2")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster", input="a1 at test2")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test3
+        tinfo_string = """id=a1 at test3
                                 name=a1
                                 mapset=test3
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-04-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster",  input="a1 at test3")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster", input="a1 at test3")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test4
+        tinfo_string = """id=a1 at test4
                                 name=a1
                                 mapset=test4
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-05-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster",  input="a1 at test4")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster", input="a1 at test4")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test5
+        tinfo_string = """id=a1 at test5
                                 name=a1
                                 mapset=test5
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-06-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster",  input="a1 at test5")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster", input="a1 at test5")
+
 
 if __name__ == '__main__':
     from grass.gunittest.main import test
diff --git a/temporal/t.connect/testsuite/test_distr_tgis_db_raster3d.py b/temporal/t.connect/testsuite/test_distr_tgis_db_raster3d.py
index ed91c7a..d95c5a7 100644
--- a/temporal/t.connect/testsuite/test_distr_tgis_db_raster3d.py
+++ b/temporal/t.connect/testsuite/test_distr_tgis_db_raster3d.py
@@ -8,195 +8,262 @@ for details.
 :authors: Soeren Gebbert
 """
 
-import grass.pygrass.modules as pymod
 from grass.gunittest.case import TestCase
 from grass.gunittest.gmodules import SimpleModule
+from grass.gunittest.utils import silent_rmtree
 import os
 
+
 class testRaster3dExtraction(TestCase):
 
+    mapsets_to_remove = []
+    outfile = 'rast3dlist.txt'
+    gisenv = SimpleModule('g.gisenv', get='MAPSET')
+    TestCase.runModule(gisenv, expecting_stdout=True)
+    old_mapset = gisenv.outputs.stdout.strip()
+
     @classmethod
     def setUpClass(cls):
-       os.putenv("GRASS_OVERWRITE", "1")
-       for i in range(1, 5): 
-            cls.runModule("g.mapset", flags="c", mapset="test3d%i"%i)
-            cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+        os.putenv("GRASS_OVERWRITE", "1")
+        for i in range(1, 5):
+            mapset_name = "test3d%i" % i
+            cls.runModule("g.mapset", flags="c", mapset=mapset_name)
+            cls.mapsets_to_remove.append(mapset_name)
+            cls.runModule("g.region", s=0, n=80,
+                          w=0, e=120, b=0, t=50, res=10, res3=10)
             # Use always the current mapset as temporal database
             cls.runModule("r3.mapcalc", expression="a1 = 100")
             cls.runModule("r3.mapcalc", expression="a2 = 200")
             cls.runModule("r3.mapcalc", expression="a3 = 300")
-            
-            cls.runModule("t.create",  type="str3ds",  temporaltype="absolute",  
-                                         output="A",  title="A test3d",  description="A test3d")
-            cls.runModule("t.register",  flags="i",  type="raster_3d",  input="A",  
-                                         maps="a1,a2,a3",  
-                                         start="2001-01-01", increment="%i months"%i)
-
-    def test_tlist(self):      
+            # Create the temporal database
+            cls.runModule("t.connect", flags="d")
+            cls.runModule("t.info", flags="s")
+            cls.runModule("t.create", type="str3ds", temporaltype="absolute",
+                          output="A", title="A test3d", description="A test3d")
+            cls.runModule(
+                "t.register", flags="i", type="raster_3d", input="A",
+                maps="a1,a2,a3",
+                start="2001-01-01", increment="%i months" % i)
+
+        # Add the new mapsets to the search path
+        for mapset in cls.mapsets_to_remove:
+            cls.runModule("g.mapset", mapset=mapset)
+            cls.runModule("g.mapsets", operation="add", mapset=','.join(cls.mapsets_to_remove))
+
+    @classmethod
+    def tearDownClass(cls):
+        gisenv = SimpleModule('g.gisenv', get='GISDBASE')
+        cls.runModule(gisenv, expecting_stdout=True)
+        gisdbase = gisenv.outputs.stdout.strip()
+        gisenv = SimpleModule('g.gisenv', get='LOCATION_NAME')
+        cls.runModule(gisenv, expecting_stdout=True)
+        location = gisenv.outputs.stdout.strip()
+        cls.runModule("g.mapset", mapset=cls.old_mapset)
+        for mapset_name in cls.mapsets_to_remove:
+            mapset_path = os.path.join(gisdbase, location, mapset_name)
+            silent_rmtree(mapset_path)
+
+    def test_tlist(self):
         self.runModule("g.mapset", mapset="test3d1")
-        
+
         list_string = """A|test3d1|2001-01-01 00:00:00|2001-04-01 00:00:00|3
                                 A|test3d2|2001-01-01 00:00:00|2001-07-01 00:00:00|3
                                 A|test3d3|2001-01-01 00:00:00|2001-10-01 00:00:00|3
                                 A|test3d4|2001-01-01 00:00:00|2002-01-01 00:00:00|3"""
-                                
-        entries = list_string.split("\n")
-        
-        t_list = SimpleModule("t.list", quiet=True, 
-                                            columns=["name","mapset,start_time","end_time","number_of_maps"],  
-                                            type="str3ds",  where='name = "A"')
+
+        t_list = SimpleModule(
+            "t.list", quiet=True,
+            columns=["name", "mapset,start_time", "end_time", "number_of_maps"],
+            type="str3ds", where='name = "A"')
         self.assertModule(t_list)
-        
+
         out = t_list.outputs["stdout"].value
-        
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
+            self.assertEqual(a.strip(), b.strip())
+
+        t_list = SimpleModule(
+            "t.list", quiet=True,
+            columns=["name", "mapset,start_time", "end_time", "number_of_maps"],
+            type="str3ds", where='name = "A"', output=self.outfile)
+        self.assertModule(t_list)
+        self.assertFileExists(self.outfile)
+        with open(self.outfile, 'r') as f:
+            read_data = f.read()
+        for a, b in zip(list_string.split("\n"), read_data.split("\n")):
             self.assertEqual(a.strip(), b.strip())
-        
-    def test_trast_list(self):      
+        #self.assertLooksLike(reference=read_data, actual=list_string)
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def test_trast_list(self):
         self.runModule("g.mapset", mapset="test3d1")
 
         list_string = """a1|test3d1|2001-01-01 00:00:00|2001-02-01 00:00:00
                                 a2|test3d1|2001-02-01 00:00:00|2001-03-01 00:00:00
                                 a3|test3d1|2001-03-01 00:00:00|2001-04-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast3d.list", quiet=True, flags="s",  input="A at test3d1")
+        trast_list = SimpleModule(
+            "t.rast3d.list", quiet=True, flags="s", input="A at test3d1")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test3d2|2001-01-01 00:00:00|2001-03-01 00:00:00
                                 a2|test3d2|2001-03-01 00:00:00|2001-05-01 00:00:00
                                 a3|test3d2|2001-05-01 00:00:00|2001-07-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast3d.list", quiet=True, flags="s",  input="A at test3d2")
+        trast_list = SimpleModule(
+            "t.rast3d.list", quiet=True, flags="s", input="A at test3d2")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test3d3|2001-01-01 00:00:00|2001-04-01 00:00:00
                                 a2|test3d3|2001-04-01 00:00:00|2001-07-01 00:00:00
                                 a3|test3d3|2001-07-01 00:00:00|2001-10-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast3d.list", quiet=True, flags="s",  input="A at test3d3")
+        trast_list = SimpleModule(
+            "t.rast3d.list", quiet=True, flags="s", input="A at test3d3")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|test3d4|2001-01-01 00:00:00|2001-05-01 00:00:00
                                 a2|test3d4|2001-05-01 00:00:00|2001-09-01 00:00:00
                                 a3|test3d4|2001-09-01 00:00:00|2002-01-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.rast3d.list", quiet=True, flags="s",  input="A at test3d4")
+        trast_list = SimpleModule(
+            "t.rast3d.list", quiet=True, flags="s", input="A at test3d4")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
-    def test_strds_info(self):  
+        trast_list = SimpleModule("t.rast3d.list", quiet=True, flags="s",
+                                  input="A at test3d4", output=self.outfile)
+        self.assertModule(trast_list)
+        self.assertFileExists(self.outfile)
+        with open(self.outfile, 'r') as f:
+            read_data = f.read()
+        for a, b in zip(list_string.split("\n"), read_data.split("\n")):
+            self.assertEqual(a.strip(), b.strip())
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def test_strds_info(self):
         self.runModule("g.mapset", mapset="test3d4")
-        tinfo_string="""id=A at test3d1
+        tinfo_string = """id=A at test3d1
                                     name=A
                                     mapset=test3d1
                                     start_time=2001-01-01 00:00:00
                                     end_time=2001-04-01 00:00:00
                                     granularity=1 month"""
 
-        info = SimpleModule("t.info", flags="g", type="str3ds",  input="A at test3d1")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        info = SimpleModule(
+            "t.info", flags="g", type="str3ds", input="A at test3d1")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="test3d3")
-        tinfo_string="""id=A at test3d2
+        tinfo_string = """id=A at test3d2
                                     name=A
                                     mapset=test3d2
                                     start_time=2001-01-01 00:00:00
                                     end_time=2001-07-01 00:00:00
                                     granularity=2 months"""
 
-        info = SimpleModule("t.info", flags="g", type="str3ds", input="A at test3d2")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        info = SimpleModule(
+            "t.info", flags="g", type="str3ds", input="A at test3d2")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="test3d2")
-        tinfo_string="""id=A at test3d3
+        tinfo_string = """id=A at test3d3
                                     name=A
                                     mapset=test3d3
                                     start_time=2001-01-01 00:00:00
                                     end_time=2001-10-01 00:00:00
                                     granularity=3 months"""
 
-        info = SimpleModule("t.info", flags="g", type="str3ds", input="A at test3d3")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        info = SimpleModule(
+            "t.info", flags="g", type="str3ds", input="A at test3d3")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="test3d1")
-        tinfo_string="""id=A at test3d4
+        tinfo_string = """id=A at test3d4
                                     name=A
                                     mapset=test3d4
                                     start_time=2001-01-01 00:00:00
                                     end_time=2002-01-01 00:00:00
                                     granularity=4 months"""
 
-        info = SimpleModule("t.info", flags="g", type="str3ds", input="A at test3d4")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="str3ds", input="A at test3d4")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-    def test_raster_info(self):  
+    def test_raster_info(self):
         self.runModule("g.mapset", mapset="test3d3")
-        tinfo_string="""id=a1 at test3d1
+        tinfo_string = """id=a1 at test3d1
                                 name=a1
                                 mapset=test3d1
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-02-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster_3d",  input="a1 at test3d1")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster_3d", input="a1 at test3d1")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test3d2
+        tinfo_string = """id=a1 at test3d2
                                 name=a1
                                 mapset=test3d2
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-03-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster_3d",  input="a1 at test3d2")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster_3d", input="a1 at test3d2")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test3d3
+        tinfo_string = """id=a1 at test3d3
                                 name=a1
                                 mapset=test3d3
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-04-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster_3d",  input="a1 at test3d3")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster_3d", input="a1 at test3d3")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at test3d4
+        tinfo_string = """id=a1 at test3d4
                                 name=a1
                                 mapset=test3d4
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-05-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="raster_3d",  input="a1 at test3d4")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="raster_3d", input="a1 at test3d4")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
 if __name__ == '__main__':
     from grass.gunittest.main import test
diff --git a/temporal/t.connect/testsuite/test_distr_tgis_db_vector.py b/temporal/t.connect/testsuite/test_distr_tgis_db_vector.py
index b664554..7810523 100644
--- a/temporal/t.connect/testsuite/test_distr_tgis_db_vector.py
+++ b/temporal/t.connect/testsuite/test_distr_tgis_db_vector.py
@@ -8,205 +8,270 @@ for details.
 :authors: Soeren Gebbert
 """
 
-import grass.pygrass.modules as pymod
-import subprocess
 from grass.gunittest.case import TestCase
 from grass.gunittest.gmodules import SimpleModule
+from grass.gunittest.utils import silent_rmtree
 import os
 
-mapset_count = 0
+
 class TestRasterExtraction(TestCase):
 
+    mapsets_to_remove = []
+    outfile = 'vectlist.txt'
+    gisenv = SimpleModule('g.gisenv', get='MAPSET')
+    TestCase.runModule(gisenv, expecting_stdout=True)
+    old_mapset = gisenv.outputs.stdout.strip()
+
     @classmethod
     def setUpClass(cls):
-       os.putenv("GRASS_OVERWRITE", "1")
-       for i in range(1, 5): 
-            cls.runModule("g.mapset", flags="c", mapset="testvect%i"%i)
-            cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+        os.putenv("GRASS_OVERWRITE", "1")
+        for i in range(1, 5):
+            mapset_name = "testvect%i" % i
+            cls.runModule("g.mapset", flags="c", mapset=mapset_name)
+            cls.mapsets_to_remove.append(mapset_name)
+            cls.runModule("g.region", s=0, n=80,
+                          w=0, e=120, b=0, t=50, res=10, res3=10)
             # Use always the current mapset as temporal database
-            cls.runModule("v.random", output="a1",  npoints=20)
-            cls.runModule("v.random", output="a2",  npoints=20)
-            cls.runModule("v.random", output="a3",  npoints=20)
-            
-            cls.runModule("t.create",  type="stvds",  temporaltype="absolute",  
-                                         output="A",  title="A testvect",  description="A testvect")
-            cls.runModule("t.register",  flags="i",  type="vector",  input="A",  
-                                         maps="a1,a2,a3",  
-                                         start="2001-01-01", increment="%i months"%i)
-
-    def test_tlist(self):      
+            cls.runModule("v.random", output="a1", npoints=20)
+            cls.runModule("v.random", output="a2", npoints=20)
+            cls.runModule("v.random", output="a3", npoints=20)
+            # Create the temporal database
+            cls.runModule("t.connect", flags="d")
+            cls.runModule("t.info", flags="s")
+            cls.runModule("t.create", type="stvds", temporaltype="absolute",
+                          output="A", title="A testvect", description="A testvect")
+            cls.runModule("t.register", flags="i", type="vector", input="A",
+                          maps="a1,a2,a3",
+                          start="2001-01-01", increment="%i months" % i)
+
+        # Add the new mapsets to the search path
+        for mapset in cls.mapsets_to_remove:
+            cls.runModule("g.mapset", mapset=mapset)
+            cls.runModule("g.mapsets", operation="add", mapset=','.join(cls.mapsets_to_remove))
+
+    @classmethod
+    def tearDownClass(cls):
+        gisenv = SimpleModule('g.gisenv', get='GISDBASE')
+        cls.runModule(gisenv, expecting_stdout=True)
+        gisdbase = gisenv.outputs.stdout.strip()
+        gisenv = SimpleModule('g.gisenv', get='LOCATION_NAME')
+        cls.runModule(gisenv, expecting_stdout=True)
+        location = gisenv.outputs.stdout.strip()
+        cls.runModule("g.mapset", mapset=cls.old_mapset)
+        for mapset_name in cls.mapsets_to_remove:
+            mapset_path = os.path.join(gisdbase, location, mapset_name)
+            silent_rmtree(mapset_path)
+
+    def test_tlist(self):
         self.runModule("g.mapset", mapset="testvect1")
-        
+
         list_string = """A|testvect1|2001-01-01 00:00:00|2001-04-01 00:00:00|3
                                 A|testvect2|2001-01-01 00:00:00|2001-07-01 00:00:00|3
                                 A|testvect3|2001-01-01 00:00:00|2001-10-01 00:00:00|3
                                 A|testvect4|2001-01-01 00:00:00|2002-01-01 00:00:00|3"""
-                                
-        entries = list_string.split("\n")
-        
-        t_list = SimpleModule("t.list", quiet=True, 
-                                           columns=["name","mapset,start_time","end_time","number_of_maps"],  
-                                           type="stvds",  where='name = "A"')
+
+        t_list = SimpleModule(
+            "t.list", quiet=True,
+            columns=["name", "mapset,start_time", "end_time", "number_of_maps"],
+            type="stvds", where='name = "A"')
         self.assertModule(t_list)
-        
+
         out = t_list.outputs["stdout"].value
-        
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
+            self.assertEqual(a.strip(), b.strip())
+
+        t_list = SimpleModule(
+            "t.list", quiet=True,
+            columns=["name", "mapset,start_time", "end_time", "number_of_maps"],
+            type="stvds", where='name = "A"', output=self.outfile)
+        self.assertModule(t_list)
+        self.assertFileExists(self.outfile)
+        with open(self.outfile, 'r') as f:
+            read_data = f.read()
+        for a, b in zip(list_string.split("\n"), read_data.split("\n")):
             self.assertEqual(a.strip(), b.strip())
-        
-    def test_tvect_list(self):      
+        #self.assertLooksLike(reference=read_data, actual=list_string)
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def test_tvect_list(self):
         self.runModule("g.mapset", mapset="testvect1")
 
         list_string = """a1|testvect1|2001-01-01 00:00:00|2001-02-01 00:00:00
                                 a2|testvect1|2001-02-01 00:00:00|2001-03-01 00:00:00
                                 a3|testvect1|2001-03-01 00:00:00|2001-04-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s",  
-                                  columns=["name","mapset","start_time","end_time"] , 
+        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s",
+                                  columns=[
+                                      "name", "mapset", "start_time", "end_time"],
                                   input="A at testvect1")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|testvect2|2001-01-01 00:00:00|2001-03-01 00:00:00
                                 a2|testvect2|2001-03-01 00:00:00|2001-05-01 00:00:00
                                 a3|testvect2|2001-05-01 00:00:00|2001-07-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s", 
-                                  columns=["name","mapset","start_time","end_time"] , 
-                                  input="A at testvect2")
+        trast_list = SimpleModule(
+            "t.vect.list", quiet=True, flags="s",
+            columns=["name", "mapset", "start_time", "end_time"],
+            input="A at testvect2")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|testvect3|2001-01-01 00:00:00|2001-04-01 00:00:00
                                 a2|testvect3|2001-04-01 00:00:00|2001-07-01 00:00:00
                                 a3|testvect3|2001-07-01 00:00:00|2001-10-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s", 
-                                  columns=["name","mapset","start_time","end_time"] , 
+        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s",
+                                  columns=[
+                                      "name", "mapset", "start_time", "end_time"],
                                   input="A at testvect3")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
         list_string = """a1|testvect4|2001-01-01 00:00:00|2001-05-01 00:00:00
                                 a2|testvect4|2001-05-01 00:00:00|2001-09-01 00:00:00
                                 a3|testvect4|2001-09-01 00:00:00|2002-01-01 00:00:00"""
 
-        entries = list_string.split("\n")
-
-        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s",
-                                  columns=["name","mapset","start_time","end_time"] , 
-                                  input="A at testvect4")
+        trast_list = SimpleModule(
+            "t.vect.list", quiet=True, flags="s",
+            columns=["name", "mapset", "start_time", "end_time"],
+            input="A at testvect4")
         self.assertModule(trast_list)
 
         out = trast_list.outputs["stdout"].value
 
-        for a,  b in zip(list_string.split("\n"),  out.split("\n")):
+        for a, b in zip(list_string.split("\n"), out.split("\n")):
             self.assertEqual(a.strip(), b.strip())
 
-    def test_stvds_info(self):  
+        trast_list = SimpleModule("t.vect.list", quiet=True, flags="s",
+                                  columns=["name", "mapset", "start_time", "end_time"],
+                                  input="A at testvect4", output=self.outfile)
+        self.assertModule(trast_list)
+        self.assertFileExists(self.outfile)
+        with open(self.outfile, 'r') as f:
+            read_data = f.read()
+        for a, b in zip(list_string.split("\n"), read_data.split("\n")):
+            self.assertEqual(a.strip(), b.strip())
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def test_stvds_info(self):
         self.runModule("g.mapset", mapset="testvect4")
-        tinfo_string="""id=A at testvect1
+        tinfo_string = """id=A at testvect1
                                     name=A
                                     mapset=testvect1
                                     start_time=2001-01-01 00:00:00
                                     end_time=2001-04-01 00:00:00
                                     granularity=1 month"""
 
-        info = SimpleModule("t.info", flags="g", type="stvds", input="A at testvect1")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        info = SimpleModule(
+            "t.info", flags="g", type="stvds", input="A at testvect1")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="testvect3")
-        tinfo_string="""id=A at testvect2
+        tinfo_string = """id=A at testvect2
                                     name=A
                                     mapset=testvect2
                                     start_time=2001-01-01 00:00:00
                                     end_time=2001-07-01 00:00:00
                                     granularity=2 months"""
 
-        info = SimpleModule("t.info", flags="g", type="stvds",  input="A at testvect2")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        info = SimpleModule(
+            "t.info", flags="g", type="stvds", input="A at testvect2")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="testvect2")
-        tinfo_string="""id=A at testvect3
+        tinfo_string = """id=A at testvect3
                                     name=A
                                     mapset=testvect3
                                     start_time=2001-01-01 00:00:00
                                     end_time=2001-10-01 00:00:00
                                     granularity=3 months"""
 
-        info = SimpleModule("t.info", flags="g", type="stvds", input="A at testvect3")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
-  
+        info = SimpleModule(
+            "t.info", flags="g", type="stvds", input="A at testvect3")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
+
         self.runModule("g.mapset", mapset="testvect1")
-        tinfo_string="""id=A at testvect4
+        tinfo_string = """id=A at testvect4
                                     name=A
                                     mapset=testvect4
                                     start_time=2001-01-01 00:00:00
                                     end_time=2002-01-01 00:00:00
                                     granularity=4 months"""
 
-        info = SimpleModule("t.info", flags="g", type="stvds", input="A at testvect4")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="stvds", input="A at testvect4")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-    def testv_vector_info(self):  
+    def testv_vector_info(self):
         self.runModule("g.mapset", mapset="testvect3")
-        tinfo_string="""id=a1 at testvect1
+        tinfo_string = """id=a1 at testvect1
                                 name=a1
                                 mapset=testvect1
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-02-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="vector",  input="a1 at testvect1")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="vector", input="a1 at testvect1")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at testvect2
+        tinfo_string = """id=a1 at testvect2
                                 name=a1
                                 mapset=testvect2
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-03-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="vector",  input="a1 at testvect2")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="vector", input="a1 at testvect2")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at testvect3
+        tinfo_string = """id=a1 at testvect3
                                 name=a1
                                 mapset=testvect3
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-04-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="vector",  input="a1 at testvect3")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="vector", input="a1 at testvect3")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
-        tinfo_string="""id=a1 at testvect4
+        tinfo_string = """id=a1 at testvect4
                                 name=a1
                                 mapset=testvect4
                                 temporal_type=absolute
                                 start_time=2001-01-01 00:00:00
                                 end_time=2001-05-01 00:00:00 """
 
-        info = SimpleModule("t.info", flags="g", type="vector",  input="a1 at testvect4")
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+        info = SimpleModule(
+            "t.info", flags="g", type="vector", input="a1 at testvect4")
+        self.assertModuleKeyValue(
+            module=info, reference=tinfo_string, precision=2, sep="=")
 
 if __name__ == '__main__':
     from grass.gunittest.main import test
diff --git a/temporal/t.create/t.create.html b/temporal/t.create/t.create.html
index cf5560b..d29b251 100644
--- a/temporal/t.create/t.create.html
+++ b/temporal/t.create/t.create.html
@@ -52,5 +52,5 @@ t.create type=stvds temporaltype=relative \
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 14:05:02 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 14:04:47 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.info/t.info.html b/temporal/t.info/t.info.html
index 2cc6b7c..a7fa6b6 100644
--- a/temporal/t.info/t.info.html
+++ b/temporal/t.info/t.info.html
@@ -152,5 +152,5 @@ t.info input=2009_01_tempmean type=raster
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 14:05:02 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 14:04:47 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.info/t.info.py b/temporal/t.info/t.info.py
index 7ae19d1..1630709 100755
--- a/temporal/t.info/t.info.py
+++ b/temporal/t.info/t.info.py
@@ -47,7 +47,7 @@
 #% description: Print information about the temporal DBMI interface and exit
 #% suppress_required: yes
 #%end
-
+from __future__ import print_function
 
 import grass.script as grass
 import grass.temporal as tgis
@@ -73,24 +73,24 @@ def main():
 
     if system and not shellstyle:
         #      0123456789012345678901234567890
-        print " +------------------- Temporal DBMI backend information ----------------------+"
-        print " | DBMI Python interface:...... " + str(dbif.get_dbmi().__name__)
-        print " | Temporal database string:... " + str(
-            tgis.get_tgis_database_string())
-        print " | SQL template path:.......... " + str(
-            tgis.get_sql_template_path())
+        print(" +------------------- Temporal DBMI backend information ----------------------+")
+        print(" | DBMI Python interface:...... " + str(dbif.get_dbmi().__name__))
+        print(" | Temporal database string:... " + str(
+            tgis.get_tgis_database_string()))
+        print(" | SQL template path:.......... " + str(
+            tgis.get_sql_template_path()))
         if rows:
             for row in rows:
-                print " | %s .......... %s"%(row[0], row[1])
-        print " +----------------------------------------------------------------------------+"
+                print(" | %s .......... %s"%(row[0], row[1]))
+        print(" +----------------------------------------------------------------------------+")
         return
     elif system:
-        print "dbmi_python_interface=\'" + str(dbif.get_dbmi().__name__) + "\'"
-        print "dbmi_string=\'" + str(tgis.get_tgis_database_string()) + "\'"
-        print "sql_template_path=\'" + str(tgis.get_sql_template_path()) + "\'"
+        print("dbmi_python_interface=\'" + str(dbif.get_dbmi().__name__) + "\'")
+        print("dbmi_string=\'" + str(tgis.get_tgis_database_string()) + "\'")
+        print("sql_template_path=\'" + str(tgis.get_sql_template_path()) + "\'")
         if rows:
             for row in rows:
-                print "%s=\'%s\'"%(row[0], row[1])
+                print("%s=\'%s\'"%(row[0], row[1]))
         return
 
     if not system and not name:
diff --git a/temporal/t.list/t.list.html b/temporal/t.list/t.list.html
index 435832e..9b24c82 100644
--- a/temporal/t.list/t.list.html
+++ b/temporal/t.list/t.list.html
@@ -63,5 +63,5 @@ Time stamped raster maps with absolute time available in mapset <climate_200
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 14:05:02 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 14:04:47 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.list/t.list.py b/temporal/t.list/t.list.py
index 1c2c583..349b6cd 100755
--- a/temporal/t.list/t.list.py
+++ b/temporal/t.list/t.list.py
@@ -80,7 +80,7 @@
 #% description: Print the column names as first row
 #% guisection: Formatting
 #%end
-
+from __future__ import print_function
 import grass.script as gscript
 import grass.temporal as tgis
 import sys
@@ -104,6 +104,8 @@ def main():
     tgis.init()
 
     sp = tgis.dataset_factory(type, None)
+    dbif = tgis.SQLDatabaseInterfaceConnection()
+    dbif.connect()
     first = True
 
     if  gscript.verbosity() > 0 and not outpath:
@@ -115,7 +117,7 @@ def main():
         else:
             time = "relative time"
 
-        stds_list = tgis.get_dataset_list(type,  ttype,  columns,  where,  order)
+        stds_list = tgis.get_dataset_list(type,  ttype,  columns,  where,  order, dbif=dbif)
 
         # Use the correct order of the mapsets, hence first the current mapset, then
         # alphabetic ordering
@@ -151,7 +153,7 @@ def main():
                         if outpath:
                             outfile.write("{st}\n".format(st=output))
                         else:
-                            print output
+                            print(output)
                         first = False
 
                     for row in rows:
@@ -166,9 +168,10 @@ def main():
                         if outpath:
                             outfile.write("{st}\n".format(st=output))
                         else:
-                            print output
+                            print(output)
     if outpath:
         outfile.close()
+    dbif.close()
 
 if __name__ == "__main__":
     options, flags = gscript.parser()
diff --git a/temporal/t.merge/t.merge.html b/temporal/t.merge/t.merge.html
index 08465ad..169cba7 100644
--- a/temporal/t.merge/t.merge.html
+++ b/temporal/t.merge/t.merge.html
@@ -224,5 +224,5 @@ t.info precipitation_daily_3
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.merge/t.merge.py b/temporal/t.merge/t.merge.py
index 42d7d4c..5ea5839 100755
--- a/temporal/t.merge/t.merge.py
+++ b/temporal/t.merge/t.merge.py
@@ -17,6 +17,7 @@
 #%module
 #% description: Merges several space time datasets into a single space time dataset.
 #% keyword: temporal
+#% keyword: time management
 #% keyword: merge
 #% keyword: time
 #%end
diff --git a/temporal/t.merge/testsuite/test.t.merge.sh b/temporal/t.merge/testsuite/test.t.merge.sh
index b029b60..b6d0744 100755
--- a/temporal/t.merge/testsuite/test.t.merge.sh
+++ b/temporal/t.merge/testsuite/test.t.merge.sh
@@ -22,7 +22,7 @@ t.register -i --o maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 \
 # in several space time datasets
 t.create --o type=strds temporaltype=absolute output=precip_abs1 \
 	title="Test" descr="This is the 1 test strds" semantictype=sum
-t.register -i --o input=precip_abs1 maps=prec_1,prec_2,prec_3 
+t.register --o input=precip_abs1 maps=prec_1,prec_2,prec_3 
 
 t.create --o type=strds temporaltype=absolute output=precip_abs2 \
 	title="Test" descr="This is the 2 test strds" semantictype=sum
diff --git a/temporal/t.rast.accdetect/t.rast.accdetect.html b/temporal/t.rast.accdetect/t.rast.accdetect.html
index f3f06ae..7e10dca 100644
--- a/temporal/t.rast.accdetect/t.rast.accdetect.html
+++ b/temporal/t.rast.accdetect/t.rast.accdetect.html
@@ -80,4 +80,4 @@ Please have a look at the <a href="t.rast.accumulate.html">t.rast.accumulate</a>
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
 
-<p><i>Last changed: $Date: 2015-07-11 16:04:13 +0200 (Sat, 11 Jul 2015) $</i>
+<p><i>Last changed: $Date: 2015-07-11 16:01:46 +0200 (Sat, 11 Jul 2015) $</i>
diff --git a/temporal/t.rast.accdetect/t.rast.accdetect.py b/temporal/t.rast.accdetect/t.rast.accdetect.py
index 582d736..14f1145 100644
--- a/temporal/t.rast.accdetect/t.rast.accdetect.py
+++ b/temporal/t.rast.accdetect/t.rast.accdetect.py
@@ -92,6 +92,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'count' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: range
 #% type: double
 #% key_desc: min,max
@@ -144,6 +153,7 @@ def main():
     staend = options["staend"]
     register_null = flags["n"]
     reverse = flags["r"]
+    time_suffix = options["suffix"]
 
     grass.set_raise_on_error(True)
 
@@ -301,8 +311,9 @@ def main():
         grass.message(_("Processing cycle %s - %s"%(str(start), str(end))))
 
         count = compute_occurrence(occurrence_maps, input_strds, input_maps,
-                                   start, base, count, mapset, where, reverse,
-                                   range, minimum_strds, maximum_strds, dbif)
+                                   start, base, count, time_suffix, mapset,
+                                   where, reverse, range, minimum_strds,
+                                   maximum_strds, dbif)
 
         # Indicator computation is based on the occurrence so we need to start it after
         # the occurrence cycle
@@ -314,7 +325,15 @@ def main():
                 else:
                     map = input_maps[i]
 
-                indicator_map_name = "%s_indicator_%i" % (base, indi_count)
+                if input_strds.get_temporal_type() == 'absolute' and time_suffix == 'gran':
+                    suffix = tgis.create_suffix_from_datetime(map.temporal_extent.get_start_time(),
+                                                              input_strds.get_granularity())
+                    indicator_map_name = "{ba}_{su}".format(ba=base, su=suffix)
+                elif input_strds.get_temporal_type() == 'absolute' and time_suffix == 'time':
+                    suffix = tgis.create_time_suffix(map)
+                    indicator_map_name = "{ba}_{su}".format(ba=base, su=suffix)
+                else:
+                    indicator_map_name = tgis.create_numeric_suffic(base, indi_count, time_suffix)
                 indicator_map_id = dummy.build_id(indicator_map_name, mapset)
                 indicator_map = input_strds.get_new_map_instance(indicator_map_id)
 
@@ -464,8 +483,8 @@ def create_strds_register_maps(in_strds, out_strds, out_maps, register_null,
 ############################################################################
 
 def compute_occurrence(occurrence_maps, input_strds, input_maps, start, base,
-               count, mapset, where, reverse, range, minimum_strds,
-               maximum_strds, dbif):
+                       count, tsuffix, mapset, where, reverse, range,
+                       minimum_strds, maximum_strds, dbif):
 
     if minimum_strds:
         input_maps_minimum = input_strds.get_registered_maps_as_objects(where=where,
@@ -498,7 +517,16 @@ def compute_occurrence(occurrence_maps, input_strds, input_maps, start, base,
         else:
             days = td
 
-        occurrence_map_name = "%s_%i" % (base, count)
+        if input_strds.get_temporal_type() == 'absolute' and tsuffix == 'gran':
+            suffix = tgis.create_suffix_from_datetime(map.temporal_extent.get_start_time(),
+                                                      input_strds.get_granularity())
+            occurrence_map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        elif input_strds.get_temporal_type() == 'absolute' and tsuffix == 'time':
+            suffix = tgis.create_time_suffix(map)
+            occurrence_map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        else:
+            occurrence_map_name = tgis.create_numeric_suffic(base, count, tsuffix)
+
         occurrence_map_id = map.build_id(occurrence_map_name, mapset)
         occurrence_map = input_strds.get_new_map_instance(occurrence_map_id)
 
diff --git a/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.reverse.sh b/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.reverse.sh
index b1f2317..a820fbd 100755
--- a/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.reverse.sh
+++ b/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.reverse.sh
@@ -22,10 +22,10 @@ t.register -i type=raster input=temp_abs1 maps=temp_1,temp_2,temp_3,temp_4,temp_
 # The first @test
 
 t.rast.accumulate -r input=temp_abs1 output=temp_accumulation base=temp_acc \
-    limits=10,25 start="2001-01-01" gran="2 months" cycle="12 months"
+    limits=10,25 start="2001-01-01" gran="2 months" cycle="12 months" suffix="num%03"
 
 t.rast.accdetect -r input=temp_accumulation occurrence=temp_occ base=temp_occ \
-    range=20,80 start="2001-01-01" cycle="12 months" staend=1,2,3 indi=temp_indi
+    range=20,80 start="2001-01-01" cycle="12 months" staend=1,2,3 indi=temp_indi suffix="num%03"
 
 t.rast.list temp_accumulation col=name,start_time,min,max > data/test_2_temp_accumulation.txt
 t.rast.list temp_occ col=name,start_time,min,max  > data/test_2_temp_occ.txt
diff --git a/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.sh b/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.sh
index 558d3b9..308f7c0 100755
--- a/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.sh
+++ b/temporal/t.rast.accdetect/testsuite/test.t.rast.accdetect.sh
@@ -22,10 +22,10 @@ t.register -i type=raster input=temp_abs1 maps=temp_1,temp_2,temp_3,temp_4,temp_
 # The first @test
 
 t.rast.accumulate input=temp_abs1 output=temp_accumulation base=temp_acc \
-    limits=10,25 start="2001-01-01" gran="2 months" cycle="12 months"
+    limits=10,25 start="2001-01-01" gran="2 months" cycle="12 months" suffix="num%03"
 
 t.rast.accdetect input=temp_accumulation occurrence=temp_occ base=temp_occ \
-    range=20,80 start="2001-01-01" cycle="12 months"
+    range=20,80 start="2001-01-01" cycle="12 months" suffix="num%03"
 
 # Check the registered maps metadata
 t.rast.list temp_accumulation col=name,start_time,min,max > data/test_1_temp_accumulation.txt
@@ -45,7 +45,7 @@ t.register -i type=raster input=maximum maps=maximum start="2001-01-01" incremen
 
 t.rast.accdetect input=temp_accumulation occurrence=temp_occ base=temp_occ \
     range=20,80 start="2001-01-01" cycle="12 months" min=minimum \
-    max=maximum staend=1,2,3 indi=temp_indi
+    max=maximum staend=1,2,3 indi=temp_indi suffix="num%03"
 
 # Check the registered maps metadata
 t.rast.list temp_occ col=name,start_time,min,max          > data/test_1_temp_occ_b.txt
diff --git a/temporal/t.rast.accdetect/testsuite/test_simple.py b/temporal/t.rast.accdetect/testsuite/test_simple.py
new file mode 100644
index 0000000..c3b09b5
--- /dev/null
+++ b/temporal/t.rast.accdetect/testsuite/test_simple.py
@@ -0,0 +1,96 @@
+"""test distributed temporal databases with stvds
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Luca Delucchi
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+import os
+
+
+class TestRasterExtraction(TestCase):
+    
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,
+                      t=50,  res=10,  res3=10)
+        for i in range(1,101):
+            cls.runModule("r.mapcalc", flags='s',  overwrite=True,
+                          expression="a_mapcalc{nu} = rand(1,10)".format(nu=i))
+
+        cls.runModule("t.create", type="strds", temporaltype="absolute",
+                      output="A", title="A test", description="A test",
+                      overwrite=True)
+        glist = SimpleModule('g.list', type='raster', pattern="a_mapcalc*",
+                             separator=',')
+        cls.runModule(glist, expecting_stdout=True)
+        maps = glist.outputs.stdout.strip()
+        cls.runModule("t.register", flags="i",  type="raster",  input="A",
+                      maps=maps.strip(), increment="1 month",
+                      start="2001-01-01 00:00:00", overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+
+    def tearDown(self):
+        """Remove generated data"""
+        self.runModule("t.remove", flags="rf", type="strds", inputs="B")
+        
+    def test_simple(self):
+        self.assertModule('t.rast.accdetect', input='A', occurrence='B',
+                          start="2001-01-01", cycle="12 months",
+                          basename='b_occu', range=(1,8))
+        tinfo_string="""semantic_type=mean
+        start_time=2001-01-01 00:00:00
+        end_time=2009-05-01 00:00:00
+        granularity=1 month
+        map_time=interval
+        number_of_maps=100"""
+        info = SimpleModule("t.info", flags="g", type="strds", input="B")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
+                                  precision=2, sep="=")
+
+    def test_stop(self):
+        self.assertModule('t.rast.accdetect', input='A', occurrence='B',
+                          start="2001-01-01", stop='2008-12-31',
+                          cycle="12 months", basename='b_occu', range=(1,8))
+        tinfo_string="""semantic_type=mean
+        start_time=2001-01-01 00:00:00
+        end_time=2009-01-01 00:00:00
+        granularity=1 month
+        map_time=interval
+        number_of_maps=96"""
+        info = SimpleModule("t.info", flags="g", type="strds", input="B")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
+                                  precision=2, sep="=")
+      
+    def test_time_suffix(self):
+        self.assertModule('t.rast.accdetect', input='A', occurrence='B',
+                          start="2001-01-01", cycle="12 months", suffix='time',
+                          basename='b_occu', range=(1,8))
+        self.assertRasterDoesNotExist('b_occu_2001_01')
+        self.assertRasterExists('b_occu_2001_01_01T00_00_00')
+
+    def test_num_suffix(self):
+        self.assertModule('t.rast.accdetect', input='A', occurrence='B',
+                          start="2001-01-01", cycle="12 months",
+                          suffix='count%03', basename='b_occu', range=(1,8))
+        self.assertRasterDoesNotExist('b_occu_2001_01')
+        self.assertRasterExists('b_occu_001')
+        self.assertRasterDoesNotExist('b_occu_00001')
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.accumulate/t.rast.accumulate.html b/temporal/t.rast.accumulate/t.rast.accumulate.html
index 8ea73d5..d340e8f 100644
--- a/temporal/t.rast.accumulate/t.rast.accumulate.html
+++ b/temporal/t.rast.accumulate/t.rast.accumulate.html
@@ -66,7 +66,7 @@ wget http://www-pool.math.tu-berlin.de/~soeren/grass/temperature_mean_1990_2000_
 mkdir -p /tmp/grassdata/LL
 
 # Start GRASS and create a new location with PERMANENT mapset
-grass70 -c EPSG:4326 /tmp/grassdata/LL/PERMANENT
+grass72 -c EPSG:4326 /tmp/grassdata/LL/PERMANENT
 
 # Import the temperature data
 t.rast.import input=temperature_mean_1990_2000_daily_celsius.tar.gz \
@@ -297,4 +297,4 @@ g.gui.animation strds=leafhopper_monthly_indicator_c3_1990_2000
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $</i>
diff --git a/temporal/t.rast.accumulate/t.rast.accumulate.py b/temporal/t.rast.accumulate/t.rast.accumulate.py
index b987867..d99ab96 100644
--- a/temporal/t.rast.accumulate/t.rast.accumulate.py
+++ b/temporal/t.rast.accumulate/t.rast.accumulate.py
@@ -93,16 +93,25 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: limits
 #% type: double
 #% key_desc: lower,upper
-#% description: Use these limits in case lower and/or upper input  space time raster datasets are not defined
-#% required: no
+#% description: Use these limits in case lower and/or upper input  space time raster datasets are not defined or contain NULL values
+#% required: yes
 #% multiple: no
 #%end
 
 #%option
-#% key: shift
+#% key: scale
 #% type: double
 #% description: Scale factor for input space time raster dataset
 #% required: no
@@ -110,7 +119,7 @@
 #%end
 
 #%option
-#% key: scale
+#% key: shift
 #% type: double
 #% description: Shift factor for input space time raster dataset
 #% required: no
@@ -137,6 +146,7 @@
 #% key: r
 #% description: Reverse time direction in cyclic accumulation
 #%end
+from __future__ import print_function
 
 import grass.script as grass
 import grass.temporal as tgis
@@ -163,6 +173,7 @@ def main():
     granularity = options["granularity"]
     register_null = flags["n"]
     reverse = flags["r"]
+    time_suffix = options["suffix"]
 
     # Make sure the temporal database exists
     tgis.init()
@@ -346,7 +357,7 @@ def main():
         # Aggregate
         num_maps = len(gran_list)
 
-        for i in xrange(num_maps):
+        for i in range(num_maps):
             if reverse:
                 map = gran_list[num_maps - i - 1]
             else:
@@ -369,7 +380,16 @@ def main():
                 continue
 
             # New output map
-            output_map_name = "%s_%i" % (base, count)
+            if input_strds.get_temporal_type() == 'absolute' and time_suffix == 'gran':
+                suffix = tgis.create_suffix_from_datetime(map.temporal_extent.get_start_time(),
+                                                          input_strds.get_granularity())
+                output_map_name = "{ba}_{su}".format(ba=base, su=suffix)
+            elif input_strds.get_temporal_type() == 'absolute' and time_suffix == 'time':
+                suffix = tgis.create_time_suffix(map)
+                output_map_name = "{ba}_{su}".format(ba=base, su=suffix)
+            else:
+                output_map_name = tgis.create_numeric_suffic(base, count, time_suffix)
+
             output_map_id = map.build_id(output_map_name, mapset)
             output_map = input_strds.get_new_map_instance(output_map_id)
 
@@ -438,7 +458,7 @@ def main():
             if method:
                 accmod.inputs["method"].value = method
 
-            print accmod
+            print(accmod)
             accmod.run()
 
             if accmod.popen.returncode != 0:
diff --git a/temporal/t.rast.accumulate/testsuite/data/acc_1.ref b/temporal/t.rast.accumulate/testsuite/data/acc_1.ref
deleted file mode 100644
index 6686d8b..0000000
--- a/temporal/t.rast.accumulate/testsuite/data/acc_1.ref
+++ /dev/null
@@ -1,39 +0,0 @@
- +-------------------- Space Time Raster Dataset -----------------------------+
- |                                                                            |
- +-------------------- Basic information -------------------------------------+
- | Name: ...................... precip_abs2
- | Creator: ................... soeren
- | Temporal type: ............. absolute
- | Semantic type:.............. mean
- +-------------------- Absolute time -----------------------------------------+
- | Start time:................. 2001-01-01 00:00:00
- | End time:................... 2002-01-01 00:00:00
- | Granularity:................ 4 months
- | Temporal type of maps:...... interval
- +-------------------- Spatial extent ----------------------------------------+
- | North:...................... 80.0
- | South:...................... 0.0
- | East:.. .................... 120.0
- | West:....................... 0.0
- | Top:........................ 0.0
- | Bottom:..................... 0.0
- +-------------------- Metadata information ----------------------------------+
- | North-South resolution min:. 10.0
- | North-South resolution max:. 10.0
- | East-west resolution min:... 10.0
- | East-west resolution max:... 10.0
- | Minimum value min:.......... 0.0
- | Minimum value max:.......... 0.0
- | Maximum value min:.......... 21.5
- | Maximum value max:.......... 60.0
- |
- | Title:
- | A test
- | Description:
- | A test
- | Command history:
- | t.rast.accumulate input="precip_abs1"
- |     output="precip_abs2" base="prec_acc" limits="10,30" start="2001-01-01"
- |     gran="4 months" cycle="12 months"
- | 
- +----------------------------------------------------------------------------+
diff --git a/temporal/t.rast.accumulate/testsuite/data/acc_2.ref b/temporal/t.rast.accumulate/testsuite/data/acc_2.ref
deleted file mode 100644
index ced2040..0000000
--- a/temporal/t.rast.accumulate/testsuite/data/acc_2.ref
+++ /dev/null
@@ -1,39 +0,0 @@
- +-------------------- Space Time Raster Dataset -----------------------------+
- |                                                                            |
- +-------------------- Basic information -------------------------------------+
- | Name: ...................... precip_abs2
- | Creator: ................... soeren
- | Temporal type: ............. absolute
- | Semantic type:.............. mean
- +-------------------- Absolute time -----------------------------------------+
- | Start time:................. 2001-01-01 00:00:00
- | End time:................... 2001-09-01 00:00:00
- | Granularity:................ 4 months
- | Temporal type of maps:...... interval
- +-------------------- Spatial extent ----------------------------------------+
- | North:...................... 80.0
- | South:...................... 0.0
- | East:.. .................... 120.0
- | West:....................... 0.0
- | Top:........................ 0.0
- | Bottom:..................... 0.0
- +-------------------- Metadata information ----------------------------------+
- | North-South resolution min:. 10.0
- | North-South resolution max:. 10.0
- | East-west resolution min:... 10.0
- | East-west resolution max:... 10.0
- | Minimum value min:.......... 0.0
- | Minimum value max:.......... 0.0
- | Maximum value min:.......... 21.5
- | Maximum value max:.......... 39.5
- |
- | Title:
- | A test
- | Description:
- | A test
- | Command history:
- | t.rast.accumulate input="precip_abs1"
- |     output="precip_abs2" base="prec_acc" limits="10,30" start="2001-01-01"
- |     stop="2002-01-01" gran="4 months" cycle="7 months"
- | 
- +----------------------------------------------------------------------------+
diff --git a/temporal/t.rast.accumulate/testsuite/data/acc_3.ref b/temporal/t.rast.accumulate/testsuite/data/acc_3.ref
deleted file mode 100644
index dfae636..0000000
--- a/temporal/t.rast.accumulate/testsuite/data/acc_3.ref
+++ /dev/null
@@ -1,39 +0,0 @@
- +-------------------- Space Time Raster Dataset -----------------------------+
- |                                                                            |
- +-------------------- Basic information -------------------------------------+
- | Name: ...................... precip_abs2
- | Creator: ................... soeren
- | Temporal type: ............. absolute
- | Semantic type:.............. mean
- +-------------------- Absolute time -----------------------------------------+
- | Start time:................. 2001-01-01 00:00:00
- | End time:................... 2002-01-01 00:00:00
- | Granularity:................ 2 months
- | Temporal type of maps:...... interval
- +-------------------- Spatial extent ----------------------------------------+
- | North:...................... 80.0
- | South:...................... 0.0
- | East:.. .................... 120.0
- | West:....................... 0.0
- | Top:........................ 0.0
- | Bottom:..................... 0.0
- +-------------------- Metadata information ----------------------------------+
- | North-South resolution min:. 10.0
- | North-South resolution max:. 10.0
- | East-west resolution min:... 10.0
- | East-west resolution max:... 10.0
- | Minimum value min:.......... 0.0
- | Minimum value max:.......... 0.0
- | Maximum value min:.......... 24.0
- | Maximum value max:.......... 120.0
- |
- | Title:
- | A test
- | Description:
- | A test
- | Command history:
- | t.rast.accumulate input="precip_abs1"
- |     output="precip_abs2" base="prec_acc" limits="10,30" start="2001-01-01"
- |     gran="2 months" cycle="12 months"
- | 
- +----------------------------------------------------------------------------+
diff --git a/temporal/t.rast.accumulate/testsuite/data/acc_4.ref b/temporal/t.rast.accumulate/testsuite/data/acc_4.ref
deleted file mode 100644
index 2230f99..0000000
--- a/temporal/t.rast.accumulate/testsuite/data/acc_4.ref
+++ /dev/null
@@ -1,39 +0,0 @@
- +-------------------- Space Time Raster Dataset -----------------------------+
- |                                                                            |
- +-------------------- Basic information -------------------------------------+
- | Name: ...................... precip_abs2
- | Creator: ................... soeren
- | Temporal type: ............. absolute
- | Semantic type:.............. mean
- +-------------------- Absolute time -----------------------------------------+
- | Start time:................. 2001-01-01 00:00:00
- | End time:................... 2002-01-01 00:00:00
- | Granularity:................ 1 month
- | Temporal type of maps:...... interval
- +-------------------- Spatial extent ----------------------------------------+
- | North:...................... 80.0
- | South:...................... 0.0
- | East:.. .................... 120.0
- | West:....................... 0.0
- | Top:........................ 0.0
- | Bottom:..................... 0.0
- +-------------------- Metadata information ----------------------------------+
- | North-South resolution min:. 10.0
- | North-South resolution max:. 10.0
- | East-west resolution min:... 10.0
- | East-west resolution max:... 10.0
- | Minimum value min:.......... 0.0
- | Minimum value max:.......... 0.0
- | Maximum value min:.......... 24.0
- | Maximum value max:.......... 240.0
- |
- | Title:
- | A test
- | Description:
- | A test
- | Command history:
- | t.rast.accumulate input="precip_abs1"
- |     output="precip_abs2" base="prec_acc" limits="10,30" start="2001-01-01"
- |     stop="2002-01-01" gran="1 months" cycle="12 months"
- | 
- +----------------------------------------------------------------------------+
diff --git a/temporal/t.rast.accumulate/testsuite/data/acc_5.ref b/temporal/t.rast.accumulate/testsuite/data/acc_5.ref
deleted file mode 100644
index 556bf57..0000000
--- a/temporal/t.rast.accumulate/testsuite/data/acc_5.ref
+++ /dev/null
@@ -1,40 +0,0 @@
- +-------------------- Space Time Raster Dataset -----------------------------+
- |                                                                            |
- +-------------------- Basic information -------------------------------------+
- | Name: ...................... precip_abs2
- | Creator: ................... soeren
- | Temporal type: ............. absolute
- | Semantic type:.............. mean
- +-------------------- Absolute time -----------------------------------------+
- | Start time:................. 2001-01-01 00:00:00
- | End time:................... 2002-01-01 00:00:00
- | Granularity:................ 1 month
- | Temporal type of maps:...... interval
- +-------------------- Spatial extent ----------------------------------------+
- | North:...................... 80.0
- | South:...................... 0.0
- | East:.. .................... 120.0
- | West:....................... 0.0
- | Top:........................ 0.0
- | Bottom:..................... 0.0
- +-------------------- Metadata information ----------------------------------+
- | North-South resolution min:. 10.0
- | North-South resolution max:. 10.0
- | East-west resolution min:... 10.0
- | East-west resolution max:... 10.0
- | Minimum value min:.......... 0.0
- | Minimum value max:.......... 0.0
- | Maximum value min:.......... 24.0
- | Maximum value max:.......... 240.0
- |
- | Title:
- | A test
- | Description:
- | A test
- | Command history:
- | t.rast.accumulate input="precip_abs1"
- |     output="precip_abs2" base="prec_acc" limits="8,33" lower="lower"
- |     upper="upper" start="2001-01-01" stop="2002-01-01" gran="1 months"
- |     cycle="12 months"
- | 
- +----------------------------------------------------------------------------+
diff --git a/temporal/t.rast.accumulate/testsuite/test.t.rast.accumulate.sh b/temporal/t.rast.accumulate/testsuite/test.t.rast.accumulate.sh
deleted file mode 100755
index d8131df..0000000
--- a/temporal/t.rast.accumulate/testsuite/test.t.rast.accumulate.sh
+++ /dev/null
@@ -1,80 +0,0 @@
-#!/bin/sh -e
-# Space time raster dataset neighborhood operations
-# We need to set a specific region in the
-# @preprocess step of this test. 
-# The region setting should work for UTM and LL test locations
-g.region s=0 n=80 w=0 e=120 b=0 t=50 res=10 -p
-
-export GRASS_OVERWRITE=1
-
-# Generate data
-r.mapcalc expr="prec_1 = rand(0, 25)" -s
-r.mapcalc expr="prec_2 = rand(0, 24)" -s
-r.mapcalc expr="prec_3 = rand(0, 23)" -s
-r.mapcalc expr="prec_4 = rand(0, 25)" -s
-r.mapcalc expr="prec_5 = rand(0, 23)" -s
-r.mapcalc expr="prec_6 = rand(0, 26)" -s
-
-t.create type=strds temporaltype=absolute output=precip_abs1 title="A test" descr="A test"
-t.register -i type=raster input=precip_abs1 maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 \
-    start="2001-01-01" increment="2 months"
-
-# The first @test
-
-t.rast.accumulate input=precip_abs1 output=precip_abs2 base=prec_acc \
-    limits=10,30 start="2001-01-01" gran="4 months" \
-    cycle="12 months"
-
-# We need to filter the identifier that may be different on different systems
-# like creation time and mapset 
-t.info input=precip_abs2 | grep -v \# | grep -v Creation | grep -v register | grep -v Id | grep -v Mapset > data/acc_1.txt
-
-t.rast.accumulate input=precip_abs1 output=precip_abs2 base=prec_acc \
-    limits=10,30 start="2001-01-01" stop="2002-01-01" gran="4 months" \
-    cycle="7 months"
-
-t.info input=precip_abs2 | grep -v \# | grep -v Creation | grep -v register | grep -v Id | grep -v Mapset > data/acc_2.txt
-
-t.rast.accumulate input=precip_abs1 output=precip_abs2 base=prec_acc \
-    limits=10,30 start="2001-01-01" gran="2 months" \
-    cycle="12 months"
-
-t.info input=precip_abs2 | grep -v \# | grep -v Creation | grep -v register | grep -v Id | grep -v Mapset > data/acc_3.txt
-
-t.rast.accumulate input=precip_abs1 output=precip_abs2 base=prec_acc \
-    limits=10,30 start="2001-01-01" stop="2002-01-01" gran="1 months" \
-    cycle="12 months"
-
-t.info input=precip_abs2 | grep -v \# | grep -v Creation | grep -v register | grep -v Id | grep -v Mapset > data/acc_4.txt
-
-# Second test
-
-r.mapcalc expr="lower = 10"
-r.mapcalc expr="upper = 35"
-
-t.create type=strds temporaltype=absolute output=lower title="lower limit" descr="lower limit"
-t.register -i type=raster input=lower maps=lower start="2001-01-01" increment="8 months"
-
-t.create type=strds temporaltype=absolute output=upper title="upper limit" descr="upper limit"
-t.register -i type=raster input=upper maps=upper start="2001-01-01" increment="10 months"
-
-t.rast.accumulate input=precip_abs1 output=precip_abs2 base=prec_acc \
-    limits=8,33 lower=lower upper=upper start="2001-01-01" stop="2002-01-01" gran="1 months" \
-    cycle="12 months"
-
-t.info input=precip_abs2 | grep -v \# | grep -v Creation | grep -v register | grep -v Id | grep -v Mapset > data/acc_5.txt
-
-t.remove -rf type=strds input=precip_abs1,precip_abs2,lower,upper
-
-cd data
-
-for i in `ls acc_*.txt` ; do
-    diff $i "`basename $i .txt`.ref" >> out.diff
-done
-
-CHAR_NUM=`cat out.diff | wc -c`
-
-# Return as exit status 0 in case no diffs are found
-exit $CHAR_NUM
-
-
diff --git a/temporal/t.rast.accumulate/testsuite/test_accumulation.py b/temporal/t.rast.accumulate/testsuite/test_accumulation.py
new file mode 100644
index 0000000..cf92375
--- /dev/null
+++ b/temporal/t.rast.accumulate/testsuite/test_accumulation.py
@@ -0,0 +1,240 @@
+"""Test t.rast.accumulate
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Soeren Gebbert
+"""
+
+import grass.temporal as tgis
+import datetime
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestAccumulate(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        tgis.init(True) # Raise on error instead of exit(1)
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+
+        cls.runModule("r.mapcalc", expression="a_1 = 5",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_2 = 10",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_3 = 20",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_4 = 35",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_5 = 20",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_6 = 10",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_7 = 5",  overwrite=True)
+
+
+        cls.runModule("r.mapcalc", expression="lower = 10",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="upper = 30",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",
+                                   output="A",  title="A test",
+                                   description="A test", overwrite=True)
+        cls.runModule("t.register",  flags="i",  type="raster",  input="A",
+                                     maps="a_1,a_2,a_3,a_4,a_5,a_6,a_7",
+                                     start="2001-01-01",
+                                     increment="1 day",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",
+                                   output="Lower",  title="Lower",
+                                   description="Lower", overwrite=True)
+        cls.runModule("t.register",  type="raster",  input="Lower",
+                                     maps="lower",
+                                     start="2001-01-01",
+                                     end="2001-01-10",
+                                     overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",
+                                   output="Upper",  title="Upper",
+                                   description="Upper", overwrite=True)
+        cls.runModule("t.register",  type="raster",  input="Upper",
+                                     maps="upper",
+                                     start="2001-01-01",
+                                     end="2001-01-10",
+                                     overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove",  flags="rf",  type="strds",
+                                   inputs="A")
+        cls.runModule("t.remove",  flags="rf",  type="strds",
+                                   inputs="Lower")
+        cls.runModule("t.remove",  flags="rf",  type="strds",
+                                   inputs="Upper")
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove generated data"""
+        self.runModule("t.remove", flags="rf", type="strds", inputs="B")
+
+    def test_1(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[0,40], method="gdd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 7)
+        self.assertEqual(D.metadata.get_min_min(), 5)
+        self.assertEqual(D.metadata.get_max_max(), 105)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 8))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+    def test_2(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[10,40], method="gdd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 7)
+        self.assertEqual(D.metadata.get_min_min(), 0.0)
+        self.assertEqual(D.metadata.get_max_max(), 45.0)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 8))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+    def test_3(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[10,30], method="bedd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 7)
+        self.assertEqual(D.metadata.get_min_min(), 0.0)
+        self.assertEqual(D.metadata.get_max_max(), 40.0)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 8))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+    def test_3_a(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          lower="Lower",
+                          upper="Upper",
+                          limits=[0,40],
+                          method="bedd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 7)
+        self.assertEqual(D.metadata.get_min_min(), 0.0)
+        self.assertEqual(D.metadata.get_max_max(), 40.0)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 8))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+    def test_4(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[10,30], method="bedd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b", granularity="2 days",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 4)
+        self.assertEqual(D.metadata.get_min_min(), 0.0)
+        self.assertEqual(D.metadata.get_max_max(), 22.5)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 9))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'2 days')
+
+    def test_4_a(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          lower="Lower",
+                          upper="Upper",
+                          limits=[0,40],
+                          method="bedd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b", granularity="2 days",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 4)
+        self.assertEqual(D.metadata.get_min_min(), 0.0)
+        self.assertEqual(D.metadata.get_max_max(), 22.5)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 9))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'2 days')
+
+    def test_5(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[0,40], method="gdd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b", stop="2001-01-05",
+                          overwrite=True,  verbose=True)
+
+        D = tgis.open_old_stds("B", type="strds")
+
+        self.assertEqual(D.metadata.get_number_of_maps(), 4)
+        self.assertEqual(D.metadata.get_min_min(), 5)
+        self.assertEqual(D.metadata.get_max_max(), 70)
+        start, end = D.get_absolute_time()
+        self.assertEqual(start, datetime.datetime(2001, 1, 1))
+        self.assertEqual(end, datetime.datetime(2001, 1, 5))
+        self.assertEqual( D.check_temporal_topology(),  True)
+        self.assertEqual(D.get_granularity(),  u'1 day')
+
+    def test_count_suffix(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[0,40], method="gdd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b", stop="2001-01-05", suffix="num",
+                          overwrite=True,  verbose=True)
+        self.assertRasterExists('b_00001')
+        self.assertRasterDoesNotExist('b_2001_01_07')
+
+    def test_count3_suffix(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[0,40], method="gdd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b", stop="2001-01-05", suffix="num%03",
+                          overwrite=True,  verbose=True)
+        self.assertRasterExists('b_001')
+        self.assertRasterDoesNotExist('b_2001_01_07')
+
+    def test_time_suffix(self):
+        self.assertModule("t.rast.accumulate",  input="A", output="B",
+                          limits=[0,40], method="gdd",
+                          start="2001-01-01", cycle="7 days",
+                          basename="b", stop="2001-01-05", suffix="time",
+                          overwrite=True,  verbose=True)
+        self.assertRasterExists('b_2001_01_01T00_00_00')
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html b/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html
index 916be6c..9fd739d 100644
--- a/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html
+++ b/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.html
@@ -323,9 +323,9 @@ t.info input=8day_ts
 t.rast.list input=8day_ts
 
 # finally, copy the aggregation to a daily time series
-t.rast.aggregate.ds -s input=daily_ts sample=8day_ts \
-   output=8day_agg basename=8day_agg \
-   method=average sampling=contains
+t.rast.aggregate.ds input=daily_ts sample=8day_ts \
+   output=8day_agg basename=8day_agg method=average \
+   sampling=contains suffix=gran
 
 # add metadata
 t.support input=8day_agg \
@@ -362,5 +362,5 @@ name|mapset|start_time|end_time
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-09-07 23:19:02 +0200 (Wed, 07 Sep 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:30:10 +0200 (Mon, 19 Sep 2016) $</i>
 
diff --git a/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.py b/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.py
index a09ec68..824efc8 100755
--- a/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.py
+++ b/temporal/t.rast.aggregate.ds/t.rast.aggregate.ds.py
@@ -31,7 +31,7 @@
 #%end
 
 #%option G_OPT_STDS_TYPE
-#% description: Type of the aggregation space time dataset
+#% description: Type of the space time dataset from which aggregation will be copied
 #%end
 
 #%option G_OPT_STRDS_OUTPUT
@@ -48,6 +48,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: method
 #% type: string
 #% description: Aggregate operation to be performed on the raster maps
@@ -88,11 +97,6 @@
 #% description: Register Null maps
 #%end
 
-#%flag
-#% key: s
-#% description: Use start time - truncated according to granularity - as suffix (overrides offset option)
-#%end
-
 import grass.script as gcore
 import grass.temporal as tgis
 
@@ -112,7 +116,7 @@ def main():
     sampling = options["sampling"]
     offset = options["offset"]
     nprocs = options["nprocs"]
-    time_suffix = flags["s"]
+    time_suffix = options["suffix"]
     type = options["type"]
     
     topo_list = sampling.split(",")
diff --git a/temporal/t.rast.aggregate.ds/testsuite/test.t.rast.aggregate.ds.sh b/temporal/t.rast.aggregate.ds/testsuite/test.t.rast.aggregate.ds.sh
index 57afd78..14b69a6 100755
--- a/temporal/t.rast.aggregate.ds/testsuite/test.t.rast.aggregate.ds.sh
+++ b/temporal/t.rast.aggregate.ds/testsuite/test.t.rast.aggregate.ds.sh
@@ -43,7 +43,7 @@ t.info type=strds input=precip_abs2
 t.rast.list input=precip_abs2 method=deltagap
 
 t.rast.aggregate.ds --v input=precip_abs1 output=precip_abs2 base=prec_sum \
-    type=stvds sample=soil_abs1 method=sum sampling=contains -ns
+    type=stvds sample=soil_abs1 method=sum sampling=contains -n
 t.info type=strds input=precip_abs2
 t.rast.list input=precip_abs2 method=deltagap
 
diff --git a/temporal/t.rast.aggregate/t.rast.aggregate.html b/temporal/t.rast.aggregate/t.rast.aggregate.html
index eb6b52a..9c8beb6 100644
--- a/temporal/t.rast.aggregate/t.rast.aggregate.html
+++ b/temporal/t.rast.aggregate/t.rast.aggregate.html
@@ -53,8 +53,7 @@ available for aggregation computation. Internally several
 specified parallel processes (<em>nprocs</em>) and the number of
 intervals to aggregate.
 <p>
-The flag <b>-s</b> allows storing a date as map name suffix rather than
-using consecutive numbering. See the examples below for details.
+
 
 <h2>EXAMPLES</h2>
 
@@ -129,7 +128,7 @@ t.info tempmean_yearly
 <h3>Different aggregations and map name suffix variants</h3>
 
 Examples of resulting naming schemes for different aggregations when
-using the <b>-s</b> flag:
+using the <b>suffix</b> option:
 
 <h4>Weekly aggregation</h4>
 
@@ -148,10 +147,11 @@ weekly_avg_temp_2003_06|climate|2003-02-07 00:00:00|2003-02-14 00:00:00
 weekly_avg_temp_2003_07|climate|2003-02-14 00:00:00|2003-02-21 00:00:00
 </pre></div>
 
-Variant with <b>-s</b> flag:
+Variant with <b>suffix</b> set to granularity:
 <div class="code"><pre>
-t.rast.aggregate -s input=daily_temp output=weekly_avg_temp \
-  basename=weekly_avg_temp method=average granularity="1 weeks"
+t.rast.aggregate input=daily_temp output=weekly_avg_temp \
+  basename=weekly_avg_temp suffix=gran method=average \
+  granularity="1 weeks"
 
 t.rast.list weekly_avg_temp
 name|mapset|start_time|end_time
@@ -167,8 +167,9 @@ weekly_avg_temp_2003_02_14|climate|2003-02-14 00:00:00|2003-02-21 00:00:00
 <h4>Monthly aggregation</h4>
 
 <div class="code"><pre>
-t.rast.aggregate -s input=daily_temp output=monthly_avg_temp \
-basename=monthly_avg_temp method=average granularity="1 months"
+t.rast.aggregate input=daily_temp output=monthly_avg_temp \
+  basename=monthly_avg_temp suffix=gran method=average \
+  granularity="1 months"
 
 t.rast.list monthly_avg_temp
 name|mapset|start_time|end_time
@@ -183,8 +184,9 @@ monthly_avg_temp_2003_06|climate|2003-06-01 00:00:00|2003-07-01 00:00:00
 <h4>Yearly aggregation</h4>
 
 <div class="code"><pre>
-t.rast.aggregate -s input=daily_temp output=yearly_avg_temp \
-  basename=yearly_avg_temp method=average granularity="1 years"
+t.rast.aggregate input=daily_temp output=yearly_avg_temp \
+  basename=yearly_avg_temp suffix=gran method=average \
+  granularity="1 years"
 
 t.rast.list yearly_avg_temp
 name|mapset|start_time|end_time
@@ -211,4 +213,4 @@ yearly_avg_temp_2004|climate|2004-01-01 00:00:00|2005-01-01 00:00:00
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-01-13 00:30:14 +0100 (Wed, 13 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-19 12:30:10 +0200 (Mon, 19 Sep 2016) $</i>
diff --git a/temporal/t.rast.aggregate/t.rast.aggregate.py b/temporal/t.rast.aggregate/t.rast.aggregate.py
index 75f9f99..df44f7c 100755
--- a/temporal/t.rast.aggregate/t.rast.aggregate.py
+++ b/temporal/t.rast.aggregate/t.rast.aggregate.py
@@ -39,6 +39,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: granularity
 #% type: string
 #% description: Aggregation granularity, format absolute time "x years, x months, x weeks, x days, x hours, x minutes, x seconds" or an integer value for relative time
@@ -74,6 +83,15 @@
 #% answer: 1
 #%end
 
+#%option
+#% key: file_limit
+#% type: integer
+#% description: The maximum number of open files allowed for each r.series process
+#% required: no
+#% multiple: no
+#% answer: 1000
+#%end
+
 #%option G_OPT_T_SAMPLE
 #% options: equal,overlaps,overlapped,starts,started,finishes,finished,during,contains
 #% answer: contains
@@ -87,11 +105,6 @@
 #% description: Register Null maps
 #%end
 
-#%flag
-#% key: s
-#% description: Use start time - truncated according to granularity - as suffix (overrides offset option)
-#%end
-
 import grass.script as gcore
 import grass.temporal as tgis
 
@@ -110,7 +123,8 @@ def main():
     sampling = options["sampling"]
     offset = options["offset"]
     nprocs = options["nprocs"]
-    time_suffix = flags["s"]
+    file_limit = options["file_limit"]
+    time_suffix = options["suffix"]
 
     topo_list = sampling.split(",")
 
@@ -171,7 +185,7 @@ def main():
                                                                        map_list=map_list,
                                                                        topo_list=topo_list,  basename=base, time_suffix=time_suffix,
                                                                        offset=offset,  method=method,  nprocs=nprocs,  spatial=None,
-                                                                       overwrite=gcore.overwrite())
+                                                                       overwrite=gcore.overwrite(), file_limit=file_limit)
 
     if output_list:
         temporal_type, semantic_type, title, description = sp.get_initial_values()
diff --git a/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute.py b/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute.py
index 62e9dcf..6a016ff 100644
--- a/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute.py
+++ b/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute.py
@@ -22,42 +22,42 @@ class TestAggregationAbsolute(TestCase):
         os.putenv("GRASS_OVERWRITE",  "1")
         tgis.init()
         cls.use_temp_region()
-        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,
                       t=50,  res=10,  res3=10)
-        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a5 = 500",  overwrite=True)
-        cls.runModule("r.mapcalc", expression="a6 = 600",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a1 = 100.0",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200.0",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300.0",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400.0",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a5 = 500.0",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a6 = 600.0",  overwrite=True)
         cls.runModule("r.mapcalc", expression="a7 = null()",  overwrite=True)
 
-        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
-                                    output="A",  title="A test",  
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",
+                                    output="A",  title="A test",
                                     description="A test",  overwrite=True)
 
-        cls.runModule("t.register", flags="i",  type="raster",  input="A",  
+        cls.runModule("t.register", flags="i",  type="raster",  input="A",
                                      maps="a1,a2,a3,a4,a5,a6,a7",
-                                     start="2001-01-15 12:05:45", 
-                                     increment="14 days",  
+                                     start="2001-01-15 12:05:45",
+                                     increment="14 days",
                                      overwrite=True)
     @classmethod
     def tearDownClass(cls):
         """Remove the temporary region
         """
-        cls.del_temp_region()        
+        cls.del_temp_region()
         cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
 
     def tearDown(self):
-        """Remove generated data"""    
+        """Remove generated data"""
         self.runModule("t.remove", flags="rf", type="strds", inputs="B")
-        
+
     def test_disaggregation(self):
         """Disaggregation with empty maps"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
-                          basename="b", granularity="2 days", 
+                          basename="b", granularity="2 days",
                           method="average",
-                          sampling=["overlaps","overlapped","during"], 
+                          sampling=["overlaps","overlapped","during"],
                           nprocs=2, flags="n")
 
         tinfo_string="""start_time=2001-01-15 00:00:00
@@ -74,15 +74,15 @@ class TestAggregationAbsolute(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_aggregation_1month(self):
         """Aggregation one month"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="1 months",
-                          method="maximum", sampling=["contains"], 
-                          nprocs=3, flags="s")
+                          method="maximum", sampling=["contains"],
+                          file_limit=0, nprocs=3)
 
         tinfo_string="""start_time=2001-01-01 00:00:00
                         end_time=2001-04-01 00:00:00
@@ -98,24 +98,32 @@ class TestAggregationAbsolute(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
         # Check the map names are correct
-        lister = SimpleModule("t.rast.list", input="B", columns="name", 
+        lister = SimpleModule("t.rast.list", input="B", columns="name",
                               flags="s")
         self.runModule(lister)
         #print lister.outputs.stdout
         maps="b_2001_01" + os.linesep + "b_2001_02" + os.linesep + \
              "b_2001_03" + os.linesep
         self.assertEqual(maps, lister.outputs.stdout)
-        
+
+    def test_aggregation_1month_time(self):
+        """Aggregation one month time suffix"""
+        self.assertModule("t.rast.aggregate", input="A", output="B",
+                          basename="b", granularity="1 months",
+                          method="maximum", sampling=["contains"],
+                          file_limit=0, nprocs=3, suffix='time')
+        self.assertRasterExists('b_2001_01_01T00_00_00')
+
     def test_aggregation_2months(self):
         """Aggregation two month"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="2 months",
-                          method="minimum", sampling=["contains"], 
-                          nprocs=4, offset=10)
+                          method="minimum", sampling=["contains"],
+                          nprocs=4, offset=10, suffix='num%02')
 
         tinfo_string="""start_time=2001-01-01 00:00:00
                         end_time=2001-05-01 00:00:00
@@ -131,23 +139,24 @@ class TestAggregationAbsolute(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
         # Check the map names are correct
-        lister = SimpleModule("t.rast.list", input="B", columns="name", 
+        lister = SimpleModule("t.rast.list", input="B", columns="name",
                               flags="s")
         self.runModule(lister)
         #print lister.outputs.stdout
-        maps="b_11" + os.linesep + "b_12" + os.linesep 
+        maps="b_11" + os.linesep + "b_12" + os.linesep
         self.assertEqual(maps, lister.outputs.stdout)
 
     def test_aggregation_3months(self):
         """Aggregation three month"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="3 months",
-                          method="sum", sampling=["contains"], 
-                          nprocs=9, offset=100)
+                          method="sum", sampling=["contains"],
+                          file_limit=0, nprocs=9, offset=100,
+                          suffix='num%03')
 
         tinfo_string="""start_time=2001-01-01 00:00:00
                         end_time=2001-04-01 00:00:00
@@ -163,15 +172,15 @@ class TestAggregationAbsolute(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
         # Check the map names are correct
-        lister = SimpleModule("t.rast.list", input="B", columns="name", 
+        lister = SimpleModule("t.rast.list", input="B", columns="name",
                               flags="s")
         self.runModule(lister)
         #print lister.outputs.stdout
-        maps="b_101" + os.linesep 
+        maps="b_101" + os.linesep
         self.assertEqual(maps, lister.outputs.stdout)
 
 if __name__ == '__main__':
diff --git a/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute_parallel.py b/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute_parallel.py
index b7326c6..3ee40de 100644
--- a/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute_parallel.py
+++ b/temporal/t.rast.aggregate/testsuite/test_aggregation_absolute_parallel.py
@@ -7,6 +7,8 @@ for details.
 
 :authors: Soeren Gebbert
 """
+from __future__ import print_function
+
 import os
 import grass.pygrass.modules as pymod
 import grass.temporal as tgis
@@ -23,41 +25,41 @@ class TestAggregationAbsoluteParallel(TestCase):
         os.putenv("GRASS_OVERWRITE",  "1")
         tgis.init()
         cls.use_temp_region()
-        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,
                       t=50,  res=10,  res3=10)
-                      
+
         name_list =  []
         for i in range(540):
             cls.runModule("r.mapcalc", expression="a%i = %i"%(i + 1, i + 1),  overwrite=True)
             name_list.append("a%i"%(i + 1))
 
-        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
-                                    output="A",  title="A test",  
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",
+                                    output="A",  title="A test",
                                     description="A test",  overwrite=True)
 
-        cls.runModule("t.register", flags="i",  type="raster",  input="A",  
+        cls.runModule("t.register", flags="i",  type="raster",  input="A",
                                      maps=name_list,
-                                     start="2001-01-01", 
-                                     increment="4 hours",  
+                                     start="2001-01-01",
+                                     increment="4 hours",
                                      overwrite=True)
 
     @classmethod
     def tearDownClass(cls):
         """Remove the temporary region
         """
-        cls.del_temp_region()        
+        cls.del_temp_region()
         cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
 
     def tearDown(self):
-        """Remove generated data"""    
+        """Remove generated data"""
         self.runModule("t.remove", flags="rf", type="strds", inputs="B")
 
     def test_aggregation_12hours(self):
         """Aggregation one month"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="12 hours",
-                          method="sum", sampling=["contains"], 
-                          nprocs=9, flags="s")
+                          method="sum", sampling=["contains"],
+                          nprocs=9, file_limit=2)
 
         tinfo_string="""start_time=2001-01-01 00:00:00
                         end_time=2001-04-01 00:00:00
@@ -73,7 +75,7 @@ class TestAggregationAbsoluteParallel(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_aggregation_1day_4procs(self):
@@ -81,12 +83,12 @@ class TestAggregationAbsoluteParallel(TestCase):
         start = datetime.now()
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="1 day",
-                          method="sum", sampling=["contains"], 
-                          nprocs=4, flags="s")
+                          method="sum", sampling=["contains"],
+                          nprocs=4)
         end = datetime.now()
-        
+
         delta = end - start
-        print "test_aggregation_1day_4procs:",  delta.total_seconds()
+        print("test_aggregation_1day_4procs:",  delta.total_seconds())
 
         tinfo_string="""start_time=2001-01-01 00:00:00
                         end_time=2001-04-01 00:00:00
@@ -98,7 +100,7 @@ class TestAggregationAbsoluteParallel(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_aggregation_1day_3procs(self):
@@ -106,12 +108,12 @@ class TestAggregationAbsoluteParallel(TestCase):
         start = datetime.now()
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="1 day",
-                          method="sum", sampling=["contains"], 
-                          nprocs=3, flags="s")
+                          method="sum", sampling=["contains"],
+                          nprocs=3)
         end = datetime.now()
-        
+
         delta = end - start
-        print "test_aggregation_1day_3procs:",  delta.total_seconds()
+        print("test_aggregation_1day_3procs:",  delta.total_seconds())
 
 
         tinfo_string="""start_time=2001-01-01 00:00:00
@@ -125,10 +127,10 @@ class TestAggregationAbsoluteParallel(TestCase):
                         max_min=21.0
                         max_max=3225.0"""
 
-        info = SimpleModule("t.info", flags="g", input="B")
+        info = SimpleModule("t.info", input="B", flags="g")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_aggregation_1day_2procs(self):
@@ -136,12 +138,12 @@ class TestAggregationAbsoluteParallel(TestCase):
         start = datetime.now()
         self.assertModule("t.rast.aggregate", input="A", output="B",
                           basename="b", granularity="1 day",
-                          method="sum", sampling=["contains"], 
-                          nprocs=2, flags="s")
+                          method="sum", sampling=["contains"],
+                          nprocs=2)
         end = datetime.now()
-        
+
         delta = end - start
-        print "test_aggregation_1day_2procs:",  delta.total_seconds()
+        print("test_aggregation_1day_2procs:",  delta.total_seconds())
 
 
         tinfo_string="""start_time=2001-01-01 00:00:00
@@ -158,7 +160,7 @@ class TestAggregationAbsoluteParallel(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 if __name__ == '__main__':
     from grass.gunittest.main import test
diff --git a/temporal/t.rast.aggregate/testsuite/test_aggregation_relative.py b/temporal/t.rast.aggregate/testsuite/test_aggregation_relative.py
index b07366e..b681934 100644
--- a/temporal/t.rast.aggregate/testsuite/test_aggregation_relative.py
+++ b/temporal/t.rast.aggregate/testsuite/test_aggregation_relative.py
@@ -22,7 +22,7 @@ class TestAggregationRelative(TestCase):
         os.putenv("GRASS_OVERWRITE",  "1")
         tgis.init()
         cls.use_temp_region()
-        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,
                       t=50,  res=10,  res3=10)
         cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
         cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
@@ -32,32 +32,32 @@ class TestAggregationRelative(TestCase):
         cls.runModule("r.mapcalc", expression="a6 = 600",  overwrite=True)
         cls.runModule("r.mapcalc", expression="a7 = null()",  overwrite=True)
 
-        cls.runModule("t.create",  type="strds",  temporaltype="relative",  
-                                    output="A",  title="A test",  
+        cls.runModule("t.create",  type="strds",  temporaltype="relative",
+                                    output="A",  title="A test",
                                     description="A test",  overwrite=True)
 
-        cls.runModule("t.register", flags="i",  type="raster",  input="A",  
+        cls.runModule("t.register", flags="i",  type="raster",  input="A",
                                      maps="a1,a2,a3,a4,a5,a6,a7",
-                                     start=0, unit="days", increment=3, 
+                                     start=0, unit="days", increment=3,
                                      overwrite=True)
     @classmethod
     def tearDownClass(cls):
         """Remove the temporary region
         """
-        cls.del_temp_region()        
+        cls.del_temp_region()
         cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
 
     def tearDown(self):
-        """Remove generated data"""    
+        """Remove generated data"""
         self.runModule("t.remove", flags="rf", type="strds", inputs="B")
 
     def test_1(self):
         """Simple test"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
-                          basename="b", granularity=6, 
-                          method="average",
-                          sampling=["overlaps","overlapped","contains"], 
-                          nprocs=2)
+                          basename="b", granularity=6,
+                          method="average", file_limit=0,
+                          sampling=["overlaps","overlapped","contains"],
+                          nprocs=2, verbose=True)
 
         tinfo_string="""start_time=0
                         end_time=18
@@ -74,16 +74,16 @@ class TestAggregationRelative(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_2(self):
         """Simple test register null maps"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
-                          basename="b", granularity=9, 
+                          basename="b", granularity=9,
                           method="maximum",
-                          sampling=["contains"], 
-                          nprocs=4, flags="n")
+                          sampling=["contains"],
+                          nprocs=4, flags="n", verbose=True)
 
         tinfo_string="""semantic_type=mean
                         start_time=0
@@ -101,16 +101,16 @@ class TestAggregationRelative(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_3(self):
         """Simple test"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
-                          basename="b", granularity=9, 
+                          basename="b", granularity=9,
                           method="maximum",
-                          sampling=["contains"], 
-                          nprocs=4)
+                          sampling=["contains"],
+                          nprocs=4, verbose=True)
 
         tinfo_string="""semantic_type=mean
                         start_time=0
@@ -128,16 +128,16 @@ class TestAggregationRelative(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
     def test_4(self):
         """Simple test"""
         self.assertModule("t.rast.aggregate", input="A", output="B",
-                          basename="b", granularity=21, 
+                          basename="b", granularity=21,
                           method="average",
                           sampling=["contains"],
-                          nprocs=4)
+                          nprocs=4, verbose=True)
 
         tinfo_string="""semantic_type=mean
                         start_time=0
@@ -155,7 +155,7 @@ class TestAggregationRelative(TestCase):
         info = SimpleModule("t.info", flags="g", input="B")
         #info.run()
         #print info.outputs.stdout
-        self.assertModuleKeyValue(module=info, reference=tinfo_string, 
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
                                   precision=2, sep="=")
 
 if __name__ == '__main__':
diff --git a/temporal/t.rast.algebra/t.rast.algebra.html b/temporal/t.rast.algebra/t.rast.algebra.html
index db5d221..ef8c2bc 100644
--- a/temporal/t.rast.algebra/t.rast.algebra.html
+++ b/temporal/t.rast.algebra/t.rast.algebra.html
@@ -484,5 +484,5 @@ C = if({equal}, B {#,contain} A > 1, (B {+,contain,l} A {-,equal,l} B) {equal,=/
 
 Thomas Leppelt, Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-04-09 18:46:53 +0200 (Sat, 09 Apr 2016) $</i>
+<p><i>Last changed: $Date: 2016-04-09 18:43:25 +0200 (Sat, 09 Apr 2016) $</i>
 
diff --git a/temporal/t.rast.algebra/t.rast.algebra.py b/temporal/t.rast.algebra/t.rast.algebra.py
index bfae15d..1d54048 100644
--- a/temporal/t.rast.algebra/t.rast.algebra.py
+++ b/temporal/t.rast.algebra/t.rast.algebra.py
@@ -63,6 +63,10 @@
 #% description: Use granularity sampling instead of the temporal topology approach
 #%end
 
+#%flag
+#% key: d
+#% description: Perform a dry run, compute all depenencies and module calls but don't run them
+#%end
 
 import grass.script
 import grass.temporal as tgis
@@ -75,6 +79,7 @@ def main():
     spatial = flags["s"]
     register_null = flags["n"]
     granularity = flags["g"]
+    dry_run = flags["d"]
 
     # Check for PLY istallation
     try:
@@ -86,13 +91,22 @@ def main():
                              "t.rast.algebra without PLY requirement."))
 
     tgis.init(True)
-    p = tgis.TemporalRasterAlgebraParser(run = True, debug=False, spatial = spatial, nprocs = nprocs, register_null = register_null)
+    p = tgis.TemporalRasterAlgebraParser(run = True,
+                                         debug=False,
+                                         spatial=spatial,
+                                         nprocs=nprocs,
+                                         register_null=register_null,
+                                         dry_run=dry_run)
     
     if granularity:
         if not p.setup_common_granularity(expression=expression,  lexer = tgis.TemporalRasterAlgebraLexer()):
             grass.script.fatal(_("Unable to process the expression in granularity algebra mode"))
     
-    p.parse(expression, basename, grass.script.overwrite())
+    pc = p.parse(expression, basename, grass.script.overwrite())
+
+    if dry_run is True:
+        import pprint
+        pprint.pprint(pc)
 
 if __name__ == "__main__":
     options, flags = grass.script.parser()
diff --git a/temporal/t.rast.algebra/testsuite/test_raster_algebra.py b/temporal/t.rast.algebra/testsuite/test_raster_algebra.py
index d6533c5..a97d62f 100644
--- a/temporal/t.rast.algebra/testsuite/test_raster_algebra.py
+++ b/temporal/t.rast.algebra/testsuite/test_raster_algebra.py
@@ -9,11 +9,12 @@ for details.
 
 import datetime
 import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTRastAlgebra(gunittest.TestCase):
+
+class TestTRastAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -56,7 +57,7 @@ class TestTRastAlgebra(gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d1,d2,d3",
                                                  start="2001-01-03", increment="1 day", interval=True)                                                 
         tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+                                                start="2001-01-03", end="2001-01-04")
         
     def tearDown(self):
         self.runModule("t.remove", flags="rf", inputs="R", quiet=True)
@@ -73,8 +74,10 @@ class TestTRastAlgebra(gunittest.TestCase):
         """Testing the conditional time dimension bug, that uses the time 
             dimension of the conditional statement instead the time dimension 
             of the then/else statement."""
-        self.assertModule("t.rast.algebra",  expression="R = if({contains}, B == 5,  A - 1,  A + 1)", 
-                                                                 basename="r")
+        self.assertModule("t.rast.algebra", expression="R = if({contains}, B == 5, "
+                                                       "A - 1,  A + 1)", basename="r", flags="d")
+        self.assertModule("t.rast.algebra", expression="R = if({contains}, B == 5, "
+                                                       "A - 1,  A + 1)", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -89,8 +92,9 @@ class TestTRastAlgebra(gunittest.TestCase):
 
     def test_simple_arith_hash_1(self):
         """Simple arithmetic test including the hash operator"""
-       
-        self.assertModule("t.rast.algebra",  expression='R = A + (A {#, equal,l} A)', basename="r")
+
+        self.assertModule("t.rast.algebra", expression='R = A + (A {#, equal,l} A)', basename="r", flags="d")
+        self.assertModule("t.rast.algebra", expression='R = A + (A {#, equal,l} A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -105,7 +109,8 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_td_1(self):
         """Simple arithmetic test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A + td(A)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = A + td(A)', basename="r", flags="d")
+        self.assertModule("t.rast.algebra", expression='R = A + td(A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -119,7 +124,8 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_td_2(self):
         """Simple arithmetic test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A / td(A)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = A / td(A)', basename="r", flags="d")
+        self.assertModule("t.rast.algebra", expression='R = A / td(A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -133,7 +139,8 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_td_3(self):
         """Simple arithmetic test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A {+,equal} td(A)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = A {+,equal} td(A)', basename="r", flags="d")
+        self.assertModule("t.rast.algebra", expression='R = A {+,equal} td(A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -147,7 +154,8 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_td_4(self):
         """Simple arithmetic test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A {/, equal} td(A)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = A {/, equal} td(A)', basename="r", flags="d")
+        self.assertModule("t.rast.algebra", expression='R = A {/, equal} td(A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -162,7 +170,8 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_if_1(self):
         """Simple arithmetic test with if condition"""
        
-        self.assertModule("t.rast.algebra",  expression='R = if({equal}, start_date(A) >= "2001-01-02", A + A)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = if({equal}, start_date(A)'
+                                                       ' >= "2001-01-02", A + A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -176,7 +185,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_if_2(self):
         """Simple arithmetic test with if condition"""
        
-        self.assertModule("t.rast.algebra",  expression='R = if({equal}, A#A == 1, A - A)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = if({equal}, A#A == 1, A - A)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -190,8 +199,9 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_complex_arith_if_1(self):
         """Complex arithmetic test with if condition"""
        
-        self.assertModule("t.rast.algebra",  expression='R = if(start_date(A) < "2001-01-03" && A#A == 1, A{+, starts,l}C, A{+, finishes,l}C)', \
-                  basename="r")
+        self.assertModule("t.rast.algebra", expression='R = if(start_date(A) < "2001-01-03" && A#A == 1,'
+                                                        ' A{+, starts,l}C, A{+, finishes,l}C)',
+                          basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -205,7 +215,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_1(self):
         """Simple arithmetic test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {*, equal} A {+, equal} A", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {*, equal} A {+, equal} A", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -219,7 +229,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_2(self):
         """Simple arithmetic test that creates an empty strds"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {*, during} A {+, during} A", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {*, during} A {+, during} A", basename="r")
         D = tgis.open_old_stds("R", type="strds")
         
         self.assertEqual(D.metadata.get_number_of_maps(), 0)
@@ -227,7 +237,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_simple_arith_3(self):
         """Simple arithmetic test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A / A + A*A/A", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A / A + A*A/A", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -241,7 +251,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_1(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {+,equal,i} B", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {+,equal,i} B", basename="r")
         D = tgis.open_old_stds("R", type="strds")
         
         self.assertEqual(D.metadata.get_number_of_maps(), 0)
@@ -249,7 +259,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_2(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {+,during,i} B", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {+,during,i} B", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -263,7 +273,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_3(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {+,starts,i} B", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {+,starts,i} B", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -277,7 +287,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_4(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {+,finishes,intersect} B", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {+,finishes,intersect} B", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -291,7 +301,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_5(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {+,starts|finishes,i} B", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {+,starts|finishes,i} B", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -305,7 +315,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_6(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = B {+,overlaps,u} C", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = B {+,overlaps,u} C", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -319,7 +329,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_7(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression="R = B {+,overlapped,u} C", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = B {+,overlapped,u} C", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -333,7 +343,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_intersection_8(self):
         """Simple temporal intersection test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A {+,during,l} buff_t(C, "1 day") ',
+        self.assertModule("t.rast.algebra", expression='R = A {+,during,l} buff_t(C, "1 day") ',
                   basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -348,7 +358,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_neighbors_1(self):
         """Simple temporal neighborhood computation test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A[-1] + A[1]',
+        self.assertModule("t.rast.algebra", expression='R = A[-1] + A[1]',
                   basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -363,7 +373,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_neighbors_2(self):
         """Simple temporal neighborhood computation test"""
        
-        self.assertModule("t.rast.algebra",  expression='R = A[0,0,-1] + A[0,0,1]',
+        self.assertModule("t.rast.algebra", expression='R = A[0,0,-1] + A[0,0,1]',
                   basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -378,7 +388,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_tmap_function1(self):
         """Testing the tmap function. """
        
-        self.assertModule("t.rast.algebra",  expression='R = tmap(singletmap)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = tmap(singletmap)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -395,7 +405,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_tmap_function2(self):
         """Testing the tmap function. """
        
-        self.assertModule("t.rast.algebra",  expression='R = tmap(singletmap) + 1', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = tmap(singletmap) + 1', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -412,7 +422,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_map_function1(self):
         """Testing the map function. """
        
-        self.assertModule("t.rast.algebra",  expression='R = map(singlemap) + A', basename="r")
+        self.assertModule("t.rast.algebra", expression='R = map(singlemap) + A', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -429,7 +439,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_map_function2(self):
         """Testing the map function. """
        
-        self.assertModule("t.rast.algebra",  expression='R =  A * map(singlemap)', basename="r")
+        self.assertModule("t.rast.algebra", expression='R =  A * map(singlemap)', basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -446,7 +456,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_select(self):
         """Testing the temporal select operator. """
        
-        self.assertModule("t.rast.algebra",  expression="R = A : A", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A : A", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -462,7 +472,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_select(self):
         """Testing the temporal select operator. """
        
-        self.assertModule("t.rast.algebra",  expression="R = A : D", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A : D", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -478,7 +488,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_select_operators1(self):
         """Testing the temporal select operator. Including temporal relations. """
        
-        self.assertModule("t.rast.algebra",  expression="R = A : D", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A : D", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -494,7 +504,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_select_operators2(self):
         """Testing the temporal select operator. Including temporal relations. """
        
-        self.assertModule("t.rast.algebra",  expression="R = A {!:,during} C", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {!:,during} C", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -511,7 +521,7 @@ class TestTRastAlgebra(gunittest.TestCase):
         """Testing the temporal select operator. Including temporal relations and 
             different temporal operators (lr|+&)"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {:,during,d} B", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {:,during,d} B", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -528,7 +538,7 @@ class TestTRastAlgebra(gunittest.TestCase):
         """Testing the temporal select operator. Including temporal relations and 
             different temporal operators (lr|+&)"""
        
-        self.assertModule("t.rast.algebra",  expression="R = A {:,equal|during,r} C", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A {:,equal|during,r} C", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -549,7 +559,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_hash_operator1(self):
         """Testing the temporal hash operator in the raster algebra. """
        
-        self.assertModule("t.rast.algebra",  expression="R = if(A # D == 1, A)", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = if(A # D == 1, A)", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -565,7 +575,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_hash_operator2(self):
         """Testing the temporal hash operator in the raster algebra. """
        
-        self.assertModule("t.rast.algebra",  expression="R = A # D", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = A # D", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -581,7 +591,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_hash_operator3(self):
         """Testing the temporal hash operator in the raster algebra. """
        
-        self.assertModule("t.rast.algebra",  expression="R = C {#,contains} A", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = C {#,contains} A", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -597,7 +607,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_temporal_hash_operator4(self):
         """Testing the temporal hash operator in the raster algebra. """
        
-        self.assertModule("t.rast.algebra",  expression="R = if({contains},A # D == 1, C {#,contains} A)", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = if({contains},A # D == 1, C {#,contains} A)", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -613,7 +623,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_raster_arithmetic_relation_1(self):
         """Arithmetic test with temporal intersection"""
        
-        self.assertModule("t.rast.algebra",  expression="R = B {+,contains,l} A ", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = B {+,contains,l} A ", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -629,7 +639,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_raster_arithmetic_relation_2(self):
         """Arithmetic test with temporal intersection"""
        
-        self.assertModule("t.rast.algebra",  expression="R = B {*,contains,l} A ", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = B {*,contains,l} A ", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -645,7 +655,7 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_raster_arithmetic_relation_3(self):
         """Arithmetic test with temporal intersection"""
        
-        self.assertModule("t.rast.algebra",  expression="R = B {+,contains,l} A ", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = B {+,contains,l} A ", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -660,8 +670,8 @@ class TestTRastAlgebra(gunittest.TestCase):
     
     def test_raster_arithmetic_relation_4(self):
         """Arithmetic test with temporal intersection"""
-       
-        self.assertModule("t.rast.algebra",  expression="R = B {+,contains,r} A ", basename="r")
+
+        self.assertModule("t.rast.algebra", expression="R = B {+,contains,r} A ", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -677,7 +687,9 @@ class TestTRastAlgebra(gunittest.TestCase):
     def test_raster_arithmetic_relation_5(self):
         """Complex arithmetic test with temporal intersection"""
        
-        self.assertModule("t.rast.algebra",  expression="R = tmap(singletmap) {+,equal| precedes| follows,l} A + map(singlemap)", basename="r")
+        self.assertModule("t.rast.algebra", expression="R = tmap(singletmap) "
+                                                        "{+,equal| precedes| follows,l} "
+                                                        "A + map(singlemap)", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
         
@@ -690,5 +702,6 @@ class TestTRastAlgebra(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py b/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py
index 0594082..9a1abd9 100644
--- a/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py
+++ b/temporal/t.rast.algebra/testsuite/test_raster_algebra_fails.py
@@ -7,13 +7,11 @@ for details.
 :authors: Soeren Gebbert
 """
 
-import datetime
-import os
-import grass.script
-import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTRastAlgebraFails(gunittest.TestCase):
+
+class TestTRastAlgebraFails(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -40,5 +38,6 @@ class TestTRastAlgebraFails(gunittest.TestCase):
         # Catch temporal algebra expressions that are prohibited in the raster algebra
         self.assertModuleFail("t.rast.algebra",  expression="R = strds(A) + strds(B)", basename="r")
 
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity.py b/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity.py
index ec35a7d..39e8c31 100644
--- a/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity.py
+++ b/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity.py
@@ -9,11 +9,12 @@ for details.
 
 import datetime
 import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTRastAlgebraGranularity(gunittest.TestCase):
+
+class TestTRastAlgebraGranularity(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -61,7 +62,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="raster", name="D", maps="d3",
                                                  start="2001-05-01", increment="5 days", interval=True)
         tgis.register_maps_in_space_time_dataset(type="raster", name=None,  maps="singletmap", 
-                                                start="2001-03-01", end="2001-04-01", interval=True)
+                                                start="2001-03-01", end="2001-04-01")
         
     def tearDown(self):
         self.runModule("t.remove", flags="rf", inputs="R", quiet=True)
@@ -77,6 +78,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_1(self):
         """Simple arithmetik test"""
         expr = "R = if(C == 9,  A - 1)"
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -93,6 +95,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_2(self):
         """Simple arithmetik test"""
         expr = "R = if(D == 11,  A - 1, A + 1)"
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -109,6 +112,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_simple_arith_hash_1(self):
         """Simple arithmetic test including the hash operator"""
         expr ='R = A + (A # A)'
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
         
         D = tgis.open_old_stds("R", type="strds")
@@ -124,6 +128,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_simple_arith_td_1(self):
         """Simple arithmetic test"""
         expr = 'R = A + td(A:D)'
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
         
         D = tgis.open_old_stds("R", type="strds")
@@ -140,6 +145,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_simple_arith_if_1(self):
         """Simple arithmetic test with if condition"""
         expr = 'R = if(start_date(A) >= "2001-02-01", A + A)'
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -154,6 +160,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_simple_arith_if_2(self):
         """Simple arithmetic test with if condition"""
         expr = 'R = if(A#A == 1, A - A)'
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -168,6 +175,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_complex_arith_if_1(self):
         """Complex arithmetic test with if condition"""
         expr = 'R = if(start_date(A) < "2001-03-01" && A#A == 1, A+C, A-C)'
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -182,6 +190,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_temporal_neighbors(self):
         """Simple temporal neighborhood computation test"""
         expr ='R = (A[0,0,-1] : D) + (A[0,0,1] : D)'
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -196,6 +205,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_map(self):
         """Test STDS + single map without timestamp"""
         expr = "R = A + map(singletmap)"
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -210,6 +220,7 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
     def test_tmap_map(self):
         """Test STDS + single map with and without timestamp"""
         expr = "R = tmap(singletmap) + A + map(singletmap)"
+        self.assertModule("t.rast.algebra",  expression=expr, flags="gd", basename="r")
         self.assertModule("t.rast.algebra",  expression=expr, flags="g", basename="r")
 
         D = tgis.open_old_stds("R", type="strds")
@@ -223,5 +234,6 @@ class TestTRastAlgebraGranularity(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 month')
 
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py b/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py
index c5ac8b6..9b23a25 100644
--- a/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py
+++ b/temporal/t.rast.algebra/testsuite/test_raster_algebra_granularity_fails.py
@@ -7,13 +7,13 @@ for details.
 :authors: Soeren Gebbert and Thomas Leppelt
 """
 
-import datetime
 import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTRastAlgebraGranularityFails(gunittest.TestCase):
+
+class TestTRastAlgebraGranularityFails(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -33,9 +33,9 @@ class TestTRastAlgebraGranularityFails(gunittest.TestCase):
                                          title="A", descr="A", semantic="field", overwrite=True)
 
         tgis.register_maps_in_space_time_dataset(type="raster", name="A",  maps="a1", 
-                                                start="2001-02-01", end="2001-04-01", interval=True)
+                                                start="2001-02-01", end="2001-04-01")
         tgis.register_maps_in_space_time_dataset(type="raster", name="A",  maps="a2", 
-                                                start="2001-03-01", end="2001-05-01", interval=True)
+                                                start="2001-03-01", end="2001-05-01")
         
     @classmethod
     def tearDownClass(cls):
@@ -59,5 +59,6 @@ class TestTRastAlgebraGranularityFails(gunittest.TestCase):
         # Invalid temporal topology
         self.assertModuleFail("t.rast.algebra", flags="g",  expression="R = A + A", basename="r")
 
+
 if __name__ == '__main__':
-    gunittest.test()
+    test()
diff --git a/temporal/t.rast.colors/t.rast.colors.html b/temporal/t.rast.colors/t.rast.colors.html
index 3311c1f..bd46147 100644
--- a/temporal/t.rast.colors/t.rast.colors.html
+++ b/temporal/t.rast.colors/t.rast.colors.html
@@ -66,5 +66,5 @@ default 255:255:255
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
 
diff --git a/temporal/t.rast.contour/Makefile b/temporal/t.rast.contour/Makefile
new file mode 100644
index 0000000..7089394
--- /dev/null
+++ b/temporal/t.rast.contour/Makefile
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../../
+
+PGM = t.rast.contour
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script $(TEST_DST)
diff --git a/temporal/t.rast.contour/t.rast.contour.html b/temporal/t.rast.contour/t.rast.contour.html
new file mode 100644
index 0000000..d4ef53a
--- /dev/null
+++ b/temporal/t.rast.contour/t.rast.contour.html
@@ -0,0 +1,43 @@
+<h2>DESCRIPTION</h2>
+
+<em>t.rast.contour</em> is designed to produce a space time vector dataset of 
+specified contours from a space time raster dataset. This module works as a front-end to
+<a href="r.contour.html">r.contour</a> and therefore supports all parameter
+of this module. Hence, all raster map layers in a space time raster dataset
+are successively passed to <a href="r.contour.html">r.contour</a> that computes 
+the contour lines. 
+Please refer to the <a href="r.contour.html">r.contour</a> documentation 
+for a detailed description.
+The new generated vector contour map
+layers will be registered in the output space time vector dataset, using 
+the same time stamps as their raster map layer origins.
+<p>
+This module supports the parallel processing of <a href="r.contour.html">r.contour</a>
+module instances. The number of parallel processes 
+can be set with the <em>nprocs</em> option. 
+However, this will only work in conjunction with the <em>-t</em>
+flag, that avoids the creation of attribute tables. 
+The parallel creation of attribute tables is not supported.
+<p>
+The <em>where</em> option allows selecting subsets of the input space time raster
+dataset.
+<p>
+The flag <em>-n</em> can be used to force the registration of empty 
+vector map layers. Empty vector maps may occur in case that empty 
+raster map layers should be converted into vector map layers, or in case the
+chosen steps or contour levels are not present in the raster map layers.
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.contour.html">r.contour</a>,
+<a href="t.vect.db.select.html">t.rast.db.select</a>,
+<a href="t.info.html">t.info</a>
+</em>
+
+
+<h2>AUTHOR</h2>
+
+Sören Gebbert, Geoinformatikbüro Dassau
+
+<p><i>Last changed: $Date: 2015-09-05 18:13:18 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/temporal/t.rast.contour/t.rast.contour.py b/temporal/t.rast.contour/t.rast.contour.py
new file mode 100755
index 0000000..3ca481e
--- /dev/null
+++ b/temporal/t.rast.contour/t.rast.contour.py
@@ -0,0 +1,284 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+############################################################################
+#
+# MODULE:       t.rast.contour
+# AUTHOR(S):    Soeren Gebbert
+#
+# PURPOSE:      Produces a space time vector dataset of specified contours from a space time raster dataset.
+#
+# COPYRIGHT:    (C) 2015 by the GRASS Development Team
+#
+#               This program is free software under the GNU General Public
+#               License (version 2). Read the file COPYING that comes with GRASS
+#               for details.
+#
+#############################################################################
+
+#%module
+#% description: Produces a space time vector dataset of specified contours from a space time raster dataset.
+#% keyword: temporal
+#% keyword: contour
+#% keyword: raster
+#% keyword: vector
+#% keyword: time
+#%end
+
+#%option G_OPT_STRDS_INPUT
+#%end
+
+#%option G_OPT_STVDS_OUTPUT
+#%end
+
+#%option G_OPT_T_WHERE
+#%end
+
+#%option
+#% key: basename
+#% type: string
+#% label: Basename of the new generated output maps
+#% description: A numerical suffix separated by an underscore will be attached to create a unique identifier
+#% required: yes
+#% multiple: no
+#%end
+
+#%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
+#% key: step
+#% type: double
+#% description: Increment between contour levels
+#% required: no
+#% multiple: no
+#%end
+
+#%option
+#% key: levels
+#% type: double
+#% description: List of contour levels
+#% required: no
+#% multiple: yes
+#%end
+
+#%option
+#% key: minlevel
+#% type:  double
+#% description: Minimum contour level
+#% required: no
+#% multiple: no
+#%end
+
+#%option
+#% key: maxlevel
+#% type: double
+#% description: Maximum contour level
+#% required: no
+#% multiple: no
+#%end
+
+#%option
+#% key: cut
+#% type: integer
+#% description: Minimum number of points for a contour line (0 -> no limit)
+#% required: no
+#% multiple: no
+#% answer: 0
+#%end
+
+#%option
+#% key: nprocs
+#% type: integer
+#% description: Number of r.contour processes to run in parallel, more than 1 process works only in conjunction with flag -t
+#% required: no
+#% multiple: no
+#% answer: 1
+#%end
+
+#%flag
+#% key: n
+#% description: Register empty vector maps
+#%end
+
+#%flag
+#% key: t
+#% description: Do not create attribute tables
+#%end
+
+import sys
+import copy
+import grass.script as gscript
+import grass.temporal as tgis
+import grass.pygrass.modules as pymod
+from grass.exceptions import FatalError
+
+
+############################################################################
+
+def main(options, flags):
+
+    # Get the options
+    input = options["input"]
+    output = options["output"]
+    where = options["where"]
+    base = options["basename"]
+    nprocs = int(options["nprocs"])
+    step = options["step"]
+    levels = options["levels"]
+    minlevel = options["minlevel"]
+    maxlevel = options["maxlevel"]
+    cut = options["cut"]
+    time_suffix = options["suffix"]
+
+    register_null = flags["n"]
+    t_flag = flags["t"]
+
+
+    # Make sure the temporal database exists
+    tgis.init()
+    # We need a database interface
+    dbif = tgis.SQLDatabaseInterfaceConnection()
+    dbif.connect()
+
+    overwrite = gscript.overwrite()
+
+    sp = tgis.open_old_stds(input, "strds", dbif)
+    maps = sp.get_registered_maps_as_objects(where=where, dbif=dbif)
+
+    if not maps:
+        dbif.close()
+        gscript.warning(_("Space time raster dataset <%s> is empty") % sp.get_id())
+        return
+
+    # Check the new stvds
+    new_sp = tgis.check_new_stds(output, "stvds", dbif=dbif,
+                                 overwrite=overwrite)
+
+    # Setup the flags
+    flags = ""
+    if t_flag is True:
+        flags += "t"
+
+    # Configure the r.to.vect module
+    contour_module = pymod.Module("r.contour", input="dummy",
+                                   output="dummy", run_=False,
+                                   finish_=False, flags=flags,
+                                   overwrite=overwrite,
+                                   quiet=True)
+
+    if step:
+        contour_module.inputs.step = float(step)
+    if minlevel:
+        contour_module.inputs.minlevel = float(minlevel)
+    if maxlevel:
+        contour_module.inputs.maxlevel = float(maxlevel)
+    if levels:
+        contour_module.inputs.levels = levels.split(",")
+    if cut:
+        contour_module.inputs.cut = int(cut)
+
+    # The module queue for parallel execution, except if attribute tables should
+    # be created. Then force single process use
+    if t_flag is False:
+        if nprocs > 1:
+            nprocs = 1
+            gscript.warning(_("The number of parellel r.contour processes was "\
+                              "reduced to 1 because of the table attribute "\
+                              "creation"))
+    process_queue = pymod.ParallelModuleQueue(int(nprocs))
+
+    count = 0
+    num_maps = len(maps)
+    new_maps = []
+
+    # run r.to.vect all selected maps
+    for map in maps:
+        count += 1
+
+        if sp.get_temporal_type() == 'absolute' and time_suffix == 'gran':
+            suffix = tgis.create_suffix_from_datetime(map.temporal_extent.get_start_time(),
+                                                      sp.get_granularity())
+            map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        elif sp.get_temporal_type() == 'absolute' and time_suffix == 'time':
+            suffix = tgis.create_time_suffix(map)
+            map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        else:
+            map_name = tgis.create_numeric_suffic(base, count, time_suffix)
+        new_map = tgis.open_new_map_dataset(map_name, None, type="vector",
+                                            temporal_extent=map.get_temporal_extent(),
+                                            overwrite=overwrite, dbif=dbif)
+        new_maps.append(new_map)
+
+        mod = copy.deepcopy(contour_module)
+        mod(input=map.get_id(), output=new_map.get_id())
+        sys.stderr.write(mod.get_bash() + "\n")
+        process_queue.put(mod)
+
+        if count%10 == 0:
+            gscript.percent(count, num_maps, 1)
+
+    # Wait for unfinished processes
+    process_queue.wait()
+
+    # Open the new space time vector dataset
+    ttype, stype, title, descr = sp.get_initial_values()
+    new_sp = tgis.open_new_stds(output, "stvds", ttype, title,
+                                descr, stype, dbif, overwrite)
+    # collect empty maps to remove them
+    num_maps = len(new_maps)
+    empty_maps = []
+
+    # Register the maps in the database
+    count = 0
+    for map in new_maps:
+        count += 1
+
+        if count%10 == 0:
+            gscript.percent(count, num_maps, 1)
+
+        # Do not register empty maps
+        try:
+            if map.load() is not True:
+                continue
+        except FatalError:
+            continue
+        if map.metadata.get_number_of_primitives() == 0:
+            if not register_null:
+                empty_maps.append(map)
+                continue
+
+        # Insert map in temporal database
+        map.insert(dbif)
+        new_sp.register_map(map, dbif)
+
+    # Update the spatio-temporal extent and the metadata table entries
+    new_sp.update_from_registered_maps(dbif)
+    gscript.percent(1, 1, 1)
+
+    # Remove empty maps
+    if len(empty_maps) > 0:
+        names = ""
+        count = 0
+        for map in empty_maps:
+            if count == 0:
+                count += 1
+                names += "%s" % (map.get_name())
+            else:
+                names += ",%s" % (map.get_name())
+
+        gscript.run_command("g.remove", flags='f', type='vector', name=names,
+                            quiet=True)
+
+    dbif.close()
+
+############################################################################
+
+if __name__ == "__main__":
+    options, flags = gscript.parser()
+    main(options, flags)
diff --git a/temporal/t.rast.contour/testsuite/test_convert.py b/temporal/t.rast.contour/testsuite/test_convert.py
new file mode 100644
index 0000000..08f6c8b
--- /dev/null
+++ b/temporal/t.rast.contour/testsuite/test_convert.py
@@ -0,0 +1,246 @@
+"""Test t.rast.contour
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Soeren Gebbert
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+
+class TestRasterContour(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+        cls.runModule("r.mapcalc", expression="a_1 = row()", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_2 = col()", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_3 = row()", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_4 = col()", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_5 = null()", overwrite=True)
+
+        cls.runModule("t.create", type="strds", temporaltype="absolute",
+                                 output="A", title="A test", description="A test",
+                                 overwrite=True)
+        cls.runModule("t.register",  flags="i", type="raster", input="A",
+                                     maps="a_1,a_2,a_3,a_4,a_5", start="2001-01-01",
+                                     increment="3 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove", flags="rf", type="strds",
+                                   inputs="A")
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove generated data"""
+        self.runModule("t.remove", flags="rf", type="stvds",
+                                   inputs="result")
+
+    def test_register_empty_maps(self):
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          levels=(1,2,3,4,5,6,7,8), flags="n",
+                          basename="test",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-04-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=5
+                        lines=28
+                        primitives=28
+                        nodes=56"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_simple(self):
+        """Do not register empty maps"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          levels=(1,2,3,4,5,6,7,8),
+                          basename="test",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=4
+                        lines=28
+                        primitives=28
+                        nodes=56"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_where(self):
+        """Use where statement and do not register empty maps"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          levels=(1,2,3,4,5,6,7,8),
+                          basename="test",
+                          where="start_time > '2001-02-01'",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-04-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=3
+                        lines=21
+                        primitives=21
+                        nodes=42"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_parallel(self):
+        """Run 4 contour processes do not create attribute tables"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          levels=(1,2,3,4,5,6,7,8),
+                          basename="test", flags="t",
+                          nprocs=4, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=4
+                        lines=28
+                        primitives=28
+                        nodes=56"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_parallel_cut(self):
+        """Do not register empty maps"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          levels=(1,2,3,4,5,6,7,8), cut=2,
+                          basename="test", flags="t",
+                          nprocs=4, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=4
+                        lines=28
+                        primitives=28
+                        nodes=56"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_where_step(self):
+        """Use where statement and do not register empty maps"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          step=1, minlevel=1, maxlevel=8,
+                          basename="test",
+                          where="start_time > '2001-02-01'",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-04-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=3
+                        lines=21
+                        primitives=21
+                        nodes=42"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+
+    def test_suffix_num(self):
+        """Test the -s flag"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          step=1, minlevel=1, maxlevel=8,
+                          basename="time", suffix='num%03',
+                          where="start_time > '2001-02-01'",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        self.assertVectorExists('time_001')
+        self.assertVectorDoesNotExist('time_00005')
+        self.assertVectorDoesNotExist('time_2001_07')
+
+    def test_suffix_time(self):
+        """Test the -s flag"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          step=1, minlevel=1, maxlevel=8,
+                          basename="time", suffix='time',
+                          where="start_time > '2001-02-01'",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        self.assertVectorExists('time_2001_07_01T00_00_00')
+        self.assertVectorDoesNotExist('time_00005')
+        self.assertVectorDoesNotExist('time_2001_07')
+
+
+class TestRasterContourFails(TestCase):
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+        cls.runModule("r.mapcalc", expression="a_1 = 100", overwrite=True)
+
+        cls.runModule("t.create",  type="strds", temporaltype="absolute",
+                                 output="A", title="A test", description="A test",
+                                 overwrite=True)
+        cls.runModule("t.register",  flags="i", type="raster", input="A",
+                                     maps="a_1", start="2001-01-01",
+                                     increment="3 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove", flags="rf", type="strds",
+                      inputs="A")
+        cls.del_temp_region()
+
+    def test_error_handling(self):
+        # No basename
+        self.assertModuleFail("t.rast.contour", input="A", output="result",
+                              step=1, minlevel=1, maxlevel=8,
+                              where="start_time > '2001-02-01'",
+                              nprocs=1, overwrite=True, verbose=True)
+
+
+    def test_empty_strds(self):
+        """Test for empty strds"""
+        self.assertModule("t.rast.contour", input="A", output="result",
+                          basename="test",
+                          step=1, minlevel=1, maxlevel=8,
+                          where="start_time > '2010-01-01'",
+                          nprocs=1, overwrite=True, verbose=True)
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.export/t.rast.export.html b/temporal/t.rast.export/t.rast.export.html
index 5b695c4..a535167 100644
--- a/temporal/t.rast.export/t.rast.export.html
+++ b/temporal/t.rast.export/t.rast.export.html
@@ -15,12 +15,22 @@ the space time raster dataset was exported from. The file "readme.txt"
 describes the file format. The output of <em>r.info</em> is stored in
 "metadata.txt".
 <p>
+
 The tar archive can be compressed using the <b>compress</b> option. Gzip
 and bzip2 (default) are available. A <b>where</b> option can be specified,
 to export only a subset of the space time dataset. Archives exported
 with <em>t.rast.export</em> can be imported with
 <em><a href="t.vect.import.html">t.rast.import</a></em>.
 
+<h2>NOTES</h2>
+The name of output file has to specify the suffix of the archive, the
+following suffix has to be added:
+<ul>
+<li><b>.tar</b> in the case of <b>compress=no</b></li>
+<li><b>.tar.bzip2</b> in the case of <b>compress=bzip2</b></li>
+<li><b>.tar.gzip</b> in the case of <b>compress=gzip</b></li>
+</ul> 
+
 <h2>EXAMPLE</h2>
 
 In this example, all the maps of 2012 of "tempmean_monthly" will be exported:
@@ -29,7 +39,7 @@ In this example, all the maps of 2012 of "tempmean_monthly" will be exported:
 t.rast.export input=tempmean_monthly output=tempmean_monthly.tar.bzip2 \
               where="start_time >= '2012-01-01' and start_time < '2013-01-01'"
 
-tar xvf precipitation_daily.tar
+tar xvjf precipitation_daily.tar.bzip2
 
 2012_01_tempmean.tif
 2012_01_tempmean.color
@@ -133,4 +143,4 @@ Files:
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-10-06 17:26:07 +0200 (Tue, 06 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2016-02-26 19:01:22 +0100 (Fri, 26 Feb 2016) $</i>
diff --git a/temporal/t.rast.export/t.rast.export.py b/temporal/t.rast.export/t.rast.export.py
index c92da7a..59670b0 100755
--- a/temporal/t.rast.export/t.rast.export.py
+++ b/temporal/t.rast.export/t.rast.export.py
@@ -57,6 +57,16 @@
 #% answer: GTiff
 #%end
 
+#%option
+#% key: type
+#% type: string
+#% label: Data type
+#% description: Supported only for GTiff
+#% required: no
+#% multiple: no
+#% options: Byte,Int16,UInt16,Int32,UInt32,Float32,Float64,CInt16,CInt32,CFloat32,CFloat64
+#%end
+
 #%option G_OPT_T_WHERE
 #%end
 
@@ -74,12 +84,15 @@ def main():
     directory = options["directory"]
     where = options["where"]
     _format = options["format"]
+    _type = options["type"]
 
+    if _type and _format in ["pack", "AAIGrid"]:
+        grass.warning(_("Type options is not working with pack format, it will be skipped"))
     # Make sure the temporal database exists
     tgis.init()
     # Export the space time raster dataset
-    tgis.export_stds(
-        _input, output, compression, directory, where, _format, "strds")
+    tgis.export_stds(_input, output, compression, directory, where, _format,
+                     "strds", _type)
 
 ############################################################################
 if __name__ == "__main__":
diff --git a/temporal/t.rast.export/testsuite/test_rast_export.py b/temporal/t.rast.export/testsuite/test_rast_export.py
new file mode 100644
index 0000000..5df814a
--- /dev/null
+++ b/temporal/t.rast.export/testsuite/test_rast_export.py
@@ -0,0 +1,74 @@
+"""
+Test t.rast.export
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author: lucadelu
+"""
+
+from grass.gunittest.case import TestCase
+import grass.script as gscript
+import os
+
+class TestRasterExport(TestCase):
+
+    tmp = gscript.tempdir()
+    float_ = os.path.join(tmp, "geotiffloat")
+    int_ = os.path.join(tmp, "geotifint")
+    grid = os.path.join(tmp, "grid")
+    pack = os.path.join(tmp, "pack")
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.gisenv", set="TGIS_USE_CURRENT_MAPSET=1")
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10,
+                      res3=10)
+        maps = []
+        for i in range(10):
+            cls.runModule("r.mapcalc", expression="a_{id_} = rand(0.1,1.0)".format(id_=i),
+                          flags="s", overwrite=True)
+            maps.append("a_{id_}".format(id_=i))
+
+        cls.runModule("t.create", type="strds", temporaltype="absolute",  
+                      output="A", title="A test", description="A test",
+                      overwrite=True)
+        cls.runModule("t.register", flags="i", type="raster", input="A",  
+                      maps=maps, start="2001-01-01",
+                      increment="4 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()
+        cls.runModule("t.remove", flags="rf", inputs="A")
+
+    def test_simple_geotif(self):
+        self.assertModule("t.rast.export", input="A", output=self.float_, 
+                          overwrite=True)
+        self.assertFileExists(self.float_)
+                          
+    def test_simple_geotif_int(self):
+        self.assertModule("t.rast.export", input="A", output=self.int_, 
+                          overwrite=True, type="Int16")
+        self.assertFileExists(self.int_)
+                          
+    def test_simple_grid(self):
+        self.assertModule("t.rast.export", input="A", output=self.grid, 
+                          overwrite=True, format="AAIGrid")
+        self.assertFileExists(self.grid)
+                          
+    def test_simple_pack(self):
+        self.assertModule("t.rast.export", input="A", output=self.pack, 
+                          overwrite=True, format="pack")
+        self.assertFileExists(self.pack)
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.extract/t.rast.extract.html b/temporal/t.rast.extract/t.rast.extract.html
index 56776f5..9376a5c 100644
--- a/temporal/t.rast.extract/t.rast.extract.html
+++ b/temporal/t.rast.extract/t.rast.extract.html
@@ -65,5 +65,5 @@ name|mapset|start_time|end_time
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.rast.extract/t.rast.extract.py b/temporal/t.rast.extract/t.rast.extract.py
index adb5631..de21fb2 100755
--- a/temporal/t.rast.extract/t.rast.extract.py
+++ b/temporal/t.rast.extract/t.rast.extract.py
@@ -50,6 +50,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: nprocs
 #% type: integer
 #% description: Number of r.mapcalc processes to run in parallel
@@ -63,9 +72,9 @@
 #% description: Register Null maps
 #%end
 
+
 import grass.script as grass
 import grass.temporal as tgis
-from multiprocessing import Process
 
 ############################################################################
 
@@ -80,12 +89,13 @@ def main():
     base = options["basename"]
     nprocs = int(options["nprocs"])
     register_null = flags["n"]
+    time_suffix = options["suffix"]
 
     # Make sure the temporal database exists
     tgis.init()
 
     tgis.extract_dataset(input, output, "raster", where, expression,
-                         base, nprocs, register_null)
+                         base, time_suffix, nprocs, register_null)
 
 ###############################################################################
 
diff --git a/temporal/t.rast.extract/testsuite/test_extract.py b/temporal/t.rast.extract/testsuite/test_extract.py
index 584bb29..643067a 100644
--- a/temporal/t.rast.extract/testsuite/test_extract.py
+++ b/temporal/t.rast.extract/testsuite/test_extract.py
@@ -22,6 +22,19 @@ class TestRasterExtraction(TestCase):
         cls.use_temp_region()
         cls.runModule("g.gisenv",  set="TGIS_USE_CURRENT_MAPSET=1")
         cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="prec_1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="prec_2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="prec_3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="prec_4 = 400",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="prec_5 = 500",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="prec_6 = 600",  overwrite=True)
+
+        cls.runModule("t.create", type="strds", temporaltype="absolute",  
+                      output="precip_abs1", title="A test",
+                      description="A test", overwrite=True)
+        cls.runModule("t.register", flags="i", type="raster", input="precip_abs1",  
+                      maps="prec_1,prec_2,prec_3,prec_4,prec_5,prec_6", 
+                      start="2001-01-01", increment="3 months", overwrite=True)
 
     @classmethod
     def tearDownClass(cls):
@@ -49,7 +62,7 @@ class TestRasterExtraction(TestCase):
     def tearDown(self):
         """Remove generated data"""
         self.runModule("t.remove",  flags="rf",  type="strds",  
-                                   inputs="precip_abs1,precip_abs2")
+                                   inputs="precip_abs2")
 
     def test_selection(self):
         """Perform a simple selection by datetime"""
@@ -147,6 +160,27 @@ class TestRasterExtraction(TestCase):
         info = SimpleModule("t.info", flags="g", input="precip_abs2")
         self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
 
+        
+    def test_time_suffix_with_expression(self):
+        """Perform extract with time suffix support and test if maps exists"""
+        self.assertModule("t.rast.extract",  flags="n",  input="precip_abs1",
+                          output="precip_abs2", basename="new_prec",
+                          nprocs=2,  overwrite=True, suffix="time",
+                          expression="if(precip_abs1 > 400, precip_abs1, null())")
+        self.assertRasterExists('new_prec_2001_01_01T00_00_00')
+        self.assertRasterDoesNotExist('new_prec_2001_01')
+        
+    def test_num_suffix_with_expression(self):
+        """Perform extract with time suffix support and test if maps exists"""
+        self.assertModule("t.rast.extract",  flags="n",  input="precip_abs1",
+                          output="precip_abs2", basename="new_prec",
+                          nprocs=2,  overwrite=True, suffix='num%03',
+                          expression="if(precip_abs1 > 400, precip_abs1, null())")
+        self.assertRasterExists('new_prec_001')
+        self.assertRasterDoesNotExist('new_prec_00001')
+
+
+
 class TestRasterExtractionFails(TestCase):
 
     @classmethod
diff --git a/temporal/t.rast.gapfill/t.rast.gapfill.html b/temporal/t.rast.gapfill/t.rast.gapfill.html
index daf4ad6..dd8d301 100644
--- a/temporal/t.rast.gapfill/t.rast.gapfill.html
+++ b/temporal/t.rast.gapfill/t.rast.gapfill.html
@@ -10,14 +10,19 @@ map between them.
 This module uses <a href="r.series.interp.html">r.series.interp</a> to
 perform the interpolation for each gap independently. Hence several
 interpolation processes can be run in parallel.
+<p>
+Each gap is re-sampled by the space time raster dataset granularity. 
+Therefore several time stamped raster map layers will be interpolated 
+if the gap is larger than the STRDS granularity.
 
 <h2>Examples</h2>
 
 In this example we will create 3 raster maps and register them in the
 temporal database an then in the newly created space time raster dataset.
-There are gaps of one day size between the raster maps. The values of
+There are gaps of one and two day size between the raster maps. The values of
 the maps are chosen so that the interpolated values can be estimated.
-We expect two maps with values 2 and 4 after interpolation.
+We expect one map with a value of 2 for the first gap and
+two maps (values 3.666 and 4.333) for the second gap after interpolation.
 
 <div class="code"><pre>
 r.mapcalc expression="map1 = 1" 
@@ -26,7 +31,7 @@ r.mapcalc expression="map3 = 5"
 
 t.register type=raster maps=map1 start=2012-08-20 end=2012-08-21
 t.register type=raster maps=map2 start=2012-08-22 end=2012-08-23
-t.register type=raster maps=map3 start=2012-08-24 end=2012-08-25
+t.register type=raster maps=map3 start=2012-08-25 end=2012-08-26
 
 t.create type=strds temporaltype=absolute \
          output=precipitation_daily \
@@ -40,7 +45,7 @@ t.rast.list input=precipitation_daily columns=name,start_time,min,max
 name|start_time|min|max
 map1|2012-08-20 00:00:00|1.0|1.0
 map2|2012-08-22 00:00:00|3.0|3.0
-map3|2012-08-24 00:00:00|5.0|5.0
+map3|2012-08-25 00:00:00|5.0|5.0
 
 
 t.rast.list input=precipitation_daily method=deltagaps
@@ -58,10 +63,12 @@ t.rast.list input=precipitation_daily columns=name,start_time,min,max
 
 name|start_time|min|max
 map1|2012-08-20 00:00:00|1.0|1.0
-gap_6|2012-08-21 00:00:00|2.0|2.0
+gap_6_1|2012-08-21 00:00:00|2.0|2.0
 map2|2012-08-22 00:00:00|3.0|3.0
-gap_7|2012-08-23 00:00:00|4.0|4.0
-map3|2012-08-24 00:00:00|5.0|5.0
+gap_7_1|2012-08-23 00:00:00|3.666667|3.666667
+gap_7_2|2012-08-24 00:00:00|4.333333|4.333333
+map3|2012-08-25 00:00:00|5.0|5.0
+
 </pre></div>
 
 <h2>SEE ALSO</h2>
@@ -76,5 +83,5 @@ map3|2012-08-24 00:00:00|5.0|5.0
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.rast.gapfill/t.rast.gapfill.py b/temporal/t.rast.gapfill/t.rast.gapfill.py
index d63564a..b2d5c5e 100755
--- a/temporal/t.rast.gapfill/t.rast.gapfill.py
+++ b/temporal/t.rast.gapfill/t.rast.gapfill.py
@@ -39,6 +39,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: nprocs
 #% type: integer
 #% description: Number of interpolation processes to run in parallel
@@ -52,10 +61,15 @@
 #% description: Assign the space time raster dataset start and end time to the output map
 #%end
 
+import sys
+import copy
 from multiprocessing import Process
 import grass.script as grass
 import grass.temporal as tgis
 
+import grass.pygrass.modules as pymod
+from grass.exceptions import FatalError
+
 ############################################################################
 
 
@@ -66,6 +80,7 @@ def main():
     base = options["basename"]
     where = options["where"]
     nprocs = options["nprocs"]
+    tsuffix = options["suffix"]
 
     mapset = grass.gisenv()["MAPSET"]
 
@@ -82,6 +97,13 @@ def main():
 
     num = len(maps)
 
+    # Configure the r.to.vect module
+    gapfill_module = pymod.Module("r.series.interp",
+                             overwrite=grass.overwrite(), quiet=True, run_=False,
+                             finish_=False,)
+
+    process_queue = pymod.ParallelModuleQueue(int(nprocs))
+
     gap_list = []
     overwrite_flags = {}
 
@@ -90,17 +112,12 @@ def main():
     for _map in maps:
         if _map.get_id() is None:
             count += 1
-            _id = "%s_%d@%s" % (base, num + count, mapset)
+            if sp.get_temporal_type() == 'absolute' and tsuffix in ['gran', 'time']:
+                _id = "{ba}@{ma}".format(ba=base, ma=mapset)
+            else:
+                map_name = tgis.create_numeric_suffic(base, num + count, tsuffix)
+                _id = "{name}@{ma}".format(name=map_name, ma=mapset)
             _map.set_id(_id)
-            overwrite_flags[_id] = False
-            if _map.map_exists() or _map.is_in_db(dbif):
-                if not grass.overwrite:
-                        grass.fatal(_("Map with name <%s> already exists. "
-                                      "Please use another base name." % (_id)))
-                else:
-                    if _map.is_in_db(dbif):
-                        overwrite_flags[_id] = True
-
 
             gap_list.append(_map)
 
@@ -127,42 +144,70 @@ def main():
                             "Using the first found."))
 
     # Interpolate the maps using parallel processing
-    proc_list = []
-    proc_count = 0
-    num = len(gap_list)
+    result_list = []
 
     for _map in gap_list:
         predecessor = _map.get_follows()[0]
         successor = _map.get_precedes()[0]
 
-        # Build the module inputs strings
-        inputs = "%s,%s" % (predecessor.get_map_id(), successor.get_map_id())
-        dpos = "0,1"
-        output = "%s" % (_map.get_name())
-        outpos = "0.5"
-
-        # Start several processes in parallel
-        proc_list.append(Process(
-            target=run_interp, args=(inputs, dpos, output, outpos)))
-        proc_list[proc_count].start()
-        proc_count += 1
+        gran = sp.get_granularity()
+        tmpval,  start = predecessor.get_temporal_extent_as_tuple()
+        end,  tmpval = successor.get_temporal_extent_as_tuple()
+        
+        # Now resample the gap
+        map_matrix = tgis.AbstractSpaceTimeDataset.resample_maplist_by_granularity((_map, ),start, end,  gran)
+        
+        map_names = []
+        map_positions = []
+        
+        increment = 1.0/ (len(map_matrix) + 1.0)
+        position = increment
+        count = 0
+        for intp_list in map_matrix:
+            new_map = intp_list[0]
+            count += 1
+            if sp.get_temporal_type() == 'absolute' and tsuffix == 'gran':
+                suffix = tgis.create_suffix_from_datetime(new_map.temporal_extent.get_start_time(),
+                                                          sp.get_granularity())
+                new_id = "{ba}_{su}@{ma}".format(ba=new_map.get_name(),
+                                                 su=suffix, ma=mapset)
+            elif sp.get_temporal_type() == 'absolute' and tsuffix == 'time':
+                suffix = tgis.create_time_suffix(new_map)
+                new_id = "{ba}_{su}@{ma}".format(ba=new_map.get_name(),
+                                                 su=suffix, ma=mapset)
+            else:
+                map_name = tgis.create_numeric_suffic(new_map.get_name(),
+                                                      count, tsuffix)
+                new_id = "{name}@{ma}".format(name=map_name, ma=mapset)
+
+            new_map.set_id(new_id)
+            
+            overwrite_flags[new_id] = False
+            if new_map.map_exists() or new_map.is_in_db(dbif):
+                if not grass.overwrite:
+                        grass.fatal(_("Map with name <%s> already exists. "
+                                      "Please use another base name." % (_id)))
+                else:
+                    if new_map.is_in_db(dbif):
+                        overwrite_flags[new_id] = True
 
-        if proc_count == nprocs or proc_count == num:
-            proc_count = 0
-            exitcodes = 0
-            for proc in proc_list:
-                proc.join()
-                exitcodes += proc.exitcode
+            map_names.append(new_map.get_name())
+            map_positions.append(position)
+            position += increment
+            
+            result_list.append(new_map)
 
-            if exitcodes != 0:
-                dbif.close()
-                grass.fatal(_("Error while interpolation computation"))
+        mod = copy.deepcopy(gapfill_module)
+        mod(input=(predecessor.get_map_id(), successor.get_map_id()),
+                datapos=(0, 1), output=map_names,  samplingpos=map_positions)
+        sys.stderr.write(mod.get_bash() + "\n")
+        process_queue.put(mod)
 
-            # Empty process list
-            proc_list = []
+    # Wait for unfinished processes
+    process_queue.wait()
 
     # Insert new interpolated maps in temporal database and dataset
-    for _map in gap_list:
+    for _map in result_list:
         id = _map.get_id()
         if overwrite_flags[id] == True:
             if _map.is_time_absolute():
diff --git a/temporal/t.rast.gapfill/test.t.rast.gapfill.sh b/temporal/t.rast.gapfill/test.t.rast.gapfill.sh
deleted file mode 100755
index b0a9357..0000000
--- a/temporal/t.rast.gapfill/test.t.rast.gapfill.sh
+++ /dev/null
@@ -1,37 +0,0 @@
-#!/bin/sh
-# Fill the gaps in a space time raster dataset
-# We need to set a specific region in the
-# @preprocess step of this test. 
-# The region setting should work for UTM and LL test locations
-
-export GRASS_OVERWRITE=1
-
-g.region s=0 n=80 w=0 e=120 b=0 t=50 res=10 res3=10 -p3
-
-r.mapcalc  expr="prec_1 = 100"
-r.mapcalc  expr="prec_2 = 300"
-r.mapcalc  expr="prec_3 = 500"
-
-n1=`g.tempfile pid=1 -d` 
-
-cat > "${n1}" << EOF
-prec_1|2001-01-01|2001-02-01
-prec_2|2001-03-01|2001-04-01
-prec_3|2001-05-01|2001-06-01
-EOF
-
-t.create --v  type=strds temporaltype=absolute output=precip_abs title="A test" descr="A test"
-t.register --v type=raster input=precip_abs file="${n1}"
-
-# @test
-t.rast.gapfill input=precip_abs base="prec" nprocs=2
-t.info precip_abs
-
-t.info type=raster input=prec_6
-t.info type=raster input=prec_7
-
-# @postprocess
-
-t.unregister --v type=raster maps=prec_1,prec_2,prec_3,prec_6,prec_7
-t.remove --v type=strds input=precip_abs
-g.remove -f type=raster name=prec_1,prec_2,prec_3,prec_6,prec_7
diff --git a/temporal/t.rast.gapfill/testsuite/test_gapfill.py b/temporal/t.rast.gapfill/testsuite/test_gapfill.py
new file mode 100644
index 0000000..a29376e
--- /dev/null
+++ b/temporal/t.rast.gapfill/testsuite/test_gapfill.py
@@ -0,0 +1,262 @@
+"""Test t.rast.to.vect
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Soeren Gebbert
+"""
+
+import subprocess
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestRasterToVector(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+    def setUp(self):
+        self.runModule("r.mapcalc", expression="a_1 = 100", overwrite=True)
+        self.runModule("r.mapcalc", expression="a_2 = 400", overwrite=True)
+        self.runModule("r.mapcalc", expression="a_3 = 1200", overwrite=True)
+
+        self.runModule("t.create", type="strds", temporaltype="absolute",  
+                                 output="A", title="A test", description="A test",  
+                                 overwrite=True)
+        self.runModule("t.register",  flags="i", type="raster", input="A",  
+                                     maps="a_1", start="2001-01-01", 
+                                     increment="1 month", overwrite=True)
+        self.runModule("t.register",  flags="i", type="raster", input="A",  
+                                     maps="a_2", start="2001-04-01", 
+                                     increment="1 months", overwrite=True)
+        self.runModule("t.register",  flags="i", type="raster", input="A",  
+                                     maps="a_3", start="2001-12-01", 
+                                     increment="1 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()
+        
+    def tearDown(self):
+        """Remove generated data"""
+        self.runModule("t.remove", flags="rf", type="strds",  
+                                   inputs="A")
+
+    def test_simple_2procs(self):
+        self.assertModule("t.rast.gapfill", input="A", suffix="num%01",
+                          basename="test", nprocs=2, verbose=True)
+
+        #self.assertModule("t.info",  type="strds", flags="g",  input="A")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                                end_time=2002-01-01 00:00:00
+                                granularity=1 month
+                                map_time=interval
+                                number_of_maps=12
+                                min_min=100.0
+                                min_max=1200.0
+                                max_min=100.0
+                                max_max=1200.0"""
+
+        info = SimpleModule("t.info", flags="g", type="strds", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+        text="""name|start_time|end_time|min|max
+a_1|2001-01-01 00:00:00|2001-02-01 00:00:00|100.0|100.0
+test_6_1|2001-02-01 00:00:00|2001-03-01 00:00:00|200.0|200.0
+test_6_2|2001-03-01 00:00:00|2001-04-01 00:00:00|300.0|300.0
+a_2|2001-04-01 00:00:00|2001-05-01 00:00:00|400.0|400.0
+test_7_1|2001-05-01 00:00:00|2001-06-01 00:00:00|500.0|500.0
+test_7_2|2001-06-01 00:00:00|2001-07-01 00:00:00|600.0|600.0
+test_7_3|2001-07-01 00:00:00|2001-08-01 00:00:00|700.0|700.0
+test_7_4|2001-08-01 00:00:00|2001-09-01 00:00:00|800.0|800.0
+test_7_5|2001-09-01 00:00:00|2001-10-01 00:00:00|900.0|900.0
+test_7_6|2001-10-01 00:00:00|2001-11-01 00:00:00|1000.0|1000.0
+test_7_7|2001-11-01 00:00:00|2001-12-01 00:00:00|1100.0|1100.0
+a_3|2001-12-01 00:00:00|2002-01-01 00:00:00|1200.0|1200.0
+
+"""
+        rast_list = SimpleModule("t.rast.list", columns=("name","start_time","end_time","min,max"),  input="A")
+        self.assertModule(rast_list)
+        self.assertLooksLike(text,  rast_list.outputs.stdout)
+
+    def test_simple_where(self):
+        self.assertModule("t.rast.gapfill", input="A",  where="start_time >= '2001-03-01'", 
+                          basename="test", nprocs=1, verbose=True, suffix="num%01")
+
+        #self.assertModule("t.info",  type="strds", flags="g",  input="A")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                                end_time=2002-01-01 00:00:00
+                                granularity=1 month
+                                map_time=interval
+                                number_of_maps=10
+                                min_min=100.0
+                                min_max=1200.0
+                                max_min=100.0
+                                max_max=1200.0"""
+
+        info = SimpleModule("t.info", flags="g", type="strds", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+        text="""name|start_time|end_time|min|max
+a_1|2001-01-01 00:00:00|2001-02-01 00:00:00|100.0|100.0
+a_2|2001-04-01 00:00:00|2001-05-01 00:00:00|400.0|400.0
+test_4_1|2001-05-01 00:00:00|2001-06-01 00:00:00|500.0|500.0
+test_4_2|2001-06-01 00:00:00|2001-07-01 00:00:00|600.0|600.0
+test_4_3|2001-07-01 00:00:00|2001-08-01 00:00:00|700.0|700.0
+test_4_4|2001-08-01 00:00:00|2001-09-01 00:00:00|800.0|800.0
+test_4_5|2001-09-01 00:00:00|2001-10-01 00:00:00|900.0|900.0
+test_4_6|2001-10-01 00:00:00|2001-11-01 00:00:00|1000.0|1000.0
+test_4_7|2001-11-01 00:00:00|2001-12-01 00:00:00|1100.0|1100.0
+a_3|2001-12-01 00:00:00|2002-01-01 00:00:00|1200.0|1200.0
+"""
+        rast_list = SimpleModule("t.rast.list", columns=("name","start_time","end_time","min,max"),  input="A")
+        self.assertModule(rast_list)
+        self.assertLooksLike(text,  rast_list.outputs.stdout)
+
+    def test_simple_where_2(self):
+        self.assertModule("t.rast.gapfill", input="A",  where="start_time <= '2001-05-01'", 
+                          basename="test", nprocs=1, verbose=True, suffix="num%01")
+
+        #self.assertModule("t.info",  type="strds", flags="g",  input="A")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                                end_time=2002-01-01 00:00:00
+                                granularity=1 month
+                                map_time=interval
+                                number_of_maps=5
+                                min_min=100.0
+                                min_max=1200.0
+                                max_min=100.0
+                                max_max=1200.0"""
+
+        info = SimpleModule("t.info", flags="g", type="strds", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+        text="""name|start_time|end_time|min|max
+a_1|2001-01-01 00:00:00|2001-02-01 00:00:00|100.0|100.0
+test_4_1|2001-02-01 00:00:00|2001-03-01 00:00:00|200.0|200.0
+test_4_2|2001-03-01 00:00:00|2001-04-01 00:00:00|300.0|300.0
+a_2|2001-04-01 00:00:00|2001-05-01 00:00:00|400.0|400.0
+a_3|2001-12-01 00:00:00|2002-01-01 00:00:00|1200.0|1200.0
+"""
+        rast_list = SimpleModule("t.rast.list", columns=("name","start_time","end_time","min,max"),  input="A")
+        self.assertModule(rast_list)
+        self.assertLooksLike(text,  rast_list.outputs.stdout)
+
+    def test_simple_empty(self):
+        self.assertModule("t.rast.gapfill", input="A",  where="start_time >= '2001-10-01'", 
+                          basename="test", nprocs=1, verbose=True, suffix="num%01")
+
+        #self.assertModule("t.info",  type="strds", flags="g",  input="A")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                                end_time=2002-01-01 00:00:00
+                                granularity=1 month
+                                map_time=interval
+                                number_of_maps=3
+                                min_min=100.0
+                                min_max=1200.0
+                                max_min=100.0
+                                max_max=1200.0"""
+
+        info = SimpleModule("t.info", flags="g", type="strds", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+        text="""name|start_time|end_time|min|max
+a_1|2001-01-01 00:00:00|2001-02-01 00:00:00|100.0|100.0
+a_2|2001-04-01 00:00:00|2001-05-01 00:00:00|400.0|400.0
+a_3|2001-12-01 00:00:00|2002-01-01 00:00:00|1200.0|1200.0
+"""
+        rast_list = SimpleModule("t.rast.list", columns=("name","start_time","end_time","min,max"),  input="A")
+        self.assertModule(rast_list)
+        self.assertLooksLike(text,  rast_list.outputs.stdout)
+
+    def test_simple_gran(self):
+        self.assertModule("t.rast.gapfill", input="A",
+                          basename="test", nprocs=2, verbose=True)
+
+        #self.assertModule("t.info",  type="strds", flags="g",  input="A")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                                end_time=2002-01-01 00:00:00
+                                granularity=1 month
+                                map_time=interval
+                                number_of_maps=12
+                                min_min=100.0
+                                min_max=1200.0
+                                max_min=100.0
+                                max_max=1200.0"""
+
+        info = SimpleModule("t.info", flags="g", type="strds", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+        text="""name|start_time|end_time|min|max
+a_1|2001-01-01 00:00:00|2001-02-01 00:00:00|100.0|100.0
+test_2001_02|2001-02-01 00:00:00|2001-03-01 00:00:00|200.0|200.0
+test_2001_03|2001-03-01 00:00:00|2001-04-01 00:00:00|300.0|300.0
+a_2|2001-04-01 00:00:00|2001-05-01 00:00:00|400.0|400.0
+test_2001_05|2001-05-01 00:00:00|2001-06-01 00:00:00|500.0|500.0
+test_2001_06|2001-06-01 00:00:00|2001-07-01 00:00:00|600.0|600.0
+test_2001_07|2001-07-01 00:00:00|2001-08-01 00:00:00|700.0|700.0
+test_2001_08|2001-08-01 00:00:00|2001-09-01 00:00:00|800.0|800.0
+test_2001_09|2001-09-01 00:00:00|2001-10-01 00:00:00|900.0|900.0
+test_2001_10|2001-10-01 00:00:00|2001-11-01 00:00:00|1000.0|1000.0
+test_2001_11|2001-11-01 00:00:00|2001-12-01 00:00:00|1100.0|1100.0
+a_3|2001-12-01 00:00:00|2002-01-01 00:00:00|1200.0|1200.0
+
+"""
+        rast_list = SimpleModule("t.rast.list", columns=("name","start_time","end_time","min,max"),  input="A")
+        self.assertModule(rast_list)
+        self.assertLooksLike(text,  rast_list.outputs.stdout)
+
+    def test_simple_gran(self):
+        self.assertModule("t.rast.gapfill", input="A", suffix="time",
+                          basename="test", nprocs=2, verbose=True)
+
+        #self.assertModule("t.info",  type="strds", flags="g",  input="A")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                                end_time=2002-01-01 00:00:00
+                                granularity=1 month
+                                map_time=interval
+                                number_of_maps=12
+                                min_min=100.0
+                                min_max=1200.0
+                                max_min=100.0
+                                max_max=1200.0"""
+
+        info = SimpleModule("t.info", flags="g", type="strds", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+        text="""name|start_time|end_time|min|max
+a_1|2001-01-01 00:00:00|2001-02-01 00:00:00|100.0|100.0
+test_2001_02_01T00_00_00|2001-02-01 00:00:00|2001-03-01 00:00:00|200.0|200.0
+test_2001_03_01T00_00_00|2001-03-01 00:00:00|2001-04-01 00:00:00|300.0|300.0
+a_2|2001-04-01 00:00:00|2001-05-01 00:00:00|400.0|400.0
+test_2001_05_01T00_00_00|2001-05-01 00:00:00|2001-06-01 00:00:00|500.0|500.0
+test_2001_06_01T00_00_00|2001-06-01 00:00:00|2001-07-01 00:00:00|600.0|600.0
+test_2001_07_01T00_00_00|2001-07-01 00:00:00|2001-08-01 00:00:00|700.0|700.0
+test_2001_08_01T00_00_00|2001-08-01 00:00:00|2001-09-01 00:00:00|800.0|800.0
+test_2001_09_01T00_00_00|2001-09-01 00:00:00|2001-10-01 00:00:00|900.0|900.0
+test_2001_10_01T00_00_00|2001-10-01 00:00:00|2001-11-01 00:00:00|1000.0|1000.0
+test_2001_11_01T00_00_00|2001-11-01 00:00:00|2001-12-01 00:00:00|1100.0|1100.0
+a_3|2001-12-01 00:00:00|2002-01-01 00:00:00|1200.0|1200.0
+
+"""
+        rast_list = SimpleModule("t.rast.list", columns=("name","start_time","end_time","min,max"),  input="A")
+        self.assertModule(rast_list)
+        self.assertLooksLike(text,  rast_list.outputs.stdout)
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.import/t.rast.import.html b/temporal/t.rast.import/t.rast.import.html
index b1ab7b4..9208b1e 100644
--- a/temporal/t.rast.import/t.rast.import.html
+++ b/temporal/t.rast.import/t.rast.import.html
@@ -39,4 +39,4 @@ t.rast.import input=lst_daily.tar.bzip2 output=lst_daily \
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-10-06 17:26:07 +0200 (Tue, 06 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-06 17:24:26 +0200 (Tue, 06 Oct 2015) $</i>
diff --git a/temporal/t.rast.import/t.rast.import.py b/temporal/t.rast.import/t.rast.import.py
index 1b9fc8c..58dd171 100755
--- a/temporal/t.rast.import/t.rast.import.py
+++ b/temporal/t.rast.import/t.rast.import.py
@@ -41,6 +41,7 @@
 #%option G_OPT_M_DIR
 #% key: directory
 #% description: Path to the extraction directory
+#% answer: /tmp
 #%end
 
 #%option
@@ -67,6 +68,16 @@
 #% multiple: no
 #%end
 
+#%option
+#% key: memory
+#% type: integer
+#% description: Cache size for raster rows
+#% label: Maximum memory to be used (in MB)
+#% options: 0-2047
+#% answer: 300
+#% multiple: no
+#%end
+
 #%flag
 #% key: r
 #% description: Set the current region from the last map that was imported
@@ -107,6 +118,7 @@ def main():
     descr = options["description"]
     location = options["location"]
     base = options["basename"]
+    memory = options["memory"]
     set_current_region = flags["r"]
     link = flags["l"]
     exp = flags["e"]
@@ -117,7 +129,7 @@ def main():
 
     tgis.import_stds(input, output, directory, title, descr, location,
                      link, exp, overr, create, "strds", base, 
-                     set_current_region)
+                     set_current_region, memory)
 
 if __name__ == "__main__":
     options, flags = grass.parser()
diff --git a/temporal/t.rast.import/testsuite/data/precip_2000.tar.bzip2 b/temporal/t.rast.import/testsuite/data/precip_2000.tar.bzip2
new file mode 100644
index 0000000..60887ad
Binary files /dev/null and b/temporal/t.rast.import/testsuite/data/precip_2000.tar.bzip2 differ
diff --git a/temporal/t.rast.import/testsuite/test_temporal_rast_import.py b/temporal/t.rast.import/testsuite/test_temporal_rast_import.py
new file mode 100644
index 0000000..212c88c
--- /dev/null
+++ b/temporal/t.rast.import/testsuite/test_temporal_rast_import.py
@@ -0,0 +1,47 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Fri Feb 26 14:46:06 2016
+
+ at author: lucadelu
+"""
+
+"""
+Test t.rast.import
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author: lucadelu
+"""
+
+from grass.gunittest.case import TestCase
+import os
+
+class TestRasterImport(TestCase):
+    
+    input_ = os.path.join("data", "precip_2000.tar.bzip2")
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()
+        cls.runModule("t.remove", flags="rf", inputs="A")
+        
+    def test_import(self):
+        self.assertModule("t.rast.import", input=self.input_, output="A", 
+                          basename="a", overwrite=True)
+        tinfo = """start_time=2000-01-01 00:00:00
+                   end_time=2001-01-01 00:00:00
+                   granularity=1 month
+                   map_time=interval
+                   north=320000.0
+                   south=10000.0
+                   east=935000.0
+                   west=120000.0
+                """
+                
+        info = SimpleModule("t.info", flags="g", input="A")
+        self.assertModuleKeyValue(module=info, reference=tinfo,
+                                  precision=2, sep="=")
\ No newline at end of file
diff --git a/temporal/t.rast.list/t.rast.list.html b/temporal/t.rast.list/t.rast.list.html
index 11611c1..d97abfd 100644
--- a/temporal/t.rast.list/t.rast.list.html
+++ b/temporal/t.rast.list/t.rast.list.html
@@ -202,5 +202,5 @@ vector dataset <a href="t.vect.list.html#using-method-option">t.vect.list</a>
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-10-06 17:26:07 +0200 (Tue, 06 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-06 17:24:26 +0200 (Tue, 06 Oct 2015) $</i>
 
diff --git a/temporal/t.rast.mapcalc/t.rast.mapcalc.html b/temporal/t.rast.mapcalc/t.rast.mapcalc.html
index 717d9cc..b6d64d1 100644
--- a/temporal/t.rast.mapcalc/t.rast.mapcalc.html
+++ b/temporal/t.rast.mapcalc/t.rast.mapcalc.html
@@ -166,5 +166,5 @@ t.rast.list tempmean_monthly columns=name,start_time,min,max | grep 01-01
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.rast.neighbors/t.rast.neighbors.html b/temporal/t.rast.neighbors/t.rast.neighbors.html
index 202ec77..6604abf 100644
--- a/temporal/t.rast.neighbors/t.rast.neighbors.html
+++ b/temporal/t.rast.neighbors/t.rast.neighbors.html
@@ -116,4 +116,4 @@ name|start_time|min|max
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-01-13 00:30:14 +0100 (Wed, 13 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-13 00:28:48 +0100 (Wed, 13 Jan 2016) $</i>
diff --git a/temporal/t.rast.neighbors/t.rast.neighbors.py b/temporal/t.rast.neighbors/t.rast.neighbors.py
index d13a971..8bf5c4d 100755
--- a/temporal/t.rast.neighbors/t.rast.neighbors.py
+++ b/temporal/t.rast.neighbors/t.rast.neighbors.py
@@ -62,6 +62,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: nprocs
 #% type: integer
 #% description: Number of r.neighbor processes to run in parallel
@@ -74,6 +83,7 @@
 #% key: n
 #% description: Register Null maps
 #%end
+from __future__ import print_function
 
 import copy
 import grass.script as grass
@@ -94,6 +104,7 @@ def main():
     register_null = flags["n"]
     method = options["method"]
     nprocs = options["nprocs"]
+    time_suffix = options["suffix"]
 
     # Make sure the temporal database exists
     tgis.init()
@@ -130,7 +141,16 @@ def main():
     # run r.neighbors all selected maps
     for map in maps:
         count += 1
-        map_name = "%s_%i" % (base, count)
+        if sp.get_temporal_type() == 'absolute' and time_suffix == 'gran':
+            suffix = tgis.create_suffix_from_datetime(map.temporal_extent.get_start_time(),
+                                                      sp.get_granularity())
+            map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        elif sp.get_temporal_type() == 'absolute' and time_suffix == 'time':
+            suffix = tgis.create_time_suffix(map)
+            map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        else:
+            map_name = tgis.create_numeric_suffic(base, count, time_suffix)
+
         new_map = tgis.open_new_map_dataset(map_name, None, type="raster",
                                             temporal_extent=map.get_temporal_extent(),
                                             overwrite=overwrite, dbif=dbif)
diff --git a/temporal/t.rast.neighbors/testsuite/test_neighbors.py b/temporal/t.rast.neighbors/testsuite/test_neighbors.py
new file mode 100644
index 0000000..c73f436
--- /dev/null
+++ b/temporal/t.rast.neighbors/testsuite/test_neighbors.py
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+"""
+Created on Wed Feb 17 19:53:04 2016
+
+ at author: lucadelu
+"""
+
+import os
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestAggregationAbsolute(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = rand(1,10)", flags=['s'],
+                      overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = rand(1,10)", flags=['s'],
+                      overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = rand(1,10)", flags=['s'],
+                      overwrite=True)
+
+        cls.runModule("t.create", type="strds", temporaltype="absolute",
+                      output="A", title="A test", description="A test",
+                      overwrite=True)
+
+        cls.runModule("t.register", flags="i",  type="raster",  input="A",
+                      maps="a1,a2,a3", start="2001-01-01 00:00:00",
+                      increment="1 month", overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+
+    def tearDown(self):
+        """Remove generated data"""
+        self.runModule("t.remove", flags="rf", type="strds", inputs="B")
+
+    def test_where(self):
+        """Test simple t.rast.neighbors"""
+        trast_list = SimpleModule("t.rast.neighbors", quiet=True, input="A",
+                                  output="B", basename='b', overwrite=True,
+                                  size="5", where="start_time <= '2001-02-01 00:00:00'")
+        self.assertModule(trast_list)
+        self.assertRasterExists('b_2001_01')
+        self.assertRasterMinMax('b_2001_02', 1, 10)
+        self.assertRasterDoesNotExist('b_2001_03')
+        
+    def test_simple(self):
+        """Test simple t.rast.neighbors"""
+        trast_list = SimpleModule("t.rast.neighbors", quiet=True, input="A",
+                                  output="B", size="5", basename='b',
+                                  overwrite=True)
+        self.assertModule(trast_list)
+        self.assertRasterMinMax('b_2001_01', 1, 10)
+        self.assertRasterMinMax('b_2001_02', 1, 10)
+
+    def test_time_suffix(self):
+        """Test simple t.rast.neighbors"""
+        trast_list = SimpleModule("t.rast.neighbors", quiet=True, input="A",
+                                  output="B", size="5", basename='b',
+                                  suffix="time", overwrite=True)
+        self.assertModule(trast_list)
+        self.assertRasterExists('b_2001_01_01T00_00_00')
+
+    def test_num_suffix(self):
+        """Test simple t.rast.neighbors"""
+        trast_list = SimpleModule("t.rast.neighbors", quiet=True, input="A",
+                                  output="B", size="5", basename='b',
+                                  suffix="num%03", overwrite=True)
+        self.assertModule(trast_list)
+        self.assertRasterExists('b_001')
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.out.vtk/t.rast.out.vtk.html b/temporal/t.rast.out.vtk/t.rast.out.vtk.html
index df7bbeb..a78296e 100644
--- a/temporal/t.rast.out.vtk/t.rast.out.vtk.html
+++ b/temporal/t.rast.out.vtk/t.rast.out.vtk.html
@@ -44,5 +44,5 @@ ls -1 /tmp/export
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-30 15:30:14 +0200 (Tue, 30 Aug 2016) $</i>
 
diff --git a/temporal/t.rast.series/t.rast.series.html b/temporal/t.rast.series/t.rast.series.html
index 5be9241..4e61ec3 100644
--- a/temporal/t.rast.series/t.rast.series.html
+++ b/temporal/t.rast.series/t.rast.series.html
@@ -71,5 +71,5 @@ done
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-01-13 00:30:14 +0100 (Wed, 13 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-13 00:28:48 +0100 (Wed, 13 Jan 2016) $</i>
 
diff --git a/temporal/t.rast.series/t.rast.series.py b/temporal/t.rast.series/t.rast.series.py
index af1c49f..bd4a49b 100755
--- a/temporal/t.rast.series/t.rast.series.py
+++ b/temporal/t.rast.series/t.rast.series.py
@@ -18,6 +18,7 @@
 #%module
 #% description: Performs different aggregation algorithms from r.series on all or a subset of raster maps in a space time raster dataset.
 #% keyword: temporal
+#% keyword: aggregation
 #% keyword: series
 #% keyword: raster
 #% keyword: time
diff --git a/temporal/t.rast.series/testsuite/test_series.py b/temporal/t.rast.series/testsuite/test_series.py
new file mode 100644
index 0000000..2a81692
--- /dev/null
+++ b/temporal/t.rast.series/testsuite/test_series.py
@@ -0,0 +1,154 @@
+"""Test t.rast.series
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+import os
+import grass.pygrass.modules as pymod
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+
+class TestSnapAbsoluteSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-01", 
+                                     increment="1 month",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_average")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_maximum")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_minimum")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_minimum_2")
+        
+    def test_average(self):
+        self.assertModule("t.rast.series", input="A", method="average", 
+                          output="series_average")
+
+        self.assertRasterMinMax(map="series_average", refmin=250, refmax=250,
+                                msg="Average must be 250")
+
+    def test_maximum(self):
+        self.assertModule("t.rast.series", input="A", method="maximum", 
+                          output="series_maximum")
+
+        self.assertRasterMinMax(map="series_maximum", refmin=400, refmax=400,
+                                msg="Maximum must be 400")
+
+    def test_minimum(self):
+        self.assertModule("t.rast.series", input="A", method="minimum", 
+                          output="series_minimum")
+
+        self.assertRasterMinMax(map="series_minimum", refmin=100, refmax=100,
+                                msg="Minimum must be 100")
+
+    def test_minimum_where(self):
+        self.assertModule("t.rast.series", input="A", method="minimum", 
+                          output="series_minimum_2", 
+                          where="start_time >= '2001-03-01'")
+
+        self.assertRasterMinMax(map="series_minimum_2", refmin=300, refmax=300,
+                                msg="Minimum must be 300")
+
+
+
+class TestSnapRelativeSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_average")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_maximum")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_minimum")
+        cls.runModule("g.remove", flags="f", type="raster", name="series_minimum_2")
+        
+    def test_average(self):
+        self.assertModule("t.rast.series", input="A", method="average", 
+                          output="series_average")
+
+        self.assertRasterMinMax(map="series_average", refmin=250, refmax=250,
+                                msg="Average must be 250")
+
+    def test_maximum(self):
+        self.assertModule("t.rast.series", input="A", method="maximum", 
+                          output="series_maximum")
+
+        self.assertRasterMinMax(map="series_maximum", refmin=400, refmax=400,
+                                msg="Maximum must be 400")
+
+    def test_minimum(self):
+        self.assertModule("t.rast.series", input="A", method="minimum", 
+                          output="series_minimum")
+
+        self.assertRasterMinMax(map="series_minimum", refmin=100, refmax=100,
+                                msg="Minimum must be 100")
+
+    def test_minimum_where(self):
+        self.assertModule("t.rast.series", input="A", method="minimum", 
+                          output="series_minimum_2", 
+                          where="start_time >= 28")
+
+        self.assertRasterMinMax(map="series_minimum_2", refmin=300, refmax=300,
+                                msg="Minimum must be 300")
+
+
+ 
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
+
diff --git a/temporal/t.rast.to.rast3/t.rast.to.rast3.html b/temporal/t.rast.to.rast3/t.rast.to.rast3.html
index e328bdb..4a76dcb 100644
--- a/temporal/t.rast.to.rast3/t.rast.to.rast3.html
+++ b/temporal/t.rast.to.rast3/t.rast.to.rast3.html
@@ -139,5 +139,5 @@ r3.info tempmean_monthly_2012
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.rast.to.rast3/t.rast.to.rast3.py b/temporal/t.rast.to.rast3/t.rast.to.rast3.py
index 480ef5b..16a275c 100755
--- a/temporal/t.rast.to.rast3/t.rast.to.rast3.py
+++ b/temporal/t.rast.to.rast3/t.rast.to.rast3.py
@@ -29,6 +29,7 @@
 
 #%option G_OPT_R3_OUTPUT
 #%end
+from __future__ import print_function
 
 import os
 import grass.script as grass
@@ -85,7 +86,7 @@ def main():
         unit = granularity.split(" ")[1]
         granularity = float(granularity.split(" ")[0])
 
-        print "Gran from stds %0.15f"%(granularity)
+        print("Gran from stds %0.15f"%(granularity))
 
         if unit == "years" or unit == "year":
             bottom = float(start.year - 1900)
diff --git a/temporal/t.rast.to.rast3/testsuite/test_strds_to_rast3.py b/temporal/t.rast.to.rast3/testsuite/test_strds_to_rast3.py
index 92a88a1..e33de58 100644
--- a/temporal/t.rast.to.rast3/testsuite/test_strds_to_rast3.py
+++ b/temporal/t.rast.to.rast3/testsuite/test_strds_to_rast3.py
@@ -15,10 +15,13 @@ from grass.gunittest.gmodules import SimpleModule
 
 class TestSTRDSToRast3(TestCase):
 
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+
     def setUp(self):
         """Create input data
         """
-        self.use_temp_region()
         self.runModule("g.gisenv",  set="TGIS_USE_CURRENT_MAPSET=1")
         self.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
 
@@ -66,35 +69,23 @@ class TestSTRDSToRast3(TestCase):
 
     def tearDown(self):
         """Remove generated data"""
-        #self.runModule("t.remove",  flags="rf",  type="strds",  
-        #                           inputs="precip_i,precip_f,precip_d")
-        #self.runModule('g.remove', type='raster', pattern='prec_*', flags='f')
-        self.del_temp_region()
+        self.runModule("t.remove",  flags="rf",  type="strds",
+                       inputs="precip_i,precip_f,precip_d")
+        self.runModule('g.remove', type='raster', pattern='prec_*', flags='f')
+        self.runModule('g.remove', type='raster_3d', pattern='precip_*', flags='f')
+
+    @classmethod
+    def tearDownClass(cls):
+        """Unset region"""
+        cls.del_temp_region()
 
-    def otest_3m(self):
+    def test_3m(self):
         """Convert STRDS into 3d raster map, granularity 3 months"""
 
         self.assertModule("t.rast.to.rast3",  input="precip_i",  output="precip_i")
         self.assertModule("t.rast.to.rast3",  input="precip_f",  output="precip_f")
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
 
-        univar_string="""n=576
-                        null_cells=0
-                        cells=576
-                        min=100
-                        max=600
-                        range=500
-                        mean=350
-                        mean_of_abs=350
-                        stddev=170.782512765993
-                        variance=29166.6666666667
-                        coeff_var=48.7950036474267
-                        sum=201600"""
-
-        self.assertRaster3dFitsUnivar(raster="precip_i", reference=univar_string, precision=2)
-        self.assertRaster3dFitsUnivar(raster="precip_f", reference=univar_string, precision=2)
-        self.assertRaster3dFitsUnivar(raster="precip_d", reference=univar_string, precision=2)
-
         tinfo_string="""north=80
                         south=0
                         east=120
@@ -161,22 +152,6 @@ class TestSTRDSToRast3(TestCase):
         self.assertModule("t.rast.to.rast3",  input="precip_f",  output="precip_f")
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
 
-        univar_string="""n=480
-                        null_cells=96
-                        cells=576
-                        min=100
-                        max=600
-                        range=500
-                        mean=360
-                        mean_of_abs=360
-                        stddev=185.472369909914
-                        variance=34400
-                        coeff_var=51.5201027527539
-                        sum=172800"""
-
-        univar = SimpleModule("r3.univar", flags="g", map="precip_i")
-        self.assertModuleKeyValue(module=univar, reference=univar_string, precision=2, sep="=")
-
         tinfo_string="""north=80
                         south=0
                         east=120
@@ -236,36 +211,42 @@ class TestSTRDSToRast3(TestCase):
 
 class TestSTRDSToRast3MultiGran(TestCase):
 
-    def setUp(self):
+    @classmethod
+    def setUpClass(cls):
         """Create input data
         """
-        self.use_temp_region()
-        self.runModule("g.gisenv",  set="TGIS_USE_CURRENT_MAPSET=1")
-        self.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+        cls.use_temp_region()
+        cls.runModule("g.gisenv",  set="TGIS_USE_CURRENT_MAPSET=1")
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
         
-        self.runModule("r.mapcalc", expression="prec_1d = 100.0")
-        self.runModule("r.mapcalc", expression="prec_2d = 200.0")
-        self.runModule("r.mapcalc", expression="prec_3d = 300.0")
-        self.runModule("r.mapcalc", expression="prec_4d = 400.0")
-        self.runModule("r.mapcalc", expression="prec_5d = 500.0")
-        self.runModule("r.mapcalc", expression="prec_6d = 600.0")
-
-        self.runModule("t.create", type="strds",  temporaltype="absolute",  
+        cls.runModule("r.mapcalc", expression="prec_1d = 100.0")
+        cls.runModule("r.mapcalc", expression="prec_2d = 200.0")
+        cls.runModule("r.mapcalc", expression="prec_3d = 300.0")
+        cls.runModule("r.mapcalc", expression="prec_4d = 400.0")
+        cls.runModule("r.mapcalc", expression="prec_5d = 500.0")
+        cls.runModule("r.mapcalc", expression="prec_6d = 600.0")
+
+        cls.runModule("t.create", type="strds",  temporaltype="absolute",
                        output="precip_d",  title="A test float",  
                        description="A test float values")
 
     def tearDown(self):
         """Remove generated data"""
-        #self.runModule("t.remove",  flags="rf",  type="strds", inputs="precip_d")
-        #self.runModule('g.remove', type='raster', pattern='prec_*', flags='f')
-        self.del_temp_region()
+        self.runModule('g.remove', type='raster_3d', pattern='precip_*', flags='f')
 
-    def otest_years(self):
+    @classmethod
+    def tearDownClass(cls):
+        """Remove generated data"""
+        cls.runModule("t.remove",  flags="rf",  type="strds", inputs="precip_d")
+        cls.runModule('g.remove', type='raster', pattern='prec_*', flags='f')
+        cls.del_temp_region()
+
+    def test_years(self):
         """Convert STRDS into 3d raster map, granularity5 years"""
 
         self.runModule("t.register", flags="i",  type="raster",  input="precip_d",  
                        maps="prec_1d,prec_2d,prec_3d,prec_4d,prec_5d,prec_6d",  
-                       start="2000-01-01", increment="5 years")
+                       start="2000-01-01", increment="5 years", overwrite=True)
 
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
 
@@ -288,12 +269,12 @@ class TestSTRDSToRast3MultiGran(TestCase):
 
         self.assertRaster3dFitsInfo(raster="precip_d", reference=tinfo_string, precision=2)
 
-    def otest_months(self):
+    def test_months(self):
         """Convert STRDS into 3d raster map, granularity 6 months"""
 
         self.runModule("t.register", flags="i",  type="raster",  input="precip_d",  
                        maps="prec_1d,prec_2d,prec_3d,prec_4d,prec_5d,prec_6d",  
-                       start="2000-01-01", increment="6 months")
+                       start="2000-01-01", increment="6 months", overwrite=True)
 
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
 
@@ -316,12 +297,12 @@ class TestSTRDSToRast3MultiGran(TestCase):
 
         self.assertRaster3dFitsInfo(raster="precip_d", reference=tinfo_string, precision=2)
 
-    def otest_days(self):
+    def test_days(self):
         """Convert STRDS into 3d raster map, granularity 7 days"""
 
         self.runModule("t.register", flags="i",  type="raster",  input="precip_d",  
                        maps="prec_1d,prec_2d,prec_3d,prec_4d,prec_5d,prec_6d",  
-                       start="2000-01-01", increment="7 days")
+                       start="2000-01-01", increment="7 days", overwrite=True)
 
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
         self.runModule("r3.info", map="precip_d")
@@ -345,12 +326,12 @@ class TestSTRDSToRast3MultiGran(TestCase):
 
         self.assertRaster3dFitsInfo(raster="precip_d", reference=tinfo_string, precision=2)
 
-    def otest_hours(self):
-        """Convert STRDS into 3d raster map, granularity 7 days"""
+    def test_hours(self):
+        """Convert STRDS into 3d raster map, granularity 3 hours"""
 
         self.runModule("t.register", flags="i",  type="raster",  input="precip_d",  
                        maps="prec_1d,prec_2d,prec_3d,prec_4d,prec_5d,prec_6d",  
-                       start="2000-01-01", increment="3 hours")
+                       start="2000-01-01", increment="3 hours", overwrite=True)
 
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
         self.runModule("r3.info", map="precip_d")
@@ -374,12 +355,12 @@ class TestSTRDSToRast3MultiGran(TestCase):
 
         self.assertRaster3dFitsInfo(raster="precip_d", reference=tinfo_string, precision=2)
 
-    def otest_minutes(self):
-        """Convert STRDS into 3d raster map, granularity 7 days"""
+    def test_minutes(self):
+        """Convert STRDS into 3d raster map, granularity 17 minutes"""
 
         self.runModule("t.register", flags="i",  type="raster",  input="precip_d",  
                        maps="prec_1d,prec_2d,prec_3d,prec_4d,prec_5d,prec_6d",  
-                       start="2000-01-01", increment="17 minutes")
+                       start="2000-01-01", increment="17 minutes", overwrite=True)
 
         self.assertModule("t.rast.to.rast3",  input="precip_d",  output="precip_d")
         self.runModule("r3.info", map="precip_d")
diff --git a/temporal/t.rast.to.vect/Makefile b/temporal/t.rast.to.vect/Makefile
new file mode 100644
index 0000000..600cdf7
--- /dev/null
+++ b/temporal/t.rast.to.vect/Makefile
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../../
+
+PGM = t.rast.to.vect
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script $(TEST_DST)
diff --git a/temporal/t.rast.to.vect/t.rast.to.vect.html b/temporal/t.rast.to.vect/t.rast.to.vect.html
new file mode 100644
index 0000000..9ab6e64
--- /dev/null
+++ b/temporal/t.rast.to.vect/t.rast.to.vect.html
@@ -0,0 +1,42 @@
+<h2>DESCRIPTION</h2>
+
+<em>t.rast.to.vect</em> is designed to convert a space time raster dataset
+into a space time vector dataset. This module works as a front-end to
+<a href="r.to.vect.html">r.to.vect</a> and therefore supports all parameter
+of this module. Hence, all raster map layers in a space time raster dataset
+are passed to <a href="r.to.vect.html">r.to.vect</a> that converts them into
+vector map layers (using point,line or area as conversion criteria). 
+Please refer to the <a href="r.to.vect.html">r.to.vect</a> documentation 
+for a detailed description of the raster to vector conversion options.
+The new generated vector map
+layers will be registered in the output space time vector dataset, using 
+the same time stamps as their raster map layer origins.
+<p>
+This module supports the parallel processing of <a href="r.to.vect.html">r.to.vect</a>
+module instances. The number of parallel processes 
+can be set with the <em>nprocs</em> option. 
+However, this will only work in conjunction with the <em>-t</em>
+flag, that avoids the creation of attribute tables. 
+The parallel creation of attribute tables is not supported.
+<p>
+The <em>where</em> option allows selecting subsets of the input space time raster
+dataset.
+<p>
+The flag <em>-n</em> can be used to force the registration of empty 
+vector map layers. Empty vector maps may occur in case that empty 
+raster map layers should be converted into vector map layers.
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.to.vect.html">r.to.vect</a>,
+<a href="t.vect.db.select.html">t.rast.db.select</a>,
+<a href="t.info.html">t.info</a>
+</em>
+
+
+<h2>AUTHOR</h2>
+
+Sören Gebbert, Geoinformatikbüro Dassau
+
+<p><i>Last changed: $Date: 2015-09-05 18:13:18 +0200 (Sat, 05 Sep 2015) $</i>
diff --git a/temporal/t.rast.to.vect/t.rast.to.vect.py b/temporal/t.rast.to.vect/t.rast.to.vect.py
new file mode 100755
index 0000000..4fd7115
--- /dev/null
+++ b/temporal/t.rast.to.vect/t.rast.to.vect.py
@@ -0,0 +1,274 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+############################################################################
+#
+# MODULE:       t.rast.to.vect
+# AUTHOR(S):    Soeren Gebbert
+#
+# PURPOSE:      Converts a space time raster dataset into a space time vector dataset.
+#
+# COPYRIGHT:    (C) 2015 by the GRASS Development Team
+#
+#               This program is free software under the GNU General Public
+#               License (version 2). Read the file COPYING that comes with GRASS
+#               for details.
+#
+#############################################################################
+
+#%module
+#% description: Converts a space time raster dataset into a space time vector dataset
+#% keyword: temporal
+#% keyword: conversion
+#% keyword: raster
+#% keyword: vector
+#% keyword: time
+#%end
+
+#%option G_OPT_STRDS_INPUT
+#%end
+
+#%option G_OPT_STVDS_OUTPUT
+#%end
+
+#%option G_OPT_T_WHERE
+#%end
+
+#%option
+#% key: type
+#% type: string
+#% description: Output feature type
+#% required: yes
+#% multiple: no
+#% options: point,line,area
+#%end
+
+#%option
+#% key: basename
+#% type: string
+#% label: Basename of the new generated output maps
+#% description: A numerical suffix separated by an underscore will be attached to create a unique identifier
+#% required: yes
+#% multiple: no
+#%end
+
+#%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
+#% key: column
+#% type: string
+#% description: Name of attribute column to store value
+#% required: no
+#% multiple: no
+#% answer: value
+#%end
+
+#%option
+#% key: nprocs
+#% type: integer
+#% description: Number of r.to.vect processes to run in parallel, more than 1 process works only in conjunction with flag -t
+#% required: no
+#% multiple: no
+#% answer: 1
+#%end
+
+#%flag
+#% key: n
+#% description: Register empty vector maps
+#%end
+
+#%flag
+#% key: t
+#% description: Do not create attribute tables
+#%end
+
+#%flag
+#% key: s
+#% description: Smooth corners of area features
+#%end
+
+#%flag
+#% key: z
+#% label: Write raster values as z coordinate
+#% description: Table is not created. Currently supported only for points.
+#%end
+
+#%flag
+#% key: b
+#% label: Do not build vector topology
+#% description: Name must be SQL compliant
+#%end
+
+#%flag
+#% key: v
+#% description: Use raster values as categories instead of unique sequence (CELL only)
+#%end
+
+import sys
+import copy
+import grass.script as gscript
+import grass.temporal as tgis
+import grass.pygrass.modules as pymod
+
+
+############################################################################
+
+def main(options, flags):
+
+    # Get the options
+    input = options["input"]
+    output = options["output"]
+    where = options["where"]
+    base = options["basename"]
+    method = options["type"]
+    nprocs = int(options["nprocs"])
+    column = options["column"]
+    time_suffix = options["suffix"]
+
+    register_null = flags["n"]
+    t_flag = flags["t"]
+    s_flag = flags["s"]
+    v_flag = flags["v"]
+    b_flag = flags["b"]
+    z_flag = flags["z"]
+    
+    # Make sure the temporal database exists
+    tgis.init()
+    # We need a database interface
+    dbif = tgis.SQLDatabaseInterfaceConnection()
+    dbif.connect()
+
+    overwrite = gscript.overwrite()
+
+    sp = tgis.open_old_stds(input, "strds", dbif)
+    maps = sp.get_registered_maps_as_objects(where=where, dbif=dbif)
+
+    if not maps:
+        dbif.close()
+        gscript.warning(_("Space time raster dataset <%s> is empty") % sp.get_id())
+        return
+
+    # Check the new stvds
+    new_sp = tgis.check_new_stds(output, "stvds", dbif=dbif,
+                                 overwrite=overwrite)
+                                               
+    # Setup the flags
+    flags = ""
+    if t_flag is True:
+        flags += "t"
+    if s_flag is True:
+        flags += "s"
+    if v_flag is True:
+        flags += "v"
+    if b_flag is True:
+        flags += "b"
+    if z_flag is True:
+        flags += "z"
+    
+    # Configure the r.to.vect module
+    to_vector_module = pymod.Module("r.to.vect", input="dummy",
+                                   output="dummy", run_=False,
+                                   finish_=False, flags=flags,
+                                   type=method, overwrite=overwrite,
+                                   quiet=True)
+
+    # The module queue for parallel execution, except if attribute tables should
+    # be created. Then force single process use
+    if t_flag is False:
+        if nprocs > 1:
+            nprocs = 1
+            gscript.warning(_("The number of parellel r.to.vect processes was "\
+                               "reduced to 1 because of the table attribute "\
+                               "creation"))
+    process_queue = pymod.ParallelModuleQueue(int(nprocs))
+
+    count = 0
+    num_maps = len(maps)
+    new_maps = []
+
+    # run r.to.vect all selected maps
+    for map in maps:
+        count += 1
+        if sp.get_temporal_type() == 'absolute' and time_suffix == 'gran':
+            suffix = tgis.create_suffix_from_datetime(map.temporal_extent.get_start_time(),
+                                                      sp.get_granularity())
+            map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        elif sp.get_temporal_type() == 'absolute' and time_suffix == 'time':
+            suffix = tgis.create_time_suffix(map)
+            map_name = "{ba}_{su}".format(ba=base, su=suffix)
+        else:
+            map_name = tgis.create_numeric_suffic(base, count, time_suffix)
+        new_map = tgis.open_new_map_dataset(map_name, None, type="vector",
+                                            temporal_extent=map.get_temporal_extent(),
+                                            overwrite=overwrite, dbif=dbif)
+        new_maps.append(new_map)
+
+        mod = copy.deepcopy(to_vector_module)
+        mod(input=map.get_id(), output=new_map.get_id())
+        sys.stderr.write(mod.get_bash() + "\n")
+        process_queue.put(mod)
+
+        if count%10 == 0:
+            gscript.percent(count, num_maps, 1)
+
+    # Wait for unfinished processes
+    process_queue.wait()
+
+    # Open the new space time vector dataset
+    ttype, stype, title, descr = sp.get_initial_values()
+    new_sp = tgis.open_new_stds(output, "stvds", ttype, title,
+                                descr, stype, dbif, overwrite)
+    # collect empty maps to remove them
+    num_maps = len(new_maps)
+    empty_maps = []
+
+    # Register the maps in the database
+    count = 0
+    for map in new_maps:
+        count += 1
+
+        if count%10 == 0:
+            gscript.percent(count, num_maps, 1)
+
+        # Do not register empty maps
+        map.load()
+        if map.metadata.get_number_of_primitives() == 0:
+            if not register_null:
+                empty_maps.append(map)
+                continue
+
+        # Insert map in temporal database
+        map.insert(dbif)
+        new_sp.register_map(map, dbif)
+
+    # Update the spatio-temporal extent and the metadata table entries
+    new_sp.update_from_registered_maps(dbif)
+    gscript.percent(1, 1, 1)
+
+    # Remove empty maps
+    if len(empty_maps) > 0:
+        names = ""
+        count = 0
+        for map in empty_maps:
+            if count == 0:
+                count += 1
+                names += "%s" % (map.get_name())
+            else:
+                names += ",%s" % (map.get_name())
+
+        gscript.run_command("g.remove", flags='f', type='vector', name=names, 
+                            quiet=True)
+
+    dbif.close()
+
+############################################################################
+
+if __name__ == "__main__":
+    options, flags = gscript.parser()
+    main(options, flags)
diff --git a/temporal/t.rast.to.vect/testsuite/test_to_vect.py b/temporal/t.rast.to.vect/testsuite/test_to_vect.py
new file mode 100644
index 0000000..23258cb
--- /dev/null
+++ b/temporal/t.rast.to.vect/testsuite/test_to_vect.py
@@ -0,0 +1,189 @@
+"""Test t.rast.to.vect
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Soeren Gebbert
+"""
+
+import subprocess
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestRasterToVector(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+        cls.runModule("r.mapcalc", expression="a_1 = 100", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_2 = 200", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_3 = 300", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_4 = 400", overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_5 = null()", overwrite=True)
+
+        cls.runModule("t.create", type="strds", temporaltype="absolute",  
+                                 output="A", title="A test", description="A test",  
+                                 overwrite=True)
+        cls.runModule("t.register",  flags="i", type="raster", input="A",  
+                                     maps="a_1,a_2,a_3,a_4,a_5", start="2001-01-01", 
+                                     increment="3 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove", flags="rf", type="strds",  
+                                   inputs="A")
+        cls.del_temp_region()
+        
+    def tearDown(self):
+        """Remove generated data"""
+        self.runModule("t.remove", flags="rf", type="stvds",  
+                                   inputs="result")
+
+    def test_simple_points(self):
+        self.assertModule("t.rast.to.vect", input="A", output="result", 
+                          type="point", flags="n", column="values",
+                          basename="test",
+                          nprocs=1, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-04-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=5
+                        points=384
+                        primitives=384"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_simple_area(self):
+        self.assertModule("t.rast.to.vect", input="A", output="result", 
+                          type="area", flags="n", column="values",
+                          basename="test",
+                          nprocs=1, overwrite=True, verbose=True)
+                          
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+        
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-04-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=5
+                        boundaries=4
+                        centroids=4
+                        primitives=8
+                        nodes=4
+                        areas=4
+                        islands=4"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_simple_area_smooth(self):
+        """Test areas with smooth corners"""
+        self.assertModule("t.rast.to.vect", input="A", output="result", 
+                          type="area", flags="s", column="values",
+                          basename="test",
+                          nprocs=1, overwrite=True, verbose=True)
+                          
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+        
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        map_time=interval
+                        number_of_maps=4
+                        boundaries=4
+                        centroids=4
+                        primitives=8
+                        nodes=4
+                        areas=4
+                        islands=4"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_parallel(self):
+        self.assertModule("t.rast.to.vect",  input="A", output="result", 
+                          type="point", flags="t", column="values",
+                          basename="test",
+                          nprocs=4, overwrite=True, verbose=True)
+
+        #self.assertModule("t.info",  type="stvds", flags="g",  input="result")
+
+        tinfo_string="""start_time=2001-01-01 00:00:00
+                        end_time=2002-01-01 00:00:00
+                        granularity=3 months
+                        number_of_maps=4
+                        points=384
+                        primitives=384"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="result")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
+
+    def test_num_suffix(self):
+        self.assertModule("t.rast.to.vect",  input="A", output="result", 
+                          type="point", flags="t", column="values",
+                          basename="test", suffix="num%03",
+                          nprocs=4, overwrite=True, verbose=True)
+        self.assertVectorExists("test_001")
+
+    def test_time_suffix(self):
+        self.assertModule("t.rast.to.vect",  input="A", output="result", 
+                          type="point", flags="t", column="values",
+                          basename="test", suffix="time",
+                          nprocs=4, overwrite=True, verbose=True)
+        self.assertVectorExists("test_2001_01_01T00_00_00")
+
+
+class TestRasterToVectorFails(TestCase):
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, b=0, t=50, res=10, res3=10)
+
+        cls.runModule("r.mapcalc", expression="a_1 = 100", overwrite=True)
+
+        cls.runModule("t.create",  type="strds", temporaltype="absolute",  
+                                 output="A", title="A test", description="A test",  
+                                 overwrite=True)
+        cls.runModule("t.register",  flags="i", type="raster", input="A",  
+                                     maps="a_1", start="2001-01-01", 
+                                     increment="3 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove", flags="rf", type="strds",
+                      inputs="A")
+        cls.del_temp_region()
+
+    def test_error_handling(self):
+        # No basename, no type
+        self.assertModuleFail("t.rast.to.vect", input="A", output="result")
+
+
+    def test_empty_strds(self):
+        """Test for empty strds"""
+        self.assertModule("t.rast.to.vect", input="A", output="result", 
+                          type="point", flags="n", column="values",
+                          basename="test",
+                          where="start_time > '2010-01-01'",
+                          nprocs=1, overwrite=True, verbose=True)
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast.univar/t.rast.univar.html b/temporal/t.rast.univar/t.rast.univar.html
index 4a109a8..96387fa 100644
--- a/temporal/t.rast.univar/t.rast.univar.html
+++ b/temporal/t.rast.univar/t.rast.univar.html
@@ -38,5 +38,5 @@ id|start|end|mean|min|max|mean_of_abs|stddev|variance|coeff_var|sum|null_cells|c
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-12-29 09:56:42 +0100 (Mon, 29 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-29 09:56:22 +0100 (Mon, 29 Dec 2014) $</i>
 
diff --git a/temporal/t.rast.univar/testsuite/test_univar.py b/temporal/t.rast.univar/testsuite/test_univar.py
index df7e40e..3081138 100644
--- a/temporal/t.rast.univar/testsuite/test_univar.py
+++ b/temporal/t.rast.univar/testsuite/test_univar.py
@@ -54,7 +54,11 @@ a_2 at testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|192000
 a_3 at testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600
 a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600
 """
-        self.assertLooksLike(univar_text,  t_rast_univar.outputs.stdout)
+        for ref, res in zip(univar_text.split("\n"), t_rast_univar.outputs.stdout.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_2(self):
 
@@ -69,7 +73,11 @@ a_2 at testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|192000
 a_3 at testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|2880000|0|9600
 a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|3840000|0|9600
 """
-        self.assertLooksLike(univar_text,  t_rast_univar.outputs.stdout)
+        for ref, res in zip(univar_text.split("\n"), t_rast_univar.outputs.stdout.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_3(self):
 
@@ -84,7 +92,11 @@ a_2 at testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|19200|
 a_3 at testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|28800|0|96
 a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|38400|0|96
 """
-        self.assertLooksLike(univar_text,  t_rast_univar.outputs.stdout)
+        for ref, res in zip(univar_text.split("\n"), t_rast_univar.outputs.stdout.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_4(self):
 
@@ -101,7 +113,11 @@ a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|384000
 """
         univar_output = open("univar_output.txt", "r").read()
 
-        self.assertLooksLike(univar_text, univar_output)
+        for ref, res in zip(univar_text.split("\n"), univar_output.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_5(self):
 
@@ -117,7 +133,11 @@ a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|384000
 """
         univar_output = open("univar_output.txt", "r").read()
 
-        self.assertLooksLike(univar_text, univar_output)
+        for ref, res in zip(univar_text.split("\n"), univar_output.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_6_error_handling_empty_strds(self):
         # Empty strds
diff --git a/temporal/t.rast.what/Makefile b/temporal/t.rast.what/Makefile
new file mode 100644
index 0000000..036b47f
--- /dev/null
+++ b/temporal/t.rast.what/Makefile
@@ -0,0 +1,7 @@
+MODULE_TOPDIR = ../../
+
+PGM = t.rast.what
+
+include $(MODULE_TOPDIR)/include/Make/Script.make
+
+default: script $(TEST_DST)
diff --git a/temporal/t.rast.what/t.rast.what.html b/temporal/t.rast.what/t.rast.what.html
new file mode 100644
index 0000000..6a3dabf
--- /dev/null
+++ b/temporal/t.rast.what/t.rast.what.html
@@ -0,0 +1,138 @@
+<h2>DESCRIPTION</h2>
+
+<em>t.rast.what</em> is designed to sample space time raster datasets
+at specific point coordinates using <a href="r.what.html">r.what</a>
+internally. The output of <a href="r.what.html">r.what</a> is transformed
+to different output layouts.
+The output layouts can be specified using the <em>layout</em> option.
+<p>
+Three layouts can be specified:
+<ul>
+    <li><em>row</em> - Row order, one vector sample point value per row</li>
+    <li><em>col</em> - Column order, create a column for each vector sample
+     point of a single time step/raster layer</li>
+    <li><em>timerow</em> - Time order, create a column for each time step, 
+     this order is the original <em>r.what</em> output, except that the column
+     names are the timestamps</li>
+</ul>
+
+Please have a look at the example to see the supported layouts.
+<p>
+This module is designed to run several instances of <em>r.what</em> to sample
+subsets of a space time raster dataset in parallel. Several intermediate
+text files will be created that are merged into a single file at the
+end of the processing.
+<p>
+Coordinates can be provided as vector map using the <em>points</em> option
+or as comma separated coordinate list with the <em>coordinates </em>option.
+<p>
+An output file can be specified using the <em>output</em> option. 
+Stdout will be used if no output is specified or if the 
+<em>output</em> option is set to "-".
+    
+<h2>EXAMPLES</h2>
+
+<h3>Data preparation</h3>
+In the following examples we sample a space time raster dataset that contains
+4 raster map layers. First we create the STRDS that will be sampled with
+<em>t.rast.what</em>.
+
+<div class="code"><pre>
+g.region s=0 n=80 w=0 e=120 b=0 t=50 res=10
+
+# Generate data
+r.mapcalc expression="a_1 = 1" -s
+r.mapcalc expression="a_2 = 2" -s
+r.mapcalc expression="a_3 = 3" -s
+r.mapcalc expression="a_4 = 4" -s
+
+t.create type=strds output=A title="A test" descr="A test"
+
+t.register -i type=raster input=A maps=a_1,a_2,a_3,a_4 \
+    start='1990-01-01' increment="1 month"
+</pre></div>
+
+<h3>Example 1</h3>
+
+The first approach uses text coordinates as input and stdout as output,
+the layout is one coordinate(point per column:
+
+
+<div class="code"><pre>
+t.rast.what strds=A coordinates="115,36,79,45" layout=col -n
+
+start|end|115.0000000000;36.0000000000|79.0000000000;45.0000000000
+1990-01-01 00:00:00|1990-02-01 00:00:00|1|1
+1990-02-01 00:00:00|1990-03-01 00:00:00|2|2
+1990-03-01 00:00:00|1990-04-01 00:00:00|3|3
+1990-04-01 00:00:00|1990-05-01 00:00:00|4|4
+</pre></div>
+
+<h3>Example 2</h3>
+
+A vector map layer can be used as input to sample the STRDS. All
+three available layouts are demonstrated using the vector map for sampling.
+
+<div class="code"><pre>
+# First create the vector map layer based on random points
+v.random output=points n=3 seed=1
+
+# Row layout using a text file as output
+t.rast.what strds=A points=points output=result.txt layout=row -n
+
+cat result.txt
+
+115.0043586274|36.3593955783|1990-01-01 00:00:00|1990-02-01 00:00:00|1
+115.0043586274|36.3593955783|1990-02-01 00:00:00|1990-03-01 00:00:00|2
+115.0043586274|36.3593955783|1990-03-01 00:00:00|1990-04-01 00:00:00|3
+115.0043586274|36.3593955783|1990-04-01 00:00:00|1990-05-01 00:00:00|4
+79.6816763826|45.2391522853|1990-01-01 00:00:00|1990-02-01 00:00:00|1
+79.6816763826|45.2391522853|1990-02-01 00:00:00|1990-03-01 00:00:00|2
+79.6816763826|45.2391522853|1990-03-01 00:00:00|1990-04-01 00:00:00|3
+79.6816763826|45.2391522853|1990-04-01 00:00:00|1990-05-01 00:00:00|4
+97.4892579600|79.2347263950|1990-01-01 00:00:00|1990-02-01 00:00:00|1
+97.4892579600|79.2347263950|1990-02-01 00:00:00|1990-03-01 00:00:00|2
+97.4892579600|79.2347263950|1990-03-01 00:00:00|1990-04-01 00:00:00|3
+97.4892579600|79.2347263950|1990-04-01 00:00:00|1990-05-01 00:00:00|4
+
+
+# Column layout order using stdout as output
+t.rast.what strds=A points=points layout=col -n
+
+start|end|115.0043586274;36.3593955783|79.6816763826;45.2391522853|97.4892579600;79.2347263950
+1990-01-01 00:00:00|1990-02-01 00:00:00|1|1|1
+1990-02-01 00:00:00|1990-03-01 00:00:00|2|2|2
+1990-03-01 00:00:00|1990-04-01 00:00:00|3|3|3
+1990-04-01 00:00:00|1990-05-01 00:00:00|4|4|4
+
+# Timerow layout, one time series per row 
+# using the where statement to select a subset of the STRDS
+# and stdout as output
+t.rast.what strds=A points=points \
+    where="start_time >= '1990-03-01'" layout=timerow -n
+
+x|y|1990-03-01 00:00:00;1990-04-01 00:00:00|1990-04-01 00:00:00;1990-05-01 00:00:00
+115.004358627375|36.3593955782903|3|4
+79.681676382576|45.2391522852909|3|4
+97.4892579600048|79.2347263950131|3|4
+</pre></div>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="g.region.html">g.region</a>,
+<a href="r.mask.html">r.mask</a>
+<a href="r.neighbors.html">r.neighbors</a>,
+<a href="r.what.html">r.what</a>,
+<a href="t.info.html">t.info</a>,
+<a href="t.rast.aggregate.ds.html">t.rast.aggregate.ds</a>,
+<a href="t.rast.extract.html">t.rast.extract</a>,
+<a href="v.what.strds.html">v.what.strds</a>
+</em>
+
+
+<h2>AUTHOR</h2>
+
+Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
+
+<p><i>Last changed: $Date: 2015-09-25 13:07:25 +0200 (Fri, 25 Sep 2015) $</i>
diff --git a/temporal/t.rast.what/t.rast.what.py b/temporal/t.rast.what/t.rast.what.py
new file mode 100755
index 0000000..c4ea096
--- /dev/null
+++ b/temporal/t.rast.what/t.rast.what.py
@@ -0,0 +1,526 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+############################################################################
+#
+# MODULE:       t.rast.what
+# AUTHOR(S):    Soeren Gebbert
+#
+# PURPOSE:      Sample a space time raster dataset at specific vector point 
+#               coordinates and write the output to stdout using different 
+#               layouts
+#               
+# COPYRIGHT:    (C) 2015 by the GRASS Development Team
+#
+#               This program is free software under the GNU General Public
+#               License (version 2). Read the file COPYING that comes with GRASS
+#               for details.
+#
+#############################################################################
+
+#%module
+#% description: Sample a space time raster dataset at specific vector point coordinates and write the output to stdout using different layouts
+#% keyword: temporal
+#% keyword: sampling
+#% keyword: raster
+#% keyword: time
+#%end
+
+#%option G_OPT_V_INPUT
+#% key: points
+#% required: no
+#%end
+
+#%option G_OPT_M_COORDS
+#% required: no
+#% description: Comma separated list of coordinates
+#%end
+
+#%option G_OPT_STRDS_INPUT
+#% key: strds
+#%end
+
+#%option G_OPT_F_OUTPUT
+#% required: no
+#% description: Name for the output file or "-" in case stdout should be used
+#% answer: -
+#%end
+
+#%option G_OPT_T_WHERE
+#%end
+
+#%option G_OPT_M_NULL_VALUE
+#%end
+
+#%option G_OPT_F_SEP
+#%end
+
+#%option
+#% key: order
+#% type: string
+#% description: Sort the maps by category
+#% required: no
+#% multiple: yes
+#% options: id, name, creator, mapset, creation_time, modification_time, start_time, end_time, north, south, west, east, min, max
+#% answer: start_time
+#%end
+
+#%option
+#% key: layout
+#% type: string
+#% description: The layout of the output. One point per row (row), one point per column (col), all timsteps in one row (timerow)
+#% required: no
+#% multiple: no
+#% options: row, col, timerow
+#% answer: row
+#%end
+
+#%option
+#% key: nprocs
+#% type: integer
+#% description: Number of r.what processes to run in parallel
+#% required: no
+#% multiple: no
+#% answer: 1
+#%end
+
+#%flag
+#% key: n
+#% description: Output header row
+#%end
+
+#%flag
+#% key: i
+#% description: Use stdin as input and ignore coordinates and point option
+#%end
+
+## Temporary disabled the r.what flags due to test issues
+##%flag
+##% key: f
+##% description: Show the category labels of the grid cell(s)
+##%end
+
+##%flag
+##% key: r
+##% description: Output color values as RRR:GGG:BBB
+##%end
+
+##%flag
+##% key: i
+##% description: Output integer category values, not cell values
+##%end
+
+import sys
+import copy
+import grass.script as gscript
+import grass.temporal as tgis
+import grass.pygrass.modules as pymod
+
+
+############################################################################
+
+def main(options, flags):
+
+    # Get the options
+    points = options["points"]
+    coordinates = options["coordinates"] 
+    strds = options["strds"]
+    output = options["output"]
+    where = options["where"]
+    order = options["order"]
+    layout = options["layout"]
+    null_value = options["null_value"]
+    separator = options["separator"]
+    
+    nprocs = int(options["nprocs"])
+    write_header = flags["n"]
+    use_stdin = flags["i"]
+
+    #output_cat_label = flags["f"]
+    #output_color = flags["r"]
+    #output_cat = flags["i"]
+    
+    overwrite = gscript.overwrite()
+    
+    if coordinates and points: 
+        gscript.fatal(_("Options coordinates and points are mutually exclusive"))
+
+    if not coordinates and not points and not use_stdin: 
+        gscript.fatal(_("Please specify the coordinates, the points option or use the 's' option to pipe coordinate positions to t.rast.what from stdin, to provide the sampling coordinates"))
+
+    if use_stdin:
+        coordinates_stdin = str(sys.__stdin__.read())
+        # Check if coordinates are given with site names or IDs
+        stdin_length = len(coordinates_stdin.split('\n')[0].split())
+        if stdin_length <= 2:
+            site_input = False
+        elif stdin_length >= 3:
+            site_input = True
+    else:
+        site_input = False
+
+    # Make sure the temporal database exists
+    tgis.init()
+    # We need a database interface
+    dbif = tgis.SQLDatabaseInterfaceConnection()
+    dbif.connect()
+
+    sp = tgis.open_old_stds(strds, "strds", dbif)
+    maps = sp.get_registered_maps_as_objects(where=where, order=order, 
+                                             dbif=dbif)
+    dbif.close()
+
+    if not maps:
+        gscript.fatal(_("Space time raster dataset <%s> is empty") % sp.get_id())
+
+    # Setup separator
+    if separator == "pipe":
+        separator = "|"
+    if separator == "comma":
+        separator = ","
+    if separator == "space":
+        separator = " "
+    if separator == "tab":
+        separator = "\t"
+    if separator == "newline":
+        separator = "\n"
+
+    # Setup flags are disabled due to test issues
+    flags = ""
+    #if output_cat_label is True:
+    #    flags += "f"
+    #if output_color is True:
+    #    flags += "r"
+    #if output_cat is True:
+    #    flags += "i"
+
+    # Configure the r.what module
+    if points: 
+        r_what = pymod.Module("r.what", map="dummy", 
+                                        output="dummy", run_=False, 
+                                        separator=separator, points=points, 
+                                        overwrite=overwrite, flags=flags, 
+                                        quiet=True) 
+    elif coordinates: 
+        # Create a list of values
+        coord_list = coordinates.split(",")
+        r_what = pymod.Module("r.what", map="dummy", 
+                                        output="dummy", run_=False, 
+                                        separator=separator,  
+                                        coordinates=coord_list, 
+                                        overwrite=overwrite, flags=flags, 
+                                        quiet=True)
+    elif use_stdin:
+        r_what = pymod.Module("r.what", map="dummy", 
+                                        output="dummy", run_=False, 
+                                        separator=separator,  
+                                        stdin_=coordinates_stdin, 
+                                        overwrite=overwrite, flags=flags, 
+                                        quiet=True)
+    else: 
+        grass.error(_("Please specify points or coordinates"))
+
+    if len(maps) < nprocs:
+        nprocs = len(maps)
+
+    # The module queue for parallel execution
+    process_queue = pymod.ParallelModuleQueue(int(nprocs))
+    num_maps = len(maps)
+    
+    # 400 Maps is the absolute maximum in r.what
+    # We need to determie the number of maps that can be processed
+    # in parallel
+
+    # First estimate the number of maps per process. We use 400 maps
+    # simultaniously as maximum for a single process
+
+    num_loops = int(num_maps / (400 * nprocs))
+    remaining_maps = num_maps % (400 * nprocs)
+
+    if num_loops == 0:
+        num_loops = 1
+        remaining_maps = 0
+
+    # Compute the number of maps for each process
+    maps_per_loop = int((num_maps - remaining_maps) / num_loops)
+    maps_per_process = int(maps_per_loop / nprocs)
+    remaining_maps_per_loop = maps_per_loop % nprocs
+
+    # We put the output files in an ordered list
+    output_files = []
+    output_time_list = []
+
+    count = 0
+    for loop in range(num_loops):
+        file_name = gscript.tempfile() + "_%i"%(loop)
+        count = process_loop(nprocs, maps, file_name, count, maps_per_process, 
+                             remaining_maps_per_loop, output_files, 
+                             output_time_list, r_what, process_queue)
+    
+    process_queue.wait()
+    
+    gscript.verbose("Number of raster map layers remaining for sampling %i"%(remaining_maps))
+    if remaining_maps > 0:
+        # Use a single process if less then 100 maps
+        if remaining_maps <= 100:
+            mod = copy.deepcopy(r_what)
+            mod(map=map_names, output=file_name)
+            process_queue.put(mod)
+        else:
+            maps_per_process = int(remaining_maps / nprocs)
+            remaining_maps_per_loop = remaining_maps % nprocs
+            
+            file_name = "out_remain"
+            process_loop(nprocs, maps, file_name, count, maps_per_process, 
+                         remaining_maps_per_loop, output_files, 
+                         output_time_list, r_what, process_queue)
+
+    # Wait for unfinished processes
+    process_queue.wait()
+    
+    # Out the output files in the correct order together
+    if layout == "row":
+        one_point_per_row_output(separator, output_files, output_time_list,
+                                 output, write_header, site_input)
+    elif layout == "col":
+        one_point_per_col_output(separator, output_files, output_time_list,
+                                 output, write_header, site_input)
+    else:
+        one_point_per_timerow_output(separator, output_files, output_time_list,
+                                     output, write_header, site_input)
+
+############################################################################
+
+def one_point_per_row_output(separator, output_files, output_time_list,
+                             output, write_header, site_input):
+    """Write one point per row
+       output is of type: x,y,start,end,value
+    """
+    # open the output file for writing
+    out_file = open(output, 'w') if output != "-" else sys.stdout
+    
+    if write_header is True:
+        if site_input:
+            out_file.write("x%(sep)sy%(sep)ssite%(sep)sstart%(sep)send%(sep)svalue\n"\
+                       %({"sep":separator}))
+        else:
+            out_file.write("x%(sep)sy%(sep)sstart%(sep)send%(sep)svalue\n"\
+                       %({"sep":separator}))
+
+    for count in range(len(output_files)):
+        file_name = output_files[count]
+        gscript.verbose(_("Transforming r.what output file %s"%(file_name)))
+        map_list = output_time_list[count]
+        in_file = open(file_name, "r")
+        for line in in_file:
+            line = line.split(separator)
+            x = line[0]
+            y = line[1]
+            if site_input:
+                site = line[2]
+
+            # We ignore the site name
+            values = line[3:]
+            for i in range(len(values)):
+                start, end = map_list[i].get_temporal_extent_as_tuple()
+                if site_input:
+                    coor_string = "%(x)10.10f%(sep)s%(y)10.10f%(sep)s%(site_name)s%(sep)s"\
+                               %({"x":float(x),"y":float(y),"site_name":str(site),"sep":separator})
+                else:
+                    coor_string = "%(x)10.10f%(sep)s%(y)10.10f%(sep)s"\
+                               %({"x":float(x),"y":float(y),"sep":separator})
+                time_string = "%(start)s%(sep)s%(end)s%(sep)s%(val)s\n"\
+                               %({"start":str(start), "end":str(end),
+                                  "val":(values[i].strip()),"sep":separator})
+
+                out_file.write(coor_string + time_string)
+        
+        in_file.close()
+    
+    if out_file is not sys.stdout:
+        out_file.close()
+        
+############################################################################
+
+def one_point_per_col_output(separator, output_files, output_time_list,
+                             output, write_header, site_input):
+    """Write one point per col
+       output is of type: 
+       start,end,point_1 value,point_2 value,...,point_n value
+       
+       Each row represents a single raster map, hence a single time stamp
+    """
+    # open the output file for writing
+    out_file = open(output, 'w') if output != "-" else sys.stdout
+        
+    first = True
+    for count in range(len(output_files)):
+        file_name = output_files[count]
+        gscript.verbose(_("Transforming r.what output file %s"%(file_name)))
+        map_list = output_time_list[count]
+        in_file = open(file_name, "r")
+        lines = in_file.readlines()
+        
+        matrix = []
+        for line in lines:
+            matrix.append(line.split(separator))
+            
+        num_cols = len(matrix[0])
+        
+        if first is True:
+            if write_header is True:
+                out_file.write("start%(sep)send"%({"sep":separator}))
+                if site_input:
+                    for row in matrix:
+                        x = row[0]
+                        y = row[1]
+                        site = row[2]
+                        out_file.write("%(sep)s%(x)10.10f;%(y)10.10f;%(site_name)s"\
+                                   %({"sep":separator,
+                                      "x":float(x), 
+                                      "y":float(y),
+                                      "site_name":str(site)}))
+                else:
+                    for row in matrix:
+                        x = row[0]
+                        y = row[1]
+                        out_file.write("%(sep)s%(x)10.10f;%(y)10.10f"\
+                                   %({"sep":separator,
+                                      "x":float(x), 
+                                      "y":float(y)}))
+
+                out_file.write("\n")
+
+        first = False
+
+        for col in range(num_cols - 3):
+            start, end = output_time_list[count][col].get_temporal_extent_as_tuple()
+            time_string = "%(start)s%(sep)s%(end)s"\
+                               %({"start":str(start), "end":str(end),
+                                  "sep":separator})
+            out_file.write(time_string)
+            for row in range(len(matrix)):
+                value = matrix[row][col + 3]
+                out_file.write("%(sep)s%(value)s"\
+                                   %({"sep":separator,
+                                      "value":value.strip()}))
+            out_file.write("\n")
+
+        in_file.close()
+    if out_file is not sys.stdout:
+        out_file.close()
+
+############################################################################
+
+def one_point_per_timerow_output(separator, output_files, output_time_list,
+                             output, write_header, site_input):
+    """Use the original layout of the r.waht output and print instead of 
+       the raster names, the time stamps as header
+       
+       One point per line for all time stamps:
+        x|y|1991-01-01 00:00:00;1991-01-02 00:00:00|1991-01-02 00:00:00;1991-01-03 00:00:00|1991-01-03 00:00:00;1991-01-04 00:00:00|1991-01-04 00:00:00;1991-01-05 00:00:00
+        3730731.49590371|5642483.51236521|6|8|7|7
+        3581249.04638104|5634411.97526282|5|8|7|7
+    """
+    out_file = open(output, 'w') if output != "-" else sys.stdout
+
+    matrix = []
+    header = ""
+
+    first = True
+    for count in range(len(output_files)):
+        file_name = output_files[count]
+        gscript.verbose("Transforming r.what output file %s"%(file_name))
+        map_list = output_time_list[count]
+        in_file = open(file_name, "r")
+
+        if write_header:
+            if first is True:
+                if site_input:
+                    header = "x%(sep)sy%(sep)ssite"%({"sep":separator})
+                else:
+                    header = "x%(sep)sy"%({"sep":separator})
+            for map in map_list:
+                start, end = map.get_temporal_extent_as_tuple()
+                time_string = "%(sep)s%(start)s;%(end)s"\
+                              %({"start":str(start), "end":str(end),
+                                 "sep":separator})
+                header += time_string
+
+        lines = in_file.readlines()
+
+        for i in range(len(lines)):
+            cols = lines[i].split(separator)
+
+            if first is True:
+                if site_input:
+                    matrix.append(cols[:3])
+                else:
+                    matrix.append(cols[:2])
+
+            matrix[i] = matrix[i] + cols[3:]
+
+        first = False
+
+        in_file.close()
+
+    out_file.write(header + "\n")
+
+    gscript.verbose(_("Writing the output file <%s>"%(output)))
+    for row in matrix:
+        first = True
+        for col in row:
+            value = col.strip()
+            
+            if first is False:
+                out_file.write("%s"%(separator))
+            out_file.write(value)
+            
+            first = False
+
+        out_file.write("\n")
+    if out_file is not sys.stdout:
+        out_file.close()
+ 
+############################################################################
+
+def process_loop(nprocs, maps, file_name, count, maps_per_process, 
+                 remaining_maps_per_loop, output_files, 
+                 output_time_list, r_what, process_queue):
+    """Call r.what in parallel subprocesses"""
+    first = True
+    for process in range(nprocs):
+        num = maps_per_process
+        # Add the remaining maps to the first process
+        if first is True:
+            num += remaining_maps_per_loop
+        first = False
+
+        # Temporary output file
+        final_file_name = file_name + "_%i"%(process)
+        output_files.append(final_file_name)
+        
+        map_names = []
+        map_list = []
+        for i in range(num):
+            map = maps[count]
+            map_names.append(map.get_id())
+            map_list.append(map)
+            count += 1
+
+        output_time_list.append(map_list)
+
+        gscript.verbose(_("Process maps %(samp_start)i to %(samp_end)i (of %(total)i)"\
+                                  %({"samp_start":count-len(map_names)+1, 
+                                  "samp_end":count, "total":len(maps)})))
+        mod = copy.deepcopy(r_what)
+        mod(map=map_names, output=final_file_name)
+        #print(mod.get_bash())
+        process_queue.put(mod)
+
+    return count
+    
+############################################################################
+
+if __name__ == "__main__":
+    options, flags = gscript.parser()
+    main(options, flags)
diff --git a/temporal/t.rast.what/testsuite/test_what.py b/temporal/t.rast.what/testsuite/test_what.py
new file mode 100644
index 0000000..a05f170
--- /dev/null
+++ b/temporal/t.rast.what/testsuite/test_what.py
@@ -0,0 +1,173 @@
+"""Test t.rast.what
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+ at author Soeren Gebbert
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestRasterWhat(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  t=50,  res=10,  res3=10)
+
+        cls.runModule("r.mapcalc", expression="a_1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a_4 = 400",  overwrite=True)
+        
+        cls.runModule("v.random", output="points", npoints=3, seed=1, overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
+                                 output="A",  title="A test",  description="A test",  
+                                 overwrite=True)
+        cls.runModule("t.register",  flags="i",  type="raster",  input="A",  
+                                     maps="a_1,a_2,a_3,a_4",  start="2001-01-01", 
+                                     increment="3 months",  overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.runModule("t.remove",  flags="rf",  type="strds",  
+                                   inputs="A")
+        cls.del_temp_region()
+
+    def test_row_output(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_row.txt", 
+                          points="points", flags="n",
+                          layout="row",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_row.txt", "55209718566d70e1427bd1fecf844d53", text=True)
+
+
+    def test_row_output_coords(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_row_coords.txt", 
+                          coordinates=(30,30, 45, 45), flags="n",
+                          layout="row",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_row_coords.txt", "cd917ac4848786f1b944512eed1da5bc", text=True)
+
+
+    def test_row_output_coords_stdin(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_row_coords.txt", 
+                          flags="ni",
+                          layout="row", stdin_="30 30\n45 45",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_row_coords.txt", "cd917ac4848786f1b944512eed1da5bc", text=True)
+
+    def test_col_output(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_col.txt", 
+                          points="points", flags="n",
+                          layout="col",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_col.txt", "8720cc237b46ddb18f11440469d0e13f", text=True)
+
+    def test_col_output_coords(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_col_coords.txt", 
+                          coordinates=(30,30, 45, 45), flags="n",
+                          layout="col",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_col_coords.txt", "ac44ebc5aa040d4ce2a5787e95f208ec", text=True)
+
+    def test_timerow_output(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_timerow.txt", 
+                          points="points", flags="n",
+                          layout="timerow",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_timerow.txt", "129fe0b63019e505232efa20ad42c03a", text=True)
+
+    def test_timerow_output_coords(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_timerow_coords.txt", 
+                          coordinates=(30,30, 45, 45), flags="n",
+                          layout="timerow",
+                          nprocs=1,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_timerow_coords.txt", "ca4ee0e7e4aaca170d6034e0d57d292d", text=True)
+
+    def test_row_stdout_where_parallel(self):
+        
+        t_rast_what = SimpleModule("t.rast.what",  strds="A",  output="-", 
+                                                      points="points", flags="n",
+                                                      where="start_time > '2001-03-01'",  
+                                                      nprocs=4,  overwrite=True,  verbose=True)
+        self.assertModule(t_rast_what)
+
+        text="""x|y|start|end|value
+115.0043586274|36.3593955783|2001-04-01 00:00:00|2001-07-01 00:00:00|200
+79.6816763826|45.2391522853|2001-04-01 00:00:00|2001-07-01 00:00:00|200
+97.4892579600|79.2347263950|2001-04-01 00:00:00|2001-07-01 00:00:00|200
+115.0043586274|36.3593955783|2001-07-01 00:00:00|2001-10-01 00:00:00|300
+79.6816763826|45.2391522853|2001-07-01 00:00:00|2001-10-01 00:00:00|300
+97.4892579600|79.2347263950|2001-07-01 00:00:00|2001-10-01 00:00:00|300
+115.0043586274|36.3593955783|2001-10-01 00:00:00|2002-01-01 00:00:00|400
+79.6816763826|45.2391522853|2001-10-01 00:00:00|2002-01-01 00:00:00|400
+97.4892579600|79.2347263950|2001-10-01 00:00:00|2002-01-01 00:00:00|400
+"""
+        self.assertLooksLike(text,  t_rast_what.outputs.stdout)
+
+    def test_row_stdout_where_parallel2(self):
+        """Here without output definition, the default is used then"""
+        
+        t_rast_what = SimpleModule("t.rast.what",  strds="A",  
+                                                      points="points", flags="n",
+                                                      where="start_time > '2001-03-01'",  
+                                                      nprocs=4,  overwrite=True,  verbose=True)
+        self.assertModule(t_rast_what)
+
+        text="""x|y|start|end|value
+115.0043586274|36.3593955783|2001-04-01 00:00:00|2001-07-01 00:00:00|200
+79.6816763826|45.2391522853|2001-04-01 00:00:00|2001-07-01 00:00:00|200
+97.4892579600|79.2347263950|2001-04-01 00:00:00|2001-07-01 00:00:00|200
+115.0043586274|36.3593955783|2001-07-01 00:00:00|2001-10-01 00:00:00|300
+79.6816763826|45.2391522853|2001-07-01 00:00:00|2001-10-01 00:00:00|300
+97.4892579600|79.2347263950|2001-07-01 00:00:00|2001-10-01 00:00:00|300
+115.0043586274|36.3593955783|2001-10-01 00:00:00|2002-01-01 00:00:00|400
+79.6816763826|45.2391522853|2001-10-01 00:00:00|2002-01-01 00:00:00|400
+97.4892579600|79.2347263950|2001-10-01 00:00:00|2002-01-01 00:00:00|400
+"""
+        self.assertLooksLike(text,  t_rast_what.outputs.stdout)
+
+    def test_row_output_where_parallel(self):
+        self.assertModule("t.rast.what",  strds="A",  output="out_where.txt", 
+                          points="points", flags="n",
+                          where="start_time > '2001-03-01'",  
+                          nprocs=4,  overwrite=True,  verbose=True)
+
+        self.assertFileMd5("out_where.txt", "af731bec01fedc262f4ac162fe420707", text=True)
+
+    def test_empty_strds(self):
+        self.assertModuleFail("t.rast.what",  strds="A",  output="out_error.txt", 
+                          points="points", flags="n",
+                          where="start_time > '2002-03-01'",  
+                          nprocs=4,  overwrite=True,  verbose=True)
+
+
+class TestRasterWhatFails(TestCase):
+
+    def test_error_handling(self):
+        # No vector map, no strds, no coordinates
+        self.assertModuleFail("t.rast.what",  output="out.txt")
+        # No vector map, no coordinates
+        self.assertModuleFail("t.rast.what",  strds="A",  output="out.txt")
+        # Points and coordinates are mutually exclusive
+        self.assertModuleFail("t.rast.what",  points="points", coordinates=(30, 30, 45, 45),  output="out.txt",  strds="A")
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.rast3d.algebra/t.rast3d.algebra.html b/temporal/t.rast3d.algebra/t.rast3d.algebra.html
index 210699f..7bd95b2 100644
--- a/temporal/t.rast3d.algebra/t.rast3d.algebra.html
+++ b/temporal/t.rast3d.algebra/t.rast3d.algebra.html
@@ -33,5 +33,5 @@ indexing.
 
 Thomas Leppelt, Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-11-26 14:30:48 +0100 (Wed, 26 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-26 14:25:33 +0100 (Wed, 26 Nov 2014) $</i>
 
diff --git a/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py b/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py
index 7eb38a6..b29c12c 100644
--- a/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py
+++ b/temporal/t.rast3d.algebra/testsuite/test_raster3d_algebra.py
@@ -10,11 +10,13 @@ for details.
 
 import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 import datetime
 import os
 
-class TestTRast3dAlgebra(gunittest.TestCase):
+
+class TestTRast3dAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -93,7 +95,7 @@ class TestTRast3dAlgebra(gunittest.TestCase):
         self.assertEqual(end, datetime.datetime(2001, 1, 4))
 
 
-class TestTRast3dAlgebraFails(gunittest.TestCase):
+class TestTRast3dAlgebraFails(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -121,7 +123,4 @@ class TestTRast3dAlgebraFails(gunittest.TestCase):
 
 
 if __name__ == '__main__':
-    grass.gunittest.test()
-
-
-
+    test()
diff --git a/temporal/t.rast3d.extract/t.rast3d.extract.html b/temporal/t.rast3d.extract/t.rast3d.extract.html
index adaaf2f..8a79b36 100644
--- a/temporal/t.rast3d.extract/t.rast3d.extract.html
+++ b/temporal/t.rast3d.extract/t.rast3d.extract.html
@@ -21,5 +21,5 @@ documentation and examples.
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-11-26 14:30:48 +0100 (Wed, 26 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-26 14:25:33 +0100 (Wed, 26 Nov 2014) $</i>
 
diff --git a/temporal/t.rast3d.extract/t.rast3d.extract.py b/temporal/t.rast3d.extract/t.rast3d.extract.py
index baaadc7..51372e2 100755
--- a/temporal/t.rast3d.extract/t.rast3d.extract.py
+++ b/temporal/t.rast3d.extract/t.rast3d.extract.py
@@ -49,6 +49,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: nprocs
 #% type: integer
 #% description: Number of r3.mapcalc processes to run in parallel
@@ -78,12 +87,13 @@ def main():
     base = options["basename"]
     nprocs = int(options["nprocs"])
     register_null = flags["n"]
+    time_suffix = options["suffix"]
 
     # Make sure the temporal database exists
     tgis.init()
 
     tgis.extract_dataset(input, output, "raster3d", where, expression,
-                         base, nprocs, register_null)
+                         base, time_suffix, nprocs, register_null)
 
 if __name__ == "__main__":
     options, flags = grass.parser()
diff --git a/temporal/t.rast3d.extract/testsuite/test_extract.py b/temporal/t.rast3d.extract/testsuite/test_extract.py
index fe2c89c..0387e8d 100644
--- a/temporal/t.rast3d.extract/testsuite/test_extract.py
+++ b/temporal/t.rast3d.extract/testsuite/test_extract.py
@@ -116,6 +116,23 @@ class TestRaster3dExtraction(TestCase):
         info = SimpleModule("t.info", flags="g", type="str3ds", input="B")
         self.assertModuleKeyValue(module=info, reference=tinfo_string, precision=2, sep="=")
 
+    def test_time_suffix_with_expression(self):
+        """Perform extract with time suffix support and test if maps exists"""
+        self.assertModule("t.rast3d.extract",  flags="n",  input="A", nprocs=2,
+                          output="B", basename="b", overwrite=True,
+                          suffix="time", expression="if(A > 400, A, null())")
+        self.assertRaster3dExists('b_2001_01_01T00_00_00')
+        self.assertRaster3dDoesNotExist('b_2001_01')
+
+    def test_num_suffix_with_expression(self):
+        """Perform extract with time suffix support and test if maps exists"""
+        self.assertModule("t.rast3d.extract",  flags="n",  input="A", nprocs=2,
+                          output="B", basename="b", overwrite=True,
+                          suffix='num%03', expression="if(A > 400, A, null())")
+        self.assertRaster3dExists('b_001')
+        self.assertRaster3dDoesNotExist('b_00001')
+
+
 class TestRaster3dExtractionFails(TestCase):
 
     @classmethod
diff --git a/temporal/t.rast3d.list/t.rast3d.list.html b/temporal/t.rast3d.list/t.rast3d.list.html
index 502d8da..628d6bf 100644
--- a/temporal/t.rast3d.list/t.rast3d.list.html
+++ b/temporal/t.rast3d.list/t.rast3d.list.html
@@ -20,5 +20,5 @@
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-11-26 14:30:48 +0100 (Wed, 26 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-26 14:25:33 +0100 (Wed, 26 Nov 2014) $</i>
 
diff --git a/temporal/t.rast3d.list/testsuite/test.t.rast3d.list.sh b/temporal/t.rast3d.list/testsuite/test.t.rast3d.list.sh
index 099df54..a315a9b 100755
--- a/temporal/t.rast3d.list/testsuite/test.t.rast3d.list.sh
+++ b/temporal/t.rast3d.list/testsuite/test.t.rast3d.list.sh
@@ -81,24 +81,24 @@ t.rast3d.list separator=" | " method=cols      input=volume_abs1
 t.rast3d.list separator=" | " method=delta     input=volume_abs1
 t.rast3d.list separator=" | " method=deltagaps input=volume_abs1
 
-t.register -i type=raster_3d input=volume_abs2 file="${n2}"
+t.register type=raster_3d input=volume_abs2 file="${n2}"
 t.rast3d.list    separator=" | " method=comma     input=volume_abs2
 t.rast3d.list input=volume_abs2
 t.rast3d.list separator=" | " method=cols      input=volume_abs2
 t.rast3d.list separator=" | " method=delta     input=volume_abs2
 t.rast3d.list separator=" | " method=deltagaps input=volume_abs2
 
-t.register -i type=raster_3d input=volume_abs3 file="${n3}"
+t.register type=raster_3d input=volume_abs3 file="${n3}"
 t.rast3d.list    separator=" | " method=comma     input=volume_abs3
 t.rast3d.list separator=" | " method=delta     input=volume_abs3
 t.rast3d.list separator=" | " method=deltagaps input=volume_abs3
 
-t.register -i type=raster_3d input=volume_abs4 file="${n4}"
+t.register type=raster_3d input=volume_abs4 file="${n4}"
 t.rast3d.list    separator=" | " method=comma     input=volume_abs4
 t.rast3d.list separator=" | " method=delta     input=volume_abs4
 t.rast3d.list separator=" | " method=deltagaps input=volume_abs4
 
-t.register -i type=raster_3d input=volume_abs5 file="${n5}"
+t.register type=raster_3d input=volume_abs5 file="${n5}"
 t.rast3d.list    separator=" | " method=comma     input=volume_abs5
 t.rast3d.list input=volume_abs5
 t.rast3d.list separator=" | " method=cols      input=volume_abs5
diff --git a/temporal/t.rast3d.mapcalc/t.rast3d.mapcalc.html b/temporal/t.rast3d.mapcalc/t.rast3d.mapcalc.html
index 5d55a78..fe45384 100644
--- a/temporal/t.rast3d.mapcalc/t.rast3d.mapcalc.html
+++ b/temporal/t.rast3d.mapcalc/t.rast3d.mapcalc.html
@@ -20,4 +20,4 @@ enhanced with temporal functions.
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-11-26 14:30:48 +0100 (Wed, 26 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-26 14:25:33 +0100 (Wed, 26 Nov 2014) $</i>
diff --git a/temporal/t.rast3d.univar/t.rast3d.univar.html b/temporal/t.rast3d.univar/t.rast3d.univar.html
index e3a92f9..3a08ca4 100644
--- a/temporal/t.rast3d.univar/t.rast3d.univar.html
+++ b/temporal/t.rast3d.univar/t.rast3d.univar.html
@@ -17,5 +17,5 @@
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-11-26 14:30:48 +0100 (Wed, 26 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-11-26 14:25:33 +0100 (Wed, 26 Nov 2014) $</i>
 
diff --git a/temporal/t.rast3d.univar/testsuite/test_univar.py b/temporal/t.rast3d.univar/testsuite/test_univar.py
index 42747b6..877ef9b 100644
--- a/temporal/t.rast3d.univar/testsuite/test_univar.py
+++ b/temporal/t.rast3d.univar/testsuite/test_univar.py
@@ -11,6 +11,7 @@ for details.
 from grass.gunittest.case import TestCase
 from grass.gunittest.gmodules import SimpleModule
 
+
 class TestRasterUnivar(TestCase):
 
     @classmethod
@@ -53,7 +54,11 @@ a_2 at testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|960000
 a_3 at testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|144000000|0|480000
 a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000000|0|480000
 """
-        self.assertLooksLike(univar_text,  t_rast3d_univar.outputs.stdout)
+        for ref, res in zip(univar_text.split("\n"), t_rast3d_univar.outputs.stdout.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_2(self):
 
@@ -67,7 +72,11 @@ a_2 at testing|2001-04-01 00:00:00|2001-07-01 00:00:00|200|200|200|200|0|0|0|960000
 a_3 at testing|2001-07-01 00:00:00|2001-10-01 00:00:00|300|300|300|300|0|0|0|144000000|0|480000
 a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000000|0|480000
 """
-        self.assertLooksLike(univar_text,  t_rast3d_univar.outputs.stdout)
+        for ref, res in zip(univar_text.split("\n"), t_rast3d_univar.outputs.stdout.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_3(self):
 
@@ -83,7 +92,11 @@ a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000
 """
         univar_output = open("univar_output.txt", "r").read()
 
-        self.assertLooksLike(univar_text, univar_output)
+        for ref, res in zip(univar_text.split("\n"), univar_output.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_4(self):
 
@@ -98,7 +111,11 @@ a_4 at testing|2001-10-01 00:00:00|2002-01-01 00:00:00|400|400|400|400|0|0|0|192000
 """
         univar_output = open("univar_output.txt", "r").read()
 
-        self.assertLooksLike(univar_text, univar_output)
+        for ref, res in zip(univar_text.split("\n"), univar_output.split("\n")):
+            if ref and res:
+                ref_line = ref.split("|", 1)[1]
+                res_line = res.split("|", 1)[1]
+                self.assertLooksLike(ref_line,  res_line)
 
     def test_5_error_handling_empty_strds(self):
         # Empty str3ds
diff --git a/temporal/t.register/t.register.html b/temporal/t.register/t.register.html
index 19cbf68..082e672 100644
--- a/temporal/t.register/t.register.html
+++ b/temporal/t.register/t.register.html
@@ -242,5 +242,5 @@ t.register -i type=raster input=temperature_mean_1950_2015_daily \
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-05-25 18:51:19 +0200 (Wed, 25 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-25 18:50:20 +0200 (Wed, 25 May 2016) $</i>
 
diff --git a/temporal/t.register/t.register.py b/temporal/t.register/t.register.py
index deaf92f..0397629 100755
--- a/temporal/t.register/t.register.py
+++ b/temporal/t.register/t.register.py
@@ -132,6 +132,12 @@ if __name__ == "__main__":
     options, flags = grass.parser()
 
     try:
+        from builtins import StandardError
+    except ImportError:
+        # python 3
+        StandardError = Exception
+
+    try:
         tgis.profile_function(main)
     except StandardError as e:
         grass.fatal(e)
diff --git a/temporal/t.remove/t.remove.html b/temporal/t.remove/t.remove.html
index 63fafbe..47364cb 100644
--- a/temporal/t.remove/t.remove.html
+++ b/temporal/t.remove/t.remove.html
@@ -57,5 +57,5 @@ t.remove type=strds input=precip_months_sum
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-27 13:11:04 +0200 (Sun, 27 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-27 13:10:53 +0200 (Sun, 27 Sep 2015) $</i>
 
diff --git a/temporal/t.rename/t.rename.html b/temporal/t.rename/t.rename.html
index 229f364..74e0d65 100644
--- a/temporal/t.rename/t.rename.html
+++ b/temporal/t.rename/t.rename.html
@@ -34,5 +34,5 @@ t.remove input=newname type=stvds
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-12 11:38:58 +0200 (Sat, 12 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-12 11:38:35 +0200 (Sat, 12 Sep 2015) $</i>
 
diff --git a/temporal/t.sample/t.sample.html b/temporal/t.sample/t.sample.html
index 4d66fe6..6227d96 100644
--- a/temporal/t.sample/t.sample.html
+++ b/temporal/t.sample/t.sample.html
@@ -175,5 +175,5 @@ pnts2 at PERMANENT|a4 at PERMANENT|2001-05-01 00:00:00|2001-07-01 00:00:00|61.0|120.0
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-06-27 00:25:46 +0200 (Mon, 27 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-27 00:25:18 +0200 (Mon, 27 Jun 2016) $</i>
 
diff --git a/temporal/t.select/t.select.html b/temporal/t.select/t.select.html
index 3ee866f..8b620af 100644
--- a/temporal/t.select/t.select.html
+++ b/temporal/t.select/t.select.html
@@ -372,5 +372,5 @@ D = if(contains, td(buff_t(A, "1 days")) == 3, B, C)
 
 Thomas Leppelt, Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
 
diff --git a/temporal/t.select/t.select.py b/temporal/t.select/t.select.py
index 2be188b..b14de95 100644
--- a/temporal/t.select/t.select.py
+++ b/temporal/t.select/t.select.py
@@ -40,6 +40,11 @@
 #% description: Activate spatial topology
 #%end
 
+#%flag
+#% key: d
+#% description: Perform a dry run, compute all depenencies and module calls but don't run them
+#%end
+
 
 import grass.script as grass
 import grass.temporal as tgis
@@ -51,6 +56,7 @@ def main():
 
     expression = options['expression']
     spatial = flags["s"]
+    dry_run = flags["d"]
     stdstype = options["type"]
 
     # Check for PLY istallation
@@ -61,8 +67,13 @@ def main():
         grass.fatal(_("Please install PLY (Lex and Yacc Python implementation) to use the temporal algebra modules."))
 
     tgis.init(True)
-    p = tgis.TemporalAlgebraParser(run=True, debug=False, spatial = spatial)
-    p.parse(expression, stdstype,  overwrite=grass.overwrite)
+    p = tgis.TemporalAlgebraParser(run=True, debug=False, spatial=spatial, dry_run=dry_run)
+    pc = p.parse(expression, stdstype,  overwrite=grass.overwrite)
+
+    if dry_run is True:
+        import pprint
+        pprint.pprint(pc)
+
 
 if __name__ == "__main__":
     options, flags = grass.parser()
diff --git a/temporal/t.shift/t.shift.html b/temporal/t.shift/t.shift.html
index 62dfa35..a6a1b47 100644
--- a/temporal/t.shift/t.shift.html
+++ b/temporal/t.shift/t.shift.html
@@ -196,5 +196,5 @@ prec_6|PERMANENT|2012-01-06 12:00:00|2012-01-07 12:00:00
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.shift/t.shift.py b/temporal/t.shift/t.shift.py
index 6345250..5a81a4d 100755
--- a/temporal/t.shift/t.shift.py
+++ b/temporal/t.shift/t.shift.py
@@ -17,6 +17,7 @@
 #%module
 #% description: Shifts temporally the maps of a space time dataset.
 #% keyword: temporal
+#% keyword: time management
 #% keyword: shift
 #% keyword: time
 #%end
diff --git a/temporal/t.shift/test.t.shift.absolue.sh b/temporal/t.shift/test.t.shift.absolue.sh
deleted file mode 100755
index 7f8fe43..0000000
--- a/temporal/t.shift/test.t.shift.absolue.sh
+++ /dev/null
@@ -1,46 +0,0 @@
-#!/bin/sh
-# Space time raster dataset temporal shifting
-# We need to set a specific region in the
-# @preprocess step of this test. 
-# The region setting should work for UTM and LL test locations
-g.region s=0 n=80 w=0 e=120 b=0 t=50 res=10 res3=10 -p3
-
-# Generate data
-r.mapcalc --o expr="prec_1 = rand(0, 550)" -s
-r.mapcalc --o expr="prec_2 = rand(0, 450)" -s
-r.mapcalc --o expr="prec_3 = rand(0, 320)" -s
-r.mapcalc --o expr="prec_4 = rand(0, 510)" -s
-r.mapcalc --o expr="prec_5 = rand(0, 300)" -s
-r.mapcalc --o expr="prec_6 = rand(0, 650)" -s
-
-t.create --o type=strds temporaltype=absolute output=precip_abs title="A test" descr="A test"
-t.register -i --o type=raster input=precip_abs maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 \
-    start="2001-01-01 12:00:00" increment="14 days"
-
-t.rast.list input=precip_abs
-
-# The first @test
-t.shift --o input=precip_abs granularity="3 years"
-t.info type=strds input=precip_abs
-t.rast.list input=precip_abs
-t.shift --o input=precip_abs granularity="12 months"
-t.info type=strds input=precip_abs
-t.rast.list input=precip_abs
-t.shift --o input=precip_abs granularity="2 days"
-t.info type=strds input=precip_abs
-t.rast.list input=precip_abs
-t.shift --o input=precip_abs granularity="3 hours"
-t.info type=strds input=precip_abs
-t.rast.list input=precip_abs
-t.shift --o input=precip_abs granularity="30 minutes"
-t.info type=strds input=precip_abs
-t.rast.list input=precip_abs
-t.shift --o input=precip_abs granularity="5 seconds"
-t.info type=strds input=precip_abs
-t.rast.list input=precip_abs
-# This should give an error because of the monthly increment 
-# that will result in wrong number of days in the next month
-t.shift --o input=precip_abs granularity="1 month"
-
-t.unregister type=raster maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6
-t.remove type=strds input=precip_abs
diff --git a/temporal/t.shift/test.t.shift.relative.sh b/temporal/t.shift/test.t.shift.relative.sh
deleted file mode 100755
index 6a13686..0000000
--- a/temporal/t.shift/test.t.shift.relative.sh
+++ /dev/null
@@ -1,32 +0,0 @@
-#!/bin/sh
-# Space time raster dataset temporal shifting with relative time
-# We need to set a specific region in the
-# @preprocess step of this test. 
-# The region setting should work for UTM and LL test locations
-g.region s=0 n=80 w=0 e=120 b=0 t=50 res=10 res3=10 -p3
-
-# Generate data
-r.mapcalc --o expr="prec_1 = rand(0, 550)" -s
-r.mapcalc --o expr="prec_2 = rand(0, 450)" -s
-r.mapcalc --o expr="prec_3 = rand(0, 320)" -s
-r.mapcalc --o expr="prec_4 = rand(0, 510)" -s
-r.mapcalc --o expr="prec_5 = rand(0, 300)" -s
-r.mapcalc --o expr="prec_6 = rand(0, 650)" -s
-
-t.create --o type=strds temporaltype=relative output=precip_rel title="A test" descr="A test"
-t.register -i --o type=raster unit=days input=precip_rel maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6 \
-    start=0 increment=1
-
-t.info type=strds input=precip_rel
-t.rast.list input=precip_rel
-
-# The first @test
-t.shift --o input=precip_rel granularity=3
-t.info type=strds input=precip_rel
-t.rast.list input=precip_rel
-t.shift --o input=precip_rel granularity=10000
-t.info type=strds input=precip_rel
-t.rast.list input=precip_rel
-
-t.unregister type=raster maps=prec_1,prec_2,prec_3,prec_4,prec_5,prec_6
-t.remove type=strds input=precip_rel
diff --git a/temporal/t.shift/testsuite/test_shift.py b/temporal/t.shift/testsuite/test_shift.py
new file mode 100644
index 0000000..807d1fa
--- /dev/null
+++ b/temporal/t.shift/testsuite/test_shift.py
@@ -0,0 +1,526 @@
+"""Test t.shift
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+import os
+import grass.pygrass.modules as pymod
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+
+class TestShiftAbsoluteSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-01", 
+                                     increment="14 days",  
+                                     overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        
+    def test_1(self):
+        
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+        
+        self.assertModule("t.shift", input="A", 
+                          granularity="1 day", 
+                          type="strds")
+        
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 2)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-1 day",
+                          type="strds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-1 year",
+                          type="strds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="6 month",
+                          type="strds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 7)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1 hour",
+                          type="strds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 7)
+        self.assertEqual(start.day, 1)
+        self.assertEqual(start.hour, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-3630 seconds",
+                          type="strds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 6)
+        self.assertEqual(start.day, 30)
+        self.assertEqual(start.hour, 23)
+        self.assertEqual(start.minute, 59)
+        self.assertEqual(start.second, 30)
+
+class TestShiftRelativeSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+
+    def test_1(self):
+
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point")
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start, 0)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1",
+                          type="strds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start, 1)
+
+
+class TestShiftAbsoluteSTR3DS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r3.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="str3ds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster_3d",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-01", 
+                                     increment="14 days",  
+                                     overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
+
+    def test_1(self):
+
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point")
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1 day",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 2)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-1 day",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-1 year",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="6 month",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 7)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1 hour",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 7)
+        self.assertEqual(start.day, 1)
+        self.assertEqual(start.hour, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-3630 seconds",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 6)
+        self.assertEqual(start.day, 30)
+        self.assertEqual(start.hour, 23)
+        self.assertEqual(start.minute, 59)
+        self.assertEqual(start.second, 30)
+
+
+class TestShiftRelativeSTR3DS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r3.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="str3ds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster_3d",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
+
+    def test_1(self):
+
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point")
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start, 0)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1",
+                          type="str3ds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start, 1)
+
+
+class TestShiftAbsoluteSTVDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a1')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a2')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a3')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a4')
+
+        cls.runModule("t.create",  type="stvds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="vector",  input="A",  
+                                     maps="a1,a2,a3,a4", flags="i",
+                                     start="2001-01-01", 
+                                     increment="14 days",  
+                                     overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
+
+    def test_1(self):
+
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval")
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1 day",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 2)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-1 day",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2001)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-1 year",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 1)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="6 month",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 7)
+        self.assertEqual(start.day, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1 hour",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 7)
+        self.assertEqual(start.day, 1)
+        self.assertEqual(start.hour, 1)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="-3630 seconds",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start.year, 2000)
+        self.assertEqual(start.month, 6)
+        self.assertEqual(start.day, 30)
+        self.assertEqual(start.hour, 23)
+        self.assertEqual(start.minute, 59)
+        self.assertEqual(start.second, 30)
+
+
+class TestShiftRelativeSTVDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a1')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a2')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a3')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a4')
+
+        cls.runModule("t.create",  type="stvds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="vector",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", flags="i",
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
+
+    def test_1(self):
+
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval")
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start, 0)
+
+        self.assertModule("t.shift", input="A",
+                          granularity="1",
+                          type="stvds")
+
+        A.select()
+        start, end = A.get_temporal_extent_as_tuple()
+        self.assertEqual(start, 1)
+
+
+class TestShiftAbsoluteError(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+       
+
+    def test_1(self):
+        pass
+        #self.assterModuleFail()
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
+
diff --git a/temporal/t.snap/t.snap.html b/temporal/t.snap/t.snap.html
index bb910cf..77475a0 100644
--- a/temporal/t.snap/t.snap.html
+++ b/temporal/t.snap/t.snap.html
@@ -197,5 +197,5 @@ t.rast.list input=precipitation_daily
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-08-24 18:27:10 +0200 (Mon, 24 Aug 2015) $</i>
+<p><i>Last changed: $Date: 2015-08-24 18:26:08 +0200 (Mon, 24 Aug 2015) $</i>
 
diff --git a/temporal/t.snap/t.snap.py b/temporal/t.snap/t.snap.py
index 634b60b..ec7883f 100755
--- a/temporal/t.snap/t.snap.py
+++ b/temporal/t.snap/t.snap.py
@@ -17,6 +17,7 @@
 #%module
 #% description: Snaps temporally the maps of a space time dataset.
 #% keyword: temporal
+#% keyword: time management
 #% keyword: snapping
 #% keyword: time
 #%end
diff --git a/temporal/t.snap/testsuite/test_snap.py b/temporal/t.snap/testsuite/test_snap.py
new file mode 100644
index 0000000..b7de92b
--- /dev/null
+++ b/temporal/t.snap/testsuite/test_snap.py
@@ -0,0 +1,291 @@
+"""Test t.snap
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+import os
+import grass.pygrass.modules as pymod
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+
+class TestSnapAbsoluteSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-01", 
+                                     increment="14 days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        
+        self.assertModule("t.snap", input="A", type="strds")
+        
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval") 
+
+
+class TestSnapRelativeSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        
+        self.assertModule("t.snap", input="A", type="strds")
+        
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval") 
+ 
+
+class TestSnapAbsoluteSTR3DS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r3.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="str3ds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster_3d",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-01", 
+                                     increment="14 days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        
+        self.assertModule("t.snap", input="A", type="str3ds")
+        
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval") 
+
+
+class TestSnapRelativeSTR3DS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r3.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="str3ds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="raster_3d",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        
+        self.assertModule("t.snap", input="A", type="str3ds")
+        
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval") 
+ 
+
+
+class TestSnapAbsoluteSTVDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a1')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a2')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a3')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a4')
+
+        cls.runModule("t.create",  type="stvds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="vector",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-01", 
+                                     increment="14 days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        
+        self.assertModule("t.snap", input="A", type="stvds")
+        
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval") 
+
+
+class TestSnapRelativeSTVDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a1')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a2')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a3')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a4')
+
+        cls.runModule("t.create",  type="stvds",  temporaltype="relative",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", type="vector",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="0", 
+                                     increment="14", unit="days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.get_map_time(), "point") 
+        
+        self.assertModule("t.snap", input="A", type="stvds")
+        
+        A.select()
+        self.assertEqual(A.get_map_time(), "interval") 
+ 
+ 
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
+
diff --git a/temporal/t.support/t.support.html b/temporal/t.support/t.support.html
index 7f62eae..e1c6d9e 100644
--- a/temporal/t.support/t.support.html
+++ b/temporal/t.support/t.support.html
@@ -41,5 +41,5 @@ t.support -m type=strds input=tempmean_monthly
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-02-13 16:16:22 +0100 (Fri, 13 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2015-02-13 16:14:07 +0100 (Fri, 13 Feb 2015) $</i>
 
diff --git a/temporal/t.support/t.support.py b/temporal/t.support/t.support.py
index 8219522..c699afd 100755
--- a/temporal/t.support/t.support.py
+++ b/temporal/t.support/t.support.py
@@ -55,6 +55,14 @@
 #% multiple: no
 #%end
 
+#%option
+#% key:  aggr_type
+#% type: string
+#% description: Aggregation type of the space time raster or 3D raster dataset
+#% required: no
+#% multiple: no
+#%end
+
 #%flag
 #% key: m
 #% label: Update the metadata information and spatial extent of registered maps from the GRASS spatial database
@@ -63,7 +71,7 @@
 
 #%flag
 #% key: u
-#% description: Update metadata information, temporal and spatial extent from registered maps
+#% description: Update metadata information, temporal and spatial extent from registered maps based on database entries.
 #%end
 
 
@@ -78,6 +86,7 @@ def main():
     name = options["input"]
     type = options["type"]
     title = options["title"]
+    aggr_type = options["aggr_type"]
     description = options["description"]
     semantic = options["semantictype"]
     update = flags["u"]
@@ -92,6 +101,12 @@ def main():
     stds = tgis.open_old_stds(name, type, dbif)
 
     update = False
+    if aggr_type and type == "stvds":
+        return()
+    
+    if aggr_type and type != "stvds":
+        stds.metadata.set_aggregation_type(aggregation_type=aggr_type)
+        update = True
     if title:
         stds.metadata.set_title(title=title)
         update = True
diff --git a/temporal/t.support/testsuite/test_support_str3ds.py b/temporal/t.support/testsuite/test_support_str3ds.py
new file mode 100644
index 0000000..8790bdc
--- /dev/null
+++ b/temporal/t.support/testsuite/test_support_str3ds.py
@@ -0,0 +1,105 @@
+"""Test t.support
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+import os
+import grass.pygrass.modules as pymod
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestSupportAbsoluteSTR3DS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r3.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r3.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="str3ds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", flags="i",  type="raster_3d",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-15 12:05:45", 
+                                     increment="14 days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="str3ds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        title="A new title"
+        descr="A new description"
+        aggr_type="average"
+        semantic="sum"
+        
+        self.assertModule("t.support", type="str3ds", input="A",
+                          title=title,
+                          description=descr,
+                          semantictype=semantic,
+                          aggr_type=aggr_type)
+
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.metadata.get_title(), title)  
+        self.assertEqual(A.metadata.get_description(), descr)  
+        self.assertEqual(A.metadata.get_aggregation_type(), aggr_type)   
+        self.assertEqual(A.base.get_semantic_type(), semantic)        
+        
+    def test_2_update(self):
+        """Set title, description and aggregation"""
+        
+        self.runModule("r3.mapcalc", expression="a1 = 10",  overwrite=True)
+        self.runModule("r3.mapcalc", expression="a2 = 20",  overwrite=True)
+        self.runModule("r3.mapcalc", expression="a3 = 30",  overwrite=True)
+        self.runModule("r3.mapcalc", expression="a4 = 40",  overwrite=True)
+        
+        self.assertModule("t.support", type="str3ds", input="A", flags="m")
+
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.metadata.get_min_min(), 10) 
+        self.assertEqual(A.metadata.get_min_max(), 40)  
+        self.assertEqual(A.metadata.get_max_min(), 10) 
+        self.assertEqual(A.metadata.get_max_max(), 40) 
+        self.assertEqual(A.metadata.get_number_of_maps(), 4)      
+
+    def test_3_update(self):
+        """Set title, description and aggregation"""
+        
+        self.runModule("g.remove", type="raster_3d", name="a4", flags="f")
+        
+        self.assertModule("t.support", type="str3ds", input="A", flags="m")
+
+        A = tgis.open_old_stds("A", type="str3ds")
+        A.select()
+        self.assertEqual(A.metadata.get_min_min(), 10) 
+        self.assertEqual(A.metadata.get_min_max(), 30)  
+        self.assertEqual(A.metadata.get_max_min(), 10) 
+        self.assertEqual(A.metadata.get_max_max(), 30)  
+        self.assertEqual(A.metadata.get_number_of_maps(), 3)      
+
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.support/testsuite/test_support_strds.py b/temporal/t.support/testsuite/test_support_strds.py
new file mode 100644
index 0000000..c2be37d
--- /dev/null
+++ b/temporal/t.support/testsuite/test_support_strds.py
@@ -0,0 +1,105 @@
+"""Test t.support
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+import os
+import grass.pygrass.modules as pymod
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestSupportAbsoluteSTRDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("r.mapcalc", expression="a1 = 100",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a2 = 200",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a3 = 300",  overwrite=True)
+        cls.runModule("r.mapcalc", expression="a4 = 400",  overwrite=True)
+
+        cls.runModule("t.create",  type="strds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", flags="i",  type="raster",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-15 12:05:45", 
+                                     increment="14 days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="strds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        title="A new title"
+        descr="A new description"
+        aggr_type="average"
+        semantic="sum"
+        
+        self.assertModule("t.support", input="A",
+                          title=title,
+                          description=descr,
+                          semantictype=semantic,
+                          aggr_type=aggr_type)
+
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.metadata.get_title(), title)  
+        self.assertEqual(A.metadata.get_description(), descr)  
+        self.assertEqual(A.metadata.get_aggregation_type(), aggr_type)   
+        self.assertEqual(A.base.get_semantic_type(), semantic)        
+        
+    def test_2_update(self):
+        """Set title, description and aggregation"""
+        
+        self.runModule("r.mapcalc", expression="a1 = 10",  overwrite=True)
+        self.runModule("r.mapcalc", expression="a2 = 20",  overwrite=True)
+        self.runModule("r.mapcalc", expression="a3 = 30",  overwrite=True)
+        self.runModule("r.mapcalc", expression="a4 = 40",  overwrite=True)
+        
+        self.assertModule("t.support", input="A", flags="m")
+
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.metadata.get_min_min(), 10) 
+        self.assertEqual(A.metadata.get_min_max(), 40)  
+        self.assertEqual(A.metadata.get_max_min(), 10) 
+        self.assertEqual(A.metadata.get_max_max(), 40) 
+        self.assertEqual(A.metadata.get_number_of_maps(), 4)      
+
+    def test_3_update(self):
+        """Set title, description and aggregation"""
+        
+        self.runModule("g.remove", type="raster", name="a4", flags="f")
+        
+        self.assertModule("t.support", input="A", flags="m")
+
+        A = tgis.open_old_stds("A", type="strds")
+        A.select()
+        self.assertEqual(A.metadata.get_min_min(), 10) 
+        self.assertEqual(A.metadata.get_min_max(), 30)  
+        self.assertEqual(A.metadata.get_max_min(), 10) 
+        self.assertEqual(A.metadata.get_max_max(), 30)  
+        self.assertEqual(A.metadata.get_number_of_maps(), 3)      
+
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.support/testsuite/test_support_stvds.py b/temporal/t.support/testsuite/test_support_stvds.py
new file mode 100644
index 0000000..2b20435
--- /dev/null
+++ b/temporal/t.support/testsuite/test_support_stvds.py
@@ -0,0 +1,96 @@
+"""Test t.support
+
+(C) 2015 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Soeren Gebbert
+"""
+import os
+import grass.pygrass.modules as pymod
+import grass.temporal as tgis
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestSupportAbsoluteSTVDS(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        os.putenv("GRASS_OVERWRITE",  "1")
+        tgis.init()
+        cls.use_temp_region()
+        cls.runModule("g.region",  s=0,  n=80,  w=0,  e=120,  b=0,  
+                      t=50,  res=10,  res3=10)
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a1')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a2')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a3')
+        cls.runModule("v.random", quiet=True, npoints=20, seed=1,  output='a4')
+
+        cls.runModule("t.create",  type="stvds",  temporaltype="absolute",  
+                                    output="A",  title="A test",  
+                                    description="A test",  overwrite=True)
+
+        cls.runModule("t.register", flags="i",  type="vector",  input="A",  
+                                     maps="a1,a2,a3,a4",
+                                     start="2001-01-15 12:05:45", 
+                                     increment="14 days",  
+                                     overwrite=True)
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()        
+        cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
+        
+    def test_1_metadata(self):
+        """Set title, description and aggregation"""
+        
+        title="A new title"
+        descr="A new description"
+        semantic="sum"
+        
+        self.assertModule("t.support", type="stvds", input="A",
+                          title=title,
+                          description=descr,
+                          semantictype=semantic)
+
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.metadata.get_title(), title)  
+        self.assertEqual(A.metadata.get_description(), descr)  
+        self.assertEqual(A.base.get_semantic_type(), semantic)        
+        
+    def test_2_update(self):
+        """Set title, description and aggregation"""
+        
+        self.runModule("v.random", quiet=True, npoints=10, seed=1,  output='a1')
+        self.runModule("v.random", quiet=True, npoints=10, seed=1,  output='a2')
+        self.runModule("v.random", quiet=True, npoints=10, seed=1,  output='a3')
+        self.runModule("v.random", quiet=True, npoints=10, seed=1,  output='a4')
+        
+        self.assertModule("t.support", type="stvds", input="A", flags="m")
+
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.metadata.get_number_of_points(), 40) 
+        self.assertEqual(A.metadata.get_number_of_maps(), 4)      
+
+    def test_3_update(self):
+        """Set title, description and aggregation"""
+        
+        self.runModule("g.remove", type="vector", name="a4", flags="f")
+        
+        self.assertModule("t.support", type="stvds", input="A", flags="m")
+
+        A = tgis.open_old_stds("A", type="stvds")
+        A.select()
+        self.assertEqual(A.metadata.get_number_of_points(), 30) 
+        self.assertEqual(A.metadata.get_number_of_maps(), 3)      
+
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.topology/t.topology.html b/temporal/t.topology/t.topology.html
index 09b014c..3f5c35a 100644
--- a/temporal/t.topology/t.topology.html
+++ b/temporal/t.topology/t.topology.html
@@ -52,5 +52,5 @@ t.topology tempmean_monthly at climate_2009_2012
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-12-26 23:44:16 +0100 (Fri, 26 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-03 20:39:26 +0100 (Wed, 03 Dec 2014) $</i>
 
diff --git a/temporal/t.topology/t.topology.py b/temporal/t.topology/t.topology.py
index 98654a1..69c3321 100755
--- a/temporal/t.topology/t.topology.py
+++ b/temporal/t.topology/t.topology.py
@@ -41,6 +41,7 @@
 #% key: s
 #% description: Print spatio-temporal relationships and exit
 #%end
+from __future__ import print_function
 
 import grass.script as grass
 import grass.temporal as tgis
@@ -81,73 +82,73 @@ def main():
     sp.base.print_info()
 
     #      0123456789012345678901234567890
-    print " +-------------------- Temporal topology -------------------------------------+"
+    print(" +-------------------- Temporal topology -------------------------------------+")
     if where:
-        print " | Is subset of dataset: ...... True"
+        print(" | Is subset of dataset: ...... True")
     else:
-        print " | Is subset of dataset: ...... False"
+        print(" | Is subset of dataset: ...... False")
 
     check = sp.check_temporal_topology(maps)
     if check:
         #      0123456789012345678901234567890
-        print " | Temporal topology is: ...... valid"
+        print(" | Temporal topology is: ...... valid")
     else:
         #      0123456789012345678901234567890
-        print " | Temporal topology is: ...... invalid"
+        print(" | Temporal topology is: ...... invalid")
 
     dict_ = sp.count_temporal_types(maps)
 
     for key in dict_.keys():
         if key == "interval":
             #      0123456789012345678901234567890
-            print " | Number of intervals: ....... %s" % (dict_[key])
+            print(" | Number of intervals: ....... %s" % (dict_[key]))
         if key == "point":
-            print " | Number of points: .......... %s" % (dict_[key])
+            print(" | Number of points: .......... %s" % (dict_[key]))
         if key == "invalid":
-            print " | Invalid time stamps: ....... %s" % (dict_[key])
+            print(" | Invalid time stamps: ....... %s" % (dict_[key]))
 
     #      0123456789012345678901234567890
-    print " | Number of gaps: ............ %i" % sp.count_gaps(maps)
+    print(" | Number of gaps: ............ %i" % sp.count_gaps(maps))
 
     if sp.is_time_absolute():
         gran = tgis.compute_absolute_time_granularity(maps)
     else:
         gran = tgis.compute_relative_time_granularity(maps)
-    print " | Granularity: ............... %s" % str(gran)
+    print(" | Granularity: ............... %s" % str(gran))
 
-    print " +-------------------- Topological relations ---------------------------------+"
+    print(" +-------------------- Topological relations ---------------------------------+")
     dict_ = sp.count_temporal_relations(maps)
 
     if dict_:
         for key in dict_.keys():
             if key == "equal":
                 #      0123456789012345678901234567890
-                print " | Equal:...................... %s" % (dict_[key])
+                print(" | Equal:...................... %s" % (dict_[key]))
             if key == "during":
-                print " | During: .................... %s" % (dict_[key])
+                print(" | During: .................... %s" % (dict_[key]))
             if key == "contains":
-                print " | Contains: .................. %s" % (dict_[key])
+                print(" | Contains: .................. %s" % (dict_[key]))
             if key == "overlaps":
-                print " | Overlaps: .................. %s" % (dict_[key])
+                print(" | Overlaps: .................. %s" % (dict_[key]))
             if key == "overlapped":
-                print " | Overlapped: ................ %s" % (dict_[key])
+                print(" | Overlapped: ................ %s" % (dict_[key]))
             if key == "after":
-                print " | After: ..................... %s" % (dict_[key])
+                print(" | After: ..................... %s" % (dict_[key]))
             if key == "before":
-                print " | Before: .................... %s" % (dict_[key])
+                print(" | Before: .................... %s" % (dict_[key]))
             if key == "starts":
-                print " | Starts: .................... %s" % (dict_[key])
+                print(" | Starts: .................... %s" % (dict_[key]))
             if key == "finishes":
-                print " | Finishes: .................. %s" % (dict_[key])
+                print(" | Finishes: .................. %s" % (dict_[key]))
             if key == "started":
-                print " | Started: ................... %s" % (dict_[key])
+                print(" | Started: ................... %s" % (dict_[key]))
             if key == "finished":
-                print " | Finished: .................. %s" % (dict_[key])
+                print(" | Finished: .................. %s" % (dict_[key]))
             if key == "follows":
-                print " | Follows: ................... %s" % (dict_[key])
+                print(" | Follows: ................... %s" % (dict_[key]))
             if key == "precedes":
-                print " | Precedes: .................. %s" % (dict_[key])
-    print " +----------------------------------------------------------------------------+"
+                print(" | Precedes: .................. %s" % (dict_[key]))
+    print(" +----------------------------------------------------------------------------+")
 
 if __name__ == "__main__":
     options, flags = grass.parser()
diff --git a/temporal/t.unregister/t.unregister.html b/temporal/t.unregister/t.unregister.html
index ad1c7c2..0cedc3d 100644
--- a/temporal/t.unregister/t.unregister.html
+++ b/temporal/t.unregister/t.unregister.html
@@ -61,4 +61,4 @@ t.unregister type=raster maps=2012_01_precip
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2014-12-27 00:50:11 +0100 (Sat, 27 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-27 00:33:06 +0100 (Sat, 27 Dec 2014) $</i>
diff --git a/temporal/t.unregister/testsuite/test_unregister.py b/temporal/t.unregister/testsuite/test_unregister.py
index 500f4b0..78d8b76 100644
--- a/temporal/t.unregister/testsuite/test_unregister.py
+++ b/temporal/t.unregister/testsuite/test_unregister.py
@@ -59,7 +59,7 @@ class TestUnregister(TestCase):
 
     def tearDown(self):
         """Remove generated data"""
-        self.runModule("g.remove", type="raster",  
+        self.runModule("g.remove", flags='f', type="raster",  
                                    name="a1,a2,a3,a4,a5,a6")
 
     def test_1(self):
@@ -117,7 +117,7 @@ class TestUnregister(TestCase):
         self.assertEqual(a456, lister.outputs.stdout)
 
 
-        # Remove STRDS A and B and chceck if maps a4, a5 and a6 are still in the temporal database
+        # Remove STRDS A and B and check if maps a4, a5 and a6 are still in the temporal database
         self.assertModule("t.remove",  type="strds", inputs="A,B")
 
         lister = SimpleModule("t.list", type="raster", columns="name", 
diff --git a/temporal/t.vect.algebra/t.vect.algebra.html b/temporal/t.vect.algebra/t.vect.algebra.html
index 27c91e5..ea332af 100644
--- a/temporal/t.vect.algebra/t.vect.algebra.html
+++ b/temporal/t.vect.algebra/t.vect.algebra.html
@@ -459,5 +459,5 @@ D = if(contains, td(buff_t(A, "1 days")) == 3, B, C)
 
 Thomas Leppelt, Soeren Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-01-25 18:56:33 +0100 (Sun, 25 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-25 18:55:23 +0100 (Sun, 25 Jan 2015) $</i>
 
diff --git a/temporal/t.vect.algebra/testsuite/test_vector_algebra.py b/temporal/t.vect.algebra/testsuite/test_vector_algebra.py
index 5707d91..d615dcc 100644
--- a/temporal/t.vect.algebra/testsuite/test_vector_algebra.py
+++ b/temporal/t.vect.algebra/testsuite/test_vector_algebra.py
@@ -9,11 +9,12 @@ for details.
 
 import datetime
 import os
-import grass.script
 import grass.temporal as tgis
-import grass.gunittest as gunittest
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 
-class TestTemporalVectorAlgebra(gunittest.TestCase):
+
+class TestTemporalVectorAlgebra(TestCase):
 
     @classmethod
     def setUpClass(cls):
@@ -56,7 +57,7 @@ class TestTemporalVectorAlgebra(gunittest.TestCase):
         tgis.register_maps_in_space_time_dataset(type="vector", name="D", maps="d1,d2,d3",
                                                  start="2001-01-03", increment="1 day", interval=True)
         tgis.register_maps_in_space_time_dataset(type="vector", name=None,  maps="singletmap", 
-                                                start="2001-01-03", end="2001-01-04", interval=True)
+                                                start="2001-01-03", end="2001-01-04")
     
     def tearDown(self):
         self.runModule("t.remove", type="stvds", inputs="R", quiet=True)
@@ -187,8 +188,6 @@ class TestTemporalVectorAlgebra(gunittest.TestCase):
         self.assertEqual( D.check_temporal_topology(),  True)
         self.assertEqual(D.get_granularity(),  u'1 day')
 
-if __name__ == '__main__':
-    gunittest.test()
-
-
 
+if __name__ == '__main__':
+    test()
diff --git a/temporal/t.vect.db.select/t.vect.db.select.html b/temporal/t.vect.db.select/t.vect.db.select.html
index 1d9d19d..0d3daac 100644
--- a/temporal/t.vect.db.select/t.vect.db.select.html
+++ b/temporal/t.vect.db.select/t.vect.db.select.html
@@ -52,5 +52,5 @@ start_time|end_time|DATE|SOURCE
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.vect.db.select/t.vect.db.select.py b/temporal/t.vect.db.select/t.vect.db.select.py
index 05d333d..2e32426 100755
--- a/temporal/t.vect.db.select/t.vect.db.select.py
+++ b/temporal/t.vect.db.select/t.vect.db.select.py
@@ -43,6 +43,7 @@
 #%option G_OPT_T_WHERE
 #% key: t_where
 #%end
+from __future__ import print_function
 
 import grass.script as grass
 import grass.temporal as tgis
@@ -101,14 +102,14 @@ def main():
                             separator, separator, entry)
                         if col_names != col_names_new:
                             col_names = col_names_new
-                            print col_names
+                            print(col_names)
                     else:
                         if row["end_time"]:
-                            print "%s%s%s%s%s" % (row["start_time"], separator,
-                                                  row["end_time"], separator, entry)
+                            print("%s%s%s%s%s" % (row["start_time"], separator,
+                                                  row["end_time"], separator, entry))
                         else:
-                            print "%s%s%s%s" % (row["start_time"],
-                                                separator, separator, entry)
+                            print("%s%s%s%s" % (row["start_time"],
+                                                separator, separator, entry))
                     count += 1
 
 if __name__ == "__main__":
diff --git a/temporal/t.vect.export/t.vect.export.html b/temporal/t.vect.export/t.vect.export.html
index a786c5e..83e57af 100644
--- a/temporal/t.vect.export/t.vect.export.html
+++ b/temporal/t.vect.export/t.vect.export.html
@@ -21,6 +21,16 @@ to export only a subset of the space time dataset. Archives exported
 with <em>t.vect.export</em> can be imported with
 <em><a href="t.vect.import.html">t.vect.import</a></em>.
 
+<h2>NOTES</h2>
+The name of output file has to specify the suffix of the archive, the
+following suffix has to be added:
+<ul>
+<li><b>.tar</b> in the case of <b>compress=no</b></li>
+<li><b>.tar.bzip2</b> in the case of <b>compress=bzip2</b></li>
+<li><b>.tar.gzip</b> in the case of <b>compress=gzip</b></li>
+</ul>
+
+
 <h2>EXAMPLE</h2>
 
 In this example, five vector maps are created and
@@ -29,9 +39,9 @@ Each vector map represents random locations
 within the boundary of the state taken at 1 month intervals.
 
 <div class="code"><pre>
-t.vect.export input=shoreline output=shoreline_nc
+t.vect.export input=shoreline output=shoreline_nc.tar.bzip2
 
-tar xvfj shoreline_nc
+tar xvfj shoreline_nc.tar.bzip2
 shoreline_1849_1873.xml
 shoreline_1849_1873.xsd
 shoreline_1925_1946.xml
@@ -121,4 +131,4 @@ Files:
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-10-06 17:26:07 +0200 (Tue, 06 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2016-02-26 19:01:22 +0100 (Fri, 26 Feb 2016) $</i>
diff --git a/temporal/t.vect.extract/t.vect.extract.html b/temporal/t.vect.extract/t.vect.extract.html
index 8b5fdd7..2d54ce9 100644
--- a/temporal/t.vect.extract/t.vect.extract.html
+++ b/temporal/t.vect.extract/t.vect.extract.html
@@ -87,5 +87,5 @@ shoreline_2009|None|shoreline|2009|None
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.vect.extract/t.vect.extract.py b/temporal/t.vect.extract/t.vect.extract.py
index 9c25bcf..fcc0d27 100755
--- a/temporal/t.vect.extract/t.vect.extract.py
+++ b/temporal/t.vect.extract/t.vect.extract.py
@@ -52,6 +52,15 @@
 #%end
 
 #%option
+#% key: suffix
+#% type: string
+#% description: Suffix to add at basename: set 'gran' for granularity, 'time' for the full time format, 'num' for numerical suffix with a specific number of digits (default %05)
+#% answer: gran
+#% required: no
+#% multiple: no
+#%end
+
+#%option
 #% key: nprocs
 #% type: integer
 #% description: The number of v.extract processes to run in parallel. Use only if database backend is used which supports concurrent writing
@@ -67,7 +76,6 @@
 
 import grass.script as grass
 import grass.temporal as tgis
-from multiprocessing import Process
 
 ############################################################################
 
@@ -84,12 +92,13 @@ def main():
     base = options["basename"]
     nprocs = int(options["nprocs"])
     register_null = flags["n"]
+    time_suffix = options["suffix"]
 
     # Make sure the temporal database exists
     tgis.init()
 
     tgis.extract_dataset(input, output, "vector", where, expression,
-                         base, nprocs, register_null, layer, type)
+                         base, time_suffix, nprocs, register_null, layer, type)
 
 ###############################################################################
 
diff --git a/temporal/t.vect.extract/testsuite/test_vect_extract.py b/temporal/t.vect.extract/testsuite/test_vect_extract.py
new file mode 100644
index 0000000..b54e147
--- /dev/null
+++ b/temporal/t.vect.extract/testsuite/test_vect_extract.py
@@ -0,0 +1,107 @@
+"""Test t.vector.extract
+
+(C) 2014 by the GRASS Development Team
+This program is free software under the GNU General Public
+License (>=v2). Read the file COPYING that comes with GRASS
+for details.
+
+:authors: Luca Delucchi
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.gmodules import SimpleModule
+
+class TestVectorExtraction(TestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        """Initiate the temporal GIS and set the region
+        """
+        cls.use_temp_region()
+         
+        cls.runModule("g.region", s=0, n=80, w=0, e=120, res=10)
+        # Use always the current mapset as temporal database
+        for i in range(1, 11):
+            cls.runModule("v.random", output="a{c}".format(c=i), npoints=20,
+                          overwrite=True)
+            cls.runModule("v.db.addtable", map="a{c}".format(c=i),
+                          columns="value integer")
+            cls.runModule("v.db.update",  map="a{c}".format(c=i),
+                          column="value", value="'random()'")
+        # Create the temporal database
+        cls.runModule("t.connect", flags="d")
+        cls.runModule("t.info", flags="s")
+        cls.runModule("t.create", type="stvds", temporaltype="absolute",
+                      output="A", title="A testvect", description="A testvect",
+                      overwrite=True)
+        cls.runModule("t.register", flags="i", type="vector", input="A",
+                      maps="a1,a2,a3,a4,a5,a6,a7,a8,a9,a10", start="2001-01-01",
+                      increment="3 months", overwrite=True)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region
+        """
+        cls.del_temp_region()
+        cls.runModule("t.remove", flags="rf", type="stvds", inputs="A")
+        
+    def test_selection(self):
+        """Perform a simple selection by datetime"""
+        self.assertModule("t.vect.extract", input="A", output="B", 
+                          where="start_time > '2001-06-01'", overwrite=True)
+
+        tinfo_string="""start_time=2001-07-01 00:00:00
+        end_time=2003-07-01 00:00:00
+        granularity=3 months
+        map_time=interval
+        number_of_maps=8
+        primitives=160
+        points=160"""
+
+        info = SimpleModule("t.info", flags="g", type="stvds", input="B")
+        self.assertModuleKeyValue(module=info, reference=tinfo_string,
+                                  precision=2, sep="=")
+
+    def test_selection_no_suffix(self):
+        """Perform a simple selection by datetime"""
+        self.assertModule("t.vect.extract", input="A", output="B", 
+                          where="start_time > '2001-06-01'", basename="b",
+                          overwrite=True)
+        self.assertVectorDoesNotExist('b_2001_07')
+        self.runModule("t.remove", flags="rf", type="stvds", inputs="B")
+
+    def test_selection_suffix(self):
+        """Perform a simple selection by datetime"""
+        self.assertModule("t.vect.extract", input="A", output="B", 
+                          expression="value > 0", basename="b",
+                          overwrite=True)
+        self.assertVectorDoesNotExist('b_2001_07')
+        self.runModule("t.remove", flags="rf", type="stvds", inputs="B")
+
+    def test_selection_time_suffix(self):
+        """Perform a simple selection by datetime"""
+        self.assertModule("t.vect.extract", input="A", output="B", 
+                          expression="value > 0", basename="b", suffix="time",
+                          overwrite=True)
+        self.assertVectorExists('b_2001_01_01T00_00_00')
+        self.runModule("t.remove", flags="rf", type="stvds", inputs="B")
+
+    def test_selection_num_suffix(self):
+        """Perform a simple selection by datetime"""
+        self.assertModule("t.vect.extract", input="A", output="B", 
+                          expression="value > 0", basename="b", suffix="num",
+                          overwrite=True)
+        self.assertVectorExists('b_00001')
+        self.runModule("t.remove", flags="rf", type="stvds", inputs="B")
+
+    def test_selection_num3_suffix(self):
+        """Perform a simple selection by datetime"""
+        self.assertModule("t.vect.extract", input="A", output="B", 
+                          expression="value > 0", basename="b",
+                          suffix="num%03", overwrite=True)
+        self.assertVectorExists('b_001')
+        self.runModule("t.remove", flags="rf", type="stvds", inputs="B")
+
+if __name__ == '__main__':
+    from grass.gunittest.main import test
+    test()
diff --git a/temporal/t.vect.import/t.vect.import.html b/temporal/t.vect.import/t.vect.import.html
index 9c37bed..9627b05 100644
--- a/temporal/t.vect.import/t.vect.import.html
+++ b/temporal/t.vect.import/t.vect.import.html
@@ -68,4 +68,4 @@ new_map_5 at user1|new_map_5|None|user1|2012-05-01 00:00:00|2012-06-01 00:00:00
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-06-27 00:25:46 +0200 (Mon, 27 Jun 2016) $</i>
+<p><i>Last changed: $Date: 2016-06-27 00:25:18 +0200 (Mon, 27 Jun 2016) $</i>
diff --git a/temporal/t.vect.list/t.vect.list.html b/temporal/t.vect.list/t.vect.list.html
index f99c8f4..986d590 100644
--- a/temporal/t.vect.list/t.vect.list.html
+++ b/temporal/t.vect.list/t.vect.list.html
@@ -68,5 +68,5 @@ shoreline_2009 at shoreline|shoreline_2009|None|shoreline|2009|None|None|160
 
 Sören Gebbert
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.vect.list/testsuite/test.t.vect.list.layer.sh b/temporal/t.vect.list/testsuite/test.t.vect.list.layer.sh
index 5fb0c56..321073c 100755
--- a/temporal/t.vect.list/testsuite/test.t.vect.list.layer.sh
+++ b/temporal/t.vect.list/testsuite/test.t.vect.list.layer.sh
@@ -87,31 +87,31 @@ t.create type=stvds temporaltype=absolute output=soils_abs4 title="A test with i
 t.create type=stvds temporaltype=absolute output=soils_abs5 title="A test with input files" descr="A test with input files"
 
 # The first @test
-t.register type=vector   input=soils_abs1 file="${n1}" start="2001-01-01" increment="1 months"
+t.register type=vector input=soils_abs1 file="${n1}" start="2001-01-01" increment="1 months"
 t.vect.list    separator=" | " method=comma     input=soils_abs1
 t.vect.list input=soils_abs1
 t.vect.list separator=" | " method=cols      input=soils_abs1
 t.vect.list separator=" | " method=delta     input=soils_abs1
 t.vect.list separator=" | " method=deltagaps input=soils_abs1
 
-t.register type=vector -i input=soils_abs2 file="${n2}"
+t.register type=vector input=soils_abs2 file="${n2}"
 t.vect.list    separator=" | " method=comma     input=soils_abs2
 t.vect.list input=soils_abs2
 t.vect.list separator=" | " method=cols      input=soils_abs2
 t.vect.list separator=" | " method=delta     input=soils_abs2
 t.vect.list separator=" | " method=deltagaps input=soils_abs2
 
-t.register type=vector -i input=soils_abs3 file="${n3}"
+t.register type=vector input=soils_abs3 file="${n3}"
 t.vect.list    separator=" | " method=comma     input=soils_abs3
 t.vect.list separator=" | " method=delta     input=soils_abs3
 t.vect.list separator=" | " method=deltagaps input=soils_abs3
 
-t.register type=vector -i input=soils_abs4 file="${n4}"
+t.register type=vector input=soils_abs4 file="${n4}"
 t.vect.list    separator=" | " method=comma     input=soils_abs4
 t.vect.list separator=" | " method=delta     input=soils_abs4
 t.vect.list separator=" | " method=deltagaps input=soils_abs4
 
-t.register type=vector -i input=soils_abs5 file="${n5}"
+t.register type=vector input=soils_abs5 file="${n5}"
 t.vect.list    separator=" | " method=comma     input=soils_abs5
 t.vect.list input=soils_abs5
 t.vect.list separator=" | " method=cols      input=soils_abs5
diff --git a/temporal/t.vect.list/testsuite/test.t.vect.list.sh b/temporal/t.vect.list/testsuite/test.t.vect.list.sh
index 2d2eb5d..54c9f7d 100755
--- a/temporal/t.vect.list/testsuite/test.t.vect.list.sh
+++ b/temporal/t.vect.list/testsuite/test.t.vect.list.sh
@@ -73,31 +73,31 @@ t.create type=stvds temporaltype=absolute output=lidar_abs4 title="A test with i
 t.create type=stvds temporaltype=absolute output=lidar_abs5 title="A test with input files" descr="A test with input files"
 
 # The first @test
-t.register type=vector  input=lidar_abs1 file="${n1}" start="2001-01-01" increment="1 months"
+t.register type=vector input=lidar_abs1 file="${n1}" start="2001-01-01" increment="1 months"
 t.vect.list    separator=" | " method=comma     input=lidar_abs1
 t.vect.list input=lidar_abs1
 t.vect.list separator=" | " method=cols      input=lidar_abs1
 t.vect.list separator=" | " method=delta     input=lidar_abs1
 t.vect.list separator=" | " method=deltagaps input=lidar_abs1
 
-t.register type=vector -i input=lidar_abs2 file="${n2}"
+t.register type=vector input=lidar_abs2 file="${n2}"
 t.vect.list    separator=" | " method=comma     input=lidar_abs2
 t.vect.list input=lidar_abs2
 t.vect.list separator=" | " method=cols      input=lidar_abs2
 t.vect.list separator=" | " method=delta     input=lidar_abs2
 t.vect.list separator=" | " method=deltagaps input=lidar_abs2
 
-t.register type=vector -i input=lidar_abs3 file="${n3}"
+t.register type=vector input=lidar_abs3 file="${n3}"
 t.vect.list    separator=" | " method=comma     input=lidar_abs3
 t.vect.list separator=" | " method=delta     input=lidar_abs3
 t.vect.list separator=" | " method=deltagaps input=lidar_abs3
 
-t.register type=vector -i input=lidar_abs4 file="${n4}"
+t.register type=vector input=lidar_abs4 file="${n4}"
 t.vect.list    separator=" | " method=comma     input=lidar_abs4
 t.vect.list separator=" | " method=delta     input=lidar_abs4
 t.vect.list separator=" | " method=deltagaps input=lidar_abs4
 
-t.register type=vector -i input=lidar_abs5 file="${n5}"
+t.register type=vector input=lidar_abs5 file="${n5}"
 t.vect.list    separator=" | " method=comma     input=lidar_abs5
 t.vect.list input=lidar_abs5
 t.vect.list separator=" | " method=cols      input=lidar_abs5
diff --git a/temporal/t.vect.observe.strds/t.vect.observe.strds.html b/temporal/t.vect.observe.strds/t.vect.observe.strds.html
index 82c5bb7..d883c71 100644
--- a/temporal/t.vect.observe.strds/t.vect.observe.strds.html
+++ b/temporal/t.vect.observe.strds/t.vect.observe.strds.html
@@ -8,10 +8,7 @@ The first input is a vector map layer with vector points. The second
 input is one or several space time raster datasets (STRDS) that should 
 be sampled over time at the vector point positions. The space time 
 raster dataset will be sampled over its whole temporal extent (from 
-start to end). The range can be adjusted using the temporal where 
-condition <em>t_where</em>. The temporal "where" will only work as 
-expected when just one STRDS is to be sampled. If more than one STRDS 
-are to be observed, a column name must be specified for each input space
+start to end). A column name must be specified for each input space
 time raster dataset.
 <p>
 As results  a new space time vector dataset is generated that contains 
@@ -144,4 +141,4 @@ v.info precip_stations_monthly
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2016-02-09 18:21:24 +0100 (Tue, 09 Feb 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-15 00:10:46 +0100 (Fri, 15 Jan 2016) $</i>
diff --git a/temporal/t.vect.observe.strds/t.vect.observe.strds.py b/temporal/t.vect.observe.strds/t.vect.observe.strds.py
index a46bda8..3488abf 100755
--- a/temporal/t.vect.observe.strds/t.vect.observe.strds.py
+++ b/temporal/t.vect.observe.strds/t.vect.observe.strds.py
@@ -48,10 +48,6 @@
 #%option G_OPT_DB_WHERE
 #%end
 
-#%option G_OPT_T_WHERE
-#% key: t_where
-#%end
-
 import grass.script as grass
 import grass.temporal as tgis
 import grass.script.raster as raster
@@ -82,7 +78,6 @@ def main():
     strds = options["strds"]
     where = options["where"]
     columns = options["columns"]
-    tempwhere = options["t_where"]
 
     if where == "" or where == " " or where == "\n":
         where = None
@@ -113,7 +108,8 @@ def main():
     # Single space time raster dataset
     if len(strds_names) == 1:
         rows = first_strds.get_registered_maps(
-            "name,mapset,start_time,end_time", tempwhere, "start_time", dbif)
+            columns="name,mapset,start_time,end_time", 
+            order="start_time", dbif=dbif)
 
         if not rows:
             dbif.close()
@@ -143,7 +139,7 @@ def main():
                                                       strds_names[0], False, None,
                                                       "equal", False, False)
 
-        for i in xrange(len(mapmatrizes[0])):
+        for i in range(len(mapmatrizes[0])):
             isvalid = True
             mapname_list = []
             for mapmatrix in mapmatrizes:
diff --git a/temporal/t.vect.univar/t.vect.univar.html b/temporal/t.vect.univar/t.vect.univar.html
index 4d7ee35..19648e8 100644
--- a/temporal/t.vect.univar/t.vect.univar.html
+++ b/temporal/t.vect.univar/t.vect.univar.html
@@ -32,5 +32,5 @@ precip_stations_monthly at climate_2009_2012|2012-12-01 00:00:00|2013-01-01 00:00:0
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-22 10:12:20 +0200 (Tue, 22 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-22 10:10:38 +0200 (Tue, 22 Sep 2015) $</i>
 
diff --git a/temporal/t.vect.what.strds/t.vect.what.strds.html b/temporal/t.vect.what.strds/t.vect.what.strds.html
index d001f73..ba15290 100644
--- a/temporal/t.vect.what.strds/t.vect.what.strds.html
+++ b/temporal/t.vect.what.strds/t.vect.what.strds.html
@@ -34,5 +34,5 @@ t.vect.what.strds input=precip_stations at climate_2009_2012 \
 
 Sören Gebbert, Thünen Institute of Climate-Smart Agriculture
 
-<p><i>Last changed: $Date: 2015-09-25 17:45:54 +0200 (Fri, 25 Sep 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-25 13:07:25 +0200 (Fri, 25 Sep 2015) $</i>
 
diff --git a/temporal/temporalintro.html b/temporal/temporalintro.html
index a7270fc..4ba488c 100644
--- a/temporal/temporalintro.html
+++ b/temporal/temporalintro.html
@@ -83,9 +83,7 @@ List of general management modules:
     <li><a href="g.gui.animation.html">g.gui.animation</a></li>
     <li><a href="g.gui.timeline.html">g.gui.timeline</a></li>
     <li><a href="g.gui.mapswipe.html">g.gui.mapswipe</a></li>
-<!--
     <li><a href="g.gui.tplot.html">g.gui.tplot</a></li>
--->
 </ul>
 
 <h3>Modules to process space time raster datasets</h3>
diff --git a/testsuite/raster/rmapcalc_test.sh b/testsuite/raster/rmapcalc_test.sh
deleted file mode 100755
index 21b0067..0000000
--- a/testsuite/raster/rmapcalc_test.sh
+++ /dev/null
@@ -1,177 +0,0 @@
-#!/bin/sh
-
-# Markus Neteler
-# Test cases for 2D raster data
-
-# Tests:
-#   - generate 3x3 map, value 1/1.1
-#   - calculate statistics
-#   - compare with known results
-
-#
-# TODO
-#   - how big EPSILON?
-
-if [ -z "$GISBASE" ] ; then
-    echo "You must be in GRASS GIS to run this program."
-    exit 1
-fi
-
-#### check if we have awk
-if [ ! -x "`which awk`" ] ; then
-    echo "$PROG: awk required, please install first" 1>&2
-    exit 1
-fi
-
-# setting environment, so that awk works properly in all languages
-unset LC_ALL
-export LC_NUMERIC=C
-
-eval `g.gisenv`
-: ${GISBASE?} ${GISDBASE?} ${LOCATION_NAME?} ${MAPSET?}
-LOCATION=$GISDBASE/$LOCATION_NAME/$MAPSET
-
-# some definitions
-PIXEL=3
-# how big EPSILON?
-#    epsilon for doubles in IEEE is 2.220446e-16
-EPSILON=22204460000000000
-PID=$$
-TMPNAME="`echo ${PID}_tmp_testmap | sed 's+\.+_+g'`"
-
-# some functions - keep order here
-cleanup()
-{
- echo "Removing temporary map"
- g.remove -f type=raster name=$TMPNAME > /dev/null
-}
-
-# check if a MASK is already present:
-MASKTMP=mask.$TMPNAME
-USERMASK=usermask_${MASKTMP}
-if test -f $LOCATION/cell/MASK
-then
- echo "A user raster mask (MASK) is present. Saving it..."
- g.rename MASK,$USERMASK > /dev/null
-fi
-
-finalcleanup()
-{
- echo "Restoring user region"
- g.region region=$TMPNAME
- g.remove -f type=region name=$TMPNAME > /dev/null
- #restore user mask if present:
- if test -f $LOCATION/cell/$USERMASK ; then
-  echo "Restoring user MASK"
-  g.remove -f type=raster name=MASK > /dev/null
-  g.rename $USERMASK,MASK > /dev/null
- fi
-}
-
-check_exit_status()
-{
- if [ $1 -ne 0 ] ; then
-  echo "An error occurred."
-  cleanup ; finalcleanup
-  exit 1
- fi
-}
-
-########## test function goes here
-compare_result()
-{
- EXPECTED=$1
- FOUND=$2
- VALUENAME=$3
-
- # test for NAN
- if [ "$FOUND" = "nan" ] ; then
-  echo "ERROR. $VALUENAME: Expected=$EXPECTED | FOUND=$FOUND"
-  cleanup ; finalcleanup
-  exit 1
- fi
-
- # check for difference + 1
- DIFF=`echo $EXPECTED $FOUND $EPSILON | awk '{printf "%16f", ($1 - $2) * $3 }'`
- #make absolute value
- DIFF=`echo $DIFF | awk '{printf("%f", sqrt($1 * $1))}'`
- #round to integer
- DIFF=`echo $DIFF | awk '{printf("%20d", int($1+0.5))}'`
-
- # check if difference > 0
- if [ $DIFF -gt 0 ] ; then
-  echo "ERROR. $VALUENAME: Expected=$EXPECTED | FOUND=$FOUND"
-  cleanup ; finalcleanup
-  exit 1
- fi
-}
-
-#check if a MASK is already present:
-MASKTMP=mask.$TMPNAME
-USERMASK=usermask_${MASKTMP}
-if test -f $LOCATION/cell/MASK
-then
- echo "A user raster mask (MASK) is present. Saving it..."
- g.rename MASK,$USERMASK > /dev/null
- check_exit_status $?
-fi
-
-echo "Saving current & setting test region."
-g.region save=$TMPNAME
-check_exit_status $?
-g.region s=0 n=$PIXEL w=0 e=$PIXEL res=1 tbres=1
-check_exit_status $?
-
-########### 2D raster INT tests ###########
-VALUE=1
-echo "INT/CELL test."
-r.mapcalc "$TMPNAME = 1"
-check_exit_status $?
-
-echo "Univariate statistics of INT/CELL test."
-eval `r.univar -g $TMPNAME`
-check_exit_status $?
-compare_result 9 $n n
-compare_result $VALUE $min min
-compare_result $VALUE $max max
-compare_result 0 $range range
-compare_result $VALUE $mean mean
-compare_result 0 $stddev stddev
-compare_result 0 $variance variance
-compare_result 0 $coeff_var coeff_var
-compare_result 9 $sum sum
-
-cleanup
-echo "INT/CELL univariate statistics test successful"
-echo "##################################"
-
-########### 2D raster FCELL tests ###########
-VALUE=1.1
-echo "FLOAT/FCELL test."
-r.mapcalc "$TMPNAME = $VALUE"
-check_exit_status $?
-
-echo "Univariate statistics of FLOAT/FCELL test."
-eval `r.univar -g $TMPNAME`
-check_exit_status $?
-compare_result 9 $n n
-compare_result $VALUE $min min
-compare_result $VALUE $max max
-compare_result 0 $range range
-compare_result $VALUE $mean mean
-compare_result 0 $stddev stddev
-compare_result 0 $variance variance
-compare_result 0 $coeff_var coeff_var
-compare_result 9.9 $sum sum
-
-cleanup
-echo "FLOAT/FCELL univariate statistics test successful"
-echo "##################################"
-
-###########
-# if we arrive here...
-
-finalcleanup
-echo "All tests successful. Congrats."
-exit 0
-
diff --git a/tools/g.html2man/g.html2man.py b/tools/g.html2man/g.html2man.py
index 01f5775..634c183 100755
--- a/tools/g.html2man/g.html2man.py
+++ b/tools/g.html2man/g.html2man.py
@@ -8,9 +8,11 @@ from StringIO import StringIO
 entities = {
     'nbsp': " ",
     'bull': "*"
-    }
+}
 
 # Remove ToC
+
+
 def fix(content):
     if isinstance(content, tuple):
         tag, attrs, body = content
@@ -26,20 +28,25 @@ def fix(content):
     else:
         return content
 
+
 def main():
     # parse HTML
     infile = sys.argv[1]
     inf = file(infile)
     p = HTMLParser(entities)
     for n, line in enumerate(inf):
-	try:
-	    p.feed(line)
-	except HTMLParseError as err:
-	    sys.stderr.write('%s:%d:%d: Parse error: %s\n' % (infile, err.lineno, err.offset, err.msg))
-	    sys.exit(1)
-	except Exception as err:
-	    sys.stderr.write('%s:%d:0: Error (%s): %s\n' % (infile, n + 1, repr(err), line))
-	    sys.exit(1)
+        try:
+            p.feed(line)
+        except HTMLParseError as err:
+            sys.stderr.write(
+                '%s:%d:%d: Parse error: %s\n' %
+                (infile, err.lineno, err.offset, err.msg))
+            sys.exit(1)
+        except Exception as err:
+            sys.stderr.write(
+                '%s:%d:0: Error (%s): %s\n' %
+                (infile, n + 1, repr(err), line))
+            sys.exit(1)
     p.close()
     inf.close()
 
diff --git a/tools/g.html2man/groff.py b/tools/g.html2man/groff.py
index fab7776..15e2a55 100644
--- a/tools/g.html2man/groff.py
+++ b/tools/g.html2man/groff.py
@@ -11,255 +11,261 @@ except:
     version = ""
 
 styles = {
-    'b':        "\\fB@\\fR",
-    'i':        "\\fI@\\fR",
-    'em':       "\\fI@\\fR",
-    'code':     "\\fC@\\fR",
-    'span':     "\\fC@\\fR",
-    'sup':      "\\u@\\d",
-    'hr':       ""
-    }
+    'b': "\\fB@\\fR",
+    'i': "\\fI@\\fR",
+    'em': "\\fI@\\fR",
+    'code': "\\fC@\\fR",
+    'span': "\\fC@\\fR",
+    'sup': "\\u@\\d",
+    'hr': ""
+}
 
 formats = {
-    'br':       "\n.br\n",
-    'h2':       "\n.SH @",
-    'h3':       "\n.SS @",
-    'h4':       "\n.SS @",
-    'dt':       ("\n.IP \"@\" 4m", 'no_nl'),
-    'dd':       "\n.br\n@",
-    'ul':       ("\n.RS 4n\n@\n.RE\n", 'in_ul'),
-    'menu':     ("\n.RS 4n\n@\n.RE\n", 'in_ul'),
-    'dir':      ("\n.RS 4n\n@\n.RE\n", 'in_ul'),
-    'ol':       ("\n.IP\n@\n.PP\n", 'index'),
-    'p':        "\n.PP\n@",
-    'pre':      ("\n.br\n.nf\n\\fC\n@\n\\fR\n.fi\n", 'preformat')
-    }
+    'br': "\n.br\n",
+    'h2': "\n.SH @",
+    'h3': "\n.SS @",
+    'h4': "\n.SS @",
+    'dt': ("\n.IP \"@\" 4m", 'no_nl'),
+    'dd': "\n.br\n@",
+    'ul': ("\n.RS 4n\n@\n.RE\n", 'in_ul'),
+    'menu': ("\n.RS 4n\n@\n.RE\n", 'in_ul'),
+    'dir': ("\n.RS 4n\n@\n.RE\n", 'in_ul'),
+    'ol': ("\n.IP\n@\n.PP\n", 'index'),
+    'p': "\n.PP\n@",
+    'pre': ("\n.br\n.nf\n\\fC\n@\n\\fR\n.fi\n", 'preformat')
+}
 
 formats.update(styles)
 
+
 def is_string(x):
     return isinstance(x, str)
 
+
 def is_tuple(x):
     return isinstance(x, tuple)
 
+
 def is_list(x):
     return isinstance(x, list)
 
+
 def is_blank(s):
     return is_string(s) and s.strip() == ""
 
+
 def clean(content):
     return [item for item in content if not is_blank(item)]
 
+
 class Formatter:
-    def __init__(self, filename, stream = sys.stdout):
-	self.stream = stream
-	self.style = dict(preformat = False,
-			  in_ul = False,
-			  no_nl = False,
-			  in_table = False,
-			  in_tr = False,
-			  index = [])
-	self.stack = []
-	self.strip_re = re.compile("^[ \t]+")
-	self.filename = filename
-	self.at_bol = True
+
+    def __init__(self, filename, stream=sys.stdout):
+        self.stream = stream
+        self.style = dict(preformat=False,
+                          in_ul=False,
+                          no_nl=False,
+                          in_table=False,
+                          in_tr=False,
+                          index=[])
+        self.stack = []
+        self.strip_re = re.compile("^[ \t]+")
+        self.filename = filename
+        self.at_bol = True
 
     def warning(self, msg):
-	sys.stderr.write(msg + '\n')
+        sys.stderr.write(msg + '\n')
 
     def set(self, var, val):
-	self.style[var] = val
+        self.style[var] = val
 
     def get(self, var):
-	return self.style[var]
+        return self.style[var]
 
     def push(self, **kwargs):
-	self.stack.append(self.style.copy())
-	self.style.update(**kwargs)
+        self.stack.append(self.style.copy())
+        self.style.update(**kwargs)
 
     def pop(self):
-	self.style = self.stack.pop()
+        self.style = self.stack.pop()
 
     def show(self, s):
-	self.stream.write(s)
-	if s != '':
-	    self.at_bol = s.endswith('\n')
+        self.stream.write(s)
+        if s != '':
+            self.at_bol = s.endswith('\n')
 
     def pp_with(self, content, var, val):
-	self.push()
-	self.set(var, val)
-	self.pp(content)
-	self.pop()
-
-    def fmt(self, format, content, var = None):
-	# String.partition is only in 2.5+
-	# (pre,sep,post) = format.partition("@")
-	if self.get('no_nl') and '\n' in format:
-	    self.warning("can't handle line breaks in <dt>...</dt>")
-	    format = "@"
-	f = format.split('@', 1)
-	pre = f[0]
-	if len(f) > 1:
-	    sep = '@'
-	    post = f[1]
-	else:
-	    sep = ''
-	    post = ''
-
-	if pre != "":
-	    self.show(pre)
-	if sep != "":
-	    if var:
-		if var == 'index':
-		    val = self.get('index') + [0]
-		else:
-		    val = True
-		self.pp_with(content, var, val)
-	    else:
-		self.pp(content)
-	if post != "":
-	    self.show(post)
+        self.push()
+        self.set(var, val)
+        self.pp(content)
+        self.pop()
+
+    def fmt(self, format, content, var=None):
+        # String.partition is only in 2.5+
+        # (pre,sep,post) = format.partition("@")
+        if self.get('no_nl') and '\n' in format:
+            self.warning("can't handle line breaks in <dt>...</dt>")
+            format = "@"
+        f = format.split('@', 1)
+        pre = f[0]
+        if len(f) > 1:
+            sep = '@'
+            post = f[1]
+        else:
+            sep = ''
+            post = ''
+
+        if pre != "":
+            self.show(pre)
+        if sep != "":
+            if var:
+                if var == 'index':
+                    val = self.get('index') + [0]
+                else:
+                    val = True
+                self.pp_with(content, var, val)
+            else:
+                self.pp(content)
+        if post != "":
+            self.show(post)
 
     def pp_li(self, content):
-	if self.get('in_ul'):
-	    self.fmt("\n.IP \(bu 4n\n@", content)
-	else:
-	    idx = self.get('index')
-	    idx[-1] += 1
-	    sec = ".".join(map(str,idx))
-	    self.show("\n.IP \\fB%s\\fR\n" % sec)
-	    self.set('index', idx)
-	    self.pp(content)
+        if self.get('in_ul'):
+            self.fmt("\n.IP \(bu 4n\n@", content)
+        else:
+            idx = self.get('index')
+            idx[-1] += 1
+            sec = ".".join(map(str, idx))
+            self.show("\n.IP \\fB%s\\fR\n" % sec)
+            self.set('index', idx)
+            self.pp(content)
 
     def pp_title(self):
-	self.show("\n.TH " +
-		  os.path.basename(self.filename).replace(".html","") +
-		  " 1 \"\" \"GRASS " +
-		  version +
-		  "\" \"Grass User's Manual\"")
+        self.show("\n.TH " +
+                  os.path.basename(self.filename).replace(".html", "") +
+                  " 1 \"\" \"GRASS " +
+                  version +
+                  "\" \"Grass User's Manual\"")
 
     def pp_tr(self, content):
-	content = clean(content)
-	self.push(in_tr = True)
-	col = 0
-	for item in content:
-	    if not is_tuple(item):
-		self.warning("invalid item in table row: %s" % str(item))
-		continue
-	    (tag, attrs, body) = item
-	    if tag not in ['td', 'th']:
-		self.warning("invalid tag in table row: %s" % tag)
-		continue
-	    if col > 0:
-		self.show("\t \t")
-	    self.show("T{\n")
-	    self.pp(body)
-	    self.show("\nT}")
-	    col += 1
-	self.show("\n")
-	self.pop()
+        content = clean(content)
+        self.push(in_tr=True)
+        col = 0
+        for item in content:
+            if not is_tuple(item):
+                self.warning("invalid item in table row: %s" % str(item))
+                continue
+            (tag, attrs, body) = item
+            if tag not in ['td', 'th']:
+                self.warning("invalid tag in table row: %s" % tag)
+                continue
+            if col > 0:
+                self.show("\t \t")
+            self.show("T{\n")
+            self.pp(body)
+            self.show("\nT}")
+            col += 1
+        self.show("\n")
+        self.pop()
 
     def pp_tbody(self, content):
-	for item in content:
-	    if is_tuple(item):
-		(tag, attrs, body) = item
-		if tag in ['thead', 'tbody', 'tfoot']:
-		    self.pp_tbody(body)
-		elif tag == 'tr':
-		    self.pp_tr(body)
-		    self.show(".sp 1\n")
+        for item in content:
+            if is_tuple(item):
+                (tag, attrs, body) = item
+                if tag in ['thead', 'tbody', 'tfoot']:
+                    self.pp_tbody(body)
+                elif tag == 'tr':
+                    self.pp_tr(body)
+                    self.show(".sp 1\n")
 
     def count_cols(self, content):
-	cols = 0
-	for item in content:
-	    n = 0
-	    if is_blank(item):
-		pass
-	    elif is_tuple(item):
-		(tag, attrs, body) = item
-		if tag in ['thead', 'tbody', 'tfoot']:
-		    n = self.count_cols(body)
-		elif tag == 'tr':
-		    n = len(clean(body))
-		cols = max(cols, n)
-	    else:
-		self.warning("invalid item in table: %s" % str(item))
-	return cols
+        cols = 0
+        for item in content:
+            n = 0
+            if is_blank(item):
+                pass
+            elif is_tuple(item):
+                (tag, attrs, body) = item
+                if tag in ['thead', 'tbody', 'tfoot']:
+                    n = self.count_cols(body)
+                elif tag == 'tr':
+                    n = len(clean(body))
+                cols = max(cols, n)
+            else:
+                self.warning("invalid item in table: %s" % str(item))
+        return cols
 
     def pp_table(self, content):
-	cols = self.count_cols(content)
-	if cols == 0:
-	    return
-	self.show("\n.TS\nexpand;\n")
-	self.show(" lw1 ".join(["lw60" for i in range(cols)]) + ".\n")
-	self.pp_tbody(content)
-	self.show("\n.TE\n")
+        cols = self.count_cols(content)
+        if cols == 0:
+            return
+        self.show("\n.TS\nexpand;\n")
+        self.show(" lw1 ".join(["lw60" for i in range(cols)]) + ".\n")
+        self.pp_tbody(content)
+        self.show("\n.TE\n")
 
     def pp_tag(self, tag, content):
-	if self.get('in_tr') and tag not in styles:
-	    self.pp(content)
-	elif tag in formats:
-	    spec = formats[tag]
-	    if is_string(spec):
-		self.fmt(spec, content)
-	    else:
-		(fmt, var) = spec
-		self.fmt(fmt, content, var)
-	elif tag == 'table':
-	    if self.get('in_table'):
-		self.warning("cannot handle nested tables")
-		return
-	    self.push(in_table = True)
-	    self.pp_table(content)
-	    self.pop()
-	elif tag == 'li':
-	    self.pp_li(content)
-	elif tag == 'title':
-	    self.pp_title()
-	else:
-	    self.pp(content)
+        if self.get('in_tr') and tag not in styles:
+            self.pp(content)
+        elif tag in formats:
+            spec = formats[tag]
+            if is_string(spec):
+                self.fmt(spec, content)
+            else:
+                (fmt, var) = spec
+                self.fmt(fmt, content, var)
+        elif tag == 'table':
+            if self.get('in_table'):
+                self.warning("cannot handle nested tables")
+                return
+            self.push(in_table=True)
+            self.pp_table(content)
+            self.pop()
+        elif tag == 'li':
+            self.pp_li(content)
+        elif tag == 'title':
+            self.pp_title()
+        else:
+            self.pp(content)
 
     def pp_string(self, content):
-	if content == "":
-	    return
-	s = content
-	if self.get('no_nl'):
-	    s = s.replace("\n"," ")
-	s = s.replace("\\", "\\(rs")
-	s = s.replace("'", "\\(cq")
-	s = s.replace("\"", "\\(dq")
-	s = s.replace("`", "\\(ga")
-	s = s.replace("-", "\\-")
-	if self.at_bol and s[0] in [".","'"]:
-	    s = "\\&" + s
-	self.show(s)
+        if content == "":
+            return
+        s = content
+        if self.get('no_nl'):
+            s = s.replace("\n", " ")
+        s = s.replace("\\", "\\(rs")
+        s = s.replace("'", "\\(cq")
+        s = s.replace("\"", "\\(dq")
+        s = s.replace("`", "\\(ga")
+        s = s.replace("-", "\\-")
+        if self.at_bol and s[0] in [".", "'"]:
+            s = "\\&" + s
+        self.show(s)
 
     def pp_text(self, content):
-	if content == "":
-	    return
-	lines = content.splitlines(True)
-	if len(lines) != 1:
-	    for line in lines:
-		self.pp_text(line)
-	    return
-	else:
-	    content = lines[0]
-	if self.at_bol and not self.get('preformat'):
-	    content = self.strip_re.sub('', content)
-	self.pp_string(content)
+        if content == "":
+            return
+        lines = content.splitlines(True)
+        if len(lines) != 1:
+            for line in lines:
+                self.pp_text(line)
+            return
+        else:
+            content = lines[0]
+        if self.at_bol and not self.get('preformat'):
+            content = self.strip_re.sub('', content)
+        self.pp_string(content)
 
     def pp_list(self, content):
-	for item in content:
-	    self.pp(item)
+        for item in content:
+            self.pp(item)
 
     def pp(self, content):
-	if is_list(content):
-	    self.pp_list(content)
-	elif is_tuple(content):
-	    (tag, attrs, body) = content
-	    self.pp_tag(tag, body)
-	elif is_string(content):
-	    self.pp_text(content)
-
+        if is_list(content):
+            self.pp_list(content)
+        elif is_tuple(content):
+            (tag, attrs, body) = content
+            self.pp_tag(tag, body)
+        elif is_string(content):
+            self.pp_text(content)
diff --git a/tools/g.html2man/html.py b/tools/g.html2man/html.py
index d76382a..fd75322 100644
--- a/tools/g.html2man/html.py
+++ b/tools/g.html2man/html.py
@@ -1,3 +1,5 @@
+from __future__ import (absolute_import, division, generators, nested_scopes,
+                        print_function, unicode_literals, with_statement)
 import sys
 import HTMLParser as base
 import htmlentitydefs
@@ -9,38 +11,40 @@ __all__ = ["HTMLParser", "HTMLParseError"]
 omit_start = ["body", "tbody", "head", "html"]
 
 single = ["area", "base", "basefont", "br", "col", "frame",
-	  "hr", "img", "input", "isindex", "link", "meta", "param"]
+          "hr", "img", "input", "isindex", "link", "meta", "param"]
 single = frozenset(single)
 
 heading = ["h1", "h2", "h3", "h4", "h5", "h6"]
 fontstyle = ["tt", "i", "b", "u", "s", "strike", "big", "small"]
-phrase = [ "em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr",
-	   "acronym"]
-special = [ "a", "img", "applet", "object", "font", "basefont", "br", "script",
-	    "map", "q", "sub", "sup", "span", "bdo", "iframe"]
-formctrl = [ "input", "select", "textarea", "label", "button"]
-lists = [ "ul", "ol", " dir", "menu"]
-head_misc = [ "script", "style", "meta", "link", "object"]
-pre_exclusion = [ "img", "object", "applet", "big", "small", "sub", "sup",
-		  "font", "basefont"]
-block = [ "p", "pre", "dl", "div", "center", "noscript", "noframes",
-	  "blockquote", "form", "isindex", "hr", "table", "fieldset",
-	  "address"] + heading + lists
+phrase = ["em", "strong", "dfn", "code", "samp", "kbd", "var", "cite", "abbr",
+          "acronym"]
+special = ["a", "img", "applet", "object", "font", "basefont", "br", "script",
+           "map", "q", "sub", "sup", "span", "bdo", "iframe"]
+formctrl = ["input", "select", "textarea", "label", "button"]
+lists = ["ul", "ol", " dir", "menu"]
+head_misc = ["script", "style", "meta", "link", "object"]
+pre_exclusion = ["img", "object", "applet", "big", "small", "sub", "sup",
+                 "font", "basefont"]
+block = ["p", "pre", "dl", "div", "center", "noscript", "noframes",
+         "blockquote", "form", "isindex", "hr", "table", "fieldset",
+         "address"] + heading + lists
 inline = fontstyle + phrase + special + formctrl
 flow = block + inline
 html_content = ["head", "body"]
 head_content = ["title", "isindex", "base"]
 
+
 def setify(d):
     return dict([(key, frozenset(val)) for key, val in d.iteritems()])
 
+
 def omit(allowed, tags):
     result = {}
     for k, v in allowed.iteritems():
-	for t in tags:
-	    if t in v:
-		v = v.union(allowed[t])
-	result[k] = v
+        for t in tags:
+            if t in v:
+                v = v.union(allowed[t])
+        result[k] = v
     return result
 
 allowed = {
@@ -122,7 +126,7 @@ allowed = {
     "u": inline,
     "ul": ["li"],
     "var": inline
-    }
+}
 
 allowed = setify(allowed)
 allowed = omit(allowed, omit_start)
@@ -135,18 +139,20 @@ excluded = {
     "label": ["label"],
     "menu": block,
     "pre": pre_exclusion
-    }
+}
 
 excluded = setify(excluded)
 
+
 class HTMLParser(base.HTMLParser):
-    def __init__(self, entities = None):
-	base.HTMLParser.__init__(self)
-	self.tag_stack = []
-	self.excluded = frozenset()
-	self.excluded_stack = []
-	self.data = []
-	self.data_stack = []
+
+    def __init__(self, entities=None):
+        base.HTMLParser.__init__(self)
+        self.tag_stack = []
+        self.excluded = frozenset()
+        self.excluded_stack = []
+        self.data = []
+        self.data_stack = []
         self.decls = []
         if entities:
             self.entities = entities
@@ -154,61 +160,60 @@ class HTMLParser(base.HTMLParser):
             self.entities = {}
 
     def top(self):
-	if self.tag_stack == []:
-	    return None
-	else:
-	    return self.tag_stack[-1][0]
+        if self.tag_stack == []:
+            return None
+        else:
+            return self.tag_stack[-1][0]
 
     def pop(self):
-	self.excluded = self.excluded_stack.pop()
-	data = self.data
-	self.data = self.data_stack.pop()
-	(tag, attrs) = self.tag_stack.pop()
-	self.append((tag, attrs, data))
-	return tag
+        self.excluded = self.excluded_stack.pop()
+        data = self.data
+        self.data = self.data_stack.pop()
+        (tag, attrs) = self.tag_stack.pop()
+        self.append((tag, attrs, data))
+        return tag
 
     def push(self, tag, attrs):
-	self.tag_stack.append((tag, attrs))
-	self.excluded_stack.append(self.excluded)
-	if tag in excluded:
-	    self.excluded = self.excluded.union(excluded[tag])
-	self.data_stack.append(self.data)
-	self.data = []
+        self.tag_stack.append((tag, attrs))
+        self.excluded_stack.append(self.excluded)
+        if tag in excluded:
+            self.excluded = self.excluded.union(excluded[tag])
+        self.data_stack.append(self.data)
+        self.data = []
 
     def append(self, item):
-	self.data.append(item)
+        self.data.append(item)
 
     def is_allowed(self, tag):
-	return tag not in self.excluded and tag in allowed[self.top()]
+        return tag not in self.excluded and tag in allowed[self.top()]
 
     def handle_starttag(self, tag, attrs):
-	if self.tag_stack != []:
-	    while not self.is_allowed(tag):
-		self.pop()
-	if tag not in single:
-	    self.push(tag, attrs)
-	else:
-	    self.append((tag, attrs, None))
+        if self.tag_stack != []:
+            while not self.is_allowed(tag):
+                self.pop()
+        if tag not in single:
+            self.push(tag, attrs)
+        else:
+            self.append((tag, attrs, None))
 
     def handle_entityref(self, name):
-	if name in self.entities:
-	    self.handle_data(self.entities[name])
-	elif name in htmlentitydefs.entitydefs:
-	    self.handle_data(htmlentitydefs.entitydefs[name])
-	else:
-	    sys.stderr.write("unrecognized entity: %s\n" % name)
+        if name in self.entities:
+            self.handle_data(self.entities[name])
+        elif name in htmlentitydefs.entitydefs:
+            self.handle_data(htmlentitydefs.entitydefs[name])
+        else:
+            sys.stderr.write("unrecognized entity: %s\n" % name)
 
     def handle_charref(self, name):
-	sys.stderr.write('unsupported character reference <%s>' % name);
+        sys.stderr.write('unsupported character reference <%s>' % name)
 
     def handle_data(self, data):
-	self.append(data)
+        self.append(data)
 
     def handle_endtag(self, tag):
-	while True:
-	    if self.pop() == tag:
-		break
+        while True:
+            if self.pop() == tag:
+                break
 
     def handle_decl(self, decl):
         self.decls.append(decl)
-
diff --git a/tools/g.html2man/rest.py b/tools/g.html2man/rest.py
index 1364b90..d938905 100644
--- a/tools/g.html2man/rest.py
+++ b/tools/g.html2man/rest.py
@@ -1,5 +1,6 @@
 import sys
 
+
 def match(node, tag, attr=None, val=None):
     if not isinstance(node, tuple):
         return False
@@ -13,6 +14,7 @@ def match(node, tag, attr=None, val=None):
             return False
     return True
 
+
 def find(node, tag, attr=None, val=None):
     if isinstance(node, tuple):
         node = node[2]
@@ -23,22 +25,26 @@ def find(node, tag, attr=None, val=None):
             return child
     raise ValueError('child not found')
 
+
 def children(node):
     return node[2]
 
+
 def text(node):
     return children(node)[0]
 
+
 def _(s):
     return s        # TODO
 
-def rest(root, f = sys.stdout):
+
+def rest(root, f=sys.stdout):
     def write(text):
         f.write(text)
 
     def show(item, italic=False, bold=False):
         if isinstance(item, str):
-            spc = '' # if item[-1] == '\n' else ' '
+            spc = ''  # if item[-1] == '\n' else ' '
             fmt = '**' if bold else ('*' if italic else '')
             write('%s%s%s%s' % (fmt, item, fmt, spc))
         elif match(item, 'b'):
diff --git a/tools/mkhtml.py b/tools/mkhtml.py
index 0589284..c2b2dc9 100644
--- a/tools/mkhtml.py
+++ b/tools/mkhtml.py
@@ -22,12 +22,15 @@ import string
 import re
 from datetime import datetime
 from HTMLParser import HTMLParser
+import urlparse
 
 pgm = sys.argv[1]
 
 src_file = "%s.html" % pgm
 tmp_file = "%s.tmp.html" % pgm
 
+source_url = "https://trac.osgeo.org/grass/browser/grass/branches/releasebranch_7_2/"
+
 header_base = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
 <html>
 <head>
@@ -53,13 +56,20 @@ header_pgm_desc = """<h2>NAME</h2>
 <em><b>${PGM}</b></em> - ${PGM_DESC}
 """
 
-footer_index = string.Template(\
+sourcecode = string.Template(
+"""<h2>SOURCE CODE</h2>
+<p>Available at: <a href="${URL_SOURCE}">${PGM} source code</a> (<a href="${URL_LOG}">history</a>)</p>
+"""
+)
+
+footer_index = string.Template(
 """<hr class="header">
 <p>
 <a href="index.html">Main index</a> |
 <a href="${INDEXNAME}.html">${INDEXNAMECAP} index</a> |
 <a href="topics.html">Topics index</a> |
 <a href="keywords.html">Keywords index</a> |
+<a href="graphical_index.html">Graphical index</a> |
 <a href="full_index.html">Full index</a>
 </p>
 <p>
@@ -73,12 +83,13 @@ GRASS GIS ${GRASS_VERSION} Reference Manual
 </html>
 """)
 
-footer_noindex = string.Template(\
+footer_noindex = string.Template(
 """<hr class="header">
 <p>
 <a href="index.html">Main index</a> |
 <a href="topics.html">Topics index</a> |
 <a href="keywords.html">Keywords index</a> |
+<a href="graphical_index.html">Graphical index</a> |
 <a href="full_index.html">Full index</a>
 </p>
 <p>
@@ -92,7 +103,6 @@ GRASS GIS ${GRASS_VERSION} Reference Manual
 </html>
 """)
 
-
 def read_file(name):
     try:
         f = open(name, 'rb')
@@ -129,9 +139,9 @@ def create_toc(src_data):
                 self.idx += 1
                 self.process_text = False
                 self.text = ''
-            
+
             self.tag_curr = self.tag_last
-                
+
         def handle_data(self, data):
             if not self.process_text:
                 return
@@ -139,11 +149,11 @@ def create_toc(src_data):
                 self.text += data
             else:
                 self.text += '<%s>%s</%s>' % (self.tag_curr, data, self.tag_curr)
-    
+
     # instantiate the parser and fed it some HTML
     parser = MyHTMLParser()
     parser.feed(src_data)
-    
+
     return parser.data
 
 def escape_href(label):
@@ -159,7 +169,7 @@ def escape_href(label):
 def write_toc(data):
     if not data:
         return
-    
+
     fd = sys.stdout
     fd.write('<div class="toc">\n')
     fd.write('<h4 class="toc">Table of contents</h4>\n')
@@ -175,18 +185,18 @@ def write_toc(data):
             in_h3 = True
         elif not first:
             fd.write('</li>\n')
-            
+
         if tag == 'h2':
             has_h2 = True
             if in_h3:
                 indent -= 4
                 fd.write('%s</ul></li>\n' % (' ' * indent))
                 in_h3 = False
-        
+
         fd.write('%s<li class="toc"><a href="#%s" class="toc">%s</a>' % \
                      (' ' * indent, escape_href(text), text))
         first = False
-    
+
     fd.write('</li>\n</ul>\n')
     fd.write('</div>\n')
 
@@ -258,6 +268,7 @@ index_names = {
     'v' : 'vector'
     }
 
+
 def to_title(name):
     """Convert name of command class/family to form suitable for title"""
     return name.capitalize()
@@ -287,11 +298,18 @@ year = os.getenv("VERSION_DATE")
 if not year:
     year = str(datetime.now().year)
 
+# check the names of scripts to assign the right folder
+topdir = os.path.abspath(os.getenv("MODULE_TOPDIR"))
+curdir = os.path.abspath(os.path.curdir)
+pgmdir = curdir.replace(topdir, '').lstrip('/')
+url_source = urlparse.urljoin(source_url, pgmdir)
+
 if index_name:
+    sys.stdout.write(sourcecode.substitute(URL_SOURCE=url_source, PGM=pgm,
+                                           URL_LOG=url_source.replace('browser',  'log')))
     sys.stdout.write(footer_index.substitute(INDEXNAME=index_name,
                                              INDEXNAMECAP=index_name_cap,
-                                             YEAR=year,
-                                             GRASS_VERSION=grass_version))
+                                             YEAR=year, GRASS_VERSION=grass_version))
 else:
     sys.stdout.write(footer_noindex.substitute(YEAR=year,
                                                GRASS_VERSION=grass_version))
diff --git a/tools/mkrest.py b/tools/mkrest.py
old mode 100644
new mode 100755
diff --git a/tools/vagrant/clean.sh b/tools/vagrant/clean.sh
new file mode 100755
index 0000000..ae0d4bc
--- /dev/null
+++ b/tools/vagrant/clean.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# abort install if any errors occur and enable tracing
+set -o errexit
+set -o xtrace
+
+cd /vagrant
+
+if [ -f "include/Make/Platform.make" ] ; then
+    make cleandistdirs
+    make distclean
+fi
+
+exit 0
diff --git a/tools/vagrant/compile.sh b/tools/vagrant/compile.sh
new file mode 100755
index 0000000..ed40f3b
--- /dev/null
+++ b/tools/vagrant/compile.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+### inspired by https://svn.osgeo.org/gdal/trunk/gdal/scripts/vagrant/gdal.sh
+
+# abort install if any errors occur and enable tracing
+set -o errexit
+set -o xtrace
+
+NUMTHREADS=2
+if [[ -f /sys/devices/system/cpu/online ]]; then
+	# Calculates 1.5 times physical threads
+	NUMTHREADS=$(( ( $(cut -f 2 -d '-' /sys/devices/system/cpu/online) + 1 ) * 15 / 10  ))
+fi
+#NUMTHREADS=1 # disable MP
+export NUMTHREADS
+
+cd /vagrant
+
+if [ ! -f "include/Make/Platform.make" ] ; then
+    ./configure \
+        --bindir=/usr/bin \
+        --srcdir=/vagrant \
+        --prefix=/usr/lib \
+        --enable-socket \
+        --enable-shared \
+        --with-postgres \
+        --with-mysql \
+        --with-cxx \
+        --with-x \
+        --with-gdal \
+        --with-geos \
+        --with-freetype \
+        --with-motif \
+        --with-readline \
+        --with-nls \
+        --with-odbc \
+        --with-netcdf \
+        --with-blas \
+        --with-lapack \
+        --with-sqlite \
+        --enable-largefile \
+        --with-freetype-includes=/usr/include/freetype2 \
+        --with-postgres-includes=`pg_config --includedir` \
+        --with-mysql-includes=`mysql_config --include | sed -e 's/-I//'` \
+        --with-proj-share=/usr/share/proj \
+        --with-wxwidgets=/usr/bin/wx-config \
+        --with-python \
+        --with-cairo \
+        --with-liblas
+fi
+
+make -j $NUMTHREADS
+
+sudo make install
+sudo ldconfig
+
+exit 0
diff --git a/vector/Makefile b/vector/Makefile
index 4ea8806..c20e059 100644
--- a/vector/Makefile
+++ b/vector/Makefile
@@ -10,10 +10,12 @@ SUBDIRS = \
 	v.category \
 	v.class \
 	v.clean \
+	v.cluster \
 	v.colors \
 	v.colors.out \
 	v.db.connect \
 	v.db.select \
+	v.decimate \
 	v.delaunay \
 	v.distance \
 	v.drape \
@@ -26,6 +28,7 @@ SUBDIRS = \
 	v.in.ascii \
 	v.in.db \
 	v.in.dxf \
+	v.in.pdal \
 	v.in.region \
 	v.kcv \
 	v.kernel \
@@ -56,6 +59,7 @@ SUBDIRS = \
 	v.normal \
 	v.out.ascii \
 	v.out.dxf \
+	v.out.lidar \
 	v.out.postgis \
 	v.out.pov \
 	v.out.svg \
diff --git a/vector/v.buffer/main.c b/vector/v.buffer/main.c
index d85d56d..93d6710 100644
--- a/vector/v.buffer/main.c
+++ b/vector/v.buffer/main.c
@@ -297,7 +297,6 @@ int main(int argc, char *argv[])
     straight_flag->key = 's';
     straight_flag->description = _("Make outside corners straight");
 
-/* Superfluous flag: https://trac.osgeo.org/grass/ticket/2223 */
     nocaps_flag = G_define_flag();
     nocaps_flag->key = 'c';
     nocaps_flag->description = _("Do not make caps at the ends of polylines");
diff --git a/vector/v.buffer/v.buffer.html b/vector/v.buffer/v.buffer.html
index a680a80..4304b4e 100644
--- a/vector/v.buffer/v.buffer.html
+++ b/vector/v.buffer/v.buffer.html
@@ -163,4 +163,4 @@ Rewritten by Rosen Matev (with support through the
 Rewritten by Markus Metz (2011, 2012)
 
 <p>
-<i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-30 15:30:14 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.build.polylines/main.c b/vector/v.build.polylines/main.c
index 65c01ad..47b6130 100644
--- a/vector/v.build.polylines/main.c
+++ b/vector/v.build.polylines/main.c
@@ -125,13 +125,14 @@ int main(int argc, char **argv)
     cats->key = "cats";
     cats->type = TYPE_STRING;
     cats->description = _("Category number mode");
-    cats->options = "no,first,multi";
+    cats->options = "no,first,multi,same";
     desc = NULL;
     G_asprintf(&desc,
-	       "no;%s;first;%s;multi;%s",
+	       "no;%s;first;%s;multi;%s;same;%s",
 	       _("Do not assign any category number to polyline"),
 	       _("Assign category number of first line to polyline"),
-	       _("Assign multiple category numbers to polyline"));
+	       _("Assign multiple category numbers to polyline"),
+	       _("Create polyline from lines with same categories"));
     cats->descriptions = desc;
     cats->answer = "no";
 
diff --git a/vector/v.build.polylines/v.build.polylines.html b/vector/v.build.polylines/v.build.polylines.html
index 3f7baaa..b0449e3 100644
--- a/vector/v.build.polylines/v.build.polylines.html
+++ b/vector/v.build.polylines/v.build.polylines.html
@@ -49,6 +49,9 @@ a new polyline, i.e. lines and boundaries are kept separate.
   different category numbers then <em>v.build.polylines</em> will
   set the multiple category numbers to a polyline.  Also all linked
   attributes tables are copied to the output vector map.</li>
+  <li><b>cats=same</b> - Assigned lines to a polyline have
+  same category numbers in all layers. Linked
+  attributes tables are copied to the output vector map.</li>
 </ul>
 
 <em>v.build.polylines</em> correctly handles <b>input</b> vector maps
@@ -81,4 +84,4 @@ Major rewrite by Radim Blazek, October 2002<br>
 Category mode added by Martin Landa, FBK-irst, Trento, Italy, October 2007<br>
 Support for categories, attributes, and different line types by Markus Metz
 
-<p><i>Last changed: $Date: 2014-12-27 22:28:54 +0100 (Sat, 27 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-02-07 11:43:05 +0100 (Sun, 07 Feb 2016) $</i>
diff --git a/vector/v.build.polylines/walk.c b/vector/v.build.polylines/walk.c
index 4097590..e5a39e6 100644
--- a/vector/v.build.polylines/walk.c
+++ b/vector/v.build.polylines/walk.c
@@ -74,6 +74,51 @@ int walk_back(struct Map_info *map, int start_line, int type)
     return (line);
 }
 
+/* 
+   \brief Compare two line_cats structs.
+
+   \return 1 - structs have same categories in all fields
+   \return 0 - structs do not have same categories in all fields
+ */
+int cmp_cats(struct line_cats *Cats1, struct line_cats *Cats2)
+{
+    int cat_found, cat_idx, i, ret;
+    struct ilist *cats_list;
+
+    if (Cats1->n_cats != Cats2->n_cats) {
+	return 0;
+    }
+
+    cats_list = Vect_new_list();
+
+    for (cat_idx = 0; cat_idx < Cats1->n_cats; cat_idx++) {
+
+	ret = Vect_field_cat_get(Cats2, Cats1->field[cat_idx], cats_list);
+
+	if (ret == -1) {
+	    Vect_destroy_list(cats_list);
+	    return 0;
+	}
+
+	cat_found = 0;
+
+	for (i = 0; i < cats_list->n_values; i++) {
+	    if (Cats1->cat[cat_idx] == cats_list->value[i]) {
+		cat_found = 1;
+	    }
+
+	}
+
+	if (cat_found == 0) {
+	    Vect_destroy_list(cats_list);
+	    return 0;
+	}
+    }
+
+    Vect_destroy_list(cats_list);
+    return 1;
+}
+
 /* Start from the first node on a polyline and walk to the other end,
    collecting the coordinates of each node en route.  */
 int walk_forward_and_pick_up_coords(struct Map_info *map,
@@ -137,6 +182,14 @@ int walk_forward_and_pick_up_coords(struct Map_info *map,
 			     cats_tmp->cat[cat_idx]);
 	    }
 	}
+
+	if (cats_tmp && write_cats == SAME_CATS) {
+
+	    if (cmp_cats(Cats, cats_tmp) == 0) {
+		break;
+	    }
+	}
+
 	Vect_get_line_nodes(map, line, &n1, &n2);
 
 	if (node == n1) {
diff --git a/vector/v.build.polylines/walk.h b/vector/v.build.polylines/walk.h
index ef03595..7a74e4e 100644
--- a/vector/v.build.polylines/walk.h
+++ b/vector/v.build.polylines/walk.h
@@ -1,6 +1,8 @@
 #define NO_CATS     0
 #define ONE_CAT     1
 #define MULTI_CATS  2
+#define SAME_CATS   3
+
 
 int walk_back(struct Map_info *, int, int);
 int walk_forward_and_pick_up_coords(struct Map_info *, int, int,
diff --git a/vector/v.build/v.build.html b/vector/v.build/v.build.html
index 9daa8d7..259838e 100644
--- a/vector/v.build/v.build.html
+++ b/vector/v.build/v.build.html
@@ -89,4 +89,4 @@ Michael Higgins, U.S.Army Construction Engineering Research Laboratory,<br>
 Radim Blazek, ITC-irst, Trento, Italy
 
 <p>
-<i>Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</i>
+<i>Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/vector/v.category/testsuite/copy_multiple_cats.sh b/vector/v.category/testsuite/copy_multiple_cats.sh
new file mode 100755
index 0000000..ba92e30
--- /dev/null
+++ b/vector/v.category/testsuite/copy_multiple_cats.sh
@@ -0,0 +1,30 @@
+#!/usr/bin/env bash
+
+# this is test for #2618
+# v.category option=transfer does not copy multiple cat values
+# https://trac.osgeo.org/grass/ticket/2618
+
+set -e
+set -x
+
+echo "100|100|1" | v.in.ascii output=vcategory_test_1 input=-
+fid=$(v.edit --quiet layer=1 map=vcategory_test_1 tool=select cat=1)
+v.edit map=vcategory_test_1 layer=1 tool=catadd ids=${fid} cats=2
+v.category option=transfer layer=1,2 input=vcategory_test_1 output=vcategory_test_2
+
+expected="1/2"
+out=$(v.category option=print layer=1 input=vcategory_test_2)
+
+if [[ ${out} != ${expected} ]]; then
+    echo "FAIL: Expected '${expected}' not equals to output ${out}"
+    exit 1
+fi
+
+out=$(v.category option=print layer=2 input=vcategory_test_2)
+
+if [[ ${out} != ${expected} ]]; then
+    echo "FAIL: Expected '${expected}' not equals to output ${out}"
+    exit 1
+fi
+
+g.remove -f type=vector name=vcategory_test_1,vcategory_test_2
diff --git a/vector/v.category/v.category.html b/vector/v.category/v.category.html
index c59def1..9907a81 100644
--- a/vector/v.category/v.category.html
+++ b/vector/v.category/v.category.html
@@ -140,4 +140,4 @@ Radim Blazek, ITC-irst, Trento, Italy<br>
 Modified (the id parameter) by Martin Landa,
   FBK-irst (formerly ITC-irst), Trento, Italy, 2008/02
 
-<p><i>Last changed: $Date: 2014-04-11 17:48:44 +0200 (Fri, 11 Apr 2014) $</i>
+<p><i>Last changed: $Date: 2014-04-11 17:46:13 +0200 (Fri, 11 Apr 2014) $</i>
diff --git a/vector/v.clean/test/description.html b/vector/v.clean/test/description.html
index 69be7a1..df7c5b3 100644
--- a/vector/v.clean/test/description.html
+++ b/vector/v.clean/test/description.html
@@ -11,4 +11,4 @@
 
 Radim Blazek
 
-<p><i>Last changed: $Date: 2011-09-29 21:18:47 +0200 (Thu, 29 Sep 2011) $</i>
+<p><i>Last changed: $Date: 2011-09-29 12:18:47 -0700 (Thu, 29 Sep 2011) $</i>
diff --git a/vector/v.clean/v.clean.html b/vector/v.clean/v.clean.html
index c2e21b4..7b13ad3 100644
--- a/vector/v.clean/v.clean.html
+++ b/vector/v.clean/v.clean.html
@@ -295,4 +295,4 @@ David Gerdes, U.S. Army Construction Engineering Research Laboratory<br>
 Radim Blazek, ITC-irst, Trento, Italy<br>
 Martin Landa, FBK-irst (formerly ITC-irst), Trento, Italy
 
-<p><i>Last changed: $Date: 2016-03-08 09:08:23 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-08 09:06:33 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/vector/v.cluster/Makefile b/vector/v.cluster/Makefile
new file mode 100644
index 0000000..d5ca4e0
--- /dev/null
+++ b/vector/v.cluster/Makefile
@@ -0,0 +1,12 @@
+MODULE_TOPDIR = ../..
+
+PGM = v.cluster
+
+LIBES = $(VECTORLIB) $(BTREE2LIB) $(GISLIB)
+DEPENDENCIES = $(VECTORDEP) $(BTREE2DEP) $(GISDEP)
+EXTRA_INC = $(VECT_INC)
+EXTRA_CFLAGS = $(VECT_CFLAGS)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+default: cmd
diff --git a/vector/v.cluster/main.c b/vector/v.cluster/main.c
new file mode 100644
index 0000000..a2e40aa
--- /dev/null
+++ b/vector/v.cluster/main.c
@@ -0,0 +1,1285 @@
+
+/****************************************************************
+ *
+ * MODULE:     v.cluster
+ *
+ * AUTHOR(S):  Markus Metz
+ *
+ * PURPOSE:    Identifies clusters in a point cloud
+ *
+ * COPYRIGHT:  (C) 2015 by the GRASS Development Team
+ *
+ *             This program is free software under the
+ *             GNU General Public License (>=v2).
+ *             Read the file COPYING that comes with GRASS
+ *             for details.
+ *
+ ****************************************************************/
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <math.h>
+#include <grass/gis.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+#include <grass/kdtree.h>
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a, b) ((a) > (b) ? (a) : (b))
+
+#define CL_DBSCAN	1
+#define CL_DBSCAN2	2
+#define CL_DENSE	3
+#define CL_OPTICS	4
+#define CL_OPTICS2	5
+
+#define GET_PARENT(p, c) ((p) = (int) (((c) - 2) / 3 + 1))
+#define GET_CHILD(c, p) ((c) = (int) (((p) * 3) - 1))
+
+
+struct cl_pnt
+{
+    int uid;
+    int prevpnt;
+    double cd;
+    double reach;
+    double c[3];
+};
+
+static struct cl_pnt *clp;
+
+static int *heapidx;
+static int heapsize;
+
+int add_pt(int idx);
+int drop_pt(void);
+
+int main(int argc, char *argv[])
+{
+    struct Map_info In, Out;
+    struct line_pnts *Points;
+    struct line_cats *Cats;
+    int i, j, type, cat, is3d;
+    struct GModule *module;
+    struct Option *input, *output, *lyr_opt;
+    struct Option *dist_opt, *min_opt, *method_opt;
+    struct Flag *flag_2d, *flag_topo, *flag_attr;
+    int clayer;
+    int npoints, nlines;
+    int *cid, *idx, *renumber, OLD, NEW;
+    int nclusters, noutliers;
+    struct kdtree *kdt;
+    struct kdtrav trav;
+    double c[3];
+    int uid;
+    double eps;
+    int ndims, minpnts;
+    int clmethod;
+    double *kddist;
+    int kdfound, *kduid;
+
+    /* initialize GIS environment */
+    /* reads grass env, stores program name to G_program_name() */
+    G_gisinit(argv[0]);
+
+    /* initialize module */
+    module = G_define_module();
+    G_add_keyword(_("vector"));
+    G_add_keyword(_("point cloud"));
+    G_add_keyword(_("cluster"));
+    G_add_keyword(_("clump"));
+    module->description = _("Performs cluster identification.");
+
+    /* Define the different options as defined in gis.h */
+    input = G_define_standard_option(G_OPT_V_INPUT);
+
+    output = G_define_standard_option(G_OPT_V_OUTPUT);
+
+    lyr_opt = G_define_standard_option(G_OPT_V_FIELD);
+    lyr_opt->label = _("Layer number or name for cluster ids");
+    lyr_opt->answer = "2";
+
+    dist_opt = G_define_option();
+    dist_opt->type = TYPE_DOUBLE;
+    dist_opt->key = "distance";
+    dist_opt->required = NO;
+    dist_opt->label = _("Maximum distance to neighbors");
+
+    min_opt = G_define_option();
+    min_opt->type = TYPE_INTEGER;
+    min_opt->key = "min";
+    min_opt->required = NO;
+    min_opt->label = _("Minimum number of points to create a cluster");
+
+    method_opt = G_define_option();
+    method_opt->type = TYPE_STRING;
+    method_opt->key = "method";
+    method_opt->options = "dbscan,dbscan2,density,optics,optics2";
+    method_opt->answer = "dbscan";
+    method_opt->required = NO;
+    method_opt->label = _("Clustering method");
+
+    flag_2d = G_define_flag();
+    flag_2d->key = '2';
+    flag_2d->label = _("Force 2D clustering");
+
+    flag_topo = G_define_standard_flag(G_FLG_V_TOPO);
+
+    flag_attr = G_define_standard_flag(G_FLG_V_TABLE);
+    
+
+    /* options and flags parser */
+    if (G_parser(argc, argv))
+	exit(EXIT_FAILURE);
+
+    Points = Vect_new_line_struct();
+    Cats = Vect_new_cats_struct();
+
+    Vect_check_input_output_name(input->answer, output->answer, G_FATAL_EXIT);
+
+    if (Vect_set_open_level(1))
+	G_fatal_error(_("Unable to set predetermined vector open level"));
+
+    if (1 > Vect_open_old(&In, input->answer, NULL))
+	G_fatal_error(_("Unable to open vector map <%s>"), input->answer);
+
+    /* Check if old vector is 3D. We should preserve 3D data. */
+    is3d = WITHOUT_Z;
+    ndims = 2;
+    if (Vect_is_3d(&In)) {
+	is3d = WITH_Z;
+	ndims = 3;
+    }
+
+    if (flag_2d->answer)
+	ndims = 2;
+
+    minpnts = ndims;
+
+    if (min_opt->answer) {
+	minpnts = atoi(min_opt->answer);
+	if (minpnts < 2) {
+	    G_warning(_("Minimum number of points must be at least 2"));
+	    minpnts = 2;
+	}
+	minpnts--;
+    }
+
+    clayer = atoi(lyr_opt->answer);
+    if (clayer < 1)
+	G_fatal_error(_("Option %s must be positive"), lyr_opt->key);
+
+    clmethod = CL_DBSCAN;
+    if (!strcmp(method_opt->answer, "dbscan2"))
+	clmethod = CL_DBSCAN2;
+    else if (!strcmp(method_opt->answer, "density"))
+	clmethod = CL_DENSE;
+    else if (!strcmp(method_opt->answer, "optics"))
+	clmethod = CL_OPTICS;
+    else if (!strcmp(method_opt->answer, "optic2"))
+	clmethod = CL_OPTICS2;
+
+    /* count points */
+    G_message(_("Counting input points ..."));
+    npoints = nlines = 0;
+    while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	nlines++;
+	if (type == GV_POINT) {
+	    if (Vect_cat_get(Cats, clayer, &cat))
+		G_fatal_error(_("Layer %d is not empty, choose another layer"),
+		              clayer);
+	    npoints++;
+	}
+    }
+
+    if (npoints < minpnts + 1) {
+	G_warning(_("Not enough points in input, nothing to do"));
+	Vect_close(&In);
+	exit(EXIT_SUCCESS);
+    }
+
+    /* Open new vector for reading/writing */
+    if (0 > Vect_open_new(&Out, output->answer, is3d)) {
+	Vect_close(&In);
+	G_fatal_error(_("Unable to create vector map <%s>"), output->answer);
+    }
+
+    /* Copy header and history data from old to new map */
+    Vect_copy_head_data(&In, &Out);
+    Vect_hist_copy(&In, &Out);
+    Vect_hist_command(&Out);
+
+    /* create k-d tree */
+    G_message(_("Creating search index ..."));
+    kdt = kdtree_create(ndims, NULL);
+    cid = G_malloc((nlines + 1) * sizeof(int));
+    idx = G_malloc((nlines + 1) * sizeof(int));
+    Vect_rewind(&In);
+    i = 0;
+    cid[0] = 0;
+    idx[0] = 0;
+    while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	G_percent(i++, nlines, 4);
+	cid[i] = 0;
+	if (type == GV_POINT) {
+	    
+	    c[0] = Points->x[0];
+	    c[1] = Points->y[0];
+	    c[2] = Points->z[0];
+
+	    kdtree_insert(kdt, c, i, 0);
+	}
+    }
+    G_percent(nlines, nlines, 4);
+
+    kdtree_optimize(kdt, 2);
+
+    noutliers = nclusters = 0;
+    if (clmethod == CL_DBSCAN) {
+	/* DBSCAN 
+	 * the neighbors of each point 
+	 * with at least minpnts neighbors within distance (epsilon)
+	 * are added to a cluster */
+
+	/* get epsilon */
+	if (dist_opt->answer) {
+	    eps = atof(dist_opt->answer);
+	    if (eps <= 0)
+		G_fatal_error(_("Option %s must be a positive number"), dist_opt->key);
+	}
+	else {
+	    int n;
+	    double dist, mean, min, max, sum, sumsq, sd;
+	    double *kd;
+	    int *ki;
+
+	    /* estimate epsilon */
+	    G_message(_("Estimating maximum distance ..."));
+	    kdtree_init_trav(&trav, kdt);
+	    c[2] = 0.0;
+	    n = 0;
+	    sum = sumsq = 0;
+	    min = 1.0 / 0.0;
+	    max = 0;
+	    kd = G_malloc(minpnts * sizeof(double));
+	    ki = G_malloc(minpnts * sizeof(int));
+	    i = 0;
+	    while (kdtree_traverse(&trav, c, &uid)) {
+		G_percent(i++, npoints, 4);
+
+		kdfound = kdtree_knn(kdt, c, ki, kd, minpnts, &uid);
+		if (kdfound) {
+		    dist = sqrt(kd[kdfound - 1]);
+		    sum += dist;
+		    sumsq += dist * dist;
+		    n++;
+		    if (min > dist)
+			min = dist;
+		    if (max < dist)
+			max = dist;
+		}
+	    }
+	    G_percent(npoints, npoints, 4);
+
+	    G_free(kd);
+	    G_free(ki);
+
+	    if (!n)
+		G_fatal_error(_("No neighbors found"));
+	    
+	    mean = sum / n;
+	    sd = sqrt(sumsq / n - mean * mean);
+	    eps = mean + 1.644854 * sd; /* 90% CI */
+	    eps = mean + 2.575829 * sd; /* 99% CI */
+	    
+	    if (eps > max)
+		eps = max;
+
+	    G_message(_("Distance to the %d nearest neighbor:"), minpnts);
+	    G_message(_("Min: %g, max: %g"), min, max);
+	    G_message(_("Mean: %g"), mean);
+	    G_message(_("Standard deviation: %g"), sd);
+
+	    G_message(_("Estimated maximum distance: %g"), eps);
+	}
+
+	/* create clusters */
+	G_message(_("Building clusters ..."));
+	nclusters = 0;
+	kdtree_init_trav(&trav, kdt);
+	c[2] = 0.0;
+	idx[0] = 0;
+	i = 0;
+	while (kdtree_traverse(&trav, c, &uid)) {
+	    G_percent(i++, npoints, 4);
+
+	    /* radius search */
+	    /* TODO: use knn search */
+	    kdfound = kdtree_dnn(kdt, c, &kduid, &kddist, eps, &uid);
+
+	    /* must have min neighbors within radius */
+	    if (kdfound >= minpnts) {
+
+		OLD = cid[uid];
+		NEW = idx[OLD];
+		while (OLD != NEW) {
+		    OLD = NEW;
+		    NEW = idx[OLD];
+		}
+		cat = NEW;
+
+		/* find latest cluster */
+		for (j = 0; j < kdfound; j++) {
+		    OLD = cid[kduid[j]];
+		    NEW = idx[OLD];
+		    while (OLD != NEW) {
+			OLD = NEW;
+			NEW = idx[OLD];
+		    }
+		    if (cat < NEW) {
+			cat = NEW;
+		    }
+		}
+
+		if (cat == 0) {
+		    /* start new cluster */
+		    nclusters++;
+		    cat = nclusters;
+		    if (nclusters > nlines)
+			G_fatal_error(_("nlines: %d, nclusters: %d"), nlines, nclusters);
+		    idx[nclusters] = nclusters;
+		    cid[uid] = nclusters;
+		}
+
+		/* set or update cluster ids */
+		if (cid[uid] != 0) {
+		    /* relabel */
+		    OLD = cid[uid];
+		    NEW = idx[OLD];
+		    while (OLD != NEW) {
+			OLD = NEW;
+			NEW = idx[OLD];
+		    }
+		    idx[NEW] = cat;
+		}
+		else {
+		    cid[uid] = cat;
+		}
+
+		for (j = 0; j < kdfound; j++) {
+		    if (cid[kduid[j]] != 0) {
+			/* relabel */
+			OLD = cid[kduid[j]];
+			NEW = idx[OLD];
+			while (OLD != NEW) {
+			    OLD = NEW;
+			    NEW = idx[OLD];
+			}
+			idx[NEW] = cat;
+		    }
+		    else {
+		       cid[kduid[j]] = cat;
+		    }
+		}
+	    }
+	    if (kdfound) {
+		G_free(kddist);
+		G_free(kduid);
+	    }
+	}
+	G_percent(npoints, npoints, 4);
+
+	if (nclusters == 0) {
+	    G_message(_("No clusters found, adjust option %s"), dist_opt->key);
+	    Vect_close(&In);
+	    Vect_close(&Out);
+	    Vect_delete(output->answer);
+	    exit(EXIT_SUCCESS);
+	}
+
+	/* generate a renumbering scheme */
+	G_message(_("Generating renumbering scheme..."));
+	G_debug(1, "%d initial clusters", nclusters);
+	/* allocate final clump ID */
+	renumber = (int *) G_malloc((nclusters + 1) * sizeof(int));
+	renumber[0] = 0;
+	cat = 1;
+	G_percent(0, nclusters, 1);
+	for (i = 1; i <= nclusters; i++) {
+	    G_percent(i, nclusters, 4);
+	    OLD = i;
+	    NEW = idx[i];
+	    if (OLD != NEW) {
+		renumber[i] = 0;
+		/* find valid clump ID */
+		while (OLD != NEW) {
+		    OLD = NEW;
+		    NEW = idx[OLD];
+		}
+		idx[i] = NEW;
+	    }
+	    else
+		/* set final clump id */
+		renumber[i] = cat++;
+	}
+
+	nclusters = cat - 1;
+
+	/* write cluster ids */
+	G_message(_("Write out cluster ids ..."));
+	Vect_rewind(&In);
+	i = 0;
+	noutliers = 0;
+	while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	    G_percent(i++, nlines, 4);
+	    if (type == GV_POINT) {
+		cat = renumber[idx[cid[i]]];
+		if (!cat)
+		    noutliers++;
+		Vect_cat_set(Cats, clayer, cat);
+		Vect_write_line(&Out, GV_POINT, Points, Cats);
+	    }
+	}
+	G_percent(nlines, nlines, 4);
+    }
+    else if (clmethod == CL_DBSCAN2) {
+	/* DBSCAN, but cluster size must be at least minpnts + 1 */
+	int *clcnt;
+
+	/* get epsilon */
+	if (dist_opt->answer) {
+	    eps = atof(dist_opt->answer);
+	    if (eps <= 0)
+		G_fatal_error(_("Option %s must be a positive number"), dist_opt->key);
+	}
+	else {
+	    int n;
+	    double dist, mean, min, max, sum, sumsq, sd;
+	    double *kd;
+	    int *ki;
+
+	    /* estimate epsilon */
+	    G_message(_("Estimating maximum distance ..."));
+	    kdtree_init_trav(&trav, kdt);
+	    c[2] = 0.0;
+	    n = 0;
+	    sum = sumsq = 0;
+	    min = 1.0 / 0.0;
+	    max = 0;
+	    kd = G_malloc(minpnts * sizeof(double));
+	    ki = G_malloc(minpnts * sizeof(int));
+	    i = 0;
+	    while (kdtree_traverse(&trav, c, &uid)) {
+		G_percent(i++, npoints, 4);
+
+		kdfound = kdtree_knn(kdt, c, ki, kd, minpnts, &uid);
+		if (kdfound) {
+		    dist = sqrt(kd[kdfound - 1]);
+		    sum += dist;
+		    sumsq += dist * dist;
+		    n++;
+		    if (min > dist)
+			min = dist;
+		    if (max < dist)
+			max = dist;
+		}
+	    }
+	    G_percent(npoints, npoints, 4);
+
+	    G_free(kd);
+	    G_free(ki);
+
+	    if (!n)
+		G_fatal_error(_("No neighbors found"));
+	    
+	    mean = sum / n;
+	    sd = sqrt(sumsq / n - mean * mean);
+	    eps = mean + 1.644854 * sd; /* 90% CI */
+	    eps = mean + 2.575829 * sd; /* 99% CI */
+	    
+	    if (eps > max)
+		eps = max;
+
+	    G_message(_("Distance to the %d nearest neighbor:"), minpnts);
+	    G_message(_("Min: %g, max: %g"), min, max);
+	    G_message(_("Mean: %g"), mean);
+	    G_message(_("Standard deviation: %g"), sd);
+
+	    G_message(_("Estimated maximum distance: %g"), eps);
+	}
+
+	/* create clusters */
+	G_message(_("Building clusters ..."));
+	clcnt = G_malloc((nlines + 1) * sizeof(int));
+	for (i = 0; i <= nlines; i++)
+	    clcnt[i] = 0;
+	nclusters = 0;
+	kdtree_init_trav(&trav, kdt);
+	c[2] = 0.0;
+	idx[0] = 0;
+	i = 0;
+	while (kdtree_traverse(&trav, c, &uid)) {
+	    G_percent(i++, npoints, 4);
+
+	    /* radius search */
+	    /* TODO: use knn search */
+	    kdfound = kdtree_dnn(kdt, c, &kduid, &kddist, eps, &uid);
+	    
+	    /* any neighbor within radius */
+	    if (kdfound > 0) {
+
+		OLD = cid[uid];
+		NEW = idx[OLD];
+		while (OLD != NEW) {
+		    OLD = NEW;
+		    NEW = idx[OLD];
+		}
+		cat = NEW;
+
+		/* find latest cluster */
+		for (j = 0; j < kdfound; j++) {
+		    OLD = cid[kduid[j]];
+		    NEW = idx[OLD];
+		    while (OLD != NEW) {
+			OLD = NEW;
+			NEW = idx[OLD];
+		    }
+		    if (cat < NEW) {
+			cat = NEW;
+		    }
+		}
+
+		if (cat == 0) {
+		    /* start new cluster */
+		    nclusters++;
+		    cat = nclusters;
+		    if (nclusters > nlines)
+			G_fatal_error(_("nlines: %d, nclusters: %d"), nlines, nclusters);
+		    idx[nclusters] = nclusters;
+		    cid[uid] = nclusters;
+		    clcnt[cat] = 1;
+		}
+
+		/* set or update cluster ids */
+		if (cid[uid] != 0) {
+		    /* relabel */
+		    OLD = cid[uid];
+		    NEW = idx[OLD];
+		    while (OLD != NEW) {
+			OLD = NEW;
+			NEW = idx[OLD];
+		    }
+		    idx[NEW] = cat;
+		}
+		else {
+		    cid[uid] = cat;
+		    clcnt[cat]++;
+		}
+
+		for (j = 0; j < kdfound; j++) {
+		    if (cid[kduid[j]] != 0) {
+			OLD = cid[kduid[j]];
+			NEW = idx[OLD];
+			while (OLD != NEW) {
+			    OLD = NEW;
+			    NEW = idx[OLD];
+			}
+			/* relabel */
+			idx[NEW] = cat;
+		    }
+		    else {
+		        cid[kduid[j]] = cat;
+			clcnt[cat]++;
+		    }
+		}
+		G_free(kddist);
+		G_free(kduid);
+	    }
+	}
+	G_percent(npoints, npoints, 4);
+
+	if (nclusters == 0) {
+	    G_message(_("No clusters found, adjust option %s"), dist_opt->key);
+	    Vect_close(&In);
+	    Vect_close(&Out);
+	    Vect_delete(output->answer);
+	    exit(EXIT_SUCCESS);
+	}
+
+	/* generate a renumbering scheme */
+	G_message(_("Generating renumbering scheme..."));
+	G_debug(1, "%d initial clusters", nclusters);
+	/* allocate final clump ID */
+	renumber = (int *) G_malloc((nclusters + 1) * sizeof(int));
+	renumber[0] = 0;
+	cat = 1;
+	G_percent(0, nclusters, 1);
+	for (i = 1; i <= nclusters; i++) {
+	    G_percent(i, nclusters, 4);
+	    OLD = i;
+	    NEW = idx[i];
+	    if (OLD != NEW) {
+		/* find valid clump ID */
+		while (OLD != NEW) {
+		    OLD = NEW;
+		    NEW = idx[OLD];
+		}
+		idx[i] = NEW;
+		clcnt[NEW] += clcnt[i];
+	    }
+	}
+	for (i = 1; i <= nclusters; i++) {
+	    OLD = i;
+	    NEW = idx[i];
+	    renumber[i] = 0;
+	    if (OLD == NEW && clcnt[NEW] > minpnts) {
+		/* set final clump id */
+		renumber[i] = cat++;
+	    }
+	}
+
+	nclusters = cat - 1;
+
+	/* write cluster ids */
+	G_message(_("Write out cluster ids ..."));
+	Vect_rewind(&In);
+	i = 0;
+	noutliers = 0;
+	while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	    G_percent(i++, nlines, 4);
+	    if (type == GV_POINT) {
+		cat = renumber[idx[cid[i]]];
+		if (!cat)
+		    noutliers++;
+		Vect_cat_set(Cats, clayer, cat);
+		Vect_write_line(&Out, GV_POINT, Points, Cats);
+	    }
+	}
+	G_percent(nlines, nlines, 4);
+    }
+    else if (clmethod == CL_OPTICS) {
+	/* OPTICS
+	 * each pair of points is either directly connected or 
+	 * connected by a chain of other points 
+	 * for each unprocessed point p
+	 * mark as processed, append to output list
+	 * core distance of p: distance to the k-th neighbor
+	 * q: neighbor of p
+	 * reachability of q: max(dist(p, q), coredist(p))
+	 * -> needs epsilon, otherwise always coredist(p)
+	 * for each unprocessed neighbor q
+	 * if q has not been reached yet, put q in min heap
+	 * if q's reachability can be reduced, put q with new reachability in min heap
+	 * proceed with point with smallest reachability
+	 * clusters:
+	 * plot x = position in output list, y = reachability
+	 * clusters = valleys of reachability in plot
+	 * hierarchical clusters: valleys in valleys
+	 */
+
+	double *kd;
+	int *ki;
+	int k, kdpnts;
+	int *clidx;
+	int *olist, nout;
+	double newrd;
+	int isout;
+
+	kd = G_malloc(minpnts * sizeof(double));
+	ki = G_malloc(minpnts * sizeof(int));
+
+	clp = G_malloc((npoints + 1) * sizeof(struct cl_pnt));
+	heapidx = G_malloc((npoints + 1) * sizeof(int));
+	olist = G_malloc((npoints + 1) * sizeof(int));
+	clidx = G_malloc((nlines + 1) * sizeof(int));
+	
+	heapsize = 0;
+
+	/* get epsilon */
+	eps = 0;
+	if (dist_opt->answer) {
+	    eps = atof(dist_opt->answer);
+	    if (eps <= 0)
+		G_fatal_error(_("Option %s must be a positive number"), dist_opt->key);
+	}
+
+	/* loading points */
+	G_message(_("Loading points ..."));
+	kdtree_init_trav(&trav, kdt);
+	c[2] = 0.0;
+	i = 0;
+	while (kdtree_traverse(&trav, c, &uid)) {
+	    G_percent(i, npoints, 4);
+	    
+	    clp[i].c[0] = c[0];
+	    clp[i].c[1] = c[1];
+	    clp[i].c[2] = c[2];
+	    clp[i].uid = uid;
+	    clp[i].cd = -1;
+	    clp[i].reach = -1;
+	    clp[i].prevpnt = -1;
+	    clidx[uid] = i;
+	    olist[i] = -1;
+	    
+	    i++;
+	}
+	G_percent(npoints, npoints, 4);
+	kdpnts = i;
+	G_debug(0, "%d points in k-d tree", kdpnts);
+
+	/* reachability network */
+	G_message(_("Reachability network ..."));
+	nout = 0;
+	for (i = 0; i < kdpnts; i++) {
+	    G_percent(i, kdpnts, 4);
+	    
+	    if (clp[i].cd > 0)
+		continue;
+
+	    /* knn search */
+	    uid = clp[i].uid;
+	    kdfound = kdtree_knn(kdt, clp[i].c, ki, kd, minpnts, &uid);
+	    if (kdfound < minpnts)
+		G_fatal_error(_("Not enough points found"));
+
+	    clp[i].cd = kd[minpnts - 1];
+	    /* no reachability for the seed point !!! */
+	    clp[i].reach = clp[i].cd; /* ok ? */
+	    olist[nout++] = i;
+	    
+	    /* initialize heap */
+	    newrd = clp[i].cd;
+	    for (j = 0; j < kdfound; j++) {
+		if (clp[clidx[ki[j]]].cd < 0) {
+		    /* deviation from OPTICS, 
+		     * creates nicer connectivity graph */
+		    newrd = kd[j];
+		    if (clp[clidx[ki[j]]].reach < 0 || clp[clidx[ki[j]]].reach > newrd) {
+			clp[clidx[ki[j]]].reach = newrd;
+			clp[clidx[ki[j]]].prevpnt = i;
+			add_pt(clidx[ki[j]]);
+		    }
+		}
+	    }
+
+	    while (heapsize) {
+		k = drop_pt();
+		if (k < 0 || k >= kdpnts)
+		    G_fatal_error("Invalid index");
+		if (clp[k].cd > 0)
+		    continue;
+
+		/* knn search */
+		uid = clp[k].uid;
+		kdfound = kdtree_knn(kdt, clp[k].c, ki, kd, minpnts, &uid);
+		if (kdfound < minpnts)
+		    G_fatal_error(_("Not enough points found"));
+
+		clp[k].cd = kd[minpnts - 1];
+		olist[nout++] = k;
+
+		newrd = clp[k].cd;
+		for (j = 0; j < kdfound; j++) {
+		    if (heapsize >= npoints)
+			G_fatal_error("Heap is too large");
+		    if (clp[clidx[ki[j]]].cd < 0) {
+			/* deviation from OPTICS, 
+			 * creates nicer connectivity graph */
+			newrd = kd[j];
+			if (clp[clidx[ki[j]]].reach < 0 || clp[clidx[ki[j]]].reach > newrd) {
+			    clp[clidx[ki[j]]].reach = newrd;
+			    clp[clidx[ki[j]]].prevpnt = k;
+			    add_pt(clidx[ki[j]]);
+			}
+		    }
+		}
+	    }
+	}
+	G_percent(kdpnts, kdpnts, 4);
+	G_debug(0, "nout: %d", nout);
+	if (nout != kdpnts)
+	    G_fatal_error("nout != kdpnts");
+
+	/* set cluster ids */
+	G_message(_("Set cluster ids ..."));
+	isout = 1;
+	nclusters = 0;
+	for (i = 0; i < kdpnts; i++) {
+	    G_percent(i, kdpnts, 4);
+
+	    if (eps > 0 && clp[olist[i]].reach > eps)
+		isout = 1;
+	    else {
+		if (isout || clp[olist[i]].prevpnt == -1) {
+		    isout = 0;
+		    nclusters++;
+		}
+		cid[clp[olist[i]].uid] = nclusters;
+	    }
+	}
+	G_percent(kdpnts, kdpnts, 4);
+
+	/* write cluster ids */
+	G_message(_("Write out cluster ids ..."));
+	Vect_rewind(&In);
+	i = 0;
+	noutliers = 0;
+	while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	    G_percent(i++, nlines, 4);
+	    if (type == GV_POINT) {
+		cat = cid[i];
+		if (!cat)
+		    noutliers++;
+		Vect_cat_set(Cats, clayer, cat);
+		Vect_write_line(&Out, GV_POINT, Points, Cats);
+	    }
+	}
+	G_percent(nlines, nlines, 4);
+    }
+    else if (clmethod == CL_OPTICS2) {
+	/* OPTICS modified, create separated reachability networks
+	 * for each point p
+	 *   get p's core distance
+	 *   get p's neighbors
+	 *   for each neighbor q
+	 *     new reachability of q: dist(p, q) 
+	 *     if q has been processed
+	 *       new reachability of q: max(coredist(q), dist(p, q))
+	 *     set or reduce q's reachability 
+	 *     connect q to p if q's reachability can be updated
+	 */
+
+	double *coredist;
+	double *reachability;
+	int *nextpnt;
+	double *kd;
+	int *ki;
+	double newrd;
+
+	coredist = G_malloc((nlines + 1) * sizeof(double));
+	reachability = G_malloc((nlines + 1) * sizeof(double));
+	nextpnt = G_malloc((nlines + 1) * sizeof(int));
+
+	kd = G_malloc(minpnts * sizeof(double));
+	ki = G_malloc(minpnts * sizeof(int));
+
+	for (i = 0; i <= nlines; i++) {
+	    coredist[i] = -1;
+	    reachability[i] = -1;
+	    nextpnt[i] = -1;
+	    cid[i] = 0;
+	    idx[i] = 0;
+	}
+
+	/* reachability network */
+	G_message(_("Reachability network ..."));
+	kdtree_init_trav(&trav, kdt);
+	c[2] = 0.0;
+	i = 0;
+	while (kdtree_traverse(&trav, c, &uid)) {
+	    G_percent(i++, npoints, 4);
+
+	    /* knn search */
+	    kdfound = kdtree_knn(kdt, c, ki, kd, minpnts, &uid);
+	    if (kdfound < minpnts)
+		G_fatal_error(_("Not enough points found"));
+	    coredist[uid] = kd[minpnts - 1];
+
+	    for (j = 0; j < kdfound; j++) {
+		/* new reachability */
+		newrd = kd[j];
+		if (coredist[ki[j]] > kd[j]) {
+		    /* do not connect a point to its own cluster
+		     * because points in its own cluster
+		     * have already been connected to this point
+		     * or reconnected */
+		    newrd = coredist[ki[j]];
+		}
+
+		if (reachability[ki[j]] == -1 || reachability[ki[j]] > newrd) {
+		    reachability[ki[j]] = newrd;
+		    nextpnt[ki[j]] = uid;
+
+		    /* no link - back link */
+		    if (nextpnt[uid] == ki[j]) {
+			if (coredist[ki[j]] == -1) {
+			    G_fatal_error(_("Neighbor point's core dist is -1"));
+			}
+			if (coredist[ki[j]] < coredist[uid]) {
+			    nextpnt[ki[j]] = -1;
+			    reachability[ki[j]] = -1;
+			    nextpnt[uid] = ki[j];
+			}
+			else {
+			    nextpnt[uid] = -1;
+			    reachability[uid] = -1;
+			    reachability[uid] = -1;
+			}
+		    }
+		}
+	    }
+	}
+	G_percent(npoints, npoints, 4);
+
+	/* create clusters from reachability network */
+	G_message(_("Building clusters ..."));
+	G_percent(0, nlines, 4);
+	for (i = 1; i <= nlines; i++) {
+
+	    G_percent(i, nlines, 4);
+
+	    if (cid[i] > 0 || coredist[i] == -1 || nextpnt[i] == -1)
+		continue;
+
+	    if (cid[nextpnt[i]] > 0) {
+		cid[i] = idx[cid[nextpnt[i]]];
+	    }
+	    else {
+		/* start new cluster */
+		nclusters++;
+		cid[i] = nclusters;
+		idx[nclusters] = nclusters;
+		uid = nextpnt[i];
+
+		while (uid > 0) {
+		    if (cid[uid] == 0) {
+			cid[uid] = nclusters;
+
+			uid = nextpnt[uid];
+		    }
+		    else {
+			/* relabel */
+			OLD = cid[uid];
+			NEW = idx[OLD];
+			while (OLD != NEW) {
+			    OLD = NEW;
+			    NEW = idx[OLD];
+			}
+			idx[NEW] = nclusters;
+			uid = nextpnt[uid];
+			uid = -1;
+		    }
+		}
+	    }
+	}
+
+	/* generate a renumbering scheme */
+	G_message(_("Generating renumbering scheme..."));
+	G_debug(1, "%d initial clusters", nclusters);
+	/* allocate final clump ID */
+	renumber = (int *) G_malloc((nclusters + 1) * sizeof(int));
+	renumber[0] = 0;
+	cat = 1;
+	G_percent(0, nclusters, 1);
+	for (i = 1; i <= nclusters; i++) {
+	    G_percent(i, nclusters, 4);
+	    OLD = i;
+	    NEW = idx[i];
+	    if (OLD != NEW) {
+		renumber[i] = 0;
+		/* find valid clump ID */
+		while (OLD != NEW) {
+		    OLD = NEW;
+		    NEW = idx[OLD];
+		}
+		idx[i] = NEW;
+	    }
+	    else
+		/* set final clump id */
+		renumber[i] = cat++;
+	}
+
+	nclusters = cat - 1;
+
+	/* write cluster ids */
+	G_message(_("Write out cluster ids ..."));
+	Vect_rewind(&In);
+	i = 0;
+	noutliers = 0;
+	while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	    G_percent(i++, nlines, 4);
+	    if (type == GV_POINT) {
+		cat = renumber[idx[cid[i]]];
+		if (!cat)
+		    noutliers++;
+		Vect_cat_set(Cats, clayer, cat);
+		Vect_write_line(&Out, GV_POINT, Points, Cats);
+	    }
+	}
+	G_percent(nlines, nlines, 4);
+    }
+    else if (clmethod == CL_DENSE) {
+	/* MATRUSKA 
+	 * clusters in clusters in clusters ...
+	 * calculate core density = distance to (minpnts - 1) for each point 
+	 * sort points ascending by core density
+	 * for each point in sorted list
+	 *   if point does not have a cluster id 
+	 *     start new cluster, cluster reachability is core density of this point
+	 *     connect all points within cluster reachability 
+	 *     add all connected points to list
+	 *     while list is not empty
+	 *       remove last point from list
+	 *       connect all points within cluster reachability 
+	 *       add all connected points to list
+	 *       */
+	int *clidx;
+	double *kd;
+	int *ki;
+	double cd;
+	int k, kdcount;
+	struct ilist *CList;
+
+	clp = G_malloc((nlines + 1) * sizeof(struct cl_pnt));
+	clidx = G_malloc((nlines + 1) * sizeof(int));
+
+	kd = G_malloc(minpnts * sizeof(double));
+	ki = G_malloc(minpnts * sizeof(int));
+
+	CList = G_new_ilist();
+
+	for (i = 0; i <= nlines; i++) {
+	    clp[i].c[0] = 0;
+	    clp[i].c[1] = 0;
+	    clp[i].c[2] = 0;
+	    clp[i].cd = -1;
+	    clp[i].uid = -1;
+	    clidx[i] = -1;
+	}
+
+	/* core density */
+	G_message(_("Core density ..."));
+	kdtree_init_trav(&trav, kdt);
+	c[2] = 0.0;
+	i = 0;
+	kdcount = 0;
+	uid = -1;
+	while (kdtree_traverse(&trav, c, &uid)) {
+	    G_percent(i++, npoints, 4);
+
+	    /* knn search */
+	    kdfound = kdtree_knn(kdt, c, ki, kd, minpnts, &uid);
+	    if (kdfound < minpnts)
+		G_fatal_error(_("Not enough points found"));
+
+	    cd = kd[minpnts - 1];
+
+	    /* list insert */
+	    for (j = kdcount; j > 0; j--) {
+		if (clp[j - 1].cd <= cd)
+		    break;
+		clp[j] = clp[j - 1];
+		clidx[clp[j].uid] = j;
+	    }
+	    clp[j].uid = uid;
+	    clp[j].c[0] = c[0];
+	    clp[j].c[1] = c[1];
+	    clp[j].c[2] = c[2];
+	    clp[j].cd = cd;
+	    clidx[clp[j].uid] = j;
+	    kdcount++;
+
+	}
+	G_percent(npoints, npoints, 4);
+
+	/* create clusters */
+	G_message(_("Building clusters ..."));
+	nclusters = 0;
+	for (i = 0; i < kdcount; i++) {
+	    G_percent(i, kdcount, 4);
+
+	    if (cid[clp[i].uid] > 0)
+		continue;
+
+	    /* knn search */
+	    kdfound = kdtree_knn(kdt, clp[i].c, ki, kd, minpnts, &clp[i].uid);
+	    if (kdfound < minpnts)
+		G_fatal_error(_("Not enough points found"));
+
+	    /* start a new cluster */
+	    uid = clp[i].uid;
+	    nclusters++;
+	    cat = nclusters;
+	    cid[uid] = cat;
+	    cd = clp[i].cd;
+	    CList->n_values = 0;
+	    for (j = 0; j < kdfound; j++) {
+		if (cid[ki[j]] == 0) {
+		    G_ilist_add(CList, clidx[ki[j]]);
+		    cid[ki[j]] = cat;
+		}
+	    }
+	    if (CList->n_values < minpnts) {
+		CList->n_values = 0;
+		nclusters--;
+		cid[uid] = 0;
+		for (j = 0; j < kdfound; j++) {
+		    if (cid[ki[j]] == cat) {
+			cid[ki[j]] = 0;
+		    }
+		}
+	    }
+
+	    while (CList->n_values) {
+		/* expand cluster */
+		CList->n_values--;
+		k = CList->value[CList->n_values];
+		if (k < 0)
+		    G_fatal_error("expand cluster: k < 0");
+		if (clp[k].uid < 1)
+		    G_fatal_error("expand cluster: clp[k].uid < 1");
+
+		kdfound = kdtree_knn(kdt, clp[k].c, ki, kd, minpnts, &clp[k].uid);
+		if (kdfound < minpnts)
+		    G_fatal_error(_("Not enough points found"));
+
+		for (j = 0; j < kdfound; j++) {
+		    if (kd[j] <= cd && cid[ki[j]] == 0) {
+			cid[ki[j]] = cat;
+			if (clidx[ki[j]] < 0)
+			    G_fatal_error("expand cluster ngbrs: clidx[ki[j]] < 0");
+			G_ilist_add(CList, clidx[ki[j]]);
+		    }
+		}
+	    }
+	}
+	G_percent(kdcount, kdcount, 4);
+
+	/* write cluster ids */
+	G_message(_("Write out cluster ids ..."));
+	Vect_rewind(&In);
+	i = 0;
+	noutliers = 0;
+	while ((type = Vect_read_next_line(&In, Points, Cats)) > 0) {
+	    G_percent(i++, nlines, 4);
+	    if (type == GV_POINT) {
+		cat = cid[i];
+		if (!cat)
+		    noutliers++;
+		Vect_cat_set(Cats, clayer, cat);
+		Vect_write_line(&Out, GV_POINT, Points, Cats);
+	    }
+	}
+	G_percent(nlines, nlines, 4);
+    }
+
+    if (!flag_attr->answer)
+	Vect_copy_tables(&In, &Out, 0);
+
+    /* Build topology for vector map and close them */
+    Vect_close(&In);
+    if (!flag_topo->answer)
+	Vect_build(&Out);
+    Vect_close(&Out);
+
+    G_message(_("%d clusters found"), nclusters);
+    G_message(_("%d outliers found"), noutliers);
+
+    exit(EXIT_SUCCESS);
+}
+
+/* min heap */
+
+/* compare heap points */
+int cmp_pnt(int a, int b)
+{
+    if (clp[a].reach < clp[b].reach)
+	return 1;
+    if (clp[a].reach > clp[b].reach)
+	return 0;
+    if (clp[a].uid < clp[b].uid)
+	return 1;
+    return 0;
+}
+
+/* standard sift-up routine for d-ary min heap */
+static int sift_up(int start)
+{
+    register int parent, child, child_added;
+
+    child = start;
+    child_added = heapidx[child];
+
+    while (child > 1) {
+	GET_PARENT(parent, child);
+
+	/* child smaller */
+	if (cmp_pnt(child_added, heapidx[parent])) {
+	    /* push parent point down */
+	    heapidx[child] = heapidx[parent];
+	    child = parent;
+	}
+	else
+	    /* no more sifting up, found new slot for child */
+	    break;
+    }
+
+    /* put point in new slot */
+    if (child < start) {
+	heapidx[child] = child_added;
+    }
+
+    return 0;
+}
+
+/* add point routine for min heap */
+int add_pt(int idx)
+{
+    /* add point to next free position */
+    heapsize++;
+
+    heapidx[heapsize] = idx;
+
+    /* sift up: move new point towards top of heap */
+    sift_up(heapsize);
+
+    return 0;
+}
+
+/* drop point routine for min heap */
+int drop_pt(void)
+{
+    register int child, childr, parent;
+    register int i, idx;
+
+    idx = heapidx[1];
+    if (heapsize == 1) {
+	heapidx[1] = -1;
+	heapsize = 0;
+	return idx;
+    }
+
+    /* start with root */
+    parent = 1;
+
+    /* sift down: move hole back towards bottom of heap */
+    while (GET_CHILD(child, parent) <= heapsize) {
+
+	i = child + 3;
+	for (childr = child + 1; childr <= heapsize && childr < i; childr++) {
+	    if (cmp_pnt(heapidx[childr], heapidx[child])) {
+		child = childr;
+	    }
+	}
+
+	/* move hole down */
+	heapidx[parent] = heapidx[child];
+	parent = child;
+    }
+
+    /* hole is in lowest layer, move to heap end */
+    if (parent < heapsize) {
+	heapidx[parent] = heapidx[heapsize];
+
+	/* sift up last swapped point, only necessary if hole moved to heap end */
+	sift_up(parent);
+    }
+
+    /* the actual drop */
+    heapsize--;
+
+    return idx;
+}
diff --git a/vector/v.cluster/v.cluster.html b/vector/v.cluster/v.cluster.html
new file mode 100644
index 0000000..b20dc09
--- /dev/null
+++ b/vector/v.cluster/v.cluster.html
@@ -0,0 +1,207 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.cluster</em> partitions a point cloud into clusters or clumps. 
+
+<p>
+If the minimum number of points is not specified with the <b>min</b> 
+option, the minimum number of points to constitute a cluster is 
+<i>number of dimensions + 1</i>, i.e. 3 for 2D points and 4 for 3D 
+points.
+
+<p>
+If the maximum distance is not specified with the <b>distance</b> 
+option, the maximum distance is estimated from the observed distances 
+to the neighbors using the upper 99% confidence interval.
+
+<p>
+<em>v.cluster</em> supports different methods for clustering. The 
+recommended methods are <b>method=dbscan</b> if all clusters should 
+have a density (maximum distance between points) not larger than 
+<b>distance</b> or <b>method=density</b> if clusters should be created 
+separately for each observed density (distance to the farthest neighbor).
+
+<h4>dbscan</h4>
+The <a href="http://en.wikipedia.org/wiki/DBSCAN">Density-Based Spatial 
+Clustering of Applications with Noise</a> is a commonly used clustering 
+algorithm. A new cluster is started for a point with at least 
+<i>min</i> - 1 neighbors within the maximum distance. These neighbors 
+are added to the cluster. The cluster is then expanded as long as at 
+least <i>min</i> - 1 neighbors are within the maximum distance for each 
+point already in the cluster.
+
+<h4>dbscan2</h4>
+Similar to <i>dbscan</i>, but here it is sufficient if the resultant 
+cluster consists of at least <b>min</b> points, even if no point in the 
+cluster has at least <i>min - 1</i> neighbors within <b>distance</b>.
+
+<h4>density</h4>
+This method creates clusters according to their point density. The 
+maximum distance is not used. Instead, the points are sorted ascending 
+by the distance to their farthest neighbor (core distance), inspecting 
+<i>min - 1</i> neighbors. The densest cluster is created first, using 
+as threshold the core distance of the seed point. The cluster is 
+expanded as for DBSCAN, with the difference that each cluster has its 
+own maximum distance. This method can identify clusters with different 
+densities and can create nested clusters.
+
+<h4>optics</h4>
+This method is <a 
+href="http://en.wikipedia.org/wiki/OPTICS_algorithm">Ordering Points to 
+Identify the Clustering Structure</a>. It is controlled by the number 
+of neighbor points (option <i>min</i> - 1). The core distance of a 
+point is the distance to the farthest neighbor. The reachability of a 
+point <i>q</i> is its distance from a point <i>p</i> (original optics: 
+max(core-distance(p), distance(p, q))). The aim of the <i>optics</i> 
+method is to reduce the reachability of each point. Each unprocessed 
+point is the seed for a new cluster. Its neighbors are added to a queue 
+sorted by smallest reachability if their reachability can be reduced. 
+The points in the queue are processed and their unprocessed neighbors 
+are added to a queue sorted by smallest reachability if their 
+reachability can be reduced.
+
+<p>
+The <i>optics</i> method does not create clusters itself, but produces 
+an ordered list of the points together with their reachability. The 
+output list is ordered according to the order of processing: the first 
+point processed is the first in the list, the last point processed is 
+the last in the list. Clusters can be extracted from this list by 
+identifying valleys in the points' reachability, e.g. by using a 
+threshold value. If a maximum distance is specified, this is used to 
+identify clusters, otherwise each separated network will constitute a 
+cluster.
+
+<p>
+The OPTICS algorithm uses each yet unprocessed point to start a new 
+cluster. The order of the input points is arbitrary and can thus 
+influence the resultant clusters.
+
+<h4>optics2</h4>
+<b>EXPERIMENTAL</b> This method is similar to OPTICS, minimizing the 
+reachability of each point. Points are reconnected if their 
+reachability can be reduced. Contrary to OPTICS, a cluster's seed is 
+not fixed but changed if possible. Each point is connected to another 
+point until the core of the cluster (seed point) is reached. 
+Effectively, the initial seed is updated in the process. Thus separated 
+networks of points are created, with each network representing a 
+cluster. The maximum distance is not used.
+
+<h2>EXAMPLE</h2>
+
+Analysis of random points for areas in areas of the vector 
+<i>urbanarea</i> (North Carolina sample dataset).
+
+<p>
+First generate 1000 random points within the areas the vector urbanarea
+and within the subregion, then do clustering and visualize the result:
+
+<div class="code"><pre>
+# pick a subregion of the vector urbanarea
+g.region -p n=272950 s=188330 w=574720 e=703090 res=10
+
+# create random points in areas
+v.random output=random_points npoints=1000 restrict=urbanarea
+
+# identify clusters
+v.cluster input=random_points output=clusters_optics method=optics
+
+# set random vector color table for the clusters
+v.colors map=clusters_optics layer=2 use=cat color=random
+
+# display in command line
+d.mon wx0
+
+# note the second layer and transparent (none) color of the circle border
+d.vect map=clusters_optics layer=2 icon=basic/point size=10 color=none
+</pre></div>
+
+
+<center>
+<img src="v_cluster_4_methods.png">
+<p><em>
+    Figure: Four different methods with default settings applied to
+    1000 random points generated in the same way as in the example.
+</em></p>
+</center>
+
+<!--
+g.region -p n=272950 s=188330 w=574720 e=703090 res=10
+v.random output=rand_clust npoints=1000 restrict=urbanarea
+
+v.cluster in=rand_clust out=rand_clusters_dbscan method=dbscan
+v.colors map=rand_clusters_dbscan layer=2 use=cat color=random
+
+v.cluster in=rand_clust out=rand_clusters_dbscan2 method=dbscan2
+v.colors map=rand_clusters_dbscan2 layer=2 use=cat color=random
+
+v.cluster in=rand_clust out=rand_clusters_density method=density
+v.colors map=rand_clusters_density layer=2 use=cat color=random
+
+v.cluster in=rand_clust out=rand_clusters_optics2 method=optics2
+v.colors map=rand_clusters_optics2 layer=2 use=cat color=random
+
+v.cluster in=rand_clust out=rand_clusters_optics method=optics
+v.colors map=rand_clusters_optics layer=2 use=cat color=random
+
+# seems we have to remove first to avoid drawing into an old image
+rm v_cluster_4_methods.png
+
+d.mon cairo out=v_cluster_4_methods.png
+
+# the font doesn't work
+d.font "LiberationSans-Regular"
+
+d.frame frame=dbscan at=50,100,0,50 -c
+d.vect map=rand_clusters_dbscan layer=2 icon=basic/point size=10 color=none
+d.text text="dbscan" at=5,5 size=10 bgcolor=white
+
+d.frame frame=optics at=50,100,50,100 -c
+d.vect map=rand_clusters_optics layer=2 icon=basic/point size=10 color=none
+d.text text="optics" at=5,5 size=10 bgcolor=white
+
+d.frame frame=density at=0,50,0,50 -c
+d.vect map=rand_clusters_density layer=2 icon=basic/point size=10 color=none
+d.text text="density" at=5,5 size=10 bgcolor=white
+
+d.frame frame=optics2 at=0,50,50,100 -c
+d.vect map=rand_clusters_optics2 layer=2 icon=basic/point size=10 color=none
+d.text text="optics2" at=5,5 size=10 bgcolor=white
+
+d.mon stop=cairo
+-->
+
+Generate random points for analysis (100 points per area), use different
+method for clustering and visualize using color stored the attribute table.
+<div class="code"><pre>
+# pick a subregion of the vector urbanarea
+g.region -p n=272950 s=188330 w=574720 e=703090 res=10
+
+# create clustered points
+v.random output=rand_clust npoints=100 restrict=urbanarea -a
+
+# identify clusters
+v.cluster in=rand_clust out=rand_clusters method=dbscan
+
+# create colors for clusters
+v.db.addtable map=rand_clusters layer=2 columns="cat integer,grassrgb varchar(11)"
+v.colors map=rand_clusters layer=2 use=cat color=random rgb_column=grassrgb
+
+# display with your preferred method
+# remember to use the second layer and RGB column
+# for example use
+d.vect map=rand_clusters layer=2 color=none rgb_column=grassrgb icon=basic/circle
+</pre></div>
+
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.clump.html">r.clump</a>,
+<a href="v.hull.html">v.hull</a>,
+<a href="v.distance.html">v.distance</a>
+</em>
+
+<h2>AUTHOR</h2>
+
+Markus Metz
+
+<p><i>Last changed: $Date: 2015-09-07 10:09:13 +0200 (Mon, 07 Sep 2015) $</i>
diff --git a/vector/v.cluster/v_cluster_4_methods.png b/vector/v.cluster/v_cluster_4_methods.png
new file mode 100644
index 0000000..e93b897
Binary files /dev/null and b/vector/v.cluster/v_cluster_4_methods.png differ
diff --git a/vector/v.colors.out/v.colors.out.html b/vector/v.colors.out/v.colors.out.html
index b3e3c06..2653a02 100644
--- a/vector/v.colors.out/v.colors.out.html
+++ b/vector/v.colors.out/v.colors.out.html
@@ -25,4 +25,4 @@ v.colors map=soils_wake rules=rules.txt
 
 Martin Landa, Czech Technical University in Prague, Czech Republic
 
-<p><i>Last changed: $Date: 2014-12-09 19:46:50 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-09 19:39:37 +0100 (Tue, 09 Dec 2014) $</i>
diff --git a/vector/v.colors/v.colors.html b/vector/v.colors/v.colors.html
index 25c8e28..62484c9 100644
--- a/vector/v.colors/v.colors.html
+++ b/vector/v.colors/v.colors.html
@@ -134,4 +134,4 @@ help people select good color schemes for maps and other graphics.
 Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2015-02-13 16:16:22 +0100 (Fri, 13 Feb 2015) $</i>
+<i>Last changed: $Date: 2015-02-13 16:14:07 +0100 (Fri, 13 Feb 2015) $</i>
diff --git a/vector/v.db.connect/v.db.connect.html b/vector/v.db.connect/v.db.connect.html
index 1c65248..28327a2 100644
--- a/vector/v.db.connect/v.db.connect.html
+++ b/vector/v.db.connect/v.db.connect.html
@@ -208,4 +208,4 @@ v.db.connect map=mytable driver=pg database="host=localhost,dbname=meteo" \
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2015-10-01 23:15:07 +0200 (Thu, 01 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-10-01 23:06:38 +0200 (Thu, 01 Oct 2015) $</i>
diff --git a/vector/v.db.select/main.c b/vector/v.db.select/main.c
index 7d8bea2..a7de22d 100644
--- a/vector/v.db.select/main.c
+++ b/vector/v.db.select/main.c
@@ -2,13 +2,14 @@
 /***************************************************************
  *
  * MODULE:       v.db.select
- * 
+ *
  * AUTHOR(S):    Radim Blazek
  *               OGR support by Martin Landa <landa.martin gmail.com>
  *               -f flag by Huidae Cho <grass4u gmail.com>
- *               
+ *               group option by Luca Delucchi <lucadeluge gmail.com>
+ *
  * PURPOSE:      Print vector attributes
- *               
+ *
  * COPYRIGHT:    (C) 2005-2009, 2011-2014 by the GRASS Development Team
  *
  *               This program is free software under the GNU General
@@ -32,7 +33,7 @@ int main(int argc, char **argv)
 {
     struct GModule *module;
     struct Option *map_opt, *field_opt, *fs_opt, *vs_opt, *nv_opt, *col_opt,
-	*where_opt, *file_opt;
+	*where_opt, *file_opt, *group_opt;
     struct Flag *c_flag, *v_flag, *r_flag, *f_flag;
     dbDriver *driver;
     dbString sql, value_string;
@@ -57,18 +58,25 @@ int main(int argc, char **argv)
     module->description = _("Prints vector map attributes.");
 
     map_opt = G_define_standard_option(G_OPT_V_MAP);
+    map_opt->guisection = _("Main");
 
     field_opt = G_define_standard_option(G_OPT_V_FIELD);
     field_opt->guisection = _("Selection");
 
     col_opt = G_define_standard_option(G_OPT_DB_COLUMNS);
     col_opt->guisection = _("Selection");
-    
+
     where_opt = G_define_standard_option(G_OPT_DB_WHERE);
     where_opt->guisection = _("Selection");
-    
+
+    group_opt = G_define_option();
+    group_opt->key = "group";
+    group_opt->required = NO;
+    group_opt->description = _("GROUP BY conditions of SQL statement without 'group by' keyword");
+    group_opt->guisection = _("Selection");
+
     fs_opt = G_define_standard_option(G_OPT_F_SEP);
-    fs_opt->guisection = _("Format");
+    fs_opt->guisection = _("Main");
 
     vs_opt = G_define_standard_option(G_OPT_F_SEP);
     vs_opt->key = "vertical_separator";
@@ -79,12 +87,13 @@ int main(int argc, char **argv)
     nv_opt = G_define_standard_option(G_OPT_M_NULL_VALUE);
     nv_opt->guisection = _("Format");
 
-    file_opt = G_define_standard_option(G_OPT_F_OUTPUT); 
+    file_opt = G_define_standard_option(G_OPT_F_OUTPUT);
     file_opt->key = "file";
-    file_opt->required = NO; 
-    file_opt->description = 
-	_("Name for output file (if omitted or \"-\" output to stdout)"); 
-    
+    file_opt->required = NO;
+    file_opt->guisection = _("Main");
+    file_opt->description =
+	_("Name for output file (if omitted or \"-\" output to stdout)");
+
     r_flag = G_define_flag();
     r_flag->key = 'r';
     r_flag->description =
@@ -112,12 +121,12 @@ int main(int argc, char **argv)
 	exit(EXIT_FAILURE);
 
     /* set input vector map name and mapset */
-    if (file_opt->answer && strcmp(file_opt->answer, "-") != 0) { 
-	if (NULL == freopen(file_opt->answer, "w", stdout)) { 
-	    G_fatal_error(_("Unable to open file <%s> for writing"), file_opt->answer); 
-	} 
-    } 
-    
+    if (file_opt->answer && strcmp(file_opt->answer, "-") != 0) {
+	if (NULL == freopen(file_opt->answer, "w", stdout)) {
+	    G_fatal_error(_("Unable to open file <%s> for writing"), file_opt->answer);
+	}
+    }
+
     min_box = line_box = NULL;
     list_lines = NULL;
 
@@ -137,7 +146,7 @@ int main(int argc, char **argv)
         vs = G_option_to_separator(vs_opt);
     else
         vs = NULL;
-    
+
     db_init_string(&sql);
     db_init_string(&value_string);
 
@@ -186,6 +195,15 @@ int main(int argc, char **argv)
 	G_free(buf);
     }
 
+    if (group_opt->answer) {
+        char *buf = NULL;
+
+        buf = G_malloc((strlen(group_opt->answer) + 8));
+        sprintf(buf, " GROUP BY %s", group_opt->answer);
+        db_append_string(&sql, buf);
+        G_free(buf);
+    }
+
     if (db_open_select_cursor(driver, &sql, &cursor, DB_SEQUENTIAL) != DB_OK)
 	G_fatal_error(_("Unable to open select cursor"));
 
diff --git a/vector/v.db.select/testsuite/test_v_db_select.py b/vector/v.db.select/testsuite/test_v_db_select.py
new file mode 100644
index 0000000..8f205bc
--- /dev/null
+++ b/vector/v.db.select/testsuite/test_v_db_select.py
@@ -0,0 +1,218 @@
+"""
+Name:      vdbselect_test
+Purpose:   v.db.select decimation test
+
+Author:    Luca Delucchi
+Copyright: (C) 2015 by Luca Delucchi and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import SimpleModule
+
+out_group = """CZab
+CZam
+CZba
+CZbb
+CZbf
+CZbg
+CZbl
+CZc
+CZfg
+CZfv
+CZfv1
+CZfv2
+CZg
+CZgms
+CZig
+CZiv
+CZlg
+CZma
+CZma1
+CZma2
+CZmd
+CZmd1
+CZmd2
+CZmd3
+CZmg
+CZms
+CZmv
+CZmv1
+CZpg
+CZph
+CZq
+CZtp
+CZv
+CZve
+CZy
+Ccl
+Ccu
+Chg
+Cr
+Cs
+DOg
+DOgb
+DSc
+DSg
+DSs
+Dqd
+Dsc
+Jd
+Kb
+Kc
+Km
+Kp
+Mc
+OCg
+OCgm
+Org
+PPg
+PPgb
+PPmg
+PzZg
+PzZm
+PzZq
+PzZu
+Qp
+SOgg
+Sg
+TRc
+TRcc
+TRcp
+TRcs
+TRd
+TRdc
+TRdp
+TRds
+Tec
+Tecs
+Tob
+Tor
+Tp
+Tpa
+Tpy
+Tpyw
+Tt
+Ybam
+Ybgg
+Ybrg
+Yg
+Ygg
+Ymam
+Ymg
+Ytg
+ZYbA
+ZYba
+ZYbn
+Za
+Zaba
+Zabg
+Zabs
+Zata
+Zatb
+Zatm
+Zats
+Zatw
+Zb
+Zbg
+Zbt
+Zch
+Zchs
+Zco
+Zd
+Zf
+Zg
+Zgma
+Zgmf
+Zgmg
+Zgms
+Zgmu
+Zgmw
+Zgs
+Zhha
+Zlm
+Zm
+Zman
+Zmb
+Zmf
+Zml
+Znt
+Zrb
+Zs
+Zsl
+Zsp
+Zsr
+Zss
+Zsw
+Zwc
+Zwe
+bz
+"""
+
+out_where = """1076|366545504|324050.96875|1077|1076|Zwe|366545512.376|324050.97237
+1123|1288.555298|254.393951|1124|1123|Zwe|1288.546525|254.393964
+1290|63600420|109186.835938|1291|1290|Zwe|63600422.4739|109186.832069
+"""
+
+out_sep = """1076,366545504,324050.96875,1077,1076,Zwe,366545512.376,324050.97237
+1123,1288.555298,254.393951,1124,1123,Zwe,1288.546525,254.393964
+1290,63600420,109186.835938,1291,1290,Zwe,63600422.4739,109186.832069
+"""
+
+
+class SelectTest(TestCase):
+    """Test case for v.db.select"""
+
+    outfile = 'select.csv'
+    invect = 'geology'
+    col = 'GEO_NAME'
+    val = 'Zwe'
+
+    def testRun(self):
+        """Basic test of v.db.select"""
+        self.assertModule('v.db.select', map=self.invect)
+
+    def testFileExists(self):
+        """This function checks if the output file is written correctly"""
+        self.runModule('v.db.select', map=self.invect, file=self.outfile)
+        self.assertFileExists(self.outfile)
+        if os.path.isfile(self.outfile):
+            os.remove(self.outfile)
+
+    def testGroup(self):
+        """Testing v.db.select with group option"""
+        sel = SimpleModule('v.db.select', flags='c', map=self.invect,
+                           columns=self.col, group=self.col)
+        sel.run()
+        self.assertLooksLike(reference=out_group, actual=sel.outputs.stdout)
+
+    def testWhere(self):
+        """Testing v.db.select with where option"""
+        sel = SimpleModule('v.db.select', flags='c', map=self.invect,
+                           where="{col}='{val}'".format(col=self.col,
+                                                        val=self.val))
+        sel.run()
+        self.assertLooksLike(reference=out_where, actual=sel.outputs.stdout)
+
+    def testSeparator(self):
+        sel = SimpleModule('v.db.select', flags='c', map=self.invect,
+                           where="{col}='{val}'".format(col=self.col,
+                                                        val=self.val),
+                           separator='comma')
+        sel.run()
+        self.assertLooksLike(reference=out_sep, actual=sel.outputs.stdout)
+
+    def testComma(self):
+        sel = SimpleModule('v.db.select', flags='c', map=self.invect,
+                           where="{col}='{val}'".format(col=self.col,
+                                                        val=self.val),
+                           separator=',')
+        sel.run()
+        self.assertLooksLike(reference=out_sep, actual=sel.outputs.stdout)
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.db.select/v.db.select.html b/vector/v.db.select/v.db.select.html
index f832139..67d97b9 100644
--- a/vector/v.db.select/v.db.select.html
+++ b/vector/v.db.select/v.db.select.html
@@ -65,6 +65,67 @@ cat|GEONAMEID|NAME|ASCIINAME|ALTERNATEN|FEATURECLA|FEATURECOD|...
 ...
 </pre></div>
 
+<h3>Select features with distinct road names</h3>
+<div class="code"><pre>
+v.db.select map=roadsmajor columns=ROAD_NAME group=ROAD_NAME
+ROAD_NAME
+
+I-40
+I-440
+I-540
+NC-231
+NC-39
+NC-42
+...
+</pre></div>
+
+It is also possible to combine with <em>where</em> option
+<div class="code"><pre>
+v.db.select map=roadsmajor columns=ROAD_NAME,MULTILANE group=ROAD_NAME where='ROAD_NAME is not null'
+ROAD_NAME|MULTILANE
+I-40|yes
+I-440|yes
+I-540|yes
+NC-231|no
+NC-39|no
+NC-42|no
+NC-50|no
+NC-54|no
+NC-55|no
+NC-96|no
+NC-97|no
+NC-98|no
+US-1|
+US-401|no
+US-64|yes
+US-70|yes
+</pre></div>
+
+It can also use more columns in <em>group</em> option
+<div class="code"><pre>
+v.db.select map=roadsmajor columns=ROAD_NAME,MULTILANE group=ROAD_NAME,MULTILANE where='ROAD_NAME is not null'
+ROAD_NAME|MULTILANE
+I-40|yes
+I-440|yes
+I-540|yes
+NC-231|no
+NC-39|no
+NC-42|no
+NC-50|no
+NC-54|no
+NC-55|no
+NC-96|no
+NC-97|no
+NC-98|no
+US-1|
+US-1|yes
+US-401|no
+US-401|yes
+US-64|yes
+US-70|yes
+</pre></div>
+
+
 <h2>SEE ALSO</h2>
 
 <em>
@@ -75,6 +136,8 @@ cat|GEONAMEID|NAME|ASCIINAME|ALTERNATEN|FEATURECLA|FEATURECOD|...
 
 Radim Blazek, ITC-Irst, Trento, Italy<br>
 Minimal region extent added by Martin Landa,
-FBK-irst (formerly ITC-irst), Trento, Italy (2008/08)
+FBK-irst (formerly ITC-irst), Trento, Italy (2008/08)<br>
+Group option added by Luca Delucchi,
+Fondazione Edmund Mach, Trento, Italy (2015/12)
 
-<p><i>Last changed: $Date: 2014-11-28 15:41:54 +0100 (Fri, 28 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2015-12-02 16:47:13 +0100 (Wed, 02 Dec 2015) $</i>
diff --git a/vector/v.decimate/Makefile b/vector/v.decimate/Makefile
new file mode 100644
index 0000000..c686273
--- /dev/null
+++ b/vector/v.decimate/Makefile
@@ -0,0 +1,14 @@
+
+MODULE_TOPDIR = ../..
+
+PGM = v.decimate
+
+LIBES = $(VECTORLIB) $(DBMILIB) $(RASTERLIB) $(GISLIB) $(BTREE2LIB) $(SEGMENTLIB)
+DEPENDENCIES = $(VECTORDEP) $(DBMIDEP) $(RASTERDEP) $(GISDEP)  $(SEGMENTDEP)
+
+EXTRA_INC = $(VECT_INC)
+EXTRA_CFLAGS = $(VECT_CFLAGS)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+default: cmd
diff --git a/vector/v.decimate/count_decimation.c b/vector/v.decimate/count_decimation.c
new file mode 100644
index 0000000..6c5fc36
--- /dev/null
+++ b/vector/v.decimate/count_decimation.c
@@ -0,0 +1,134 @@
+/****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+/* TODO: change int */
+/* TODO: revise names */
+
+#include "count_decimation.h"
+
+#include <grass/gis.h>
+
+#include <stdlib.h>
+
+
+void count_decimation_init(struct CountDecimationControl *control,
+                           int *skip, int *preserve,
+                           int *offset, int *limit)
+{
+    control->skip_every = 0;
+    control->preserve_every = 0;
+    /* counter used by both but that's ok, skip and preserve are exclusive */
+    control->every_counter = 0;
+    control->n_count_filtered = 0;
+    control->offset_n = 0;
+    control->offset_n_counter = 0;
+    control->limit_n = 0;
+    control->limit_n_counter = 0;
+    if (skip)
+        control->skip_every = *skip;
+    if (preserve)
+        control->preserve_every = *preserve;
+    if (offset)
+        control->offset_n = *offset;
+    if (limit)
+        control->limit_n = *limit;
+}
+
+
+int count_decimation_is_valid(struct CountDecimationControl *control)
+{
+    if (control->skip_every == 1)
+        return FALSE;
+    if (control->skip_every && control->preserve_every > 1)
+        return FALSE;
+    return TRUE;
+}
+
+
+int count_decimation_is_noop(struct CountDecimationControl *control)
+{
+    if (control->skip_every < 2 && control->preserve_every < 2
+            && !control->offset_n && !control->limit_n)
+        return TRUE;
+    return FALSE;
+}
+
+void count_decimation_init_from_str(struct CountDecimationControl *control,
+                                    const char *skip, const char *preserve,
+                                    const char *offset, const char *limit)
+{
+    control->skip_every = 0;
+    control->preserve_every = 0;
+    control->every_counter = 0;
+    control->n_count_filtered = 0;
+    control->offset_n = 0;
+    control->offset_n_counter = 0;
+    control->limit_n = 0;
+    control->limit_n_counter = 0;
+    /* TODO: atoi is probably not appropriate */
+    if (skip)
+        control->skip_every = atoi(skip);
+    if (preserve)
+        control->preserve_every = atoi(preserve);
+    if (offset)
+        control->offset_n = atoi(offset);
+    if (limit)
+        control->limit_n = atoi(limit);
+}
+
+
+/* TODO: eliminate noop cases */
+int count_decimation_is_out(struct CountDecimationControl *control)
+{
+    if (control->offset_n) {
+        if (control->offset_n_counter < control->offset_n) {
+            control->offset_n_counter++;
+            return TRUE;
+        }
+        else {
+            control->offset_n = 0;  /* disable offset check */
+        }
+    }
+    if (control->skip_every) {
+        control->every_counter++;
+        if (control->every_counter == control->skip_every) {
+            control->n_count_filtered++;
+            control->every_counter = 0;
+            return TRUE;
+        }
+    }
+    else if (control->preserve_every) {
+        control->every_counter++;
+        if (control->every_counter == control->preserve_every) {
+            control->every_counter = 0;
+        }
+        else {
+            control->n_count_filtered++;
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+
+int count_decimation_is_end(struct CountDecimationControl *control)
+{
+    if (control->limit_n) {
+        control->limit_n_counter++;
+        /* this matches the last successfully imported point */
+        if (control->limit_n_counter == control->limit_n)
+            return TRUE;
+    }
+    return FALSE;
+}
diff --git a/vector/v.decimate/count_decimation.h b/vector/v.decimate/count_decimation.h
new file mode 100644
index 0000000..12e9b0c
--- /dev/null
+++ b/vector/v.decimate/count_decimation.h
@@ -0,0 +1,43 @@
+/****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef GRASS_COUNT_DECIMATION_H
+#define GRASS_COUNT_DECIMATION_H
+
+/* TODO: change int to ul/ull */
+/* TODO: revise names (now partially on some vars in v.in.lidar code) */
+
+struct CountDecimationControl {
+    int offset_n;
+    int offset_n_counter;
+    int skip_every;
+    int preserve_every;
+    int every_counter;
+    int n_count_filtered;
+    int limit_n;
+    int limit_n_counter;
+};
+
+void count_decimation_init(struct CountDecimationControl *control,
+                           int *skip, int *preserve,
+                           int *offset, int *limit);
+int count_decimation_is_valid(struct CountDecimationControl *control);
+int count_decimation_is_noop(struct CountDecimationControl *control);
+void count_decimation_init_from_str(struct CountDecimationControl *control,
+                                    const char *skip, const char *preserve,
+                                    const char *offset, const char *limit);
+int count_decimation_is_out(struct CountDecimationControl *control);
+int count_decimation_is_end(struct CountDecimationControl *control);
+
+#endif /* GRASS_COUNT_DECIMATION_H */
diff --git a/vector/v.decimate/grid_decimation.c b/vector/v.decimate/grid_decimation.c
new file mode 100644
index 0000000..b31dfa1
--- /dev/null
+++ b/vector/v.decimate/grid_decimation.c
@@ -0,0 +1,179 @@
+/****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#include "grid_decimation.h"
+
+#include <stdlib.h>
+
+
+/* max size: rows * cols < max of size_t (using 1D array) */
+void grid_decimation_create(struct GridDecimation *grid_decimation,
+                            size_t rows, size_t cols)
+{
+    grid_decimation->grid_points =
+        G_calloc(rows * cols, sizeof(struct DecimationPoint *));
+    grid_decimation->grid_sizes = G_calloc(rows * cols, sizeof(size_t));
+    grid_decimation->rows = rows;
+    grid_decimation->cols = cols;
+    grid_decimation->if_add_point = NULL;
+    grid_decimation->on_add_point = NULL;
+    grid_decimation->if_context = NULL;
+    grid_decimation->on_context = NULL;
+}
+
+
+void grid_decimation_destroy(struct GridDecimation *grid_decimation)
+{
+    /* TODO: we could also offer mode without dealloc (faster) */
+    int row, col;
+    size_t point, npoints;
+    for (row = 0; row < grid_decimation->rows; row++) {
+        for (col = 0; col < grid_decimation->cols; col++) {
+            /* TODO: make index function */
+            size_t index = row * grid_decimation->cols + col;
+            if ((npoints = grid_decimation->grid_sizes[index])) {
+                /* delete points in list */
+                for (point = 0; point < npoints; point++)
+                    G_free(grid_decimation->grid_points[index][point]);
+                /* delete list */
+                G_free(grid_decimation->grid_points[index]);
+            }
+        }
+    }
+    G_free(grid_decimation->grid_points);
+    G_free(grid_decimation->grid_sizes);
+}
+
+
+/* TODO: use Cell_head as storage? */
+void grid_decimation_create_from_region(struct GridDecimation
+                                        *grid_decimation,
+                                        struct Cell_head *region)
+{
+    grid_decimation_create(grid_decimation, region->rows, region->cols);
+    grid_decimation_set_region(grid_decimation, region->west, region->east,
+                               region->south, region->north, region->ew_res,
+                               region->ns_res);
+}
+
+
+/* TODO: change order of ns_res and ew_res to match xy */
+void grid_decimation_set_region(struct GridDecimation *grid_decimation,
+                                double minx, double maxx, double miny,
+                                double maxy, double ew_res, double ns_res)
+{
+    grid_decimation->minx = minx;
+    grid_decimation->maxx = maxx;
+    grid_decimation->miny = miny;
+    grid_decimation->maxy = maxy;
+    grid_decimation->ns_res = ns_res;
+    grid_decimation->ew_res = ew_res;
+}
+
+
+void grid_decimation_create_list_with_point(struct GridDecimation
+                                            *grid_decimation, size_t index,
+                                            struct DecimationPoint *point,
+                                            size_t npoints)
+{
+    struct DecimationPoint **point_list =
+        G_malloc(1 * sizeof(struct DecimationPoint *));
+    point_list[0] = point;
+    grid_decimation->grid_points[index] = point_list;
+    grid_decimation->grid_sizes[index] = 1;
+}
+
+
+void grid_decimation_add_point_to_list(struct GridDecimation *grid_decimation,
+                                       size_t index,
+                                       struct DecimationPoint *point,
+                                       size_t npoints)
+{
+    /* TODO: this might be too much reallocation */
+    /* TODO: line_ptns struct could be reused, it is not meant for this but it would work */
+    struct DecimationPoint **point_list =
+        G_realloc(grid_decimation->grid_points[index],
+                  (npoints + 1) * sizeof(struct DecimationPoint *));
+
+    point_list[npoints] = point;
+    grid_decimation->grid_points[index] = point_list;
+    grid_decimation->grid_sizes[index] = npoints + 1;
+}
+
+
+static size_t grid_decimation_xy_to_index(struct GridDecimation
+                                          *grid_decimation, double x,
+                                          double y)
+{
+    /* TODO: test x, y */
+    int row = (y - grid_decimation->miny) / grid_decimation->ns_res;
+    int col = (x - grid_decimation->minx) / grid_decimation->ew_res;
+
+    if (row < 0 || row > grid_decimation->rows || col < 0 ||
+        col > grid_decimation->cols) {
+        G_fatal_error
+            ("Row (%d) or column (%d) outside of range (0 - %d, 0 - %d)", row,
+             col, grid_decimation->rows, grid_decimation->cols);
+    }
+    size_t index = row * grid_decimation->cols + col;
+
+    /* TODO: are the tests really needed, especially the second one? */
+    if (row * grid_decimation->cols + col >
+        grid_decimation->rows * grid_decimation->cols) {
+        G_fatal_error("Index (%d) out of range (max: %d)",
+                      row * grid_decimation->cols + col,
+                      grid_decimation->rows * grid_decimation->cols);
+    }
+    return index;
+}
+
+
+void grid_decimation_try_add_point(struct GridDecimation *grid_decimation,
+                                   int cat, double x, double y, double z, void *point_data)
+{
+    size_t index = grid_decimation_xy_to_index(grid_decimation, x, y);
+    int npoints = grid_decimation->grid_sizes[index];
+
+    /* TODO: when max is 1, we don't have to store the point at all */
+    if (grid_decimation->max_points && grid_decimation->max_points == npoints)
+        return;
+
+    struct DecimationPoint *point = G_malloc(sizeof(struct DecimationPoint));
+
+    point->cat = cat;
+    point->x = x;
+    point->y = y;
+    point->z = z;
+
+    if (!npoints) {
+        grid_decimation_create_list_with_point(grid_decimation, index, point,
+                                               npoints);
+        if (grid_decimation->on_add_point)
+            grid_decimation->on_add_point(point, point_data, grid_decimation->on_context);
+    }
+    else {
+        if (grid_decimation->if_add_point
+            (point, point_data, grid_decimation->grid_points[index], npoints,
+             grid_decimation->if_context)) {
+            grid_decimation_add_point_to_list(grid_decimation, index, point,
+                                              npoints);
+            if (grid_decimation->on_add_point)
+                grid_decimation->on_add_point(point, point_data,
+                                              grid_decimation->on_context);
+        }
+        else {
+            G_free(point);
+        }
+    }
+}
diff --git a/vector/v.decimate/grid_decimation.h b/vector/v.decimate/grid_decimation.h
new file mode 100644
index 0000000..aaaaff5
--- /dev/null
+++ b/vector/v.decimate/grid_decimation.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef GRASS_GRID_DECIMATION_H
+#define GRASS_GRID_DECIMATION_H
+
+#include <grass/gis.h>
+
+struct DecimationPoint
+{
+    int cat;
+    double x;
+    double y;
+    double z;
+};
+
+
+struct GridDecimation
+{
+    struct DecimationPoint ***grid_points;
+    size_t *grid_sizes;
+    int rows;
+    int cols;
+    int max_points;
+    double minx;
+    double maxx;
+    double miny;
+    double maxy;
+    double ns_res;
+    double ew_res;
+    int (*if_add_point) (struct DecimationPoint * point, void *point_data,
+                         struct DecimationPoint ** point_list, size_t npoints,
+                         void *context);
+    void (*on_add_point) (struct DecimationPoint * point, void *point_data, void *context);
+    void *if_context;
+    void *on_context;
+};
+
+
+/* max size: rows * cols < max of size_t (using 1D array) */
+void grid_decimation_create(struct GridDecimation *grid_decimation,
+                            size_t rows, size_t cols);
+
+void grid_decimation_create_from_region(struct GridDecimation
+                                        *grid_decimation,
+                                        struct Cell_head *region);
+
+/* TODO: possible use (also?) Cell_head as input or storage */
+void grid_decimation_set_region(struct GridDecimation *grid_decimation,
+                                double minx, double maxx, double miny,
+                                double maxy, double ns_res, double ew_res);
+
+void grid_decimation_create_list_with_point(struct GridDecimation
+                                            *grid_decimation, size_t index,
+                                            struct DecimationPoint *point,
+                                            size_t npoints);
+
+void grid_decimation_add_point_to_list(struct GridDecimation *grid_decimation,
+                                       size_t index,
+                                       struct DecimationPoint *point,
+                                       size_t npoints);
+
+void grid_decimation_try_add_point(struct GridDecimation *grid_decimation,
+                                   int cat, double x, double y, double z, void *point_data);
+
+void grid_decimation_destroy(struct GridDecimation *grid_decimation);
+
+#endif /* GRASS_GRID_DECIMATION_H */
diff --git a/vector/v.decimate/main.c b/vector/v.decimate/main.c
new file mode 100644
index 0000000..7bdfc9a
--- /dev/null
+++ b/vector/v.decimate/main.c
@@ -0,0 +1,465 @@
+/*
+ ****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General
+ *               Public License (>=v2). Read the file COPYING that
+ *               comes with GRASS for details.
+ *
+ *****************************************************************************/
+
+
+/* using the most-specific-first order of includes */
+#include "count_decimation.h"
+#include "grid_decimation.h"
+
+#include <grass/gis.h>
+#include <grass/raster.h>
+#include <grass/vector.h>
+#include <grass/glocale.h>
+
+#include <stdlib.h>
+
+
+struct DecimationContext
+{
+    int use_z;                  /*!< TRUE or FALSE */
+    double zdiff;
+    int unique_cats;            /*!< TRUE or FALSE */
+};
+
+
+static int if_add_point(struct DecimationPoint *point, void *point_data,
+                        struct DecimationPoint **point_list, size_t npoints,
+                        void *context)
+{
+    /* according to cat (which could be cluster, return or class) */
+    struct DecimationContext *dc = context;
+    double zdiff = dc->zdiff;
+    int j;
+
+    /* TODO: use something like Vect_cat_in_cat_list? */
+    for (j = 0; j < npoints; j++) {
+        if (dc->use_z && fabs(point_list[j]->z - point->z) < zdiff)
+            return FALSE;
+        if (dc->unique_cats && point_list[j]->cat == point->cat)
+            return FALSE;
+    }
+    return TRUE;
+}
+
+
+struct WriteContext
+{
+    struct Map_info *voutput;
+    struct line_pnts *line;
+    struct line_cats *cats;
+    int write_cats;
+};
+
+
+static void write_point(struct WriteContext *context, int cat, double x,
+                        double y, double z, struct line_cats *cats)
+{
+    if (Vect_append_point(context->line, x, y, z) != 1)
+        G_fatal_error
+            ("Unable to create a point in vector map (probably out of memory)");
+    struct line_cats *cats_to_write = context->cats;
+    /* only when writing cats use the ones from parameter, otherwise
+     * use the default (which is assumed to be empty) */
+    if (context->write_cats && cats)
+        cats_to_write = cats;
+    Vect_write_line(context->voutput, GV_POINT, context->line, cats_to_write);
+    Vect_reset_line(context->line);
+}
+
+
+static void on_add_point(struct DecimationPoint *point, void *point_data, void *context)
+{
+    write_point((struct WriteContext *)context, point->cat, point->x, point->y,
+                point->z, (struct line_cats *)point_data);
+}
+
+/* TODO: these have overlap with vector lib, really needed? */
+static int point_in_region_2d(struct Cell_head *region, double x, double y)
+{
+    if (x > region->east || x < region->west || y < region->south ||
+        y > region->north)
+        return FALSE;
+    return TRUE;
+}
+
+
+static int point_in_region_3d(struct Cell_head *region, double x, double y,
+                              double z)
+{
+    if (x > region->east || x < region->west || y < region->south ||
+        y > region->north || z > region->top || z < region->bottom)
+        return FALSE;
+    return TRUE;
+}
+
+/* TODO: max tries per grid cell (useful?) */
+
+
+int main(int argc, char **argv)
+{
+    struct GModule *module;
+    struct Option *map_opt, *voutput_opt;
+    struct Option *field_opt, *cats_opt;
+    struct Option *skip_opt, *preserve_opt, *offset_opt, *limit_opt;
+    struct Option *zdiff_opt, *limit_per_cell_opt, *zrange_opt;
+    struct Flag *grid_decimation_flg, *first_point_flg, *cat_in_grid_flg;
+    struct Flag *use_z_flg, *nocats_flag, *notopo_flag;
+    struct Map_info vinput, voutput;
+
+    G_gisinit(argv[0]);
+
+    module = G_define_module();
+    G_add_keyword(_("vector"));
+    G_add_keyword(_("LIDAR"));
+    G_add_keyword(_("generalization"));
+    G_add_keyword(_("decimation"));
+    G_add_keyword(_("extract"));
+    G_add_keyword(_("select"));
+    G_add_keyword(_("points"));
+    module->label = _("Decimates a point cloud");
+    module->description = _("Copies points from one vector to another"
+                            " while applying different decimations");
+
+    map_opt = G_define_standard_option(G_OPT_V_INPUT);
+
+    field_opt = G_define_standard_option(G_OPT_V_FIELD_ALL);
+    field_opt->required = NO;
+
+    voutput_opt = G_define_standard_option(G_OPT_V_OUTPUT);
+
+    zrange_opt = G_define_option();
+    zrange_opt->key = "zrange";
+    zrange_opt->type = TYPE_DOUBLE;
+    zrange_opt->required = NO;
+    zrange_opt->key_desc = "min,max";
+    zrange_opt->description = _("Filter range for z data (min,max)");
+    zrange_opt->guisection = _("Selection");
+
+    cats_opt = G_define_standard_option(G_OPT_V_CATS);
+    cats_opt->guisection = _("Selection");
+
+    /* TODO: -r region only (now enforced for grid), spatial */
+
+    skip_opt = G_define_option();
+    skip_opt->key = "skip";
+    skip_opt->type = TYPE_INTEGER;
+    skip_opt->multiple = NO;
+    skip_opt->required = NO;
+    skip_opt->label = _("Throw away every n-th point");
+    skip_opt->description =
+        _("For example, 5 will import 80 percent of points. "
+          "If not specified, all points are copied");
+    skip_opt->guisection = _("Count");
+
+    preserve_opt = G_define_option();
+    preserve_opt->key = "preserve";
+    preserve_opt->type = TYPE_INTEGER;
+    preserve_opt->multiple = NO;
+    preserve_opt->required = NO;
+    preserve_opt->label = _("Preserve only every n-th point");
+    preserve_opt->description =
+        _("For example, 4 will import 25 percent of points. "
+          "If not specified, all points are copied");
+    preserve_opt->guisection = _("Count");
+
+    offset_opt = G_define_option();
+    offset_opt->key = "offset";
+    offset_opt->type = TYPE_INTEGER;
+    offset_opt->multiple = NO;
+    offset_opt->required = NO;
+    offset_opt->label = _("Skip first n points");
+    offset_opt->description =
+        _("Skips the given number of points at the beginning.");
+    offset_opt->guisection = _("Count");
+
+    limit_opt = G_define_option();
+    limit_opt->key = "limit";
+    limit_opt->type = TYPE_INTEGER;
+    limit_opt->multiple = NO;
+    limit_opt->required = NO;
+    limit_opt->label = _("Copy only n points");
+    limit_opt->description = _("Copies only the given number of points");
+    limit_opt->guisection = _("Count");
+
+    zdiff_opt = G_define_option();
+    zdiff_opt->key = "zdiff";
+    zdiff_opt->type = TYPE_DOUBLE;
+    zdiff_opt->required = NO;
+    zdiff_opt->label = _("Minimal difference of z values");
+    zdiff_opt->description =
+        _("Minimal difference between z values in grid-based decimation");
+    zdiff_opt->guisection = _("Grid");
+
+    limit_per_cell_opt = G_define_option();
+    limit_per_cell_opt->key = "cell_limit";
+    limit_per_cell_opt->type = TYPE_INTEGER;
+    limit_per_cell_opt->multiple = NO;
+    limit_per_cell_opt->required = NO;
+    limit_per_cell_opt->label = _("Preserve only n points per grid cell");
+    limit_per_cell_opt->description =
+        _("Preserves only the given number of points per grid cell in grid-based decimation");
+    limit_per_cell_opt->guisection = _("Grid");
+
+    grid_decimation_flg = G_define_flag();
+    grid_decimation_flg->key = 'g';
+    grid_decimation_flg->description = _("Apply grid-based decimation");
+    grid_decimation_flg->guisection = _("Grid");
+
+    first_point_flg = G_define_flag();
+    first_point_flg->key = 'f';
+    first_point_flg->description =
+        _("Use only first point in grid cell during grid-based decimation");
+    first_point_flg->guisection = _("Grid");
+
+    cat_in_grid_flg = G_define_flag();
+    cat_in_grid_flg->key = 'c';
+    cat_in_grid_flg->description = _("Only one point per cat in grid cell");
+    cat_in_grid_flg->guisection = _("Grid");
+
+    use_z_flg = G_define_flag();
+    use_z_flg->key = 'z';
+    use_z_flg->description = _("Use z in grid decimation");
+    use_z_flg->guisection = _("Grid");
+
+    nocats_flag = G_define_flag();
+    nocats_flag->key = 'x';
+    nocats_flag->label =
+        _("Store only the coordinates, throw away categories");
+    nocats_flag->description =
+        _("Do not story any categories even if they are present in input data");
+    nocats_flag->guisection = _("Speed");
+
+    notopo_flag = G_define_standard_flag(G_FLG_V_TOPO);
+    notopo_flag->guisection = _("Speed");
+
+    /* here we have different decimations but also selections/filters */
+    G_option_required(skip_opt, preserve_opt, offset_opt, limit_opt,
+                      grid_decimation_flg, zrange_opt, cats_opt, NULL);
+    /* this doesn't play well with GUI dialog unless we add defaults to options
+     * the default values would solve it but looks strange in the manual 
+     * this we use explicit check in the code */
+    /* G_option_exclusive(skip_opt, preserve_opt, NULL); */
+    G_option_requires(grid_decimation_flg, first_point_flg,
+                      limit_per_cell_opt, use_z_flg, zdiff_opt,
+                      cat_in_grid_flg, NULL);
+    G_option_requires(first_point_flg, grid_decimation_flg, NULL);
+    G_option_requires(limit_per_cell_opt, grid_decimation_flg, NULL);
+    G_option_requires(use_z_flg, grid_decimation_flg, NULL);
+    G_option_requires(zdiff_opt, grid_decimation_flg, NULL);
+    G_option_requires(cat_in_grid_flg, grid_decimation_flg, NULL);
+    G_option_exclusive(zdiff_opt, first_point_flg, limit_per_cell_opt, NULL);
+
+    if (G_parser(argc, argv))
+        exit(EXIT_FAILURE);
+
+    Vect_check_input_output_name(map_opt->answer, voutput_opt->answer,
+                                 G_FATAL_EXIT);
+
+    if (Vect_open_old2(&vinput, map_opt->answer, "", field_opt->answer) < 0)
+        G_fatal_error(_("Unable to open vector map <%s>"), map_opt->answer);
+    int layer = Vect_get_field_number(&vinput, field_opt->answer);
+
+    if (layer < 1 && (cats_opt->answer || cat_in_grid_flg->answer))
+        G_fatal_error(_("Input layer must be set to a particular layer"
+                        ", not <%s>, when using <%s> option or <-%c> flag"),
+                      field_opt->answer, cats_opt->key, cat_in_grid_flg->key);
+
+    struct cat_list *allowed_cats = NULL;
+
+    if (layer > 0)
+        allowed_cats = Vect_cats_set_constraint(&vinput, layer, NULL,
+                                                cats_opt->answer);
+
+    struct line_pnts *line = Vect_new_line_struct();
+    struct line_cats *cats = Vect_new_cats_struct();
+
+    double zrange_min, zrange_max;
+    int use_zrange = FALSE;
+
+    if (zrange_opt->answer != NULL) {
+        if (zrange_opt->answers[0] == NULL || zrange_opt->answers[1] == NULL)
+            G_fatal_error(_("Invalid zrange <%s>"), zrange_opt->answer);
+        sscanf(zrange_opt->answers[0], "%lf", &zrange_min);
+        sscanf(zrange_opt->answers[1], "%lf", &zrange_max);
+        /* for convenience, switch order to make valid input */
+        if (zrange_min > zrange_max) {
+            double tmp = zrange_max;
+
+            zrange_max = zrange_min;
+            zrange_min = tmp;
+        }
+        use_zrange = TRUE;
+    }
+
+    int use_z = FALSE;
+    double zdiff;
+
+    if (use_z_flg->answer) {
+        use_z = TRUE;
+        zdiff = atof(zdiff_opt->answer);
+    }
+
+    /* z input checks */
+    if (!Vect_is_3d(&vinput)) {
+        if (use_z)
+            G_fatal_error(_("Cannot use z for decimation, input is not 3D"));
+        if (use_zrange)
+            G_fatal_error(_("Cannot select by z range, input is not 3D"));
+    }
+
+    int do_grid_decimation = FALSE;
+
+    if (grid_decimation_flg->answer)
+        do_grid_decimation = TRUE;
+    int limit_per_cell = 0;
+
+    if (limit_per_cell_opt->answer)
+        limit_per_cell = atof(limit_per_cell_opt->answer);
+    if (first_point_flg->answer)
+        limit_per_cell = 1;
+
+    /* when user enters 1 or zero e.g. for skip, we accept it and use it
+     * but the is no advantage, however, we count it as an error when
+     * no other options are selected
+     */
+    struct CountDecimationControl count_decimation_control;
+
+    count_decimation_init_from_str(&count_decimation_control,
+                                   skip_opt->answer, preserve_opt->answer,
+                                   offset_opt->answer, limit_opt->answer);
+    if (!count_decimation_is_valid(&count_decimation_control))
+        G_fatal_error(_("Settings for count-based decimation are not valid"));
+    /* TODO: implement count_decimation_is_invalid_reason() */
+    /* the following must be in sync with required options */
+    if (count_decimation_is_noop(&count_decimation_control) &&
+        !grid_decimation_flg->answer && !zrange_opt->answer &&
+        !cats_opt->answer)
+        G_fatal_error(_("Settings for count-based decimation would cause it"
+                        " to do nothing and no other options has been set."));
+
+    struct Cell_head comp_region;
+    Rast_get_window(&comp_region);
+    if (use_zrange) {
+        comp_region.bottom = zrange_min;
+        comp_region.top = zrange_max;
+    }
+    struct GridDecimation grid_decimation;
+    struct DecimationContext decimation_context;
+    struct WriteContext write_context;
+
+    write_context.line = Vect_new_line_struct();
+    write_context.cats = Vect_new_cats_struct();
+    if (!nocats_flag->answer)
+        write_context.write_cats = TRUE;
+    else
+        write_context.write_cats = FALSE;
+    write_context.voutput = &voutput;
+    if (do_grid_decimation) {
+        grid_decimation_create_from_region(&grid_decimation, &comp_region);
+        grid_decimation.max_points = limit_per_cell;
+
+        if (cat_in_grid_flg->answer)
+            decimation_context.unique_cats = TRUE;
+        else
+            decimation_context.unique_cats = FALSE;
+        decimation_context.use_z = FALSE;
+        if (use_z) {
+            decimation_context.use_z = TRUE;
+            decimation_context.zdiff = zdiff;
+        }
+        grid_decimation.if_add_point = if_add_point;
+        grid_decimation.if_context = &decimation_context;
+
+        grid_decimation.on_add_point = on_add_point;
+        grid_decimation.on_context = &write_context;
+    }
+
+    if (Vect_open_new(&voutput, voutput_opt->answer, Vect_is_3d(&vinput)) < 0)
+        G_fatal_error(_("Unable to create vector map <%s>"),
+                      voutput_opt->answer);
+
+    /* some constraints can be set on the map */
+    Vect_set_constraint_type(&vinput, GV_POINT);
+    /* noop for layer=-1 and non-native format, skips lines without cat */
+    Vect_set_constraint_field(&vinput, layer);
+    /* TODO: replace region checks by Vect_set_constraint_region? */
+
+    int ltype;
+    int cat;
+
+    while (TRUE) {
+        ltype = Vect_read_next_line(&vinput, line, cats);
+        if (ltype == -1)
+            G_fatal_error(_("Unable to read vector map"));
+        if (ltype == -2)
+            break;              /* end of the map */
+
+        double x, y, z;
+        Vect_line_get_point(line, 0, &x, &y, &z);
+
+        /* selections/filters */
+        /* TODO: use region only when actually needed */
+        if (!use_zrange && !point_in_region_2d(&comp_region, x, y))
+            continue;
+        /* TODO: allow zrange to be used without region */
+        if (use_zrange && !point_in_region_3d(&comp_region, x, y, z))
+            continue;
+        if (allowed_cats &&
+            !Vect_cats_in_constraint(cats, layer, allowed_cats))
+            continue;
+
+        /* decimation */
+        if (count_decimation_is_out(&count_decimation_control))
+            continue;
+
+        /* TODO: test: skip points without category, unless layer=-1 */
+        /* Use cases:
+         * - all points have category (correct)
+         * - no categories for any point (correct, layer=-1 required)
+         * - some points miss category (not handled)
+         * Here we assume that only one cat has meaning for grid decimation.
+         * If no layer available, cat contains junk and shouldn't be used.
+         */
+        if (layer > 0)
+            Vect_cat_get(cats, layer, &cat);
+
+        /* using callback when using grid, direct call otherwise */
+        if (do_grid_decimation)
+            grid_decimation_try_add_point(&grid_decimation, cat, x, y, z,
+                                          cats);
+        else
+            write_point(&write_context, cat, x, y, z, cats);
+
+        if (count_decimation_is_end(&count_decimation_control))
+            break;
+    }
+
+    /* partially unnecessary as deallocated by the system */
+    Vect_destroy_line_struct(line);
+    Vect_destroy_cats_struct(cats);
+    Vect_destroy_line_struct(write_context.line);
+    Vect_destroy_cats_struct(write_context.cats);
+
+    Vect_hist_command(&voutput);
+
+    Vect_close(&vinput);
+    if (!notopo_flag->answer)
+        Vect_build(&voutput);
+    Vect_close(&voutput);
+
+    if (do_grid_decimation)
+        grid_decimation_destroy(&grid_decimation);
+
+    return EXIT_SUCCESS;
+}
diff --git a/vector/v.decimate/v.decimate.html b/vector/v.decimate/v.decimate.html
new file mode 100644
index 0000000..625424d
--- /dev/null
+++ b/vector/v.decimate/v.decimate.html
@@ -0,0 +1,138 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.decimate</em> reduces number of points in the input vector map
+and copies them over to the output vector map. Different point decimation
+techniques can be applied to reduce the number of points.
+
+<p>
+Two main decimation techniques are:
+<ul>
+<li>count-based decimation (<b>skip</b>, <b>preserve</b>, <b>offset</b>
+    and <b>limit</b> options)
+<li>grid-based decimation (<b>-g</b> flag)
+</ul>
+
+<p>
+The grid-based decimation will remove points based on:
+<ul>
+<li>similar z coordinates (<b>-z</b> flag and <b>zdiff</b> option)
+<li>same categories (<b>-c</b> flag)
+<li>count of points (<b>-f</b> flag and <b>cell_limit</b> option)
+</ul>
+
+<p>
+The grid-based decimation is currently using a 2D grid, so the points
+are placed and compared within this 2D grid. The comparison can happen
+using z coordinates or categories.
+Note that although the grid is only 2D, the module works with 3D points.
+
+<p>
+The grid-based decimation extent and resolution depend on the current
+computational region as set by <em><a href="g.region.html">g.region</a></em>.
+As a consequence, the output is limited only to computational region
+in this case.
+
+<p>
+TODO: Currently, any output is limited by the region.
+
+<p>
+The count-based decimation result highly depends on how the data are
+ordered in the input. This applies especially to <b>offset</b> and
+<b>limit</b> options where the resulting shape and densities can be
+surprising. The options <b>skip</b> and <b>preserve</b> are influenced
+by order of points in a similar way but they usually keep relative
+density of points (which may or may not be desired).
+On the other hand, the grid-based decimation will generally result in
+more even density of output points (see Figure 1).
+
+<p>
+Besides decimation, point count can be reduced by applying different
+selections or filters, these are:
+<ul>
+<li>selection by category (<b>cats</b> option)
+<li>selection by z values (<b>zrange</b> option)
+</ul>
+
+
+<h2>NOTES</h2>
+
+The grid-based decimation requires all points which will be saved in output
+to fit into the computer's memory (RAM).
+It is advantageous to have the region only in the area
+with the points, otherwise unnecessary memory is allocated.
+Higher (finer) resolutions and higher amount of preserved points
+per cell require more memory.
+The count-based decimation has no limitation regarding the available memory.
+
+<p>
+Significant speed up can be gained using <b>-b</b> flag which disables
+building of topology for the output vector map. This may limit the use
+of the vector map by some modules, but for example, this module works
+without topology as well.
+
+
+<h2>EXAMPLES</h2>
+
+Keep only every forth point, throw away the rest:
+
+<div class="code"><pre>
+v.decimate input=points_all output=points_decimated_every_4 preserve=4
+</pre></div>
+
+<p>
+Keep only points within a grid cell (given by the current computational
+region) which has unique categories (e.g. LIDAR classes):
+
+<div class="code"><pre>
+v.decimate input=points_all output=points_decimated_unique_cats layer=1 -g -c
+</pre></div>
+
+<center>
+    <img src="v_decimate_original.png">
+    <img src="v_decimate_count.png">
+    <img src="v_decimate_grid_cat.png">
+    <p><em>
+        Figure 1: Comparison of original points, decimation result
+        with every forth point preserved, and grid-based decimation
+        result with points with unique categories in each grid cell
+    </em></p>
+</center>
+
+<p>
+Keep only points with category 2 and keep only approximately 80% of the points:
+
+<div class="code"><pre>
+v.decimate input=points_all output=points_decimated_ skip=5 cats=2 layer=1
+</pre></div>
+
+<!--
+g.region map=elev_lid792_1m
+v.colors map=points_all use=cat rules=file.txt
+2 brown
+3:5 green
+6 red
+9 blue
+11 black
+13-14 gray
+d.vect map=points color=none width=1 icon=basic/point
+-->
+
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="v.extract.html">v.extract</a>,
+<a href="v.outlier.html">v.outlier</a>,
+<a href="v.select.html">v.select</a>,
+<a href="v.category.html">v.category</a>,
+<a href="v.build.html">v.build</a>,
+<a href="v.in.lidar.html">v.in.lidar</a>,
+<a href="g.region.html">g.region</a>
+</em>
+
+
+<h2>AUTHORS</h2>
+
+Vaclav Petras, <a href="http://geospatial.ncsu.edu/osgeorel/">NCSU OSGeoREL</a>
+
+<p><i>Last changed: $Date: 2015-10-01 03:55:00 +0200 (Thu, 01 Oct 2015) $</i>
diff --git a/vector/v.decimate/v_decimate_count.png b/vector/v.decimate/v_decimate_count.png
new file mode 100644
index 0000000..37045cd
Binary files /dev/null and b/vector/v.decimate/v_decimate_count.png differ
diff --git a/vector/v.decimate/v_decimate_grid_cat.png b/vector/v.decimate/v_decimate_grid_cat.png
new file mode 100644
index 0000000..68a379f
Binary files /dev/null and b/vector/v.decimate/v_decimate_grid_cat.png differ
diff --git a/vector/v.decimate/v_decimate_original.png b/vector/v.decimate/v_decimate_original.png
new file mode 100644
index 0000000..1a164d5
Binary files /dev/null and b/vector/v.decimate/v_decimate_original.png differ
diff --git a/vector/v.delaunay/v.delaunay.html b/vector/v.delaunay/v.delaunay.html
index bc96079..b845371 100644
--- a/vector/v.delaunay/v.delaunay.html
+++ b/vector/v.delaunay/v.delaunay.html
@@ -39,4 +39,4 @@ Paul Kelly, Mentor<br>
 Based on "dct" by Geoff Leach, Department of Computer Science, RMIT.<br>
 
 <p>
-<i>Last changed: $Date: 2014-01-07 00:15:11 +0100 (Tue, 07 Jan 2014) $</i>
+<i>Last changed: $Date: 2015-08-10 15:56:03 +0200 (Mon, 10 Aug 2015) $</i>
diff --git a/vector/v.distance/testsuite/test_areas_points.py b/vector/v.distance/testsuite/test_areas_points.py
new file mode 100644
index 0000000..e90aadc
--- /dev/null
+++ b/vector/v.distance/testsuite/test_areas_points.py
@@ -0,0 +1,150 @@
+"""
+TEST:      v.distance
+
+AUTHOR(S): Vaclav Petras
+
+PURPOSE:   Test v.distance 2D and 3D points with areas
+
+COPYRIGHT: (C) 2015 Vaclav Petras, and by the GRASS Development Team
+
+           This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.gunittest.gmodules import call_module
+
+areas = """\
+VERTI:
+B  6
+ 11.6         29.55
+ 12.01        27.01
+ 15.25        26.68
+ 16.32        29.42
+ 13.49        31.06
+ 11.6         29.55
+C  1 1
+ 13.85        28.69
+ 1     1
+B  10
+ 18.49        34.1
+ 21.73        28.85
+ 28.24        33.28
+ 26.6         37.17
+ 23.9         34.92
+ 22.75        36.92
+ 18.86        37.17
+ 14.1         36.19
+ 14.19        32.54
+ 18.49        34.1
+C  1 1
+ 21.11        34.03
+ 1     2
+"""
+
+points = """\
+13.45|29.96
+14.64|27.5
+18.04|35.2
+21.56|34.22
+23.2|32.13
+26.48|35.98
+14.76|33.44
+21.85|29.38
+"""
+
+points_3d = """\
+13.45|29.96|200
+14.64|27.5|250
+18.04|35.2|893
+21.56|34.22|350
+23.2|32.13|296
+26.48|35.98|250
+14.76|33.44|258
+21.85|29.38|257
+"""
+
+table_ref = """\
+1|South-west area
+2|South-west area
+3|North-east area
+4|North-east area
+5|North-east area
+6|North-east area
+7|North-east area
+8|North-east area
+"""
+
+
+class TestPointsAndAreas(TestCase):
+    """Test how points get attributes from areas
+
+    Created for #2734 (3D point inside area is classified as outside)
+    https://trac.osgeo.org/grass/ticket/2734
+    """
+    # TODO: replace by unified handing of maps
+    to_remove = []
+    areas = "test_vdistance_areas"
+    points = "test_vdistance_points"
+    points_3d = "test_vdistance_points_3d"
+
+    @classmethod
+    def setUpClass(cls):
+        """Create vector maps (areas with attributes)"""
+        cls.runModule('v.in.ascii', input='-', output=cls.areas,
+                      format='standard', stdin=areas)
+        cls.to_remove.append(cls.areas)
+        cls.runModule('v.db.addtable', map=cls.areas,
+                      columns="number INTEGER, label VARCHAR(250)")
+        # TODO: this should be done in more effective way
+        cls.runModule('v.db.update', map=cls.areas, column='label',
+                      value="South-west area", where="cat=1")
+        cls.runModule('v.db.update', map=cls.areas, column='label',
+                      value="North-east area", where="cat=2")
+
+        cls.runModule('v.in.ascii', input='-', output=cls.points,
+                      format='point', separator='pipe', flags='t',
+                      stdin=points)
+        cls.to_remove.append(cls.points)
+        cls.runModule('v.db.addtable', map=cls.points,
+                      columns="area_label VARCHAR(250)")
+
+        cls.runModule('v.in.ascii', input='-', output=cls.points_3d,
+                      format='point', separator='pipe', flags='zt', z=3,
+                      stdin=points_3d)
+        cls.to_remove.append(cls.points_3d)
+        cls.runModule('v.db.addtable', map=cls.points_3d,
+                      columns="area_label VARCHAR(250)")
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove vector maps"""
+        if cls.to_remove:
+            cls.runModule('g.remove', flags='f', type='vector',
+                          name=','.join(cls.to_remove), verbose=True)
+
+    def test_area_attrs_to_2d_points(self):
+        """Check that values are uploaded to 2D points in areas (dmax=0)"""
+        # using call_module because PyGRASS doen't accept form_
+        call_module('v.distance', from_=self.points, to=self.areas,
+                    dmax=0, upload='to_attr',
+                    column='area_label', to_column='label')
+        # using call_module because it is easier
+        table = call_module('v.db.select', map=self.points,
+                            separator='pipe', flags='c')
+        self.assertMultiLineEqual(table, table_ref)
+
+    def test_area_attrs_to_3d_points(self):
+        """Check that values are uploaded to 3D points in areas (dmax=0)"""
+        call_module('v.distance', from_=self.points_3d, to=self.areas,
+                    dmax=0, upload='to_attr',
+                    column='area_label', to_column='label')
+        table = call_module('v.db.select', map=self.points_3d,
+                            separator='pipe', flags='c')
+        self.assertMultiLineEqual(table, table_ref)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.distance/v.distance.html b/vector/v.distance/v.distance.html
index 4320572..4543514 100644
--- a/vector/v.distance/v.distance.html
+++ b/vector/v.distance/v.distance.html
@@ -225,4 +225,4 @@ Improved processing speed: Markus Metz<br>
 Distance from any feature to any feature: Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-05-14 19:12:38 +0200 (Sat, 14 May 2016) $</i>
+<i>Last changed: $Date: 2016-05-14 19:12:07 +0200 (Sat, 14 May 2016) $</i>
diff --git a/vector/v.drape/v.drape.html b/vector/v.drape/v.drape.html
index 8d4e514..5c11614 100644
--- a/vector/v.drape/v.drape.html
+++ b/vector/v.drape/v.drape.html
@@ -75,4 +75,4 @@ Updated for GRASS 7 by Martin Landa, Czech Technical University in
 Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/vector/v.edit/testsuite/select_all_flag.sh b/vector/v.edit/testsuite/select_all_flag.sh
new file mode 100755
index 0000000..16b0959
--- /dev/null
+++ b/vector/v.edit/testsuite/select_all_flag.sh
@@ -0,0 +1,35 @@
+#!/usr/bin/env bash
+
+# this is testtest for #2309
+# Add a select all flag to v.edit
+# https://trac.osgeo.org/grass/ticket/2309
+
+set -e
+set -x
+
+v.in.ascii input=- output=vedit_test separator=comma <<EOF
+913240.0,250614.0
+913250.0,250628.0
+EOF
+v.edit -r map=vedit_test tool=catadd layer=2 cats=10
+
+expected="10
+10"
+out=$(v.category option=print layer=2 input=vedit_test)
+
+if [[ ${out} != "${expected}" ]]; then
+    echo "FAIL: Expected '${expected}' not equals to output '${out}'"
+    exit 1
+fi
+
+# test also the original categories
+expected="1
+2"
+out=$(v.category option=print layer=1 input=vedit_test)
+
+if [[ ${out} != "${expected}" ]]; then
+    echo "FAIL: Expected '${expected}' not equals to output '${out}'"
+    exit 1
+fi
+
+g.remove -f type=vector name=vedit_test
diff --git a/vector/v.edit/v.edit.html b/vector/v.edit/v.edit.html
index 7ba37f4..2735599 100644
--- a/vector/v.edit/v.edit.html
+++ b/vector/v.edit/v.edit.html
@@ -436,4 +436,4 @@ Initial updates: Jachym Cepicky, Mendel University of Agriculture and Forestry i
 Major update by Martin Landa, FBK-irst (formerly ITC-irst), Trento, Italy
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/vector/v.external.out/v.external.out.html b/vector/v.external.out/v.external.out.html
index 473ea21..665067b 100644
--- a/vector/v.external.out/v.external.out.html
+++ b/vector/v.external.out/v.external.out.html
@@ -205,4 +205,4 @@ Martin Landa, Czech Technical University in Prague, Czech Republic
 (development supported by Fondazione Edmund Mach and Comune di Trento, Italy)
 
 <p>
-<i>Last changed: $Date: 2015-11-24 09:08:30 +0100 (Tue, 24 Nov 2015) $</i>
+<i>Last changed: $Date: 2015-11-24 09:07:58 +0100 (Tue, 24 Nov 2015) $</i>
diff --git a/vector/v.external/args.c b/vector/v.external/args.c
index a3568e8..a078ba8 100644
--- a/vector/v.external/args.c
+++ b/vector/v.external/args.c
@@ -17,7 +17,8 @@ void parse_args(int argc, char **argv,
 				  "\t\tMapInfo File: directory containing a mapinfo file\n"
 				  "\t\tPostGIS database: connection string, eg. 'PG:dbname=db user=grass'");
     options->dsn->required = YES;
-
+    options->dsn->gisprompt = "old,datasource,datasource";
+    
     options->layer = G_define_option();
     options->layer->key = "layer";
     options->layer->type = TYPE_STRING;
@@ -28,13 +29,21 @@ void parse_args(int argc, char **argv,
 				    "\t\tESRI Shapefile: shapefile name\n"
 				    "\t\tMapInfo File: mapinfo file name\n"
 				    "\t\tPostGIS database: table name");
-    options->layer->required = YES;
+    options->layer->required = NO;
     options->layer->key_desc = "name";
-    
+    options->layer->gisprompt = "old,datasource_layer,datasource_layer";
+        
     options->output = G_define_standard_option(G_OPT_V_OUTPUT);
     options->output->required = NO;
     options->output->description = _("Name for output GRASS vector map (default: input layer)");
 
+    flags->override = G_define_flag();
+    flags->override->key = 'o';
+    flags->override->label =
+	_("Override projection check (use current location's projection)");
+    flags->override->description =
+	_("Assume that the dataset has the same projection as the current location");
+
     flags->format = G_define_flag();
     flags->format->key = 'f';
     flags->format->description = _("List supported formats and exit");
diff --git a/vector/v.external/dsn.c b/vector/v.external/dsn.c
new file mode 100644
index 0000000..cf45c6a
--- /dev/null
+++ b/vector/v.external/dsn.c
@@ -0,0 +1,78 @@
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+
+char *get_datasource_name(const char *opt_dsn, int use_ogr)
+{
+    char *dsn;
+    
+    if (G_strncasecmp(opt_dsn, "PG:", 3) == 0) {
+        /* PostgreSQL/PostGIS */
+        size_t i;
+        char connect_str[DB_SQL_MAX], database[GNAME_MAX];
+        char *p, *pp;
+        const char *user, *passwd, *host, *port;
+
+        /* dbname is mandatory */
+        p = G_strcasestr(opt_dsn, "dbname");
+        if (!p) 
+            G_fatal_error(_("Invalid connection string (dbname missing)"));
+        
+        /* get dbname */
+        p += strlen("dbname=");
+        for (i = 0, pp = p; *pp != ' ' && *pp != '\0'; pp++, i++)
+            database[i] = *pp;
+        database[i] = '\0';
+        
+        /* build connection string */
+        sprintf(connect_str, "dbname=%s", database);
+        
+        /* add db.login settings (user, password, host, port) */
+        if (DB_OK == db_get_login2("pg", database, &user, &passwd, &host, &port)) {
+            if (user) {
+                if (!G_strcasestr(opt_dsn, "user=")) {
+                    strcat(connect_str, " user=");
+                    strcat(connect_str, user);
+                }
+                G_free((char *)user);
+            }
+            if (passwd) {
+                if (!G_strcasestr(opt_dsn, "password=")) {
+                    strcat(connect_str, " password=");
+                    strcat(connect_str, passwd);
+                }
+                G_free((char *)passwd);
+            }
+            if (host) {
+                if (!G_strcasestr(opt_dsn, "host=")) {
+                    strcat(connect_str, " host=");
+                    strcat(connect_str, host);
+                }
+                G_free((char *)host);
+            }
+            if (port) {
+                if (!G_strcasestr(opt_dsn, "port=")) {
+                    strcat(connect_str, " port=");
+                    strcat(connect_str, port);
+                }
+                G_free((char *)port);
+            }
+        }
+        
+        if (!use_ogr)
+            /* be friendly, ignored 'PG:' prefix for PostGIS links */
+            dsn = G_store(connect_str);
+        else
+            G_asprintf(&dsn, "PG:%s", connect_str);
+    }
+    else {
+        /* other datasources */
+        dsn = G_store(opt_dsn);
+    }
+
+    G_debug(1, "dsn: %s", dsn);
+
+    return dsn;
+}
diff --git a/vector/v.external/list.c b/vector/v.external/list.c
index 0b9be3a..4b1b754 100644
--- a/vector/v.external/list.c
+++ b/vector/v.external/list.c
@@ -18,10 +18,10 @@ static int cmp(const void *, const void *);
 static char **format_list(int *, size_t *);
 static char *feature_type(const char *);
 #ifdef HAVE_OGR
-static int list_layers_ogr(FILE *, const char *, const char *, int);
+static int list_layers_ogr(FILE *, const char *, char **, int);
 #endif /* HAVE_OGR */
 #ifdef HAVE_POSTGRES
-static int list_layers_pg(FILE *, const char *, const char *, int);
+static int list_layers_pg(FILE *, const char *, char **, int);
 #endif /* HAVE_POSTGRES */
 
 int cmp(const void *a, const void *b)
@@ -102,7 +102,7 @@ void list_formats(void)
     G_free(list);
 }
 
-int list_layers(FILE *fd, const char *dsn, const char *layer, int print_types, int use_ogr)
+int list_layers(FILE *fd, const char *dsn, char **layer, int print_types, int use_ogr)
 {
     if (!use_ogr) {
 #ifdef HAVE_POSTGRES
@@ -139,7 +139,7 @@ void get_table_name(const char *table, char **table_name, char **schema_name)
 }
 
 #ifdef HAVE_POSTGRES
-int list_layers_pg(FILE *fd, const char *conninfo, const char *table, int print_types)
+int list_layers_pg(FILE *fd, const char *conninfo, char **table, int print_types)
 {
     int   row, ntables, ret, print_schema;
     char *value_schema, *value_table, *value_type, *value_column;
@@ -171,7 +171,7 @@ int list_layers_pg(FILE *fd, const char *conninfo, const char *table, int print_
     /* get schema & table_name */
     table_name = schema_name = NULL;
     if (table)
-	get_table_name(table, &table_name, &schema_name);
+	get_table_name(*table, &table_name, &schema_name);
     
     ntables = PQntuples(res);
     G_debug(3, "   nrows = %d", ntables);
@@ -235,7 +235,7 @@ int list_layers_pg(FILE *fd, const char *conninfo, const char *table, int print_
 #endif /* HAVE_POSTGRES */
 
 #ifdef HAVE_OGR
-int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_types)
+int list_layers_ogr(FILE *fd, const char *dsn, char **layer, int print_types)
 {
     int i, ret;
     int nlayers;
@@ -263,12 +263,22 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
     /* Make a list of available layers */
     nlayers = OGR_DS_GetLayerCount(Ogr_ds);
 
-    if (fd)
+    if (fd) {
 	G_message(n_("Data source <%s> (format '%s') contains %d layer:",
                      "Data source <%s> (format '%s') contains %d layers:",
                      nlayers),
 		  dsn, OGR_Dr_GetName(OGR_DS_GetDriver(Ogr_ds)), nlayers);
-    
+    }
+    else if (layer && !(*layer)) {
+        /* return first layer by default (if layer not defined) */
+        if (nlayers > 0) {
+            Ogr_layer = OGR_DS_GetLayer(Ogr_ds, 0);
+            Ogr_featuredefn = OGR_L_GetLayerDefn(Ogr_layer);
+            *layer = G_store((char *) OGR_FD_GetName(Ogr_featuredefn));
+            return 0;
+        }
+        return -1;
+    }
 
     G_get_default_window(&loc_wind);
     if (print_types && loc_wind.proj != PROJECTION_XY) {
@@ -333,7 +343,7 @@ int list_layers_ogr(FILE *fd, const char *dsn, const char *layer, int print_type
 	    }
 	}
 	if (layer)
-	    if (strcmp(layer_name, layer) == 0) {
+	    if (strcmp(layer_name, *layer) == 0) {
 		ret = i;
 	    }
     }
diff --git a/vector/v.external/local_proto.h b/vector/v.external/local_proto.h
index b970443..fcc6353 100644
--- a/vector/v.external/local_proto.h
+++ b/vector/v.external/local_proto.h
@@ -6,16 +6,21 @@ struct _options {
 };
 
 struct _flags {
-    struct Flag *format, *layer, *tlist, *topo, *list;
+    struct Flag *format, *layer, *tlist, *topo, *list, *override;
 };
 
 /* args.c */
 void parse_args(int, char **,
 		struct _options *, struct _flags*);
 
+/* dsn.c */
+char *get_datasource_name(const char *, int);
+
 /* list.c */
 void list_formats();
-int list_layers(FILE *, const char *, const char *, int, int);
+int list_layers(FILE *, const char *, char **, int, int);
 void get_table_name(const char *, char **, char **);
 
+/* proj.c */
+void check_projection(const char *, int);
 #endif
diff --git a/vector/v.external/main.c b/vector/v.external/main.c
index 626294d..c214765 100644
--- a/vector/v.external/main.c
+++ b/vector/v.external/main.c
@@ -8,7 +8,7 @@
  *               
  * PURPOSE:      Create a new vector as a link to OGR layer
  *               
- * COPYRIGHT:    (C) 2003-2011 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2003-2016 by the GRASS Development Team
  *
  *               This program is free software under the GNU General
  *               Public License (>=v2). Read the file COPYING that
@@ -41,7 +41,7 @@ int main(int argc, char *argv[])
     FILE *fd;
     
     int ilayer, use_ogr;
-    char buf[GPATH_MAX], *dsn;
+    char buf[GPATH_MAX], *dsn, *layer;
     const char *output;
     
     G_gisinit(argv[0]);
@@ -95,22 +95,9 @@ int main(int argc, char *argv[])
         exit(EXIT_SUCCESS);
     }
 
-    /* be friendly, ignored 'PG:' prefix for PostGIS links */
     dsn = NULL;
-    if (options.dsn->answer) {
-        if (!use_ogr) {
-            int i, length;
-            
-            length = strlen(options.dsn->answer);
-            dsn = (char *) G_malloc(length - 3);
-            for (i = 3; i < length; i++)
-                dsn[i-3] = options.dsn->answer[i];
-            dsn[length-3] = '\0';
-        }
-        else {
-            dsn = G_store(options.dsn->answer);
-        }
-    }
+    if (options.dsn->answer)
+        dsn = get_datasource_name(options.dsn->answer, use_ogr);
     
     if (flags.list->answer || flags.tlist->answer) {
         /* list layers */
@@ -121,26 +108,35 @@ int main(int argc, char *argv[])
         exit(EXIT_SUCCESS);
     }
 
+    /* get layer index/name */
+    layer = NULL;
+    if (options.layer->answer)
+        layer = G_store(options.layer->answer);
+    ilayer = list_layers(NULL, dsn, &layer,
+                         FALSE, use_ogr);
+    if (ilayer == -1) {
+        if (options.layer->answer)
+            G_fatal_error(_("Layer <%s> not available"), options.layer->answer);
+        else
+            G_fatal_error(_("No layer defined"));
+    }
+    G_debug(2, "layer '%s' was found", layer);
+
     /* define name for output */
     if (!options.output->answer)
-        output = options.layer->answer;
+        output = layer;
     else
         output = options.output->answer;
-    
-
-    /* get layer index */
-    ilayer = list_layers(NULL, dsn, options.layer->answer,
-                         FALSE, use_ogr);
-    if (ilayer == -1) {
-        G_fatal_error(_("Layer <%s> not available"), options.layer->answer);
-    }
-    
-    G_debug(2, "layer '%s' was found", options.layer->answer);
 
     if (G_find_vector2(output, G_mapset()) && !G_check_overwrite(argc, argv)) {
         G_fatal_error(_("option <%s>: <%s> exists. To overwrite, use the --overwrite flag"),
                       options.output->key, output);
     }
+
+    /* check projection match */
+    if (!flags.override->answer) {
+        check_projection(dsn, ilayer);
+    }
     
     /* create new vector map */
     putenv("GRASS_VECTOR_EXTERNAL_IGNORE=1");
@@ -169,7 +165,7 @@ int main(int argc, char *argv[])
     if (!use_ogr) {
         char *table_name, *schema_name;
         
-        get_table_name(options.layer->answer, &table_name, &schema_name);
+        get_table_name(layer, &table_name, &schema_name);
         
         fprintf(fd, "format: postgis\n");
         fprintf(fd, "conninfo: %s\n", dsn);
@@ -183,7 +179,7 @@ int main(int argc, char *argv[])
     else {
         fprintf(fd, "format: ogr\n");
         fprintf(fd, "dsn: %s\n", dsn);
-        fprintf(fd, "layer: %s\n", options.layer->answer);
+        fprintf(fd, "layer: %s\n", layer);
     }
     fclose(fd);
     
diff --git a/vector/v.external/proj.c b/vector/v.external/proj.c
new file mode 100644
index 0000000..40884ab
--- /dev/null
+++ b/vector/v.external/proj.c
@@ -0,0 +1,126 @@
+#include <grass/gis.h>
+#include <grass/gprojects.h>
+#include <grass/glocale.h>
+
+#ifdef HAVE_OGR
+#include "ogr_api.h"
+#endif
+
+void check_projection(const char *dsn, int ilayer)
+{
+#ifdef HAVE_OGR
+    int err = 0;
+    char error_msg[8192];
+    
+    struct Cell_head cellhd, loc_wind;
+    struct Key_Value *loc_proj_info, *loc_proj_units;
+    struct Key_Value *proj_info, *proj_units;
+    
+    OGRDataSourceH Ogr_ds;
+    OGRLayerH Ogr_layer;
+    OGRSpatialReferenceH Ogr_projection;
+    
+    proj_info = proj_units = NULL;
+    loc_proj_info = G_get_projinfo();
+    loc_proj_units = G_get_projunits();
+    
+    G_get_default_window(&loc_wind);
+    G_get_window(&cellhd);
+    
+    Ogr_ds = OGROpen(dsn, FALSE, NULL);
+    if (!Ogr_ds) {
+	G_fatal_error(_("Unable to open data source '%s'"), dsn);
+    }
+    if (ilayer > OGR_DS_GetLayerCount(Ogr_ds))
+        return;
+    Ogr_layer = OGR_DS_GetLayer(Ogr_ds, ilayer);
+    Ogr_projection = OGR_L_GetSpatialRef(Ogr_layer);
+    
+    if (GPJ_osr_to_grass(&cellhd, &proj_info,
+                         &proj_units, Ogr_projection, 0) < 0)
+        G_warning(_("Unable to convert input map projection information to "
+                    "GRASS format for checking"));
+    OGR_DS_Destroy(Ogr_ds);
+    
+    if ((err =
+         G_compare_projections(loc_proj_info, loc_proj_units,
+                               proj_info, proj_units)) != TRUE) {
+        int i_value;
+        
+        strcpy(error_msg,
+               _("Projection of dataset does not"
+                 " appear to match current location.\n\n"));
+        
+        /* TODO: output this info sorted by key: */
+        if (loc_wind.proj != cellhd.proj || err != -2) {
+            if (loc_proj_info != NULL) {
+                strcat(error_msg, _("GRASS LOCATION PROJ_INFO is:\n"));
+                for (i_value = 0; i_value < loc_proj_info->nitems;
+                     i_value++)
+                    sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                            loc_proj_info->key[i_value],
+                            loc_proj_info->value[i_value]);
+                strcat(error_msg, "\n");
+            }
+            
+            if (proj_info != NULL) {
+                strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+                for (i_value = 0; i_value < proj_info->nitems; i_value++)
+                    sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                            proj_info->key[i_value],
+                            proj_info->value[i_value]);
+            }
+            else {
+                strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+                if (cellhd.proj == PROJECTION_XY)
+                    sprintf(error_msg + strlen(error_msg),
+                            "Dataset proj = %d (unreferenced/unknown)\n",
+                            cellhd.proj);
+                else if (cellhd.proj == PROJECTION_LL)
+                    sprintf(error_msg + strlen(error_msg),
+                            "Dataset proj = %d (lat/long)\n",
+                            cellhd.proj);
+                else if (cellhd.proj == PROJECTION_UTM)
+                    sprintf(error_msg + strlen(error_msg),
+                            "Dataset proj = %d (UTM), zone = %d\n",
+                            cellhd.proj, cellhd.zone);
+                else
+                    sprintf(error_msg + strlen(error_msg),
+                            "Dataset proj = %d (unknown), zone = %d\n",
+                            cellhd.proj, cellhd.zone);
+            }
+        }
+        else {
+            if (loc_proj_units != NULL) {
+                strcat(error_msg, "GRASS LOCATION PROJ_UNITS is:\n");
+                for (i_value = 0; i_value < loc_proj_units->nitems;
+                     i_value++)
+                    sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                            loc_proj_units->key[i_value],
+                            loc_proj_units->value[i_value]);
+                strcat(error_msg, "\n");
+            }
+            
+            if (proj_units != NULL) {
+                strcat(error_msg, "Import dataset PROJ_UNITS is:\n");
+                for (i_value = 0; i_value < proj_units->nitems; i_value++)
+                    sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                            proj_units->key[i_value],
+                            proj_units->value[i_value]);
+            }
+        }
+        sprintf(error_msg + strlen(error_msg),
+                _("\nIn case of no significant differences in the projection definitions,"
+                  " use the -o flag to ignore them and use"
+                  " current location definition.\n"));
+        strcat(error_msg,
+               _("Consider generating a new location with 'location' parameter"
+                 " from input data set.\n"));
+        G_fatal_error("%s", error_msg);
+    }
+    else {
+        G_verbose_message(_("Projection of input dataset and current location "
+                            "appear to match"));
+    }
+#endif
+}
diff --git a/vector/v.external/v.external.html b/vector/v.external/v.external.html
index f051e97..e11dce5 100644
--- a/vector/v.external/v.external.html
+++ b/vector/v.external/v.external.html
@@ -107,4 +107,4 @@ Radim Blazek, ITC-Irst, Trento, Italy
 PostGIS support by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-01-13 10:20:46 +0100 (Wed, 13 Jan 2016) $</i>
+<i>Last changed: $Date: 2016-01-13 10:18:55 +0100 (Wed, 13 Jan 2016) $</i>
diff --git a/vector/v.extract/v.extract.html b/vector/v.extract/v.extract.html
index ae1f8ba..5c43f10 100644
--- a/vector/v.extract/v.extract.html
+++ b/vector/v.extract/v.extract.html
@@ -128,4 +128,4 @@ Note that there may be more than one feature with the same category.
 R.L. Glenn, USDA, SCS, NHQ-CGIS<br>
 GRASS 6 port by Radim Blazek
 
-<p><i>Last changed: $Date: 2016-03-16 21:18:14 +0100 (Wed, 16 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-16 21:17:59 +0100 (Wed, 16 Mar 2016) $</i>
diff --git a/vector/v.extrude/v.extrude.html b/vector/v.extrude/v.extrude.html
index d96b601..1657e50 100644
--- a/vector/v.extrude/v.extrude.html
+++ b/vector/v.extrude/v.extrude.html
@@ -82,4 +82,4 @@ Updated for GRASS 7 by Martin Landa, FBK-irst,
 Italy and Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/vector/v.generalize/main.c b/vector/v.generalize/main.c
index 417735a..22ad217 100644
--- a/vector/v.generalize/main.c
+++ b/vector/v.generalize/main.c
@@ -96,8 +96,10 @@ int main(int argc, char *argv[])
     error_out = G_define_standard_option(G_OPT_V_OUTPUT);
     error_out->key = "error";
     error_out->required = NO;
+    error_out->label =
+	_("Error map with failed generalizations");
     error_out->description =
-	_("Error map of all lines and boundaries not being generalized due to topology issues or over-simplification");
+	_("Lines and boundaries causing errors (collapsed to a point or topology errors)");
 
     method_opt = G_define_option();
     method_opt->key = "method";
@@ -334,12 +336,12 @@ int main(int argc, char *argv[])
 	G_fatal_error(_("Unable to create vector map <%s>"), map_out->answer);
     }
 
-    if(error_out->answer)
+    if (error_out->answer) {
         if (0 > Vect_open_new(&Error, error_out->answer, with_z)) {
 	    Vect_close(&In);
 	    G_fatal_error(_("Unable to create error vector map <%s>"), error_out->answer);
         }
-
+    }
 
 
     Vect_copy_head_data(&In, &Out);
@@ -391,12 +393,11 @@ int main(int argc, char *argv[])
 	int not_modified_boundaries = 0, n_oversimplified = 0;
 	struct line_pnts *APoints;  /* original Points */
 
+	set_topo_debug();
+
 	Vect_copy_map_lines(&In, &Out);
 	Vect_build_partial(&Out, GV_BUILD_CENTROIDS);
 
-	if ((mask_type & GV_AREA) && !(mask_type & GV_BOUNDARY))
-	    mask_type |= GV_BOUNDARY;
-
 	G_message("-----------------------------------------------------");
 	G_message(_("Generalization (%s)..."), method_opt->answer);
 	G_message(_("Using threshold: %g %s"), thresh, G_database_unit_name(1));
@@ -429,30 +430,19 @@ int main(int argc, char *argv[])
 			
 			/* check if any of the centroids is selected */
 			Vect_get_line_areas(&Out, i, &left, &right);
+			if (left < 0)
+			    left = Vect_get_isle_area(&Out, abs(left));
+			if (right < 0)
+			    right = Vect_get_isle_area(&Out, abs(right));
+
 			if (left > 0) {
 			    Vect_get_area_cats(&Out, left, Cats);
 			    do_line = Vect_cats_in_constraint(Cats, layer, cat_list);
 			}
-			else if (left < 0) {
-			    left = Vect_get_isle_area(&Out, abs(left));
-			    if (left > 0) {
-				Vect_get_area_cats(&Out, left, Cats);
-				do_line = Vect_cats_in_constraint(Cats, layer, cat_list);
-			    }
-			}
 			
-			if (!do_line) {
-			    if (right > 0) {
-				Vect_get_area_cats(&Out, right, Cats);
-				do_line = Vect_cats_in_constraint(Cats, layer, cat_list);
-			    }
-			    else if (right < 0) {
-				right = Vect_get_isle_area(&Out, abs(right));
-				if (right > 0) {
-				    Vect_get_area_cats(&Out, right, Cats);
-				    do_line = Vect_cats_in_constraint(Cats, layer, cat_list);
-				}
-			    }
+			if (!do_line && right > 0) {
+			    Vect_get_area_cats(&Out, right, Cats);
+			    do_line = Vect_cats_in_constraint(Cats, layer, cat_list);
 			}
 		    }
 		    if (!do_line)
@@ -552,7 +542,7 @@ int main(int argc, char *argv[])
 		after = APoints->n_points;
 		n_oversimplified++;
                 if (error_out->answer)
-		    Vect_write_line(&Error, type, APoints, Cats);
+		    Vect_write_line(&Error, GV_POINT, Points, Cats);
 	    }
 	    /* check for topology corruption */
 	    else if (type == GV_BOUNDARY) {
@@ -560,7 +550,7 @@ int main(int argc, char *argv[])
 		    after = APoints->n_points;
 		    not_modified_boundaries++;
                     if (error_out->answer)
-		        Vect_write_line(&Error, type, APoints, Cats);
+		        Vect_write_line(&Error, type, Points, Cats);
 		}
 		else
 		    after = Points->n_points;
diff --git a/vector/v.generalize/misc.c b/vector/v.generalize/misc.c
index 29a5386..a35d524 100644
--- a/vector/v.generalize/misc.c
+++ b/vector/v.generalize/misc.c
@@ -24,6 +24,16 @@
 #include <grass/glocale.h>
 #include "misc.h"
 
+static int topo_debug = 0;
+
+int set_topo_debug(void)
+{
+    if (getenv("GRASS_VECTOR_TOPO_DEBUG"))
+	topo_debug = 1;
+
+    return topo_debug;
+}
+
 int type_mask(struct Option *type_opt)
 {
     int res = 0;
@@ -38,7 +48,7 @@ int type_mask(struct Option *type_opt)
 	    res |= GV_BOUNDARY;
 	    break;
 	case 'a':
-	    res |= GV_AREA;
+	    res |= GV_BOUNDARY;
 	}
 
     return res;
@@ -187,23 +197,122 @@ int copy_tables_by_cats(struct Map_info *In, struct Map_info *Out)
     return 1;
 }
 
+static int cmp(const void *a, const void *b)
+{
+    int ai = *(int *)a;
+    int bi = *(int *)b;
+
+    return (ai - bi);
+}
+
 /* check topology corruption by boundary modification
  * return 0 on corruption, 1 if modification is ok */
 int check_topo(struct Map_info *Out, int line, struct line_pnts *APoints,
                struct line_pnts *Points, struct line_cats *Cats)
 {
-    int i, j, intersect, newline, left_old, right_old,
-	left_new, right_new;
-    struct bound_box box;
-    static struct line_pnts *BPoints = NULL;
-    static struct boxlist *List = NULL;
+    int i, j, k, intersect, newline;
+    struct bound_box box, abox, tbox;
+    struct bound_box lbox, rbox, areabox;
     struct line_pnts **AXLines, **BXLines;
     int naxlines, nbxlines;
-
-    if (!BPoints)
+    static struct line_pnts *BPoints = NULL;
+    static struct boxlist *List = NULL;
+    static struct line_pnts *BPoints2 = NULL;
+    static struct ilist *BList = NULL;
+    int area, isle, centr;
+    int left_o, left_n, right_o, right_n;
+    int node, node_n_lines;
+    float angle1, angle2;
+    off_t offset;
+    /* topology debugging */
+    int area_l_o, area_r_o, area_l_n, area_r_n;
+    int centr_l_o, centr_r_o, centr_l_n, centr_r_n;
+    int *isles_l_o, nisles_l_o, *isles_l_n, nisles_l_n;
+    int *isles_r_o, nisles_r_o, *isles_r_n, nisles_r_n;
+    int found;
+
+    if (!BPoints) {
 	BPoints = Vect_new_line_struct();
-    if (!List)
+	BPoints2 = Vect_new_line_struct();
 	List = Vect_new_boxlist(1);
+	BList = Vect_new_list();
+    }
+
+    if (APoints->n_points == Points->n_points) {
+	int same = 1;
+	
+	for (i = 0; i < APoints->n_points; i++) {
+	    if (APoints->x[i] != Points->x[i] || APoints->y[i] != Points->y[i]) {
+		same = 0;
+		break;
+	    }
+	}
+	if (same)
+	    return 1;
+    }
+
+    i = APoints->n_points - 1;
+    if (APoints->x[0] == APoints->x[i] && APoints->y[0] == APoints->y[i]) {
+	i = Points->n_points - 1;
+	if (Points->x[0] != Points->x[i] || Points->y[0] != Points->y[i]) {
+	    /* input line forms a loop, output not */
+	    return 0;
+	}
+    }
+
+    /* test node angles
+     * an area can be built only if there are no two lines with the same 
+     * angle at the same node */
+    /* line start */
+    angle1 = dig_calc_begin_angle(Points, 0);
+    if (angle1 == -9)
+	return 0;
+
+    node = dig_find_node(&(Out->plus), Points->x[0], Points->y[0], Points->z[0]);
+    if (node) {
+	/* if another line exists with the same angle at this node,
+	 * an area can not be constructed -> error */
+	node_n_lines = Vect_get_node_n_lines(Out, node);
+	for (i = 0; i < node_n_lines; i++) {
+
+	    if (abs(Vect_get_node_line(Out, node, i)) == line)
+		continue;
+
+	    if (angle1 == Vect_get_node_line_angle(Out, node, i))
+		return 0;
+	}
+    }
+    
+    /* line end */
+    angle2 = dig_calc_end_angle(Points, 0);
+    if (angle2 == -9)
+	return 0;
+
+    i = Points->n_points - 1;
+    if (Points->x[0] == Points->x[i] && Points->y[0] == Points->y[i]) {
+	if (angle1 == angle2) {
+	    /* same angle, same start and end coordinates,
+	     * an area can not be constructed -> error */
+	    return 0;
+	}
+    }
+    else {
+	node = dig_find_node(&(Out->plus), Points->x[i], Points->y[i], Points->z[i]);
+    }
+
+    if (node) {
+	/* if another line exists with the same angle at this node,
+	 * an area can not be constructed -> error */
+	node_n_lines = Vect_get_node_n_lines(Out, node);
+	for (i = 0; i < node_n_lines; i++) {
+
+	    if (abs(Vect_get_node_line(Out, node, i)) == line)
+		continue;
+
+	    if (angle2 == Vect_get_node_line_angle(Out, node, i))
+		return 0;
+	}
+    }
 
     Vect_line_box(Points, &box);
 
@@ -273,37 +382,476 @@ int check_topo(struct Map_info *Out, int line, struct line_pnts *APoints,
     if (intersect)
 	return 0;
 
-    /* Get centroids on the left and right side */
-    Vect_get_line_areas(Out, line, &left_old, &right_old);
-    if (left_old < 0)
-	left_old = Vect_get_isle_area(Out, abs(left_old));
-    if (left_old > 0)
-	left_old = Vect_get_area_centroid(Out, left_old);
-    if (right_old < 0)
-	right_old = Vect_get_isle_area(Out, abs(right_old));
-    if (right_old > 0)
-	right_old = Vect_get_area_centroid(Out, right_old);
+    /* test centroid attachment (point-in-poly) */
+    Vect_get_line_areas(Out, line, &left_o, &right_o);
+
+    Vect_line_box(APoints, &abox);
+
+    /* centroid on the left side */
+    isle = centr = 0;
+    area = left_o;
+    if (area < 0) {
+	isle = -area;
+	area = Vect_get_isle_area(Out, isle);
+    }
+    if (area > 0)
+	centr = Vect_get_area_centroid(Out, area);
+    centr_l_o = centr;
+    area_l_o = area;
+    lbox = box;
+
+    if (isle)
+	Vect_get_isle_boundaries(Out, isle, BList);
+    else
+	Vect_get_area_boundaries(Out, area, BList);
+
+    Vect_reset_line(BPoints2);
+    for (i = 0; i < BList->n_values; i++) {
+	int bline = BList->value[i];
+	int dir = bline > 0 ? GV_FORWARD : GV_BACKWARD;
+
+	if (abs(bline) != line) {
+	    Vect_read_line(Out, BPoints, NULL, abs(bline));
+	    Vect_line_box(BPoints, &tbox);
+	    Vect_box_extend(&lbox, &tbox);
+	    Vect_append_points(BPoints2, BPoints, dir);
+	}
+	else
+	    Vect_append_points(BPoints2, Points, dir);
+
+	BPoints2->n_points--;    /* skip last point, avoids duplicates */
+    }
+    BPoints2->n_points++;        /* close polygon */
+
+    if (centr > 0) {
+	int ret;
+	double cx, cy, cz;
+
+	Vect_read_line(Out, BPoints, NULL, centr);
+	cx = BPoints->x[0];
+	cy = BPoints->y[0];
+	cz = BPoints->z[0];
+
+	if (Vect_point_in_box(cx, cy, cz, &box) ||
+	    Vect_point_in_box(cx, cy, cz, &abox)) {
+
+	    ret = Vect_point_in_poly(cx, cy, BPoints2);
+	    if (!isle) {
+		/* area: centroid must be inside */
+		if (ret != 1)
+		    return 0;
+	    }
+	    else {
+		/* isle: centroid must be outside */
+		if (ret > 0)
+		    return 0;
+	    }
+	}
+    }
+
+    /* centroid on the right side */
+    isle = centr = 0;
+    area = right_o;
+    if (area < 0) {
+	isle = -area;
+	area = Vect_get_isle_area(Out, isle);
+    }
+    if (area > 0)
+	centr = Vect_get_area_centroid(Out, area);
+    centr_r_o = centr;
+    area_r_o = area;
+    rbox = box;
+
+    if (isle)
+	Vect_get_isle_boundaries(Out, isle, BList);
+    else
+	Vect_get_area_boundaries(Out, area, BList);
+
+    Vect_reset_line(BPoints2);
+    for (i = 0; i < BList->n_values; i++) {
+	int bline = BList->value[i];
+	int dir = bline > 0 ? GV_FORWARD : GV_BACKWARD;
+
+	if (abs(bline) != line) {
+	    Vect_read_line(Out, BPoints, NULL, abs(bline));
+	    Vect_line_box(BPoints, &tbox);
+	    Vect_box_extend(&rbox, &tbox);
+	    Vect_append_points(BPoints2, BPoints, dir);
+	}
+	else
+	    Vect_append_points(BPoints2, Points, dir);
+
+	BPoints2->n_points--;    /* skip last point, avoids duplicates */
+    }
+    BPoints2->n_points++;        /* close polygon */
+
+    if (centr > 0) {
+	int ret;
+	double cx, cy, cz;
+
+	Vect_read_line(Out, BPoints, NULL, centr);
+	cx = BPoints->x[0];
+	cy = BPoints->y[0];
+	cz = BPoints->z[0];
+
+	if (Vect_point_in_box(cx, cy, cz, &box) ||
+	    Vect_point_in_box(cx, cy, cz, &abox)) {
+
+	    ret = Vect_point_in_poly(cx, cy, BPoints2);
+	    if (!isle) {
+		/* area: centroid must be inside */
+		if (ret != 1)
+		    return 0;
+	    }
+	    else {
+		/* isle: centroid must be outside */
+		if (ret > 0)
+		    return 0;
+	    }
+	}
+    }
+
+    /* all fine:
+     * areas/isles can be built
+     * no intersection with another boundary, e.g. isle attachment will be preserved
+     * centroids are still on the correct side of the boundary */
+
+    if (!topo_debug) {
+	/* update only those parts of topology that actually get changed */
+	/* boundary:
+	 * node in case of loop support
+	 * node angles
+	 * bounding box */
+	
+	/* rewrite boundary on level 1 */
+	offset = Out->plus.Line[line]->offset;
+	Out->level = 1;
+	offset = Vect_rewrite_line(Out, offset, GV_BOUNDARY, Points, Cats);
+	Out->level = 2;
+	/* delete line from topo */
+	dig_del_line(&Out->plus, line, APoints->x[0], APoints->y[0], APoints->z[0]);
+	/* restore line in topo */
+	dig_restore_line(&Out->plus, line, GV_BOUNDARY, Points, &box, offset);
+
+	/* update area/isle box to the left */
+	if (left_o < 0) {
+	    dig_spidx_del_isle(&Out->plus, -left_o);
+	    dig_spidx_add_isle(&Out->plus, -left_o, &lbox);
+	}
+	else if (left_o > 0) {
+	    dig_spidx_del_area(&Out->plus, left_o);
+	    dig_spidx_add_area(&Out->plus, left_o, &lbox);
+	}
+	/* update area/isle box to the right */
+	if (right_o < 0) {
+	    dig_spidx_del_isle(&Out->plus, -right_o);
+	    dig_spidx_add_isle(&Out->plus, -right_o, &rbox);
+	}
+	else if (right_o > 0) {
+	    dig_spidx_del_area(&Out->plus, right_o);
+	    dig_spidx_add_area(&Out->plus, right_o, &rbox);
+	}
+	
+	/* done */
+	return 1;
+    }
+
+    /* debug topology */
+
+    /* record isles of the old areas to the left and right */
+    nisles_l_o = 0;
+    isles_l_o = NULL;
+    if (area_l_o) {
+	nisles_l_o = Out->plus.Area[area_l_o]->n_isles;
+	if (nisles_l_o) {
+	    isles_l_o = G_malloc(nisles_l_o * sizeof(int));
+	    for (i = 0; i < nisles_l_o; i++) {
+		isles_l_o[i] = Out->plus.Area[area_l_o]->isles[i];
+	    }
+	    qsort(isles_l_o, nisles_l_o, sizeof(int), cmp);
+	}
+    }
+    nisles_r_o = 0;
+    isles_r_o = NULL;
+    if (area_r_o) {
+	nisles_r_o = Out->plus.Area[area_r_o]->n_isles;
+	if (nisles_r_o) {
+	    isles_r_o = G_malloc(nisles_r_o * sizeof(int));
+	    for (i = 0; i < nisles_r_o; i++) {
+		isles_r_o[i] = Out->plus.Area[area_r_o]->isles[i];
+	    }
+	    qsort(isles_r_o, nisles_r_o, sizeof(int), cmp);
+	}
+    }
 
     /* OK, rewrite modified boundary */
     newline = Vect_rewrite_line(Out, line, GV_BOUNDARY, Points, Cats);
+    if (newline != line)
+	G_fatal_error("Vect_rewrite_line(): new line id %d != old line id %d",
+	              newline, line);
+
+    /* get new area and centroid ids to the left and right */
+    centr_l_n = centr_r_n = 0;
+    Vect_get_line_areas(Out, newline, &left_n, &right_n);
+    area = left_n;
+    if (area < 0)
+	area = Vect_get_isle_area(Out, -area);
+    if (area > 0)
+	centr_l_n = Vect_get_area_centroid(Out, area);
+    area_l_n = area;
+    
+    area = right_n;
+    if (area < 0)
+	area = Vect_get_isle_area(Out, -area);
+    if (area > 0)
+	centr_r_n = Vect_get_area_centroid(Out, area);
+    area_r_n = area;
+
+    /* record isles of the new areas to the left and right */
+    nisles_l_n = 0;
+    isles_l_n = NULL;
+    if (area_l_n) {
+	nisles_l_n = Out->plus.Area[area_l_n]->n_isles;
+	if (nisles_l_n) {
+	    isles_l_n = G_malloc(nisles_l_n * sizeof(int));
+	    for (i = 0; i < nisles_l_n; i++) {
+		isles_l_n[i] = Out->plus.Area[area_l_n]->isles[i];
+	    }
+	    qsort(isles_l_n, nisles_l_n, sizeof(int), cmp);
+	}
+    }
+    nisles_r_n = 0;
+    isles_r_n = NULL;
+    if (area_r_n) {
+	nisles_r_n = Out->plus.Area[area_r_n]->n_isles;
+	if (nisles_r_n) {
+	    isles_r_n = G_malloc(nisles_r_n * sizeof(int));
+	    for (i = 0; i < nisles_r_n; i++) {
+		isles_r_n[i] = Out->plus.Area[area_r_n]->isles[i];
+	    }
+	    qsort(isles_r_n, nisles_r_n, sizeof(int), cmp);
+	}
+    }
+
+    /* compare isle numbers and ids on the left and right */
+    /* left */
+    if (nisles_l_o != nisles_l_n)
+	G_fatal_error("Number of isles to the left differ: old %d, new %d",
+	              nisles_l_o, nisles_l_n);
+    found = 0;
+    k = 0;
+    for (i = 0; i < nisles_l_o; i++) {
+	if (isles_l_o[i] != isles_l_n[k]) {
+	    if (!found) {
+		found = 1;
+		k--;
+	    }
+	    else {
+		for (j = 0; j < nisles_l_o; j++) {
+		    G_message("old %d new %d", isles_l_o[j], isles_l_n[j]);
+		}
+		G_fatal_error("New isle to the left %d is wrong",
+			      isles_l_n[i]);
+	    }
+	}
+	k++;
+    }
+    /* right */
+    if (nisles_r_o != nisles_r_n)
+	G_fatal_error("Number of isles to the left differ: old %d, new %d",
+	              nisles_r_o, nisles_r_n);
+    found = 0;
+    k = 0;
+    for (i = 0; i < nisles_r_o; i++) {
+	if (isles_r_o[i] != isles_r_n[k]) {
+	    if (!found) {
+		found = 1;
+		k--;
+	    }
+	    else {
+		for (j = 0; j < nisles_r_o; j++) {
+		    G_message("old %d new %d", isles_r_o[j], isles_r_n[j]);
+		}
+		G_fatal_error("New isle to the right %d is wrong",
+			      isles_l_n[i]);
+	    }
+	}
+	k++;
+    }
 
     /* Check position of centroids */
-    Vect_get_line_areas(Out, newline, &left_new, &right_new);
-    if (left_new < 0)
-	left_new = Vect_get_isle_area(Out, abs(left_new));
-    if (left_new > 0)
-	left_new = Vect_get_area_centroid(Out, left_new);
-    if (right_new < 0)
-	right_new = Vect_get_isle_area(Out, abs(right_new));
-    if (right_new > 0)
-	right_new = Vect_get_area_centroid(Out, right_new);
-
-    if (left_new != left_old || right_new != right_old) {
-	G_debug(3,
-		"The modified boundary changes attachment of centroid -> not modified");
-	Vect_rewrite_line(Out, newline, GV_BOUNDARY, APoints, Cats);
+    if (centr_l_n != centr_l_o || centr_r_n != centr_r_o) {
+	/* should not happen if the above topo checks work as expected */
+	G_warning("The modified boundary changes attachment of centroid -> topo checks failed");
+
+	if (centr_l_n != centr_l_o) {
+	    G_warning("Left area/isle old: %d, new: %d", left_o, left_n);
+	    G_warning("Left centroid old: %d, new: %d", centr_l_o, centr_l_n);
+
+	    if (centr_l_o) {
+		int ret1, ret2, ret3;
+
+		Vect_read_line(Out, BPoints, NULL, centr_l_o);
+		Vect_get_area_box(Out, area_l_n, &abox);
+
+		ret1 = (BPoints->x[0] >= abox.W && BPoints->x[0] <= abox.E &&
+		       BPoints->y[0] >= abox.S && BPoints->y[0] <= abox.N);
+
+		ret2 = Vect_point_in_area_outer_ring(BPoints->x[0], BPoints->y[0], Out,
+		                                    area_l_n, &abox);
+
+		Vect_get_area_points(Out, area_l_n, BPoints2);
+		ret3 = Vect_point_in_poly(BPoints->x[0], BPoints->y[0], BPoints2);
+
+		if (ret2 != ret3) {
+		    G_warning("Left old centroid in new area box: %d", ret1);
+		    G_warning("Left old centroid in new area outer ring: %d", ret2);
+		    G_warning("Left old centroid in new area as poly: %d", ret3);
+		}
+	    }
+	}
+	if (centr_r_n != centr_r_o) {
+	    G_warning("Right area/isle old: %d, new: %d", right_o, right_n);
+	    G_warning("Right centroid old: %d, new: %d", centr_r_o, centr_r_n);
+
+	    if (centr_r_o) {
+		int ret1, ret2, ret3;
+
+		Vect_read_line(Out, BPoints, NULL, centr_r_o);
+		Vect_get_area_box(Out, area_r_n, &abox);
+
+		ret1 = (BPoints->x[0] >= abox.W && BPoints->x[0] <= abox.E &&
+		       BPoints->y[0] >= abox.S && BPoints->y[0] <= abox.N);
+
+		ret2 = Vect_point_in_area_outer_ring(BPoints->x[0], BPoints->y[0], Out,
+		                                    area_r_n, &abox);
+
+		Vect_get_area_points(Out, area_r_n, BPoints2);
+		ret3 = Vect_point_in_poly(BPoints->x[0], BPoints->y[0], BPoints2);
+
+		if (ret2 != ret3) {
+		    G_warning("Right old centroid in new area box: %d", ret1);
+		    G_warning("Right old centroid in new area outer ring: %d", ret2);
+		    G_warning("Right old centroid in new area as poly: %d", ret3);
+		}
+	    }
+	}
+
+	/* rewrite old line */
+	newline = Vect_rewrite_line(Out, newline, GV_BOUNDARY, APoints, Cats);
+
+	centr_l_n = centr_r_n = 0;
+	Vect_get_line_areas(Out, newline, &area_l_n, &area_r_n);
+	area = area_l_n;
+	if (area < 0)
+	    area = Vect_get_isle_area(Out, -area);
+	if (area > 0)
+	    centr_l_n = Vect_get_area_centroid(Out, area);
+	area_l_n = area;
+	
+	area = area_r_n;
+	if (area < 0)
+	    area = Vect_get_isle_area(Out, -area);
+	if (area > 0)
+	    centr_r_n = Vect_get_area_centroid(Out, area);
+	area_r_n = area;
+
+	if (centr_l_n != centr_l_o) {
+	    Vect_get_area_box(Out, area_l_n, &areabox);
+	    
+	    if (centr_l_n > 0) {
+		Vect_read_line(Out, BPoints, NULL, centr_l_n);
+		if (Vect_point_in_area(BPoints->x[0], BPoints->y[0], Out,
+		    area_l_n, &areabox)) {
+
+		    G_warning("New left centroid is in new left area %d", area_l_n);
+
+		    G_warning("New left centroid on outer ring: %d",
+		    Vect_point_in_area_outer_ring(BPoints->x[0], BPoints->y[0], Out,
+		    area_l_n, &areabox));
+
+		    G_warning("Best area for new left centroid: %d",
+			      Vect_find_area(Out, BPoints->x[0], BPoints->y[0]));
+		}
+		else
+		    G_warning("New left centroid is not in new left area");
+	    }
+
+	    if (centr_l_o > 0) {
+		Vect_read_line(Out, BPoints, NULL, centr_l_o);
+		if (Vect_point_in_area(BPoints->x[0], BPoints->y[0], Out,
+		    area_l_n, &areabox)) {
+
+		    G_warning("Old left centroid is in new left area %d", area_l_n);
+
+		    G_warning("Old left centroid on outer ring: %d",
+		    Vect_point_in_area_outer_ring(BPoints->x[0], BPoints->y[0], Out,
+		    area_l_n, &areabox));
+
+		    G_warning("Best area for old left centroid: %d",
+			      Vect_find_area(Out, BPoints->x[0], BPoints->y[0]));
+		}
+		else
+		    G_warning("Old left centroid is not in new left area");
+	    }
+
+	    G_fatal_error("Left centroid old %d, restored %d", centr_l_o, centr_l_n);
+	    return 0;
+	}
+	if (centr_r_n != centr_r_o) {
+	    Vect_get_area_box(Out, area_r_n, &areabox);
+
+	    if (centr_r_n > 0) {
+		Vect_read_line(Out, BPoints, NULL, centr_r_n);
+		if (Vect_point_in_area(BPoints->x[0], BPoints->y[0], Out,
+		    area_r_n, &areabox)) {
+
+		    G_warning("New right centroid is in new right area %d", area_r_n);
+
+		    G_warning("New right centroid on outer ring: %d",
+		    Vect_point_in_area_outer_ring(BPoints->x[0], BPoints->y[0], Out,
+		    area_r_n, &areabox));
+
+		    G_warning("Best area for new right centroid: %d",
+			      Vect_find_area(Out, BPoints->x[0], BPoints->y[0]));
+		}
+		else
+		    G_warning("New right centroid is not in new right area");
+	    }
+
+	    if (centr_r_o > 0) {
+		Vect_read_line(Out, BPoints, NULL, centr_r_o);
+		if (Vect_point_in_area(BPoints->x[0], BPoints->y[0], Out,
+		    area_r_n, &areabox)) {
+
+		    G_warning("Old right centroid is in new right area %d", area_r_n);
+
+		    G_warning("Old right centroid on outer ring: %d",
+		    Vect_point_in_area_outer_ring(BPoints->x[0], BPoints->y[0], Out,
+		    area_r_n, &areabox));
+
+		    G_warning("Best area for old right centroid: %d",
+			      Vect_find_area(Out, BPoints->x[0], BPoints->y[0]));
+		}
+		else
+		    G_warning("Old right centroid is not in new right area");
+	    }
+
+	    G_fatal_error("Right centroid old %d, restored %d", centr_r_o, centr_r_n);
+	    return 0;
+	}
+
+	G_fatal_error("Topology check failure");
 	return 0;
     }
+    if (isles_l_o)
+	G_free(isles_l_o);
+    if (isles_r_o)
+	G_free(isles_r_o);
+    if (isles_l_n)
+	G_free(isles_l_n);
+    if (isles_r_n)
+	G_free(isles_r_n);
     
     return 1;
 }
diff --git a/vector/v.generalize/misc.h b/vector/v.generalize/misc.h
index e975f14..fafcb15 100644
--- a/vector/v.generalize/misc.h
+++ b/vector/v.generalize/misc.h
@@ -6,22 +6,23 @@
 /* returns bitmask for all the types specified in type_opt
  * e.g GV_LINE | GV_BOUNDARY
  */
-extern int type_mask(struct Option *type_opt);
+int type_mask(struct Option *type_opt);
 
 /* returns the squared distance and the index of the point furthest
  * from the line segment Points[a], Points[b] such that the
  * index of this points is in [a,b]
  */
-extern int get_furthest(struct line_pnts *Points, int a, int b, int with_z,
+int get_furthest(struct line_pnts *Points, int a, int b, int with_z,
 			double *dist);
 
 /* copy attributes of In which appear in Out */
 /* returns 1 on success, 0 on failure */
-extern int copy_tables_by_cats(struct Map_info *In, struct Map_info *Out);
+int copy_tables_by_cats(struct Map_info *In, struct Map_info *Out);
 
 /* check topology corruption by boundary modification
  * return 0 on corruption, 1 if modification is ok */
 int check_topo(struct Map_info *, int, struct line_pnts *, 
                struct line_pnts *, struct line_cats *);
 
+int set_topo_debug(void);
 #endif
diff --git a/vector/v.generalize/v.generalize.html b/vector/v.generalize/v.generalize.html
index 1e5b4b8..76cd876 100644
--- a/vector/v.generalize/v.generalize.html
+++ b/vector/v.generalize/v.generalize.html
@@ -20,14 +20,32 @@ achieved by inserting new vertices into the original line, and can total
 up to 4000% of the number of vertices in the original. In such an instance, 
 it is always a good idea to simplify the line after smoothing.
 
-<p>Smoothing and simplification algorithms implemented in this module work 
-line by line, i.e. simplification/smoothing of one line does not affect 
-the other lines; they are treated separately.  Also, the first and the 
-last point of each line is never translated and/or deleted. 
+<p>Smoothing and simplification algorithms implemented in this module 
+work line by line, i.e. simplification/smoothing of one line does not 
+affect the other lines; they are treated separately. For isolated loops 
+formed by a single line/boundary, he first and the last point of each 
+line/boundary can be translated and/or deleted, unless the <em>-l</em> 
+flag is used to disable loop support.
+
+<p>Lines and boundaries are not translated if they would collapse to a 
+single point. Boundaries are not translated if they would intersect 
+with themselves or other boundaries. Such erroneus features are written 
+to an optional <em>error</em> vector map. Overlaying the <em>error</em> 
+map over the generalized map indicates the kind of error. 
+Lines/boundaries collapsing to a point are written out as points, 
+boundaries violating topology are written out as boundaries. The 
+<em>error</em> map can be overlaid over the generalized map to 
+understand why some features were not generalized.
+
 
 <h3>SIMPLIFICATION</h3>
 
-<em>v.generalize</em> contains following line simplification algorithms:
+Simplification can fail for many boundaries if the simplification 
+parameters would result in a large reduction of vertices. If many 
+lines/boundaries could not be simplified, try different parameters that 
+would cause a lower degree of simplification.
+
+<p><em>v.generalize</em> contains following line simplification algorithms:
 <ul>
 <li>Douglas-Peucker Algorithm</li>
 <li>Douglas-Peucker Reduction Algorithm</li>
@@ -324,4 +342,4 @@ Daniel Bundala, Google Summer of Code 2007, Student<br>
 Wolf Bergenheim, Mentor<br>
 Partial rewrite: Markus Metz
 
-<p><i>Last changed: $Date: 2016-04-09 10:49:43 +0200 (Sat, 09 Apr 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-17 22:21:16 +0200 (Tue, 17 May 2016) $</i>
diff --git a/vector/v.hull/v.hull.html b/vector/v.hull/v.hull.html
index 8ffd9eb..2dd7466 100644
--- a/vector/v.hull/v.hull.html
+++ b/vector/v.hull/v.hull.html
@@ -66,4 +66,4 @@ Markus Neteler, ITC-irst (update to 5.7)<br>
 Benjamin Ducke, CAU Kiel (3D hull support)<br>
 Martin Landa, CTU in Prague, Czech Republic (vector lines support)
 
-<p><i>Last changed: $Date: 2015-01-15 09:43:36 +0100 (Thu, 15 Jan 2015) $</i>
+<p><i>Last changed: $Date: 2015-01-15 09:42:19 +0100 (Thu, 15 Jan 2015) $</i>
diff --git a/vector/v.in.ascii/main.c b/vector/v.in.ascii/main.c
index d58d176..6962672 100644
--- a/vector/v.in.ascii/main.c
+++ b/vector/v.in.ascii/main.c
@@ -38,6 +38,8 @@ static char *get_td(const struct Option *option)
         sep = G_store("\"");
     else if (strcmp(option->answer, "singlequote") == 0)
         sep = G_store("\'");
+    else if (strcmp(option->answer, "none") == 0)
+        sep = NULL;
     else
         sep = G_store(option->answer);
 
@@ -101,7 +103,7 @@ int main(int argc, char *argv[])
     tdelim_opt->key = "text";
     tdelim_opt->label = "Text delimiter";
     tdelim_opt->answer = "doublequote";
-    tdelim_opt->description = _("Special characters: doublequote, singlequote");
+    tdelim_opt->description = _("Special characters: doublequote, singlequote, none");
     tdelim_opt->guisection = _("Input format");
 
     skip_opt = G_define_option();
diff --git a/vector/v.in.ascii/testsuite/test_csv.py b/vector/v.in.ascii/testsuite/test_csv.py
new file mode 100644
index 0000000..638d18a
--- /dev/null
+++ b/vector/v.in.ascii/testsuite/test_csv.py
@@ -0,0 +1,182 @@
+"""Test v.in.ascii CSV capabilities
+
+:author: Vaclav Petras
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.script.core import read_command
+
+
+INPUT_NOQUOTES = """Id,POINT_X,POINT_Y,Category,ED field estimate
+100,437343.6704,4061363.41525,High Erosion,Low Deposition
+101,453643.127906,4050070.29852,High Erosion,Low Erosion
+102,454903.605427,4049480.80568,High Erosion,High Erosion
+105,437734.838807,4060493.98315,High Erosion,Low Erosion
+107,450833.019732,4048207.02664,High Erosion,Low Erosion
+"""
+
+INPUT_DOUBLEQUOTES = """Id,POINT_X,POINT_Y,Category,"ED field estimate"
+100,437343.6704,4061363.41525,"High Erosion","Low Deposition"
+101,453643.127906,4050070.29852,"High Erosion","Low Erosion"
+102,454903.605427,4049480.80568,"High Erosion","High Erosion"
+105,437734.838807,4060493.98315,"High Erosion","Low Erosion"
+107,450833.019732,4048207.02664,"High Erosion","Low Erosion"
+"""
+
+INPUT_TSV = """Id\tPOINT_X\tPOINT_Y\tCategory\t"ED field estimate"
+100\t437343.6704\t4061363.41525\t"High Erosion"\t"Low Deposition"
+101\t453643.127906\t4050070.29852\t"High Erosion"\t"Low Erosion"
+102\t454903.605427\t4049480.80568\t"High Erosion"\t"High Erosion"
+105\t437734.838807\t4060493.98315\t"High Erosion"\t"Low Erosion"
+107\t450833.019732\t4048207.02664\t"High Erosion"\t"Low Erosion"
+"""
+
+INPUT_UNCOMMON = """Id at POINT_X@POINT_Y at Category@^ED field estimate^
+100 at 437343.6704@4061363.41525@^High Erosion^@^Low Deposition^
+101 at 453643.127906@4050070.29852@^High Erosion^@^Low Erosion^
+102 at 454903.605427@4049480.80568@^High Erosion^@^High Erosion^
+105 at 437734.838807@4060493.98315@^High Erosion^@^Low Erosion^
+107 at 450833.019732@4048207.02664@^High Erosion^@^Low Erosion^
+"""
+
+TABLE_1 = """cat|x|y|ed_cat|field_estimate
+100|437343.6704|4061363.41525|High Erosion|Low Deposition
+101|453643.127906|4050070.29852|High Erosion|Low Erosion
+102|454903.605427|4049480.80568|High Erosion|High Erosion
+105|437734.838807|4060493.98315|High Erosion|Low Erosion
+107|450833.019732|4048207.02664|High Erosion|Low Erosion
+"""
+
+
+class SimpleCsvTestCase(TestCase):
+
+    xyvector = 'yxvetor_test'
+
+    def tearDown(self):
+        """Remove the vector map after each test method"""
+        self.runModule('g.remove', flags='f', type='vector',
+                       name=self.xyvector)
+
+    def test_no_text_delimeter(self):
+        """Test type of resulting map"""
+        self.assertModule(
+            'v.in.ascii', input='-', output=self.xyvector,
+            separator='comma', skip=1, x=2, y=3, cat=1,
+            columns="cat int, x double, y double,"
+                    " ed_cat varchar(20), field_estimate varchar(20)",
+            stdin_=INPUT_NOQUOTES)
+
+        category = read_command('v.db.select', map=self.xyvector,
+                                separator='pipe')
+        self.assertEqual(first=TABLE_1.replace('\n', os.linesep),
+                         second=category,
+                         msg="Attribute table has wrong entries")
+
+    def test_text_delimeter(self):
+        """Test loading CSV with text delimiter
+
+        Text delimiter added in r63581
+        """
+        self.assertModule(
+            'v.in.ascii', input='-', output=self.xyvector,
+            separator='comma', text='doublequote',
+            skip=1, x=2, y=3, cat=1,
+            columns="cat int, x double, y double,"
+                    " ed_cat varchar(20), field_estimate varchar(20)",
+            stdin_=INPUT_DOUBLEQUOTES)
+
+        category = read_command('v.db.select', map=self.xyvector,
+                                separator='pipe')
+        self.assertEqual(first=TABLE_1.replace('\n', os.linesep),
+                         second=category,
+                         msg="Attribute table has wrong entries")
+        # TODO: a general method to compare attribute tables? (might need to solve because of floats)
+        # TODO: standardize string strip? perhaps discourage, it messes up the diff
+        # TODO: use replace solution for newlines in lib (compare to current one)
+
+    def test_tsv(self):
+        """Test loading TSV (CSV with tab as delim)
+
+        Using double quote character for quote.
+        """
+        self.assertModule(
+            'v.in.ascii', input='-', output=self.xyvector,
+            separator='tab', text='"',
+            skip=1, x=2, y=3, cat=1,
+            columns="cat int, x double, y double,"
+                    " ed_cat varchar(20), field_estimate varchar(20)",
+            stdin_=INPUT_TSV)
+
+        category = read_command('v.db.select', map=self.xyvector,
+                                separator='pipe')
+        self.assertEqual(first=TABLE_1.replace('\n', os.linesep),
+                         second=category,
+                         msg="Attribute table has wrong entries")
+
+    def test_uncommon_delims(self):
+        """Test loading CSV with uncommon delimiters"""
+        self.assertModule(
+            'v.in.ascii', input='-', output=self.xyvector,
+            separator='@', text='^',
+            skip=1, x=2, y=3, cat=1,
+            columns="cat int, x double, y double,"
+                    " ed_cat varchar(20), field_estimate varchar(20)",
+            stdin_=INPUT_UNCOMMON)
+
+        category = read_command('v.db.select', map=self.xyvector,
+                                separator='pipe')
+        self.assertEqual(first=TABLE_1.replace('\n', os.linesep),
+                         second=category,
+                         msg="Attribute table has wrong entries")
+
+
+INPUT_DELIM_IN_TEXT = """Id,POINT_X,POINT_Y,Category,"ED field estimate"
+100,437343.6704,4061363.41525,"High Erosion, Low Canopy","Low Deposition, Low Canopy"
+101,453643.127906,4050070.29852,"High Erosion, High Canopy","Low Erosion, Low Canopy"
+102,454903.605427,4049480.80568,"High Erosion, High Canopy","High Erosion, Low Canopy"
+105,437734.838807,4060493.98315,"High Erosion, Low Canopy","Low Erosion, High Canopy"
+107,450833.019732,4048207.02664,"High Erosion, Low Canopy","Low Erosion, High Canopy"
+"""
+
+TABLE_2 = """cat|x|y|ed_cat|field_estimate
+100|437343.6704|4061363.41525|High Erosion, Low Canopy|Low Deposition, Low Canopy
+101|453643.127906|4050070.29852|High Erosion, High Canopy|Low Erosion, Low Canopy
+102|454903.605427|4049480.80568|High Erosion, High Canopy|High Erosion, Low Canopy
+105|437734.838807|4060493.98315|High Erosion, Low Canopy|Low Erosion, High Canopy
+107|450833.019732|4048207.02664|High Erosion, Low Canopy|Low Erosion, High Canopy
+"""
+
+
+class AdvancedCsvTestCase(TestCase):
+
+    xyvector = 'yxvetor_test'
+
+    def tearDown(self):
+        """Remove the vector map after each test method"""
+        self.runModule('g.remove', flags='f', type='vector',
+                       name=self.xyvector)
+
+    def test_delimeter_in_text(self):
+        """Test loading CSV with delimiter in text
+
+        Text delimiter added in r63581
+        """
+        self.assertModule(
+            'v.in.ascii', input='-', output=self.xyvector,
+            separator='comma', text='doublequote',
+            skip=1, x=2, y=3, cat=1,
+            columns="cat int, x double, y double,"
+                    " ed_cat varchar(40), field_estimate varchar(40)",
+            stdin_=INPUT_DELIM_IN_TEXT)
+
+        category = read_command('v.db.select', map=self.xyvector,
+                                separator='pipe')
+        self.assertEqual(first=TABLE_2.replace('\n', os.linesep),
+                         second=category,
+                         msg="Attribute table has wrong entries")
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.ascii/v.in.ascii.html b/vector/v.in.ascii/v.in.ascii.html
index 96ee41f..97d01cb 100644
--- a/vector/v.in.ascii/v.in.ascii.html
+++ b/vector/v.in.ascii/v.in.ascii.html
@@ -306,4 +306,4 @@ James Westervelt, U.S.Army Construction Engineering
 Research Laboratory<br>
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2016-02-14 01:00:11 +0100 (Sun, 14 Feb 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-13 10:18:55 +0100 (Wed, 13 Jan 2016) $</i>
diff --git a/vector/v.in.db/v.in.db.html b/vector/v.in.db/v.in.db.html
index e5790a4..b53656e 100644
--- a/vector/v.in.db/v.in.db.html
+++ b/vector/v.in.db/v.in.db.html
@@ -149,4 +149,4 @@ Radim Blazek<br>
 Various updates for GRASS 7 by Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2015-10-01 12:24:08 +0200 (Thu, 01 Oct 2015) $</i>
+<i>Last changed: $Date: 2015-10-01 12:23:08 +0200 (Thu, 01 Oct 2015) $</i>
diff --git a/vector/v.in.lidar/attributes.c b/vector/v.in.lidar/attributes.c
new file mode 100644
index 0000000..ab67815
--- /dev/null
+++ b/vector/v.in.lidar/attributes.c
@@ -0,0 +1,242 @@
+/*
+ * attribute handling
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (v.in.lidar)
+ *  Vaclav Petras (move code to standalone functions)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <liblas/capi/liblas.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/vector.h>
+#include <grass/dbmi.h>
+
+#include "lidar.h"
+
+/*
+ * Caller must execute
+ * db_commit_transaction(driver);
+ * db_close_database_shutdown_driver(driver);
+ * when done.
+ */
+void create_table_for_lidar(struct Map_info *vector_map, const char *name,
+                            int layer, dbDriver ** db_driver,
+                            struct field_info **finfo, int have_time,
+                            int have_color)
+{
+    char buf[2000];
+    dbString sql;
+
+    db_init_string(&sql);
+
+    char *cat_col_name = GV_KEY_COLUMN;
+
+    struct field_info *Fi = Vect_default_field_info(vector_map, layer,
+                                                    NULL, GV_1TABLE);
+
+    Vect_map_add_dblink(vector_map, layer, name, Fi->table,
+                        cat_col_name, Fi->database, Fi->driver);
+
+    /* check available LAS info, depends on POINT DATA RECORD FORMAT [0-5] */
+    /* X (double),
+     * Y (double),
+     * Z (double),
+     * intensity (double),
+     * return number (int),
+     * number of returns (int),
+     * scan direction (int),
+     * flight line edge (int),
+     * classification type (char),
+     * class (char),
+     * time (double) (FORMAT 1, 3, 4, 5),
+     * scan angle rank (int),
+     * source ID (int),
+     * user data (char), ???
+     * red (int)  (FORMAT 2, 3, 5),
+     * green (int) (FORMAT 2, 3, 5),
+     * blue (int) (FORMAT 2, 3, 5)*/
+
+    /* Create table */
+    sprintf(buf, "create table %s (%s integer", Fi->table, cat_col_name);
+    db_set_string(&sql, buf);
+
+    /* x, y, z */
+    sprintf(buf, ", x_coord double precision");
+    db_append_string(&sql, buf);
+    sprintf(buf, ", y_coord double precision");
+    db_append_string(&sql, buf);
+    sprintf(buf, ", z_coord double precision");
+    db_append_string(&sql, buf);
+    /* intensity */
+    sprintf(buf, ", intensity integer");
+    db_append_string(&sql, buf);
+    /* return number */
+    sprintf(buf, ", return integer");
+    db_append_string(&sql, buf);
+    /* number of returns */
+    sprintf(buf, ", n_returns integer");
+    db_append_string(&sql, buf);
+    /* scan direction */
+    sprintf(buf, ", scan_dir integer");
+    db_append_string(&sql, buf);
+    /* flight line edge */
+    sprintf(buf, ", edge integer");
+    db_append_string(&sql, buf);
+    /* classification type */
+    sprintf(buf, ", cl_type varchar(20)");
+    db_append_string(&sql, buf);
+    /* classification class */
+    sprintf(buf, ", class varchar(40)");
+    db_append_string(&sql, buf);
+    /* GPS time */
+    if (have_time) {
+        sprintf(buf, ", gps_time double precision");
+        db_append_string(&sql, buf);
+    }
+    /* scan angle */
+    sprintf(buf, ", angle integer");
+    db_append_string(&sql, buf);
+    /* source id */
+    sprintf(buf, ", src_id integer");
+    db_append_string(&sql, buf);
+    /* user data */
+    sprintf(buf, ", usr_data integer");
+    db_append_string(&sql, buf);
+    /* colors */
+    if (have_color) {
+        sprintf(buf, ", red integer, green integer, blue integer");
+        db_append_string(&sql, buf);
+        sprintf(buf, ", GRASSRGB varchar(11)");
+        db_append_string(&sql, buf);
+    }
+
+    db_append_string(&sql, ")");
+    G_debug(3, "%s", db_get_string(&sql));
+
+    dbDriver *driver = db_start_driver_open_database(Fi->driver,
+                                                     Vect_subst_var
+                                                     (Fi->database,
+                                                      vector_map));
+
+    if (driver == NULL) {
+        G_fatal_error(_("Unable open database <%s> by driver <%s>"),
+                      Vect_subst_var(Fi->database, vector_map), Fi->driver);
+    }
+    db_set_error_handler_driver(driver);
+
+    if (db_execute_immediate(driver, &sql) != DB_OK) {
+        G_fatal_error(_("Unable to create table: '%s'"), db_get_string(&sql));
+    }
+
+    if (db_create_index2(driver, Fi->table, cat_col_name) != DB_OK)
+        G_warning(_("Unable to create index for table <%s>, key <%s>"),
+                  Fi->table, cat_col_name);
+
+    if (db_grant_on_table
+        (driver, Fi->table, DB_PRIV_SELECT, DB_GROUP | DB_PUBLIC) != DB_OK)
+        G_fatal_error(_("Unable to grant privileges on table <%s>"),
+                      Fi->table);
+
+    db_begin_transaction(driver);
+
+    *db_driver = driver;
+    *finfo = Fi;
+}
+
+
+void las_point_to_attributes(struct field_info *Fi, dbDriver * driver,
+                             int cat, LASPointH LAS_point, double x,
+                             double y, double z, int have_time,
+                             int have_color)
+{
+    static char buf[2000];
+    static dbString sql;
+
+    /* unfortunately we have to do allocation every time because
+     * we need to clean the string the first time
+     * if desired, we could rely on static variable being initialized
+     * to 0 (at least C99) which is what the function is currently doing */
+    db_init_string(&sql);
+
+    char class_flag;
+    int las_class_type, las_class;
+
+    /* use LASPoint_Validate (LASPointH hPoint) to check for
+     * return number, number of returns, scan direction, flight line edge,
+     * classification, scan angle rank */
+    sprintf(buf, "insert into %s values ( %d", Fi->table, cat);
+    db_set_string(&sql, buf);
+
+    /* x, y, z */
+    sprintf(buf, ", %f", x);
+    db_append_string(&sql, buf);
+    sprintf(buf, ", %f", y);
+    db_append_string(&sql, buf);
+    sprintf(buf, ", %f", z);
+    db_append_string(&sql, buf);
+    /* intensity */
+    sprintf(buf, ", %d", LASPoint_GetIntensity(LAS_point));
+    db_append_string(&sql, buf);
+    /* return number */
+    sprintf(buf, ", %d", LASPoint_GetReturnNumber(LAS_point));
+    db_append_string(&sql, buf);
+    /* number of returns */
+    sprintf(buf, ",  %d", LASPoint_GetNumberOfReturns(LAS_point));
+    db_append_string(&sql, buf);
+    /* scan direction */
+    sprintf(buf, ", %d", LASPoint_GetScanDirection(LAS_point));
+    db_append_string(&sql, buf);
+    /* flight line edge */
+    sprintf(buf, ",  %d", LASPoint_GetFlightLineEdge(LAS_point));
+    db_append_string(&sql, buf);
+    class_flag = LASPoint_GetClassification(LAS_point);
+    /* classification type int or char ? */
+    las_class_type = class_flag / 32;
+    sprintf(buf, ", \'%s\'", class_type[las_class_type].name);
+    db_append_string(&sql, buf);
+    /* classification class int or char ? */
+    las_class = class_flag % 32;
+    if (las_class > 13)
+        las_class = 13;
+    sprintf(buf, ", \'%s\'", class_val[las_class].name);
+    db_append_string(&sql, buf);
+    /* GPS time */
+    if (have_time) {
+        sprintf(buf, ", %f", LASPoint_GetTime(LAS_point));
+        db_append_string(&sql, buf);
+    }
+    /* scan angle */
+    sprintf(buf, ", %d", LASPoint_GetScanAngleRank(LAS_point));
+    db_append_string(&sql, buf);
+    /* source id */
+    sprintf(buf, ", %d", LASPoint_GetPointSourceId(LAS_point));
+    db_append_string(&sql, buf);
+    /* user data */
+    sprintf(buf, ", %d", LASPoint_GetUserData(LAS_point));
+    db_append_string(&sql, buf);
+    /* colors */
+    if (have_color) {
+        LASColorH LAS_color = LASPoint_GetColor(LAS_point);
+        int red = LASColor_GetRed(LAS_color);
+        int green = LASColor_GetGreen(LAS_color);
+        int blue = LASColor_GetBlue(LAS_color);
+
+        sprintf(buf, ", %d, %d, %d", red, green, blue);
+        db_append_string(&sql, buf);
+        sprintf(buf, ", \"%03d:%03d:%03d\"", red, green, blue);
+        db_append_string(&sql, buf);
+    }
+    db_append_string(&sql, " )");
+    G_debug(3, "%s", db_get_string(&sql));
+
+    if (db_execute_immediate(driver, &sql) != DB_OK) {
+        G_fatal_error(_("Cannot insert new row: %s"), db_get_string(&sql));
+    }
+}
diff --git a/vector/v.in.lidar/attributes.h b/vector/v.in.lidar/attributes.h
new file mode 100644
index 0000000..5c491c5
--- /dev/null
+++ b/vector/v.in.lidar/attributes.h
@@ -0,0 +1,32 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      projection related functions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef GRASS_LIDAR_TO_ATTRIBUTES_H
+#define GRASS_LIDAR_TO_ATTRIBUTES_H
+
+struct field_info;
+struct dbDriver;                /* TODO: is this correct forward declaration? */
+
+void create_table_for_lidar(struct Map_info *vector_map, const char *name,
+                            int layer, dbDriver ** db_driver,
+                            struct field_info **finfo, int have_time,
+                            int have_color);
+
+void las_point_to_attributes(struct field_info *Fi, dbDriver * driver,
+                             int cat, LASPointH LAS_point, double x,
+                             double y, double z, int have_time,
+                             int have_color);
+
+#endif /* GRASS_LIDAR_TO_ATTRIBUTES_H */
diff --git a/vector/v.in.lidar/count_decimation.c b/vector/v.in.lidar/count_decimation.c
new file mode 100644
index 0000000..6c5fc36
--- /dev/null
+++ b/vector/v.in.lidar/count_decimation.c
@@ -0,0 +1,134 @@
+/****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+/* TODO: change int */
+/* TODO: revise names */
+
+#include "count_decimation.h"
+
+#include <grass/gis.h>
+
+#include <stdlib.h>
+
+
+void count_decimation_init(struct CountDecimationControl *control,
+                           int *skip, int *preserve,
+                           int *offset, int *limit)
+{
+    control->skip_every = 0;
+    control->preserve_every = 0;
+    /* counter used by both but that's ok, skip and preserve are exclusive */
+    control->every_counter = 0;
+    control->n_count_filtered = 0;
+    control->offset_n = 0;
+    control->offset_n_counter = 0;
+    control->limit_n = 0;
+    control->limit_n_counter = 0;
+    if (skip)
+        control->skip_every = *skip;
+    if (preserve)
+        control->preserve_every = *preserve;
+    if (offset)
+        control->offset_n = *offset;
+    if (limit)
+        control->limit_n = *limit;
+}
+
+
+int count_decimation_is_valid(struct CountDecimationControl *control)
+{
+    if (control->skip_every == 1)
+        return FALSE;
+    if (control->skip_every && control->preserve_every > 1)
+        return FALSE;
+    return TRUE;
+}
+
+
+int count_decimation_is_noop(struct CountDecimationControl *control)
+{
+    if (control->skip_every < 2 && control->preserve_every < 2
+            && !control->offset_n && !control->limit_n)
+        return TRUE;
+    return FALSE;
+}
+
+void count_decimation_init_from_str(struct CountDecimationControl *control,
+                                    const char *skip, const char *preserve,
+                                    const char *offset, const char *limit)
+{
+    control->skip_every = 0;
+    control->preserve_every = 0;
+    control->every_counter = 0;
+    control->n_count_filtered = 0;
+    control->offset_n = 0;
+    control->offset_n_counter = 0;
+    control->limit_n = 0;
+    control->limit_n_counter = 0;
+    /* TODO: atoi is probably not appropriate */
+    if (skip)
+        control->skip_every = atoi(skip);
+    if (preserve)
+        control->preserve_every = atoi(preserve);
+    if (offset)
+        control->offset_n = atoi(offset);
+    if (limit)
+        control->limit_n = atoi(limit);
+}
+
+
+/* TODO: eliminate noop cases */
+int count_decimation_is_out(struct CountDecimationControl *control)
+{
+    if (control->offset_n) {
+        if (control->offset_n_counter < control->offset_n) {
+            control->offset_n_counter++;
+            return TRUE;
+        }
+        else {
+            control->offset_n = 0;  /* disable offset check */
+        }
+    }
+    if (control->skip_every) {
+        control->every_counter++;
+        if (control->every_counter == control->skip_every) {
+            control->n_count_filtered++;
+            control->every_counter = 0;
+            return TRUE;
+        }
+    }
+    else if (control->preserve_every) {
+        control->every_counter++;
+        if (control->every_counter == control->preserve_every) {
+            control->every_counter = 0;
+        }
+        else {
+            control->n_count_filtered++;
+            return TRUE;
+        }
+    }
+    return FALSE;
+}
+
+
+int count_decimation_is_end(struct CountDecimationControl *control)
+{
+    if (control->limit_n) {
+        control->limit_n_counter++;
+        /* this matches the last successfully imported point */
+        if (control->limit_n_counter == control->limit_n)
+            return TRUE;
+    }
+    return FALSE;
+}
diff --git a/vector/v.in.lidar/count_decimation.h b/vector/v.in.lidar/count_decimation.h
new file mode 100644
index 0000000..19e21c6
--- /dev/null
+++ b/vector/v.in.lidar/count_decimation.h
@@ -0,0 +1,54 @@
+/****************************************************************************
+ *
+ * MODULE:       v.decimate
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      Reduce the number of points in a vector map
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef GRASS_COUNT_DECIMATION_H
+#define GRASS_COUNT_DECIMATION_H
+
+/* TODO: change int to ul/ull */
+/* TODO: revise names (now partially on some vars in v.in.lidar code) */
+
+struct CountDecimationControl {
+#ifdef HAVE_LONG_LONG_INT
+    unsigned long long offset_n;
+    unsigned long long offset_n_counter;
+    unsigned long long skip_every;
+    unsigned long long preserve_every;
+    unsigned long long every_counter;
+    unsigned long long n_count_filtered;
+    unsigned long long limit_n;
+    unsigned long long limit_n_counter;
+#else
+    unsigned long offset_n;
+    unsigned long offset_n_counter;
+    unsigned long skip_every;
+    unsigned long preserve_every;
+    unsigned long every_counter;
+    unsigned long n_count_filtered;
+    unsigned long limit_n;
+    unsigned long limit_n_counter;
+#endif
+};
+
+void count_decimation_init(struct CountDecimationControl *control,
+                           int *skip, int *preserve,
+                           int *offset, int *limit);
+int count_decimation_is_valid(struct CountDecimationControl *control);
+int count_decimation_is_noop(struct CountDecimationControl *control);
+void count_decimation_init_from_str(struct CountDecimationControl *control,
+                                    const char *skip, const char *preserve,
+                                    const char *offset, const char *limit);
+int count_decimation_is_out(struct CountDecimationControl *control);
+int count_decimation_is_end(struct CountDecimationControl *control);
+
+#endif /* GRASS_COUNT_DECIMATION_H */
diff --git a/vector/v.in.lidar/filters.c b/vector/v.in.lidar/filters.c
new file mode 100644
index 0000000..12b84e3
--- /dev/null
+++ b/vector/v.in.lidar/filters.c
@@ -0,0 +1,89 @@
+/*
+ * v.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+
+#include "filters.h"
+
+#include "lidar.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+void return_filter_create_from_string(struct ReturnFilter *return_filter,
+                                      const char *name)
+{
+    return_filter->filter = LAS_ALL;
+    if (name) {
+        if (strcmp(name, "first") == 0)
+            return_filter->filter = LAS_FIRST;
+        else if (strcmp(name, "last") == 0)
+            return_filter->filter = LAS_LAST;
+        else if (strcmp(name, "mid") == 0)
+            return_filter->filter = LAS_MID;
+        else
+            G_fatal_error(_("Unknown return filter value <%s>"), name);
+    }
+}
+
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns)
+{
+    if (return_filter->filter == LAS_ALL)
+        return FALSE;
+    int skipme = 1;
+
+    switch (return_filter->filter) {
+    case LAS_FIRST:
+        if (return_n == 1)
+            skipme = 0;
+        break;
+    case LAS_MID:
+        if (return_n > 1 && return_n < n_returns)
+            skipme = 0;
+        break;
+    case LAS_LAST:
+        if (n_returns > 1 && return_n == n_returns)
+            skipme = 0;
+        break;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
+
+void class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                      char **classes)
+{
+    class_filter->str_classes = classes;
+}
+
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n)
+{
+    if (!class_filter->str_classes)
+        return FALSE;
+    int i = 0;
+    int skipme = TRUE;
+
+    while (class_filter->str_classes[i]) {
+        if (class_n == atoi(class_filter->str_classes[i])) {
+            skipme = FALSE;
+            break;
+        }
+        i++;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
diff --git a/vector/v.in.lidar/filters.h b/vector/v.in.lidar/filters.h
new file mode 100644
index 0000000..644cc29
--- /dev/null
+++ b/vector/v.in.lidar/filters.h
@@ -0,0 +1,37 @@
+/*
+ * v.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#ifndef __FILTERS_H__
+#define __FILTERS_H__
+
+struct ReturnFilter
+{
+    int filter;
+};
+
+struct ClassFilter
+{
+
+    /** NULL terminated list of class numbers represented as string */
+    char **str_classes;
+};
+
+void return_filter_create_from_string(struct ReturnFilter *return_filter,
+                                      const char *name);
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns);
+void class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                      char **classes);
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n);
+
+#endif /* __FILTERS_H__ */
diff --git a/vector/v.in.lidar/info.c b/vector/v.in.lidar/info.c
new file mode 100644
index 0000000..fff989d
--- /dev/null
+++ b/vector/v.in.lidar/info.c
@@ -0,0 +1,89 @@
+/*
+ * v.in.lidar projection-related functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (v.in.lidar)
+ *  Vaclav Petras (move functions to a file)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/gprojects.h>
+
+#include "info.h"
+
+void print_lasinfo(LASHeaderH LAS_header, LASSRSH LAS_srs)
+{
+    char *las_srs_proj4 = LASSRS_GetProj4(LAS_srs);
+    int las_point_format = LASHeader_GetDataFormatId(LAS_header);
+
+    fprintf(stdout, "\nUsing LAS Library Version '%s'\n\n",
+            LAS_GetFullVersion());
+    fprintf(stdout, "LAS File Version:                  %d.%d\n",
+            LASHeader_GetVersionMajor(LAS_header),
+            LASHeader_GetVersionMinor(LAS_header));
+    fprintf(stdout, "System ID:                         '%s'\n",
+            LASHeader_GetSystemId(LAS_header));
+    fprintf(stdout, "Generating Software:               '%s'\n",
+            LASHeader_GetSoftwareId(LAS_header));
+    fprintf(stdout, "File Creation Day/Year:            %d/%d\n",
+            LASHeader_GetCreationDOY(LAS_header),
+            LASHeader_GetCreationYear(LAS_header));
+    fprintf(stdout, "Point Data Format:                 %d\n",
+            las_point_format);
+    fprintf(stdout, "Number of Point Records:           %d\n",
+            LASHeader_GetPointRecordsCount(LAS_header));
+    fprintf(stdout, "Number of Points by Return:        %d %d %d %d %d\n",
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 0),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 1),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 2),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 3),
+            LASHeader_GetPointRecordsByReturnCount(LAS_header, 4));
+    fprintf(stdout, "Scale Factor X Y Z:                %g %g %g\n",
+            LASHeader_GetScaleX(LAS_header),
+            LASHeader_GetScaleY(LAS_header), LASHeader_GetScaleZ(LAS_header));
+    fprintf(stdout, "Offset X Y Z:                      %g %g %g\n",
+            LASHeader_GetOffsetX(LAS_header),
+            LASHeader_GetOffsetY(LAS_header),
+            LASHeader_GetOffsetZ(LAS_header));
+    fprintf(stdout, "Min X Y Z:                         %g %g %g\n",
+            LASHeader_GetMinX(LAS_header),
+            LASHeader_GetMinY(LAS_header), LASHeader_GetMinZ(LAS_header));
+    fprintf(stdout, "Max X Y Z:                         %g %g %g\n",
+            LASHeader_GetMaxX(LAS_header),
+            LASHeader_GetMaxY(LAS_header), LASHeader_GetMaxZ(LAS_header));
+    if (las_srs_proj4 && strlen(las_srs_proj4) > 0) {
+        fprintf(stdout, "Spatial Reference:\n");
+        fprintf(stdout, "%s\n", las_srs_proj4);
+    }
+    else {
+        fprintf(stdout, "Spatial Reference:                 None\n");
+    }
+
+    fprintf(stdout, "\nData Fields:\n");
+    fprintf(stdout,
+            "  'X'\n  'Y'\n  'Z'\n  'Intensity'\n  'Return Number'\n");
+    fprintf(stdout, "  'Number of Returns'\n  'Scan Direction'\n");
+    fprintf(stdout,
+            "  'Flighline Edge'\n  'Classification'\n  'Scan Angle Rank'\n");
+    fprintf(stdout, "  'User Data'\n  'Point Source ID'\n");
+    if (las_point_format == 1 || las_point_format == 3 ||
+        las_point_format == 4 || las_point_format == 5) {
+        fprintf(stdout, "  'GPS Time'\n");
+    }
+    if (las_point_format == 2 || las_point_format == 3 ||
+        las_point_format == 5) {
+        fprintf(stdout, "  'Red'\n  'Green'\n  'Blue'\n");
+    }
+    fprintf(stdout, "\n");
+    fflush(stdout);
+
+    return;
+}
diff --git a/vector/v.in.lidar/info.h b/vector/v.in.lidar/info.h
new file mode 100644
index 0000000..0cdeeca
--- /dev/null
+++ b/vector/v.in.lidar/info.h
@@ -0,0 +1,21 @@
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      projection related functions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+#include <liblas/capi/liblas.h>
+
+#ifndef LIDAR_INFO_H
+#define LIDAR_INFO_H
+
+void print_lasinfo(LASHeaderH LAS_header, LASSRSH LAS_srs);
+
+#endif /* LIDAR_INFO_H */
diff --git a/vector/v.in.lidar/lidar.c b/vector/v.in.lidar/lidar.c
new file mode 100644
index 0000000..48f3cc1
--- /dev/null
+++ b/vector/v.in.lidar/lidar.c
@@ -0,0 +1,51 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      common lidar-related definitions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#include "lidar.h"
+
+struct class_table class_val[] = {
+    {0, "Created, never classified"},
+    {1, "Unclassified"},
+    {2, "Ground"},
+    {3, "Low Vegetation"},
+    {4, "Medium Vegetation"},
+    {5, "High Vegetation"},
+    {6, "Building"},
+    {7, "Low Point (noise)"},
+    {8, "Model Key-point (mass point)"},
+    {9, "Water"},
+    {10, "Reserved for ASPRS Definition"},
+    {11, "Reserved for ASPRS Definition"},
+    {12, "Overlap Points"},
+    {13 /* 13 - 31 */ , "Reserved for ASPRS Definition"},
+    {0, 0}
+};
+
+struct class_table class_type[] = {
+    {5, "Synthetic"},
+    {6, "Key-point"},
+    {7, "Withheld"},
+    {0, 0}
+};
+
+int return_to_cat(int return_n, int n_returns)
+{
+    if (return_n == 1)
+        return LAS_FIRST;
+    else if (n_returns > 1 && return_n == n_returns)
+            return LAS_LAST;
+    else
+        return LAS_MID;
+}
diff --git a/vector/v.in.lidar/lidar.h b/vector/v.in.lidar/lidar.h
new file mode 100644
index 0000000..46d20fe
--- /dev/null
+++ b/vector/v.in.lidar/lidar.h
@@ -0,0 +1,71 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      common lidar-related definitions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef GRASS_LIDAR_H
+#define GRASS_LIDAR_H
+
+#define LAS_ALL 0
+#define LAS_FIRST 1
+#define LAS_MID 2
+#define LAS_LAST 3
+
+/*
+ * ASPRS Standard LIDAR Point Classes
+ * Classification Value (bits 0:4) : Meaning
+ *      0 : Created, never classified
+ *      1 : Unclassified
+ *      2 : Ground
+ *      3 : Low Vegetation
+ *      4 : Medium Vegetation
+ *      5 : High Vegetation
+ *      6 : Building
+ *      7 : Low Point (noise)
+ *      8 : Model Key-point (mass point)
+ *      9 : Water
+ *     10 : Reserved for ASPRS Definition
+ *     11 : Reserved for ASPRS Definition
+ *     12 : Overlap Points
+ *  13-31 : Reserved for ASPRS Definition
+ */
+
+/* Classification Bit Field Encoding
+ * Bits | Field Name     | Description
+ *  0-4 | Classification | Standard ASPRS classification as defined in the
+ *                         above classification table.
+ *    5 | Synthetic      | If set then this point was created by a technique
+ *                         other than LIDAR collection such as digitized from
+ *                         a photogrammetric stereo model or by traversing
+ *                         a waveform.
+ *    6 | Key-point      | If set, this point is considered to be a model
+ *                         key-point and thus generally should not be withheld
+ *                         in a thinning algorithm.
+ *    7 | Withheld       | If set, this point should not be included in
+ *                         processing (synonymous with Deleted).
+ */
+
+/* keep the comments above in sync with the .c file */
+
+struct class_table
+{
+    int code;
+    char *name;
+};
+
+extern struct class_table class_val[];
+extern struct class_table class_type[];
+
+int return_to_cat(int return_n, int n_returns);
+
+#endif /* GRASS_LIDAR_H */
diff --git a/vector/v.in.lidar/main.c b/vector/v.in.lidar/main.c
index f4cd4cf..113c728 100644
--- a/vector/v.in.lidar/main.c
+++ b/vector/v.in.lidar/main.c
@@ -4,19 +4,17 @@
  * MODULE:       v.in.lidar
  *
  * AUTHOR(S):    Markus Metz
+ *               Vaclav Petras (decimation, cats, areas, zrange)
  *               based on v.in.ogr
  *
  * PURPOSE:      Import LiDAR LAS points
  *
- * COPYRIGHT:    (C) 2011-2014 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2011-2015 by the GRASS Development Team
  *
  *               This program is free software under the
  *               GNU General Public License (>=v2).
  *               Read the file COPYING that comes with GRASS
  *               for details.
- *
- * TODO: - make fixed field length of OFTIntegerList dynamic
- *       - several other TODOs below
 **************************************************************/
 
 #include <stdlib.h>
@@ -29,82 +27,46 @@
 #include <grass/glocale.h>
 #include <liblas/capi/liblas.h>
 
+#include "count_decimation.h"
+#include "projection.h"
+#include "lidar.h"
+#include "attributes.h"
+#include "info.h"
+#include "vector_mask.h"
+#include "filters.h"
+
 #ifndef MAX
 #  define MIN(a,b)      ((a<b) ? a : b)
 #  define MAX(a,b)      ((a>b) ? a : b)
 #endif
 
-#define LAS_ALL 0
-#define LAS_FIRST 1
-#define LAS_LAST 2
-#define LAS_MID 3
-
-/*
- * ASPRS Standard LIDAR Point Classes
- * Classification Value (bits 0:4) : Meaning
- *      0 : Created, never classified
- *      1 : Unclassified
- *      2 : Ground
- *      3 : Low Vegetation
- *      4 : Medium Vegetation
- *      5 : High Vegetation
- *      6 : Building
- *      7 : Low Point (noise)
- *      8 : Model Key-point (mass point)
- *      9 : Water
- *     10 : Reserved for ASPRS Definition
- *     11 : Reserved for ASPRS Definition
- *     12 : Overlap Points
- *  13-31 : Reserved for ASPRS Definition
- */
-
-/* Classification Bit Field Encoding
- * Bits | Field Name     | Description
- *  0-4 | Classification | Standard ASPRS classification as defined in the
- *                         above classification table.
- *    5 | Synthetic      | If set then this point was created by a technique
- *                         other than LIDAR collection such as digitized from
- *	                   a photogrammetric stereo model or by traversing
- *                         a waveform.
- *    6 | Key-point      | If set, this point is considered to be a model 
- *                         key-point and thus generally should not be withheld
- *                         in a thinning algorithm.
- *    7 | Withheld       | If set, this point should not be included in
- *                         processing (synonymous with Deleted).
-*/
-
-struct class_table
+static void check_layers_not_equal(int primary, int secondary,
+                                   const char *primary_name,
+                                   const char *secondary_name)
+{
+    if (primary && primary == secondary)
+        G_fatal_error(_("Values of %s and %s are the same."
+                        " All categories would be stored only"
+                        " in layer number <%d>"), primary_name,
+                      secondary_name, primary);
+}
+
+static void check_layers_in_list_not_equal(struct Option **options,
+                                           int *values, size_t size)
 {
-    int code;
-    char *name;
-};
-
-static struct class_table class_val[] = {
-    {0, "Created, never classified"},
-    {1, "Unclassified"},
-    {2, "Ground"},
-    {3, "Low Vegetation"},
-    {4, "Medium Vegetation"},
-    {5, "High Vegetation"},
-    {6, "Building"},
-    {7, "Low Point (noise)"},
-    {8, "Model Key-point (mass point)"},
-    {9, "Water"},
-    {10, "Reserved for ASPRS Definition"},
-    {11, "Reserved for ASPRS Definition"},
-    {12, "Overlap Points"},
-    {13 /* 13 - 31 */, "Reserved for ASPRS Definition"},
-    {0, 0}
-};
-
-static struct class_table class_type[] = {
-    {5, "Synthetic"},
-    {6, "Key-point"},
-    {7, "Withheld"},
-    {0, 0}
-};
-
-void print_lasinfo(LASHeaderH LAS_header, LASSRSH LAS_srs);
+    size_t layer_index_1, layer_index_2;
+    for (layer_index_1 = 0; layer_index_1 < size; layer_index_1++) {
+        for (layer_index_2 = 0; layer_index_2 < size; layer_index_2++) {
+            if (layer_index_1 != layer_index_2) {
+                check_layers_not_equal(values[layer_index_1],
+                                       values[layer_index_2],
+                                       options[layer_index_1]->key,
+                                       options[layer_index_2]->key);
+            }
+        }
+    }
+}
+
 
 int main(int argc, char *argv[])
 {
@@ -112,9 +74,18 @@ int main(int argc, char *argv[])
     float xmin = 0., ymin = 0., xmax = 0., ymax = 0.;
     struct GModule *module;
     struct Option *in_opt, *out_opt, *spat_opt, *filter_opt, *class_opt;
-    struct Option *outloc_opt;
+    struct Option *id_layer_opt;
+    struct Option *return_layer_opt;
+    struct Option *class_layer_opt;
+    struct Option *rgb_layer_opt;
+    struct Option *vector_mask_opt, *vector_mask_field_opt;
+    struct Option *skip_opt, *preserve_opt, *offset_opt, *limit_opt;
+    struct Option *outloc_opt, *zrange_opt;
     struct Flag *print_flag, *notab_flag, *region_flag, *notopo_flag;
+    struct Flag *nocats_flag;
     struct Flag *over_flag, *extend_flag, *no_import_flag;
+    struct Flag *invert_mask_flag;
+    struct Flag *only_valid_flag;
     char buf[2000];
     struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
     struct Key_Value *proj_info, *proj_units;
@@ -129,7 +100,6 @@ int main(int argc, char *argv[])
     /* Attributes */
     struct field_info *Fi;
     dbDriver *driver;
-    dbString sql, strval;
     
     /* LAS */
     LASReaderH LAS_reader;
@@ -139,15 +109,25 @@ int main(int argc, char *argv[])
     double scale_x, scale_y, scale_z, offset_x, offset_y, offset_z;
     int las_point_format;
     int have_time, have_color;
-    int return_filter;
-    int skipme;
     int point_class;
-    unsigned int not_valid;	
 
     struct line_pnts *Points;
     struct line_cats *Cats;
 
-    unsigned int n_features, feature_count, n_outside, n_filtered, n_class_filtered;
+    int cat_max_reached = FALSE;
+
+#ifdef HAVE_LONG_LONG_INT
+    unsigned long long n_features; /* what libLAS reports as point count */
+    unsigned long long points_imported; /* counter how much we have imported */
+    unsigned long long feature_count, n_outside, zrange_filtered,
+        n_outside_mask, n_filtered, n_class_filtered, not_valid;
+#else
+    unsigned long n_features;
+    unsigned long points_imported;
+    unsigned long feature_count, n_outside, zrange_filtered,
+        n_outside_mask, n_filtered, n_class_filtered, not_valid;
+#endif
+
     int overwrite;
 
     G_gisinit(argv[0]);
@@ -163,7 +143,38 @@ int main(int argc, char *argv[])
     in_opt->description = _("LiDAR input files in LAS format (*.las or *.laz)");
 
     out_opt = G_define_standard_option(G_OPT_V_OUTPUT);
-    
+
+    id_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    id_layer_opt->key = "id_layer";
+    id_layer_opt->label = _("Layer number to store generated point ID as category");
+    id_layer_opt->description = _("Set to 1 by default, use -c to not store it");
+    id_layer_opt->answer = NULL;
+    id_layer_opt->guisection = _("Categories");
+
+    return_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    return_layer_opt->key = "return_layer";
+    return_layer_opt->label =
+        _("Layer number to store return information as category");
+    return_layer_opt->description = _("Leave empty to not store it");
+    return_layer_opt->answer = NULL;
+    return_layer_opt->guisection = _("Categories");
+
+    class_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    class_layer_opt->key = "class_layer";
+    class_layer_opt->label =
+        _("Layer number to store class number as category");
+    class_layer_opt->description = _("Leave empty to not store it");
+    class_layer_opt->answer = NULL;
+    class_layer_opt->guisection = _("Categories");
+
+    rgb_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    rgb_layer_opt->key = "rgb_layer";
+    rgb_layer_opt->label =
+        _("Layer number where RBG colors are stored as category");
+    rgb_layer_opt->description = _("Leave empty to not store it");
+    rgb_layer_opt->answer = NULL;
+    rgb_layer_opt->guisection = _("Categories");
+
     spat_opt = G_define_option();
     spat_opt->key = "spatial";
     spat_opt->type = TYPE_DOUBLE;
@@ -171,17 +182,18 @@ int main(int argc, char *argv[])
     spat_opt->required = NO;
     spat_opt->key_desc = "xmin,ymin,xmax,ymax";
     spat_opt->label = _("Import subregion only");
-    spat_opt->guisection = _("Subregion");
+    spat_opt->guisection = _("Selection");
     spat_opt->description =
 	_("Format: xmin,ymin,xmax,ymax - usually W,S,E,N");
 
-    outloc_opt = G_define_option();
-    outloc_opt->key = "location";
-    outloc_opt->type = TYPE_STRING;
-    outloc_opt->required = NO;
-    outloc_opt->description = _("Name for new location to create");
-    outloc_opt->key_desc = "name";
-    
+    zrange_opt = G_define_option();
+    zrange_opt->key = "zrange";
+    zrange_opt->type = TYPE_DOUBLE;
+    zrange_opt->required = NO;
+    zrange_opt->key_desc = "min,max";
+    zrange_opt->description = _("Filter range for z data (min,max)");
+    zrange_opt->guisection = _("Selection");
+
     filter_opt = G_define_option();
     filter_opt->key = "return_filter";
     filter_opt->type = TYPE_STRING;
@@ -189,6 +201,7 @@ int main(int argc, char *argv[])
     filter_opt->label = _("Only import points of selected return type");
     filter_opt->description = _("If not specified, all points are imported");
     filter_opt->options = "first,last,mid";
+    filter_opt->guisection = _("Selection");
 
     class_opt = G_define_option();
     class_opt->key = "class_filter";
@@ -198,30 +211,114 @@ int main(int argc, char *argv[])
     class_opt->label = _("Only import points of selected class(es)");
     class_opt->description = _("Input is comma separated integers. "
                                "If not specified, all points are imported.");
+    class_opt->guisection = _("Selection");
+
+    vector_mask_opt = G_define_standard_option(G_OPT_V_INPUT);
+    vector_mask_opt->key = "mask";
+    vector_mask_opt->required = NO;
+    vector_mask_opt->label = _("Areas where to import points");
+    vector_mask_opt->description = _("Name of vector map with areas where the points should be imported");
+    vector_mask_opt->guisection = _("Selection");
+
+    vector_mask_field_opt = G_define_standard_option(G_OPT_V_FIELD);
+    vector_mask_field_opt->key = "mask_layer";
+    vector_mask_field_opt->label = _("Layer number or name for mask option");
+    vector_mask_field_opt->guisection = _("Selection");
+
+    skip_opt = G_define_option();
+    skip_opt->key = "skip";
+    skip_opt->type = TYPE_INTEGER;
+    skip_opt->multiple = NO;
+    skip_opt->required = NO;
+    skip_opt->label = _("Do not import every n-th point");
+    skip_opt->description = _("For example, 5 will import 80 percent of points. "
+                              "If not specified, all points are imported");
+    skip_opt->guisection = _("Decimation");
+
+    preserve_opt = G_define_option();
+    preserve_opt->key = "preserve";
+    preserve_opt->type = TYPE_INTEGER;
+    preserve_opt->multiple = NO;
+    preserve_opt->required = NO;
+    preserve_opt->label = _("Import only every n-th point");
+    preserve_opt->description = _("For example, 4 will import 25 percent of points. "
+                                  "If not specified, all points are imported");
+    preserve_opt->guisection = _("Decimation");
+
+    offset_opt = G_define_option();
+    offset_opt->key = "offset";
+    offset_opt->type = TYPE_INTEGER;
+    offset_opt->multiple = NO;
+    offset_opt->required = NO;
+    offset_opt->label = _("Skip first n points");
+    offset_opt->description = _("Skips the given number of points at the beginning.");
+    offset_opt->guisection = _("Decimation");
+
+    limit_opt = G_define_option();
+    limit_opt->key = "limit";
+    limit_opt->type = TYPE_INTEGER;
+    limit_opt->multiple = NO;
+    limit_opt->required = NO;
+    limit_opt->label = _("Import only n points");
+    limit_opt->description = _("Imports only the given number of points");
+    limit_opt->guisection = _("Decimation");
+
+    outloc_opt = G_define_option();
+    outloc_opt->key = "location";
+    outloc_opt->type = TYPE_STRING;
+    outloc_opt->required = NO;
+    outloc_opt->description = _("Name for new location to create");
+    outloc_opt->key_desc = "name";
 
     print_flag = G_define_flag();
     print_flag->key = 'p';
     print_flag->description =
 	_("Print LAS file info and exit");
     print_flag->suppress_required = YES;
-    
-    notab_flag = G_define_standard_flag(G_FLG_V_TABLE);
-    notab_flag->guisection = _("Attributes");
-
-    over_flag = G_define_flag();
-    over_flag->key = 'o';
-    over_flag->description =
-	_("Override dataset projection (use location's projection)");
 
     region_flag = G_define_flag();
     region_flag->key = 'r';
-    region_flag->guisection = _("Subregion");
+    region_flag->guisection = _("Selection");
     region_flag->description = _("Limit import to the current region");
 
+    invert_mask_flag = G_define_flag();
+    invert_mask_flag->key = 'u';
+    invert_mask_flag->description = _("Invert mask when selecting points");
+    invert_mask_flag->guisection = _("Selection");
+
+    only_valid_flag = G_define_flag();
+    only_valid_flag->key = 'v';
+    only_valid_flag->label = _("Use only valid points");
+    only_valid_flag->description =
+        _("Points invalid according to APSRS LAS specification will be"
+          " filtered out");
+    only_valid_flag->guisection = _("Selection");
+
     extend_flag = G_define_flag();
     extend_flag->key = 'e';
     extend_flag->description =
-	_("Extend region extents based on new dataset");
+        _("Extend region extents based on new dataset");
+
+    notab_flag = G_define_standard_flag(G_FLG_V_TABLE);
+    notab_flag->guisection = _("Speed");
+
+    nocats_flag = G_define_flag();
+    nocats_flag->key = 'c';
+    nocats_flag->label =
+        _("Do not automatically add unique ID as category to each point");
+    nocats_flag->description =
+        _("Create only requested layers and categories");
+    nocats_flag->guisection = _("Speed");
+
+    notopo_flag = G_define_standard_flag(G_FLG_V_TOPO);
+    notopo_flag->guisection = _("Speed");
+
+    over_flag = G_define_flag();
+    over_flag->key = 'o';
+    over_flag->label =
+        _("Override projection check (use current location's projection)");
+    over_flag->description =
+        _("Assume that the dataset has same projection as the current location");
 
     no_import_flag = G_define_flag();
     no_import_flag->key = 'i';
@@ -230,7 +327,12 @@ int main(int argc, char *argv[])
           " Do not import the vector data.");
     no_import_flag->suppress_required = YES;
 
-    notopo_flag = G_define_standard_flag(G_FLG_V_TOPO);
+    G_option_exclusive(skip_opt, preserve_opt, NULL);
+    G_option_requires(nocats_flag, notab_flag, NULL);
+    G_option_exclusive(nocats_flag, id_layer_opt, NULL);
+    G_option_requires(return_layer_opt, id_layer_opt, nocats_flag, NULL);
+    G_option_requires(class_layer_opt, id_layer_opt, nocats_flag, NULL);
+    G_option_requires(rgb_layer_opt, id_layer_opt, nocats_flag, NULL);
 
     /* The parser checks if the map already exists in current mapset, this is
      * wrong if location options is used, so we switch out the check and do it
@@ -280,16 +382,64 @@ int main(int argc, char *argv[])
 	exit(EXIT_SUCCESS);
     }
 
-    return_filter = LAS_ALL;
-    if (filter_opt->answer) {
-	if (strcmp(filter_opt->answer, "first") == 0)
-	    return_filter = LAS_FIRST;
-	else if (strcmp(filter_opt->answer, "last") == 0)
-	    return_filter = LAS_LAST;
-	else if (strcmp(filter_opt->answer, "mid") == 0)
-	    return_filter = LAS_MID;
-	else
-	    G_fatal_error(_("Unknown filter option <%s>"), filter_opt->answer);
+    int only_valid = FALSE;
+    if (only_valid_flag->answer)
+        only_valid = TRUE;
+
+    struct ReturnFilter return_filter_struct;
+    return_filter_create_from_string(&return_filter_struct, filter_opt->answer);
+    struct ClassFilter class_filter;
+    class_filter_create_from_strings(&class_filter, class_opt->answers);
+
+    int id_layer = 1;
+    int return_layer = 0;
+    int class_layer = 0;
+    int rgb_layer = 0;
+    if (id_layer_opt->answer)
+        id_layer = atoi(id_layer_opt->answer);
+    if (return_layer_opt->answer)
+        return_layer = atoi(return_layer_opt->answer);
+    if (class_layer_opt->answer)
+        class_layer = atoi(class_layer_opt->answer);
+    if (rgb_layer_opt->answer)
+        rgb_layer = atoi(rgb_layer_opt->answer);
+
+    if (nocats_flag->answer) {
+        id_layer = 0;
+    }
+    /* no cats forces no table earlier */
+    if (!notab_flag->answer && !id_layer) {
+        G_message(_("-%c flag is not set but ID layer is not specified"), notab_flag->key);
+        G_fatal_error(_("ID layer is required to store attribute table"));
+    }
+
+    struct Option *layer_options[4] = {id_layer_opt, return_layer_opt,
+                                       class_layer_opt, rgb_layer_opt};
+    int layer_values[4] = {id_layer, return_layer, class_layer, rgb_layer};
+    check_layers_in_list_not_equal(layer_options, layer_values, 4);
+
+    if (id_layer)
+        G_verbose_message(_("Storing generated point IDs as categories"
+                            " in the layer <%d>, consequently no more"
+                            " than %d points can be imported"),
+                          id_layer, GV_CAT_MAX);
+
+    double zrange_min, zrange_max;
+    int use_zrange = FALSE;
+
+    if (zrange_opt->answer != NULL) {
+        if (zrange_opt->answers[0] == NULL || zrange_opt->answers[1] == NULL)
+            G_fatal_error(_("Invalid zrange <%s>"), zrange_opt->answer);
+        sscanf(zrange_opt->answers[0], "%lf", &zrange_min);
+        sscanf(zrange_opt->answers[1], "%lf", &zrange_max);
+        /* for convenience, switch order to make valid input */
+        if (zrange_min > zrange_max) {
+            double tmp = zrange_max;
+
+            zrange_max = zrange_min;
+            zrange_min = tmp;
+        }
+        use_zrange = TRUE;
     }
 
     if (region_flag->answer) {
@@ -374,115 +524,15 @@ int main(int argc, char *argv[])
 	    it should switch back with G_switch_env(). See r.in.gdal */
     }
     else {
-	int err = 0;
-
-	/* Projection only required for checking so convert non-interactively */
-	if (GPJ_wkt_to_grass(&cellhd, &proj_info,
-			     &proj_units, projstr, 0) < 0)
-	    G_warning(_("Unable to convert input map projection information to "
-		       "GRASS format for checking"));
-
 	/* Does the projection of the current location match the dataset? */
 	/* G_get_window seems to be unreliable if the location has been changed */
 	G_get_default_window(&loc_wind);
-	/* fetch LOCATION PROJ info */
-	if (loc_wind.proj != PROJECTION_XY) {
-	    loc_proj_info = G_get_projinfo();
-	    loc_proj_units = G_get_projunits();
-	}
-
-	if (over_flag->answer) {
-	    cellhd.proj = loc_wind.proj;
-	    cellhd.zone = loc_wind.zone;
-	    G_message(_("Over-riding projection check"));
-	}
-	else if (loc_wind.proj != cellhd.proj
-		 || (err =
-		     G_compare_projections(loc_proj_info, loc_proj_units,
-					   proj_info, proj_units)) != TRUE) {
-	    int i_value;
-
-	    strcpy(error_msg,
-		   _("Projection of dataset does not"
-		     " appear to match current location.\n\n"));
-
-	    /* TODO: output this info sorted by key: */
-	    if (loc_wind.proj != cellhd.proj || err != -2) {
-		if (loc_proj_info != NULL) {
-		    strcat(error_msg, _("GRASS LOCATION PROJ_INFO is:\n"));
-		    for (i_value = 0; i_value < loc_proj_info->nitems;
-			 i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				loc_proj_info->key[i_value],
-				loc_proj_info->value[i_value]);
-		    strcat(error_msg, "\n");
-		}
-
-		if (proj_info != NULL) {
-		    strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
-		    for (i_value = 0; i_value < proj_info->nitems; i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				proj_info->key[i_value],
-				proj_info->value[i_value]);
-		}
-		else {
-		    strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
-		    if (cellhd.proj == PROJECTION_XY)
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (unreferenced/unknown)\n",
-				cellhd.proj);
-		    else if (cellhd.proj == PROJECTION_LL)
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (lat/long)\n",
-				cellhd.proj);
-		    else if (cellhd.proj == PROJECTION_UTM)
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (UTM), zone = %d\n",
-				cellhd.proj, cellhd.zone);
-		    else
-			sprintf(error_msg + strlen(error_msg),
-				"Dataset proj = %d (unknown), zone = %d\n",
-				cellhd.proj, cellhd.zone);
-		}
-	    }
-	    else {
-		if (loc_proj_units != NULL) {
-		    strcat(error_msg, "GRASS LOCATION PROJ_UNITS is:\n");
-		    for (i_value = 0; i_value < loc_proj_units->nitems;
-			 i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				loc_proj_units->key[i_value],
-				loc_proj_units->value[i_value]);
-		    strcat(error_msg, "\n");
-		}
-
-		if (proj_units != NULL) {
-		    strcat(error_msg, "Import dataset PROJ_UNITS is:\n");
-		    for (i_value = 0; i_value < proj_units->nitems; i_value++)
-			sprintf(error_msg + strlen(error_msg), "%s: %s\n",
-				proj_units->key[i_value],
-				proj_units->value[i_value]);
-		}
-	    }
-	    sprintf(error_msg + strlen(error_msg),
-		    _("\nIn case of no significant differences in the projection definitions,"
-		      " use the -o flag to ignore them and use"
-		      " current location definition.\n"),
-		    G_program_name());
-	    strcat(error_msg,
-		   _("Consider generating a new location with 'location' parameter"
-		    " from input data set.\n"));
-	    G_fatal_error("%s", error_msg);
-	}
-	else {
-	    G_verbose_message(_("Projection of input dataset and current "
-				"location appear to match"));
-	}
+    projstr = LASSRS_GetWKT_CompoundOK(LAS_srs);
+    /* we are printing the non-warning messages only for first file */
+    projection_check_wkt(cellhd, loc_wind, projstr, over_flag->answer,
+                         TRUE);
     }
 
-    db_init_string(&sql);
-    db_init_string(&strval);
-
     if (!outloc_opt->answer) {	/* Check if the map exists */
 	if (G_find_vector2(out_opt->answer, G_mapset())) {
 	    if (overwrite)
@@ -502,7 +552,12 @@ int main(int argc, char *argv[])
 	G_fatal_error(_("Unable to create vector map <%s>"), out_opt->answer);
 
     Vect_hist_command(&Map);
-    
+
+    /* libLAS uses uint32_t according to the source code
+     * or unsigned int according to the online doc,
+     * so just storing in long doesn't help.
+     * Thus, we use this just for the messages and percents.
+     */
     n_features = LASHeader_GetPointRecordsCount(LAS_header);
     las_point_format = LASHeader_GetDataFormatId(LAS_header);
 
@@ -514,139 +569,57 @@ int main(int argc, char *argv[])
 
     /* Add DB link */
     if (!notab_flag->answer) {
-	char *cat_col_name = GV_KEY_COLUMN;
-
-	Fi = Vect_default_field_info(&Map, 1, NULL, GV_1TABLE);
-
-	Vect_map_add_dblink(&Map, 1, out_opt->answer, Fi->table,
-			    cat_col_name, Fi->database, Fi->driver);
-
-	/* check available LAS info, depends on POINT DATA RECORD FORMAT [0-5] */
-	/* X (double),
-	 * Y (double), 
-	 * Z (double), 
-	 * intensity (double), 
-	 * return number (int), 
-	 * number of returns (int),
-	 * scan direction (int),
-	 * flight line edge (int),
-	 * classification type (char),
-	 * class (char),
-	 * time (double) (FORMAT 1, 3, 4, 5),
-	 * scan angle rank (int),
-	 * source ID (int),
-	 * user data (char), ???
-	 * red (int)  (FORMAT 2, 3, 5),
-	 * green (int) (FORMAT 2, 3, 5),
-	 * blue (int) (FORMAT 2, 3, 5)*/
-	 
-	/* Create table */
-	sprintf(buf, "create table %s (%s integer", Fi->table,
-		cat_col_name);
-	db_set_string(&sql, buf);
-	
-	/* x, y, z */
-	sprintf(buf, ", x_coord double precision");
-	db_append_string(&sql, buf);
-	sprintf(buf, ", y_coord double precision");
-	db_append_string(&sql, buf);
-	sprintf(buf, ", z_coord double precision");
-	db_append_string(&sql, buf);
-	/* intensity */
-	sprintf(buf, ", intensity integer");
-	db_append_string(&sql, buf);
-	/* return number */
-	sprintf(buf, ", return integer");
-	db_append_string(&sql, buf);
-	/* number of returns */
-	sprintf(buf, ", n_returns integer");
-	db_append_string(&sql, buf);
-	/* scan direction */
-	sprintf(buf, ", scan_dir integer");
-	db_append_string(&sql, buf);
-	/* flight line edge */
-	sprintf(buf, ", edge integer");
-	db_append_string(&sql, buf);
-	/* classification type */
-	sprintf(buf, ", cl_type varchar(20)");
-	db_append_string(&sql, buf);
-	/* classification class */
-	sprintf(buf, ", class varchar(40)");
-	db_append_string(&sql, buf);
-	/* GPS time */
-	if (have_time) {
-	    sprintf(buf, ", gps_time double precision");
-	    db_append_string(&sql, buf);
-	}
-	/* scan angle */
-	sprintf(buf, ", angle integer");
-	db_append_string(&sql, buf);
-	/* source id */
-	sprintf(buf, ", src_id integer");
-	db_append_string(&sql, buf);
-	/* user data */
-	sprintf(buf, ", usr_data integer");
-	db_append_string(&sql, buf);
-	/* colors */
-	if (have_color) {
-	    sprintf(buf, ", red integer, green integer, blue integer");
-	    db_append_string(&sql, buf);
-	    sprintf(buf, ", GRASSRGB varchar(11)");
-	    db_append_string(&sql, buf);
-	}
-
-	db_append_string(&sql, ")");
-	G_debug(3, "%s", db_get_string(&sql));
-
-	driver =
-	    db_start_driver_open_database(Fi->driver,
-					  Vect_subst_var(Fi->database,
-							 &Map));
-	if (driver == NULL) {
-	    G_fatal_error(_("Unable open database <%s> by driver <%s>"),
-			  Vect_subst_var(Fi->database, &Map), Fi->driver);
-	}
-        db_set_error_handler_driver(driver);
-
-	if (db_execute_immediate(driver, &sql) != DB_OK) {
-	    G_fatal_error(_("Unable to create table: '%s'"),
-			  db_get_string(&sql));
-	}
-
-	if (db_create_index2(driver, Fi->table, cat_col_name) != DB_OK)
-	    G_warning(_("Unable to create index for table <%s>, key <%s>"),
-		      Fi->table, cat_col_name);
-
-	if (db_grant_on_table
-	    (driver, Fi->table, DB_PRIV_SELECT,
-	     DB_GROUP | DB_PUBLIC) != DB_OK)
-	    G_fatal_error(_("Unable to grant privileges on table <%s>"),
-			  Fi->table);
+        create_table_for_lidar(&Map, out_opt->answer, id_layer, &driver,
+                               &Fi, have_time, have_color);
+    }
 
-	db_begin_transaction(driver);
+    struct VectorMask vector_mask;
+    if (vector_mask_opt->answer) {
+        VectorMask_init(&vector_mask, vector_mask_opt->answer,
+                        vector_mask_field_opt->answer, (int)invert_mask_flag->answer);
     }
 
     /* Import feature */
+    points_imported = 0;
     cat = 1;
     not_valid = 0;
     feature_count = 0;
     n_outside = 0;
     n_filtered = 0;
     n_class_filtered = 0;
+    n_outside_mask = 0;
+    zrange_filtered = 0;
 
     Points = Vect_new_line_struct();
     Cats = Vect_new_cats_struct();
-    
-    G_important_message(_("Scanning %d points..."), n_features);
+
+    struct CountDecimationControl count_decimation_control;
+
+    count_decimation_init_from_str(&count_decimation_control,
+                                   skip_opt->answer, preserve_opt->answer,
+                                   offset_opt->answer, limit_opt->answer);
+    if (!count_decimation_is_valid(&count_decimation_control))
+        G_fatal_error(_("Settings for count-based decimation are not valid"));
+    /* we don't check if the decimation is noop */
+
+#ifdef HAVE_LONG_LONG_INT
+    G_important_message(_("Scanning %llu points..."), n_features);
+#else
+    G_important_message(_("Scanning %lu points..."), n_features);
+#endif
     while ((LAS_point = LASReader_GetNextPoint(LAS_reader)) != NULL) {
 	double x, y, z;
 
 	G_percent(feature_count++, n_features, 1);	/* show something happens */
-	
-	if (!LASPoint_IsValid(LAS_point)) {
-	    not_valid++;
-	    continue;
-	}
+
+        /* We always count them and report because r.in.lidar behavior
+         * changed in between 7.0 and 7.2 from undefined (but skipping
+         * invalid points) to filtering them out only when requested. */
+        if (!LASPoint_IsValid(LAS_point)) {
+            not_valid++;
+            if (only_valid)
+                continue;
+        }
 
 	Vect_reset_line(Points);
 	Vect_reset_cats(Cats);
@@ -661,132 +634,77 @@ int main(int argc, char *argv[])
 		continue;
 	    }
 	}
-	if (return_filter != LAS_ALL) {
-	    int return_no = LASPoint_GetReturnNumber(LAS_point);
-	    int n_returns = LASPoint_GetNumberOfReturns(LAS_point);
-	    skipme = 1;
-
-	    switch (return_filter) {
-	    case LAS_FIRST:
-		if (return_no == 1)
-		    skipme = 0;
-		break;
-	    case LAS_MID:
-		if (return_no > 1 && return_no < n_returns)
-		    skipme = 0;
-		break;
-	    case LAS_LAST:
-		if (n_returns > 1 && return_no == n_returns)
-		    skipme = 0;
-		break;
-	    }
-	    
-	    if (skipme) {
-		n_filtered++;
-		continue;
-	    }
-	}
-	if (class_opt->answer) {
-	    point_class = (int) LASPoint_GetClassification(LAS_point);
-	    i = 0;
-	    skipme = TRUE;
-	    while (class_opt->answers[i]) {
-		if (point_class == atoi(class_opt->answers[i])) {
-		    skipme = FALSE;
-		    break;
-		}
-		i++;
-	    }
-	    if (skipme) {
-		n_class_filtered++;
-		continue;
-	    }
-	}
+        if (use_zrange) {
+            if (z < zrange_min || z > zrange_max) {
+                zrange_filtered++;
+                continue;
+            }
+        }
+        int return_n = LASPoint_GetReturnNumber(LAS_point);
+        int n_returns = LASPoint_GetNumberOfReturns(LAS_point);
+        if (return_filter_is_out(&return_filter_struct, return_n, n_returns)) {
+            n_filtered++;
+            continue;
+        }
+        point_class = (int) LASPoint_GetClassification(LAS_point);
+        if (class_filter_is_out(&class_filter, point_class)) {
+            n_class_filtered++;
+            continue;
+        }
+        if (vector_mask_opt->answer) {
+            if (!VectorMask_point_in(&vector_mask, x, y)) {
+                n_outside_mask++;
+                continue;
+            }
+        }
+        if (count_decimation_is_out(&count_decimation_control))
+            continue;
 
 	Vect_append_point(Points, x, y, z);
-	Vect_cat_set(Cats, 1, cat);
+        if (id_layer)
+            Vect_cat_set(Cats, id_layer, cat);
+        if (return_layer) {
+            int return_c = return_to_cat(return_n, n_returns);
+            Vect_cat_set(Cats, return_layer, return_c);
+        }
+        if (class_layer) {
+            /* 0 is not a valid category and
+             * classes 0 and 1 as practically the same */
+            if (point_class == 0)
+                Vect_cat_set(Cats, class_layer, 1);
+            else
+                Vect_cat_set(Cats, class_layer, point_class);
+        }
+        if (have_color && rgb_layer) {
+            /* TODO: if attr table, acquired again, performance difference? */
+            LASColorH LAS_color = LASPoint_GetColor(LAS_point);
+            if (rgb_layer) {
+                int red = LASColor_GetRed(LAS_color);
+                int green = LASColor_GetGreen(LAS_color);
+                int blue = LASColor_GetBlue(LAS_color);
+                int rgb = red;
+                rgb = (rgb << 8) + green;
+                rgb = (rgb << 8) + blue;
+                rgb++;  /* cat 0 is not valid, add one */
+                Vect_cat_set(Cats, rgb_layer, rgb);
+            }
+        }
 	Vect_write_line(&Map, GV_POINT, Points, Cats);
 
 	/* Attributes */
 	if (!notab_flag->answer) {
-	    char class_flag;
-	    int las_class_type, las_class;
-
-	     /* use LASPoint_Validate (LASPointH hPoint) to check for
-	      * return number, number of returns, scan direction, flight line edge,
-	      * classification, scan angle rank */
-	    sprintf(buf, "insert into %s values ( %d", Fi->table, cat);
-	    db_set_string(&sql, buf);
-
-	    /* x, y, z */
-	    sprintf(buf, ", %f", x);
-	    db_append_string(&sql, buf);
-	    sprintf(buf, ", %f", y);
-	    db_append_string(&sql, buf);
-	    sprintf(buf, ", %f", z);
-	    db_append_string(&sql, buf);
-	    /* intensity */
-	    sprintf(buf, ", %d", LASPoint_GetIntensity(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* return number */
-	    sprintf(buf, ", %d", LASPoint_GetReturnNumber(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* number of returns */
-	    sprintf(buf, ",  %d", LASPoint_GetNumberOfReturns(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* scan direction */
-	    sprintf(buf, ", %d",  LASPoint_GetScanDirection(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* flight line edge */
-	    sprintf(buf, ",  %d", LASPoint_GetFlightLineEdge(LAS_point));
-	    db_append_string(&sql, buf);
-	    class_flag = LASPoint_GetClassification(LAS_point);
-	    /* classification type int or char ? */
-	    las_class_type = class_flag / 32;
-	    sprintf(buf, ", \'%s\'", class_type[las_class_type].name);
-	    db_append_string(&sql, buf);
-	    /* classification class int or char ? */
-	    las_class = class_flag % 32;
-	    if (las_class > 13)
-		las_class = 13;
-	    sprintf(buf, ", \'%s\'", class_val[las_class].name);
-	    db_append_string(&sql, buf);
-	    /* GPS time */
-	    if (have_time) {
-		sprintf(buf, ", %f", LASPoint_GetTime(LAS_point));
-		db_append_string(&sql, buf);
-	    }
-	    /* scan angle */
-	    sprintf(buf, ", %d", LASPoint_GetScanAngleRank(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* source id */
-	    sprintf(buf, ", %d", LASPoint_GetPointSourceId(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* user data */
-	    sprintf(buf, ", %d", LASPoint_GetUserData(LAS_point));
-	    db_append_string(&sql, buf);
-	    /* colors */
-	    if (have_color) {
-		LASColorH LAS_color = LASPoint_GetColor(LAS_point);
-		int red = LASColor_GetRed(LAS_color);
-		int green = LASColor_GetGreen(LAS_color);
-		int blue = LASColor_GetBlue(LAS_color);
-
-		sprintf(buf, ", %d, %d, %d", red, green, blue);
-		db_append_string(&sql, buf);
-		sprintf(buf, ", \"%03d:%03d:%03d\"", red, green, blue);
-		db_append_string(&sql, buf);
-	    }
-	    db_append_string(&sql, " )");
-	    G_debug(3, "%s", db_get_string(&sql));
-
-	    if (db_execute_immediate(driver, &sql) != DB_OK) {
-		G_fatal_error(_("Cannot insert new row: %s"),
-			      db_get_string(&sql));
-	    }
+        las_point_to_attributes(Fi, driver, cat, LAS_point, x, y, z,
+                                have_time, have_color);
 	}
 
+        if (count_decimation_is_end(&count_decimation_control))
+            break;
+        if (id_layer && cat == GV_CAT_MAX) {
+            cat_max_reached = TRUE;
+            break;
+        }
 	cat++;
+        points_imported++;
     }
     G_percent(n_features, n_features, 1);	/* finish it */
 
@@ -795,6 +713,10 @@ int main(int argc, char *argv[])
 	db_close_database_shutdown_driver(driver);
     }
     
+    if (vector_mask_opt->answer) {
+        VectorMask_destroy(&vector_mask);
+    }
+    
     LASSRS_Destroy(LAS_srs);
     LASHeader_Destroy(LAS_header);
     LASReader_Destroy(LAS_reader);
@@ -803,17 +725,95 @@ int main(int argc, char *argv[])
     if (!notopo_flag->answer)
 	Vect_build(&Map);
     Vect_close(&Map);
-    
-    G_message(_("%d points imported"),
-              n_features - not_valid - n_outside - n_filtered - n_class_filtered);
-    if (not_valid)
-	G_message(_("%d input points were not valid"), not_valid);
+
+#ifdef HAVE_LONG_LONG_INT
+    unsigned long long not_valid_filtered = 0;
+#else
+    unsigned long not_valid_filtered = 0;
+#endif
+    if (only_valid)
+        not_valid_filtered = not_valid;
+
+    /* can be easily determined only when iterated over all points */
+    if (!count_decimation_control.limit_n && !cat_max_reached
+            && points_imported != n_features
+            - not_valid_filtered - n_outside - n_filtered - n_class_filtered
+            - n_outside_mask - count_decimation_control.offset_n_counter
+            - count_decimation_control.n_count_filtered - zrange_filtered)
+        G_warning(_("The underlying libLAS library is at its limits."
+                    " Previously reported counts might have been distorted."
+                    " However, the import itself should be unaffected."));
+
+#ifdef HAVE_LONG_LONG_INT
+    if (count_decimation_control.limit_n) {
+        G_message(_("%llu points imported (limit was %llu)"),
+                  count_decimation_control.limit_n_counter,
+                  count_decimation_control.limit_n);
+    }
+    else {
+        G_message(_("%llu points imported"), points_imported);
+    }
+    if (not_valid && only_valid)
+        G_message(_("%llu input points were not valid and filtered out"), not_valid);
+    if (n_outside)
+	G_message(_("%llu input points were outside of the selected area"), n_outside);
+    if (n_outside_mask)
+        G_message(_("%llu input points were outside of the area specified by mask"), n_outside_mask);
+    if (n_filtered)
+	G_message(_("%llu input points were filtered out by return number"), n_filtered);
+    if (n_class_filtered)
+        G_message(_("%llu input points were filtered out by class number"), n_class_filtered);
+    if (zrange_filtered)
+        G_message(_("%llu input points were filtered outsite the range for z coordinate"), zrange_filtered);
+    if (count_decimation_control.offset_n_counter)
+        G_message(_("%llu input points were skipped at the begging using offset"),
+                  count_decimation_control.offset_n_counter);
+    if (count_decimation_control.n_count_filtered)
+        G_message(_("%llu input points were skipped by count-based decimation"),
+                  count_decimation_control.n_count_filtered);
+#else
+    if (count_decimation_control.limit_n)
+        G_message(_("%lu points imported (limit was %d)"),
+                  count_decimation_control.limit_n_counter,
+                  count_decimation_control.limit_n);
+    else
+        G_message(_("%lu points imported"), points_imported);
+    if (not_valid && only_valid)
+        G_message(_("%lu input points were not valid and filtered out"), not_valid);
     if (n_outside)
-	G_message(_("%d input points were outside of the selected area"), n_outside);
+	G_message(_("%lu input points were outside of the selected area"), n_outside);
+    if (n_outside_mask)
+        G_message(_("%lu input points were outside of the area specified by mask"), n_outside_mask);
     if (n_filtered)
-	G_message(_("%d input points were filtered out by return number"), n_filtered);
+	G_message(_("%lu input points were filtered out by return number"), n_filtered);
     if (n_class_filtered)
-        G_message(_("%d input points were filtered out by class number"), n_class_filtered);
+        G_message(_("%lu input points were filtered out by class number"), n_class_filtered);
+    if (zrange_filtered)
+        G_message(_("%lu input points were filtered outsite the range for z coordinate"), zrange_filtered);
+    if (count_decimation_control.offset_n_counter)
+        G_message(_("%lu input points were skipped at the begging using offset"),
+                  count_decimation_control.offset_n_counter);
+    if (count_decimation_control.n_count_filtered)
+        G_message(_("%lu input points were skipped by count-based decimation"),
+                  count_decimation_control.n_count_filtered);
+    G_message(_("Accuracy of the printed point counts might be limited by your computer architecture."));
+#endif
+    if (count_decimation_control.limit_n)
+        G_message(_("The rest of points was ignored"));
+
+#ifdef HAVE_LONG_LONG_INT
+    if (not_valid && !only_valid)
+        G_message(_("%llu input points were not valid, use -%c flag to filter"
+                    " them out"), not_valid, only_valid_flag->key);
+#else
+    if (not_valid && !only_valid)
+        G_message(_("%lu input points were not valid, use -%c flag to filter"
+                    " them out"), not_valid, only_valid_flag->key);
+#endif
+
+    if (cat_max_reached)
+        G_warning(_("Maximum number of categories reached (%d). Import ended prematurely."
+                    " Try to import without using category as an ID."), GV_CAT_MAX);
 
     /* -------------------------------------------------------------------- */
     /*      Extend current window based on dataset.                         */
@@ -839,71 +839,3 @@ int main(int argc, char *argv[])
 
     exit(EXIT_SUCCESS);
 }
-
-void print_lasinfo(LASHeaderH LAS_header, LASSRSH LAS_srs)
-{
-    char *las_srs_proj4 = LASSRS_GetProj4(LAS_srs);
-    int las_point_format = LASHeader_GetDataFormatId(LAS_header);
-
-    fprintf(stdout, "\nUsing LAS Library Version '%s'\n\n",
-                    LAS_GetFullVersion());
-    fprintf(stdout, "LAS File Version:                  %d.%d\n",
-                    LASHeader_GetVersionMajor(LAS_header),
-                    LASHeader_GetVersionMinor(LAS_header));
-    fprintf(stdout, "System ID:                         '%s'\n",
-                    LASHeader_GetSystemId(LAS_header));
-    fprintf(stdout, "Generating Software:               '%s'\n",
-                    LASHeader_GetSoftwareId(LAS_header));
-    fprintf(stdout, "File Creation Day/Year:            %d/%d\n",
-                    LASHeader_GetCreationDOY(LAS_header),
-		    LASHeader_GetCreationYear(LAS_header));
-    fprintf(stdout, "Point Data Format:                 %d\n",
-                    las_point_format);
-    fprintf(stdout, "Number of Point Records:           %d\n",
-                    LASHeader_GetPointRecordsCount(LAS_header));
-    fprintf(stdout, "Number of Points by Return:        %d %d %d %d %d\n",
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 0),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 1),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 2),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 3),
-                    LASHeader_GetPointRecordsByReturnCount(LAS_header, 4));
-    fprintf(stdout, "Scale Factor X Y Z:                %g %g %g\n",
-                    LASHeader_GetScaleX(LAS_header),
-                    LASHeader_GetScaleY(LAS_header),
-                    LASHeader_GetScaleZ(LAS_header));
-    fprintf(stdout, "Offset X Y Z:                      %g %g %g\n",
-                    LASHeader_GetOffsetX(LAS_header),
-                    LASHeader_GetOffsetY(LAS_header),
-                    LASHeader_GetOffsetZ(LAS_header));
-    fprintf(stdout, "Min X Y Z:                         %g %g %g\n",
-                    LASHeader_GetMinX(LAS_header),
-                    LASHeader_GetMinY(LAS_header),
-                    LASHeader_GetMinZ(LAS_header));
-    fprintf(stdout, "Max X Y Z:                         %g %g %g\n",
-                    LASHeader_GetMaxX(LAS_header),
-                    LASHeader_GetMaxY(LAS_header),
-                    LASHeader_GetMaxZ(LAS_header));
-    if (las_srs_proj4 && strlen(las_srs_proj4) > 0) {
-	fprintf(stdout, "Spatial Reference:\n");
-	fprintf(stdout, "%s\n", las_srs_proj4);
-    }
-    else {
-	fprintf(stdout, "Spatial Reference:                 None\n");
-    }
-    
-    fprintf(stdout, "\nData Fields:\n");
-    fprintf(stdout, "  'X'\n  'Y'\n  'Z'\n  'Intensity'\n  'Return Number'\n");
-    fprintf(stdout, "  'Number of Returns'\n  'Scan Direction'\n");
-    fprintf(stdout, "  'Flighline Edge'\n  'Classification'\n  'Scan Angle Rank'\n");
-    fprintf(stdout, "  'User Data'\n  'Point Source ID'\n");
-    if (las_point_format == 1 || las_point_format == 3 || las_point_format == 4 || las_point_format == 5) {
-	fprintf(stdout, "  'GPS Time'\n");
-    }
-    if (las_point_format == 2 || las_point_format == 3 || las_point_format == 5) {
-	fprintf(stdout, "  'Red'\n  'Green'\n  'Blue'\n");
-    }
-    fprintf(stdout, "\n");
-    fflush(stdout);
-
-    return;
-}
diff --git a/vector/v.in.lidar/projection.c b/vector/v.in.lidar/projection.c
new file mode 100644
index 0000000..c62f0b7
--- /dev/null
+++ b/vector/v.in.lidar/projection.c
@@ -0,0 +1,140 @@
+/*
+ * projection checking
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (v.in.lidar)
+ *  Vaclav Petras (move code to standalone functions)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/gprojects.h>
+
+
+void projection_mismatch_report(struct Cell_head cellhd,
+                                struct Cell_head loc_wind,
+                                struct Key_Value *loc_proj_info,
+                                struct Key_Value *loc_proj_units,
+                                struct Key_Value *proj_info,
+                                struct Key_Value *proj_units, int err)
+{
+    int i_value;
+    char error_msg[8192];
+
+    strcpy(error_msg,
+           _("Projection of dataset does not"
+             " appear to match current location.\n\n"));
+
+    /* TODO: output this info sorted by key: */
+    if (loc_wind.proj != cellhd.proj || err != -2) {
+        if (loc_proj_info != NULL) {
+            strcat(error_msg, _("GRASS LOCATION PROJ_INFO is:\n"));
+            for (i_value = 0; i_value < loc_proj_info->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        loc_proj_info->key[i_value],
+                        loc_proj_info->value[i_value]);
+            strcat(error_msg, "\n");
+        }
+
+        if (proj_info != NULL) {
+            strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+            for (i_value = 0; i_value < proj_info->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        proj_info->key[i_value], proj_info->value[i_value]);
+        }
+        else {
+            strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+            if (cellhd.proj == PROJECTION_XY)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (unreferenced/unknown)\n",
+                        cellhd.proj);
+            else if (cellhd.proj == PROJECTION_LL)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (lat/long)\n", cellhd.proj);
+            else if (cellhd.proj == PROJECTION_UTM)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (UTM), zone = %d\n",
+                        cellhd.proj, cellhd.zone);
+            else
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (unknown), zone = %d\n",
+                        cellhd.proj, cellhd.zone);
+        }
+    }
+    else {
+        if (loc_proj_units != NULL) {
+            strcat(error_msg, "GRASS LOCATION PROJ_UNITS is:\n");
+            for (i_value = 0; i_value < loc_proj_units->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        loc_proj_units->key[i_value],
+                        loc_proj_units->value[i_value]);
+            strcat(error_msg, "\n");
+        }
+
+        if (proj_units != NULL) {
+            strcat(error_msg, "Import dataset PROJ_UNITS is:\n");
+            for (i_value = 0; i_value < proj_units->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        proj_units->key[i_value], proj_units->value[i_value]);
+        }
+    }
+    sprintf(error_msg + strlen(error_msg),
+            _("\nIn case of no significant differences in the projection definitions,"
+             " use the -o flag to ignore them and use"
+             " current location definition.\n"));
+    strcat(error_msg,
+           _("Consider generating a new location with 'location' parameter"
+             " from input data set.\n"));
+    G_fatal_error("%s", error_msg);
+}
+
+void projection_check_wkt(struct Cell_head cellhd,
+                          struct Cell_head loc_wind,
+                          const char *projstr, int override, int verbose)
+{
+    struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
+    struct Key_Value *proj_info, *proj_units;
+    int err = 0;
+
+    proj_info = NULL;
+    proj_units = NULL;
+
+    /* Projection only required for checking so convert non-interactively */
+    if (GPJ_wkt_to_grass(&cellhd, &proj_info, &proj_units, projstr, 0) < 0)
+        G_warning(_("Unable to convert input map projection information to "
+                    "GRASS format for checking"));
+
+    /* Does the projection of the current location match the dataset? */
+
+    /* fetch LOCATION PROJ info */
+    if (loc_wind.proj != PROJECTION_XY) {
+        loc_proj_info = G_get_projinfo();
+        loc_proj_units = G_get_projunits();
+    }
+
+    if (override) {
+        cellhd.proj = loc_wind.proj;
+        cellhd.zone = loc_wind.zone;
+        if (verbose)
+            G_message(_("Over-riding projection check"));
+    }
+    else if (loc_wind.proj != cellhd.proj
+             || (err =
+                 G_compare_projections(loc_proj_info, loc_proj_units,
+                                       proj_info, proj_units)) != TRUE) {
+        projection_mismatch_report(cellhd, loc_wind, loc_proj_info,
+                                   loc_proj_units,
+                                   proj_info, proj_units, err);
+    }
+    else if (verbose) {
+        G_message(_("Projection of input dataset and current location "
+                    "appear to match"));
+    }
+}
diff --git a/vector/v.in.lidar/projection.h b/vector/v.in.lidar/projection.h
new file mode 100644
index 0000000..a4f16d4
--- /dev/null
+++ b/vector/v.in.lidar/projection.h
@@ -0,0 +1,29 @@
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      projection related functions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef PROJECTION_CHECKS_H
+#define PROJECTION_CHECKS_H
+
+void projection_mismatch_report(struct Cell_head cellhd,
+                                struct Cell_head loc_wind,
+                                struct Key_Value *loc_proj_info,
+                                struct Key_Value *loc_proj_units,
+                                struct Key_Value *proj_info,
+                                struct Key_Value *proj_units, int err);
+
+void projection_check_wkt(struct Cell_head cellhd,
+                          struct Cell_head loc_wind,
+                          const char *projstr, int override, int verbose);
+
+#endif /* PROJECTION_CHECKS_H */
diff --git a/vector/v.in.lidar/testsuite/basic_test.py b/vector/v.in.lidar/testsuite/basic_test.py
new file mode 100644
index 0000000..e4a3233
--- /dev/null
+++ b/vector/v.in.lidar/testsuite/basic_test.py
@@ -0,0 +1,68 @@
+"""
+Name:      decimation_test
+Purpose:   v.in.lidar decimation test
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class BasicTest(TestCase):
+    """Test case for watershed module
+
+    This tests expects v.random and v.out.lidar to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    vector_points = 'vinlidar_basic_original'
+    imported_points = 'vinlidar_basic_imported'
+    las_file = 'vinlidar_basic_points.las'
+    npoints = 300
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.random', flags='zb', output=cls.vector_points,
+            npoints=cls.npoints, zmin=200, zmax=500, seed=100)
+        cls.runModule('v.out.lidar', input=cls.vector_points,
+            output=cls.las_file)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=cls.vector_points)
+        if os.path.isfile(cls.las_file):
+            os.remove(cls.las_file)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the import
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_output_identical(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorEqualsVector(
+            actual=self.imported_points,
+            reference=self.vector_points,
+            digits=2, precision=.01)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.lidar/testsuite/decimation_test.py b/vector/v.in.lidar/testsuite/decimation_test.py
new file mode 100644
index 0000000..f2151de
--- /dev/null
+++ b/vector/v.in.lidar/testsuite/decimation_test.py
@@ -0,0 +1,161 @@
+"""
+Name:      decimation_test
+Purpose:   v.in.lidar decimation test
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestCountBasedDecimation(TestCase):
+    """Test case for watershed module
+
+    This tests expects v.random and v.out.lidar to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    vector_points = 'vinlidar_decimation_original'
+    imported_points = 'vinlidar_decimation_imported'
+    las_file = 'vinlidar_decimation_points.las'
+    npoints = 300  # the values works well for 300 without rounding
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.random', flags='zb', output=cls.vector_points,
+            npoints=cls.npoints, zmin=200, zmax=500, seed=100)
+        cls.runModule('v.out.lidar', input=cls.vector_points,
+            output=cls.las_file)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=cls.vector_points)
+        if os.path.isfile(cls.las_file):
+            os.remove(cls.las_file)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the import
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_identical(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=self.npoints))
+
+    def skip_number(self, number, expect):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt', skip=number)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=expect))
+
+    def preserve_number(self, number, expect):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt', preserve=number)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=expect))
+
+    def offset_number(self, number, expect):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt', offset=number)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=expect))
+
+    def limit_number(self, number, expect):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt', limit=number)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=expect))
+
+    def test_decimated_skip_2(self):
+        """Test to see if the outputs are created"""
+        self.skip_number(number=2, expect=self.npoints / 2)
+
+    def test_decimated_skip_4(self):
+        """Test to see if the outputs are created"""
+        self.skip_number(number=4, expect=0.75 * self.npoints)
+
+    def test_decimated_skip_10(self):
+        """Test to see if the outputs are created"""
+        self.skip_number(number=10, expect=0.9 * self.npoints)
+
+    def test_decimated_preserve_2(self):
+        """Test to see if the outputs are created"""
+        self.preserve_number(number=2, expect=self.npoints / 2)
+
+    def test_decimated_preserve_10(self):
+        """Test to see if the outputs are created"""
+        self.preserve_number(number=10, expect=self.npoints / 10)
+
+    def test_decimated_offset_105(self):
+        """Test to see if the outputs are created"""
+        self.offset_number(number=105, expect=self.npoints - 105)
+
+    def test_decimated_limit_105(self):
+        """Test to see if the outputs are created"""
+        self.limit_number(number=105, expect=105)
+
+    def test_offset_preserve(self):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            offset=105, preserve=10)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=(self.npoints - 105) / 10))
+
+    def test_limit_skip(self):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            limit=105, skip=10)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=105))
+
+    def test_offset_limit_skip(self):
+        """Test to see if the outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            offset=50, skip=5, limit=self.npoints - 1)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=0.8 * (self.npoints - 50)))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.lidar/testsuite/filter_test.py b/vector/v.in.lidar/testsuite/filter_test.py
new file mode 100644
index 0000000..926471d
--- /dev/null
+++ b/vector/v.in.lidar/testsuite/filter_test.py
@@ -0,0 +1,208 @@
+"""
+Name:      decimation_test
+Purpose:   v.in.lidar decimation test
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+POINTS = """\
+17.46938776,18.67346939,143,1,1,2
+20.93877551,17.44897959,125,1,1,2
+18.89795918,14.18367347,130,1,1,3
+15.91836735,10.67346939,126,1,1,3
+21.26530612,11.04081633,128,1,2,3
+22.24489796,13.89795918,123,2,2,3
+23.79591837,17.12244898,151,1,2,3
+17.2244898,16.34693878,124,2,2,4
+17.14285714,14.10204082,134,1,3,4
+19.87755102,11.81632653,146,2,3,4
+18.48979592,11.48979592,140.6,2,3,4
+21.26530612,15.73469388,147,3,3,5
+21.18367347,19.32653061,138,1,3,5
+23.91836735,18.83673469,144,2,3,5
+23.51020408,13.65306122,143,3,3,5
+23.55102041,11.32653061,123,1,4,5
+18.41009273,14.51618034,140.4,2,4,5
+22.13996161,17.2278263,147,3,4,5
+21.41013052,11.05432488,132,4,4,5
+"""
+
+
+class FilterTest(TestCase):
+    """Test case for filter and selection options
+
+    This tests expects v.random and v.out.lidar to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    vector_points = 'vinlidar_filters_original'
+    imported_points = 'vinlidar_filters_imported'
+    las_file = 'vinlidar_filters_points.las'
+    npoints = 300
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.in.ascii', input='-', stdin_=POINTS,
+                      flags='z', z=3, cat=0, separator='comma',
+                      output=cls.vector_points,
+                      columns="x double precision, y double precision,"
+                              " z double precision, return_n integer,"
+                              " n_returns integer, class_n integer")
+        cls.runModule('v.out.lidar',
+                      input=cls.vector_points, layer=1,
+                      output=cls.las_file,
+                      return_column='return_n',
+                      n_returns_column='n_returns',
+                      class_column='class_n')
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=cls.vector_points)
+        if os.path.isfile(cls.las_file):
+            os.remove(cls.las_file)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the import
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_no_filter(self):
+        """Test to see if the standard outputs are created
+
+        This shows if the inpute data are as expected.
+        """
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=19))
+
+    def return_filter(self, name, npoints):
+        """Mid return filter test"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            return_filter=name)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_first_return_filter(self):
+        """First return filter test"""
+        self.return_filter('first', 9)
+
+    def test_mid_return_filter(self):
+        """Mid return filter test"""
+        self.return_filter('mid', 5)
+
+    def test_last_return_filter(self):
+        """Last return filter test"""
+        self.return_filter('last', 5)
+
+    def class_filter(self, class_n, npoints):
+        """Actual code for testing class filter"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            class_filter=class_n)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_class_2_filter(self):
+        """Test to filter classes"""
+        self.class_filter(2, 2)
+
+    def test_class_3_filter(self):
+        """Test to filter classes"""
+        self.class_filter(3, 5)
+
+    def test_class_4_filter(self):
+        """Test to filter classes"""
+        self.class_filter(4, 4)
+
+    def test_class_5_filter(self):
+        """Test to filter classes"""
+        self.class_filter(5, 8)
+
+    def return_and_class_filter(self, return_name, class_n, npoints):
+        """Return and class filter combined test code"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            return_filter=return_name, class_filter=class_n)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_first_return_and_class_filter(self):
+        """Combined test for return and class"""
+        self.return_and_class_filter('first', 2, 2)
+
+    def test_last_return_and_class_filter(self):
+        """Combined test for return and class"""
+        self.return_and_class_filter('last', 5, 3)
+
+    def zrange_filter(self, zrange, npoints):
+        """Actual code for zrange option test"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            zrange=zrange)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_zrange_filter(self):
+        """Test zrange option"""
+        self.zrange_filter((130.1, 139.9), 3)
+
+    def test_non_int_zrange_filter(self):
+        """Test zrange option with float number
+
+        One test point has z right under and one other right above the min.
+        """
+        self.zrange_filter((140.5, 900), 8)
+
+    def test_zrange_and_class_filter(self):
+        """zrange and class_filter option combined test"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            zrange=(141, 900), class_filter=5)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=4))
+
+    def test_zrange_and_return_filter(self):
+        """zrange and class_filter option combined test"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            zrange=(141, 900), return_filter='last')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=2))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.lidar/testsuite/mask_test.py b/vector/v.in.lidar/testsuite/mask_test.py
new file mode 100644
index 0000000..635ca15
--- /dev/null
+++ b/vector/v.in.lidar/testsuite/mask_test.py
@@ -0,0 +1,157 @@
+"""
+Name:      decimation_test
+Purpose:   v.in.lidar decimation test
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+POINTS = """\
+17.46938776,18.67346939,1
+20.93877551,17.44897959,2
+18.89795918,14.18367347,3
+15.91836735,10.67346939,4
+21.26530612,11.04081633,5
+22.24489796,13.89795918,6
+23.79591837,17.12244898,7
+17.2244898,16.34693878,8
+17.14285714,14.10204082,9
+19.87755102,11.81632653,10
+18.48979592,11.48979592,11
+21.26530612,15.73469388,12
+21.18367347,19.32653061,13
+23.91836735,18.83673469,14
+23.51020408,13.65306122,15
+23.55102041,11.32653061,16
+18.41009273,14.51618034,17
+22.13996161,17.2278263,18
+21.41013052,11.05432488,19
+"""
+
+# the point with cat 4 is outside the bbox of the areas vector map
+# which is what we need for the tests
+
+AREAS = """\
+ORGANIZATION:
+DIGIT DATE:
+DIGIT NAME:   vpetras
+MAP NAME:
+MAP DATE:     Tue Dec 22 17:22:54 2015
+MAP SCALE:    1
+OTHER INFO:
+ZONE:         0
+MAP THRESH:   0.000000
+VERTI:
+B  6
+ 16.89795918  17.28571429
+ 19.75510204  15.12244898
+ 21.34693878  12.87755102
+ 17.3877551   12.67346939
+ 16           15.24489796
+ 16.89795918  17.28571429
+C  1 1
+ 18.41009273  14.51618034
+ 1     17
+B  6
+ 20.20408163  19.57142857
+ 21.14285714  14.63265306
+ 23.75510204  15.08163265
+ 24.36734694  17.57142857
+ 22.20408163  19.73469388
+ 20.20408163  19.57142857
+C  1 1
+ 22.13996161  17.2278263
+ 1     18
+B  5
+ 20.89795918  11.57142857
+ 22.40816327  11.04081633
+ 21.02040816  10.51020408
+ 20.57142857  11.24489796
+ 20.89795918  11.57142857
+C  1 1
+ 21.41013052  11.05432488
+ 1     19
+"""
+
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class VectorMaskTest(TestCase):
+    """Test case for watershed module
+
+    This tests expects v.random and v.out.lidar to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    points = 'vinlidar_points'
+    areas = 'vinlidar_areas'
+    las_file = 'vinlidar_mask_points.las'
+    imported_points = 'vinlidar_imported_points'
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.in.ascii', input='-', output=cls.points,
+                      separator='comma', format='point', stdin_=POINTS)
+        cls.runModule('v.in.ascii', input='-', output=cls.areas,
+                      format='standard', stdin_=AREAS)
+        cls.runModule('v.out.lidar', input=cls.points,
+            output=cls.las_file)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=(cls.points, cls.areas))
+        if os.path.isfile(cls.las_file):
+            os.remove(cls.las_file)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the import
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_no_mask(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=19))
+
+    def test_mask(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt',
+            mask=self.areas)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=11))
+
+    def test_inverted_mask(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bti',
+            mask=self.areas)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=8))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.lidar/v.in.lidar.html b/vector/v.in.lidar/v.in.lidar.html
index 395207c..60f890a 100644
--- a/vector/v.in.lidar/v.in.lidar.html
+++ b/vector/v.in.lidar/v.in.lidar.html
@@ -27,6 +27,53 @@ class number 2 represents ground (for other classes see LAS format specification
 in references). The <b>class_filter</b> option allows selecting one or more 
 classes, as numbers (integers) separated by comma.
 
+<p>
+Note that proper filtering of the input points in not only critical for
+the analysis itself but it can also speed up the processing
+significantly.
+
+<h3>Decimation</h3>
+
+Table with selected percentages of points to keep with corresponding
+decimation parameters:
+
+<table class="compact">
+<tr><th>percentage</th><th>parameters</th></tr>
+<tr><td>0.1%</td><td>preserve=1000</td></tr>
+<tr><td>1%</td><td>preserve=100</td></tr>
+<tr><td>5%</td><td>preserve=20</td></tr>
+<tr><td>10%</td><td>preserve=10</td></tr>
+<tr><td>20%</td><td>preserve=5</td></tr>
+<tr><td>25%</td><td>preserve=4</td></tr>
+<tr><td>50%</td><td>skip=2</td></tr>
+<tr><td>75%</td><td>skip=4</td></tr>
+<tr><td>80%</td><td>skip=5</td></tr>
+<tr><td>90%</td><td>skip=10</td></tr>
+</table>
+
+Table with selected fractions of points to keep with corresponding
+decimation parameters:
+
+<table class="compact">
+<tr><th>ratio</th><th>parameters</th></tr>
+<tr><td>1/3</td><td>preserve=3</td></tr>
+<tr><td>1/4</td><td>preserve=4</td></tr>
+<tr><td>1/5</td><td>preserve=5</td></tr>
+<tr><td>1/6</td><td>preserve=6</td></tr>
+</table>
+
+Table with selected fractions of points to throw away with corresponding
+decimation parameters:
+
+<table class="compact">
+<tr><th>ratio</th><th>parameters</th></tr>
+<tr><td>1/3</td><td>skip=3</td></tr>
+<tr><td>1/4</td><td>skip=4</td></tr>
+<tr><td>1/5</td><td>skip=5</td></tr>
+<tr><td>1/6</td><td>skip=6</td></tr>
+</table>
+
+
 <h2>Location Creation</h2>
 
 <em>v.in.lidar</em> attempts to preserve projection information when importing
@@ -75,6 +122,15 @@ available at
   v.in.lidar -tb input="Serpent Mound Model LAS Data.las" output=Serpent_Mound_Model_pts
 </pre></div>
 
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.in.lidar.html">r.in.lidar</a>,
+<a href="r3.in.lidar.html">r3.in.lidar</a>,
+<a href="g.region.html">g.region</a>,
+<a href="v.vect.stats.html">v.vect.stats</a>,
+<a href="v.in.ogr.html">v.in.ogr</a>
+</em>
 
 <h2>REFERENCES</h2>
 
@@ -83,11 +139,14 @@ ASPRS LAS format</a><br>
 <a href="http://www.liblas.org/">LAS library</a> <br>
 <a href="http://test.liblas.org/doxygen/liblas_8h.htm">LAS library C API</a> documentation
 
-
 <h2>AUTHOR</h2>
 
 Markus Metz
 <br>
-based on v.in.ogr
+Vaclav Petras,
+<a href="http://geospatial.ncsu.edu/osgeorel/">NCSU GeoForAll Lab</a>
+(decimation, cats, areas, zrange)
+<br>
+based on <em>v.in.ogr</em> by various authors
 
-<p><i>Last changed: $Date: 2015-02-13 16:16:22 +0100 (Fri, 13 Feb 2015) $</i>
+<p><i>Last changed: $Date: 2016-08-27 12:53:22 +0200 (Sat, 27 Aug 2016) $</i>
diff --git a/vector/v.in.lidar/vector_mask.c b/vector/v.in.lidar/vector_mask.c
new file mode 100644
index 0000000..5c7bcea
--- /dev/null
+++ b/vector/v.in.lidar/vector_mask.c
@@ -0,0 +1,70 @@
+/*
+ * v.in.lidar vector mask
+ *
+ * Copyright 2011-2015 by Vaclav Petras, and The GRASS Development Team
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <grass/vector.h>
+#include <grass/glocale.h>
+
+#include "vector_mask.h"
+
+void VectorMask_init(struct VectorMask *vector_mask, const char *name, const char *layer, int invert_mask)
+{
+    vector_mask->map_info = G_malloc(sizeof(struct Map_info));
+    if (Vect_open_old2(vector_mask->map_info, name, "", layer) < 2)
+        G_fatal_error(_("Failed to open vector <%s>"), name);
+    vector_mask->map_bbox = G_malloc(sizeof(struct bound_box));
+    Vect_get_map_box(vector_mask->map_info, vector_mask->map_bbox);
+    vector_mask->nareas = Vect_get_num_areas(vector_mask->map_info);
+    vector_mask->area_bboxes = G_malloc(vector_mask->nareas * sizeof(struct bound_box));
+    int i;
+    for (i = 1; i <= vector_mask->nareas; i++) {
+        Vect_get_area_box(vector_mask->map_info, i, &vector_mask->area_bboxes[i - 1]);
+    }
+    if (invert_mask)
+        vector_mask->inverted = 1;
+    else
+        vector_mask->inverted = 0;
+}
+
+void VectorMask_destroy(struct VectorMask *vector_mask)
+{
+    G_free(vector_mask->map_bbox);
+    G_free(vector_mask->area_bboxes);
+    Vect_close(vector_mask->map_info);
+    G_free(vector_mask->map_info);
+}
+
+int VectorMask_point_in(struct VectorMask *vector_mask, double x, double y)
+{
+    /* inv in res
+     *   F  T continue
+     *   F  F return F
+     *   T  T continue
+     *   T  F return T
+     */
+    if (!Vect_point_in_box_2d(x, y, vector_mask->map_bbox))
+        return vector_mask->inverted;
+    int is_out = TRUE;
+    int i;
+    for (i = 1; i <= vector_mask->nareas; i++) {
+        if (Vect_point_in_area(x, y, vector_mask->map_info, i, &vector_mask->area_bboxes[i - 1])) {
+            is_out = FALSE;
+            break;
+        }
+    }
+    /* inv out res
+     *  F   T   F
+     *  F   F   T
+     *  T   T   T
+     *  T   F   F
+     */
+    if (vector_mask->inverted ^ is_out)
+        return FALSE;
+    return TRUE;
+}
diff --git a/vector/v.in.lidar/vector_mask.h b/vector/v.in.lidar/vector_mask.h
new file mode 100644
index 0000000..908727d
--- /dev/null
+++ b/vector/v.in.lidar/vector_mask.h
@@ -0,0 +1,34 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      vector mask
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef VECTOR_MASK_H
+#define VECTOR_MASK_H
+
+struct Map_info;
+struct bound_box;
+
+struct VectorMask {
+    struct Map_info *map_info;
+    struct bound_box *map_bbox;
+    struct bound_box *area_bboxes;
+    int nareas;
+    int inverted;
+};
+
+void VectorMask_init(struct VectorMask *vector_mask, const char *name, const char *layer, int invert_mask);
+void VectorMask_destroy(struct VectorMask *vector_mask);
+int VectorMask_point_in(struct VectorMask *vector_mask, double x, double y);
+
+#endif /* VECTOR_MASK_H */
diff --git a/vector/v.in.ogr/dsn.c b/vector/v.in.ogr/dsn.c
new file mode 100644
index 0000000..cf45c6a
--- /dev/null
+++ b/vector/v.in.ogr/dsn.c
@@ -0,0 +1,78 @@
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+
+char *get_datasource_name(const char *opt_dsn, int use_ogr)
+{
+    char *dsn;
+    
+    if (G_strncasecmp(opt_dsn, "PG:", 3) == 0) {
+        /* PostgreSQL/PostGIS */
+        size_t i;
+        char connect_str[DB_SQL_MAX], database[GNAME_MAX];
+        char *p, *pp;
+        const char *user, *passwd, *host, *port;
+
+        /* dbname is mandatory */
+        p = G_strcasestr(opt_dsn, "dbname");
+        if (!p) 
+            G_fatal_error(_("Invalid connection string (dbname missing)"));
+        
+        /* get dbname */
+        p += strlen("dbname=");
+        for (i = 0, pp = p; *pp != ' ' && *pp != '\0'; pp++, i++)
+            database[i] = *pp;
+        database[i] = '\0';
+        
+        /* build connection string */
+        sprintf(connect_str, "dbname=%s", database);
+        
+        /* add db.login settings (user, password, host, port) */
+        if (DB_OK == db_get_login2("pg", database, &user, &passwd, &host, &port)) {
+            if (user) {
+                if (!G_strcasestr(opt_dsn, "user=")) {
+                    strcat(connect_str, " user=");
+                    strcat(connect_str, user);
+                }
+                G_free((char *)user);
+            }
+            if (passwd) {
+                if (!G_strcasestr(opt_dsn, "password=")) {
+                    strcat(connect_str, " password=");
+                    strcat(connect_str, passwd);
+                }
+                G_free((char *)passwd);
+            }
+            if (host) {
+                if (!G_strcasestr(opt_dsn, "host=")) {
+                    strcat(connect_str, " host=");
+                    strcat(connect_str, host);
+                }
+                G_free((char *)host);
+            }
+            if (port) {
+                if (!G_strcasestr(opt_dsn, "port=")) {
+                    strcat(connect_str, " port=");
+                    strcat(connect_str, port);
+                }
+                G_free((char *)port);
+            }
+        }
+        
+        if (!use_ogr)
+            /* be friendly, ignored 'PG:' prefix for PostGIS links */
+            dsn = G_store(connect_str);
+        else
+            G_asprintf(&dsn, "PG:%s", connect_str);
+    }
+    else {
+        /* other datasources */
+        dsn = G_store(opt_dsn);
+    }
+
+    G_debug(1, "dsn: %s", dsn);
+
+    return dsn;
+}
diff --git a/vector/v.in.ogr/main.c b/vector/v.in.ogr/main.c
index 25ac460..70d6538 100644
--- a/vector/v.in.ogr/main.c
+++ b/vector/v.in.ogr/main.c
@@ -46,6 +46,8 @@ int centroid(OGRGeometryH hGeom, CENTR * Centr, struct spatial_index * Sindex,
 	     int field, int cat, double min_area, int type);
 int poly_count(OGRGeometryH hGeom, int line2boundary);
 
+char *get_datasource_name(const char *, int);
+
 int main(int argc, char *argv[])
 {
     struct GModule *module;
@@ -139,10 +141,11 @@ int main(int argc, char *argv[])
     param.dsn->key = "input";
     param.dsn->type = TYPE_STRING;
     param.dsn->required =YES;
-    param.dsn->label = _("OGR datasource name");
+    param.dsn->label = _("Name of OGR datasource to be imported");
     param.dsn->description = _("Examples:\n"
 				   "\t\tESRI Shapefile: directory containing shapefiles\n"
 				   "\t\tMapInfo File: directory containing mapinfo files");
+    param.dsn->gisprompt = "old,datasource,datasource";
     
     param.layer = G_define_option();
     param.layer->key = "layer";
@@ -154,7 +157,8 @@ int main(int argc, char *argv[])
     param.layer->description =
 	_("Examples:\n" "\t\tESRI Shapefile: shapefile name\n"
 	  "\t\tMapInfo File: mapinfo file name");
-    param.layer->guisection = _("Selection");
+    param.layer->guisection = _("Input");
+    param.layer->gisprompt = "old,datasource_layer,datasource_layer";
 
     param.out = G_define_standard_option(G_OPT_V_OUTPUT);
     param.out->required = NO;
@@ -213,6 +217,7 @@ int main(int argc, char *argv[])
     param.outloc->required = NO;
     param.outloc->description = _("Name for new location to create");
     param.outloc->key_desc = "name";
+    param.outloc->guisection = _("Output");
     
     param.cnames = G_define_standard_option(G_OPT_DB_COLUMNS);
     param.cnames->description =
@@ -275,8 +280,10 @@ int main(int argc, char *argv[])
 
     flag.over = G_define_flag();
     flag.over->key = 'o';
+    flag.over->label =
+	_("Override projection check (use current location's projection)");
     flag.over->description =
-	_("Override dataset projection (use location's projection)");
+	_("Assume that the dataset has the same projection as the current location");
 
     flag.proj = G_define_flag();
     flag.proj->key = 'j';
@@ -308,6 +315,7 @@ int main(int argc, char *argv[])
     flag.no_import->description =
 	_("Create the location specified by the \"location\" parameter and exit."
           " Do not import the vector data.");
+    flag.no_import->guisection = _("Output");
     
     /* The parser checks if the map already exists in current mapset, this is
      * wrong if location options is used, so we switch out the check and do it
@@ -354,44 +362,9 @@ int main(int argc, char *argv[])
     else
 	datetime_type = "datetime";
 
-    /* dsn is 'PG:', check default connection settings */
     dsn = NULL;
-    if (driver_name && strcmp(driver_name, "pg") == 0 &&
-        G_strcasecmp(param.dsn->answer, "PG:") == 0) {
-        const char *dbname;
-        dbConnection conn;
-        
-        dbname = db_get_default_database_name();
-        if (!dbname)
-            G_fatal_error(_("Database not defined, please check default "
-                            " connection settings by db.connect"));
-
-        dsn = (char *) G_malloc(GPATH_MAX);
-        /* -> dbname */
-        sprintf(dsn, "PG:dbname=%s", dbname);
-        
-        /* -> user/passwd */
-        if (DB_OK == db_get_connection(&conn) &&
-            strcmp(conn.driverName, "pg") == 0 &&
-            strcmp(conn.databaseName, dbname) == 0) {
-            if (conn.user) {
-                strcat(dsn, " user=");
-                strcat(dsn, conn.user);
-            }
-            if (conn.password) {
-                strcat(dsn, " passwd=");
-                strcat(dsn, conn.password);
-            }
-            /* TODO: host/port... */
-        }
-        else {
-            G_debug(1, "unable to get connection");
-        }
-        G_debug(1, "Using dsn=%s", dsn);
-    }
-    else if (param.dsn->answer) {
-        dsn = G_store(param.dsn->answer);
-    }
+    if (param.dsn->answer)
+        dsn = get_datasource_name(param.dsn->answer, TRUE);
     
     min_area = atof(param.min_area->answer);
     snap = atof(param.snap->answer);
diff --git a/vector/v.in.ogr/v.in.ogr.html b/vector/v.in.ogr/v.in.ogr.html
index dfcc2d1..6f5918d 100644
--- a/vector/v.in.ogr/v.in.ogr.html
+++ b/vector/v.in.ogr/v.in.ogr.html
@@ -234,51 +234,57 @@ type=boundary,centroid snap=-1
 
 <h3>PostGIS tables</h3>
 
-Area example:
+Import polygons as areas:
 
 <div class="code"><pre>
 v.in.ogr input="PG:host=localhost dbname=postgis user=postgres" layer=polymap \
 output=polygons type=boundary,centroid
 </pre></div>
 
-<h3>Oracle Spatial maps</h3>
+<h3>Default connection settings as datasource (PostgreSQL only)</h3>
 
-Note that you have to set the environment-variables <tt>ORACLE_BASE,
-ORACLE_SID, ORACLE_HOME</tt> and <tt>TNS_ADMIN</tt> accordingly.
-
-<div class="code"><pre>
-v.in.ogr dsn=OCI:username/password at database_instance output=grasslayer layer=roads_oci
-</pre></div>
-
-<!-- It doesn't work, see http://trac.osgeo.org/grass/changeset/59627
-
-<h3>Support of database schema</h3>
+If datasource (<b>input</b>) is specified as 'PG:' and the default DB
+driver is <a href="grass-pg.html">PostgreSQL</a> (<tt>pg</tt>) than
+the connection string is determined from the default DB settings, see
+examples below.
 
 <p>
 For schema support, first set a default schema with 
 <em><a href="db.connect.html">db.connect</a></em>. If schema support
-is used the schema name must be specified whenever a db.* module is
-called.
+is used the schema name must be specified whenever a <tt>db.*</tt>
+module is called. User and password for connection to the database can
+be specified by <em><a href="db.login.html">db.login</a></em>.
 
 <p>
-Example:
+Example (with schema):
 
 <div class="code"><pre>
-db.connect driver=pg database=test schema=user1 group=group1
-db.login driver=pg database=test user=user1 password=pwd1
-v.in.ogr dsn=./ layer=river output=river     # -> table user1.river
+db.connect driver=pg database=test schema=user1
+db.login user=user1 password=pwd1
+# -> input="PG:dbname=test user=user1 password=pwd1" layer="user1.river"
+v.in.ogr input=PG: layer=river output=river     
 db.select table=user1.river
 </pre></div>
 
+<p>
 The user can ignore schemas, if desired:
 
 <div class="code"><pre>
 db.connect driver=pg database=test
-db.login driver=pg database=test user=user1 password=pwd1
-v.in.ogr dsn=./ layer=river output=river     # -> table public.river
+db.login user=user1 password=pwd1
+# -> input="PG:dbname=test user=user1 password=pwd1"
+v.in.ogr input=PG: layer=river output=river 
 db.select table=river
 </pre></div>
--->
+
+<h3>Oracle Spatial</h3>
+
+Note that you have to set the environment-variables <tt>ORACLE_BASE,
+ORACLE_SID, ORACLE_HOME</tt> and <tt>TNS_ADMIN</tt> accordingly.
+
+<div class="code"><pre>
+v.in.ogr input=OCI:username/password at database_instance output=grasslayer layer=roads_oci
+</pre></div>
 
 <h3>Multiple geometry columns</h3>
 
@@ -376,4 +382,4 @@ Various improvements by Markus Metz
 Multiple geometry columns support by Martin Landa, OSGeoREL, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-08-06 18:35:16 +0200 (Sat, 06 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-06 18:34:49 +0200 (Sat, 06 Aug 2016) $</i>
diff --git a/vector/v.in.pdal/Makefile b/vector/v.in.pdal/Makefile
new file mode 100644
index 0000000..6ce7189
--- /dev/null
+++ b/vector/v.in.pdal/Makefile
@@ -0,0 +1,19 @@
+MODULE_TOPDIR = ../..
+
+PGM=v.in.pdal
+
+LIBES = $(GPROJLIB) $(VECTORLIB) $(DBMILIB) $(GISLIB) $(MATHLIB) $(PDALLIBS)
+DEPENDENCIES = $(GPROJDEP) $(VECTORDEP) $(DBMIDEP) $(GISDEP)
+
+EXTRA_INC = $(VECT_INC) $(PROJINC) $(PDALINC)
+EXTRA_CFLAGS = $(VECT_CFLAGS) $(PDALCPPFLAGS)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+LINK = $(CXX)
+
+ifneq ($(strip $(CXX)),)
+ifneq ($(USE_PDAL),)
+default: cmd
+endif
+endif
diff --git a/vector/v.in.pdal/filters.c b/vector/v.in.pdal/filters.c
new file mode 100644
index 0000000..ad09e5f
--- /dev/null
+++ b/vector/v.in.pdal/filters.c
@@ -0,0 +1,156 @@
+/*
+ * v.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+
+#include "filters.h"
+
+#include "lidar.h"
+
+#include <stdlib.h>
+#include <string.h>
+#include <grass/gis.h>
+#include <grass/glocale.h>
+
+
+int spatial_filter_from_option(struct Option *option, double *xmin,
+                               double *ymin, double *xmax, double *ymax)
+{
+    if (option->answer)
+        return FALSE;
+    int arg_s_num = 0;
+    int i = 0;
+
+    while (option->answers[i]) {
+        if (i == 0)
+            *xmin = atof(option->answers[i]);
+        if (i == 1)
+            *ymin = atof(option->answers[i]);
+        if (i == 2)
+            *xmax = atof(option->answers[i]);
+        if (i == 3)
+            *ymax = atof(option->answers[i]);
+        arg_s_num++;
+        i++;
+    }
+    if (arg_s_num != 4)
+        G_fatal_error(_("4 values required for '%s' option"), option->key);
+    return TRUE;
+}
+
+int spatial_filter_from_current_region(double *xmin, double *ymin,
+                                       double *xmax, double *ymax)
+{
+    struct Cell_head region;
+
+    G_get_window(&region);
+    *xmin = region.west;
+    *xmax = region.east;
+    *ymin = region.south;
+    *ymax = region.north;
+    return TRUE;
+}
+
+int zrange_filter_from_option(struct Option *option, double *zmin,
+                              double *zmax)
+{
+    if (option->answer != NULL) {
+        if (option->answers[0] == NULL || option->answers[1] == NULL)
+            G_fatal_error(_("Invalid zrange <%s>"), option->answer);
+        sscanf(option->answers[0], "%lf", zmin);
+        sscanf(option->answers[1], "%lf", zmax);
+        /* for convenience, switch order to make valid input */
+        if (*zmin > *zmax) {
+            double tmp = *zmax;
+
+            *zmax = *zmin;
+            *zmin = tmp;
+        }
+        return TRUE;
+    }
+    return FALSE;
+}
+
+int return_filter_create_from_string(struct ReturnFilter *return_filter,
+                                     const char *name)
+{
+    return_filter->filter = LAS_ALL;
+    if (name) {
+        if (strcmp(name, "first") == 0)
+            return_filter->filter = LAS_FIRST;
+        else if (strcmp(name, "last") == 0)
+            return_filter->filter = LAS_LAST;
+        else if (strcmp(name, "mid") == 0)
+            return_filter->filter = LAS_MID;
+        else
+            G_fatal_error(_("Unknown return filter value <%s>"), name);
+    }
+    if (return_filter->filter == LAS_ALL)
+        return FALSE;
+    else
+        return TRUE;
+}
+
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns)
+{
+    if (return_filter->filter == LAS_ALL)
+        return FALSE;
+    int skipme = 1;
+
+    switch (return_filter->filter) {
+    case LAS_FIRST:
+        if (return_n == 1)
+            skipme = 0;
+        break;
+    case LAS_MID:
+        if (return_n > 1 && return_n < n_returns)
+            skipme = 0;
+        break;
+    case LAS_LAST:
+        if (n_returns > 1 && return_n == n_returns)
+            skipme = 0;
+        break;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
+
+int class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                     char **classes)
+{
+    class_filter->str_classes = classes;
+    if (classes)
+        return TRUE;
+    else
+        return FALSE;
+}
+
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n)
+{
+    if (!class_filter->str_classes)
+        return FALSE;
+    int i = 0;
+    int skipme = TRUE;
+
+    while (class_filter->str_classes[i]) {
+        if (class_n == atoi(class_filter->str_classes[i])) {
+            skipme = FALSE;
+            break;
+        }
+        i++;
+    }
+    if (skipme)
+        return TRUE;
+    return FALSE;
+}
diff --git a/vector/v.in.pdal/filters.h b/vector/v.in.pdal/filters.h
new file mode 100644
index 0000000..1036efc
--- /dev/null
+++ b/vector/v.in.pdal/filters.h
@@ -0,0 +1,47 @@
+/*
+ * v.in.lidar filtering functions
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (r.in.lidar)
+ *  Vaclav Petras (move code to a separate files)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#ifndef __FILTERS_H__
+#define __FILTERS_H__
+
+struct ReturnFilter
+{
+    int filter;
+};
+
+struct ClassFilter
+{
+
+    /** NULL terminated list of class numbers represented as string */
+    char **str_classes;
+};
+
+struct Option;
+
+int spatial_filter_from_option(struct Option *option, double *xmin,
+                               double *ymin, double *xmax, double *ymax);
+int spatial_filter_from_current_region(double *xmin, double *ymin,
+                                       double *xmax, double *ymax);
+
+int zrange_filter_from_option(struct Option *option,
+                              double *zmin, double *zmax);
+
+int return_filter_create_from_string(struct ReturnFilter *return_filter,
+                                     const char *name);
+int return_filter_is_out(struct ReturnFilter *return_filter, int return_n,
+                         int n_returns);
+int class_filter_create_from_strings(struct ClassFilter *class_filter,
+                                     char **classes);
+int class_filter_is_out(struct ClassFilter *class_filter, int class_n);
+
+#endif /* __FILTERS_H__ */
diff --git a/vector/v.in.pdal/lidar.c b/vector/v.in.pdal/lidar.c
new file mode 100644
index 0000000..16febbe
--- /dev/null
+++ b/vector/v.in.pdal/lidar.c
@@ -0,0 +1,59 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      common lidar-related definitions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#include "lidar.h"
+
+void GLidarLayers_set_no_layers(struct GLidarLayers *layers)
+{
+    layers->id_layer = 0;
+    layers->return_layer = 0;
+    layers->class_layer = 0;
+    layers->rgb_layer = 0;
+}
+
+struct class_table class_val[] = {
+    {0, "Created, never classified"},
+    {1, "Unclassified"},
+    {2, "Ground"},
+    {3, "Low Vegetation"},
+    {4, "Medium Vegetation"},
+    {5, "High Vegetation"},
+    {6, "Building"},
+    {7, "Low Point (noise)"},
+    {8, "Model Key-point (mass point)"},
+    {9, "Water"},
+    {10, "Reserved for ASPRS Definition"},
+    {11, "Reserved for ASPRS Definition"},
+    {12, "Overlap Points"},
+    {13 /* 13 - 31 */ , "Reserved for ASPRS Definition"},
+    {0, 0}
+};
+
+struct class_table class_type[] = {
+    {5, "Synthetic"},
+    {6, "Key-point"},
+    {7, "Withheld"},
+    {0, 0}
+};
+
+int return_to_cat(int return_n, int n_returns)
+{
+    if (return_n == 1)
+        return LAS_FIRST;
+    else if (n_returns > 1 && return_n == n_returns)
+            return LAS_LAST;
+    else
+        return LAS_MID;
+}
diff --git a/vector/v.in.pdal/lidar.h b/vector/v.in.pdal/lidar.h
new file mode 100644
index 0000000..fa98dcc
--- /dev/null
+++ b/vector/v.in.pdal/lidar.h
@@ -0,0 +1,81 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      common lidar-related definitions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef GRASS_LIDAR_H
+#define GRASS_LIDAR_H
+
+#define LAS_ALL 0
+#define LAS_FIRST 1
+#define LAS_MID 2
+#define LAS_LAST 3
+
+struct GLidarLayers
+{
+    int id_layer;
+    int return_layer;
+    int class_layer;
+    int rgb_layer;
+};
+
+void GLidarLayers_set_no_layers(struct GLidarLayers *layers);
+
+/*
+ * ASPRS Standard LIDAR Point Classes
+ * Classification Value (bits 0:4) : Meaning
+ *      0 : Created, never classified
+ *      1 : Unclassified
+ *      2 : Ground
+ *      3 : Low Vegetation
+ *      4 : Medium Vegetation
+ *      5 : High Vegetation
+ *      6 : Building
+ *      7 : Low Point (noise)
+ *      8 : Model Key-point (mass point)
+ *      9 : Water
+ *     10 : Reserved for ASPRS Definition
+ *     11 : Reserved for ASPRS Definition
+ *     12 : Overlap Points
+ *  13-31 : Reserved for ASPRS Definition
+ */
+
+/* Classification Bit Field Encoding
+ * Bits | Field Name     | Description
+ *  0-4 | Classification | Standard ASPRS classification as defined in the
+ *                         above classification table.
+ *    5 | Synthetic      | If set then this point was created by a technique
+ *                         other than LIDAR collection such as digitized from
+ *                         a photogrammetric stereo model or by traversing
+ *                         a waveform.
+ *    6 | Key-point      | If set, this point is considered to be a model
+ *                         key-point and thus generally should not be withheld
+ *                         in a thinning algorithm.
+ *    7 | Withheld       | If set, this point should not be included in
+ *                         processing (synonymous with Deleted).
+ */
+
+/* keep the comments above in sync with the .c file */
+
+struct class_table
+{
+    int code;
+    char *name;
+};
+
+extern struct class_table class_val[];
+extern struct class_table class_type[];
+
+int return_to_cat(int return_n, int n_returns);
+
+#endif /* GRASS_LIDAR_H */
diff --git a/vector/v.in.pdal/main.cpp b/vector/v.in.pdal/main.cpp
new file mode 100644
index 0000000..a9d6cdb
--- /dev/null
+++ b/vector/v.in.pdal/main.cpp
@@ -0,0 +1,616 @@
+#include <pdal/PointTable.hpp>
+#include <pdal/PointView.hpp>
+#include <pdal/StageFactory.hpp>
+#include <pdal/LasReader.hpp>
+#include <pdal/LasHeader.hpp>
+#include <pdal/Options.hpp>
+#include <pdal/ReprojectionFilter.hpp>
+
+extern "C"
+{
+#include <grass/gis.h>
+#include <grass/vector.h>
+#include <grass/gprojects.h>
+#include <grass/glocale.h>
+}
+
+extern "C"
+{
+#include "lidar.h"
+#include "projection.h"
+#include "filters.h"
+}
+
+#ifdef HAVE_LONG_LONG_INT
+typedef unsigned long long gpoint_count;
+#else
+typedef unsigned long gpoint_count;
+#endif
+
+/* this is plain C but in sync with v.in.lidar */
+static void check_layers_not_equal(int primary, int secondary,
+                                   const char *primary_name,
+                                   const char *secondary_name)
+{
+    if (primary && primary == secondary)
+        G_fatal_error(_("Values of %s and %s are the same."
+                        " All categories would be stored only"
+                        " in layer number <%d>"), primary_name,
+                      secondary_name, primary);
+}
+
+static void check_layers_in_list_not_equal(struct Option **options,
+                                           int *values, size_t size)
+{
+    size_t layer_index_1, layer_index_2;
+    for (layer_index_1 = 0; layer_index_1 < size; layer_index_1++) {
+        for (layer_index_2 = 0; layer_index_2 < size; layer_index_2++) {
+            if (layer_index_1 != layer_index_2) {
+                check_layers_not_equal(values[layer_index_1],
+                                       values[layer_index_2],
+                                       options[layer_index_1]->key,
+                                       options[layer_index_2]->key);
+            }
+        }
+    }
+}
+
+void pdal_point_to_grass(struct Map_info *output_vector,
+                         struct line_pnts *points, struct line_cats *cats,
+                         pdal::PointViewPtr point_view, pdal::PointId idx,
+                         struct GLidarLayers *layers, int cat,
+                         pdal::Dimension::Id::Enum dim_to_use_as_z)
+{
+    Vect_reset_line(points);
+    Vect_reset_cats(cats);
+
+    using namespace pdal::Dimension::Id;
+    double x = point_view->getFieldAs<double>(X, idx);
+    double y = point_view->getFieldAs<double>(Y, idx);
+    double z = point_view->getFieldAs<double>(dim_to_use_as_z, idx);
+
+    /* TODO: optimize for case with no layers, by adding
+     * and if to skip all the other ifs */
+    if (layers->id_layer) {
+        Vect_cat_set(cats, layers->id_layer, cat);
+    }
+    if (layers->return_layer) {
+        int return_n = point_view->getFieldAs<int>(ReturnNumber, idx);
+        int n_returns = point_view->getFieldAs<int>(NumberOfReturns, idx);
+        int return_c = return_to_cat(return_n, n_returns);
+        Vect_cat_set(cats, layers->return_layer, return_c);
+    }
+    if (layers->class_layer) {
+        Vect_cat_set(cats, layers->class_layer,
+                     point_view->getFieldAs<int>(Classification, idx));
+    }
+    if (layers->rgb_layer) {
+        int red = point_view->getFieldAs<int>(Red, idx);
+        int green = point_view->getFieldAs<int>(Green, idx);
+        int blue = point_view->getFieldAs<int>(Blue, idx);
+        int rgb = red;
+        rgb = (rgb << 8) + green;
+        rgb = (rgb << 8) + blue;
+        rgb++;  /* cat 0 is not valid, add one */
+        Vect_cat_set(cats, layers->rgb_layer, rgb);
+    }
+
+    Vect_append_point(points, x, y, z);
+    Vect_write_line(output_vector, GV_POINT, points, cats);
+}
+
+int main(int argc, char *argv[])
+{
+    G_gisinit(argv[0]);
+
+    GModule *module = G_define_module();
+    G_add_keyword(_("vector"));
+    G_add_keyword(_("import"));
+    G_add_keyword(_("LIDAR"));
+    module->description =
+        _("Converts LAS LiDAR point clouds to a GRASS vector map with PDAL.");
+
+    Option *in_opt = G_define_standard_option(G_OPT_F_INPUT);
+    in_opt->label = _("LAS input file");
+    in_opt->description =
+        _("LiDAR input files in LAS format (*.las or *.laz)");
+
+    Option *out_opt = G_define_standard_option(G_OPT_V_OUTPUT);
+
+    Option *id_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    id_layer_opt->key = "id_layer";
+    id_layer_opt->label = _("Layer number to store generated point ID as category");
+    id_layer_opt->description = _("Set to 1 by default, use -c to not store it");
+    id_layer_opt->answer = NULL;
+    id_layer_opt->guisection = _("Categories");
+
+    Option *return_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    return_layer_opt->key = "return_layer";
+    return_layer_opt->label =
+        _("Layer number to store return information as category");
+    return_layer_opt->description = _("Leave empty to not store it");
+    return_layer_opt->answer = NULL;
+    return_layer_opt->guisection = _("Categories");
+
+    Option *class_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    class_layer_opt->key = "class_layer";
+    class_layer_opt->label =
+        _("Layer number to store class number as category");
+    class_layer_opt->description = _("Leave empty to not store it");
+    class_layer_opt->answer = NULL;
+    class_layer_opt->guisection = _("Categories");
+
+    Option *rgb_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    rgb_layer_opt->key = "rgb_layer";
+    rgb_layer_opt->label =
+        _("Layer number where RBG colors are stored as category");
+    rgb_layer_opt->description = _("Leave empty to not store it");
+    rgb_layer_opt->answer = NULL;
+    rgb_layer_opt->guisection = _("Categories");
+
+    Option *spatial_opt = G_define_option();
+    spatial_opt->key = "spatial";
+    spatial_opt->type = TYPE_DOUBLE;
+    spatial_opt->multiple = NO;
+    spatial_opt->required = NO;
+    // TODO: does this require multiple or not?
+    spatial_opt->key_desc = "xmin,ymin,xmax,ymax";
+    spatial_opt->label = _("Import subregion only");
+    spatial_opt->description =
+        _("Format: xmin,ymin,xmax,ymax - usually W,S,E,N");
+    spatial_opt->guisection = _("Selection");
+
+    Option *zrange_opt = G_define_option();
+    zrange_opt->key = "zrange";
+    zrange_opt->type = TYPE_DOUBLE;
+    zrange_opt->required = NO;
+    zrange_opt->key_desc = "min,max";
+    zrange_opt->description = _("Filter range for z data (min,max)");
+    zrange_opt->guisection = _("Selection");
+
+    Option *filter_opt = G_define_option();
+    filter_opt->key = "return_filter";
+    filter_opt->type = TYPE_STRING;
+    filter_opt->required = NO;
+    filter_opt->label = _("Only import points of selected return type");
+    filter_opt->description = _("If not specified, all points are imported");
+    filter_opt->options = "first,last,mid";
+    filter_opt->guisection = _("Selection");
+
+    Option *class_opt = G_define_option();
+    class_opt->key = "class_filter";
+    class_opt->type = TYPE_INTEGER;
+    class_opt->multiple = YES;
+    class_opt->required = NO;
+    class_opt->label = _("Only import points of selected class(es)");
+    class_opt->description = _("Input is comma separated integers. "
+                               "If not specified, all points are imported.");
+    class_opt->guisection = _("Selection");
+
+    Flag *reproject_flag = G_define_flag();
+    reproject_flag->key = 'w';
+    reproject_flag->label =
+        _("Reproject to location's coordinate system if needed");
+    reproject_flag->description =
+        _("Reprojects input dataset to the coordinate system of"
+          " the GRASS location (by default only datasets with the"
+          " matching cordinate system can be imported");
+    reproject_flag->guisection = _("Projection");
+
+    Flag *over_flag = G_define_flag();
+    over_flag->key = 'o';
+    over_flag->label =
+        _("Override projection check (use current location's projection)");
+    over_flag->description =
+        _("Assume that the dataset has same projection as the current location");
+    over_flag->guisection = _("Projection");
+
+    // TODO: from the API it seems that also prj file path and proj string will work
+    Option *input_srs_opt = G_define_option();
+    input_srs_opt->key = "input_srs";
+    input_srs_opt->type = TYPE_STRING;
+    input_srs_opt->required = NO;
+    input_srs_opt->label =
+            _("Input dataset projection (WKT or EPSG, e.g. EPSG:4326)");
+    input_srs_opt->description =
+            _("Override input dataset coordinate system using EPSG code"
+              " or WKT definition");
+    input_srs_opt->guisection = _("Projection");
+
+    Option *max_ground_window_opt = G_define_option();
+    max_ground_window_opt->key = "max_ground_window_size";
+    max_ground_window_opt->type = TYPE_DOUBLE;
+    max_ground_window_opt->required = NO;
+    max_ground_window_opt->answer = "33";
+    max_ground_window_opt->description =
+        _("Maximum window size for ground filter");
+    max_ground_window_opt->guisection = _("Ground filter");
+
+    Option *ground_slope_opt = G_define_option();
+    ground_slope_opt->key = "ground_slope";
+    ground_slope_opt->type = TYPE_DOUBLE;
+    ground_slope_opt->required = NO;
+    ground_slope_opt->answer = "1.0";
+    ground_slope_opt->description = _("Slope for ground filter");
+    ground_slope_opt->guisection = _("Ground filter");
+
+    Option *max_ground_distance_opt = G_define_option();
+    max_ground_distance_opt->key = "max_ground_distance";
+    max_ground_distance_opt->type = TYPE_DOUBLE;
+    max_ground_distance_opt->required = NO;
+    max_ground_distance_opt->answer = "2.5";
+    max_ground_distance_opt->description =
+        _("Maximum distance for ground filter");
+    max_ground_distance_opt->guisection = _("Ground filter");
+
+    Option *init_ground_distance_opt = G_define_option();
+    init_ground_distance_opt->key = "initial_ground_distance";
+    init_ground_distance_opt->type = TYPE_DOUBLE;
+    init_ground_distance_opt->required = NO;
+    init_ground_distance_opt->answer = "0.15";
+    init_ground_distance_opt->description =
+        _("Initial distance for ground filter");
+    init_ground_distance_opt->guisection = _("Ground filter");
+
+    Option *ground_cell_size_opt = G_define_option();
+    ground_cell_size_opt->key = "ground_cell_size";
+    ground_cell_size_opt->type = TYPE_DOUBLE;
+    ground_cell_size_opt->required = NO;
+    ground_cell_size_opt->answer = "1";
+    ground_cell_size_opt->description =
+        _("Initial distance for ground filter");
+    ground_cell_size_opt->guisection = _("Ground filter");
+
+    Flag *nocats_flag = G_define_flag();
+    nocats_flag->key = 'c';
+    nocats_flag->label =
+        _("Do not automatically add unique ID as category to each point");
+    nocats_flag->description =
+        _("Create only requested layers and categories");
+    /* v.in.lidar has this in Speed but we don't have it here */
+    nocats_flag->guisection = _("Categories");
+
+    Flag *region_flag = G_define_flag();
+    region_flag->key = 'r';
+    region_flag->guisection = _("Selection");
+    region_flag->description = _("Limit import to the current region");
+
+    Flag *extract_ground_flag = G_define_flag();
+    extract_ground_flag->key = 'j';
+    extract_ground_flag->label =
+        _("Classify and extract ground points");
+    extract_ground_flag->description =
+        _("This assignes class 2 to the groud points");
+    extract_ground_flag->guisection = _("Ground filter");
+
+    // TODO: by inverting class filter and choosing 2 we can select non-groud points
+    // this can be done as a separate flag (generally useful?)
+    // or this flag can be changed (only ground is classified anyway)
+    // and it would Classify ground and extract non-ground
+    // probably better if only one step is required to get ground and non-ground
+    Flag *classify_ground_flag = G_define_flag();
+    classify_ground_flag->key = 'k';
+    classify_ground_flag->description = _("Classify ground points");
+    classify_ground_flag->guisection = _("Ground filter");
+
+    Flag *height_filter_flag = G_define_flag();
+    height_filter_flag->key = 'h';
+    height_filter_flag->label =
+        _("Compute height for points as a difference from ground");
+    height_filter_flag->description =
+        _("This requires points to have class 2");
+    height_filter_flag->guisection = _("Transform");
+
+    Flag *approx_ground_flag = G_define_flag();
+    approx_ground_flag->key = 'm';
+    approx_ground_flag->description =
+        _("Use approximate algorithm in ground filter");
+    approx_ground_flag->guisection = _("Ground filter");
+
+    G_option_exclusive(spatial_opt, region_flag, NULL);
+    G_option_exclusive(reproject_flag, over_flag, NULL);
+    G_option_exclusive(extract_ground_flag, classify_ground_flag, NULL);
+    G_option_exclusive(nocats_flag, id_layer_opt, NULL);
+    G_option_requires(return_layer_opt, id_layer_opt, nocats_flag, NULL);
+    G_option_requires(class_layer_opt, id_layer_opt, nocats_flag, NULL);
+    G_option_requires(rgb_layer_opt, id_layer_opt, nocats_flag, NULL);
+
+    if (G_parser(argc, argv))
+        return EXIT_FAILURE;
+
+    if (access(in_opt->answer, F_OK) != 0) {
+        G_fatal_error(_("Input file <%s> does not exist"), in_opt->answer);
+    }
+
+    // we use full qualification because the dim ns conatins too general names
+    pdal::Dimension::Id::Enum dim_to_use_as_z = pdal::Dimension::Id::Z;
+
+    struct GLidarLayers layers;
+    GLidarLayers_set_no_layers(&layers);
+    layers.id_layer = 1;
+    if (id_layer_opt->answer && id_layer_opt->answer[0] != '\0')
+        layers.id_layer = std::stoi(id_layer_opt->answer);
+    if (return_layer_opt->answer && return_layer_opt->answer[0] != '\0')
+        layers.return_layer = std::stoi(return_layer_opt->answer);
+    if (class_layer_opt->answer && class_layer_opt->answer[0] != '\0')
+        layers.class_layer = std::stoi(class_layer_opt->answer);
+    if (rgb_layer_opt->answer && rgb_layer_opt->answer[0] != '\0')
+        layers.rgb_layer = std::stoi(rgb_layer_opt->answer);
+
+    if (nocats_flag->answer) {
+        layers.id_layer = 0;
+    }
+
+    /* this is plain C but in sync with v.in.lidar */
+    Option *layer_options[4] = {id_layer_opt, return_layer_opt,
+                                class_layer_opt, rgb_layer_opt};
+    int layer_values[4] = {layers.id_layer, layers.return_layer,
+                           layers.class_layer, layers.rgb_layer};
+    check_layers_in_list_not_equal(layer_options, layer_values, 4);
+
+    if (layers.id_layer)
+        G_verbose_message(_("Storing generated point IDs as categories"
+                            " in the layer <%d>, consequently no more"
+                            " than %d points can be imported"),
+                          layers.id_layer, GV_CAT_MAX);
+
+    double xmin = 0;
+    double ymin = 0;
+    double xmax = 0;
+    double ymax = 0;
+    bool use_spatial_filter = false;
+    if (spatial_opt->answer)
+        use_spatial_filter = spatial_filter_from_option(spatial_opt,
+                                                        &xmin, &ymin,
+                                                        &xmax, &ymax);
+    else if (region_flag->answer)
+        use_spatial_filter = spatial_filter_from_current_region(&xmin,
+                                                                &ymin,
+                                                                &xmax,
+                                                                &ymax);
+
+    double zrange_min, zrange_max;
+    bool use_zrange = zrange_filter_from_option(zrange_opt, &zrange_min,
+                                                &zrange_max);
+    struct ReturnFilter return_filter_struct;
+    bool use_return_filter =
+        return_filter_create_from_string(&return_filter_struct,
+                                         filter_opt->answer);
+    struct ClassFilter class_filter;
+    bool use_class_filter =
+        class_filter_create_from_strings(&class_filter, class_opt->answers);
+
+    pdal::StageFactory factory;
+    std::string pdal_read_driver = factory.inferReaderDriver(in_opt->answer);
+    if (pdal_read_driver.empty())
+        G_fatal_error("Cannot determine input file type of <%s>",
+                      in_opt->answer);
+
+    pdal::Option las_opt("filename", in_opt->answer);
+    pdal::Options las_opts;
+    las_opts.add(las_opt);
+    // TODO: free reader
+    // using plain pointer because we need to keep the last stage pointer
+    pdal::Stage * reader = factory.createStage(pdal_read_driver);
+    if (!reader)
+        G_fatal_error("PDAL reader creation failed, a wrong format of <%s>",
+                      in_opt->answer);
+    reader->setOptions(las_opts);
+
+    pdal::Stage * last_stage = reader;
+    pdal::ReprojectionFilter reprojection_filter;
+
+    // we reproject when requested regardless the input projection
+    if (reproject_flag->answer) {
+        G_message(_("Reprojecting the input to the location projection"));
+        char *proj_wkt = location_projection_as_wkt(false);
+        pdal::Options o4;
+        // TODO: try catch for user input error
+        if (input_srs_opt->answer)
+            o4.add<std::string>("in_srs", input_srs_opt->answer);
+        o4.add<std::string>("out_srs", proj_wkt);
+        reprojection_filter.setOptions(o4);
+        reprojection_filter.setInput(*reader);
+        last_stage = &reprojection_filter;
+    }
+
+    if (extract_ground_flag->answer || classify_ground_flag->answer) {
+        if (extract_ground_flag->answer)
+            G_message(_("Extracting ground points"));
+        if (classify_ground_flag->answer)
+            G_message(_("Classifying ground points"));
+        pdal::Options groundOptions;
+        groundOptions.add<double>("max_window_size",
+                                  atof(max_ground_window_opt->answer));
+        groundOptions.add<double>("slope",
+                                  atof(ground_slope_opt->answer));
+        groundOptions.add<double>("max_distance",
+                                  atof(max_ground_distance_opt->answer));
+        groundOptions.add<double>("initial_distance",
+                                  atof(init_ground_distance_opt->answer));
+        groundOptions.add<double>("cell_size",
+                                  atof(ground_cell_size_opt->answer));
+        groundOptions.add<bool>("classify",
+                                classify_ground_flag->answer);
+        groundOptions.add<bool>("extract",
+                                extract_ground_flag->answer);
+        groundOptions.add<bool>("approximate",
+                                approx_ground_flag->answer);
+        groundOptions.add<bool>("debug", false);
+        groundOptions.add<uint32_t>("verbose", 0);
+
+        // TODO: free this or change pointer type to shared
+        pdal::Stage * ground_stage(factory.createStage("filters.ground"));
+        if (!ground_stage)
+            G_fatal_error(_("Ground filter is not available"
+                            " (PDAL probably compiled without PCL)"));
+        ground_stage->setOptions(groundOptions);
+        ground_stage->setInput(*last_stage);
+        last_stage = ground_stage;
+    }
+
+    if (height_filter_flag->answer) {
+        // TODO: we should test with if (point_view->hasDim(Id::Classification))
+        // but we don't have the info yet
+        // TODO: free this or change pointer type to shared
+        pdal::Stage * height_stage(factory.createStage("filters.height"));
+        if (!height_stage)
+            G_fatal_error(_("Height above ground filter is not available"
+                            " (PDAL probably compiled without PCL)"));
+        height_stage->setInput(*last_stage);
+        last_stage = height_stage;
+    }
+
+    pdal::PointTable point_table;
+    last_stage->prepare(point_table);
+
+    // getting projection is possible only after prepare
+    if (over_flag->answer) {
+        G_important_message(_("Overriding projection check and assuming"
+                              " that the projection of input matches"
+                              " the location projection"));
+    }
+    else if (!reproject_flag->answer) {
+        pdal::SpatialReference spatial_reference = reader->getSpatialReference();
+        if (spatial_reference.empty())
+            G_fatal_error(_("The input dataset has undefined projection"));
+        std::string dataset_wkt =
+            spatial_reference.
+            getWKT(pdal::SpatialReference::eHorizontalOnly);
+        bool proj_match = is_wkt_projection_same_as_loc(dataset_wkt.c_str());
+        if (!proj_match)
+            wkt_projection_mismatch_report(dataset_wkt.c_str());
+    }
+
+    G_important_message(_("Running PDAL algorithms..."));
+    pdal::PointViewSet point_view_set = last_stage->execute(point_table);
+    pdal::PointViewPtr point_view = *point_view_set.begin();
+
+    // TODO: test also z
+    // TODO: the falses for filters should be perhaps fatal error
+    // (bad input) or warning if filter was requested by the user
+
+    // update layers we are writting based on what is in the data
+    // update usage of our filters as well
+    if (point_view->hasDim(pdal::Dimension::Id::ReturnNumber) &&
+        point_view->hasDim(pdal::Dimension::Id::NumberOfReturns)) {
+        use_return_filter = true;
+    }
+    else {
+        if (layers.return_layer) {
+            layers.return_layer = 0;
+            G_warning(_("Cannot store return information because the"
+                        " input does not have a return dimensions"));
+        }
+        use_return_filter = false;
+    }
+
+    if (point_view->hasDim(pdal::Dimension::Id::Classification)) {
+        use_class_filter = true;
+    }
+    else {
+        if (layers.class_layer) {
+            layers.class_layer = 0;
+            G_warning(_("Cannot store class because the input"
+                        " does not have a classification dimension"));
+        }
+        use_class_filter = false;
+    }
+
+    if (!(point_view->hasDim(pdal::Dimension::Id::Red) &&
+          point_view->hasDim(pdal::Dimension::Id::Green) &&
+          point_view->hasDim(pdal::Dimension::Id::Blue))) {
+        if (layers.rgb_layer) {
+            layers.rgb_layer = 0;
+            G_warning(_("Cannot store RGB colors because the input"
+                        " does not have a RGB dimensions"));
+        }
+    }
+
+    G_important_message(_("Scanning points..."));
+    struct Map_info output_vector;
+
+    // the overwrite warning comes quite late in the execution
+    // but that's good enough
+    if (Vect_open_new(&output_vector, out_opt->answer, 1) < 0)
+        G_fatal_error(_("Unable to create vector map <%s>"), out_opt->answer);
+    Vect_hist_command(&output_vector);
+
+    // height is stored as a new attribute
+    if (height_filter_flag->answer) {
+        dim_to_use_as_z = point_view->layout()->findDim("Height");
+        if (dim_to_use_as_z == pdal::Dimension::Id::Unknown)
+            G_fatal_error(_("Cannot indentify the height dimension"
+                            " (probably something changed in PDAL)"));
+    }
+
+    // this is just for sure, we test the individual dimensions before
+    // TODO: should we test Z explicitly as well?
+    if (!point_view->hasDim(dim_to_use_as_z))
+        G_fatal_error(_("Dataset doesn't have requested dimension '%s'"
+                        " with ID %d (possibly a programming error)"),
+                      pdal::Dimension::name(dim_to_use_as_z).c_str(),
+                      dim_to_use_as_z);
+
+    struct line_pnts *points = Vect_new_line_struct();
+    struct line_cats *cats = Vect_new_cats_struct();
+
+    gpoint_count n_outside = 0;
+    gpoint_count zrange_filtered = 0;
+    gpoint_count n_filtered = 0;
+    gpoint_count n_class_filtered = 0;
+
+    int cat = 1;
+    bool cat_max_reached = false;
+
+    for (pdal::PointId idx = 0; idx < point_view->size(); ++idx) {
+        // TODO: avoid duplication of reading the attributes here and when writing if needed
+        double x = point_view->getFieldAs<double>(pdal::Dimension::Id::X, idx);
+        double y = point_view->getFieldAs<double>(pdal::Dimension::Id::Y, idx);
+        double z = point_view->getFieldAs<double>(dim_to_use_as_z, idx);
+
+        if (use_spatial_filter) {
+            if (x < xmin || x > xmax || y < ymin || y > ymax) {
+                n_outside++;
+                continue;
+            }
+        }
+        if (use_zrange) {
+            if (z < zrange_min || z > zrange_max) {
+                zrange_filtered++;
+                continue;
+            }
+        }
+        if (use_return_filter) {
+            int return_n =
+                point_view->getFieldAs<int>(pdal::Dimension::Id::ReturnNumber, idx);
+            int n_returns =
+                point_view->getFieldAs<int>(pdal::Dimension::Id::NumberOfReturns, idx);
+            if (return_filter_is_out
+                (&return_filter_struct, return_n, n_returns)) {
+                n_filtered++;
+                continue;
+            }
+        }
+        if (use_class_filter) {
+            int point_class =
+                point_view->getFieldAs<int>(pdal::Dimension::Id::Classification, idx);
+            if (class_filter_is_out(&class_filter, point_class)) {
+                n_class_filtered++;
+                continue;
+            }
+        }
+        pdal_point_to_grass(&output_vector, points, cats, point_view,
+                            idx, &layers, cat, dim_to_use_as_z);
+        if (layers.id_layer) {
+            // TODO: perhaps it would be better to use the max cat afterwards
+            if (cat == GV_CAT_MAX) {
+                cat_max_reached = true;
+                break;
+            }
+            cat++;
+        }
+    }
+    // not building topology by default
+    Vect_close(&output_vector);
+}
diff --git a/vector/v.in.pdal/projection.c b/vector/v.in.pdal/projection.c
new file mode 100644
index 0000000..5f9895f
--- /dev/null
+++ b/vector/v.in.pdal/projection.c
@@ -0,0 +1,214 @@
+/*
+ * projection checking
+ *
+ * Copyright 2011-2015 by Markus Metz, and The GRASS Development Team
+ * Authors:
+ *  Markus Metz (v.in.lidar)
+ *  Vaclav Petras (move code to standalone functions)
+ *
+ * This program is free software licensed under the GPL (>=v2).
+ * Read the COPYING file that comes with GRASS for details.
+ *
+ */
+
+#include <string.h>
+
+#include <grass/gis.h>
+#include <grass/glocale.h>
+#include <grass/gprojects.h>
+
+void projection_mismatch_report(struct Cell_head cellhd,
+                                struct Cell_head loc_wind,
+                                struct Key_Value *loc_proj_info,
+                                struct Key_Value *loc_proj_units,
+                                struct Key_Value *proj_info,
+                                struct Key_Value *proj_units, int err)
+{
+    int i_value;
+    char error_msg[8192];
+
+    strcpy(error_msg,
+           _("Projection of dataset does not"
+             " appear to match current location.\n\n"));
+
+    /* TODO: output this info sorted by key: */
+    if (loc_wind.proj != cellhd.proj || err != -2) {
+        if (loc_proj_info != NULL) {
+            strcat(error_msg, _("GRASS LOCATION PROJ_INFO is:\n"));
+            for (i_value = 0; i_value < loc_proj_info->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        loc_proj_info->key[i_value],
+                        loc_proj_info->value[i_value]);
+            strcat(error_msg, "\n");
+        }
+
+        if (proj_info != NULL) {
+            strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+            for (i_value = 0; i_value < proj_info->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        proj_info->key[i_value], proj_info->value[i_value]);
+        }
+        else {
+            strcat(error_msg, _("Import dataset PROJ_INFO is:\n"));
+            if (cellhd.proj == PROJECTION_XY)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (unreferenced/unknown)\n",
+                        cellhd.proj);
+            else if (cellhd.proj == PROJECTION_LL)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (lat/long)\n", cellhd.proj);
+            else if (cellhd.proj == PROJECTION_UTM)
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (UTM), zone = %d\n",
+                        cellhd.proj, cellhd.zone);
+            else
+                sprintf(error_msg + strlen(error_msg),
+                        "Dataset proj = %d (unknown), zone = %d\n",
+                        cellhd.proj, cellhd.zone);
+        }
+    }
+    else {
+        if (loc_proj_units != NULL) {
+            strcat(error_msg, "GRASS LOCATION PROJ_UNITS is:\n");
+            for (i_value = 0; i_value < loc_proj_units->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        loc_proj_units->key[i_value],
+                        loc_proj_units->value[i_value]);
+            strcat(error_msg, "\n");
+        }
+
+        if (proj_units != NULL) {
+            strcat(error_msg, "Import dataset PROJ_UNITS is:\n");
+            for (i_value = 0; i_value < proj_units->nitems; i_value++)
+                sprintf(error_msg + strlen(error_msg), "%s: %s\n",
+                        proj_units->key[i_value], proj_units->value[i_value]);
+        }
+    }
+    sprintf(error_msg + strlen(error_msg),
+            _("\nIn case of no significant differences in the projection definitions,"
+             " use the -o flag to ignore them and use"
+             " current location definition.\n"));
+    strcat(error_msg,
+           _("Consider generating a new location with 'location' parameter"
+             " from input data set.\n"));
+    G_fatal_error("%s", error_msg);
+}
+
+void projection_check_wkt(struct Cell_head cellhd,
+                          struct Cell_head loc_wind,
+                          const char *projstr, int override, int verbose)
+{
+    struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
+    struct Key_Value *proj_info, *proj_units;
+    int err = 0;
+
+    proj_info = NULL;
+    proj_units = NULL;
+
+    /* Projection only required for checking so convert non-interactively */
+    if (GPJ_wkt_to_grass(&cellhd, &proj_info, &proj_units, projstr, 0) < 0)
+        G_warning(_("Unable to convert input map projection information to "
+                    "GRASS format for checking"));
+
+    /* Does the projection of the current location match the dataset? */
+
+    /* fetch LOCATION PROJ info */
+    if (loc_wind.proj != PROJECTION_XY) {
+        loc_proj_info = G_get_projinfo();
+        loc_proj_units = G_get_projunits();
+    }
+
+    if (override) {
+        cellhd.proj = loc_wind.proj;
+        cellhd.zone = loc_wind.zone;
+        if (verbose)
+            G_message(_("Overriding projection check"));
+    }
+    else if (loc_wind.proj != cellhd.proj
+             || (err =
+                 G_compare_projections(loc_proj_info, loc_proj_units,
+                                       proj_info, proj_units)) != TRUE) {
+        projection_mismatch_report(cellhd, loc_wind, loc_proj_info,
+                                   loc_proj_units,
+                                   proj_info, proj_units, err);
+    }
+    else {
+        if (verbose) {
+            G_message(_("Projection of input dataset and current location "
+                        "appear to match"));
+        }
+    }
+}
+
+
+/* Does the projection of the current location match the dataset? */
+int is_wkt_projection_same_as_loc(const char *wkt)
+{
+    struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
+    struct Key_Value *proj_info = NULL, *proj_units = NULL;
+    struct Cell_head cellhd;
+    struct Cell_head loc_wind;
+
+    G_get_default_window(&loc_wind);
+
+    /* Projection only required for checking so convert non-interactively */
+    if (GPJ_wkt_to_grass(&cellhd, &proj_info, &proj_units, wkt, 0) < 0)
+        G_warning(_("Unable to convert input map projection information to "
+                    "GRASS format for checking"));
+
+    /* fetch LOCATION PROJ info */
+    if (loc_wind.proj != PROJECTION_XY) {
+        loc_proj_info = G_get_projinfo();
+        loc_proj_units = G_get_projunits();
+    }
+
+    if (loc_wind.proj != cellhd.proj) {
+        return FALSE;
+    }
+    else if (G_compare_projections(loc_proj_info, loc_proj_units,
+                                   proj_info, proj_units) != 1) {
+        return FALSE;
+    }
+    else {
+        return TRUE;
+    }
+}
+
+/* Does the projection of the current location match the dataset? */
+void wkt_projection_mismatch_report(const char *wkt)
+{
+    struct Key_Value *loc_proj_info = NULL, *loc_proj_units = NULL;
+    struct Key_Value *proj_info = NULL, *proj_units = NULL;
+    struct Cell_head cellhd;
+    struct Cell_head loc_wind;
+
+    G_get_default_window(&loc_wind);
+
+    /* Projection only required for checking so convert non-interactively */
+    if (GPJ_wkt_to_grass(&cellhd, &proj_info, &proj_units, wkt, 0) < 0)
+        G_warning(_("Unable to convert input map projection information to "
+                    "GRASS format for checking"));
+
+    /* fetch LOCATION PROJ info */
+    if (loc_wind.proj != PROJECTION_XY) {
+        loc_proj_info = G_get_projinfo();
+        loc_proj_units = G_get_projunits();
+    }
+    int err = G_compare_projections(loc_proj_info, loc_proj_units,
+                                    proj_info, proj_units);
+
+    projection_mismatch_report(cellhd, loc_wind, loc_proj_info,
+                               loc_proj_units, proj_info, proj_units, err);
+}
+
+/* caller should free the returned string */
+char *location_projection_as_wkt(int prettify)
+{
+    struct Key_Value *proj_info = G_get_projinfo();
+    struct Key_Value *proj_units = G_get_projunits();
+    char *proj_wkt = GPJ_grass_to_wkt(proj_info, proj_units, FALSE, prettify);
+
+    G_free_key_value(proj_info);
+    G_free_key_value(proj_units);
+    return proj_wkt;
+}
diff --git a/vector/v.in.pdal/projection.h b/vector/v.in.pdal/projection.h
new file mode 100644
index 0000000..5024383
--- /dev/null
+++ b/vector/v.in.pdal/projection.h
@@ -0,0 +1,35 @@
+
+/****************************************************************************
+ *
+ * MODULE:       v.in.lidar
+ * AUTHOR(S):    Vaclav Petras
+ * PURPOSE:      projection related functions
+ * COPYRIGHT:    (C) 2015 by the GRASS Development Team
+ *
+ *               This program is free software under the GNU General Public
+ *               License (>=v2). Read the COPYING file that comes with GRASS
+ *               for details.
+ *
+ *****************************************************************************/
+
+
+#ifndef PROJECTION_CHECKS_H
+#define PROJECTION_CHECKS_H
+
+void projection_mismatch_report(struct Cell_head cellhd,
+                                struct Cell_head loc_wind,
+                                struct Key_Value *loc_proj_info,
+                                struct Key_Value *loc_proj_units,
+                                struct Key_Value *proj_info,
+                                struct Key_Value *proj_units, int err);
+
+void projection_check_wkt(struct Cell_head cellhd,
+                          struct Cell_head loc_wind,
+                          const char *projstr, int override,
+                          int return_value, int verbose);
+
+int is_wkt_projection_same_as_loc(const char *wkt);
+void wkt_projection_mismatch_report(const char *wkt);
+char *location_projection_as_wkt(int prettify);
+
+#endif /* PROJECTION_CHECKS_H */
diff --git a/vector/v.in.pdal/testsuite/basic_test.py b/vector/v.in.pdal/testsuite/basic_test.py
new file mode 100644
index 0000000..0aa765a
--- /dev/null
+++ b/vector/v.in.pdal/testsuite/basic_test.py
@@ -0,0 +1,71 @@
+"""
+Name:      basic_test
+Purpose:   v.in.pdal basic functionality test
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class BasicTest(TestCase):
+    """Test case for watershed module
+
+    This tests expects v.random and v.out.lidar to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    vector_generated = 'vinlidar_basic_generated'
+    vector_points = 'vinlidar_basic_original'
+    imported_points = 'vinlidar_basic_imported'
+    las_file = 'vinlidar_basic_points.las'
+    npoints = 300
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.random', flags='zb', output=cls.vector_generated,
+            npoints=cls.npoints, zmin=200, zmax=500, seed=100)
+        cls.runModule('v.category', input=cls.vector_generated,
+            output=cls.vector_points, option='del', cat=-1)
+        cls.runModule('v.out.lidar', input=cls.vector_points,
+            output=cls.las_file)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=(cls.vector_points, cls.vector_generated))
+        if os.path.isfile(cls.las_file):
+            os.remove(cls.las_file)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the import
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_same_data(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.in.pdal', input=self.las_file, flags='c',
+            output=self.imported_points)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorEqualsVector(
+            actual=self.imported_points,
+            reference=self.vector_points,
+            digits=2, precision=.01)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.pdal/testsuite/filter_test.py b/vector/v.in.pdal/testsuite/filter_test.py
new file mode 100644
index 0000000..f47a3e8
--- /dev/null
+++ b/vector/v.in.pdal/testsuite/filter_test.py
@@ -0,0 +1,208 @@
+"""
+Name:      filter_test
+Purpose:   v.in.pdal test if various filters and selections
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+POINTS = """\
+17.46938776,18.67346939,143,1,1,2
+20.93877551,17.44897959,125,1,1,2
+18.89795918,14.18367347,130,1,1,3
+15.91836735,10.67346939,126,1,1,3
+21.26530612,11.04081633,128,1,2,3
+22.24489796,13.89795918,123,2,2,3
+23.79591837,17.12244898,151,1,2,3
+17.2244898,16.34693878,124,2,2,4
+17.14285714,14.10204082,134,1,3,4
+19.87755102,11.81632653,146,2,3,4
+18.48979592,11.48979592,140.6,2,3,4
+21.26530612,15.73469388,147,3,3,5
+21.18367347,19.32653061,138,1,3,5
+23.91836735,18.83673469,144,2,3,5
+23.51020408,13.65306122,143,3,3,5
+23.55102041,11.32653061,123,1,4,5
+18.41009273,14.51618034,140.4,2,4,5
+22.13996161,17.2278263,147,3,4,5
+21.41013052,11.05432488,132,4,4,5
+"""
+
+
+class FilterTest(TestCase):
+    """Test case for filter and selection options
+
+    This tests expects v.random and v.out.lidar to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    vector_points = 'vinlidar_filters_original'
+    imported_points = 'vinlidar_filters_imported'
+    las_file = 'vinlidar_filters_points.las'
+    npoints = 300
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.in.ascii', input='-', stdin_=POINTS,
+                      flags='z', z=3, cat=0, separator='comma',
+                      output=cls.vector_points,
+                      columns="x double precision, y double precision,"
+                              " z double precision, return_n integer,"
+                              " n_returns integer, class_n integer")
+        cls.runModule('v.out.lidar',
+                      input=cls.vector_points, layer=1,
+                      output=cls.las_file,
+                      return_column='return_n',
+                      n_returns_column='n_returns',
+                      class_column='class_n')
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=cls.vector_points)
+        if os.path.isfile(cls.las_file):
+            os.remove(cls.las_file)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the import
+
+        This is executed after each test run.
+        """
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_no_filter(self):
+        """Test to see if the standard outputs are created
+
+        This shows if the inpute data are as expected.
+        """
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=19))
+
+    def return_filter(self, name, npoints):
+        """Mid return filter test"""
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points,
+            return_filter=name)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_first_return_filter(self):
+        """First return filter test"""
+        self.return_filter('first', 9)
+
+    def test_mid_return_filter(self):
+        """Mid return filter test"""
+        self.return_filter('mid', 5)
+
+    def test_last_return_filter(self):
+        """Last return filter test"""
+        self.return_filter('last', 5)
+
+    def class_filter(self, class_n, npoints):
+        """Actual code for testing class filter"""
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points,
+            class_filter=class_n)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_class_2_filter(self):
+        """Test to filter classes"""
+        self.class_filter(2, 2)
+
+    def test_class_3_filter(self):
+        """Test to filter classes"""
+        self.class_filter(3, 5)
+
+    def test_class_4_filter(self):
+        """Test to filter classes"""
+        self.class_filter(4, 4)
+
+    def test_class_5_filter(self):
+        """Test to filter classes"""
+        self.class_filter(5, 8)
+
+    def return_and_class_filter(self, return_name, class_n, npoints):
+        """Return and class filter combined test code"""
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points,
+            return_filter=return_name, class_filter=class_n)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_first_return_and_class_filter(self):
+        """Combined test for return and class"""
+        self.return_and_class_filter('first', 2, 2)
+
+    def test_last_return_and_class_filter(self):
+        """Combined test for return and class"""
+        self.return_and_class_filter('last', 5, 3)
+
+    def zrange_filter(self, zrange, npoints):
+        """Actual code for zrange option test"""
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points,
+            zrange=zrange)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=npoints))
+
+    def test_zrange_filter(self):
+        """Test zrange option"""
+        self.zrange_filter((130.1, 139.9), 3)
+
+    def test_non_int_zrange_filter(self):
+        """Test zrange option with float number
+
+        One test point has z right under and one other right above the min.
+        """
+        self.zrange_filter((140.5, 900), 8)
+
+    def test_zrange_and_class_filter(self):
+        """zrange and class_filter option combined test"""
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points,
+            zrange=(141, 900), class_filter=5)
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=4))
+
+    def test_zrange_and_return_filter(self):
+        """zrange and class_filter option combined test"""
+        self.assertModule('v.in.pdal', input=self.las_file,
+            output=self.imported_points,
+            zrange=(141, 900), return_filter='last')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorFitsTopoInfo(
+            vector=self.imported_points,
+            reference=dict(points=2))
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.in.pdal/v.in.pdal.html b/vector/v.in.pdal/v.in.pdal.html
new file mode 100644
index 0000000..321dd8d
--- /dev/null
+++ b/vector/v.in.pdal/v.in.pdal.html
@@ -0,0 +1,61 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.in.pdal</em> supports the following PDAL filters:
+
+<ul>
+<li>groud detection with Point Cloud Library (PCL) Progressive Morphological Filter (Zhang 2003)
+    (<a href="http://www.pdal.io/stages/filters.ground.html">filters.ground</a>)
+<li><a href="http://www.pdal.io/stages/filters.height.html">filters.height</a>
+    (requires PCL)
+</ul>
+
+<em>v.in.pdal</em> supports the following filters natively:
+
+<ul>
+<li>2D region filter
+<li>Z coordinates filter
+<li>return filter
+<li>class filter
+</ul>
+
+<h2>EXAMPLES</h2>
+
+Import only XYZ coordinates of points, limit the import to the current
+computational region and reproject to the Location projection during
+the import:
+<div class="code"><pre>
+v.in.pdal input=points.las output=points -c -r -w
+</pre></div>
+
+<h2>SEE ALSO</h2>
+
+<em>
+<a href="r.in.lidar.html">r.in.lidar</a>,
+<a href="r3.in.lidar.html">r3.in.lidar</a>,
+<a href="g.region.html">g.region</a>,
+<a href="v.vect.stats.html">v.vect.stats</a>
+<a href="v.in.ogr.html">v.in.ogr</a>,
+</em>
+
+<h2>REFERENCES</h2>
+
+<ul>
+<li>
+    V. Petras, A. Petrasova, J. Jeziorska, H. Mitasova (2016):
+    <em>Processing UAV and lidar point clouds in GRASS GIS</em>.
+    XXIII ISPRS Congress 2016
+    [<a href="http://www.int-arch-photogramm-remote-sens-spatial-inf-sci.net/XLI-B7/945/2016/">ISPRS Archives</a>,
+    <a href="https://www.researchgate.net/publication/304340172_Processing_UAV_and_lidar_point_clouds_in_GRASS_GIS">ResearchGate</a>]
+<li>Zhang, Keqi, et al.
+    <em>A progressive morphological filter for removing nonground
+    measurements from airborne LIDAR data.</em>
+    Geoscience and Remote Sensing,
+    IEEE Transactions on 41.4 (2003): 872-882.
+</ul>
+
+<h2>AUTHOR</h2>
+
+Vaclav Petras,
+<a href="http://geospatial.ncsu.edu/osgeorel/">NCSU GeoForAll Lab</a>
+
+<p><i>Last changed: $Date: 2016-08-23 04:00:20 +0200 (Tue, 23 Aug 2016) $</i>
diff --git a/vector/v.info/v.info.html b/vector/v.info/v.info.html
index 6a582c2..71d0b8e 100644
--- a/vector/v.info/v.info.html
+++ b/vector/v.info/v.info.html
@@ -128,10 +128,10 @@ bottom=0.000000
 
 <h2>PYTHON</h2>
 
-See <em><a href="http://grass.osgeo.org/grass70/manuals/libpython/">Python
+See <em><a href="http://grass.osgeo.org/grass72/manuals/libpython/">Python
 Scripting Library</a></em> for more info.
 <p>
-Note: The Python shell in the <em>wxGUI</em> can be used for entering the
+Note: The Python tab in the <em>wxGUI</em> can be used for entering the
 following code:
 <p>
 <div class="code"><pre>
@@ -156,4 +156,4 @@ Updated to GRASS 6 by Radim Blazek, ITC-Irst, Trento, Italy<br>
 Level 1 support by Markus Metz<br>
 Updated to GRASS 7 by Martin Landa, CTU in Prague, Czech Republic
 
-<p><i>Last changed: $Date: 2014-12-09 18:31:29 +0100 (Tue, 09 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-07-07 19:26:08 +0200 (Thu, 07 Jul 2016) $</i>
diff --git a/vector/v.kcv/v.kcv.html b/vector/v.kcv/v.kcv.html
index faa87b9..add1f2e 100644
--- a/vector/v.kcv/v.kcv.html
+++ b/vector/v.kcv/v.kcv.html
@@ -67,4 +67,4 @@ OGR support by Martin Landa (2009)<br>
 Speed-up by Jan Vandrol and Jan Ruzicka (2013)
 
 <p>
-<i>Last changed: $Date: 2014-11-28 17:25:40 +0100 (Fri, 28 Nov 2014) $</i>
+<i>Last changed: $Date: 2014-11-28 17:22:17 +0100 (Fri, 28 Nov 2014) $</i>
diff --git a/vector/v.kernel/main.c b/vector/v.kernel/main.c
index 15a858f..79497bf 100644
--- a/vector/v.kernel/main.c
+++ b/vector/v.kernel/main.c
@@ -736,7 +736,7 @@ double compute_all_net_distances(struct Map_info *In, struct Map_info *Net,
 		Vect_net_shortest_path_coor(Net, APoints->x[0], APoints->y[0],
 					    0.0, BPoints->x[0], BPoints->y[0],
 					    0.0, netmax, netmax, &dist, NULL,
-					    NULL, NULL, NULL, NULL, NULL);
+					    NULL, NULL, NULL, NULL, NULL, NULL);
 
 	    G_debug(3, "  SP: %f %f -> %f %f", APoints->x[0], APoints->y[0],
 		    BPoints->x[0], BPoints->y[0]);
@@ -821,9 +821,9 @@ void compute_net_distance(double x, double y, struct Map_info *In,
 	G_debug(3, "  SP: %f %f -> %f %f", x, y, PointsList->box[i].E, PointsList->box[i].N);
 	/*ret = Vect_net_shortest_path_coor(Net, x, y, 0.0, Points->x[0], */
 	/*Points->y[0], 0.0, netmax, netmax, */
-	/*&dist, NULL, NULL, NULL, NULL, NULL, */
+	/*&dist, NULL, NULL, NULL, NULL, NULL, NULL, */
 	/*NULL); */
-	ret = Vect_net_shortest_path_coor2(Net,
+	ret = Vect_net_shortest_path_coor(Net,
 					   PointsList->box[i].E,
 					   PointsList->box[i].N, 0.0,
 					   x, y, 0.0, netmax, 1.0,
diff --git a/vector/v.kernel/v.kernel.html b/vector/v.kernel/v.kernel.html
index 8ee1a53..54bacc2 100644
--- a/vector/v.kernel/v.kernel.html
+++ b/vector/v.kernel/v.kernel.html
@@ -55,4 +55,4 @@ Stefano Menegon, <a href="http://mpa.itc.it/">ITC-irst</a>, Trento, Italy<br>
 Radim Blazek (additional kernel density functions and network part)
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/vector/v.label.sa/Makefile b/vector/v.label.sa/Makefile
deleted file mode 100644
index a7e17fe..0000000
--- a/vector/v.label.sa/Makefile
+++ /dev/null
@@ -1,14 +0,0 @@
-
-MODULE_TOPDIR = ../..
-
-PGM = v.label.sa
-
-LIBES = $(DISPLAYLIB) $(DIG2LIB) $(GRAPHLIB) $(VECTORLIB) $(DBMILIB) $(GISLIB) $(FTLIB)
-DEPENDENCIES= $(DISPLAYDEP) $(DIG2DEP) $(GRAPHDEP) $(VECTORDEP) $(DBMIDEP) $(GISDEP)
-EXTRA_INC = $(VECT_INC) $(FTINC)
-EXTRA_CFLAGS = $(VECT_CFLAGS)
-
-include $(MODULE_TOPDIR)/include/Make/Module.make
-
-default: cmd
-
diff --git a/vector/v.label.sa/annealing.c b/vector/v.label.sa/annealing.c
deleted file mode 100644
index daf3bbe..0000000
--- a/vector/v.label.sa/annealing.c
+++ /dev/null
@@ -1,219 +0,0 @@
-/* ****************************************************************************
- * FILE:         annealing.c
- * MODULE:       v.labels.sa
- * AUTHOR(S):    Wolf Bergenheim
- * PURPOSE:      This file contains functions which have to do with the
- annealing part of the algorithm.
- * COPYRIGHT:    (C) 2007 by the GRASS Development Team
- *
- *               This program is free software under the GNU General Public
- *               License (>=v2). Read the file COPYING that comes with GRASS
- *               for details.
- *
- *****************************************************************************/
-
-#include "labels.h"
-#ifndef M_E
-
-/**
- * This is simply Euler's number
- */
-# define M_E 2.7182818284590452353602874713526625L
-#endif
-
-/**
- * How many times to decrease the Temperature T.
- */
-#define TEMP_DECS 50
-
-static double calc_label_overlap(label_t * label, int cc, int nc);
-static void do_label_overlap(label_t * label, int cc, int nc);
-
-/**
- * This is just a variable used to show statistics in the end.
- */
-static unsigned int overlaps_created = 0;
-
-/**
- * This is just a variable used to show statistics in the end.
- */
-static unsigned int overlaps_removed = 0;
-
-/**
- * This funxtion does the actual sumulated annealing process. Each round 30 x
- * n (the number of labels) a label is picked at random, and placed in a random
- * new position. Then the dE is calculated, and if dE is > 0 the new position is
- * reversed with the probablility 1 - e^(-dE / T).
- @param labels The array of all labels.
- @param n_labels The size of the labels array.
- @params The commandline parameters.
- */
-void simulate_annealing(label_t * labels, int n_labels, struct params *p)
-{
-    /* The temperature of the system */
-    double T;
-
-    /* The change in energy */
-    double dE;
-
-    T = -1.0 / log(1.0 / 3.0);
-    unsigned int t, tot_better = 0, tot_worse = 0, tot_ign = 0;
-
-    fprintf(stderr, "Optimizing label positions: ...");
-    for (t = 0; t < TEMP_DECS; t++) {
-	int i;
-	unsigned int successes = 0, consec_successes = 0;
-
-	for (i = 0; i < (n_labels * 30); i++) {
-	    int l, c, cc, r;
-	    label_t *lp;
-
-	    /* pick a random label */
-	    r = rand();
-	    l = (int)((double)(n_labels) * (r / (RAND_MAX + 1.0)));
-	    lp = &labels[l];
-	    /* skip labels without sufficient number of candidates */
-	    if (lp->n_candidates < 2)
-		continue;
-
-	    cc = lp->current_candidate;
-	    /*and a random new candidate place */
-	    c = (int)((double)(lp->n_candidates) *
-		      (rand() / (RAND_MAX + 1.0)));
-	    if (c == cc) {
-		if (c == 0)
-		    c++;
-		else
-		    c--;
-	    }
-	    /* calc dE */
-	    dE = lp->candidates[c].score - lp->candidates[cc].score;
-	    dE += calc_label_overlap(lp, cc, c);
-
-	    /* if dE < 0 accept */
-	    if (dE < 0.0) {
-		lp->current_score = lp->candidates[c].score;
-		do_label_overlap(lp, cc, c);
-		lp->current_candidate = c;
-		successes++;
-		consec_successes++;
-		tot_better++;
-	    }
-	    /* else apply with probability p=e^(-dE/T) */
-	    else {
-		double p, r;
-
-		p = pow(M_E, -dE / T);
-		r = (double)rand() / RAND_MAX;
-		if (r <= p) {
-		    do_label_overlap(lp, cc, c);
-		    lp->current_score += lp->candidates[c].score;
-		    lp->current_candidate = c;
-		    successes++;
-		    consec_successes++;
-		    tot_worse++;
-		}
-		else {
-		    tot_ign++;
-		    consec_successes = 0;
-		}
-	    }
-	    /* decrease immediately */
-	    if (consec_successes > (5 * n_labels)) {
-		consec_successes = 0;
-		break;
-	    }
-	}
-	G_percent(t, TEMP_DECS, 1);
-	/* we have found an optimal solution */
-	if (successes == 0) {
-	    break;
-	}
-	T -= 0.1 * T;
-    }
-    G_percent(TEMP_DECS, TEMP_DECS, 1);
-}
-
-/**
- * This function calculates the change in E (dE) if the given label would
- * be moved to the new place. Contrary to the original algorithm this function
- * requires twice as much energy to overlap two labels then is released by
- * resolving an overlap. I don't have and scientific fact but it seems to
- * improve the result.
- * @param label The label in question
- * @param cc The current candidate
- * @param nc The new potential candidate location
- * @return The dE value.
- */
-static double calc_label_overlap(label_t * label, int cc, int nc)
-{
-    int i;
-    double dE = 0.0;
-
-    /* calculate the overlaps removed */
-    for (i = 0; i < label->candidates[cc].n_intersections; i++) {
-	label_t *ol;
-	int oc;
-
-	ol = label->candidates[cc].intersections[i].label;
-	oc = label->candidates[cc].intersections[i].candidate;
-	if (ol->current_candidate == oc) {
-	    dE -= LABEL_OVERLAP_WEIGHT;
-	}
-    }
-
-    /* calculate the overlaps created */
-    for (i = 0; i < label->candidates[nc].n_intersections; i++) {
-	label_t *ol;
-	int oc;
-
-	ol = label->candidates[nc].intersections[i].label;
-	oc = label->candidates[nc].intersections[i].candidate;
-	if (ol->current_candidate == oc) {
-	    dE += LABEL_OVERLAP_WEIGHT;
-	}
-    }
-
-    return dE;
-}
-
-/**
- * This function commits the label change to the new location.
- * @param label The label to move
- * @param cc The current candidate
- * @param nc The new potential candidate location
- */
-static void do_label_overlap(label_t * label, int cc, int nc)
-{
-    int i;
-
-    /* remove the current label overlaps */
-    for (i = 0; i < label->candidates[cc].n_intersections; i++) {
-	label_t *ol;
-	int oc;
-
-	ol = label->candidates[cc].intersections[i].label;
-	oc = label->candidates[cc].intersections[i].candidate;
-	if (ol->current_candidate == oc) {
-	    ol->current_score -= LABEL_OVERLAP_WEIGHT;
-	    label->current_score -= LABEL_OVERLAP_WEIGHT;
-	    /* ol->candidates[oc].score -= LABEL_OVERLAP_WEIGHT; */
-	    overlaps_removed++;
-	}
-    }
-
-    /* create new overlaps */
-    for (i = 0; i < label->candidates[nc].n_intersections; i++) {
-	label_t *ol;
-	int oc;
-
-	ol = label->candidates[nc].intersections[i].label;
-	oc = label->candidates[nc].intersections[i].candidate;
-	if (ol->current_candidate == oc) {
-	    ol->current_score += LABEL_OVERLAP_WEIGHT;
-	    label->current_score += LABEL_OVERLAP_WEIGHT;
-	    /* ol->candidates[oc]->score += 40; */
-	    overlaps_created++;
-	}
-    }
-}
diff --git a/vector/v.label.sa/labels.c b/vector/v.label.sa/labels.c
deleted file mode 100644
index 9a786c7..0000000
--- a/vector/v.label.sa/labels.c
+++ /dev/null
@@ -1,1284 +0,0 @@
-
-/**
- * @file labels.c
- * This file contains functions for label and label candidate manipulation
-*/
-#include "labels.h"
-static int label_skyline(FT_Face face, const char *charset, label_t * label);
-static struct line_pnts *box_trans_rot(struct bound_box * bb, label_point_t * p,
-				       double angle);
-static void label_point_candidates(label_t * label);
-static void label_line_candidates(label_t * label);
-static int candidate_compare(const void *a, const void *b);
-static double label_avedist(label_t * label, label_candidate_t * candidate);
-static double label_flatness(label_t * label, label_candidate_t * candidate);
-static double label_pointover(label_t * label, label_candidate_t * candidate);
-static double label_lineover(label_t * label, label_candidate_t * candidate,
-			     int linetype);
-static double min_dist_2_lines(struct line_pnts *skyline,
-			       struct line_pnts *swathline,
-			       label_point_t * p);
-static int box_overlap(struct bound_box * a, struct bound_box * b);
-static int box_overlap2(struct line_pnts *a, struct line_pnts *b);
-
-/**
- * The font size in map units. A global variable because I'm lazy :P
- */
-static double font_size = 0.0;
-
-/**
- * The ideal distance, that is the distance between the base line of a label and a line feature.
- */
-static double ideal_distance;
-
-/**The vector Map structure*/
-static struct Map_info Map;
-
-/**
- * The size of the buffer around features where labels should never be
- */
-static double buffer = 0.0;
-
-label_t *labels_init(struct params *p, int *n_labels)
-{
-    label_t *labels;
-    int legal_types, layer, i = 0, error, sql_len;
-    size_t label_sz;
-    struct field_info *fi;
-    dbDriver *driver;
-    FT_Library library;
-    FT_Face face;
-    struct GFONT_CAP *font_cap;
-
-    fprintf(stderr, "Initialising labels...");
-    legal_types = Vect_option_to_types(p->type);
-
-    /* open vector for read only */
-    if (Vect_open_old(&Map, p->map->answer, "") < 0)
-	G_fatal_error(_("Unable to open vector map <%s>"), p->map->answer);
-
-    label_sz = Vect_get_num_primitives(&Map, legal_types);
-
-    G_debug(1, "Need to allocate %lu bytes of memory",
-	    sizeof(label_t) * label_sz);
-    labels = (label_t *) G_malloc(sizeof(label_t) * label_sz);
-    G_debug(1, "labels=%p", labels);
-
-    if (labels == NULL)
-	G_fatal_error(_("Cannot allocate %lu bytes of memory"),
-		      sizeof(label_t) * label_sz);
-
-    /* open database */
-    layer = atoi(p->layer->answer);
-    fi = Vect_get_field(&Map, layer);
-    if (fi == NULL)
-	G_fatal_error(_("Unable to get layer info for vector map"));
-    driver = db_start_driver_open_database(fi->driver, fi->database);
-    if (driver == NULL)
-	G_fatal_error(_("Unable to open database <%s> by driver <%s>"),
-		      fi->database, fi->driver);
-    db_set_error_handler_driver(driver);
-
-    sql_len = strlen(p->column->answer) + strlen(fi->table) +
-	strlen(fi->key) + 30;
-
-    /* initialize FT 2 library */
-    if (FT_Init_FreeType(&library))
-	G_fatal_error(_("Unable to initialise FreeType"));
-    font_cap = find_font_from_freetypecap(p->font->answer);
-    if (font_cap == NULL)
-	G_fatal_error(_("Unable to find font '%s'\n"), p->font->answer);
-    if (font_cap->type != GFONT_FREETYPE)
-	G_fatal_error(_("Font '%s' is not a FreeType font\n"),
-		      p->font->answer);
-    error = FT_New_Face(library, font_cap->path, 0, &face);
-    if (error == FT_Err_Unknown_File_Format)
-	G_fatal_error(_("Font file format is not supported by FreeType"));
-    else if (error)
-	G_fatal_error(_("Font file can not be loaded"));
-    p->font->answer = G_store(font_cap->name);
-    free_fontcap(font_cap);
-
-    font_size = atof(p->size->answer);
-    buffer = atof(p->isize->answer);
-
-    /* use 1 point = 1 map unit */
-    if (FT_Set_Char_Size(face, (int)((font_size) * 64.0), 0, 100, 100))
-	G_fatal_error(_("Unable to set font size"));
-
-    /* start reading the map */
-    while (1) {
-	struct line_pnts *Points;
-	struct line_cats *Cats;
-
-	dbCursor cursor;
-	dbTable *table;
-	dbColumn *column;
-	dbString query, value;
-
-	int type, cat, more, nrows;
-	char *sql;
-
-	if (i == label_sz) {	/* we need more memory */
-	    label_sz += 100;
-	    G_debug(1, "Need to resize %p to %lu bytes of memory",
-		    (void *)labels, sizeof(label_t) * label_sz);
-	    labels = G_realloc(labels, sizeof(label_t) * label_sz);
-	    if (labels == NULL) {
-		G_fatal_error(_("Cannot allocate more memory"));
-	    }
-	}
-
-	G_percent(i, label_sz, 10);
-
-	memset(&labels[i], 0, sizeof(label_t));
-
-	Points = Vect_new_line_struct();
-	Cats = Vect_new_cats_struct();
-
-	type = Vect_read_next_line(&Map, Points, Cats);
-	if (type == -1)
-	    G_fatal_error(_("Unable to read vector map"));
-	if (type == -2)
-	    break;		/* EOF */
-	if (!(legal_types & type))
-	    continue;
-
-	Vect_cat_get(Cats, layer, &cat);
-	if (cat < 0)
-	    continue;		/* no cat for this field */
-
-	sql = (char *) G_malloc(sql_len);
-	/* Read label from database */
-	sprintf(sql, "select %s from %s where %s = %d", p->column->answer,
-		fi->table, fi->key, cat);
-	G_debug(3, "SQL: %s", sql);
-	db_init_string(&query);
-	db_set_string(&query, sql);
-	G_free(sql);
-
-	if (db_open_select_cursor(driver, &query, &cursor, DB_SEQUENTIAL) !=
-	    DB_OK)
-	    G_fatal_error(_("Unable to select attributes"));
-	db_free_string(&query);
-	nrows = db_get_num_rows(&cursor);
-	if (nrows < 1) {
-	    G_warning(_("No record for category %d in table <%s>"), cat,
-		      fi->table);
-	    continue;
-	}
-
-	if (db_fetch(&cursor, DB_NEXT, &more) != DB_OK || !more)
-	    continue;
-
-	table = db_get_cursor_table(&cursor);
-	column = db_get_table_column(table, 0);	/* first column */
-
-	db_init_string(&value);
-	db_convert_column_value_to_string(column, &value);
-	db_close_cursor(&cursor);
-
-	G_debug(3, "Label: %s", db_get_string(&value));
-
-	/* ignore empty strings */
-	if (strlen(db_get_string(&value)) == 0)
-	    continue;
-
-	labels[i].text = G_store(db_get_string(&value));
-	labels[i].cat = cat;
-	labels[i].type = type;
-	labels[i].shape = Points;
-	G_debug(3, "Label [%d]: %s, cat=%d, type=0x%02x", i, labels[i].text,
-		labels[i].cat, labels[i].type);
-
-	/* make a skyline for the text */
-	label_skyline(face, p->charset->answer, &labels[i]);
-
-	i++;
-
-	db_free_string(&value);
-	/*              Vect_destroy_line_struct(Points); */
-	Vect_destroy_cats_struct(Cats);
-    }
-
-    {
-	FT_UInt glyph_index;
-
-	glyph_index = FT_Get_Char_Index(face, 'X');
-	if (FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT))
-	    G_fatal_error("Cannot determine ideal height");
-	ideal_distance = 0.3 * face->glyph->metrics.height / 64.0;
-    }
-
-    FT_Done_Face(face);
-    FT_Done_FreeType(library);
-    db_close_database_shutdown_driver(driver);
-    /*      Vect_close(&Map); */
-    G_percent(label_sz, label_sz, 10);
-
-    *n_labels = i;
-    return labels;
-
-}
-
-/**
- * This function calculates the skyline of a label and stores it in the label structure.
- * @param face The openned FT library face to use.
- * @param The charset to use
- * @param The label to which we want to create a skyline
- */
-static int label_skyline(FT_Face face, const char *charset, label_t * label)
-{
-    int i, len;
-    double advance = 0.0;
-
-    len = strlen(label->text);
-    label->skyline = Vect_new_line_struct();
-    G_debug(3, "Creating skyline for '%s'", label->text);
-
-    for (i = 0; i < len; i++) {
-	FT_UInt glyph_index;
-
-	glyph_index = FT_Get_Char_Index(face, label->text[i]);
-	if (FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT))
-	    G_warning(_("Cannot load glyph for '%c'"), label->text[i]);
-
-	/* insert the 4 corners of the bounding box */
-	{
-	    label_point_t top_left, top_right, bottom_right, bottom_left;
-
-	    G_debug(5,
-		    "horiBearingX=%ld horiBearingY=%ld width=%ld height=%ld advance=%ld",
-		    face->glyph->metrics.horiBearingX,
-		    face->glyph->metrics.horiBearingY,
-		    face->glyph->metrics.width, face->glyph->metrics.height,
-		    face->glyph->metrics.horiAdvance);
-
-	    top_left.x = advance;
-	    top_left.y = face->glyph->metrics.horiBearingY / 64.0;
-
-	    top_right.x = advance + face->glyph->metrics.horiAdvance / 64.0;
-	    top_right.y = face->glyph->metrics.horiBearingY / 64.0;
-
-	    bottom_right.x =
-		advance + face->glyph->metrics.horiAdvance / 64.0;
-	    bottom_right.y =
-		(face->glyph->metrics.horiBearingY -
-		 face->glyph->metrics.height) / 64.0;
-
-	    bottom_left.x = advance;
-	    bottom_left.y = (face->glyph->metrics.horiBearingY -
-			     face->glyph->metrics.height) / 64.0;
-
-	    if (i == 0) {
-		G_debug(5, "Character(%d) '%c': Adding UL point (%lf,%lf)",
-			i, label->text[i], top_left.x, top_left.y);
-		Vect_append_point(label->skyline, top_left.x, top_left.y,
-				  0.0);
-		G_debug(5, "Character(%d) '%c': Adding UR point (%lf,%lf)", i,
-			label->text[i], top_right.x, top_right.y);
-		Vect_append_point(label->skyline, top_right.x, top_right.y,
-				  0.0);
-
-		G_debug(5, "Character(%d) '%c': Adding LR point (%lf,%lf)",
-			i, label->text[i], bottom_right.x, bottom_right.y);
-		Vect_append_point(label->skyline,
-				  bottom_right.x, bottom_right.y, 0.0);
-
-		G_debug(5, "Character(%d) '%c': Adding LL point (%lf,%lf)",
-			i, label->text[i], bottom_left.x, bottom_left.y);
-		Vect_append_point(label->skyline,
-				  bottom_left.x, bottom_left.y, 0.0);
-		Vect_append_point(label->skyline, top_left.x, top_left.y,
-				  0.0);
-	    }
-	    else {
-		G_debug(5, "Character(%d) '%c': Adding UL point (%lf,%lf)",
-			i, label->text[i], top_left.x, top_left.y);
-		Vect_line_insert_point(label->skyline, i * 2,
-				       top_left.x, top_left.y, 0.0);
-		G_debug(5, "Character(%d) '%c': Adding UR point (%lf,%lf)",
-			i, label->text[i], top_right.x, top_right.y);
-		Vect_line_insert_point(label->skyline, i * 2 + 1,
-				       top_right.x, top_right.y, 0.0);
-
-		G_debug(5, "Character(%d) '%c': Adding LR point (%lf,%lf)",
-			i, label->text[i], bottom_right.x, bottom_right.y);
-		Vect_line_insert_point(label->skyline, i * 2 + 2,
-				       bottom_right.x, bottom_right.y, 0.0);
-
-		G_debug(5, "Character(%d) '%c': Adding LL point (%lf,%lf)",
-			i, label->text[i], bottom_left.x, bottom_left.y);
-		Vect_line_insert_point(label->skyline, i * 2 + 3,
-				       bottom_left.x, bottom_left.y, 0.0);
-	    }
-
-	    advance += face->glyph->metrics.horiAdvance / 64.0;
-	    G_debug(5, "Total advance  %lf", advance);
-	}
-    }
-    /* remove duplicate points */
-    Vect_line_prune(label->skyline);
-    /* get the boundingbox */
-    Vect_line_box(label->skyline, &label->bb);
-    return 1;
-}
-
-/**
- * This function generates label candidates for each label.
- * @param labels The array of labels to generate candidate places for.
- * @param n_labels The size of the array.
- */
-void label_candidates(label_t * labels, int n_labels)
-{
-    int i;
-
-    /* generate candidate location for each label based on feture type
-     * see chapter 5 of MERL-TR-96-04 */
-    fprintf(stderr, "Generating label candidates: ...");
-    for (i = 0; i < n_labels; i++) {
-	G_percent(i, n_labels - 1, 1);
-	switch (labels[i].type) {
-	case GV_POINT:
-	    G_debug(3, "Line (%d): %s", i, labels[i].text);
-	    label_point_candidates(&labels[i]);
-	    break;
-	case GV_LINE:
-	    G_debug(3, "Line (%d): %s", i, labels[i].text);
-	    label_line_candidates(&labels[i]);
-	    break;
-	    /*                case GV_AREA:
-	     * label_area_candidates(labels[i]);
-	     * break; */
-	default:
-	    /* this should never be reached */
-	    break;
-	}
-    }
-    Vect_close(&Map);
-    return;
-}
-
-/**
- * This function generates candidates for point features.
- * @param label. The point label to which we want to create label candidates.
- */
-static void label_point_candidates(label_t * label)
-{
-    double height, width;
-    int i;
-    label_candidate_t *candidates;
-
-    candidates = G_calloc(19, sizeof(label_candidate_t));
-    if (candidates == NULL) {
-	G_fatal_error("Cannot allocate memory.");
-    }
-
-    height = label->bb.N - label->bb.S;
-    width = label->bb.E - label->bb.W;
-    /* 2 upper left-hand side labels are placed so that they are
-     * 1/3 and 2/3 of label height above point, and right aligned */
-    candidates[0].point.x = label->shape->x[0] - width - buffer * 0.75;
-    candidates[0].point.y = label->shape->y[0] + (5.0 / 9.0) * height;
-    candidates[0].score = 0.63;
-
-    candidates[1].point.x = label->shape->x[0] - width - buffer * 0.85;
-    candidates[1].point.y = label->shape->y[0] + (1.0 / 3.0) * height;
-    candidates[1].score = 0.44;
-    /* same height as label point */
-    candidates[2].point.x = label->shape->x[0] - width - buffer * 0.95;
-    candidates[2].point.y = label->shape->y[0];
-    candidates[2].score = 0.07;
-    /* 3 lower left-hand side labels are placed so that they are
-     * 1/3, 2/3 and 3/3 of label height below point, and right aligned */
-    candidates[3].point.x = label->shape->x[0] - width - buffer * 0.95;
-    candidates[3].point.y = label->shape->y[0] - (1.0 / 3.0) * height;
-    candidates[3].score = 0.10;
-
-    candidates[4].point.x = label->shape->x[0] - width - buffer * 0.95;
-    candidates[4].point.y = label->shape->y[0] - (5.0 / 9.0) * height;
-    candidates[4].score = 0.02;
-
-    candidates[5].point.x = label->shape->x[0] - width - buffer * 0.95;
-    candidates[5].point.y = label->shape->y[0] - height;
-    candidates[5].score = 0.37;
-
-    /* 2 upper right-hand side labels are placed so that they are
-     * 1/3 and 2/3 of label height above point*/
-    candidates[6].point.x = label->shape->x[0] + buffer * 0.85;
-    candidates[6].point.y = label->shape->y[0] + (5.0 / 9.0) * height;
-    candidates[6].score = 0.41;
-
-    candidates[7].point.x = label->shape->x[0] + buffer * 0.95;
-    candidates[7].point.y = label->shape->y[0] + (1.0 / 3.0) * height;
-    candidates[7].score = 0.33;
-    /* same height as label point */
-    candidates[8].point.x = label->shape->x[0] + buffer;
-    candidates[8].point.y = label->shape->y[0];
-    candidates[8].score = 0.00;
-    /* 4 lower left-hand side labels are placed so that they are
-     * 1/4, 2/4 3/4 and 4/4 of label height below point*/
-    candidates[9].point.x = label->shape->x[0] + buffer;
-    candidates[9].point.y = label->shape->y[0] - 0.25 * height;
-    candidates[9].score = 0.04;
-
-    candidates[10].point.x = label->shape->x[0] + buffer;
-    candidates[10].point.y = label->shape->y[0] - 0.5 * height;
-    candidates[10].score = 0.3;
-
-    candidates[11].point.x = label->shape->x[0] + buffer;
-    candidates[11].point.y = label->shape->y[0] - 0.75 * height;
-    candidates[11].score = 0.12;
-
-    candidates[12].point.x = label->shape->x[0] + buffer;
-    candidates[12].point.y = label->shape->y[0] - height;
-    candidates[12].score = 0.59;
-
-    /* 3 labels above, centered, centered on left 1/3 and centered
-     * on right 1/3 of the label */
-    candidates[13].point.x = label->shape->x[0] - (1.0 / 3.0) * width;
-    candidates[13].point.y = label->shape->y[0] + fabs(label->bb.S) + buffer;
-    candidates[13].score = 0.70;
-
-    candidates[14].point.x = label->shape->x[0] - 0.5 * width;
-    candidates[14].point.y = label->shape->y[0] + fabs(label->bb.S) + buffer;
-    candidates[14].score = 0.89;
-
-    candidates[15].point.x = label->shape->x[0] - (2.0 / 3.0) * width;
-    candidates[15].point.y = label->shape->y[0] + fabs(label->bb.S) + buffer;
-    candidates[15].score = 0.74;
-
-    /* 3 labels below, centered, centered on left 1/3 and centered
-     * on right 1/3 of the label */
-    candidates[16].point.x = label->shape->x[0] - (1.0 / 3.0) * width;
-    candidates[16].point.y = label->shape->y[0] - height - buffer;
-    candidates[16].score = 0.74;
-
-    candidates[17].point.x = label->shape->x[0] - 0.5 * width;
-    candidates[17].point.y = label->shape->y[0] - height - buffer;
-    candidates[17].score = 0.89;
-
-    candidates[18].point.x = label->shape->x[0] - (2.0 / 3.0) * width;
-    candidates[18].point.y = label->shape->y[0] - height - buffer;
-    candidates[18].score = 1.0;
-
-    for (i = 0; i < 19; i++) {
-	candidates[i].score += 10.0 * label_pointover(label, &candidates[i]);
-	candidates[i].score += 15.0 * label_lineover(label, &candidates[i],
-						     GV_LINE);
-	G_debug(5, "calling label_lineover('%s', %d)", label->text, i);
-	candidates[i].score += 10.0 * label_lineover(label, &candidates[i],
-						     GV_BOUNDARY);
-	candidates[i].rotation = 0;
-    }
-
-    /* randomly choose one candidate to be the current */
-    label->current_candidate = (int)(19.0 * (rand() / (RAND_MAX + 1.0)));
-    label->candidates = candidates;
-    label->n_candidates = 19;
-}
-
-/**
- * This function generates label candidates for a line feature.
- * @param label The label for which to create the candidates.
- */
-static void label_line_candidates(label_t * label)
-{
-    double height, width, inc, length, pos;
-    label_candidate_t *above_candidates, *below_candidates, *candidates;
-    int i, n, n_c;
-
-    height = label->bb.N - label->bb.S;
-    width = label->bb.E - label->bb.W;
-    inc = width / 8.0;
-    length = Vect_line_length(label->shape);
-
-    n = (int)(length / inc);
-    if (n == 0) {
-	/* treat the line as a point feature */
-	struct line_pnts *tmp, *tmp_shape;
-	double x, y;
-
-	tmp = Vect_new_line_struct();
-	Vect_point_on_line(label->shape, length / 2.0, &x, &y,
-			   NULL, NULL, NULL);
-	Vect_append_point(tmp, x, y, 0);
-	tmp_shape = label->shape;
-	label->shape = tmp;
-
-	label_point_candidates(label);
-	label->shape = tmp_shape;
-	Vect_destroy_line_struct(tmp);
-
-	return;
-    }
-    above_candidates = G_calloc(n, sizeof(label_candidate_t));
-    below_candidates = G_calloc(n, sizeof(label_candidate_t));
-    if ((above_candidates == NULL) || (below_candidates == NULL)) {
-	G_fatal_error("Cannot allocate memory.");
-    }
-
-    /* find all candidate labels */
-    for (pos = width / 2.0, i = 0; pos < (length - 1.5 * width); pos += inc) {
-	label_point_t p1, p2, minimum_above_distance_p,
-	    minimum_below_distance_p;
-	int seg1, seg2, j;
-	struct line_pnts *above_skyline, *below_skyline, *baseline;
-	double above_distance = 0.0, below_distance = 0.0,
-	    minimum_above_distance = 0.0, minimum_below_distance = 0.0, angle;
-	double flatness, centerdness;
-
-	seg1 =
-	    Vect_point_on_line(label->shape, pos, &p1.x, &p1.y, NULL, NULL,
-			       NULL);
-	seg2 =
-	    Vect_point_on_line(label->shape, pos + width, &p2.x, &p2.y, NULL,
-			       NULL, NULL);
-
-	G_debug(1, "pos=%lf i=%d p1 at (%lf,%lf), p2 at (%lf,%lf)",
-		pos, i, p1.x, p1.y, p2.x, p2.y);
-
-	angle = atan2((p2.y - p1.y), (p2.x - p1.x));
-
-	if ((angle > M_PI / 2) || (angle < -M_PI / 2)) {
-	    /* turn label around 180 degrees if it would be upside down */
-	    double tmp;
-
-	    tmp = p1.x;
-	    p1.x = p2.x;
-	    p2.x = tmp;
-
-	    tmp = p1.y;
-	    p1.y = p2.y;
-	    p2.y = tmp;
-
-	    if (angle < 0)
-		angle += M_PI;
-	    else
-		angle -= M_PI;
-	}
-
-	/* find the maximum above_distance and below_distance from the swath
-	 * "diagonal" to determine maximum deviation from a straight line
-	 * create the swath lines at the same time.
-	 */
-	above_candidates[i].swathline = Vect_new_line_struct();
-	below_candidates[i].swathline = Vect_new_line_struct();
-	if ((above_candidates[i].swathline == NULL) ||
-	    (below_candidates[i].swathline == NULL))
-	    G_fatal_error("Cannot allocate memory!");
-	Vect_append_point(above_candidates[i].swathline, p1.x, p1.y, 0);
-	Vect_append_point(below_candidates[i].swathline, p1.x, p1.y, 0);
-
-	baseline = Vect_new_line_struct();
-	Vect_append_point(baseline, p1.x, p1.y, 0);
-	Vect_append_point(baseline, p2.x, p2.y, 0);
-
-	Vect_append_point(above_candidates[i].swathline, p1.x, p1.y, 0);
-	Vect_append_point(below_candidates[i].swathline, p1.x, p1.y, 0);
-
-	for (j = seg1 + 1; j < seg2; j++) {
-	    double x, y, d;
-
-	    Vect_line_distance(baseline, label->shape->x[j],
-			       label->shape->y[j], 0, 0,
-			       &x, &y, NULL, &d, NULL, NULL);
-	    if (label->shape->y[j] < y) {
-		/* swathline is beneath the "diagonal" */
-		if (d > below_distance) {
-		    below_distance = d;
-		}
-	    }
-	    else {
-		/* swatline is above or on the "diagonal" */
-		if (d > above_distance) {
-		    above_distance = d;
-		}
-	    }
-	    Vect_append_point(above_candidates[i].swathline,
-			      label->shape->x[j], label->shape->y[j], 0);
-	    Vect_append_point(below_candidates[i].swathline,
-			      label->shape->x[j], label->shape->y[j], 0);
-	}
-
-	Vect_append_point(above_candidates[i].swathline, p2.x, p2.y, 0);
-	Vect_append_point(below_candidates[i].swathline, p2.x, p2.y, 0);
-	Vect_destroy_line_struct(baseline);
-
-	if (above_distance == 0.0) {
-	    above_distance = height - label->bb.N;
-	}
-	if (below_distance == 0.0) {
-	    below_distance = height - label->bb.S;
-	}
-
-	/* place a skyline at above_distance above line, and
-	 * below_distance + height below line */
-	{
-	    label_point_t tp;
-
-	    tp.x = p1.x - above_distance * sin(angle);
-	    tp.y = p1.y + above_distance * cos(angle);
-	    above_skyline = skyline_trans_rot(label->skyline, &tp, angle);
-	    tp.x = p1.x + (below_distance + height) * sin(angle);
-	    tp.y = p1.y - (below_distance + height) * cos(angle);
-	    below_skyline = skyline_trans_rot(label->skyline, &tp, angle);
-	}
-	/* find minimum distance between swath line and skylines */
-	minimum_above_distance = min_dist_2_lines(above_skyline,
-						  above_candidates[i].
-						  swathline,
-						  &minimum_above_distance_p);
-	minimum_below_distance =
-	    min_dist_2_lines(below_skyline, below_candidates[i].swathline,
-			     &minimum_below_distance_p);
-
-	/* adjust skylines so that the minimum distance is equal to the ideal
-	 * distance (= 0.3 * glyph height of capital X) */
-	above_distance += ideal_distance - minimum_above_distance;
-	below_distance += ideal_distance - minimum_below_distance;
-
-	Vect_destroy_line_struct(above_skyline);
-	Vect_destroy_line_struct(below_skyline);
-
-	above_candidates[i].point.x = p1.x - above_distance * sin(angle);
-	above_candidates[i].point.y = p1.y + above_distance * cos(angle);
-
-	below_candidates[i].point.x =
-	    p1.x + (below_distance + height) * sin(angle);
-	below_candidates[i].point.y =
-	    p1.y - (below_distance + height) * cos(angle);
-
-	G_debug(1, "above at (%lf,%lf) below at (%lf,%lf)",
-		above_candidates[i].point.x, above_candidates[i].point.y,
-		below_candidates[i].point.x, below_candidates[i].point.y);
-
-	above_candidates[i].above = 1;
-	below_candidates[i].above = 0;
-	above_candidates[i].rotation = angle;
-	below_candidates[i].rotation = angle;
-
-	above_candidates[i].score = 0.0;
-	below_candidates[i].score = 0.0;
-	/* AveDist */
-	above_candidates[i].score +=
-	    label_avedist(label, &above_candidates[i]);
-	below_candidates[i].score +=
-	    label_avedist(label, &below_candidates[i]);
-
-	/* flatness */
-	flatness = label_flatness(label, &above_candidates[i]);
-	above_candidates[i].score += flatness;
-	flatness = label_flatness(label, &below_candidates[i]);
-	below_candidates[i].score += flatness;
-
-	/* centerdness */
-	centerdness = 3.0 * fabs(2.0 * pos / length - 1.0);
-	above_candidates[i].score += centerdness;
-	below_candidates[i].score += centerdness;
-
-	/* PointOver */
-	above_candidates[i].score += 10.0 *
-	    label_pointover(label, &above_candidates[i]);
-	below_candidates[i].score += 10.0 *
-	    label_pointover(label, &below_candidates[i]);
-
-	/* LineOver */
-	above_candidates[i].lineover = 15.0 *
-	    label_lineover(label, &above_candidates[i], GV_LINE);
-	above_candidates[i].score += above_candidates[i].lineover;
-
-	below_candidates[i].lineover = 15.0 *
-	    label_lineover(label, &below_candidates[i], GV_LINE);
-	below_candidates[i].score += below_candidates[i].lineover;
-
-	/* AreaOver */
-	above_candidates[i].score += 10.0 *
-	    label_lineover(label, &above_candidates[i], GV_BOUNDARY);
-	below_candidates[i].score += 10.0 *
-	    label_lineover(label, &below_candidates[i], GV_BOUNDARY);
-
-	/* aboveness */
-	below_candidates[i].score += 1.25;
-
-	i++;
-    }
-    n = i;
-
-    if (n == 0) {
-	/* treat the line as a point feature */
-	struct line_pnts *tmp, *tmp_shape;
-	double x, y;
-
-	tmp = Vect_new_line_struct();
-	Vect_point_on_line(label->shape, length / 2.0, &x, &y,
-			   NULL, NULL, NULL);
-	Vect_append_point(tmp, x, y, 0);
-	tmp_shape = label->shape;
-	label->shape = tmp;
-
-	label_point_candidates(label);
-	label->shape = tmp_shape;
-	Vect_destroy_line_struct(tmp);
-	return;
-    }
-
-    candidates = G_calloc(n * 2, sizeof(label_candidate_t));
-    for (i = 0; i < n; i++) {
-	memcpy(&candidates[i * 2], &above_candidates[i],
-	       sizeof(label_candidate_t));
-	memcpy(&candidates[i * 2 + 1], &below_candidates[i],
-	       sizeof(label_candidate_t));
-    }
-    G_free(above_candidates);
-    G_free(below_candidates);
-
-    n_c = n * 2;
-    /* pick the 32 best candidates */
-    qsort(candidates, n_c, sizeof(label_candidate_t), candidate_compare);
-
-    if (n_c > 32) {
-	label_candidate_t *tmp;
-
-	for (i = 32; i < n; i++) {
-	    Vect_destroy_line_struct(candidates[i].baseline);
-	    Vect_destroy_line_struct(candidates[i].swathline);
-	}
-
-	tmp = G_realloc(candidates, sizeof(label_candidate_t) * 32);
-	if (tmp != NULL) {
-	    candidates = tmp;
-	}
-	n_c = 32;
-    }
-    label->current_candidate =
-	(int)((double)(n_c) * (rand() / (RAND_MAX + 1.0)));
-    label->candidates = candidates;
-    label->n_candidates = n_c;
-}
-
-/**
- * This function compares two label candidates scores and determines which is better.
- * @param a Candidate A
- * @param b Candidate B
- * @return -1 if candidate a has a lower score then candidate b. = if the
- * scores are equal, and 1 if candidate a has a higher score then candidate b.
- */
-static int candidate_compare(const void *a, const void *b)
-{
-    const label_candidate_t *ca = a, *cb = b;
-
-    if (ca->score < cb->score) {
-	return -1;
-    }
-    else if (ca->score == cb->score) {
-	return 0;
-    }
-    else {
-	return 1;
-    }
-}
-
-struct line_pnts *skyline_trans_rot(struct line_pnts *skyline,
-				    label_point_t * p, double angle)
-{
-    int i;
-    struct line_pnts *Points;
-
-    Points = Vect_new_line_struct();
-
-    for (i = 0; i < skyline->n_points; i++) {
-	double x, y;
-
-	x = skyline->x[i] * cos(angle) - skyline->y[i] * sin(angle);
-	y = skyline->x[i] * sin(angle) + skyline->y[i] * cos(angle);
-	Vect_append_point(Points, x + p->x, y + p->y, 0);
-    }
-
-    return Points;
-}
-
-/**
- * This function rotates and translates the label bounding box to the
- * given point, and returns it as a polygon.
- * @param bb The bounding box to translate and rotate.
- * @param p The point to translate the bounding box to
- * @param angle The angle (in radians) to rotate the label counter-clockwise
- * @return A lint_pnts structure containing the rotated and translated
- * bounding box as a polygon.
- */
-static struct line_pnts *box_trans_rot(struct bound_box * bb, label_point_t * p,
-				       double angle)
-{
-    struct line_pnts *Points;
-    double x0, y0, x1, y1, x2, y2;
-
-    Points = Vect_new_line_struct();
-
-    /* Lower Left, no rotation needed */
-    x0 = p->x + bb->W;
-    y0 = p->y + bb->S;
-    Vect_append_point(Points, x0, y0, 0);
-    /* Lower Right */
-    x1 = (bb->E - bb->W) * cos(angle);
-    y1 = (bb->E - bb->W) * sin(angle);
-    Vect_append_point(Points, x0 + x1, y0 + y1, 0);
-
-    /* Upper Right */
-    x2 = (bb->N - bb->S) * sin(angle);
-    y2 = (bb->N - bb->S) * cos(angle);
-    /* First translate to LR, and then translate like UL */
-    Vect_append_point(Points, x0 + x1 - x2, y0 + y1 + y2, 0);
-
-    /* Upper Left */
-    Vect_append_point(Points, x0 - x2, y0 + y2, 0);
-
-    /* close polygon */
-    Vect_append_point(Points, x0, y0, 0);
-
-    return Points;
-}
-
-/**
- * This function calculates the AveDist metric for line label candidates
- * @param label The label to which candidate belongs to.
- * @candidate The candidate of which we are to calculate the metric.
- * @return The metric;
- */
-static double label_avedist(label_t * label, label_candidate_t * candidate)
-{
-    struct line_pnts *trsk;
-    double avedist = 0.0;
-    int i;
-
-    G_debug(3, "Candidate point is: (%lf,%lf)",
-	    candidate->point.x, candidate->point.y);
-    trsk = skyline_trans_rot(label->skyline, &candidate->point,
-			     candidate->rotation);
-
-    for (i = 0; i < trsk->n_points; i++) {
-	double d;
-
-	Vect_line_distance(candidate->swathline, trsk->x[i], trsk->y[i],
-			   0, 0, NULL, NULL, NULL, &d, NULL, NULL);
-	avedist += d;
-    }
-
-    for (i = 0; i < candidate->swathline->n_points; i++) {
-	double d;
-
-	Vect_line_distance(trsk, candidate->swathline->x[i],
-			   candidate->swathline->y[i], 0, 0,
-			   NULL, NULL, NULL, &d, NULL, NULL);
-	avedist += d;
-    }
-
-    avedist /= (candidate->swathline->n_points + trsk->n_points);
-    Vect_destroy_line_struct(trsk);
-
-    return ((avedist - ideal_distance) * (avedist - ideal_distance)) /
-	(ideal_distance * ideal_distance);
-}
-
-/**
- * This function calculates the Flatness metric for line label candidates
- * @param label The label to which candidate belongs to.
- * @candidate The candidate of which we are to calculate the metric.
- * @return The metric;
- */
-static double label_flatness(label_t * label, label_candidate_t * candidate)
-{
-    struct line_pnts *line;
-    double flatness = 0.0, x0, y0, x1, y1, x2, y2;
-    int i;
-
-    /* first generate a line which is parallel to the baseline, 
-       but the ideal distance away from it, and is between the label and the
-       base line */
-    line = Vect_new_line_struct();
-    if (candidate->above) {
-	x0 = x1 =
-	    candidate->point.x + ideal_distance * sin(candidate->rotation);
-	y0 = y1 =
-	    candidate->point.y - ideal_distance * cos(candidate->rotation);
-    }
-    else {
-	x0 = x1 =
-	    candidate->point.x - ideal_distance * sin(candidate->rotation);
-	y0 = y1 =
-	    candidate->point.y + ideal_distance * cos(candidate->rotation);
-    }
-
-    Vect_append_point(line, x1, y1, 0);
-    x2 = x1 + (label->bb.E - label->bb.W) * sin(candidate->rotation);
-    y2 = y1 + (label->bb.E - label->bb.W) * cos(candidate->rotation);
-    Vect_append_point(line, x2, y2, 0);
-
-    /* now calculate the are between candidate->swathline and line */
-
-    for (i = 1; i < candidate->swathline->n_points; i++) {
-	int r;
-	double b, h;
-	double px1, py1, pz1, px2, py2, pz2;
-
-	r = Vect_segment_intersection(x1, y1, 0, x2, y2, 0,
-				      candidate->swathline->x[i - 1],
-				      candidate->swathline->y[i - 1],
-				      0,
-				      candidate->swathline->x[i],
-				      candidate->swathline->y[i],
-				      0,
-				      &px1, &py1, &pz1, &px2, &py2, &pz2, 0);
-	/* Now calculate the area between the swath and the line */
-	switch (r) {
-	case 0:		/* no intersection */
-	    dig_distance2_point_to_line(candidate->swathline->x[i],
-					candidate->swathline->y[i], 0,
-					x1, y1, 0, x2, y2, 0, 0,
-					&px1, &py1, &pz1, &h, NULL);
-	    h = (sqrt(pow(x1 - candidate->swathline->x[i - 1], 2.0) +
-		      pow(y1 - candidate->swathline->y[i - 1], 2.0)) +
-		 h) / 2.0;
-	    b = sqrt(pow(px1 - x1, 2) + pow(py1 - y1, 2));
-	    flatness += b * h;
-	    x1 = px1;
-	    y1 = py1;
-	    break;
-	case 1:
-	    h = sqrt(pow(x1 - candidate->swathline->x[i - 1], 2.0) +
-		     pow(y1 - candidate->swathline->y[i - 1], 2.0));
-	    b = sqrt(pow(px1 - x1, 2) + pow(py1 - y1, 2));
-	    flatness += b * h * 0.5;	/* the first triangle */
-	    x1 = px1;
-	    y1 = py1;
-	    dig_distance2_point_to_line(candidate->swathline->x[i],
-					candidate->swathline->y[i], 0,
-					x1, y1, 0, x2, y2, 0, 0,
-					&px1, &py1, &pz1, &h, NULL);
-	    b = sqrt(pow(px1 - x1, 2) + pow(py1 - y1, 2));
-	    flatness += b * h * 0.5;	/* the second triangle */
-	    x1 = px1;
-	    y1 = py1;
-	    break;
-	case 3:
-	    x1 = px2;
-	    y1 = py2;
-	    break;
-	case 5:
-	    x1 = px2;
-	    y1 = py2;
-	    break;
-	default:
-	    G_fatal_error("Programming error!!\n");
-	    break;
-	}
-    }
-
-    flatness /= sqrt((x2 - x0) * (x2 - x0) + (y2 - y0) * (y2 - y0));	/* this is d'' */
-    flatness = (flatness * flatness) / (ideal_distance * ideal_distance);
-
-    Vect_destroy_line_struct(line);
-    return flatness;
-}
-
-/**
- * This function checks if the label candidate overlaps with a point feature.
- * And calculates the PointOver metric.
- * @param label The label whose candidate we are investigating.
- * @param candidate The label candidate we are investigating.
- * @return The unweighted raw score of the PointOver metric for this label.
- */
-static double label_pointover(label_t * label, label_candidate_t * candidate)
-{
-    double pointover;
-    struct ilist *il;
-    struct line_pnts *trbb;
-    int n;
-
-    il = Vect_new_list();
-
-    /*    trsk = skyline_trans_rot(label->skyline, &candidate->point,
-       candidate->rotation);
-     */
-    trbb = box_trans_rot(&label->bb, &candidate->point, candidate->rotation);
-    n = Vect_select_lines_by_polygon(&Map, trbb, 0, NULL, GV_POINT, il);
-
-    pointover = (double)il->n_values;
-    Vect_destroy_list(il);
-
-    return pointover;
-}
-
-/**
- * This function calculates the LineOver metric for a label candidate.
- * @param label The label whose candidate we are investigating.
- * @param candidate The label candidate we are investigating.
- * @return The unweighted raw score of the LineOver metric for this label.
- */
-static double label_lineover(label_t * label, label_candidate_t * candidate,
-			     int linetype)
-{
-    double lineover = 0.0;
-    struct ilist *il;
-    struct line_pnts *trbb;
-    label_point_t b;
-    int i, n;
-
-    il = Vect_new_list();
-    G_debug(5, "Candidate point is: (%lf,%lf)",
-	    candidate->point.x, candidate->point.y);
-    /*    trsk = skyline_trans_rot(label->skyline, &candidate->point,
-       candidate->rotation); */
-    b.x = abs((label->bb.E - label->bb.W) * cos(candidate->rotation));
-    b.y = abs((label->bb.E - label->bb.W) * sin(candidate->rotation));
-
-    trbb = box_trans_rot(&label->bb, &candidate->point, candidate->rotation);
-    n = Vect_select_lines_by_polygon(&Map, trbb, 0, NULL, linetype, il);
-
-    if (n == 0) {
-	return 0.0;
-    }
-
-    for (i = 0; i < il->n_values; i++) {
-	int j, found = 0;
-	struct line_pnts *line;
-	label_point_t v, v1, v2;
-
-	line = Vect_new_line_struct();
-	Vect_read_line(&Map, line, NULL, il->value[i]);
-
-	for (j = 1; j < line->n_points; j++) {
-	    int k;
-
-	    for (k = 1; k < trbb->n_points; k++) {
-		int r;
-		double x1, x2, y1, y2, z1, z2;
-
-		r = Vect_segment_intersection(trbb->x[k - 1], trbb->y[k - 1],
-					      0, trbb->x[k], trbb->y[k], 0,
-					      line->x[j - 1], line->y[j - 1],
-					      0, line->x[j], line->y[j], 0,
-					      &x1, &y1, &z1, &x2, &y2, &z2,
-					      0);
-		if (r > 0) {	/* intersection at one point */
-		    if (found == 0) {
-			found = 1;
-			v1.x = x1;
-			v1.y = y1;
-		    }
-		    else {
-			found++;
-			if (r > 1) {
-			    v2.x = x2;
-			    v2.y = y2;
-			}
-			else {
-			    v2.x = x1;
-			    v2.y = y1;
-			}
-		    }
-		}
-	    }
-	}
-	if (found > 1) {
-	    double cosvb;
-
-	    v.x = abs(v2.x - v1.x);
-	    v.y = abs(v2.y - v1.y);
-	    cosvb = ((b.x * v.x + b.y * v.y) /
-		     (sqrt(b.x * b.x + b.y * b.y) *
-		      sqrt(v.x * v.x + v.y * v.y)));
-	    lineover += 1.0 + 9.0 * cosvb;
-	}
-	Vect_destroy_line_struct(line);
-    }
-
-    Vect_destroy_list(il);
-    return lineover;
-}
-
-/**
- * This function calculates the minimum distance between a skyline and a swath line.
- * @param skyline The skyline to investigate.
- * @param swathline The swath line to investigate.
- * @param p The point on the skyline which is neares to the swath line is stored in this structure.
- * @return The distance in map units.
- */
-static double min_dist_2_lines(struct line_pnts *skyline,
-			       struct line_pnts *swathline, label_point_t * p)
-{
-    int i;
-    double dist = 10000000000000000.0;
-
-    for (i = 0; i < skyline->n_points; i++) {
-	double x, y, d;
-
-	Vect_line_distance(swathline, skyline->x[i], skyline->y[i], 0, 0,
-			   &x, &y, NULL, &d, NULL, NULL);
-	if (d < dist) {
-	    dist = d;
-	    p->x = skyline->x[i];
-	    p->y = skyline->y[i];
-	}
-    }
-
-    for (i = 0; i < swathline->n_points; i++) {
-	double x, y, d;
-
-	Vect_line_distance(skyline, swathline->x[i], swathline->y[i], 0, 0,
-			   &x, &y, NULL, &d, NULL, NULL);
-	if (d < dist) {
-	    dist = d;
-	    p->x = x;
-	    p->y = y;
-	}
-    }
-
-    return dist;
-}
-
-/**
- * This function finds label -label overlaps.
- * @param labels The array of labels
- * @param n_labels The size of the array
- */
-void label_candidate_overlap(label_t * labels, int n_labels)
-{
-    int i;
-
-    fprintf(stderr, "Finding label overlap: ...");
-    for (i = 0; i < n_labels; i++) {
-	int j;
-
-	for (j = 0; j < labels[i].n_candidates; j++) {
-	    int k;
-
-	    for (k = i + 1; k < n_labels; k++) {
-		int l;
-
-		for (l = 0; l < labels[k].n_candidates; l++) {
-		    int overlap = 0;
-		    struct line_pnts *a = NULL, *b = NULL;
-
-		    if ((labels[i].candidates[j].rotation == 0) &&
-			(labels[k].candidates[l].rotation == 0)) {
-			struct bound_box a, b;
-
-			a.N =
-			    labels[i].bb.N + labels[i].candidates[j].point.y;
-			a.E =
-			    labels[i].bb.E + labels[i].candidates[j].point.x;
-			a.W =
-			    labels[i].bb.W + labels[i].candidates[j].point.x;
-			a.S =
-			    labels[i].bb.S + labels[i].candidates[j].point.y;
-
-			b.N =
-			    labels[k].bb.N + labels[k].candidates[l].point.y;
-			b.E =
-			    labels[k].bb.E + labels[k].candidates[l].point.x;
-			b.W =
-			    labels[k].bb.W + labels[k].candidates[l].point.x;
-			b.S =
-			    labels[k].bb.S + labels[k].candidates[l].point.y;
-			overlap = box_overlap(&a, &b);
-		    }
-		    else {
-			a = box_trans_rot(&labels[i].bb,
-					  &labels[i].candidates[j].point,
-					  labels[i].candidates[j].rotation);
-			b = box_trans_rot(&labels[k].bb,
-					  &labels[k].candidates[l].point,
-					  labels[k].candidates[l].rotation);
-			overlap = box_overlap2(a, b);
-			Vect_destroy_line_struct(a);
-			Vect_destroy_line_struct(b);
-		    }
-		    if (overlap) {
-			int n;
-			label_intersection_t *li;
-
-			n = ++(labels[i].candidates[j].n_intersections);
-			li = G_realloc(labels[i].candidates[j].intersections,
-				     n * sizeof(label_intersection_t));
-			if (li == NULL)
-			    G_fatal_error("\nUnable to allocate memory\n");
-			li[n - 1].label = &labels[k];
-			li[n - 1].candidate = l;
-			if ((labels[k].current_candidate == l) &&
-			    (labels[i].current_candidate == j)) {
-			    labels[i].current_score += LABEL_OVERLAP_WEIGHT;
-			    labels[k].current_score += LABEL_OVERLAP_WEIGHT;
-			}
-			labels[i].candidates[j].intersections = li;
-			n = ++(labels[k].candidates[l].n_intersections);
-			li = G_realloc(labels[k].candidates[l].intersections,
-				     n * sizeof(label_intersection_t));
-			if (li == NULL)
-			    G_fatal_error("\nUnable to allocate memory\n");
-			li[n - 1].label = &labels[i];
-			li[n - 1].candidate = j;
-
-			labels[k].candidates[l].intersections = li;
-		    }
-		}
-	    }
-	}
-	G_percent(i, n_labels, 1);
-    }
-    G_percent(n_labels, n_labels, 1);
-}
-
-/**
- * This function checks if the two given boxes overlap.
- * @param a Bounding box A
- * @param b Bounding box B
- * @return REtruns 1 if the two boxes overlap 0 if not.
- */
-static int box_overlap(struct bound_box * a, struct bound_box * b)
-{
-    int vert = 0, hori = 0;
-
-    if (((a->W < b->W) && (b->W < a->E)) || ((a->W < b->E) && (b->E < a->E)))
-	vert = 1;
-    if (((b->W < a->W) && (a->W < b->E)) || ((b->W < a->E) && (a->E < b->E)))
-	vert = 1;
-
-    if (((a->S < b->S) && (b->S < a->N)) || ((a->S < b->N) && (b->N < a->N)))
-	hori = 1;
-    if (((b->S < a->S) && (a->S < b->N)) || ((b->S < a->N) && (a->N < b->N)))
-	hori = 1;
-
-    return (hori && vert);
-}
-
-/**
- * This function checks if two rotated boxes overlap. The boxes are stored
- * as polygons and the function assumes that each box has exactly 4 sides.
- * @param a Bounding box A
- * @param b Bounding box B
- * @return returns 1 if the given boxes overlap. 0 if not.
- */
-static int box_overlap2(struct line_pnts *a, struct line_pnts *b)
-{
-    int i, r = 0;
-
-    for (i = 0; i < (a->n_points - 1); i++) {
-	int j;
-
-	for (j = 0; j < (b->n_points - 1); j++) {
-	    double d[6];
-
-	    r += Vect_segment_intersection(a->x[i], a->y[i], 0,
-					   a->x[i + 1], a->y[i + 1], 0,
-					   b->x[j], b->y[j], 0,
-					   b->x[j + 1], a->y[j + 1], 0,
-					   &d[0], &d[1], &d[2],
-					   &d[3], &d[4], &d[5], 0);
-	}
-    }
-    if (r > 1)
-	return 1;
-    else
-	return 0;
-}
diff --git a/vector/v.label.sa/labels.h b/vector/v.label.sa/labels.h
deleted file mode 100644
index c53e55b..0000000
--- a/vector/v.label.sa/labels.h
+++ /dev/null
@@ -1,182 +0,0 @@
-
-/**
- * @file labels.h
- * This file defines the main datastructures used in this module.
- */
-#ifndef _LABELS_H
-#define _LABELS_H
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <math.h>
-#include <grass/gis.h>
-#include <grass/display.h>
-#include <grass/raster.h>
-#include <grass/vector.h>
-#include <grass/dbmi.h>
-#include <grass/glocale.h>
-#include <grass/fontcap.h>
-
-#include <ft2build.h>
-#include FT_FREETYPE_H
-#include FT_GLYPH_H
-
-#define LABEL_OVERLAP_WEIGHT 80.0
-
-typedef struct _label label_t;
-typedef struct _label_candidate label_candidate_t;
-typedef struct _label_intersection label_intersection_t;
-typedef struct _label_point label_point_t;
-typedef struct _label_score label_score_t;
-
-/**
- * A structure representing a point location */
-struct _label_point
-{
-
-    double x;	  /**< The X coordinate */
-
-    double y;	  /**< The Y coordinate */
-};
-
-/**
- * This structure represents a label for a vector feature */
-struct _label
-{
-
-    struct line_pnts *skyline;	/**< The skyline of the text, as an offest
-				  *  from the label point */
-    struct bound_box bb;
-    double size;
-
-    double current_score;	  /**< The current score of the label. */
-
-    label_candidate_t *candidates;  /**< A list of candidate positions */
-
-    int n_candidates;		 /**< The size of the candidates array */
-
-    int current_candidate;	 /**< An index into the candidates array
-				   *  describing the currently selected candidate */
-
-    char *text;			 /**< The label text */
-
-    int cat;			     /**< the cat of the feature */
-
-    int type;			     /**< The feture type (point, line, area) */
-
-    struct line_pnts *shape;	     /**< The points for the feature that this
-				       *  label belongs to */
-};
-
-/**
- * This structure represents a label candidate position.
- */
-struct _label_candidate
-{
-
-    label_point_t point;     /**< The point of the label position 
-			       *  (lower left corner)*/
-
-    double score; /**< The base score of this position (sans overlap metric) */
-    double lineover;
-
-    double rotation;	 /**< The mount the label is rotated in this position */
-
-    label_intersection_t *intersections;  /**< A list of all label candidate 
-                                            *  positions which intersect with
-                                            *  this position. */
-
-    int n_intersections; /**< Number of items in the intersections array */
-    struct line_pnts *baseline;
-    struct line_pnts *swathline;
-    int above;
-};
-
-/**
- * This structire represents an intersection of two labels
- */
-struct _label_intersection
-{
-
-    label_t *label;	/**< A pointer to the #label_t structure */
-
-    int candidate;     /**< The number of the candidate */
-};
-
-/**
- * These are the input options
- */
-struct params
-{
-    struct Option *map;
-    struct Option *type;
-    struct Option *layer;
-    struct Option *column;
-    struct Option *labels;
-    struct Option *font;
-    struct Option *size;
-    struct Option *charset;
-    struct Option *isize;
-    struct Option *color;
-    struct Option *hlcolor;
-    struct Option *hlwidth;
-    struct Option *bgcolor;
-    struct Option *opaque;
-    struct Option *bocolor;
-    struct Option *bowidth;
-
-    /*    struct Option */
-    /*      struct Option *where; *//* later */
-};
-
-/**
- * This function reads the labels from the input maps and returns an array of
- * label structures.
- */
-label_t *labels_init(struct params *p, int *n_labels);
-
-/**
- * This function searches for a maximum of 32 label candidate positions for
- * each feature.
- * @param labels The array of label structures.
- * @param n_labels The size of the array
- */
-void label_candidates(label_t * labels, int n_labels);
-
-/**
- * This function checks for all possible label overlap situations
- * @param labels The array of labels to check
- * @param n_labels The size of the labels array
- */
-void label_candidate_overlap(label_t * labels, int n_labels);
-
-/**
- * This function performs the actual annealing function. See documentation for
- * more information on simulated Annealing.
- * @param labels The labels to perform annealing on
- * @param n_labels The size of the labels array
- * @param p The program parametrs.
- */
-void simulate_annealing(label_t * labels, int n_labels, struct params *p);
-
-/**
- * This function writes the label information to the label file.
- * @param labelf An opened label file to append the label to.
- * @param label The label
- * @param p The parameters
- */
-void print_label(FILE * labelf, label_t * label, struct params *p);
-
-/**
- * This function rotates the label skyline and then translates it to the
- * given point.
- * @param skyline The skyline to translate
- * @param p The point to translate the skyline to
- * @param angle The angle (in radians) to rotate the label counter-clockwise
- * @return A lint_pnts structure containing the rotated and translated
- * skyline.
- */
-struct line_pnts *skyline_trans_rot(struct line_pnts *skyline,
-				    label_point_t * p, double angle);
-
-#endif /* _LABELS_H */
diff --git a/vector/v.label.sa/main.c b/vector/v.label.sa/main.c
deleted file mode 100644
index dff6479..0000000
--- a/vector/v.label.sa/main.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/* ****************************************************************************
- *
- * MODULE:       v.label.sa
- * AUTHOR(S):    Wolf Bergenheim
- * PURPOSE:      Create paint labels, but use a Simulated Annealing
- *               algorithm to avoid overlapping labels.
- *               This file contains the command line parsing and main function.
- *               The paint label file writing funtion (print_label()) is also
- *               part of this file.
- * COPYRIGHT:    (C) 2007 by the GRASS Development Team
- *
- *               This program is free software under the GNU General Public
- *               License (>=v2). Read the file COPYING that comes with GRASS
- *               for details.
- *
- *****************************************************************************/
-
-#include <time.h>
-#include "labels.h"
-#define DEFAULT_CHARSET "UTF-8"
-
-/**
- * The main function controls the program flow.
- */
-int main(int argc, char *argv[])
-{
-    struct params p;
-    label_t *labels;
-    int n_labels, i;
-    struct GModule *module;
-    FILE *labelf;
-
-    srand((unsigned int)time(NULL));
-
-    G_gisinit(argv[0]);
-
-    module = G_define_module();
-    G_add_keyword(_("vector"));
-    G_add_keyword(_("paint labels"));
-    module->description =
-	_("Create optimally placed labels for vector map(s)");
-
-    /* parse options and flags */
-    p.map = G_define_standard_option(G_OPT_V_MAP);
-
-    p.type = G_define_standard_option(G_OPT_V_TYPE);
-    p.type->options = "point,line,area";
-    p.type->answer = "point,line,area";
-
-    p.layer = G_define_standard_option(G_OPT_V_FIELD);
-
-    p.column = G_define_option();
-    p.column->key = "column";
-    p.column->type = TYPE_STRING;
-    p.column->required = YES;
-    p.column->description =
-	_("Name of attribute column to be used for labels");
-
-    p.labels = G_define_option();
-    p.labels->key = "labels";
-    p.labels->description = _("Name for new paint-label file");
-    p.labels->type = TYPE_STRING;
-    p.labels->required = YES;
-    p.labels->key_desc = "name";
-
-    p.font = G_define_option();
-    p.font->key = "font";
-    p.font->type = TYPE_STRING;
-    p.font->required = YES;
-    p.font->description =
-	_("Name of TrueType font (as listed in the fontcap)");
-    p.font->guisection = _("Font");
-    p.font->gisprompt = "font";
-
-    p.size = G_define_option();
-    p.size->key = "size";
-    p.size->description = _("Label size (in map-units)");
-    p.size->type = TYPE_DOUBLE;
-    p.size->answer = "100";
-    p.size->guisection = _("Font");
-
-    p.isize = G_define_option();
-    p.isize->key = "isize";
-    p.isize->description = _("Icon size of point features (in map-units)");
-    p.isize->type = TYPE_DOUBLE;
-    p.isize->answer = "10";
-
-    p.charset = G_define_option();
-    p.charset->key = "charset";
-    p.charset->type = TYPE_STRING;
-    p.charset->required = NO;
-    p.charset->answer = DEFAULT_CHARSET;
-    p.charset->description =
-	"Character encoding (default: " DEFAULT_CHARSET ")";
-
-    p.color = G_define_option();
-    p.color->key = "color";
-    p.color->description = _("Text color");
-    p.color->type = TYPE_STRING;
-    p.color->answer = "black";
-    p.color->options = "aqua,black,blue,brown,cyan,gray,green,grey,indigo,"
-	"magenta,orange,purple,red,violet,white,yellow";
-    p.color->guisection = _("Colors");
-
-    p.hlcolor = G_define_option();
-    p.hlcolor->key = "hcolor";
-    p.hlcolor->description = _("Highlight color for text");
-    p.hlcolor->type = TYPE_STRING;
-    p.hlcolor->answer = "none";
-    p.hlcolor->options =
-	"none,aqua,black,blue,brown,cyan,gray,green,grey,indigo,"
-	"magenta,orange,purple,red,violet,white,yellow";
-    p.hlcolor->guisection = _("Colors");
-
-    p.hlwidth = G_define_option();
-    p.hlwidth->key = "hwidth";
-    p.hlwidth->description = _("Width of highlight coloring");
-    p.hlwidth->type = TYPE_DOUBLE;
-    p.hlwidth->answer = "0";
-    p.hlwidth->guisection = _("Colors");
-
-    p.bgcolor = G_define_option();
-    p.bgcolor->key = "background";
-    p.bgcolor->description = _("Background color");
-    p.bgcolor->type = TYPE_STRING;
-    p.bgcolor->answer = "none";
-    p.bgcolor->options =
-	"none,aqua,black,blue,brown,cyan,gray,green,grey,indigo,"
-	"magenta,orange,purple,red,violet,white,yellow";
-    p.bgcolor->guisection = _("Colors");
-
-    p.opaque = G_define_option();
-    p.opaque->key = "opaque";
-    p.opaque->description =
-	_("Opaque to vector (only relevant if background color is selected)");
-    p.opaque->type = TYPE_STRING;
-    p.opaque->answer = "yes";
-    p.opaque->options = "yes,no";
-    p.opaque->key_desc = "yes|no";
-    p.opaque->guisection = _("Colors");
-
-    p.bocolor = G_define_option();
-    p.bocolor->key = "border";
-    p.bocolor->description = _("Border color");
-    p.bocolor->type = TYPE_STRING;
-    p.bocolor->answer = "none";
-    p.bocolor->options =
-	"none,aqua,black,blue,brown,cyan,gray,green,grey,indigo,"
-	"magenta,orange,purple,red,violet,white,yellow";
-    p.bocolor->guisection = _("Colors");
-
-    p.bowidth = G_define_option();
-    p.bowidth->key = "width";
-    p.bowidth->description = _("Border width (only for ps.map output)");
-    p.bowidth->type = TYPE_DOUBLE;
-    p.bowidth->answer = "0";
-    p.bowidth->guisection = _("Colors");
-
-    if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
-
-    /* initialize labels (get text from database, and get features) */
-    labels = labels_init(&p, &n_labels);
-    /* start algorithm */
-    /*   1. candidate position generation */
-    label_candidates(labels, n_labels);
-    /*   2. position evaluation */
-    label_candidate_overlap(labels, n_labels);
-    /*   3. position selection */
-    simulate_annealing(labels, n_labels, &p);
-    /* write labels to file */
-    fprintf(stderr, "Writing labels to file: ...");
-    labelf = G_fopen_new("paint/labels", p.labels->answer);
-    for (i = 0; i < n_labels; i++) {
-	if (labels[i].n_candidates > 0) {
-	    print_label(labelf, &labels[i], &p);
-	}
-	G_percent(i, (n_labels - 1), 1);
-    }
-    fclose(labelf);
-
-    return EXIT_SUCCESS;
-}
-
-void print_label(FILE * labelf, label_t * label, struct params *p)
-{
-    int cc, hlwidth;
-    double size;
-
-    cc = label->current_candidate;
-    size = atof(p->size->answer);
-    hlwidth = atoi(p->hlwidth->answer);
-
-    fprintf(labelf, "east: %lf\n", label->candidates[cc].point.x);
-    fprintf(labelf, "north: %lf\n", label->candidates[cc].point.y);
-    fprintf(labelf, "xoffset: %lf\n", 0.0);	/*  * (size)); */
-    fprintf(labelf, "yoffset: %lf\n", 0.0);	/*  * (size)); */
-    fprintf(labelf, "ref: %s\n", "bottom left");
-
-    fprintf(labelf, "font: %s\n", p->font->answer);
-    fprintf(labelf, "color: %s\n", p->color->answer);
-
-    fprintf(labelf, "size: %lf\n", size);
-
-    fprintf(labelf, "width: %s\n", p->bowidth->answer);
-    fprintf(labelf, "hcolor: %s\n", p->hlcolor->answer);
-    fprintf(labelf, "hwidth: %d\n", hlwidth);
-    fprintf(labelf, "background: %s\n", p->bgcolor->answer);
-    fprintf(labelf, "border: %s\n", p->bocolor->answer);
-    fprintf(labelf, "opaque: %s\n", p->opaque->answer);
-    fprintf(labelf, "rotate: %f\n",
-	    label->candidates[cc].rotation * 180.0 / M_PI);
-    fprintf(labelf, "text:%s\n\n", label->text);
-
-    return;
-}
diff --git a/vector/v.label.sa/v.label.sa.html b/vector/v.label.sa/v.label.sa.html
deleted file mode 100644
index 8a3fa61..0000000
--- a/vector/v.label.sa/v.label.sa.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<h2>DESCRIPTION</h2>
-
-<em>v.label.sa</em> makes a label-file from a GRASS vector map
-with labels created from attributes in the attached table. The labels are
-placed in as optimal place as possible. The label file has the same syntax
-as the one created by <a href="v.label.html">v.label</a>
-
-
-<h2>EXAMPLE</h2>
-
-North Carolina example:
-<p><div class="code"><pre>
-# get font names:
-d.font -L
-
-v.label.sa roadsmajor labels=roads_labels column=ROAD_NAME color=red \
-           background=white size=250 font=Vera
-
-# set region:
-g.region raster=lsat7_2002_10 -p
-
-# display:
-d.rgb b=lsat7_2002_10 g=lsat7_2002_20 r=lsat7_2002_30
-d.vect roadsmajor col=yellow
-d.labels roads_labels
-</pre></div>
-
-<p><center>
-<img src="v_label_sa.jpg" alt="Road labeling with v.label.sa"><br>
-<i>Road labeling with v.label.sa (Raleigh, North Carolina, USA, area)</i>
-</center>
-
-
-<h2>REFERENCES</h2>
-Edmondson, Christensen, Marks and Shieber: A General Cartographic
-Labeling Algorithm, Cartographica, Vol. 33, No. 4, Winter 1996, pp. 13-23
-The algorithm works by the principle of Simulated Annealing.
-
-<h2>SEE ALSO</h2>
-<em>
-<a href="v.labels.html">d.label</a><br>
-<a href="d.labels.html">d.labels</a><br>
-<a href="ps.map.html">ps.map</a>
-<a href="http://en.wikipedia.org/wiki/Simulated_Annealing">Wikipedia article on simulated annealing</a>
-</em><br>
-
-<h2>AUTHOR</h2>
-Wolf Bergenheim
-<br>
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
-
diff --git a/vector/v.label.sa/v_label_sa.jpg b/vector/v.label.sa/v_label_sa.jpg
deleted file mode 100644
index 0fc7130..0000000
Binary files a/vector/v.label.sa/v_label_sa.jpg and /dev/null differ
diff --git a/vector/v.label/v.label.html b/vector/v.label/v.label.html
index 42acb06..4f20ff4 100644
--- a/vector/v.label/v.label.html
+++ b/vector/v.label/v.label.html
@@ -221,4 +221,4 @@ Philip Verhagen (original s.label)<br>
 Radim Blazek (GRASS 6 port)<br>
 Hamish Bowman (enhancements)
 
-<p><i>Last changed: $Date: 2014-12-12 00:16:30 +0100 (Fri, 12 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-12 00:12:46 +0100 (Fri, 12 Dec 2014) $</i>
diff --git a/vector/v.lidar.correction/v.lidar.correction.html b/vector/v.lidar.correction/v.lidar.correction.html
index a7d4108..ed5e19f 100644
--- a/vector/v.lidar.correction/v.lidar.correction.html
+++ b/vector/v.lidar.correction/v.lidar.correction.html
@@ -112,5 +112,5 @@ Performances of the filter can be seen in the
 <a href="http://www.itc.nl/isprswgIII-3/filtertest/MainDoc.htm">ISPRS WG III/3 Comparison of Filters</a> 
 report by Sithole, G. and Vosselman, G., 2003. 
 
-<p><i>Last changed: $Date: 2015-10-09 20:18:18 +0200 (Fri, 09 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-08 04:45:01 +0200 (Tue, 08 Sep 2015) $</i>
 
diff --git a/vector/v.lidar.edgedetection/v.lidar.edgedetection.html b/vector/v.lidar.edgedetection/v.lidar.edgedetection.html
index 2f1679d..859e02a 100644
--- a/vector/v.lidar.edgedetection/v.lidar.edgedetection.html
+++ b/vector/v.lidar.edgedetection/v.lidar.edgedetection.html
@@ -162,4 +162,4 @@ Update for GRASS 6.X:
 Roberto Antolin and Gonzalo Moreno
 
 <p>
-<i>Last changed: $Date: 2015-10-09 20:24:22 +0200 (Fri, 09 Oct 2015) $</i>
+<i>Last changed: $Date: 2015-09-13 14:47:50 +0200 (Sun, 13 Sep 2015) $</i>
diff --git a/vector/v.lidar.growing/v.lidar.growing.html b/vector/v.lidar.growing/v.lidar.growing.html
index 227724d..47accb6 100644
--- a/vector/v.lidar.growing/v.lidar.growing.html
+++ b/vector/v.lidar.growing/v.lidar.growing.html
@@ -92,5 +92,5 @@ Performances of the filter can be seen in the
 report by Sithole, G. and Vosselman, G., 2003. 
 <br>
 
-<p><i>Last changed: $Date: 2015-10-09 20:18:18 +0200 (Fri, 09 Oct 2015) $</i>
+<p><i>Last changed: $Date: 2015-09-08 04:45:01 +0200 (Tue, 08 Sep 2015) $</i>
 
diff --git a/vector/v.lrs/lrs.html b/vector/v.lrs/lrs.html
index 9caf7db..67614b1 100644
--- a/vector/v.lrs/lrs.html
+++ b/vector/v.lrs/lrs.html
@@ -181,4 +181,4 @@ Radim Blazek, ITC-irst/MPA Solutions Trento<br>
 Documentation update (based on above journal article and available fragments): Markus Neteler
 
 <p>
-<i>Last changed: $Date: 2014-04-20 19:54:31 +0200 (Sun, 20 Apr 2014) $</i>
+<i>Last changed: $Date: 2014-04-20 12:47:59 +0200 (Sun, 20 Apr 2014) $</i>
diff --git a/vector/v.lrs/v.lrs.create/v.lrs.create.html b/vector/v.lrs/v.lrs.create/v.lrs.create.html
index aa72c7a..8d5b190 100644
--- a/vector/v.lrs/v.lrs.create/v.lrs.create.html
+++ b/vector/v.lrs/v.lrs.create/v.lrs.create.html
@@ -154,4 +154,4 @@ d.vect route_lrs col=blue width=2
 Radim Blazek, ITC-irst/MPA Solutions<br>
 Documentation update (based on above journal article and available fragments): Markus Neteler
 
-<p><i>Last changed: $Date: 2015-12-17 15:41:28 +0100 (Thu, 17 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-12-17 15:38:13 +0100 (Thu, 17 Dec 2015) $</i>
diff --git a/vector/v.lrs/v.lrs.label/v.lrs.label.html b/vector/v.lrs/v.lrs.label/v.lrs.label.html
index 52e4a76..51bf641 100644
--- a/vector/v.lrs/v.lrs.label/v.lrs.label.html
+++ b/vector/v.lrs/v.lrs.label/v.lrs.label.html
@@ -33,4 +33,4 @@ d.labels labels
 Radim Blazek, ITC-irst/MPA Solutions<br>
 Documentation update (based on above journal article and available fragments): Markus Neteler
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/vector/v.lrs/v.lrs.segment/v.lrs.segment.html b/vector/v.lrs/v.lrs.segment/v.lrs.segment.html
index 8910d93..5a54264 100644
--- a/vector/v.lrs/v.lrs.segment/v.lrs.segment.html
+++ b/vector/v.lrs/v.lrs.segment/v.lrs.segment.html
@@ -60,4 +60,4 @@ Figure out how to merge result into existing LRS map and table.
 Radim Blazek
 
 <p>
-<i>Last changed: $Date: 2015-12-17 15:41:28 +0100 (Thu, 17 Dec 2015) $</i>
+<i>Last changed: $Date: 2015-12-17 15:38:13 +0100 (Thu, 17 Dec 2015) $</i>
diff --git a/vector/v.lrs/v.lrs.where/v.lrs.where.html b/vector/v.lrs/v.lrs.where/v.lrs.where.html
index d40adf6..3054fb6 100644
--- a/vector/v.lrs/v.lrs.where/v.lrs.where.html
+++ b/vector/v.lrs/v.lrs.where/v.lrs.where.html
@@ -47,4 +47,4 @@ d.vect newpoints col=red
 Radim Blazek, ITC-irst/MPA Solutions<br>
 Documentation update (based on above journal article and available fragments): Markus Neteler
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/vector/v.mkgrid/main.c b/vector/v.mkgrid/main.c
index db733fd..998cbdf 100644
--- a/vector/v.mkgrid/main.c
+++ b/vector/v.mkgrid/main.c
@@ -71,6 +71,7 @@ int main(int argc, char *argv[])
     G_add_keyword(_("geometry"));
     G_add_keyword(_("grid"));
     G_add_keyword(_("point pattern"));
+    G_add_keyword(_("hexagon"));
     module->description = _("Creates a vector map of a user-defined grid.");
 
     vectname = G_define_standard_option(G_OPT_V_OUTPUT);
@@ -451,7 +452,7 @@ int main(int argc, char *argv[])
 		    }
 		    else {
 		        sprintf(buf, "( %d, %d, %d )",
-			        attCount + 1, i + 1, j + 1);
+			        attCount + 1, grid_info.num_rows - i, j + 1);
 		    }
 		    if (db_append_string(&sql, buf) != DB_OK)
 		        G_fatal_error(_("Unable to fill attribute table"));
diff --git a/vector/v.mkgrid/v.mkgrid.html b/vector/v.mkgrid/v.mkgrid.html
index e75cd99..f7f2fb7 100644
--- a/vector/v.mkgrid/v.mkgrid.html
+++ b/vector/v.mkgrid/v.mkgrid.html
@@ -129,12 +129,59 @@ d.grid 5000
 Hexagon map
 </center>
 
+<h3>Using hexagons for point density</h3>
+
+To compute point density in a hexagonal grid for the vector map
+<em>points_of_interest</em> in the basic North Carolina sample dataset,
+the vector map itself is used to set extent of the computational region.
+The resolution is based on the desired size of hexagons.
+
+<div class="code"><pre>
+g.region vector=points_of_interest res=2000 -pa
+</pre></div>
+
+The hexagonal grid is created as a vector map based on the previously
+selected extent and size of the grid.
+
+<div class="code"><pre>
+v.mkgrid map=hexagons -h
+</pre></div>
+
+The following counts the number of points per hexagon using the
+<em><a href="v.vect.stats.html">v.vect.stats</a></em> module.
+
+<div class="code"><pre>
+v.vect.stats points=points_of_interest areas=hexagons count_column=count
+</pre></div>
+
+User should note that some of the points may be outside the grid
+since the hexagons cannot cover all the area around the edges
+(the computational region extent needs to be enlarged if all points
+should be considered).
+The last command sets the vector map color table to <tt>viridis</tt>
+based on the <tt>count</tt> column.
+
+<div class="code"><pre>
+v.colors map=hexagons use=attr column=count color=viridis
+</pre></div>
+
+<!--
+d.erase 77:77:77
+mogrify -trim .png
+-->
+
+<center>
+<img src="v_mkgrid.png"><br>
+Point density in a hexagonal grid
+</center>
+
 <h2>SEE ALSO</h2>
 
 <em>
 <a href="d.grid.html">d.grid</a>,
 <a href="v.in.region.html">v.in.region</a>,
-<a href="v.patch.html">v.patch</a>
+<a href="v.patch.html">v.patch</a>,
+<a href="v.vect.stats.html">v.vect.stats</a>
 </em>
 
 <h2>AUTHORS</h2>
@@ -144,4 +191,4 @@ U.S.Army Construction Engineering
 Research Laboratory
 <p>Update for new vectors Radim Blazek 10/2004 
 
-<p><i>Last changed: $Date: 2014-12-28 00:21:19 +0100 (Sun, 28 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-08-23 04:07:22 +0200 (Tue, 23 Aug 2016) $</i>
diff --git a/vector/v.mkgrid/v_mkgrid.png b/vector/v.mkgrid/v_mkgrid.png
new file mode 100644
index 0000000..9a68ced
Binary files /dev/null and b/vector/v.mkgrid/v_mkgrid.png differ
diff --git a/vector/v.neighbors/v.neighbors.html b/vector/v.neighbors/v.neighbors.html
index 4b627ad..21702db 100644
--- a/vector/v.neighbors/v.neighbors.html
+++ b/vector/v.neighbors/v.neighbors.html
@@ -32,4 +32,4 @@ from the respective cell center.
 
 Radim Blazek
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/vector/v.net.alloc/Makefile b/vector/v.net.alloc/Makefile
index 3dfabef..c23c236 100644
--- a/vector/v.net.alloc/Makefile
+++ b/vector/v.net.alloc/Makefile
@@ -3,7 +3,7 @@ MODULE_TOPDIR = ../..
 
 PGM = v.net.alloc
 
-LIBES = $(VECTORLIB) $(GISLIB)
+LIBES = $(VECTORLIB) $(GISLIB) $(GRAPHLIB)
 DEPENDENCIES = $(VECTORDEP) $(GISDEP)
 EXTRA_INC = $(VECT_INC)
 EXTRA_CFLAGS = $(VECT_CFLAGS)
diff --git a/vector/v.net.alloc/alloc.c b/vector/v.net.alloc/alloc.c
new file mode 100644
index 0000000..a18fbd1
--- /dev/null
+++ b/vector/v.net.alloc/alloc.c
@@ -0,0 +1,266 @@
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+#include <grass/gis.h>
+#include <grass/vector.h>
+#include <grass/dbmi.h>
+#include <grass/dgl/graph.h>
+#include <grass/glocale.h>
+#include "alloc.h"
+
+int alloc_from_centers_loop_tt(struct Map_info *Map, NODE *Nodes,
+                               CENTER *Centers, int ncenters,
+                               int tucfield)
+{
+    int center, line, nlines, i;
+    int node1;
+    int cat;
+    struct line_cats *Cats;
+    struct line_pnts *Points;
+    double cost, n1cost, n2cost;
+    int ret;
+
+    Cats = Vect_new_cats_struct();
+    Points = Vect_new_line_struct();
+    
+    nlines = Vect_get_num_lines(Map);
+
+    for (i = 2; i <= (nlines * 2 + 2); i++) {
+	Nodes[i].center = -1;/* NOTE: first two items of Nodes are not used */
+	Nodes[i].cost = -1;
+	Nodes[i].edge = 0;
+    }
+
+    for (center = 0; center < ncenters; center++) {
+	G_percent(center, ncenters, 1);
+	node1 = Centers[center].node;
+	Vect_net_get_node_cost(Map, node1, &n1cost);
+	G_debug(2, "center = %d node = %d cat = %d", center, node1,
+		Centers[center].cat);
+
+	for (line = 1; line <= nlines; line++) {
+	    G_debug(5, "  node1 = %d line = %d", node1, line);
+	    Vect_net_get_node_cost(Map, line, &n2cost);
+	    /* closed, left it as not attached */
+
+	    if (Vect_read_line(Map, Points, Cats, line) < 0)
+		continue;
+	    if (Vect_get_line_type(Map, line) != GV_LINE)
+		continue;
+	    if (!Vect_cat_get(Cats, tucfield, &cat))
+		continue;
+
+	    for (i = 0; i < 2; i++) {
+		if (i == 1)
+		    cat *= -1;
+
+		ret =
+		    Vect_net_ttb_shortest_path(Map, node1, 0, cat, 1,
+					       tucfield, NULL,
+					       &cost);
+		if (ret == -1) {
+		    continue;
+		}		/* node unreachable */
+
+		/* We must add center node costs (not calculated by Vect_net_shortest_path() ), but
+		 *  only if center and node are not identical, because at the end node cost is add later */
+		if (ret != 1)
+		    cost += n1cost;
+
+		G_debug(5,
+			"Arc nodes: %d %d cost: %f (x old cent: %d old cost %f",
+			node1, line, cost, Nodes[line * 2 + i].center,
+			Nodes[line * 2 + i].cost);
+		if (Nodes[line * 2 + i].center == -1 ||
+		    Nodes[line * 2 + i].cost > cost) {
+		    Nodes[line * 2 + i].cost = cost;
+		    Nodes[line * 2 + i].center = center;
+		}
+	    }
+	}
+    }
+    G_percent(1, 1, 1);
+
+    Vect_destroy_cats_struct(Cats);
+    Vect_destroy_line_struct(Points);
+
+    return 0;
+}
+
+int alloc_from_centers(dglGraph_s *graph, NODE *Nodes, CENTER *Centers, int ncenters)
+{
+    int i, nnodes;
+    dglHeap_s heap;
+    dglEdgesetTraverser_s et;
+    int have_node_costs;
+    dglInt32_t ncost;
+
+    nnodes = dglGet_NodeCount(graph);
+
+    /* initialize nodes */
+    for (i = 1; i <= nnodes; i++) {
+	Nodes[i].cost = -1;
+	Nodes[i].center = -1;
+	Nodes[i].edge = 0;
+    }
+
+    ncost = 0;
+    have_node_costs = dglGet_NodeAttrSize(graph);
+
+    dglHeapInit(&heap);
+
+    for (i = 0; i < ncenters; i++) {
+	int v = Centers[i].node;
+
+	if (Nodes[v].cost == 0)
+	    continue;		/* ignore duplicates */
+	Nodes[v].cost = 0;		/* make sure all centers are processed first */
+	Nodes[v].center = i;
+	dglHeapData_u heap_data;
+
+	heap_data.ul = v;
+	dglHeapInsertMin(&heap, 0, ' ', heap_data);
+    }
+    while (1) {
+	dglInt32_t v, dist;
+	dglHeapNode_s heap_node;
+	dglHeapData_u heap_data;
+	dglInt32_t *edge;
+	dglInt32_t *node;
+
+	if (!dglHeapExtractMin(&heap, &heap_node))
+	    break;
+	v = heap_node.value.ul;
+	dist = heap_node.key;
+	if (Nodes[v].cost < dist)
+	    continue;
+
+	node = dglGetNode(graph, v);
+
+	if (have_node_costs && Nodes[v].edge) {
+	    memcpy(&ncost, dglNodeGet_Attr(graph, node),
+		   sizeof(ncost));
+	    if (ncost > 0)
+		dist += ncost;
+	    /* do not go through closed nodes */
+	    if (ncost < 0)
+		continue;
+	}
+
+	dglEdgeset_T_Initialize(&et, graph,
+				dglNodeGet_OutEdgeset(graph, node));
+
+	for (edge = dglEdgeset_T_First(&et); edge;
+	     edge = dglEdgeset_T_Next(&et)) {
+	    dglInt32_t *to = dglEdgeGet_Tail(graph, edge);
+	    dglInt32_t to_id = dglNodeGet_Id(graph, to);
+	    dglInt32_t d = dglEdgeGet_Cost(graph, edge);
+
+	    if (Nodes[to_id].cost < 0 || Nodes[to_id].cost > dist + d) {
+		Nodes[to_id].cost = dist + d;
+		Nodes[to_id].edge = dglEdgeGet_Id(graph, edge);
+		Nodes[to_id].center = Nodes[v].center;
+		heap_data.ul = to_id;
+		dglHeapInsertMin(&heap, dist + d, ' ', heap_data);
+	    }
+	}
+
+	dglEdgeset_T_Release(&et);
+    }
+
+    dglHeapFree(&heap, NULL);
+
+    return 0;
+}
+
+int alloc_to_centers(dglGraph_s *graph, NODE *Nodes, CENTER *Centers, int ncenters)
+{
+    int i, nnodes;
+    dglHeap_s heap;
+    dglEdgesetTraverser_s et;
+    int have_node_costs;
+    dglInt32_t ncost;
+
+    if (graph->Version < 2) {
+	G_warning("Directed graph must be version 2 or 3 for distances to centers");
+	return -1;
+    }
+
+    nnodes = dglGet_NodeCount(graph);
+
+    /* initialize nodes */
+    for (i = 1; i <= nnodes; i++) {
+	Nodes[i].cost = -1;
+	Nodes[i].center = -1;
+	Nodes[i].edge = 0;
+    }
+
+    ncost = 0;
+    have_node_costs = dglGet_NodeAttrSize(graph);
+
+    dglHeapInit(&heap);
+
+    for (i = 0; i < ncenters; i++) {
+	int v = Centers[i].node;
+
+	if (Nodes[v].cost == 0)
+	    continue;		/* ignore duplicates */
+	Nodes[v].cost = 0;		/* make sure all centers are processed first */
+	Nodes[v].center = i;
+	dglHeapData_u heap_data;
+
+	heap_data.ul = v;
+	dglHeapInsertMin(&heap, 0, ' ', heap_data);
+    }
+    while (1) {
+	dglInt32_t v, dist;
+	dglHeapNode_s heap_node;
+	dglHeapData_u heap_data;
+	dglInt32_t *edge;
+	dglInt32_t *node;
+
+	if (!dglHeapExtractMin(&heap, &heap_node))
+	    break;
+	v = heap_node.value.ul;
+	dist = heap_node.key;
+	if (Nodes[v].cost < dist)
+	    continue;
+
+	node = dglGetNode(graph, v);
+
+	if (have_node_costs && Nodes[v].edge) {
+	    memcpy(&ncost, dglNodeGet_Attr(graph, node),
+		   sizeof(ncost));
+	    if (ncost > 0)
+		dist += ncost;
+	    /* do not go through closed nodes */
+	    if (ncost < 0)
+		continue;
+	}
+
+	dglEdgeset_T_Initialize(&et, graph,
+				dglNodeGet_InEdgeset(graph, node));
+
+	for (edge = dglEdgeset_T_First(&et); edge;
+	     edge = dglEdgeset_T_Next(&et)) {
+	    dglInt32_t *from = dglEdgeGet_Head(graph, edge);
+	    dglInt32_t from_id = dglNodeGet_Id(graph, from);
+	    dglInt32_t d = dglEdgeGet_Cost(graph, edge);
+
+	    if (Nodes[from_id].cost < 0 || Nodes[from_id].cost > dist + d) {
+		Nodes[from_id].cost = dist + d;
+		Nodes[from_id].edge = dglEdgeGet_Id(graph, edge);
+		Nodes[from_id].center = Nodes[v].center;
+		heap_data.ul = from_id;
+		dglHeapInsertMin(&heap, dist + d, ' ', heap_data);
+	    }
+	}
+
+	dglEdgeset_T_Release(&et);
+    }
+
+    dglHeapFree(&heap, NULL);
+
+    return 0;
+}
+
diff --git a/vector/v.net.alloc/alloc.h b/vector/v.net.alloc/alloc.h
new file mode 100644
index 0000000..b4a4151
--- /dev/null
+++ b/vector/v.net.alloc/alloc.h
@@ -0,0 +1,20 @@
+
+typedef struct
+{
+    int cat;			/* category number */
+    int node;			/* node number */
+} CENTER;
+
+typedef struct
+{
+    int center;			/* neares center, initially -1 */
+    double cost;		/* costs from this center, initially not defined */
+    int edge;			/* edge to follow from this node */
+} NODE;
+
+int alloc_from_centers_loop_tt(struct Map_info *Map, NODE *Nodes,
+                               CENTER *Centers, int ncenters,
+                               int tucfield);
+
+int alloc_from_centers(dglGraph_s *graph, NODE *Nodes, CENTER *Centers, int ncenters);
+int alloc_to_centers(dglGraph_s *graph, NODE *Nodes, CENTER *Centers, int ncenters);
diff --git a/vector/v.net.alloc/main.c b/vector/v.net.alloc/main.c
index 71fa998..e9a4228 100644
--- a/vector/v.net.alloc/main.c
+++ b/vector/v.net.alloc/main.c
@@ -4,10 +4,12 @@
  * MODULE:       v.net.alloc
  *
  * AUTHOR(S):    Radim Blazek
+ *               Stepan Turek <stepan.turek seznam.cz> (turns support)
+ *               Markus Metz (costs from/to centers)
  *
  * PURPOSE:      Allocate subnets for nearest centers
  *               
- * COPYRIGHT:    (C) 2001, 2014 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2001, 2016 by the GRASS Development Team
  *
  *               This program is free software under the 
  *               GNU General Public License (>=v2). 
@@ -22,29 +24,20 @@
 #include <grass/vector.h>
 #include <grass/dbmi.h>
 #include <grass/glocale.h>
+#include "alloc.h"
 
-typedef struct
-{
-    int cat;			/* category number */
-    int node;			/* node number */
-} CENTER;
-
-typedef struct
-{
-    int center;			/* neares center, initially -1 */
-    double cost;		/* costs from this center, initially not undefined */
-} NODE;
 
 int main(int argc, char **argv)
 {
-    int i, ret, center, line, center1, center2;
-    int nlines, nnodes, type, ltype, afield, nfield, geo, cat;
+    int i, ret, line, center1, center2;
+    int nlines, nnodes, type, ltype, afield, nfield, geo, cat, tfield,
+	tucfield;
     int node1, node2;
-    double cost, e1cost, e2cost, n1cost, n2cost, s1cost, s2cost, l, l1, l2;
-    struct Option *map, *output;
+    double e1cost, e2cost, n1cost, n2cost, s1cost, s2cost, l, l1, l2;
+    struct Option *map, *output, *method_opt;
     struct Option *afield_opt, *nfield_opt, *afcol, *abcol, *ncol, *type_opt,
-	*term_opt;
-    struct Flag *geo_f;
+	*term_opt, *tfield_opt, *tucfield_opt;
+    struct Flag *geo_f, *turntable_f;
     struct GModule *module;
     struct Map_info Map, Out;
     struct cat_list *catlist;
@@ -53,6 +46,8 @@ int main(int argc, char **argv)
     NODE *Nodes;
     struct line_cats *Cats;
     struct line_pnts *Points, *SPoints;
+    int graph_version;
+    int from_centers;
 
     /* initialize GIS environment */
     G_gisinit(argv[0]);		/* reads grass env, stores program name to G_program_name() */
@@ -72,20 +67,40 @@ int main(int argc, char **argv)
     map = G_define_standard_option(G_OPT_V_INPUT);
     output = G_define_standard_option(G_OPT_V_OUTPUT);
 
+    method_opt = G_define_option();
+    method_opt->key = "method";
+    method_opt->type = TYPE_STRING;
+    method_opt->required = NO;
+    method_opt->options = "from,to";
+    method_opt->answer = "from";
+    method_opt->description = _("Use costs from centers or costs to centers");
+    method_opt->guisection = _("Cost");
+
+    term_opt = G_define_standard_option(G_OPT_V_CATS);
+    term_opt->key = "center_cats";
+    term_opt->required = YES;
+    term_opt->description =
+	_("Categories of centers (points on nodes) to which net "
+	  "will be allocated, "
+	  "layer for this categories is given by nlayer option");
+
     afield_opt = G_define_standard_option(G_OPT_V_FIELD);
     afield_opt->key = "arc_layer";
     afield_opt->answer = "1";
+    afield_opt->required = YES;
     afield_opt->label = _("Arc layer");
 
     type_opt = G_define_standard_option(G_OPT_V_TYPE);
     type_opt->key = "arc_type";
     type_opt->options = "line,boundary";
     type_opt->answer = "line,boundary";
-    type_opt->description = _("Arc type");
+    type_opt->required = YES;
+    type_opt->label = _("Arc type");
 
     nfield_opt = G_define_standard_option(G_OPT_V_FIELD);
     nfield_opt->key = "node_layer";
     nfield_opt->answer = "2";
+    nfield_opt->required = YES;
     nfield_opt->label = _("Node layer");
 
     afcol = G_define_option();
@@ -109,13 +124,26 @@ int main(int argc, char **argv)
     ncol->description = _("Node cost column (number)");
     ncol->guisection = _("Cost");
 
-    term_opt = G_define_standard_option(G_OPT_V_CATS);
-    term_opt->key = "center_cats";
-    term_opt->required = YES;
-    term_opt->description =
-	_("Categories of centers (points on nodes) to which net "
-	  "will be allocated, "
-	  "layer for this categories is given by nlayer option");
+    turntable_f = G_define_flag();
+    turntable_f->key = 't';
+    turntable_f->description = _("Use turntable");
+    turntable_f->guisection = _("Turntable");
+
+    tfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tfield_opt->key = "turn_layer";
+    tfield_opt->answer = "3";
+    tfield_opt->label = _("Layer with turntable");
+    tfield_opt->description =
+	_("Relevant only with -t flag");
+    tfield_opt->guisection = _("Turntable");
+
+    tucfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tucfield_opt->key = "turn_cat_layer";
+    tucfield_opt->answer = "4";
+    tucfield_opt->label = _("Layer with unique categories used in turntable");
+    tucfield_opt->description =
+	_("Relevant only with -t flag");
+    tucfield_opt->guisection = _("Turntable");
 
     geo_f = G_define_flag();
     geo_f->key = 'g';
@@ -147,10 +175,23 @@ int main(int argc, char **argv)
 
     afield = Vect_get_field_number(&Map, afield_opt->answer);
     nfield = Vect_get_field_number(&Map, nfield_opt->answer);
+    tfield = Vect_get_field_number(&Map, tfield_opt->answer);
+    tucfield = Vect_get_field_number(&Map, tucfield_opt->answer);
 
     /* Build graph */
-    Vect_net_build_graph(&Map, type, afield, nfield, afcol->answer,
-			 abcol->answer, ncol->answer, geo, 0);
+    graph_version = 1;
+    from_centers = 1;
+    if (method_opt->answer[0] == 't' && !turntable_f->answer) {
+	graph_version = 2;
+	from_centers = 0;
+    }
+    if (turntable_f->answer)
+	Vect_net_ttb_build_graph(&Map, type, afield, nfield, tfield, tucfield,
+				 afcol->answer, abcol->answer, ncol->answer,
+				 geo, 0);
+    else
+	Vect_net_build_graph(&Map, type, afield, nfield, afcol->answer,
+			     abcol->answer, ncol->answer, geo, graph_version);
 
     nnodes = Vect_get_num_nodes(&Map);
     nlines = Vect_get_num_lines(&Map);
@@ -158,13 +199,15 @@ int main(int argc, char **argv)
     /* Create list of centers based on list of categories */
     for (i = 1; i <= nlines; i++) {
 	int node;
-	
+
 	ltype = Vect_get_line_type(&Map, i);
 	if (!(ltype & GV_POINT))
 	    continue;
 
 	Vect_read_line(&Map, Points, Cats, i);
-	node = Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0], 0, 0);
+	node =
+	    Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0], 0,
+			   0);
 	if (!node) {
 	    G_warning(_("Point is not connected to the network"));
 	    continue;
@@ -198,50 +241,32 @@ int main(int argc, char **argv)
 	G_warning(_("Not enough centers for selected nlayer. "
 		    "Nothing will be allocated."));
 
-    /* alloc and reset space for all nodes */
-    Nodes = (NODE *) G_calloc((nnodes + 1), sizeof(NODE));
-    for (i = 1; i <= nnodes; i++) {
-	Nodes[i].center = -1;
+    /* alloc and reset space for all lines */
+    if (turntable_f->answer) {
+	/* if turntable is used we are looking for lines as destinations, not the intersections (nodes) */
+	Nodes = (NODE *) G_calloc((nlines * 2 + 2), sizeof(NODE));
+    }
+    else {
+	Nodes = (NODE *) G_calloc((nnodes + 1), sizeof(NODE));
     }
-
 
     /* Fill Nodes by nearest center and costs from that center */
-    G_message(_("Calculating costs from centers ..."));
-
-    for (center = 0; center < ncenters; center++) {
-	G_percent(center, ncenters, 1);
-	node1 = Centers[center].node;
-	Vect_net_get_node_cost(&Map, node1, &n1cost);
-	G_debug(2, "center = %d node = %d cat = %d", center, node1,
-		Centers[center].cat);
-	for (node2 = 1; node2 <= nnodes; node2++) {
-	    G_debug(5, "  node1 = %d node2 = %d", node1, node2);
-	    Vect_net_get_node_cost(&Map, node2, &n2cost);
-	    if (n2cost == -1) {
-		continue;
-	    }			/* closed, left it as not attached */
-
-	    ret = Vect_net_shortest_path(&Map, node1, node2, NULL, &cost);
-	    if (ret == -1) {
-		continue;
-	    }			/* node unreachable */
-
-	    /* We must add center node costs (not calculated by Vect_net_shortest_path() ), but
-	     *  only if center and node are not identical, because at the end node cost is add later */
-	    if (node1 != node2)
-		cost += n1cost;
-
-	    G_debug(5,
-		    "Arc nodes: %d %d cost: %f (x old cent: %d old cost %f",
-		    node1, node2, cost, Nodes[node2].center,
-		    Nodes[node2].cost);
-	    if (Nodes[node2].center == -1 || cost < Nodes[node2].cost) {
-		Nodes[node2].cost = cost;
-		Nodes[node2].center = center;
-	    }
+
+    if (turntable_f->answer) {
+	G_message(_("Calculating costs from centers ..."));
+	alloc_from_centers_loop_tt(&Map, Nodes, Centers, ncenters,
+				   tucfield);
+    }
+    else {
+	if (from_centers) {
+	    G_message(_("Calculating costs from centers ..."));
+	    alloc_from_centers(Vect_net_get_graph(&Map), Nodes, Centers, ncenters);
+	}
+	else {
+	    G_message(_("Calculating costs to centers ..."));
+	    alloc_to_centers(Vect_net_get_graph(&Map), Nodes, Centers, ncenters);
 	}
     }
-    G_percent(1, 1, 1);
 
     /* Write arcs to new map */
     if (Vect_open_new(&Out, output->answer, Vect_is_3d(&Map)) < 0)
@@ -255,21 +280,39 @@ int main(int argc, char **argv)
 	if (!(ltype & type)) {
 	    continue;
 	}
-	Vect_get_line_nodes(&Map, line, &node1, &node2);
-	center1 = Nodes[node1].center;
-	center2 = Nodes[node2].center;
-	s1cost = Nodes[node1].cost;
-	s2cost = Nodes[node2].cost;
+
+	if (turntable_f->answer) {
+	    center1 = Nodes[line * 2].center;
+	    center2 = Nodes[line * 2 + 1].center;
+	    s1cost = Nodes[line * 2].cost;
+	    s2cost = Nodes[line * 2 + 1].cost;
+	    n1cost = n2cost = 0;
+	}
+	else {
+	    Vect_get_line_nodes(&Map, line, &node1, &node2);
+	    center1 = Nodes[node1].center;
+	    center2 = Nodes[node2].center;
+	    s1cost = Nodes[node1].cost;
+	    s2cost = Nodes[node2].cost;
+
+	    Vect_net_get_node_cost(&Map, node1, &n1cost);
+	    Vect_net_get_node_cost(&Map, node2, &n2cost);
+	}
+
+	if (from_centers) {
+	    Vect_net_get_line_cost(&Map, line, GV_FORWARD, &e1cost);
+	    Vect_net_get_line_cost(&Map, line, GV_BACKWARD, &e2cost);
+	}
+	else {
+	    /* from node to center */
+	    Vect_net_get_line_cost(&Map, line, GV_FORWARD, &e2cost);
+	    Vect_net_get_line_cost(&Map, line, GV_BACKWARD, &e1cost);
+	}
+
 	G_debug(3, "Line %d:", line);
 	G_debug(3, "Arc centers: %d %d (nodes: %d %d)", center1, center2,
 		node1, node2);
 
-	Vect_net_get_node_cost(&Map, node1, &n1cost);
-	Vect_net_get_node_cost(&Map, node2, &n2cost);
-
-	Vect_net_get_line_cost(&Map, line, GV_FORWARD, &e1cost);
-	Vect_net_get_line_cost(&Map, line, GV_BACKWARD, &e2cost);
-
 	G_debug(3, "  s1cost = %f n1cost = %f e1cost = %f", s1cost, n1cost,
 		e1cost);
 	G_debug(3, "  s2cost = %f n2cost = %f e2cost = %f", s2cost, n2cost,
@@ -292,7 +335,7 @@ int main(int argc, char **argv)
 		Vect_write_line(&Out, ltype, Points, Cats);
 	    }
 	    else {		/* each node in different area */
-		/* Check if direction is reachable */
+		/* Check if line is reachable from center */
 		if (center1 == -1 || n1cost == -1 || e1cost == -1) {	/* closed from first node */
 		    G_debug(3,
 			    "    -> arc is not reachable from 1. node -> alloc to 2. node");
@@ -309,7 +352,6 @@ int main(int argc, char **argv)
 		    Vect_write_line(&Out, ltype, Points, Cats);
 		    continue;
 		}
-
 		/* Now we know that arc is reachable from both sides */
 
 		/* Add costs of node to starting costs */
@@ -348,7 +390,8 @@ int main(int argc, char **argv)
 		    /* First segment */
 		    ret = Vect_line_segment(Points, 0, l1, SPoints);
 		    if (ret == 0) {
-			G_warning(_("Cannot get line segment, segment out of line"));
+			G_warning(_
+				  ("Cannot get line segment, segment out of line"));
 		    }
 		    else {
 			cat = Centers[center1].cat;
@@ -359,7 +402,8 @@ int main(int argc, char **argv)
 		    /* Second segment */
 		    ret = Vect_line_segment(Points, l1, l, SPoints);
 		    if (ret == 0) {
-			G_warning(_("Cannot get line segment, segment out of line"));
+			G_warning(_
+				  ("Cannot get line segment, segment out of line"));
 		    }
 		    else {
 			Vect_reset_cats(Cats);
diff --git a/vector/v.net.alloc/v.net.alloc.html b/vector/v.net.alloc/v.net.alloc.html
index 1c52feb..4a8cbc3 100644
--- a/vector/v.net.alloc/v.net.alloc.html
+++ b/vector/v.net.alloc/v.net.alloc.html
@@ -1,8 +1,8 @@
 <h2>DESCRIPTION</h2>
 
-<em>v.net.alloc</em> allocates subnets for nearest centers 
-(direction from center). center nodes must be opened (costs >= 0).
-Costs of center nodes are used in the calculation. 
+<em>v.net.alloc</em> allocates subnets for nearest centers. Center 
+nodes must be opened (costs >= 0). Costs of center nodes are used in 
+the calculation. 
 <p>
 Costs may be either line lengths, or attributes saved in a 
 database table. These attribute values are taken as costs of whole 
@@ -18,6 +18,23 @@ For areas, costs will be calculated along boundary lines.
 <p>
 The input vector needs to be prepared with <em>v.net operation=connect</em> 
 in order to connect points representing center nodes to the network.
+<p>
+The nearest center can be determined using either costs from the 
+nearest center or costs to the nearest center with option 
+<b>method</b>. See example below.
+<p>
+Application of flag <b>-t</b> enables a turntable support. 
+This flag requires additional parameters <b>turn_layer</b> and <b>turn_cat_layer</b> 
+that are otherwise ignored.
+ The turntable allows 
+to model e.g. trafic code, where some turns may be prohibited. 
+This means that the input layer is expanded by 
+turntable with costs of every possible turn on any possible node 
+(intersection) in both directions. 
+ Turntable can be created by 
+ the <em><a href="v.net.html">v.net</a></em> module. 
+For more information about turns in the vector network analyses see
+<a href="http://grasswiki.osgeo.org/wiki/Turns_in_the_vector_network_analysis">wiki page</a>.
 
 <h2>NOTES</h2>
 
@@ -138,6 +155,44 @@ d.vect myroads_net_alloc_time cat=3 col=yellow layer=1
 d.vect myroads_net_time col=red icon=basic/triangle fcol=green size=12 type=point layer=2
 </pre></div>
 
+<p>Example 3: <em>Differences between costs from centers and costs to centers</em><br>
+
+Each lane of the two-lane road is a one-way road.
+<p>1. Subnetwork allocation from centers:
+<p><img src="v_net_alloc_from_centers.png" alt="v.net.alloc example from centers" border="1">
+<br>
+A center reaches any point following the one-way lanes.
+<p>2. Subnetwork allocation to centers:
+<p><img src="v_net_alloc_to_centers.png" alt="v.net.alloc example to centers" border="1">
+<br>
+Any node reaches reaches the nearest center following the one-way lanes.
+<p>
+In case of an accident, the ambulance should come from the nearest 
+'from' hospital and go to the nearest 'to' hospital.
+
+<div class="code"><pre>
+# North Carolina
+
+# center nodes are hospitals:
+# connect hospitals to streets as layer 2
+v.net input=streets_wake points=hospitals output=streets_hospitals operation=connect thresh=400 arc_layer=1 node_layer=2
+v.to.db map=streets_hospitals layer=1 type=line option=cat columns=cat
+
+# close oneway roads
+v.db.update map=streets_hospitals column=TF_COST value=-1 where="ONE_WAY = 'FT'"
+v.db.update map=streets_hospitals column=FT_COST value=-1 where="ONE_WAY = 'TF'"
+
+# add costs to newly created lines
+v.db.update map=streets_hospitals column=TF_COST value=0 where="cat > 49746"
+v.db.update map=streets_hospitals column=FT_COST value=0 where="cat > 49746"
+
+# from centers
+v.net.alloc in=streets_hospitals out=streets_hospitals_alloc_from center_cats=1-10000 arc_column=FT_COST arc_backward_column=TF_COST
+
+# to centers
+v.net.alloc in=streets_hospitals out=streets_hospitals_alloc_to method=to center_cats=1-10000 arc_column=FT_COST arc_backward_column=TF_COST
+</pre></div>
+
 <h2>SEE ALSO</h2>
 
 <em><a href="d.path.html">d.path</a></em>,
@@ -152,5 +207,13 @@ d.vect myroads_net_time col=red icon=basic/triangle fcol=green size=12 type=poin
 Radim Blazek, ITC-Irst, Trento, Italy<br>
 Documentation: Markus Neteler, Markus Metz
 
+<h3>TURNS SUPPORT</h3>
+
+The turns support was implemnented as part of GRASS GIS turns cost project at Czech Technical University in Prague, Czech Republic.  
+Eliska Kyzlikova, Stepan Turek, Lukas Bocan and Viera Bejdova participated at the project.
+
+Implementation: Stepan Turek 
+Documentation: Lukas Bocan
+Mentor: Martin Landa
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-03-09 23:18:08 +0100 (Wed, 09 Mar 2016) $</i>
diff --git a/vector/v.net.alloc/v_net_alloc_from_centers.png b/vector/v.net.alloc/v_net_alloc_from_centers.png
new file mode 100644
index 0000000..b0a4f56
Binary files /dev/null and b/vector/v.net.alloc/v_net_alloc_from_centers.png differ
diff --git a/vector/v.net.alloc/v_net_alloc_to_centers.png b/vector/v.net.alloc/v_net_alloc_to_centers.png
new file mode 100644
index 0000000..89b68f4
Binary files /dev/null and b/vector/v.net.alloc/v_net_alloc_to_centers.png differ
diff --git a/vector/v.net.allpairs/v.net.allpairs.html b/vector/v.net.allpairs/v.net.allpairs.html
index d47c44c..71ffb9f 100644
--- a/vector/v.net.allpairs/v.net.allpairs.html
+++ b/vector/v.net.allpairs/v.net.allpairs.html
@@ -61,4 +61,4 @@ Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor<br>
 Markus Metz
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-24 15:11:14 +0100 (Wed, 24 Dec 2014) $</i>
diff --git a/vector/v.net.centrality/v.net.centrality.html b/vector/v.net.centrality/v.net.centrality.html
index b4423e3..51109d5 100644
--- a/vector/v.net.centrality/v.net.centrality.html
+++ b/vector/v.net.centrality/v.net.centrality.html
@@ -46,4 +46,4 @@ v.net.centrality input=roads output=roads_cent closeness=closeness \
 Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor
 
-<p><i>Last changed: $Date: 2016-03-28 23:23:07 +0200 (Mon, 28 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-28 23:23:39 +0200 (Mon, 28 Mar 2016) $</i>
diff --git a/vector/v.net.components/v.net.components.html b/vector/v.net.components/v.net.components.html
index 99ebe25..3d7d2c2 100644
--- a/vector/v.net.components/v.net.components.html
+++ b/vector/v.net.components/v.net.components.html
@@ -48,4 +48,4 @@ Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor<br>
 Markus Metz
 
-<p><i>Last changed: $Date: 2016-03-08 21:57:06 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-05 23:25:33 +0100 (Sat, 05 Mar 2016) $</i>
diff --git a/vector/v.net.connectivity/v.net.connectivity.html b/vector/v.net.connectivity/v.net.connectivity.html
index 107170f..18d304f 100644
--- a/vector/v.net.connectivity/v.net.connectivity.html
+++ b/vector/v.net.connectivity/v.net.connectivity.html
@@ -41,4 +41,4 @@ v.net.connectivity input=airtraffic output=connectivity \
 Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-24 14:28:25 +0100 (Wed, 24 Dec 2014) $</i>
diff --git a/vector/v.net.distance/v.net.distance.html b/vector/v.net.distance/v.net.distance.html
index 2531109..c1a2803 100644
--- a/vector/v.net.distance/v.net.distance.html
+++ b/vector/v.net.distance/v.net.distance.html
@@ -160,4 +160,4 @@ Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor<br>
 Markus Metz
 
-<p><i>Last changed: $Date: 2016-03-08 21:57:06 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-03 21:44:45 +0100 (Thu, 03 Mar 2016) $</i>
diff --git a/vector/v.net.flow/v.net.flow.html b/vector/v.net.flow/v.net.flow.html
index e96e69a..8b98230 100644
--- a/vector/v.net.flow/v.net.flow.html
+++ b/vector/v.net.flow/v.net.flow.html
@@ -56,4 +56,4 @@ v.net.flow input=network output=flow cut=cut arc_column=ones \
 Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor
 
-<p><i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-30 15:30:14 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.net.iso/main.c b/vector/v.net.iso/main.c
index 3b8c822..de2afda 100644
--- a/vector/v.net.iso/main.c
+++ b/vector/v.net.iso/main.c
@@ -4,6 +4,7 @@
  *  MODULE:       v.net.iso
  *  
  *  AUTHOR(S):    Radim Blazek
+ *                Stepan Turek <stepan.turek seznam.cz> (turns support)
  *                
  *  PURPOSE:      Split net to bands between isolines.
  *
@@ -43,14 +44,14 @@ typedef struct
 
 int main(int argc, char **argv)
 {
-    int i, ret, centre, line, centre1, centre2;
+    int i, j, ret, centre, line, centre1, centre2, tfield, tucfield;
     int nlines, nnodes, type, ltype, afield, nfield, geo, cat;
     int node, node1, node2;
     double cost, e1cost, e2cost, n1cost, n2cost, s1cost, s2cost, l, l1;
     struct Option *map, *output;
     struct Option *afield_opt, *nfield_opt, *afcol, *abcol, *ncol, *type_opt,
-	*term_opt, *cost_opt;
-    struct Flag *geo_f;
+	*term_opt, *cost_opt, *tfield_opt, *tucfield_opt;
+    struct Flag *geo_f, *turntable_f;
     struct GModule *module;
     struct Map_info Map, Out;
     struct cat_list *catlist;
@@ -81,19 +82,38 @@ int main(int argc, char **argv)
     map = G_define_standard_option(G_OPT_V_INPUT);
     output = G_define_standard_option(G_OPT_V_OUTPUT);
 
+    term_opt = G_define_standard_option(G_OPT_V_CATS);
+    term_opt->key = "center_cats";
+    term_opt->required = YES;
+    term_opt->description =
+	_("Categories of centers (points on nodes) to which net "
+	  "will be allocated, "
+	  "layer for this categories is given by nlayer option");
+
+    cost_opt = G_define_option();
+    cost_opt->key = "costs";
+    cost_opt->type = TYPE_INTEGER;
+    cost_opt->multiple = YES;
+    cost_opt->required = YES;
+    cost_opt->description = _("Costs for isolines");
+
     afield_opt = G_define_standard_option(G_OPT_V_FIELD);
     afield_opt->key = "arc_layer";
+    afield_opt->answer = "1";
+    afield_opt->required = YES;
     afield_opt->label = _("Arc layer");
 
     type_opt = G_define_standard_option(G_OPT_V_TYPE);
     type_opt->key = "arc_type";
     type_opt->options = "line,boundary";
     type_opt->answer = "line,boundary";
+    type_opt->required = YES;
     type_opt->label = _("Arc type");
 
     nfield_opt = G_define_standard_option(G_OPT_V_FIELD);
     nfield_opt->key = "node_layer";
     nfield_opt->answer = "2";
+    nfield_opt->required = YES;
     nfield_opt->label = _("Node layer");
 
     afcol = G_define_standard_option(G_OPT_DB_COLUMN);
@@ -112,20 +132,26 @@ int main(int argc, char **argv)
     ncol->description = _("Node cost column (number)");
     ncol->guisection = _("Cost");
 
-    term_opt = G_define_standard_option(G_OPT_V_CATS);
-    term_opt->key = "center_cats";
-    term_opt->required = YES;
-    term_opt->description =
-	_("Categories of centers (points on nodes) to which net "
-	  "will be allocated, "
-	  "layer for this categories is given by nlayer option");
-
-    cost_opt = G_define_option();
-    cost_opt->key = "costs";
-    cost_opt->type = TYPE_INTEGER;
-    cost_opt->multiple = YES;
-    cost_opt->required = YES;
-    cost_opt->description = _("Costs for isolines");
+    turntable_f = G_define_flag();
+    turntable_f->key = 't';
+    turntable_f->description = _("Use turntable");
+    turntable_f->guisection = _("Turntable");
+
+    tfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tfield_opt->key = "turn_layer";
+    tfield_opt->answer = "3";
+    tfield_opt->label = _("Layer with turntable");
+    tfield_opt->description =
+	_("Relevant only with -t flag");
+    tfield_opt->guisection = _("Turntable");
+
+    tucfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tucfield_opt->key = "turn_cat_layer";
+    tucfield_opt->answer = "4";
+    tucfield_opt->label = _("Layer with unique categories used in turntable");
+    tucfield_opt->description =
+	_("Relevant only with -t flag");
+    tucfield_opt->guisection = _("Turntable");
 
     geo_f = G_define_flag();
     geo_f->key = 'g';
@@ -142,8 +168,6 @@ int main(int argc, char **argv)
     SPoints = Vect_new_line_struct();
 
     type = Vect_option_to_types(type_opt);
-    afield = atoi(afield_opt->answer);
-    nfield = atoi(nfield_opt->answer);
 
     catlist = Vect_new_cat_list();
     Vect_str_to_cat_list(term_opt->answer, catlist);
@@ -174,7 +198,8 @@ int main(int argc, char **argv)
 
     /* Should not happen: */
     if (niso < 2)
-	G_warning(_("Not enough costs, everything reachable falls to first band"));
+	G_warning(_
+		  ("Not enough costs, everything reachable falls to first band"));
 
     if (geo_f->answer)
 	geo = 1;
@@ -182,13 +207,22 @@ int main(int argc, char **argv)
 	geo = 0;
 
     Vect_set_open_level(2);
-
     if (Vect_open_old(&Map, map->answer, "") < 0)
 	G_fatal_error(_("Unable to open vector map <%s>"), map->answer);
 
+    afield = Vect_get_field_number(&Map, afield_opt->answer);
+    nfield = Vect_get_field_number(&Map, nfield_opt->answer);
+    tfield = Vect_get_field_number(&Map, tfield_opt->answer);
+    tucfield = Vect_get_field_number(&Map, tucfield_opt->answer);
+
     /* Build graph */
-    Vect_net_build_graph(&Map, type, afield, nfield, afcol->answer,
-			 abcol->answer, ncol->answer, geo, 0);
+    if (turntable_f->answer)
+	Vect_net_ttb_build_graph(&Map, type, afield, nfield, tfield, tucfield,
+				 afcol->answer, abcol->answer, ncol->answer,
+				 geo, 0);
+    else
+	Vect_net_build_graph(&Map, type, afield, nfield, afcol->answer,
+			     abcol->answer, ncol->answer, geo, 0);
 
     nnodes = Vect_get_num_nodes(&Map);
     nlines = Vect_get_num_lines(&Map);
@@ -200,7 +234,9 @@ int main(int argc, char **argv)
 	    continue;
 
 	Vect_read_line(&Map, Points, Cats, i);
-	node = Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0], 0, 0);
+	node =
+	    Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0], 0,
+			   0);
 	if (!node) {
 	    G_warning(_("Point is not connected to the network"));
 	    continue;
@@ -231,12 +267,23 @@ int main(int argc, char **argv)
     G_message(_("Number of centres: %d (nlayer %d)"), ncentres, nfield);
 
     if (ncentres == 0)
-	G_warning(_("Not enough centres for selected nlayer. Nothing will be allocated."));
+	G_warning(_
+		  ("Not enough centres for selected nlayer. Nothing will be allocated."));
 
     /* alloc and reset space for all nodes */
-    Nodes = (NODE *) G_calloc((nnodes + 1), sizeof(NODE));
-    for (i = 1; i <= nnodes; i++) {
-	Nodes[i].centre = -1;
+    if (turntable_f->answer) {
+	/* if turntable is used we are looking for lines as destinations, instead of the intersections (nodes) */
+	Nodes = (NODE *) G_calloc((nlines * 2 + 2), sizeof(NODE));
+	for (i = 2; i <= (nlines * 2 + 2); i++) {
+	    Nodes[i].centre = -1;/* NOTE: first two items of Nodes are not used */
+	}
+
+    }
+    else {
+	Nodes = (NODE *) G_calloc((nnodes + 1), sizeof(NODE));
+	for (i = 1; i <= nnodes; i++) {
+	    Nodes[i].centre = -1;
+	}
     }
 
     apnts1 = 1;
@@ -252,32 +299,74 @@ int main(int argc, char **argv)
 	G_debug(2, "centre = %d node = %d cat = %d", centre, node1,
 		Centers[centre].cat);
 	G_message(_("Calculating costs from centre %d..."), centre + 1);
-	for (node2 = 1; node2 <= nnodes; node2++) {
-	    G_percent(node2, nnodes, 1);
-	    G_debug(5, "  node1 = %d node2 = %d", node1, node2);
-	    Vect_net_get_node_cost(&Map, node2, &n2cost);
-	    if (n2cost == -1) {
-		continue;
-	    }			/* closed, left it as not attached */
-
-	    ret = Vect_net_shortest_path(&Map, node1, node2, NULL, &cost);
-	    if (ret == -1) {
-		continue;
-	    }			/* node unreachable */
-
-	    /* We must add centre node costs (not calculated by Vect_net_shortest_path() ), but
-	     *  only if centre and node are not identical, because at the end node cost is add later */
-	    if (node1 != node2)
-		cost += n1cost;
-	    G_debug(5,
-		    "Arc nodes: %d %d cost: %f (x old cent: %d old cost %f",
-		    node1, node2, cost, Nodes[node2].centre,
-		    Nodes[node2].cost);
-	    if (Nodes[node2].centre == -1 || cost < Nodes[node2].cost) {
-		Nodes[node2].cost = cost;
-		Nodes[node2].centre = centre;
+	if (turntable_f->answer)
+	    for (line = 1; line <= nlines; line++) {
+		G_debug(5, "  node1 = %d line = %d", node1, line);
+		Vect_net_get_node_cost(&Map, line, &n2cost);
+		/* closed, left it as not attached */
+
+		if (Vect_read_line(&Map, Points, Cats, line) < 0)
+		    continue;
+		if (Vect_get_line_type(&Map, line) != GV_LINE)
+		    continue;
+		if (!Vect_cat_get(Cats, tucfield, &cat))
+		    continue;
+
+		for (j = 0; j < 2; j++) {
+		    if (j == 1)
+			cat *= -1;
+
+		    ret =
+			Vect_net_ttb_shortest_path(&Map, node1, 0, cat, 1,
+						   tucfield, NULL,
+						   &cost);
+		    if (ret == -1) {
+			continue;
+		    }		/* node unreachable */
+
+		    /* We must add centre node costs (not calculated by Vect_net_shortest_path() ), but
+	             *  only if centre and node are not identical, because at the end node cost is add later */
+		    if (ret != 1)
+			cost += n1cost;
+
+		    G_debug(5,
+			    "Arc nodes: %d %d cost: %f (x old cent: %d old cost %f",
+			    node1, line, cost, Nodes[line * 2 + j].centre,
+			    Nodes[line * 2 + j].cost);
+		    if (Nodes[line * 2 + j].centre == -1 ||
+			cost < Nodes[line * 2 + j].cost) {
+			Nodes[line * 2 + j].cost = cost;
+			Nodes[line * 2 + j].centre = centre;
+		    }
+		}
+	    }
+	else
+	    for (node2 = 1; node2 <= nnodes; node2++) {
+		G_percent(node2, nnodes, 1);
+		G_debug(5, "  node1 = %d node2 = %d", node1, node2);
+		Vect_net_get_node_cost(&Map, node2, &n2cost);
+		if (n2cost == -1) {
+		    continue;
+		}		/* closed, left it as not attached */
+
+		ret = Vect_net_shortest_path(&Map, node1, node2, NULL, &cost);
+		if (ret == -1) {
+		    continue;
+		}		/* node unreachable */
+
+		/* We must add centre node costs (not calculated by Vect_net_shortest_path() ), but
+		 *  only if centre and node are not identical, because at the end node cost is add later */
+		if (node1 != node2)
+		    cost += n1cost;
+		G_debug(5,
+			"Arc nodes: %d %d cost: %f (x old cent: %d old cost %f",
+			node1, node2, cost, Nodes[node2].centre,
+			Nodes[node2].cost);
+		if (Nodes[node2].centre == -1 || cost < Nodes[node2].cost) {
+		    Nodes[node2].cost = cost;
+		    Nodes[node2].centre = centre;
+		}
 	    }
-	}
     }
 
     /* Write arcs to new map */
@@ -290,31 +379,42 @@ int main(int argc, char **argv)
     nlines = Vect_get_num_lines(&Map);
     for (line = 1; line <= nlines; line++) {
 	G_percent(line, nlines, 2);
-	
+
 	ltype = Vect_read_line(&Map, Points, NULL, line);
 	if (!(ltype & type)) {
 	    continue;
 	}
-	Vect_get_line_nodes(&Map, line, &node1, &node2);
-	centre1 = Nodes[node1].centre;
-	centre2 = Nodes[node2].centre;
-	s1cost = Nodes[node1].cost;
-	s2cost = Nodes[node2].cost;
-	l = Vect_line_length(Points);
 
+	l = Vect_line_length(Points);
 	if (l == 0)
 	    continue;
 
-	G_debug(3, "Line %d : length = %f", line, l);
-	G_debug(3, "Arc centres: %d %d (nodes: %d %d)", centre1, centre2,
-		node1, node2);
+	if (turntable_f->answer) {
+	    centre1 = Nodes[line * 2].centre;
+	    centre2 = Nodes[line * 2 + 1].centre;
+	    s1cost = Nodes[line * 2].cost;
+	    s2cost = Nodes[line * 2 + 1].cost;
+	    n1cost = n2cost = 0;
+	}
+	else {
+	    Vect_get_line_nodes(&Map, line, &node1, &node2);
+	    centre1 = Nodes[node1].centre;
+	    centre2 = Nodes[node2].centre;
+	    s1cost = Nodes[node1].cost;
+	    s2cost = Nodes[node2].cost;
 
-	Vect_net_get_node_cost(&Map, node1, &n1cost);
-	Vect_net_get_node_cost(&Map, node2, &n2cost);
+	    Vect_net_get_node_cost(&Map, node1, &n1cost);
+	    Vect_net_get_node_cost(&Map, node2, &n2cost);
+
+	}
 
 	Vect_net_get_line_cost(&Map, line, GV_FORWARD, &e1cost);
 	Vect_net_get_line_cost(&Map, line, GV_BACKWARD, &e2cost);
 
+	G_debug(3, "Line %d : length = %f", line, l);
+	G_debug(3, "Arc centres: %d %d (nodes: %d %d)", centre1, centre2,
+		node1, node2);
+
 	G_debug(3, "  s1cost = %f n1cost = %f e1cost = %f", s1cost, n1cost,
 		e1cost);
 	G_debug(3, "  s2cost = %f n2cost = %f e2cost = %f", s2cost, n2cost,
@@ -514,7 +614,8 @@ int main(int argc, char **argv)
 		    Vect_line_segment(Points, pnts1[i - 1].distance,
 				      pnts1[i].distance, SPoints);
 		if (ret == 0) {
-		    G_warning(_("Cannot get line segment, segment out of line"));
+		    G_warning(_
+			      ("Cannot get line segment, segment out of line"));
 		}
 		else {
 		    Vect_reset_cats(Cats);
diff --git a/vector/v.net.iso/v.net.iso.html b/vector/v.net.iso/v.net.iso.html
index 2982ff6..7021b9d 100644
--- a/vector/v.net.iso/v.net.iso.html
+++ b/vector/v.net.iso/v.net.iso.html
@@ -15,8 +15,18 @@ Supported are cost assignments for both arcs and nodes,
 and also different costs for both directions of a vector line. 
 For areas, costs will be calculated along boundary lines.
 <p>
-The input vector needs to be prepared with <em>v.net operation=connect</em> 
-in order to connect points representing center nodes to the network.
+Application of flag <b>-t</b> enables a turntable support. 
+This flag requires additional parameters <b>turn_layer</b> and <b>turn_cat_layer</b> 
+that are otherwise ignored.
+ The turntable allows 
+to model e.g. trafic code, where some turns may be prohibited. 
+This means that the input layer is expanded by 
+turntable with costs of every possible turn on any possible node 
+(intersection) in both directions. 
+ Turntable can be created by 
+ the <em><a href="v.net.html">v.net</a></em> module. 
+For more information about turns in the vector network analyses see
+<a href="http://grasswiki.osgeo.org/wiki/Turns_in_the_vector_network_analysis">wiki page</a>.
 
 <h2>NOTES</h2>
 
@@ -172,4 +182,13 @@ d.vect myroads_net col=red icon=basic/triangle fcol=green size=12 layer=2
 Radim Blazek, ITC-Irst, Trento, Italy<br>
 Documentation: Markus Neteler, Markus Metz
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<h3>TURNS SUPPORT</h3>
+
+The turns support was implemnented as part of GRASS GIS turns cost project at Czech Technical University in Prague, Czech Republic.  
+Eliska Kyzlikova, Stepan Turek, Lukas Bocan and Viera Bejdova participated at the project.
+
+Implementation: Stepan Turek 
+Documentation: Lukas Bocan
+Mentor: Martin Landa
+
+<p><i>Last changed: $Date: 2014-12-24 15:27:04 +0100 (Wed, 24 Dec 2014) $</i>
diff --git a/vector/v.net.path/main.c b/vector/v.net.path/main.c
index 4052eca..cdc563c 100644
--- a/vector/v.net.path/main.c
+++ b/vector/v.net.path/main.c
@@ -4,7 +4,8 @@
  * MODULE:       v.net.path
  * 
  * AUTHOR(S):    Radim Blazek
- *               
+ *               Stepan Turek <stepan.turek seznam.cz> (turns support)
+ *
  * PURPOSE:      Shortest path on vector network
  *               
  * COPYRIGHT:    (C) 2002, 2014 by the GRASS Development Team
@@ -20,17 +21,18 @@
 #include <grass/vector.h>
 #include <grass/glocale.h>
 
-int path(struct Map_info *, struct Map_info *, char *, int, double, int);
+int path(struct Map_info *, struct Map_info *, char *, int, double, int,
+	 int, int);
 
 int main(int argc, char **argv)
 {
-    struct Option *input_opt, *output_opt, *afield_opt, *nfield_opt, *afcol,
-	*abcol, *ncol, *type_opt;
+    struct Option *input_opt, *output_opt, *afield_opt, *nfield_opt,
+	*tfield_opt, *tucfield_opt, *afcol, *abcol, *ncol, *type_opt;
     struct Option *max_dist, *file_opt;
-    struct Flag *geo_f, *segments_f;
+    struct Flag *geo_f, *segments_f, *turntable_f;
     struct GModule *module;
     struct Map_info In, Out;
-    int type, afield, nfield, geo;
+    int type, afield, nfield, tfield, tucfield, geo;
     double maxdist;
 
     /* Initialize the GIS calls */
@@ -45,19 +47,23 @@ int main(int argc, char **argv)
     input_opt = G_define_standard_option(G_OPT_V_INPUT);
     output_opt = G_define_standard_option(G_OPT_V_OUTPUT);
 
-    type_opt = G_define_standard_option(G_OPT_V_TYPE);
-    type_opt->options = "line,boundary";
-    type_opt->answer = "line,boundary";
-    type_opt->label = _("Arc type");
-
     afield_opt = G_define_standard_option(G_OPT_V_FIELD);
     afield_opt->key = "arc_layer";
     afield_opt->answer = "1";
+    afield_opt->required = YES;
     afield_opt->label = _("Arc layer");
 
+    type_opt = G_define_standard_option(G_OPT_V_TYPE);
+    type_opt->key = "arc_type";
+    type_opt->options = "line,boundary";
+    type_opt->answer = "line,boundary";
+    type_opt->required = YES;
+    type_opt->label = _("Arc type");
+
     nfield_opt = G_define_standard_option(G_OPT_V_FIELD);
     nfield_opt->key = "node_layer";
     nfield_opt->answer = "2";
+    nfield_opt->required = YES;
     nfield_opt->label = _("Node layer");
 
     file_opt = G_define_standard_option(G_OPT_F_INPUT);
@@ -99,6 +105,27 @@ int main(int argc, char **argv)
 			      "and error message is printed. To speed up the process, keep this "
 			      "value as low as possible.");
 
+    turntable_f = G_define_flag();
+    turntable_f->key = 't';
+    turntable_f->description = _("Use turntable");
+    turntable_f->guisection = _("Turntable");
+
+    tfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tfield_opt->key = "turn_layer";
+    tfield_opt->answer = "3";
+    tfield_opt->label = _("Layer with turntable");
+    tfield_opt->description =
+	_("Relevant only with -t flag");
+    tfield_opt->guisection = _("Turntable");
+
+    tucfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tucfield_opt->key = "turn_cat_layer";
+    tucfield_opt->answer = "4";
+    tucfield_opt->label = _("Layer with unique categories used in turntable");
+    tucfield_opt->description =
+	_("Relevant only with -t flag");
+    tucfield_opt->guisection = _("Turntable");
+
     geo_f = G_define_flag();
     geo_f->key = 'g';
     geo_f->description =
@@ -113,8 +140,6 @@ int main(int argc, char **argv)
 	exit(EXIT_FAILURE);
 
     type = Vect_option_to_types(type_opt);
-    afield = atoi(afield_opt->answer);
-    nfield = atoi(nfield_opt->answer);
     maxdist = atof(max_dist->answer);
 
     if (geo_f->answer) {
@@ -132,6 +157,11 @@ int main(int argc, char **argv)
     if (Vect_open_old(&In, input_opt->answer, "") < 0)
 	G_fatal_error(_("Unable to open vector map <%s>"), input_opt->answer);
 
+    afield = Vect_get_field_number(&In, afield_opt->answer);
+    nfield = Vect_get_field_number(&In, nfield_opt->answer);
+    tfield = Vect_get_field_number(&In, tfield_opt->answer);
+    tucfield = Vect_get_field_number(&In, tucfield_opt->answer);
+
     if (1 > Vect_open_new(&Out, output_opt->answer, Vect_is_3d(&In))) {
 	Vect_close(&In);
 	G_fatal_error(_("Unable to create vector map <%s>"),
@@ -139,10 +169,16 @@ int main(int argc, char **argv)
     }
     Vect_hist_command(&Out);
 
-    Vect_net_build_graph(&In, type, afield, nfield, afcol->answer,
-			 abcol->answer, ncol->answer, geo, 0);
+    if (turntable_f->answer)
+	Vect_net_ttb_build_graph(&In, type, afield, nfield, tfield, tucfield,
+				 afcol->answer, abcol->answer, ncol->answer,
+				 geo, 0);
+    else
+	Vect_net_build_graph(&In, type, afield, nfield, afcol->answer,
+			     abcol->answer, ncol->answer, geo, 0);
 
-    path(&In, &Out, file_opt->answer, nfield, maxdist, segments_f->answer);
+    path(&In, &Out, file_opt->answer, nfield, maxdist, segments_f->answer,
+	 tucfield, turntable_f->answer);
 
     Vect_close(&In);
 
diff --git a/vector/v.net.path/path.c b/vector/v.net.path/path.c
index a45023c..d5a2625 100644
--- a/vector/v.net.path/path.c
+++ b/vector/v.net.path/path.c
@@ -24,7 +24,7 @@ typedef struct
 int cmp(const void *, const void *);
 
 int path(struct Map_info *In, struct Map_info *Out, char *filename,
-	 int nfield, double maxdist, int segments)
+	 int nfield, double maxdist, int segments, int tucfield, int use_ttb)
 {
     FILE *in_file = NULL;
     int i, nlines, line, npoints, type, cat, id, fcat, tcat, fline, tline,
@@ -174,7 +174,9 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
 	    else {
 		fline = Citem->line;
 		type = Vect_read_line(In, Points, NULL, fline);
-		fnode = Vect_find_node(In, Points->x[0], Points->y[0], Points->z[0], 0, 0);
+		fnode =
+		    Vect_find_node(In, Points->x[0], Points->y[0],
+				   Points->z[0], 0, 0);
 		/* Vect_get_line_nodes(In, fline, &fnode, NULL); */
 	    }
 	    G_debug(3, "from: cat = %5d point(line) = %5d node = %5d", fcat,
@@ -194,14 +196,23 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
 	    else {
 		tline = Citem->line;
 		type = Vect_read_line(In, Points, NULL, tline);
-		tnode = Vect_find_node(In, Points->x[0], Points->y[0], Points->z[0], 0, 0);
+		tnode =
+		    Vect_find_node(In, Points->x[0], Points->y[0],
+				   Points->z[0], 0, 0);
 		/* Vect_get_line_nodes(In, tline, &tnode, NULL); */
 	    }
 	    G_debug(3, "to  : cat = %5d point(line) = %5d node = %5d", tcat,
 		    tline, tnode);
 
 	    if (sp != SP_NOPOINT) {
-		ret = Vect_net_shortest_path(In, fnode, tnode, AList, &cost);
+		if (use_ttb)
+		    ret =
+			Vect_net_ttb_shortest_path(In, fnode, 0, tnode, 0,
+						   tucfield, AList, &cost);
+		else
+		    ret =
+			Vect_net_shortest_path(In, fnode, tnode, AList,
+					       &cost);
 
 		if (ret == -1) {
 		    sp = SP_UNREACHABLE;
@@ -245,8 +256,9 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
 			    else
 				Vect_append_points(OPoints, Points,
 						   GV_BACKWARD);
+			    OPoints->n_points--;
 			}
-
+			OPoints->n_points++;
 			Vect_write_line(Out, GV_LINE, OPoints, Cats);
 		    }
 		}
@@ -254,11 +266,21 @@ int path(struct Map_info *In, struct Map_info *Out, char *filename,
 	}
 	else {			/* INPUT_MODE_COOR */
 	    fcat = tcat = 0;
-	    ret =
-		Vect_net_shortest_path_coor(In, fx, fy, 0.0, tx, ty, 0.0,
-					    maxdist, maxdist, &cost, OPoints,
-					    AList, FPoints, TPoints, &fdist,
-					    &tdist);
+
+	    if (use_ttb)
+		ret =
+		    Vect_net_ttb_shortest_path_coor(In, fx, fy, 0.0, tx, ty,
+						    0.0, maxdist, maxdist,
+						    tucfield, &cost,
+						    OPoints, AList, NULL,
+						    FPoints, TPoints, &fdist,
+						    &tdist);
+	    else
+		ret =
+		    Vect_net_shortest_path_coor(In, fx, fy, 0.0, tx, ty, 0.0,
+						maxdist, maxdist, &cost,
+						OPoints, AList, NULL, FPoints,
+						TPoints, &fdist, &tdist);
 
 	    if (ret == 0) {
 		sp = SP_UNREACHABLE;
diff --git a/vector/v.net.path/v.net.path.html b/vector/v.net.path/v.net.path.html
index 5792a54..54777b4 100644
--- a/vector/v.net.path/v.net.path.html
+++ b/vector/v.net.path/v.net.path.html
@@ -67,6 +67,22 @@ The attribute table will contain the following attributes:
     <li><tt>tdist</tt> - the distance from the network to second point</li>
 </ul>
 
+<p>
+
+Application of flag <b>-t</b> enables a turntable support. 
+This flag requires additional parameters <b>turn_layer</b> and <b>turn_cat_layer</b> 
+that are otherwise ignored.
+ The turntable allows 
+to model e.g. trafic code, where some turns may be prohibited. 
+This means that the input layer is expanded by 
+turntable with costs of every possible turn on any possible node 
+(intersection) in both directions. 
+ Turntable can be created by 
+ the <em><a href="v.net.html">v.net</a></em> module. 
+For more information about turns in the vector network analyses see
+<a href="http://grasswiki.osgeo.org/wiki/Turns_in_the_vector_network_analysis">wiki page</a>.
+
+
 <h2>NOTES</h2>
 Nodes and arcs can be closed using <tt>cost = -1</tt>. 
 <p>If the cost columns <b>arc_column</b>, <b>arc_backward_column</b> and <b>node_column</b> are not
@@ -176,5 +192,14 @@ d.vect startend disp=cat type=point lsize=14 layer=2
 Radim Blazek, ITC-Irst, Trento, Italy<br>
 Documentation: Markus Neteler, Markus Metz
 
+<h3>TURNS SUPPORT</h3>
+
+The turns support was implemnented as part of GRASS GIS turns cost project at Czech Technical University in Prague, Czech Republic.
+
+<p>
+Implementation: Stepan Turek<br>
+Documentation: Lukas Bocan, Eliska Kyzlikova, Viera Bejdova<br>
+Mentor: Martin Landa
+
 <p>
-<i>Last changed: $Date: 2014-12-24 15:53:17 +0100 (Wed, 24 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-24 15:51:58 +0100 (Wed, 24 Dec 2014) $</i>
diff --git a/vector/v.net.salesman/main.c b/vector/v.net.salesman/main.c
index abef33c..593e072 100644
--- a/vector/v.net.salesman/main.c
+++ b/vector/v.net.salesman/main.c
@@ -4,7 +4,8 @@
  *  MODULE:       v.net.salesman
  *  
  *  AUTHOR(S):    Radim Blazek, Markus Metz
- *                
+ *                Stepan Turek <stepan.turek seznam.cz> (turns support)
+ *               
  *  PURPOSE:      Create a cycle connecting given nodes.
  *
  *  COPYRIGHT:    (C) 2001-2011,2014 by the GRASS Development Team
@@ -98,12 +99,12 @@ int tsp_list_append(struct ilist *list, int val)
 int main(int argc, char **argv)
 {
     int i, j, k, ret, city, city1;
-    int nlines, type, ltype, afield, tfield, geo, cat;
+    int nlines, type, ltype, afield, nfield, tfield, tucfield, geo, cat;
     int node, node1, node2, line;
-    double **cost_cache;			/* pointer to array of pointers to arrays of cached costs */
-    struct Option *map, *output, *afield_opt, *tfield_opt, *afcol, *abcol,
-	*seq, *type_opt, *term_opt;
-    struct Flag *geo_f;
+    double **cost_cache;	/* pointer to array of pointers to arrays of cached costs */
+    struct Option *map, *output, *afield_opt, *nfield_opt, *afcol, *abcol,
+	*seq, *type_opt, *term_opt, *tfield_opt, *tucfield_opt;
+    struct Flag *geo_f, *turntable_f;
     struct GModule *module;
     struct Map_info Map, Out;
     struct ilist *TList;	/* list of terminal nodes */
@@ -135,44 +136,71 @@ int main(int argc, char **argv)
     map = G_define_standard_option(G_OPT_V_INPUT);
     output = G_define_standard_option(G_OPT_V_OUTPUT);
 
+    term_opt = G_define_standard_option(G_OPT_V_CATS);
+    term_opt->key = "center_cats";
+    term_opt->required = YES;
+    term_opt->description = _("Categories of points ('cities') on nodes "
+			      "(layer is specified by nlayer)");
+
     afield_opt = G_define_standard_option(G_OPT_V_FIELD);
     afield_opt->key = "arc_layer";
+    afield_opt->answer = "1";
+    afield_opt->required = YES;
     afield_opt->label = _("Arc layer");
 
     type_opt = G_define_standard_option(G_OPT_V_TYPE);
     type_opt->key = "arc_type";
     type_opt->options = "line,boundary";
     type_opt->answer = "line,boundary";
-    type_opt->description = _("Arc type");
+    type_opt->required = YES;
+    type_opt->label = _("Arc type");
 
-    tfield_opt = G_define_standard_option(G_OPT_V_FIELD);
-    tfield_opt->key = "node_layer";
-    tfield_opt->answer = "2";
-    tfield_opt->label = _("Node layer (used for cities)");
+    nfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    nfield_opt->key = "node_layer";
+    nfield_opt->answer = "2";
+    nfield_opt->required = YES;
+    nfield_opt->label = _("Node layer (used for cities)");
 
     afcol = G_define_option();
     afcol->key = "arc_column";
     afcol->type = TYPE_STRING;
     afcol->required = NO;
     afcol->description = _("Arc forward/both direction(s) cost column (number)");
+    afcol->guisection = _("Cost");
 
     abcol = G_define_option();
     abcol->key = "arc_backward_column";
     abcol->type = TYPE_STRING;
+    abcol->required = NO; 
     abcol->required = NO;
     abcol->description = _("EXPERIMENTAL: Arc backward direction cost column (number)");
+    abcol->guisection = _("Cost");
+
+    turntable_f = G_define_flag();
+    turntable_f->key = 't';
+    turntable_f->description = _("Use turntable");
+    turntable_f->guisection = _("Turntable");
+
+    tfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tfield_opt->key = "turn_layer";
+    tfield_opt->answer = "3";
+    tfield_opt->label = _("Layer with turntable");
+    tfield_opt->description = _("Relevant only with -t flag");
+    tfield_opt->guisection = _("Turntable");
+
+    tucfield_opt = G_define_standard_option(G_OPT_V_FIELD);
+    tucfield_opt->key = "turn_cat_layer";
+    tucfield_opt->answer = "4";
+    tucfield_opt->label = _("Layer with unique categories used in turntable");
+    tucfield_opt->description = _("Relevant only with -t flag");
+    tucfield_opt->guisection = _("Turntable");
 
     seq = G_define_standard_option(G_OPT_F_OUTPUT);
     seq->key = "sequence";
     seq->type = TYPE_STRING;
     seq->required = NO;
-    seq->description = _("Name for output file holding node sequence (\"-\" for stdout)");
-
-    term_opt = G_define_standard_option(G_OPT_V_CATS);
-    term_opt->key = "center_cats";
-    term_opt->required = YES;
-    term_opt->description = _("Categories of points ('cities') on nodes "
-			      "(layer is specified by nlayer)");
+    seq->description =
+	_("Name for output file holding node sequence (\"-\" for stdout)");
 
     geo_f = G_define_flag();
     geo_f->key = 'g';
@@ -186,7 +214,6 @@ int main(int argc, char **argv)
     Points = Vect_new_line_struct();
 
     type = Vect_option_to_types(type_opt);
-    afield = atoi(afield_opt->answer);
 
     TList = Vect_new_list();
     List = Vect_new_list();
@@ -194,7 +221,6 @@ int main(int argc, char **argv)
     StNodes = Vect_new_list();
 
     Clist = Vect_new_cat_list();
-    tfield = atoi(tfield_opt->answer);
     Vect_str_to_cat_list(term_opt->answer, Clist);
 
     dstr = G_getenv_nofatal("DEBUG");
@@ -223,6 +249,12 @@ int main(int argc, char **argv)
     if (Vect_open_old(&Map, map->answer, "") < 0)
 	G_fatal_error(_("Unable to open vector map <%s>"), map->answer);
 
+
+    afield = Vect_get_field_number(&Map, afield_opt->answer);
+    nfield = Vect_get_field_number(&Map, nfield_opt->answer);
+    tfield = Vect_get_field_number(&Map, tfield_opt->answer);
+    tucfield = Vect_get_field_number(&Map, tucfield_opt->answer);
+
     nnodes = Vect_get_num_nodes(&Map);
     nlines = Vect_get_num_lines(&Map);
 
@@ -234,16 +266,20 @@ int main(int argc, char **argv)
 	    continue;
 
 	Vect_read_line(&Map, Points, Cats, i);
-	if (!(Vect_cat_get(Cats, tfield, &cat)))
+
+	if (!(Vect_cat_get(Cats, nfield, &cat)))
 	    continue;
 	if (Vect_cat_in_cat_list(cat, Clist)) {
-	    node = Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0], 0, 0);
+	    node =
+		Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0],
+			       0, 0);
 	    if (!node) {
 		G_warning(_("Point is not connected to the network"));
 	    }
 	    else
 		tsp_list_append(TList, node);
 	}
+
     }
 
     ncities = TList->n_values;
@@ -264,9 +300,9 @@ int main(int argc, char **argv)
     for (i = 0; i < ncities; i++) {
 	costs[i] = (COST *) G_malloc(ncities * sizeof(COST));
     }
-    cost_cache = (double **) G_malloc(ncities * sizeof(double *));
+    cost_cache = (double **)G_malloc(ncities * sizeof(double *));
     for (i = 0; i < ncities; i++) {
-	cost_cache[i] = (double *) G_malloc(ncities * sizeof(double));
+	cost_cache[i] = (double *)G_malloc(ncities * sizeof(double));
     }
     if (abcol->answer) {
 	bcosts = (COST **) G_malloc(ncities * sizeof(COST *));
@@ -280,8 +316,12 @@ int main(int argc, char **argv)
     cycle = (int *)G_malloc((ncities + 1) * sizeof(int));	/* + 1 is for output cycle */
 
     /* Build graph */
-    Vect_net_build_graph(&Map, type, afield, 0, afcol->answer, abcol->answer, NULL,
-			 geo, 0);
+    if (turntable_f->answer)
+	Vect_net_ttb_build_graph(&Map, type, afield, 0, tfield, tucfield,
+				 afcol->answer, abcol->answer, NULL, geo, 0);
+    else
+	Vect_net_build_graph(&Map, type, afield, 0, afcol->answer,
+			     abcol->answer, NULL, geo, 0);
 
     /* Create sorted lists of costs */
     /* for a large number of cities this will become very slow, can not be fixed */
@@ -294,33 +334,46 @@ int main(int argc, char **argv)
 	    if (i == j)
 		continue;
 
-	    ret =
-		Vect_net_shortest_path(&Map, cities[i], cities[j], NULL,
-				       &cost);
+	    if (turntable_f->answer)
+		ret =
+		    Vect_net_ttb_shortest_path(&Map, cities[i], 0, cities[j],
+					       0, tucfield, NULL, &cost);
+	    else
+		ret =
+		    Vect_net_shortest_path(&Map, cities[i], cities[j], NULL,
+					   &cost);
 
 	    if (ret == -1) {
 		double coor_x, coor_y, coor_z;
 		int cat1, cat2;
-		
-		Vect_get_node_coor(&Map, cities[i], &coor_x, &coor_y, &coor_z);
-		line = Vect_find_line(&Map, coor_x, coor_y, coor_z, GV_POINT, 0, 0, 0);
-		
+
+		Vect_get_node_coor(&Map, cities[i], &coor_x, &coor_y,
+				   &coor_z);
+		line =
+		    Vect_find_line(&Map, coor_x, coor_y, coor_z, GV_POINT, 0,
+				   0, 0);
+
 		if (!line)
 		    G_fatal_error(_("No point at node %d"), cities[i]);
 
 		Vect_read_line(&Map, Points, Cats, line);
-		if (!(Vect_cat_get(Cats, tfield, &cat1)))
-		    G_fatal_error(_("No category for point at node %d"), cities[i]);
+		if (!(Vect_cat_get(Cats, nfield, &cat1)))
+		    G_fatal_error(_("No category for point at node %d"),
+				  cities[i]);
+
+		Vect_get_node_coor(&Map, cities[j], &coor_x, &coor_y,
+				   &coor_z);
+		line =
+		    Vect_find_line(&Map, coor_x, coor_y, coor_z, GV_POINT, 0,
+				   0, 0);
 
-		Vect_get_node_coor(&Map, cities[j], &coor_x, &coor_y, &coor_z);
-		line = Vect_find_line(&Map, coor_x, coor_y, coor_z, GV_POINT, 0, 0, 0);
-		
 		if (!line)
 		    G_fatal_error(_("No point at node %d"), cities[j]);
 
 		Vect_read_line(&Map, Points, Cats, line);
-		if (!(Vect_cat_get(Cats, tfield, &cat2)))
-		    G_fatal_error(_("No category for point at node %d"), cities[j]);
+		if (!(Vect_cat_get(Cats, nfield, &cat2)))
+		    G_fatal_error(_("No category for point at node %d"),
+				  cities[j]);
 
 		G_fatal_error(_("Destination node [cat %d] is unreachable "
 				"from node [cat %d]"), cat1, cat2);
@@ -336,7 +389,7 @@ int main(int argc, char **argv)
 	qsort((void *)costs[i], k, sizeof(COST), cmp);
     }
     G_percent(1, 1, 2);
-    
+
     if (bcosts) {
 	for (i = 0; i < ncities; i++) {
 	    /* this should be fast, no need for G_percent() */
@@ -344,7 +397,7 @@ int main(int argc, char **argv)
 	    for (j = 0; j < ncities; j++) {
 		if (i == j)
 		    continue;
-		    
+
 		bcosts[i][k].city = j;
 		bcosts[i][k].cost = cost_cache[j][i];
 
@@ -353,7 +406,7 @@ int main(int argc, char **argv)
 	    qsort((void *)bcosts[i], k, sizeof(COST), cmp);
 	}
     }
-    
+
     if (debug_level >= 2) {
 	/* debug: print sorted */
 	for (i = 0; i < ncities; i++) {
@@ -375,8 +428,7 @@ int main(int argc, char **argv)
 	    city = i;
 	}
     }
-    G_debug(2, "biggest costs %d - %d", city,
-	    costs[city][ncities - 2].city);
+    G_debug(2, "biggest costs %d - %d", city, costs[city][ncities - 2].city);
 
     /* add these 2 cities to array */
     add_city(city, -1);
@@ -411,7 +463,7 @@ int main(int argc, char **argv)
 			continue;	/* only used */
 		    /* directional costs k -> j */
 		    tmpcost += bcosts[j][k].cost;
-		    break;		/* first nearest */
+		    break;	/* first nearest */
 		}
 	    }
 
@@ -443,7 +495,7 @@ int main(int argc, char **argv)
 	    /* get cost from directional cost cache */
 	    tcost = cost_cache[city][cycle[j + 1]];
 	    tmpcost += tcost;
-	    
+
 	    /* tmpcost must always be > 0 */
 
 	    G_debug(2, "? %d - %d cost = %f x %f", node1, node2, tmpcost,
@@ -456,7 +508,7 @@ int main(int argc, char **argv)
 	}
 	add_city(city, city1);
     }
-    
+
     /* TODO: optimize tour (some Lin-Kernighan method) */
 
     if (debug_level >= 2) {
@@ -468,13 +520,20 @@ int main(int argc, char **argv)
     }
 
     /* Create list of arcs */
-    cycle[ncities] = cycle[0];  /* close the cycle */
+    cycle[ncities] = cycle[0];	/* close the cycle */
     cost = 0.0;
     for (i = 0; i < ncities; i++) {
 	node1 = cities[cycle[i]];
 	node2 = cities[cycle[i + 1]];
 	G_debug(2, " %d -> %d", node1, node2);
-	ret = Vect_net_shortest_path(&Map, node1, node2, List, NULL);
+
+	if (turntable_f->answer)
+	    ret =
+		Vect_net_ttb_shortest_path(&Map, node1, 0, node2, 0,
+					   tucfield, List, NULL);
+	else
+	    ret = Vect_net_shortest_path(&Map, node1, node2, List, NULL);
+
 	cost += cost_cache[cycle[i]][cycle[i + 1]];
 	for (j = 0; j < List->n_values; j++) {
 	    line = abs(List->value[j]);
@@ -504,7 +563,7 @@ int main(int argc, char **argv)
 	Vect_cat_get(Cats, afield, &cat);
 	G_debug(2, "%d. arc: cat %d", i + 1, cat);
     }
-    
+
     seq2stdout = 0;
     seqname = NULL;
     if (seq->answer) {
@@ -518,8 +577,7 @@ int main(int argc, char **argv)
 
 	fp = fopen(seqname, "w");
 	if (!fp)
-	    G_fatal_error(_("Unable to open file '%s' for writing"),
-			  seqname);
+	    G_fatal_error(_("Unable to open file '%s' for writing"), seqname);
 
 	fprintf(fp, "sequence;category;cost_to_next\n");
     }
@@ -528,27 +586,28 @@ int main(int argc, char **argv)
 
     k = 0;
     /* this writes out only user-selected nodes, not all visited nodes */
-    G_debug(2, "Nodes' categories (layer %d, %d nodes):", tfield,
-	    ncities);
+    G_debug(2, "Nodes' categories (layer %d, %d nodes):", nfield, ncities);
     for (i = 0; i < ncities; i++) {
 	double coor_x, coor_y, coor_z;
-	
+
 	node = cities[cycle[i]];
 	Vect_get_node_coor(&Map, node, &coor_x, &coor_y, &coor_z);
-	line = Vect_find_line(&Map, coor_x, coor_y, coor_z, GV_POINT, 0, 0, 0);
-	
+	line =
+	    Vect_find_line(&Map, coor_x, coor_y, coor_z, GV_POINT, 0, 0, 0);
+
 	if (!line)
 	    continue;
 
 	ltype = Vect_read_line(&Map, Points, Cats, line);
 	if (!(ltype & GV_POINT))
 	    continue;
-	if (!(Vect_cat_get(Cats, tfield, &cat)))
+	if (!(Vect_cat_get(Cats, nfield, &cat)))
 	    continue;
 	Vect_write_line(&Out, ltype, Points, Cats);
 	k++;
 	if (fp) {
-	    fprintf(fp, "%d;%d;%.3f\n", k, cat, cost_cache[cycle[i]][cycle[i + 1]]);
+	    fprintf(fp, "%d;%d;%.3f\n", k, cat,
+		    cost_cache[cycle[i]][cycle[i + 1]]);
 	}
 
 	G_debug(2, "%d. node: cat %d", k, cat);
diff --git a/vector/v.net.salesman/v.net.salesman.html b/vector/v.net.salesman/v.net.salesman.html
index c36c3be..6209924 100644
--- a/vector/v.net.salesman/v.net.salesman.html
+++ b/vector/v.net.salesman/v.net.salesman.html
@@ -20,8 +20,22 @@ in order to connect points representing center nodes to the network.
 <p>Points specified by category must be exactly on network nodes, and the 
 input vector map needs to be prepared with <em>v.net operation=connect</em>.
 
+<p>Application of flag <b>-t</b> enables a turntable support. 
+This flag requires additional parameters <b>turn_layer</b> and <b>turn_cat_layer</b> 
+that are otherwise ignored.
+ The turntable allows 
+to model e.g. trafic code, where some turns may be prohibited. 
+This means that the input layer is expanded by 
+turntable with costs of every possible turn on any possible node 
+(intersection) in both directions. 
+ Turntable can be created by 
+ the <em><a href="v.net.html">v.net</a></em> module. 
+For more information about turns in the vector network analyses see
+<a href="http://grasswiki.osgeo.org/wiki/Turns_in_the_vector_network_analysis">wiki page</a>.
+
 <h2>NOTES</h2>
 Arcs can be closed using cost = -1. 
+Turns support: The costs of turns on visiting nodes are not taken in account.
 
 <h2>EXAMPLE</h2>
 
@@ -143,5 +157,13 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 Markus Metz<br>
 Documentation: Markus Neteler, Markus Metz
 
+<h3>TURNS SUPPORT</h3>
+
+The turns support was implemnented as part of GRASS GIS turns cost project at Czech Technical University in Prague, Czech Republic.  
+Eliska Kyzlikova, Stepan Turek, Lukas Bocan and Viera Bejdova participated at the project.
+
+Implementation: Stepan Turek 
+Documentation: Lukas Bocan
+Mentor: Martin Landa
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-24 15:27:04 +0100 (Wed, 24 Dec 2014) $</i>
diff --git a/vector/v.net.spanningtree/v.net.spanningtree.html b/vector/v.net.spanningtree/v.net.spanningtree.html
index b768ac3..f42fc8f 100644
--- a/vector/v.net.spanningtree/v.net.spanningtree.html
+++ b/vector/v.net.spanningtree/v.net.spanningtree.html
@@ -34,4 +34,4 @@ v.net.spanningtree input=projected_pipelines output=spanningtree accol=cost
 Daniel Bundala, Google Summer of Code 2009, Student<br>
 Wolf Bergenheim, Mentor
 
-<p><i>Last changed: $Date: 2016-03-08 22:04:26 +0100 (Tue, 08 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-08 22:04:56 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/vector/v.net.steiner/main.c b/vector/v.net.steiner/main.c
index bab002b..68888b3 100644
--- a/vector/v.net.steiner/main.c
+++ b/vector/v.net.steiner/main.c
@@ -55,14 +55,14 @@ int init_node_costs(struct Map_info *Map, int from)
     int to, ret, row, col;
     double cost;
 
-    G_message(_("Init costs from node %d"), from);
+    G_verbose_message(_("Init costs from node %d"), from);
 
     for (to = 1; to <= nnodes; to++) {
 	if (from == to)
 	    continue;
 	ret = Vect_net_shortest_path(Map, from, to, NULL, &cost);
 	if (ret == -1) {
-	    /* G_warning ( "Destination node %d is unreachable from node %d\n", to, from); */
+	    G_debug(1, "Destination node %d is unreachable from node %d\n", to, from);
 	    cost = -2;
 	}
 
@@ -233,9 +233,10 @@ int mst(struct Map_info *Map, int *trms, int ntrms,	/* array of terminal, number
 	else {
 	    scpos = -1;
 	}
-	G_debug(3, "tcpos = %d, scpos = %d\n", tcpos, scpos);
-	G_debug(3, "tcost = %f, scost = %f\n", term_costs[tcpos].cost,
-		sp_costs[scpos].cost);
+	/* Do not access invalid items even for debugging */
+    if (tcpos != -1 && scpos != -1)
+        G_debug(3, "tcost = %f, scost = %f\n", term_costs[tcpos].cost,
+            sp_costs[scpos].cost);
 
 	/* Now we have positions set on lowest costs in each queue or -1 if no more/not used */
 	if (tcpos >= 0 && scpos >= 0) {
@@ -337,7 +338,7 @@ int main(int argc, char **argv)
     struct cat_list *Clist;
     struct line_cats *Cats;
     struct line_pnts *Points;
-
+    
     /* Initialize the GIS calls */
     G_gisinit(argv[0]);
 
@@ -440,23 +441,26 @@ int main(int argc, char **argv)
 	    continue;
 
 	Vect_read_line(&Map, Points, Cats, i);
+	if (!(Vect_cat_get(Cats, tfield, &cat)))
+	    continue;
 	node = Vect_find_node(&Map, Points->x[0], Points->y[0], Points->z[0], 0, 0);
 	if (!node) {
-	    G_warning(_("Point is not connected to the network"));
+	    G_warning(_("Point is not connected to the network (cat=%d)"), cat);
 	    continue;
 	}
-	if (!(Vect_cat_get(Cats, tfield, &cat)))
-	    continue;
 	if (Vect_cat_in_cat_list(cat, Clist)) {
 	    Vect_list_append(TList, node);
 	}
     }
 
     nterms = TList->n_values;
-    fprintf(stdout, "Number of terminals: %d\n", nterms);
+    /* GTC Terminal refers to an Steiner tree endpoint */
+    G_message(_("Number of terminals: %d\n"), nterms);
 
-    if (nterms < 2)
-	G_fatal_error(_("Not enough terminals (< 2)"));
+    if (nterms < 2) {
+        /* GTC Terminal refers to an Steiner tree endpoint */
+        G_fatal_error(_("Not enough terminals (< 2)"));
+    }
 
     /* Number of steiner points */
     nsp = atoi(nsp_opt->answer);
@@ -468,18 +472,18 @@ int main(int argc, char **argv)
 	nsp = nterms - 2;
     }
 
-    fprintf(stdout, "Number of Steiner points set to %d\n", nsp);
+    G_message(_("Number of Steiner points set to %d\n"), nsp);
 
     testnode = (int *)G_malloc((nnodes + 1) * sizeof(int));
     for (i = 1; i <= nnodes; i++)
 	testnode[i] = 1;
 
     /* Alloc arrays of costs for nodes, first node at 1 (0 not used) */
-    nodes_costs = (double **)G_malloc((nnodes - 1) * sizeof(double *));
+    nodes_costs = (double **)G_malloc((nnodes) * sizeof(double *));
     for (i = 0; i < nnodes; i++) {
 	nodes_costs[i] =
-	    (double *)G_malloc((nnodes - i - 1) * sizeof(double));
-	for (j = 0; j < nnodes - i - 1; j++)
+	    (double *)G_malloc((nnodes - i) * sizeof(double));
+	for (j = 0; j < nnodes - i; j++)
 	    nodes_costs[i][j] = -1;	/* init, i.e. cost was not calculated yet */
     }
 
@@ -514,6 +518,7 @@ int main(int argc, char **argv)
     for (i = 1; i < nterms; i++) {
 	ret = get_node_costs(terms[0], terms[i], &cost);
 	if (ret == 0) {
+            /* GTC Terminal refers to an Steiner tree endpoint */
 	    G_fatal_error(_("Terminal at node [%d] cannot be connected "
 			    "to terminal at node [%d]"), terms[0], terms[i]);
 	}
@@ -525,7 +530,7 @@ int main(int argc, char **argv)
 	ret = get_node_costs(terms[0], i, &cost);
 	if (ret == 0) {
 	    testnode[i] = 0;
-	    /* fprintf (stderr, "node %d removed from list of Steiner point candidates\n", i ); */
+	    G_debug(2, "node %d removed from list of Steiner point candidates\n", i );
 	    j++;
 	}
     }
@@ -541,7 +546,7 @@ int main(int argc, char **argv)
     nspused = 0;
     for (j = 0; j < nsp; j++) {
 	sp = 0;
-	G_message(_("Search for [%d]. Steiner point"), j + 1);
+	G_verbose_message(_("Search for [%d]. Steiner point"), j + 1);
 
 	for (i = 1; i <= nnodes; i++) {
 	    G_percent(i, nnodes, 1);
@@ -579,8 +584,8 @@ int main(int argc, char **argv)
 	}
     }
 
-    fprintf(stdout, "\nNumber of added Steiner points: %d "
-	    "(theoretic max is %d).\n", nspused, nterms - 2);
+    G_message(_("Number of added Steiner points: %d "
+	    "(theoretic max is %d).\n"), nspused, nterms - 2);
 
     /* Build lists of arcs and nodes for final version */
     ret =
@@ -590,12 +595,12 @@ int main(int argc, char **argv)
     /* Calculate true costs, which may be lower than MST if steiner points were not used */
 
     if (nsp < nterms - 2) {
-	fprintf(stdout, "\nSpanning tree costs on complet graph = %f\n"
-		"(may be higher than resulting Steiner tree costs!!!)\n",
+        G_message(_("Spanning tree costs on complet graph = %f\n"
+            "(may be higher than resulting Steiner tree costs!!!)"),
 		cost);
     }
     else
-	fprintf(stdout, "\nSteiner tree costs = %f\n", cost);
+        G_message(_("Steiner tree costs = %f"), cost);
 
     /* Write arcs to new map */
     if (Vect_open_new(&Out, output->answer, Vect_is_3d(&Map)) < 0)
@@ -603,23 +608,19 @@ int main(int argc, char **argv)
 
     Vect_hist_command(&Out);
 
-    fprintf(stdout, "\nSteiner tree:\n");
-    fprintf(stdout, "Arcs' categories (layer %d, %d arcs):\n", afield,
+    G_debug(1, "Steiner tree:");
+    G_debug(1, "Arcs' categories (layer %d, %d arcs):", afield,
 	    StArcs->n_values);
-
+    
     for (i = 0; i < StArcs->n_values; i++) {
 	line = StArcs->value[i];
 	ltype = Vect_read_line(&Map, Points, Cats, line);
 	Vect_write_line(&Out, ltype, Points, Cats);
 	Vect_cat_get(Cats, afield, &cat);
-	if (i > 0)
-	    printf(",");
-	fprintf(stdout, "%d", cat);
+        G_debug(1, "arc cat = %d", cat);
     }
-
-    fprintf(stdout, "\n\n");
-
-    fprintf(stdout, "Nodes' categories (layer %d, %d nodes):\n", tfield,
+    
+    G_debug(1, "Nodes' categories (layer %d, %d nodes):", tfield,
 	    StNodes->n_values);
 
     k = 0;
@@ -645,17 +646,17 @@ int main(int argc, char **argv)
 	    if (!(Vect_cat_get(Cats, tfield, &cat)))
 		continue;
 	    Vect_write_line(&Out, ltype, Points, Cats);
-	    if (k > 0)
-		fprintf(stdout, ",");
-	    fprintf(stdout, "%d", cat);
+	    G_debug(1, "node cat = %d", cat);
 	    k++;
 	}
     }
 
-    fprintf(stdout, "\n\n");
-
     Vect_build(&Out);
 
+    G_message(n_("A Steiner tree with %d arc has been built",
+            "A Steiner tree with %d arcs has been built", StArcs->n_values),
+        StArcs->n_values);
+    
     /* Free, ... */
     Vect_destroy_list(StArcs);
     Vect_destroy_list(StNodes);
diff --git a/vector/v.net.steiner/v.net.steiner.html b/vector/v.net.steiner/v.net.steiner.html
index 39d1e57..da0583b 100644
--- a/vector/v.net.steiner/v.net.steiner.html
+++ b/vector/v.net.steiner/v.net.steiner.html
@@ -21,6 +21,11 @@ For areas, costs will be calculated along boundary lines.
 <p>Points representing nodes must be exactly on network nodes, and the 
 input vector map needs to be prepared with <em>v.net operation=connect</em>.
 
+<h2>NOTES</h2>
+
+Current implementation of obtaining Steiner tree is not memory efficient.
+An attempt to run module on a network with large number of intersections thus
+might result in failure to allocate memory or out of memory condition.
 
 <h2>EXAMPLE</h2>
 
@@ -125,4 +130,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 Documentation: Markus Neteler, Markus Metz
 
 
-<p><i>Last changed: $Date: 2014-12-24 15:44:33 +0100 (Wed, 24 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2016-03-08 08:50:26 +0100 (Tue, 08 Mar 2016) $</i>
diff --git a/vector/v.net.visibility/v.net.visibility.html b/vector/v.net.visibility/v.net.visibility.html
index acee82c..a133b13 100644
--- a/vector/v.net.visibility/v.net.visibility.html
+++ b/vector/v.net.visibility/v.net.visibility.html
@@ -145,4 +145,4 @@ Maximilian Maldacker<br>
 Mentor: Wolf Bergenheim
 
 <p>
-<i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-30 15:30:14 +0200 (Tue, 30 Aug 2016) $</i>
diff --git a/vector/v.net/Makefile b/vector/v.net/Makefile
index 63d2105..b9097d9 100644
--- a/vector/v.net/Makefile
+++ b/vector/v.net/Makefile
@@ -3,8 +3,8 @@ MODULE_TOPDIR = ../..
 
 PGM=v.net
 
-LIBES = $(VECTORLIB) $(GISLIB)
-DEPENDENCIES = $(VECTORDEP) $(GISDEP)
+LIBES = $(VECTORLIB) $(GISLIB) $(DBMILIB)
+DEPENDENCIES = $(VECTORDEP) $(GISDEP) $(DBMIDEP)
 EXTRA_INC = $(VECT_INC)
 EXTRA_CFLAGS = $(VECT_CFLAGS)
  
diff --git a/vector/v.net/args.c b/vector/v.net/args.c
index 0dc02b6..1a0b2b5 100644
--- a/vector/v.net/args.c
+++ b/vector/v.net/args.c
@@ -32,11 +32,11 @@ void define_options(struct opt *opt)
     opt->action->type = TYPE_STRING;
     opt->action->required = YES;
     opt->action->multiple = NO;
-    opt->action->options = "nodes,connect,arcs,report,nreport";
+    opt->action->options = "nodes,connect,arcs,report,nreport,turntable";
     opt->action->description = _("Operation to be performed");
     desc = NULL;
     G_asprintf(&desc,
-	       "nodes;%s;connect;%s;arcs;%s;report;%s;nreport;%s",
+	       "nodes;%s;connect;%s;arcs;%s;report;%s;nreport;%s;turntable;%s;",
 	       _("new point is placed on each node (line end) "
 		 "if doesn't exist"),
 	       _("connect still unconnected points to vector network "
@@ -46,7 +46,8 @@ void define_options(struct opt *opt)
 	       _("print to standard output "
 		 "{line_category start_point_category end_point_category}"),
 	       _("print to standard output "
-		 "{point_category line_category[,line_category...]}"));
+		 "{point_category line_category[,line_category...]}"),
+         _("create turntable on vector network"));
     opt->action->descriptions = desc;
 
     opt->afield_opt = G_define_standard_option(G_OPT_V_FIELD);
@@ -55,6 +56,13 @@ void define_options(struct opt *opt)
     opt->afield_opt->label = _("Arc layer");
     opt->afield_opt->guisection = _("Arcs");
 
+    opt->type = G_define_standard_option(G_OPT_V_TYPE);
+    opt->type->key = "arc_type";
+    opt->type->options = "line,boundary";
+    opt->type->answer = "line,boundary";
+    opt->type->label = _("Arc type");
+    opt->type->guisection = _("Turntable");
+
     opt->nfield_opt = G_define_standard_option(G_OPT_V_FIELD);
     opt->nfield_opt->key = "node_layer";
     opt->nfield_opt->answer = "2";
@@ -91,6 +99,28 @@ void define_options(struct opt *opt)
 	_("For operation 'connect'. By default, a new line from the point to the network is created.");
     opt->snap_flag->guisection = _("Nodes");
 
+    opt->tfield = G_define_standard_option(G_OPT_V_FIELD);
+    opt->tfield->label = _("Turntable layer");
+    opt->tfield->description =
+    _
+    ("Layer where turntable will be attached. Format: layer number[/layer name]."
+     "Required for operation 'turntable'.");
+    opt->tfield->answer = "3";
+    opt->tfield->key = "turn_layer";
+    opt->tfield->required = NO;
+    opt->tfield->guisection = _("Turntable");
+
+    opt->tucfield = G_define_standard_option(G_OPT_V_FIELD);
+    opt->tucfield->label = _("Layer with unique categories used in turntable");
+    opt->tucfield->description =
+    _
+    ("Layer with unique categories for every line in arc_layer and point on every node. "
+     " The categories are used in turntable. Format: layer number[/layer name]. "
+     "Required for operation 'turntable'.");
+    opt->tucfield->answer = "4";
+    opt->tucfield->key = "turn_cat_layer";
+    opt->tucfield->required = NO;
+    opt->tucfield->guisection = _("Turntable");
 }
 
 void parse_arguments(const struct opt *opt,
@@ -110,17 +140,21 @@ void parse_arguments(const struct opt *opt,
 	*act = TOOL_NREPORT;
     else if (strcmp(opt->action->answer, "arcs") == 0)
 	*act = TOOL_ARCS;
+    else if (strcmp(opt->action->answer, "turntable") == 0)
+    *act = TOOL_TURNTABLE;
     else
 	G_fatal_error(_("Unknown operation"));
 
     if (*act == TOOL_NODES || *act == TOOL_CONNECT ||
-	*act == TOOL_REPORT || *act == TOOL_NREPORT) {
+	*act == TOOL_REPORT || *act == TOOL_NREPORT ||
+    *act == TOOL_TURNTABLE) {
 	if (opt->input->answer == NULL)
 	    G_fatal_error(_("Required parameter <%s> not set"),
 			  opt->input->key);
     }
 
-    if (*act == TOOL_NODES || *act == TOOL_CONNECT) {
+    if (*act == TOOL_NODES || *act == TOOL_CONNECT ||
+        *act == TOOL_TURNTABLE) {
 	if (opt->output->answer == NULL)
 	    G_fatal_error(_("Required parameter <%s> not set"),
 			  opt->output->key);
diff --git a/vector/v.net/main.c b/vector/v.net/main.c
index 12e0d39..73a4c25 100644
--- a/vector/v.net/main.c
+++ b/vector/v.net/main.c
@@ -5,10 +5,12 @@
  * 
  * AUTHOR(S):    Radim Blazek
  *               Martin Landa <landa.martin gmail.com> (connect/arcs)
+ *               Stepan Turek <stepan.turek seznam.cz> (turns support)
+ *
  *               
  * PURPOSE:      Network maintenance
  *               
- * COPYRIGHT:    (C) 2001-2009 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2001-2009,2014,2016 by the GRASS Development Team
  *
  *               This program is free software under the 
  *               GNU General Public License (>=v2). 
@@ -37,7 +39,7 @@ int main(int argc, char **argv)
     double thresh;
 
     char message[4096];
-    
+
     /*  initialize the GIS calls */
     G_gisinit(argv[0]);
 
@@ -57,9 +59,9 @@ int main(int argc, char **argv)
     In = Points = Out = NULL;
     file_arcs = NULL;
     message[0] = '\0';
-    
+
     /* open input map */
-    if (act != TOOL_ARCS) {
+    if (act != TOOL_ARCS && act != TOOL_TURNTABLE) {
 	In = (struct Map_info *)G_malloc(sizeof(struct Map_info));
 	Vect_set_open_level(2);
 	if (Vect_open_old(In, opt.input->answer, "") == -1)
@@ -116,7 +118,8 @@ int main(int argc, char **argv)
 	if (Vect_open_new(Out, opt.output->answer, is3d) == -1) {
 	    if (In)
 		Vect_close(In);
-	    G_fatal_error(_("Unable to open vector map <%s> at topology level %d"),
+	    G_fatal_error(_
+			  ("Unable to open vector map <%s> at topology level %d"),
 			  opt.output->answer, 2);
 	}
 
@@ -130,28 +133,31 @@ int main(int argc, char **argv)
 	if (act == TOOL_NODES) {
 	    /* nodes */
 	    int nnodes;
+
 	    nnodes = nodes(In, Out, opt.cats_flag->answer, nfield);
 
-	    sprintf (message, _("%d new points (nodes) written to output."), nnodes);
+	    sprintf(message, _("%d new points (nodes) written to output."),
+		    nnodes);
 	}
 	else {			/* connect or arcs */
 	    int narcs;
 
 	    if (act == TOOL_CONNECT)
 		narcs = connect_arcs(In, Points, Out, afield, nfield,
-		                     thresh, opt.snap_flag->answer);
+				     thresh, opt.snap_flag->answer);
 	    else
 		narcs = create_arcs(file_arcs, Points, Out, afield, nfield);
 
-	    sprintf(message, _("%d lines (network arcs) written to output."), narcs);
+	    sprintf(message, _("%d lines (network arcs) written to output."),
+		    narcs);
 	}
 
 	if (In) {
-	  G_message (_("Copying attributes..."));
-	  if (Vect_copy_tables(In, Out, 0))
-	    G_warning(_("Failed to copy attribute table to output map"));
+	    G_message(_("Copying attributes..."));
+	    if (Vect_copy_tables(In, Out, 0))
+		G_warning(_("Failed to copy attribute table to output map"));
 	}
-	
+
 	/* support */
 	Vect_build_partial(Out, GV_BUILD_NONE);
 	Vect_build(Out);
@@ -161,6 +167,9 @@ int main(int argc, char **argv)
 	if (Out)
 	    Vect_close(Out);
     }
+    else if (act == TOOL_TURNTABLE) {
+	turntable(&opt);
+    }
     else {			/* report */
 	report(In, afield, nfield, act);
     }
diff --git a/vector/v.net/proto.h b/vector/v.net/proto.h
index fd2d4fb..947c4ab 100644
--- a/vector/v.net/proto.h
+++ b/vector/v.net/proto.h
@@ -3,13 +3,16 @@
 #define TOOL_REPORT  2
 #define TOOL_NREPORT 3
 #define TOOL_ARCS    4
+#define TOOL_TURNTABLE    5
+
 
 struct opt {
     struct Option *input, *points;
     struct Option *output;
     struct Option *action;
-    struct Option *afield_opt, *nfield_opt, *thresh_opt;
+    struct Option *afield_opt, *tfield, *tucfield, *nfield_opt, *thresh_opt;
     struct Option *file;
+    struct Option *type;
     struct Flag *cats_flag, *snap_flag;
 };
 
@@ -33,3 +36,5 @@ int nodes(struct Map_info *, struct Map_info *, int,
 /* report.c */
 int report(struct Map_info *, int, int,
 	   int);
+
+void turntable(struct opt *);
diff --git a/vector/v.net/testsuite/test_v_net.py b/vector/v.net/testsuite/test_v_net.py
new file mode 100644
index 0000000..d8ee2ec
--- /dev/null
+++ b/vector/v.net/testsuite/test_v_net.py
@@ -0,0 +1,50 @@
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+from grass.script.core import read_command
+
+
+class TestVNet(TestCase):
+
+    network = 'test_vnet'
+
+    def tearDown(cls):
+        """Remove viewshed map after each test method"""
+        # TODO: eventually, removing maps should be handled through testing framework fucntions
+        cls.runModule('g.remove', flags='f', type='vector',
+                      name=cls.network)
+
+    def test_nodes(self):
+        """Test"""
+        self.assertModule('v.net', input='streets', output=self.network, operation='nodes')
+        topology = dict(points=41813, nodes=41813, lines=49746)
+        self.assertVectorFitsTopoInfo(vector=self.network, reference=topology)
+        layers = read_command('v.category', input=self.network, option='layers').strip()
+        self.assertEqual(first="1", second=layers, msg="Layers do not match")
+
+    def test_nodes_layers(self):
+        """Test"""
+        self.assertModule('v.net', input='streets', output=self.network, operation='nodes', flags='c')
+        topology = dict(points=41813, nodes=41813, lines=49746)
+        self.assertVectorFitsTopoInfo(vector=self.network, reference=topology)
+        layers = read_command('v.category', input=self.network, option='layers').strip()
+        self.assertEqual(first="1\n2", second=layers, msg="Layers do not match")
+
+    def test_connect(self):
+        """Test"""
+        self.assertModule('v.net', input='streets', points='schools',
+                          output=self.network, operation='connect', threshold=1000)
+        topology = dict(points=167, nodes=42136, lines=50069)
+        self.assertVectorFitsTopoInfo(vector=self.network, reference=topology)
+        layers = read_command('v.category', input=self.network, option='layers').strip()
+        self.assertEqual(first="1\n2", second=layers, msg="Layers do not match")
+
+    def test_connect_snap(self):
+        """Test"""
+        self.assertModule('v.net', input='streets', points='schools', flags='s',
+                          output=self.network, operation='connect', threshold=1000)
+        topology = dict(points=167, nodes=41969, lines=49902)
+        self.assertVectorFitsTopoInfo(vector=self.network, reference=topology)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.net/turntable.c b/vector/v.net/turntable.c
new file mode 100644
index 0000000..d32816c
--- /dev/null
+++ b/vector/v.net/turntable.c
@@ -0,0 +1,744 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+
+#include <grass/gis.h>
+#include <grass/vector.h>
+#include <grass/dbmi.h>
+#include <grass/glocale.h>
+#include "proto.h"
+
+static double compute_line_nodes_angle(struct line_pnts *points)
+{
+    double x_start, y_start, z;
+    double x_end, y_end;
+    double x, y;
+    int n_points = Vect_get_num_line_points(points);
+
+    if (n_points < 2)
+	return (-9.0);
+
+    Vect_line_get_point(points, 0, &x_start, &y_start, &z);
+    Vect_line_get_point(points, n_points - 1, &x_end, &y_end, &z);
+
+    x = x_end - x_start;
+    y = y_end - y_start;
+
+    if (y == 0.0 && x == 0.0)
+	return (0.0);
+    else
+	return (atan2(y, x));
+}
+
+/*\brief Compute angle of two lines, which is defined by start and end point of the lines
+   regardless regardless line segments between the points.
+
+   Parameters from_dir, to_dir defines defines line direction to node for which is angle defined 
+   (negative - line goes from node / positive line goes into node).
+
+   Angle is zero when lines are straight. If line_pnts_to is on the left from line_pnts_from
+   the angle is negative.
+
+   \return lines angle
+   \return -9.0 if line is defined by one point or has same start and end point
+ */
+
+static double compute_lines_angle(struct line_pnts *line_pnts_from,
+				  int from_dir,
+				  struct line_pnts *line_pnts_to, int to_dir)
+{
+    double angle_from, angle_to;
+    double angle;
+
+    double x1, x2, y1, y2, z;
+
+    int n_points_from = Vect_get_num_line_points(line_pnts_from);
+    int n_points_to = Vect_get_num_line_points(line_pnts_to);
+
+
+    /* If one of the lines has same begining and end, the angle cannot be 
+       calculated, because the angle is computed between lines given by start and 
+       end point regardless line segments between the points. */
+    Vect_line_get_point(line_pnts_from, 0, &x1, &y1, &z);
+    Vect_line_get_point(line_pnts_from, n_points_from - 1, &x2, &y2, &z);
+
+    if (x1 == x2 && y1 == y2)
+	return -9.0;
+
+    Vect_line_get_point(line_pnts_to, 0, &x1, &y1, &z);
+    Vect_line_get_point(line_pnts_to, n_points_to - 1, &x2, &y2, &z);
+
+    if (x1 == x2 && y1 == y2)
+	return -9.0;
+
+    if (from_dir > 0)
+	Vect_line_reverse(line_pnts_from);
+
+    if (to_dir < 0)
+	Vect_line_reverse(line_pnts_to);
+
+    angle_from = compute_line_nodes_angle(line_pnts_from);
+    angle_to = compute_line_nodes_angle(line_pnts_to);
+
+    if (angle_from == -9.0)
+	angle = angle_from;
+    else if (angle_to == -9.0)
+	angle = angle_to;
+    else {
+	angle = angle_from - angle_to;
+
+	if (angle > M_PI)
+	    angle = -2 * M_PI + angle;
+
+	if (angle < -M_PI)
+	    angle = 2 * M_PI + angle;
+    }
+
+    /* reverse it back to original order */
+    if (from_dir > 0)
+	Vect_line_reverse(line_pnts_from);
+
+    if (to_dir < 0)
+	Vect_line_reverse(line_pnts_to);
+
+    return angle;
+}
+
+/*\brief Add line uturns into turntable.
+
+   Add two records into turntable because every line has two possible U-turns.
+ */
+static int add_uturn(dbDriver * driver, char *ttb_name, int *next_ttb_cat,
+		     int ln_cat, int isec_start_cat, int isec_end_cat)
+{
+    int i, isec;
+    dbString db_buf;
+    char buf[DB_SQL_MAX];
+
+    db_init_string(&db_buf);
+
+    ln_cat = abs(ln_cat);
+
+    isec = isec_end_cat;
+    for (i = 0; i < 2; ++i) {
+	if (i == 1) {
+	    ln_cat = -1 * ln_cat;
+	    isec = isec_start_cat;
+	}
+	/* cat, ln_from, ln_to, cost, isec, angle */
+	sprintf(buf,
+		"INSERT INTO %s values ( %d, %d, %d, %f, %d, %f);",
+		ttb_name, (*next_ttb_cat), ln_cat, ln_cat * -1, 0.0,
+		isec, M_PI);
+	db_set_string(&db_buf, buf);
+
+	G_debug(3, "Adding u-turn into turntable:\n%s",
+		db_get_string(&db_buf));
+
+	if (db_execute_immediate(driver, &db_buf) != DB_OK) {
+	    db_free_string(&db_buf);
+	    return -1;
+	}
+	++(*next_ttb_cat);
+    }
+
+    db_free_string(&db_buf);
+    return 1;
+}
+
+
+/*\brief Add turns for two lines into turntable.
+
+   Add two records into turntable because we can take the turn from two opposite directions.
+ */
+static int add_turns(dbDriver * driver, char *ttb_name, int *next_ttb_cat,
+		     int ln_i_cat, struct line_pnts *line_pnts_i,
+		     int ln_j_cat, struct line_pnts *line_pnts_j,
+		     int isec_cat)
+{
+    int i;
+    int ln_f, ln_t;
+    dbString db_buf;
+    char buf[DB_SQL_MAX];
+    double angle;
+
+    db_init_string(&db_buf);
+
+    int ln_j_dir, ln_i_dir;
+    int ln_to_cat, ln_from_cat;
+
+    ln_i_dir = ln_i_cat;
+    ln_j_dir = ln_j_cat;
+
+    ln_i_cat = abs(ln_i_cat);
+    ln_j_cat = abs(ln_j_cat);
+
+    ln_from_cat = ln_i_cat;
+    ln_to_cat = ln_j_cat;
+
+    /*Find right lines nodes (positive or negative), will be connected by the turn. */
+    if (ln_j_dir < 0 && ln_i_dir < 0)
+	ln_to_cat *= -1;
+
+    else if (ln_j_dir > 0 && ln_i_dir > 0)
+	ln_from_cat *= -1;
+
+    else if (ln_j_dir < 0) {
+	ln_to_cat = ln_i_cat;
+	ln_from_cat = ln_j_cat;
+    }
+
+    /* compute angle if the lines angle is computed from ln_from_cat to ln_to_cat */
+    if (ln_to_cat == ln_i_cat)
+	angle =
+	    compute_lines_angle(line_pnts_j, ln_j_dir, line_pnts_i, ln_i_dir);
+    else
+	angle =
+	    compute_lines_angle(line_pnts_i, ln_i_dir, line_pnts_j, ln_j_dir);
+
+    ln_f = ln_from_cat;
+    ln_t = ln_to_cat;
+
+    /*Create first turn from i to j, then create turn in the opposite direction. */
+    for (i = 0; i < 2; ++i) {
+
+	/* connect right nodes for opposite turn */
+	if (i == 1) {
+	    ln_f = ln_to_cat * -1;
+	    ln_t = ln_from_cat * -1;
+	}
+
+	/* cat, ln_from, ln_to, cost, isec, angle */
+	sprintf(buf,
+		"INSERT INTO %s values ( %d, %d, %d, %f, %d,",
+		ttb_name, (*next_ttb_cat), ln_f, ln_t, 0.0, isec_cat);
+	db_set_string(&db_buf, buf);
+
+	if (angle == -9.0)
+	    db_append_string(&db_buf, "NULL)");
+	else {
+	    /* the angle is on the other side in opposite turn (e. g. left -> right) */
+	    if (i == 1)
+		angle *= -1;
+
+	    sprintf(buf, "%f)", angle);
+	    db_append_string(&db_buf, buf);
+	}
+
+	G_debug(3, "Adding turn into turntable:\n%s", db_get_string(&db_buf));
+
+	if (db_execute_immediate(driver, &db_buf) != DB_OK) {
+	    db_free_string(&db_buf);
+	    return -1;
+	}
+	++(*next_ttb_cat);
+    }
+
+    db_free_string(&db_buf);
+    return 1;
+
+}
+
+
+void populate_turntable(dbDriver * driver, struct Map_info *InMap,
+			struct Map_info *OutMap, char *ttb_name,
+			int tfield, int tucfield, int a_field, int arc_type)
+{
+    struct ilist *list;
+
+    int *features_id;
+
+    int n_node_lns, n_features, i_line, j_line, next_ttb_cat, i_ucat, n_lines;
+    int n_nodes, pivot_node, outside_node, isec_start_ucat, isec_end_ucat,
+	node1, node2, found_pt_id;
+    int ln_i_id, ln_j_id, ln_i_ucat, ln_j_ucat;
+
+    int ltype_i, ltype_j;
+
+    struct line_pnts *line_pnts_i, *line_pnts_j;
+    struct line_cats *cats_i, *cats_j;
+
+    double x, y, z;
+
+    struct bound_box box;
+    struct boxlist *box_List;
+
+    line_pnts_i = Vect_new_line_struct();
+    line_pnts_j = Vect_new_line_struct();
+    cats_i = Vect_new_cats_struct();
+    cats_j = Vect_new_cats_struct();
+
+    n_lines = 0;
+    if (arc_type & GV_LINE)
+	n_lines += Vect_get_num_primitives(InMap, GV_LINE);
+    if (arc_type & GV_BOUNDARY)
+	n_lines += Vect_get_num_primitives(InMap, GV_BOUNDARY);
+
+    /*Converts feature input map id into current id in output map. 
+       When the feature is rewritten, it's original state still exists 
+       just marked as dead. The new feature is written to first possible 
+       position and that is the id (all dead + all alive features + 1).
+
+       If feature id is 0 the feature was not already written into
+       output map. */
+
+    n_features = Vect_get_num_lines(InMap);
+
+    G_debug(3, "Found %d line features in <%s> vector map", n_features,
+	    InMap->name);
+
+    features_id = G_malloc(sizeof(int) * n_features);
+    G_zero(features_id, sizeof(int) * n_features);
+
+    n_nodes = Vect_get_num_nodes(InMap);
+    G_debug(3, "Found %d nodes in <%s> vector map", n_nodes, InMap->name);
+
+    db_begin_transaction(driver);
+
+    /* Stores category for a next record/turn in turntable. */
+    next_ttb_cat = 1;
+
+    /* Stores number of category which will be assigned to a next feature added into tucfield. */
+    i_ucat = 1;
+
+    list = G_new_ilist();
+
+    /* Every node represents one intersection. */
+    for (pivot_node = 1; pivot_node <= n_nodes; pivot_node++) {
+	n_node_lns = Vect_get_node_n_lines(InMap, pivot_node);
+
+	G_debug(3, "Found %d lines connected to node with id %d",
+		n_node_lns, pivot_node);
+
+	/*Creates record in turntable for every possible turn 
+	   in intersection defined by node and lines which meets on the node.
+
+	   It also takes into account  U-turns. */
+
+	for (i_line = 0; i_line < n_node_lns; i_line++) {
+
+	    ln_i_id = Vect_get_node_line(InMap, pivot_node, i_line);
+
+	    /*Line was not written into output map. */
+	    if (features_id[abs(ln_i_id) - 1] < 1) {
+		ltype_i =
+		    Vect_read_line(InMap, line_pnts_i, cats_i, abs(ln_i_id));
+		if (ltype_i <= 0) {G_fatal_error(_("Unable to read line from <%s>."), Vect_get_full_name(InMap));}
+
+		/* If line does not belong into arc layer, skip it. */
+		if (Vect_field_cat_get(cats_i, a_field, list) < 0 ||
+		    !(ltype_i & arc_type))
+		    continue;
+
+		/* Delete categories in tfield and tucfield if they are defined in input map. */
+		Vect_field_cat_del(cats_i, tfield, -1);
+		Vect_field_cat_del(cats_i, tucfield, -1);
+	    }
+
+	    /*If i line has been already written into output map, 
+	       we need to take it's categories from the output map with categories 
+	       for tlayer and tuclayer. */
+	    else {
+		ln_i_id = Vect_get_node_line(InMap, pivot_node, i_line);
+
+		ltype_i = V1_read_line_nat(OutMap, line_pnts_i, cats_i,
+					 features_id[abs(ln_i_id) - 1]);
+		 if (ltype_i <= 0) {G_fatal_error(_("Unable to read line from <%s>."), Vect_get_full_name(OutMap));}
+
+		Vect_cat_get(cats_i, tucfield, &ln_i_ucat);
+
+		/* add line direction information to ucat */
+		if (ln_i_id < 0)
+		    ln_i_ucat *= -1;
+
+	    }
+
+	    for (j_line = i_line; j_line < n_node_lns; j_line++) {
+
+		ln_j_id = Vect_get_node_line(InMap, pivot_node, j_line);
+
+		/* write line, which has not been written into new map yet. */
+		if (features_id[abs(ln_j_id) - 1] < 1) {
+		    /* Get line from input map. */
+		    ltype_j =
+			Vect_read_line(InMap, line_pnts_j, cats_j,
+				       abs(ln_j_id));
+			if (ltype_j <= 0) {G_fatal_error(_("Unable to read line from <%s>."), Vect_get_full_name(InMap));}
+
+		    /* If line does not belong into arc layer, skip it. */
+		    if (Vect_field_cat_get(cats_j, a_field, list) < 0 ||
+			!(ltype_i & arc_type))
+			continue;
+
+		    /* Delete categories in tfield and tucfield if  definedthey are in input map. */
+		    Vect_field_cat_del(cats_j, tfield, -1);
+		    Vect_field_cat_del(cats_j, tucfield, -1);
+
+
+		    /* Assign unique category (assigned only when feature is written). */
+		    Vect_cat_set(cats_j, tucfield, i_ucat);
+		    ln_j_ucat = i_ucat;
+		    /* add line direction information to ucat */
+		    if (ln_j_id < 0)
+			ln_j_ucat *= -1;
+
+
+		    /* Assign turn category in turntable for the U-turn. */
+		    Vect_cat_set(cats_j, tfield, next_ttb_cat);
+		    Vect_cat_set(cats_j, tfield, next_ttb_cat + 1);
+
+
+		    /* We create two nodes in turntable for every line. These nodes have 
+		       positive and negative values, with their absolute values identical.
+
+		       Every node corresponds to opposite line direction. The positive node 
+		       matches the direction of line. The negative node matches the opposite direction.
+
+		       Imagine that you are standing on some road/line before a intersection wanting to cross it.
+		       If you are going to cross intersection, which is in line direction,
+		       you are standing on the POSITIVE NODE. If you would cross the intersection from any other line 
+		       to the line, you would come into the NEGATIVE NODE. 
+
+		       These two nodes are connected with U-turns, which are two for both direction. 
+		       Every U-turn direction belongs to the another intersection. U-turn from the POSITIVE NODE 
+		       to the NEGATIVE one belongs to the intersection we are going to cross. The other U-turn belongs 
+		       to a intersection in opposite end of the line.
+
+		       Turntable columns:
+
+		       cat - category in tfield (layer with turntable), which are hold by both ln_from and ln_to lines 
+		       ln_from - unique category in tucfield assigned to the line 
+		       ln_to - unique category in tucfield assigned to the line 
+		       cost - cost for turn from ln_from to ln_to
+		       isec - point category in tucfield, which represents the intersection, where the turn belongs
+		       angle - in radians, see comments in compute_lines_angle function, it is PI for U-turns
+		     */
+
+		    /* Find second node (outside_node) of the line. */
+		    Vect_get_line_nodes(InMap, abs(ln_j_id), &node1, &node2);
+
+		    if (node1 == pivot_node)
+			outside_node = node2;
+		    else
+			outside_node = node1;
+
+		    /* Decide intersection where U-turns belong. */
+		    if (ln_j_id < 0) {
+			isec_start_ucat = outside_node + n_lines;
+			isec_end_ucat = pivot_node + n_lines;
+		    }
+		    else {
+			isec_start_ucat = pivot_node + n_lines;
+			isec_end_ucat = outside_node + n_lines;
+		    }
+
+		    /* If i and j lines are identical, write these categories also into i line,
+		       otherwise they would be forgotten during rewriting of i line. */
+		    if (ln_j_id == ln_i_id) {
+			Vect_cat_set(cats_i, tfield, next_ttb_cat);
+			Vect_cat_set(cats_i, tfield, next_ttb_cat + 1);
+			Vect_cat_set(cats_i, tucfield, i_ucat);
+		    }
+
+		    if (add_uturn
+			(driver, ttb_name, &next_ttb_cat, abs(ln_j_ucat),
+			 isec_start_ucat, isec_end_ucat) < 0) {
+
+			G_fatal_error(_
+				      ("Unable to insert data into turntable."));
+		    }
+
+		    /* increment unique category number for next line, which will be written */
+		    ++i_ucat;
+
+		    /* If i line and j line are different, we also need to insert a turn which is defined
+		       by these two edges, therefore we need to add new category to j line, which is corresponding
+		       to the turn.  
+		     */
+		    if (abs(ln_j_id) != abs(ln_i_id)) {
+			Vect_cat_set(cats_j, tfield, next_ttb_cat);
+			Vect_cat_set(cats_j, tfield, next_ttb_cat + 1);
+		    }
+
+		    /* Write new line into output map and save it's id to be possible to find it and edit it later 
+		       (when we get to intersection, which is in other end of the line.) */
+		    features_id[abs(ln_j_id) - 1] =
+			V1_write_line_nat(OutMap, ltype_j, line_pnts_j, cats_j);
+
+		    /* i, j lines  are equal, it consists only U-turn
+		       Absolute values are there because in case of the lines which have same start and end point, we do not want 
+		       to create redundant lines between these points. This combination has been already done by uturn method.
+		     */
+		    if (abs(ln_j_id) == abs(ln_i_id)) {
+			/* remember unique category also for i line */
+			ln_i_ucat = ln_j_ucat;
+			continue;
+		    }
+		}
+		/* skip if i, j lines are same (U-turn was already written) */
+		else if (abs(ln_j_id) == abs(ln_i_id))
+		    continue;
+		/* write new turn combination for already written i, j lines into output map */
+		else {
+		    /* Get modified cats from out map also for j line, which was already written and 
+		       cats differ from the former cats in the line in input map. */
+		    ltype_j = V1_read_line_nat(OutMap, line_pnts_j, cats_j,
+					     features_id[abs(ln_j_id) - 1]);
+			if (ltype_j <= 0) {G_fatal_error(_("Unable to read line from <%s>."), Vect_get_full_name(OutMap));}
+
+		    /* set category in turntable for new turn, which will be written */
+		    Vect_cat_set(cats_j, tfield, next_ttb_cat);
+		    Vect_cat_set(cats_j, tfield, next_ttb_cat + 1);
+
+		    /* get already assigned unique category of the j line 
+		       (used for ln_from_cat or ln_to_cat in turntable) */
+		    Vect_cat_get(cats_j, tucfield, &ln_j_ucat);
+
+		    /* add line direction information to ucat */
+		    if (ln_j_id < 0)
+			ln_j_ucat *= -1;
+
+		    /* rewrite j line with the added new category for the turn */
+		    features_id[abs(ln_j_id) - 1] = V1_rewrite_line_nat(OutMap, features_id[abs(ln_j_id) - 1],
+				      ltype_j, line_pnts_j, cats_j);
+
+		}
+
+		/* We have to decide which nodes will be connected, which depends on lines directions.
+		   Line direction information is stored in ln_i_id/ln_j_id variables. It the variable is 
+		   negative, the line goes into the intersection. If it is positive the line goes from the 
+		   intersection. */
+
+
+		/* The turn belongs to same intersection regardless the direction. Only exception are the U-turns. */
+		isec_start_ucat = isec_end_ucat = pivot_node + n_lines;
+
+		Vect_cat_set(cats_i, tfield, next_ttb_cat);
+		Vect_cat_set(cats_i, tfield, next_ttb_cat + 1);
+
+		if (add_turns(driver, ttb_name, &next_ttb_cat,
+			      ln_i_ucat, line_pnts_i, ln_j_ucat, line_pnts_j,
+			      isec_start_ucat) < 0) {
+
+		    G_fatal_error(_("Unable to insert data into turntable."));
+		}
+
+	    }
+
+	    /* rewrite i line */
+	    features_id[abs(ln_i_id) - 1] = V1_rewrite_line_nat(OutMap, features_id[abs(ln_i_id) - 1],
+			      ltype_i, line_pnts_i, cats_i);
+
+		    
+	}
+
+    }
+
+    box_List = Vect_new_boxlist(0);
+
+    /* Update point on every node (assing tuclayer cat) */
+    for (pivot_node = 1; pivot_node <= n_nodes; pivot_node++) {
+	Vect_reset_line(line_pnts_i);
+	Vect_reset_cats(cats_i);
+
+	Vect_get_node_coor(InMap, pivot_node, &x, &y, &z);
+	box.E = box.W = x;
+	box.N = box.S = y;
+	box.T = box.B = z;
+	Vect_select_lines_by_box(InMap, &box, GV_POINT, box_List);
+
+	found_pt_id = -1;
+	for (i_line = 0; i_line < box_List->n_values; i_line++) {
+	    ln_i_id = box_List->id[i_line];
+	    ltype_i = Vect_read_line(InMap, line_pnts_i, cats_i, ln_i_id);
+	    if (ltype_i <= 0) {G_fatal_error(_("Unable to read line from <%s>."), Vect_get_full_name(InMap));}
+
+	    if (ltype_i & GV_POINT) {
+		found_pt_id = ln_i_id;
+		break;
+	    }
+	}
+
+	/* No point on the node -> new is created. */
+	/* TODO check for more points on the node Vect_new_list */
+	if (found_pt_id == -1) {
+	    Vect_reset_line(line_pnts_i);
+	    Vect_get_node_coor(InMap, pivot_node, &x, &y, &z);
+	    Vect_append_point(line_pnts_i, x, y, z);
+	    Vect_cat_set(cats_i, tucfield, i_ucat);
+	    Vect_write_line(OutMap, GV_POINT, line_pnts_i, cats_i);
+	}
+	/* Category is updated on existing point on node. */
+	else {
+	    Vect_field_cat_del(cats_i, tucfield, -1);
+	    Vect_field_cat_del(cats_i, tfield, -1);
+	    Vect_cat_set(cats_i, tucfield, i_ucat);
+	    Vect_write_line(OutMap, GV_POINT, line_pnts_i, cats_i);
+	}
+
+	i_ucat++;
+    }
+
+
+    /* copy rest of features, to output map */
+    while ((ltype_i = Vect_read_next_line(InMap, line_pnts_i, cats_i)) > 0) {
+	/* line features in alayer are already in output map */
+	if (ltype_i & arc_type &&
+	    Vect_field_cat_get(cats_i, a_field, list) != -1) {
+	    continue;
+	}
+
+	/* points with node were already written into map */
+	if (ltype_i == GV_POINT && line_pnts_i->n_points &&
+	    Vect_find_node(InMap, line_pnts_i->x[0], line_pnts_i->y[0],
+			   line_pnts_i->z[0], 0.0, WITHOUT_Z) > 0) {
+	    continue;
+	}
+
+	/* Delete categories in tfield and tucfield if they are in input map defined. */
+	Vect_field_cat_del(cats_i, tucfield, -1);
+	Vect_field_cat_del(cats_i, tfield, -1);
+
+	Vect_write_line(OutMap, ltype_i, line_pnts_i, cats_i);
+    }
+
+    G_free_ilist(list);
+    G_free(features_id);
+
+    Vect_destroy_line_struct(line_pnts_i);
+    Vect_destroy_line_struct(line_pnts_j);
+    Vect_destroy_cats_struct(cats_i);
+    Vect_destroy_cats_struct(cats_j);
+    Vect_destroy_boxlist(box_List);
+
+    db_commit_transaction(driver);
+    return;
+}
+
+void turntable(struct opt *opt)
+{
+    struct Map_info InMap, OutMap;
+    struct field_info *fi;
+
+    char *database_name, *driver_name;
+
+    int i_field_num, field_num, i_field, type;
+
+    char *ttb_name;
+    char *key_col;
+    int tfield, tucfield, afield;
+
+    char buf[DB_SQL_MAX];
+    dbDriver *driver;
+
+    dbString db_buf;
+
+    if (Vect_open_old(&InMap, opt->input->answer, "") < 2) {
+	G_fatal_error(_("Unable to open vector map <%s>."),
+		      opt->input->answer);
+    }
+
+    if (Vect_open_new(&OutMap, opt->output->answer, WITHOUT_Z) < 1) {
+	G_fatal_error(_("Unable to create vector map <%s>."),
+		      opt->output->answer);
+    }
+
+    Vect_set_error_handler_io(&InMap, &OutMap);
+
+    type = Vect_option_to_types(opt->type);
+
+    afield = Vect_get_field_number(&InMap, opt->afield_opt->answer);
+    tfield = Vect_get_field_number(&InMap, opt->tfield->answer);
+    tucfield = Vect_get_field_number(&InMap, opt->tucfield->answer);
+
+    if (!Vect_get_field(&InMap, afield))
+	G_fatal_error(_("Arc layer <%s> does not exist in map <%s>."),
+		      opt->afield_opt->answer, opt->output->answer);
+
+    if (Vect_get_field(&InMap, tfield))
+	G_warning(_
+		  ("Layer <%s> already exist in map <%s>.\nIt will be overwritten by tlayer data."),
+		  opt->tfield->answer, opt->output->answer);
+
+    if (Vect_get_field(&InMap, tucfield))
+	G_warning(_
+		  ("Layer <%s> already exist in map <%s>.\nIt will be overwritten by tuclayer data."),
+		  opt->tucfield->answer, opt->output->answer);
+
+    ttb_name = NULL;
+    G_asprintf(&ttb_name, "%s_turntable_t_%s_tuc_%s_a_%s",
+	       Vect_get_name(&OutMap), opt->tfield->answer,
+	       opt->tucfield->answer, opt->afield_opt->answer);
+
+    /*Use database and driver as layer with lowest number, 
+       if the layer is not present use def settings. */
+    field_num = -1;
+    for (i_field = 0; i_field < Vect_cidx_get_num_fields(&InMap); i_field++) {
+	i_field_num = Vect_cidx_get_field_number(&InMap, i_field);
+	if (Vect_map_check_dblink(&InMap, i_field_num, NULL) == 0)
+	    continue;
+
+	if (field_num == -1)
+	    field_num = i_field_num;
+
+	if (i_field_num != tfield && i_field_num != tucfield)
+	    Vect_copy_tables(&InMap, &OutMap, i_field_num);
+    }
+
+    if (field_num < 0) {
+	driver_name = (char *)db_get_default_driver_name();
+	database_name = (char *)db_get_default_database_name();
+    }
+    else {
+	fi = Vect_get_field(&InMap, field_num);
+	driver_name = fi->driver;
+	database_name = fi->database;
+    }
+
+    driver = db_start_driver_open_database(driver_name, database_name);
+    if (driver == NULL)
+	G_fatal_error(_("Unable to open database <%s> using driver <%s>"),
+		      database_name, driver_name);
+    db_set_error_handler_driver(driver);
+
+    key_col = "cat";
+    sprintf(buf,
+	    "CREATE TABLE %s (%s INTEGER, ln_from INTEGER, ln_to INTEGER, "
+	    "cost DOUBLE PRECISION, isec INTEGER, angle DOUBLE PRECISION)",
+	    ttb_name, key_col);
+
+    db_init_string(&db_buf);
+    db_set_string(&db_buf, buf);
+
+    if (db_execute_immediate(driver, &db_buf) != DB_OK) {
+	db_free_string(&db_buf);
+	G_fatal_error(_("Unable to create turntable <%s>."), ttb_name);
+    }
+    db_free_string(&db_buf);
+
+    if (Vect_map_add_dblink(&OutMap, tfield,
+			    NULL, ttb_name, key_col,
+			    database_name, driver_name) == -1) {
+	G_fatal_error(_("Unable to connect table <%s> to vector map <%s>."),
+		      ttb_name, opt->input->answer);
+    }
+
+    if (db_create_index2(driver, ttb_name, key_col) != DB_OK)
+	G_warning(_("Unable to create index for column <%s> in table <%s>."),
+		  key_col, ttb_name);
+
+    Vect_build_partial(&OutMap, GV_BUILD_BASE);	/* switch to topological level */
+
+    populate_turntable(driver, &InMap, &OutMap, ttb_name, tfield,
+		       tucfield, afield, type);
+    Vect_close(&InMap);
+
+    db_close_database_shutdown_driver(driver);
+
+    Vect_build_partial(&OutMap, GV_BUILD_NONE);	/*must be there in order to be topology build */
+    Vect_build(&OutMap);
+
+    Vect_close(&OutMap);
+
+    return;
+}
diff --git a/vector/v.net/v.net.html b/vector/v.net/v.net.html
index 4f2a480..3285388 100644
--- a/vector/v.net/v.net.html
+++ b/vector/v.net/v.net.html
@@ -82,6 +82,29 @@ connect it to layer 2 with <em><a href="v.db.connect.html">v.db.connect</a></em>
 and update the new table with cat values with <em><a href="v.to.db.html">v.to.db</a></em>. 
 
 <p>
+The <em>turntable</em> operation creates a turntable  
+with the costs for every possible 
+turn on every possible node (intersection, crossroad) in given layer (arc_layer). 
+U-turns are taken in account too.
+Turntable is created in <b>turn_layer</b> and <b>turn_cat_layer</b>.
+Building the turntable allows you to model e.g. trafic code, where some turns 
+may be prohibited.
+If features in analyzed network are changed, the turntable must be created again
+(e.g. it includes v.net connect operation).
+Turntable name consists of output vector map name + "_turntable_" + "t" + "_" + turn_layer +
+ "_" + "tuc" + "_" + turn_cat_layer + "_" + "a" + "_" + arc_layer  e. g. roads_turntable_t_3_tuc_4_a_1
+
+<p>These modules are able to work with the turntable: 
+<em><a href="v.net.alloc.html">v.net.alloc</a></em>,
+<em><a href="v.net.iso.html">v.net.iso</a></em>,
+<em><a href="v.net.path.html">v.net.path</a></em>,
+<em><a href="v.net.salesman.html">v.net.salesman</a></em><!--,-->
+<!--<em><a href="v.net.steiner.html">v.net.steiner</a></em>.-->
+
+For more information about turns in the vector network analyses see 
+<a href="http://grasswiki.osgeo.org/wiki/Turns_in_the_vector_network_analysis">wiki page</a>.
+
+<p>
 Once a vector network has been created, it can be analyzed in a 
 number of powerful ways using the suite of <em>v.net</em>.* modules. 
 The shortest route between two nodes, following arcs, can be computed
@@ -178,6 +201,13 @@ EOF
 v.category geodetic_swwake_pts_net option=report
 </pre></div>
 
+<h3>Generating network with turntable for vector point map</h3>
+
+Following example generates a vector map with turntable:
+<div class="code"><pre>
+v.net operation=turntable in=railroads out=railroads_ttb
+</pre></div>
+
 <h2>SEE ALSO</h2>
 
 <em>
@@ -212,5 +242,15 @@ Martin Landa, FBK-irst (formerly ITC-irst), Trento, Italy and CTU in
 Prague, Czech Republic (operation 'connect' and 'arcs')<br>
 
 Markus Metz: important fixes and improvements
+
+<h3>TURNS SUPPORT</h3>
+
+The turns support was implemnented as part of GRASS GIS turns cost project at Czech Technical University in Prague, Czech Republic.  
+Eliska Kyzlikova, Stepan Turek, Lukas Bocan and Viera Bejdova participated at the project.
+
+Implementation: Stepan Turek 
+Documentation: Lukas Bocan
+Mentor: Martin Landa
+
 <p>
-<i>Last changed: $Date: 2016-04-30 21:04:20 +0200 (Sat, 30 Apr 2016) $</i>
+<i>Last changed: $Date: 2016-04-30 21:03:24 +0200 (Sat, 30 Apr 2016) $</i>
diff --git a/vector/v.normal/v.normal.html b/vector/v.normal/v.normal.html
index c9c34eb..bfafdd8 100644
--- a/vector/v.normal/v.normal.html
+++ b/vector/v.normal/v.normal.html
@@ -61,4 +61,4 @@ v.normal random tests=1-3,14 column=elev
 <a href="https://engineering.purdue.edu/ABE/">Agricultural Engineering</a>
 <a href="http://www.purdue.edu/">Purdue University</a>
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/vector/v.out.ascii/v.out.ascii.html b/vector/v.out.ascii/v.out.ascii.html
index 4ac6e68..5c61bab 100644
--- a/vector/v.out.ascii/v.out.ascii.html
+++ b/vector/v.out.ascii/v.out.ascii.html
@@ -150,4 +150,4 @@ Attribute selection added by Martin Landa, Czech Technical University
 in Prague, Czech Republic (2008/12)
 
 <p>
-<i>Last changed: $Date: 2014-07-29 00:07:11 +0200 (Tue, 29 Jul 2014) $</i>
+<i>Last changed: $Date: 2014-05-13 17:16:33 +0200 (Tue, 13 May 2014) $</i>
diff --git a/vector/v.out.lidar/Makefile b/vector/v.out.lidar/Makefile
new file mode 100644
index 0000000..153c4b4
--- /dev/null
+++ b/vector/v.out.lidar/Makefile
@@ -0,0 +1,16 @@
+MODULE_TOPDIR = ../..
+
+PGM=v.out.lidar
+
+LIBES = $(GPROJLIB) $(VECTORLIB) $(DBMILIB) $(GISLIB) $(LASLIBS) $(MATHLIB) $(RASTERLIB)
+DEPENDENCIES = $(GPROJDEP) $(VECTORDEP) $(DBMIDEP) $(GISDEP) $(RASTERDEP)
+
+EXTRA_INC = $(VECT_INC) $(PROJINC) $(LASINC)
+EXTRA_CFLAGS = $(VECT_CFLAGS)
+
+include $(MODULE_TOPDIR)/include/Make/Module.make
+
+ifneq ($(USE_LIBLAS),)
+default: cmd
+endif
+
diff --git a/vector/v.out.lidar/main.c b/vector/v.out.lidar/main.c
new file mode 100644
index 0000000..59528c8
--- /dev/null
+++ b/vector/v.out.lidar/main.c
@@ -0,0 +1,775 @@
+/***********************************************************************
+ *
+ * MODULE:       v.out.lidar
+ *
+ * AUTHOR(S):    Vaclav Petras
+ *
+ * PURPOSE:      Export LiDAR LAS points
+ *
+ * COPYRIGHT:    (C) 2015 by Vaclav Petras and the GRASS Development Team
+ *
+ *               This program is free software under the
+ *               GNU General Public License (>=v2).
+ *               Read the file COPYING that comes with GRASS
+ *               for details.
+ *
+***********************************************************************/
+
+#include <stdlib.h>
+
+#include <grass/gis.h>
+#include <grass/colors.h>
+#include <grass/raster.h>
+#include <grass/dbmi.h>
+#include <grass/vector.h>
+#include <grass/gprojects.h>
+#include <grass/glocale.h>
+
+#include <liblas/capi/liblas.h>
+
+#define LAS_FIRST 1
+#define LAS_MID 2
+#define LAS_LAST 3
+
+struct WriteContext
+{
+    LASWriterH las_writer;
+    LASPointH las_point;
+    LASColorH las_color;
+    struct Colors *color_table;
+    int layer;
+    int return_layer;
+    int class_layer;
+    int rgb_layer;
+    dbCatValArray *return_column_values;
+    dbCatValArray *n_returns_column_values;
+    dbCatValArray *class_column_values;
+    dbCatValArray *grass_rgb_column_values;
+    dbCatValArray *red_column_values;
+    dbCatValArray *green_column_values;
+    dbCatValArray *blue_column_values;
+};
+
+
+struct LidarColumnNames
+{
+    const char *return_n;
+    const char *n_returns;
+    const char *class_n;
+    const char *grass_rgb;
+    const char *red;
+    const char *green;
+    const char *blue;
+};
+
+
+/*! Open database and store driver and field info
+ * 
+ * Use close_database() when you are finished with queries
+ */
+static void open_database(struct Map_info *vector, int field,
+                          dbDriver ** driver, struct field_info **f_info)
+{
+    struct field_info *f_info_tmp = Vect_get_field(vector, field);
+    if (f_info_tmp == NULL) {
+        /* not ideal message since we don't know the original name of
+         * the field in case of OGR */
+        G_fatal_error(_("Database connection not defined for layer <%d>"),
+                      field);
+    }
+
+    dbDriver *driver_tmp =
+        db_start_driver_open_database(f_info_tmp->driver,
+                                      f_info_tmp->database);
+    if (driver_tmp == NULL)
+        G_fatal_error("Unable to open database <%s> by driver <%s>",
+                      f_info_tmp->database, f_info_tmp->driver);
+    db_set_error_handler_driver(driver_tmp);
+    *f_info = f_info_tmp;
+    *driver = driver_tmp;
+}
+
+static void close_database(dbDriver * driver)
+{
+    db_close_database_shutdown_driver(driver);
+}
+
+/*! Get values in a column
+ *
+ * Checks the type of the column; fails with fatal for non-numeric columns
+ * and warns for floating point columns.
+ *
+ * Use db_CatValArray_free() and G_free() to deallocate the memory.
+ *
+ * \returns cat-value array with column values for each category
+ */
+static dbCatValArray *select_integers_from_database(dbDriver * driver,
+                                                    struct field_info *f_info,
+                                                    const char *column,
+                                                    const char *where)
+{
+    G_debug(1, "select_integers_from_database: column=%s", column);
+    dbCatValArray *column_values = G_malloc(sizeof(dbCatValArray));
+
+    /* check if column exists */
+    int ctype = db_column_Ctype(driver, f_info->table, column);
+
+    if (ctype == -1)
+        G_fatal_error(_("Column <%s> not found in table <%s>"),
+                      column, f_info->table);
+    if (ctype != DB_C_TYPE_INT && ctype != DB_C_TYPE_DOUBLE)
+        G_fatal_error(_("Only numeric column type is supported"));
+    if (ctype == DB_C_TYPE_DOUBLE)
+        G_warning(_("Double values will be converted to integers"));
+
+    db_CatValArray_init(column_values);
+    int nrec =
+        db_select_CatValArray(driver, f_info->table, f_info->key, column,
+                              where, column_values);
+
+    G_debug(2, "db_select_CatValArray() nrec = %d", nrec);
+    if (nrec < 0)
+        G_fatal_error(_("Unable to select data from table"));
+    return column_values;
+}
+
+/*! Get values in a column
+ *
+ * Checks the type of the column; fails with fatal for non-numeric columns
+ * and warns for floating point columns.
+ *
+ * \returns cat-value array with column values for each category
+ */
+static dbCatValArray *select_strings_from_database(dbDriver * driver,
+                                                   struct field_info *f_info,
+                                                   const char *column,
+                                                   const char *where)
+{
+    G_debug(1, "select_strings_from_database: column=%s", column);
+    dbCatValArray *column_values = G_malloc(sizeof(dbCatValArray));
+
+    /* check if column exists */
+    int ctype = db_column_Ctype(driver, f_info->table, column);
+
+    if (ctype == -1)
+        G_fatal_error(_("Column <%s> not found in table <%s>"),
+                      column, f_info->table);
+    if (ctype != DB_C_TYPE_STRING)
+        G_fatal_error(_("Only numeric column type is supported"));
+
+    db_CatValArray_init(column_values);
+    int nrec =
+        db_select_CatValArray(driver, f_info->table, f_info->key, column,
+                              where, column_values);
+
+    G_debug(2, "db_select_CatValArray() nrec = %d", nrec);
+    if (nrec < 0)
+        G_fatal_error(_("Unable to select data from table"));
+    return column_values;
+}
+
+/*! Get integer value in a column for a category
+ *
+ * Floating point numbers are casted to integers.
+ * If the column is not numerical, fatal error is issued.
+ *
+ * \returns The value of the column as an integer
+ */
+static int get_integer_column_value(dbCatValArray * column_values, int cat)
+{
+    int val;
+    dbCatVal *catval;
+
+    if (db_CatValArray_get_value(column_values, cat, &catval) != DB_OK) {
+        G_fatal_error(_("No record for cat = %d"), cat);
+    }
+    if (catval->isNull) {
+        G_fatal_error(_("NULL value for cat = %d"), cat);
+    }
+
+    if (column_values->ctype == DB_C_TYPE_INT) {
+        val = catval->val.i;
+    }
+    else if (column_values->ctype == DB_C_TYPE_DOUBLE) {
+        val = catval->val.d;
+    } else {
+        G_fatal_error(_("Column type is not numeric (type = %d, cat = %d"),
+            column_values->ctype, cat);
+    }
+    return val;
+}
+
+/*! Get RGB in a column for a category as three integers
+ *
+ * Expects the column to be a string.
+ */
+static void get_color_column_value(dbCatValArray * cvarr, int cat,
+                                   int *red, int *green, int *blue)
+{
+    char colorstring[12];       /* RRR:GGG:BBB */
+    dbCatVal *value = NULL;
+
+    /* read RGB colors from db for current area # */
+    if (cvarr && db_CatValArray_get_value(cvarr, cat, &value) == DB_OK) {
+        sprintf(colorstring, "%s", db_get_string(value->val.s));
+        if (*colorstring != '\0') {
+            G_debug(5, "element: colorstring: %s", colorstring);
+            if (G_str_to_color(colorstring, red, green, blue) == 1) {
+                G_debug(5, "element: cat %d r:%d g:%d b:%d",
+                        cat, *red, *green, *blue);
+                /* TODO: handle return code 2 for none? */
+            }
+            else {
+                G_debug(5, "Invalid color definition '%s' ignored",
+                        colorstring);
+            }
+        }
+        else {
+            G_debug(5, "Invalid color definition '%s' ignored", colorstring);
+        }
+    }
+}
+
+static void load_columns(struct WriteContext *write_context,
+                         dbDriver * db_driver, struct field_info *f_info,
+                         struct LidarColumnNames *columns, const char *where)
+{
+    if (columns->return_n) {
+        write_context->return_column_values =
+            select_integers_from_database(db_driver, f_info,
+                                          columns->return_n, where);
+    }
+    if (columns->n_returns) {
+        write_context->n_returns_column_values =
+            select_integers_from_database(db_driver, f_info,
+                                          columns->n_returns, where);
+    }
+    if (columns->class_n) {
+        write_context->class_column_values =
+            select_integers_from_database(db_driver, f_info,
+                                          columns->class_n, where);
+    }
+    if (columns->grass_rgb) {
+        write_context->grass_rgb_column_values =
+            select_strings_from_database(db_driver, f_info,
+                                         columns->grass_rgb, where);
+    }
+    if (columns->red) {
+        write_context->red_column_values =
+            select_integers_from_database(db_driver, f_info,
+                                          columns->red, where);
+    }
+    if (columns->green) {
+        write_context->green_column_values =
+            select_integers_from_database(db_driver, f_info,
+                                          columns->green, where);
+    }
+    if (columns->blue) {
+        write_context->blue_column_values =
+            select_integers_from_database(db_driver, f_info,
+                                          columns->blue, where);
+    }
+}
+
+/*! Deallocate the memory for cat-value arrays */
+static void free_columns(struct WriteContext *write_context)
+{
+    if (write_context->return_column_values) {
+        db_CatValArray_free(write_context->return_column_values);
+        G_free(write_context->return_column_values);
+    }
+    if (write_context->n_returns_column_values) {
+        db_CatValArray_free(write_context->n_returns_column_values);
+        G_free(write_context->n_returns_column_values);
+    }
+    if (write_context->class_column_values) {
+        db_CatValArray_free(write_context->class_column_values);
+        G_free(write_context->class_column_values);
+    }
+    if (write_context->grass_rgb_column_values) {
+        db_CatValArray_free(write_context->grass_rgb_column_values);
+        G_free(write_context->grass_rgb_column_values);
+    }
+    if (write_context->red_column_values) {
+        db_CatValArray_free(write_context->red_column_values);
+        G_free(write_context->red_column_values);
+    }
+    if (write_context->green_column_values) {
+        db_CatValArray_free(write_context->green_column_values);
+        G_free(write_context->green_column_values);
+    }
+    if (write_context->blue_column_values) {
+        db_CatValArray_free(write_context->blue_column_values);
+        G_free(write_context->blue_column_values);
+    }
+}
+
+/*! Set point attributes from the attribute table
+ *
+ * All tables are taken from the context structure. The point and color
+ * are also taken from there.
+ */
+static void set_point_attributes_from_table(struct WriteContext *context,
+                                            int cat)
+{
+    LASPointH las_point = context->las_point;
+
+    if (context->return_column_values) {
+        int return_n =
+            get_integer_column_value(context->return_column_values, cat);
+        LASPoint_SetReturnNumber(las_point, return_n);
+    }
+    if (context->n_returns_column_values) {
+        int val =
+            get_integer_column_value(context->n_returns_column_values, cat);
+        LASPoint_SetNumberOfReturns(las_point, val);
+    }
+    if (context->class_column_values) {
+        int val = get_integer_column_value(context->class_column_values, cat);
+
+        LASPoint_SetClassification(las_point, val);
+    }
+    if (context->grass_rgb_column_values || context->red_column_values ||
+        context->green_column_values || context->blue_column_values) {
+        LASColorH las_color = context->las_color;
+
+        if (context->grass_rgb_column_values) {
+            int red, green, blue;
+
+            get_color_column_value(context->grass_rgb_column_values, cat,
+                                   &red, &green, &blue);
+            LASColor_SetRed(las_color, red);
+            LASColor_SetGreen(las_color, green);
+            LASColor_SetBlue(las_color, blue);
+        }
+        if (context->red_column_values) {
+            int val =
+                get_integer_column_value(context->red_column_values, cat);
+            LASColor_SetRed(las_color, val);
+        }
+        if (context->green_column_values) {
+            int val =
+                get_integer_column_value(context->green_column_values, cat);
+            LASColor_SetGreen(las_color, val);
+        }
+        if (context->blue_column_values) {
+            int val =
+                get_integer_column_value(context->blue_column_values, cat);
+            LASColor_SetBlue(las_color, val);
+        }
+        LASPoint_SetColor(las_point, las_color);
+    }
+}
+
+static void write_point(struct WriteContext *context, int cat, double x,
+                        double y, double z, struct line_cats *cats)
+{
+    LASPointH las_point = context->las_point;
+
+    LASPoint_SetX(las_point, x);
+    LASPoint_SetY(las_point, y);
+    LASPoint_SetZ(las_point, z);
+
+    /* only call when we actually using the attributes */
+    if (context->layer > 0)
+        set_point_attributes_from_table(context, cat);
+    /* after this point cat is used as a short term variable
+     * to store category to retrieve attributes */
+    
+    /* read color table */
+    if (context->color_table) {
+        int red, green, blue;
+        LASColorH las_color = context->las_color;
+        if (Rast_get_c_color(&cat, &red, &green, &blue, context->color_table) == 1) {
+            LASColor_SetRed(las_color, red);
+            LASColor_SetGreen(las_color, green);
+            LASColor_SetBlue(las_color, blue);
+            LASPoint_SetColor(las_point, las_color);
+        }
+        /* TODO: what else, fail, skip or put some defaults? */
+    }
+
+    if (context->return_layer) {
+        if (!Vect_cat_get(cats, context->return_layer, &cat))
+            return;             /* TODO: is this an error? */
+        if (cat == LAS_FIRST) {
+            LASPoint_SetReturnNumber(las_point, LAS_FIRST);
+            LASPoint_SetNumberOfReturns(las_point, LAS_FIRST);
+        } else if (cat == LAS_LAST) {
+            LASPoint_SetReturnNumber(las_point, LAS_LAST);
+            LASPoint_SetNumberOfReturns(las_point, LAS_LAST);
+        } else {
+            LASPoint_SetReturnNumber(las_point, LAS_MID);
+            LASPoint_SetNumberOfReturns(las_point, LAS_LAST);
+        }
+    }
+    if (context->class_layer) {
+        if (!Vect_cat_get(cats, context->class_layer, &cat))
+            return;             /* TODO: is this an error? */
+        LASPoint_SetClassification(las_point, cat);
+    }
+    if (context->rgb_layer) {
+        LASColorH las_color = context->las_color;
+
+        /* TODO: defaults for the color are what? */
+        /* TODO: check the range for RGB? */
+        if (context->rgb_layer) {
+            if (!Vect_cat_get(cats, context->rgb_layer, &cat))
+                return;         /* TODO: is this an error? */
+            /* cat 0 is not valid, so we are adding 1 when storing
+             * now we need to subtract 1 */
+            int rgb = cat - 1;
+            int red = (rgb >> 16) & 0xFF;
+            int green = (rgb >> 8) & 0xFF;
+            int blue = rgb & 0xFF;
+
+            LASColor_SetRed(las_color, red);
+            LASColor_SetGreen(las_color, green);
+            LASColor_SetBlue(las_color, blue);
+        }                       /* TODO: else all the others? */
+        LASPoint_SetColor(las_point, las_color);
+    }
+
+    LASError error = LASWriter_WritePoint(context->las_writer, las_point);
+
+    if (error)
+        G_fatal_error("Failure when writing a point");
+}
+
+
+/* TODO: these have overlap with vector lib, really needed? */
+static int point_in_region_2d(struct Cell_head *region, double x, double y)
+{
+    if (x > region->east || x < region->west || y < region->south ||
+        y > region->north)
+        return FALSE;
+    return TRUE;
+}
+
+
+int main(int argc, char **argv)
+{
+    struct GModule *module;
+    struct Option *map_opt, *foutput_opt;
+    struct Option *field_opt, *cats_opt;
+    struct Option *id_layer_opt;
+    struct Option *return_layer_opt;
+    struct Option *class_layer_opt;
+    struct Option *rgb_layer_opt;
+    struct Option *return_column_opt, *n_returns_column_opt;
+    struct Option *class_column_opt;
+    struct Option *grass_rgb_column_opt;
+    struct Option *red_column_opt, *green_column_opt, *blue_column_opt;
+    struct Option *where_opt;
+    struct Option *las_xyscale_opt, *las_zscale_opt;
+    struct Flag *region_flag, *no_color_table_flag;
+    struct Map_info vinput;
+
+    G_gisinit(argv[0]);
+
+    module = G_define_module();
+    G_add_keyword(_("vector"));
+    G_add_keyword(_("export"));
+    G_add_keyword(_("LIDAR"));
+    G_add_keyword(_("points"));
+    module->label = _("Exports vector points as LAS point cloud");
+    module->description = _("Converts LAS LiDAR point clouds to a GRASS"
+                            " vector map with libLAS");
+
+    map_opt = G_define_standard_option(G_OPT_V_INPUT);
+
+    field_opt = G_define_standard_option(G_OPT_V_FIELD_ALL);
+    field_opt->required = NO;
+
+    foutput_opt = G_define_standard_option(G_OPT_F_OUTPUT);
+
+    cats_opt = G_define_standard_option(G_OPT_V_CATS);
+    cats_opt->guisection = _("Selection");
+
+    /* TODO: supported only when attributes are actually used */
+    where_opt = G_define_standard_option(G_OPT_DB_WHERE);
+    where_opt->guisection = _("Selection");
+
+    id_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    id_layer_opt->key = "id_layer";
+    id_layer_opt->label =
+        _("Layer number to store generated point ID as category");
+    id_layer_opt->answer = NULL;
+    id_layer_opt->guisection = _("Categories");
+
+    return_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    return_layer_opt->key = "return_layer";
+    return_layer_opt->label =
+        _("Layer number to store return number as category");
+    return_layer_opt->answer = NULL;
+    return_layer_opt->guisection = _("Categories");
+
+    class_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    class_layer_opt->key = "class_layer";
+    class_layer_opt->label =
+        _("Layer number to store class number as category");
+    class_layer_opt->answer = NULL;
+    class_layer_opt->guisection = _("Categories");
+
+    rgb_layer_opt = G_define_standard_option(G_OPT_V_FIELD);
+    rgb_layer_opt->key = "rgb_layer";
+    rgb_layer_opt->label =
+        _("Layer number where RGB color is stored as category");
+    rgb_layer_opt->answer = NULL;
+    rgb_layer_opt->guisection = _("Categories");
+
+    /* TODO: probably replace the option by standardized/expected column names */
+
+    return_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    return_column_opt->key = "return_column";
+    return_column_opt->label = _("Column with return number");
+    return_column_opt->required = NO;
+    return_column_opt->guisection = _("Columns");
+
+    n_returns_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    n_returns_column_opt->key = "n_returns_column";
+    n_returns_column_opt->label = _("Column with return number");
+    n_returns_column_opt->required = NO;
+    n_returns_column_opt->guisection = _("Columns");
+
+    class_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    class_column_opt->key = "class_column";
+    class_column_opt->label = _("Column with return number");
+    class_column_opt->required = NO;
+    class_column_opt->guisection = _("Columns");
+
+    grass_rgb_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    grass_rgb_column_opt->key = "rgb_column";
+    grass_rgb_column_opt->label = _("RGB color definition column");
+    grass_rgb_column_opt->description = _("Color definition in R:G:B form");
+    grass_rgb_column_opt->required = NO;
+    grass_rgb_column_opt->guisection = _("Columns");
+
+    red_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    red_column_opt->key = "red_column";
+    red_column_opt->label = _("Column with red color");
+    red_column_opt->required = NO;
+    red_column_opt->guisection = _("Columns");
+
+    green_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    green_column_opt->key = "green_column";
+    green_column_opt->label = _("Column with green color");
+    green_column_opt->required = NO;
+    green_column_opt->guisection = _("Columns");
+
+    blue_column_opt = G_define_standard_option(G_OPT_DB_COLUMN);
+    blue_column_opt->key = "blue_column";
+    blue_column_opt->label = _("Column with blue color");
+    blue_column_opt->required = NO;
+    blue_column_opt->guisection = _("Columns");
+
+    las_xyscale_opt = G_define_option();
+    las_xyscale_opt->key = "las_xyscale";
+    las_xyscale_opt->type = TYPE_DOUBLE;
+    las_xyscale_opt->required = YES;
+    las_xyscale_opt->answer = "0.01";
+    las_xyscale_opt->label = _("Internal scale to apply to X and Y values");
+    las_xyscale_opt->description = _("This scale does not change"
+        " the values itself but only how precisely they are stored,"
+        " for example 0.01 will preserve two decimal places");
+
+    las_zscale_opt = G_define_option();
+    las_zscale_opt->key = "las_zscale";
+    las_zscale_opt->type = TYPE_DOUBLE;
+    las_zscale_opt->required = YES;
+    las_zscale_opt->answer = "0.01";
+    las_zscale_opt->label = _("Internal scale to apply to z values");
+    las_zscale_opt->description = _("This scale does not change"
+        " the values itself but only how precisely they are stored,"
+        " for example 0.01 will preserve two decimal places");
+
+    region_flag = G_define_flag();
+    region_flag->key = 'r';
+    region_flag->guisection = _("Selection");
+    region_flag->description = _("Limit export to the current region");
+
+    no_color_table_flag = G_define_flag();
+    no_color_table_flag->key = 'w';
+    no_color_table_flag->label = _("Ignore color table");
+    no_color_table_flag->description =
+        _("Ignore color table even when set and not other options are present");
+
+
+    if (G_parser(argc, argv))
+        exit(EXIT_FAILURE);
+
+    /* TODO: layer required > 0 with columns */
+
+    /* TODO: do some check */
+    /*Vect_check_input_output_name(map_opt->answer, voutput_opt->answer,
+       G_FATAL_EXIT);
+     */
+
+    if (Vect_open_old2(&vinput, map_opt->answer, "", field_opt->answer) < 0)
+        G_fatal_error(_("Unable to open vector map <%s>"), map_opt->answer);
+    int layer = Vect_get_field_number(&vinput, field_opt->answer);
+
+    struct cat_list *allowed_cats = NULL;
+
+    if (layer > 0)
+        allowed_cats = Vect_cats_set_constraint(&vinput, layer, NULL,
+                                                cats_opt->answer);
+
+    struct line_pnts *line = Vect_new_line_struct();
+    struct line_cats *cats = Vect_new_cats_struct();
+
+    struct Cell_head comp_region;
+
+    G_get_window(&comp_region);
+
+    struct WriteContext write_context;
+
+    write_context.return_layer = 0;
+    write_context.class_layer = 0;
+    write_context.rgb_layer = 0;
+    if (return_layer_opt->answer)
+        write_context.return_layer = atoi(return_layer_opt->answer);
+    if (class_layer_opt->answer)
+        write_context.class_layer = atoi(class_layer_opt->answer);
+    if (rgb_layer_opt->answer)
+        write_context.rgb_layer = atoi(rgb_layer_opt->answer);
+
+    /* get GRASS loc proj info */
+    struct Key_Value *proj_info;
+    struct Key_Value *proj_units;
+
+    /* TODO: should we test for PROJECTION_XY? */
+    proj_info = G_get_projinfo();
+    proj_units = G_get_projunits();
+    char *current_wkt = GPJ_grass_to_wkt(proj_info, proj_units, FALSE, FALSE);
+
+    G_free_key_value(proj_info);
+    G_free_key_value(proj_units);
+
+    /* TODO: ignoring errors */
+    LASWriterH las_writer;
+    LASHeaderH las_header = LASHeader_Create();
+    LASSRSH las_srs = LASSRS_Create();
+
+    LASSRS_SetWKT(las_srs, current_wkt);
+    LASHeader_SetSRS(las_header, las_srs);
+    LASHeader_SetScale(las_header, atof(las_xyscale_opt->answer),
+        atof(las_xyscale_opt->answer), atof(las_zscale_opt->answer));
+    /* TODO: support append mode */
+    int write_mode = 1;
+
+    las_writer = LASWriter_Create(foutput_opt->answer,
+                                  las_header, write_mode);
+    write_context.las_writer = las_writer;
+
+    /* to avoid allocation for each point we are writing */
+    write_context.las_point = LASPoint_Create();
+    LASPoint_SetHeader(write_context.las_point, las_header);
+    write_context.las_color = LASColor_Create();
+
+    write_context.layer = layer;
+    write_context.return_column_values = 0;
+    write_context.n_returns_column_values = 0;
+    write_context.class_column_values = 0;
+    write_context.grass_rgb_column_values = 0;
+    write_context.red_column_values = 0;
+    write_context.green_column_values = 0;
+    write_context.blue_column_values = 0;
+    /* TODO: limit select by the cat values */
+    /* TODO: limit select by 2D/3D region and zrange, possible? */
+
+    int use_color_attributes = FALSE;
+
+    if (return_column_opt->answer || n_returns_column_opt->answer
+        || class_column_opt->answer || grass_rgb_column_opt->answer
+        || red_column_opt->answer || green_column_opt->answer
+        || blue_column_opt->answer) {
+        dbDriver *db_driver;
+        struct field_info *f_info;
+
+        struct LidarColumnNames column_names;
+
+        column_names.return_n = return_column_opt->answer;
+        column_names.n_returns = n_returns_column_opt->answer;
+        column_names.class_n = class_column_opt->answer;
+        column_names.grass_rgb = grass_rgb_column_opt->answer;
+        column_names.red = red_column_opt->answer;
+        column_names.green = green_column_opt->answer;
+        column_names.blue = blue_column_opt->answer;
+
+        open_database(&vinput, layer, &db_driver, &f_info);
+        load_columns(&write_context, db_driver, f_info, &column_names,
+                     where_opt->answer);
+        close_database(db_driver);
+        
+        if ( grass_rgb_column_opt->answer || red_column_opt->answer || green_column_opt->answer || blue_column_opt->answer)
+            use_color_attributes = TRUE;
+    }
+
+    struct Colors color_table;
+    write_context.color_table = 0;
+    if (!use_color_attributes && !no_color_table_flag->answer
+        && !(write_context.rgb_layer)) {
+        int has_colors = Vect_read_colors(Vect_get_name(&vinput),
+                                          Vect_get_mapset(&vinput),
+                                          &color_table);
+        if (has_colors)
+            write_context.color_table = &color_table;
+    }
+
+    /* some constraints can be set on the map */
+    Vect_set_constraint_type(&vinput, GV_POINT);
+    /* noop for layer=-1 and non-native format, skips lines without cat */
+    Vect_set_constraint_field(&vinput, layer);
+    /* TODO: replace region checks by Vect_set_constraint_region? */
+
+    int ltype;
+    int cat;
+
+    while (TRUE) {
+        ltype = Vect_read_next_line(&vinput, line, cats);
+        if (ltype == -1)
+            G_fatal_error(_("Unable to read vector map"));
+        if (ltype == -2)
+            break;              /* end of the map */
+
+        double x, y, z;
+
+        Vect_line_get_point(line, 0, &x, &y, &z);
+
+        /* selections/filters */
+        /* TODO: use region only when actually needed */
+        if (region_flag->answer && !point_in_region_2d(&comp_region, x, y))
+            continue;
+        if (allowed_cats &&
+            !Vect_cats_in_constraint(cats, layer, allowed_cats))
+            continue;
+
+        /* TODO: test: skip points without category, unless layer=-1 */
+        /* Use cases:
+         * - all points have category (correct)
+         * - no categories for any point (correct, layer=-1 required)
+         * - some points miss category (not handled)
+         * Here we assume that there is only one set of attributes for one point.
+         * If no layer available, cat contains junk and shouldn't be used.
+         */
+        if (layer > 0)
+            Vect_cat_get(cats, layer, &cat);
+
+        write_point(&write_context, cat, x, y, z, cats);
+    }
+
+    /* partially unnecessary as deallocated by the system */
+    Vect_destroy_line_struct(line);
+    Vect_destroy_cats_struct(cats);
+    Vect_close(&vinput);
+
+    free_columns(&write_context);
+
+    LASPoint_Destroy(write_context.las_point);
+    LASColor_Destroy(write_context.las_color);
+    LASWriter_Destroy(write_context.las_writer);
+    LASSRS_Destroy(las_srs);
+
+    return EXIT_SUCCESS;
+}
diff --git a/vector/v.out.lidar/testsuite/test_v_out_lidar.py b/vector/v.out.lidar/testsuite/test_v_out_lidar.py
new file mode 100644
index 0000000..66478ce
--- /dev/null
+++ b/vector/v.out.lidar/testsuite/test_v_out_lidar.py
@@ -0,0 +1,76 @@
+"""
+Name:      test_v_out_lidar
+Purpose:   v.out.lidar export test
+
+Author:    Vaclav Petras
+Copyright: (C) 2015 by Vaclav Petras and the GRASS Development Team
+Licence:   This program is free software under the GNU General Public
+           License (>=v2). Read the file COPYING that comes with GRASS
+           for details.
+"""
+
+import os
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class BasicTest(TestCase):
+    """Test case for watershed module
+
+    This tests expects v.random to work properly.
+    """
+
+    # Setup variables to be used for outputs
+    vector_points = 'v_out_lidar_original'
+    imported_points = 'v_out_lidar_imported'
+    las_file = 'v_out_lidar_points.las'
+
+    @classmethod
+    def setUpClass(cls):
+        """Ensures expected computational region and generated data"""
+        cls.use_temp_region()
+        cls.runModule('g.region', n=20, s=10, e=25, w=15, res=1)
+        cls.runModule('v.random', flags='zb', output=cls.vector_points,
+            npoints=300, zmin=200, zmax=500, seed=100)
+
+    @classmethod
+    def tearDownClass(cls):
+        """Remove the temporary region and generated data"""
+        cls.runModule('g.remove', flags='f', type='vector',
+            name=cls.vector_points)
+        cls.del_temp_region()
+
+    def tearDown(self):
+        """Remove the outputs created by the export
+
+        This is executed after each test run.
+        """
+        if os.path.isfile(self.las_file):
+            os.remove(self.las_file)
+        self.runModule('g.remove', flags='f', type='vector',
+            name=self.imported_points)
+
+    def test_module_runs_output_created(self):
+        """Test to see if the standard outputs are created"""
+        self.assertModule('v.out.lidar', input=self.vector_points,
+            output=self.las_file)
+        self.assertFileExists(self.las_file)
+
+    def test_output_identical(self):
+        """Test to see if the standard outputs are created
+
+        This test depends on v.in.lidar working properly.
+        """
+        self.assertModule('v.out.lidar', input=self.vector_points,
+            output=self.las_file)
+        self.assertModule('v.in.lidar', input=self.las_file,
+            output=self.imported_points, flags='bt')
+        self.assertVectorExists(self.imported_points)
+        self.assertVectorEqualsVector(
+            actual=self.imported_points,
+            reference=self.vector_points,
+            digits=2, precision=.01)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.out.lidar/v.out.lidar.html b/vector/v.out.lidar/v.out.lidar.html
new file mode 100644
index 0000000..37fa450
--- /dev/null
+++ b/vector/v.out.lidar/v.out.lidar.html
@@ -0,0 +1,52 @@
+<h2>DESCRIPTION</h2>
+
+<em>v.out.lidar</em> converts GRASS vector map to a LiDAR point clouds
+in LAS format using the <a href="http://www.liblas.org">libLAS</a> library.
+
+<p>
+The <b>-r</b> flag limits the export to the current computational region
+extent (see <em><a href="g.region.html">g.region</a></em>).
+The <b>where</b> option limits the export by attributes (applied only
+when the columns are used for export).
+
+<p>
+LAS format stores the coordinates as integers rounding the decimal places.
+Before that a scale is applied to preserve a certain number of decimal
+places. This scale can be set using <b>las_xyscale</b> and <b>las_xscale</b>
+options. For example, the scale value 0.01 will preserve two decimal
+places while the value 1.0 will preserve none.
+
+
+<h2>NOTES</h2>
+
+The typical file extensions for the LAS format are .las and .laz (compressed).
+The compressed LAS (.laz) format can be exported only if libLAS has been
+compiled with <a href="http://www.laszip.org/">LASzip</a> support.
+It is also good when libLAS was compiled with GDAL. This is needed when
+working with projections.
+
+
+<h2>EXAMPLE</h2>
+
+Generate fractal surface and export is as point in LAS format:
+
+<div class="code"><pre>
+g.region raster=elevation res=100
+r.surf.fractal output=fractals
+r.to.vect input=fractals output=fractals type=point -z
+v.out.lidar input=fractals output=fractals.las
+</pre></div>
+
+
+<h2>REFERENCES</h2>
+
+<a href="http://www.asprs.org/Committee-General/LASer-LAS-File-Format-Exchange-Activities.html">
+ASPRS LAS format</a><br>
+<a href="http://www.liblas.org/">LAS library</a> <br>
+
+
+<h2>AUTHOR</h2>
+
+Vaclav Petras
+
+<p><i>Last changed: $Date: 2015-12-22 02:31:02 +0100 (Tue, 22 Dec 2015) $</i>
diff --git a/vector/v.out.ogr/v.out.ogr.html b/vector/v.out.ogr/v.out.ogr.html
index 04e99fd..a5c35b6 100644
--- a/vector/v.out.ogr/v.out.ogr.html
+++ b/vector/v.out.ogr/v.out.ogr.html
@@ -184,5 +184,5 @@ Some contributions: Markus Neteler<br>
 Multi-feature support by Martin Landa, Czech Technical University in Prague, 2013
 
 <p>
-<i>Last changed: $Date: 2015-11-24 09:08:30 +0100 (Tue, 24 Nov 2015) $</i>
+<i>Last changed: $Date: 2015-11-24 09:07:58 +0100 (Tue, 24 Nov 2015) $</i>
 
diff --git a/vector/v.out.postgis/v.out.postgis.html b/vector/v.out.postgis/v.out.postgis.html
index 9d1d760..f6294db 100644
--- a/vector/v.out.postgis/v.out.postgis.html
+++ b/vector/v.out.postgis/v.out.postgis.html
@@ -289,4 +289,4 @@ Martin Landa, Czech Technical University in Prague, Czech Republic
 (development supported by Fondazione Edmund Mach and Comune di Trento, Italy)
 
 <p>
-<i>Last changed: $Date: 2015-11-24 09:08:30 +0100 (Tue, 24 Nov 2015) $</i>
+<i>Last changed: $Date: 2015-11-24 09:07:58 +0100 (Tue, 24 Nov 2015) $</i>
diff --git a/vector/v.out.pov/v.out.pov.html b/vector/v.out.pov/v.out.pov.html
index c396ed7..f8779d2 100644
--- a/vector/v.out.pov/v.out.pov.html
+++ b/vector/v.out.pov/v.out.pov.html
@@ -25,4 +25,4 @@ The generated file can be included in an existing .pov file with the following s
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2011-09-29 21:18:47 +0200 (Thu, 29 Sep 2011) $</i>
+<p><i>Last changed: $Date: 2011-09-29 12:18:47 -0700 (Thu, 29 Sep 2011) $</i>
diff --git a/vector/v.outlier/main.c b/vector/v.outlier/main.c
index af49f4d..6639b70 100644
--- a/vector/v.outlier/main.c
+++ b/vector/v.outlier/main.c
@@ -71,6 +71,7 @@ int main(int argc, char *argv[])
     G_add_keyword(_("extract"));
     G_add_keyword(_("select"));
     G_add_keyword(_("filter"));
+    G_add_keyword(_("LIDAR"));
     module->description = _("Removes outliers from vector point data.");
 
     spline_step_flag = G_define_flag();
@@ -78,26 +79,20 @@ int main(int argc, char *argv[])
     spline_step_flag->label = _("Estimate point density and distance");
     spline_step_flag->description =
 	_("Estimate point density and distance for the input vector points within the current region extends and quit");
+    spline_step_flag->suppress_required = YES;
 
     in_opt = G_define_standard_option(G_OPT_V_INPUT);
 
     out_opt = G_define_standard_option(G_OPT_V_OUTPUT);
 
-    outlier_opt = G_define_option();
+    outlier_opt = G_define_standard_option(G_OPT_V_OUTPUT);
     outlier_opt->key = "outlier";
-    outlier_opt->type = TYPE_STRING;
-    outlier_opt->key_desc = "name";
-    outlier_opt->required = YES;
-    outlier_opt->gisprompt = "new,vector,vector";
-    outlier_opt->description = _("Name of output outlier vector map");
+    outlier_opt->description = _("Name for output outlier vector map");
 
-    qgis_opt = G_define_option();
+    qgis_opt = G_define_standard_option(G_OPT_V_OUTPUT);
     qgis_opt->key = "qgis";
-    qgis_opt->type = TYPE_STRING;
-    qgis_opt->key_desc = "name";
     qgis_opt->required = NO;
-    qgis_opt->gisprompt = "new,vector,vector";
-    qgis_opt->description = _("Name of vector map for visualization in QGIS");
+    qgis_opt->description = _("Name for vector map for visualization in QGIS");
 
     stepE_opt = G_define_option();
     stepE_opt->key = "ew_step";
@@ -140,8 +135,10 @@ int main(int argc, char *argv[])
     filter_opt->options = "both,positive,negative";
     filter_opt->answer = "both";
 
-    /* Parsing */
     G_gisinit(argv[0]);
+    G_option_requires(spline_step_flag, in_opt, NULL);
+
+    /* Parsing */
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
 
@@ -166,19 +163,22 @@ int main(int argc, char *argv[])
     flag_auxiliar = FALSE;
 
     /* Checking vector names */
-    Vect_check_input_output_name(in_opt->answer, out_opt->answer,
-				 G_FATAL_EXIT);
+    if (out_opt->answer) 
+        Vect_check_input_output_name(in_opt->answer, out_opt->answer,
+                                     G_FATAL_EXIT);
 
     if ((mapset = G_find_vector2(in_opt->answer, "")) == NULL) {
 	G_fatal_error(_("Vector map <%s> not found"), in_opt->answer);
     }
 
     /* Setting auxiliar table's name */
-    if (G_name_is_fully_qualified(out_opt->answer, xname, xmapset)) {
-	sprintf(table_name, "%s_aux", xname);
+    if (out_opt->answer) {
+        if (G_name_is_fully_qualified(out_opt->answer, xname, xmapset)) {
+            sprintf(table_name, "%s_aux", xname);
+        }
+        else
+            sprintf(table_name, "%s_aux", out_opt->answer);
     }
-    else
-	sprintf(table_name, "%s_aux", out_opt->answer);
 
     /* Something went wrong in a previous v.outlier execution */
     if (db_table_exists(dvr, db, table_name)) {
diff --git a/vector/v.outlier/v.outlier.html b/vector/v.outlier/v.outlier.html
index f450ebc..8684d50 100644
--- a/vector/v.outlier/v.outlier.html
+++ b/vector/v.outlier/v.outlier.html
@@ -68,4 +68,4 @@ Updates for GRASS 6:
 <br>
 Roberto Antolin
 
-<p><i>Last changed: $Date: 2014-08-05 09:02:35 +0200 (Tue, 05 Aug 2014) $</i>
+<p><i>Last changed: $Date: 2014-03-24 16:33:48 +0100 (Mon, 24 Mar 2014) $</i>
diff --git a/vector/v.overlay/main.c b/vector/v.overlay/main.c
index fab30e3..9a3a7bb 100644
--- a/vector/v.overlay/main.c
+++ b/vector/v.overlay/main.c
@@ -11,7 +11,7 @@
  *               OGR support by Martin Landa <landa.martin gmail.com>
  *               Markus Metz
  * PURPOSE:      
- * COPYRIGHT:    (C) 2003-2014 by the GRASS Development Team
+ * COPYRIGHT:    (C) 2003-2016 by the GRASS Development Team
  *
  *               This program is free software under the GNU General
  *               Public License (>=v2). Read the file COPYING that
@@ -31,7 +31,7 @@
 
 #include "local.h"
 
-void copy_table(struct Map_info *, struct Map_info *, int, int);
+void copy_table(struct Map_info *, struct Map_info *, int, int, int);
 
 int main(int argc, char *argv[])
 {
@@ -50,6 +50,7 @@ int main(int argc, char *argv[])
     int verbose;
 
     struct field_info *Fi = NULL;
+    int table_type;
     char buf[DB_SQL_MAX];
     dbString stmt;
     dbString sql, value_string, col_defs;
@@ -161,6 +162,10 @@ int main(int argc, char *argv[])
 	i++;
     }
 
+    table_type = GV_1TABLE;
+    if ((ofield[0] > 0) + (ofield[1] > 0) + (ofield[2] > 0) > 1)
+	table_type = GV_MTABLE;
+
     if (operator_opt->answer[0] == 'a')
 	operator = OP_AND;
     else if (operator_opt->answer[0] == 'o')
@@ -223,7 +228,7 @@ int main(int argc, char *argv[])
 
     /* Create dblinks */
     if (ofield[0] > 0) {
-	Fi = Vect_default_field_info(&Out, ofield[0], NULL, GV_MTABLE);
+	Fi = Vect_default_field_info(&Out, ofield[0], NULL, table_type);
     }
 
     db_init_string(&sql);
@@ -622,11 +627,11 @@ int main(int argc, char *argv[])
 	/* TODO: copy only valid attributes */
 	/* copy attributes from ainput */
 	if (ofield[1] > 0 && field[0] > 0) {
-	    copy_table(&In[0], &Out, field[0], ofield[1]);
+	    copy_table(&In[0], &Out, field[0], ofield[1], table_type);
 	}
 	/* copy attributes from binput */
 	if (ofield[2] > 0 && field[1] > 0 && ofield[1] != ofield[2]) {
-	    copy_table(&In[1], &Out, field[1], ofield[2]);
+	    copy_table(&In[1], &Out, field[1], ofield[2], table_type);
 	}
     }
 
@@ -640,16 +645,19 @@ int main(int argc, char *argv[])
 }
 
 void copy_table(struct Map_info *In, struct Map_info *Out, int infield, 
-                int outfield)
+                int outfield, int table_type)
 {
     struct ilist *list;
     int findex;
     
-    list = Vect_new_list();
     findex = Vect_cidx_get_field_index(Out, outfield);
-    
+    if (findex < 0) 
+        return;
+
+    list = Vect_new_list();
     Vect_cidx_get_unique_cats_by_index(Out, findex, list);
-    Vect_copy_table_by_cats(In, Out, infield, outfield, NULL, GV_MTABLE, list->value, list->n_values);
+    Vect_copy_table_by_cats(In, Out, infield, outfield, NULL,
+                            table_type, list->value, list->n_values);
     
     Vect_destroy_list(list);
 }
diff --git a/vector/v.overlay/v.overlay.html b/vector/v.overlay/v.overlay.html
index 007249f..ca899e2 100644
--- a/vector/v.overlay/v.overlay.html
+++ b/vector/v.overlay/v.overlay.html
@@ -275,4 +275,4 @@ Radim Blazek, ITC-Irst, Trento, Italy<br>
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-08-26 11:28:51 +0200 (Fri, 26 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-26 11:27:29 +0200 (Fri, 26 Aug 2016) $</i>
diff --git a/vector/v.parallel/v.parallel.html b/vector/v.parallel/v.parallel.html
index 39c1844..113739a 100644
--- a/vector/v.parallel/v.parallel.html
+++ b/vector/v.parallel/v.parallel.html
@@ -22,4 +22,4 @@ To avoid this problem, the <b>-b</b> flag might be used.
 Radim Blazek<br>
 Rewritten by Rosen Matev (with support through the Google Summer of Code program 2008)
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/vector/v.patch/main.c b/vector/v.patch/main.c
index 2f7eec7..909b8b3 100644
--- a/vector/v.patch/main.c
+++ b/vector/v.patch/main.c
@@ -50,6 +50,7 @@ int main(int argc, char *argv[])
     struct GModule *module;
     struct Option *old, *new, *bbox;
     struct Flag *append, *table_flag, *no_topo;
+    struct Flag *no_input_topo_flag, *force_z_flag;
     struct Map_info InMap, OutMap, BBoxMap;
     int n_files;
     int do_table;
@@ -80,10 +81,17 @@ int main(int argc, char *argv[])
     bbox->description =
 	_("Name for output vector map where bounding boxes of input vector maps are written to");
 
-    append = G_define_flag();
-    append->key = 'a';
-    append->description = _("Append files to existing file "
-			    "(overwriting existing files must be activated)");
+    no_input_topo_flag = G_define_flag();
+    no_input_topo_flag->key = 'n';
+    no_input_topo_flag->label = _("Do not expect input with topology");
+    no_input_topo_flag->description =
+        _("Applicable when input is points without topology");
+
+    force_z_flag = G_define_flag();
+    force_z_flag->key = 'z';
+    force_z_flag->label = _("Expect z coordinate even when not using topology");
+    force_z_flag->description =
+        _("Applicable when input is points with z coordinate but without topology");
 
     table_flag = G_define_flag();
     table_flag->key = 'e';
@@ -91,6 +99,11 @@ int main(int argc, char *argv[])
     table_flag->description =
 	_("Only the table of layer 1 is currently supported");
 
+    append = G_define_flag();
+    append->key = 'a';
+    append->description = _("Append files to existing file "
+			    "(overwriting existing files must be activated)");
+
     no_topo = G_define_standard_flag(G_FLG_V_TOPO);
 
     if (G_parser(argc, argv))
@@ -109,7 +122,7 @@ int main(int argc, char *argv[])
 	in_name = old->answers[i++];
 	Vect_check_input_output_name(in_name, new->answer, G_FATAL_EXIT);
 
-	Vect_set_open_level(2);
+	Vect_set_open_level(no_input_topo_flag->answer ? 1 : 2);
 	if (Vect_open_old_head(&InMap, in_name, "") < 0)
 	    G_fatal_error(_("Unable to open vector map <%s>"), in_name);
 
@@ -118,6 +131,8 @@ int main(int argc, char *argv[])
 
 	Vect_close(&InMap);
     }
+    if (force_z_flag->answer)
+        out_is_3d = WITH_Z;
 
     table_out = NULL;
     fi_in = NULL;
diff --git a/vector/v.proj/v.proj.html b/vector/v.proj/v.proj.html
index e6d82c8..45c7113 100644
--- a/vector/v.proj/v.proj.html
+++ b/vector/v.proj/v.proj.html
@@ -97,4 +97,4 @@ M.L. Holko, USDA, SCS, NHQ-CGIS
 <br>
 R.L. Glenn, USDA, SCS, NHQ-CGIS
 
-<p><i>Last changed: $Date: 2016-05-28 08:52:40 +0200 (Sat, 28 May 2016) $</i>
+<p><i>Last changed: $Date: 2016-05-28 08:53:59 +0200 (Sat, 28 May 2016) $</i>
diff --git a/vector/v.qcount/v.qcount.html b/vector/v.qcount/v.qcount.html
index 7cb1481..771121c 100644
--- a/vector/v.qcount/v.qcount.html
+++ b/vector/v.qcount/v.qcount.html
@@ -77,4 +77,4 @@ Timestamp not working for header part of counts output. (2000-10-28)
 <br>
 Modified for GRASS 5.7 by R. Blazek (2004-10-14)
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/vector/v.random/main.c b/vector/v.random/main.c
index af4713e..8a9234b 100644
--- a/vector/v.random/main.c
+++ b/vector/v.random/main.c
@@ -64,7 +64,8 @@ int main(int argc, char *argv[])
     double (*rng)(void) = G_drand48;
     double zmin, zmax;
     int seed;
-    int i, j, k, n, type, usefloat;
+    unsigned long i, n;
+    int j, k, type, usefloat;
     int area, nareas, field;
     struct boxlist *List = NULL;
     BOX_SIZE *size_list = NULL;
@@ -180,8 +181,8 @@ int main(int argc, char *argv[])
 	exit(EXIT_FAILURE);
 
     output = parm.output->answer;
-    n = atoi(parm.nsites->answer);
-    
+    n = strtoul(parm.nsites->answer, NULL, 10);
+
     if(parm.seed->answer)
         seed = atoi(parm.seed->answer);
 
diff --git a/vector/v.random/v.random.html b/vector/v.random/v.random.html
index 24e7bda..d1821ef 100644
--- a/vector/v.random/v.random.html
+++ b/vector/v.random/v.random.html
@@ -57,7 +57,8 @@ maximum: 16572.8
 
 Generate 20 random points with binary attributes (only 0 or 1):
 <div class="code"><pre>
-v.random output=binary_random npoints=20 zmin=0 zmax=1 column='binary' column_type=integer
+v.random output=binary_random npoints=20 zmin=0 zmax=1 \
+         column='binary' column_type=integer
 v.db.select binary_random
 cat|binary
 1|0
@@ -89,7 +90,7 @@ skewness: 0.34703
 </pre></div>
 
 <!--
-g.region rast=elev_lid792_1m
+g.region raster=elev_lid792_1m
 ...
 d.vect height_random color=60:60:60 icon=basic/point size=40 width=2 zcolor=gyr
 optipng -o5 map.png
@@ -102,6 +103,45 @@ mv map.png vrandom_z.png
 Random points with different X, Y, and Z coordinates
 </center>
 
+
+<h3>Generating random adjacent polygons</h3>
+
+To generate random adjacent polygons, first the centroids are generated as
+points, then a triangulation is run (North Carolina sample dataset:
+
+<div class="code"><pre>
+g.region vector=nc_state
+v.random output=randpoints6k npoints=6000
+v.voronoi input=randpoints6k output=randareas6k
+v.info -t randareas6k
+v.category randareas6k option=print
+
+# plot vector polygons
+d.mon wx0
+d.vect randareas6k -c
+</pre></div>
+<p>
+<center>
+<img src="vrandom_polygons.png" border=1><br>
+Random adjacent polygons from random points (here: used as centroids)
+</center>
+
+<p>
+To eventually obtain isolated polygons, selected polygons can be extracted with
+<em>v.extract</em>.
+<p>
+
+These vector polygons can also be rasterized:
+<div class="code"><pre>
+# rasterize polygons
+# note: rastermaps must result in at least 6k pixel in this example
+g.region vector=nc_state res=500 -p -a
+v.to.rast randareas6k out=randareas6k use=cat
+r.colors randareas6k color=random
+d.rast randareas6k
+</pre></div>
+
+
 <h3>Random sampling from raster map</h3>
 
 Generate 20 random samples from a raster map:
@@ -208,4 +248,4 @@ random sampling)
 Engineering</a>
 <a href="http://www.purdue.edu/">Purdue University</a>
 
-<p><i>Last changed: $Date: 2016-08-30 15:30:47 +0200 (Tue, 30 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-09-02 18:14:41 +0200 (Fri, 02 Sep 2016) $</i>
diff --git a/vector/v.random/vrandom_polygons.png b/vector/v.random/vrandom_polygons.png
new file mode 100644
index 0000000..cc04cf1
Binary files /dev/null and b/vector/v.random/vrandom_polygons.png differ
diff --git a/vector/v.reclass/v.reclass.html b/vector/v.reclass/v.reclass.html
index 5a1ca54..7646775 100644
--- a/vector/v.reclass/v.reclass.html
+++ b/vector/v.reclass/v.reclass.html
@@ -96,4 +96,4 @@ R.L. Glenn, USDA, SCS, NHQ-CGIS<br>
 from v.reclass to v.db.reclass and later to v.reclass in 5.7 rewritten
 by Radim Blazek
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/vector/v.rectify/v.rectify.html b/vector/v.rectify/v.rectify.html
index 83e4832..229107f 100644
--- a/vector/v.rectify/v.rectify.html
+++ b/vector/v.rectify/v.rectify.html
@@ -128,4 +128,4 @@ Markus Metz
 based on <a href="i.rectify.html">i.rectify</a>
 
 
-<p><i>Last changed: $Date: 2016-01-29 10:56:07 +0100 (Fri, 29 Jan 2016) $</i>
+<p><i>Last changed: $Date: 2016-01-29 10:29:57 +0100 (Fri, 29 Jan 2016) $</i>
diff --git a/vector/v.sample/v.sample.html b/vector/v.sample/v.sample.html
index c7bb257..868594b 100644
--- a/vector/v.sample/v.sample.html
+++ b/vector/v.sample/v.sample.html
@@ -79,4 +79,4 @@ sample dataset elevation models at random positions:
 <br>
 Updated for GRASS 5.7 by Radim Blazek
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/vector/v.segment/v.segment.html b/vector/v.segment/v.segment.html
index ef2eb54..776dbc1 100644
--- a/vector/v.segment/v.segment.html
+++ b/vector/v.segment/v.segment.html
@@ -180,4 +180,4 @@ There is a problem with side-offset parallel line generation for inside corners.
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2015-05-11 02:16:13 +0200 (Mon, 11 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-05-11 02:11:34 +0200 (Mon, 11 May 2015) $</i>
diff --git a/vector/v.select/v.select.html b/vector/v.select/v.select.html
index c4d4028..485d878 100644
--- a/vector/v.select/v.select.html
+++ b/vector/v.select/v.select.html
@@ -319,4 +319,4 @@ GEOS support by Martin Landa, Czech Technical University in Prague, Czech Republ
 ZIP code examples by Carol X. Garzon-Lopez, Trento, Italy
 
 <p>
-<i>Last changed: $Date: 2015-10-22 00:41:33 +0200 (Thu, 22 Oct 2015) $</i>
+<i>Last changed: $Date: 2015-10-22 00:30:01 +0200 (Thu, 22 Oct 2015) $</i>
diff --git a/vector/v.split/main.c b/vector/v.split/main.c
index d83e571..9eec305 100644
--- a/vector/v.split/main.c
+++ b/vector/v.split/main.c
@@ -36,13 +36,13 @@ int main(int argc, char *argv[])
     struct GModule *module;
     struct Option *in_opt, *layer_opt, *out_opt, *length_opt,
                   *units_opt, *vertices_opt;
-    struct Flag *nosplit_flag;
+    struct Flag *nosplit_flag, *fixedlength_flag;
     
     struct Map_info In, Out;
     struct line_pnts *Points, *Points2, *Points3;
     struct line_cats *Cats;
 
-    int line, nlines, layer, nosplit;
+    int line, nlines, layer, nosplit, fixedlength;
     double length = -1;
     int vertices = 0;
     double (*line_length) ();
@@ -92,6 +92,13 @@ int main(int argc, char *argv[])
     nosplit_flag->key = 'n';
     nosplit_flag->label = _("Add new vertices, but do not split");
     nosplit_flag->description = _("Applies only to 'length' option");
+
+    fixedlength_flag = G_define_flag();
+    fixedlength_flag->key = 'f';
+    fixedlength_flag->label = _("Force segments to be exactly of given length, except for last one");
+    fixedlength_flag->description = _("Applies only to 'length' option");
+
+
     
     if (G_parser(argc, argv))
 	exit(EXIT_FAILURE);
@@ -157,6 +164,7 @@ int main(int argc, char *argv[])
 	    G_fatal_error(_("Number of vertices must be at least 2"));
     }
     nosplit = nosplit_flag->answer;
+    fixedlength = fixedlength_flag->answer;
     
     Vect_set_open_level(2);
 
@@ -208,10 +216,17 @@ int main(int argc, char *argv[])
 		    G_debug(3, "l: %f, length: %f", l, length);
 
 		    n = ceil(l / length);
+
 		    if (geodesic)
 			l = Vect_line_length(Points);
 
-		    step = l / n;
+		    if (fixedlength) {
+			    step = length;
+		    }
+		    else {
+			    step = l / n;
+		    }
+
 		    from = 0.;
 		    
 		    G_debug(3, "n: %ld, step: %f", n, step);
diff --git a/vector/v.split/v.split.html b/vector/v.split/v.split.html
index f02f42f..4b1d78e 100644
--- a/vector/v.split/v.split.html
+++ b/vector/v.split/v.split.html
@@ -61,4 +61,4 @@ d.vect myrr_split display=shape,topo
 
 Radim Blazek
 
-<p><i>Last changed: $Date: 2016-03-10 18:03:32 +0100 (Thu, 10 Mar 2016) $</i>
+<p><i>Last changed: $Date: 2016-03-10 18:02:58 +0100 (Thu, 10 Mar 2016) $</i>
diff --git a/vector/v.surf.bspline/v.surf.bspline.html b/vector/v.surf.bspline/v.surf.bspline.html
index 4bbac5a..4395413 100644
--- a/vector/v.surf.bspline/v.surf.bspline.html
+++ b/vector/v.surf.bspline/v.surf.bspline.html
@@ -190,4 +190,4 @@ Maria Antonia Brovelli, Massimiliano Cannata, Ulisse Longoni, Mirko Reguzzoni<br
 Update for GRASS 6 and improvements: Roberto Antolin
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/vector/v.surf.idw/v.surf.idw.html b/vector/v.surf.idw/v.surf.idw.html
index 8f3a37a..19dbba7 100644
--- a/vector/v.surf.idw/v.surf.idw.html
+++ b/vector/v.surf.idw/v.surf.idw.html
@@ -101,4 +101,4 @@ Improved algorithm (indexes points according to cell and ignores
 points outside current region) by Paul Kelly
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/vector/v.surf.rst/v.surf.rst.html b/vector/v.surf.rst/v.surf.rst.html
index 614a52b..0bd5497 100644
--- a/vector/v.surf.rst/v.surf.rst.html
+++ b/vector/v.surf.rst/v.surf.rst.html
@@ -397,4 +397,4 @@ procedure):</em>
 <br>Jaroslav Hofierka, University of Presov; Radim Blazek, ITC-irst
 
 <p>
-<i>Last changed: $Date: 2016-08-03 13:55:16 +0200 (Wed, 03 Aug 2016) $</i>
+<i>Last changed: $Date: 2016-08-03 13:53:17 +0200 (Wed, 03 Aug 2016) $</i>
diff --git a/vector/v.timestamp/v.timestamp.html b/vector/v.timestamp/v.timestamp.html
index 6bebf08..5dc2565 100644
--- a/vector/v.timestamp/v.timestamp.html
+++ b/vector/v.timestamp/v.timestamp.html
@@ -62,4 +62,4 @@ Spaces in the timestamp value are required.
 
 Michael Shapiro, U.S.Army Construction Engineering Research Laboratory
 
-<p><i>Last changed: $Date: 2016-08-22 15:25:10 +0200 (Mon, 22 Aug 2016) $</i>
+<p><i>Last changed: $Date: 2016-08-22 15:24:03 +0200 (Mon, 22 Aug 2016) $</i>
diff --git a/vector/v.to.3d/testsuite/test_vto3d.py b/vector/v.to.3d/testsuite/test_vto3d.py
new file mode 100644
index 0000000..dcee3da
--- /dev/null
+++ b/vector/v.to.3d/testsuite/test_vto3d.py
@@ -0,0 +1,38 @@
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
+
+
+class TestVTo3D(TestCase):
+
+    contours2d = 'test_vto3d_contours2d'
+    contours3d = 'test_vto3d_contours3d'
+
+    @classmethod
+    def setUpClass(cls):
+        cls.use_temp_region()
+        cls.runModule('g.region', raster='elevation')
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.del_temp_region()
+
+    def tearDown(cls):
+        """Remove contours map after each test method"""
+        cls.runModule('g.remove', flags='f', type='vector',
+                      name=[cls.contours2d, cls.contours3d])
+
+    def test_contours(self):
+        """Test if results is in expected limits"""
+        self.runModule('r.contour', input='elevation', output=self.contours3d, step=5)
+        self.runModule('v.db.addcolumn', map=self.contours3d, columns="z double precision")
+
+        self.assertModule('v.to.3d', input=self.contours3d, output=self.contours2d,
+                          column='z', flags='r')
+        is3d = dict(map3d=0)
+        self.assertVectorFitsTopoInfo(vector=self.contours2d, reference=is3d)
+        missing = dict(nmissing=0, nnull=0)
+        self.assertVectorFitsUnivar(map=self.contours2d, column='z', reference=missing)
+
+
+if __name__ == '__main__':
+    test()
diff --git a/vector/v.to.3d/v.to.3d.html b/vector/v.to.3d/v.to.3d.html
index d8a3b27..8dd023e 100644
--- a/vector/v.to.3d/v.to.3d.html
+++ b/vector/v.to.3d/v.to.3d.html
@@ -53,4 +53,4 @@ v.to.3d -rt input=elev_lid792_bepts output=elev_lid_2d
 Martin Landa, Czech Technical University in Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2015-07-19 20:47:27 +0200 (Sun, 19 Jul 2015) $</i>
+<i>Last changed: $Date: 2015-06-17 04:29:17 +0200 (Wed, 17 Jun 2015) $</i>
diff --git a/vector/v.to.db/areas.c b/vector/v.to.db/areas.c
index 199e898..fa6c29e 100644
--- a/vector/v.to.db/areas.c
+++ b/vector/v.to.db/areas.c
@@ -19,7 +19,6 @@ int read_areas(struct Map_info *Map)
     int i, idx, found;
     int area_num, nareas;
     struct line_cats *Cats;
-    struct line_pnts *Ppoints;
     double area, perimeter;
 
     Cats = Vect_new_cats_struct();
@@ -29,7 +28,6 @@ int read_areas(struct Map_info *Map)
 
     /* Cycle through all areas */
     for (area_num = 1; area_num <= nareas; area_num++) {
-	Ppoints = Vect_new_line_struct();
 	area = 0;
 	perimeter = 0;
 
@@ -67,14 +65,23 @@ int read_areas(struct Map_info *Map)
 		    found = 1;
 		}
 	    }
-	    /* why do we do this? */
-	    if (!found) {	/* no category found */
-		idx = find_cat(0, 1);
-		if (options.option == O_AREA) {
-		    Values[idx].d1 += area;
-		}
-		else if (options.option == O_PERIMETER) {
+
+	    if (!found) {	/* Values for no category (cat = -1) are reported at the end */
+		idx = find_cat(-1, 1);
+		switch (options.option) {
+		case O_AREA:
 		    Values[idx].d1 += area;
+		    break;
+		case O_PERIMETER:
+		    Values[idx].d1 += perimeter;
+		    break;
+		case O_COMPACT:
+		    Values[idx].d1 =
+			perimeter / (2.0 * sqrt(M_PI * area));
+		    break;
+		case O_FD:
+		    Values[idx].d1 = 2.0 * log(perimeter) / log(area);
+		    break;
 		}
 	    }
 	}
diff --git a/vector/v.to.db/find.c b/vector/v.to.db/find.c
index 08692ea..7b8f086 100644
--- a/vector/v.to.db/find.c
+++ b/vector/v.to.db/find.c
@@ -2,30 +2,54 @@
 #include <string.h>
 #include  "global.h"
 
-/* returns index to array of values, inserts new if necessary */
-int find_cat(int cat, int add)
+
+static int bsearch_cat(int cat)
 {
-    int i;
+    int mid, lo, hi;
 
-    for (i = 0; i < vstat.rcat; i++)
-	if (Values[i].cat == cat)
-	    return i;
+    /* tests */
+    if (vstat.rcat < 1)
+	return -1;
 
-    if (!add)
+    lo = 0;
+    hi = vstat.rcat - 1;
+    
+    if (hi == 0 || Values[lo].cat > cat || Values[hi].cat < cat)
 	return -1;
 
-    /* Not found -> add new */
-    Values[vstat.rcat].cat = cat;
-    Values[vstat.rcat].count1 = 0;
-    Values[vstat.rcat].count1 = 0;
-    Values[vstat.rcat].i1 = -1;
-    Values[vstat.rcat].i2 = -1;
-    Values[vstat.rcat].d1 = 0.0;
-    Values[vstat.rcat].d2 = 0.0;
-    Values[vstat.rcat].qcat = NULL;
-    Values[vstat.rcat].nqcats = 0;
-    Values[vstat.rcat].aqcats = 0;
-    vstat.rcat++;
-
-    return (vstat.rcat - 1);
+    if (Values[hi].cat == cat)
+	return hi;
+
+    if (Values[lo].cat == cat)
+	return lo;
+
+    /* bsearch */
+    while (lo < hi) {
+	mid = (lo + hi) / 2;
+	
+	if (Values[mid].cat == cat)
+	    return mid;
+
+	if (Values[mid].cat > cat) {
+	    hi = mid;
+	}
+	else {
+	    lo = mid;
+	}
+    }
+    
+    return -1;
+}
+
+/* returns index to array of values, mark as used if requested */
+int find_cat(int cat, int used)
+{
+    int i;
+
+    i = bsearch_cat(cat);
+
+    if (i >= 0 && used)
+	Values[i].used = 1;
+
+    return (i);
 }
diff --git a/vector/v.to.db/global.h b/vector/v.to.db/global.h
index 0f97a91..cacc467 100644
--- a/vector/v.to.db/global.h
+++ b/vector/v.to.db/global.h
@@ -4,6 +4,7 @@
 struct value
 {
     int cat;			/* category */
+    char used;			/* update/report if used else not */
     int count1, count2;		/* Count of found values; i1: count, coor, sides; i2: sides */
     /* for sides set to 2, if more than 1 area category was found, */
     /* including no category (cat = -1)! */
diff --git a/vector/v.to.db/lines.c b/vector/v.to.db/lines.c
index 69cbbd2..2e29e55 100644
--- a/vector/v.to.db/lines.c
+++ b/vector/v.to.db/lines.c
@@ -76,6 +76,7 @@ int read_lines(struct Map_info *Map)
     
     /* Cycle through all lines */
     nlines = Vect_get_num_lines(Map);
+    G_percent(0, nlines, 2);
     for (line_num = 1; line_num <= nlines; line_num++) {
 	type = Vect_read_line(Map, Points, Cats, line_num);
 	if (!(type & options.type))
diff --git a/vector/v.to.db/main.c b/vector/v.to.db/main.c
index f51981f..deb4601 100644
--- a/vector/v.to.db/main.c
+++ b/vector/v.to.db/main.c
@@ -25,7 +25,7 @@ struct vstat vstat;
 
 int main(int argc, char *argv[])
 {
-    int n;
+    int n, i, j, cat, lastcat, type, id, findex;
     struct Map_info Map;
     struct GModule *module;
     struct field_info *Fi;
@@ -69,17 +69,62 @@ int main(int argc, char *argv[])
 
     /* allocate array for values */
     /* (+ 1 is for cat -1 (no category) reported at the end ) */
-    if (Vect_cidx_get_field_index(&Map, options.field) > -1) {
-	n = Vect_cidx_get_num_unique_cats_by_index(&Map,
-						   Vect_cidx_get_field_index
-						   (&Map, options.field));
+    findex = Vect_cidx_get_field_index(&Map, options.field);
+    if (findex > -1) {
+	n = Vect_cidx_get_num_unique_cats_by_index(&Map, findex);
     }
     else {
 	n = 0;
     }
     G_debug(2, "%d unique cats", n);
     Values = (struct value *) G_calloc(n + 1, sizeof(struct value));
-    vstat.rcat = 0;
+
+    /* prepopulate Values */
+    n = Vect_cidx_get_num_cats_by_index(&Map, findex);
+    i = 0;
+    Values[i].cat = -1;		/* features without category */
+    Values[i].used = 0;
+    Values[i].count1 = 0;
+    Values[i].count2 = 0;
+    Values[i].i1 = -1;
+    Values[i].i2 = -1;
+    Values[i].d1 = 0.0;
+    Values[i].d2 = 0.0;
+    Values[i].qcat = NULL;
+    Values[i].nqcats = 0;
+    Values[i].aqcats = 0;
+
+    i = 1;
+    lastcat = -1;
+    /* category index must be sorted,
+     * i.e. topology must have been built with GV_BUILD_ALL */
+    for (j = 0; j < n; j++) {
+	Vect_cidx_get_cat_by_index(&Map, findex, j, &cat, &type, &id);
+	if (lastcat > cat) {
+	    Vect_close(&Map);
+	    G_fatal_error(_("Category index for vector map <%s> is not sorted"),
+	                  options.name);
+	}
+
+	if (lastcat != cat) {
+	    Values[i].cat = cat;
+	    Values[i].used = 0;
+	    Values[i].count1 = 0;
+	    Values[i].count2 = 0;
+	    Values[i].i1 = -1;
+	    Values[i].i2 = -1;
+	    Values[i].d1 = 0.0;
+	    Values[i].d2 = 0.0;
+	    Values[i].qcat = NULL;
+	    Values[i].nqcats = 0;
+	    Values[i].aqcats = 0;
+
+	    lastcat = cat;
+	    i++;
+	}
+    }
+
+    vstat.rcat = i;
 
     /* Read values from map */
     if (options.option == O_QUERY) {
@@ -93,6 +138,17 @@ int main(int argc, char *argv[])
 	read_lines(&Map);
     }
 
+    /* prune unused values */
+    n = vstat.rcat;
+    j = 0;
+    for (i = 0; i < n; i++) {
+	if (Values[i].used) {
+	    Values[j] = Values[i];
+	    j++;
+	}
+    }
+    vstat.rcat = j;
+
     conv_units();
 
     if (options.print || options.total) {
diff --git a/vector/v.to.db/query.c b/vector/v.to.db/query.c
index b1ae2fa..8a5e30b 100644
--- a/vector/v.to.db/query.c
+++ b/vector/v.to.db/query.c
@@ -104,6 +104,7 @@ int query(struct Map_info *Map)
 
 	/* Skip if cat is zero and large number of query categories (many features without category).
 	 * It would cause problems on server side and take long time. Postgres limit is 10000 */
+	/* TODO: verify because no category is encoded as cat = -1, not cat = zero */
 	if (Values[i].cat == 0 && Values[i].nqcats > 1000) {
 	    G_warning(_("Query for category '0' (no category) was not executed because of too many "
 		       "(%d) query categories. All later reported values for cat 0 are not valid."),
diff --git a/vector/v.to.db/report.c b/vector/v.to.db/report.c
index 9485b0e..53032f4 100644
--- a/vector/v.to.db/report.c
+++ b/vector/v.to.db/report.c
@@ -193,7 +193,7 @@ int print_stat(void)
 {
     if (vstat.rcat > 0) {
 	int rcat_report;
-	if(find_cat(-1, 0) != -1)
+	if (find_cat(-1, 0) != -1)
 	    rcat_report = vstat.rcat - 1;
 	else
 	    rcat_report = vstat.rcat;
diff --git a/vector/v.to.db/v.to.db.html b/vector/v.to.db/v.to.db.html
index 2300761..ba85a57 100644
--- a/vector/v.to.db/v.to.db.html
+++ b/vector/v.to.db/v.to.db.html
@@ -167,4 +167,4 @@ v.to.db -p roads option=count type=line
 Radim Blazek, ITC-irst, Trento, Italy<br>
 Line sinuousity implemented by Wolf Bergenheim
 
-<p><i>Last changed: $Date: 2015-12-22 16:05:48 +0100 (Tue, 22 Dec 2015) $</i>
+<p><i>Last changed: $Date: 2015-12-20 02:31:08 +0100 (Sun, 20 Dec 2015) $</i>
diff --git a/vector/v.to.points/v.to.points.html b/vector/v.to.points/v.to.points.html
index 8710551..36cbb2a 100644
--- a/vector/v.to.points/v.to.points.html
+++ b/vector/v.to.points/v.to.points.html
@@ -121,4 +121,4 @@ Updated to GRASS 7 by Martin Landa, Czech Technical University in
 Prague, Czech Republic
 
 <p>
-<i>Last changed: $Date: 2016-03-10 17:47:42 +0100 (Thu, 10 Mar 2016) $</i></p>
+<i>Last changed: $Date: 2016-03-10 17:47:07 +0100 (Thu, 10 Mar 2016) $</i></p>
diff --git a/vector/v.to.rast/do_areas.c b/vector/v.to.rast/do_areas.c
index 70d6254..7782550 100644
--- a/vector/v.to.rast/do_areas.c
+++ b/vector/v.to.rast/do_areas.c
@@ -80,7 +80,8 @@ int do_areas(struct Map_info *Map, struct line_pnts *Points,
 	    return -1;
 	}
 
-	G_plot_polygon(Points->x, Points->y, Points->n_points);
+	if (G_plot_polygon(Points->x, Points->y, Points->n_points) != 0)
+	    G_warning(_("Failed to plot polygon"));
     }
     G_percent(1, 1, 1);
     
diff --git a/vector/v.to.rast/main.c b/vector/v.to.rast/main.c
index 2c1cbfd..1e13ab1 100644
--- a/vector/v.to.rast/main.c
+++ b/vector/v.to.rast/main.c
@@ -52,7 +52,7 @@ int main(int argc, char *argv[])
     field_opt = G_define_standard_option(G_OPT_V_FIELD);
 
     type_opt = G_define_standard_option(G_OPT_V_TYPE);
-    type_opt->options = "point,line,area";
+    type_opt->options = "point,line,boundary,area";
     type_opt->answer = "point,line,area";
     type_opt->guisection = _("Selection");
     
diff --git a/vector/v.to.rast/v.to.rast.html b/vector/v.to.rast/v.to.rast.html
index 66f4a94..260153b 100644
--- a/vector/v.to.rast/v.to.rast.html
+++ b/vector/v.to.rast/v.to.rast.html
@@ -1,12 +1,18 @@
 <h2>DESCRIPTION</h2>
 
 <em>v.to.rast</em> transforms GRASS vector map layers into GRASS raster map
-layer format. Optionally, attributes can be converted into raster category
+layer format. Optionally, attributes can be converted to raster category
 labels.
 
 
 <h2>NOTES</h2>
 
+In order to avoid unexpected results, the type of vector features 
+should always be specified. The default is to convert all vector 
+features, but if only e.g. areas should be converted use 
+<em>type=area</em> rather than <em>type=point,line,area</em>.
+
+<p>
 <em>v.to.rast</em> will only affect data in areas lying
 inside the boundaries of the current geographic region.
 A grid cell belongs to the area where the grid cell center falls into.
@@ -55,8 +61,13 @@ resultant raster map.
 <p><p><b>Flow directions</b> are given in degrees counterclockwise from east.
 <p><p>Raster category labels are supported for all of <em>use=</em> except <em>use=z</em>.
 <p>
-The <b>-d</b> flag applies only to lines, the default is only those on the
-render path (thin line).
+The <b>-d</b> flag applies only to lines and boundaries, the default is 
+to set only those cells on the render path (thin line).
+<p>
+Boundaries (usually without categories) can be rasterized with
+<div class="code"><pre>
+v.to.rast type=boundary layer=-1 use=val
+</pre></div>
 
 <h2>EXAMPLES</h2>
 
@@ -72,7 +83,7 @@ Column 3: WIDTH
 </pre></div>
 
 <div class="code"><pre>
-v.to.rast input=vect_map output=raster_map attribute_column=SPEED
+v.to.rast input=vect_map output=raster_map attribute_column=SPEED type=line
 </pre></div>
 
 <h3>Calculate stream directions from a river vector map (Spearfish)</h3>
@@ -138,6 +149,6 @@ GRASS 6.0 updates: Radim Blazek, ITC-irst, Trento, Italy
 Stream directions: Jaro Hofierka and Helena Mitasova
 <br>
 GRASS 6.3 code cleanup and label support: Brad Douglas
-<p><p><i>Last changed: $Date: 2015-07-24 03:39:34 +0200 (Fri, 24 Jul 2015) $</i>
+<p><p><i>Last changed: $Date: 2016-02-22 10:20:45 +0100 (Mon, 22 Feb 2016) $</i>
 
 
diff --git a/vector/v.to.rast/vect2rast.c b/vector/v.to.rast/vect2rast.c
index fe9ac2a..ceffc31 100644
--- a/vector/v.to.rast/vect2rast.c
+++ b/vector/v.to.rast/vect2rast.c
@@ -25,7 +25,7 @@ int vect_to_rast(const char *vector_map, const char *raster_map, const char *fie
 
     /* Attributes */
     int nrec;
-    int ctype;
+    int ctype = 0;
     struct field_info *Fi;
     dbDriver *Driver;
     dbCatValArray cvarr;
@@ -133,8 +133,13 @@ int vect_to_rast(const char *vector_map, const char *raster_map, const char *fie
 
 	G_debug(1, "%d areas sorted", nareas);
     }
+    if (nareas > 0 && dense) {
+	G_warning(_("Area conversion and line densification are mutually exclusive, disabling line densification."));
+	dense = 0;
+    }
 
-    nlines = 1;
+    nlines = Vect_get_num_primitives(&Map, ftype);
+    nplines_all = nlines;
     npasses = begin_rasterization(cache_mb, format, dense);
     pass = 0;
 
@@ -215,11 +220,21 @@ int vect_to_rast(const char *vector_map, const char *raster_map, const char *fie
     update_labels(raster_map, vector_map, field, labelcolumn, use, value,
 		  column);
 
+#if 0
+    /* maximum possible numer of areas: number of centroids
+     * actual number of areas, currently unknown:
+     * number of areas with centroid that are within cat constraint
+     * and overlap with current region */
     if (nareas_all > 0)
 	G_message(_("Converted areas: %d of %d"), nareas,
-	          nareas_all - Vect_get_num_primitives(&Map, GV_CENTROID));
-    if (nplines_all > 0)
+	          Vect_get_num_primitives(&Map, GV_CENTROID));
+    /* maximum possible numer of lines: number of GV_LINE + GV_POINT
+     * actual number of lines, currently unknown:
+     * number of lines are within cat constraint
+     * and overlap with current region */
+    if (nlines > 0 && nplines_all > 0)
 	G_message(_("Converted points/lines: %d of %d"), nlines, nplines_all);
+#endif
 
     return 0;
 }
diff --git a/vector/v.to.rast3/v.to.rast3.html b/vector/v.to.rast3/v.to.rast3.html
index 5bc6f52..04149d1 100644
--- a/vector/v.to.rast3/v.to.rast3.html
+++ b/vector/v.to.rast3/v.to.rast3.html
@@ -31,4 +31,4 @@ non-null values are shown.</i>
 Original s.to.rast3: Jaro Hofierka, Geomodel s.r.o.<br>
 Updated by Radim Blazek
 
-<p><i>Last changed: $Date: 2015-08-25 00:15:04 +0200 (Tue, 25 Aug 2015) $</i>
+<p><i>Last changed: $Date: 2015-08-24 05:56:52 +0200 (Mon, 24 Aug 2015) $</i>
diff --git a/vector/v.transform/v.transform.html b/vector/v.transform/v.transform.html
index 02e1017..9fac6ec 100644
--- a/vector/v.transform/v.transform.html
+++ b/vector/v.transform/v.transform.html
@@ -80,7 +80,8 @@ The resulting map is a 3D vector map.
 <em>
 <a href="m.transform.html">m.transform</a>,
 <a href="i.rectify.html">i.rectify</a>,
-<a href="v.rectify.html">v.rectify</a>
+<a href="v.rectify.html">v.rectify</a>,
+<a href="r.region.html">r.region</a>
 </em>
 
 <h2>AUTHOR</h2>
@@ -88,4 +89,4 @@ The resulting map is a 3D vector map.
 Radim Blazek, ITC-irst, Trento, Italy,<br>
 Column support added by Martin Landa, FBK-irst (formerly ITC-irst), Trento, Italy (2007/09)
 
-<p><i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<p><i>Last changed: $Date: 2015-08-07 05:24:55 +0200 (Fri, 07 Aug 2015) $</i>
diff --git a/vector/v.type/v.type.html b/vector/v.type/v.type.html
index 0fcce77..75346fd 100644
--- a/vector/v.type/v.type.html
+++ b/vector/v.type/v.type.html
@@ -16,4 +16,4 @@ v.type input=map_l output=map_b from_type=line to_type=boundary
 
 Radim Blazek, ITC-Irst, Trento, Italy
 
-<p><i>Last changed: $Date: 2012-05-17 22:28:13 +0200 (Thu, 17 May 2012) $</i>
+<p><i>Last changed: $Date: 2012-05-17 13:28:13 -0700 (Thu, 17 May 2012) $</i>
diff --git a/vector/v.univar/v.univar.html b/vector/v.univar/v.univar.html
index b239594..a9ed6d1 100644
--- a/vector/v.univar/v.univar.html
+++ b/vector/v.univar/v.univar.html
@@ -128,4 +128,4 @@ Hamish Bowman, University of Otago, New Zealand<br>
 Martin Landa 
 
 <p>
-<i>Last changed: $Date: 2015-01-01 13:07:46 +0100 (Thu, 01 Jan 2015) $</i>
+<i>Last changed: $Date: 2015-01-01 13:05:46 +0100 (Thu, 01 Jan 2015) $</i>
diff --git a/vector/v.vect.stats/main.c b/vector/v.vect.stats/main.c
index d56e85b..c09d58d 100644
--- a/vector/v.vect.stats/main.c
+++ b/vector/v.vect.stats/main.c
@@ -29,7 +29,7 @@
 struct menu
 {
     stat_func *method;		/* routine to compute new value */
-    int half;			/* whether to add 0.5 to result */
+    int is_int;			/* whether the result is an integer (unused) */
     char *name;			/* method name */
     char *text;			/* menu display - full description */
 };
@@ -37,18 +37,18 @@ struct menu
 /* modify this table to add new methods */
 static struct menu menu[] = {
     {c_sum, 0, "sum", "sum of values"},
-    {c_ave, 1, "average", "average value"},
+    {c_ave, 0, "average", "average value"},
     {c_median, 0, "median", "median value"},
     {c_mode, 0, "mode", "most frequently occurring value"},
     {c_min, 0, "minimum", "lowest value"},
-    {c_minx, 0, "min_cat", "category number of lowest value"},
+    {c_minx, 1, "min_cat", "category number of lowest value"},
     {c_max, 0, "maximum", "highest value"},
-    {c_maxx, 0, "max_cat", "category number of highest value"},
+    {c_maxx, 1, "max_cat", "category number of highest value"},
     {c_range, 0, "range", "range of values"},
-    {c_stddev, 1, "stddev", "standard deviation"},
-    {c_var, 1, "variance", "statistical variance"},
-    {c_divr, 0, "diversity", "number of different values"},
-    {0, 0, 0, 0}
+    {c_stddev, 0, "stddev", "standard deviation"},
+    {c_var, 0, "variance", "statistical variance"},
+    {c_divr, 1, "diversity", "number of different values"},
+    {NULL, 0, NULL, NULL}
 };
 
 /* Structure to store info for each area category */
@@ -68,18 +68,14 @@ static int cmp_area(const void *pa, const void *pb)
     AREA_CAT *p1 = (AREA_CAT *) pa;
     AREA_CAT *p2 = (AREA_CAT *) pb;
 
-    if (p1->area_cat < p2->area_cat)
-	return -1;
-    if (p1->area_cat > p2->area_cat)
-	return 1;
-    return 0;
+    return (p1->area_cat - p2->area_cat);
 }
 
 int main(int argc, char *argv[])
 {
     char *p;
     int i, j, k;
-    int method, half, use_catno;
+    int method, use_catno;
     const char *mapset;
     struct GModule *module;
     struct Option *point_opt,	/* point vector */
@@ -258,7 +254,6 @@ int main(int argc, char *argv[])
 
     method = -1;
     use_catno = 0;
-    half = 0;
     if (method_opt->answer) {
 	/* get the method */
 	for (method = 0; (p = menu[method].name); method++)
@@ -287,6 +282,7 @@ int main(int argc, char *argv[])
     /* Open database driver */
     db_init_string(&stmt);
     Adriver = NULL;
+    AFi = NULL;
 
     if (!print_flag->answer) {
 
@@ -358,8 +354,6 @@ int main(int argc, char *argv[])
 	    }
 	}
     }
-    else
-	AFi = NULL;
 
     Pdriver = NULL;
     if (method_opt->answer) {
@@ -400,11 +394,7 @@ int main(int argc, char *argv[])
 	ctype =
 	    db_column_Ctype(Pdriver, PFi->table, point_column_opt->answer);
 
-	if (ctype == DB_C_TYPE_INT)
-	    half = menu[method].half;
-	else if (ctype == DB_C_TYPE_DOUBLE)
-	    half = 0;
-	else
+	if (ctype != DB_C_TYPE_INT && ctype != DB_C_TYPE_DOUBLE)
 	    G_fatal_error(_("column for points vector must be numeric"));
 
 	db_CatValArray_init(&cvarr);
@@ -443,6 +433,8 @@ int main(int argc, char *argv[])
 		Area_cat[nacats].count = 0;
 		Area_cat[nacats].nvalues = 0;
 		Area_cat[nacats].nalloc = 0;
+		Area_cat[nacats].values = NULL;
+		Area_cat[nacats].cats = NULL;
 		nacats++;
 		if (nacats >= nacatsalloc) {
 		    nacatsalloc += 100;
@@ -458,18 +450,22 @@ int main(int argc, char *argv[])
 
     G_debug(1, "%d cats loaded from vector (including duplicates)", nacats);
 
+    if (nacats == 0)
+	G_fatal_error(_("No area categories in vector <%s>, layer <%s>"),
+		      area_opt->answer, area_field_opt->answer);
+
     /* Sort by category */
     qsort((void *)Area_cat, nacats, sizeof(AREA_CAT), cmp_area);
 
     /* remove duplicate categories */
+    j = 1;
     for (i = 1; i < nacats; i++) {
-	if (Area_cat[i].area_cat == Area_cat[i - 1].area_cat) {
-	    for (j = i; j < nacats - 1; j++) {
-		Area_cat[j].area_cat = Area_cat[j + 1].area_cat;
-	    }
-	    nacats--;
+	if (Area_cat[i].area_cat != Area_cat[i - 1].area_cat) {
+	    Area_cat[j].area_cat = Area_cat[i].area_cat;
+	    j++;
 	}
     }
+    nacats = j;
 
     G_debug(1, "%d cats loaded from vector (unique)", nacats);
 
@@ -658,9 +654,7 @@ int main(int argc, char *argv[])
 	    statsvalue(&result, Area_cat[i].values, Area_cat[i].nvalues,
 			NULL);
 
-	    if (half)
-		result += 0.5;
-	    else if (use_catno)
+	    if (use_catno)
 		result = Area_cat[i].cats[(int)result];
 	}
 	if (print_flag->answer) {
diff --git a/vector/v.vect.stats/v.vect.stats.html b/vector/v.vect.stats/v.vect.stats.html
index 4b409f5..a39a9fc 100644
--- a/vector/v.vect.stats/v.vect.stats.html
+++ b/vector/v.vect.stats/v.vect.stats.html
@@ -145,6 +145,91 @@ v.vect.stats points=rand5000 area=myzipcodes_wake count_column=num_points \
 v.db.select myzipcodes_wake column=ZIPCODE_,ZIPNAME,avg_elev
 </pre></div>
 
+<h3>Point statistics in a hexagonal grid</h3>
+
+The grid extent and size is influenced by the current computational
+region. The extent is based on the vector map
+<em>points_of_interest</em> from the basic North Carolina sample dataset.
+
+<div class="code"><pre>
+g.region vector=points_of_interest res=2000 -pa
+</pre></div>
+
+The hexagonal grid is created using
+the <em><a href="v.mkgrid.html">v.mkgrid</a></em> module
+as a vector map based on the previously
+selected extent and size of the grid.
+
+<div class="code"><pre>
+v.mkgrid map=hexagons -h
+</pre></div>
+
+The <em>v.vect.stats</em> module
+counts the number of points and does one statistics on a selected
+column (here: <em>elev_m</em>).
+
+<div class="code"><pre>
+v.vect.stats points=points_of_interest areas=hexagons method=average \
+  points_column=elev_m count_column=count stats_column=average
+</pre></div>
+
+User should note that some of the points may be outside the grid
+since the hexagons cannot cover all the area around the edges
+(the computational region extent needs to be enlarged if all points
+should be considered).
+The last command sets the vector map color table to <tt>viridis</tt>
+based on the <tt>count</tt> column.
+
+<div class="code"><pre>
+v.colors map=hexagons use=attr column=average color=viridis
+</pre></div>
+
+<!--
+v.vect.stats points=points_of_interest areas=hexagons method=average \
+  points_column=elev_m count_column=count stats_column=average
+v.vect.stats points=points_of_interest areas=hexagons method=range \
+  points_column=elev_m count_column=count stats_column=range
+v.vect.stats points=points_of_interest areas=hexagons method=stddev \
+  points_column=elev_m count_column=count stats_column=stddev
+
+export GRASS_FONT=LiberationSans-Regular
+
+FILE=v_vect_stats.png
+
+rm $FILE
+
+d.mon cairo out=$FILE
+
+d.frame frame=f1 at=50,100,0,50 -c
+v.colors map=hexagons use=attr column=range color=viridis
+d.vect map=points_of_interest color=black fill_color=black width=1 icon=basic/point size=3
+d.text text="points" at=60,5 size=10 color=black
+
+d.frame frame=f2 at=50,100,50,100 -c
+v.colors map=hexagons use=attr column=count color=viridis
+d.vect map=hexagons where="count > 0"
+d.text text="count" at=60,5 size=10 color=black
+
+d.frame frame=f3 at=0,50,0,50 -c
+v.colors map=hexagons use=attr column=average color=viridis
+d.vect map=hexagons where="count > 0"
+d.text text="average" at=60,5 size=10 color=black
+
+d.frame frame=f4 at=0,50,50,100 -c
+v.colors map=hexagons use=attr column=stddev color=viridis
+d.vect map=hexagons where="count > 0"
+d.text text="stddev" at=60,5 size=10 color=black
+
+d.mon stop=cairo
+mogrify -trim $FILE
+-->
+
+<center>
+<img src="v_vect_stats.png"><br>
+Point statistics in a hexagonal grid (count of points, average of values
+associated with point, standard deviation)
+</center>
+
 
 <h2>SEE ALSO</h2>
 
@@ -152,7 +237,8 @@ v.db.select myzipcodes_wake column=ZIPCODE_,ZIPNAME,avg_elev
 <a href="v.distance.html">v.distance</a>,
 <a href="r.distance.html">r.distance</a>,
 <a href="v.rast.stats.html">v.rast.stats</a>,
-<a href="v.what.vect.html">v.what.vect</a>
+<a href="v.what.vect.html">v.what.vect</a>,
+<a href="v.mkgrid.html">v.mkgrid</a>
 </em>
 
 
@@ -161,4 +247,4 @@ v.db.select myzipcodes_wake column=ZIPCODE_,ZIPNAME,avg_elev
 Markus Metz
 
 <p>
-<i>Last changed: $Date: 2016-05-16 12:23:50 +0200 (Mon, 16 May 2016) $</i>
+<i>Last changed: $Date: 2016-08-23 04:07:22 +0200 (Tue, 23 Aug 2016) $</i>
diff --git a/vector/v.vect.stats/v_vect_stats.png b/vector/v.vect.stats/v_vect_stats.png
new file mode 100644
index 0000000..796c520
Binary files /dev/null and b/vector/v.vect.stats/v_vect_stats.png differ
diff --git a/vector/v.vol.rst/user3.c b/vector/v.vol.rst/user3.c
index 1d6b1f4..63b0385 100644
--- a/vector/v.vol.rst/user3.c
+++ b/vector/v.vol.rst/user3.c
@@ -62,7 +62,7 @@ int secpar_loop(int ngstc, int nszc, int i)
     int bmask = 1;
     static int first_t = 1;
 
-    ro = 57.295779;
+    ro = M_R2D;
     gradmin = 0.0;
     /*
        for (i = ngstc; i <= nszc; i++)
diff --git a/vector/v.vol.rst/v.vol.rst.html b/vector/v.vol.rst/v.vol.rst.html
index 827a495..aa3c3d6 100644
--- a/vector/v.vol.rst/v.vol.rst.html
+++ b/vector/v.vol.rst/v.vol.rst.html
@@ -306,4 +306,4 @@ University of Presov, Presov, Slovakia,
 <a href="mailto:hofierka at fhpv.unipo.sk">hofierka at fhpv.unipo.sk</a>,
 <a href="http://www.geomodel.sk">http://www.geomodel.sk</a>
 
-<p><i>Last changed: $Date: 2016-09-19 12:30:49 +0200 (Mon, 19 Sep 2016) $</i> 
+<p><i>Last changed: $Date: 2016-09-19 12:21:19 +0200 (Mon, 19 Sep 2016) $</i> 
diff --git a/vector/v.voronoi/v.voronoi.html b/vector/v.voronoi/v.voronoi.html
index 6dd66d6..da51964 100644
--- a/vector/v.voronoi/v.voronoi.html
+++ b/vector/v.voronoi/v.voronoi.html
@@ -92,4 +92,4 @@ GRASS 5 update, improvements: <a href="mailto:aaime at libero.it">Andrea Aime</a>,
 GRASS 5.7 update: Radim Blazek<br>
 Markus Metz
 
-<p><i>Last changed: $Date: 2015-05-22 17:06:44 +0200 (Fri, 22 May 2015) $</i>
+<p><i>Last changed: $Date: 2015-06-08 09:20:07 +0200 (Mon, 08 Jun 2015) $</i>
diff --git a/vector/v.what.rast/main.c b/vector/v.what.rast/main.c
index 370c008..d2a8cd8 100644
--- a/vector/v.what.rast/main.c
+++ b/vector/v.what.rast/main.c
@@ -9,7 +9,7 @@
  *
  *  PURPOSE:      Query raster map
  *                
- *  COPYRIGHT:    (C) 2001-2013 by the GRASS Development Team
+ *  COPYRIGHT:    (C) 2001-2015 by the GRASS Development Team
  * 
  *                This program is free software under the GNU General
  *                Public License (>=v2).  Read the file COPYING that
@@ -38,7 +38,7 @@ int main(int argc, char *argv[])
     DCELL *dcell_row, *prev_d_row, *next_d_row;
     int width;
     int row, col;
-    char buf[2000];
+    char buf[DB_SQL_MAX];
     struct
     {
 	struct Option *vect, *rast, *field, *type, *col, *where;
@@ -163,20 +163,31 @@ int main(int argc, char *argv[])
      */
 
     if (!print_flag->answer) {
-	/* Check column type */
 	col_type = db_column_Ctype(driver, Fi->table, opt.col->answer);
 
-	if (col_type == -1)
-	    G_fatal_error(_("Column <%s> not found"), opt.col->answer);
-
-	if (col_type != DB_C_TYPE_INT && col_type != DB_C_TYPE_DOUBLE)
-	    G_fatal_error(_("Column type not supported"));
-
-	if (out_type == CELL_TYPE && col_type == DB_C_TYPE_DOUBLE)
-	    G_warning(_("Raster type is integer and column type is float"));
-
-	if (out_type != CELL_TYPE && col_type == DB_C_TYPE_INT)
-	    G_warning(_("Raster type is float and column type is integer, some data lost!!"));
+	if (col_type == -1) {
+            /* column doesn't exist, create it */
+            G_important_message(_("Column <%s> not found in the table <%s>. Creating..."),
+                                opt.col->answer, Fi->table);
+            sprintf(buf, "ALTER TABLE \"%s\" ADD COLUMN \"%s\" %s",
+                    Fi->table, opt.col->answer,
+                    out_type == CELL_TYPE ? "INTEGER" : "DOUBLE PRECISION");
+            db_set_string(&stmt, buf);
+            if (db_execute_immediate(driver, &stmt) != DB_OK)
+                G_fatal_error(_("Unable to add column <%s> to table <%s>"),
+                              opt.col->answer, Fi->table);
+        }
+        else {
+            /* check column type */
+            if (col_type != DB_C_TYPE_INT && col_type != DB_C_TYPE_DOUBLE)
+                G_fatal_error(_("Column type not supported"));
+
+            if (out_type == CELL_TYPE && col_type == DB_C_TYPE_DOUBLE)
+                G_warning(_("Raster type is integer and column type is float"));
+
+            if (out_type != CELL_TYPE && col_type == DB_C_TYPE_INT)
+                G_warning(_("Raster type is float and column type is integer, some data lost!!"));
+        }
     }
 
     vtype = Vect_option_to_types(opt.type);
diff --git a/vector/v.what.rast/v.what.rast.html b/vector/v.what.rast/v.what.rast.html
index 717b817..c426887 100644
--- a/vector/v.what.rast/v.what.rast.html
+++ b/vector/v.what.rast/v.what.rast.html
@@ -2,33 +2,41 @@
 
 <em>v.what.rast</em> retrieves raster value from a given raster map for each point
 or centroid stored in a given vector map. It can update a <b>column</b> in the linked
-vector attribute table with the retrieved raster cell value or print it. The column type
-needs to be numeric (integer, float, double, ...).
+vector attribute table with the retrieved raster cell value or print it.
+
+<p>The column type needs to be numeric (integer, float, double,
+...). If the column doesn't exist in the vector attribute table than
+the module will create the new column of type corresponding with the
+input raster map.
+
 <p>
 If the <b>-p</b> flag is used, then the attribute table is not updated
-and the results are printed to <tt>stdout</tt>.
+and the results are printed to standard output.
 <p>
 If the <b>-i</b> flag is used, then the value to be uploaded to the database
 is interpolated from the four nearest raster cells values using an inverse
 distance weighting method (IDW). This is useful for cases when the vector
 point density is much higher than the raster cell size.
-<p>
-Points and centroid with shared category number cannot be processed.
-To solved this, unique categories may be added with <em>v.category</em> in
-a separate layer.
 
 <h2>NOTES</h2>
 
+<p>
+Points and centroid with shared category number cannot be processed.
+To solved this, unique categories may be added
+with <em><a href="v.category.html">v.category</a></em> in a separate
+layer.
+
+<p>
 If multiple points have the same category, the attribute value is set to NULL.
 If the raster value is NULL, then attribute value is set to NULL.
 <p>
 <em>v.what.rast</em> operates on the attribute table. To modify the vector
-geometry instead, use <em>v.drape</em>.
+geometry instead, use <em><a href="v.drape.html">v.drape</a></em>.
 <p>
 Categories and values are output unsorted with the print flag. To sort them
 pipe the output of this module into the UNIX <tt>sort</tt> tool
 (<tt>sort -n</tt>). If you need coordinates, after sorting use
-<em>v.out.ascii</em> and the UNIX <tt>paste</tt> tool
+<em><a href="v.out.ascii.html">v.out.ascii</a></em> and the UNIX <tt>paste</tt> tool
 (<tt>paste -d'|'</tt>). In the case of a NULL result, a "<tt>*</tt>"
 will be printed in lieu of the value.
 <p>
@@ -57,8 +65,7 @@ g.copy vector=geodetic_pts,mygeodetic_pts
 # set computational region to raster map to be queried
 g.region raster=elev_state_500m -p
 
-# add new column to existing table
-v.db.addcolumn map=mygeodetic_pts column="height double precision"
+# query raster cells (a new column will be added to existing table)
 v.what.rast map=mygeodetic_pts raster=elev_state_500m column=height
 
 # compare official geodetic heights to those of elevation model
@@ -110,4 +117,4 @@ Radim Blazek<br>
 Hamish Bowman (interpolation)
 
 <p>
-<i>Last changed: $Date: 2015-09-10 12:51:40 +0200 (Thu, 10 Sep 2015) $</i>
+<i>Last changed: $Date: 2016-04-09 18:43:25 +0200 (Sat, 09 Apr 2016) $</i>
diff --git a/vector/v.what.rast3/v.what.rast3.html b/vector/v.what.rast3/v.what.rast3.html
index 9bbcb84..f894282 100644
--- a/vector/v.what.rast3/v.what.rast3.html
+++ b/vector/v.what.rast3/v.what.rast3.html
@@ -55,4 +55,4 @@ v.univar map=pnts column=concentration type=point
 Soeren Gebbert, heavily based on v.what.rast by Radim Blazed
 
 <p>
-<i>Last changed: $Date: 2014-12-19 22:55:37 +0100 (Fri, 19 Dec 2014) $</i>
+<i>Last changed: $Date: 2014-12-19 22:17:36 +0100 (Fri, 19 Dec 2014) $</i>
diff --git a/vector/v.what/testsuite/test_vwhat_layers.py b/vector/v.what/testsuite/test_vwhat_layers.py
index ab8f404..c0d8d24 100644
--- a/vector/v.what/testsuite/test_vwhat_layers.py
+++ b/vector/v.what/testsuite/test_vwhat_layers.py
@@ -1,5 +1,6 @@
 # -*- coding: utf-8 -*-
-from grass.gunittest import TestCase, test
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import SimpleModule
 
 out1 = """East: 634243
@@ -111,6 +112,49 @@ text=yyy
 number=8.09
 """
 
+out4 = """East=634243
+North=226193
+
+Map=test_vector
+Mapset=...
+Type=Area
+Sq_Meters=633834.281
+Hectares=63.383
+Acres=156.624
+Sq_Miles=0.2447
+Layer=1
+Category=2
+Driver=...
+Database=...
+Table=t1
+Key_column=cat_
+Layer=1
+Category=1
+Driver=...
+Database=...
+Table=t1
+Key_column=cat_
+cat_=1
+text=Petrášová
+number=6
+"""
+
+out5 = """East=634243
+North=226193
+
+Map=test_vector
+Mapset=...
+Type=Area
+Sq_Meters=633834.281
+Hectares=63.383
+Acres=156.624
+Sq_Miles=0.2447
+Layer=2
+Category=3
+Layer=2
+Category=4
+"""
+
 
 class TestMultiLayerMap(TestCase):
 
@@ -155,6 +199,21 @@ class TestMultiLayerMap(TestCase):
         except ValueError:
             self.fail(msg="No JSON object could be decoded:\n" + self.vwhat.outputs.stdout)
 
+    def test_selected_layers(self):
+        self.vwhat.inputs.layer = -1
+        self.vwhat.flags['g'].value = True
+        self.vwhat.flags['a'].value = True
+        self.assertModule(self.vwhat)
+        self.assertLooksLike(reference=out3, actual=self.vwhat.outputs.stdout)
+
+        self.vwhat.inputs.layer = 1
+        self.assertModule(self.vwhat)
+        self.assertLooksLike(reference=out4, actual=self.vwhat.outputs.stdout)
+
+        self.vwhat.inputs.layer = 2
+        self.vwhat.flags['a'].value = False
+        self.assertModule(self.vwhat)
+        self.assertLooksLike(reference=out5, actual=self.vwhat.outputs.stdout)
 
 if __name__ == '__main__':
     test()
diff --git a/vector/v.what/testsuite/test_vwhat_ncspm.py b/vector/v.what/testsuite/test_vwhat_ncspm.py
index d3e9246..bd49158 100644
--- a/vector/v.what/testsuite/test_vwhat_ncspm.py
+++ b/vector/v.what/testsuite/test_vwhat_ncspm.py
@@ -1,12 +1,16 @@
 # -*- coding: utf-8 -*-
-from grass.gunittest import TestCase, test
+# Author: Anna Petrasova
+
+from grass.gunittest.case import TestCase
+from grass.gunittest.main import test
 from grass.gunittest.gmodules import SimpleModule
 
 
+# v.what map=schools,roadsmajor,elev_points,geology layer=-1,-1,-1,-1 coordinates=636661,226489 distance=1000
 out1 = """East: 636661
 North: 226489
 ------------------------------------------------------------------
-Map: bridges 
+Map: schools 
 Mapset: PERMANENT
 Nothing found.
 ------------------------------------------------------------------
@@ -18,29 +22,26 @@ Length: 2321.407296
 Layer: 1
 Category: 231
 ------------------------------------------------------------------
-Map: precip_30ynormals_3d 
+Map: elev_points 
 Mapset: PERMANENT
-Type: Point
-Id: 96
-Point height: 121.920000
-Layer: 1
-Category: 96
+Nothing found.
 ------------------------------------------------------------------
-Map: lakes 
+Map: geology 
 Mapset: PERMANENT
 Type: Area
-Sq Meters: 9397.338
-Hectares: 0.940
-Acres: 2.322
-Sq Miles: 0.0036
+Sq Meters: 261215323.454
+Hectares: 26121.532
+Acres: 64547.712
+Sq Miles: 100.8558
 Layer: 1
-Category: 7168
+Category: 217
 """
 
+# v.what map=schools,roadsmajor,elev_points,geology layer=-1,-1,-1,-1 coordinates=636661,226489 distance=1000 -ag
 out2 = """East: 636661
 North: 226489
 ------------------------------------------------------------------
-Map: bridges 
+Map: schools 
 Mapset: PERMANENT
 Nothing found.
 ------------------------------------------------------------------
@@ -64,65 +65,39 @@ PROPYEAR : 2015
 OBJECTID : 231
 SHAPE_LEN : 7616.150435
 ------------------------------------------------------------------
-Map: precip_30ynormals_3d 
+Map: elev_points 
 Mapset: PERMANENT
-Type: Point
-Id: 96
-Point height: 121.920000
-Layer: 1
-Category: 96
-
-Driver: ...
-Database: ...
-Table: precip_30ynormals_3d
-Key column: cat
-cat : 96
-station : 317079
-lat : 35.79444
-long : -78.69889
-elev : 121.92
-jan : 113.284
-feb : 89.662
-mar : 113.284
-apr : 75.692
-may : 102.362
-jun : 103.124
-jul : 110.49
-aug : 109.22
-sep : 108.458
-oct : 96.012
-nov : 77.724
-dec : 81.534
-annual : 1178.56
+Nothing found.
 ------------------------------------------------------------------
-Map: lakes 
+Map: geology 
 Mapset: PERMANENT
 Type: Area
-Sq Meters: 9397.338
-Hectares: 0.940
-Acres: 2.322
-Sq Miles: 0.0036
+Sq Meters: 261215323.454
+Hectares: 26121.532
+Acres: 64547.712
+Sq Miles: 100.8558
 Layer: 1
-Category: 7168
+Category: 217
 
 Driver: ...
 Database: ...
-Table: lakes
+Table: geology
 Key column: cat
-cat : 7168
-AREA : 101151.70356
-PERIMETER : 1549.92239
-FULL_HYDRO : 7169
-FULL_HYDR2 : 157379
-FTYPE : LAKE/POND
-FCODE : 39000
-NAME : 
+cat : 217
+onemap_pro : 261215328
+PERIMETER : 198808.71875
+GEOL250_ : 218
+GEOL250_ID : 217
+GEO_NAME : CZfg
+SHAPE_area : 261215323.454
+SHAPE_len : 198808.723525
 """
 
+# v.what map=schools,roadsmajor,elev_points,geology layer=-1,-1,-1,-1 coordinates=636661,226489 distance=1000 -ag
 out3 = """East=636661
 North=226489
 
-Map=bridges
+Map=schools
 Mapset=PERMANENT
 
 Map=roadsmajor
@@ -144,63 +119,37 @@ PROPYEAR=2015
 OBJECTID=231
 SHAPE_LEN=7616.150435
 
-Map=precip_30ynormals_3d
+Map=elev_points
 Mapset=PERMANENT
-Type=Point
-Id=96
-Point_height=121.920000
-Layer=1
-Category=96
-Driver=...
-Database=...
-Table=precip_30ynormals_3d
-Key_column=cat
-cat=96
-station=317079
-lat=35.79444
-long=-78.69889
-elev=121.92
-jan=113.284
-feb=89.662
-mar=113.284
-apr=75.692
-may=102.362
-jun=103.124
-jul=110.49
-aug=109.22
-sep=108.458
-oct=96.012
-nov=77.724
-dec=81.534
-annual=1178.56
 
-Map=lakes
+Map=geology
 Mapset=PERMANENT
 Type=Area
-Sq_Meters=9397.338
-Hectares=0.940
-Acres=2.322
-Sq_Miles=0.0036
+Sq_Meters=261215323.454
+Hectares=26121.532
+Acres=64547.712
+Sq_Miles=100.8558
 Layer=1
-Category=7168
+Category=217
 Driver=...
 Database=...
-Table=lakes
+Table=geology
 Key_column=cat
-cat=7168
-AREA=101151.70356
-PERIMETER=1549.92239
-FULL_HYDRO=7169
-FULL_HYDR2=157379
-FTYPE=LAKE/POND
-FCODE=39000
-NAME=
+cat=217
+onemap_pro=261215328
+PERIMETER=198808.71875
+GEOL250_=218
+GEOL250_ID=217
+GEO_NAME=CZfg
+SHAPE_area=261215323.454
+SHAPE_len=198808.723525
 """
 
+# v.what map=schools,roadsmajor,elev_points,geology layer=-1,-1,-1,-1 coordinates=636661,226489 distance=100
 out4 = """East: 636661
 North: 226489
 ------------------------------------------------------------------
-Map: bridges 
+Map: schools 
 Mapset: PERMANENT
 Nothing found.
 ------------------------------------------------------------------
@@ -208,26 +157,26 @@ Map: roadsmajor
 Mapset: PERMANENT
 Nothing found.
 ------------------------------------------------------------------
-Map: precip_30ynormals_3d 
+Map: elev_points 
 Mapset: PERMANENT
 Nothing found.
 ------------------------------------------------------------------
-Map: lakes 
+Map: geology 
 Mapset: PERMANENT
 Type: Area
-Sq Meters: 9397.338
-Hectares: 0.940
-Acres: 2.322
-Sq Miles: 0.0036
+Sq Meters: 261215323.454
+Hectares: 26121.532
+Acres: 64547.712
+Sq Miles: 100.8558
 Layer: 1
-Category: 7168
+Category: 217
 """
 
 
 class TestNCMaps(TestCase):
 
     def setUp(self):
-        self.vwhat = SimpleModule('v.what', map=['bridges', 'roadsmajor', 'precip_30ynormals_3d', 'lakes'],
+        self.vwhat = SimpleModule('v.what', map=['schools', 'roadsmajor', 'elev_points', 'geology'],
                                   layer=['-1', '-1', '-1', '-1'], coordinates=[636661, 226489],
                                   distance=1000)
 
diff --git a/vector/v.what/v.what.html b/vector/v.what/v.what.html
index 4aa6d9b..c74c637 100644
--- a/vector/v.what/v.what.html
+++ b/vector/v.what/v.what.html
@@ -42,4 +42,4 @@ Trevor Wiens<br>
 Edmonton, Alberta, Canada
 
 <p>
-<i>Last changed: $Date: 2014-10-22 12:22:05 +0200 (Wed, 22 Oct 2014) $</i>
+<i>Last changed: $Date: 2014-10-22 12:22:22 +0200 (Wed, 22 Oct 2014) $</i>
diff --git a/visualization/Makefile b/visualization/Makefile
index bda7bec..fd2dcdd 100644
--- a/visualization/Makefile
+++ b/visualization/Makefile
@@ -1,8 +1,7 @@
 MODULE_TOPDIR = ..
 
 SUBDIRS = \
-	ximgview \
-	wximgview
+	ximgview
 
 include $(MODULE_TOPDIR)/include/Make/Dir.make
 
diff --git a/visualization/wximgview/Makefile b/visualization/wximgview/Makefile
deleted file mode 100644
index 2e4b1bc..0000000
--- a/visualization/wximgview/Makefile
+++ /dev/null
@@ -1,25 +0,0 @@
-MODULE_TOPDIR = ../..
-
-PGM = wximgview
-
-EXTRA_CFLAGS = $(WXWIDGETSCXXFLAGS) -DWXINTL_NO_GETTEXT_MACRO
-
-LIBES = $(GISLIB) $(WXWIDGETSLIB)
-DEPENDENCIES = $(GISDEP)
-
-include $(MODULE_TOPDIR)/include/Make/Module.make
-
-# substitute OSX arch flags for wxpython
-ifneq ($(MACOSX_ARCHS),)
-CFLAGS := $(subst $(MACOSX_ARCHS),,$(CFLAGS)) $(MACOSX_ARCHS_WXPYTHON)
-CXXFLAGS := $(subst $(MACOSX_ARCHS),,$(CXXFLAGS)) $(MACOSX_ARCHS_WXPYTHON)
-LDFLAGS := $(subst $(MACOSX_ARCHS),,$(LDFLAGS)) $(MACOSX_ARCHS_WXPYTHON)
-endif
-
-LINK = $(CXX)
-
-ifneq ($(USE_WXWIDGETS),)
-ifneq ($(strip $(CXX)),)
-default: cmd
-endif
-endif
diff --git a/visualization/wximgview/main.cpp b/visualization/wximgview/main.cpp
deleted file mode 100644
index a38dba7..0000000
--- a/visualization/wximgview/main.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-
-/****************************************************************************
- *
- * MODULE:       wximgview
- * AUTHOR(S):    Glynn Clements
- * PURPOSE:      View BMP images from the PNG/cairo drivers
- * COPYRIGHT:    (C) 2010 Glynn Clements
- *
- *               This program is free software under the GNU General Public
- *               License (>=v2). Read the file COPYING that comes with GRASS
- *               for details.
- *
- *****************************************************************************/
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <signal.h>
-#include <errno.h>
-
-#ifdef __MINGW32__
-#include <Windows.h>
-#else
-#include <sys/mman.h>
-#endif
-
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-#include <sys/types.h>
-
-#include <wx/wx.h>
-
-extern "C" {
-#include <grass/gis.h>
-#include <grass/glocale.h>
-}
-
-#include "wximgview.h"
-
-#define HEADER_SIZE 64
-
-IMPLEMENT_APP_NO_MAIN(MyApp)
-
-BEGIN_EVENT_TABLE(MyFrame, wxFrame)
-EVT_ERASE_BACKGROUND(MyFrame::erase)
-EVT_PAINT(MyFrame::redraw)
-EVT_TIMER(wxID_ANY, MyFrame::tick)
-END_EVENT_TABLE()
-    ;
-const wxString MyFrame::title = wxString::FromAscii("Image Viewer");
-
-static const char *filename;
-static double fraction;
-
-void MyFrame::Create()
-{
-    timer = new wxTimer(this);
-    timer->Start(100, true);
-}
-
-void MyFrame::erase(wxEraseEvent &ev)
-{
-    ev.GetDC();
-}
-
-void MyFrame::draw()
-{
-    MyApp &app = wxGetApp();
-    wxSize size = GetSize();
-    int x0 = (size.GetWidth()  - app.i_width) / 2;
-    int y0 = (size.GetHeight() - app.i_height) / 2;
-    wxPaintDC dc(this);
-    wxImage image(app.i_width, app.i_height);
-
-    const unsigned char *p = app.imgbuf;
-    for (int y = 0; y < app.i_height; y++)
-	for (int x = 0; x < app.i_width; x++, p += 4)
-	    image.SetRGB(x, y, p[2], p[1], p[0]);
-
-    dc.DrawBitmap(wxBitmap(image), x0, y0, false);
-}
-
-void MyFrame::redraw(wxPaintEvent &ev)
-{
-    if (::fraction > 0.001) {
-	struct timeval tv0;
-	gettimeofday(&tv0, NULL);
-
-	draw();
-
-	struct timeval tv1;
-	gettimeofday(&tv1, NULL);
-
-	double last = (tv1.tv_sec - tv0.tv_sec) * 1e3 + (tv1.tv_usec - tv0.tv_usec) * 1e-3;
-	double delay = last / ::fraction;
-	timer->Start((int) delay, true);
-    }
-    else
-	draw();
-}
-
-void MyFrame::tick(wxTimerEvent &ev)
-{
-    Refresh();
-}
-
-static unsigned int get_2(const unsigned char **q)
-{
-    const unsigned char *p = *q;
-    unsigned int n = (p[0] << 0) | (p[1] << 8);
-
-    *q += 2;
-    return n;
-}
-
-static unsigned int get_4(const unsigned char **q)
-{
-    const unsigned char *p = *q;
-    unsigned int n = (p[0] << 0) | (p[1] << 8) | (p[2] << 16) | (p[3] << 24);
-
-    *q += 4;
-    return n;
-}
-
-int MyApp::read_bmp_header(const unsigned char *p)
-{
-    int size;
-
-    if (*p++ != 'B')
-	return 0;
-    if (*p++ != 'M')
-	return 0;
-
-    size = get_4(&p);
-
-    get_4(&p);
-
-    if (get_4(&p) != HEADER_SIZE)
-	return 0;
-
-    if (get_4(&p) != 40)
-	return 0;
-
-    i_width = get_4(&p);
-    i_height = -get_4(&p);
-
-    get_2(&p);
-    if (get_2(&p) != 32)
-	return 0;
-
-    if (get_4(&p) != 0)
-	return 0;
-    if (get_4(&p) != (unsigned int) i_width * i_height * 4)
-	return 0;
-
-    if (size != HEADER_SIZE + i_width * i_height * 4)
-	return 0;
-
-    get_4(&p);
-    get_4(&p);
-    get_4(&p);
-    get_4(&p);
-
-    return 1;
-}
-
-void MyApp::map_file()
-{
-    unsigned char header[HEADER_SIZE];
-    size_t size;
-    void *ptr;
-    int fd;
-
-    fd = open(::filename, O_RDONLY);
-    if (fd < 0)
-	G_fatal_error(_("Unable to open image file"));
-
-    if (read(fd, (char *) header, sizeof(header)) != sizeof(header))
-	G_fatal_error(_("Unable to read BMP header"));
-
-    if (!read_bmp_header(header))
-	G_fatal_error(_("Invalid BMP header"));
-
-    size = HEADER_SIZE + i_width * i_height * 4;
-
-#ifdef __MINGW32__
-    HANDLE handle = CreateFileMapping((HANDLE) _get_osfhandle(fd),
-				      NULL, PAGE_READONLY,
-				      0, size, NULL);
-    if (!handle)
-	return;
-    ptr = MapViewOfFile(handle, FILE_MAP_READ, 0, 0, size);
-    if (!ptr)
-	G_fatal_error(_("Unable to map image file"));
-#else
-    ptr = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, (off_t) 0);
-    if (ptr == MAP_FAILED)
-	G_fatal_error(_("Unable to map image file"));
-#endif
-
-    imgbuf = (unsigned char *)ptr + HEADER_SIZE;
-
-    close(fd);
-}
-
-static void dummy_handler(int sig)
-{
-    wxTimerEvent ev = wxTimerEvent();
-    wxPostEvent(wxGetApp().mainwin, ev);
-}
-
-static void set_handler(void)
-{
-#ifndef __MINGW32__
-    struct sigaction act;
-
-    act.sa_handler = &dummy_handler;
-    sigemptyset(&act.sa_mask);
-    act.sa_flags = 0;
-    sigaction(SIGUSR1, &act, NULL);
-#endif
-}
-
-bool MyApp::OnInit()
-{
-    map_file();
-
-    wxSize size(i_width, i_height);
-    mainwin = new MyFrame(size);
-    mainwin->Show();
-    SetTopWindow(mainwin);
-
-    set_handler();
-
-    return true;
-}
-
-int main(int argc, char **argv)
-{
-    struct GModule *module;
-    struct
-    {
-	struct Option *image, *percent;
-    } opt;
-
-    G_gisinit(argv[0]);
-
-    module = G_define_module();
-    G_add_keyword(_("display"));
-    G_add_keyword(_("graphics"));
-    G_add_keyword(_("raster"));
-    G_add_keyword(_("vector"));
-    G_add_keyword(_("visualization"));
-    module->description = _("View BMP images from the PNG driver.");
-
-    opt.image = G_define_standard_option(G_OPT_F_INPUT);
-    opt.image->key = "image";
-    opt.image->required = YES;
-    opt.image->gisprompt = "old_file,file,file";
-    opt.image->description = _("Image file");
-
-    opt.percent = G_define_option();
-    opt.percent->key = "percent";
-    opt.percent->type = TYPE_INTEGER;
-    opt.percent->required = NO;
-    opt.percent->multiple = NO;
-    opt.percent->description = _("Percentage of CPU time to use");
-    opt.percent->answer = "10";
-
-    if (G_parser(argc, argv))
-	exit(EXIT_FAILURE);
-
-    ::filename = opt.image->answer;
-    ::fraction = atoi(opt.percent->answer) / 100.0;
-
-    return wxEntry(argc, argv);
-
-    return EXIT_SUCCESS;
-}
-
diff --git a/visualization/wximgview/wximgview.h b/visualization/wximgview/wximgview.h
deleted file mode 100644
index 87773b1..0000000
--- a/visualization/wximgview/wximgview.h
+++ /dev/null
@@ -1,48 +0,0 @@
-
-// -*- c++ -*-
-
-#include <wx/wx.h>
-
-#ifndef WXIMGVIEW_H_
-#define WXIMGVIEW_H_
-
-class MyFrame: public wxFrame
-{
-private:
-    wxTimer *timer;
-
-    void draw();
-
-    static const wxString title;
-
-public:
-    MyFrame(const wxSize &size)
-	: wxFrame((wxFrame *)0, wxID_ANY, title, wxDefaultPosition, size)
-    { Create(); }
-
-    void redraw(wxPaintEvent &ev);
-    void erase(wxEraseEvent &ev);
-    void tick(wxTimerEvent &ev);
-
-private:
-    void Create();
-
-    DECLARE_EVENT_TABLE()
-};
-
-class MyApp: public wxApp
-{
-public:
-    virtual bool OnInit();
-
-public:
-    MyFrame *mainwin;
-    int i_width, i_height;
-    unsigned char *imgbuf;
-    double last;
-
-    int read_bmp_header(const unsigned char *p);
-    void map_file();
-};
-
-#endif // WXIMGVIEW_H_
diff --git a/visualization/wximgview/wximgview.html b/visualization/wximgview/wximgview.html
deleted file mode 100644
index 2dee233..0000000
--- a/visualization/wximgview/wximgview.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<h2>DESCRIPTION</h2>
-
-<i>wximgview</i> is a simple wxWidgets image viewer for 32-bpp BMP images, as
-can be created with the <em><a href="pngdriver.html">PNG</a></em> and
-<em><a href="cairodriver.html">cairo</a></em> drivers. The display is
-continually refreshed.
-
-<h2>NOTES</h2>
-
-The display driver must be configure to map the file, with
-<em>GRASS_RENDER_FILE_MAPPED=TRUE</em>. This ensures that the file will remain
-a constant size, rather than being truncated whenever it is updated.
-
-
-<h2>EXAMPLE</h2>
-
-(bash shell syntax)
-<div class="code"><pre>
-export GRASS_RENDER_FILE=map.bmp
-export GRASS_RENDER_WIDTH=640
-export GRASS_RENDER_HEIGHT=480
-export GRASS_RENDER_IMMEDIATE=cairo
-export GRASS_RENDER_FILE_MAPPED=TRUE
-export GRASS_RENDER_FILE_READ=TRUE
-
-d.erase
-wximgview $GRASS_RENDER_FILE percent=50 &
-d.rast elevation.dem
-d.vect roads
-</pre></div>
-
-
-<h2>SEE ALSO</h2>
-
-<em>
-<a href="pngdriver.html">PNG driver</a><br>
-<a href="cairodriver.html">cairo driver</a><br>
-<a href="ximgview.html">ximgview</a>
-</em>
-
-
-<h2>AUTHOR</h2>
-Glynn Clements
-
-<p><i>Last changed: $Date: 2014-11-03 18:56:30 +0100 (Mon, 03 Nov 2014) $</i>
diff --git a/visualization/ximgview/ximgview.html b/visualization/ximgview/ximgview.html
index 19ef6ee..7a4960d 100644
--- a/visualization/ximgview/ximgview.html
+++ b/visualization/ximgview/ximgview.html
@@ -42,4 +42,4 @@ d.vect roads
 <h2>AUTHOR</h2>
 Glynn Clements
 
-<p><i>Last changed: $Date: 2014-11-03 18:56:30 +0100 (Mon, 03 Nov 2014) $</i>
+<p><i>Last changed: $Date: 2014-10-27 18:15:56 +0100 (Mon, 27 Oct 2014) $</i>

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



More information about the Pkg-grass-devel mailing list